diff --git a/.mailmap b/.mailmap index 3aadbbedfca..436b557ee63 100644 --- a/.mailmap +++ b/.mailmap @@ -6,8 +6,8 @@ Laurent Destailleur eldy Laurent Destailleur Laurent Destailleur Laurent Destailleur eldy10 Laurent Destailleur Laurent Destailleur -Regis Houssin Regis Houssin -Regis Houssin Régis Houssin +Regis Houssin Regis Houssin +Regis Houssin Régis Houssin Juanjo Menent simnandez Juanjo Menent Juanjo Menent Juanjo Menent Simnandez diff --git a/.travis.yml b/.travis.yml index 7f9e907de40..07b1b41b295 100644 --- a/.travis.yml +++ b/.travis.yml @@ -137,7 +137,7 @@ install: - | echo "Installing PHP CodeSniffer" - composer -n require squizlabs/php_codesniffer ^2 + composer -n require squizlabs/php_codesniffer ^3 echo - | @@ -211,8 +211,7 @@ before_script: mysql -D travis < dev/initdemo/mysqldump_dolibarr_3.5.0.sql fi if [ "$DB" = 'postgresql' ]; then - #pgsql travis < dev/initdemo/mysqldump_dolibarr_3.5.0.sql - #pgloader mysql://root:pass@127.0.0.1/base postgresql://dolibarrowner@127.0.0.1/dolibarr + #pgloader mysql://root:pass@127.0.0.1/dolibarr_35 postgresql://dolibarrowner:dolibarrownerpass@127.0.0.1/dolibarr_dev pgloader mysql://root@127.0.0.1/travis postgresql:///travis fi # TODO: SQLite @@ -221,7 +220,7 @@ before_script: - | export CONF_FILE=htdocs/conf/conf.php echo "Setting up Dolibarr $CONF_FILE" - echo ' $CONF_FILE + echo ' $CONF_FILE echo '$'dolibarr_main_url_root=\'http://127.0.0.1\'';' >> $CONF_FILE echo '$'dolibarr_main_document_root=\'$TRAVIS_BUILD_DIR/htdocs\'';' >> $CONF_FILE echo '$'dolibarr_main_data_root=\'$TRAVIS_BUILD_DIR/documents\'';' >> $CONF_FILE @@ -242,8 +241,9 @@ before_script: - | echo "Create documents directory and set permissions" # and admin/temp subdirectory needed for unit tests - mkdir -p documents/admin/temp - echo "first line" > documents/dolibarr.log + mkdir -p $TRAVIS_BUILD_DIR/documents/admin/temp + sudo chmod -R a+rwx $TRAVIS_BUILD_DIR/documents + echo "***** First line of dolibarr.log" > $TRAVIS_BUILD_DIR/documents/dolibarr.log echo @@ -339,33 +339,28 @@ script: php upgrade.php 7.0.0 8.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade700800.log php upgrade2.php 7.0.0 8.0.0 MAIN_MODULE_TICKETSUP > $TRAVIS_BUILD_DIR/upgrade700800-2.log php step5.php 7.0.0 8.0.0 > $TRAVIS_BUILD_DIR/upgrade700800-3.log + php upgrade.php 8.0.0 9.0.0 ignoredbversion > $TRAVIS_BUILD_DIR/upgrade800900.log + php upgrade2.php 8.0.0 9.0.0 > $TRAVIS_BUILD_DIR/upgrade800900-2.log + php step5.php 8.0.0 9.0.0 > $TRAVIS_BUILD_DIR/upgrade800900-3.log cd - set +e echo - #cat $TRAVIS_BUILD_DIR/upgrade400500-2.log - #cat $TRAVIS_BUILD_DIR/upgrade500600.log - #cat $TRAVIS_BUILD_DIR/upgrade500600-2.log - #cat $TRAVIS_BUILD_DIR/upgrade500600-3.log - #cat $TRAVIS_BUILD_DIR/upgrade600700-2.log - cat /tmp/dolibarr_install.log + #cat /tmp/dolibarr_install.log - | echo "Unit testing" # Ensure we catch errors. Set this to +e if you want to go to the end to see dolibarr.log file. set -e phpunit -d memory_limit=-1 -c test/phpunit/phpunittest.xml test/phpunit/AllTests.php + phpunitresult=$? + echo "Phpunit return code = $phpunitresult" set +e -- | - #echo "Output dolibarr.log" - #cat documents/dolibarr.log - after_script: - | - # Dolibarr log file - #echo "After script" - #cat documents/dolibarr.log - + echo "After script - Output 50 latest lines of dolibarr.log" + ls $TRAVIS_BUILD_DIR/documents + tail -n 50 $TRAVIS_BUILD_DIR/documents/dolibarr.log after_success: - | @@ -373,20 +368,24 @@ after_success: after_failure: - | - echo Failure - # This part of code seems to be never executed, error or not ??? - echo "Debugging informations" + echo Failure detected, so we show samples of log to help diagnose + # This part of code is executed only if previous commande that fails are enclosed with set +e # Upgrade log files - cat *.log - echo "Debugging informations" + for ficlog in `ls $TRAVIS_BUILD_DIR/*.log` + do + echo "Debugging informations for file $ficlog" + #cat $ficlog + done # Apache log file + echo "Debugging informations for file apache error.log" sudo cat /var/log/apache2/error.log - # Dolibarr log file - cat documents/dolibarr.log if [ "$DEBUG" = true ]; then + # Dolibarr log file + echo "Debugging informations for file dolibarr.log (latest 50 lines)" + tail -n 50 $TRAVIS_BUILD_DIR/documents/dolibarr.log # MariaDB log file - sudo cat /var/log/mysql/error.log + echo "Debugging informations for file mysql error.log" + sudo tail -n 50 /var/log/mysql/error.log # TODO: PostgreSQL log file echo fi - diff --git a/COPYRIGHT b/COPYRIGHT index bd3565c3bd1..83f72bb558b 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -53,6 +53,10 @@ JsTimezoneDetect 1.0.6 MIT License Yes SwaggerUI 2.0.24 GPL-2+ Yes JS library to offer the REST API explorer Ace 1.2.8 BSD Yes JS library to get code syntaxique coloration in a textarea. +Image libraries +Octicons 8.1 MIT Yes + + For licenses compatibility informations: http://www.gnu.org/licenses/licenses.en.html diff --git a/ChangeLog b/ChangeLog index c0e3e277009..e4fbf63e758 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,32 @@ English Dolibarr ChangeLog -------------------------------------------------------------- +***** ChangeLog for 9.0.0 compared to 8.0.0 ***** +For Users: +NEW: Stable module: Website +NEW: Stable module: WebDAV +NEW: Stable module: Module Builder +NEW: Stable module "Skype" has been replaced with module "Social Networks" to support more services. +NEW: Experimental module "TakePos" +NEW: Experimental module "Ticket" +NEW: Dolibarr can provide information in page title when multicompany is enabled of not, making + Android application like DoliDroid able to provide native features for multicompany module. +NEW: Compatibility with PHP 7.3 + + +For developers: +* Code changes to be more compatible with PSR2 +* Removed trigger USER_LOGOUT, USER_LOGIN, USER_LOGIN_FAILED (Some hooks are already dedicated for that) + +WARNING: + +Following changes may create regressions for some external modules, but were necessary to make Dolibarr better: +* If you use some links like viewimages.php?modulepart=mycompany&file=... in your external modules, you must + replace them with links like viewimages.php?modulepart=mycompany&file=logos/... (note that link change only for + modulepart=mycompany that now works like others). +* Hidden option MAIN_PDF_SHIPPING_DISPLAY_AMOUNT_HT has been renamed into SHIPPING_PDF_DISPLAY_AMOUNT_HT + + ***** ChangeLog for 8.0.3 compared to 8.0.2 ***** FIX: #9161 FIX: #9432 @@ -151,18 +177,17 @@ FIX: Table llx_facture_rec_extrafields missing after migration ***** ChangeLog for 8.0.0 compared to 7.0.0 ***** - For Users: NEW: Experimental module: Ticket NEW: Experimental module: WebDAV -NEW: Accept anonmymous events (no user assigned) +NEW: Accept anonymous events (no user assigned) NEW: Accountancy - Add import on general ledger NEW: Accountancy - Show journal name on journal page and hide button draft export (Add an option in admin) -NEW: Can create event from record card of a company and member -NEW: Add a button to create Stripe customer from the Payment mode tab +NEW: Can create event from record card of a company and/or member +NEW: Add a button to create Stripe customer from the customer Payment mode tab NEW: Add accounting account number on product tooltip -NEW: add any predefined mail content -NEW: Add arrows to navigate into containers in website module +NEW: Add any predefined mail content +NEW: Add arrows to navigate into containers in experimental website module NEW: Add a tab to specify accountant/auditor of the company NEW: Add Date delivery and Availability on Propals List NEW: Add date in goods reception supplier order table @@ -249,7 +274,7 @@ NEW: Filter export model is now by user NEW: Finish implementation of option PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES NEW: generalize use of button to create new element from list NEW: hidden conf AGENDA_NB_WEEKS_IN_VIEW_PER_USER to set nb weeks to show into per user view -NEW: hidden conf to assign category to thirparty that are not customer nor prospect nor supplier +NEW: hidden conf to assign category to thirparty that are neither customer nor prospect or supplier NEW: hidden conf to set nb weeks to show into user view NEW: hidden option MAIN_DISABLE_FREE_LINES NEW: improve way of adding users/sales representative to thirdparty diff --git a/README-FR.md b/README-FR.md index a9745bb8dbb..19d4ae25df9 100644 --- a/README-FR.md +++ b/README-FR.md @@ -16,8 +16,8 @@ Dolibarr est distribué sous les termes de la licence GNU General Public License ## INSTALLER DOLIBARR Si vous n'avez pas de connaissances techniques, et que vous recherchez -un programme d'installation qui install Dolibarr ERP/CRM en quelques clics, -vous devez vous réorienter vers DoliWamp (la version tout-en-un +un programme d'installation qui installe Dolibarr ERP/CRM en quelques clics, +vous devez vous ré-orienter vers DoliWamp (la version tout-en-un de Dolibarr pour Windows), DoliDeb (la version tout-en-un pour Debian ou Ubuntu) ou DoliRpm (la version tout-en-un de Dolibarr pour Fedora, Redhat, OpenSuse, Mandriva ou Mageia). @@ -25,39 +25,39 @@ OpenSuse, Mandriva ou Mageia). Vous pouvez les télécharger depuis la rubrique *download* du portail officiel: https://www.dolibarr.org/ -Si vous avez déjà installé un serveur Web avec PHP et une base de donnée (MariaDb/MySql/PostgreSql), +Si vous avez déjà installé un serveur Web avec PHP et une base de données (MariaDb/MySql/PostgreSql), vous pouvez installer Dolibarr avec cette version de la manière suivante: -- Copier le répertoire "dolibarr" et son contenu dans la racine de votre serveur - web, ou bien copier le répertoire sur le serveur et configurer ce serveur pour +- Copiez le répertoire "dolibarr" et son contenu dans la racine de votre serveur + web, ou bien copiez le répertoire sur le serveur et configurez ce serveur pour utiliser "dolibarr/htdocs" comme racine d'un nouveau virtual host (ce second choix requiert des compétences et habilitations en administration du serveur web). -- Créer un fichier vide "htdocs/conf/conf.php" et attribuer les permissions +- Créez un fichier vide "htdocs/conf/conf.php" et attribuez les permissions en lecture et écriture pour le user du serveur web (les permissions en écriture seront supprimées une fois l'installation terminée). -- Depuis votre navigateur, appeler la page "install/" de dolibarr. L'url dépend - du choix fait à la première etape: +- Depuis votre navigateur, appelez la page "install/" de dolibarr. L'url dépend + du choix fait à la première étape: http://localhost/dolibarr/htdocs/install/ ou http://yourdolibarrvirtualhost/install/ -- Suivez les instructions fournies par l'installeur... +- Suivez les instructions fournies par l'installateur... ## METTRE A JOUR DOLIBARR -Pour mettre a jour Dolibarr depuis une vieille version vers celle ci: -- Ecraser les vieux fichiers dans le vieux repertoire 'dolibarr' par les fichiers +Pour mettre à jour Dolibarr depuis une vieille version vers celle ci: +- Ecrasez les vieux fichiers dans le vieux répertoire 'dolibarr' par les fichiers fournis dans ce nouveau package. -- Au prochain accès, Dolibarr proposera la page de "mise a jour" des données (si necessaire). - Si un fichier install.lock existe pour vérouiller le processus de mise à jour, il sera demandé de le supprimer manuellement (vous devriez trouver le fichier install.lock dans le répertoire utilisé pour stocker les documents générés ou transféré sur le serveur. Dans la plupart des cas, c'est le répertoire appelé "documents") - -*Note: Le processus de migration peut etre lancé manuellement et plusieurs fois, sans risque, en appelant la page /install/* +- Au prochain accès, Dolibarr proposera la page de "mise à jour" des données (si nécessaire). + Si un fichier install.lock existe pour verrouiller le processus de mise à jour, il sera demandé de le supprimer manuellement (vous devriez trouver le fichier install.lock dans le répertoire utilisé pour stocker les documents générés ou transférés sur le serveur. Dans la plupart des cas, c'est le répertoire appelé "documents") + +*Note: Le processus de migration peut être lancé manuellement et plusieurs fois, sans risque, en appelant la page /install/* ## CE QUI EST NOUVEAU @@ -94,14 +94,15 @@ Voir fichier ChangeLog. - Gestion de marque-pages - Gestion des promesses de dons -- Gestion de la TVA NPR (non perçue récupérable - pour les utilisateurs français des DOM-TOM) - Rapports - Imports/Exports des données +- Support des codes barres +- Calcul des marges - Connectivité LDAP - Intégratn de ClickToDial - Intégration RSS - Intégation Skype -- Intégration de système de paiements (Paypal, Strip, Paybox...) +- Intégration de système de paiements (Paypal, Stripe, Paybox...) - … ### Divers: @@ -114,9 +115,18 @@ Voir fichier ChangeLog. - Application simple à utiliser. - Requiert PHP et MariaDb, Mysql ou Postgresql (Voir versions exactes sur https://wiki.dolibarr.org/index.php/Prérequis). - Compatible avec toutes les offres Cloud du marché respectant les prérequis de base de données et PHP. -- Code simple et facilement personnalisable (pas de framework lourd; mécanisme de hook et triggers). - APIs. - Génération PDF et ODT des éléments (factures, propositions commerciales, commandes, bons expéditions, etc...) +- Code simple et facilement personnalisable (pas de framework lourd; mécanisme de hook et triggers). +- Support natif de nombreuses fonctions spécifiques aux pays comme: + - La tax espagnole TE et ISPF + - Gestion de la TVA NPR (non perçue récupérable - pour les utilisateurs français des DOM-TOM) + - La loi française Finance 2016 et logiciels de caisse + - La double taxe canadienne + - Le timbre fiscal tunisien + - Numérotation de facture de l'argentines (avec type A,B,C...) + - Compatible avec vos processus RGPD + - ... - … ### Extension @@ -126,7 +136,7 @@ Dolibarr peut aussi être étendu à volonté avec l'ajout de module/application ## CE QUE DOLIBARR NE PEUT PAS (ENCORE) FAIRE -Voici un liste de fonctionnalites pas encore gérées par Dolibarr: +Voici un liste de fonctionnalités pas encore gérées par Dolibarr: - Dolibarr ne contient pas de module de Gestion de la paie. - Les tâches du module de gestion de projets n'ont pas de dépendances entre elle. - Dolibarr n'embarque pas de Webmail intégré nativement. @@ -135,7 +145,7 @@ Voici un liste de fonctionnalites pas encore gérées par Dolibarr: ## DOCUMENTATION -Les documentations utilisateur, développeur et traducteur sont disponible sous forme de ressources de la communautés via la site [Wiki](https://wiki.dolibarr.org). +La documentation utilisateur, développeur et traducteur est disponible sous forme de ressources de la communauté via le site [Wiki](https://wiki.dolibarr.org). ## CONTRIBUER diff --git a/README.md b/README.md index 5feec47e56f..c38d0ca7dd1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,11 @@ # DOLIBARR ERP & CRM -![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/8.0.svg) ![Downloads per day](https://img.shields.io/sourceforge/dm/dolibarr.svg) +![Downloads per day](https://img.shields.io/sourceforge/dm/dolibarr.svg) +[![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) + +|6|7|8|develop| +|----------|----------|----------|----------| +|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/6.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/7.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/8.0.svg)|![Build status](https://img.shields.io/travis/Dolibarr/dolibarr/develop.svg)| Dolibarr ERP & CRM is a modern software package to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda…). @@ -125,7 +130,6 @@ See the [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog) - Donations management - Reporting - Data export/import -- Thirdparties and/or products categories - Barcodes support - Margin calculations - LDAP connectivity @@ -147,13 +151,15 @@ See the [ChangeLog](https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog) - Compatible with all Cloud solutions that match MySQL, PHP or PostgreSQL prerequisites. - APIs. - An easy to understand, maintain and develop code (PHP with no heavy framework; trigger and hook architecture) -- Support for country specific features: +- Support a lot of country specific features: - Spanish Tax RE and ISPF - French NPR VAT rate (VAT called "Non Perçue Récupérable" for DOM-TOM) - Canadian double taxes (federal/province) and other countries using cumulative VAT - Tunisian tax stamp - Argentina invoice numbering using A,B,C... - Compatible with [European directives](http://europa.eu/legislation_summaries/taxation/l31057_en.htm) (2006/112/CE ... 2010/45/UE) + - Compatible with European GDPR rules + - ... - PDF or ODT generation for invoice, proposals, orders... - … diff --git a/build/aps/APP-META-1.1.xml b/build/aps/APP-META-1.1.xml deleted file mode 100644 index 1394da4d4be..00000000000 --- a/build/aps/APP-META-1.1.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - Dolibarr ERP-CRM - __VERSION__ - __RELEASE__ - http://www.dolibarr.org/ - - Dolibarr - http://www.dolibarr.org/ - - - - Laurent Destailleur - http://www.nltechno.com - uuid:e743ee30-9fe8-11e0-a32e-0025115d642c - - - Dolibarr ERP-CRM, the easy to use software to manage small or medium companies, freelancers or foundations - -Dolibarr is a free modular software (you see only -features you need) to manage small and medium companies, freelancers -or foundations. -This OpenSource software is designed to provide all features you need to -manage information on many aspects of your business -into an intuitive and user-friendly graphical interface -It's an OpenSource software you can install on a web server or as a -standalone software. Dolibarr is designed to provide simplicity to end-user. - - - - Screenshot 1 - - - - See http://www.dolibarr.org/files/ChangeLog - - - - Back office/Billing - Back office/Accounting and Financial - Back office/Customer Relationship Management - Back office/Enterprise Resource Planning - - - en - fr - es - de - pt - - - - - - - - - GPL-3.0+ - COPYING - - - - Dolibarr instance - Dolibarr services - - - - - - - - - - - - - - mysql - mbstring - false - - main - dolibarr - false - mysql - 4.3.1 - - - - - - dolibarr - 35000000 - - - php - - - - - - php - - - - - \ No newline at end of file diff --git a/build/aps/APP-META-1.2.xml b/build/aps/APP-META-1.2.xml deleted file mode 100644 index 1ce51207dd8..00000000000 --- a/build/aps/APP-META-1.2.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - dolibarr - Dolibarr - __VERSION__ - __RELEASE__ - http://www.dolibarr.org/ - - Dolibarr - http://www.dolibarr.org/ - - - - Laurent Destailleur - http://www.nltechno.com - uuid:e743ee30-9fe8-11e0-a32e-0025115d642c - - - Dolibarr ERP - CRM, the easy to use software to manage small or medium companies, freelancers or foundations - -Dolibarr is a free modular software (you see only -features you need) to manage small and medium companies, freelancers -or foundations. -This OpenSource software is designed to provide all features you need to -manage information on many aspects of your business -into an intuitive and user-friendly graphical interface -It's an OpenSource software you can install on a web server or as a -standalone software. Dolibarr is designed to provide simplicity to end-user. - - - - Screenshot 1 - - - - See http://www.dolibarr.org/files/ChangeLog - - - - Back office/Billing - Back office/Accounting and Financial - Back office/Customer Relationship Management - Back office/Enterprise Resource Planning - - - en - fr - es - de - pt - - - - - - - - - GPL-3.0+ - COPYING - - - - Dolibarr instance - - - - - - - - - - Administrator's preferences - - Administrator's login - -Please make sure the text you entered starts with a letter and continues with either numbers, letters, underscores or hyphens. - - - - Password - - - - - - - mysql - mbstring - false - - main - dolibarr - false - mysql - 4.3.1 - - - - - - dolibarr - 35000000 - - - php - - - - - - php - - - - - \ No newline at end of file diff --git a/build/aps/Limitations of APS Support in the Panel.html b/build/aps/Limitations of APS Support in the Panel.html deleted file mode 100644 index 51ba8e18378..00000000000 --- a/build/aps/Limitations of APS Support in the Panel.html +++ /dev/null @@ -1,89 +0,0 @@ - - Limitations of APS Support in the Panel - - - - - - - - -

Limitations of APS Support in the Panel

-

About This Document

-

This document is addressed to independent software -vendors who plan to distribute web applications among the Panel users. -The aim of the document is to help vendors find out whether they can -package their applications to APS to make them available through the -Panel.

-

The document does not contain information about -Application Packaging Standard itself or give application packaging -instructions. It focuses on how the Panel implements APS and what APS -packages are not supported by this implementation.

-

-

APS Support in the Panel

-

Application Packaging Standard (APS) - is a set of rules that defines a web application packaging format. This - standard is designed to ease the integration of applications in a -service provider's infrastructure. It covers provisioning, management, -and integration of cloud-based services and applications.

-

The Panel uses APS to offer third-party applications to hosting customers. These applications are presented in APS catalog, where the customers can buy or download them.

-

Currently, the Panel does not support all aspects of - APS. Therefore, customers may have problems trying to install certain -applications. To find out whether your application is compatible with -the Panel, see section Plesk Panel Restrictions.

-

You can find more information about APS at http://www.apsstandard.org/.

-

APS specification and supporting documents are available at http://www.apsstandard.org/isv/documentation/.

-

-

Restrictions on Packages Processing

-

The current Panel version has restrictions on APS -applications processing. If an application requires performing -restricted actions, the Panel will not install it. Particularly, these -actions are the following:

-
  • Sending e-mails or processing incoming mail.

    See Mail aspect of APS in APS Format Specification v1.2, section 8.8. Mail at http://www.apsstandard.org/r/doc/package-format-specification-1.2/index.html#s.aspects.mail

    -
  • Changing the DNS resource records of an environment where the application works.

    See DNS aspect in APS Format Specification v1.2, section 8.10. DNS Zone at http://www.apsstandard.org/r/doc/package-format-specification-1.2/index.html#s.aspects.dns

    -
  • Installing third-party dynamic libraries (*.dll, *.so).

    See DLL aspect in APS Format Specification v1.2, section 8.11. DLL Content Processing Method at http://www.apsstandard.org/r/doc/package-format-specification-1.2/index.html#s.aspects.dll

    -
  • Updating older version of application with -complex changes in application settings or deployment logic. According -to APS, such updates are called upgrades. For more information on the application updates, see the APS Format Specification v1.2, section 5.1.15 Updates at http://www.apsstandard.org/r/doc/package-format-specification-1.2/index.html#s.metadata.common.update

If - you need you application to perform these actions, consider other ways -of integration with the Panel: API RPC, modules or Panel Notifications.

-

Also, the Panel does not support the following actions defined in the application package:

-
  • Checking application settings for consistency via verification script. For more information on verification scripts, see the APS Format Specification v1.2, section 5.3.3 Verification Script at http://www.apsstandard.org/r/doc/package-format-specification-1.2/index.html#s.metadata.provision.verification-script
  • Processing application resource usage reports defined by resource counters and passed by resource script . For more information on resource counters and resource scripts, see the APS Format Specification v1.2, section 5.2.6. Resources at http://www.apsstandard.org/r/doc/package-format-specification-1.2/index.html#s.metadata.service.resources and 5.3.3 Resources Script at http://www.apsstandard.org/r/doc/package-format-specification-1.2/index.html#s.metadata.provision.resource-script
  • - -

    Copyright Notice

    - - - - - - - - - - - - - - - - - - - -

    -Please send us your feedback on this help page.

    - - - - -
- \ No newline at end of file diff --git a/build/aps/Limitations of APS Support in the Panel_fichiers/highlight.js b/build/aps/Limitations of APS Support in the Panel_fichiers/highlight.js deleted file mode 100644 index d6386c93792..00000000000 --- a/build/aps/Limitations of APS Support in the Panel_fichiers/highlight.js +++ /dev/null @@ -1,64 +0,0 @@ -function last(href) -{ - var ret = href.split("/"); - return ret[ret.length-1]; -} - -function StopProcess() -{ -LeftFrame = parent.TOC.document.location.href; -LeftFrame = last(LeftFrame); -if (LeftFrame == "dhtml_search.htm") return 1 -else return 0; -} - - - -function highlightTOC(str) { - - - - - - if (StopProcess()) return; - try { - - str = str || parent.BODY.document.location.href; - uri = last(str); - list = parent.TOC.document.getElementsByTagName("a"); - for(i=0; i - * - * For a fairly comprehensive set of languages see the - * README - * file that came with this source. At a minimum, the lexer should work on a - * number of languages including C and friends, Java, Python, Bash, SQL, HTML, - * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk - * and a subset of Perl, but, because of commenting conventions, doesn't work on - * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. - *

- * Usage:

    - *
  1. include this source file in an html page via - * {@code } - *
  2. define style rules. See the example page for examples. - *
  3. mark the {@code
    } and {@code } tags in your source with
    - *    {@code class=prettyprint.}
    - *    You can also use the (html deprecated) {@code } tag, but the pretty
    - *    printer needs to do more substantial DOM manipulations to support that, so
    - *    some css styles may not be preserved.
    - * </ol>
    - * That's it.  I wanted to keep the API as simple as possible, so there's no
    - * need to specify which language the code is in, but if you wish, you can add
    - * another class to the {@code <pre>} or {@code <code>} element to specify the
    - * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    - * starts with "lang-" followed by a file extension, specifies the file type.
    - * See the "lang-*.js" files in this directory for code that implements
    - * per-language file handlers.
    - * <p>
    - * Change log:<br>
    - * cbeust, 2006/08/22
    - * <blockquote>
    - *   Java annotations (start with "@") are now captured as literals ("lit")
    - * </blockquote>
    - * @requires console
    - */
    -
    -// JSLint declarations
    -/*global console, document, navigator, setTimeout, window */
    -
    -/**
    - * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    - * UI events.
    - * If set to {@code false}, {@code prettyPrint()} is synchronous.
    - */
    -window['PR_SHOULD_USE_CONTINUATION'] = true;
    -
    -/** the number of characters between tab columns */
    -window['PR_TAB_WIDTH'] = 8;
    -
    -/** Walks the DOM returning a properly escaped version of innerHTML.
    -  * @param {Node} node
    -  * @param {Array.<string>} out output buffer that receives chunks of HTML.
    -  */
    -window['PR_normalizedHtml']
    -
    -/** Contains functions for creating and registering new language handlers.
    -  * @type {Object}
    -  */
    -  = window['PR']
    -
    -/** Pretty print a chunk of code.
    -  *
    -  * @param {string} sourceCodeHtml code as html
    -  * @return {string} code as html, but prettier
    -  */
    -  = window['prettyPrintOne']
    -/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    -  * {@code class=prettyprint} and prettify them.
    -  * @param {Function?} opt_whenDone if specified, called when the last entry
    -  *     has been finished.
    -  */
    -  = window['prettyPrint'] = void 0;
    -
    -/** browser detection. @extern @returns false if not IE, otherwise the major version. */
    -window['_pr_isIE6'] = function () {
    -  var ieVersion = navigator && navigator.userAgent &&
    -      navigator.userAgent.match(/\bMSIE ([678])\./);
    -  ieVersion = ieVersion ? +ieVersion[1] : false;
    -  window['_pr_isIE6'] = function () { return ieVersion; };
    -  return ieVersion;
    -};
    -
    -
    -(function () {
    -  // Keyword lists for various languages.
    -  var FLOW_CONTROL_KEYWORDS =
    -      "break continue do else for if return while ";
    -  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    -      "double enum extern float goto int long register short signed sizeof " +
    -      "static struct switch typedef union unsigned void volatile ";
    -  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    -      "new operator private protected public this throw true try typeof ";
    -  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    -      "concept concept_map const_cast constexpr decltype " +
    -      "dynamic_cast explicit export friend inline late_check " +
    -      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    -      "template typeid typename using virtual wchar_t where ";
    -  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    -      "abstract boolean byte extends final finally implements import " +
    -      "instanceof null native package strictfp super synchronized throws " +
    -      "transient ";
    -  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    -      "as base by checked decimal delegate descending event " +
    -      "fixed foreach from group implicit in interface internal into is lock " +
    -      "object out override orderby params partial readonly ref sbyte sealed " +
    -      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    -  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    -      "debugger eval export function get null set undefined var with " +
    -      "Infinity NaN ";
    -  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    -      "goto if import last local my next no our print package redo require " +
    -      "sub undef unless until use wantarray while BEGIN END ";
    -  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    -      "elif except exec finally from global import in is lambda " +
    -      "nonlocal not or pass print raise try with yield " +
    -      "False True None ";
    -  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    -      " defined elsif end ensure false in module next nil not or redo rescue " +
    -      "retry self super then true undef unless until when yield BEGIN END ";
    -  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    -      "function in local set then until ";
    -  var ALL_KEYWORDS = (
    -      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    -      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    -
    -  // token style names.  correspond to css classes
    -  /** token style for PHP variables */
    -  var PR_VAR = 'vr';
    -  /** token style for a string literal */
    -  var PR_STRING = 'str';
    -  /** token style for a keyword */
    -  var PR_KEYWORD = 'kwd';
    -  /** token style for a comment */
    -  var PR_COMMENT = 'com';
    -  /** token style for a type */
    -  var PR_TYPE = 'typ';
    -  /** token style for a literal value.  e.g. 1, null, true. */
    -  var PR_LITERAL = 'lit';
    -  /** token style for a punctuation string. */
    -  var PR_PUNCTUATION = 'pun';
    -  /** token style for a punctuation string. */
    -  var PR_PLAIN = 'pln';
    -
    -  /** token style for an sgml tag. */
    -  var PR_TAG = 'tag';
    -  /** token style for a markup declaration such as a DOCTYPE. */
    -  var PR_DECLARATION = 'dec';
    -  /** token style for embedded source. */
    -  var PR_SOURCE = 'src';
    -  /** token style for an sgml attribute name. */
    -  var PR_ATTRIB_NAME = 'atn';
    -  /** token style for an sgml attribute value. */
    -  var PR_ATTRIB_VALUE = 'atv';
    -
    -  /**
    -   * A class that indicates a section of markup that is not code, e.g. to allow
    -   * embedding of line numbers within code listings.
    -   */
    -  var PR_NOCODE = 'nocode';
    -
    -  /** A set of tokens that can precede a regular expression literal in
    -    * javascript.
    -    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    -    * list, but I've removed ones that might be problematic when seen in
    -    * languages that don't support regular expression literals.
    -    *
    -    * <p>Specifically, I've removed any keywords that can't precede a regexp
    -    * literal in a syntactically legal javascript program, and I've removed the
    -    * "in" keyword since it's not a keyword in many languages, and might be used
    -    * as a count of inches.
    -    *
    -    * <p>The link a above does not accurately describe EcmaScript rules since
    -    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    -    * very well in practice.
    -    *
    -    * @private
    -    */
    -  var REGEXP_PRECEDER_PATTERN = function () {
    -      var preceders = [
    -          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    -          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    -          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    -          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    -          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    -          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    -          "||=", "~" /* handles =~ and !~ */,
    -          "break", "case", "continue", "delete",
    -          "do", "else", "finally", "instanceof",
    -          "return", "throw", "try", "typeof"
    -          ];
    -      var pattern = '(?:^^|[+-]';
    -      for (var i = 0; i < preceders.length; ++i) {
    -        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    -      }
    -      pattern += ')\\s*';  // matches at end, and matches empty string
    -      return pattern;
    -      // CAVEAT: this does not properly handle the case where a regular
    -      // expression immediately follows another since a regular expression may
    -      // have flags for case-sensitivity and the like.  Having regexp tokens
    -      // adjacent is not valid in any language I'm aware of, so I'm punting.
    -      // TODO: maybe style special characters inside a regexp as punctuation.
    -    }();
    -
    -  // Define regexps here so that the interpreter doesn't have to create an
    -  // object each time the function containing them is called.
    -  // The language spec requires a new object created even if you don't access
    -  // the $1 members.
    -  var pr_amp = /&/g;
    -  var pr_lt = /</g;
    -  var pr_gt = />/g;
    -  var pr_quot = /\"/g;
    -  /** like textToHtml but escapes double quotes to be attribute safe. */
    -  function attribToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;')
    -        .replace(pr_quot, '&quot;');
    -  }
    -
    -  /** escapest html special characters to html. */
    -  function textToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;');
    -  }
    -
    -
    -  var pr_ltEnt = /&lt;/g;
    -  var pr_gtEnt = /&gt;/g;
    -  var pr_aposEnt = /&apos;/g;
    -  var pr_quotEnt = /&quot;/g;
    -  var pr_ampEnt = /&amp;/g;
    -  var pr_nbspEnt = /&nbsp;/g;
    -  /** unescapes html to plain text. */
    -  function htmlToText(html) {
    -    var pos = html.indexOf('&');
    -    if (pos < 0) { return html; }
    -    // Handle numeric entities specially.  We can't use functional substitution
    -    // since that doesn't work in older versions of Safari.
    -    // These should be rare since most browsers convert them to normal chars.
    -    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
    -      var end = html.indexOf(';', pos);
    -      if (end >= 0) {
    -        var num = html.substring(pos + 3, end);
    -        var radix = 10;
    -        if (num && num.charAt(0) === 'x') {
    -          num = num.substring(1);
    -          radix = 16;
    -        }
    -        var codePoint = parseInt(num, radix);
    -        if (!isNaN(codePoint)) {
    -          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
    -                  html.substring(end + 1));
    -        }
    -      }
    -    }
    -
    -    return html.replace(pr_ltEnt, '<')
    -        .replace(pr_gtEnt, '>')
    -        .replace(pr_aposEnt, "'")
    -        .replace(pr_quotEnt, '"')
    -        .replace(pr_nbspEnt, ' ')
    -        .replace(pr_ampEnt, '&');
    -  }
    -
    -  /** is the given node's innerHTML normally unescaped? */
    -  function isRawContent(node) {
    -    return 'XMP' === node.tagName;
    -  }
    -
    -  var newlineRe = /[\r\n]/g;
    -  /**
    -   * Are newlines and adjacent spaces significant in the given node's innerHTML?
    -   */
    -  function isPreformatted(node, content) {
    -    // PRE means preformatted, and is a very common case, so don't create
    -    // unnecessary computed style objects.
    -    if ('PRE' === node.tagName) { return true; }
    -    if (!newlineRe.test(content)) { return true; }  // Don't care
    -    var whitespace = '';
    -    // For disconnected nodes, IE has no currentStyle.
    -    if (node.currentStyle) {
    -      whitespace = node.currentStyle.whiteSpace;
    -    } else if (window.getComputedStyle) {
    -      // Firefox makes a best guess if node is disconnected whereas Safari
    -      // returns the empty string.
    -      whitespace = window.getComputedStyle(node, null).whiteSpace;
    -    }
    -    return !whitespace || whitespace === 'pre';
    -  }
    -
    -  function normalizedHtml(node, out, opt_sortAttrs) {
    -    switch (node.nodeType) {
    -      case 1:  // an element
    -        var name = node.tagName.toLowerCase();
    -
    -        out.push('<', name);
    -        var attrs = node.attributes;
    -        var n = attrs.length;
    -        if (n) {
    -          if (opt_sortAttrs) {
    -            var sortedAttrs = [];
    -            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
    -            sortedAttrs.sort(function (a, b) {
    -                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
    -              });
    -            attrs = sortedAttrs;
    -          }
    -          for (var i = 0; i < n; ++i) {
    -            var attr = attrs[i];
    -            if (!attr.specified) { continue; }
    -            out.push(' ', attr.name.toLowerCase(),
    -                     '="', attribToHtml(attr.value), '"');
    -          }
    -        }
    -        out.push('>');
    -        for (var child = node.firstChild; child; child = child.nextSibling) {
    -          normalizedHtml(child, out, opt_sortAttrs);
    -        }
    -        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
    -          out.push('<\/', name, '>');
    -        }
    -        break;
    -      case 3: case 4: // text
    -        out.push(textToHtml(node.nodeValue));
    -        break;
    -    }
    -  }
    -
    -  /**
    -   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    -   * matches the union o the sets o strings matched d by the input RegExp.
    -   * Since it matches globally, if the input strings have a start-of-input
    -   * anchor (/^.../), it is ignored for the purposes of unioning.
    -   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    -   * @return {RegExp} a global regex.
    -   */
    -  function combinePrefixPatterns(regexs) {
    -    var capturedGroupIndex = 0;
    -
    -    var needToFoldCase = false;
    -    var ignoreCase = false;
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.ignoreCase) {
    -        ignoreCase = true;
    -      } else if (/[a-z]/i.test(regex.source.replace(
    -                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    -        needToFoldCase = true;
    -        ignoreCase = false;
    -        break;
    -      }
    -    }
    -
    -    function decodeEscape(charsetPart) {
    -      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    -      switch (charsetPart.charAt(1)) {
    -        case 'b': return 8;
    -        case 't': return 9;
    -        case 'n': return 0xa;
    -        case 'v': return 0xb;
    -        case 'f': return 0xc;
    -        case 'r': return 0xd;
    -        case 'u': case 'x':
    -          return parseInt(charsetPart.substring(2), 16)
    -              || charsetPart.charCodeAt(1);
    -        case '0': case '1': case '2': case '3': case '4':
    -        case '5': case '6': case '7':
    -          return parseInt(charsetPart.substring(1), 8);
    -        default: return charsetPart.charCodeAt(1);
    -      }
    -    }
    -
    -    function encodeEscape(charCode) {
    -      if (charCode < 0x20) {
    -        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    -      }
    -      var ch = String.fromCharCode(charCode);
    -      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    -        ch = '\\' + ch;
    -      }
    -      return ch;
    -    }
    -
    -    function caseFoldCharset(charSet) {
    -      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    -          new RegExp(
    -              '\\\\u[0-9A-Fa-f]{4}'
    -              + '|\\\\x[0-9A-Fa-f]{2}'
    -              + '|\\\\[0-3][0-7]{0,2}'
    -              + '|\\\\[0-7]{1,2}'
    -              + '|\\\\[\\s\\S]'
    -              + '|-'
    -              + '|[^-\\\\]',
    -              'g'));
    -      var groups = [];
    -      var ranges = [];
    -      var inverse = charsetParts[0] === '^';
    -      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    -        var p = charsetParts[i];
    -        switch (p) {
    -          case '\\B': case '\\b':
    -          case '\\D': case '\\d':
    -          case '\\S': case '\\s':
    -          case '\\W': case '\\w':
    -            groups.push(p);
    -            continue;
    -        }
    -        var start = decodeEscape(p);
    -        var end;
    -        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    -          end = decodeEscape(charsetParts[i + 2]);
    -          i += 2;
    -        } else {
    -          end = start;
    -        }
    -        ranges.push([start, end]);
    -        // If the range might intersect letters, then expand it.
    -        if (!(end < 65 || start > 122)) {
    -          if (!(end < 65 || start > 90)) {
    -            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    -          }
    -          if (!(end < 97 || start > 122)) {
    -            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    -          }
    -        }
    -      }
    -
    -      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    -      // -> [[1, 12], [14, 14], [16, 17]]
    -      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    -      var consolidatedRanges = [];
    -      var lastRange = [NaN, NaN];
    -      for (var i = 0; i < ranges.length; ++i) {
    -        var range = ranges[i];
    -        if (range[0] <= lastRange[1] + 1) {
    -          lastRange[1] = Math.max(lastRange[1], range[1]);
    -        } else {
    -          consolidatedRanges.push(lastRange = range);
    -        }
    -      }
    -
    -      var out = ['['];
    -      if (inverse) { out.push('^'); }
    -      out.push.apply(out, groups);
    -      for (var i = 0; i < consolidatedRanges.length; ++i) {
    -        var range = consolidatedRanges[i];
    -        out.push(encodeEscape(range[0]));
    -        if (range[1] > range[0]) {
    -          if (range[1] + 1 > range[0]) { out.push('-'); }
    -          out.push(encodeEscape(range[1]));
    -        }
    -      }
    -      out.push(']');
    -      return out.join('');
    -    }
    -
    -    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    -      // Split into character sets, escape sequences, punctuation strings
    -      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    -      // include any of the above.
    -      var parts = regex.source.match(
    -          new RegExp(
    -              '(?:'
    -              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    -              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    -              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    -              + '|\\\\[0-9]+'  // a back-reference or octal escape
    -              + '|\\\\[^ux0-9]'  // other escape sequence
    -              + '|\\(\\?[:!=]'  // start of a non-capturing group
    -              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    -              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    -              + ')',
    -              'g'));
    -      var n = parts.length;
    -
    -      // Maps captured group numbers to the number they will occupy in
    -      // the output or to -1 if that has not been determined, or to
    -      // undefined if they need not be capturing in the output.
    -      var capturedGroups = [];
    -
    -      // Walk over and identify back references to build the capturedGroups
    -      // mapping.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          // groups are 1-indexed, so max group index is count of '('
    -          ++groupIndex;
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            capturedGroups[decimalValue] = -1;
    -          }
    -        }
    -      }
    -
    -      // Renumber groups and reduce capturing groups to non-capturing groups
    -      // where possible.
    -      for (var i = 1; i < capturedGroups.length; ++i) {
    -        if (-1 === capturedGroups[i]) {
    -          capturedGroups[i] = ++capturedGroupIndex;
    -        }
    -      }
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          ++groupIndex;
    -          if (capturedGroups[groupIndex] === undefined) {
    -            parts[i] = '(?:';
    -          }
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            parts[i] = '\\' + capturedGroups[groupIndex];
    -          }
    -        }
    -      }
    -
    -      // Remove any prefix anchors so that the output will match anywhere.
    -      // ^^ really does mean an anchored match though.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    -      }
    -
    -      // Expand letters to groupts to handle mixing of case-sensitive and
    -      // case-insensitive patterns if necessary.
    -      if (regex.ignoreCase && needToFoldCase) {
    -        for (var i = 0; i < n; ++i) {
    -          var p = parts[i];
    -          var ch0 = p.charAt(0);
    -          if (p.length >= 2 && ch0 === '[') {
    -            parts[i] = caseFoldCharset(p);
    -          } else if (ch0 !== '\\') {
    -            // TODO: handle letters in numeric escapes.
    -            parts[i] = p.replace(
    -                /[a-zA-Z]/g,
    -                function (ch) {
    -                  var cc = ch.charCodeAt(0);
    -                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    -                });
    -          }
    -        }
    -      }
    -
    -      return parts.join('');
    -    }
    -
    -    var rewritten = [];
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    -      rewritten.push(
    -          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    -    }
    -
    -    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    -  }
    -
    -  var PR_innerHtmlWorks = null;
    -  function getInnerHtml(node) {
    -    // inner html is hopelessly broken in Safari 2.0.4 when the content is
    -    // an html description of well formed XML and the containing tag is a PRE
    -    // tag, so we detect that case and emulate innerHTML.
    -    if (null === PR_innerHtmlWorks) {
    -      var testNode = document.createElement('PRE');
    -      testNode.appendChild(
    -          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
    -      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
    -    }
    -
    -    if (PR_innerHtmlWorks) {
    -      var content = node.innerHTML;
    -      // XMP tags contain unescaped entities so require special handling.
    -      if (isRawContent(node)) {
    -        content = textToHtml(content);
    -      } else if (!isPreformatted(node, content)) {
    -        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
    -            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
    -      }
    -      return content;
    -    }
    -
    -    var out = [];
    -    for (var child = node.firstChild; child; child = child.nextSibling) {
    -      normalizedHtml(child, out);
    -    }
    -    return out.join('');
    -  }
    -
    -  /** returns a function that expand tabs to spaces.  This function can be fed
    -    * successive chunks of text, and will maintain its own internal state to
    -    * keep track of how tabs are expanded.
    -    * @return {function (string) : string} a function that takes
    -    *   plain text and return the text with tabs expanded.
    -    * @private
    -    */
    -  function makeTabExpander(tabWidth) {
    -    var SPACES = '                ';
    -    var charInLine = 0;
    -
    -    return function (plainText) {
    -      // walk over each character looking for tabs and newlines.
    -      // On tabs, expand them.  On newlines, reset charInLine.
    -      // Otherwise increment charInLine
    -      var out = null;
    -      var pos = 0;
    -      for (var i = 0, n = plainText.length; i < n; ++i) {
    -        var ch = plainText.charAt(i);
    -
    -        switch (ch) {
    -          case '\t':
    -            if (!out) { out = []; }
    -            out.push(plainText.substring(pos, i));
    -            // calculate how much space we need in front of this part
    -            // nSpaces is the amount of padding -- the number of spaces needed
    -            // to move us to the next column, where columns occur at factors of
    -            // tabWidth.
    -            var nSpaces = tabWidth - (charInLine % tabWidth);
    -            charInLine += nSpaces;
    -            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
    -              out.push(SPACES.substring(0, nSpaces));
    -            }
    -            pos = i + 1;
    -            break;
    -          case '\n':
    -            charInLine = 0;
    -            break;
    -          default:
    -            ++charInLine;
    -        }
    -      }
    -      if (!out) { return plainText; }
    -      out.push(plainText.substring(pos));
    -      return out.join('');
    -    };
    -  }
    -
    -  var pr_chunkPattern = new RegExp(
    -      '[^<]+'  // A run of characters other than '<'
    -      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
    -      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
    -      // a probable tag that should not be highlighted
    -      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
    -      + '|<',  // A '<' that does not begin a larger chunk
    -      'g');
    -  var pr_commentPrefix = /^<\!--/;
    -  var pr_cdataPrefix = /^<!\[CDATA\[/;
    -  var pr_brPrefix = /^<br\b/i;
    -  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
    -
    -  /** split markup into chunks of html tags (style null) and
    -    * plain text (style {@link #PR_PLAIN}), converting tags which are
    -    * significant for tokenization (<br>) into their textual equivalent.
    -    *
    -    * @param {string} s html where whitespace is considered significant.
    -    * @return {Object} source code and extracted tags.
    -    * @private
    -    */
    -  function extractTags(s) {
    -    // since the pattern has the 'g' modifier and defines no capturing groups,
    -    // this will return a list of all chunks which we then classify and wrap as
    -    // PR_Tokens
    -    var matches = s.match(pr_chunkPattern);
    -    var sourceBuf = [];
    -    var sourceBufLen = 0;
    -    var extractedTags = [];
    -    if (matches) {
    -      for (var i = 0, n = matches.length; i < n; ++i) {
    -        var match = matches[i];
    -        if (match.length > 1 && match.charAt(0) === '<') {
    -          if (pr_commentPrefix.test(match)) { continue; }
    -          if (pr_cdataPrefix.test(match)) {
    -            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
    -            sourceBuf.push(match.substring(9, match.length - 3));
    -            sourceBufLen += match.length - 12;
    -          } else if (pr_brPrefix.test(match)) {
    -            // <br> tags are lexically significant so convert them to text.
    -            // This is undone later.
    -            sourceBuf.push('\n');
    -            ++sourceBufLen;
    -          } else {
    -            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
    -              // A <span class="nocode"> will start a section that should be
    -              // ignored.  Continue walking the list until we see a matching end
    -              // tag.
    -              var name = match.match(pr_tagNameRe)[2];
    -              var depth = 1;
    -              var j;
    -              end_tag_loop:
    -              for (j = i + 1; j < n; ++j) {
    -                var name2 = matches[j].match(pr_tagNameRe);
    -                if (name2 && name2[2] === name) {
    -                  if (name2[1] === '/') {
    -                    if (--depth === 0) { break end_tag_loop; }
    -                  } else {
    -                    ++depth;
    -                  }
    -                }
    -              }
    -              if (j < n) {
    -                extractedTags.push(
    -                    sourceBufLen, matches.slice(i, j + 1).join(''));
    -                i = j;
    -              } else {  // Ignore unclosed sections.
    -                extractedTags.push(sourceBufLen, match);
    -              }
    -            } else {
    -              extractedTags.push(sourceBufLen, match);
    -            }
    -          }
    -        } else {
    -          var literalText = htmlToText(match);
    -          sourceBuf.push(literalText);
    -          sourceBufLen += literalText.length;
    -        }
    -      }
    -    }
    -    return { source: sourceBuf.join(''), tags: extractedTags };
    -  }
    -
    -  /** True if the given tag contains a class attribute with the nocode class. */
    -  function isNoCodeTag(tag) {
    -    return !!tag
    -        // First canonicalize the representation of attributes
    -        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
    -                 ' $1="$2$3$4"')
    -        // Then look for the attribute we want.
    -        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
    -  }
    -
    -  /**
    -   * Apply the given language handler to sourceCode and add the resulting
    -   * decorations to out.
    -   * @param {number} basePos the index of sourceCode within the chunk of source
    -   *    whose decorations are already present on out.
    -   */
    -  function appendDecorations(basePos, sourceCode, langHandler, out) {
    -    if (!sourceCode) { return; }
    -    var job = {
    -      source: sourceCode,
    -      basePos: basePos
    -    };
    -    langHandler(job);
    -    out.push.apply(out, job.decorations);
    -  }
    -
    -  /** Given triples of [style, pattern, context] returns a lexing function,
    -    * The lexing function interprets the patterns to find token boundaries and
    -    * returns a decoration list of the form
    -    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    -    * where index_n is an index into the sourceCode, and style_n is a style
    -    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    -    * all characters in sourceCode[index_n-1:index_n].
    -    *
    -    * The stylePatterns is a list whose elements have the form
    -    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    -    *
    -    * Style is a style constant like PR_PLAIN, or can be a string of the
    -    * form 'lang-FOO', where FOO is a language extension describing the
    -    * language of the portion of the token in $1 after pattern executes.
    -    * E.g., if style is 'lang-lisp', and group 1 contains the text
    -    * '(hello (world))', then that portion of the token will be passed to the
    -    * registered lisp handler for formatting.
    -    * The text before and after group 1 will be restyled using this decorator
    -    * so decorators should take care that this doesn't result in infinite
    -    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    -    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    -    * '<script>foo()<\/script>', which would cause the current decorator to
    -    * be called with '<script>' which would not match the same rule since
    -    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    -    * the generic tag rule.  The handler registered for the 'js' extension would
    -    * then be called with 'foo()', and finally, the current decorator would
    -    * be called with '<\/script>' which would not match the original rule and
    -    * so the generic tag rule would identify it as a tag.
    -    *
    -    * Pattern must only match prefixes, and if it matches a prefix, then that
    -    * match is considered a token with the same style.
    -    *
    -    * Context is applied to the last non-whitespace, non-comment token
    -    * recognized.
    -    *
    -    * Shortcut is an optional string of characters, any of which, if the first
    -    * character, gurantee that this pattern and only this pattern matches.
    -    *
    -    * @param {Array} shortcutStylePatterns patterns that always start with
    -    *   a known character.  Must have a shortcut string.
    -    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    -    *   order if the shortcut ones fail.  May have shortcuts.
    -    *
    -    * @return {function (Object)} a
    -    *   function that takes source code and returns a list of decorations.
    -    */
    -  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    -    var shortcuts = {};
    -    var tokenizer;
    -    (function () {
    -      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    -      var allRegexs = [];
    -      var regexKeys = {};
    -      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    -        var patternParts = allPatterns[i];
    -        var shortcutChars = patternParts[3];
    -        if (shortcutChars) {
    -          for (var c = shortcutChars.length; --c >= 0;) {
    -            shortcuts[shortcutChars.charAt(c)] = patternParts;
    -          }
    -        }
    -        var regex = patternParts[1];
    -        var k = '' + regex;
    -        if (!regexKeys.hasOwnProperty(k)) {
    -          allRegexs.push(regex);
    -          regexKeys[k] = null;
    -        }
    -      }
    -      allRegexs.push(/[\0-\uffff]/);
    -      tokenizer = combinePrefixPatterns(allRegexs);
    -    })();
    -
    -    var nPatterns = fallthroughStylePatterns.length;
    -    var notWs = /\S/;
    -
    -    /**
    -     * Lexes job.source and produces an output array job.decorations of style
    -     * classes preceded by the position at which they start in job.source in
    -     * order.
    -     *
    -     * @param {Object} job an object like {@code
    -     *    source: {string} sourceText plain text,
    -     *    basePos: {int} position of job.source in the larger chunk of
    -     *        sourceCode.
    -     * }
    -     */
    -    var decorate = function (job) {
    -      var sourceCode = job.source, basePos = job.basePos;
    -      /** Even entries are positions in source in ascending order.  Odd enties
    -        * are style markers (e.g., PR_COMMENT) that run from that position until
    -        * the end.
    -        * @type {Array.<number|string>}
    -        */
    -      var decorations = [basePos, PR_PLAIN];
    -      var pos = 0;  // index into sourceCode
    -      var tokens = sourceCode.match(tokenizer) || [];
    -      var styleCache = {};
    -
    -      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    -        var token = tokens[ti];
    -        var style = styleCache[token];
    -        var match = void 0;
    -
    -        var isEmbedded;
    -        if (typeof style === 'string') {
    -          isEmbedded = false;
    -        } else {
    -          var patternParts = shortcuts[token.charAt(0)];
    -          if (patternParts) {
    -            match = token.match(patternParts[1]);
    -            style = patternParts[0];
    -          } else {
    -            for (var i = 0; i < nPatterns; ++i) {
    -              patternParts = fallthroughStylePatterns[i];
    -              match = token.match(patternParts[1]);
    -              if (match) {
    -                style = patternParts[0];
    -                break;
    -              }
    -            }
    -
    -            if (!match) {  // make sure that we make progress
    -              style = PR_PLAIN;
    -            }
    -          }
    -
    -          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    -          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    -            isEmbedded = false;
    -            style = PR_SOURCE;
    -          }
    -
    -          if (!isEmbedded) { styleCache[token] = style; }
    -        }
    -
    -        var tokenStart = pos;
    -        pos += token.length;
    -
    -        if (!isEmbedded) {
    -          decorations.push(basePos + tokenStart, style);
    -        } else {  // Treat group 1 as an embedded block of source code.
    -          var embeddedSource = match[1];
    -          var embeddedSourceStart = token.indexOf(embeddedSource);
    -          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    -          if (match[2]) {
    -            // If embeddedSource can be blank, then it would match at the
    -            // beginning which would cause us to infinitely recurse on the
    -            // entire token, so we catch the right context in match[2].
    -            embeddedSourceEnd = token.length - match[2].length;
    -            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    -          }
    -          var lang = style.substring(5);
    -          // Decorate the left of the embedded source
    -          appendDecorations(
    -              basePos + tokenStart,
    -              token.substring(0, embeddedSourceStart),
    -              decorate, decorations);
    -          // Decorate the embedded source
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceStart,
    -              embeddedSource,
    -              langHandlerForExtension(lang, embeddedSource),
    -              decorations);
    -          // Decorate the right of the embedded section
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceEnd,
    -              token.substring(embeddedSourceEnd),
    -              decorate, decorations);
    -        }
    -      }
    -      job.decorations = decorations;
    -    };
    -    return decorate;
    -  }
    -
    -  /** returns a function that produces a list of decorations from source text.
    -    *
    -    * This code treats ", ', and ` as string delimiters, and \ as a string
    -    * escape.  It does not recognize perl's qq() style strings.
    -    * It has no special handling for double delimiter escapes as in basic, or
    -    * the tripled delimiters used in python, but should work on those regardless
    -    * although in those cases a single string literal may be broken up into
    -    * multiple adjacent string literals.
    -    *
    -    * It recognizes C, C++, and shell style comments.
    -    *
    -    * @param {Object} options a set of optional parameters.
    -    * @return {function (Object)} a function that examines the source code
    -    *     in the input job and builds the decoration list.
    -    */
    -  function sourceDecorator(options) {
    -    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    -    if (options['tripleQuotedStrings']) {
    -      // '''multi-line-string''', 'single-line-string', and double-quoted
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    -           null, '\'"']);
    -    } else if (options['multiLineStrings']) {
    -      // 'multi-line-string', "multi-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    -           null, '\'"`']);
    -    } else {
    -      // 'single-line-string', "single-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,
    -           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    -           null, '"\'']);
    -    }
    -    if (options['verbatimStrings']) {
    -      // verbatim-string-literal production from the C# grammar.  See issue 93.
    -      fallthroughStylePatterns.push(
    -          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    -    }
    -    if (options['hashComments']) {
    -      if (options['cStyleComments']) {
    -        // Stop C preprocessor declarations at an unclosed open comment
    -        shortcutStylePatterns.push(
    -            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    -             null, '#']);
    -        fallthroughStylePatterns.push(
    -            [PR_STRING,
    -             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    -             null]);
    -      } else {
    -        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    -      }
    -    }
    -    if (options['cStyleComments']) {
    -      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    -      fallthroughStylePatterns.push(
    -          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    -    }
    -    if (options['regexLiterals']) {
    -      var REGEX_LITERAL = (
    -          // A regular expression literal starts with a slash that is
    -          // not followed by * or / so that it is not confused with
    -          // comments.
    -          '/(?=[^/*])'
    -          // and then contains any number of raw characters,
    -          + '(?:[^/\\x5B\\x5C]'
    -          // escape sequences (\x5C),
    -          +    '|\\x5C[\\s\\S]'
    -          // or non-nesting character sets (\x5B\x5D);
    -          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    -          // finally closed by a /.
    -          + '/');
    -      fallthroughStylePatterns.push(
    -          ['lang-regex',
    -           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    -           ]);
    -    }
    -
    -    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    -    if (keywords.length) {
    -      fallthroughStylePatterns.push(
    -          [PR_KEYWORD,
    -           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    -    }
    -
    -    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    -    fallthroughStylePatterns.push(
    -        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    -        [PR_COMMENT,     /^.*?\*.*/],
    -		[PR_VAR, /^\$[a-z]{1}[a-z_]+/i, null],
    -		[PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    -        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_LITERAL,
    -         new RegExp(
    -             '^(?:'
    -             // A hex number
    -             + '0x[a-f0-9]+'
    -             // or an octal or decimal number,
    -             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    -             // possibly in scientific notation
    -             + '(?:e[+\\-]?\\d+)?'
    -             + ')'
    -             // with an optional modifier like UL for unsigned long
    -             + '[a-z]*', 'i'),
    -         null, '0123456789'],
    -        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
    -
    -    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    -  }
    -
    -  var decorateSource = sourceDecorator({
    -        'keywords': ALL_KEYWORDS,
    -        'hashComments': true,
    -        'cStyleComments': true,
    -        'multiLineStrings': true,
    -        'regexLiterals': true
    -      });
    -
    -  /** Breaks {@code job.source} around style boundaries in
    -    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
    -    * and leaves the result in {@code job.prettyPrintedHtml}.
    -    * @param {Object} job like {
    -    *    source: {string} source as plain text,
    -    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
    -    *                   html preceded by their position in {@code job.source}
    -    *                   in order
    -    *    decorations: {Array.<number|string} an array of style classes preceded
    -    *                 by the position at which they start in job.source in order
    -    * }
    -    * @private
    -    */
    -  function recombineTagsAndDecorations(job) {
    -    var sourceText = job.source;
    -    var extractedTags = job.extractedTags;
    -    var decorations = job.decorations;
    -
    -    var html = [];
    -    // index past the last char in sourceText written to html
    -    var outputIdx = 0;
    -
    -    var openDecoration = null;
    -    var currentDecoration = null;
    -    var tagPos = 0;  // index into extractedTags
    -    var decPos = 0;  // index into decorations
    -    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
    -
    -    var adjacentSpaceRe = /([\r\n ]) /g;
    -    var startOrSpaceRe = /(^| ) /gm;
    -    var newlineRe = /\r\n?|\n/g;
    -    var trailingSpaceRe = /[ \r\n]$/;
    -    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
    -
    -    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
    -    var isIE678 = window['_pr_isIE6']();
    -    var lineBreakHtml = (
    -        isIE678
    -        ? (job.sourceNode.tagName === 'PRE'
    -           // Use line feeds instead of <br>s so that copying and pasting works
    -           // on IE.
    -           // Doing this on other browsers breaks lots of stuff since \r\n is
    -           // treated as two newlines on Firefox.
    -           ? (isIE678 === 6 ? '&#160;\r\n' :
    -              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
    -           // IE collapses multiple adjacent <br>s into 1 line break.
    -           // Prefix every newline with '&#160;' to prevent such behavior.
    -           // &nbsp; is the same as &#160; but works in XML as well as HTML.
    -           : '&#160;<br />')
    -        : '<br />');
    -
    -    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
    -    // number of the first line.
    -    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
    -    var lineBreaker;
    -    if (numberLines) {
    -      var lineBreaks = [];
    -      for (var i = 0; i < 10; ++i) {
    -        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
    -      }
    -      var lineNum = numberLines[1] && numberLines[1].length 
    -          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
    -      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
    -      if (lineNum) {
    -        html.push(' value="', lineNum + 1, '"');
    -      }
    -      html.push('>');
    -      lineBreaker = function () {
    -        var lb = lineBreaks[++lineNum % 10];
    -        // If a decoration is open, we need to close it before closing a list-item
    -        // and reopen it on the other side of the list item.
    -        return openDecoration
    -            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
    -      };
    -    } else {
    -      lineBreaker = lineBreakHtml;
    -    }
    -
    -    // A helper function that is responsible for opening sections of decoration
    -    // and outputing properly escaped chunks of source
    -    function emitTextUpTo(sourceIdx) {
    -      if (sourceIdx > outputIdx) {
    -        if (openDecoration && openDecoration !== currentDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        if (!openDecoration && currentDecoration) {
    -          openDecoration = currentDecoration;
    -          html.push('<span class="', openDecoration, '">');
    -        }
    -        // This interacts badly with some wikis which introduces paragraph tags
    -        // into pre blocks for some strange reason.
    -        // It's necessary for IE though which seems to lose the preformattedness
    -        // of <pre> tags when their innerHTML is assigned.
    -        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
    -        // and it serves to undo the conversion of <br>s to newlines done in
    -        // chunkify.
    -        var htmlChunk = textToHtml(
    -            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
    -            .replace(lastWasSpace
    -                     ? startOrSpaceRe
    -                     : adjacentSpaceRe, '$1&#160;');
    -        // Keep track of whether we need to escape space at the beginning of the
    -        // next chunk.
    -        lastWasSpace = trailingSpaceRe.test(htmlChunk);
    -        html.push(htmlChunk.replace(newlineRe, lineBreaker));
    -        outputIdx = sourceIdx;
    -      }
    -    }
    -
    -    while (true) {
    -      // Determine if we're going to consume a tag this time around.  Otherwise
    -      // we consume a decoration or exit.
    -      var outputTag;
    -      if (tagPos < extractedTags.length) {
    -        if (decPos < decorations.length) {
    -          // Pick one giving preference to extractedTags since we shouldn't open
    -          // a new style that we're going to have to immediately close in order
    -          // to output a tag.
    -          outputTag = extractedTags[tagPos] <= decorations[decPos];
    -        } else {
    -          outputTag = true;
    -        }
    -      } else {
    -        outputTag = false;
    -      }
    -      // Consume either a decoration or a tag or exit.
    -      if (outputTag) {
    -        emitTextUpTo(extractedTags[tagPos]);
    -        if (openDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        html.push(extractedTags[tagPos + 1]);
    -        tagPos += 2;
    -      } else if (decPos < decorations.length) {
    -        emitTextUpTo(decorations[decPos]);
    -        currentDecoration = decorations[decPos + 1];
    -        decPos += 2;
    -      } else {
    -        break;
    -      }
    -    }
    -    emitTextUpTo(sourceText.length);
    -    if (openDecoration) {
    -      html.push('</span>');
    -    }
    -    if (numberLines) { html.push('</li></ol>'); }
    -    job.prettyPrintedHtml = html.join('');
    -  }
    -
    -  /** Maps language-specific file extensions to handlers. */
    -  var langHandlerRegistry = {};
    -  /** Register a language handler for the given file extensions.
    -    * @param {function (Object)} handler a function from source code to a list
    -    *      of decorations.  Takes a single argument job which describes the
    -    *      state of the computation.   The single parameter has the form
    -    *      {@code {
    -    *        source: {string} as plain text.
    -    *        decorations: {Array.<number|string>} an array of style classes
    -    *                     preceded by the position at which they start in
    -    *                     job.source in order.
    -    *                     The language handler should assigned this field.
    -    *        basePos: {int} the position of source in the larger source chunk.
    -    *                 All positions in the output decorations array are relative
    -    *                 to the larger source chunk.
    -    *      } }
    -    * @param {Array.<string>} fileExtensions
    -    */
    -  function registerLangHandler(handler, fileExtensions) {
    -    for (var i = fileExtensions.length; --i >= 0;) {
    -      var ext = fileExtensions[i];
    -      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    -        langHandlerRegistry[ext] = handler;
    -      } else if ('console' in window) {
    -        console['warn']('cannot override language handler %s', ext);
    -      }
    -    }
    -  }
    -  function langHandlerForExtension(extension, source) {
    -    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    -      // Treat it as markup if the first non whitespace character is a < and
    -      // the last non-whitespace character is a >.
    -      extension = /^\s*</.test(source)
    -          ? 'default-markup'
    -          : 'default-code';
    -    }
    -    return langHandlerRegistry[extension];
    -  }
    -  registerLangHandler(decorateSource, ['default-code']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [],
    -          [
    -		   [PR_PLAIN,       /^[^<?]+/],
    -           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    -           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    -           // Unescaped content in an unknown language
    -           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    -           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    -           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    -           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    -           // Unescaped content in javascript.  (Or possibly vbscript).
    -           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    -           // Contains unescaped stylesheet content
    -           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    -           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    -          ]),
    -      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [
    -		   [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    -           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    -           ],
    -          [
    -		  [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    -           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    -           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    -           [PR_PUNCTUATION,  /^[=<>\/]+/],
    -           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    -           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    -           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    -           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    -           ]),
    -      ['in.tag']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CPP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true
    -        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': 'null true false'
    -        }), ['json']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CSHARP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true,
    -          'verbatimStrings': true
    -        }), ['cs']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JAVA_KEYWORDS,
    -          'cStyleComments': true
    -        }), ['java']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': SH_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true
    -        }), ['bsh', 'csh', 'sh']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PYTHON_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'tripleQuotedStrings': true
    -        }), ['cv', 'py']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PERL_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['perl', 'pl', 'pm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': RUBY_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['rb']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JSCRIPT_KEYWORDS,
    -          'cStyleComments': true,
    -          'regexLiterals': true
    -        }), ['js']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    -
    -  function applyDecorator(job) {
    -    var sourceCodeHtml = job.sourceCodeHtml;
    -    var opt_langExtension = job.langExtension;
    -
    -    // Prepopulate output in case processing fails with an exception.
    -    job.prettyPrintedHtml = sourceCodeHtml;
    -
    -    try {
    -      // Extract tags, and convert the source code to plain text.
    -      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
    -      /** Plain text. @type {string} */
    -      var source = sourceAndExtractedTags.source;
    -      job.source = source;
    -      job.basePos = 0;
    -
    -      /** Even entries are positions in source in ascending order.  Odd entries
    -        * are tags that were extracted at that position.
    -        * @type {Array.<number|string>}
    -        */
    -      job.extractedTags = sourceAndExtractedTags.tags;
    -
    -      // Apply the appropriate language handler
    -      langHandlerForExtension(opt_langExtension, source)(job);
    -      // Integrate the decorations and tags back into the source code to produce
    -      // a decorated html string which is left in job.prettyPrintedHtml.
    -      recombineTagsAndDecorations(job);
    -    } catch (e) {
    -      if ('console' in window) {
    -        console['log'](e && e['stack'] ? e['stack'] : e);
    -      }
    -    }
    -  }
    -
    -  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
    -    var job = {
    -      sourceCodeHtml: sourceCodeHtml,
    -      langExtension: opt_langExtension
    -    };
    -    applyDecorator(job);
    -    return job.prettyPrintedHtml;
    -  }
    -
    -  function prettyPrint(opt_whenDone) {
    -    function byTagName(tn) { return document.getElementsByTagName(tn); }
    -    // fetch a list of nodes to rewrite
    -    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    -    var elements = [];
    -    for (var i = 0; i < codeSegments.length; ++i) {
    -      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    -        elements.push(codeSegments[i][j]);
    -      }
    -    }
    -    codeSegments = null;
    -
    -    var clock = Date;
    -    if (!clock['now']) {
    -      clock = { 'now': function () { return (new Date).getTime(); } };
    -    }
    -
    -    // The loop is broken into a series of continuations to make sure that we
    -    // don't make the browser unresponsive when rewriting a large page.
    -    var k = 0;
    -    var prettyPrintingJob;
    -
    -    function doWork() {
    -      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    -                     clock.now() + 250 /* ms */ :
    -                     Infinity);
    -      for (; k < elements.length && clock.now() < endTime; k++) {
    -        var cs = elements[k];
    -        if (cs.className && cs.className.indexOf('preformatted') >= 0) {
    -          // If the classes includes a language extensions, use it.
    -          // Language extensions can be specified like
    -          //     <pre class="prettyprint lang-cpp">
    -          // the language extension "cpp" is used to find a language handler as
    -          // passed to PR_registerLangHandler.
    -          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    -          if (langExtension) { langExtension = langExtension[1]; }
    -
    -          // make sure this is not nested in an already prettified element
    -          var nested = false;
    -          for (var p = cs.parentNode; p; p = p.parentNode) {
    -            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    -                 p.tagName === 'xmp') &&
    -                p.className && p.className.indexOf('preformatted') >= 0) {
    -              nested = true;
    -              break;
    -            }
    -          }
    -          if (!nested) {
    -            // fetch the content as a snippet of properly escaped HTML.
    -            // Firefox adds newlines at the end.
    -            var content = getInnerHtml(cs);
    -            content = content.replace(/(?:\r\n?|\n)$/, '');
    -
    -            // do the pretty printing
    -            prettyPrintingJob = {
    -              sourceCodeHtml: content,
    -              langExtension: langExtension,
    -              sourceNode: cs
    -            };
    -            applyDecorator(prettyPrintingJob);
    -            replaceWithPrettyPrintedHtml();
    -          }
    -        }
    -      }
    -      if (k < elements.length) {
    -        // finish up in a continuation
    -        setTimeout(doWork, 250);
    -      } else if (opt_whenDone) {
    -        opt_whenDone();
    -      }
    -    }
    -
    -    function replaceWithPrettyPrintedHtml() {
    -      var newContent = prettyPrintingJob.prettyPrintedHtml;
    -      if (!newContent) { return; }
    -      var cs = prettyPrintingJob.sourceNode;
    -
    -      // push the prettified html back into the tag.
    -      if (!isRawContent(cs)) {
    -        // just replace the old html with the new
    -        cs.innerHTML = newContent;
    -      } else {
    -        // we need to change the tag to a <pre> since <xmp>s do not allow
    -        // embedded tags such as the span tags used to attach styles to
    -        // sections of source code.
    -        var pre = document.createElement('PRE');
    -        for (var i = 0; i < cs.attributes.length; ++i) {
    -          var a = cs.attributes[i];
    -          if (a.specified) {
    -            var aname = a.name.toLowerCase();
    -            if (aname === 'class') {
    -              pre.className = a.value;  // For IE 6
    -            } else {
    -              pre.setAttribute(a.name, a.value);
    -            }
    -          }
    -        }
    -        pre.innerHTML = newContent;
    -
    -        // remove the old
    -        cs.parentNode.replaceChild(pre, cs);
    -        cs = pre;
    -      }
    -    }
    -
    -    doWork();
    -  }
    -
    -  window['PR_normalizedHtml'] = normalizedHtml;
    -  window['prettyPrintOne'] = prettyPrintOne;
    -  window['prettyPrint'] = prettyPrint;
    -  window['PR'] = {
    -        'combinePrefixPatterns': combinePrefixPatterns,
    -        'createSimpleLexer': createSimpleLexer,
    -        'registerLangHandler': registerLangHandler,
    -        'sourceDecorator': sourceDecorator,
    -        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    -        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    -        'PR_COMMENT': PR_COMMENT,
    -        'PR_DECLARATION': PR_DECLARATION,
    -        'PR_KEYWORD': PR_KEYWORD,
    -        'PR_LITERAL': PR_LITERAL,
    -        'PR_NOCODE': PR_NOCODE,
    -        'PR_PLAIN': PR_PLAIN,
    -        'PR_PUNCTUATION': PR_PUNCTUATION,
    -        'PR_SOURCE': PR_SOURCE,
    -        'PR_STRING': PR_STRING,
    -        'PR_TAG': PR_TAG,
    -        'PR_TYPE': PR_TYPE
    -      };
    -})();
    diff --git a/build/aps/Limitations of APS Support in the Panel_fichiers/stylesheet.css b/build/aps/Limitations of APS Support in the Panel_fichiers/stylesheet.css
    deleted file mode 100644
    index f791ddf4ea8..00000000000
    --- a/build/aps/Limitations of APS Support in the Panel_fichiers/stylesheet.css	
    +++ /dev/null
    @@ -1,1571 +0,0 @@
    -body
    -{ 
    -background: #FFFFFF
    -}
    -
    -/*ol.listalfa
    -{
    -        list-style-type: lower-alpha;
    -        list-style-position: outside;
    -        margin-top: 7pt;
    -        margin-bottom: 0pt;
    -        }*/
    -li.listalpha {
    -        list-style-type: lower-alpha;
    -		font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: 10pt;
    -        margin: 0px;
    -        padding: 0 0 6px 0;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -
    -/*ol.listalfa2
    -{
    -        list-style-type: lower-alpha;
    -        list-style-position: outside;
    -        margin-top: 7pt;
    -        margin-bottom: 0pt;
    -        }*/
    -li.listalpha2 {
    -        list-style-type: lower-alpha;
    -		font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #13152d;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -		  line-height: 10pt;
    -        margin: 0px;
    -        padding: 0 0 6px 0;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -
    -/*ol.listalfa3
    -{
    -        list-style-type: lower-alpha;
    -        list-style-position: outside;
    -        margin-top: 7pt;
    -        margin-bottom: 0pt;
    -        }*/
    -li.listalpha3 {
    -        list-style-type: lower-alpha;
    -		font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #13152d;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin: 0px;
    -        padding: 0 0 6px 0;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }	   
    -
    -/*li.listalpha2, li.listalpha, li.listalpha3
    -{
    -list-style-type: lower-alpha;
    -} */
    -
    -
    -li.tablelistbullet {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: 10pt;
    -        margin: 0px;
    -        padding: 5px;
    -	vertical-align: top;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -
    -
    -p.centered {
    -
    -        text-align: center;
    -}
    -
    -p.listcontinue3 {
    -    margin-left: 30pt;
    -  }
    -
    -.preformattedbold2ndlvl {
    -  display: block;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: bold;
    -        font-size: 10pt;
    -        color: #000000;
    -        background-color: #f4f4f4;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 0pt;
    -        margin-bottom: 0pt;
    -        margin-left: 20pt;
    -        margin-right: 6pt;
    -        padding-top: 1pt;
    -        padding-bottom: 1pt;
    -        padding-left: 5pt;
    -        padding-right: 5pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -
    -}
    -
    -
    -.preformattedseclevel {
    -        display: block;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 10pt;
    -        color: #000000;
    -        background-color: #f4f4f4;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 0pt;
    -        margin-bottom: 0pt;
    -        margin-left: 20pt;
    -        margin-right: 6pt;
    -        padding-top: 1pt;
    -        padding-bottom: 1pt;
    -        padding-left: 5pt;
    -        padding-right: 5pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -}
    -
    -.prcontinuous 
    -{font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 10pt;
    -        color: #000000;
    -        background-color: #f4f4f4;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 0pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 6pt;
    -        padding-top: 1pt;
    -        padding-bottom: 1pt;
    -        padding-left: 5pt;
    -        padding-right: 5pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -       }
    -
    -.prefblue 
    -{display: inline;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-size: 10pt;
    -        color: #0000FF;
    -        background-color: #f4f4f4;
    -        vertical-align: baseline;
    -        margin-top: 6pt;
    -        margin-bottom: 6pt;
    -        margin-left: 0pt;
    -        margin-right: 0pt;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -       }
    -.prefred 
    -{display: inline;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-size: 10pt;
    -        color: #FF0000;
    -        background-color: #f4f4f4;
    -        vertical-align: baseline;
    -        margin-top: 6pt;
    -        margin-bottom: 6pt;
    -        margin-left: 0pt;
    -        margin-right: 0pt;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -       }
    -.prefdarkblue 
    -{display: inline;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-weight: bold;
    -        font-size: 10pt;
    -        color: #000080;
    -        background-color: #f4f4f4;
    -        vertical-align: baseline;
    -        margin-top: 6pt;
    -        margin-bottom: 6pt;
    -        margin-left: 0pt;
    -        margin-right: 0pt;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -       }
    -.prefgrey 
    -{display: inline;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-size: 10pt;
    -        color: #EA8110;
    -        background-color: #f4f4f4;
    -        vertical-align: baseline;
    -        margin-top: 6pt;
    -        margin-bottom: 6pt;
    -        margin-left: 0pt;
    -        margin-right: 0pt;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -       }
    -
    -.expandingblock 
    -{font-family: "Tahoma", verdana, arial, helvetica, sans-serif;
    -        border-color: #AFAFAF;
    -        border-top-style: dotted;
    -        border-top-width: 1px;
    -        border-top-color: #AFAFAF;
    -        border-bottom-style: dotted;
    -        border-bottom-width: 1px;
    -        border-bottom-color: #AFAFAF;
    -        border-left-style: dotted;
    -        border-left-width: 1px;
    -        border-left-color: #AFAFAF;
    -        border-right-style: dotted;
    -        border-right-width: 1px;
    -        border-right-color: #AFAFAF;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -	padding-left: 3px;
    -	padding-right: 3px;
    -	padding-top: 3px;
    -	padding-bottom: 3px;
    -
    -       }
    -
    -
    -
    -.copyright {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-size: 8pt;
    -        font-style: italic;
    -        color: #000000;
    -        margin: 9px 0px 9px 0px;
    -        padding: 0px;
    -}
    -
    -/* Nov-14 begin */
    -
    -.pagenavigation {
    -	font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -	font-size: 8pt;
    -	white-space: nowrap;
    -	vertical-align: middle;
    -	margin: 0px;
    -	margin-right: 2px;
    -	padding: 3px;
    -	padding-right: 4px;
    -	background-color: #f0f1f5;
    -}
    -*html .pagenavigation {
    -	margin-top: -7px;
    -	position: relative;
    -}
    -
    -.pagenavigation a, .pagenavigation a:link, .pagenavigation a:visited {
    -	color: #000000;
    -	text-decoration: none;	
    -}
    -.pagenavigation a:hover {
    -	text-decoration: none;
    -	color: #666666;
    -}
    -
    -/* end */
    -
    -
    -
    -.topBody {
    -	background: #eeeeee;
    -}
    -.nav {
    -	vertical-align: middle;
    -	font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -	font-size: 8pt;
    -	padding-left: 7px;
    -	padding-right: 5px;
    -	padding-top: 4px;
    -}
    -.nav a, .nav a:link, .nav a:visited {
    -	color: #000000;
    -	text-decoration: none;	
    -}
    -.nav a:hover {
    -	text-decoration: none;
    -	color: #666666;
    -}
    -
    -td.navTabActive {
    -	color: #1f202c;
    -	text-decoration: none;
    -	vertical-align: middle;
    -	font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -	font-size: 8pt;
    -	padding-top: 4px;  
    -	padding-bottom: 0px; 
    -	padding-left: 8px; 
    -	padding-right: 8px;
    -	font-weight: bold;
    -	background-image: url('nav_bg_active.gif');
    -	background-repeat: repeat-x;
    -}
    -td.navTab {
    -	padding-top: 3px;
    -}
    -.navTab a, .navTab a:link, .navTab a:visited {
    -	color: #000000;
    -	text-decoration: none;
    -	vertical-align: middle;
    -	font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -	font-size: 8pt;
    -	padding-top: 4px;
    -	padding-bottom: 0px;
    -	padding-left: 8px;
    -	padding-right: 8px;
    -}
    -.navTab a:hover {
    -	color: #1f202c;
    -	text-decoration: none;
    -	vertical-align: middle;
    -	font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -	font-size: 8pt;
    -	padding-top: 5px;
    -	padding-bottom: 7px;
    -	padding-left: 8px;
    -	padding-right: 8px;
    -	background-image: url('nav_bg_active.gif');
    -	background-repeat: repeat-x;
    -}
    -
    -.navDiv {
    -	vertical-align: middle;
    -}
    -
    -.topFrameTable {
    -	width: 100%;
    -	/*height: 23px;*/
    -	margin: 0px;
    -	padding: 0px;
    -	border-bottom: 2px solid #d6d6d6;
    -   background-image: url('nav_bg.gif');
    -	background-repeat: repeat-x;
    -}
    -.topFrameTabs {
    -	margin-left: 3px;
    -	margin-top: 0px;
    -}
    -
    -.headerTable {
    -	width: 100%;
    -	vertical-align: top;
    -	height: 23px;
    -	background: #588cc7;
    -}
    -.headerTd {
    -	vertical-align: middle;
    -	font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -	color: #ffffff;
    -	font-size: 12px;
    -	padding-top: 2px;
    -	padding-bottom: 3px;
    -	padding-left: 7px;
    -	padding-right: 5px;
    -}
    -
    -.tocTable {
    -	width: 100%;
    -	vertical-align: top;
    -}
    -.tocLevel1 {
    -	margin: -14px 0 0 0;
    -	padding: 0px;
    -}
    -
    -a.itemActive,
    -a.itemActive:link,
    -a.itemActive:visited,
    -a.itemActive:active {
    -	color: #ffffff;
    -	line-height: 16px;
    -	padding-top: 1px;
    -	padding-bottom: 2px;
    -	padding-left: 3px;
    -	padding-right: 3px;
    -	background-color:#6697cc;
    -}
    -
    -a, a:link,
    -.relateditem a, .relateditem a:link,
    -.tocLevel1 a, .tocLevel1 a:link {
    -	color: #0049b7;
    -	text-decoration: none;
    -}
    -a:hover,
    -.relateditem a:hover,
    -.tocLevel1 a:hover {
    -	text-decoration: underline;
    -}
    -a:visited,
    -.relateditem a:visited,
    -.tocLevel1 a:visited {
    -	color: #003380;
    -}
    -.relateditem a {
    -	text-decoration: none;
    -}
    -
    -.table {
    -	margin-top: 5px;
    -}
    -.tableDescription {
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -        font-size: 8pt;
    -		  font-weight: bold;
    -        color: #444444;
    -        margin-top: 15px;
    -        margin-bottom: 7px;
    -        margin-left: 0px;
    -        margin-right: 0px;
    -        padding: 0px;
    -		  text-align: left;
    -}
    -
    -.relatedheading {
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -        font-weight: bold;
    -        font-size: 8pt;
    -        color: #ffffff;
    -        background-color: #729ecf;
    -        margin-top: 25px;
    -        margin-bottom: 2px;
    -        margin-left: 0px;
    -        margin-right: 0px;
    -        padding-top: 2px;
    -        padding-bottom: 2px;
    -        padding-left: 4px;
    -        padding-right: 4px;
    -        border-color: #FFFFFF;
    -        border-right-style: solid;
    -        border-right-width: 1px;
    -        border-right-color: #FFFFFF;
    -}
    -.relateditem {
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: #f3f8fc;
    -        margin-top: 0px;
    -        margin-bottom: 0px;
    -        margin-left: 0px;
    -        margin-right: 0px;
    -        padding-top: 2px;
    -        padding-bottom: 3px;
    -        padding-left: 12px;
    -        padding-right: 15px;
    -        border-color: #FFFFFF;
    -        border-right-style: solid;
    -        border-right-width: 1px;
    -        border-right-color: #FFFFFF;
    -	     border-bottom-style: solid;
    -        border-bottom-width: 2px;
    -        border-bottom-color: #ffffff; 
    -}
    -.bodytext {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-size: 8pt;
    -        color: #000000;
    -        margin: 9px 0px 9px 0px;
    -        padding: 0px;
    -}
    -
    -.tableheading {
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -		  font-weight: bold;
    -        font-size: 8pt;
    -		  line-height: 12px;
    -        color: #2f739b; 
    -		  line-height: 11px;
    -        margin: 0px;
    -        padding: 3px;
    -        text-align: center;
    -		  background-color: #f5f8fc;/*eef2f9;*/
    -}
    -.tablebodytext {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-size: 8pt;
    -        color: #000000;
    -        padding: 5px;
    -		  padding-top: 7px;
    -		  vertical-align: top;
    -}
    -
    -.preformatted {
    -        display: block;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 10pt;
    -        color: #000000;
    -        background-color: #f4f4f4;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 0pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 6pt;
    -        padding-top: 1pt;
    -        padding-bottom: 1pt;
    -        padding-left: 5pt;
    -        padding-right: 5pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -}
    -
    -
    -.prefcleanxml {
    -        display: block;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 10pt;
    -        color: #000000;
    -        background-color: #f4f4f4;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 0pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 6pt;
    -        padding-top: 1pt;
    -        padding-bottom: 1pt;
    -        padding-left: 5pt;
    -        padding-right: 5pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -}
    -
    -
    -
    -
    -.preformatedbold2ndlvl, .preformattedbold {
    -        display: block;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: bold;
    -        font-size: 10pt;
    -        color: #000000;
    -        background-color: #f4f4f4;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 0pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 6pt;
    -        padding-top: 1pt;
    -        padding-bottom: 1pt;
    -        padding-left: 5pt;
    -        padding-right: 5pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -}
    -.specialbold {
    -        display: inline;
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -        font-weight: bold;
    -        font-size: 8pt;
    -        color: #e64a00;
    -        background-color: inherit;
    -        word-spacing: 0pt;
    -        vertical-align: baseline;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        }
    -.emphasis {
    -        display: inline;
    -        font-style: italic;
    -        color: inherit;
    -        background-color: inherit;
    -        vertical-align: baseline;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -       }
    -.monospace {
    -        display: inline;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        color: inherit;
    -		  font-size: 10pt;
    -        background-color: inherit;
    -        vertical-align: baseline;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -       }
    -.monospaceitalics {
    -        display: inline;
    -        font-family: "Courier New", verdana, arial, helvetica, sans-serif;
    -        font-style: italic;
    -        color: inherit;
    -		  font-size: 10pt;
    -        background-color: inherit;
    -        vertical-align: baseline;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -       }
    -ul.listbullet {
    -        list-style-type: disk;
    -        list-style-image: none;
    -        list-style-position: outside;
    -        margin-top: 7px;
    -        margin-bottom: 0px;
    -        }
    -li.listbullet {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: 10pt;
    -        margin: 0px;
    -        padding: 0 0 6px 0;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.note {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: #fffdec;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 6pt;
    -        margin-left: 0cm;
    -        margin-right: 0pt;
    -        padding-top: 4pt;
    -        padding-bottom: 4pt;
    -        padding-left: 4pt;
    -        padding-right: 4pt;
    -        border: 2px solid #f8c701;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: 97%;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.buttons {
    -        display: inline;
    -        font-weight: bold;
    -        color: #444444;
    -        background-color: inherit;
    -        vertical-align: baseline;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -       }
    -ol.listnumber {
    -        list-style-type: Decimal;
    -        list-style-position: outside;
    -        margin-top: 7pt;
    -        margin-bottom: 0pt;
    -        }
    -li.listnumber {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 0pt;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.procedureheading {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-variant: normal;
    -        font-weight: bold;
    -        font-size: 9pt;
    -        color: #266fa4; /* 266fa4 1b64a0 */
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 12pt;
    -        margin-bottom: 0px;
    -        margin-left: 0px;
    -        margin-right: 0px;
    -        padding-top: 0px;
    -        padding-bottom: 5px;
    -        padding-left: 0px;
    -        padding-right: 0px;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -ol.procedurelistnumber {
    -        list-style-type: Decimal;
    -        list-style-position: outside;
    -        margin-top: 7px;
    -        margin-bottom: 10px;
    -        }
    -li.procedurelistnumber {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6px;
    -        margin-bottom: 0px;
    -        margin-left: 0px;
    -        margin-right: 0pxt;
    -        padding: 0px;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.listcontinue {
    -        display: block;
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 0pt;
    -        padding-top: 0pt;
    -        padding-bottom: 5pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -ul.listbullet2 {
    -        list-style-type: disk;
    -        list-style-image: none;
    -        list-style-position: outside;
    -        margin-top: 7px;
    -        margin-bottom: 0px;
    -        }
    -li.listbullet2 {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #13152d;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -		  line-height: 10pt;
    -        margin: 0px;
    -        padding: 0 0 6px 0;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.listnote {
    -        display: block;
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: #fffdec;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 6pt;
    -        margin-left: 0pt;
    -        margin-right: 6pt;
    -        padding-top: 4pt;
    -        padding-bottom: 4pt;
    -        padding-left: 4pt;
    -        padding-right: 4pt;
    -        border: 2px solid #f8c701;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: 97%;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.widegraphic {
    -        display: block;
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 6pt;
    -        margin-left: 0cm;
    -        margin-right: 0cm;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: center;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.listcontinue2 {
    -        display: block;
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 0cm;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 10pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -
    -.listcontinue3 {
    -        display: block;
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 0cm;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 10pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -
    -ul.listbullet3 {
    -        list-style-type: Square;
    -        list-style-image: none;
    -        list-style-position: outside;
    -        margin-top: 7px;
    -        margin-bottom: 0px;
    -        }
    -li.listbullet3 {
    -	     font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #13152d;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin: 0px;
    -        padding: 0 0 6px 0;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -ol.procedurelistnumber2 {
    -        list-style-type: lower-alpha;
    -        list-style-position: outside;
    -        margin-top: 7pt;
    -        margin-bottom: 0pt;
    -        }
    -li.procedurelistnumber2 {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 0pt;
    -        padding: 0px;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.listnote2 {
    -        display: block;
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: #fffdec;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 6pt;
    -        margin-left: 0pt;
    -        margin-right: 6pt;
    -        padding-top: 4pt;
    -        padding-bottom: 4pt;
    -        padding-left: 4pt;
    -        padding-right: 4pt;
    -        border: 2px solid #f8c701;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: 97%;
    -        height: auto;
    -        white-space: normal;
    -       }
    -ol.listnumber2 {
    -        list-style-type: Decimal;
    -        list-style-position: outside;
    -        margin-top: 7pt;
    -        margin-bottom: 0pt;
    -        }
    -li.listnumber2 {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 0pt;
    -        margin-left: 0pt;
    -        margin-right: 0pt;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.warning {
    -        font-family: verdana, tahoma, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -        color: #000000;
    -        background-color: #fff5f0;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 6pt;
    -        margin-bottom: 6pt;
    -        margin-left: 0cm;
    -        margin-right: 6pt;
    -        padding-top: 4pt;
    -        padding-bottom: 4pt;
    -        padding-left: 4pt;
    -        padding-right: 4pt;
    -        border: 2px solid #e64a00;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -
    -.heading1 {
    -        font-family: arial, helvetica, sans-serif, tahoma, verdana;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-size: 12pt;
    -        color: #6a6a6a;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 18px;
    -        margin-bottom: 18px;
    -        margin-left: 0cm;
    -        margin-right: 0cm;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -
    -.heading2 {
    -        font-family: arial, helvetica, sans-serif, tahoma, verdana;
    -        font-style: normal;
    -        font-variant: normal;
    -		  font-size: 12pt;
    -        color: #5c5b64; 
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 18px;
    -        margin-bottom: 18px;
    -        margin-left: 0cm;
    -        margin-right: 0cm;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.heading3 {
    -        font-family: arial, helvetica, sans-serif, tahoma, verdana;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-size: 12pt;
    -        color: #6a6a6a;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 18px;
    -        margin-bottom: 18px;
    -        margin-left: 0cm;
    -        margin-right: 0cm;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.heading4 {
    -        font-family: arial, helvetica, sans-serif, tahoma, verdana;
    -        font-style: normal;
    -        font-variant: normal;
    -		  font-size: 12pt;
    -        color: #6a6a6a;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 18px;
    -        margin-bottom: 18px;
    -        margin-left: 0cm;
    -        margin-right: 0cm;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.heading5 {
    -        font-family: arial, helvetica, sans-serif, tahoma, verdana;
    -        font-style: normal;
    -        font-variant: normal;
    -		  font-size: 12pt;
    -        color: #6a6a6a;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 18px;
    -        margin-bottom: 18px;
    -        margin-left: 0cm;
    -        margin-right: 0cm;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.heading6 {
    -        font-family: arial, helvetica, sans-serif, tahoma, verdana;
    -        font-variant: normal;
    - 		  font-size: 12pt;
    -        color: #6a6a6a;
    -        background-color: inherit;
    -        word-spacing: normal;
    -        letter-spacing: normal;
    -        vertical-align: baseline;
    -        text-decoration: none;
    -        text-transform: none;
    -        line-height: normal;
    -        margin-top: 18px;
    -        margin-bottom: 18px;
    -        margin-left: 0cm;
    -        margin-right: 0cm;
    -        padding-top: 0pt;
    -        padding-bottom: 0pt;
    -        padding-left: 0pt;
    -        padding-right: 0pt;
    -        float: none;
    -        clear: none;
    -        text-align: left;
    -        text-indent: 0cm;
    -        width: auto;
    -        height: auto;
    -        white-space: normal;
    -       }
    -.indexatoz {
    -        font-family: arial, helvetica, sans-serif, tahoma, verdana;
    -        font-style: normal;
    -        font-weight: bold;
    -        font-size: 12px;
    -        color: #adadad;
    -        background-color: #f4f4f4;
    -        border: 1px solid #CFCFCF;
    -        margin: -15px -2px 0 -2px;
    -        padding: 6px;
    -		  position: relative;
    -		  z-index:99;
    -       }
    -
    -.indexatoz a:hover {
    -      background-color: #6697cc;
    -      text-decoration: none;
    -      color: #ffffff;
    -      padding: 1px 0;
    -}
    -.indexLetter {
    -	 	  padding-left: 2px;
    -}
    -
    -.indexheading, .indexheading a {
    -        font-family: arial, helvetica, sans-serif, tahoma, verdana;
    -        font-weight: bold;
    -        font-size: 12pt;
    -        color: #e64a00;
    -		  text-decoration: none;
    -        margin: 0px;
    -        padding: 0px;
    -		  padding-top: 10px;
    -		  margin-top: 12px;
    -		  margin-bottom: 2px;
    -		  margin-right: 2px;
    -		  border-bottom: 1px solid #cfcfcf;
    -}
    -.index1, .index2, .index3 {
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -        font-size: 8pt;
    -        color: #000000;
    -        text-decoration: none;
    -        margin: 0px;
    -        padding-top: 3px;
    -        padding-bottom: 0px;
    -        padding-left: 0px;
    -        padding-right: 0px;
    -}
    -.indexlink, .index1link {
    -        padding: 0px;
    -		  padding-top: 3px;
    -		  margin: 0px;
    -}
    -.index1link {
    -		  padding-left: 18px;
    -}
    -.toc {
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -        font-style: normal;
    -        font-variant: normal;
    -        font-weight: normal;
    -        font-size: 8pt;
    -		  padding-left: 8px;
    -		  padding-right: 5px;
    -        vertical-align: top;
    -       }
    -span.toc {
    -	line-height: 19px;
    -}
    -		 
    -.searchDetails {
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -        font-size: 11px;
    -        color: #666666;
    -        background-color: #ffffff;
    -		  border: 1px solid #CFCFCF;
    -        margin: 5px;
    -		  padding-left: 10px;
    - 		  padding-right: 10px;
    -		  padding-top: 3px;
    -		  padding-bottom: 9px;
    -		  line-height: 20px;
    -}
    -.inputText {
    -		  width: 60%;
    -		  height: 16px;
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -        font-size: 12px;
    -        color: #000000;
    -}
    -form {
    -	margin: 0px;
    -}
    -.search {
    -        font-family: tahoma, verdana, arial, helvetica, sans-serif;
    -        font-size: 8pt;
    -        color: #000000;
    -        vertical-align: top;
    -        margin: 0px;
    -        padding: 0px 10px;
    -       }
    -.searchFound {
    -	font-weight: bold;
    -	color: #1f202c;
    -	padding-top: 5px;
    -	padding-bottom: 10px;
    -	margin: 0px;
    -}
    -.searchResults {
    -	padding-bottom: 10px;
    -	padding-top: 5px;
    -	margin: 0px;
    -	border-top: 1px solid #cfcfcf;
    -}
    -.searchResults a {
    -	font-weight: bold;
    -}
    -.searchFoundWord {
    -	background-color: #fffdce; 
    -}
    -.searchToTop {
    -	text-align: left;
    -	border-top: 1px solid #cfcfcf;
    -	padding: 7px 0px 15px 0px;
    -	margin: 0px;
    -}
    \ No newline at end of file
    diff --git a/build/aps/README b/build/aps/README
    deleted file mode 100644
    index 6d9b8098977..00000000000
    --- a/build/aps/README
    +++ /dev/null
    @@ -1,20 +0,0 @@
    -README (English)
    -##################################################
    -This directory is dedicated to APS package building
    -##################################################
    -
    -Docs for APS format 1.1:
    -http://www.apsstandard.org/r/doc/aps-format-1.1-packaging-guide/index.htm
    -
    -Docs for APS format 1.2 (need APP-LIST.xml):
    -http://www.apsstandard.org/r/doc/aps-format-1.2-packaging-guide/index.htm
    -
    -
    -To check an APS package on Debian:
    -* Install libgdiplus with 
    -apt-get install libgdiplus
    -* Install apslint.exe (http://www.apsstandard.org/r/doc/aps-format-1.2-packaging-guide/57414.htm)
    -tar -xvf xxxx.tgz 
    -* Go into directory of apslint and run command
    -mono ./apslint.exe '/media/DATA/Mes Developpements/dolibarr/build/dolibarr-3.1.0-dev.app.zip' 
    -
    diff --git a/build/aps/configure.php b/build/aps/configure.php
    deleted file mode 100755
    index 1b2565e3dc8..00000000000
    --- a/build/aps/configure.php
    +++ /dev/null
    @@ -1,151 +0,0 @@
    -#!/usr/bin/env php
    -<?php
    -/*-----------------------------------------------------
    - *
    - *----------------------------------------------------- */
    -
    -// This is list of predefined variables when script is ran
    -// We have to set them manually to run script outside context.
    -/*putenv('SETTINGS_admin_name=admin');
    -putenv('SETTINGS_admin_password=admin-ad');
    -putenv('BASE_URL_SCHEME=http');
    -putenv('BASE_URL_HOST=localhost');
    -putenv('BASE_URL_PORT=0');
    -putenv('BASE_URL_PATH=/');
    -//putenv('WEB___DIR=/var/wwww/dolibarr/htdocs');      // WEB___DIR is dir to htdocs
    -putenv('WEB___DIR=../htdocs');      // WEB___DIR is dir to htdocs
    -putenv('DB_main_NAME=dolibarr');
    -putenv('DB_main_HOST=localhost');
    -putenv('DB_main_PORT=3306');
    -putenv('DB_main_LOGIN=root');
    -putenv('DB_main_PASSWORD=root');
    -*/
    -
    -// Check parameters
    -if(count($_SERVER['argv']) < 2)
    -{
    -    print "Usage: configure.php (install | upgrade <version> | configure | remove)\n";
    -    exit(1);
    -}
    -$command = $_SERVER['argv'][1]; //$command stores the argument with which the script was invoked.
    -
    -
    -if($command == "install")
    -{
    -    $db_id = 'main';
    -
    -    $rootdir = getenv("WEB___DIR");
    -    if ($rootdir != '/') $rootdir = preg_replace('/\/$/','',$rootdir);  // Remove last /
    -    $datadir = $rootdir.'/dolibarr_documents';
    -
    -    //List of database-related variables that are passed to the configuration
    -    //script. See the 6.3.1.1.1. Environment variables section of the
    -    //Specification for details.
    -    $db_address = getenv("DB_${db_id}_HOST");
    -    $db_port = getenv("DB_${db_id}_PORT");
    -    $dblogin = getenv("DB_${db_id}_LOGIN");
    -    $dbpassword = getenv("DB_${db_id}_PASSWORD");
    -    $dbname = getenv("DB_${db_id}_NAME");
    -
    -
    -    //PHP functions for connecting to the mysql server and
    -    //executing SQL queries.
    -    //mysql_connect($dbaddress, $dblogin, $dbpassword);
    -    //mysql_select_db($dbname);
    -    /*
    -     $sql_queries = file($query_file);
    -     foreach ($sql_queries as $query) mysql_query($query);
    -     */
    -
    -
    -    //Other code to be executed on invoking configure with
    -    //the install argument.
    -
    -    // Create empty config file
    -    $file=$rootdir.'/conf/conf.php';
    -    print "Create conf file ".$file."\n";
    -    $fp = fopen($file, 'wb');
    -    if ($fp)
    -    {
    -        fclose($fp);
    -        chmod($file,0775);
    -    }
    -    else
    -    {
    -        print "configure.php install: Unable to write file $file.\n";
    -        exit(1);
    -    }
    -
    -    // Create empty directory that will be used by software to store uploaded documents
    -    print "Create directory ".$datadir."\n";
    -    @mkdir($datadir);
    -    chmod($datadir,0775);
    -
    -    // Create install.forced.php into htdocs/install directory with value.
    -    // This will set parameters of install for web installer wizard.
    -    $file_source=$rootdir.'/../build/aps/install.forced.php.install';
    -    $file=$rootdir.'/install/install.forced.php';
    -    print "Create file ".$file.' from '.$file_source."\n";
    -
    -    $modify_hash=array(
    -    'WEB___DIR'=>$rootdir,
    -    'DB_'.$db_id.'_HOST'=>$db_address,
    -    'DB_'.$db_id.'_PORT'=>$db_port,
    -    'DB_'.$db_id.'_LOGIN'=>$dblogin,
    -    'DB_'.$db_id.'_PASSWORD'=>$dbpassword,
    -    'DB_'.$db_id.'_NAME'=>$dbname
    -    );
    -
    -    $file_content = fread(fopen($file_source, 'r'), filesize($file_source));
    -    foreach($modify_hash as $param => $val){
    -        $file_content = str_replace($param, php_quote($val), $file_content);
    -    }
    -    $fp = fopen($file, 'wb');
    -    if ($fp)
    -    {
    -        fputs($fp, $file_content);
    -        fputs($fp, "\n");
    -        fclose($fp);
    -        chmod($file,0775);
    -    }
    -    else
    -    {
    -        print "configure.php install: Unable to write file $file.\n";
    -        exit(2);
    -    }
    -
    -    exit(0);
    -}
    -
    -if($command == "remove")
    -{
    -    //Code to be executed on invoking configure with the remove argument
    -    exit(0);
    -}
    -
    -if($command == "upgrade")
    -{
    -    //Code to be executed on invoking configure with the upgrade argument
    -    exit(0);
    -}
    -
    -if($command == "configure")
    -{
    -    //Code to be executed on invoking configure with the configure argument
    -    exit(0);
    -}
    -
    -print "configure.php: Error: unknown command $command.\n";
    -exit(1);
    -
    -
    -
    -// Content of file-util.php we need
    -
    -function php_quote($val)
    -{
    -    $res_val = str_replace("\\", "\\\\", $val);
    -    $res_val = str_replace("'", "\\'", $res_val);
    -    return $res_val;
    -}
    -
    diff --git a/build/aps/install.forced.php.install b/build/aps/install.forced.php.install
    deleted file mode 100644
    index a7a3f03c14c..00000000000
    --- a/build/aps/install.forced.php.install
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -<?php
    -// File to force Dolibarr wizard installer choices.
    -//
    -// This file must be present into htdocs/install directory
    -// during install process to be used.
    -//
    -//
    -$force_install_noedit=1;
    -$force_install_message='KeepDefaultValuesDeb';
    -$force_install_main_data_root='WEB___DIR/dolibarr_documents';
    -$force_install_type='mysqli';
    -$force_install_dbserver='DB_main_HOST';
    -$force_install_port='DB_main_PORT';
    -$force_install_database='DB_main_NAME';
    -$force_install_createdatabase='0';
    -$force_install_databaselogin='DB_main_LOGIN';
    -$force_install_databasepass='DB_main_PASSWORD';
    -$force_install_createuser='0';
    -$force_install_databaserootlogin='';
    -$force_install_databaserootpass='';
    -$force_install_dolibarrlogin='admin';
    -$force_install_nophpinfo='1';
    -$force_install_lockinstall='444';
    diff --git a/build/debian/copyright b/build/debian/copyright
    index 8207df4b6d7..72e531d7007 100644
    --- a/build/debian/copyright
    +++ b/build/debian/copyright
    @@ -8,7 +8,7 @@ Copyright: 2002-2009, Rodolphe Quiedeville   <rodolphe@quiedeville.org>
                2003-2006, Jean-Louis Bergamo     <jlb@j1b.org>
                2003-2013, Laurent Destailleur    <eldy@users.sourceforge.net>
                2003, Xavier Dutoit               <doli@sydesy.com>
    -           2004-2013, Regis Houssin          <regis.houssin@capnetworks.com>
    +           2004-2013, Regis Houssin          <regis.houssin@inodbox.com>
                2004, Sebastien Di Cintio         <sdicintio@ressource-toi.org>
                2004, Benoit Mortier              <benoit.mortier@opensides.be>
                2004, Christophe Combelles        <ccomb@free.fr>
    diff --git a/build/doxygen/doxygen_footer.html b/build/doxygen/doxygen_footer.html
    index a6d5bdfb293..8ffdc5341fe 100644
    --- a/build/doxygen/doxygen_footer.html
    +++ b/build/doxygen/doxygen_footer.html
    @@ -3,42 +3,27 @@ File added into doxygen generated documentation
     -->
     
     
    -<!-- Google analytics -->
    -<script>
    -  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    -  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    -  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    -  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
    -
    -  ga('create', 'UA-9049390-16', 'auto');
    -  ga('send', 'pageview');
    -
    -</script>
    -<!-- End google analytics -->
    -
     
     <hr class="footer" />
    -<address class="footer"><small>Generated on $datetime
    -for <a href="https://www.dolibarr.org">$projectname</a> by Doxygen $doxygenversion </small></address>
    +<address class="footer"><small>Generated on $datetime for <a href="https://www.dolibarr.org">$projectname</a> by Doxygen $doxygenversion </small></address>
     
     
    -<!--  Google AdSense -->
    -<div class="center">
    -<script type="text/javascript"><!--
    -google_ad_client = "pub-1071905880519467";
    -/* PUBBANDEAUDOLIBARR */
    -google_ad_slot = "1421205532";
    -google_ad_width = 468;
    -google_ad_height = 60;
    -//-->
    -</script>
    -<script type="text/javascript" src="https://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
    -</div>
    -<!-- End google adsense -->
     <br>
     
     </div>
     
    +
    +<!-- Global site tag (gtag.js) - Google Analytics -->
    +<script async src="https://www.googletagmanager.com/gtag/js?id=UA-9049390-16"></script>
    +<script>
    +  window.dataLayer = window.dataLayer || [];
    +  function gtag(){dataLayer.push(arguments);}
    +  gtag('js', new Date());
    +
    +  gtag('config', 'UA-9049390-16');
    +</script>
    +
    +
     <!-- Twitter ad collector -->
     <script src="//platform.twitter.com/oct.js" type="text/javascript"></script>
     <script type="text/javascript">twttr.conversion.trackPid('ntm4n', { tw_sale_amount: 0, tw_order_quantity: 0 });</script>
    diff --git a/build/exe/doliwamp/Languages/MyEnglish.isl b/build/exe/doliwamp/Languages/MyEnglish.isl
    index 11d2e4456bd..b7c5ecb6230 100644
    --- a/build/exe/doliwamp/Languages/MyEnglish.isl
    +++ b/build/exe/doliwamp/Languages/MyEnglish.isl
    @@ -13,8 +13,8 @@ AssocingFileExtension=Associating %1 with the %2 file extension...
     
     YouWillInstallDoliWamp=You will install or upgrade DoliWamp (Apache+Mysql+PHP+Dolibarr) on your computer.
     ThisAssistantInstallOrUpgrade=This assistant installs or upgrades Dolibarr ERP-CRM and all required third party softwares (Apache, Mysql and PHP) optimized for a Dolibarr usage.
    -IfYouHaveTechnicalKnowledge=If you have technical knowledge and plan to share your Apache, Mysql and PHP with other projects than Dolibarr, you should not use this assistant and make a manual installation of Dolibarr on your existing Apache, Mysql and PHP installation.
    -ButIfYouLook=But if you look for an automatic setup, you''re on the good way...
    +IfYouHaveTechnicalKnowledge=If you are looking for a hosted version in the Cloud, you should look at https://saas.dolibarr.org. If you have technical knowledge and want to manage your Apache, Mysql and PHP yourself, you should not use this assistant and make a manual installation of Dolibarr on your existing Apache, Mysql and PHP installation.
    +ButIfYouLook=But if you look for an automatic setup on your local computer, you''re on the good way...
     DoYouWantToStart=Do you want to start installation/upgrade process ?
     
     TechnicalParameters=Technical parameters
    diff --git a/build/exe/doliwamp/Languages/MyFrench.isl b/build/exe/doliwamp/Languages/MyFrench.isl
    index 1daf4425e68..8c7cff0bb42 100644
    --- a/build/exe/doliwamp/Languages/MyFrench.isl
    +++ b/build/exe/doliwamp/Languages/MyFrench.isl
    @@ -13,8 +13,8 @@ AssocingFileExtension=Associe %1 avec l'extension de fichier %2...
     
     YouWillInstallDoliWamp=Vous allez installer ou mettre  jour DoliWamp (Apache+Mysql+PHP+Dolibarr) sur votre ordinateur.
     ThisAssistantInstallOrUpgrade=Cet assistant installe ou met  jour Dolibarr ERP-CRM et tous ses composants prrequis (Apache, Mysql et PHP) optimiss pour une utilisation de Dolibarr.
    -IfYouHaveTechnicalKnowledge=Si vous avez des comptences techniques et envisagez de partager votre Apache, Mysql et PHP avec d'autres applications que Dolibarr, vous ne devriez pas utiliser cet assistant mais faire plutt une installation manuelle de Dolibarr sur un socle Apache, Mysql et PHP existant.
    -ButIfYouLook=Mais si vous recherchez une installation cl en main automatise, vous tes sur la bonne voie...
    +IfYouHaveTechnicalKnowledge=Si vous cherchez un hbergement dans le Cloud, aller voir sur https://saas.dolibarr.org. Si vous avez des comptences techniques et voulez grer vous mme Apache, Mysql et PHP, vous ne devriez pas utiliser cet assistant mais faire plutt une installation manuelle de Dolibarr sur votre socle Apache, Mysql et PHP existant.
    +ButIfYouLook=Mais si vous recherchez une installation automatise locale sur votre ordinateur, cl en main, vous tes sur la bonne voie...
     DoYouWantToStart=Voulez-vous dmarrer le processus d'installation/mise  jour ?
     
     TechnicalParameters=Paramtres techniques
    diff --git a/build/exe/doliwamp/doliwamp.iss b/build/exe/doliwamp/doliwamp.iss
    index 2d4668b447c..cc6a39a62a4 100644
    --- a/build/exe/doliwamp/doliwamp.iss
    +++ b/build/exe/doliwamp/doliwamp.iss
    @@ -32,7 +32,7 @@ AppPublisherURL=https://www.nltechno.com
     AppSupportURL=https://www.dolibarr.org
     AppUpdatesURL=https://www.dolibarr.org
     AppComments=DoliWamp includes Dolibarr, Apache, PHP and Mysql softwares.
    -AppCopyright=Copyright (C) 2008-2017 Laurent Destailleur (NLTechno), Fabian Rodriguez (Le Goût du Libre)
    +AppCopyright=Copyright (C) 2008-2018 Laurent Destailleur (NLTechno), Fabian Rodriguez (Le Goût du Libre)
     DefaultDirName=c:\dolibarr
     DefaultGroupName=Dolibarr
     ;LicenseFile=COPYING
    diff --git a/build/flatpack/org.flatpak.Dolibarr.json b/build/flatpack/org.flatpak.Dolibarr.json
    new file mode 100644
    index 00000000000..9e2135cf0a3
    --- /dev/null
    +++ b/build/flatpack/org.flatpak.Dolibarr.json
    @@ -0,0 +1 @@
    +Help wanted...
    \ No newline at end of file
    diff --git a/build/generate_filelist_xml.php b/build/generate_filelist_xml.php
    index 0764d64b491..ec9ded557ff 100755
    --- a/build/generate_filelist_xml.php
    +++ b/build/generate_filelist_xml.php
    @@ -34,8 +34,8 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
         exit;
     }
     
    -require_once($path."../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    +require_once $path."../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
     
     
     /*
    diff --git a/build/makepack-dolibarr.pl b/build/makepack-dolibarr.pl
    index 7ba988231cc..d78ba1e717d 100755
    --- a/build/makepack-dolibarr.pl
    +++ b/build/makepack-dolibarr.pl
    @@ -22,7 +22,7 @@ $PUBLISHSTABLE="eldy,dolibarr\@frs.sourceforge.net:/home/frs/project/dolibarr";
     $PUBLISHBETARC="dolibarr\@vmprod1.dolibarr.org:/home/dolibarr/dolibarr.org/httpdocs/files";
     
     
    -#@LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","APS","EXEDOLIWAMP","SNAPSHOT");   # Possible packages
    +#@LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","EXEDOLIWAMP","SNAPSHOT");   # Possible packages
     @LISTETARGET=("TGZ","ZIP","RPM_GENERIC","RPM_FEDORA","RPM_MANDRIVA","RPM_OPENSUSE","DEB","EXEDOLIWAMP","SNAPSHOT");   # Possible packages
     %REQUIREMENTPUBLISH=(
     "SF"=>"git ssh rsync",
    @@ -37,7 +37,7 @@ $PUBLISHBETARC="dolibarr\@vmprod1.dolibarr.org:/home/dolibarr/dolibarr.org/httpd
     "RPM_MANDRIVA"=>"rpmbuild",
     "RPM_OPENSUSE"=>"rpmbuild",
     "DEB"=>"dpkg",
    -"APS"=>"zip",
    +"FLATPACK"=>"flatpack",
     "EXEDOLIWAMP"=>"ISCC.exe",
     "SNAPSHOT"=>"tar"
     );
    @@ -142,7 +142,6 @@ $FILENAMETGZ         = "$PROJECT-$MAJOR.$MINOR.$BUILD";
     $FILENAMEZIP         = "$PROJECT-$MAJOR.$MINOR.$BUILD";
     $FILENAMEXZ          = "$PROJECT-$MAJOR.$MINOR.$BUILD";
     $FILENAMEDEB         = "see later";
    -$FILENAMEAPS         = "$PROJECT-$MAJOR.$MINOR.$BUILD.app";
     $FILENAMEEXEDOLIWAMP = "DoliWamp-$MAJOR.$MINOR.$BUILD";
     # For RPM
     $ARCH='noarch';
    @@ -536,6 +535,8 @@ if ($nboftargetok) {
        	    $ret=`find $BUILDROOT/$PROJECT/htdocs/custom/* -type l -exec rm -fr {} \\; >/dev/null 2>&1`;	# For custom we want to remove all subdirs, even symbolic links, but not files
     
     		# Removed known external modules to avoid any error when packaging from env where external modules are tested 
    +		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/abricot*`;
    +		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/accountingexport*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/allscreens*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/ancotec*`;
     	    $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/cabinetmed*`;
    @@ -550,12 +551,14 @@ if ($nboftargetok) {
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/multicompany*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/ndf*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/nltechno*`;
    +		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/nomenclature*`;
    +	    $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/of/`;
     	    $ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/oscim*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/pos*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/teclib*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/timesheet*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/webmail*`;
    -		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/accountingexport*`;
    +		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/workstation*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/oblyon*`;
     		$ret=`rm -fr $BUILDROOT/$PROJECT/htdocs/themes/allscreen*`;
     		# Removed other test files
    @@ -692,7 +695,7 @@ if ($nboftargetok) {
     			print "Go to directory $BUILDROOT\n";
     			$olddir=getcwd();
     			chdir("$BUILDROOT");
    -			$cmd= "xz -9 -r $BUILDROOT/$FILENAMEAPS.xz \*";
    +			$cmd= "xz -9 -r $BUILDROOT/$FILENAMEXZ.xz \*";
     			print $cmd."\n";
     			$ret= `$cmd`;
     			chdir("$olddir");
    @@ -1033,92 +1036,6 @@ if ($nboftargetok) {
     			next;
     		}
     		
    -		if ($target eq 'APS') 
    -		{
    -			$NEWDESTI=$DESTI;
    -			if ($NEWDESTI =~ /stable/)
    -			{
    -				mkdir($DESTI.'/package_aps');
    -				if (-d $DESTI.'/package_aps') { $NEWDESTI=$DESTI.'/package_aps'; }
    -			} 
    -			
    -			$newbuild = $BUILD;
    -			$newbuild =~ s/(dev|alpha)/0/gi;                # dev
    -			$newbuild =~ s/beta/1/gi;                       # beta
    -			$newbuild =~ s/rc./2/gi;                        # rc
    -			if ($newbuild !~ /-/) { $newbuild.='-3'; }      # finale
    -			# now newbuild is 0-0 or 0-3 for example
    -			$REL1 = $newbuild; $REL1 =~ s/-.*$//gi;
    -			if ($RPMSUBVERSION eq 'auto') { $RPMSUBVERSION = $newbuild; $RPMSUBVERSION =~ s/^.*-//gi; }
    -			print "Version is $MAJOR.$MINOR.$REL1-$RPMSUBVERSION\n";
    -			
    -			print "Remove target $FILENAMEAPS.zip...\n";
    -			unlink "$NEWDESTI/$FILENAMEAPS.zip";
    -
    -			#rmdir "$BUILDROOT/$PROJECT.tmp";
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp`;
    -			print "Create directory $BUILDROOT/$PROJECT.tmp\n";
    -			$ret=`mkdir -p "$BUILDROOT/$PROJECT.tmp"`;
    -			print "Copy $BUILDROOT/$PROJECT to $BUILDROOT/$PROJECT.tmp\n";
    -			$cmd="cp -pr \"$BUILDROOT/$PROJECT\" \"$BUILDROOT/$PROJECT.tmp\"";
    -			$ret=`$cmd`;
    -
    -			print "Remove other files\n";
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/deb`;
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/dmg`;
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/doap`;
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/exe`;
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/live`;
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/patch`;
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/rpm`;
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/zip`;
    -			$ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/build/perl`;
    -
    -            $APSVERSION="1.2";
    -            print "Create APS files $BUILDROOT/$PROJECT.tmp/$PROJECT/APP-META.xml\n";
    -            open (SPECFROM,"<$BUILDROOT/$PROJECT/build/aps/APP-META-$APSVERSION.xml") || die "Error";
    -            open (SPECTO,">$BUILDROOT/$PROJECT.tmp/$PROJECT/APP-META.xml") || die "Error";
    -            while (<SPECFROM>) {
    -                $newbuild = $BUILD;
    -                $newbuild =~ s/(dev|alpha)/0/gi;                # dev
    -                $newbuild =~ s/beta/1/gi;                       # beta
    -                $newbuild =~ s/rc./2/gi;                        # rc
    -                if ($newbuild !~ /-/) { $newbuild.='-3'; }      # finale
    -                # now newbuild is 0-0 or 0-3 for example
    -                $_ =~ s/__VERSION__/$MAJOR.$MINOR.$REL1/;
    -                $_ =~ s/__RELEASE__/$RPMSUBVERSION/;
    -                print SPECTO $_;
    -            }
    -            close SPECFROM;
    -            close SPECTO;
    -            print "Version set to $MAJOR.$MINOR.$newbuild\n";
    -            $cmd="cp -pr \"$BUILDROOT/$PROJECT/build/aps/configure.php\" \"$BUILDROOT/$PROJECT.tmp/$PROJECT/scripts/configure.php\"";
    -            $ret=`$cmd`;
    -            $cmd="cp -pr \"$BUILDROOT/$PROJECT/doc/images\" \"$BUILDROOT/$PROJECT.tmp/$PROJECT/images\"";
    -            $ret=`$cmd`;
    - 
    -            print "Remove other files\n";
    -            $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/dev`;
    -            $ret=`rm -fr $BUILDROOT/$PROJECT.tmp/$PROJECT/doc`;
    -            
    -            print "Build APP-LIST.xml files\n";
    -            
    -            print "Compress $BUILDROOT/$PROJECT.tmp/$PROJECT into $FILENAMEAPS.zip...\n";
    - 
    -            print "Go to directory $BUILDROOT/$PROJECT.tmp\/$PROJECT\n";
    -            $olddir=getcwd();
    -            chdir("$BUILDROOT\/$PROJECT.tmp\/$PROJECT");
    -            $cmd= "zip -9 -r $BUILDROOT/$FILENAMEAPS.zip \*";
    -            print $cmd."\n";
    -            $ret= `$cmd`;
    -            chdir("$olddir");
    -                        
    -    		# Move to final dir
    -            print "Move $BUILDROOT/$FILENAMEAPS.zip to $NEWDESTI/$FILENAMEAPS.zip\n";
    -            $ret=`mv "$BUILDROOT/$FILENAMEAPS.zip" "$NEWDESTI/$FILENAMEAPS.zip"`;
    -            next;
    -    	}
    -
     		if ($target eq 'EXEDOLIWAMP')
     		{
     			$NEWDESTI=$DESTI;
    diff --git a/build/rpm/dolibarr_fedora.spec b/build/rpm/dolibarr_fedora.spec
    index d5a9189229e..b6d526bf8e1 100755
    --- a/build/rpm/dolibarr_fedora.spec
    +++ b/build/rpm/dolibarr_fedora.spec
    @@ -177,9 +177,11 @@ done >>%{name}.lang
     %_datadir/dolibarr/htdocs/core
     %_datadir/dolibarr/htdocs/cron
     %_datadir/dolibarr/htdocs/custom
    +%_datadir/dolibarr/htdocs/datapolicy
     %_datadir/dolibarr/htdocs/dav
     %_datadir/dolibarr/htdocs/don
     %_datadir/dolibarr/htdocs/ecm
    +%_datadir/dolibarr/htdocs/emailcollector
     %_datadir/dolibarr/htdocs/expedition
     %_datadir/dolibarr/htdocs/expensereport
     %_datadir/dolibarr/htdocs/exports
    @@ -212,6 +214,7 @@ done >>%{name}.lang
     %_datadir/dolibarr/htdocs/supplier_proposal
     %_datadir/dolibarr/htdocs/support
     %_datadir/dolibarr/htdocs/theme
    +%_datadir/dolibarr/htdocs/takepos
     %_datadir/dolibarr/htdocs/ticket
     %_datadir/dolibarr/htdocs/user
     %_datadir/dolibarr/htdocs/variants
    diff --git a/build/rpm/dolibarr_generic.spec b/build/rpm/dolibarr_generic.spec
    index 673d5919d1a..32c6e50018e 100755
    --- a/build/rpm/dolibarr_generic.spec
    +++ b/build/rpm/dolibarr_generic.spec
    @@ -54,7 +54,7 @@ BuildRequires: desktop-file-utils
     Group: Applications/Productivity
     Requires: apache-base, apache-mod_php, php-cgi, php-cli, php-bz2, php-gd, php-ldap, php-imap, php-mysqli, php-openssl, fonts-ttf-dejavu 
     Requires: mysql, mysql-client 
    -%else
    +%else%_datadir/dolibarr/htdocs/datapolicy
     %if 0%{?suse_version}
     # Voir http://en.opensuse.org/openSUSE:Packaging_Conventions_RPM_Macros
     Group: Productivity/Office/Management
    @@ -124,7 +124,7 @@ cui hai bisogno ed essere facile da usare.
     
     %if 0%{?sles_version}
     %{__rm} -rf $RPM_BUILD_ROOT
    -%{__mkdir} $RPM_BUILD_ROOT
    +%{__mkdir} $RPM_BUILD_ROOT%_datadir/dolibarr/htdocs/datapolicy
     %{__mkdir} $RPM_BUILD_ROOT%{_sysconfdir}
     %{__mkdir} $RPM_BUILD_ROOT%{_sysconfdir}/%{name}
     %else
    @@ -257,9 +257,11 @@ done >>%{name}.lang
     %_datadir/dolibarr/htdocs/core
     %_datadir/dolibarr/htdocs/cron
     %_datadir/dolibarr/htdocs/custom
    +%_datadir/dolibarr/htdocs/datapolicy
     %_datadir/dolibarr/htdocs/dav
     %_datadir/dolibarr/htdocs/don
     %_datadir/dolibarr/htdocs/ecm
    +%_datadir/dolibarr/htdocs/emailcollector
     %_datadir/dolibarr/htdocs/expedition
     %_datadir/dolibarr/htdocs/expensereport
     %_datadir/dolibarr/htdocs/exports
    @@ -292,6 +294,7 @@ done >>%{name}.lang
     %_datadir/dolibarr/htdocs/supplier_proposal
     %_datadir/dolibarr/htdocs/support
     %_datadir/dolibarr/htdocs/theme
    +%_datadir/dolibarr/htdocs/takepos
     %_datadir/dolibarr/htdocs/ticket
     %_datadir/dolibarr/htdocs/user
     %_datadir/dolibarr/htdocs/variants
    diff --git a/build/rpm/dolibarr_mandriva.spec b/build/rpm/dolibarr_mandriva.spec
    index e3d2a849db2..dbb8e0d1310 100755
    --- a/build/rpm/dolibarr_mandriva.spec
    +++ b/build/rpm/dolibarr_mandriva.spec
    @@ -174,9 +174,11 @@ done >>%{name}.lang
     %_datadir/dolibarr/htdocs/core
     %_datadir/dolibarr/htdocs/cron
     %_datadir/dolibarr/htdocs/custom
    +%_datadir/dolibarr/htdocs/datapolicy
     %_datadir/dolibarr/htdocs/dav
     %_datadir/dolibarr/htdocs/don
     %_datadir/dolibarr/htdocs/ecm
    +%_datadir/dolibarr/htdocs/emailcollector
     %_datadir/dolibarr/htdocs/expedition
     %_datadir/dolibarr/htdocs/expensereport
     %_datadir/dolibarr/htdocs/exports
    @@ -209,6 +211,7 @@ done >>%{name}.lang
     %_datadir/dolibarr/htdocs/supplier_proposal
     %_datadir/dolibarr/htdocs/support
     %_datadir/dolibarr/htdocs/theme
    +%_datadir/dolibarr/htdocs/takepos
     %_datadir/dolibarr/htdocs/ticket
     %_datadir/dolibarr/htdocs/user
     %_datadir/dolibarr/htdocs/variants
    diff --git a/build/rpm/dolibarr_opensuse.spec b/build/rpm/dolibarr_opensuse.spec
    index 5a64bec2e78..aa810a737b9 100755
    --- a/build/rpm/dolibarr_opensuse.spec
    +++ b/build/rpm/dolibarr_opensuse.spec
    @@ -185,9 +185,11 @@ done >>%{name}.lang
     %_datadir/dolibarr/htdocs/core
     %_datadir/dolibarr/htdocs/cron
     %_datadir/dolibarr/htdocs/custom
    +%_datadir/dolibarr/htdocs/datapolicy
     %_datadir/dolibarr/htdocs/dav
     %_datadir/dolibarr/htdocs/don
     %_datadir/dolibarr/htdocs/ecm
    +%_datadir/dolibarr/htdocs/emailcollector
     %_datadir/dolibarr/htdocs/expedition
     %_datadir/dolibarr/htdocs/expensereport
     %_datadir/dolibarr/htdocs/exports
    @@ -220,6 +222,7 @@ done >>%{name}.lang
     %_datadir/dolibarr/htdocs/supplier_proposal
     %_datadir/dolibarr/htdocs/support
     %_datadir/dolibarr/htdocs/theme
    +%_datadir/dolibarr/htdocs/takepos
     %_datadir/dolibarr/htdocs/ticket
     %_datadir/dolibarr/htdocs/user
     %_datadir/dolibarr/htdocs/variants
    diff --git a/dev/dolibarr_changes.txt b/dev/dolibarr_changes.txt
    index cdbc2e2bb40..37aef014e63 100644
    --- a/dev/dolibarr_changes.txt
    +++ b/dev/dolibarr_changes.txt
    @@ -1,5 +1,5 @@
     
    -This file describe changes made on external library after beeing included
    +This file describes changes made on external libraries after being included
     in Dolibarr root.
     
     
    @@ -48,6 +48,23 @@ into
     	// initialize subsetchars
     	$subsetchars = array_fill(0, 256, true);
     
    +* Replace the continue into switch with a break:
    +
    +case 're': {
    +	// justify block
    +	if (!TCPDF_STATIC::empty_string($this->lispacer)) {
    +		$this->lispacer = '';
    +		continue;
    +	}
    +
    +into 
    +case 're': {
    +	// justify block
    +	if (!TCPDF_STATIC::empty_string($this->lispacer)) {
    +		$this->lispacer = '';
    +		break;
    +	}
    +
     * Optionnaly, removed all fonts except 
         dejavusans* (used by greek, arab, persan, romanian, turkish), 
         freemono* (russian), 
    @@ -61,17 +78,24 @@ In htdocs/includes/tcpdf/tcpdf.php
     +       protected $default_monospaced_font = 'freemono';
     
     
    +		
     
     TCPDI:
     ------
     Add fpdf_tpl.php 1.2
     Add tcpdi.php
    +
     Add tcpdi_parser.php and replace:
     require_once(dirname(__FILE__).'/include/tcpdf_filters.php');
     with:
     require_once(dirname(__FILE__).'/../tecnickcom/tcpdf/include/tcpdf_filters.php');
     
     
    +* Fix by replacing
    +	} elseif (($key == '/Index') AND ($v[0] == PDF_TYPE_ARRAY AND count($v[1] >= 2))) {
    +with
    +	} elseif (($key == '/Index') AND ($v[0] == PDF_TYPE_ARRAY AND count($v[1]) >= 2)) {
    +
     
     
     JSGANTT:
    diff --git a/dev/examples/code/create_invoice.php b/dev/examples/code/create_invoice.php
    index bd82d38d306..e519c62a436 100755
    --- a/dev/examples/code/create_invoice.php
    +++ b/dev/examples/code/create_invoice.php
    @@ -40,7 +40,7 @@ $error=0;
     
     // -------------------- START OF YOUR CODE HERE --------------------
     // Include Dolibarr environment
    -require_once($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     // After this $db, $mysoc, $langs and $conf->entity are defined. Opened handler to database will be closed at end of file.
     
     //$langs->setDefaultLang('en_US'); 	// To change default language of $langs
    @@ -58,7 +58,7 @@ print "***** ".$script_file." (".$version.") *****\n";
     // Start of transaction
     $db->begin();
     
    -require_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
    +require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php";
     
     // Create invoice object
     $obj = new Facture($db);
    diff --git a/dev/examples/code/create_order.php b/dev/examples/code/create_order.php
    index 4575e9e28f3..95b047705fa 100755
    --- a/dev/examples/code/create_order.php
    +++ b/dev/examples/code/create_order.php
    @@ -40,7 +40,7 @@ $error=0;
     
     // -------------------- START OF YOUR CODE HERE --------------------
     // Include Dolibarr environment
    -require_once($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     // After this $db, $mysoc, $langs and $conf->entity are defined. Opened handler to database will be closed at end of file.
     
     //$langs->setDefaultLang('en_US'); 	// To change default language of $langs
    @@ -59,7 +59,7 @@ print "***** ".$script_file." (".$version.") *****\n";
     // Start of transaction
     $db->begin();
     
    -require_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php");
    +require_once DOL_DOCUMENT_ROOT."/commande/class/commande.class.php";
     
     // Create order object
     $com = new Commande($db);
    diff --git a/dev/examples/code/create_product.php b/dev/examples/code/create_product.php
    index 61598ff59d9..8cbc07a1b63 100755
    --- a/dev/examples/code/create_product.php
    +++ b/dev/examples/code/create_product.php
    @@ -40,7 +40,7 @@ $error=0;
     
     // -------------------- START OF YOUR CODE HERE --------------------
     // Include Dolibarr environment
    -require_once($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     // After this $db, $mysoc, $langs and $conf->entity are defined. Opened handler to database will be closed at end of file.
     
     //$langs->setDefaultLang('en_US'); 	// To change default language of $langs
    @@ -59,7 +59,7 @@ print "***** ".$script_file." (".$version.") *****\n";
     // Start of transaction
     $db->begin();
     
    -require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
    +require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
     
     // Create instance of object
     $myproduct=new Product($db);
    diff --git a/dev/examples/code/create_user.php b/dev/examples/code/create_user.php
    index 20173eb914a..f8e0ba23011 100755
    --- a/dev/examples/code/create_user.php
    +++ b/dev/examples/code/create_user.php
    @@ -40,7 +40,7 @@ $error=0;
     
     // -------------------- START OF YOUR CODE HERE --------------------
     // Include Dolibarr environment
    -require_once($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     // After this $db, $mysoc, $langs and $conf->entity are defined. Opened handler to database will be closed at end of file.
     
     //$langs->setDefaultLang('en_US'); 	// To change default language of $langs
    @@ -58,7 +58,7 @@ print "***** ".$script_file." (".$version.") *****\n";
     // Start of transaction
     $db->begin();
     
    -require_once(DOL_DOCUMENT_ROOT."/user/class/user.class.php");
    +require_once DOL_DOCUMENT_ROOT."/user/class/user.class.php";
     
     // Create user object
     $obj = new User($db);
    diff --git a/dev/examples/code/get_contracts.php b/dev/examples/code/get_contracts.php
    index fbe512300e8..daff0e43e6f 100755
    --- a/dev/examples/code/get_contracts.php
    +++ b/dev/examples/code/get_contracts.php
    @@ -40,7 +40,7 @@ $error=0;
     
     // -------------------- START OF YOUR CODE HERE --------------------
     // Include Dolibarr environment
    -require_once($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     // After this $db, $mysoc, $langs and $conf->entity are defined. Opened handler to database will be closed at end of file.
     
     //$langs->setDefaultLang('en_US'); 	// To change default language of $langs
    @@ -65,7 +65,7 @@ print 'Argument id_thirdparty='.$argv[1]."\n";
     // Start of transaction
     $db->begin();
     
    -require_once(DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php");
    +require_once DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php";
     
     // Create contract object
     $obj = new Contrat($db);
    diff --git a/dev/examples/mail/dolibarr_mail_simpleHTML.txt b/dev/examples/mail/dolibarr_mail_simpleHTML.txt
    index 5c552221ca6..391800f5095 100644
    --- a/dev/examples/mail/dolibarr_mail_simpleHTML.txt
    +++ b/dev/examples/mail/dolibarr_mail_simpleHTML.txt
    @@ -4,4 +4,4 @@ X-Mailer: Dolibarr version 2.7.0-beta (using php mail)
     MIME-Version: 1.0
     Content-Type: text/html; charset=UTF-8
     Content-Transfer-Encoding: 8bit
    -<html><head><title></title></head><body>Test&eacute;<br />fdsfsdf<br />fsdf<strong>sfd</strong>s<br />fssdfsd<br /></body></html>
    +<html><head><title></title></head><body>Test&eacute;<br>fdsfsdf<br>fsdf<strong>sfd</strong>s<br>fssdfsd<br></body></html>
    diff --git a/dev/initdata/generate-invoice.php b/dev/initdata/generate-invoice.php
    index e313aa44d1f..280518bd4e3 100755
    --- a/dev/initdata/generate-invoice.php
    +++ b/dev/initdata/generate-invoice.php
    @@ -32,9 +32,9 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     
     // Recupere root dolibarr
     //$path=preg_replace('/generate-produit.php/i','',$_SERVER["PHP_SELF"]);
    -require (__DIR__. '/../../htdocs/master.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
    +require __DIR__. '/../../htdocs/master.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php";
    +require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
     
     
     /*
    @@ -185,7 +185,4 @@ while ($i < GEN_NUMBER_FACTURE && $result >= 0)
     	{
     		dol_print_error($db,$object->error);
     	}
    -
     }
    -
    -
    diff --git a/dev/initdata/generate-order.php b/dev/initdata/generate-order.php
    index c73b15b620d..5e53fa752a2 100755
    --- a/dev/initdata/generate-order.php
    +++ b/dev/initdata/generate-order.php
    @@ -33,14 +33,14 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     
     // Recupere root dolibarr
     //$path=preg_replace('/generate-commande.php/i','',$_SERVER["PHP_SELF"]);
    -require (__DIR__. '/../../htdocs/master.inc.php');
    +require __DIR__. '/../../htdocs/master.inc.php';
     include_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     include_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
     include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
    -require_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php");
    +require_once DOL_DOCUMENT_ROOT."/commande/class/commande.class.php";
     
     
     /*
    diff --git a/dev/initdata/generate-product.php b/dev/initdata/generate-product.php
    index 3ae44b00b3a..393d5c5ce3d 100755
    --- a/dev/initdata/generate-product.php
    +++ b/dev/initdata/generate-product.php
    @@ -33,7 +33,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     
     // Recupere root dolibarr
     //$path=preg_replace('/generate-produit.php/i','',$_SERVER["PHP_SELF"]);
    -require (__DIR__. '/../../htdocs/master.inc.php');
    +require __DIR__. '/../../htdocs/master.inc.php';
     include_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    diff --git a/dev/initdata/generate-proposal.php b/dev/initdata/generate-proposal.php
    index 6f1dc293a68..eb2bfe15a00 100755
    --- a/dev/initdata/generate-proposal.php
    +++ b/dev/initdata/generate-proposal.php
    @@ -33,11 +33,11 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     
     // Recupere root dolibarr
     //$path=preg_replace('/generate-propale.php/i','',$_SERVER["PHP_SELF"]);
    -require (__DIR__. '/../../htdocs/master.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/comm/propal/class/propal.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
    +require __DIR__. '/../../htdocs/master.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php";
    +require_once DOL_DOCUMENT_ROOT."/comm/propal/class/propal.class.php";
    +require_once DOL_DOCUMENT_ROOT."/commande/class/commande.class.php";
    +require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
     
     /*
      * Parameters
    @@ -157,7 +157,7 @@ $user->rights->propal->propal_advance->validate=1;
     
     if (! empty($conf->global->PROPALE_ADDON) && is_readable(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php"))
     {
    -	require_once(DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php");
    +	require_once DOL_DOCUMENT_ROOT ."/core/modules/propale/".$conf->global->PROPALE_ADDON.".php";
     }
     
     $i=0;
    @@ -218,6 +218,4 @@ while ($i < GEN_NUMBER_PROPAL && $result >= 0)
     	{
     		dol_print_error($db,$object->error);
     	}
    -
     }
    -
    diff --git a/dev/initdata/generate-thirdparty.php b/dev/initdata/generate-thirdparty.php
    index 992ab61f4ef..7f2c3e2055d 100755
    --- a/dev/initdata/generate-thirdparty.php
    +++ b/dev/initdata/generate-thirdparty.php
    @@ -33,7 +33,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     
     // Recupere root dolibarr
     //$path=preg_replace('/generate-societe.php/i','',$_SERVER["PHP_SELF"]);
    -require (__DIR__. '/../../htdocs/master.inc.php');
    +require __DIR__. '/../../htdocs/master.inc.php';
     include_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    diff --git a/dev/initdata/import-products.php b/dev/initdata/import-products.php
    index a08e3b6066e..0f4856aefb2 100755
    --- a/dev/initdata/import-products.php
    +++ b/dev/initdata/import-products.php
    @@ -21,7 +21,7 @@
     
     /**
      *      \file       dev/initdata/import-product.php
    - *		\brief      Script example to insert products from a csv file. 
    + *		\brief      Script example to insert products from a csv file.
      *                  To purge data, you can have a look at purge-data.php
      */
     
    @@ -36,7 +36,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     
     // Recupere root dolibarr
     $path=preg_replace('/import-products.php/i','',$_SERVER["PHP_SELF"]);
    -require ($path."../../htdocs/master.inc.php");
    +require $path."../../htdocs/master.inc.php";
     include_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     
    @@ -118,22 +118,22 @@ while ($fields=fgetcsv($fhandle, $linelength, $delimiter, $enclosure, $escape))
     {
         $i++;
         $errorrecord=0;
    -    
    +
         if ($startlinenb && $i < $startlinenb) continue;
         if ($endlinenb && $i > $endlinenb) continue;
    -    
    +
         $nboflines++;
    -    
    +
         $produit = new Product($db);
         $produit->type = 0;
         $produit->status = 1;
         $produit->ref = trim($fields[0]);
    -    
    +
         print "Process line nb ".$i.", ref ".$produit->ref;
         $produit->label = trim($fields[2]);
         $produit->description = trim($fields[4]."\n".($fields[5] ? $fields[5].' x '.$fields[6].' x '.$fields[7] : ''));
         $produit->volume = price2num($fields[8]);
    -    $produit->volume_unit = 0;     
    +    $produit->volume_unit = 0;
         $produit->weight = price2num($fields[9]);
         $produit->weight_units = 0;          // -3 = g
     
    @@ -142,9 +142,9 @@ while ($fields=fgetcsv($fhandle, $linelength, $delimiter, $enclosure, $escape))
     
         $produit->status = 1;
         $produit->status_buy = 1;
    -    
    +
         $produit->finished = 1;
    -    
    +
         $produit->price_min = null;
         $produit->price_min_ttc = null;
         $produit->price = price2num($fields[11]);
    @@ -152,25 +152,25 @@ while ($fields=fgetcsv($fhandle, $linelength, $delimiter, $enclosure, $escape))
         $produit->price_base_type = 'TTC';
         $produit->tva_tx = price2num($fields[13]);
         $produit->tva_npr = 0;
    -    
    +
         $produit->cost_price = price2num($fields[16]);
    -    
    +
         // Extrafields
         $produit->array_options['options_ecotaxdeee']=price2num($fields[17]);
    -    
    +
         $ret=$produit->create($user);
         if ($ret < 0)
         {
             print " - Error in create result code = ".$ret." - ".$produit->errorsToString();
             $errorrecord++;
         }
    -	else 
    +	else
     	{
     	    print " - Creation OK with ref ".$produit->ref." - id = ".$ret;
     	}
     
     	dol_syslog("Add prices");
    -	
    +
         // If we use price level, insert price for each level
     	if (! $errorrecord && 1)
     	{
    @@ -181,14 +181,14 @@ while ($fields=fgetcsv($fhandle, $linelength, $delimiter, $enclosure, $escape))
                 print " - Error in updatePrice result code = ".$ret1." ".$ret2." - ".$produit->errorsToString();
                 $errorrecord++;
             }
    -    	else 
    +    	else
         	{
         	    print " - updatePrice OK";
         	}
     	}
    -	
    +
     	dol_syslog("Add multilangs");
    -	
    +
     	// Add alternative languages
     	if (! $errorrecord && 1)
     	{
    @@ -201,15 +201,15 @@ while ($fields=fgetcsv($fhandle, $linelength, $delimiter, $enclosure, $escape))
                 print " - Error in setMultiLangs result code = ".$ret." - ".$produit->errorsToString();
                 $errorrecord++;
             }
    -    	else 
    +    	else
         	{
         	    print " - setMultiLangs OK";
         	}
     	}
    -	
    +
     	print "\n";
    -	
    -	if ($errorrecord) 
    +
    +	if ($errorrecord)
     	{
     	    fwrite($fhandleerr, 'Error on record nb '.$i." - ".$produit->errorsToString()."\n");
     	    $error++;    // $errorrecord will be reset
    diff --git a/dev/initdata/import-thirdparties.php b/dev/initdata/import-thirdparties.php
    index 0c32c7ea6a3..63c6856e5ec 100755
    --- a/dev/initdata/import-thirdparties.php
    +++ b/dev/initdata/import-thirdparties.php
    @@ -36,7 +36,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     
     // Recupere root dolibarr
     $path=preg_replace('/import-thirdparties.php/i','',$_SERVER["PHP_SELF"]);
    -require ($path."../../htdocs/master.inc.php");
    +require $path."../../htdocs/master.inc.php";
     include_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     
    diff --git a/dev/initdata/import-users.php b/dev/initdata/import-users.php
    index 3aaa9c11a4a..c94f74341f6 100755
    --- a/dev/initdata/import-users.php
    +++ b/dev/initdata/import-users.php
    @@ -21,7 +21,7 @@
     
     /**
      *      \file       dev/initdata/import-thirdparties.php
    - *		\brief      Script example to insert thirdparties from a csv file. 
    + *		\brief      Script example to insert thirdparties from a csv file.
      *                  To purge data, you can have a look at purge-data.php
      */
     
    @@ -36,7 +36,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     
     // Recupere root dolibarr
     $path=preg_replace('/import-users.php/i','',$_SERVER["PHP_SELF"]);
    -require ($path."../../htdocs/master.inc.php");
    +require $path."../../htdocs/master.inc.php";
     include_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     
    @@ -118,15 +118,15 @@ while ($fields=fgetcsv($fhandle, $linelength, $delimiter, $enclosure, $escape))
     {
         $i++;
         $errorrecord=0;
    -    
    +
         if ($startlinenb && $i < $startlinenb) continue;
         if ($endlinenb && $i > $endlinenb) continue;
    -    
    +
         $nboflines++;
    -    
    +
         $object = new User($db);
         $object->statut = 1;
    -    
    +
         $tmp=explode(' ',$fields[3],2);
         $object->firstname = trim($tmp[0]);
         $object->lastname = trim($tmp[1]);
    @@ -134,23 +134,23 @@ while ($fields=fgetcsv($fhandle, $linelength, $delimiter, $enclosure, $escape))
         else $object->login=strtolower($object->firstname);
         $object->login=preg_replace('/ /','',$object->login);
         $object->password = 'init';
    -    
    +
         print "Process line nb ".$i.", login ".$object->login;
    -    
    +
         $ret=$object->create($user);
         if ($ret < 0)
         {
             print " - Error in create result code = ".$ret." - ".$object->errorsToString();
             $errorrecord++;
         }
    -	else 
    +	else
     	{
     	    print " - Creation OK with login ".$object->login." - id = ".$ret;
     	}
     
     	print "\n";
    -	
    -	if ($errorrecord) 
    +
    +	if ($errorrecord)
     	{
     	    fwrite($fhandleerr, 'Error on record nb '.$i." - ".$object->errorsToString()."\n");
     	    $error++;    // $errorrecord will be reset
    diff --git a/dev/initdata/purge-data.php b/dev/initdata/purge-data.php
    index f992dcb2dc6..2bdf200225b 100755
    --- a/dev/initdata/purge-data.php
    +++ b/dev/initdata/purge-data.php
    @@ -36,7 +36,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     
     // Recupere root dolibarr
     $path=preg_replace('/purge-data.php/i','',$_SERVER["PHP_SELF"]);
    -require ($path."../../htdocs/master.inc.php");
    +require $path."../../htdocs/master.inc.php";
     include_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    @@ -44,8 +44,7 @@ include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     include_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
     include_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
     
    -$langs->load("main");
    -$langs->load("errors");
    +$langs->loadLangs(array("main", "errors"));
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/dev/initdemo/initdemo.sh b/dev/initdemo/initdemo.sh
    index 2e49327ae1d..0091a61d300 100755
    --- a/dev/initdemo/initdemo.sh
    +++ b/dev/initdemo/initdemo.sh
    @@ -6,7 +6,7 @@
     # WARNING: This script erase all data of database
     # with data into dump file
     #
    -# Regis Houssin       - regis.houssin@capnetworks.com
    +# Regis Houssin       - regis.houssin@inodbox.com
     # Laurent Destailleur - eldy@users.sourceforge.net
     #------------------------------------------------------
     # Usage: initdemo.sh
    diff --git a/dev/initdemo/removeconfdemo.sh b/dev/initdemo/removeconfdemo.sh
    index de297fd1808..b5f76c45205 100755
    --- a/dev/initdemo/removeconfdemo.sh
    +++ b/dev/initdemo/removeconfdemo.sh
    @@ -3,7 +3,7 @@
     # Script to remove setup of a Dolibarr installation.
     # Note: "dialog" tool need to be available.
     #
    -# Regis Houssin       - regis.houssin@capnetworks.com
    +# Regis Houssin       - regis.houssin@inodbox.com
     # Laurent Destailleur - eldy@users.sourceforge.net
     #------------------------------------------------------
     # WARNING: This script erase setup of instance, 
    diff --git a/dev/initdemo/savedemo.sh b/dev/initdemo/savedemo.sh
    index 20aebb29b28..90b99995585 100755
    --- a/dev/initdemo/savedemo.sh
    +++ b/dev/initdemo/savedemo.sh
    @@ -3,7 +3,7 @@
     # Script to extrac a database with demo values.
     # Note: "dialog" tool need to be available if no parameter provided.
     #
    -# Regis Houssin       - regis.houssin@capnetworks.com
    +# Regis Houssin       - regis.houssin@inodbox.com
     # Laurent Destailleur - eldy@users.sourceforge.net
     #------------------------------------------------------
     # Usage: savedemo.sh
    diff --git a/dev/initdemo/sftpget_and_loaddump.php b/dev/initdemo/sftpget_and_loaddump.php
    index 981ff964b8e..98cb6189935 100755
    --- a/dev/initdemo/sftpget_and_loaddump.php
    +++ b/dev/initdemo/sftpget_and_loaddump.php
    @@ -41,15 +41,15 @@ $passwordbase=isset($argv[6])?$argv[6]:'';
     
     // Include Dolibarr environment
     $res=0;
    -if (! $res && file_exists($path."../../master.inc.php")) $res=@include($path."../../master.inc.php");
    -if (! $res && file_exists($path."../../htdocs/master.inc.php")) $res=@include($path."../../htdocs/master.inc.php");
    -if (! $res && file_exists("../master.inc.php")) $res=@include("../master.inc.php");
    -if (! $res && file_exists("../../master.inc.php")) $res=@include("../../master.inc.php");
    -if (! $res && file_exists("../../../master.inc.php")) $res=@include("../../../master.inc.php");
    -if (! $res && preg_match('/\/nltechno([^\/]*)\//',$_SERVER["PHP_SELF"],$reg)) $res=@include($path."../../../dolibarr".$reg[1]."/htdocs/master.inc.php"); // Used on dev env only
    -if (! $res && preg_match('/\/nltechno([^\/]*)\//',$_SERVER["PHP_SELF"],$reg)) $res=@include("../../../dolibarr".$reg[1]."/htdocs/master.inc.php"); // Used on dev env only
    +if (! $res && file_exists($path."../../master.inc.php")) $res=@include $path."../../master.inc.php";
    +if (! $res && file_exists($path."../../htdocs/master.inc.php")) $res=@include $path."../../htdocs/master.inc.php";
    +if (! $res && file_exists("../master.inc.php")) $res=@include "../master.inc.php";
    +if (! $res && file_exists("../../master.inc.php")) $res=@include "../../master.inc.php";
    +if (! $res && file_exists("../../../master.inc.php")) $res=@include "../../../master.inc.php";
    +if (! $res && preg_match('/\/nltechno([^\/]*)\//',$_SERVER["PHP_SELF"],$reg)) $res=@include $path."../../../dolibarr".$reg[1]."/htdocs/master.inc.php"; // Used on dev env only
    +if (! $res && preg_match('/\/nltechno([^\/]*)\//',$_SERVER["PHP_SELF"],$reg)) $res=@include "../../../dolibarr".$reg[1]."/htdocs/master.inc.php"; // Used on dev env only
     if (! $res) die ("Failed to include master.inc.php file\n");
    -include_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php');
    +include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
     
     /*
    diff --git a/dev/initdemo/updatedemo.php b/dev/initdemo/updatedemo.php
    index 9c453096904..53717314d5f 100755
    --- a/dev/initdemo/updatedemo.php
    +++ b/dev/initdemo/updatedemo.php
    @@ -15,7 +15,7 @@
      * You should have received a copy of the GNU General Public License
      * along with this program. If not, see <http://www.gnu.org/licenses/>.
      * or see http://www.gnu.org/
    - * 
    + *
      * Get a distant dump file and load it into a mysql database
      */
     
    @@ -36,15 +36,15 @@ $confirm=isset($argv[1])?$argv[1]:'';
     
     // Include Dolibarr environment
     $res=0;
    -if (! $res && file_exists($path."../../master.inc.php")) $res=@include($path."../../master.inc.php");
    -if (! $res && file_exists($path."../../htdocs/master.inc.php")) $res=@include($path."../../htdocs/master.inc.php");
    -if (! $res && file_exists("../master.inc.php")) $res=@include("../master.inc.php");
    -if (! $res && file_exists("../../master.inc.php")) $res=@include("../../master.inc.php");
    -if (! $res && file_exists("../../../master.inc.php")) $res=@include("../../../master.inc.php");
    -if (! $res && preg_match('/\/nltechno([^\/]*)\//',$_SERVER["PHP_SELF"],$reg)) $res=@include($path."../../../dolibarr".$reg[1]."/htdocs/master.inc.php"); // Used on dev env only
    -if (! $res && preg_match('/\/nltechno([^\/]*)\//',$_SERVER["PHP_SELF"],$reg)) $res=@include("../../../dolibarr".$reg[1]."/htdocs/master.inc.php"); // Used on dev env only
    +if (! $res && file_exists($path."../../master.inc.php")) $res=@include $path."../../master.inc.php";
    +if (! $res && file_exists($path."../../htdocs/master.inc.php")) $res=@include $path."../../htdocs/master.inc.php";
    +if (! $res && file_exists("../master.inc.php")) $res=@include "../master.inc.php";
    +if (! $res && file_exists("../../master.inc.php")) $res=@include "../../master.inc.php";
    +if (! $res && file_exists("../../../master.inc.php")) $res=@include "../../../master.inc.php";
    +if (! $res && preg_match('/\/nltechno([^\/]*)\//',$_SERVER["PHP_SELF"],$reg)) $res=@include $path."../../../dolibarr".$reg[1]."/htdocs/master.inc.php"; // Used on dev env only
    +if (! $res && preg_match('/\/nltechno([^\/]*)\//',$_SERVER["PHP_SELF"],$reg)) $res=@include "../../../dolibarr".$reg[1]."/htdocs/master.inc.php"; // Used on dev env only
     if (! $res) die ("Failed to include master.inc.php file\n");
    -include_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php');
    +include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
     
     /*
    @@ -74,7 +74,7 @@ $tables=array(
     
     $year=2010;
     $currentyear=$tmp['year'];
    -while ($year <= $currentyear) 
    +while ($year <= $currentyear)
     {
         //$year=2021;
         $delta=($currentyear - $year);
    @@ -84,7 +84,7 @@ while ($year <= $currentyear)
         {
             foreach($tables as $tablekey => $tableval)
             {
    -            print "\nCorrect ".$tablekey." for year ".$year." and move them to current year ".$currentyear." "; 
    +            print "\nCorrect ".$tablekey." for year ".$year." and move them to current year ".$currentyear." ";
                 $sql="select rowid from ".MAIN_DB_PREFIX.$tablekey." where ".$tableval[0]." between '".$year."-01-01' and '".$year."-12-31' and ".$tableval[0]." < DATE_ADD(NOW(), INTERVAL -1 YEAR)";
                 //$sql="select rowid from ".MAIN_DB_PREFIX.$tablekey." where ".$tableval[0]." between '".$year."-01-01' and '".$year."-12-31' and ".$tableval[0]." > NOW()";
                 $resql = $db->query($sql);
    @@ -110,14 +110,14 @@ while ($year <= $currentyear)
                             //print $sql2."\n";
                             $resql2 = $db->query($sql2);
                             if (! $resql2) dol_print_error($db);
    -                    }            
    +                    }
                         $i++;
                     }
                 }
                 else dol_print_error($db);
             }
         }
    -    
    +
         $year++;
     }
     
    diff --git a/dev/setup/codesniffer/ruleset.xml b/dev/setup/codesniffer/ruleset.xml
    index af962760e06..67bf58e51ed 100644
    --- a/dev/setup/codesniffer/ruleset.xml
    +++ b/dev/setup/codesniffer/ruleset.xml
    @@ -4,6 +4,7 @@
     	<description>Dolibarr coding standard.</description>
     
     	<exclude-pattern type="relative">build/html</exclude-pattern>
    +	<exclude-pattern type="relative">build/aps</exclude-pattern>
     	<exclude-pattern type="relative">documents</exclude-pattern>
     	<exclude-pattern type="relative">htdocs/custom</exclude-pattern>
     	<exclude-pattern type="relative">htdocs/includes</exclude-pattern>
    @@ -11,43 +12,29 @@
     	<exclude-pattern type="relative">*/nltechno*</exclude-pattern>
     	<exclude-pattern type="relative">*/htdocs/includes</exclude-pattern>
     	<exclude-pattern type="relative">*.min.css</exclude-pattern>
    +	<exclude-pattern type="relative">*.js</exclude-pattern>
     
     		<!-- List of all tests -->
     
    -	
    +
     	<!-- Rules from Internal Standard -->
    -	
    +
     	<rule ref="Internal.NoCodeFound">
     		<severity>0</severity>
     	</rule>
     
    -	
    -	<!-- Rules from Generic Standard -->
    -		
    -	<rule ref="Generic.CodeAnalysis.EmptyStatement" />
     
    -	<rule ref="Generic.CodeAnalysis.EmptyStatement.DetectedCatch">
    -		<severity>0</severity>
    -	</rule>
    -	<rule ref="Generic.CodeAnalysis.EmptyStatement.DetectedForeach">
    -		<severity>0</severity>
    -	</rule>
    -	<rule ref="Generic.CodeAnalysis.EmptyStatement.DetectedIf">
    -		<severity>0</severity>
    -	</rule>
    -	<rule ref="Generic.CodeAnalysis.EmptyStatement.DetectedElse">
    -		<severity>0</severity>
    -	</rule>
    -	<rule ref="Generic.CodeAnalysis.EmptyStatement.DetectedElseif">
    -		<severity>0</severity>
    -	</rule>
    -	
    -	<rule ref="Generic.CodeAnalysis.EmptyStatement.NotAllowed">
    -		<severity>0</severity>
    -	</rule>
    -	<rule ref="Generic.CodeAnalysis.EmptyStatement.NotAllowedWarning">
    -		<severity>0</severity>
    -	</rule>
    +	<!-- Rules from Generic Standard -->
    +
    +	<rule ref="Generic.CodeAnalysis.EmptyStatement">
    +        <exclude name="Generic.CodeAnalysis.EmptyStatement.DetectedIf"/>
    +        <exclude name="Generic.CodeAnalysis.EmptyStatement.DetectedElse"/>
    +        <exclude name="Generic.CodeAnalysis.EmptyStatement.DetectedElseif"/>
    +        <exclude name="Generic.CodeAnalysis.EmptyStatement.DetectedCatch"/>
    +        <exclude name="Generic.CodeAnalysis.EmptyStatement.DetectedForeach"/>
    +        <exclude name="Generic.CodeAnalysis.EmptyStatement.NotAllowed"/>
    +        <exclude name="Generic.CodeAnalysis.EmptyStatement.NotAllowedWarning"/>
    +    </rule>
     
         <!-- <rule ref="Generic.CodeAnalysis.ForLoopShouldBeWhileLoop" /> -->
     
    @@ -147,7 +134,7 @@
         <rule ref="Generic.PHP.DeprecatedFunctions.Deprecated">
             <severity>0</severity>
         </rule>
    -	
    +
     	<rule ref="Generic.PHP.DisallowShortOpenTag" />
     
         <rule ref="Generic.PHP.ForbiddenFunctions" />
    @@ -163,7 +150,7 @@
     	<rule ref="Generic.Strings.UnnecessaryStringConcat.Found">
             <severity>0</severity>
     	</rule>
    -    
    +
     	<!-- Disallow usage of tab -->
     	<!--  <rule ref="Generic.WhiteSpace.DisallowTabIndent" /> -->
     
    @@ -171,7 +158,24 @@
     	<!-- Disabled as this does not support tab -->
     	<!-- <rule ref="Generic.WhiteSpace.ScopeIndent" /> -->
     
    +    <!-- There MUST NOT be trailing whitespace at the end of non-blank lines. -->
    +    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace">
    +        <properties>
    +            <property name="ignoreBlankLines" value="true"/>
    +        </properties>
    +    </rule>
    +    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.StartFile">
    +        <severity>0</severity>
    +    </rule>
    +    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EndFile">
    +        <severity>0</severity>
    +    </rule>
    +    <rule ref="Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines">
    +        <severity>0</severity>
    +    </rule>
    +    <rule ref="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose" />
     
    +    <rule ref="Squiz.Functions.MultiLineFunctionDeclaration" />
     
         <!-- Rules from PEAR Standard -->
     
    @@ -186,7 +190,7 @@
         <rule ref="PEAR.Commenting.ClassComment.Missing">
             <severity>0</severity>
         </rule>
    -    
    +
         <rule ref="PEAR.Commenting.ClassComment.MissingTag">
     		<severity>0</severity>
         </rule>
    @@ -206,14 +210,14 @@
         <rule ref="PEAR.Commenting.ClassComment.MissingLinkTag">
             <severity>0</severity>
         </rule>
    -        
    +
         <rule ref="PEAR.Commenting.ClassComment.MissingPackageTag">
             <severity>0</severity>
         </rule>
    -        
     
    -   
    -    <!-- 
    +
    +
    +    <!--
         <rule ref="PEAR.Commenting.FileComment" />
         <rule ref="PEAR.Commenting.FileComment.WrongStyle">
             <severity>0</severity>
    @@ -225,20 +229,20 @@
             <severity>0</severity>
         </rule>
         -->
    -    
    +
         <rule ref="PEAR.Commenting.FunctionComment" />
     
         <rule ref="PEAR.Commenting.FunctionComment.Empty">
             <severity>5</severity>
         </rule>
    -    
    -	<rule ref="PEAR.Commenting.FunctionComment.MissingReturn">
    +
    +	<!--<rule ref="PEAR.Commenting.FunctionComment.MissingReturn">
             <severity>0</severity>
    -    </rule>
    -    <rule ref="PEAR.Commenting.FunctionComment.Missing">
    +    </rule>-->
    +    <!--<rule ref="PEAR.Commenting.FunctionComment.Missing">
             <severity>0</severity>
    -    </rule>
    -    
    +    </rule>-->
    +
         <rule ref="PEAR.Commenting.FunctionComment.SpacingAfterParamType" />
     
         <rule ref="PEAR.Commenting.FunctionComment.SpacingAfterParamName">
    @@ -254,11 +258,11 @@
         <rule ref="PEAR.Commenting.FunctionComment.ReturnNotRequired">
             <severity>0</severity>
         </rule>
    -    
    +
         <rule ref="PEAR.Commenting.FunctionComment.WrongStyle">
             <severity>0</severity>
         </rule>
    -    
    +
         <rule ref="PEAR.Commenting.FunctionComment.SpacingBeforeParamType">
             <severity>0</severity>
         </rule>
    @@ -285,7 +289,20 @@
     	<!-- <rule ref="PEAR.ControlStructures.MultiLineCondition" /> -->
     
     	<!-- Test if () are removed for includes -->
    -	<!-- <rule ref="PEAR.Files.IncludingFile"/> -->
    +	<rule ref="PEAR.Files.IncludingFile" />
    +    <!-- Disable some error messages that we do not want. -->
    +    <rule ref="PEAR.Files.IncludingFile.UseInclude">
    +        <severity>0</severity>
    +    </rule>
    +    <rule ref="PEAR.Files.IncludingFile.UseIncludeOnce">
    +        <severity>0</severity>
    +    </rule>
    +    <rule ref="PEAR.Files.IncludingFile.UseRequire">
    +        <severity>0</severity>
    +    </rule>
    +    <rule ref="PEAR.Files.IncludingFile.UseRequireOnce">
    +        <severity>0</severity>
    +    </rule>
     
     	<rule ref="PEAR.Formatting.MultiLineAssignment" />
     
    @@ -315,14 +332,14 @@
         <rule ref="PEAR.Functions.FunctionCallSignature.SpaceAfterCloseBracket">
             <severity>0</severity>
         </rule>
    -	
    +
     	<rule ref="PEAR.Functions.ValidDefaultValue" />
     
     	<rule ref="PEAR.NamingConventions.ValidClassName" />
     	<rule ref="PEAR.NamingConventions.ValidClassName.Invalid">
             <severity>0</severity>
     	</rule>
    -	
    +
     	<rule ref="PEAR.NamingConventions.ValidClassName.StartWithCapital">
             <severity>0</severity>
     	</rule>
    @@ -330,7 +347,7 @@
     	<rule ref="PEAR.NamingConventions.ValidClassName.StartWithCaptial">
             <severity>0</severity>
     	</rule>
    -	
    +
     	<rule ref="PEAR.NamingConventions.ValidFunctionName" />
     
     	<rule ref="PEAR.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore">
    @@ -347,31 +364,37 @@
             <severity>0</severity>
     	</rule>
     
    -	<rule ref="PEAR.NamingConventions.ValidFunctionName.NotCamelCaps">
    +    <!--<rule ref="PEAR.NamingConventions.ValidFunctionName.NotCamelCaps">
             <severity>0</severity>
    -	</rule>
    +    </rule>-->
    +	<!--<rule ref="PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps">
    +        <severity>0</severity>
    +	</rule>-->
     	<rule ref="PEAR.NamingConventions.ValidFunctionName.PrivateNoUnderscore">
             <severity>0</severity>
     	</rule>
     	<rule ref="PEAR.NamingConventions.ValidVariableName" />
     
    +    <rule ref="PSR2.Classes.ClassDeclaration" />
    +    <rule ref="PSR2.Methods.FunctionClosingBrace" />
    +
     	<!-- This is not in PSR2 -->
     	<rule ref="PEAR.NamingConventions.ValidVariableName.PrivateNoUnderscore">
             <severity>0</severity>
         </rule>
    -	
    +
     	<rule ref="PEAR.WhiteSpace.ObjectOperatorIndent" />
     
     	<!-- Need to be commented to be disabled
     	<rule ref="PEAR.WhiteSpace.ScopeClosingBrace">
             <severity>0</severity>
         </rule>
    -	
    +
         <rule ref="PEAR.WhiteSpace.ScopeClosingBrace.Line">
             <severity>0</severity>
         </rule>
     	-->
    -    
    +
         <!-- Already found as a Generic rule -->
     	<!-- <rule ref="PEAR.WhiteSpace.ScopeIndent" /> -->
     
    diff --git a/dev/tools/test/testtcpdf.php b/dev/tools/test/testtcpdf.php
    index e14dae9c2a3..ce962dce3d9 100755
    --- a/dev/tools/test/testtcpdf.php
    +++ b/dev/tools/test/testtcpdf.php
    @@ -27,8 +27,8 @@
      * @since 2008-03-04
      */
     
    -require_once('../../htdocs/includes/tecnickcom/tcpdf/config/tcpdf_config.php');
    -require_once('../../htdocs/includes/tecnickcom/tcpdf/tcpdf.php');
    +require_once '../../htdocs/includes/tecnickcom/tcpdf/config/tcpdf_config.php';
    +require_once '../../htdocs/includes/tecnickcom/tcpdf/tcpdf.php';
     
     // create new PDF document
     $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    diff --git a/dev/tools/test/testutf.php b/dev/tools/test/testutf.php
    index c626a92a57d..ffa746bcab5 100644
    --- a/dev/tools/test/testutf.php
    +++ b/dev/tools/test/testutf.php
    @@ -47,8 +47,8 @@ print 'Files has been created. Check its name from your explorer'."\n";
      * @since 2008-09-15
      */
     
    -require_once('../../htdocs/includes/tecnickcom/tcpdf/config/tcpdf_config.php');
    -require_once('../../htdocs/includes/tecnickcom/tcpdf/tcpdf.php');
    +require_once '../../htdocs/includes/tecnickcom/tcpdf/config/tcpdf_config.php';
    +require_once '../../htdocs/includes/tecnickcom/tcpdf/tcpdf.php';
     
     // create new PDF document
     $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    diff --git a/dev/translation/autotranslator.class.php b/dev/translation/autotranslator.class.php
    index 47d6a25ec15..123b7f6157d 100644
    --- a/dev/translation/autotranslator.class.php
    +++ b/dev/translation/autotranslator.class.php
    @@ -64,8 +64,7 @@ class autoTranslator
     		// Translate
     		//ini_set('default_charset','UTF-8');
     		ini_set('default_charset',$this->_outputpagecode);
    -		$this->parse_refLangTranslationFiles();
    -
    +		$this->parseRefLangTranslationFiles();
     	}
     
     	/**
    @@ -73,7 +72,7 @@ class autoTranslator
     	 *
     	 * 	@return	void
     	 */
    -	private function parse_refLangTranslationFiles()
    +	private function parseRefLangTranslationFiles()
     	{
     
     		$files = $this->getTranslationFilesArray($this->_refLang);
    @@ -346,5 +345,4 @@ class autoTranslator
     
     		return $rep;
     	}
    -
     }
    diff --git a/dev/translation/autotranslator.php b/dev/translation/autotranslator.php
    index 58314a23b9e..c7897810a72 100755
    --- a/dev/translation/autotranslator.php
    +++ b/dev/translation/autotranslator.php
    @@ -37,8 +37,8 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     }
     
     // Include Dolibarr environment
    -require_once($path.'../../htdocs/master.inc.php');
    -require_once($path.'../../htdocs/core/lib/files.lib.php');
    +require_once $path.'../../htdocs/master.inc.php';
    +require_once $path.'../../htdocs/core/lib/files.lib.php';
     // After this $db is an opened handler to database. We close it at end of file.
     
     // Load main language strings
    @@ -88,7 +88,7 @@ if ($argv[2] != 'all')
     	}
     }
     
    -require_once(DOL_DOCUMENT_ROOT."/../dev/translation/autotranslator.class.php");
    +require_once DOL_DOCUMENT_ROOT."/../dev/translation/autotranslator.class.php";
     
     $langParser = new autoTranslator($argv[2],$argv[1],$dir,$file,$argv[3]);
     
    diff --git a/dev/translation/sanity_check_en_langfiles.php b/dev/translation/sanity_check_en_langfiles.php
    index 2eedcda8760..0e3b2c7513f 100755
    --- a/dev/translation/sanity_check_en_langfiles.php
    +++ b/dev/translation/sanity_check_en_langfiles.php
    @@ -295,6 +295,7 @@ if ((! empty($_REQUEST['unused']) && $_REQUEST['unused'] == 'true') || (isset($a
     	    if (preg_match('/^DescADHERENT_/', $value)) $qualifiedforclean=0;
     	    if (preg_match('/^SubmitTranslation/', $value)) $qualifiedforclean=0;
     	    if (preg_match('/^ModuleCompanyCode/', $value)) $qualifiedforclean=0;
    +	    if (preg_match('/InDolibarr$/', $value)) $qualifiedforclean=0;
     	    // admin.lang
     	    if (preg_match('/^DAV_ALLOW_PUBLIC_DIR/i', $value)) $qualifiedforclean=0;
     	    if (preg_match('/^DAV_ALLOW_ECM_DIR/i', $value)) $qualifiedforclean=0;
    diff --git a/doc/images/dolibarr_screenshot5_1920x1080_b.jpg b/doc/images/dolibarr_screenshot5_1920x1080_b.jpg
    index 5f7d8a5b573..0b5c749cb5c 100644
    Binary files a/doc/images/dolibarr_screenshot5_1920x1080_b.jpg and b/doc/images/dolibarr_screenshot5_1920x1080_b.jpg differ
    diff --git a/doc/index.html b/doc/index.html
    index b888b13d9a6..5c655136e3e 100644
    --- a/doc/index.html
    +++ b/doc/index.html
    @@ -11,15 +11,15 @@ informations on Dolibarr.<br>
     But if you are looking for other resources (downloads, documentation, addons, ...), you can find this
     on Internet on web following sites:<br>
     <br>
    -* <a href="http://wiki.dolibarr.org">Dolibarr wiki (documentation)</a><br>
    +* <a href="https://wiki.dolibarr.org">Dolibarr wiki (documentation)</a><br>
     <br>
    -* <a href="http://www.dolibarr.org">Dolibarr portal (official website)</a><br>
    +* <a href="https://www.dolibarr.org">Dolibarr portal (official website)</a><br>
     <br>
    -* <a href="http://demo.dolibarr.org">Dolibarr demo (online)</a><br>
    +* <a href="https://demo.dolibarr.org">Dolibarr demo (online)</a><br>
     <br>
    -* <a href="http://www.nltechno.com/pages/dolibarrwinbin.php">DoliWamp, the Dolibarr for Windows</a><br>
    +* <a href="https://www.nltechno.com/pages/dolibarrwinbin.php">DoliWamp, the Dolibarr for Windows</a><br>
     <br>
    -* <a href="http://www.dolistore.com">DoliStore (official addons/plugins market place)</a><br>
    +* <a href="https://www.dolistore.com">DoliStore (official addons/plugins market place)</a><br>
     
     </body>
     </html>
    \ No newline at end of file
    diff --git a/doc/install/README-FR b/doc/install/README-FR
    index f954601ae0d..2cee29cf2df 100644
    --- a/doc/install/README-FR
    +++ b/doc/install/README-FR
    @@ -9,19 +9,19 @@ Téléchargement
     * Dolibarr ERP/CRM can be downloaded at sourceforge:
     http://sourceforge.net/projects/dolibarr/files
     or from Dolibarr official web site:
    -http://www.dolibarr.org
    +https://www.dolibarr.org
     
     * Most external modules are only available on DoliStore:
    -http://www.dolistore.org
    +https://www.dolistore.org
     
     
     --------------------------------
     Documentation utilisateur
     --------------------------------
     
    -* Pour une prise en main et installation rapide, consulter le fichier
    +* Pour une prise en main et installation rapide, consultez le fichier
     README-FR à la racine.
     
    -* Une documentation utilisateur francophone plus consistente est disponible en
    +* Une documentation utilisateur francophone plus consistante est disponible en
     ligne sur le wiki de Dolibarr à l'adresse:
    -http://wiki.dolibarr.org
    +https://wiki.dolibarr.org
    diff --git a/doc/user/README b/doc/user/README
    index 19507dba0e4..129dff11058 100644
    --- a/doc/user/README
    +++ b/doc/user/README
    @@ -4,4 +4,4 @@ User guide
     --------------------------------
     
     * All Dolibarr guides are available, on line, on the Dolibarr Web site:
    -http://www.dolibarr.org
    +https://www.dolibarr.org
    diff --git a/doc/user/README-FR b/doc/user/README-FR
    index f3a839de008..fbf67fd89bc 100644
    --- a/doc/user/README-FR
    +++ b/doc/user/README-FR
    @@ -3,9 +3,9 @@ README (french)
     Documentation utilisateur
     --------------------------------
     
    -* Pour une prise en main et installation rapide, consulter le fichier
    +* Pour une prise en main et installation rapide, consultez le fichier
     README-FR à la racine.
     
    -* Une documentation utilisateur francophone plus consistente est disponible en
    +* Une documentation utilisateur francophone plus consistante est disponible en
     ligne sur le site Web de Dolibarr à l'adresse:
    -http://www.dolibarr.fr
    +https://www.dolibarr.fr
    diff --git a/htdocs/.gitignore b/htdocs/.gitignore
    index 9d1e0435f86..ac35d8fab2f 100644
    --- a/htdocs/.gitignore
    +++ b/htdocs/.gitignore
    @@ -23,4 +23,8 @@
     /cabinetmed*
     /webmail*
     /conf/conf.php
    -/subtotal/
    +/subtotal*
    +/abricot*
    +/nomenclature*
    +/of/
    +/workstation/
    diff --git a/htdocs/accountancy/admin/account.php b/htdocs/accountancy/admin/account.php
    index da05246b05b..c9b72d9cc4c 100644
    --- a/htdocs/accountancy/admin/account.php
    +++ b/htdocs/accountancy/admin/account.php
    @@ -38,11 +38,11 @@ $id = GETPOST('id', 'int');
     $rowid = GETPOST('rowid', 'int');
     $contextpage=GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'accountingaccountlist';   // To manage different context of search
     
    -$search_account = GETPOST("search_account");
    -$search_label = GETPOST("search_label");
    -$search_accountparent = GETPOST("search_accountparent");
    -$search_pcgtype = GETPOST("search_pcgtype");
    -$search_pcgsubtype = GETPOST("search_pcgsubtype");
    +$search_account = GETPOST('search_account','alpha');
    +$search_label = GETPOST('search_label','alpha');
    +$search_accountparent = GETPOST('search_accountparent','alpha');
    +$search_pcgtype = GETPOST('search_pcgtype','alpha');
    +$search_pcgsubtype = GETPOST('search_pcgsubtype','alpha');
     
     // Security check
     if ($user->societe_id > 0) accessforbidden();
    @@ -133,7 +133,7 @@ if (empty($reshook))
     				}
     				$offsetforchartofaccount+=($conf->entity  * 100000000);
     
    -				$result = run_sql($sqlfile, 1, $conf->entity, 1, '', 'default', $offsetforchartofaccount);
    +				$result = run_sql($sqlfile, 1, $conf->entity, 1, '', 'default', 32768, 0, $offsetforchartofaccount);
     
     				if ($result > 0)
     				{
    @@ -427,5 +427,6 @@ if ($resql)
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/admin/accountmodel.php b/htdocs/accountancy/admin/accountmodel.php
    index f024f54c41c..e8f6b8e43b7 100644
    --- a/htdocs/accountancy/admin/accountmodel.php
    +++ b/htdocs/accountancy/admin/accountmodel.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2016  Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2011-2018  Philippe Grand          <philippe.grand@atoo-net.com>
      * Copyright (C) 2011       Remy Younes             <ryounes@gmail.com>
    @@ -44,7 +44,7 @@ if (! empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT . '/core
     // Load translation files required by the page
     $langs->loadLangs(array("errors","admin","companies","resource","holiday","compta","accountancy","hrm"));
     
    -$action=GETPOST('action','alpha')?GETPOST('action','alpha'):'view';
    +$action=GETPOST('action','aZ09')?GETPOST('action','aZ09'):'view';
     $confirm=GETPOST('confirm','alpha');
     $id=31;
     $rowid=GETPOST('rowid','alpha');
    @@ -55,8 +55,8 @@ $acts[1] = "disable";
     $actl[0] = img_picto($langs->trans("Disabled"),'switch_off');
     $actl[1] = img_picto($langs->trans("Activated"),'switch_on');
     
    -$listoffset=GETPOST('listoffset');
    -$listlimit=GETPOST('listlimit')>0?GETPOST('listlimit'):1000;
    +$listoffset=GETPOST('listoffset','alpha');
    +$listlimit=GETPOST('listlimit','int')>0?GETPOST('listlimit','int'):1000;
     $active = 1;
     
     $sortfield = GETPOST("sortfield",'aZ09comma');
    @@ -139,13 +139,13 @@ $sourceList=array();
      * Actions
      */
     
    -if (GETPOST('button_removefilter') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter_x'))
    +if (GETPOST('button_removefilter','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter_x','alpha'))
     {
     	$search_country_id = '';
     }
     
     // Actions add or modify an entry into a dictionary
    -if (GETPOST('actionadd') || GETPOST('actionmodify'))
    +if (GETPOST('actionadd','alpha') || GETPOST('actionmodify','alpha'))
     {
     	$listfield=explode(',', str_replace(' ', '',$tabfield[$id]));
     	$listfieldinsert=explode(',',$tabfieldinsert[$id]);
    @@ -235,7 +235,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
     	if ($_POST["accountancy_code_buy"] <= 0) $_POST["accountancy_code_buy"]='';	// If empty, we force to null
     
     	// Si verif ok et action add, on ajoute la ligne
    -	if ($ok && GETPOST('actionadd'))
    +	if ($ok && GETPOST('actionadd','alpha'))
     	{
     		if ($tabrowid[$id])
     		{
    @@ -247,7 +247,6 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
     			{
     				$obj = $db->fetch_object($result);
     				$newid=($obj->newid + 1);
    -
     			} else {
     				dol_print_error($db);
     			}
    @@ -300,7 +299,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
     	}
     
     	// Si verif ok et action modify, on modifie la ligne
    -	if ($ok && GETPOST('actionmodify'))
    +	if ($ok && GETPOST('actionmodify','alpha'))
     	{
     		if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
     		else { $rowidcol="rowid"; }
    @@ -341,7 +340,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
     	//$_GET["id"]=GETPOST('id', 'int');       // Force affichage dictionnaire en cours d'edition
     }
     
    -if (GETPOST('actioncancel'))
    +if (GETPOST('actioncancel','alpha'))
     {
     	//$_GET["id"]=GETPOST('id', 'int');       // Force affichage dictionnaire en cours d'edition
     }
    @@ -524,62 +523,18 @@ if ($id)
     			$valuetoshow=ucfirst($fieldlist[$field]);   // Par defaut
     			$valuetoshow=$langs->trans($valuetoshow);   // try to translate
     			$align="left";
    -			if ($fieldlist[$field]=='source')          { $valuetoshow=$langs->trans("Contact"); }
    -			if ($fieldlist[$field]=='price')           { $valuetoshow=$langs->trans("PriceUHT"); }
    -			if ($fieldlist[$field]=='taux')            {
    -				if ($tabname[$id] != MAIN_DB_PREFIX."c_revenuestamp") $valuetoshow=$langs->trans("Rate");
    -				else $valuetoshow=$langs->trans("Amount");
    -				$align='right';
    -			}
    -			if ($fieldlist[$field]=='localtax1_type')  { $valuetoshow=$langs->trans("UseLocalTax")." 2"; $align="center"; $sortable=0; }
    -			if ($fieldlist[$field]=='localtax1')       { $valuetoshow=$langs->trans("Rate")." 2";}
    -			if ($fieldlist[$field]=='localtax2_type')  { $valuetoshow=$langs->trans("UseLocalTax")." 3"; $align="center"; $sortable=0; }
    -			if ($fieldlist[$field]=='localtax2')       { $valuetoshow=$langs->trans("Rate")." 3";}
    -			if ($fieldlist[$field]=='organization')    { $valuetoshow=$langs->trans("Organization"); }
    -			if ($fieldlist[$field]=='lang')            { $valuetoshow=$langs->trans("Language"); }
    -			if ($fieldlist[$field]=='type')            {
    -				if ($tabname[$id] == MAIN_DB_PREFIX."c_paiement") $valuetoshow=$form->textwithtooltip($langs->trans("Type"),$langs->trans("TypePaymentDesc"),2,1,img_help(1,''));
    -				else $valuetoshow=$langs->trans("Type");
    -			}
     			if ($fieldlist[$field]=='code')            { $valuetoshow=$langs->trans("Code"); }
     			if ($fieldlist[$field]=='libelle' || $fieldlist[$field]=='label')
     			{
     				$valuetoshow=$langs->trans("Label");
     				if ($id != 25) $valuetoshow.="*";
     			}
    -			if ($fieldlist[$field]=='libelle_facture') { $valuetoshow=$langs->trans("LabelOnDocuments")."*"; }
     			if ($fieldlist[$field]=='country')         {
     				if (in_array('region_id',$fieldlist)) { print '<td>&nbsp;</td>'; continue; }		// For region page, we do not show the country input
     				$valuetoshow=$langs->trans("Country");
     			}
    -			if ($fieldlist[$field]=='recuperableonly') { $valuetoshow=$langs->trans("NPR"); $align="center"; }
    -			if ($fieldlist[$field]=='nbjour')          { $valuetoshow=$langs->trans("NbOfDays"); }
    -			if ($fieldlist[$field]=='type_cdr')        { $valuetoshow=$langs->trans("AtEndOfMonth"); $align="center"; }
    -			if ($fieldlist[$field]=='decalage')        { $valuetoshow=$langs->trans("Offset"); }
    -			if ($fieldlist[$field]=='width')           { $valuetoshow=$langs->trans("Width"); }
    -			if ($fieldlist[$field]=='height')          { $valuetoshow=$langs->trans("Height"); }
    -			if ($fieldlist[$field]=='unit')            { $valuetoshow=$langs->trans("MeasuringUnit"); }
    -			if ($fieldlist[$field]=='region_id' || $fieldlist[$field]=='country_id') { $valuetoshow=''; }
    -			if ($fieldlist[$field]=='accountancy_code'){ $valuetoshow=$langs->trans("AccountancyCode"); }
    -			if ($fieldlist[$field]=='accountancy_code_sell'){ $valuetoshow=$langs->trans("AccountancyCodeSell"); }
    -			if ($fieldlist[$field]=='accountancy_code_buy'){ $valuetoshow=$langs->trans("AccountancyCodeBuy"); }
    +			if ($fieldlist[$field]=='country_id') { $valuetoshow=''; }
     			if ($fieldlist[$field]=='pcg_version' || $fieldlist[$field]=='fk_pcg_version') { $valuetoshow=$langs->trans("Pcg_version"); }
    -			if ($fieldlist[$field]=='account_parent')  { $valuetoshow=$langs->trans("Accountparent"); }
    -			if ($fieldlist[$field]=='pcg_type')        { $valuetoshow=$langs->trans("Pcg_type"); }
    -			if ($fieldlist[$field]=='pcg_subtype')     { $valuetoshow=$langs->trans("Pcg_subtype"); }
    -			if ($fieldlist[$field]=='sortorder')       { $valuetoshow=$langs->trans("SortOrder"); }
    -			if ($fieldlist[$field]=='short_label')     { $valuetoshow=$langs->trans("ShortLabel"); }
    -			if ($fieldlist[$field]=='type_template')   { $valuetoshow=$langs->trans("TypeOfTemplate"); }
    -			if ($fieldlist[$field]=='range_account')   { $valuetoshow=$langs->trans("Range"); }
    -			if ($fieldlist[$field]=='sens')            { $valuetoshow=$langs->trans("Sens"); }
    -			if ($fieldlist[$field]=='category_type')   { $valuetoshow=$langs->trans("Calculated"); }
    -			if ($fieldlist[$field]=='formula')         { $valuetoshow=$langs->trans("Formula"); }
    -
    -			if ($id == 2)	// Special cas for state page
    -			{
    -				if ($fieldlist[$field]=='region_id') { $valuetoshow='&nbsp;'; $showfield=1; }
    -				if ($fieldlist[$field]=='region') { $valuetoshow=$langs->trans("Country").'/'.$langs->trans("Region"); $showfield=1; }
    -			}
     
     			if ($valuetoshow != '')
     			{
    @@ -604,7 +559,7 @@ if ($id)
     
     		$obj = new stdClass();
     		// If data was already input, we define them in obj to populate input fields.
    -		if (GETPOST('actionadd'))
    +		if (GETPOST('actionadd','alpha'))
     		{
     			foreach ($fieldlist as $key=>$val)
     			{
    @@ -709,50 +664,15 @@ if ($id)
     			*/
     			$valuetoshow=ucfirst($fieldlist[$field]);   // By defaut
     			$valuetoshow=$langs->trans($valuetoshow);   // try to translate
    -			if ($fieldlist[$field]=='source')          { $valuetoshow=$langs->trans("Contact"); }
    -			if ($fieldlist[$field]=='price')           { $valuetoshow=$langs->trans("PriceUHT"); }
    -			if ($fieldlist[$field]=='taux')            {
    -				if ($tabname[$id] != MAIN_DB_PREFIX."c_revenuestamp") $valuetoshow=$langs->trans("Rate");
    -				else $valuetoshow=$langs->trans("Amount");
    -				$align='right';
    -			}
    -			if ($fieldlist[$field]=='localtax1_type')  { $valuetoshow=$langs->trans("UseLocalTax")." 2"; $align="center"; $sortable=0; }
    -			if ($fieldlist[$field]=='localtax1')       { $valuetoshow=$langs->trans("Rate")." 2"; $sortable=0; }
    -			if ($fieldlist[$field]=='localtax2_type')  { $valuetoshow=$langs->trans("UseLocalTax")." 3"; $align="center"; $sortable=0; }
    -			if ($fieldlist[$field]=='localtax2')       { $valuetoshow=$langs->trans("Rate")." 3"; $sortable=0; }
    -			if ($fieldlist[$field]=='organization')    { $valuetoshow=$langs->trans("Organization"); }
    -			if ($fieldlist[$field]=='lang')            { $valuetoshow=$langs->trans("Language"); }
    -			if ($fieldlist[$field]=='type')            { $valuetoshow=$langs->trans("Type"); }
     			if ($fieldlist[$field]=='code')            { $valuetoshow=$langs->trans("Code"); }
     			if ($fieldlist[$field]=='libelle' || $fieldlist[$field]=='label')
     			{
     				$valuetoshow=$langs->trans("Label");
     			   	if ($id != 25) $valuetoshow.="*";
     			}
    -			if ($fieldlist[$field]=='libelle_facture') { $valuetoshow=$langs->trans("LabelOnDocuments")."*"; }
     			if ($fieldlist[$field]=='country')         { $valuetoshow=$langs->trans("Country"); }
    -			if ($fieldlist[$field]=='recuperableonly') { $valuetoshow=$langs->trans("NPR"); $align="center"; }
    -			if ($fieldlist[$field]=='nbjour')          { $valuetoshow=$langs->trans("NbOfDays"); }
    -			if ($fieldlist[$field]=='type_cdr')        { $valuetoshow=$langs->trans("AtEndOfMonth"); $align="center"; }
    -			if ($fieldlist[$field]=='decalage')        { $valuetoshow=$langs->trans("Offset"); }
    -			if ($fieldlist[$field]=='width')           { $valuetoshow=$langs->trans("Width"); }
    -			if ($fieldlist[$field]=='height')          { $valuetoshow=$langs->trans("Height"); }
    -			if ($fieldlist[$field]=='unit')            { $valuetoshow=$langs->trans("MeasuringUnit"); }
    -			if ($fieldlist[$field]=='region_id' || $fieldlist[$field]=='country_id') { $showfield=0; }
    -			if ($fieldlist[$field]=='accountancy_code'){ $valuetoshow=$langs->trans("AccountancyCode"); }
    -			if ($fieldlist[$field]=='accountancy_code_sell'){ $valuetoshow=$langs->trans("AccountancyCodeSell"); $sortable=0; }
    -			if ($fieldlist[$field]=='accountancy_code_buy'){ $valuetoshow=$langs->trans("AccountancyCodeBuy"); $sortable=0; }
    +			if ($fieldlist[$field]=='country_id') { $showfield=0; }
     			if ($fieldlist[$field]=='fk_pcg_version')  { $valuetoshow=$langs->trans("Pcg_version"); }
    -			if ($fieldlist[$field]=='account_parent')  { $valuetoshow=$langs->trans("Accountsparent"); }
    -			if ($fieldlist[$field]=='pcg_type')        { $valuetoshow=$langs->trans("Pcg_type"); }
    -			if ($fieldlist[$field]=='pcg_subtype')     { $valuetoshow=$langs->trans("Pcg_subtype"); }
    -			if ($fieldlist[$field]=='sortorder')       { $valuetoshow=$langs->trans("SortOrder"); }
    -			if ($fieldlist[$field]=='short_label')     { $valuetoshow=$langs->trans("ShortLabel"); }
    -			if ($fieldlist[$field]=='type_template')   { $valuetoshow=$langs->trans("TypeOfTemplate"); }
    -			if ($fieldlist[$field]=='range_account')   { $valuetoshow=$langs->trans("Range"); }
    -			if ($fieldlist[$field]=='sens')            { $valuetoshow=$langs->trans("Sens"); }
    -			if ($fieldlist[$field]=='category_type')   { $valuetoshow=$langs->trans("Calculated"); }
    -			if ($fieldlist[$field]=='formula')         { $valuetoshow=$langs->trans("Formula"); }
     
     			// Affiche nom du champ
     			if ($showfield)
    @@ -832,120 +752,9 @@ if ($id)
     									$valuetoshow=($key != "Country".strtoupper($obj->country_code)?$obj->country_code." - ".$key:$obj->country);
     								}
     							}
    -							else if ($fieldlist[$field]=='recuperableonly' || $fieldlist[$field]=='type_cdr' || $fieldlist[$field] == 'deductible' || $fieldlist[$field] == 'category_type') {
    -								if(empty($valuetoshow)) $valuetoshow = $langs->trans('None');
    -								elseif($valuetoshow == 1) $valuetoshow = $langs->trans('AtEndOfMonth');
    -								elseif($valuetoshow == 2) $valuetoshow = $langs->trans('CurrentNext');
    -								$align="center";
    -							}
    -							else if ($fieldlist[$field]=='price' || preg_match('/^amount/i',$fieldlist[$field])) {
    -								$valuetoshow=price($valuetoshow);
    -							}
    -							else if ($fieldlist[$field]=='libelle_facture') {
    -								$langs->loadLangs(array("bills"));
    -								$key=$langs->trans("PaymentCondition".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "PaymentCondition".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -								$valuetoshow=nl2br($valuetoshow);
    -							}
    -							else if ($fieldlist[$field]=='label' && $tabname[$id]==MAIN_DB_PREFIX.'c_country') {
    -								$key=$langs->trans("Country".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "Country".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='label' && $tabname[$id]==MAIN_DB_PREFIX.'c_availability') {
    -								$langs->loadLangs(array("propal"));
    -								$key=$langs->trans("AvailabilityType".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "AvailabilityType".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_actioncomm') {
    -								$key=$langs->trans("Action".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "Action".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if (! empty($obj->code_iso) && $fieldlist[$field]=='label' && $tabname[$id]==MAIN_DB_PREFIX.'c_currencies') {
    -								$key=$langs->trans("Currency".strtoupper($obj->code_iso));
    -								$valuetoshow=($obj->code_iso && $key != "Currency".strtoupper($obj->code_iso)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_typent') {
    -								$key=$langs->trans(strtoupper($obj->code));
    -								$valuetoshow=($key != strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_prospectlevel') {
    -								$key=$langs->trans(strtoupper($obj->code));
    -								$valuetoshow=($key != strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='label' && $tabname[$id]==MAIN_DB_PREFIX.'c_civility') {
    -								$key=$langs->trans("Civility".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "Civility".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_type_contact') {
    -								$langs->loadLangs(array("agenda"));
    -								$key=$langs->trans("TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "TypeContact_".$obj->element."_".$obj->source."_".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_payment_term') {
    -								$langs->loadLangs(array("bills"));
    -								$key=$langs->trans("PaymentConditionShort".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "PaymentConditionShort".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_paiement') {
    -								$langs->loadLangs(array("bills"));
    -								$key=$langs->trans("PaymentType".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "PaymentType".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='label' && $tabname[$id]==MAIN_DB_PREFIX.'c_input_reason') {
    -								$key=$langs->trans("DemandReasonType".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "DemandReasonType".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_input_method') {
    -								$langs->loadLangs(array("orders"));
    -								$key=$langs->trans($obj->code);
    -								$valuetoshow=($obj->code && $key != $obj->code)?$key:$obj->{$fieldlist[$field]};
    -							}
    -							else if ($fieldlist[$field]=='libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_shipment_mode') {
    -								$langs->loadLangs(array("sendings"));
    -								$key=$langs->trans("SendingMethod".strtoupper($obj->code));
    -								$valuetoshow=($obj->code && $key != "SendingMethod".strtoupper($obj->code)?$key:$obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field] == 'libelle' && $tabname[$id]==MAIN_DB_PREFIX.'c_paper_format')
    -							{
    -								$key = $langs->trans('PaperFormat'.strtoupper($obj->code));
    -								$valuetoshow = ($obj->code && $key != 'PaperFormat'.strtoupper($obj->code) ? $key : $obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field] == 'label' && $tabname[$id] == MAIN_DB_PREFIX.'c_type_fees')
    -							{
    -								$langs->loadLangs(array("trips"));
    -								$key = $langs->trans(strtoupper($obj->code));
    -								$valuetoshow = ($obj->code && $key != strtoupper($obj->code) ? $key : $obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='region_id' || $fieldlist[$field]=='country_id') {
    +							else if ($fieldlist[$field]=='country_id') {
     								$showfield=0;
     							}
    -							else if ($fieldlist[$field]=='unicode') {
    -								$valuetoshow = $langs->getCurrencySymbol($obj->code,1);
    -							}
    -							else if ($fieldlist[$field]=='label' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_units') {
    -								$langs->loadLangs(array("products"));
    -								$valuetoshow=$langs->trans($obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='short_label' && $tabname[$_GET["id"]]==MAIN_DB_PREFIX.'c_units') {
    -								$langs->loadLangs(array("products"));
    -								$valuetoshow = $langs->trans($obj->{$fieldlist[$field]});
    -							}
    -							else if (($fieldlist[$field] == 'unit') && ($tabname[$id] == MAIN_DB_PREFIX.'c_paper_format'))
    -							{
    -								$key = $langs->trans('SizeUnit'.strtolower($obj->unit));
    -								$valuetoshow = ($obj->code && $key != 'SizeUnit'.strtolower($obj->unit) ? $key : $obj->{$fieldlist[$field]});
    -							}
    -							else if ($fieldlist[$field]=='taux') {
    -								$valuetoshow = price($valuetoshow, 0, $langs, 0, 0);
    -								$align="right";
    -							}
    -							else if (in_array($fieldlist[$field],array('recuperableonly')))
    -							{
    -								$align="center";
    -							}
    -							else if ($fieldlist[$field]=='accountancy_code' || $fieldlist[$field]=='accountancy_code_sell' || $fieldlist[$field]=='accountancy_code_buy') {
    -								$valuetoshow = length_accountg($valuetoshow);
    -							}
     
     							$class='tddict';
     							if ($fieldlist[$field] == 'tracking') $class.=' tdoverflowauto';
    @@ -956,17 +765,6 @@ if ($id)
     
     					// Can an entry be erased or disabled ?
     					$iserasable=1;$canbedisabled=1;$canbemodified=1;	// true by default
    -					if (isset($obj->code) && $id != 10)
    -					{
    -						if (($obj->code == '0' || $obj->code == '' || preg_match('/unknown/i',$obj->code))) { $iserasable = 0; $canbedisabled = 0; }
    -						else if ($obj->code == 'RECEP') { $iserasable = 0; $canbedisabled = 0; }
    -						else if ($obj->code == 'EF0')   { $iserasable = 0; $canbedisabled = 0; }
    -					}
    -
    -					if (isset($obj->type) && in_array($obj->type, array('system', 'systemauto'))) { $iserasable=0; }
    -					if (in_array($obj->code, array('AC_OTH','AC_OTH_AUTO')) || in_array($obj->type, array('systemauto'))) { $canbedisabled=0; $canbedisabled = 0; }
    -					$canbemodified=$iserasable;
    -					if ($obj->code == 'RECEP') $canbemodified=1;
     
     					$url = $_SERVER["PHP_SELF"].'?'.($page?'page='.$page.'&':'').'sortfield='.$sortfield.'&sortorder='.$sortorder.'&rowid='.(! empty($obj->rowid)?$obj->rowid:(! empty($obj->code)?$obj->code:'')).'&code='.(! empty($obj->code)?urlencode($obj->code):'');
     					if ($param) $url .= '&'.$param;
    @@ -1004,7 +802,7 @@ if ($id)
     
     print '<br>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
     
    @@ -1055,53 +853,7 @@ function fieldListAccountModel($fieldlist, $obj='', $tabname='', $context='')
     				print '</td>';
     			}
     		}
    -		elseif ($fieldlist[$field] == 'region')
    -		{
    -			print '<td>';
    -			$formcompany->select_region($region_id,'region');
    -			print '</td>';
    -		}
    -		elseif ($fieldlist[$field] == 'region_id')
    -		{
    -			$region_id = (! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:0);
    -			print '<td>';
    -			print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$region_id.'">';
    -			print '</td>';
    -		}
    -		elseif ($fieldlist[$field] == 'lang')
    -		{
    -			print '<td>';
    -			print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT,'lang');
    -			print '</td>';
    -		}
    -		// Le type de template
    -		elseif ($fieldlist[$field] == 'type_template')
    -		{
    -			print '<td>';
    -			print $form->selectarray('type_template', $elementList,(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''));
    -			print '</td>';
    -		}
    -		// Le type de l'element (pour les type de contact)
    -		elseif ($fieldlist[$field] == 'element')
    -		{
    -			print '<td>';
    -			print $form->selectarray('element', $elementList,(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''));
    -			print '</td>';
    -		}
    -		// La source de l'element (pour les type de contact)
    -		elseif ($fieldlist[$field] == 'source')
    -		{
    -			print '<td>';
    -			print $form->selectarray('source', $sourceList,(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''));
    -			print '</td>';
    -		}
    -		elseif ($fieldlist[$field] == 'type' && $tabname == MAIN_DB_PREFIX."c_actioncomm")
    -		{
    -			print '<td>';
    -			print 'user<input type="hidden" name="type" value="user">';
    -			print '</td>';
    -		}
    -		elseif ($fieldlist[$field] == 'recuperableonly' || $fieldlist[$field] == 'type_cdr' || $fieldlist[$field] == 'deductible' || $fieldlist[$field] == 'category_type') {
    +		elseif ($fieldlist[$field] == 'type_cdr') {
     			if ($fieldlist[$field] == 'type_cdr') print '<td align="center">';
     			else print '<td>';
     			if ($fieldlist[$field] == 'type_cdr') {
    @@ -1111,49 +863,9 @@ function fieldListAccountModel($fieldlist, $obj='', $tabname='', $context='')
     			}
     			print '</td>';
     		}
    -		elseif (in_array($fieldlist[$field],array('nbjour','decalage','taux','localtax1','localtax2'))) {
    -			$align="left";
    -			if (in_array($fieldlist[$field],array('taux','localtax1','localtax2'))) $align="right";	// Fields aligned on right
    -			print '<td align="'.$align.'">';
    -			print '<input type="text" class="flat" value="'.(isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'').'" size="3" name="'.$fieldlist[$field].'">';
    -			print '</td>';
    -		}
    -		elseif (in_array($fieldlist[$field], array('libelle_facture'))) {
    -			print '<td><textarea cols="30" rows="'.ROWS_2.'" class="flat" name="'.$fieldlist[$field].'">'.(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'').'</textarea></td>';
    -		}
    -		elseif (in_array($fieldlist[$field], array('content')))
    -		{
    -			print '<td>';
    -			if ($context != 'hide')
    -			{
    -				//print '<textarea cols="3" rows="'.ROWS_2.'" class="flat" name="'.$fieldlist[$field].'">'.(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'').'</textarea>';
    -				$okforextended=true;
    -				$doleditor = new DolEditor($fieldlist[$field], (! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''), '', 140, 'dolibarr_mailings', 'In', 0, false, $okforextended, ROWS_5, '90%');
    -				print $doleditor->Create(1);
    -			}
    -			else print '&nbsp;';
    -			print '</td>';
    -		}
    -		elseif ($fieldlist[$field] == 'price' || preg_match('/^amount/i',$fieldlist[$field])) {
    -			print '<td><input type="text" class="flat" value="'.price((! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'')).'" size="8" name="'.$fieldlist[$field].'"></td>';
    -		}
     		elseif ($fieldlist[$field] == 'code' && isset($obj->{$fieldlist[$field]})) {
     			print '<td><input type="text" class="flat" value="'.(! empty($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'').'" size="10" name="'.$fieldlist[$field].'"></td>';
     		}
    -		elseif ($fieldlist[$field] == 'accountancy_code' || $fieldlist[$field] == 'accountancy_code_sell' || $fieldlist[$field] == 'accountancy_code_buy')
    -		{
    -			print '<td>';
    -			if (! empty($conf->accounting->enabled))
    -			{
    -				$accountancy_account = (! empty($obj->$fieldlist[$field]) ? $obj->$fieldlist[$field] : 0);
    -				print $formaccounting->select_account($accountancy_account, $fieldlist[$field], 1, '', 1, 1, 'maxwidth200 maxwidthonsmartphone');
    -			}
    -			else
    -			{
    -				print '<input type="text" size="10" class="flat" value="'.(isset($obj->$fieldlist[$field])?$obj->$fieldlist[$field]:'').'" name="'.$fieldlist[$field].'">';
    -			}
    -			print '</td>';
    -		}
     		else
     		{
     			print '<td>';
    @@ -1161,7 +873,6 @@ function fieldListAccountModel($fieldlist, $obj='', $tabname='', $context='')
     			if ($fieldlist[$field]=='code') $size='size="8" ';
     			if ($fieldlist[$field]=='position') $size='size="4" ';
     			if ($fieldlist[$field]=='libelle') $size='centpercent';
    -			if ($fieldlist[$field]=='tracking') $class='centpercent';
     			if ($fieldlist[$field]=='sortorder' || $fieldlist[$field]=='sens' || $fieldlist[$field]=='category_type') $size='size="2" ';
     			print '<input type="text" '.$size.' class="flat'.($class?' '.$class:'').'" value="'.(isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'').'" name="'.$fieldlist[$field].'">';
     			print '</td>';
    diff --git a/htdocs/accountancy/admin/card.php b/htdocs/accountancy/admin/card.php
    index 9643227da64..74958d606ec 100644
    --- a/htdocs/accountancy/admin/card.php
    +++ b/htdocs/accountancy/admin/card.php
    @@ -73,25 +73,28 @@ if ($action == 'add' && $user->rights->accounting->chartofaccount)
     		// To manage zero or not at the end of the accounting account
     		if($conf->global->ACCOUNTING_MANAGE_ZERO == 1)
     		{
    -			$account_number = GETPOST('account_number');
    +			$account_number = GETPOST('account_number','string');
     		}
     		else
     		{
    -			$account_number = clean_account(GETPOST('account_number'));
    +			$account_number = clean_account(GETPOST('account_number','string'));
     		}
     
    -		if (GETPOST('account_parent') <= 0) {
    +		if (GETPOST('account_parent','int') <= 0)
    +		{
     			$account_parent = 0;
    -		} else {
    +		}
    +		else
    +		{
     			$account_parent = GETPOST('account_parent','int');
     		}
     
     		$object->fk_pcg_version = $obj->pcg_version;
    -		$object->pcg_type = GETPOST('pcg_type');
    -		$object->pcg_subtype = GETPOST('pcg_subtype');
    +		$object->pcg_type = GETPOST('pcg_type','alpha');
    +		$object->pcg_subtype = GETPOST('pcg_subtype','alpha');
     		$object->account_number = $account_number;
     		$object->account_parent = $account_parent;
    -		$object->account_category = GETPOST('account_category');
    +		$object->account_category = GETPOST('account_category','alpha');
     		$object->label = GETPOST('label', 'alpha');
     		$object->active = 1;
     
    @@ -135,25 +138,28 @@ if ($action == 'add' && $user->rights->accounting->chartofaccount)
     		// To manage zero or not at the end of the accounting account
     		if($conf->global->ACCOUNTING_MANAGE_ZERO == 1)
     		{
    -			$account_number = GETPOST('account_number');
    +			$account_number = GETPOST('account_number','string');
     		}
     		else
     		{
    -			$account_number = clean_account(GETPOST('account_number'));
    +			$account_number = clean_account(GETPOST('account_number','string'));
     		}
     
    -		if (GETPOST('account_parent') <= 0) {
    +		if (GETPOST('account_parent','int') <= 0)
    +		{
     			$account_parent = 0;
    -		} else {
    +		}
    +		else
    +		{
     			$account_parent = GETPOST('account_parent','int');
     		}
     
     		$object->fk_pcg_version = $obj->pcg_version;
    -		$object->pcg_type = GETPOST('pcg_type');
    -		$object->pcg_subtype = GETPOST('pcg_subtype');
    +		$object->pcg_type = GETPOST('pcg_type','alpha');
    +		$object->pcg_subtype = GETPOST('pcg_subtype','alpha');
     		$object->account_number = $account_number;
     		$object->account_parent = $account_parent;
    -		$object->account_category = GETPOST('account_category');
    +		$object->account_category = GETPOST('account_category','alpha');
     		$object->label = GETPOST('label', 'alpha');
     
     		$result = $object->update($user);
    @@ -397,6 +403,6 @@ else if ($id > 0 || $ref) {
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/accountancy/admin/categories.php b/htdocs/accountancy/admin/categories.php
    index aec34469559..6e003738173 100644
    --- a/htdocs/accountancy/admin/categories.php
    +++ b/htdocs/accountancy/admin/categories.php
    @@ -37,9 +37,9 @@ $id = GETPOST('id', 'int');
     $rowid = GETPOST('rowid', 'int');
     $cancel = GETPOST('cancel','alpha');
     $action = GETPOST('action','aZ09');
    -$cat_id = GETPOST('account_category');
    +$cat_id = GETPOST('account_category','int');
     $selectcpt = GETPOST('cpt_bk', 'array');
    -$cpt_id = GETPOST('cptid');
    +$cpt_id = GETPOST('cptid','int');
     
     if ($cat_id == 0) {
     	$cat_id = null;
    @@ -184,6 +184,6 @@ if ($action == 'display' || $action == 'delete') {
     	print "</table>";
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/accountancy/admin/categories_list.php b/htdocs/accountancy/admin/categories_list.php
    index 15a50e7b8e8..1f10403f798 100644
    --- a/htdocs/accountancy/admin/categories_list.php
    +++ b/htdocs/accountancy/admin/categories_list.php
    @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formaccounting.class.php';
     // Load translation files required by the page
     $langs->loadLangs(array("errors","admin","companies","resource","holiday","accountancy","hrm"));
     
    -$action=GETPOST('action','alpha')?GETPOST('action','alpha'):'view';
    +$action=GETPOST('action','aZ09')?GETPOST('action','aZ09'):'view';
     $confirm=GETPOST('confirm','alpha');
     $id=32;
     $rowid=GETPOST('rowid','alpha');
    @@ -51,8 +51,8 @@ $acts[1] = "disable";
     $actl[0] = img_picto($langs->trans("Disabled"),'switch_off');
     $actl[1] = img_picto($langs->trans("Activated"),'switch_on');
     
    -$listoffset=GETPOST('listoffset');
    -$listlimit=GETPOST('listlimit')>0?GETPOST('listlimit'):1000;
    +$listoffset=GETPOST('listoffset','alpha');
    +$listlimit=GETPOST('listlimit','int')>0?GETPOST('listlimit','int'):1000;
     $active = 1;
     
     $sortfield = GETPOST("sortfield",'aZ09comma');
    @@ -134,13 +134,13 @@ $sourceList=array();
      * Actions
      */
     
    -if (GETPOST('button_removefilter') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter_x'))
    +if (GETPOST('button_removefilter','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter_x','alpha'))
     {
         $search_country_id = '';
     }
     
     // Actions add or modify an entry into a dictionary
    -if (GETPOST('actionadd') || GETPOST('actionmodify'))
    +if (GETPOST('actionadd','alpha') || GETPOST('actionmodify','alpha'))
     {
         $listfield=explode(',', str_replace(' ', '',$tabfield[$id]));
         $listfieldinsert=explode(',',$tabfieldinsert[$id]);
    @@ -202,7 +202,6 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
                 {
                     $obj = $db->fetch_object($result);
                     $newid=($obj->newid + 1);
    -
                 } else {
                     dol_print_error($db);
                 }
    @@ -250,7 +249,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
         }
     
         // Si verif ok et action modify, on modifie la ligne
    -    if ($ok && GETPOST('actionmodify'))
    +    if ($ok && GETPOST('actionmodify','alpha'))
         {
             if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
             else { $rowidcol="rowid"; }
    @@ -291,7 +290,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
         //$_GET["id"]=GETPOST('id', 'int');       // Force affichage dictionnaire en cours d'edition
     }
     
    -if (GETPOST('actioncancel'))
    +if (GETPOST('actioncancel','alpha'))
     {
         //$_GET["id"]=GETPOST('id', 'int');       // Force affichage dictionnaire en cours d'edition
     }
    @@ -513,7 +512,7 @@ if ($id)
     
             $obj = new stdClass();
             // If data was already input, we define them in obj to populate input fields.
    -        if (GETPOST('actionadd'))
    +        if (GETPOST('actionadd','alpha'))
             {
                 foreach ($fieldlist as $key=>$val)
                 {
    @@ -800,7 +799,7 @@ if ($id)
     
     print '<br>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/accountancy/admin/defaultaccounts.php b/htdocs/accountancy/admin/defaultaccounts.php
    index c33d4326836..6de48b58cd5 100644
    --- a/htdocs/accountancy/admin/defaultaccounts.php
    +++ b/htdocs/accountancy/admin/defaultaccounts.php
    @@ -43,7 +43,7 @@ if (empty($user->rights->accounting->chartofaccount))
     	accessforbidden();
     }
     
    -$action = GETPOST('action', 'alpha');
    +$action = GETPOST('action', 'aZ09');
     
     
     $list_account_main = array (
    @@ -76,7 +76,7 @@ $list_account = array (
     $accounting_mode = empty($conf->global->ACCOUNTING_MODE) ? 'RECETTES-DEPENSES' : $conf->global->ACCOUNTING_MODE;
     
     
    -if (GETPOST('change_chart'))
    +if (GETPOST('change_chart', 'alpha'))
     {
         $chartofaccounts = GETPOST('chartofaccounts', 'int');
     
    @@ -190,5 +190,6 @@ print '<div class="center"><input type="submit" class="button" value="' . $langs
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/admin/export.php b/htdocs/accountancy/admin/export.php
    index 0308df2f400..6ef4bdda90b 100644
    --- a/htdocs/accountancy/admin/export.php
    +++ b/htdocs/accountancy/admin/export.php
    @@ -41,10 +41,10 @@ if (empty($user->rights->accounting->chartofaccount))
     	accessforbidden();
     }
     
    -$action = GETPOST('action', 'alpha');
    +$action = GETPOST('action', 'aZ09');
     
     // Parameters ACCOUNTING_EXPORT_*
    -$main_option = array (
    +$main_option = array(
         'ACCOUNTING_EXPORT_PREFIX_SPEC',
     );
     
    @@ -79,6 +79,7 @@ $model_option = array (
     /*
      * Actions
      */
    +
     if ($action == 'update') {
     	$error = 0;
     
    @@ -124,6 +125,8 @@ if ($action == 'update') {
     	}
     }
     
    +
    +
     /*
      * View
      */
    @@ -267,7 +270,7 @@ if ($num2) {
             } else {
                 print '<input type="text" size="20" id="'. $label .'" name="' . $key['label'] . '" value="' . $conf->global->$label . '">';
             }
    -		
    +
     		print '</td></tr>';
     	}
     
    @@ -278,5 +281,6 @@ print '<div class="center"><input type="submit" class="button" value="' . dol_es
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/admin/fiscalyear.php b/htdocs/accountancy/admin/fiscalyear.php
    index 25223e70c68..62eda456fe7 100644
    --- a/htdocs/accountancy/admin/fiscalyear.php
    +++ b/htdocs/accountancy/admin/fiscalyear.php
    @@ -156,6 +156,6 @@ if ($result)
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/admin/fiscalyear_card.php b/htdocs/accountancy/admin/fiscalyear_card.php
    index 32df9afc932..297a3026b02 100644
    --- a/htdocs/accountancy/admin/fiscalyear_card.php
    +++ b/htdocs/accountancy/admin/fiscalyear_card.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2014-2016  Alexandre Spangaro	<aspangaro@zendsi.com>
    +/* Copyright (C) 2014-2016  Alexandre Spangaro  <aspangaro@zendsi.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -37,7 +38,7 @@ if (empty($user->rights->accounting->fiscalyear))
     
     $error = 0;
     
    -$action = GETPOST('action', 'alpha');
    +$action = GETPOST('action', 'aZ09');
     $confirm = GETPOST('confirm', 'alpha');
     $id = GETPOST('id', 'int');
     
    @@ -165,16 +166,16 @@ if ($action == 'create')
     	print '<table class="border" width="100%">';
     
     	// Label
    -	print '<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans("Label") . '</td><td><input name="label" size="32" value="' . GETPOST("label") . '"></td></tr>';
    +	print '<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans("Label") . '</td><td><input name="label" size="32" value="' . GETPOST('label', 'alpha') . '"></td></tr>';
     
     	// Date start
     	print '<tr><td class="fieldrequired">' . $langs->trans("DateStart") . '</td><td>';
    -	print $form->select_date(($date_start ? $date_start : ''), 'fiscalyear');
    +	print $form->selectDate(($date_start ? $date_start : ''), 'fiscalyear');
     	print '</td></tr>';
     
     	// Date end
     	print '<tr><td class="fieldrequired">' . $langs->trans("DateEnd") . '</td><td>';
    -	print $form->select_date(($date_end ? $date_end : - 1), 'fiscalyearend');
    +	print $form->selectDate(($date_end ? $date_end : - 1), 'fiscalyearend');
     	print '</td></tr>';
     
     	/*
    @@ -182,7 +183,7 @@ if ($action == 'create')
     	print '<tr>';
     	print '<td class="fieldrequired">' . $langs->trans("Status") . '</td>';
     	print '<td class="valeur">';
    -	print $form->selectarray('statut', $statut2label, GETPOST('statut'));
    +	print $form->selectarray('statut', $statut2label, GETPOST('statut', 'int'));
     	print '</td></tr>';
     	*/
     
    @@ -225,12 +226,12 @@ if ($action == 'create')
     
     			// Date start
     			print '<tr><td class="fieldrequired">' . $langs->trans("DateStart") . '</td><td>';
    -			print $form->select_date($object->date_start ? $object->date_start : - 1, 'fiscalyear');
    +			print $form->selectDate($object->date_start ? $object->date_start : - 1, 'fiscalyear');
     			print '</td></tr>';
     
     			// Date end
     			print '<tr><td class="fieldrequired">' . $langs->trans("DateEnd") . '</td><td>';
    -			print $form->select_date($object->date_end ? $object->date_end : - 1, 'fiscalyearend');
    +			print $form->selectDate($object->date_end ? $object->date_end : - 1, 'fiscalyearend');
     			print '</td></tr>';
     
     			// Statut
    @@ -318,5 +319,6 @@ if ($action == 'create')
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/admin/fiscalyear_info.php b/htdocs/accountancy/admin/fiscalyear_info.php
    index f16e3b9ca0e..3141a624194 100644
    --- a/htdocs/accountancy/admin/fiscalyear_info.php
    +++ b/htdocs/accountancy/admin/fiscalyear_info.php
    @@ -58,5 +58,6 @@ if ($id) {
     	print '</div>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/admin/importaccounts.php b/htdocs/accountancy/admin/importaccounts.php
    index 3af46eec1a4..a14509a2aee 100644
    --- a/htdocs/accountancy/admin/importaccounts.php
    +++ b/htdocs/accountancy/admin/importaccounts.php
    @@ -1,7 +1,8 @@
     <?php
     /* Copyright (C) 2013-2014 Olivier Geffroy      <jeff@jeffinfo.com>
    - * Copyright (C) 2013-2017 Alexandre Spangaro   <aspangaro@zendsi.com> 
    + * Copyright (C) 2013-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
      * Copyright (C) 2014      Florian Henry        <florian.henry@open-concept.pro>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -18,7 +19,7 @@
      */
     
     /**
    - * \file 		htdocs/accountancy/admin/importaccounts.php
    + * \file        htdocs/accountancy/admin/importaccounts.php
      * \ingroup		Advanced accountancy
      * \brief 		Page import accounting account
      */
    @@ -71,10 +72,10 @@ if ($_POST["action"] == 'import') {
     
     				$accounting = new AccountingAccount($db);
     
    -				$monLabel = GETPOST('label' . $maLigneCochee);
    -				$monParentAccount = GETPOST('AccountParent' . $maLigneCochee);
    -				$monType = GETPOST('pcgType' . $maLigneCochee);
    -				$monSubType = GETPOST('pcgSubType' . $maLigneCochee);
    +				$monLabel = (string) GETPOST('label' . $maLigneCochee);
    +				$monParentAccount = (string) GETPOST('AccountParent' . $maLigneCochee);
    +				$monType = (string) GETPOST('pcgType' . $maLigneCochee);
    +				$monSubType = (string) GETPOST('pcgSubType' . $maLigneCochee);
     
     				$accounting->fk_pcg_version = $obj->pcg_version;
     				$accounting->account_number = $maLigneCochee;
    @@ -83,7 +84,7 @@ if ($_POST["action"] == 'import') {
     				$accounting->pcg_type = $monType;
     				$accounting->pcg_subtype = $monSubType;
     				$accounting->active = 1;
    -				
    +
     				$result = $accounting->create($user);
     				if ($result > 0) {
     					setEventMessages($langs->trans("AccountingAccountAdd"), null, 'mesgs');
    @@ -101,7 +102,7 @@ if ($_POST["action"] == 'import') {
     	print '<div><font color="red">' . $langs->trans("EndProcessing") . '</font></div>';
     }
     
    -// list accounting account from product 
    +// list accounting account from product
     
     $sql = "(SELECT p.rowid as product_id, p.accountancy_code_sell as accounting ";
     $sql .= " FROM  " . MAIN_DB_PREFIX . "product as p ";
    @@ -172,14 +173,15 @@ if ($result) {
     		print '</tr>';
     		$i ++;
     	}
    -	
    +
     	print '<tr><td colspan="8">&nbsp;</td></tr><tr><td colspan="8" align="center"><input type="submit" class="butAction" value="' . $langs->trans("Import") . '"></td></tr>';
    -	
    +
     	print '</table>';
     	print '</form>';
     } else {
     	print $db->error();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/admin/index.php b/htdocs/accountancy/admin/index.php
    index e39d07fc35d..60a81df9a56 100644
    --- a/htdocs/accountancy/admin/index.php
    +++ b/htdocs/accountancy/admin/index.php
    @@ -41,7 +41,7 @@ if (empty($user->rights->accounting->chartofaccount))
     	accessforbidden();
     }
     
    -$action = GETPOST('action', 'alpha');
    +$action = GETPOST('action', 'aZ09');
     
     // Parameters ACCOUNTING_* and others
     $list = array (
    @@ -295,5 +295,6 @@ print '<br>';
     print '<br>';
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/admin/journals_list.php b/htdocs/accountancy/admin/journals_list.php
    index ff3a38769b8..49745676eb3 100644
    --- a/htdocs/accountancy/admin/journals_list.php
    +++ b/htdocs/accountancy/admin/journals_list.php
    @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
     // Load translation files required by the page
     $langs->loadLangs(array("admin","compta","accountancy"));
     
    -$action=GETPOST('action','alpha')?GETPOST('action','alpha'):'view';
    +$action=GETPOST('action','aZ09')?GETPOST('action','aZ09'):'view';
     $confirm=GETPOST('confirm','alpha');
     $id=35;
     $rowid=GETPOST('rowid','alpha');
    @@ -51,8 +51,8 @@ $acts[1] = "disable";
     $actl[0] = img_picto($langs->trans("Disabled"),'switch_off');
     $actl[1] = img_picto($langs->trans("Activated"),'switch_on');
     
    -$listoffset=GETPOST('listoffset');
    -$listlimit=GETPOST('listlimit')>0?GETPOST('listlimit'):1000;
    +$listoffset=GETPOST('listoffset', 'alpha');
    +$listlimit=GETPOST('listlimit', 'int')>0?GETPOST('listlimit', 'int'):1000;
     $active = 1;
     
     $sortfield = GETPOST("sortfield",'alpha');
    @@ -128,28 +128,28 @@ complete_dictionary_with_modules($taborder,$tabname,$tablib,$tabsql,$tabsqlsort,
     
     // Define elementList and sourceList (used for dictionary type of contacts "llx_c_type_contact")
     $elementList = array();
    -	// Must match ids defined into eldy.lib.php
    -	$sourceList = array(
    -			'1' => $langs->trans('AccountingJournalType1'),
    -			'2' => $langs->trans('AccountingJournalType2'),
    -			'3' => $langs->trans('AccountingJournalType3'),
    -			'4' => $langs->trans('AccountingJournalType4'),
    -			'5' => $langs->trans('AccountingJournalType5'),
    -			'8' => $langs->trans('AccountingJournalType8'),
    -			'9' => $langs->trans('AccountingJournalType9')
    -	);
    +// Must match ids defined into eldy.lib.php
    +$sourceList = array(
    +	'1' => $langs->trans('AccountingJournalType1'),
    +	'2' => $langs->trans('AccountingJournalType2'),
    +	'3' => $langs->trans('AccountingJournalType3'),
    +	'4' => $langs->trans('AccountingJournalType4'),
    +	'5' => $langs->trans('AccountingJournalType5'),
    +	'8' => $langs->trans('AccountingJournalType8'),
    +	'9' => $langs->trans('AccountingJournalType9'),
    +);
     
     /*
      * Actions
      */
     
    -if (GETPOST('button_removefilter') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter_x'))
    +if (GETPOST('button_removefilter', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter_x', 'alpha'))
     {
     	$search_country_id = '';
     }
     
     // Actions add or modify an entry into a dictionary
    -if (GETPOST('actionadd') || GETPOST('actionmodify'))
    +if (GETPOST('actionadd', 'alpha') || GETPOST('actionmodify', 'alpha'))
     {
     	$listfield=explode(',', str_replace(' ', '',$tabfield[$id]));
     	$listfieldinsert=explode(',',$tabfieldinsert[$id]);
    @@ -190,7 +190,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
     	if ($_POST["accountancy_code_buy"] <= 0) $_POST["accountancy_code_buy"]='';	// If empty, we force to null
     
     	// Si verif ok et action add, on ajoute la ligne
    -	if ($ok && GETPOST('actionadd'))
    +	if ($ok && GETPOST('actionadd', 'alpha'))
     	{
     		if ($tabrowid[$id])
     		{
    @@ -202,7 +202,6 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
     			{
     				$obj = $db->fetch_object($result);
     				$newid=($obj->newid + 1);
    -
     			} else {
     				dol_print_error($db);
     			}
    @@ -252,7 +251,7 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
     	}
     
     	// Si verif ok et action modify, on modifie la ligne
    -	if ($ok && GETPOST('actionmodify'))
    +	if ($ok && GETPOST('actionmodify', 'alpha'))
     	{
     		if ($tabrowid[$id]) { $rowidcol=$tabrowid[$id]; }
     		else { $rowidcol="rowid"; }
    @@ -294,10 +293,10 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
     	//$_GET["id"]=GETPOST('id', 'int');       // Force affichage dictionnaire en cours d'edition
     }
     
    -if (GETPOST('actioncancel'))
    -{
    -	//$_GET["id"]=GETPOST('id', 'int');       // Force affichage dictionnaire en cours d'edition
    -}
    +//if (GETPOST('actioncancel', 'alpha'))
    +//{
    +//	$_GET["id"]=GETPOST('id', 'int');       // Force affichage dictionnaire en cours d'edition
    +//}
     
     if ($action == 'confirm_delete' && $confirm == 'yes')       // delete
     {
    @@ -462,7 +461,7 @@ if ($id)
     
     		$obj = new stdClass();
     		// If data was already input, we define them in obj to populate input fields.
    -		if (GETPOST('actionadd'))
    +		if (GETPOST('actionadd', 'alpha'))
     		{
     			foreach ($fieldlist as $key=>$val)
     			{
    @@ -504,7 +503,7 @@ if ($id)
     		$paramwithsearch = $param;
     		if ($sortorder) $paramwithsearch.= '&sortorder='.$sortorder;
     		if ($sortfield) $paramwithsearch.= '&sortfield='.$sortfield;
    -		if (GETPOST('from')) $paramwithsearch.= '&from='.GETPOST('from','alpha');
    +		if (GETPOST('from', 'alpha')) $paramwithsearch.= '&from='.GETPOST('from','alpha');
     
     		// There is several pages
     		if ($num > $listlimit)
    @@ -683,7 +682,7 @@ if ($id)
     
     print '<br>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php
    index 070e2f353c3..246d3752f56 100644
    --- a/htdocs/accountancy/admin/productaccount.php
    +++ b/htdocs/accountancy/admin/productaccount.php
    @@ -45,7 +45,7 @@ if (! $user->rights->accounting->bind->write)
         accessforbidden();
     
     // search & action GETPOST
    -$action = GETPOST('action', 'alpha');
    +$action = GETPOST('action', 'aZ09');
     $codeventil_buy = GETPOST('codeventil_buy', 'array');
     $codeventil_sell = GETPOST('codeventil_sell', 'array');
     $chk_prod = GETPOST('chk_prod', 'array');
    @@ -62,8 +62,8 @@ $search_current_account_valid = GETPOST('search_current_account_valid', 'alpha')
     if ($search_current_account_valid == '') $search_current_account_valid='withoutvalidaccount';
     
     $accounting_product_mode = GETPOST('accounting_product_mode', 'alpha');
    -$btn_changeaccount = GETPOST('changeaccount');
    -$btn_changetype = GETPOST('changetype');
    +$btn_changeaccount = GETPOST('changeaccount', 'alpha');
    +$btn_changetype = GETPOST('changetype', 'alpha');
     
     $limit = GETPOST('limit','int')?GETPOST('limit','int'):(empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION)?$conf->liste_limit:$conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION);
     $sortfield = GETPOST("sortfield",'alpha');
    @@ -173,7 +173,6 @@ if ($action == 'update') {
     
     				$cpt++;
     			}
    -
     		}
     
     		if ($ko) setEventMessages($langs->trans("XLineFailedToBeBinded", $ko), null, 'errors');
    @@ -495,5 +494,6 @@ if ($result)
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/bookkeeping/balance.php b/htdocs/accountancy/bookkeeping/balance.php
    index fa1f4b396d5..e807d1acced 100644
    --- a/htdocs/accountancy/bookkeeping/balance.php
    +++ b/htdocs/accountancy/bookkeeping/balance.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2016       Olivier Geffroy     <jeff@jeffinfo.com>
    - * Copyright (C) 2016       Florian Henry       <florian.henry@open-concept.pro>
    - * Copyright (C) 2016-2018  Alexandre Spangaro  <aspangaro@zendsi.com>
    +/* Copyright (C) 2016       Olivier Geffroy         <jeff@jeffinfo.com>
    + * Copyright (C) 2016       Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2016-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -40,7 +41,7 @@ $langs->loadLangs(array("accountancy"));
     $page = GETPOST("page");
     $sortorder = GETPOST("sortorder", 'alpha');
     $sortfield = GETPOST("sortfield", 'alpha');
    -$action = GETPOST('action', 'alpha');
    +$action = GETPOST('action', 'aZ09');
     if (GETPOST("exportcsv",'alpha')) $action = 'export_csv';
     
     // Load variable for pagination
    @@ -150,6 +151,7 @@ if ($action == 'export_csv')
     	$sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV;
     
     	$filename = 'balance';
    +	$type_export = 'balance';
     	include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php';
     
     	$result = $object->fetchAllBalance($sortorder, $sortfield, 0, 0, $filter);
    @@ -166,13 +168,18 @@ if ($action == 'export_csv')
     		print price($line->credit - $line->debit) . $sep;
     		print "\n";
     	}
    +
    +	exit;
     }
     
    -else {
    -	$title_page = $langs->trans("AccountBalance");
     
    -	llxHeader('', $title_page);
    +$title_page = $langs->trans("AccountBalance");
     
    +llxHeader('', $title_page);
    +
    +
    +if ($action != 'export_csv')
    +{
     	// List
     	$nbtotalofrecords = '';
     	if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
    @@ -205,9 +212,9 @@ else {
     
     	$moreforfilter .= '<div class="divsearchfield">';
     	$moreforfilter .= $langs->trans('DateStart') . ': ';
    -	$moreforfilter .= $form->select_date($search_date_start?$search_date_start:-1, 'date_start', 0, 0, 1, '', 1, 0, 1);
    +	$moreforfilter .= $form->selectDate($search_date_start?$search_date_start:-1, 'date_start', 0, 0, 1, '', 1, 0);
     	$moreforfilter .= $langs->trans('DateEnd') . ': ';
    -	$moreforfilter .= $form->select_date($search_date_end?$search_date_end:-1, 'date_end', 0, 0, 1, '', 1, 0, 1);
    +	$moreforfilter .= $form->selectDate($search_date_end?$search_date_end:-1, 'date_end', 0, 0, 1, '', 1, 0);
     	$moreforfilter .= '</div>';
     
     	if (! empty($moreforfilter)) {
    @@ -268,7 +275,7 @@ else {
     		{
     			// Affiche un Sous-Total par compte comptable
     			if ($displayed_account != "") {
    -				print '<tr class="liste_total"><td align="right" colspan="2">' . $langs->trans("SubTotal") . ':</td><td class="nowrap" align="right">' . price($sous_total_debit) . '</td><td class="nowrap" align="right">' . price($sous_total_credit) . '</td><td class="nowrap" align="right">' . price($sous_total_credit - $sous_total_debit) . '</td>';
    +				print '<tr class="liste_total"><td align="right" colspan="2">' . $langs->trans("SubTotal") . ':</td><td class="nowrap" align="right">' . price($sous_total_debit) . '</td><td class="nowrap" align="right">' . price($sous_total_credit) . '</td><td class="nowrap" align="right">' . price(price2num($sous_total_credit - $sous_total_debit)) . '</td>';
     				print "<td>&nbsp;</td>\n";
     				print '</tr>';
     			}
    @@ -299,18 +306,18 @@ else {
     		$sous_total_credit += $line->credit;
     	}
     
    -	print '<tr class="liste_total"><td align="right" colspan="2">' . $langs->trans("SubTotal") . ':</td><td class="nowrap" align="right">' . price($sous_total_debit) . '</td><td class="nowrap" align="right">' . price($sous_total_credit) . '</td><td class="nowrap" align="right">' . price($sous_total_credit - $sous_total_debit) . '</td>';
    +	print '<tr class="liste_total"><td align="right" colspan="2">' . $langs->trans("SubTotal") . ':</td><td class="nowrap" align="right">' . price($sous_total_debit) . '</td><td class="nowrap" align="right">' . price($sous_total_credit) . '</td><td class="nowrap" align="right">' . price(price2num($sous_total_credit - $sous_total_debit)) . '</td>';
     	print "<td>&nbsp;</td>\n";
     	print '</tr>';
     
    -	print '<tr class="liste_total"><td align="right" colspan="2">' . $langs->trans("AccountBalance") . ':</td><td class="nowrap" align="right">' . price($total_debit) . '</td><td class="nowrap" align="right">' . price($total_credit) . '</td><td class="nowrap" align="right">' . price($total_credit - $total_debit) . '</td>';
    +	print '<tr class="liste_total"><td align="right" colspan="2">' . $langs->trans("AccountBalance") . ':</td><td class="nowrap" align="right">' . price($total_debit) . '</td><td class="nowrap" align="right">' . price($total_credit) . '</td><td class="nowrap" align="right">' . price(price2num($total_credit - $total_debit)) . '</td>';
     	print "<td>&nbsp;</td>\n";
     	print '</tr>';
     
     	print "</table>";
     	print '</form>';
    -
    -	llxFooter();
     }
     
    +// End of page
    +llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/bookkeeping/balancebymonth.php b/htdocs/accountancy/bookkeeping/balancebymonth.php
    index 03265e434f6..a01c42b285a 100644
    --- a/htdocs/accountancy/bookkeeping/balancebymonth.php
    +++ b/htdocs/accountancy/bookkeeping/balancebymonth.php
    @@ -64,7 +64,7 @@ $result = $db->query($sql);
     if ($result) {
     	$row = $db->fetch_row($result);
     	$nbfac = $row[0];
    -	
    +
     	$db->free($result);
     }
     
    @@ -85,7 +85,7 @@ print '<td align="center">' . $langs->trans("SeptemberMin") . '</td>';
     print '<td align="center">' . $langs->trans("OctoberMin") . '</td>';
     print '<td align="center">' . $langs->trans("NovemberMin") . '</td>';
     print '<td align="center">' . $langs->trans("DecemberMin") . '</td>';
    -print '<td align="center"><b>Total</b></td>';
    +print '<td align="center"><strong>Total</strong></td>';
     print '</tr>';
     
     $sql = "SELECT bk.numero_compte AS 'compte',";
    @@ -111,11 +111,11 @@ $resql = $db->query($sql);
     if ($resql) {
     	$i = 0;
     	$num = $db->num_rows($resql);
    -	
    +
     	while ( $i < $num ) {
    -		
    +
     		$row = $db->fetch_row($resql);
    -		
    +
     		print '<tr class="oddeven"><td width="14%">' . length_accountg($row[0]) . '</td>';
     		print '<td align="right" width="6.5%">' . price($row[1]) . '</td>';
     		print '<td align="right" width="6.5%">' . price($row[2]) . '</td>';
    @@ -129,9 +129,9 @@ if ($resql) {
     		print '<td align="right" width="6.5%">' . price($row[10]) . '</td>';
     		print '<td align="right" width="6.5%">' . price($row[11]) . '</td>';
     		print '<td align="right" width="6.5%">' . price($row[12]) . '</td>';
    -		print '<td align="right" width="8%"><b>' . price($row[13]) . '</b></td>';
    +		print '<td align="right" width="8%"><strong>' . price($row[13]) . '</strong></td>';
     		print '</tr>';
    -		
    +
     		$i ++;
     	}
     	$db->free($resql);
    @@ -140,5 +140,6 @@ if ($resql) {
     }
     print "</table>\n";
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/bookkeeping/card.php b/htdocs/accountancy/bookkeeping/card.php
    index 92c5713880c..567fccaeab1 100644
    --- a/htdocs/accountancy/bookkeeping/card.php
    +++ b/htdocs/accountancy/bookkeeping/card.php
    @@ -1,8 +1,9 @@
     <?php
    -/* Copyright (C) 2013-2017 Olivier Geffroy      <jeff@jeffinfo.com>
    - * Copyright (C) 2013-2017 Florian Henry        <florian.henry@open-concept.pro>
    - * Copyright (C) 2013-2018 Alexandre Spangaro   <aspangaro@zendsi.com>
    - * Copyright (C) 2017      Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2013-2017  Olivier Geffroy         <jeff@jeffinfo.com>
    + * Copyright (C) 2013-2017  Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2013-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2017       Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,6 +32,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php';
     require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
     require_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php';
     require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingjournal.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingaccount.class.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array("accountancy", "bills", "compta"));
    @@ -48,12 +50,21 @@ if ($user->societe_id > 0) {
     
     $mesg = '';
     
    -$account_number = GETPOST('account_number','alphanohtml');
    +$accountingaccount = new AccountingAccount($db);
    +$accountingjournal = new AccountingJournal($db);
    +
    +$accountingaccount_number = GETPOST('accountingaccount_number','alphanohtml');
    +$accountingaccount->fetch(null, $accountingaccount_number, true);
    +$accountingaccount_label = $accountingaccount->label;
    +
    +$journal_code = GETPOST('code_journal','alpha');
    +$accountingjournal->fetch(null, $journal_code);
    +$journal_label = $accountingjournal->label;
    +
     $subledger_account = GETPOST('subledger_account','alphanohtml');
     if ($subledger_account == - 1) {
     	$subledger_account = null;
     }
    -$label_compte = GETPOST('label_compte','alphanohtml');
     $label_operation= GETPOST('label_operation','alphanohtml');
     $debit = price2num(GETPOST('debit','alpha'));
     $credit = price2num(GETPOST('credit','alpha'));
    @@ -79,7 +90,7 @@ if ($action == "confirm_update") {
     		setEventMessages($langs->trans('ErrorDebitCredit'), null, 'errors');
     		$action='update';
     	}
    -	if (empty($account_number) || $account_number == '-1')
    +	if (empty($accountingaccount_number) || $accountingaccount_number == '-1')
     	{
     		$error++;
     		setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("AccountAccountingShort")), null, 'errors');
    @@ -95,9 +106,9 @@ if ($action == "confirm_update") {
     			$error++;
     			setEventMessages($object->error, $object->errors, 'errors');
     		} else {
    -			$object->numero_compte = $account_number;
    +			$object->numero_compte = $accountingaccount_number;
     			$object->subledger_account = $subledger_account;
    -			$object->label_compte = $label_compte;
    +			$object->label_compte = $accountingaccount_label;
     			$object->label_operation= $label_operation;
     			$object->debit = $debit;
     			$object->credit = $credit;
    @@ -138,7 +149,7 @@ else if ($action == "add") {
     		setEventMessages($langs->trans('ErrorDebitCredit'), null, 'errors');
     		$action='';
     	}
    -	if (empty($account_number) || $account_number == '-1')
    +	if (empty($accountingaccount_number) || $accountingaccount_number == '-1')
     	{
     		$error++;
     		setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("AccountAccountingShort")), null, 'errors');
    @@ -148,9 +159,9 @@ else if ($action == "add") {
     	if (! $error) {
     		$object = new BookKeeping($db);
     
    -		$object->numero_compte = $account_number;
    +		$object->numero_compte = $accountingaccount_number;
     		$object->subledger_account = $subledger_account;
    -		$object->label_compte = $label_compte;
    +		$object->label_compte = $accountingaccount_label;
     		$object->label_operation= $label_operation;
     		$object->debit = $debit;
     		$object->credit = $credit;
    @@ -158,7 +169,8 @@ else if ($action == "add") {
     		$object->doc_type = GETPOST('doc_type','alpha');
     		$object->piece_num = $piece_num;
     		$object->doc_ref = GETPOST('doc_ref','alpha');
    -		$object->code_journal = GETPOST('code_journal','alpha');
    +		$object->code_journal = $journal_code;
    +		$object->journal_label = $journal_label;
     		$object->fk_doc = GETPOST('fk_doc','alpha');
     		$object->fk_docdet = GETPOST('fk_docdet','alpha');
     
    @@ -211,12 +223,12 @@ else if ($action == "confirm_create") {
     
     	$object = new BookKeeping($db);
     
    -	if (! GETPOST('code_journal','alpha') || GETPOST('code_journal','alpha') == '-1') {
    +	if (! $journal_code || $journal_code == '-1') {
     		setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Journal")), null, 'errors');
     		$action='create';
     		$error++;
     	}
    -	if (! GETPOST('next_num_mvt'))
    +	if (! GETPOST('next_num_mvt', 'alpha'))
     	{
     		setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("NumPiece")), null, 'errors');
     		$error++;
    @@ -231,7 +243,8 @@ else if ($action == "confirm_create") {
     		$object->doc_type = GETPOST('doc_type','alpha');
     		$object->piece_num = GETPOST('next_num_mvt','alpha');
     		$object->doc_ref = GETPOST('doc_ref','alpha');
    -		$object->code_journal = GETPOST('code_journal','alpha');
    +		$object->code_journal = $journal_code;
    +		$object->journal_label = $journal_label;
     		$object->fk_doc = 0;
     		$object->fk_docdet = 0;
     		$object->montant = 0;
    @@ -252,7 +265,7 @@ else if ($action == "confirm_create") {
     }
     
     if ($action == 'setdate') {
    -	$datedoc = dol_mktime(0, 0, 0, GETPOST('doc_datemonth'), GETPOST('doc_dateday'), GETPOST('doc_dateyear'));
    +	$datedoc = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int'));
     	$result = $object->updateByMvt($piece_num,'doc_date',$db->idate($datedoc),$mode);
     	if ($result < 0) {
     		setEventMessages($object->error, $object->errors, 'errors');
    @@ -266,8 +279,8 @@ if ($action == 'setdate') {
     }
     
     if ($action == 'setjournal') {
    -	$journaldoc = trim(GETPOST('code_journal','alpha'));
    -	$result = $object->updateByMvt($piece_num, 'code_journal', $journaldoc, $mode);
    +	$result = $object->updateByMvt($piece_num, 'code_journal', $journal_code, $mode);
    +	$result = $object->updateByMvt($piece_num, 'journal_label', $journal_label, $mode);
     	if ($result < 0) {
     		setEventMessages($object->error, $object->errors, 'errors');
     	} else {
    @@ -311,7 +324,6 @@ if ($action == 'valid') {
     
     $html = new Form($db);
     $formaccounting = new FormAccounting($db);
    -$accountjournal = new AccountingJournal($db);
     
     llxHeader('', $langs->trans("CreateMvts"));
     
    @@ -350,13 +362,13 @@ if ($action == 'create')
     	print '<tr>';
     	print '<td class="titlefieldcreate fieldrequired">' . $langs->trans("Docdate") . '</td>';
     	print '<td>';
    -	print $html->select_date('', 'doc_date', '', '', '', "create_mvt", 1, 1);
    +	print $html->selectDate('', 'doc_date', '', '', '', "create_mvt", 1, 1);
     	print '</td>';
     	print '</tr>';
     
     	print '<tr>';
     	print '<td class="fieldrequired">' . $langs->trans("Codejournal") . '</td>';
    -	print '<td>' . $formaccounting->select_journal(GETPOST('code_journal'),'code_journal',0,1,array(),1,1) . '</td>';
    +	print '<td>' . $formaccounting->select_journal($journal_code,'code_journal',0,0,1,1) . '</td>';
     	print '</tr>';
     
     	print '<tr>';
    @@ -432,7 +444,7 @@ if ($action == 'create')
     			print '<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">';
     			print '<input type="hidden" name="action" value="setdate">';
     			print '<input type="hidden" name="mode" value="'.$mode.'">';
    -			$form->select_date($object->doc_date ? $object->doc_date : - 1, 'doc_date', '', '', '', "setdate");
    +			print $form->selectDate($object->doc_date ? $object->doc_date : - 1, 'doc_date', '', '', '', "setdate");
     			print '<input type="submit" class="button" value="' . $langs->trans('Modify') . '">';
     			print '</form>';
     		} else {
    @@ -459,7 +471,7 @@ if ($action == 'create')
     			print '<input type="submit" class="button" value="' . $langs->trans('Modify') . '">';
     			print '</form>';
     		} else {
    -		print $object->code_journal ;
    +			print $object->code_journal ;
     		}
     		print '</td>';
     		print '</tr>';
    @@ -589,7 +601,6 @@ if ($action == 'create')
     
     				print_liste_field_titre("AccountAccountingShort");
     				print_liste_field_titre("SubledgerAccount");
    -				print_liste_field_titre("LabelAccount");
     				print_liste_field_titre("LabelOperation");
     				print_liste_field_titre("Debit", "", "", "", "", 'align="right"');
     				print_liste_field_titre("Credit", "", "", "", "", 'align="right"');
    @@ -604,7 +615,7 @@ if ($action == 'create')
     
     					if ($action == 'update' && $line->id == $id) {
     						print '<td>';
    -						print $formaccounting->select_account($line->numero_compte, 'account_number', 1, array (), 1, 1, '');
    +						print $formaccounting->select_account($line->numero_compte, 'accountingaccount_number', 1, array (), 1, 1, '');
     						print '</td>';
     						print '<td>';
     						// TODO For the moment we keep a free input text instead of a combo. The select_auxaccount has problem because it does not
    @@ -618,7 +629,6 @@ if ($action == 'create')
     							print '<input type="text" name="subledger_account" value="'.$line->subledger_account.'">';
     						}
     						print '</td>';
    -						print '<td><input type="text" class="minwidth100" name="label_compte" value="' . $line->label_compte . '"/></td>';
     						print '<td><input type="text" class="minwidth200" name="label_operation" value="' . $line->label_operation. '"/></td>';
     						print '<td align="right"><input type="text" size="6" class="right" name="debit" value="' . price($line->debit) . '"/></td>';
     						print '<td align="right"><input type="text" size="6" class="right" name="credit" value="' . price($line->credit) . '"/></td>';
    @@ -627,9 +637,9 @@ if ($action == 'create')
     						print '<input type="submit" class="button" name="update" value="' . $langs->trans("Update") . '">';
     						print '</td>';
     					} else {
    -						print '<td>' . length_accountg($line->numero_compte) . '</td>';
    +						$accountingaccount->fetch(null, $line->numero_compte, true);
    +						print '<td>' . $accountingaccount->getNomUrl(0,1,1,'',0) . '</td>';
     						print '<td>' . length_accounta($line->subledger_account) . '</td>';
    -						print '<td>' . $line->label_compte . '</td>';
     						print '<td>' . $line->label_operation. '</td>';
     						print '<td align="right">' . price($line->debit) . '</td>';
     						print '<td align="right">' . price($line->credit) . '</td>';
    @@ -662,7 +672,7 @@ if ($action == 'create')
     				if ($action == "" || $action == 'add') {
     					print '<tr class="oddeven">';
     					print '<td>';
    -					print $formaccounting->select_account($account_number, 'account_number', 1, array (), 1, 1, '');
    +					print $formaccounting->select_account($accountingaccount_number, 'accountingaccount_number', 1, array (), 1, 1, '');
     					print '</td>';
     					print '<td>';
     					// TODO For the moment we keep a fre input text instead of a combo. The select_auxaccount has problem because it does not
    @@ -676,7 +686,6 @@ if ($action == 'create')
     						print '<input type="text" name="subledger_account" value="">';
     					}
     					print '</td>';
    -					print '<td><input type="text" class="minwidth100" name="label_compte" value=""/></td>';
     					print '<td><input type="text" class="minwidth200" name="label_operation" value=""/></td>';
     					print '<td align="right"><input type="text" size="6" class="right" name="debit" value=""/></td>';
     					print '<td align="right"><input type="text" size="6" class="right" name="credit" value=""/></td>';
    @@ -714,5 +723,6 @@ if ($action == 'create')
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/bookkeeping/list.php b/htdocs/accountancy/bookkeeping/list.php
    index b0a91f7ce36..5613e42b4c4 100644
    --- a/htdocs/accountancy/bookkeeping/list.php
    +++ b/htdocs/accountancy/bookkeeping/list.php
    @@ -1,8 +1,9 @@
     <?php
    -/* Copyright (C) 2013-2016  Olivier Geffroy      <jeff@jeffinfo.com>
    - * Copyright (C) 2013-2016  Florian Henry        <florian.henry@open-concept.pro>
    - * Copyright (C) 2013-2017  Alexandre Spangaro   <aspangaro@zendsi.com>
    - * Copyright (C) 2016-2017  Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2013-2016  Olivier Geffroy         <jeff@jeffinfo.com>
    + * Copyright (C) 2013-2016  Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2013-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2016-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -35,10 +36,10 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
     // Load translation files required by the page
     $langs->loadLangs(array("accountancy"));
     
    -$action = GETPOST('action', 'alpha');
    +$action = GETPOST('action', 'aZ09');
     $search_mvt_num = GETPOST('search_mvt_num', 'int');
    -$search_doc_type = GETPOST("search_doc_type");
    -$search_doc_ref = GETPOST("search_doc_ref");
    +$search_doc_type = GETPOST("search_doc_type", 'alpha');
    +$search_doc_ref = GETPOST("search_doc_ref", 'alpha');
     $search_date_start = dol_mktime(0, 0, 0, GETPOST('search_date_startmonth', 'int'), GETPOST('search_date_startday', 'int'), GETPOST('search_date_startyear', 'int'));
     $search_date_end = dol_mktime(0, 0, 0, GETPOST('search_date_endmonth', 'int'), GETPOST('search_date_endday', 'int'), GETPOST('search_date_endyear', 'int'));
     $search_doc_date = dol_mktime(0, 0, 0, GETPOST('doc_datemonth', 'int'), GETPOST('doc_dateday', 'int'), GETPOST('doc_dateyear', 'int'));
    @@ -78,6 +79,7 @@ $search_direction = GETPOST('search_direction', 'alpha');
     $search_debit = GETPOST('search_debit', 'alpha');
     $search_credit = GETPOST('search_credit', 'alpha');
     $search_ledger_code = GETPOST('search_ledger_code', 'alpha');
    +$search_lettering_code = GETPOST('search_lettering_code', 'alpha');
     
     // Load variable for pagination
     $limit = GETPOST('limit','int')?GETPOST('limit', 'int'):(empty($conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION)?$conf->liste_limit:$conf->global->ACCOUNTING_LIMIT_LIST_VENTILATION);
    @@ -137,11 +139,14 @@ $arrayfields=array(
     	't.label_operation'=>array('label'=>$langs->trans("Label"), 'checked'=>1),
     	't.debit'=>array('label'=>$langs->trans("Debit"), 'checked'=>1),
     	't.credit'=>array('label'=>$langs->trans("Credit"), 'checked'=>1),
    +	't.lettering_code'=>array('label'=>$langs->trans("LetteringCode"), 'checked'=>1),
     	't.code_journal'=>array('label'=>$langs->trans("Codejournal"), 'checked'=>1),
     	't.date_creation'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0),
     	't.tms'=>array('label'=>$langs->trans("DateModification"), 'checked'=>0),
     );
     
    +if (empty($conf->global->ACCOUNTING_ENABLE_LETTERING)) unset($arrayfields['t.lettering_code']);
    +
     
     /*
      * Actions
    @@ -175,6 +180,7 @@ if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x',
     	$search_date_modification_end = '';
     	$search_debit = '';
     	$search_credit = '';
    +	$search_lettering_code = '';
     }
     
     // Must be after the remove filter action, before the export.
    @@ -271,6 +277,10 @@ if (! empty($search_credit)) {
     	$filter['t.credit'] = $search_credit;
     	$param .= '&search_credit=' . urlencode($search_credit);
     }
    +if (! empty($search_lettering_code)) {
    +	$filter['t.lettering_code'] = $search_lettering_code;
    +	$param .= '&search_lettering_code=' . urlencode($search_lettering_code);
    + }
     
     
     if ($action == 'delbookkeeping') {
    @@ -336,7 +346,7 @@ if ($action == 'delmouvconfirm') {
     	}
     }
     
    -// Export into a file with format defined into setup
    +// Export into a file with format defined into setup (FEC, CSV, ...)
     if ($action == 'export_file') {
     
     	$result = $object->fetchAll($sortorder, $sortfield, 0, 0, $filter);
    @@ -349,7 +359,9 @@ if ($action == 'export_file') {
     	{
     		$accountancyexport = new AccountancyExport($db);
     		$accountancyexport->export($object->lines);
    -		if (!empty($accountancyexport->errors)) {
    +
    +		if (!empty($accountancyexport->errors))
    +		{
     			setEventMessages('', $accountancyexport->errors, 'errors');
     		}
     		exit;
    @@ -465,11 +477,11 @@ if (! empty($arrayfields['t.doc_date']['checked']))
     	print '<td class="liste_titre center">';
     	print '<div class="nowrap">';
     	print $langs->trans('From') . ' ';
    -	print $form->select_date($search_date_start?$search_date_start:-1, 'search_date_start', 0, 0, 1);
    +	print $form->selectDate($search_date_start?$search_date_start:-1, 'search_date_start', 0, 0, 1);
     	print '</div>';
     	print '<div class="nowrap">';
     	print $langs->trans('to') . ' ';
    -	print $form->select_date($search_date_end?$search_date_end:-1, 'search_date_end', 0, 0, 1);
    +	print $form->selectDate($search_date_end?$search_date_end:-1, 'search_date_end', 0, 0, 1);
     	print '</div>';
     	print '</td>';
     }
    @@ -545,6 +557,13 @@ if (! empty($arrayfields['t.credit']['checked']))
     	print '<input type="text" class="flat" name="search_credit" size="4" value="'.dol_escape_htmltag($search_credit).'">';
     	print '</td>';
     }
    +// Lettering code
    +if (! empty($arrayfields['t.lettering_code']['checked']))
    +{
    +	print '<td class="liste_titre center">';
    +	print '<input type="text" size="3" class="flat" name="search_lettering_code" value="' . $search_lettering_code . '"/>';
    +	print '</td>';
    +}
     // Code journal
     if (! empty($arrayfields['t.code_journal']['checked']))
     {
    @@ -556,11 +575,11 @@ if (! empty($arrayfields['t.date_creation']['checked']))
     	print '<td class="liste_titre center">';
     	print '<div class="nowrap">';
     	print $langs->trans('From') . ' ';
    -	print $form->select_date($search_date_creation_start, 'date_creation_start', 0, 0, 1);
    +	print $form->selectDate($search_date_creation_start, 'date_creation_start', 0, 0, 1);
     	print '</div>';
     	print '<div class="nowrap">';
     	print $langs->trans('to') . ' ';
    -	print $form->select_date($search_date_creation_end, 'date_creation_end', 0, 0, 1);
    +	print $form->selectDate($search_date_creation_end, 'date_creation_end', 0, 0, 1);
     	print '</div>';
     	print '</td>';
     }
    @@ -570,11 +589,11 @@ if (! empty($arrayfields['t.tms']['checked']))
     	print '<td class="liste_titre center">';
     	print '<div class="nowrap">';
     	print $langs->trans('From') . ' ';
    -	print $form->select_date($search_date_modification_start, 'date_modification_start', 0, 0, 1);
    +	print $form->selectDate($search_date_modification_start, 'date_modification_start', 0, 0, 1);
     	print '</div>';
     	print '<div class="nowrap">';
     	print $langs->trans('to') . ' ';
    -	print $form->select_date($search_date_modification_end, 'date_modification_end', 0, 0, 1);
    +	print $form->selectDate($search_date_modification_end, 'date_modification_end', 0, 0, 1);
     	print '</div>';
     	print '</td>';
     }
    @@ -594,6 +613,7 @@ if (! empty($arrayfields['t.subledger_account']['checked']))	print_liste_field_t
     if (! empty($arrayfields['t.label_operation']['checked']))		print_liste_field_titre($arrayfields['t.label_operation']['label'], $_SERVER['PHP_SELF'], "t.label_operation", "", $param, "", $sortfield, $sortorder);
     if (! empty($arrayfields['t.debit']['checked']))				print_liste_field_titre($arrayfields['t.debit']['label'], $_SERVER['PHP_SELF'], "t.debit", "", $param, 'align="right"', $sortfield, $sortorder);
     if (! empty($arrayfields['t.credit']['checked']))				print_liste_field_titre($arrayfields['t.credit']['label'], $_SERVER['PHP_SELF'], "t.credit", "", $param, 'align="right"', $sortfield, $sortorder);
    +if (! empty($arrayfields['t.lettering_code']['checked']))		print_liste_field_titre($arrayfields['t.lettering_code']['label'], $_SERVER['PHP_SELF'], "t.lettering_code", "", $param, 'align="center"', $sortfield, $sortorder);
     if (! empty($arrayfields['t.code_journal']['checked']))			print_liste_field_titre($arrayfields['t.code_journal']['label'], $_SERVER['PHP_SELF'], "t.code_journal", "", $param, 'align="center"', $sortfield, $sortorder);
     if (! empty($arrayfields['t.date_creation']['checked']))		print_liste_field_titre($arrayfields['t.date_creation']['label'], $_SERVER['PHP_SELF'], "t.date_creation", "", $param, 'align="center"', $sortfield, $sortorder);
     if (! empty($arrayfields['t.tms']['checked']))					print_liste_field_titre($arrayfields['t.tms']['label'], $_SERVER['PHP_SELF'], "t.tms", "", $param, 'align="center"', $sortfield, $sortorder);
    @@ -679,6 +699,13 @@ if ($num > 0)
     			$totalarray['totalcredit'] += $line->credit;
     		}
     
    +		// Lettering code
    +		if (! empty($arrayfields['t.lettering_code']['checked']))
    +		{
    +			print '<td align="center">' . $line->lettering_code . '</td>';
    +			if (! $i) $totalarray['nbfield']++;
    +		}
    +
     		// Journal code
     		if (! empty($arrayfields['t.code_journal']['checked']))
     		{
    @@ -733,7 +760,6 @@ if ($num > 0)
     				else print '<td></td>';
     		}
     		print '</tr>';
    -
     	}
     }
     
    @@ -748,6 +774,6 @@ print '</div>';
     
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/accountancy/bookkeeping/listbyaccount.php b/htdocs/accountancy/bookkeeping/listbyaccount.php
    index 80a4f0db5e8..c5726901e2e 100644
    --- a/htdocs/accountancy/bookkeeping/listbyaccount.php
    +++ b/htdocs/accountancy/bookkeeping/listbyaccount.php
    @@ -3,6 +3,7 @@
      * Copyright (C) 2013-2016  Olivier Geffroy     <jeff@jeffinfo.com>
      * Copyright (C) 2013-2016  Florian Henry       <florian.henry@open-concept.pro>
      * Copyright (C) 2013-2018  Alexandre Spangaro  <aspangaro@zendsi.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -287,10 +288,10 @@ print '</td>';
     print '<td class="liste_titre"></td>';
     print '<td class="liste_titre" align="center">';
     print $langs->trans('From') . ': ';
    -print $form->select_date($search_date_start, 'search_date_start', 0, 0, 1);
    +print $form->selectDate($search_date_start, 'search_date_start', 0, 0, 1);
     print '<br>';
     print $langs->trans('to') . ': ';
    -print $form->select_date($search_date_end, 'search_date_end', 0, 0, 1);
    +print $form->selectDate($search_date_end, 'search_date_end', 0, 0, 1);
     print '</td>';
     print '<td class="liste_titre"><input type="text" size="7" class="flat" name="search_doc_ref" value="' . dol_escape_htmltag($search_doc_ref) . '"/></td>';
     print '<td class="liste_titre"><input type="text" size="7" class="flat" name="search_label_operation" value="' . dol_escape_htmltag($search_label_operation) . '"/></td>';
    @@ -421,5 +422,6 @@ print '</tr>';
     print "</table>";
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettrage.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php
    similarity index 60%
    rename from htdocs/accountancy/bookkeeping/thirdparty_lettrage.php
    rename to htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php
    index 9bf287bf3c9..3fdda686eab 100644
    --- a/htdocs/accountancy/bookkeeping/thirdparty_lettrage.php
    +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php
    @@ -2,8 +2,9 @@
     /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005      Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2013      Olivier Geffroy      <jeff@jeffinfo.com>
    - * Copyright (C) 2013      Florian Henry	      <florian.henry@open-concept.pro>
    - * Copyright (C) 2013      Alexandre Spangaro   <alexandre.spangaro@gmail.com>
    + * Copyright (C) 2013      Florian Henry	    <florian.henry@open-concept.pro>
    + * Copyright (C) 2013-2018 Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2018      Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -21,12 +22,11 @@
      */
     
     /**
    - * \file accounting/bookkeeping/thirdparty_lettrage.php
    - * \ingroup Advanced accountancy
    - * \brief Onglet de gestion de parametrages des ventilations
    + * \file        htdocs/accountancy/bookkeeping/thirdparty_lettering_customer.php
    + * \ingroup     accountancy
    + * \brief       Tab to manage customer lettering
      */
     require '../../main.inc.php';
    -
     require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php';
     require_once DOL_DOCUMENT_ROOT . '/accountancy/class/bookkeeping.class.php';
     require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
    @@ -34,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php';
     
     // Load translation files required by the page
    -$langs->loadLangs(array("compta"));
    +$langs->loadLangs(array("compta","accountancy"));
     
     $action = GETPOST('action', 'aZ09');
     $massaction = GETPOST('massaction', 'alpha');
    @@ -61,11 +61,10 @@ $search_year = GETPOST("search_year", 'int');
     $search_doc_type = GETPOST("search_doc_type", 'alpha');
     $search_doc_ref = GETPOST("search_doc_ref", 'alpha');
     
    -$lettering = GETPOST('lettering');
    +$lettering = GETPOST('lettering', 'alpha');
     if (! empty($lettering)) {
     	$action = $lettering;
     }
    -$toselect = GETPOST('toselect', 'array');
     
     // Did we click on purge search criteria ?
     // All tests are required to be compatible with all browsers
    @@ -79,16 +78,15 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x'
     $socid = GETPOST("socid", 'int');
     // if ($user->societe_id) $socid=$user->societe_id;
     
    +$lettering = new Lettering($db);
     $object = new Societe($db);
     $object->id = $socid;
     $result = $object->fetch($socid);
    -if ($result < 0) {
    -	setEventMessage($object->error, 'errors');
    +if ($result < 0)
    +{
    +	setEventMessages($object->error, $object->errors, 'errors');
     }
     
    -$form = new Form($db);
    -$BookKeeping = new lettering($db);
    -$formaccounting = new FormAccounting($db);
     
     /*
      * Action
    @@ -96,82 +94,49 @@ $formaccounting = new FormAccounting($db);
     
     if ($action == 'lettering') {
     
    -	$result = $BookKeeping->updateLettrage($toselect);
    +	$result = $lettering->updateLettering($toselect);
     
     	if ($result < 0) {
    -		setEventMessages('', $BookKeeping->errors, 'errors');
    -		$error ++;
    +		setEventMessages('', $lettering->errors, 'errors');
    +		$error++;
     	}
     }
     
     if ($action == 'autolettrage') {
     
    -	$result = $BookKeeping->lettrageTiers($socid);
    +	$result = $lettering->letteringThirdparty($socid);
     
     	if ($result < 0) {
    -		setEventMessages('', $BookKeeping->errors, 'errors');
    -		$error ++;
    +		setEventMessages('', $lettering->errors, 'errors');
    +		$error++;
     	}
     }
     
    -llxHeader('', 'Compta - Grand Livre');
     
    -/*
    - * Affichage onglets
    +	/*
    + * View
      */
    +
    +$form = new Form($db);
    +$formaccounting = new FormAccounting($db);
    +
    +$title=$object->name." - ".$langs->trans('TabLetteringCustomer');
    +$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas';
    +llxHeader('',$title,$help_url);
    +
     $head = societe_prepare_head($object);
     
     dol_htmloutput_mesg(is_numeric($error) ? '' : $error, $errors, 'error');
     
    -dol_fiche_head($head, 'accounting', $langs->trans("ThirdParty"), 0, 'company');
    +dol_fiche_head($head, 'lettering_customer', $langs->trans("ThirdParty"), 0, 'company');
     
    -print '<table width="100%" class="border">';
    -print '<tr><td width="30%">' . $langs->trans("ThirdPartyName") . '</td><td width="70%" colspan="3">';
    -$object->next_prev_filter = "te.fournisseur = 1";
    -print $form->showrefnav($object, 'socid', '', ($user->societe_id ? 0 : 1), 'rowid', 'nom', '', '');
    -print '</td></tr>';
    +$linkback = '<a href="'.DOL_URL_ROOT.'/societe/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
     
    -if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field
    -{
    -	print '<tr><td>' . $langs->trans('Prefix') . '</td><td colspan="3">' . $object->prefix_comm . '</td></tr>';
    -}
    +dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom', '', '', 0, '', '', 'arearefnobottom');
     
    -print '<tr>';
    -print '<td class="nowrap">' . $langs->trans("CustomerCode") . '</td><td colspan="3">';
    -print $object->code_client;
    -if ($object->check_codeclient() != 0)
    -	print ' <font class="error">(' . $langs->trans("WrongCustomerCode") . ')</font>';
    -print '</td>';
    -print '</tr>';
    +dol_fiche_end();
     
    -print '<tr>';
    -print '<td>';
    -print $form->editfieldkey("CustomerAccountancyCode", 'customeraccountancycode', $object->code_compta, $object, $user->rights->societe->creer);
    -print '</td><td colspan="3">';
    -print $form->editfieldval("CustomerAccountancyCode", 'customeraccountancycode', $object->code_compta, $object, $user->rights->societe->creer);
    -print '</td>';
    -print '</tr>';
    -
    -// Address
    -print '<tr><td valign="top">' . $langs->trans("Address") . '</td><td colspan="3">';
    -dol_print_address($object->address, 'gmap', 'thirdparty', $object->id);
    -print '</td></tr>';
    -
    -// Zip / Town
    -print '<tr><td class="nowrap">' . $langs->trans("Zip") . ' / ' . $langs->trans("Town") . '</td><td colspan="3">' . $object->zip . (($object->zip && $object->town) ? ' / ' : '') . $object->town . '</td>';
    -print '</tr>';
    -
    -// Country
    -print '<tr><td>' . $langs->trans("Country") . '</td><td colspan="3">';
    -// $img=picto_from_langcode($object->country_code);
    -$img = '';
    -if ($object->isInEEC())
    -	print $form->textwithpicto(($img ? $img . ' ' : '') . $object->country, $langs->trans("CountryIsInEEC"), 1, 0);
    -else
    -	print ($img ? $img . ' ' : '') . $object->country;
    -print '</td></tr>';
    -
    -print '</table>';
    +print '<br>';
     
     $sql = "SELECT bk.rowid, bk.doc_date, bk.doc_type, bk.doc_ref, ";
     $sql .= " bk.subledger_account, bk.numero_compte , bk.label_compte, bk.debit, ";
    @@ -208,7 +173,7 @@ while ( $obj = $db->fetch_object($resql) ) {
     
     $sql .= $db->plimit($limit + 1, $offset);
     
    -dol_syslog("/accountancy/bookkeeping/thirdparty_lettrage.php", LOG_DEBUG);
    +dol_syslog("/accountancy/bookkeeping/thirdparty_lettering_customer.php", LOG_DEBUG);
     $resql = $db->query($sql);
     if (! $resql) {
     	dol_print_error($db);
    @@ -217,7 +182,7 @@ if (! $resql) {
     
     $num = $db->num_rows($resql);
     
    -dol_syslog("/accountancy/bookkeeping/thirdparty_lettrage.php", LOG_DEBUG);
    +dol_syslog("/accountancy/bookkeeping/thirdparty_lettering_customer.php", LOG_DEBUG);
     if ($resql) {
     	$i = 0;
     
    @@ -231,85 +196,76 @@ if ($resql) {
     	print_liste_field_titre("Doctype", $_SERVER["PHP_SELF"], "bk.doc_type", "", $param, "", $sortfield, $sortorder);
     	print_liste_field_titre("Docdate", $_SERVER["PHP_SELF"], "bk.doc_date", "", $param, "", $sortfield, $sortorder);
     	print_liste_field_titre("Docref", $_SERVER["PHP_SELF"], "bk.doc_ref", "", $param, "", $sortfield, $sortorder);
    -	print_liste_field_titre("Labelcompte", $_SERVER["PHP_SELF"], "bk.label_compte", "", $param, "", $sortfield, $sortorder);
    +	print_liste_field_titre("LabelAccount", $_SERVER["PHP_SELF"], "bk.label_compte", "", $param, "", $sortfield, $sortorder);
     	print_liste_field_titre("Debit", $_SERVER["PHP_SELF"], "bk.debit", "", $param, "", $sortfield, $sortorder);
     	print_liste_field_titre("Credit", $_SERVER["PHP_SELF"], "bk.credit", "", $param, "", $sortfield, $sortorder);
    -	print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "bk.montant", "", $param, "", $sortfield, $sortorder);
    -	print_liste_field_titre("Sens", $_SERVER["PHP_SELF"], "bk.sens", "", $param, "", $sortfield, $sortorder);
    +	print_liste_field_titre("Balancing", $_SERVER["PHP_SELF"], "", "", $param, "", $sortfield, $sortorder);
     	print_liste_field_titre("Codejournal", $_SERVER["PHP_SELF"], "bk.code_journal", "", $param, "", $sortfield, $sortorder);
    -	print_liste_field_titre("Solde", $_SERVER["PHP_SELF"], "", "", $param, "", $sortfield, $sortorder);
    -	print '<td></td>';
    +	print_liste_field_titre("LetteringCode", $_SERVER["PHP_SELF"], "bk.lettering_code", "", $param, "", $sortfield, $sortorder);
     	print "</tr>\n";
     
     	print '<tr class="liste_titre">';
     	print '<td><input type="text" name="search_doc_type" value="' . $search_doc_type . '"></td>';
     	print '<td><input type="text" name="search_year" value="' . $search_year . '"></td>';
     	print '<td><input type="text" name="search_doc_refe" value="' . $search_doc_ref . '"></td>';
    -	print '<td colspan="7">&nbsp;</td>';
    +	print '<td colspan="5">&nbsp;</td>';
     	print '<td align="right">';
     	$searchpicto = $form->showFilterButtons();
     	print $searchpicto;
     	print '</td>';
     	print '</tr>';
     
    -	$var = false;
     	$solde = 0;
     	$tmp = '';
     	while ( $obj = $db->fetch_object($resql) ) {
     
    -		if ($tmp != $obj->lettering_code || empty($tmp))
    -			$tmp = $obj->lettering_code;
    +		if ($tmp != $obj->lettering_code || empty($tmp))						$tmp = $obj->lettering_code;
    +		/*if ($tmp != $obj->lettering_code || empty($obj->lettering_code))*/	$solde += ($obj->credit - $obj->debit);
     
    -		if ($tmp != $obj->lettering_code || empty($obj->lettering_code))
    -			$var = ! $var;
    -
    -		$solde += ($obj->credit - $obj->debit);
    -
    -		print "<tr $bc[$var]>";
    +		print '<tr class="oddeven">';
     
     		if (empty($obj->lettering_code)) {
     			print '<td><a href="' . dol_buildpath('/accountancy/bookkeeping/card.php', 1) . '?piece_num=' . $obj->piece_num . '">';
     			print img_edit();
     			print '</a>&nbsp;' . $obj->doc_type . '</td>' . "\n";
    -		} else
    +		} else {
     			print '<td>' . $obj->doc_type . '</td>' . "\n";
    +		}
     
     		print '<td>' . dol_print_date($db->jdate($obj->doc_date), 'day') . '</td>';
     		print '<td>' . $obj->doc_ref . '</td>';
     		print '<td>' . $obj->label_compte . '</td>';
    -		print '<td>' . price($obj->debit) . '</td>';
    -		print '<td>' . price($obj->credit) . '</td>';
    -		print '<td>' . price($obj->montant) . '</td>';
    -		print '<td>' . $obj->sens . '</td>';
    -		print '<td>' . $obj->code_journal . '</td>';
    -		print '<td>' . round($solde, 2) . '</td>';
    +		print '<td align="right">' . price($obj->debit) . '</td>';
    +		print '<td align="right">' . price($obj->credit) . '</td>';
    +		print '<td align="right">' . price(round($solde, 2)) . '</td>';
    +		print '<td align="center">' . $obj->code_journal . '</td>';
     
     		if (empty($obj->lettering_code)) {
     			print '<td class="nowrap" align="center"><input type="checkbox" class="flat checkforselect" name="toselect[]" id="toselect[]" value="' . $obj->rowid . '" /></td>';
     		} else
    -			print '<td>' . $obj->lettering_code . '</td>';
    +			print '<td align="center">' . $obj->lettering_code . '</td>';
     
     		print "</tr>\n";
     	}
     
     	print '<tr class="oddeven">';
    -
    -	print '<td colspan="4">Mouvement totaux</td>' . "\n";
    -	print '<td><strong>' . price($debit) . '</strong></td>';
    -	print '<td><strong>' . price($credit) . '</strong></td>';
    +	print '<td align="right" colspan="4">'.$langs->trans("Total").':</td>' . "\n";
    +	print '<td align="right"><strong>' . price($debit) . '</strong></td>';
    +	print '<td align="right"><strong>' . price($credit) . '</strong></td>';
     	print '<td colspan="5"></td>';
     	print "</tr>\n";
     
    -	print "<tr $bc[$var]>";
    -	print '<td colspan="9">Solde Comptable</td>' . "\n";
    -	print '<td><strong>' . price($credit - $debit) . '</strong></td>';
    -	print '<td colspan="5"></td>';
    +	print '<tr class="oddeven">';
    +	print '<td align="right" colspan="4">'.$langs->trans("Balancing").':</td>' . "\n";
    +	print '<td colspan="2">&nbsp;</td>';
    +	print '<td align="right"><strong>' . price($credit - $debit) . '</strong></td>';
    +	print '<td colspan="3"></td>';
     	print "</tr>\n";
     
     	print "</table>";
     
     	print '<input class="butAction" type="submit" value="lettering" name="lettering" id="lettering">';
    -	print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?socid=' . $object->id . '&action=autolettrage">' . $langs->trans('AccountancyAutoLettering') . '</a>';
    +	//print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?socid=' . $object->id . '&action=autolettering">' . $langs->trans('AccountancyAutoLettering') . '</a>';
     	print "</form>";
     	$db->free($resql);
     } else {
    @@ -319,4 +275,3 @@ if ($resql) {
     // End of page
     llxFooter();
     $db->close();
    -
    diff --git a/htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php
    similarity index 58%
    rename from htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php
    rename to htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php
    index cf278c26903..8cd51847b1e 100644
    --- a/htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php
    +++ b/htdocs/accountancy/bookkeeping/thirdparty_lettering_supplier.php
    @@ -2,8 +2,9 @@
     /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005      Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2013      Olivier Geffroy      <jeff@jeffinfo.com>
    - * Copyright (C) 2013      Florian Henry	      <florian.henry@open-concept.pro>
    - * Copyright (C) 2013      Alexandre Spangaro   <alexandre.spangaro@gmail.com>
    + * Copyright (C) 2013      Florian Henry	    <florian.henry@open-concept.pro>
    + * Copyright (C) 2013-2018 Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2018      Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -21,14 +22,11 @@
      */
     
     /**
    - * \file accounting/bookkeeping/thirdparty_lettrage.php
    - * \ingroup Advanced accountancy
    - * \brief Tab to setup lettering
    + * \file    	htdocs/accountancy/bookkeeping/thirdparty_lettrage_supplier.php
    + * \ingroup 	Advanced accountancy
    + * \brief 		Tab to setup lettering
      */
    -
    -// Dolibarr environment
     require '../../main.inc.php';
    -
     require_once DOL_DOCUMENT_ROOT . '/core/class/html.formaccounting.class.php';
     require_once DOL_DOCUMENT_ROOT . '/accountancy/class/bookkeeping.class.php';
     require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
    @@ -36,7 +34,7 @@ require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php';
     
     // Load translation files required by the page
    -$langs->loadLangs(array("compta"));
    +$langs->loadLangs(array("compta","accountancy"));
     
     $action = GETPOST('action', 'aZ09');
     $massaction = GETPOST('massaction', 'alpha');
    @@ -63,11 +61,10 @@ $search_year = GETPOST("search_year",'int');
     $search_doc_type = GETPOST("search_doc_type",'alpha');
     $search_doc_ref = GETPOST("search_doc_ref",'alpha');
     
    -$lettering = GETPOST('lettering');
    +$lettering = GETPOST('lettering', 'alpha');
     if (!empty($lettering)) {
     	$action=$lettering;
     }
    -$toselect = GETPOST('toselect','array');
     
     // Did we click on purge search criteria ?
     // All tests are required to be compatible with all browsers
    @@ -83,111 +80,62 @@ if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x',
     $socid = GETPOST("socid", 'int');
     // if ($user->societe_id) $socid=$user->societe_id;
     
    +$lettering = new Lettering($db);
     $object = new Societe($db);
     $object->id = $socid;
     $result = $object->fetch($socid);
    -if ($result<0) {
    -	setEventMessage($object->error,'errors');
    +if ($result<0)
    +{
    +	setEventMessages($object->error, $object->errors, 'errors');
     }
     
    -$form = new Form($db);
    -$BookKeeping = new lettering($db);
    -$formaccounting = new FormAccounting($db);
     
     /*
      * Action
      */
     if ($action == 'lettering') {
     
    -	$result = $BookKeeping->updateLettrage($toselect);
    +	$result = $lettering->updateLettering($toselect);
     
    -	// var_dump($result);
     	if ($result < 0) {
    -		setEventMessages('', $BookKeeping->errors, 'errors');
    -		$error ++;
    +		setEventMessages('', $lettering->errors, 'errors');
    +		$error++;
     	}
     }
     
     if ($action == 'autolettrage') {
     
    -	$result = $BookKeeping->lettrageTiers($socid);
    +	$result = $lettering->letteringThirdparty($socid);
     
     	if ($result < 0) {
    -		setEventMessages('', $BookKeeping->errors, 'errors');
    -		$error ++;
    +		setEventMessages('', $lettering->errors, 'errors');
    +		$error++;
     	}
     }
     
    -$title = 'AccountancyLettrage';
    -
    -llxHeader('', $title);
    -
    -
    -$param='';
    -if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
    -if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
    -if (!empty($search_year)) $param.='&search_year='.$search_year;
    -if (!empty($socid)) $param.='&socid='.$socid;
    -if (!empty($search_doc_type)) $param.='&search_doc_type='.$search_doc_type;
    -if (!empty($search_doc_ref)) $param.='&search_doc_ref='.$search_doc_ref;
    -
     
     /*
    - * Affichage onglets
    + * View
      */
    +
    +$form = new Form($db);
    +$formaccounting = new FormAccounting($db);
    +
    +$title=$object->name." - ".$langs->trans('TabLetteringSupplier');
    +$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas';
    +llxHeader('',$title,$help_url);
    +
     $head = societe_prepare_head($object);
     
     dol_htmloutput_mesg(is_numeric($error) ? '' : $error, $errors, 'error');
     
    -dol_fiche_head($head, 'accounting_supplier', $langs->trans("ThirdParty"), 0, 'company');
    +dol_fiche_head($head, 'lettering_supplier', $langs->trans("ThirdParty"), 0, 'company');
     
    -print '<table width="100%" class="border">';
    -print '<tr><td width="30%">' . $langs->trans("ThirdPartyName") . '</td><td width="70%" colspan="3">';
    -$object->next_prev_filter = "te.fournisseur = 1";
    -print $form->showrefnav($object, 'socid', '', ($user->societe_id ? 0 : 1), 'rowid', 'nom', '', '');
    -print '</td></tr>';
    +$linkback = '<a href="'.DOL_URL_ROOT.'/societe/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
     
    -if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field
    -{
    -	print '<tr><td>' . $langs->trans('Prefix') . '</td><td colspan="3">' . $object->prefix_comm . '</td></tr>';
    -}
    +dol_banner_tab($object, 'socid', $linkback, ($user->societe_id?0:1), 'rowid', 'nom', '', '', 0, '', '', 'arearefnobottom');
     
    -print '<tr>';
    -print '<td class="nowrap">' . $langs->trans("SupplierCode") . '</td><td colspan="3">';
    -print $object->code_fournisseur;
    -if ($object->check_codefournisseur() != 0)
    -	print ' <font class="error">(' . $langs->trans("WrongSupplierCode") . ')</font>';
    -print '</td>';
    -print '</tr>';
    -
    -print '<tr>';
    -print '<td>';
    -print $form->editfieldkey("SupplierAccountancyCode", 'supplieraccountancycode', $object->code_compta_fournisseur, $object, $user->rights->societe->creer);
    -print '</td><td colspan="3">';
    -print $form->editfieldval("SupplierAccountancyCode", 'supplieraccountancycode', $object->code_compta_fournisseur, $object, $user->rights->societe->creer);
    -print '</td>';
    -print '</tr>';
    -
    -// Address
    -print '<tr><td valign="top">' . $langs->trans("Address") . '</td><td colspan="3">';
    -dol_print_address($object->address, 'gmap', 'thirdparty', $object->id);
    -print '</td></tr>';
    -
    -// Zip / Town
    -print '<tr><td class="nowrap">' . $langs->trans("Zip") . ' / ' . $langs->trans("Town") . '</td><td colspan="3">' . $object->zip . (($object->zip && $object->town) ? ' / ' : '') . $object->town . '</td>';
    -print '</tr>';
    -
    -// Country
    -print '<tr><td>' . $langs->trans("Country") . '</td><td colspan="3">';
    -// $img=picto_from_langcode($object->country_code);
    -$img = '';
    -if ($object->isInEEC())
    -	print $form->textwithpicto(($img ? $img . ' ' : '') . $object->country, $langs->trans("CountryIsInEEC"), 1, 0);
    -else
    -	print ($img ? $img . ' ' : '') . $object->country;
    -print '</td></tr>';
    -
    -print '</table>';
    +dol_fiche_end();
     
     $sql = "SELECT bk.rowid, bk.doc_date, bk.doc_type, bk.doc_ref, ";
     $sql .= " bk.subledger_account, bk.numero_compte , bk.label_compte, bk.debit, ";
    @@ -251,85 +199,76 @@ if ($resql) {
     	print_liste_field_titre("Doctype", $_SERVER["PHP_SELF"], "bk.doc_type","",$param,"",$sortfield,$sortorder);
     	print_liste_field_titre("Docdate", $_SERVER["PHP_SELF"], "bk.doc_date","",$param,"",$sortfield,$sortorder);
     	print_liste_field_titre("Docref", $_SERVER["PHP_SELF"], "bk.doc_ref","",$param,"",$sortfield,$sortorder);
    -	print_liste_field_titre("Labelcompte", $_SERVER["PHP_SELF"], "bk.label_compte","",$param,"",$sortfield,$sortorder);
    +	print_liste_field_titre("LabelAccount", $_SERVER["PHP_SELF"], "bk.label_compte","",$param,"",$sortfield,$sortorder);
     	print_liste_field_titre("Debit", $_SERVER["PHP_SELF"], "bk.debit","",$param,"",$sortfield,$sortorder);
     	print_liste_field_titre("Credit", $_SERVER["PHP_SELF"], "bk.credit","",$param,"",$sortfield,$sortorder);
    -	print_liste_field_titre("Amount", $_SERVER["PHP_SELF"], "bk.montant","",$param,"",$sortfield,$sortorder);
    -	print_liste_field_titre("Sens", $_SERVER["PHP_SELF"], "bk.sens","",$param,"",$sortfield,$sortorder);
    +	print_liste_field_titre("Balancing", $_SERVER["PHP_SELF"], "","",$param,"",$sortfield,$sortorder);
     	print_liste_field_titre("Codejournal", $_SERVER["PHP_SELF"], "bk.code_journal","",$param,"",$sortfield,$sortorder);
    -	print_liste_field_titre("Solde", $_SERVER["PHP_SELF"], "","",$param,"",$sortfield,$sortorder);
    -	print '<td></td>';
    +	print_liste_field_titre("LetteringCode", $_SERVER["PHP_SELF"], "bk.lettering_code", "", $param, "", $sortfield, $sortorder);
     	print "</tr>\n";
     
     	print '<tr class="liste_titre">';
     	print '<td><input type="text" name="search_doc_type" value="' . $search_doc_type . '"></td>';
     	print '<td><input type="text" name="search_year" value="' . $search_year . '"></td>';
     	print '<td><input type="text" name="search_doc_refe" value="' . $search_doc_ref . '"></td>';
    -	print '<td colspan="7">&nbsp;</td>';
    +	print '<td colspan="6">&nbsp;</td>';
     	print '<td align="right">';
     	$searchpicto=$form->showFilterButtons();
     	print $searchpicto;
     	print '</td>';
     	print '</tr>';
     
    -	$var = false;
     	$solde = 0;
     	$tmp = '';
     	while ($obj = $db->fetch_object($resql)) {
     
    -		if ($tmp != $obj->lettering_code || empty($tmp))
    -			$tmp = $obj->lettering_code;
    +		if ($tmp != $obj->lettering_code || empty($tmp))						$tmp = $obj->lettering_code;
    +		/*if ($tmp != $obj->lettering_code || empty($obj->lettering_code))*/	$solde += ($obj->credit - $obj->debit);
     
    -			if ($tmp != $obj->lettering_code || empty($obj->lettering_code))
    -			$var = ! $var;
    -
    -		$solde += ($obj->credit - $obj->debit);
    -
    -		print "<tr $bc[$var]>";
    +		print '<tr class="oddeven">';
     
     		if (empty($obj->lettering_code)) {
     			print '<td><a href="' . dol_buildpath('/accountancy/bookkeeping/card.php', 1) . '?piece_num=' . $obj->piece_num . '">';
     			print img_edit();
     			print '</a>&nbsp;' . $obj->doc_type . '</td>' . "\n";
    -		} else
    +		} else {
     			print '<td>' . $obj->doc_type . '</td>' . "\n";
    +		}
     
     		print '<td>' . dol_print_date($db->jdate($obj->doc_date), 'day') . '</td>';
     		print '<td>' . $obj->doc_ref . '</td>';
     		print '<td>' . $obj->label_compte . '</td>';
    -		print '<td>' . price($obj->debit) . '</td>';
    -		print '<td>' . price($obj->credit) . '</td>';
    -		print '<td>' . price($obj->montant) . '</td>';
    -		print '<td>' . $obj->sens . '</td>';
    -		print '<td>' . $obj->code_journal . '</td>';
    -		print '<td>' . round($solde, 2) . '</td>';
    +		print '<td align="right">' . price($obj->debit) . '</td>';
    +		print '<td align="right">' . price($obj->credit) . '</td>';
    +		print '<td align="right">' . price(round($solde, 2)) . '</td>';
    +		print '<td align="center">' . $obj->code_journal . '</td>';
     
     		if (empty($obj->lettering_code)) {
     			print '<td class="nowrap" align="center"><input type="checkbox" class="flat checkforselect" name="toselect[]" id="toselect[]" value="' . $obj->rowid . '" /></td>';
     		} else
    -			print '<td>' . $obj->lettering_code . '</td>';
    +			print '<td align="center">' . $obj->lettering_code . '</td>';
     
     		print "</tr>\n";
     	}
     
     	print '<tr class="oddeven">';
    -
    -	print '<td colspan="4">Mouvement totaux</td>' . "\n";
    -	print '<td><strong>' . price($debit) . '</strong></td>';
    -	print '<td><strong>' . price($credit) . '</strong></td>';
    +	print '<td align="right" colspan="4">'.$langs->trans("Total").':</td>' . "\n";
    +	print '<td align="right"><strong>' . price($debit) . '</strong></td>';
    +	print '<td align="right"><strong>' . price($credit) . '</strong></td>';
     	print '<td colspan="5"></td>';
     	print "</tr>\n";
     
    -	print "<tr $bc[$var]>";
    -	print '<td colspan="9">Solde Comptable</td>' . "\n";
    -	print '<td><strong>' . price($credit - $debit) . '</strong></td>';
    -	print '<td colspan="5"></td>';
    +	print '<tr class="oddeven">';
    +	print '<td align="right" colspan="4">'.$langs->trans("Balancing").':</td>' . "\n";
    +	print '<td colspan="2">&nbsp;</td>';
    +	print '<td align="right"><strong>' . price($credit - $debit) . '</strong></td>';
    +	print '<td colspan="3"></td>';
     	print "</tr>\n";
     
     	print "</table>";
     
    -	print '<input class="butAction" type="submit" value="lettering" name="lettering" id="lettering">';
    -	print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?socid=' . $object->id . '&action=autolettrage">'.$langs->trans('AccountancyAutoLettering').'</a>';
    +	print '<input class="butAction" type="submit" value="' . $langs->trans('AccountancyLettering') . '" name="lettering" id="lettering">';
    +	//print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?socid=' . $object->id . '&action=autolettrage">'.$langs->trans('AccountancyAutoLettering').'</a>';
     	print "</form>";
     	$db->free($resql);
     } else {
    diff --git a/htdocs/accountancy/class/accountancycategory.class.php b/htdocs/accountancy/class/accountancycategory.class.php
    index 9554a79c858..e2a7b14033c 100644
    --- a/htdocs/accountancy/class/accountancycategory.class.php
    +++ b/htdocs/accountancy/class/accountancycategory.class.php
    @@ -29,27 +29,97 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
     /**
      * Class to manage categories of an accounting account
      */
    -class AccountancyCategory 	// extends CommonObject
    +class AccountancyCategory // extends CommonObject
     {
    -	public $db;							//!< To store db handler
    -	public $error;							//!< To return error code (or message)
    -	public $errors=array();				//!< To return several error codes (or messages)
    -	public $element='c_accounting_category';			//!< Id that identify managed objects
    -	public $table_element='c_accounting_category';	//!< Name of table without prefix where object is stored
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -	public $id;
    +	/**
    +	 * @var string 		Error string
    +	 * @see             errors
    +	 */
    +	public $error;
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='c_accounting_category';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='c_accounting_category';
    +
    +	/**
    +     * @var int ID
    +     */
    +    public $id;
    +
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $code;
    -	public $label;
    +
    +	/**
    +     * @var string Accountancy Category label
    +     */
    +    public $label;
    +
    +    /**
    +	 * @var mixed Sample property 1
    +	 */
     	public $range_account;
    +
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $sens;
    +
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $category_type;
    +
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $formula;
    +
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $position;
    +
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $fk_country;
    +
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $active;
     
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $lines_cptbk;
    +
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $lines_display;
    +
    +	/**
    +	 * @var mixed Sample property 1
    +	 */
     	public $sdc;
     
     
    @@ -126,18 +196,18 @@ class AccountancyCategory 	// extends CommonObject
     		{
     			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."c_accounting_category");
     
    -			if (! $notrigger)
    -			{
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action call a trigger.
    +			// Uncomment this and change MYOBJECT to your own tag if you
    +			// want this action call a trigger.
    +			//if (! $notrigger)
    +			//{
     
    -				//// Call triggers
    -				//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -				//$interface=new Interfaces($this->db);
    -				//$result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf);
    -				//if ($result < 0) { $error++; $this->errors=$interface->errors; }
    -				//// End call triggers
    -			}
    +			//	// Call triggers
    +			//	include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    +			//	$interface=new Interfaces($this->db);
    +			//	$result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf);
    +			//	if ($result < 0) { $error++; $this->errors=$interface->errors; }
    +			//	// End call triggers
    +			//}
     		}
     
     		// Commit or rollback
    @@ -265,18 +335,17 @@ class AccountancyCategory 	// extends CommonObject
     
     		if (! $error)
     		{
    -			if (! $notrigger)
    -			{
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action call a trigger.
    -
    -				//// Call triggers
    -				//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -				//$interface=new Interfaces($this->db);
    -				//$result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf);
    -				//if ($result < 0) { $error++; $this->errors=$interface->errors; }
    -				//// End call triggers
    -			}
    +			// Uncomment this and change MYOBJECT to your own tag if you
    +			// want this action call a trigger.
    +			//if (! $notrigger)
    +			//{
    +			//	// Call triggers
    +			//	include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    +			//	$interface=new Interfaces($this->db);
    +			//	$result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf);
    +			//	if ($result < 0) { $error++; $this->errors=$interface->errors; }
    +			//	// End call triggers
    +			//}
     		}
     
     		// Commit or rollback
    @@ -321,18 +390,17 @@ class AccountancyCategory 	// extends CommonObject
     
     		if (! $error)
     		{
    -			if (! $notrigger)
    -			{
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action call a trigger.
    -
    -				//// Call triggers
    -				//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -				//$interface=new Interfaces($this->db);
    -				//$result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf);
    -				//if ($result < 0) { $error++; $this->errors=$interface->errors; }
    -				//// End call triggers
    -			}
    +			// Uncomment this and change MYOBJECT to your own tag if you
    +			// want this action call a trigger.
    +			//if (! $notrigger)
    +			//{
    +			//	// Call triggers
    +			//	include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    +			//	$interface=new Interfaces($this->db);
    +			//	$result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf);
    +			//	if ($result < 0) { $error++; $this->errors=$interface->errors; }
    +			//	// End call triggers
    +			//}
     		}
     
     		// Commit or rollback
    @@ -360,7 +428,8 @@ class AccountancyCategory 	// extends CommonObject
     	 * @param int $id Id
     	 * @return int <0 if KO, 0 if not found, >0 if OK
     	 */
    -	public function display($id) {
    +    public function display($id)
    +    {
     		global $conf;
     		$sql = "SELECT t.rowid, t.account_number, t.label";
     		$sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as t";
    @@ -395,7 +464,8 @@ class AccountancyCategory 	// extends CommonObject
     	 *
     	 * @return int <0 if KO, 0 if not found, >0 if OK
     	 */
    -	public function getCptBK($id) {
    +    public function getCptBK($id)
    +    {
     		global $conf;
     
     		$sql = "SELECT t.numero_compte, t.label_operation, t.doc_ref";
    @@ -443,8 +513,9 @@ class AccountancyCategory 	// extends CommonObject
     	 *
     	 * @return int <0 if KO, 0 if not found, >0 if OK
     	 */
    -	public function getAccountsWithNoCategory($id) {
    -	    global $conf;
    +    public function getAccountsWithNoCategory($id)
    +    {
    +        global $conf;
     
     	    $sql = "SELECT aa.account_number as numero_compte, aa.label as label_compte";
     	    $sql .= " FROM " . MAIN_DB_PREFIX . "accounting_account as aa";
    @@ -486,7 +557,8 @@ class AccountancyCategory 	// extends CommonObject
     	 *
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	public function updateAccAcc($id_cat, $cpts = array()) {
    +    public function updateAccAcc($id_cat, $cpts = array())
    +    {
     		global $conf;
     		$error = 0;
     
    @@ -549,7 +621,8 @@ class AccountancyCategory 	// extends CommonObject
     	 *
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	public function deleteCptCat($cpt_id) {
    +    public function deleteCptCat($cpt_id)
    +    {
     		$error = 0;
     
     		$sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_account as aa";
    @@ -800,5 +873,4 @@ class AccountancyCategory 	// extends CommonObject
     			return -1;
     		}
     	}
    -
     }
    diff --git a/htdocs/accountancy/class/accountancyexport.class.php b/htdocs/accountancy/class/accountancyexport.class.php
    index 52b5f1c411f..5d76a7155d6 100644
    --- a/htdocs/accountancy/class/accountancyexport.class.php
    +++ b/htdocs/accountancy/class/accountancyexport.class.php
    @@ -44,7 +44,8 @@ class AccountancyExport
     	/**
     	 * @var Type of export. Defined by $conf->global->ACCOUNTING_EXPORT_MODELCSV
     	 */
    -	public static $EXPORT_TYPE_NORMAL = 1;	 // Classic CSV
    +	public static $EXPORT_TYPE_NORMAL = 1;	 			// CSV
    +	public static $EXPORT_TYPE_CONFIGURABLE = 10;		// CSV
     	public static $EXPORT_TYPE_CEGID = 2;
     	public static $EXPORT_TYPE_COALA = 3;
     	public static $EXPORT_TYPE_BOB50 = 4;
    @@ -53,13 +54,13 @@ class AccountancyExport
     	public static $EXPORT_TYPE_EBP = 7;
     	public static $EXPORT_TYPE_COGILOG = 8;
     	public static $EXPORT_TYPE_AGIRIS = 9;
    -	public static $EXPORT_TYPE_CONFIGURABLE = 10;
    +	public static $EXPORT_TYPE_FEC = 11;
    +
     
     	/**
    -	 *
     	 * @var string[] Error codes (or messages)
     	 */
    -	public $errors = array ();
    +	public $errors = array();
     
     	/**
     	 *
    @@ -78,7 +79,8 @@ class AccountancyExport
     	 *
     	 * @param DoliDb $db Database handler
     	 */
    -	public function __construct(DoliDB &$db) {
    +	public function __construct(DoliDB &$db)
    +	{
     		global $conf;
     
     		$this->db = &$db;
    @@ -91,11 +93,13 @@ class AccountancyExport
     	 *
     	 * @return array of type
     	 */
    -	public static function getType() {
    +	public static function getType()
    +	{
     		global $langs;
     
     		return array (
    -				self::$EXPORT_TYPE_NORMAL => $langs->trans('Modelcsv_normal'),
    +				//self::$EXPORT_TYPE_NORMAL => $langs->trans('Modelcsv_normal'),
    +				self::$EXPORT_TYPE_CONFIGURABLE => $langs->trans('Modelcsv_configurable'),
     				self::$EXPORT_TYPE_CEGID => $langs->trans('Modelcsv_CEGID'),
     				self::$EXPORT_TYPE_COALA => $langs->trans('Modelcsv_COALA'),
     				self::$EXPORT_TYPE_BOB50 => $langs->trans('Modelcsv_bob50'),
    @@ -104,27 +108,53 @@ class AccountancyExport
     				self::$EXPORT_TYPE_EBP => $langs->trans('Modelcsv_ebp'),
     				self::$EXPORT_TYPE_COGILOG => $langs->trans('Modelcsv_cogilog'),
     				self::$EXPORT_TYPE_AGIRIS => $langs->trans('Modelcsv_agiris'),
    -				self::$EXPORT_TYPE_CONFIGURABLE => $langs->trans('Modelcsv_configurable'),
    +				self::$EXPORT_TYPE_FEC => $langs->trans('Modelcsv_FEC'),
     			);
     	}
     
    +	/**
    +	 * Return string to summarize the format (Used to generated export filename)
    +	 *
    +	 * @param	int		$type		Format id
    +	 * @return 	string				Format code
    +	 */
    +	private static function getFormatCode($type)
    +	{
    +		$formatcode = array (
    +			//self::$EXPORT_TYPE_NORMAL => 'csv',
    +			self::$EXPORT_TYPE_CONFIGURABLE => 'csv',
    +			self::$EXPORT_TYPE_CEGID => 'cegid',
    +			self::$EXPORT_TYPE_COALA => 'coala',
    +			self::$EXPORT_TYPE_BOB50 => 'bob50',
    +			self::$EXPORT_TYPE_CIEL => 'ciel',
    +			self::$EXPORT_TYPE_QUADRATUS => 'quadratus',
    +			self::$EXPORT_TYPE_EBP => 'ebp',
    +			self::$EXPORT_TYPE_COGILOG => 'cogilog',
    +			self::$EXPORT_TYPE_AGIRIS => 'agiris',
    +			self::$EXPORT_TYPE_FEC => 'fec',
    +		);
    +
    +		return $formatcode[$type];
    +	}
    +
     	/**
     	 * Array with all export type available (key + label) and parameters for config
     	 *
     	 * @return array of type
     	 */
    -	public static function getTypeConfig() {
    +	public static function getTypeConfig()
    +	{
     		global $conf, $langs;
     
     		return array (
     			'param' => array(
    -				self::$EXPORT_TYPE_NORMAL => array(
    +				/*self::$EXPORT_TYPE_NORMAL => array(
     					'label' => $langs->trans('Modelcsv_normal'),
     					'ACCOUNTING_EXPORT_FORMAT' => empty($conf->global->ACCOUNTING_EXPORT_FORMAT)?'txt':$conf->global->ACCOUNTING_EXPORT_FORMAT,
     					'ACCOUNTING_EXPORT_SEPARATORCSV' => empty($conf->global->ACCOUNTING_EXPORT_SEPARATORCSV)?',':$conf->global->ACCOUNTING_EXPORT_SEPARATORCSV,
     					'ACCOUNTING_EXPORT_ENDLINE' => empty($conf->global->ACCOUNTING_EXPORT_ENDLINE)?1:$conf->global->ACCOUNTING_EXPORT_ENDLINE,
     					'ACCOUNTING_EXPORT_DATE' => empty($conf->global->ACCOUNTING_EXPORT_DATE)?'%d%m%Y':$conf->global->ACCOUNTING_EXPORT_DATE,
    -				),
    +				),*/
     				self::$EXPORT_TYPE_CEGID => array(
     					'label' => $langs->trans('Modelcsv_CEGID'),
     				),
    @@ -158,6 +188,10 @@ class AccountancyExport
     					'ACCOUNTING_EXPORT_ENDLINE' => empty($conf->global->ACCOUNTING_EXPORT_ENDLINE)?1:$conf->global->ACCOUNTING_EXPORT_ENDLINE,
     					'ACCOUNTING_EXPORT_DATE' => empty($conf->global->ACCOUNTING_EXPORT_DATE)?'%d%m%Y':$conf->global->ACCOUNTING_EXPORT_DATE,
     				),
    +				self::$EXPORT_TYPE_FEC => array(
    +					'label' => $langs->trans('Modelcsv_FEC'),
    +					'ACCOUNTING_EXPORT_FORMAT' => 'txt',
    +				),
     			),
     			'cr'=> array (
     				'1' => $langs->trans("Unix"),
    @@ -170,31 +204,31 @@ class AccountancyExport
     		);
     	}
     
    +
     	/**
    -	 * Download the export
    +	 * Function who chose which export to use with the default config, and make the export into a file
     	 *
    +	 * @param array		$TData 		data
     	 * @return void
     	 */
    -	public static function downloadFile() {
    -		global $conf;
    -		$filename = 'general_ledger';
    -		include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php';
    -	}
    -
    -	/**
    -	 * Function who chose which export to use with the default config
    -	 *
    -	 * @param unknown $TData data
    -	 */
    -	public function export(&$TData) {
    +	public function export(&$TData)
    +	{
     		global $conf, $langs;
    +		global $search_date_end;	// Used into /accountancy/tpl/export_journal.tpl.php
    +
    +		// Define name of file to save
    +		$filename = 'general_ledger-'.$this->getFormatCode($conf->global->ACCOUNTING_EXPORT_MODELCSV);
    +		$type_export = 'general_ledger';
    +
    +		include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php';
     
    -		self::downloadFile();
     
     		switch ($conf->global->ACCOUNTING_EXPORT_MODELCSV) {
     			case self::$EXPORT_TYPE_NORMAL :
    -				$this->exportNormal($TData);
    +			case self::$EXPORT_TYPE_CONFIGURABLE :
    +				$this->exportConfigurable($TData);
     				break;
    +			case self::$EXPORT_TYPE_NORMAL :
     			case self::$EXPORT_TYPE_CEGID :
     				$this->exportCegid($TData);
     				break;
    @@ -219,8 +253,8 @@ class AccountancyExport
     			case self::$EXPORT_TYPE_AGIRIS :
     				$this->exportAgiris($TData);
     				break;
    -			case self::$EXPORT_TYPE_CONFIGURABLE :
    -				$this->exportConfigurable($TData);
    +			case self::$EXPORT_TYPE_FEC :
    +				$this->exportFEC($TData);
     				break;
     			default:
     				$this->errors[] = $langs->trans('accountancy_error_modelnotfound');
    @@ -228,29 +262,6 @@ class AccountancyExport
     		}
     	}
     
    -	/**
    -	 * Export format : Normal
    -	 *
    -	 * @param array $objectLines data
    -	 *
    -	 * @return void
    -	 */
    -	public function exportNormal($objectLines) {
    -		global $conf;
    -
    -		foreach ( $objectLines as $line ) {
    -			// Std export
    -			$date = dol_print_date($line->doc_date, $conf->global->ACCOUNTING_EXPORT_DATE);
    -			print $date . $this->separator;
    -			print $line->doc_ref . $this->separator;
    -			print length_accountg($line->numero_compte) . $this->separator;
    -			print length_accounta($line->subledger_account) . $this->separator;
    -			print price($line->debit) . $this->separator;
    -			print price($line->credit) . $this->separator;
    -			print $line->code_journal . $this->separator;
    -			print $this->end_line;
    -		}
    -	}
     
     	/**
     	 * Export format : CEGID
    @@ -259,7 +270,8 @@ class AccountancyExport
     	 *
     	 * @return void
     	 */
    -	public function exportCegid($objectLines) {
    +	public function exportCegid($objectLines)
    +	{
     		foreach ( $objectLines as $line ) {
     			$date = dol_print_date($line->doc_date, '%d%m%Y');
     			$separator = ";";
    @@ -284,7 +296,8 @@ class AccountancyExport
     	 *
     	 * @return void
     	 */
    -	public function exportCogilog($objectLines) {
    +	public function exportCogilog($objectLines)
    +	{
     		foreach ( $objectLines as $line ) {
     			$date = dol_print_date($line->doc_date, '%d%m%Y');
     			$separator = ";";
    @@ -317,7 +330,8 @@ class AccountancyExport
     	 *
     	 * @return void
     	 */
    -	public function exportCoala($objectLines) {
    +	public function exportCoala($objectLines)
    +	{
     		// Coala export
     		$separator = ";";
     		$end_line = "\n";
    @@ -344,7 +358,8 @@ class AccountancyExport
     	 *
     	 * @return void
     	 */
    -	public function exportBob50($objectLines) {
    +	public function exportBob50($objectLines)
    +	{
     
     		// Bob50
     		$separator = ";";
    @@ -382,7 +397,8 @@ class AccountancyExport
     	 *
     	 * @return void
     	 */
    -	public function exportCiel(&$TData) {
    +	public function exportCiel(&$TData)
    +	{
     		global $conf;
     
     		$end_line ="\r\n";
    @@ -422,12 +438,13 @@ class AccountancyExport
     	 *
     	 * @return void
     	 */
    -	public function exportQuadratus(&$TData) {
    +	public function exportQuadratus(&$TData)
    +	{
     		global $conf;
     
     		$end_line ="\r\n";
     
    -        //We should use dol_now function not time however this is wrong date to transfert in accounting
    +		//We should use dol_now function not time however this is wrong date to transfert in accounting
     		//$date_ecriture = dol_print_date(dol_now(), $conf->global->ACCOUNTING_EXPORT_DATE); // format must be ddmmyy
     		//$date_ecriture = dol_print_date(time(), $conf->global->ACCOUNTING_EXPORT_DATE); // format must be ddmmyy
     		foreach ( $TData as $data ) {
    @@ -441,8 +458,8 @@ class AccountancyExport
     			$Tab['code_journal'] = str_pad(self::trunc($data->code_journal, 2), 2);
     			$Tab['folio'] = '000';
     
    -            //We use invoice date $data->doc_date not $date_ecriture which is the transfert date
    -            //maybe we should set an option for customer who prefer to keep in accounting software the tranfert date instead of invoice date ?
    +			//We use invoice date $data->doc_date not $date_ecriture which is the transfert date
    +			//maybe we should set an option for customer who prefer to keep in accounting software the tranfert date instead of invoice date ?
     			//$Tab['date_ecriture'] = $date_ecriture;
     			$Tab['date_ecriture'] = dol_print_date($data->doc_date, '%d%m%y');
     			$Tab['filler'] = ' ';
    @@ -450,25 +467,25 @@ class AccountancyExport
     			$Tab['sens'] = $data->sens; // C or D
     			$Tab['signe_montant'] = '+';
     
    -            //elarifr le montant doit etre en centimes sans point decimal !
    +			//elarifr le montant doit etre en centimes sans point decimal !
     			$Tab['montant'] = str_pad(abs($data->montant*100), 12, '0', STR_PAD_LEFT); // TODO manage negative amount
    -		    // $Tab['montant'] = str_pad(abs($data->montant), 12, '0', STR_PAD_LEFT); // TODO manage negative amount
    +			// $Tab['montant'] = str_pad(abs($data->montant), 12, '0', STR_PAD_LEFT); // TODO manage negative amount
     			$Tab['contrepartie'] = str_repeat(' ', 8);
     
    -            // elarifr:  date format must be fixed format : 6 char ddmmyy = %d%m%yand not defined by user / dolibarr setting
    +			// elarifr:  date format must be fixed format : 6 char ddmmyy = %d%m%yand not defined by user / dolibarr setting
     			if (! empty($data->date_echeance))
     				//$Tab['date_echeance'] = dol_print_date($data->date_echeance, $conf->global->ACCOUNTING_EXPORT_DATE);
    -				$Tab['date_echeance'] = dol_print_date($data->date_echeance,  '%d%m%y' );     // elarifr:  format must be ddmmyy
    +				$Tab['date_echeance'] = dol_print_date($data->date_echeance,  '%d%m%y' );	 // elarifr:  format must be ddmmyy
     			else
     				$Tab['date_echeance'] = '000000';
     
    -            //elarifr please keep quadra named field lettrage(2) + codestat(3) instead of fake lettrage(5)
    +			//elarifr please keep quadra named field lettrage(2) + codestat(3) instead of fake lettrage(5)
     			//$Tab['lettrage'] = str_repeat(' ', 5);
     			$Tab['lettrage'] = str_repeat(' ', 2);
     			$Tab['codestat'] = str_repeat(' ', 3);
     			$Tab['num_piece'] = str_pad(self::trunc($data->piece_num, 5), 5);
     
    -            //elarifr keep correct quadra named field instead of anon filler
    +			//elarifr keep correct quadra named field instead of anon filler
     			//$Tab['filler2'] = str_repeat(' ', 20);
     			$Tab['affaire'] = str_repeat(' ', 10);
     			$Tab['quantity1'] = str_repeat(' ', 10);
    @@ -477,16 +494,16 @@ class AccountancyExport
     			$Tab['code_journal2'] = str_pad(self::trunc($data->code_journal, 3), 3);
     			$Tab['filler3'] = str_repeat(' ', 3);
     
    -            //elarifr keep correct quadra named field instead of anon filler libelle_ecriture2 is 30 char not 32 !!!!
    -            //as we use utf8, we must remove accent to have only one ascii char instead of utf8 2 chars for specials that report wrong line size that will exceed import format spec
    -            //todo we should filter more than only accent to avoid wrong line size
    -            //TODO: remove invoice number doc_ref in libelle,
    -            //TODO: we should offer an option for customer to build the libelle using invoice number / name / date in accounting software
    +			//elarifr keep correct quadra named field instead of anon filler libelle_ecriture2 is 30 char not 32 !!!!
    +			//as we use utf8, we must remove accent to have only one ascii char instead of utf8 2 chars for specials that report wrong line size that will exceed import format spec
    +			//todo we should filter more than only accent to avoid wrong line size
    +			//TODO: remove invoice number doc_ref in libelle,
    +			//TODO: we should offer an option for customer to build the libelle using invoice number / name / date in accounting software
     			//$Tab['libelle_ecriture2'] = str_pad(self::trunc(dol_string_unaccent($data->doc_ref) . ' ' . dol_string_unaccent($data->label_operation), 30), 30);
     			$Tab['libelle_ecriture2'] = str_pad(self::trunc(dol_string_unaccent($data->label_operation), 30), 30);
     			$Tab['codetva'] = str_repeat(' ', 2);
     
    -            //elarifr we need to keep the 10 lastest number of invoice doc_ref not the beginning part that is the unusefull almost same part
    +			//elarifr we need to keep the 10 lastest number of invoice doc_ref not the beginning part that is the unusefull almost same part
     			//$Tab['num_piece3'] = str_pad(self::trunc($data->piece_num, 10), 10);
     			$Tab['num_piece3'] = substr(self::trunc($data->doc_ref, 20), -10);
     			$Tab['filler4'] = str_repeat(' ', 73);
    @@ -505,7 +522,8 @@ class AccountancyExport
     	 *
     	 * @return void
     	 */
    -	public function exportEbp($objectLines) {
    +	public function exportEbp($objectLines)
    +	{
     
     		$separator = ',';
     		$end_line = "\n";
    @@ -537,7 +555,8 @@ class AccountancyExport
     	 *
     	 * @return void
     	 */
    -	public function exportAgiris($objectLines) {
    +	public function exportAgiris($objectLines)
    +	{
     
     		$separator = ';';
     		$end_line = "\n";
    @@ -574,7 +593,8 @@ class AccountancyExport
     	 *
     	 * @return void
     	 */
    -	public function exportConfigurable($objectLines) {
    +	public function exportConfigurable($objectLines)
    +	{
     		global $conf;
     
     		foreach ($objectLines as $line) {
    @@ -585,25 +605,121 @@ class AccountancyExport
     			$tab[] = $date;
     			$tab[] = $line->doc_ref;
     			$tab[] = $line->label_operation;
    -			$tab[] =  length_accountg($line->numero_compte);
    -			$tab[] =  length_accounta($line->subledger_account);
    -			$tab[] =  price($line->debit);
    -			$tab[] =  price($line->credit);
    -			$tab[] =  price($line->montant);
    -			$tab[] =  $line->code_journal;
    +			$tab[] = length_accountg($line->numero_compte);
    +			$tab[] = length_accounta($line->subledger_account);
    +			$tab[] = price($line->debit);
    +			$tab[] = price($line->credit);
    +			$tab[] = price($line->montant);
    +			$tab[] = $line->code_journal;
     
     			$separator = $this->separator;
     			print implode($separator, $tab) . $this->end_line;
     		}
     	}
     
    +	/**
    +	 * Export format : FEC
    +	 *
    +	 * @param array $objectLines data
    +	 *
    +	 * @return void
    +	 */
    +	public function exportFEC($objectLines)
    +	{
    +		$separator = "\t";
    +		$end_line = "\n";
    +
    +		print "JournalCode" . $separator;
    +		print "JournalLib" . $separator;
    +		print "EcritureNum" . $separator;
    +		print "EcritureDate" . $separator;
    +		print "CompteNum" . $separator;
    +		print "CompteLib" . $separator;
    +		print "CompAuxNum" . $separator;
    +		print "CompAuxLib" . $separator;
    +		print "PieceRef" . $separator;
    +		print "PieceDate" . $separator;
    +		print "EcritureLib" . $separator;
    +		print "Debit" . $separator;
    +		print "Credit" . $separator;
    +		print "EcritureLet" . $separator;
    +		print "DateLet" . $separator;
    +		print "ValidDate" . $separator;
    +		print "Montantdevise" . $separator;
    +		print "Idevise";
    +		print $end_line;
    +
    +		foreach ( $objectLines as $line ) {
    +			$date_creation = dol_print_date($line->date_creation, '%d%m%Y');
    +			$date_doc = dol_print_date($line->doc_date, '%d%m%Y');
    +			$date_valid = dol_print_date($line->date_validated, '%d%m%Y');
    +
    +			// FEC:JournalCode
    +			print $line->code_journal . $separator;
    +
    +			// FEC:JournalLib
    +			print $line->journal_label . $separator;
    +
    +			// FEC:EcritureNum
    +			print $line->piece_num . $separator;
    +
    +			// FEC:EcritureDate
    +			print $date_creation . $separator;
    +
    +			// FEC:CompteNum
    +			print $line->numero_compte . $separator;
    +
    +			// FEC:CompteLib
    +			print $line->label_compte . $separator;
    +
    +			// FEC:CompAuxNum
    +			print $line->subledger_account . $separator;
    +
    +			// FEC:CompAuxLib
    +			print $line->subledger_label . $separator;
    +
    +			// FEC:PieceRef
    +			print $line->doc_ref . $separator;
    +
    +			// FEC:PieceDate
    +			print $date_doc . $separator;
    +
    +			// FEC:EcritureLib
    +			print $line->label_operation . $separator;
    +
    +			// FEC:Debit
    +			print price2num($line->debit) . $separator;
    +
    +			// FEC:Credit
    +			print price2num($line->credit) . $separator;
    +
    +			// FEC:EcritureLet
    +			print $line->lettering_code . $separator;
    +
    +			// FEC:DateLet
    +			print $line->date_lettering . $separator;
    +
    +			// FEC:ValidDate
    +			print $date_valid . $separator;
    +
    +			// FEC:Montantdevise
    +			print $line->multicurrency_amount . $separator;
    +
    +			// FEC:Idevise
    +			print $line->multicurrency_code;
    +
    +			print $end_line;
    +		}
    +	}
     
     	/**
     	 *
    -	 * @param unknown $str data
    -	 * @param integer $size data
    +	 * @param string	$str 	data
    +	 * @param integer 	$size 	data
    +	 * @return string
     	 */
    -	public static function trunc($str, $size) {
    +	public static function trunc($str, $size)
    +	{
     		return dol_trunc($str, $size, 'right', 'UTF-8', 1);
     	}
     }
    diff --git a/htdocs/accountancy/class/accountancysystem.class.php b/htdocs/accountancy/class/accountancysystem.class.php
    index f14a3e7f761..b70fa7238bb 100644
    --- a/htdocs/accountancy/class/accountancysystem.class.php
    +++ b/htdocs/accountancy/class/accountancysystem.class.php
    @@ -28,22 +28,44 @@
      */
     class AccountancySystem
     {
    -	var $db;
    -	var $error;
    -	var $rowid;
    -	var $fk_pcg_version;
    -	var $pcg_type;
    -	var $pcg_subtype;
    -	var $label;
    -	var $account_number;
    -	var $account_parent;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $rowid;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_pcg_version;
    +
    +	public $pcg_type;
    +	public $pcg_subtype;
    +
    +    /**
    +     * @var string Accountancy System label
    +     */
    +    public $label;
    +
    +	public $account_number;
    +	public $account_parent;
     
     	/**
     	 * Constructor
     	 *
     	 * @param DoliDB $db handler
     	 */
    -	function __construct($db) {
    +    function __construct($db)
    +    {
     		$this->db = $db;
     	}
     
    @@ -102,7 +124,8 @@ class AccountancySystem
     	 * @param User $user making insert
     	 * @return int if KO, Id of line if OK
     	 */
    -	function create($user) {
    +    function create($user)
    +    {
     		$now = dol_now();
     
     		$sql = "INSERT INTO " . MAIN_DB_PREFIX . "accounting_system";
    @@ -130,4 +153,4 @@ class AccountancySystem
     
     		return $result;
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/accountancy/class/accountingaccount.class.php b/htdocs/accountancy/class/accountingaccount.class.php
    index 257c2af0111..85f9ee39c61 100644
    --- a/htdocs/accountancy/class/accountingaccount.class.php
    +++ b/htdocs/accountancy/class/accountingaccount.class.php
    @@ -4,6 +4,7 @@
      * Copyright (C) 2013-2014  Florian Henry        <florian.henry@open-concept.pro>
      * Copyright (C) 2014       Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2015       Ari Elbaz (elarifr)  <github@accedinfo.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,8 +31,19 @@
      */
     class AccountingAccount extends CommonObject
     {
    +	/**
    +	 * @var string Name of element
    +	 */
     	public $element='accounting_account';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='accounting_account';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'billr';
     
     	/**
    @@ -39,37 +51,95 @@ class AccountingAccount extends CommonObject
     	 * @var int
     	 */
     	public $ismultientitymanaged = 1;
    +
     	/**
     	 * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
     	 * @var integer
     	 */
     	public $restrictiononfksoc = 1;
     
    -	var $db;
    -	var $error;
    -	var $errors;
    -	var $id;
    -	var $rowid;
    -	var $datec; // Creation date
    -	var $fk_pcg_version;
    -	var $pcg_type;
    -	var $pcg_subtype;
    -	var $account_number;
    -	var $account_parent;
    -	var $account_category;
    -	var $label;
    -	var $fk_user_author;
    -	var $fk_user_modif;
    -	var $active;       // duplicate with status
    -	var $status;
    +	/**
    +	 * @var DoliDB Database handler.
    +	 */
    +	public $db;
     
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $rowid;
    +
    +	/**
    +     * @var string Creation date
    +     */
    +	public $datec;
    +
    +	/**
    +     * @var string pcg version
    +     */
    +	public $fk_pcg_version;
    +
    +    /**
    +     * @var string pcg type
    +     */
    +	public $pcg_type;
    +
    +    /**
    +     * @var string pcg subtype
    +     */
    +	public $pcg_subtype;
    +
    +    /**
    +     * @var string account number
    +     */
    +	public $account_number;
    +
    +    /**
    +     * @var int ID parent account
    +     */
    +	public $account_parent;
    +
    +    /**
    +     * @var int ID category account
    +     */
    +	public $account_category;
    +
    +	/**
    +	 * @var int Status
    +	 */
    +	public $status;
    +
    +    /**
    +     * @var string Label of account
    +     */
    +    public $label;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_user_author;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_user_modif;
    +
    +	/**
    +	 * @var int active (duplicate with status)
    +	 */
    +    public $active;
     
     	/**
     	 * Constructor
     	 *
     	 * @param DoliDB $db Database handle
     	 */
    -	function __construct($db) {
    +    function __construct($db)
    +    {
     		global $conf;
     
     		$this->db = $db;
    @@ -146,7 +216,8 @@ class AccountingAccount extends CommonObject
     	 * @param int $notrigger Disable triggers
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	function create($user, $notrigger = 0) {
    +    function create($user, $notrigger = 0)
    +    {
     		global $conf;
     		$error = 0;
     		$now = dol_now();
    @@ -297,7 +368,8 @@ class AccountingAccount extends CommonObject
     	 *
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	function checkUsage() {
    +    function checkUsage()
    +    {
     		global $langs;
     
     		$sql = "(SELECT fk_code_ventilation FROM " . MAIN_DB_PREFIX . "facturedet";
    @@ -330,7 +402,8 @@ class AccountingAccount extends CommonObject
     	 * @param int $notrigger 0=triggers after, 1=disable triggers
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	function delete($user, $notrigger = 0) {
    +    function delete($user, $notrigger = 0)
    +    {
     		$error = 0;
     
     		$result = $this->checkUsage();
    @@ -391,7 +464,7 @@ class AccountingAccount extends CommonObject
     	 * @param	string  $moretitle					Add more text to title tooltip
     	 * @param	int  	$notooltip					1=Disable tooltip
          * @param	int     $save_lastsearch_value		-1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    -	 * @return	string	String with URL
    +	 * @return  string	String with URL
     	 */
     	function getNomUrl($withpicto = 0, $withlabel = 0, $nourl = 0, $moretitle='',$notooltip=0, $save_lastsearch_value=-1)
     	{
    @@ -457,7 +530,8 @@ class AccountingAccount extends CommonObject
     	 * @param int $id of record
     	 * @return void
     	 */
    -	function info($id) {
    +    function info($id)
    +    {
     		$sql = 'SELECT a.rowid, a.datec, a.fk_user_author, a.fk_user_modif, a.tms';
     		$sql .= ' FROM ' . MAIN_DB_PREFIX . 'accounting_account as a';
     		$sql .= ' WHERE a.rowid = ' . $id;
    @@ -488,13 +562,16 @@ class AccountingAccount extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Account deactivated
     	 *
     	 * @param  int  $id         Id
     	 * @return int              <0 if KO, >0 if OK
     	 */
    -	function account_desactivate($id) {
    +    function account_desactivate($id)
    +    {
    +        // phpcs:enable
     		$result = $this->checkUsage();
     
     		if ($result > 0) {
    @@ -520,13 +597,16 @@ class AccountingAccount extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Account activated
     	 *
     	 * @param  int  $id         Id
     	 * @return int              <0 if KO, >0 if OK
     	 */
    -	function account_activate($id) {
    +    function account_activate($id)
    +    {
    +        // phpcs:enable
     		$this->db->begin();
     
     		$sql = "UPDATE " . MAIN_DB_PREFIX . "accounting_account ";
    @@ -557,6 +637,7 @@ class AccountingAccount extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -566,6 +647,7 @@ class AccountingAccount extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->loadLangs(array("users"));
     
    @@ -575,27 +657,27 @@ class AccountingAccount extends CommonObject
     			if ($statut == 1) return $langs->trans('Enabled');
     			if ($statut == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($statut == 1) return $langs->trans('Enabled');
     			if ($statut == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut == 1) return img_picto($langs->trans('Enabled'),'statut4');
     			if ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
     			if ($statut == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    diff --git a/htdocs/accountancy/class/accountingjournal.class.php b/htdocs/accountancy/class/accountingjournal.class.php
    index 454de6d7b84..9bd21a4a5c4 100644
    --- a/htdocs/accountancy/class/accountingjournal.class.php
    +++ b/htdocs/accountancy/class/accountingjournal.class.php
    @@ -26,16 +26,44 @@
      */
     class AccountingJournal extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='accounting_journal';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='accounting_journal';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element = '';
    -	public $ismultientitymanaged = 0;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 0;
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'generic';
     
    -	var $rowid;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $rowid;
     
     	public $code;
    -	public $label;
    +
    +	/**
    +     * @var string Accounting Journal label
    +     */
    +    public $label;
    +
     	public $nature;		// 1:various operations, 2:sale, 3:purchase, 4:bank, 5:expense-report, 8:inventory, 9: has-new
     	public $active;
     
    @@ -46,7 +74,8 @@ class AccountingJournal extends CommonObject
     	 *
     	 * @param DoliDB $db Database handle
     	 */
    -	function __construct($db) {
    +    function __construct($db)
    +    {
     		$this->db = $db;
     	}
     
    @@ -117,7 +146,8 @@ class AccountingJournal extends CommonObject
     	 *
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') {
    +    function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND')
    +    {
     		$sql = "SELECT rowid, code, label, nature, active";
     		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t';
     		// Manage filter
    @@ -245,6 +275,7 @@ class AccountingJournal extends CommonObject
     		return $this->LibType($this->nature,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return type of an accounting journal
     	 *
    @@ -254,6 +285,7 @@ class AccountingJournal extends CommonObject
     	 */
     	function LibType($nature,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$langs->loadLangs(array("accountancy"));
    diff --git a/htdocs/accountancy/class/bookkeeping.class.php b/htdocs/accountancy/class/bookkeeping.class.php
    index e751cf1899f..6074a49f537 100644
    --- a/htdocs/accountancy/class/bookkeeping.class.php
    +++ b/htdocs/accountancy/class/bookkeeping.class.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2014-2017 Olivier Geffroy		<jeff@jeffinfo.com>
    - * Copyright (C) 2015-2017 Alexandre Spangaro	<aspangaro@zendsi.com>
    - * Copyright (C) 2015-2017 Florian Henry		<florian.henry@open-concept.pro>
    +/* Copyright (C) 2014-2017  Olivier Geffroy     <jeff@jeffinfo.com>
    + * Copyright (C) 2015-2017  Alexandre Spangaro  <aspangaro@zendsi.com>
    + * Copyright (C) 2015-2017  Florian Henry       <florian.henry@open-concept.pro>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -18,9 +19,9 @@
      */
     
     /**
    - *	\file		htdocs/accountancy/class/bookkeeping.class.php
    - *	\ingroup	Advanced accountancy
    - *	\brief		File of class to manage Ledger (General Ledger and Subledger)
    + * \file        htdocs/accountancy/class/bookkeeping.class.php
    + * \ingroup     Advanced accountancy
    + * \brief       File of class to manage Ledger (General Ledger and Subledger)
      */
     
     // Class
    @@ -35,19 +36,25 @@ class BookKeeping extends CommonObject
     	 * @var string Error code (or message)
     	 */
     	public $error;
    +
     	/**
     	 * @var string[] Error codes (or messages)
     	 */
    -	public $errors = array ();
    +	public $errors = array();
    +
     	/**
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'accountingbookkeeping';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'accounting_bookkeeping';
     
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
     
     	/**
    @@ -59,25 +66,69 @@ class BookKeeping extends CommonObject
     	 * @var int ID
     	 */
     	public $id;
    -	/**
    -	 */
    +
     	public $doc_date;
     	public $date_lim_reglement;
    -	public $doc_type;
    +
    +    /**
    +     * @var string doc_type
    +     */
    +    public $doc_type;
    +
    +    /**
    +     * @var string doc_ref
    +     */
     	public $doc_ref;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_doc;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_docdet;
    -	public $thirdparty_code;
    +
    +    /**
    +     * @var string thirdparty code
    +     */
    +    public $thirdparty_code;
    +
    +    /**
    +     * @var string subledger account
    +     */
     	public $subledger_account;
    +
    +    /**
    +     * @var string subledger label
    +     */
     	public $subledger_label;
    +
    +    /**
    +     * @var string  doc_type
    +     */
     	public $numero_compte;
    -	public $label_compte;
    -	public $label_operation;
    +
    +    /**
    +     * @var string label compte
    +     */
    +    public $label_compte;
    +
    +    /**
    +     * @var string label operation
    +     */
    +    public $label_operation;
     	public $debit;
     	public $credit;
     	public $montant;
     	public $sens;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_author;
    +
     	public $import_key;
     	public $code_journal;
     	public $journal_label;
    @@ -88,7 +139,8 @@ class BookKeeping extends CommonObject
     	 *
     	 * @param DoliDb $db Database handler
     	 */
    -	public function __construct(DoliDB $db) {
    +    public function __construct(DoliDB $db)
    +    {
     		$this->db = $db;
     	}
     
    @@ -99,7 +151,8 @@ class BookKeeping extends CommonObject
     	 * @param  bool	$notrigger	false=launch triggers after, true=disable triggers
     	 * @return int				<0 if KO, Id of created object if OK
     	 */
    -	public function create(User $user, $notrigger = false) {
    +    public function create(User $user, $notrigger = false)
    +    {
     		global $conf, $langs;
     
     		dol_syslog(__METHOD__, LOG_DEBUG);
    @@ -328,18 +381,15 @@ class BookKeeping extends CommonObject
     			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
     		}
     
    -		if (! $error) {
    +		// Uncomment this and change MYOBJECT to your own tag if you
    +		// want this action to call a trigger.
    +		//if (! $error && ! $notrigger) {
     
    -			if (! $notrigger) {
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action to call a trigger.
    -
    -				// // Call triggers
    -				// $result=$this->call_trigger('MYOBJECT_CREATE',$user);
    -				// if ($result < 0) $error++;
    -				// // End call triggers
    -			}
    -		}
    +		// // Call triggers
    +		// $result=$this->call_trigger('MYOBJECT_CREATE',$user);
    +		// if ($result < 0) $error++;
    +		// // End call triggers
    +		//}
     
     		// Commit or rollback
     		if ($error) {
    @@ -420,7 +470,8 @@ class BookKeeping extends CommonObject
     	 * @param  string  $mode 	   Mode
     	 * @return int				 <0 if KO, Id of created object if OK
     	 */
    -	public function createStd(User $user, $notrigger = false, $mode='') {
    +    public function createStd(User $user, $notrigger = false, $mode='')
    +    {
     		global $conf;
     
     		dol_syslog(__METHOD__, LOG_DEBUG);
    @@ -558,15 +609,15 @@ class BookKeeping extends CommonObject
     		if (! $error) {
     			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element . $mode);
     
    -			if (! $notrigger) {
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action to call a trigger.
    +			// Uncomment this and change MYOBJECT to your own tag if you
    +			// want this action to call a trigger.
    +			//if (! $notrigger) {
     
    -				// // Call triggers
    -				// $result=$this->call_trigger('MYOBJECT_CREATE',$user);
    -				// if ($result < 0) $error++;
    -				// // End call triggers
    -			}
    +			// // Call triggers
    +			// $result=$this->call_trigger('MYOBJECT_CREATE',$user);
    +			// if ($result < 0) $error++;
    +			// // End call triggers
    +			//}
     		}
     
     		// Commit or rollback
    @@ -590,7 +641,8 @@ class BookKeeping extends CommonObject
     	 *
     	 * @return int <0 if KO, 0 if not found, >0 if OK
     	 */
    -	public function fetch($id, $ref = null, $mode='') {
    +    public function fetch($id, $ref = null, $mode='')
    +    {
     		global $conf;
     
     		dol_syslog(__METHOD__, LOG_DEBUG);
    @@ -687,7 +739,8 @@ class BookKeeping extends CommonObject
     	 *
     	 * @return int <0 if KO, >=0 if OK
     	 */
    -	public function fetchAllByAccount($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') {
    +    public function fetchAllByAccount($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND')
    +    {
     		global $conf;
     
     		dol_syslog(__METHOD__, LOG_DEBUG);
    @@ -711,6 +764,10 @@ class BookKeeping extends CommonObject
     		$sql .= " t.credit,";
     		$sql .= " t.montant,";
     		$sql .= " t.sens,";
    +		$sql .= " t.multicurrency_amount,";
    +		$sql .= " t.multicurrency_code,";
    +		$sql .= " t.lettering_code,";
    +		$sql .= " t.date_lettering,";
     		$sql .= " t.fk_user_author,";
     		$sql .= " t.import_key,";
     		$sql .= " t.code_journal,";
    @@ -759,7 +816,8 @@ class BookKeeping extends CommonObject
     		if ($resql) {
     			$num = $this->db->num_rows($resql);
     
    -			while ( $obj = $this->db->fetch_object($resql) ) {
    +			$i = 0;
    +			while ($obj = $this->db->fetch_object($resql) && (empty($limit) || $i < min($limit, $num))) {
     				$line = new BookKeepingLine();
     
     				$line->id = $obj->rowid;
    @@ -779,6 +837,10 @@ class BookKeeping extends CommonObject
     				$line->credit = $obj->credit;
     				$line->montant = $obj->montant;
     				$line->sens = $obj->sens;
    +				$line->multicurrency_amount = $obj->multicurrency_amount;
    +				$line->multicurrency_code = $obj->multicurrency_code;
    +				$line->lettering_code = $obj->lettering_code;
    +				$line->date_lettering = $obj->date_lettering;
     				$line->fk_user_author = $obj->fk_user_author;
     				$line->import_key = $obj->import_key;
     				$line->code_journal = $obj->code_journal;
    @@ -787,6 +849,8 @@ class BookKeeping extends CommonObject
     				$line->date_creation = $obj->date_creation;
     
     				$this->lines[] = $line;
    +
    +				$i++;
     			}
     			$this->db->free($resql);
     
    @@ -811,7 +875,8 @@ class BookKeeping extends CommonObject
     	 *
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND') {
    +    public function fetchAll($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, array $filter = array(), $filtermode = 'AND')
    +    {
     		global $conf;
     
     		dol_syslog(__METHOD__, LOG_DEBUG);
    @@ -831,6 +896,7 @@ class BookKeeping extends CommonObject
     		$sql .= " t.label_operation,";
     		$sql .= " t.debit,";
     		$sql .= " t.credit,";
    +		$sql .= " t.lettering_code,";
     		$sql .= " t.montant,";
     		$sql .= " t.sens,";
     		$sql .= " t.fk_user_author,";
    @@ -883,7 +949,8 @@ class BookKeeping extends CommonObject
     		if ($resql) {
     			$num = $this->db->num_rows($resql);
     
    -			while ( $obj = $this->db->fetch_object($resql) ) {
    +			$i = 0;
    +			while ($obj = $this->db->fetch_object($resql) && (empty($limit) || $i < min($limit, $num))) {
     				$line = new BookKeepingLine();
     
     				$line->id = $obj->rowid;
    @@ -903,6 +970,7 @@ class BookKeeping extends CommonObject
     				$line->credit = $obj->credit;
     				$line->montant = $obj->montant;
     				$line->sens = $obj->sens;
    +				$line->lettering_code = $obj->lettering_code;
     				$line->fk_user_author = $obj->fk_user_author;
     				$line->import_key = $obj->import_key;
     				$line->code_journal = $obj->code_journal;
    @@ -912,6 +980,8 @@ class BookKeeping extends CommonObject
     				$line->date_modification = $this->db->jdate($obj->date_modification);
     
     				$this->lines[] = $line;
    +
    +				$i++;
     			}
     			$this->db->free($resql);
     
    @@ -970,8 +1040,7 @@ class BookKeeping extends CommonObject
     				}
     			}
     		}
    -		$sql.= ' WHERE 1 = 1';
    -		$sql .= " AND entity IN (" . getEntity('accountancy') . ")";
    +		$sql.= ' WHERE entity IN (' . getEntity('accountancy') . ')';
     		if (count($sqlwhere) > 0) {
     			$sql .= ' AND ' . implode(' ' . $filtermode . ' ', $sqlwhere);
     		}
    @@ -991,7 +1060,7 @@ class BookKeeping extends CommonObject
     			$num = $this->db->num_rows($resql);
     
     			$i = 0;
    -			while (($obj = $this->db->fetch_object($resql)) && ($i < min($limit, $num)))
    +			while (($obj = $this->db->fetch_object($resql)) && (empty($limit) || $i < min($limit, $num)))
     			{
     				$line = new BookKeepingLine();
     
    @@ -1021,7 +1090,8 @@ class BookKeeping extends CommonObject
     	 * @param  string  $mode       Mode
     	 * @return int                 <0 if KO, >0 if OK
     	 */
    -	public function update(User $user, $notrigger = false, $mode='') {
    +    public function update(User $user, $notrigger = false, $mode='')
    +    {
     		$error = 0;
     
     		dol_syslog(__METHOD__, LOG_DEBUG);
    @@ -1124,15 +1194,15 @@ class BookKeeping extends CommonObject
     			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
     		}
     
    -		if (! $error && ! $notrigger) {
    -			// Uncomment this and change MYOBJECT to your own tag if you
    -			// want this action calls a trigger.
    +		// Uncomment this and change MYOBJECT to your own tag if you
    +		// want this action calls a trigger.
    +		//if (! $error && ! $notrigger) {
     
    -			// // Call triggers
    -			// $result=$this->call_trigger('MYOBJECT_MODIFY',$user);
    -			// if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    -			// // End call triggers
    -		}
    +		// // Call triggers
    +		// $result=$this->call_trigger('MYOBJECT_MODIFY',$user);
    +		// if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    +		// // End call triggers
    +		//}
     
     		// Commit or rollback
     		if ($error) {
    @@ -1190,24 +1260,23 @@ class BookKeeping extends CommonObject
     	 * @param string $mode Mode
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	public function delete(User $user, $notrigger = false, $mode='') {
    +    public function delete(User $user, $notrigger = false, $mode='')
    +    {
     		dol_syslog(__METHOD__, LOG_DEBUG);
     
     		$error = 0;
     
     		$this->db->begin();
     
    -		if (! $error) {
    -			if (! $notrigger) {
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action calls a trigger.
    +		// Uncomment this and change MYOBJECT to your own tag if you
    +		// want this action calls a trigger.
    +		//if (! $error && ! $notrigger) {
     
    -				// // Call triggers
    -				// $result=$this->call_trigger('MYOBJECT_DELETE',$user);
    -				// if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    -				// // End call triggers
    -			}
    -		}
    +		// // Call triggers
    +		// $result=$this->call_trigger('MYOBJECT_DELETE',$user);
    +		// if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    +		// // End call triggers
    +		//}
     
     		if (! $error) {
     			$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element.$mode;
    @@ -1239,7 +1308,8 @@ class BookKeeping extends CommonObject
     	 * @param  string		$importkey		Import key
     	 * @return int Result
     	 */
    -	function deleteByImportkey($importkey) {
    +    function deleteByImportkey($importkey)
    +    {
     		$this->db->begin();
     
     		// first check if line not yet in bookkeeping
    @@ -1268,7 +1338,8 @@ class BookKeeping extends CommonObject
     	 * @param  string $mode 		Mode
     	 * @return int					<0 if KO, >0 if OK
     	 */
    -	function deleteByYearAndJournal($delyear='', $journal='', $mode='') {
    +    function deleteByYearAndJournal($delyear='', $journal='', $mode='')
    +    {
     		global $conf;
     
     		if (empty($delyear) && empty($journal))
    @@ -1307,7 +1378,8 @@ class BookKeeping extends CommonObject
     	 * @param 	int 	$piecenum 	Piecenum to delete
     	 * @return 	int 				Result
     	 */
    -	function deleteMvtNum($piecenum) {
    +    function deleteMvtNum($piecenum)
    +    {
     		global $conf;
     
     		$this->db->begin();
    @@ -1341,7 +1413,8 @@ class BookKeeping extends CommonObject
     	 *
     	 * @return int New id of clone
     	 */
    -	public function createFromClone($fromid) {
    +    public function createFromClone($fromid)
    +    {
     		dol_syslog(__METHOD__, LOG_DEBUG);
     
     		global $user;
    @@ -1386,7 +1459,8 @@ class BookKeeping extends CommonObject
     	 *
     	 * @return void
     	 */
    -	public function initAsSpecimen() {
    +    public function initAsSpecimen()
    +    {
     		global $user;
     
     		$now=dol_now();
    @@ -1422,7 +1496,8 @@ class BookKeeping extends CommonObject
     	 * @param string $mode Mode
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	public function fetchPerMvt($piecenum, $mode='') {
    +    public function fetchPerMvt($piecenum, $mode='')
    +    {
     		global $conf;
     
     		$sql = "SELECT piece_num,doc_date,code_journal,journal_label,doc_ref,doc_type,date_creation";
    @@ -1486,7 +1561,8 @@ class BookKeeping extends CommonObject
     	 * @param  string  $mode       Mode
     	 * @return int                 <0 if KO, >0 if OK
     	 */
    -	function fetchAllPerMvt($piecenum, $mode='') {
    +    function fetchAllPerMvt($piecenum, $mode='')
    +    {
     		global $conf;
     
     		$sql = "SELECT rowid, doc_date, doc_type,";
    @@ -1538,13 +1614,16 @@ class BookKeeping extends CommonObject
     		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Export bookkeping
     	 *
     	 * @param	string	$model	Model
     	 * @return	int				Result
     	 */
    -	function export_bookkeping($model = 'ebp') {
    +    function export_bookkeping($model = 'ebp')
    +    {
    +        // phpcs:enable
     		global $conf;
     
     		$sql = "SELECT rowid, doc_date, doc_type,";
    @@ -1600,9 +1679,9 @@ class BookKeeping extends CommonObject
     	/**
     	 * Transform transaction
     	 *
    -	 * @param  number   $direction     If 0 tmp => real, if 1 real => tmp
    -	 * @param  string   $piece_num     Piece num
    -	 * @return void
    +	 * @param  number   $direction      If 0 tmp => real, if 1 real => tmp
    +	 * @param  string   $piece_num      Piece num
    +	 * @return int                      int <0 if KO, >0 if OK
     	 */
     	public function transformTransaction($direction=0,$piece_num='')
     	{
    @@ -1638,8 +1717,7 @@ class BookKeeping extends CommonObject
     				$this->errors[] = 'Error ' . $this->db->lasterror();
     				dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
     			}
    -		}
    -		if ($direction==1) {
    +		} elseif ($direction==1) {
     			$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element.'_tmp WHERE piece_num = '.$piece_num;
     			$resql = $this->db->query($sql);
     			if (! $resql) {
    @@ -1689,19 +1767,22 @@ class BookKeeping extends CommonObject
     		*/
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	* Return list of accounts with label by chart of accounts
     	*
    -	* @param string		$selectid	Preselected chart of accounts
    -	* @param string		$htmlname	Name of field in html form
    +	* @param string     $selectid   Preselected chart of accounts
    +	* @param string     $htmlname	Name of field in html form
     	* @param int		$showempty	Add an empty field
     	* @param array		$event		Event options
     	* @param int		$select_in	Value is a aa.rowid (0 default) or aa.account_number (1)
     	* @param int		$select_out	Set value returned by select 0=rowid (default), 1=account_number
     	* @param int		$aabase		Set accounting_account base class to display empty=all or from 1 to 8 will display only account beginning by this number
     	* @return string	String with HTML select
    -	*/
    -	function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase = '') {
    +    */
    +    function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase = '')
    +    {
    +        // phpcs:enable
     		global $conf;
     
     		require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
    @@ -1758,6 +1839,7 @@ class BookKeeping extends CommonObject
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Description of a root accounting account
     	 *
    @@ -1766,6 +1848,7 @@ class BookKeeping extends CommonObject
     	 */
     	function get_compte_racine($account = null)
     	{
    +        // phpcs:enable
     		global $conf;
     		$pcgver = $conf->global->CHARTOFACCOUNTS;
     
    @@ -1789,7 +1872,6 @@ class BookKeeping extends CommonObject
     			}
     
     			return $obj->label;
    -
     		} else {
     			$this->error = "Error " . $this->db->lasterror();
     			dol_syslog(__METHOD__ . " " . $this->error, LOG_ERR);
    @@ -1798,6 +1880,7 @@ class BookKeeping extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Description of accounting account
     	 *
    @@ -1806,6 +1889,7 @@ class BookKeeping extends CommonObject
     	 */
     	function get_compte_desc($account = null)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$pcgver = $conf->global->CHARTOFACCOUNTS;
    @@ -1843,12 +1927,25 @@ class BookKeeping extends CommonObject
      */
     class BookKeepingLine
     {
    +	/**
    +	 * @var int ID
    +	 */
     	public $id;
    +
     	public $doc_date = '';
     	public $doc_type;
     	public $doc_ref;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_doc;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_docdet;
    +
     	public $thirdparty_code;
     	public $subledger_account;
     	public $subledger_label;
    @@ -1859,7 +1956,12 @@ class BookKeepingLine
     	public $credit;
     	public $montant;
     	public $sens;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_author;
    +
     	public $import_key;
     	public $code_journal;
     	public $journal_label;
    diff --git a/htdocs/accountancy/class/lettering.class.php b/htdocs/accountancy/class/lettering.class.php
    index a67fd457e11..3122526061b 100644
    --- a/htdocs/accountancy/class/lettering.class.php
    +++ b/htdocs/accountancy/class/lettering.class.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2013      Olivier Geffroy      <jeff@jeffinfo.com>
    - * Copyright (C) 2013      Alexandre Spangaro   <alexandre.spangaro@gmail.com>
    +/* Copyright (C) 2004-2005  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2013       Olivier Geffroy         <jeff@jeffinfo.com>
    + * Copyright (C) 2013-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -18,26 +19,27 @@
      */
     
     /**
    - * \file accountancy/class/bookkeeping.class.php
    - * \ingroup Advanced accountancy
    - * \brief 	File of class for lettering
    + * \file      	htdocs/accountancy/class/lettering.class.php
    + * \ingroup 	Advanced accountancy
    + * \brief 		File of class for lettering
      */
    +
     include_once DOL_DOCUMENT_ROOT . "/accountancy/class/bookkeeping.class.php";
     include_once DOL_DOCUMENT_ROOT . "/societe/class/societe.class.php";
     include_once DOL_DOCUMENT_ROOT . "/core/lib/date.lib.php";
     
     /**
    - * Class lettering
    + * Class Lettering
      */
    -class lettering extends BookKeeping
    +class Lettering extends BookKeeping
     {
     	/**
    -	 * lettrageTiers
    +	 * letteringThirdparty
     	 *
     	 * @param int $socid Thirdparty id
    -	 * @return void
    +	 * @return int 1 OK, <0 error
     	 */
    -	public function lettrageTiers($socid)
    +	public function letteringThirdparty($socid)
     	{
     		global $conf;
     
    @@ -47,6 +49,7 @@ class lettering extends BookKeeping
     		$object->id = $socid;
     		$object->fetch($socid);
     
    +
     		if ($object->code_compta == '411CUSTCODE') {
     			$object->code_compta = '';
     		}
    @@ -229,7 +232,7 @@ class lettering extends BookKeeping
     	 * @param boolean $notrigger no trigger
      	 * @return number
     	 */
    -	public function updateLettrage($ids = array(), $notrigger = false)
    +	public function updateLettering($ids = array(), $notrigger = false)
     	{
     		$error = 0;
     		$lettre = 'AAA';
    diff --git a/htdocs/accountancy/customer/card.php b/htdocs/accountancy/customer/card.php
    index 7e1387db951..677bc627c80 100644
    --- a/htdocs/accountancy/customer/card.php
    +++ b/htdocs/accountancy/customer/card.php
    @@ -159,5 +159,6 @@ if (! empty($id)) {
     	print "Error ID incorrect";
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/customer/index.php b/htdocs/accountancy/customer/index.php
    index 18e23826314..4f4932fe08f 100644
    --- a/htdocs/accountancy/customer/index.php
    +++ b/htdocs/accountancy/customer/index.php
    @@ -89,7 +89,7 @@ if ($action == 'clean' || $action == 'validatehistory')
     	if (! $resql1) {
     		$error ++;
     		$db->rollback();
    -		setEventMessage($db->lasterror(), 'errors');
    +		setEventMessages($db->lasterror(), null, 'errors');
     	} else {
     		$db->commit();
     	}
    @@ -153,7 +153,7 @@ $y = $year_current;
     $buttonbind = '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?year=' . $year_current . '&action=validatehistory">' . $langs->trans("ValidateHistory") . '</a>';
     
     print_barre_liste($langs->trans("OverviewOfAmountOfLinesNotBound"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1);
    -//print_fiche_titre($langs->trans("OverviewOfAmountOfLinesNotBound"), $buttonbind, '');
    +//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesNotBound"), $buttonbind, '');
     
     print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
    @@ -229,7 +229,7 @@ print '<br>';
     
     
     print_barre_liste($langs->trans("OverviewOfAmountOfLinesBound"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1);
    -//print_fiche_titre($langs->trans("OverviewOfAmountOfLinesBound"), '', '');
    +//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesBound"), '', '');
     
     print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
    @@ -309,7 +309,7 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange.
     	print '<br>';
     
     	print_barre_liste($langs->trans("OtherInfo"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1);
    -	//print_fiche_titre($langs->trans("OtherInfo"), '', '');
    +	//print load_fiche_titre($langs->trans("OtherInfo"), '', '');
     
     	print '<div class="div-table-responsive-no-min">';
     	print '<table class="noborder" width="100%">';
    @@ -415,6 +415,6 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange.
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/customer/lines.php b/htdocs/accountancy/customer/lines.php
    index cc0ced6b067..7d8599b683c 100644
    --- a/htdocs/accountancy/customer/lines.php
    +++ b/htdocs/accountancy/customer/lines.php
    @@ -17,7 +17,6 @@
      *
      * You should have received a copy of the GNU General Public License
      * along with this program. If not, see <http://www.gnu.org/licenses/>.
    - *
      */
     
     /**
    @@ -33,6 +32,7 @@ require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array("bills","compta","accountancy","productbatch"));
    @@ -135,7 +135,6 @@ if (is_array($changeaccount) && count($changeaccount) > 0) {
     
     		$account_parent = '';   // Protection to avoid to mass apply it a second time
     	}
    -
     }
     
     
    @@ -173,7 +172,8 @@ $sql.= " fd.rowid, fd.description, fd.product_type as line_type, fd.total_ht, fd
     $sql.= " s.rowid as socid, s.nom as name, s.code_compta, s.code_client,";
     $sql.= " p.rowid as product_id, p.fk_product_type as product_type, p.ref as product_ref, p.label as product_label, p.accountancy_code_sell, aa.rowid as fk_compte, aa.account_number, aa.label as label_compte,";
     $sql.= " fd.situation_percent,";
    -$sql.= " co.label as country, s.tva_intra";
    +$sql.= " co.code as country_code, co.label as country,";
    +$sql.= " s.tva_intra";
     $parameters=array();
     $reshook=$hookmanager->executeHooks('printFieldListSelect',$parameters);    // Note that $action and $object may have been modified by hook
     $sql.=$hookmanager->resPrint;
    @@ -229,7 +229,18 @@ else if ($search_year > 0)
     	$sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($search_year,1,false))."' AND '".$db->idate(dol_get_last_day($search_year,12,false))."'";
     }
     if (strlen(trim($search_country))) {
    -	$sql .= natural_search("co.label", $search_country);
    +	$arrayofcode = getCountriesInEEC();
    +	$country_code_in_EEC = $country_code_in_EEC_without_me = '';
    +	foreach ($arrayofcode as $key => $value)
    +	{
    +		$country_code_in_EEC.=($country_code_in_EEC ? "," : "")."'".$value."'";
    +		if ($value != $mysoc->country_code) $country_code_in_EEC_without_me.=($country_code_in_EEC_without_me ? "," : "")."'".$value."'";
    +	}
    +	if ($search_country == 'special_allnotme')     $sql .= " AND co.code <> '".$db->escape($mysoc->country_code)."'";
    +	elseif ($search_country == 'special_eec')      $sql .= " AND co.code IN (".$country_code_in_EEC.")";
    +	elseif ($search_country == 'special_eecnotme') $sql .= " AND co.code IN (".$country_code_in_EEC_without_me.")";
    +	elseif ($search_country == 'special_noteec')   $sql .= " AND co.code NOT IN (".$country_code_in_EEC.")";
    +	else $sql .= natural_search(array("co.code","co.label"), $search_country);
     }
     if (strlen(trim($search_tvaintra))) {
     	$sql .= natural_search("s.tva_intra", $search_tvaintra);
    @@ -297,9 +308,9 @@ if ($result) {
     	print '<tr class="liste_titre_filter">';
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth25" name="search_lineid" value="' . dol_escape_htmltag($search_lineid) . '""></td>';
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_invoice" value="' . dol_escape_htmltag($search_invoice) . '"></td>';
    -	print '<td class="liste_titre center">';
    -	if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="search_day" value="'.dol_escape_htmltag($search_day).'">';
    -   	print '<input class="flat" type="text" size="1" maxlength="2" name="search_month" value="'.dol_escape_htmltag($search_month).'">';
    +	print '<td class="liste_titre center nowraponall">';
    +	if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat valignmiddle" type="text" size="1" maxlength="2" name="search_day" value="'.dol_escape_htmltag($search_day).'">';
    +   	print '<input class="flat valignmiddle" type="text" size="1" maxlength="2" name="search_month" value="'.dol_escape_htmltag($search_month).'">';
        	$formother->select_year($search_year,'search_year',1, 20, 5);
     	print '</td>';
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_ref" value="' . dol_escape_htmltag($search_ref) . '"></td>';
    @@ -307,7 +318,10 @@ if ($result) {
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_desc" value="' . dol_escape_htmltag($search_desc) . '"></td>';
     	print '<td class="liste_titre" align="right"><input type="text" class="right flat maxwidth50" name="search_amount" value="' . dol_escape_htmltag($search_amount) . '"></td>';
     	print '<td class="liste_titre" align="right"><input type="text" class="right flat maxwidth50" placeholder="%" name="search_vat" size="1" value="' . dol_escape_htmltag($search_vat) . '"></td>';
    -	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '"></td>';
    +	print '<td class="liste_titre">';
    +	print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth200', 'code2', 1, 0, 1);
    +	//print '<input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '">';
    +	print '</td>';
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_tvaintra" value="' . dol_escape_htmltag($search_tvaintra) . '"></td>';
     	print '<td class="liste_titre" align="center"><input type="text" class="flat maxwidth50" name="search_account" value="' . dol_escape_htmltag($search_account) . '"></td>';
     	print '<td class="liste_titre" align="center">';
    @@ -352,7 +366,7 @@ if ($result) {
     		print '<td>' . $objp->rowid . '</td>';
     
     		// Ref Invoice
    -		print '<td>' . $facture_static->getNomUrl(1) . '</td>';
    +		print '<td class="nowraponall">' . $facture_static->getNomUrl(1) . '</td>';
     
     		print '<td align="center">' . dol_print_date($db->jdate($objp->datef), 'day') . '</td>';
     
    @@ -370,9 +384,10 @@ if ($result) {
     		print '</td>';
     
     		print '<td align="right">' . price($objp->total_ht) . '</td>';
    +
     		print '<td align="right">' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . '</td>';
     
    -		print '<td>' . $objp->country .'</td>';
    +		print '<td>' . $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')</td>';
     
     		print '<td>' . $objp->tva_intra . '</td>';
     
    @@ -400,6 +415,6 @@ if ($result) {
     	print $db->lasterror();
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/customer/list.php b/htdocs/accountancy/customer/list.php
    index 69396131b02..74944b8f823 100644
    --- a/htdocs/accountancy/customer/list.php
    +++ b/htdocs/accountancy/customer/list.php
    @@ -34,6 +34,7 @@ require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingaccount.class.php
     require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array("bills","compta","accountancy","other","productbatch"));
    @@ -201,8 +202,9 @@ llxHeader('', $langs->trans("Ventilation"));
     if (empty($chartaccountcode))
     {
     	print $langs->trans("ErrorChartOfAccountSystemNotSelected");
    -	llxFooter();
    -	$db->close();
    +	// End of page
    +    llxFooter();
    +    $db->close();
     	exit;
     }
     
    @@ -211,7 +213,8 @@ $sql = "SELECT f.rowid as facid, f.facnumber as ref, f.datef, f.type as ftype,";
     $sql.= " l.rowid, l.fk_product, l.description, l.total_ht, l.fk_code_ventilation, l.product_type as type_l, l.tva_tx as tva_tx_line, l.vat_src_code,";
     $sql.= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.accountancy_code_sell as code_sell, p.tva_tx as tva_tx_prod,";
     $sql.= " aa.rowid as aarowid,";
    -$sql.= " co.label as country, s.tva_intra";
    +$sql.= " co.code as country_code, co.label as country,";
    +$sql.= " s.tva_intra";
     $parameters=array();
     $reshook=$hookmanager->executeHooks('printFieldListSelect',$parameters);    // Note that $action and $object may have been modified by hook
     $sql.=$hookmanager->resPrint;
    @@ -264,7 +267,18 @@ else if ($search_year > 0)
     	$sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($search_year,1,false))."' AND '".$db->idate(dol_get_last_day($search_year,12,false))."'";
     }
     if (strlen(trim($search_country))) {
    -	$sql .= natural_search("co.label", $search_country);
    +	$arrayofcode = getCountriesInEEC();
    +	$country_code_in_EEC = $country_code_in_EEC_without_me = '';
    +	foreach ($arrayofcode as $key => $value)
    +	{
    +		$country_code_in_EEC.=($country_code_in_EEC ? "," : "")."'".$value."'";
    +		if ($value != $mysoc->country_code) $country_code_in_EEC_without_me.=($country_code_in_EEC_without_me ? "," : "")."'".$value."'";
    +	}
    +	if ($search_country == 'special_allnotme')     $sql .= " AND co.code <> '".$db->escape($mysoc->country_code)."'";
    +	elseif ($search_country == 'special_eec')      $sql .= " AND co.code IN (".$country_code_in_EEC.")";
    +	elseif ($search_country == 'special_eecnotme') $sql .= " AND co.code IN (".$country_code_in_EEC_without_me.")";
    +	elseif ($search_country == 'special_noteec')   $sql .= " AND co.code NOT IN (".$country_code_in_EEC.")";
    +	else $sql .= natural_search(array("co.code","co.label"), $search_country);
     }
     if (strlen(trim($search_tvaintra))) {
     	$sql .= natural_search("s.tva_intra", $search_tvaintra);
    @@ -370,7 +384,10 @@ if ($result) {
     	print '<td class="liste_titre"><input type="text" class="flat maxwidthonsmartphone" name="search_desc" value="' . dol_escape_htmltag($search_desc) . '"></td>';
     	print '<td class="liste_titre" align="right"><input type="text" class="flat maxwidth50 right" name="search_amount" value="' . dol_escape_htmltag($search_amount) . '"></td>';
     	print '<td class="liste_titre" align="right"><input type="text" class="flat maxwidth50 right" name="search_vat" placeholder="%" size="1" value="' . dol_escape_htmltag($search_vat) . '"></td>';
    -	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '"></td>';
    +	print '<td class="liste_titre">';
    +	print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth200', 'code2', 1, 0, 1);
    +	//print '<input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '">';
    +	print '</td>';
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_tvaintra" value="' . dol_escape_htmltag($search_tvaintra) . '"></td>';
     	print '<td class="liste_titre"></td>';
     	print '<td class="liste_titre"></td>';
    @@ -449,7 +466,7 @@ if ($result) {
     		print '<td>' . $objp->rowid . '</td>';
     
     		// Ref Invoice
    -		print '<td>' . $facture_static->getNomUrl(1) . '</td>';
    +		print '<td class="nowraponall">' . $facture_static->getNomUrl(1) . '</td>';
     
     		print '<td align="center">' . dol_print_date($db->jdate($objp->datef), 'day') . '</td>';
     
    @@ -524,5 +541,6 @@ jQuery(document).ready(function() {
     });
     </script>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/expensereport/card.php b/htdocs/accountancy/expensereport/card.php
    index d9b2137157d..b245e2539a7 100644
    --- a/htdocs/accountancy/expensereport/card.php
    +++ b/htdocs/accountancy/expensereport/card.php
    @@ -167,5 +167,6 @@ if (! empty($id)) {
     	print "Error ID incorrect";
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/expensereport/index.php b/htdocs/accountancy/expensereport/index.php
    index 49b20730eef..837a8c36630 100644
    --- a/htdocs/accountancy/expensereport/index.php
    +++ b/htdocs/accountancy/expensereport/index.php
    @@ -86,7 +86,7 @@ if ($action == 'clean' || $action == 'validatehistory')
     	if (! $resql1) {
     		$error ++;
     		$db->rollback();
    -		setEventMessage($db->lasterror(), 'errors');
    +		setEventMessages($db->lasterror(), null, 'errors');
     	} else {
     		$db->commit();
     	}
    @@ -150,7 +150,7 @@ $buttonbind = '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?year=' .
     
     
     print_barre_liste($langs->trans("OverviewOfAmountOfLinesNotBound"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1);
    -//print_fiche_titre($langs->trans("OverviewOfAmountOfLinesNotBound"), $buttonbind, '');
    +//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesNotBound"), $buttonbind, '');
     
     print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
    @@ -221,7 +221,7 @@ print '<br>';
     
     
     print_barre_liste($langs->trans("OverviewOfAmountOfLinesBound"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1);
    -//print_fiche_titre($langs->trans("OverviewOfAmountOfLinesBound"), '', '');
    +//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesBound"), '', '');
     
     
     print '<div class="div-table-responsive-no-min">';
    @@ -297,7 +297,7 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange.
         print '<br>';
     
         print_barre_liste($langs->trans("OtherInfo"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1);
    -    //print_fiche_titre($langs->trans("OtherInfo"), '', '');
    +    //print load_fiche_titre($langs->trans("OtherInfo"), '', '');
     
     	print '<div class="div-table-responsive-no-min">';
         print '<table class="noborder" width="100%">';
    @@ -345,5 +345,6 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange.
         print '</div>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/expensereport/lines.php b/htdocs/accountancy/expensereport/lines.php
    index 473bc379057..b328cf73455 100644
    --- a/htdocs/accountancy/expensereport/lines.php
    +++ b/htdocs/accountancy/expensereport/lines.php
    @@ -236,8 +236,6 @@ if ($result) {
     	if ($search_day)        $param .= '&search_day='.urlencode($search_day);
     	if ($search_month)      $param .= '&search_month='.urlencode($search_month);
     	if ($search_year)       $param .= '&search_year='.urlencode($search_year);
    -	if ($search_country)	$param .= "&search_country=" . urlencode($search_country);
    -	if ($search_tvaintra)	$param .= "&search_tvaintra=" . urlencode($search_tvaintra);
     
     	print '<form action="' . $_SERVER["PHP_SELF"] . '" method="post">' . "\n";
     	print '<input type="hidden" name="action" value="ventil">';
    @@ -349,6 +347,6 @@ if ($result) {
     	print $db->lasterror();
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/expensereport/list.php b/htdocs/accountancy/expensereport/list.php
    index a20f88f1c30..8057c9809f2 100644
    --- a/htdocs/accountancy/expensereport/list.php
    +++ b/htdocs/accountancy/expensereport/list.php
    @@ -180,8 +180,9 @@ llxHeader('', $langs->trans("ExpenseReportsVentilation"));
     if (empty($chartaccountcode))
     {
     	print $langs->trans("ErrorChartOfAccountSystemNotSelected");
    -	llxFooter();
    -	$db->close();
    +	// End of page
    +    llxFooter();
    +    $db->close();
     	exit;
     }
     
    @@ -422,5 +423,6 @@ jQuery(document).ready(function() {
     });
     </script>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/index.php b/htdocs/accountancy/index.php
    index 9a3767bd8e4..2d34ec816e3 100644
    --- a/htdocs/accountancy/index.php
    +++ b/htdocs/accountancy/index.php
    @@ -55,19 +55,19 @@ if ($conf->accounting->enabled)
     	print $langs->trans("AccountancyAreaDescIntro")."<br>\n";
     	print "<br>\n";print "<br>\n";
     
    -	print_fiche_titre('<span class="fa fa-calendar-check-o"></span> '.$langs->trans("AccountancyAreaDescActionOnce"), '', '')."<br>\n";
    +	print load_fiche_titre('<span class="fa fa-calendar-check-o"></span> '.$langs->trans("AccountancyAreaDescActionOnce"), '', '')."<br>\n";
     	print '<hr>';
     	print "<br>\n";
     
     	// STEPS
     	$step++;
    -	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescJournalSetup", $step, '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("AccountingJournals").'</strong>');
    +	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescJournalSetup", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/journals_list.php?id=35">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("AccountingJournals").'</strong>'.'</a>');
     	print "<br>\n";
     	$step++;
    -	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescChartModel", $step, '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("Pcg_version").'</strong>');
    +	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescChartModel", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/accountmodel.php">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("Pcg_version").'</strong>'.'</a>');
     	print "<br>\n";
     	$step++;
    -	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescChart", $step, '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("Chartofaccounts").'</strong>');
    +	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescChart", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/account.php">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("Chartofaccounts").'</strong>'.'</a>');
     	print "<br>\n";
     
     	print "<br>\n";
    @@ -76,20 +76,20 @@ if ($conf->accounting->enabled)
     	print "<br>\n";
     
     	$step++;
    -	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescDefault", $step, '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuDefaultAccounts").'</strong>');
    +	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescDefault", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/defaultaccounts.php">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuDefaultAccounts").'</strong>'.'</a>');
     	print "<br>\n";
     
     	$step++;
    -	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBank", $step, '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuBankAccounts").'</strong>')."\n";
    +	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBank", $step, '<a href="'.DOL_URL_ROOT.'/compta/bank/list.php">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuBankAccounts").'</strong>'.'</a>')."\n";
     	print "<br>\n";
     
     	$step++;
    -	$textlink = '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup").'-'.$langs->transnoentitiesnoconv("MenuVatAccounts").'</strong>';
    +	$textlink = '<a href="'.DOL_URL_ROOT.'/admin/dict.php?id=10&from=accountancy">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup").'-'.$langs->transnoentitiesnoconv("MenuVatAccounts").'</strong>'.'</a>';
     	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescVat", $step, $textlink);
     	print "<br>\n";
     	if (! empty($conf->tax->enabled))
     	{
    -	    $textlink = '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup").'-'.$langs->transnoentitiesnoconv("MenuTaxAccounts").'</strong>';
    +	     $textlink = '<a href="'.DOL_URL_ROOT.'/admin/dict.php?id=7&from=accountancy">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup").'-'.$langs->transnoentitiesnoconv("MenuTaxAccounts").'</strong>'.'</a>';
     	    $step++;
     	    print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescContrib", $step, $textlink);
     	    print "<br>\n";
    @@ -105,7 +105,7 @@ if ($conf->accounting->enabled)
     	if (! empty($conf->expensereport->enabled))  // TODO Move this in the default account page because this is only one accounting account per purpose, not several.
     	{
     	    $step++;
    -	    print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescExpenseReport", $step, '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuExpenseReportAccounts").'</strong>');
    +	    print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescExpenseReport", $step, '<a href="'.DOL_URL_ROOT.'/admin/dict.php?id=17&from=accountancy">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("MenuExpenseReportAccounts").'</strong>'.'</a>');
     	    print "<br>\n";
     	}
     	/*
    @@ -123,7 +123,7 @@ if ($conf->accounting->enabled)
     	}*/
     
     	$step++;
    -	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescProd", $step, '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("ProductsBinding").'</strong>');
    +	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescProd", $step, '<a href="'.DOL_URL_ROOT.'/accountancy/admin/productaccount.php">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy").'-'.$langs->transnoentitiesnoconv("Setup")."-".$langs->transnoentitiesnoconv("ProductsBinding").'</strong>'.'</a>');
     	print "<br>\n";
     
     
    @@ -131,7 +131,7 @@ if ($conf->accounting->enabled)
     
     
     	print "<br>\n";
    -	print_fiche_titre('<span class="fa fa-calendar"></span> '.$langs->trans("AccountancyAreaDescActionFreq"), '', '');
    +	print load_fiche_titre('<span class="fa fa-calendar"></span> '.$langs->trans("AccountancyAreaDescActionFreq"), '', '');
     	print '<hr>';
     	print "<br>\n";
     	$step = 0;
    @@ -139,18 +139,18 @@ if ($conf->accounting->enabled)
     	$langs->loadLangs(array('bills', 'trips'));
     
     	$step++;
    -	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64+$step), $langs->transnoentitiesnoconv("BillsCustomers"), '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy")."-".$langs->transnoentitiesnoconv("CustomersVentilation").'</strong>')."\n";
    +	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64+$step), $langs->transnoentitiesnoconv("BillsCustomers"), '<a href="'.DOL_URL_ROOT.'/accountancy/customer/index.php">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy")."-".$langs->transnoentitiesnoconv("CustomersVentilation").'</strong>'.'</a>')."\n";
     	print "<br>\n";
     
     	$step++;
    -	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64+$step), $langs->transnoentitiesnoconv("BillsSuppliers"), '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy")."-".$langs->transnoentitiesnoconv("SuppliersVentilation").'</strong>')."\n";
    +	print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64+$step), $langs->transnoentitiesnoconv("BillsSuppliers"), '<a href="'.DOL_URL_ROOT.'/accountancy/supplier/index.php">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy")."-".$langs->transnoentitiesnoconv("SuppliersVentilation").'</strong>'.'</a>')."\n";
     	print "<br>\n";
     
     	if (! empty($conf->expensereport->enabled) || ! empty($conf->deplacement->enabled))
     	{
     		$step++;
    -		print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64+$step), $langs->transnoentitiesnoconv("ExpenseReports"), '<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy")."-".$langs->transnoentitiesnoconv("ExpenseReportsVentilation").'</strong>')."\n";
    -		print "<br>\n";
    +		print img_picto('', 'puce').' '.$langs->trans("AccountancyAreaDescBind", chr(64+$step), $langs->transnoentitiesnoconv("ExpenseReports"), '<a href="'.DOL_URL_ROOT.'/accountancy/expensereport/index.php">'.'<strong>'.$langs->transnoentitiesnoconv("MenuAccountancy")."-".$langs->transnoentitiesnoconv("ExpenseReportsVentilation").'</strong>'.'</a>')."\n";
    +	    print "<br>\n";
     	}
     
     	$step++;
    @@ -166,5 +166,6 @@ else
     	print $langs->trans("Module10Desc")."<br>\n";
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php
    index 23a7e71d325..4c0bf9a55fa 100644
    --- a/htdocs/accountancy/journal/bankjournal.php
    +++ b/htdocs/accountancy/journal/bankjournal.php
    @@ -1,13 +1,13 @@
     <?php
    -/* Copyright (C) 2007-2010  Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2010  Jean Heimburger     <jean@tiaris.info>
    - * Copyright (C) 2011       Juanjo Menent       <jmenent@2byte.es>
    - * Copyright (C) 2012       Regis Houssin       <regis.houssin@capnetworks.com>
    - * Copyright (C) 2013       Christophe Battarel <christophe.battarel@altairis.fr>
    - * Copyright (C) 2013-2018  Alexandre Spangaro  <aspangaro@zendsi.com>
    - * Copyright (C) 2013-2014  Florian Henry       <florian.henry@open-concept.pro>
    - * Copyright (C) 2013-2014  Olivier Geffroy     <jeff@jeffinfo.com>
    - * Copyright (C) 2017       Frédéric France     <frederic.france@netlogic.fr>
    +/* Copyright (C) 2007-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2007-2010  Jean Heimburger         <jean@tiaris.info>
    + * Copyright (C) 2011       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2012       Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2013       Christophe Battarel     <christophe.battarel@altairis.fr>
    + * Copyright (C) 2013-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2013-2014  Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2013-2014  Olivier Geffroy         <jeff@jeffinfo.com>
    + * Copyright (C) 2017-2018  Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,6 +33,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/report.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
    +require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingaccount.class.php';
     require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingjournal.class.php';
     require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
     require_once DOL_DOCUMENT_ROOT . '/user/class/user.class.php';
    @@ -147,6 +148,9 @@ $paymentsalstatic = new PaymentSalary($db);
     $paymentexpensereportstatic = new PaymentExpenseReport($db);
     $paymentvariousstatic = new PaymentVarious($db);
     $paymentloanstatic = new PaymentLoan($db);
    +$accountLinestatic=new AccountLine($db);
    +
    +$accountingaccount = new AccountingAccount($db);
     
     // Get code of finance journal
     $accountingjournalstatic = new AccountingJournal($db);
    @@ -154,6 +158,7 @@ $accountingjournalstatic->fetch($id_journal);
     $journal = $accountingjournalstatic->code;
     $journal_label = $accountingjournalstatic->label;
     
    +
     dol_syslog("accountancy/journal/bankjournal.php", LOG_DEBUG);
     $result = $db->query($sql);
     if ($result) {
    @@ -370,7 +375,8 @@ if ($result) {
     					$tabpay[$obj->rowid]["paymentloanid"] = $paymentloanstatic->id;
     					//$tabtp[$obj->rowid][$account_pay_loan] += $obj->amount;
     				} else if ($links[$key]['type'] == 'banktransfert') {
    -					$tabpay[$obj->rowid]["lib"] .= ' ' . $langs->trans("BankTransfer");
    +					$accountLinestatic->fetch($links[$key]['url_id']);
    +					$tabpay[$obj->rowid]["lib"] .= ' '.$langs->trans("BankTransfer").'- ' .$accountLinestatic ->getNomUrl(1);
     					$tabtp[$obj->rowid][$account_transfer] += $obj->amount;
     					$bankaccountstatic->fetch($tabpay[$obj->rowid]['fk_bank_account']);
     					$tabpay[$obj->rowid]["soclib"] = $bankaccountstatic->getNomUrl(2);
    @@ -459,7 +465,11 @@ if (! $error && $action == 'writebookkeeping') {
     					$bookkeeping->fk_doc = $key;
     					$bookkeeping->fk_docdet = $val["fk_bank"];
     					$bookkeeping->numero_compte = $k;
    -					$bookkeeping->label_compte = $langs->trans("Bank");
    +
    +					$accountingaccount->fetch(null, $k, true);
    +					$bookkeeping->label_compte = $accountingaccount->label;
    +
    +					$bookkeeping->label_operation = $reflabel;
     					$bookkeeping->montant = $mt;
     					$bookkeeping->sens = ($mt >= 0) ? 'D' : 'C';
     					$bookkeeping->debit = ($mt >= 0 ? $mt : 0);
    @@ -515,6 +525,7 @@ if (! $error && $action == 'writebookkeeping') {
     						$bookkeeping->doc_type = 'bank';
     						$bookkeeping->fk_doc = $key;
     						$bookkeeping->fk_docdet = $val["fk_bank"];
    +						$bookkeeping->label_operation = $reflabel;
     						$bookkeeping->montant = $mt;
     						$bookkeeping->sens = ($mt < 0) ? 'D' : 'C';
     						$bookkeeping->debit = ($mt < 0 ? - $mt : 0);
    @@ -528,22 +539,30 @@ if (! $error && $action == 'writebookkeeping') {
     							$bookkeeping->subledger_account = $tabcompany[$key]['code_compta'];
     							$bookkeeping->subledger_label = $tabcompany[$key]['name'];
     							$bookkeeping->numero_compte = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER;
    -							$bookkeeping->label_compte = '';
    +
    +							$accountingaccount->fetch(null, $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER, true);
    +							$bookkeeping->label_compte = $accountingaccount->label;
     						} else if ($tabtype[$key] == 'payment_supplier') {		   // If payment is payment of supplier invoice, we get ref of invoice
     							$bookkeeping->subledger_account = $tabcompany[$key]['code_compta'];
     							$bookkeeping->subledger_label = $tabcompany[$key]['name'];
     							$bookkeeping->numero_compte = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER;
    -							$bookkeeping->label_compte = '';
    +
    +							$accountingaccount->fetch(null, $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER, true);
    +							$bookkeeping->label_compte = $accountingaccount->label;
     						} else if ($tabtype[$key] == 'payment_expensereport') {
     							$bookkeeping->subledger_account = $tabuser[$key]['accountancy_code'];
     							$bookkeeping->subledger_label = $tabuser[$key]['name'];
     							$bookkeeping->numero_compte = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT;
    -							$bookkeeping->label_compte = '';
    +
    +							$accountingaccount->fetch(null, $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT, true);
    +							$bookkeeping->label_compte = $accountingaccount->label;
     						} else if ($tabtype[$key] == 'payment_salary') {
     							$bookkeeping->subledger_account = $tabuser[$key]['accountancy_code'];
     							$bookkeeping->subledger_label = $tabuser[$key]['name'];
     							$bookkeeping->numero_compte = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT;
    -							$bookkeeping->label_compte = '';
    +
    +							$accountingaccount->fetch(null, $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT, true);
    +							$bookkeeping->label_compte = $accountingaccount->label;
     						} else if (in_array($tabtype[$key], array('sc', 'payment_sc'))) {   // If payment is payment of social contribution
     							$bookkeeping->subledger_account = '';
     							$bookkeeping->subledger_label = '';
    @@ -553,27 +572,37 @@ if (! $error && $action == 'writebookkeeping') {
     							$bookkeeping->subledger_account = '';
     							$bookkeeping->subledger_label = '';
     							$bookkeeping->numero_compte = $k;
    -							$bookkeeping->label_compte = '';
    +
    +							$accountingaccount->fetch($k, null, true);
    +							$bookkeeping->label_compte = $accountingaccount->label;
     						} else if ($tabtype[$key] == 'payment_donation') {
     							$bookkeeping->subledger_account = '';
     							$bookkeeping->subledger_label = '';
     							$bookkeeping->numero_compte = $k;
    -							$bookkeeping->label_compte = '';
    +
    +							$accountingaccount->fetch($k, null, true);
    +							$bookkeeping->label_compte = $accountingaccount->label;
     						} else if ($tabtype[$key] == 'payment_loan') {
     							$bookkeeping->subledger_account = '';
     							$bookkeeping->subledger_label = '';
     							$bookkeeping->numero_compte = $k;
    -							$bookkeeping->label_compte = '';
    +
    +							$accountingaccount->fetch($k, null, true);
    +							$bookkeeping->label_compte = $accountingaccount->label;
     						} else if ($tabtype[$key] == 'payment_various') {
     							$bookkeeping->subledger_account = '';
     							$bookkeeping->subledger_label = '';
     							$bookkeeping->numero_compte = $k;
    -							$bookkeeping->label_compte = '';
    +
    +							$accountingaccount->fetch($k, null, true);
    +							$bookkeeping->label_compte = $accountingaccount->label;
     						} else if ($tabtype[$key] == 'banktransfert') {
     							$bookkeeping->subledger_account = '';
     							$bookkeeping->subledger_label = '';
     							$bookkeeping->numero_compte = $k;
    -							$bookkeeping->label_compte = '';
    +
    +							$accountingaccount->fetch($k, null, true);
    +							$bookkeeping->label_compte = $accountingaccount->label;
     						} else {
     							if ($tabtype[$key] == 'unknown')	// Unknown transaction, we will use a waiting account for thirdparty.
     							{
    @@ -581,7 +610,9 @@ if (! $error && $action == 'writebookkeeping') {
     								$bookkeeping->subledger_account = '';
     								$bookkeeping->subledger_label = '';
     								$bookkeeping->numero_compte = $conf->global->ACCOUNTING_ACCOUNT_SUSPENSE;
    -								$bookkeeping->label_compte = '';
    +
    +								$accountingaccount->fetch(null, $conf->global->ACCOUNTING_ACCOUNT_SUSPENSE, true);
    +								$bookkeeping->label_compte = $accountingaccount->label;
     							}
     						}
     						$bookkeeping->label_operation = $reflabel;
    @@ -719,6 +750,7 @@ if ($action == 'exportcsv') {		// ISO and not UTF8 !
     	$sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV;
     
     	$filename = 'journal';
    +	$type_export = 'journal';
     	include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php';
     
     	// CSV header line
    @@ -850,7 +882,8 @@ if (empty($action) || $action == 'view') {
     	$description.= $langs->trans("DescJournalOnlyBindedVisible").'<br>';
     
     	$listofchoices=array('notyet'=>$langs->trans("NotYetInGeneralLedger"), 'already'=>$langs->trans("AlreadyInGeneralLedger"));
    -	$period = $form->select_date($date_start?$date_start:-1, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end?$date_end:-1, 'date_end', 0, 0, 0, '', 1, 0, 1). ' -  ' .$langs->trans("JournalizationInLedgerStatus").' '. $form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1);
    +    $period = $form->selectDate($date_start?$date_start:-1, 'date_start', 0, 0, 0, '', 1, 0) . ' - ' . $form->selectDate($date_end?$date_end:-1, 'date_end', 0, 0, 0, '', 1, 0);
    +    $period .= ' -  ' .$langs->trans("JournalizationInLedgerStatus").' '. $form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1);
     
     	$varlink = 'id_journal=' . $id_journal;
     
    diff --git a/htdocs/accountancy/journal/expensereportsjournal.php b/htdocs/accountancy/journal/expensereportsjournal.php
    index 07982f107fd..a767d469120 100644
    --- a/htdocs/accountancy/journal/expensereportsjournal.php
    +++ b/htdocs/accountancy/journal/expensereportsjournal.php
    @@ -1,11 +1,12 @@
     <?php
    -/* Copyright (C) 2007-2010  Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2010  Jean Heimburger		<jean@tiaris.info>
    - * Copyright (C) 2011       Juanjo Menent		<jmenent@2byte.es>
    - * Copyright (C) 2012       Regis Houssin		<regis.houssin@capnetworks.com>
    - * Copyright (C) 2013-2017  Alexandre Spangaro	<aspangaro@zendsi.com>
    - * Copyright (C) 2013-2016  Olivier Geffroy		<jeff@jeffinfo.com>
    - * Copyright (C) 2013-2016  Florian Henry		<florian.henry@open-concept.pro>
    +/* Copyright (C) 2007-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2007-2010  Jean Heimburger         <jean@tiaris.info>
    + * Copyright (C) 2011       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2012       Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2013-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2013-2016  Olivier Geffroy         <jeff@jeffinfo.com>
    + * Copyright (C) 2013-2016  Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -60,6 +61,7 @@ if ($user->societe_id > 0)
     /*
      * Actions
      */
    +$accountingaccount = new AccountingAccount($db);
     
     // Get informations of journal
     $accountingjournalstatic = new AccountingJournal($db);
    @@ -207,8 +209,12 @@ if ($action == 'writebookkeeping') {
     					$bookkeeping->fk_doc = $key;
     					$bookkeeping->fk_docdet = $val["fk_expensereportdet"];
     					$bookkeeping->subledger_account = $tabuser[$key]['user_accountancy_code'];
    -					$bookkeeping->subledger_label = $tabuser[$key]['user_accountancy_code'];
    +					$bookkeeping->subledger_label = $tabuser[$key]['name'];
     					$bookkeeping->numero_compte = $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT;
    +
    +					$accountingaccount->fetch(null, $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT, true);
    +					$bookkeeping->label_compte = $accountingaccount->label;
    +
     					$bookkeeping->label_operation = $tabuser[$key]['name'];
     					$bookkeeping->montant = $mt;
     					$bookkeeping->sens = ($mt >= 0) ? 'C' : 'D';
    @@ -247,7 +253,6 @@ if ($action == 'writebookkeeping') {
     			foreach ( $tabht[$key] as $k => $mt ) {
     				if ($mt) {
     					// get compte id and label
    -					$accountingaccount = new AccountingAccount($db);
     					if ($accountingaccount->fetch(null, $k, true)) {
     						$bookkeeping = new BookKeeping($db);
     						$bookkeeping->doc_date = $val["date"];
    @@ -259,6 +264,7 @@ if ($action == 'writebookkeeping') {
     						$bookkeeping->subledger_account = '';
     						$bookkeeping->subledger_label = '';
     						$bookkeeping->numero_compte = $k;
    +						$bookkeeping->label_compte = $accountingaccount->label;
     						$bookkeeping->label_operation = $accountingaccount->label;
     						$bookkeeping->montant = $mt;
     						$bookkeeping->sens = ($mt < 0) ? 'C' : 'D';
    @@ -315,6 +321,10 @@ if ($action == 'writebookkeeping') {
     					$bookkeeping->subledger_account = '';
     					$bookkeeping->subledger_label = '';
     					$bookkeeping->numero_compte = $k;
    +
    +					$accountingaccount->fetch($k, null, true);
    +					$bookkeeping->label_compte = $accountingaccount->label;
    +
     					$bookkeeping->label_operation = $langs->trans("VAT"). ' '.join(', ',$def_tva[$key][$k]).' %';
     					$bookkeeping->montant = $mt;
     					$bookkeeping->sens = ($mt < 0) ? 'C' : 'D';
    @@ -399,11 +409,13 @@ if ($action == 'writebookkeeping') {
     		$param.='&date_endmonth='.$date_endmonth;
     		$param.='&date_endyear='.$date_endyear;
     		$param.='&in_bookkeeping='.$in_bookkeeping;
    +
     		header("Location: ".$_SERVER['PHP_SELF'].($param?'?'.$param:''));
     		exit;
     	}
     }
     
    +
     /*
      * View
      */
    @@ -417,6 +429,7 @@ $userstatic = new User($db);
     	$sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV;
     
     	$filename = 'journal';
    +	$type_export = 'journal';
     	include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php';
     
     	// Model Cegid Expert Export
    @@ -534,7 +547,8 @@ if (empty($action) || $action == 'view') {
     	$description.= $langs->trans("DescJournalOnlyBindedVisible").'<br>';
     
     	$listofchoices=array('notyet'=>$langs->trans("NotYetInGeneralLedger"), 'already'=>$langs->trans("AlreadyInGeneralLedger"));
    -	$period = $form->select_date($date_start?$date_start:-1, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end?$date_end:-1, 'date_end', 0, 0, 0, '', 1, 0, 1). ' -  ' .$langs->trans("JournalizationInLedgerStatus").' '. $form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1);
    +    $period = $form->selectDate($date_start?$date_start:-1, 'date_start', 0, 0, 0, '', 1, 0) . ' - ' . $form->selectDate($date_end?$date_end:-1, 'date_end', 0, 0, 0, '', 1, 0);
    +    $period .= ' -  ' .$langs->trans("JournalizationInLedgerStatus").' '. $form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1);
     
     	$varlink = 'id_journal=' . $id_journal;
     
    diff --git a/htdocs/accountancy/journal/purchasesjournal.php b/htdocs/accountancy/journal/purchasesjournal.php
    index 14501ae9b82..1b71b288c6b 100644
    --- a/htdocs/accountancy/journal/purchasesjournal.php
    +++ b/htdocs/accountancy/journal/purchasesjournal.php
    @@ -1,11 +1,12 @@
     <?php
    -/* Copyright (C) 2007-2010  Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2010  Jean Heimburger		<jean@tiaris.info>
    - * Copyright (C) 2011       Juanjo Menent		<jmenent@2byte.es>
    - * Copyright (C) 2012       Regis Houssin		<regis.houssin@capnetworks.com>
    - * Copyright (C) 2013-2017  Alexandre Spangaro	<aspangaro@zendsi.com>
    - * Copyright (C) 2013-2016  Olivier Geffroy		<jeff@jeffinfo.com>
    - * Copyright (C) 2013-2016  Florian Henry		<florian.henry@open-concept.pro>
    +/* Copyright (C) 2007-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2007-2010  Jean Heimburger         <jean@tiaris.info>
    + * Copyright (C) 2011       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2012       Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2013-2017  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2013-2016  Olivier Geffroy         <jeff@jeffinfo.com>
    + * Copyright (C) 2013-2016  Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -65,10 +66,7 @@ $parameters=array();
      */
     $reshook=$hookmanager->executeHooks('doActions',$parameters,$user,$action);    // Note that $action and $object may have been modified by some hooks
     
    -
    -/*
    - * Views
    - */
    +$accountingaccount = new AccountingAccount($db);
     
     // Get informations of journal
     $accountingjournalstatic = new AccountingJournal($db);
    @@ -309,8 +307,12 @@ if ($action == 'writebookkeeping') {
     					$bookkeeping->fk_docdet = 0;    // Useless, can be several lines that are source of this record to add
     					$bookkeeping->thirdparty_code = $companystatic->code_fournisseur;
     					$bookkeeping->subledger_account = $tabcompany[$key]['code_compta_fournisseur'];
    -					$bookkeeping->subledger_label = '';    // TODO To complete
    +					$bookkeeping->subledger_label = $tabcompany[$key]['name'];
     					$bookkeeping->numero_compte = $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER;
    +
    +					$accountingaccount->fetch(null, $conf->global->ACCOUNTING_ACCOUNT_SUPPLIER, true);
    +					$bookkeeping->label_compte = $accountingaccount->label;
    +
     					$bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $langs->trans("SubledgerAccount");
     					$bookkeeping->montant = $mt;
     					$bookkeeping->sens = ($mt >= 0) ? 'C' : 'D';
    @@ -351,7 +353,6 @@ if ($action == 'writebookkeeping') {
     			foreach ( $tabht[$key] as $k => $mt ) {
     				//if ($mt) {
     					// get compte id and label
    -					$accountingaccount = new AccountingAccount($db);
     					if ($accountingaccount->fetch(null, $k, true)) {
     						$bookkeeping = new BookKeeping($db);
     						$bookkeeping->doc_date = $val["date"];
    @@ -365,6 +366,7 @@ if ($action == 'writebookkeeping') {
     						$bookkeeping->subledger_account = '';
     						$bookkeeping->subledger_label = '';
     						$bookkeeping->numero_compte = $k;
    +						$bookkeeping->label_compte = $accountingaccount->label;
     						$bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $accountingaccount->label;
     						$bookkeeping->montant = $mt;
     						$bookkeeping->sens = ($mt < 0) ? 'C' : 'D';
    @@ -425,6 +427,10 @@ if ($action == 'writebookkeeping') {
     						$bookkeeping->subledger_account = '';
     						$bookkeeping->subledger_label = '';
     						$bookkeeping->numero_compte = $k;
    +
    +						$accountingaccount->fetch($k, null, true);
    +						$bookkeeping->label_compte = $accountingaccount->label;
    +
     						$bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->ref_supplier . ' - ' . $langs->trans("VAT").' '.join(', ',$def_tva[$key][$k]) .' %' . ($numtax?' - Localtax '.$numtax:'');
     						$bookkeeping->montant = $mt;
     						$bookkeeping->sens = ($mt < 0) ? 'C' : 'D';
    @@ -580,6 +586,7 @@ if ($action == 'exportcsv') {		// ISO and not UTF8 !
     	$sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV;
     
     	$filename = 'journal';
    +	$type_export = 'journal';
     	include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php';
     
     	$companystatic = new Fournisseur($db);
    @@ -726,7 +733,8 @@ if (empty($action) || $action == 'view') {
     	}
     
     	$listofchoices=array('notyet'=>$langs->trans("NotYetInGeneralLedger"), 'already'=>$langs->trans("AlreadyInGeneralLedger"));
    -	$period = $form->select_date($date_start?$date_start:-1, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end?$date_end:-1, 'date_end', 0, 0, 0, '', 1, 0, 1). ' -  ' .$langs->trans("JournalizationInLedgerStatus").' '. $form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1);
    +    $period = $form->selectDate($date_start?$date_start:-1, 'date_start', 0, 0, 0, '', 1, 0) . ' - ' . $form->selectDate($date_end?$date_end:-1, 'date_end', 0, 0, 0, '', 1, 0);
    +    $period .= ' -  ' .$langs->trans("JournalizationInLedgerStatus").' '. $form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1);
     
     	$varlink = 'id_journal=' . $id_journal;
     
    diff --git a/htdocs/accountancy/journal/sellsjournal.php b/htdocs/accountancy/journal/sellsjournal.php
    index 3b63b761183..21736195073 100644
    --- a/htdocs/accountancy/journal/sellsjournal.php
    +++ b/htdocs/accountancy/journal/sellsjournal.php
    @@ -1,13 +1,14 @@
     <?php
    -/* Copyright (C) 2007-2010  Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2010  Jean Heimburger			<jean@tiaris.info>
    - * Copyright (C) 2011       Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2012       Regis Houssin			<regis.houssin@capnetworks.com>
    - * Copyright (C) 2013       Christophe Battarel		<christophe.battarel@altairis.fr>
    - * Copyright (C) 2013-2017  Alexandre Spangaro		<aspangaro@zendsi.com>
    - * Copyright (C) 2013-2016  Florian Henry			<florian.henry@open-concept.pro>
    - * Copyright (C) 2013-2016  Olivier Geffroy			<jeff@jeffinfo.com>
    - * Copyright (C) 2014       Raphaël Doursenaud		<rdoursenaud@gpcsolutions.fr>
    +/* Copyright (C) 2007-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2007-2010  Jean Heimburger         <jean@tiaris.info>
    + * Copyright (C) 2011       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2012       Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2013       Christophe Battarel     <christophe.battarel@altairis.fr>
    + * Copyright (C) 2013-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2013-2016  Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2013-2016  Olivier Geffroy         <jeff@jeffinfo.com>
    + * Copyright (C) 2014       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -69,6 +70,8 @@ $parameters=array();
     
     $reshook=$hookmanager->executeHooks('doActions',$parameters,$user,$action);    // Note that $action and $object may have been modified by some hooks
     
    +$accountingaccount = new AccountingAccount($db);
    +
     // Get informations of journal
     $accountingjournalstatic = new AccountingJournal($db);
     $accountingjournalstatic->fetch($id_journal);
    @@ -316,8 +319,12 @@ if ($action == 'writebookkeeping') {
     					$bookkeeping->fk_docdet = 0;	// Useless, can be several lines that are source of this record to add
     					$bookkeeping->thirdparty_code = $companystatic->code_client;
     					$bookkeeping->subledger_account = $tabcompany[$key]['code_compta'];
    -					$bookkeeping->subledger_label = '';    // TODO To complete
    +					$bookkeeping->subledger_label = $tabcompany[$key]['name'];
     					$bookkeeping->numero_compte = $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER;
    +
    +					$accountingaccount->fetch(null, $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER, true);
    +					$bookkeeping->label_compte = $accountingaccount->label;
    +
     					$bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("SubledgerAccount");
     					$bookkeeping->montant = $mt;
     					$bookkeeping->sens = ($mt >= 0) ? 'D' : 'C';
    @@ -358,7 +365,6 @@ if ($action == 'writebookkeeping') {
     			foreach ( $tabht[$key] as $k => $mt ) {
     				//if ($mt) {
     					// get compte id and label
    -					$accountingaccount = new AccountingAccount($db);
     					if ($accountingaccount->fetch(null, $k, true)) {
     						$bookkeeping = new BookKeeping($db);
     						$bookkeeping->doc_date = $val["date"];
    @@ -372,6 +378,7 @@ if ($action == 'writebookkeeping') {
     						$bookkeeping->subledger_account = '';
     						$bookkeeping->subledger_label = '';
     						$bookkeeping->numero_compte = $k;
    +						$bookkeeping->label_compte = $accountingaccount->label;
     						$bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->ref . ' - ' . $accountingaccount->label;
     						$bookkeeping->montant = $mt;
     						$bookkeeping->sens = ($mt < 0) ? 'D' : 'C';
    @@ -431,6 +438,10 @@ if ($action == 'writebookkeeping') {
     						$bookkeeping->subledger_account = '';
     						$bookkeeping->subledger_label = '';
     						$bookkeeping->numero_compte = $k;
    +
    +						$accountingaccount->fetch($k, null, true);
    +						$bookkeeping->label_compte = $accountingaccount->label;
    +
     						$bookkeeping->label_operation = dol_trunc($companystatic->name, 16) . ' - ' . $invoicestatic->ref . ' - ' . $langs->trans("VAT").' '.join(', ',$def_tva[$key][$k]) .' %' . ($numtax?' - Localtax '.$numtax:'');
     						$bookkeeping->montant = $mt;
     						$bookkeeping->sens = ($mt < 0) ? 'D' : 'C';
    @@ -489,7 +500,6 @@ if ($action == 'writebookkeeping') {
     				break;  // Break in the foreach
     			}
     		}
    -
     	}
     
     	$tabpay = $tabfac;
    @@ -537,6 +547,7 @@ if ($action == 'exportcsv') {		// ISO and not UTF8 !
     	$sep = $conf->global->ACCOUNTING_EXPORT_SEPARATORCSV;
     
     	$filename = 'journal';
    +	$type_export = 'journal';
     	include DOL_DOCUMENT_ROOT . '/accountancy/tpl/export_journal.tpl.php';
     
     	$companystatic = new Client($db);
    @@ -660,7 +671,8 @@ if (empty($action) || $action == 'view') {
     		$description .= $langs->trans("DepositsAreIncluded");
     
     	$listofchoices=array('notyet'=>$langs->trans("NotYetInGeneralLedger"), 'already'=>$langs->trans("AlreadyInGeneralLedger"));
    -	$period = $form->select_date($date_start?$date_start:-1, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end?$date_end:-1, 'date_end', 0, 0, 0, '', 1, 0, 1). ' -  ' .$langs->trans("JournalizationInLedgerStatus").' '. $form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1);
    +    $period = $form->selectDate($date_start?$date_start:-1, 'date_start', 0, 0, 0, '', 1, 0) . ' - ' . $form->selectDate($date_end?$date_end:-1, 'date_end', 0, 0, 0, '', 1, 0);
    +    $period .= ' -  ' .$langs->trans("JournalizationInLedgerStatus").' '. $form->selectarray('in_bookkeeping', $listofchoices, $in_bookkeeping, 1);
     
     	$varlink = 'id_journal=' . $id_journal;
     
    diff --git a/htdocs/accountancy/supplier/card.php b/htdocs/accountancy/supplier/card.php
    index f126d00f2e9..439b8625342 100644
    --- a/htdocs/accountancy/supplier/card.php
    +++ b/htdocs/accountancy/supplier/card.php
    @@ -162,5 +162,6 @@ if (! empty($id)) {
     	print "Error ID incorrect";
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/supplier/index.php b/htdocs/accountancy/supplier/index.php
    index 334fd347a58..d0ee7579f3b 100644
    --- a/htdocs/accountancy/supplier/index.php
    +++ b/htdocs/accountancy/supplier/index.php
    @@ -87,7 +87,7 @@ if ($action == 'clean' || $action == 'validatehistory')
     	if (! $resql1) {
     		$error ++;
     		$db->rollback();
    -		setEventMessage($db->lasterror(), 'errors');
    +		setEventMessages($db->lasterror(), null, 'errors');
     	} else {
     		$db->commit();
     	}
    @@ -150,7 +150,7 @@ $buttonbind = '<a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?year=' .
     
     
     print_barre_liste($langs->trans("OverviewOfAmountOfLinesNotBound"), '', '', '', '', '', '', -1, '', '', 0, $buttonbind, '', 0, 1, 1);
    -//print_fiche_titre($langs->trans("OverviewOfAmountOfLinesNotBound"), $buttonbind, '');
    +//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesNotBound"), $buttonbind, '');
     
     print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
    @@ -221,7 +221,7 @@ print '<br>';
     
     
     print_barre_liste($langs->trans("OverviewOfAmountOfLinesBound"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1);
    -//print_fiche_titre($langs->trans("OverviewOfAmountOfLinesBound"), '', '');
    +//print load_fiche_titre($langs->trans("OverviewOfAmountOfLinesBound"), '', '');
     
     print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
    @@ -295,7 +295,7 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange.
         print '<br>';
     
         print_barre_liste($langs->trans("OtherInfo"), '', '', '', '', '', '', -1, '', '', 0, '', '', 0, 1, 1);
    -    //print_fiche_titre($langs->trans("OtherInfo"), '', '');
    +    //print load_fiche_titre($langs->trans("OtherInfo"), '', '');
     
     	print '<div class="div-table-responsive-no-min">';
         print '<table class="noborder" width="100%">';
    @@ -342,6 +342,6 @@ if ($conf->global->MAIN_FEATURES_LEVEL > 0) // This part of code looks strange.
         print '</div>';
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/supplier/lines.php b/htdocs/accountancy/supplier/lines.php
    index ef54dec564d..580cf4c407c 100644
    --- a/htdocs/accountancy/supplier/lines.php
    +++ b/htdocs/accountancy/supplier/lines.php
    @@ -34,6 +34,7 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array("compta","bills","other","accountancy","productbatch"));
    @@ -172,7 +173,9 @@ print '<script type="text/javascript">
     $sql = "SELECT f.rowid as facid, f.ref as ref, f.ref_supplier, f.libelle as invoice_label, f.datef, f.fk_soc,";
     $sql.= " l.rowid, l.fk_product, l.product_type as line_type, l.description, l.total_ht , l.qty, l.tva_tx, l.vat_src_code,";
     $sql.= " aa.label, aa.account_number, ";
    -$sql.= " p.rowid as product_id, p.fk_product_type as product_type, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, co.label as country, s.tva_intra";
    +$sql.= " p.rowid as product_id, p.fk_product_type as product_type, p.ref as product_ref, p.label as product_label, p.fk_product_type as type,";
    +$sql.= " co.code as country_code, co.label as country,";
    +$sql.= " s.tva_intra";
     $parameters=array();
     $reshook=$hookmanager->executeHooks('printFieldListSelect',$parameters);    // Note that $action and $object may have been modified by hook
     $sql.=$hookmanager->resPrint;
    @@ -221,7 +224,18 @@ else if ($search_year > 0)
     	$sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($search_year,1,false))."' AND '".$db->idate(dol_get_last_day($search_year,12,false))."'";
     }
     if (strlen(trim($search_country))) {
    -	$sql .= natural_search("co.label", $search_country);
    +	$arrayofcode = getCountriesInEEC();
    +	$country_code_in_EEC = $country_code_in_EEC_without_me = '';
    +	foreach ($arrayofcode as $key => $value)
    +	{
    +		$country_code_in_EEC.=($country_code_in_EEC ? "," : "")."'".$value."'";
    +		if ($value != $mysoc->country_code) $country_code_in_EEC_without_me.=($country_code_in_EEC_without_me ? "," : "")."'".$value."'";
    +	}
    +	if ($search_country == 'special_allnotme')     $sql .= " AND co.code <> '".$db->escape($mysoc->country_code)."'";
    +	elseif ($search_country == 'special_eec')      $sql .= " AND co.code IN (".$country_code_in_EEC.")";
    +	elseif ($search_country == 'special_eecnotme') $sql .= " AND co.code IN (".$country_code_in_EEC_without_me.")";
    +	elseif ($search_country == 'special_noteec')   $sql .= " AND co.code NOT IN (".$country_code_in_EEC.")";
    +	else $sql .= natural_search(array("co.code","co.label"), $search_country);
     }
     if (strlen(trim($search_tvaintra))) {
     	$sql .= natural_search("s.tva_intra", $search_tvaintra);
    @@ -299,9 +313,9 @@ if ($result) {
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth25" name="search_lineid" value="' . dol_escape_htmltag($search_lineid) . '""></td>';
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_invoice" value="' . dol_escape_htmltag($search_invoice) . '"></td>';
     	print '<td class="liste_titre"></td>';
    -	print '<td class="liste_titre center">';
    -   	if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="search_day" value="'.$search_day.'">';
    -   	print '<input class="flat" type="text" size="1" maxlength="2" name="search_month" value="'.$search_month.'">';
    +	print '<td class="liste_titre center nowraponall">';
    +   	if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat valignmiddle" type="text" size="1" maxlength="2" name="search_day" value="'.$search_day.'">';
    +   	print '<input class="flat valignmiddle" type="text" size="1" maxlength="2" name="search_month" value="'.$search_month.'">';
        	$formother->select_year($search_year,'search_year',1, 20, 5);
     	print '</td>';
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_ref" value="' . dol_escape_htmltag($search_ref) . '"></td>';
    @@ -309,7 +323,10 @@ if ($result) {
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_desc" value="' . dol_escape_htmltag($search_desc) . '"></td>';
     	print '<td class="liste_titre" align="right"><input type="text" class="right flat maxwidth50" name="search_amount" value="' . dol_escape_htmltag($search_amount) . '"></td>';
     	print '<td class="liste_titre" align="right"><input type="text" class="right flat maxwidth50" name="search_vat" placeholder="%" size="1" value="' . dol_escape_htmltag($search_vat) . '"></td>';
    -	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '"></td>';
    +	print '<td class="liste_titre">';
    +	print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth200', 'code2', 1, 0, 1);
    +	//	print '<input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '">';
    +	print '</td>';
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_tvaintra" value="' . dol_escape_htmltag($search_tvaintra) . '"></td>';
     	print '<td class="liste_titre" align="center"><input type="text" class="flat maxwidth50" name="search_account" value="' . dol_escape_htmltag($search_account) . '"></td>';
     	print '<td class="liste_titre" align="center">';
    @@ -357,7 +374,7 @@ if ($result) {
     		print '<td>' . $objp->rowid . '</td>';
     
     		// Ref Invoice
    -		print '<td>' . $facturefournisseur_static->getNomUrl(1) . '</td>';
    +		print '<td class="nowraponall">' . $facturefournisseur_static->getNomUrl(1) . '</td>';
     
     		print '<td class="tdoverflowonsmartphone">';
     		print $objp->invoice_label;
    @@ -380,9 +397,11 @@ if ($result) {
     		print '</td>';
     
     		print '<td align="right">' . price($objp->total_ht) . '</td>';
    +
     		print '<td align="right">' . vatrate($objp->tva_tx.($objp->vat_src_code?' ('.$objp->vat_src_code.')':'')) . '</td>';
     
    -		print '<td>' . $objp->country .'</td>';
    +		print '<td>' . $langs->trans("Country".$objp->country_code) .' ('.$objp->country_code.')</td>';
    +
     		print '<td>' . $objp->tva_intra . '</td>';
     
     		print '<td align="center">';
    @@ -406,7 +425,6 @@ if ($result) {
     	print $db->lasterror();
     }
     
    -
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/supplier/list.php b/htdocs/accountancy/supplier/list.php
    index 57fdf0ace48..5ac90068ffb 100644
    --- a/htdocs/accountancy/supplier/list.php
    +++ b/htdocs/accountancy/supplier/list.php
    @@ -34,6 +34,7 @@ require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingaccount.class.php
     require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array("bills","compta","accountancy","other","productbatch"));
    @@ -202,8 +203,9 @@ llxHeader('', $langs->trans("SuppliersVentilation"));
     if (empty($chartaccountcode))
     {
     	print $langs->trans("ErrorChartOfAccountSystemNotSelected");
    -	llxFooter();
    -	$db->close();
    +	// End of page
    +    llxFooter();
    +    $db->close();
     	exit;
     }
     
    @@ -212,7 +214,8 @@ $sql = "SELECT f.rowid as facid, f.ref, f.ref_supplier, f.libelle as invoice_lab
     $sql.= " l.rowid, l.fk_product, l.description, l.total_ht, l.fk_code_ventilation, l.product_type as type_l, l.tva_tx as tva_tx_line, l.vat_src_code,";
     $sql.= " p.rowid as product_id, p.ref as product_ref, p.label as product_label, p.fk_product_type as type, p.accountancy_code_buy as code_buy, p.tva_tx as tva_tx_prod,";
     $sql.= " aa.rowid as aarowid,";
    -$sql.= " co.label as country, s.tva_intra";
    +$sql.= " co.code as country_code, co.label as country,";
    +$sql.= " s.tva_intra";
     $parameters=array();
     $reshook=$hookmanager->executeHooks('printFieldListSelect',$parameters);    // Note that $action and $object may have been modified by hook
     $sql.=$hookmanager->resPrint;
    @@ -249,9 +252,6 @@ if (strlen(trim($search_account))) {
     if (strlen(trim($search_vat))) {
         $sql .= natural_search("l.tva_tx", price2num($search_vat), 1);
     }
    -if (strlen(trim($search_tvaintra))) {
    -	$sql .= natural_search("s.tva_intra", $search_tvaintra);
    -}
     if ($search_month > 0)
     {
     	if ($search_year > 0 && empty($search_day))
    @@ -266,7 +266,21 @@ else if ($search_year > 0)
     	$sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($search_year,1,false))."' AND '".$db->idate(dol_get_last_day($search_year,12,false))."'";
     }
     if (strlen(trim($search_country))) {
    -	$sql .= natural_search("co.label", $search_country);
    +	$arrayofcode = getCountriesInEEC();
    +	$country_code_in_EEC = $country_code_in_EEC_without_me = '';
    +	foreach ($arrayofcode as $key => $value)
    +	{
    +		$country_code_in_EEC.=($country_code_in_EEC ? "," : "")."'".$value."'";
    +		if ($value != $mysoc->country_code) $country_code_in_EEC_without_me.=($country_code_in_EEC_without_me ? "," : "")."'".$value."'";
    +	}
    +	if ($search_country == 'special_allnotme')     $sql .= " AND co.code <> '".$db->escape($mysoc->country_code)."'";
    +	elseif ($search_country == 'special_eec')      $sql .= " AND co.code IN (".$country_code_in_EEC.")";
    +	elseif ($search_country == 'special_eecnotme') $sql .= " AND co.code IN (".$country_code_in_EEC_without_me.")";
    +	elseif ($search_country == 'special_noteec')   $sql .= " AND co.code NOT IN (".$country_code_in_EEC.")";
    +	else $sql .= natural_search(array("co.code","co.label"), $search_country);
    +}
    +if (strlen(trim($search_tvaintra))) {
    +	$sql .= natural_search("s.tva_intra", $search_tvaintra);
     }
     if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
     	$sql .= " AND f.type IN (" . FactureFournisseur::TYPE_STANDARD . "," . FactureFournisseur::TYPE_REPLACEMENT . "," . FactureFournisseur::TYPE_CREDIT_NOTE . "," . FactureFournisseur::TYPE_SITUATION . ")";
    @@ -371,7 +385,10 @@ if ($result) {
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_desc" value="' . dol_escape_htmltag($search_desc) . '"></td>';
     	print '<td class="liste_titre" align="right"><input type="text" class="right flat maxwidth50" name="search_amount" value="' . dol_escape_htmltag($search_amount) . '"></td>';
     	print '<td class="liste_titre" align="right"><input type="text" class="right flat maxwidth50" name="search_vat" placeholder="%" size="1" value="' . dol_escape_htmltag($search_vat) . '"></td>';
    -	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '"></td>';
    +	print '<td class="liste_titre">';
    +	print $form->select_country($search_country, 'search_country', '', 0, 'maxwidth200', 'code2', 1, 0, 1);
    +	//print '<input type="text" class="flat maxwidth50" name="search_country" value="' . dol_escape_htmltag($search_country) . '">';
    +	print '</td>';
     	print '<td class="liste_titre"><input type="text" class="flat maxwidth50" name="search_tvaintra" value="' . dol_escape_htmltag($search_tvaintra) . '"></td>';
     	print '<td class="liste_titre"></td>';
     	print '<td class="liste_titre"></td>';
    @@ -452,7 +469,7 @@ if ($result) {
     		print '<td>' . $objp->rowid . '</td>';
     
     		// Ref Invoice
    -		print '<td>' . $facturefourn_static->getNomUrl(1) . '</td>';
    +		print '<td class="nowraponall">' . $facturefourn_static->getNomUrl(1) . '</td>';
     
     		print '<td class="tdoverflowonsmartphone">';
     		print $objp->invoice_label;
    @@ -532,5 +549,6 @@ jQuery(document).ready(function() {
     });
     </script>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/accountancy/tpl/export_journal.tpl.php b/htdocs/accountancy/tpl/export_journal.tpl.php
    index 773f7a7ff68..ca3c9c49ea0 100644
    --- a/htdocs/accountancy/tpl/export_journal.tpl.php
    +++ b/htdocs/accountancy/tpl/export_journal.tpl.php
    @@ -1,6 +1,6 @@
     <?php
    -/* Copyright (C) 2015  Alexandre Spangaro	<aspangaro@zendsi.com>
    - * Copyright (C) 2016  Charlie Benke		<charlie@patas-monkey.com>
    +/* Copyright (C) 2015-2018  Alexandre Spangaro	<aspangaro@zendsi.com>
    + * Copyright (C) 2016       Charlie Benke		<charlie@patas-monkey.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,11 +27,39 @@ $code = $conf->global->MAIN_INFO_ACCOUNTANT_CODE;
     $prefix = $conf->global->ACCOUNTING_EXPORT_PREFIX_SPEC;
     $format = $conf->global->ACCOUNTING_EXPORT_FORMAT;
     $nodateexport = $conf->global->ACCOUNTING_EXPORT_NO_DATE_IN_FILENAME;
    +$siren = $conf->global->MAIN_INFO_SIREN;
     
     $date_export = "_" . dol_print_date(dol_now(), '%Y%m%d%H%M%S');
    +$endaccountingperiod = dol_print_date(dol_now(), '%Y%m%d');
     
     header('Content-Type: text/csv');
     
    -$completefilename = ($code?$code . "_":"") . ($prefix?$prefix . "_":"") . $filename . ($nodateexport?"":$date_export) . "." . $format;
    +
    +if ($conf->global->ACCOUNTING_EXPORT_MODELCSV == "11" && $type_export == "general_ledger") // Specific filename for FEC model export into the general ledger
    +{
    +	// FEC format is defined here: https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000027804775&cidTexte=LEGITEXT000006069583&dateTexte=20130802&oldAction=rechCodeArticle
    +	if (empty($search_date_end))
    +	{
    +		// TODO Get the max date into bookeeping table
    +		$search_date_end = dol_now();
    +	}
    +	$datetouseforfilename = $search_date_end;
    +	$tmparray=dol_getdate($datetouseforfilename);
    +	$fiscalmonth=empty($conf->global->SOCIETE_FISCAL_MONTH_START)?1:$conf->global->SOCIETE_FISCAL_MONTH_START;
    +	// Define end of month to use
    +	if ($tmparray['mon'] <= $fiscalmonth) $tmparray['mon']=$fiscalmonth;
    +	else {
    +		$tmparray['mon']  = $fiscalmonth;
    +		$tmparray['year']++;
    +	}
    +
    +	$endaccountingperiod = dol_print_date(dol_get_last_day($tmparray['year'], $tmparray['mon']), 'dayxcard');
    +
    +	$completefilename = $siren . "FEC" . $endaccountingperiod . "." . $format;
    +}
    +else
    +{
    +	$completefilename = ($code?$code . "_":"") . ($prefix?$prefix . "_":"") . $filename . ($nodateexport?"":$date_export) . "." . $format;
    +}
     
     header('Content-Disposition: attachment;filename=' . $completefilename);
    diff --git a/htdocs/adherents/admin/adherent.php b/htdocs/adherents/admin/adherent.php
    index 4511ee0e8a7..cb1fdfac816 100644
    --- a/htdocs/adherents/admin/adherent.php
    +++ b/htdocs/adherents/admin/adherent.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012 Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2012      J. Fernando Lagrange <fernando@demo-tic.org>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
    @@ -33,8 +33,8 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
     
    -$langs->load("admin");
    -$langs->load("members");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin","members"));
     
     if (! $user->admin) accessforbidden();
     
    @@ -265,7 +265,6 @@ form_constantes($constantes, 0, $helptext);
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/admin/adherent_emails.php b/htdocs/adherents/admin/adherent_emails.php
    index 88514d83da3..9ee06cd3fa7 100644
    --- a/htdocs/adherents/admin/adherent_emails.php
    +++ b/htdocs/adherents/admin/adherent_emails.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012 Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2012      J. Fernando Lagrange <fernando@demo-tic.org>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
    @@ -33,8 +33,8 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
     
    -$langs->load("admin");
    -$langs->load("members");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin","members"));
     
     if (! $user->admin) accessforbidden();
     
    @@ -147,8 +147,9 @@ $constantes=array(
     	'ADHERENT_EMAIL_TEMPLATE_AUTOREGISTER'		=>'emailtemplate:member',		/* old was ADHERENT_AUTOREGISTER_MAIL */
     	'ADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION'	=>'emailtemplate:member',		/* old was ADHERENT_MAIL_VALID */
     	'ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION'		=>'emailtemplate:member',		/* old was ADHERENT_MAIL_COTIS */
    -	'ADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION' =>'emailtemplate:member',
     	'ADHERENT_EMAIL_TEMPLATE_CANCELATION'		=>'emailtemplate:member',		/* old was ADHERENT_MAIL_RESIL */
    +	'MEMBER_REMINDER_EMAIL'=>array('type'=>'yesno', 'label'=>$langs->trans('MEMBER_REMINDER_EMAIL', $langs->transnoentities("Module2300Name"))),
    +	'ADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION' =>'emailtemplate:member',
     );
     
     $helptext='*'.$langs->trans("FollowingConstantsWillBeSubstituted").'<br>';
    @@ -160,7 +161,6 @@ form_constantes($constantes, 0, $helptext);
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/admin/adherent_extrafields.php b/htdocs/adherents/admin/adherent_extrafields.php
    index cfdea50538f..81896a12490 100644
    --- a/htdocs/adherents/admin/adherent_extrafields.php
    +++ b/htdocs/adherents/admin/adherent_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,8 +28,8 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     
    -$langs->load("members");
    -$langs->load("admin");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin","members"));
     
     $extrafields = new ExtraFields($db);
     $form = new Form($db);
    @@ -113,6 +113,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/admin/adherent_type_extrafields.php b/htdocs/adherents/admin/adherent_type_extrafields.php
    index 2c849628ab9..ab9815a8057 100644
    --- a/htdocs/adherents/admin/adherent_type_extrafields.php
    +++ b/htdocs/adherents/admin/adherent_type_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2015		Jean-François Ferry		<jfefe@aternatik.fr>
      *
    @@ -31,8 +31,8 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     
    -$langs->load("members");
    -$langs->load("admin");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin","members"));
     
     $extrafields = new ExtraFields($db);
     $form = new Form($db);
    @@ -116,6 +116,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/admin/website.php b/htdocs/adherents/admin/website.php
    index 3f8c62eb153..51aca179195 100644
    --- a/htdocs/adherents/admin/website.php
    +++ b/htdocs/adherents/admin/website.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -19,7 +19,7 @@
      */
     
     /**
    - *     	\file       htdocs/adherents/admin/public.php
    + *     	\file       htdocs/adherents/admin/website.php
      *		\ingroup    member
      *		\brief      File of main public page for member module
      *		\author	    Laurent Destailleur
    @@ -31,8 +31,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
     
    -$langs->load("members");
    -$langs->load("admin");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin","members"));
     
     $action=GETPOST('action', 'alpha');
     
    @@ -241,7 +241,6 @@ if (! empty($conf->global->MEMBER_ENABLE_PUBLIC))
     	print '<a target="_blank" href="'.$urlwithroot.'/public/members/new.php'.$entity_qr.'">'.$urlwithroot.'/public/members/new.php'.$entity_qr.'</a>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/agenda.php b/htdocs/adherents/agenda.php
    index 2b663ecf2bc..f13efd96300 100644
    --- a/htdocs/adherents/agenda.php
    +++ b/htdocs/adherents/agenda.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005      Brice Davoleau       <brice.davoleau@gmail.com>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2007      Patrick Raguin  		<patrick.raguin@gmail.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
    @@ -33,8 +33,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
     
    -$langs->load("companies");
    -$langs->load("members");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members"));
     
     $id = GETPOST('id','int')?GETPOST('id','int'):GETPOST('rowid','int');
     
    @@ -175,8 +175,6 @@ if ($object->id > 0)
         }
     }
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/canvas/actions_adherentcard_common.class.php b/htdocs/adherents/canvas/actions_adherentcard_common.class.php
    index f49d1cecb99..d4c7147da57 100644
    --- a/htdocs/adherents/canvas/actions_adherentcard_common.class.php
    +++ b/htdocs/adherents/canvas/actions_adherentcard_common.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Philippe Grand <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -28,10 +28,10 @@
     abstract class ActionsAdherentCardCommon
     {
         /**
    -     * Database handler
    -     * @var DoliDB
    +     * @var DoliDB Database handler.
          */
    -    var $db;
    +    public $db;
    +
         var $dirmodule;
         var $targetmodule;
         var $canvas;
    @@ -41,10 +41,16 @@ abstract class ActionsAdherentCardCommon
     	var $tpl = array();
     	//! Object container
     	var $object;
    -	//! Error string
    -	var $error;
    -	//! Error array
    -	var $errors=array();
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
     
     	/**
    @@ -69,7 +75,8 @@ abstract class ActionsAdherentCardCommon
         	//}
         }
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Set content of ->tpl array, to use into template
          *
          *  @param	string		$action    Type of action
    @@ -78,6 +85,7 @@ abstract class ActionsAdherentCardCommon
          */
         function assign_values(&$action, $id)
         {
    +        // phpcs:enable
             global $conf, $langs, $user, $canvas;
             global $form, $formcompany, $objsoc;
     
    @@ -226,6 +234,7 @@ abstract class ActionsAdherentCardCommon
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
         /**
          *  Assign POST values into object
          *
    @@ -233,6 +242,7 @@ abstract class ActionsAdherentCardCommon
          */
         private function assign_post()
         {
    +        // phpcs:enable
             global $langs, $mysoc;
     
             $this->object->old_name 			= 	$_POST["old_name"];
    @@ -271,5 +281,4 @@ abstract class ActionsAdherentCardCommon
                 }
             }
         }
    -
     }
    diff --git a/htdocs/adherents/canvas/default/actions_adherentcard_default.class.php b/htdocs/adherents/canvas/default/actions_adherentcard_default.class.php
    index 451f46f899f..5ead332bf5f 100644
    --- a/htdocs/adherents/canvas/default/actions_adherentcard_default.class.php
    +++ b/htdocs/adherents/canvas/default/actions_adherentcard_default.class.php
    @@ -1,7 +1,7 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012       Philippe Grand      <philippe.grand@atoo-net.com>
    + * Copyright (C) 2012-2018  Philippe Grand      <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -20,20 +20,20 @@
     /**
      *	\file       htdocs/adherents/canvas/default/actions_adherentcard_default.class.php
      *	\ingroup    member
    - *	\brief      Fichier de la classe Thirdparty adherent card controller (default canvas)
    + *	\brief      File of class Thirdparty member card controller (default canvas)
      */
     include_once DOL_DOCUMENT_ROOT.'/adherents/canvas/actions_adherentcard_common.class.php';
     
     /**
      *	\class      ActionsAdherentCardDefault
    - *	\brief      Classe permettant la gestion des adherents par defaut
    + *	\brief      Class allowing the management of the members by default
      */
     class ActionsAdherentCardDefault extends ActionsAdherentCardCommon
     {
     	/**
          *	Constructor
          *
    -     *	@param	DoliDB	$db				Handler acces base de donnees
    +     *	@param	DoliDB	$db				Handler acces data base
          *	@param	string	$dirmodule		Name of directory of module
          *	@param	string	$targetmodule	Name of directory of module where canvas is stored
          *	@param	string	$canvas			Name of canvas
    @@ -51,7 +51,7 @@ class ActionsAdherentCardDefault extends ActionsAdherentCardCommon
     	/**
     	 * 	Return the title of card
     	 *
    -	 * 	@param	string	$action		Code action
    +	 * 	@param	string	$action		Action code
     	 * 	@return	string				Title
     	 */
     	private function getTitle($action)
    @@ -67,6 +67,7 @@ class ActionsAdherentCardDefault extends ActionsAdherentCardCommon
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Assign custom values for canvas
     	 *
    @@ -76,6 +77,7 @@ class ActionsAdherentCardDefault extends ActionsAdherentCardCommon
     	 */
     	function assign_values(&$action, $id)
     	{
    +        // phpcs:enable
     		global $limit, $offset, $sortfield, $sortorder;
     		global $conf, $db, $langs, $user;
     		global $form;
    @@ -117,10 +119,10 @@ class ActionsAdherentCardDefault extends ActionsAdherentCardCommon
     		{
     	        $this->LoadListDatas($limit, $offset, $sortfield, $sortorder);
     		}
    -
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Fetch datas list and save into ->list_datas
     	 *
    @@ -132,6 +134,7 @@ class ActionsAdherentCardDefault extends ActionsAdherentCardCommon
     	 */
     	function LoadListDatas($limit, $offset, $sortfield, $sortorder)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
             //$this->getFieldList();
    @@ -139,4 +142,3 @@ class ActionsAdherentCardDefault extends ActionsAdherentCardCommon
             $this->list_datas = array();
     	}
     }
    -
    diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php
    index 81f34706966..99174e7770b 100644
    --- a/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php
    +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_create.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
      * Copyright (C) 2012 Philippe Grand <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php
    index 4a699b75a22..a0331fee35e 100644
    --- a/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php
    +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_edit.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
      * Copyright (C) 2012 Philippe Grand <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php
    index f19ba96c167..14439bb6e87 100644
    --- a/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php
    +++ b/htdocs/adherents/canvas/default/tpl/adherentcard_view.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Philippe Grand <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/adherents/card.php b/htdocs/adherents/card.php
    index c29743b60c4..347c29fc30d 100644
    --- a/htdocs/adherents/card.php
    +++ b/htdocs/adherents/card.php
    @@ -1,11 +1,12 @@
     <?php
    -/* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
    - * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2018 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2012      Marcos García        <marcosgdf@gmail.com>
    - * Copyright (C) 2012-2018 Philippe Grand       <philippe.grand@atoo-net.com>
    - * Copyright (C) 2015-2016 Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
    +/* Copyright (C) 2001-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2002-2003  Jean-Louis Bergamo      <jlb@j1b.org>
    + * Copyright (C) 2004-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2018  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2012       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2012-2018  Philippe Grand          <philippe.grand@atoo-net.com>
    + * Copyright (C) 2015-2016  Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -300,6 +301,8 @@ if (empty($reshook))
     			$object->phone_mobile= trim(GETPOST("phone_mobile",'alpha'));
     			$object->email       = preg_replace('/\s+/', '', GETPOST("member_email",'alpha'));
     			$object->skype       = trim(GETPOST("skype",'alpha'));
    +			$object->twitter     = trim(GETPOST("twitter",'alpha'));
    +			$object->facebook    = trim(GETPOST("facebook",'alpha'));
     			$object->birth       = $birthdate;
     
     			$object->typeid      = GETPOST("typeid",'int');
    @@ -442,6 +445,8 @@ if (empty($reshook))
     		$phone_perso=GETPOST("phone_perso",'alpha');
     		$phone_mobile=GETPOST("phone_mobile",'alpha');
     		$skype=GETPOST("member_skype",'alpha');
    +		$twitter=GETPOST("member_twitter",'alpha');
    +		$facebook=GETPOST("member_facebook",'alpha');
     		$email=preg_replace('/\s+/', '', GETPOST("member_email",'alpha'));
     		$login=GETPOST("member_login",'alpha');
     		$pass=GETPOST("password",'alpha');
    @@ -466,7 +471,11 @@ if (empty($reshook))
     		$object->phone       = $phone;
     		$object->phone_perso = $phone_perso;
     		$object->phone_mobile= $phone_mobile;
    +
     		$object->skype       = $skype;
    +		$object->twitter     = $twitter;
    +		$object->facebook    = $facebook;
    +
     		$object->email       = $email;
     		$object->login       = $login;
     		$object->pass        = $pass;
    @@ -621,8 +630,9 @@ if (empty($reshook))
     				// Set output language
     				$outputlangs = new Translate('', $conf);
     				$outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
    +				// Load traductions files requiredby by page
     				$outputlangs->loadLangs(array("main", "members"));
    -				// Get email content fro mtemplae
    +				// Get email content from template
     				$arraydefaultmessage=null;
     				$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_MEMBER_VALIDATION;
     
    @@ -634,27 +644,26 @@ if (empty($reshook))
     					$msg     = $arraydefaultmessage->content;
     				}
     
    -                if (empty($labeltouse) || (int) $labeltouse === -1) {
    -                    //fallback on the old configuration.
    -                    setEventMessages('WarningMandatorySetupNotComplete', [], 'errors');
    -                    $error++;
    -                }else{
    -                    $substitutionarray=getCommonSubstitutionArray($outputlangs, 0, null, $object);
    -                    complete_substitutions_array($substitutionarray, $outputlangs, $object);
    -                    $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs);
    -                    $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnValid()), $substitutionarray, $outputlangs);
    -
    -                    $moreinheader='X-Dolibarr-Info: send_an_email by adherents/card.php'."\r\n";
    -
    -                    $result=$object->send_an_email($texttosend, $subjecttosend, array(), array(), array(), "", "", 0, -1, '', $moreinheader);
    -                    if ($result < 0)
    -                    {
    -                        $error++;
    -                        setEventMessages($object->error, $object->errors, 'errors');
    -                    }
    -                }
    +				if (empty($labeltouse) || (int) $labeltouse === -1) {
    +					//fallback on the old configuration.
    +					setEventMessages('WarningMandatorySetupNotComplete', [], 'errors');
    +					$error++;
    +				}
    +				else {
    +					$substitutionarray=getCommonSubstitutionArray($outputlangs, 0, null, $object);
    +					complete_substitutions_array($substitutionarray, $outputlangs, $object);
    +					$subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs);
    +					$texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnValid()), $substitutionarray, $outputlangs);
     
    +					$moreinheader='X-Dolibarr-Info: send_an_email by adherents/card.php'."\r\n";
     
    +					$result=$object->send_an_email($texttosend, $subjecttosend, array(), array(), array(), "", "", 0, -1, '', $moreinheader);
    +					if ($result < 0)
    +					{
    +						$error++;
    +						setEventMessages($object->error, $object->errors, 'errors');
    +					}
    +				}
     			}
     		}
     		else
    @@ -702,8 +711,9 @@ if (empty($reshook))
     					// Set output language
     					$outputlangs = new Translate('', $conf);
     					$outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
    +					// Load traductions files requiredby by page
     					$outputlangs->loadLangs(array("main", "members"));
    -					// Get email content fro mtemplae
    +					// Get email content from template
     					$arraydefaultmessage=null;
     					$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_CANCELATION;
     
    @@ -715,28 +725,27 @@ if (empty($reshook))
     						$msg     = $arraydefaultmessage->content;
     					}
     
    -                    if (empty($labeltouse) || (int) $labeltouse === -1) {
    -                        //fallback on the old configuration.
    -                        setEventMessages('WarningMandatorySetupNotComplete', [], 'errors');
    -                        $error++;
    -                    }else{
    -                        $substitutionarray=getCommonSubstitutionArray($outputlangs, 0, null, $object);
    -                        complete_substitutions_array($substitutionarray, $outputlangs, $object);
    -                        $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs);
    -                        $texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnResiliate()), $substitutionarray, $outputlangs);
    -
    -                        $moreinheader='X-Dolibarr-Info: send_an_email by adherents/card.php'."\r\n";
    -
    -                        $result=$object->send_an_email($texttosend, $subjecttosend, array(), array(), array(), "", "", 0, -1, '', $moreinheader);
    -                        if ($result < 0)
    -                        {
    -                            $error++;
    -                            setEventMessages($object->error, $object->errors, 'errors');
    -                        }
    -                    }
    -                }
    +					if (empty($labeltouse) || (int) $labeltouse === -1) {
    +						//fallback on the old configuration.
    +						setEventMessages('WarningMandatorySetupNotComplete', [], 'errors');
    +						$error++;
    +					}
    +					else {
    +						$substitutionarray=getCommonSubstitutionArray($outputlangs, 0, null, $object);
    +						complete_substitutions_array($substitutionarray, $outputlangs, $object);
    +						$subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs);
    +						$texttosend = make_substitutions(dol_concatdesc($msg, $adht->getMailOnResiliate()), $substitutionarray, $outputlangs);
     
    +						$moreinheader='X-Dolibarr-Info: send_an_email by adherents/card.php'."\r\n";
     
    +						$result=$object->send_an_email($texttosend, $subjecttosend, array(), array(), array(), "", "", 0, -1, '', $moreinheader);
    +						if ($result < 0)
    +						{
    +							$error++;
    +							setEventMessages($object->error, $object->errors, 'errors');
    +						}
    +					}
    +				}
     			}
     			else
     			{
    @@ -794,7 +803,6 @@ if (empty($reshook))
     	$mode='emailfrommember';
     	$trackid='mem'.$object->id;
     	include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
    -
     }
     
     
    @@ -899,7 +907,7 @@ else
     		// Login
     		if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED))
     		{
    -			print '<tr><td><span class="fieldrequired">'.$langs->trans("Login").' / '.$langs->trans("Id").'</span></td><td><input type="text" name="member_login" class="minwidth300" maxlength="50" value="'.(isset($_POST["member_login"])?GETPOST("member_login", 'alpha', 2):$object->login).'"></td></tr>';
    +			print '<tr><td><span class="fieldrequired">'.$langs->trans("Login").' / '.$langs->trans("Id").'</span></td><td><input type="text" name="member_login" class="minwidth300" maxlength="50" value="'.(isset($_POST["member_login"])?GETPOST("member_login", 'alpha', 2):$object->login).'" autofocus="autofocus"></td></tr>';
     		}
     
     		// Password
    @@ -993,14 +1001,26 @@ else
     		print '<tr><td>'.$langs->trans("PhoneMobile").'</td><td><input type="text" name="phone_mobile" size="20" value="'.(GETPOST('phone_mobile','alpha')?GETPOST('phone_mobile','alpha'):$object->phone_mobile).'"></td></tr>';
     
     	    // Skype
    -	    if (! empty($conf->skype->enabled))
    +	    if (! empty($conf->socialnetworks->enabled))
     	    {
     			print '<tr><td>'.$langs->trans("Skype").'</td><td><input type="text" name="member_skype" size="40" value="'.(GETPOST('member_skype','alpha')?GETPOST('member_skype','alpha'):$object->skype).'"></td></tr>';
     	    }
     
    -		// Birthday
    +	    // Twitter
    +	    if (! empty($conf->socialnetworks->enabled))
    +	    {
    +	    	print '<tr><td>'.$langs->trans("Twitter").'</td><td><input type="text" name="member_twitter" size="40" value="'.(GETPOST('member_twitter','alpha')?GETPOST('member_twitter','alpha'):$object->twitter).'"></td></tr>';
    +	    }
    +
    +	    // Facebook
    +	    if (! empty($conf->socialnetworks->enabled))
    +	    {
    +	    	print '<tr><td>'.$langs->trans("Facebook").'</td><td><input type="text" name="member_facebook" size="40" value="'.(GETPOST('member_facebook','alpha')?GETPOST('member_facebook','alpha'):$object->facebook).'"></td></tr>';
    +	    }
    +
    +	    // Birthday
     		print "<tr><td>".$langs->trans("Birthday")."</td><td>\n";
    -		$form->select_date(($object->birth ? $object->birth : -1),'birth','','',1,'formsoc');
    +		print $form->selectDate(($object->birth ? $object->birth : -1),'birth','','',1,'formsoc');
     		print "</td></tr>\n";
     
     		// Public profil
    @@ -1231,14 +1251,26 @@ else
     		print '<tr><td>'.$langs->trans("PhoneMobile").'</td><td><input type="text" name="phone_mobile" size="20" value="'.(isset($_POST["phone_mobile"])?GETPOST("phone_mobile"):$object->phone_mobile).'"></td></tr>';
     
     	    // Skype
    -	    if (! empty($conf->skype->enabled))
    +	    if (! empty($conf->socialnetworks->enabled))
     	    {
    -			    print '<tr><td>'.$langs->trans("Skype").'</td><td><input type="text" name="skype" class="minwidth100" value="'.(isset($_POST["skype"])?GETPOST("skype"):$object->skype).'"></td></tr>';
    +			print '<tr><td>'.$langs->trans("Skype").'</td><td><input type="text" name="skype" class="minwidth100" value="'.(isset($_POST["skype"])?GETPOST("skype"):$object->skype).'"></td></tr>';
     	    }
     
    -		// Birthday
    +	    // Twitter
    +	    if (! empty($conf->socialnetworks->enabled))
    +	    {
    +	    	print '<tr><td>'.$langs->trans("Twitter").'</td><td><input type="text" name="twitter" class="minwidth100" value="'.(isset($_POST["twitter"])?GETPOST("twitter"):$object->twitter).'"></td></tr>';
    +	    }
    +
    +	    // Facebook
    +	    if (! empty($conf->socialnetworks->enabled))
    +	    {
    +	    	print '<tr><td>'.$langs->trans("Facebook").'</td><td><input type="text" name="facebook" class="minwidth100" value="'.(isset($_POST["facebook"])?GETPOST("facebook"):$object->facebook).'"></td></tr>';
    +	    }
    +
    +	    // Birthday
     		print "<tr><td>".$langs->trans("Birthday")."</td><td>\n";
    -		$form->select_date(($object->birth ? $object->birth : -1),'birth','','',1,'formsoc');
    +		print $form->selectDate(($object->birth ? $object->birth : -1),'birth','','',1,'formsoc');
     		print "</td></tr>\n";
     
     		// Public profil
    @@ -1301,7 +1333,6 @@ else
     		print '</div>';
     
     		print '</form>';
    -
     	}
     
     	if ($id > 0 && $action != 'edit')
    @@ -1403,6 +1434,7 @@ else
     			// Set output language
     			$outputlangs = new Translate('', $conf);
     			$outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
    +			// Load traductions files requiredby by page
     			$outputlangs->loadLangs(array("main", "members"));
     			// Get email content from template
     			$arraydefaultmessage=null;
    @@ -1463,8 +1495,9 @@ else
     			// Set output language
     			$outputlangs = new Translate('', $conf);
     			$outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
    +			// Load traductions files requiredby by page
     			$outputlangs->loadLangs(array("main", "members"));
    -			// Get email content fro mtemplae
    +			// Get email content from template
     			$arraydefaultmessage=null;
     			$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_CANCELATION;
     
    @@ -1837,7 +1870,6 @@ else
     						print '<div class="inline-block divButAction"><a class="butAction" href="card.php?rowid='.$object->id.'&action=add_spip">'.$langs->trans("AddIntoSpip")."</a></div>\n";
     					}
     				}
    -
     			}
     		}
     		print '</div>';
    @@ -1916,6 +1948,6 @@ else
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/cartes/carte.php b/htdocs/adherents/cartes/carte.php
    index be3a13d8771..c50de6f8c81 100644
    --- a/htdocs/adherents/cartes/carte.php
    +++ b/htdocs/adherents/cartes/carte.php
    @@ -208,7 +208,6 @@ if ((! empty($foruserid) || ! empty($foruserlogin) || ! empty($mode)) && ! $mesg
                 	$mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("DescADHERENT_CARD_TYPE"));
                 }
                 if (! $mesg) $result=members_card_pdf_create($db, $arrayofmembers, $model, $outputlangs);
    -
             }
             elseif ($mode == 'label')
             {
    @@ -310,6 +309,6 @@ print '<br><input class="button" type="submit" value="'.$langs->trans("BuildDoc"
     print '</form>';
     print '<br>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/class/adherent.class.php b/htdocs/adherents/class/adherent.class.php
    index a5ca1691096..9d6c5d02bb4 100644
    --- a/htdocs/adherents/class/adherent.class.php
    +++ b/htdocs/adherents/class/adherent.class.php
    @@ -4,10 +4,10 @@
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2009-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2014-2016	Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2015		Marcos García			<marcosgdf@gmail.com>
    - * Copyright (C) 2015		Frederic France			<frederic.france@free.fr>
    + * Copyright (C) 2015-2018  Frédéric France			<frederic.france@netlogic.fr>
      * Copyright (C) 2015		Raphaël Doursenaud		<rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2016		Juanjo Menent			<jmenent@2byte.es>
      *
    @@ -41,72 +41,125 @@ require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
      */
     class Adherent extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='member';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='adherent';
    -	public $ismultientitymanaged = 1;  // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     
    -	var $mesgs;
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
     
    -	var $login;
    +	public $mesgs;
    +
    +	public $login;
     
     	//! Clear password in memory
    -	var $pass;
    +	public $pass;
     	//! Clear password in database (defined if DATABASE_PWD_ENCRYPTED=0)
    -	var $pass_indatabase;
    +	public $pass_indatabase;
     	//! Encrypted password in database (always defined)
    -	var $pass_indatabase_crypted;
    +	public $pass_indatabase_crypted;
     
    -	var $societe;
    -	var $company;
    -	var $address;
    -	var $zip;
    -	var $town;
    +	public $societe;
     
    -	var $state_id;              // Id of department
    -	var $state_code;            // Code of department
    -	var $state;                 // Label of department
    +	/**
    +	 * @var Societe $company {@type Societe}
    +	 */
    +	public $company;
     
    -	var $email;
    -	var $skype;
    -	var $phone;
    -	var $phone_perso;
    -	var $phone_mobile;
    +	/**
    +	 * @var string Address
    +	 */
    +	public $address;
     
    -	var $morphy;
    -	var $public;
    -	var $statut;			// -1:brouillon, 0:resilie, >=1:valide,paye
    -	var $photo;
    +	public $zip;
    +	public $town;
     
    -	var $datec;
    -	var $datem;
    -	var $datevalid;
    -	var $birth;
    +	public $state_id;              // Id of department
    +	public $state_code;            // Code of department
    +	public $state;                 // Label of department
     
    -	var $note_public;
    -	var $note_private;
    +	public $email;
     
    -	var $typeid;			// Id type adherent
    -	var $type;				// Libelle type adherent
    -	var $need_subscription;
    +	public $skype;
    +	public $twitter;
    +	public $facebook;
     
    -	var $user_id;
    -	var $user_login;
    +    /**
    +     * @var string Phone number
    +     */
    +	public $phone;
     
    -	var $fk_soc;
    +    /**
    +     * @var string Private Phone number
    +     */
    +	public $phone_perso;
     
    -	var $datefin;	// From member table
    +    /**
    +     * @var string Mobile phone number
    +     */
    +	public $phone_mobile;
    +
    +    /**
    +     * @var string Fax number
    +     */
    +    public $fax;
    +
    +    /**
    +     * @var string Function
    +     */
    +    public $poste;
    +
    +	public $morphy;
    +	public $public;
    +	public $statut;			// -1:brouillon, 0:resilie, >=1:valide,paye
    +	public $photo;
    +
    +	public $datec;
    +	public $datem;
    +	public $datevalid;
    +
    +	public $birth;
    +
    +	public $note_public;
    +	public $note_private;
    +
    +	public $typeid;			// Id type adherent
    +	public $type;				// Libelle type adherent
    +	public $need_subscription;
    +
    +	public $user_id;
    +	public $user_login;
    +
    +	/**
    +	 * @var int Thirdparty ID
    +	 */
    +    public $fk_soc;
    +
    +	public $datefin;	// From member table
     
     	// Fields loaded by fetch_subscriptions()
    -	var $first_subscription_date;
    -	var $first_subscription_amount;
    -	var $last_subscription_date;
    -	var $last_subscription_date_start;
    -	var $last_subscription_date_end;
    -	var $last_subscription_amount;
    -	var $subscriptions=array();
    +	public $first_subscription_date;
    +	public $first_subscription_amount;
    +	public $last_subscription_date;
    +	public $last_subscription_date_start;
    +	public $last_subscription_date_end;
    +	public $last_subscription_amount;
    +	public $subscriptions=array();
     
    -	var $oldcopy;		// To contains a clone of this when we need to save old properties of object
    +	public $oldcopy;		// To contains a clone of this when we need to save old properties of object
     
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
     
     	/**
    @@ -125,6 +178,7 @@ class Adherent extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Function sending an email to the current member with the text supplied in parameter.
     	 *
    @@ -143,6 +197,7 @@ class Adherent extends CommonObject
     	 */
     	function send_an_email($text, $subject, $filename_list=array(), $mimetype_list=array(), $mimefilename_list=array(), $addr_cc="", $addr_bcc="", $deliveryreceipt=0, $msgishtml=-1, $errors_to='', $moreinheader='')
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		// Detect if message is HTML
    @@ -438,6 +493,8 @@ class Adherent extends CommonObject
     		$sql.= ", state_id = ".($this->state_id>0?$this->db->escape($this->state_id):"null");
     		$sql.= ", email = '".$this->db->escape($this->email)."'";
     		$sql.= ", skype = '".$this->db->escape($this->skype)."'";
    +		$sql.= ", twitter = '".$this->db->escape($this->twitter)."'";
    +		$sql.= ", facebook = '".$this->db->escape($this->facebook)."'";
     		$sql.= ", phone = ".($this->phone?"'".$this->db->escape($this->phone)."'":"null");
     		$sql.= ", phone_perso = ".($this->phone_perso?"'".$this->db->escape($this->phone_perso)."'":"null");
     		$sql.= ", phone_mobile = ".($this->phone_mobile?"'".$this->db->escape($this->phone_mobile)."'":"null");
    @@ -544,6 +601,8 @@ class Adherent extends CommonObject
     
     						$luser->email=$this->email;
     						$luser->skype=$this->skype;
    +						$luser->twitter=$this->twitter;
    +						$luser->facebook=$this->facebook;
     						$luser->office_phone=$this->phone;
     						$luser->user_mobile=$this->phone_mobile;
     
    @@ -583,6 +642,8 @@ class Adherent extends CommonObject
     						$lthirdparty->town=$this->town;
     						$lthirdparty->email=$this->email;
     						$lthirdparty->skype=$this->skype;
    +						$lthirdparty->twitter=$this->twitter;
    +						$lthirdparty->facebook=$this->facebook;
     						$lthirdparty->phone=$this->phone;
     						$lthirdparty->state_id=$this->state_id;
     						$lthirdparty->country_id=$this->country_id;
    @@ -633,6 +694,7 @@ class Adherent extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Update denormalized last subscription date.
     	 * 	This function is called when we delete a subscription for example.
    @@ -642,6 +704,7 @@ class Adherent extends CommonObject
     	 */
     	function update_end_date($user)
     	{
    +        // phpcs:enable
     		$this->db->begin();
     
     		// Search for last subscription id and end date
    @@ -686,7 +749,6 @@ class Adherent extends CommonObject
     			$this->db->rollback();
     			return -1;
     		}
    -
     	}
     
     	/**
    @@ -988,6 +1050,7 @@ class Adherent extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Method to load member from its login
     	 *
    @@ -996,6 +1059,7 @@ class Adherent extends CommonObject
     	 */
     	function fetch_login($login)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."adherent";
    @@ -1017,6 +1081,7 @@ class Adherent extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Method to load member from its name
     	 *
    @@ -1026,6 +1091,7 @@ class Adherent extends CommonObject
     	 */
     	function fetch_name($firstname,$lastname)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."adherent";
    @@ -1065,7 +1131,7 @@ class Adherent extends CommonObject
     
     		$sql = "SELECT d.rowid, d.ref_ext, d.civility as civility_id, d.firstname, d.lastname, d.societe as company, d.fk_soc, d.statut, d.public, d.address, d.zip, d.town, d.note_private,";
     		$sql.= " d.note_public,";
    -		$sql.= " d.email, d.skype, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass, d.pass_crypted,";
    +		$sql.= " d.email, d.skype, d.twitter, d.facebook, d.phone, d.phone_perso, d.phone_mobile, d.login, d.pass, d.pass_crypted,";
     		$sql.= " d.photo, d.fk_adherent_type, d.morphy, d.entity,";
     		$sql.= " d.datec as datec,";
     		$sql.= " d.tms as datem,";
    @@ -1137,7 +1203,10 @@ class Adherent extends CommonObject
     				$this->phone_perso		= $obj->phone_perso;
     				$this->phone_mobile		= $obj->phone_mobile;
     				$this->email			= $obj->email;
    +
     				$this->skype			= $obj->skype;
    +				$this->twitter			= $obj->twitter;
    +				$this->facebook			= $obj->facebook;
     
     				$this->photo			= $obj->photo;
     				$this->statut			= $obj->statut;
    @@ -1188,6 +1257,7 @@ class Adherent extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to get member subscriptions data
     	 *				first_subscription_date, first_subscription_date_start, first_subscription_date_end, first_subscription_amount
    @@ -1197,6 +1267,7 @@ class Adherent extends CommonObject
     	 */
     	function fetch_subscriptions()
     	{
    +        // phpcs:enable
     		global $langs;
     
     		require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
    @@ -1744,6 +1815,7 @@ class Adherent extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Function to add member into external tools mailing-list, spip, etc.
     	 *
    @@ -1751,6 +1823,7 @@ class Adherent extends CommonObject
     	 */
     	function add_to_abo()
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		include_once DOL_DOCUMENT_ROOT.'/mailmanspip/class/mailmanspip.class.php';
    @@ -1801,6 +1874,7 @@ class Adherent extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Function to delete a member from external tools like mailing-list, spip, etc.
     	 *
    @@ -1808,6 +1882,7 @@ class Adherent extends CommonObject
     	 */
     	function del_to_abo()
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		include_once DOL_DOCUMENT_ROOT.'/mailmanspip/class/mailmanspip.class.php';
    @@ -1980,6 +2055,7 @@ class Adherent extends CommonObject
     		return $this->LibStatut($this->statut,$this->need_subscription,$this->datefin,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -1991,79 +2067,73 @@ class Adherent extends CommonObject
     	 */
     	function LibStatut($statut,$need_subscription,$date_end_subscription,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load("members");
     		if ($mode == 0)
     		{
     			if ($statut == -1) return $langs->trans("MemberStatusDraft");
    -			if ($statut >= 1)
    -			{
    +			elseif ($statut >= 1) {
     				if (! $date_end_subscription)            return $langs->trans("MemberStatusActive");
     				elseif ($date_end_subscription < time()) return $langs->trans("MemberStatusActiveLate");
     				else                                     return $langs->trans("MemberStatusPaid");
     			}
    -			if ($statut == 0)  return $langs->trans("MemberStatusResiliated");
    +			elseif ($statut == 0)  return $langs->trans("MemberStatusResiliated");
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($statut == -1) return $langs->trans("MemberStatusDraftShort");
    -			if ($statut >= 1)
    -			{
    +			elseif ($statut >= 1) {
     				if (! $date_end_subscription)            return $langs->trans("MemberStatusActiveShort");
     				elseif ($date_end_subscription < time()) return $langs->trans("MemberStatusActiveLateShort");
     				else                                     return $langs->trans("MemberStatusPaidShort");
     			}
    -			if ($statut == 0)  return $langs->trans("MemberStatusResiliatedShort");
    +			elseif ($statut == 0)  return $langs->trans("MemberStatusResiliatedShort");
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut == -1) return img_picto($langs->trans('MemberStatusDraft'),'statut0').' '.$langs->trans("MemberStatusDraftShort");
    -			if ($statut >= 1)
    -			{
    +			elseif ($statut >= 1) {
     				if (! $date_end_subscription)            return img_picto($langs->trans('MemberStatusActive'),'statut1').' '.$langs->trans("MemberStatusActiveShort");
     				elseif ($date_end_subscription < time()) return img_picto($langs->trans('MemberStatusActiveLate'),'statut3').' '.$langs->trans("MemberStatusActiveLateShort");
     				else                                     return img_picto($langs->trans('MemberStatusPaid'),'statut4').' '.$langs->trans("MemberStatusPaidShort");
     			}
    -			if ($statut == 0)  return img_picto($langs->trans('MemberStatusResiliated'),'statut5').' '.$langs->trans("MemberStatusResiliatedShort");
    +			elseif ($statut == 0)  return img_picto($langs->trans('MemberStatusResiliated'),'statut5').' '.$langs->trans("MemberStatusResiliatedShort");
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut == -1) return img_picto($langs->trans('MemberStatusDraft'),'statut0');
    -			if ($statut >= 1)
    -			{
    +			elseif ($statut >= 1) {
     				if (! $date_end_subscription)            return img_picto($langs->trans('MemberStatusActive'),'statut1');
     				elseif ($date_end_subscription < time()) return img_picto($langs->trans('MemberStatusActiveLate'),'statut3');
     				else                                     return img_picto($langs->trans('MemberStatusPaid'),'statut4');
     			}
    -			if ($statut == 0)  return img_picto($langs->trans('MemberStatusResiliated'),'statut5');
    +			elseif ($statut == 0)  return img_picto($langs->trans('MemberStatusResiliated'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut == -1) return img_picto($langs->trans('MemberStatusDraft'),'statut0').' '.$langs->trans("MemberStatusDraft");
    -			if ($statut >= 1)
    -			{
    +			elseif ($statut >= 1) {
     				if (! $date_end_subscription)            return img_picto($langs->trans('MemberStatusActive'),'statut1').' '.$langs->trans("MemberStatusActive");
     				elseif ($date_end_subscription < time()) return img_picto($langs->trans('MemberStatusActiveLate'),'statut3').' '.$langs->trans("MemberStatusActiveLate");
     				else                                     return img_picto($langs->trans('MemberStatusPaid'),'statut4').' '.$langs->trans("MemberStatusPaid");
     			}
     			if ($statut == 0)  return img_picto($langs->trans('MemberStatusResiliated'),'statut5').' '.$langs->trans("MemberStatusResiliated");
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut == -1) return $langs->trans("MemberStatusDraft").' '.img_picto($langs->trans('MemberStatusDraft'),'statut0');
    -			if ($statut >= 1)
    -			{
    +			elseif ($statut >= 1) {
     				if (! $date_end_subscription)            return '<span class="hideonsmartphone">'.$langs->trans("MemberStatusActiveShort").' </span>'.img_picto($langs->trans('MemberStatusActive'),'statut1');
     				elseif ($date_end_subscription < time()) return '<span class="hideonsmartphone">'.$langs->trans("MemberStatusActiveLateShort").' </span>'.img_picto($langs->trans('MemberStatusActiveLate'),'statut3');
     				else                                     return '<span class="hideonsmartphone">'.$langs->trans("MemberStatusPaidShort").' </span>'.img_picto($langs->trans('MemberStatusPaid'),'statut4');
     			}
     			if ($statut == 0)  return '<span class="hideonsmartphone">'.$langs->trans("MemberStatusResiliated").' </span>'.img_picto($langs->trans('MemberStatusResiliated'),'statut5');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($statut == -1) return $langs->trans("MemberStatusDraft").' '.img_picto($langs->trans('MemberStatusDraft'),'statut0');
    -			if ($statut >= 1)
    -			{
    +			if ($statut >= 1) {
     				if (! $date_end_subscription)            return '<span class="hideonsmartphone">'.$langs->trans("MemberStatusActive").' </span>'.img_picto($langs->trans('MemberStatusActive'),'statut1');
     				elseif ($date_end_subscription < time()) return '<span class="hideonsmartphone">'.$langs->trans("MemberStatusActiveLate").' </span>'.img_picto($langs->trans('MemberStatusActiveLate'),'statut3');
     				else                                     return '<span class="hideonsmartphone">'.$langs->trans("MemberStatusPaid").' </span>'.img_picto($langs->trans('MemberStatusPaid'),'statut4');
    @@ -2073,6 +2143,7 @@ class Adherent extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Charge indicateurs this->nb de tableau de bord
     	 *
    @@ -2080,9 +2151,10 @@ class Adherent extends CommonObject
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $conf;
     
    -		$this->nb=array();
    +		$this->nb = array();
     
     		$sql = "SELECT count(a.rowid) as nb";
     		$sql.= " FROM ".MAIN_DB_PREFIX."adherent as a";
    @@ -2105,9 +2177,9 @@ class Adherent extends CommonObject
     			$this->error=$this->db->error();
     			return -1;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
     	 *
    @@ -2116,6 +2188,7 @@ class Adherent extends CommonObject
     	 */
     	function load_board($user)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		if ($user->societe_id) return -1;   // protection pour eviter appel par utilisateur externe
    @@ -2226,7 +2299,9 @@ class Adherent extends CommonObject
     		$this->country = 'France';
     		$this->morphy = 1;
     		$this->email = 'specimen@specimen.com';
    -		$this->skype = 'tom.hanson';
    +		$this->skype = 'skypepseudo';
    +		$this->twitter = 'twitterpseudo';
    +		$this->facebook = 'facebookpseudo';
     		$this->phone        = '0999999999';
     		$this->phone_perso  = '0999999998';
     		$this->phone_mobile = '0999999997';
    @@ -2255,6 +2330,7 @@ class Adherent extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Retourne chaine DN complete dans l'annuaire LDAP pour l'objet
     	 *
    @@ -2266,6 +2342,7 @@ class Adherent extends CommonObject
     	 */
     	function _load_ldap_dn($info,$mode=0)
     	{
    +        // phpcs:enable
     		global $conf;
     		$dn='';
     		if ($mode==0) $dn=$conf->global->LDAP_KEY_MEMBERS."=".$info[$conf->global->LDAP_KEY_MEMBERS].",".$conf->global->LDAP_MEMBER_DN;
    @@ -2275,6 +2352,7 @@ class Adherent extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Initialise tableau info (tableau des attributs LDAP)
     	 *
    @@ -2282,6 +2360,7 @@ class Adherent extends CommonObject
     	 */
     	function _load_ldap_info()
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$info=array();
    @@ -2329,6 +2408,8 @@ class Adherent extends CommonObject
     		if ($this->town && ! empty($conf->global->LDAP_MEMBER_FIELD_TOWN))						$info[$conf->global->LDAP_MEMBER_FIELD_TOWN] = $this->town;
     		if ($this->country_code && ! empty($conf->global->LDAP_MEMBER_FIELD_COUNTRY))			$info[$conf->global->LDAP_MEMBER_FIELD_COUNTRY] = $this->country_code;
     		if ($this->skype && ! empty($conf->global->LDAP_MEMBER_FIELD_SKYPE))					$info[$conf->global->LDAP_MEMBER_FIELD_SKYPE] = $this->skype;
    +		if ($this->twitter && ! empty($conf->global->LDAP_MEMBER_FIELD_TWITTER))				$info[$conf->global->LDAP_MEMBER_FIELD_TWITTER] = $this->twitter;
    +		if ($this->facebook && ! empty($conf->global->LDAP_MEMBER_FIELD_FACEBOOK))				$info[$conf->global->LDAP_MEMBER_FIELD_FACEBOOK] = $this->facebook;
     		if ($this->phone && ! empty($conf->global->LDAP_MEMBER_FIELD_PHONE))					$info[$conf->global->LDAP_MEMBER_FIELD_PHONE] = $this->phone;
     		if ($this->phone_perso && ! empty($conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO))		$info[$conf->global->LDAP_MEMBER_FIELD_PHONE_PERSO] = $this->phone_perso;
     		if ($this->phone_mobile && ! empty($conf->global->LDAP_MEMBER_FIELD_MOBILE))			$info[$conf->global->LDAP_MEMBER_FIELD_MOBILE] = $this->phone_mobile;
    @@ -2428,7 +2509,6 @@ class Adherent extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -2472,6 +2552,7 @@ class Adherent extends CommonObject
     	 * Existing categories are left untouch.
     	 *
     	 * @param int[]|int $categories Category or categories IDs
    +     * @return void
     	 */
     	public function setCategories($categories)
     	{
    @@ -2563,13 +2644,19 @@ class Adherent extends CommonObject
     
     		$blockingerrormsg = '';
     
    -		/*if (empty($conf->global->MEMBER_REMINDER_EMAIL))
    +		if (empty($conf->adherent->enabled))	// Should not happen. If module disabled, cron job should not be visible.
    +		{
    +			$langs->load("agenda");
    +			$this->output = $langs->trans('ModuleNotEnabled', $langs->transnoentitiesnoconv("Adherent"));
    +			return 0;
    +		}
    +		if (empty($conf->global->MEMBER_REMINDER_EMAIL))
     		{
     			$langs->load("agenda");
     			$this->output = $langs->trans('EventRemindersByEmailNotEnabled', $langs->transnoentitiesnoconv("Adherent"));
     			return 0;
    -		}*/
    -
    +		}
    +		
     		$now = dol_now();
     		$nbok = 0;
     		$nbko = 0;
    @@ -2655,8 +2742,58 @@ class Adherent extends CommonObject
     							{
     								$nbok++;
     
    -								// TODO Add event email sent for member
    +								$message = $msg;
    +								$sendto = $to;
    +								$sendtocc = '';
    +								$sendtobcc = '';
    +								$actioncode='EMAIL';
    +								$extraparams='';
     
    +								$actionmsg='';
    +								$actionmsg2=$langs->transnoentities('MailSentBy').' '.CMailFile::getValidAddress($from,4,0,1).' '.$langs->transnoentities('To').' '.CMailFile::getValidAddress($sendto,4,0,1);
    +								if ($message)
    +								{
    +									$actionmsg=$langs->transnoentities('MailFrom').': '.dol_escape_htmltag($from);
    +									$actionmsg=dol_concatdesc($actionmsg, $langs->transnoentities('MailTo').': '.dol_escape_htmltag($sendto));
    +									if ($sendtocc) $actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('Bcc') . ": " . dol_escape_htmltag($sendtocc));
    +									$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('MailTopic') . ": " . $subject);
    +									$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('TextUsedInTheMessageBody') . ":");
    +									$actionmsg = dol_concatdesc($actionmsg, $message);
    +								}
    +								
    +								require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
    +								
    +	    						// Insert record of emails sent
    +	    						$actioncomm = new ActionComm($this->db);
    +
    +	    						$actioncomm->type_code   = 'AC_OTH_AUTO';		// Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...)
    +	    						$actioncomm->code        = 'AC_'.$actioncode;
    +	    						$actioncomm->label       = $actionmsg2;
    +	    						$actioncomm->note        = $actionmsg;
    +	    						$actioncomm->fk_project  = 0;
    +	    						$actioncomm->datep       = $now;
    +	    						$actioncomm->datef       = $now;
    +	    						$actioncomm->percentage  = -1;   // Not applicable
    +	    						$actioncomm->socid       = $adherent->thirdparty->id;
    +	    						$actioncomm->contactid   = 0;
    +	    						$actioncomm->authorid    = $user->id;   // User saving action
    +	    						$actioncomm->userownerid = $user->id;	// Owner of action
    +	    						// Fields when action is en email (content should be added into note)
    +	    						$actioncomm->email_msgid = $cmail->msgid;
    +	    						$actioncomm->email_from  = $from;
    +	    						$actioncomm->email_sender= '';
    +	    						$actioncomm->email_to    = $to;
    +	    						$actioncomm->email_tocc  = $sendtocc;
    +	    						$actioncomm->email_tobcc = $sendtobcc;
    +	    						$actioncomm->email_subject = $subject;
    +	    						$actioncomm->errors_to   = '';
    +	    						
    +	    						$actioncomm->fk_element  = $adherent->id;
    +	    						$actioncomm->elementtype = $adherent->element;
    +	    						
    +	    						$actioncomm->extraparams = $extraparams;
    +
    +	    						$actioncomm->create($user);
     							}
     						}
     						else
    @@ -2691,5 +2828,4 @@ class Adherent extends CommonObject
     
     		return 0;
     	}
    -
     }
    diff --git a/htdocs/adherents/class/adherent_type.class.php b/htdocs/adherents/class/adherent_type.class.php
    index ca8372c04ed..984cf49d44d 100644
    --- a/htdocs/adherents/class/adherent_type.class.php
    +++ b/htdocs/adherents/class/adherent_type.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002		Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2016		Charlie Benke			<charlie@patas-monkey.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -32,10 +32,26 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class AdherentType extends CommonObject
     {
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element = 'adherent_type';
    +
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element = 'adherent_type';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'group';
    -	public $ismultientitymanaged = 1;  // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
     
     	/**
     	 * @var string
    @@ -43,19 +59,27 @@ class AdherentType extends CommonObject
     	 * @see label
     	 */
     	public $libelle;
    -	/** @var string Label */
    -	public $label;
    +
    +	/**
    +     * @var string Adherent type label
    +     */
    +    public $label;
    +
     	/**
     	 * @var int Subsription required (0 or 1)
     	 * @since 5.0
     	 */
     	public $subscription;
    +
     	/** @var string 	Public note */
     	public $note;
    +
     	/** @var integer	Can vote */
     	public $vote;
    +
     	/** @var string Email sent during validation */
     	public $mail_valid;
    +
     	/** @var array Array of members */
     	public $members=array();
     
    @@ -282,6 +306,7 @@ class AdherentType extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of members' type
     	 *
    @@ -289,6 +314,7 @@ class AdherentType extends CommonObject
     	 */
     	function liste_array()
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$adherenttypes = array();
    @@ -413,6 +439,7 @@ class AdherentType extends CommonObject
     		return '';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Retourne chaine DN complete dans l'annuaire LDAP pour l'objet
     	 *
    @@ -424,6 +451,7 @@ class AdherentType extends CommonObject
     	 */
     	function _load_ldap_dn($info,$mode=0)
     	{
    +        // phpcs:enable
     		global $conf;
     		$dn='';
     		if ($mode==0) $dn=$conf->global->LDAP_KEY_MEMBERS_TYPES."=".$info[$conf->global->LDAP_KEY_MEMBERS_TYPES].",".$conf->global->LDAP_MEMBER_TYPE_DN;
    @@ -433,6 +461,7 @@ class AdherentType extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Initialize the info array (array of LDAP values) that will be used to call LDAP functions
     	 *
    @@ -440,6 +469,7 @@ class AdherentType extends CommonObject
     	 */
     	function _load_ldap_info()
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$info=array();
    @@ -547,5 +577,4 @@ class AdherentType extends CommonObject
     
     		return '';
     	}
    -
     }
    diff --git a/htdocs/adherents/class/adherentstats.class.php b/htdocs/adherents/class/adherentstats.class.php
    index 59c51cb1d21..310a40c52b3 100644
    --- a/htdocs/adherents/class/adherentstats.class.php
    +++ b/htdocs/adherents/class/adherentstats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2005-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,6 +32,9 @@ include_once DOL_DOCUMENT_ROOT . '/adherents/class/subscription.class.php';
      */
     class AdherentStats extends Stats
     {
    +    /**
    +     * @var string Name of table without prefix where object is stored
    +     */
         public $table_element;
     
         var $socid;
    @@ -178,5 +181,4 @@ class AdherentStats extends Stats
     
     		return $this->_getAllByYear($sql);
     	}
    -
     }
    diff --git a/htdocs/adherents/class/api_members.class.php b/htdocs/adherents/class/api_members.class.php
    index 217ab47c0ab..2da35df7e2c 100644
    --- a/htdocs/adherents/class/api_members.class.php
    +++ b/htdocs/adherents/class/api_members.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2016	Xebax Christy	<xebax@wanadoo.fr>
    - * Copyright (C) 2017	Regis Houssin	<regis.houssin@capnetworks.com>
    + * Copyright (C) 2017	Regis Houssin	<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -91,7 +91,8 @@ class Members extends DolibarrApi
          *
          * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $typeid = '', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $typeid = '', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -293,7 +294,8 @@ class Members extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    @@ -407,5 +409,4 @@ class Members extends DolibarrApi
     
     		return $result;
     	}
    -
     }
    diff --git a/htdocs/adherents/class/api_memberstypes.class.php b/htdocs/adherents/class/api_memberstypes.class.php
    index 1a8e93e0609..e82b126529b 100644
    --- a/htdocs/adherents/class/api_memberstypes.class.php
    +++ b/htdocs/adherents/class/api_memberstypes.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2017	Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2017	Regis Houssin	<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,7 +31,7 @@ class MembersTypes extends DolibarrApi
          * @var array   $FIELDS     Mandatory fields, checked when create and update object
          */
         static $FIELDS = array(
    -        'label'
    +        'label',
         );
     
         /**
    @@ -86,7 +86,8 @@ class MembersTypes extends DolibarrApi
          *
          * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -271,7 +272,8 @@ class MembersTypes extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    @@ -318,5 +320,4 @@ class MembersTypes extends DolibarrApi
     
             return $object;
         }
    -
     }
    diff --git a/htdocs/adherents/class/api_subscriptions.class.php b/htdocs/adherents/class/api_subscriptions.class.php
    index 3ae4f6f39d5..ed403167dd4 100644
    --- a/htdocs/adherents/class/api_subscriptions.class.php
    +++ b/htdocs/adherents/class/api_subscriptions.class.php
    @@ -34,7 +34,7 @@ class Subscriptions extends DolibarrApi
             'fk_adherent',
             'dateh',
             'datef',
    -        'amount'
    +        'amount',
         );
     
         /**
    @@ -85,7 +85,8 @@ class Subscriptions extends DolibarrApi
          *
          * @throws RestException
          */
    -    function index($sortfield = "dateadh", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') {
    +    function index($sortfield = "dateadh", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    diff --git a/htdocs/adherents/class/subscription.class.php b/htdocs/adherents/class/subscription.class.php
    index 1c4007780b9..7b8f453c94c 100644
    --- a/htdocs/adherents/class/subscription.class.php
    +++ b/htdocs/adherents/class/subscription.class.php
    @@ -32,17 +32,37 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class Subscription extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='subscription';
    -	public $table_element='subscription';
    -    public $picto='payment';
     
    -	var $datec;				// Date creation
    -	var $datem;				// Date modification
    -	var $dateh;				// Subscription start date (date subscription)
    -	var $datef;				// Subscription end date
    -	var $fk_adherent;
    -	var $amount;
    -	var $fk_bank;
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='subscription';
    +
    +    /**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto='payment';
    +
    +	public $datec;				// Date creation
    +	public $datem;				// Date modification
    +	public $dateh;				// Subscription start date (date subscription)
    +	public $datef;				// Subscription end date
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_adherent;
    +
    +	public $amount;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_bank;
     
     
     	/**
    @@ -355,6 +375,7 @@ class Subscription extends CommonObject
     	    return '';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -363,6 +384,7 @@ class Subscription extends CommonObject
     	 */
     	function LibStatut($statut)
     	{
    +        // phpcs:enable
     	    global $langs;
     	    $langs->load("members");
     	    return '';
    @@ -394,7 +416,6 @@ class Subscription extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    diff --git a/htdocs/adherents/document.php b/htdocs/adherents/document.php
    index 8e12dec056e..e8d80898041 100644
    --- a/htdocs/adherents/document.php
    +++ b/htdocs/adherents/document.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
      *
    @@ -33,9 +33,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
     
    -$langs->load("members");
    -$langs->load("companies");
    -$langs->load('other');
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members","other"));
    +
     
     $id=GETPOST('id','int');
     $action=GETPOST('action','alpha');
    @@ -91,7 +91,7 @@ if ($id > 0)
     	if ($result > 0)
     	{
     
    -		// Construit liste des fichiers
    +		// Build file list
     		$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     		$totalsize=0;
     		foreach($filearray as $key => $file)
    @@ -170,6 +170,6 @@ else
     	print $langs->trans("ErrorRecordNotFound");
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/adherents/htpasswd.php b/htdocs/adherents/htpasswd.php
    index 5814ed3bf70..adc3d32eea4 100644
    --- a/htdocs/adherents/htpasswd.php
    +++ b/htdocs/adherents/htpasswd.php
    @@ -86,7 +86,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/index.php b/htdocs/adherents/index.php
    index c9e3d1936c6..beb8d44cdc3 100644
    --- a/htdocs/adherents/index.php
    +++ b/htdocs/adherents/index.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,8 +29,8 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
     
    -$langs->load("companies");
    -$langs->load("members");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members"));
     
     // Security check
     $result=restrictedArea($user,'adherent');
    @@ -55,7 +55,7 @@ $AdherentsResilies=array();
     
     $AdherentType=array();
     
    -// Liste les adherents
    +// Members list
     $sql = "SELECT t.rowid, t.libelle as label, t.subscription,";
     $sql.= " d.statut, count(d.rowid) as somme";
     $sql.= " FROM ".MAIN_DB_PREFIX."adherent_type as t";
    @@ -92,7 +92,7 @@ if ($result)
     
     $now=dol_now();
     
    -// List members up to date
    +// Members up to date list
     // current rule: uptodate = the end date is in future whatever is type
     // old rule: uptodate = if type does not need payment, that end date is null, if type need payment that end date is in future)
     $sql = "SELECT count(*) as somme , d.fk_adherent_type";
    @@ -140,7 +140,7 @@ if (! empty($conf->global->MAIN_SEARCH_FORM_ON_HOME_AREAS))     // This is usele
         	foreach($listofsearchfields as $key => $value)
         	{
         		if ($i == 0) print '<tr class="liste_titre"><td colspan="3">'.$langs->trans("Search").'</td></tr>';
    -    		print '<tr '.$bc[false].'>';
    +    		print '<tr class="oddeven">';
         		print '<td class="nowrap"><label for="'.$key.'">'.$langs->trans($value["text"]).'</label>:</td><td><input type="text" class="flat inputsearch" name="'.$key.'" id="'.$key.'" size="18"></td>';
         		if ($i == 0) print '<td rowspan="'.count($listofsearchfields).'"><input type="submit" value="'.$langs->trans("Search").'" class="button"></td>';
         		print '</tr>';
    @@ -435,6 +435,6 @@ print "</div>";
     
     print '</div></div></div>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/adherents/ldap.php b/htdocs/adherents/ldap.php
    index 1f9f348d564..f45042d6581 100644
    --- a/htdocs/adherents/ldap.php
    +++ b/htdocs/adherents/ldap.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006		Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2017	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,10 +29,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/ldap.class.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
     
    -$langs->load("companies");
    -$langs->load("members");
    -$langs->load("ldap");
    -$langs->load("admin");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members","ldap","admin"));
     
     $rowid = GETPOST('id','int');
     $action = GETPOST('action','aZ09');
    @@ -221,5 +219,6 @@ else
     
     print '</table>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php
    index 3a1dd04443f..39d0069ac7c 100644
    --- a/htdocs/adherents/list.php
    +++ b/htdocs/adherents/list.php
    @@ -48,6 +48,7 @@ $search=GETPOST("search",'alpha');
     $search_ref=GETPOST("search_ref",'alpha');
     $search_lastname=GETPOST("search_lastname",'alpha');
     $search_firstname=GETPOST("search_firstname",'alpha');
    +$search_civility=GETPOST("search_civility",'alpha');
     $search_login=GETPOST("search_login",'alpha');
     $search_address=GETPOST("search_address",'alpha');
     $search_zip=GETPOST("search_zip",'alpha');
    @@ -85,7 +86,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('adherent');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -105,6 +106,7 @@ $fieldstosearchall = array(
     if($db->type == 'pgsql') unset($fieldstosearchall['d.rowid']);
     $arrayfields=array(
     	'd.ref'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
    +	'd.civility'=>array('label'=>$langs->trans("Civility"), 'checked'=>0),
     	'd.lastname'=>array('label'=>$langs->trans("Lastname"), 'checked'=>1),
     	'd.firstname'=>array('label'=>$langs->trans("Firstname"), 'checked'=>1),
     	'd.company'=>array('label'=>$langs->trans("Company"), 'checked'=>1),
    @@ -121,7 +123,7 @@ $arrayfields=array(
     	'state.nom'=>array('label'=>$langs->trans("State"), 'checked'=>0),
     	'country.code_iso'=>array('label'=>$langs->trans("Country"), 'checked'=>0),
     	/*'d.note_public'=>array('label'=>$langs->trans("NotePublic"), 'checked'=>0),
    -    'd.note_private'=>array('label'=>$langs->trans("NotePrivate"), 'checked'=>0),*/
    +	'd.note_private'=>array('label'=>$langs->trans("NotePrivate"), 'checked'=>0),*/
     	'd.datefin'=>array('label'=>$langs->trans("EndSubscription"), 'checked'=>1, 'position'=>500),
     	'd.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
     	'd.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
    @@ -160,6 +162,7 @@ if (empty($reshook))
     		$search_ref="";
     		$search_lastname="";
     		$search_firstname="";
    +		$search_civility="";
     		$search_login="";
     		$search_company="";
     		$search_type="";
    @@ -203,7 +206,7 @@ $memberstatic=new Adherent($db);
     $now=dol_now();
     
     $sql = "SELECT d.rowid, d.login, d.lastname, d.firstname, d.societe as company, d.fk_soc,";
    -$sql.= " d.datefin, d.address, d.zip, d.town, d.state_id, d.country,";
    +$sql.= " d.civility, d.datefin, d.address, d.zip, d.town, d.state_id, d.country,";
     $sql.= " d.email, d.phone, d.phone_perso, d.phone_mobile, d.skype, d.birth, d.public, d.photo,";
     $sql.= " d.fk_adherent_type as type_id, d.morphy, d.statut, d.datec as date_creation, d.tms as date_update,";
     $sql.= " t.libelle as type, t.subscription,";
    @@ -234,6 +237,7 @@ if ($search_ref)
     	if (is_numeric($search_ref)) $sql.= " AND (d.rowid = ".$db->escape($search_ref).")";
     	else $sql.=" AND 1 = 2";    // Always wrong
     }
    +if ($search_civility) $sql.= natural_search("d.civility", $search_civility);
     if ($search_firstname) $sql.= natural_search("d.firstname", $search_firstname);
     if ($search_lastname) $sql.= natural_search(array("d.firstname", "d.lastname", "d.societe"), $search_lastname);
     if ($search_login) $sql.= natural_search("d.login", $search_login);
    @@ -322,6 +326,7 @@ if ($sall != "") $param.="&sall=".urlencode($sall);
     if ($statut != "") $param.="&statut=".urlencode($statut);
     if ($search_ref)   $param.="&search_ref=".urlencode($search_ref);
     if ($search_nom)   $param.="&search_nom=".urlencode($search_nom);
    +if ($search_civility) $param.="&search_civility=".urlencode($search_civility);
     if ($search_firstname) $param.="&search_firstname=".urlencode($search_firstname);
     if ($search_lastname)  $param.="&search_lastname=".urlencode($search_lastname);
     if ($search_login)   $param.="&search_login=".urlencode($search_login);
    @@ -427,37 +432,36 @@ if (! empty($arrayfields['d.ref']['checked']))
     	print '<input class="flat maxwidth50" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).'">';
     	print '</td>';
     }
    -
    +if (! empty($arrayfields['d.civility']['checked']))
    +{
    +	print '<td class="liste_titre" align="left">';
    +	print '<input class="flat maxwidth25" type="text" name="search_civility" value="'.dol_escape_htmltag($search_civility).'"></td>';
    +}
     if (! empty($arrayfields['d.firstname']['checked']))
     {
     	print '<td class="liste_titre" align="left">';
     	print '<input class="flat maxwidth50" type="text" name="search_firstname" value="'.dol_escape_htmltag($search_firstname).'"></td>';
     }
    -
     if (! empty($arrayfields['d.lastname']['checked']))
     {
     	print '<td class="liste_titre" align="left">';
     	print '<input class="flat maxwidth50" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).'"></td>';
     }
    -
     if (! empty($arrayfields['d.company']['checked']))
     {
     	print '<td class="liste_titre" align="left">';
     	print '<input class="flat maxwidth50" type="text" name="search_company" value="'.dol_escape_htmltag($search_company).'"></td>';
     }
    -
     if (! empty($arrayfields['d.login']['checked']))
     {
     	print '<td class="liste_titre" align="left">';
     	print '<input class="flat maxwidth50" type="text" name="search_login" value="'.dol_escape_htmltag($search_login).'"></td>';
     }
    -
     if (! empty($arrayfields['d.morphy']['checked']))
     {
     	print '<td class="liste_titre" align="left">';
     	print '</td>';
     }
    -
     if (! empty($arrayfields['t.libelle']['checked']))
     {
     	print '<td class="liste_titre">';
    @@ -568,6 +572,7 @@ print "</tr>\n";
     print '<tr class="liste_titre">';
     if (! empty($conf->global->MAIN_SHOW_TECHNICAL_ID))       print_liste_field_titre("ID",$_SERVER["PHP_SELF"],'','',$param,'align="center"',$sortfield,$sortorder);
     if (! empty($arrayfields['d.ref']['checked']))            print_liste_field_titre($arrayfields['d.ref']['label'],$_SERVER["PHP_SELF"],'d.rowid','',$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['d.civility']['checked']))       print_liste_field_titre($arrayfields['d.civility']['label'],$_SERVER["PHP_SELF"],'d.civility','',$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['d.firstname']['checked']))      print_liste_field_titre($arrayfields['d.firstname']['label'],$_SERVER["PHP_SELF"],'d.firstname','',$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['d.lastname']['checked']))       print_liste_field_titre($arrayfields['d.lastname']['label'],$_SERVER["PHP_SELF"],'d.lastname','',$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['d.company']['checked']))        print_liste_field_titre($arrayfields['d.company']['label'],$_SERVER["PHP_SELF"],'d.societe','',$param,'',$sortfield,$sortorder);
    @@ -577,7 +582,7 @@ if (! empty($arrayfields['t.libelle']['checked']))        print_liste_field_titr
     if (! empty($arrayfields['d.address']['checked']))        print_liste_field_titre($arrayfields['d.address']['label'],$_SERVER["PHP_SELF"],'d.address','',$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['d.zip']['checked']))            print_liste_field_titre($arrayfields['d.zip']['label'],$_SERVER["PHP_SELF"],'d.zip','',$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['d.town']['checked']))           print_liste_field_titre($arrayfields['d.town']['label'],$_SERVER["PHP_SELF"],'d.town','',$param,'',$sortfield,$sortorder);
    -if (! empty($arrayfields['state.nom']['checked']))        print_liste_field_titre($arrayfields['state.town']['label'],$_SERVER["PHP_SELF"],"state.nom","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['state.nom']['checked']))        print_liste_field_titre($arrayfields['state.nom']['label'],$_SERVER["PHP_SELF"],"state.nom","",$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['country.code_iso']['checked'])) print_liste_field_titre($arrayfields['country.code_iso']['label'],$_SERVER["PHP_SELF"],"country.code_iso","",$param,'align="center"',$sortfield,$sortorder);
     if (! empty($arrayfields['d.phone']['checked']))          print_liste_field_titre($arrayfields['d.phone']['label'],$_SERVER["PHP_SELF"],'d.phone','',$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['d.phone_perso']['checked']))    print_liste_field_titre($arrayfields['d.phone_perso']['label'],$_SERVER["PHP_SELF"],'d.phone_perso','',$param,'',$sortfield,$sortorder);
    @@ -605,6 +610,7 @@ while ($i < min($num, $limit))
     	$datefin=$db->jdate($obj->datefin);
     	$memberstatic->id=$obj->rowid;
     	$memberstatic->ref=$obj->rowid;
    +	$memberstatic->civility_id=$obj->civility;
     	$memberstatic->lastname=$obj->lastname;
     	$memberstatic->firstname=$obj->firstname;
     	$memberstatic->statut=$obj->statut;
    @@ -630,10 +636,17 @@ while ($i < min($num, $limit))
     	// Ref
     	if (! empty($arrayfields['d.ref']['checked']))
     	{
    -   		print "<td>";
    +		print "<td>";
     		print $memberstatic->getNomUrl(-1, 0, 'card', 'ref');
     		print "</td>\n";
     	}
    +	// Civility
    +	if (! empty($arrayfields['d.civility']['checked']))
    +	{
    +		print "<td>";
    +		print $obj->civility;
    +		print "</td>\n";
    +	}
     	// Firstname
     	if (! empty($arrayfields['d.firstname']['checked']))
     	{
    @@ -658,12 +671,12 @@ while ($i < min($num, $limit))
     	// Login
     	if (! empty($arrayfields['d.login']['checked']))
     	{
    -	   print "<td>".$obj->login."</td>\n";
    +		print "<td>".$obj->login."</td>\n";
     	}
     	// Moral/Physique
     	if (! empty($arrayfields['d.morphy']['checked']))
     	{
    -	   print "<td>".$memberstatic->getmorphylib($obj->morphy)."</td>\n";
    +		print "<td>".$memberstatic->getmorphylib($obj->morphy)."</td>\n";
     	}
     	// Type label
     	if (! empty($arrayfields['t.libelle']['checked']))
    @@ -827,6 +840,6 @@ print '</form>';
     
     if ($num > $limit || $page) print_barre_liste('', $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_generic.png', 0, '', '', $limit, 1);
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/adherents/note.php b/htdocs/adherents/note.php
    index 1b887406df3..c12c45de8b7 100644
    --- a/htdocs/adherents/note.php
    +++ b/htdocs/adherents/note.php
    @@ -28,9 +28,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
     
    -$langs->load("companies");
    -$langs->load("members");
    -$langs->load("bills");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members","bills"));
     
     $action=GETPOST('action','alpha');
     $id=GETPOST('id','int');
    @@ -117,9 +116,8 @@ if ($id)
     
     
         dol_fiche_end();
    -
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/adherents/stats/byproperties.php b/htdocs/adherents/stats/byproperties.php
    index ded3dec120e..defbde2dce2 100644
    --- a/htdocs/adherents/stats/byproperties.php
    +++ b/htdocs/adherents/stats/byproperties.php
    @@ -44,8 +44,8 @@ $year = strftime("%Y", time());
     $startyear=$year-2;
     $endyear=$year;
     
    -$langs->load("members");
    -$langs->load("companies");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members"));
     
     
     /*
    @@ -143,7 +143,6 @@ print '</table>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/stats/geo.php b/htdocs/adherents/stats/geo.php
    index 1c6944c2a0a..2175569b7ce 100644
    --- a/htdocs/adherents/stats/geo.php
    +++ b/htdocs/adherents/stats/geo.php
    @@ -45,8 +45,8 @@ $year = strftime("%Y", time());
     $startyear=$year-2;
     $endyear=$year;
     
    -$langs->load("members");
    -$langs->load("companies");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members"));
     
     
     /*
    @@ -309,8 +309,6 @@ if ($mode)
     
     dol_fiche_end();
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/stats/index.php b/htdocs/adherents/stats/index.php
    index 083d81d6db6..feebd776d94 100644
    --- a/htdocs/adherents/stats/index.php
    +++ b/htdocs/adherents/stats/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -46,8 +46,8 @@ $year = strftime("%Y", time());
     $startyear=$year-2;
     $endyear=$year;
     
    -$langs->load("members");
    -$langs->load("companies");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members"));
     
     
     /*
    @@ -167,6 +167,7 @@ print '<br><br>';
     $data = $stats->getAllByYear();
     
     
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder">';
     print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -207,6 +208,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    +print '</div>';
     
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
    @@ -229,7 +231,6 @@ print '<div style="clear:both"></div>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/subscription.php b/htdocs/adherents/subscription.php
    index b0b450b10a1..5f7abe63253 100644
    --- a/htdocs/adherents/subscription.php
    +++ b/htdocs/adherents/subscription.php
    @@ -1,9 +1,10 @@
     <?php
    -/* Copyright (C) 2001-2004	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2002-2003	Jean-Louis Bergamo		<jlb@j1b.org>
    - * Copyright (C) 2004-2018	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    - * Copyright (C) 2015-2016	Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
    +/* Copyright (C) 2001-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2002-2003  Jean-Louis Bergamo      <jlb@j1b.org>
    + * Copyright (C) 2004-2018  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2012-2017  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2015-2016  Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -358,8 +359,9 @@ if ($user->rights->adherent->cotisation->creer && $action == 'subscription' && !
                 	// Set output language
                 	$outputlangs = new Translate('', $conf);
                 	$outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
    +            	// Load traductions files requiredby by page
                 	$outputlangs->loadLangs(array("main", "members"));
    -            	// Get email content fro mtemplae
    +            	// Get email content from template
                 	$arraydefaultmessage=null;
                 	$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION;
     
    @@ -897,7 +899,7 @@ if ($rowid > 0)
                     $datefrom=dol_time_plus_duree($object->datefin,1,'d');
                 }
             }
    -        print $form->select_date($datefrom,'','','','',"subscription",1,1,1);
    +        print $form->selectDate($datefrom, '', '', '', '', "subscription", 1, 1);
             print "</td></tr>";
     
             // Date end subscription
    @@ -910,7 +912,7 @@ if ($rowid > 0)
                 $dateto=-1;		// By default, no date is suggested
             }
             print '<tr><td>'.$langs->trans("DateEndSubscription").'</td><td>';
    -        print $form->select_date($dateto,'end','','','',"subscription",1,0,1);
    +        print $form->selectDate($dateto, 'end', '', '', '', "subscription", 1, 0);
             print "</td></tr>";
     
             if ($adht->subscription)
    @@ -1011,7 +1013,7 @@ if ($rowid > 0)
     
                     // Date of payment
                     print '<tr class="bankswitchclass"><td class="fieldrequired">'.$langs->trans("DatePayment").'</td><td>';
    -                print $form->select_date(isset($paymentdate)?$paymentdate:-1,'payment',0,0,1,'subscription',1,1,1);
    +                print $form->selectDate(isset($paymentdate)?$paymentdate:-1, 'payment', 0, 0, 1, 'subscription', 1, 1);
                     print "</td></tr>\n";
     
                     print '<tr class="bankswitchclass2"><td>'.$langs->trans('Numero');
    @@ -1054,8 +1056,9 @@ if ($rowid > 0)
                 // Set output language
                 $outputlangs = new Translate('', $conf);
                 $outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
    +            // Load traductions files requiredby by page
                 $outputlangs->loadLangs(array("main", "members"));
    -            // Get email content fro mtemplae
    +            // Get email content from template
                 $arraydefaultmessage=null;
                 $labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION;
     
    @@ -1110,7 +1113,6 @@ else
         print $langs->trans("ErrorRecordNotFound");
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/subscription/card.php b/htdocs/adherents/subscription/card.php
    index f905225a396..94950f02b05 100644
    --- a/htdocs/adherents/subscription/card.php
    +++ b/htdocs/adherents/subscription/card.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2007-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2007-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,10 +30,8 @@ if (! empty($conf->banque->enabled)) {
     	require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     }
     
    -$langs->load("companies");
    -$langs->load("bills");
    -$langs->load("members");
    -$langs->load("users");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members","bills","users"));
     
     $adh = new Adherent($db);
     $object = new Subscription($db);
    @@ -211,13 +210,13 @@ if ($user->rights->adherent->cotisation->creer && $action == 'edit')
     
         // Date start subscription
         print '<tr><td>'.$langs->trans("DateSubscription").'</td><td class="valeur" colspan="2">';
    -	$form->select_date($object->dateh,'datesub',1,1,0,'update',1);
    +	print $form->selectDate($object->dateh, 'datesub', 1, 1, 0, 'update', 1);
     	print '</td>';
         print '</tr>';
     
         // Date end subscription
         print '<tr><td>'.$langs->trans("DateEndSubscription").'</td><td class="valeur" colspan="2">';
    -	$form->select_date($object->datef,'datesubend',0,0,0,'update',1);
    +	print $form->selectDate($object->datef, 'datesubend', 0, 0, 0, 'update', 1);
     	print '</td>';
         print '</tr>';
     
    @@ -417,7 +416,6 @@ if ($rowid && $action != 'edit')
         print '</div></div></div>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/subscription/info.php b/htdocs/adherents/subscription/info.php
    index 05856c35f75..a792da530f1 100644
    --- a/htdocs/adherents/subscription/info.php
    +++ b/htdocs/adherents/subscription/info.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2006 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2006 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,10 +28,8 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/member.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
     
    -$langs->load("companies");
    -$langs->load("bills");
    -$langs->load("members");
    -$langs->load("users");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","members","bills","users"));
     
     if (!$user->rights->adherent->lire)
     	accessforbidden();
    @@ -76,5 +74,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/adherents/subscription/list.php b/htdocs/adherents/subscription/list.php
    index c8f7bce5f95..4ef43e8f316 100644
    --- a/htdocs/adherents/subscription/list.php
    +++ b/htdocs/adherents/subscription/list.php
    @@ -53,13 +53,15 @@ $pagenext = $page + 1;
     if (! $sortorder) {  $sortorder="DESC"; }
     if (! $sortfield) {  $sortfield="c.dateadh"; }
     
    +$object = new Subscription($db);
    +
     // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
     $hookmanager->initHooks(array('subscriptionlist'));
     $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('subscription');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -382,6 +384,6 @@ else
         dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/adherents/tpl/linkedobjectblock.tpl.php b/htdocs/adherents/tpl/linkedobjectblock.tpl.php
    index a3033ec090d..eec61e3ba22 100644
    --- a/htdocs/adherents/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/adherents/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2013		Juanjo Menent <jmenent@2byte.es>
      * Copyright (C) 2014       Marcos García <marcosgdf@gmail.com>
      *
    diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php
    index 56363599c10..fc147ad8fa1 100644
    --- a/htdocs/adherents/type.php
    +++ b/htdocs/adherents/type.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2015		Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
      *
    @@ -317,7 +317,7 @@ if ($action == 'create')
     	print '<table class="border" width="100%">';
     	print '<tbody>';
     
    -	print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Label").'</td><td><input type="text" name="label" size="40"></td></tr>';
    +	print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Label").'</td><td><input type="text" class="minwidth200" name="label" autofocus="autofocus"></td></tr>';
     
     	print '<tr><td>'.$langs->trans("SubscriptionRequired").'</td><td>';
     	print $form->selectyesno("subscription",1,1);
    @@ -694,7 +694,6 @@ if ($rowid > 0)
     		{
     		    dol_print_error($db);
     		}
    -
     	}
     
     	/* ************************************************************************** */
    @@ -787,7 +786,6 @@ if ($rowid > 0)
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/adherents/type_ldap.php b/htdocs/adherents/type_ldap.php
    index 7edb42e6c76..3cd57e43390 100644
    --- a/htdocs/adherents/type_ldap.php
    +++ b/htdocs/adherents/type_ldap.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2017 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,9 +29,8 @@ require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/ldap.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ldap.lib.php';
     
    -$langs->load("members");
    -$langs->load("admin");
    -$langs->load("ldap");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin","members","ldap"));
     
     $id = GETPOST('rowid', 'int');
     $action = GETPOST('action','alpha');
    @@ -187,5 +186,6 @@ else
     
     print '</table>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/agenda.php b/htdocs/admin/agenda.php
    index 6fedfa6d2cb..1c6e5c16fcf 100644
    --- a/htdocs/admin/agenda.php
    +++ b/htdocs/admin/agenda.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2015	Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2011		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2011		Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012  Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2015		Jean-François Ferry <jfefe@aternatik.fr>
      *
    @@ -202,6 +202,6 @@ print "</form>\n";
     
     print "<br>";
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/agenda_extrafields.php b/htdocs/admin/agenda_extrafields.php
    index fadb144b883..29323020325 100644
    --- a/htdocs/admin/agenda_extrafields.php
    +++ b/htdocs/admin/agenda_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2015		Jean-François Ferry		<jfefe@aternatik.fr>
      *
    @@ -85,7 +85,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -98,7 +98,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -117,6 +117,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/agenda_extsites.php b/htdocs/admin/agenda_extsites.php
    index 906ecd8d092..236483f5ed4 100644
    --- a/htdocs/admin/agenda_extsites.php
    +++ b/htdocs/admin/agenda_extsites.php
    @@ -238,7 +238,6 @@ print '</div>';
     
     print "</form>\n";
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/agenda_other.php b/htdocs/admin/agenda_other.php
    index 2d20d285720..2a370cdf580 100644
    --- a/htdocs/admin/agenda_other.php
    +++ b/htdocs/admin/agenda_other.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2016	Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2011		Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2011		Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2017  Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2015		Jean-François Ferry	    <jfefe@aternatik.fr>
      * Copyright (C) 2016		Charlie Benke		    <charlie@patas-monkey.com>
    @@ -356,7 +356,7 @@ print '<tr class="oddeven">'."\n";
     print '<td>'.$langs->trans("AGENDA_DEFAULT_VIEW").'</td>'."\n";
     print '<td align="center">&nbsp;</td>'."\n";
     print '<td align="right">'."\n";
    -$tmplist=array('show_list'=>$langs->trans("ViewList"), 'show_month'=>$langs->trans("ViewCal"), 'show_week'=>$langs->trans("ViewWeek"), 'show_day'=>$langs->trans("ViewDay"), 'show_peruser'=>$langs->trans("ViewPerUser"));
    +$tmplist=array(''=>'&nbsp;', 'show_list'=>$langs->trans("ViewList"), 'show_month'=>$langs->trans("ViewCal"), 'show_week'=>$langs->trans("ViewWeek"), 'show_day'=>$langs->trans("ViewDay"), 'show_peruser'=>$langs->trans("ViewPerUser"));
     print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, $conf->global->AGENDA_DEFAULT_VIEW);
     print '</td></tr>'."\n";
     
    @@ -399,6 +399,6 @@ print '</form>';
     
     print "<br>";
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/agenda_reminder.php b/htdocs/admin/agenda_reminder.php
    index e78a8e089ed..269880236cb 100644
    --- a/htdocs/admin/agenda_reminder.php
    +++ b/htdocs/admin/agenda_reminder.php
    @@ -247,6 +247,6 @@ print '</form>';
     
     print "<br>";
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/agenda_xcal.php b/htdocs/admin/agenda_xcal.php
    index 481a850790e..d55a3713ae1 100644
    --- a/htdocs/admin/agenda_xcal.php
    +++ b/htdocs/admin/agenda_xcal.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2008-2015 	Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2012-2013	Juanjo Menent		<jmenent@2byte.es>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2015		Jean-François Ferry	<jfefe@aternatik.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -198,6 +198,6 @@ if (! empty($conf->use_javascript_ajax))
     	print '</script>';
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/bank.php b/htdocs/admin/bank.php
    index a4e9e4bb210..497d4748da8 100644
    --- a/htdocs/admin/bank.php
    +++ b/htdocs/admin/bank.php
    @@ -420,7 +420,7 @@ if ($conf->global->BANK_REPORT_LAST_NUM_RELEVE) {
         print '</a>';
         print '</td>';
     }
    -else 
    +else
     {
         print '<td align="center">' . "\n";
         print '<a href="' . $_SERVER["PHP_SELF"] . '?action=setreportlastnumreleve">' . img_picto($langs->trans("Disabled"),
    @@ -432,6 +432,6 @@ print "</tr>\n";
     print '</table>';
     dol_fiche_end();
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/bank_extrafields.php b/htdocs/admin/bank_extrafields.php
    index 19446092923..f6a729743cf 100644
    --- a/htdocs/admin/bank_extrafields.php
    +++ b/htdocs/admin/bank_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2014		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2015		Jean-François Ferry		<jfefe@aternatik.fr>
      *
    @@ -82,7 +82,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -95,7 +95,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -114,6 +114,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/barcode.php b/htdocs/admin/barcode.php
    index a7a863c4725..431d93e2a96 100644
    --- a/htdocs/admin/barcode.php
    +++ b/htdocs/admin/barcode.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2004	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2013	Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -75,7 +75,6 @@ else if ($action == 'update')
     else if ($action == 'updateengine')
     {
         // TODO Update engines.
    -
     }
     
     if ($action && $action != 'setcoder' && $action != 'setModuleOptions')
    @@ -306,7 +305,7 @@ if (! empty($conf->product->enabled))
     	print '<tr class="oddeven">';
     	print '<td>'.$langs->trans("SetDefaultBarcodeTypeProducts").'</td>';
     	print '<td width="60" align="right">';
    -	$formbarcode->select_barcode_type($conf->global->PRODUIT_DEFAULT_BARCODE_TYPE,"PRODUIT_DEFAULT_BARCODE_TYPE",1);
    +	print $formbarcode->selectBarcodeType($conf->global->PRODUIT_DEFAULT_BARCODE_TYPE, "PRODUIT_DEFAULT_BARCODE_TYPE", 1);
     	print '</td></tr>';
     }
     
    @@ -317,7 +316,7 @@ if (! empty($conf->societe->enabled))
     	print '<tr class="oddeven">';
     	print '<td>'.$langs->trans("SetDefaultBarcodeTypeThirdParties").'</td>';
     	print '<td width="60" align="right">';
    -	print $formbarcode->select_barcode_type($conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY,"GENBARCODE_BARCODETYPE_THIRDPARTY",1);
    +	print $formbarcode->selectBarcodeType($conf->global->GENBARCODE_BARCODETYPE_THIRDPARTY, "GENBARCODE_BARCODETYPE_THIRDPARTY", 1);
     	print '</td></tr>';
     }
     
    @@ -405,5 +404,6 @@ if ($conf->produit->enabled)
     
     print "<br>";
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/boxes.php b/htdocs/admin/boxes.php
    index 04fd76e96fc..c0480bb7e50 100644
    --- a/htdocs/admin/boxes.php
    +++ b/htdocs/admin/boxes.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015       Jean-François Ferry		<jfefe@aternatik.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -488,7 +488,6 @@ print '<div class="center"><input type="submit" class="button" value="'.$langs->
     print '</form>';
     print "\n".'<!-- End Other Const -->'."\n";
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/chequereceipts.php b/htdocs/admin/chequereceipts.php
    index df628ecc87f..f85018c03b8 100644
    --- a/htdocs/admin/chequereceipts.php
    +++ b/htdocs/admin/chequereceipts.php
    @@ -217,7 +217,6 @@ foreach ($dirmodels as $reldir)
     							print '</td>';
     
     							print "</tr>\n";
    -
     						}
     					}
     				}
    @@ -280,6 +279,6 @@ dol_fiche_end();
     
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/clicktodial.php b/htdocs/admin/clicktodial.php
    index c2cfaf9f72a..34a641137dc 100644
    --- a/htdocs/admin/clicktodial.php
    +++ b/htdocs/admin/clicktodial.php
    @@ -140,6 +140,6 @@ if (! empty($conf->global->CLICKTODIAL_URL))
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/commande.php b/htdocs/admin/commande.php
    index cee12e4b08e..d4d7b789974 100644
    --- a/htdocs/admin/commande.php
    +++ b/htdocs/admin/commande.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004      Sebastien Di Cintio          <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier               <benoit.mortier@opensides.be>
      * Copyright (C) 2004      Andre Cianfarani             <acianfa@free.fr>
    - * Copyright (C) 2005-2014 Regis Houssin                <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014 Regis Houssin                <regis.houssin@inodbox.com>
      * Copyright (C) 2008 	   Raphael Bertrand (Resultic)  <raphael.bertrand@resultic.fr>
      * Copyright (C) 2011-2013 Juanjo Menent			    <jmenent@2byte.es>
      * Copyright (C) 2011-2016 Philippe Grand			    <philippe.grand@atoo-net.com>
    @@ -679,7 +679,6 @@ print "</td></tr>\n";
     
     print '</table>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php
    index 9b312e7e228..96a7b533095 100644
    --- a/htdocs/admin/company.php
    +++ b/htdocs/admin/company.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2007	Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2014	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2011-2017	Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2015		Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
    @@ -50,6 +50,7 @@ $error=0;
     // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
     $hookmanager->initHooks(array('admincompany','globaladmin'));
     
    +
     /*
      * Actions
      */
    @@ -74,6 +75,8 @@ if ( ($action == 'update' && ! GETPOST("cancel",'alpha'))
     		activateModulesRequiredByCountry($mysoc->country_code);
     	}
     
    +	$db->begin();
    +
     	dolibarr_set_const($db, "MAIN_INFO_SOCIETE_NOM", GETPOST("nom",'nohtml'),'chaine',0,'',$conf->entity);
     	dolibarr_set_const($db, "MAIN_INFO_SOCIETE_ADDRESS", GETPOST("MAIN_INFO_SOCIETE_ADDRESS",'nohtml'),'chaine',0,'',$conf->entity);
     	dolibarr_set_const($db, "MAIN_INFO_SOCIETE_TOWN", GETPOST("MAIN_INFO_SOCIETE_TOWN",'nohtml'),'chaine',0,'',$conf->entity);
    @@ -172,11 +175,24 @@ if ( ($action == 'update' && ! GETPOST("cancel",'alpha'))
     
     	dolibarr_set_const($db, "SOCIETE_FISCAL_MONTH_START", GETPOST("SOCIETE_FISCAL_MONTH_START",'int'),'chaine',0,'',$conf->entity);
     
    -	dolibarr_set_const($db, "FACTURE_TVAOPTION", GETPOST("optiontva",'aZ09'),'chaine',0,'',$conf->entity);
    +	// Sale tax options
    +	$usevat = GETPOST("optiontva",'aZ09');
    +	$uselocaltax1 = GETPOST("optionlocaltax1",'aZ09');
    +	$uselocaltax2 = GETPOST("optionlocaltax2",'aZ09');
    +	if ($uselocaltax1 == 'localtax1on' && ! $usevat)
    +	{
    +		setEventMessages($langs->trans("IfYouUseASecondTaxYouMustSetYouUseTheMainTax"), null, 'errors');
    +		$error++;
    +	}
    +	if ($uselocaltax2 == 'localtax2on' && ! $usevat)
    +	{
    +		setEventMessages($langs->trans("IfYouUseAThirdTaxYouMustSetYouUseTheMainTax"), null, 'errors');
    +		$error++;
    +	}
     
    -	// Local taxes
    -	dolibarr_set_const($db, "FACTURE_LOCAL_TAX1_OPTION", GETPOST("optionlocaltax1",'aZ09'),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "FACTURE_LOCAL_TAX2_OPTION", GETPOST("optionlocaltax2",'aZ09'),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "FACTURE_TVAOPTION", $usevat,'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "FACTURE_LOCAL_TAX1_OPTION", $uselocaltax1,'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "FACTURE_LOCAL_TAX2_OPTION", $uselocaltax2,'chaine',0,'',$conf->entity);
     
     	if($_POST["optionlocaltax1"]=="localtax1on")
     	{
    @@ -188,7 +204,7 @@ if ( ($action == 'update' && ! GETPOST("cancel",'alpha'))
     		{
     			dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX1", GETPOST('lt1','aZ09'),'chaine',0,'',$conf->entity);
     		}
    -		dolibarr_set_const($db,"MAIN_INFO_LOCALTAX_CALC1",  GETPOST("clt1",'aZ09'),'chaine',0,'',$conf->entity);
    +		dolibarr_set_const($db,"MAIN_INFO_LOCALTAX_CALC1", GETPOST("clt1",'aZ09'),'chaine',0,'',$conf->entity);
     	}
     	if($_POST["optionlocaltax2"]=="localtax2on")
     	{
    @@ -200,7 +216,16 @@ if ( ($action == 'update' && ! GETPOST("cancel",'alpha'))
     		{
     			dolibarr_set_const($db, "MAIN_INFO_VALUE_LOCALTAX2", GETPOST('lt2','aZ09'),'chaine',0,'',$conf->entity);
     		}
    -		dolibarr_set_const($db,"MAIN_INFO_LOCALTAX_CALC2",  GETPOST("clt2",'aZ09'),'chaine',0,'',$conf->entity);
    +		dolibarr_set_const($db,"MAIN_INFO_LOCALTAX_CALC2", GETPOST("clt2",'aZ09'),'chaine',0,'',$conf->entity);
    +	}
    +
    +	if (! $error)
    +	{
    +		$db->commit();
    +	}
    +	else
    +	{
    +		$db->rollback();
     	}
     
     	if ($action != 'updateedit' && ! $error)
    @@ -397,7 +422,7 @@ if ($action == 'edit' || $action == 'updateedit')
     		print '<a href="'.$_SERVER["PHP_SELF"].'?action=removelogo">'.img_delete($langs->trans("Delete")).'</a>';
     		if (file_exists($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini)) {
     			print ' &nbsp; ';
    -			print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('/thumbs/'.$mysoc->logo_mini).'">';
    +			print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_mini).'">';
     		}
     	} else {
     		print '<img height="30" src="'.DOL_URL_ROOT.'/public/theme/common/nophoto.png">';
    @@ -585,7 +610,7 @@ if ($action == 'edit' || $action == 'updateedit')
     	print '<td colspan="2">';
     	print "<table>";
     	print "<tr><td><label for=\"use_vat\">".$langs->trans("VATIsUsedDesc")."</label></td></tr>";
    -	print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i></td></tr>\n";
    +	if ($mysoc->country_code == 'FR') print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i></td></tr>\n";
     	print "</table>";
     	print "</td></tr>\n";
     
    @@ -594,7 +619,7 @@ if ($action == 'edit' || $action == 'updateedit')
     	print '<td colspan="2">';
     	print "<table>";
     	print "<tr><td><label for=\"no_vat\">".$langs->trans("VATIsNotUsedDesc")."</label></td></tr>";
    -	print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i></td></tr>\n";
    +	if ($mysoc->country_code == 'FR') print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i></td></tr>\n";
     	print "</table>";
     	print "</td></tr>\n";
     
    @@ -765,7 +790,13 @@ else
     
     	// Web
     
    -	print '<tr class="oddeven"><td>'.$langs->trans("Web").'</td><td>' . dol_print_url($conf->global->MAIN_INFO_SOCIETE_WEB,'_blank',80) . '</td></tr>';
    +	print '<tr class="oddeven"><td>'.$langs->trans("Web").'</td><td>';
    +	$arrayofurl = preg_split('/\s/', $conf->global->MAIN_INFO_SOCIETE_WEB);
    +	foreach($arrayofurl as $urltoshow)
    +	{
    +		if ($urltoshow) print dol_print_url($urltoshow,'_blank',80);
    +	}
    +	print '</td></tr>';
     
     	// Barcode
     	if (! empty($conf->barcode->enabled))
    @@ -791,7 +822,7 @@ else
     	}
     	else if ($mysoc->logo_mini && is_file($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini))
     	{
    -		print '<img class="img_logo" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('/thumbs/'.$mysoc->logo_mini).'">';
    +		print '<img class="img_logo" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_mini).'">';
     	}
     	else
     	{
    @@ -1017,7 +1048,7 @@ else
     	print '<td colspan="2">';
     	print "<table>";
     	print "<tr><td><label for=\"use_vat\">".$langs->trans("VATIsUsedDesc")."</label></td></tr>";
    -	print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i></td></tr>\n";
    +	if ($mysoc->country_code == 'FR') print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsUsedExampleFR")."</i></td></tr>\n";
     	print "</table>";
     	print "</td></tr>\n";
     
    @@ -1027,7 +1058,7 @@ else
     	print '<td colspan="2">';
     	print "<table>";
     	print "<tr><td><label=\"no_vat\">".$langs->trans("VATIsNotUsedDesc")."</label></td></tr>";
    -	print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i></td></tr>\n";
    +	if ($mysoc->country_code == 'FR') print "<tr><td><i>".$langs->trans("Example").': '.$langs->trans("VATIsNotUsedExampleFR")."</i></td></tr>\n";
     	print "</table>";
     	print "</td></tr>\n";
     
    @@ -1153,7 +1184,6 @@ else
     	print '</div>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/compta.php b/htdocs/admin/compta.php
    index 8e17541bfef..86d96227f3c 100644
    --- a/htdocs/admin/compta.php
    +++ b/htdocs/admin/compta.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2013 Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2013-2017 Philippe Grand	    <philippe.grand@atoo-net.com>
      * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
    @@ -164,5 +164,6 @@ print "</table>\n";
     print '<br><br><div style="text-align:center"><input type="submit" class="button" value="'.$langs->trans('Modify').'" name="button"></div>';
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/confexped.php b/htdocs/admin/confexped.php
    index e4691a42e78..660f7c7c500 100644
    --- a/htdocs/admin/confexped.php
    +++ b/htdocs/admin/confexped.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
      * Copyright (C) 2011-2016 Juanjo Menent		<jmenent@2byte.es>ù
      * Copyright (C) 2015      Claudio Aschieri     <c.aschieri@19.coop>
    @@ -147,5 +147,6 @@ print '</table>';
     
     print '</div>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/const.php b/htdocs/admin/const.php
    index 9dd68c16326..cfda870e9da 100644
    --- a/htdocs/admin/const.php
    +++ b/htdocs/admin/const.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -314,7 +314,6 @@ if ($conf->use_javascript_ajax)
     
     print "</form>\n";
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/contract.php b/htdocs/admin/contract.php
    index 74f7acb04f3..60be9e062ba 100644
    --- a/htdocs/admin/contract.php
    +++ b/htdocs/admin/contract.php
    @@ -509,7 +509,6 @@ print '</form>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/dav.php b/htdocs/admin/dav.php
    index ea4bbf97af0..e882a56e2b8 100644
    --- a/htdocs/admin/dav.php
    +++ b/htdocs/admin/dav.php
    @@ -143,6 +143,6 @@ $message.=img_picto('','object_globe.png').' '.$langs->trans("WebDavServer",'Web
     $message.='<br>';
     print $message;
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/defaultvalues.php b/htdocs/admin/defaultvalues.php
    index 84271cff38f..f7a2a031dbf 100644
    --- a/htdocs/admin/defaultvalues.php
    +++ b/htdocs/admin/defaultvalues.php
    @@ -1,6 +1,6 @@
     <?php
    -/* Copyright (C) 2017		Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2017-2018	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2017-2018	Laurent Destailleur	<eldy@users.sourceforge.net>
    + * Copyright (C) 2017-2018	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -17,8 +17,13 @@
      */
     
     /**
    - *       \file       htdocs/admin/defaultvalues.php
    - *       \brief      Page to set default values used used in a create form
    + *       \file      htdocs/admin/defaultvalues.php
    + *       \brief     Page to set default values used used in a create form
    + *       			Default values are stored into $user->default_values[url]['createform']['querystring'|'_noquery_'][paramkey]=paramvalue
    + *       			Default filters are stored into $user->default_values[url]['filters']['querystring'|'_noquery_'][paramkey]=paramvalue
    + *       			Default sort order are stored into $user->default_values[url]['sortorder']['querystring'|'_noquery_'][paramkey]=paramvalue
    + *       			Default focus are stored into $user->default_values[url]['focus']['querystring'|'_noquery_'][paramkey]=paramvalue
    + *       			Mandatory fields are stored into $user->default_values[url]['mandatory']['querystring'|'_noquery_'][paramkey]=paramvalue
      */
     
     require '../main.inc.php';
    @@ -230,9 +235,9 @@ if ($mode == 'sortorder')
     {
         print info_admin($langs->trans("WarningSettingSortOrder")).'<br>';
     }
    -if ($mode == 'focus')
    +if ($mode == 'mandatory')
     {
    -    print info_admin($langs->trans("FeatureNotYetAvailable")).'<br>';
    +	print info_admin($langs->trans("FeatureSupportedOnTextFieldsOnly")).'<br>';
     }
     
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    @@ -261,7 +266,7 @@ else
     }
     print_liste_field_titre($textkey,$_SERVER["PHP_SELF"],'param','',$param,'',$sortfield,$sortorder);
     // Value
    -if ($mode != 'focus')
    +if ($mode != 'focus' && $mode != 'mandatory')
     {
         if ($mode != 'sortorder')
         {
    @@ -294,14 +299,14 @@ print "\n";
     print '<tr class="oddeven">';
     // Page
     print '<td>';
    -print '<input type="text" class="flat minwidth200 maxwidthonsmartphone" name="defaulturl" value="">';
    +print '<input type="text" class="flat minwidth200 maxwidthonsmartphone" name="defaulturl" value="'.dol_escape_htmltag(GETPOST('defaulturl','alphanohtml')).'">';
     print '</td>'."\n";
     // Field
     print '<td>';
    -print '<input type="text" class="flat maxwidth100onsmartphone" name="defaultkey" value="">';
    +print '<input type="text" class="flat maxwidth100onsmartphone" name="defaultkey" value="'.dol_escape_htmltag(GETPOST('defaultkey','alphanohtml')).'">';
     print '</td>';
     // Value
    -if ($mode != 'focus')
    +if ($mode != 'focus' && $mode != 'mandatory')
     {
         print '<td>';
         print '<input type="text" class="flat maxwidth100onsmartphone" name="defaultvalue" value="">';
    @@ -311,15 +316,16 @@ if ($mode != 'focus')
     if (! empty($conf->multicompany->enabled) && !$user->entity)
     {
     	print '<td>';
    -	print '<input type="text" class="flat" size="1" name="entity" value="'.$conf->entity.'">';
    +	print '<input type="text" class="flat" size="1" disabled name="entity" value="'.$conf->entity.'">';	// We see environment, but to change it we must switch on other entity
     	print '</td>';
    -	print '<td align="center">';
     }
     else
     {
     	print '<td align="center">';
     	print '<input type="hidden" name="entity" value="'.$conf->entity.'">';
    +	print '</td>';
     }
    +print '<td align="center">';
     $disabled='';
     if (empty($conf->global->MAIN_ENABLE_DEFAULT_VALUES)) $disabled=' disabled="disabled"';
     print '<input type="submit" class="button"'.$disabled.' value="'.$langs->trans("Add").'" name="add">';
    @@ -363,7 +369,7 @@ if ($result)
     		print '</td>'."\n";
     
     		// Value
    -		if ($mode != 'focus')
    +		if ($mode != 'focus' && $mode != 'mandatory')
     		{
         		print '<td>';
         		/*print '<input type="hidden" name="const['.$i.'][rowid]" value="'.$obj->rowid.'">';
    @@ -376,6 +382,9 @@ if ($result)
         		print '</td>';
     		}
     
    +		// Multicompany
    +		print '<td></td>';
    +
     		// Actions
     		print '<td align="center">';
     		if ($action != 'edit' || GETPOST('rowid') != $obj->rowid)
    @@ -412,7 +421,6 @@ dol_fiche_end();
     
     print "</form>\n";
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/delais.php b/htdocs/admin/delais.php
    index ae3c43c5b24..a48be10b4e0 100644
    --- a/htdocs/admin/delais.php
    +++ b/htdocs/admin/delais.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2005       Simon Tosser            <simon@kornog-computing.com>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2016       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -122,6 +122,13 @@ $modules=array(
     		),
     );
     
    +$labelmeteo = array(0=>$langs->trans("No"), 1=>$langs->trans("Yes"), 2=>$langs->trans("OnMobileOnly"));
    +
    +
    +/*
    + * Actions
    + */
    +
     if ($action == 'update')
     {
     	foreach($modules as $module => $delays)
    @@ -148,7 +155,6 @@ if ($action == 'update')
     	for($i=0; $i<4; $i++) {
         	if(isset($_POST['MAIN_METEO'.$plus.'_LEVEL'.$i])) dolibarr_set_const($db, 'MAIN_METEO'.$plus.'_LEVEL'.$i, GETPOST('MAIN_METEO'.$plus.'_LEVEL'.$i, 'int'),'chaine',0,'',$conf->entity);
         }
    -
     }
     
     
    @@ -201,9 +207,10 @@ if ($action == 'edit')
     	print '<table class="noborder" width="100%">';
     	print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td class="center" width="120px">'.$langs->trans("Value").'</td></tr>';
     
    -	$var=false;
     	print '<tr class="oddeven">';
    -	print '<td>'.$langs->trans("MAIN_DISABLE_METEO").'</td><td class="center">' .$form->selectyesno('MAIN_DISABLE_METEO',(empty($conf->global->MAIN_DISABLE_METEO)?0:1),1) . '</td></tr>';
    +	print '<td>'.$langs->trans("MAIN_DISABLE_METEO").'</td><td class="center">';
    +	print $form->selectarray('MAIN_DISABLE_METEO', $labelmeteo, (empty($conf->global->MAIN_DISABLE_METEO)?0:$conf->global->MAIN_DISABLE_METEO));
    +	print '</td></tr>';
     
     	print '</table>';
     }
    @@ -241,10 +248,11 @@ else
     	print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td class="center" width="120px">'.$langs->trans("Value").'</td></tr>';
     
     	print '<tr class="oddeven">';
    -	print '<td>'.$langs->trans("MAIN_DISABLE_METEO").'</td><td class="center">' . yn($conf->global->MAIN_DISABLE_METEO) . '</td></tr>';
    +	print '<td>'.$langs->trans("MAIN_DISABLE_METEO").'</td><td class="center">';
    +	print $labelmeteo[$conf->global->MAIN_DISABLE_METEO];
    +	print '</td></tr>';
     
     	print '</table>';
    -
     }
     
     print '<br>';
    @@ -262,7 +270,6 @@ if($action == 'edit') {
     	print '<input type="hidden" id="MAIN_USE_METEO_WITH_PERCENTAGE" name="MAIN_USE_METEO_WITH_PERCENTAGE" value="'.$conf->global->MAIN_USE_METEO_WITH_PERCENTAGE.'" />';
     
     	print '<br><br>';
    -
     } else {
     	if(empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) print $langs->trans('MeteoStdModEnabled');
     	else print $langs->trans('MeteoPercentageModEnabled');
    @@ -352,7 +359,6 @@ if ($action == 'edit') {
     	</script>
     
     	<?php
    -
     } else {
     
     	if(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE)) {
    @@ -375,7 +381,6 @@ if ($action == 'edit') {
     		print '&gt; '.$conf->global->MAIN_METEO_PERCENTAGE_LEVEL3.'&nbsp;%</td>';
     		print '</div>';
     		print '</div>';
    -
     	} else {
     
     		print '<div>';
    @@ -396,7 +401,6 @@ if ($action == 'edit') {
     		print '&gt; '.$level3;
     		print '</div>';
     		print '</div>';
    -
     	}
     }
     
    @@ -406,14 +410,13 @@ if($action == 'edit') {
     
     	print '<br><div class="center"><input type="submit" class="button" value="'.$langs->trans("Save").'"></div>';
     	print '<br></form>';
    -
     } else {
     
     	// Boutons d'action
     	print '<br><div class="tabsAction">';
     	print '<a class="butAction" href="delais.php?action=edit">'.$langs->trans("Modify").'</a></div>';
    -
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/dict.php b/htdocs/admin/dict.php
    index a60e0be68c8..1b03101a2ae 100644
    --- a/htdocs/admin/dict.php
    +++ b/htdocs/admin/dict.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2016	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2011-2015	Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2011		Remy Younes				<ryounes@gmail.com>
    @@ -456,7 +456,7 @@ $tabhelp[8]  = array('code'=>$langs->trans("EnterAnyCode"), 'position'=>$langs->
     $tabhelp[9]  = array('code'=>$langs->trans("EnterAnyCode"), 'unicode'=>$langs->trans("UnicodeCurrency"));
     $tabhelp[10] = array('code'=>$langs->trans("EnterAnyCode"), 'taux'=>$langs->trans("SellTaxRate"), 'recuperableonly'=>$langs->trans("RecuperableOnly"), 'localtax1_type'=>$langs->trans("LocalTaxDesc"), 'localtax2_type'=>$langs->trans("LocalTaxDesc"));
     $tabhelp[11] = array('code'=>$langs->trans("EnterAnyCode"), 'position'=>$langs->trans("PositionIntoComboList"));
    -$tabhelp[12] = array('code'=>$langs->trans("EnterAnyCode"), 'type_cdr'=>$langs->trans("TypeCdr"));
    +$tabhelp[12] = array('code'=>$langs->trans("EnterAnyCode"), 'type_cdr'=>$langs->trans("TypeCdr", $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset"), $langs->transnoentitiesnoconv("NbOfDays"), $langs->transnoentitiesnoconv("Offset")));
     $tabhelp[13] = array('code'=>$langs->trans("EnterAnyCode"));
     $tabhelp[14] = array('code'=>$langs->trans("EnterAnyCode"));
     $tabhelp[15] = array('code'=>$langs->trans("EnterAnyCode"));
    @@ -592,7 +592,7 @@ if ($id == 10)
      * Actions
      */
     
    -if (GETPOST('button_removefilter') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter_x'))
    +if (GETPOST('button_removefilter', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter_x', 'alpha'))
     {
         $search_country_id = '';
         $search_code = '';
    @@ -705,7 +705,6 @@ if (GETPOST('actionadd') || GETPOST('actionmodify'))
                 {
                     $obj = $db->fetch_object($result);
                     $newid=($obj->newid + 1);
    -
                 } else {
                     dol_print_error($db);
                 }
    @@ -950,8 +949,8 @@ if (empty($id))
     {
         print $langs->trans("DictionaryDesc");
         print " ".$langs->trans("OnlyActiveElementsAreShown")."<br>\n";
    +    print '<br>';
     }
    -print "<br>\n";
     
     
     $param = '&id='.urlencode($id);
    @@ -1016,6 +1015,13 @@ if ($id)
         print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
         print '<input type="hidden" name="from" value="'.dol_escape_htmltag(GETPOST('from','alpha')).'">';
     
    +    if ($id == 10 && empty($conf->global->FACTURE_TVAOPTION))
    +    {
    +    	print info_admin($langs->trans("VATIsUsedIsOff", $langs->transnoentities("Setup"), $langs->transnoentities("CompanyFoundation")));
    +    }
    +
    +    print "<br>\n";
    +
         // Form to add a new line
         if ($tabname[$id])
         {
    @@ -1735,7 +1741,7 @@ else
     
     print '<br>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/admin/dolistore/ajax/image.php b/htdocs/admin/dolistore/ajax/image.php
    index 14d05a036e8..c1bb4e997dc 100644
    --- a/htdocs/admin/dolistore/ajax/image.php
    +++ b/htdocs/admin/dolistore/ajax/image.php
    @@ -20,22 +20,11 @@ if (!defined('REQUIRE_JQUERY_BLOCKUI')) define('REQUIRE_JQUERY_BLOCKUI', 1);
     
     
     /**
    - *      \file       htdocs/commande/info.php
    - *      \ingroup    commande
    - * 		\brief      Page des informations d'une commande
    + *      \file       htdocs/admin/dolistore/ajax/image.php
    + *      \ingroup    admin
    + *      \brief      Page des informations dolistore
      */
    -$res = 0;
    -if (!$res && file_exists("../main.inc.php")) $res = @include("../main.inc.php");
    -if (!$res && file_exists("../../main.inc.php")) $res = @include("../../main.inc.php");
    -if (!$res && file_exists("../../../main.inc.php")) $res = @include("../../../main.inc.php");
    -if (!$res && file_exists("../../../../main.inc.php")) $res = @include("../../../../main.inc.php");
    -if (!$res && file_exists("../../../dolibarr/htdocs/main.inc.php"))
    -        $res = @include("../../../dolibarr/htdocs/main.inc.php");     // Used on dev env only
    -if (!$res && file_exists("../../../../dolibarr/htdocs/main.inc.php"))
    -        $res = @include("../../../../dolibarr/htdocs/main.inc.php");   // Used on dev env only
    -if (!$res && file_exists("../../../../../dolibarr/htdocs/main.inc.php"))
    -        $res = @include("../../../../../dolibarr/htdocs/main.inc.php");   // Used on dev env only
    -if (!$res) die("Include of main fails");
    +require "../../../main.inc.php";
     
     // CORE
     
    @@ -52,8 +41,10 @@ $quality    = GETPOST('quality', 'alpha');
     
     try {
         $url = $conf->global->MAIN_MODULE_DOLISTORE_API_SRV.'/api/images/products/'.$id_product.'/'.$id_image.'/'.$quality;
    -    $api        = new PrestaShopWebservice($conf->global->MAIN_MODULE_DOLISTORE_API_SRV,
    -        $conf->global->MAIN_MODULE_DOLISTORE_API_KEY, $dolistore->debug_api);
    +    $api = new PrestaShopWebservice(
    +        $conf->global->MAIN_MODULE_DOLISTORE_API_SRV,
    +        $conf->global->MAIN_MODULE_DOLISTORE_API_KEY, $dolistore->debug_api
    +    );
         //echo $url;
         $request = $api->executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'GET'));
         header('Content-type:image');
    @@ -65,4 +56,3 @@ try {
         else if ($trace[0]['args'][0] == 401) die('Bad auth key');
         else die('Can not access to '.$conf->global->MAIN_MODULE_DOLISTORE_API_SRV);
     }
    -
    diff --git a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php
    index de3ca683519..c8fcd061689 100644
    --- a/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php
    +++ b/htdocs/admin/dolistore/class/PSWebServiceLibrary.class.php
    @@ -53,7 +53,7 @@ class PrestaShopWebservice
     	 * PrestaShopWebservice constructor. Throw an exception when CURL is not installed/activated
     	 * <code>
     	 * <?php
    -	 * require_once('./PrestaShopWebservice.php');
    +	 * require_once './PrestaShopWebservice.php';
     	 * try
     	 * {
     	 * 	$ws = new PrestaShopWebservice('http://mystore.com/', 'ZQ88PRJX5VWQHCWE4EE7SQ7HPNX00RAJ', false);
    @@ -69,7 +69,8 @@ class PrestaShopWebservice
     	 * @param string $key Authentification key
     	 * @param mixed $debug Debug mode Activated (true) or deactivated (false)
     	*/
    -	function __construct($url, $key, $debug = true) {
    +    function __construct($url, $key, $debug = true)
    +    {
     		if (!extension_loaded('curl'))
     		  throw new PrestaShopWebserviceException('Please activate the PHP extension \'curl\' to allow use of PrestaShop webservice library');
     		$this->url = $url;
    @@ -82,6 +83,7 @@ class PrestaShopWebservice
     	 * Take the status code and throw an exception if the server didn't return 200 or 201 code
     	 *
     	 * @param int $status_code Status code of an HTTP return
    +     * @return void
     	 */
     	protected function checkStatusCode($status_code)
     	{
    @@ -175,7 +177,6 @@ class PrestaShopWebservice
     		{
     			$this->printDebug('HTTP REQUEST HEADER', curl_getinfo($session, CURLINFO_HEADER_OUT));
     			$this->printDebug('HTTP RESPONSE HEADER', $header);
    -
     		}
     		$status_code = curl_getinfo($session, CURLINFO_HTTP_CODE);
     		if ($status_code === 0)
    @@ -279,7 +280,7 @@ class PrestaShopWebservice
     	 * </p>
     	 * <code>
     	 * <?php
    -	 * require_once('./PrestaShopWebservice.php');
    +	 * require_once './PrestaShopWebservice.php';
     	 * try
     	 * {
     	 * $ws = new PrestaShopWebservice('http://mystore.com/', 'ZQ88PRJX5VWQHCWE4EE7SQ7HPNX00RAJ', false);
    @@ -383,7 +384,7 @@ class PrestaShopWebservice
     		else
     			throw new PrestaShopWebserviceException('Bad parameters given');
     
    -		$request = self::executeRequest($url,  array(CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_POSTFIELDS => $xml));
    +		$request = self::executeRequest($url, array(CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_POSTFIELDS => $xml));
     		self::checkStatusCode($request['status_code']);// check the response validity
     		return self::parseXML($request['response']);
     	}
    diff --git a/htdocs/admin/dolistore/class/dolistore.class.php b/htdocs/admin/dolistore/class/dolistore.class.php
    index 660886c835d..859b9140f86 100644
    --- a/htdocs/admin/dolistore/class/dolistore.class.php
    +++ b/htdocs/admin/dolistore/class/dolistore.class.php
    @@ -25,9 +25,18 @@ include_once DOL_DOCUMENT_ROOT.'/admin/dolistore/class/PSWebServiceLibrary.class
      */
     class Dolistore
     {
    -	// params
    -	public $start;       // beginning of pagination
    -	public $end;         // end of pagination
    +    /**
    +     * beginning of pagination
    +     * @var int
    +     */
    +
    +     public $start;
    +    /**
    +     * end of pagination
    +     * @var int
    +     */
    +    public $end;
    +
     	public $per_page;    // pagination: display per page
     	public $categorie;   // the current categorie
     	public $search;      // the search keywords
    @@ -154,6 +163,7 @@ class Dolistore
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return tree of Dolistore categories. $this->categories must have been loaded before.
     	 *
    @@ -162,6 +172,7 @@ class Dolistore
     	 */
     	function get_categories($parent = 0)
     	{
    +        // phpcs:enable
     		if (!isset($this->categories)) die('not possible');
     		if ($parent != 0) {
     			$html = '<ul>';
    @@ -201,6 +212,7 @@ class Dolistore
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return list of product formated for output
     	 *
    @@ -208,6 +220,7 @@ class Dolistore
     	 */
     	function get_products()
     	{
    +        // phpcs:enable
     		global $langs, $conf;
     		$html       = "";
     		$parity     = "pair";
    @@ -282,18 +295,41 @@ class Dolistore
     		return $html;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * get previous link
    +     *
    +     * @param   string    $text     symbol previous
    +     * @return  string              html previous link
    +     */
     	function get_previous_link($text = '<<')
     	{
    +        // phpcs:enable
     		return '<a href="'.$this->get_previous_url().'" class="button">'.$text.'</a>';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * get next link
    +     *
    +     * @param   string    $text     symbol next
    +     * @return  string              html next link
    +     */
     	function get_next_link($text = '>>')
     	{
    +        // phpcs:enable
     		return '<a href="'.$this->get_next_url().'" class="button">'.$text.'</a>';
     	}
     
    -	function get_previous_url()
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +   /**
    +     * get previous url
    +     *
    +     * @return string    previous url
    +     */
    +    function get_previous_url()
     	{
    +        // phpcs:enable
     		$param_array = array();
     		if ($this->start < $this->per_page) {
     			$sub = 0;
    @@ -309,8 +345,15 @@ class Dolistore
     		return $this->url."&".$param;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * get next url
    +     *
    +     * @return string    next url
    +     */
     	function get_next_url()
     	{
    +        // phpcs:enable
     		$param_array = array();
     		if (count($this->products) < $this->per_page) {
     			$add = 0;
    @@ -326,8 +369,17 @@ class Dolistore
     		return $this->url."&".$param;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * version compare
    +     *
    +     * @param   string  $v1     version 1
    +     * @param   string  $v2     version 2
    +     * @return int              result of compare
    +     */
     	function version_compare($v1, $v2)
     	{
    +        // phpcs:enable
     		$v1       = explode('.', $v1);
     		$v2       = explode('.', $v2);
     		$ret      = 0;
    @@ -355,4 +407,3 @@ class Dolistore
     		return $ret;
     	}
     }
    -
    diff --git a/htdocs/admin/dolistore/css/dolistore.css b/htdocs/admin/dolistore/css/dolistore.css
    index bba808a21a0..fb4dc2d5bb1 100644
    --- a/htdocs/admin/dolistore/css/dolistore.css
    +++ b/htdocs/admin/dolistore/css/dolistore.css
    @@ -6,10 +6,10 @@ div.divsearchfield {
     }
     
     .margeCoteGauche,.margeCote{
    -    padding-right: 20px!important;   
    +    padding-right: 20px!important;
     }
     .margeCote,.margeCoteDroite{
    -    padding-left: 20px!important;    
    +    padding-left: 20px!important;
     }
     .nomargesupinf{
         margin-top: 0;
    @@ -26,13 +26,13 @@ div.divsearchfield {
         width: 100%;
     }
     .tree{
    -    margin: 0px 0px 0px 0px; 
    +    margin: 0px 0px 0px 0px;
         padding:0px;
         list-style: none; line-height: 2em; font-family: Arial;
     }
     .tree li{
         font-size: 16px;
    -    position: relative;list-style: none; 
    +    position: relative;list-style: none;
     }
     .tree li:before{
         position: absolute;
    @@ -65,7 +65,7 @@ div.divsearchfield {
     .tree li.root:after{
         display: none;
     }
    -.tree li:last-child:after{ 
    +.tree li:last-child:after{
         display: none
     }
     .blockUI {
    @@ -159,7 +159,7 @@ textarea.row4{
     
     .reviewList {
         max-height: 150px;
    -    overflow-y: scroll; 
    +    overflow-y: scroll;
     }
     
     .reviewRow{
    diff --git a/htdocs/admin/ecm.php b/htdocs/admin/ecm.php
    index dc2f3e489f7..3126f432938 100644
    --- a/htdocs/admin/ecm.php
    +++ b/htdocs/admin/ecm.php
    @@ -109,5 +109,6 @@ print '</td></tr>';
     
     print '</table>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/emailcollector_card.php b/htdocs/admin/emailcollector_card.php
    new file mode 100644
    index 00000000000..ff037f67aa1
    --- /dev/null
    +++ b/htdocs/admin/emailcollector_card.php
    @@ -0,0 +1,602 @@
    +<?php
    +/* Copyright (C) 2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *   	\file       htdocs/admin/emailcollector_card.php
    + *		\ingroup    emailcollector
    + *		\brief      Page to create/edit/view emailcollector
    + */
    +
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/events.class.php';
    +
    +include_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
    +include_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
    +include_once DOL_DOCUMENT_ROOT.'/emailcollector/class/emailcollector.class.php';
    +include_once DOL_DOCUMENT_ROOT.'/emailcollector/class/emailcollectorfilter.class.php';
    +include_once DOL_DOCUMENT_ROOT.'/emailcollector/class/emailcollectoraction.class.php';
    +include_once DOL_DOCUMENT_ROOT.'/emailcollector/lib/emailcollector.lib.php';
    +
    +if (!$user->admin)
    +	accessforbidden();
    +
    +// Load traductions files requiredby by page
    +$langs->loadLangs(array("admin", "mails", "other"));
    +
    +// Get parameters
    +$id			= GETPOST('id', 'int');
    +$ref        = GETPOST('ref', 'alpha');
    +$action		= GETPOST('action', 'aZ09');
    +$confirm    = GETPOST('confirm', 'alpha');
    +$cancel     = GETPOST('cancel', 'aZ09');
    +$contextpage= GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'myobjectcard';   // To manage different context of search
    +$backtopage = GETPOST('backtopage', 'alpha');
    +
    +// Initialize technical objects
    +$object = new EmailCollector($db);
    +$extrafields = new ExtraFields($db);
    +$diroutputmassaction = $conf->emailcollector->dir_output . '/temp/massgeneration/' . $user->id;
    +$hookmanager->initHooks(array('emailcollectorcard')); // Note that conf->hooks_modules contains array
    +// Fetch optionals attributes and labels
    +$extralabels = $extrafields->fetch_name_optionals_label('emailcollector');
    +$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
    +
    +// Initialize array of search criterias
    +$search_all = trim(GETPOST("search_all", 'alpha'));
    +$search = array();
    +foreach ($object->fields as $key => $val) {
    +	if (GETPOST('search_'.$key,'alpha')) $search[$key]=GETPOST('search_'.$key,'alpha');
    +}
    +
    +if (empty($action) && empty($id) && empty($ref)) $action='view';
    +
    +// Load object
    +include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php';  // Must be include, not include_once  // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals
    +
    +// Security check - Protection if external user
    +//if ($user->societe_id > 0) access_forbidden();
    +//if ($user->societe_id > 0) $socid = $user->societe_id;
    +//$isdraft = (($object->statut == MyObject::STATUS_DRAFT) ? 1 : 0);
    +//$result = restrictedArea($user, 'mymodule', $object->id, '', '', 'fk_soc', 'rowid', $isdraft);
    +
    +
    +/*
    + * Actions
    + */
    +
    +$parameters = array();
    +$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
    +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +
    +if (empty($reshook))
    +{
    +	$error = 0;
    +
    +	$permissiontoadd=1;
    +	$permissiontodelete=1;
    +	if (empty($backtopage)) $backtopage = DOL_URL_ROOT.'/admin/emailcollector_card.php?id='.($id > 0 ? $id : '__ID__');
    +	$backurlforlist = DOL_URL_ROOT.'/admin/emailcollector_list.php';
    +
    +	// Actions cancel, add, update, delete or clone
    +	include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';
    +
    +	// Actions when linking object each other
    +	include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';		// Must be include, not include_once
    +
    +	// Actions when printing a doc from card
    +	include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
    +}
    +
    +if (GETPOST('addfilter','alpha'))
    +{
    +	$emailcollectorfilter = new EmailCollectorFilter($db);
    +	$emailcollectorfilter->type = GETPOST('filtertype','az09');
    +	$emailcollectorfilter->rulevalue = GETPOST('rulevalue', 'alpha');
    +	$emailcollectorfilter->fk_emailcollector = $object->id;
    +	$emailcollectorfilter->status = 1;
    +	$result = $emailcollectorfilter->create($user);
    +
    +	if ($result > 0)
    +	{
    +		$object->fetchFilters();
    +	}
    +	else
    +	{
    +		setEventMessages($emailcollectorfilter->errors, $emailcollectorfilter->error, 'errors');
    +	}
    +}
    +
    +if ($action == 'deletefilter')
    +{
    +	$emailcollectorfilter = new EmailCollectorFilter($db);
    +	$emailcollectorfilter->fetch(GETPOST('filterid','int'));
    +	$result = $emailcollectorfilter->delete($user);
    +	if ($result > 0)
    +	{
    +		$object->fetchFilters();
    +	}
    +	else
    +	{
    +		setEventMessages($emailcollectorfilter->errors, $emailcollectorfilter->error, 'errors');
    +	}
    +}
    +
    +if (GETPOST('addoperation','alpha'))
    +{
    +	$emailcollectoroperation = new EmailCollectorAction($db);
    +	$emailcollectoroperation->type = GETPOST('operationtype','az09');
    +	$emailcollectoroperation->actionparam = GETPOST('operationparam', 'none');
    +	$emailcollectoroperation->fk_emailcollector = $object->id;
    +	$emailcollectoroperation->status = 1;
    +	$emailcollectoroperation->position = 50;
    +
    +	$result = $emailcollectoroperation->create($user);
    +
    +	if ($result > 0)
    +	{
    +		$object->fetchActions();
    +	}
    +	else
    +	{
    +		setEventMessages($emailcollectoroperation->errors, $emailcollectoroperation->error, 'errors');
    +	}
    +}
    +
    +if ($action == 'deleteoperation')
    +{
    +	$emailcollectoroperation = new EmailCollectorAction($db);
    +	$emailcollectoroperation->fetch(GETPOST('operationid','int'));
    +	$result = $emailcollectoroperation->delete($user);
    +	if ($result > 0)
    +	{
    +		$object->fetchActions();
    +	}
    +	else
    +	{
    +		setEventMessages($emailcollectoroperation->errors, $emailcollectoroperation->error, 'errors');
    +	}
    +}
    +
    +if ($action == 'confirm_collect')
    +{
    +	dol_include_once('/emailcollector/class/emailcollector.class.php');
    +
    +	$res = $object->doCollectOneCollector();
    +
    +	if ($res > 0)
    +	{
    +		setEventMessages($object->output, null, 'mesgs');
    +	}
    +	else
    +	{
    +		setEventMessages($object->error, null, 'errors');
    +	}
    +
    +	$action = '';
    +}
    +
    +
    +
    +
    +/*
    + * View
    + */
    +
    +$form = new Form($db);
    +$formfile = new FormFile($db);
    +
    +llxHeader('', 'EmailCollector', '');
    +
    +// Example : Adding jquery code
    +print '<script type="text/javascript" language="javascript">
    +jQuery(document).ready(function() {
    +	function init_myfunc()
    +	{
    +		jQuery("#myid").removeAttr(\'disabled\');
    +		jQuery("#myid").attr(\'disabled\',\'disabled\');
    +	}
    +	init_myfunc();
    +	jQuery("#mybutton").click(function() {
    +		init_myfunc();
    +	});
    +});
    +</script>';
    +
    +// Part to create
    +if ($action == 'create') {
    +	print load_fiche_titre($langs->trans("NewEmailCollector", $langs->transnoentitiesnoconv("EmailCollector")));
    +
    +	print '<form method="POST" action="' . $_SERVER["PHP_SELF"] . '">';
    +	print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
    +	print '<input type="hidden" name="action" value="add">';
    +	print '<input type="hidden" name="backtopage" value="' . $backtopage . '">';
    +
    +	dol_fiche_head(array(), '');
    +
    +	print '<table class="border centpercent">'."\n";
    +
    +	//unset($fields[]);
    +
    +	// Common attributes
    +	include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_add.tpl.php';
    +
    +	// Other attributes
    +	include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_add.tpl.php';
    +
    +	print '</table>'."\n";
    +
    +	dol_fiche_end();
    +
    +	print '<div class="center">';
    +	print '<input type="submit" class="button" name="add" value="' . dol_escape_htmltag($langs->trans("Create")) . '">';
    +	print '&nbsp; ';
    +	print '<input type="' . ($backtopage ? "submit" : "button") . '" class="button" name="cancel" value="' . dol_escape_htmltag($langs->trans("Cancel")) . '"' . ($backtopage ? '' : ' onclick="javascript:history.go(-1)"') . '>'; // Cancel for create does not post form if we don't know the backtopage
    +	print '</div>';
    +
    +	print '</form>';
    +}
    +
    +// Part to edit record
    +if (($id || $ref) && $action == 'edit')
    +{
    +	print load_fiche_titre($langs->trans("EmailCollector"));
    +
    +	print '<form method="POST" action="' . $_SERVER["PHP_SELF"] . '">';
    +	print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
    +	print '<input type="hidden" name="action" value="update">';
    +	print '<input type="hidden" name="backtopage" value="' . $backtopage . '">';
    +	print '<input type="hidden" name="id" value="' . $object->id . '">';
    +
    +	dol_fiche_head();
    +
    +	print '<table class="border centpercent">' . "\n";
    +
    +	// Common attributes
    +	include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_edit.tpl.php';
    +
    +	// Other attributes
    +	include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_edit.tpl.php';
    +
    +	print '</table>';
    +
    +	dol_fiche_end();
    +
    +	print '<div class="center"><input type="submit" class="button" name="save" value="' . $langs->trans("Save") . '">';
    +	print ' &nbsp; <input type="submit" class="button" name="cancel" value="' . $langs->trans("Cancel") . '">';
    +	print '</div>';
    +
    +	print '</form>';
    +}
    +
    +// Part to show record
    +if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create')))
    +{
    +	$res = $object->fetch_optionals();
    +
    +	$object->fetchFilters();
    +	$object->fetchActions();
    +
    +	$head = emailcollectorPrepareHead($object);
    +	dol_fiche_head($head, 'card', $langs->trans("EmailCollector"), -1, 'emailcollector');
    +
    +	$formconfirm = '';
    +
    +	// Confirmation to delete
    +	if ($action == 'delete')
    +	{
    +		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteEmailCollector'), $langs->trans('ConfirmDeleteEmailCollector'), 'confirm_delete', '', 0, 1);
    +	}
    +
    +	// Clone confirmation
    +	if ($action == 'clone') {
    +		// Create an array for form
    +		$formquestion = array();
    +		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('CloneMyObject'), $langs->trans('ConfirmCloneMyObject', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
    +	}
    +
    +	// Confirmation of action process
    +	if ($action == 'collect') {
    +		$formquestion = array(
    +			'text' => $langs->trans("EmailCollectorConfirmCollect"),
    +		);
    +		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('EmailCollectorConfirmCollectTitle'), $text, 'confirm_collect', $formquestion, 0, 1, 220);
    +	}
    +
    +	// Call Hook formConfirm
    +	$parameters = array('lineid' => $lineid);
    +	$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +	if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +	elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    +
    +	// Print form confirm
    +	print $formconfirm;
    +
    +	// Object card
    +	// ------------------------------------------------------------
    +	$linkback = '<a href="' . dol_buildpath('/admin/emailcollector_list.php', 1) . '?restore_lastsearch_values=1' . (!empty($socid) ? '&socid=' . $socid : '') . '">' . $langs->trans("BackToList") . '</a>';
    +
    +	$morehtmlref = '<div class="refidno">';
    +	/*
    +		// Ref bis
    +		$morehtmlref.=$form->editfieldkey("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->emailcollector->creer, 'string', '', 0, 1);
    +		$morehtmlref.=$form->editfieldval("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->emailcollector->creer, 'string', '', null, null, '', 1);
    +		// Thirdparty
    +		$morehtmlref.='<br>'.$langs->trans('ThirdParty') . ' : ' . $soc->getNomUrl(1);
    +		// Project
    +		if (! empty($conf->projet->enabled))
    +		{
    +		    $langs->load("projects");
    +		    $morehtmlref.='<br>'.$langs->trans('Project') . ' ';
    +		    if ($user->rights->emailcollector->creer)
    +		    {
    +		        if ($action != 'classify')
    +		        {
    +		            $morehtmlref.='<a href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
    +		            if ($action == 'classify') {
    +		                //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
    +		                $morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
    +		                $morehtmlref.='<input type="hidden" name="action" value="classin">';
    +		                $morehtmlref.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +		                $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
    +		                $morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
    +		                $morehtmlref.='</form>';
    +		            } else {
    +		                $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1);
    +		            }
    +		        }
    +		    } else {
    +		        if (! empty($object->fk_project)) {
    +		            $proj = new Project($db);
    +		            $proj->fetch($object->fk_project);
    +		            $morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id=' . $object->fk_project . '" title="' . $langs->trans('ShowProject') . '">';
    +		            $morehtmlref.=$proj->ref;
    +		            $morehtmlref.='</a>';
    +		        } else {
    +		            $morehtmlref.='';
    +		        }
    +		    }
    +		}
    +	*/
    +	$morehtmlref .= '</div>';
    +
    +	$morehtml = $langs->trans("NbOfEmailsInInbox").' : ';
    +
    +	$sourcedir = $object->source_directory;
    +	$targetdir = ($object->target_directory ? $object->target_directory : '');			// Can be '[Gmail]/Trash' or 'mytag'
    +
    +	$connectstringserver = $object->getConnectStringIMAP();
    +	$connectstringsource = $connectstringserver.imap_utf7_encode($sourcedir);
    +	$connectstringtarget = $connectstringserver.imap_utf7_encode($targetdir);
    +
    +	$connection = imap_open($connectstringsource, $object->user, $object->password);
    +	if (! $connection)
    +	{
    +		$morehtml .= 'Failed to open IMAP connection '.$connectstringsource;
    +	}
    +	else
    +	{
    +		//$morehtmlstatus .= imap_num_msg($connection).'</div><div class="statusref">';
    +		$morehtml .= imap_num_msg($connection);
    +	}
    +
    +	imap_close($connection);
    +
    +	dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref.'<div class="refidno">'.$morehtml.'</div>', '', 0, '', '', 0, '');
    +
    +	print '<div class="fichecenter">';
    +	print '<div class="fichehalfleft">';
    +	print '<div class="underbanner clearboth"></div>';
    +	print '<table class="border centpercent">'."\n";
    +
    +	// Common attributes
    +	//$keyforbreak='fieldkeytoswithonsecondcolumn';
    +	include DOL_DOCUMENT_ROOT . '/core/tpl/commonfields_view.tpl.php';
    +
    +	// Other attributes
    +	include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php';
    +
    +	print '</table>';
    +
    +
    +	print '<form method="POST" action="' . $_SERVER["PHP_SELF"] . '">';
    +	print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
    +	print '<input type="hidden" name="action" value="updatefiltersactions">';
    +	print '<input type="hidden" name="backtopage" value="' . $backtopage . '">';
    +	print '<input type="hidden" name="id" value="' . $object->id . '">';
    +
    +	// Filters
    +	print '<table class="border centpercent">';
    +	print '<tr class="liste_titre">';
    +	print '<td>'.$langs->trans("Filters").'</td><td></td><td></td>';
    +	print '</tr>';
    +	// Add filter
    +	print '<tr class="oddeven">';
    +	print '<td>';
    +	$arrayoftypes=array('from'=>'MailFrom', 'to'=>'MailTo', 'cc'=>'Cc', 'bcc'=>'Bcc', 'subject'=>'Subject', 'body'=>'Body', 'seen'=>'AlreadyRead', 'unseen'=>'NotRead', 'withtrackingid'=>'WithDolTrackingID', 'withouttrackingid'=>'WithoutDolTrackingID');
    +	print $form->selectarray('filtertype', $arrayoftypes, '', 1, 0, 0, '', 1);
    +	print '</td><td>';
    +	print '<input type="text" name="rulevalue">';
    +	print '</td>';
    +	print '<td align="right"><input type="submit" name="addfilter" id="addfilter" class="flat button" value="'.$langs->trans("Add").'"></td>';
    +	print '</tr>';
    +	// List filters
    +	foreach($object->filters as $rulefilter)
    +	{
    +		$rulefilterobj=new EmailCollectorFilter($db);
    +		$rulefilterobj->fetch($rulefilter['id']);
    +
    +		print '<tr class="oddeven">';
    +		print '<td>';
    +		print $langs->trans($arrayoftypes[$rulefilter['type']]);
    +		print '</td>';
    +		print '<td>'.$rulefilter['rulevalue'].'</td>';
    +		print '<td align="right">';
    +		//print $rulefilterobj->getLibStatut(3);
    +		print ' <a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=deletefilter&filterid='.$rulefilter['id'].'">'.img_delete().'</a>';
    +		print '</td>';
    +		print '</tr>';
    +	}
    +
    +	print '</tr>';
    +	print '</table>';
    +
    +	print '<div class="clearboth"></div><br>';
    +
    +	// Operations
    +	print '<table id="tablelines" class="noborder noshadow">';
    +	print '<tr class="liste_titre">';
    +	print '<td>'.$langs->trans("EmailcollectorOperations").'</td><td></td><td></td><td></td>';
    +	print '</tr>';
    +	// Add operation
    +	print '<tr class="oddeven">';
    +	print '<td>';
    +	$arrayoftypes=array('loadthirdparty'=>'LoadThirdPartyFromName', 'loadandcreatethirdparty'=>'LoadThirdPartyFromNameOrCreate', 'recordevent'=>'RecordEvent');
    +	if ($conf->projet->enabled) $arrayoftypes['project']='CreateLeadAndThirdParty';
    +	print $form->selectarray('operationtype', $arrayoftypes, '', 1, 0, 0, '', 1);
    +	print '</td><td>';
    +	print '<input type="text" name="operationparam">';
    +	print '</td>';
    +	print '<td></td>';
    +	print '<td align="right"><input type="submit" name="addoperation" id="addoperation" class="flat button" value="'.$langs->trans("Add").'"></td>';
    +	print '</tr>';
    +	// List operations
    +	$nboflines = count($object->actions);
    +	$table_element_line = 'emailcollector_emailcollectoraction';
    +	$fk_element='position';
    +	$i=0;
    +	foreach($object->actions as $ruleaction)
    +	{
    +		$ruleactionobj=new EmailcollectorAction($db);
    +		$ruleactionobj->fetch($ruleaction['id']);
    +
    +		print '<tr class="drag drop oddeven" id="row-'.$ruleaction['id'].'">';
    +		print '<td>';
    +		print $langs->trans($arrayoftypes[$ruleaction['type']]);
    +		print '</td>';
    +		print '<td>'.$ruleaction['actionparam'].'</td>';
    +		print '<td align="right">';
    +		//print $ruleactionobj->getLibStatut(3);
    +		print ' <a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=deleteoperation&operationid='.$ruleaction['id'].'">'.img_delete().'</a>';
    +		print '</td>';
    +		print '<td class="center linecolmove tdlineupdown">';
    +		if ($i > 0)
    +		{
    +			print '<a class="lineupdown" href="'.$_SERVER['PHP_SELF'].'?action=up&amp;rowid='.$ruleaction['id'].'">'.img_up('default', 0, 'imgupforline').'</a>';
    +		}
    +		if ($i < count($object->actions)-1) {
    +			print '<a class="lineupdown" href="'.$_SERVER['PHP_SELF'].'?action=down&amp;rowid='.$ruleaction['id'].'">'.img_down('default', 0, 'imgdownforline').'</a>';
    +		}
    +		print '</td>';
    +		print '</tr>';
    +		$i++;
    +	}
    +
    +	print '</tr>';
    +	print '</table>';
    +
    +	if (! empty($conf->use_javascript_ajax)) {
    +		include DOL_DOCUMENT_ROOT . '/core/tpl/ajaxrow.tpl.php';
    +	}
    +
    +	print '</form>';
    +
    +	print '</div>';
    +	print '</div>';	// End <div class="fichecenter">
    +
    +
    +	print '<div class="clearboth"></div><br>';
    +
    +	dol_fiche_end();
    +
    +	// Buttons for actions
    +	if ($action != 'presend' && $action != 'editline') {
    +		print '<div class="tabsAction">' . "\n";
    +		$parameters = array();
    +		$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +		if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +
    +		if (empty($reshook))
    +		{
    +			print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=edit">' . $langs->trans("Edit") . '</a>' . "\n";
    +
    +			print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=collect">' . $langs->trans("CollectNow") . '</a>' . "\n";
    +
    +			print '<a class="butActionDelete" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=delete">' . $langs->trans('Delete') . '</a>' . "\n";
    +		}
    +		print '</div>' . "\n";
    +	}
    +
    +	// Select mail models is same action as presend
    +	if (GETPOST('modelselected')) {
    +		$action = 'presend';
    +	}
    +
    +	/*
    +	if ($action != 'presend') {
    +		print '<div class="fichecenter"><div class="fichehalfleft">';
    +		print '<a name="builddoc"></a>'; // ancre
    +	*/
    +		// Documents
    +		/*$objref = dol_sanitizeFileName($object->ref);
    +	    $relativepath = $comref . '/' . $comref . '.pdf';
    +	    $filedir = $conf->emailcollector->dir_output . '/' . $objref;
    +	    $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id;
    +	    $genallowed = $user->rights->emailcollector->read;	// If you can read, you can build the PDF to read content
    +	    $delallowed = $user->rights->emailcollector->create;	// If you can create/edit, you can remove a file on card
    +	    print $formfile->showdocuments('emailcollector', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang);
    +		*/
    +	/*
    +		// Show links to link elements
    +		$linktoelem = $form->showLinkToObjectBlock($object, null, array('emailcollector'));
    +		$somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
    +
    +		print '</div><div class="fichehalfright"><div class="ficheaddleft">';
    +
    +		$MAXEVENT = 10;
    +
    +		$morehtmlright = '<a href="' . dol_buildpath('/emailcollector/emailcollector_info.php', 1) . '?id=' . $object->id . '">';
    +		$morehtmlright .= $langs->trans("SeeAll");
    +		$morehtmlright .= '</a>';
    +
    +		// List of actions on element
    +		include_once DOL_DOCUMENT_ROOT . '/core/class/html.formactions.class.php';
    +		$formactions = new FormActions($db);
    +		$somethingshown = $formactions->showactions($object, 'emailcollector_emailcollector', $socid, 1, '', $MAXEVENT, '', $morehtmlright);
    +
    +		print '</div></div></div>';
    +	}
    +	*/
    +
    +	//Select mail models is same action as presend
    +	/*
    +	 if (GETPOST('modelselected')) $action = 'presend';
    +
    +	 // Presend form
    +	 $modelmail='inventory';
    +	 $defaulttopic='InformationMessage';
    +	 $diroutput = $conf->product->dir_output.'/inventory';
    +	 $trackid = 'stockinv'.$object->id;
    +
    +	 include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
    +	 */
    +}
    +
    +// End of page
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/admin/emailcollector_list.php b/htdocs/admin/emailcollector_list.php
    new file mode 100644
    index 00000000000..71169ddffb0
    --- /dev/null
    +++ b/htdocs/admin/emailcollector_list.php
    @@ -0,0 +1,551 @@
    +<?php
    +/* Copyright (C) 2007-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *      \file       htdocs/admin/emailcollector_list.php
    + *      \ingroup    emailcollector
    + *      \brief      List page for emailcollector
    + */
    +
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/events.class.php';
    +
    +require_once DOL_DOCUMENT_ROOT . '/core/class/html.formcompany.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php';
    +dol_include_once('/emailcollector/class/emailcollector.class.php');
    +
    +if (!$user->admin) accessforbidden();
    +
    +// Load traductions files requiredby by page
    +$langs->loadLangs(array("admin", "other"));
    +
    +$action     = GETPOST('action','aZ09')?GETPOST('action','aZ09'):'view';				// The action 'add', 'create', 'edit', 'update', 'view', ...
    +$massaction = GETPOST('massaction','alpha');											// The bulk action (combo box choice into lists)
    +$show_files = GETPOST('show_files','int');												// Show files area generated by bulk actions ?
    +$confirm    = GETPOST('confirm','alpha');												// Result of a confirmation
    +$cancel     = GETPOST('cancel', 'alpha');												// We click on a Cancel button
    +$toselect   = GETPOST('toselect', 'array');												// Array of ids of elements selected into a list
    +$contextpage= GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'emailcollectorlist';   // To manage different context of search
    +$backtopage = GETPOST('backtopage','alpha');											// Go back to a dedicated page
    +$optioncss  = GETPOST('optioncss','aZ');												// Option for the css output (always '' except when 'print')
    +
    +$id			= GETPOST('id','int');
    +
    +// Load variable for pagination
    +$limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
    +$sortfield = GETPOST('sortfield','alpha');
    +$sortorder = GETPOST('sortorder','alpha');
    +$page = GETPOST('page','int');
    +if (empty($page) || $page == -1 || GETPOST('button_search','alpha') || GETPOST('button_removefilter','alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; }     // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action
    +$offset = $limit * $page;
    +$pageprev = $page - 1;
    +$pagenext = $page + 1;
    +//if (! $sortfield) $sortfield="p.date_fin";
    +//if (! $sortorder) $sortorder="DESC";
    +
    +// Initialize technical objects
    +$object = new EmailCollector($db);
    +$extrafields = new ExtraFields($db);
    +$diroutputmassaction = $conf->emailcollector->dir_output . '/temp/massgeneration/' . $user->id;
    +$hookmanager->initHooks(array('emailcollectorlist')); // Note that conf->hooks_modules contains array
    +// Fetch optionals attributes and labels
    +$extralabels = $extrafields->fetch_name_optionals_label('emailcollector');
    +$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
    +
    +// Default sort order (if not yet defined by previous GETPOST)
    +if (! $sortfield) $sortfield="t.".key($object->fields);   // Set here default search field. By default 1st field in definition.
    +if (! $sortorder) $sortorder="ASC";
    +
    +// Security check
    +$socid=0;
    +if ($user->societe_id > 0)	// Protection if external user
    +{
    +	//$socid = $user->societe_id;
    +	accessforbidden();
    +}
    +//$result = restrictedArea($user, 'emailcollector', $id, '');
    +
    +// Initialize array of search criterias
    +$search_all=trim(GETPOST("search_all",'alpha'));
    +$search=array();
    +foreach($object->fields as $key => $val)
    +{
    +	if (GETPOST('search_'.$key,'alpha')) $search[$key]=GETPOST('search_'.$key,'alpha');
    +}
    +
    +// List of fields to search into when doing a "search in all"
    +$fieldstosearchall = array();
    +foreach($object->fields as $key => $val)
    +{
    +	if ($val['searchall']) $fieldstosearchall['t.'.$key]=$val['label'];
    +}
    +
    +// Definition of fields for list
    +$arrayfields=array();
    +foreach($object->fields as $key => $val)
    +{
    +	// If $val['visible']==0, then we never show the field
    +	if (! empty($val['visible'])) $arrayfields['t.'.$key]=array('label'=>$val['label'], 'checked'=>(($val['visible']<0)?0:1), 'enabled'=>$val['enabled'], 'position'=>$val['position']);
    +}
    +// Extra fields
    +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0)
    +{
    +	foreach($extrafields->attributes[$object->table_element]['label'] as $key => $val)
    +	{
    +		if (! empty($extrafields->attributes[$object->table_element]['list'][$key]))
    +			$arrayfields["ef.".$key]=array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key]<0)?0:1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key])!=3 && $extrafields->attributes[$object->table_element]['perms'][$key]));
    +	}
    +}
    +$object->fields = dol_sort_array($object->fields, 'position');
    +$arrayfields = dol_sort_array($arrayfields, 'position');
    +
    +
    +
    +/*
    + * Actions
    + *
    + * Put here all code to do according to value of "$action" parameter
    + */
    +
    +if (GETPOST('cancel','alpha')) { $action='list'; $massaction=''; }
    +if (! GETPOST('confirmmassaction','alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; }
    +
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action);    // Note that $action and $object may have been modified by some hooks
    +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +
    +if (empty($reshook))
    +{
    +	// Selection of new fields
    +	include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
    +
    +	// Purge search criteria
    +	if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') ||GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers
    +	{
    +		foreach($object->fields as $key => $val)
    +		{
    +			$search[$key]='';
    +		}
    +		$toselect='';
    +		$search_array_options=array();
    +	}
    +	if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')
    +		|| GETPOST('button_search_x','alpha') || GETPOST('button_search.x','alpha') || GETPOST('button_search','alpha'))
    +	{
    +		$massaction='';     // Protection to avoid mass action if we force a new search during a mass action confirmation
    +	}
    +
    +	// Mass actions
    +	$objectclass='EmailCollector';
    +	$objectlabel='EmailCollector';
    +	$permtoread = $user->rights->emailcollector->read;
    +	$permtodelete = $user->rights->emailcollector->delete;
    +	$uploaddir = $conf->emailcollector->dir_output;
    +	include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
    +}
    +
    +
    +
    +/*
    + * View
    + *
    + * Put here all code to render page
    + */
    +
    +$form=new Form($db);
    +
    +$now=dol_now();
    +
    +//$help_url="EN:Module_EmailCollector|FR:Module_EmailCollector_FR|ES:Módulo_EmailCollector";
    +$help_url='';
    +$title = $langs->trans('ListOf', $langs->transnoentitiesnoconv("EmailCollector"));
    +
    +
    +// Build and execute select
    +// --------------------------------------------------------------------
    +$sql = 'SELECT ';
    +foreach($object->fields as $key => $val)
    +{
    +	$sql.='t.'.$key.', ';
    +}
    +// Add fields from extrafields
    +if (! empty($extrafields->attributes[$object->table_element]['label']))
    +	foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.' as options_'.$key.', ' : '');
    +// Add fields from hooks
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('printFieldListSelect', $parameters, $object);    // Note that $action and $object may have been modified by hook
    +$sql.=$hookmanager->resPrint;
    +$sql=preg_replace('/, $/','', $sql);
    +$sql.= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t";
    +if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)";
    +if ($object->ismultientitymanaged == 1) $sql.= " WHERE t.entity IN (".getEntity($object->element).")";
    +else $sql.=" WHERE 1 = 1";
    +foreach($search as $key => $val)
    +{
    +	if ($key == 'status' && $search[$key] == -1) continue;
    +	$mode_search=(($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key]))?1:0);
    +	if ($search[$key] != '') $sql.=natural_search($key, $search[$key], (($key == 'status')?2:$mode_search));
    +}
    +if ($search_all) $sql.= natural_search(array_keys($fieldstosearchall), $search_all);
    +// Add where from extra fields
    +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
    +// Add where from hooks
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters, $object);    // Note that $action and $object may have been modified by hook
    +$sql.=$hookmanager->resPrint;
    +
    +/* If a group by is required
    + $sql.= " GROUP BY "
    + foreach($object->fields as $key => $val)
    + {
    + $sql.='t.'.$key.', ';
    + }
    + // Add fields from extrafields
    + if (! empty($extrafields->attributes[$object->table_element]['label'])) {
    + foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.', ' : '');
    + // Add where from hooks
    + $parameters=array();
    + $reshook=$hookmanager->executeHooks('printFieldListGroupBy',$parameters);    // Note that $action and $object may have been modified by hook
    + $sql.=$hookmanager->resPrint;
    + $sql=preg_replace('/, $/','', $sql);
    + */
    +
    +$sql.=$db->order($sortfield,$sortorder);
    +
    +// Count total nb of records
    +$nbtotalofrecords = '';
    +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
    +{
    +	$resql = $db->query($sql);
    +	$nbtotalofrecords = $db->num_rows($resql);
    +	if (($page * $limit) > $nbtotalofrecords)	// if total of record found is smaller than page * limit, goto and load page 0
    +	{
    +		$page = 0;
    +		$offset = 0;
    +	}
    +}
    +// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set.
    +if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords)
    +{
    +	$num = $nbtotalofrecords;
    +}
    +else
    +{
    +	$sql.= $db->plimit($limit+1, $offset);
    +
    +	$resql=$db->query($sql);
    +	if (! $resql)
    +	{
    +		dol_print_error($db);
    +		exit;
    +	}
    +
    +	$num = $db->num_rows($resql);
    +}
    +
    +// Direct jump if only one record found
    +if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all)
    +{
    +	$obj = $db->fetch_object($resql);
    +	$id = $obj->rowid;
    +	header("Location: ".DOL_URL_ROOT.'/emailcollector/emailcollector_card.php?id='.$id);
    +	exit;
    +}
    +
    +
    +// Output page
    +// --------------------------------------------------------------------
    +
    +llxHeader('', $title, $help_url);
    +
    +// Example : Adding jquery code
    +print '<script type="text/javascript" language="javascript">
    +jQuery(document).ready(function() {
    +	function init_myfunc()
    +	{
    +		jQuery("#myid").removeAttr(\'disabled\');
    +		jQuery("#myid").attr(\'disabled\',\'disabled\');
    +	}
    +	init_myfunc();
    +	jQuery("#mybutton").click(function() {
    +		init_myfunc();
    +	});
    +});
    +</script>';
    +
    +$arrayofselected=is_array($toselect)?$toselect:array();
    +
    +$param='';
    +if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage);
    +if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit);
    +foreach($search as $key => $val)
    +{
    +	$param.= '&search_'.$key.'='.urlencode($search[$key]);
    +}
    +if ($optioncss != '')     $param.='&optioncss='.urlencode($optioncss);
    +// Add $param from extra fields
    +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
    +
    +// List of mass actions available
    +$arrayofmassactions =  array(
    +//'presend'=>$langs->trans("SendByMail"),
    +//'builddoc'=>$langs->trans("PDFMerge"),
    +);
    +if ($user->rights->emailcollector->delete) $arrayofmassactions['predelete']=$langs->trans("Delete");
    +if (GETPOST('nomassaction','int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array();
    +$massactionbutton=$form->selectMassAction('', $arrayofmassactions);
    +
    +print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
    +if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
    +print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
    +print '<input type="hidden" name="action" value="list">';
    +print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
    +print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
    +print '<input type="hidden" name="page" value="'.$page.'">';
    +print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
    +
    +$newcardbutton='';
    +//if ($user->rights->emailcollector->creer)
    +	//{
    +$newcardbutton='<a class="butActionNew" href="emailcollector_card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']).'"><span class="valignmiddle">'.$langs->trans('New').'</span>';
    +$newcardbutton.= '<span class="fa fa-plus-circle valignmiddle"></span>';
    +$newcardbutton.= '</a>';
    +//}
    +
    +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_companies', 0, $newcardbutton, '', $limit);
    +
    +// Add code for pre mass action (confirmation or email presend form)
    +include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
    +
    +if ($sall)
    +{
    +	foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
    +	print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall).'</div>';
    +}
    +
    +$moreforfilter = '';
    +/*$moreforfilter.='<div class="divsearchfield">';
    + $moreforfilter.= $langs->trans('MyFilter') . ': <input type="text" name="search_myfield" value="'.dol_escape_htmltag($search_myfield).'">';
    + $moreforfilter.= '</div>';*/
    +
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object);    // Note that $action and $object may have been modified by hook
    +if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint;
    +else $moreforfilter = $hookmanager->resPrint;
    +
    +if (! empty($moreforfilter))
    +{
    +	print '<div class="liste_titre liste_titre_bydiv centpercent">';
    +	print $moreforfilter;
    +	print '</div>';
    +}
    +
    +$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
    +$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
    +$selectedfields.=(count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
    +
    +print '<div class="div-table-responsive">';		// You can use div-table-responsive-no-min if you dont need reserved height for your table
    +print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
    +
    +
    +// Fields title search
    +// --------------------------------------------------------------------
    +print '<tr class="liste_titre">';
    +foreach($object->fields as $key => $val)
    +{
    +	$align='';
    +	if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center';
    +	if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap';
    +	if ($key == 'status') $align.=($align?' ':'').'center';
    +	if (! empty($arrayfields['t.'.$key]['checked'])) print '<td class="liste_titre'.($align?' '.$align:'').'"><input type="text" class="flat maxwidth75" name="search_'.$key.'" value="'.dol_escape_htmltag($search[$key]).'"></td>';
    +}
    +// Extra fields
    +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
    +
    +// Fields from hook
    +$parameters=array('arrayfields'=>$arrayfields);
    +$reshook=$hookmanager->executeHooks('printFieldListOption', $parameters, $object);    // Note that $action and $object may have been modified by hook
    +print $hookmanager->resPrint;
    +// Action column
    +print '<td class="liste_titre" align="right">';
    +$searchpicto=$form->showFilterButtons();
    +print $searchpicto;
    +print '</td>';
    +print '</tr>'."\n";
    +
    +
    +// Fields title label
    +// --------------------------------------------------------------------
    +print '<tr class="liste_titre">';
    +foreach($object->fields as $key => $val)
    +{
    +	$align='';
    +	if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center';
    +	if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap';
    +	if ($key == 'status') $align.=($align?' ':'').'center';
    +	if (! empty($arrayfields['t.'.$key]['checked'])) print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($align?'class="'.$align.'"':''), $sortfield, $sortorder, $align.' ')."\n";
    +}
    +// Extra fields
    +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
    +// Hook fields
    +$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder);
    +$reshook=$hookmanager->executeHooks('printFieldListTitle', $parameters, $object);    // Note that $action and $object may have been modified by hook
    +print $hookmanager->resPrint;
    +print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"],'','','','align="center"',$sortfield,$sortorder,'maxwidthsearch ')."\n";
    +print '</tr>'."\n";
    +
    +
    +// Detect if we need a fetch on each output line
    +$needToFetchEachLine=0;
    +if (is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0)
    +{
    +	foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val)
    +	{
    +		if (preg_match('/\$object/',$val)) $needToFetchEachLine++;  // There is at least one compute field that use $object
    +	}
    +}
    +
    +
    +// Loop on record
    +// --------------------------------------------------------------------
    +$i=0;
    +$totalarray=array();
    +while ($i < min($num, $limit))
    +{
    +	$obj = $db->fetch_object($resql);
    +	if (empty($obj)) break;		// Should not happen
    +
    +	// Store properties in $object
    +	$object->id = $obj->rowid;
    +	foreach($object->fields as $key => $val)
    +	{
    +		if (isset($obj->$key)) $object->$key = $obj->$key;
    +	}
    +
    +	// Show here line of result
    +	print '<tr class="oddeven">';
    +	foreach($object->fields as $key => $val)
    +	{
    +		$align='';
    +		if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center';
    +		if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap';
    +		if ($key == 'status') $align.=($align?' ':'').'center';
    +		if (! empty($arrayfields['t.'.$key]['checked']))
    +		{
    +			print '<td';
    +			if ($align) print ' class="'.$align.'"';
    +			print '>';
    +			print $object->showOutputField($val, $key, $obj->$key, '');
    +			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
    +			if (! empty($val['isameasure']))
    +			{
    +				if (! $i) $totalarray['pos'][$totalarray['nbfield']]='t.'.$key;
    +				$totalarray['val']['t.'.$key] += $obj->$key;
    +			}
    +		}
    +	}
    +	// Extra fields
    +	include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
    +	// Fields from hook
    +	$parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj);
    +	$reshook=$hookmanager->executeHooks('printFieldListValue', $parameters, $object);    // Note that $action and $object may have been modified by hook
    +	print $hookmanager->resPrint;
    +	// Action column
    +	print '<td class="nowrap" align="center">';
    +	if ($massactionbutton || $massaction)   // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
    +	{
    +		$selected=0;
    +		if (in_array($obj->rowid, $arrayofselected)) $selected=1;
    +		print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected?' checked="checked"':'').'>';
    +	}
    +	print '</td>';
    +	if (! $i) $totalarray['nbfield']++;
    +
    +	print '</tr>';
    +
    +	$i++;
    +}
    +
    +// Show total line
    +if (isset($totalarray['pos']))
    +{
    +	print '<tr class="liste_total">';
    +	$i=0;
    +	while ($i < $totalarray['nbfield'])
    +	{
    +		$i++;
    +		if (! empty($totalarray['pos'][$i]))  print '<td align="right">'.price($totalarray['val'][$totalarray['pos'][$i]]).'</td>';
    +		else
    +		{
    +			if ($i == 1)
    +			{
    +				if ($num < $limit) print '<td align="left">'.$langs->trans("Total").'</td>';
    +				else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
    +			}
    +			else print '<td></td>';
    +		}
    +	}
    +	print '</tr>';
    +}
    +
    +// If no record found
    +if ($num == 0)
    +{
    +	$colspan=1;
    +	foreach($arrayfields as $key => $val) { if (! empty($val['checked'])) $colspan++; }
    +	print '<tr><td colspan="'.$colspan.'" class="opacitymedium">'.$langs->trans("NoRecordFound").'</td></tr>';
    +}
    +
    +
    +$db->free($resql);
    +
    +$parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql);
    +$reshook=$hookmanager->executeHooks('printFieldListFooter', $parameters, $object);    // Note that $action and $object may have been modified by hook
    +print $hookmanager->resPrint;
    +
    +print '</table>'."\n";
    +print '</div>'."\n";
    +
    +print '</form>'."\n";
    +
    +if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nbtotalofrecords))
    +{
    +	$hidegeneratedfilelistifempty=1;
    +	if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0;
    +
    +	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
    +	$formfile = new FormFile($db);
    +
    +	// Show list of available documents
    +	$urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
    +	$urlsource.=str_replace('&amp;','&',$param);
    +
    +	$filedir=$diroutputmassaction;
    +	$genallowed=$user->rights->emailcollector->read;
    +	$delallowed=$user->rights->emailcollector->create;
    +
    +	print $formfile->showdocuments('massfilesarea_emailcollector','',$filedir,$urlsource,0,$delallowed,'',1,1,0,48,1,$param,$title,'','','',null,$hidegeneratedfilelistifempty);
    +}
    +
    +// End of page
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/admin/events.php b/htdocs/admin/events.php
    index 1d1ec548853..347f4c27489 100644
    --- a/htdocs/admin/events.php
    +++ b/htdocs/admin/events.php
    @@ -74,7 +74,7 @@ llxHeader('',$langs->trans("Audit"),$wikihelp);
     //$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
     print load_fiche_titre($langs->trans("SecuritySetup"),'','title_setup');
     
    -print $langs->trans("LogEventDesc")."<br>\n";
    +print $langs->trans("LogEventDesc", $langs->transnoentitiesnoconv("AdminTools"), $langs->transnoentitiesnoconv("Audit"))."<br>\n";
     print "<br>\n";
     
     
    @@ -94,7 +94,7 @@ print "</tr>\n";
     foreach ($eventstolog as $key => $arr)
     {
     	if ($arr['id'])
    -	{		
    +	{
     		print '<tr class="oddeven">';
     		print '<td>'.$arr['id'].'</td>';
     		print '<td>';
    @@ -114,6 +114,6 @@ print "</div>";
     
     print "</form>\n";
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php
    index eb18f904229..2ae3a7cad99 100644
    --- a/htdocs/admin/expedition.php
    +++ b/htdocs/admin/expedition.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
      * Copyright (C) 2004		Eric Seigne				<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2011-2018	Philippe Grand			<philippe.grand@atoo-net.com>
      *
    @@ -507,5 +507,6 @@ print '<div class="center"><input type="submit" class="button" value="'.$langs->
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/expedition_extrafields.php b/htdocs/admin/expedition_extrafields.php
    index af49e5bf064..87682fe7514 100644
    --- a/htdocs/admin/expedition_extrafields.php
    +++ b/htdocs/admin/expedition_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2015		Claudio Aschieri		<c.aschieri@19.coop>
    @@ -87,7 +87,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -100,7 +100,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -119,6 +119,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/expeditiondet_extrafields.php b/htdocs/admin/expeditiondet_extrafields.php
    index 5567e9480e8..e533ca64ac3 100644
    --- a/htdocs/admin/expeditiondet_extrafields.php
    +++ b/htdocs/admin/expeditiondet_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
    @@ -88,7 +88,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -101,7 +101,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -120,6 +120,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/expensereport.php b/htdocs/admin/expensereport.php
    index 1002b146113..f8429069611 100644
    --- a/htdocs/admin/expensereport.php
    +++ b/htdocs/admin/expensereport.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2015 Laurent Destailleur          <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio          <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier               <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2014 Regis Houssin                <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014 Regis Houssin                <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic)  <raphael.bertrand@resultic.fr>
      * Copyright (C) 2011-2013 Juanjo Menent			    <jmenent@2byte.es>
      * Copyright (C) 2011-2018 Philippe Grand			    <philippe.grand@atoo-net.com>
    @@ -513,7 +513,6 @@ print '</form>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/expensereport_extrafields.php b/htdocs/admin/expensereport_extrafields.php
    index 8db81edb869..99de68e9e14 100644
    --- a/htdocs/admin/expensereport_extrafields.php
    +++ b/htdocs/admin/expensereport_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      *
    @@ -83,7 +83,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -96,7 +96,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -115,6 +115,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/expensereport_ik.php b/htdocs/admin/expensereport_ik.php
    index db7100d5928..d3937a98ba7 100644
    --- a/htdocs/admin/expensereport_ik.php
    +++ b/htdocs/admin/expensereport_ik.php
    @@ -179,6 +179,7 @@ echo '</table>';
     echo '</form>';
     
     dol_fiche_end();
    -llxFooter();
     
    +// End of page
    +llxFooter();
     $db->close();
    diff --git a/htdocs/admin/expensereport_rules.php b/htdocs/admin/expensereport_rules.php
    index b1d65b8635b..7b2baf0ed94 100644
    --- a/htdocs/admin/expensereport_rules.php
    +++ b/htdocs/admin/expensereport_rules.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2012      Mikael Carlavan        <contact@mika-carl.fr>
    - * Copyright (C) 2017      ATM Consulting         <contact@atm-consulting.fr>
    - * Copyright (C) 2017      Pierre-Henry Favre     <phf@atm-consulting.fr>
    +/* Copyright (C) 2012       Mikael Carlavan         <contact@mika-carl.fr>
    + * Copyright (C) 2017       ATM Consulting          <contact@atm-consulting.fr>
    + * Copyright (C) 2017       Pierre-Henry Favre      <phf@atm-consulting.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -182,8 +183,8 @@ if ($action != 'edit')
     
     	echo '<td>'.$form->selectExpense('', 'fk_c_type_fees', 0, 1, 1).'</td>';
     	echo '<td>'.$form->selectarray('code_expense_rules_type', $tab_rules_type, '', 0).'</td>';
    -	echo '<td>'.$form->select_date(strtotime(date('Y-m-01', dol_now())), 'start', '', '', 0, '', 1, 0, 1).'</td>';
    -	echo '<td>'.$form->select_date(strtotime(date('Y-m-t', dol_now())), 'end', '', '', 0, '', 1, 0, 1).'</td>';
    +	echo '<td>'.$form->selectDate(strtotime(date('Y-m-01', dol_now())), 'start', '', '', 0, '', 1, 0).'</td>';
    +	echo '<td>'.$form->selectDate(strtotime(date('Y-m-t', dol_now())), 'end', '', '', 0, '', 1, 0).'</td>';
     	echo '<td><input type="text" value="" name="amount" class="amount" />'.$conf->currency.'</td>';
     	echo '<td>'.$form->selectyesno('restrictive', 0, 1).'</td>';
     	echo '<td align="right"><input type="submit" class="button" value="'.$langs->trans('Add').'" /></td>';
    @@ -270,7 +271,7 @@ foreach ($rules as $rule)
     	echo '<td>';
     	if ($action == 'edit' && $object->id == $rule->id)
     	{
    -		echo $form->select_date(strtotime(date('Y-m-d', $object->dates)), 'start', '', '', 0, '', 1, 0, 1);
    +		print $form->selectDate(strtotime(date('Y-m-d', $object->dates)), 'start', '', '', 0, '', 1, 0);
     	}
     	else
     	{
    @@ -282,7 +283,7 @@ foreach ($rules as $rule)
     	echo '<td>';
     	if ($action == 'edit' && $object->id == $rule->id)
     	{
    -		echo $form->select_date(strtotime(date('Y-m-d', $object->datee)), 'end', '', '', 0, '', 1, 0, 1);
    +		print $form->selectDate(strtotime(date('Y-m-d', $object->datee)), 'end', '', '', 0, '', 1, 0);
     	}
     	else
     	{
    @@ -354,6 +355,7 @@ echo '<script type="text/javascript"> $(function() {
     }); </script>';
     
     dol_fiche_end();
    -llxFooter();
     
    +// End of page
    +llxFooter();
     $db->close();
    diff --git a/htdocs/admin/export.php b/htdocs/admin/export.php
    index b6f12a723ff..c4ad077296a 100644
    --- a/htdocs/admin/export.php
    +++ b/htdocs/admin/export.php
    @@ -4,9 +4,9 @@
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
      * Copyright (C) 2004		Eric Seigne				<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012	Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2011-2015	Philippe Grand			<philippe.grand@atoo-net.com>
    + * Copyright (C) 2011-2018	Philippe Grand			<philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,9 +32,7 @@ require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     
     // Load translation files required by the page
    -$langs->loadLangs(array('admin', 'exports'));
    -
    -$langs->load('other');
    +$langs->loadLangs(array('admin', 'exports', 'other'));
     
     if (! $user->admin)
     	accessforbidden();
    @@ -73,7 +71,7 @@ dol_fiche_head(
     
     // Setup page goes here
     $form=new Form($db);
    -$var=false;
    +
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre">';
     print '<td>'.$langs->trans("ExportModel").'</td>'."\n";
    @@ -82,8 +80,7 @@ print '<td align="center" width="100"></td>'."\n";
     
     
     // Example with a yes / no select
    -$var=!$var;
    -print '<tr '.$bc[$var].'>';
    +print '<tr class="oddeven">';
     print '<td>'.$langs->trans("set_EXPORTS_SHARE_MODELS").'</td>';
     print '<td align="center" width="20">&nbsp;</td>';
     print '<td align="center" width="100">';
    @@ -94,9 +91,8 @@ echo ajax_constantonoff('EXPORTS_SHARE_MODELS');
     print '</form>';
     print '</td></tr>';
     
    -
     print '</table>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/external_rss.php b/htdocs/admin/external_rss.php
    index 2862a94c207..048d002a3b7 100644
    --- a/htdocs/admin/external_rss.php
    +++ b/htdocs/admin/external_rss.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011 	   Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -325,6 +325,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/facture.php b/htdocs/admin/facture.php
    index f00d125a4d5..46a11e363fd 100644
    --- a/htdocs/admin/facture.php
    +++ b/htdocs/admin/facture.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004	Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011	Laurent Destailleur			<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Eric Seigne					<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012	Regis Houssin				<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin				<regis.houssin@inodbox.com>
      * Copyright (C) 2008		Raphael Bertrand (Resultic)	<raphael.bertrand@resultic.fr>
      * Copyright (C) 2012-2013  Juanjo Menent				<jmenent@2byte.es>
      * Copyright (C) 2014		Teddy Andreotti				<125155@supinfo.com>
    @@ -238,6 +238,30 @@ if ($action == 'setforcedate')
         }
     }
     
    +if ($action == 'setDefaultPDFModulesByType')
    +{
    +    $invoicetypemodels =  GETPOST('invoicetypemodels');
    +    
    +    if(!empty($invoicetypemodels) && is_array($invoicetypemodels))
    +    {
    +        $error = 0;
    +        
    +        foreach ($invoicetypemodels as $type => $value)
    +        {
    +            $res = dolibarr_set_const($db, 'FACTURE_ADDON_PDF_'.intval($type),$value,'chaine',0,'',$conf->entity);
    +            if (! $res > 0) $error++;
    +        }
    +        
    +        if (! $error)
    +        {
    +            setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
    +        }
    +        else
    +        {
    +            setEventMessages($langs->trans("Error"), null, 'errors');
    +        }
    +    }
    +}
     
     
     /*
    @@ -410,7 +434,6 @@ foreach ($dirmodels as $reldir)
                                 print '</td>';
     
                                 print "</tr>\n";
    -
                             }
                         }
                     }
    @@ -465,6 +488,8 @@ print "</tr>\n";
     
     clearstatcache();
     
    +$activatedModels = array();
    +
     foreach ($dirmodels as $reldir)
     {
         foreach (array('','/doc') as $valdir)
    @@ -580,6 +605,47 @@ foreach ($dirmodels as $reldir)
     }
     print '</table>';
     
    +if(!empty($conf->global->INVOICE_USE_DEFAULT_DOCUMENT)) // Hidden conf
    +{
    +    /*
    +     *  Document templates generators
    +     */
    +    print '<br>';
    +    print load_fiche_titre($langs->trans("BillsPDFModulesAccordindToInvoiceType"),'','');
    +    print '<form action="'.$_SERVER["PHP_SELF"].'#default-pdf-modules-by-type-table" method="POST">';
    +    print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'" />';
    +    print '<input type="hidden" name="action" value="setDefaultPDFModulesByType" >';
    +    print '<table id="default-pdf-modules-by-type-table" class="noborder" width="100%">';
    +    print '<tr class="liste_titre">';
    +    print '<td>'.$langs->trans("Type").'</td>';
    +    print '<td>'.$langs->trans("Name").'</td>';
    +    print '<td align="right"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
    +    print "</tr>\n";
    +    
    +    $listtype=array(
    +        Facture::TYPE_STANDARD=>$langs->trans("InvoiceStandard"),
    +        Facture::TYPE_REPLACEMENT=>$langs->trans("InvoiceReplacement"),
    +        Facture::TYPE_CREDIT_NOTE=>$langs->trans("InvoiceAvoir"),
    +        Facture::TYPE_DEPOSIT=>$langs->trans("InvoiceDeposit"),
    +    );
    +    if (! empty($conf->global->INVOICE_USE_SITUATION))
    +    {
    +        $listtype[Facture::TYPE_SITUATION] = $langs->trans("InvoiceSituation");
    +    }
    +    
    +    foreach ($listtype as $type => $trans)
    +    {
    +        $thisTypeConfName = 'FACTURE_ADDON_PDF_'.$type;
    +        $current = !empty($conf->global->{$thisTypeConfName})?$conf->global->{$thisTypeConfName}:$conf->global->FACTURE_ADDON_PDF;
    +        print '<tr >';
    +        print '<td>'.$trans.'</td>';
    +        print '<td colspan="2" >'.$form->selectarray('invoicetypemodels['.$type.']', ModelePDFFactures::liste_modeles($db), $current,0,0, 0).'</td>';
    +        print "</tr>\n";
    +    }
    +    
    +    print '</table>';
    +    print "</form>";
    +}
     
     /*
      *  Modes de reglement
    @@ -662,6 +728,7 @@ if ($resql)
         $i = 0;
         while ($i < $num)
         {
    +
             $row = $db->fetch_row($resql);
     
             print '<option value="'.$row[0].'"';
    @@ -782,7 +849,6 @@ print '</table>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/fckeditor.php b/htdocs/admin/fckeditor.php
    index 19d4a4cc772..8751d906918 100644
    --- a/htdocs/admin/fckeditor.php
    +++ b/htdocs/admin/fckeditor.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2012-20113	Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -234,6 +234,6 @@ else
          */
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/fichinter.php b/htdocs/admin/fichinter.php
    index a216f2d4ab7..7fd349363e1 100644
    --- a/htdocs/admin/fichinter.php
    +++ b/htdocs/admin/fichinter.php
    @@ -3,10 +3,10 @@
      * Copyright (C) 2004-2011 Laurent Destailleur          <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio          <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier               <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2014 Regis Houssin                <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014 Regis Houssin                <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic)  <raphael.bertrand@resultic.fr>
      * Copyright (C) 2011-2013 Juanjo Menent			    <jmenent@2byte.es>
    - * Copyright (C) 2011-2017 Philippe Grand			    <philippe.grand@atoo-net.com>
    + * Copyright (C) 2011-2018 Philippe Grand			    <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -560,7 +560,6 @@ print "</td></tr>\n";
     print '</form>';
     
     //Use draft Watermark
    -
     print "<form method=\"post\" action=\"".$_SERVER["PHP_SELF"]."\">";
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     print "<input type=\"hidden\" name=\"action\" value=\"set_FICHINTER_DRAFT_WATERMARK\">";
    @@ -635,12 +634,10 @@ print '</td>';
     print '</tr>';
     print '</form>';
     
    -
    -
    -
     print '</table>';
     
     print '<br>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/geoipmaxmind.php b/htdocs/admin/geoipmaxmind.php
    index 9c944324527..9f154591f0f 100644
    --- a/htdocs/admin/geoipmaxmind.php
    +++ b/htdocs/admin/geoipmaxmind.php
    @@ -153,6 +153,6 @@ if ($geoip)
     	$geoip->close();
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/holiday.php b/htdocs/admin/holiday.php
    new file mode 100644
    index 00000000000..82037fa85d1
    --- /dev/null
    +++ b/htdocs/admin/holiday.php
    @@ -0,0 +1,524 @@
    +<?php
    +/* Copyright (C) 2011-2013      Juanjo Menent	    <jmenent@2byte.es>
    + * Copyright (C) 2011-2018      Philippe Grand	    <philippe.grand@atoo-net.com>
    + * Copyright (C) 2018		    Charlene Benke		<charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *	\file       htdocs/admin/contract.php
    + *	\ingroup    contract
    + *	\brief      Setup page of module Contracts
    + */
    +
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/holiday.lib.php';
    +
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin", "errors", "holiday"));
    +
    +if (!$user->admin) accessforbidden();
    +
    +$action = GETPOST('action','alpha');
    +$value = GETPOST('value','alpha');
    +$label = GETPOST('label','alpha');
    +$scandir = GETPOST('scan_dir','alpha');
    +$type='contract';
    +
    +if (empty($conf->global->HOLIDAY_ADDON))
    +{
    +    $conf->global->HOLIDAY_ADDON='mod_holiday_madona';
    +}
    +
    +
    +/*
    + * Actions
    + */
    +
    +include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
    +
    +if ($action == 'updateMask')
    +{
    +    $maskconst = GETPOST('maskconstholidaty','alpha');
    +    $maskvalue =  GETPOST('maskholiday','alpha');
    +    if ($maskconst) $res = dolibarr_set_const($db,$maskconst,$maskvalue,'chaine',0,'',$conf->entity);
    +
    +    if (! $res > 0) $error++;
    +
    + 	if (! $error)
    +    {
    +        setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
    +    }
    +    else
    +    {
    +        setEventMessages($langs->trans("Error"), null, 'errors');
    +    }
    +}
    +
    +else if ($action == 'specimen') // For contract
    +{
    +	$modele= GETPOST('module','alpha');
    +
    +	$holiday = new Holiday($db);
    +	$holiday->initAsSpecimen();
    +
    +	// Search template files
    +	$file=''; $classname=''; $filefound=0;
    +	$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
    +	foreach($dirmodels as $reldir)
    +	{
    +	    $file=dol_buildpath($reldir."core/modules/holiday/doc/pdf_".$modele.".modules.php",0);
    +		if (file_exists($file))
    +		{
    +			$filefound=1;
    +			$classname = "pdf_".$modele;
    +			break;
    +		}
    +	}
    +
    +	if ($filefound)
    +	{
    +		require_once $file;
    +
    +		$module = new $classname($db);
    +
    +		if ($module->write_file($holiday,$langs) > 0)
    +		{
    +			header("Location: ".DOL_URL_ROOT."/document.php?modulepart=holiday&file=SPECIMEN.pdf");
    +			return;
    +		}
    +		else
    +		{
    +			setEventMessages($obj->error, $obj->errors, 'errors');
    +			dol_syslog($obj->error, LOG_ERR);
    +		}
    +	}
    +	else
    +	{
    +		setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors');
    +		dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR);
    +	}
    +}
    +
    +// Activate a model
    +else if ($action == 'set')
    +{
    +	$ret = addDocumentModel($value, $type, $label, $scandir);
    +}
    +
    +else if ($action == 'del')
    +{
    +	$ret = delDocumentModel($value, $type);
    +	if ($ret > 0)
    +	{
    +        if ($conf->global->HOLIDAY_ADDON_PDF == "$value") dolibarr_del_const($db, 'HOLIDAY_ADDON_PDF',$conf->entity);
    +	}
    +}
    +
    +// Set default model
    +else if ($action == 'setdoc')
    +{
    +	if (dolibarr_set_const($db, "HOLIDAY_ADDON_PDF",$value,'chaine',0,'',$conf->entity))
    +	{
    +		// La constante qui a ete lue en avant du nouveau set
    +		// on passe donc par une variable pour avoir un affichage coherent
    +		$conf->global->HOLIDAY_ADDON_PDF = $value;
    +	}
    +
    +	// On active le modele
    +	$ret = delDocumentModel($value, $type);
    +	if ($ret > 0)
    +	{
    +		$ret = addDocumentModel($value, $type, $label, $scandir);
    +	}
    +}
    +
    +else if ($action == 'setmod')
    +{
    +	// TODO Verifier si module numerotation choisi peut etre active
    +	// par appel methode canBeActivated
    +
    +	dolibarr_set_const($db, "HOLIDAY_ADDON",$value,'chaine',0,'',$conf->entity);
    +}
    +
    +else if ($action == 'set_other')
    +{
    +	$freetext= GETPOST('HOLIDAY_FREE_TEXT','none');	// No alpha here, we want exact string
    +	$res1 = dolibarr_set_const($db, "HOLIDAY_FREE_TEXT",$freetext,'chaine',0,'',$conf->entity);
    +
    +	$draft= GETPOST('HOLIDAY_DRAFT_WATERMARK','alpha');
    +	$res2 = dolibarr_set_const($db, "HOLIDAY_DRAFT_WATERMARK",trim($draft),'chaine',0,'',$conf->entity);
    +
    +	if (! $res1 > 0 || ! $res2 > 0) $error++;
    +
    + 	if (! $error)
    +    {
    +        setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
    +    }
    +    else
    +    {
    +        setEventMessages($langs->trans("Error"), null, 'errors');
    +    }
    +}
    +
    +
    +/*
    + * View
    + */
    +
    +$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
    +
    +llxHeader();
    +
    +$form=new Form($db);
    +
    +$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
    +print load_fiche_titre($langs->trans("HolidaySetup"),$linkback,'title_setup');
    +
    +$head=holiday_admin_prepare_head();
    +
    +dol_fiche_head($head, 'holiday', $langs->trans("Holidays"), -1, 'holiday');
    +
    +/*
    + * Holiday Numbering model
    + */
    +
    +print load_fiche_titre($langs->trans("HolidaysNumberingModules"),'','');
    +
    +print '<table class="noborder" width="100%">';
    +print '<tr class="liste_titre">';
    +print '<td width="100">'.$langs->trans("Name").'</td>';
    +print '<td>'.$langs->trans("Description").'</td>';
    +print '<td>'.$langs->trans("Example").'</td>';
    +print '<td align="center" width="60">'.$langs->trans("Status").'</td>';
    +print '<td align="center" width="16">'.$langs->trans("ShortInfo").'</td>';
    +print "</tr>\n";
    +
    +clearstatcache();
    +
    +foreach ($dirmodels as $reldir)
    +{
    +	$dir = dol_buildpath($reldir."core/modules/holiday/");
    +
    +	if (is_dir($dir))
    +	{
    +		$handle = opendir($dir);
    +		if (is_resource($handle))
    +		{
    +			$var=true;
    +
    +			while (($file = readdir($handle))!==false)
    +			{
    +				if (substr($file, 0, 12) == 'mod_holiday_' && substr($file, dol_strlen($file)-3, 3) == 'php')
    +				{
    +					$file = substr($file, 0, dol_strlen($file)-4);
    +
    +					require_once $dir.$file.'.php';
    +
    +					$module = new $file($db);
    +
    +					// Show modules according to features level
    +					if ($module->version == 'development'  && $conf->global->MAIN_FEATURES_LEVEL < 2) continue;
    +					if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) continue;
    +
    +					if ($module->isEnabled())
    +					{
    +
    +						print '<tr class="oddeven"><td>'.$module->nom."</td><td>\n";
    +						print $module->info();
    +						print '</td>';
    +
    +						// Show example of numbering model
    +						print '<td class="nowrap">';
    +						$tmp=$module->getExample();
    +						if (preg_match('/^Error/',$tmp)) { $langs->load("errors"); print '<div class="error">'.$langs->trans($tmp).'</div>'; }
    +						elseif ($tmp=='NotConfigured') print $langs->trans($tmp);
    +						else print $tmp;
    +						print '</td>'."\n";
    +
    +						print '<td align="center">';
    +						if ($conf->global->HOLIDAY_ADDON == "$file")
    +						{
    +							print img_picto($langs->trans("Activated"),'switch_on');
    +						}
    +						else
    +						{
    +							print '<a href="'.$_SERVER["PHP_SELF"].'?action=setmod&amp;value='.$file.'">';
    +							print img_picto($langs->trans("Disabled"),'switch_off');
    +							print '</a>';
    +						}
    +						print '</td>';
    +
    +						$holiday=new Holiday($db);
    +						$holiday->initAsSpecimen();
    +
    +						// Info
    +						$htmltooltip='';
    +						$htmltooltip.=''.$langs->trans("Version").': <b>'.$module->getVersion().'</b><br>';
    +						$nextval=$module->getNextValue($mysoc,$holiday);
    +                        if ("$nextval" != $langs->trans("NotAvailable")) {  // Keep " on nextval
    +                            $htmltooltip.=''.$langs->trans("NextValue").': ';
    +                            if ($nextval) {
    +                                if (preg_match('/^Error/',$nextval) || $nextval=='NotConfigured')
    +                                    $nextval = $langs->trans($nextval);
    +                                $htmltooltip.=$nextval.'<br>';
    +                            } else {
    +                                $htmltooltip.=$langs->trans($module->error).'<br>';
    +                            }
    +                        }
    +
    +						print '<td align="center">';
    +						print $form->textwithpicto('',$htmltooltip,1,0);
    +						print '</td>';
    +
    +						print '</tr>';
    +					}
    +				}
    +			}
    +			closedir($handle);
    +		}
    +	}
    +}
    +
    +print '</table><br>';
    +
    +
    +
    +if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
    +{
    +
    +/*
    + *  Documents models for Holidays
    + */
    +
    +print load_fiche_titre($langs->trans("TemplatePDFHolidays"),'','');
    +
    +// Defini tableau def des modeles
    +$def = array();
    +$sql = "SELECT nom";
    +$sql.= " FROM ".MAIN_DB_PREFIX."document_model";
    +$sql.= " WHERE type = '".$type."'";
    +$sql.= " AND entity = ".$conf->entity;
    +$resql=$db->query($sql);
    +if ($resql)
    +{
    +	$i = 0;
    +	$num_rows=$db->num_rows($resql);
    +	while ($i < $num_rows)
    +	{
    +		$array = $db->fetch_array($resql);
    +		array_push($def, $array[0]);
    +		$i++;
    +	}
    +}
    +else
    +{
    +	dol_print_error($db);
    +}
    +
    +
    +print '<table class="noborder" width="100%">';
    +print '<tr class="liste_titre">';
    +print '<td>'.$langs->trans("Name").'</td>';
    +print '<td>'.$langs->trans("Description").'</td>';
    +print '<td align="center" width="60">'.$langs->trans("Status")."</td>\n";
    +print '<td align="center" width="60">'.$langs->trans("Default")."</td>\n";
    +print '<td align="center" width="80">'.$langs->trans("ShortInfo").'</td>';
    +print '<td align="center" width="80">'.$langs->trans("Preview").'</td>';
    +print "</tr>\n";
    +
    +clearstatcache();
    +
    +foreach ($dirmodels as $reldir)
    +{
    +    foreach (array('','/doc') as $valdir)
    +    {
    +    	$dir = dol_buildpath($reldir."core/modules/holiday".$valdir);
    +
    +        if (is_dir($dir))
    +        {
    +            $handle=opendir($dir);
    +            if (is_resource($handle))
    +            {
    +                while (($file = readdir($handle))!==false)
    +                {
    +                    $filelist[]=$file;
    +                }
    +                closedir($handle);
    +                arsort($filelist);
    +
    +                foreach($filelist as $file)
    +                {
    +                    if (preg_match('/\.modules\.php$/i',$file) && preg_match('/^(pdf_|doc_)/',$file))
    +                    {
    +
    +                    	if (file_exists($dir.'/'.$file))
    +                    	{
    +                    		$name = substr($file, 4, dol_strlen($file) -16);
    +	                        $classname = substr($file, 0, dol_strlen($file) -12);
    +
    +	                        require_once $dir.'/'.$file;
    +	                        $module = new $classname($db);
    +
    +	                        $modulequalified=1;
    +	                        if ($module->version == 'development'  && $conf->global->MAIN_FEATURES_LEVEL < 2) $modulequalified=0;
    +	                        if ($module->version == 'experimental' && $conf->global->MAIN_FEATURES_LEVEL < 1) $modulequalified=0;
    +
    +	                        if ($modulequalified)
    +	                        {
    +	                            print '<tr class="oddeven"><td width="100">';
    +	                            print (empty($module->name)?$name:$module->name);
    +	                            print "</td><td>\n";
    +	                            if (method_exists($module,'info')) print $module->info($langs);
    +	                            else print $module->description;
    +	                            print '</td>';
    +
    +	                            // Active
    +	                            if (in_array($name, $def))
    +	                            {
    +	                            	print '<td align="center">'."\n";
    +	                            	print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&value='.$name.'">';
    +	                            	print img_picto($langs->trans("Enabled"),'switch_on');
    +	                            	print '</a>';
    +	                            	print '</td>';
    +	                            }
    +	                            else
    +	                            {
    +	                                print '<td align="center">'."\n";
    +	                                print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'">'.img_picto($langs->trans("Disabled"),'switch_off').'</a>';
    +	                                print "</td>";
    +	                            }
    +
    +	                            // Defaut
    +	                            print '<td align="center">';
    +	                            if ($conf->global->HOLIDAY_ADDON_PDF == $name)
    +	                            {
    +	                                print img_picto($langs->trans("Default"),'on');
    +	                            }
    +	                            else
    +	                            {
    +	                                print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&value='.$name.'&amp;scan_dir='.$module->scandir.'&amp;label='.urlencode($module->name).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
    +	                            }
    +	                            print '</td>';
    +
    +	                           // Info
    +		    					$htmltooltip =    ''.$langs->trans("Name").': '.$module->name;
    +					    		$htmltooltip.='<br>'.$langs->trans("Type").': '.($module->type?$module->type:$langs->trans("Unknown"));
    +			                    if ($module->type == 'pdf')
    +			                    {
    +			                        $htmltooltip.='<br>'.$langs->trans("Width").'/'.$langs->trans("Height").': '.$module->page_largeur.'/'.$module->page_hauteur;
    +			                    }
    +					    		$htmltooltip.='<br><br><u>'.$langs->trans("FeaturesSupported").':</u>';
    +					    		$htmltooltip.='<br>'.$langs->trans("Logo").': '.yn($module->option_logo,1,1);
    +					    		$htmltooltip.='<br>'.$langs->trans("PaymentMode").': '.yn($module->option_modereg,1,1);
    +					    		$htmltooltip.='<br>'.$langs->trans("PaymentConditions").': '.yn($module->option_condreg,1,1);
    +					    		$htmltooltip.='<br>'.$langs->trans("MultiLanguage").': '.yn($module->option_multilang,1,1);
    +					    		$htmltooltip.='<br>'.$langs->trans("WatermarkOnDraftOrders").': '.yn($module->option_draft_watermark,1,1);
    +
    +
    +	                            print '<td align="center">';
    +	                            print $form->textwithpicto('',$htmltooltip,1,0);
    +	                            print '</td>';
    +
    +	                            // Preview
    +	                            print '<td align="center">';
    +	                            if ($module->type == 'pdf')
    +	                            {
    +	                                print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"),'contract').'</a>';
    +	                            }
    +	                            else
    +	                            {
    +	                                print img_object($langs->trans("PreviewNotAvailable"),'generic');
    +	                            }
    +	                            print '</td>';
    +
    +	                            print "</tr>\n";
    +	                        }
    +                    	}
    +                    }
    +                }
    +            }
    +        }
    +    }
    +}
    +
    +print '</table>';
    +print "<br>";
    +
    +
    +/*
    + * Other options
    + */
    +
    +print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
    +print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +print '<input type="hidden" name="action" value="set_other">';
    +
    +print load_fiche_titre($langs->trans("OtherOptions"),'','');
    +print '<table class="noborder" width="100%">';
    +print '<tr class="liste_titre">';
    +print '<td>'.$langs->trans("Parameter").'</td>';
    +print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
    +print "</tr>\n";
    +
    +$substitutionarray=pdf_getSubstitutionArray($langs, array('objectamount'), null, 2);
    +$substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation");
    +$htmltext = '<i>'.$langs->trans("AvailableVariables").':<br>';
    +foreach($substitutionarray as $key => $val)	$htmltext.=$key.'<br>';
    +$htmltext.='</i>';
    +
    +print '<tr class="oddeven"><td colspan="2">';
    +print $form->textwithpicto($langs->trans("FreeLegalTextOnHolidays"), $langs->trans("AddCRIfTooLong").'<br><br>'.$htmltext, 1, 'help', '', 0, 2, 'tooltiphelp');
    +print '<br>';
    +$variablename='HOLIDAY_FREE_TEXT';
    +if (empty($conf->global->PDF_ALLOW_HTML_FOR_FREE_TEXT))
    +{
    +    print '<textarea name="'.$variablename.'" class="flat" cols="120">'.$conf->global->$variablename.'</textarea>';
    +}
    +else
    +{
    +    include_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
    +    $doleditor=new DolEditor($variablename, $conf->global->$variablename,'',80,'dolibarr_notes');
    +    print $doleditor->Create();
    +}
    +print '</td></tr>'."\n";
    +
    +//Use draft Watermark
    +
    +print '<tr class="oddeven"><td>';
    +print $form->textwithpicto($langs->trans("WatermarkOnDraftHolidayCards"), $htmltext, 1, 'help', '', 0, 2, 'watermarktooltip').'<br>';
    +print '</td><td>';
    +print '<input size="50" class="flat" type="text" name="HOLIDAY_DRAFT_WATERMARK" value="'.$conf->global->HOLIDAY_DRAFT_WATERMARK.'">';
    +print '</td></tr>'."\n";
    +
    +print '</table>';
    +
    +print '<div class="center">';
    +print '<input type="submit" class="button" value="'.$langs->trans("Save").'">';
    +print '</div>';
    +
    +print '</form>';
    +}
    +
    +
    +dol_fiche_end();
    +
    +// End of page
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php
    index 50edc32d55f..e2168ec2d76 100644
    --- a/htdocs/admin/ihm.php
    +++ b/htdocs/admin/ihm.php
    @@ -1,8 +1,9 @@
     <?php
     /* Copyright (C) 2001-2005	Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2016		Juanjo Menent			<jmenent@2byte.es>
    + * Copyright (C) 2018       Ferran Marcet           <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -79,10 +80,10 @@ if ($action == 'removebackgroundlogin' && ! empty($conf->global->MAIN_LOGIN_BACK
     
     if ($action == 'update')
     {
    -	dolibarr_set_const($db, "MAIN_LANG_DEFAULT",				$_POST["MAIN_LANG_DEFAULT"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MULTILANGS",					$_POST["MAIN_MULTILANGS"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_LANG_DEFAULT", $_POST["MAIN_LANG_DEFAULT"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MULTILANGS", $_POST["MAIN_MULTILANGS"],'chaine',0,'',$conf->entity);
     
    -	dolibarr_set_const($db, "MAIN_THEME",						$_POST["main_theme"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_THEME", $_POST["main_theme"],'chaine',0,'',$conf->entity);
     
     	$val=GETPOST('THEME_TOPMENU_DISABLE_IMAGE');
     	if (! $val) dolibarr_del_const($db, 'THEME_TOPMENU_DISABLE_IMAGE', $conf->entity);
    @@ -133,21 +134,24 @@ if ($action == 'update')
     	if (GETPOST('THEME_ELDY_USE_HOVER') == '') dolibarr_set_const($db, "THEME_ELDY_USE_HOVER", '0', 'chaine', 0, '', $conf->entity);    // If empty, we set to '0' ('000000' is for black)
     	else dolibarr_set_const($db, "THEME_ELDY_USE_HOVER", $_POST["THEME_ELDY_USE_HOVER"], 'chaine', 0, '', $conf->entity);
     
    -	dolibarr_set_const($db, "MAIN_SIZE_LISTE_LIMIT",			$_POST["main_size_liste_limit"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_SIZE_SHORTLIST_LIMIT",		$_POST["main_size_shortliste_limit"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_DISABLE_JAVASCRIPT",			$_POST["main_disable_javascript"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_BUTTON_HIDE_UNAUTHORIZED",	$_POST["MAIN_BUTTON_HIDE_UNAUTHORIZED"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_START_WEEK",					$_POST["MAIN_START_WEEK"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_DEFAULT_WORKING_DAYS",		$_POST["MAIN_DEFAULT_WORKING_DAYS"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_DEFAULT_WORKING_HOURS",		$_POST["MAIN_DEFAULT_WORKING_HOURS"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_SHOW_LOGO",					$_POST["MAIN_SHOW_LOGO"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_FIRSTNAME_NAME_POSITION",		$_POST["MAIN_FIRSTNAME_NAME_POSITION"],'chaine',0,'',$conf->entity);
    +	if (GETPOST('THEME_ELDY_USE_CHECKED') == '') dolibarr_set_const($db, "THEME_ELDY_USE_CHECKED", '0', 'chaine', 0, '', $conf->entity);
    +	else dolibarr_set_const($db, "THEME_ELDY_USE_CHECKED", $_POST["THEME_ELDY_USE_CHECKED"], 'chaine', 0, '', $conf->entity);
     
    -	dolibarr_set_const($db, "MAIN_HELPCENTER_DISABLELINK",		$_POST["MAIN_HELPCENTER_DISABLELINK"],'chaine',0,'',0);	// Param for all entities
    -	dolibarr_set_const($db, "MAIN_MOTD",						dol_htmlcleanlastbr($_POST["main_motd"]),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_HOME",						dol_htmlcleanlastbr($_POST["main_home"]),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_HELP_DISABLELINK",			$_POST["MAIN_HELP_DISABLELINK"],'chaine',0,'',0);	    // Param for all entities
    -	dolibarr_set_const($db, "MAIN_BUGTRACK_ENABLELINK",         $_POST["MAIN_BUGTRACK_ENABLELINK"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_SIZE_LISTE_LIMIT", $_POST["main_size_liste_limit"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_SIZE_SHORTLIST_LIMIT", $_POST["main_size_shortliste_limit"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_DISABLE_JAVASCRIPT", $_POST["main_disable_javascript"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_BUTTON_HIDE_UNAUTHORIZED", $_POST["MAIN_BUTTON_HIDE_UNAUTHORIZED"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_START_WEEK", $_POST["MAIN_START_WEEK"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_DEFAULT_WORKING_DAYS", $_POST["MAIN_DEFAULT_WORKING_DAYS"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_DEFAULT_WORKING_HOURS", $_POST["MAIN_DEFAULT_WORKING_HOURS"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_SHOW_LOGO", $_POST["MAIN_SHOW_LOGO"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_FIRSTNAME_NAME_POSITION", $_POST["MAIN_FIRSTNAME_NAME_POSITION"],'chaine',0,'',$conf->entity);
    +
    +	dolibarr_set_const($db, "MAIN_HELPCENTER_DISABLELINK", $_POST["MAIN_HELPCENTER_DISABLELINK"],'chaine',0,'',0);	// Param for all entities
    +	dolibarr_set_const($db, "MAIN_MOTD", dol_htmlcleanlastbr($_POST["main_motd"]),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_HOME", dol_htmlcleanlastbr($_POST["main_home"]),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_HELP_DISABLELINK", $_POST["MAIN_HELP_DISABLELINK"],'chaine',0,'',0);	    // Param for all entities
    +	dolibarr_set_const($db, "MAIN_BUGTRACK_ENABLELINK", $_POST["MAIN_BUGTRACK_ENABLELINK"],'chaine',0,'',$conf->entity);
     
     	$varforimage='imagebackground'; $dirforimage=$conf->mycompany->dir_output.'/logos/';
     	if ($_FILES[$varforimage]["tmp_name"])
    @@ -236,7 +240,7 @@ if ($action == 'edit')	// Edit
     
     	// Default language
     	print '<tr><td class="titlefield">'.$langs->trans("DefaultLanguage").'</td><td>';
    -	print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT, 'MAIN_LANG_DEFAULT', 1, 0, 0, 0, 0, 'minwidth300');
    +	print $formadmin->select_language($conf->global->MAIN_LANG_DEFAULT, 'MAIN_LANG_DEFAULT', 1, 0, 0, 0, 0, 'minwidth300', 2);
     	print '</td>';
     	print '<td width="20">&nbsp;</td>';
     	print '</tr>';
    @@ -413,7 +417,7 @@ if ($action == 'edit')	// Edit
     		print '<a href="'.$_SERVER["PHP_SELF"].'?action=removebackgroundlogin">'.img_delete($langs->trans("Delete")).'</a>';
     		if (file_exists($conf->mycompany->dir_output.'/logos/'.$conf->global->MAIN_LOGIN_BACKGROUND)) {
     			print ' &nbsp; ';
    -			print '<img class="paddingleft valignmiddle" width="100px" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('/'.$conf->global->MAIN_LOGIN_BACKGROUND).'">';
    +			print '<img class="paddingleft valignmiddle" width="100px" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/'.$conf->global->MAIN_LOGIN_BACKGROUND).'">';
     		}
     	} else {
     		print '<img class="paddingleft valignmiddle" width="100" src="'.DOL_URL_ROOT.'/public/theme/common/nophoto.png">';
    @@ -561,7 +565,7 @@ else	// Show
     	print $conf->global->MAIN_LOGIN_BACKGROUND;
     	if ($conf->global->MAIN_LOGIN_BACKGROUND && is_file($conf->mycompany->dir_output.'/logos/'.$conf->global->MAIN_LOGIN_BACKGROUND))
     	{
    -		print '<img class="img_logo paddingleft valignmiddle" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode($conf->global->MAIN_LOGIN_BACKGROUND).'">';
    +		print '<img class="img_logo paddingleft valignmiddle" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/'.$conf->global->MAIN_LOGIN_BACKGROUND).'">';
     	}
     	else
     	{
    @@ -578,6 +582,6 @@ else	// Show
     	print '</div>';
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/index.php b/htdocs/admin/index.php
    index 6542cec1174..be9859c1beb 100644
    --- a/htdocs/admin/index.php
    +++ b/htdocs/admin/index.php
    @@ -89,6 +89,14 @@ print '<br>';
     
     // Show info setup module
     print img_picto('','puce').' '.$langs->trans("SetupDescription4", DOL_URL_ROOT.'/admin/modules.php?mainmenu=home', $langs->transnoentities("Setup"), $langs->transnoentities("Modules"));
    +
    +/*
    +$nbofactivatedmodules=count($conf->modules);
    +$moreinfo=$langs->trans("TotalNumberOfActivatedModules",($nbofactivatedmodules-1), count($modules));
    +if ($nbofactivatedmodules <= 1) $moreinfo .= ' '.img_warning($langs->trans("YouMustEnableOneModule"));
    +print '<br>'.$moreinfo;
    +*/
    +
     if (count($conf->modules) <= (empty($conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING)?1:$conf->global->MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING))	// If only user module enabled
     {
     	$langs->load("errors");
    @@ -114,7 +122,6 @@ if (empty($reshook))
     	print '<div class="center"><div class="logo_setup"></div></div>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/ldap.php b/htdocs/admin/ldap.php
    index 6776cfb1480..dc21ca36daa 100644
    --- a/htdocs/admin/ldap.php
    +++ b/htdocs/admin/ldap.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004		Sebastien Di Cintio	<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier		<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2006-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2011-2013	Juanjo Menent		<jmenent@2byte.es>
      *
    @@ -336,9 +336,9 @@ if (function_exists("ldap_connect"))
     			print $langs->trans("Error").' '.$ldap->error;
     			print '<br>';
     		}
    -
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/ldap_contacts.php b/htdocs/admin/ldap_contacts.php
    index 3188bf6e58a..f5f5f868801 100644
    --- a/htdocs/admin/ldap_contacts.php
    +++ b/htdocs/admin/ldap_contacts.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2011-2013 Juanjo Menent		<jmenent@2byte.es>
      *
    @@ -318,6 +318,7 @@ if (function_exists("ldap_connect"))
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/admin/ldap_groups.php b/htdocs/admin/ldap_groups.php
    index 4ae6ce9ad97..247ecfb28aa 100644
    --- a/htdocs/admin/ldap_groups.php
    +++ b/htdocs/admin/ldap_groups.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2011-2013 Juanjo Menent		<jmenent@2byte.es>
      *
    @@ -251,5 +251,6 @@ if (function_exists("ldap_connect"))
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/ldap_members.php b/htdocs/admin/ldap_members.php
    index 616eb99a8da..818ec5aaff6 100644
    --- a/htdocs/admin/ldap_members.php
    +++ b/htdocs/admin/ldap_members.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004		Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2006-2008	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2011-2013	Juanjo Menent			<jmenent@2byte.es>
      *
    @@ -80,9 +80,9 @@ if ($action == 'setvalue' && $user->admin)
     	if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_END_LASTSUBSCRIPTION', GETPOST("fieldendlastsubscription"),'chaine',0,'',$conf->entity)) $error++;
     
     	// Subscriptions
    -	if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_FIRSTSUBSCRIPTION_DATE',  GETPOST("fieldfirstsubscriptiondate"),'chaine',0,'',$conf->entity)) $error++;
    +	if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_FIRSTSUBSCRIPTION_DATE', GETPOST("fieldfirstsubscriptiondate"),'chaine',0,'',$conf->entity)) $error++;
     	if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_FIRSTSUBSCRIPTION_AMOUNT',GETPOST("fieldfirstsubscriptionamount"),'chaine',0,'',$conf->entity)) $error++;
    -	if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_LASTSUBSCRIPTION_DATE',   GETPOST("fieldlastsubscriptiondate"),'chaine',0,'',$conf->entity)) $error++;
    +	if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_LASTSUBSCRIPTION_DATE', GETPOST("fieldlastsubscriptiondate"),'chaine',0,'',$conf->entity)) $error++;
     	if (! dolibarr_set_const($db, 'LDAP_FIELD_MEMBER_LASTSUBSCRIPTION_AMOUNT', GETPOST("fieldlastsubscriptionamount"),'chaine',0,'',$conf->entity)) $error++;
     
     	// This one must be after the others
    @@ -439,10 +439,8 @@ if (function_exists("ldap_connect"))
     			print $langs->trans("ErrorLDAPMakeManualTest",$conf->ldap->dir_temp).'<br>';
     		}
     	}
    -
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/ldap_members_types.php b/htdocs/admin/ldap_members_types.php
    index e45857f2f38..912d4ee3ea9 100644
    --- a/htdocs/admin/ldap_members_types.php
    +++ b/htdocs/admin/ldap_members_types.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004		Sebastien Di Cintio	<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier		<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2006-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2011-2013	Juanjo Menent		<jmenent@2byte.es>
      *
    @@ -241,5 +241,6 @@ if (function_exists("ldap_connect"))
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/ldap_users.php b/htdocs/admin/ldap_users.php
    index 8b11069fc61..934fcf8e03e 100644
    --- a/htdocs/admin/ldap_users.php
    +++ b/htdocs/admin/ldap_users.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2011-2016 Juanjo Menent		<jmenent@2byte.es>
      *
    @@ -443,7 +443,6 @@ if (function_exists("ldap_connect"))
     					}
     					$liste[$key] = $label;
     				}
    -
     			}
     			else
     		   {
    @@ -470,5 +469,6 @@ if (function_exists("ldap_connect"))
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/limits.php b/htdocs/admin/limits.php
    index e9389b0271d..6342f731347 100644
    --- a/htdocs/admin/limits.php
    +++ b/htdocs/admin/limits.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2010		Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -66,11 +66,11 @@ if ($action == 'update')
     
         if (! $error)
         {
    -        dolibarr_set_const($db, "MAIN_MAX_DECIMALS_UNIT",   $_POST["MAIN_MAX_DECIMALS_UNIT"],'chaine',0,'',$conf->entity);
    -        dolibarr_set_const($db, "MAIN_MAX_DECIMALS_TOT",    $_POST["MAIN_MAX_DECIMALS_TOT"],'chaine',0,'',$conf->entity);
    -        dolibarr_set_const($db, "MAIN_MAX_DECIMALS_SHOWN",  $_POST["MAIN_MAX_DECIMALS_SHOWN"],'chaine',0,'',$conf->entity);
    +        dolibarr_set_const($db, "MAIN_MAX_DECIMALS_UNIT", $_POST["MAIN_MAX_DECIMALS_UNIT"],'chaine',0,'',$conf->entity);
    +        dolibarr_set_const($db, "MAIN_MAX_DECIMALS_TOT", $_POST["MAIN_MAX_DECIMALS_TOT"],'chaine',0,'',$conf->entity);
    +        dolibarr_set_const($db, "MAIN_MAX_DECIMALS_SHOWN", $_POST["MAIN_MAX_DECIMALS_SHOWN"],'chaine',0,'',$conf->entity);
     
    -        dolibarr_set_const($db, "MAIN_ROUNDING_RULE_TOT",   $_POST["MAIN_ROUNDING_RULE_TOT"],'chaine',0,'',$conf->entity);
    +        dolibarr_set_const($db, "MAIN_ROUNDING_RULE_TOT", $_POST["MAIN_ROUNDING_RULE_TOT"],'chaine',0,'',$conf->entity);
     
             header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
             exit;
    @@ -253,7 +253,6 @@ else
     	    print " x ".$langs->trans("Quantity").": ".$qty;
     	    print " - ".$langs->trans("VAT").": ".$vat.'%';
     	    print " &nbsp; -> &nbsp; ".$langs->trans("TotalPriceAfterRounding").": ".$tmparray[0].' / '.$tmparray[1].' / '.$tmparray[2]."<br>\n";
    -
     	}
     
     	// Important: can debug rounding, to simulate the rounded total
    @@ -306,7 +305,6 @@ else
     	*/
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/livraison.php b/htdocs/admin/livraison.php
    index 88ce717f005..bc82d03d8d7 100644
    --- a/htdocs/admin/livraison.php
    +++ b/htdocs/admin/livraison.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2014 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2013 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2011-2018 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2015	   Claudio Aschieri		<c.aschieri@19.coop>
    @@ -478,6 +478,7 @@ print '</form>';
     
     print '</table>';
     
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/admin/livraison_extrafields.php b/htdocs/admin/livraison_extrafields.php
    index 6ccf798bc93..31144581564 100644
    --- a/htdocs/admin/livraison_extrafields.php
    +++ b/htdocs/admin/livraison_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2015		Claudio Aschieri		<c.aschieri@19.coop>
    @@ -87,7 +87,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -100,7 +100,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -119,6 +119,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/livraisondet_extrafields.php b/htdocs/admin/livraisondet_extrafields.php
    index 431d5c3c170..32000c67642 100644
    --- a/htdocs/admin/livraisondet_extrafields.php
    +++ b/htdocs/admin/livraisondet_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
    @@ -88,7 +88,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -101,7 +101,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -120,6 +120,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/loan.php b/htdocs/admin/loan.php
    index 3349ac0056a..419f6efbee9 100644
    --- a/htdocs/admin/loan.php
    +++ b/htdocs/admin/loan.php
    @@ -122,5 +122,6 @@ print "</table>\n";
     
     print '<br><div style="text-align:center"><input type="submit" class="button" value="'.$langs->trans('Modify').'" name="button"></div>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/mailing.php b/htdocs/admin/mailing.php
    index 32fbdd4aeb6..d5b866d9d20 100644
    --- a/htdocs/admin/mailing.php
    +++ b/htdocs/admin/mailing.php
    @@ -152,6 +152,6 @@ print '<div align="center"><input type="submit" class="button" value="'.$langs->
     
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/mailman.php b/htdocs/admin/mailman.php
    index b831c13823f..65c7f5e8d68 100644
    --- a/htdocs/admin/mailman.php
    +++ b/htdocs/admin/mailman.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2013 Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -238,7 +238,6 @@ if (! empty($conf->global->ADHERENT_USE_MAILMAN))
         print '</form>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php
    index 5b6a0841e76..3c6e6a14e6c 100644
    --- a/htdocs/admin/mails.php
    +++ b/htdocs/admin/mails.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013	   Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2016      Jonathan TISSEAU     <jonathan.tisseau@86dev.fr>
      *
    @@ -65,27 +65,27 @@ complete_substitutions_array($substitutionarrayfortest, $langs);
     
     if ($action == 'update' && empty($_POST["cancel"]))
     {
    -	dolibarr_set_const($db, "MAIN_DISABLE_ALL_MAILS",     GETPOST("MAIN_DISABLE_ALL_MAILS"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_FORCE_SENDTO",     GETPOST("MAIN_MAIL_FORCE_SENDTO"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_ENABLED_USER_DEST_SELECT",     GETPOST("MAIN_MAIL_ENABLED_USER_DEST_SELECT"),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_DISABLE_ALL_MAILS", GETPOST("MAIN_DISABLE_ALL_MAILS"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_FORCE_SENDTO", GETPOST("MAIN_MAIL_FORCE_SENDTO"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_ENABLED_USER_DEST_SELECT", GETPOST("MAIN_MAIL_ENABLED_USER_DEST_SELECT"), 'chaine', 0, '', $conf->entity);
     	// Send mode parameters
    -	dolibarr_set_const($db, "MAIN_MAIL_SENDMODE",         GETPOST("MAIN_MAIL_SENDMODE"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT",        GETPOST("MAIN_MAIL_SMTP_PORT"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_SMTP_SERVER",      GETPOST("MAIN_MAIL_SMTP_SERVER"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID",         GETPOST("MAIN_MAIL_SMTPS_ID"), 'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW",         GETPOST("MAIN_MAIL_SMTPS_PW"), 'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS",        GETPOST("MAIN_MAIL_EMAIL_TLS"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_STARTTLS",   GETPOST("MAIN_MAIL_EMAIL_STARTTLS"),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SENDMODE", GETPOST("MAIN_MAIL_SENDMODE"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT", GETPOST("MAIN_MAIL_SMTP_PORT"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SMTP_SERVER", GETPOST("MAIN_MAIL_SMTP_SERVER"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID", GETPOST("MAIN_MAIL_SMTPS_ID"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW", GETPOST("MAIN_MAIL_SMTPS_PW"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS", GETPOST("MAIN_MAIL_EMAIL_TLS"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_STARTTLS", GETPOST("MAIN_MAIL_EMAIL_STARTTLS"), 'chaine', 0, '', $conf->entity);
     
    -	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_ENABLED",     GETPOST("MAIN_MAIL_EMAIL_DKIM_ENABLED"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_DOMAIN",      GETPOST("MAIN_MAIL_EMAIL_DKIM_DOMAIN"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_SELECTOR",    GETPOST("MAIN_MAIL_EMAIL_DKIM_SELECTOR"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY", GETPOST("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY"),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_ENABLED", GETPOST("MAIN_MAIL_EMAIL_DKIM_ENABLED"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_DOMAIN", GETPOST("MAIN_MAIL_EMAIL_DKIM_DOMAIN"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_SELECTOR", GETPOST("MAIN_MAIL_EMAIL_DKIM_SELECTOR"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY", GETPOST("MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY"), 'chaine', 0, '', $conf->entity);
     	// Content parameters
    -	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_FROM",       GETPOST("MAIN_MAIL_EMAIL_FROM"), 'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_ERRORS_TO",		  GETPOST("MAIN_MAIL_ERRORS_TO"),  'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_AUTOCOPY_TO",      GETPOST("MAIN_MAIL_AUTOCOPY_TO"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, 'MAIN_MAIL_DEFAULT_FROMTYPE', GETPOST('MAIN_MAIL_DEFAULT_FROMTYPE'),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_FROM", GETPOST("MAIN_MAIL_EMAIL_FROM"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_ERRORS_TO", GETPOST("MAIN_MAIL_ERRORS_TO"), 'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_AUTOCOPY_TO", GETPOST("MAIN_MAIL_AUTOCOPY_TO"),'chaine', 0, '', $conf->entity);
    +	dolibarr_set_const($db, 'MAIN_MAIL_DEFAULT_FROMTYPE', GETPOST('MAIN_MAIL_DEFAULT_FROMTYPE'), 'chaine', 0, '', $conf->entity);
     
     	header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
     	exit;
    @@ -366,7 +366,7 @@ if ($action == 'edit')
     	{
     
     		$mainstmpid=(! empty($conf->global->MAIN_MAIL_SMTPS_ID)?$conf->global->MAIN_MAIL_SMTPS_ID:'');
    -		print '<tr '.$bcdd[$var].'><td>'.$langs->trans("MAIN_MAIL_SMTPS_ID").'</td><td>';
    +		print '<tr class="drag drop oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_ID").'</td><td>';
     		// SuperAdministrator access only
     		if (empty($conf->multicompany->enabled) || ($user->admin && !$user->entity))
     		{
    @@ -386,7 +386,7 @@ if ($action == 'edit')
     	{
     
     		$mainsmtppw=(! empty($conf->global->MAIN_MAIL_SMTPS_PW)?$conf->global->MAIN_MAIL_SMTPS_PW:'');
    -		print '<tr '.$bcdd[$var].'><td>'.$langs->trans("MAIN_MAIL_SMTPS_PW").'</td><td>';
    +		print '<tr class="drag drop oddeven"><td>'.$langs->trans("MAIN_MAIL_SMTPS_PW").'</td><td>';
     		// SuperAdministrator access only
     		if (empty($conf->multicompany->enabled) || ($user->admin && !$user->entity))
     		{
    @@ -854,7 +854,6 @@ else
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/mails_emailing.php b/htdocs/admin/mails_emailing.php
    index 91826f2be1d..7ce5add09a3 100644
    --- a/htdocs/admin/mails_emailing.php
    +++ b/htdocs/admin/mails_emailing.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013	   Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2016      Jonathan TISSEAU     <jonathan.tisseau@86dev.fr>
      *
    @@ -61,12 +61,12 @@ complete_substitutions_array($substitutionarrayfortest, $langs);
     if ($action == 'update' && empty($_POST["cancel"]))
     {
         // Send mode parameters
    -	dolibarr_set_const($db, "MAIN_MAIL_SENDMODE_EMAILING",       GETPOST("MAIN_MAIL_SENDMODE_EMAILING"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT_EMAILING",      GETPOST("MAIN_MAIL_SMTP_PORT_EMAILING"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_SMTP_SERVER_EMAILING",    GETPOST("MAIN_MAIL_SMTP_SERVER_EMAILING"),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID_EMAILING",       GETPOST("MAIN_MAIL_SMTPS_ID_EMAILING"), 'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW_EMAILING",       GETPOST("MAIN_MAIL_SMTPS_PW_EMAILING"), 'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS_EMAILING",      GETPOST("MAIN_MAIL_EMAIL_TLS_EMAILING"),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SENDMODE_EMAILING", GETPOST("MAIN_MAIL_SENDMODE_EMAILING"),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SMTP_PORT_EMAILING", GETPOST("MAIN_MAIL_SMTP_PORT_EMAILING"),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SMTP_SERVER_EMAILING", GETPOST("MAIN_MAIL_SMTP_SERVER_EMAILING"),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SMTPS_ID_EMAILING", GETPOST("MAIN_MAIL_SMTPS_ID_EMAILING"), 'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SMTPS_PW_EMAILING", GETPOST("MAIN_MAIL_SMTPS_PW_EMAILING"), 'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_TLS_EMAILING", GETPOST("MAIN_MAIL_EMAIL_TLS_EMAILING"),'chaine',0,'',$conf->entity);
     	dolibarr_set_const($db, "MAIN_MAIL_EMAIL_STARTTLS_EMAILING", GETPOST("MAIN_MAIL_EMAIL_STARTTLS_EMAILING"),'chaine',0,'',$conf->entity);
     
     	header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
    @@ -601,7 +601,6 @@ else
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/mails_senderprofile_list.php b/htdocs/admin/mails_senderprofile_list.php
    index b6268e7fc1e..280025b3b35 100644
    --- a/htdocs/admin/mails_senderprofile_list.php
    +++ b/htdocs/admin/mails_senderprofile_list.php
    @@ -23,7 +23,7 @@
      */
     
     require '../main.inc.php';
    -require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php');
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    @@ -61,7 +61,7 @@ $diroutputmassaction=$conf->admin->dir_output . '/temp/massgeneration/'.$user->i
     $hookmanager->initHooks(array('emailsenderprofilelist'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('emailsenderprofile');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Default sort order (if not yet defined by previous GETPOST)
     if (! $sortfield) $sortfield="t.".key($object->fields);   // Set here default search field. By default 1st field in definition.
    @@ -498,7 +498,7 @@ print '</form>'."\n";
     
     if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nbtotalofrecords))
     {
    -	require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
    +	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     	$formfile = new FormFile($db);
     
     	$hidegeneratedfilelistifempty=1;
    diff --git a/htdocs/admin/mails_templates.php b/htdocs/admin/mails_templates.php
    index 206191f5967..fdda38e956d 100644
    --- a/htdocs/admin/mails_templates.php
    +++ b/htdocs/admin/mails_templates.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2016  Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2011-2018  Philippe Grand          <philippe.grand@atoo-net.com>
      * Copyright (C) 2011       Remy Younes             <ryounes@gmail.com>
    @@ -926,6 +926,7 @@ print '</form>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/admin/menus.php b/htdocs/admin/menus.php
    index 083d78c03e5..6037304350a 100644
    --- a/htdocs/admin/menus.php
    +++ b/htdocs/admin/menus.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -64,10 +64,10 @@ if ($action == 'update' && ! $cancel)
     {
     	$_SESSION["mainmenu"]="home";   // Le gestionnaire de menu a pu changer
     
    -	dolibarr_set_const($db, "MAIN_MENU_STANDARD",        GETPOST('MAIN_MENU_STANDARD','alpha'),'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_MENU_SMARTPHONE",      GETPOST('MAIN_MENU_SMARTPHONE','alpha'),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MENU_STANDARD", GETPOST('MAIN_MENU_STANDARD','alpha'),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MENU_SMARTPHONE", GETPOST('MAIN_MENU_SMARTPHONE','alpha'),'chaine',0,'',$conf->entity);
     
    -	dolibarr_set_const($db, "MAIN_MENUFRONT_STANDARD",   GETPOST('MAIN_MENUFRONT_STANDARD','alpha'),'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MENUFRONT_STANDARD", GETPOST('MAIN_MENUFRONT_STANDARD','alpha'),'chaine',0,'',$conf->entity);
     	dolibarr_set_const($db, "MAIN_MENUFRONT_SMARTPHONE", GETPOST('MAIN_MENUFRONT_SMARTPHONE','alpha'),'chaine',0,'',$conf->entity);
     
     	// Define list of menu handlers to initialize
    @@ -269,7 +269,6 @@ if ($action != 'edit')
     	print '</div>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/menus/edit.php b/htdocs/admin/menus/edit.php
    index 191db98a402..4d5cc2be274 100644
    --- a/htdocs/admin/menus/edit.php
    +++ b/htdocs/admin/menus/edit.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2007      Patrick Raguin       <patrick.raguin@gmail.com>
      * Copyright (C) 2007-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016      Meziane Sof          <virtualsof@yahoo.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -28,9 +28,8 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/menubase.class.php';
     
    -
    -$langs->load("admin");
    -$langs->load('other');
    +// Load translation files required by the page
    +$langs->loadLangs(array("other","admin"));
     
     if (! $user->admin) accessforbidden();
     
    @@ -514,5 +513,6 @@ elseif ($action == 'edit')
         print '<br>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/menus/index.php b/htdocs/admin/menus/index.php
    index c3211fc2d75..d7ef0c4d62b 100644
    --- a/htdocs/admin/menus/index.php
    +++ b/htdocs/admin/menus/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2007      Patrick Raguin       <patrick.raguin@gmail.com>
      * Copyright (C) 2007-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,8 +27,8 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/treeview.lib.php';
     
    -$langs->load("other");
    -$langs->load("admin");
    +// Load translation files required by the page
    +$langs->loadLangs(array("other","admin"));
     
     if (! $user->admin) accessforbidden();
     
    @@ -410,6 +410,6 @@ else
     
     print '<br>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/menus/other.php b/htdocs/admin/menus/other.php
    index 7789c3fb21c..6e5f0d77b4b 100644
    --- a/htdocs/admin/menus/other.php
    +++ b/htdocs/admin/menus/other.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,9 +24,8 @@
     require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     
    -$langs->load("users");
    -$langs->load("admin");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("user","other","admin"));
     
     if (! $user->admin) accessforbidden();
     
    @@ -105,6 +104,6 @@ print '</tr>';
     
     print '</table>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/modulehelp.php b/htdocs/admin/modulehelp.php
    index 6281376dc2e..781f1fd380b 100644
    --- a/htdocs/admin/modulehelp.php
    +++ b/htdocs/admin/modulehelp.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2017	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -162,10 +162,10 @@ foreach ($modulesdir as $dir)
     		    			            	$familykey = $objMod->family;
     		    			            }
     
    -		    			            $moduleposition = ($objMod->module_position?$objMod->module_position:'500');
    -		    			            if ($moduleposition == 500 && ($objMod->isCoreOrExternalModule() == 'external'))
    +		    			            $moduleposition = ($objMod->module_position?$objMod->module_position:'50');
    +		    			            if ($moduleposition == '50' && ($objMod->isCoreOrExternalModule() == 'external'))
     		    			            {
    -		    			                $moduleposition = 800;
    +		    			                $moduleposition = '80';		// External modules at end by default
     		    			            }
     
     		    			            $orders[$i]  = $familyinfo[$familykey]['position']."_".$familykey."_".$moduleposition."_".$j;   // Sort by family, then by module position then number
    @@ -594,7 +594,6 @@ dol_fiche_end();
     
     print '</div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php
    index ae87a19e433..2376cc58988 100644
    --- a/htdocs/admin/modules.php
    +++ b/htdocs/admin/modules.php
    @@ -3,10 +3,11 @@
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Eric Seigne				<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2015		Jean-François Ferry		<jfefe@aternatik.fr>
      * Copyright (C) 2015		Raphaël Doursenaud		<rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2018		Nicolas ZABOURI 		<info@inovea-conseil.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -272,14 +273,13 @@ $dirins_ok=(dol_is_dir($dirins));
     $help_url='EN:First_setup|FR:Premiers_paramétrages|ES:Primeras_configuraciones';
     llxHeader('',$langs->trans("Setup"),$help_url, '', '', '', $morejs, $morecss, 0, 0);
     
    -$arrayofnatures=array('core'=>$langs->transnoentitiesnoconv("Core"), 'external'=>$langs->transnoentitiesnoconv("External").' - '.$langs->trans("AllPublishers"));
    -$arrayofwarnings=array();    // Array of warning each module want to show when activated
    -$arrayofwarningsext=array();    // Array of warning each module want to show when we activate an external module
     
     // Search modules dirs
     $modulesdir = dolGetModulesDirs();
     
    -
    +$arrayofnatures=array('core'=>$langs->transnoentitiesnoconv("Core"), 'external'=>$langs->transnoentitiesnoconv("External").' - ['.$langs->trans("AllPublishers").']');
    +$arrayofwarnings=array();    // Array of warning each module want to show when activated
    +$arrayofwarningsext=array();    // Array of warning each module want to show when we activate an external module
     $filename = array();
     $modules = array();
     $orders = array();
    @@ -371,10 +371,10 @@ foreach ($modulesdir as $dir)
     		    			            	$familykey = $objMod->family;
     		    			            }
     
    -		    			            $moduleposition = ($objMod->module_position?$objMod->module_position:'500');
    -		    			            if ($moduleposition == 500 && ($objMod->isCoreOrExternalModule() == 'external'))
    +		    			            $moduleposition = ($objMod->module_position?$objMod->module_position:'50');
    +		    			            if ($moduleposition == '50' && ($objMod->isCoreOrExternalModule() == 'external'))
     		    			            {
    -		    			                $moduleposition = 800;
    +		    			            	$moduleposition = '80';		// External modules at end by default
     		    			            }
     
     		    			            // Add list of warnings to show into arrayofwarnings and arrayofwarningsext
    @@ -434,9 +434,7 @@ if ($action == 'reset_confirm' && $user->admin)
     
     		$form = new Form($db);
     		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?value='.$value.'&mode='.$mode.$param, $langs->trans('ConfirmUnactivation'), $langs->trans(GETPOST('confirm_message_code')), 'reset', '', 'no', 1);
    -
     	}
    -
     }
     
     print $formconfirm;
    @@ -598,17 +596,18 @@ if ($mode == 'common')
             }
     
             // Print a separator if we change family
    -        if ($familykey!=$oldfamily)
    -        {
    -        	if ($oldfamily) print '</table></div><br>';
    +        if ($familykey != $oldfamily) {
    +            if ($oldfamily) {
    +                print '</table></div><br>';
    +            }
     
    -            $familytext=empty($familyinfo[$familykey]['label'])?$familykey:$familyinfo[$familykey]['label'];
    -            print_fiche_titre($familytext, '', '');
    +            $familytext = empty($familyinfo[$familykey]['label'])?$familykey:$familyinfo[$familykey]['label'];
    +            print load_fiche_titre($familytext, '', '');
     
                 print '<div class="div-table-responsive">';
    -        	print '<table class="tagtable liste" summary="list_of_modules">'."\n";
    +            print '<table class="tagtable liste" summary="list_of_modules">'."\n";
     
    -        	$atleastoneforfamily=0;
    +            $atleastoneforfamily=0;
             }
     
             $atleastoneforfamily++;
    @@ -638,6 +637,7 @@ if ($mode == 'common')
             }
     
             print '<tr class="oddeven">'."\n";
    +        if (!empty($conf->global->MAIN_MODULES_SHOW_LINENUMBERS)) print '<td width="20px">'.++$linenum.'</td>';
     
             // Picto + Name of module
             print '  <td width="200px">';
    @@ -670,6 +670,17 @@ if ($mode == 'common')
             // Version
             print '<td class="center nowrap" width="120px">';
             print $versiontrans;
    +        if(!empty($conf->global->CHECKLASTVERSION_EXTERNALMODULE)){
    +            require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
    +            if (!empty($objMod->url_last_version)) {
    +                $newversion = getURLContent($objMod->url_last_version);
    +                if(isset($newversion['content'])){
    +                    if (version_compare($newversion['content'], $versiontrans) > 0) {
    +                        print "&nbsp;<span class='butAction' title='" . $langs->trans('LastStableVersion') . "'>".$newversion['content']."</span>";
    +                    }
    +                }
    +            }
    +        }
             print "</td>\n";
     
             // Activate/Disable and Setup (2 columns)
    @@ -699,16 +710,13 @@ if ($mode == 'common')
             			print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$objMod->numero.'&amp;module_position='.$module_position.'&amp;action=reset_confirm&amp;confirm_message_code='.$objMod->warnings_unactivation[$mysoc->country_code].'&amp;value=' . $modName . '&amp;mode=' . $mode . $param . '">';
             			print img_picto($langs->trans("Activated"),'switch_on');
             			print '</a>';
    -
             		}
             		else {
     
             			print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$objMod->numero.'&amp;module_position='.$module_position.'&amp;action=reset&amp;value=' . $modName . '&amp;mode=' . $mode .'&amp;confirm=yes' . $param . '">';
             			print img_picto($langs->trans("Activated"),'switch_on');
             			print '</a>';
    -
             		}
    -
             	}
             	print '</td>'."\n";
     
    @@ -763,7 +771,6 @@ if ($mode == 'common')
             	{
             		print '<td class="tdsetuppicto right valignmiddle" width="60px">'.img_picto($langs->trans("NothingToSetup"),"setup",'class="opacitytransp" style="padding-right: 6px"').'</td>';
             	}
    -
             }
             else	// Module not yet activated
     		{
    @@ -799,7 +806,7 @@ if ($mode == 'common')
     	        	        {
             	        	    foreach ($arrayofwarningsextbycountry as $keycountry => $cursorwarningmessage)
             	        	    {
    -        	        	        if ($keycountry == 'always' || $keycountry == $mysoc->country_code)
    +        	        	    	if (preg_match('/^always/', $keycountry) || ($mysoc->country_code && preg_match('/^'.$mysoc->country_code.'/', $keycountry)))
             	        	        {
             	        	            $warningmessage .= ($warningmessage?"\n":"").$langs->trans($cursorwarningmessage, $objMod->getName(), $mysoc->country_code, $modules[$keymodule]->getName());
             	        	            $warningmessage .= ($warningmessage?"\n":"").($warningmessage?"\n":"").$langs->trans("Module").' : '.$objMod->getName();
    @@ -1019,11 +1026,21 @@ if ($mode == 'deploy')
     
     			if ($maxmin > 0)
     			{
    +				print '<script type="text/javascript">
    +				$(document).ready(function() {
    +					jQuery("#fileinstall").on("change", function() {
    +						if(this.files[0].size > '.($maxmin*1024).'){
    +							alert("'.dol_escape_js($langs->trans("ErrorFileSizeTooLarge")).'");
    +							this.value = "";
    +						};
    +					});
    +				});
    +				</script>'."\n";
     				// MAX_FILE_SIZE doit précéder le champ input de type file
     				print '<input type="hidden" name="max_file_size" value="'.($maxmin*1024).'">';
     			}
     
    -			print '<input class="flat minwidth400" type="file" name="fileinstall"> ';
    +			print '<input class="flat minwidth400" type="file" name="fileinstall" id="fileinstall"> ';
     
     			print '<input type="submit" name="send" value="'.dol_escape_htmltag($langs->trans("Send")).'" class="button">';
     
    @@ -1073,7 +1090,7 @@ if ($mode == 'develop')
     	//print '<img border="0" class="imgautosize imgmaxwidth180" src="'.DOL_URL_ROOT.'/theme/dolibarr_preferred_partner_int.png">';
     	print '<div class="imgmaxheight50 logo_setup"></div>';
     	print '</td>';
    -	print '<td>'.$langs->trans("TryToUseTheModuleBuilder").'</td>';
    +	print '<td>'.$langs->trans("TryToUseTheModuleBuilder", $langs->transnoentitiesnoconv("ModuleBuilder")).'</td>';
     	print '<td>'.$langs->trans("SeeTopRightMenu").'</td>';
     	print '</tr>';
     
    @@ -1091,8 +1108,6 @@ if ($mode == 'develop')
     	dol_fiche_end();
     }
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/multicurrency.php b/htdocs/admin/multicurrency.php
    index b301a2c7a03..9843c6a4fb0 100644
    --- a/htdocs/admin/multicurrency.php
    +++ b/htdocs/admin/multicurrency.php
    @@ -171,7 +171,7 @@ llxHeader('', $langs->trans($page_name));
     
     // Subheader
     $linkback = '<a href="' . DOL_URL_ROOT . '/admin/modules.php?restore_lastsearch_values=1">' . $langs->trans("BackToModuleList") . '</a>';
    -print_fiche_titre($langs->trans($page_name), $linkback);
    +print load_fiche_titre($langs->trans($page_name), $linkback);
     
     // Configuration header
     $head = multicurrencyAdminPrepareHead();
    @@ -361,6 +361,6 @@ print '
     	</script>
     ';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/notification.php b/htdocs/admin/notification.php
    index 43782816202..92ba0bec200 100644
    --- a/htdocs/admin/notification.php
    +++ b/htdocs/admin/notification.php
    @@ -166,12 +166,15 @@ foreach($listofnotifiedevents as $notifiedevent)
     {
     
         $label=$langs->trans("Notify_".$notifiedevent['code']); //!=$langs->trans("Notify_".$notifiedevent['code'])?$langs->trans("Notify_".$notifiedevent['code']):$notifiedevent['label'];
    +    $elementLabel = $langs->trans(ucfirst($notifiedevent['elementtype']));
     
         if ($notifiedevent['elementtype'] == 'order_supplier') $elementLabel = $langs->trans('SupplierOrder');
         elseif ($notifiedevent['elementtype'] == 'propal') $elementLabel = $langs->trans('Proposal');
         elseif ($notifiedevent['elementtype'] == 'facture') $elementLabel = $langs->trans('Bill');
         elseif ($notifiedevent['elementtype'] == 'commande') $elementLabel = $langs->trans('Order');
         elseif ($notifiedevent['elementtype'] == 'ficheinter') $elementLabel = $langs->trans('Intervention');
    +    elseif ($notifiedevent['elementtype'] == 'shipping') $elementLabel = $langs->trans('Shipping');
    +    elseif ($notifiedevent['elementtype'] == 'expensereport') $elementLabel = $langs->trans('ExpenseReport');
     
         if ($i) print ', ';
         print $label;
    @@ -209,11 +212,15 @@ foreach($listofnotifiedevents as $notifiedevent)
     
         $label=$langs->trans("Notify_".$notifiedevent['code']); //!=$langs->trans("Notify_".$notifiedevent['code'])?$langs->trans("Notify_".$notifiedevent['code']):$notifiedevent['label'];
     
    +    $elementLabel = $langs->trans(ucfirst($notifiedevent['elementtype']));
    +	// Special cases
         if ($notifiedevent['elementtype'] == 'order_supplier') $elementLabel = $langs->trans('SupplierOrder');
         elseif ($notifiedevent['elementtype'] == 'propal') $elementLabel = $langs->trans('Proposal');
         elseif ($notifiedevent['elementtype'] == 'facture') $elementLabel = $langs->trans('Bill');
         elseif ($notifiedevent['elementtype'] == 'commande') $elementLabel = $langs->trans('Order');
     	elseif ($notifiedevent['elementtype'] == 'ficheinter') $elementLabel = $langs->trans('Intervention');
    +	elseif ($notifiedevent['elementtype'] == 'shipping') $elementLabel = $langs->trans('Shipping');
    +	elseif ($notifiedevent['elementtype'] == 'expensereport') $elementLabel = $langs->trans('ExpenseReport');
     
         print '<tr class="oddeven">';
         print '<td>'.$elementLabel.'</td>';
    @@ -272,7 +279,6 @@ print '<div class="center"><input type="submit" class="button" value="'.$langs->
     
     print '</form>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/oauth.php b/htdocs/admin/oauth.php
    index f03af4655d4..16827306bda 100644
    --- a/htdocs/admin/oauth.php
    +++ b/htdocs/admin/oauth.php
    @@ -139,7 +139,6 @@ foreach ($list as $key)
         print '<td><label for="'.$key[2].'">'.$langs->trans($key[2]).'</label></td>';
         print '<td><input type="password" size="100" id="'.$key[2].'" name="'.$key[2].'" value="'.$conf->global->{$key[2]}.'">';
         print '</td></tr>';
    -
     }
     
     print '</table>'."\n";
    @@ -150,6 +149,6 @@ print '<div class="center"><input type="submit" class="button" value="'.$langs->
     
     print '</form>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/oauthlogintokens.php b/htdocs/admin/oauthlogintokens.php
    index 4406dbd9576..f29c49e9f38 100644
    --- a/htdocs/admin/oauthlogintokens.php
    +++ b/htdocs/admin/oauthlogintokens.php
    @@ -17,7 +17,7 @@
      */
     
     /**
    - * \file        htdocs/admin/oauthlogintoken.php
    + * \file        htdocs/admin/oauthlogintokens.php
      * \ingroup     oauth
      * \brief       Setup page to configure oauth access to login information
      */
    @@ -327,7 +327,6 @@ if ($mode == 'setup' && $user->admin)
     
             print '</form>';
         }
    -
     }
     
     if ($mode == 'test' && $user->admin)
    @@ -342,7 +341,7 @@ if ($mode == 'test' && $user->admin)
             $langs->load($driver);
             $printer = new $classname($db);
             //print '<pre>'.print_r($printer, true).'</pre>';
    -        if (count($printer->getlist_available_printers())) {
    +        if (count($printer->getlistAvailablePrinters())) {
                 if ($printer->listAvailablePrinters()==0) {
                     print $printer->resprint;
                 } else {
    @@ -352,11 +351,9 @@ if ($mode == 'test' && $user->admin)
             else {
                 print $langs->trans('PleaseConfigureDriverfromList');
             }
    -
         }
     
         print '</table>';
    -
     }
     
     if ($mode == 'userconf' && $user->admin)
    @@ -394,6 +391,6 @@ if ($mode == 'userconf' && $user->admin)
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/order_extrafields.php b/htdocs/admin/order_extrafields.php
    index 361fc5b67bb..789120a7da7 100644
    --- a/htdocs/admin/order_extrafields.php
    +++ b/htdocs/admin/order_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      *
    @@ -85,7 +85,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -98,7 +98,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -117,6 +117,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/orderdet_extrafields.php b/htdocs/admin/orderdet_extrafields.php
    index c75551cf9f0..d998cddb35c 100644
    --- a/htdocs/admin/orderdet_extrafields.php
    +++ b/htdocs/admin/orderdet_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
    @@ -86,7 +86,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -99,7 +99,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -118,6 +118,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/payment.php b/htdocs/admin/payment.php
    index 1864fdb557c..816ab8344ce 100644
    --- a/htdocs/admin/payment.php
    +++ b/htdocs/admin/payment.php
    @@ -83,7 +83,6 @@ if ($action == 'setparams')
     	{
     	    setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
     	}
    -
     }
     
     
    @@ -217,7 +216,6 @@ foreach ($dirmodels as $reldir)
                                 print '</td>';
     
                                 print "</tr>\n";
    -
                             }
                         }
                     }
    @@ -262,7 +260,6 @@ print '</form>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/pdf.php b/htdocs/admin/pdf.php
    index f988b27c5e6..37c836043a0 100644
    --- a/htdocs/admin/pdf.php
    +++ b/htdocs/admin/pdf.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012-2107 Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -32,11 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
     
     // Load translation files required by the page
    -$langs->loadLangs(array('admin', 'languages', 'other'));
    -
    -$langs->load("companies");
    -$langs->load("products");
    -$langs->load("members");
    +$langs->loadLangs(array('admin', 'languages', 'other', 'companies', 'products', 'members'));
     
     if (! $user->admin) accessforbidden();
     
    @@ -54,29 +50,31 @@ if ($cancel) {
     
     if ($action == 'update')
     {
    -	dolibarr_set_const($db, "MAIN_PDF_FORMAT",    $_POST["MAIN_PDF_FORMAT"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_PDF_FORMAT", $_POST["MAIN_PDF_FORMAT"],'chaine',0,'', $conf->entity);
     
    -	dolibarr_set_const($db, "MAIN_PDF_MARGIN_LEFT",    $_POST["MAIN_PDF_MARGIN_LEFT"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_PDF_MARGIN_RIGHT",   $_POST["MAIN_PDF_MARGIN_RIGHT"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_PDF_MARGIN_TOP",     $_POST["MAIN_PDF_MARGIN_TOP"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_PDF_MARGIN_BOTTOM",  $_POST["MAIN_PDF_MARGIN_BOTTOM"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_PDF_MARGIN_LEFT", $_POST["MAIN_PDF_MARGIN_LEFT"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_PDF_MARGIN_RIGHT", $_POST["MAIN_PDF_MARGIN_RIGHT"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_PDF_MARGIN_TOP", $_POST["MAIN_PDF_MARGIN_TOP"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_PDF_MARGIN_BOTTOM", $_POST["MAIN_PDF_MARGIN_BOTTOM"],'chaine',0,'', $conf->entity);
     
    -    dolibarr_set_const($db, "MAIN_PROFID1_IN_ADDRESS",    $_POST["MAIN_PROFID1_IN_ADDRESS"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_PROFID2_IN_ADDRESS",    $_POST["MAIN_PROFID2_IN_ADDRESS"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_PROFID3_IN_ADDRESS",    $_POST["MAIN_PROFID3_IN_ADDRESS"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_PROFID4_IN_ADDRESS",    $_POST["MAIN_PROFID4_IN_ADDRESS"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT",    $_POST["MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT"],'chaine',0,'',$conf->entity);
    +    dolibarr_set_const($db, "MAIN_PROFID1_IN_ADDRESS", $_POST["MAIN_PROFID1_IN_ADDRESS"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_PROFID2_IN_ADDRESS", $_POST["MAIN_PROFID2_IN_ADDRESS"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_PROFID3_IN_ADDRESS", $_POST["MAIN_PROFID3_IN_ADDRESS"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_PROFID4_IN_ADDRESS", $_POST["MAIN_PROFID4_IN_ADDRESS"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT", $_POST["MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT"],'chaine',0,'', $conf->entity);
     
    -	dolibarr_set_const($db, "MAIN_TVAINTRA_NOT_IN_ADDRESS",    $_POST["MAIN_TVAINTRA_NOT_IN_ADDRESS"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DESC",    $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_DESC"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_REF",     $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_REF"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_PDF_USE_ISO_LOCATION",     $_POST["MAIN_PDF_USE_ISO_LOCATION"],'chaine',0,'',$conf->entity);
    -	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS",     $_POST["MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_TVAINTRA_NOT_IN_ADDRESS", $_POST["MAIN_TVAINTRA_NOT_IN_ADDRESS"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_DESC", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_DESC"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_HIDE_REF", $_POST["MAIN_GENERATE_DOCUMENTS_HIDE_REF"],'chaine',0,'', $conf->entity);
    +
    +	dolibarr_set_const($db, "MAIN_INVERT_SENDER_RECIPIENT", $_POST["MAIN_INVERT_SENDER_RECIPIENT"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_PDF_USE_ISO_LOCATION", $_POST["MAIN_PDF_USE_ISO_LOCATION"],'chaine',0,'', $conf->entity);
    +	dolibarr_set_const($db, "MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS", $_POST["MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS"],'chaine',0,'', $conf->entity);
     
     
    -    dolibarr_set_const($db, "MAIN_PDF_MAIN_HIDE_SECOND_TAX",    $_POST["MAIN_PDF_MAIN_HIDE_SECOND_TAX"],'chaine',0,'',$conf->entity);
    -    dolibarr_set_const($db, "MAIN_PDF_MAIN_HIDE_THIRD_TAX",     $_POST["MAIN_PDF_MAIN_HIDE_THIRD_TAX"],'chaine',0,'',$conf->entity);
    +    dolibarr_set_const($db, "MAIN_PDF_MAIN_HIDE_SECOND_TAX", $_POST["MAIN_PDF_MAIN_HIDE_SECOND_TAX"],'chaine',0,'', $conf->entity);
    +    dolibarr_set_const($db, "MAIN_PDF_MAIN_HIDE_THIRD_TAX", $_POST["MAIN_PDF_MAIN_HIDE_THIRD_TAX"],'chaine',0,'', $conf->entity);
     
     	header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
     	exit;
    @@ -519,7 +517,6 @@ else	// Show
                 $text.= yn($conf->global->MAIN_PDF_MAIN_HIDE_THIRD_TAX,1);
                 $text.= '</td></tr>';
             }
    -
         }
     
         // Sales TAX / VAT information
    @@ -576,31 +573,36 @@ else	// Show
     	print "</td>";
     	print '</tr>';
     
    -	//Desc
    +	// Hide Desc
     
     	print '<tr class="oddeven"><td>'.$langs->trans("HideDescOnPDF").'</td><td colspan="2">';
     	print yn($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC,1);
     	print '</td></tr>';
     
    -	//Ref
    +	// Hide Ref
     
     	print '<tr class="oddeven"><td>'.$langs->trans("HideRefOnPDF").'</td><td colspan="2">';
     	print yn($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF,1);
     	print '</td></tr>';
     
    -	//Details
    +	// Hide Details
     
     	print '<tr class="oddeven"><td>'.$langs->trans("HideDetailsOnPDF").'</td><td colspan="2">';
     	print yn($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS,1);
     	print '</td></tr>';
     
    +	// Invert sender and recipient
    +	print '<tr class="oddeven"><td>'.$langs->trans("SwapSenderAndRecipientOnPDF").'</td><td colspan="2">';
    +	print yn($conf->global->MAIN_INVERT_SENDER_RECIPIENT,1);
    +	print '</td></tr>';
     
    -    print '<tr class="oddeven"><td>'.$langs->trans("PlaceCustomerAddressToIsoLocation").'</td><td colspan="2">';
    +	// Use French location
    +	print '<tr class="oddeven"><td>'.$langs->trans("PlaceCustomerAddressToIsoLocation").'</td><td colspan="2">';
     	print yn($conf->global->MAIN_PDF_USE_ISO_LOCATION,1);
     	print '</td></tr>';
     
     
    -    print '<tr class="oddeven"><td>'.$langs->trans("ShowDetailsInPDFPageFoot").'</td><td colspan="2">';
    +	print '<tr class="oddeven"><td>'.$langs->trans("ShowDetailsInPDFPageFoot").'</td><td colspan="2">';
     	print $arraydetailsforpdffoot[($conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS ? $conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS : 0)];
     	print '</td></tr>';
     
    @@ -668,7 +670,6 @@ else	// Show
     	print '<br>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/perms.php b/htdocs/admin/perms.php
    index 50bf939c07f..e7cf64d768e 100644
    --- a/htdocs/admin/perms.php
    +++ b/htdocs/admin/perms.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Herve Prot           <herve.prot@symeos.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -218,5 +218,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
    -$db->close();
    +$db->close();
    \ No newline at end of file
    diff --git a/htdocs/admin/prelevement.php b/htdocs/admin/prelevement.php
    index 6fd40cf2825..9fc4f46e54f 100644
    --- a/htdocs/admin/prelevement.php
    +++ b/htdocs/admin/prelevement.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2013 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -80,6 +80,16 @@ if ($action == "set")
             $res = dolibarr_set_const($db, "PRELEVEMENT_USER", GETPOST("PRELEVEMENT_USER"),'chaine',0,'',$conf->entity);
             if (! $res > 0) $error++;
         }
    +    if (GETPOST("PRELEVEMENT_END_TO_END") || GETPOST("PRELEVEMENT_END_TO_END")=="")
    +    {
    +        $res = dolibarr_set_const($db, "END_TO_END", GETPOST("PRELEVEMENT_END_TO_END"),'chaine',0,'',$conf->entity);
    +        if (! $res > 0) $error++;
    +    }
    +    if (GETPOST("PRELEVEMENT_USTRD") || GETPOST("PRELEVEMENT_USTRD")=="")
    +    {
    +        $res = dolibarr_set_const($db, "USTRD", GETPOST("PRELEVEMENT_USTRD"),'chaine',0,'',$conf->entity);
    +        if (! $res > 0) $error++;
    +    }
     
         if (! $error)
     	{
    @@ -221,6 +231,18 @@ print $form->select_dolusers($conf->global->PRELEVEMENT_USER, 'PRELEVEMENT_USER'
     print '</td>';
     print '</tr>';
     
    +//EntToEnd
    +print '<tr class="pair"><td>'.$langs->trans("END_TO_END").'</td>';
    +print '<td align="left">';
    +print '<input type="text" name="PRELEVEMENT_END_TO_END" value="'.$conf->global->END_TO_END.'" size="15" ></td>';
    +print '</td></tr>';
    +
    +//USTRD
    +print '<tr class="pair"><td>'.$langs->trans("USTRD").'</td>';
    +print '<td align="left">';
    +print '<input type="text" name="PRELEVEMENT_USTRD" value="'.$conf->global->USTRD.'" size="15" ></td>';
    +print '</td></tr>';
    +
     print '</table>';
     print '<br>';
     
    @@ -443,7 +465,6 @@ if (! empty($conf->global->MAIN_MODULE_NOTIFICATION))
         {
             $num = $db->num_rows($resql);
             $i = 0;
    -        $var = false;
             while ($i < $num)
             {
                 $obj = $db->fetch_object($resql);
    @@ -489,7 +510,6 @@ if (! empty($conf->global->MAIN_MODULE_NOTIFICATION))
     	{
     	    $num = $db->num_rows($resql);
     	    $i = 0;
    -	    $var = false;
     	    while ($i < $num)
     	    {
     	        $obj = $db->fetch_object($resql);
    @@ -511,5 +531,6 @@ if (! empty($conf->global->MAIN_MODULE_NOTIFICATION))
     }
     */
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/propal.php b/htdocs/admin/propal.php
    index 94b1d1dac67..cf860cd64ba 100644
    --- a/htdocs/admin/propal.php
    +++ b/htdocs/admin/propal.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004      Sebastien Di Cintio         <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier              <benoit.mortier@opensides.be>
      * Copyright (C) 2004      Eric Seigne                 <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin               <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin               <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      * Copyright (C) 2011-2013 Juanjo Menent			   <jmenent@2byte.es>
      *
    @@ -649,7 +649,6 @@ print "</td></tr>\n";
     
     print '</table>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/proxy.php b/htdocs/admin/proxy.php
    index 87a89f5d99b..9490a291729 100644
    --- a/htdocs/admin/proxy.php
    +++ b/htdocs/admin/proxy.php
    @@ -205,5 +205,6 @@ print '</div>';
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/receiptprinter.php b/htdocs/admin/receiptprinter.php
    index 4465017bdc6..b8d92687d84 100644
    --- a/htdocs/admin/receiptprinter.php
    +++ b/htdocs/admin/receiptprinter.php
    @@ -52,6 +52,12 @@ if (!$mode) $mode='config';
     
     // used in library escpos maybe useful if php doesn't support gzdecode
     if (!function_exists('gzdecode')) {
    +    /**
    +     * Gzdecode
    +     *
    +     * @param string    $data   data to deflate
    +     * @return string           data deflated
    +     */
         function gzdecode($data)
         {
             return gzinflate(substr($data,10,-8));
    @@ -243,14 +249,14 @@ if ($mode == 'config' && $user->admin)
         print "</tr>\n";
         $ret = $printer->listprinters();
         $nbofprinters = count($printer->listprinters);
    -    
    +
         if ($ret > 0) {
             setEventMessages($printer->error, $printer->errors, 'errors');
         } else {
    -        for ($line=0; $line < $nbofprinters; $line++) 
    +        for ($line=0; $line < $nbofprinters; $line++)
             {
                 print '<tr class="oddeven">';
    -            if ($action=='editprinter' && $printer->listprinters[$line]['rowid']==$printerid) 
    +            if ($action=='editprinter' && $printer->listprinters[$line]['rowid']==$printerid)
                 {
                     print '<input type="hidden" name="printerid" value="'.$printer->listprinters[$line]['rowid'].'">';
                     print '<td><input size="50" type="text" name="printername" value="'.$printer->listprinters[$line]['name'].'"></td>';
    @@ -285,7 +291,7 @@ if ($mode == 'config' && $user->admin)
             }
         }
     
    -    if ($action!='editprinter') 
    +    if ($action!='editprinter')
         {
             if ($nbofprinters > 0)
             {
    @@ -299,7 +305,7 @@ if ($mode == 'config' && $user->admin)
                 print '<th></th>';
                 print "</tr>\n";
             }
    -        
    +
             print '<tr>';
             print '<td><input size="50" type="text" name="printername"></td>';
             $ret = $printer->selectTypePrinter();
    @@ -315,7 +321,7 @@ if ($mode == 'config' && $user->admin)
         print '</table>';
     
         dol_fiche_end();
    -    
    +
         if ($action!='editprinter') {
             print '<div class="center"><input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans("Add")).'"></div>';
         } else {
    @@ -324,9 +330,9 @@ if ($mode == 'config' && $user->admin)
         print '</form>';
     
         print '<div><p></div>';
    -    
    +
         dol_fiche_head();
    -    
    +
         print $langs->trans("ReceiptPrinterTypeDesc")."<br><br>\n";
         print '<table class="noborder" width="100%">'."\n";
         print '<tr class="oddeven"><td>'.$langs->trans("CONNECTOR_DUMMY").':</td><td>'.$langs->trans("CONNECTOR_DUMMY_HELP").'</td></tr>';
    @@ -338,7 +344,7 @@ if ($mode == 'config' && $user->admin)
         dol_fiche_end();
     
         print '<div><p></div>';
    -    
    +
         dol_fiche_head();
         print $langs->trans("ReceiptPrinterProfileDesc")."<br><br>\n";
         print '<table class="noborder" width="100%">'."\n";
    @@ -378,7 +384,7 @@ if ($mode == 'template' && $user->admin)
             setEventMessages($printer->error, $printer->errors, 'errors');
         } else {
             $max = count($printer->listprinterstemplates);
    -        for ($line=0; $line < $max; $line++) 
    +        for ($line=0; $line < $max; $line++)
             {
                 print '<tr class="oddeven">';
                 if ($action=='edittemplate' && $printer->listprinterstemplates[$line]['rowid']==$templateid) {
    @@ -423,7 +429,7 @@ if ($mode == 'template' && $user->admin)
         print '<th>'.$langs->trans("Description").'</th>';
         print "</tr>\n";
         $max = count($printer->tags);
    -    for ($tag=0; $tag < $max; $tag++) 
    +    for ($tag=0; $tag < $max; $tag++)
         {
             print '<tr class="oddeven">';
             print '<td>&lt;'.$printer->tags[$tag].'&gt;</td><td>'.$langs->trans(strtoupper($printer->tags[$tag])).'</td>';
    @@ -432,22 +438,20 @@ if ($mode == 'template' && $user->admin)
         print '</table>';
     
         dol_fiche_end();
    -
     }
     
     // to remove after test
    -$object=new stdClass();
    -$object->date_time = '2015-11-02 22:30:25';
    -$object->id = 1234;
    -$object->customer_firstname  = 'John';
    -$object->customer_lastname  = 'Deuf';
    -$object->vendor_firstname  = 'Jim';
    -$object->vendor_lastname  = 'Big';
    -$object->barcode = '3700123862396';
    +// $object=new stdClass();
    +// $object->date_time = '2015-11-02 22:30:25';
    +// $object->id = 1234;
    +// $object->customer_firstname  = 'John';
    +// $object->customer_lastname  = 'Deuf';
    +// $object->vendor_firstname  = 'Jim';
    +// $object->vendor_lastname  = 'Big';
    +// $object->barcode = '3700123862396';
     //$printer->sendToPrinter($object, 1, 16);
     //setEventMessages($printer->error, $printer->errors, 'errors');
     
    +// End of page
     llxFooter();
    -
     $db->close();
    -
    diff --git a/htdocs/admin/resource.php b/htdocs/admin/resource.php
    index e8f8bdba204..566e57e587b 100644
    --- a/htdocs/admin/resource.php
    +++ b/htdocs/admin/resource.php
    @@ -137,6 +137,6 @@ print '</form>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/resource_extrafields.php b/htdocs/admin/resource_extrafields.php
    index 8193d146aaa..41d8d91cffd 100644
    --- a/htdocs/admin/resource_extrafields.php
    +++ b/htdocs/admin/resource_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2016		Florian Henry			<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -84,7 +84,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -97,7 +97,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -116,6 +116,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/salaries.php b/htdocs/admin/salaries.php
    index 6c5281173c3..a68a4bda5a6 100644
    --- a/htdocs/admin/salaries.php
    +++ b/htdocs/admin/salaries.php
    @@ -75,7 +75,7 @@ if ($action == 'update')
     llxHeader('',$langs->trans('SalariesSetup'));
     
     $form = new Form($db);
    -if (! empty($conf->accounting->enabled)) $formaccounting = New FormAccounting($db);
    +if (! empty($conf->accounting->enabled)) $formaccounting = new FormAccounting($db);
     
     $linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
     print load_fiche_titre($langs->trans('SalariesSetup'),$linkback,'title_setup');
    @@ -127,5 +127,6 @@ print '<div class="center"><input type="submit" class="button" value="'.$langs->
     
     print '</form>';
     
    +// End of page
     llxFooter();
    -$db->close();
    +$db->close();;
    diff --git a/htdocs/admin/security.php b/htdocs/admin/security.php
    index 129853837a4..26dcdc85b8d 100644
    --- a/htdocs/admin/security.php
    +++ b/htdocs/admin/security.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013-2015 Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -500,7 +500,6 @@ print '</form>';
     
     print '</div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/security_file.php b/htdocs/admin/security_file.php
    index 4a4637185ca..87e0d6dd941 100644
    --- a/htdocs/admin/security_file.php
    +++ b/htdocs/admin/security_file.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2017	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -178,7 +178,6 @@ print '<div class="center"><input type="submit" class="button" name="button" val
     print '</form>';
     
     
    -
     // Form to test upload
     print '<br>';
     $formfile=new FormFile($db);
    @@ -188,5 +187,6 @@ $formfile->form_attach_new_file($_SERVER['PHP_SELF'], $langs->trans("FormToTestF
     $filearray=dol_dir_list($upload_dir, "files", 0, '', '', 'name', SORT_ASC, 1);
     $formfile->list_of_documents($filearray, null, 'admin_temp', '');
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/security_other.php b/htdocs/admin/security_other.php
    index 6503ab10f77..b1e4f745560 100644
    --- a/htdocs/admin/security_other.php
    +++ b/htdocs/admin/security_other.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Juanjo Menent 		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -206,6 +206,6 @@ print '<div class="center"><input type="submit" class="button" name="button" val
     
     print '</form>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/sms.php b/htdocs/admin/sms.php
    index db1cb20b5e3..84570e75e2a 100644
    --- a/htdocs/admin/sms.php
    +++ b/htdocs/admin/sms.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013 	   Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -48,12 +48,12 @@ $action=GETPOST('action','aZ09');
     
     if ($action == 'update' && empty($_POST["cancel"]))
     {
    -	dolibarr_set_const($db, "MAIN_DISABLE_ALL_SMS",   $_POST["MAIN_DISABLE_ALL_SMS"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_DISABLE_ALL_SMS", $_POST["MAIN_DISABLE_ALL_SMS"], 'chaine', 0, '', $conf->entity);
     
    -	dolibarr_set_const($db, "MAIN_SMS_SENDMODE",      $_POST["MAIN_SMS_SENDMODE"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_SMS_SENDMODE", $_POST["MAIN_SMS_SENDMODE"], 'chaine', 0, '', $conf->entity);
     
    -	dolibarr_set_const($db, "MAIN_MAIL_SMS_FROM",     $_POST["MAIN_MAIL_SMS_FROM"],'chaine',0,'',$conf->entity);
    -	//dolibarr_set_const($db, "MAIN_MAIL_AUTOCOPY_TO",    $_POST["MAIN_MAIL_AUTOCOPY_TO"],'chaine',0,'',$conf->entity);
    +	dolibarr_set_const($db, "MAIN_MAIL_SMS_FROM", $_POST["MAIN_MAIL_SMS_FROM"], 'chaine', 0, '', $conf->entity);
    +	//dolibarr_set_const($db, "MAIN_MAIL_AUTOCOPY_TO", $_POST["MAIN_MAIL_AUTOCOPY_TO"], 'chaine', 0, '', $conf->entity);
     
     	header("Location: ".$_SERVER["PHP_SELF"]."?mainmenu=home&leftmenu=setup");
     	exit;
    @@ -169,21 +169,21 @@ if ($action == 'edit')
     	print '<table class="noborder" width="100%">';
     	print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
     
    -	// Disable	
    +	// Disable
     	print '<tr class="oddeven"><td>'.$langs->trans("MAIN_DISABLE_ALL_SMS").'</td><td>';
     	print $form->selectyesno('MAIN_DISABLE_ALL_SMS',$conf->global->MAIN_DISABLE_ALL_SMS,1);
     	print '</td></tr>';
     
    -	// Separator	
    +	// Separator
     	print '<tr class="oddeven"><td colspan="2">&nbsp;</td></tr>';
     
    -	// Method	
    +	// Method
     	print '<tr class="oddeven"><td>'.$langs->trans("MAIN_SMS_SENDMODE").'</td><td>';
     	if (count($listofmethods)) print $form->selectarray('MAIN_SMS_SENDMODE',$listofmethods,$conf->global->MAIN_SMS_SENDMODE,1);
     	else print '<font class="error">'.$langs->trans("None").'</font>';
         print '</td></tr>';
     
    -	// From	
    +	// From
     	print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMS_FROM",$langs->transnoentities("Undefined")).'</td>';
     	print '<td><input class="flat" name="MAIN_MAIL_SMS_FROM" size="32" value="' . $conf->global->MAIN_MAIL_SMS_FROM;
     	print '"></td></tr>';
    @@ -213,20 +213,20 @@ else
     	print '<table class="noborder" width="100%">';
     	print '<tr class="liste_titre"><td>'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
     
    -	// Disable	
    +	// Disable
     	print '<tr class="oddeven"><td>'.$langs->trans("MAIN_DISABLE_ALL_SMS").'</td><td>'.yn($conf->global->MAIN_DISABLE_ALL_SMS).'</td></tr>';
     
    -	// Separator	
    +	// Separator
     	print '<tr class="oddeven"><td colspan="2">&nbsp;</td></tr>';
     
    -	// Method	
    +	// Method
     	print '<tr class="oddeven"><td>'.$langs->trans("MAIN_SMS_SENDMODE").'</td><td>';
     	$text=$listofmethods[$conf->global->MAIN_SMS_SENDMODE];
     	if (empty($text)) $text=$langs->trans("Undefined").' '.img_warning();
     	print $text;
     	print '</td></tr>';
     
    -	// From	
    +	// From
     	print '<tr class="oddeven"><td>'.$langs->trans("MAIN_MAIL_SMS_FROM",$langs->transnoentities("Undefined")).'</td>';
     	print '<td>'.$conf->global->MAIN_MAIL_SMS_FROM;
     	if (!empty($conf->global->MAIN_MAIL_SMS_FROM) && ! isValidPhone($conf->global->MAIN_MAIL_SMS_FROM)) print ' '.img_warning($langs->trans("ErrorBadPhone"));
    @@ -331,7 +331,6 @@ else
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/socialnetworks.php b/htdocs/admin/socialnetworks.php
    new file mode 100644
    index 00000000000..9aba26b3fc4
    --- /dev/null
    +++ b/htdocs/admin/socialnetworks.php
    @@ -0,0 +1,123 @@
    +<?php
    +/* Copyright (C) 2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *   	\file       htdocs/admin/socialnetworks.php
    + *		\ingroup    socialnetworks
    + *		\brief      Page to setup the module Social Networks
    + */
    +
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/mailmanspip.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
    +
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin", "errors"));
    +
    +if (! $user->admin) accessforbidden();
    +
    +$type=array('yesno','texte','chaine');
    +
    +$action = GETPOST('action','aZ09');
    +
    +
    +
    +/*
    + * Actions
    + */
    +
    +// Action activation d'un sous module du module adherent
    +if ($action == 'set')
    +{
    +	$result=dolibarr_set_const($db, $_GET["name"], $_GET["value"], '', 0, '', $conf->entity);
    +	if ($result < 0)
    +	{
    +		dol_print_error($db);
    +	}
    +}
    +
    +// Action desactivation d'un sous module du module adherent
    +if ($action == 'unset')
    +{
    +	$result=dolibarr_del_const($db, $_GET["name"], $conf->entity);
    +	if ($result < 0)
    +	{
    +		dol_print_error($db);
    +	}
    +}
    +
    +
    +/*
    + * View
    + */
    +
    +$help_url='';
    +
    +llxHeader('',$langs->trans("SocialNetworkSetup"),$help_url);
    +
    +
    +$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
    +print load_fiche_titre($langs->trans("SocialNetworkSetup"),$linkback,'title_setup');
    +
    +//$head = socialnetworks_admin_prepare_head();
    +$h=0;
    +$head = array();
    +$head[$h][0] = DOL_URL_ROOT.'/admin/socialnetworks.php';
    +$head[$h][1] = $langs->trans("Setup");
    +$head[$h][2] = 'setup';
    +$h++;
    +
    +
    +print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
    +
    +dol_fiche_head($head, 'setup', '', 0, 'user');
    +
    +print '<br>';
    +
    +$arrayofsocialnetworks=array('skype'=>'Skype', 'twitter'=>'Twitter', 'facebook'=>'Facebook');
    +
    +foreach($arrayofsocialnetworks as $snkey => $snlabel)
    +{
    +	$consttocheck = 'SOCIALNETWORKS_'.strtoupper($snkey);
    +	if (! empty($conf->global->$consttocheck))
    +	{
    +		//$link=img_picto($langs->trans("Active"),'tick').' ';
    +		$link='<a href="'.$_SERVER["PHP_SELF"].'?action=unset&value=0&name='.$consttocheck.'">';
    +		//$link.=$langs->trans("Disable");
    +		$link.=img_picto($langs->trans("Activated"),'switch_on');
    +		$link.='</a>';
    +	}
    +	else
    +	{
    +		$link='<a href="'.$_SERVER["PHP_SELF"].'?action=set&value=1&name='.$consttocheck.'">';
    +		//$link.=img_$langs->trans("Activate")
    +		$link.=img_picto($langs->trans("Disabled"),'switch_off');
    +		$link.='</a>';
    +	}
    +	print $langs->trans('EnableFeatureFor', $snlabel).' '.$link.'<br><br>';
    +}
    +
    +
    +dol_fiche_end();
    +
    +print '</form>';
    +
    +
    +// End of page
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/admin/spip.php b/htdocs/admin/spip.php
    index b9892fdf2a9..02500c6d8f9 100644
    --- a/htdocs/admin/spip.php
    +++ b/htdocs/admin/spip.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2013 Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -163,6 +163,6 @@ else
         dol_fiche_end();
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php
    index cdfaf928cf4..2ce29bca165 100644
    --- a/htdocs/admin/stock.php
    +++ b/htdocs/admin/stock.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2008-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012-2013 Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2013-2018 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2013      Florian Henry        <florian.henry@open-concept.pro>
    @@ -567,7 +567,6 @@ if ($conf->global->PRODUIT_SOUSPRODUITS)
     }
     */
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/supplier_invoice.php b/htdocs/admin/supplier_invoice.php
    index 5dbe26596fe..45d588fb031 100644
    --- a/htdocs/admin/supplier_invoice.php
    +++ b/htdocs/admin/supplier_invoice.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2004      Sebastien Di Cintio     <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier          <benoit.mortier@opensides.be>
      * Copyright (C) 2010-2013 Juanjo Menent           <jmenent@2byte.es>
    @@ -519,7 +519,6 @@ print "</td></tr>\n";
     
     print '</table>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/supplier_order.php b/htdocs/admin/supplier_order.php
    index 695d25a963c..88cb18d5d80 100644
    --- a/htdocs/admin/supplier_order.php
    +++ b/htdocs/admin/supplier_order.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2004      Sebastien Di Cintio     <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier          <benoit.mortier@opensides.be>
      * Copyright (C) 2010-2013 Juanjo Menent           <jmenent@2byte.es>
    @@ -589,7 +589,6 @@ print "</td></tr>\n";
     
     print '</table>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/supplier_payment.php b/htdocs/admin/supplier_payment.php
    index c1f3a7cb25d..77f2a95070e 100644
    --- a/htdocs/admin/supplier_payment.php
    +++ b/htdocs/admin/supplier_payment.php
    @@ -301,7 +301,6 @@ foreach ($dirmodels as $reldir)
                                 print '</td>';
     
                                 print "</tr>\n";
    -
                             }
                         }
                     }
    @@ -430,7 +429,6 @@ print '</table>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/supplier_proposal.php b/htdocs/admin/supplier_proposal.php
    index 99069447e81..056982c4d08 100644
    --- a/htdocs/admin/supplier_proposal.php
    +++ b/htdocs/admin/supplier_proposal.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004      Sebastien Di Cintio         <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier              <benoit.mortier@opensides.be>
      * Copyright (C) 2004      Eric Seigne                 <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin               <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin               <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      * Copyright (C) 2011-2013 Juanjo Menent               <jmenent@2byte.es>
      * Copyright (C) 2015      Jean-François Ferry		   <jfefe@aternatik.fr>
    @@ -582,6 +582,7 @@ print "</tr>\n";
     print "<tr class=\"oddeven\">\n  <td width=\"140\">".$langs->trans("PathDirectory")."</td>\n  <td>".$conf->supplier_proposal->dir_output."</td>\n</tr>\n";
     print "</table>\n<br>";
     
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/admin/supplierinvoice_extrafields.php b/htdocs/admin/supplierinvoice_extrafields.php
    index 7e913772e2c..ee987ed83a1 100644
    --- a/htdocs/admin/supplierinvoice_extrafields.php
    +++ b/htdocs/admin/supplierinvoice_extrafields.php
    @@ -2,9 +2,9 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
    - * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
    + * Copyright (C) 2013-2018	Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2013		Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -32,17 +32,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/fourn.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     
     // Load translation files required by the page
    -$langs->load("orders");
    +$langs->loadLangs(array("admin", "other", "bills", "orders", "suppliers"));
     
     if (!$user->admin)
     	accessforbidden();
     
    -$langs->load("admin");
    -$langs->load("other");
    -$langs->load("bills");
    -$langs->load("orders");
    -$langs->load("suppliers");
    -
     $extrafields = new ExtraFields($db);
     $form = new Form($db);
     
    @@ -91,7 +85,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -104,7 +98,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -123,6 +117,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/supplierinvoicedet_extrafields.php b/htdocs/admin/supplierinvoicedet_extrafields.php
    index d8156d54779..a9d92a4ecd0 100644
    --- a/htdocs/admin/supplierinvoicedet_extrafields.php
    +++ b/htdocs/admin/supplierinvoicedet_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2013		Juanjo Menent			<jmenent@2byte.es>
    @@ -87,7 +87,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -100,7 +100,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -119,6 +119,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/supplierorder_extrafields.php b/htdocs/admin/supplierorder_extrafields.php
    index 30cf4d983e4..e0b7dabb942 100644
    --- a/htdocs/admin/supplierorder_extrafields.php
    +++ b/htdocs/admin/supplierorder_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      *
    @@ -85,7 +85,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -98,7 +98,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -117,6 +117,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/supplierorderdet_extrafields.php b/htdocs/admin/supplierorderdet_extrafields.php
    index 85106bf84f0..b94c78f67e8 100644
    --- a/htdocs/admin/supplierorderdet_extrafields.php
    +++ b/htdocs/admin/supplierorderdet_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2015		Claudio Aschieri		<c.aschieri@19.coop>
    @@ -86,7 +86,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -99,7 +99,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -118,6 +118,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/syslog.php b/htdocs/admin/syslog.php
    index 45dc91a8b95..14a319b8020 100644
    --- a/htdocs/admin/syslog.php
    +++ b/htdocs/admin/syslog.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2013	   Juanjo Menent        <jmenent@2byte.es>
      *
    @@ -132,9 +132,7 @@ if ($action == 'set')
     	{
     		$db->rollback();
     		setEventMessages($error, $errors, 'errors');
    -
     	}
    -
     }
     
     // Set level
    @@ -302,6 +300,6 @@ if(! empty($conf->loghandlers['mod_syslog_file']) && ! empty($conf->cron->enable
     print '</table>';
     print "</form>\n";
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/about.php b/htdocs/admin/system/about.php
    index 61780d51386..95edc057468 100644
    --- a/htdocs/admin/system/about.php
    +++ b/htdocs/admin/system/about.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2003      Jean-Louis Bergamo    <jlb@j1b.org>
      * Copyright (C) 2004-2013 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
    - * Copyright (C) 2005-2007 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin         <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,10 +28,8 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
    -$langs->load("admin");
    -$langs->load("help");
    -$langs->load("members");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("help","members","other","admin"));
     
     $action=GETPOST('action','alpha');
     
    @@ -196,7 +194,7 @@ if ($showpromotemessage)
         {
             print '<br>';
             print '<br>';
    -        
    +
             if ((empty($tmp[2]) && (strpos($tmp[1], '0') === 0)) || (strpos($tmp[2], '0') === 0))
             {
                 print $langs->trans("TitleExampleForMajorRelease").':<br>';
    @@ -214,7 +212,6 @@ if ($showpromotemessage)
         }
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/browser.php b/htdocs/admin/system/browser.php
    index 4f2a53de88d..4e6aadbe4b4 100644
    --- a/htdocs/admin/system/browser.php
    +++ b/htdocs/admin/system/browser.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2007		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2007-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -26,9 +26,8 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
    -$langs->load("admin");
    -$langs->load("install");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("install","other","admin"));
     
     if (! $user->admin)
     	accessforbidden();
    @@ -66,7 +65,6 @@ print '</table>';
     print '</div>';
     print '<br>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/constall.php b/htdocs/admin/system/constall.php
    index 82e8481c2dd..fef49bd5c12 100644
    --- a/htdocs/admin/system/constall.php
    +++ b/htdocs/admin/system/constall.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,9 +24,8 @@
     
     require '../../main.inc.php';
     
    -$langs->load("admin");
    -$langs->load("user");
    -$langs->load("install");
    +// Load translation files required by the page
    +$langs->loadLangs(array("install","user","admin"));
     
     
     if (!$user->admin)
    @@ -249,7 +248,6 @@ if ($resql)
     
     print '</table>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/database-tables.php b/htdocs/admin/system/database-tables.php
    index 556961cb565..addeb3793c6 100644
    --- a/htdocs/admin/system/database-tables.php
    +++ b/htdocs/admin/system/database-tables.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2005	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -212,5 +212,6 @@ else
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/system/database.php b/htdocs/admin/system/database.php
    index 45ce3c087e6..d5a7bbcdbfd 100644
    --- a/htdocs/admin/system/database.php
    +++ b/htdocs/admin/system/database.php
    @@ -126,6 +126,6 @@ else
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/dbtable.php b/htdocs/admin/system/dbtable.php
    index cef493c95f8..2cf249c0f74 100644
    --- a/htdocs/admin/system/dbtable.php
    +++ b/htdocs/admin/system/dbtable.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2005	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -138,6 +138,6 @@ else
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/dolibarr.php b/htdocs/admin/system/dolibarr.php
    index b2000b65c5b..85c3a8a1d94 100644
    --- a/htdocs/admin/system/dolibarr.php
    +++ b/htdocs/admin/system/dolibarr.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2007		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2007-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,9 +29,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
    -$langs->load("admin");
    -$langs->load("install");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("install","other","admin"));
     
     $action=GETPOST('action','alpha');
     
    @@ -141,8 +140,11 @@ print '<tr class="liste_titre"><td class="titlefield">'.$langs->trans("Session")
     print '<tr class="oddeven"><td>'.$langs->trans("SessionSavePath").'</td><td colspan="2">'.session_save_path().'</td></tr>'."\n";
     print '<tr class="oddeven"><td>'.$langs->trans("SessionName").'</td><td colspan="2">'.session_name().'</td></tr>'."\n";
     print '<tr class="oddeven"><td>'.$langs->trans("SessionId").'</td><td colspan="2">'.session_id().'</td></tr>'."\n";
    -print '<tr class="oddeven"><td>'.$langs->trans("CurrentSessionTimeOut").'</td><td>'.ini_get('session.gc_maxlifetime').' '.$langs->trans("seconds");
    +print '<tr class="oddeven"><td>'.$langs->trans("CurrentSessionTimeOut").' (session.gc_maxlifetime)</td><td>'.ini_get('session.gc_maxlifetime').' '.$langs->trans("seconds");
     print '</td><td align="right">';
    +print '<!-- session.gc_maxlifetime = '.ini_get("session.gc_maxlifetime").' -->'."\n";
    +print '<!-- session.gc_probability = '.ini_get("session.gc_probability").' -->'."\n";
    +print '<!-- session.gc_divisor = '.ini_get("session.gc_divisor").' -->'."\n";
     print $form->textwithpicto('',$langs->trans("SessionExplanation",ini_get("session.gc_probability"),ini_get("session.gc_divisor")));
     print "</td></tr>\n";
     print '<tr class="oddeven"><td>'.$langs->trans("CurrentTheme").'</td><td colspan="2">'.$conf->theme.'</td></tr>'."\n";
    @@ -454,7 +456,6 @@ if ($resql)
     print '</table>';
     print '</div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/filecheck.php b/htdocs/admin/system/filecheck.php
    index 309d20e0abe..895393eec1d 100644
    --- a/htdocs/admin/system/filecheck.php
    +++ b/htdocs/admin/system/filecheck.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2007       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    - * Copyright (C) 2007-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2015       Frederic France         <frederic.france@free.fr>
      * Copyright (C) 2017       Nicolas ZABOURI         <info@inovea-conseil.com>
      *
    @@ -307,7 +307,7 @@ if (! $error && $xml)
             }
             else
             {
    -            $out.='<tr class="oddeven"><td colspan="5" class="opacitymedium">'.$langs->trans("None").'</td></tr>';
    +            $out.='<tr class="oddeven"><td colspan="6" class="opacitymedium">'.$langs->trans("None").'</td></tr>';
             }
             $out.='</table>';
             $out.='</div>';
    @@ -372,11 +372,11 @@ if (! $error && $xml)
             // Show warning
             if (empty($tmpfilelist) && empty($tmpfilelist2) && empty($tmpfilelist3))
             {
    -            setEventMessage($langs->trans("FileIntegrityIsStrictlyConformedWithReference"));
    +            setEventMessages($langs->trans("FileIntegrityIsStrictlyConformedWithReference"), null, 'mesgs');
             }
             else
             {
    -            setEventMessage($langs->trans("FileIntegritySomeFilesWereRemovedOrModified"), 'warnings');
    +            setEventMessages($langs->trans("FileIntegritySomeFilesWereRemovedOrModified"), null, 'warnings');
             }
         }
         else
    @@ -428,7 +428,7 @@ if (! $error && $xml)
         	$outcurrentchecksum = '<span class="'.$resultcode.'">'.$checksumget.'</span>';
         }
     
    -    print_fiche_titre($langs->trans("GlobalChecksum")).'<br>';
    +    print load_fiche_titre($langs->trans("GlobalChecksum")).'<br>';
         print $langs->trans("ExpectedChecksum").' = '. $outexpectedchecksum .'<br>';
         print $langs->trans("CurrentChecksum").' = '. $outcurrentchecksum;
     
    @@ -439,12 +439,8 @@ if (! $error && $xml)
         print $out;
     }
     
    -
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
     
     exit($error);
    -
    diff --git a/htdocs/admin/system/index.php b/htdocs/admin/system/index.php
    index 3d473640618..f0d91d8cf65 100644
    --- a/htdocs/admin/system/index.php
    +++ b/htdocs/admin/system/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -25,9 +25,8 @@
     require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     
    -$langs->load("admin");
    -$langs->load("user");
    -$langs->load("install");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin", "user", "install"));
     
     if (! $user->admin) accessforbidden();
     
    @@ -106,7 +105,7 @@ print '<br>';
     print '<table class="noborder" width="100%">';
     print "<tr class=\"liste_titre\"><td colspan=\"2\">".$langs->trans("Browser")."</td></tr>\n";
     print "<tr $bc[0]><td width=\"280\">".$langs->trans("UserAgent")."</td><td>" .$_SERVER["HTTP_USER_AGENT"]."</td></tr>\n";
    -print "<tr $bc[1]><td width=\"280\">".$langs->trans("Smartphone")."</td><td>".(empty($conf->browser->phone)?$langs->trans("No"):$conf->browser->phone)."</td></tr>\n";
    +print "<tr $bc[1]><td width=\"280\">".$langs->trans("Smartphone")."</td><td>".(($conf->browser->layout != 'phone')?$langs->trans("No"):$langs->trans("Yes"))."</td></tr>\n";
     print '</table>';
     print '<br>';
     
    @@ -114,6 +113,6 @@ print '<br>';
     //print "<br>\n";
     print info_admin($langs->trans("SystemInfoDesc")).'<br>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/modules.php b/htdocs/admin/system/modules.php
    index 4a6967089e2..bcc952b0079 100644
    --- a/htdocs/admin/system/modules.php
    +++ b/htdocs/admin/system/modules.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005-2009	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2007		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -25,9 +25,8 @@
     require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     
    -$langs->load("admin");
    -$langs->load("install");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("install","other","admin"));
     
     if (! $user->admin)
     	accessforbidden();
    @@ -79,17 +78,17 @@ foreach($modulesdir as $dir)
     						{
     							try {
     	    						$objMod = new $modName($db);
    -						
    +
     			    				$modules[$objMod->numero]=$objMod;
     			    				$modules_names[$objMod->numero]=$objMod->name;
     	    						$modules_files[$objMod->numero]=$file;
     	    						$modules_fullpath[$file]=$dir.$file;
     	    						$picto[$objMod->numero]=(isset($objMod->picto) && $objMod->picto)?$objMod->picto:'generic';
    -							} 
    +							}
     							catch(Exception $e)
     							{
     								dol_syslog("Failed to load ".$dir.$file." ".$e->getMessage(), LOG_ERR);
    -							}	
    +							}
     						}
     						else
     						{
    @@ -159,5 +158,6 @@ foreach($rights_ids as $right_id)
     	$old = $right_id;
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/system/os.php b/htdocs/admin/system/os.php
    index 01d48f2444d..b354402b465 100644
    --- a/htdocs/admin/system/os.php
    +++ b/htdocs/admin/system/os.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -49,6 +49,6 @@ $osversion=version_os();
     print "<tr $bc[1]><td width=\"240\">".$langs->trans("Version")."</td><td>".$osversion."</td></tr>\n";
     print '</table>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/system/perf.php b/htdocs/admin/system/perf.php
    index 1e757b72f63..d69723f1299 100644
    --- a/htdocs/admin/system/perf.php
    +++ b/htdocs/admin/system/perf.php
    @@ -26,9 +26,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     
    -$langs->load("admin");
    -$langs->load("install");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("install","other","admin"));
     
     if (! $user->admin)
     	accessforbidden();
    @@ -491,7 +490,6 @@ print '<strong>'.$langs->trans("DatabaseStatistics").'</strong>: ';
     print '<br>';
     */
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/phpinfo.php b/htdocs/admin/system/phpinfo.php
    index 8664a28b28a..d2fb9352042 100644
    --- a/htdocs/admin/system/phpinfo.php
    +++ b/htdocs/admin/system/phpinfo.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2016       Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -116,7 +116,6 @@ foreach($phparray as $key => $value)
     	print '<br>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/system/xcache.php b/htdocs/admin/system/xcache.php
    index 53eaeec085f..b582e61619b 100644
    --- a/htdocs/admin/system/xcache.php
    +++ b/htdocs/admin/system/xcache.php
    @@ -76,6 +76,6 @@ if ($action == 'clear')
     }
     */
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/taxes.php b/htdocs/admin/taxes.php
    index 7c4bf64909f..76e7496cc4e 100644
    --- a/htdocs/admin/taxes.php
    +++ b/htdocs/admin/taxes.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2013 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2015-2018 Alexandre Spangaro   <aspangaro@zendsi.com>
      *
    @@ -273,6 +273,6 @@ if (! empty($conf->accounting->enabled))
     	print '<br><br><span class="opacitymedium">'.$langs->trans("AccountingAccountForSalesTaxAreDefinedInto", $langs->transnoentitiesnoconv("MenuAccountancy"), $langs->transnoentitiesnoconv("Setup")).'</span>';
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/ticket.php b/htdocs/admin/ticket.php
    index 742f966e4cc..5cf72b302c9 100644
    --- a/htdocs/admin/ticket.php
    +++ b/htdocs/admin/ticket.php
    @@ -54,10 +54,13 @@ if ($action == 'updateMask') {
             $error++;
         }
     
    -    if (!$error) {
    -        setEventMessage($langs->trans("SetupSaved"));
    -    } else {
    -        setEventMessage($langs->trans("Error"), 'errors');
    +    if (!$error)
    +    {
    +        setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
    +    }
    +    else
    +    {
    +        setEventMessages($langs->trans("Error"), null, 'errors');
         }
     } elseif ($action == 'setmod') {
         // TODO Verifier si module numerotation choisi peut etre active
    @@ -638,6 +641,6 @@ print '</tr>';
     print '</table><br>';
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/ticket_extrafields.php b/htdocs/admin/ticket_extrafields.php
    index 0687a33c52b..6fa70808ec8 100644
    --- a/htdocs/admin/ticket_extrafields.php
    +++ b/htdocs/admin/ticket_extrafields.php
    @@ -16,9 +16,9 @@
      */
     
     /**
    - *      \file       ticket/admin/ticket_extrafields.php
    - *        \ingroup    ticket
    - *        \brief      Page to setup extra fields of ticket
    + *      \file       admin/ticket_extrafields.php
    + *      \ingroup    ticket
    + *      \brief      Page to setup extra fields of ticket
      */
     
     require '../main.inc.php';
    @@ -109,6 +109,6 @@ if ($action == 'edit' && !empty($attrname)) {
         include DOL_DOCUMENT_ROOT . '/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/tools/dolibarr_export.php b/htdocs/admin/tools/dolibarr_export.php
    index 1c985e23090..3c242e8048f 100644
    --- a/htdocs/admin/tools/dolibarr_export.php
    +++ b/htdocs/admin/tools/dolibarr_export.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2018	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2018	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2018	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -493,6 +493,7 @@ print '</table>';
     
     </div> 	<!-- end div fichehalfleft -->
     
    +
     <div id="backupdatabaseright" class="fichehalfright" style="height:480px; overflow: auto;">
     <div class="ficheaddleft">
     
    @@ -505,23 +506,96 @@ print '<br>';
     
     </div>
     </div>
    -
    +</form>
     </fieldset>
     
     <br>
    +<!-- Dump of a server -->
    +
    +<form method="post" action="export_files.php" name="dump">
    +<input type="hidden" name="token" value="<?php echo $_SESSION['newtoken']; ?>" />
    +<input type="hidden" name="export_type" value="server" />
     
     <fieldset><legend class="legendforfieldsetstep" style="font-size: 3em">2</legend>
    +<div class="fichehalfleft">
    +
     <?php
     print $langs->trans("BackupDesc2",DOL_DATA_ROOT).'<br>';
     print $langs->trans("BackupDescX").'<br><br>';
    +
     ?>
    +
    +<label for="zipfilename_template"> <?php echo $langs->trans("FileNameToGenerate"); ?></label><br>
    +<input type="text" name="zipfilename_template" style="width: 90%"
    +	id="zipfilename_template"
    +	value="<?php
    +$prefix='documents';
    +$ext='zip';
    +
    +$file=$prefix.'_'.$dolibarr_main_db_name.'_'.dol_sanitizeFileName(DOL_VERSION).'_'.strftime("%Y%m%d%H%M").'.'.$ext;
    +echo $file;
    +?>" /> <br>
    +<br>
    +
    +<?php
    +// Show compression choices
    +print '<div class="formelementrow">';
    +print "\n";
    +
    +print $langs->trans("Compression").': &nbsp; ';
    +$filecompression = $compression;
    +array_shift($filecompression);
    +$filecompression['zip']= array('function' => 'dol_compress_dir', 'id' => 'radio_compression_zip',  'label' => $langs->trans("FormatZip"));
    +
    +foreach($filecompression as $key => $val)
    +{
    +    if (! $val['function'] || function_exists($val['function']))	// Enabled export format
    +    {
    +        print '<input type="radio" name="compression" value="'.$key.'" id="'.$val['id'].'" checked>';
    +        print ' <label for="'.$val['id'].'">'.$val['label'].'</label>';
    +    }
    +    else	// Disabled export format
    +    {
    +        print '<input type="radio" name="compression" value="'.$key.'" id="'.$val['id'].'" disabled>';
    +        print ' <label for="'.$val['id'].'">'.$val['label'].'</label>';
    +        print ' ('.$langs->trans("NotAvailable").')';
    +    }
    +    print ' &nbsp; &nbsp; ';
    +}
    +
    +print '</div>';
    +print "\n";
    +
    +?>
    +<br>
    +<div align="center"><input type="submit" class="button"
    +	value="<?php echo $langs->trans("GenerateBackup") ?>" id="buttonGo" /><br>
    +<br>
    +</div>
    +
    +</div>
    +
    +<div id="backupdatabaseright" class="fichehalfright" style="height:480px; overflow: auto;">
    +<div class="ficheaddleft">
    +
    +<?php
    +$filearray=dol_dir_list($conf->admin->dir_output.'/documents','files',0,'','',$sortfield,(strtolower($sortorder)=='asc'?SORT_ASC:SORT_DESC),1);
    +$result=$formfile->list_of_documents($filearray,null,'systemtools','',1,'documents/',1,0,$langs->trans("NoBackupFileAvailable"),0,$langs->trans("PreviousDumpFiles"));
    +print '<br>';
    +?>
    +
    +
    +</div>
    +</div>
    +
     </fieldset>
    -
    -
    -
     </form>
    +
    +
    +
    +
     <?php
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/tools/dolibarr_import.php b/htdocs/admin/tools/dolibarr_import.php
    index f390c192159..90220f1bb23 100644
    --- a/htdocs/admin/tools/dolibarr_import.php
    +++ b/htdocs/admin/tools/dolibarr_import.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2012	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,8 +24,8 @@
     
     require '../../main.inc.php';
     
    -$langs->load("admin");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("other","admin"));
     
     if (! $user->admin)
     	accessforbidden();
    @@ -212,6 +212,6 @@ else if (in_array($type, array('pgsql')))
     </fieldset>
     
     <?php
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/tools/eaccelerator.php b/htdocs/admin/tools/eaccelerator.php
    index d3253c02514..c6209cd7c34 100644
    --- a/htdocs/admin/tools/eaccelerator.php
    +++ b/htdocs/admin/tools/eaccelerator.php
    @@ -168,7 +168,6 @@ function create_script_table($list)
             default:
                 $sortby = "file";
                 ($order == "asc" ? uasort($list, 'compare') : uasort($list, 'revcompare'));
    -
         }
     
         foreach($list as $script) {
    @@ -181,7 +180,6 @@ function create_script_table($list)
             print '</tr>';
         }
         print '</table>';
    -
     }
     
     /**
    @@ -335,7 +333,6 @@ if (function_exists('eaccelerator_get')) {
     
     print "<br><br>";
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/tools/export_files.php b/htdocs/admin/tools/export_files.php
    new file mode 100644
    index 00000000000..809cea3b271
    --- /dev/null
    +++ b/htdocs/admin/tools/export_files.php
    @@ -0,0 +1,166 @@
    +<?php
    +/* Copyright (C) 2006-2014  Laurent Destailleur <eldy@users.sourceforge.net>
    + * Copyright (C) 2011       Juanjo Menent       <jmenent@2byte.es>
    + * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    + *
    +* This program is free software; you can redistribute it and/or modify
    +* it under the terms of the GNU General Public License as published by
    +* the Free Software Foundation; either version 3 of the License, or
    +* (at your option) any later version.
    +*
    +* This program is distributed in the hope that it will be useful,
    +* but WITHOUT ANY WARRANTY; without even the implied warranty of
    +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +* GNU General Public License for more details.
    +*
    +* You should have received a copy of the GNU General Public License
    +* along with this program. If not, see <http://www.gnu.org/licenses/>.
    +*/
    +
    +/**
    + *		\file 		htdocs/admin/tools/export.php
    + *		\brief      Page to export a database into a dump file
    + */
    +
    +require '../../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/utils.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
    +
    +$langs->load("admin");
    +
    +$action=GETPOST('action','alpha');
    +$what=GETPOST('what','alpha');
    +$export_type=GETPOST('export_type','alpha');
    +$file=GETPOST('zipfilename_template','alpha');
    +$compression = GETPOST('compression');
    +
    +$sortfield = GETPOST('sortfield','alpha');
    +$sortorder = GETPOST('sortorder','alpha');
    +$page = GETPOST("page",'int');
    +if (! $sortorder) $sortorder="DESC";
    +if (! $sortfield) $sortfield="date";
    +if ($page < 0) { $page = 0; }
    +elseif (empty($page)) $page = 0;
    +$limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
    +$offset = $limit * $page;
    +
    +if (! $user->admin) accessforbidden();
    +
    +$errormsg='';
    +
    +
    +/*
    + * Actions
    + */
    +
    +if ($action == 'delete')
    +{
    +	$file=$conf->admin->dir_output.'/'.GETPOST('urlfile');
    +	$ret=dol_delete_file($file, 1);
    +	if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
    +	else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
    +	$action='';
    +}
    +
    +
    +/*
    + * View
    + */
    +
    +// Increase limit of time. Works only if we are not in safe mode
    +$ExecTimeLimit=600;
    +if (!empty($ExecTimeLimit))
    +{
    +    $err=error_reporting();
    +    error_reporting(0);     // Disable all errors
    +    //error_reporting(E_ALL);
    +    @set_time_limit($ExecTimeLimit);   // Need more than 240 on Windows 7/64
    +    error_reporting($err);
    +}
    +$MemoryLimit=0;
    +if (!empty($MemoryLimit))
    +{
    +    @ini_set('memory_limit', $MemoryLimit);
    +}
    +
    +$form=new Form($db);
    +$formfile = new FormFile($db);
    +
    +//$help_url='EN:Backups|FR:Sauvegardes|ES:Copias_de_seguridad';
    +//llxHeader('','',$help_url);
    +
    +//print load_fiche_titre($langs->trans("Backup"),'','title_setup');
    +
    +
    +// Start with empty buffer
    +$dump_buffer = '';
    +$dump_buffer_len = 0;
    +
    +// We will send fake headers to avoid browser timeout when buffering
    +$time_start = time();
    +
    +
    +$outputdir  = $conf->admin->dir_output.'/documents';
    +$result=dol_mkdir($outputdir);
    +
    +$utils = new Utils($db);
    +
    +if ($compression == 'zip')
    +{
    +    $ret = dol_compress_dir(DOL_DATA_ROOT, $outputdir."/".$file, $compression);
    +    if ($ret < 0)
    +    {
    +        $errormsg = $langs->trans("ErrorFailedToWriteInDir",$outputfile);
    +    }
    +}
    +elseif (in_array($compression, array('gz', 'bz')))
    +{
    +    $file = substr($file, 0, strrpos($file, '.'));
    +    $file .= '.tar';
    +    $cmd = 'tar -cf '.$outputdir."/".$file." --exclude=documents/admin/documents -C ".DOL_DATA_ROOT." ".DOL_DATA_ROOT."/../documents/";
    +    exec($cmd, $out, $retval);
    +    //var_dump($cmd, DOL_DATA_ROOT);exit;
    +    
    +    if ($retval != 0)
    +    {
    +        $langs->load("errors");
    +        dol_syslog("Documents tar retval after exec=".$retval, LOG_ERR);
    +        $errormsg = 'Error tar generation return '.$retval;
    +    }
    +    else
    +    {
    +        if ($compression == 'gz')
    +        {
    +            $cmd = "gzip " . $outputdir."/".$file;
    +        }
    +        if ($compression == 'bz')
    +        {
    +            $cmd = "bzip2 " . $outputdir."/".$file;
    +        }
    +        
    +        exec($cmd, $out, $retval);
    +        if ($retval != 0)
    +        {
    +            $errormsg = 'Error '.$compression.' generation return '.$retval;
    +            unlink($outputdir."/".$file);
    +        }
    +    }
    +}
    +
    +if ($errormsg)
    +{
    +	setEventMessages($langs->trans("Error")." : ".$errormsg, null, 'errors');
    +}
    +
    +print '<br>';
    +
    +
    +// Redirect t backup page
    +header("Location: dolibarr_export.php");
    +
    +$time_end = time();
    +
    +$db->close();
    +
    diff --git a/htdocs/admin/tools/index.php b/htdocs/admin/tools/index.php
    index 98a490550ca..e1e1fc046c5 100644
    --- a/htdocs/admin/tools/index.php
    +++ b/htdocs/admin/tools/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2004	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2006	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,8 +24,8 @@
     
     require '../../main.inc.php';
     
    -$langs->load("admin");
    -$langs->load("companies");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","admin"));
     
     if (! $user->admin)
     	accessforbidden();
    @@ -56,6 +56,6 @@ print '<br><br>';
     //print '<div class="center"><div class="logo_setup"></div></div>';
     print '<center><div class="logo_setup"></div></center>';				// For a reason I don't know, the div class="center does not works, we must keep the <center>
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/tools/listevents.php b/htdocs/admin/tools/listevents.php
    index 48d3ef57fd5..eedb22f0aa8 100644
    --- a/htdocs/admin/tools/listevents.php
    +++ b/htdocs/admin/tools/listevents.php
    @@ -1,7 +1,8 @@
     <?php
     /* Copyright (C) 2004-2017  Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2015       Bahfir Abbes		<bafbes@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -40,10 +41,8 @@ if ($user->societe_id > 0)
     	$socid = $user->societe_id;
     }
     
    -$langs->load("admin");
    -$langs->load("companies");
    -$langs->load("users");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","admin","users","other"));
     
     // Load variable for pagination
     $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
    @@ -237,7 +236,7 @@ if ($result)
     	// Lignes des champs de filtres
     	print '<tr class="liste_titre">';
     
    -	print '<td class="liste_titre" width="15%">'.$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).$form->select_date($date_end,'date_end',0,0,0,'',1,0,1).'</td>';
    +	print '<td class="liste_titre" width="15%">'.$form->selectDate($date_start,'date_start',0,0,0,'',1,0).$form->selectDate($date_end,'date_end',0,0,0,'',1,0).'</td>';
     
     	print '<td align="left" class="liste_titre">';
     	print '<input class="flat" type="text" size="10" name="search_code" value="'.$search_code.'">';
    @@ -339,6 +338,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/tools/listsessions.php b/htdocs/admin/tools/listsessions.php
    index 0e9e315f2ac..7cbb82fbe6e 100644
    --- a/htdocs/admin/tools/listsessions.php
    +++ b/htdocs/admin/tools/listsessions.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -25,7 +25,8 @@
     require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     
    -$langs->load("install");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","install","users","other"));
     
     if (! $user->admin)
     	accessforbidden();
    @@ -40,10 +41,6 @@ if ($user->societe_id > 0)
       $socid = $user->societe_id;
     }
     
    -$langs->load("companies");
    -$langs->load("users");
    -$langs->load("other");
    -
     $sortfield = GETPOST("sortfield",'alpha');
     $sortorder = GETPOST("sortorder",'alpha');
     $page = GETPOST("page",'int');
    @@ -173,7 +170,6 @@ if ($savehandler == 'files')
     		print '<tr '.$bc[false].'><td colspan="6">'.$langs->trans("NoSessionFound",$savepath,$openbasedir).'</td></tr>';
     	}
     	print "</table>";
    -
     }
     else
     {
    @@ -208,5 +204,6 @@ print '</div>';
     
     print '<br>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/tools/purge.php b/htdocs/admin/tools/purge.php
    index f415ed1692c..48968ff1d27 100644
    --- a/htdocs/admin/tools/purge.php
    +++ b/htdocs/admin/tools/purge.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2017	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2012	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -119,7 +119,6 @@ if (preg_match('/^confirm/i',$choice))
     	print $form->formconfirm($_SERVER["PHP_SELF"].'?choice=allfiles', $langs->trans('Purge'), $langs->trans('ConfirmPurge').img_warning().' ', 'purge', $formquestion, 'no', 2);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/tools/update.php b/htdocs/admin/tools/update.php
    index d0802d6b473..a3c6a73e711 100644
    --- a/htdocs/admin/tools/update.php
    +++ b/htdocs/admin/tools/update.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -27,8 +27,8 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/geturl.lib.php';
     
    -$langs->load("admin");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin","other"));
     
     $action=GETPOST('action','alpha');
     
    @@ -76,7 +76,7 @@ print $langs->trans("CurrentVersion").' : <strong>'.DOL_VERSION.'</strong><br>';
     if (function_exists('curl_init'))
     {
         $conf->global->MAIN_USE_RESPONSE_TIMEOUT = 10;
    -    
    +
         if ($action == 'getlastversion')
         {
             if ($sfurl)
    @@ -95,7 +95,7 @@ if (function_exists('curl_init'))
                     }
                     $i++;
                 }
    -            
    +
                 // Show version
             	print $langs->trans("LastStableVersion").' : <b>'. (($version != '0.0')?$version:$langs->trans("Unknown")) .'</b><br>';
             }
    @@ -142,7 +142,6 @@ print '<hr>';
     
     print $langs->trans("GoModuleSetupArea", DOL_URL_ROOT.'/admin/modules.php?mode=deploy', $langs->transnoentities("Home").' - '.$langs->transnoentities("Setup").' - '.$langs->transnoentities("Modules"));
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/translation.php b/htdocs/admin/translation.php
    index cc21a8ff717..6b893a4a78b 100644
    --- a/htdocs/admin/translation.php
    +++ b/htdocs/admin/translation.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2016	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2017	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2017       Frédéric France     <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -384,7 +384,6 @@ if ($mode == 'overwrite')
     
         print '</table>';
         print '</div>';
    -
     }
     
     if ($mode == 'searchkey')
    @@ -584,6 +583,6 @@ if (! empty($langcode))
     	dol_set_focus('#transvalue');
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/triggers.php b/htdocs/admin/triggers.php
    index 1a1893e2eb0..cd2f33b4cb0 100644
    --- a/htdocs/admin/triggers.php
    +++ b/htdocs/admin/triggers.php
    @@ -84,6 +84,6 @@ foreach ($triggers as $trigger)
     print '</table>';
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/admin/user.php b/htdocs/admin/user.php
    index f888c8410bb..dc0edc6302b 100644
    --- a/htdocs/admin/user.php
    +++ b/htdocs/admin/user.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2009	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2011	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2015		Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -337,5 +337,6 @@ print "<br>";
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/usergroup.php b/htdocs/admin/usergroup.php
    index 28f1ad6af2f..60c872abed8 100644
    --- a/htdocs/admin/usergroup.php
    +++ b/htdocs/admin/usergroup.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2009	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2011	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2015		Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -282,5 +282,6 @@ print "<br>";
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/admin/website.php b/htdocs/admin/website.php
    index 80144f93c1f..e36b8d59df3 100644
    --- a/htdocs/admin/website.php
    +++ b/htdocs/admin/website.php
    @@ -167,7 +167,6 @@ if (GETPOST('actionadd','alpha') || GETPOST('actionmodify','alpha'))
                 {
                     $obj = $db->fetch_object($result);
                     $newid=($obj->newid + 1);
    -
                 } else {
                     dol_print_error($db);
                 }
    @@ -322,10 +321,16 @@ if ($action == 'confirm_delete' && $confirm == 'yes')       // delete
     
         if ($website->id > 0)
         {
    -	    $sql = "DELETE from ".MAIN_DB_PREFIX."website_page WHERE fk_website ='".$rowid."'";
    -	    $result = $db->query($sql);
    +    	$sql = "DELETE from ".MAIN_DB_PREFIX."website_account WHERE fk_website ='".$rowid."'";
    +    	$result = $db->query($sql);
     
    -	    $sql = "DELETE from ".MAIN_DB_PREFIX."website WHERE rowid ='".$rowid."'";
    +    	$sql = "DELETE from ".MAIN_DB_PREFIX."website_page WHERE fk_website ='".$rowid."'";
    +    	$result = $db->query($sql);
    +
    +    	$sql = "DELETE from ".MAIN_DB_PREFIX."website_extrafields WHERE fk_object ='".$rowid."'";
    +    	$result = $db->query($sql);
    +
    +    	$sql = "DELETE from ".MAIN_DB_PREFIX."website WHERE rowid ='".$rowid."'";
     	    $result = $db->query($sql);
     	    if (! $result)
     	    {
    @@ -640,9 +645,7 @@ if ($id)
     
     dol_fiche_end();
     
    -//print '<br>';
    -
    -
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/admin/website_options.php b/htdocs/admin/website_options.php
    index c688da0e550..9d724b86390 100644
    --- a/htdocs/admin/website_options.php
    +++ b/htdocs/admin/website_options.php
    @@ -143,9 +143,8 @@ else
     
     
     dol_fiche_end();
    -//print '<br>';
    -
     
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/admin/workflow.php b/htdocs/admin/workflow.php
    index b5bdec73f3e..26b66136d76 100644
    --- a/htdocs/admin/workflow.php
    +++ b/htdocs/admin/workflow.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
      * Copyright (C) 2005-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -187,7 +187,6 @@ if ($nbqualified == 0)
     }
     print '</table>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/api/admin/index.php b/htdocs/api/admin/index.php
    index 4017f3c93ac..23c4ea7f316 100644
    --- a/htdocs/api/admin/index.php
    +++ b/htdocs/api/admin/index.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004		Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2016	Laurent Destailleur		<eldy@users.sourceforge.org>
      * Copyright (C) 2011		Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2012-2018	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012-2018	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2015		Jean-François Ferry		<jfefe@aternatik.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/api/class/api.class.php b/htdocs/api/class/api.class.php
    index 63f66295556..6d6ef4578cd 100644
    --- a/htdocs/api/class/api.class.php
    +++ b/htdocs/api/class/api.class.php
    @@ -94,7 +94,8 @@ class DolibarrApi
          * @param   object  $object	Object to clean
          * @return	array	Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             // Remove $db object property for object
             unset($object->db);
    @@ -218,9 +219,11 @@ class DolibarrApi
     	 * @param string	$feature2		Feature to check, second level of permission (optional). Can be or check with 'level1|level2'.
     	 * @param string	$dbt_keyfield   Field name for socid foreign key if not fk_soc. Not used if objectid is null (optional)
     	 * @param string	$dbt_select     Field name for select if not rowid. Not used if objectid is null (optional)
    +     * @return bool
     	 * @throws RestException
     	 */
    -	static function _checkAccessToResource($resource, $resource_id=0, $dbtablename='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid') {
    +    static function _checkAccessToResource($resource, $resource_id=0, $dbtablename='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid')
    +    {
     
     		// Features/modules to check
     		$featuresarray = array($resource);
    @@ -251,7 +254,7 @@ class DolibarrApi
     	    //$tmp=preg_replace_all('/'.$regexstring.'/', '', $sqlfilters);
     	    $tmp=$sqlfilters;
     	    $ok=0;
    -	    $i=0; $nb=count($tmp);
    +	    $i=0; $nb=strlen($tmp);
     	    $counter=0;
     	    while ($i < $nb)
     	    {
    @@ -268,6 +271,7 @@ class DolibarrApi
     	    return true;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Function to forge a SQL criteria
     	 *
    @@ -276,6 +280,7 @@ class DolibarrApi
     	 */
     	static function _forge_criteria_callback($matches)
     	{
    +        // phpcs:enable
     	    global $db;
     
     	    //dol_syslog("Convert matches ".$matches[1]);
    diff --git a/htdocs/api/class/api_access.class.php b/htdocs/api/class/api_access.class.php
    index d067d6e2ad6..e453bd331c2 100644
    --- a/htdocs/api/class/api_access.class.php
    +++ b/htdocs/api/class/api_access.class.php
    @@ -59,8 +59,7 @@ class DolibarrApiAccess implements iAuthenticate
     	 */
     	public static $user = '';
     
    -    // @codingStandardsIgnoreStart
    -
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName
     	/**
     	 * Check access
     	 *
    @@ -69,6 +68,7 @@ class DolibarrApiAccess implements iAuthenticate
     	 */
     	public function __isAllowed()
     	{
    +        // phpcs:enable
     		global $conf, $db;
     
     		$login = '';
    @@ -166,6 +166,7 @@ class DolibarrApiAccess implements iAuthenticate
     	    return in_array(static::$role, (array) $requirefortest) || static::$role == 'admin';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName
     	/**
     	 * @return string string to be used with WWW-Authenticate header
     	 * @example Basic
    @@ -174,9 +175,9 @@ class DolibarrApiAccess implements iAuthenticate
     	 */
     	public function __getWWWAuthenticateString()
         {
    +        // phpcs:enable
             return '';
         }
    -    // @codingStandardsIgnoreEnd
     
     	/**
     	 * Verify access
    @@ -196,6 +197,5 @@ class DolibarrApiAccess implements iAuthenticate
             return $requires
                 ? static::$role == 'admin' || in_array(static::$role, (array) $requires)
                 : true;
    -
         }
     }
    diff --git a/htdocs/api/class/api_documents.class.php b/htdocs/api/class/api_documents.class.php
    index 07f124741fe..8db471855d6 100644
    --- a/htdocs/api/class/api_documents.class.php
    +++ b/htdocs/api/class/api_documents.class.php
    @@ -103,7 +103,7 @@ class Documents extends DolibarrApi
     		}
     
     		$file_content=file_get_contents($original_file_osencoded);
    -		return array('filename'=>$filename, 'content'=>base64_encode($file_content), 'encoding'=>'MIME base64 (base64_encode php function, http://php.net/manual/en/function.base64-encode.php)' );
    +		return array('filename'=>$filename, 'content-type' => dol_mimetype($filename), 'filesize'=>filesize($original_file), 'content'=>base64_encode($file_content), 'encoding'=>'base64' );
     	}
     
     
    @@ -224,10 +224,9 @@ class Documents extends DolibarrApi
     		}
     
     		$file_content=file_get_contents($original_file_osencoded);
    -		return array('filename'=>$filename, 'content'=>base64_encode($file_content), 'langcode'=>$outputlangs->defaultlang, 'template'=>$templateused, 'encoding'=>'MIME base64 (base64_encode php function, http://php.net/manual/en/function.base64-encode.php)' );
    +		return array('filename'=>$filename, 'content-type' => dol_mimetype($filename), 'filesize'=>filesize($original_file), 'content'=>base64_encode($file_content), 'langcode'=>$outputlangs->defaultlang, 'template'=>$templateused, 'encoding'=>'base64' );
     	}
     
    -
     	/**
     	 * Return the list of documents of a dedicated element (from its ID or Ref)
     	 *
    @@ -356,6 +355,22 @@ class Documents extends DolibarrApi
     
     			$upload_dir = $conf->facture->dir_output . "/" . get_exdir(0, 0, 0, 1, $object, 'invoice');
     		}
    +		else if ($modulepart == 'agenda' || $modulepart == 'action' || $modulepart == 'event')
    +		{
    +			require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
    +
    +			if (!DolibarrApiAccess::$user->rights->agenda->myactions->read && !DolibarrApiAccess::$user->rights->agenda->allactions->read) {
    +				throw new RestException(401);
    +			}
    +
    +			$object = new ActionComm($this->db);
    +			$result=$object->fetch($id, $ref);
    +			if ( ! $result ) {
    +				throw new RestException(404, 'Event not found');
    +			}
    +
    +			$upload_dir = $conf->agenda->dir_output.'/'.dol_sanitizeFileName($object->ref);
    +		}
     		else
     		{
     			throw new RestException(500, 'Modulepart '.$modulepart.' not implemented yet.');
    diff --git a/htdocs/api/class/api_login.class.php b/htdocs/api/class/api_login.class.php
    index 56808819b3f..86d1cfff87c 100644
    --- a/htdocs/api/class/api_login.class.php
    +++ b/htdocs/api/class/api_login.class.php
    @@ -26,7 +26,11 @@ require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
     class Login
     {
     
    -	function __construct() {
    +    /**
    +     * Constructor of the class
    +     */
    +    function __construct()
    +    {
     		global $db;
     		$this->db = $db;
     	}
    @@ -51,7 +55,8 @@ class Login
     	 * @url GET /
     	 * @url POST /
     	 */
    -	public function index($login, $password, $entity='', $reset=0) {
    +    public function index($login, $password, $entity='', $reset=0)
    +    {
     
     	    global $conf, $dolibarr_main_authentication, $dolibarr_auto_user;
     
    diff --git a/htdocs/api/class/api_setup.class.php b/htdocs/api/class/api_setup.class.php
    index ef2b4c8bb6d..d3f1afa62a3 100644
    --- a/htdocs/api/class/api_setup.class.php
    +++ b/htdocs/api/class/api_setup.class.php
    @@ -1,8 +1,9 @@
     <?php
     /* Copyright (C) 2016   Xebax Christy           <xebax@wanadoo.fr>
      * Copyright (C) 2016	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2017	Regis Houssin	<regis.houssin@capnetworks.com>
    - * Copyright (C) 2017	Neil Orley	<neil.orley@oeris.fr>
    + * Copyright (C) 2017	Regis Houssin	        <regis.houssin@inodbox.com>
    + * Copyright (C) 2017	Neil Orley	            <neil.orley@oeris.fr>
    + * Copyright (C) 2018   Frédéric France         <frederic.france@netlogic.fr>
      *
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -121,7 +122,7 @@ class Setup extends DolibarrApi
          * @param string    $filter     To filter the countries by name
          * @param string    $lang       Code of the language the label of the countries must be translated to
          * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)"
    -     * @return List of countries
    +     * @return array                List of countries
          *
          * @url     GET dictionary/countries
          *
    @@ -188,6 +189,7 @@ class Setup extends DolibarrApi
          * @param int       $id        ID of country
          * @param string    $lang      Code of the language the name of the
          *                             country must be translated to
    +     * @return array 			   Array of cleaned object properties
          *
          * @url     GET dictionary/countries/{id}
          *
    @@ -293,6 +295,7 @@ class Setup extends DolibarrApi
          * @param Ccountry $country   Country
          * @param string   $lang      Code of the language the name of the
          *                            country must be translated to
    +     * @return void
          */
         private function translateLabel($country, $lang)
         {
    @@ -377,6 +380,66 @@ class Setup extends DolibarrApi
             return $list;
         }
     
    +    /**
    +     * Get the list of civility.
    +     *
    +     * @param string    $sortfield  Sort field
    +     * @param string    $sortorder  Sort order
    +     * @param int       $limit      Number of items per page
    +     * @param int       $page       Page number (starting from zero)
    +     * @param string    $module     To filter on module events
    +     * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)"
    +     * @return List of events types
    +     *
    +     * @url     GET dictionary/civility
    +     *
    +     * @throws RestException
    +     */
    +    function getListOfCivility($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $module = '', $sqlfilters = '')
    +    {
    +        $list = array();
    +
    +        $sql = "SELECT rowid, code, label, module";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."c_civility as t";
    +        $sql.= " WHERE t.active = 1";
    +        if ($module)    $sql.=" AND t.module LIKE '%" . $this->db->escape($module) . "%'";
    +        // Add sql filters
    +        if ($sqlfilters)
    +        {
    +            if (! DolibarrApi::_checkFilters($sqlfilters))
    +            {
    +                throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
    +            }
    +	        $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
    +            $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
    +        }
    +
    +
    +        $sql.= $this->db->order($sortfield, $sortorder);
    +
    +        if ($limit) {
    +            if ($page < 0) {
    +                $page = 0;
    +            }
    +            $offset = $limit * $page;
    +
    +            $sql .= $this->db->plimit($limit, $offset);
    +        }
    +
    +        $result = $this->db->query($sql);
    +
    +        if ($result) {
    +            $num = $this->db->num_rows($result);
    +            $min = min($num, ($limit <= 0 ? $num : $limit));
    +            for ($i = 0; $i < $min; $i++) {
    +                $list[] = $this->db->fetch_object($result);
    +            }
    +        } else {
    +            throw new RestException(503, 'Error when retrieving list of civility : '.$this->db->lasterror());
    +        }
    +
    +        return $list;
    +    }
     
         /**
          * Get the list of extra fields.
    @@ -579,6 +642,185 @@ class Setup extends DolibarrApi
             return $list;
         }
     
    +     /**
    +     * Get the list of tickets categories.
    +     *
    +     * @param string    $sortfield  Sort field
    +     * @param string    $sortorder  Sort order
    +     * @param int       $limit      Number of items per page
    +     * @param int       $page       Page number (starting from zero)
    +     * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)"
    +     * @return List of events types
    +     *
    +     * @url     GET dictionary/ticket_categories
    +     *
    +     * @throws RestException
    +     */
    +    function getTicketsCategories($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    +    {
    +    	$list = array();
    +
    +    	$sql = "SELECT rowid, code, pos,  label, use_default, description";
    +    	$sql.= " FROM ".MAIN_DB_PREFIX."c_ticket_category as t";
    +    	$sql.= " WHERE t.active = 1";
    +    	// Add sql filters
    +    	if ($sqlfilters)
    +    	{
    +    		if (! DolibarrApi::_checkFilters($sqlfilters))
    +    		{
    +    			throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
    +    		}
    +    		$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
    +    		$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
    +    	}
    +
    +
    +    	$sql.= $this->db->order($sortfield, $sortorder);
    +
    +    	if ($limit) {
    +    		if ($page < 0) {
    +    			$page = 0;
    +    		}
    +    		$offset = $limit * $page;
    +
    +    		$sql .= $this->db->plimit($limit, $offset);
    +    	}
    +
    +    	$result = $this->db->query($sql);
    +
    +    	if ($result) {
    +    		$num = $this->db->num_rows($result);
    +    		$min = min($num, ($limit <= 0 ? $num : $limit));
    +    		for ($i = 0; $i < $min; $i++) {
    +    			$list[] = $this->db->fetch_object($result);
    +    		}
    +    	} else {
    +    		throw new RestException(503, 'Error when retrieving list of ticket categories : '.$this->db->lasterror());
    +    	}
    +
    +    	return $list;
    +    }
    +
    +    /**
    +     * Get the list of tickets severity.
    +     *
    +     * @param string    $sortfield  Sort field
    +     * @param string    $sortorder  Sort order
    +     * @param int       $limit      Number of items per page
    +     * @param int       $page       Page number (starting from zero)
    +     * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)"
    +     * @return List of events types
    +     *
    +     * @url     GET dictionary/ticket_severities
    +     *
    +     * @throws RestException
    +     */
    +    function getTicketsSeverities($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    +    {
    +    	$list = array();
    +
    +    	$sql = "SELECT rowid, code, pos,  label, use_default, color, description";
    +    	$sql.= " FROM ".MAIN_DB_PREFIX."c_ticket_severity as t";
    +    	$sql.= " WHERE t.active = 1";
    +    	// Add sql filters
    +    	if ($sqlfilters)
    +    	{
    +    		if (! DolibarrApi::_checkFilters($sqlfilters))
    +    		{
    +    			throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
    +    		}
    +    		$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
    +    		$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
    +    	}
    +
    +
    +    	$sql.= $this->db->order($sortfield, $sortorder);
    +
    +    	if ($limit) {
    +    		if ($page < 0) {
    +    			$page = 0;
    +    		}
    +    		$offset = $limit * $page;
    +
    +    		$sql .= $this->db->plimit($limit, $offset);
    +    	}
    +
    +    	$result = $this->db->query($sql);
    +
    +    	if ($result) {
    +    		$num = $this->db->num_rows($result);
    +    		$min = min($num, ($limit <= 0 ? $num : $limit));
    +    		for ($i = 0; $i < $min; $i++) {
    +    			$list[] = $this->db->fetch_object($result);
    +    		}
    +    	} else {
    +    		throw new RestException(503, 'Error when retrieving list of ticket severities : '.$this->db->lasterror());
    +    	}
    +
    +    	return $list;
    +    }
    +
    +    /**
    +     * Get the list of tickets types.
    +     *
    +     * @param string    $sortfield  Sort field
    +     * @param string    $sortorder  Sort order
    +     * @param int       $limit      Number of items per page
    +     * @param int       $page       Page number (starting from zero)
    +     * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)"
    +     * @return List of events types
    +     *
    +     * @url     GET dictionary/ticket_types
    +     *
    +     * @throws RestException
    +     */
    +    function getTicketsTypes($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    +    {
    +    	$list = array();
    +
    +    	$sql = "SELECT rowid, code, pos,  label, use_default, description";
    +    	$sql.= " FROM ".MAIN_DB_PREFIX."c_ticket_type as t";
    +    	$sql.= " WHERE t.active = 1";
    +    	if ($type) $sql.=" AND t.type LIKE '%" . $this->db->escape($type) . "%'";
    +    	if ($module)    $sql.=" AND t.module LIKE '%" . $this->db->escape($module) . "%'";
    +    	// Add sql filters
    +    	if ($sqlfilters)
    +    	{
    +    		if (! DolibarrApi::_checkFilters($sqlfilters))
    +    		{
    +    			throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
    +    		}
    +    		$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
    +    		$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
    +    	}
    +
    +
    +    	$sql.= $this->db->order($sortfield, $sortorder);
    +
    +    	if ($limit) {
    +    		if ($page < 0) {
    +    			$page = 0;
    +    		}
    +    		$offset = $limit * $page;
    +
    +    		$sql .= $this->db->plimit($limit, $offset);
    +    	}
    +
    +    	$result = $this->db->query($sql);
    +
    +    	if ($result) {
    +    		$num = $this->db->num_rows($result);
    +    		$min = min($num, ($limit <= 0 ? $num : $limit));
    +    		for ($i = 0; $i < $min; $i++) {
    +    			$list[] = $this->db->fetch_object($result);
    +    		}
    +    	} else {
    +    		throw new RestException(503, 'Error when retrieving list of ticket types : '.$this->db->lasterror());
    +    	}
    +
    +    	return $list;
    +    }
    +
     
         /**
          * Do a test of integrity for files and setup.
    @@ -863,11 +1105,11 @@ class Setup extends DolibarrApi
         			// Show warning
         			if (empty($tmpfilelist) && empty($tmpfilelist2) && empty($tmpfilelist3))
         			{
    -    				//setEventMessage($langs->trans("FileIntegrityIsStrictlyConformedWithReference"));
    +    				//setEventMessages($langs->trans("FileIntegrityIsStrictlyConformedWithReference"), null, 'mesgs');
         			}
         			else
         			{
    -    				//setEventMessage($langs->trans("FileIntegritySomeFilesWereRemovedOrModified"), 'warnings');
    +    				//setEventMessages($langs->trans("FileIntegritySomeFilesWereRemovedOrModified"), null, 'warnings');
         			}
         		}
         		else
    @@ -916,5 +1158,4 @@ class Setup extends DolibarrApi
     
         	return array('resultcode'=>$resultcode, 'resultcomment'=>$resultcomment, 'expectedchecksum'=> $outexpectedchecksum, 'currentchecksum'=> $outcurrentchecksum, 'out'=>$out);
         }
    -
     }
    diff --git a/htdocs/api/class/api_status.class.php b/htdocs/api/class/api_status.class.php
    index ea61731b51a..3ade4ea51b8 100644
    --- a/htdocs/api/class/api_status.class.php
    +++ b/htdocs/api/class/api_status.class.php
    @@ -26,18 +26,21 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/functions.lib.php';
      */
     class Status
     {
    -	/**
    +    /**
          * Get status (Dolibarr version)
    -	 */
    -	function index() {
    -		global $conf;
    +     *
    +     * @return array
    +     */
    +    function index()
    +    {
    +        global $conf;
     
    -		return array(
    -			'success' => array(
    -				'code' => 200,
    -				'dolibarr_version' => DOL_VERSION,
    -				'access_locked' => (empty($conf->global->MAIN_ONLY_LOGIN_ALLOWED)?'0':$conf->global->MAIN_ONLY_LOGIN_ALLOWED)
    -			)
    -		);
    +        return array(
    +            'success' => array(
    +                'code' => 200,
    +                'dolibarr_version' => DOL_VERSION,
    +                'access_locked' => (empty($conf->global->MAIN_ONLY_LOGIN_ALLOWED)?'0':$conf->global->MAIN_ONLY_LOGIN_ALLOWED),
    +            ),
    +        );
         }
     }
    diff --git a/htdocs/api/index.php b/htdocs/api/index.php
    index e66a19c981a..e55a30304a4 100644
    --- a/htdocs/api/index.php
    +++ b/htdocs/api/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2015	Jean-François Ferry		<jfefe@aternatik.fr>
      * Copyright (C) 2016	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2017	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/asset/admin/assets_extrafields.php b/htdocs/asset/admin/assets_extrafields.php
    index 1cdf78df4bf..f220d5cb849 100644
    --- a/htdocs/asset/admin/assets_extrafields.php
    +++ b/htdocs/asset/admin/assets_extrafields.php
    @@ -64,7 +64,7 @@ $linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToM
     print load_fiche_titre($langs->trans("AssetsSetup"),$linkback,'title_setup');
     
     
    -$head = AssetsAdminPrepareHead();
    +$head = asset_admin_prepare_head();
     
     dol_fiche_head($head, 'attributes', $langs->trans("Assets"), -1, 'generic');
     
    @@ -109,6 +109,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/asset/admin/assets_type_extrafields.php b/htdocs/asset/admin/assets_type_extrafields.php
    index d828bffa4de..a791078f37b 100644
    --- a/htdocs/asset/admin/assets_type_extrafields.php
    +++ b/htdocs/asset/admin/assets_type_extrafields.php
    @@ -63,7 +63,7 @@ $linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToM
     print load_fiche_titre($langs->trans("AssetsSetup"),$linkback,'title_setup');
     
     
    -$head = AssetsAdminPrepareHead();
    +$head = asset_admin_prepare_head();
     
     dol_fiche_head($head, 'attributes_type', $langs->trans("Assets"), -1, 'generic');
     
    @@ -107,6 +107,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/asset/admin/setup.php b/htdocs/asset/admin/setup.php
    index c240f350590..57738309abd 100644
    --- a/htdocs/asset/admin/setup.php
    +++ b/htdocs/asset/admin/setup.php
    @@ -58,7 +58,7 @@ $linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToM
     print load_fiche_titre($langs->trans("AssetsSetup"),$linkback,'title_setup');
     
     
    -$head = AssetsAdminPrepareHead();
    +$head = asset_admin_prepare_head();
     
     dol_fiche_head($head, 'settings', $langs->trans("Assets"), -1, 'generic');
     
    @@ -107,9 +107,8 @@ else
     	print '</div>';
     }
     
    -
    -// Page end
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/asset/card.php b/htdocs/asset/card.php
    index 0187dc93939..40b2a9365db 100644
    --- a/htdocs/asset/card.php
    +++ b/htdocs/asset/card.php
    @@ -17,7 +17,7 @@
      */
     
     /**
    - *  \file       card.php
    + *  \file       htdocs/asset/card.php
      *  \ingroup    asset
      *  \brief      Page to create/edit/view asset
      */
    @@ -25,8 +25,8 @@
     require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/asset.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/asset/class/asset.class.php';
    -include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php');
    -include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array("asset"));
    @@ -45,7 +45,7 @@ $diroutputmassaction=$conf->asset->dir_output . '/temp/massgeneration/'.$user->i
     $hookmanager->initHooks(array('assetcard'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('asset');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Initialize array of search criterias
     $search_all=trim(GETPOST("search_all",'alpha'));
    @@ -203,7 +203,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     {
     	$res = $object->fetch_optionals($object->id, $extralabels);
     
    -	$head = AssetsPrepareHead($object);
    +	$head = asset_prepare_head($object);
     	dol_fiche_head($head, 'card', $langs->trans("Asset"), -1, 'generic');
     
     	$formconfirm = '';
    @@ -221,12 +221,11 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('XXX'), $text, 'confirm_xxx', $formquestion, 0, 1, 220);
     	}
     
    -	if (! $formconfirm) {
    -		$parameters = array('lineid' => $lineid);
    -		$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -		if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -		elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -	}
    +	// Call Hook formConfirm
    +	$parameters = array('lineid' => $lineid);
    +	$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +	if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +	elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     	// Print form confirm
     	print $formconfirm;
    diff --git a/htdocs/asset/class/asset.class.php b/htdocs/asset/class/asset.class.php
    index 4ab05ce675c..22e24703bc3 100644
    --- a/htdocs/asset/class/asset.class.php
    +++ b/htdocs/asset/class/asset.class.php
    @@ -35,18 +35,22 @@ class Asset extends CommonObject
     	 * @var string ID to identify managed object
     	 */
     	public $element = 'asset';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'asset';
    +
     	/**
     	 * @var int  Does module support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 */
     	public $ismultientitymanaged = 0;
    +
     	/**
     	 * @var int  Does asset support extrafields ? 0=No, 1=Yes
     	 */
     	public $isextrafieldmanaged = 1;
    +
     	/**
     	 * @var string String with name of icon for asset. Must be the part after the 'object_' into object_asset.png
     	 */
    @@ -91,20 +95,59 @@ class Asset extends CommonObject
     		'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'visible'=>-2, 'enabled'=>1, 'position'=>1000, 'notnull'=>-1,),
     		'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Draft', '1'=>'Active', '-1'=>'Cancel')),
     	);
    +
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
    +
    +	/**
    +	 * @var string Ref
    +	 */
     	public $ref;
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
    -	public $label;
    +
    +    /**
    +     * @var string Asset label
    +     */
    +    public $label;
    +
     	public $amount;
    -	public $fk_soc;
    +
    +	/**
    +	 * @var int Thirdparty ID
    +	 */
    +    public $fk_soc;
    +
    +	/**
    +	 * @var string description
    +	 */
     	public $description;
    +
     	public $note_public;
     	public $note_private;
     	public $date_creation;
     	public $tms;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_modif;
    +
     	public $import_key;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
     
     	// If this object has a subtable with lines
    @@ -329,6 +372,7 @@ class Asset extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return the status
     	 *
    @@ -338,43 +382,38 @@ class Asset extends CommonObject
     	 */
     	static function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
    -		if ($mode == 0)
    -		{
    -			$prefix='';
    -			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    -		}
    -		if ($mode == 1)
    +		if ($mode == 0 || $mode == 1)
     		{
     			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    +			elseif ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
     		}
     	}
     
    @@ -424,7 +463,6 @@ class Asset extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -461,4 +499,4 @@ class Asset extends CommonObject
     
     		return 0;
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/asset/class/asset_type.class.php b/htdocs/asset/class/asset_type.class.php
    index 51ea3a0c799..51d76d75155 100644
    --- a/htdocs/asset/class/asset_type.class.php
    +++ b/htdocs/asset/class/asset_type.class.php
    @@ -29,21 +29,44 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class AssetType extends CommonObject
     {
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element = 'asset_type';
    -	public $element = 'asset_type';
    -	public $picto = 'group';
    -	public $ismultientitymanaged = 1;  // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     
    -	/** @var string Label */
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element = 'asset_type';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'invoice';
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
    +
    +	/**
    +	 * @var string Asset type label
    +	 */
     	public $label;
    +
     	/** @var string Accountancy code asset */
     	public $accountancy_code_asset;
    +
     	/** @var string Accountancy code depreciation asset */
     	public $accountancy_code_depreciation_asset;
    +
     	/** @var string Accountancy code depreciation expense */
     	public $accountancy_code_depreciation_expense;
    +
     	/** @var string 	Public note */
     	public $note;
    +
     	/** @var array Array of asset */
     	public $asset=array();
     
    @@ -84,12 +107,14 @@ class AssetType extends CommonObject
     		$sql.= ", accountancy_code_asset";
     		$sql.= ", accountancy_code_depreciation_asset";
     		$sql.= ", accountancy_code_depreciation_expense";
    +		$sql.= ", note";
     		$sql.= ", entity";
     		$sql.= ") VALUES (";
     		$sql.= "'".$this->db->escape($this->label)."'";
     		$sql.= ", '".$this->db->escape($this->accountancy_code_asset)."'";
     		$sql.= ", '".$this->db->escape($this->accountancy_code_depreciation_asset)."'";
     		$sql.= ", '".$this->db->escape($this->accountancy_code_depreciation_expense)."'";
    +		$sql.= ", '".$this->db->escape($this->note)."'";
     		$sql.= ", ".$conf->entity;
     		$sql.= ")";
     
    @@ -156,7 +181,8 @@ class AssetType extends CommonObject
     		$sql.= "label = '".$this->db->escape($this->label) ."',";
     		$sql.= "accountancy_code_asset = '".$this->db->escape($this->accountancy_code_asset)."',";
     		$sql.= "accountancy_code_depreciation_asset = '".$this->db->escape($this->accountancy_code_depreciation_asset)."',";
    -		$sql.= "accountancy_code_depreciation_expense = '".$this->db->escape($this->accountancy_code_depreciation_expense)."'";
    +		$sql.= "accountancy_code_depreciation_expense = '".$this->db->escape($this->accountancy_code_depreciation_expense)."',";
    +		$sql.= "note = '".$this->db->escape($this->note) ."'";
     		$sql.= " WHERE rowid =".$this->id;
     
     		$result = $this->db->query($sql);
    @@ -274,6 +300,7 @@ class AssetType extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of asset's type
     	 *
    @@ -281,6 +308,7 @@ class AssetType extends CommonObject
     	 */
     	function liste_array()
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$assettypes = array();
    @@ -429,5 +457,4 @@ class AssetType extends CommonObject
     	{
     		return '';
     	}
    -
     }
    diff --git a/htdocs/asset/document.php b/htdocs/asset/document.php
    index 66baaae196c..c1332ed10a2 100644
    --- a/htdocs/asset/document.php
    +++ b/htdocs/asset/document.php
    @@ -17,7 +17,7 @@
      */
     
     /**
    - *  \file       document.php
    + *  \file       htdocs/asset/document.php
      *  \ingroup    asset
      *  \brief      Tab for documents linked to Assets
      */
    @@ -95,12 +95,12 @@ if ($object->id)
     	 * Show tabs
     	 */
     	if (! empty($conf->notification->enabled)) $langs->load("mails");
    -	$head = AssetsPrepareHead($object);
    +	$head = asset_prepare_head($object);
     
     	dol_fiche_head($head, 'document', $langs->trans("Asset"), -1, 'generic');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -148,6 +148,6 @@ else
     	accessforbidden('',0,0);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/asset/info.php b/htdocs/asset/info.php
    index 71460f31a2c..e01316ae685 100644
    --- a/htdocs/asset/info.php
    +++ b/htdocs/asset/info.php
    @@ -16,7 +16,7 @@
      */
     
     /**
    - *  \file       info.php
    + *  \file       htdocs/asset/info.php
      *  \ingroup    asset
      *  \brief      Page to show an asset information
      */
    @@ -55,7 +55,7 @@ $form = new Form($db);
     
     $object->info($id);
     
    -$head = AssetsPrepareHead($object);
    +$head = asset_prepare_head($object);
     
     dol_fiche_head($head, 'info', $langs->trans("Asset"), -1, 'generic');
     
    @@ -79,5 +79,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/asset/list.php b/htdocs/asset/list.php
    index 5dc8b2c6866..431276b67a8 100644
    --- a/htdocs/asset/list.php
    +++ b/htdocs/asset/list.php
    @@ -18,7 +18,7 @@
      */
     
     /**
    - *   	\file       list.php
    + *   	\file       htdocs/asset/list.php
      *		\ingroup    asset
      *		\brief      List page for asset
      */
    @@ -62,7 +62,7 @@ $diroutputmassaction=$conf->asset->dir_output . '/temp/massgeneration/'.$user->i
     $hookmanager->initHooks(array('assetlist'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('asset');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Default sort order (if not yet defined by previous GETPOST)
     if (! $sortfield) $sortfield="t.".key($object->fields);   // Set here default search field. By default 1st field in definition.
    diff --git a/htdocs/asset/note.php b/htdocs/asset/note.php
    index cf0166df96f..f76c6ea028f 100644
    --- a/htdocs/asset/note.php
    +++ b/htdocs/asset/note.php
    @@ -17,7 +17,7 @@
      */
     
     /**
    - *  \file       note.php
    + *  \file       htdocs/asset/note.php
      *  \ingroup    asset
      *  \brief      Card with notes on Asset
      */
    @@ -78,7 +78,7 @@ if ($id > 0 || ! empty($ref))
     {
     	$object->fetch_thirdparty();
     
    -	$head = AssetsPrepareHead($object);
    +	$head = asset_prepare_head($object);
     
     	dol_fiche_head($head, 'note', $langs->trans("Asset"), -1, 'generic');
     
    @@ -144,6 +144,6 @@ if ($id > 0 || ! empty($ref))
     	dol_fiche_end();
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/asset/type.php b/htdocs/asset/type.php
    index f4409ee5417..b8a282430cc 100644
    --- a/htdocs/asset/type.php
    +++ b/htdocs/asset/type.php
    @@ -49,10 +49,13 @@ $offset = $limit * $page ;
     $pageprev = $page - 1;
     $pagenext = $page + 1;
     if (! $sortorder) {  $sortorder="DESC"; }
    -if (! $sortfield) {  $sortfield="d.lastname"; }
    +if (! $sortfield) {  $sortfield="a.label"; }
     
     $label=GETPOST("label","alpha");
    -$comment=GETPOST("comment");
    +$accountancy_code_asset=GETPOST('accountancy_code_asset','string');
    +$accountancy_code_depreciation_asset=GETPOST('accountancy_code_depreciation_asset','string');
    +$accountancy_code_depreciation_expense=GETPOST('accountancy_code_depreciation_expense','string');
    +$comment=GETPOST('comment','string');
     
     // Security check
     $result=restrictedArea($user,'asset',$rowid,'asset_type');
    @@ -259,39 +262,39 @@ if (! $rowid && $action != 'create' && $action != 'edit')
     			print '</td>';
     			print '<td>'.dol_escape_htmltag($objp->label).'</td>';
     
    -			print '<td>';
    +			print '<td class="center">';
     			if (! empty($conf->accounting->enabled))
     			{
     				$accountingaccount = new AccountingAccount($db);
    -				$accountingaccount->fetch('',$object->accountancy_code_asset,1);
    +				$accountingaccount->fetch('',$objp->accountancy_code_asset,1);
     
    -				print $accountingaccount->getNomUrl(0,1,1,'',1);
    +				print $accountingaccount->getNomUrl(0,0,0,'',0);
     			} else {
    -				print $object->accountancy_code_asset;
    +				print $objp->accountancy_code_asset;
     			}
     			print '</td>';
     
    -			print '<td>';
    +			print '<td class="center">';
     			if (! empty($conf->accounting->enabled))
     			{
     				$accountingaccount2 = new AccountingAccount($db);
    -				$accountingaccount2->fetch('',$object->accountancy_code_depreciation_asset,1);
    +				$accountingaccount2->fetch('',$objp->accountancy_code_depreciation_asset,1);
     
    -				print $accountingaccount2->getNomUrl(0,1,1,'',1);
    +				print $accountingaccount2->getNomUrl(0,0,0,'',0);
     			} else {
    -				print $object->accountancy_code_depreciation_asset;
    +				print $objp->accountancy_code_depreciation_asset;
     			}
     			print '</td>';
     
    -			print '<td>';
    +			print '<td class="center">';
     			if (! empty($conf->accounting->enabled))
     			{
     				$accountingaccount3 = new AccountingAccount($db);
    -				$accountingaccount3->fetch('',$object->accountancy_code_depreciation_expense,1);
    +				$accountingaccount3->fetch('',$objp->accountancy_code_depreciation_expense,1);
     
    -				print $accountingaccount3->getNomUrl(0,1,1,'',1);
    +				print $accountingaccount3->getNomUrl(0,0,0,'',0);
     			} else {
    -				print $object->accountancy_code_depreciation_expense;
    +				print $objp->accountancy_code_depreciation_expense;
     			}
     			print '</td>';
     
    @@ -356,7 +359,6 @@ if ($action == 'create')
     		print '<td>';
     		print $formaccounting->select_account($object->accountancy_code_depreciation_expense, 'accountancy_code_depreciation_expense', 1, '', 1, 1);
     		print '</td></tr>';
    -
     	}
     	else // For external software
     	{
    @@ -419,7 +421,7 @@ if ($rowid > 0)
     		 */
     		if ($action == 'delete')
     		{
    -			print $form->formconfirm($_SERVER['PHP_SELF']."?rowid=".$object->id,$langs->trans("DeleteAMemberType"),$langs->trans("ConfirmDeleteMemberType",$object->label),"confirm_delete", '',0,1);
    +			print $form->formconfirm($_SERVER['PHP_SELF']."?rowid=".$object->id,$langs->trans("DeleteAnAssetType"),$langs->trans("ConfirmDeleteAssetType",$object->label),"confirm_delete", '',0,1);
     		}
     
     		$head = asset_type_prepare_head($object);
    @@ -428,14 +430,23 @@ if ($rowid > 0)
     
     		$linkback = '<a href="'.DOL_URL_ROOT.'/asset/type.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
     
    -		dol_banner_tab($object, 'rowid', $linkback);
    +		$morehtmlref='<div class="refidno">';
    +		// Ref asset type
    +		$morehtmlref.=$form->editfieldkey("Label", 'label', $object->label, $object, $user->rights->asset->write, 'string', '', 0, 1);
    +		$morehtmlref.=$form->editfieldval("Label", 'label', $object->label, $object, $user->rights->asset->write, 'string', '', null, null, '', 1);
    +		$morehtmlref.='</div>';
    +
    +		dol_banner_tab($object, 'rowid', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright);
     
     		print '<div class="fichecenter">';
     		print '<div class="underbanner clearboth"></div>';
     
     		print '<table class="border" width="100%">';
     
    -		print '</tr>';
    +		print '<tr>';
    +		print '<td class="nowrap">';
    +		print $langs->trans("AccountancyCodeAsset");
    +		print '</td><td>';
     		if (! empty($conf->accounting->enabled))
     		{
     			$accountingaccount = new AccountingAccount($db);
    @@ -446,8 +457,12 @@ if ($rowid > 0)
     			print $object->accountancy_code_asset;
     		}
     		print '</td>';
    +		print '</tr>';
     
    -		print '<td>';
    +		print '<tr>';
    +		print '<td class="nowrap">';
    +		print $langs->trans("AccountancyCodeDepreciationAsset");
    +		print '</td><td>';
     		if (! empty($conf->accounting->enabled))
     		{
     			$accountingaccount2 = new AccountingAccount($db);
    @@ -458,8 +473,12 @@ if ($rowid > 0)
     			print $object->accountancy_code_depreciation_asset;
     		}
     		print '</td>';
    +		print '</tr>';
     
    -		print '<td>';
    +		print '<tr>';
    +		print '<td class="nowrap">';
    +		print $langs->trans("AccountancyCodeDepreciationExpense");
    +		print '</td><td>';
     		if (! empty($conf->accounting->enabled))
     		{
     			$accountingaccount3 = new AccountingAccount($db);
    @@ -469,6 +488,7 @@ if ($rowid > 0)
     		} else {
     			print $object->accountancy_code_depreciation_expense;
     		}
    +		print '</td>';
     		print '</tr>';
     
     		print '<tr><td class="tdtop">'.$langs->trans("Description").'</td><td>';
    @@ -494,9 +514,6 @@ if ($rowid > 0)
     			print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=edit&amp;rowid='.$object->id.'">'.$langs->trans("Modify").'</a></div>';
     		}
     
    -		// Add
    -		print '<div class="inline-block divButAction"><a class="butAction" href="card.php?action=create&typeid='.$object->id.'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?rowid='.$object->id).'">'.$langs->trans("AddMember").'</a></div>';
    -
     		// Delete
     		if ($user->rights->asset->write)
     		{
    @@ -504,235 +521,6 @@ if ($rowid > 0)
     		}
     
     		print "</div>";
    -
    -
    -		// Show list of assets (nearly same code than in page list.php)
    -		$assettypestatic=new AssetType($db);
    -
    -		$now=dol_now();
    -
    -		$sql = "SELECT a.rowid, d.login, d.firstname, d.lastname, d.societe, ";
    -		$sql.= " d.datefin,";
    -		$sql.= " a.fk_asset_type as type_id,";
    -		$sql.= " t.label as type";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."asset as a, ".MAIN_DB_PREFIX."asset_type as t";
    -		$sql.= " WHERE a.fk_asset_type = t.rowid";
    -		$sql.= " AND a.entity IN (".getEntity('asset').")";
    -		$sql.= " AND t.rowid = ".$object->id;
    -		if ($sall)
    -		{
    -			$sql.=natural_search(array("f.firstname","d.lastname","d.societe","d.email","d.login","d.address","d.town","d.note_public","d.note_private"), $sall);
    -		}
    -		if ($status != '')
    -		{
    -			$sql.= natural_search('d.statut', $status, 2);
    -		}
    -		if ($action == 'search')
    -		{
    -			if (GETPOST('search','alpha'))
    -			{
    -				$sql.= natural_search(array("d.firstname","d.lastname"), GETPOST('search','alpha'));
    -			}
    -		}
    -		if (! empty($search_lastname))
    -		{
    -			$sql.= natural_search(array("d.firstname","d.lastname"), $search_lastname);
    -		}
    -		if (! empty($search_login))
    -		{
    -			$sql.= natural_search("d.login", $search_login);
    -		}
    -		if (! empty($search_email))
    -		{
    -			$sql.= natural_search("d.email", $search_email);
    -		}
    -		if ($filter == 'uptodate')
    -		{
    -			$sql.=" AND datefin >= '".$db->idate($now)."'";
    -		}
    -		if ($filter == 'outofdate')
    -		{
    -			$sql.=" AND datefin < '".$db->idate($now)."'";
    -		}
    -
    -		$sql.= " ".$db->order($sortfield,$sortorder);
    -
    -		// Count total nb of records
    -		$nbtotalofrecords = '';
    -		if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
    -		{
    -			$resql = $db->query($sql);
    -			if ($resql) $nbtotalofrecords = $db->num_rows($result);
    -			else dol_print_error($db);
    -			if (($page * $limit) > $nbtotalofrecords)	// if total resultset is smaller then paging size (filtering), goto and load page 0
    -			{
    -				$page = 0;
    -				$offset = 0;
    -			}
    -		}
    -
    -		$sql.= " ".$db->plimit($conf->liste_limit+1, $offset);
    -
    -		$resql = $db->query($sql);
    -		if ($resql)
    -		{
    -			$num = $db->num_rows($resql);
    -			$i = 0;
    -
    -			$titre=$langs->trans("AssetsList");
    -			if ($status != '')
    -			{
    -				if ($status == '-1,1')								{ $titre=$langs->trans("MembersListQualified"); }
    -				else if ($status == '-1')							{ $titre=$langs->trans("MembersListToValid"); }
    -				else if ($status == '1' && ! $filter)				{ $titre=$langs->trans("MembersListValid"); }
    -				else if ($status == '1' && $filter=='uptodate')		{ $titre=$langs->trans("MembersListUpToDate"); }
    -				else if ($status == '1' && $filter=='outofdate')	{ $titre=$langs->trans("MembersListNotUpToDate"); }
    -				else if ($status == '0')							{ $titre=$langs->trans("MembersListResiliated"); }
    -			}
    -			elseif ($action == 'search')
    -			{
    -				$titre=$langs->trans("MembersListQualified");
    -			}
    -
    -			if ($type > 0)
    -			{
    -				$assettype=new AssetType($db);
    -				$result=$assettype->fetch($type);
    -				$titre.=" (".$assettype->label.")";
    -			}
    -
    -			$param="&rowid=".$object->id;
    -			if (! empty($status))			$param.="&status=".$status;
    -			if (! empty($search_lastname))	$param.="&search_lastname=".$search_lastname;
    -			if (! empty($search_firstname))	$param.="&search_firstname=".$search_firstname;
    -			if (! empty($search_login))		$param.="&search_login=".$search_login;
    -			if (! empty($search_email))		$param.="&search_email=".$search_email;
    -			if (! empty($filter))			$param.="&filter=".$filter;
    -
    -			if ($sall)
    -			{
    -				print $langs->trans("Filter")." (".$langs->trans("Lastname").", ".$langs->trans("Firstname").", ".$langs->trans("EMail").", ".$langs->trans("Address")." ".$langs->trans("or")." ".$langs->trans("Town")."): ".$sall;
    -			}
    -
    -			print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    -			print '<input class="flat" type="hidden" name="rowid" value="'.$object->id.'" size="12"></td>';
    -
    -			print '<br>';
    -			print_barre_liste('',$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,'',$num,$nbtotalofrecords);
    -
    -			$moreforfilter = '';
    -
    -			print '<div class="div-table-responsive">';
    -			print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
    -
    -			// Lignes des champs de filtre
    -			print '<tr class="liste_titre_filter">';
    -
    -			print '<td class="liste_titre" align="left">';
    -			print '<input class="flat" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).'" size="12"></td>';
    -
    -			print '<td class="liste_titre" align="left">';
    -			print '<input class="flat" type="text" name="search_login" value="'.dol_escape_htmltag($search_login).'" size="7"></td>';
    -
    -			print '<td class="liste_titre">&nbsp;</td>';
    -
    -			print '<td class="liste_titre" align="left">';
    -			print '<input class="flat" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).'" size="12"></td>';
    -
    -			print '<td class="liste_titre">&nbsp;</td>';
    -
    -			print '<td align="right" colspan="2" class="liste_titre">';
    -			print '<input type="image" class="liste_titre" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/search.png" name="button_search" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
    -			print '&nbsp; ';
    -			print '<input type="image" class="liste_titre" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/searchclear.png" name="button_removefilter" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
    -			print '</td>';
    -
    -			print "</tr>\n";
    -
    -			print '<tr class="liste_titre">';
    -			print_liste_field_titre( $langs->trans("Name")." / ".$langs->trans("Company"),$_SERVER["PHP_SELF"],"d.lastname",$param,"","",$sortfield,$sortorder);
    -			print_liste_field_titre("Login",$_SERVER["PHP_SELF"],"d.login",$param,"","",$sortfield,$sortorder);
    -			print_liste_field_titre("Nature",$_SERVER["PHP_SELF"],"d.morphy",$param,"","",$sortfield,$sortorder);
    -			print_liste_field_titre("EMail",$_SERVER["PHP_SELF"],"d.email",$param,"","",$sortfield,$sortorder);
    -			print_liste_field_titre("Status",$_SERVER["PHP_SELF"],"d.statut,d.datefin",$param,"","",$sortfield,$sortorder);
    -			print_liste_field_titre("EndSubscription",$_SERVER["PHP_SELF"],"d.datefin",$param,"",'align="center"',$sortfield,$sortorder);
    -			print_liste_field_titre("Action",$_SERVER["PHP_SELF"],"",$param,"",'width="60" align="center"',$sortfield,$sortorder);
    -			print "</tr>\n";
    -
    -			while ($i < $num && $i < $conf->liste_limit)
    -			{
    -				$objp = $db->fetch_object($resql);
    -
    -				$datefin=$db->jdate($objp->datefin);
    -
    -				$adh=new Asset($db);
    -				$adh->lastname=$objp->lastname;
    -				$adh->firstname=$objp->firstname;
    -
    -				// Lastname
    -				print '<tr class="oddeven">';
    -				if ($objp->societe != '')
    -				{
    -					print '<td><a href="card.php?rowid='.$objp->rowid.'">'.img_object($langs->trans("ShowMember"),"user").' '.$adh->getFullName($langs,0,-1,20).' / '.dol_trunc($objp->societe,12).'</a></td>'."\n";
    -				}
    -				else
    -				{
    -					print '<td><a href="card.php?rowid='.$objp->rowid.'">'.img_object($langs->trans("ShowMember"),"user").' '.$adh->getFullName($langs,0,-1,32).'</a></td>'."\n";
    -				}
    -
    -				// Login
    -				print "<td>".$objp->login."</td>\n";
    -
    -				// Type
    -				/*print '<td class="nowrap">';
    -				$assettypestatic->id=$objp->type_id;
    -				$assettypestatic->label=$objp->type;
    -				print $assettypestatic->getNomUrl(1,12);
    -				print '</td>';
    -				*/
    -
    -				// Moral/Physique
    -				print "<td>".$adh->getmorphylib($objp->morphy)."</td>\n";
    -
    -				// EMail
    -				print "<td>".dol_print_email($objp->email,0,0,1)."</td>\n";
    -
    -				// Statut
    -				print '<td class="nowrap">';
    -				print $adh->LibStatut($objp->statut,$objp->subscription,$datefin,2);
    -				print "</td>";
    -
    -				// Actions
    -				print '<td align="center">';
    -				if ($user->rights->asset->creer)
    -				{
    -					print '<a href="card.php?rowid='.$objp->rowid.'&action=edit&backtopage='.urlencode($_SERVER["PHP_SELF"].'?rowid='.$object->id).'">'.img_edit().'</a>';
    -				}
    -				print '&nbsp;';
    -				if ($user->rights->asset->supprimer)
    -				{
    -					print '<a href="card.php?rowid='.$objp->rowid.'&action=resign">'.img_picto($langs->trans("Resiliate"),'disable.png').'</a>';
    -				}
    -				print "</td>";
    -
    -				print "</tr>\n";
    -				$i++;
    -			}
    -
    -			print "</table>\n";
    -			print '</div>';
    -			print '</form>';
    -
    -			if ($num > $conf->liste_limit)
    -			{
    -				print_barre_liste('',$page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,'',$num,$nbtotalofrecords,'');
    -			}
    -		}
    -		else
    -		{
    -			dol_print_error($db);
    -		}
    -
     	}
     
     	/* ************************************************************************** */
    @@ -782,7 +570,6 @@ if ($rowid > 0)
     			print '<td>';
     			print $formaccounting->select_account($object->accountancy_code_depreciation_expense, 'accountancy_code_depreciation_expense', 1, '', 1, 1);
     			print '</td></tr>';
    -
     		}
     		else // For external software
     		{
    @@ -851,7 +638,6 @@ if ($rowid > 0)
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/asterisk/cidlookup.php b/htdocs/asterisk/cidlookup.php
    index e6b4985f6b8..56e90c1a639 100644
    --- a/htdocs/asterisk/cidlookup.php
    +++ b/htdocs/asterisk/cidlookup.php
    @@ -31,9 +31,9 @@ include '../master.inc.php';
     
     $phone = GETPOST('phone');
     $notfound = $langs->trans("Unknown");
    - 
    +
     // Security check
    -if (empty($conf->clicktodial->enabled)) 
    +if (empty($conf->clicktodial->enabled))
     {
         print "Error: Module Click to dial is not enabled.\n";
         exit;
    diff --git a/htdocs/asterisk/wrapper.php b/htdocs/asterisk/wrapper.php
    index 8cd5ff979a0..66ff541d499 100644
    --- a/htdocs/asterisk/wrapper.php
    +++ b/htdocs/asterisk/wrapper.php
    @@ -190,5 +190,6 @@ else {
         print 'Bad parameters in URL. Must be '.$_SERVER['PHP_SELF'].'?caller=99999&called=99999&login=xxxxx&password=xxxxx';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/barcode/codeinit.php b/htdocs/barcode/codeinit.php
    index 26386052480..7086af7f17e 100644
    --- a/htdocs/barcode/codeinit.php
    +++ b/htdocs/barcode/codeinit.php
    @@ -319,6 +319,6 @@ if ($conf->product->enabled || $conf->product->service)
     print '</form>';
     print '<br>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/barcode/printsheet.php b/htdocs/barcode/printsheet.php
    index 7dfec76b39e..a1f3632fd2f 100644
    --- a/htdocs/barcode/printsheet.php
    +++ b/htdocs/barcode/printsheet.php
    @@ -178,19 +178,19 @@ if ($action == 'builddoc')
     	{
     		// List of values to scan for a replacement
     		$substitutionarray = array (
    -		'%LOGIN%'=>$user->login,
    -		'%COMPANY%'=>$mysoc->name,
    -		'%ADDRESS%'=>$mysoc->address,
    -		'%ZIP%'=>$mysoc->zip,
    -		'%TOWN%'=>$mysoc->town,
    -		'%COUNTRY%'=>$mysoc->country,
    -		'%COUNTRY_CODE%'=>$mysoc->country_code,
    -		'%EMAIL%'=>$mysoc->email,
    -		'%YEAR%'=>$year,
    -		'%MONTH%'=>$month,
    -		'%DAY%'=>$day,
    -		'%DOL_MAIN_URL_ROOT%'=>DOL_MAIN_URL_ROOT,
    -		'%SERVER%'=>"http://".$_SERVER["SERVER_NAME"]."/"
    +		    '%LOGIN%' => $user->login,
    +		    '%COMPANY%' => $mysoc->name,
    +		    '%ADDRESS%' => $mysoc->address,
    +		    '%ZIP%' => $mysoc->zip,
    +		    '%TOWN%' => $mysoc->town,
    +		    '%COUNTRY%' => $mysoc->country,
    +		    '%COUNTRY_CODE%' => $mysoc->country_code,
    +		    '%EMAIL%' => $mysoc->email,
    +		    '%YEAR%' => $year,
    +		    '%MONTH%' => $month,
    +		    '%DAY%' => $day,
    +		    '%DOL_MAIN_URL_ROOT%' => DOL_MAIN_URL_ROOT,
    +		    '%SERVER%' => "http://".$_SERVER["SERVER_NAME"]."/",
     		);
     		complete_substitutions_array($substitutionarray, $langs);
     
    @@ -416,7 +416,7 @@ print $langs->trans("BarcodeType").' &nbsp; ';
     print '</div><div class="tagtd" style="overflow: hidden; white-space: nowrap; max-width: 300px;">';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formbarcode.class.php';
     $formbarcode = new FormBarCode($db);
    -$formbarcode->select_barcode_type($fk_barcode_type, 'fk_barcode_type', 1);
    +print $formbarcode->selectBarcodeType($fk_barcode_type, 'fk_barcode_type', 1);
     print '</div></div>';
     
     // Barcode value
    @@ -441,6 +441,6 @@ print '<br><input class="button" type="submit" id="submitformbarcodegen" '.((GET
     print '</form>';
     print '<br>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/blockedlog/admin/blockedlog.php b/htdocs/blockedlog/admin/blockedlog.php
    index 326fea79c5d..8c2835d856c 100644
    --- a/htdocs/blockedlog/admin/blockedlog.php
    +++ b/htdocs/blockedlog/admin/blockedlog.php
    @@ -178,5 +178,6 @@ if (GETPOST('withtab','alpha'))
     
     print '<br><br>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/blockedlog/admin/blockedlog_list.php b/htdocs/blockedlog/admin/blockedlog_list.php
    index b93856b7af5..734e9d31f67 100644
    --- a/htdocs/blockedlog/admin/blockedlog_list.php
    +++ b/htdocs/blockedlog/admin/blockedlog_list.php
    @@ -1,6 +1,7 @@
     <?php
    -/* Copyright (C) 2017      ATM Consulting      <contact@atm-consulting.fr>
    - * Copyright (C) 2017-2018 Laurent Destailleur <eldy@destailleur.fr>
    +/* Copyright (C) 2017       ATM Consulting          <contact@atm-consulting.fr>
    + * Copyright (C) 2017-2018  Laurent Destailleur     <eldy@destailleur.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -131,7 +132,7 @@ else if (GETPOST('downloadcsv','alpha'))
     		{
     			// Make the first fetch to get first line
     			$obj = $db->fetch_object($res);
    -			if ($obj) 
    +			if ($obj)
     			{
     				$previoushash = $block_static->getPreviousHash(0, $obj->rowid);
     				$firstid = $obj->rowid;
    @@ -145,7 +146,7 @@ else if (GETPOST('downloadcsv','alpha'))
     		else
     		{
     			$error++;
    -			setEventMessage($db->lasterror, 'errors');
    +			setEventMessages($db->lasterror, null, 'errors');
     		}
     	}
     
    @@ -250,7 +251,7 @@ else if (GETPOST('downloadcsv','alpha'))
     		}
     		else
     		{
    -			setEventMessage($db->lasterror, 'errors');
    +			setEventMessages($db->lasterror, null, 'errors');
     		}
     	}
     }
    @@ -372,10 +373,10 @@ print '<td class="liste_titre">&nbsp;</td>';
     
     print '<td class="liste_titre">';
     //print $langs->trans("from").': ';
    -$form->select_date($search_start,'search_start');
    +print $form->selectDate($search_start,'search_start');
     //print '<br>';
     //print $langs->trans("to").': ';
    -$form->select_date($search_end,'search_end');
    +print $form->selectDate($search_end,'search_end');
     print '</td>';
     
     // User
    @@ -443,7 +444,6 @@ if (! empty($conf->global->BLOCKEDLOG_SCAN_ALL_FOR_LOWERIDINERROR))
     
     	// TODO Make a full scan of table in reverse order of id of $block, so we can use the parameter $previoushash into checkSignature to save requests
     	// to find the $loweridinerror.
    -
     }
     else
     {
    @@ -537,7 +537,6 @@ if (is_array($blocks))
     			print '<td></td>';
     
     			print '</tr>';
    -
     		}
     	}
     }
    @@ -607,5 +606,6 @@ if (GETPOST('withtab','alpha'))
     
     print '<br><br>';
     
    +// End of page
     llxFooter();
    -$db->close();
    +$db->close();
    \ No newline at end of file
    diff --git a/htdocs/blockedlog/ajax/authority.php b/htdocs/blockedlog/ajax/authority.php
    index 7bde15aa879..1104eeb3c02 100644
    --- a/htdocs/blockedlog/ajax/authority.php
    +++ b/htdocs/blockedlog/ajax/authority.php
    @@ -53,7 +53,6 @@ if($auth->fetch(0, $signature)<=0) {
     if(!empty($hash)) {
     
     	echo $auth->checkBlockchain($hash) ? 'hashisok' : 'hashisjunk';
    -
     }
     elseif(!empty($newblock)){
     	if($auth->checkBlock($newblock)) {
    @@ -65,7 +64,6 @@ elseif(!empty($newblock)){
     	else{
     
     		echo 'blockalreadyadded';
    -
     	}
     }
     else{
    diff --git a/htdocs/blockedlog/ajax/check_signature.php b/htdocs/blockedlog/ajax/check_signature.php
    index 199f9051e07..9617e6cd1ef 100644
    --- a/htdocs/blockedlog/ajax/check_signature.php
    +++ b/htdocs/blockedlog/ajax/check_signature.php
    @@ -49,7 +49,6 @@ $auth->signature = $block_static->getSignature();
     
     foreach($blocks as &$b) {
     	$auth->blockchain.=$b->signature;
    -
     }
     
     $hash = $auth->getBlockchainHash();
    diff --git a/htdocs/blockedlog/class/authority.class.php b/htdocs/blockedlog/class/authority.class.php
    index b1084b01a54..0d0fc183b6c 100644
    --- a/htdocs/blockedlog/class/authority.class.php
    +++ b/htdocs/blockedlog/class/authority.class.php
    @@ -50,10 +50,9 @@ class BlockedLogAuthority
     	 *
     	 *      @param		DoliDB		$db      Database handler
     	 */
    -    public function __construct($db) {
    -
    +    public function __construct($db)
    +    {
         	$this->db = $db;
    -
     	}
     
     	/**
    @@ -61,7 +60,8 @@ class BlockedLogAuthority
     	 *
     	 *	@return     string         			blockchain
     	 */
    -	public function getLocalBlockChain() {
    +    public function getLocalBlockChain()
    +    {
     
     		$block_static = new BlockedLog($this->db);
     
    @@ -73,7 +73,6 @@ class BlockedLogAuthority
     
     		foreach($blocks as &$b) {
     			$this->blockchain.=$b->signature;
    -
     		}
     
     		return $this->blockchain;
    @@ -84,10 +83,10 @@ class BlockedLogAuthority
     	 *
     	 *	@return     string         			hash md5 of blockchain
     	 */
    -	public function getBlockchainHash() {
    +    public function getBlockchainHash()
    +    {
     
     		return md5($this->signature.$this->blockchain);
    -
     	}
     
     	/**
    @@ -96,21 +95,22 @@ class BlockedLogAuthority
     	 *	@param      string		$hash		hash md5 of blockchain to test
     	 *	@return     boolean
     	 */
    -	public function checkBlockchain($hash) {
    +    public function checkBlockchain($hash)
    +    {
     
     		return ($hash === $this->getBlockchainHash() );
    -
     	}
     
     	/**
     	 *	Add a new block to the chain
     	 *
    -	 *	@param      string		$block		new block to chain
    +     *	@param      string		$block		new block to chain
    +     *  @return void
     	 */
    -	public function addBlock($block) {
    +    public function addBlock($block)
    +    {
     
     		$this->blockchain.=$block;
    -
     	}
     
     	/**
    @@ -119,7 +119,8 @@ class BlockedLogAuthority
     	 *	@param      string		$block		new block to chain
     	 *	@return     boolean
     	 */
    -	public function checkBlock($block) {
    +    public function checkBlock($block)
    +    {
     
     		if(strlen($block)!=64) return false;
     
    @@ -141,7 +142,8 @@ class BlockedLogAuthority
     	 *	@param      string		$signature		Signature of object to load
     	 *	@return     int         				>0 if OK, <0 if KO, 0 if not found
     	 */
    -	public function fetch($id, $signature='') {
    +    public function fetch($id, $signature='')
    +    {
     
     		global $langs;
     
    @@ -189,7 +191,6 @@ class BlockedLogAuthority
     			$this->error=$this->db->error();
     			return -1;
     		}
    -
     	}
     
     	/**
    @@ -198,7 +199,8 @@ class BlockedLogAuthority
     	 *	@param	User	$user      		Object user that create
     	 *	@return	int						<0 if KO, >0 if OK
     	 */
    -	public function create($user) {
    +    public function create($user)
    +    {
     
     		global $conf,$langs,$hookmanager;
     
    @@ -243,7 +245,6 @@ class BlockedLogAuthority
     			$this->db->rollback();
     			return -1;
     		}
    -
     	}
     
     	/**
    @@ -252,7 +253,8 @@ class BlockedLogAuthority
     	 *	@param	User	$user      		Object user that create
     	 *	@return	int						<0 if KO, >0 if OK
     	 */
    -	public function update($user) {
    +    public function update($user)
    +    {
     
     		global $conf,$langs,$hookmanager;
     
    @@ -281,7 +283,6 @@ class BlockedLogAuthority
     			$this->db->rollback();
     			return -1;
     		}
    -
     	}
     
     	/**
    @@ -289,7 +290,8 @@ class BlockedLogAuthority
     	 *
     	 *	@return	int						<0 if KO, >0 if OK
     	 */
    -	public function syncSignatureWithAuthority() {
    +    public function syncSignatureWithAuthority()
    +    {
     		global $conf, $langs;
     
     		//TODO create cron task on activation
    @@ -316,18 +318,14 @@ class BlockedLogAuthority
     			if($res === 'blockalreadyadded' || $res === 'blockadded') {
     
     				$block->setCertified();
    -
     			}
     			else {
     
     				$this->error = $langs->trans('ImpossibleToContactAuthority ',$url);
     				return -1;
     			}
    -
    -
     		}
     
     		return 1;
     	}
    -
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/blockedlog/class/blockedlog.class.php b/htdocs/blockedlog/class/blockedlog.class.php
    index 0210491fba7..46766277669 100644
    --- a/htdocs/blockedlog/class/blockedlog.class.php
    +++ b/htdocs/blockedlog/class/blockedlog.class.php
    @@ -18,9 +18,6 @@
      * See https://medium.com/@lhartikk/a-blockchain-in-200-lines-of-code-963cc1cc0e54
      */
     
    -
    -
    -
     /*ini_set('unserialize_callback_func', 'mycallback');
     
     function mycallback($classname)
    @@ -42,13 +39,21 @@ class BlockedLog
     	 * @var int
     	 */
     	public $id;
    +
     	/**
     	 * Entity
     	 * @var int
     	 */
     	public $entity;
     
    +	/**
    +	 * @var string Error message
    +	 */
     	public $error = '';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
     	public $errors = array();
     
     	/**
    @@ -171,6 +176,7 @@ class BlockedLog
     
     	/**
     	 *  Try to retrieve source object (it it still exists)
    +     * @return string
     	 */
     	public function getObjectLink()
     	{
    @@ -281,11 +287,11 @@ class BlockedLog
     		}
     
     		return '<i class="opacitymedium">'.$langs->trans('ImpossibleToReloadObject', $this->element, $this->fk_object).'</i>';
    -
     	}
     
     	/**
     	 *      try to retrieve user author
    +     * @return string
     	 */
     	public function getUser()
     	{
    @@ -609,7 +615,8 @@ class BlockedLog
     	 *	@param      int		$id       	Id of object to load
     	 *	@return     int         			>0 if OK, <0 if KO, 0 if not found
     	 */
    -	public function fetch($id) {
    +    public function fetch($id)
    +    {
     
     		global $langs;
     
    @@ -672,7 +679,6 @@ class BlockedLog
     			$this->error=$this->db->error();
     			return -1;
     		}
    -
     	}
     
     
    @@ -705,14 +711,13 @@ class BlockedLog
     	 *
     	 *	@return	boolean
     	 */
    -	public function setCertified() {
    +    public function setCertified()
    +    {
     
     		$res = $this->db->query("UPDATE ".MAIN_DB_PREFIX."blockedlog SET certified=1 WHERE rowid=".$this->id);
     		if($res===false) return false;
     
     		return true;
    -
    -
     	}
     
     	/**
    @@ -722,7 +727,8 @@ class BlockedLog
     	 *  @param	int		$forcesignature		Force signature (for example '0000000000' when we disabled the module)
     	 *	@return	int							<0 if KO, >0 if OK
     	 */
    -	public function create($user, $forcesignature='') {
    +    public function create($user, $forcesignature='')
    +    {
     
     		global $conf,$langs,$hookmanager;
     
    @@ -941,17 +947,14 @@ class BlockedLog
     
     	 		$sql="SELECT rowid FROM ".MAIN_DB_PREFIX."blockedlog
     	         WHERE entity=".$conf->entity;
    -
     		}
     		else if ($element=='not_certified') {
     			$sql="SELECT rowid FROM ".MAIN_DB_PREFIX."blockedlog
     	         WHERE entity=".$conf->entity." AND certified = 0";
    -
     		}
     		else if ($element=='just_certified') {
     			$sql="SELECT rowid FROM ".MAIN_DB_PREFIX."blockedlog
     	         WHERE entity=".$conf->entity." AND certified = 1";
    -
     		}
     		else{
     			$sql="SELECT rowid FROM ".MAIN_DB_PREFIX."blockedlog
    @@ -1029,6 +1032,7 @@ class BlockedLog
     	 * Check if module was already used or not for at least one recording.
     	 *
     	 * @param	int		$ignoresystem		Ignore system events for the test
    +     * @return bool
     	 */
     	function alreadyUsed($ignoresystem=0)
     	{
    @@ -1053,6 +1057,4 @@ class BlockedLog
     
     		return $result;
     	}
    -
     }
    -
    diff --git a/htdocs/blockedlog/lib/blockedlog.lib.php b/htdocs/blockedlog/lib/blockedlog.lib.php
    index 8e715154c64..7025ee464fe 100644
    --- a/htdocs/blockedlog/lib/blockedlog.lib.php
    +++ b/htdocs/blockedlog/lib/blockedlog.lib.php
    @@ -38,6 +38,7 @@ function blockedlogadmin_prepare_head()
     	$head[$h][2] = 'blockedlog';
     	$h++;
     
    +	$langs->load("blockedlog");
     	$head[$h][0] = DOL_URL_ROOT."/blockedlog/admin/blockedlog_list.php?withtab=1";
     	$head[$h][1] = $langs->trans("BrowseBlockedLog");
     
    diff --git a/htdocs/bookmarks/admin/bookmark.php b/htdocs/bookmarks/admin/bookmark.php
    index 25fa032902f..ed20f619b25 100644
    --- a/htdocs/bookmarks/admin/bookmark.php
    +++ b/htdocs/bookmarks/admin/bookmark.php
    @@ -81,5 +81,6 @@ print '<input size="3" type="text" name="BOOKMARKS_SHOW_IN_MENU" value="'.$conf-
     print '</td></tr>';
     print '</table><br><div class="center"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></div></form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/bookmarks/card.php b/htdocs/bookmarks/card.php
    index d450e476506..1d10dc7ca34 100644
    --- a/htdocs/bookmarks/card.php
    +++ b/htdocs/bookmarks/card.php
    @@ -333,10 +333,8 @@ if ($id > 0 && ! preg_match('/^add/i',$action))
     	}
     
     	print '</div>';
    -
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/bookmarks/class/bookmark.class.php b/htdocs/bookmarks/class/bookmark.class.php
    index 1beb4b36871..f66ef8e4d80 100644
    --- a/htdocs/bookmarks/class/bookmark.class.php
    +++ b/htdocs/bookmarks/class/bookmark.class.php
    @@ -28,21 +28,53 @@
      */
     class Bookmark extends CommonObject
     {
    -    public $element='bookmark';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='bookmark';
    +
    +    /**
    +     * @var string Name of table without prefix where object is stored
    +     */
         public $table_element='bookmark';
    -    public $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    -    public $picto = 'bookmark';
     
    -    var $db;
    +    /**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +    public $ismultientitymanaged = 1;
     
    -    var $id;
    -    var $fk_user;
    -    var $datec;
    -    var $url;
    -    var $target;	// 0=replace, 1=new window
    -    var $title;
    -    var $position;
    -    var $favicon;
    +    /**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'bookmark';
    +
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $id;
    +
    +    /**
    +	 * @var int User ID
    +	 */
    +	public $fk_user;
    +
    +    public $datec;
    +
    +    public $url;
    +
    +    public $target;	// 0=replace, 1=new window
    +
    +    public $title;
    +
    +    public $position;
    +
    +    public $favicon;
     
     
         /**
    @@ -127,7 +159,7 @@ class Bookmark extends CommonObject
             $sql.= ", ".$this->db->escape($conf->entity);
             $sql.= ")";
     
    -        dol_syslog("Bookmark::update", LOG_DEBUG);
    +        dol_syslog("Bookmark::create", LOG_DEBUG);
             $resql = $this->db->query($sql);
             if ($resql)
             {
    @@ -211,7 +243,6 @@ class Bookmark extends CommonObject
                 $this->error=$this->db->lasterror();
                 return -1;
             }
    -
         }
     
     	/**
    @@ -241,5 +272,4 @@ class Bookmark extends CommonObject
     	{
     	    return '';
     	}
    -
     }
    diff --git a/htdocs/bookmarks/list.php b/htdocs/bookmarks/list.php
    index ac5a89c66f3..10ce877c7e0 100644
    --- a/htdocs/bookmarks/list.php
    +++ b/htdocs/bookmarks/list.php
    @@ -209,7 +209,7 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/cache.manifest b/htdocs/cache.manifest
    index a3d1b1c554f..ebbf1aab4eb 100644
    --- a/htdocs/cache.manifest
    +++ b/htdocs/cache.manifest
    @@ -11,7 +11,6 @@ CACHE:
     theme/dolibarr_logo.png
     support/
     support/index.php
    -support/online.php
     
     support/default.css
     support/helpcenter.png
    diff --git a/htdocs/cashdesk/admin/cashdesk.php b/htdocs/cashdesk/admin/cashdesk.php
    index f4af16b3739..62867d855cb 100644
    --- a/htdocs/cashdesk/admin/cashdesk.php
    +++ b/htdocs/cashdesk/admin/cashdesk.php
    @@ -185,5 +185,6 @@ print '<div class="center"><input type="submit" class="button" value="'.$langs->
     
     print "</form>\n";
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/cashdesk/affContenu.php b/htdocs/cashdesk/affContenu.php
    index bd778f3422e..11b36f09d53 100644
    --- a/htdocs/cashdesk/affContenu.php
    +++ b/htdocs/cashdesk/affContenu.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2007-2008 Jeremie Ollivier      <jeremie.o@laposte.net>
      * Copyright (C) 2008-2009 Laurent Destailleur   <eldy@uers.sourceforge.net>
    - * Copyright (C) 2009      Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin         <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -87,7 +87,7 @@ print '</div>';
     print '<div class="inline-block" style="vertical-align: top">';
     print '<div class="liste_articles">';
     
    -require ('tpl/liste_articles.tpl.php');
    +require 'tpl/liste_articles.tpl.php';
     
     print '</div>';
     print '</div>';
    diff --git a/htdocs/cashdesk/affIndex.php b/htdocs/cashdesk/affIndex.php
    index a2e467a35e3..c06a140f550 100644
    --- a/htdocs/cashdesk/affIndex.php
    +++ b/htdocs/cashdesk/affIndex.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2007-2008 Jeremie Ollivier      <jeremie.o@laposte.net>
      * Copyright (C) 2008-2010 Laurent Destailleur   <eldy@uers.sourceforge.net>
    - * Copyright (C) 2009      Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent         <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -36,9 +36,8 @@ if ( $_SESSION['uid'] <= 0 )
     	exit;
     }
     
    -$langs->load("companies");
    -$langs->load("compta");
    -$langs->load("cashdesk");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","compta","cashdesk"));
     
     
     /*
    diff --git a/htdocs/cashdesk/class/Auth.class.php b/htdocs/cashdesk/class/Auth.class.php
    index 5e431514d1c..78b76e20d11 100644
    --- a/htdocs/cashdesk/class/Auth.class.php
    +++ b/htdocs/cashdesk/class/Auth.class.php
    @@ -138,6 +138,5 @@ class Auth
     
     		return $ret;
     	}
    -
     }
     
    diff --git a/htdocs/cashdesk/class/Facturation.class.php b/htdocs/cashdesk/class/Facturation.class.php
    index a0e992e9da9..18487619a76 100644
    --- a/htdocs/cashdesk/class/Facturation.class.php
    +++ b/htdocs/cashdesk/class/Facturation.class.php
    @@ -37,7 +37,12 @@ class Facturation
          * int $prix		=> Prix HT du produit en cours
          * int $tva			=> 'rowid' du taux de tva dans llx_c_tva
          */
    -    public $id;
    +
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
         protected $ref;
         protected $qte;
         protected $stock;
    @@ -167,7 +172,6 @@ class Facturation
             $_SESSION['poscart']=$newcartarray;
     
             $this->raz();
    -
         }
     
         /**
    @@ -269,7 +273,6 @@ class Facturation
             $this->prixTotalHt('RESET');
             $this->montantTva('RESET');
             $this->prixTotalTtc('RESET');
    -
         }
     
     
    @@ -287,19 +290,16 @@ class Facturation
             if ( !$aId )
             {
                 return $this->id;
    -
             }
             else if ( $aId == 'RESET' )
             {
     
                 $this->id = null;
    -
             }
             else
             {
     
                 $this->id = $aId;
    -
             }
         }
     
    @@ -310,7 +310,7 @@ class Facturation
          * @return	string			Ref
          */
         public function ref($aRef=null)
    -     {
    +    {
     
             if (is_null($aRef))
             {
    @@ -324,7 +324,6 @@ class Facturation
             {
                 $this->ref = $aRef;
             }
    -
         }
     
         /**
    @@ -348,7 +347,6 @@ class Facturation
             {
                 $this->qte = $aQte;
             }
    -
         }
     
         /**
    @@ -372,7 +370,6 @@ class Facturation
             {
                 $this->stock = $aStock;
             }
    -
         }
     
         /**
    @@ -396,7 +393,6 @@ class Facturation
             {
                 $this->remise_percent = $aRemisePercent;
             }
    -
         }
     
         /**
    @@ -411,17 +407,13 @@ class Facturation
             if (is_null($aMontantRemise)) {
     
                 return $this->montant_remise;
    -
             } else if ( $aMontantRemise == 'RESET' ) {
     
                 $this->montant_remise = null;
    -
             } else {
     
                 $this->montant_remise = $aMontantRemise;
    -
             }
    -
         }
     
         /**
    @@ -436,17 +428,13 @@ class Facturation
             if (is_null($aPrix)) {
     
                 return $this->prix;
    -
             } else if ( $aPrix == 'RESET' ) {
     
                 $this->prix = null;
    -
             } else {
     
                 $this->prix = $aPrix;
    -
             }
    -
         }
     
         /**
    @@ -460,17 +448,13 @@ class Facturation
             if (is_null($aTva)) {
     
                 return $this->tva;
    -
             } else if ( $aTva == 'RESET' ) {
     
                 $this->tva = null;
    -
             } else {
     
                 $this->tva = $aTva;
    -
             }
    -
         }
     
         /**
    @@ -484,15 +468,12 @@ class Facturation
             if (is_null($aNumFacture)) {
     
                 return $this->num_facture;
    -
             } else if ( $aNumFacture == 'RESET' ) {
     
                 $this->num_facture = null;
    -
             } else {
     
                 $this->num_facture = $aNumFacture;
    -
             }
         }
     
    @@ -508,17 +489,13 @@ class Facturation
             if (is_null($aModeReglement)) {
     
                 return $this->mode_reglement;
    -
             } else if ( $aModeReglement == 'RESET' ) {
     
                 $this->mode_reglement = null;
    -
             } else {
     
                 $this->mode_reglement = $aModeReglement;
    -
             }
    -
         }
     
         /**
    @@ -533,17 +510,13 @@ class Facturation
             if (is_null($aMontantEncaisse)) {
     
                 return $this->montant_encaisse;
    -
             } else if ( $aMontantEncaisse == 'RESET' ) {
     
                 $this->montant_encaisse = null;
    -
             } else {
     
                 $this->montant_encaisse = $aMontantEncaisse;
    -
             }
    -
         }
     
         /**
    @@ -561,13 +534,10 @@ class Facturation
             } else if ( $aMontantRendu == 'RESET' ) {
     
                 $this->montant_rendu = null;
    -
             } else {
     
                 $this->montant_rendu = $aMontantRendu;
    -
             }
    -
         }
     
         /**
    @@ -581,15 +551,12 @@ class Facturation
             if (is_null($aPaiementLe)) {
     
                 return $this->paiement_le;
    -
             } else if ( $aPaiementLe == 'RESET' ) {
     
                 $this->paiement_le = null;
    -
             } else {
     
                 $this->paiement_le = $aPaiementLe;
    -
             }
         }
     
    @@ -604,15 +571,12 @@ class Facturation
             if (is_null($aTotalHt)) {
     
                 return $this->prix_total_ht;
    -
             } else if ( $aTotalHt == 'RESET' ) {
     
                 $this->prix_total_ht = null;
    -
             } else {
     
                 $this->prix_total_ht = $aTotalHt;
    -
             }
         }
     
    @@ -627,17 +591,13 @@ class Facturation
             if (is_null($aMontantTva)) {
     
                 return $this->montant_tva;
    -
             } else if ( $aMontantTva == 'RESET' ) {
     
                 $this->montant_tva = null;
    -
             } else {
     
                 $this->montant_tva = $aMontantTva;
    -
             }
    -
         }
     
         /**
    @@ -652,7 +612,7 @@ class Facturation
             {
                 return $this->prix_total_ttc;
             }
    -        else if ( $aTotalTtc == 'RESET' )
    +        elseif ( $aTotalTtc == 'RESET' )
             {
                 $this->prix_total_ttc = null;
             }
    @@ -661,6 +621,4 @@ class Facturation
                 $this->prix_total_ttc = $aTotalTtc;
             }
         }
    -
     }
    -
    diff --git a/htdocs/cashdesk/css/style.css b/htdocs/cashdesk/css/style.css
    index d4149619aae..dc579711aa3 100644
    --- a/htdocs/cashdesk/css/style.css
    +++ b/htdocs/cashdesk/css/style.css
    @@ -52,7 +52,7 @@ p {
     }
     .logopos {
     	padding-top: 20px;
    -	max-height: 40px;	
    +	max-height: 40px;
     }
     
     /* ------------------- Header ------------------- */
    diff --git a/htdocs/cashdesk/facturation.php b/htdocs/cashdesk/facturation.php
    index f52890b68d2..4ca8a562659 100644
    --- a/htdocs/cashdesk/facturation.php
    +++ b/htdocs/cashdesk/facturation.php
    @@ -137,7 +137,6 @@ if ( $nbr_enreg > 1 )
     	{
     		$top_liste_produits = '----- '.$nbr_enreg.' '.$langs->transnoentitiesnoconv("CashDeskProducts").' '.$langs->trans("CashDeskOn").' '.$nbr_enreg.' -----';
     	}
    -
     }
     else if ( $nbr_enreg == 1 )
     {
    @@ -163,4 +162,4 @@ $obj_facturation->paiementLe('RESET');
     
     
     // Affichage des templates
    -require ('tpl/facturation1.tpl.php');
    +require 'tpl/facturation1.tpl.php';
    diff --git a/htdocs/cashdesk/facturation_dhtml.php b/htdocs/cashdesk/facturation_dhtml.php
    index e1a1dcc6bc8..c30b5654828 100644
    --- a/htdocs/cashdesk/facturation_dhtml.php
    +++ b/htdocs/cashdesk/facturation_dhtml.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2007-2008 	Jeremie Ollivier 	<jeremie.o@laposte.net>
      * Copyright (C) 2008-2009 	Laurent Destailleur <eldy@uers.sourceforge.net>
    - * Copyright (C) 2015		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2015		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -108,5 +108,4 @@ if (dol_strlen($search) >= 0)	// If search criteria is on char length at least
     			print '</ul>';
     		}
     	}
    -
     }
    diff --git a/htdocs/cashdesk/facturation_verif.php b/htdocs/cashdesk/facturation_verif.php
    index cdeeaf6c424..6aa81d991df 100644
    --- a/htdocs/cashdesk/facturation_verif.php
    +++ b/htdocs/cashdesk/facturation_verif.php
    @@ -216,7 +216,6 @@ switch($action)
     			$obj_facturation->remisePercent($_POST['txtRemise']);
     			$obj_facturation->ajoutArticle();	// This add an entry into $_SESSION['poscart']
     			// We update prixTotalTtc
    -
     		}
     
     		$redirection = DOL_URL_ROOT.'/cashdesk/affIndex.php?menutpl=facturation';
    @@ -227,7 +226,6 @@ switch($action)
     
     		$redirection = DOL_URL_ROOT.'/cashdesk/affIndex.php?menutpl=facturation';
     		break;
    -
     }
     
     // We saved object obj_facturation
    diff --git a/htdocs/cashdesk/index.php b/htdocs/cashdesk/index.php
    index 24b94562915..d2ea5160ca8 100644
    --- a/htdocs/cashdesk/index.php
    +++ b/htdocs/cashdesk/index.php
    @@ -28,8 +28,8 @@
     require_once '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
     
    -$langs->load("admin");
    -$langs->load("cashdesk");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin","cashdesk"));
     
     // Test if user logged
     if ( $_SESSION['uid'] > 0 )
    @@ -63,7 +63,7 @@ top_htmlhead('','',0,0,'',$arrayofcss);
     <?php
     if (! empty($mysoc->logo_small))
     {
    -    print '<img class="logopos" alt="Logo company" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('/thumbs/'.$mysoc->logo_small).'">';
    +    print '<img class="logopos" alt="Logo company" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_small).'">';
     }
     else
     {
    diff --git a/htdocs/cashdesk/index_verif.php b/htdocs/cashdesk/index_verif.php
    index 238a73f6ef7..cd354293022 100644
    --- a/htdocs/cashdesk/index_verif.php
    +++ b/htdocs/cashdesk/index_verif.php
    @@ -30,9 +30,8 @@ include '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/cashdesk/include/environnement.php';
     require_once DOL_DOCUMENT_ROOT.'/cashdesk/class/Auth.class.php';
     
    -$langs->load("main");
    -$langs->load("admin");
    -$langs->load("cashdesk");
    +// Load translation files required by the page
    +$langs->loadLangs(array("main","admin","cashdesk"));
     
     $username = GETPOST("txtUsername");
     $password = GETPOST("pwdPassword");
    @@ -119,7 +118,7 @@ if ( $retour >= 0 )
     		$_SESSION['firstname'] = $tab['firstname'];
     		$_SESSION['CASHDESK_ID_THIRDPARTY'] = ($thirdpartyid > 0 ? $thirdpartyid : '');
             $_SESSION['CASHDESK_ID_WAREHOUSE'] = ($warehouseid > 0 ? $warehouseid : '');
    -        
    +
             $_SESSION['CASHDESK_ID_BANKACCOUNT_CASH'] = ($bankid_cash > 0 ? $bankid_cash : '');
             $_SESSION['CASHDESK_ID_BANKACCOUNT_CHEQUE'] = ($bankid_cheque > 0 ? $bankid_cheque : '');
             $_SESSION['CASHDESK_ID_BANKACCOUNT_CB'] = ($bankid_cb > 0 ? $bankid_cb : '');
    @@ -135,8 +134,8 @@ if ( $retour >= 0 )
     }
     else
     {
    -	$langs->load("errors");
    -    $langs->load("other");
    +	// Load translation files required by the page
    +    $langs->loadLangs(array("other","errors"));
     	$retour=$langs->trans("ErrorBadLoginPassword");
     	header('Location: '.DOL_URL_ROOT.'/cashdesk/index.php?err='.urlencode($retour).'&user='.$username.'&socid='.$thirdpartyid.'&warehouseid='.$warehouseid);
     	exit;
    diff --git a/htdocs/cashdesk/javascript/dhtml.js b/htdocs/cashdesk/javascript/dhtml.js
    index db05855a3b2..e2000abf56e 100644
    --- a/htdocs/cashdesk/javascript/dhtml.js
    +++ b/htdocs/cashdesk/javascript/dhtml.js
    @@ -1,6 +1,6 @@
     
     /* Copyright (C) 2007-2008	Jeremie Ollivier	<jeremie.o@laposte.net>
    - * Copyright (C) 2015		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2015		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/cashdesk/tpl/facturation1.tpl.php b/htdocs/cashdesk/tpl/facturation1.tpl.php
    index 146ae3d40b6..3a3fcd0a6b8 100644
    --- a/htdocs/cashdesk/tpl/facturation1.tpl.php
    +++ b/htdocs/cashdesk/tpl/facturation1.tpl.php
    @@ -2,7 +2,8 @@
     /* Copyright (C) 2007-2008	Jeremie Ollivier	<jeremie.o@laposte.net>
      * Copyright (C) 2011		Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2011		Juanjo Menent		<jmenent@2byte.es>
    - * Copyright (C) 2015		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2015		Regis Houssin		<regis.houssin@inodbox.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -26,10 +27,8 @@ if (empty($langs) || ! is_object($langs))
     	exit;
     }
     
    -
    -$langs->load("main");
    -$langs->load("bills");
    -$langs->load("cashdesk");
    +// Load translation files required by the page
    +$langs->loadLangs(array("main","bills","cashdesk"));
     
     // Object $form must de defined
     
    @@ -90,7 +89,6 @@ $langs->load("cashdesk");
     							print '<option '.$selected.' value="'.$tab_designations[$i]['rowid'].'">'.dol_trunc($tab_designations[$i]['ref'],16).' - '.dol_trunc($label,35,'middle');
     							if (! empty($conf->stock->enabled) && !empty($conf_fkentrepot) && $tab_designations[$i]['fk_product_type']==0) print ' ('.$langs->trans("CashDeskStock").': '.(empty($tab_designations[$i]['reel'])?0:$tab_designations[$i]['reel']).')';
     							print '</option>'."\n";
    -
     						}
     					?>
     				</select>
    @@ -204,7 +202,7 @@ $langs->load("cashdesk");
     				<input class="button bouton_mode_reglement" type="submit" name="btnModeReglement" value="<?php echo $langs->trans("Reported"); ?>" onclick="javascript: verifClic('DIF');" />
     			<?php
     			print $langs->trans("DateDue").' :';
    -			print $form->select_date(-1,'txtDatePaiement',0,0,0,'paymentmode',1,0,1);
    +			print $form->selectDate(-1,'txtDatePaiement',0,0,0,'paymentmode',1,0);
     			print '</div>';
     			?>
     		</div>
    diff --git a/htdocs/cashdesk/tpl/liste_articles.tpl.php b/htdocs/cashdesk/tpl/liste_articles.tpl.php
    index 65f48b0603c..53209d735c4 100644
    --- a/htdocs/cashdesk/tpl/liste_articles.tpl.php
    +++ b/htdocs/cashdesk/tpl/liste_articles.tpl.php
    @@ -28,9 +28,8 @@ if (empty($langs) || ! is_object($langs))
     require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     
    -$langs->load("main");
    -$langs->load("bills");
    -$langs->load("cashdesk");
    +// Load translation files required by the page
    +$langs->loadLangs(array("main","bills","cashdesk"));
     
     ?>
     
    @@ -61,11 +60,9 @@ else
             if ( $tab[$i]['remise_percent'] > 0 ) {
     
                 $remise_percent = ' -'.$tab[$i]['remise_percent'].'%';
    -
             } else {
     
                 $remise_percent = '';
    -
             }
     
             $remise = $tab[$i]['remise'];
    diff --git a/htdocs/cashdesk/tpl/menu.tpl.php b/htdocs/cashdesk/tpl/menu.tpl.php
    index 250aaa18cc2..d65a39fc6aa 100644
    --- a/htdocs/cashdesk/tpl/menu.tpl.php
    +++ b/htdocs/cashdesk/tpl/menu.tpl.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2007-2008 Jeremie Ollivier      <jeremie.o@laposte.net>
      * Copyright (C) 2008-2010 Laurent Destailleur   <eldy@uers.sourceforge.net>
    - * Copyright (C) 2009      Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2017      Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2012      Marcos García         <marcosgdf@gmail.com>
      *
    @@ -63,9 +63,8 @@ if (!empty($_SESSION["CASHDESK_ID_WAREHOUSE"]) && ! empty($conf->stock->enabled)
     	$warehouseLink = $warehouse->getNomUrl(1);
     }
     
    -
    -$langs->load("cashdesk");
    -$langs->load("main");
    +// Load translation files required by the page
    +$langs->loadLangs(array("main","cashdesk"));
     
     print "\n".'<!-- menu.tpl.php -->'."\n";
     print '<div class="menu_bloc">';
    diff --git a/htdocs/cashdesk/tpl/ticket.tpl.php b/htdocs/cashdesk/tpl/ticket.tpl.php
    index 3937c9dbde3..5ed7650bfad 100644
    --- a/htdocs/cashdesk/tpl/ticket.tpl.php
    +++ b/htdocs/cashdesk/tpl/ticket.tpl.php
    @@ -27,8 +27,8 @@ if (empty($langs) || ! is_object($langs))
     
     include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     
    -$langs->load("main");
    -$langs->load('cashdesk');
    +// Load translation files required by the page
    +$langs->loadLangs(array("main","cashdesk"));
     
     top_httphead('text/html');
     
    @@ -47,7 +47,7 @@ $object->fetch($facid);
     
     <div class="entete">
         <div class="logo">
    -        <?php print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('/thumbs/'.$mysoc->logo_small).'">'; ?>
    +        <?php print '<img src="'.DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_small).'">'; ?>
         </div>
         <div class="infos">
             <p class="address"><?php echo $mysoc->name; ?><br>
    diff --git a/htdocs/cashdesk/tpl/validation1.tpl.php b/htdocs/cashdesk/tpl/validation1.tpl.php
    index 2a390b99c65..750831cead8 100644
    --- a/htdocs/cashdesk/tpl/validation1.tpl.php
    +++ b/htdocs/cashdesk/tpl/validation1.tpl.php
    @@ -23,10 +23,8 @@ if (empty($langs) || ! is_object($langs))
     	exit;
     }
     
    -
    -$langs->load("main");
    -$langs->load("bills");
    -$langs->load("banks");
    +// Load translation files required by the page
    +$langs->loadLangs(array("main","bills","banks"));
     
     // Object $form must de defined
     
    @@ -43,13 +41,11 @@ $langs->load("banks");
     			if ( $obj_facturation->montantTva() ) {
     
     				echo ('<tr><td class="resume_label">'.$langs->trans("VAT").'</td><td>'.price(price2num($obj_facturation->montantTva(),'MT'),0,$langs,0,0,-1,$conf->currency).'</td></tr>');
    -
     			}
     			else
     			{
     
     				echo ('<tr><td class="resume_label">'.$langs->trans("VAT").'</td><td>'.$langs->trans("NoVAT").'</td></tr>');
    -
     			}
     		?>
     		<tr><td class="resume_label"><?php echo $langs->trans("TotalTTC"); ?> </td><td><?php echo price(price2num($obj_facturation->prixTotalTtc(),'MT'),0,$langs,0,0,-1,$conf->currency); ?></td></tr>
    @@ -93,18 +89,15 @@ $langs->load("banks");
     			if ( $obj_facturation->getsetPaymentMode() == 'DIF' ) {
     
     				echo ('<tr><td class="resume_label">'.$langs->trans("DateDue").'</td><td>'.$obj_facturation->paiementLe().'</td></tr>');
    -
     			} else {
     
     				echo ('<tr><td class="resume_label">'.$langs->trans("Received").'</td><td>'.price(price2num($obj_facturation->montantEncaisse(),'MT'),0,$langs,0,0,-1,$conf->currency).'</td></tr>');
    -
     			}
     
     			// Affichage du montant rendu (reglement en especes)
     			if ( $obj_facturation->montantRendu() ) {
     
     				echo ('<tr><td class="resume_label">'.$langs->trans("Change").'</td><td>'.price(price2num($obj_facturation->montantRendu(),'MT'),0,$langs,0,0,-1,$conf->currency).'</td></tr>');
    -
     			}
     
     		?>
    diff --git a/htdocs/cashdesk/tpl/validation2.tpl.php b/htdocs/cashdesk/tpl/validation2.tpl.php
    index a9889451bda..4592e106c9a 100644
    --- a/htdocs/cashdesk/tpl/validation2.tpl.php
    +++ b/htdocs/cashdesk/tpl/validation2.tpl.php
    @@ -24,9 +24,8 @@ if (empty($langs) || ! is_object($langs))
     	exit;
     }
     
    -
    -$langs->load("main");
    -$langs->load("bills");
    +// Load translation files required by the page
    +$langs->loadLangs(array("main","bills"));
     
     ?>
     
    diff --git a/htdocs/cashdesk/validation.php b/htdocs/cashdesk/validation.php
    index 289c864ca32..ff1219861e2 100644
    --- a/htdocs/cashdesk/validation.php
    +++ b/htdocs/cashdesk/validation.php
    @@ -24,5 +24,5 @@
     $form=new Form($db);
     
     // Affichage des templates
    -require ('tpl/validation1.tpl.php');
    +require 'tpl/validation1.tpl.php';
     
    diff --git a/htdocs/cashdesk/validation_ok.php b/htdocs/cashdesk/validation_ok.php
    index 70bf3d1b64f..c8c83a91f18 100644
    --- a/htdocs/cashdesk/validation_ok.php
    +++ b/htdocs/cashdesk/validation_ok.php
    @@ -22,5 +22,5 @@
      */
     
     // Affichage des templates
    -require ('tpl/validation2.tpl.php');
    +require 'tpl/validation2.tpl.php';
     
    diff --git a/htdocs/cashdesk/validation_ticket.php b/htdocs/cashdesk/validation_ticket.php
    index 577df309138..a98b50b0bc9 100644
    --- a/htdocs/cashdesk/validation_ticket.php
    +++ b/htdocs/cashdesk/validation_ticket.php
    @@ -24,7 +24,7 @@
     require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/cashdesk/include/environnement.php';
     require_once DOL_DOCUMENT_ROOT.'/cashdesk/class/Facturation.class.php';
    -include_once(DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php');
    +require_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
     
     $obj_facturation = unserialize($_SESSION['serObjFacturation']);
     unset($_SESSION['serObjFacturation']);
    @@ -35,7 +35,7 @@ $parameters=array();
     $reshook=$hookmanager->executeHooks('doActions',$parameters,$obj_facturation);
     if (empty($reshook))
     {
    -    require ('tpl/ticket.tpl.php');
    +    require 'tpl/ticket.tpl.php';
     }
     
     
    diff --git a/htdocs/cashdesk/validation_verif.php b/htdocs/cashdesk/validation_verif.php
    index 431f921a1fb..be1f201a8fe 100644
    --- a/htdocs/cashdesk/validation_verif.php
    +++ b/htdocs/cashdesk/validation_verif.php
    @@ -215,6 +215,8 @@ switch ($action)
     		$invoice->note_private=$note;
     		$invoice->cond_reglement_id=$cond_reglement_id;
     		$invoice->mode_reglement_id=$mode_reglement_id;
    +		$invoice->module_source = 'cashdesk';
    +		$invoice->pos_source = '0';
     		//print "c=".$invoice->cond_reglement_id." m=".$invoice->mode_reglement_id; exit;
     
     		// Si paiement differe ...
    @@ -253,7 +255,7 @@ switch ($action)
     			}
     			else
     			{
    -				setEventMessage($invoice->error, $invoice->errors, 'errors');
    +				setEventMessages($invoice->error, $invoice->errors, 'errors');
     			    $error++;
     			}
     
    @@ -326,7 +328,6 @@ switch ($action)
                         		$result=$invoice->set_paid($user);
                       			//print 'set paid';exit;
                         	}
    -
                         }
     				}
     				else
    diff --git a/htdocs/categories/admin/categorie.php b/htdocs/categories/admin/categorie.php
    index 92e23a2199a..03adfdbb41e 100644
    --- a/htdocs/categories/admin/categorie.php
    +++ b/htdocs/categories/admin/categorie.php
    @@ -122,5 +122,6 @@ print '</td></tr>';
     
     print '</table>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/categories/admin/categorie_extrafields.php b/htdocs/categories/admin/categorie_extrafields.php
    index 3fd7d1c69b5..a346d86f50e 100644
    --- a/htdocs/categories/admin/categorie_extrafields.php
    +++ b/htdocs/categories/admin/categorie_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -79,7 +79,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -92,7 +92,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -111,6 +111,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/categories/card.php b/htdocs/categories/card.php
    index db56902347b..e69ec4a852d 100644
    --- a/htdocs/categories/card.php
    +++ b/htdocs/categories/card.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005		Matthieu Valleton	<mv@seeschloss.org>
      * Copyright (C) 2006-2017	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2014	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2007		Patrick Raguin		<patrick.raguin@gmail.com>
      * Copyright (C) 2013		Florian Henry		<florian.henry@open-concept.pro>
      * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    @@ -44,6 +44,7 @@ $origin		= GETPOST('origin','alpha');
     $catorigin	= GETPOST('catorigin','int');
     $type 		= GETPOST('type','alpha');
     $urlfrom	= GETPOST('urlfrom','alpha');
    +$backtopage = GETPOST('backtopage','alpha');
     
     $socid=GETPOST('socid','int');
     $label=GETPOST('label');
    @@ -173,6 +174,11 @@ if (($action == 'add' || $action == 'confirmed') && $user->rights->categorie->cr
     			header("Location: ".$urlfrom);
     			exit;
     		}
    +		elseif ($backtopage)
    +		{
    +			header("Location: ".$backtopage);
    +			exit;
    +		}
     		else if ($idProdOrigin)
     		{
     			header("Location: ".DOL_URL_ROOT.'/categories/viewcat.php?id='.$idProdOrigin.'&type='.$type.'&mesg='.urlencode($langs->trans("CatCreated")));
    @@ -232,8 +238,9 @@ if ($user->rights->categorie->creer)
     		print '<input type="hidden" name="urlfrom" value="'.$urlfrom.'">';
     		print '<input type="hidden" name="action" value="add">';
     		print '<input type="hidden" name="addcat" value="addcat">';
    -		print '<input type="hidden" name="id" value="'.GETPOST('origin').'">';
    +		print '<input type="hidden" name="id" value="'.GETPOST('origin','alpha').'">';
     		print '<input type="hidden" name="type" value="'.$type.'">';
    +		print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
     		if ($origin) print '<input type="hidden" name="origin" value="'.$origin.'">';
     		if ($catorigin)	print '<input type="hidden" name="catorigin" value="'.$catorigin.'">';
     
    @@ -288,7 +295,6 @@ if ($user->rights->categorie->creer)
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/categories/class/api_categories.class.php b/htdocs/categories/class/api_categories.class.php
    index c559d760f0f..843e2fc0ee6 100644
    --- a/htdocs/categories/class/api_categories.class.php
    +++ b/htdocs/categories/class/api_categories.class.php
    @@ -103,7 +103,8 @@ class Categories extends DolibarrApi
          *
     	 * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $type = '', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $type = '', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -266,7 +267,8 @@ class Categories extends DolibarrApi
          * @param   Categorie  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    diff --git a/htdocs/categories/class/categorie.class.php b/htdocs/categories/class/categorie.class.php
    index 3de9bdfab0a..ad7128c31ef 100644
    --- a/htdocs/categories/class/categorie.class.php
    +++ b/htdocs/categories/class/categorie.class.php
    @@ -2,14 +2,15 @@
     /* Copyright (C) 2005       Matthieu Valleton       <mv@seeschloss.org>
      * Copyright (C) 2005       Davoleau Brice          <brice.davoleau@gmail.com>
      * Copyright (C) 2005       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    - * Copyright (C) 2006-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2007       Patrick Raguin          <patrick.raguin@gmail.com>
      * Copyright (C) 2013-2016  Juanjo Menent           <jmenent@2byte.es>
    - * Copyright (C) 2013-2016  Philippe Grand          <philippe.grand@atoo-net.com>
    + * Copyright (C) 2013-2018  Philippe Grand          <philippe.grand@atoo-net.com>
      * Copyright (C) 2015       Marcos García           <marcosgdf@gmail.com>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2016       Charlie Benke           <charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -53,6 +54,9 @@ class Categorie extends CommonObject
     	const TYPE_ACCOUNT   = 'bank_account';
         const TYPE_BANK_LINE = 'bank_line';
     
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'category';
     
     
    @@ -72,6 +76,10 @@ class Categorie extends CommonObject
     		'user'         => 7,
     		'bank_line'    => 8,
     	);
    +
    +    /**
    +	 * @var array Code mapping from ID
    +	 */
     	public static $MAP_ID_TO_CODE = array(
     		0 => 'product',
     		1 => 'supplier',
    @@ -100,7 +108,8 @@ class Categorie extends CommonObject
             'bank_account' => 'account',
             'project'  => 'project',
     	);
    -	/**
    +
    +    /**
     	 * @var array Category tables mapping from type string
     	 *
     	 * @note Move to const array when PHP 5.6 will be our minimum target
    @@ -116,7 +125,8 @@ class Categorie extends CommonObject
             'bank_account'=> 'account',
             'project'  => 'project',
     	);
    -	/**
    +
    +    /**
     	 * @var array Object class mapping from type string
     	 *
     	 * @note Move to const array when PHP 5.6 will be our minimum target
    @@ -132,7 +142,8 @@ class Categorie extends CommonObject
     		'bank_account'  => 'Account',
             'project'  => 'Project',
     	);
    -	/**
    +
    +    /**
     	 * @var array Object table mapping from type string
     	 *
     	 * @note Move to const array when PHP 5.6 will be our minimum target
    @@ -148,12 +159,31 @@ class Categorie extends CommonObject
             'project'  => 'projet',
     	);
     
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='category';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='categorie';
     
    +	/**
    +     * @var int ID
    +     */
     	public $fk_parent;
    -	public $label;
    +
    +	/**
    +     * @var string Category label
    +     */
    +   	public $label;
    +
    +	/**
    +	 * @var string description
    +	 */
     	public $description;
    +
     	/**
     	 * @var string     Color
     	 */
    @@ -176,7 +206,14 @@ class Categorie extends CommonObject
     	 */
     	public $type;
     
    -	public $cats = array();			// Categories table in memory
    +	/**
    +	 * @var array Categories table in memory
    +	 */
    +	public $cats = array();
    +
    +    /**
    +	 * @var array Mother of table
    +	 */
     	public $motherof = array();
     
     	/**
    @@ -498,112 +535,27 @@ class Categorie extends CommonObject
     				$error++;
     			}
     		}
    -		if (! $error)
    -		{
    -			$sql  = "DELETE FROM ".MAIN_DB_PREFIX."categorie_societe";
    -			$sql .= " WHERE fk_categorie = ".$this->id;
    -			if (!$this->db->query($sql))
    -			{
    -				$this->error=$this->db->lasterror();
    -				$error++;
    -			}
    -		}
    -		if (! $error)
    -		{
    -			$sql  = "DELETE FROM ".MAIN_DB_PREFIX."categorie_fournisseur";
    -			$sql .= " WHERE fk_categorie = ".$this->id;
    -			if (!$this->db->query($sql))
    -			{
    -				$this->error=$this->db->lasterror();
    -				$error++;
    -			}
    -		}
    -		if (! $error)
    -		{
    -			$sql  = "DELETE FROM ".MAIN_DB_PREFIX."categorie_product";
    -			$sql .= " WHERE fk_categorie = ".$this->id;
    -			if (!$this->db->query($sql))
    -			{
    -				$this->error=$this->db->lasterror();
    -				$error++;
    -			}
    -		}
    -		if (! $error)
    -		{
    -			$sql  = "DELETE FROM ".MAIN_DB_PREFIX."categorie_member";
    -			$sql .= " WHERE fk_categorie = ".$this->id;
    -			if (!$this->db->query($sql))
    -			{
    -				$this->error=$this->db->lasterror();
    -				$error++;
    -			}
    -		}
    -		if (! $error)
    -		{
    -			$sql  = "DELETE FROM ".MAIN_DB_PREFIX."categorie_contact";
    -			$sql .= " WHERE fk_categorie = ".$this->id;
    -			if (!$this->db->query($sql))
    -			{
    -				$this->error=$this->db->lasterror();
    -				$error++;
    -			}
    -		}
    -		if (! $error)
    -		{
    -			$sql  = "DELETE FROM ".MAIN_DB_PREFIX."categorie_contact";
    -			$sql .= " WHERE fk_categorie = ".$this->id;
    -			if (!$this->db->query($sql))
    -			{
    -				$this->error=$this->db->lasterror();
    -				$error++;
    -			}
    -		}
    -		if (! $error)
    -		{
    -			$sql  = "DELETE FROM ".MAIN_DB_PREFIX."categorie_account";
    -			$sql .= " WHERE fk_categorie = ".$this->id;
    -			if (!$this->db->query($sql))
    -			{
    -				$this->error=$this->db->lasterror();
    -				dol_syslog("Error sql=".$sql." ".$this->error, LOG_ERR);
    -				$error++;
    -			}
    -		}
    -		if (! $error)
    -		{
    -		    $sql  = "DELETE FROM ".MAIN_DB_PREFIX."bank_class";
    -		    $sql .= " WHERE fk_categ = ".$this->id;
    -		    if (!$this->db->query($sql))
    -		    {
    -		        $this->error=$this->db->lasterror();
    -		        dol_syslog("Error sql=".$sql." ".$this->error, LOG_ERR);
    -		        $error++;
    -		    }
    -		}
     
    -		if (! $error)
    -		{
    -			$sql  = "DELETE FROM ".MAIN_DB_PREFIX."categorie_lang";
    -			$sql .= " WHERE fk_category = ".$this->id;
    -			if (!$this->db->query($sql))
    -			{
    -				$this->error=$this->db->lasterror();
    -				dol_syslog("Error sql=".$sql." ".$this->error, LOG_ERR);
    -				$error++;
    -			}
    -		}
    -
    -		// Delete category
    -		if (! $error)
    -		{
    -			$sql  = "DELETE FROM ".MAIN_DB_PREFIX."categorie";
    -			$sql .= " WHERE rowid = ".$this->id;
    -			if (!$this->db->query($sql))
    -			{
    -				$this->error=$this->db->lasterror();
    -				$error++;
    -			}
    -		}
    +        $arraydelete = array(
    +            'categorie_societe' => 'fk_categorie',
    +            'categorie_fournisseur' => 'fk_categorie',
    +            'categorie_product' => 'fk_categorie',
    +            'categorie_member' => 'fk_categorie',
    +            'categorie_contact' => 'fk_categorie',
    +            'categorie_account' => 'fk_categorie',
    +            'bank_class' => 'fk_categ',
    +            'categorie_lang' => 'fk_category',
    +            'categorie' => 'rowid',
    +        );
    +        foreach ($arraydelete as $key => $value) {
    +            $sql  = "DELETE FROM " . MAIN_DB_PREFIX . $key;
    +            $sql .= " WHERE ".$value." = ".$this->id;
    +            if (!$this->db->query($sql)) {
    +                $this->errors[] = $this->db->lasterror();
    +                dol_syslog("Error sql=".$sql." ".$this->error, LOG_ERR);
    +                $error++;
    +            }
    +        }
     
     		// Removed extrafields
     		if (! $error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
    @@ -628,6 +580,7 @@ class Categorie extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Link an object to the category
     	 *
    @@ -637,6 +590,7 @@ class Categorie extends CommonObject
     	 */
     	function add_type($obj, $type)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf;
     
     		$error=0;
    @@ -711,7 +665,6 @@ class Categorie extends CommonObject
     			    $this->db->rollback();
     			    return -2;
     			}
    -
     		}
     		else
     		{
    @@ -729,6 +682,7 @@ class Categorie extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Delete object from category
     	 *
    @@ -739,6 +693,7 @@ class Categorie extends CommonObject
     	 */
     	function del_type($obj,$type)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf;
     
     		$error=0;
    @@ -791,7 +746,7 @@ class Categorie extends CommonObject
     	 *
     	 * @param   string     $type       Type of category ('customer', 'supplier', 'contact', 'product', 'member')
     	 * @param   int        $onlyids    Return only ids of objects (consume less memory)
    -	 * @return  mixed                  -1 if KO, array of instance of object if OK
    +	 * @return  array|int              -1 if KO, array of instance of object if OK
     	 * @see containsObject
     	 */
     	function getObjectsInCateg($type, $onlyids=0)
    @@ -864,7 +819,7 @@ class Categorie extends CommonObject
     	 * @param	string	$sortorder	Sort order
     	 * @param	int		$limit		Limit for list
     	 * @param	int		$page		Page number
    -	 * @return	array				Array of categories
    +	 * @return	array|int			Array of categories, 0 if no cat, -1 on error
     	 */
     	function getListForItem($id, $type='customer', $sortfield = "s.rowid", $sortorder = 'ASC', $limit = 0, $page = 0)
     	{
    @@ -952,6 +907,7 @@ class Categorie extends CommonObject
     		return $categories;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return childs of a category
     	 *
    @@ -959,6 +915,7 @@ class Categorie extends CommonObject
     	 */
     	function get_filles()
     	{
    +        // phpcs:enable
     		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."categorie";
     		$sql.= " WHERE fk_parent = ".$this->id;
     
    @@ -981,6 +938,7 @@ class Categorie extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
     	/**
     	 * 	Load this->motherof that is array(id_son=>id_parent, ...)
     	 *
    @@ -988,6 +946,7 @@ class Categorie extends CommonObject
     	 */
     	private function load_motherof()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$this->motherof=array();
    @@ -1015,6 +974,7 @@ class Categorie extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Rebuilding the category tree as an array
     	 * Return an array of table('id','id_mere',...) trie selon arbre et avec:
    @@ -1028,10 +988,11 @@ class Categorie extends CommonObject
     	 * @param   string 	$type        	Type of categories ('customer', 'supplier', 'contact', 'product', 'member') or (0, 1, 2, ...).
     	 * @param   int    	$markafterid 	Removed all categories including the leaf $markafterid in category tree.
     	 *
    -	 * @return  array               	Array of categories. this->cats and this->motherof are set.
    +	 * @return  array|int               Array of categories. this->cats and this->motherof are set, -1 on error
     	 */
     	function get_full_arbo($type, $markafterid=0)
     	{
    +        // phpcs:enable
     	    global $conf, $langs;
     
     		if (! is_numeric($type)) $type = $this->MAP_ID[$type];
    @@ -1107,6 +1068,7 @@ class Categorie extends CommonObject
     		return $this->cats;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	For category id_categ and its childs available in this->cats, define property fullpath and fulllabel
     	 *
    @@ -1116,6 +1078,7 @@ class Categorie extends CommonObject
     	 */
     	function build_path_from_id_categ($id_categ,$protection=1000)
     	{
    +        // phpcs:enable
     		dol_syslog(get_class($this)."::build_path_from_id_categ id_categ=".$id_categ." protection=".$protection, LOG_DEBUG);
     
     		if (! empty($this->cats[$id_categ]['fullpath']))
    @@ -1149,6 +1112,7 @@ class Categorie extends CommonObject
     		return;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Display content of $this->cats
     	 *
    @@ -1156,6 +1120,7 @@ class Categorie extends CommonObject
     	 */
     	function debug_cats()
     	{
    +        // phpcs:enable
     		// Display $this->cats
     		foreach($this->cats as $key => $val)
     		{
    @@ -1170,15 +1135,17 @@ class Categorie extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Returns all categories
     	 *
     	 *	@param	int			$type		Type of category (0, 1, ...)
     	 *	@param	boolean		$parent		Just parent categories if true
    -	 *	@return	array					Table of Object Category
    +	 *	@return	array|int				Table of Object Category, -1 on error
     	 */
     	function get_all_categories($type=null, $parent=false)
     	{
    +        // phpcs:enable
     		if (! is_numeric($type)) $type = $this->MAP_ID[$type];
     
     		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."categorie";
    @@ -1207,6 +1174,7 @@ class Categorie extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Check if no category with same label already exists for this cat's parent or root and for this cat's type
     	 *
    @@ -1214,6 +1182,7 @@ class Categorie extends CommonObject
     	 */
     	function already_exists()
     	{
    +        // phpcs:enable
     		$type=$this->type;
     
     		if (! is_numeric($type)) $type=$this->MAP_ID[$type];
    @@ -1256,6 +1225,7 @@ class Categorie extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Returns the top level categories (which are not girls)
     	 *
    @@ -1264,9 +1234,11 @@ class Categorie extends CommonObject
     	 */
     	function get_main_categories($type=null)
     	{
    +        // phpcs:enable
     		return $this->get_all_categories($type, true);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Returns the path of the category, with the names of the categories
     	 * separated by $sep (" >> " by default)
    @@ -1278,6 +1250,7 @@ class Categorie extends CommonObject
     	 */
     	function print_all_ways($sep = " &gt;&gt; ", $url='', $nocolor=0)
     	{
    +        // phpcs:enable
     		$ways = array();
     
     		$allways = $this->get_all_ways(); // Load array of categories
    @@ -1324,6 +1297,7 @@ class Categorie extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Returns an array containing the list of parent categories
     	 *
    @@ -1331,6 +1305,7 @@ class Categorie extends CommonObject
     	 */
     	function get_meres()
     	{
    +        // phpcs:enable
     		$parents = array();
     
     		$sql = "SELECT fk_parent FROM ".MAIN_DB_PREFIX."categorie";
    @@ -1358,6 +1333,7 @@ class Categorie extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Returns in a table all possible paths to get to the category
     	 * 	starting with the major categories represented by Tables of categories
    @@ -1366,6 +1342,7 @@ class Categorie extends CommonObject
     	 */
     	function get_all_ways()
     	{
    +        // phpcs:enable
     		$ways = array();
     
     		$parents=$this->get_meres();
    @@ -1397,7 +1374,7 @@ class Categorie extends CommonObject
     	 * @param   string|int	$type   Type of category ('customer', 'supplier', 'contact', 'product', 'member') or (0, 1, 2, ...)
     	 * @param   string 		$mode   'id'=Get array of category ids, 'object'=Get array of fetched category instances, 'label'=Get array of category
     	 *                      	    labels, 'id'= Get array of category IDs
    -	 * @return  mixed           	Array of category objects or < 0 if KO
    +	 * @return  array|int           Array of category objects or < 0 if KO
     	 */
     	function containing($id, $type, $mode='object')
     	{
    @@ -1479,7 +1456,7 @@ class Categorie extends CommonObject
      	 * 	@param		string		$type		Type of category ('member', 'customer', 'supplier', 'product', 'contact'). Old mode (0, 1, 2, ...) is deprecated.
     	 * 	@param		boolean		$exact		Exact string search (true/false)
     	 * 	@param		boolean		$case		Case sensitive (true/false)
    -	 * 	@return		array					Array of category id
    +	 * 	@return		array|int				Array of category id, -1 if error
     	 */
     	function rechercher($id, $nom, $type, $exact = false, $case = false)
     	{
    @@ -1572,6 +1549,7 @@ class Categorie extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Deplace fichier uploade sous le nom $files dans le repertoire sdir
     	 *
    @@ -1581,6 +1559,7 @@ class Categorie extends CommonObject
     	 */
     	function add_photo($sdir, $file)
     	{
    +        // phpcs:enable
     		require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
     		$dir = $sdir .'/'. get_exdir($this->id,2,0,0,$this,'category') . $this->id ."/";
    @@ -1621,6 +1600,7 @@ class Categorie extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return tableau de toutes les photos de la categorie
     	 *
    @@ -1630,6 +1610,7 @@ class Categorie extends CommonObject
     	 */
     	function liste_photos($dir,$nbmax=0)
     	{
    +        // phpcs:enable
     		include_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php';
     
     		$nbphoto=0;
    @@ -1676,6 +1657,7 @@ class Categorie extends CommonObject
     		return $tabobj;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Efface la photo de la categorie et sa vignette
     	 *
    @@ -1684,6 +1666,7 @@ class Categorie extends CommonObject
     	 */
     	function delete_photo($file)
     	{
    +        // phpcs:enable
             require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
     	    $dir = dirname($file).'/'; // Chemin du dossier contenant l'image d'origine
    @@ -1704,6 +1687,7 @@ class Categorie extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Load size of image file
     	 *
    @@ -1712,6 +1696,7 @@ class Categorie extends CommonObject
     	 */
     	function get_image_size($file)
     	{
    +        // phpcs:enable
     		$infoImg = getimagesize($file); // Recuperation des infos de l'image
     		$this->imgWidth = $infoImg[0]; // Largeur de l'image
     		$this->imgHeight = $infoImg[1]; // Hauteur de l'image
    @@ -1825,7 +1810,6 @@ class Categorie extends CommonObject
     	            {
     	                $this->label		= $obj->label;
     	                $this->description	= $obj->description;
    -
     	            }
     	            $this->multilangs["$obj->lang"]["label"]		= $obj->label;
     	            $this->multilangs["$obj->lang"]["description"]	= $obj->description;
    diff --git a/htdocs/categories/edit.php b/htdocs/categories/edit.php
    index 1cde5e62adc..3f4bbad8192 100644
    --- a/htdocs/categories/edit.php
    +++ b/htdocs/categories/edit.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Matthieu Valleton    <mv@seeschloss.org>
      * Copyright (C) 2006-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007      Patrick Raguin	  	<patrick.raguin@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -192,7 +192,6 @@ print '<div class="center"><input type="submit" class="button" name"submit" valu
     
     print '</form>';
     
    -
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/categories/index.php b/htdocs/categories/index.php
    index 9f41c0b016a..b7e99e50ca0 100644
    --- a/htdocs/categories/index.php
    +++ b/htdocs/categories/index.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2005       Eric Seigne         <eric.seigne@ryxeo.com>
      * Copyright (C) 2006-2016  Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2007       Patrick Raguin      <patrick.raguin@gmail.com>
    - * Copyright (C) 2005-2012  Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -82,6 +82,8 @@ print '<div class="fichecenter"><div class="fichethirdleft">';
     print '<form method="post" action="index.php?type='.$type.'">';
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     print '<input type="hidden" name="type" value="'.$type.'">';
    +
    +
     print '<table class="noborder nohover" width="100%">';
     print '<tr class="liste_titre">';
     print '<td colspan="3">'.$langs->trans("Search").'</td>';
    @@ -173,6 +175,8 @@ foreach($fulltree as $key => $val)
     }
     
     
    +//print_barre_liste('', 0, $_SERVER["PHP_SELF"], '', '', '', '', 0, 0, '', 0, $newcardbutton, '', 0, 1, 1);
    +
     print '<table class="liste nohover" width="100%">';
     print '<tr class="liste_titre"><td>'.$langs->trans("Categories").'</td><td></td><td align="right">';
     if (! empty($conf->use_javascript_ajax))
    @@ -205,6 +209,6 @@ print "</table>";
     
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/categories/photos.php b/htdocs/categories/photos.php
    index 472a8eb9b95..72356b1e97e 100644
    --- a/htdocs/categories/photos.php
    +++ b/htdocs/categories/photos.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2007  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2005       Eric Seigne             <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2014       Jean-François Ferry     <jfefe@aternatik.fr>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
    @@ -69,7 +69,23 @@ if ($id > 0)
     if (isset($_FILES['userfile']) && $_FILES['userfile']['size'] > 0 && $_POST["sendit"] && ! empty($conf->global->MAIN_UPLOAD_DOC))
     {
         if ($object->id) {
    -	    $object->add_photo($upload_dir, $_FILES['userfile']);
    +
    +        $file = $_FILES['userfile'];
    +        if (is_array($file['name']) && count($file['name']) > 0)
    +        {
    +            foreach ($file['name'] as $i => $name)
    +            {
    +                if(empty($file['tmp_name'][$i]) || intval($conf->global->MAIN_UPLOAD_DOC) * 1000 <= filesize($file['tmp_name'][$i]) )
    +                {
    +                    setEventMessage($file['name'][$i] .' : '. $langs->trans(empty($file['tmp_name'][$i])? 'ErrorFailedToSaveFile' : 'MaxSizeForUploadedFiles' ) );
    +                    unset($file['name'][$i],$file['type'][$i],$file['tmp_name'][$i],$file['error'][$i],$file['size'][$i]);
    +                }
    +            }
    +        }
    +
    +        if(!empty($file['tmp_name'])) {
    +            $object->add_photo($upload_dir, $file);
    +        }
         }
     }
     
    @@ -273,6 +289,6 @@ else
         print $langs->trans("ErrorUnknown");
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/categories/traduction.php b/htdocs/categories/traduction.php
    index 7d71b43a81b..6783b565b99 100644
    --- a/htdocs/categories/traduction.php
    +++ b/htdocs/categories/traduction.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2007       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2010-2016  Destailleur Laurent     <eldy@users.sourceforge.net>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    @@ -269,7 +269,6 @@ if ($action == 'edit')
     	print '</div>';
     
     	print '</form>';
    -
     }
     else if ($action != 'add')
     {
    @@ -334,5 +333,6 @@ if ($action == 'add' && ($user->rights->produit->creer || $user->rights->service
     	print '<br>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/categories/viewcat.php b/htdocs/categories/viewcat.php
    index 24e70e7d587..2092c6c52c5 100644
    --- a/htdocs/categories/viewcat.php
    +++ b/htdocs/categories/viewcat.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2005       Matthieu Valleton	<mv@seeschloss.org>
      * Copyright (C) 2006-2015  Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2007       Patrick Raguin		<patrick.raguin@gmail.com>
    - * Copyright (C) 2005-2012  Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -168,7 +168,6 @@ if ($type == Categorie::TYPE_PRODUCT && $elemid && $action == 'addintocategory'
     			setEventMessages($object->error,$object->errors,'errors');
     		}
     	}
    -
     }
     
     
    @@ -697,6 +696,6 @@ if ($type == Categorie::TYPE_PROJECT)
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/collab/index.php b/htdocs/collab/index.php
    index 2c056cd0e07..e7b2ab51d7c 100644
    --- a/htdocs/collab/index.php
    +++ b/htdocs/collab/index.php
    @@ -28,9 +28,8 @@ require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
    -$langs->load("admin");
    -$langs->load("other");
    -$langs->load("website");
    +// Load translation files required by the page
    +$langs->loadLangs(array("admin","other","website"));
     
     if (! $user->admin) accessforbidden();
     
    @@ -456,9 +455,6 @@ if ($action == 'editcontent')
     
     print "</div>\n</form>\n";
     
    -
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/action/card.php b/htdocs/comm/action/card.php
    index 470a90c355f..22648189f99 100644
    --- a/htdocs/comm/action/card.php
    +++ b/htdocs/comm/action/card.php
    @@ -2,11 +2,12 @@
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Simon TOSSER         <simon@kornog-computing.com>
    - * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2013 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2013      Florian Henry        <florian.henry@open-concept.pro>
      * Copyright (C) 2014      Cedric GROSS         <c.gross@kreiz-it.fr>
    - * Copyright (C) 2015	   Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2015       Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -39,6 +40,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     
    @@ -250,6 +252,19 @@ if ($action == 'add')
     			}
     		}
     		$object->fk_project = isset($_POST["projectid"])?$_POST["projectid"]:0;
    +
    +		$taskid = GETPOST('taskid','int');
    +		if(!empty($taskid)){
    +
    +		    $taskProject = new Task($db);
    +		    if($taskProject->fetch($taskid)>0){
    +		        $object->fk_project = $taskProject->fk_project;
    +		    }
    +
    +		    $object->fk_element = $taskid;
    +		    $object->elementtype = 'task';
    +		}
    +
     		$object->datep = $datep;
     		$object->datef = $datef;
     		$object->percentage = $percentage;
    @@ -582,7 +597,6 @@ if (GETPOST('actionmove','alpha') == 'mupdate')
         {
             $action='';
         }
    -
     }
     
     // Actions to delete doc
    @@ -689,9 +703,13 @@ if ($action == 'create')
     	$datep=($datep?$datep:$object->datep);
     	if (GETPOST('datep','int',1)) $datep=dol_stringtotime(GETPOST('datep','int',1),0);
     	print '<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans("DateActionStart").'</span></td><td>';
    -	if (GETPOST("afaire") == 1) $form->select_date($datep,'ap',1,1,0,"action",1,1,0,0,'fulldayend');
    -	else if (GETPOST("afaire") == 2) $form->select_date($datep,'ap',1,1,1,"action",1,1,0,0,'fulldayend');
    -	else $form->select_date($datep,'ap',1,1,1,"action",1,1,0,0,'fulldaystart');
    +	if (GETPOST("afaire") == 1) {
    +        print $form->selectDate($datep, 'ap', 1, 1, 0, "action", 1, 1, 0, 'fulldayend');
    +    } elseif (GETPOST("afaire") == 2) {
    +        print $form->selectDate($datep, 'ap', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
    +    } else {
    +        print $form->selectDate($datep, 'ap', 1, 1, 1, "action", 1, 1, 0, 'fulldaystart');
    +    }
     	print '</td></tr>';
     
     	// Date end
    @@ -702,12 +720,17 @@ if ($action == 'create')
     		$datef=dol_time_plus_duree($datep, $conf->global->AGENDA_AUTOSET_END_DATE_WITH_DELTA_HOURS, 'h');
     	}
     	print '<tr><td><span id="dateend"'.(GETPOST("actioncode") == 'AC_RDV'?' class="fieldrequired"':'').'>'.$langs->trans("DateActionEnd").'</span></td><td>';
    -	if (GETPOST("afaire") == 1) $form->select_date($datef,'p2',1,1,1,"action",1,1,0,0,'fulldayend');
    -	else if (GETPOST("afaire") == 2) $form->select_date($datef,'p2',1,1,1,"action",1,1,0,0,'fulldayend');
    -	else $form->select_date($datef,'p2',1,1,1,"action",1,1,0,0,'fulldayend');
    +	if (GETPOST("afaire") == 1) {
    +        print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
    +    } elseif (GETPOST("afaire") == 2) {
    +        print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
    +    } else {
    +        print $form->selectDate($datef, 'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
    +    }
     	print '</td></tr>';
     
    -	$userepeatevent=($conf->global->MAIN_FEATURES_LEVEL == 2 ? 1 : 0);	// Dev in progress
    +    // Dev in progress
    +	$userepeatevent=($conf->global->MAIN_FEATURES_LEVEL == 2 ? 1 : 0);
     	if ($userepeatevent)
     	{
     		// Repeat
    @@ -849,7 +872,6 @@ if ($action == 'create')
     			} else {
     				print $form->select_company('', 'socid', '', 'SelectThirdParty', 1, 0, $events, 0, 'minwidth300');
     			}
    -
     		}
     		print '</td></tr>';
     
    @@ -867,10 +889,37 @@ if ($action == 'create')
     		// Projet associe
     		$langs->load("projects");
     
    -		print '<tr><td class="titlefieldcreate">'.$langs->trans("Project").'</td><td>';
    +		$projectid = GETPOST('projectid', 'int');
    +
    +		print '<tr><td class="titlefieldcreate">'.$langs->trans("Project").'</td><td id="project-input-container" >';
    +
    +		$numproject=$formproject->select_projects((! empty($societe->id)?$societe->id:-1), $projectid, 'projectid', 0, 0, 1, 1);
     
    -		$numproject=$formproject->select_projects((! empty($societe->id)?$societe->id:-1), GETPOST("projectid")?GETPOST("projectid"):'', 'projectid', 0, 0, 1, 1);
     		print ' &nbsp; <a href="'.DOL_URL_ROOT.'/projet/card.php?socid='.$societe->id.'&action=create">'.$langs->trans("AddProject").'</a>';
    +		$urloption='?action=create';
    +		$url = dol_buildpath('comm/action/card.php',2).$urloption;
    +
    +		// update task list
    +		print "\n".'<script type="text/javascript">';
    +		print '$(document).ready(function () {
    +	               $("#projectid").change(function () {
    +                        var url = "'.$url.'&projectid="+$("#projectid").val();
    +                        $.get(url, function(data) {
    +                            console.log($( data ).find("#taskid").html());
    +                            if (data) $("#taskid").html( $( data ).find("#taskid").html() ).select2();
    +                        })
    +                  });
    +               })';
    +		print '</script>'."\n";
    +
    +		print '</td></tr>';
    +
    +		print '<tr><td class="titlefieldcreate">'.$langs->trans("Task").'</td><td id="project-task-input-container" >';
    +
    +		$projectsListId=false;
    +		if(!empty($projectid)){ $projectsListId=$projectid; }
    +		$tid=GETPOST("projecttaskid")?GETPOST("projecttaskid"):'';
    +		$formproject->selectTasks((! empty($societe->id)?$societe->id:-1), $tid, 'taskid', 24, 0, '1', 1, 0, 0, 'maxwidth500',$projectsListId);
     		print '</td></tr>';
     	}
     	if (!empty($origin) && !empty($originid))
    @@ -1057,30 +1106,38 @@ if ($id > 0)
     
     		// Date start
     		print '<tr><td class="nowrap"><span class="fieldrequired">'.$langs->trans("DateActionStart").'</span></td><td colspan="3">';
    -		if (GETPOST("afaire") == 1) $form->select_date($datep?$datep:$object->datep,'ap',1,1,0,"action",1,1,0,0,'fulldaystart');
    -		else if (GETPOST("afaire") == 2) $form->select_date($datep?$datep:$object->datep,'ap',1,1,1,"action",1,1,0,0,'fulldaystart');
    -		else $form->select_date($datep?$datep:$object->datep,'ap',1,1,1,"action",1,1,0,0,'fulldaystart');
    +		if (GETPOST("afaire") == 1) {
    +            print $form->selectDate($datep?$datep:$object->datep, 'ap', 1, 1, 0, "action", 1, 1, 0, 'fulldaystart');
    +        } elseif (GETPOST("afaire") == 2) {
    +            print $form->selectDate($datep?$datep:$object->datep, 'ap', 1, 1, 1, "action", 1, 1, 0, 'fulldaystart');
    +        } else {
    +            print $form->selectDate($datep?$datep:$object->datep, 'ap', 1, 1, 1, "action", 1, 1, 0, 'fulldaystart');
    +        }
     		print '</td></tr>';
     		// Date end
     		print '<tr><td>'.$langs->trans("DateActionEnd").'</td><td colspan="3">';
    -		if (GETPOST("afaire") == 1) $form->select_date($datef?$datef:$object->datef,'p2',1,1,1,"action",1,1,0,0,'fulldayend');
    -		else if (GETPOST("afaire") == 2) $form->select_date($datef?$datef:$object->datef,'p2',1,1,1,"action",1,1,0,0,'fulldayend');
    -		//else $form->select_date($datef?$datef:$object->datef,'p2',1,1,1,"action",1,1,0,0,'fulldayend','ap');
    -		else $form->select_date($datef?$datef:$object->datef,'p2',1,1,1,"action",1,1,0,0,'fulldayend');
    +		if (GETPOST("afaire") == 1) {
    +            print $form->selectDate($datef?$datef:$object->datef, 'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
    +        } elseif (GETPOST("afaire") == 2) {
    +            print $form->selectDate($datef?$datef:$object->datef,'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
    +        } else {
    +            print $form->selectDate($datef?$datef:$object->datef,'p2', 1, 1, 1, "action", 1, 1, 0, 'fulldayend');
    +        }
     		print '</td></tr>';
     
    -		$userepeatevent=($conf->global->MAIN_FEATURES_LEVEL == 2 ? 1 : 0);	// Dev in progress
    +        // Dev in progress
    +		$userepeatevent=($conf->global->MAIN_FEATURES_LEVEL == 2 ? 1 : 0);
     		if ($userepeatevent)
     		{
     			// Repeat
     			print '<tr><td>'.$langs->trans("RepeatEvent").'</td><td colspan="3">';
     			print '<input type="hidden" name="recurid" value="'.$object->recurid.'">';
    -			$arrayrecurrulefreq=array(
    -					'no'=>$langs->trans("No"),
    -					'MONTHLY'=>$langs->trans("EveryMonth"),
    -					'WEEKLY'=>$langs->trans("EveryWeek"),
    -					//'DAYLY'=>$langs->trans("EveryDay")
    -					);
    +			$arrayrecurrulefreq = array(
    +				'no'=>$langs->trans("No"),
    +				'MONTHLY'=>$langs->trans("EveryMonth"),
    +				'WEEKLY'=>$langs->trans("EveryWeek"),
    +				//'DAYLY'=>$langs->trans("EveryDay"),
    +			);
     			$selectedrecurrulefreq='no';
     			$selectedrecurrulebymonthday='';
     			$selectedrecurrulebyday='';
    @@ -1173,7 +1230,7 @@ if ($id > 0)
     	    		$listofuserid=json_decode($_SESSION['assignedtouser'], true);
     	    	}
     	    }
    -	    $listofcontactid=$object->socpeopleassigned;	// Contact assigned (not used yet)
    +	    $listofcontactid=$object->socpeopleassigned;	// Contact assigned
     	    $listofotherid=$object->otherassigned;			// Other undefined email (not used yet)
     
     	    print '<tr><td class="tdtop nowrap fieldrequired">'.$langs->trans("ActionAssignedTo").'</td><td colspan="3">';
    @@ -1245,17 +1302,47 @@ if ($id > 0)
     		print '<tr><td class="titlefieldcreate nowrap">'.$langs->trans("Priority").'</td><td>';
     		print '<input type="text" name="priority" value="'.($object->priority?$object->priority:'').'" size="5">';
     		print '</td></tr>';
    -
     		// Object linked
     		if (! empty($object->fk_element) && ! empty($object->elementtype))
     		{
     			include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
                 print '<tr>';
     			print '<td>'.$langs->trans("LinkedObject").'</td>';
    -			print '<td>'.dolGetElementUrl($object->fk_element,$object->elementtype,1);
    -			print '<input type="hidden" name="fk_element" value="'.$object->fk_element.'">';
    -			print '<input type="hidden" name="elementtype" value="'.$object->elementtype.'">';
    -			print '</td>';
    +
    +			if ($object->elementtype == 'task' && ! empty($conf->projet->enabled))
    +			{
    +			    print '<td id="project-task-input-container" >';
    +
    +			    $urloption='?action=create'; // we use create not edit for more flexibility
    +			    $url = DOL_URL_ROOT.'/comm/action/card.php'.$urloption;
    +
    +			    // update task list
    +			    print "\n".'<script type="text/javascript" >';
    +			    print '$(document).ready(function () {
    +	               $("#projectid").change(function () {
    +                        var url = "'.$url.'&projectid="+$("#projectid").val();
    +                        $.get(url, function(data) {
    +                            console.log($( data ).find("#fk_element").html());
    +                            if (data) $("#fk_element").html( $( data ).find("#taskid").html() ).select2();
    +                        })
    +                  });
    +               })';
    +			    print '</script>'."\n";
    +
    +			    $formproject->selectTasks((! empty($societe->id)?$societe->id:-1), $object->fk_element, 'fk_element', 24, 0, 0, 1, 0, 0, 'maxwidth500',$object->fk_project);
    +			    print '<input type="hidden" name="elementtype" value="'.$object->elementtype.'">';
    +
    +			    print '</td>';
    +			}
    +			else
    +			{
    +			    print '<td>';
    +			    print dolGetElementUrl($object->fk_element,$object->elementtype,1);
    +			    print '<input type="hidden" name="fk_element" value="'.$object->fk_element.'">';
    +			    print '<input type="hidden" name="elementtype" value="'.$object->elementtype.'">';
    +			    print '</td>';
    +			}
    +
     			print '</tr>';
     		}
     
    @@ -1522,8 +1609,9 @@ if ($id > 0)
     		print ($object->priority?$object->priority:'');
     		print '</td></tr>';
     
    -		// Object linked
    -		if (! empty($object->fk_element) && ! empty($object->elementtype))
    +		// Object linked (if link is for thirdparty, contact, project it is a recording error. We should not have links in link table
    +		// for such objects because there is already a dedicated field into table llx_actioncomm.
    +		if (! empty($object->fk_element) && ! empty($object->elementtype) && ! in_array($object->elementtype, array('societe','contact','project')))
     		{
     			include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     			print '<tr><td>'.$langs->trans("LinkedObject").'</td>';
    @@ -1625,7 +1713,6 @@ if ($id > 0)
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php
    index be8ad550b39..aef77513e7b 100644
    --- a/htdocs/comm/action/class/actioncomm.class.php
    +++ b/htdocs/comm/action/class/actioncomm.class.php
    @@ -1,9 +1,11 @@
     <?php
    -/* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2011-2017 Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2015	   Marcos García		<marcosgdf@gmail.com>
    +/* Copyright (C) 2002-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2011  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2011-2017  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2015	    Marcos García		    <marcosgdf@gmail.com>
    + * Copyright (C) 2018	    Nicolas ZABOURI	        <info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,15 +35,29 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class ActionComm extends CommonObject
     {
    +    /**
    +     * @var string ID to identify managed object
    +     */
         public $element='action';
    +
    +    /**
    +     * @var string Name of table without prefix where object is stored
    +     */
         public $table_element = 'actioncomm';
    +
         public $table_rowid = 'id';
    -    public $picto='action';
    +
    +    /**
    +     * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +     */
    +    public $picto = 'action';
    +
         /**
          * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
          * @var int
          */
         public $ismultientitymanaged = 1;
    +
         /**
          * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user, 2=Same than 1 but accept record if fksoc is empty
          * @var integer
    @@ -52,7 +68,7 @@ class ActionComm extends CommonObject
          * Id of the event
          * @var int
          */
    -    var $id;
    +    public $id;
     
         /**
          * Id of the event. Use $id as possible
    @@ -60,23 +76,20 @@ class ActionComm extends CommonObject
          */
         public $ref;
     
    -    var $type_id;		// Id into parent table llx_c_actioncomm (used only if option to use type is set)
    -    var $type_code;		// Code into parent table llx_c_actioncomm (used only if option to use type is set). With default setup, should be AC_OTH_AUTO or AC_OTH.
    -    var $type;			// Label into parent table llx_c_actioncomm (used only if option to use type is set)
    -    var $type_color;	// Color into parent table llx_c_actioncomm (used only if option to use type is set)
    -    var $code;			// Free code to identify action. Ie: Agenda trigger add here AC_TRIGGERNAME ('AC_COMPANY_CREATE', 'AC_PROPAL_VALIDATE', ...)
    -
    -    var $label;
    +    public $type_id;		// Id into parent table llx_c_actioncomm (used only if option to use type is set)
    +    public $type_code;		// Code into parent table llx_c_actioncomm (used only if option to use type is set). With default setup, should be AC_OTH_AUTO or AC_OTH.
    +    public $type_label;
    +    public $type;			// Label into parent table llx_c_actioncomm (used only if option to use type is set)
    +    public $type_color;	// Color into parent table llx_c_actioncomm (used only if option to use type is set)
    +    public $code;			// Free code to identify action. Ie: Agenda trigger add here AC_TRIGGERNAME ('AC_COMPANY_CREATE', 'AC_PROPAL_VALIDATE', ...)
     
         /**
    -     * @var string
    -     * @deprecated Use $label
    -     * @see label
    +     * @var string Agenda event label
          */
    -    public $libelle;
    +    public $label;
     
    -    var $datec;			// Date creation record (datec)
    -    var $datem;			// Date modification record (tms)
    +    public $datec;			// Date creation record (datec)
    +    public $datem;			// Date modification record (tms)
     
         /**
          * Object user that create action
    @@ -84,7 +97,7 @@ class ActionComm extends CommonObject
          * @deprecated
          * @see authorid
          */
    -    var $author;
    +    public $author;
     
         /**
          * Object user that modified action
    @@ -92,39 +105,49 @@ class ActionComm extends CommonObject
          * @deprecated
          * @see usermodid
          */
    -    var $usermod;
    -    var $authorid;		// Id user that create action
    -    var $usermodid;		// Id user that modified action
    +    public $usermod;
     
    -    var $datep;			// Date action start (datep)
    -    var $datef;			// Date action end (datep2)
    +    /**
    +     * Id user that create action
    +     * @var int
    +     */
    +    public $authorid;
    +
    +    /**
    +     * Id user that modified action
    +     * @var int
    +     */
    +    public $usermodid;
    +
    +    public $datep;			// Date action start (datep)
    +    public $datef;			// Date action end (datep2)
     
         /**
          * @var int -1=Unkown duration
          * @deprecated
          */
    -    var $durationp = -1;
    -    var $fulldayevent = 0;    // 1=Event on full day
    +    public $durationp = -1;
    +    public $fulldayevent = 0;    // 1=Event on full day
     
         /**
          * Milestone
          * @var int
          * @deprecated Milestone is already event with end date = start date
          */
    -    var $punctual = 1;
    -    var $percentage;    // Percentage
    -    var $location;      // Location
    +    public $punctual = 1;
    +    public $percentage;    // Percentage
    +    public $location;      // Location
     
    -	var $transparency;	// Transparency (ical standard). Used to say if people assigned to event are busy or not by event. 0=available, 1=busy, 2=busy (refused events)
    -    var $priority;      // Small int (0 By default)
    +	public $transparency;	// Transparency (ical standard). Used to say if people assigned to event are busy or not by event. 0=available, 1=busy, 2=busy (refused events)
    +    public $priority;      // Small int (0 By default)
     
    -	var $userassigned = array();	// Array of user ids
    -    var $userownerid;	// Id of user owner = fk_user_action into table
    -    var $userdoneid;	// Id of user done (deprecated)
    +	public $userassigned = array();	// Array of user ids
    +    public $userownerid;	// Id of user owner = fk_user_action into table
    +    public $userdoneid;	// Id of user done (deprecated)
     
    -    var $socpeopleassigned = array(); // Array of contact ids
    +    public $socpeopleassigned = array(); // Array of contact ids
     
    -    var $otherassigned = array(); // Array of other contact emails (not user, not contact)
    +    public $otherassigned = array(); // Array of other contact emails (not user, not contact)
     
     
     	/**
    @@ -133,7 +156,7 @@ class ActionComm extends CommonObject
          * @deprecated
          * @see userownerid
          */
    -    var $usertodo;
    +    public $usertodo;
     
         /**
          * Object user that did action
    @@ -141,10 +164,10 @@ class ActionComm extends CommonObject
          * @deprecated
          * @see userdoneid
          */
    -    var $userdone;
    +    public $userdone;
     
    -    var $socid;
    -    var $contactid;
    +    public $socid;
    +    public $contactid;
     
         /**
          * Company linked to action (optional)
    @@ -152,7 +175,7 @@ class ActionComm extends CommonObject
          * @deprecated
          * @see socid
          */
    -    var $societe;
    +    public $societe;
     
         /**
          * Contact linked to action (optional)
    @@ -160,28 +183,28 @@ class ActionComm extends CommonObject
          * @deprecated
          * @see contactid
          */
    -    var $contact;
    +    public $contact;
     
         // Properties for links to other objects
    -    var $fk_element;    // Id of record
    -    var $elementid;    // Id of record alternative for API
    -    var $elementtype;   // Type of record. This if property ->element of object linked to.
    +    public $fk_element;    // Id of record
    +    public $elementid;    // Id of record alternative for API
    +    public $elementtype;   // Type of record. This if property ->element of object linked to.
     
         // Ical
    -    var $icalname;
    -    var $icalcolor;
    +    public $icalname;
    +    public $icalcolor;
     
    -    var $actions=array();
    +    public $actions=array();
     
         // Fields for emails
    -    var $email_msgid;
    -    var $email_from;
    -    var $email_sender;
    -    var $email_to;
    -    var $email_tocc;
    -    var $email_tobcc;
    -    var $email_subject;
    -    var $errors_to;
    +    public $email_msgid;
    +    public $email_from;
    +    public $email_sender;
    +    public $email_to;
    +    public $email_tocc;
    +    public $email_tobcc;
    +    public $email_subject;
    +    public $errors_to;
     
     
         /**
    @@ -311,7 +334,16 @@ class ActionComm extends CommonObject
             $sql.= "fk_element,";
             $sql.= "elementtype,";
             $sql.= "entity,";
    -        $sql.= "extraparams";
    +        $sql.= "extraparams,";
    +		// Fields emails
    +        $sql.= "email_msgid,";
    +        $sql.= "email_from,";
    +        $sql.= "email_sender,";
    +        $sql.= "email_to,";
    +        $sql.= "email_tocc,";
    +        $sql.= "email_tobcc,";
    +        $sql.= "email_subject,";
    +        $sql.= "errors_to";
             $sql.= ") VALUES (";
             $sql.= "'".$this->db->idate($now)."', ";
             $sql.= (strval($this->datep)!=''?"'".$this->db->idate($this->datep)."'":"null").", ";
    @@ -321,7 +353,7 @@ class ActionComm extends CommonObject
             $sql.= ($code?("'".$code."'"):"null").", ";
             $sql.= ((isset($this->socid) && $this->socid > 0) ? $this->socid:"null").", ";
             $sql.= ((isset($this->fk_project) && $this->fk_project > 0) ? $this->fk_project:"null").", ";
    -        $sql.= " '".$this->db->escape($this->note)."', ";
    +        $sql.= " '".$this->db->escape($this->note_private?$this->note_private:$this->note)."', ";
             $sql.= ((isset($this->contactid) && $this->contactid > 0) ? $this->contactid:"null").", ";
             $sql.= (isset($user->id) && $user->id > 0 ? $user->id:"null").", ";
             $sql.= ($userownerid>0 ? $userownerid:"null").", ";
    @@ -331,7 +363,16 @@ class ActionComm extends CommonObject
             $sql.= (! empty($this->fk_element)?$this->fk_element:"null").", ";
             $sql.= (! empty($this->elementtype)?"'".$this->db->escape($this->elementtype)."'":"null").", ";
             $sql.= $conf->entity.",";
    -        $sql.= (! empty($this->extraparams)?"'".$this->db->escape($this->extraparams)."'":"null");
    +        $sql.= (! empty($this->extraparams)?"'".$this->db->escape($this->extraparams)."'":"null").", ";
    +        // Fields emails
    +        $sql.= (! empty($this->email_msgid)?"'".$this->db->escape($this->email_msgid)."'":"null").", ";
    +        $sql.= (! empty($this->email_from)?"'".$this->db->escape($this->email_from)."'":"null").", ";
    +        $sql.= (! empty($this->email_sender)?"'".$this->db->escape($this->email_sender)."'":"null").", ";
    +        $sql.= (! empty($this->email_to)?"'".$this->db->escape($this->email_to)."'":"null").", ";
    +        $sql.= (! empty($this->email_tocc)?"'".$this->db->escape($this->email_tocc)."'":"null").", ";
    +        $sql.= (! empty($this->email_tobcc)?"'".$this->db->escape($this->email_tobcc)."'":"null").", ";
    +        $sql.= (! empty($this->email_subject)?"'".$this->db->escape($this->email_subject)."'":"null").", ";
    +        $sql.= (! empty($this->errors_to)?"'".$this->db->escape($this->errors_to)."'":"null");
             $sql.= ")";
     
             dol_syslog(get_class($this)."::add", LOG_DEBUG);
    @@ -378,7 +419,6 @@ class ActionComm extends CommonObject
     							$error++;
     							$this->errors[]=$this->db->lasterror();
     						}
    -
     					}
     				}
     			}
    @@ -423,7 +463,6 @@ class ActionComm extends CommonObject
                 $this->error=$this->db->lasterror();
                 return -1;
             }
    -
         }
     
     	/**
    @@ -592,6 +631,7 @@ class ActionComm extends CommonObject
                     $this->datem   				= $this->db->jdate($obj->datem);
     
                     $this->note					= $obj->note;
    +                $this->note_private			= $obj->note;
                     $this->percentage			= $obj->percentage;
     
                     $this->authorid             = $obj->fk_user_author;
    @@ -634,7 +674,6 @@ class ActionComm extends CommonObject
             }
     
             return $num;
    -
         }
     
     	/**
    @@ -682,6 +721,7 @@ class ActionComm extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Initialize this->userassigned array with list of id of user assigned to event
          *
    @@ -689,6 +729,7 @@ class ActionComm extends CommonObject
          */
         function fetch_userassigned()
         {
    +        // phpcs:enable
             $sql ="SELECT fk_actioncomm, element_type, fk_element, answer_status, mandatory, transparency";
     		$sql.=" FROM ".MAIN_DB_PREFIX."actioncomm_resources";
     		$sql.=" WHERE element_type = 'user' AND fk_actioncomm = ".$this->id;
    @@ -840,7 +881,7 @@ class ActionComm extends CommonObject
             $sql.= ", datep = ".(strval($this->datep)!='' ? "'".$this->db->idate($this->datep)."'" : 'null');
             $sql.= ", datep2 = ".(strval($this->datef)!='' ? "'".$this->db->idate($this->datef)."'" : 'null');
             $sql.= ", durationp = ".(isset($this->durationp) && $this->durationp >= 0 && $this->durationp != ''?"'".$this->db->escape($this->durationp)."'":"null");	// deprecated
    -        $sql.= ", note = ".($this->note ? "'".$this->db->escape($this->note)."'":"null");
    +        $sql.= ", note = '".$this->db->escape($this->note_private?$this->note_private:$this->note)."'";
             $sql.= ", fk_project =". ($this->fk_project > 0 ? $this->fk_project:"null");
             $sql.= ", fk_soc =". ($socid > 0 ? $socid:"null");
             $sql.= ", fk_contact =". ($contactid > 0 ? $contactid:"null");
    @@ -913,7 +954,6 @@ class ActionComm extends CommonObject
     							$error++;
     							$this->errors[]=$this->db->lasterror();
     						}
    -
     					}
     				}
     			}
    @@ -1004,6 +1044,7 @@ class ActionComm extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Load indicators for dashboard (this->nbtodo and this->nbtodolate)
          *
    @@ -1013,7 +1054,8 @@ class ActionComm extends CommonObject
          */
         function load_board($user, $load_state_board=0)
         {
    -    	global $conf, $langs;
    +        // phpcs:enable
    +        global $conf, $langs;
     
         	if(empty($load_state_board)) $sql = "SELECT a.id, a.datep as dp";
         	else {
    @@ -1128,6 +1170,7 @@ class ActionComm extends CommonObject
             return $this->LibStatut($this->percentage,$mode,$hidenastatus,$this->datep);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *		Return label of action status
          *
    @@ -1139,63 +1182,64 @@ class ActionComm extends CommonObject
          */
         function LibStatut($percent,$mode,$hidenastatus=0,$datestart='')
         {
    +        // phpcs:enable
             global $langs;
     
             if ($mode == 0)
             {
             	if ($percent==-1 && ! $hidenastatus) return $langs->trans('StatusNotApplicable');
    -        	else if ($percent==0) return $langs->trans('StatusActionToDo').' (0%)';
    -        	else if ($percent > 0 && $percent < 100) return $langs->trans('StatusActionInProcess').' ('.$percent.'%)';
    -        	else if ($percent >= 100) return $langs->trans('StatusActionDone').' (100%)';
    +        	elseif ($percent==0) return $langs->trans('StatusActionToDo').' (0%)';
    +        	elseif ($percent > 0 && $percent < 100) return $langs->trans('StatusActionInProcess').' ('.$percent.'%)';
    +        	elseif ($percent >= 100) return $langs->trans('StatusActionDone').' (100%)';
             }
    -        else if ($mode == 1)
    +        elseif ($mode == 1)
             {
             	if ($percent==-1 && ! $hidenastatus) return $langs->trans('StatusNotApplicable');
    -        	else if ($percent==0) return $langs->trans('StatusActionToDo');
    -        	else if ($percent > 0 && $percent < 100) return $percent.'%';
    -        	else if ($percent >= 100) return $langs->trans('StatusActionDone');
    +        	elseif ($percent==0) return $langs->trans('StatusActionToDo');
    +        	elseif ($percent > 0 && $percent < 100) return $percent.'%';
    +        	elseif ($percent >= 100) return $langs->trans('StatusActionDone');
             }
    -        else if ($mode == 2)
    +        elseif ($mode == 2)
             {
             	if ($percent==-1 && ! $hidenastatus) return img_picto($langs->trans('StatusNotApplicable'),'statut9').' '.$langs->trans('StatusNotApplicable');
    -        	else if ($percent==0) return img_picto($langs->trans('StatusActionToDo'),'statut1').' '.$langs->trans('StatusActionToDo');
    -        	else if ($percent > 0 && $percent < 100) return img_picto($langs->trans('StatusActionInProcess'),'statut3').' '. $percent.'%';
    -        	else if ($percent >= 100) return img_picto($langs->trans('StatusActionDone'),'statut6').' '.$langs->trans('StatusActionDone');
    +        	elseif ($percent==0) return img_picto($langs->trans('StatusActionToDo'),'statut1').' '.$langs->trans('StatusActionToDo');
    +        	elseif ($percent > 0 && $percent < 100) return img_picto($langs->trans('StatusActionInProcess'),'statut3').' '. $percent.'%';
    +        	elseif ($percent >= 100) return img_picto($langs->trans('StatusActionDone'),'statut6').' '.$langs->trans('StatusActionDone');
             }
    -        else if ($mode == 3)
    +        elseif ($mode == 3)
             {
             	if ($percent==-1 && ! $hidenastatus) return img_picto($langs->trans("Status").': '.$langs->trans('StatusNotApplicable'),'statut9');
    -        	else if ($percent==0) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionToDo').' (0%)','statut1');
    -        	else if ($percent > 0 && $percent < 100) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionInProcess').' ('.$percent.'%)','statut3');
    -        	else if ($percent >= 100) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionDone').' (100%)','statut6');
    +        	elseif ($percent==0) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionToDo').' (0%)','statut1');
    +        	elseif ($percent > 0 && $percent < 100) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionInProcess').' ('.$percent.'%)','statut3');
    +        	elseif ($percent >= 100) return img_picto($langs->trans("Status").': '.$langs->trans('StatusActionDone').' (100%)','statut6');
             }
    -        else if ($mode == 4)
    +        elseif ($mode == 4)
             {
             	if ($percent==-1 && ! $hidenastatus) return img_picto($langs->trans('StatusNotApplicable'),'statut9').' '.$langs->trans('StatusNotApplicable');
    -        	else if ($percent==0) return img_picto($langs->trans('StatusActionToDo'),'statut1').' '.$langs->trans('StatusActionToDo').' (0%)';
    -        	else if ($percent > 0 && $percent < 100) return img_picto($langs->trans('StatusActionInProcess'),'statut3').' '.$langs->trans('StatusActionInProcess').' ('.$percent.'%)';
    -        	else if ($percent >= 100) return img_picto($langs->trans('StatusActionDone'),'statut6').' '.$langs->trans('StatusActionDone').' (100%)';
    +        	elseif ($percent==0) return img_picto($langs->trans('StatusActionToDo'),'statut1').' '.$langs->trans('StatusActionToDo').' (0%)';
    +        	elseif ($percent > 0 && $percent < 100) return img_picto($langs->trans('StatusActionInProcess'),'statut3').' '.$langs->trans('StatusActionInProcess').' ('.$percent.'%)';
    +        	elseif ($percent >= 100) return img_picto($langs->trans('StatusActionDone'),'statut6').' '.$langs->trans('StatusActionDone').' (100%)';
             }
    -        else if ($mode == 5)
    +        elseif ($mode == 5)
             {
             	if ($percent==-1 && ! $hidenastatus) return img_picto($langs->trans('StatusNotApplicable'),'statut9');
    -        	else if ($percent==0) return '0% '.img_picto($langs->trans('StatusActionToDo'),'statut1');
    -        	else if ($percent > 0 && $percent < 100) return $percent.'% '.img_picto($langs->trans('StatusActionInProcess').' - '.$percent.'%','statut3');
    -        	else if ($percent >= 100) return $langs->trans('StatusActionDone').' '.img_picto($langs->trans('StatusActionDone'),'statut6');
    +        	elseif ($percent==0) return '0% '.img_picto($langs->trans('StatusActionToDo'),'statut1');
    +        	elseif ($percent > 0 && $percent < 100) return $percent.'% '.img_picto($langs->trans('StatusActionInProcess').' - '.$percent.'%','statut3');
    +        	elseif ($percent >= 100) return $langs->trans('StatusActionDone').' '.img_picto($langs->trans('StatusActionDone'),'statut6');
             }
    -        else if ($mode == 6)
    +        elseif ($mode == 6)
             {
             	if ($percent==-1 && ! $hidenastatus) return $langs->trans('StatusNotApplicable').' '.img_picto($langs->trans('StatusNotApplicable'),'statut9');
    -        	else if ($percent==0) return $langs->trans('StatusActionToDo').' (0%) '.img_picto($langs->trans('StatusActionToDo'),'statut1');
    -        	else if ($percent > 0 && $percent < 100) return $langs->trans('StatusActionInProcess').' ('.$percent.'%) '.img_picto($langs->trans('StatusActionInProcess').' - '.$percent.'%','statut3');
    -        	else if ($percent >= 100) return $langs->trans('StatusActionDone').' (100%) '.img_picto($langs->trans('StatusActionDone'),'statut6');
    +        	elseif ($percent==0) return $langs->trans('StatusActionToDo').' (0%) '.img_picto($langs->trans('StatusActionToDo'),'statut1');
    +        	elseif ($percent > 0 && $percent < 100) return $langs->trans('StatusActionInProcess').' ('.$percent.'%) '.img_picto($langs->trans('StatusActionInProcess').' - '.$percent.'%','statut3');
    +        	elseif ($percent >= 100) return $langs->trans('StatusActionDone').' (100%) '.img_picto($langs->trans('StatusActionDone'),'statut6');
             }
    -        else if ($mode == 7)
    +        elseif ($mode == 7)
             {
                 if ($percent==-1 && ! $hidenastatus) return img_picto($langs->trans('StatusNotApplicable'),'statut9');
    -            else if ($percent==0) return '0% '.img_picto($langs->trans('StatusActionToDo'),'statut1');
    -            else if ($percent > 0 && $percent < 100) return $percent.'% '.img_picto($langs->trans('StatusActionInProcess').' - '.$percent.'%','statut3');
    -            else if ($percent >= 100) return img_picto($langs->trans('StatusActionDone'),'statut6');
    +            elseif ($percent==0) return '0% '.img_picto($langs->trans('StatusActionToDo'),'statut1');
    +            elseif ($percent > 0 && $percent < 100) return $percent.'% '.img_picto($langs->trans('StatusActionInProcess').' - '.$percent.'%','statut3');
    +            elseif ($percent >= 100) return img_picto($langs->trans('StatusActionDone'),'statut6');
             }
     
             return '';
    @@ -1220,7 +1264,10 @@ class ActionComm extends CommonObject
     
     		if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
     
    -		$label = $this->label;
    +                if ((!$user->rights->agenda->allactions->read && $this->author->id != $user->id) || (!$user->rights->agenda->myactions->read && $this->author->id == $user->id))
    +                    $option = 'nolink';
    +
    +                $label = $this->label;
     		if (empty($label)) $label=$this->libelle;   // For backward compatibility
     
     		$result='';
    @@ -1286,6 +1333,10 @@ class ActionComm extends CommonObject
     		$linkstart.=$linkclose.'>';
     		$linkend='</a>';
     
    +		if ($option == 'nolink') {
    +			$linkstart = '';
    +			$linkend = '';
    +		}
     		//print 'rrr'.$this->libelle.'rrr'.$this->label.'rrr'.$withpicto;
     
             if ($withpicto == 2)
    @@ -1329,6 +1380,7 @@ class ActionComm extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *		Export events from database into a cal file.
          *
    @@ -1341,11 +1393,12 @@ class ActionComm extends CommonObject
          */
         function build_exportfile($format,$type,$cachedelay,$filename,$filters)
         {
    +        // phpcs:enable
             global $conf,$langs,$dolibarr_main_url_root,$mysoc;
     
    -        require_once (DOL_DOCUMENT_ROOT ."/core/lib/xcal.lib.php");
    -        require_once (DOL_DOCUMENT_ROOT ."/core/lib/date.lib.php");
    -        require_once (DOL_DOCUMENT_ROOT ."/core/lib/files.lib.php");
    +        require_once DOL_DOCUMENT_ROOT ."/core/lib/xcal.lib.php";
    +        require_once DOL_DOCUMENT_ROOT ."/core/lib/date.lib.php";
    +        require_once DOL_DOCUMENT_ROOT ."/core/lib/files.lib.php";
     
             dol_syslog(get_class($this)."::build_exportfile Build export file format=".$format.", type=".$type.", cachedelay=".$cachedelay.", filename=".$filename.", filters size=".count($filters), LOG_DEBUG);
     
    @@ -1533,8 +1586,8 @@ class ActionComm extends CommonObject
     
                 // Write file
                 if ($format == 'vcal') $result=build_calfile($format,$title,$desc,$eventarray,$outputfiletmp);
    -            if ($format == 'ical') $result=build_calfile($format,$title,$desc,$eventarray,$outputfiletmp);
    -            if ($format == 'rss')  $result=build_rssfile($format,$title,$desc,$eventarray,$outputfiletmp);
    +            elseif ($format == 'ical') $result=build_calfile($format,$title,$desc,$eventarray,$outputfiletmp);
    +            elseif ($format == 'rss')  $result=build_rssfile($format,$title,$desc,$eventarray,$outputfiletmp);
     
                 if ($result >= 0)
                 {
    @@ -1644,7 +1697,13 @@ class ActionComm extends CommonObject
         	$this->output = '';
     		$this->error='';
     
    -    	if (empty($conf->global->AGENDA_REMINDER_EMAIL))
    +    	if (empty($conf->agenda->enabled))	// Should not happen. If module disabled, cron job should not be visible.
    +		{
    +			$langs->load("agenda");
    +			$this->output = $langs->trans('ModuleNotEnabled', $langs->transnoentitiesnoconv("Agenda"));
    +			return 0;
    +		}
    +		if (empty($conf->global->AGENDA_REMINDER_EMAIL))
         	{
         		$langs->load("agenda");
         		$this->output = $langs->trans('EventRemindersByEmailNotEnabled', $langs->transnoentitiesnoconv("Agenda"));
    @@ -1659,8 +1718,6 @@ class ActionComm extends CommonObject
     
     		// TODO Scan events of type 'email' into table llx_actioncomm_reminder with status todo, send email, then set status to done
     
    -
    -
         	// Delete also very old past events (we do not keep more than 1 month record in past)
     		$sql = "DELETE FROM ".MAIN_DB_PREFIX."actioncomm_reminder WHERE dateremind < '".$this->db->jdate($now - (3600 * 24 * 32))."'";
     		$this->db->query($sql);
    @@ -1669,6 +1726,4 @@ class ActionComm extends CommonObject
     
         	return $error;
         }
    -
     }
    -
    diff --git a/htdocs/comm/action/class/actioncommreminder.class.php b/htdocs/comm/action/class/actioncommreminder.class.php
    index 4873db461f6..6631d0e375d 100644
    --- a/htdocs/comm/action/class/actioncommreminder.class.php
    +++ b/htdocs/comm/action/class/actioncommreminder.class.php
    @@ -34,14 +34,17 @@ class ActionCommReminder extends CommonObject
     	 * @var string ID to identify managed object
     	 */
     	public $element = 'actioncomm_reminder';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'actioncomm_reminder';
    +
     	/**
     	 * @var array  Does actioncommreminder support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 */
     	public $ismultientitymanaged = 0;
    +
     	/**
     	 * @var string String with name of icon for actioncommreminder. Must be the part after the 'object_' into object_actioncommreminder.png
     	 */
    @@ -78,13 +81,28 @@ class ActionCommReminder extends CommonObject
     		'offsetunit' => array('type'=>'varchar(1)', 'label'=>'OffsetUnit', 'visible'=>1, 'enabled'=>1, 'position'=>57, 'notnull'=>1, 'comment'=>"m, h, d, w",),
     		'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'notnull'=>1, 'default'=>0, 'index'=>0, 'arrayofkeyval'=>array('0'=>'ToDo', '1'=>'Done')),
     	);
    +
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
    +
     	public $dateremind;
     	public $typeremind;
    +
    +	/**
    +	 * @var int User ID
    +	 */
     	public $fk_user;
    +
     	public $offsetvalue;
     	public $offsetunit;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
    +
     	// END MODULEBUILDER PROPERTIES
     
     
    @@ -165,6 +183,7 @@ class ActionCommReminder extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return the status
     	 *
    @@ -174,43 +193,38 @@ class ActionCommReminder extends CommonObject
     	 */
     	static function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
    -		if ($mode == 0)
    -		{
    -			$prefix='';
    -			if ($status == 1) return $langs->trans('Done');
    -			if ($status == 0) return $langs->trans('ToDo');
    -		}
    -		if ($mode == 1)
    +		if ($mode == 0 || $mode == 1)
     		{
     			if ($status == 1) return $langs->trans('Done');
    -			if ($status == 0) return $langs->trans('ToDo');
    +			elseif ($status == 0) return $langs->trans('ToDo');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 1) return img_picto($langs->trans('Done'),'statut4').' '.$langs->trans('Done');
    -			if ($status == 0) return img_picto($langs->trans('ToDo'),'statut5').' '.$langs->trans('ToDo');
    +			elseif ($status == 0) return img_picto($langs->trans('ToDo'),'statut5').' '.$langs->trans('ToDo');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 1) return img_picto($langs->trans('Done'),'statut4');
    -			if ($status == 0) return img_picto($langs->trans('ToDo'),'statut5');
    +			elseif ($status == 0) return img_picto($langs->trans('ToDo'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 1) return img_picto($langs->trans('Done'),'statut4').' '.$langs->trans('Done');
    -			if ($status == 0) return img_picto($langs->trans('ToDo'),'statut5').' '.$langs->trans('ToDo');
    +			elseif ($status == 0) return img_picto($langs->trans('ToDo'),'statut5').' '.$langs->trans('ToDo');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 1) return $langs->trans('Done').' '.img_picto($langs->trans('Done'),'statut4');
    -			if ($status == 0) return $langs->trans('ToDo').' '.img_picto($langs->trans('ToDo'),'statut5');
    +			elseif ($status == 0) return $langs->trans('ToDo').' '.img_picto($langs->trans('ToDo'),'statut5');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($status == 1) return $langs->trans('Done').' '.img_picto($langs->trans('Done'),'statut4');
    -			if ($status == 0) return $langs->trans('ToDo').' '.img_picto($langs->trans('ToDo'),'statut5');
    +			elseif ($status == 0) return $langs->trans('ToDo').' '.img_picto($langs->trans('ToDo'),'statut5');
     		}
     	}
     
    @@ -224,6 +238,4 @@ class ActionCommReminder extends CommonObject
     	{
     		$this->initAsSpecimenCommon();
     	}
    -
     }
    -
    diff --git a/htdocs/comm/action/class/api_agendaevents.class.php b/htdocs/comm/action/class/api_agendaevents.class.php
    index f5d9c7db762..1e9dde34bde 100644
    --- a/htdocs/comm/action/class/api_agendaevents.class.php
    +++ b/htdocs/comm/action/class/api_agendaevents.class.php
    @@ -46,8 +46,8 @@ class AgendaEvents extends DolibarrApi
          */
         function __construct()
         {
    -		global $db, $conf;
    -		$this->db = $db;
    +        global $db, $conf;
    +        $this->db = $db;
             $this->actioncomm = new ActionComm($this->db);
         }
     
    @@ -99,13 +99,14 @@ class AgendaEvents extends DolibarrApi
          * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.label:like:'%dol%') and (t.datec:<:'20160101')"
          * @return  array               Array of Agenda Events objects
          */
    -    function index($sortfield = "t.id", $sortorder = 'ASC', $limit = 100, $page = 0, $user_ids = 0, $sqlfilters = '') {
    +    function index($sortfield = "t.id", $sortorder = 'ASC', $limit = 100, $page = 0, $user_ids = 0, $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
     
             if (! DolibarrApiAccess::$user->rights->agenda->myactions->read) {
    -        	throw new RestException(401, "Insuffisant rights to read events");
    +            throw new RestException(401, "Insuffisant rights to read events");
             }
     
             // case of external user
    @@ -218,7 +219,7 @@ class AgendaEvents extends DolibarrApi
     
     
         /**
    -     * Update Agenda Event general fields (won't touch lines of expensereport)
    +     * Update Agenda Event general fields
          *
          * @param int   $id             Id of Agenda Event to update
          * @param array $request_data   Datas
    @@ -226,7 +227,8 @@ class AgendaEvents extends DolibarrApi
          * @return int
          */
         /*
    -    function put($id, $request_data = null) {
    +    function put($id, $request_data = null)
    +    {
           if (! DolibarrApiAccess::$user->rights->agenda->myactions->create) {
     			  throw new RestException(401, "Insuffisant rights to create your Agenda Event");
     		  }
    @@ -234,20 +236,20 @@ class AgendaEvents extends DolibarrApi
     		      throw new RestException(401, "Insuffisant rights to create an Agenda Event for owner id ".$request_data['userownerid'].' Your id is '.DolibarrApiAccess::$user->id);
     		  }
     
    -        $result = $this->expensereport->fetch($id);
    +        $result = $this->actioncomm->fetch($id);
             if ( ! $result ) {
    -            throw new RestException(404, 'expensereport not found');
    +            throw new RestException(404, 'actioncomm not found');
             }
     
    -		if ( ! DolibarrApi::_checkAccessToResource('expensereport',$this->expensereport->id)) {
    +		if ( ! DolibarrApi::_checkAccessToResource('actioncomm',$this->actioncomm->id)) {
     			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
     		}
             foreach($request_data as $field => $value) {
                 if ($field == 'id') continue;
    -            $this->expensereport->$field = $value;
    +            $this->actioncomm->$field = $value;
             }
     
    -        if ($this->expensereport->update($id, DolibarrApiAccess::$user,1,'','','update'))
    +        if ($this->actioncomm->update($id, DolibarrApiAccess::$user,1,'','','update'))
                 return $this->get($id);
     
             return false;
    @@ -291,7 +293,6 @@ class AgendaEvents extends DolibarrApi
                     'message' => 'Agenda Event deleted'
                 )
             );
    -
         }
     
         /**
    @@ -308,7 +309,6 @@ class AgendaEvents extends DolibarrApi
                 if (!isset($data[$field]))
                     throw new RestException(400, "$field field missing");
                 $event[$field] = $data[$field];
    -
             }
             return $event;
         }
    @@ -319,7 +319,8 @@ class AgendaEvents extends DolibarrApi
          * @param	object	$object		Object to clean
          * @return	array				Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
         	$object = parent::_cleanObjectDatas($object);
     
    diff --git a/htdocs/comm/action/class/cactioncomm.class.php b/htdocs/comm/action/class/cactioncomm.class.php
    index d8496a9a4ff..d6c25f6d4c1 100644
    --- a/htdocs/comm/action/class/cactioncomm.class.php
    +++ b/htdocs/comm/action/class/cactioncomm.class.php
    @@ -24,24 +24,43 @@
     
     
     /**
    - *		Class to manage different types of events
    + *      Class to manage different types of events
      */
     class CActionComm
     {
    -    var $error;
    -    var $db;
    +    /**
    +     * @var string Error code (or message)
    +     */
    +    public $error='';
     
    -    var $id;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -    var $code;
    -    var $type;
    -    var $libelle;       // deprecated
    -    var $label;
    -    var $active;
    -    var $color;
    -    var $picto;
    +    /**
    +     * @var int ID
    +     */
    +    public $id;
     
    -    var $type_actions=array();
    +    public $code;
    +    public $type;
    +    public $libelle;       // deprecated
    +
    +    /**
    +     * @var string Type of agenda event label
    +     */
    +    public $label;
    +
    +    public $active;
    +    public $color;
    +
    +    /**
    +     * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +     */
    +    public $picto;
    +
    +    public $type_actions=array();
     
     
         /**
    @@ -99,6 +118,7 @@ class CActionComm
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return list of event types: array(id=>label) or array(code=>label)
          *
    @@ -112,6 +132,7 @@ class CActionComm
          */
         function liste_array($active='',$idorcode='id',$excludetype='',$onlyautoornot=0, $morefilter='', $shortlabel=0)
         {
    +        // phpcs:enable
             global $langs,$conf;
             $langs->load("commercial");
     
    @@ -210,5 +231,4 @@ class CActionComm
             $transcode=$langs->trans("Action".$this->code);
             if ($transcode != "Action".$this->code) return $transcode;
         }
    -
     }
    diff --git a/htdocs/comm/action/class/ical.class.php b/htdocs/comm/action/class/ical.class.php
    index 708b52c9151..f3a7af8fc11 100644
    --- a/htdocs/comm/action/class/ical.class.php
    +++ b/htdocs/comm/action/class/ical.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2006      Roman Ozana			<ozana@omdesign.cz>
      * Copyright (C) 2011	   Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2013-2014 Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012	   Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012	   Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,7 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/xcal.lib.php';
     
     
     /**
    - *		Class to read/parse ICal calendars
    + *  Class to read/parse ICal calendars
      */
     class ICal
     {
    @@ -39,15 +39,15 @@ class ICal
         var $last_key; //Help variable save last key (multiline string)
     
     
    -	/**
    -	 * Constructor
    -	 */
    -	public function __construct()
    -	{
    +    /**
    +     * Constructor
    +     */
    +    public function __construct()
    +    {
    +    }
     
    -	}
    -
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          * Read text file, icalender text file
          *
          * @param 	string 	$file		File
    @@ -55,6 +55,7 @@ class ICal
          */
         function read_file($file)
         {
    +        // phpcs:enable
             $this->file = $file;
             $file_text='';
     
    @@ -67,6 +68,7 @@ class ICal
             return $file_text; // return all text
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Returns the number of calendar events
          *
    @@ -74,9 +76,11 @@ class ICal
          */
         function get_event_count()
         {
    +        // phpcs:enable
             return $this->event_count;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Returns the number of to do
          *
    @@ -84,6 +88,7 @@ class ICal
          */
         function get_todo_count()
         {
    +        // phpcs:enable
             return $this->todo_count;
         }
     
    @@ -195,6 +200,7 @@ class ICal
             return $this->cal;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Add to $this->ical array one value and key.
          *
    @@ -205,6 +211,7 @@ class ICal
          */
         function add_to_array($type, $key, $value)
         {
    +        // phpcs:enable
     
             //print 'type='.$type.' key='.$key.' value='.$value.'<br>'."\n";
     
    @@ -255,6 +262,7 @@ class ICal
             $this->last_key = $key;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Parse text "XXXX:value text some with : " and return array($key = "XXXX", $value="value");
          *
    @@ -263,7 +271,8 @@ class ICal
          */
         function retun_key_value($text)
         {
    -    	/*
    +        // phpcs:enable
    +        /*
             preg_match("/([^:]+)[:]([\w\W]+)/", $text, $matches);
     
             if (empty($matches))
    @@ -275,9 +284,10 @@ class ICal
                 $matches = array_splice($matches, 1, 2);
                 return $matches;
             }*/
    -		return explode(':',$text,2);
    +        return explode(':',$text,2);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Parse RRULE  return array
          *
    @@ -286,7 +296,8 @@ class ICal
          */
         function ical_rrule($value)
         {
    -    	$result=array();
    +        // phpcs:enable
    +        $result = array();
             $rrule = explode(';',$value);
             foreach ($rrule as $line)
             {
    @@ -295,6 +306,8 @@ class ICal
             }
             return $result;
         }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return Unix time from ical date time fomrat (YYYYMMDD[T]HHMMSS[Z] or YYYYMMDD[T]HHMMSS)
          *
    @@ -303,6 +316,7 @@ class ICal
          */
         function ical_date_to_unix($ical_date)
         {
    +        // phpcs:enable
             $ical_date = str_replace('T', '', $ical_date);
             $ical_date = str_replace('Z', '', $ical_date);
     
    @@ -316,6 +330,7 @@ class ICal
             return $ntime;      // ntime is a GTM time
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return unix date from iCal date format
          *
    @@ -325,7 +340,8 @@ class ICal
          */
         function ical_dt_date($key, $value)
         {
    -    	$return_value=array();
    +        // phpcs:enable
    +        $return_value = array();
             $value = $this->ical_date_to_unix($value);
     
             // Analyse TZID
    @@ -345,6 +361,7 @@ class ICal
             return array($key,$return_value);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return sorted eventlist as array or false if calenar is empty
          *
    @@ -352,6 +369,7 @@ class ICal
          */
         function get_sort_event_list()
         {
    +        // phpcs:enable
             $temp = $this->get_event_list();
             if (!empty($temp))
             {
    @@ -364,6 +382,7 @@ class ICal
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Compare two unix timestamp
          *
    @@ -373,9 +392,11 @@ class ICal
          */
         function ical_dtstart_compare($a, $b)
         {
    +        // phpcs:enable
             return strnatcasecmp($a['DTSTART']['unixtime'], $b['DTSTART']['unixtime']);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return eventlist array (not sort eventlist array)
          *
    @@ -383,9 +404,11 @@ class ICal
          */
         function get_event_list()
         {
    +        // phpcs:enable
             return (! empty($this->cal['VEVENT'])?$this->cal['VEVENT']:'');
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return eventlist array (not sort eventlist array)
          *
    @@ -393,9 +416,11 @@ class ICal
          */
         function get_freebusy_list()
         {
    +        // phpcs:enable
             return $this->cal['VFREEBUSY'];
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return to do array (not sort to do array)
          *
    @@ -403,9 +428,11 @@ class ICal
          */
         function get_todo_list()
         {
    +        // phpcs:enable
             return $this->cal['VTODO'];
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return base calendar data
          *
    @@ -413,9 +440,11 @@ class ICal
          */
         function get_calender_data()
         {
    +        // phpcs:enable
             return $this->cal['VCALENDAR'];
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return array with all data
          *
    @@ -423,6 +452,7 @@ class ICal
          */
         function get_all_data()
         {
    +        // phpcs:enable
             return $this->cal;
         }
     }
    diff --git a/htdocs/comm/action/document.php b/htdocs/comm/action/document.php
    index 43e5b89f115..a22a5c411f3 100644
    --- a/htdocs/comm/action/document.php
    +++ b/htdocs/comm/action/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
      *
    @@ -239,7 +239,7 @@ if ($object->id > 0)
     
     	print '<table class="border" width="100%">';
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -268,7 +268,6 @@ else
     	print $langs->trans("ErrorUnknown");
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php
    index c361d275882..a411bf0c0a1 100644
    --- a/htdocs/comm/action/index.php
    +++ b/htdocs/comm/action/index.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Eric Seigne          <erics@rycks.com>
      * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2014      Cedric GROSS         <c.gross@kreiz-it.fr>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    @@ -44,9 +44,9 @@ if (! isset($conf->global->AGENDA_MAX_EVENTS_DAY_VIEW)) $conf->global->AGENDA_MA
     if (empty($conf->global->AGENDA_EXT_NB)) $conf->global->AGENDA_EXT_NB=5;
     $MAXAGENDA=$conf->global->AGENDA_EXT_NB;
     
    -$filter = GETPOST("filter",'alpha',3);
    -$filtert = GETPOST("filtert","int",3);
    -$usergroup = GETPOST("usergroup","int",3);
    +$filter = GETPOST("search_filter",'alpha',3)?GETPOST("search_filter",'alpha',3):GETPOST("filter",'alpha',3);
    +$filtert = GETPOST("search_filtert","int",3)?GETPOST("search_filtert","int",3):GETPOST("filtert","int",3);
    +$usergroup = GETPOST("search_usergroup","int",3)?GETPOST("search_usergroup","int",3):GETPOST("usergroup","int",3);
     $showbirthday = empty($conf->use_javascript_ajax)?GETPOST("showbirthday","int"):1;
     
     // If not choice done on calendar owner (like on left menu link "Agenda"), we filter on user.
    @@ -65,7 +65,7 @@ if (! $sortorder) $sortorder="ASC";
     if (! $sortfield) $sortfield="a.datec";
     
     // Security check
    -$socid = GETPOST("socid","int");
    +$socid = GETPOST("search_socid","int")?GETPOST("search_socid","int"):GETPOST("socid","int");
     if ($user->societe_id) $socid=$user->societe_id;
     $result = restrictedArea($user, 'agenda', 0, '', 'myactions');
     if ($socid < 0) $socid='';
    @@ -79,42 +79,45 @@ if (! $user->rights->agenda->allactions->read || $filter =='mine')  // If no per
     }
     
     $action=GETPOST('action','alpha');
    -$resourceid=GETPOST("resourceid","int");
    +$resourceid=GETPOST("search_resourceid","int");
     $year=GETPOST("year","int")?GETPOST("year","int"):date("Y");
     $month=GETPOST("month","int")?GETPOST("month","int"):date("m");
     $week=GETPOST("week","int")?GETPOST("week","int"):date("W");
    -$day=GETPOST("day","int")?GETPOST("day","int"):0;
    -$pid=GETPOST("projectid","int",3);
    -$status=GETPOST("status",'aZ09');		// status may be 0, 50, 100, 'todo'
    -$type=GETPOST("type",'az09');
    +$day=GETPOST("day","int")?GETPOST("day","int"):date("d");
    +$pid=GETPOST("search_projectid","int",3)?GETPOST("search_projectid","int",3):GETPOST("projectid","int",3);
    +$status=GETPOST("search_status",'aZ09')?GETPOST("search_status",'aZ09'):GETPOST("status",'aZ09');		// status may be 0, 50, 100, 'todo'
    +$type=GETPOST("search_type",'az09')?GETPOST("search_type",'az09'):GETPOST("type",'az09');
     $maxprint=(isset($_GET["maxprint"])?GETPOST("maxprint"):$conf->global->AGENDA_MAX_EVENTS_DAY_VIEW);
     // Set actioncode (this code must be same for setting actioncode into peruser, listacton and index)
    -if (GETPOST('actioncode','array'))
    +if (GETPOST('search_actioncode','array'))
     {
    -    $actioncode=GETPOST('actioncode','array',3);
    +    $actioncode=GETPOST('search_actioncode','array',3);
         if (! count($actioncode)) $actioncode='0';
     }
     else
     {
    -    $actioncode=GETPOST("actioncode","alpha",3)?GETPOST("actioncode","alpha",3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE));
    +    $actioncode=GETPOST("search_actioncode","alpha",3)?GETPOST("search_actioncode","alpha",3):(GETPOST("search_actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE));
     }
     if ($actioncode == '' && empty($actioncodearray)) $actioncode=(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE);
     
    -if ($status == ''   && ! isset($_GET['status']) && ! isset($_POST['status'])) $status=(empty($conf->global->AGENDA_DEFAULT_FILTER_STATUS)?'':$conf->global->AGENDA_DEFAULT_FILTER_STATUS);
    -if (empty($action) && ! isset($_GET['action']) && ! isset($_POST['action'])) $action=(empty($conf->global->AGENDA_DEFAULT_VIEW)?'show_month':$conf->global->AGENDA_DEFAULT_VIEW);
    -if ($action == 'default')
    +if ($status == ''   && ! GETPOSTISSET('search_status')) $status=(empty($conf->global->AGENDA_DEFAULT_FILTER_STATUS)?'':$conf->global->AGENDA_DEFAULT_FILTER_STATUS);
    +
    +$defaultview = (empty($conf->global->AGENDA_DEFAULT_VIEW) ? 'show_month' : $conf->global->AGENDA_DEFAULT_VIEW);
    +$defaultview = (empty($user->conf->AGENDA_DEFAULT_VIEW) ? $defaultview : $user->conf->AGENDA_DEFAULT_VIEW);
    +if (empty($action) && ! GETPOSTISSET('action','alpha')) $action=$defaultview;
    +if ($action == 'default')	// When action is default, we want a calendar view and not the list
     {
    -	$action = ((! empty($conf->global->AGENDA_DEFAULT_VIEW) && $conf->global->AGENDA_DEFAULT_VIEW!='show_list') ? $conf->global->AGENDA_DEFAULT_VIEW : 'show_month');
    +	$action = (($defaultview != 'show_list') ? $defaultview : 'show_month');
     }
    -if (GETPOST('viewcal') && $action != 'show_day' && $action != 'show_week')  {
    +if (GETPOST('viewcal','none') && GETPOST('action','alpha') != 'show_day' && GETPOST('action','alpha') != 'show_week')  {
         $action='show_month'; $day='';
    -}                                                   // View by month
    -if (GETPOST('viewweek') || $action == 'show_week') {
    +} // View by month
    +if (GETPOST('viewweek','none') || GETPOST('action','alpha') == 'show_week') {
         $action='show_week'; $week=($week?$week:date("W")); $day=($day?$day:date("d"));
    -}  // View by week
    -if (GETPOST('viewday') || $action == 'show_day')  {
    +} // View by week
    +if (GETPOST('viewday','none') || GETPOST('action','alpha') == 'show_day')  {
         $action='show_day'; $day=($day?$day:date("d"));
    -}                                  // View by day
    +} // View by day
     
     // Load translation files required by the page
     $langs->loadLangs(array('agenda', 'other', 'commercial'));
    @@ -298,21 +301,22 @@ if ($status == 'done') $title=$langs->trans("DoneActions");
     if ($status == 'todo') $title=$langs->trans("ToDoActions");
     
     $param='';
    -if ($actioncode || isset($_GET['actioncode']) || isset($_POST['actioncode'])) {
    +if ($actioncode || isset($_GET['search_actioncode']) || isset($_POST['search_actioncode'])) {
     	if(is_array($actioncode)) {
    -		foreach($actioncode as $str_action) $param.="&actioncode[]=".$str_action;
    -	} else $param.="&actioncode=".$actioncode;
    +		foreach($actioncode as $str_action) $param.="&search_actioncode[]=".urlencode($str_action);
    +	} else $param.="&search_actioncode=".urlencode($actioncode);
     }
    -if ($resourceid > 0)  $param.="&resourceid=".$resourceid;
    -if ($status || isset($_GET['status']) || isset($_POST['status'])) $param.="&status=".$status;
    -if ($filter)  $param.="&filter=".$filter;
    -if ($filtert) $param.="&filtert=".$filtert;
    -if ($socid)   $param.="&socid=".$socid;
    -if ($showbirthday) $param.="&showbirthday=1";
    -if ($pid)     $param.="&projectid=".$pid;
    -if ($type)   $param.="&type=".$type;
    -if ($action == 'show_day' || $action == 'show_week' || $action == 'show_month') $param.='&action='.$action;
    -$param.="&maxprint=".$maxprint;
    +if ($resourceid > 0)  $param.="&search_resourceid=".urlencode($resourceid);
    +if ($status || isset($_GET['status']) || isset($_POST['status'])) $param.="&search_status=".urlencode($status);
    +if ($filter)       $param.="&search_filter=".urlencode($filter);
    +if ($filtert)      $param.="&search_filtert=".urlencode($filtert);
    +if ($usergroup)    $param.="&search_usergroup=".urlencode($usergroup);
    +if ($socid)        $param.="&search_socid=".urlencode($socid);
    +if ($showbirthday) $param.="&search_showbirthday=1";
    +if ($pid)          $param.="&search_projectid=".urlencode($pid);
    +if ($type)         $param.="&search_type=".urlencode($type);
    +if ($action == 'show_day' || $action == 'show_week' || $action == 'show_month') $param.='&action='.urlencode($action);
    +$param.="&maxprint=".urlencode($maxprint);
     
     // Show navigation bar
     if (empty($action) || $action=='show_month')
    @@ -663,7 +667,6 @@ if ($resql)
                 //print ' startincalendar='.dol_print_date($event->date_start_in_calendar).'-endincalendar='.dol_print_date($event->date_end_in_calendar).') was added in '.$j.' different index key of array<br>';
             }
             $i++;
    -
         }
     }
     else
    @@ -1250,8 +1253,8 @@ else    // View by day
     
     print "\n".'</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
     
     
    @@ -1593,13 +1596,13 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
                                     $cachecontacts[$event->contact->id]=$contact;
                                 }
                                 else $contact=$cachecontacts[$event->contact->id];
    -                            if ($linerelatedto) $linerelatedto.=' / ';
    +                            if ($linerelatedto) $linerelatedto.='&nbsp;';
                                 if (! empty($contact->id)) $linerelatedto.=$contact->getNomUrl(1,'',0);
                             }
                             if (! empty($event->fk_element) && $event->fk_element > 0 && ! empty($event->elementtype) && ! empty($conf->global->AGENDA_SHOW_LINKED_OBJECT))
                             {
                                 include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    -                            if ($linerelatedto) $linerelatedto.=' / ';
    +                            if ($linerelatedto) $linerelatedto.='<br>';
                                 $linerelatedto.=dolGetElementUrl($event->fk_element,$event->elementtype,1);
                             }
                             if ($linerelatedto) print '<br>'.$linerelatedto;
    diff --git a/htdocs/comm/action/info.php b/htdocs/comm/action/info.php
    index 9a043a13690..2582e9b6b32 100644
    --- a/htdocs/comm/action/info.php
    +++ b/htdocs/comm/action/info.php
    @@ -114,5 +114,6 @@ print '</td></tr></table>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/action/list.php b/htdocs/comm/action/list.php
    index 2c11a1de977..2186a19bf04 100644
    --- a/htdocs/comm/action/list.php
    +++ b/htdocs/comm/action/list.php
    @@ -2,8 +2,9 @@
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Eric Seigne          <erics@rycks.com>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2017      Open-DSI             <support@open-dsi.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -40,23 +41,23 @@ $langs->loadLangs(array("users","companies","agenda","commercial"));
     
     $action=GETPOST('action','alpha');
     $contextpage=GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'actioncommlist';   // To manage different context of search
    -$resourceid=GETPOST("resourceid","int");
    +$resourceid=GETPOST("search_resourceid","int")?GETPOST("search_resourceid","int"):GETPOST("resourceid","int");
    +$pid=GETPOST("search_projectid",'int',3)?GETPOST("search_projectid",'int',3):GETPOST("projectid",'int',3);
    +$status=GETPOST("search_status",'alpha')?GETPOST("search_status",'alpha'):GETPOST("status",'alpha');
    +$type=GETPOST('search_type','alphanohtml')?GETPOST('search_type','alphanohtml'):GETPOST('type','alphanohtml');
    +$optioncss = GETPOST('optioncss','alpha');
     $year=GETPOST("year",'int');
     $month=GETPOST("month",'int');
     $day=GETPOST("day",'int');
    -$pid=GETPOST("projectid",'int',3);
    -$status=GETPOST("status",'alpha');
    -$type=GETPOST('type','alphanohtml');
    -$optioncss = GETPOST('optioncss','alpha');
     // Set actioncode (this code must be same for setting actioncode into peruser, listacton and index)
    -if (GETPOST('actioncode','array'))
    +if (GETPOST('search_actioncode','array'))
     {
    -    $actioncode=GETPOST('actioncode','array',3);
    +    $actioncode=GETPOST('search_actioncode','array',3);
         if (! count($actioncode)) $actioncode='0';
     }
     else
     {
    -    $actioncode=GETPOST("actioncode","alpha",3)?GETPOST("actioncode","alpha",3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE));
    +    $actioncode=GETPOST("search_actioncode","alpha",3)?GETPOST("search_actioncode","alpha",3):(GETPOST("search_actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE));
     }
     if ($actioncode == '' && empty($actioncodearray)) $actioncode=(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE);
     $search_id=GETPOST('search_id','alpha');
    @@ -68,15 +69,19 @@ $dateend=dol_mktime(0, 0, 0, GETPOST('dateendmonth','int'), GETPOST('dateendday'
     if ($status == ''   && ! isset($_GET['status']) && ! isset($_POST['status'])) $status=(empty($conf->global->AGENDA_DEFAULT_FILTER_STATUS)?'':$conf->global->AGENDA_DEFAULT_FILTER_STATUS);
     if (empty($action) && ! isset($_GET['action']) && ! isset($_POST['action'])) $action=(empty($conf->global->AGENDA_DEFAULT_VIEW)?'show_month':$conf->global->AGENDA_DEFAULT_VIEW);
     
    -$filter = GETPOST("filter",'alpha',3);
    -$filtert = GETPOST("filtert","int",3);
    -$usergroup = GETPOST("usergroup","int",3);
    -$showbirthday = empty($conf->use_javascript_ajax)?GETPOST("showbirthday","int"):1;
    +$filter = GETPOST("search_filter",'alpha',3)?GETPOST("search_filter",'alpha',3):GETPOST("filter",'alpha',3);
    +$filtert = GETPOST("search_filtert","int",3)?GETPOST("search_filtert","int",3):GETPOST("filtert","int",3);
    +$usergroup = GETPOST("search_usergroup","int",3)?GETPOST("search_usergroup","int",3):GETPOST("usergroup","int",3);
    +$showbirthday = empty($conf->use_javascript_ajax)?(GETPOST("search_showbirthday","int")?GETPOST("search_showbirthday","int"):GETPOST("showbirthday","int")):1;
    +
    +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
    +$object = new ActionComm($db);
    +$hookmanager->initHooks(array('agendalist'));
     
     $extrafields = new ExtraFields($db);
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('actioncomm');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     // If not choice done on calendar owner, we filter on user.
     if (empty($filtert) && empty($conf->global->AGENDA_ALL_CALENDARS))
     {
    @@ -103,7 +108,7 @@ if (! $sortfield)
     }
     
     // Security check
    -$socid = GETPOST("socid",'int');
    +$socid = GETPOST("search_socid",'int')?GETPOST("search_socid",'int'):GETPOST("socid",'int');
     if ($user->societe_id) $socid=$user->societe_id;
     $result = restrictedArea($user, 'agenda', 0, '', 'myactions');
     if ($socid < 0) $socid='';
    @@ -116,10 +121,6 @@ if (! $user->rights->agenda->allactions->read || $filter=='mine')	// If no permi
     	$filtert=$user->id;
     }
     
    -// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
    -$object = new ActionComm($db);
    -$hookmanager->initHooks(array('agendalist'));
    -
     $arrayfields=array(
     	'a.id'=>array('label'=>"Ref", 'checked'=>1),
     	'owner'=>array('label'=>"Owner", 'checked'=>1),
    @@ -131,7 +132,8 @@ $arrayfields=array(
     	'a.fk_contact'=>array('label'=>"Contact", 'checked'=>1),
     	'a.fk_element'=>array('label'=>"LinkedObject", 'checked'=>0, 'enabled'=>(! empty($conf->global->AGENDA_SHOW_LINKED_OBJECT))),
     	'a.percent'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000),
    -
    +	'a.datec'=>array('label'=>'DateCreation', 'checked'=>0),
    +	'a.tms'=>array('label'=>'DateModification', 'checked'=>0)
     );
     // Extra fields
     if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
    @@ -189,9 +191,9 @@ $form=new Form($db);
     $userstatic=new User($db);
     $formactions=new FormActions($db);
     
    -$nav='';
    -$nav.=$form->select_date($dateselect, 'dateselect', 0, 0, 1, '', 1, 0, 1);
    -$nav.=' <input type="submit" name="submitdateselect" class="button" value="'.$langs->trans("Refresh").'">';
    +$nav = '';
    +$nav .= $form->selectDate($dateselect, 'dateselect', 0, 0, 1, '', 1, 0);
    +$nav .=' <input type="submit" name="submitdateselect" class="button" value="'.$langs->trans("Refresh").'">';
     
     $now=dol_now();
     
    @@ -206,19 +208,18 @@ if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&con
     if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit);
     if ($actioncode != '') {
     	if(is_array($actioncode)) {
    -		foreach($actioncode as $str_action) $param.="&actioncode[]=".urlencode($str_action);
    -	} else $param.="&actioncode=".urlencode($actioncode);
    +		foreach($actioncode as $str_action) $param.="&search_actioncode[]=".urlencode($str_action);
    +	} else $param.="&search_actioncode=".urlencode($actioncode);
     }
    -if ($resourceid > 0) $param.="&resourceid=".urlencode($resourceid);
    -if ($status != '' && $status > -1) $param.="&status=".urlencode($status);
    -if ($filter) $param.="&filter=".urlencode($filter);
    -if ($filtert) $param.="&filtert=".urlencode($filtert);
    -if ($socid) $param.="&socid=".urlencode($socid);
    -if ($showbirthday) $param.="&showbirthday=1";
    -if ($pid) $param.="&projectid=".urlencode($pid);
    -if ($type) $param.="&type=".urlencode($type);
    -if ($usergroup) $param.="&usergroup=".urlencode($usergroup);
    -if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss);
    +if ($resourceid > 0) $param.="&search_resourceid=".urlencode($resourceid);
    +if ($status != '' && $status > -1) $param.="&search_status=".urlencode($status);
    +if ($filter) $param.="&search_filter=".urlencode($filter);
    +if ($filtert) $param.="&search_filtert=".urlencode($filtert);
    +if ($socid) $param.="&search_socid=".urlencode($socid);
    +if ($showbirthday) $param.="&search_showbirthday=1";
    +if ($pid) $param.="&search_projectid=".urlencode($pid);
    +if ($type) $param.="&search_type=".urlencode($type);
    +if ($usergroup) $param.="&search_usergroup=".urlencode($usergroup);
     if ($search_id != '') $param.='&search_title='.urlencode($search_id);
     if ($search_title != '') $param.='&search_title='.urlencode($search_title);
     if (GETPOST('datestartday','int')) $param.='&datestartday='.GETPOST('datestartday','int');
    @@ -227,6 +228,7 @@ if (GETPOST('datestartyear','int')) $param.='&datestartyear='.GETPOST('datestart
     if (GETPOST('dateendday','int')) $param.='&dateendday='.GETPOST('dateendday','int');
     if (GETPOST('dateendmonth','int')) $param.='&dateendmonth='.GETPOST('dateendmonth','int');
     if (GETPOST('dateendyear','int')) $param.='&dateendyear='.GETPOST('dateendyear','int');
    +if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss);
     // Add $param from extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
     
    @@ -236,7 +238,7 @@ $sql.= " s.nom as societe, s.rowid as socid, s.client,";
     $sql.= " a.id, a.label, a.datep as dp, a.datep2 as dp2,";
     $sql.= ' a.fk_user_author,a.fk_user_action,';
     $sql.= " a.fk_contact, a.note, a.percent as percent,";
    -$sql.= " a.fk_element, a.elementtype,";
    +$sql.= " a.fk_element, a.elementtype, a.datec, a.tms as datem,";
     $sql.= " c.code as type_code, c.libelle as type_label,";
     $sql.= " sp.lastname, sp.firstname, sp.email, sp.phone, sp.address, sp.phone as phone_pro, sp.phone_mobile, sp.phone_perso, sp.fk_pays as country_id";
     // Add fields from extrafields
    @@ -363,10 +365,10 @@ if ($resql)
     
     	//if ($actioncode)    $nav.='<input type="hidden" name="actioncode" value="'.$actioncode.'">';
     	//if ($resourceid)      $nav.='<input type="hidden" name="resourceid" value="'.$resourceid.'">';
    -	if ($filter)          $nav.='<input type="hidden" name="filter" value="'.$filter.'">';
    +	if ($filter)          $nav.='<input type="hidden" name="search_filter" value="'.$filter.'">';
     	//if ($filtert)         $nav.='<input type="hidden" name="filtert" value="'.$filtert.'">';
     	//if ($socid)           $nav.='<input type="hidden" name="socid" value="'.$socid.'">';
    -	if ($showbirthday)    $nav.='<input type="hidden" name="showbirthday" value="1">';
    +	if ($showbirthday)    $nav.='<input type="hidden" name="search_showbirthday" value="1">';
     	//if ($pid)             $nav.='<input type="hidden" name="projectid" value="'.$pid.'">';
     	//if ($usergroup)       $nav.='<input type="hidden" name="usergroup" value="'.$usergroup.'">';
     	print $nav;
    @@ -438,15 +440,17 @@ if ($resql)
     	if (! empty($arrayfields['a.label']['checked']))	print '<td class="liste_titre"><input type="text" class="maxwidth75" name="search_title" value="'.$search_title.'"></td>';
     	if (! empty($arrayfields['a.datep']['checked']))	{
     		print '<td class="liste_titre nowraponall" align="center">';
    -		print $form->select_date($datestart, 'datestart', 0, 0, 1, '', 1, 0, 1);
    +		print $form->selectDate($datestart, 'datestart', 0, 0, 1, '', 1, 0);
     		print '</td>';
     	}
     	if (! empty($arrayfields['a.datep2']['checked']))	{
     		print '<td class="liste_titre nowraponall" align="center">';
    -		print $form->select_date($dateend, 'dateend', 0, 0, 1, '', 1, 0, 1);
    +		print $form->selectDate($dateend, 'dateend', 0, 0, 1, '', 1, 0);
     		print '</td>';
     	}
    -	if (! empty($arrayfields['s.nom']['checked']))			print '<td class="liste_titre"></td>';
    +	if (! empty($arrayfields['s.nom']['checked'])) {
    +        print '<td class="liste_titre"></td>';
    +    }
     	if (! empty($arrayfields['a.fk_contact']['checked']))	print '<td class="liste_titre"></td>';
     	if (! empty($arrayfields['a.fk_element']['checked']))	print '<td class="liste_titre"></td>';
     
    @@ -458,8 +462,9 @@ if ($resql)
     	$reshook=$hookmanager->executeHooks('printFieldListOption',$parameters);    // Note that $action and $object may have been modified by hook
     	print $hookmanager->resPrint;
     
    -
    -    if (! empty($arrayfields['a.percent']['checked']))	{
    +	if (! empty($arrayfields['a.datec']['checked']))	print '<td class="liste_titre"></td>';
    +	if (! empty($arrayfields['a.tms']['checked']))		print '<td class="liste_titre"></td>';
    +	if (! empty($arrayfields['a.percent']['checked']))	{
     		print '<td class="liste_titre center">';
         	print $formactions->form_select_status_action('formaction',$status,1,'status',1,2);
         	print ajax_combobox('selectstatus');
    @@ -491,6 +496,10 @@ if ($resql)
     	$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder);
     	$reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters);    // Note that $action and $object may have been modified by hook
     	print $hookmanager->resPrint;
    +
    +	if (! empty($arrayfields['a.datec']['checked'])) print_liste_field_titre($arrayfields['a.datec']['label'], $_SERVER["PHP_SELF"],"a.datec,a.id",$param,"",'align="center"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['a.tms']['checked'])) print_liste_field_titre($arrayfields['a.tms']['label'], $_SERVER["PHP_SELF"],"a.tms,a.id",$param,"",'align="center"',$sortfield,$sortorder);
    +
     	if (! empty($arrayfields['a.percent']['checked']))print_liste_field_titre("Status",$_SERVER["PHP_SELF"],"a.percent",$param,"",'align="center"',$sortfield,$sortorder);
     	print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="center"',$sortfield,$sortorder,'maxwidthsearch ');
     	print "</tr>\n";
    @@ -640,7 +649,6 @@ if ($resql)
                   		print "&nbsp;";
     		        }
     		        print '</td>';
    -
     		}
     
     		// Extra fields
    @@ -650,6 +658,15 @@ if ($resql)
     		$reshook=$hookmanager->executeHooks('printFieldListValue',$parameters);    // Note that $action and $object may have been modified by hook
     		print $hookmanager->resPrint;
     
    +		// Date creation
    +		if (! empty($arrayfields['a.datec']['checked'])) {
    +			// Status/Percent
    +			print '<td align="center" class="nowrap">'.dol_print_date($obj->datec, 'dayhour').'</td>';
    +		}
    +		// Date update
    +		if (! empty($arrayfields['a.tms']['checked'])) {
    +			print '<td align="center" class="nowrap">'.dol_print_date($obj->datem, 'dayhour').'</td>';
    +		}
     		if (! empty($arrayfields['a.percent']['checked'])) {
     			// Status/Percent
     			$datep=$db->jdate($obj->datep);
    @@ -665,14 +682,12 @@ if ($resql)
     	print '</form>';
     
     	$db->free($resql);
    -
     }
     else
     {
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/action/pertype.php b/htdocs/comm/action/pertype.php
    index 2fdfa180319..67a4534ca14 100644
    --- a/htdocs/comm/action/pertype.php
    +++ b/htdocs/comm/action/pertype.php
    @@ -2,9 +2,10 @@
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Eric Seigne          <erics@rycks.com>
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2014      Cedric GROSS         <c.gross@kreiz-it.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -262,7 +263,7 @@ $nav.='<input type="hidden" name="begin_d" value="' . $begin_d . '">';
     $nav.='<input type="hidden" name="end_d" value="' . $end_d . '">';
     $nav.='<input type="hidden" name="showbirthday" value="' . $showbirthday . '">';
     
    -$nav.=$form->select_date($dateselect, 'dateselect', 0, 0, 1, '', 1, 0, 1);
    +$nav.= $form->selectDate($dateselect, 'dateselect', 0, 0, 1, '', 1, 0);
     $nav.=' <input type="submit" name="submitdateselect" class="button" value="'.$langs->trans("Refresh").'">';
     $nav.='</form>';
     
    @@ -542,7 +543,6 @@ if ($resql)
                 //print ' startincalendar='.dol_print_date($event->date_start_in_calendar).'-endincalendar='.dol_print_date($event->date_end_in_calendar).') was added in '.$j.' different index key of array<br>';
             }
             $i++;
    -
         }
     }
     else
    @@ -730,10 +730,8 @@ jQuery(document).ready(function() {
     });
     </script>';
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
     
     
    diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php
    index 0cf056ef3a9..af141f76ae9 100644
    --- a/htdocs/comm/action/peruser.php
    +++ b/htdocs/comm/action/peruser.php
    @@ -2,9 +2,10 @@
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Eric Seigne          <erics@rycks.com>
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2014      Cedric GROSS         <c.gross@kreiz-it.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -40,9 +41,9 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     
     if (! isset($conf->global->AGENDA_MAX_EVENTS_DAY_VIEW)) $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW=3;
     
    -$filter = GETPOST("filter",'alpha',3);
    -$filtert = GETPOST("filtert","int",3);
    -$usergroup = GETPOST("usergroup","int",3);
    +$filter = GETPOST("search_filter",'alpha',3)?GETPOST("search_filter",'alpha',3):GETPOST("filter",'alpha',3);
    +$filtert = GETPOST("search_filtert","int",3)?GETPOST("search_filtert","int",3):GETPOST("filtert","int",3);
    +$usergroup = GETPOST("search_usergroup","int",3)?GETPOST("search_usergroup","int",3):GETPOST("usergroup","int",3);
     //if (! ($usergroup > 0) && ! ($filtert > 0)) $filtert = $user->id;
     //$showbirthday = empty($conf->use_javascript_ajax)?GETPOST("showbirthday","int"):1;
     $showbirthday = 0;
    @@ -63,7 +64,7 @@ if (! $sortorder) $sortorder="ASC";
     if (! $sortfield) $sortfield="a.datec";
     
     // Security check
    -$socid = GETPOST("socid","int");
    +$socid = GETPOST("search_socid","int")?GETPOST("search_socid","int"):GETPOST("socid","int");
     if ($user->societe_id) $socid=$user->societe_id;
     $result = restrictedArea($user, 'agenda', 0, '', 'myactions');
     if ($socid < 0) $socid='';
    @@ -78,24 +79,24 @@ if (! $user->rights->agenda->allactions->read || $filter =='mine')  // If no per
     
     //$action=GETPOST('action','alpha');
     $action='show_peruser'; //We use 'show_week' mode
    -$resourceid=GETPOST("resourceid","int");
    +$resourceid=GETPOST("search_resourceid","int")?GETPOST("search_resourceid","int"):GETPOST("resourceid","int");
     $year=GETPOST("year","int")?GETPOST("year","int"):date("Y");
     $month=GETPOST("month","int")?GETPOST("month","int"):date("m");
     $week=GETPOST("week","int")?GETPOST("week","int"):date("W");
     $day=GETPOST("day","int")?GETPOST("day","int"):date("d");
    -$pid=GETPOST("projectid","int",3);
    -$status=GETPOST("status",'alpha');
    -$type=GETPOST("type",'alpha');
    +$pid=GETPOST("search_projectid","int",3)?GETPOST("search_projectid","int",3):GETPOST("projectid","int",3);
    +$status=GETPOST("search_status",'alpha')?GETPOST("search_status",'alpha'):GETPOST("status",'alpha');
    +$type=GETPOST("search_type",'alpha')?GETPOST("search_type",'alpha'):GETPOST("type",'alpha');
     $maxprint=((GETPOST("maxprint",'int')!='')?GETPOST("maxprint",'int'):$conf->global->AGENDA_MAX_EVENTS_DAY_VIEW);
     // Set actioncode (this code must be same for setting actioncode into peruser, listacton and index)
    -if (GETPOST('actioncode','array'))
    +if (GETPOST('search_actioncode','array'))
     {
    -    $actioncode=GETPOST('actioncode','array',3);
    +    $actioncode=GETPOST('search_actioncode','array',3);
         if (! count($actioncode)) $actioncode='0';
     }
     else
     {
    -    $actioncode=GETPOST("actioncode","alpha",3)?GETPOST("actioncode","alpha",3):(GETPOST("actioncode","alpha")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE));
    +    $actioncode=GETPOST("search_actioncode","alpha",3)?GETPOST("search_actioncode","alpha",3):(GETPOST("search_actioncode","alpha")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE));
     }
     if ($actioncode == '' && empty($actioncodearray)) $actioncode=(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE);
     
    @@ -200,25 +201,25 @@ if ($status == 'done') $title=$langs->trans("DoneActions");
     if ($status == 'todo') $title=$langs->trans("ToDoActions");
     
     $param='';
    -if ($actioncode || isset($_GET['actioncode']) || isset($_POST['actioncode'])) {
    +if ($actioncode || isset($_GET['search_actioncode']) || isset($_POST['search_actioncode'])) {
     	if(is_array($actioncode)) {
    -		foreach($actioncode as $str_action) $param.="&actioncode[]=".urlencode($str_action);
    -	} else $param.="&actioncode=".urlencode($actioncode);
    +		foreach($actioncode as $str_action) $param.="&search_actioncode[]=".urlencode($str_action);
    +	} else $param.="&search_actioncode=".urlencode($actioncode);
     }
    -if ($resourceid > 0) $param.="&resourceid=".urlencode($resourceid);
    -if ($status || isset($_GET['status']) || isset($_POST['status'])) $param.="&status=".urlencode($status);
    -if ($filter)  $param.="&filter=".urlencode($filter);
    -if ($filtert) $param.="&filtert=".urlencode($filtert);
    -if ($usergroup) $param.="&usergroup=".urlencode($usergroup);
    -if ($socid)   $param.="&socid=".urlencode($socid);
    -if ($showbirthday) $param.="&showbirthday=1";
    -if ($pid)     $param.="&projectid=".urlencode($pid);
    -if ($type)   $param.="&type=".urlencode($type);
    +if ($resourceid > 0) $param.="&search_resourceid=".urlencode($resourceid);
    +if ($status || isset($_GET['status']) || isset($_POST['status'])) $param.="&search_status=".urlencode($status);
    +if ($filter)        $param.="&search_filter=".urlencode($filter);
    +if ($filtert)       $param.="&search_filtert=".urlencode($filtert);
    +if ($usergroup)     $param.="&search_usergroup=".urlencode($usergroup);
    +if ($socid)         $param.="&search_socid=".urlencode($socid);
    +if ($showbirthday)  $param.="&search_showbirthday=1";
    +if ($pid)           $param.="&search_projectid=".urlencode($pid);
    +if ($type)          $param.="&search_type=".urlencode($type);
     if ($action == 'show_day' || $action == 'show_week' || $action == 'show_month' || $action != 'show_peruser') $param.='&action='.urlencode($action);
     if ($begin_h != '') $param.='&begin_h='.urlencode($begin_h);
    -if ($end_h != '') $param.='&end_h='.urlencode($end_h);
    +if ($end_h != '')   $param.='&end_h='.urlencode($end_h);
     if ($begin_d != '') $param.='&begin_d='.urlencode($begin_d);
    -if ($end_d != '') $param.='&end_d='.urlencode($end_d);
    +if ($end_d != '')   $param.='&end_d='.urlencode($end_d);
     $param.="&maxprint=".urlencode($maxprint);
     
     
    @@ -276,7 +277,7 @@ $nav.='<input type="hidden" name="begin_d" value="' . $begin_d . '">';
     $nav.='<input type="hidden" name="end_d" value="' . $end_d . '">';
     $nav.='<input type="hidden" name="showbirthday" value="' . $showbirthday . '">';
     */
    -$nav.=$form->select_date($dateselect, 'dateselect', 0, 0, 1, '', 1, 0, 1);
    +$nav.= $form->selectDate($dateselect, 'dateselect', 0, 0, 1, '', 1, 0);
     $nav.=' <input type="submit" name="submitdateselect" class="button" value="'.$langs->trans("Refresh").'">';
     //$nav.='</form>';
     
    @@ -570,7 +571,6 @@ if ($resql)
                 //print ' startincalendar='.dol_print_date($event->date_start_in_calendar).'-endincalendar='.dol_print_date($event->date_end_in_calendar).') was added in '.$j.' different index key of array<br>';
             }
             $i++;
    -
         }
         $db->free($resql);
     }
    @@ -797,7 +797,6 @@ while($currentdaytoshow<$lastdaytoshow) {
     	echo "<br>";
     
     	$currentdaytoshow =  dol_time_plus_duree($currentdaytoshow, 7, 'd');
    -
     }
     
     echo '</div>';
    @@ -865,10 +864,8 @@ jQuery(document).ready(function() {
     });
     </script>';
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
     
     
    diff --git a/htdocs/comm/action/rapport/index.php b/htdocs/comm/action/rapport/index.php
    index 7e4108b470b..323113eb12e 100644
    --- a/htdocs/comm/action/rapport/index.php
    +++ b/htdocs/comm/action/rapport/index.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Eric Seigne          <erics@rycks.com>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -209,5 +209,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/address.php b/htdocs/comm/address.php
    index 9c8b275d198..f9cf7dc5bf1 100644
    --- a/htdocs/comm/address.php
    +++ b/htdocs/comm/address.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2006 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -151,7 +151,6 @@ if ($action == 'add' || $action == 'update')
                 $action= "edit";
             }
         }
    -
     }
     
     else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->societe->supprimer)
    @@ -291,7 +290,6 @@ if ($action == 'create')
             print '</div>'."\n";
     
             print '</form>'."\n";
    -
         }
     }
     elseif ($action == 'edit')
    @@ -486,7 +484,6 @@ else
             }
             print '</div>';
         }
    -
     }
     
     
    diff --git a/htdocs/comm/admin/propal_extrafields.php b/htdocs/comm/admin/propal_extrafields.php
    index 6a6aa12862a..7b58bd6666d 100644
    --- a/htdocs/comm/admin/propal_extrafields.php
    +++ b/htdocs/comm/admin/propal_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -111,6 +111,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/admin/propaldet_extrafields.php b/htdocs/comm/admin/propaldet_extrafields.php
    index 49784228fe6..3fa03a7e8e8 100644
    --- a/htdocs/comm/admin/propaldet_extrafields.php
    +++ b/htdocs/comm/admin/propaldet_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
    @@ -86,7 +86,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -99,7 +99,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -118,6 +118,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/card.php b/htdocs/comm/card.php
    index f552382bcce..9cd85e4ad36 100644
    --- a/htdocs/comm/card.php
    +++ b/htdocs/comm/card.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2015 Laurent Destailleur         <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne                 <eric.seigne@ryxeo.com>
      * Copyright (C) 2006      Andre Cianfarani            <acianfa@free.fr>
    - * Copyright (C) 2005-2017 Regis Houssin               <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017 Regis Houssin               <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      * Copyright (C) 2010-2014 Juanjo Menent               <jmenent@2byte.es>
      * Copyright (C) 2013      Alexandre Spangaro          <aspangaro.dolibarr@gmail.com>
    @@ -346,7 +346,7 @@ if ($object->id > 0)
     	print '</td><td>';
     	if ($action == 'editmode')
     	{
    -		$form->form_modes_reglement($_SERVER['PHP_SELF'].'?socid='.$object->id,$object->mode_reglement_id,'mode_reglement_id');
    +		$form->form_modes_reglement($_SERVER['PHP_SELF'].'?socid='.$object->id,$object->mode_reglement_id,'mode_reglement_id', 'CRDT');
     	}
     	else
     	{
    @@ -588,7 +588,7 @@ if ($object->id > 0)
     		$link=DOL_URL_ROOT.'/comm/propal/list.php?socid='.$object->id;
     		$icon='bill';
     		if ($link) $boxstat.='<a href="'.$link.'" class="boxstatsindicator thumbstat nobold nounderline">';
    -		$boxstat.='<div class="boxstats">';
    +		$boxstat.='<div class="boxstats" title="'.dol_escape_htmltag($text).'">';
     		$boxstat.='<span class="boxstatstext">'.img_object("",$icon).' '.$text.'</span><br>';
     		$boxstat.='<span class="boxstatsindicator">'.price($outstandingTotal, 1, $langs, 1, -1, -1, $conf->currency).'</span>';
     		$boxstat.='</div>';
    @@ -606,7 +606,7 @@ if ($object->id > 0)
     		$link=DOL_URL_ROOT.'/commande/list.php?socid='.$object->id;
     		$icon='bill';
     		if ($link) $boxstat.='<a href="'.$link.'" class="boxstatsindicator thumbstat nobold nounderline">';
    -		$boxstat.='<div class="boxstats">';
    +		$boxstat.='<div class="boxstats" title="'.dol_escape_htmltag($text).'">';
     		$boxstat.='<span class="boxstatstext">'.img_object("",$icon).' '.$text.'</span><br>';
     		$boxstat.='<span class="boxstatsindicator">'.price($outstandingTotal, 1, $langs, 1, -1, -1, $conf->currency).'</span>';
     		$boxstat.='</div>';
    @@ -624,7 +624,7 @@ if ($object->id > 0)
     		$link=DOL_URL_ROOT.'/compta/facture/list.php?socid='.$object->id;
     		$icon='bill';
     		if ($link) $boxstat.='<a href="'.$link.'" class="boxstatsindicator thumbstat nobold nounderline">';
    -		$boxstat.='<div class="boxstats">';
    +		$boxstat.='<div class="boxstats" title="'.dol_escape_htmltag($text).'">';
     		$boxstat.='<span class="boxstatstext">'.img_object("",$icon).' '.$text.'</span><br>';
     		$boxstat.='<span class="boxstatsindicator">'.price($outstandingTotal, 1, $langs, 1, -1, -1, $conf->currency).'</span>';
     		$boxstat.='</div>';
    @@ -640,7 +640,7 @@ if ($object->id > 0)
     		$link=DOL_URL_ROOT.'/compta/recap-compta.php?socid='.$object->id;
     		$icon='bill';
     		if ($link) $boxstat.='<a href="'.$link.'" class="boxstatsindicator thumbstat nobold nounderline">';
    -		$boxstat.='<div class="boxstats">';
    +		$boxstat.='<div class="boxstats" title="'.dol_escape_htmltag($text).'">';
     		$boxstat.='<span class="boxstatstext">'.img_object("",$icon).' '.$text.'</span><br>';
     		$boxstat.='<span class="boxstatsindicator'.($outstandingOpened>0?' amountremaintopay':'').'">'.price($outstandingOpened, 1, $langs, 1, -1, -1, $conf->currency).$warn.'</span>';
     		$boxstat.='</div>';
    @@ -1301,7 +1301,6 @@ if ($object->id > 0)
     
         				if ($object->client != 0 && $object->client != 2) print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture/card.php?action=create&socid='.$object->id.'">'.$langs->trans("AddBill").'</a></div>';
         				else print '<div class="inline-block divButAction"><a class="butActionRefused" title="'.dol_escape_js($langs->trans("ThirdPartyMustBeEditAsCustomer")).'" href="#">'.$langs->trans("AddBill").'</a></div>';
    -
         			}
         		}
         	}
    @@ -1344,7 +1343,6 @@ if ($object->id > 0)
             // List of done actions
     		show_actions_done($conf,$langs,$db,$object);
     	}
    -
     }
     else
     {
    @@ -1354,5 +1352,4 @@ else
     
     // End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/contact.php b/htdocs/comm/contact.php
    index aa8dae43140..b5cdd58bbc5 100644
    --- a/htdocs/comm/contact.php
    +++ b/htdocs/comm/contact.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003      Eric Seigne			<erics@rycks.com>
      * Copyright (C) 2004-2009 Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -176,6 +176,6 @@ else
         dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/index.php b/htdocs/comm/index.php
    index e90a821b5e3..81685f3fda8 100644
    --- a/htdocs/comm/index.php
    +++ b/htdocs/comm/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -521,7 +521,6 @@ if (! empty($conf->societe->enabled) && $user->rights->societe->lire)
     				print '<td align="right" nowrap>'.dol_print_date($db->jdate($objp->tms),'day')."</td>";
     				print '</tr>';
     				$i++;
    -
     			}
     
     			$db->free($resql);
    @@ -580,7 +579,6 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->societe->lire)
     
     				$i++;
     			}
    -
     		}
     		else
     		{
    @@ -884,6 +882,6 @@ if (! empty($conf->commande->enabled) && $user->rights->commande->lire)
     
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/mailing/advtargetemailing.php b/htdocs/comm/mailing/advtargetemailing.php
    index 1c886e2ba2c..8aa14a45b85 100644
    --- a/htdocs/comm/mailing/advtargetemailing.php
    +++ b/htdocs/comm/mailing/advtargetemailing.php
    @@ -84,9 +84,12 @@ if (empty($template_id)) {
     	$result = $advTarget->fetch($template_id);
     }
     
    -if ($result < 0) {
    -	setEventMessage($advTarget->error, 'errors');
    -} else {
    +if ($result < 0)
    +{
    +	setEventMessages($advTarget->error, $advTarget->errors, 'errors');
    +}
    +else
    +{
     	if (! empty($advTarget->id)) {
     		$array_query = json_decode($advTarget->filtervalue, true);
     	}
    @@ -101,7 +104,7 @@ if ($action == 'loadfilter') {
     	if (! empty($template_id)) {
     		$result = $advTarget->fetch($template_id);
     		if ($result < 0) {
    -			setEventMessage($advTarget->error, 'errors');
    +			setEventMessages($advTarget->error, $advTarget->errors, 'errors');
     		} else {
     			if (! empty($advTarget->id)) {
     				$array_query = json_decode($advTarget->filtervalue, true);
    @@ -202,7 +205,7 @@ if ($action == 'add') {
     	// if ($array_query ['type_of_target'] == 1 || $array_query ['type_of_target'] == 3) {
     	$result = $advTarget->query_thirdparty($array_query);
     	if ($result < 0) {
    -		setEventMessage($advTarget->error, 'errors');
    +		setEventMessages($advTarget->error, $advTarget->errors, 'errors');
     	}
     	/*} else {
     		$advTarget->thirdparty_lines = array ();
    @@ -211,7 +214,7 @@ if ($action == 'add') {
     	if ($user_contact_query && ($array_query['type_of_target'] == 1 || $array_query['type_of_target'] == 2 || $array_query['type_of_target'] == 4)) {
     		$result = $advTarget->query_contact($array_query, 1);
     		if ($result < 0) {
    -			setEventMessage($advTarget->error, 'errors');
    +			setEventMessages($advTarget->error, $advTarget->errors, 'errors');
     		}
     		// If use contact but no result use artefact to so not use socid into add_to_target
     		if (count($advTarget->contact_lines) == 0) {
    @@ -222,7 +225,7 @@ if ($action == 'add') {
     	} else {
     		$advTarget->contact_lines = array ();
     	}
    -	
    +
     	if ((count($advTarget->thirdparty_lines) > 0) || (count($advTarget->contact_lines) > 0)) {
     		// Add targets into database
     		$obj = new mailing_advthirdparties($db);
    @@ -241,10 +244,10 @@ if ($action == 'add') {
     		exit();
     	}
     	if ($result == 0) {
    -		setEventMessage($langs->trans("WarningNoEMailsAdded"), 'warnings');
    +		setEventMessages($langs->trans("WarningNoEMailsAdded"), null, 'warnings');
     	}
     	if ($result < 0) {
    -		setEventMessage($obj->error, 'errors');
    +		setEventMessages($obj->error, $obj->errors, 'errors');
     	}
     }
     
    @@ -264,7 +267,7 @@ if ($action == 'savefilter' || $action == 'createfilter') {
     	$error = 0;
     
     	if ($action == 'createfilter' && empty($template_name)) {
    -		setEventMessage($langs->trans('ErrorFieldRequired', $langs->trans('AdvTgtOrCreateNewFilter')), 'errors');
    +		setEventMessages($langs->trans('ErrorFieldRequired', $langs->trans('AdvTgtOrCreateNewFilter')), null, 'errors');
     		$error ++;
     	}
     
    @@ -353,13 +356,13 @@ if ($action == 'savefilter' || $action == 'createfilter') {
     			$advTarget->name = $template_name;
     			$result = $advTarget->create($user);
     			if ($result < 0) {
    -				setEventMessage($advTarget->error, 'errors');
    +				setEventMessages($advTarget->error, $advTarget->errors, 'errors');
     			}
     		} elseif ($action == 'savefilter') {
    -			
    +
     			$result = $advTarget->update($user);
     			if ($result < 0) {
    -				setEventMessage($advTarget->error, 'errors');
    +				setEventMessages($advTarget->error, $advTarget->errors, 'errors');
     			}
     		}
     		$template_id = $advTarget->id;
    @@ -369,7 +372,7 @@ if ($action == 'savefilter' || $action == 'createfilter') {
     if ($action == 'deletefilter') {
     	$result = $advTarget->delete($user);
     	if ($result < 0) {
    -		setEventMessage($advTarget->error, 'errors');
    +		setEventMessages($advTarget->error, $advTarget->errors, 'errors');
     	}
     	header("Location: " . $_SERVER['PHP_SELF'] . "?id=" . $id);
     	exit();
    @@ -462,11 +465,11 @@ if ($object->fetch($id) >= 0) {
     
     	// Show email selectors
     	if ($object->statut == 0 && $user->rights->mailing->creer) {
    -		
    +
     		include DOL_DOCUMENT_ROOT . '/core/tpl/advtarget.tpl.php';
    -		
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php
    index 97746ad9d82..a2a6f743db8 100644
    --- a/htdocs/comm/mailing/card.php
    +++ b/htdocs/comm/mailing/card.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2016	Laurent Destailleur		<eldy@uers.sourceforge.net>
    - * Copyright (C) 2005-2016	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2016	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -747,7 +747,7 @@ if ($action == 'create')
     	dol_fiche_head();
     
     	print '<table class="border" width="100%">';
    -	print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("MailTitle").'</td><td><input class="flat minwidth300" name="titre" value="'.dol_escape_htmltag(GETPOST('titre')).'"></td></tr>';
    +	print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("MailTitle").'</td><td><input class="flat minwidth300" name="titre" value="'.dol_escape_htmltag(GETPOST('titre')).'" autofocus="autofocus"></td></tr>';
     	print '<tr><td class="fieldrequired">'.$langs->trans("MailFrom").'</td><td><input class="flat minwidth200" name="from" value="'.$conf->global->MAILING_EMAIL_FROM.'"></td></tr>';
     	print '<tr><td>'.$langs->trans("MailErrorsTo").'</td><td><input class="flat minwidth200" name="errorsto" value="'.(!empty($conf->global->MAILING_EMAIL_ERRORSTO)?$conf->global->MAILING_EMAIL_ERRORSTO:$conf->global->MAIN_MAIL_ERRORS_TO).'"></td></tr>';
     
    @@ -874,7 +874,7 @@ else
     				}
     			}
     
    -			$linkback = '<a href="'.DOL_URL_ROOT.'/comm/mailing/list.php">'.$langs->trans("BackToList").'</a>';
    +			$linkback = '<a href="'.DOL_URL_ROOT.'/comm/mailing/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
     
     			$morehtmlright='';
     			$nbtry = $nbok = 0;
    @@ -1165,7 +1165,6 @@ else
     			print '</div>';
     
     			dol_fiche_end();
    -
     		}
     		else
     		{
    @@ -1358,5 +1357,6 @@ else
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php
    index 08ed54d2fc3..57d6adc1ba9 100644
    --- a/htdocs/comm/mailing/cibles.php
    +++ b/htdocs/comm/mailing/cibles.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2016 Laurent Destailleur  <eldy@uers.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014	   Florian Henry        <florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -66,7 +66,6 @@ $modulesdir = dolGetModulesDirs('/mailings');
     $object = new Mailing($db);
     
     
    -
     /*
      * Actions
      */
    @@ -306,8 +305,8 @@ if ($object->fetch($id) >= 0)
     			$var = true;
     
     			// Loop on each submodule
    -            foreach($modulenames as $modulename)
    -            {
    +			foreach($modulenames as $modulename)
    +			{
     				// Loading Class
     				$file = $dir.$modulename.".modules.php";
     				$classname = "mailing_".$modulename;
    @@ -330,16 +329,14 @@ if ($object->fetch($id) >= 0)
     				// Si le module mailing est qualifie
     				if ($qualified)
     				{
    -					$var = ! $var;
    -
     					if ($allowaddtarget)
     					{
    -						print '<form '.$bctag[$var].' name="'.$modulename.'" action="'.$_SERVER['PHP_SELF'].'?action=add&id='.$object->id.'&module='.$modulename.'" method="POST" enctype="multipart/form-data">';
    +						print '<form class="oddeven tagtr" name="'.$modulename.'" action="'.$_SERVER['PHP_SELF'].'?action=add&id='.$object->id.'&module='.$modulename.'" method="POST" enctype="multipart/form-data">';
     						print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     					}
     					else
     					{
    -					    print '<div '.$bctag[$var].'>';
    +					    print '<div class="oddeven tagtr">';
     					}
     
     					print '<div class="tagtd">';
    @@ -646,10 +643,8 @@ if ($object->fetch($id) >= 0)
     	}
     
     	print "\n<!-- Fin liste destinataires selectionnes -->\n";
    -
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/mailing/class/advtargetemailing.class.php b/htdocs/comm/mailing/class/advtargetemailing.class.php
    index 50d9faf0637..baf48447bad 100644
    --- a/htdocs/comm/mailing/class/advtargetemailing.class.php
    +++ b/htdocs/comm/mailing/class/advtargetemailing.class.php
    @@ -28,14 +28,35 @@
      */
     class AdvanceTargetingMailing extends CommonObject
     {
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -	var $db; //!< To store db handler
    -	var $error; //!< To return error code (or message)
    -	var $errors = array(); //!< To return several error codes (or messages)
    -	var $element='advtargetemailing';			//!< Id that identify managed objects
    -	var $table_element='advtargetemailing';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    -	var $id;
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='advtargetemailing';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='advtargetemailing';
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
     	var $name;
     	var $entity;
    @@ -54,9 +75,9 @@ class AdvanceTargetingMailing extends CommonObject
     
     
     	/**
    -	 * Constructor
    +	 *  Constructor
     	 *
    -	 * 	@param	DoliDb		$db		Database handler
    +	 *  @param  DoliDb		$db		Database handler
     	 */
     	function __construct($db)
     	{
    @@ -219,7 +240,6 @@ class AdvanceTargetingMailing extends CommonObject
     				$this->datec = $this->db->jdate($obj->datec);
     				$this->fk_user_mod = $obj->fk_user_mod;
     				$this->tms = $this->db->jdate($obj->tms);
    -
     			}
     			$this->db->free($resql);
     
    @@ -233,6 +253,7 @@ class AdvanceTargetingMailing extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Load object in memory from the database
     	 *
    @@ -241,6 +262,7 @@ class AdvanceTargetingMailing extends CommonObject
     	 */
     	function fetch_by_mailing($id=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		$sql = "SELECT";
     		$sql.= " t.rowid,";
    @@ -281,7 +303,6 @@ class AdvanceTargetingMailing extends CommonObject
     				$this->datec = $this->db->jdate($obj->datec);
     				$this->fk_user_mod = $obj->fk_user_mod;
     				$this->tms = $this->db->jdate($obj->tms);
    -
     			}
     			$this->db->free($resql);
     
    @@ -298,6 +319,7 @@ class AdvanceTargetingMailing extends CommonObject
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Load object in memory from the database
     	 *
    @@ -307,6 +329,7 @@ class AdvanceTargetingMailing extends CommonObject
     	 */
     	function fetch_by_element($id=0, $type_element='mailing')
     	{
    +        // phpcs:enable
     		global $langs;
     		$sql = "SELECT";
     		$sql.= " t.rowid,";
    @@ -347,7 +370,6 @@ class AdvanceTargetingMailing extends CommonObject
     				$this->datec = $this->db->jdate($obj->datec);
     				$this->fk_user_mod = $obj->fk_user_mod;
     				$this->tms = $this->db->jdate($obj->tms);
    -
     			}
     			$this->db->free($resql);
     
    @@ -523,6 +545,7 @@ class AdvanceTargetingMailing extends CommonObject
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Load object in memory from database
     	 *
    @@ -531,6 +554,7 @@ class AdvanceTargetingMailing extends CommonObject
     	 */
     	function query_thirdparty($arrayquery)
     	{
    +        // phpcs:enable
     		global $langs,$conf;
     
     		$sql = "SELECT";
    @@ -621,30 +645,26 @@ class AdvanceTargetingMailing extends CommonObject
     						if (!empty($arrayquery['options_'.$key.'_max'])) {
     							$sqlwhere[]= " (te.".$key." >= ".$arrayquery['options_'.$key.'_max']." AND te.".$key." <= ".$arrayquery['options_'.$key.'_min'].")";
     						}
    -					} else if (($extrafields->attribute_type[$key] == 'date') ||
    +					} elseif (($extrafields->attribute_type[$key] == 'date') ||
     						($extrafields->attribute_type[$key] == 'datetime')) {
     						if (!empty($arrayquery['options_'.$key.'_end_dt'])){
     							$sqlwhere[]= " (te.".$key." >= '".$this->db->idate($arrayquery['options_'.$key.'_st_dt'])."' AND te.".$key." <= '".$this->db->idate($arrayquery['options_'.$key.'_end_dt'])."')";
     						}
    -					}else if ($extrafields->attribute_type[$key] == 'boolean') {
    +					} elseif ($extrafields->attribute_type[$key] == 'boolean') {
     						if ($arrayquery['options_'.$key]!=''){
     							$sqlwhere[]= " (te.".$key." = ".$arrayquery['options_'.$key].")";
     						}
    -					}else{
    +					} else {
     						if (is_array($arrayquery['options_'.$key])) {
     							$sqlwhere[]= " (te.".$key." IN ('".implode("','",$arrayquery['options_'.$key])."'))";
     						} elseif (!empty($arrayquery['options_'.$key])) {
     							$sqlwhere[]= " (te.".$key." LIKE '".$arrayquery['options_'.$key]."')";
     						}
     					}
    -
     				}
    -
    -
     			}
     
     			if (count($sqlwhere)>0)	$sql.= " WHERE ".implode(" AND ",$sqlwhere);
    -
     		}
     
     
    @@ -676,6 +696,7 @@ class AdvanceTargetingMailing extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Load object in memory from database
     	 *
    @@ -685,6 +706,7 @@ class AdvanceTargetingMailing extends CommonObject
     	 */
     	function query_contact($arrayquery, $withThirdpartyFilter = 0)
     	{
    +        // phpcs:enable
     		global $langs,$conf;
     
     		$sql = "SELECT";
    @@ -774,7 +796,6 @@ class AdvanceTargetingMailing extends CommonObject
     							$sqlwhere[]= " (te.".$key." LIKE '".$arrayquery['options_'.$key.'_cnct']."')";
     						}
     					}
    -
     				}
     
     				if (! empty($withThirdpartyFilter)) {
    @@ -916,7 +937,8 @@ class AdvanceTargetingMailing extends CommonObject
     	 *  									For exemple  jean;joe;jim%%;!jimo;!jima%> will target all jean, joe, start with jim but not jimo and not everythnig taht start by jima
     	 * 	@return		string		Sql to use for the where condition
     	 */
    -	public function transformToSQL($column_to_test,$criteria) {
    +    public function transformToSQL($column_to_test,$criteria)
    +    {
     		$return_sql_criteria = '(';
     
     		//This is a multiple value test
    @@ -939,7 +961,6 @@ class AdvanceTargetingMailing extends CommonObject
     			if (count($return_sql_not_like)>0) {
     				$return_sql_criteria .= ' AND (' . implode (' AND ', $return_sql_not_like).')';
     			}
    -
     		}else {
     			$return_sql_criteria .= $column_to_test . ' LIKE \''.$this->db->escape($criteria).'\'';
     		}
    @@ -948,6 +969,4 @@ class AdvanceTargetingMailing extends CommonObject
     
     		return $return_sql_criteria;
     	}
    -
    -
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php b/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php
    index 7408bb27d37..19b1ce3e9b4 100644
    --- a/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php
    +++ b/htdocs/comm/mailing/class/html.formadvtargetemailing.class.php
    @@ -16,9 +16,9 @@
      */
     
     /**
    - * \file    comm/mailing/class/html.formadvtragetemaling.class.php
    + * \file    comm/mailing/class/html.formadvtargetemailing.class.php
      * \ingroup mailing
    - * \brief   Fichier de la classe des fonctions predefinie de composants html advtargetemaling
    + * \brief   Fichier de la classe des fonctions predefinies de composant html advtargetemailing
      */
     
     /**
    @@ -26,15 +26,23 @@
      */
     class FormAdvTargetEmailing extends Form
     {
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 * Constructor
     	 *
     	 * @param DoliDB $db handler
     	 */
    -	function __construct($db) {
    +    function __construct($db)
    +    {
     		global $langs;
     
     		$this->db = $db;
    @@ -47,7 +55,8 @@ class FormAdvTargetEmailing extends Form
     	 * @param string $htmlname select field
     	 * @return string select field
     	 */
    -	function multiselectProspectionStatus($selected_array = array(), $htmlname = 'cust_prospect_status') {
    +    function multiselectProspectionStatus($selected_array = array(), $htmlname = 'cust_prospect_status')
    +    {
     		global $conf, $langs;
     		$options_array = array();
     
    @@ -83,7 +92,8 @@ class FormAdvTargetEmailing extends Form
     	 * @param array $selected_array or Code or Label of preselected country
     	 * @return string HTML string with select
     	 */
    -	function multiselectCountry($htmlname = 'country_id', $selected_array=array()) {
    +    function multiselectCountry($htmlname = 'country_id', $selected_array=array())
    +    {
     		global $conf, $langs;
     
     		$langs->load("dict");
    @@ -143,7 +153,8 @@ class FormAdvTargetEmailing extends Form
     	 * @param User $user User action
     	 * @return string combo list code
     	 */
    -	function multiselectselectSalesRepresentatives($htmlname, $selected_array, $user) {
    +    function multiselectselectSalesRepresentatives($htmlname, $selected_array, $user)
    +    {
     
     		global $conf;
     
    @@ -167,7 +178,6 @@ class FormAdvTargetEmailing extends Form
     				$label = $obj_usr->firstname . " " . $obj_usr->name . " (" . $obj_usr->login . ')';
     
     				$options_array [$obj_usr->rowid] = $label;
    -
     			}
     			$this->db->free ( $resql_usr );
     		} else {
    @@ -184,7 +194,8 @@ class FormAdvTargetEmailing extends Form
     	 * @param array $selected_array selected array
     	 * @return string combo list code
     	 */
    -	function multiselectselectLanguage($htmlname='', $selected_array=array()) {
    +    function multiselectselectLanguage($htmlname='', $selected_array=array())
    +    {
     
     		global $conf,$langs;
     
    @@ -311,7 +322,6 @@ class FormAdvTargetEmailing extends Form
     					$i++;
     				}
     			}
    -
     		}
     		else
     		{
    @@ -330,7 +340,8 @@ class FormAdvTargetEmailing extends Form
     	 * @param int $showempty show empty
     	 * @return string HTML combo
     	 */
    -	function advMultiselectarray($htmlname, $options_array = array(), $selected_array = array(), $showempty = 0) {
    +    function advMultiselectarray($htmlname, $options_array = array(), $selected_array = array(), $showempty = 0)
    +    {
     		global $conf, $langs;
     
     		$form=new Form($this->db);
    @@ -365,10 +376,10 @@ class FormAdvTargetEmailing extends Form
     	/**
     	 *  Return combo list of categories
     	 *
    -	 *  @param  string	$htmlname   Name of categorie
    -	 * 	@param	array	$selected_array	value selected
    -	 * 	@param	int	$type	type
    -	 *  @return	string HTML combo
    +	 *  @param  string	$htmlname  		Name of categorie
    +	 * 	@param	array	$selected_array	Value selected
    +	 * 	@param	int		$type			Type
    +	 *  @return	string 					HTML combo
     	 */
     	public function multiselectCategories($htmlname='',$selected_array = array(), $type=0)
     	{
    @@ -398,7 +409,6 @@ class FormAdvTargetEmailing extends Form
     					$i++;
     				}
     			}
    -
     		}
     		else
     		{
    @@ -417,7 +427,8 @@ class FormAdvTargetEmailing extends Form
     	 * @param	string		$type_element	Type element. Example: 'mailing'
     	 * @return	string 						HTML combo
     	 */
    -	public function selectAdvtargetemailingTemplate($htmlname='template_id', $selected=0, $showempty=0, $type_element='mailing') {
    +    public function selectAdvtargetemailingTemplate($htmlname='template_id', $selected=0, $showempty=0, $type_element='mailing')
    +    {
     		global $conf, $user, $langs;
     
     		$out = '';
    @@ -460,4 +471,4 @@ class FormAdvTargetEmailing extends Form
     		$this->db->free ( $resql );
     		return $out;
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php
    index 63fc0a2caab..11708c3b4ca 100644
    --- a/htdocs/comm/mailing/class/mailing.class.php
    +++ b/htdocs/comm/mailing/class/mailing.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,44 +31,55 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Mailing extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='mailing';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='mailing';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto='email';
     
    -	var $titre;
    -	var $sujet;
    -	var $body;
    -	var $nbemail;
    -	var $bgcolor;
    -	var $bgimage;
    +	public $titre;
    +	public $sujet;
    +	public $body;
    +	public $nbemail;
    +	public $bgcolor;
    +	public $bgimage;
     
    -	var $statut;       // Status 0=Draft, 1=Validated, 2=Sent partially, 3=Sent completely
    +	public $statut;       // Status 0=Draft, 1=Validated, 2=Sent partially, 3=Sent completely
     
    -	var $email_from;
    -	var $email_replyto;
    -	var $email_errorsto;
    +	public $email_from;
    +	public $email_replyto;
    +	public $email_errorsto;
     
    -	var $joined_file1;
    -	var $joined_file2;
    -	var $joined_file3;
    -	var $joined_file4;
    +	public $joined_file1;
    +	public $joined_file2;
    +	public $joined_file3;
    +	public $joined_file4;
     
    -	var $user_creat;
    -	var $user_valid;
    +	public $user_creat;
    +	public $user_valid;
     
    -	var $date_creat;
    -	var $date_valid;
    +	public $date_creat;
    +	public $date_valid;
     
    -	var $extraparams=array();
    +	public $extraparams=array();
     
     	public $statut_dest=array();
     	public $statuts=array();
     
     
    -	/**
    +    /**
          *  Constructor
          *
    -     *  @param      DoliDb		$db      Database handler
    +     *  @param      DoliDb      $db      Database handler
     	 */
     	function __construct($db)
     	{
    @@ -85,7 +96,6 @@ class Mailing extends CommonObject
     		$this->statut_dest[1] = 'MailingStatusSent';
     		$this->statut_dest[2] = 'MailingStatusRead';
     		$this->statut_dest[3] = 'MailingStatusReadAndUnsubscribe';    // Read but ask to not be contacted anymore
    -
     	}
     
     	/**
    @@ -352,7 +362,6 @@ class Mailing extends CommonObject
     							'source_id'=>$obj->source_id,
     							'source_type'=>$obj->source_type);
     						}
    -
     					}
     				}
     				else
    @@ -363,7 +372,6 @@ class Mailing extends CommonObject
     
     				$mailing_target->add_to_target($object->id, $target_array);
     			}
    -
     		}
     
     		unset($object->context['createfromclone']);
    @@ -432,6 +440,7 @@ class Mailing extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Delete targets emailing
     	 *
    @@ -439,6 +448,7 @@ class Mailing extends CommonObject
     	 */
     	function delete_targets()
     	{
    +        // phpcs:enable
     		$sql = "DELETE FROM ".MAIN_DB_PREFIX."mailing_cibles";
     		$sql.= " WHERE fk_mailing = ".$this->id;
     
    @@ -456,6 +466,7 @@ class Mailing extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Change status of each recipient
     	 *
    @@ -464,6 +475,7 @@ class Mailing extends CommonObject
     	 */
     	function reset_targets_status($user)
     	{
    +        // phpcs:enable
     		$sql = "UPDATE ".MAIN_DB_PREFIX."mailing_cibles";
     		$sql.= " SET statut = 0";
     		$sql.= " WHERE fk_mailing = ".$this->id;
    @@ -516,6 +528,81 @@ class Mailing extends CommonObject
     	}
     
     
    +	/**
    +	 *  Return a link to the object card (with optionaly the picto)
    +	 *
    +	 *	@param	int		$withpicto					Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto)
    +	 *	@param	string	$option						On what the link point to ('nolink', ...)
    +	 *  @param	int  	$notooltip					1=Disable tooltip
    +	 *  @param  string  $morecss            		Add more css on link
    +	 *  @param  int     $save_lastsearch_value    	-1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    +	 *	@return	string								String with URL
    +	 */
    +	function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
    +	{
    +		global $db, $conf, $langs, $hookmanager;
    +		global $dolibarr_main_authentication, $dolibarr_main_demo;
    +		global $menumanager;
    +
    +		if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
    +
    +		$result = '';
    +		$companylink = '';
    +
    +		$label = '<u>' . $langs->trans("ShowEmailing") . '</u>';
    +		$label.= '<br>';
    +		$label.= '<b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
    +
    +		$url = DOL_URL_ROOT.'/comm/mailing/card.php?id='.$this->id;
    +
    +		if ($option != 'nolink')
    +		{
    +			// Add param to save lastsearch_values or not
    +			$add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    +			if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1;
    +			if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
    +		}
    +
    +		$linkclose='';
    +		if (empty($notooltip))
    +		{
    +			if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
    +			{
    +				$label=$langs->trans("ShowEmailing");
    +				$linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    +			}
    +			$linkclose.=' title="'.dol_escape_htmltag($label, 1).'"';
    +			$linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"';
    +
    +			/*
    +			 $hookmanager->initHooks(array('myobjectdao'));
    +			 $parameters=array('id'=>$this->id);
    +			 $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +			 if ($reshook > 0) $linkclose = $hookmanager->resPrint;
    +			 */
    +		}
    +		else $linkclose = ($morecss?' class="'.$morecss.'"':'');
    +
    +		$linkstart = '<a href="'.$url.'"';
    +		$linkstart.=$linkclose.'>';
    +		$linkend='</a>';
    +
    +		$result .= $linkstart;
    +		if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
    +		if ($withpicto != 2) $result.= $this->ref;
    +		$result .= $linkend;
    +		//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');
    +
    +		global $action;
    +		$hookmanager->initHooks(array('emailingdao'));
    +		$parameters=array('id'=>$this->id, 'getnomurl'=>$result);
    +		$reshook=$hookmanager->executeHooks('getNomUrl',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +		if ($reshook > 0) $result = $hookmanager->resPrint;
    +		else $result .= $hookmanager->resPrint;
    +
    +		return $result;
    +	}
    +
     	/**
     	 *  Return label of status of emailing (draft, validated, ...)
     	 *
    @@ -527,6 +614,7 @@ class Mailing extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -536,39 +624,36 @@ class Mailing extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load('mails');
     
    -		if ($mode == 0)
    +		if ($mode == 0 || $mode == 1)
     		{
     			return $langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 1)
    -		{
    -			return $langs->trans($this->statuts[$statut]);
    -		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut == 0) return img_picto($langs->trans($this->statuts[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]);
     			if ($statut == 1) return img_picto($langs->trans($this->statuts[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]);
     			if ($statut == 2) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]);
     			if ($statut == 3) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut == 0) return img_picto($langs->trans($this->statuts[$statut]),'statut0');
     			if ($statut == 1) return img_picto($langs->trans($this->statuts[$statut]),'statut1');
     			if ($statut == 2) return img_picto($langs->trans($this->statuts[$statut]),'statut3');
     			if ($statut == 3) return img_picto($langs->trans($this->statuts[$statut]),'statut6');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut == 0) return img_picto($langs->trans($this->statuts[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]);
     			if ($statut == 1) return img_picto($langs->trans($this->statuts[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]);
     			if ($statut == 2) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]);
     			if ($statut == 3) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut == 0)  return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut0');
     			if ($statut == 1)  return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut1');
    @@ -596,39 +681,39 @@ class Mailing extends CommonObject
     		{
     			return $langs->trans('MailingStatusError');
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			return $langs->trans('MailingStatusSent');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc);
     			if ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"),'statut6');
     			if ($statut==2) return $langs->trans("MailingStatusRead").' '.img_picto($langs->trans("MailingStatusRead"),'statut4');
     			if ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"),'statut3');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc);
     			if ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"),'statut6');
     			if ($statut==2) return $langs->trans("MailingStatusRead").' '.img_picto($langs->trans("MailingStatusRead"),'statut4');
     			if ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"),'statut3');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc);
     			if ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"),'statut6');
     			if ($statut==2) return $langs->trans("MailingStatusRead").' '.img_picto($langs->trans("MailingStatusRead"),'statut4');
     			if ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"),'statut3');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     		    if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc);
     		    if ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"),'statut6');
     		    if ($statut==2) return $langs->trans("MailingStatusRead").' '.img_picto($langs->trans("MailingStatusRead"),'statut4');
     		    if ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"),'statut3');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     		    if ($statut==-1) return $langs->trans("MailingStatusError").' '.img_error($desc);
     		    if ($statut==1) return $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"),'statut6');
    @@ -636,6 +721,4 @@ class Mailing extends CommonObject
     		    if ($statut==3) return $langs->trans("MailingStatusNotContact").' '.img_picto($langs->trans("MailingStatusNotContact"),'statut3');
     		}
     	}
    -
     }
    -
    diff --git a/htdocs/comm/mailing/index.php b/htdocs/comm/mailing/index.php
    index 17693a1a73c..cb062e00777 100644
    --- a/htdocs/comm/mailing/index.php
    +++ b/htdocs/comm/mailing/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010      Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -182,7 +182,6 @@ if ($result)
           print '</tr>';
     	  $i++;
     	}
    -
         }
       else
         {
    @@ -210,7 +209,6 @@ if ($langs->file_exists("html/spam.html",0)) {
         print '<br>';
      }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/mailing/info.php b/htdocs/comm/mailing/info.php
    index b4f2eaeb6f3..79b3d209ec7 100644
    --- a/htdocs/comm/mailing/info.php
    +++ b/htdocs/comm/mailing/info.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -75,5 +75,6 @@ if ($object->fetch($id) >= 0)
     	dol_fiche_end();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/mailing/list.php b/htdocs/comm/mailing/list.php
    index 87a390d4006..9f0cabea76f 100644
    --- a/htdocs/comm/mailing/list.php
    +++ b/htdocs/comm/mailing/list.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -35,24 +35,26 @@ $sortfield = GETPOST("sortfield",'alpha');
     $sortorder = GETPOST("sortorder",'alpha');
     $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
     $page = GETPOST("page",'int');
    -if (empty($page) || $page == -1) { $page = 0; }     // If $page is not defined, or '' or -1
    +if (empty($page) || $page == -1 || GETPOST('button_search','alpha') || GETPOST('button_removefilter','alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; }     // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action
     $offset = $limit * $page;
     $pageprev = $page - 1;
     $pagenext = $page + 1;
     if (! $sortorder) $sortorder="DESC";
     if (! $sortfield) $sortfield="m.date_creat";
     
    -$sall=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml'));
    -$sref=GETPOST("sref", "alpha");
    +$search_all=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml'));
    +$search_ref=GETPOST("search_ref", "alpha") ? GETPOST("search_ref", "alpha") : GETPOST("sref", "alpha");
     $filteremail=GETPOST('filteremail','alpha');
     
    +$object = new Mailing($db);
    +
     // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
     $hookmanager->initHooks(array('mailinglist'));
     $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('mailing');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -61,6 +63,52 @@ $fieldstosearchall = array(
     
     
     
    +
    +/*
    + * Actions
    + */
    +
    +if (GETPOST('cancel','alpha')) { $action='list'; $massaction=''; }
    +if (! GETPOST('confirmmassaction','alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; }
    +
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('doActions', $parameters, $object, $action);    // Note that $action and $object may have been modified by some hooks
    +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +
    +if (empty($reshook))
    +{
    +	// Selection of new fields
    +	include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
    +
    +	// Purge search criteria
    +	if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') ||GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers
    +	{
    +		/*foreach($object->fields as $key => $val)
    +		{
    +			$search[$key]='';
    +		}*/
    +		$search_ref = '';
    +		$search_all = '';
    +		$toselect='';
    +		$search_array_options=array();
    +	}
    +	if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')
    +		|| GETPOST('button_search_x','alpha') || GETPOST('button_search.x','alpha') || GETPOST('button_search','alpha'))
    +	{
    +		$massaction='';     // Protection to avoid mass action if we force a new search during a mass action confirmation
    +	}
    +
    +	// Mass actions
    +	/*$objectclass='MyObject';
    +	$objectlabel='MyObject';
    +	$permtoread = $user->rights->mymodule->read;
    +	$permtodelete = $user->rights->mymodule->delete;
    +	$uploaddir = $conf->mymodule->dir_output;
    +	include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
    +	*/
    +}
    +
    +
     /*
      * View
      */
    @@ -76,8 +124,8 @@ if ($filteremail)
     	$sql.= " FROM ".MAIN_DB_PREFIX."mailing as m, ".MAIN_DB_PREFIX."mailing_cibles as mc";
     	$sql.= " WHERE m.rowid = mc.fk_mailing AND m.entity = ".$conf->entity;
     	$sql.= " AND mc.email = '".$db->escape($filteremail)."'";
    -	if ($sref) $sql.= " AND m.rowid = '".$db->escape($sref)."'";
    -	if ($sall) $sql.= " AND (m.titre like '%".$db->escape($sall)."%' OR m.sujet like '%".$db->escape($sall)."%' OR m.body like '%".$db->escape($sall)."%')";
    +	if ($search_ref) $sql.= " AND m.rowid = '".$db->escape($search_ref)."'";
    +	if ($search_all) $sql.= " AND (m.titre like '%".$db->escape($search_all)."%' OR m.sujet like '%".$db->escape($search_all)."%' OR m.body like '%".$db->escape($search_all)."%')";
     	if (! $sortorder) $sortorder="ASC";
     	if (! $sortfield) $sortfield="m.rowid";
     	$sql.= $db->order($sortfield,$sortorder);
    @@ -88,8 +136,8 @@ else
     	$sql = "SELECT m.rowid, m.titre, m.nbemail, m.statut, m.date_creat as datec, m.date_envoi as date_envoi";
     	$sql.= " FROM ".MAIN_DB_PREFIX."mailing as m";
     	$sql.= " WHERE m.entity = ".$conf->entity;
    -	if ($sref) $sql.= " AND m.rowid = '".$db->escape($sref)."'";
    -	if ($sall) $sql.= " AND (m.titre like '%".$db->escape($sall)."%' OR m.sujet like '%".$db->escape($sall)."%' OR m.body like '%".$db->escape($sall)."%')";
    +	if ($search_ref) $sql.= " AND m.rowid = '".$db->escape($search_ref)."'";
    +	if ($search_all) $sql.= " AND (m.titre like '%".$db->escape($search_all)."%' OR m.sujet like '%".$db->escape($search_all)."%' OR m.body like '%".$db->escape($search_all)."%')";
     	if (! $sortorder) $sortorder="ASC";
     	if (! $sortfield) $sortfield="m.rowid";
     	$sql.= $db->order($sortfield,$sortorder);
    @@ -115,7 +163,7 @@ if ($result)
     
     	$i = 0;
     
    -	$param = "&sall=".urlencode($sall);
    +	$param = "&search_all=".urlencode($search_all);
     	if ($filteremail) $param.='&filteremail='.urlencode($filteremail);
     
     	print '<form method="GET" action="'.$_SERVER["PHP_SELF"].'">';
    @@ -135,11 +183,11 @@ if ($result)
     
     	print '<tr class="liste_titre_filter">';
     	print '<td class="liste_titre">';
    -	print '<input type="text" class="flat maxwidth50" name="sref" value="'.dol_escape_htmltag($sref).'">';
    +	print '<input type="text" class="flat maxwidth50" name="search_ref" value="'.dol_escape_htmltag($search_ref).'">';
     	print '</td>';
     	// Title
     	print '<td class="liste_titre">';
    -	print '<input type="text" class="flat maxwidth100 maxwidth50onsmartphone" name="sall" value="'.dol_escape_htmltag($sall).'">';
    +	print '<input type="text" class="flat maxwidth100 maxwidth50onsmartphone" name="search_all" value="'.dol_escape_htmltag($search_all).'">';
     	print '</td>';
     	print '<td class="liste_titre">&nbsp;</td>';
     	if (! $filteremail) print '<td class="liste_titre">&nbsp;</td>';
    @@ -169,16 +217,22 @@ if ($result)
     	{
     		$obj = $db->fetch_object($result);
     
    -
    +		$email->id = $obj->rowid;
    +		$email->ref = $obj->rowid;
     
     		print "<tr>";
    -		print '<td><a href="'.DOL_URL_ROOT.'/comm/mailing/card.php?id='.$obj->rowid.'">';
    -		print img_object($langs->trans("ShowEMail"),"email").' '.stripslashes($obj->rowid).'</a></td>';
    +
    +		print '<td>';
    +		print $email->getNomUrl(1);
    +		print '</td>';
    +
     		print '<td>'.$obj->titre.'</td>';
     		// Date creation
    +
     		print '<td align="center">';
     		print dol_print_date($db->jdate($obj->datec),'day');
     		print '</td>';
    +
     		// Nb of email
     		if (! $filteremail)
     		{
    @@ -196,9 +250,11 @@ if ($result)
     			print $nbemail;
     			print '</td>';
     		}
    +
     		// Last send
     		print '<td align="center" class="nowrap">'.dol_print_date($db->jdate($obj->date_envoi),'day').'</td>';
     		print '</td>';
    +
     		// Status
     		print '<td align="right" class="nowrap">';
     		if ($filteremail)
    @@ -210,7 +266,9 @@ if ($result)
     			print $email->LibStatut($obj->statut,5);
     		}
     		print '</td>';
    +
     		print '<td></td>';
    +
     		print "</tr>\n";
     		$i++;
     	}
    @@ -224,6 +282,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/multiprix.php b/htdocs/comm/multiprix.php
    index 1e8c5c82cf4..7bbf727a517 100644
    --- a/htdocs/comm/multiprix.php
    +++ b/htdocs/comm/multiprix.php
    @@ -45,7 +45,7 @@ if ($user->societe_id > 0)
     
     if ($_POST["action"] == 'setpricelevel')
     {
    -	$soc = New Societe($db);
    +	$soc = new Societe($db);
     	$soc->fetch($id);
     	$soc->set_price_level($_POST["price_level"],$user);
     
    @@ -174,8 +174,8 @@ if ($_socid > 0)
     	{
     		dol_print_error($db);
     	}
    -
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/propal/card.php b/htdocs/comm/propal/card.php
    index 879fcc3f5e2..0bd4bb3d0d7 100644
    --- a/htdocs/comm/propal/card.php
    +++ b/htdocs/comm/propal/card.php
    @@ -1,17 +1,18 @@
     <?php
    -/* Copyright (C) 2001-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
    +/* Copyright (C) 2001-2007  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne           <eric.seigne@ryxeo.com>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani      <acianfa@free.fr>
      * Copyright (C) 2010-2016 Juanjo Menent         <jmenent@2byte.es>
    - * Copyright (C) 2010-2015 Philippe Grand        <philippe.grand@atoo-net.com>
    + * Copyright (C) 2010-2018 Philippe Grand        <philippe.grand@atoo-net.com>
      * Copyright (C) 2012-2013 Christophe Battarel   <christophe.battarel@altairis.fr>
      * Copyright (C) 2012      Cedric Salvador       <csalvador@gpcsolutions.fr>
      * Copyright (C) 2013-2014 Florian Henry		 <florian.henry@open-concept.pro>
      * Copyright (C) 2014	   Ferran Marcet		 <fmarcet@2byte.es>
      * Copyright (C) 2016      Marcos García         <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -347,13 +348,13 @@ if (empty($reshook))
     			// If we select proposal to clone during creation (when option PROPAL_CLONE_ON_CREATE_PAGE is on)
     			if (GETPOST('createmode') == 'copy' && GETPOST('copie_propal'))
     			{
    -				if ($object->fetch(GETPOST('copie_propal')) > 0) {
    +				if ($object->fetch(GETPOST('copie_propal','int')) > 0) {
     					$object->ref = GETPOST('ref');
     					$object->datep = $datep;
     					$object->date_livraison = $date_delivery;
     					$object->availability_id = GETPOST('availability_id');
     					$object->demand_reason_id = GETPOST('demand_reason_id');
    -					$object->fk_delivery_address = GETPOST('fk_address');
    +					$object->fk_delivery_address = GETPOST('fk_address','int');
     					$object->shipping_method_id = GETPOST('shipping_method_id', 'int');
     					$object->duree_validite = $duration;
     					$object->cond_reglement_id = GETPOST('cond_reglement_id');
    @@ -361,9 +362,9 @@ if (empty($reshook))
     					$object->fk_account = GETPOST('fk_account', 'int');
     					$object->remise_percent = GETPOST('remise_percent');
     					$object->remise_absolue = GETPOST('remise_absolue');
    -					$object->socid = GETPOST('socid');
    -					$object->contactid = GETPOST('contactid');
    -					$object->fk_project = GETPOST('projectid');
    +					$object->socid = GETPOST('socid','int');
    +					$object->contactid = GETPOST('contactid','int');
    +					$object->fk_project = GETPOST('projectid','int');
     					$object->modelpdf = GETPOST('model');
     					$object->author = $user->id; // deprecated
     					$object->note_private = GETPOST('note_private','none');
    @@ -379,6 +380,7 @@ if (empty($reshook))
     				}
     			} else {
     				$object->ref = GETPOST('ref');
    +				$object->entity = (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity);
     				$object->ref_client = GETPOST('ref_client');
     				$object->datep = $datep;
     				$object->date_livraison = $date_delivery;
    @@ -390,8 +392,8 @@ if (empty($reshook))
     				$object->cond_reglement_id = GETPOST('cond_reglement_id');
     				$object->mode_reglement_id = GETPOST('mode_reglement_id');
     				$object->fk_account = GETPOST('fk_account', 'int');
    -				$object->contactid = GETPOST('contactid');
    -				$object->fk_project = GETPOST('projectid');
    +				$object->contactid = GETPOST('contactid','int');
    +				$object->fk_project = GETPOST('projectid','int');
     				$object->modelpdf = GETPOST('model');
     				$object->author = $user->id; // deprecated
     				$object->note_private = GETPOST('note_private','none');
    @@ -565,6 +567,16 @@ if (empty($reshook))
     						}
     					}
     
    +					if (! empty($conf->global->PROPOSAL_AUTO_ADD_AUTHOR_AS_CONTACT))
    +					{
    +						$result = $object->add_contact($user->id, 'SALESREPFOLL', 'internal');
    +						if ($result < 0)
    +						{
    +							$error++;
    +							setEventMessages($langs->trans("ErrorFailedToAddUserAsContact"), null, 'errors');
    +						}
    +					}
    +
     					if (! $error)
     					{
     						$db->commit();
    @@ -783,7 +795,7 @@ if (empty($reshook))
     				if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
     					$idprod = $res->fk_product_child;
     				} else {
    -					setEventMessage($langs->trans('ErrorProductCombinationNotFound'), 'errors');
    +					setEventMessages($langs->trans('ErrorProductCombinationNotFound'), null, 'errors');
     					$error ++;
     				}
     			}
    @@ -1026,7 +1038,7 @@ if (empty($reshook))
     			if ($tva_npr)
     				$info_bits |= 0x01;
     
    -			if (! empty($price_min) && (price2num($pu_ht) * (1 - price2num($remise_percent) / 100) < price2num($price_min))) {
    +			if (((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS) ) && (! empty($price_min) && (price2num($pu_ht) * (1 - price2num($remise_percent) / 100) < price2num($price_min)))) {
     				$mesg = $langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency));
     				setEventMessages($mesg, null, 'errors');
     			} else {
    @@ -1090,7 +1102,7 @@ if (empty($reshook))
     	}
     
     	// Update a line within proposal
    -	else if ($action == 'updateligne' && $usercancreate && GETPOST('save'))
    +	else if ($action == 'updateline' && $usercancreate && GETPOST('save'))
     	{
     		// Define info_bits
     		$info_bits = 0;
    @@ -1145,8 +1157,7 @@ if (empty($reshook))
     				$price_min = $product->multiprices_min [$object->thirdparty->price_level];
     
     			$label = ((GETPOST('update_label') && GETPOST('product_label')) ? GETPOST('product_label') : '');
    -
    -			if ($price_min && (price2num($pu_ht) * (1 - price2num(GETPOST('remise_percent')) / 100) < price2num($price_min))) {
    +			if (((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS) )&& ($price_min && (price2num($pu_ht) * (1 - price2num(GETPOST('remise_percent')) / 100) < price2num($price_min)))) {
     				setEventMessages($langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency)), null, 'errors');
     				$error ++;
     			}
    @@ -1227,7 +1238,7 @@ if (empty($reshook))
     		}
     	}
     
    -	else if ($action == 'updateligne' && $usercancreate && GETPOST('cancel','alpha'))
    +	else if ($action == 'updateline' && $usercancreate && GETPOST('cancel','alpha'))
     	{
     		header('Location: ' . $_SERVER['PHP_SELF'] . '?id=' . $object->id); // Pour reaffichage de la fiche en cours d'edition
     		exit();
    @@ -1354,7 +1365,6 @@ if (empty($reshook))
     	$upload_dir = $conf->propal->multidir_output[$object->entity];
     	$permissioncreate=$usercancreate;
     	include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
    -
     }
     
     
    @@ -1529,7 +1539,7 @@ if ($action == 'create')
     
     	// Date
     	print '<tr><td class="fieldrequired">' . $langs->trans('Date') . '</td><td>';
    -	$form->select_date('', '', '', '', '', "addprop", 1, 1);
    +	print $form->selectDate('', '', '', '', '', "addprop", 1, 1);
     	print '</td></tr>';
     
     	// Validaty duration
    @@ -1577,9 +1587,9 @@ if ($action == 'create')
     		$syear = date("Y", $tmpdte);
     		$smonth = date("m", $tmpdte);
     		$sday = date("d", $tmpdte);
    -		$form->select_date($syear."-".$smonth."-".$sday, 'date_livraison', '', '', '', "addprop");
    +		print $form->selectDate($syear."-".$smonth."-".$sday, 'date_livraison', '', '', '', "addprop");
     	} else {
    -		$form->select_date(-1, 'date_livraison', '', '', '', "addprop", 1, 1);
    +		print $form->selectDate(-1, 'date_livraison', '', '', '', "addprop", 1, 1);
     	}
     	print '</td></tr>';
     
    @@ -1767,7 +1777,6 @@ if ($action == 'create')
     
     		print '</table>';
     	}
    -
     } elseif ($object->id > 0) {
     	/*
     	 * Show object in view mode
    @@ -1815,7 +1824,6 @@ if ($action == 'create')
     		}
     
     		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('SetAcceptedRefused'), $text, 'setstatut', $formquestion, '', 1, 250);
    -
     	}
     
     	// Confirm delete
    @@ -1861,12 +1869,11 @@ if ($action == 'create')
     			$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('ValidateProp'), $text, 'confirm_validate', '', 0, 1);
     	}
     
    -	if (! $formconfirm) {
    -		$parameters = array('lineid' => $lineid);
    -		$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -		if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -		elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -	}
    +	// Call Hook formConfirm
    +	$parameters = array('lineid' => $lineid);
    +	$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +	if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +	elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     	// Print form confirm
     	print $formconfirm;
    @@ -1964,7 +1971,7 @@ if ($action == 'create')
     		print '<form name="editdate" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '" method="post">';
     		print '<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">';
     		print '<input type="hidden" name="action" value="setdate">';
    -		$form->select_date($object->date, 're', '', '', 0, "editdate");
    +		print $form->selectDate($object->date, 're', '', '', 0, "editdate");
     		print '<input type="submit" class="button" value="' . $langs->trans('Modify') . '">';
     		print '</form>';
     	} else {
    @@ -1990,7 +1997,7 @@ if ($action == 'create')
     		print '<form name="editecheance" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '" method="post">';
     		print '<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">';
     		print '<input type="hidden" name="action" value="setecheance">';
    -		$form->select_date($object->fin_validite, 'ech', '', '', '', "editecheance");
    +		print $form->selectDate($object->fin_validite, 'ech', '', '', '', "editecheance");
     		print '<input type="submit" class="button" value="' . $langs->trans('Modify') . '">';
     		print '</form>';
     	} else {
    @@ -2098,7 +2105,7 @@ if ($action == 'create')
     	print '</tr></table>';
     	print '</td><td>';
     	if (! empty($object->brouillon) && $action == 'editmode' && $usercancreate) {
    -		$form->form_modes_reglement($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->mode_reglement_id, 'mode_reglement_id');
    +		$form->form_modes_reglement($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->mode_reglement_id, 'mode_reglement_id', 'CRDT');
     	} else {
     		$form->form_modes_reglement($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->mode_reglement_id, 'none');
     	}
    @@ -2318,7 +2325,7 @@ if ($action == 'create')
     
     	print '	<form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#addline' : '#line_' . GETPOST('lineid')) . '" method="POST">
     	<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">
    -	<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateligne') . '">
    +	<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline') . '">
     	<input type="hidden" name="mode" value="">
     	<input type="hidden" name="id" value="' . $object->id . '">
     	';
    diff --git a/htdocs/comm/propal/class/api_proposals.class.php b/htdocs/comm/propal/class/api_proposals.class.php
    index 39857d88365..a03624f3122 100644
    --- a/htdocs/comm/propal/class/api_proposals.class.php
    +++ b/htdocs/comm/propal/class/api_proposals.class.php
    @@ -97,7 +97,8 @@ class Proposals extends DolibarrApi
     	 * @param string    $sqlfilters         Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')"
     	 * @return  array                       Array of order objects
     	 */
    -	function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '')
    +    {
     		global $db, $conf;
     
     		$obj_ret = array();
    @@ -215,7 +216,8 @@ class Proposals extends DolibarrApi
     	 *
     	 * @return int
     	 */
    -	function getLines($id) {
    +    function getLines($id)
    +    {
     	  if(! DolibarrApiAccess::$user->rights->propal->lire) {
     		  	throw new RestException(401);
     		  }
    @@ -381,7 +383,8 @@ class Proposals extends DolibarrApi
          * @throws 401
          * @throws 404
     	 */
    -	function deleteLine($id, $lineid) {
    +    function deleteLine($id, $lineid)
    +    {
     		if(! DolibarrApiAccess::$user->rights->propal->creer) {
     		  	throw new RestException(401);
     		}
    @@ -415,7 +418,8 @@ class Proposals extends DolibarrApi
     	 *
     	 * @return int
     	 */
    -	function put($id, $request_data = null) {
    +    function put($id, $request_data = null)
    +    {
     	  if(! DolibarrApiAccess::$user->rights->propal->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -487,7 +491,6 @@ class Proposals extends DolibarrApi
     				'message' => 'Commercial Proposal deleted'
     			)
     		);
    -
     	}
     
     	/**
    @@ -697,29 +700,29 @@ class Proposals extends DolibarrApi
     			if (!isset($data[$field]))
     				throw new RestException(400, "$field field missing");
     			$propal[$field] = $data[$field];
    -
     		}
     		return $propal;
     	}
     
     
    -	/**
    -	 * Clean sensible object datas
    -	 *
    -	 * @param   object  $object    Object to clean
    -	 * @return    array    Array of cleaned object properties
    -	 */
    -	function _cleanObjectDatas($object) {
    +    /**
    +     * Clean sensible object datas
    +     *
    +     * @param   object  $object    Object to clean
    +     * @return    array    Array of cleaned object properties
    +     */
    +    function _cleanObjectDatas($object)
    +    {
     
    -		$object = parent::_cleanObjectDatas($object);
    +        $object = parent::_cleanObjectDatas($object);
     
    -        	unset($object->note);
    -		unset($object->name);
    -		unset($object->lastname);
    -		unset($object->firstname);
    -		unset($object->civility_id);
    -		unset($object->address);
    +        unset($object->note);
    +        unset($object->name);
    +        unset($object->lastname);
    +        unset($object->firstname);
    +        unset($object->civility_id);
    +        unset($object->address);
     
    -		return $object;
    -	}
    +        return $object;
    +    }
     }
    diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php
    index e68b18ae820..0fcdcd47546 100644
    --- a/htdocs/comm/propal/class/propal.class.php
    +++ b/htdocs/comm/propal/class/propal.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004      Eric Seigne				<eric.seigne@ryxeo.com>
      * Copyright (C) 2004-2011 Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley			<marc@ocebo.com>
    - * Copyright (C) 2005-2013 Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani			<acianfa@free.fr>
      * Copyright (C) 2008      Raphael Bertrand			<raphael.bertrand@resultic.fr>
      * Copyright (C) 2010-2014 Juanjo Menent			<jmenent@2byte.es>
    @@ -46,16 +46,37 @@ require_once DOL_DOCUMENT_ROOT .'/multicurrency/class/multicurrency.class.php';
      */
     class Propal extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='propal';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='propal';
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line='propaldet';
    -	public $fk_element='fk_propal';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
    +	public $fk_element ='fk_propal';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto='propal';
    +
     	/**
     	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 * @var int
     	 */
     	public $ismultientitymanaged = 1;
    +
     	/**
     	 * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
     	 * @var integer
    @@ -147,7 +168,12 @@ class Propal extends CommonObject
     	public $remise = 0;
     	public $remise_percent = 0;
     	public $remise_absolue = 0;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_address;
    +
     	public $address_type;
     	public $address;
     	public $availability_id;
    @@ -170,7 +196,11 @@ class Propal extends CommonObject
     	public $specimen;
     
     	// Multicurrency
    +	/**
    +     * @var int ID
    +     */
     	public $fk_multicurrency;
    +
     	public $multicurrency_code;
     	public $multicurrency_tx;
     	public $multicurrency_total_ht;
    @@ -223,9 +253,10 @@ class Propal extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 * 	Add line into array products
    -	 *	$this->thirdparty should be loaded
    +	 *  Add line into array products
    +	 *  $this->thirdparty should be loaded
     	 *
     	 * 	@param  int		$idproduct       	Product Id to add
     	 * 	@param  int		$qty             	Quantity
    @@ -237,6 +268,7 @@ class Propal extends CommonObject
     	 */
     	function add_product($idproduct, $qty, $remise_percent=0)
     	{
    +        // phpcs:enable
     		global $conf, $mysoc;
     
     		if (! $qty) $qty = 1;
    @@ -283,6 +315,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Adding line of fixed discount in the proposal in DB
     	 *
    @@ -291,6 +324,7 @@ class Propal extends CommonObject
     	 */
     	function insert_discount($idremise)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
    @@ -840,6 +874,7 @@ class Propal extends CommonObject
     		$now=dol_now();
     
     		// Clean parameters
    +		if (empty($this->entity)) $this->entity = $conf->entity;
     		if (empty($this->date)) $this->date=$this->datep;
     		$this->fin_validite = $this->date + ($this->duree_validite * 24 * 3600);
     		if (empty($this->availability_id)) $this->availability_id=0;
    @@ -949,7 +984,7 @@ class Propal extends CommonObject
     		$sql.= ", ".($this->fk_project?$this->fk_project:"null");
     		$sql.= ", ".(int) $this->fk_incoterms;
     		$sql.= ", '".$this->db->escape($this->location_incoterms)."'";
    -		$sql.= ", ".$conf->entity;
    +		$sql.= ", ".$this->entity;
     		$sql.= ", ".(int) $this->fk_multicurrency;
     		$sql.= ", '".$this->db->escape($this->multicurrency_code)."'";
     		$sql.= ", ".(double) $this->multicurrency_tx;
    @@ -1155,6 +1190,7 @@ class Propal extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Insert into DB a proposal object completely defined by its data members (ex, results from copy).
     	 *
    @@ -1164,6 +1200,7 @@ class Propal extends CommonObject
     	 */
     	function create_from($user)
     	{
    +        // phpcs:enable
     		// i love this function because $this->products is not used in create function...
     		$this->products=$this->lines;
     
    @@ -1546,6 +1583,7 @@ class Propal extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Load array lines
     	 *
    @@ -1554,15 +1592,16 @@ class Propal extends CommonObject
     	 */
     	function fetch_lines($only_product=0)
     	{
    +        // phpcs:enable
     		$this->lines=array();
     
     		$sql = 'SELECT d.rowid, d.fk_propal, d.fk_parent_line, d.label as custom_label, d.description, d.price, d.vat_src_code, d.tva_tx, d.localtax1_tx, d.localtax2_tx, d.localtax1_type, d.localtax2_type, d.qty, d.fk_remise_except, d.remise_percent, d.subprice, d.fk_product,';
     		$sql.= ' d.info_bits, d.total_ht, d.total_tva, d.total_localtax1, d.total_localtax2, d.total_ttc, d.fk_product_fournisseur_price as fk_fournprice, d.buy_price_ht as pa_ht, d.special_code, d.rang, d.product_type,';
     		$sql.= ' d.fk_unit,';
    -		$sql.= ' p.ref as product_ref, p.description as product_desc, p.fk_product_type, p.label as product_label,';
    +		$sql.= ' p.ref as product_ref, p.description as product_desc, p.fk_product_type, p.label as product_label, p.tobatch as product_batch,';
     		$sql.= ' p.weight, p.weight_units, p.volume, p.volume_units,';
    -		$sql.= ' d.date_start, d.date_end';
    -		$sql.= ' ,d.fk_multicurrency, d.multicurrency_code, d.multicurrency_subprice, d.multicurrency_total_ht, d.multicurrency_total_tva, d.multicurrency_total_ttc';
    +		$sql.= ' d.date_start, d.date_end,';
    +		$sql.= ' d.fk_multicurrency, d.multicurrency_code, d.multicurrency_subprice, d.multicurrency_total_ht, d.multicurrency_total_tva, d.multicurrency_total_ttc';
     		$sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as d';
     		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON (d.fk_product = p.rowid)';
     		$sql.= ' WHERE d.fk_propal = '.$this->id;
    @@ -1591,6 +1630,7 @@ class Propal extends CommonObject
     				$line->product_type     = $objp->product_type;
     				$line->label            = $objp->custom_label;
     				$line->desc             = $objp->description;  // Description ligne
    +				$line->description      = $objp->description;  // Description ligne
     				$line->qty              = $objp->qty;
     				$line->vat_src_code     = $objp->vat_src_code;
     				$line->tva_tx           = $objp->tva_tx;
    @@ -1624,7 +1664,8 @@ class Propal extends CommonObject
     				$line->libelle			= $objp->product_label;		// TODO deprecated
     				$line->product_label	= $objp->product_label;
     				$line->product_desc     = $objp->product_desc; 		// Description produit
    -				$line->fk_product_type  = $objp->fk_product_type;
    +				$line->product_tobatch  = $objp->product_tobatch;
    +				$line->fk_product_type  = $objp->fk_product_type;	// TODO deprecated
     				$line->fk_unit          = $objp->fk_unit;
     				$line->weight = $objp->weight;
     				$line->weight_units = $objp->weight_units;
    @@ -1783,6 +1824,7 @@ class Propal extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Define proposal date
     	 *
    @@ -1793,6 +1835,7 @@ class Propal extends CommonObject
     	 */
     	function set_date($user, $date, $notrigger=0)
     	{
    +        // phpcs:enable
     		if (empty($date))
     		{
     			$this->error='ErrorBadParameter';
    @@ -1850,6 +1893,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define end validity date
     	 *
    @@ -1860,6 +1904,7 @@ class Propal extends CommonObject
     	 */
     	function set_echeance($user, $date_fin_validite, $notrigger=0)
     	{
    +        // phpcs:enable
     		if (! empty($user->rights->propal->creer))
     		{
     			$error=0;
    @@ -1910,6 +1955,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set delivery date
     	 *
    @@ -1920,6 +1966,7 @@ class Propal extends CommonObject
     	 */
     	function set_date_livraison($user, $date_livraison, $notrigger=0)
     	{
    +        // phpcs:enable
     		if (! empty($user->rights->propal->creer))
     		{
     			$error=0;
    @@ -1970,6 +2017,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Set delivery
     	 *
    @@ -1980,6 +2028,7 @@ class Propal extends CommonObject
     	 */
     	function set_availability($user, $id, $notrigger=0)
     	{
    +        // phpcs:enable
     		if (! empty($user->rights->propal->creer) && $this->statut >= self::STATUS_DRAFT)
     		{
     			$error=0;
    @@ -2039,6 +2088,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Set source of demand
     	 *
    @@ -2049,6 +2099,7 @@ class Propal extends CommonObject
     	 */
     	function set_demand_reason($user, $id, $notrigger=0)
     	{
    +        // phpcs:enable
     		if (! empty($user->rights->propal->creer) && $this->statut >= self::STATUS_DRAFT)
     		{
     			$error=0;
    @@ -2110,6 +2161,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set customer reference number
     	 *
    @@ -2120,6 +2172,7 @@ class Propal extends CommonObject
     	 */
     	function set_ref_client($user, $ref_client, $notrigger=0)
     	{
    +        // phpcs:enable
     		if (! empty($user->rights->propal->creer))
     		{
     			$error=0;
    @@ -2173,6 +2226,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set an overall discount on the proposal
     	 *
    @@ -2183,6 +2237,7 @@ class Propal extends CommonObject
     	 */
     	function set_remise_percent($user, $remise, $notrigger=0)
     	{
    +        // phpcs:enable
     		$remise=trim($remise)?trim($remise):0;
     
     		if (! empty($user->rights->propal->creer))
    @@ -2238,6 +2293,7 @@ class Propal extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set an absolute overall discount on the proposal
     	 *
    @@ -2248,6 +2304,7 @@ class Propal extends CommonObject
     	 */
     	function set_remise_absolue($user, $remise, $notrigger=0)
     	{
    +        // phpcs:enable
     		$remise=trim($remise)?trim($remise):0;
     
     		if (! empty($user->rights->propal->creer))
    @@ -2526,6 +2583,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set draft status
     	 *
    @@ -2535,6 +2593,7 @@ class Propal extends CommonObject
     	 */
     	function set_draft($user, $notrigger=0)
     	{
    +        // phpcs:enable
     		$error=0;
     
     		$this->db->begin();
    @@ -2583,6 +2642,7 @@ class Propal extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return list of proposal (eventually filtered on user) into an array
     	 *
    @@ -2598,6 +2658,7 @@ class Propal extends CommonObject
     	 */
     	function liste_array($shortlist=0, $draft=0, $notcurrentuser=0, $socid=0, $limit=0, $offset=0, $sortfield='p.datep', $sortorder='DESC')
     	{
    +        // phpcs:enable
     		global $user;
     
     		$ga = array();
    @@ -2669,6 +2730,7 @@ class Propal extends CommonObject
     		return $this->InvoiceArrayList($this->id);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Returns an array with id and ref of related invoices
     	 *
    @@ -2677,6 +2739,7 @@ class Propal extends CommonObject
     	 */
     	function InvoiceArrayList($id)
     	{
    +        // phpcs:enable
     		$ga = array();
     		$linkedInvoices = array();
     
    @@ -2947,6 +3010,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Change source demand
     	 *
    @@ -2957,6 +3021,7 @@ class Propal extends CommonObject
     	 */
     	function demand_reason($demand_reason_id, $notrigger=0)
     	{
    +        // phpcs:enable
     		global $user;
     
     		if ($this->statut >= self::STATUS_DRAFT)
    @@ -3063,11 +3128,8 @@ class Propal extends CommonObject
     					$cluser->fetch($obj->fk_user_cloture);
     					$this->user_cloture     = $cluser;
     				}
    -
    -
     			}
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -3087,6 +3149,7 @@ class Propal extends CommonObject
     		return $this->LibStatut($this->statut, $mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    	Return label of a status (draft, validated, ...)
     	 *
    @@ -3096,6 +3159,7 @@ class Propal extends CommonObject
     	 */
     	function LibStatut($statut,$mode=1)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		// Init/load array of translation of status
    @@ -3117,21 +3181,22 @@ class Propal extends CommonObject
     
     		$statuttrans='';
     		if ($statut==self::STATUS_DRAFT) $statuttrans='statut0';
    -		if ($statut==self::STATUS_VALIDATED) $statuttrans='statut1';
    -		if ($statut==self::STATUS_SIGNED) $statuttrans='statut3';
    -		if ($statut==self::STATUS_NOTSIGNED) $statuttrans='statut5';
    -		if ($statut==self::STATUS_BILLED) $statuttrans='statut6';
    +		elseif ($statut==self::STATUS_VALIDATED) $statuttrans='statut1';
    +		elseif ($statut==self::STATUS_SIGNED) $statuttrans='statut3';
    +		elseif ($statut==self::STATUS_NOTSIGNED) $statuttrans='statut5';
    +		elseif ($statut==self::STATUS_BILLED) $statuttrans='statut6';
     
     		if ($mode == 0)	return $this->labelstatut[$statut];
    -		if ($mode == 1)	return $this->labelstatut_short[$statut];
    -		if ($mode == 2)	return img_picto($this->labelstatut_short[$statut], $statuttrans).' '.$this->labelstatut_short[$statut];
    -		if ($mode == 3)	return img_picto($this->labelstatut[$statut], $statuttrans);
    -		if ($mode == 4)	return img_picto($this->labelstatut[$statut],$statuttrans).' '.$this->labelstatut[$statut];
    -		if ($mode == 5)	return '<span class="hideonsmartphone">'.$this->labelstatut_short[$statut].' </span>'.img_picto($this->labelstatut[$statut],$statuttrans);
    -		if ($mode == 6)	return '<span class="hideonsmartphone">'.$this->labelstatut[$statut].' </span>'.img_picto($this->labelstatut[$statut],$statuttrans);
    -	 }
    +		elseif ($mode == 1)	return $this->labelstatut_short[$statut];
    +		elseif ($mode == 2)	return img_picto($this->labelstatut_short[$statut], $statuttrans).' '.$this->labelstatut_short[$statut];
    +		elseif ($mode == 3)	return img_picto($this->labelstatut[$statut], $statuttrans);
    +		elseif ($mode == 4)	return img_picto($this->labelstatut[$statut],$statuttrans).' '.$this->labelstatut[$statut];
    +		elseif ($mode == 5)	return '<span class="hideonsmartphone">'.$this->labelstatut_short[$statut].' </span>'.img_picto($this->labelstatut[$statut],$statuttrans);
    +		elseif ($mode == 6)	return '<span class="hideonsmartphone">'.$this->labelstatut[$statut].' </span>'.img_picto($this->labelstatut[$statut],$statuttrans);
    +	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
     	 *
    @@ -3141,11 +3206,12 @@ class Propal extends CommonObject
     	 */
     	function load_board($user,$mode)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		$clause = " WHERE";
     
    -		$sql = "SELECT p.rowid, p.ref, p.datec as datec, p.fin_validite as datefin";
    +		$sql = "SELECT p.rowid, p.ref, p.datec as datec, p.fin_validite as datefin, p.total_ht";
     		$sql.= " FROM ".MAIN_DB_PREFIX."propal as p";
     		if (!$user->rights->societe->client->voir && !$user->societe_id)
     		{
    @@ -3189,6 +3255,8 @@ class Propal extends CommonObject
     			while ($obj=$this->db->fetch_object($resql))
     			{
     				$response->nbtodo++;
    +				$response->total+=$obj->total_ht;
    +
     				if ($mode == 'opened')
     				{
     					$datelimit = $this->db->jdate($obj->datefin);
    @@ -3304,6 +3372,7 @@ class Propal extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Charge indicateurs this->nb de tableau de bord
     	 *
    @@ -3311,6 +3380,7 @@ class Propal extends CommonObject
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $user;
     
     		$this->nb=array();
    @@ -3359,13 +3429,7 @@ class Propal extends CommonObject
     		global $conf,$langs;
     		$langs->load("propal");
     
    -		$constant = 'PROPALE_ADDON_'.$this->entity;
    -
    -		if (! empty($conf->global->$constant)) {
    -			$classname = $conf->global->$constant; // for multicompany proposal sharing
    -		} else {
    -			$classname = $conf->global->PROPALE_ADDON;
    -		}
    +		$classname = $conf->global->PROPALE_ADDON;
     
     		if (! empty($classname))
     		{
    @@ -3492,103 +3556,13 @@ class Propal extends CommonObject
     	}
     
     	/**
    -	 * 	Retrieve an array of propal lines
    +	 * 	Retrieve an array of proposal lines
     	 *
     	 * 	@return int		>0 if OK, <0 if KO
     	 */
     	function getLinesArray()
     	{
    -		// TODO Duplicate with fetch_lines ? Wich one to keep ?
    -
    -		$this->lines = array();
    -
    -		$sql = 'SELECT pt.rowid, pt.label as custom_label, pt.description, pt.fk_product, pt.fk_remise_except,';
    -		$sql.= ' pt.qty, pt.vat_src_code, pt.tva_tx, pt.localtax1_tx, pt.localtax2_tx, pt.localtax1_type, pt.localtax2_type, pt.remise_percent, pt.subprice, pt.info_bits,';
    -		$sql.= ' pt.total_ht, pt.total_tva, pt.total_ttc, pt.total_localtax1, pt.total_localtax2, pt.fk_product_fournisseur_price as fk_fournprice, pt.buy_price_ht as pa_ht, pt.special_code,';
    -		$sql.= ' pt.date_start, pt.date_end, pt.product_type, pt.rang, pt.fk_parent_line,';
    -		$sql.= ' pt.fk_unit,';
    -		$sql.= ' p.label as product_label, p.ref, p.fk_product_type, p.rowid as prodid, p.description as product_desc, p.tobatch as product_tobatch,';
    -		$sql.= ' p.entity,';
    -		$sql.= ' pt.fk_multicurrency, pt.multicurrency_code, pt.multicurrency_subprice, pt.multicurrency_total_ht, pt.multicurrency_total_tva, pt.multicurrency_total_ttc';
    -		$sql.= ' FROM '.MAIN_DB_PREFIX.'propaldet as pt';
    -		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON pt.fk_product=p.rowid';
    -		$sql.= ' WHERE pt.fk_propal = '.$this->id;
    -		$sql.= ' ORDER BY pt.rang ASC, pt.rowid';
    -
    -		dol_syslog(get_class($this).'::getLinesArray', LOG_DEBUG);
    -		$resql = $this->db->query($sql);
    -		if ($resql)
    -		{
    -			$num = $this->db->num_rows($resql);
    -			$i = 0;
    -
    -			while ($i < $num)
    -			{
    -				$obj = $this->db->fetch_object($resql);
    -
    -				$this->lines[$i]					= new PropaleLigne($this->db);
    -				$this->lines[$i]->id				= $obj->rowid; // for backward compatibility
    -				$this->lines[$i]->rowid				= $obj->rowid;
    -				$this->lines[$i]->label 			= $obj->custom_label;
    -				$this->lines[$i]->desc       		= $obj->description;
    -				$this->lines[$i]->description 		= $obj->description;
    -				$this->lines[$i]->fk_product		= $obj->fk_product;
    -				$this->lines[$i]->ref				= $obj->ref;
    -				$this->lines[$i]->product_ref		= $obj->ref;
    -				$this->lines[$i]->entity            = $obj->entity;             // Product entity
    -				$this->lines[$i]->product_label		= $obj->product_label;
    -				$this->lines[$i]->product_desc		= $obj->product_desc;
    -				$this->lines[$i]->product_tobatch   = $obj->product_tobatch;
    -				$this->lines[$i]->fk_product_type	= $obj->fk_product_type;    // deprecated
    -				$this->lines[$i]->product_type		= $obj->product_type;
    -				$this->lines[$i]->qty				= $obj->qty;
    -				$this->lines[$i]->subprice			= $obj->subprice;
    -				$this->lines[$i]->fk_remise_except 	= $obj->fk_remise_except;
    -				$this->lines[$i]->remise_percent	= $obj->remise_percent;
    -
    -				$this->lines[$i]->vat_src_code      = $obj->vat_src_code;
    -				$this->lines[$i]->tva_tx			= $obj->tva_tx;
    -				$this->lines[$i]->localtax1_tx		= $obj->localtax1_tx;
    -				$this->lines[$i]->localtax2_tx		= $obj->localtax2_tx;
    -				$this->lines[$i]->localtax1_type	= $obj->localtax1_type;
    -				$this->lines[$i]->localtax2_type	= $obj->localtax2_type;
    -				$this->lines[$i]->info_bits			= $obj->info_bits;
    -				$this->lines[$i]->total_ht			= $obj->total_ht;
    -				$this->lines[$i]->total_tva			= $obj->total_tva;
    -				$this->lines[$i]->total_ttc			= $obj->total_ttc;
    -				$this->lines[$i]->total_localtax1	= $obj->total_localtax1;
    -				$this->lines[$i]->total_localtax2	= $obj->total_localtax2;
    -				$this->lines[$i]->fk_fournprice		= $obj->fk_fournprice;
    -				$marginInfos						= getMarginInfos($obj->subprice, $obj->remise_percent, $obj->tva_tx, $obj->localtax1_tx, $obj->localtax2_tx, $this->lines[$i]->fk_fournprice, $obj->pa_ht);
    -				$this->lines[$i]->pa_ht				= $marginInfos[0];
    -				$this->lines[$i]->marge_tx			= $marginInfos[1];
    -				$this->lines[$i]->marque_tx			= $marginInfos[2];
    -				$this->lines[$i]->fk_parent_line	= $obj->fk_parent_line;
    -				$this->lines[$i]->special_code		= $obj->special_code;
    -				$this->lines[$i]->rang				= $obj->rang;
    -				$this->lines[$i]->date_start		= $this->db->jdate($obj->date_start);
    -				$this->lines[$i]->date_end			= $this->db->jdate($obj->date_end);
    -				$this->lines[$i]->fk_unit			= $obj->fk_unit;
    -
    -				// Multicurrency
    -				$this->lines[$i]->fk_multicurrency 			= $obj->fk_multicurrency;
    -				$this->lines[$i]->multicurrency_code 		= $obj->multicurrency_code;
    -				$this->lines[$i]->multicurrency_subprice 	= $obj->multicurrency_subprice;
    -				$this->lines[$i]->multicurrency_total_ht 	= $obj->multicurrency_total_ht;
    -				$this->lines[$i]->multicurrency_total_tva 	= $obj->multicurrency_total_tva;
    -				$this->lines[$i]->multicurrency_total_ttc 	= $obj->multicurrency_total_ttc;
    -
    -				$i++;
    -			}
    -			$this->db->free($resql);
    -
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error();
    -			return -1;
    -		}
    +		return $this->fetch_lines();
     	}
     
     	/**
    @@ -3648,7 +3622,14 @@ class Propal extends CommonObject
      */
     class PropaleLigne extends CommonObjectLine
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='propaldet';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='propaldet';
     
     	var $oldline;
    @@ -4183,6 +4164,7 @@ class PropaleLigne extends CommonObjectLine
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Update DB line fields total_xxx
     	 *	Used by migration
    @@ -4191,6 +4173,7 @@ class PropaleLigne extends CommonObjectLine
     	 */
     	function update_total()
     	{
    +        // phpcs:enable
     		$this->db->begin();
     
     		// Mise a jour ligne en base
    @@ -4215,6 +4198,4 @@ class PropaleLigne extends CommonObjectLine
     			return -2;
     		}
     	}
    -
     }
    -
    diff --git a/htdocs/comm/propal/class/propalestats.class.php b/htdocs/comm/propal/class/propalestats.class.php
    index d6e9ee3b103..bdd4a9dfba2 100644
    --- a/htdocs/comm/propal/class/propalestats.class.php
    +++ b/htdocs/comm/propal/class/propalestats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (c) 2011      Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -35,7 +35,10 @@ include_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
      */
     class PropaleStats extends Stats
     {
    -    public $table_element;
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element;
     
         var $socid;
         var $userid;
    diff --git a/htdocs/comm/propal/contact.php b/htdocs/comm/propal/contact.php
    index 5e21f493c64..7fc556a3b12 100644
    --- a/htdocs/comm/propal/contact.php
    +++ b/htdocs/comm/propal/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Patrick Rouillon     <patrick@rouillon.net>
      * Copyright (C) 2005-2016 Destailleur Laurent  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2015 Philippe Grand       <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -212,6 +212,6 @@ if ($object->id > 0)
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/propal/document.php b/htdocs/comm/propal/document.php
    index 1c8d494214d..07ef56bc1eb 100644
    --- a/htdocs/comm/propal/document.php
    +++ b/htdocs/comm/propal/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -94,7 +94,7 @@ if ($object->id > 0)
     	$head = propal_prepare_head($object);
     	dol_fiche_head($head, 'document', $langs->trans('Proposal'), -1, 'propal');
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -179,5 +179,6 @@ else
     	print $langs->trans("ErrorUnknown");
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/propal/index.php b/htdocs/comm/propal/index.php
    index 0dbe2fb855e..3f0085ad33a 100644
    --- a/htdocs/comm/propal/index.php
    +++ b/htdocs/comm/propal/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -530,7 +530,6 @@ if (! empty($conf->propal->enabled))
     //print '</td></tr></table>';
     print '</div></div></div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/propal/info.php b/htdocs/comm/propal/info.php
    index 317c9902d52..1a1760ce7cf 100644
    --- a/htdocs/comm/propal/info.php
    +++ b/htdocs/comm/propal/info.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2006	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2017    	Ferran Marcet       	<fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -127,5 +127,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php
    index 980615828a5..89b6211d644 100644
    --- a/htdocs/comm/propal/list.php
    +++ b/htdocs/comm/propal/list.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2016 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne           <eric.seigne@ryxeo.com>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2013 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani      <acianfa@free.fr>
      * Copyright (C) 2010-2011 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2010-2011 Philippe Grand        <philippe.grand@atoo-net.com>
    @@ -129,7 +129,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('propal');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -161,6 +161,7 @@ $arrayfields=array(
     	'p.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0),
     	'p.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0),
     	'u.login'=>array('label'=>$langs->trans("Author"), 'checked'=>1, 'position'=>10),
    +	'sale_representative'=>array('label'=>$langs->trans("SaleRepresentativesOfThirdParty"), 'checked'=>1),
     	'p.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
     	'p.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
     	'p.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000),
    @@ -226,7 +227,6 @@ if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x',
     	$toselect='';
     	$search_array_options=array();
     	$search_categ_cus=0;
    -
     }
     if ($object_statut != '') $viewstatut=$object_statut;
     
    @@ -669,6 +669,10 @@ if ($resql)
     		print '<input class="flat" size="4" type="text" name="search_login" value="'.dol_escape_htmltag($search_login).'">';
     		print '</td>';
     	}
    +	if (! empty($arrayfields['sale_representative']['checked']))
    +	{
    +		print '<td class="liste_titre"></td>';
    +	}
     	// Extra fields
     	include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
     
    @@ -723,6 +727,7 @@ if ($resql)
     	if (! empty($arrayfields['p.total_vat']['checked']))      print_liste_field_titre($arrayfields['p.total_vat']['label'],$_SERVER["PHP_SELF"],'p.tva','',$param, 'align="right"',$sortfield,$sortorder);
     	if (! empty($arrayfields['p.total_ttc']['checked']))      print_liste_field_titre($arrayfields['p.total_ttc']['label'],$_SERVER["PHP_SELF"],'p.total','',$param, 'align="right"',$sortfield,$sortorder);
     	if (! empty($arrayfields['u.login']['checked']))       	  print_liste_field_titre($arrayfields['u.login']['label'],$_SERVER["PHP_SELF"],'u.login','',$param,'align="center"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['sale_representative']['checked'])) print_liste_field_titre($arrayfields['sale_representative']['label'], $_SERVER["PHP_SELF"], "","","$param",'',$sortfield,$sortorder);
     	// Extra fields
     	include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
     	// Hook fields
    @@ -945,6 +950,51 @@ if ($resql)
     			if (! $i) $totalarray['nbfield']++;
     		}
     
    +		if (! empty($arrayfields['sale_representative']['checked']))
    +		{
    +			// Sales representatives
    +			print '<td>';
    +			if ($obj->socid > 0)
    +			{
    +				$listsalesrepresentatives=$companystatic->getSalesRepresentatives($user);
    +				if ($listsalesrepresentatives < 0) dol_print_error($db);
    +				$nbofsalesrepresentative=count($listsalesrepresentatives);
    +				if ($nbofsalesrepresentative > 3)   // We print only number
    +				{
    +					print '<a href="'.DOL_URL_ROOT.'/societe/commerciaux.php?socid='.$companystatic->id.'">';
    +					print $nbofsalesrepresentative;
    +					print '</a>';
    +				}
    +				else if ($nbofsalesrepresentative > 0)
    +				{
    +					$userstatic=new User($db);
    +					$j=0;
    +					foreach($listsalesrepresentatives as $val)
    +					{
    +						$userstatic->id=$val['id'];
    +						$userstatic->lastname=$val['lastname'];
    +						$userstatic->firstname=$val['firstname'];
    +						$userstatic->email=$val['email'];
    +						$userstatic->statut=$val['statut'];
    +						$userstatic->entity=$val['entity'];
    +						$userstatic->photo=$val['photo'];
    +
    +						//print '<div class="float">':
    +						print $userstatic->getNomUrl(-2);
    +						$j++;
    +						if ($j < $nbofsalesrepresentative) print ' ';
    +						//print '</div>';
    +					}
    +				}
    +				//else print $langs->trans("NoSalesRepresentativeAffected");
    +			}
    +			else
    +			{
    +				print '&nbsp';
    +			}
    +			print '</td>';
    +		}
    +
     		// Extra fields
     		include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
     		// Fields from hook
    @@ -995,22 +1045,35 @@ if ($resql)
      	   || isset($totalarray['totalttcfield'])
      	   || isset($totalarray['totalamfield'])
      	   || isset($totalarray['totalrtpfield'])
    + 	   || isset($totalarray['totalizable'])
      	   )
     	{
     		print '<tr class="liste_total">';
     		$i=0;
     		while ($i < $totalarray['nbfield'])
     		{
    -		   $i++;
    -		   if ($i == 1)
    -		   {
    +		    $i++;
    +		    if ($i == 1)
    +		    {
     				if ($num < $limit && empty($offset)) print '<td align="left">'.$langs->trans("Total").'</td>';
     				else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
    -		   }
    -		   elseif ($totalarray['totalhtfield'] == $i) print '<td align="right">'.price($totalarray['totalht']).'</td>';
    -		   elseif ($totalarray['totalvatfield'] == $i) print '<td align="right">'.price($totalarray['totalvat']).'</td>';
    -		   elseif ($totalarray['totalttcfield'] == $i) print '<td align="right">'.price($totalarray['totalttc']).'</td>';
    -		   else print '<td></td>';
    +		    }
    +		    elseif ($totalarray['totalhtfield'] == $i) print '<td align="right">'.price($totalarray['totalht']).'</td>';
    +		    elseif ($totalarray['totalvatfield'] == $i) print '<td align="right">'.price($totalarray['totalvat']).'</td>';
    +		    elseif ($totalarray['totalttcfield'] == $i) print '<td align="right">'.price($totalarray['totalttc']).'</td>';
    +		    elseif ($totalarray['totalizable']) {
    +                $printed = false;
    +                foreach ($totalarray['totalizable'] as $totalizable) {
    +                    if ($totalizable['pos']==$i && ! $printed) {
    +                        print '<td align="right">'.price($totalizable['total']).'</td>';
    +                        $printed = true;
    +                    }
    +                }
    +                if (! $printed) {
    +                    print '<td></td>';
    +                }
    +            }
    +		    else print '<td></td>';
     		}
     		print '</tr>';
     	}
    diff --git a/htdocs/comm/propal/note.php b/htdocs/comm/propal/note.php
    index 607cff245d9..381b7d105da 100644
    --- a/htdocs/comm/propal/note.php
    +++ b/htdocs/comm/propal/note.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Florian Henry		  	<florian.henry@open-concept.pro>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -144,6 +144,6 @@ if ($id > 0 || ! empty($ref))
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/propal/stats/index.php b/htdocs/comm/propal/stats/index.php
    index ac6b42c45d8..c44d23e8d5c 100644
    --- a/htdocs/comm/propal/stats/index.php
    +++ b/htdocs/comm/propal/stats/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      *
    @@ -65,9 +65,7 @@ $langs->loadLangs(array('orders', 'companies', 'other', 'suppliers', 'supplier_p
     $form=new Form($db);
     $formpropal=new FormPropal($db);
     
    -$langs->load('propal');
    -$langs->load('other');
    -$langs->load("companies");
    +$langs->loadLangs(array('propal', 'other', 'companies'));
     
     if ($mode == 'customer')
     {
    @@ -278,6 +276,7 @@ print '<div class="fichecenter"><div class="fichethirdleft">';
     	print '<br><br>';
     //}
     
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -320,7 +319,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    -
    +print '</div>';
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
     
    @@ -344,7 +343,6 @@ print '<div style="clear:both"></div>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php
    index cd49ca863e6..0d8c2064010 100644
    --- a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011  Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011  Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2013       Juanjo Menent <jmenent@2byte.es>
      * Copyright (C) 2014       Marcos García <marcosgdf@gmail.com>
      *
    @@ -57,7 +57,7 @@ foreach($linkedObjectBlock as $key => $objectlink)
             <?php if(!empty($showImportButton) && $conf->global->MAIN_ENABLE_IMPORT_LINKED_OBJECT_LINES)
                 {
                     $url = DOL_URL_ROOT.'/comm/propal/card.php?id='.$objectlink->id;
    -                print '<a class="objectlinked_importbtn" href="'.$url.'&amp;action=selectlines"  data-element="'.$objectlink->element.'"  data-id="'.$objectlink->id.'"  > <i class="fa fa-indent"></i> </a>';  
    +                print '<a class="objectlinked_importbtn" href="'.$url.'&amp;action=selectlines"  data-element="'.$objectlink->element.'"  data-id="'.$objectlink->id.'"  > <i class="fa fa-indent"></i> </a>';
                 }
             ?>
             </td>
    diff --git a/htdocs/comm/prospect/index.php b/htdocs/comm/prospect/index.php
    index 2273012696f..53176c8b76f 100644
    --- a/htdocs/comm/prospect/index.php
    +++ b/htdocs/comm/prospect/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -275,6 +275,6 @@ if ($resql)
     //print '</td></tr></table>';
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/comm/prospect/recap-prospect.php b/htdocs/comm/prospect/recap-prospect.php
    index 50127d719c8..93cfada8860 100644
    --- a/htdocs/comm/prospect/recap-prospect.php
    +++ b/htdocs/comm/prospect/recap-prospect.php
    @@ -89,5 +89,6 @@ else
       	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/recap-client.php b/htdocs/comm/recap-client.php
    index 6cd41c6c658..86c1bad0521 100644
    --- a/htdocs/comm/recap-client.php
    +++ b/htdocs/comm/recap-client.php
    @@ -89,5 +89,6 @@ else
       	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/remise.php b/htdocs/comm/remise.php
    index 6f3287b8831..f045e570c6e 100644
    --- a/htdocs/comm/remise.php
    +++ b/htdocs/comm/remise.php
    @@ -129,8 +129,9 @@ if ($socid > 0)
     
         	print '</form>';
     
    -    	llxFooter();
    -    	$db->close();
    +    	// End of page
    +        llxFooter();
    +        $db->close();
         	exit;
         }
     
    @@ -324,5 +325,6 @@ if ($socid > 0)
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/comm/remx.php b/htdocs/comm/remx.php
    index a66e8e66500..c3d907df45f 100644
    --- a/htdocs/comm/remx.php
    +++ b/htdocs/comm/remx.php
    @@ -1006,5 +1006,6 @@ if ($socid > 0)
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php
    index 81e0d345229..978bc5aa04a 100644
    --- a/htdocs/commande/card.php
    +++ b/htdocs/commande/card.php
    @@ -2,16 +2,17 @@
     /* Copyright (C) 2003-2006	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Marc Barilley / Ocebo	<marc@ocebo.com>
    - * Copyright (C) 2005-2015	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2006		Andre Cianfarani		<acianfa@free.fr>
      * Copyright (C) 2010-2013	Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2011-2016	Philippe Grand			<philippe.grand@atoo-net.com>
    + * Copyright (C) 2011-2018	Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2012-2013	Christophe Battarel		<christophe.battarel@altairis.fr>
      * Copyright (C) 2012-2016	Marcos García			<marcosgdf@gmail.com>
      * Copyright (C) 2012       Cedric Salvador      	<csalvador@gpcsolutions.fr>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2014       Ferran Marcet			<fmarcet@2byte.es>
      * Copyright (C) 2015       Jean-François Ferry		<jfefe@aternatik.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -422,7 +423,6 @@ if (empty($reshook))
     						// modified by hook
     						if ($reshook < 0)
     							$error++;
    -
     					} else {
     						setEventMessages($object->error, $object->errors, 'errors');
     						$error++;
    @@ -700,8 +700,10 @@ if (empty($reshook))
     
     				if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
     					$idprod = $res->fk_product_child;
    -				} else {
    -					setEventMessage($langs->trans('ErrorProductCombinationNotFound'), 'errors');
    +				}
    +				else
    +				{
    +					setEventMessages($langs->trans('ErrorProductCombinationNotFound'), null, 'errors');
     					$error ++;
     				}
     			}
    @@ -928,7 +930,7 @@ if (empty($reshook))
     			if ($tva_npr)
     				$info_bits |= 0x01;
     
    -			if (! empty($price_min) && (price2num($pu_ht) * (1 - price2num($remise_percent) / 100) < price2num($price_min))) {
    +			if (((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS) )&& (! empty($price_min) && (price2num($pu_ht) * (1 - price2num($remise_percent) / 100) < price2num($price_min)))) {
     				$mesg = $langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency));
     				setEventMessages($mesg, null, 'errors');
     			} else {
    @@ -1049,7 +1051,7 @@ if (empty($reshook))
     
     			$label = ((GETPOST('update_label') && GETPOST('product_label')) ? GETPOST('product_label') : '');
     
    -			if ($price_min && (price2num($pu_ht) * (1 - price2num(GETPOST('remise_percent')) / 100) < price2num($price_min))) {
    +			if (((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS) )&& ($price_min && (price2num($pu_ht) * (1 - price2num(GETPOST('remise_percent')) / 100) < price2num($price_min)))) {
     				setEventMessages($langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency)), null, 'errors');
     				$error++;
     			}
    @@ -1577,7 +1579,7 @@ if ($action == 'create' && $user->rights->commande->creer)
     	}
     	// Date
     	print '<tr><td class="fieldrequired">' . $langs->trans('Date') . '</td><td>';
    -	$form->select_date('', 're', '', '', '', "crea_commande", 1, 1);			// Always autofill date with current date
    +	print $form->selectDate('', 're', '', '', '', "crea_commande", 1, 1);			// Always autofill date with current date
     	print '</td></tr>';
     
     	// Delivery date planed
    @@ -1587,7 +1589,7 @@ if ($action == 'create' && $user->rights->commande->creer)
     		if (! empty($conf->global->DATE_LIVRAISON_WEEK_DELAY)) $datedelivery = time() + ((7*$conf->global->DATE_LIVRAISON_WEEK_DELAY) * 24 * 60 * 60);
     		else $datedelivery=empty($conf->global->MAIN_AUTOFILL_DATE_DELIVERY)?-1:'';
     	}
    -	$form->select_date($datedelivery, 'liv_', '', '', '', "crea_commande", 1, 1);
    +	print $form->selectDate($datedelivery, 'liv_', '', '', '', "crea_commande", 1, 1);
     	print "</td></tr>";
     
     	// Conditions de reglement
    @@ -1965,12 +1967,11 @@ if ($action == 'create' && $user->rights->commande->creer)
     			$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('CloneOrder'), $langs->trans('ConfirmCloneOrder', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
     		}
     
    -		if (! $formconfirm) {
    -			$parameters = array('lineid' => $lineid);
    -			$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -			if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -			elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -		}
    +		// Call Hook formConfirm
    +		$parameters = array('lineid' => $lineid);
    +		$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +		if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +		elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     		// Print form confirm
     		print $formconfirm;
    @@ -2085,7 +2086,7 @@ if ($action == 'create' && $user->rights->commande->creer)
     			print '<form name="setdate" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '" method="post">';
     			print '<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">';
     			print '<input type="hidden" name="action" value="setdate">';
    -			$form->select_date($object->date, 'order_', '', '', '', "setdate");
    +			print $form->selectDate($object->date, 'order_', '', '', '', "setdate");
     			print '<input type="submit" class="button" value="' . $langs->trans('Modify') . '">';
     			print '</form>';
     		} else {
    @@ -2110,7 +2111,7 @@ if ($action == 'create' && $user->rights->commande->creer)
     			print '<form name="setdate_livraison" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '" method="post">';
     			print '<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">';
     			print '<input type="hidden" name="action" value="setdate_livraison">';
    -			$form->select_date($object->date_livraison ? $object->date_livraison : - 1, 'liv_', '', '', '', "setdate_livraison");
    +			print $form->selectDate($object->date_livraison ? $object->date_livraison : - 1, 'liv_', '', '', '', "setdate_livraison");
     			print '<input type="submit" class="button" value="' . $langs->trans('Modify') . '">';
     			print '</form>';
     		} else {
    @@ -2190,7 +2191,7 @@ if ($action == 'create' && $user->rights->commande->creer)
     		print '</tr></table>';
     		print '</td><td>';
     		if ($action == 'editmode') {
    -			$form->form_modes_reglement($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->mode_reglement_id, 'mode_reglement_id');
    +			$form->form_modes_reglement($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->mode_reglement_id, 'mode_reglement_id', 'CRDT');
     		} else {
     			$form->form_modes_reglement($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->mode_reglement_id, 'none');
     		}
    @@ -2676,5 +2677,6 @@ if ($action == 'create' && $user->rights->commande->creer)
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/commande/class/api_orders.class.php b/htdocs/commande/class/api_orders.class.php
    index e52da47e11b..1135a5c2502 100644
    --- a/htdocs/commande/class/api_orders.class.php
    +++ b/htdocs/commande/class/api_orders.class.php
    @@ -97,9 +97,10 @@ class Orders extends DolibarrApi
          * @param string           $sqlfilters          Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')"
          * @return  array                               Array of order objects
          *
    -	 * @throws RestException
    +     * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -185,9 +186,9 @@ class Orders extends DolibarrApi
          */
         function post($request_data = null)
         {
    -      if(! DolibarrApiAccess::$user->rights->commande->creer) {
    -			  throw new RestException(401, "Insuffisant rights");
    -		  }
    +        if(! DolibarrApiAccess::$user->rights->commande->creer) {
    +			throw new RestException(401, "Insuffisant rights");
    +		}
             // Check mandatory fields
             $result = $this->_validate($request_data);
     
    @@ -218,25 +219,26 @@ class Orders extends DolibarrApi
          *
          * @return int
          */
    -    function getLines($id) {
    -      if(! DolibarrApiAccess::$user->rights->commande->lire) {
    -		  	throw new RestException(401);
    -		  }
    +    function getLines($id)
    +    {
    +        if(! DolibarrApiAccess::$user->rights->commande->lire) {
    +			throw new RestException(401);
    +		}
     
    -      $result = $this->commande->fetch($id);
    -      if( ! $result ) {
    -         throw new RestException(404, 'Order not found');
    -      }
    +        $result = $this->commande->fetch($id);
    +        if( ! $result ) {
    +            throw new RestException(404, 'Order not found');
    +        }
     
    -		  if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
    -			  throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -      }
    -      $this->commande->getLinesArray();
    -      $result = array();
    -      foreach ($this->commande->lines as $line) {
    -        array_push($result,$this->_cleanObjectDatas($line));
    -      }
    -      return $result;
    +		if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
    +			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
    +        $this->commande->getLinesArray();
    +        $result = array();
    +        foreach ($this->commande->lines as $line) {
    +            array_push($result,$this->_cleanObjectDatas($line));
    +        }
    +        return $result;
         }
     
         /**
    @@ -249,21 +251,22 @@ class Orders extends DolibarrApi
          *
          * @return int
          */
    -    function postLine($id, $request_data = null) {
    -      if(! DolibarrApiAccess::$user->rights->commande->creer) {
    -		  	throw new RestException(401);
    -		  }
    +    function postLine($id, $request_data = null)
    +    {
    +        if(! DolibarrApiAccess::$user->rights->commande->creer) {
    +			throw new RestException(401);
    +		}
     
    -      $result = $this->commande->fetch($id);
    -      if( ! $result ) {
    -         throw new RestException(404, 'Order not found');
    -      }
    +        $result = $this->commande->fetch($id);
    +        if( ! $result ) {
    +            throw new RestException(404, 'Order not found');
    +        }
     
    -		  if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
    -			  throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -      }
    -			$request_data = (object) $request_data;
    -      $updateRes = $this->commande->addline(
    +		if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
    +			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
    +		$request_data = (object) $request_data;
    +        $updateRes = $this->commande->addline(
                             $request_data->desc,
                             $request_data->subprice,
                             $request_data->qty,
    @@ -290,15 +293,13 @@ class Orders extends DolibarrApi
                             $request_data->origin,
                             $request_data->origin_id,
                             $request_data->multicurrency_subprice
    -      );
    +        );
     
    -      if ($updateRes > 0) {
    -        return $updateRes;
    -
    -      }
    -      else {
    +        if ($updateRes > 0) {
    +            return $updateRes;
    +        } else {
     			throw new RestException(400, $this->commande->error);
    -      }
    +        }
         }
     
         /**
    @@ -312,51 +313,52 @@ class Orders extends DolibarrApi
          *
          * @return object
          */
    -    function putLine($id, $lineid, $request_data = null) {
    -      if(! DolibarrApiAccess::$user->rights->commande->creer) {
    -		  	throw new RestException(401);
    -		  }
    +    function putLine($id, $lineid, $request_data = null)
    +    {
    +        if(! DolibarrApiAccess::$user->rights->commande->creer) {
    +			throw new RestException(401);
    +		}
     
    -      $result = $this->commande->fetch($id);
    -      if( ! $result ) {
    -         throw new RestException(404, 'Order not found');
    -      }
    +        $result = $this->commande->fetch($id);
    +        if( ! $result ) {
    +            throw new RestException(404, 'Order not found');
    +        }
     
    -		  if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
    -			  throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -      }
    -			$request_data = (object) $request_data;
    -      $updateRes = $this->commande->updateline(
    -                        $lineid,
    -                        $request_data->desc,
    -                        $request_data->subprice,
    -                        $request_data->qty,
    -                        $request_data->remise_percent,
    -                        $request_data->tva_tx,
    -                        $request_data->localtax1_tx,
    -                        $request_data->localtax2_tx,
    -                        'HT',
    -                        $request_data->info_bits,
    -                        $request_data->date_start,
    -                        $request_data->date_end,
    -                        $request_data->product_type,
    -                        $request_data->fk_parent_line,
    -                        0,
    -                        $request_data->fk_fournprice,
    -                        $request_data->pa_ht,
    -                        $request_data->label,
    -                        $request_data->special_code,
    -                        $request_data->array_options,
    -                        $request_data->fk_unit,
    -      					$request_data->multicurrency_subprice
    -      );
    +		if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
    +			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
    +		$request_data = (object) $request_data;
    +        $updateRes = $this->commande->updateline(
    +            $lineid,
    +            $request_data->desc,
    +            $request_data->subprice,
    +            $request_data->qty,
    +            $request_data->remise_percent,
    +            $request_data->tva_tx,
    +            $request_data->localtax1_tx,
    +            $request_data->localtax2_tx,
    +            'HT',
    +            $request_data->info_bits,
    +            $request_data->date_start,
    +            $request_data->date_end,
    +            $request_data->product_type,
    +            $request_data->fk_parent_line,
    +            0,
    +            $request_data->fk_fournprice,
    +            $request_data->pa_ht,
    +            $request_data->label,
    +            $request_data->special_code,
    +            $request_data->array_options,
    +            $request_data->fk_unit,
    +      		$request_data->multicurrency_subprice
    +        );
     
    -      if ($updateRes > 0) {
    -        $result = $this->get($id);
    -        unset($result->line);
    -        return $this->_cleanObjectDatas($result);
    -      }
    -      return false;
    +        if ($updateRes > 0) {
    +            $result = $this->get($id);
    +            unset($result->line);
    +            return $this->_cleanObjectDatas($result);
    +        }
    +        return false;
         }
     
         /**
    @@ -372,30 +374,29 @@ class Orders extends DolibarrApi
          * @throws 401
          * @throws 404
          */
    -    function deleteLine($id, $lineid) {
    -      if(! DolibarrApiAccess::$user->rights->commande->creer) {
    -		  	throw new RestException(401);
    -		  }
    +    function deleteLine($id, $lineid)
    +    {
    +        if(! DolibarrApiAccess::$user->rights->commande->creer) {
    +			throw new RestException(401);
    +		}
     
    -      $result = $this->commande->fetch($id);
    -      if( ! $result ) {
    -         throw new RestException(404, 'Order not found');
    -      }
    +        $result = $this->commande->fetch($id);
    +        if( ! $result ) {
    +            throw new RestException(404, 'Order not found');
    +        }
     
    -		  if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
    -			  throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -      }
    +		if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
    +			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
     
    -      // TODO Check the lineid $lineid is a line of ojbect
    +        // TODO Check the lineid $lineid is a line of ojbect
     
    -      $updateRes = $this->commande->deleteline(DolibarrApiAccess::$user,$lineid);
    -      if ($updateRes > 0) {
    -        return $this->get($id);
    -      }
    -      else
    -      {
    -      	throw new RestException(405, $this->commande->error);
    -      }
    +        $updateRes = $this->commande->deleteline(DolibarrApiAccess::$user,$lineid);
    +        if ($updateRes > 0) {
    +            return $this->get($id);
    +        } else {
    +            throw new RestException(405, $this->commande->error);
    +        }
         }
     
         /**
    @@ -406,10 +407,11 @@ class Orders extends DolibarrApi
          *
          * @return int
          */
    -    function put($id, $request_data = null) {
    -      if (! DolibarrApiAccess::$user->rights->commande->creer) {
    -		  	throw new RestException(401);
    -		  }
    +    function put($id, $request_data = null)
    +    {
    +        if (! DolibarrApiAccess::$user->rights->commande->creer) {
    +			throw new RestException(401);
    +		}
     
             $result = $this->commande->fetch($id);
             if (! $result) {
    @@ -470,7 +472,6 @@ class Orders extends DolibarrApi
                     'message' => 'Order deleted'
                 )
             );
    -
         }
     
         /**
    @@ -547,24 +548,25 @@ class Orders extends DolibarrApi
          * @throws 404
          * @throws 405
          */
    -    function reopen($id) {
    +    function reopen($id)
    +    {
     
             if(! DolibarrApiAccess::$user->rights->commande->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             if(empty($id)) {
    -                throw new RestException(400, 'Order ID is mandatory');
    +            throw new RestException(400, 'Order ID is mandatory');
             }
             $result = $this->commande->fetch($id);
             if( ! $result ) {
    -                throw new RestException(404, 'Order not found');
    +            throw new RestException(404, 'Order not found');
             }
     
             $result = $this->commande->set_reopen(DolibarrApiAccess::$user);
             if( $result < 0) {
    -                throw new RestException(405, $this->commande->error);
    +            throw new RestException(405, $this->commande->error);
             }else if( $result == 0) {
    -                throw new RestException(304);
    +            throw new RestException(304);
             }
     
             return $result;
    @@ -584,22 +586,23 @@ class Orders extends DolibarrApi
          * @throws 404
          * @throws 405
          */
    -    function setinvoiced($id) {
    +    function setinvoiced($id)
    +    {
     
             if(! DolibarrApiAccess::$user->rights->commande->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             if(empty($id)) {
    -                throw new RestException(400, 'Order ID is mandatory');
    +            throw new RestException(400, 'Order ID is mandatory');
             }
             $result = $this->commande->fetch($id);
             if( ! $result ) {
    -                throw new RestException(404, 'Order not found');
    +            throw new RestException(404, 'Order not found');
             }
     
             $result = $this->commande->classifyBilled(DolibarrApiAccess::$user);
             if( $result < 0) {
    -                throw new RestException(400, $this->commande->error);
    +            throw new RestException(400, $this->commande->error);
             }
     
             $result = $this->commande->fetch($id);
    @@ -675,23 +678,23 @@ class Orders extends DolibarrApi
         function settodraft($id, $idwarehouse=-1)
         {
             if(! DolibarrApiAccess::$user->rights->commande->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             $result = $this->commande->fetch($id);
             if( ! $result ) {
    -                throw new RestException(404, 'Order not found');
    +            throw new RestException(404, 'Order not found');
             }
     
             if( ! DolibarrApi::_checkAccessToResource('commande',$this->commande->id)) {
    -                throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
             }
     
             $result = $this->commande->set_draft(DolibarrApiAccess::$user, $idwarehouse);
             if ($result == 0) {
    -                throw new RestException(304, 'Nothing done. May be object is already closed');
    +            throw new RestException(304, 'Nothing done. May be object is already closed');
             }
             if ($result < 0) {
    -                throw new RestException(500, 'Error when closing Order: '.$this->commande->error);
    +            throw new RestException(500, 'Error when closing Order: '.$this->commande->error);
             }
     
     		$result = $this->commande->fetch($id);
    @@ -709,43 +712,44 @@ class Orders extends DolibarrApi
         }
     
     
    -     /**
    -      * Create an order using an existing proposal.
    -      *
    -      *
    -      * @param int   $proposalid       Id of the proposal
    -      *
    -      * @url     POST /createfromproposal/{proposalid}
    -      *
    -      * @return int
    -      * @throws 400
    -      * @throws 401
    -      * @throws 404
    -      * @throws 405
    -      */
    -     function createOrderFromProposal($proposalid) {
    +    /**
    +     * Create an order using an existing proposal.
    +     *
    +     *
    +     * @param int   $proposalid       Id of the proposal
    +     *
    +     * @url     POST /createfromproposal/{proposalid}
    +     *
    +     * @return int
    +     * @throws 400
    +     * @throws 401
    +     * @throws 404
    +     * @throws 405
    +     */
    +    function createOrderFromProposal($proposalid)
    +    {
     
             require_once DOL_DOCUMENT_ROOT . '/comm/propal/class/propal.class.php';
     
             if(! DolibarrApiAccess::$user->rights->propal->lire) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             if(! DolibarrApiAccess::$user->rights->commande->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             if(empty($proposalid)) {
    -                throw new RestException(400, 'Proposal ID is mandatory');
    +            throw new RestException(400, 'Proposal ID is mandatory');
             }
     
             $propal = new Propal($this->db);
             $result = $propal->fetch($proposalid);
             if( ! $result ) {
    -                throw new RestException(404, 'Proposal not found');
    +            throw new RestException(404, 'Proposal not found');
             }
     
             $result = $this->commande->createFromProposal($propal, DolibarrApiAccess::$user);
             if( $result < 0) {
    -                throw new RestException(405, $this->commande->error);
    +            throw new RestException(405, $this->commande->error);
             }
             $this->commande->fetchObjectLinked();
     
    @@ -759,7 +763,8 @@ class Orders extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    @@ -785,9 +790,8 @@ class Orders extends DolibarrApi
             $commande = array();
             foreach (Orders::$FIELDS as $field) {
                 if (!isset($data[$field]))
    -                throw new RestException(400, "$field field missing");
    +                throw new RestException(400, $field ." field missing");
                 $commande[$field] = $data[$field];
    -
             }
             return $commande;
         }
    diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php
    index 1fb5840f6a0..3dc168f14c5 100644
    --- a/htdocs/commande/class/commande.class.php
    +++ b/htdocs/commande/class/commande.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2014 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
      * Copyright (C) 2010-2016 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2011      Jean Heimburger      <jean@tiaris.info>
    @@ -42,48 +42,71 @@ require_once DOL_DOCUMENT_ROOT .'/multicurrency/class/multicurrency.class.php';
      */
     class Commande extends CommonOrder
     {
    -    public $element='commande';
    -    public $table_element='commande';
    -    public $table_element_line = 'commandedet';
    -    public $class_element_line = 'OrderLine';
    -    public $fk_element = 'fk_commande';
    -    public $picto = 'order';
    -    /**
    -     * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    -     * @var int
    -     */
    -    public $ismultientitymanaged = 1;
    -    /**
    -     * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
    -     * @var integer
    -     */
    -    public $restrictiononfksoc = 1;
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='commande';
     
    -    /**
    -     * {@inheritdoc}
    -     */
    -    protected $table_ref_field = 'ref';
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='commande';
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
    +	public $table_element_line = 'commandedet';
    +
    +	public $class_element_line = 'OrderLine';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
    +	public $fk_element = 'fk_commande';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'order';
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
    +
    +	/**
    +	 * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
    +	 * @var integer
    +	 */
    +	public $restrictiononfksoc = 1;
    +
    +	/**
    +	 * {@inheritdoc}
    +	 */
    +	protected $table_ref_field = 'ref';
     
     	/**
     	 * Client ID
     	 * @var int
     	 */
    -    public $socid;
    +	public $socid;
     
    -    public $ref_client;
    -    public $ref_int;
    -    public $contactid;
    +	public $ref_client;
    +	public $ref_int;
    +	public $contactid;
     
     	/**
     	 * Status of the order
     	 * @var int
     	 */
    -    public $statut;
    +	public $statut;
    +
     	/**
     	 * Billed
     	 * @var int
     	 */
    -    public $billed;		// billed or not
    +	public $billed;		// billed or not
     
         /**
          * @var int Draft Status of the order
    @@ -91,62 +114,76 @@ class Commande extends CommonOrder
         public $brouillon;
         public $cond_reglement_code;
     
    -    public $fk_account;
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_account;
     
    -    /**
    -     * It holds the label of the payment mode. Use it in case translation cannot be found.
    -     * @var string
    -     */
    -    public $mode_reglement;
    +	/**
    +	 * It holds the label of the payment mode. Use it in case translation cannot be found.
    +	 * @var string
    +	 */
    +	public $mode_reglement;
     
    -    /**
    -     * Payment mode id
    -     * @var int
    -     */
    -    public $mode_reglement_id;
    -    /**
    -     * Payment mode code
    -     * @var string
    -     */
    -    public $mode_reglement_code;
    -    /**
    -     * Availability delivery time id
    -     * @var int
    -     */
    -    public $availability_id;
    -    /**
    -     * Availability delivery time code
    -     * @var string
    -     */
    -    public $availability_code;
    -    /**
    -     * Label of availability delivery time. Use it in case translation cannot be found.
    -     * @var string
    -     */
    -    public $availability;
    +	/**
    +	 * Payment mode id
    +	 * @var int
    +	 */
    +	public $mode_reglement_id;
    +
    +	/**
    +	 * Payment mode code
    +	 * @var string
    +	 */
    +	public $mode_reglement_code;
    +
    +	/**
    +	 * Availability delivery time id
    +	 * @var int
    +	 */
    +	public $availability_id;
    +
    +	/**
    +	 * Availability delivery time code
    +	 * @var string
    +	 */
    +	public $availability_code;
    +
    +	/**
    +	 * Label of availability delivery time. Use it in case translation cannot be found.
    +	 * @var string
    +	 */
    +	public $availability;
    +
    +	public $demand_reason_id;   // Source reason. Why we receive order (after a phone campaign, ...)
    +	public $demand_reason_code;
    +	public $date;				// Date commande
     
    -    public $demand_reason_id;   // Source reason. Why we receive order (after a phone campaign, ...)
    -    public $demand_reason_code;
    -    public $date;				// Date commande
     	/**
     	 * @deprecated
     	 * @see date
     	 */
    -    public $date_commande;
    -    public $date_livraison;	    // Date expected of shipment (date starting shipment, not the reception that occurs some days after)
    -    public $fk_remise_except;
    -    public $remise_percent;
    -    public $remise_absolue;
    -    public $info_bits;
    -    public $rang;
    -    public $special_code;
    -    public $source;			    // Order mode. How we received order (by phone, by email, ...)
    -    public $extraparams=array();
    +	public $date_commande;
     
    -    public $linked_objects=array();
    +	public $date_livraison;	    // Date expected of shipment (date starting shipment, not the reception that occurs some days after)
     
    -    public $user_author_id;
    -    public $user_valid;
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_remise_except;
    +
    +	public $remise_percent;
    +	public $remise_absolue;
    +	public $info_bits;
    +	public $rang;
    +	public $special_code;
    +	public $source;			    // Order mode. How we received order (by phone, by email, ...)
    +	public $extraparams=array();
    +
    +	public $linked_objects=array();
    +
    +	public $user_author_id;
    +	public $user_valid;
     
     	/**
     	 * @var OrderLine[]
    @@ -154,7 +191,11 @@ class Commande extends CommonOrder
     	public $lines = array();
     
     	// Multicurrency
    +	/**
    +     * @var int ID
    +     */
     	public $fk_multicurrency;
    +
     	public $multicurrency_code;
     	public $multicurrency_tx;
     	public $multicurrency_total_ht;
    @@ -163,10 +204,10 @@ class Commande extends CommonOrder
     
     	public $oldcopy;
     
    -    /**
    -     * ERR Not enough stock
    -     */
    -    const STOCK_NOT_ENOUGH_FOR_ORDER = -3;
    +	/**
    +	 * ERR Not enough stock
    +	 */
    +	const STOCK_NOT_ENOUGH_FOR_ORDER = -3;
     
     	/**
     	 * Canceled status
    @@ -192,49 +233,49 @@ class Commande extends CommonOrder
     	const STATUS_CLOSED = 3;
     
     
    -    /**
    -     *	Constructor
    -     *
    -     *  @param		DoliDB		$db      Database handler
    -     */
    -    function __construct($db)
    -    {
    -        $this->db = $db;
    +	/**
    +	 *	Constructor
    +	 *
    +	 *  @param		DoliDB		$db      Database handler
    +	 */
    +	function __construct($db)
    +	{
    +		$this->db = $db;
     
    -        $this->remise = 0;
    -        $this->remise_percent = 0;
    +		$this->remise = 0;
    +		$this->remise_percent = 0;
     
    -        $this->products = array();
    -    }
    +		$this->products = array();
    +	}
     
    -    /**
    +	/**
     	 *  Returns the reference to the following non used Order depending on the active numbering module
     	 *  defined into COMMANDE_ADDON
     	 *
     	 *  @param	Societe		$soc  	Object thirdparty
     	 *  @return string      		Order free reference
     	 */
    -    function getNextNumRef($soc)
    -    {
    -        global $langs, $conf;
    -        $langs->load("order");
    +	function getNextNumRef($soc)
    +	{
    +		global $langs, $conf;
    +		$langs->load("order");
     
    -        if (! empty($conf->global->COMMANDE_ADDON))
    -        {
    -        	$mybool=false;
    +		if (! empty($conf->global->COMMANDE_ADDON))
    +		{
    +			$mybool=false;
     
    -        	$file = $conf->global->COMMANDE_ADDON.".php";
    +			$file = $conf->global->COMMANDE_ADDON.".php";
     			$classname = $conf->global->COMMANDE_ADDON;
     
     			// Include file with class
     			$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
     			foreach ($dirmodels as $reldir)
     			{
    -                $dir = dol_buildpath($reldir."core/modules/commande/");
    +				$dir = dol_buildpath($reldir."core/modules/commande/");
     
    -                // Load file with numbering class (if found)
    -                $mybool|=@include_once $dir.$file;
    -            }
    +				// Load file with numbering class (if found)
    +				$mybool|=@include_once $dir.$file;
    +			}
     
                 if ($mybool === false)
                 {
    @@ -242,396 +283,400 @@ class Commande extends CommonOrder
                     return '';
                 }
     
    -            $obj = new $classname();
    -            $numref = $obj->getNextValue($soc,$this);
    +			$obj = new $classname();
    +			$numref = $obj->getNextValue($soc,$this);
     
    -            if ($numref != "")
    -            {
    -            	return $numref;
    -            }
    -            else
    +			if ($numref != "")
    +			{
    +				return $numref;
    +			}
    +			else
     			{
     				$this->error=$obj->error;
    -            	//dol_print_error($this->db,get_class($this)."::getNextNumRef ".$obj->error);
    -            	return "";
    -            }
    -        }
    -        else
    -        {
    -            print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_ADDON_NotDefined");
    -            return "";
    -        }
    -    }
    -
    -
    -    /**
    -     *	Validate order
    -     *
    -     *	@param		User	$user     		User making status change
    -     *	@param		int		$idwarehouse	Id of warehouse to use for stock decrease
    -     *  @param		int		$notrigger		1=Does not execute triggers, 0= execute triggers
    -     *	@return  	int						<=0 if OK, 0=Nothing done, >0 if KO
    -     */
    -    function valid($user, $idwarehouse=0, $notrigger=0)
    -    {
    -        global $conf,$langs;
    -        require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    -
    -        $error=0;
    -
    -        // Protection
    -        if ($this->statut == self::STATUS_VALIDATED)
    -        {
    -            dol_syslog(get_class($this)."::valid action abandonned: already validated", LOG_WARNING);
    -            return 0;
    -        }
    -
    -        if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer))
    -       	|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))))
    -        {
    -            $this->error='NotEnoughPermissions';
    -            dol_syslog(get_class($this)."::valid ".$this->error, LOG_ERR);
    -            return -1;
    -        }
    -
    -        $now=dol_now();
    -
    -        $this->db->begin();
    -
    -        // Definition du nom de module de numerotation de commande
    -        $soc = new Societe($this->db);
    -        $soc->fetch($this->socid);
    -
    -        // Class of company linked to order
    -        $result=$soc->set_as_client();
    -
    -        // Define new ref
    -        if (! $error && (preg_match('/^[\(]?PROV/i', $this->ref) || empty($this->ref))) // empty should not happened, but when it occurs, the test save life
    -        {
    -            $num = $this->getNextNumRef($soc);
    -        }
    -        else
    +				//dol_print_error($this->db,get_class($this)."::getNextNumRef ".$obj->error);
    +				return "";
    +			}
    +		}
    +		else
     		{
    -            $num = $this->ref;
    -        }
    -        $this->newref = $num;
    +			print $langs->trans("Error")." ".$langs->trans("Error_COMMANDE_ADDON_NotDefined");
    +			return "";
    +		}
    +	}
     
    -        // Validate
    -        $sql = "UPDATE ".MAIN_DB_PREFIX."commande";
    -        $sql.= " SET ref = '".$num."',";
    -        $sql.= " fk_statut = ".self::STATUS_VALIDATED.",";
    -        $sql.= " date_valid='".$this->db->idate($now)."',";
    -        $sql.= " fk_user_valid = ".$user->id;
    -        $sql.= " WHERE rowid = ".$this->id;
     
    -        dol_syslog(get_class($this)."::valid()", LOG_DEBUG);
    -        $resql=$this->db->query($sql);
    -        if (! $resql)
    -        {
    -            dol_print_error($this->db);
    -            $this->error=$this->db->lasterror();
    -            $error++;
    -        }
    +	/**
    +	 *	Validate order
    +	 *
    +	 *	@param		User	$user     		User making status change
    +	 *	@param		int		$idwarehouse	Id of warehouse to use for stock decrease
    +	 *  @param		int		$notrigger		1=Does not execute triggers, 0= execute triggers
    +	 *	@return  	int						<=0 if OK, 0=Nothing done, >0 if KO
    +	 */
    +	function valid($user, $idwarehouse=0, $notrigger=0)
    +	{
    +		global $conf,$langs;
    +		require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
    -        if (! $error)
    -        {
    -            // If stock is incremented on validate order, we must increment it
    -            if ($result >= 0 && ! empty($conf->stock->enabled) && $conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER == 1)
    -            {
    -                require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php';
    -                $langs->load("agenda");
    +		$error=0;
     
    -                // Loop on each line
    -                $cpt=count($this->lines);
    -                for ($i = 0; $i < $cpt; $i++)
    -                {
    -                    if ($this->lines[$i]->fk_product > 0)
    -                    {
    -                        $mouvP = new MouvementStock($this->db);
    +		// Protection
    +		if ($this->statut == self::STATUS_VALIDATED)
    +		{
    +			dol_syslog(get_class($this)."::valid action abandonned: already validated", LOG_WARNING);
    +			return 0;
    +		}
    +
    +		if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer))
    +			|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))))
    +		{
    +			$this->error='NotEnoughPermissions';
    +			dol_syslog(get_class($this)."::valid ".$this->error, LOG_ERR);
    +			return -1;
    +		}
    +
    +		$now=dol_now();
    +
    +		$this->db->begin();
    +
    +		// Definition du nom de module de numerotation de commande
    +		$soc = new Societe($this->db);
    +		$soc->fetch($this->socid);
    +
    +		// Class of company linked to order
    +		$result=$soc->set_as_client();
    +
    +		// Define new ref
    +		if (! $error && (preg_match('/^[\(]?PROV/i', $this->ref) || empty($this->ref))) // empty should not happened, but when it occurs, the test save life
    +		{
    +			$num = $this->getNextNumRef($soc);
    +		}
    +		else
    +		{
    +			$num = $this->ref;
    +		}
    +		$this->newref = $num;
    +
    +		// Validate
    +		$sql = "UPDATE ".MAIN_DB_PREFIX."commande";
    +		$sql.= " SET ref = '".$num."',";
    +		$sql.= " fk_statut = ".self::STATUS_VALIDATED.",";
    +		$sql.= " date_valid='".$this->db->idate($now)."',";
    +		$sql.= " fk_user_valid = ".$user->id;
    +		$sql.= " WHERE rowid = ".$this->id;
    +
    +		dol_syslog(get_class($this)."::valid()", LOG_DEBUG);
    +		$resql=$this->db->query($sql);
    +		if (! $resql)
    +		{
    +			dol_print_error($this->db);
    +			$this->error=$this->db->lasterror();
    +			$error++;
    +		}
    +
    +		if (! $error)
    +		{
    +			// If stock is incremented on validate order, we must increment it
    +			if ($result >= 0 && ! empty($conf->stock->enabled) && $conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER == 1)
    +			{
    +				require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php';
    +				$langs->load("agenda");
    +
    +				// Loop on each line
    +				$cpt=count($this->lines);
    +				for ($i = 0; $i < $cpt; $i++)
    +				{
    +					if ($this->lines[$i]->fk_product > 0)
    +					{
    +						$mouvP = new MouvementStock($this->db);
     						$mouvP->origin = &$this;
    -                        // We decrement stock of product (and sub-products)
    -                        $result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("OrderValidatedInDolibarr",$num));
    -                        if ($result < 0)
    -                        {
    -                        	$error++;
    -                        	$this->error=$mouvP->error;
    -                        }
    -                    }
    -                    if ($error) break;
    -                }
    -            }
    -        }
    +						// We decrement stock of product (and sub-products)
    +						$result=$mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("OrderValidatedInDolibarr",$num));
    +						if ($result < 0)
    +						{
    +							$error++;
    +							$this->error=$mouvP->error;
    +						}
    +					}
    +					if ($error) break;
    +				}
    +			}
    +		}
     
    -        if (! $error && ! $notrigger)
    -        {
    -            // Call trigger
    -            $result=$this->call_trigger('ORDER_VALIDATE',$user);
    -            if ($result < 0) $error++;
    -            // End call triggers
    -        }
    -
    -        if (! $error)
    -        {
    -            $this->oldref = $this->ref;
    -
    -            // Rename directory if dir was a temporary ref
    -            if (preg_match('/^[\(]?PROV/i', $this->ref))
    -            {
    -            	// On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref)
    -                // in order not to lose the attachments
    -                $oldref = dol_sanitizeFileName($this->ref);
    -                $newref = dol_sanitizeFileName($num);
    -                $dirsource = $conf->commande->dir_output.'/'.$oldref;
    -                $dirdest = $conf->commande->dir_output.'/'.$newref;
    -                if (file_exists($dirsource))
    -                {
    -                    dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest);
    -
    -                    if (@rename($dirsource, $dirdest))
    -                    {
    -                        dol_syslog("Rename ok");
    -                        // Rename docs starting with $oldref with $newref
    -                        $listoffiles=dol_dir_list($conf->commande->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
    -                        foreach($listoffiles as $fileentry)
    -                        {
    -                        	$dirsource=$fileentry['name'];
    -                        	$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
    -                        	$dirsource=$fileentry['path'].'/'.$dirsource;
    -                        	$dirdest=$fileentry['path'].'/'.$dirdest;
    -                        	@rename($dirsource, $dirdest);
    -                        }
    -                    }
    -                }
    -            }
    -        }
    -
    -        // Set new ref and current status
    -        if (! $error)
    -        {
    -            $this->ref = $num;
    -            $this->statut = self::STATUS_VALIDATED;
    -            $this->brouillon = 0;
    -        }
    -
    -        if (! $error)
    -        {
    -            $this->db->commit();
    -            return 1;
    -        }
    -        else
    +		if (! $error && ! $notrigger)
     		{
    -            $this->db->rollback();
    -            return -1;
    -        }
    -    }
    +			// Call trigger
    +			$result=$this->call_trigger('ORDER_VALIDATE',$user);
    +			if ($result < 0) $error++;
    +			// End call triggers
    +		}
     
    -    /**
    -     *	Set draft status
    -     *
    -     *	@param	User	$user			Object user that modify
    -     *	@param	int		$idwarehouse	Warehouse ID to use for stock change (Used only if option STOCK_CALCULATE_ON_VALIDATE_ORDER is on)
    -     *	@return	int						<0 if KO, >0 if OK
    -     */
    -    function set_draft($user, $idwarehouse=-1)
    -    {
    -        global $conf,$langs;
    +		if (! $error)
    +		{
    +			$this->oldref = $this->ref;
     
    -        $error=0;
    +			// Rename directory if dir was a temporary ref
    +			if (preg_match('/^[\(]?PROV/i', $this->ref))
    +			{
    +				// On renomme repertoire ($this->ref = ancienne ref, $num = nouvelle ref)
    +				// in order not to lose the attachments
    +				$oldref = dol_sanitizeFileName($this->ref);
    +				$newref = dol_sanitizeFileName($num);
    +				$dirsource = $conf->commande->dir_output.'/'.$oldref;
    +				$dirdest = $conf->commande->dir_output.'/'.$newref;
    +				if (file_exists($dirsource))
    +				{
    +					dol_syslog(get_class($this)."::valid() rename dir ".$dirsource." into ".$dirdest);
     
    -        // Protection
    -        if ($this->statut <= self::STATUS_DRAFT)
    -        {
    -            return 0;
    -        }
    +					if (@rename($dirsource, $dirdest))
    +					{
    +						dol_syslog("Rename ok");
    +						// Rename docs starting with $oldref with $newref
    +						$listoffiles=dol_dir_list($conf->commande->dir_output.'/'.$newref, 'files', 1, '^'.preg_quote($oldref,'/'));
    +						foreach($listoffiles as $fileentry)
    +						{
    +							$dirsource=$fileentry['name'];
    +							$dirdest=preg_replace('/^'.preg_quote($oldref,'/').'/',$newref, $dirsource);
    +							$dirsource=$fileentry['path'].'/'.$dirsource;
    +							$dirdest=$fileentry['path'].'/'.$dirdest;
    +							@rename($dirsource, $dirdest);
    +						}
    +					}
    +				}
    +			}
    +		}
     
    -        if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer))
    -       	|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))))
    -        {
    -            $this->error='Permission denied';
    -            return -1;
    -        }
    +		// Set new ref and current status
    +		if (! $error)
    +		{
    +			$this->ref = $num;
    +			$this->statut = self::STATUS_VALIDATED;
    +            $this->brouillon = 0;
    +		}
     
    -        $this->db->begin();
    +		if (! $error)
    +		{
    +			$this->db->commit();
    +			return 1;
    +		}
    +		else
    +		{
    +			$this->db->rollback();
    +			return -1;
    +		}
    +	}
     
    -        $sql = "UPDATE ".MAIN_DB_PREFIX."commande";
    -        $sql.= " SET fk_statut = ".self::STATUS_DRAFT;
    -        $sql.= " WHERE rowid = ".$this->id;
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Set draft status
    +	 *
    +	 *	@param	User	$user			Object user that modify
    +	 *	@param	int		$idwarehouse	Warehouse ID to use for stock change (Used only if option STOCK_CALCULATE_ON_VALIDATE_ORDER is on)
    +	 *	@return	int						<0 if KO, >0 if OK
    +	 */
    +	function set_draft($user, $idwarehouse=-1)
    +	{
    +        //phpcs:enable
    +		global $conf,$langs;
     
    -        dol_syslog(get_class($this)."::set_draft", LOG_DEBUG);
    -        if ($this->db->query($sql))
    -        {
    -            // If stock is decremented on validate order, we must reincrement it
    -            if (! empty($conf->stock->enabled) && $conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER == 1)
    -            {
    -                $result = 0;
    +		$error=0;
     
    -                require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php';
    -                $langs->load("agenda");
    +		// Protection
    +		if ($this->statut <= self::STATUS_DRAFT)
    +		{
    +			return 0;
    +		}
     
    -                $num=count($this->lines);
    -                for ($i = 0; $i < $num; $i++)
    -                {
    -                    if ($this->lines[$i]->fk_product > 0)
    -                    {
    -                        $mouvP = new MouvementStock($this->db);
    -                        $mouvP->origin = &$this;
    -                        // We increment stock of product (and sub-products)
    -                        $result=$mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, 0, $langs->trans("OrderBackToDraftInDolibarr",$this->ref));
    -                        if ($result < 0) { $error++; $this->error=$mouvP->error; break; }
    -                    }
    -                }
    -            }
    +		if (! ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer))
    +			|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate))))
    +		{
    +			$this->error='Permission denied';
    +			return -1;
    +		}
     
    -            if (!$error) {
    -            	// Call trigger
    -            	$result=$this->call_trigger('ORDER_UNVALIDATE',$user);
    -            	if ($result < 0) $error++;
    -            }
    +		$this->db->begin();
     
    -            if (!$error) {
    -           		$this->statut=self::STATUS_DRAFT;
    -            	$this->db->commit();
    -            	return 1;
    -            }else {
    -            	$this->db->rollback();
    -            	return -1;
    -            }
    -        }
    -        else
    -        {
    -            $this->error=$this->db->error();
    -            $this->db->rollback();
    -            return -1;
    -        }
    -    }
    +		$sql = "UPDATE ".MAIN_DB_PREFIX."commande";
    +		$sql.= " SET fk_statut = ".self::STATUS_DRAFT;
    +		$sql.= " WHERE rowid = ".$this->id;
    +
    +		dol_syslog(get_class($this)."::set_draft", LOG_DEBUG);
    +		if ($this->db->query($sql))
    +		{
    +			// If stock is decremented on validate order, we must reincrement it
    +			if (! empty($conf->stock->enabled) && $conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER == 1)
    +			{
    +				$result = 0;
    +
    +				require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php';
    +				$langs->load("agenda");
    +
    +				$num=count($this->lines);
    +				for ($i = 0; $i < $num; $i++)
    +				{
    +					if ($this->lines[$i]->fk_product > 0)
    +					{
    +						$mouvP = new MouvementStock($this->db);
    +						$mouvP->origin = &$this;
    +						// We increment stock of product (and sub-products)
    +						$result=$mouvP->reception($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, 0, $langs->trans("OrderBackToDraftInDolibarr",$this->ref));
    +						if ($result < 0) { $error++; $this->error=$mouvP->error; break; }
    +					}
    +				}
    +			}
    +
    +			if (!$error) {
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_UNVALIDATE',$user);
    +				if ($result < 0) $error++;
    +			}
    +
    +			if (!$error) {
    +				$this->statut=self::STATUS_DRAFT;
    +				$this->db->commit();
    +				return 1;
    +			}else {
    +				$this->db->rollback();
    +				return -1;
    +			}
    +		}
    +		else
    +		{
    +			$this->error=$this->db->error();
    +			$this->db->rollback();
    +			return -1;
    +		}
    +	}
     
     
    -    /**
    -     *	Tag the order as validated (opened)
    -     *	Function used when order is reopend after being closed.
    -     *
    -     *	@param      User	$user       Object user that change status
    -     *	@return     int         		<0 if KO, 0 if nothing is done, >0 if OK
    -     */
    -    function set_reopen($user)
    -    {
    -        $error=0;
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Tag the order as validated (opened)
    +	 *	Function used when order is reopend after being closed.
    +	 *
    +	 *	@param      User	$user       Object user that change status
    +	 *	@return     int         		<0 if KO, 0 if nothing is done, >0 if OK
    +	 */
    +	function set_reopen($user)
    +	{
    +        // phpcs:enable
    +		$error=0;
     
    -        if ($this->statut != self::STATUS_CANCELED && $this->statut != self::STATUS_CLOSED)
    -        {
    -        	dol_syslog(get_class($this)."::set_reopen order has not status closed", LOG_WARNING);
    -            return 0;
    -        }
    +		if ($this->statut != self::STATUS_CANCELED && $this->statut != self::STATUS_CLOSED)
    +		{
    +			dol_syslog(get_class($this)."::set_reopen order has not status closed", LOG_WARNING);
    +			return 0;
    +		}
     
    -        $this->db->begin();
    +		$this->db->begin();
     
    -        $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    -        $sql.= ' SET fk_statut='.self::STATUS_VALIDATED.', facture=0';
    -        $sql.= ' WHERE rowid = '.$this->id;
    +		$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    +		$sql.= ' SET fk_statut='.self::STATUS_VALIDATED.', facture=0';
    +		$sql.= ' WHERE rowid = '.$this->id;
     
    -        dol_syslog(get_class($this)."::set_reopen", LOG_DEBUG);
    -        $resql = $this->db->query($sql);
    -        if ($resql)
    -        {
    -            // Call trigger
    -            $result=$this->call_trigger('ORDER_REOPEN',$user);
    -            if ($result < 0) $error++;
    -            // End call triggers
    -        }
    -        else
    -        {
    -            $error++;
    -            $this->error=$this->db->lasterror();
    -            dol_print_error($this->db);
    -        }
    +		dol_syslog(get_class($this)."::set_reopen", LOG_DEBUG);
    +		$resql = $this->db->query($sql);
    +		if ($resql)
    +		{
    +			// Call trigger
    +			$result=$this->call_trigger('ORDER_REOPEN',$user);
    +			if ($result < 0) $error++;
    +			// End call triggers
    +		}
    +		else
    +		{
    +			$error++;
    +			$this->error=$this->db->lasterror();
    +			dol_print_error($this->db);
    +		}
     
    -        if (! $error)
    -        {
    -        	$this->statut = self::STATUS_VALIDATED;
    -        	$this->billed = 0;
    +		if (! $error)
    +		{
    +			$this->statut = self::STATUS_VALIDATED;
    +			$this->billed = 0;
     
    -            $this->db->commit();
    -            return 1;
    -        }
    -        else
    -        {
    -	        foreach($this->errors as $errmsg)
    -	        {
    -		        dol_syslog(get_class($this)."::set_reopen ".$errmsg, LOG_ERR);
    -		        $this->error.=($this->error?', '.$errmsg:$errmsg);
    -	        }
    -	        $this->db->rollback();
    -	        return -1*$error;
    -        }
    -    }
    +			$this->db->commit();
    +			return 1;
    +		}
    +		else
    +		{
    +			foreach($this->errors as $errmsg)
    +			{
    +				dol_syslog(get_class($this)."::set_reopen ".$errmsg, LOG_ERR);
    +				$this->error.=($this->error?', '.$errmsg:$errmsg);
    +			}
    +			$this->db->rollback();
    +			return -1*$error;
    +		}
    +	}
     
    -    /**
    -     *  Close order
    -     *
    -     * 	@param      User	$user       Objet user that close
    -     *  @param		int		$notrigger	1=Does not execute triggers, 0=Execute triggers
    -     *	@return		int					<0 if KO, >0 if OK
    -     */
    -    function cloture($user, $notrigger=0)
    -    {
    -        global $conf;
    +	/**
    +	 *  Close order
    +	 *
    +	 * 	@param      User	$user       Objet user that close
    +	 *  @param		int		$notrigger	1=Does not execute triggers, 0=Execute triggers
    +	 *	@return		int					<0 if KO, >0 if OK
    +	 */
    +	function cloture($user, $notrigger=0)
    +	{
    +		global $conf;
     
    -        $error=0;
    +		$error=0;
     
    -        if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer))
    -       	|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate)))
    -        {
    -            $this->db->begin();
    +		if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->creer))
    +			|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->commande->order_advance->validate)))
    +		{
    +			$this->db->begin();
     
    -            $now=dol_now();
    +			$now=dol_now();
     
    -            $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    -            $sql.= ' SET fk_statut = '.self::STATUS_CLOSED.',';
    -            $sql.= ' fk_user_cloture = '.$user->id.',';
    -            $sql.= " date_cloture = '".$this->db->idate($now)."'";
    -            $sql.= ' WHERE rowid = '.$this->id.' AND fk_statut > '.self::STATUS_DRAFT;
    +			$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    +			$sql.= ' SET fk_statut = '.self::STATUS_CLOSED.',';
    +			$sql.= ' fk_user_cloture = '.$user->id.',';
    +			$sql.= " date_cloture = '".$this->db->idate($now)."'";
    +			$sql.= ' WHERE rowid = '.$this->id.' AND fk_statut > '.self::STATUS_DRAFT;
     
    -            if ($this->db->query($sql))
    -            {
    -            	if (! $notrigger)
    -            	{
    -		            // Call trigger
    -	            	$result=$this->call_trigger('ORDER_CLOSE',$user);
    -	            	if ($result < 0) $error++;
    -		            // End call triggers
    -            	}
    +			if ($this->db->query($sql))
    +			{
    +				if (! $notrigger)
    +				{
    +					// Call trigger
    +					$result=$this->call_trigger('ORDER_CLOSE',$user);
    +					if ($result < 0) $error++;
    +					// End call triggers
    +				}
     
    -                if (! $error)
    -                {
    -                	$this->statut=self::STATUS_CLOSED;
    +				if (! $error)
    +				{
    +					$this->statut=self::STATUS_CLOSED;
     
    -                    $this->db->commit();
    -                    return 1;
    -                }
    -                else
    -                {
    -                    $this->db->rollback();
    -                    return -1;
    -                }
    -            }
    -            else
    -            {
    -                $this->error=$this->db->lasterror();
    +					$this->db->commit();
    +					return 1;
    +				}
    +				else
    +				{
    +					$this->db->rollback();
    +					return -1;
    +				}
    +			}
    +			else
    +			{
    +				$this->error=$this->db->lasterror();
     
    -                $this->db->rollback();
    -                return -1;
    -            }
    -        }
    -        return 0;
    -    }
    +				$this->db->rollback();
    +				return -1;
    +			}
    +		}
    +		return 0;
    +	}
     
    -    /**
    -     * 	Cancel an order
    -     * 	If stock is decremented on order validation, we must reincrement it
    -     *
    -     *	@param	int		$idwarehouse	Id warehouse to use for stock change.
    -     *	@return	int						<0 if KO, >0 if OK
    -     */
    +	/**
    +	 * 	Cancel an order
    +	 * 	If stock is decremented on order validation, we must reincrement it
    +	 *
    +	 *	@param	int		$idwarehouse	Id warehouse to use for stock change.
    +	 *	@return	int						<0 if KO, >0 if OK
    +	 */
     	function cancel($idwarehouse=-1)
     	{
     		global $conf,$user,$langs;
    @@ -674,10 +719,10 @@ class Commande extends CommonOrder
     
     			if (! $error)
     			{
    -	            // Call trigger
    -	            $result=$this->call_trigger('ORDER_CANCEL',$user);
    -	            if ($result < 0) $error++;
    -	            // End call triggers
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_CANCEL',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
     			}
     
     			if (! $error)
    @@ -705,24 +750,24 @@ class Commande extends CommonOrder
     		}
     	}
     
    -    /**
    -     *	Create order
    -     *	Note that this->ref can be set or empty. If empty, we will use "(PROV)"
    -     *
    -     *	@param		User	$user 		Objet user that make creation
    -     *	@param		int	    $notrigger	Disable all triggers
    -     *	@return 	int			        <0 if KO, >0 if OK
    -     */
    -    function create($user, $notrigger=0)
    -    {
    -        global $conf,$langs;
    -        $error=0;
    +	/**
    +	 *	Create order
    +	 *	Note that this->ref can be set or empty. If empty, we will use "(PROV)"
    +	 *
    +	 *	@param		User	$user 		Objet user that make creation
    +	 *	@param		int	    $notrigger	Disable all triggers
    +	 *	@return 	int			        <0 if KO, >0 if OK
    +	 */
    +	function create($user, $notrigger=0)
    +	{
    +		global $conf,$langs;
    +		$error=0;
     
    -        // Clean parameters
    -        $this->brouillon = 1;		// set command as draft
    +		// Clean parameters
    +		$this->brouillon = 1;		// set command as draft
     
     		// $date_commande is deprecated
    -        $date = ($this->date_commande ? $this->date_commande : $this->date);
    +		$date = ($this->date_commande ? $this->date_commande : $this->date);
     
     		// Multicurrency (test on $this->multicurrency_tx because we should take the default rate only if not using origin rate)
     		if (!empty($this->multicurrency_code) && empty($this->multicurrency_tx)) list($this->fk_multicurrency,$this->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($this->db, $this->multicurrency_code, $date);
    @@ -734,412 +779,412 @@ class Commande extends CommonOrder
     			$this->multicurrency_tx = 1;
     		}
     
    -        dol_syslog(get_class($this)."::create user=".$user->id);
    +		dol_syslog(get_class($this)."::create user=".$user->id);
     
    -        // Check parameters
    -    	if (! empty($this->ref))	// We check that ref is not already used
    -    	{
    -    		$result=self::isExistingObject($this->element, 0, $this->ref);	// Check ref is not yet used
    -    		if ($result > 0)
    -    		{
    -    			$this->error='ErrorRefAlreadyExists';
    -    			dol_syslog(get_class($this)."::create ".$this->error,LOG_WARNING);
    -    			$this->db->rollback();
    -    			return -1;
    -    		}
    -    	}
    +		// Check parameters
    +		if (! empty($this->ref))	// We check that ref is not already used
    +		{
    +			$result=self::isExistingObject($this->element, 0, $this->ref);	// Check ref is not yet used
    +			if ($result > 0)
    +			{
    +				$this->error='ErrorRefAlreadyExists';
    +				dol_syslog(get_class($this)."::create ".$this->error,LOG_WARNING);
    +				$this->db->rollback();
    +				return -1;
    +			}
    +		}
     
    -        $soc = new Societe($this->db);
    -        $result=$soc->fetch($this->socid);
    -        if ($result < 0)
    -        {
    -            $this->error="Failed to fetch company";
    -            dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR);
    -            return -2;
    -        }
    -        if (! empty($conf->global->COMMANDE_REQUIRE_SOURCE) && $this->source < 0)
    -        {
    -            $this->error=$langs->trans("ErrorFieldRequired",$langs->trans("Source"));
    -            dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR);
    -            return -1;
    -        }
    +		$soc = new Societe($this->db);
    +		$result=$soc->fetch($this->socid);
    +		if ($result < 0)
    +		{
    +			$this->error="Failed to fetch company";
    +			dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR);
    +			return -2;
    +		}
    +		if (! empty($conf->global->COMMANDE_REQUIRE_SOURCE) && $this->source < 0)
    +		{
    +			$this->error=$langs->trans("ErrorFieldRequired",$langs->trans("Source"));
    +			dol_syslog(get_class($this)."::create ".$this->error, LOG_ERR);
    +			return -1;
    +		}
     
    -        $now=dol_now();
    +		$now=dol_now();
     
    -        $this->db->begin();
    +		$this->db->begin();
     
    -        $sql = "INSERT INTO ".MAIN_DB_PREFIX."commande (";
    -        $sql.= " ref, fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source, note_private, note_public, ref_ext, ref_client, ref_int";
    -        $sql.= ", model_pdf, fk_cond_reglement, fk_mode_reglement, fk_account, fk_availability, fk_input_reason, date_livraison, fk_delivery_address";
    -        $sql.= ", fk_shipping_method";
    -        $sql.= ", fk_warehouse";
    -        $sql.= ", remise_absolue, remise_percent";
    -        $sql.= ", fk_incoterms, location_incoterms";
    -        $sql.= ", entity";
    -        $sql.= ", fk_multicurrency";
    -        $sql.= ", multicurrency_code";
    -        $sql.= ", multicurrency_tx";
    -        $sql.= ")";
    -        $sql.= " VALUES ('(PROV)', ".$this->socid.", '".$this->db->idate($now)."', ".$user->id;
    -        $sql.= ", ".($this->fk_project>0?$this->fk_project:"null");
    -        $sql.= ", '".$this->db->idate($date)."'";
    -        $sql.= ", ".($this->source>=0 && $this->source != '' ?$this->db->escape($this->source):'null');
    -        $sql.= ", '".$this->db->escape($this->note_private)."'";
    -        $sql.= ", '".$this->db->escape($this->note_public)."'";
    -        $sql.= ", ".($this->ref_ext?"'".$this->db->escape($this->ref_ext)."'":"null");
    -        $sql.= ", ".($this->ref_client?"'".$this->db->escape($this->ref_client)."'":"null");
    -        $sql.= ", ".($this->ref_int?"'".$this->db->escape($this->ref_int)."'":"null");
    -        $sql.= ", '".$this->db->escape($this->modelpdf)."'";
    -        $sql.= ", ".($this->cond_reglement_id>0?$this->cond_reglement_id:"null");
    -        $sql.= ", ".($this->mode_reglement_id>0?$this->mode_reglement_id:"null");
    -        $sql.= ", ".($this->fk_account>0?$this->fk_account:'NULL');
    -        $sql.= ", ".($this->availability_id>0?$this->availability_id:"null");
    -        $sql.= ", ".($this->demand_reason_id>0?$this->demand_reason_id:"null");
    -        $sql.= ", ".($this->date_livraison?"'".$this->db->idate($this->date_livraison)."'":"null");
    -        $sql.= ", ".($this->fk_delivery_address>0?$this->fk_delivery_address:'NULL');
    -        $sql.= ", ".($this->shipping_method_id>0?$this->shipping_method_id:'NULL');
    -        $sql.= ", ".($this->warehouse_id>0?$this->warehouse_id:'NULL');
    -        $sql.= ", ".($this->remise_absolue>0?$this->db->escape($this->remise_absolue):'NULL');
    -        $sql.= ", ".($this->remise_percent>0?$this->db->escape($this->remise_percent):0);
    -        $sql.= ", ".(int) $this->fk_incoterms;
    -        $sql.= ", '".$this->db->escape($this->location_incoterms)."'";
    -        $sql.= ", ".$conf->entity;
    +		$sql = "INSERT INTO ".MAIN_DB_PREFIX."commande (";
    +		$sql.= " ref, fk_soc, date_creation, fk_user_author, fk_projet, date_commande, source, note_private, note_public, ref_ext, ref_client, ref_int";
    +		$sql.= ", model_pdf, fk_cond_reglement, fk_mode_reglement, fk_account, fk_availability, fk_input_reason, date_livraison, fk_delivery_address";
    +		$sql.= ", fk_shipping_method";
    +		$sql.= ", fk_warehouse";
    +		$sql.= ", remise_absolue, remise_percent";
    +		$sql.= ", fk_incoterms, location_incoterms";
    +		$sql.= ", entity";
    +		$sql.= ", fk_multicurrency";
    +		$sql.= ", multicurrency_code";
    +		$sql.= ", multicurrency_tx";
    +		$sql.= ")";
    +		$sql.= " VALUES ('(PROV)', ".$this->socid.", '".$this->db->idate($now)."', ".$user->id;
    +		$sql.= ", ".($this->fk_project>0?$this->fk_project:"null");
    +		$sql.= ", '".$this->db->idate($date)."'";
    +		$sql.= ", ".($this->source>=0 && $this->source != '' ?$this->db->escape($this->source):'null');
    +		$sql.= ", '".$this->db->escape($this->note_private)."'";
    +		$sql.= ", '".$this->db->escape($this->note_public)."'";
    +		$sql.= ", ".($this->ref_ext?"'".$this->db->escape($this->ref_ext)."'":"null");
    +		$sql.= ", ".($this->ref_client?"'".$this->db->escape($this->ref_client)."'":"null");
    +		$sql.= ", ".($this->ref_int?"'".$this->db->escape($this->ref_int)."'":"null");
    +		$sql.= ", '".$this->db->escape($this->modelpdf)."'";
    +		$sql.= ", ".($this->cond_reglement_id>0?$this->cond_reglement_id:"null");
    +		$sql.= ", ".($this->mode_reglement_id>0?$this->mode_reglement_id:"null");
    +		$sql.= ", ".($this->fk_account>0?$this->fk_account:'NULL');
    +		$sql.= ", ".($this->availability_id>0?$this->availability_id:"null");
    +		$sql.= ", ".($this->demand_reason_id>0?$this->demand_reason_id:"null");
    +		$sql.= ", ".($this->date_livraison?"'".$this->db->idate($this->date_livraison)."'":"null");
    +		$sql.= ", ".($this->fk_delivery_address>0?$this->fk_delivery_address:'NULL');
    +		$sql.= ", ".($this->shipping_method_id>0?$this->shipping_method_id:'NULL');
    +		$sql.= ", ".($this->warehouse_id>0?$this->warehouse_id:'NULL');
    +		$sql.= ", ".($this->remise_absolue>0?$this->db->escape($this->remise_absolue):'NULL');
    +		$sql.= ", ".($this->remise_percent>0?$this->db->escape($this->remise_percent):0);
    +		$sql.= ", ".(int) $this->fk_incoterms;
    +		$sql.= ", '".$this->db->escape($this->location_incoterms)."'";
    +		$sql.= ", ".$conf->entity;
     		$sql.= ", ".(int) $this->fk_multicurrency;
     		$sql.= ", '".$this->db->escape($this->multicurrency_code)."'";
     		$sql.= ", ".(double) $this->multicurrency_tx;
    -        $sql.= ")";
    +		$sql.= ")";
     
    -        dol_syslog(get_class($this)."::create", LOG_DEBUG);
    -        $resql=$this->db->query($sql);
    -        if ($resql)
    -        {
    -            $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.'commande');
    +		dol_syslog(get_class($this)."::create", LOG_DEBUG);
    +		$resql=$this->db->query($sql);
    +		if ($resql)
    +		{
    +			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.'commande');
     
    -            if ($this->id)
    -            {
    -                $fk_parent_line=0;
    -                $num=count($this->lines);
    +			if ($this->id)
    +			{
    +				$fk_parent_line=0;
    +				$num=count($this->lines);
     
    -                /*
    -                 *  Insert products details into db
    -                 */
    -                for ($i=0;$i<$num;$i++)
    -                {
    -                	$line = $this->lines[$i];
    +				/*
    +				 *  Insert products details into db
    +				 */
    +				for ($i=0;$i<$num;$i++)
    +				{
    +					$line = $this->lines[$i];
     
    -                	// Test and convert into object this->lines[$i]. When coming from REST API, we may still have an array
    -				    //if (! is_object($line)) $line=json_decode(json_encode($line), false);  // convert recursively array into object.
    -                	if (! is_object($line)) $line = (object) $line;
    +					// Test and convert into object this->lines[$i]. When coming from REST API, we may still have an array
    +					//if (! is_object($line)) $line=json_decode(json_encode($line), false);  // convert recursively array into object.
    +					if (! is_object($line)) $line = (object) $line;
     
    -                    // Reset fk_parent_line for no child products and special product
    -                    if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
    -                        $fk_parent_line = 0;
    -                    }
    +					// Reset fk_parent_line for no child products and special product
    +					if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
    +						$fk_parent_line = 0;
    +					}
     
     					// Complete vat rate with code
     					$vatrate = $line->tva_tx;
     					if ($line->vat_src_code && ! preg_match('/\(.*\)/', $vatrate)) $vatrate.=' ('.$line->vat_src_code.')';
     
    -                    $result = $this->addline(
    -                        $line->desc,
    -                        $line->subprice,
    -                        $line->qty,
    -                        $vatrate,
    -                        $line->localtax1_tx,
    -                        $line->localtax2_tx,
    -                        $line->fk_product,
    -                        $line->remise_percent,
    -                        $line->info_bits,
    -                        $line->fk_remise_except,
    -                        'HT',
    -                        0,
    -                        $line->date_start,
    -                        $line->date_end,
    -                        $line->product_type,
    -                        $line->rang,
    -                        $line->special_code,
    -                        $fk_parent_line,
    -                        $line->fk_fournprice,
    -                        $line->pa_ht,
    -                    	$line->label,
    -                    	$line->array_options,
    -	                    $line->fk_unit,
    -                        $this->element,
    -                        $line->id
    -                    );
    -                    if ($result < 0)
    -                    {
    -                    	if ($result != self::STOCK_NOT_ENOUGH_FOR_ORDER)
    -                    	{
    -                        	$this->error=$this->db->lasterror();
    -                        	dol_print_error($this->db);
    -                    	}
    -                        $this->db->rollback();
    -                        return -1;
    -                    }
    -                    // Defined the new fk_parent_line
    -                    if ($result > 0 && $line->product_type == 9) {
    -                        $fk_parent_line = $result;
    -                    }
    -                }
    -
    -                // update ref
    -                $initialref='(PROV'.$this->id.')';
    -                if (! empty($this->ref)) $initialref=$this->ref;
    -
    -                $sql = 'UPDATE '.MAIN_DB_PREFIX."commande SET ref='".$this->db->escape($initialref)."' WHERE rowid=".$this->id;
    -                if ($this->db->query($sql))
    -                {
    -                    if ($this->id)
    -                    {
    -                    	$this->ref = $initialref;
    -
    -                    	if (! empty($this->linkedObjectsIds) && empty($this->linked_objects))	// To use new linkedObjectsIds instead of old linked_objects
    -                    	{
    -                    		$this->linked_objects = $this->linkedObjectsIds;	// TODO Replace linked_objects with linkedObjectsIds
    -                    	}
    -
    -                        // Add object linked
    -                        if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects))
    -                        {
    -                        	foreach($this->linked_objects as $origin => $tmp_origin_id)
    -                        	{
    -                        	    if (is_array($tmp_origin_id))       // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...))
    -                        	    {
    -                        	        foreach($tmp_origin_id as $origin_id)
    -                        	        {
    -                        	            $ret = $this->add_object_linked($origin, $origin_id);
    -                        	            if (! $ret)
    -                        	            {
    -                        	                $this->error=$this->db->lasterror();
    -                        	                $error++;
    -                        	            }
    -                        	        }
    -                        	    }
    -                        	    else                                // Old behaviour, if linked_object has only one link per type, so is something like array('contract'=>id1))
    -                        	    {
    -                        	        $origin_id = $tmp_origin_id;
    -                        	        $ret = $this->add_object_linked($origin, $origin_id);
    -                        	        if (! $ret)
    -                        	        {
    -                        	            $this->error=$this->db->lasterror();
    -                        	            $error++;
    -                        	        }
    -                          	    }
    -                        	}
    -                        }
    -
    -            			if (! $error && $this->id && ! empty($conf->global->MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN) && ! empty($this->origin) && ! empty($this->origin_id))   // Get contact from origin object
    -            			{
    -            				$originforcontact = $this->origin;
    -            				$originidforcontact = $this->origin_id;
    -                		    if ($originforcontact == 'shipping')     // shipment and order share the same contacts. If creating from shipment we take data of order
    -                		    {
    -                		        require_once DOL_DOCUMENT_ROOT . '/expedition/class/expedition.class.php';
    -                		        $exp = new Expedition($this->db);
    -                		        $exp->fetch($this->origin_id);
    -                		        $exp->fetchObjectLinked();
    -                		        if (count($exp->linkedObjectsIds['commande']) > 0)
    -                		        {
    -                		            foreach ($exp->linkedObjectsIds['commande'] as $key => $value)
    -                		            {
    -                		                $originforcontact = 'commande';
    -							            if (is_object($value)) $originidforcontact = $value->id;
    -							            else $originidforcontact = $value;
    -                		                break; // We take first one
    -                		            }
    -                		        }
    -                		    }
    -
    -                		    $sqlcontact = "SELECT ctc.code, ctc.source, ec.fk_socpeople FROM ".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as ctc";
    -                		    $sqlcontact.= " WHERE element_id = ".$originidforcontact." AND ec.fk_c_type_contact = ctc.rowid AND ctc.element = '".$originforcontact."'";
    -
    -                		    $resqlcontact = $this->db->query($sqlcontact);
    -                		    if ($resqlcontact)
    -                		    {
    -                		        while($objcontact = $this->db->fetch_object($resqlcontact))
    -                		        {
    -        					        //print $objcontact->code.'-'.$objcontact->source.'-'.$objcontact->fk_socpeople."\n";
    -                		            $this->add_contact($objcontact->fk_socpeople, $objcontact->code, $objcontact->source);    // May failed because of duplicate key or because code of contact type does not exists for new object
    -                		        }
    -                		    }
    -                		    else dol_print_error($resqlcontact);
    -                		}
    -                    }
    -
    -                    if (! $error)
    -                    {
    -                   		$result=$this->insertExtraFields();
    -                   		if ($result < 0) $error++;
    -                    }
    -
    -                    if (! $error && ! $notrigger)
    -                    {
    -			            // Call trigger
    -			            $result=$this->call_trigger('ORDER_CREATE',$user);
    -			            if ($result < 0) $error++;
    -			            // End call triggers
    -                    }
    -
    -	                if (! $error)
    -	                {
    -		                $this->db->commit();
    -		                return $this->id;
    -	                }
    -	                else
    +					$result = $this->addline(
    +						$line->desc,
    +						$line->subprice,
    +						$line->qty,
    +						$vatrate,
    +						$line->localtax1_tx,
    +						$line->localtax2_tx,
    +						$line->fk_product,
    +						$line->remise_percent,
    +						$line->info_bits,
    +						$line->fk_remise_except,
    +						'HT',
    +						0,
    +						$line->date_start,
    +						$line->date_end,
    +						$line->product_type,
    +						$line->rang,
    +						$line->special_code,
    +						$fk_parent_line,
    +						$line->fk_fournprice,
    +						$line->pa_ht,
    +						$line->label,
    +						$line->array_options,
    +						$line->fk_unit,
    +						$this->element,
    +						$line->id
    +					);
    +					if ($result < 0)
     					{
    -	                	$this->db->rollback();
    -	                	return -1*$error;
    +						if ($result != self::STOCK_NOT_ENOUGH_FOR_ORDER)
    +						{
    +							$this->error=$this->db->lasterror();
    +							dol_print_error($this->db);
    +						}
    +						$this->db->rollback();
    +						return -1;
     					}
    -                }
    -                else
    +					// Defined the new fk_parent_line
    +					if ($result > 0 && $line->product_type == 9) {
    +						$fk_parent_line = $result;
    +					}
    +				}
    +
    +				// update ref
    +				$initialref='(PROV'.$this->id.')';
    +				if (! empty($this->ref)) $initialref=$this->ref;
    +
    +				$sql = 'UPDATE '.MAIN_DB_PREFIX."commande SET ref='".$this->db->escape($initialref)."' WHERE rowid=".$this->id;
    +				if ($this->db->query($sql))
    +				{
    +					if ($this->id)
    +					{
    +						$this->ref = $initialref;
    +
    +						if (! empty($this->linkedObjectsIds) && empty($this->linked_objects))	// To use new linkedObjectsIds instead of old linked_objects
    +						{
    +							$this->linked_objects = $this->linkedObjectsIds;	// TODO Replace linked_objects with linkedObjectsIds
    +						}
    +
    +						// Add object linked
    +						if (! $error && $this->id && is_array($this->linked_objects) && ! empty($this->linked_objects))
    +						{
    +							foreach($this->linked_objects as $origin => $tmp_origin_id)
    +							{
    +								if (is_array($tmp_origin_id))       // New behaviour, if linked_object can have several links per type, so is something like array('contract'=>array(id1, id2, ...))
    +								{
    +									foreach($tmp_origin_id as $origin_id)
    +									{
    +										$ret = $this->add_object_linked($origin, $origin_id);
    +										if (! $ret)
    +										{
    +											$this->error=$this->db->lasterror();
    +											$error++;
    +										}
    +									}
    +								}
    +								else                                // Old behaviour, if linked_object has only one link per type, so is something like array('contract'=>id1))
    +								{
    +									$origin_id = $tmp_origin_id;
    +									$ret = $this->add_object_linked($origin, $origin_id);
    +									if (! $ret)
    +									{
    +										$this->error=$this->db->lasterror();
    +										$error++;
    +									}
    +								}
    +							}
    +						}
    +
    +						if (! $error && $this->id && ! empty($conf->global->MAIN_PROPAGATE_CONTACTS_FROM_ORIGIN) && ! empty($this->origin) && ! empty($this->origin_id))   // Get contact from origin object
    +						{
    +							$originforcontact = $this->origin;
    +							$originidforcontact = $this->origin_id;
    +							if ($originforcontact == 'shipping')     // shipment and order share the same contacts. If creating from shipment we take data of order
    +							{
    +								require_once DOL_DOCUMENT_ROOT . '/expedition/class/expedition.class.php';
    +								$exp = new Expedition($this->db);
    +								$exp->fetch($this->origin_id);
    +								$exp->fetchObjectLinked();
    +								if (count($exp->linkedObjectsIds['commande']) > 0)
    +								{
    +									foreach ($exp->linkedObjectsIds['commande'] as $key => $value)
    +									{
    +										$originforcontact = 'commande';
    +										if (is_object($value)) $originidforcontact = $value->id;
    +										else $originidforcontact = $value;
    +										break; // We take first one
    +									}
    +								}
    +							}
    +
    +							$sqlcontact = "SELECT ctc.code, ctc.source, ec.fk_socpeople FROM ".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as ctc";
    +							$sqlcontact.= " WHERE element_id = ".$originidforcontact." AND ec.fk_c_type_contact = ctc.rowid AND ctc.element = '".$originforcontact."'";
    +
    +							$resqlcontact = $this->db->query($sqlcontact);
    +							if ($resqlcontact)
    +							{
    +								while($objcontact = $this->db->fetch_object($resqlcontact))
    +								{
    +									//print $objcontact->code.'-'.$objcontact->source.'-'.$objcontact->fk_socpeople."\n";
    +									$this->add_contact($objcontact->fk_socpeople, $objcontact->code, $objcontact->source);    // May failed because of duplicate key or because code of contact type does not exists for new object
    +								}
    +							}
    +							else dol_print_error($resqlcontact);
    +						}
    +					}
    +
    +					if (! $error)
    +					{
    +						$result=$this->insertExtraFields();
    +						if ($result < 0) $error++;
    +					}
    +
    +					if (! $error && ! $notrigger)
    +					{
    +						// Call trigger
    +						$result=$this->call_trigger('ORDER_CREATE',$user);
    +						if ($result < 0) $error++;
    +						// End call triggers
    +					}
    +
    +					if (! $error)
    +					{
    +						$this->db->commit();
    +						return $this->id;
    +					}
    +					else
    +					{
    +						$this->db->rollback();
    +						return -1*$error;
    +					}
    +				}
    +				else
     				{
     					$this->error=$this->db->lasterror();
    -                    $this->db->rollback();
    -                    return -1;
    -                }
    -            }
    -        }
    -        else
    +					$this->db->rollback();
    +					return -1;
    +				}
    +			}
    +		}
    +		else
     		{
    -            dol_print_error($this->db);
    -            $this->db->rollback();
    -            return -1;
    -        }
    -    }
    +			dol_print_error($this->db);
    +			$this->db->rollback();
    +			return -1;
    +		}
    +	}
     
     
    -    /**
    -     *	Load an object from its id and create a new one in database
    -     *
    -     *	@param		int			$socid			Id of thirdparty
    -     *	@return		int							New id of clone
    -     */
    -    function createFromClone($socid=0)
    -    {
    -        global $user,$hookmanager;
    +	/**
    +	 *	Load an object from its id and create a new one in database
    +	 *
    +	 *	@param		int			$socid			Id of thirdparty
    +	 *	@return		int							New id of clone
    +	 */
    +	function createFromClone($socid=0)
    +	{
    +		global $user,$hookmanager;
     
    -        $error=0;
    +		$error=0;
     
    -        $this->context['createfromclone'] = 'createfromclone';
    +		$this->context['createfromclone'] = 'createfromclone';
     
    -        $this->db->begin();
    +		$this->db->begin();
     
     		// get lines so they will be clone
     		foreach($this->lines as $line)
     			$line->fetch_optionals();
     
    -        // Load source object
    -        $objFrom = clone $this;
    +			// Load source object
    +			$objFrom = clone $this;
     
    -        // Change socid if needed
    -        if (! empty($socid) && $socid != $this->socid)
    -        {
    -            $objsoc = new Societe($this->db);
    +			// Change socid if needed
    +			if (! empty($socid) && $socid != $this->socid)
    +			{
    +				$objsoc = new Societe($this->db);
     
    -            if ($objsoc->fetch($socid)>0)
    -            {
    -                $this->socid 				= $objsoc->id;
    -                $this->cond_reglement_id	= (! empty($objsoc->cond_reglement_id) ? $objsoc->cond_reglement_id : 0);
    -                $this->mode_reglement_id	= (! empty($objsoc->mode_reglement_id) ? $objsoc->mode_reglement_id : 0);
    -                $this->fk_project			= 0;
    -                $this->fk_delivery_address	= 0;
    -            }
    +				if ($objsoc->fetch($socid)>0)
    +				{
    +					$this->socid 				= $objsoc->id;
    +					$this->cond_reglement_id	= (! empty($objsoc->cond_reglement_id) ? $objsoc->cond_reglement_id : 0);
    +					$this->mode_reglement_id	= (! empty($objsoc->mode_reglement_id) ? $objsoc->mode_reglement_id : 0);
    +					$this->fk_project			= 0;
    +					$this->fk_delivery_address	= 0;
    +				}
     
    -            // TODO Change product price if multi-prices
    -        }
    +				// TODO Change product price if multi-prices
    +			}
     
    -        $this->id=0;
    -		$this->ref = '';
    -        $this->statut=self::STATUS_DRAFT;
    +			$this->id=0;
    +			$this->ref = '';
    +			$this->statut=self::STATUS_DRAFT;
     
    -        // Clear fields
    -        $this->user_author_id     = $user->id;
    -        $this->user_valid         = '';
    -		$this->date				  = dol_now();
    -		$this->date_commande	  = dol_now();
    -        $this->date_creation      = '';
    -        $this->date_validation    = '';
    -        $this->ref_client         = '';
    +			// Clear fields
    +			$this->user_author_id     = $user->id;
    +			$this->user_valid         = '';
    +			$this->date				  = dol_now();
    +			$this->date_commande	  = dol_now();
    +			$this->date_creation      = '';
    +			$this->date_validation    = '';
    +			$this->ref_client         = '';
     
    -        // Create clone
    -        $result=$this->create($user);
    -        if ($result < 0) $error++;
    +			// Create clone
    +			$result=$this->create($user);
    +			if ($result < 0) $error++;
     
    -        if (! $error)
    -        {
    -            // Hook of thirdparty module
    -            if (is_object($hookmanager))
    -            {
    -                $parameters=array('objFrom'=>$objFrom);
    -                $action='';
    -                $reshook=$hookmanager->executeHooks('createFrom',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    -                if ($reshook < 0) $error++;
    -            }
    -        }
    +			if (! $error)
    +			{
    +				// Hook of thirdparty module
    +				if (is_object($hookmanager))
    +				{
    +					$parameters=array('objFrom'=>$objFrom);
    +					$action='';
    +					$reshook=$hookmanager->executeHooks('createFrom',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +					if ($reshook < 0) $error++;
    +				}
    +			}
     
    -        unset($this->context['createfromclone']);
    +			unset($this->context['createfromclone']);
     
    -        // End
    -        if (! $error)
    -        {
    -            $this->db->commit();
    -            return $this->id;
    -        }
    -        else
    -        {
    -            $this->db->rollback();
    -            return -1;
    -        }
    -    }
    +			// End
    +			if (! $error)
    +			{
    +				$this->db->commit();
    +				return $this->id;
    +			}
    +			else
    +			{
    +				$this->db->rollback();
    +				return -1;
    +			}
    +	}
     
     
    -    /**
    -     *  Load an object from a proposal and create a new order into database
    -     *
    -     *  @param      Object			$object 	        Object source
    -     *  @param		User			$user				User making creation
    -     *  @return     int             					<0 if KO, 0 if nothing done, 1 if OK
    -     */
    -    function createFromProposal($object, User $user)
    -    {
    -        global $conf, $hookmanager;
    +	/**
    +	 *  Load an object from a proposal and create a new order into database
    +	 *
    +	 *  @param      Object			$object 	        Object source
    +	 *  @param		User			$user				User making creation
    +	 *  @return     int             					<0 if KO, 0 if nothing done, 1 if OK
    +	 */
    +	function createFromProposal($object, User $user)
    +	{
    +		global $conf, $hookmanager;
     
     		dol_include_once('/core/class/extrafields.class.php');
     
    -        $error=0;
    +		$error=0;
     
     
    -        $this->date_commande = dol_now();
    -        $this->source = 0;
    +		$this->date_commande = dol_now();
    +		$this->source = 0;
     
    -        $num=count($object->lines);
    -        for ($i = 0; $i < $num; $i++)
    -        {
    -            $line = new OrderLine($this->db);
    +		$num=count($object->lines);
    +		for ($i = 0; $i < $num; $i++)
    +		{
    +			$line = new OrderLine($this->db);
     
    -            $line->libelle           = $object->lines[$i]->libelle;
    -            $line->label             = $object->lines[$i]->label;
    -            $line->desc              = $object->lines[$i]->desc;
    -            $line->price             = $object->lines[$i]->price;
    -            $line->subprice          = $object->lines[$i]->subprice;
    -            $line->vat_src_code      = $object->lines[$i]->vat_src_code;
    -            $line->tva_tx            = $object->lines[$i]->tva_tx;
    -            $line->localtax1_tx      = $object->lines[$i]->localtax1_tx;
    -            $line->localtax2_tx      = $object->lines[$i]->localtax2_tx;
    -            $line->qty               = $object->lines[$i]->qty;
    -            $line->fk_remise_except  = $object->lines[$i]->fk_remise_except;
    -            $line->remise_percent    = $object->lines[$i]->remise_percent;
    -            $line->fk_product        = $object->lines[$i]->fk_product;
    -            $line->info_bits         = $object->lines[$i]->info_bits;
    -            $line->product_type      = $object->lines[$i]->product_type;
    -            $line->rang              = $object->lines[$i]->rang;
    -            $line->special_code      = $object->lines[$i]->special_code;
    -            $line->fk_parent_line    = $object->lines[$i]->fk_parent_line;
    -	        $line->fk_unit			 = $object->lines[$i]->fk_unit;
    +			$line->libelle           = $object->lines[$i]->libelle;
    +			$line->label             = $object->lines[$i]->label;
    +			$line->desc              = $object->lines[$i]->desc;
    +			$line->price             = $object->lines[$i]->price;
    +			$line->subprice          = $object->lines[$i]->subprice;
    +			$line->vat_src_code      = $object->lines[$i]->vat_src_code;
    +			$line->tva_tx            = $object->lines[$i]->tva_tx;
    +			$line->localtax1_tx      = $object->lines[$i]->localtax1_tx;
    +			$line->localtax2_tx      = $object->lines[$i]->localtax2_tx;
    +			$line->qty               = $object->lines[$i]->qty;
    +			$line->fk_remise_except  = $object->lines[$i]->fk_remise_except;
    +			$line->remise_percent    = $object->lines[$i]->remise_percent;
    +			$line->fk_product        = $object->lines[$i]->fk_product;
    +			$line->info_bits         = $object->lines[$i]->info_bits;
    +			$line->product_type      = $object->lines[$i]->product_type;
    +			$line->rang              = $object->lines[$i]->rang;
    +			$line->special_code      = $object->lines[$i]->special_code;
    +			$line->fk_parent_line    = $object->lines[$i]->fk_parent_line;
    +			$line->fk_unit			 = $object->lines[$i]->fk_unit;
     
    -            $line->date_start      	= $object->lines[$i]->date_start;
    -            $line->date_end    		= $object->lines[$i]->date_end;
    +			$line->date_start      	= $object->lines[$i]->date_start;
    +			$line->date_end    		= $object->lines[$i]->date_end;
     
     			$line->fk_fournprice	= $object->lines[$i]->fk_fournprice;
     			$marginInfos			= getMarginInfos($object->lines[$i]->subprice, $object->lines[$i]->remise_percent, $object->lines[$i]->tva_tx, $object->lines[$i]->localtax1_tx, $object->lines[$i]->localtax2_tx, $object->lines[$i]->fk_fournprice, $object->lines[$i]->pa_ht);
    @@ -1147,34 +1192,34 @@ class Commande extends CommonOrder
     			$line->marge_tx			= $marginInfos[1];
     			$line->marque_tx		= $marginInfos[2];
     
    -            // get extrafields from original line
    +			// get extrafields from original line
     			$object->lines[$i]->fetch_optionals();
     			foreach($object->lines[$i]->array_options as $options_key => $value)
     				$line->array_options[$options_key] = $value;
     
    -			$this->lines[$i] = $line;
    -        }
    +				$this->lines[$i] = $line;
    +		}
     
    -        $this->socid                = $object->socid;
    -        $this->fk_project           = $object->fk_project;
    -        $this->cond_reglement_id    = $object->cond_reglement_id;
    -        $this->mode_reglement_id    = $object->mode_reglement_id;
    -        $this->fk_account           = $object->fk_account;
    -        $this->availability_id      = $object->availability_id;
    -        $this->demand_reason_id     = $object->demand_reason_id;
    -        $this->date_livraison       = $object->date_livraison;
    -        $this->shipping_method_id   = $object->shipping_method_id;
    -        $this->warehouse_id         = $object->warehouse_id;
    -        $this->fk_delivery_address  = $object->fk_delivery_address;
    -        $this->contact_id           = $object->contactid;
    -        $this->ref_client           = $object->ref_client;
    -        $this->note_private         = $object->note_private;
    -        $this->note_public          = $object->note_public;
    +		$this->socid                = $object->socid;
    +		$this->fk_project           = $object->fk_project;
    +		$this->cond_reglement_id    = $object->cond_reglement_id;
    +		$this->mode_reglement_id    = $object->mode_reglement_id;
    +		$this->fk_account           = $object->fk_account;
    +		$this->availability_id      = $object->availability_id;
    +		$this->demand_reason_id     = $object->demand_reason_id;
    +		$this->date_livraison       = $object->date_livraison;
    +		$this->shipping_method_id   = $object->shipping_method_id;
    +		$this->warehouse_id         = $object->warehouse_id;
    +		$this->fk_delivery_address  = $object->fk_delivery_address;
    +		$this->contact_id           = $object->contactid;
    +		$this->ref_client           = $object->ref_client;
    +		$this->note_private         = $object->note_private;
    +		$this->note_public          = $object->note_public;
     
    -        $this->origin				= $object->element;
    -        $this->origin_id			= $object->id;
    +		$this->origin				= $object->element;
    +		$this->origin_id			= $object->id;
     
    -        // get extrafields from original line
    +		// get extrafields from original line
     		$object->fetch_optionals($object->id);
     
     		$e = new ExtraFields($this->db);
    @@ -1185,129 +1230,129 @@ class Commande extends CommonOrder
     				$this->array_options[$options_key] = $value;
     			}
     		}
    -        // Possibility to add external linked objects with hooks
    -        $this->linked_objects[$this->origin] = $this->origin_id;
    -        if (is_array($object->other_linked_objects) && ! empty($object->other_linked_objects))
    -        {
    -           	$this->linked_objects = array_merge($this->linked_objects, $object->other_linked_objects);
    -        }
    +		// Possibility to add external linked objects with hooks
    +		$this->linked_objects[$this->origin] = $this->origin_id;
    +		if (is_array($object->other_linked_objects) && ! empty($object->other_linked_objects))
    +		{
    +			$this->linked_objects = array_merge($this->linked_objects, $object->other_linked_objects);
    +		}
     
    -        $ret = $this->create($user);
    +		$ret = $this->create($user);
     
    -        if ($ret > 0)
    -        {
    -            // Actions hooked (by external module)
    -            $hookmanager->initHooks(array('orderdao'));
    +		if ($ret > 0)
    +		{
    +			// Actions hooked (by external module)
    +			$hookmanager->initHooks(array('orderdao'));
     
    -            $parameters=array('objFrom'=>$object);
    -            $action='';
    -            $reshook=$hookmanager->executeHooks('createFrom',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    -            if ($reshook < 0) $error++;
    +			$parameters=array('objFrom'=>$object);
    +			$action='';
    +			$reshook=$hookmanager->executeHooks('createFrom',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +			if ($reshook < 0) $error++;
     
    -            if (! $error)
    -            {
    -                // Ne pas passer par la commande provisoire
    -                if ($conf->global->COMMANDE_VALID_AFTER_CLOSE_PROPAL == 1)
    -                {
    -                    $this->fetch($ret);
    -                    $this->valid($user);
    -                }
    -                return $ret;
    -            }
    -            else return -1;
    -        }
    -        else return -1;
    -    }
    +			if (! $error)
    +			{
    +				// Ne pas passer par la commande provisoire
    +				if ($conf->global->COMMANDE_VALID_AFTER_CLOSE_PROPAL == 1)
    +				{
    +					$this->fetch($ret);
    +					$this->valid($user);
    +				}
    +				return $ret;
    +			}
    +			else return -1;
    +		}
    +		else return -1;
    +	}
     
     
    -    /**
    -     *	Add an order line into database (linked to product/service or not)
    -     *
    -     *	@param      string			$desc            	Description of line
    -     *	@param      float			$pu_ht    	        Unit price (without tax)
    -     *	@param      float			$qty             	Quantite
    -     * 	@param    	float			$txtva           	Force Vat rate, -1 for auto (Can contain the vat_src_code too with syntax '9.9 (CODE)')
    -     * 	@param		float			$txlocaltax1		Local tax 1 rate (deprecated, use instead txtva with code inside)
    -     * 	@param		float			$txlocaltax2		Local tax 2 rate (deprecated, use instead txtva with code inside)
    -     *	@param      int				$fk_product      	Id of product
    -     *	@param      float			$remise_percent  	Pourcentage de remise de la ligne
    -     *	@param      int				$info_bits			Bits de type de lignes
    -     *	@param      int				$fk_remise_except	Id remise
    -     *	@param      string			$price_base_type	HT or TTC
    -     *	@param      float			$pu_ttc    		    Prix unitaire TTC
    -     *	@param      int				$date_start       	Start date of the line - Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    -     *	@param      int				$date_end         	End date of the line - Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    -     *	@param      int				$type				Type of line (0=product, 1=service). Not used if fk_product is defined, the type of product is used.
    -     *	@param      int				$rang             	Position of line
    -     *	@param		int				$special_code		Special code (also used by externals modules!)
    -     *	@param		int				$fk_parent_line		Parent line
    -     *  @param		int				$fk_fournprice		Id supplier price
    -     *  @param		int				$pa_ht				Buying price (without tax)
    -     *  @param		string			$label				Label
    +	/**
    +	 *	Add an order line into database (linked to product/service or not)
    +	 *
    +	 *	@param      string			$desc            	Description of line
    +	 *	@param      float			$pu_ht    	        Unit price (without tax)
    +	 *	@param      float			$qty             	Quantite
    +	 * 	@param    	float			$txtva           	Force Vat rate, -1 for auto (Can contain the vat_src_code too with syntax '9.9 (CODE)')
    +	 * 	@param		float			$txlocaltax1		Local tax 1 rate (deprecated, use instead txtva with code inside)
    +	 * 	@param		float			$txlocaltax2		Local tax 2 rate (deprecated, use instead txtva with code inside)
    +	 *	@param      int				$fk_product      	Id of product
    +	 *	@param      float			$remise_percent  	Pourcentage de remise de la ligne
    +	 *	@param      int				$info_bits			Bits de type de lignes
    +	 *	@param      int				$fk_remise_except	Id remise
    +	 *	@param      string			$price_base_type	HT or TTC
    +	 *	@param      float			$pu_ttc    		    Prix unitaire TTC
    +	 *	@param      int				$date_start       	Start date of the line - Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    +	 *	@param      int				$date_end         	End date of the line - Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    +	 *	@param      int				$type				Type of line (0=product, 1=service). Not used if fk_product is defined, the type of product is used.
    +	 *	@param      int				$rang             	Position of line
    +	 *	@param		int				$special_code		Special code (also used by externals modules!)
    +	 *	@param		int				$fk_parent_line		Parent line
    +	 *  @param		int				$fk_fournprice		Id supplier price
    +	 *  @param		int				$pa_ht				Buying price (without tax)
    +	 *  @param		string			$label				Label
     	 *  @param		array			$array_options		extrafields array. Example array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...)
    -     * 	@param 		string			$fk_unit 			Code of the unit to use. Null to use the default one
    -     * 	@param		string		    $origin				'order', ...
    -     *  @param		int			    $origin_id			Id of origin object
    +	 * 	@param 		string			$fk_unit 			Code of the unit to use. Null to use the default one
    +	 * 	@param		string		    $origin				'order', ...
    +	 *  @param		int			    $origin_id			Id of origin object
     	 * 	@param		double			$pu_ht_devise		Unit price in currency
    -     *	@return     int             					>0 if OK, <0 if KO
    -     *
    -     *	@see        add_product
    -     *
    -     *	Les parametres sont deja cense etre juste et avec valeurs finales a l'appel
    -     *	de cette methode. Aussi, pour le taux tva, il doit deja avoir ete defini
    -     *	par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,produit)
    -     *	et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue)
    -     */
    +	 *	@return     int             					>0 if OK, <0 if KO
    +	 *
    +	 *	@see        add_product
    +	 *
    +	 *	Les parametres sont deja cense etre juste et avec valeurs finales a l'appel
    +	 *	de cette methode. Aussi, pour le taux tva, il doit deja avoir ete defini
    +	 *	par l'appelant par la methode get_default_tva(societe_vendeuse,societe_acheteuse,produit)
    +	 *	et le desc doit deja avoir la bonne valeur (a l'appelant de gerer le multilangue)
    +	 */
     	function addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1=0, $txlocaltax2=0, $fk_product=0, $remise_percent=0, $info_bits=0, $fk_remise_except=0, $price_base_type='HT', $pu_ttc=0, $date_start='', $date_end='', $type=0, $rang=-1, $special_code=0, $fk_parent_line=0, $fk_fournprice=null, $pa_ht=0, $label='',$array_options=0, $fk_unit=null, $origin='', $origin_id=0, $pu_ht_devise = 0)
    -    {
    -    	global $mysoc, $conf, $langs, $user;
    +	{
    +		global $mysoc, $conf, $langs, $user;
     
     		$logtext = "::addline commandeid=$this->id, desc=$desc, pu_ht=$pu_ht, qty=$qty, txtva=$txtva, fk_product=$fk_product, remise_percent=$remise_percent";
     		$logtext.= ", info_bits=$info_bits, fk_remise_except=$fk_remise_except, price_base_type=$price_base_type, pu_ttc=$pu_ttc, date_start=$date_start";
     		$logtext.= ", date_end=$date_end, type=$type special_code=$special_code, fk_unit=$fk_unit, origin=$origin, origin_id=$origin_id, pu_ht_devise=$pu_ht_devise";
    -        dol_syslog(get_class($this).$logtext, LOG_DEBUG);
    +		dol_syslog(get_class($this).$logtext, LOG_DEBUG);
     
    -        include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
    +		include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
     
    -        // Clean parameters
    -        if (empty($remise_percent)) $remise_percent=0;
    -        if (empty($qty)) $qty=0;
    -        if (empty($info_bits)) $info_bits=0;
    -        if (empty($rang)) $rang=0;
    -        if (empty($txtva)) $txtva=0;
    -        if (empty($txlocaltax1)) $txlocaltax1=0;
    -        if (empty($txlocaltax2)) $txlocaltax2=0;
    -        if (empty($fk_parent_line) || $fk_parent_line < 0) $fk_parent_line=0;
    -        if (empty($this->fk_multicurrency)) $this->fk_multicurrency=0;
    +		// Clean parameters
    +		if (empty($remise_percent)) $remise_percent=0;
    +		if (empty($qty)) $qty=0;
    +		if (empty($info_bits)) $info_bits=0;
    +		if (empty($rang)) $rang=0;
    +		if (empty($txtva)) $txtva=0;
    +		if (empty($txlocaltax1)) $txlocaltax1=0;
    +		if (empty($txlocaltax2)) $txlocaltax2=0;
    +		if (empty($fk_parent_line) || $fk_parent_line < 0) $fk_parent_line=0;
    +		if (empty($this->fk_multicurrency)) $this->fk_multicurrency=0;
     
    -        $remise_percent=price2num($remise_percent);
    -        $qty=price2num($qty);
    -        $pu_ht=price2num($pu_ht);
    -        $pu_ht_devise=price2num($pu_ht_devise);
    -        $pu_ttc=price2num($pu_ttc);
    -    	$pa_ht=price2num($pa_ht);
    -        $txtva = price2num($txtva);
    -        $txlocaltax1 = price2num($txlocaltax1);
    -        $txlocaltax2 = price2num($txlocaltax2);
    -        if ($price_base_type=='HT')
    -        {
    -            $pu=$pu_ht;
    -        }
    -        else
    -        {
    -            $pu=$pu_ttc;
    -        }
    -        $label=trim($label);
    -        $desc=trim($desc);
    +		$remise_percent=price2num($remise_percent);
    +		$qty=price2num($qty);
    +		$pu_ht=price2num($pu_ht);
    +		$pu_ht_devise=price2num($pu_ht_devise);
    +		$pu_ttc=price2num($pu_ttc);
    +		$pa_ht=price2num($pa_ht);
    +		$txtva = price2num($txtva);
    +		$txlocaltax1 = price2num($txlocaltax1);
    +		$txlocaltax2 = price2num($txlocaltax2);
    +		if ($price_base_type=='HT')
    +		{
    +			$pu=$pu_ht;
    +		}
    +		else
    +		{
    +			$pu=$pu_ttc;
    +		}
    +		$label=trim($label);
    +		$desc=trim($desc);
     
    -        // Check parameters
    -        if ($type < 0) return -1;
    +		// Check parameters
    +		if ($type < 0) return -1;
     
    -        if ($this->statut == self::STATUS_DRAFT)
    -        {
    -            $this->db->begin();
    +		if ($this->statut == self::STATUS_DRAFT)
    +		{
    +			$this->db->begin();
     
    -        	$product_type=$type;
    +			$product_type=$type;
     			if (!empty($fk_product))
     			{
     				$product=new Product($this->db);
    @@ -1316,105 +1361,105 @@ class Commande extends CommonOrder
     
     				if (! empty($conf->global->STOCK_MUST_BE_ENOUGH_FOR_ORDER) && $product_type == 0 && $product->stock_reel < $qty)
     				{
    -                    $langs->load("errors");
    -				    $this->error=$langs->trans('ErrorStockIsNotEnoughToAddProductOnOrder', $product->ref);
    +					$langs->load("errors");
    +					$this->error=$langs->trans('ErrorStockIsNotEnoughToAddProductOnOrder', $product->ref);
     					dol_syslog(get_class($this)."::addline error=Product ".$product->ref.": ".$this->error, LOG_ERR);
     					$this->db->rollback();
     					return self::STOCK_NOT_ENOUGH_FOR_ORDER;
     				}
     			}
     			// Calcul du total TTC et de la TVA pour la ligne a partir de
    -            // qty, pu, remise_percent et txtva
    -            // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
    -            // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
    +			// qty, pu, remise_percent et txtva
    +			// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
    +			// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
     
    -            $localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
    +			$localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc);
     
    -       		// Clean vat code
    -    		$vat_src_code='';
    -    		if (preg_match('/\((.*)\)/', $txtva, $reg))
    -    		{
    -    		    $vat_src_code = $reg[1];
    -    		    $txtva = preg_replace('/\s*\(.*\)/', '', $txtva);    // Remove code into vatrate.
    -    		}
    +			// Clean vat code
    +			$vat_src_code='';
    +			if (preg_match('/\((.*)\)/', $txtva, $reg))
    +			{
    +				$vat_src_code = $reg[1];
    +				$txtva = preg_replace('/\s*\(.*\)/', '', $txtva);    // Remove code into vatrate.
    +			}
     
    -            $tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $mysoc, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise);
    +			$tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $mysoc, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise);
     
    -            /*var_dump($txlocaltax1);
    -            var_dump($txlocaltax2);
    -            var_dump($localtaxes_type);
    -            var_dump($tabprice);
    -            var_dump($tabprice[9]);
    -            var_dump($tabprice[10]);
    -            exit;*/
    +			/*var_dump($txlocaltax1);
    +			 var_dump($txlocaltax2);
    +			 var_dump($localtaxes_type);
    +			 var_dump($tabprice);
    +			 var_dump($tabprice[9]);
    +			 var_dump($tabprice[10]);
    +			 exit;*/
     
    -            $total_ht  = $tabprice[0];
    -            $total_tva = $tabprice[1];
    -            $total_ttc = $tabprice[2];
    -            $total_localtax1 = $tabprice[9];
    -            $total_localtax2 = $tabprice[10];
    +			$total_ht  = $tabprice[0];
    +			$total_tva = $tabprice[1];
    +			$total_ttc = $tabprice[2];
    +			$total_localtax1 = $tabprice[9];
    +			$total_localtax2 = $tabprice[10];
     			$pu_ht = $tabprice[3];
     
     			// MultiCurrency
     			$multicurrency_total_ht  = $tabprice[16];
    -            $multicurrency_total_tva = $tabprice[17];
    -            $multicurrency_total_ttc = $tabprice[18];
    +			$multicurrency_total_tva = $tabprice[17];
    +			$multicurrency_total_ttc = $tabprice[18];
     			$pu_ht_devise = $tabprice[19];
     
    -            // Rang to use
    -            $rangtouse = $rang;
    -            if ($rangtouse == -1)
    -            {
    -                $rangmax = $this->line_max($fk_parent_line);
    -                $rangtouse = $rangmax + 1;
    -            }
    +			// Rang to use
    +			$rangtouse = $rang;
    +			if ($rangtouse == -1)
    +			{
    +				$rangmax = $this->line_max($fk_parent_line);
    +				$rangtouse = $rangmax + 1;
    +			}
     
    -            // TODO A virer
    -            // Anciens indicateurs: $price, $remise (a ne plus utiliser)
    -            $price = $pu;
    -            $remise = 0;
    -            if ($remise_percent > 0)
    -            {
    -                $remise = round(($pu * $remise_percent / 100), 2);
    -                $price = $pu - $remise;
    -            }
    +			// TODO A virer
    +			// Anciens indicateurs: $price, $remise (a ne plus utiliser)
    +			$price = $pu;
    +			$remise = 0;
    +			if ($remise_percent > 0)
    +			{
    +				$remise = round(($pu * $remise_percent / 100), 2);
    +				$price = $pu - $remise;
    +			}
     
    -            // Insert line
    -            $this->line=new OrderLine($this->db);
    +			// Insert line
    +			$this->line=new OrderLine($this->db);
     
    -            $this->line->context = $this->context;
    +			$this->line->context = $this->context;
     
    -            $this->line->fk_commande=$this->id;
    -            $this->line->label=$label;
    -            $this->line->desc=$desc;
    -            $this->line->qty=$qty;
    +			$this->line->fk_commande=$this->id;
    +			$this->line->label=$label;
    +			$this->line->desc=$desc;
    +			$this->line->qty=$qty;
     
    -            $this->line->vat_src_code=$vat_src_code;
    -            $this->line->tva_tx=$txtva;
    -            $this->line->localtax1_tx=($total_localtax1?$localtaxes_type[1]:0);
    -            $this->line->localtax2_tx=($total_localtax2?$localtaxes_type[3]:0);
    -            $this->line->localtax1_type=$localtaxes_type[0];
    -            $this->line->localtax2_type=$localtaxes_type[2];
    -            $this->line->fk_product=$fk_product;
    +			$this->line->vat_src_code=$vat_src_code;
    +			$this->line->tva_tx=$txtva;
    +			$this->line->localtax1_tx=($total_localtax1?$localtaxes_type[1]:0);
    +			$this->line->localtax2_tx=($total_localtax2?$localtaxes_type[3]:0);
    +			$this->line->localtax1_type=$localtaxes_type[0];
    +			$this->line->localtax2_type=$localtaxes_type[2];
    +			$this->line->fk_product=$fk_product;
     			$this->line->product_type=$product_type;
    -            $this->line->fk_remise_except=$fk_remise_except;
    -            $this->line->remise_percent=$remise_percent;
    -            $this->line->subprice=$pu_ht;
    -            $this->line->rang=$rangtouse;
    -            $this->line->info_bits=$info_bits;
    -            $this->line->total_ht=$total_ht;
    -            $this->line->total_tva=$total_tva;
    -            $this->line->total_localtax1=$total_localtax1;
    -            $this->line->total_localtax2=$total_localtax2;
    -            $this->line->total_ttc=$total_ttc;
    -            $this->line->special_code=$special_code;
    -            $this->line->origin=$origin;
    -            $this->line->origin_id=$origin_id;
    -            $this->line->fk_parent_line=$fk_parent_line;
    -	        $this->line->fk_unit=$fk_unit;
    +			$this->line->fk_remise_except=$fk_remise_except;
    +			$this->line->remise_percent=$remise_percent;
    +			$this->line->subprice=$pu_ht;
    +			$this->line->rang=$rangtouse;
    +			$this->line->info_bits=$info_bits;
    +			$this->line->total_ht=$total_ht;
    +			$this->line->total_tva=$total_tva;
    +			$this->line->total_localtax1=$total_localtax1;
    +			$this->line->total_localtax2=$total_localtax2;
    +			$this->line->total_ttc=$total_ttc;
    +			$this->line->special_code=$special_code;
    +			$this->line->origin=$origin;
    +			$this->line->origin_id=$origin_id;
    +			$this->line->fk_parent_line=$fk_parent_line;
    +			$this->line->fk_unit=$fk_unit;
     
    -            $this->line->date_start=$date_start;
    -            $this->line->date_end=$date_end;
    +			$this->line->date_start=$date_start;
    +			$this->line->date_end=$date_end;
     
     			$this->line->fk_fournprice = $fk_fournprice;
     			$this->line->pa_ht = $pa_ht;
    @@ -1424,187 +1469,190 @@ class Commande extends CommonOrder
     			$this->line->multicurrency_code			= $this->multicurrency_code;
     			$this->line->multicurrency_subprice		= $pu_ht_devise;
     			$this->line->multicurrency_total_ht 	= $multicurrency_total_ht;
    -            $this->line->multicurrency_total_tva 	= $multicurrency_total_tva;
    -            $this->line->multicurrency_total_ttc 	= $multicurrency_total_ttc;
    +			$this->line->multicurrency_total_tva 	= $multicurrency_total_tva;
    +			$this->line->multicurrency_total_ttc 	= $multicurrency_total_ttc;
     
    -            // TODO Ne plus utiliser
    -            $this->line->price=$price;
    -            $this->line->remise=$remise;
    +			// TODO Ne plus utiliser
    +			$this->line->price=$price;
    +			$this->line->remise=$remise;
     
     			if (is_array($array_options) && count($array_options)>0) {
     				$this->line->array_options=$array_options;
     			}
     
    -            $result=$this->line->insert($user);
    -            if ($result > 0)
    -            {
    -                // Reorder if child line
    -                if (! empty($fk_parent_line)) $this->line_order(true,'DESC');
    +			$result=$this->line->insert($user);
    +			if ($result > 0)
    +			{
    +				// Reorder if child line
    +				if (! empty($fk_parent_line)) $this->line_order(true,'DESC');
     
    -                // Mise a jour informations denormalisees au niveau de la commande meme
    -                $result=$this->update_price(1,'auto',0,$mysoc);	// This method is designed to add line from user input so total calculation must be done using 'auto' mode.
    -                if ($result > 0)
    -                {
    -                    $this->db->commit();
    -                    return $this->line->rowid;
    -                }
    -                else
    -                {
    -                    $this->db->rollback();
    -                    return -1;
    -                }
    -            }
    -            else
    -            {
    -                $this->error=$this->line->error;
    -                dol_syslog(get_class($this)."::addline error=".$this->error, LOG_ERR);
    -                $this->db->rollback();
    -                return -2;
    -            }
    -        }
    +				// Mise a jour informations denormalisees au niveau de la commande meme
    +				$result=$this->update_price(1,'auto',0,$mysoc);	// This method is designed to add line from user input so total calculation must be done using 'auto' mode.
    +				if ($result > 0)
    +				{
    +					$this->db->commit();
    +					return $this->line->rowid;
    +				}
    +				else
    +				{
    +					$this->db->rollback();
    +					return -1;
    +				}
    +			}
    +			else
    +			{
    +				$this->error=$this->line->error;
    +				dol_syslog(get_class($this)."::addline error=".$this->error, LOG_ERR);
    +				$this->db->rollback();
    +				return -2;
    +			}
    +		}
     		else
     		{
    -            dol_syslog(get_class($this)."::addline status of order must be Draft to allow use of ->addline()", LOG_ERR);
    +			dol_syslog(get_class($this)."::addline status of order must be Draft to allow use of ->addline()", LOG_ERR);
     			return -3;
    -        }
    -    }
    +		}
    +	}
     
     
    -    /**
    -     *	Add line into array
    -     *	$this->client must be loaded
    -     *
    -     *	@param		int				$idproduct			Product Id
    -     *	@param		float			$qty				Quantity
    -     *	@param		float			$remise_percent		Product discount relative
    -     * 	@param    	int		$date_start         Start date of the line - Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    -     * 	@param    	int		$date_end           End date of the line - Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    -     * 	@return    	void
    -     *
    -     *	TODO	Remplacer les appels a cette fonction par generation objet Ligne
    -     *			insere dans tableau $this->products
    -     */
    -    function add_product($idproduct, $qty, $remise_percent=0.0, $date_start='', $date_end='')
    -    {
    -        global $conf, $mysoc;
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Add line into array
    +	 *	$this->client must be loaded
    +	 *
    +	 *	@param		int				$idproduct			Product Id
    +	 *	@param		float			$qty				Quantity
    +	 *	@param		float			$remise_percent		Product discount relative
    +	 * 	@param    	int		$date_start         Start date of the line - Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    +	 * 	@param    	int		$date_end           End date of the line - Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    +	 * 	@return    	void
    +	 *
    +	 *	TODO	Remplacer les appels a cette fonction par generation objet Ligne
    +	 *			insere dans tableau $this->products
    +	 */
    +	function add_product($idproduct, $qty, $remise_percent=0.0, $date_start='', $date_end='')
    +	{
    +        // phpcs:enable
    +		global $conf, $mysoc;
     
    -        if (! $qty) $qty = 1;
    +		if (! $qty) $qty = 1;
     
    -        if ($idproduct > 0)
    -        {
    -            $prod=new Product($this->db);
    -            $prod->fetch($idproduct);
    +		if ($idproduct > 0)
    +		{
    +			$prod=new Product($this->db);
    +			$prod->fetch($idproduct);
     
    -            $tva_tx = get_default_tva($mysoc,$this->thirdparty,$prod->id);
    -            $tva_npr = get_default_npr($mysoc,$this->thirdparty,$prod->id);
    -            if (empty($tva_tx)) $tva_npr=0;
    -            $vat_src_code = '';     // May be defined into tva_tx
    +			$tva_tx = get_default_tva($mysoc,$this->thirdparty,$prod->id);
    +			$tva_npr = get_default_npr($mysoc,$this->thirdparty,$prod->id);
    +			if (empty($tva_tx)) $tva_npr=0;
    +			$vat_src_code = '';     // May be defined into tva_tx
     
    -            $localtax1_tx=get_localtax($tva_tx,1,$this->thirdparty,$mysoc,$tva_npr);
    -            $localtax2_tx=get_localtax($tva_tx,2,$this->thirdparty,$mysoc,$tva_npr);
    +			$localtax1_tx=get_localtax($tva_tx,1,$this->thirdparty,$mysoc,$tva_npr);
    +			$localtax2_tx=get_localtax($tva_tx,2,$this->thirdparty,$mysoc,$tva_npr);
     
    -            // multiprix
    -            if($conf->global->PRODUIT_MULTIPRICES && $this->thirdparty->price_level)
    -            $price = $prod->multiprices[$this->thirdparty->price_level];
    -            else
    -            $price = $prod->price;
    +			// multiprix
    +			if($conf->global->PRODUIT_MULTIPRICES && $this->thirdparty->price_level) {
    +				$price = $prod->multiprices[$this->thirdparty->price_level];
    +			} else {
    +				$price = $prod->price;
    +			}
     
    -            $line=new OrderLine($this->db);
    +			$line=new OrderLine($this->db);
     
    -            $line->context = $this->context;
    +			$line->context = $this->context;
     
    -            $line->fk_product=$idproduct;
    -            $line->desc=$prod->description;
    -            $line->qty=$qty;
    -            $line->subprice=$price;
    -            $line->remise_percent=$remise_percent;
    -            $line->vat_src_code=$vat_src_code;
    -            $line->tva_tx=$tva_tx;
    -            $line->localtax1_tx=$localtax1_tx;
    -            $line->localtax2_tx=$localtax2_tx;
    -            $line->ref=$prod->ref;
    -            $line->libelle=$prod->label;
    -            $line->product_desc=$prod->description;
    -	        $line->fk_unit=$prod->fk_unit;
    +			$line->fk_product=$idproduct;
    +			$line->desc=$prod->description;
    +			$line->qty=$qty;
    +			$line->subprice=$price;
    +			$line->remise_percent=$remise_percent;
    +			$line->vat_src_code=$vat_src_code;
    +			$line->tva_tx=$tva_tx;
    +			$line->localtax1_tx=$localtax1_tx;
    +			$line->localtax2_tx=$localtax2_tx;
    +			$line->ref=$prod->ref;
    +			$line->libelle=$prod->label;
    +			$line->product_desc=$prod->description;
    +			$line->fk_unit=$prod->fk_unit;
     
    -            // Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    -            // Save the start and end date of the line in the object
    -            if ($date_start) { $line->date_start = $date_start; }
    -            if ($date_end)   { $line->date_end = $date_end; }
    +			// Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    +			// Save the start and end date of the line in the object
    +			if ($date_start) { $line->date_start = $date_start; }
    +			if ($date_end)   { $line->date_end = $date_end; }
     
    -            $this->lines[] = $line;
    +			$this->lines[] = $line;
     
    -            /** POUR AJOUTER AUTOMATIQUEMENT LES SOUSPRODUITS a LA COMMANDE
    -             if (! empty($conf->global->PRODUIT_SOUSPRODUITS))
    -             {
    -             $prod = new Product($this->db);
    -             $prod->fetch($idproduct);
    -             $prod -> get_sousproduits_arbo();
    -             $prods_arbo = $prod->get_arbo_each_prod();
    -             if(count($prods_arbo) > 0)
    -             {
    -             foreach($prods_arbo as $key => $value)
    -             {
    -             // print "id : ".$value[1].' :qty: '.$value[0].'<br>';
    -             if(! in_array($value[1],$this->products))
    -             $this->add_product($value[1], $value[0]);
    +			/** POUR AJOUTER AUTOMATIQUEMENT LES SOUSPRODUITS a LA COMMANDE
    +			 if (! empty($conf->global->PRODUIT_SOUSPRODUITS))
    +			 {
    +			 $prod = new Product($this->db);
    +			 $prod->fetch($idproduct);
    +			 $prod -> get_sousproduits_arbo();
    +			 $prods_arbo = $prod->get_arbo_each_prod();
    +			 if(count($prods_arbo) > 0)
    +			 {
    +			 foreach($prods_arbo as $key => $value)
    +			 {
    +			 // print "id : ".$value[1].' :qty: '.$value[0].'<br>';
    +			 if(! in_array($value[1],$this->products))
    +			 $this->add_product($value[1], $value[0]);
     
    -             }
    -             }
    +			 }
    +			 }
     
    -             }
    -             **/
    -        }
    -    }
    +			 }
    +			 **/
    +		}
    +	}
     
     
    -    /**
    -     *	Get object and lines from database
    -     *
    -     *	@param      int			$id       		Id of object to load
    -     * 	@param		string		$ref			Ref of object
    -     * 	@param		string		$ref_ext		External reference of object
    -     * 	@param		string		$ref_int		Internal reference of other object
    -     *	@return     int         				>0 if OK, <0 if KO, 0 if not found
    -     */
    -    function fetch($id, $ref='', $ref_ext='', $ref_int='')
    -    {
    +	/**
    +	 *	Get object and lines from database
    +	 *
    +	 *	@param      int			$id       		Id of object to load
    +	 * 	@param		string		$ref			Ref of object
    +	 * 	@param		string		$ref_ext		External reference of object
    +	 * 	@param		string		$ref_int		Internal reference of other object
    +	 *	@return     int         				>0 if OK, <0 if KO, 0 if not found
    +	 */
    +	function fetch($id, $ref='', $ref_ext='', $ref_int='')
    +	{
     
    -        // Check parameters
    -        if (empty($id) && empty($ref) && empty($ref_ext) && empty($ref_int)) return -1;
    +		// Check parameters
    +		if (empty($id) && empty($ref) && empty($ref_ext) && empty($ref_int)) return -1;
     
    -        $sql = 'SELECT c.rowid, c.entity, c.date_creation, c.ref, c.fk_soc, c.fk_user_author, c.fk_user_valid, c.fk_statut';
    -        $sql.= ', c.amount_ht, c.total_ht, c.total_ttc, c.tva as total_tva, c.localtax1 as total_localtax1, c.localtax2 as total_localtax2, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_availability, c.fk_input_reason';
    -        $sql.= ', c.fk_account';
    -        $sql.= ', c.date_commande';
    -        $sql.= ', c.date_livraison';
    -        $sql.= ', c.fk_shipping_method';
    -        $sql.= ', c.fk_warehouse';
    -        $sql.= ', c.fk_projet, c.remise_percent, c.remise, c.remise_absolue, c.source, c.facture as billed';
    -        $sql.= ', c.note_private, c.note_public, c.ref_client, c.ref_ext, c.ref_int, c.model_pdf, c.last_main_doc, c.fk_delivery_address, c.extraparams';
    -        $sql.= ', c.fk_incoterms, c.location_incoterms';
    +		$sql = 'SELECT c.rowid, c.entity, c.date_creation, c.ref, c.fk_soc, c.fk_user_author, c.fk_user_valid, c.fk_statut';
    +		$sql.= ', c.amount_ht, c.total_ht, c.total_ttc, c.tva as total_tva, c.localtax1 as total_localtax1, c.localtax2 as total_localtax2, c.fk_cond_reglement, c.fk_mode_reglement, c.fk_availability, c.fk_input_reason';
    +		$sql.= ', c.fk_account';
    +		$sql.= ', c.date_commande, c.date_valid, c.tms';
    +		$sql.= ', c.date_livraison';
    +		$sql.= ', c.fk_shipping_method';
    +		$sql.= ', c.fk_warehouse';
    +		$sql.= ', c.fk_projet, c.remise_percent, c.remise, c.remise_absolue, c.source, c.facture as billed';
    +		$sql.= ', c.note_private, c.note_public, c.ref_client, c.ref_ext, c.ref_int, c.model_pdf, c.last_main_doc, c.fk_delivery_address, c.extraparams';
    +		$sql.= ', c.fk_incoterms, c.location_incoterms';
     		$sql.= ", c.fk_multicurrency, c.multicurrency_code, c.multicurrency_tx, c.multicurrency_total_ht, c.multicurrency_total_tva, c.multicurrency_total_ttc";
    -        $sql.= ", i.libelle as libelle_incoterms";
    -        $sql.= ', p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
    -        $sql.= ', cr.code as cond_reglement_code, cr.libelle as cond_reglement_libelle, cr.libelle_facture as cond_reglement_libelle_doc';
    -        $sql.= ', ca.code as availability_code, ca.label as availability_label';
    -        $sql.= ', dr.code as demand_reason_code';
    -        $sql.= ' FROM '.MAIN_DB_PREFIX.'commande as c';
    -        $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as cr ON c.fk_cond_reglement = cr.rowid';
    -        $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as p ON c.fk_mode_reglement = p.id';
    -        $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_availability as ca ON c.fk_availability = ca.rowid';
    -        $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_input_reason as dr ON c.fk_input_reason = ca.rowid';
    +		$sql.= ", i.libelle as libelle_incoterms";
    +		$sql.= ', p.code as mode_reglement_code, p.libelle as mode_reglement_libelle';
    +		$sql.= ', cr.code as cond_reglement_code, cr.libelle as cond_reglement_libelle, cr.libelle_facture as cond_reglement_libelle_doc';
    +		$sql.= ', ca.code as availability_code, ca.label as availability_label';
    +		$sql.= ', dr.code as demand_reason_code';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'commande as c';
    +		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_payment_term as cr ON c.fk_cond_reglement = cr.rowid';
    +		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_paiement as p ON c.fk_mode_reglement = p.id';
    +		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_availability as ca ON c.fk_availability = ca.rowid';
    +		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_input_reason as dr ON c.fk_input_reason = ca.rowid';
     		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_incoterms as i ON c.fk_incoterms = i.rowid';
     
     		if ($id) $sql.= " WHERE c.rowid=".$id;
     		else $sql.= " WHERE c.entity IN (".getEntity('commande').")"; // Dont't use entity if you use rowid
     
    -        if ($ref)     $sql.= " AND c.ref='".$this->db->escape($ref)."'";
    -        if ($ref_ext) $sql.= " AND c.ref_ext='".$this->db->escape($ref_ext)."'";
    -        if ($ref_int) $sql.= " AND c.ref_int='".$this->db->escape($ref_int)."'";
    +		if ($ref)     $sql.= " AND c.ref='".$this->db->escape($ref)."'";
    +		if ($ref_ext) $sql.= " AND c.ref_ext='".$this->db->escape($ref_ext)."'";
    +		if ($ref_int) $sql.= " AND c.ref_int='".$this->db->escape($ref_int)."'";
     
    -        dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
    -        $result = $this->db->query($sql);
    +		dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
    +		$result = $this->db->query($sql);
     		if ($result)
     		{
     			$obj = $this->db->fetch_object($result);
    @@ -1613,50 +1661,53 @@ class Commande extends CommonOrder
     				$this->id					= $obj->rowid;
     				$this->entity				= $obj->entity;
     
    -                $this->ref					= $obj->ref;
    -                $this->ref_client			= $obj->ref_client;
    -                $this->ref_customer			= $obj->ref_client;
    -                $this->ref_ext				= $obj->ref_ext;
    -                $this->ref_int				= $obj->ref_int;
    -                $this->socid				= $obj->fk_soc;
    -                $this->statut				= $obj->fk_statut;
    -                $this->user_author_id		= $obj->fk_user_author;
    -                $this->user_valid           = $obj->fk_user_valid;
    -                $this->total_ht				= $obj->total_ht;
    -                $this->total_tva			= $obj->total_tva;
    -                $this->total_localtax1		= $obj->total_localtax1;
    -                $this->total_localtax2		= $obj->total_localtax2;
    -                $this->total_ttc			= $obj->total_ttc;
    -                $this->date					= $this->db->jdate($obj->date_commande);
    -                $this->date_commande		= $this->db->jdate($obj->date_commande);
    -                $this->remise				= $obj->remise;
    -                $this->remise_percent		= $obj->remise_percent;
    -                $this->remise_absolue		= $obj->remise_absolue;
    -                $this->source				= $obj->source;
    -                $this->billed				= $obj->billed;
    -                $this->note					= $obj->note_private;	// deprecated
    -                $this->note_private			= $obj->note_private;
    -                $this->note_public			= $obj->note_public;
    -                $this->fk_project			= $obj->fk_projet;
    -                $this->modelpdf				= $obj->model_pdf;
    -                $this->last_main_doc		= $obj->last_main_doc;
    -                $this->mode_reglement_id	= $obj->fk_mode_reglement;
    -                $this->mode_reglement_code	= $obj->mode_reglement_code;
    -                $this->mode_reglement		= $obj->mode_reglement_libelle;
    -                $this->cond_reglement_id	= $obj->fk_cond_reglement;
    -                $this->cond_reglement_code	= $obj->cond_reglement_code;
    -                $this->cond_reglement		= $obj->cond_reglement_libelle;
    -                $this->cond_reglement_doc	= $obj->cond_reglement_libelle_doc;
    -                $this->fk_account           = $obj->fk_account;
    -                $this->availability_id		= $obj->fk_availability;
    -                $this->availability_code	= $obj->availability_code;
    -                $this->availability	    	= $obj->availability_label;
    -                $this->demand_reason_id		= $obj->fk_input_reason;
    -                $this->demand_reason_code	= $obj->demand_reason_code;
    -                $this->date_livraison		= $this->db->jdate($obj->date_livraison);
    -                $this->shipping_method_id   = ($obj->fk_shipping_method>0)?$obj->fk_shipping_method:null;
    -                $this->warehouse_id           = ($obj->fk_warehouse>0)?$obj->fk_warehouse:null;
    -                $this->fk_delivery_address	= $obj->fk_delivery_address;
    +				$this->ref					= $obj->ref;
    +				$this->ref_client			= $obj->ref_client;
    +				$this->ref_customer			= $obj->ref_client;
    +				$this->ref_ext				= $obj->ref_ext;
    +				$this->ref_int				= $obj->ref_int;
    +				$this->socid				= $obj->fk_soc;
    +				$this->statut				= $obj->fk_statut;
    +				$this->user_author_id		= $obj->fk_user_author;
    +				$this->user_valid           = $obj->fk_user_valid;
    +				$this->total_ht				= $obj->total_ht;
    +				$this->total_tva			= $obj->total_tva;
    +				$this->total_localtax1		= $obj->total_localtax1;
    +				$this->total_localtax2		= $obj->total_localtax2;
    +				$this->total_ttc			= $obj->total_ttc;
    +				$this->date					= $this->db->jdate($obj->date_commande);
    +				$this->date_commande		= $this->db->jdate($obj->date_commande);
    +				$this->date_creation		= $this->db->jdate($obj->date_creation);
    +				$this->date_validation		= $this->db->jdate($obj->date_valid);
    +				$this->date_modification		= $this->db->jdate($obj->tms);
    +				$this->remise				= $obj->remise;
    +				$this->remise_percent		= $obj->remise_percent;
    +				$this->remise_absolue		= $obj->remise_absolue;
    +				$this->source				= $obj->source;
    +				$this->billed				= $obj->billed;
    +				$this->note					= $obj->note_private;	// deprecated
    +				$this->note_private			= $obj->note_private;
    +				$this->note_public			= $obj->note_public;
    +				$this->fk_project			= $obj->fk_projet;
    +				$this->modelpdf				= $obj->model_pdf;
    +				$this->last_main_doc		= $obj->last_main_doc;
    +				$this->mode_reglement_id	= $obj->fk_mode_reglement;
    +				$this->mode_reglement_code	= $obj->mode_reglement_code;
    +				$this->mode_reglement		= $obj->mode_reglement_libelle;
    +				$this->cond_reglement_id	= $obj->fk_cond_reglement;
    +				$this->cond_reglement_code	= $obj->cond_reglement_code;
    +				$this->cond_reglement		= $obj->cond_reglement_libelle;
    +				$this->cond_reglement_doc	= $obj->cond_reglement_libelle_doc;
    +				$this->fk_account           = $obj->fk_account;
    +				$this->availability_id		= $obj->fk_availability;
    +				$this->availability_code	= $obj->availability_code;
    +				$this->availability	    	= $obj->availability_label;
    +				$this->demand_reason_id		= $obj->fk_input_reason;
    +				$this->demand_reason_code	= $obj->demand_reason_code;
    +				$this->date_livraison		= $this->db->jdate($obj->date_livraison);
    +				$this->shipping_method_id   = ($obj->fk_shipping_method>0)?$obj->fk_shipping_method:null;
    +				$this->warehouse_id           = ($obj->fk_warehouse>0)?$obj->fk_warehouse:null;
    +				$this->fk_delivery_address	= $obj->fk_delivery_address;
     
     				//Incoterms
     				$this->fk_incoterms = $obj->fk_incoterms;
    @@ -1671,207 +1722,211 @@ class Commande extends CommonOrder
     				$this->multicurrency_total_tva 	= $obj->multicurrency_total_tva;
     				$this->multicurrency_total_ttc 	= $obj->multicurrency_total_ttc;
     
    -                $this->extraparams			= (array) json_decode($obj->extraparams, true);
    +				$this->extraparams			= (array) json_decode($obj->extraparams, true);
     
    -                $this->lines				= array();
    +				$this->lines				= array();
     
    -                if ($this->statut == self::STATUS_DRAFT) $this->brouillon = 1;
    +				if ($this->statut == self::STATUS_DRAFT) $this->brouillon = 1;
     
    -                // Retreive all extrafield
    -                // fetch optionals attributes and labels
    -                $this->fetch_optionals();
    +				// Retreive all extrafield
    +				// fetch optionals attributes and labels
    +				$this->fetch_optionals();
     
    -                $this->db->free($result);
    +				$this->db->free($result);
     
    -                /*
    -                 * Lines
    -                 */
    -                $result=$this->fetch_lines();
    -                if ($result < 0)
    -                {
    -                    return -3;
    -                }
    -                return 1;
    -            }
    -            else
    -            {
    -                $this->error='Order with id '.$id.' not found sql='.$sql;
    -                return 0;
    -            }
    -        }
    -        else
    -        {
    -            $this->error=$this->db->error();
    -            return -1;
    -        }
    -    }
    +				/*
    +				 * Lines
    +				 */
    +				$result=$this->fetch_lines();
    +				if ($result < 0)
    +				{
    +					return -3;
    +				}
    +				return 1;
    +			}
    +			else
    +			{
    +				$this->error='Order with id '.$id.' not found sql='.$sql;
    +				return 0;
    +			}
    +		}
    +		else
    +		{
    +			$this->error=$this->db->error();
    +			return -1;
    +		}
    +	}
     
     
    -    /**
    -     *	Adding line of fixed discount in the order in DB
    -     *
    -     *	@param     int	$idremise			Id de la remise fixe
    -     *	@return    int          			>0 si ok, <0 si ko
    -     */
    -    function insert_discount($idremise)
    -    {
    -        global $langs;
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Adding line of fixed discount in the order in DB
    +	 *
    +	 *	@param     int	$idremise			Id de la remise fixe
    +	 *	@return    int          			>0 si ok, <0 si ko
    +	 */
    +	function insert_discount($idremise)
    +	{
    +        // phpcs:enable
    +		global $langs;
     
    -        include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
    -        include_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
    +		include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
    +		include_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
     
    -        $this->db->begin();
    +		$this->db->begin();
     
    -        $remise=new DiscountAbsolute($this->db);
    -        $result=$remise->fetch($idremise);
    +		$remise=new DiscountAbsolute($this->db);
    +		$result=$remise->fetch($idremise);
     
    -        if ($result > 0)
    -        {
    -            if ($remise->fk_facture)	// Protection against multiple submission
    -            {
    -                $this->error=$langs->trans("ErrorDiscountAlreadyUsed");
    -                $this->db->rollback();
    -                return -5;
    -            }
    +		if ($result > 0)
    +		{
    +			if ($remise->fk_facture)	// Protection against multiple submission
    +			{
    +				$this->error=$langs->trans("ErrorDiscountAlreadyUsed");
    +				$this->db->rollback();
    +				return -5;
    +			}
     
    -            $line = new OrderLine($this->db);
    +			$line = new OrderLine($this->db);
     
    -            $line->fk_commande=$this->id;
    -            $line->fk_remise_except=$remise->id;
    -            $line->desc=$remise->description;   	// Description ligne
    -            $line->vat_src_code=$remise->vat_src_code;
    -            $line->tva_tx=$remise->tva_tx;
    -            $line->subprice=-$remise->amount_ht;
    -            $line->price=-$remise->amount_ht;
    -            $line->fk_product=0;					// Id produit predefini
    -            $line->qty=1;
    -            $line->remise=0;
    -            $line->remise_percent=0;
    -            $line->rang=-1;
    -            $line->info_bits=2;
    +			$line->fk_commande=$this->id;
    +			$line->fk_remise_except=$remise->id;
    +			$line->desc=$remise->description;   	// Description ligne
    +			$line->vat_src_code=$remise->vat_src_code;
    +			$line->tva_tx=$remise->tva_tx;
    +			$line->subprice=-$remise->amount_ht;
    +			$line->price=-$remise->amount_ht;
    +			$line->fk_product=0;					// Id produit predefini
    +			$line->qty=1;
    +			$line->remise=0;
    +			$line->remise_percent=0;
    +			$line->rang=-1;
    +			$line->info_bits=2;
     
    -            $line->total_ht  = -$remise->amount_ht;
    -            $line->total_tva = -$remise->amount_tva;
    -            $line->total_ttc = -$remise->amount_ttc;
    +			$line->total_ht  = -$remise->amount_ht;
    +			$line->total_tva = -$remise->amount_tva;
    +			$line->total_ttc = -$remise->amount_ttc;
     
    -            $result=$line->insert();
    -            if ($result > 0)
    -            {
    -                $result=$this->update_price(1);
    -                if ($result > 0)
    -                {
    -                    $this->db->commit();
    -                    return 1;
    -                }
    -                else
    -                {
    -                    $this->db->rollback();
    -                    return -1;
    -                }
    -            }
    -            else
    -            {
    -                $this->error=$line->error;
    -                $this->db->rollback();
    -                return -2;
    -            }
    -        }
    -        else
    -        {
    -            $this->db->rollback();
    -            return -2;
    -        }
    -    }
    +			$result=$line->insert();
    +			if ($result > 0)
    +			{
    +				$result=$this->update_price(1);
    +				if ($result > 0)
    +				{
    +					$this->db->commit();
    +					return 1;
    +				}
    +				else
    +				{
    +					$this->db->rollback();
    +					return -1;
    +				}
    +			}
    +			else
    +			{
    +				$this->error=$line->error;
    +				$this->db->rollback();
    +				return -2;
    +			}
    +		}
    +		else
    +		{
    +			$this->db->rollback();
    +			return -2;
    +		}
    +	}
     
     
    -    /**
    -     *	Load array lines
    -     *
    -     *	@param		int		$only_product	Return only physical products
    -     *	@return		int						<0 if KO, >0 if OK
    -     */
    -    function fetch_lines($only_product=0)
    -    {
    -        $this->lines=array();
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Load array lines
    +	 *
    +	 *	@param		int		$only_product	Return only physical products
    +	 *	@return		int						<0 if KO, >0 if OK
    +	 */
    +	function fetch_lines($only_product=0)
    +	{
    +        // phpcs:enable
    +		$this->lines=array();
     
    -        $sql = 'SELECT l.rowid, l.fk_product, l.fk_parent_line, l.product_type, l.fk_commande, l.label as custom_label, l.description, l.price, l.qty, l.vat_src_code, l.tva_tx,';
    -        $sql.= ' l.localtax1_tx, l.localtax2_tx, l.localtax1_type, l.localtax2_type, l.fk_remise_except, l.remise_percent, l.subprice, l.fk_product_fournisseur_price as fk_fournprice, l.buy_price_ht as pa_ht, l.rang, l.info_bits, l.special_code,';
    -        $sql.= ' l.total_ht, l.total_ttc, l.total_tva, l.total_localtax1, l.total_localtax2, l.date_start, l.date_end,';
    -	    $sql.= ' l.fk_unit,';
    +		$sql = 'SELECT l.rowid, l.fk_product, l.fk_parent_line, l.product_type, l.fk_commande, l.label as custom_label, l.description, l.price, l.qty, l.vat_src_code, l.tva_tx,';
    +		$sql.= ' l.localtax1_tx, l.localtax2_tx, l.localtax1_type, l.localtax2_type, l.fk_remise_except, l.remise_percent, l.subprice, l.fk_product_fournisseur_price as fk_fournprice, l.buy_price_ht as pa_ht, l.rang, l.info_bits, l.special_code,';
    +		$sql.= ' l.total_ht, l.total_ttc, l.total_tva, l.total_localtax1, l.total_localtax2, l.date_start, l.date_end,';
    +		$sql.= ' l.fk_unit,';
     		$sql.= ' l.fk_multicurrency, l.multicurrency_code, l.multicurrency_subprice, l.multicurrency_total_ht, l.multicurrency_total_tva, l.multicurrency_total_ttc,';
    -        $sql.= ' p.ref as product_ref, p.description as product_desc, p.fk_product_type, p.label as product_label, p.tobatch as product_tobatch,';
    -        $sql.= ' p.weight, p.weight_units, p.volume, p.volume_units';
    -        $sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as l';
    -        $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON (p.rowid = l.fk_product)';
    -        $sql.= ' WHERE l.fk_commande = '.$this->id;
    -        if ($only_product) $sql .= ' AND p.fk_product_type = 0';
    -        $sql .= ' ORDER BY l.rang, l.rowid';
    +		$sql.= ' p.ref as product_ref, p.description as product_desc, p.fk_product_type, p.label as product_label, p.tobatch as product_tobatch,';
    +		$sql.= ' p.weight, p.weight_units, p.volume, p.volume_units';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as l';
    +		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON (p.rowid = l.fk_product)';
    +		$sql.= ' WHERE l.fk_commande = '.$this->id;
    +		if ($only_product) $sql .= ' AND p.fk_product_type = 0';
    +		$sql .= ' ORDER BY l.rang, l.rowid';
     
    -        dol_syslog(get_class($this)."::fetch_lines", LOG_DEBUG);
    -        $result = $this->db->query($sql);
    -        if ($result)
    -        {
    -            $num = $this->db->num_rows($result);
    +		dol_syslog(get_class($this)."::fetch_lines", LOG_DEBUG);
    +		$result = $this->db->query($sql);
    +		if ($result)
    +		{
    +			$num = $this->db->num_rows($result);
     
    -            $i = 0;
    -            while ($i < $num)
    -            {
    -                $objp = $this->db->fetch_object($result);
    +			$i = 0;
    +			while ($i < $num)
    +			{
    +				$objp = $this->db->fetch_object($result);
     
    -                $line = new OrderLine($this->db);
    +				$line = new OrderLine($this->db);
     
    -                $line->rowid            = $objp->rowid;
    -                $line->id               = $objp->rowid;
    -                $line->fk_commande      = $objp->fk_commande;
    -                $line->commande_id      = $objp->fk_commande;
    -                $line->label            = $objp->custom_label;
    -                $line->desc             = $objp->description;
    -                $line->description      = $objp->description;		// Description line
    -                $line->product_type     = $objp->product_type;
    -                $line->qty              = $objp->qty;
    +				$line->rowid            = $objp->rowid;
    +				$line->id               = $objp->rowid;
    +				$line->fk_commande      = $objp->fk_commande;
    +				$line->commande_id      = $objp->fk_commande;
    +				$line->label            = $objp->custom_label;
    +				$line->desc             = $objp->description;
    +				$line->description      = $objp->description;		// Description line
    +				$line->product_type     = $objp->product_type;
    +				$line->qty              = $objp->qty;
     
    -                $line->vat_src_code     = $objp->vat_src_code;
    -                $line->tva_tx           = $objp->tva_tx;
    -	            $line->localtax1_tx     = $objp->localtax1_tx;
    -                $line->localtax2_tx     = $objp->localtax2_tx;
    -	            $line->localtax1_type	= $objp->localtax1_type;
    -	            $line->localtax2_type	= $objp->localtax2_type;
    -	            $line->total_ht         = $objp->total_ht;
    -                $line->total_ttc        = $objp->total_ttc;
    -                $line->total_tva        = $objp->total_tva;
    -                $line->total_localtax1  = $objp->total_localtax1;
    -                $line->total_localtax2  = $objp->total_localtax2;
    -                $line->subprice         = $objp->subprice;
    -                $line->fk_remise_except = $objp->fk_remise_except;
    -                $line->remise_percent   = $objp->remise_percent;
    -                $line->price            = $objp->price;
    -                $line->fk_product       = $objp->fk_product;
    +				$line->vat_src_code     = $objp->vat_src_code;
    +				$line->tva_tx           = $objp->tva_tx;
    +				$line->localtax1_tx     = $objp->localtax1_tx;
    +				$line->localtax2_tx     = $objp->localtax2_tx;
    +				$line->localtax1_type	= $objp->localtax1_type;
    +				$line->localtax2_type	= $objp->localtax2_type;
    +				$line->total_ht         = $objp->total_ht;
    +				$line->total_ttc        = $objp->total_ttc;
    +				$line->total_tva        = $objp->total_tva;
    +				$line->total_localtax1  = $objp->total_localtax1;
    +				$line->total_localtax2  = $objp->total_localtax2;
    +				$line->subprice         = $objp->subprice;
    +				$line->fk_remise_except = $objp->fk_remise_except;
    +				$line->remise_percent   = $objp->remise_percent;
    +				$line->price            = $objp->price;
    +				$line->fk_product       = $objp->fk_product;
     				$line->fk_fournprice 	= $objp->fk_fournprice;
    -		      	$marginInfos			= getMarginInfos($objp->subprice, $objp->remise_percent, $objp->tva_tx, $objp->localtax1_tx, $objp->localtax2_tx, $line->fk_fournprice, $objp->pa_ht);
    -		   		$line->pa_ht 			= $marginInfos[0];
    -		    	$line->marge_tx			= $marginInfos[1];
    -		     	$line->marque_tx		= $marginInfos[2];
    -                $line->rang             = $objp->rang;
    -                $line->info_bits        = $objp->info_bits;
    -                $line->special_code		= $objp->special_code;
    -                $line->fk_parent_line	= $objp->fk_parent_line;
    +				$marginInfos			= getMarginInfos($objp->subprice, $objp->remise_percent, $objp->tva_tx, $objp->localtax1_tx, $objp->localtax2_tx, $line->fk_fournprice, $objp->pa_ht);
    +				$line->pa_ht 			= $marginInfos[0];
    +				$line->marge_tx			= $marginInfos[1];
    +				$line->marque_tx		= $marginInfos[2];
    +				$line->rang             = $objp->rang;
    +				$line->info_bits        = $objp->info_bits;
    +				$line->special_code		= $objp->special_code;
    +				$line->fk_parent_line	= $objp->fk_parent_line;
     
    -                $line->ref				= $objp->product_ref;
    -                $line->product_ref		= $objp->product_ref;
    -                $line->libelle			= $objp->product_label;
    -                $line->product_label	= $objp->product_label;
    -                $line->product_desc     = $objp->product_desc;
    -                $line->product_tobatch  = $objp->product_tobatch;
    -                $line->fk_product_type  = $objp->fk_product_type;	// Produit ou service
    -	            $line->fk_unit          = $objp->fk_unit;
    +				$line->ref				= $objp->product_ref;
    +				$line->product_ref		= $objp->product_ref;
    +				$line->libelle			= $objp->product_label;
    +				$line->product_label	= $objp->product_label;
    +				$line->product_desc     = $objp->product_desc;
    +				$line->product_tobatch  = $objp->product_tobatch;
    +				$line->fk_product_type  = $objp->fk_product_type;	// Produit ou service
    +				$line->fk_unit          = $objp->fk_unit;
     
    -	            $line->weight           = $objp->weight;
    -	            $line->weight_units     = $objp->weight_units;
    -	            $line->volume           = $objp->volume;
    -	            $line->volume_units     = $objp->volume_units;
    +				$line->weight           = $objp->weight;
    +				$line->weight_units     = $objp->weight_units;
    +				$line->volume           = $objp->volume;
    +				$line->volume_units     = $objp->volume_units;
     
    -                $line->date_start       = $this->db->jdate($objp->date_start);
    -                $line->date_end         = $this->db->jdate($objp->date_end);
    +				$line->date_start       = $this->db->jdate($objp->date_start);
    +				$line->date_end         = $this->db->jdate($objp->date_end);
     
     				// Multicurrency
     				$line->fk_multicurrency 		= $objp->fk_multicurrency;
    @@ -1881,813 +1936,830 @@ class Commande extends CommonOrder
     				$line->multicurrency_total_tva 	= $objp->multicurrency_total_tva;
     				$line->multicurrency_total_ttc 	= $objp->multicurrency_total_ttc;
     
    -           	$line->fetch_optionals();
    -
    +				$line->fetch_optionals();
     
                     $this->lines[$i] = $line;
     
    -                $i++;
    -            }
    +				$i++;
    +			}
     
    -            $this->db->free($result);
    +			$this->db->free($result);
     
    -            return 1;
    -        }
    -        else
    -        {
    -            $this->error=$this->db->error();
    -            return -3;
    -        }
    -    }
    +			return 1;
    +		}
    +		else
    +		{
    +			$this->error=$this->db->error();
    +			return -3;
    +		}
    +	}
     
     
    -    /**
    -     *	Return number of line with type product.
    -     *
    -     *	@return		int		<0 if KO, Nbr of product lines if OK
    -     */
    -    function getNbOfProductsLines()
    -    {
    -        $nb=0;
    -        foreach($this->lines as $line)
    -        {
    -            if ($line->product_type == 0) $nb++;
    -        }
    -        return $nb;
    -    }
    +	/**
    +	 *	Return number of line with type product.
    +	 *
    +	 *	@return		int		<0 if KO, Nbr of product lines if OK
    +	 */
    +	function getNbOfProductsLines()
    +	{
    +		$nb=0;
    +		foreach($this->lines as $line)
    +		{
    +			if ($line->product_type == 0) $nb++;
    +		}
    +		return $nb;
    +	}
     
    -    /**
    -     *	Return number of line with type service.
    -     *
    -     *	@return		int		<0 if KO, Nbr of service lines if OK
    -     */
    -    function getNbOfServicesLines()
    -    {
    -        $nb=0;
    -        foreach($this->lines as $line)
    -        {
    -            if ($line->product_type == 1) $nb++;
    -        }
    -        return $nb;
    -    }
    +	/**
    +	 *	Return number of line with type service.
    +	 *
    +	 *	@return		int		<0 if KO, Nbr of service lines if OK
    +	 */
    +	function getNbOfServicesLines()
    +	{
    +		$nb=0;
    +		foreach($this->lines as $line)
    +		{
    +			if ($line->product_type == 1) $nb++;
    +		}
    +		return $nb;
    +	}
     
    -    /**
    -     *	Count numbe rof shipments for this order
    -     *
    -     * 	@return     int                			<0 if KO, Nb of shipment found if OK
    -     */
    -    function getNbOfShipments()
    -    {
    -    	$nb = 0;
    +	/**
    +	 *	Count numbe rof shipments for this order
    +	 *
    +	 * 	@return     int                			<0 if KO, Nb of shipment found if OK
    +	 */
    +	function getNbOfShipments()
    +	{
    +		$nb = 0;
     
    -    	$sql = 'SELECT COUNT(DISTINCT ed.fk_expedition) as nb';
    -    	$sql.= ' FROM '.MAIN_DB_PREFIX.'expeditiondet as ed,';
    -    	$sql.= ' '.MAIN_DB_PREFIX.'commandedet as cd';
    -    	$sql.= ' WHERE';
    -    	$sql.= ' ed.fk_origin_line = cd.rowid';
    -    	$sql.= ' AND cd.fk_commande =' .$this->id;
    -    	//print $sql;
    +		$sql = 'SELECT COUNT(DISTINCT ed.fk_expedition) as nb';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'expeditiondet as ed,';
    +		$sql.= ' '.MAIN_DB_PREFIX.'commandedet as cd';
    +		$sql.= ' WHERE';
    +		$sql.= ' ed.fk_origin_line = cd.rowid';
    +		$sql.= ' AND cd.fk_commande =' .$this->id;
    +		//print $sql;
     
    -    	dol_syslog(get_class($this)."::getNbOfShipments", LOG_DEBUG);
    -    	$resql = $this->db->query($sql);
    -    	if ($resql)
    -    	{
    -   			$obj = $this->db->fetch_object($resql);
    -   			if ($obj) $nb = $obj->nb;
    +		dol_syslog(get_class($this)."::getNbOfShipments", LOG_DEBUG);
    +		$resql = $this->db->query($sql);
    +		if ($resql)
    +		{
    +			$obj = $this->db->fetch_object($resql);
    +			if ($obj) $nb = $obj->nb;
     
    -   			$this->db->free($resql);
    -    		return $nb;
    -    	}
    -    	else
    -    	{
    -    		$this->error=$this->db->lasterror();
    -    		return -1;
    -    	}
    -    }
    +			$this->db->free($resql);
    +			return $nb;
    +		}
    +		else
    +		{
    +			$this->error=$this->db->lasterror();
    +			return -1;
    +		}
    +	}
     
    -    /**
    -     *	Load array this->expeditions of lines of shipments with nb of products sent for each order line
    -     *  Note: For a dedicated shipment, the fetch_lines can be used to load the qty_asked and qty_shipped. This function is use to return qty_shipped cumulated for the order
    -     *
    -     *	@param      int		$filtre_statut      Filter on shipment status
    -     * 	@return     int                			<0 if KO, Nb of lines found if OK
    -     */
    -    function loadExpeditions($filtre_statut=-1)
    -    {
    -        $this->expeditions = array();
    +	/**
    +	 *	Load array this->expeditions of lines of shipments with nb of products sent for each order line
    +	 *  Note: For a dedicated shipment, the fetch_lines can be used to load the qty_asked and qty_shipped. This function is use to return qty_shipped cumulated for the order
    +	 *
    +	 *	@param      int		$filtre_statut      Filter on shipment status
    +	 * 	@return     int                			<0 if KO, Nb of lines found if OK
    +	 */
    +	function loadExpeditions($filtre_statut=-1)
    +	{
    +		$this->expeditions = array();
     
    -        $sql = 'SELECT cd.rowid, cd.fk_product,';
    -        $sql.= ' sum(ed.qty) as qty';
    -        $sql.= ' FROM '.MAIN_DB_PREFIX.'expeditiondet as ed,';
    -        if ($filtre_statut >= 0) $sql.= ' '.MAIN_DB_PREFIX.'expedition as e,';
    -        $sql.= ' '.MAIN_DB_PREFIX.'commandedet as cd';
    -        $sql.= ' WHERE';
    -        if ($filtre_statut >= 0) $sql.= ' ed.fk_expedition = e.rowid AND';
    -        $sql.= ' ed.fk_origin_line = cd.rowid';
    -        $sql.= ' AND cd.fk_commande =' .$this->id;
    -        if ($this->fk_product > 0) $sql.= ' AND cd.fk_product = '.$this->fk_product;
    -        if ($filtre_statut >= 0) $sql.=' AND e.fk_statut >= '.$filtre_statut;
    -        $sql.= ' GROUP BY cd.rowid, cd.fk_product';
    -        //print $sql;
    +		$sql = 'SELECT cd.rowid, cd.fk_product,';
    +		$sql.= ' sum(ed.qty) as qty';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'expeditiondet as ed,';
    +		if ($filtre_statut >= 0) $sql.= ' '.MAIN_DB_PREFIX.'expedition as e,';
    +		$sql.= ' '.MAIN_DB_PREFIX.'commandedet as cd';
    +		$sql.= ' WHERE';
    +		if ($filtre_statut >= 0) $sql.= ' ed.fk_expedition = e.rowid AND';
    +		$sql.= ' ed.fk_origin_line = cd.rowid';
    +		$sql.= ' AND cd.fk_commande =' .$this->id;
    +		if ($this->fk_product > 0) $sql.= ' AND cd.fk_product = '.$this->fk_product;
    +		if ($filtre_statut >= 0) $sql.=' AND e.fk_statut >= '.$filtre_statut;
    +		$sql.= ' GROUP BY cd.rowid, cd.fk_product';
    +		//print $sql;
     
    -        dol_syslog(get_class($this)."::loadExpeditions", LOG_DEBUG);
    -        $resql = $this->db->query($sql);
    -        if ($resql)
    -        {
    -            $num = $this->db->num_rows($resql);
    -            $i = 0;
    -            while ($i < $num)
    -            {
    -                $obj = $this->db->fetch_object($resql);
    -                $this->expeditions[$obj->rowid] = $obj->qty;
    -                $i++;
    -            }
    -            $this->db->free($resql);
    -            return $num;
    -        }
    -        else
    -        {
    -            $this->error=$this->db->lasterror();
    -            return -1;
    -        }
    -    }
    +		dol_syslog(get_class($this)."::loadExpeditions", LOG_DEBUG);
    +		$resql = $this->db->query($sql);
    +		if ($resql)
    +		{
    +			$num = $this->db->num_rows($resql);
    +			$i = 0;
    +			while ($i < $num)
    +			{
    +				$obj = $this->db->fetch_object($resql);
    +				$this->expeditions[$obj->rowid] = $obj->qty;
    +				$i++;
    +			}
    +			$this->db->free($resql);
    +			return $num;
    +		}
    +		else
    +		{
    +			$this->error=$this->db->lasterror();
    +			return -1;
    +		}
    +	}
     
    -    /**
    -     * Returns a array with expeditions lines number
    -     *
    -     * @return	int		Nb of shipments
    -     *
    -     * TODO deprecate, move to Shipping class
    -     */
    -    function nb_expedition()
    -    {
    -        $sql = 'SELECT count(*)';
    -        $sql.= ' FROM '.MAIN_DB_PREFIX.'expedition as e';
    -        $sql.= ', '.MAIN_DB_PREFIX.'element_element as el';
    -        $sql.= ' WHERE el.fk_source = '.$this->id;
    -        $sql.= " AND el.fk_target = e.rowid";
    -        $sql.= " AND el.targettype = 'shipping'";
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 * Returns a array with expeditions lines number
    +	 *
    +	 * @return	int		Nb of shipments
    +	 *
    +	 * TODO deprecate, move to Shipping class
    +	 */
    +	function nb_expedition()
    +	{
    +        // phpcs:enable
    +		$sql = 'SELECT count(*)';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'expedition as e';
    +		$sql.= ', '.MAIN_DB_PREFIX.'element_element as el';
    +		$sql.= ' WHERE el.fk_source = '.$this->id;
    +		$sql.= " AND el.fk_target = e.rowid";
    +		$sql.= " AND el.targettype = 'shipping'";
     
    -        $resql = $this->db->query($sql);
    -        if ($resql)
    -        {
    -            $row = $this->db->fetch_row($resql);
    -            return $row[0];
    -        }
    -        else dol_print_error($this->db);
    -    }
    +		$resql = $this->db->query($sql);
    +		if ($resql)
    +		{
    +			$row = $this->db->fetch_row($resql);
    +			return $row[0];
    +		}
    +		else dol_print_error($this->db);
    +	}
     
    -    /**
    -     *	Return a array with the pending stock by product
    -     *
    -     *	@param      int		$filtre_statut      Filtre sur statut
    -     *	@return     int                 		0 si OK, <0 si KO
    -     *
    -     *	TODO		FONCTION NON FINIE A FINIR
    -     */
    -    function stock_array($filtre_statut=self::STATUS_CANCELED)
    -    {
    -        $this->stocks = array();
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Return a array with the pending stock by product
    +	 *
    +	 *	@param      int		$filtre_statut      Filtre sur statut
    +	 *	@return     int                 		0 si OK, <0 si KO
    +	 *
    +	 *	TODO		FONCTION NON FINIE A FINIR
    +	 */
    +	function stock_array($filtre_statut=self::STATUS_CANCELED)
    +	{
    +        // phpcs:enable
    +		$this->stocks = array();
     
    -        // Tableau des id de produit de la commande
    +		// Tableau des id de produit de la commande
     		$array_of_product=array();
     
    -        // Recherche total en stock pour chaque produit
    -        // TODO $array_of_product est défini vide juste au dessus !!
    -        if (count($array_of_product))
    -        {
    -            $sql = "SELECT fk_product, sum(ps.reel) as total";
    -            $sql.= " FROM ".MAIN_DB_PREFIX."product_stock as ps";
    -            $sql.= " WHERE ps.fk_product IN (".join(',',$array_of_product).")";
    -            $sql.= ' GROUP BY fk_product ';
    -            $resql = $this->db->query($sql);
    -            if ($resql)
    -            {
    -                $num = $this->db->num_rows($resql);
    -                $i = 0;
    -                while ($i < $num)
    -                {
    -                    $obj = $this->db->fetch_object($resql);
    -                    $this->stocks[$obj->fk_product] = $obj->total;
    -                    $i++;
    -                }
    -                $this->db->free($resql);
    -            }
    -        }
    -        return 0;
    -    }
    +		// Recherche total en stock pour chaque produit
    +		// TODO $array_of_product est défini vide juste au dessus !!
    +		if (count($array_of_product))
    +		{
    +			$sql = "SELECT fk_product, sum(ps.reel) as total";
    +			$sql.= " FROM ".MAIN_DB_PREFIX."product_stock as ps";
    +			$sql.= " WHERE ps.fk_product IN (".join(',',$array_of_product).")";
    +			$sql.= ' GROUP BY fk_product ';
    +			$resql = $this->db->query($sql);
    +			if ($resql)
    +			{
    +				$num = $this->db->num_rows($resql);
    +				$i = 0;
    +				while ($i < $num)
    +				{
    +					$obj = $this->db->fetch_object($resql);
    +					$this->stocks[$obj->fk_product] = $obj->total;
    +					$i++;
    +				}
    +				$this->db->free($resql);
    +			}
    +		}
    +		return 0;
    +	}
     
    -    /**
    -     *  Delete an order line
    -     *
    -     *	@param      User	$user		User object
    -     *  @param      int		$lineid		Id of line to delete
    -     *  @return     int        		 	>0 if OK, 0 if nothing to do, <0 if KO
    -     */
    -    function deleteline($user=null, $lineid=0)
    -    {
    -        if ($this->statut == self::STATUS_DRAFT)
    -        {
    -            $this->db->begin();
    +	/**
    +	 *  Delete an order line
    +	 *
    +	 *	@param      User	$user		User object
    +	 *  @param      int		$lineid		Id of line to delete
    +	 *  @return     int        		 	>0 if OK, 0 if nothing to do, <0 if KO
    +	 */
    +	function deleteline($user=null, $lineid=0)
    +	{
    +		if ($this->statut == self::STATUS_DRAFT)
    +		{
    +			$this->db->begin();
     
    -            $sql = "SELECT fk_product, qty";
    -            $sql.= " FROM ".MAIN_DB_PREFIX."commandedet";
    -            $sql.= " WHERE rowid = ".$lineid;
    +			$sql = "SELECT fk_product, qty";
    +			$sql.= " FROM ".MAIN_DB_PREFIX."commandedet";
    +			$sql.= " WHERE rowid = ".$lineid;
     
    -            $result = $this->db->query($sql);
    -            if ($result)
    -            {
    -                $obj = $this->db->fetch_object($result);
    +			$result = $this->db->query($sql);
    +			if ($result)
    +			{
    +				$obj = $this->db->fetch_object($result);
     
    -                if ($obj)
    -                {
    -                    $product = new Product($this->db);
    -                    $product->id = $obj->fk_product;
    +				if ($obj)
    +				{
    +					$product = new Product($this->db);
    +					$product->id = $obj->fk_product;
     
    -                    // Delete line
    -                    $line = new OrderLine($this->db);
    +					// Delete line
    +					$line = new OrderLine($this->db);
     
    -                    // For triggers
    -                    $line->fetch($lineid);
    +					// For triggers
    +					$line->fetch($lineid);
     
    -                    if ($line->delete($user) > 0)
    -                    {
    -                        $result=$this->update_price(1);
    -
    -                        if ($result > 0)
    -                        {
    -                            $this->db->commit();
    -                            return 1;
    -                        }
    -                        else
    -                        {
    -                            $this->db->rollback();
    -                            $this->error=$this->db->lasterror();
    -                            return -1;
    -                        }
    -                    }
    -                    else
    -                    {
    -                        $this->db->rollback();
    -                        $this->error=$line->error;
    -                        return -1;
    -                    }
    -                }
    -                else
    -                {
    -                    $this->db->rollback();
    -                    return 0;
    -                }
    -            }
    -            else
    -            {
    -                $this->db->rollback();
    -                $this->error=$this->db->lasterror();
    -                return -1;
    -            }
    -        }
    -        else
    -        {
    -        	$this->error='ErrorDeleteLineNotAllowedByObjectStatus';
    -        	return -1;
    -        }
    -    }
    -
    -    /**
    -     * 	Applique une remise relative
    -     *
    -     * 	@param     	User		$user		User qui positionne la remise
    -     * 	@param     	float		$remise		Discount (percent)
    -     * 	@param     	int			$notrigger	1=Does not execute triggers, 0= execute triggers
    -     *	@return		int 					<0 if KO, >0 if OK
    -     */
    -    function set_remise($user, $remise, $notrigger=0)
    -    {
    -        $remise=trim($remise)?trim($remise):0;
    -
    -        if ($user->rights->commande->creer)
    -        {
    -        	$error=0;
    -
    -        	$this->db->begin();
    -
    -            $remise=price2num($remise);
    -
    -            $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    -            $sql.= ' SET remise_percent = '.$remise;
    -            $sql.= ' WHERE rowid = '.$this->id.' AND fk_statut = '.self::STATUS_DRAFT.' ;';
    -
    -            dol_syslog(__METHOD__, LOG_DEBUG);
    -            $resql=$this->db->query($sql);
    -            if (!$resql)
    -            {
    -            	$this->errors[]=$this->db->error();
    -            	$error++;
    -            }
    -
    -            if (! $error)
    -            {
    -            	$this->oldcopy= clone $this;
    -            	$this->remise_percent = $remise;
    -            	$this->update_price(1);
    -            }
    -
    -            if (! $notrigger && empty($error))
    -            {
    -            	// Call trigger
    -            	$result=$this->call_trigger('ORDER_MODIFY',$user);
    -            	if ($result < 0) $error++;
    -            	// End call triggers
    -            }
    -
    -            if (! $error)
    -            {
    -            	$this->db->commit();
    -            	return 1;
    -            }
    -            else
    -            {
    -            	foreach($this->errors as $errmsg)
    -            	{
    -            		dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    -            		$this->error.=($this->error?', '.$errmsg:$errmsg);
    -            	}
    -            	$this->db->rollback();
    -            	return -1*$error;
    -            }
    -        }
    -    }
    -
    -
    -    /**
    -     * 		Applique une remise absolue
    -     *
    -     * 		@param     	User		$user 		User qui positionne la remise
    -     * 		@param     	float		$remise		Discount
    -     * 		@param     	int			$notrigger	1=Does not execute triggers, 0= execute triggers
    -     *		@return		int 					<0 if KO, >0 if OK
    -     */
    -    function set_remise_absolue($user, $remise, $notrigger=0)
    -    {
    -        $remise=trim($remise)?trim($remise):0;
    -
    -        if ($user->rights->commande->creer)
    -        {
    -        	$error=0;
    -
    -        	$this->db->begin();
    -
    -            $remise=price2num($remise);
    -
    -            $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    -            $sql.= ' SET remise_absolue = '.$remise;
    -            $sql.= ' WHERE rowid = '.$this->id.' AND fk_statut = '.self::STATUS_DRAFT.' ;';
    -
    -            dol_syslog(__METHOD__, LOG_DEBUG);
    -            $resql=$this->db->query($sql);
    -            if (!$resql)
    -            {
    -            	$this->errors[]=$this->db->error();
    -            	$error++;
    -            }
    -
    -            if (! $error)
    -            {
    -            	$this->oldcopy= clone $this;
    -            	$this->remise_absolue = $remise;
    -            	$this->update_price(1);
    -            }
    -
    -            if (! $notrigger && empty($error))
    -            {
    -            	// Call trigger
    -            	$result=$this->call_trigger('ORDER_MODIFY',$user);
    -            	if ($result < 0) $error++;
    -            	// End call triggers
    -            }
    -
    -            if (! $error)
    -            {
    -            	$this->db->commit();
    -            	return 1;
    -            }
    -            else
    -            {
    -            	foreach($this->errors as $errmsg)
    -            	{
    -            		dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    -            		$this->error.=($this->error?', '.$errmsg:$errmsg);
    -            	}
    -            	$this->db->rollback();
    -            	return -1*$error;
    -            }
    -        }
    -    }
    -
    -
    -    /**
    -     *	Set the order date
    -     *
    -     *	@param      User	$user       Object user making change
    -     *	@param      int		$date		Date
    -     * 	@param     	int		$notrigger	1=Does not execute triggers, 0= execute triggers
    -     *	@return     int         		<0 if KO, >0 if OK
    -     */
    -    function set_date($user, $date, $notrigger=0)
    -    {
    -        if ($user->rights->commande->creer)
    -        {
    -        	$error=0;
    -
    -        	$this->db->begin();
    -
    -            $sql = "UPDATE ".MAIN_DB_PREFIX."commande";
    -            $sql.= " SET date_commande = ".($date ? "'".$this->db->idate($date)."'" : 'null');
    -            $sql.= " WHERE rowid = ".$this->id." AND fk_statut = ".self::STATUS_DRAFT;
    -
    -            dol_syslog(__METHOD__, LOG_DEBUG);
    -            $resql=$this->db->query($sql);
    -            if (!$resql)
    -            {
    -            	$this->errors[]=$this->db->error();
    -            	$error++;
    -            }
    -
    -            if (! $error)
    -            {
    -            	$this->oldcopy= clone $this;
    -            	$this->date = $date;
    -            }
    -
    -            if (! $notrigger && empty($error))
    -            {
    -            	// Call trigger
    -            	$result=$this->call_trigger('ORDER_MODIFY',$user);
    -            	if ($result < 0) $error++;
    -            	// End call triggers
    -            }
    -
    -            if (! $error)
    -            {
    -            	$this->db->commit();
    -            	return 1;
    -            }
    -            else
    -            {
    -            	foreach($this->errors as $errmsg)
    -            	{
    -            		dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    -            		$this->error.=($this->error?', '.$errmsg:$errmsg);
    -            	}
    -            	$this->db->rollback();
    -            	return -1*$error;
    -            }
    -        }
    -        else
    -        {
    -            return -2;
    -        }
    -    }
    -
    -    /**
    -     *	Set the planned delivery date
    -     *
    -     *	@param      User	$user        		Objet utilisateur qui modifie
    -     *	@param      int		$date_livraison     Date de livraison
    -     *  @param     	int		$notrigger			1=Does not execute triggers, 0= execute triggers
    -     *	@return     int         				<0 si ko, >0 si ok
    -     */
    -    function set_date_livraison($user, $date_livraison, $notrigger=0)
    -    {
    -        if ($user->rights->commande->creer)
    -        {
    -        	$error=0;
    -
    -        	$this->db->begin();
    -
    -            $sql = "UPDATE ".MAIN_DB_PREFIX."commande";
    -            $sql.= " SET date_livraison = ".($date_livraison ? "'".$this->db->idate($date_livraison)."'" : 'null');
    -            $sql.= " WHERE rowid = ".$this->id;
    -
    -            dol_syslog(__METHOD__, LOG_DEBUG);
    -            $resql=$this->db->query($sql);
    -            if (!$resql)
    -            {
    -            	$this->errors[]=$this->db->error();
    -            	$error++;
    -            }
    -
    -            if (! $error)
    -            {
    -            	$this->oldcopy= clone $this;
    -            	$this->date_livraison = $date_livraison;
    -            }
    -
    -            if (! $notrigger && empty($error))
    -            {
    -            	// Call trigger
    -            	$result=$this->call_trigger('ORDER_MODIFY',$user);
    -            	if ($result < 0) $error++;
    -            	// End call triggers
    -            }
    -
    -            if (! $error)
    -            {
    -            	$this->db->commit();
    -            	return 1;
    -            }
    -            else
    -            {
    -            	foreach($this->errors as $errmsg)
    -            	{
    -            		dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    -            		$this->error.=($this->error?', '.$errmsg:$errmsg);
    -            	}
    -            	$this->db->rollback();
    -            	return -1*$error;
    -            }
    -        }
    -        else
    -        {
    -            return -2;
    -        }
    -    }
    -
    -    /**
    -     *  Return list of orders (eventuelly filtered on a user) into an array
    -     *
    -     *  @param		int		$shortlist		0=Return array[id]=ref, 1=Return array[](id=>id,ref=>ref,name=>name)
    -     *  @param      int		$draft      	0=not draft, 1=draft
    -     *  @param      User	$excluser      	Objet user to exclude
    -     *  @param    	int		$socid			Id third pary
    -     *  @param    	int		$limit			For pagination
    -     *  @param    	int		$offset			For pagination
    -     *  @param    	string	$sortfield		Sort criteria
    -     *  @param    	string	$sortorder		Sort order
    -     *  @return     int             		-1 if KO, array with result if OK
    -     */
    -    function liste_array($shortlist=0, $draft=0, $excluser='', $socid=0, $limit=0, $offset=0, $sortfield='c.date_commande', $sortorder='DESC')
    -    {
    -        global $user;
    -
    -        $ga = array();
    -
    -        $sql = "SELECT s.rowid, s.nom as name, s.client,";
    -        $sql.= " c.rowid as cid, c.ref";
    -        if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user";
    -        $sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."commande as c";
    -		if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -        $sql.= " WHERE c.entity IN (".getEntity('commande').")";
    -        $sql.= " AND c.fk_soc = s.rowid";
    -        if (! $user->rights->societe->client->voir && ! $socid) //restriction
    -        {
    -        	$sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
    -        }
    -        if ($socid) $sql.= " AND s.rowid = ".$socid;
    -        if ($draft) $sql.= " AND c.fk_statut = ".self::STATUS_DRAFT;
    -        if (is_object($excluser)) $sql.= " AND c.fk_user_author <> ".$excluser->id;
    -        $sql.= $this->db->order($sortfield,$sortorder);
    -        $sql.= $this->db->plimit($limit,$offset);
    -
    -        $result=$this->db->query($sql);
    -        if ($result)
    -        {
    -            $numc = $this->db->num_rows($result);
    -            if ($numc)
    -            {
    -                $i = 0;
    -                while ($i < $numc)
    -                {
    -                    $obj = $this->db->fetch_object($result);
    -
    -                    if ($shortlist == 1)
    -                    {
    -                    	$ga[$obj->cid] = $obj->ref;
    -                    }
    -                    else if ($shortlist == 2)
    -                    {
    -                    	$ga[$obj->cid] = $obj->ref.' ('.$obj->name.')';
    -                    }
    -                    else
    +					if ($line->delete($user) > 0)
     					{
    -                    	$ga[$i]['id']	= $obj->cid;
    -                    	$ga[$i]['ref'] 	= $obj->ref;
    -                    	$ga[$i]['name'] = $obj->name;
    -                    }
    -                    $i++;
    -                }
    -            }
    -            return $ga;
    -        }
    -        else
    -        {
    -            dol_print_error($this->db);
    -            return -1;
    -        }
    -    }
    +						$result=$this->update_price(1);
     
    -    /**
    -     *	Update delivery delay
    -     *
    -     *	@param      int		$availability_id	Id du nouveau mode
    -     *  @param     	int		$notrigger			1=Does not execute triggers, 0= execute triggers
    -     *	@return     int         				>0 if OK, <0 if KO
    -     */
    -    function availability($availability_id, $notrigger=0)
    -    {
    -        global $user;
    +						if ($result > 0)
    +						{
    +							$this->db->commit();
    +							return 1;
    +						}
    +						else
    +						{
    +							$this->db->rollback();
    +							$this->error=$this->db->lasterror();
    +							return -1;
    +						}
    +					}
    +					else
    +					{
    +						$this->db->rollback();
    +						$this->error=$line->error;
    +						return -1;
    +					}
    +				}
    +				else
    +				{
    +					$this->db->rollback();
    +					return 0;
    +				}
    +			}
    +			else
    +			{
    +				$this->db->rollback();
    +				$this->error=$this->db->lasterror();
    +				return -1;
    +			}
    +		}
    +		else
    +		{
    +			$this->error='ErrorDeleteLineNotAllowedByObjectStatus';
    +			return -1;
    +		}
    +	}
     
    -        dol_syslog('Commande::availability('.$availability_id.')');
    -        if ($this->statut >= self::STATUS_DRAFT)
    -        {
    -        	$error=0;
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 * 	Applique une remise relative
    +	 *
    +	 * 	@param     	User		$user		User qui positionne la remise
    +	 * 	@param     	float		$remise		Discount (percent)
    +	 * 	@param     	int			$notrigger	1=Does not execute triggers, 0= execute triggers
    +	 *	@return		int 					<0 if KO, >0 if OK
    +	 */
    +	function set_remise($user, $remise, $notrigger=0)
    +	{
    +        // phpcs:enable
    +		$remise=trim($remise)?trim($remise):0;
     
    -        	$this->db->begin();
    +		if ($user->rights->commande->creer)
    +		{
    +			$error=0;
     
    -            $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    -            $sql .= ' SET fk_availability = '.$availability_id;
    -            $sql .= ' WHERE rowid='.$this->id;
    +			$this->db->begin();
     
    -            dol_syslog(__METHOD__, LOG_DEBUG);
    -            $resql=$this->db->query($sql);
    -            if (!$resql)
    -            {
    -            	$this->errors[]=$this->db->error();
    -            	$error++;
    -            }
    +			$remise=price2num($remise);
     
    -            if (! $error)
    -            {
    -            	$this->oldcopy= clone $this;
    -            	$this->availability_id = $availability_id;
    -            }
    +			$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    +			$sql.= ' SET remise_percent = '.$remise;
    +			$sql.= ' WHERE rowid = '.$this->id.' AND fk_statut = '.self::STATUS_DRAFT.' ;';
     
    -            if (! $notrigger && empty($error))
    -            {
    -            	// Call trigger
    -            	$result=$this->call_trigger('ORDER_MODIFY',$user);
    -            	if ($result < 0) $error++;
    -            	// End call triggers
    -            }
    +			dol_syslog(__METHOD__, LOG_DEBUG);
    +			$resql=$this->db->query($sql);
    +			if (!$resql)
    +			{
    +				$this->errors[]=$this->db->error();
    +				$error++;
    +			}
     
    -            if (! $error)
    -            {
    -            	$this->db->commit();
    -            	return 1;
    -            }
    -            else
    -            {
    -            	foreach($this->errors as $errmsg)
    -            	{
    -            		dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    -            		$this->error.=($this->error?', '.$errmsg:$errmsg);
    -            	}
    -            	$this->db->rollback();
    -            	return -1*$error;
    -            }
    -        }
    -        else
    -        {
    -        	$error_str='Command status do not meet requirement '.$this->statut;
    -            dol_syslog(__METHOD__.$error_str, LOG_ERR);
    -            $this->error=$error_str;
    -            $this->errors[]= $this->error;
    -            return -2;
    -        }
    -    }
    +			if (! $error)
    +			{
    +				$this->oldcopy= clone $this;
    +				$this->remise_percent = $remise;
    +				$this->update_price(1);
    +			}
     
    -    /**
    -     *	Update order demand_reason
    -     *
    -     *  @param      int		$demand_reason_id	Id of new demand
    -     *  @param     	int		$notrigger			1=Does not execute triggers, 0= execute triggers
    -     *  @return     int        			 		>0 if ok, <0 if ko
    -     */
    -    function demand_reason($demand_reason_id, $notrigger=0)
    -    {
    -        global $user;
    +			if (! $notrigger && empty($error))
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_MODIFY',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
    +			}
     
    -        dol_syslog('Commande::demand_reason('.$demand_reason_id.')');
    -        if ($this->statut >= self::STATUS_DRAFT)
    -        {
    -        	$error=0;
    +			if (! $error)
    +			{
    +				$this->db->commit();
    +				return 1;
    +			}
    +			else
    +			{
    +				foreach($this->errors as $errmsg)
    +				{
    +					dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    +					$this->error.=($this->error?', '.$errmsg:$errmsg);
    +				}
    +				$this->db->rollback();
    +				return -1*$error;
    +			}
    +		}
    +	}
     
    -        	$this->db->begin();
     
    -            $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    -            $sql .= ' SET fk_input_reason = '.$demand_reason_id;
    -            $sql .= ' WHERE rowid='.$this->id;
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 * 		Applique une remise absolue
    +	 *
    +	 * 		@param     	User		$user 		User qui positionne la remise
    +	 * 		@param     	float		$remise		Discount
    +	 * 		@param     	int			$notrigger	1=Does not execute triggers, 0= execute triggers
    +	 *		@return		int 					<0 if KO, >0 if OK
    +	 */
    +	function set_remise_absolue($user, $remise, $notrigger=0)
    +	{
    +        // phpcs:enable
    +		$remise=trim($remise)?trim($remise):0;
     
    -            dol_syslog(__METHOD__, LOG_DEBUG);
    -            $resql=$this->db->query($sql);
    -            if (!$resql)
    -            {
    -            	$this->errors[]=$this->db->error();
    -            	$error++;
    -            }
    +		if ($user->rights->commande->creer)
    +		{
    +			$error=0;
     
    -            if (! $error)
    -            {
    -            	$this->oldcopy= clone $this;
    -            	$this->demand_reason_id = $demand_reason_id;
    -            }
    +			$this->db->begin();
     
    -            if (! $notrigger && empty($error))
    -            {
    -            	// Call trigger
    -            	$result=$this->call_trigger('ORDER_MODIFY',$user);
    -            	if ($result < 0) $error++;
    -            	// End call triggers
    -            }
    +			$remise=price2num($remise);
     
    -            if (! $error)
    -            {
    -            	$this->db->commit();
    -            	return 1;
    -            }
    -            else
    -            {
    -            	foreach($this->errors as $errmsg)
    -            	{
    -            		dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    -            		$this->error.=($this->error?', '.$errmsg:$errmsg);
    -            	}
    -            	$this->db->rollback();
    -            	return -1*$error;
    -            }
    -        }
    -        else
    -        {
    -        	$error_str='order status do not meet requirement '.$this->statut;
    -        	dol_syslog(__METHOD__.$error_str, LOG_ERR);
    -        	$this->error=$error_str;
    -        	$this->errors[]= $this->error;
    -            return -2;
    -        }
    -    }
    +			$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    +			$sql.= ' SET remise_absolue = '.$remise;
    +			$sql.= ' WHERE rowid = '.$this->id.' AND fk_statut = '.self::STATUS_DRAFT.' ;';
     
    -    /**
    -     *	Set customer ref
    -     *
    -     *	@param      User	$user           User that make change
    -     *	@param      string	$ref_client     Customer ref
    -     *  @param     	int		$notrigger		1=Does not execute triggers, 0= execute triggers
    -     *	@return     int             		<0 if KO, >0 if OK
    -     */
    -    function set_ref_client($user, $ref_client, $notrigger=0)
    -    {
    -        if ($user->rights->commande->creer)
    -        {
    -        	$error=0;
    +			dol_syslog(__METHOD__, LOG_DEBUG);
    +			$resql=$this->db->query($sql);
    +			if (!$resql)
    +			{
    +				$this->errors[]=$this->db->error();
    +				$error++;
    +			}
     
    -        	$this->db->begin();
    +			if (! $error)
    +			{
    +				$this->oldcopy= clone $this;
    +				$this->remise_absolue = $remise;
    +				$this->update_price(1);
    +			}
     
    -            $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande SET';
    -            $sql.= ' ref_client = '.(empty($ref_client) ? 'NULL' : '\''.$this->db->escape($ref_client).'\'');
    -            $sql.= ' WHERE rowid = '.$this->id;
    +			if (! $notrigger && empty($error))
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_MODIFY',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
    +			}
     
    -            dol_syslog(__METHOD__.' this->id='.$this->id.', ref_client='.$ref_client, LOG_DEBUG);
    -            $resql=$this->db->query($sql);
    -            if (!$resql)
    -            {
    -            	$this->errors[]=$this->db->error();
    -            	$error++;
    -            }
    +			if (! $error)
    +			{
    +				$this->db->commit();
    +				return 1;
    +			}
    +			else
    +			{
    +				foreach($this->errors as $errmsg)
    +				{
    +					dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    +					$this->error.=($this->error?', '.$errmsg:$errmsg);
    +				}
    +				$this->db->rollback();
    +				return -1*$error;
    +			}
    +		}
    +	}
     
    -            if (! $error)
    -            {
    -            	$this->oldcopy= clone $this;
    -            	$this->ref_client = $ref_client;
    -            }
     
    -            if (! $notrigger && empty($error))
    -            {
    -            	// Call trigger
    -            	$result=$this->call_trigger('ORDER_MODIFY',$user);
    -            	if ($result < 0) $error++;
    -            	// End call triggers
    -            }
    -            if (! $error)
    -            {
    -            	$this->db->commit();
    -            	return 1;
    -            }
    -            else
    -            {
    -            	foreach($this->errors as $errmsg)
    -            	{
    -            		dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    -            		$this->error.=($this->error?', '.$errmsg:$errmsg);
    -            	}
    -            	$this->db->rollback();
    -            	return -1*$error;
    -            }
    -        }
    -        else
    -        {
    -            return -1;
    -        }
    -    }
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Set the order date
    +	 *
    +	 *	@param      User	$user       Object user making change
    +	 *	@param      int		$date		Date
    +	 * 	@param     	int		$notrigger	1=Does not execute triggers, 0= execute triggers
    +	 *	@return     int         		<0 if KO, >0 if OK
    +	 */
    +	function set_date($user, $date, $notrigger=0)
    +	{
    +        // phpcs:enable
    +		if ($user->rights->commande->creer)
    +		{
    +			$error=0;
    +
    +			$this->db->begin();
    +
    +			$sql = "UPDATE ".MAIN_DB_PREFIX."commande";
    +			$sql.= " SET date_commande = ".($date ? "'".$this->db->idate($date)."'" : 'null');
    +			$sql.= " WHERE rowid = ".$this->id." AND fk_statut = ".self::STATUS_DRAFT;
    +
    +			dol_syslog(__METHOD__, LOG_DEBUG);
    +			$resql=$this->db->query($sql);
    +			if (!$resql)
    +			{
    +				$this->errors[]=$this->db->error();
    +				$error++;
    +			}
    +
    +			if (! $error)
    +			{
    +				$this->oldcopy= clone $this;
    +				$this->date = $date;
    +			}
    +
    +			if (! $notrigger && empty($error))
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_MODIFY',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
    +			}
    +
    +			if (! $error)
    +			{
    +				$this->db->commit();
    +				return 1;
    +			}
    +			else
    +			{
    +				foreach($this->errors as $errmsg)
    +				{
    +					dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    +					$this->error.=($this->error?', '.$errmsg:$errmsg);
    +				}
    +				$this->db->rollback();
    +				return -1*$error;
    +			}
    +		}
    +		else
    +		{
    +			return -2;
    +		}
    +	}
    +
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Set the planned delivery date
    +	 *
    +	 *	@param      User	$user        		Objet utilisateur qui modifie
    +	 *	@param      int		$date_livraison     Date de livraison
    +	 *  @param     	int		$notrigger			1=Does not execute triggers, 0= execute triggers
    +	 *	@return     int         				<0 si ko, >0 si ok
    +	 */
    +	function set_date_livraison($user, $date_livraison, $notrigger=0)
    +	{
    +        // phpcs:enable
    +		if ($user->rights->commande->creer)
    +		{
    +			$error=0;
    +
    +			$this->db->begin();
    +
    +			$sql = "UPDATE ".MAIN_DB_PREFIX."commande";
    +			$sql.= " SET date_livraison = ".($date_livraison ? "'".$this->db->idate($date_livraison)."'" : 'null');
    +			$sql.= " WHERE rowid = ".$this->id;
    +
    +			dol_syslog(__METHOD__, LOG_DEBUG);
    +			$resql=$this->db->query($sql);
    +			if (!$resql)
    +			{
    +				$this->errors[]=$this->db->error();
    +				$error++;
    +			}
    +
    +			if (! $error)
    +			{
    +				$this->oldcopy= clone $this;
    +				$this->date_livraison = $date_livraison;
    +			}
    +
    +			if (! $notrigger && empty($error))
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_MODIFY',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
    +			}
    +
    +			if (! $error)
    +			{
    +				$this->db->commit();
    +				return 1;
    +			}
    +			else
    +			{
    +				foreach($this->errors as $errmsg)
    +				{
    +					dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    +					$this->error.=($this->error?', '.$errmsg:$errmsg);
    +				}
    +				$this->db->rollback();
    +				return -1*$error;
    +			}
    +		}
    +		else
    +		{
    +			return -2;
    +		}
    +	}
    +
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *  Return list of orders (eventuelly filtered on a user) into an array
    +	 *
    +	 *  @param		int		$shortlist		0=Return array[id]=ref, 1=Return array[](id=>id,ref=>ref,name=>name)
    +	 *  @param      int		$draft      	0=not draft, 1=draft
    +	 *  @param      User	$excluser      	Objet user to exclude
    +	 *  @param    	int		$socid			Id third pary
    +	 *  @param    	int		$limit			For pagination
    +	 *  @param    	int		$offset			For pagination
    +	 *  @param    	string	$sortfield		Sort criteria
    +	 *  @param    	string	$sortorder		Sort order
    +	 *  @return     int             		-1 if KO, array with result if OK
    +	 */
    +	function liste_array($shortlist=0, $draft=0, $excluser='', $socid=0, $limit=0, $offset=0, $sortfield='c.date_commande', $sortorder='DESC')
    +	{
    +        // phpcs:enable
    +		global $user;
    +
    +		$ga = array();
    +
    +		$sql = "SELECT s.rowid, s.nom as name, s.client,";
    +		$sql.= " c.rowid as cid, c.ref";
    +		if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", sc.fk_soc, sc.fk_user";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."commande as c";
    +		if (! $user->rights->societe->client->voir && ! $socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +		$sql.= " WHERE c.entity IN (".getEntity('commande').")";
    +		$sql.= " AND c.fk_soc = s.rowid";
    +		if (! $user->rights->societe->client->voir && ! $socid) //restriction
    +		{
    +			$sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
    +		}
    +		if ($socid) $sql.= " AND s.rowid = ".$socid;
    +		if ($draft) $sql.= " AND c.fk_statut = ".self::STATUS_DRAFT;
    +		if (is_object($excluser)) $sql.= " AND c.fk_user_author <> ".$excluser->id;
    +		$sql.= $this->db->order($sortfield,$sortorder);
    +		$sql.= $this->db->plimit($limit,$offset);
    +
    +		$result=$this->db->query($sql);
    +		if ($result)
    +		{
    +			$numc = $this->db->num_rows($result);
    +			if ($numc)
    +			{
    +				$i = 0;
    +				while ($i < $numc)
    +				{
    +					$obj = $this->db->fetch_object($result);
    +
    +					if ($shortlist == 1)
    +					{
    +						$ga[$obj->cid] = $obj->ref;
    +					}
    +					else if ($shortlist == 2)
    +					{
    +						$ga[$obj->cid] = $obj->ref.' ('.$obj->name.')';
    +					}
    +					else
    +					{
    +						$ga[$i]['id']	= $obj->cid;
    +						$ga[$i]['ref'] 	= $obj->ref;
    +						$ga[$i]['name'] = $obj->name;
    +					}
    +					$i++;
    +				}
    +			}
    +			return $ga;
    +		}
    +		else
    +		{
    +			dol_print_error($this->db);
    +			return -1;
    +		}
    +	}
    +
    +	/**
    +	 *	Update delivery delay
    +	 *
    +	 *	@param      int		$availability_id	Id du nouveau mode
    +	 *  @param     	int		$notrigger			1=Does not execute triggers, 0= execute triggers
    +	 *	@return     int         				>0 if OK, <0 if KO
    +	 */
    +	function availability($availability_id, $notrigger=0)
    +	{
    +		global $user;
    +
    +		dol_syslog('Commande::availability('.$availability_id.')');
    +		if ($this->statut >= self::STATUS_DRAFT)
    +		{
    +			$error=0;
    +
    +			$this->db->begin();
    +
    +			$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    +			$sql .= ' SET fk_availability = '.$availability_id;
    +			$sql .= ' WHERE rowid='.$this->id;
    +
    +			dol_syslog(__METHOD__, LOG_DEBUG);
    +			$resql=$this->db->query($sql);
    +			if (!$resql)
    +			{
    +				$this->errors[]=$this->db->error();
    +				$error++;
    +			}
    +
    +			if (! $error)
    +			{
    +				$this->oldcopy= clone $this;
    +				$this->availability_id = $availability_id;
    +			}
    +
    +			if (! $notrigger && empty($error))
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_MODIFY',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
    +			}
    +
    +			if (! $error)
    +			{
    +				$this->db->commit();
    +				return 1;
    +			}
    +			else
    +			{
    +				foreach($this->errors as $errmsg)
    +				{
    +					dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    +					$this->error.=($this->error?', '.$errmsg:$errmsg);
    +				}
    +				$this->db->rollback();
    +				return -1*$error;
    +			}
    +		}
    +		else
    +		{
    +			$error_str='Command status do not meet requirement '.$this->statut;
    +			dol_syslog(__METHOD__.$error_str, LOG_ERR);
    +			$this->error=$error_str;
    +			$this->errors[]= $this->error;
    +			return -2;
    +		}
    +	}
    +
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Update order demand_reason
    +	 *
    +	 *  @param      int		$demand_reason_id	Id of new demand
    +	 *  @param     	int		$notrigger			1=Does not execute triggers, 0= execute triggers
    +	 *  @return     int        			 		>0 if ok, <0 if ko
    +	 */
    +	function demand_reason($demand_reason_id, $notrigger=0)
    +	{
    +        // phpcs:enable
    +		global $user;
    +
    +		dol_syslog('Commande::demand_reason('.$demand_reason_id.')');
    +		if ($this->statut >= self::STATUS_DRAFT)
    +		{
    +			$error=0;
    +
    +			$this->db->begin();
    +
    +			$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande';
    +			$sql .= ' SET fk_input_reason = '.$demand_reason_id;
    +			$sql .= ' WHERE rowid='.$this->id;
    +
    +			dol_syslog(__METHOD__, LOG_DEBUG);
    +			$resql=$this->db->query($sql);
    +			if (!$resql)
    +			{
    +				$this->errors[]=$this->db->error();
    +				$error++;
    +			}
    +
    +			if (! $error)
    +			{
    +				$this->oldcopy= clone $this;
    +				$this->demand_reason_id = $demand_reason_id;
    +			}
    +
    +			if (! $notrigger && empty($error))
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_MODIFY',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
    +			}
    +
    +			if (! $error)
    +			{
    +				$this->db->commit();
    +				return 1;
    +			}
    +			else
    +			{
    +				foreach($this->errors as $errmsg)
    +				{
    +					dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    +					$this->error.=($this->error?', '.$errmsg:$errmsg);
    +				}
    +				$this->db->rollback();
    +				return -1*$error;
    +			}
    +		}
    +		else
    +		{
    +			$error_str='order status do not meet requirement '.$this->statut;
    +			dol_syslog(__METHOD__.$error_str, LOG_ERR);
    +			$this->error=$error_str;
    +			$this->errors[]= $this->error;
    +			return -2;
    +		}
    +	}
    +
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Set customer ref
    +	 *
    +	 *	@param      User	$user           User that make change
    +	 *	@param      string	$ref_client     Customer ref
    +	 *  @param     	int		$notrigger		1=Does not execute triggers, 0= execute triggers
    +	 *	@return     int             		<0 if KO, >0 if OK
    +	 */
    +	function set_ref_client($user, $ref_client, $notrigger=0)
    +	{
    +        // phpcs:enable
    +		if ($user->rights->commande->creer)
    +		{
    +			$error=0;
    +
    +			$this->db->begin();
    +
    +			$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande SET';
    +			$sql.= ' ref_client = '.(empty($ref_client) ? 'NULL' : '\''.$this->db->escape($ref_client).'\'');
    +			$sql.= ' WHERE rowid = '.$this->id;
    +
    +			dol_syslog(__METHOD__.' this->id='.$this->id.', ref_client='.$ref_client, LOG_DEBUG);
    +			$resql=$this->db->query($sql);
    +			if (!$resql)
    +			{
    +				$this->errors[]=$this->db->error();
    +				$error++;
    +			}
    +
    +			if (! $error)
    +			{
    +				$this->oldcopy= clone $this;
    +				$this->ref_client = $ref_client;
    +			}
    +
    +			if (! $notrigger && empty($error))
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_MODIFY',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
    +			}
    +			if (! $error)
    +			{
    +				$this->db->commit();
    +				return 1;
    +			}
    +			else
    +			{
    +				foreach($this->errors as $errmsg)
    +				{
    +					dol_syslog(__METHOD__.' Error: '.$errmsg, LOG_ERR);
    +					$this->error.=($this->error?', '.$errmsg:$errmsg);
    +				}
    +				$this->db->rollback();
    +				return -1*$error;
    +			}
    +		}
    +		else
    +		{
    +			return -1;
    +		}
    +	}
     
     	/**
     	 * Classify the order as invoiced
    @@ -2698,7 +2770,7 @@ class Commande extends CommonOrder
     	 */
     	function classifyBilled(User $user, $notrigger=0)
     	{
    -        $error = 0;
    +		$error = 0;
     
     		$this->db->begin();
     
    @@ -2717,10 +2789,10 @@ class Commande extends CommonOrder
     
     			if (! $notrigger && empty($error))
     			{
    -            	// Call trigger
    -            	$result=$this->call_trigger('ORDER_CLASSIFY_BILLED',$user);
    -            	if ($result < 0) $error++;
    -            	// End call triggers
    +				// Call trigger
    +				$result=$this->call_trigger('ORDER_CLASSIFY_BILLED',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
     			}
     
     			if (! $error)
    @@ -2742,7 +2814,7 @@ class Commande extends CommonOrder
     		else
     		{
     			$this->error=$this->db->error();
    -            $this->db->rollback();
    +			$this->db->rollback();
     			return -1;
     		}
     	}
    @@ -2754,146 +2826,146 @@ class Commande extends CommonOrder
     	 */
     	function classifyUnBilled()
     	{
    -	    global $conf, $user, $langs;
    -	    $error = 0;
    +		global $conf, $user, $langs;
    +		$error = 0;
     
    -	    $this->db->begin();
    +		$this->db->begin();
     
    -	    $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande SET facture = 0';
    -	    $sql.= ' WHERE rowid = '.$this->id.' AND fk_statut > '.self::STATUS_DRAFT;
    +		$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande SET facture = 0';
    +		$sql.= ' WHERE rowid = '.$this->id.' AND fk_statut > '.self::STATUS_DRAFT;
     
    -	    dol_syslog(get_class($this)."::classifyUnBilled", LOG_DEBUG);
    -	    if ($this->db->query($sql))
    -	    {
    -	    	if (! $error)
    -	    	{
    -	    		$this->oldcopy= clone $this;
    -	    		$this->billed=1;
    -	    	}
    +		dol_syslog(get_class($this)."::classifyUnBilled", LOG_DEBUG);
    +		if ($this->db->query($sql))
    +		{
    +			if (! $error)
    +			{
    +				$this->oldcopy= clone $this;
    +				$this->billed=1;
    +			}
     
    -	        // Call trigger
    -	        $result=$this->call_trigger('ORDER_CLASSIFY_UNBILLED',$user);
    -	        if ($result < 0) $error++;
    -	        // End call triggers
    +			// Call trigger
    +			$result=$this->call_trigger('ORDER_CLASSIFY_UNBILLED',$user);
    +			if ($result < 0) $error++;
    +			// End call triggers
     
    -	        if (! $error)
    -	        {
    -	            $this->billed=0;
    +			if (! $error)
    +			{
    +				$this->billed=0;
     
    -	            $this->db->commit();
    -	            return 1;
    -	        }
    -	        else
    -	        {
    -	            foreach($this->errors as $errmsg)
    -	            {
    -	                dol_syslog(get_class($this)."::classifyUnBilled ".$errmsg, LOG_ERR);
    -	                $this->error.=($this->error?', '.$errmsg:$errmsg);
    -	            }
    -	            $this->db->rollback();
    -	            return -1*$error;
    -	        }
    -	    }
    -	    else
    -	    {
    -	        $this->error=$this->db->error();
    -	        $this->db->rollback();
    -	        return -1;
    -	    }
    +				$this->db->commit();
    +				return 1;
    +			}
    +			else
    +			{
    +				foreach($this->errors as $errmsg)
    +				{
    +					dol_syslog(get_class($this)."::classifyUnBilled ".$errmsg, LOG_ERR);
    +					$this->error.=($this->error?', '.$errmsg:$errmsg);
    +				}
    +				$this->db->rollback();
    +				return -1*$error;
    +			}
    +		}
    +		else
    +		{
    +			$this->error=$this->db->error();
    +			$this->db->rollback();
    +			return -1;
    +		}
     	}
     
     
    -    /**
    -     *  Update a line in database
    -     *
    -     *  @param    	int				$rowid            	Id of line to update
    -     *  @param    	string			$desc             	Description of line
    -     *  @param    	float			$pu               	Unit price
    -     *  @param    	float			$qty              	Quantity
    -     *  @param    	float			$remise_percent   	Percent of discount
    -     *  @param    	float			$txtva           	Taux TVA
    -     * 	@param		float			$txlocaltax1		Local tax 1 rate
    -     *  @param		float			$txlocaltax2		Local tax 2 rate
    -     *  @param    	string			$price_base_type	HT or TTC
    -     *  @param    	int				$info_bits        	Miscellaneous informations on line
    -     *  @param    	int				$date_start        	Start date of the line
    -     *  @param    	int				$date_end          	End date of the line
    -     * 	@param		int				$type				Type of line (0=product, 1=service)
    -     * 	@param		int				$fk_parent_line		Id of parent line (0 in most cases, used by modules adding sublevels into lines).
    -     * 	@param		int				$skip_update_total	Keep fields total_xxx to 0 (used for special lines by some modules)
    -     *  @param		int				$fk_fournprice		Id of origin supplier price
    -     *  @param		int				$pa_ht				Price (without tax) of product when it was bought
    -     *  @param		string			$label				Label
    -     *  @param		int				$special_code		Special code (also used by externals modules!)
    +	/**
    +	 *  Update a line in database
    +	 *
    +	 *  @param    	int				$rowid            	Id of line to update
    +	 *  @param    	string			$desc             	Description of line
    +	 *  @param    	float			$pu               	Unit price
    +	 *  @param    	float			$qty              	Quantity
    +	 *  @param    	float			$remise_percent   	Percent of discount
    +	 *  @param    	float			$txtva           	Taux TVA
    +	 * 	@param		float			$txlocaltax1		Local tax 1 rate
    +	 *  @param		float			$txlocaltax2		Local tax 2 rate
    +	 *  @param    	string			$price_base_type	HT or TTC
    +	 *  @param    	int				$info_bits        	Miscellaneous informations on line
    +	 *  @param    	int				$date_start        	Start date of the line
    +	 *  @param    	int				$date_end          	End date of the line
    +	 * 	@param		int				$type				Type of line (0=product, 1=service)
    +	 * 	@param		int				$fk_parent_line		Id of parent line (0 in most cases, used by modules adding sublevels into lines).
    +	 * 	@param		int				$skip_update_total	Keep fields total_xxx to 0 (used for special lines by some modules)
    +	 *  @param		int				$fk_fournprice		Id of origin supplier price
    +	 *  @param		int				$pa_ht				Price (without tax) of product when it was bought
    +	 *  @param		string			$label				Label
    +	 *  @param		int				$special_code		Special code (also used by externals modules!)
     	 *  @param		array			$array_options		extrafields array
    -     * 	@param 		string			$fk_unit 			Code of the unit to use. Null to use the default one
    +	 * 	@param 		string			$fk_unit 			Code of the unit to use. Null to use the default one
     	 *  @param		double			$pu_ht_devise		Amount in currency
    -     * 	@param		int				$notrigger			disable line update trigger
    -     *  @return   	int              					< 0 if KO, > 0 if OK
    -     */
    +	 * 	@param		int				$notrigger			disable line update trigger
    +	 *  @return   	int              					< 0 if KO, > 0 if OK
    +	 */
     	function updateline($rowid, $desc, $pu, $qty, $remise_percent, $txtva, $txlocaltax1=0.0,$txlocaltax2=0.0, $price_base_type='HT', $info_bits=0, $date_start='', $date_end='', $type=0, $fk_parent_line=0, $skip_update_total=0, $fk_fournprice=null, $pa_ht=0, $label='', $special_code=0, $array_options=0, $fk_unit=null, $pu_ht_devise = 0, $notrigger=0)
    -    {
    -        global $conf, $mysoc, $langs, $user;
    +	{
    +		global $conf, $mysoc, $langs, $user;
     
    -        dol_syslog(get_class($this)."::updateline id=$rowid, desc=$desc, pu=$pu, qty=$qty, remise_percent=$remise_percent, txtva=$txtva, txlocaltax1=$txlocaltax1, txlocaltax2=$txlocaltax2, price_base_type=$price_base_type, info_bits=$info_bits, date_start=$date_start, date_end=$date_end, type=$type, fk_parent_line=$fk_parent_line, pa_ht=$pa_ht, special_code=$special_code");
    -        include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
    +		dol_syslog(get_class($this)."::updateline id=$rowid, desc=$desc, pu=$pu, qty=$qty, remise_percent=$remise_percent, txtva=$txtva, txlocaltax1=$txlocaltax1, txlocaltax2=$txlocaltax2, price_base_type=$price_base_type, info_bits=$info_bits, date_start=$date_start, date_end=$date_end, type=$type, fk_parent_line=$fk_parent_line, pa_ht=$pa_ht, special_code=$special_code");
    +		include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
     
    -        if (! empty($this->brouillon))
    -        {
    -            $this->db->begin();
    +		if (! empty($this->brouillon))
    +		{
    +			$this->db->begin();
     
    -            // Clean parameters
    -            if (empty($qty)) $qty=0;
    -            if (empty($info_bits)) $info_bits=0;
    -            if (empty($txtva)) $txtva=0;
    -            if (empty($txlocaltax1)) $txlocaltax1=0;
    -            if (empty($txlocaltax2)) $txlocaltax2=0;
    -            if (empty($remise_percent)) $remise_percent=0;
    -            if (empty($special_code) || $special_code == 3) $special_code=0;
    +			// Clean parameters
    +			if (empty($qty)) $qty=0;
    +			if (empty($info_bits)) $info_bits=0;
    +			if (empty($txtva)) $txtva=0;
    +			if (empty($txlocaltax1)) $txlocaltax1=0;
    +			if (empty($txlocaltax2)) $txlocaltax2=0;
    +			if (empty($remise_percent)) $remise_percent=0;
    +			if (empty($special_code) || $special_code == 3) $special_code=0;
     
    -            $remise_percent=price2num($remise_percent);
    -            $qty=price2num($qty);
    -            $pu = price2num($pu);
    -      		$pa_ht=price2num($pa_ht);
    -        	$pu_ht_devise=price2num($pu_ht_devise);
    -            $txtva=price2num($txtva);
    -            $txlocaltax1=price2num($txlocaltax1);
    -            $txlocaltax2=price2num($txlocaltax2);
    +			$remise_percent=price2num($remise_percent);
    +			$qty=price2num($qty);
    +			$pu = price2num($pu);
    +			$pa_ht=price2num($pa_ht);
    +			$pu_ht_devise=price2num($pu_ht_devise);
    +			$txtva=price2num($txtva);
    +			$txlocaltax1=price2num($txlocaltax1);
    +			$txlocaltax2=price2num($txlocaltax2);
     
    -            // Calcul du total TTC et de la TVA pour la ligne a partir de
    -            // qty, pu, remise_percent et txtva
    -            // TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
    -            // la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
    +			// Calcul du total TTC et de la TVA pour la ligne a partir de
    +			// qty, pu, remise_percent et txtva
    +			// TRES IMPORTANT: C'est au moment de l'insertion ligne qu'on doit stocker
    +			// la part ht, tva et ttc, et ce au niveau de la ligne qui a son propre taux tva.
     
    -            $localtaxes_type=getLocalTaxesFromRate($txtva, 0, $this->thirdparty, $mysoc);
    +			$localtaxes_type=getLocalTaxesFromRate($txtva, 0, $this->thirdparty, $mysoc);
     
    -       		// Clean vat code
    -    		$vat_src_code='';
    -    		if (preg_match('/\((.*)\)/', $txtva, $reg))
    -    		{
    -    		    $vat_src_code = $reg[1];
    -    		    $txtva = preg_replace('/\s*\(.*\)/', '', $txtva);    // Remove code into vatrate.
    -    		}
    +			// Clean vat code
    +			$vat_src_code='';
    +			if (preg_match('/\((.*)\)/', $txtva, $reg))
    +			{
    +				$vat_src_code = $reg[1];
    +				$txtva = preg_replace('/\s*\(.*\)/', '', $txtva);    // Remove code into vatrate.
    +			}
     
    -            $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise);
    +			$tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type, 100, $this->multicurrency_tx, $pu_ht_devise);
     
    -            $total_ht  = $tabprice[0];
    -            $total_tva = $tabprice[1];
    -            $total_ttc = $tabprice[2];
    -            $total_localtax1 = $tabprice[9];
    -            $total_localtax2 = $tabprice[10];
    +			$total_ht  = $tabprice[0];
    +			$total_tva = $tabprice[1];
    +			$total_ttc = $tabprice[2];
    +			$total_localtax1 = $tabprice[9];
    +			$total_localtax2 = $tabprice[10];
     			$pu_ht  = $tabprice[3];
     			$pu_tva = $tabprice[4];
     			$pu_ttc = $tabprice[5];
     
     			// MultiCurrency
     			$multicurrency_total_ht  = $tabprice[16];
    -            $multicurrency_total_tva = $tabprice[17];
    -            $multicurrency_total_ttc = $tabprice[18];
    +			$multicurrency_total_tva = $tabprice[17];
    +			$multicurrency_total_ttc = $tabprice[18];
     			$pu_ht_devise = $tabprice[19];
     
    -            // Anciens indicateurs: $price, $subprice (a ne plus utiliser)
    -            $price = $pu_ht;
    +			// Anciens indicateurs: $price, $subprice (a ne plus utiliser)
    +			$price = $pu_ht;
     			if ($price_base_type == 'TTC')
     			{
     				$subprice = $pu_ttc;
    @@ -2902,72 +2974,72 @@ class Commande extends CommonOrder
     			{
     				$subprice = $pu_ht;
     			}
    -            $remise = 0;
    -            if ($remise_percent > 0)
    -            {
    -                $remise = round(($pu * $remise_percent / 100),2);
    -                $price = ($pu - $remise);
    -            }
    +			$remise = 0;
    +			if ($remise_percent > 0)
    +			{
    +				$remise = round(($pu * $remise_percent / 100),2);
    +				$price = ($pu - $remise);
    +			}
     
    -            //Fetch current line from the database and then clone the object and set it in $oldline property
    -            $line = new OrderLine($this->db);
    -            $line->fetch($rowid);
    +			//Fetch current line from the database and then clone the object and set it in $oldline property
    +			$line = new OrderLine($this->db);
    +			$line->fetch($rowid);
     
    -            if (!empty($line->fk_product))
    -            {
    -                $product=new Product($this->db);
    -                $result=$product->fetch($line->fk_product);
    -                $product_type=$product->type;
    +			if (!empty($line->fk_product))
    +			{
    +				$product=new Product($this->db);
    +				$result=$product->fetch($line->fk_product);
    +				$product_type=$product->type;
     
    -                if (! empty($conf->global->STOCK_MUST_BE_ENOUGH_FOR_ORDER) && $product_type == 0 && $product->stock_reel < $qty)
    -                {
    -                    $langs->load("errors");
    -                    $this->error=$langs->trans('ErrorStockIsNotEnoughToAddProductOnOrder', $product->ref);
    -                    dol_syslog(get_class($this)."::addline error=Product ".$product->ref.": ".$this->error, LOG_ERR);
    -                    $this->db->rollback();
    -                    return self::STOCK_NOT_ENOUGH_FOR_ORDER;
    -                }
    -            }
    +				if (! empty($conf->global->STOCK_MUST_BE_ENOUGH_FOR_ORDER) && $product_type == 0 && $product->stock_reel < $qty)
    +				{
    +					$langs->load("errors");
    +					$this->error=$langs->trans('ErrorStockIsNotEnoughToAddProductOnOrder', $product->ref);
    +					dol_syslog(get_class($this)."::addline error=Product ".$product->ref.": ".$this->error, LOG_ERR);
    +					$this->db->rollback();
    +					return self::STOCK_NOT_ENOUGH_FOR_ORDER;
    +				}
    +			}
     
    -            $staticline = clone $line;
    +			$staticline = clone $line;
     
    -            $line->oldline = $staticline;
    -            $this->line = $line;
    -            $this->line->context = $this->context;
    +			$line->oldline = $staticline;
    +			$this->line = $line;
    +			$this->line->context = $this->context;
     
    -            // Reorder if fk_parent_line change
    -            if (! empty($fk_parent_line) && ! empty($staticline->fk_parent_line) && $fk_parent_line != $staticline->fk_parent_line)
    -            {
    -            	$rangmax = $this->line_max($fk_parent_line);
    -            	$this->line->rang = $rangmax + 1;
    -            }
    +			// Reorder if fk_parent_line change
    +			if (! empty($fk_parent_line) && ! empty($staticline->fk_parent_line) && $fk_parent_line != $staticline->fk_parent_line)
    +			{
    +				$rangmax = $this->line_max($fk_parent_line);
    +				$this->line->rang = $rangmax + 1;
    +			}
     
    -            $this->line->rowid=$rowid;
    -            $this->line->label=$label;
    -            $this->line->desc=$desc;
    -            $this->line->qty=$qty;
    +			$this->line->rowid=$rowid;
    +			$this->line->label=$label;
    +			$this->line->desc=$desc;
    +			$this->line->qty=$qty;
     
    -            $this->line->vat_src_code	= $vat_src_code;
    -            $this->line->tva_tx         = $txtva;
    -            $this->line->localtax1_tx   = $txlocaltax1;
    -            $this->line->localtax2_tx   = $txlocaltax2;
    +			$this->line->vat_src_code	= $vat_src_code;
    +			$this->line->tva_tx         = $txtva;
    +			$this->line->localtax1_tx   = $txlocaltax1;
    +			$this->line->localtax2_tx   = $txlocaltax2;
     			$this->line->localtax1_type = $localtaxes_type[0];
     			$this->line->localtax2_type = $localtaxes_type[2];
    -            $this->line->remise_percent = $remise_percent;
    -            $this->line->subprice       = $subprice;
    -            $this->line->info_bits      = $info_bits;
    -            $this->line->special_code   = $special_code;
    -            $this->line->total_ht       = $total_ht;
    -            $this->line->total_tva      = $total_tva;
    -            $this->line->total_localtax1= $total_localtax1;
    -            $this->line->total_localtax2= $total_localtax2;
    -            $this->line->total_ttc      = $total_ttc;
    -            $this->line->date_start     = $date_start;
    -            $this->line->date_end       = $date_end;
    -            $this->line->product_type   = $type;
    -            $this->line->fk_parent_line = $fk_parent_line;
    -            $this->line->skip_update_total=$skip_update_total;
    -	        $this->line->fk_unit        = $fk_unit;
    +			$this->line->remise_percent = $remise_percent;
    +			$this->line->subprice       = $subprice;
    +			$this->line->info_bits      = $info_bits;
    +			$this->line->special_code   = $special_code;
    +			$this->line->total_ht       = $total_ht;
    +			$this->line->total_tva      = $total_tva;
    +			$this->line->total_localtax1= $total_localtax1;
    +			$this->line->total_localtax2= $total_localtax2;
    +			$this->line->total_ttc      = $total_ttc;
    +			$this->line->date_start     = $date_start;
    +			$this->line->date_end       = $date_end;
    +			$this->line->product_type   = $type;
    +			$this->line->fk_parent_line = $fk_parent_line;
    +			$this->line->skip_update_total=$skip_update_total;
    +			$this->line->fk_unit        = $fk_unit;
     
     			$this->line->fk_fournprice = $fk_fournprice;
     			$this->line->pa_ht = $pa_ht;
    @@ -2975,44 +3047,44 @@ class Commande extends CommonOrder
     			// Multicurrency
     			$this->line->multicurrency_subprice		= $pu_ht_devise;
     			$this->line->multicurrency_total_ht 	= $multicurrency_total_ht;
    -            $this->line->multicurrency_total_tva 	= $multicurrency_total_tva;
    -            $this->line->multicurrency_total_ttc 	= $multicurrency_total_ttc;
    +			$this->line->multicurrency_total_tva 	= $multicurrency_total_tva;
    +			$this->line->multicurrency_total_ttc 	= $multicurrency_total_ttc;
     
    -            // TODO deprecated
    -            $this->line->price=$price;
    -            $this->line->remise=$remise;
    +			// TODO deprecated
    +			$this->line->price=$price;
    +			$this->line->remise=$remise;
     
     			if (is_array($array_options) && count($array_options)>0) {
     				$this->line->array_options=$array_options;
     			}
     
    -            $result=$this->line->update($user, $notrigger);
    -            if ($result > 0)
    -            {
    -            	// Reorder if child line
    -            	if (! empty($fk_parent_line)) $this->line_order(true,'DESC');
    +			$result=$this->line->update($user, $notrigger);
    +			if ($result > 0)
    +			{
    +				// Reorder if child line
    +				if (! empty($fk_parent_line)) $this->line_order(true,'DESC');
     
    -                // Mise a jour info denormalisees
    -                $this->update_price(1);
    +				// Mise a jour info denormalisees
    +				$this->update_price(1);
     
    -                $this->db->commit();
    -                return $result;
    -            }
    -            else
    -            {
    -	            $this->error=$this->line->error;
    +				$this->db->commit();
    +				return $result;
    +			}
    +			else
    +			{
    +				$this->error=$this->line->error;
     
    -	            $this->db->rollback();
    -	            return -1;
    -            }
    -        }
    -        else
    -        {
    -            $this->error=get_class($this)."::updateline Order status makes operation forbidden";
    -        	$this->errors=array('OrderStatusMakeOperationForbidden');
    -            return -2;
    -        }
    -    }
    +				$this->db->rollback();
    +				return -1;
    +			}
    +		}
    +		else
    +		{
    +			$this->error=get_class($this)."::updateline Order status makes operation forbidden";
    +			$this->errors=array('OrderStatusMakeOperationForbidden');
    +			return -2;
    +		}
    +	}
     
     	/**
     	 *      Update database
    @@ -3109,31 +3181,31 @@ class Commande extends CommonOrder
     		}
     	}
     
    -    /**
    -     *	Delete the customer order
    -     *
    -     *	@param	User	$user		User object
    -     *	@param	int		$notrigger	1=Does not execute triggers, 0= execute triggers
    -     * 	@return	int					<=0 if KO, >0 if OK
    -     */
    -    function delete($user, $notrigger=0)
    -    {
    -        global $conf, $langs;
    -        require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +	/**
    +	 *	Delete the customer order
    +	 *
    +	 *	@param	User	$user		User object
    +	 *	@param	int		$notrigger	1=Does not execute triggers, 0= execute triggers
    +	 * 	@return	int					<=0 if KO, >0 if OK
    +	 */
    +	function delete($user, $notrigger=0)
    +	{
    +		global $conf, $langs;
    +		require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
    -        $error = 0;
    +		$error = 0;
     
    -        dol_syslog(get_class($this) . "::delete ".$this->id, LOG_DEBUG);
    +		dol_syslog(get_class($this) . "::delete ".$this->id, LOG_DEBUG);
     
    -        $this->db->begin();
    +		$this->db->begin();
     
    -        if (! $error && ! $notrigger)
    -        {
    -            // Call trigger
    -            $result=$this->call_trigger('ORDER_DELETE',$user);
    -            if ($result < 0) $error++;
    -            // End call triggers
    -        }
    +		if (! $error && ! $notrigger)
    +		{
    +			// Call trigger
    +			$result=$this->call_trigger('ORDER_DELETE',$user);
    +			if ($result < 0) $error++;
    +			// End call triggers
    +		}
     
     		if ($this->nb_expedition() != 0)
     		{
    @@ -3141,311 +3213,318 @@ class Commande extends CommonOrder
     			$error++;
     		}
     
    -        if (! $error)
    -        {
    -        	// Delete order details
    -        	$sql = 'DELETE FROM '.MAIN_DB_PREFIX."commandedet WHERE fk_commande = ".$this->id;
    -        	if (! $this->db->query($sql) )
    -        	{
    -        		$error++;
    -        		$this->errors[]=$this->db->lasterror();
    -        	}
    -        }
    +		if (! $error)
    +		{
    +			// Delete order details
    +			$sql = 'DELETE FROM '.MAIN_DB_PREFIX."commandedet WHERE fk_commande = ".$this->id;
    +			if (! $this->db->query($sql) )
    +			{
    +				$error++;
    +				$this->errors[]=$this->db->lasterror();
    +			}
    +		}
     
    -        if (! $error)
    -        {
    -        	// Delete linked object
    -        	$res = $this->deleteObjectLinked();
    -        	if ($res < 0) $error++;
    -        }
    +		if (! $error)
    +		{
    +			// Delete linked object
    +			$res = $this->deleteObjectLinked();
    +			if ($res < 0) $error++;
    +		}
     
    -        if (! $error)
    -        {
    -        	// Delete linked contacts
    -        	$res = $this->delete_linked_contact();
    -        	if ($res < 0) $error++;
    -        }
    +		if (! $error)
    +		{
    +			// Delete linked contacts
    +			$res = $this->delete_linked_contact();
    +			if ($res < 0) $error++;
    +		}
     
    -        if (! $error)
    -        {
    -        	// Remove extrafields
    -        	if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) // For avoid conflicts if trigger used
    -        	{
    -        		$result=$this->deleteExtraFields();
    -        		if ($result < 0)
    -        		{
    -        			$error++;
    -        			dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR);
    -        		}
    -        	}
    -        }
    +		if (! $error)
    +		{
    +			// Remove extrafields
    +			if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) // For avoid conflicts if trigger used
    +			{
    +				$result=$this->deleteExtraFields();
    +				if ($result < 0)
    +				{
    +					$error++;
    +					dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR);
    +				}
    +			}
    +		}
     
    -        if (! $error)
    -        {
    -        	// Delete object
    -        	$sql = 'DELETE FROM '.MAIN_DB_PREFIX."commande WHERE rowid = ".$this->id;
    -        	if (! $this->db->query($sql) )
    -        	{
    -        		$error++;
    -        		$this->errors[]=$this->db->lasterror();
    -        	}
    -        }
    +		if (! $error)
    +		{
    +			// Delete object
    +			$sql = 'DELETE FROM '.MAIN_DB_PREFIX."commande WHERE rowid = ".$this->id;
    +			if (! $this->db->query($sql) )
    +			{
    +				$error++;
    +				$this->errors[]=$this->db->lasterror();
    +			}
    +		}
     
    -        if (! $error)
    -        {
    -        	// Remove directory with files
    -        	$comref = dol_sanitizeFileName($this->ref);
    -        	if ($conf->commande->dir_output && !empty($this->ref))
    -        	{
    -        		$dir = $conf->commande->dir_output . "/" . $comref ;
    -        		$file = $conf->commande->dir_output . "/" . $comref . "/" . $comref . ".pdf";
    -        		if (file_exists($file))	// We must delete all files before deleting directory
    -        		{
    -        			dol_delete_preview($this);
    +		if (! $error)
    +		{
    +			// Remove directory with files
    +			$comref = dol_sanitizeFileName($this->ref);
    +			if ($conf->commande->dir_output && !empty($this->ref))
    +			{
    +				$dir = $conf->commande->dir_output . "/" . $comref ;
    +				$file = $conf->commande->dir_output . "/" . $comref . "/" . $comref . ".pdf";
    +				if (file_exists($file))	// We must delete all files before deleting directory
    +				{
    +					dol_delete_preview($this);
     
    -        			if (! dol_delete_file($file,0,0,0,$this)) // For triggers
    -        			{
    -        				$this->db->rollback();
    -        				return 0;
    -        			}
    -        		}
    -        		if (file_exists($dir))
    -        		{
    -        			if (! dol_delete_dir_recursive($dir))
    -        			{
    -        				$this->error=$langs->trans("ErrorCanNotDeleteDir",$dir);
    -        				$this->db->rollback();
    -        				return 0;
    -        			}
    -        		}
    -        	}
    -        }
    +					if (! dol_delete_file($file,0,0,0,$this)) // For triggers
    +					{
    +						$this->db->rollback();
    +						return 0;
    +					}
    +				}
    +				if (file_exists($dir))
    +				{
    +					if (! dol_delete_dir_recursive($dir))
    +					{
    +						$this->error=$langs->trans("ErrorCanNotDeleteDir",$dir);
    +						$this->db->rollback();
    +						return 0;
    +					}
    +				}
    +			}
    +		}
     
    -        if (! $error)
    -        {
    -        	$this->db->commit();
    -        	return 1;
    -        }
    -        else
    -        {
    -	        foreach($this->errors as $errmsg)
    -	        {
    -		        $this->error.=($this->error?', '.$errmsg:$errmsg);
    -	        }
    -	        $this->db->rollback();
    -	        return -1*$error;
    -        }
    -    }
    +		if (! $error)
    +		{
    +			$this->db->commit();
    +			return 1;
    +		}
    +		else
    +		{
    +			foreach($this->errors as $errmsg)
    +			{
    +				$this->error.=($this->error?', '.$errmsg:$errmsg);
    +			}
    +			$this->db->rollback();
    +			return -1*$error;
    +		}
    +	}
     
     
    -    /**
    -     *	Load indicators for dashboard (this->nbtodo and this->nbtodolate)
    -     *
    -     *	@param		User	$user   Object user
    -     *	@return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
    -     */
    -    function load_board($user)
    -    {
    -        global $conf, $langs;
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Load indicators for dashboard (this->nbtodo and this->nbtodolate)
    +	 *
    +	 *	@param		User	$user   Object user
    +	 *	@return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
    +	 */
    +	function load_board($user)
    +	{
    +        // phpcs:enable
    +		global $conf, $langs;
     
    -        $clause = " WHERE";
    +		$clause = " WHERE";
     
    -        $sql = "SELECT c.rowid, c.date_creation as datec, c.date_commande, c.date_livraison as delivery_date, c.fk_statut";
    -        $sql.= " FROM ".MAIN_DB_PREFIX."commande as c";
    -        if (!$user->rights->societe->client->voir && !$user->societe_id)
    -        {
    -            $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON c.fk_soc = sc.fk_soc";
    -            $sql.= " WHERE sc.fk_user = " .$user->id;
    -            $clause = " AND";
    -        }
    -        $sql.= $clause." c.entity IN (".getEntity('commande').")";
    -        //$sql.= " AND c.fk_statut IN (1,2,3) AND c.facture = 0";
    -        $sql.= " AND ((c.fk_statut IN (".self::STATUS_VALIDATED.",".self::STATUS_SHIPMENTONPROCESS.")) OR (c.fk_statut = ".self::STATUS_CLOSED." AND c.facture = 0))";    // If status is 2 and facture=1, it must be selected
    -        if ($user->societe_id) $sql.=" AND c.fk_soc = ".$user->societe_id;
    +		$sql = "SELECT c.rowid, c.date_creation as datec, c.date_commande, c.date_livraison as delivery_date, c.fk_statut, c.total_ht";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."commande as c";
    +		if (!$user->rights->societe->client->voir && !$user->societe_id)
    +		{
    +			$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON c.fk_soc = sc.fk_soc";
    +			$sql.= " WHERE sc.fk_user = " .$user->id;
    +			$clause = " AND";
    +		}
    +		$sql.= $clause." c.entity IN (".getEntity('commande').")";
    +		//$sql.= " AND c.fk_statut IN (1,2,3) AND c.facture = 0";
    +		$sql.= " AND ((c.fk_statut IN (".self::STATUS_VALIDATED.",".self::STATUS_SHIPMENTONPROCESS.")) OR (c.fk_statut = ".self::STATUS_CLOSED." AND c.facture = 0))";    // If status is 2 and facture=1, it must be selected
    +		if ($user->societe_id) $sql.=" AND c.fk_soc = ".$user->societe_id;
     
    -        $resql=$this->db->query($sql);
    -        if ($resql)
    -        {
    -	        $response = new WorkboardResponse();
    -	        $response->warning_delay=$conf->commande->client->warning_delay/60/60/24;
    -	        $response->label=$langs->trans("OrdersToProcess");
    -	        $response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3&mainmenu=commercial&leftmenu=orders';
    -	        $response->img=img_object('',"order");
    +		$resql=$this->db->query($sql);
    +		if ($resql)
    +		{
    +			$response = new WorkboardResponse();
    +			$response->warning_delay=$conf->commande->client->warning_delay/60/60/24;
    +			$response->label=$langs->trans("OrdersToProcess");
    +			$response->url=DOL_URL_ROOT.'/commande/list.php?viewstatut=-3&mainmenu=commercial&leftmenu=orders';
    +			$response->img=img_object('',"order");
     
    -            $generic_commande = new Commande($this->db);
    +			$generic_commande = new Commande($this->db);
     
    -            while ($obj=$this->db->fetch_object($resql))
    -            {
    -                $response->nbtodo++;
    +			while ($obj=$this->db->fetch_object($resql))
    +			{
    +				$response->nbtodo++;
    +				$response->total+= $obj->total_ht;
     
    -                $generic_commande->statut = $obj->fk_statut;
    -                $generic_commande->date_commande = $this->db->jdate($obj->date_commande);
    -                $generic_commande->date_livraison = $this->db->jdate($obj->delivery_date);
    +				$generic_commande->statut = $obj->fk_statut;
    +				$generic_commande->date_commande = $this->db->jdate($obj->date_commande);
    +				$generic_commande->date_livraison = $this->db->jdate($obj->delivery_date);
     
    -                if ($generic_commande->hasDelay()) {
    -		            $response->nbtodolate++;
    -	            }
    -            }
    +				if ($generic_commande->hasDelay()) {
    +					$response->nbtodolate++;
    +				}
    +			}
     
    -            return $response;
    -        }
    -        else
    -        {
    -            $this->error=$this->db->error();
    -            return -1;
    -        }
    -    }
    +			return $response;
    +		}
    +		else
    +		{
    +			$this->error=$this->db->error();
    +			return -1;
    +		}
    +	}
     
    -    /**
    -     *	Return source label of order
    -     *
    -     *	@return     string      Label
    -     */
    -    function getLabelSource()
    -    {
    -        global $langs;
    +	/**
    +	 *	Return source label of order
    +	 *
    +	 *	@return     string      Label
    +	 */
    +	function getLabelSource()
    +	{
    +		global $langs;
     
    -        $label=$langs->trans('OrderSource'.$this->source);
    +		$label=$langs->trans('OrderSource'.$this->source);
     
    -        if ($label == 'OrderSource') return '';
    -        return $label;
    -    }
    +		if ($label == 'OrderSource') return '';
    +		return $label;
    +	}
     
    -    /**
    -     *	Return status label of Order
    -     *
    -     *	@param      int		$mode       0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto, 6=Long label + Picto
    -     *	@return     string      		Label of status
    -     */
    -    function getLibStatut($mode)
    -    {
    -        return $this->LibStatut($this->statut, $this->billed, $mode);
    -    }
    +	/**
    +	 *	Return status label of Order
    +	 *
    +	 *	@param      int		$mode       0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto, 6=Long label + Picto
    +	 *	@return     string      		Label of status
    +	 */
    +	function getLibStatut($mode)
    +	{
    +		return $this->LibStatut($this->statut, $this->billed, $mode);
    +	}
     
    -    /**
    -     *	Return label of status
    -     *
    -     *	@param		int		$statut      	  Id statut
    -     *  @param      int		$billed    		  If invoiced
    -     *	@param      int		$mode        	  0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto, 6=Long label + Picto
    -     *  @param      int     $donotshowbilled  Do not show billed status after order status
    -     *  @return     string					  Label of status
    -     */
    -    function LibStatut($statut,$billed,$mode,$donotshowbilled=0)
    -    {
    -        global $langs, $conf;
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Return label of status
    +	 *
    +	 *	@param		int		$statut      	  Id statut
    +	 *  @param      int		$billed    		  If invoiced
    +	 *	@param      int		$mode        	  0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto, 6=Long label + Picto
    +	 *  @param      int     $donotshowbilled  Do not show billed status after order status
    +	 *  @return     string					  Label of status
    +	 */
    +	function LibStatut($statut,$billed,$mode,$donotshowbilled=0)
    +	{
    +        // phpcs:enable
    +		global $langs, $conf;
     
    -        $billedtext = '';
    -        if (empty($donotshowbilled)) $billedtext .= ($billed?' - '.$langs->trans("Billed"):'');
    +		$billedtext = '';
    +		if (empty($donotshowbilled)) $billedtext .= ($billed?' - '.$langs->trans("Billed"):'');
     
    -        //print 'x'.$statut.'-'.$billed;
    -        if ($mode == 0)
    -        {
    -            if ($statut==self::STATUS_CANCELED) return $langs->trans('StatusOrderCanceled');
    -            if ($statut==self::STATUS_DRAFT) return $langs->trans('StatusOrderDraft');
    -            if ($statut==self::STATUS_VALIDATED) return $langs->trans('StatusOrderValidated').$billedtext;
    -            if ($statut==self::STATUS_SHIPMENTONPROCESS) return $langs->trans('StatusOrderSentShort').$billedtext;
    -            if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderToBill');
    -            if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderProcessed').$billedtext;
    -            if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderDelivered');
    -        }
    -        elseif ($mode == 1)
    -        {
    -            if ($statut==self::STATUS_CANCELED) return $langs->trans('StatusOrderCanceledShort');
    -            if ($statut==self::STATUS_DRAFT) return $langs->trans('StatusOrderDraftShort');
    -            if ($statut==self::STATUS_VALIDATED) return $langs->trans('StatusOrderValidatedShort').$billedtext;
    -            if ($statut==self::STATUS_SHIPMENTONPROCESS) return $langs->trans('StatusOrderSentShort').$billedtext;
    -            if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderToBillShort');
    -            if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderProcessed').$billedtext;
    -            if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderDelivered');
    -        }
    -        elseif ($mode == 2)
    -        {
    -            if ($statut==self::STATUS_CANCELED) return img_picto($langs->trans('StatusOrderCanceled'),'statut5').' '.$langs->trans('StatusOrderCanceledShort');
    -            if ($statut==self::STATUS_DRAFT) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$langs->trans('StatusOrderDraftShort');
    -            if ($statut==self::STATUS_VALIDATED) return img_picto($langs->trans('StatusOrderValidated'),'statut1').' '.$langs->trans('StatusOrderValidatedShort').$billedtext;
    -            if ($statut==self::STATUS_SHIPMENTONPROCESS) return img_picto($langs->trans('StatusOrderSent'),'statut3').' '.$langs->trans('StatusOrderSentShort').$billedtext;
    -            if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut4').' '.$langs->trans('StatusOrderToBillShort');
    -            if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed').$billedtext,'statut6').' '.$langs->trans('StatusOrderProcessed').$billedtext;
    -            if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderDelivered'),'statut6').' '.$langs->trans('StatusOrderDeliveredShort');
    -        }
    -        elseif ($mode == 3)
    -        {
    -            if ($statut==self::STATUS_CANCELED) return img_picto($langs->trans('StatusOrderCanceled'),'statut5');
    -            if ($statut==self::STATUS_DRAFT) return img_picto($langs->trans('StatusOrderDraft'),'statut0');
    -            if ($statut==self::STATUS_VALIDATED) return img_picto($langs->trans('StatusOrderValidated').$billedtext,'statut1');
    -            if ($statut==self::STATUS_SHIPMENTONPROCESS) return img_picto($langs->trans('StatusOrderSentShort').$billedtext,'statut3');
    -            if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut4');
    -            if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed').$billedtext,'statut6');
    -            if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderDelivered'),'statut6');
    -        }
    -        elseif ($mode == 4)
    -        {
    -            if ($statut==self::STATUS_CANCELED) return img_picto($langs->trans('StatusOrderCanceled'),'statut5').' '.$langs->trans('StatusOrderCanceled');
    -            if ($statut==self::STATUS_DRAFT) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$langs->trans('StatusOrderDraft');
    -            if ($statut==self::STATUS_VALIDATED) return img_picto($langs->trans('StatusOrderValidated').$billedtext,'statut1').' '.$langs->trans('StatusOrderValidated').$billedtext;
    -            if ($statut==self::STATUS_SHIPMENTONPROCESS) return img_picto($langs->trans('StatusOrderSentShort').$billedtext,'statut3').' '.$langs->trans('StatusOrderSent').$billedtext;
    -            if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut4').' '.$langs->trans('StatusOrderToBill');
    -            if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessedShort').$billedtext,'statut6').' '.$langs->trans('StatusOrderProcessed').$billedtext;
    -            if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderDelivered'),'statut6').' '.$langs->trans('StatusOrderDelivered');
    -        }
    -        elseif ($mode == 5)
    -        {
    -            if ($statut==self::STATUS_CANCELED) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderCanceledShort').' </span>'.img_picto($langs->trans('StatusOrderCanceled'),'statut5');
    -            if ($statut==self::STATUS_DRAFT) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderDraftShort').' </span>'.img_picto($langs->trans('StatusOrderDraft'),'statut0');
    -            if ($statut==self::STATUS_VALIDATED) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderValidatedShort').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderValidated').$billedtext,'statut1');
    -            if ($statut==self::STATUS_SHIPMENTONPROCESS) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderSentShort').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderSent').$billedtext,'statut3');
    -            if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderToBillShort').' </span>'.img_picto($langs->trans('StatusOrderToBill'),'statut4');
    -            if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderProcessedShort').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderProcessed').$billedtext,'statut6');
    -            if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderDeliveredShort').' </span>'.img_picto($langs->trans('StatusOrderDelivered'),'statut6');
    -        }
    -        elseif ($mode == 6)
    -        {
    -        	if ($statut==self::STATUS_CANCELED) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderCanceled').' </span>'.img_picto($langs->trans('StatusOrderCanceled'),'statut5');
    -        	if ($statut==self::STATUS_DRAFT) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderDraft').' </span>'.img_picto($langs->trans('StatusOrderDraft'),'statut0');
    -        	if ($statut==self::STATUS_VALIDATED) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderValidated').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderValidated').$billedtext,'statut1');
    -        	if ($statut==self::STATUS_SHIPMENTONPROCESS) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderSent').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderSent').$billedtext,'statut3');
    -        	if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderToBill').' </span>'.img_picto($langs->trans('StatusOrderToBill'),'statut4');
    -        	if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderProcessed').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderProcessed').$billedtext,'statut6');
    -        	if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderDelivered').' </span>'.img_picto($langs->trans('StatusOrderDelivered'),'statut6');
    -        }
    -
    -    }
    +		//print 'x'.$statut.'-'.$billed;
    +		if ($mode == 0)
    +		{
    +			if ($statut==self::STATUS_CANCELED) return $langs->trans('StatusOrderCanceled');
    +			if ($statut==self::STATUS_DRAFT) return $langs->trans('StatusOrderDraft');
    +			if ($statut==self::STATUS_VALIDATED) return $langs->trans('StatusOrderValidated').$billedtext;
    +			if ($statut==self::STATUS_SHIPMENTONPROCESS) return $langs->trans('StatusOrderSentShort').$billedtext;
    +			if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderToBill');
    +			if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderProcessed').$billedtext;
    +			if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderDelivered');
    +		}
    +		elseif ($mode == 1)
    +		{
    +			if ($statut==self::STATUS_CANCELED) return $langs->trans('StatusOrderCanceledShort');
    +			if ($statut==self::STATUS_DRAFT) return $langs->trans('StatusOrderDraftShort');
    +			if ($statut==self::STATUS_VALIDATED) return $langs->trans('StatusOrderValidatedShort').$billedtext;
    +			if ($statut==self::STATUS_SHIPMENTONPROCESS) return $langs->trans('StatusOrderSentShort').$billedtext;
    +			if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderToBillShort');
    +			if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderProcessed').$billedtext;
    +			if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return $langs->trans('StatusOrderDelivered');
    +		}
    +		elseif ($mode == 2)
    +		{
    +			if ($statut==self::STATUS_CANCELED) return img_picto($langs->trans('StatusOrderCanceled'),'statut5').' '.$langs->trans('StatusOrderCanceledShort');
    +			if ($statut==self::STATUS_DRAFT) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$langs->trans('StatusOrderDraftShort');
    +			if ($statut==self::STATUS_VALIDATED) return img_picto($langs->trans('StatusOrderValidated'),'statut1').' '.$langs->trans('StatusOrderValidatedShort').$billedtext;
    +			if ($statut==self::STATUS_SHIPMENTONPROCESS) return img_picto($langs->trans('StatusOrderSent'),'statut3').' '.$langs->trans('StatusOrderSentShort').$billedtext;
    +			if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut4').' '.$langs->trans('StatusOrderToBillShort');
    +			if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed').$billedtext,'statut6').' '.$langs->trans('StatusOrderProcessed').$billedtext;
    +			if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderDelivered'),'statut6').' '.$langs->trans('StatusOrderDeliveredShort');
    +		}
    +		elseif ($mode == 3)
    +		{
    +			if ($statut==self::STATUS_CANCELED) return img_picto($langs->trans('StatusOrderCanceled'),'statut5');
    +			if ($statut==self::STATUS_DRAFT) return img_picto($langs->trans('StatusOrderDraft'),'statut0');
    +			if ($statut==self::STATUS_VALIDATED) return img_picto($langs->trans('StatusOrderValidated').$billedtext,'statut1');
    +			if ($statut==self::STATUS_SHIPMENTONPROCESS) return img_picto($langs->trans('StatusOrderSentShort').$billedtext,'statut3');
    +			if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut4');
    +			if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessed').$billedtext,'statut6');
    +			if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderDelivered'),'statut6');
    +		}
    +		elseif ($mode == 4)
    +		{
    +			if ($statut==self::STATUS_CANCELED) return img_picto($langs->trans('StatusOrderCanceled'),'statut5').' '.$langs->trans('StatusOrderCanceled');
    +			if ($statut==self::STATUS_DRAFT) return img_picto($langs->trans('StatusOrderDraft'),'statut0').' '.$langs->trans('StatusOrderDraft');
    +			if ($statut==self::STATUS_VALIDATED) return img_picto($langs->trans('StatusOrderValidated').$billedtext,'statut1').' '.$langs->trans('StatusOrderValidated').$billedtext;
    +			if ($statut==self::STATUS_SHIPMENTONPROCESS) return img_picto($langs->trans('StatusOrderSentShort').$billedtext,'statut3').' '.$langs->trans('StatusOrderSent').$billedtext;
    +			if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderToBill'),'statut4').' '.$langs->trans('StatusOrderToBill');
    +			if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderProcessedShort').$billedtext,'statut6').' '.$langs->trans('StatusOrderProcessed').$billedtext;
    +			if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return img_picto($langs->trans('StatusOrderDelivered'),'statut6').' '.$langs->trans('StatusOrderDelivered');
    +		}
    +		elseif ($mode == 5)
    +		{
    +			if ($statut==self::STATUS_CANCELED) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderCanceledShort').' </span>'.img_picto($langs->trans('StatusOrderCanceled'),'statut5');
    +			if ($statut==self::STATUS_DRAFT) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderDraftShort').' </span>'.img_picto($langs->trans('StatusOrderDraft'),'statut0');
    +			if ($statut==self::STATUS_VALIDATED) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderValidatedShort').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderValidated').$billedtext,'statut1');
    +			if ($statut==self::STATUS_SHIPMENTONPROCESS) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderSentShort').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderSent').$billedtext,'statut3');
    +			if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderToBillShort').' </span>'.img_picto($langs->trans('StatusOrderToBill'),'statut4');
    +			if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderProcessedShort').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderProcessed').$billedtext,'statut6');
    +			if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderDeliveredShort').' </span>'.img_picto($langs->trans('StatusOrderDelivered'),'statut6');
    +		}
    +		elseif ($mode == 6)
    +		{
    +			if ($statut==self::STATUS_CANCELED) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderCanceled').' </span>'.img_picto($langs->trans('StatusOrderCanceled'),'statut5');
    +			if ($statut==self::STATUS_DRAFT) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderDraft').' </span>'.img_picto($langs->trans('StatusOrderDraft'),'statut0');
    +			if ($statut==self::STATUS_VALIDATED) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderValidated').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderValidated').$billedtext,'statut1');
    +			if ($statut==self::STATUS_SHIPMENTONPROCESS) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderSent').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderSent').$billedtext,'statut3');
    +			if ($statut==self::STATUS_CLOSED && (! $billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderToBill').' </span>'.img_picto($langs->trans('StatusOrderToBill'),'statut4');
    +			if ($statut==self::STATUS_CLOSED && ($billed && empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderProcessed').$billedtext.' </span>'.img_picto($langs->trans('StatusOrderProcessed').$billedtext,'statut6');
    +			if ($statut==self::STATUS_CLOSED && (! empty($conf->global->WORKFLOW_BILL_ON_SHIPMENT))) return '<span class="hideonsmartphone">'.$langs->trans('StatusOrderDelivered').' </span>'.img_picto($langs->trans('StatusOrderDelivered'),'statut6');
    +		}
    +	}
     
     
    -    /**
    -     *	Return clicable link of object (with eventually picto)
    -     *
    -     *	@param      int			$withpicto                Add picto into link
    -     *	@param      string	    $option                   Where point the link (0=> main card, 1,2 => shipment, 'nolink'=>No link)
    -     *	@param      int			$max          	          Max length to show
    -     *	@param      int			$short			          ???
    -     *  @param	    int   	    $notooltip		          1=Disable tooltip
    -     *  @param      int         $save_lastsearch_value    -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    -     *	@return     string          			          String with URL
    -     */
    -    function getNomUrl($withpicto=0, $option='', $max=0, $short=0, $notooltip=0, $save_lastsearch_value=-1)
    -    {
    -        global $conf, $langs, $user;
    +	/**
    +	 *	Return clicable link of object (with eventually picto)
    +	 *
    +	 *	@param      int			$withpicto                Add picto into link
    +	 *	@param      string	    $option                   Where point the link (0=> main card, 1,2 => shipment, 'nolink'=>No link)
    +	 *	@param      int			$max          	          Max length to show
    +	 *	@param      int			$short			          ???
    +	 *  @param	    int   	    $notooltip		          1=Disable tooltip
    +	 *  @param      int         $save_lastsearch_value    -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    +	 *	@return     string          			          String with URL
    +	 */
    +	function getNomUrl($withpicto=0, $option='', $max=0, $short=0, $notooltip=0, $save_lastsearch_value=-1)
    +	{
    +		global $conf, $langs, $user;
     
    -        if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
    +		if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
     
    -        $result='';
    +		$result='';
     
    -        if (! empty($conf->expedition->enabled) && ($option == '1' || $option == '2')) $url = DOL_URL_ROOT.'/expedition/shipment.php?id='.$this->id;
    -        else $url = DOL_URL_ROOT.'/commande/card.php?id='.$this->id;
    +		if (! empty($conf->expedition->enabled) && ($option == '1' || $option == '2')) $url = DOL_URL_ROOT.'/expedition/shipment.php?id='.$this->id;
    +		else $url = DOL_URL_ROOT.'/commande/card.php?id='.$this->id;
     
    -        if ($option !== 'nolink')
    -        {
    -            // Add param to save lastsearch_values or not
    -            $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    -            if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1;
    -            if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
    -        }
    +		if (!$user->rights->commande->lire)
    +			$option = 'nolink';
     
    -        if ($short) return $url;
    +		if ($option !== 'nolink')
    +		{
    +			// Add param to save lastsearch_values or not
    +			$add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    +			if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1;
    +			if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
    +		}
     
    -        $label = '';
    +		if ($short) return $url;
    +
    +		$label = '';
     
     		if ($user->rights->commande->lire) {
     			$label = '<u>'.$langs->trans("ShowOrder").'</u>';
    @@ -3465,225 +3544,231 @@ class Commande extends CommonOrder
     		$linkclose='';
     		if (empty($notooltip) && $user->rights->commande->lire)
     		{
    -		    if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
    -		    {
    -		        $label=$langs->trans("ShowOrder");
    -		        $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    -		    }
    -		    $linkclose.= ' title="'.dol_escape_htmltag($label, 1).'"';
    -		    $linkclose.=' class="classfortooltip"';
    +			if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
    +			{
    +				$label=$langs->trans("ShowOrder");
    +				$linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    +			}
    +			$linkclose.= ' title="'.dol_escape_htmltag($label, 1).'"';
    +			$linkclose.=' class="classfortooltip"';
     		}
     
    -        $linkstart = '<a href="'.$url.'"';
    -        $linkstart.=$linkclose.'>';
    -        $linkend='</a>';
    +		$linkstart = '<a href="'.$url.'"';
    +		$linkstart.=$linkclose.'>';
    +		$linkend='</a>';
     
    -        $result .= $linkstart;
    -        if ($withpicto) $result.=img_object(($notooltip?'':$label), $this->picto, ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
    -        if ($withpicto != 2) $result.= $this->ref;
    -        $result .= $linkend;
    +		if ($option === 'nolink') {
    +			$linkstart = '';
    +			$linkend = '';
    +		}
     
    -        return $result;
    -    }
    +		$result .= $linkstart;
    +		if ($withpicto) $result.=img_object(($notooltip?'':$label), $this->picto, ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
    +		if ($withpicto != 2) $result.= $this->ref;
    +		$result .= $linkend;
    +
    +		return $result;
    +	}
     
     
    -    /**
    -     *	Charge les informations d'ordre info dans l'objet commande
    -     *
    -     *	@param  int		$id       Id of order
    -     *	@return	void
    -     */
    -    function info($id)
    -    {
    -        $sql = 'SELECT c.rowid, date_creation as datec, tms as datem,';
    -        $sql.= ' date_valid as datev,';
    -        $sql.= ' date_cloture as datecloture,';
    -        $sql.= ' fk_user_author, fk_user_valid, fk_user_cloture';
    -        $sql.= ' FROM '.MAIN_DB_PREFIX.'commande as c';
    -        $sql.= ' WHERE c.rowid = '.$id;
    -        $result=$this->db->query($sql);
    -        if ($result)
    -        {
    -            if ($this->db->num_rows($result))
    -            {
    -                $obj = $this->db->fetch_object($result);
    -                $this->id = $obj->rowid;
    -                if ($obj->fk_user_author)
    -                {
    -                    $cuser = new User($this->db);
    -                    $cuser->fetch($obj->fk_user_author);
    -                    $this->user_creation   = $cuser;
    -                }
    +	/**
    +	 *	Charge les informations d'ordre info dans l'objet commande
    +	 *
    +	 *	@param  int		$id       Id of order
    +	 *	@return	void
    +	 */
    +	function info($id)
    +	{
    +		$sql = 'SELECT c.rowid, date_creation as datec, tms as datem,';
    +		$sql.= ' date_valid as datev,';
    +		$sql.= ' date_cloture as datecloture,';
    +		$sql.= ' fk_user_author, fk_user_valid, fk_user_cloture';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'commande as c';
    +		$sql.= ' WHERE c.rowid = '.$id;
    +		$result=$this->db->query($sql);
    +		if ($result)
    +		{
    +			if ($this->db->num_rows($result))
    +			{
    +				$obj = $this->db->fetch_object($result);
    +				$this->id = $obj->rowid;
    +				if ($obj->fk_user_author)
    +				{
    +					$cuser = new User($this->db);
    +					$cuser->fetch($obj->fk_user_author);
    +					$this->user_creation   = $cuser;
    +				}
     
    -                if ($obj->fk_user_valid)
    -                {
    -                    $vuser = new User($this->db);
    -                    $vuser->fetch($obj->fk_user_valid);
    -                    $this->user_validation = $vuser;
    -                }
    +				if ($obj->fk_user_valid)
    +				{
    +					$vuser = new User($this->db);
    +					$vuser->fetch($obj->fk_user_valid);
    +					$this->user_validation = $vuser;
    +				}
     
    -                if ($obj->fk_user_cloture)
    -                {
    -                    $cluser = new User($this->db);
    -                    $cluser->fetch($obj->fk_user_cloture);
    -                    $this->user_cloture   = $cluser;
    -                }
    +				if ($obj->fk_user_cloture)
    +				{
    +					$cluser = new User($this->db);
    +					$cluser->fetch($obj->fk_user_cloture);
    +					$this->user_cloture   = $cluser;
    +				}
     
    -                $this->date_creation     = $this->db->jdate($obj->datec);
    -                $this->date_modification = $this->db->jdate($obj->datem);
    -                $this->date_validation   = $this->db->jdate($obj->datev);
    -                $this->date_cloture      = $this->db->jdate($obj->datecloture);
    -            }
    +				$this->date_creation     = $this->db->jdate($obj->datec);
    +				$this->date_modification = $this->db->jdate($obj->datem);
    +				$this->date_validation   = $this->db->jdate($obj->datev);
    +				$this->date_cloture      = $this->db->jdate($obj->datecloture);
    +			}
     
    -            $this->db->free($result);
    -
    -        }
    -        else
    -        {
    -            dol_print_error($this->db);
    -        }
    -    }
    +			$this->db->free($result);
    +		}
    +		else
    +		{
    +			dol_print_error($this->db);
    +		}
    +	}
     
     
    -    /**
    -     *  Initialise an instance with random values.
    -     *  Used to build previews or test instances.
    -     *	id must be 0 if object instance is a specimen.
    -     *
    -     *  @return	void
    -     */
    -    function initAsSpecimen()
    -    {
    -        global $langs;
    +	/**
    +	 *  Initialise an instance with random values.
    +	 *  Used to build previews or test instances.
    +	 *	id must be 0 if object instance is a specimen.
    +	 *
    +	 *  @return	void
    +	 */
    +	function initAsSpecimen()
    +	{
    +		global $langs;
     
    -        dol_syslog(get_class($this)."::initAsSpecimen");
    +		dol_syslog(get_class($this)."::initAsSpecimen");
     
    -        // Load array of products prodids
    -        $num_prods = 0;
    -        $prodids = array();
    -        $sql = "SELECT rowid";
    -        $sql.= " FROM ".MAIN_DB_PREFIX."product";
    -        $sql.= " WHERE entity IN (".getEntity('product').")";
    -        $resql = $this->db->query($sql);
    -        if ($resql)
    -        {
    -            $num_prods = $this->db->num_rows($resql);
    -            $i = 0;
    -            while ($i < $num_prods)
    -            {
    -                $i++;
    -                $row = $this->db->fetch_row($resql);
    -                $prodids[$i] = $row[0];
    -            }
    -        }
    +		// Load array of products prodids
    +		$num_prods = 0;
    +		$prodids = array();
    +		$sql = "SELECT rowid";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."product";
    +		$sql.= " WHERE entity IN (".getEntity('product').")";
    +		$resql = $this->db->query($sql);
    +		if ($resql)
    +		{
    +			$num_prods = $this->db->num_rows($resql);
    +			$i = 0;
    +			while ($i < $num_prods)
    +			{
    +				$i++;
    +				$row = $this->db->fetch_row($resql);
    +				$prodids[$i] = $row[0];
    +			}
    +		}
     
    -        // Initialise parametres
    -        $this->id=0;
    -        $this->ref = 'SPECIMEN';
    -        $this->specimen=1;
    -        $this->socid = 1;
    -        $this->date = time();
    -        $this->date_lim_reglement=$this->date+3600*24*30;
    -        $this->cond_reglement_code = 'RECEP';
    -        $this->mode_reglement_code = 'CHQ';
    -        $this->availability_code   = 'DSP';
    -        $this->demand_reason_code  = 'SRC_00';
    -        $this->note_public='This is a comment (public)';
    -        $this->note_private='This is a comment (private)';
    -        // Lines
    -        $nbp = 5;
    -        $xnbp = 0;
    -        while ($xnbp < $nbp)
    -        {
    -            $line=new OrderLine($this->db);
    +		// Initialise parametres
    +		$this->id=0;
    +		$this->ref = 'SPECIMEN';
    +		$this->specimen=1;
    +		$this->socid = 1;
    +		$this->date = time();
    +		$this->date_lim_reglement=$this->date+3600*24*30;
    +		$this->cond_reglement_code = 'RECEP';
    +		$this->mode_reglement_code = 'CHQ';
    +		$this->availability_code   = 'DSP';
    +		$this->demand_reason_code  = 'SRC_00';
    +		$this->note_public='This is a comment (public)';
    +		$this->note_private='This is a comment (private)';
    +		// Lines
    +		$nbp = 5;
    +		$xnbp = 0;
    +		while ($xnbp < $nbp)
    +		{
    +			$line=new OrderLine($this->db);
     
    -            $line->desc=$langs->trans("Description")." ".$xnbp;
    -            $line->qty=1;
    -            $line->subprice=100;
    -            $line->price=100;
    -            $line->tva_tx=20;
    -            if ($xnbp == 2)
    -            {
    -                $line->total_ht=50;
    -                $line->total_ttc=60;
    -                $line->total_tva=10;
    -                $line->remise_percent=50;
    -            }
    -            else
    -            {
    -                $line->total_ht=100;
    -                $line->total_ttc=120;
    -                $line->total_tva=20;
    -                $line->remise_percent=0;
    -            }
    -            if ($num_prods > 0)
    -            {
    -            	$prodid = mt_rand(1, $num_prods);
    -            	$line->fk_product=$prodids[$prodid];
    +			$line->desc=$langs->trans("Description")." ".$xnbp;
    +			$line->qty=1;
    +			$line->subprice=100;
    +			$line->price=100;
    +			$line->tva_tx=20;
    +			if ($xnbp == 2)
    +			{
    +				$line->total_ht=50;
    +				$line->total_ttc=60;
    +				$line->total_tva=10;
    +				$line->remise_percent=50;
    +			}
    +			else
    +			{
    +				$line->total_ht=100;
    +				$line->total_ttc=120;
    +				$line->total_tva=20;
    +				$line->remise_percent=0;
    +			}
    +			if ($num_prods > 0)
    +			{
    +				$prodid = mt_rand(1, $num_prods);
    +				$line->fk_product=$prodids[$prodid];
     				$line->product_ref='SPECIMEN';
    -            }
    +			}
     
    -            $this->lines[$xnbp]=$line;
    +			$this->lines[$xnbp]=$line;
     
    -            $this->total_ht       += $line->total_ht;
    -            $this->total_tva      += $line->total_tva;
    -            $this->total_ttc      += $line->total_ttc;
    +			$this->total_ht       += $line->total_ht;
    +			$this->total_tva      += $line->total_tva;
    +			$this->total_ttc      += $line->total_ttc;
     
    -            $xnbp++;
    -        }
    -    }
    +			$xnbp++;
    +		}
    +	}
     
     
    -    /**
    -     *	Charge indicateurs this->nb de tableau de bord
    -     *
    -     *	@return     int         <0 si ko, >0 si ok
    -     */
    -    function load_state_board()
    -    {
    -        global $user;
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Charge indicateurs this->nb de tableau de bord
    +	 *
    +	 *	@return     int         <0 si ko, >0 si ok
    +	 */
    +	function load_state_board()
    +	{
    +        // phpcs:enable
    +		global $user;
     
    -        $this->nb=array();
    -        $clause = "WHERE";
    +		$this->nb=array();
    +		$clause = "WHERE";
     
    -        $sql = "SELECT count(co.rowid) as nb";
    -        $sql.= " FROM ".MAIN_DB_PREFIX."commande as co";
    -        $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON co.fk_soc = s.rowid";
    -        if (!$user->rights->societe->client->voir && !$user->societe_id)
    -        {
    -            $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc";
    -            $sql.= " WHERE sc.fk_user = " .$user->id;
    -            $clause = "AND";
    -        }
    -        $sql.= " ".$clause." co.entity IN (".getEntity('commande').")";
    +		$sql = "SELECT count(co.rowid) as nb";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."commande as co";
    +		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON co.fk_soc = s.rowid";
    +		if (!$user->rights->societe->client->voir && !$user->societe_id)
    +		{
    +			$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON s.rowid = sc.fk_soc";
    +			$sql.= " WHERE sc.fk_user = " .$user->id;
    +			$clause = "AND";
    +		}
    +		$sql.= " ".$clause." co.entity IN (".getEntity('commande').")";
     
    -        $resql=$this->db->query($sql);
    -        if ($resql)
    -        {
    -            while ($obj=$this->db->fetch_object($resql))
    -            {
    -                $this->nb["orders"]=$obj->nb;
    -            }
    -            $this->db->free($resql);
    -            return 1;
    -        }
    -        else
    -        {
    -            dol_print_error($this->db);
    -            $this->error=$this->db->error();
    -            return -1;
    -        }
    -    }
    +		$resql=$this->db->query($sql);
    +		if ($resql)
    +		{
    +			while ($obj=$this->db->fetch_object($resql))
    +			{
    +				$this->nb["orders"]=$obj->nb;
    +			}
    +			$this->db->free($resql);
    +			return 1;
    +		}
    +		else
    +		{
    +			dol_print_error($this->db);
    +			$this->error=$this->db->error();
    +			return -1;
    +		}
    +	}
     
    -    /**
    +	/**
     	 * 	Create an array of order lines
     	 *
     	 * 	@return int		>0 if OK, <0 if KO
    -     */
    -    function getLinesArray()
    -    {
    -        return $this->fetch_lines();
    -    }
    +	 */
    +	function getLinesArray()
    +	{
    +		return $this->fetch_lines();
    +	}
     
     	/**
     	 *  Create a document onto disk according to template module.
    @@ -3693,7 +3778,7 @@ class Commande extends CommonOrder
     	 *  @param      int			$hidedetails    Hide details of lines
     	 *  @param      int			$hidedesc       Hide description
     	 *  @param      int			$hideref        Hide ref
    -         *  @param   null|array  $moreparams     Array to provide more information
    +	 *  @param      null|array  $moreparams     Array to provide more information
     	 *  @return     int         				0 if KO, 1 if OK
     	 */
     	public function generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
    @@ -3730,45 +3815,45 @@ class Commande extends CommonOrder
     	public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
     	{
     		$tables = array(
    -			'commande'
    +		'commande'
     		);
     
     		return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
     	}
     
    -    /**
    -     * Is the customer order delayed?
    -     *
    -     * @return bool     true if late, false if not
    -     */
    -    public function hasDelay()
    -    {
    -        global $conf;
    +	/**
    +	 * Is the customer order delayed?
    +	 *
    +	 * @return bool     true if late, false if not
    +	 */
    +	public function hasDelay()
    +	{
    +		global $conf;
     
    -        if (! ($this->statut > Commande::STATUS_DRAFT && $this->statut < Commande::STATUS_CLOSED)) {
    -            return false;   // Never late if not inside this status range
    -        }
    +		if (! ($this->statut > Commande::STATUS_DRAFT && $this->statut < Commande::STATUS_CLOSED)) {
    +			return false;   // Never late if not inside this status range
    +		}
     
    -        $now = dol_now();
    +		$now = dol_now();
     
    -        return max($this->date_commande, $this->date_livraison) < ($now - $conf->commande->client->warning_delay);
    -    }
    +		return max($this->date_commande, $this->date_livraison) < ($now - $conf->commande->client->warning_delay);
    +	}
     
    -    /**
    -     * Show the customer delayed info
    -     *
    -     * @return string       Show delayed information
    -     */
    -    public function showDelay()
    -    {
    -        global $conf, $langs;
    +	/**
    +	 * Show the customer delayed info
    +	 *
    +	 * @return string       Show delayed information
    +	 */
    +	public function showDelay()
    +	{
    +		global $conf, $langs;
     
    -        if (empty($this->date_livraison)) $text=$langs->trans("OrderDate").' '.dol_print_date($this->date_commande, 'day');
    -        else $text=$text=$langs->trans("DeliveryDate").' '.dol_print_date($this->date_livraison, 'day');
    -        $text.=' '.($conf->commande->client->warning_delay>0?'+':'-').' '.round(abs($conf->commande->client->warning_delay)/3600/24,1).' '.$langs->trans("days").' < '.$langs->trans("Today");
    +		if (empty($this->date_livraison)) $text=$langs->trans("OrderDate").' '.dol_print_date($this->date_commande, 'day');
    +		else $text=$text=$langs->trans("DeliveryDate").' '.dol_print_date($this->date_livraison, 'day');
    +		$text.=' '.($conf->commande->client->warning_delay>0?'+':'-').' '.round(abs($conf->commande->client->warning_delay)/3600/24,1).' '.$langs->trans("days").' < '.$langs->trans("Today");
     
    -        return $text;
    -    }
    +		return $text;
    +	}
     }
     
     
    @@ -3777,10 +3862,14 @@ class Commande extends CommonOrder
      */
     class OrderLine extends CommonOrderLine
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='commandedet';
    +
     	public $table_element='commandedet';
     
    -    var $oldline;
    +	var $oldline;
     
     	/**
     	 * Id of parent order
    @@ -3796,12 +3885,17 @@ class OrderLine extends CommonOrderLine
     	 */
     	public $commande_id;
     
    -    // From llx_commandedet
    -    var $fk_parent_line;
    -    var $fk_facture;
    -    var $label;
    -    var $fk_remise_except;
    -    var $rang = 0;
    +	// From llx_commandedet
    +	var $fk_parent_line;
    +	var $fk_facture;
    +
    +	/**
    +	 * @var string Order lines label
    +	 */
    +	public $label;
    +
    +	var $fk_remise_except;
    +	var $rang = 0;
     	var $fk_fournprice;
     
     	/**
    @@ -3809,8 +3903,8 @@ class OrderLine extends CommonOrderLine
     	 * @var float
     	 */
     	var $pa_ht;
    -    var $marge_tx;
    -    var $marque_tx;
    +	var $marge_tx;
    +	var $marque_tx;
     
     	/**
     	 * @deprecated
    @@ -3818,88 +3912,89 @@ class OrderLine extends CommonOrderLine
     	 */
     	var $remise;
     
    -    // Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    -    // Start and end date of the line
    -    var $date_start;
    -    var $date_end;
    +	// Added by Matelli (See http://matelli.fr/showcases/patchs-dolibarr/add-dates-in-order-lines.html)
    +	// Start and end date of the line
    +	var $date_start;
    +	var $date_end;
     
    -    var $skip_update_total; // Skip update price total for special lines
    +	var $skip_update_total; // Skip update price total for special lines
     
     
    -    /**
    -     *      Constructor
    -     *
    -     *      @param     DoliDB	$db      handler d'acces base de donnee
    -     */
    -    function __construct($db)
    -    {
    -        $this->db= $db;
    -    }
    +	/**
    +	 *      Constructor
    +	 *
    +	 *      @param     DoliDB	$db      handler d'acces base de donnee
    +	 */
    +	function __construct($db)
    +	{
    +		$this->db= $db;
    +	}
     
    -    /**
    -     *  Load line order
    -     *
    -     *  @param  int		$rowid          Id line order
    -     *  @return	int						<0 if KO, >0 if OK
    -     */
    -    function fetch($rowid)
    -    {
    -        $sql = 'SELECT cd.rowid, cd.fk_commande, cd.fk_parent_line, cd.fk_product, cd.product_type, cd.label as custom_label, cd.description, cd.price, cd.qty, cd.tva_tx, cd.localtax1_tx, cd.localtax2_tx,';
    -        $sql.= ' cd.remise, cd.remise_percent, cd.fk_remise_except, cd.subprice,';
    -        $sql.= ' cd.info_bits, cd.total_ht, cd.total_tva, cd.total_localtax1, cd.total_localtax2, cd.total_ttc, cd.fk_product_fournisseur_price as fk_fournprice, cd.buy_price_ht as pa_ht, cd.rang, cd.special_code,';
    -	    $sql.= ' cd.fk_unit,';
    +	/**
    +	 *  Load line order
    +	 *
    +	 *  @param  int		$rowid          Id line order
    +	 *  @return	int						<0 if KO, >0 if OK
    +	 */
    +	function fetch($rowid)
    +	{
    +		$sql = 'SELECT cd.rowid, cd.fk_commande, cd.fk_parent_line, cd.fk_product, cd.product_type, cd.label as custom_label, cd.description, cd.price, cd.qty, cd.tva_tx, cd.localtax1_tx, cd.localtax2_tx,';
    +		$sql.= ' cd.remise, cd.remise_percent, cd.fk_remise_except, cd.subprice,';
    +		$sql.= ' cd.info_bits, cd.total_ht, cd.total_tva, cd.total_localtax1, cd.total_localtax2, cd.total_ttc, cd.fk_product_fournisseur_price as fk_fournprice, cd.buy_price_ht as pa_ht, cd.rang, cd.special_code,';
    +		$sql.= ' cd.fk_unit,';
     		$sql.= ' cd.fk_multicurrency, cd.multicurrency_code, cd.multicurrency_subprice, cd.multicurrency_total_ht, cd.multicurrency_total_tva, cd.multicurrency_total_ttc,';
    -        $sql.= ' p.ref as product_ref, p.label as product_libelle, p.description as product_desc, p.tobatch as product_tobatch,';
    -        $sql.= ' cd.date_start, cd.date_end';
    -        $sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as cd';
    -        $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON cd.fk_product = p.rowid';
    -        $sql.= ' WHERE cd.rowid = '.$rowid;
    -        $result = $this->db->query($sql);
    -        if ($result)
    -        {
    -            $objp = $this->db->fetch_object($result);
    -            $this->rowid            = $objp->rowid;
    -            $this->fk_commande      = $objp->fk_commande;
    -            $this->fk_parent_line   = $objp->fk_parent_line;
    -            $this->label            = $objp->custom_label;
    -            $this->desc             = $objp->description;
    -            $this->qty              = $objp->qty;
    -            $this->price            = $objp->price;
    -            $this->subprice         = $objp->subprice;
    -            $this->vat_src_code     = $objp->vat_src_code;
    -            $this->tva_tx           = $objp->tva_tx;
    -            $this->localtax1_tx		= $objp->localtax1_tx;
    -            $this->localtax2_tx		= $objp->localtax2_tx;
    -            $this->remise           = $objp->remise;
    -            $this->remise_percent   = $objp->remise_percent;
    -            $this->fk_remise_except = $objp->fk_remise_except;
    -            $this->fk_product       = $objp->fk_product;
    -            $this->product_type     = $objp->product_type;
    -            $this->info_bits        = $objp->info_bits;
    +		$sql.= ' p.ref as product_ref, p.label as product_libelle, p.description as product_desc, p.tobatch as product_tobatch,';
    +		$sql.= ' cd.date_start, cd.date_end';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'commandedet as cd';
    +		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'product as p ON cd.fk_product = p.rowid';
    +		$sql.= ' WHERE cd.rowid = '.$rowid;
    +		$result = $this->db->query($sql);
    +		if ($result)
    +		{
    +			$objp = $this->db->fetch_object($result);
    +			$this->rowid            = $objp->rowid;
    +			$this->id				= $objp->rowid;
    +			$this->fk_commande      = $objp->fk_commande;
    +			$this->fk_parent_line   = $objp->fk_parent_line;
    +			$this->label            = $objp->custom_label;
    +			$this->desc             = $objp->description;
    +			$this->qty              = $objp->qty;
    +			$this->price            = $objp->price;
    +			$this->subprice         = $objp->subprice;
    +			$this->vat_src_code     = $objp->vat_src_code;
    +			$this->tva_tx           = $objp->tva_tx;
    +			$this->localtax1_tx		= $objp->localtax1_tx;
    +			$this->localtax2_tx		= $objp->localtax2_tx;
    +			$this->remise           = $objp->remise;
    +			$this->remise_percent   = $objp->remise_percent;
    +			$this->fk_remise_except = $objp->fk_remise_except;
    +			$this->fk_product       = $objp->fk_product;
    +			$this->product_type     = $objp->product_type;
    +			$this->info_bits        = $objp->info_bits;
     			$this->special_code		= $objp->special_code;
    -            $this->total_ht         = $objp->total_ht;
    -            $this->total_tva        = $objp->total_tva;
    -            $this->total_localtax1  = $objp->total_localtax1;
    -            $this->total_localtax2  = $objp->total_localtax2;
    -            $this->total_ttc        = $objp->total_ttc;
    +			$this->total_ht         = $objp->total_ht;
    +			$this->total_tva        = $objp->total_tva;
    +			$this->total_localtax1  = $objp->total_localtax1;
    +			$this->total_localtax2  = $objp->total_localtax2;
    +			$this->total_ttc        = $objp->total_ttc;
     			$this->fk_fournprice	= $objp->fk_fournprice;
     			$marginInfos			= getMarginInfos($objp->subprice, $objp->remise_percent, $objp->tva_tx, $objp->localtax1_tx, $objp->localtax2_tx, $this->fk_fournprice, $objp->pa_ht);
     			$this->pa_ht			= $marginInfos[0];
     			$this->marge_tx			= $marginInfos[1];
     			$this->marque_tx		= $marginInfos[2];
    -            $this->special_code		= $objp->special_code;
    -            $this->rang             = $objp->rang;
    +			$this->special_code		= $objp->special_code;
    +			$this->rang             = $objp->rang;
     
    -            $this->ref				= $objp->product_ref;      // deprecated
    -            $this->product_ref		= $objp->product_ref;
    -            $this->libelle			= $objp->product_libelle;  // deprecated
    -            $this->product_label	= $objp->product_libelle;
    -            $this->product_desc     = $objp->product_desc;
    -            $this->product_tobatch  = $objp->product_tobatch;
    -            $this->fk_unit          = $objp->fk_unit;
    +			$this->ref				= $objp->product_ref;      // deprecated
    +			$this->product_ref		= $objp->product_ref;
    +			$this->libelle			= $objp->product_libelle;  // deprecated
    +			$this->product_label	= $objp->product_libelle;
    +			$this->product_desc     = $objp->product_desc;
    +			$this->product_tobatch  = $objp->product_tobatch;
    +			$this->fk_unit          = $objp->fk_unit;
     
    -            $this->date_start       = $this->db->jdate($objp->date_start);
    -            $this->date_end         = $this->db->jdate($objp->date_end);
    +			$this->date_start       = $this->db->jdate($objp->date_start);
    +			$this->date_end         = $this->db->jdate($objp->date_end);
     
     			$this->fk_multicurrency			= $objp->fk_multicurrency;
     			$this->multicurrency_code		= $objp->multicurrency_code;
    @@ -3908,38 +4003,38 @@ class OrderLine extends CommonOrderLine
     			$this->multicurrency_total_tva	= $objp->multicurrency_total_tva;
     			$this->multicurrency_total_ttc	= $objp->multicurrency_total_ttc;
     
    -            $this->db->free($result);
    +			$this->db->free($result);
     
    -            return 1;
    -        }
    -        else
    -        {
    -            $this->error = $this->db->lasterror();
    -            return -1;
    -        }
    -    }
    +			return 1;
    +		}
    +		else
    +		{
    +			$this->error = $this->db->lasterror();
    +			return -1;
    +		}
    +	}
     
    -    /**
    -     * 	Delete line in database
    -     *
    -     *	@param      User	$user        	User that modify
    +	/**
    +	 * 	Delete line in database
    +	 *
    +	 *	@param      User	$user        	User that modify
     	 *  @param      int		$notrigger	    0=launch triggers after, 1=disable triggers
    -     *	@return	 int  <0 si ko, >0 si ok
    -     */
    -    function delete($user=null, $notrigger=0)
    -    {
    -        global $conf, $user, $langs;
    +	 *	@return	 int  <0 si ko, >0 si ok
    +	 */
    +	function delete($user=null, $notrigger=0)
    +	{
    +		global $conf, $user, $langs;
     
     		$error=0;
     
    -	    $this->db->begin();
    +		$this->db->begin();
     
    -        $sql = 'DELETE FROM '.MAIN_DB_PREFIX."commandedet WHERE rowid=".$this->rowid;
    +		$sql = 'DELETE FROM '.MAIN_DB_PREFIX."commandedet WHERE rowid=".$this->rowid;
     
    -        dol_syslog("OrderLine::delete", LOG_DEBUG);
    -        $resql=$this->db->query($sql);
    -        if ($resql)
    -        {
    +		dol_syslog("OrderLine::delete", LOG_DEBUG);
    +		$resql=$this->db->query($sql);
    +		if ($resql)
    +		{
     			// Remove extrafields
     			if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) // For avoid conflicts if trigger used
     			{
    @@ -3954,63 +4049,63 @@ class OrderLine extends CommonOrderLine
     
     			if (! $error && ! $notrigger)
     			{
    -	            // Call trigger
    -	            $result=$this->call_trigger('LINEORDER_DELETE',$user);
    -	            if ($result < 0) $error++;
    -	            // End call triggers
    +				// Call trigger
    +				$result=$this->call_trigger('LINEORDER_DELETE',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
     			}
     
    -	        if (!$error) {
    -		        $this->db->commit();
    -		        return 1;
    -	        }
    +			if (!$error) {
    +				$this->db->commit();
    +				return 1;
    +			}
     
    -	        foreach($this->errors as $errmsg)
    -	        {
    -		        dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
    -		        $this->error.=($this->error?', '.$errmsg:$errmsg);
    -	        }
    -	        $this->db->rollback();
    -	        return -1*$error;
    -        }
    -        else
    -        {
    -            $this->error=$this->db->lasterror();
    -            return -1;
    -        }
    -    }
    +			foreach($this->errors as $errmsg)
    +			{
    +				dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
    +				$this->error.=($this->error?', '.$errmsg:$errmsg);
    +			}
    +			$this->db->rollback();
    +			return -1*$error;
    +		}
    +		else
    +		{
    +			$this->error=$this->db->lasterror();
    +			return -1;
    +		}
    +	}
     
    -    /**
    -     *	Insert line into database
    -     *
    -     *	@param      User	$user        	User that modify
    -     *	@param      int		$notrigger		1 = disable triggers
    -     *	@return		int						<0 if KO, >0 if OK
    -     */
    -    function insert($user=null, $notrigger=0)
    -    {
    -        global $langs, $conf;
    +	/**
    +	 *	Insert line into database
    +	 *
    +	 *	@param      User	$user        	User that modify
    +	 *	@param      int		$notrigger		1 = disable triggers
    +	 *	@return		int						<0 if KO, >0 if OK
    +	 */
    +	function insert($user=null, $notrigger=0)
    +	{
    +		global $langs, $conf;
     
     		$error=0;
     
    -        $pa_ht_isemptystring = (empty($this->pa_ht) && $this->pa_ht == ''); // If true, we can use a default value. If this->pa_ht = '0', we must use '0'.
    +		$pa_ht_isemptystring = (empty($this->pa_ht) && $this->pa_ht == ''); // If true, we can use a default value. If this->pa_ht = '0', we must use '0'.
     
    -        dol_syslog(get_class($this)."::insert rang=".$this->rang);
    +		dol_syslog(get_class($this)."::insert rang=".$this->rang);
     
    -        // Clean parameters
    -        if (empty($this->tva_tx)) $this->tva_tx=0;
    -        if (empty($this->localtax1_tx)) $this->localtax1_tx=0;
    -        if (empty($this->localtax2_tx)) $this->localtax2_tx=0;
    +		// Clean parameters
    +		if (empty($this->tva_tx)) $this->tva_tx=0;
    +		if (empty($this->localtax1_tx)) $this->localtax1_tx=0;
    +		if (empty($this->localtax2_tx)) $this->localtax2_tx=0;
     		if (empty($this->localtax1_type)) $this->localtax1_type=0;
     		if (empty($this->localtax2_type)) $this->localtax2_type=0;
    -        if (empty($this->total_localtax1)) $this->total_localtax1=0;
    -        if (empty($this->total_localtax2)) $this->total_localtax2=0;
    -        if (empty($this->rang)) $this->rang=0;
    -        if (empty($this->remise)) $this->remise=0;
    -        if (empty($this->remise_percent)) $this->remise_percent=0;
    -        if (empty($this->info_bits)) $this->info_bits=0;
    -        if (empty($this->special_code)) $this->special_code=0;
    -        if (empty($this->fk_parent_line)) $this->fk_parent_line=0;
    +		if (empty($this->total_localtax1)) $this->total_localtax1=0;
    +		if (empty($this->total_localtax2)) $this->total_localtax2=0;
    +		if (empty($this->rang)) $this->rang=0;
    +		if (empty($this->remise)) $this->remise=0;
    +		if (empty($this->remise_percent)) $this->remise_percent=0;
    +		if (empty($this->info_bits)) $this->info_bits=0;
    +		if (empty($this->special_code)) $this->special_code=0;
    +		if (empty($this->fk_parent_line)) $this->fk_parent_line=0;
     		if (empty($this->pa_ht)) $this->pa_ht=0;
     
     		// if buy price not defined, define buyprice as configured in margin admin
    @@ -4026,65 +4121,65 @@ class OrderLine extends CommonOrderLine
     			}
     		}
     
    -        // Check parameters
    -        if ($this->product_type < 0) return -1;
    +		// Check parameters
    +		if ($this->product_type < 0) return -1;
     
    -        $this->db->begin();
    +		$this->db->begin();
     
    -        // Insertion dans base de la ligne
    -        $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'commandedet';
    -        $sql.= ' (fk_commande, fk_parent_line, label, description, qty, ';
    -        $sql.= ' vat_src_code, tva_tx, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type,';
    -        $sql.= ' fk_product, product_type, remise_percent, subprice, price, remise, fk_remise_except,';
    -        $sql.= ' special_code, rang, fk_product_fournisseur_price, buy_price_ht,';
    -        $sql.= ' info_bits, total_ht, total_tva, total_localtax1, total_localtax2, total_ttc, date_start, date_end,';
    -	    $sql.= ' fk_unit';
    +		// Insertion dans base de la ligne
    +		$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'commandedet';
    +		$sql.= ' (fk_commande, fk_parent_line, label, description, qty, ';
    +		$sql.= ' vat_src_code, tva_tx, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type,';
    +		$sql.= ' fk_product, product_type, remise_percent, subprice, price, remise, fk_remise_except,';
    +		$sql.= ' special_code, rang, fk_product_fournisseur_price, buy_price_ht,';
    +		$sql.= ' info_bits, total_ht, total_tva, total_localtax1, total_localtax2, total_ttc, date_start, date_end,';
    +		$sql.= ' fk_unit';
     		$sql.= ', fk_multicurrency, multicurrency_code, multicurrency_subprice, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc';
     		$sql.= ')';
    -        $sql.= " VALUES (".$this->fk_commande.",";
    -        $sql.= " ".($this->fk_parent_line>0?"'".$this->db->escape($this->fk_parent_line)."'":"null").",";
    -        $sql.= " ".(! empty($this->label)?"'".$this->db->escape($this->label)."'":"null").",";
    -        $sql.= " '".$this->db->escape($this->desc)."',";
    -        $sql.= " '".price2num($this->qty)."',";
    -        $sql.= " ".(empty($this->vat_src_code)?"''":"'".$this->db->escape($this->vat_src_code)."'").",";
    -        $sql.= " '".price2num($this->tva_tx)."',";
    -        $sql.= " '".price2num($this->localtax1_tx)."',";
    -        $sql.= " '".price2num($this->localtax2_tx)."',";
    +		$sql.= " VALUES (".$this->fk_commande.",";
    +		$sql.= " ".($this->fk_parent_line>0?"'".$this->db->escape($this->fk_parent_line)."'":"null").",";
    +		$sql.= " ".(! empty($this->label)?"'".$this->db->escape($this->label)."'":"null").",";
    +		$sql.= " '".$this->db->escape($this->desc)."',";
    +		$sql.= " '".price2num($this->qty)."',";
    +		$sql.= " ".(empty($this->vat_src_code)?"''":"'".$this->db->escape($this->vat_src_code)."'").",";
    +		$sql.= " '".price2num($this->tva_tx)."',";
    +		$sql.= " '".price2num($this->localtax1_tx)."',";
    +		$sql.= " '".price2num($this->localtax2_tx)."',";
     		$sql.= " '".$this->db->escape($this->localtax1_type)."',";
     		$sql.= " '".$this->db->escape($this->localtax2_type)."',";
    -        $sql.= ' '.(! empty($this->fk_product)?$this->fk_product:"null").',';
    -        $sql.= " '".$this->db->escape($this->product_type)."',";
    -        $sql.= " '".price2num($this->remise_percent)."',";
    -        $sql.= " ".(price2num($this->subprice)!==''?price2num($this->subprice):"null").",";
    -        $sql.= " ".($this->price!=''?"'".price2num($this->price)."'":"null").",";
    -        $sql.= " '".price2num($this->remise)."',";
    -        $sql.= ' '.(! empty($this->fk_remise_except)?$this->fk_remise_except:"null").',';
    -        $sql.= ' '.$this->special_code.',';
    -        $sql.= ' '.$this->rang.',';
    +		$sql.= ' '.(! empty($this->fk_product)?$this->fk_product:"null").',';
    +		$sql.= " '".$this->db->escape($this->product_type)."',";
    +		$sql.= " '".price2num($this->remise_percent)."',";
    +		$sql.= " ".(price2num($this->subprice)!==''?price2num($this->subprice):"null").",";
    +		$sql.= " ".($this->price!=''?"'".price2num($this->price)."'":"null").",";
    +		$sql.= " '".price2num($this->remise)."',";
    +		$sql.= ' '.(! empty($this->fk_remise_except)?$this->fk_remise_except:"null").',';
    +		$sql.= ' '.$this->special_code.',';
    +		$sql.= ' '.$this->rang.',';
     		$sql.= ' '.(! empty($this->fk_fournprice)?$this->fk_fournprice:"null").',';
     		$sql.= ' '.price2num($this->pa_ht).',';
    -        $sql.= " '".$this->db->escape($this->info_bits)."',";
    -        $sql.= " ".price2num($this->total_ht).",";
    -        $sql.= " ".price2num($this->total_tva).",";
    -        $sql.= " ".price2num($this->total_localtax1).",";
    -        $sql.= " ".price2num($this->total_localtax2).",";
    -        $sql.= " ".price2num($this->total_ttc).",";
    -        $sql.= " ".(! empty($this->date_start)?"'".$this->db->idate($this->date_start)."'":"null").',';
    -        $sql.= " ".(! empty($this->date_end)?"'".$this->db->idate($this->date_end)."'":"null").',';
    -	    $sql.= ' '.(!$this->fk_unit ? 'NULL' : $this->fk_unit);
    +		$sql.= " '".$this->db->escape($this->info_bits)."',";
    +		$sql.= " ".price2num($this->total_ht).",";
    +		$sql.= " ".price2num($this->total_tva).",";
    +		$sql.= " ".price2num($this->total_localtax1).",";
    +		$sql.= " ".price2num($this->total_localtax2).",";
    +		$sql.= " ".price2num($this->total_ttc).",";
    +		$sql.= " ".(! empty($this->date_start)?"'".$this->db->idate($this->date_start)."'":"null").',';
    +		$sql.= " ".(! empty($this->date_end)?"'".$this->db->idate($this->date_end)."'":"null").',';
    +		$sql.= ' '.(!$this->fk_unit ? 'NULL' : $this->fk_unit);
     		$sql.= ", ".(! empty($this->fk_multicurrency) ? $this->fk_multicurrency : 'NULL');
     		$sql.= ", '".$this->db->escape($this->multicurrency_code)."'";
     		$sql.= ", ".$this->multicurrency_subprice;
     		$sql.= ", ".$this->multicurrency_total_ht;
     		$sql.= ", ".$this->multicurrency_total_tva;
     		$sql.= ", ".$this->multicurrency_total_ttc;
    -        $sql.= ')';
    +		$sql.= ')';
     
    -        dol_syslog(get_class($this)."::insert", LOG_DEBUG);
    -        $resql=$this->db->query($sql);
    -        if ($resql)
    -        {
    -            $this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'commandedet');
    +		dol_syslog(get_class($this)."::insert", LOG_DEBUG);
    +		$resql=$this->db->query($sql);
    +		if ($resql)
    +		{
    +			$this->rowid=$this->db->last_insert_id(MAIN_DB_PREFIX.'commandedet');
     
     			if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
     			{
    @@ -4096,42 +4191,42 @@ class OrderLine extends CommonOrderLine
     				}
     			}
     
    -            if (! $error && ! $notrigger)
    -            {
    -	            // Call trigger
    -	            $result=$this->call_trigger('LINEORDER_INSERT',$user);
    -	            if ($result < 0) $error++;
    -	            // End call triggers
    -            }
    +			if (! $error && ! $notrigger)
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('LINEORDER_INSERT',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
    +			}
     
    -	        if (!$error) {
    -		        $this->db->commit();
    -		        return 1;
    -	        }
    +			if (!$error) {
    +				$this->db->commit();
    +				return 1;
    +			}
     
    -	        foreach($this->errors as $errmsg)
    -	        {
    -		        dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
    -		        $this->error.=($this->error?', '.$errmsg:$errmsg);
    -	        }
    -	        $this->db->rollback();
    -	        return -1*$error;
    -        }
    -        else
    -        {
    -            $this->error=$this->db->error();
    -            $this->db->rollback();
    -            return -2;
    -        }
    -    }
    +			foreach($this->errors as $errmsg)
    +			{
    +				dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
    +				$this->error.=($this->error?', '.$errmsg:$errmsg);
    +			}
    +			$this->db->rollback();
    +			return -1*$error;
    +		}
    +		else
    +		{
    +			$this->error=$this->db->error();
    +			$this->db->rollback();
    +			return -2;
    +		}
    +	}
     
    -    /**
    -     *	Update the line object into db
    -     *
    -     *	@param      User	$user        	User that modify
    +	/**
    +	 *	Update the line object into db
    +	 *
    +	 *	@param      User	$user        	User that modify
     	 *	@param      int		$notrigger		1 = disable triggers
    -     *	@return		int		<0 si ko, >0 si ok
    -     */
    +	 *	@return		int		<0 si ko, >0 si ok
    +	 */
     	function update(User $user, $notrigger=0)
     	{
     		global $conf,$langs;
    @@ -4154,7 +4249,7 @@ class OrderLine extends CommonOrderLine
     		if (empty($this->remise)) $this->remise=0;
     		if (empty($this->remise_percent)) $this->remise_percent=0;
     		if (empty($this->info_bits)) $this->info_bits=0;
    -        if (empty($this->special_code)) $this->special_code=0;
    +		if (empty($this->special_code)) $this->special_code=0;
     		if (empty($this->product_type)) $this->product_type=0;
     		if (empty($this->fk_parent_line)) $this->fk_parent_line=0;
     		if (empty($this->pa_ht)) $this->pa_ht=0;
    @@ -4200,7 +4295,7 @@ class OrderLine extends CommonOrderLine
     		$sql.= " , fk_product_fournisseur_price=".(! empty($this->fk_fournprice)?$this->fk_fournprice:"null");
     		$sql.= " , buy_price_ht='".price2num($this->pa_ht)."'";
     		$sql.= " , info_bits=".$this->info_bits;
    -        $sql.= " , special_code=".$this->special_code;
    +		$sql.= " , special_code=".$this->special_code;
     		$sql.= " , date_start=".(! empty($this->date_start)?"'".$this->db->idate($this->date_start)."'":"null");
     		$sql.= " , date_end=".(! empty($this->date_end)?"'".$this->db->idate($this->date_end)."'":"null");
     		$sql.= " , product_type=".$this->product_type;
    @@ -4210,9 +4305,9 @@ class OrderLine extends CommonOrderLine
     
     		// Multicurrency
     		$sql.= " , multicurrency_subprice=".price2num($this->multicurrency_subprice)."";
    -        $sql.= " , multicurrency_total_ht=".price2num($this->multicurrency_total_ht)."";
    -        $sql.= " , multicurrency_total_tva=".price2num($this->multicurrency_total_tva)."";
    -        $sql.= " , multicurrency_total_ttc=".price2num($this->multicurrency_total_ttc)."";
    +		$sql.= " , multicurrency_total_ht=".price2num($this->multicurrency_total_ht)."";
    +		$sql.= " , multicurrency_total_tva=".price2num($this->multicurrency_total_tva)."";
    +		$sql.= " , multicurrency_total_ttc=".price2num($this->multicurrency_total_ttc)."";
     
     		$sql.= " WHERE rowid = ".$this->rowid;
     
    @@ -4232,10 +4327,10 @@ class OrderLine extends CommonOrderLine
     
     			if (! $error && ! $notrigger)
     			{
    -	            // Call trigger
    -	            $result=$this->call_trigger('LINEORDER_UPDATE',$user);
    -	            if ($result < 0) $error++;
    -	            // End call triggers
    +				// Call trigger
    +				$result=$this->call_trigger('LINEORDER_UPDATE',$user);
    +				if ($result < 0) $error++;
    +				// End call triggers
     			}
     
     			if (!$error) {
    @@ -4259,43 +4354,44 @@ class OrderLine extends CommonOrderLine
     		}
     	}
     
    -    /**
    -     *	Update DB line fields total_xxx
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Update DB line fields total_xxx
     	 *	Used by migration
    -     *
    -     *	@return		int		<0 if KO, >0 if OK
    -     */
    -    function update_total()
    -    {
    -        $this->db->begin();
    +	 *
    +	 *	@return		int		<0 if KO, >0 if OK
    +	 */
    +	function update_total()
    +	{
    +        // phpcs:enable
    +		$this->db->begin();
     
    -        // Clean parameters
    -        if (empty($this->total_localtax1)) $this->total_localtax1=0;
    -        if (empty($this->total_localtax2)) $this->total_localtax2=0;
    +		// Clean parameters
    +		if (empty($this->total_localtax1)) $this->total_localtax1=0;
    +		if (empty($this->total_localtax2)) $this->total_localtax2=0;
     
    -        // Mise a jour ligne en base
    -        $sql = "UPDATE ".MAIN_DB_PREFIX."commandedet SET";
    -        $sql.= " total_ht='".price2num($this->total_ht)."'";
    -        $sql.= ",total_tva='".price2num($this->total_tva)."'";
    -        $sql.= ",total_localtax1='".price2num($this->total_localtax1)."'";
    -        $sql.= ",total_localtax2='".price2num($this->total_localtax2)."'";
    -        $sql.= ",total_ttc='".price2num($this->total_ttc)."'";
    -        $sql.= " WHERE rowid = ".$this->rowid;
    +		// Mise a jour ligne en base
    +		$sql = "UPDATE ".MAIN_DB_PREFIX."commandedet SET";
    +		$sql.= " total_ht='".price2num($this->total_ht)."'";
    +		$sql.= ",total_tva='".price2num($this->total_tva)."'";
    +		$sql.= ",total_localtax1='".price2num($this->total_localtax1)."'";
    +		$sql.= ",total_localtax2='".price2num($this->total_localtax2)."'";
    +		$sql.= ",total_ttc='".price2num($this->total_ttc)."'";
    +		$sql.= " WHERE rowid = ".$this->rowid;
     
    -        dol_syslog("OrderLine::update_total", LOG_DEBUG);
    +		dol_syslog("OrderLine::update_total", LOG_DEBUG);
     
    -        $resql=$this->db->query($sql);
    -        if ($resql)
    -        {
    -            $this->db->commit();
    -            return 1;
    -        }
    -        else
    -        {
    -            $this->error=$this->db->error();
    -            $this->db->rollback();
    -            return -2;
    -        }
    -    }
    +		$resql=$this->db->query($sql);
    +		if ($resql)
    +		{
    +			$this->db->commit();
    +			return 1;
    +		}
    +		else
    +		{
    +			$this->error=$this->db->error();
    +			$this->db->rollback();
    +			return -2;
    +		}
    +	}
     }
    -
    diff --git a/htdocs/commande/class/commandestats.class.php b/htdocs/commande/class/commandestats.class.php
    index 6d9dde94bc4..3c6ec07c6cb 100644
    --- a/htdocs/commande/class/commandestats.class.php
    +++ b/htdocs/commande/class/commandestats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Marcos García        <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -34,6 +34,9 @@ include_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
      */
     class CommandeStats extends Stats
     {
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element;
     
     	var $socid;
    @@ -219,6 +222,5 @@ class CommandeStats extends Stats
     
     		return $this->_getAllByProduct($sql);
     	}
    -
     }
     
    diff --git a/htdocs/commande/contact.php b/htdocs/commande/contact.php
    index 7669239134a..b40a284e728 100644
    --- a/htdocs/commande/contact.php
    +++ b/htdocs/commande/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Patrick Rouillon     <patrick@rouillon.net>
      * Copyright (C) 2005-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2015 Philippe Grand       <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -214,5 +214,6 @@ if ($id > 0 || ! empty($ref))
     }
     
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/commande/customer.php b/htdocs/commande/customer.php
    index 9263ceb3f45..2f7e1831457 100644
    --- a/htdocs/commande/customer.php
    +++ b/htdocs/commande/customer.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville 	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur  	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin       		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin       		<regis.houssin@inodbox.com>
      * Copyright (C) 2012	   Andreu Bisquerra Gaya	<jove@bisquerra.com>
      * Copyright (C) 2012	   David Rodriguez Martinez <davidrm146@gmail.com>
      * Copyright (C) 2012	   Juanjo Menent			<jmenent@2byte.es>
    @@ -190,7 +190,7 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
     
    diff --git a/htdocs/commande/document.php b/htdocs/commande/document.php
    index ffebbaa260a..402467553fb 100644
    --- a/htdocs/commande/document.php
    +++ b/htdocs/commande/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -97,7 +97,7 @@ if ($id > 0 || ! empty($ref))
     		$head = commande_prepare_head($object);
     		dol_fiche_head($head, 'documents', $langs->trans('CustomerOrder'), -1, 'order');
     
    -		// Construit liste des fichiers
    +		// Build file list
     		$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     		$totalsize=0;
     		foreach($filearray as $key => $file)
    @@ -189,6 +189,6 @@ else
     }
     
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/commande/index.php b/htdocs/commande/index.php
    index 5cfb87c7a25..a87c4d868bf 100644
    --- a/htdocs/commande/index.php
    +++ b/htdocs/commande/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -479,6 +479,6 @@ if (! empty($conf->commande->enabled))
     print '</div></div></div>';
     
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/commande/info.php b/htdocs/commande/info.php
    index 4bac4a3a447..c52fbd45a37 100644
    --- a/htdocs/commande/info.php
    +++ b/htdocs/commande/info.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2006 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -128,5 +128,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php
    index 4841e9be410..a6acfcfd029 100644
    --- a/htdocs/commande/list.php
    +++ b/htdocs/commande/list.php
    @@ -1,15 +1,15 @@
     <?php
    -/* Copyright (C) 2001-2005 Rodolphe Quiedeville   <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2016 Laurent Destailleur    <eldy@users.sourceforge.net>
    - * Copyright (C) 2005      Marc Barilley / Ocebo  <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin          <regis.houssin@capnetworks.com>
    - * Copyright (C) 2012      Juanjo Menent          <jmenent@2byte.es>
    - * Copyright (C) 2013      Christophe Battarel    <christophe.battarel@altairis.fr>
    - * Copyright (C) 2013      Cédric Salvador        <csalvador@gpcsolutions.fr>
    - * Copyright (C) 2015      Frederic France        <frederic.france@free.fr>
    - * Copyright (C) 2015      Marcos García          <marcosgdf@gmail.com>
    - * Copyright (C) 2015      Jean-François Ferry    <jfefe@aternatik.fr>
    - * Copyright (C) 2016	   Ferran Marcet		  <fmarcet@2byte.es>
    +/* Copyright (C) 2001-2005  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2012       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2013       Christophe Battarel     <christophe.battarel@altairis.fr>
    + * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2015-2018  Frédéric France         <frederic.france@netlogic.fr>
    + * Copyright (C) 2015       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2015       Jean-François Ferry     <jfefe@aternatik.fr>
    + * Copyright (C) 2016       Ferran Marcet           <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -108,7 +108,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('commande');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -214,7 +214,6 @@ if (empty($reshook))
     	$uploaddir = $conf->commande->dir_output;
     	$trigger_name='ORDER_SENTBYMAIL';
     	include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
    -
     }
     
     
    @@ -489,7 +488,7 @@ if ($resql)
     		print $langs->trans('DateInvoice');
     		print '</td>';
     		print '<td>';
    -		print $form->select_date('', '', '', '', '', '', 1, 1);
    +		print $form->selectDate('', '', '', '', '', '', 1, 1);
     		print '</td>';
     		print '</tr>';
     		print '<tr>';
    @@ -1165,5 +1164,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/commande/note.php b/htdocs/commande/note.php
    index 6cff3bfb3bc..1a783f3aae7 100644
    --- a/htdocs/commande/note.php
    +++ b/htdocs/commande/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Florian Henry		<florian.henry@open-concept.pro>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -142,5 +142,6 @@ if ($id > 0 || ! empty($ref))
     }
     
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/commande/orderstoinvoice.php b/htdocs/commande/orderstoinvoice.php
    index 03d379270b1..75570939afb 100644
    --- a/htdocs/commande/orderstoinvoice.php
    +++ b/htdocs/commande/orderstoinvoice.php
    @@ -1,12 +1,13 @@
     <?php
    -/* Copyright (C) 2001-2005 Rodolphe Quiedeville   	<rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2013 Laurent Destailleur   	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005      Marc Barilley / Ocebo  	<marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin          	<regis.houssin@capnetworks.com>
    - * Copyright (C) 2012	   Andreu Bisquerra Gaya  	<jove@bisquerra.com>
    - * Copyright (C) 2012	   David Rodriguez Martinez <davidrm146@gmail.com>
    - * Copyright (C) 2012-2018 Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2015	   Ferran Marcet			<fmarcet@2byte.es>
    +/* Copyright (C) 2001-2005  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2013  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2012       Andreu Bisquerra Gaya   <jove@bisquerra.com>
    + * Copyright (C) 2012       David Rodriguez Martinez <davidrm146@gmail.com>
    + * Copyright (C) 2012-2018  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2015       Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -117,7 +118,6 @@ if (($action == 'create' || $action == 'add') && !$error)
     
     		$originid=$orders_id[0];
     		$_GET['originid']=$orders_id[0];
    -
     	}
     	if (isset($_POST['orders_to_invoice']))
     	{
    @@ -127,7 +127,6 @@ if (($action == 'create' || $action == 'add') && !$error)
     
     		$originid=$orders_id[0];
     		$_POST['originid']=$orders_id[0];
    -
     	}
     
     	$projectid		= GETPOST('projectid','int')?GETPOST('projectid','int'):0;
    @@ -442,7 +441,7 @@ if ($action == 'create' && !$error)
     
     	// Date invoice
     	print '<tr><td class="fieldrequired">'.$langs->trans('Date').'</td><td>';
    -	$html->select_date('','','','','',"add",1,1);
    +	print $html->selectDate('', '', '', '', '', "add", 1, 1);
     	print '</td></tr>';
     	// Payment term
     	print '<tr><td class="nowrap">'.$langs->trans('PaymentConditionsShort').'</td><td>';
    @@ -530,8 +529,6 @@ if ($action == 'create' && !$error)
     
     	print '</td></tr>';
     	print "</table>\n";
    -
    -
     }
     
     // Mode liste
    @@ -596,8 +593,8 @@ if (($action != 'create' && $action != 'add') || ($action == 'create' && $error)
     		$num = $db->num_rows($resql);
     		print load_fiche_titre($title);
     		$i = 0;
    -		$period=$html->select_date($date_start,'date_start',0,0,1,'',1,0,1).' - '.$html->select_date($date_end,'date_end',0,0,1,'',1,0,1);
    -		$periodely=$html->select_date($date_starty,'date_start_dely',0,0,1,'',1,0,1).' - '.$html->select_date($date_endy,'date_end_dely',0,0,1,'',1,0,1);
    +		$period=$html->selectDate($date_start,'date_start',0,0,1,'',1,0).' - '.$html->selectDate($date_end,'date_end',0,0,1,'',1,0);
    +		$periodely=$html->selectDate($date_starty,'date_start_dely',0,0,1,'',1,0).' - '.$html->selectDate($date_endy,'date_end_dely',0,0,1,'',1,0);
     
     		if (! empty($socid))
     		{
    @@ -654,7 +651,7 @@ if (($action != 'create' && $action != 'add') || ($action == 'create' && $error)
     		print '</form>';
     
     		print '<form name="orders2invoice" action="orderstoinvoice.php" method="GET">';
    -		
    +
     		$generic_commande = new Commande($db);
     
     		while ($i < $num)
    @@ -736,8 +733,8 @@ if (($action != 'create' && $action != 'add') || ($action == 'create' && $error)
     	{
     		dol_print_error($db);
     	}
    -
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/commande/stats/index.php b/htdocs/commande/stats/index.php
    index 8f259808357..a40d27b4e14 100644
    --- a/htdocs/commande/stats/index.php
    +++ b/htdocs/commande/stats/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      *
    @@ -302,6 +302,7 @@ print '</form>';
     print '<br><br>';
     
     
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -346,6 +347,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    +print '</div>';
     
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
    @@ -369,7 +371,6 @@ print '<div style="clear:both"></div>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/commande/tpl/linkedobjectblock.tpl.php b/htdocs/commande/tpl/linkedobjectblock.tpl.php
    index 758a37eddb8..392d2455e2a 100644
    --- a/htdocs/commande/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/commande/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2013		Juanjo Menent <jmenent@2byte.es>
      * Copyright (C) 2014       Marcos García <marcosgdf@gmail.com>
      *
    diff --git a/htdocs/compta/bank/annuel.php b/htdocs/compta/bank/annuel.php
    index a786cf5ca28..64f4e15cce6 100644
    --- a/htdocs/compta/bank/annuel.php
    +++ b/htdocs/compta/bank/annuel.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Charles-Fr BENKE     <charles.fr@benke.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *		\brief       Page to report input-output of a bank account
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php';
    @@ -339,7 +339,6 @@ else
     				$i++;
     			}
     			$db->free($resql);
    -
     		}
     		else
     		{
    @@ -494,5 +493,6 @@ else
     
     print "\n</div><br>\n";
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/bank/bankentries_list.php b/htdocs/compta/bank/bankentries_list.php
    index ec41a28327f..94885ab118b 100644
    --- a/htdocs/compta/bank/bankentries_list.php
    +++ b/htdocs/compta/bank/bankentries_list.php
    @@ -1,13 +1,14 @@
     <?php
     /* Copyright (C) 2001-2002  Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018  Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010  Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010  Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012       Vinícius Nogueira    <viniciusvgn@gmail.com>
      * Copyright (C) 2014       Florian Henry        <florian.henry@open-cooncept.pro>
      * Copyright (C) 2015       Jean-François Ferry  <jfefe@aternatik.fr>
      * Copyright (C) 2016       Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2017       Alexandre Spangaro   <aspangaro@zendsi.com>
      * Copyright (C) 2018       Ferran Marcet        <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,7 +30,7 @@
      *	\brief      List of bank transactions
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
    @@ -128,7 +129,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('banktransaction');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost('banktransaction','','search_');
     
     $arrayfields=array(
         'b.rowid'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
    @@ -203,12 +204,12 @@ if (empty($reshook))
     }
     
     // Conciliation
    -if (GETPOST('confirm_reconcile') && $user->rights->banque->consolidate)
    +if ((GETPOST('confirm_savestatement','alpha') || GETPOST('confirm_reconcile','alpha')) && $user->rights->banque->consolidate)
     {
         $error=0;
     
         // Definition, nettoyage parametres
    -    $num_releve=trim(GETPOST("num_releve"));
    +    $num_releve=trim(GETPOST("num_releve","alpha"));
     
         if ($num_releve)
         {
    @@ -221,7 +222,7 @@ if (GETPOST('confirm_reconcile') && $user->rights->banque->consolidate)
                     {
                         $result=$bankline->fetch($row);
                         $bankline->num_releve=$num_releve; //$_POST["num_releve"];
    -                    $result=$bankline->update_conciliation($user, GETPOST("cat"));
    +                    $result=$bankline->update_conciliation($user, GETPOST("cat"), GETPOST('confirm_reconcile','alpha')?1:0);	// If we confirm_reconcile, we set flag 'rappro' to 1.
                         if ($result < 0)
                         {
                             setEventMessages($bankline->error, $bankline->errors, 'errors');
    @@ -247,7 +248,21 @@ if (GETPOST('confirm_reconcile') && $user->rights->banque->consolidate)
     
         if (! $error)
         {
    -        header('Location: '.$_SERVER["PHP_SELF"].'?id='.$id);	// To avoid to submit twice and allow back
    +    	$param='action=reconcile&contextpage=banktransactionlist&id='.$id.'&search_account='.$id;
    +		$param.='&search_conciliated='.urlencode($search_conciliated);
    +		if ($page) $param.='&page='.urlencode($page);
    +		if ($offset) $param.='&offset='.urlencode($offset);
    +		if ($search_thirdparty) $param.='&search_thirdparty='.urlencode($search_thirdparty);
    +		if ($search_num_releve) $param.='&search_num_releve='.urlencode($search_num_releve);
    +		if ($search_start_dt) $param.='&search_start_dt='.urlencode($search_start_dt);
    +		if ($search_end_dt) $param.='&search_end_dt='.urlencode($search_end_dt);
    +		if ($search_start_dv) $param.='&search_start_dv='.urlencode($search_start_dv);
    +		if ($search_end_dv) $param.='&search_end_dv='.urlencode($search_end_dv);
    +		if ($search_type) $param.='&search_type='.urlencode($search_type);
    +		if ($search_debit) $param.='&search_debit='.urlencode($search_debit);
    +		if ($search_credit) $param.='&search_credit='.urlencode($search_credit);
    +		$param.='&sortfield='.urlencode($sortfield).'&sortorder='.urlencode($sortorder);
    +		header('Location: '.$_SERVER["PHP_SELF"].'?'.$param);	// To avoid to submit twice and allow the back button
             exit;
         }
     }
    @@ -301,7 +316,7 @@ if (GETPOST('save') && ! $cancel && $user->rights->banque->modifier)
         	$error++;
         }*/
     
    -    if (! $error)
    +    if (! $error && ! empty($conf->global->BANK_USE_OLD_VARIOUS_PAYMENT))
         {
         	$objecttmp = new Account($db);
         	$objecttmp->fetch($bankaccountid);
    @@ -428,7 +443,7 @@ if ($id > 0 || ! empty($ref))
                 if ($user->rights->banque->consolidate) {
                 	$newparam = $param;
                 	$newparam = preg_replace('/search_conciliated=\d+/i','',$newparam);
    -            	$buttonreconcile = '<a class="butActionNew" style="margin-bottom: 5px !important; margin-top: 5px !important" href="'.DOL_URL_ROOT.'/compta/bank/bankentries_list.php?action=reconcile&search_conciliated=0'.$newparam.'">'.$langs->trans("Conciliate").'</a>';
    +            	$buttonreconcile = '<a class="butActionNew" style="margin-bottom: 5px !important; margin-top: 5px !important" href="'.DOL_URL_ROOT.'/compta/bank/bankentries_list.php?action=reconcile&sortfield=b.datev,b.dateo,b.rowid&amp;sortorder=asc,asc,asc&search_conciliated=0'.$newparam.'">'.$langs->trans("Conciliate").'</a>';
                 } else {
                 	$buttonreconcile = '<a class="butActionNewRefused" style="margin-bottom: 5px !important; margin-top: 5px !important" title="'.$langs->trans("NotEnoughPermissions").'" href="#">'.$langs->trans("Conciliate").'</a>';
                 }
    @@ -578,6 +593,8 @@ if ($resql)
     	        print Form::selectarray('cat', $options, GETPOST('cat'), 1);
     	    }
     	    print '<br>'.$langs->trans("ThenCheckLinesAndConciliate").' ';
    +	    print '<input class="button" name="confirm_savestatement" type="submit" value="'.$langs->trans("SaveStatementOnly").'">';
    +	    print ' '.$langs->trans("or").' ';
     	    print '<input class="button" name="confirm_reconcile" type="submit" value="'.$langs->trans("Conciliate").'">';
     	    print ' '.$langs->trans("or").' ';
     	    print '<input type="submit" name="cancel" class="button" value="'.$langs->trans("Cancel").'">';
    @@ -629,7 +646,7 @@ if ($resql)
     	}
     
     	// Form to add a transaction with no invoice
    -	if ($user->rights->banque->modifier && $action == 'addline')
    +	if ($user->rights->banque->modifier && $action == 'addline' && ! empty($conf->global->BANK_USE_OLD_VARIOUS_PAYMENT))
     	{
     		print load_fiche_titre($langs->trans("AddBankRecordLong"),'','');
     
    @@ -666,7 +683,7 @@ if ($resql)
     		}
     		print '</td>';
     		print '<td class="nowrap">';
    -		$form->select_date(empty($dateop)?-1:$dateop,'op',0,0,0,'transaction');
    +		print $form->selectDate(empty($dateop)?-1:$dateop, 'op', 0, 0, 0, 'transaction');
     		print '</td>';
     		print '<td>&nbsp;</td>';
     		print '<td class="nowrap">';
    @@ -728,7 +745,7 @@ if ($resql)
     	{
     		if (empty($conf->global->BANK_DISABLE_DIRECT_INPUT))
     		{
    -			if (! empty($conf->global->BANK_USE_VARIOUS_PAYMENT))	// If direct entries is done using miscellaneous payments
    +			if (empty($conf->global->BANK_USE_OLD_VARIOUS_PAYMENT))	// If direct entries is done using miscellaneous payments
     			{
     				if ($user->rights->banque->modifier) {
     					$newcardbutton = '<a class="butActionNew" href="'.DOL_URL_ROOT.'/compta/bank/various_payment/card.php?action=create&accountid='.$search_account.'&backtopage='.urlencode($_SERVER['PHP_SELF'].'?id='.urlencode($search_account)).'"><span class="valignmiddle">'.$langs->trans("AddBankRecord").'</span>';
    @@ -787,17 +804,17 @@ if ($resql)
     	$moreforfilter.='<div class="divsearchfield">';
     	$moreforfilter .= $langs->trans('DateOperationShort').' : ';
     	$moreforfilter .= '<div class="nowrap'.($conf->browser->layout=='phone'?' centpercent':'').' inline-block">'.$langs->trans('From') . ' ';
    -	$moreforfilter .= $form->select_date($search_dt_start, 'search_start_dt', 0, 0, 1, "search_form", 1, 0, 1).'</div>';
    +	$moreforfilter .= $form->selectDate($search_dt_start, 'search_start_dt', 0, 0, 1, "search_form", 1, 0).'</div>';
     	//$moreforfilter .= ' - ';
    -	$moreforfilter .= '<div class="nowrap'.($conf->browser->layout=='phone'?' centpercent':'').' inline-block">'.$langs->trans('to') . ' ' . $form->select_date($search_dt_end, 'search_end_dt', 0, 0, 1, "search_form", 1, 0, 1).'</div>';
    +	$moreforfilter .= '<div class="nowrap'.($conf->browser->layout=='phone'?' centpercent':'').' inline-block">'.$langs->trans('to') . ' ' . $form->selectDate($search_dt_end, 'search_end_dt', 0, 0, 1, "search_form", 1, 0).'</div>';
     	$moreforfilter .= '</div>';
     
     	$moreforfilter.='<div class="divsearchfield">';
     	$moreforfilter .= $langs->trans('DateValueShort').' : ';
     	$moreforfilter .= '<div class="nowrap'.($conf->browser->layout=='phone'?' centpercent':'').' inline-block">'.$langs->trans('From') . ' ';
    -	$moreforfilter .= $form->select_date($search_dv_start, 'search_start_dv', 0, 0, 1, "search_form", 1, 0, 1).'</div>';
    +	$moreforfilter .= $form->selectDate($search_dv_start, 'search_start_dv', 0, 0, 1, "search_form", 1, 0).'</div>';
     	//$moreforfilter .= ' - ';
    -	$moreforfilter .= '<div class="nowrap'.($conf->browser->layout=='phone'?' centpercent':'').' inline-block">'.$langs->trans('to') . ' ' . $form->select_date($search_dv_end, 'search_end_dv', 0, 0, 1, "search_form", 1, 0, 1).'</div>';
    +	$moreforfilter .= '<div class="nowrap'.($conf->browser->layout=='phone'?' centpercent':'').' inline-block">'.$langs->trans('to') . ' ' . $form->selectDate($search_dv_end, 'search_end_dv', 0, 0, 1, "search_form", 1, 0).'</div>';
     	$moreforfilter .= '</div>';
     
     	if (! empty($conf->categorie->enabled))
    @@ -1400,16 +1417,17 @@ if ($resql)
     
         	if (! empty($arrayfields['b.num_releve']['checked']))
         	{
    -            print '<td class="nowrap" align="center">';
    +            print '<td class="nowraponall" align="center">';
             	// Transaction reconciliated or edit link
             	if ($bankaccount->canBeConciliated() > 0)
             	{
    -            	if ($objp->conciliated)  // If line not conciliated and account can be conciliated
    +        		if ($objp->num_releve)
                 	{
    -            	    print '<a href="releve.php?num='.$objp->num_releve.'&amp;account='.$objp->bankid.'">'.$objp->num_releve.'</a>';
    +            	    print '<a href="releve.php?num='.$objp->num_releve.'&account='.$objp->bankid.'&save_lastsearch_values=1">'.$objp->num_releve.'</a>';
                 	}
    -            	else if ($action == 'reconcile')
    +            	if (! $objp->conciliated && $action == 'reconcile')
                 	{
    +            		if ($objp->num_releve) print '&nbsp;';
                 	    print '<input class="flat" name="rowid['.$objp->rowid.']" type="checkbox" value="'.$objp->rowid.'" size="1"'.(! empty($_POST['rowid'][$objp->rowid])?' checked':'').'>';
                 	}
             	}
    @@ -1434,7 +1452,7 @@ if ($resql)
         	// Transaction reconciliated or edit link
         	if ($objp->conciliated && $bankaccount->canBeConciliated() > 0)  // If line not conciliated and account can be conciliated
         	{
    -    	    print '<a href="'.DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$objp->rowid.'&amp;account='.$objp->bankid.'&amp;page='.$page.'">';
    +    	    print '<a href="'.DOL_URL_ROOT.'/compta/bank/ligne.php?save_lastsearch_values=1&amp;rowid='.$objp->rowid.'&amp;account='.$objp->bankid.'&amp;page='.$page.'">';
         	    print img_edit();
         	    print '</a>';
         	}
    @@ -1442,13 +1460,13 @@ if ($resql)
         	{
         	    if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
         	    {
    -    	        print '<a href="'.DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$objp->rowid.'&amp;account='.$objp->bankid.'&amp;page='.$page.'">';
    +    	        print '<a href="'.DOL_URL_ROOT.'/compta/bank/ligne.php?save_lastsearch_values=1&amp;rowid='.$objp->rowid.'&amp;account='.$objp->bankid.'&amp;page='.$page.'">';
         	        print img_edit();
         	        print '</a>';
         	    }
         	    else
         	    {
    -    	        print '<a href="'.DOL_URL_ROOT.'/compta/bank/ligne.php?rowid='.$objp->rowid.'&amp;account='.$objp->bankid.'&amp;page='.$page.'">';
    +    	        print '<a href="'.DOL_URL_ROOT.'/compta/bank/ligne.php?save_lastsearch_values=1&amp;rowid='.$objp->rowid.'&amp;account='.$objp->bankid.'&amp;page='.$page.'">';
         	        print img_view();
         	        print '</a>';
         	    }
    @@ -1529,6 +1547,6 @@ if ($_POST["action"] == "search" && ! $num)
     	print '<div class="opacitymedium">'.$langs->trans("NoRecordFound").'</div>';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/bank/bilan.php b/htdocs/compta/bank/bilan.php
    index 5e5194d55c8..99856a2dea2 100644
    --- a/htdocs/compta/bank/bilan.php
    +++ b/htdocs/compta/bank/bilan.php
    @@ -22,7 +22,7 @@
      *		\brief      Page de bilan
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
     // Load translation files required by the page
    @@ -92,5 +92,6 @@ print "<tr class=\"oddeven\"><td>".$langs->trans("BankBalance")."</td><td align=
     
     print "</table>";
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/bank/budget.php b/htdocs/compta/bank/budget.php
    index 280cd9bdbc0..1d20c4a0d00 100644
    --- a/htdocs/compta/bank/budget.php
    +++ b/htdocs/compta/bank/budget.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *		\brief      Page de budget
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
     // Load translation files required by the page
    @@ -96,5 +96,6 @@ else
     }
     print "</table>";
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/bank/card.php b/htdocs/compta/bank/card.php
    index db497733863..9abe8c82b6c 100644
    --- a/htdocs/compta/bank/card.php
    +++ b/htdocs/compta/bank/card.php
    @@ -2,10 +2,11 @@
     /* Copyright (C) 2002-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2016	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2014-2017	Alexandre Spangaro		<aspangaro@zendsi.com>
      * Copyright (C) 2015		Jean-François Ferry		<jfefe@aternatik.fr>
      * Copyright (C) 2016		Marcos García			<marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,7 +28,7 @@
      *		\brief      Page to create/view a bank account
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT . '/core/class/html.formcompany.class.php';
    @@ -59,7 +60,8 @@ $extrafields = new ExtraFields($db);
     // fetch optionals attributes and labels
     $extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
     
    -
    +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
    +$hookmanager->initHooks(array('bankcard','globalcard'));
     
     /*
      * Actions
    @@ -284,7 +286,7 @@ if ($action == 'confirm_delete' && $_POST["confirm"] == "yes" && $user->rights->
     $form = new Form($db);
     $formbank = new FormBank($db);
     $formcompany = new FormCompany($db);
    -if (! empty($conf->accounting->enabled)) $formaccounting = New FormAccounting($db);
    +if (! empty($conf->accounting->enabled)) $formaccounting = new FormAccounting($db);
     
     $countrynotdefined=$langs->trans("ErrorSetACountryFirst").' ('.$langs->trans("SeeAbove").')';
     
    @@ -431,7 +433,7 @@ if ($action == 'create')
     
     	print '<tr><td>'.$langs->trans("Date").'</td>';
     	print '<td>';
    -	$form->select_date('', 're', 0, 0, 0, 'formsoc');
    +	print $form->selectDate('', 're', 0, 0, 0, 'formsoc');
     	print '</td></tr>';
     
     	print '<tr><td>'.$langs->trans("BalanceMinimalAllowed").'</td>';
    @@ -574,7 +576,6 @@ else
     		if ($action == 'delete')
     		{
     			$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id,$langs->trans("DeleteAccount"),$langs->trans("ConfirmDeleteAccount"),"confirm_delete");
    -
     		}
     
     		// Print form confirm
    @@ -764,7 +765,6 @@ else
     		}
     
     		print '</div>';
    -
     	}
     
     	/* ************************************************************************** */
    @@ -1031,8 +1031,8 @@ else
     
     		print '</form>';
     	}
    -
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/bank/categ.php b/htdocs/compta/bank/categ.php
    index be029fcb2f5..926252053e2 100644
    --- a/htdocs/compta/bank/categ.php
    +++ b/htdocs/compta/bank/categ.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Charles-Fr BENKE     <charles.fr@benke.fr>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      * Copyright (C) 2016      Marcos García        <marcosgdf@gmail.com>
    @@ -26,7 +26,7 @@
      *      \brief      Page ajout de categories bancaires
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/bankcateg.class.php';
     
    @@ -34,6 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/bankcateg.class.php';
     $langs->loadLangs(array('banks', 'categories'));
     
     $action=GETPOST('action','aZ09');
    +$optioncss  = GETPOST('optioncss','aZ');												// Option for the css output (always '' except when 'print')
     
     if (!$user->rights->banque->configurer)
       accessforbidden();
    @@ -80,16 +81,36 @@ if ($categid) {
     llxHeader();
     
     
    -print load_fiche_titre($langs->trans("RubriquesTransactions"), '', 'title_bank.png');
    +print load_fiche_titre($langs->trans("RubriquesTransactions"));
     
     print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    +if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
    +print '<input type="hidden" name="action" value="list">';
    +/*print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
    +print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
    +print '<input type="hidden" name="page" value="'.$page.'">';
    +print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
    +*/
     
    +print '<div class="div-table-responsive">';		// You can use div-table-responsive-no-min if you dont need reserved height for your table
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre">';
     print '<td>'.$langs->trans("Ref").'</td><td colspan="2">'.$langs->trans("Label").'</td>';
     print "</tr>\n";
     
    +// Line to add category
    +if ($action != 'edit')
    +{
    +
    +	print '<tr class="oddeven">';
    +	print '<td>&nbsp;</td><td><input name="label" type="text" size="45"></td>';
    +	print '<td align="center"><input type="submit" name="add" class="button" value="'.$langs->trans("Add").'"></td>';
    +	print '</tr>';
    +}
    +
    +
     $sql = "SELECT rowid, label";
     $sql.= " FROM ".MAIN_DB_PREFIX."bank_categ";
     $sql.= " WHERE entity = ".$conf->entity;
    @@ -129,19 +150,11 @@ if ($result)
     	$db->free($result);
     }
     
    +print '</table>';
    +print '</div>';
     
    -/*
    - * Line to add category
    - */
    -if ($action != 'edit')
    -{
    -
    -	print '<tr class="oddeven">';
    -	print '<td>&nbsp;</td><td><input name="label" type="text" size="45"></td>';
    -	print '<td align="center"><input type="submit" name="add" class="button" value="'.$langs->trans("Add").'"></td>';
    -	print '</tr>';
    -}
    -
    -print '</table></form>';
    +print '</form>';
     
    +// End of page
     llxFooter();
    +$db->close();
    diff --git a/htdocs/compta/bank/class/account.class.php b/htdocs/compta/bank/class/account.class.php
    index 6ba712f9ff2..7cb6b09fbaf 100644
    --- a/htdocs/compta/bank/class/account.class.php
    +++ b/htdocs/compta/bank/class/account.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Christophe Combelles	<ccomb@free.fr>
    - * Copyright (C) 2005-2010	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2015-2016	Marcos García			<marcosgdf@gmail.com>
      * Copyright (C) 2015-2017	Alexandre Spangaro		<aspangaro@zendsi.com>
    @@ -36,8 +36,19 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Account extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element = 'bank_account';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element = 'bank_account';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'account';
     
     	/**
    @@ -48,7 +59,7 @@ class Account extends CommonObject
     	public $rowid;
     
     	/**
    -	 * Label
    +	 * Account Label
     	 * @var string
     	 */
     	public $label;
    @@ -160,6 +171,10 @@ class Account extends CommonObject
     	 * @var string
     	 */
     	public $account_number;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_accountancy_journal;
     
     	/**
    @@ -286,6 +301,7 @@ class Account extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Add a link between bank line record and its source
     	 *
    @@ -298,6 +314,7 @@ class Account extends CommonObject
     	 */
     	function add_url_line($line_id, $url_id, $url, $label, $type)
     	{
    +        // phpcs:enable
     		$sql = "INSERT INTO ".MAIN_DB_PREFIX."bank_url (";
     		$sql.= "fk_bank";
     		$sql.= ", url_id";
    @@ -325,6 +342,7 @@ class Account extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 		TODO Move this into AccountLine
     	 *      Return array with links from llx_bank_url
    @@ -332,10 +350,11 @@ class Account extends CommonObject
     	 *      @param  int         $fk_bank    To search using bank transaction id
     	 *      @param  int         $url_id     To search using link to
     	 *      @param  string      $type       To search using type
    -	 *      @return array|-1                Array of links array('url'=>, 'url_id'=>, 'label'=>, 'type'=> 'fk_bank'=> ) or -1 on error
    +	 *      @return array|int               Array of links array('url'=>, 'url_id'=>, 'label'=>, 'type'=> 'fk_bank'=> ) or -1 on error
     	 */
     	function get_url($fk_bank='', $url_id='', $type='')
     	{
    +        // phpcs:enable
     		$lines = array();
     
     		// Check parameters
    @@ -774,14 +793,16 @@ class Account extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *    	Update BBAN (RIB) account fields
    +	 *  Update BBAN (RIB) account fields
     	 *
    -	 *    	@param	User	$user       Object user making update
    -	 *		@return	int					<0 if KO, >0 if OK
    +	 *  @param	User	$user       Object user making update
    +	 *	@return	int					<0 if KO, >0 if OK
     	 */
     	function update_bban(User $user = null)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		// Clean parameters
    @@ -943,8 +964,10 @@ class Account extends CommonObject
     	 * Existing categories are left untouch.
     	 *
     	 * @param int[]|int $categories Category or categories IDs
    +     * @return void
     	 */
    -	public function setCategories($categories) {
    +    public function setCategories($categories)
    +    {
     		// Handle single category
     		if (! is_array($categories)) {
     			$categories = array($categories);
    @@ -1058,6 +1081,7 @@ class Account extends CommonObject
     		return $this->LibStatut($this->clos,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return label of given object status
     	 *
    @@ -1067,6 +1091,7 @@ class Account extends CommonObject
     	 */
     	function LibStatut($statut, $mode = 0)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load('banks');
     
    @@ -1095,6 +1120,7 @@ class Account extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Renvoi si un compte peut etre supprimer ou non (sans mouvements)
     	 *
    @@ -1102,6 +1128,7 @@ class Account extends CommonObject
     	 */
     	function can_be_deleted()
     	{
    +        // phpcs:enable
     		$can_be_deleted=false;
     
     		$sql = "SELECT COUNT(rowid) as nb";
    @@ -1162,6 +1189,7 @@ class Account extends CommonObject
     		return price2num($solde, 'MU');
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
     	 *
    @@ -1171,6 +1199,7 @@ class Account extends CommonObject
     	 */
     	function load_board(User $user, $filteraccountid = 0)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		if ($user->societe_id) return -1;   // protection pour eviter appel par utilisateur externe
    @@ -1217,6 +1246,7 @@ class Account extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Charge indicateurs this->nb de tableau de bord
     	 *		@param		int			$filteraccountid	To get info for a particular account id
    @@ -1224,6 +1254,7 @@ class Account extends CommonObject
     	 */
     	function load_state_board($filteraccountid = 0)
     	{
    +        // phpcs:enable
     		global $user;
     
     		if ($user->societe_id) return -1;   // protection pour eviter appel par utilisateur externe
    @@ -1300,13 +1331,19 @@ class Account extends CommonObject
     	 */
     	function getNomUrl($withpicto=0, $mode='', $option='', $save_lastsearch_value=-1, $notooltip=0)
     	{
    -		global $conf, $langs;
    +		global $conf, $langs, $user;
     
     		$result='';
     		$label = '<u>' . $langs->trans("ShowAccount") . '</u>';
     		$label .= '<br><b>' . $langs->trans('BankAccount') . ':</b> ' . $this->label;
     		$label .= '<br><b>' . $langs->trans('AccountNumber') . ':</b> ' . $this->number;
     		$label .= '<br><b>' . $langs->trans("AccountCurrency") . ':</b> ' . $this->currency_code;
    +
    +		if (empty($user->rights->banque->lire) || !empty($user->socid))
    +		{
    +			$option = 'nolink';
    +		}
    +
     		if (! empty($conf->accounting->enabled))
     		{
     			include_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
    @@ -1337,6 +1374,11 @@ class Account extends CommonObject
     		$linkstart = '<a href="'.$url.$linkclose;
     		$linkend = '</a>';
     
    +                if ($option == 'nolink') {
    +                    $linkstart = '';
    +                    $linkend = '';
    +                }
    +
     		$result .= $linkstart;
     		if ($withpicto) $result.=img_object(($notooltip?'':$label), $this->picto, ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
     		if ($withpicto != 2) $result.= $this->ref.($option == 'reflabel' && $this->label ? ' - '.$this->label : '');
    @@ -1491,7 +1533,6 @@ class Account extends CommonObject
     	 */
     	function info($id)
     	{
    -
     	}
     
     	/**
    @@ -1536,7 +1577,6 @@ class Account extends CommonObject
     
     		//Get the order the properties are shown
     		return $fieldarray;
    -
     	}
     
     	/**
    @@ -1610,7 +1650,6 @@ class Account extends CommonObject
     		$this->owner_address   = 'Owner address';
     		$this->country_id      = 1;
     	}
    -
     }
     
     
    @@ -1619,36 +1658,93 @@ class Account extends CommonObject
      */
     class AccountLine extends CommonObject
     {
    -	var $error;
    -	var $db;
    -	var $element='bank';
    -	var $table_element='bank';
    -	var $picto = 'generic';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    -	var $id;
    -	var $ref;
    -	var $datec;
    -	var $dateo;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='bank';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='bank';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'generic';
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +    /**
    +     * @var string Ref
    +     */
    +    public $ref;
    +
    +	public $datec;
    +	public $dateo;
     
     	/**
     	 * Value date
     	 */
    -	var $datev;
    -	var $amount;
    -	var $label;
    -	var $note;
    -	var $fk_user_author;
    -	var $fk_user_rappro;
    -	var $fk_type;
    -	var $rappro;        // Is it conciliated
    -	var $num_releve;    // If conciliated, what is bank statement
    -	var $num_chq;       // Num of cheque
    -	var $bank_chq;      // Bank of cheque
    -	var $fk_bordereau;  // Id of cheque receipt
    +	public $datev;
    +	public $amount;
     
    -	var $fk_account;            // Id of bank account
    -	var $bank_account_label;    // Label of bank account
    +    /**
    +     * @var string bank transaction lines label
    +     */
    +    public $label;
     
    +    public $note;
    +
    +    /**
    +     * @var int ID
    +     */
    +	public $fk_user_author;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_rappro;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_type;
    +
    +	public $rappro;        // Is it conciliated
    +	public $num_releve;    // If conciliated, what is bank statement
    +	public $num_chq;       // Num of cheque
    +	public $bank_chq;      // Bank of cheque
    +
    +	/**
    +     * @var int ID of cheque receipt
    +     */
    +	public $fk_bordereau;
    +
    +	/**
    +     * @var int ID of bank account
    +     */
    +	public $fk_account;
    +
    +	public $bank_account_label;    // Label of bank account
    +
    +    /**
    +	 * Issuer
    +	 * @var Societe
    +	 */
     	public $emetteur;
     
     	/**
    @@ -1834,6 +1930,7 @@ class AccountLine extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Delete bank line records
     	 *
    @@ -1842,6 +1939,7 @@ class AccountLine extends CommonObject
     	 */
     	function delete_urls(User $user = null)
     	{
    +        // phpcs:enable
     		$nbko=0;
     
     		if ($this->rappro)
    @@ -1904,15 +2002,18 @@ class AccountLine extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *		Update conciliation field
    +	 *	Update conciliation field
     	 *
    -	 *		@param	User	$user		Objet user making update
    -	 *		@param 	int		$cat		Category id
    -	 *		@return	int					<0 if KO, >0 if OK
    +	 *	@param	User	$user			Objet user making update
    +	 *	@param 	int		$cat			Category id
    +	 *	@param	int		$conciliated	1=Set transaction to conciliated, 0=Keep transaction non conciliated
    +	 *	@return	int						<0 if KO, >0 if OK
     	 */
    -	function update_conciliation(User $user, $cat)
    +	function update_conciliation(User $user, $cat, $conciliated=1)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$this->db->begin();
    @@ -1928,9 +2029,9 @@ class AccountLine extends CommonObject
     		}
     
     		$sql = "UPDATE ".MAIN_DB_PREFIX."bank SET";
    -		$sql.= " rappro = 1";
    +		$sql.= " rappro = ".$conciliated;
     		$sql.= ", num_releve = '".$this->db->escape($this->num_releve)."'";
    -		$sql.= ", fk_user_rappro = ".$user->id;
    +		if ($conciliated) $sql.= ", fk_user_rappro = ".$user->id;
     		$sql.= " WHERE rowid = ".$this->id;
     
     		dol_syslog(get_class($this)."::update_conciliation", LOG_DEBUG);
    @@ -1966,6 +2067,7 @@ class AccountLine extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Increase/decrease value date of a rowid
     	 *
    @@ -1975,6 +2077,7 @@ class AccountLine extends CommonObject
     	 */
     	function datev_change($rowid,$sign=1)
     	{
    +        // phpcs:enable
     		$sql = "SELECT datev FROM ".MAIN_DB_PREFIX."bank WHERE rowid = ".$rowid;
     		$resql = $this->db->query($sql);
     		if ($resql)
    @@ -2004,6 +2107,7 @@ class AccountLine extends CommonObject
     		return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Increase value date of a rowid
     	 *
    @@ -2012,9 +2116,11 @@ class AccountLine extends CommonObject
     	 */
     	function datev_next($id)
     	{
    +        // phpcs:enable
     		return $this->datev_change($id,1);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Decrease value date of a rowid
     	 *
    @@ -2023,10 +2129,12 @@ class AccountLine extends CommonObject
     	 */
     	function datev_previous($id)
     	{
    +        // phpcs:enable
     		return $this->datev_change($id,-1);
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Increase/decrease operation date of a rowid
     	 *
    @@ -2036,6 +2144,7 @@ class AccountLine extends CommonObject
     	 */
     	function dateo_change($rowid,$sign=1)
     	{
    +        // phpcs:enable
     		$sql = "SELECT dateo FROM ".MAIN_DB_PREFIX."bank WHERE rowid = ".$rowid;
     		$resql = $this->db->query($sql);
     		if ($resql)
    @@ -2065,6 +2174,7 @@ class AccountLine extends CommonObject
     		return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Increase operation date of a rowid
     	 *
    @@ -2073,9 +2183,11 @@ class AccountLine extends CommonObject
     	 */
     	function dateo_next($id)
     	{
    +        // phpcs:enable
     		return $this->dateo_change($id,1);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Decrease operation date of a rowid
     	 *
    @@ -2084,6 +2196,7 @@ class AccountLine extends CommonObject
     	 */
     	function dateo_previous($id)
     	{
    +        // phpcs:enable
     		return $this->dateo_change($id,-1);
     	}
     
    @@ -2190,6 +2303,7 @@ class AccountLine extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -2199,6 +2313,7 @@ class AccountLine extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		//$langs->load('companies');
     		/*
    @@ -2268,6 +2383,4 @@ class AccountLine extends CommonObject
     		}
     		return 0;
     	}
    -
     }
    -
    diff --git a/htdocs/compta/bank/class/bankcateg.class.php b/htdocs/compta/bank/class/bankcateg.class.php
    index 176fdb626a5..9efdf3932ff 100644
    --- a/htdocs/compta/bank/class/bankcateg.class.php
    +++ b/htdocs/compta/bank/class/bankcateg.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016 Marcos García        <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -30,11 +30,21 @@ class BankCateg // extends CommonObject
     {
     	//public $element='bank_categ';			//!< Id that identify managed objects
     	//public $table_element='bank_categ';	//!< Name of table without prefix where object is stored
    -    public $picto='generic';
    -    
    -	public $id;
    -	public $label;
    -   
    +    /**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto='generic';
    +
    +	/**
    +     * @var int ID
    +     */
    +    public $id;
    +
    +	/**
    +     * @var string bank categories label
    +     */
    +    public $label;
    +
     
     	/**
     	 * Constructor
    @@ -205,7 +215,7 @@ class BankCateg // extends CommonObject
     		{
     		    $sql = "DELETE FROM ".MAIN_DB_PREFIX."categorie_account";
         		$sql.= " WHERE fk_categorie = ".$this->id;
    -    		
    +
         		$resql = $this->db->query($sql);
         		if (!$resql)
         		{
    @@ -213,13 +223,13 @@ class BankCateg // extends CommonObject
         		    $this->errors[] = "Error ".$this->db->lasterror();
         		}
     		}
    -		
    +
     		// Delete link between tag and bank lines
     		if (! $error)
     		{
     		    $sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_class";
     		    $sql.= " WHERE fk_categ = ".$this->id;
    -		
    +
     		    $resql = $this->db->query($sql);
     		    if (!$resql)
     		    {
    @@ -227,21 +237,21 @@ class BankCateg // extends CommonObject
     		        $this->errors[] = "Error ".$this->db->lasterror();
     		    }
     		}
    -		
    +
     		// Delete bank categ
     		if (! $error)
     		{
         		$sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_categ";
         		$sql .= " WHERE rowid=".$this->id;
    -    
    +
         		$resql = $this->db->query($sql);
    -    		if (!$resql) 
    +    		if (!$resql)
         		{
         			$error++;
         			$this->errors[] = "Error ".$this->db->lasterror();
         		}
     		}
    -		
    +
         	// Commit or rollback
     		if ($error) {
     			foreach ($this->errors as $errmsg) {
    @@ -339,5 +349,4 @@ class BankCateg // extends CommonObject
     		$this->id = 0;
     		$this->label = '';
     	}
    -
     }
    diff --git a/htdocs/compta/bank/class/paymentvarious.class.php b/htdocs/compta/bank/class/paymentvarious.class.php
    index fe56ea99504..47edacb2410 100644
    --- a/htdocs/compta/bank/class/paymentvarious.class.php
    +++ b/htdocs/compta/bank/class/paymentvarious.class.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2017       Alexandre Spangaro  <aspangaro@zendsi.com>
    +/* Copyright (C) 2017       Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,25 +31,65 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class PaymentVarious extends CommonObject
     {
    -	public $element='variouspayment';		//!< Id that identify managed objects
    -	public $table_element='payment_various';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='variouspayment';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='payment_various';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'bill';
     
    -	var $id;
    -	var $ref;
    -	var $tms;
    -	var $datep;
    -	var $datev;
    -	var $sens;
    -	var $amount;
    -	var $type_payment;
    -	var $num_payment;
    -	var $label;
    -	var $accountancy_code;
    -	var $fk_project;
    -	var $fk_bank;
    -	var $fk_user_author;
    -	var $fk_user_modif;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	/**
    +	 * @var string Ref
    +	 */
    +	public $ref;
    +
    +	public $tms;
    +	public $datep;
    +	public $datev;
    +	public $sens;
    +	public $amount;
    +	public $type_payment;
    +	public $num_payment;
    +
    +	/**
    +     * @var string various payments label
    +     */
    +    public $label;
    +
    +	public $accountancy_code;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_project;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_bank;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_author;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_modif;
     
     
     	/**
    @@ -61,14 +102,13 @@ class PaymentVarious extends CommonObject
     		$this->db = $db;
     		$this->element = 'payment_various';
     		$this->table_element = 'payment_various';
    -		return 1;
     	}
     
     	/**
     	 * Update database
     	 *
     	 * @param   User	$user        	User that modify
    -	 * @param	int		$notrigger	    0=no, 1=yes (no update trigger)
    +	 * @param   int		$notrigger      0=no, 1=yes (no update trigger)
     	 * @return  int         			<0 if KO, >0 if OK
     	 */
     	function update($user=null, $notrigger=0)
    @@ -81,9 +121,9 @@ class PaymentVarious extends CommonObject
     		$this->amount=trim($this->amount);
     		$this->label=trim($this->label);
     		$this->note=trim($this->note);
    -		$this->fk_bank=trim($this->fk_bank);
    -		$this->fk_user_author=trim($this->fk_user_author);
    -		$this->fk_user_modif=trim($this->fk_user_modif);
    +		$this->fk_bank = (int) $this->fk_bank;
    +		$this->fk_user_author = (int) $this->fk_user_author;
    +		$this->fk_user_modif = (int) $this->fk_user_modif;
     
     		$this->db->begin();
     
    @@ -281,9 +321,9 @@ class PaymentVarious extends CommonObject
     		$this->amount=price2num(trim($this->amount));
     		$this->label=trim($this->label);
     		$this->note=trim($this->note);
    -		$this->fk_bank=trim($this->fk_bank);
    -		$this->fk_user_author=trim($this->fk_user_author);
    -		$this->fk_user_modif=trim($this->fk_user_modif);
    +		$this->fk_bank = (int) $this->fk_bank;
    +		$this->fk_user_author = (int) $this->fk_user_author;
    +		$this->fk_user_modif = (int) $this->fk_user_modif;
     
     		// Check parameters
     		if (! $this->label)
    @@ -363,13 +403,14 @@ class PaymentVarious extends CommonObject
     
     					// Insert payment into llx_bank
     					// Add link 'payment_various' in bank_url between payment and bank transaction
    -					if ($this->sens == '0') $sign='-';
    +					$sign=1;
    +					if ($this->sens == '0') $sign=-1;
     
     					$bank_line_id = $acc->addline(
     						$this->datep,
     						$this->type_payment,
     						$this->label,
    -						$sign.abs($this->amount),
    +						$sign * abs($this->amount),
     						$this->num_payment,
     						'',
     						$user
    @@ -411,7 +452,6 @@ class PaymentVarious extends CommonObject
     				$result=$this->call_trigger('PAYMENT_VARIOUS_CREATE',$user);
     				if ($result < 0) $error++;
     				// End call triggers
    -
     			}
     			else $error++;
     
    @@ -434,6 +474,7 @@ class PaymentVarious extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update link between payment various and line generate into llx_bank
     	 *
    @@ -442,6 +483,7 @@ class PaymentVarious extends CommonObject
     	 */
     	function update_fk_bank($id_bank)
     	{
    +        // phpcs:enable
     		$sql = 'UPDATE '.MAIN_DB_PREFIX.'payment_various SET fk_bank = '.$id_bank;
     		$sql.= ' WHERE rowid = '.$this->id;
     		$result = $this->db->query($sql);
    @@ -468,6 +510,7 @@ class PaymentVarious extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -477,39 +520,40 @@ class PaymentVarious extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
     			return $langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			return $langs->trans($this->statuts_short[$statut]);
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts_short[$statut]);
    -			if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts_short[$statut]);
    -			if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]);
    +			elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts_short[$statut]);
    +			elseif ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]);
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0');
    -			if ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4');
    -			if ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    +			elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4');
    +			elseif ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut==0 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut0');
    -			if ($statut==1 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut4');
    -			if ($statut==2 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    +			elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut4');
    +			elseif ($statut==2 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
     		}
     	}
     
    @@ -517,24 +561,71 @@ class PaymentVarious extends CommonObject
     	/**
     	 *	Send name clicable (with possibly the picto)
     	 *
    -	 *	@param  int		$withpicto		0=No picto, 1=Include picto into link, 2=Only picto
    -	 *	@param  string	$option			link option
    -	 *	@return string					Chaine with URL
    +	 *	@param  int		$withpicto					0=No picto, 1=Include picto into link, 2=Only picto
    +	 *	@param  string	$option						link option
    +	 *  @param  int     $save_lastsearch_value	 	-1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    +     *  @param	int  	$notooltip		 			1=Disable tooltip
    +	 *	@return string								String with URL
     	 */
    -	function getNomUrl($withpicto=0,$option='')
    +	function getNomUrl($withpicto=0, $option='', $save_lastsearch_value=-1, $notooltip=0)
     	{
    +		global $db, $conf, $langs, $hookmanager;
     		global $langs;
     
    -		$result='';
    -		$label=$langs->trans("ShowVariousPayment").': '.$this->ref;
    +		if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
     
    -		$linkstart = '<a href="'.DOL_URL_ROOT.'/compta/bank/various_payment/card.php?id='.$this->id.'" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
    +		$result='';
    +
    +		$label='<u>'.$langs->trans("ShowVariousPayment").'</u>';
    +		$label.= '<br>';
    +		$label.= '<b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
    +
    +		$url = DOL_URL_ROOT.'/compta/bank/various_payment/card.php?id='.$this->id;
    +
    +		if ($option != 'nolink')
    +		{
    +			// Add param to save lastsearch_values or not
    +			$add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    +			if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1;
    +			if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
    +		}
    +
    +		$linkclose='';
    +		if (empty($notooltip))
    +		{
    +			if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
    +			{
    +				$label=$langs->trans("ShowMyObject");
    +				$linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    +			}
    +			$linkclose.=' title="'.dol_escape_htmltag($label, 1).'"';
    +			$linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"';
    +
    +			/*
    +			 $hookmanager->initHooks(array('myobjectdao'));
    +			 $parameters=array('id'=>$this->id);
    +			 $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +			 if ($reshook > 0) $linkclose = $hookmanager->resPrint;
    +			 */
    +		}
    +		else $linkclose = ($morecss?' class="'.$morecss.'"':'');
    +
    +		$linkstart = '<a href="'.$url.'"';
    +		$linkstart.=$linkclose.'>';
     		$linkend='</a>';
     
     		$result .= $linkstart;
     		if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
    -		if ($withpicto != 2) $result.= ($maxlen?dol_trunc($this->ref,$maxlen):$this->ref);
    +		if ($withpicto != 2) $result.= $this->ref;
     		$result .= $linkend;
    +		//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');
    +
    +		global $action;
    +		$hookmanager->initHooks(array('variouspayment'));
    +		$parameters=array('id'=>$this->id, 'getnomurl'=>$result);
    +		$reshook=$hookmanager->executeHooks('getNomUrl',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +		if ($reshook > 0) $result = $hookmanager->resPrint;
    +		else $result .= $hookmanager->resPrint;
     
     		return $result;
     	}
    @@ -582,5 +673,4 @@ class PaymentVarious extends CommonObject
     			dol_print_error($this->db);
     		}
     	}
    -
     }
    diff --git a/htdocs/compta/bank/document.php b/htdocs/compta/bank/document.php
    index 33e74dc3691..e9fdc37a79f 100644
    --- a/htdocs/compta/bank/document.php
    +++ b/htdocs/compta/bank/document.php
    @@ -3,7 +3,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2017 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017 Regis Houssin         <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,7 +24,7 @@
      * 	\ingroup    banque
      * 	\brief      Page de gestion des documents attaches a un compte bancaire
      */
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT . "/core/lib/bank.lib.php";
     require_once DOL_DOCUMENT_ROOT . "/core/lib/files.lib.php";
     require_once DOL_DOCUMENT_ROOT . "/core/lib/images.lib.php";
    @@ -105,7 +105,7 @@ if ($id > 0 || !empty($ref)) {
             dol_fiche_head($head, 'document', $langs->trans("FinancialAccount"), -1, 'account');
     
     
    -        // Construit liste des fichiers
    +        // Build file list
             $filearray = dol_dir_list($upload_dir, "files", 0, '', '\.meta$',
                     $sortfield,
                     (strtolower($sortorder) == 'desc' ? SORT_DESC : SORT_ASC), 1);
    @@ -147,7 +147,6 @@ else {
         exit;
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/bank/graph.php b/htdocs/compta/bank/graph.php
    index b829002a990..958ff129a06 100644
    --- a/htdocs/compta/bank/graph.php
    +++ b/htdocs/compta/bank/graph.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,7 +23,7 @@
      *	\brief      Page graph des transactions bancaires
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php';
    @@ -265,7 +265,7 @@ else
     		unset($amounts);
     	}
     
    -	// Tableau 2
    +	// Graph Balance for the year
     
     	if ($mode == 'standard')
     	{
    @@ -384,7 +384,7 @@ else
     		$px2->SetTitle($title);
     		$px2->SetWidth($WIDTH);
     		$px2->SetHeight($HEIGHT);
    -		$px2->SetType(array('lines','lines','lines'));
    +		$px2->SetType(array('linesnopoint','linesnopoint','linesnopoint'));
     		$px2->setBgColor('onglet');
     		$px2->setBgColorGrid(array(255,255,255));
     		$px2->SetHideXGrid(true);
    @@ -403,7 +403,7 @@ else
     		unset($amounts);
     	}
     
    -	// Tableau 3 - All time line
    +	// Graph 3 - Balance for all time line
     
     	if ($mode == 'showalltime')
     	{
    @@ -500,7 +500,7 @@ else
     		$px3->SetTitle($title);
     		$px3->SetWidth($WIDTH);
     		$px3->SetHeight($HEIGHT);
    -		$px3->SetType(array('lines','lines','lines'));
    +		$px3->SetType(array('linesnopoint','linesnopoint','linesnopoint'));
     		$px3->setBgColor('onglet');
     		$px3->setBgColorGrid(array(255,255,255));
     		$px3->SetPrecisionY(0);
    @@ -864,7 +864,6 @@ if ($mode == 'showalltime')
     
     print '</table>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/bank/info.php b/htdocs/compta/bank/info.php
    index ab43b9374aa..7eaeb515aa9 100644
    --- a/htdocs/compta/bank/info.php
    +++ b/htdocs/compta/bank/info.php
    @@ -21,7 +21,7 @@
      *     \brief      Onglet info d'une ecriture bancaire
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
    @@ -71,5 +71,6 @@ print '</td></tr></table>';
     
     print '</div>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/bank/ligne.php b/htdocs/compta/bank/ligne.php
    index e006f78c6e7..4b9f55f025f 100644
    --- a/htdocs/compta/bank/ligne.php
    +++ b/htdocs/compta/bank/ligne.php
    @@ -3,10 +3,11 @@
      * Copyright (C) 2003      Xavier DUTOIT        <doli@sydesy.com>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Christophe Combelles <ccomb@free.fr>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015-2017 Alexandre Spangaro	<aspangaro@zendsi.com>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      * Copyright (C) 2016      Marcos García        <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,12 +29,12 @@
      *	\brief      Page to edit a bank transaction record
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
     
     // Load translation files required by the page
    -$langs->loadLangs(array('banks', 'categories', 'compta', 'bills'));
    +$langs->loadLangs(array('banks', 'categories', 'compta', 'bills', 'other'));
     if (! empty($conf->adherent->enabled)) $langs->load("members");
     if (! empty($conf->don->enabled)) $langs->load("donations");
     if (! empty($conf->loan->enabled)) $langs->load("loan");
    @@ -98,8 +99,10 @@ if ($action == 'confirm_delete_categ' && $confirm == "yes" && $user->rights->ban
         	{
             	dol_print_error($db);
         	}
    -	} else {
    -		setEventMessage('Missing ids','errors');
    +	}
    +	else
    +	{
    +		setEventMessages($langs->trans("MissingIds"), null, 'errors');
     	}
     }
     
    @@ -448,7 +451,6 @@ if ($result)
                     $receipt=new RemiseCheque($db);
                     $receipt->fetch($objp->receiptid);
                     print ' &nbsp; &nbsp; '.$langs->trans("CheckReceipt").': '.$receipt->getNomUrl(2);
    -
                 }
                 print '</td>';
             }
    @@ -495,7 +497,7 @@ if ($result)
             if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
             {
                 print '<td>';
    -            print $form->select_date($db->jdate($objp->do),'dateo','','','','update',1,0,1,$objp->rappro);
    +            print $form->selectDate($db->jdate($objp->do), 'dateo', '', '', '', 'update', 1, 0, $objp->rappro);
                 if (! $objp->rappro)
                 {
                     print ' &nbsp; ';
    @@ -519,7 +521,7 @@ if ($result)
             if ($user->rights->banque->modifier || $user->rights->banque->consolidate)
             {
                 print '<td>';
    -            print $form->select_date($db->jdate($objp->dv),'datev','','','','update',1,0,1,$objp->rappro);
    +            print $form->selectDate($db->jdate($objp->dv), 'datev', '', '', '', 'update', 1, 0, $objp->rappro);
                 if (! $objp->rappro)
                 {
                     print ' &nbsp; ';
    @@ -679,13 +681,12 @@ if ($result)
     
     			print '</form>';
             }
    -
         }
     
         $db->free($result);
     }
     else dol_print_error($db);
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/bank/list.php b/htdocs/compta/bank/list.php
    index 3a67a3d5309..2395a3c23de 100644
    --- a/htdocs/compta/bank/list.php
    +++ b/htdocs/compta/bank/list.php
    @@ -1,9 +1,7 @@
     <?php
    -use Stripe\BankAccount;
    -
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      * Copyright (C) 2018      Ferran Marcet		<fmarcet@2byte.es>
      *
    @@ -27,7 +25,7 @@ use Stripe\BankAccount;
      *       \brief      Home page of bank module
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
    @@ -76,7 +74,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('bank_account');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -428,7 +426,7 @@ foreach ($accounts as $key=>$type)
         // Ref
         if (! empty($arrayfields['b.ref']['checked']))
         {
    -        print '<td>'.$obj->getNomUrl(1).'</td>';
    +        print '<td class="nowrap">'.$obj->getNomUrl(1).'</td>';
     	    if (! $i) $totalarray['nbfield']++;
         }
     
    @@ -604,7 +602,6 @@ print "</div>";
     
     print "</form>";
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php
    index 1d9d5526700..f123dd35eb5 100644
    --- a/htdocs/compta/bank/releve.php
    +++ b/htdocs/compta/bank/releve.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      * Copyright (C) 2017      Patrick Delcroix	<pmpdelcroix@gmail.com>
      *
    @@ -25,7 +25,7 @@
      *		\brief      Page to show a bank statement report
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
     require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
    @@ -813,7 +813,6 @@ else
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/bank/transfer.php b/htdocs/compta/bank/transfer.php
    index 765001e75a5..ae6b625b6e5 100644
    --- a/htdocs/compta/bank/transfer.php
    +++ b/htdocs/compta/bank/transfer.php
    @@ -1,10 +1,11 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012	   Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -26,7 +27,7 @@
      *		\brief      Page de saisie d'un virement
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
    @@ -253,7 +254,7 @@ $form->select_comptes($account_to, 'account_to', 0, '', 1, '', empty($conf->mult
     print "</td>\n";
     
     print "<td>";
    -$form->select_date((! empty($dateo)?$dateo:''),'','','','','add');
    +print $form->selectDate((! empty($dateo)?$dateo:''), '', '', '', '', 'add');
     print "</td>\n";
     print '<td><input name="label" class="flat quatrevingtpercent" type="text" value="'.dol_escape_htmltag($label).'"></td>';
     print '<td><input name="amount" class="flat" type="text" size="6" value="'.dol_escape_htmltag($amount).'"></td>';
    @@ -265,5 +266,6 @@ print '<br><div class="center"><input type="submit" class="button" value="'.$lan
     
     print "</form>";
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/bank/treso.php b/htdocs/compta/bank/treso.php
    index 0fb8880ce87..ef471aea693 100644
    --- a/htdocs/compta/bank/treso.php
    +++ b/htdocs/compta/bank/treso.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2005-2009 Regis Houssin               <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005-2009 Regis Houssin               <regis.houssin@inodbox.com>
      * Copyright (C) 2008-2009 Laurent Destailleur (Eldy)  <eldy@users.sourceforge.net>
      * Copyright (C) 2008      Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      * Copyright (C) 2015	   Marcos García			   <marcosgdf@gmail.com
    @@ -49,6 +49,9 @@ $result=restrictedArea($user,'banque',$id,'bank_account&bank_account','','',$fie
     $vline=isset($_GET["vline"])?$_GET["vline"]:$_POST["vline"];
     $page=isset($_GET["page"])?$_GET["page"]:0;
     
    +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
    +$hookmanager->initHooks(array('banktreso','globalcard'));
    +
     /*
      * View
      */
    @@ -130,6 +133,7 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
     
     
     	// Remainder to pay in future
    +  $sqls = array();
     
     	// Customer invoices
     	$sql = "SELECT 'invoice' as family, f.rowid as objid, f.facnumber as ref, f.total_ttc, f.type, f.date_lim_reglement as dlr,";
    @@ -138,79 +142,55 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
     	$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON f.fk_soc = s.rowid";
     	$sql.= " WHERE f.entity = ".$conf->entity;
     	$sql.= " AND f.paye = 0 AND f.fk_statut = 1";	// Not paid
    -    $sql.= " AND (f.fk_account IN (0, ".$object->id.") OR f.fk_account IS NULL)"; // Id bank account of invoice
    -    $sql.= " ORDER BY dlr ASC";
    +  $sql.= " AND (f.fk_account IN (0, ".$object->id.") OR f.fk_account IS NULL)"; // Id bank account of invoice
    +  $sql.= " ORDER BY dlr ASC";
    +  $sqls[] = $sql;
     
     	// Supplier invoices
    -	$sql2= " SELECT 'invoice_supplier' as family, ff.rowid as objid, ff.ref as ref, ff.ref_supplier as ref_supplier, (-1*ff.total_ttc) as total_ttc, ff.type, ff.date_lim_reglement as dlr,";
    -	$sql2.= " s.rowid as socid, s.nom as name, s.fournisseur";
    -	$sql2.= " FROM ".MAIN_DB_PREFIX."facture_fourn as ff";
    -	$sql2.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON ff.fk_soc = s.rowid";
    -	$sql2.= " WHERE ff.entity = ".$conf->entity;
    -	$sql2.= " AND ff.paye = 0 AND fk_statut = 1";	// Not paid
    -    $sql2.= " AND (ff.fk_account IN (0, ".$object->id.") OR ff.fk_account IS NULL)"; // Id bank account of supplier invoice
    -    $sql2.= " ORDER BY dlr ASC";
    +	$sql = " SELECT 'invoice_supplier' as family, ff.rowid as objid, ff.ref as ref, ff.ref_supplier as ref_supplier, (-1*ff.total_ttc) as total_ttc, ff.type, ff.date_lim_reglement as dlr,";
    +	$sql.= " s.rowid as socid, s.nom as name, s.fournisseur";
    +	$sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as ff";
    +	$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON ff.fk_soc = s.rowid";
    +	$sql.= " WHERE ff.entity = ".$conf->entity;
    +	$sql.= " AND ff.paye = 0 AND fk_statut = 1";	// Not paid
    +  $sql.= " AND (ff.fk_account IN (0, ".$object->id.") OR ff.fk_account IS NULL)"; // Id bank account of supplier invoice
    +  $sql.= " ORDER BY dlr ASC";
    +  $sqls[] = $sql;
     
     	// Social contributions
    -	$sql3= " SELECT 'social_contribution' as family, cs.rowid as objid, cs.libelle as ref, (-1*cs.amount) as total_ttc, ccs.libelle as type, cs.date_ech as dlr";
    -    $sql3.= ", cs.fk_account";
    -	$sql3.= " FROM ".MAIN_DB_PREFIX."chargesociales as cs";
    -	$sql3.= " LEFT JOIN ".MAIN_DB_PREFIX."c_chargesociales as ccs ON cs.fk_type = ccs.id";
    -	$sql3.= " WHERE cs.entity = ".$conf->entity;
    -	$sql3.= " AND cs.paye = 0";	// Not paid
    -    $sql3.= " AND (cs.fk_account IN (0, ".$object->id.") OR cs.fk_account IS NULL)"; // Id bank account of social contribution
    -	$sql3.= " ORDER BY dlr ASC";
    +	$sql = " SELECT 'social_contribution' as family, cs.rowid as objid, cs.libelle as ref, (-1*cs.amount) as total_ttc, ccs.libelle as type, cs.date_ech as dlr";
    +  $sql.= ", cs.fk_account";
    +	$sql.= " FROM ".MAIN_DB_PREFIX."chargesociales as cs";
    +	$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_chargesociales as ccs ON cs.fk_type = ccs.id";
    +	$sql.= " WHERE cs.entity = ".$conf->entity;
    +	$sql.= " AND cs.paye = 0";	// Not paid
    +  $sql.= " AND (cs.fk_account IN (0, ".$object->id.") OR cs.fk_account IS NULL)"; // Id bank account of social contribution
    +	$sql.= " ORDER BY dlr ASC";
    +  $sqls[] = $sql;
    +
    +  // others sql
    +  $parameters = array();
    +  $reshook = $hookmanager->executeHooks('addMoreSQL', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +  if(empty($reshook) and isset($hookmanager->resArray['sql'])){
    +    $sqls[] = $hookmanager->resArray['sql'];
    +  }
     
     	$error=0;
     	$tab_sqlobjOrder=array();
     	$tab_sqlobj=array();
     
    -	// List customer invoices
    -	$result = $db->query($sql);
    -	if ($result)
    -	{
    -		$num = $db->num_rows($result);
    -		for ($i = 0;$i < $num;$i++)
    -		{
    -			$sqlobj = $db->fetch_object($result);
    -			$tab_sqlobj[] = $sqlobj;
    -			$tab_sqlobjOrder[]= $db->jdate($sqlobj->dlr);
    -		}
    -		$db->free($result);
    -	}
    -	else $error++;
    -
    -	// List supplier invoices
    -	$result2=$db->query($sql2);
    -	if ($result2)
    -	{
    -		$num = $db->num_rows($result2);
    -		for ($i = 0;$i < $num;$i++)
    -		{
    -			$sqlobj = $db->fetch_object($result2);
    -			$tab_sqlobj[] = $sqlobj;
    -			$tab_sqlobjOrder[]= $db->jdate($sqlobj->dlr);
    -		}
    -		$db->free($result2);
    -	}
    -	else $error++;
    -
    -	// List social contributions
    -	$result3=$db->query($sql3);
    -	if ($result3)
    -	{
    -		$num = $db->num_rows($result3);
    -
    -		for ($i = 0;$i < $num;$i++)
    -		{
    -			$sqlobj = $db->fetch_object($result3);
    -			$tab_sqlobj[] = $sqlobj;
    -			$tab_sqlobjOrder[]= $db->jdate($sqlobj->dlr);
    -		}
    -		$db->free($result3);
    -	}
    -	else $error++;
    -
    +  foreach($sqls as $sql){
    +    $resql = $db->query($sql);
    +    if($resql){
    +      while($sqlobj = $db->fetch_object($resql)){
    +        $tab_sqlobj[] = $sqlobj;
    +        $tab_sqlobjOrder[]= $db->jdate($sqlobj->dlr);
    +      }
    +      $db->free($resql);
    +    }else{
    +      $error++;
    +    }
    +  }
     
     	// Sort array
     	if (! $error)
    @@ -228,7 +208,6 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
     
     		$num = count($tab_sqlobj);
     
    -		//$num = $db->num_rows($result);
     		$i = 0;
     		while ($i < $num)
     		{
    @@ -236,7 +215,6 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
     			$ref = '';
     			$refcomp = '';
     
    -			//$obj = $db->fetch_object($result);
     			$obj = array_shift($tab_sqlobj);
     
     			if ($obj->family == 'invoice_supplier')
    @@ -284,6 +262,14 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
     				$paiement = -1*$socialcontribstatic->getSommePaiement();	// Payment already done
     			}
     
    +      $parameters = array('obj' => $obj);
    +      $reshook = $hookmanager->executeHooks('moreFamily', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +      if(empty($reshook)){
    +        $ref = isset($hookmanager->resArray['ref']) ? $hookmanager->resArray['ref'] : '';
    +        $refcomp = isset($hookmanager->resArray['refcomp']) ? $hookmanager->resArray['refcomp'] : '';
    +        $paiement = isset($hookmanager->resArray['paiement']) ? $hookmanager->resArray['paiement'] : 0;
    +      }
    +
     			$total_ttc = $obj->total_ttc;
     			if ($paiement) $total_ttc = $obj->total_ttc - $paiement;
     			$solde += $total_ttc;
    @@ -291,8 +277,6 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
     			// We discard lines with a remainder to pay to 0
     			if (price2num($total_ttc) != 0)
     			{
    -
    -
         			// Show line
         			print '<tr class="oddeven">';
         			print '<td>';
    @@ -315,20 +299,28 @@ if ($_REQUEST["account"] || $_REQUEST["ref"])
     		dol_print_error($db);
     	}
     
    -	// Solde actuel
    +	// Other lines
    +	$parameters = array('solde' => $solde);
    +	$reshook = $hookmanager->executeHooks('printObjectLine', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +	if(empty($reshook)){
    +		print $hookmanager->resPrint;
    +    $solde = isset($hookmanager->resArray['solde']) ? $hookmanager->resArray['solde'] : $solde;
    +	}
     
    +  // solde
     	print '<tr class="liste_total">';
     	print '<td align="left" colspan="5">'.$langs->trans("FutureBalance").' ('.$object->currency_code.')</td>';
     	print '<td align="right" class="nowrap">'.price($solde, 0, $langs, 0, 0, -1, $object->currency_code).'</td>';
     	print '</tr>';
     
     	print "</table>";
    -    print "</div>";
    +  print "</div>";
     }
     else
     {
     	print $langs->trans("ErrorBankAccountNotFound");
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/bank/various_payment/card.php b/htdocs/compta/bank/various_payment/card.php
    index 1b4d7579892..0f417777417 100644
    --- a/htdocs/compta/bank/various_payment/card.php
    +++ b/htdocs/compta/bank/various_payment/card.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2017       Alexandre Spangaro  <aspangaro@zendsi.com>
    +/* Copyright (C) 2017       Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -85,7 +86,7 @@ if (empty($reshook))
     	{
     		if ($action != 'addlink')
     		{
    -			$urltogo=$backtopage?$backtopage:dol_buildpath('/compta/bank/various_payment/index.php',1);
    +			$urltogo=$backtopage?$backtopage:dol_buildpath('/compta/bank/various_payment/list.php',1);
     			header("Location: ".$urltogo);
     			exit;
     		}
    @@ -154,7 +155,8 @@ if (empty($reshook))
     			if ($ret > 0)
     			{
     				$db->commit();
    -				header("Location: index.php");
    +				$urltogo=($backtopage ? $backtopage : DOL_URL_ROOT.'/compta/bank/various_payment/list.php');
    +				header("Location: ".$urltogo);
     				exit;
     			}
     			else
    @@ -189,7 +191,7 @@ if (empty($reshook))
     				if ($result >= 0)
     				{
     					$db->commit();
    -					header("Location: ".DOL_URL_ROOT.'/compta/bank/various_payment/index.php');
    +					header("Location: ".DOL_URL_ROOT.'/compta/bank/various_payment/list.php');
     					exit;
     				}
     				else
    @@ -220,7 +222,7 @@ if (empty($reshook))
     llxHeader("",$langs->trans("VariousPayment"));
     
     $form = new Form($db);
    -if (! empty($conf->accounting->enabled)) $formaccounting = New FormAccounting($db);
    +if (! empty($conf->accounting->enabled)) $formaccounting = new FormAccounting($db);
     if (! empty($conf->projet->enabled)) $formproject = new FormProjets($db);
     
     if ($id)
    @@ -255,13 +257,13 @@ if ($action == 'create')
     	// Date payment
     	print '<tr><td>';
     	print fieldLabel('DatePayment','datep',1).'</td><td>';
    -	print $form->select_date((empty($datep)?-1:$datep),"datep",'','','','add',1,1);
    +	print $form->selectDate((empty($datep)?-1:$datep),"datep",'','','','add',1,1);
     	print '</td></tr>';
     
     	// Date value for bank
     	print '<tr><td>';
     	print fieldLabel('DateValue','datev',0).'</td><td>';
    -	print $form->select_date((empty($datev)?-1:$datev),"datev",'','','','add',1,1);
    +	print $form->selectDate((empty($datev)?-1:$datev),"datev",'','','','add',1,1);
     	print '</td></tr>';
     
     	// Label
    @@ -375,7 +377,7 @@ if ($id)
     	{
     		$langs->load("projects");
     		$morehtmlref.=$langs->trans('Project') . ' ';
    -		if ($user->rights->tax->charges->creer)
    +		if ($user->rights->banque->modifier)
     		{
     			if ($action != 'classify')
     				$morehtmlref.='<a href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
    @@ -394,16 +396,14 @@ if ($id)
     			if (! empty($object->fk_project)) {
     				$proj = new Project($db);
     				$proj->fetch($object->fk_project);
    -				$morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id=' . $object->fk_project . '" title="' . $langs->trans('ShowProject') . '">';
    -				$morehtmlref.=$proj->ref;
    -				$morehtmlref.='</a>';
    +				$morehtmlref.=$proj->getNomUrl(1);
     			} else {
     				$morehtmlref.='';
     			}
     		}
     	}
     	$morehtmlref.='</div>';
    -	$linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/various_payment/index.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
    +	$linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/various_payment/list.php?restore_lastsearch_values=1'.(! empty($socid)?'&socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
     
     	dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright);
     
    @@ -499,8 +499,6 @@ if ($id)
     	print "</div>";
     }
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/bank/various_payment/document.php b/htdocs/compta/bank/various_payment/document.php
    index cf596860a4b..c255ef19c16 100644
    --- a/htdocs/compta/bank/various_payment/document.php
    +++ b/htdocs/compta/bank/various_payment/document.php
    @@ -27,6 +27,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array("compta", "banks", "bills", "users", "accountancy"));
    @@ -81,15 +82,15 @@ if ($object->id)
     {
     	$head=various_payment_prepare_head($object);
     
    -	dol_fiche_head($head, 'documents',  $langs->trans("VariousPayment"), 0, 'payment');
    +	dol_fiche_head($head, 'documents',  $langs->trans("VariousPayment"), -1, 'payment');
     
     	$morehtmlref='<div class="refidno">';
     	// Project
     	if (! empty($conf->projet->enabled))
     	{
     		$langs->load("projects");
    -		$morehtmlref.=$langs->trans('Project') . ' ';
    -		if ($user->rights->tax->charges->creer)
    +		$morehtmlref.=$langs->trans('Project') . ' : ';
    +		if ($user->rights->banque->modifier && 0)
     		{
     			if ($action != 'classify')
     				$morehtmlref.='<a href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
    @@ -108,23 +109,21 @@ if ($object->id)
     			if (! empty($object->fk_project)) {
     				$proj = new Project($db);
     				$proj->fetch($object->fk_project);
    -				$morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id=' . $object->fk_project . '" title="' . $langs->trans('ShowProject') . '">';
    -				$morehtmlref.=$proj->ref;
    -				$morehtmlref.='</a>';
    +				$morehtmlref.=$proj->getNomUrl(1);
     			} else {
     				$morehtmlref.='';
     			}
     		}
     	}
     	$morehtmlref.='</div>';
    -	$linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/various_payment/index.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
    +	$linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/various_payment/list.php?restore_lastsearch_values=1'.(! empty($socid)?'&socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
     
     	dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright);
     
     	print '<div class="fichecenter">';
     	print '<div class="underbanner clearboth"></div>';
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -154,6 +153,6 @@ else
     	print $langs->trans("ErrorUnknown");
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/bank/various_payment/info.php b/htdocs/compta/bank/various_payment/info.php
    index bb66871d6c0..d9f8709b155 100644
    --- a/htdocs/compta/bank/various_payment/info.php
    +++ b/htdocs/compta/bank/various_payment/info.php
    @@ -25,6 +25,7 @@ require '../../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array("compta", "banks", "bills", "users", "accountancy"));
    @@ -49,15 +50,56 @@ $object->info($id);
     
     $head = various_payment_prepare_head($object);
     
    -dol_fiche_head($head, 'info', $langs->trans("VariousPayment"), 0, 'payment');
    +dol_fiche_head($head, 'info', $langs->trans("VariousPayment"), -1, 'payment');
     
     
    +$morehtmlref='<div class="refidno">';
    +// Project
    +if (! empty($conf->projet->enabled))
    +{
    +	$langs->load("projects");
    +	$morehtmlref.=$langs->trans('Project') . ' : ';
    +	if ($user->rights->banque->modifier && 0)
    +	{
    +		if ($action != 'classify')
    +			$morehtmlref.='<a href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
    +			if ($action == 'classify') {
    +				//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
    +				$morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
    +				$morehtmlref.='<input type="hidden" name="action" value="classin">';
    +				$morehtmlref.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +				$morehtmlref.=$formproject->select_projects(0, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
    +				$morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
    +				$morehtmlref.='</form>';
    +			} else {
    +				$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1);
    +			}
    +	} else {
    +		if (! empty($object->fk_project)) {
    +			$proj = new Project($db);
    +			$proj->fetch($object->fk_project);
    +			$morehtmlref.=$proj->getNomUrl(1);
    +		} else {
    +			$morehtmlref.='';
    +		}
    +	}
    +}
    +$morehtmlref.='</div>';
    +$linkback = '<a href="'.DOL_URL_ROOT.'/compta/bank/various_payment/list.php?restore_lastsearch_values=1'.(! empty($socid)?'&socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
    +
    +dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', $morehtmlright);
    +
    +print '<div class="fichecenter">';
    +print '<div class="underbanner clearboth"></div>';
    +
    +print '<br>';
    +
     print '<table width="100%"><tr><td>';
     dol_print_object_info($object);
     print '</td></tr></table>';
     
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/bank/various_payment/index.php b/htdocs/compta/bank/various_payment/list.php
    similarity index 97%
    rename from htdocs/compta/bank/various_payment/index.php
    rename to htdocs/compta/bank/various_payment/list.php
    index 6535e0c0082..91608666601 100644
    --- a/htdocs/compta/bank/various_payment/index.php
    +++ b/htdocs/compta/bank/various_payment/list.php
    @@ -1,6 +1,7 @@
     <?php
    -/* Copyright (C) 2017       Alexandre Spangaro  <aspangaro@zendsi.com>
    - * Copyright (C) 2017       Laurent Destailleur <eldy@users.sourceforge.net>
    +/* Copyright (C) 2017       Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2017       Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -17,7 +18,7 @@
      */
     
     /**
    - *  \file       htdocs/compta/bank/various_payment/index.php
    + *  \file       htdocs/compta/bank/various_payment/list.php
      *  \ingroup    bank
      *  \brief      List of various payments
      */
    @@ -189,7 +190,7 @@ if ($result)
     	// Date
     	print '<td class="liste_titre center">';
     	print '<div class="nowrap">';
    -	print $form->select_date($search_date, 'date_doc', 0, 0, 1);
    +	print $form->selectDate($search_date, 'date_doc', 0, 0, 1);
     	print '</div>';
     	print '</td>';
     
    @@ -344,5 +345,6 @@ else
     }
     
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php
    index 4b3caf4f790..f0188c5ed94 100644
    --- a/htdocs/compta/charges/index.php
    +++ b/htdocs/compta/charges/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2016 Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2011-2014 Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
    @@ -568,7 +568,6 @@ if (! empty($conf->salaries->enabled) && ! empty($user->rights->salaries->read))
     
     print '</form>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/clients.php b/htdocs/compta/clients.php
    index ceb9324961e..2fa9eecec73 100644
    --- a/htdocs/compta/clients.php
    +++ b/htdocs/compta/clients.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/compta/compta-files.php b/htdocs/compta/compta-files.php
    new file mode 100644
    index 00000000000..d8f4885a3b2
    --- /dev/null
    +++ b/htdocs/compta/compta-files.php
    @@ -0,0 +1,316 @@
    +<?php
    +/* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2017      Pierre-Henry Favre   <support@atm-consulting.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +/**
    + *  \file       htdocs/compta/compta-files.php
    + *  \ingroup    compta
    + *  \brief      Page to show portoflio and files of a thirdparty and download it
    + */
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
    +
    +restrictedArea($user,'banque');
    +
    +$langs->load("companies");
    +if (! empty($conf->facture->enabled)) $langs->load("bills");
    +$date_start =GETPOST('date_start','alpha');
    +$date_startDay= GETPOST('date_startday','int');
    +$date_startMonth= GETPOST('date_startmonth','int');
    +$date_startYear= GETPOST('date_startyear','int');
    +$date_start=($date_startDay)?dol_mktime(0,0,0,$date_startMonth,$date_startDay,$date_startYear):strtotime($date_start);
    +$date_stop =GETPOST('date_stop','alpha');
    +$date_stopDay= GETPOST('date_stopday','int');
    +$date_stopMonth= GETPOST('date_stopmonth','int');
    +$date_stopYear= GETPOST('date_stopyear','int');
    +//FIXME doldate
    +$date_stop=($date_stopDay)?dol_mktime(0,0,0,$date_stopMonth,$date_stopDay,$date_stopYear):strtotime($date_stop);
    +$action =GETPOST('action','alpha');
    +// Security check
    +//if ($user->societe_id) $id=$user->societe_id;
    +//$result = restrictedArea($user, 'societe', $id, '&societe');
    +//$object = new Societe($db);
    +//if ($id > 0) $object->fetch($id);
    +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
    +$hookmanager->initHooks(array('comptafilescard','globalcard'));
    +// Load variable for pagination
    +$limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
    +$sortfield = GETPOST('sortfield','alpha');
    +$sortorder = GETPOST('sortorder','alpha');
    +$page = GETPOST('page','int');
    +if (empty($page) || $page == -1) { $page = 0; }     // If $page is not defined, or '' or -1
    +$offset = $limit * $page;
    +$pageprev = $page - 1;
    +$pagenext = $page + 1;
    +if (! $sortfield) $sortfield="f.datef,f.rowid"; // Set here default search field
    +if (! $sortorder) $sortorder="DESC";
    +$arrayfields=array(
    +    'date'=>array('label'=>"Date", 'checked'=>1),
    +    //...
    +);
    +
    +
    +/*
    + * Actions
    + */
    +
    +//$parameters = array('socid' => $id);
    +//$reshook = $hookmanager->executeHooks('doActions', $parameters, $object); // Note that $object may have been modified by some hooks
    +//if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +
    +
    +
    +/*
    + * View
    + */
    +
    +$filesarray=array();
    +$result=false;
    +if(($action=="searchfiles"||$action=="dl" ) && $date_start && $date_stop){
    +    $wheretail=" '".$db->idate($date_start)."' AND '".$db->idate($date_stop)."'";
    +    $sql="SELECT rowid as id, facnumber as ref,paye as paid,total_ttc,fk_soc,datef as date, 'Invoice' as item FROM ".MAIN_DB_PREFIX."facture";
    +    $sql.=" WHERE datef between ".$wheretail;
    +    $sql.=" UNION ALL";
    +    $sql.=" SELECT rowid as id,ref, paye as paid, total_ttc, fk_soc,datef as date, 'InvoiceSupplier' as item  FROM ".MAIN_DB_PREFIX."facture_fourn";
    +    $sql.=" WHERE datef between  ".$wheretail;
    +    $sql.=" UNION ALL";
    +    $sql.=" SELECT rowid as id,ref,paid,total_ttc,fk_user_author as fk_soc,date_fin as date,'Expense' as item  FROM ".MAIN_DB_PREFIX."expensereport";
    +    $sql.=" WHERE date_fin between  ".$wheretail;
    +    $sql.=" UNION ALL";
    +    $sql.=" SELECT rowid as id,ref,paid,amount as total_ttc,CONCAT(firstname,' ',lastname) as fk_soc,datedon as date,'Donation' as item  FROM ".MAIN_DB_PREFIX."don";
    +    $sql.=" WHERE datedon between  ".$wheretail;
    +    $sql.=" UNION ALL";
    +    $sql.=" SELECT rowid as id,label as ref,1 as paid,amount as total_ttc,fk_user as fk_soc,datep as date,'Salary' as item  FROM ".MAIN_DB_PREFIX."payment_salary";
    +    $sql.=" WHERE datep between  ".$wheretail;
    +    $sql.=" UNION ALL";
    +    $sql.=" SELECT rowid as id,num_paiement as ref,1 as paid,amount as total_ttc,fk_charge as fk_soc,datep as date,'Charge' as item  FROM ".MAIN_DB_PREFIX."paiementcharge";
    +    $sql.=" WHERE datep between  ".$wheretail;
    +    $resd = $db->query($sql);
    +    $files=array();
    +    $link='';
    +
    +    if ($resd)
    +     {
    +         $numd = $db->num_rows($resd);
    +
    +        $upload_dir ='';
    +         $i=0;
    +         while($i<$numd)
    +         {
    +
    +
    +            $objd = $db->fetch_object($resd);
    +
    +            switch($objd->item){
    +            case "Invoice":
    +                $subdir=dol_sanitizeFileName($objd->ref);
    +                $upload_dir = $conf->facture->dir_output.'/'.$subdir;
    +                $link="../../document.php?modulepart=facture&file=".str_replace('/','%2F',$subdir).'%2F';
    +                break;
    +            case "InvoiceSupplier":
    +                $subdir=get_exdir($objd->id,2,0,0,$objd,'invoice_supplier').dol_sanitizeFileName($objd->ref);
    +                $upload_dir = $conf->fournisseur->facture->dir_output.'/'.$subdir;
    +                $link="../../document.php?modulepart=facture_fournisseur&file=".str_replace('/','%2F',$subdir).'%2F';
    +                break;
    +            case "Expense":
    +                $subdir=dol_sanitizeFileName($objd->ref);
    +                $upload_dir = $conf->expensereport->dir_output.'/'.$subdir;
    +                $link="../../document.php?modulepart=expensereport&file=".str_replace('/','%2F',$subdir).'%2F';
    +                break;
    +            case "Salary":
    +                $subdir=dol_sanitizeFileName($objd->id);
    +                $upload_dir = $conf->salaries->dir_output.'/'.$subdir;
    +                $link="../../document.php?modulepart=salaries&file=".str_replace('/','%2F',$subdir).'%2F';
    +                break;
    +            case "Donation":
    +                $subdir=get_exdir(null,2,0,1,$objd,'donation'). '/'. dol_sanitizeFileName($objd->id);
    +                $upload_dir = $conf->don->dir_output . '/' . $subdir;
    +                $link="../../document.php?modulepart=don&file=".str_replace('/','%2F',$subdir).'%2F';
    +                break;
    +            case "Charge":
    +                $subdir=dol_sanitizeFileName($objd->id);
    +                $upload_dir = $conf->tax->dir_output . '/' . $subdir;
    +                $link="../../document.php?modulepart=tax&file=".str_replace('/','%2F',$subdir).'%2F';
    +                break;
    +            default:
    +                break;
    +            }
    +
    +            if(!empty($upload_dir)){
    +                $result=true;
    +                $files=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview\.png)$','',SORT_ASC,1);
    +                foreach ($files as $key => $file){
    +                    $file['date']=$db->idate($objd->date);
    +                    $file['paid']=$objd->paid;
    +                    $file['amount']=$objd->total_ttc;
    +                    $file['ref']=$objd->ref;
    +                    $file['fk']=$objd->fk_soc;
    +                    $file['item']=$objd->item;
    +                    $file['link']=$link.$file['name'];
    +                    $out.= '<br><a href="'.$link.$file['name'].'">'.$file['name'].'</a>';
    +                    $filesarray[]=$file;
    +                }
    +                if(count($files)<1){
    +                    $nofile['date']=$db->idate($objd->date);
    +                    $nofile['paid']=$objd->paid;
    +                    $nofile['amount']=$objd->total_ttc;
    +                    $nofile['ref']=$objd->ref;
    +                    $nofile['fk']=$objd->fk_soc;
    +                    $nofile['item']=$objd->item;
    +                     $filesarray[]=$nofile;
    +                }
    +            }
    +          $i++;
    +         }
    +     }
    +     $db->free($resd);
    +}
    +/*
    + * cleanup of old ZIP
    + */
    +//FIXME
    +/*
    +*ZIP creation
    +*/
    +if($result & $action=="dl"){
    +        unset($zip);
    +   $log='date,type,ref,total,paid,filename,item_id'."\n";
    +        $zipname = ($date_start)."-".($date_stop).'_export.zip';
    +        $zip = new ZipArchive;
    +        $res = $zip->open($zipname, ZipArchive::OVERWRITE|ZipArchive::CREATE);
    +        if ($res){
    +          foreach ($filesarray as $key=> $file) {
    +                    if(file_exists($file["fullname"])) $zip->addFile($file["fullname"],$file["name"]);//
    +                    $log.=$file['date'].','.$file['item'].','.$file['ref'].','.$file['amount'].','.$file['paid'].','.$file["name"].','.$file['fk']."\n";
    +           }
    +          $zip->addFromString('log.csv', $log);
    +          $zip->close();
    +        ///Then download the zipped file.
    +          header('Content-Type: application/zip');
    +          header('Content-disposition: attachment; filename='.$zipname);
    +          header('Content-Length: ' . filesize($zipname));
    +          readfile($zipname);
    +                unlink($zipname);
    +          exit();
    +        }
    +}
    +// None
    +/*
    + *      View
    + */
    +$form = new Form($db);
    +$userstatic=new User($db);
    +$title=$langs->trans("ComptaFiles").' - '.$langs->trans("List");
    +//if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name.' - '.$langs->trans("Symmary");
    +$help_url='EN:Module_Accounting|FR:Module_Compatibilite'; //FIXME
    +llxHeader('',$title,$help_url);
    +print   '<div><form name="searchfiles" action="?action=searchfiles'.$tail.'" method="POST" >'."\n\t\t\t";
    +print    '<a>'.$langs->trans("dateStart").': '.$form->select_date($date_start,'date_start',0,0,0,"",1,1,1)."\n</a>";
    +print    '<a>'.$langs->trans("dateStop").': '.$form->select_date($date_stop,'date_stop',0,0,0,"",1,1,1)."\n</a>";
    +print   '<input class="butAction" type="submit" value="Go" /></form></div>'."\n\t\t";
    +if (!empty($date_start) && !empty($date_stop))echo dol_print_date($date_start)." - ".dol_print_date($date_stop);
    +print '<table class="noborder" width="100%">';
    +print '<tr class="liste_titre">';
    +//if (! empty($arrayfields['f.datef']['checked']))
    +print_liste_field_titre($arrayfields['date']['label'],$_SERVER["PHP_SELF"],"date","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
    +print '<td>'.$langs->trans("Type").'</td>';
    +print '<td align="right">'.$langs->trans("Ref").'</td>';
    +print '<td>'.$langs->trans("File").'</td>';
    +print '<td>'.$langs->trans("Paid").'</td>';
    +print '<td align="right">'.$langs->trans("Debit").'</td>';
    +print '<td align="right">'.$langs->trans("Credit").'</td>';
    +print '<td align="right">'.$langs->trans("Balance").'</td>';
    +print '</tr>';
    +if ($result)
    +{
    +    $TData = dol_sort_array($filesarray, 'date', 'ASC');
    +        if(empty($TData)) {
    +                        print '<tr class="oddeven"><td colspan="7">'.$langs->trans("NoItem").'</td></tr>';
    +        } else {
    +                        // Sort array by date ASC to calucalte balance
    +
    +                        $totalDebit = 0;
    +                        $totalCredit = 0;
    +                        // Balance calculation
    +                        $balance = 0;
    +                        foreach($TData as &$data1) {
    +                                if($data1['item']!='Invoice'&& $data1['item']!='Donation' ){
    +                                     $data1['amount']=-$data1['amount'];
    +                                }
    +                                if ($data1['amount']>0){
    +                               }else{
    +                               }
    +                               $balance += $data1['amount'];
    +                                $data1['balance'] = $balance;
    +                        }
    +                // Display array
    +                foreach($TData as $data) {
    +                        $html_class = '';
    +                        //if (!empty($data['fk_facture'])) $html_class = 'facid-'.$data['fk_facture'];
    +                        //elseif (!empty($data['fk_paiement'])) $html_class = 'payid-'.$data['fk_paiement'];
    +                        print '<tr class="oddeven '.$html_class.'">';
    +                        print "<td align=\"center\">";
    +                        print dol_print_date($data['date'],'day');
    +                        print "</td>\n";
    +                        print '<td aling="left">'.$data['item'].'</td>';
    +                         print '<td aling="left">'.$data['ref'].'</td>';
    +                        print '<td> <a href='.$data['link'].">".$data['name']."</a></td>\n";
    +                        print '<td aling="left">'.$data['paid'].'</td>';
    +                        print '<td align="right">'.(($data['amount'] > 0) ? price(abs($data['amount'])) : '')."</td>\n";
    +                        $totalDebit += ($data['amount'] > 0) ? abs($data['amount']) : 0;
    +                        print '<td align="right">'.(($data['amount'] > 0) ? '' : price(abs($data['amount'])))."</td>\n";
    +                        $totalCredit += ($data['amount'] > 0) ? 0 : abs($data['amount']);
    +                        // Balance
    +                        print '<td align="right">'.price($data['balance'])."</td>\n";
    +                        print "</tr>\n";
    +                }
    +                print '<tr class="liste_total">';
    +                print '<td colspan="5">&nbsp;</td>';
    +                print '<td align="right">'.price($totalDebit).'</td>';
    +                print '<td align="right">'.price($totalCredit).'</td>';
    +                print '<td align="right">'.price(price2num($totalDebit - $totalCredit, 'MT')).'</td>';
    +                print '<td></td>';
    +                print "</tr>\n";
    +                }
    +        }
    +print "</table>";
    +print   '<form name="dl" action="?action=dl" method="POST" >'."\n\t\t\t";
    +
    +print   '<input type="hidden" name="date_start" value="'.dol_print_date($date_start,'dayxcard').'" />';
    +print   '<input type="hidden" name="date_stop"  value="'.dol_print_date($date_stop, 'dayxcard').'" />';
    +
    +//print   '<input type="hidden" name="date_stopDay"  value="'.dol_print_date($date_stop, '%d').'" />';
    +//print   '<input type="hidden" name="date_stopMonth"  value="'.dol_print_date($date_stop, '%m').'" />';
    +//print   '<input type="hidden" name="date_stopYear"  value="'.dol_print_date($date_stop, '%Y').'" />';
    +
    +//print   '<input type="hidden" name="date_startDay"  value="'.dol_print_date($date_start, '%d').'" />';
    +//print   '<input type="hidden" name="date_startMonth"  value="'.dol_print_date($date_start, '%m').'" />';
    +//print   '<input type="hidden" name="date_startYear"  value="'.dol_print_date($date_start, '%m').'" />';
    +
    +
    +print   '<input class="butAction" type="submit" value="Download" /></form>'."\n\t\t</th>\n\t\t<th>\n\t\t\t";
    +
    +
    +
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/compta/deplacement/card.php b/htdocs/compta/deplacement/card.php
    index 05d509e268d..b213bd25061 100644
    --- a/htdocs/compta/deplacement/card.php
    +++ b/htdocs/compta/deplacement/card.php
    @@ -1,9 +1,10 @@
     <?php
     /* Copyright (C) 2003		Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012	Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012		Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
    + * Copyright (C) 2013       Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -20,8 +21,8 @@
      */
     
     /**
    - *  \file       	htdocs/compta/deplacement/card.php
    - *  \brief      	Page to show a trip card
    + *  \file       htdocs/compta/deplacement/card.php
    + *  \brief      Page to show a trip card
      */
     
     require '../../main.inc.php';
    @@ -263,7 +264,7 @@ if ($action == 'create')
     
         print "<tr>";
         print '<td class="fieldrequired">'.$langs->trans("Date").'</td><td>';
    -    print $form->select_date($datec?$datec:-1,'','','','','add',1,1,1);
    +    print $form->selectDate($datec?$datec:-1, '', '', '', '', 'add', 1, 1);
         print '</td></tr>';
     
         // Km
    @@ -360,7 +361,7 @@ else if ($id)
     
                 // Date
                 print '<tr><td class="fieldrequired">'.$langs->trans("Date").'</td><td>';
    -            print $form->select_date($object->date,'',0,0,0,'update',1,0,1);
    +            print $form->selectDate($object->date, '', 0, 0, 0, 'update', 1, 0);
                 print '</td></tr>';
     
                 // Km
    @@ -420,7 +421,6 @@ else if ($id)
                 if ($action == 'delete')
                 {
                     print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("DeleteTrip"),$langs->trans("ConfirmDeleteTrip"),"confirm_delete");
    -
                 }
     
                 $soc = new Societe($db);
    @@ -577,7 +577,6 @@ else if ($id)
         }
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/deplacement/class/deplacement.class.php b/htdocs/compta/deplacement/class/deplacement.class.php
    index 05664080ed3..2c21c2694ae 100644
    --- a/htdocs/compta/deplacement/class/deplacement.class.php
    +++ b/htdocs/compta/deplacement/class/deplacement.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -31,23 +31,52 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Deplacement extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='deplacement';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='deplacement';
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line = '';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element = '';
    -	public $ismultientitymanaged = 0;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     
    -	var $datec;         // Creation date
    -	var $dated;
    -	var $fk_user_author;
    -	var $fk_user;
    -	var $km;
    -	var $socid;
    -	var $statut;		// 0=draft, 1=validated
    -	var $extraparams=array();
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 0;
     
    -	var $statuts=array();
    -	var $statuts_short=array();
    +	public $datec;         // Creation date
    +	public $dated;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_author;
    +
    +	/**
    +	 * @var int User ID
    +	 */
    +	public $fk_user;
    +
    +	public $km;
    +	public $socid;
    +	public $statut;		// 0=draft, 1=validated
    +	public $extraparams=array();
    +
    +	public $statuts=array();
    +	public $statuts_short=array();
     
        /**
     	* Constructor
    @@ -146,7 +175,6 @@ class Deplacement extends CommonObject
     			$this->db->rollback();
     			return -1;
     		}
    -
     	}
     
     	/**
    @@ -293,6 +321,7 @@ class Deplacement extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -302,35 +331,36 @@ class Deplacement extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
     			return $langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			return $langs->trans($this->statuts_short[$statut]);
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts_short[$statut]);
     			if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts_short[$statut]);
     			if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]);
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0');
     			if ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4');
     			if ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]);
     			if ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts[$statut]);
     			if ($statut==2 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut==0 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut0');
     			if ($statut==1 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut4');
    @@ -445,6 +475,4 @@ class Deplacement extends CommonObject
     			dol_print_error($this->db);
     		}
     	}
    -
     }
    -
    diff --git a/htdocs/compta/deplacement/class/deplacementstats.class.php b/htdocs/compta/deplacement/class/deplacementstats.class.php
    index 75ac39a7cca..ae93eb094d9 100644
    --- a/htdocs/compta/deplacement/class/deplacementstats.class.php
    +++ b/htdocs/compta/deplacement/class/deplacementstats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,6 +30,9 @@ include_once DOL_DOCUMENT_ROOT . '/compta/deplacement/class/deplacement.class.ph
      */
     class DeplacementStats extends Stats
     {
    +    /**
    +     * @var string Name of table without prefix where object is stored
    +     */
         public $table_element;
     
         var $socid;
    diff --git a/htdocs/compta/deplacement/document.php b/htdocs/compta/deplacement/document.php
    index 59d92140c86..b17974b444a 100644
    --- a/htdocs/compta/deplacement/document.php
    +++ b/htdocs/compta/deplacement/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2011-2012 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -91,7 +91,7 @@ if ($object->id)
     	dol_fiche_head($head, 'documents',  $langs->trans("TripCard"), 0, 'trip');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -122,13 +122,12 @@ if ($object->id)
         $permission = $user->rights->deplacement->creer;
         $param = '&id=' . $object->id;
         include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
     }
     else
     {
     	print $langs->trans("ErrorUnknown");
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/deplacement/index.php b/htdocs/compta/deplacement/index.php
    index a390023e280..ef28a7909f9 100644
    --- a/htdocs/compta/deplacement/index.php
    +++ b/htdocs/compta/deplacement/index.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003		Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015	Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004		Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2011	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011	Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -191,7 +191,6 @@ if ($result)
     
                 $i++;
             }
    -
         }
         else
         {
    @@ -204,7 +203,6 @@ else dol_print_error($db);
     
     print '</div></div></div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/deplacement/info.php b/htdocs/compta/deplacement/info.php
    index 6a62484323f..f63b1765efb 100644
    --- a/htdocs/compta/deplacement/info.php
    +++ b/htdocs/compta/deplacement/info.php
    @@ -59,5 +59,6 @@ if ($id)
         print '</div>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/deplacement/list.php b/htdocs/compta/deplacement/list.php
    index bdbdad0a712..3dfbac0e726 100644
    --- a/htdocs/compta/deplacement/list.php
    +++ b/htdocs/compta/deplacement/list.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003		Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012	Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004		Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2011	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012		Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -212,6 +212,6 @@ else
         dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/deplacement/stats/index.php b/htdocs/compta/deplacement/stats/index.php
    index cf652948a6e..207e19fc265 100644
    --- a/htdocs/compta/deplacement/stats/index.php
    +++ b/htdocs/compta/deplacement/stats/index.php
    @@ -256,6 +256,7 @@ print '</table>';
     print '</form>';
     print '<br><br>';
     
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="border" width="100%">';
     print '<tr height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -288,7 +289,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    -
    +print '</div>';
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
     
    @@ -312,7 +313,6 @@ print '<div style="clear:both"></div>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/admin/facture_cust_extrafields.php b/htdocs/compta/facture/admin/facture_cust_extrafields.php
    index 2c676e399de..b0816d762a8 100644
    --- a/htdocs/compta/facture/admin/facture_cust_extrafields.php
    +++ b/htdocs/compta/facture/admin/facture_cust_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     * Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
     * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
    -* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
    +* Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
     * Copyright (C) 2013 Jean-Francois FERRY <jfefe@aternatik.fr>
     *
     * This program is free software; you can redistribute it and/or modify
    @@ -80,7 +80,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -93,7 +93,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -114,6 +114,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/admin/facture_rec_cust_extrafields.php b/htdocs/compta/facture/admin/facture_rec_cust_extrafields.php
    index 18aa3c99442..153f959b381 100644
    --- a/htdocs/compta/facture/admin/facture_rec_cust_extrafields.php
    +++ b/htdocs/compta/facture/admin/facture_rec_cust_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     * Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
     * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
    -* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
    +* Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
     * Copyright (C) 2013 Jean-Francois FERRY <jfefe@aternatik.fr>
     * Copyright (C) 2017 John BOTELLA <contact@atm-consulting.fr>
     *
    @@ -81,7 +81,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -94,7 +94,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -115,6 +115,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/admin/facturedet_cust_extrafields.php b/htdocs/compta/facture/admin/facturedet_cust_extrafields.php
    index 2b90ae7fe05..74da2466e1e 100644
    --- a/htdocs/compta/facture/admin/facturedet_cust_extrafields.php
    +++ b/htdocs/compta/facture/admin/facturedet_cust_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     * Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
     * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
    -* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
    +* Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
     * Copyright (C) 2013 Jean-Francois FERRY <jfefe@aternatik.fr>
     * Copyright (C) 2013 Florian Henry	<florian.henry@open-concept.pro>
     *
    @@ -81,7 +81,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -94,7 +94,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -113,6 +113,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/admin/facturedet_rec_cust_extrafields.php b/htdocs/compta/facture/admin/facturedet_rec_cust_extrafields.php
    index 97f8b78b195..637928e80ee 100644
    --- a/htdocs/compta/facture/admin/facturedet_rec_cust_extrafields.php
    +++ b/htdocs/compta/facture/admin/facturedet_rec_cust_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     * Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
     * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
    -* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
    +* Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
     * Copyright (C) 2013 Jean-Francois FERRY <jfefe@aternatik.fr>
     * Copyright (C) 2013 Florian Henry	<florian.henry@open-concept.pro>
     *
    @@ -81,7 +81,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -94,7 +94,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +	print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -113,6 +113,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php
    index 9ad79393499..cafd59569bb 100644
    --- a/htdocs/compta/facture/card.php
    +++ b/htdocs/compta/facture/card.php
    @@ -1,19 +1,20 @@
     <?php
    -/* Copyright (C) 2002-2006 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
    - * Copyright (C) 2004      Eric Seigne           <eric.seigne@ryxeo.com>
    - * Copyright (C) 2004-2016 Laurent Destailleur   <eldy@users.sourceforge.net>
    - * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2015 Regis Houssin         <regis.houssin@capnetworks.com>
    - * Copyright (C) 2006      Andre Cianfarani      <acianfa@free.fr>
    - * Copyright (C) 2010-2015 Juanjo Menent         <jmenent@2byte.es>
    - * Copyright (C) 2012-2013 Christophe Battarel   <christophe.battarel@altairis.fr>
    - * Copyright (C) 2012-2013 Cédric Salvador       <csalvador@gpcsolutions.fr>
    - * Copyright (C) 2012-2014 Raphaël Doursenaud    <rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) 2013      Jean-Francois FERRY   <jfefe@aternatik.fr>
    - * Copyright (C) 2013-2014 Florian Henry         <florian.henry@open-concept.pro>
    - * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    - * Copyright (C) 2014-2018 Ferran Marcet	 	 <fmarcet@2byte.es>
    - * Copyright (C) 2015-2016 Marcos García         <marcosgdf@gmail.com>
    +/* Copyright (C) 2002-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004       Eric Seigne             <eric.seigne@ryxeo.com>
    + * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
    + * Copyright (C) 2005-2015  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2006       Andre Cianfarani        <acianfa@free.fr>
    + * Copyright (C) 2010-2015  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2012-2013  Christophe Battarel     <christophe.battarel@altairis.fr>
    + * Copyright (C) 2012-2013  Cédric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2012-2014  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2013       Jean-Francois FERRY     <jfefe@aternatik.fr>
    + * Copyright (C) 2013-2014  Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2014-2018  Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2015-2016  Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -108,15 +109,29 @@ if ($id > 0 || ! empty($ref)) {
     // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
     $hookmanager->initHooks(array('invoicecard','globalcard'));
     
    -$permissionnote = $user->rights->facture->creer; // Used by the include of actions_setnotes.inc.php
    -$permissiondellink=$user->rights->facture->creer;	// Used by the include of actions_dellink.inc.php
    -$permissiontoedit = $user->rights->facture->creer; // Used by the include of actions_lineupdonw.inc.php
    +$usercanread = $user->rights->facture->lire;
    +$usercancreate = $user->rights->facture->creer;
    +$usercanissuepayment = $user->rights->facture->paiement;
    +$usercandelete = $user->rights->facture->supprimer;
    +$usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->validate)));
    +$usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->facture->invoice_advance->send);
    +$usercanreopen = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->facture->invoice_advance->reopen);
    +$usercanunvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($usercancreate)) || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->unvalidate)));
    +
    +$usercanproductignorepricemin = ((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS));
    +$usercancreatemargin = $user->rights->margins->creer;
    +$usercanreadallmargin = $user->rights->margins->liretous;
    +$usercancreatewithdrarequest = $user->rights->prelevement->bons->creer;
    +
    +$permissionnote = $usercancreate; // Used by the include of actions_setnotes.inc.php
    +$permissiondellink = $usercancreate;	// Used by the include of actions_dellink.inc.php
    +$permissiontoedit = $usercancreate; // Used by the include of actions_lineupdonw.inc.php
     
     // Security check
     $fieldid = (! empty($ref) ? 'facnumber' : 'rowid');
     if ($user->societe_id) $socid = $user->societe_id;
     $isdraft = (($object->statut == Facture::STATUS_DRAFT) ? 1 : 0);
    -$result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid, null, $isdraft);
    +$result = restrictedArea($user, 'facture', $id, '', '', 'fk_soc', $fieldid, $isdraft);
     
     
     /*
    @@ -146,7 +161,7 @@ if (empty($reshook))
     	include DOL_DOCUMENT_ROOT.'/core/actions_lineupdown.inc.php';	// Must be include, not include_once
     
     	// Action clone object
    -	if ($action == 'confirm_clone' && $confirm == 'yes' && $user->rights->facture->creer) {
    +	if ($action == 'confirm_clone' && $confirm == 'yes' && $usercancreate) {
     	//	if (1 == 0 && empty($_REQUEST["clone_content"]) && empty($_REQUEST["clone_receivers"])) {
     	//		$mesgs [] = '<div class="error">' . $langs->trans("NoCloneOptionsSpecified") . '</div>';
     	//	} else {
    @@ -164,7 +179,7 @@ if (empty($reshook))
     	}
     
     	// Change status of invoice
    -	else if ($action == 'reopen' && $user->rights->facture->creer) {
    +	else if ($action == 'reopen' && $usercancreate) {
     		$result = $object->fetch($id);
     		if ($object->statut == 2 || ($object->statut == 3 && $object->close_code != 'replaced') || ($object->statut == 1 && $object->paye == 1)) {    // ($object->statut == 1 && $object->paye == 1) should not happened but can be found when data are corrupted
     			$result = $object->set_unpaid($user);
    @@ -193,8 +208,8 @@ if (empty($reshook))
     
     		$isErasable=$object->is_erasable();
     
    -		if (($user->rights->facture->supprimer && $isErasable > 0)
    -			|| ($user->rights->facture->creer && $isErasable == 1))
    +		if (($usercandelete && $isErasable > 0)
    +			|| ($usercancreate && $isErasable == 1))
     		{
     			$result = $object->delete($user, 0, $idwarehouse);
     			if ($result > 0) {
    @@ -208,7 +223,7 @@ if (empty($reshook))
     	}
     
     	// Delete line
    -	else if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->facture->creer)
    +	else if ($action == 'confirm_deleteline' && $confirm == 'yes' && $usercancreate)
     	{
     		$object->fetch($id);
     		$object->fetch_thirdparty();
    @@ -242,7 +257,7 @@ if (empty($reshook))
     	}
     
     	// Delete link of credit note to invoice
    -	else if ($action == 'unlinkdiscount' && $user->rights->facture->creer)
    +	else if ($action == 'unlinkdiscount' && $usercancreate)
     	{
     		$discount = new DiscountAbsolute($db);
     		$result = $discount->fetch(GETPOST("discountid"));
    @@ -250,7 +265,7 @@ if (empty($reshook))
     	}
     
     	// Validation
    -	else if ($action == 'valid' && $user->rights->facture->creer)
    +	else if ($action == 'valid' && $usercancreate)
     	{
     		$object->fetch($id);
     
    @@ -270,7 +285,7 @@ if (empty($reshook))
     		}
     	}
     
    -	else if ($action == 'set_thirdparty' && $user->rights->facture->creer)
    +	else if ($action == 'set_thirdparty' && $usercancreate)
     	{
     		$object->fetch($id);
     		$object->setValueFrom('fk_soc', $socid, '', null, 'int', '', $user, 'BILL_MODIFY');
    @@ -279,13 +294,13 @@ if (empty($reshook))
     		exit();
     	}
     
    -	else if ($action == 'classin' && $user->rights->facture->creer)
    +	else if ($action == 'classin' && $usercancreate)
     	{
     		$object->fetch($id);
     		$object->setProject($_POST['projectid']);
     	}
     
    -	else if ($action == 'setmode' && $user->rights->facture->creer)
    +	else if ($action == 'setmode' && $usercancreate)
     	{
     		$object->fetch($id);
     		$result = $object->setPaymentMethods(GETPOST('mode_reglement_id', 'int'));
    @@ -294,16 +309,16 @@ if (empty($reshook))
     	}
     
     	// Multicurrency Code
    -	else if ($action == 'setmulticurrencycode' && $user->rights->facture->creer) {
    +	else if ($action == 'setmulticurrencycode' && $usercancreate) {
     		$result = $object->setMulticurrencyCode(GETPOST('multicurrency_code', 'alpha'));
     	}
     
     	// Multicurrency rate
    -	else if ($action == 'setmulticurrencyrate' && $user->rights->facture->creer) {
    +	else if ($action == 'setmulticurrencyrate' && $usercancreate) {
     		$result = $object->setMulticurrencyRate(price2num(GETPOST('multicurrency_tx')), GETPOST('calculation_mode', 'int'));
     	}
     
    -	else if ($action == 'setinvoicedate' && $user->rights->facture->creer)
    +	else if ($action == 'setinvoicedate' && $usercancreate)
     	{
     		$object->fetch($id);
     		$old_date_lim_reglement = $object->date_lim_reglement;
    @@ -322,7 +337,7 @@ if (empty($reshook))
     		if ($result < 0) dol_print_error($db, $object->error);
     	}
     
    -	else if ($action == 'setdate_pointoftax' && $user->rights->facture->creer)
    +	else if ($action == 'setdate_pointoftax' && $usercancreate)
     	{
     		$object->fetch($id);
     		$date_pointoftax = dol_mktime(12, 0, 0, $_POST['date_pointoftaxmonth'], $_POST['date_pointoftaxday'], $_POST['date_pointoftaxyear']);
    @@ -331,7 +346,7 @@ if (empty($reshook))
     		if ($result < 0) dol_print_error($db, $object->error);
     	}
     
    -	else if ($action == 'setconditions' && $user->rights->facture->creer)
    +	else if ($action == 'setconditions' && $usercancreate)
     	{
     		$object->fetch($id);
     		$object->cond_reglement_code = 0; // To clean property
    @@ -347,7 +362,7 @@ if (empty($reshook))
     		if ($result < 0) dol_print_error($db, $object->error);
     	}
     
    -	else if ($action == 'setpaymentterm' && $user->rights->facture->creer)
    +	else if ($action == 'setpaymentterm' && $usercancreate)
     	{
     		$object->fetch($id);
     		$object->date_lim_reglement = dol_mktime(12, 0, 0, $_POST['paymenttermmonth'], $_POST['paymenttermday'], $_POST['paymenttermyear']);
    @@ -360,7 +375,7 @@ if (empty($reshook))
     			dol_print_error($db, $object->error);
     	}
     
    -	else if ($action == 'setrevenuestamp' && $user->rights->facture->creer)
    +	else if ($action == 'setrevenuestamp' && $usercancreate)
     	{
     		$object->fetch($id);
     		$object->revenuestamp = GETPOST('revenuestamp');
    @@ -377,18 +392,18 @@ if (empty($reshook))
     	}
     
     	// bank account
    -	else if ($action == 'setbankaccount' && $user->rights->facture->creer)
    +	else if ($action == 'setbankaccount' && $usercancreate)
     	{
     		$result=$object->setBankAccount(GETPOST('fk_account', 'int'));
     	}
     
    -	else if ($action == 'setremisepercent' && $user->rights->facture->creer)
    +	else if ($action == 'setremisepercent' && $usercancreate)
     	{
     		$object->fetch($id);
     		$result = $object->set_remise($user, $_POST['remise_percent']);
     	}
     
    -	else if ($action == "setabsolutediscount" && $user->rights->facture->creer)
    +	else if ($action == "setabsolutediscount" && $usercancreate)
     	{
     		// POST[remise_id] or POST[remise_id_for_payment]
     
    @@ -446,17 +461,14 @@ if (empty($reshook))
     		}
     	}
     
    -	else if ($action == 'setref_client' && $user->rights->facture->creer)
    +	else if ($action == 'setref_client' && $usercancreate)
     	{
     		$object->fetch($id);
     		$object->set_ref_client(GETPOST('ref_client'));
     	}
     
     	// Classify to validated
    -	else if ($action == 'confirm_valid' && $confirm == 'yes' &&
    -		((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->creer))
    -	   	|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->validate)))
    -	)
    +	else if ($action == 'confirm_valid' && $confirm == 'yes' && $usercanvalidate)
     	{
     		$idwarehouse = GETPOST('idwarehouse','int');
     
    @@ -556,10 +568,7 @@ if (empty($reshook))
     	}
     
     	// Go back to draft status (unvalidate)
    -	else if ($action == 'confirm_modif' &&
    -		((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->creer))
    -	   	|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->unvalidate)))
    -	)
    +	else if ($action == 'confirm_modif' && $usercanunvalidate)
     	{
     		$idwarehouse = GETPOST('idwarehouse','int');
     
    @@ -639,13 +648,13 @@ if (empty($reshook))
     	}
     
     	// Classify "paid"
    -	else if ($action == 'confirm_paid' && $confirm == 'yes' && $user->rights->facture->paiement)
    +	else if ($action == 'confirm_paid' && $confirm == 'yes' && $usercanissuepayment)
     	{
     		$object->fetch($id);
     		$result = $object->set_paid($user);
     		if ($result<0) setEventMessages($object->error, $object->errors, 'errors');
     	} // Classif "paid partialy"
    -	else if ($action == 'confirm_paid_partially' && $confirm == 'yes' && $user->rights->facture->paiement)
    +	else if ($action == 'confirm_paid_partially' && $confirm == 'yes' && $usercanissuepayment)
     	{
     		$object->fetch($id);
     		$close_code = GETPOST("close_code",'none');
    @@ -670,7 +679,7 @@ if (empty($reshook))
     	}
     
     	// Convertir en reduc
    -	else if ($action == 'confirm_converttoreduc' && $confirm == 'yes' && $user->rights->facture->creer)
    +	else if ($action == 'confirm_converttoreduc' && $confirm == 'yes' && $usercancreate)
     	{
     		$object->fetch($id);
     		$object->fetch_thirdparty();
    @@ -747,7 +756,6 @@ if (empty($reshook))
     				{
     					$error++;
     				}
    -
     			}
     			if ($object->type == Facture::TYPE_CREDIT_NOTE || $object->type == Facture::TYPE_DEPOSIT)
     			{
    @@ -768,7 +776,6 @@ if (empty($reshook))
     						break;
     					}
     				}
    -
     			}
     
     			if (empty($error))
    @@ -798,7 +805,7 @@ if (empty($reshook))
     	}
     
     	// Delete payment
    -	elseif ($action == 'confirm_delete_paiement' && $confirm == 'yes' && $user->rights->facture->creer)
    +	elseif ($action == 'confirm_delete_paiement' && $confirm == 'yes' && $usercancreate)
     	{
     		$object->fetch($id);
     		if ($object->statut == Facture::STATUS_VALIDATED && $object->paye == 0)
    @@ -818,7 +825,7 @@ if (empty($reshook))
     	/*
     	 * Insert new invoice in database
     	 */
    -	else if ($action == 'add' && $user->rights->facture->creer)
    +	else if ($action == 'add' && $usercancreate)
     	{
     		if ($socid > 0) $object->socid = GETPOST('socid', 'int');
     
    @@ -870,6 +877,7 @@ if (empty($reshook))
     				$object->location_incoterms = GETPOST('location_incoterms', 'alpha');
     				$object->multicurrency_code = GETPOST('multicurrency_code', 'alpha');
     				$object->multicurrency_tx   = GETPOST('originmulticurrency_tx', 'int');
    +				$object->entity				= (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity);
     
     				// Proprietes particulieres a facture de remplacement
     				$object->fk_facture_source = $_POST['fac_replacement'];
    @@ -922,6 +930,7 @@ if (empty($reshook))
     				$object->location_incoterms = GETPOST('location_incoterms', 'alpha');
     				$object->multicurrency_code = GETPOST('multicurrency_code', 'alpha');
     				$object->multicurrency_tx   = GETPOST('originmulticurrency_tx', 'int');
    +				$object->entity				= (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity);
     
     				// Proprietes particulieres a facture avoir
     				$object->fk_facture_source = $sourceinvoice > 0 ? $sourceinvoice : '';
    @@ -1003,15 +1012,11 @@ if (empty($reshook))
     							                $line->multicurrency_total_ht  = $line->multicurrency_total_ht  - $prevLine->multicurrency_total_ht;
     							                $line->multicurrency_total_tva = $line->multicurrency_total_tva - $prevLine->multicurrency_total_tva;
     							                $line->multicurrency_total_ttc = $line->multicurrency_total_ttc - $prevLine->multicurrency_total_ttc;
    -
    -
     							            }
     							        }
     
     							        // prorata
     							        $line->situation_percent = $maxPrevSituationPercent - $line->situation_percent;
    -
    -
     							    }
     							}
     
    @@ -1043,7 +1048,6 @@ if (empty($reshook))
     
     						$object->update_price(1);
     					}
    -
     				}
     
     				if(GETPOST('invoiceAvoirWithPaymentRestAmount', 'int')==1 && $id>0)
    @@ -1108,6 +1112,7 @@ if (empty($reshook))
     				$object->location_incoterms = GETPOST('location_incoterms', 'alpha');
     				$object->multicurrency_code = GETPOST('multicurrency_code', 'alpha');
     				$object->multicurrency_tx   = GETPOST('originmulticurrency_tx', 'int');
    +				$object->entity				= (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity);
     
     				// Source facture
     				$object->fac_rec = GETPOST('fac_rec', 'int');
    @@ -1158,6 +1163,7 @@ if (empty($reshook))
     				$object->location_incoterms = GETPOST('location_incoterms', 'alpha');
     				$object->multicurrency_code = GETPOST('multicurrency_code', 'alpha');
     				$object->multicurrency_tx   = GETPOST('originmulticurrency_tx', 'int');
    +				$object->entity				= (GETPOSTISSET('entity')?GETPOST('entity', 'int'):$conf->entity);
     
     				if (GETPOST('type') == Facture::TYPE_SITUATION)
     				{
    @@ -1345,7 +1351,6 @@ if (empty($reshook))
     								$subprice_diff = $object->lines[0]->subprice - $diff / (1 + $object->lines[0]->tva_tx / 100);
     								$object->updateline($object->lines[0]->id, $object->lines[0]->desc, $subprice_diff, $object->lines[0]->qty, $object->lines[0]->remise_percent, $object->lines[0]->date_start, $object->lines[0]->date_end, $object->lines[0]->tva_tx, 0, 0, 'HT', $object->lines[0]->info_bits, $object->lines[0]->product_type, 0, 0, 0, $object->lines[0]->pa_ht, $object->lines[0]->label, 0, array(), 100);
     							}
    -
     						}
     						else
     						{
    @@ -1494,7 +1499,6 @@ if (empty($reshook))
     							setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
     							$error++;
     						}
    -
     					} else {
     						setEventMessages($object->error, $object->errors, 'errors');
     						$error++;
    @@ -1642,7 +1646,7 @@ if (empty($reshook))
     	}
     
     	// Add a new line
    -	else if ($action == 'addline' && $user->rights->facture->creer)
    +	else if ($action == 'addline' && $usercancreate)
     	{
     		$langs->load('errors');
     		$error = 0;
    @@ -1730,8 +1734,10 @@ if (empty($reshook))
     
     				if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
     					$idprod = $res->fk_product_child;
    -				} else {
    -					setEventMessage($langs->trans('ErrorProductCombinationNotFound'), 'errors');
    +				}
    +				else
    +				{
    +					setEventMessages($langs->trans('ErrorProductCombinationNotFound'), null, 'errors');
     					$error++;
     				}
     			}
    @@ -1973,7 +1979,7 @@ if (empty($reshook))
     			if ($tva_npr)
     				$info_bits |= 0x01;
     
    -			if (! empty($price_min) && (price2num($pu_ht) * (1 - price2num($remise_percent) / 100) < price2num($price_min))) {
    +			if ($usercanproductignorepricemin && (! empty($price_min) && (price2num($pu_ht) * (1 - price2num($remise_percent) / 100) < price2num($price_min)))) {
     				$mesg = $langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency));
     				setEventMessages($mesg, null, 'errors');
     			} else {
    @@ -2045,7 +2051,7 @@ if (empty($reshook))
     		}
     	}
     
    -	elseif ($action == 'updateligne' && $user->rights->facture->creer && ! GETPOST('cancel','alpha'))
    +	elseif ($action == 'updateline' && $usercancreate && ! GETPOST('cancel','alpha'))
     	{
     		if (! $object->fetch($id) > 0)	dol_print_error($db);
     		$object->fetch_thirdparty();
    @@ -2136,7 +2142,7 @@ if (empty($reshook))
     			$label = ((GETPOST('update_label') && GETPOST('product_label')) ? GETPOST('product_label') : '');
     
     			// Check price is not lower than minimum (check is done only for standard or replacement invoices)
    -			if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT) && $price_min && (price2num($pu_ht) * (1 - price2num(GETPOST('remise_percent')) / 100) < price2num($price_min))) {
    +			if ($usercanproductignorepricemin && (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT) && $price_min && (price2num($pu_ht) * (1 - price2num(GETPOST('remise_percent')) / 100) < price2num($price_min)))) {
     				setEventMessages($langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency)), null, 'errors');
     				$error++;
     			}
    @@ -2173,7 +2179,7 @@ if (empty($reshook))
     
     		// Update line
     		if (! $error) {
    -			if (empty($user->rights->margins->creer))
    +			if (empty($usercancreatemargin))
     			{
     				foreach ($object->lines as &$line)
     				{
    @@ -2251,7 +2257,7 @@ if (empty($reshook))
     		}
     	}
     
    -	else if ($action == 'updatealllines' && $user->rights->facture->creer && $_POST['all_percent'] == $langs->trans('Modifier'))
    +	else if ($action == 'updatealllines' && $usercancreate && $_POST['all_percent'] == $langs->trans('Modifier'))
     	{
     		if (!$object->fetch($id) > 0) dol_print_error($db);
     		if (!is_null(GETPOST('all_progress')) && GETPOST('all_progress') != "")
    @@ -2268,23 +2274,22 @@ if (empty($reshook))
     		}
     	}
     
    -	else if ($action == 'updateligne' && $user->rights->facture->creer && $_POST['cancel'] == $langs->trans('Cancel')) {
    +	else if ($action == 'updateline' && $usercancreate && $_POST['cancel'] == $langs->trans('Cancel')) {
     		header('Location: ' . $_SERVER["PHP_SELF"] . '?facid=' . $id); // Pour reaffichage de la fiche en cours d'edition
     		exit();
     	}
     
     	// Outing situation invoice from cycle
    -	elseif ($action == 'confirm_situationout' && $confirm == 'yes' && $user->rights->facture->creer)
    +	elseif ($action == 'confirm_situationout' && $confirm == 'yes' && $usercancreate)
     	{
     	    $object->fetch($id,'', '','', true);
     
     	    if ($object->statut == Facture::STATUS_VALIDATED
     	        && $object->type == Facture::TYPE_SITUATION
    -	        && $user->rights->facture->creer
    +	        && $usercancreate
     	        && !$objectidnext
     	        && $object->is_last_in_cycle()
    -	        && ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->creer))
    -	            || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->unvalidate)))
    +	    	&& $usercanunvalidate
     	        )
     	    {
     	        $outingError = 0;
    @@ -2366,7 +2371,6 @@ if (empty($reshook))
                                     $line->situation_percent = $line->situation_percent - $maxPrevSituationPercent;
     
                                     if($line->update()<0) $errors++;
    -
     	                        }
     	                    }
     	                }
    @@ -2395,7 +2399,7 @@ if (empty($reshook))
     
     	// add lines from objectlinked
     	elseif($action == 'import_lines_from_object'
    -	    && $user->rights->facture->creer
    +	    && $usercancreate
     	    && $object->statut == Facture::STATUS_DRAFT
     	    && ($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA || $object->type == Facture::TYPE_SITUATION))
     	{
    @@ -2470,7 +2474,7 @@ if (empty($reshook))
     
     	        if($error)
     	        {
    -	            setEventMessage($langs->trans('ErrorsOnXLines',$error), 'errors');
    +	            setEventMessages($langs->trans('ErrorsOnXLines',$error), null, 'errors');
     	        }
     	    }
     	}
    @@ -2488,7 +2492,7 @@ if (empty($reshook))
     
     	// Actions to build doc
     	$upload_dir = $conf->facture->dir_output;
    -	$permissioncreate=$user->rights->facture->creer;
    +	$permissioncreate=$usercancreate;
     	include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
     
     
    @@ -2515,7 +2519,7 @@ if (empty($reshook))
     			$action = 'edit_extras';
     	}
     
    -	if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->facture->creer) {
    +	if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $usercancreate) {
     		if ($action == 'addcontact') {
     			$result = $object->fetch($id);
     
    @@ -2696,7 +2700,6 @@ if ($action == 'create')
     		print ajax_combobox('fac_replacement');
     		print ajax_combobox('fac_avoir');
     		print ajax_combobox('situations');
    -
     	}
     
     	if ($origin == 'contrat')
    @@ -2887,7 +2890,8 @@ if ($action == 'create')
     	// Standard invoice
     	print '<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
     	$tmp='<input type="radio" id="radio_standard" name="type" value="0"' . (GETPOST('type') == 0 ? ' checked' : '') . '> ';
    -	$desc = $form->textwithpicto($tmp.$langs->trans("InvoiceStandardAsk"), $langs->transnoentities("InvoiceStandardDesc"), 1, 'help', '', 0, 3);
    +	$tmp  = $tmp.'<label for="radio_standard" >'.$langs->trans("InvoiceStandardAsk").'</label>';
    +	$desc = $form->textwithpicto($tmp, $langs->transnoentities("InvoiceStandardDesc"), 1, 'help', '', 0, 3);
     	print $desc;
     	print '</div></div>';
     
    @@ -2906,7 +2910,8 @@ if ($action == 'create')
         		});
         		</script>';
     
    -			$desc = $form->textwithpicto($tmp.$langs->trans("InvoiceDeposit"), $langs->transnoentities("InvoiceDepositDesc"), 1, 'help', '', 0, 3);
    +			$tmp  = $tmp.'<label for="radio_deposit" >'.$langs->trans("InvoiceDeposit").'</label>';
    +			$desc = $form->textwithpicto($tmp, $langs->transnoentities("InvoiceDepositDesc"), 1, 'help', '', 0, 3);
     			print '<table class="nobordernopadding"><tr><td>';
     			print $desc;
     			print '</td>';
    @@ -2930,8 +2935,9 @@ if ($action == 'create')
     		{
     			// First situation invoice
     			print '<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
    -			$tmp='<input type="radio" name="type" value="5"' . (GETPOST('type') == 5 ? ' checked' : '') . '> ';
    -			$desc = $form->textwithpicto($tmp.$langs->trans("InvoiceFirstSituationAsk"), $langs->transnoentities("InvoiceFirstSituationDesc"), 1, 'help', '', 0, 3);
    +			$tmp='<input id="radio_situation invoice" type="radio" name="type" value="5"' . (GETPOST('type') == 5 ? ' checked' : '') . '> ';
    +			$tmp  = $tmp.'<label for="radio_situation invoice" >'.$langs->trans("InvoiceFirstSituationAsk").'</label>';
    +			$desc = $form->textwithpicto($tmp, $langs->transnoentities("InvoiceFirstSituationDesc"), 1, 'help', '', 0, 3);
     			print $desc;
     			print '</div></div>';
     
    @@ -2941,7 +2947,7 @@ if ($action == 'create')
     			$tmp='<input type="radio" name="type" value="5"' . (GETPOST('type') == 5 && GETPOST('originid') ? ' checked' : '');
     			if ($opt == ('<option value ="0" selected>' . $langs->trans('NoSituations') . '</option>') || (GETPOST('origin') && GETPOST('origin') != 'facture' && GETPOST('origin') != 'commande')) $tmp.=' disabled';
     			$tmp.= '> ';
    -			$text = $tmp.$langs->trans("InvoiceSituationAsk") . ' ';
    +			$text = '<label>'.$tmp.$langs->trans("InvoiceSituationAsk") . '</label> ';
     			$text .= '<select class="flat" id="situations" name="situations">';
     			$text .= $opt;
     			$text .= '</select>';
    @@ -2965,7 +2971,7 @@ if ($action == 'create')
         			});
         		});
         		</script>';
    -			$text = $tmp.$langs->trans("InvoiceReplacementAsk") . ' ';
    +			$text = '<label>'.$tmp.$langs->trans("InvoiceReplacementAsk") . '</label>';
     			$text .= '<select class="flat" name="fac_replacement" id="fac_replacement"';
     			if (! $options)
     				$text .= ' disabled';
    @@ -2986,13 +2992,14 @@ if ($action == 'create')
     	{
     		print '<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
     		$tmp='<input type="radio" name="type" id="radio_replacement" value="0" disabled> ';
    -		$text = $tmp.$langs->trans("InvoiceReplacement") . ' ';
    +		$text = '<label>'.$tmp.$langs->trans("InvoiceReplacement") . '</label> ';
     		$text.= '('.$langs->trans("YouMustCreateInvoiceFromThird").') ';
     		$desc = $form->textwithpicto($text, $langs->transnoentities("InvoiceReplacementDesc"), 1, 'help', '', 0, 3);
     		print $desc;
     		print '</div></div>';
     	}
     
    +
     	if (empty($origin))
     	{
     		if ($socid > 0)
    @@ -3019,7 +3026,7 @@ if ($action == 'create')
         				});
         			});
         			</script>';
    -				$text = $tmp.$langs->transnoentities("InvoiceAvoirAsk") . ' ';
    +				$text = '<label>'.$tmp.$langs->transnoentities("InvoiceAvoirAsk") . '</label> ';
     				// $text.='<input type="text" value="">';
     				$text .= '<select class="flat valignmiddle" name="fac_avoir" id="fac_avoir"';
     				if (! $optionsav)
    @@ -3048,7 +3055,7 @@ if ($action == 'create')
     			print '<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
     			if (empty($conf->global->INVOICE_CREDIT_NOTE_STANDALONE)) $tmp='<input type="radio" name="type" id="radio_creditnote" value="0" disabled> ';
     			else $tmp='<input type="radio" name="type" id="radio_creditnote" value="2" > ';
    -			$text = $tmp.$langs->trans("InvoiceAvoir") . ' ';
    +			$text = '<label>'.$tmp.$langs->trans("InvoiceAvoir") . '</label> ';
     			$text.= '('.$langs->trans("YouMustCreateInvoiceFromThird").') ';
     			$desc = $form->textwithpicto($text, $langs->transnoentities("InvoiceAvoirDesc"), 1, 'help', '', 0, 3);
     			print $desc;
    @@ -3059,7 +3066,7 @@ if ($action == 'create')
     	// Template invoice
     	print '<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
     	$tmp='<input type="radio" name="type" id="radio_template" value="0" disabled> ';
    -	$text = $tmp.$langs->trans("RepeatableInvoice") . ' ';
    +	$text = '<label>'.$tmp.$langs->trans("RepeatableInvoice") . '</label> ';
     	//$text.= '('.$langs->trans("YouMustCreateStandardInvoiceFirst").') ';
     	$desc = $form->textwithpicto($text, $langs->transnoentities("YouMustCreateStandardInvoiceFirstDesc"), 1, 'help', '', 0, 3);
     	print $desc;
    @@ -3067,6 +3074,41 @@ if ($action == 'create')
     
     	print '</div>';
     
    +
    +	if(!empty($conf->global->INVOICE_USE_DEFAULT_DOCUMENT)) // Hidden conf
    +	{
    +    	// Add auto select default document model
    +    	$listtType=array(Facture::TYPE_STANDARD,Facture::TYPE_REPLACEMENT,Facture::TYPE_CREDIT_NOTE,Facture::TYPE_DEPOSIT,Facture::TYPE_SITUATION);
    +    	$jsListType='';
    +    	foreach ($listtType as $type)
    +    	{
    +    	    $thisTypeConfName = 'FACTURE_ADDON_PDF_'.$type;
    +    	    $curent = !empty($conf->global->{$thisTypeConfName})?$conf->global->{$thisTypeConfName}:$conf->global->FACTURE_ADDON_PDF;
    +    	    $jsListType.=(!empty($jsListType)?',':'').'"'.$type.'":"'.$curent.'"';
    +    	}
    +
    +    	print '<script type="text/javascript" language="javascript">
    +        		$(document).ready(function() {
    +                    var listType = {'.$jsListType.'};
    +        			$("[name=\'type\'").change(function() {
    +        				if($( this ).prop("checked"))
    +                        {
    +                            if(($( this ).val() in listType))
    +                            {
    +                                $("#model").val(listType[$( this ).val()]);
    +                            }
    +                            else
    +                            {
    +                                $("#model").val("'.$conf->global->FACTURE_ADDON_PDF.'");
    +                            }
    +                        }
    +        			});
    +        		});
    +        		</script>';
    +	}
    +
    +
    +
     	print '</td></tr>';
     
     	if ($socid > 0)
    @@ -3086,7 +3128,7 @@ if ($action == 'create')
     
     	// Date invoice
     	print '<tr><td class="fieldrequired">' . $langs->trans('DateInvoice') . '</td><td colspan="2">';
    -	print $form->select_date($datefacture?$datefacture:$dateinvoice, '', '', '', '', "add", 1, 1, 1);
    +	print $form->selectDate($datefacture?$datefacture:$dateinvoice, '', '', '', '', "add", 1, 1);
     	print '</td></tr>';
     
     	// Date point of tax
    @@ -3094,7 +3136,7 @@ if ($action == 'create')
     	{
     		print '<tr><td class="fieldrequired">' . $langs->trans('DatePointOfTax') . '</td><td colspan="2">';
     		$date_pointoftax = dol_mktime(12, 0, 0, $_POST['date_pointoftaxmonth'], $_POST['date_pointoftaxday'], $_POST['date_pointoftaxyear']);
    -		print $form->select_date($date_pointoftax?$date_pointoftax:-1, 'date_pointoftax', '', '', '', "add", 1, 1, 1);
    +		print $form->selectDate($date_pointoftax?$date_pointoftax:-1, 'date_pointoftax', '', '', '', "add", 1, 1);
     		print '</td></tr>';
     	}
     
    @@ -3157,7 +3199,14 @@ if ($action == 'create')
     	print '<td colspan="2">';
     	include_once DOL_DOCUMENT_ROOT . '/core/modules/facture/modules_facture.php';
     	$liste = ModelePDFFactures::liste_modeles($db);
    -	print $form->selectarray('model', $liste, $conf->global->FACTURE_ADDON_PDF);
    +	if(!empty($conf->global->INVOICE_USE_DEFAULT_DOCUMENT)){ // Hidden conf
    +	   $paramkey='FACTURE_ADDON_PDF_'.$object->type;
    +	   $curent = !empty($conf->global->$paramkey)?$conf->global->$paramkey:$conf->global->FACTURE_ADDON_PDF;
    +	}
    +	else{
    +	   $curent = $conf->global->FACTURE_ADDON_PDF;
    +	}
    +	print $form->selectarray('model', $liste, $curent);
     	print "</td></tr>";
     
     	// Multicurrency
    @@ -3436,11 +3485,10 @@ else if ($id > 0 || ! empty($ref))
     	    $formquestion = array();
     	    // remove situation from cycle
     	    if ($object->statut == Facture::STATUS_VALIDATED
    -	        && $user->rights->facture->creer
    +	        && $usercancreate
     	        && !$objectidnext
     	        && $object->is_last_in_cycle()
    -	        && ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->creer))
    -	            || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->unvalidate)))
    +	    	&& $usercanunvalidate
     	        )
     	    {
     	        $formconfirm = $form->formconfirm($_SERVER['PHP_SELF'] . '?facid=' . $object->id, $label, $text, 'confirm_situationout', $formquestion, "yes", 1);
    @@ -3617,7 +3665,6 @@ else if ($id > 0 || ! empty($ref))
     	{
     		$payment_id = GETPOST('paiement_id');
     		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&paiement_id='.$payment_id, $langs->trans('DeletePayment'), $langs->trans('ConfirmDeletePayment'), 'confirm_delete_paiement', '', 'no', 1);
    -
     	}
     
     	// Confirmation de la suppression d'une ligne produit
    @@ -3637,13 +3684,11 @@ else if ($id > 0 || ! empty($ref))
     		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?facid=' . $object->id, $langs->trans('CloneInvoice'), $langs->trans('ConfirmCloneInvoice', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
     	}
     
    -	if (! $formconfirm)
    -	{
    -		$parameters = array('lineid' => $lineid);
    -		$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -		if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -		elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -	}
    +	// Call Hook formConfirm
    +	$parameters = array('lineid' => $lineid);
    +	$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +	if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +	elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     	// Print form confirm
     	print $formconfirm;
    @@ -3654,8 +3699,8 @@ else if ($id > 0 || ! empty($ref))
     
     	$morehtmlref='<div class="refidno">';
     	// Ref customer
    -	$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->facture->creer, 'string', '', 0, 1);
    -	$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $user->rights->facture->creer, 'string', '', null, null, '', 1);
    +	$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', 0, 1);
    +	$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, $usercancreate, 'string', '', null, null, '', 1);
     	// Thirdparty
     	$morehtmlref.='<br>'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1,'customer');
     	if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) $morehtmlref.=' (<a href="'.DOL_URL_ROOT.'/compta/facture/list.php?socid='.$object->thirdparty->id.'&search_societe='.urlencode($object->thirdparty->name).'">'.$langs->trans("OtherBills").'</a>)';
    @@ -3664,7 +3709,7 @@ else if ($id > 0 || ! empty($ref))
     	{
     		$langs->load("projects");
     		$morehtmlref.='<br>'.$langs->trans('Project') . ' ';
    -		if ($user->rights->facture->creer)
    +		if ($usercancreate)
     		{
     			if ($action != 'classify')
     				$morehtmlref.='<a href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
    @@ -3763,7 +3808,7 @@ else if ($id > 0 || ! empty($ref))
     	print '<table class="nobordernopadding" width="100%"><tr><td>';
     	print $langs->trans('DateInvoice');
     	print '</td>';
    -	if ($object->type != Facture::TYPE_CREDIT_NOTE && $action != 'editinvoicedate' && ! empty($object->brouillon) && $user->rights->facture->creer && empty($conf->global->FAC_FORCE_DATE_VALIDATION))
    +	if ($object->type != Facture::TYPE_CREDIT_NOTE && $action != 'editinvoicedate' && ! empty($object->brouillon) && $usercancreate && empty($conf->global->FAC_FORCE_DATE_VALIDATION))
     		print '<td align="right"><a href="' . $_SERVER["PHP_SELF"] . '?action=editinvoicedate&amp;facid=' . $object->id . '">' . img_edit($langs->trans('SetDate'), 1) . '</a></td>';
     	print '</tr></table>';
     	print '</td><td>';
    @@ -3804,7 +3849,7 @@ else if ($id > 0 || ! empty($ref))
     	print '<table class="nobordernopadding" width="100%"><tr><td>';
     	print $langs->trans('PaymentConditionsShort');
     	print '</td>';
    -	if ($object->type != Facture::TYPE_CREDIT_NOTE && $action != 'editconditions' && $user->rights->facture->creer)
    +	if ($object->type != Facture::TYPE_CREDIT_NOTE && $action != 'editconditions' && $usercancreate)
     		print '<td align="right"><a href="' . $_SERVER["PHP_SELF"] . '?action=editconditions&amp;facid=' . $object->id . '">' . img_edit($langs->trans('SetConditions'), 1) . '</a></td>';
     	print '</tr></table>';
     	print '</td><td>';
    @@ -3825,7 +3870,7 @@ else if ($id > 0 || ! empty($ref))
     	print '<table class="nobordernopadding" width="100%"><tr><td>';
     	print $langs->trans('DateMaxPayment');
     	print '</td>';
    -	if ($object->type != Facture::TYPE_CREDIT_NOTE && $action != 'editpaymentterm' && $user->rights->facture->creer)
    +	if ($object->type != Facture::TYPE_CREDIT_NOTE && $action != 'editpaymentterm' && $usercancreate)
     		print '<td align="right"><a href="' . $_SERVER["PHP_SELF"] . '?action=editpaymentterm&amp;facid=' . $object->id . '">' . img_edit($langs->trans('SetDate'), 1) . '</a></td>';
     	print '</tr></table>';
     	print '</td><td>';
    @@ -3849,7 +3894,7 @@ else if ($id > 0 || ! empty($ref))
     	print '<table class="nobordernopadding" width="100%"><tr><td>';
     	print $langs->trans('PaymentMode');
     	print '</td>';
    -	if ($action != 'editmode' && $user->rights->facture->creer)
    +	if ($action != 'editmode' && $usercancreate)
     		print '<td align="right"><a href="' . $_SERVER["PHP_SELF"] . '?action=editmode&amp;facid=' . $object->id . '">' . img_edit($langs->trans('SetMode'), 1) . '</a></td>';
     	print '</tr></table>';
     	print '</td><td>';
    @@ -3872,15 +3917,12 @@ else if ($id > 0 || ! empty($ref))
     		print '<table class="nobordernopadding" width="100%"><tr><td>';
     		print fieldLabel('Currency','multicurrency_code');
     		print '</td>';
    -		if ($action != 'editmulticurrencycode' && ! empty($object->brouillon))
    +		if ($usercancreate && $action != 'editmulticurrencycode' && ! empty($object->brouillon))
     			print '<td align="right"><a href="' . $_SERVER["PHP_SELF"] . '?action=editmulticurrencycode&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '</a></td>';
     		print '</tr></table>';
     		print '</td><td>';
    -		if ($action == 'editmulticurrencycode') {
    -			$form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, 'multicurrency_code');
    -		} else {
    -			$form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, 'none');
    -		}
    +		$htmlname = (($usercancreate && $action == 'editmulticurrencycode')?'multicurrency_code':'none');
    +		$form->form_multicurrency_code($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_code, $htmlname);
     		print '</td></tr>';
     
     		print '<tr>';
    @@ -3888,7 +3930,7 @@ else if ($id > 0 || ! empty($ref))
     		print '<table class="nobordernopadding" width="100%"><tr><td>';
     		print fieldLabel('CurrencyRate','multicurrency_tx');
     		print '</td>';
    -		if ($action != 'editmulticurrencyrate' && ! empty($object->brouillon) && $object->multicurrency_code && $object->multicurrency_code != $conf->currency)
    +		if ($usercancreate && $action != 'editmulticurrencyrate' && ! empty($object->brouillon) && $object->multicurrency_code && $object->multicurrency_code != $conf->currency)
     			print '<td align="right"><a href="' . $_SERVER["PHP_SELF"] . '?action=editmulticurrencyrate&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetMultiCurrencyCode'), 1) . '</a></td>';
     		print '</tr></table>';
     		print '</td><td>';
    @@ -3896,7 +3938,7 @@ else if ($id > 0 || ! empty($ref))
     			if($action == 'actualizemulticurrencyrate') {
     				list($object->fk_multicurrency, $object->multicurrency_tx) = MultiCurrency::getIdAndTxFromCode($object->db, $object->multicurrency_code);
     			}
    -			$form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'multicurrency_tx', $object->multicurrency_code);
    +			$form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, ($usercancreate?'multicurrency_tx':'none'), $object->multicurrency_code);
     		} else {
     			$form->form_multicurrency_rate($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->multicurrency_tx, 'none', $object->multicurrency_code);
     			if($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
    @@ -3913,7 +3955,7 @@ else if ($id > 0 || ! empty($ref))
     	print '<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
     	print $langs->trans('BankAccount');
     	print '<td>';
    -	if (($action != 'editbankaccount') && $user->rights->facture->creer)
    +	if (($action != 'editbankaccount') && $usercancreate)
     		print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editbankaccount&amp;id='.$object->id.'">'.img_edit($langs->trans('SetBankAccount'),1).'</a></td>';
     	print '</tr></table>';
     	print '</td><td>';
    @@ -3940,7 +3982,7 @@ else if ($id > 0 || ! empty($ref))
     		print '<table width="100%" class="nobordernopadding"><tr><td>';
     		print $langs->trans('IncotermLabel');
     		print '<td><td align="right">';
    -		if ($user->rights->facture->creer) print '<a href="'.DOL_URL_ROOT.'/compta/facture/card.php?facid='.$object->id.'&action=editincoterm">'.img_edit().'</a>';
    +		if ($usercancreate) print '<a href="'.DOL_URL_ROOT.'/compta/facture/card.php?facid='.$object->id.'&action=editincoterm">'.img_edit().'</a>';
     		else print '&nbsp;';
     		print '</td></tr></table>';
     		print '</td>';
    @@ -4014,7 +4056,7 @@ else if ($id > 0 || ! empty($ref))
     		print '<table class="nobordernopadding" width="100%"><tr><td>';
     		print $langs->trans('RevenueStamp');
     		print '</td>';
    -		if ($action != 'editrevenuestamp' && ! empty($object->brouillon) && $user->rights->facture->creer)
    +		if ($action != 'editrevenuestamp' && ! empty($object->brouillon) && $usercancreate)
     		{
     			print '<td align="right"><a href="' . $_SERVER["PHP_SELF"] . '?action=editrevenuestamp&amp;facid=' . $object->id . '">' . img_edit($langs->trans('SetRevenuStamp'), 1) . '</a></td>';
     		}
    @@ -4195,7 +4237,6 @@ else if ($id > 0 || ! empty($ref))
     	            print '<td align="right">' . price($next_invoice->total_ttc) . '</td>';
     	            print '<td align="right">' . $next_invoice->getLibStatut(3, $totalpaye) . '</td>';
     	            print '</tr>';
    -
     	        }
     
     	        $total_global_ht += $total_next_ht;
    @@ -4477,6 +4518,7 @@ else if ($id > 0 || ! empty($ref))
     
     			print '<tr class="liste_titre nodrag nodrop">';
     
    +			// Adds a line numbering column
     			if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
     				print '<td align="center" width="5">&nbsp;</td>';
     			}
    @@ -4490,7 +4532,7 @@ else if ($id > 0 || ! empty($ref))
     			if (! empty($conf->margin->enabled) && empty($user->societe_id))
     			{
     				print '<td align="right" class="margininfos" width="80">&nbsp;</td>';
    -				if ((! empty($conf->global->DISPLAY_MARGIN_RATES) || ! empty($conf->global->DISPLAY_MARK_RATES)) && $user->rights->margins->liretous) {
    +				if ((! empty($conf->global->DISPLAY_MARGIN_RATES) || ! empty($conf->global->DISPLAY_MARK_RATES)) && $usercanreadallmargin) {
     					print '<td align="right" class="margininfos" width="50">&nbsp;</td>';
     				}
     			}
    @@ -4500,6 +4542,7 @@ else if ($id > 0 || ! empty($ref))
     			print '<td width="10">&nbsp;</td>';
     			print "</tr>\n";
     
    +			// Adds a line numbering column
     			if (!empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
     				print '<td align="center" width="5">&nbsp;</td>';
     			}
    @@ -4523,7 +4566,7 @@ else if ($id > 0 || ! empty($ref))
     
     	print '	<form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#addline' : '#line_' . GETPOST('lineid')) . '" method="POST">
     	<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">
    -	<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateligne') . '">
    +	<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline') . '">
     	<input type="hidden" name="mode" value="">
     	<input type="hidden" name="id" value="' . $object->id . '">
     	';
    @@ -4540,7 +4583,7 @@ else if ($id > 0 || ! empty($ref))
     		$ret = $object->printObjectLines($action, $mysoc, $soc, $lineid, 1);
     
     	// Form to add new line
    -	if ($object->statut == 0 && $user->rights->facture->creer && $action != 'valid' && $action != 'editline' && ($object->is_first() || !$object->situation_cycle_ref))
    +	if ($object->statut == 0 && $usercancreate && $action != 'valid' && $action != 'editline' && ($object->is_first() || !$object->situation_cycle_ref))
     	{
     	    if ($action != 'editline' && $action != 'selectlines')
     		{
    @@ -4581,8 +4624,7 @@ else if ($id > 0 || ! empty($ref))
     					{
     						if (! $objectidnext && $object->is_last_in_cycle())
     						{
    -							if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->creer))
    -		   						|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->unvalidate)))
    +							if ($usercanunvalidate)
     							{
     								print '<div class="inline-block divButAction"><a class="butAction'.($conf->use_javascript_ajax?' reposition':'').'" href="' . $_SERVER['PHP_SELF'] . '?facid=' . $object->id . '&amp;action=modif">' . $langs->trans('Modify') . '</a></div>';
     							} else {
    @@ -4609,7 +4651,7 @@ else if ($id > 0 || ! empty($ref))
     				|| ($object->type == Facture::TYPE_CREDIT_NOTE && empty($discount->id))
     				|| ($object->type == Facture::TYPE_DEPOSIT && empty($discount->id)))
     				&& ($object->statut == 2 || $object->statut == 3 || ($object->statut == 1 && $object->paye == 1))   // Condition ($object->statut == 1 && $object->paye == 1) should not happened but can be found due to corrupted data
    -				&& ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $user->rights->facture->creer) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $user->rights->facture->invoice_advance->reopen)))				// A paid invoice (partially or completely)
    +				&& ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $usercancreate) || $usercanreopen))				// A paid invoice (partially or completely)
     			{
     				if (! $objectidnext && $object->close_code != 'replaced') 				// Not replaced by another invoice
     				{
    @@ -4621,8 +4663,7 @@ else if ($id > 0 || ! empty($ref))
     
     			// Validate
     			if ($object->statut == Facture::STATUS_DRAFT && count($object->lines) > 0 && ((($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA || $object->type == Facture::TYPE_SITUATION) && (! empty($conf->global->FACTURE_ENABLE_NEGATIVE) || $object->total_ttc >= 0)) || ($object->type == Facture::TYPE_CREDIT_NOTE && $object->total_ttc <= 0))) {
    -				if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->creer))
    -		  		|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->validate)))
    +				if ($usercanvalidate)
     				{
     					print '<div class="inline-block divButAction"><a class="butAction'.($conf->use_javascript_ajax?' reposition':'').'" href="' . $_SERVER["PHP_SELF"] . '?facid=' . $object->id . '&amp;action=valid">' . $langs->trans('Validate') . '</a></div>';
     				}
    @@ -4633,7 +4674,7 @@ else if ($id > 0 || ! empty($ref))
     				if ($objectidnext) {
     					print '<div class="inline-block divButAction"><span class="butActionRefused" title="' . $langs->trans("DisabledBecauseReplacedInvoice") . '">' . $langs->trans('SendMail') . '</span></div>';
     				} else {
    -					if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->facture->invoice_advance->send) {
    +					if ($usercansend) {
     						print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?facid=' . $object->id . '&action=presend&mode=init#formmailbeforetitle">' . $langs->trans('SendMail') . '</a></div>';
     					} else
     						print '<div class="inline-block divButAction"><a class="butActionRefused" href="#">' . $langs->trans('SendMail') . '</a></div>';
    @@ -4645,7 +4686,7 @@ else if ($id > 0 || ! empty($ref))
     			{
     				if ($resteapayer > 0)
     				{
    -					if ($user->rights->prelevement->bons->creer)
    +					if ($usercancreatewithdrarequest)
     					{
     						if (! $objectidnext && $object->close_code != 'replaced') 				// Not replaced by another invoice
     						{
    @@ -4666,7 +4707,7 @@ else if ($id > 0 || ! empty($ref))
     			}
     
     			// Create payment
    -			if ($object->type != Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $user->rights->facture->paiement) {
    +			if ($object->type != Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $usercanissuepayment) {
     				if ($objectidnext) {
     					print '<div class="inline-block divButAction"><span class="butActionRefused" title="' . $langs->trans("DisabledBecauseReplacedInvoice") . '">' . $langs->trans('DoPayment') . '</span></div>';
     				} else {
    @@ -4681,7 +4722,7 @@ else if ($id > 0 || ! empty($ref))
     			// Reverse back money or convert to reduction
     			if ($object->type == Facture::TYPE_CREDIT_NOTE || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_STANDARD) {
     				// For credit note only
    -				if ($object->type == Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $user->rights->facture->paiement)
    +				if ($object->type == Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $usercanissuepayment)
     				{
     					if ($resteapayer == 0)
     					{
    @@ -4694,24 +4735,24 @@ else if ($id > 0 || ! empty($ref))
     				}
     
     				// For standard invoice with excess received
    -				if ($object->type == Facture::TYPE_STANDARD && empty($object->paye) && ($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits) < 0 && $user->rights->facture->creer && empty($discount->id))
    +				if ($object->type == Facture::TYPE_STANDARD && empty($object->paye) && ($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits) < 0 && $usercancreate && empty($discount->id))
     				{
     					print '<div class="inline-block divButAction"><a class="butAction'.($conf->use_javascript_ajax?' reposition':'').'" href="'.$_SERVER["PHP_SELF"].'?facid='.$object->id.'&amp;action=converttoreduc">'.$langs->trans('ConvertExcessReceivedToReduc').'</a></div>';
     				}
     				// For credit note
    -				if ($object->type == Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $user->rights->facture->creer && $object->getSommePaiement() == 0) {
    +				if ($object->type == Facture::TYPE_CREDIT_NOTE && $object->statut == 1 && $object->paye == 0 && $usercancreate && $object->getSommePaiement() == 0) {
     					print '<div class="inline-block divButAction"><a class="butAction'.($conf->use_javascript_ajax?' reposition':'').'" href="' . $_SERVER["PHP_SELF"] . '?facid=' . $object->id . '&amp;action=converttoreduc">' . $langs->trans('ConvertToReduc') . '</a></div>';
     				}
     				// For deposit invoice
    -				if ($object->type == Facture::TYPE_DEPOSIT && $user->rights->facture->creer && $object->statut > 0 && empty($discount->id))
    +				if ($object->type == Facture::TYPE_DEPOSIT && $usercancreate && $object->statut > 0 && empty($discount->id))
     				{
     					print '<div class="inline-block divButAction"><a class="butAction'.($conf->use_javascript_ajax?' reposition':'').'" href="'.$_SERVER["PHP_SELF"].'?facid='.$object->id.'&amp;action=converttoreduc">'.$langs->trans('ConvertToReduc').'</a></div>';
     				}
     			}
     
     			// Classify paid
    -			if ($object->statut == 1 && $object->paye == 0 && $user->rights->facture->paiement && (($object->type != Facture::TYPE_CREDIT_NOTE && $object->type != Facture::TYPE_DEPOSIT && $resteapayer <= 0) || ($object->type == Facture::TYPE_CREDIT_NOTE && $resteapayer >= 0))
    -				|| ($object->type == Facture::TYPE_DEPOSIT && $object->paye == 0 && $object->total_ttc > 0 && $resteapayer == 0 && $user->rights->facture->paiement && empty($discount->id))
    +			if ($object->statut == 1 && $object->paye == 0 && $usercanissuepayment && (($object->type != Facture::TYPE_CREDIT_NOTE && $object->type != Facture::TYPE_DEPOSIT && $resteapayer <= 0) || ($object->type == Facture::TYPE_CREDIT_NOTE && $resteapayer >= 0))
    +				|| ($object->type == Facture::TYPE_DEPOSIT && $object->paye == 0 && $object->total_ttc > 0 && $resteapayer == 0 && $usercanissuepayment && empty($discount->id))
     			)
     			{
     				print '<div class="inline-block divButAction"><a class="butAction'.($conf->use_javascript_ajax?' reposition':'').'" href="'.$_SERVER['PHP_SELF'].'?facid='.$object->id.'&amp;action=paid">'.$langs->trans('ClassifyPaid').'</a></div>';
    @@ -4719,7 +4760,7 @@ else if ($id > 0 || ! empty($ref))
     
     			// Classify 'closed not completely paid' (possible si validee et pas encore classee payee)
     
    -			if ($object->statut == 1 && $object->paye == 0 && $resteapayer > 0 && $user->rights->facture->paiement)
    +			if ($object->statut == 1 && $object->paye == 0 && $resteapayer > 0 && $usercanissuepayment)
     			{
     				if ($totalpaye > 0 || $totalcreditnotes > 0)
     				{
    @@ -4743,13 +4784,13 @@ else if ($id > 0 || ! empty($ref))
     			}
     
     			// Clone
    -			if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA) && $user->rights->facture->creer)
    +			if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA) && $usercancreate)
     			{
     				print '<div class="inline-block divButAction"><a class="butAction'.($conf->use_javascript_ajax?' reposition':'').'" href="' . $_SERVER['PHP_SELF'] . '?facid=' . $object->id . '&amp;action=clone&amp;object=invoice">' . $langs->trans("ToClone") . '</a></div>';
     			}
     
     			// Clone as predefined / Create template
    -			if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA) && $object->statut == 0 && $user->rights->facture->creer)
    +			if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA) && $object->statut == 0 && $usercancreate)
     			{
     				if (! $objectidnext && count($object->lines) > 0)
     				{
    @@ -4758,7 +4799,7 @@ else if ($id > 0 || ! empty($ref))
     			}
     
     			// Create a credit note
    -			if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA) && $object->statut > 0 && $user->rights->facture->creer)
    +			if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA) && $object->statut > 0 && $usercancreate)
     			{
     				if (! $objectidnext)
     				{
    @@ -4769,14 +4810,13 @@ else if ($id > 0 || ! empty($ref))
     			// For situation invoice with excess received
     			if ($object->statut > Facture::STATUS_DRAFT
     			    && ($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits) > 0
    -			    && $user->rights->facture->creer
    +			    && $usercancreate
     			    && !$objectidnext
     			    && $object->is_last_in_cycle()
     			    && $conf->global->INVOICE_USE_SITUATION_CREDIT_NOTE
     			    )
     			{
    -			    if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->creer))
    -			        || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->unvalidate)))
    +				if ($usercanunvalidate)
     			    {
     			        print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?socid=' . $object->socid .'&amp;fac_avoir=' . $object->id . '&amp;invoiceAvoirWithLines=1&amp;action=create&amp;type=2'.($object->fk_project > 0 ? '&amp;projectid='.$object->fk_project : '').'">' . $langs->trans("CreateCreditNote") . '</a></div>';
     			    } else {
    @@ -4787,12 +4827,11 @@ else if ($id > 0 || ! empty($ref))
     			// remove situation from cycle
     			if ($object->statut > Facture::STATUS_DRAFT
     			    && $object->type == Facture::TYPE_SITUATION
    -			    && $user->rights->facture->creer
    +			    && $usercancreate
     			    && !$objectidnext
     			    && $object->situation_counter > 1
     			    && $object->is_last_in_cycle()
    -			    && ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->creer))
    -			        || (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->facture->invoice_advance->unvalidate)))
    +				&& $usercanunvalidate
     			    )
     			{
     			    if(($object->total_ttc - $totalcreditnotes  ) == 0 )
    @@ -4806,7 +4845,7 @@ else if ($id > 0 || ! empty($ref))
     			}
     
     			// Create next situation invoice
    -			if ($user->rights->facture->creer && ($object->type == 5) && ($object->statut == 1 || $object->statut == 2)) {
    +			if ($usercancreate && ($object->type == 5) && ($object->statut == 1 || $object->statut == 2)) {
     				if ($object->is_last_in_cycle() && $object->situation_final != 1) {
     					print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=create&amp;type=5&amp;origin=facture&amp;originid=' . $object->id . '&amp;socid=' . $object->socid . '" >' . $langs->trans('CreateNextSituationInvoice') . '</a></div>';
     				} else if (!$object->is_last_in_cycle()) {
    @@ -4818,7 +4857,7 @@ else if ($id > 0 || ! empty($ref))
     
     			// Delete
     			$isErasable = $object->is_erasable();
    -			if ($user->rights->facture->supprimer || ($user->rights->facture->creer && $isErasable == 1))	// isErasable = 1 means draft with temporary ref (draft can always be deleted with no need of permissions)
    +			if ($usercandelete || ($usercancreate && $isErasable == 1))	// isErasable = 1 means draft with temporary ref (draft can always be deleted with no need of permissions)
     			{
     				//var_dump($isErasable);
     				if ($isErasable == -4) {
    @@ -4865,8 +4904,8 @@ else if ($id > 0 || ! empty($ref))
     		$filename = dol_sanitizeFileName($object->ref);
     		$filedir = $conf->facture->dir_output . '/' . dol_sanitizeFileName($object->ref);
     		$urlsource = $_SERVER['PHP_SELF'] . '?facid=' . $object->id;
    -		$genallowed = $user->rights->facture->lire;
    -		$delallowed = $user->rights->facture->creer;
    +		$genallowed = $usercanread;
    +		$delallowed = $usercancreate;
     
     		print $formfile->showdocuments('facture', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang);
     		$somethingshown = $formfile->numoffiles;
    @@ -4875,7 +4914,7 @@ else if ($id > 0 || ! empty($ref))
     		$linktoelem = $form->showLinkToObjectBlock($object, null, array('invoice'));
     
     		$compatibleImportElementsList = false;
    -		if($user->rights->facture->creer
    +		if($usercancreate
     		    && $object->statut == Facture::STATUS_DRAFT
     		    && ($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT || $object->type == Facture::TYPE_DEPOSIT || $object->type == Facture::TYPE_PROFORMA || $object->type == Facture::TYPE_SITUATION) )
     		{
    @@ -4921,5 +4960,6 @@ else if ($id > 0 || ! empty($ref))
     	include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/facture/class/api_invoices.class.php b/htdocs/compta/facture/class/api_invoices.class.php
    index 7012b0ef800..5075d9d8cb7 100644
    --- a/htdocs/compta/facture/class/api_invoices.class.php
    +++ b/htdocs/compta/facture/class/api_invoices.class.php
    @@ -32,7 +32,7 @@ class Invoices extends DolibarrApi
          * @var array   $FIELDS     Mandatory fields, checked when create and update object
          */
         static $FIELDS = array(
    -        'socid'
    +        'socid',
         );
     
         /**
    @@ -104,7 +104,8 @@ class Invoices extends DolibarrApi
          *
     	 * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids='', $status='', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids='', $status='', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -245,29 +246,30 @@ class Invoices extends DolibarrApi
          * @throws 404
          * @throws 405
          */
    -    function createInvoiceFromOrder($orderid) {
    +    function createInvoiceFromOrder($orderid)
    +    {
     
             require_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php';
     
             if(! DolibarrApiAccess::$user->rights->commande->lire) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             if(! DolibarrApiAccess::$user->rights->facture->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             if(empty($orderid)) {
    -                throw new RestException(400, 'Order ID is mandatory');
    +            throw new RestException(400, 'Order ID is mandatory');
             }
     
             $order = new Commande($this->db);
             $result = $order->fetch($orderid);
             if( ! $result ) {
    -                throw new RestException(404, 'Order not found');
    +            throw new RestException(404, 'Order not found');
             }
     
             $result = $this->invoice->createFromOrder($order, DolibarrApiAccess::$user);
             if( $result < 0) {
    -                throw new RestException(405, $this->invoice->error);
    +            throw new RestException(405, $this->invoice->error);
             }
             $this->invoice->fetchObjectLinked();
             return $this->_cleanObjectDatas($this->invoice);
    @@ -282,7 +284,8 @@ class Invoices extends DolibarrApi
          *
          * @return int
          */
    -    function getLines($id) {
    +    function getLines($id)
    +    {
         	if(! DolibarrApiAccess::$user->rights->facture->lire) {
         		throw new RestException(401);
         	}
    @@ -319,7 +322,8 @@ class Invoices extends DolibarrApi
          * @throws 401
          * @throws 404
          */
    -    function putLine($id, $lineid, $request_data = null) {
    +    function putLine($id, $lineid, $request_data = null)
    +    {
         	if(! DolibarrApiAccess::$user->rights->facture->creer) {
         		throw new RestException(401);
         	}
    @@ -383,7 +387,8 @@ class Invoices extends DolibarrApi
          * @throws 404
          * @throws 405
          */
    -    function deleteLine($id, $lineid) {
    +    function deleteLine($id, $lineid)
    +    {
     
         	if(! DolibarrApiAccess::$user->rights->facture->creer) {
         		throw new RestException(401);
    @@ -511,67 +516,68 @@ class Invoices extends DolibarrApi
          * @throws 404
          * @throws 400
          */
    -    function postLine($id, $request_data = null) {
    -      if(! DolibarrApiAccess::$user->rights->facture->creer) {
    -                        throw new RestException(401);
    -                  }
    +    function postLine($id, $request_data = null)
    +    {
    +        if(! DolibarrApiAccess::$user->rights->facture->creer) {
    +            throw new RestException(401);
    +        }
     
    -      $result = $this->invoice->fetch($id);
    -      if( ! $result ) {
    -         throw new RestException(404, 'Invoice not found');
    -      }
    +        $result = $this->invoice->fetch($id);
    +        if( ! $result ) {
    +            throw new RestException(404, 'Invoice not found');
    +        }
     
    -      if( ! DolibarrApi::_checkAccessToResource('facture',$this->invoice->id)) {
    -                          throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -      }
    +        if( ! DolibarrApi::_checkAccessToResource('facture',$this->invoice->id)) {
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
     
    -      $request_data = (object) $request_data;
    +        $request_data = (object) $request_data;
     
    -      // Reset fk_parent_line for no child products and special product
    -      if (($request_data->product_type != 9 && empty($request_data->fk_parent_line)) || $request_data->product_type == 9) {
    -              $request_data->fk_parent_line = 0;
    -      }
    +        // Reset fk_parent_line for no child products and special product
    +        if (($request_data->product_type != 9 && empty($request_data->fk_parent_line)) || $request_data->product_type == 9) {
    +            $request_data->fk_parent_line = 0;
    +        }
     
    -      // calculate pa_ht
    -      $marginInfos = getMarginInfos($request_data->subprice, $request_data->remise_percent, $request_data->tva_tx, $request_data->localtax1_tx, $request_data->localtax2_tx, $request_data->fk_fournprice, $request_data->pa_ht);
    -      $pa_ht = $marginInfos[0];
    +        // calculate pa_ht
    +        $marginInfos = getMarginInfos($request_data->subprice, $request_data->remise_percent, $request_data->tva_tx, $request_data->localtax1_tx, $request_data->localtax2_tx, $request_data->fk_fournprice, $request_data->pa_ht);
    +        $pa_ht = $marginInfos[0];
     
    -      $updateRes = $this->invoice->addline(
    -                              $request_data->desc,
    -                              $request_data->subprice,
    -                              $request_data->qty,
    -                              $request_data->tva_tx,
    -                              $request_data->localtax1_tx,
    -                              $request_data->localtax2_tx,
    -                              $request_data->fk_product,
    -                              $request_data->remise_percent,
    -                              $request_data->date_start,
    -                              $request_data->date_end,
    -                              $request_data->fk_code_ventilation,
    -                              $request_data->info_bits,
    -                              $request_data->fk_remise_except,
    -                              'HT',
    -                              0,
    -                              $request_data->product_type,
    -                              $request_data->rang,
    -                              $request_data->special_code,
    -                              $request_data->origin,
    -                              $request_data->origin_id,
    -                              $request_data->fk_parent_line,
    -                              empty($request_data->fk_fournprice)?null:$request_data->fk_fournprice,
    -                              $pa_ht,
    -                              $request_data->label,
    -                              $request_data->array_options,
    -                              $request_data->situation_percent,
    -                              $request_data->fk_prev_id,
    -                              $request_data->fk_unit
    -      );
    +        $updateRes = $this->invoice->addline(
    +            $request_data->desc,
    +            $request_data->subprice,
    +            $request_data->qty,
    +            $request_data->tva_tx,
    +            $request_data->localtax1_tx,
    +            $request_data->localtax2_tx,
    +            $request_data->fk_product,
    +            $request_data->remise_percent,
    +            $request_data->date_start,
    +            $request_data->date_end,
    +            $request_data->fk_code_ventilation,
    +            $request_data->info_bits,
    +            $request_data->fk_remise_except,
    +            'HT',
    +            0,
    +            $request_data->product_type,
    +            $request_data->rang,
    +            $request_data->special_code,
    +            $request_data->origin,
    +            $request_data->origin_id,
    +            $request_data->fk_parent_line,
    +            empty($request_data->fk_fournprice)?null:$request_data->fk_fournprice,
    +            $pa_ht,
    +            $request_data->label,
    +            $request_data->array_options,
    +            $request_data->situation_percent,
    +            $request_data->fk_prev_id,
    +            $request_data->fk_unit
    +        );
     
    -      if ($updateRes < 0) {
    +        if ($updateRes < 0) {
                 throw new RestException(400, 'Unable to insert the new line. Check your inputs. '.$this->invoice->error);
    -      }
    +        }
     
    -      return $updateRes;
    +        return $updateRes;
         }
     
         /**
    @@ -647,23 +653,23 @@ class Invoices extends DolibarrApi
         function settodraft($id, $idwarehouse=-1)
         {
             if(! DolibarrApiAccess::$user->rights->facture->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             $result = $this->invoice->fetch($id);
             if( ! $result ) {
    -                throw new RestException(404, 'Invoice not found');
    +            throw new RestException(404, 'Invoice not found');
             }
     
             if( ! DolibarrApi::_checkAccessToResource('facture',$this->invoice->id)) {
    -                throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
             }
     
             $result = $this->invoice->set_draft(DolibarrApiAccess::$user, $idwarehouse);
             if ($result == 0) {
    -                throw new RestException(304, 'Nothing done.');
    +            throw new RestException(304, 'Nothing done.');
             }
             if ($result < 0) {
    -                throw new RestException(500, 'Error : '.$this->invoice->error);
    +            throw new RestException(500, 'Error : '.$this->invoice->error);
             }
     
             $result = $this->invoice->fetch($id);
    @@ -750,23 +756,23 @@ class Invoices extends DolibarrApi
         function settopaid($id, $close_code='', $close_note='')
         {
             if(! DolibarrApiAccess::$user->rights->facture->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             $result = $this->invoice->fetch($id);
             if( ! $result ) {
    -                throw new RestException(404, 'Invoice not found');
    +            throw new RestException(404, 'Invoice not found');
             }
     
             if( ! DolibarrApi::_checkAccessToResource('facture',$this->invoice->id)) {
    -                throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
             }
     
             $result = $this->invoice->set_paid(DolibarrApiAccess::$user, $close_code, $close_note);
             if ($result == 0) {
    -                throw new RestException(304, 'Error nothing done. May be object is already validated');
    +            throw new RestException(304, 'Error nothing done. May be object is already validated');
             }
             if ($result < 0) {
    -                throw new RestException(500, 'Error : '.$this->invoice->error);
    +            throw new RestException(500, 'Error : '.$this->invoice->error);
             }
     
     
    @@ -801,23 +807,23 @@ class Invoices extends DolibarrApi
         function settounpaid($id)
         {
             if(! DolibarrApiAccess::$user->rights->facture->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             $result = $this->invoice->fetch($id);
             if( ! $result ) {
    -                throw new RestException(404, 'Invoice not found');
    +            throw new RestException(404, 'Invoice not found');
             }
     
             if( ! DolibarrApi::_checkAccessToResource('facture',$this->invoice->id)) {
    -                throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
             }
     
             $result = $this->invoice->set_unpaid(DolibarrApiAccess::$user);
             if ($result == 0) {
    -                throw new RestException(304, 'Nothing done');
    +            throw new RestException(304, 'Nothing done');
             }
             if ($result < 0) {
    -                throw new RestException(500, 'Error : '.$this->invoice->error);
    +            throw new RestException(500, 'Error : '.$this->invoice->error);
             }
     
     
    @@ -849,30 +855,31 @@ class Invoices extends DolibarrApi
          * @throws 404
          * @throws 405
          */
    -    function useDiscount($id, $discountid) {
    +    function useDiscount($id, $discountid)
    +    {
     
             if(! DolibarrApiAccess::$user->rights->facture->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             if(empty($id)) {
    -                throw new RestException(400, 'Invoice ID is mandatory');
    +            throw new RestException(400, 'Invoice ID is mandatory');
             }
             if(empty($discountid)) {
    -                throw new RestException(400, 'Discount ID is mandatory');
    +            throw new RestException(400, 'Discount ID is mandatory');
             }
     
             if( ! DolibarrApi::_checkAccessToResource('facture',$id)) {
    -                throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
             }
     
             $result = $this->invoice->fetch($id);
             if( ! $result ) {
    -                throw new RestException(404, 'Invoice not found');
    +            throw new RestException(404, 'Invoice not found');
             }
     
             $result = $this->invoice->insert_discount($discountid);
             if( $result < 0) {
    -                throw new RestException(405, $this->invoice->error);
    +            throw new RestException(405, $this->invoice->error);
             }
     
             return $result;
    @@ -894,32 +901,33 @@ class Invoices extends DolibarrApi
          * @throws 404
          * @throws 405
          */
    -    function useCreditNote($id, $discountid) {
    +    function useCreditNote($id, $discountid)
    +    {
     
             require_once DOL_DOCUMENT_ROOT . '/core/class/discount.class.php';
     
             if(! DolibarrApiAccess::$user->rights->facture->creer) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             if(empty($id)) {
    -                throw new RestException(400, 'Invoice ID is mandatory');
    +            throw new RestException(400, 'Invoice ID is mandatory');
             }
             if(empty($discountid)) {
    -                throw new RestException(400, 'Credit ID is mandatory');
    +            throw new RestException(400, 'Credit ID is mandatory');
             }
     
             if( ! DolibarrApi::_checkAccessToResource('facture',$id)) {
    -                throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
             }
             $discount = new DiscountAbsolute($this->db);
             $result = $discount->fetch($discountid);
             if( ! $result ) {
    -                throw new RestException(404, 'Credit not found');
    +            throw new RestException(404, 'Credit not found');
             }
     
             $result = $discount->link_to_invoice(0, $id);
             if( $result < 0) {
    -                throw new RestException(405, $discount->error);
    +            throw new RestException(405, $discount->error);
             }
     
             return $result;
    @@ -938,27 +946,28 @@ class Invoices extends DolibarrApi
          * @throws 404
          * @throws 405
          */
    -    function getPayments($id) {
    +    function getPayments($id)
    +    {
     
             if(! DolibarrApiAccess::$user->rights->facture->lire) {
    -                throw new RestException(401);
    +            throw new RestException(401);
             }
             if(empty($id)) {
    -                throw new RestException(400, 'Invoice ID is mandatory');
    +            throw new RestException(400, 'Invoice ID is mandatory');
             }
     
             if( ! DolibarrApi::_checkAccessToResource('facture',$id)) {
    -                throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
             }
     
             $result = $this->invoice->fetch($id);
             if( ! $result ) {
    -                throw new RestException(404, 'Invoice not found');
    +            throw new RestException(404, 'Invoice not found');
             }
     
             $result = $this->invoice->getListOfPayments();
             if( $result < 0) {
    -                throw new RestException(405, $this->invoice->error);
    +            throw new RestException(405, $this->invoice->error);
             }
     
             return $result;
    @@ -985,8 +994,9 @@ class Invoices extends DolibarrApi
          * @throws 401
          * @throws 404
          */
    -    function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement='', $comment='', $chqemetteur='', $chqbank='') {
    -    	global $conf;
    +    function addPayment($id, $datepaye, $paiementid, $closepaidinvoices, $accountid, $num_paiement='', $comment='', $chqemetteur='', $chqbank='')
    +    {
    +        global $conf;
     
         	require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php';
     
    @@ -1111,7 +1121,7 @@ class Invoices extends DolibarrApi
             require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php';
     
             if(! DolibarrApiAccess::$user->rights->facture->creer) {
    -                throw new RestException(403);
    +            throw new RestException(403);
             }
             foreach($arrayofamounts as $id => $amount) {
             	if(empty($id)) {
    @@ -1215,18 +1225,19 @@ class Invoices extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
    -    	$object = parent::_cleanObjectDatas($object);
    +        $object = parent::_cleanObjectDatas($object);
     
             unset($object->note);
    -    	unset($object->address);
    -    	unset($object->barcode_type);
    -    	unset($object->barcode_type_code);
    -    	unset($object->barcode_type_label);
    -    	unset($object->barcode_type_coder);
    +        unset($object->address);
    +        unset($object->barcode_type);
    +        unset($object->barcode_type_code);
    +        unset($object->barcode_type_label);
    +        unset($object->barcode_type_coder);
     
    -    	return $object;
    +        return $object;
         }
     
         /**
    @@ -1241,11 +1252,11 @@ class Invoices extends DolibarrApi
         {
             $invoice = array();
             foreach (Invoices::$FIELDS as $field) {
    -            if (!isset($data[$field]))
    +            if (!isset($data[$field])) {
                     throw new RestException(400, "$field field missing");
    +            }
                 $invoice[$field] = $data[$field];
             }
             return $invoice;
         }
    -
     }
    diff --git a/htdocs/compta/facture/class/facture-rec.class.php b/htdocs/compta/facture/class/facture-rec.class.php
    index a82f06ad851..56f87d2eac3 100644
    --- a/htdocs/compta/facture/class/facture-rec.class.php
    +++ b/htdocs/compta/facture/class/facture-rec.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2005	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2011	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2012       Cedric Salvador      <csalvador@gpcsolutions.fr>
      * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
    @@ -39,36 +39,59 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
      */
     class FactureRec extends CommonInvoice
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='facturerec';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='facture_rec';
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line='facturedet_rec';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element='fk_facture';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto='bill';
     
    -	var $entity;
    -	var $number;
    -	var $date;
    -	var $amount;
    -	var $remise;
    -	var $tva;
    -	var $total;
    -	var $db_table;
    -	var $propalid;
    +	/**
    +	 * @var int Entity
    +	 */
    +	public $entity;
     
    -	var $date_last_gen;
    -	var $date_when;
    -	var $nb_gen_done;
    -	var $nb_gen_max;
    +	public $number;
    +	public $date;
    +	public $amount;
    +	public $remise;
    +	public $tva;
    +	public $total;
    +	public $db_table;
    +	public $propalid;
     
    -	var $frequency;
    -	var $unit_frequency;
    +	public $date_last_gen;
    +	public $date_when;
    +	public $nb_gen_done;
    +	public $nb_gen_max;
     
    -	var $rang;
    -	var $special_code;
    +	public $frequency;
    +	public $unit_frequency;
     
    -	var $usenewprice=0;
    +	public $rang;
    +	public $special_code;
     
    -	var $suspended;			// status
    +	public $usenewprice=0;
    +
    +	public $suspended;			// status
     
     	const STATUS_NOTSUSPENDED = 0;
     	const STATUS_SUSPENDED = 1;
    @@ -432,18 +455,20 @@ class FactureRec extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Recupere les lignes de factures predefinies dans this->lines
     	 *
    -	 *	@return     int         1 if OK, < 0 if KO
    - 	 */
    +	 *  @return     int         1 if OK, < 0 if KO
    +     */
     	function fetch_lines()
     	{
    +        // phpcs:enable
     		$this->lines=array();
     
     		// Retreive all extrafield for line
     		// fetch optionals attributes and labels
    -		require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
    +		require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     		$extrafieldsline=new ExtraFields($this->db);
     		$extrafieldsline=$extrafieldsline->fetch_name_optionals_label('facturedet_rec',true);
     
    @@ -983,8 +1008,8 @@ class FactureRec extends CommonInvoice
     
     		$error=0;
     
    -		$langs->load("bills");
    -		$langs->load('main');
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","bills"));
     
     		$nb_create=0;
     
    @@ -1173,6 +1198,7 @@ class FactureRec extends CommonInvoice
     		return $this->LibStatut($this->frequency?1:0, $this->suspended, $mode, $alreadypaid, empty($this->type)?0:$this->type);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return label of a status
     	 *
    @@ -1185,6 +1211,7 @@ class FactureRec extends CommonInvoice
     	 */
     	function LibStatut($recur, $status, $mode=0, $alreadypaid=-1, $type=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load('bills');
     
    @@ -1203,7 +1230,7 @@ class FactureRec extends CommonInvoice
     				else return $langs->trans("Draft");
     			}
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			$prefix='Short';
     			if ($recur)
    @@ -1217,7 +1244,7 @@ class FactureRec extends CommonInvoice
     				else return $langs->trans("Draft");
     			}
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($recur)
     			{
    @@ -1230,7 +1257,7 @@ class FactureRec extends CommonInvoice
     				else return img_picto($langs->trans('Draft'),'statut0').' '.$langs->trans('Draft');
     			}
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($recur)
     			{
    @@ -1244,7 +1271,7 @@ class FactureRec extends CommonInvoice
     				else return img_picto($langs->trans('Draft'),'statut0');
     			}
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			$prefix='';
     			if ($recur)
    @@ -1258,7 +1285,7 @@ class FactureRec extends CommonInvoice
     				else return img_picto($langs->trans('Draft'),'statut0').' '.$langs->trans('Draft');
     			}
     		}
    -		if ($mode == 5 || $mode == 6)
    +		elseif ($mode == 5 || $mode == 6)
     		{
     			$prefix='';
     			if ($mode == 5) $prefix='Short';
    @@ -1639,7 +1666,14 @@ class FactureRec extends CommonInvoice
      */
     class FactureLigneRec extends CommonInvoiceLine
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='facturedetrec';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='facturedet_rec';
     
     	var $date_start_fill;
    @@ -1843,7 +1877,5 @@ class FactureLigneRec extends CommonInvoiceLine
         		$this->db->rollback();
         		return -2;
         	}
    -
         }
    -
     }
    diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php
    index 7c65a0a85f8..227ae42b266 100644
    --- a/htdocs/compta/facture/class/facture.class.php
    +++ b/htdocs/compta/facture/class/facture.class.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004      Sebastien Di Cintio   <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier        <benoit.mortier@opensides.be>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2014 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani      <acianfa@free.fr>
      * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
      * Copyright (C) 2010-2016 Juanjo Menent         <jmenent@2byte.es>
    @@ -53,16 +53,37 @@ if (! empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT.'/accoun
      */
     class Facture extends CommonInvoice
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='facture';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='facture';
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line = 'facturedet';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element = 'fk_facture';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto='bill';
    +
     	/**
     	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 * @var int
     	 */
     	public $ismultientitymanaged = 1;
    +
     	/**
     	 * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
     	 * @var integer
    @@ -77,11 +98,18 @@ class Facture extends CommonInvoice
     	public $socid;
     
     	public $author;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_author;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_valid;
    +
     	public $date;              // Date invoice
    -	public $date_creation;		// Creation date
    -	public $date_validation;	// Validation date
     	public $datem;
     	public $ref_client;
     	public $ref_int;
    @@ -105,21 +133,34 @@ class Facture extends CommonInvoice
     	public $close_note;
     	//! 1 if invoice paid COMPLETELY, 0 otherwise (do not use it anymore, use statut and close_code)
     	public $paye;
    +	//! key of module source when invoice generated from a dedicated module ('cashdesk', 'takepos', ...)
    +	public $module_source;
    +	//! key of pos source ('0', '1', ...)
    +	public $pos_source;
    +	//! id of template invoice when generated from a template invoice
    +	public $fk_fac_rec_source;
     	//! id of source invoice if replacement invoice or credit note
     	public $fk_facture_source;
     	public $linked_objects=array();
     	public $date_lim_reglement;
     	public $cond_reglement_code;		// Code in llx_c_paiement
     	public $mode_reglement_code;		// Code in llx_c_paiement
    -	public $fk_bank;					// Field to store bank id to use when payment mode is withdraw
    +
    +	/**
    +     * @var int ID Field to store bank id to use when payment mode is withdraw
    +     */
    +	public $fk_bank;
    +
     	/**
     	 * @deprecated
     	 */
     	public $products=array();
    +
     	/**
     	 * @var FactureLigne[]
     	 */
     	public $lines=array();
    +
     	public $line;
     	public $extraparams=array();
     	public $specimen;
    @@ -127,7 +168,11 @@ class Facture extends CommonInvoice
     	public $fac_rec;
     
     	// Multicurrency
    +	/**
    +     * @var int ID
    +     */
     	public $fk_multicurrency;
    +
     	public $multicurrency_code;
     	public $multicurrency_tx;
     	public $multicurrency_total_ht;
    @@ -192,7 +237,7 @@ class Facture extends CommonInvoice
     	const TYPE_SITUATION = 5;
     
     	/**
    -	 * Draft
    +	 * Draft status
     	 */
     	const STATUS_DRAFT = 0;
     
    @@ -419,7 +464,7 @@ class Facture extends CommonInvoice
     		$sql.= ", note_public";
     		$sql.= ", ref_client, ref_int";
             $sql.= ", fk_account";
    -		$sql.= ", fk_fac_rec_source, fk_facture_source, fk_user_author, fk_projet";
    +		$sql.= ", module_source, pos_source, fk_fac_rec_source, fk_facture_source, fk_user_author, fk_projet";
     		$sql.= ", fk_cond_reglement, fk_mode_reglement, date_lim_reglement, model_pdf";
     		$sql.= ", situation_cycle_ref, situation_counter, situation_final";
     		$sql.= ", fk_incoterms, location_incoterms";
    @@ -443,6 +488,8 @@ class Facture extends CommonInvoice
     		$sql.= ", ".($this->ref_client?"'".$this->db->escape($this->ref_client)."'":"null");
     		$sql.= ", ".($this->ref_int?"'".$this->db->escape($this->ref_int)."'":"null");
     		$sql.= ", ".($this->fk_account>0?$this->fk_account:'NULL');
    +		$sql.= ", ".($this->module_source ? "'".$this->db->escape($this->module_source)."'" : "null");
    +		$sql.= ", ".($this->pos_source != '' ? "'".$this->db->escape($this->pos_source)."'" : "null");
     		$sql.= ", ".($this->fk_fac_rec_source?"'".$this->db->escape($this->fk_fac_rec_source)."'":"null");
     		$sql.= ", ".($this->fk_facture_source?"'".$this->db->escape($this->fk_facture_source)."'":"null");
     		$sql.= ", ".($user->id > 0 ? "'".$user->id."'":"null");
    @@ -943,6 +990,7 @@ class Facture extends CommonInvoice
     		$this->user_valid         = '';
     		$this->fk_facture_source  = 0;
     		$this->date_creation      = '';
    +		$this->date_modification = '';
     		$this->date_validation    = '';
     		$this->ref_client         = '';
     		$this->close_code         = '';
    @@ -1159,7 +1207,8 @@ class Facture extends CommonInvoice
     		if ($option == 'withdraw') $url = DOL_URL_ROOT.'/compta/facture/prelevement.php?facid='.$this->id;
     		else $url = DOL_URL_ROOT.'/compta/facture/card.php?facid='.$this->id;
     
    -		if ($short) return $url;
    +        if (!$user->rights->facture->lire)
    +            $option = 'nolink';
     
     		if ($option !== 'nolink')
     		{
    @@ -1169,6 +1218,8 @@ class Facture extends CommonInvoice
     			if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
     		}
     
    +		if ($short) return $url;
    +
     		$picto='bill';
     		if ($this->type == self::TYPE_REPLACEMENT) $picto.='r';	// Replacement invoice
     		if ($this->type == self::TYPE_CREDIT_NOTE) $picto.='a';	// Credit note
    @@ -1190,7 +1241,7 @@ class Facture extends CommonInvoice
                 if (! empty($this->total_tva))
                     $label.= '<br><b>' . $langs->trans('VAT') . ':</b> ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency);
                 if (! empty($this->total_localtax1) && $this->total_localtax1 != 0)		// We keep test != 0 because $this->total_localtax1 can be '0.00000000'
    -                $label.= '<br><b>eee' . $langs->trans('LT1') . ':</b> ' . price($this->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency);
    +                $label.= '<br><b>' . $langs->trans('LT1') . ':</b> ' . price($this->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency);
                 if (! empty($this->total_localtax2) && $this->total_localtax2 != 0)
                     $label.= '<br><b>' . $langs->trans('LT2') . ':</b> ' . price($this->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency);
                 if (! empty($this->total_ttc))
    @@ -1214,6 +1265,11 @@ class Facture extends CommonInvoice
             $linkstart.=$linkclose.'>';
     		$linkend='</a>';
     
    +        if ($option == 'nolink') {
    +            $linkstart = '';
    +            $linkend = '';
    +        }
    +
     		$result .= $linkstart;
     		if ($withpicto) $result.=img_object(($notooltip?'':$label), $picto, ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
     		if ($withpicto != 2) $result.= ($max?dol_trunc($this->ref,$max):$this->ref);
    @@ -1221,12 +1277,14 @@ class Facture extends CommonInvoice
     
     		if ($addlinktonotes)
     		{
    -		    $txttoshow=($user->societe_id>0?$this->note_public:$this->note_private);
    +		    $txttoshow=($user->socid > 0 ? $this->note_public : $this->note_private);
     		    if ($txttoshow)
     		    {
                     $notetoshow=$langs->trans("ViewPrivateNote").':<br>'.dol_string_nohtmltag($txttoshow,1);
         		    $result.=' <span class="note inline-block">';
    -    		    $result.='<a href="'.DOL_URL_ROOT.'/compta/facture/note.php?id='.$this->id.'" class="classfortooltip" title="'.dol_escape_htmltag($notetoshow).'">'.img_picto('','object_generic').'</a>';
    +    		    $result.='<a href="'.DOL_URL_ROOT.'/compta/facture/note.php?id='.$this->id.'" class="classfortooltip" title="'.dol_escape_htmltag($notetoshow).'">';
    +    		    $result.=img_picto('','note');
    +    		    $result.='</a>';
         		    //$result.=img_picto($langs->trans("ViewNote"),'object_generic');
         		    //$result.='</a>';
         		    $result.='</span>';
    @@ -1302,6 +1360,7 @@ class Facture extends CommonInvoice
     				$this->date_pointoftax		= $this->db->jdate($obj->date_pointoftax);
     				$this->date_creation		= $this->db->jdate($obj->datec);
     				$this->date_validation		= $this->db->jdate($obj->datev);
    +				$this->date_modification		= $this->db->jdate($obj->datem);
     				$this->datem				= $this->db->jdate($obj->datem);
     				$this->remise_percent		= $obj->remise_percent;
     				$this->remise_absolue		= $obj->remise_absolue;
    @@ -1392,6 +1451,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Load all detailed lines into this->lines
     	 *
    @@ -1399,6 +1459,7 @@ class Facture extends CommonInvoice
     	 */
     	function fetch_lines()
     	{
    +        // phpcs:enable
     		$this->lines=array();
     
     		$sql = 'SELECT l.rowid, l.fk_facture, l.fk_product, l.fk_parent_line, l.label as custom_label, l.description, l.product_type, l.price, l.qty, l.vat_src_code, l.tva_tx,';
    @@ -1537,7 +1598,6 @@ class Facture extends CommonInvoice
     				}
     			}
     		}
    -
     	}
     
     	/**
    @@ -1652,6 +1712,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Add a discount line into an invoice (as an invoice line) using an existing absolute discount (Consume the discount)
     	 *
    @@ -1660,6 +1721,7 @@ class Facture extends CommonInvoice
     	 */
     	function insert_discount($idremise)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
    @@ -1752,6 +1814,7 @@ class Facture extends CommonInvoice
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set customer ref
     	 *
    @@ -1761,6 +1824,7 @@ class Facture extends CommonInvoice
     	 */
     	function set_ref_client($ref_client, $notrigger=0)
     	{
    +        // phpcs:enable
     	    global $user;
     
     		$error=0;
    @@ -1945,7 +2009,8 @@ class Facture extends CommonInvoice
     
     							if (! dol_delete_file($file,0,0,0,$this)) // For triggers
     							{
    -								$this->error=$langs->trans("ErrorCanNotDeleteFile",$file);
    +								$langs->load("errors");
    +								$this->error=$langs->trans("ErrorFailToDeleteFile",$file);
     								$this->db->rollback();
     								return 0;
     							}
    @@ -1954,7 +2019,8 @@ class Facture extends CommonInvoice
     						{
     							if (! dol_delete_dir_recursive($dir)) // For remove dir and meta
     							{
    -								$this->error=$langs->trans("ErrorCanNotDeleteDir",$dir);
    +								$langs->load("errors");
    +								$this->error=$langs->trans("ErrorFailToDeleteDir",$dir);
     								$this->db->rollback();
     								return 0;
     							}
    @@ -1985,6 +2051,7 @@ class Facture extends CommonInvoice
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Tag la facture comme paye completement (si close_code non renseigne) => this->fk_statut=2, this->paye=1
     	 *  ou partiellement (si close_code renseigne) + appel trigger BILL_PAYED => this->fk_statut=2, this->paye stay 0
    @@ -1996,6 +2063,7 @@ class Facture extends CommonInvoice
     	 */
     	function set_paid($user, $close_code='', $close_note='')
     	{
    +        // phpcs:enable
     		$error=0;
     
     		if ($this->paye != 1)
    @@ -2043,6 +2111,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Tag la facture comme non payee completement + appel trigger BILL_UNPAYED
     	 *	Fonction utilisee quand un paiement prelevement est refuse,
    @@ -2053,6 +2122,7 @@ class Facture extends CommonInvoice
     	 */
     	function set_unpaid($user)
     	{
    +        // phpcs:enable
     		$error=0;
     
     		$this->db->begin();
    @@ -2090,6 +2160,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Tag invoice as canceled, with no payment on it (example for replacement invoice or payment never received) + call trigger BILL_CANCEL
     	 *	Warning, if option to decrease stock on invoice was set, this function does not change stock (it might be a cancel because
    @@ -2102,6 +2173,7 @@ class Facture extends CommonInvoice
     	 */
     	function set_canceled($user, $close_code='', $close_note='')
     	{
    +        // phpcs:enable
     
     		dol_syslog(get_class($this)."::set_canceled rowid=".$this->id, LOG_DEBUG);
     
    @@ -2393,7 +2465,6 @@ class Facture extends CommonInvoice
         				else $this->situation_final = 1;
     
     				$this->setFinal($user);
    -
                     }
     			}
     		}
    @@ -2453,6 +2524,7 @@ class Facture extends CommonInvoice
     		return true;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set draft status
     	 *
    @@ -2462,6 +2534,7 @@ class Facture extends CommonInvoice
     	 */
     	function set_draft($user,$idwarehouse=-1)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$error=0;
    @@ -3018,6 +3091,7 @@ class Facture extends CommonInvoice
     		else return $situation_percent < $obj->situation_percent;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Update invoice line with percentage
     	 *
    @@ -3027,9 +3101,10 @@ class Facture extends CommonInvoice
     	 */
     	function update_percent($line, $percent)
     	{
    +        // phpcs:enable
     	    global $mysoc,$user;
     
    -		include_once(DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php');
    +		include_once DOL_DOCUMENT_ROOT . '/core/lib/price.lib.php';
     
     		// Cap percentages to 100
     		if ($percent > 100) $percent = 100;
    @@ -3114,6 +3189,7 @@ class Facture extends CommonInvoice
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set percent discount
     	 *
    @@ -3124,6 +3200,7 @@ class Facture extends CommonInvoice
     	 */
     	function set_remise($user, $remise, $notrigger=0)
     	{
    +        // phpcs:enable
     		// Clean parameters
     		if (empty($remise)) $remise=0;
     
    @@ -3178,6 +3255,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set absolute discount
     	 *
    @@ -3188,6 +3266,7 @@ class Facture extends CommonInvoice
     	 */
     	function set_remise_absolue($user, $remise, $notrigger=0)
     	{
    +        // phpcs:enable
     		if (empty($remise)) $remise=0;
     
     		if ($user->rights->facture->creer)
    @@ -3378,6 +3457,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of invoices (eventually filtered on a user) into an array
     	 *
    @@ -3393,6 +3473,7 @@ class Facture extends CommonInvoice
     	 */
     	function liste_array($shortlist=0, $draft=0, $excluser='', $socid=0, $limit=0, $offset=0, $sortfield='f.datef,f.rowid', $sortorder='DESC')
     	{
    +        // phpcs:enable
     		global $conf,$user;
     
     		$ga = array();
    @@ -3452,6 +3533,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of invoices qualified to be replaced by another invoice.
     	 *	Invoices matching the following rules are returned:
    @@ -3462,6 +3544,7 @@ class Facture extends CommonInvoice
     	 */
     	function list_replacable_invoices($socid=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$return = array();
    @@ -3500,6 +3583,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of invoices qualified to be corrected by a credit note.
     	 *	Invoices matching the following rules are returned:
    @@ -3510,6 +3594,7 @@ class Facture extends CommonInvoice
     	 */
     	function list_qualified_avoir_invoices($socid=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$return = array();
    @@ -3573,6 +3658,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a withdrawal request for a standing order.
     	 *  Use the remain to pay excluding all existing open direct debit requests.
    @@ -3583,6 +3669,7 @@ class Facture extends CommonInvoice
     	 */
     	function demande_prelevement($fuser, $amount=0)
     	{
    +        // phpcs:enable
     
     		$error=0;
     
    @@ -3683,6 +3770,7 @@ class Facture extends CommonInvoice
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Supprime une demande de prelevement
     	 *
    @@ -3692,6 +3780,7 @@ class Facture extends CommonInvoice
     	 */
     	function demande_prelevement_delete($fuser, $did)
     	{
    +        // phpcs:enable
     		$sql = 'DELETE FROM '.MAIN_DB_PREFIX.'prelevement_facture_demande';
     		$sql .= ' WHERE rowid = '.$did;
     		$sql .= ' AND traite = 0';
    @@ -3708,6 +3797,7 @@ class Facture extends CommonInvoice
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Load indicators for dashboard (this->nbtodo and this->nbtodolate)
     	 *
    @@ -3716,11 +3806,12 @@ class Facture extends CommonInvoice
     	 */
     	function load_board($user)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		$clause = " WHERE";
     
    -		$sql = "SELECT f.rowid, f.date_lim_reglement as datefin,f.fk_statut";
    +		$sql = "SELECT f.rowid, f.date_lim_reglement as datefin,f.fk_statut, f.total";
     		$sql.= " FROM ".MAIN_DB_PREFIX."facture as f";
     		if (!$user->rights->societe->client->voir && !$user->societe_id)
     		{
    @@ -3753,6 +3844,7 @@ class Facture extends CommonInvoice
     				$generic_facture->statut = $obj->fk_statut;
     
     				$response->nbtodo++;
    +				$response->total += $obj->total;
     
     				if ($generic_facture->hasDelay()) {
     					$response->nbtodolate++;
    @@ -3952,6 +4044,7 @@ class Facture extends CommonInvoice
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
     	 *
    @@ -3959,6 +4052,7 @@ class Facture extends CommonInvoice
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $conf, $user;
     
     		$this->nb=array();
    @@ -4012,7 +4106,7 @@ class Facture extends CommonInvoice
     	 *  @param  int			$hidedetails    Hide details of lines
     	 *  @param  int			$hidedesc       Hide description
     	 *  @param  int			$hideref        Hide ref
    -	 * @param   null|array  $moreparams     Array to provide more information
    +	 *  @param   null|array  $moreparams     Array to provide more information
     	 *	@return int        					<0 if KO, >0 if OK
     	 */
     	public function generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
    @@ -4021,12 +4115,15 @@ class Facture extends CommonInvoice
     
     		$langs->load("bills");
     
    -		if (! dol_strlen($modele)) {
    -
    +		if (! dol_strlen($modele))
    +		{
     			$modele = 'crabe';
    +			$thisTypeConfName = 'FACTURE_ADDON_PDF_'.$this->type;
     
     			if ($this->modelpdf) {
     				$modele = $this->modelpdf;
    +			} elseif (! empty($conf->global->$thisTypeConfName)) {
    +				$modele = $conf->global->$thisTypeConfName;
     			} elseif (! empty($conf->global->FACTURE_ADDON_PDF)) {
     				$modele = $conf->global->FACTURE_ADDON_PDF;
     			}
    @@ -4065,6 +4162,7 @@ class Facture extends CommonInvoice
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Checks if the invoice is the first of a cycle
     	 *
    @@ -4072,9 +4170,11 @@ class Facture extends CommonInvoice
     	 */
     	function is_first()
     	{
    +        // phpcs:enable
     		return ($this->situation_counter == 1);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Returns an array containing the previous situations as Facture objects
     	 *
    @@ -4082,6 +4182,7 @@ class Facture extends CommonInvoice
     	 */
     	function get_prev_sits()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$sql = 'SELECT rowid FROM ' . MAIN_DB_PREFIX . 'facture';
    @@ -4154,6 +4255,7 @@ class Facture extends CommonInvoice
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Checks if the invoice is the last in its cycle
     	 *
    @@ -4162,6 +4264,7 @@ class Facture extends CommonInvoice
     	 */
     	function is_last_in_cycle()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if (!empty($this->situation_cycle_ref)) {
    @@ -4224,45 +4327,52 @@ class Facture extends CommonInvoice
      */
     class FactureLigne extends CommonInvoiceLine
     {
    -    public $element='facturedet';
    -    public $table_element='facturedet';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='facturedet';
     
    -	var $oldline;
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='facturedet';
    +
    +	public $oldline;
     
     	//! From llx_facturedet
     	//! Id facture
    -	var $fk_facture;
    +	public $fk_facture;
     	//! Id parent line
    -	var $fk_parent_line;
    +	public $fk_parent_line;
     	/**
     	 * @deprecated
     	 */
    -	var $label;
    +	public $label;
     	//! Description ligne
    -	var $desc;
    +	public $desc;
     
    -	var $localtax1_type;	// Local tax 1 type
    -	var $localtax2_type;	// Local tax 2 type
    -	var $fk_remise_except;	// Link to line into llx_remise_except
    -	var $rang = 0;
    +	public $localtax1_type;	// Local tax 1 type
    +	public $localtax2_type;	// Local tax 2 type
    +	public $fk_remise_except;	// Link to line into llx_remise_except
    +	public $rang = 0;
     
    -	var $fk_fournprice;
    -	var $pa_ht;
    -	var $marge_tx;
    -	var $marque_tx;
    +	public $fk_fournprice;
    +	public $pa_ht;
    +	public $marge_tx;
    +	public $marque_tx;
     
    -	var $special_code;	// Liste d'options non cumulabels:
    +	public $special_code;	// Liste d'options non cumulabels:
     	// 1: frais de port
     	// 2: ecotaxe
     	// 3: ??
     
    -	var $origin;
    -	var $origin_id;
    +	public $origin;
    +	public $origin_id;
     
    -	var $fk_code_ventilation = 0;
    +	public $fk_code_ventilation = 0;
     
    -	var $date_start;
    -	var $date_end;
    +	public $date_start;
    +	public $date_end;
     
     	// Ne plus utiliser
     	//var $price;         	// P.U. HT apres remise % de ligne (exemple 80)
    @@ -4273,17 +4383,17 @@ class FactureLigne extends CommonInvoiceLine
     	 * @deprecated
     	 * @see product_ref
     	 */
    -	var $ref;				// Product ref (deprecated)
    -	var $product_ref;       // Product ref
    +	public $ref;				// Product ref (deprecated)
    +	public $product_ref;       // Product ref
     	/**
     	 * @deprecated
     	 * @see product_label
     	 */
    -	var $libelle;      		// Product label (deprecated)
    -	var $product_label;     // Product label
    -	var $product_desc;  	// Description produit
    +	public $libelle;      		// Product label (deprecated)
    +	public $product_label;     // Product label
    +	public $product_desc;  	// Description produit
     
    -	var $skip_update_total; // Skip update price total for special lines
    +	public $skip_update_total; // Skip update price total for special lines
     
     	/**
     	 * @var int Situation advance percentage
    @@ -4296,12 +4406,12 @@ class FactureLigne extends CommonInvoiceLine
     	public $fk_prev_id;
     
     	// Multicurrency
    -	var $fk_multicurrency;
    -	var $multicurrency_code;
    -	var $multicurrency_subprice;
    -	var $multicurrency_total_ht;
    -	var $multicurrency_total_tva;
    -	var $multicurrency_total_ttc;
    +	public $fk_multicurrency;
    +	public $multicurrency_code;
    +	public $multicurrency_subprice;
    +	public $multicurrency_total_ht;
    +	public $multicurrency_total_tva;
    +	public $multicurrency_total_ttc;
     
     	/**
     	 *	Load invoice line from database
    @@ -4333,6 +4443,7 @@ class FactureLigne extends CommonInvoiceLine
     			$objp = $this->db->fetch_object($result);
     
     			$this->rowid				= $objp->rowid;
    +			$this->id					= $objp->rowid;
     			$this->fk_facture			= $objp->fk_facture;
     			$this->fk_parent_line		= $objp->fk_parent_line;
     			$this->label				= $objp->custom_label;
    @@ -4601,7 +4712,6 @@ class FactureLigne extends CommonInvoiceLine
     
     			$this->db->commit();
     			return $this->id;
    -
     		}
     		else
     		{
    @@ -4783,6 +4893,7 @@ class FactureLigne extends CommonInvoiceLine
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *	Update DB line fields total_xxx
     	 *	Used by migration
    @@ -4791,6 +4902,7 @@ class FactureLigne extends CommonInvoiceLine
     	 */
     	function update_total()
     	{
    +        // phpcs:enable
     		$this->db->begin();
     		dol_syslog(get_class($this)."::update_total", LOG_DEBUG);
     
    @@ -4823,6 +4935,7 @@ class FactureLigne extends CommonInvoiceLine
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Returns situation_percent of the previous line.
     	 * Warning: If invoice is a replacement invoice, this->fk_prev_id is id of the replaced line.
    @@ -4833,6 +4946,7 @@ class FactureLigne extends CommonInvoiceLine
     	 */
     	function get_prev_progress($invoiceid, $include_credit_note=true)
     	{
    +        // phpcs:enable
     		if (is_null($this->fk_prev_id) || empty($this->fk_prev_id) || $this->fk_prev_id == "") {
     			return 0;
     		} else {
    diff --git a/htdocs/compta/facture/class/facturestats.class.php b/htdocs/compta/facture/class/facturestats.class.php
    index 434fab6f373..7a9a9621a78 100644
    --- a/htdocs/compta/facture/class/facturestats.class.php
    +++ b/htdocs/compta/facture/class/facturestats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -35,7 +35,11 @@ class FactureStats extends Stats
         var $socid;
         var $userid;
     
    -    public $table_element;
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element;
    +	
         var $from;
         var $field;
         var $where;
    @@ -220,7 +224,5 @@ class FactureStats extends Stats
     
     		return $this->_getAllByProduct($sql);
     	}
    -
    -
     }
     
    diff --git a/htdocs/compta/facture/class/paymentterm.class.php b/htdocs/compta/facture/class/paymentterm.class.php
    index 3697a61672b..a3168db40d2 100644
    --- a/htdocs/compta/facture/class/paymentterm.class.php
    +++ b/htdocs/compta/facture/class/paymentterm.class.php
    @@ -28,23 +28,38 @@
      */
     class PaymentTerm // extends CommonObject
     {
    -	var $db;							//!< To store db handler
    -	var $error;							//!< To return error code (or message)
    -	var $errors=array();				//!< To return several error codes (or messages)
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
     	//public  $element='c_payment_term';			//!< Id that identify managed objects
     	//public  $table_element='c_payment_term';	//!< Name of table without prefix where object is stored
    -	var $context =array();
    +	public $context =array();
     
    -    var $id;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $code;
    -	var $sortorder;
    -	var $active;
    -	var $libelle;
    -	var $libelle_facture;
    -	var $type_cdr;
    -	var $nbjour;
    -	var $decalage;
    +	public $code;
    +	public $sortorder;
    +	public $active;
    +	public $libelle;
    +	public $libelle_facture;
    +	public $type_cdr;
    +	public $nbjour;
    +	public $decalage;
     
     
     
    @@ -120,18 +135,17 @@ class PaymentTerm // extends CommonObject
             {
                 $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."c_payment_term");
     
    -			if (! $notrigger)
    -			{
    -	            // Uncomment this and change MYOBJECT to your own tag if you
    -	            // want this action call a trigger.
    +	        // Uncomment this and change MYOBJECT to your own tag if you
    +	        // want this action call a trigger.
    +			//if (! $notrigger) {
     
    -	            //// Call triggers
    -	            //include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -	            //$interface=new Interfaces($this->db);
    -	            //$result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf);
    -	            //if ($result < 0) { $error++; $this->errors=$interface->errors; }
    -	            //// End call triggers
    -			}
    +	        //    // Call triggers
    +	        //    include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    +	        //    $interface=new Interfaces($this->db);
    +	        //    $result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf);
    +	        //    if ($result < 0) { $error++; $this->errors=$interface->errors; }
    +	        //    // End call triggers
    +			//}
             }
     
             // Commit or rollback
    @@ -197,8 +211,6 @@ class PaymentTerm // extends CommonObject
     				$this->type_cdr = $obj->type_cdr;
     				$this->nbjour = $obj->nbjour;
     				$this->decalage = $obj->decalage;
    -
    -
                 }
                 $this->db->free($resql);
     
    @@ -296,21 +308,16 @@ class PaymentTerm // extends CommonObject
     		$resql = $this->db->query($sql);
     		if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
     
    -		if (! $error)
    -		{
    -			if (! $notrigger)
    -			{
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action call a trigger.
    -
    +		// Uncomment this and change MYOBJECT to your own tag if you
    +		// want this action call a trigger.
    +		//if (! $error && ! $notrigger) {
     				// Call triggers
     				//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
     				//$interface=new Interfaces($this->db);
     				//$result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf);
     				//if ($result < 0) { $error++; $this->errors=$interface->errors; }
     				// End call triggers
    -			}
    -		}
    +		//}
     
     		// Commit or rollback
     		if ($error)
    @@ -352,21 +359,16 @@ class PaymentTerm // extends CommonObject
     		$resql = $this->db->query($sql);
         	if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
     
    -		if (! $error)
    -		{
    -			if (! $notrigger)
    -			{
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -		        // want this action call a trigger.
    -
    +		// Uncomment this and change MYOBJECT to your own tag if you
    +		// want this action call a trigger.
    +		//if (! $error && ! $notrigger) {
     		        //// Call triggers
     		        //include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
     		        //$interface=new Interfaces($this->db);
     		        //$result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf);
     		        //if ($result < 0) { $error++; $this->errors=$interface->errors; }
     		        //// End call triggers
    -			}
    -		}
    +		//}
     
             // Commit or rollback
     		if ($error)
    @@ -424,12 +426,9 @@ class PaymentTerm // extends CommonObject
     			$error++;
     		}
     
    -		if (! $error)
    -		{
    -
    -
    -
    -		}
    +		//if (! $error)
    +		//{
    +		//}
     
     		unset($this->context['createfromclone']);
     
    @@ -467,5 +466,4 @@ class PaymentTerm // extends CommonObject
     		$this->nbjour='';
     		$this->decalage='';
     	}
    -
     }
    diff --git a/htdocs/compta/facture/contact.php b/htdocs/compta/facture/contact.php
    index af872a174ca..baf466cc60c 100644
    --- a/htdocs/compta/facture/contact.php
    +++ b/htdocs/compta/facture/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Patrick Rouillon     <patrick@rouillon.net>
      * Copyright (C) 2005-2009 Destailleur Laurent  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2015 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -206,7 +206,6 @@ if ($id > 0 || ! empty($ref))
     		    $res=@include dol_buildpath($reldir.'/contacts.tpl.php');
     		    if ($res) break;
     		}
    -
     	}
     	else
     	{
    @@ -215,6 +214,6 @@ if ($id > 0 || ! empty($ref))
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/facture/document.php b/htdocs/compta/facture/document.php
    index 828c77f1178..4693587de07 100644
    --- a/htdocs/compta/facture/document.php
    +++ b/htdocs/compta/facture/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2011 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      * Copyright (C) 2017      Frédéric France       <frederic.france@netlogic.fr>
    @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     if (! empty($conf->projet->enabled)) {
    -	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    +	include_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
     // Load translation files required by the page
    @@ -78,7 +78,7 @@ if ($object->fetch($id))
      * Actions
      */
     
    -include_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php';
     
     
     /*
    @@ -104,7 +104,7 @@ if ($id > 0 || ! empty($ref))
     
         	$totalpaye = $object->getSommePaiement();
     
    -		// Construit liste des fichiers
    +		// Build file list
     		$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     		$totalsize=0;
     		foreach($filearray as $key => $file)
    @@ -191,6 +191,6 @@ else
     	print $langs->trans("ErrorUnknown");
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/fiche-rec.php b/htdocs/compta/facture/fiche-rec.php
    index fb70da42665..856433173ad 100644
    --- a/htdocs/compta/facture/fiche-rec.php
    +++ b/htdocs/compta/facture/fiche-rec.php
    @@ -1,14 +1,14 @@
     <?php
    -/* Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2013      Florian Henry	    <florian.henry@open-concept.pro>
    - * Copyright (C) 2013      Juanjo Menent	    <jmenent@2byte.es>
    - * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
    - * Copyright (C) 2012      Cedric Salvador      <csalvador@gpcsolutions.fr>
    - * Copyright (C) 2015      Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
    - * Copyright (C) 2016      Meziane Sof		<virtualsof@yahoo.fr>
    - * Copyright (C) 2017       Frédéric France         <frederic.france@netlogic.fr>
    +/* Copyright (C) 2002-2003  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2013       Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2013       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2015       Jean-François Ferry     <jfefe@aternatik.fr>
    + * Copyright (C) 2012       Cedric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2015       Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2016       Meziane Sof             <virtualsof@yahoo.fr>
    + * Copyright (C) 2017-2018  Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -35,8 +35,8 @@ require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture-rec.class.php';
     require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
     if (! empty($conf->projet->enabled)) {
    -	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    -	//require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
    +	include_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    +	//include_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
     }
     require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
     require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
    @@ -94,7 +94,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('facture_rec');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     $permissionnote = $user->rights->facture->creer; // Used by the include of actions_setnotes.inc.php
     $permissiondellink=$user->rights->facture->creer;	// Used by the include of actions_dellink.inc.php
    @@ -263,7 +263,6 @@ if (empty($reshook))
     	if ($action == 'setconditions' && $user->rights->facture->creer)
     	{
     		$result=$object->setPaymentTerms(GETPOST('cond_reglement_id', 'int'));
    -
     	}
     	// Set mode
     	elseif ($action == 'setmode' && $user->rights->facture->creer)
    @@ -546,7 +545,7 @@ if (empty($reshook))
     			}
     			elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
     			{
    -				require_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php';
    +				include_once DOL_DOCUMENT_ROOT . '/product/class/productcustomerprice.class.php';
     
     				$prodcustprice = new Productcustomerprice($db);
     
    @@ -629,12 +628,10 @@ if (empty($reshook))
     					$tmptxt .= $langs->transnoentitiesnoconv("CountryOrigin") . ': ' . getCountry($prod->country_code, 0, $db, $langs, 0);
     				$tmptxt .= ')';
     				$desc = dol_concatdesc($desc, $tmptxt);
    -
     			}
     
     			$type = $prod->type;
     			$fk_unit = $prod->fk_unit;
    -
     		}
     		else
     		{
    @@ -664,7 +661,7 @@ if (empty($reshook))
     		if ($tva_npr)
     			$info_bits |= 0x01;
     
    -		if (! empty($price_min) && (price2num($pu_ht) * (1 - price2num($remise_percent) / 100) < price2num($price_min)))
    +		if (((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS) )&& (! empty($price_min) && (price2num($pu_ht) * (1 - price2num($remise_percent) / 100) < price2num($price_min))))
     		{
     			$mesg = $langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency));
     			setEventMessages($mesg, null, 'errors');
    @@ -744,7 +741,7 @@ if (empty($reshook))
     		}
     	}
     
    -	elseif ($action == 'updateligne' && $user->rights->facture->creer && ! GETPOST('cancel','alpha'))
    +	elseif ($action == 'updateline' && $user->rights->facture->creer && ! GETPOST('cancel','alpha'))
     	{
     		if (! $object->fetch($id) > 0)	dol_print_error($db);
     		$object->fetch_thirdparty();
    @@ -831,7 +828,7 @@ if (empty($reshook))
     			$label = ((GETPOST('update_label') && GETPOST('product_label')) ? GETPOST('product_label') : '');
     
     			// Check price is not lower than minimum (check is done only for standard or replacement invoices)
    -			if (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT) && $price_min && (price2num($pu_ht) * (1 - price2num(GETPOST('remise_percent')) / 100) < price2num($price_min)))
    +			if (((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS) )&& (($object->type == Facture::TYPE_STANDARD || $object->type == Facture::TYPE_REPLACEMENT) && $price_min && (price2num($pu_ht) * (1 - price2num(GETPOST('remise_percent')) / 100) < price2num($price_min))))
     			{
     				setEventMessages($langs->trans("CantBeLessThanMinPrice", price(price2num($price_min, 'MU'), 0, $langs, 0, 0, - 1, $conf->currency)), null, 'errors');
     				$error ++;
    @@ -1113,7 +1110,7 @@ if ($action == 'create')
     		// Date next run
     		print "<tr><td>".$langs->trans('NextDateToExecution')."</td><td>";
     		$date_next_execution = isset($date_next_execution) ? $date_next_execution : (GETPOST('remonth') ? dol_mktime(12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')) : -1);
    -		print $form->select_date($date_next_execution, '', 1, 1, '', "add", 1, 1, 1);
    +		print $form->selectDate($date_next_execution, '', 1, 1, '', "add", 1, 1);
     		print "</td></tr>";
     
     		// Number max of generation
    @@ -1626,7 +1623,7 @@ else
     		// Lines
     		print '	<form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#add' : '#line_' . GETPOST('lineid')) . '" method="POST">
             	<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">
    -        	<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateligne') . '">
    +        	<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline') . '">
             	<input type="hidden" name="mode" value="">
             	<input type="hidden" name="id" value="' . $object->id . '">
             	';
    @@ -1730,10 +1727,9 @@ else
     
     
     		print '</div></div>';
    -
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/info.php b/htdocs/compta/facture/info.php
    index 8964b85203b..aff7cb362a8 100644
    --- a/htdocs/compta/facture/info.php
    +++ b/htdocs/compta/facture/info.php
    @@ -29,7 +29,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php';
     if (! empty($conf->projet->enabled)) {
    -	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    +	include_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
     // Load translation files required by the page
    @@ -122,5 +122,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/facture/invoicetemplate_list.php b/htdocs/compta/facture/invoicetemplate_list.php
    index b7b985dd73c..c0a80c86b74 100644
    --- a/htdocs/compta/facture/invoicetemplate_list.php
    +++ b/htdocs/compta/facture/invoicetemplate_list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Florian Henry	    <florian.henry@open-concept.pro>
      * Copyright (C) 2013      Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
    @@ -108,7 +108,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('facture_rec');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     $permissionnote = $user->rights->facture->creer; // Used by the include of actions_setnotes.inc.php
     $permissiondellink=$user->rights->facture->creer;	// Used by the include of actions_dellink.inc.php
    @@ -190,7 +190,6 @@ if (empty($reshook))
         $permtodelete = $user->rights->mymodule->delete;
         $uploaddir = $conf->mymodule->dir_output;
         include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';*/
    -
     }
     
     
    @@ -709,6 +708,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php
    index 8e4ddc2a3eb..83925a38b08 100644
    --- a/htdocs/compta/facture/list.php
    +++ b/htdocs/compta/facture/list.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004      Eric Seigne           <eric.seigne@ryxeo.com>
      * Copyright (C) 2004-2016 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2015 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani      <acianfa@free.fr>
      * Copyright (C) 2010-2012 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2012      Christophe Battarel   <christophe.battarel@altairis.fr>
    @@ -134,7 +134,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('facture');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -148,29 +148,29 @@ if (empty($user->socid)) $fieldstosearchall["f.note_private"]="NotePrivate";
     
     $checkedtypetiers=0;
     $arrayfields=array(
    -	'f.facnumber'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
    -	'f.ref_client'=>array('label'=>$langs->trans("RefCustomer"), 'checked'=>1),
    -	'f.type'=>array('label'=>$langs->trans("Type"), 'checked'=>0),
    -	'f.date'=>array('label'=>$langs->trans("DateInvoice"), 'checked'=>1),
    -	'f.date_lim_reglement'=>array('label'=>$langs->trans("DateDue"), 'checked'=>1),
    -	'p.ref'=>array('label'=>$langs->trans("ProjectRef"), 'checked'=>0, 'enabled'=>(empty($conf->projet->enabled)?0:1)),
    -	's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
    -	's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>1),
    -	's.zip'=>array('label'=>$langs->trans("Zip"), 'checked'=>1),
    -	'state.nom'=>array('label'=>$langs->trans("StateShort"), 'checked'=>0),
    -	'country.code_iso'=>array('label'=>$langs->trans("Country"), 'checked'=>0),
    -	'typent.code'=>array('label'=>$langs->trans("ThirdPartyType"), 'checked'=>$checkedtypetiers),
    -	'f.fk_mode_reglement'=>array('label'=>$langs->trans("PaymentMode"), 'checked'=>1),
    -	'f.total_ht'=>array('label'=>$langs->trans("AmountHT"), 'checked'=>1),
    -	'f.total_vat'=>array('label'=>$langs->trans("AmountVAT"), 'checked'=>0),
    +	'f.facnumber'=>array('label'=>"Ref", 'checked'=>1),
    +	'f.ref_client'=>array('label'=>"RefCustomer", 'checked'=>1),
    +	'f.type'=>array('label'=>"Type", 'checked'=>0),
    +	'f.date'=>array('label'=>"DateInvoice", 'checked'=>1),
    +	'f.date_lim_reglement'=>array('label'=>"DateDue", 'checked'=>1),
    +	'p.ref'=>array('label'=>"ProjectRef", 'checked'=>0, 'enabled'=>(empty($conf->projet->enabled)?0:1)),
    +	's.nom'=>array('label'=>"ThirdParty", 'checked'=>1),
    +	's.town'=>array('label'=>"Town", 'checked'=>1),
    +	's.zip'=>array('label'=>"Zip", 'checked'=>1),
    +	'state.nom'=>array('label'=>"StateShort", 'checked'=>0),
    +	'country.code_iso'=>array('label'=>"Country", 'checked'=>0),
    +	'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers),
    +	'f.fk_mode_reglement'=>array('label'=>"PaymentMode", 'checked'=>1),
    +	'f.total_ht'=>array('label'=>"AmountHT", 'checked'=>1),
    +	'f.total_vat'=>array('label'=>"AmountVAT", 'checked'=>0),
     	'f.total_localtax1'=>array('label'=>$langs->transcountry("AmountLT1", $mysoc->country_code), 'checked'=>0, 'enabled'=>($mysoc->localtax1_assuj=="1")),
     	'f.total_localtax2'=>array('label'=>$langs->transcountry("AmountLT2", $mysoc->country_code), 'checked'=>0, 'enabled'=>($mysoc->localtax2_assuj=="1")),
    -	'f.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>0),
    -	'dynamount_payed'=>array('label'=>$langs->trans("Received"), 'checked'=>0),
    -	'rtp'=>array('label'=>$langs->trans("Rest"), 'checked'=>0),
    -	'f.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
    -	'f.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
    -	'f.fk_statut'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>1000),
    +	'f.total_ttc'=>array('label'=>"AmountTTC", 'checked'=>0),
    +	'dynamount_payed'=>array('label'=>"Received", 'checked'=>0),
    +	'rtp'=>array('label'=>"Rest", 'checked'=>0),
    +	'f.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500),
    +	'f.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500),
    +	'f.fk_statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000),
     );
     // Extra fields
     if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
    @@ -230,7 +230,6 @@ if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter','a
     	$toselect='';
     	$search_array_options=array();
     	$search_categ_cus=0;
    -
     }
     
     if (empty($reshook))
    @@ -270,7 +269,6 @@ if ($massaction == 'withdrawrequest')
     				$totalcreditnotes = $objecttmp->getSumCreditNotesUsed();
     				$totaldeposits = $objecttmp->getSumDepositsUsed();
     				$objecttmp->resteapayer = price2num($objecttmp->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits,'MT');
    -				$listofbills[] = $objecttmp;
     				if($objecttmp->paye || $objecttmp->resteapayer==0){
     					$error++;
     					setEventMessages($objecttmp->ref.' '.$langs->trans("AlreadyPaid"), $objecttmp->errors, 'errors');
    @@ -302,18 +300,20 @@ if ($massaction == 'withdrawrequest')
     
     				if ($numprlv>0){
     					$error++;
    -					setEventMessages($objecttmp->ref.' '.$langs->trans("RequestAlreadyDone"), $objecttmp->errors, 'errors');
    +					setEventMessages($objecttmp->ref.' '.$langs->trans("RequestAlreadyDone"), $objecttmp->errors, 'warnings');
     				}
    -				if (!empty($objecttmp->mode_reglement_code ) && $objecttmp->mode_reglement_code != 'PRE'){
    +				else if (!empty($objecttmp->mode_reglement_code ) && $objecttmp->mode_reglement_code != 'PRE'){
     					$error++;
     					setEventMessages($objecttmp->ref.' '.$langs->trans("BadPaymentMethod"), $objecttmp->errors, 'errors');
     				}
    -
    +				else {
    +					$listofbills[] = $objecttmp;    // $listofbills will only contains invoices with good payment method and no request already done
    +				}
     			}
     		}
     
    -		//Massive withdraw request
    -		if(!empty($listofbills) && empty($error))
    +		//Massive withdraw request for request with no errors
    +		if(!empty($listofbills))
     		{
     			$nbwithdrawrequestok=0;
     			foreach($listofbills as $aBill)
    @@ -338,7 +338,6 @@ if ($massaction == 'withdrawrequest')
     			}
     		}
     	}
    -
     }
     
     
    @@ -420,22 +419,14 @@ if ($filtre)
     }
     if ($search_ref) $sql .= natural_search('f.facnumber', $search_ref);
     if ($search_refcustomer) $sql .= natural_search('f.ref_client', $search_refcustomer);
    -if ($search_type != '' && $search_type >= 0)
    -{
    -	if ($search_type == '0') $sql.=" AND f.type = 0";  // standard
    -	if ($search_type == '1') $sql.=" AND f.type = 1";  // replacement
    -	if ($search_type == '2') $sql.=" AND f.type = 2";  // credit note
    -	if ($search_type == '3') $sql.=" AND f.type = 3";  // deposit
    -	if ($search_type == '4') $sql.=" AND f.type = 4";  // proforma
    -	if ($search_type == '5') $sql.=" AND f.type = 5";  // situation
    -}
    +if ($search_type != '' && $search_type != '-1') $sql.=" AND f.type IN (".$db->escape($search_type).")";
     if ($search_project) $sql .= natural_search('p.ref', $search_project);
     if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
     if ($search_town)  $sql.= natural_search('s.town', $search_town);
     if ($search_zip)   $sql.= natural_search("s.zip",$search_zip);
     if ($search_state) $sql.= natural_search("state.nom",$search_state);
    -if ($search_country) $sql .= " AND s.fk_pays IN (".$search_country.')';
    -if ($search_type_thirdparty) $sql .= " AND s.fk_typent IN (".$search_type_thirdparty.')';
    +if ($search_country) $sql .= " AND s.fk_pays IN (".$db->escape($search_country).')';
    +if ($search_type_thirdparty) $sql .= " AND s.fk_typent IN (".$db->escape($search_type_thirdparty).')';
     if ($search_company) $sql .= natural_search('s.nom', $search_company);
     if ($search_montant_ht != '') $sql.= natural_search('f.total', $search_montant_ht, 1);
     if ($search_montant_vat != '') $sql.= natural_search('f.tva', $search_montant_vat, 1);
    @@ -910,7 +901,7 @@ if ($resql)
     
     	$projectstatic=new Project($db);
     	$discount = new DiscountAbsolute($db);
    -	
    +
     	if ($num > 0)
     	{
     		$i=0;
    @@ -920,9 +911,13 @@ if ($resql)
     			$obj = $db->fetch_object($resql);
     
     			$datelimit=$db->jdate($obj->datelimite);
    +
     			$facturestatic->id=$obj->id;
     			$facturestatic->ref=$obj->ref;
     			$facturestatic->type=$obj->type;
    +            $facturestatic->total_ht=$obj->total_ht;
    +            $facturestatic->total_tva=$obj->total_vat;
    +            $facturestatic->total_ttc=$obj->total_ttc;
     			$facturestatic->statut=$obj->fk_statut;
     			$facturestatic->total_ttc=$obj->total_ttc;
                 $facturestatic->paye=$obj->paye;
    @@ -960,12 +955,10 @@ if ($resql)
     
     				print '<table class="nobordernopadding"><tr class="nocellnopadd">';
     
    -				print '<td class="nobordernopadding nowrap">';
    +				print '<td class="nobordernopadding nowraponall">';
     				print $facturestatic->getNomUrl(1,'',200,0,'',0,1);
     				print empty($obj->increment)?'':' ('.$obj->increment.')';
    -				print '</td>';
     
    -				print '<td style="min-width: 20px" class="nobordernopadding nowrap">';
     				$filename=dol_sanitizeFileName($obj->ref);
     				$filedir=$conf->facture->dir_output . '/' . dol_sanitizeFileName($obj->ref);
     				$urlsource=$_SERVER['PHP_SELF'].'?id='.$obj->id;
    @@ -1075,11 +1068,20 @@ if ($resql)
     			if (! empty($arrayfields['typent.code']['checked']))
     			{
     				print '<td align="center">';
    -				if (count($typenArray)==0) $typenArray = $formcompany->typent_array(1);
    +				if (! is_array($typenArray) || count($typenArray)==0) $typenArray = $formcompany->typent_array(1);
     				print $typenArray[$obj->typent_code];
     				print '</td>';
     				if (! $i) $totalarray['nbfield']++;
     			}
    +			// Staff
    +			if (! empty($arrayfields['staff.code']['checked']))
    +			{
    +				print '<td align="center">';
    +				if (! is_array($staffArray) || count($staffArray)==0) $staffArray = $formcompany->effectif_array(1);
    +				print $staffArray[$obj->staff_code];
    +				print '</td>';
    +				if (! $i) $totalarray['nbfield']++;
    +			}
     
     			// Payment mode
     			if (! empty($arrayfields['f.fk_mode_reglement']['checked']))
    @@ -1224,7 +1226,6 @@ if ($resql)
     			   else print '<td></td>';
     			}
     			print '</tr>';
    -
     		}
     	}
     
    @@ -1257,5 +1258,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/facture/note.php b/htdocs/compta/facture/note.php
    index 58fc26030b7..507bb8f458d 100644
    --- a/htdocs/compta/facture/note.php
    +++ b/htdocs/compta/facture/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Florian Henry		<florian.henry@open-concept.pro>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -142,7 +142,6 @@ if ($id > 0 || ! empty($ref))
     	dol_fiche_end();
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/prelevement.php b/htdocs/compta/facture/prelevement.php
    index ecde973bd3b..6d5d52ce503 100644
    --- a/htdocs/compta/facture/prelevement.php
    +++ b/htdocs/compta/facture/prelevement.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2002-2005	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004       Eric Seigne				<eric.seigne@ryxeo.com>
      * Copyright (C) 2004-2016  Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2014  Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2017       Ferran Marcet			<fmarcet@2byte.es>
      *
    @@ -696,6 +696,6 @@ if ($object->id > 0)
     	print '</div>';
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/facture/stats/index.php b/htdocs/compta/facture/stats/index.php
    index 0416e04f7b0..cbf147a8dff 100644
    --- a/htdocs/compta/facture/stats/index.php
    +++ b/htdocs/compta/facture/stats/index.php
    @@ -280,6 +280,7 @@ print '<div class="fichecenter"><div class="fichethirdleft">';
     	print '<br><br>';
     //}
     
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -323,7 +324,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    -
    +print '</div>';
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
     
    @@ -347,7 +348,6 @@ print '<div style="clear:both"></div>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php
    index 1a55771b963..2ed8b081ceb 100644
    --- a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2013		Juanjo Menent <jmenent@2byte.es>
      * Copyright (C) 2014       Marcos García <marcosgdf@gmail.com>
      *
    diff --git a/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php
    index 5f224bc2026..4333aa65a5a 100644
    --- a/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php
    +++ b/htdocs/compta/facture/tpl/linkedobjectblockForRec.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2013		Juanjo Menent <jmenent@2byte.es>
      * Copyright (C) 2014       Marcos García <marcosgdf@gmail.com>
      *
    diff --git a/htdocs/compta/index.php b/htdocs/compta/index.php
    index ea43c270b5f..ac6479afc0b 100644
    --- a/htdocs/compta/index.php
    +++ b/htdocs/compta/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015-2016 Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      * Copyright (C) 2015      Raphaël Doursenaud   <rdoursenaud@gpcsolutions.fr>
    @@ -162,7 +162,6 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire)
     
     	if ( $resql )
     	{
    -		$var = false;
     		$num = $db->num_rows($resql);
     
     		print '<table class="noborder" width="100%">';
    @@ -205,7 +204,6 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire)
     				print '</tr>';
     				$tot_ttc+=$obj->total_ttc;
     				$i++;
    -
     			}
     
     			print '<tr class="liste_total"><td align="left">'.$langs->trans("Total").'</td>';
    @@ -350,7 +348,6 @@ if (! empty($conf->facture->enabled) && $user->rights->facture->lire)
     	$resql = $db->query($sql);
     	if ($resql)
     	{
    -		$var=false;
     		$num = $db->num_rows($resql);
     		$i = 0;
     
    @@ -473,7 +470,6 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture-
     	$resql=$db->query($sql);
     	if ($resql)
     	{
    -		$var=false;
     		$num = $db->num_rows($resql);
     
     		print '<table class="noborder" width="100%">';
    @@ -520,7 +516,6 @@ if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->facture-
     				$total_ttc +=  $obj->total_ttc;
     				$totalam +=  $obj->am;
     				$i++;
    -				$var = !$var;
     			}
     		}
     		else
    @@ -600,7 +595,6 @@ if (! empty($conf->don->enabled) && $user->rights->societe->lire)
     
     				$i++;
     			}
    -
     		}
     		else
     		{
    @@ -642,7 +636,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire)
     
     			print '<table class="noborder" width="100%">';
     			print '<tr class="liste_titre">';
    -			print '<th>'.$langs->trans("ContributionsToPay").($num?' <a href="'.DOL_URL_ROOT.'/compta/sociales/index.php?status=0"><span class="badge">'.$num.'</span></a>':'').'</th>';
    +			print '<th>'.$langs->trans("ContributionsToPay").($num?' <a href="'.DOL_URL_ROOT.'/compta/sociales/list.php?status=0"><span class="badge">'.$num.'</span></a>':'').'</th>';
     			print '<th align="center">'.$langs->trans("DateDue").'</th>';
     			print '<th align="right">'.$langs->trans("AmountTTC").'</th>';
     			print '<th align="right">'.$langs->trans("Paid").'</th>';
    @@ -793,7 +787,6 @@ if (! empty($conf->facture->enabled) && ! empty($conf->commande->enabled) && $us
     				//print "x".$tot_ttc."z".$obj->tot_fttc;
     				$tot_tobill += ($obj->total_ttc-$obj->tot_fttc);
     				$i++;
    -
     			}
     
     			print '<tr class="liste_total"><td colspan="2">'.$langs->trans("Total").' &nbsp; <font style="font-weight: normal">('.$langs->trans("RemainderToBill").': '.price($tot_tobill).')</font> </td>';
    @@ -1069,7 +1062,7 @@ if ($resql)
     		$obj = $db->fetch_object($resql);
     
     
    -		print "<tr ".$bc[$var]."><td>".dol_print_date($db->jdate($obj->da),"day")."</td>";
    +		print '<tr class="oddeven"><td>'.dol_print_date($db->jdate($obj->da),"day").'</td>';
     		print '<td><a href="action/card.php">'.$obj->libelle.' '.$obj->label.'</a></td></tr>';
     		$i++;
     	}
    @@ -1080,7 +1073,6 @@ if ($resql)
     
     print '</div></div></div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/journal/purchasesjournal.php b/htdocs/compta/journal/purchasesjournal.php
    index 2bc754ccf11..8974c1b78e0 100644
    --- a/htdocs/compta/journal/purchasesjournal.php
    +++ b/htdocs/compta/journal/purchasesjournal.php
    @@ -1,10 +1,11 @@
     <?php
    -/* Copyright (C) 2007-2010	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2010	Jean Heimburger		<jean@tiaris.info>
    - * Copyright (C) 2011-2014	Juanjo Menent		<jmenent@2byte.es>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    - * Copyright (C) 2011-2012	Alexandre spangaro	<aspangaro.dolibarr@gmail.com>
    - * Copyright (C) 2013		Marcos García		<marcosgdf@gmail.com>
    +/* Copyright (C) 2007-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2007-2010  Jean Heimburger         <jean@tiaris.info>
    + * Copyright (C) 2011-2014  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2012       Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2011-2012  Alexandre spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2013       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -80,7 +81,8 @@ $date_end=dol_mktime(23, 59, 59, $date_endmonth, $date_endday, $date_endyear);
     
     if (empty($date_start) || empty($date_end)) // We define date_start and date_end
     {
    -	$date_start=dol_get_first_day($pastmonthyear,$pastmonth,false); $date_end=dol_get_last_day($pastmonthyear,$pastmonth,false);
    +    $date_start=dol_get_first_day($pastmonthyear,$pastmonth,false);
    +    $date_end=dol_get_last_day($pastmonthyear,$pastmonth,false);
     }
     
     $name=$langs->trans("PurchasesJournal");
    @@ -90,7 +92,7 @@ $builddate=dol_now();
     $description=$langs->trans("DescPurchasesJournal").'<br>';
     if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.= $langs->trans("DepositsAreNotIncluded");
     else  $description.= $langs->trans("DepositsAreIncluded");
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     
     report_header($name,'',$period,$periodlink,$description,$builddate,$exportlink);
     
    @@ -251,8 +253,6 @@ foreach ($tabfac as $key => $val)
     
     print "</table>";
     
    -
     // End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/journal/sellsjournal.php b/htdocs/compta/journal/sellsjournal.php
    index 24b36cf76c0..f88f5643c40 100644
    --- a/htdocs/compta/journal/sellsjournal.php
    +++ b/htdocs/compta/journal/sellsjournal.php
    @@ -1,12 +1,13 @@
     <?php
    -/* Copyright (C) 2007-2010	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2010	Jean Heimburger		<jean@tiaris.info>
    - * Copyright (C) 2011-2014	Juanjo Menent		<jmenent@2byte.es>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    - * Copyright (C) 2011-2012  Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
    - * Copyright (C) 2012       Cédric Salvador     <csalvador@gpcsolutions.fr>
    - * Copyright (C) 2013		Marcos García		<marcosgdf@gmail.com>
    - * Copyright (C) 2014       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    +/* Copyright (C) 2007-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2007-2010  Jean Heimburger         <jean@tiaris.info>
    + * Copyright (C) 2011-2014  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2012       Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2011-2012  Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2012       Cédric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2013       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2014       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -93,7 +94,7 @@ $builddate=dol_now();
     $description=$langs->trans("DescSellsJournal").'<br>';
     if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.= $langs->trans("DepositsAreNotIncluded");
     else  $description.= $langs->trans("DepositsAreIncluded");
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     report_header($name,'',$period,$periodlink,$description,$builddate,$exportlink);
     
     $p = explode(":", $conf->global->MAIN_INFO_SOCIETE_COUNTRY);
    @@ -282,7 +283,6 @@ foreach ($tabfac as $key => $val)
     
     print "</table>";
     
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/localtax/card.php b/htdocs/compta/localtax/card.php
    index e8a84fcc9e1..222423b7c67 100644
    --- a/htdocs/compta/localtax/card.php
    +++ b/htdocs/compta/localtax/card.php
    @@ -1,6 +1,7 @@
     <?php
    -/* Copyright (C) 2011-2014      Juanjo Menent <jmenent@2byte.es>
    - * Copyright (C) 2015			Marcos García <marcosgdf@gmail.com>
    +/* Copyright (C) 2011-2014  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2015       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -172,11 +173,11 @@ if ($action == 'create')
     
         print "<tr>";
         print '<td class="titlefieldcreate fieldrequired">'.$langs->trans("DatePayment").'</td><td>';
    -    print $form->select_date($datep,"datep",'','','','add',1,1);
    +    print $form->selectDate($datep, "datep", '', '', '', 'add', 1, 1);
         print '</td></tr>';
     
         print '<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans("PeriodEndDate"), $langs->trans("LastDayTaxIsRelatedTo")).'</td><td>';
    -    print $form->select_date($datev,"datev",'','','','add',1,1);
    +    print $form->selectDate($datev, "datev", '', '', '', 'add', 1, 1);
         print '</td></tr>';
     
     	// Label
    @@ -299,6 +300,6 @@ if ($id)
     	print "</div>";
     }
     
    +// End of page
     llxFooter();
     $db->close();
    -
    diff --git a/htdocs/compta/localtax/class/localtax.class.php b/htdocs/compta/localtax/class/localtax.class.php
    index a75de537724..49c95c26c2e 100644
    --- a/htdocs/compta/localtax/class/localtax.class.php
    +++ b/htdocs/compta/localtax/class/localtax.class.php
    @@ -29,19 +29,46 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Localtax extends CommonObject
     {
    -	public $element='localtax';			//!< Id that identify managed objects
    -	public $table_element='localtax';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='localtax';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='localtax';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto='payment';
     
    -	var $ltt;
    -	var $tms;
    -	var $datep;
    -	var $datev;
    -	var $amount;
    -	var $label;
    -	var $fk_bank;
    -	var $fk_user_creat;
    -	var $fk_user_modif;
    +	public $ltt;
    +	public $tms;
    +	public $datep;
    +	public $datev;
    +	public $amount;
    +
    +	/**
    +     * @var string local tax
    +     */
    +    public $label;
    +
    +    /**
    +     * @var int ID
    +     */
    +	public $fk_bank;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_modif;
     
         /**
     	 *	Constructor
    @@ -331,6 +358,7 @@ class Localtax extends CommonObject
             return $solde;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Total de la localtax des factures emises par la societe.
          *
    @@ -339,6 +367,7 @@ class Localtax extends CommonObject
          */
         function localtax_sum_collectee($year = 0)
         {
    +        // phpcs:enable
             $sql = "SELECT sum(f.localtax) as amount";
             $sql .= " FROM ".MAIN_DB_PREFIX."facture as f WHERE f.paye = 1";
             if ($year)
    @@ -369,6 +398,7 @@ class Localtax extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	localtax payed
          *
    @@ -377,6 +407,7 @@ class Localtax extends CommonObject
          */
         function localtax_sum_payee($year = 0)
         {
    +        // phpcs:enable
     
             $sql = "SELECT sum(f.total_localtax) as total_localtax";
             $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
    @@ -409,6 +440,7 @@ class Localtax extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	localtax payed
          *  Total de la localtax payed
    @@ -418,6 +450,7 @@ class Localtax extends CommonObject
          */
         function localtax_sum_reglee($year = 0)
         {
    +        // phpcs:enable
     
             $sql = "SELECT sum(f.amount) as amount";
             $sql .= " FROM ".MAIN_DB_PREFIX."localtax as f";
    @@ -563,6 +596,7 @@ class Localtax extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Update the link betwen localtax payment and the line into llx_bank
          *
    @@ -571,6 +605,7 @@ class Localtax extends CommonObject
          */
     	function update_fk_bank($id)
     	{
    +        // phpcs:enable
     		$sql = 'UPDATE '.MAIN_DB_PREFIX.'localtax SET fk_bank = '.$id;
     		$sql.= ' WHERE rowid = '.$this->id;
     		$result = $this->db->query($sql);
    @@ -622,18 +657,19 @@ class Localtax extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Renvoi le libelle d'un statut donne
     	 *
     	 * @param   int		$status     Statut
     	 * @param   int		$mode       0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
    -	 * @return	string  		    Libelle du statut
    +	 * @return	string              Libelle du statut
     	 */
    -	function LibStatut($status,$mode=0)
    -	{
    -		global $langs;	// TODO Renvoyer le libelle anglais et faire traduction a affichage
    -
    -		return '';
    -	}
    +    function LibStatut($status, $mode=0)
    +    {
    +        // phpcs:enable
    +        global $langs;  // TODO Renvoyer le libelle anglais et faire traduction a affichage
     
    +        return '';
    +    }
     }
    diff --git a/htdocs/compta/localtax/clients.php b/htdocs/compta/localtax/clients.php
    index 9502ff46d2d..ff89a95414e 100644
    --- a/htdocs/compta/localtax/clients.php
    +++ b/htdocs/compta/localtax/clients.php
    @@ -1,6 +1,7 @@
     <?php
    -/* Copyright (C) 2011-2014	Juanjo Menent 		<jmenent@2byte.es>
    - * Copyright (C) 2014	    Ferran Marcet       <fmarcet@2byte.es>
    +/* Copyright (C) 2011-2014	Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2014	    Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -117,7 +118,7 @@ if ($calc==0 || $calc==1)	// Calculate on invoice for goods and services
     {
         $calcmode=$calc==0?$langs->trans("CalcModeLT".$local):$langs->trans("CalcModeLT".$local."Rec");
         $calcmode.='<br>('.$langs->trans("TaxModuleSetupToModifyRulesLT",DOL_URL_ROOT.'/admin/company.php').')';
    -    $period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +    $period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
         if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) $description.='<br>'.$langs->trans("WarningDepositsNotIncluded");
         $description.=$fsearch;
         $description.='<br>('.$langs->trans("TaxModuleSetupToModifyRulesLT",DOL_URL_ROOT.'/admin/company.php').')';
    @@ -134,7 +135,7 @@ if ($calc==2) 	// Invoice for goods, payment for services
     {
         $calcmode=$langs->trans("CalcModeLT2Debt");
         $calcmode.='<br>('.$langs->trans("TaxModuleSetupToModifyRulesLT",DOL_URL_ROOT.'/admin/company.php').')';
    -    $period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +    $period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
         if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) $description.='<br>'.$langs->trans("WarningDepositsNotIncluded");
         $description.=$fsearch;
         $description.='<br>('.$langs->trans("TaxModuleSetupToModifyRulesLT",DOL_URL_ROOT.'/admin/company.php').')';
    @@ -298,7 +299,6 @@ if($calc ==0 || $calc == 1){
     		print '</tr>';
     
     		print '</table>';
    -
     	}
     	else
     	{
    @@ -321,9 +321,9 @@ if($calc ==0){
     	print '<td class="liste_total" colspan="4">'.$langs->trans("TotalToPay").($q?', '.$langs->trans("Quadri").' '.$q:'').'</td>';
     	print '<td class="liste_total nowrap" align="right"><b>'.price(price2num($diff,'MT'))."</b></td>\n";
     	print "</tr>\n";
    -
     }
     print '</table>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/localtax/index.php b/htdocs/compta/localtax/index.php
    index c62034ee65c..1e2c26c0c62 100644
    --- a/htdocs/compta/localtax/index.php
    +++ b/htdocs/compta/localtax/index.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2011-2014 Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2014      Ferran Marcet        <fmarcet@2byte.es>
    - * Copyright (C) 2018      Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2011-2014  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2014       Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2018       Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -223,7 +224,7 @@ $calcmode.= '('.$langs->trans("TaxModuleSetupToModifyRulesLT",DOL_URL_ROOT.'/adm
     
     //if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) $description.='<br>'.$langs->trans("ThisIsAnEstimatedValue");
     
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     
     $builddate=dol_now();
     
    @@ -587,5 +588,6 @@ pt($db, $sql, $langs->trans("Month"));
     
     print '</div></div>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/localtax/list.php b/htdocs/compta/localtax/list.php
    index 0e32a249f17..37ead35433c 100644
    --- a/htdocs/compta/localtax/list.php
    +++ b/htdocs/compta/localtax/list.php
    @@ -103,5 +103,6 @@ else
         dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php
    index 31729693f37..e49f42bb14f 100644
    --- a/htdocs/compta/localtax/quadri_detail.php
    +++ b/htdocs/compta/localtax/quadri_detail.php
    @@ -4,6 +4,7 @@
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2006-2007 Yannick Warnier      <ywarnier@beeznest.org>
      * Copyright (C) 2014-2016 Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -132,18 +133,22 @@ if ($modetax == 1) $calcmode=$langs->trans('OptionVATDebitOption');
     if ($modetax == 2) $calcmode=$langs->trans('OptionPaymentForProductAndServices');
     $calcmode.='<br>('.$langs->trans("TaxModuleSetupToModifyRules",DOL_URL_ROOT.'/admin/taxes.php').')';
     // Set period
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    -$prevyear=$year_start; $prevquarter=$q;
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
    +$prevyear=$year_start;
    +$prevquarter=$q;
     if ($prevquarter > 1) {
     	$prevquarter--;
     } else {
    -	$prevquarter=4; $prevyear--;
    +    $prevquarter=4;
    +    $prevyear--;
     }
    -$nextyear=$year_start; $nextquarter=$q;
    +$nextyear=$year_start;
    +$nextquarter=$q;
     if ($nextquarter < 4) {
     	$nextquarter++;
     } else {
    -	$nextquarter=1; $nextyear++;
    +    $nextquarter=1;
    +    $nextyear++;
     }
     $description.=$fsearch;
     $builddate=dol_now();
    @@ -209,7 +214,7 @@ if (! is_array($x_coll) || ! is_array($x_paye))
     	$langs->load("errors");
     	if ($x_coll == -1)
     		print '<tr><td colspan="'.$columns.'">'.$langs->trans("ErrorNoAccountancyModuleLoaded").'</td></tr>';
    -	else if ($x_coll == -2)
    +	elseif ($x_coll == -2)
     		print '<tr><td colspan="'.$columns.'">'.$langs->trans("FeatureNotYetAvailable").'</td></tr>';
     	else
     		print '<tr><td colspan="'.$columns.'">'.$langs->trans("Error").'</td></tr>';
    @@ -640,5 +645,6 @@ else
     }
     print '</table>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/paiement.php b/htdocs/compta/paiement.php
    index c2ce95dd827..ef9e7f81f43 100644
    --- a/htdocs/compta/paiement.php
    +++ b/htdocs/compta/paiement.php
    @@ -1,13 +1,14 @@
     <?php
    -/* Copyright (C) 2001-2006 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2017 Laurent Destailleur   <eldy@users.sourceforge.net>
    - * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    - * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
    - * Copyright (C) 2012      Cédric Salvador       <csalvador@gpcsolutions.fr>
    - * Copyright (C) 2014      Raphaël Doursenaud    <rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) 2014      Teddy Andreotti       <125155@supinfo.com>
    - * Copyright (C) 2015      Juanjo Menent		 <jmenent@2byte.es>
    +/* Copyright (C) 2001-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2007       Franky Van Liedekerke   <franky.van.liedekerke@telenet.be>
    + * Copyright (C) 2012       Cédric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2014       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2014       Teddy Andreotti         <125155@supinfo.com>
    + * Copyright (C) 2015       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -467,7 +468,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
             print '<tr><td><span class="fieldrequired">'.$langs->trans('Date').'</span></td><td>';
             $datepayment = dol_mktime(12, 0, 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']);
             $datepayment= ($datepayment == '' ? (empty($conf->global->MAIN_AUTOFILL_DATE)?-1:'') : $datepayment);
    -        $form->select_date($datepayment,'','','',0,"add_paiement",1,1,0,0,'','',$facture->date);
    +        print $form->selectDate($datepayment, '', '', '', 0, "add_paiement", 1, 1, 0, '', '', $facture->date);
             print '</td></tr>';
     
             // Payment mode
    @@ -525,7 +526,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
              */
     
             $sql = 'SELECT f.rowid as facid, f.facnumber, f.total_ttc, f.multicurrency_code, f.multicurrency_total_ttc, f.type,';
    -        $sql.= ' f.datef as df, f.fk_soc as socid';
    +        $sql.= ' f.datef as df, f.fk_soc as socid, f.date_lim_reglement as dlr';
             $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f';
     		$sql.= ' WHERE f.entity IN ('.getEntity('facture', $conf->entity).')';
             $sql.= ' AND (f.fk_soc = '.$facture->socid;
    @@ -577,11 +578,14 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
                     print '<tr class="liste_titre">';
                     print '<td>'.$arraytitle.'</td>';
                     print '<td align="center">'.$langs->trans('Date').'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td>'.$langs->trans('Currency').'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$langs->trans('MulticurrencyAmountTTC').'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$multicurrencyalreadypayedlabel.'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$multicurrencyremaindertopay.'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$langs->trans('MulticurrencyPaymentAmount').'</td>';
    +                print '<td align="center">'.$langs->trans('DateMaxPayment').'</td>';
    +                if (!empty($conf->multicurrency->enabled)) {
    +                	print '<td>'.$langs->trans('Currency').'</td>';
    +                	print '<td align="right">'.$langs->trans('MulticurrencyAmountTTC').'</td>';
    +                	print '<td align="right">'.$multicurrencyalreadypayedlabel.'</td>';
    +                	print '<td align="right">'.$multicurrencyremaindertopay.'</td>';
    +                	print '<td align="right">'.$langs->trans('MulticurrencyPaymentAmount').'</td>';
    +                }
                     print '<td align="right">'.$langs->trans('AmountTTC').'</td>';
                     print '<td align="right">'.$alreadypayedlabel.'</td>';
                     print '<td align="right">'.$remaindertopay.'</td>';
    @@ -610,8 +614,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
                         $remaintopay=price2num($invoice->total_ttc - $paiement - $creditnotes - $deposits,'MT');
     
     					// Multicurrency Price
    -					if (!empty($conf->multicurrency->enabled))
    -					{
    +					if (!empty($conf->multicurrency->enabled)) {
     						$multicurrency_payment = $invoice->getSommePaiement(1);
     						$multicurrency_creditnotes=$invoice->getSumCreditNotesUsed(1);
     						$multicurrency_deposits=$invoice->getSumDepositsUsed(1);
    @@ -629,6 +632,24 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
                         // Date
                         print '<td align="center">'.dol_print_date($db->jdate($objp->df),'day')."</td>\n";
     
    +                    // Date Max Payment
    +                    if ($objp->dlr > 0 )
    +                    {
    +                        print '<td align="center">';
    +                        print dol_print_date($db->jdate($objp->dlr), 'day');
    +
    +                        if ($invoice->hasDelay())
    +                        {
    +                            print img_warning($langs->trans('Late'));
    +                        }
    +
    +                        print '</td>';
    +                    }
    +                    else
    +                    {
    +                        print '<td align="center"><b>--</b></td>';
    +                    }
    +
                         // Currency
                         if (!empty($conf->multicurrency->enabled)) print '<td align="center">'.$objp->multicurrency_code."</td>\n";
     
    @@ -740,11 +761,13 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
                         // Print total
                         print '<tr class="liste_total">';
                         print '<td colspan="2" align="left">'.$langs->trans('TotalTTC').'</td>';
    -					if (!empty($conf->multicurrency->enabled)) print '<td></td>';
    -					if (!empty($conf->multicurrency->enabled)) print '<td></td>';
    -					if (!empty($conf->multicurrency->enabled)) print '<td></td>';
    -					if (!empty($conf->multicurrency->enabled)) print '<td></td>';
    -					if (!empty($conf->multicurrency->enabled)) print '<td align="right" id="multicurrency_result" style="font-weight: bold;"></td>';
    +                    if (!empty($conf->multicurrency->enabled)) {
    +                    	print '<td></td>';
    +                    	print '<td></td>';
    +                    	print '<td></td>';
    +                    	print '<td></td>';
    +                    	print '<td align="right" id="multicurrency_result" style="font-weight: bold;"></td>';
    +                    }
     					print '<td align="right"><b>'.price($sign * $total_ttc).'</b></td>';
                         print '<td align="right"><b>'.price($sign * $totalrecu);
                         if ($totalrecucreditnote) print '+'.price($totalrecucreditnote);
    diff --git a/htdocs/compta/paiement/card.php b/htdocs/compta/paiement/card.php
    index 656d6c673f2..1898a270222 100644
    --- a/htdocs/compta/paiement/card.php
    +++ b/htdocs/compta/paiement/card.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2013	   Marcos García		 <marcosgdf@gmail.com>
      * Copyright (C) 2015	   Juanjo Menent		 <jmenent@2byte.es>
      *
    @@ -197,7 +197,6 @@ dol_fiche_head($head, 'payment', $langs->trans("PaymentCustomerInvoice"), -1, 'p
     if ($action == 'delete')
     {
     	print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans("DeletePayment"), $langs->trans("ConfirmDeletePayment"), 'confirm_delete','',0,2);
    -
     }
     
     /*
    @@ -207,7 +206,6 @@ if ($action == 'valide')
     {
     	$facid = $_GET['facid'];
     	print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;facid='.$facid, $langs->trans("ValidatePayment"), $langs->trans("ConfirmValidatePayment"), 'confirm_valide','',0,2);
    -
     }
     
     $linkback = '<a href="' . DOL_URL_ROOT . '/compta/paiement/list.php">' . $langs->trans("BackToList") . '</a>';
    @@ -233,9 +231,10 @@ $disable_delete = 0;
     // Bank account
     if (! empty($conf->banque->enabled))
     {
    +	$bankline=new AccountLine($db);
    +
     	if ($object->fk_account > 0)
     	{
    -		$bankline=new AccountLine($db);
     		$bankline->fetch($object->bank_line);
     		if ($bankline->rappro)
     		{
    @@ -450,6 +449,6 @@ if ($user->societe_id == 0 && $action == '')
     
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/paiement/cheque/card.php b/htdocs/compta/paiement/cheque/card.php
    index 69f3bd102df..9a21ff3dee8 100644
    --- a/htdocs/compta/paiement/cheque/card.php
    +++ b/htdocs/compta/paiement/cheque/card.php
    @@ -1,10 +1,11 @@
     <?php
     /* Copyright (C) 2006		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2007-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2016	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2013 		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2015-2016	Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -273,7 +274,7 @@ else if ($action == 'remove_file' && $user->rights->banque->cheque)
     {
     	if ($object->fetch($id) > 0)
     	{
    -		require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +		include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
     		$langs->load("other");
     
    @@ -339,7 +340,6 @@ else
     	if ($action == 'delete')
     	{
     		print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans("DeleteCheckReceipt"), $langs->trans("ConfirmDeleteCheckReceipt"), 'confirm_delete','','',1);
    -
     	}
     
     	/*
    @@ -348,7 +348,6 @@ else
     	if ($action == 'valide')
     	{
     		print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans("ValidateCheckReceipt"), $langs->trans("ConfirmValidateCheckReceipt"), 'confirm_valide','','',1);
    -
     	}
     
     	/*
    @@ -386,7 +385,7 @@ if ($action == 'new')
     	//print '<tr><td width="30%">'.$langs->trans('Date').'</td><td width="70%">'.dol_print_date($now,'day').'</td></tr>';
     	// Filter
     	print '<tr><td class="titlefieldcreate">'.$langs->trans("DateChequeReceived").'</td><td>';
    -	print $form->select_date($filterdate,'fd',0,0,1,'',1,1,1);
    +	print $form->selectDate($filterdate, 'fd', 0, 0, 1, '', 1, 1);
     	print '</td></tr>';
         print '<tr><td>'.$langs->trans("BankAccount").'</td><td>';
         $form->select_comptes($filteraccountid,'accountid',0,'courant <> 2',1);
    @@ -552,7 +551,6 @@ if ($action == 'new')
     		print '</div><br>';
     		print '</form>';
     	}
    -
     }
     else
     {
    @@ -586,7 +584,7 @@ else
             print '<form name="setdate" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">';
             print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
             print '<input type="hidden" name="action" value="setdate">';
    -        $form->select_date($object->date_bordereau,'datecreate_','','','',"setdate");
    +        print $form->selectDate($object->date_bordereau, 'datecreate_', '', '', '', "setdate");
             print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">';
             print '</form>';
         }
    @@ -786,7 +784,6 @@ if ($user->societe_id == 0 && ! empty($object->id) && $object->statut == 0 && $u
     if ($user->societe_id == 0 && ! empty($object->id) && $user->rights->banque->cheque)
     {
     	print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delete&amp;sortfield='.$sortfield.'&amp;sortorder='.$sortorder.'">'.$langs->trans('Delete').'</a>';
    -
     }
     print '</div>';
     
    @@ -806,8 +803,6 @@ if ($action != 'new')
     	}
     }
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/paiement/cheque/class/remisecheque.class.php b/htdocs/compta/paiement/cheque/class/remisecheque.class.php
    index 528b01477a6..28973d3c4e2 100644
    --- a/htdocs/compta/paiement/cheque/class/remisecheque.class.php
    +++ b/htdocs/compta/paiement/cheque/class/remisecheque.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2007-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2016 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
      *
    @@ -33,14 +33,25 @@ require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
      */
     class RemiseCheque extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='chequereceipt';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='bordereau_cheque';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'payment';
     
    -	var $num;
    -	var $intitule;
    +	public $num;
    +	public $intitule;
     	//! Numero d'erreur Plage 1024-1279
    -	var $errno;
    +	public $errno;
     
     	public $amount;
     	public $date_bordereau;
    @@ -48,6 +59,10 @@ class RemiseCheque extends CommonObject
     	public $account_label;
     	public $author_id;
     	public $nbcheque;
    +
    +	/**
    +	 * @var string Ref
    +	 */
     	public $ref;
     
     	/**
    @@ -106,7 +121,6 @@ class RemiseCheque extends CommonObject
     				{
     					$this->ref         = $obj->ref;
     				}
    -
     			}
     			$this->db->free($resql);
     
    @@ -137,6 +151,8 @@ class RemiseCheque extends CommonObject
     
     		$now=dol_now();
     
    +		dol_syslog("RemiseCheque::Create start", LOG_DEBUG);
    +
     		$this->db->begin();
     
     		$sql = "INSERT INTO ".MAIN_DB_PREFIX."bordereau_cheque (";
    @@ -163,7 +179,6 @@ class RemiseCheque extends CommonObject
     		$sql.= ", ''";
     		$sql.= ")";
     
    -		dol_syslog("RemiseCheque::Create", LOG_DEBUG);
     		$resql = $this->db->query($sql);
     		if ( $resql )
     		{
    @@ -180,7 +195,6 @@ class RemiseCheque extends CommonObject
     				$sql.= " SET ref='(PROV".$this->id.")'";
     				$sql.= " WHERE rowid=".$this->id."";
     
    -				dol_syslog("RemiseCheque::Create", LOG_DEBUG);
     				$resql = $this->db->query($sql);
     				if (! $resql)
     				{
    @@ -227,13 +241,12 @@ class RemiseCheque extends CommonObject
     						if($linetoremise==$lineid) $checkremise=true;
     					}
     
    -					if($checkremise==true)
    +					if ($checkremise)
     					{
     						$sql = "UPDATE ".MAIN_DB_PREFIX."bank";
     						$sql.= " SET fk_bordereau = ".$this->id;
     						$sql.= " WHERE rowid = ".$lineid;
     
    -						dol_syslog("RemiseCheque::Create", LOG_DEBUG);
     						$resql = $this->db->query($sql);
     						if (!$resql)
     						{
    @@ -269,11 +282,13 @@ class RemiseCheque extends CommonObject
             if (! $this->errno)
             {
                 $this->db->commit();
    +            dol_syslog("RemiseCheque::Create end", LOG_DEBUG);
                 return $this->id;
             }
             else
             {
                 $this->db->rollback();
    +            dol_syslog("RemiseCheque::Create end", LOG_DEBUG);
                 return $this->errno;
             }
     	}
    @@ -480,6 +495,7 @@ class RemiseCheque extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
     	 *
    @@ -488,6 +504,7 @@ class RemiseCheque extends CommonObject
     	 */
     	function load_board($user)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		if ($user->societe_id) return -1;   // protection pour eviter appel par utilisateur externe
    @@ -533,6 +550,7 @@ class RemiseCheque extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Charge indicateurs this->nb de tableau de bord
     	 *
    @@ -540,6 +558,7 @@ class RemiseCheque extends CommonObject
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $user;
     
     		if ($user->societe_id) return -1;   // protection pour eviter appel par utilisateur externe
    @@ -593,8 +612,8 @@ class RemiseCheque extends CommonObject
     		$file = "pdf_".$model.".class.php";
     		if (file_exists($dir.$file))
     		{
    -			require_once DOL_DOCUMENT_ROOT .'/compta/bank/class/account.class.php';
    -			require_once $dir.$file;
    +			include_once DOL_DOCUMENT_ROOT .'/compta/bank/class/account.class.php';
    +			include_once $dir.$file;
     
     			$classname='BordereauCheque'.ucfirst($model);
     			$docmodel = new $classname($this->db);
    @@ -847,13 +866,15 @@ class RemiseCheque extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Charge les proprietes ref_previous et ref_next
     	 *
    -	 *	@return     int   <0 if KO, 0 if OK
    +	 *  @return     int   <0 if KO, 0 if OK
     	 */
     	function load_previous_next_id()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$this->errno = 0;
    @@ -888,6 +909,7 @@ class RemiseCheque extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *      Set the creation date
          *
    @@ -897,6 +919,7 @@ class RemiseCheque extends CommonObject
          */
         function set_date($user, $date)
         {
    +        // phpcs:enable
             if ($user->rights->banque->cheque)
             {
                 $sql = "UPDATE ".MAIN_DB_PREFIX."bordereau_cheque";
    @@ -922,6 +945,7 @@ class RemiseCheque extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Set the ref of bordereau
     	 *
    @@ -931,6 +955,7 @@ class RemiseCheque extends CommonObject
     	 */
     	function set_number($user, $ref)
     	{
    +        // phpcs:enable
     		if ($user->rights->banque->cheque)
     		{
     			$sql = "UPDATE ".MAIN_DB_PREFIX."bordereau_cheque";
    @@ -1044,6 +1069,7 @@ class RemiseCheque extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return label of a status
     	 *
    @@ -1053,6 +1079,7 @@ class RemiseCheque extends CommonObject
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;	// TODO Renvoyer le libelle anglais et faire traduction a affichage
     		$langs->load('compta');
     		if ($mode == 0)
    @@ -1060,37 +1087,36 @@ class RemiseCheque extends CommonObject
     			if ($status == 0) return $langs->trans('ToValidate');
     			if ($status == 1) return $langs->trans('Validated');
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($status == 0) return $langs->trans('ToValidate');
     			if ($status == 1) return $langs->trans('Validated');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 0) return img_picto($langs->trans('ToValidate'),'statut0').' '.$langs->trans('ToValidate');
     			if ($status == 1) return img_picto($langs->trans('Validated'),'statut4').' '.$langs->trans('Validated');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 0) return img_picto($langs->trans('ToValidate'),'statut0');
     			if ($status == 1) return img_picto($langs->trans('Validated'),'statut4');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 0) return img_picto($langs->trans('ToValidate'),'statut0').' '.$langs->trans('ToValidate');
     			if ($status == 1) return img_picto($langs->trans('Validated'),'statut4').' '.$langs->trans('Validated');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 0) return $langs->trans('ToValidate').' '.img_picto($langs->trans('ToValidate'),'statut0');
     			if ($status == 1) return $langs->trans('Validated').' '.img_picto($langs->trans('Validated'),'statut4');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($status == 0) return $langs->trans('ToValidate').' '.img_picto($langs->trans('ToValidate'),'statut0');
     			if ($status == 1) return $langs->trans('Validated').' '.img_picto($langs->trans('Validated'),'statut4');
     		}
     		return $langs->trans('Unknown');
     	}
    -
     }
    diff --git a/htdocs/compta/paiement/cheque/index.php b/htdocs/compta/paiement/cheque/index.php
    index 826a4333147..1748a3fa9d2 100644
    --- a/htdocs/compta/paiement/cheque/index.php
    +++ b/htdocs/compta/paiement/cheque/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2007-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016      Juanjo Menent	    <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *		\brief      Home page for cheque receipts
      */
     
    -require('../../../main.inc.php');
    +require '../../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
    @@ -151,6 +151,6 @@ else
     
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/paiement/cheque/list.php b/htdocs/compta/paiement/cheque/list.php
    index 800f40b9694..d9ac1ab11eb 100644
    --- a/htdocs/compta/paiement/cheque/list.php
    +++ b/htdocs/compta/paiement/cheque/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2007-2016	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2014		Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2016		Juanjo Menent   		<jmenent@2byte.es>
      *
    @@ -25,7 +25,7 @@
      *   \brief      Page list of cheque deposits
      */
     
    -require('../../../main.inc.php');
    +require '../../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
    @@ -250,6 +250,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/paiement/class/cpaiement.class.php b/htdocs/compta/paiement/class/cpaiement.class.php
    index 59f13023b24..26d4ea0510e 100644
    --- a/htdocs/compta/paiement/class/cpaiement.class.php
    +++ b/htdocs/compta/paiement/class/cpaiement.class.php
    @@ -34,15 +34,12 @@ class Cpaiement
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'cpaiement';
    +	
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'c_paiement';
     
    -
    -	/**
    -	 */
    -
     	public $code;
     	public $libelle;
     	public $type;
    @@ -50,9 +47,6 @@ class Cpaiement
     	public $accountancy_code;
     	public $module;
     
    -	/**
    -	 */
    -
     
     	/**
     	 * Constructor
    @@ -141,15 +135,15 @@ class Cpaiement
     		if (!$error) {
     			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
     
    -			if (!$notrigger) {
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action to call a trigger.
    +			// Uncomment this and change MYOBJECT to your own tag if you
    +			// want this action to call a trigger.
    +			//if (!$notrigger) {
     
    -				//// Call triggers
    -				//$result=$this->call_trigger('MYOBJECT_CREATE',$user);
    -				//if ($result < 0) $error++;
    -				//// End call triggers
    -			}
    +			//  // Call triggers
    +			//  $result=$this->call_trigger('MYOBJECT_CREATE',$user);
    +			//  if ($result < 0) $error++;
    +			//  // End call triggers
    +			//}
     		}
     
     		// Commit or rollback
    @@ -206,8 +200,6 @@ class Cpaiement
     				$this->active = $obj->active;
     				$this->accountancy_code = $obj->accountancy_code;
     				$this->module = $obj->module;
    -
    -
     			}
     			$this->db->free($resql);
     
    @@ -284,15 +276,15 @@ class Cpaiement
     			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
     		}
     
    -		if (!$error && !$notrigger) {
    -			// Uncomment this and change MYOBJECT to your own tag if you
    -			// want this action calls a trigger.
    +		// Uncomment this and change MYOBJECT to your own tag if you
    +		// want this action calls a trigger.
    +		//if (!$error && !$notrigger) {
     
    -			//// Call triggers
    -			//$result=$this->call_trigger('MYOBJECT_MODIFY',$user);
    -			//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    -			//// End call triggers
    -		}
    +		//  // Call triggers
    +		//  $result=$this->call_trigger('MYOBJECT_MODIFY',$user);
    +		//  if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    +		//  // End call triggers
    +		//}
     
     		// Commit or rollback
     		if ($error) {
    @@ -322,17 +314,15 @@ class Cpaiement
     
     		$this->db->begin();
     
    -		if (!$error) {
    -			if (!$notrigger) {
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action calls a trigger.
    +		// Uncomment this and change MYOBJECT to your own tag if you
    +		// want this action calls a trigger.
    +		//if (!$error && !$notrigger) {
     
    -				//// Call triggers
    -				//$result=$this->call_trigger('MYOBJECT_DELETE',$user);
    -				//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    -				//// End call triggers
    -			}
    -		}
    +		//  // Call triggers
    +		//  $result=$this->call_trigger('MYOBJECT_DELETE',$user);
    +		//  if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    +		//  // End call triggers
    +		//}
     
     		if (!$error) {
     			$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element;
    @@ -375,8 +365,5 @@ class Cpaiement
     		$this->active = '';
     		$this->accountancy_code = '';
     		$this->module = '';
    -
    -
     	}
    -
     }
    diff --git a/htdocs/compta/paiement/class/paiement.class.php b/htdocs/compta/paiement/class/paiement.class.php
    index 539c70f591b..18dabbcf980 100644
    --- a/htdocs/compta/paiement/class/paiement.class.php
    +++ b/htdocs/compta/paiement/class/paiement.class.php
    @@ -1,12 +1,14 @@
     <?php
    -/* Copyright (C) 2002-2004 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2010 Laurent Destailleur   <eldy@users.sourceforge.net>
    - * Copyright (C)      2005 Marc Barilley / Ocebo <marc@ocebo.com>
    +/* Copyright (C) 2002-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
      * Copyright (C) 2012      Cédric Salvador       <csalvador@gpcsolutions.fr>
      * Copyright (C) 2014      Raphaël Doursenaud    <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2014      Marcos García 		 <marcosgdf@gmail.com>
      * Copyright (C) 2015      Juanjo Menent		 <jmenent@2byte.es>
      * Copyright (C) 2018      Ferran Marcet		 <fmarcet@2byte.es>
    + * Copyright (C) 2018      Thibault FOUCART		 <support@ptibogxiv.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -36,36 +38,105 @@ require_once DOL_DOCUMENT_ROOT .'/multicurrency/class/multicurrency.class.php';
      */
     class Paiement extends CommonObject
     {
    -    public $element='payment';
    -    public $table_element='paiement';
    -    public $picto = 'payment';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='payment';
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='paiement';
    +
    +    /**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'payment';
    +
    +	public $facid;
    +	public $datepaye;
     
    -	var $facid;
    -	var $datepaye;
     	/**
     	 * @deprecated
     	 * @see amount, amounts
     	 */
    -    var $total;
    +    public $total;
    +
     	/**
     	 * @deprecated
     	 * @see amount, amounts
     	 */
    -	var $montant;
    -	var $amount;            // Total amount of payment
    -	var $amounts=array();   // Array of amounts
    -	var $multicurrency_amounts=array();   // Array of amounts
    -	var $author;
    -	var $paiementid;	// Type de paiement. Stocke dans fk_paiement
    +	public $montant;
    +
    +	public $amount;            // Total amount of payment
    +	public $amounts=array();   // Array of amounts
    +	public $multicurrency_amounts=array();   // Array of amounts
    +	public $author;
    +	public $paiementid;	// Type de paiement. Stocke dans fk_paiement
     	// de llx_paiement qui est lie aux types de
    -	//paiement de llx_c_paiement
    -	var $num_paiement;	// Numero du CHQ, VIR, etc...
    -	var $num_payment;	// Numero du CHQ, VIR, etc...
    -	var $bank_account;	// Id compte bancaire du paiement
    -	var $bank_line;     // Id de la ligne d'ecriture bancaire
    +    //paiement de llx_c_paiement
    +
    +    /**
    +     * @var string type libelle
    +     */
    +    public $type_libelle;
    +
    +    /**
    +     * @var string type code
    +     */
    +    public $type_code;
    +
    +    /**
    +     * @var string Numero du CHQ, VIR, etc...
    +     * @deprecated
    +     * @see num_payment
    +     */
    +    public $numero;
    +
    +    /**
    +     * @var string Numero du CHQ, VIR, etc...
    +     * @deprecated
    +     * @see num_payment
    +     */
    +    public $num_paiement;
    +
    +    /**
    +     * @var string Numero du CHQ, VIR, etc...
    +     */
    +    public $num_payment;
    +
    +    /**
    +     * @var string Id of external payment mode
    +     */
    +    public $ext_payment_id;
    +
    +    /**
    +     * @var string Name of external payment mode
    +     */
    +    public $ext_payment_site;
    +
    +    /**
    +     * @var int bank account id of payment
    +     * @deprecated
    +     */
    +    public $bank_account;
    +
    +    /**
    +     * @var int bank account id of payment
    +     */
    +    public $fk_account;
    +
    +    /**
    +     * @var int id of payment line in bank account
    +     */
    +    public $bank_line;
    +
     	// fk_paiement dans llx_paiement est l'id du type de paiement (7 pour CHQ, ...)
    -	// fk_paiement dans llx_paiement_facture est le rowid du paiement
    -    var $fk_paiement;    // Type of paiment
    +    // fk_paiement dans llx_paiement_facture est le rowid du paiement
    +    /**
    +     * @var int payment id
    +     */
    +    public $fk_paiement;    // Type of payment
     
     
     	/**
    @@ -73,7 +144,7 @@ class Paiement extends CommonObject
     	 *
     	 *  @param		DoliDB		$db      Database handler
     	 */
    -	function __construct($db)
    +	public function __construct($db)
     	{
     		$this->db = $db;
     	}
    @@ -86,9 +157,9 @@ class Paiement extends CommonObject
     	 *    @param	int		$fk_bank	Id of bank line associated to payment
     	 *    @return   int		            <0 if KO, 0 if not found, >0 if OK
     	 */
    -	function fetch($id, $ref='', $fk_bank='')
    +	public function fetch($id, $ref='', $fk_bank='')
     	{
    -		$sql = 'SELECT p.rowid, p.ref, p.datep as dp, p.amount, p.statut, p.fk_bank,';
    +		$sql = 'SELECT p.rowid, p.ref, p.datep as dp, p.amount, p.statut, p.ext_payment_id, p.ext_payment_site, p.fk_bank,';
     		$sql.= ' c.code as type_code, c.libelle as type_libelle,';
     		$sql.= ' p.num_paiement as num_payment, p.note,';
     		$sql.= ' b.fk_account';
    @@ -121,6 +192,8 @@ class Paiement extends CommonObject
     				$this->type_libelle   = $obj->type_libelle;
     				$this->type_code      = $obj->type_code;
     				$this->statut         = $obj->statut;
    +                $this->ext_payment_id = $obj->ext_payment_id;
    +                $this->ext_payment_site = $obj->ext_payment_site;
     
     				$this->bank_account   = $obj->fk_account; // deprecated
     				$this->fk_account     = $obj->fk_account;
    @@ -215,8 +288,8 @@ class Paiement extends CommonObject
     		}
     		$note = ($this->note_public?$this->note_public:$this->note);
     
    -		$sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement (entity, ref, datec, datep, amount, multicurrency_amount, fk_paiement, num_paiement, note, fk_user_creat)";
    -		$sql.= " VALUES (".$conf->entity.", '".$this->ref."', '". $this->db->idate($now)."', '".$this->db->idate($this->datepaye)."', '".$total."', '".$mtotal."', ".$this->paiementid.", '".$this->num_paiement."', '".$this->db->escape($note)."', ".$user->id.")";
    +		$sql = "INSERT INTO ".MAIN_DB_PREFIX."paiement (entity, ref, datec, datep, amount, multicurrency_amount, fk_paiement, num_paiement, note, ext_payment_id, ext_payment_site, fk_user_creat)";
    +		$sql.= " VALUES (".$conf->entity.", '".$this->db->escape($this->ref)."', '". $this->db->idate($now)."', '".$this->db->idate($this->datepaye)."', ".$total.", ".$mtotal.", ".$this->paiementid.", '".$this->db->escape($this->num_paiement)."', '".$this->db->escape($note)."', ".($this->ext_payment_id?"'".$this->db->escape($this->ext_payment_id)."'":"null").", ".($this->ext_payment_site?"'".$this->db->escape($this->ext_payment_site)."'":"null").", ".$user->id.")";
     
     		dol_syslog(get_class($this)."::Create insert paiement", LOG_DEBUG);
     		$resql = $this->db->query($sql);
    @@ -545,7 +618,7 @@ class Paiement extends CommonObject
     
             	$this->fk_account=$accountid;
     
    -        	require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
    +        	include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
                 dol_syslog("$user->id,$mode,$label,$this->fk_account,$emetteur_nom,$emetteur_banque");
     
    @@ -694,6 +767,7 @@ class Paiement extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Mise a jour du lien entre le paiement et la ligne generee dans llx_bank
     	 *
    @@ -702,6 +776,7 @@ class Paiement extends CommonObject
     	 */
     	function update_fk_bank($id_bank)
     	{
    +        // phpcs:enable
     		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element.' set fk_bank = '.$id_bank;
     		$sql.= ' WHERE rowid = '.$this->id;
     
    @@ -719,6 +794,7 @@ class Paiement extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Updates the payment date
          *
    @@ -727,6 +803,7 @@ class Paiement extends CommonObject
          */
         function update_date($date)
         {
    +        // phpcs:enable
             if (!empty($date) && $this->statut!=1)
             {
                 $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
    @@ -750,6 +827,7 @@ class Paiement extends CommonObject
             return -1; //no date given or already validated
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Updates the payment number
          *
    @@ -758,6 +836,7 @@ class Paiement extends CommonObject
          */
         function update_num($num)
         {
    +        // phpcs:enable
         	if(!empty($num) && $this->statut!=1)
             {
                 $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element;
    @@ -1064,7 +1143,7 @@ class Paiement extends CommonObject
                 $arraybill = $this->getBillsArray();
                 if (is_array($arraybill) && count($arraybill) > 0)
                 {
    -            	require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    +            	include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
                 	$facturestatic=new Facture($this->db);
                 	foreach ($arraybill as $billid)
                 	{
    @@ -1112,6 +1191,7 @@ class Paiement extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Renvoi le libelle d'un statut donne
     	 *
    @@ -1121,6 +1201,7 @@ class Paiement extends CommonObject
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;	// TODO Renvoyer le libelle anglais et faire traduction a affichage
     
     		$langs->load('compta');
    @@ -1162,15 +1243,17 @@ class Paiement extends CommonObject
     		return '';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *    	Load the third party of object, from id into this->thirdparty
    +	 *  Load the third party of object, from id into this->thirdparty
     	 *
    -	 *		@param		int		$force_thirdparty_id	Force thirdparty id
    -	 *		@return		int								<0 if KO, >0 if OK
    +	 *	@param		int		$force_thirdparty_id	Force thirdparty id
    +	 *	@return		int								<0 if KO, >0 if OK
     	 */
     	function fetch_thirdparty($force_thirdparty_id=0)
     	{
    -		require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
    +        // phpcs:enable
    +		include_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
     
     		if (empty($force_thirdparty_id))
     		{
    diff --git a/htdocs/compta/paiement/index.php b/htdocs/compta/paiement/index.php
    index 7f1597b5afc..5bcda011615 100644
    --- a/htdocs/compta/paiement/index.php
    +++ b/htdocs/compta/paiement/index.php
    @@ -31,5 +31,6 @@ llxHeader();
     
     print load_fiche_titre("Payments");
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/paiement/info.php b/htdocs/compta/paiement/info.php
    index 9f55761dba0..86e45508b2c 100644
    --- a/htdocs/compta/paiement/info.php
    +++ b/htdocs/compta/paiement/info.php
    @@ -76,5 +76,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/paiement/list.php b/htdocs/compta/paiement/list.php
    index 064ca877c3f..768792c978c 100644
    --- a/htdocs/compta/paiement/list.php
    +++ b/htdocs/compta/paiement/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
      * Copyright (C) 2015      Jean-François Ferry  <jfefe@aternatik.fr>
      * Copyright (C) 2015      Juanjo Menent        <jmenent@2byte.es>
    @@ -371,5 +371,6 @@ else
         dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/paiement/rapport.php b/htdocs/compta/paiement/rapport.php
    index 3e6427f6ac2..c2c63aea84d 100644
    --- a/htdocs/compta/paiement/rapport.php
    +++ b/htdocs/compta/paiement/rapport.php
    @@ -166,6 +166,6 @@ if ($year)
         }
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/paiement/tovalidate.php b/htdocs/compta/paiement/tovalidate.php
    index e60f65f924e..9fea9afa5df 100644
    --- a/htdocs/compta/paiement/tovalidate.php
    +++ b/htdocs/compta/paiement/tovalidate.php
    @@ -139,5 +139,6 @@ if ($resql)
         print "</table>";
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/paiement_charge.php b/htdocs/compta/paiement_charge.php
    index fba8723d818..38cee6b8434 100644
    --- a/htdocs/compta/paiement_charge.php
    +++ b/htdocs/compta/paiement_charge.php
    @@ -1,6 +1,6 @@
     <?php
    -/* Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2016      Frédéric France      <frederic.france@free.fr>
    +/* Copyright (C) 2004-2014  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2016-2018  Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -17,9 +17,9 @@
      */
     
     /**
    - *	    \file       htdocs/compta/paiement_charge.php
    - *		\ingroup    tax
    - *		\brief      Page to add payment of a tax
    + *      \file       htdocs/compta/paiement_charge.php
    + *      \ingroup    tax
    + *      \brief      Page to add payment of a tax
      */
     
     require '../main.inc.php';
    @@ -147,7 +147,6 @@ if ($action == 'add_payment' || ($action == 'confirm_paiement' && $confirm=='yes
                 }
             }
     	}
    -
     }
     
     
    @@ -226,7 +225,7 @@ if ($action == 'create')
     	print '<tr><td class="fieldrequired">'.$langs->trans("Date").'</td><td>';
     	$datepaye = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]);
     	$datepayment=empty($conf->global->MAIN_AUTOFILL_DATE)?(empty($_POST["remonth"])?-1:$datepaye):0;
    -	$form->select_date($datepayment,'','','','',"add_payment",1,1);
    +	print $form->selectDate($datepayment, '', '', '', '', "add_payment", 1, 1);
     	print "</td>";
     	print '</tr>';
     
    diff --git a/htdocs/compta/payment_sc/card.php b/htdocs/compta/payment_sc/card.php
    index b395016aeed..f645edf4563 100644
    --- a/htdocs/compta/payment_sc/card.php
    +++ b/htdocs/compta/payment_sc/card.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -74,7 +74,8 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->tax->char
     	}
     }
     
    -// Create payment
    +// Validate social contribution
    +/*
     if ($action == 'confirm_valide' && $confirm == 'yes' && $user->rights->tax->charges->creer)
     {
     	$db->begin();
    @@ -111,6 +112,7 @@ if ($action == 'confirm_valide' && $confirm == 'yes' && $user->rights->tax->char
     		$db->rollback();
     	}
     }
    +*/
     
     
     /*
    @@ -144,18 +146,19 @@ dol_fiche_head($head, $hselected, $langs->trans("PaymentSocialContribution"), -1
     if ($action == 'delete')
     {
     	print $form->formconfirm('card.php?id='.$object->id, $langs->trans("DeletePayment"), $langs->trans("ConfirmDeletePayment"), 'confirm_delete','',0,2);
    -
     }
     
     /*
      * Validation confirmation of payment
      */
    +/*
     if ($action == 'valide')
     {
     	$facid = $_GET['facid'];
     	print $form->formconfirm('card.php?id='.$object->id.'&amp;facid='.$facid, $langs->trans("ValidatePayment"), $langs->trans("ConfirmValidatePayment"), 'confirm_valide','',0,2);
     
     }
    +*/
     
     
     $linkback = '<a href="' . DOL_URL_ROOT . '/compta/sociales/payments.php">' . $langs->trans("BackToList") . '</a>';
    @@ -323,8 +326,6 @@ if ($action == '')
     
     print '</div>';
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/prelevement/bons.php b/htdocs/compta/prelevement/bons.php
    index 0cbaa9ce55e..e4fb8bc0757 100644
    --- a/htdocs/compta/prelevement/bons.php
    +++ b/htdocs/compta/prelevement/bons.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2012 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      * 	\brief      Page liste des bons de prelevements
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
    @@ -183,7 +183,6 @@ else
       dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php
    index 343a45472b6..60e471d712d 100644
    --- a/htdocs/compta/prelevement/card.php
    +++ b/htdocs/compta/prelevement/card.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2016 Juanjo Menent 		<jmenent@2byte.es>
    +/* Copyright (C) 2005       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2005-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2010-2016  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,22 +24,18 @@
      *	\brief      Card of a direct debit
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/prelevement.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/ligneprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
     // Load translation files required by the page
    -$langs->loadLangs(array('banks', 'categories'));
    +$langs->loadLangs(array('banks', 'categories','bills','withdrawals'));
     
     if (!$user->rights->prelevement->bons->lire)
     accessforbidden();
     
    -$langs->load("bills");
    -$langs->load("withdrawals");
    -
    -
     // Security check
     if ($user->societe_id > 0) accessforbidden();
     
    @@ -244,7 +241,7 @@ if ($id > 0 || $ref)
     		print '<tr class="liste_titre">';
     		print '<td colspan="3">'.$langs->trans("NotifyTransmision").'</td></tr>';
     		print '<tr class="oddeven"><td>'.$langs->trans("TransData").'</td><td>';
    -		print $form->select_date('','','','','',"userfile",1,1);
    +		print $form->selectDate('', '', '', '', '', "userfile", 1, 1);
     		print '</td></tr>';
     		print '<tr class="oddeven"><td>'.$langs->trans("TransMetod").'</td><td>';
     		print $form->selectarray("methode",$object->methodes_trans);
    @@ -268,7 +265,7 @@ if ($id > 0 || $ref)
     		print '<tr class="liste_titre">';
     		print '<td colspan="3">'.$langs->trans("NotifyCredit").'</td></tr>';
     		print '<tr class="oddeven"><td>'.$langs->trans('CreditDate').'</td><td>';
    -		print $form->select_date('','','','','',"infocredit",1,1);
    +		print $form->selectDate('', '', '', '', '', "infocredit", 1, 1);
     		print '</td></tr>';
     		print '</table>';
     		print '<br>'.$langs->trans("ThisWillAlsoAddPaymentOnInvoice");
    @@ -419,6 +416,6 @@ if ($id > 0 || $ref)
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/prelevement/class/bonprelevement.class.php b/htdocs/compta/prelevement/class/bonprelevement.class.php
    index 245b25be3b6..4089ffd76e2 100644
    --- a/htdocs/compta/prelevement/class/bonprelevement.class.php
    +++ b/htdocs/compta/prelevement/class/bonprelevement.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2015 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2010-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2014-2016 Ferran Marcet       <fmarcet@2byte.es>
    @@ -39,29 +39,40 @@ require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
      */
     class BonPrelevement extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='widthdraw';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='prelevement_bons';
    -	public $picto = 'payment';
     
    -	var $date_echeance;
    -	var $raison_sociale;
    -	var $reference_remise;
    -	var $emetteur_code_guichet;
    -	var $emetteur_numero_compte;
    -	var $emetteur_code_banque;
    -	var $emetteur_number_key;
    +    /**
    +     * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +     */
    +    public $picto = 'payment';
     
    -	var $emetteur_iban;
    -	var $emetteur_bic;
    -	var $emetteur_ics;
    +	public $date_echeance;
    +	public $raison_sociale;
    +	public $reference_remise;
    +	public $emetteur_code_guichet;
    +	public $emetteur_numero_compte;
    +	public $emetteur_code_banque;
    +	public $emetteur_number_key;
     
    -	var $total;
    -	var $_fetched;
    -	var $statut;    // 0-Wait, 1-Trans, 2-Done
    -	var $labelstatut=array();
    +	public $emetteur_iban;
    +	public $emetteur_bic;
    +	public $emetteur_ics;
     
    -	var $invoice_in_error=array();
    -	var $thirdparty_in_error=array();
    +	public $total;
    +	public $fetched;
    +	public $statut;    // 0-Wait, 1-Trans, 2-Done
    +	public $labelstatut=array();
    +
    +	public $invoice_in_error=array();
    +	public $thirdparty_in_error=array();
     
     
     	/**
    @@ -98,9 +109,10 @@ class BonPrelevement extends CommonObject
     
     		$this->methodes_trans[0] = "Internet";
     
    -		$this->_fetched = 0;
    +		$this->fetched = 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Add invoice to withdrawal
     	 *
    @@ -116,6 +128,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function AddFacture($facture_id, $client_id, $client_nom, $amount, $code_banque, $code_guichet, $number, $number_key)
     	{
    +        // phpcs:enable
     		$result = 0;
     		$line_id = 0;
     
    @@ -156,7 +169,6 @@ class BonPrelevement extends CommonObject
     		}
     
     		return $result;
    -
     	}
     
     	/**
    @@ -235,7 +247,6 @@ class BonPrelevement extends CommonObject
     				dol_syslog(get_class($this)."::addline Error -2");
     				$result = -2;
     			}
    -
     		}
     
     		return $result;
    @@ -304,7 +315,7 @@ class BonPrelevement extends CommonObject
     
     				$this->statut             = $obj->statut;
     
    -				$this->_fetched = 1;
    +				$this->fetched = 1;
     
     				return 1;
     			}
    @@ -320,6 +331,7 @@ class BonPrelevement extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set credite and set status of linked invoices. Still used ??
     	 *
    @@ -327,6 +339,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function set_credite()
     	{
    +        // phpcs:enable
     		global $user,$conf;
     
     		$error = 0;
    @@ -397,6 +410,7 @@ class BonPrelevement extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set direct debit order to "credited" status.
     	 *
    @@ -406,11 +420,12 @@ class BonPrelevement extends CommonObject
     	 */
     	function set_infocredit($user, $date)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$error = 0;
     
    -		if ($this->_fetched == 1)
    +		if ($this->fetched == 1)
     		{
     			if ($date >= $this->date_trans)
     			{
    @@ -499,7 +514,6 @@ class BonPrelevement extends CommonObject
     							dol_syslog(get_class($this)."::set_infocredit Update lines Error");
     							$error++;
     						}
    -
     					}
     					else
     					{
    @@ -543,6 +557,7 @@ class BonPrelevement extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set withdrawal to transmited status
     	 *
    @@ -553,6 +568,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function set_infotrans($user, $date, $method)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$error = 0;
    @@ -667,6 +683,7 @@ class BonPrelevement extends CommonObject
     		return $arr;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Returns amount of withdrawal
     	 *
    @@ -674,6 +691,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function SommeAPrelever()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$sql = "SELECT sum(pfd.amount) as nb";
    @@ -704,6 +722,7 @@ class BonPrelevement extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Get number of invoices to withdrawal
     	 *	TODO delete params banque and agence when not necesary
    @@ -714,6 +733,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function NbFactureAPrelever($banque=0,$agence=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$sql = "SELECT count(f.rowid) as nb";
    @@ -745,6 +765,7 @@ class BonPrelevement extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a withdraw
     	 *  TODO delete params banque and agence when not necesary
    @@ -758,20 +779,21 @@ class BonPrelevement extends CommonObject
     	 */
     	function Create($banque=0, $agence=0, $mode='real', $format='ALL',$executiondate='')
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		dol_syslog(__METHOD__."::Bank=".$banque." Office=".$agence." mode=".$mode." format=".$format, LOG_DEBUG);
     
    -		require_once (DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
    -		require_once (DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
    +		require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php";
    +		require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
     
     		if (empty($format)) return 'ErrorBadParametersForDirectDebitFileCreate';
     
     		$error = 0;
     
     		$datetimeprev = time();
    -                //Choice the date of the execution direct debit
    -                if(!empty($executiondate)) $datetimeprev = $executiondate;
    +        //Choice the date of the execution direct debit
    +        if(!empty($executiondate)) $datetimeprev = $executiondate;
     
     		$month = strftime("%m", $datetimeprev);
     		$year = strftime("%Y", $datetimeprev);
    @@ -1034,10 +1056,8 @@ class BonPrelevement extends CommonObject
     							$error++;
     							dol_syslog(__METHOD__."::Update Orders::Error=".$this->db->error(), LOG_ERR);
     						}
    -
     					}
     				}
    -
     			}
     
     			if (!$error)
    @@ -1180,6 +1200,7 @@ class BonPrelevement extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Delete a notification def by id
     	 *
    @@ -1188,6 +1209,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function DeleteNotificationById($rowid)
     	{
    +        // phpcs:enable
     		$result = 0;
     
     		$sql = "DELETE FROM ".MAIN_DB_PREFIX."notify_def";
    @@ -1203,6 +1225,7 @@ class BonPrelevement extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Delete a notification
     	 *
    @@ -1212,6 +1235,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function DeleteNotification($user, $action)
     	{
    +        // phpcs:enable
     		$result = 0;
     
     		$sql = "DELETE FROM ".MAIN_DB_PREFIX."notify_def";
    @@ -1227,6 +1251,7 @@ class BonPrelevement extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Add a notification
     	 *
    @@ -1237,6 +1262,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function AddNotification($db, $user, $action)
     	{
    +        // phpcs:enable
     		$result = 0;
     
     		if ($this->DeleteNotification($user, $action) == 0)
    @@ -1449,10 +1475,10 @@ class BonPrelevement extends CommonObject
     		if (! empty($conf->global->MAIN_UMASK))
     		@chmod($this->file, octdec($conf->global->MAIN_UMASK));
     		return $result;
    -
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Write recipient of request (customer)
     	 *
    @@ -1469,6 +1495,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function EnregDestinataire($rowid, $client_nom, $rib_banque, $rib_guichet, $rib_number, $amount, $facnumber, $facid, $rib_dom='')
     	{
    +        // phpcs:enable
     		fputs($this->file, "06");
     		fputs($this->file, "08"); // Prelevement ordinaire
     
    @@ -1539,6 +1566,7 @@ class BonPrelevement extends CommonObject
     		return $pre.$row_code_client.'-'.$row_drum.'-'.date('U', $row_datec);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Write recipient of request (customer)
     	 *
    @@ -1562,6 +1590,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function EnregDestinataireSEPA($row_code_client, $row_nom, $row_address, $row_zip, $row_town, $row_country_code, $row_cb, $row_cg, $row_cc, $row_somme, $row_facnumber, $row_idfac, $row_iban, $row_bic, $row_datec, $row_drum)
     	{
    +        // phpcs:enable
     		$CrLf = "\n";
     		$Rowing = sprintf("%06d", $row_idfac);
     
    @@ -1575,7 +1604,8 @@ class BonPrelevement extends CommonObject
     		$XML_DEBITOR ='';
     		$XML_DEBITOR .='			<DrctDbtTxInf>'.$CrLf;
     		$XML_DEBITOR .='				<PmtId>'.$CrLf;
    -		$XML_DEBITOR .='					<EndToEndId>'.('AS-'.dol_trunc($row_facnumber,20).'-'.$Rowing).'</EndToEndId>'.$CrLf;          // ISO20022 states that EndToEndId has a MaxLength of 35 characters
    +	//	$XML_DEBITOR .='					<EndToEndId>'.('AS-'.dol_trunc($row_facnumber,20).'-'.$Rowing).'</EndToEndId>'.$CrLf;          // ISO20022 states that EndToEndId has a MaxLength of 35 characters
    +		$XML_DEBITOR .='					<EndToEndId>'.(($conf->global->END_TO_END != "" ) ? $conf->global->END_TO_END : ('AS-'.dol_trunc($row_facnumber,20)).'-'.$Rowing).'</EndToEndId>'.$CrLf;          // ISO20022 states that EndToEndId has a MaxLength of 35 characters
     		$XML_DEBITOR .='				</PmtId>'.$CrLf;
     		$XML_DEBITOR .='				<InstdAmt Ccy="EUR">'.round($row_somme, 2).'</InstdAmt>'.$CrLf;
     		$XML_DEBITOR .='				<DrctDbtTx>'.$CrLf;
    @@ -1607,13 +1637,15 @@ class BonPrelevement extends CommonObject
     		$XML_DEBITOR .='				</DbtrAcct>'.$CrLf;
     		$XML_DEBITOR .='				<RmtInf>'.$CrLf;
     	//	$XML_DEBITOR .='					<Ustrd>'.($row_facnumber.'/'.$Rowing.'/'.$Rum).'</Ustrd>'.$CrLf;
    -		$XML_DEBITOR .='					<Ustrd>'.dol_trunc($row_facnumber, 135).'</Ustrd>'.$CrLf;        // 140 max
    +	//	$XML_DEBITOR .='					<Ustrd>'.dol_trunc($row_facnumber, 135).'</Ustrd>'.$CrLf;        // 140 max
    +		$XML_DEBITOR .='					<Ustrd>'.(($conf->global->USTRD != "" ) ? $conf->global->USTRD : dol_trunc($row_facnumber, 135) ).'</Ustrd>'.$CrLf;        // 140 max
     		$XML_DEBITOR .='				</RmtInf>'.$CrLf;
     		$XML_DEBITOR .='			</DrctDbtTxInf>'.$CrLf;
     		return $XML_DEBITOR;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Write sender of request (me)
     	 *
    @@ -1621,6 +1653,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function EnregEmetteur()
     	{
    +        // phpcs:enable
     		fputs($this->file, "03");
     		fputs($this->file, "08"); // Prelevement ordinaire
     
    @@ -1677,9 +1710,9 @@ class BonPrelevement extends CommonObject
     		fputs($this->file, substr("                                        ",0,5));
     
     		fputs($this->file, "\n");
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Write sender of request (me).
     	 *  Note: The tag PmtInf is opened here but closed into caller
    @@ -1694,6 +1727,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function EnregEmetteurSEPA($configuration, $ladate, $nombre, $total, $CrLf='\n', $format='FRST')
     	{
    +        // phpcs:enable
     		// SEPA INITIALISATION
     		global $conf;
     
    @@ -1801,6 +1835,7 @@ class BonPrelevement extends CommonObject
     		return $XML_SEPA_INFO;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Write end
     	 *
    @@ -1809,6 +1844,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function EnregTotal($total)
     	{
    +        // phpcs:enable
     		fputs($this->file, "08");
     		fputs($this->file, "08"); // Prelevement ordinaire
     
    @@ -1873,6 +1909,7 @@ class BonPrelevement extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return status label for a status
     	 *
    @@ -1882,6 +1919,7 @@ class BonPrelevement extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		if (empty($this->labelstatut))
     		{
     			global $langs;
    @@ -1891,45 +1929,39 @@ class BonPrelevement extends CommonObject
     			$this->labelstatut[2]=$langs->trans("StatusCredited");
     		}
     
    -		if ($mode == 0)
    +		if ($mode == 0 || $mode == 1)
     		{
     			return $this->labelstatut[$statut];
     		}
    -		if ($mode == 1)
    -		{
    -			return $this->labelstatut[$statut];
    -		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut==0) return img_picto($this->labelstatut[$statut],'statut1').' '.$this->labelstatut[$statut];
     			if ($statut==1) return img_picto($this->labelstatut[$statut],'statut3').' '.$this->labelstatut[$statut];
     			if ($statut==2) return img_picto($this->labelstatut[$statut],'statut6').' '.$this->labelstatut[$statut];
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut==0) return img_picto($this->labelstatut[$statut],'statut1');
     			if ($statut==1) return img_picto($this->labelstatut[$statut],'statut3');
     			if ($statut==2) return img_picto($this->labelstatut[$statut],'statut6');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut==0) return img_picto($this->labelstatut[$statut],'statut1').' '.$this->labelstatut[$statut];
     			if ($statut==1) return img_picto($this->labelstatut[$statut],'statut3').' '.$this->labelstatut[$statut];
     			if ($statut==2) return img_picto($this->labelstatut[$statut],'statut6').' '.$this->labelstatut[$statut];
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut==0) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut1');
     			if ($statut==1) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut3');
     			if ($statut==2) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut6');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($statut==0) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut1');
     			if ($statut==1) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut3');
     			if ($statut==2) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut6');
     		}
     	}
    -
     }
    -
    diff --git a/htdocs/compta/prelevement/class/ligneprelevement.class.php b/htdocs/compta/prelevement/class/ligneprelevement.class.php
    index fa8545c4ea2..7e100022c7a 100644
    --- a/htdocs/compta/prelevement/class/ligneprelevement.class.php
    +++ b/htdocs/compta/prelevement/class/ligneprelevement.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2011 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
      *
    @@ -31,8 +31,15 @@
      */
     class LignePrelevement
     {
    -	var $id;
    -	var $db;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	var $statuts = array();
     
    @@ -121,6 +128,7 @@ class LignePrelevement
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return status label for a status
     	 *
    @@ -130,25 +138,26 @@ class LignePrelevement
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
     			return $langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]);   // Waiting
     			if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);   // Credited
     			if ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut8').' '.$langs->trans($this->statuts[$statut]);   // Refused
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut1');
     			if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut6');
     			if ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut8');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut==0) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut1');
     			if ($statut==2) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut6');
    @@ -173,4 +182,3 @@ class LignePrelevement
     		return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
     	}
     }
    -
    diff --git a/htdocs/compta/prelevement/class/rejetprelevement.class.php b/htdocs/compta/prelevement/class/rejetprelevement.class.php
    index 87de138e63a..6c99cc5562c 100644
    --- a/htdocs/compta/prelevement/class/rejetprelevement.class.php
    +++ b/htdocs/compta/prelevement/class/rejetprelevement.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2013 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -30,8 +30,15 @@
      */
     class RejetPrelevement
     {
    -	var $id;
    -	var $db;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     
     	/**
    @@ -62,7 +69,6 @@ class RejetPrelevement
     
         	$this->facturer[0]=$langs->trans("NoInvoiceRefused");
     		$this->facturer[1]=$langs->trans("InvoiceRefused");
    -
     	}
     
     	/**
    @@ -169,7 +175,6 @@ class RejetPrelevement
     					$error++;
     					dol_syslog("RejetPrelevement::Create Error payment validation");
     				}
    -
     			}
     			//Tag invoice as unpaid
     			dol_syslog("RejetPrelevement::Create set_unpaid fac ".$fac->ref);
    @@ -191,9 +196,9 @@ class RejetPrelevement
     			dol_syslog("RejetPrelevement::Create Rollback");
     			$this->db->rollback();
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Send email to all users that has asked the withdraw request
     	 *
    @@ -202,6 +207,7 @@ class RejetPrelevement
     	 */
     	function _send_email($fac)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$userid = 0;
    @@ -320,7 +326,6 @@ class RejetPrelevement
     		}
     
     		return $arr;
    -
     	}
     
     	/**
    @@ -364,6 +369,4 @@ class RejetPrelevement
     			return -2;
     		}
     	}
    -
     }
    -
    diff --git a/htdocs/compta/prelevement/create.php b/htdocs/compta/prelevement/create.php
    index 9cc2cf77867..02ccee567f5 100644
    --- a/htdocs/compta/prelevement/create.php
    +++ b/htdocs/compta/prelevement/create.php
    @@ -1,9 +1,10 @@
     <?php
    -/* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2010-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2010-2012 Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2018      Nicolas ZABOURI      <info@inovea-conseil.com>
    +/* Copyright (C) 2005       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2010-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2009  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2010-2012  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2018       Nicolas ZABOURI         <info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -25,7 +26,7 @@
      *	\brief      Prelevement creation page
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
    @@ -45,7 +46,7 @@ $result = restrictedArea($user, 'prelevement', '', '', 'bons');
     $action = GETPOST('action','alpha');
     $mode = GETPOST('mode','alpha')?GETPOST('mode','alpha'):'real';
     $format = GETPOST('format','aZ09');
    -$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
    +$limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
     $page = GETPOST("page",'int');
     if (empty($page) || $page == -1) { $page = 0; }     // If $page is not defined, or '' or -1
     $offset = $limit * $page;
    @@ -153,14 +154,13 @@ print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">'
     if ($nb) {
         if ($pricetowithdraw) {
             print $langs->trans('ExecutionDate').' ';
    -        print $form->select_date();
    +        print $form->selectDate();
             if ($mysoc->isInEEC()) {
                 print '<select name="format"><option value="FRST">'.$langs->trans('SEPAFRST').'</option><option value="RCUR">'.$langs->trans('SEPARCUR').'</option></select>';
                 print '<input class="butAction" type="submit" value="' . $langs->trans("CreateForSepa") . '"/>';
             } else {
                 print '<a class="butAction"  type="submit" href="create.php?action=create&format=ALL">' . $langs->trans("CreateAll") . "</a>\n";
     		}
    -
     		}
     		else
     		{
    @@ -348,5 +348,6 @@ else
     }
     */
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/prelevement/demandes.php b/htdocs/compta/prelevement/demandes.php
    index d20f92cb188..3129d4af3c8 100644
    --- a/htdocs/compta/prelevement/demandes.php
    +++ b/htdocs/compta/prelevement/demandes.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *  \brief      Page to list withdraw requests
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/modules/modPrelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
    @@ -167,5 +167,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/prelevement/factures.php b/htdocs/compta/prelevement/factures.php
    index 2eabd64873d..1f0309f13f3 100644
    --- a/htdocs/compta/prelevement/factures.php
    +++ b/htdocs/compta/prelevement/factures.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2012 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *     \brief      Page liste des factures prelevees
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/prelevement.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/rejetprelevement.class.php';
    @@ -134,7 +134,6 @@ if ($prev_id > 0 || $ref)
     		print '</div>';
     
     		dol_fiche_end();
    -
         }
       	else
         {
    @@ -296,7 +295,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/prelevement/fiche-rejet.php b/htdocs/compta/prelevement/fiche-rejet.php
    index 113153bc896..2daf4bbf427 100644
    --- a/htdocs/compta/prelevement/fiche-rejet.php
    +++ b/htdocs/compta/prelevement/fiche-rejet.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005      Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2012 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *		\brief      Withdraw reject
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/prelevement.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/rejetprelevement.class.php';
    @@ -135,7 +135,6 @@ if ($prev_id > 0 || $ref)
     		print '</div>';
     
     		dol_fiche_end();
    -
         }
       	else
         {
    @@ -245,5 +244,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/prelevement/fiche-stat.php b/htdocs/compta/prelevement/fiche-stat.php
    index c126212f17c..731bc1dc81d 100644
    --- a/htdocs/compta/prelevement/fiche-stat.php
    +++ b/htdocs/compta/prelevement/fiche-stat.php
    @@ -23,7 +23,7 @@
      *	\brief      Prelevement statistics
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/prelevement.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/ligneprelevement.class.php';
    @@ -132,7 +132,6 @@ if ($prev_id > 0 || $ref)
     		print '</div>';
     
     		dol_fiche_end();
    -
     	}
     	else
     	{
    @@ -193,5 +192,6 @@ if ($prev_id > 0 || $ref)
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/prelevement/index.php b/htdocs/compta/prelevement/index.php
    index de99b56eb19..a73e9d4f835 100644
    --- a/htdocs/compta/prelevement/index.php
    +++ b/htdocs/compta/prelevement/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2013      Florian Henry		<florian.henry@open-concept.pro>
      *
    @@ -26,7 +26,7 @@
      */
     
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
    @@ -221,6 +221,6 @@ else
     
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/prelevement/ligne.php b/htdocs/compta/prelevement/ligne.php
    index 721cf62bcd7..38e5f91ec2b 100644
    --- a/htdocs/compta/prelevement/ligne.php
    +++ b/htdocs/compta/prelevement/ligne.php
    @@ -1,8 +1,9 @@
     <?php
    -/* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2010-2013 Juanjo Menent        <jmenent@2byte.es>
    +/* Copyright (C) 2005       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2005-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2009  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2010-2013  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,7 +25,7 @@
      *	\brief      card of withdraw line
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/ligneprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/rejetprelevement.class.php';
    @@ -88,7 +89,6 @@ if ($action == 'confirm_rejet')
     				header("Location: ligne.php?id=".$id);
     				exit;
     			}
    -
     		}
     		else
     		{
    @@ -196,7 +196,7 @@ if ($id)
     		//Date
     		print '<tr><td class="fieldrequired valid">'.$langs->trans("RefusedData").'</td>';
     		print '<td colspan="2" class="valid">';
    -		print $form->select_date('','','','','',"confirm_rejet");
    +		print $form->selectDate('', '', '', '', '', "confirm_rejet");
     		print '</td></tr>';
     
     		//Reason
    @@ -334,6 +334,6 @@ if ($id)
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/prelevement/list.php b/htdocs/compta/prelevement/list.php
    index 8d657f00221..1313658a5f7 100644
    --- a/htdocs/compta/prelevement/list.php
    +++ b/htdocs/compta/prelevement/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2018 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *      \brief      Page liste des prelevements
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/bonprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/ligneprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
    @@ -213,5 +213,6 @@ else
         dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/prelevement/rejets.php b/htdocs/compta/prelevement/rejets.php
    index c8812bba1a9..4e71efc5379 100644
    --- a/htdocs/compta/prelevement/rejets.php
    +++ b/htdocs/compta/prelevement/rejets.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2013 Juanjo Menent 		<jmenent@2byte.es>
      * Copyright (C) 2005-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
    @@ -24,7 +24,7 @@
      *      \brief      Reject page
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/rejetprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/ligneprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
    @@ -120,5 +120,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/prelevement/stats.php b/htdocs/compta/prelevement/stats.php
    index 20d213e820b..e7bd8622fa2 100644
    --- a/htdocs/compta/prelevement/stats.php
    +++ b/htdocs/compta/prelevement/stats.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2011 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *      \brief      Page with statistics on withdrawals
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/prelevement/class/ligneprelevement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
    @@ -225,7 +225,7 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
     
    diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php
    index c9e32b9a97f..e08ebb17ed1 100644
    --- a/htdocs/compta/resultat/clientfourn.php
    +++ b/htdocs/compta/resultat/clientfourn.php
    @@ -1,12 +1,13 @@
     <?php
    -/* Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
    - * Copyright (C) 2012-2014 Raphaël Dourseanud   <rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) 2014-2106 Ferran Marcet        <fmarcet@2byte.es>
    - * Copyright (C) 2014	   Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2014	   Florian Henry        <florian.henry@open-concept.pro>
    +/* Copyright (C) 2002-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2012       Cédric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2012-2014  Raphaël Dourseanud      <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2014-2106  Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2014       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2014       Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -161,7 +162,7 @@ if ($modecompta=="CREANCES-DETTES")
     	$calcmode=$langs->trans("CalcModeDebt");
         $calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=RECETTES-DEPENSES">','</a>').')';
         if (! empty($conf->accounting->enabled)) $calcmode.='<br>('.$langs->trans("SeeReportInBookkeepingMode",'<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=BOOKKEEPING">','</a>').')';
    -    $period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +    $period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	$periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year']-1)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year']+1)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
         $description=$langs->trans("RulesResultDue");
     	if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.= $langs->trans("DepositsAreNotIncluded");
    @@ -175,9 +176,8 @@ elseif ($modecompta=="RECETTES-DEPENSES")
     	$calcmode=$langs->trans("CalcModeEngagement");
         $calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=CREANCES-DETTES">','</a>').')';
         if (! empty($conf->accounting->enabled)) $calcmode.='<br>('.$langs->trans("SeeReportInBookkeepingMode",'<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=BOOKKEEPING">','</a>').')';
    -    //$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',1,1,0,'',1,0,1);
    -    $period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    -	$periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year']-1)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year']+1)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
    +    $period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
    +    $periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year']-1)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year']+1)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
         $description=$langs->trans("RulesResultInOut");
         $builddate=dol_now();
         //$exportlink=$langs->trans("NotYetAvailable");
    @@ -188,8 +188,7 @@ elseif ($modecompta=="BOOKKEEPING")
     	$calcmode=$langs->trans("CalcModeBookkeeping");
         $calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=RECETTES-DEPENSES">','</a>').')';
     	$calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?date_startyear='.$tmps['year'].'&date_startmonth='.$tmps['mon'].'&date_startday='.$tmps['mday'].'&date_endyear='.$tmpe['year'].'&date_endmonth='.$tmpe['mon'].'&date_endday='.$tmpe['mday'].'&modecompta=CREANCES-DETTES">','</a>').')';
    -	//$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',1,1,0,'',1,0,1);
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	$arraylist=array('no'=>$langs->trans("No"), 'yes'=>$langs->trans("AccountWithNonZeroValues"), 'all'=>$langs->trans("All"));
     	$period.=' &nbsp; &nbsp; '.$langs->trans("DetailByAccount").' '. $form->selectarray('showaccountdetail', $arraylist, $showaccountdetail, 0);
     	$periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year']-1)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($tmps['year']+1)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
    @@ -774,7 +773,7 @@ else
     
     		            print '<tr class="oddeven"><td>&nbsp;</td>';
     
    -		            print "<td>".$langs->trans("Salary")." <a href=\"".DOL_URL_ROOT."/compta/salaries/index.php?filtre=s.fk_user=".$obj->fk_user."\">".$obj->firstname." ".$obj->lastname."</a></td>\n";
    +		            print "<td>".$langs->trans("Salary")." <a href=\"".DOL_URL_ROOT."/compta/salaries/list.php?filtre=s.fk_user=".$obj->fk_user."\">".$obj->firstname." ".$obj->lastname."</a></td>\n";
     
     		            if ($modecompta == 'CREANCES-DETTES') print '<td align="right">'.price(-$obj->amount).'</td>';
     		            print '<td align="right">'.price(-$obj->amount).'</td>';
    @@ -1210,6 +1209,6 @@ if ($mysoc->tva_assuj != 'franchise')	// Assujetti
     print "</table>";
     print '<br>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php
    index fbbc7a36eef..33c3883f8ef 100644
    --- a/htdocs/compta/resultat/index.php
    +++ b/htdocs/compta/resultat/index.php
    @@ -1,10 +1,11 @@
     <?php
    -/* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2014-2016 Ferran Marcet        <fmarcet@2byte.es>
    - * Copyright (C) 2014	   Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2014	   Florian Henry        <florian.henry@open-concept.pro>
    +/* Copyright (C) 2003       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2014-2016  Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2014       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2014       Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -124,7 +125,7 @@ if ($modecompta == 'CREANCES-DETTES')
     	$calcmode=$langs->trans("CalcModeDebt");
     	$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
     	if (! empty($conf->accounting->enabled)) $calcmode.='<br>('.$langs->trans("SeeReportInBookkeepingMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=BOOKKEEPING">','</a>').')';
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	$periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear-2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
     	$description=$langs->trans("RulesAmountWithTaxIncluded");
     	$description.='<br>'.$langs->trans("RulesResultDue");
    @@ -138,7 +139,7 @@ else if ($modecompta=="RECETTES-DEPENSES") {
     	$calcmode=$langs->trans("CalcModeEngagement");
     	$calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">','</a>').')';
     	if (! empty($conf->accounting->enabled)) $calcmode.='<br>('.$langs->trans("SeeReportInBookkeepingMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=BOOKKEEPING">','</a>').')';
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	$periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear-2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
     	$description=$langs->trans("RulesAmountWithTaxIncluded");
     	$description.='<br>'.$langs->trans("RulesResultInOut");
    @@ -151,7 +152,7 @@ else if ($modecompta=="BOOKKEEPING")
     	$calcmode=$langs->trans("CalcModeBookkeeping");
     	$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
     	$calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">','</a>').')';
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	$periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear-2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
     	$description=$langs->trans("RulesAmountOnInOutBookkeepingRecord");
     	$description.=' ('.$langs->trans("SeePageForSetup", DOL_URL_ROOT.'/accountancy/admin/account.php?mainmenu=accountancy&leftmenu=accountancy_admin', $langs->transnoentitiesnoconv("Accountancy").' / '.$langs->transnoentitiesnoconv("Setup").' / '.$langs->trans("Chartofaccounts")).')';
    @@ -687,7 +688,6 @@ if (! empty($conf->expensereport->enabled) && ($modecompta == 'CREANCES-DETTES'
     		$column='p.date_valid';
     		if (! empty($date_start) && ! empty($date_end))
     			$sql.= " AND ".$column." >= '".$db->idate($date_start)."' AND ".$column." <= '".$db->idate($date_end)."'";
    -
     	} elseif ($modecompta == 'RECETTES-DEPENSES') {
     		$sql = "SELECT date_format(pe.datep,'%Y-%m') as dm, sum(p.total_ht) as amount_ht,sum(p.total_ttc) as amount_ttc";
     		$sql.= " FROM ".MAIN_DB_PREFIX."expensereport as p";
    @@ -720,7 +720,6 @@ if (! empty($conf->expensereport->enabled) && ($modecompta == 'CREANCES-DETTES'
     
     				if (! isset($decaiss_ttc[$obj->dm])) $decaiss_ttc[$obj->dm]=0;
     				$decaiss_ttc[$obj->dm] += $obj->amount_ttc;
    -
     			}
     		}
     	}
    @@ -728,7 +727,6 @@ if (! empty($conf->expensereport->enabled) && ($modecompta == 'CREANCES-DETTES'
     	{
     		dol_print_error($db);
     	}
    -
     }
     elseif ($modecompta == 'BOOKKEEPING') {
     	// Nothing from this table
    @@ -1009,5 +1007,6 @@ print "</tr>\n";
     print "</table>";
     print '</div>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/resultat/result.php b/htdocs/compta/resultat/result.php
    index 23c7e91b989..c4a6e2ec755 100644
    --- a/htdocs/compta/resultat/result.php
    +++ b/htdocs/compta/resultat/result.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2016-2017		Jamal Elbaz			<jamelbaz@gmail.com>
    - * Copyright (C) 2016 	    	Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
    - * Copyright (C) 2018 	    	Laurent Destailleur <eldy@destailleur.fr>
    +/* Copyright (C) 2016-2017  Jamal Elbaz             <jamelbaz@gmail.com>
    + * Copyright (C) 2016       Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Laurent Destailleur     <eldy@destailleur.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -171,7 +172,7 @@ if ($modecompta=="CREANCES-DETTES")
     	$calcmode=$langs->trans("CalcModeDebt");
     	$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year='.$start_year.(GETPOST("month")>0?'&month='.GETPOST("month"):'').'&modecompta=RECETTES-DEPENSES">','</a>').')';
     	if (! empty($conf->accounting->enabled)) $calcmode.='<br>('.$langs->trans("SeeReportInBookkeepingMode",'<a href="'.$_SERVER["PHP_SELF"].'?year='.$start_year.'&modecompta=BOOKKEEPING">','</a>').')';
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	//$periodlink='<a href="'.$_SERVER["PHP_SELF"].'?year='.($year-1).'&modecompta='.$modecompta.'">'.img_previous().'</a> <a href="'.$_SERVER["PHP_SELF"].'?year='.($year+1).'&modecompta='.$modecompta.'">'.img_next().'</a>';
     	$description=$langs->trans("RulesResultDue");
     	if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.= $langs->trans("DepositsAreNotIncluded");
    @@ -179,25 +180,24 @@ if ($modecompta=="CREANCES-DETTES")
     	$builddate=dol_now();
     	//$exportlink=$langs->trans("NotYetAvailable");
     }
    -else if ($modecompta=="RECETTES-DEPENSES") {
    +elseif ($modecompta=="RECETTES-DEPENSES") {
     	$name=$langs->trans("AnnualByAccountInputOutputMode");
     	$calcmode=$langs->trans("CalcModeEngagement");
     	$calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?year='.$year.(GETPOST("month")>0?'&month='.GETPOST("month"):'').'&modecompta=CREANCES-DETTES">','</a>').')';
     	if (! empty($conf->accounting->enabled)) $calcmode.='<br>('.$langs->trans("SeeReportInBookkeepingMode",'<a href="'.$_SERVER["PHP_SELF"].'?year='.$year.'&modecompta=BOOKKEEPING">','</a>').')';
    -	//$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',1,1,0,'',1,0,1);
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	//$periodlink='<a href="'.$_SERVER["PHP_SELF"].'?year='.($year-1).'&modecompta='.$modecompta.'">'.img_previous().'</a> <a href="'.$_SERVER["PHP_SELF"].'?year='.($year+1).'&modecompta='.$modecompta.'">'.img_next().'</a>';
     	$description=$langs->trans("RulesResultInOut");
     	$builddate=dol_now();
     	//$exportlink=$langs->trans("NotYetAvailable");
     }
    -else if ($modecompta=="BOOKKEEPING")
    +elseif ($modecompta=="BOOKKEEPING")
     {
     	$name = $langs->trans("ReportInOut").', '.$langs->trans("ByPersonalizedAccountGroups");
     	$calcmode=$langs->trans("CalcModeBookkeeping");
     	//$calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">','</a>').')';
     	//$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	$arraylist=array('no'=>$langs->trans("No"), 'yes'=>$langs->trans("AccountWithNonZeroValues"), 'all'=>$langs->trans("All"));
     	$period.=' &nbsp; &nbsp; '.$langs->trans("DetailByAccount").' '. $form->selectarray('showaccountdetail', $arraylist, $showaccountdetail, 0);
     	$periodlink = $textprevyear . $textnextyear ;
    @@ -247,12 +247,12 @@ if ($modecompta == 'CREANCES-DETTES')
     	//if (! empty($date_start) && ! empty($date_end))
     	//	$sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'";
     }
    -else if ($modecompta=="RECETTES-DEPENSES")
    +elseif ($modecompta=="RECETTES-DEPENSES")
     {
     	//if (! empty($date_start) && ! empty($date_end))
     	//	$sql.= " AND p.datep >= '".$db->idate($date_start)."' AND p.datep <= '".$db->idate($date_end)."'";
     }
    -else if ($modecompta=="BOOKKEEPING")
    +elseif ($modecompta=="BOOKKEEPING")
     {
     
     	// Get array of all report groups that are active
    @@ -537,5 +537,6 @@ else if ($modecompta=="BOOKKEEPING")
     print "</table>";
     print '</div>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/salaries/card.php b/htdocs/compta/salaries/card.php
    index c4a2406e6d0..76ab712bffd 100644
    --- a/htdocs/compta/salaries/card.php
    +++ b/htdocs/compta/salaries/card.php
    @@ -1,8 +1,9 @@
     <?php
    -/* Copyright (C) 2011-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
    +/* Copyright (C) 2011-2018 Alexandre Spangaro   <aspangaro@zendsi.com>
      * Copyright (C) 2014      Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2015      Jean-François Ferry  <jfefe@aternatik.fr>
      * Copyright (C) 2015      Charlie BENKE        <charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,12 +30,20 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/salaries.lib.php';
    +if (! empty($conf->projet->enabled))
    +{
    +	require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    +	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
    +}
     
     // Load translation files required by the page
     $langs->loadLangs(array("compta","banks","bills","users","salaries","hrm"));
    +if (! empty($conf->projet->enabled))	$langs->load("projects");
     
     $id=GETPOST("id",'int');
     $action=GETPOST('action','aZ09');
    +$cancel= GETPOST('cancel', 'aZ09');
    +$projectid = (GETPOST('projectid','int') ? GETPOST('projectid', 'int') : GETPOST('fk_project','int'));
     
     // Security check
     $socid = GETPOST("socid","int");
    @@ -52,20 +61,27 @@ $hookmanager->initHooks(array('salarycard','globalcard'));
      * Actions
      */
     
    -if ($_POST["cancel"] == $langs->trans("Cancel"))
    +if ($cancel)
     {
     	header("Location: index.php");
     	exit;
     }
     
    -if ($action == 'add' && $_POST["cancel"] <> $langs->trans("Cancel"))
    +// Link to a project
    +if ($action == 'classin' && $user->rights->banque->modifier)
    +{
    +	$object->fetch($id);
    +	$object->setProject(GETPOST('projectid'));
    +}
    +
    +if ($action == 'add' && empty($cancel))
     {
     	$error=0;
     
    -	$datep=dol_mktime(12,0,0, $_POST["datepmonth"], $_POST["datepday"], $_POST["datepyear"]);
    -	$datev=dol_mktime(12,0,0, $_POST["datevmonth"], $_POST["datevday"], $_POST["datevyear"]);
    -	$datesp=dol_mktime(12,0,0, $_POST["datespmonth"], $_POST["datespday"], $_POST["datespyear"]);
    -	$dateep=dol_mktime(12,0,0, $_POST["dateepmonth"], $_POST["dateepday"], $_POST["dateepyear"]);
    +	$datep=dol_mktime(12,0,0, GETPOST("datepmonth",'int'), GETPOST("datepday",'int'), GETPOST("datepyear",'int'));
    +	$datev=dol_mktime(12,0,0, GETPOST("datevmonth",'int'), GETPOST("datevday",'int'), GETPOST("datevyear",'int'));
    +	$datesp=dol_mktime(12,0,0, GETPOST("datespmonth",'int'), GETPOST("datespday",'int'), GETPOST("datespyear",'int'));
    +	$dateep=dol_mktime(12,0,0, GETPOST("dateepmonth",'int'), GETPOST("dateepday",'int'), GETPOST("dateepyear",'int'));
     	if (empty($datev)) $datev=$datep;
     
     	$type_payment = dol_getIdFromCode($db, GETPOST("paymenttype", 'alpha'), 'c_paiement', 'code', 'id', 1);
    @@ -82,6 +98,7 @@ if ($action == 'add' && $_POST["cancel"] <> $langs->trans("Cancel"))
     	$object->type_payment=($type_payment > 0 ? $type_payment : 0);
     	$object->num_payment=GETPOST("num_payment");
     	$object->fk_user_author=$user->id;
    +	$object->fk_project= GETPOST('fk_project','int');
     
     	// Set user current salary as ref salaray for the payment
     	$fuser=new User($db);
    @@ -157,7 +174,7 @@ if ($action == 'delete')
     			if ($result >= 0)
     			{
     				$db->commit();
    -				header("Location: ".DOL_URL_ROOT.'/compta/salaries/index.php');
    +				header("Location: ".DOL_URL_ROOT.'/compta/salaries/list.php');
     				exit;
     			}
     			else
    @@ -187,6 +204,7 @@ if ($action == 'delete')
     llxHeader("",$langs->trans("SalaryPayment"));
     
     $form = new Form($db);
    +if (! empty($conf->projet->enabled)) $formproject = new FormProjets($db);
     
     if ($id)
     {
    @@ -238,13 +256,13 @@ if ($action == 'create')
     	// Date payment
     	print '<tr><td>';
     	print fieldLabel('DatePayment','datep',1).'</td><td>';
    -	print $form->select_date((empty($datep)?-1:$datep),"datep",'','','','add',1,1);
    +	print $form->selectDate((empty($datep)?-1:$datep), "datep", '', '', '', 'add', 1, 1);
     	print '</td></tr>';
     
     	// Date value for bank
     	print '<tr><td>';
     	print fieldLabel('DateValue','datev',0).'</td><td>';
    -	print $form->select_date((empty($datev)?-1:$datev),"datev",'','','','add',1,1);
    +	print $form->selectDate((empty($datev)?-1:$datev), "datev", '', '', '', 'add', 1, 1);
     	print '</td></tr>';
     
     	// Employee
    @@ -263,13 +281,13 @@ if ($action == 'create')
     	// Date start period
     	print '<tr><td>';
     	print fieldLabel('DateStartPeriod','datesp',1).'</td><td>';
    -	print $form->select_date($datesp,"datesp",'','','','add');
    +	print $form->selectDate($datesp, "datesp", '', '', '', 'add');
     	print '</td></tr>';
     
     	// Date end period
     	print '<tr><td>';
     	print fieldLabel('DateEndPeriod','dateep',1).'</td><td>';
    -	print $form->select_date($dateep,"dateep",'','','','add');
    +	print $form->selectDate($dateep, "dateep", '', '', '', 'add');
     	print '</td></tr>';
     
     	// Amount
    @@ -278,6 +296,18 @@ if ($action == 'create')
     	print '<input name="amount" id="amount" class="minwidth100" value="'.GETPOST("amount").'">';
     	print '</td></tr>';
     
    +	// Project
    +	if (! empty($conf->projet->enabled))
    +	{
    +		$formproject=new FormProjets($db);
    +
    +		print '<tr><td>'.$langs->trans("Project").'</td><td>';
    +
    +		$numproject=$formproject->select_projects(-1, $projectid,'fk_project',0,0,1,1);
    +
    +		print '</td></tr>';
    +	}
    +
     	// Bank
     	if (! empty($conf->banque->enabled))
     	{
    @@ -335,14 +365,46 @@ if ($id)
     
     	dol_fiche_head($head, 'card', $langs->trans("SalaryPayment"), -1, 'payment');
     
    -    $linkback = '<a href="'.DOL_URL_ROOT.'/compta/salaries/index.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
    +	$linkback = '<a href="'.DOL_URL_ROOT.'/compta/salaries/list.php?restore_lastsearch_values=1'.(! empty($socid)?'&socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
     
     	$morehtmlref='<div class="refidno">';
     
    +	// Employee
     	$userstatic=new User($db);
     	$userstatic->fetch($object->fk_user);
    -
     	$morehtmlref.=$langs->trans('Employee') . ' : ' . $userstatic->getNomUrl(1);
    +
    +	// Project
    +	if (! empty($conf->projet->enabled))
    +	{
    +		$morehtmlref.='<br>'.$langs->trans('Project') . ' ';
    +		if ($user->rights->salaries->write)
    +		{
    +			if ($action != 'classify')
    +				$morehtmlref.='<a href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
    +				if ($action == 'classify') {
    +					//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
    +					$morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
    +					$morehtmlref.='<input type="hidden" name="action" value="classin">';
    +					$morehtmlref.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +					$morehtmlref.=$formproject->select_projects(0, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
    +					$morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
    +					$morehtmlref.='</form>';
    +				} else {
    +					$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1);
    +				}
    +		} else {
    +			if (! empty($object->fk_project)) {
    +				$proj = new Project($db);
    +				$proj->fetch($object->fk_project);
    +				$morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id=' . $object->fk_project . '" title="' . $langs->trans('ShowProject') . '">';
    +				$morehtmlref.=$proj->ref;
    +				$morehtmlref.='</a>';
    +			} else {
    +				$morehtmlref.='';
    +			}
    +		}
    +	}
     	$morehtmlref.='</div>';
     
     	dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', $morehtmlref, '', 0, '', '');
    @@ -425,8 +487,6 @@ if ($id)
     	print "</div>";
     }
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/salaries/class/paymentsalary.class.php b/htdocs/compta/salaries/class/paymentsalary.class.php
    index 3a3f34b85b4..76a8284daff 100644
    --- a/htdocs/compta/salaries/class/paymentsalary.class.php
    +++ b/htdocs/compta/salaries/class/paymentsalary.class.php
    @@ -1,6 +1,6 @@
     <?php
    -/* Copyright (C) 2011-2015 Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
    - * Copyright (C) 2014	   Juanjo Menent		<jmenent@2byte.es>
    +/* Copyright (C) 2011-2018 Alexandre Spangaro   <aspangaro@zendsi.com>
    + * Copyright (C) 2014      Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -17,9 +17,9 @@
      */
     
     /**
    - *      \file       htdocs/compta/salaries/class/paymentsalary.class.php
    - *      \ingroup    salaries
    - *      \brief		Class for salaries module payment
    + *  \file       htdocs/compta/salaries/class/paymentsalary.class.php
    + *  \ingroup    salaries
    + *  \brief      Class for salaries module payment
      */
     
     // Put here all includes required by your class file
    @@ -31,22 +31,61 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class PaymentSalary extends CommonObject
     {
    -	public $element='payment_salary';			//!< Id that identify managed objects
    -	public $table_element='payment_salary';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='payment_salary';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='payment_salary';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto='payment';
     
     	public $tms;
    +
    +	/**
    +	 * @var int User ID
    +	 */
     	public $fk_user;
    +
     	public $datep;
     	public $datev;
     	public $amount;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_project;
    +
     	public $type_payment;
     	public $num_payment;
    -	public $label;
    +
    +	/**
    +     * @var string salary payments label
    +     */
    +    public $label;
    +
     	public $datesp;
     	public $dateep;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_bank;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_author;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_modif;
     
     
    @@ -60,7 +99,6 @@ class PaymentSalary extends CommonObject
     		$this->db = $db;
     		$this->element = 'payment_salary';
     		$this->table_element = 'payment_salary';
    -		return 1;
     	}
     
     	/**
    @@ -102,6 +140,7 @@ class PaymentSalary extends CommonObject
     		$sql.= " datep='".$this->db->idate($this->datep)."',";
     		$sql.= " datev='".$this->db->idate($this->datev)."',";
     		$sql.= " amount=".price2num($this->amount).",";
    +		$sql.= " fk_projet='".$this->db->escape($this->fk_project)."',";
     		$sql.= " fk_typepayment=".$this->fk_typepayment."',";
     		$sql.= " num_payment='".$this->db->escape($this->num_payment)."',";
     		$sql.= " label='".$this->db->escape($this->label)."',";
    @@ -161,6 +200,7 @@ class PaymentSalary extends CommonObject
     		$sql.= " s.datep,";
     		$sql.= " s.datev,";
     		$sql.= " s.amount,";
    +		$sql.= " s.fk_projet as fk_project,";
     		$sql.= " s.fk_typepayment,";
     		$sql.= " s.num_payment,";
     		$sql.= " s.label,";
    @@ -186,25 +226,26 @@ class PaymentSalary extends CommonObject
     			{
     				$obj = $this->db->fetch_object($resql);
     
    -				$this->id    = $obj->rowid;
    -				$this->ref   = $obj->rowid;
    -				$this->tms   = $this->db->jdate($obj->tms);
    -				$this->fk_user = $obj->fk_user;
    -				$this->datep = $this->db->jdate($obj->datep);
    -				$this->datev = $this->db->jdate($obj->datev);
    -				$this->amount = $obj->amount;
    -				$this->type_payement = $obj->fk_typepayment;
    -				$this->num_payment = $obj->num_payment;
    -				$this->label = $obj->label;
    -				$this->datesp = $this->db->jdate($obj->datesp);
    -				$this->dateep = $this->db->jdate($obj->dateep);
    -				$this->note  = $obj->note;
    -				$this->fk_bank = $obj->fk_bank;
    -				$this->fk_user_author = $obj->fk_user_author;
    -				$this->fk_user_modif = $obj->fk_user_modif;
    -				$this->fk_account = $obj->fk_account;
    -				$this->fk_type = $obj->fk_type;
    -				$this->rappro  = $obj->rappro;
    +				$this->id				= $obj->rowid;
    +				$this->ref				= $obj->rowid;
    +				$this->tms				= $this->db->jdate($obj->tms);
    +				$this->fk_user			= $obj->fk_user;
    +				$this->datep			= $this->db->jdate($obj->datep);
    +				$this->datev			= $this->db->jdate($obj->datev);
    +				$this->amount			= $obj->amount;
    +				$this->fk_project		= $obj->fk_project;
    +				$this->type_payement	= $obj->fk_typepayment;
    +				$this->num_payment		= $obj->num_payment;
    +				$this->label			= $obj->label;
    +				$this->datesp			= $this->db->jdate($obj->datesp);
    +				$this->dateep			= $this->db->jdate($obj->dateep);
    +				$this->note				= $obj->note;
    +				$this->fk_bank			= $obj->fk_bank;
    +				$this->fk_user_author	= $obj->fk_user_author;
    +				$this->fk_user_modif	= $obj->fk_user_modif;
    +				$this->fk_account		= $obj->fk_account;
    +				$this->fk_type			= $obj->fk_type;
    +				$this->rappro			= $obj->rappro;
     			}
     			$this->db->free($resql);
     
    @@ -276,12 +317,12 @@ class PaymentSalary extends CommonObject
     		$this->fk_user_modif='';
     	}
     
    -    /**
    -     *  Create in database
    -     *
    -     *  @param      User	$user       User that create
    -     *  @return     int      			<0 if KO, >0 if OK
    -     */
    +	/**
    +	 *  Create in database
    +	 *
    +	 *  @param      User	$user       User that create
    +	 *  @return     int      			<0 if KO, >0 if OK
    +	 */
     	function create($user)
     	{
     		global $conf,$langs;
    @@ -331,6 +372,7 @@ class PaymentSalary extends CommonObject
     		$sql.= ", datep";
     		$sql.= ", datev";
     		$sql.= ", amount";
    +		$sql.= ", fk_projet";
     		$sql.= ", salary";
     		$sql.= ", fk_typepayment";
     		$sql.= ", num_payment";
    @@ -348,6 +390,7 @@ class PaymentSalary extends CommonObject
     		$sql.= ", '".$this->db->idate($this->datep)."'";
     		$sql.= ", '".$this->db->idate($this->datev)."'";
     		$sql.= ", ".$this->amount;
    +		$sql.= ", ".($this->fk_project > 0? $this->fk_project : 0);
     		$sql.= ", ".($this->salary > 0 ? $this->salary : "null");
     		$sql.= ", ".$this->db->escape($this->type_payment);
     		$sql.= ", '".$this->db->escape($this->num_payment)."'";
    @@ -444,7 +487,6 @@ class PaymentSalary extends CommonObject
     	            $result=$this->call_trigger('PAYMENT_SALARY_CREATE',$user);
     	            if ($result < 0) $error++;
     	            // End call triggers
    -
     			}
     			else $error++;
     
    @@ -467,6 +509,7 @@ class PaymentSalary extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update link between payment salary and line generate into llx_bank
     	 *
    @@ -475,6 +518,7 @@ class PaymentSalary extends CommonObject
     	 */
     	function update_fk_bank($id_bank)
     	{
    +        // phpcs:enable
     		$sql = 'UPDATE '.MAIN_DB_PREFIX.'payment_salary SET fk_bank = '.$id_bank;
     		$sql.= ' WHERE rowid = '.$this->id;
     		$result = $this->db->query($sql);
    @@ -493,26 +537,73 @@ class PaymentSalary extends CommonObject
     	/**
     	 *	Send name clicable (with possibly the picto)
     	 *
    -	 *	@param	int		$withpicto		0=No picto, 1=Include picto into link, 2=Only picto
    -	 *	@param	string	$option			link option
    -	 *	@return	string					Chaine with URL
    +	 *	@param	int		$withpicto					0=No picto, 1=Include picto into link, 2=Only picto
    +	 *	@param	string	$option						link option
    +     *  @param	int  	$notooltip					1=Disable tooltip
    +     *  @param  string  $morecss            		Add more css on link
    +     *  @param  int     $save_lastsearch_value    	-1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    +	 *	@return	string								Chaine with URL
     	 */
    -	function getNomUrl($withpicto=0,$option='')
    +	function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
     	{
    -		global $langs;
    +		global $db, $conf, $langs, $hookmanager;
    +		global $dolibarr_main_authentication, $dolibarr_main_demo;
    +		global $menumanager;
     
    -		$result='';
    -        $label=$langs->trans("ShowSalaryPayment").': '.$this->ref;
    +		if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
     
    -        $linkstart = '<a href="'.DOL_URL_ROOT.'/compta/salaries/card.php?id='.$this->id.'" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
    +		$result = '';
    +
    +		$label = '<u>' . $langs->trans("ShowSalaryPayment") . '</u>';
    +		$label.= '<br>';
    +		$label.= '<b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
    +
    +		$url = DOL_URL_ROOT.'/compta/salaries/card.php?id='.$this->id;
    +
    +		if ($option != 'nolink')
    +		{
    +			// Add param to save lastsearch_values or not
    +			$add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    +			if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1;
    +			if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
    +		}
    +
    +		$linkclose='';
    +		if (empty($notooltip))
    +		{
    +			if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
    +			{
    +				$label=$langs->trans("ShowMyObject");
    +				$linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    +			}
    +			$linkclose.=' title="'.dol_escape_htmltag($label, 1).'"';
    +			$linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"';
    +
    +			/*
    +			 $hookmanager->initHooks(array('myobjectdao'));
    +			 $parameters=array('id'=>$this->id);
    +			 $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +			 if ($reshook > 0) $linkclose = $hookmanager->resPrint;
    +			 */
    +		}
    +		else $linkclose = ($morecss?' class="'.$morecss.'"':'');
    +
    +		$linkstart = '<a href="'.$url.'"';
    +		$linkstart.=$linkclose.'>';
     		$linkend='</a>';
     
    -		$picto='payment';
    -
     		$result .= $linkstart;
     		if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
     		if ($withpicto != 2) $result.= $this->ref;
     		$result .= $linkend;
    +		//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');
    +
    +		global $action,$hookmanager;
    +		$hookmanager->initHooks(array('salarypayment'));
    +		$parameters=array('id'=>$this->id, 'getnomurl'=>$result);
    +		$reshook=$hookmanager->executeHooks('getNomUrl',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +		if ($reshook > 0) $result = $hookmanager->resPrint;
    +		else $result .= $hookmanager->resPrint;
     
     		return $result;
     	}
    @@ -566,6 +657,7 @@ class PaymentSalary extends CommonObject
     	    return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Renvoi le libelle d'un statut donne
     	 *
    @@ -575,6 +667,7 @@ class PaymentSalary extends CommonObject
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     	    global $langs;	// TODO Renvoyer le libelle anglais et faire traduction a affichage
     
     	    $langs->load('compta');
    @@ -615,5 +708,4 @@ class PaymentSalary extends CommonObject
     	    }*/
     	    return '';
     	}
    -
     }
    diff --git a/htdocs/compta/salaries/class/salariesstats.class.php b/htdocs/compta/salaries/class/salariesstats.class.php
    index 647dc27f4a5..82a8d094148 100644
    --- a/htdocs/compta/salaries/class/salariesstats.class.php
    +++ b/htdocs/compta/salaries/class/salariesstats.class.php
    @@ -29,6 +29,9 @@ include_once DOL_DOCUMENT_ROOT . '/compta/salaries/class/paymentsalary.class.php
      */
     class SalariesStats extends Stats
     {
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element;
     
     	var $socid;
    diff --git a/htdocs/compta/salaries/document.php b/htdocs/compta/salaries/document.php
    index 49d283522ee..33e92ecaf3b 100644
    --- a/htdocs/compta/salaries/document.php
    +++ b/htdocs/compta/salaries/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2011-2012 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -91,7 +91,7 @@ if ($object->id)
     
     	dol_fiche_head($head, 'documents',  $langs->trans("SalaryPayment"), -1, 'payment');
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -99,7 +99,7 @@ if ($object->id)
     		$totalsize+=$file['size'];
     	}
     
    -	$linkback = '<a href="'.DOL_URL_ROOT.'/compta/salaries/index.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
    +	$linkback = '<a href="'.DOL_URL_ROOT.'/compta/salaries/list.php?restore_lastsearch_values=1'.(! empty($socid)?'&socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
     
     	$morehtmlref='<div class="refidno">';
     
    @@ -127,13 +127,12 @@ if ($object->id)
     	$permission = $user->rights->salaries->write;
     	$param = '&id=' . $object->id;
     	include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
     }
     else
     {
     	print $langs->trans("ErrorUnknown");
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/salaries/info.php b/htdocs/compta/salaries/info.php
    index 467abe3618c..87d24ceb406 100644
    --- a/htdocs/compta/salaries/info.php
    +++ b/htdocs/compta/salaries/info.php
    @@ -54,7 +54,7 @@ $head = salaries_prepare_head($object);
     
     dol_fiche_head($head, 'info', $langs->trans("SalaryPayment"), -1, 'payment');
     
    -$linkback = '<a href="'.DOL_URL_ROOT.'/compta/salaries/index.php'.(! empty($socid)?'?socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
    +$linkback = '<a href="'.DOL_URL_ROOT.'/compta/salaries/list.php?restore_lastsearch_values=1'.(! empty($socid)?'&socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
     
     $morehtmlref='<div class="refidno">';
     
    @@ -79,6 +79,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/salaries/index.php b/htdocs/compta/salaries/list.php
    similarity index 99%
    rename from htdocs/compta/salaries/index.php
    rename to htdocs/compta/salaries/list.php
    index 73f50b57564..c7f5970723e 100644
    --- a/htdocs/compta/salaries/index.php
    +++ b/htdocs/compta/salaries/list.php
    @@ -18,7 +18,7 @@
      */
     
     /**
    - *	    \file       htdocs/compta/salaries/index.php
    + *	    \file       htdocs/compta/salaries/list.php
      *      \ingroup    salaries
      *		\brief     	List of salaries payments
      */
    @@ -231,6 +231,7 @@ if ($result)
     
             $salstatic->id=$obj->rowid;
     		$salstatic->ref=$obj->rowid;
    +
             // Ref
     		print "<td>".$salstatic->getNomUrl(1)."</td>\n";
     		// Employee
    @@ -294,6 +295,6 @@ else
         dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/salaries/stats/index.php b/htdocs/compta/salaries/stats/index.php
    index 090629ba97d..6471f66cf57 100644
    --- a/htdocs/compta/salaries/stats/index.php
    +++ b/htdocs/compta/salaries/stats/index.php
    @@ -187,7 +187,7 @@ $head[$h][1] = $langs->trans("ByMonthYear");
     $head[$h][2] = 'byyear';
     $h++;
     
    -complete_head_from_modules($conf,$langs,null,$head,$h,'trip_stats');
    +complete_head_from_modules($conf,$langs,null,$head,$h,'salaries_stats');
     
     dol_fiche_head($head, 'byyear', $langs->trans("Statistics"), -1);
     
    @@ -197,7 +197,7 @@ print '<div class="fichecenter"><div class="fichethirdleft">';
     
     // Show filter box
     print '<form name="stats" method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    -print '<table class="border" width="100%">';
    +print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre"><td class="liste_titre" colspan="2">'.$langs->trans("Filter").'</td></tr>';
     // User
     print '<tr><td>'.$langs->trans("User").'</td><td>';
    @@ -214,8 +214,9 @@ print '</table>';
     print '</form>';
     print '<br><br>';
     
    -print '<table class="border" width="100%">';
    -print '<tr>';
    +print '<div class="div-table-responsive-no-min">';
    +print '<table class="noborder" width="100%">';
    +print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
     print '<td align="right">'.$langs->trans("Number").'</td>';
     print '<td align="right">'.$langs->trans("AmountTotal").'</td>';
    @@ -230,14 +231,16 @@ foreach ($data as $val)
     	{
     		// If we have empty year
     		$oldyear--;
    -		print '<tr height="24">';
    +
    +		print '<tr class="oddeven" height="24">';
     		print '<td align="center"><a href="'.$_SERVER["PHP_SELF"].'?year='.$oldyear.'">'.$oldyear.'</a></td>';
     		print '<td align="right">0</td>';
     		print '<td align="right">0</td>';
     		print '<td align="right">0</td>';
     		print '</tr>';
     	}
    -	print '<tr height="24">';
    +
    +	print '<tr class="oddeven" height="24">';
     	print '<td align="center"><a href="'.$_SERVER["PHP_SELF"].'?year='.$year.'">'.$year.'</a></td>';
     	print '<td align="right">'.$val['nb'].'</td>';
     	print '<td align="right">'.price(price2num($val['total'],'MT'),1).'</td>';
    @@ -247,6 +250,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    +print '</div>';
     
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
    @@ -271,7 +275,6 @@ print '<div style="clear:both"></div>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/sociales/card.php b/htdocs/compta/sociales/card.php
    index 4fc9eb00bcd..6a0d53d6987 100644
    --- a/htdocs/compta/sociales/card.php
    +++ b/htdocs/compta/sociales/card.php
    @@ -1,8 +1,8 @@
     <?php
    -/* Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2016      Frédéric France      <frederic.france@free.fr>
    - * Copyright (C) 2017      Alexandre Spangaro   <aspangaro@zendsi.com>
    +/* Copyright (C) 2004-2016 Laurent Destailleur      <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2013 Regis Houssin            <regis.houssin@inodbox.com>
    + * Copyright (C) 2016-2018 Frédéric France          <frederic.france@netlogic.fr>
    + * Copyright (C) 2017      Alexandre Spangaro       <aspangaro@zendsi.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,11 +32,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/tax.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     if (! empty($conf->projet->enabled))
     {
    -	require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    -	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
    +	include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    +	include_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
     }
     if (! empty($conf->accounting->enabled)) {
    -	require_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingjournal.class.php';
    +	include_once DOL_DOCUMENT_ROOT . '/accountancy/class/accountingjournal.class.php';
     }
     
     // Load translation files required by the page
    @@ -332,7 +332,7 @@ if ($action == 'create')
     	print $form->textwithpicto($langs->trans("PeriodEndDate"), $langs->trans("LastDayTaxIsRelatedTo"));
     	print '</td>';
        	print '<td>';
    -	print $form->select_date(! empty($dateperiod)?$dateperiod:'-1', 'period', 0, 0, 0, 'charge', 1);
    +	print $form->selectDate(! empty($dateperiod)?$dateperiod:'-1', 'period', 0, 0, 0, 'charge', 1);
     	print '</td>';
     	print '</tr>';
     
    @@ -342,7 +342,7 @@ if ($action == 'create')
     	print $langs->trans("DateDue");
     	print '</td>';
     	print '<td>';
    -	print $form->select_date(! empty($dateech)?$dateech:'-1', 'ech', 0, 0, 0, 'charge', 1);
    +	print $form->selectDate(! empty($dateech)?$dateech:'-1', 'ech', 0, 0, 0, 'charge', 1);
     	print '</td>';
     	print "</tr>\n";
     
    @@ -481,7 +481,7 @@ if ($id > 0)
     		}
     		$morehtmlref.='</div>';
     
    -		$linkback = '<a href="' . DOL_URL_ROOT . '/compta/sociales/index.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>';
    +		$linkback = '<a href="' . DOL_URL_ROOT . '/compta/sociales/list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>';
     
     		$object->totalpaye = $totalpaye;   // To give a chance to dol_banner_tab to use already paid amount to show correct status
     
    @@ -502,7 +502,7 @@ if ($id > 0)
     		print "<td>";
     		if ($action == 'edit')
     		{
    -			print $form->select_date($object->periode, 'period', 0, 0, 0, 'charge', 1);
    +			print $form->selectDate($object->periode, 'period', 0, 0, 0, 'charge', 1);
     		}
     		else
     		{
    @@ -514,10 +514,9 @@ if ($id > 0)
     		if ($action == 'edit')
     		{
     			print '<tr><td>'.$langs->trans("DateDue")."</td><td>";
    -			print $form->select_date($object->date_ech, 'ech', 0, 0, 0, 'charge', 1);
    +			print $form->selectDate($object->date_ech, 'ech', 0, 0, 0, 'charge', 1);
     			print "</td></tr>";
    -		}
    -		else {
    +		} else {
     			print "<tr><td>".$langs->trans("DateDue")."</td><td>".dol_print_date($object->date_ech,'day')."</td></tr>";
     		}
     
    @@ -750,7 +749,6 @@ if ($id > 0)
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/sociales/class/cchargesociales.class.php b/htdocs/compta/sociales/class/cchargesociales.class.php
    index a44b820c8ea..710bea7def2 100644
    --- a/htdocs/compta/sociales/class/cchargesociales.class.php
    +++ b/htdocs/compta/sociales/class/cchargesociales.class.php
    @@ -25,7 +25,7 @@
      */
     
     // Put here all includes required by your class file
    -require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
    +//require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
     //require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
     //require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
     
    @@ -38,25 +38,25 @@ class Cchargesociales
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'cchargesociales';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'c_chargesociales';
     
    -	/**
    -	 */
    -	
     	public $libelle;
     	public $deductible;
     	public $active;
     	public $code;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_pays;
    +
     	public $module;
     	public $accountancy_code;
     
    -	/**
    -	 */
    -	
     
     	/**
     	 * Constructor
    @@ -82,38 +82,25 @@ class Cchargesociales
     
     		$error = 0;
     
    -		// Clean parameters
    -		
    -		if (isset($this->libelle)) {
    -			 $this->libelle = trim($this->libelle);
    -		}
    -		if (isset($this->deductible)) {
    -			 $this->deductible = trim($this->deductible);
    -		}
    -		if (isset($this->active)) {
    -			 $this->active = trim($this->active);
    -		}
    -		if (isset($this->code)) {
    -			 $this->code = trim($this->code);
    -		}
    -		if (isset($this->fk_pays)) {
    -			 $this->fk_pays = trim($this->fk_pays);
    -		}
    -		if (isset($this->module)) {
    -			 $this->module = trim($this->module);
    -		}
    -		if (isset($this->accountancy_code)) {
    -			 $this->accountancy_code = trim($this->accountancy_code);
    -		}
    -
    -		
    +        // Clean parameters
    +        $this->trimParameters(
    +            array(
    +                'libelle',
    +                'deductible',
    +                'active',
    +                'code',
    +                'fk_pays',
    +                'module',
    +                'accountancy_code',
    +            )
    +        );
     
     		// Check parameters
     		// Put here code to add control on parameters values
     
     		// Insert request
     		$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '(';
    -		
    +
     		$sql.= 'libelle,';
     		$sql.= 'deductible,';
     		$sql.= 'active,';
    @@ -122,9 +109,9 @@ class Cchargesociales
     		$sql.= 'module';
     		$sql.= 'accountancy_code';
     
    -		
    +
     		$sql .= ') VALUES (';
    -		
    +
     		$sql .= ' '.(! isset($this->libelle)?'NULL':"'".$this->db->escape($this->libelle)."'").',';
     		$sql .= ' '.(! isset($this->deductible)?'NULL':$this->deductible).',';
     		$sql .= ' '.(! isset($this->active)?'NULL':$this->active).',';
    @@ -133,7 +120,7 @@ class Cchargesociales
     		$sql .= ' '.(! isset($this->module)?'NULL':"'".$this->db->escape($this->module)."'").',';
     		$sql .= ' '.(! isset($this->accountancy_code)?'NULL':"'".$this->db->escape($this->accountancy_code)."'");
     
    -		
    +
     		$sql .= ')';
     
     		$this->db->begin();
    @@ -148,7 +135,7 @@ class Cchargesociales
     		if (!$error) {
     			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
     
    -			if (!$notrigger) {
    +			//if (!$notrigger) {
     				// Uncomment this and change MYOBJECT to your own tag if you
     				// want this action to call a trigger.
     
    @@ -156,7 +143,7 @@ class Cchargesociales
     				//$result=$this->call_trigger('MYOBJECT_CREATE',$user);
     				//if ($result < 0) $error++;
     				//// End call triggers
    -			}
    +			//}
     		}
     
     		// Commit or rollback
    @@ -206,7 +193,7 @@ class Cchargesociales
     				$obj = $this->db->fetch_object($resql);
     
     				$this->id = $obj->id;
    -				
    +
     				$this->libelle = $obj->libelle;
     				$this->deductible = $obj->deductible;
     				$this->active = $obj->active;
    @@ -214,8 +201,6 @@ class Cchargesociales
     				$this->fk_pays = $obj->fk_pays;
     				$this->module = $obj->module;
     				$this->accountancy_code = $obj->accountancy_code;
    -
    -				
     			}
     			$this->db->free($resql);
     
    @@ -247,30 +232,19 @@ class Cchargesociales
     		dol_syslog(__METHOD__, LOG_DEBUG);
     
     		// Clean parameters
    -		
    -		if (isset($this->libelle)) {
    -			 $this->libelle = trim($this->libelle);
    -		}
    -		if (isset($this->deductible)) {
    -			 $this->deductible = trim($this->deductible);
    -		}
    -		if (isset($this->active)) {
    -			 $this->active = trim($this->active);
    -		}
    -		if (isset($this->code)) {
    -			 $this->code = trim($this->code);
    -		}
    -		if (isset($this->fk_pays)) {
    -			 $this->fk_pays = trim($this->fk_pays);
    -		}
    -		if (isset($this->module)) {
    -			 $this->module = trim($this->module);
    -		}
    -		if (isset($this->accountancy_code)) {
    -			 $this->accountancy_code = trim($this->accountancy_code);
    -		}
     
    -		
    +        $this->trimParameters(
    +            array(
    +                'libelle',
    +                'deductible',
    +                'active',
    +                'code',
    +                'fk_pays',
    +                'module',
    +                'accountancy_code',
    +            )
    +        );
    +
     
     		// Check parameters
     		// Put here code to add a control on parameters values
    @@ -295,7 +269,7 @@ class Cchargesociales
     			dol_syslog(__METHOD__ . ' ' . join(',', $this->errors), LOG_ERR);
     		}
     
    -		if (!$error && !$notrigger) {
    +		//if (!$error && !$notrigger) {
     			// Uncomment this and change MYOBJECT to your own tag if you
     			// want this action calls a trigger.
     
    @@ -303,7 +277,7 @@ class Cchargesociales
     			//$result=$this->call_trigger('MYOBJECT_MODIFY',$user);
     			//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
     			//// End call triggers
    -		}
    +		//}
     
     		// Commit or rollback
     		if ($error) {
    @@ -333,8 +307,8 @@ class Cchargesociales
     
     		$this->db->begin();
     
    -		if (!$error) {
    -			if (!$notrigger) {
    +		//if (!$error) {
    +			//if (!$notrigger) {
     				// Uncomment this and change MYOBJECT to your own tag if you
     				// want this action calls a trigger.
     
    @@ -342,8 +316,8 @@ class Cchargesociales
     				//$result=$this->call_trigger('MYOBJECT_DELETE',$user);
     				//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
     				//// End call triggers
    -			}
    -		}
    +			//}
    +		//}
     
     		if (!$error) {
     			$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element;
    @@ -454,7 +428,7 @@ class Cchargesociales
     		$result.= $link . $this->ref . $linkend;
     		return $result;
     	}
    -	
    +
     	/**
     	 *  Retourne le libelle du status d'un user (actif, inactif)
     	 *
    @@ -466,6 +440,7 @@ class Cchargesociales
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un status donne
     	 *
    @@ -475,42 +450,42 @@ class Cchargesociales
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
    -			$prefix='';
     			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    +			elseif ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    +			elseif ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
     		}
     	}
    -	
    -	
    +
    +
     	/**
     	 * Initialise object with example values
     	 * Id must be 0 if object instance is a specimen
    @@ -520,7 +495,7 @@ class Cchargesociales
     	public function initAsSpecimen()
     	{
     		$this->id = 0;
    -		
    +
     		$this->libelle = '';
     		$this->deductible = '';
     		$this->active = '';
    @@ -528,8 +503,21 @@ class Cchargesociales
     		$this->fk_pays = '';
     		$this->module = '';
     		$this->accountancy_code = '';
    -
    -		
     	}
     
    +    /**
    +     * Trim object parameters
    +     * @param string[] $parameters array of parameters to trim
    +     *
    +     * @return void
    +     */
    +    private function trimParameters($parameters)
    +    {
    +        if (!is_array($parameters)) return;
    +        foreach ($parameters as $parameter) {
    +            if (isset($this->$parameter)) {
    +                $this->$parameter = trim($this->$parameter);
    +            }
    +        }
    +    }
     }
    diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php
    index 65e6085a650..cca5a4d7dd2 100644
    --- a/htdocs/compta/sociales/class/chargesociales.class.php
    +++ b/htdocs/compta/sociales/class/chargesociales.class.php
    @@ -32,9 +32,21 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class ChargeSociales extends CommonObject
     {
    -    public $element='chargesociales';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='chargesociales';
    +
         public $table='chargesociales';
    -    public $table_element='chargesociales';
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='chargesociales';
    +
    +    /**
    +     * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +     */
         public $picto = 'bill';
     
         /**
    @@ -42,18 +54,26 @@ class ChargeSociales extends CommonObject
          */
         protected $table_ref_field = 'ref';
     
    -    var $date_ech;
    -    var $lib;
    -    var $type;
    -    var $type_libelle;
    -    var $amount;
    -    var $paye;
    -    var $periode;
    -    var $date_creation;
    -    var $date_modification;
    -    var $date_validation;
    -    var $fk_account;
    -	var $fk_project;
    +    public $date_ech;
    +    public $lib;
    +    public $type;
    +    public $type_libelle;
    +    public $amount;
    +    public $paye;
    +    public $periode;
    +    public $date_creation;
    +    public $date_modification;
    +    public $date_validation;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_account;
    +
    +    /**
    +     * @var int ID
    +     */
    +	public $fk_project;
     
     
         /**
    @@ -64,7 +84,6 @@ class ChargeSociales extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
         /**
    @@ -280,7 +299,6 @@ class ChargeSociales extends CommonObject
                 $this->db->rollback();
                 return -1;
             }
    -
         }
     
     
    @@ -350,7 +368,6 @@ class ChargeSociales extends CommonObject
                 {
                     return 0;
                 }
    -
             }
             else
             {
    @@ -359,6 +376,7 @@ class ChargeSociales extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Tag social contribution as payed completely
          *
    @@ -367,6 +385,7 @@ class ChargeSociales extends CommonObject
          */
         function set_paid($user)
         {
    +        // phpcs:enable
             $sql = "UPDATE ".MAIN_DB_PREFIX."chargesociales SET";
             $sql.= " paye = 1";
             $sql.= " WHERE rowid = ".$this->id;
    @@ -374,6 +393,8 @@ class ChargeSociales extends CommonObject
             if ($return) return 1;
             else return -1;
         }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Remove tag payed on social contribution
          *
    @@ -382,6 +403,7 @@ class ChargeSociales extends CommonObject
          */
         function set_unpaid($user)
         {
    +        // phpcs:enable
             $sql = "UPDATE ".MAIN_DB_PREFIX."chargesociales SET";
             $sql.= " paye = 0";
             $sql.= " WHERE rowid = ".$this->id;
    @@ -402,6 +424,7 @@ class ChargeSociales extends CommonObject
             return $this->LibStatut($this->paye,$mode,$alreadypaid);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Renvoi le libelle d'un statut donne
          *
    @@ -412,52 +435,49 @@ class ChargeSociales extends CommonObject
          */
         function LibStatut($statut,$mode=0,$alreadypaid=-1)
         {
    +        // phpcs:enable
             global $langs;
    -        $langs->load('customers');
    -        $langs->load('bills');
     
    -        if ($mode == 0)
    +        // Load translation files required by the page
    +        $langs->loadLangs(array("customers","bills"));
    +
    +        if ($mode == 0 || $mode == 1)
             {
                 if ($statut ==  0) return $langs->trans("Unpaid");
                 if ($statut ==  1) return $langs->trans("Paid");
             }
    -        if ($mode == 1)
    -        {
    -            if ($statut ==  0) return $langs->trans("Unpaid");
    -            if ($statut ==  1) return $langs->trans("Paid");
    -        }
    -        if ($mode == 2)
    +        elseif ($mode == 2)
             {
                 if ($statut ==  0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid");
                 if ($statut ==  0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted");
                 if ($statut ==  1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid");
             }
    -        if ($mode == 3)
    +        elseif ($mode == 3)
             {
                 if ($statut ==  0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1');
                 if ($statut ==  0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3');
                 if ($statut ==  1) return img_picto($langs->trans("Paid"), 'statut6');
             }
    -        if ($mode == 4)
    +        elseif ($mode == 4)
             {
                 if ($statut ==  0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid");
                 if ($statut ==  0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted");
                 if ($statut ==  1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid");
             }
    -        if ($mode == 5)
    +        elseif ($mode == 5)
             {
                 if ($statut ==  0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1');
                 if ($statut ==  0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3');
                 if ($statut ==  1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6');
             }
    -        if ($mode == 6)
    +        elseif ($mode == 6)
             {
                 if ($statut ==  0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1');
                 if ($statut ==  0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3');
                 if ($statut ==  1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6');
             }
     
    -        return "Error, mode/status not found";
    +        else return "Error, mode/status not found";
         }
     
     
    @@ -606,7 +626,6 @@ class ChargeSociales extends CommonObject
                 }
     
                 $this->db->free($result);
    -
             }
             else
             {
    @@ -637,4 +656,3 @@ class ChargeSociales extends CommonObject
             $this->type_libelle = 'Social contribution label';
         }
     }
    -
    diff --git a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php
    index ba9c671f755..d3c265150d4 100644
    --- a/htdocs/compta/sociales/class/paymentsocialcontribution.class.php
    +++ b/htdocs/compta/sociales/class/paymentsocialcontribution.class.php
    @@ -31,26 +31,60 @@ require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'
      */
     class PaymentSocialContribution extends CommonObject
     {
    -	public $element='paiementcharge';			//!< Id that identify managed objects
    -	public $table_element='paiementcharge';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='paiementcharge';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='paiementcharge';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'payment';
     
    -	var $fk_charge;
    -	var $datec='';
    -	var $tms='';
    -	var $datep='';
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_charge;
    +
    +	public $datec='';
    +	public $tms='';
    +	public $datep='';
    +
     	/**
     	 * @deprecated
     	 * @see amount
     	 */
    -	var $total;
    -    var $amount;            // Total amount of payment
    -    var $amounts=array();   // Array of amounts
    -	var $fk_typepaiement;
    -	var $num_paiement;
    -	var $fk_bank;
    -	var $fk_user_creat;
    -	var $fk_user_modif;
    +	public $total;
    +
    +    public $amount;            // Total amount of payment
    +    public $amounts=array();   // Array of amounts
    +
    +    /**
    +     * @var int ID
    +     */
    +	public $fk_typepaiement;
    +
    +	public $num_paiement;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_bank;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_modif;
     
     	/**
     	 *	Constructor
    @@ -161,7 +195,6 @@ class PaymentSocialContribution extends CommonObject
     			{
     				$error++;
     			}
    -
     		}
     
     		$result = $this->call_trigger('PAYMENTSOCIALCONTRIBUTION_CREATE',$user);
    @@ -493,8 +526,6 @@ class PaymentSocialContribution extends CommonObject
     		$this->fk_bank='';
     		$this->fk_user_creat='';
     		$this->fk_user_modif='';
    -
    -
     	}
     
     
    @@ -518,7 +549,7 @@ class PaymentSocialContribution extends CommonObject
     
             if (! empty($conf->banque->enabled))
             {
    -            require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
    +            include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
                 $acc = new Account($this->db);
                 $acc->fetch($accountid);
    @@ -594,6 +625,7 @@ class PaymentSocialContribution extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Mise a jour du lien entre le paiement de  charge et la ligne dans llx_bank generee
     	 *
    @@ -602,6 +634,7 @@ class PaymentSocialContribution extends CommonObject
     	 */
     	function update_fk_bank($id_bank)
     	{
    +        // phpcs:enable
     		$sql = "UPDATE ".MAIN_DB_PREFIX."paiementcharge SET fk_bank = ".$id_bank." WHERE rowid = ".$this->id;
     
     		dol_syslog(get_class($this)."::update_fk_bank", LOG_DEBUG);
    @@ -629,6 +662,7 @@ class PaymentSocialContribution extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Renvoi le libelle d'un statut donne
     	 *
    @@ -638,6 +672,7 @@ class PaymentSocialContribution extends CommonObject
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;	// TODO Renvoyer le libelle anglais et faire traduction a affichage
     
     		$langs->load('compta');
    @@ -708,5 +743,3 @@ class PaymentSocialContribution extends CommonObject
     		return $result;
     	}
     }
    -
    -
    diff --git a/htdocs/compta/sociales/document.php b/htdocs/compta/sociales/document.php
    index 490dbf3a1fe..6b5fd8f9e52 100644
    --- a/htdocs/compta/sociales/document.php
    +++ b/htdocs/compta/sociales/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2011      Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -35,8 +35,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/tax.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     if (! empty($conf->projet->enabled))
     {
    -    require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    -    require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
    +    include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    +    include_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
     }
     
     // Load translation files required by the page
    @@ -76,7 +76,7 @@ $modulepart='tax';
      * Actions
      */
     
    -include_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/actions_linkedfiles.inc.php';
     
     if ($action == 'setlib' && $user->rights->tax->charges->creer)
     {
    @@ -127,7 +127,7 @@ if ($object->id)
     	}
     	$morehtmlref.='</div>';
     
    -	$linkback = '<a href="' . DOL_URL_ROOT . '/compta/sociales/index.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>';
    +	$linkback = '<a href="' . DOL_URL_ROOT . '/compta/sociales/list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>';
     
     	$object->totalpaye = $totalpaye;   // To give a chance to dol_banner_tab to use already paid amount to show correct status
     
    @@ -136,7 +136,7 @@ if ($object->id)
     	print '<div class="fichecenter">';
     	print '<div class="underbanner clearboth"></div>';
     
    -    // Construit liste des fichiers
    +    // Build file list
         $filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
         $totalsize=0;
         foreach($filearray as $key => $file)
    @@ -168,7 +168,6 @@ else
         print $langs->trans("ErrorUnknown");
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/sociales/info.php b/htdocs/compta/sociales/info.php
    index 1827c1597f8..35c00766252 100644
    --- a/htdocs/compta/sociales/info.php
    +++ b/htdocs/compta/sociales/info.php
    @@ -27,8 +27,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/tax.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     if (! empty($conf->projet->enabled))
     {
    -    require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    -    require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
    +    include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    +    include_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
     }
     
     // Load translation files required by the page
    @@ -98,7 +98,7 @@ if (! empty($conf->projet->enabled))
     }
     $morehtmlref.='</div>';
     
    -$linkback = '<a href="' . DOL_URL_ROOT . '/compta/sociales/index.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>';
    +$linkback = '<a href="' . DOL_URL_ROOT . '/compta/sociales/list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>';
     
     $object->totalpaye = $totalpaye;   // To give a chance to dol_banner_tab to use already paid amount to show correct status
     
    @@ -115,6 +115,6 @@ print '</td></tr></table>';
     
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/sociales/index.php b/htdocs/compta/sociales/list.php
    similarity index 91%
    rename from htdocs/compta/sociales/index.php
    rename to htdocs/compta/sociales/list.php
    index bd323c972fe..636cb92978a 100644
    --- a/htdocs/compta/sociales/index.php
    +++ b/htdocs/compta/sociales/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016      Frédéric France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -19,7 +19,7 @@
      */
     
     /**
    - *   	\file       htdocs/compta/sociales/index.php
    + *   	\file       htdocs/compta/list/index.php
      *		\ingroup    tax
      *		\brief      Page to list all social contributions
      */
    @@ -55,19 +55,19 @@ if (! $sortorder) $sortorder="DESC";
     $year=GETPOST("year",'int');
     $filtre=GETPOST("filtre",'int');
     
    -if (empty($_REQUEST['typeid']))
    +if (! GETPOSTISSET('search_typeid'))
     {
     	$newfiltre=str_replace('filtre=','',$filtre);
     	$filterarray=explode('-',$newfiltre);
     	foreach($filterarray as $val)
     	{
     		$part=explode(':',$val);
    -		if ($part[0] == 'cs.fk_type') $typeid=$part[1];
    +		if ($part[0] == 'cs.fk_type') $search_typeid=$part[1];
     	}
     }
     else
     {
    -	$typeid=$_REQUEST['typeid'];
    +	$search_typeid=GETPOST('search_typeid','int');
     }
     
     if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')) // All test are required to be compatible with all browsers
    @@ -76,11 +76,12 @@ if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x',
     	$search_label="";
     	$search_amount="";
     	$search_status='';
    -    $typeid="";
    +    $search_typeid="";
     	$year="";
     	$month="";
     }
     
    +
     /*
      *	View
      */
    @@ -118,8 +119,8 @@ if ($filtre) {
         $filtre=str_replace(":","=",$filtre);
         $sql .= " AND ".$filtre;
     }
    -if ($typeid) {
    -    $sql .= " AND cs.fk_type=".$db->escape($typeid);
    +if ($search_typeid) {
    +    $sql .= " AND cs.fk_type=".$db->escape($search_typeid);
     }
     $sql.= " GROUP BY cs.rowid, cs.fk_type, cs.amount, cs.date_ech, cs.libelle, cs.paye, cs.periode, c.libelle";
     $sql.= $db->order($sortfield,$sortorder);
    @@ -139,10 +140,14 @@ if ($resql)
     	$i = 0;
     
     	$param='';
    -    if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
    -	if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
    -	if ($year)   $param.='&amp;year='.$year;
    -	if ($typeid) $param.='&amp;typeid='.$typeid;
    +    if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage);
    +	if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit);
    +	if ($search_ref)    $param.='&search_ref='.urlencode($search_ref);
    +	if ($search_label)  $param.='&search_label='.urlencode($search_label);
    +	if ($search_amount) $param.='&search_amount='.urlencode($search_amount);
    +	if ($search_typeid) $param.='&search_typeid='.urlencode($search_typeid);
    +	if ($search_status != '' && $search_status != '-1') $param.='&search_status='.urlencode($search_status);
    +	if ($year)          $param.='&year='.urlencode($year);
     
     	$newcardbutton='';
     	if($user->rights->tax->charges->creer)
    @@ -193,7 +198,7 @@ if ($resql)
     		print '<td class="liste_titre"><input type="text" class="flat" size="8" name="search_label" value="'.dol_escape_htmltag($search_label).'"></td>';
     		// Type
     		print '<td class="liste_titre" align="left">';
    -	    $formsocialcontrib->select_type_socialcontrib($typeid,'typeid',1,0,0,'maxwidth100onsmartphone');
    +	    $formsocialcontrib->select_type_socialcontrib($search_typeid,'search_typeid',1,0,0,'maxwidth100onsmartphone');
     	    print '</td>';
     		// Period end date
     		print '<td class="liste_titre">&nbsp;</td>';
    @@ -304,5 +309,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/sociales/payments.php b/htdocs/compta/sociales/payments.php
    index b31ea8e4d2f..936c2c9c0f2 100644
    --- a/htdocs/compta/sociales/payments.php
    +++ b/htdocs/compta/sociales/payments.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2016 Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2011-2014 Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
    @@ -480,7 +480,6 @@ if (! empty($conf->salaries->enabled) && ! empty($user->rights->salaries->read))
     
     print '</form>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/stats/byratecountry.php b/htdocs/compta/stats/byratecountry.php
    index 2c43db42d13..99d6bb8b49d 100644
    --- a/htdocs/compta/stats/byratecountry.php
    +++ b/htdocs/compta/stats/byratecountry.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2018        Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2018       Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -152,7 +153,7 @@ if ($modetax == 1) $calcmode=$langs->trans('OptionVATDebitOption');
     if ($modetax == 2) $calcmode=$langs->trans('OptionPaymentForProductAndServices');
     $calcmode.='<br>('.$langs->trans("TaxModuleSetupToModifyRules",DOL_URL_ROOT.'/admin/taxes.php').')';
     // Set period
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     $prevyear=$year_start; $prevquarter=$q;
     if ($prevquarter > 1) {
     	$prevquarter--;
    @@ -230,7 +231,7 @@ else if ($modecompta=="BOOKKEEPINGCOLLECTED")
     
     
     }
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     if ($date_end == dol_time_plus_duree($date_start, 1, 'y') - 1) $periodlink='<a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start-1).'&modecompta='.$modecompta.'">'.img_previous().'</a> <a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start+1).'&modecompta='.$modecompta.'">'.img_next().'</a>';
     else $periodlink = '';
     
    @@ -321,7 +322,6 @@ if ($resql) {
     	}
     	print '<td align="right" width="6%"><b>' . price($totalpermonth['total']) . '</b></td>';
     	print '</tr>';
    -
     } else {
     	print $db->lasterror(); // Show last sql error
     }
    @@ -405,7 +405,6 @@ if ($resql2) {
     	print $db->lasterror(); // Show last sql error
     }
     print "</table>\n";
    -
     } else {
     	// $modecompta != 'CREANCES-DETTES'
     	// "Calculation of part of each product for accountancy in this mode is not possible. When a partial payment (for example 5 euros) is done on an
    @@ -414,7 +413,6 @@ print "</table>\n";
     	print '<br>'.$langs->trans("TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant") . '<br>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/stats/cabyprodserv.php b/htdocs/compta/stats/cabyprodserv.php
    index 5d28ab3e077..e7a3d4da480 100644
    --- a/htdocs/compta/stats/cabyprodserv.php
    +++ b/htdocs/compta/stats/cabyprodserv.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2013      Antoine Iauch	   <aiauch@gpcsolutions.fr>
    - * Copyright (C) 2013-2016 Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2015      Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    +/* Copyright (C) 2013       Antoine Iauch	        <aiauch@gpcsolutions.fr>
    + * Copyright (C) 2013-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -199,7 +200,7 @@ else if ($modecompta=="BOOKKEEPINGCOLLECTED")
     
     }
     
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     if ($date_end == dol_time_plus_duree($date_start, 1, 'y') - 1) $periodlink='<a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start-1).'&modecompta='.$modecompta.'">'.img_previous().'</a> <a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start+1).'&modecompta='.$modecompta.'">'.img_next().'</a>';
     else $periodlink = '';
     
    @@ -461,5 +462,6 @@ if ($modecompta == 'CREANCES-DETTES')
     	print '<br>'.$langs->trans("TurnoverPerProductInCommitmentAccountingNotRelevant") . '<br>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/compta/stats/cabyuser.php b/htdocs/compta/stats/cabyuser.php
    index ccb286c1420..c00c0e52849 100644
    --- a/htdocs/compta/stats/cabyuser.php
    +++ b/htdocs/compta/stats/cabyuser.php
    @@ -1,8 +1,9 @@
     <?php
    -/* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2013      Antoine Iauch        <aiauch@gpcsolutions.fr>
    +/* Copyright (C) 2001-2003  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2009  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2013       Antoine Iauch           <aiauch@gpcsolutions.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -177,7 +178,7 @@ else if ($modecompta=="BOOKKEEPINGCOLLECTED")
     
     
     }
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     if ($date_end == dol_time_plus_duree($date_start, 1, 'y') - 1) $periodlink='<a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start-1).'&modecompta='.$modecompta.'">'.img_previous().'</a> <a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start+1).'&modecompta='.$modecompta.'">'.img_next().'</a>';
     else $periodlink = '';
     
    @@ -465,7 +466,6 @@ print "</table>";
     print '</div>';
     print '</form>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/stats/casoc.php b/htdocs/compta/stats/casoc.php
    index 8e00dfe5fbe..f49f15afa1f 100644
    --- a/htdocs/compta/stats/casoc.php
    +++ b/htdocs/compta/stats/casoc.php
    @@ -1,10 +1,11 @@
     <?php
     /* Copyright (C) 2001-2003  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2007       Franky Van Liedekerke   <franky.van.liedekerke@telenet.be>
      * Copyright (C) 2013       Antoine Iauch           <aiauch@gpcsolutions.fr>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -203,7 +204,7 @@ else if ($modecompta=="BOOKKEEPINGCOLLECTED")
     
     
     }
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     if ($date_end == dol_time_plus_duree($date_start, 1, 'y') - 1) $periodlink='<a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start-1).'&modecompta='.$modecompta.'">'.img_previous().'</a> <a href="'.$_SERVER["PHP_SELF"].'?year='.($year_start+1).'&modecompta='.$modecompta.'">'.img_next().'</a>';
     else $periodlink = '';
     
    @@ -312,7 +313,6 @@ if ($result) {
     	        $catotal_ht+=$obj->amount;
     	        $catotal+=$obj->amount_ttc;
     	        $i++;
    -
     	}
     } else {
     	dol_print_error($db);
    @@ -646,6 +646,6 @@ print "</div>";
     
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/stats/index.php b/htdocs/compta/stats/index.php
    index c255d236664..711c8ec2bb7 100644
    --- a/htdocs/compta/stats/index.php
    +++ b/htdocs/compta/stats/index.php
    @@ -1,8 +1,9 @@
     <?php
    -/* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2017	   Olivier Geffroy      <jeff@jeffinfo.com>
    +/* Copyright (C) 2001-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2009  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2017       Olivier Geffroy         <jeff@jeffinfo.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -119,7 +120,7 @@ if ($modecompta=="CREANCES-DETTES")
     	$calcmode=$langs->trans("CalcModeDebt");
     	//$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
     	$calcmode.='<br>('.$langs->trans("SeeReportInBookkeepingMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=BOOKKEEPING">','</a>').')';
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	$periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear-2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
     	$description=$langs->trans("RulesCADue");
     	if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.= $langs->trans("DepositsAreNotIncluded");
    @@ -133,7 +134,7 @@ else if ($modecompta=="RECETTES-DEPENSES")
     	$calcmode=$langs->trans("CalcModeEngagement");
     	//$calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">','</a>').')';
     	//$calcmode.='<br>('.$langs->trans("SeeReportInBookkeepingMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=BOOKKEEPINGCOLLECTED">','</a>').')';
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	$periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear-2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
     	$description=$langs->trans("RulesCAIn");
     	$description.= $langs->trans("DepositsAreIncluded");
    @@ -146,7 +147,7 @@ else if ($modecompta=="BOOKKEEPING")
     	$calcmode=$langs->trans("CalcModeBookkeeping");
     	$calcmode.='<br>('.$langs->trans("SeeReportInDueDebtMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=CREANCES-DETTES">','</a>').')';
     	//$calcmode.='<br>('.$langs->trans("SeeReportInInputOutputMode",'<a href="'.$_SERVER["PHP_SELF"].'?year_start='.$year_start.'&modecompta=RECETTES-DEPENSES">','</a>').')';
    -	$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +	$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     	$periodlink=($year_start?"<a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear-2)."&modecompta=".$modecompta."'>".img_previous()."</a> <a href='".$_SERVER["PHP_SELF"]."?year=".($year_start+$nbofyear)."&modecompta=".$modecompta."'>".img_next()."</a>":"");
     	$description=$langs->trans("RulesCATotalSaleJournal");
     	$builddate=dol_now();
    @@ -629,6 +630,6 @@ print '</div>';
     
      */
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/compta/tva/card.php b/htdocs/compta/tva/card.php
    index 4480682b091..cd015e96c11 100644
    --- a/htdocs/compta/tva/card.php
    +++ b/htdocs/compta/tva/card.php
    @@ -1,8 +1,9 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -255,11 +256,11 @@ if ($action == 'create')
     
         print "<tr>";
         print '<td class="titlefieldcreate fieldrequired">'.$langs->trans("DatePayment").'</td><td>';
    -    print $form->select_date($datep,"datep",'','','','add',1,1);
    +    print $form->selectDate($datep, "datep", '', '', '', 'add', 1, 1);
         print '</td></tr>';
     
         print '<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans("PeriodEndDate"), $langs->trans("LastDayTaxIsRelatedTo")).'</td><td>';
    -    print $form->select_date($datev,"datev",'','','','add',1,1);
    +    print $form->selectDate($datev, "datev", '', '', '', 'add', 1, 1);
         print '</td></tr>';
     
     	// Label
    diff --git a/htdocs/compta/tva/class/tva.class.php b/htdocs/compta/tva/class/tva.class.php
    index af330910cdf..33d48de8bfc 100644
    --- a/htdocs/compta/tva/class/tva.class.php
    +++ b/htdocs/compta/tva/class/tva.class.php
    @@ -1,8 +1,9 @@
     <?php
    -/* Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2011-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
    - * Copyright (C) 2018      Philippe Grand       <philippe.grand@atoo-net.com>
    +/* Copyright (C) 2002-2003  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2008  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2011-2017  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2018       Philippe Grand          <philippe.grand@atoo-net.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,20 +34,47 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Tva extends CommonObject
     {
    -	public $element='tva';			//!< Id that identify managed objects
    -	public $table_element='tva';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='tva';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='tva';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto='payment';
     
    -	var $tms;
    -	var $datep;
    -	var $datev;
    -	var $amount;
    -	var $type_payment;
    -	var $num_payment;
    -	var $label;
    -	var $fk_bank;
    -	var $fk_user_creat;
    -	var $fk_user_modif;
    +	public $tms;
    +	public $datep;
    +	public $datev;
    +	public $amount;
    +	public $type_payment;
    +	public $num_payment;
    +
    +	/**
    +     * @var string label
    +     */
    +    public $label;
    +
    +    /**
    +     * @var int ID
    +     */
    +	public $fk_bank;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_modif;
     
         /**
     	 *	Constructor
    @@ -76,9 +104,9 @@ class Tva extends CommonObject
     		$this->amount=trim($this->amount);
     		$this->label=trim($this->label);
     		$this->note=trim($this->note);
    -		$this->fk_bank=trim($this->fk_bank);
    -		$this->fk_user_creat=trim($this->fk_user_creat);
    -		$this->fk_user_modif=trim($this->fk_user_modif);
    +		$this->fk_bank = (int) $this->fk_bank;
    +		$this->fk_user_creat = (int) $this->fk_user_creat;
    +		$this->fk_user_modif = (int) $this->fk_user_modif;
     
     		// Check parameters
     		// Put here code to add control on parameters values
    @@ -155,9 +183,9 @@ class Tva extends CommonObject
     		$this->amount=trim($this->amount);
     		$this->label=trim($this->label);
     		$this->note=trim($this->note);
    -		$this->fk_bank=trim($this->fk_bank);
    -		$this->fk_user_creat=trim($this->fk_user_creat);
    -		$this->fk_user_modif=trim($this->fk_user_modif);
    +		$this->fk_bank = (int) $this->fk_bank;
    +		$this->fk_user_creat = (int) $this->fk_user_creat;
    +		$this->fk_user_modif = (int) $this->fk_user_modif;
     
     		// Check parameters
     		// Put here code to add control on parameters values
    @@ -350,14 +378,16 @@ class Tva extends CommonObject
             return $solde;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Total of the VAT from invoices emitted by the thirdparty.
          *
          *	@param	int		$year		Year
    -     *	@return	double				Amount
    +     *  @return	double				Amount
          */
         function tva_sum_collectee($year = 0)
         {
    +        // phpcs:enable
     
             $sql = "SELECT sum(f.tva) as amount";
             $sql .= " FROM ".MAIN_DB_PREFIX."facture as f WHERE f.paye = 1";
    @@ -389,6 +419,7 @@ class Tva extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	VAT payed
          *
    @@ -397,6 +428,7 @@ class Tva extends CommonObject
          */
         function tva_sum_payee($year = 0)
         {
    +        // phpcs:enable
     
             $sql = "SELECT sum(f.total_tva) as total_tva";
             $sql .= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
    @@ -429,6 +461,7 @@ class Tva extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Total of the VAT payed
          *
    @@ -437,6 +470,7 @@ class Tva extends CommonObject
          */
         function tva_sum_reglee($year = 0)
         {
    +        // phpcs:enable
     
             $sql = "SELECT sum(f.amount) as amount";
             $sql .= " FROM ".MAIN_DB_PREFIX."tva as f";
    @@ -486,9 +520,9 @@ class Tva extends CommonObject
             $this->amount=price2num(trim($this->amount));
             $this->label=trim($this->label);
     		$this->note=trim($this->note);
    -		$this->fk_bank=trim($this->fk_bank);
    -		$this->fk_user_creat=trim($this->fk_user_creat);
    -		$this->fk_user_modif=trim($this->fk_user_modif);
    +		$this->fk_bank = (int) $this->fk_bank;
    +		$this->fk_user_creat = (int) $this->fk_user_creat;
    +		$this->fk_user_modif = (int) $this->fk_user_modif;
     		if (empty($this->datec)) $this->datec = dol_now();
     
             // Check parameters
    @@ -620,6 +654,7 @@ class Tva extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *  Update link between payment tva and line generate into llx_bank
          *
    @@ -628,8 +663,9 @@ class Tva extends CommonObject
          */
     	function update_fk_bank($id_bank)
     	{
    -		$sql = 'UPDATE '.MAIN_DB_PREFIX.'tva SET fk_bank = '.$id_bank;
    -		$sql.= ' WHERE rowid = '.$this->id;
    +        // phpcs:enable
    +		$sql = 'UPDATE '.MAIN_DB_PREFIX.'tva SET fk_bank = '.(int) $id_bank;
    +		$sql.= ' WHERE rowid = '.(int) $this->id;
     		$result = $this->db->query($sql);
     		if ($result)
     		{
    @@ -734,7 +770,7 @@ class Tva extends CommonObject
     	{
     		$sql = "SELECT t.rowid, t.tms, t.fk_user_modif, t.datec, t.fk_user_creat";
     		$sql.= " FROM ".MAIN_DB_PREFIX."tva as t";
    -		$sql.= " WHERE t.rowid = ".$id;
    +		$sql.= " WHERE t.rowid = ".(int) $id;
     
     		dol_syslog(get_class($this)."::info", LOG_DEBUG);
     		$result=$this->db->query($sql);
    @@ -764,7 +800,6 @@ class Tva extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -783,6 +818,7 @@ class Tva extends CommonObject
     	    return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Renvoi le libelle d'un statut donne
     	 *
    @@ -790,10 +826,11 @@ class Tva extends CommonObject
     	 * @param   int		$mode       0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
     	 * @return	string  		    Libelle du statut
     	 */
    -	function LibStatut($status,$mode=0)
    -	{
    -	    global $langs;	// TODO Renvoyer le libelle anglais et faire traduction a affichage
    +    function LibStatut($status,$mode=0)
    +    {
    +        // phpcs:enable
    +        global $langs;	// TODO Renvoyer le libelle anglais et faire traduction a affichage
     
    -	    return '';
    -	}
    +        return '';
    +    }
     }
    diff --git a/htdocs/compta/tva/clients.php b/htdocs/compta/tva/clients.php
    index ae95d71ca9c..74a08d0d142 100644
    --- a/htdocs/compta/tva/clients.php
    +++ b/htdocs/compta/tva/clients.php
    @@ -3,7 +3,8 @@
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
      * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2006      Yannick Warnier      <ywarnier@beeznest.org>
    - * Copyright (C) 2014	   Ferran Marcet        <fmarcet@2byte.es>
    + * Copyright (C) 2014       Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -136,18 +137,22 @@ if ($modetax == 1) $calcmode=$langs->trans('OptionVATDebitOption');
     if ($modetax == 2) $calcmode=$langs->trans('OptionPaymentForProductAndServices');
     $calcmode.='<br>('.$langs->trans("TaxModuleSetupToModifyRules",DOL_URL_ROOT.'/admin/taxes.php').')';
     // Set period
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    -$prevyear=$year_start; $prevquarter=$q;
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
    +$prevyear=$year_start;
    +$prevquarter=$q;
     if ($prevquarter > 1) {
     	$prevquarter--;
     } else {
    -	$prevquarter=4; $prevyear--;
    +    $prevquarter=4;
    +    $prevyear--;
     }
    -$nextyear=$year_start; $nextquarter=$q;
    +$nextyear=$year_start;
    +$nextquarter=$q;
     if ($nextquarter < 4) {
     	$nextquarter++;
     } else {
    -	$nextquarter=1; $nextyear++;
    +    $nextquarter=1;
    +    $nextyear++;
     }
     $builddate=dol_now();
     
    diff --git a/htdocs/compta/tva/document.php b/htdocs/compta/tva/document.php
    index b83cad80bdd..1228fcb5125 100644
    --- a/htdocs/compta/tva/document.php
    +++ b/htdocs/compta/tva/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2011      Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -122,7 +122,7 @@ if ($object->id)
     	print '<div class="fichecenter">';
     	print '<div class="underbanner clearboth"></div>';
     
    -    // Construit liste des fichiers
    +    // Build file list
         $filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
         $totalsize=0;
         foreach($filearray as $key => $file)
    diff --git a/htdocs/compta/tva/index.php b/htdocs/compta/tva/index.php
    index 7c4912411f6..4691b577368 100644
    --- a/htdocs/compta/tva/index.php
    +++ b/htdocs/compta/tva/index.php
    @@ -2,8 +2,9 @@
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
      * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014      Ferran Marcet        <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -217,7 +218,7 @@ if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) {
     }
     if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) $description.='<br>'.$langs->trans("ThisIsAnEstimatedValue");
     
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     
     $builddate=dol_now();
     
    diff --git a/htdocs/compta/tva/list.php b/htdocs/compta/tva/list.php
    index d835b0264e1..7c0d813c2cb 100644
    --- a/htdocs/compta/tva/list.php
    +++ b/htdocs/compta/tva/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2017 Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/compta/tva/quadri_detail.php b/htdocs/compta/tva/quadri_detail.php
    index e2c7cc5d793..ff3e3ce127d 100644
    --- a/htdocs/compta/tva/quadri_detail.php
    +++ b/htdocs/compta/tva/quadri_detail.php
    @@ -1,9 +1,10 @@
     <?php
    -/* Copyright (C) 2001-2003        Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004             Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2004-2013        Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2007, 2015  Yannick Warnier      <ywarnier@beeznest.org>
    - * Copyright (C) 2014	          Ferran Marcet        <fmarcet@2byte.es>
    +/* Copyright (C) 2001-2003  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004       Eric Seigne             <eric.seigne@ryxeo.com>
    + * Copyright (C) 2004-2013  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2006-2015  Yannick Warnier         <ywarnier@beeznest.org>
    + * Copyright (C) 2014       Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -135,18 +136,21 @@ if ($modetax == 1) $calcmode=$langs->trans('OptionVATDebitOption');
     if ($modetax == 2) $calcmode=$langs->trans('OptionPaymentForProductAndServices');
     $calcmode.='<br>('.$langs->trans("TaxModuleSetupToModifyRules",DOL_URL_ROOT.'/admin/taxes.php').')';
     // Set period
    -$period=$form->select_date($date_start,'date_start',0,0,0,'',1,0,1).' - '.$form->select_date($date_end,'date_end',0,0,0,'',1,0,1);
    +$period=$form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0).' - '.$form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     $prevyear=$year_start; $prevquarter=$q;
     if ($prevquarter > 1) {
     	$prevquarter--;
     } else {
    -	$prevquarter=4; $prevyear--;
    +    $prevquarter=4;
    +    $prevyear--;
     }
    -$nextyear=$year_start; $nextquarter=$q;
    +$nextyear=$year_start;
    +$nextquarter=$q;
     if ($nextquarter < 4) {
     	$nextquarter++;
     } else {
    -	$nextquarter=1; $nextyear++;
    +    $nextquarter=1;
    +    $nextyear++;
     }
     $description.=$fsearch;
     $builddate=dol_now();
    diff --git a/htdocs/conf/conf.php.example b/htdocs/conf/conf.php.example
    index 7475cf54ddb..886a6171818 100644
    --- a/htdocs/conf/conf.php.example
    +++ b/htdocs/conf/conf.php.example
    @@ -14,7 +14,7 @@
     // dolibarr_main_url_root
     // This parameter defines the root URL of your Dolibarr index.php page without ending "/".
     // It must link to the directory htdocs.
    -// In most cases, this is autodetected but it's still required 
    +// In most cases, this is autodetected but it's still required
     // * to show full url bookmarks for some services (ie: agenda rss export url, ...)
     // * or when using Apache dir aliases (autodetect fails)
     // * or when using nginx (autodetect fails)
    @@ -40,7 +40,7 @@ $dolibarr_main_document_root='';
     // dolibarr_main_url_root_alt
     // This parameter defines the relative sub URLs to add to $dolibarr_main_url_root to
     // forge alternative root directories (used by modules developers).
    -// You can put several values, separated by a coma, but number of entries must match 
    +// You can put several values, separated by a coma, but number of entries must match
     // number of entries into $dolibarr_main_document_root_alt.
     // Examples:
     // $dolibarr_main_url_root_alt='/custom';
    @@ -52,7 +52,7 @@ $dolibarr_main_document_root='';
     // dolibarr_main_document_root_alt
     // This parameter contains absolute alternative root file system directories (used by
     // modules developers).
    -// You can put several values, separated by a coma, but number of entries must match 
    +// You can put several values, separated by a coma, but number of entries must match
     // number of entries into $dolibarr_main_url_root_alt.
     // Examples:
     // $dolibarr_main_document_root_alt='/var/www/dolibarr/htdocs/custom';
    @@ -162,7 +162,7 @@ $dolibarr_main_db_collation='utf8_unicode_ci';
     // Default value: dolibarr
     // Possible values: Any values found in files in htdocs/core/login directory after
     // the "function_" string and before the ".php" string. You can also separate several
    -// values using a ",". In this case, Dolibarr will check login/pass for each value in 
    +// values using a ",". In this case, Dolibarr will check login/pass for each value in
     // order defined into value. However, note that this can't work with all values.
     // Examples:
     // $dolibarr_main_authentication='http';
    @@ -207,10 +207,10 @@ $dolibarr_main_authentication='dolibarr';
     // 0 = No forced redirect
     // 1 = Force redirect to https, until SCRIPT_URI start with https into response
     // 2 = Force redirect to https, until SERVER["HTTPS"] is 'on' into response
    -// 'https://my.domain.com' = Force reditect to https using this domain name. 
    +// 'https://my.domain.com' = Force reditect to https using this domain name.
     // Warning: If you enable this parameter, your web server must be configured to
    -// respond URL with https protocol. 
    -// According to your web server setup, some values may works and other not. Try 
    +// respond URL with https protocol.
    +// According to your web server setup, some values may works and other not. Try
     // different values (1,2 or 'https://my.domain.com') if you experience problems.
     // Default value: 0
     // Possible values: 0, 1, 2 or 'https://my.domain.com'
    diff --git a/htdocs/contact/agenda.php b/htdocs/contact/agenda.php
    index 183433b02f9..5a9ef88f8ed 100644
    --- a/htdocs/contact/agenda.php
    +++ b/htdocs/contact/agenda.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
      * Copyright (C) 2013      Florian Henry		<florian.henry@open-concept.pro>
      * Copyright (C) 2013-2016 Alexandre Spangaro 	<aspangaro.dolibarr@gmail.com>
    diff --git a/htdocs/contact/canvas/actions_contactcard_common.class.php b/htdocs/contact/canvas/actions_contactcard_common.class.php
    index ba96c865d1a..bac7c9059a9 100644
    --- a/htdocs/contact/canvas/actions_contactcard_common.class.php
    +++ b/htdocs/contact/canvas/actions_contactcard_common.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,7 +27,11 @@
      */
     abstract class ActionsContactCardCommon
     {
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
         var $dirmodule;
         var $targetmodule;
         var $canvas;
    @@ -37,10 +41,17 @@ abstract class ActionsContactCardCommon
     	var $tpl = array();
     	//! Object container
     	var $object;
    -	//! Error string
    -	var $error;
    -	//! Error array
    -	var $errors=array();
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
     
     	/**
    @@ -65,7 +76,8 @@ abstract class ActionsContactCardCommon
         	//}
         }
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Set content of ->tpl array, to use into template
          *
          *  @param	string		$action    Type of action
    @@ -74,6 +86,7 @@ abstract class ActionsContactCardCommon
          */
         function assign_values(&$action, $id)
         {
    +        // phpcs:enable
             global $conf, $langs, $user, $canvas;
             global $form, $formcompany, $objsoc;
     
    @@ -254,6 +267,7 @@ abstract class ActionsContactCardCommon
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
         /**
          *  Assign POST values into object
          *
    @@ -261,31 +275,32 @@ abstract class ActionsContactCardCommon
          */
         private function assign_post()
         {
    +        // phpcs:enable
             global $langs, $mysoc;
     
    -        $this->object->old_name 			= 	$_POST["old_name"];
    -        $this->object->old_firstname 		= 	$_POST["old_firstname"];
    +        $this->object->old_name 		= $_POST["old_name"];
    +        $this->object->old_firstname 	= $_POST["old_firstname"];
     
    -        $this->object->socid				=	$_POST["socid"];
    -        $this->object->lastname				=	$_POST["name"];
    -        $this->object->firstname			= 	$_POST["firstname"];
    -        $this->object->civility_id			= 	$_POST["civility_id"];
    -        $this->object->poste				= 	$_POST["poste"];
    -        $this->object->address				=	$_POST["address"];
    -        $this->object->zip					=	$_POST["zipcode"];
    -        $this->object->town					=	$_POST["town"];
    -        $this->object->fk_departement		=	$_POST["state_id"];
    -        $this->object->country_id			=	$_POST["country_id"]?$_POST["country_id"]:$mysoc->country_id;
    -        $this->object->state_id        		=	$_POST["state_id"];
    -        $this->object->phone_pro			= 	$_POST["phone_pro"];
    -        $this->object->phone_perso			= 	$_POST["phone_perso"];
    -        $this->object->phone_mobile			= 	$_POST["phone_mobile"];
    -        $this->object->fax					=	$_POST["fax"];
    -        $this->object->email				=	$_POST["email"];
    -        $this->object->jabberid				= 	$_POST["jabberid"];
    -        $this->object->priv					= 	$_POST["priv"];
    -        $this->object->note					=	$_POST["note"];
    -        $this->object->canvas				=	$_POST["canvas"];
    +        $this->object->socid			= $_POST["socid"];
    +        $this->object->lastname			= $_POST["name"];
    +        $this->object->firstname		= $_POST["firstname"];
    +        $this->object->civility_id		= $_POST["civility_id"];
    +        $this->object->poste			= $_POST["poste"];
    +        $this->object->address			= $_POST["address"];
    +        $this->object->zip				= $_POST["zipcode"];
    +        $this->object->town				= $_POST["town"];
    +        $this->object->fk_departement	= $_POST["state_id"];
    +        $this->object->country_id		= $_POST["country_id"]?$_POST["country_id"]:$mysoc->country_id;
    +        $this->object->state_id        	= $_POST["state_id"];
    +        $this->object->phone_pro		= $_POST["phone_pro"];
    +        $this->object->phone_perso		= $_POST["phone_perso"];
    +        $this->object->phone_mobile		= $_POST["phone_mobile"];
    +        $this->object->fax				= $_POST["fax"];
    +        $this->object->email			= $_POST["email"];
    +        $this->object->jabberid			= $_POST["jabberid"];
    +        $this->object->priv				= $_POST["priv"];
    +        $this->object->note				= $_POST["note"];
    +        $this->object->canvas			= $_POST["canvas"];
     
             // We set country_id, and country_code label of the chosen country
             if ($this->object->country_id)
    @@ -305,6 +320,4 @@ abstract class ActionsContactCardCommon
                 $this->object->country		=	$langs->trans("Country".$obj->code)?$langs->trans("Country".$obj->code):$obj->label;
             }
         }
    -
     }
    -
    diff --git a/htdocs/contact/canvas/default/actions_contactcard_default.class.php b/htdocs/contact/canvas/default/actions_contactcard_default.class.php
    index bfcb5a21142..1847e19a0ed 100644
    --- a/htdocs/contact/canvas/default/actions_contactcard_default.class.php
    +++ b/htdocs/contact/canvas/default/actions_contactcard_default.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Laurent Destailleur	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -29,8 +29,8 @@ include_once DOL_DOCUMENT_ROOT.'/contact/canvas/actions_contactcard_common.class
      */
     class ActionsContactCardDefault extends ActionsContactCardCommon
     {
    -	/**
    -     *	Constructor
    +    /**
    +     *  Constructor
          *
          *	@param	DoliDB	$db				Handler acces base de donnees
          *	@param	string	$dirmodule		Name of directory of module
    @@ -66,6 +66,7 @@ class ActionsContactCardDefault extends ActionsContactCardCommon
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Assign custom values for canvas
     	 *
    @@ -75,6 +76,7 @@ class ActionsContactCardDefault extends ActionsContactCardCommon
     	 */
     	function assign_values(&$action, $id)
     	{
    +        // phpcs:enable
     		global $limit, $offset, $sortfield, $sortorder;
     		global $conf, $db, $langs, $user;
     		global $form;
    @@ -116,10 +118,10 @@ class ActionsContactCardDefault extends ActionsContactCardCommon
     		{
     	        $this->LoadListDatas($limit, $offset, $sortfield, $sortorder);
     		}
    -
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Fetch datas list and save into ->list_datas
     	 *
    @@ -131,6 +133,7 @@ class ActionsContactCardDefault extends ActionsContactCardCommon
     	 */
     	function LoadListDatas($limit, $offset, $sortfield, $sortorder)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
             //$this->getFieldList();
    @@ -138,4 +141,3 @@ class ActionsContactCardDefault extends ActionsContactCardCommon
             $this->list_datas = array();
     	}
     }
    -
    diff --git a/htdocs/contact/canvas/default/tpl/contactcard_create.tpl.php b/htdocs/contact/canvas/default/tpl/contactcard_create.tpl.php
    index 1561f046845..9f2bdd4b114 100644
    --- a/htdocs/contact/canvas/default/tpl/contactcard_create.tpl.php
    +++ b/htdocs/contact/canvas/default/tpl/contactcard_create.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/contact/canvas/default/tpl/contactcard_edit.tpl.php b/htdocs/contact/canvas/default/tpl/contactcard_edit.tpl.php
    index 1eaccff5a1f..39c3604416b 100644
    --- a/htdocs/contact/canvas/default/tpl/contactcard_edit.tpl.php
    +++ b/htdocs/contact/canvas/default/tpl/contactcard_edit.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php b/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php
    index 6041e7c3e2c..c1d6de80964 100644
    --- a/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php
    +++ b/htdocs/contact/canvas/default/tpl/contactcard_view.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php
    index 52957d25343..770b19e5b75 100644
    --- a/htdocs/contact/card.php
    +++ b/htdocs/contact/card.php
    @@ -1,13 +1,14 @@
     <?php
    -/* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
    - * Copyright (C) 2013      Florian Henry		<florian.henry@open-concept.pro>
    - * Copyright (C) 2013-2016 Alexandre Spangaro 	<aspangaro.dolibarr@gmail.com>
    - * Copyright (C) 2014      Juanjo Menent	 	<jmenent@2byte.es>
    - * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
    +/* Copyright (C) 2004-2005  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
    + * Copyright (C) 2005-2017  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2007       Franky Van Liedekerke   <franky.van.liedekerke@telenet.be>
    + * Copyright (C) 2013       Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2013-2016  Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2014       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2015       Jean-François Ferry     <jfefe@aternatik.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -185,6 +186,8 @@ if (empty($reshook))
             $object->country_id		= GETPOST("country_id",'int');
             $object->state_id		= GETPOST("state_id",'int');
             $object->skype			= GETPOST("skype",'alpha');
    +        $object->twitter		= GETPOST("twitter",'alpha');
    +        $object->facebook		= GETPOST("facebook",'alpha');
             $object->email			= GETPOST("email",'alpha');
             $object->phone_pro		= GETPOST("phone_pro",'alpha');
             $object->phone_perso	= GETPOST("phone_perso",'alpha');
    @@ -357,6 +360,8 @@ if (empty($reshook))
     
                 $object->email			= GETPOST("email",'alpha');
                 $object->skype			= GETPOST("skype",'alpha');
    +            $object->twitter		= GETPOST("twitter",'alpha');
    +            $object->facebook		= GETPOST("facebook",'alpha');
                 $object->phone_pro		= GETPOST("phone_pro",'alpha');
                 $object->phone_perso	= GETPOST("phone_perso",'alpha');
                 $object->phone_mobile	= GETPOST("phone_mobile",'alpha');
    @@ -657,13 +662,28 @@ else
     
                 // Instant message and no email
                 print '<tr><td><label for="jabberid">'.$langs->trans("IM").'</label></td>';
    -            print '<td colspan="3"><input name="jabberid" id="jabberid" type="text" class="minwidth100" maxlength="80" value="'.dol_escape_htmltag(GETPOST("jabberid",'alpha')?GETPOST("jabberid",'alpha'):$object->jabberid).'"></td></tr>';
    +            print '<td colspan="3"><input name="jabberid" id="jabberid" type="text" class="minwidth100" maxlength="80" value="'.dol_escape_htmltag(GETPOSTISSET("jabberid")?GETPOST("jabberid",'alpha'):$object->jabberid).'"></td></tr>';
     
    -            // Skype
    -            if (! empty($conf->skype->enabled))
    +            if (! empty($conf->socialnetworks->enabled))
                 {
    -                print '<tr><td><label for="skype">'.$langs->trans("Skype").'</label></td>';
    -                print '<td colspan="3"><input name="skype" id="skype" type="text" class="minwidth100" maxlength="80" value="'.dol_escape_htmltag(GETPOST("skype",'alpha')?GETPOST("skype",'alpha'):$object->skype).'"></td></tr>';
    +            	// Skype
    +            	if (! empty($conf->global->SOCIALNETWORKS_SKYPE))
    +            	{
    +            		print '<tr><td><label for="skype">'.fieldLabel('Skype','skype').'</label></td>';
    +            		print '<td colspan="3"><input type="text" name="skype" id="skype" class="minwidth100" maxlength="80" value="'.dol_escape_htmltag(GETPOSTISSET("skype")?GETPOST("skype",'alpha'):$object->skype).'"></td></tr>';
    +            	}
    +            	// Twitter
    +            	if (! empty($conf->global->SOCIALNETWORKS_TWITTER))
    +            	{
    +            		print '<tr><td><label for="twitter">'.fieldLabel('Twitter','twitter').'</label></td>';
    +            		print '<td colspan="3"><input type="text" name="twitter" id="twitter" class="minwidth100" maxlength="80" value="'.dol_escape_htmltag(GETPOSTISSET("twitter")?GETPOST("twitter",'alpha'):$object->twitter).'"></td></tr>';
    +            	}
    +            	// Facebook
    +            	if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK))
    +            	{
    +            		print '<tr><td><label for="facebook">'.fieldLabel('Facebook','facebook').'</label></td>';
    +            		print '<td colspan="3"><input type="text" name="facebook" id="facebook" class="minwidth100" maxlength="80" value="'.dol_escape_htmltag(GETPOSTISSET("facebook")?GETPOST("facebook",'alpha'):$object->facebook).'"></td></tr>';
    +            	}
                 }
     
                 // Visibility
    @@ -704,11 +724,11 @@ else
                 $form=new Form($db);
                 if ($object->birthday)
                 {
    -                print $form->select_date($object->birthday,'birthday',0,0,0,"perso", 1, 0, 1);
    +                print $form->selectDate($object->birthday, 'birthday', 0, 0, 0, "perso", 1, 0);
                 }
                 else
                 {
    -                print $form->select_date('','birthday',0,0,1,"perso", 1, 0, 1);
    +                print $form->selectDate('', 'birthday', 0, 0, 1, "perso", 1, 0);
                 }
                 print '</td>';
     
    @@ -913,11 +933,26 @@ else
     			}
                 print '</tr>';
     
    -            // Skype
    -            if (! empty($conf->skype->enabled))
    +            if (! empty($conf->socialnetworks->enabled))
                 {
    -                print '<tr><td><label for="skype">'.$langs->trans("Skype").'</label></td>';
    -	            print '<td><input name="skype" id="skype" type="text" class="minwidth100" maxlength="80" value="'.(isset($_POST["skype"])?GETPOST("skype"):$object->skype).'"></td></tr>';
    +            	// Skype
    +            	if (! empty($conf->global->SOCIALNETWORKS_SKYPE))
    +            	{
    +            		print '<tr><td><label for="skype">'.fieldLabel('Skype','skype').'</label></td>';
    +            		print '<td><input type="text" name="skype" id="skype" class="minwidth100" maxlength="80" value="'.dol_escape_htmltag(GETPOSTISSET("skype")?GETPOST("skype",'alpha'):$object->skype).'"></td></tr>';
    +            	}
    +            	// Twitter
    +            	if (! empty($conf->global->SOCIALNETWORKS_TWITTER))
    +            	{
    +            		print '<tr><td><label for="twitter">'.fieldLabel('Twitter','twitter').'</label></td>';
    +            		print '<td><input type="text" name="twitter" id="twitter" class="minwidth100" maxlength="80" value="'.dol_escape_htmltag(GETPOSTISSET("twitter")?GETPOST("twitter",'alpha'):$object->twitter).'"></td></tr>';
    +            	}
    +            	// Facebook
    +            	if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK))
    +            	{
    +            		print '<tr><td><label for="facebook">'.fieldLabel('Facebook','facebook').'</label></td>';
    +            		print '<td><input type="text" name="facebook" id="facebook" class="minwidth100" maxlength="80" value="'.dol_escape_htmltag(GETPOST("facebook")?GETPOST("facebook",'alpha'):$object->facebook).'"></td></tr>';
    +            	}
                 }
     
                 // Visibility
    @@ -1078,7 +1113,6 @@ else
                     else $text.=$langs->trans("UserWillBeInternalUser");
                 }
                 print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id,$langs->trans("CreateDolibarrLogin"),$text,"confirm_create_user",$formquestion,'yes');
    -
             }
     
             $linkback = '<a href="'.DOL_URL_ROOT.'/contact/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
    @@ -1247,7 +1281,6 @@ else
             }
     
             print "</div>";
    -
         }
     }
     
    diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php
    index dbf45cfb1a0..3d247bfd5ca 100644
    --- a/htdocs/contact/class/contact.class.php
    +++ b/htdocs/contact/class/contact.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2002-2004 Rodolphe Quiedeville        <rodolphe@quiedeville.org>
      * Copyright (C) 2004      Benoit Mortier              <benoit.mortier@opensides.be>
      * Copyright (C) 2004-2013 Laurent Destailleur         <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin               <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin               <regis.houssin@inodbox.com>
      * Copyright (C) 2007      Franky Van Liedekerke       <franky.van.liedekerker@telenet.be>
      * Copyright (C) 2008      Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      * Copyright (C) 2013      Florian Henry		  	       <florian.henry@open-concept.pro>
    @@ -37,9 +37,25 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Contact extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='contact';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='socpeople';
    -	public $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'contact';
     
     
    @@ -71,24 +87,24 @@ class Contact extends CommonObject
     
     	/**
     	 * @deprecated
    -	 * @see state_id
    +	 * @see $state_id
     	 */
     	public $fk_departement;
     	/**
     	 * @deprecated
    -	 * @see state_code
    +	 * @see $state_code
     	 */
     	public $departement_code;
     	/**
     	 * @deprecated
    -	 * @see state
    +	 * @see $state
     	 */
     	public $departement;
     	public $state_id;	        	// Id of department
     	public $state_code;		    // Code of department
     	public $state;			        // Label of department
     
    -    	public $poste;                 // Position
    +    public $poste;                 // Position
     
     	public $socid;					// fk_soc
     	public $statut;				// 0=inactif, 1=actif
    @@ -123,9 +139,6 @@ class Contact extends CommonObject
     	public $oldcopy;				// To contains a clone of this when we need to save old properties of object
     
     
    -
    -
    -
     	/**
     	 *	Constructor
     	 *
    @@ -137,6 +150,7 @@ class Contact extends CommonObject
     		$this->statut = 1;	// By default, status is enabled
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Load indicators into this->nb for board
     	 *
    @@ -144,6 +158,7 @@ class Contact extends CommonObject
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $user;
     
     		$this->nb=array();
    @@ -343,6 +358,8 @@ class Contact extends CommonObject
     		$sql .= ", fax='".$this->db->escape($this->fax)."'";
     		$sql .= ", email='".$this->db->escape($this->email)."'";
     		$sql .= ", skype='".$this->db->escape($this->skype)."'";
    +		$sql .= ", twitter='".$this->db->escape($this->twitter)."'";
    +		$sql .= ", facebook='".$this->db->escape($this->facebook)."'";
     		$sql .= ", photo='".$this->db->escape($this->photo)."'";
     		$sql .= ", birthday=".($this->birthday ? "'".$this->db->idate($this->birthday)."'" : "null");
     		$sql .= ", note_private = ".(isset($this->note_private)?"'".$this->db->escape($this->note_private)."'":"null");
    @@ -430,6 +447,16 @@ class Contact extends CommonObject
     					$tmpobj->skype = $this->skype;
     					$usermustbemodified++;
     				}
    +				if ($tmpobj->twitter != $this->twitter)
    +				{
    +					$tmpobj->twitter = $this->twitter;
    +					$usermustbemodified++;
    +				}
    +				if ($tmpobj->facebook != $this->facebook)
    +				{
    +					$tmpobj->facebook = $this->facebook;
    +					$usermustbemodified++;
    +				}
     				if ($usermustbemodified)
     				{
     					$result=$tmpobj->update($user, 0, 1, 1, 1);
    @@ -466,6 +493,7 @@ class Contact extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Retourne chaine DN complete dans l'annuaire LDAP pour l'objet
     	 *
    @@ -477,15 +505,17 @@ class Contact extends CommonObject
     	 */
     	function _load_ldap_dn($info,$mode=0)
     	{
    +        // phpcs:enable
     		global $conf;
     		$dn='';
     		if ($mode==0) $dn=$conf->global->LDAP_KEY_CONTACTS."=".$info[$conf->global->LDAP_KEY_CONTACTS].",".$conf->global->LDAP_CONTACT_DN;
    -		if ($mode==1) $dn=$conf->global->LDAP_CONTACT_DN;
    -		if ($mode==2) $dn=$conf->global->LDAP_KEY_CONTACTS."=".$info[$conf->global->LDAP_KEY_CONTACTS];
    +		elseif ($mode==1) $dn=$conf->global->LDAP_CONTACT_DN;
    +		elseif ($mode==2) $dn=$conf->global->LDAP_KEY_CONTACTS."=".$info[$conf->global->LDAP_KEY_CONTACTS];
     		return $dn;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Initialise tableau info (tableau des attributs LDAP)
     	 *
    @@ -493,12 +523,13 @@ class Contact extends CommonObject
     	 */
     	function _load_ldap_info()
     	{
    -		global $conf,$langs;
    +        // phpcs:enable
    +		global $conf, $langs;
     
             $info = array();
     
             // Object classes
    -		$info["objectclass"]=explode(',',$conf->global->LDAP_CONTACT_OBJECT_CLASS);
    +		$info["objectclass"]=explode(',', $conf->global->LDAP_CONTACT_OBJECT_CLASS);
     
     		$this->fullname=$this->getFullName($langs);
     
    @@ -559,6 +590,7 @@ class Contact extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update field alert birthday
     	 *
    @@ -569,6 +601,7 @@ class Contact extends CommonObject
     	 */
     	function update_perso($id, $user=null, $notrigger=0)
     	{
    +        // phpcs:enable
     	    $error=0;
     	    $result=false;
     
    @@ -649,12 +682,13 @@ class Contact extends CommonObject
     	/**
     	 *  Load object contact
     	 *
    -	 *  @param      int		$id          id du contact
    -	 *  @param      User	$user        Utilisateur (abonnes aux alertes) qui veut les alertes de ce contact
    -     *  @param      string  $ref_ext     External reference, not given by Dolibarr
    -	 *  @return     int     		     -1 if KO, 0 if OK but not found, 1 if OK
    +	 *  @param      int		$id         id du contact
    +	 *  @param      User	$user       Utilisateur (abonnes aux alertes) qui veut les alertes de ce contact
    +     *  @param      string  $ref_ext    External reference, not given by Dolibarr
    +     *  @param		string	$email		Email
    +	 *  @return     int     		    -1 if KO, 0 if OK but not found, 1 if OK
     	 */
    -	function fetch($id, $user=0, $ref_ext='')
    +	function fetch($id, $user=null, $ref_ext='', $email='')
     	{
     		global $langs;
     
    @@ -673,7 +707,7 @@ class Contact extends CommonObject
     		$sql.= " c.fk_pays as country_id,";
     		$sql.= " c.fk_departement,";
     		$sql.= " c.birthday,";
    -		$sql.= " c.poste, c.phone, c.phone_perso, c.phone_mobile, c.fax, c.email, c.jabberid, c.skype,";
    +		$sql.= " c.poste, c.phone, c.phone_perso, c.phone_mobile, c.fax, c.email, c.jabberid, c.skype, c.twitter, c.facebook,";
             $sql.= " c.photo,";
     		$sql.= " c.priv, c.note_private, c.note_public, c.default_lang, c.no_email, c.canvas,";
     		$sql.= " c.import_key,";
    @@ -688,9 +722,15 @@ class Contact extends CommonObject
     		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON c.rowid = u.fk_socpeople";
     		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON c.fk_soc = s.rowid";
     		if ($id) $sql.= " WHERE c.rowid = ". $id;
    -		elseif ($ref_ext) {
    +		else
    +		{
     			$sql .= " WHERE c.entity IN (".getEntity($this->element).")";
    -			$sql .= " AND c.ref_ext = '".$this->db->escape($ref_ext)."'";
    +			if ($ref_ext) {
    +				$sql .= " AND c.ref_ext = '".$this->db->escape($ref_ext)."'";
    +			}
    +			if ($email) {
    +				$sql .= " AND c.email = '".$this->db->escape($email)."'";
    +			}
     		}
     
     		$resql=$this->db->query($sql);
    @@ -714,7 +754,7 @@ class Contact extends CommonObject
     
     				$this->date_creation     = $this->db->jdate($obj->date_creation);
     				$this->date_modification = $this->db->jdate($obj->date_modification);
    -				
    +
     				$this->fk_departement	= $obj->fk_departement;    // deprecated
     				$this->state_id			= $obj->fk_departement;
     				$this->departement_code	= $obj->state_code;	       // deprecated
    @@ -739,6 +779,8 @@ class Contact extends CommonObject
     				$this->email				= $obj->email;
     				$this->jabberid			= $obj->jabberid;
     				$this->skype				= $obj->skype;
    +				$this->twitter				= $obj->twitter;
    +				$this->facebook				= $obj->facebook;
     				$this->photo				= $obj->photo;
     				$this->priv				= $obj->priv;
     				$this->mail				= $obj->email;
    @@ -840,6 +882,7 @@ class Contact extends CommonObject
         	}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Load number of elements the contact is used as a link for
     	 *  ref_facturation
    @@ -851,6 +894,7 @@ class Contact extends CommonObject
     	 */
     	function load_ref_elements()
     	{
    +        // phpcs:enable
     		// Compte les elements pour lesquels il est contact
     		$sql ="SELECT tc.element, count(ec.rowid) as nb";
     		$sql.=" FROM ".MAIN_DB_PREFIX."element_contact as ec, ".MAIN_DB_PREFIX."c_type_contact as tc";
    @@ -869,9 +913,9 @@ class Contact extends CommonObject
     				if ($obj->nb)
     				{
     					if ($obj->element=='facture')  $this->ref_facturation = $obj->nb;
    -					if ($obj->element=='contrat')  $this->ref_contrat = $obj->nb;
    -					if ($obj->element=='commande') $this->ref_commande = $obj->nb;
    -					if ($obj->element=='propal')   $this->ref_propal = $obj->nb;
    +					elseif ($obj->element=='contrat')  $this->ref_contrat = $obj->nb;
    +					elseif ($obj->element=='commande') $this->ref_commande = $obj->nb;
    +					elseif ($obj->element=='propal')   $this->ref_propal = $obj->nb;
     				}
     			}
     			$this->db->free($resql);
    @@ -896,8 +940,8 @@ class Contact extends CommonObject
     
     		$error=0;
     
    -		$this->old_lastname       = $obj->lastname;
    -		$this->old_firstname      = $obj->firstname;
    +		$this->old_lastname = $obj->lastname;
    +		$this->old_firstname = $obj->firstname;
     
     		$this->db->begin();
     
    @@ -1017,7 +1061,7 @@ class Contact extends CommonObject
     			{
     				$obj = $this->db->fetch_object($resql);
     
    -				$this->id                = $obj->rowid;
    +				$this->id = $obj->rowid;
     
     				if ($obj->fk_user_creat) {
     					$cuser = new User($this->db);
    @@ -1182,6 +1226,7 @@ class Contact extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoi le libelle d'un statut donne
     	 *
    @@ -1191,6 +1236,7 @@ class Contact extends CommonObject
     	 */
     	function LibStatut($statut,$mode)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
    @@ -1207,7 +1253,6 @@ class Contact extends CommonObject
     		{
     			if ($statut==0 || $statut==5) return img_picto($langs->trans('Disabled'),'statut5', 'class="pictostatus"').' '.$langs->trans('Disabled');
     			elseif ($statut==1 || $statut==4) return img_picto($langs->trans('Enabled'),'statut4', 'class="pictostatus"').' '.$langs->trans('Enabled');
    -
     		}
     		elseif ($mode == 3)
     		{
    @@ -1227,6 +1272,7 @@ class Contact extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return translated label of Public or Private
     	 *
    @@ -1235,6 +1281,7 @@ class Contact extends CommonObject
     	 */
     	function LibPubPriv($statut)
     	{
    +        // phpcs:enable
     		global $langs;
     		if ($statut=='1') return $langs->trans('ContactPrivate');
     		else return $langs->trans('ContactPublic');
    @@ -1339,6 +1386,7 @@ class Contact extends CommonObject
     	 * Existing categories are left untouch.
     	 *
     	 * @param int[]|int $categories Category or categories IDs
    +     * @return void
     	 */
     	public function setCategories($categories)
     	{
    diff --git a/htdocs/contact/document.php b/htdocs/contact/document.php
    index 1a60ddaaccb..d118c4de3b9 100644
    --- a/htdocs/contact/document.php
    +++ b/htdocs/contact/document.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2014	Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2015	Frederic France		<frederic.france@free.fr>
    - * Copyright (C) 2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2017	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -97,7 +97,7 @@ if ($object->id)
         dol_fiche_head($head, 'documents', $title, -1, 'contact');
     
     
    -    // Construit liste des fichiers
    +    // Build file list
         $filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
         $totalsize=0;
         foreach($filearray as $key => $file)
    diff --git a/htdocs/contact/info.php b/htdocs/contact/info.php
    index 7ddee3f7722..05862e0e9aa 100644
    --- a/htdocs/contact/info.php
    +++ b/htdocs/contact/info.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/contact/ldap.php b/htdocs/contact/ldap.php
    index 045cdfcd2c5..eaf165136e2 100644
    --- a/htdocs/contact/ldap.php
    +++ b/htdocs/contact/ldap.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2010	Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2017	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2017	Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php
    index 04132fa9b75..637e1879d20 100644
    --- a/htdocs/contact/list.php
    +++ b/htdocs/contact/list.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2003       Eric Seigne             <erics@rycks.com>
      * Copyright (C) 2004-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2013-2015  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
      * Copyright (C) 2013       Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    @@ -68,6 +68,8 @@ $search_phone_mobile=GETPOST("search_phone_mobile",'alpha');
     $search_fax=GETPOST("search_fax",'alpha');
     $search_email=GETPOST("search_email",'alpha');
     $search_skype=GETPOST("search_skype",'alpha');
    +$search_twitter=GETPOST("search_twitter",'alpha');
    +$search_facebook=GETPOST("search_facebook",'alpha');
     $search_priv=GETPOST("search_priv",'alpha');
     $search_categ=GETPOST("search_categ",'int');
     $search_categ_thirdparty=GETPOST("search_categ_thirdparty",'int');
    @@ -131,7 +133,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('contact');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -156,7 +158,9 @@ $arrayfields=array(
     	'p.phone_mobile'=>array('label'=>"PhoneMobile", 'checked'=>1),
     	'p.fax'=>array('label'=>"Fax", 'checked'=>0),
     	'p.email'=>array('label'=>"EMail", 'checked'=>1),
    -	'p.skype'=>array('label'=>"Skype", 'checked'=>1, 'enabled'=>(! empty($conf->skype->enabled))),
    +	'p.skype'=>array('label'=>"Skype", 'checked'=>1, 'enabled'=>(! empty($conf->socialnetworks->enabled))),
    +	'p.twitter'=>array('label'=>"Twitter", 'checked'=>1, 'enabled'=>(! empty($conf->socialnetworks->enabled))),
    +	'p.facebook'=>array('label'=>"Facebook", 'checked'=>1, 'enabled'=>(! empty($conf->socialnetworks->enabled))),
     	'p.thirdparty'=>array('label'=>"ThirdParty", 'checked'=>1, 'enabled'=>empty($conf->global->SOCIETE_DISABLE_CONTACTS)),
     	'p.priv'=>array('label'=>"ContactVisibility", 'checked'=>1, 'position'=>200),
     	'p.datec'=>array('label'=>"DateCreationShort", 'checked'=>0, 'position'=>500),
    @@ -198,7 +202,7 @@ if (empty($reshook))
     	include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
     
     	// Did we click on purge search criteria ?
    -	if (GETPOST('button_removefilter_x') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter'))	// All tests are required to be compatible with all browsers
    +	if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha'))	// All tests are required to be compatible with all browsers
     	{
     		$sall="";
     		$search_id='';
    @@ -217,6 +221,8 @@ if (empty($reshook))
     		$search_fax="";
     		$search_email="";
     		$search_skype="";
    +		$search_twitter="";
    +		$search_facebook="";
     		$search_priv="";
     		$search_status=-1;
     		$search_categ='';
    @@ -311,8 +317,11 @@ if (strlen($search_phone_pro))      $sql.= natural_search('p.phone', $search_pho
     if (strlen($search_phone_mobile))   $sql.= natural_search('p.phone_mobile', $search_phone_mobile);
     if (strlen($search_fax))            $sql.= natural_search('p.fax', $search_fax);
     if (strlen($search_skype))          $sql.= natural_search('p.skype', $search_skype);
    +if (strlen($search_twitter))        $sql.= natural_search('p.twitter', $search_twitter);
    +if (strlen($search_facebook))       $sql.= natural_search('p.facebook', $search_facebook);
     if (strlen($search_email))          $sql.= natural_search('p.email', $search_email);
     if (strlen($search_zip))   			$sql.= natural_search("p.zip",$search_zip);
    +if (strlen($search_town))   		$sql.= natural_search("p.town",$search_town);
     if ($search_status != '' && $search_status >= 0) $sql.= " AND p.statut = ".$db->escape($search_status);
     if ($search_import_key)             $sql.= natural_search("p.import_key",$search_import_key);
     if ($type == "o")        // filtre sur type
    @@ -601,6 +610,18 @@ if (! empty($arrayfields['p.skype']['checked']))
     	print '<input class="flat" type="text" name="search_skype" size="6" value="'.dol_escape_htmltag($search_skype).'">';
     	print '</td>';
     }
    +if (! empty($arrayfields['p.twitter']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat" type="text" name="search_twitter" size="6" value="'.dol_escape_htmltag($search_twitter).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['p.facebook']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat" type="text" name="search_facebook" size="6" value="'.dol_escape_htmltag($search_facebook).'">';
    +	print '</td>';
    +}
     if (! empty($arrayfields['p.thirdparty']['checked']))
     {
     	print '<td class="liste_titre">';
    @@ -671,6 +692,8 @@ if (! empty($arrayfields['p.phone_mobile']['checked']))        print_liste_field
     if (! empty($arrayfields['p.fax']['checked']))                 print_liste_field_titre($arrayfields['p.fax']['label'],$_SERVER["PHP_SELF"],"p.fax", $begin, $param, '', $sortfield,$sortorder);
     if (! empty($arrayfields['p.email']['checked']))               print_liste_field_titre($arrayfields['p.email']['label'],$_SERVER["PHP_SELF"],"p.email", $begin, $param, '', $sortfield,$sortorder);
     if (! empty($arrayfields['p.skype']['checked']))               print_liste_field_titre($arrayfields['p.skype']['label'],$_SERVER["PHP_SELF"],"p.skype", $begin, $param, '', $sortfield,$sortorder);
    +if (! empty($arrayfields['p.twitter']['checked']))             print_liste_field_titre($arrayfields['p.twitter']['label'],$_SERVER["PHP_SELF"],"p.twitter", $begin, $param, '', $sortfield,$sortorder);
    +if (! empty($arrayfields['p.facebook']['checked']))            print_liste_field_titre($arrayfields['p.facebook']['label'],$_SERVER["PHP_SELF"],"p.facebook", $begin, $param, '', $sortfield,$sortorder);
     if (! empty($arrayfields['p.thirdparty']['checked']))          print_liste_field_titre($arrayfields['p.thirdparty']['label'],$_SERVER["PHP_SELF"],"s.nom", $begin, $param, '', $sortfield,$sortorder);
     if (! empty($arrayfields['p.priv']['checked']))                print_liste_field_titre($arrayfields['p.priv']['label'],$_SERVER["PHP_SELF"],"p.priv", $begin, $param, 'align="center"', $sortfield,$sortorder);
     // Extra fields
    @@ -801,7 +824,19 @@ while ($i < min($num,$limit))
     	// Skype
     	if (! empty($arrayfields['p.skype']['checked']))
     	{
    -		if (! empty($conf->skype->enabled)) { print '<td>'.dol_print_skype($obj->skype,$obj->rowid,$obj->socid,'AC_SKYPE',18).'</td>'; }
    +		if (! empty($conf->socialnetworks->enabled)) { print '<td>'.dol_print_socialnetworks($obj->skype,$obj->rowid,$obj->socid,'skype').'</td>'; }
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Twitter
    +	if (! empty($arrayfields['p.twitter']['checked']))
    +	{
    +		if (! empty($conf->socialnetworks->enabled)) { print '<td>'.dol_print_socialnetworks($obj->twitter,$obj->rowid,$obj->socid,'twitter').'</td>'; }
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Facebook
    +	if (! empty($arrayfields['p.facebook']['checked']))
    +	{
    +		if (! empty($conf->socialnetworks->enabled)) { print '<td>'.dol_print_socialnetworks($obj->facebook,$obj->rowid,$obj->socid,'facebook').'</td>'; }
     		if (! $i) $totalarray['nbfield']++;
     	}
     	// Company
    diff --git a/htdocs/contact/note.php b/htdocs/contact/note.php
    index 731dadb6433..8958e8dcf6a 100644
    --- a/htdocs/contact/note.php
    +++ b/htdocs/contact/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003,2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011      Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010           Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2013           Florian Henry		 <florian.henry@open-concept.pro>
      *
    diff --git a/htdocs/contact/perso.php b/htdocs/contact/perso.php
    index 3e5ec085132..8e74c33cd14 100644
    --- a/htdocs/contact/perso.php
    +++ b/htdocs/contact/perso.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2004       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2011  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -199,7 +200,7 @@ if ($action == 'edit')
         // Date To Birth
         print '<tr><td>'.$langs->trans("DateToBirth").'</td><td>';
         $form=new Form($db);
    -    print $form->select_date($object->birthday,'birthday',0,0,1,"perso", 1,0,1);
    +    print $form->selectDate($object->birthday, 'birthday', 0, 0, 1, "perso", 1,0);
         print '</td>';
     
         print '<td colspan="2">'.$langs->trans("Alert").': ';
    diff --git a/htdocs/contact/vcard.php b/htdocs/contact/vcard.php
    index 5229a0e8416..be45fabf099 100644
    --- a/htdocs/contact/vcard.php
    +++ b/htdocs/contact/vcard.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/contrat/admin/contract_extrafields.php b/htdocs/contrat/admin/contract_extrafields.php
    index b9b0d51c162..3e3e82f6e0b 100644
    --- a/htdocs/contrat/admin/contract_extrafields.php
    +++ b/htdocs/contrat/admin/contract_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013-2018	Philippe Grand			<philippe.grand@atoo-net.com>
      *
    @@ -81,7 +81,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -94,7 +94,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -	print '<div name="topofform"></div><br>';
    +	print '<br><div name="topofform" id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    diff --git a/htdocs/contrat/admin/contractdet_extrafields.php b/htdocs/contrat/admin/contractdet_extrafields.php
    index 42a8ed589d7..69cfd219fcf 100644
    --- a/htdocs/contrat/admin/contractdet_extrafields.php
    +++ b/htdocs/contrat/admin/contractdet_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2014		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      *
    @@ -81,7 +81,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -94,8 +94,8 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    -    print load_fiche_titre($langs->trans('NewAttribute'));
    +	print '<br><div id="newattrib"></div>';
    +	print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
     }
    diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php
    index 5f418cb0568..d53413efee0 100644
    --- a/htdocs/contrat/card.php
    +++ b/htdocs/contrat/card.php
    @@ -1,14 +1,15 @@
     <?php
    -/* Copyright (C) 2003-2004	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2014	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@capnetworks.com>
    - * Copyright (C) 2006		Andre Cianfarani		<acianfa@free.fr>
    - * Copyright (C) 2010-2017	Juanjo Menent			<jmenent@2byte.es>
    +/* Copyright (C) 2003-2004  Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2014  Laurent Destailleur		<eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2014  Regis Houssin			<regis.houssin@inodbox.com>
    + * Copyright (C) 2006       Andre Cianfarani		<acianfa@free.fr>
    + * Copyright (C) 2010-2017  Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2013       Christophe Battarel     <christophe.battarel@altairis.fr>
      * Copyright (C) 2013-2014  Florian Henry		  	<florian.henry@open-concept.pro>
      * Copyright (C) 2014-2018	Ferran Marcet		  	<fmarcet@2byte.es>
      * Copyright (C) 2014-2016  Marcos García           <marcosgdf@gmail.com>
    - * Copyright (C) 2015       Jean-François Ferry		<jfefe@aternatik.fr>
    + * Copyright (C) 2015       Jean-François Ferry     <jfefe@aternatik.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,7 +31,7 @@
      *       \brief      Page of a contract
      */
     
    -require ("../main.inc.php");
    +require "../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php';
    @@ -565,7 +566,7 @@ if (empty($reshook))
     			$info_bits=0;
     			if ($tva_npr) $info_bits |= 0x01;
     
    -			if($price_min && (price2num($pu_ht)*(1-price2num($remise_percent)/100) < price2num($price_min)))
    +			if (((!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->produit->ignore_price_min_advance)) || empty($conf->global->MAIN_USE_ADVANCED_PERMS) )&& ($price_min && (price2num($pu_ht)*(1-price2num($remise_percent)/100) < price2num($price_min))))
     			{
     				$object->error = $langs->trans("CantBeLessThanMinPrice",price(price2num($price_min,'MU'),0,$langs,0,0,-1,$conf->currency));
     				$result = -1 ;
    @@ -1242,7 +1243,7 @@ if ($action == 'create')
     	print '</td></tr>';
     
     	print '<tr><td><span class="fieldrequired">'.$langs->trans("Date").'</span></td><td>';
    -	$form->select_date($datecontrat,'',0,0,'',"contrat");
    +	print $form->selectDate($datecontrat, '', 0, 0, '', "contrat");
     	print "</td></tr>";
     
     	// Project
    @@ -1317,8 +1318,10 @@ else
     	{
     		$object->fetch_thirdparty();
     
    -		$result=$object->fetch_lines();	// This also init $this->nbofserviceswait, $this->nbofservicesopened, $this->nbofservicesexpired=, $this->nbofservicesclosed
    -		if ($result < 0) dol_print_error($db,$object->error);
    +		$result=$object->fetch_lines(); // This also init $this->nbofserviceswait, $this->nbofservicesopened, $this->nbofservicesexpired=, $this->nbofservicesclosed
    +		if ($result < 0) {
    +            dol_print_error($db,$object->error);
    +        }
     
     		$nbofservices=count($object->lines);
     
    @@ -1333,56 +1336,54 @@ else
     
     		$head = contract_prepare_head($object);
     
    -		$hselected = 0;
    +        $hselected = 0;
    +        $formconfirm = '';
     
    -		dol_fiche_head($head, $hselected, $langs->trans("Contract"), -1, 'contract');
    +        dol_fiche_head($head, $hselected, $langs->trans("Contract"), -1, 'contract');
     
     
    -		/*
    -         * Confirmation de la suppression du contrat
    -         */
    -		if ($action == 'delete')
    -		{
    -			print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("DeleteAContract"),$langs->trans("ConfirmDeleteAContract"),"confirm_delete",'',0,1);
    +        if ($action == 'delete') {
    +            //Confirmation de la suppression du contrat
    +            $formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("DeleteAContract"),$langs->trans("ConfirmDeleteAContract"),"confirm_delete",'',0,1);
    +        } elseif ($action == 'valid') {
    +            //Confirmation de la validation
    +            $ref = substr($object->ref, 1, 4);
    +            if ($ref == 'PROV' && !empty($modCodeContract->code_auto)) {
    +                $numref = $object->getNextNumRef($object->thirdparty);
    +            } else {
    +                $numref = $object->ref;
    +            }
    +            $text = $langs->trans('ConfirmValidateContract',$numref);
    +            $formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("ValidateAContract"),$text,"confirm_valid",'',0,1);
    +        } elseif ($action == 'close') {
    +            // Confirmation de la fermeture
    +            $formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("CloseAContract"),$langs->trans("ConfirmCloseContract"),"confirm_close",'',0,1);
    +        } elseif ($action == 'activate') {
    +            $formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("ActivateAllOnContract"),$langs->trans("ConfirmActivateAllOnContract"),"confirm_activate",'',0,1);
    +        } elseif ($action == 'clone') {
    +            // Clone confirmation
    +            $formquestion = array(array('type' => 'other','name' => 'socid','label' => $langs->trans("SelectThirdParty"),'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', '(s.client=1 OR s.client=2 OR s.client=3)')));
    +            $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('CloneContract'), $langs->trans('ConfirmCloneContract', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
    +        }
     
    -		}
     
    -		/*
    -         * Confirmation de la validation
    -         */
    -		if ($action == 'valid')
    -		{
    -			$ref = substr($object->ref, 1, 4);
    -			if ($ref == 'PROV' && !empty($modCodeContract->code_auto))
    -			{
    -				$numref = $object->getNextNumRef($object->thirdparty);
    -			}
    -			else
    -			{
    -				$numref = $object->ref;
    -			}
    +        // Call Hook formConfirm
    +        $parameters = array(
    +            'id' => $id,
    +            //'lineid' => $lineid,
    +        );
    +        // Note that $action and $object may have been modified by hook
    +        $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action);
    +        if (empty($reshook)) {
    +            $formconfirm .= $hookmanager->resPrint;
    +        } elseif ($reshook > 0) {
    +            $formconfirm = $hookmanager->resPrint;
    +        }
     
    -			$text=$langs->trans('ConfirmValidateContract',$numref);
    +        // Print form confirm
    +        print $formconfirm;
     
    -			print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("ValidateAContract"),$text,"confirm_valid",'',0,1);
    -
    -		}
    -
    -		/*
    -         * Confirmation de la fermeture
    -         */
    -		if ($action == 'close')
    -		{
    -			print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("CloseAContract"),$langs->trans("ConfirmCloseContract"),"confirm_close",'',0,1);
    -
    -		}
    -		if ($action == 'activate')
    -		{
    -			print $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("ActivateAllOnContract"),$langs->trans("ConfirmActivateAllOnContract"),"confirm_activate",'',0,1);
    -
    -		}
    -
    -		/*
    +        /*
              *   Contrat
              */
     		if (! empty($object->brouillon) && $user->rights->contrat->creer)
    @@ -1392,12 +1393,6 @@ else
     			print '<input type="hidden" name="action" value="setremise">';
     		}
     
    -		// Clone confirmation
    -		if ($action == 'clone') {
    -			$formquestion = array(array('type' => 'other','name' => 'socid','label' => $langs->trans("SelectThirdParty"),'value' => $form->select_company(GETPOST('socid', 'int'), 'socid', '(s.client=1 OR s.client=2 OR s.client=3)')));
    -			print $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('CloneContract'), $langs->trans('ConfirmCloneContract', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);
    -		}
    -
     		// Contract card
     
     		$linkback = '<a href="'.DOL_URL_ROOT.'/contrat/list.php?restore_lastsearch_values=1'.(! empty($socid)?'&socid='.$socid:'').'">'.$langs->trans("BackToList").'</a>';
    @@ -1516,7 +1511,7 @@ else
     		}
     
     
    -		$colorb='666666';
    +		$colorb = '666666';
     
     		$arrayothercontracts=$object->getListOfContracts('others');
     
    @@ -1782,9 +1777,9 @@ else
     					print '<tr class="oddeven">';
     					print '<td colspan="'.$colspan.'">';
     					print $langs->trans("DateStartPlanned").' ';
    -					$form->select_date($db->jdate($objp->date_debut),"date_start_update",$usehm,$usehm,($db->jdate($objp->date_debut)>0?0:1),"update");
    +					print $form->selectDate($db->jdate($objp->date_debut), "date_start_update", $usehm, $usehm, ($db->jdate($objp->date_debut)>0?0:1), "update");
     					print ' &nbsp;&nbsp;'.$langs->trans("DateEndPlanned").' ';
    -					$form->select_date($db->jdate($objp->date_fin),"date_end_update",$usehm,$usehm,($db->jdate($objp->date_fin)>0?0:1),"update");
    +					print $form->selectDate($db->jdate($objp->date_fin), "date_end_update", $usehm, $usehm, ($db->jdate($objp->date_fin)>0?0:1), "update");
     					print '</td>';
     					print '</tr>';
     
    @@ -1967,10 +1962,10 @@ else
     
     				print '<tr class="oddeven">';
     				print '<td class="nohover">'.$langs->trans("DateServiceActivate").'</td><td class="nohover">';
    -				print $form->select_date($dateactstart,'',$usehm,$usehm,'',"active",1,0,1);
    +				print $form->selectDate($dateactstart, '', $usehm, $usehm, '', "active", 1, 0);
     				print '</td>';
     				print '<td class="nohover">'.$langs->trans("DateEndPlanned").'</td><td class="nohover">';
    -				print $form->select_date($dateactend,"end",$usehm,$usehm,'',"active",1,0,1);
    +				print $form->selectDate($dateactend, "end", $usehm, $usehm, '', "active", 1, 0);
     				print '</td>';
     				print '<td class="center nohover">';
     				print '</td>';
    @@ -2028,7 +2023,7 @@ else
     					if ($objp->statut == 4)
     					{
     						print $langs->trans("DateEndReal").' ';
    -						print $form->select_date($dateactend,"end",$usehm,$usehm,($objp->date_fin_reelle>0?0:1),"closeline",1,1,1);
    +						print $form->selectDate($dateactend, "end", $usehm, $usehm, ($objp->date_fin_reelle>0?0:1), "closeline", 1, 1);
     					}
     				}
     				print '</td>';
    diff --git a/htdocs/contrat/class/api_contracts.class.php b/htdocs/contrat/class/api_contracts.class.php
    index 1bb17eb4352..585d5399771 100644
    --- a/htdocs/contrat/class/api_contracts.class.php
    +++ b/htdocs/contrat/class/api_contracts.class.php
    @@ -1,6 +1,7 @@
     <?php
     /* Copyright (C) 2015   Jean-François Ferry     <jfefe@aternatik.fr>
      * Copyright (C) 2016	Laurent Destailleur		<eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -55,13 +56,13 @@ class Contracts extends DolibarrApi
         }
     
         /**
    -     * Get properties of a contrat object
    +     * Get properties of a contract object
          *
    -     * Return an array with contrat informations
    +     * Return an array with contract informations
          *
          * @param       int         $id         ID of contract
          * @return 	array|mixed data without useless information
    -	 *
    +     *
          * @throws 	RestException
          */
         function get($id)
    @@ -100,7 +101,8 @@ class Contracts extends DolibarrApi
          *
     	 * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -214,27 +216,28 @@ class Contracts extends DolibarrApi
          *
          * @url	GET {id}/lines
          *
    -     * @return int
    +     * @return array
          */
    -    function getLines($id) {
    -      if(! DolibarrApiAccess::$user->rights->contrat->lire) {
    -		  	throw new RestException(401);
    -		  }
    +    function getLines($id)
    +    {
    +        if(! DolibarrApiAccess::$user->rights->contrat->lire) {
    +            throw new RestException(401);
    +		}
     
    -      $result = $this->contract->fetch($id);
    -      if( ! $result ) {
    -         throw new RestException(404, 'Contract not found');
    -      }
    +        $result = $this->contract->fetch($id);
    +        if( ! $result ) {
    +            throw new RestException(404, 'Contract not found');
    +        }
     
    -		  if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    -			  throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -      }
    -      $this->contract->getLinesArray();
    -      $result = array();
    -      foreach ($this->contract->lines as $line) {
    -        array_push($result,$this->_cleanObjectDatas($line));
    -      }
    -      return $result;
    +		if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    +		    throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
    +        $this->contract->getLinesArray();
    +        $result = array();
    +        foreach ($this->contract->lines as $line) {
    +            array_push($result, $this->_cleanObjectDatas($line));
    +        }
    +        return $result;
         }
     
         /**
    @@ -245,48 +248,48 @@ class Contracts extends DolibarrApi
          *
          * @url	POST {id}/lines
          *
    -     * @return int
    +     * @return int|bool
          */
    -    function postLine($id, $request_data = null) {
    -      if(! DolibarrApiAccess::$user->rights->contrat->creer) {
    -		  	throw new RestException(401);
    -		  }
    +    function postLine($id, $request_data = null)
    +    {
    +        if(! DolibarrApiAccess::$user->rights->contrat->creer) {
    +			throw new RestException(401);
    +		}
     
    -      $result = $this->contract->fetch($id);
    -      if( ! $result ) {
    -         throw new RestException(404, 'Contract not found');
    -      }
    +        $result = $this->contract->fetch($id);
    +        if( ! $result ) {
    +            throw new RestException(404, 'Contract not found');
    +        }
     
    -		  if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    -			  throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -      }
    -			$request_data = (object) $request_data;
    -      $updateRes = $this->contract->addline(
    -                        $request_data->desc,
    -                        $request_data->subprice,
    -                        $request_data->qty,
    -                        $request_data->tva_tx,
    -                        $request_data->localtax1_tx,
    -                        $request_data->localtax2_tx,
    -                        $request_data->fk_product,
    -                        $request_data->remise_percent,
    -                        $request_data->date_start,			// date_start = date planned start, date ouverture = date_start_real
    -                        $request_data->date_end,			// date_end = date planned end, date_cloture = date_end_real
    -                        $request_data->HT,
    -      					$request_data->subprice_excl_tax,
    -      					$request_data->info_bits,
    -                        $request_data->fk_fournprice,
    -				      	$request_data->pa_ht,
    -      					$request_data->array_options,
    -      					$request_data->fk_unit,
    -      					$request_data->rang
    -      );
    +		if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    +			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
    +		$request_data = (object) $request_data;
    +        $updateRes = $this->contract->addline(
    +            $request_data->desc,
    +            $request_data->subprice,
    +            $request_data->qty,
    +            $request_data->tva_tx,
    +            $request_data->localtax1_tx,
    +            $request_data->localtax2_tx,
    +            $request_data->fk_product,
    +            $request_data->remise_percent,
    +            $request_data->date_start,			// date_start = date planned start, date ouverture = date_start_real
    +            $request_data->date_end,			// date_end = date planned end, date_cloture = date_end_real
    +            $request_data->HT,
    +      		$request_data->subprice_excl_tax,
    +      		$request_data->info_bits,
    +            $request_data->fk_fournprice,
    +			$request_data->pa_ht,
    +      		$request_data->array_options,
    +      		$request_data->fk_unit,
    +      		$request_data->rang
    +        );
     
    -      if ($updateRes > 0) {
    -        return $updateRes;
    -
    -      }
    -      return false;
    +        if ($updateRes > 0) {
    +            return $updateRes;
    +        }
    +        return false;
         }
     
         /**
    @@ -298,52 +301,53 @@ class Contracts extends DolibarrApi
          *
          * @url	PUT {id}/lines/{lineid}
          *
    -     * @return object
    +     * @return array|bool
          */
    -    function putLine($id, $lineid, $request_data = null) {
    -      if(! DolibarrApiAccess::$user->rights->contrat->creer) {
    -		  	throw new RestException(401);
    -		  }
    -
    -      $result = $this->contract->fetch($id);
    -      if( ! $result ) {
    -         throw new RestException(404, 'Contrat not found');
    -      }
    -
    -		if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    -			  throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +    function putLine($id, $lineid, $request_data = null)
    +    {
    +        if(! DolibarrApiAccess::$user->rights->contrat->creer) {
    +			throw new RestException(401);
     		}
     
    -      $request_data = (object) $request_data;
    +        $result = $this->contract->fetch($id);
    +        if( ! $result ) {
    +            throw new RestException(404, 'Contrat not found');
    +        }
     
    -      $updateRes = $this->contract->updateline(
    -                        $lineid,
    -                        $request_data->desc,
    -                        $request_data->subprice,
    -                        $request_data->qty,
    -                        $request_data->remise_percent,
    -                        $request_data->date_ouveture_prevue,
    -                        $request_data->date_fin_validite,
    -      					$request_data->tva_tx,
    -                        $request_data->localtax1_tx,
    -                        $request_data->localtax2_tx,
    -                        $request_data->date_ouverture,
    -                        $request_data->date_cloture,
    -      					'HT',
    -                        $request_data->info_bits,
    -                        $request_data->fk_fourn_price,
    -                        $request_data->pa_ht,
    -                        $request_data->array_options,
    -                        $request_data->fk_unit
    -      );
    +		if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    +			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +		}
     
    -      if ($updateRes > 0) {
    -        $result = $this->get($id);
    -        unset($result->line);
    -        return $this->_cleanObjectDatas($result);
    -      }
    +        $request_data = (object) $request_data;
     
    -      return false;
    +        $updateRes = $this->contract->updateline(
    +            $lineid,
    +            $request_data->desc,
    +            $request_data->subprice,
    +            $request_data->qty,
    +            $request_data->remise_percent,
    +            $request_data->date_ouveture_prevue,
    +            $request_data->date_fin_validite,
    +      		$request_data->tva_tx,
    +            $request_data->localtax1_tx,
    +            $request_data->localtax2_tx,
    +            $request_data->date_ouverture,
    +            $request_data->date_cloture,
    +      		'HT',
    +            $request_data->info_bits,
    +            $request_data->fk_fourn_price,
    +            $request_data->pa_ht,
    +            $request_data->array_options,
    +            $request_data->fk_unit
    +        );
    +
    +        if ($updateRes > 0) {
    +            $result = $this->get($id);
    +            unset($result->line);
    +            return $this->_cleanObjectDatas($result);
    +        }
    +
    +        return false;
         }
     
         /**
    @@ -357,15 +361,16 @@ class Contracts extends DolibarrApi
          *
          * @url	PUT {id}/lines/{lineid}/activate
          *
    -     * @return object
    +     * @return array|bool
          */
    -    function activateLine($id, $lineid, $datestart, $dateend = null, $comment = null) {
    +    function activateLine($id, $lineid, $datestart, $dateend = null, $comment = null)
    +    {
         	if(! DolibarrApiAccess::$user->rights->contrat->creer) {
         		throw new RestException(401);
         	}
     
         	$result = $this->contract->fetch($id);
    -    	if( ! $result ) {
    +    	if (! $result) {
         		throw new RestException(404, 'Contrat not found');
         	}
     
    @@ -394,15 +399,16 @@ class Contracts extends DolibarrApi
          *
          * @url	PUT {id}/lines/{lineid}/unactivate
          *
    -     * @return object
    +     * @return array|bool
          */
    -    function unactivateLine($id, $lineid, $datestart, $comment = null) {
    -    	if(! DolibarrApiAccess::$user->rights->contrat->creer) {
    +    function unactivateLine($id, $lineid, $datestart, $comment = null)
    +    {
    +    	if (! DolibarrApiAccess::$user->rights->contrat->creer) {
         		throw new RestException(401);
         	}
     
         	$result = $this->contract->fetch($id);
    -    	if( ! $result ) {
    +    	if (! $result) {
         		throw new RestException(404, 'Contrat not found');
         	}
     
    @@ -436,51 +442,53 @@ class Contracts extends DolibarrApi
          * @throws 401
          * @throws 404
          */
    -    function deleteLine($id, $lineid) {
    -      if(! DolibarrApiAccess::$user->rights->contrat->creer) {
    -		  	throw new RestException(401);
    -		  }
    +    function deleteLine($id, $lineid)
    +    {
    +        if (! DolibarrApiAccess::$user->rights->contrat->creer) {
    +			throw new RestException(401);
    +		}
     
    -      $result = $this->contract->fetch($id);
    -      if( ! $result ) {
    -         throw new RestException(404, 'Contrat not found');
    -      }
    +        $result = $this->contract->fetch($id);
    +        if (! $result) {
    +            throw new RestException(404, 'Contrat not found');
    +        }
     
    -		  if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    -			  throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -      }
    +		if (! DolibarrApi::_checkAccessToResource('contrat', $this->contract->id)) {
    +			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
     
    -      // TODO Check the lineid $lineid is a line of ojbect
    +        // TODO Check the lineid $lineid is a line of object
     
    -      $updateRes = $this->contract->deleteline($lineid, DolibarrApiAccess::$user);
    -      if ($updateRes > 0) {
    -        return $this->get($id);
    -      }
    -      else
    -      {
    -      	throw new RestException(405, $this->contract->error);
    -      }
    +        $updateRes = $this->contract->deleteline($lineid, DolibarrApiAccess::$user);
    +        if ($updateRes > 0) {
    +            return $this->get($id);
    +        }
    +        else
    +        {
    +      	    throw new RestException(405, $this->contract->error);
    +        }
         }
     
         /**
          * Update contract general fields (won't touch lines of contract)
          *
    -     * @param int   $id             Id of contrat to update
    +     * @param int   $id             Id of contract to update
          * @param array $request_data   Datas
          *
          * @return int
          */
    -    function put($id, $request_data = null) {
    -      if(! DolibarrApiAccess::$user->rights->contrat->creer) {
    -		  	throw new RestException(401);
    -		  }
    +    function put($id, $request_data = null)
    +    {
    +        if (! DolibarrApiAccess::$user->rights->contrat->creer) {
    +			throw new RestException(401);
    +		}
     
             $result = $this->contract->fetch($id);
    -        if( ! $result ) {
    +        if (! $result) {
                 throw new RestException(404, 'Contrat not found');
             }
     
    -		if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    +		if (! DolibarrApi::_checkAccessToResource('contrat', $this->contract->id)) {
     			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
     		}
             foreach($request_data as $field => $value) {
    @@ -507,19 +515,19 @@ class Contracts extends DolibarrApi
          */
         function delete($id)
         {
    -        if(! DolibarrApiAccess::$user->rights->contrat->supprimer) {
    +        if (! DolibarrApiAccess::$user->rights->contrat->supprimer) {
     			throw new RestException(401);
     		}
             $result = $this->contract->fetch($id);
    -        if( ! $result ) {
    +        if (! $result) {
                 throw new RestException(404, 'Contract not found');
             }
     
    -		if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    +		if (! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
     			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
     		}
     
    -        if( ! $this->contract->delete(DolibarrApiAccess::$user)) {
    +        if (! $this->contract->delete(DolibarrApiAccess::$user)) {
                 throw new RestException(500, 'Error when delete contract : '.$this->contract->error);
             }
     
    @@ -529,11 +537,10 @@ class Contracts extends DolibarrApi
                     'message' => 'Contract deleted'
                 )
             );
    -
         }
     
         /**
    -     * Validate an contract
    +     * Validate a contract
          *
          * @param   int $id             Contract ID
          * @param   int $notrigger      1=Does not execute triggers, 0= execute triggers
    @@ -550,15 +557,15 @@ class Contracts extends DolibarrApi
          */
         function validate($id, $notrigger=0)
         {
    -        if(! DolibarrApiAccess::$user->rights->contrat->creer) {
    +        if (! DolibarrApiAccess::$user->rights->contrat->creer) {
     			throw new RestException(401);
     		}
             $result = $this->contract->fetch($id);
    -        if( ! $result ) {
    +        if (! $result) {
                 throw new RestException(404, 'Contract not found');
             }
     
    -		if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    +		if (! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
     			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
     		}
     
    @@ -596,15 +603,15 @@ class Contracts extends DolibarrApi
          */
         function close($id, $notrigger=0)
         {
    -    	if(! DolibarrApiAccess::$user->rights->contrat->creer) {
    +    	if (! DolibarrApiAccess::$user->rights->contrat->creer) {
         		throw new RestException(401);
         	}
         	$result = $this->contract->fetch($id);
    -    	if( ! $result ) {
    +    	if (! $result) {
         		throw new RestException(404, 'Contract not found');
         	}
     
    -    	if( ! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
    +    	if (! DolibarrApi::_checkAccessToResource('contrat',$this->contract->id)) {
         		throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
         	}
     
    @@ -632,7 +639,8 @@ class Contracts extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    @@ -665,7 +673,6 @@ class Contracts extends DolibarrApi
                 if (!isset($data[$field]))
                     throw new RestException(400, "$field field missing");
                 $contrat[$field] = $data[$field];
    -
             }
             return $contrat;
         }
    diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php
    index 291569270b3..16e343aaba8 100644
    --- a/htdocs/contrat/class/contrat.class.php
    +++ b/htdocs/contrat/class/contrat.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012	Destailleur Laurent		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2006		Andre Cianfarani		<acianfa@free.fr>
      * Copyright (C) 2008		Raphael Bertrand		<raphael.bertrand@resultic.fr>
      * Copyright (C) 2010-2016	Juanjo Menent			<jmenent@2byte.es>
    @@ -10,6 +10,7 @@
      * Copyright (C) 2014-2015	Marcos García			<marcosgdf@gmail.com>
      * Copyright (C) 2015-2017	Ferran Marcet			<fmarcet@2byte.es>
      * Copyright (C) 2018   	Nicolas ZABOURI			<info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -41,16 +42,37 @@ require_once DOL_DOCUMENT_ROOT . '/margin/lib/margins.lib.php';
      */
     class Contrat extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='contrat';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='contrat';
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line='contratdet';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element='fk_contrat';
    -    public $picto='contract';
    +
    +    /**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto='contract';
    +
         /**
          * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
          * @var int
          */
         public $ismultientitymanaged = 1;
    +
         /**
          * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
          * @var integer
    @@ -66,27 +88,29 @@ class Contrat extends CommonObject
     	 * Customer reference of the contract
     	 * @var string
     	 */
    -	var $ref_customer;
    +	public $ref_customer;
     
     	/**
     	 * Supplier reference of the contract
     	 * @var string
     	 */
    -	var $ref_supplier;
    +	public $ref_supplier;
     
     	/**
     	 * Client id linked to the contract
     	 * @var int
     	 */
    -	var $socid;
    -	var $societe;		// Objet societe
    +	public $socid;
    +
    +	public $societe;		// Objet societe
     
     	/**
     	 * Status of the contract
     	 * @var int
     	 */
    -	var $statut=0;		// 0=Draft,
    -	var $product;
    +	public $statut=0;		// 0=Draft,
    +
    +	public $product;
     
     	/**
     	 * @var int		Id of user author of the contract
    @@ -113,7 +137,7 @@ class Contrat extends CommonObject
     	/**
     	 * @var int		Date of creation
     	 */
    -	var $date_creation;
    +	public $date_creation;
     
     	/**
     	 * @var int		Date of last modification. Not filled until you call ->info()
    @@ -123,34 +147,34 @@ class Contrat extends CommonObject
     	/**
     	 * @var int		Date of validation
     	 */
    -	var $date_validation;
    +	public $date_validation;
     
     	/**
     	 * @var int		Date when contract was signed
     	 */
    -	var $date_contrat;
    +	public $date_contrat;
     
     	/**
     	 * @var int		Date of contract closure
     	 * @deprecated we close contract lines, not a contract
     	 */
    -	var $date_cloture;
    +	public $date_cloture;
     
    -	var $commercial_signature_id;
    -	var $commercial_suivi_id;
    +	public $commercial_signature_id;
    +	public $commercial_suivi_id;
     
     	/**
     	 * @deprecated Use fk_project instead
     	 * @see fk_project
     	 */
    -	var $fk_projet;
    +	public $fk_projet;
     
    -	var $extraparams=array();
    +	public $extraparams=array();
     
     	/**
     	 * @var ContratLigne[]		Contract lines
     	 */
    -	var $lines=array();
    +	public $lines=array();
     
     	/**
     	 * Maps ContratLigne IDs to $this->lines indexes
    @@ -226,18 +250,20 @@ class Contrat extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Activate a contract line
     	 *
     	 *  @param	User		$user       Objet User who activate contract
     	 *  @param  int			$line_id    Id of line to activate
    -	 *  @param  int			$date       Date d'ouverture
    -	 *  @param  int|string	$date_end   Date fin prevue
    +	 *  @param  int			$date       Opening date
    +	 *  @param  int|string	$date_end   Expected end date
     	 * 	@param	string		$comment	A comment typed by user
     	 *  @return int         			<0 if KO, >0 if OK
     	 */
     	function active_line($user, $line_id, $date, $date_end='', $comment='')
     	{
    +        // phpcs:enable
     		$result = $this->lines[$this->lines_id_index_mapper[$line_id]]->active_line($user, $date, $date_end, $comment);
     		if ($result < 0)
     		{
    @@ -248,17 +274,19 @@ class Contrat extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Close a contract line
     	 *
     	 *  @param	User		$user       Objet User who close contract
     	 *  @param  int			$line_id    Id of line to close
    -	 *  @param  int			$date_end	Date end
    +	 *  @param  int			$date_end	End date
     	 * 	@param	string		$comment	A comment typed by user
     	 *  @return int         			<0 if KO, >0 if OK
     	 */
     	function close_line($user, $line_id, $date_end, $comment='')
     	{
    +        // phpcs:enable
     		$result=$this->lines[$this->lines_id_index_mapper[$line_id]]->close_line($user, $date_end, $comment);
     		if ($result < 0)
     		{
    @@ -285,11 +313,11 @@ class Contrat extends CommonObject
     
     		$this->db->begin();
     
    +		$error=0;
    +
     		// Load lines
     		$this->fetch_lines();
     
    -		$error=0;
    -
     		foreach($this->lines as $contratline)
     		{
     			// Open lines not already open
    @@ -510,13 +538,12 @@ class Contrat extends CommonObject
     			$this->db->rollback();
     			return -1;
     		}
    -
     	}
     
     	/**
     	 * Unvalidate a contract
     	 *
    -	 * @param	User	$user      		Objet User
    +	 * @param	User	$user      		Object User
          * @param	int		$notrigger		1=Does not execute triggers, 0=execute triggers
     	 * @return	int						<0 if KO, >0 if OK
     	 */
    @@ -558,7 +585,7 @@ class Contrat extends CommonObject
     			// End call triggers
     		}
     
    -		// Set new ref and define current statut
    +		// Set new ref and define current status
     		if (! $error)
     		{
     			$this->statut=0;
    @@ -617,56 +644,49 @@ class Contrat extends CommonObject
     		$resql = $this->db->query($sql);
     		if ($resql)
     		{
    -			$result = $this->db->fetch_array($resql);
    +			$obj = $this->db->fetch_object($resql);
     
    -			if ($result)
    +			if ($obj)
     			{
    -				$this->id						= $result["rowid"];
    -				$this->ref						= (!isset($result["ref"]) || !$result["ref"]) ? $result["rowid"] : $result["ref"];
    -				$this->ref_customer				= $result["ref_customer"];
    -				$this->ref_supplier				= $result["ref_supplier"];
    -				$this->ref_ext					= $result["ref_ext"];
    -				$this->statut					= $result["statut"];
    -				$this->mise_en_service			= $this->db->jdate($result["datemise"]);
    +				$this->id						= $obj->rowid;
    +				$this->ref						= (!isset($obj->ref) || !$obj->ref) ? $obj->rowid : $obj->ref;
    +				$this->ref_customer				= $obj->ref_customer;
    +				$this->ref_supplier				= $obj->ref_supplier;
    +				$this->ref_ext					= $obj->ref_ext;
    +				$this->statut					= $obj->statut;
    +				$this->mise_en_service			= $this->db->jdate($obj->datemise);
     
    -				$this->date_contrat				= $this->db->jdate($result["datecontrat"]);
    -				$this->date_creation			= $this->db->jdate($result["datecontrat"]);
    +				$this->date_contrat				= $this->db->jdate($obj->datecontrat);
    +				$this->date_creation			= $this->db->jdate($obj->datecontrat);
     
    -				$this->fin_validite				= $this->db->jdate($result["fin_validite"]);
    -				$this->date_cloture				= $this->db->jdate($result["date_cloture"]);
    +				$this->fin_validite				= $this->db->jdate($obj->fin_validite);
    +				$this->date_cloture				= $this->db->jdate($obj->date_cloture);
     
     
    -				$this->user_author_id			= $result["fk_user_author"];
    +				$this->user_author_id			= $obj->fk_user_author;
     
    -				$this->commercial_signature_id	= $result["fk_commercial_signature"];
    -				$this->commercial_suivi_id		= $result["fk_commercial_suivi"];
    +				$this->commercial_signature_id	= $obj->fk_commercial_signature;
    +				$this->commercial_suivi_id		= $obj->fk_commercial_suivi;
     
    -				$this->note_private				= $result["note_private"];
    -				$this->note_public				= $result["note_public"];
    -				$this->modelpdf					= $result["model_pdf"];
    +				$this->note_private				= $obj->note_private;
    +				$this->note_public				= $obj->note_public;
    +				$this->modelpdf					= $obj->model_pdf;
     
    -				$this->fk_projet				= $result["fk_projet"]; // deprecated
    -				$this->fk_project				= $result["fk_projet"];
    +				$this->fk_projet				= $obj->fk_projet; // deprecated
    +				$this->fk_project				= $obj->fk_projet;
     
    -				$this->socid					= $result["fk_soc"];
    -				$this->fk_soc					= $result["fk_soc"];
    +				$this->socid					= $obj->fk_soc;
    +				$this->fk_soc					= $obj->fk_soc;
     
    -				$this->extraparams				= (array) json_decode($result["extraparams"], true);
    +				$this->extraparams				= (array) json_decode($obj->extraparams, true);
     
     				$this->db->free($resql);
     
    -
    -				// Retreive all extrafield
    +				// Retreive all extrafields
     				// fetch optionals attributes and labels
     				$this->fetch_optionals();
     
    -
    -				/*
    -				 * Lines
    -				 */
    -
    -				$this->lines  = array();
    -
    +				// Lines
     				$result=$this->fetch_lines();
     				if ($result < 0)
     				{
    @@ -689,9 +709,9 @@ class Contrat extends CommonObject
     			$this->error=$this->db->error();
     			return -1;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Load lines array into this->lines.
     	 *  This set also nbofserviceswait, nbofservicesopened, nbofservicesexpired and nbofservicesclosed
    @@ -700,6 +720,7 @@ class Contrat extends CommonObject
     	 */
     	function fetch_lines()
     	{
    +        // phpcs:enable
     		$this->nbofserviceswait=0;
     		$this->nbofservicesopened=0;
     		$this->nbofservicesexpired=0;
    @@ -719,7 +740,7 @@ class Contrat extends CommonObject
     		$this->lines=array();
             $pos = 0;
     
    -		// Selectionne les lignes contrats liees a un produit
    +		// Selects contract lines related to a product
     		$sql = "SELECT p.label as product_label, p.description as product_desc, p.ref as product_ref,";
     		$sql.= " d.rowid, d.fk_contrat, d.statut, d.description, d.price_ht, d.vat_src_code, d.tva_tx, d.localtax1_tx, d.localtax2_tx, d.localtax1_type, d.localtax2_type, d.qty, d.remise_percent, d.subprice, d.fk_product_fournisseur_price as fk_fournprice, d.buy_price_ht as pa_ht,";
     		$sql.= " d.total_ht,";
    @@ -753,7 +774,7 @@ class Contrat extends CommonObject
     				$line->id				= $objp->rowid;
     				$line->ref				= $objp->rowid;
     				$line->fk_contrat		= $objp->fk_contrat;
    -				$line->desc				= $objp->description;  // Description ligne
    +				$line->desc				= $objp->description;  // Description line
     				$line->qty				= $objp->qty;
     				$line->vat_src_code 	= $objp->vat_src_code ;
     				$line->tva_tx			= $objp->tva_tx;
    @@ -784,9 +805,9 @@ class Contrat extends CommonObject
     				$line->fk_unit           = $objp->fk_unit;
     
     				$line->ref				= $objp->product_ref;	// deprecated
    -				$line->product_ref		= $objp->product_ref;   // Ref product
    -				$line->product_desc		= $objp->product_desc;  // Description product
    -				$line->product_label	= $objp->product_label; // Label product
    +				$line->product_ref		= $objp->product_ref;   // Product Ref
    +				$line->product_desc		= $objp->product_desc;  // Product Description
    +				$line->product_label	= $objp->product_label; // Product Label
     
     				$line->description		= $objp->description;
     
    @@ -804,7 +825,7 @@ class Contrat extends CommonObject
     				$line->date_fin_prevue   = $this->db->jdate($objp->date_fin_validite);
     				$line->date_fin_reel     = $this->db->jdate($objp->date_cloture);
     
    -				// Retreive all extrafield for contract
    +				// Retreive all extrafields for contract
     				// fetch optionals attributes and labels
     				$line->fetch_optionals();
     
    @@ -910,7 +931,7 @@ class Contrat extends CommonObject
     				$modCodeContract = new $module();
     
     				if (!empty($modCodeContract->code_auto)) {
    -					// Mise a jour ref
    +					// Update ref
     					$sql = 'UPDATE '.MAIN_DB_PREFIX."contrat SET ref='(PROV".$this->id.")' WHERE rowid=".$this->id;
     					if ($this->db->query($sql))
     					{
    @@ -934,14 +955,14 @@ class Contrat extends CommonObject
     				}
     			}
     
    -			// Insert contacts commerciaux ('SALESREPSIGN','contrat')
    +			// Insert business contacts ('SALESREPSIGN','contrat')
     			if (! $error)
     			{
         			$result=$this->add_contact($this->commercial_signature_id,'SALESREPSIGN','internal');
         			if ($result < 0) $error++;
     			}
     
    -			// Insert contacts commerciaux ('SALESREPFOLL','contrat')
    +			// Insert business contacts ('SALESREPFOLL','contrat')
     			if (! $error)
     			{
                     $result=$this->add_contact($this->commercial_suivi_id,'SALESREPFOLL','internal');
    @@ -1690,7 +1711,7 @@ class Contrat extends CommonObject
     			else
     			{
     				$this->db->rollback();
    -				dol_syslog(get_class($this)."::updateligne Erreur -2");
    +				dol_syslog(get_class($this)."::updateline Erreur -2");
     				return -2;
     			}
     		}
    @@ -1698,7 +1719,7 @@ class Contrat extends CommonObject
     		{
     			$this->db->rollback();
     			$this->error=$this->db->error();
    -			dol_syslog(get_class($this)."::updateligne Erreur -1");
    +			dol_syslog(get_class($this)."::updateline Erreur -1");
     			return -1;
     		}
     	}
    @@ -1769,6 +1790,7 @@ class Contrat extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update statut of contract according to services
     	 *
    @@ -1778,6 +1800,7 @@ class Contrat extends CommonObject
     	 */
     	function update_statut($user)
     	{
    +        // phpcs:enable
     		dol_syslog(__METHOD__ . " is deprecated", LOG_WARNING);
     
     		// If draft, we keep it (should not happen)
    @@ -1807,6 +1830,7 @@ class Contrat extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi label of a given contrat status
     	 *
    @@ -1816,33 +1840,34 @@ class Contrat extends CommonObject
     	 */
     	function LibStatut($statut,$mode)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load("contracts");
     		if ($mode == 0)
     		{
     			if ($statut == 0) { return $langs->trans("ContractStatusDraft"); }
    -			if ($statut == 1) { return $langs->trans("ContractStatusValidated"); }
    -			if ($statut == 2) { return $langs->trans("ContractStatusClosed"); }
    +			elseif ($statut == 1) { return $langs->trans("ContractStatusValidated"); }
    +			elseif ($statut == 2) { return $langs->trans("ContractStatusClosed"); }
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($statut == 0) { return $langs->trans("ContractStatusDraft"); }
    -			if ($statut == 1) { return $langs->trans("ContractStatusValidated"); }
    -			if ($statut == 2) { return $langs->trans("ContractStatusClosed"); }
    +			elseif ($statut == 1) { return $langs->trans("ContractStatusValidated"); }
    +			elseif ($statut == 2) { return $langs->trans("ContractStatusClosed"); }
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut == 0) { return img_picto($langs->trans('ContractStatusDraft'),'statut0').' '.$langs->trans("ContractStatusDraft"); }
    -			if ($statut == 1) { return img_picto($langs->trans('ContractStatusValidated'),'statut4').' '.$langs->trans("ContractStatusValidated"); }
    -			if ($statut == 2) { return img_picto($langs->trans('ContractStatusClosed'),'statut6').' '.$langs->trans("ContractStatusClosed"); }
    +			elseif ($statut == 1) { return img_picto($langs->trans('ContractStatusValidated'),'statut4').' '.$langs->trans("ContractStatusValidated"); }
    +			elseif ($statut == 2) { return img_picto($langs->trans('ContractStatusClosed'),'statut6').' '.$langs->trans("ContractStatusClosed"); }
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut == 0) { return img_picto($langs->trans('ContractStatusDraft'),'statut0'); }
    -			if ($statut == 1) { return img_picto($langs->trans('ContractStatusValidated'),'statut4'); }
    -			if ($statut == 2) { return img_picto($langs->trans('ContractStatusClosed'),'statut6'); }
    +			elseif ($statut == 1) { return img_picto($langs->trans('ContractStatusValidated'),'statut4'); }
    +			elseif ($statut == 2) { return img_picto($langs->trans('ContractStatusClosed'),'statut6'); }
     		}
    -		if ($mode == 4 || $mode == 6 || $mode == 7)
    +		elseif ($mode == 4 || $mode == 6 || $mode == 7)
     		{
     			$text='';
     			if ($mode == 4)
    @@ -1864,11 +1889,11 @@ class Contrat extends CommonObject
     			$text.=($mode == 7?'</div>':'');
     			return $text;
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut == 0) { return $langs->trans("ContractStatusDraft").' '.img_picto($langs->trans('ContractStatusDraft'),'statut0'); }
    -			if ($statut == 1) { return $langs->trans("ContractStatusValidated").' '.img_picto($langs->trans('ContractStatusValidated'),'statut4'); }
    -			if ($statut == 2) { return $langs->trans("ContractStatusClosed").' '.img_picto($langs->trans('ContractStatusClosed'),'statut6'); }
    +			elseif ($statut == 1) { return $langs->trans("ContractStatusValidated").' '.img_picto($langs->trans('ContractStatusValidated'),'statut4'); }
    +			elseif ($statut == 2) { return $langs->trans("ContractStatusClosed").' '.img_picto($langs->trans('ContractStatusClosed'),'statut6'); }
     		}
     	}
     
    @@ -1981,7 +2006,6 @@ class Contrat extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -1989,6 +2013,7 @@ class Contrat extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of line rowid
     	 *
    @@ -1997,6 +2022,7 @@ class Contrat extends CommonObject
     	 */
     	function array_detail($statut=-1)
     	{
    +        // phpcs:enable
     		$tab=array();
     
     		$sql = "SELECT cd.rowid";
    @@ -2064,6 +2090,7 @@ class Contrat extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
          *
    @@ -2073,6 +2100,7 @@ class Contrat extends CommonObject
     	 */
     	function load_board($user,$mode)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		$this->from = " FROM ".MAIN_DB_PREFIX."contrat as c";
    @@ -2088,7 +2116,7 @@ class Contrat extends CommonObject
     			$sql.= " AND c.rowid = cd.fk_contrat";
     			$sql.= " AND cd.statut = 0";
     		}
    -		if ($mode == 'expired')
    +		elseif ($mode == 'expired')
     		{
     			$sql = "SELECT cd.rowid, cd.date_fin_validite as datefin";
     			$sql.= $this->from;
    @@ -2142,6 +2170,7 @@ class Contrat extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Charge indicateurs this->nb de tableau de bord
     	 *
    @@ -2149,6 +2178,7 @@ class Contrat extends CommonObject
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $conf, $user;
     
     		$this->nb=array();
    @@ -2350,8 +2380,9 @@ class Contrat extends CommonObject
     	 * @param int $notrigger	1=Does not execute triggers, 0= execute triggers
     	 * @return int New id of clone
     	 */
    -	function createFromClone($socid = 0, $notrigger=0) {
    -		global $db, $user, $langs, $conf, $hookmanager;
    +    function createFromClone($socid = 0, $notrigger=0)
    +    {
    +		global $db, $user, $langs, $conf, $hookmanager, $extrafields;
     
     		dol_include_once('/projet/class/project.class.php');
     
    @@ -2360,6 +2391,7 @@ class Contrat extends CommonObject
     		$error = 0;
     
     		$this->fetch($this->id);
    +
     		// Load dest object
     		$clonedObj = clone $this;
             $clonedObj->socid = $socid;
    @@ -2370,8 +2402,23 @@ class Contrat extends CommonObject
     
     		$objsoc->fetch($clonedObj->socid);
     
    -		// $clonedObj->id=0;
    +		// Clean data
     		$clonedObj->statut = 0;
    +		// Clean extrafields
    +		if (is_array($clonedObj->array_options) && count($clonedObj->array_options) > 0)
    +		{
    +			$extrafields->fetch_name_optionals_label($this->element);
    +			foreach($clonedObj->array_options as $key => $option)
    +			{
    +				$shortkey = preg_replace('/options_/', '', $key);
    +				//var_dump($shortkey); var_dump($extrafields->attributes[$this->element]['unique'][$shortkey]);
    +				if (! empty($extrafields->attributes[$this->element]['unique'][$shortkey]))
    +				{
    +					//var_dump($key); var_dump($clonedObj->array_options[$key]); exit;
    +					unset($clonedObj->array_options[$key]);
    +				}
    +			}
    +		}
     
     		if (empty($conf->global->CONTRACT_ADDON) || ! is_readable(DOL_DOCUMENT_ROOT . "/core/modules/contract/" . $conf->global->CONTRACT_ADDON . ".php")) {
     			$this->error = 'ErrorSetupNotComplete';
    @@ -2386,8 +2433,8 @@ class Contrat extends CommonObject
     		$clonedObj->ref = $modContract->getNextValue($objsoc, $clonedObj);
     
     		// get extrafields so they will be clone
    -		foreach ( $this->lines as $line ) {
    -			$line->fetch_optionals($line->rowid);
    +		foreach ($this->lines as $line) {
    +			$line->fetch_optionals($line->id);
     		}
     
     		// Create clone
    @@ -2428,7 +2475,6 @@ class Contrat extends CommonObject
     				if ($reshook < 0)
     					$error ++;
     			}
    -
     		}
     
     		unset($this->context['createfromclone']);
    @@ -2450,79 +2496,128 @@ class Contrat extends CommonObject
      */
     class ContratLigne extends CommonObjectLine
     {
    -    public $element='contratdet';
    -    public $table_element='contratdet';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='contratdet';
     
    -	var $id;
    -	var $ref;
    -	var $tms;
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='contratdet';
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	/**
    +	 * @var string Ref
    +	 */
    +	public $ref;
    +
    +	public $tms;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_contrat;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_product;
    +
    +	public $statut;					// 0 inactive, 4 active, 5 closed
    +	public $type;						// 0 for product, 1 for service
     
    -	var $fk_contrat;
    -	var $fk_product;
    -	var $statut;					// 0 inactive, 4 active, 5 closed
    -	var $type;						// 0 for product, 1 for service
     	/**
     	 * @var string
     	 * @deprecated
     	 */
    -	var $label;
    +	public $label;
    +
     	/**
     	 * @var string
     	 * @deprecated
     	 */
     	public $libelle;
     
    -	var $description;
    +	/**
    +	 * @var string description
    +	 */
    +	public $description;
     
    -	var $product_ref;
    -	var $product_label;
    +	public $product_ref;
    +	public $product_label;
     
    -	var $date_commande;
    +	public $date_commande;
     
    -	var $date_start;				// date start planned
    -	var $date_start_real;			// date start real
    -	var $date_end;					// date end planned
    -	var $date_end_real;				// date end real
    +	public $date_start;				// date start planned
    +	public $date_start_real;			// date start real
    +	public $date_end;					// date end planned
    +	public $date_end_real;				// date end real
     	// For backward compatibility
    -	var $date_ouverture_prevue;		// date start planned
    -	var $date_ouverture;			// date start real
    -	var $date_fin_validite;			// date end planned
    -	var $date_cloture;				// date end real
    -	var $tva_tx;
    -	var $localtax1_tx;
    -	var $localtax2_tx;
    -	var $localtax1_type;	// Local tax 1 type
    -	var $localtax2_type;	// Local tax 2 type
    -	var $qty;
    -	var $remise_percent;
    -	var $remise;
    -	var $fk_remise_except;
    +	public $date_ouverture_prevue;		// date start planned
    +	public $date_ouverture;			// date start real
    +	public $date_fin_validite;			// date end planned
    +	public $date_cloture;				// date end real
    +	public $tva_tx;
    +	public $localtax1_tx;
    +	public $localtax2_tx;
    +	public $localtax1_type;	// Local tax 1 type
    +	public $localtax2_type;	// Local tax 2 type
    +	public $qty;
    +	public $remise_percent;
    +	public $remise;
     
    -	var $subprice;					// Unit price HT
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_remise_except;
    +
    +	public $subprice;					// Unit price HT
     
     	/**
     	 * @var float
     	 * @deprecated Use $price_ht instead
    -	 * @see price_ht
    +	 * @see $price_ht
     	 */
     	public $price;
     
    -	var $price_ht;
    +	public $price_ht;
     
    -	var $total_ht;
    -	var $total_tva;
    -	var $total_localtax1;
    -	var $total_localtax2;
    -	var $total_ttc;
    +	public $total_ht;
    +	public $total_tva;
    +	public $total_localtax1;
    +	public $total_localtax2;
    +	public $total_ttc;
     
    -	var $fk_fournprice;
    -	var $pa_ht;
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_fournprice;
     
    -	var $info_bits;
    -	var $fk_user_author;
    -	var $fk_user_ouverture;
    -	var $fk_user_cloture;
    -	var $commentaire;
    +	public $pa_ht;
    +
    +	public $info_bits;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_author;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_ouverture;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_cloture;
    +
    +	public $commentaire;
     
     	const STATUS_INITIAL = 0;
     	const STATUS_OPEN = 4;
    @@ -2552,6 +2647,7 @@ class ContratLigne extends CommonObjectLine
     		return $this->LibStatut($this->statut,$mode,((! empty($this->date_fin_validite))?($this->date_fin_validite < dol_now()?1:0):-1));
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return label of a contract line status
     	 *
    @@ -2563,55 +2659,56 @@ class ContratLigne extends CommonObjectLine
     	 */
     	static function LibStatut($statut,$mode,$expired=-1,$moreatt='')
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load("contracts");
     		if ($mode == 0)
     		{
     			if ($statut == self::STATUS_INITIAL) { return $langs->trans("ServiceStatusInitial"); }
    -			if ($statut == self::STATUS_OPEN && $expired == -1) { return $langs->trans("ServiceStatusRunning"); }
    -			if ($statut == self::STATUS_OPEN && $expired == 0)  { return $langs->trans("ServiceStatusNotLate"); }
    -			if ($statut == self::STATUS_OPEN && $expired == 1)  { return $langs->trans("ServiceStatusLate"); }
    -			if ($statut == self::STATUS_CLOSED) { return $langs->trans("ServiceStatusClosed");  }
    +			elseif ($statut == self::STATUS_OPEN && $expired == -1) { return $langs->trans("ServiceStatusRunning"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 0)  { return $langs->trans("ServiceStatusNotLate"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 1)  { return $langs->trans("ServiceStatusLate"); }
    +			elseif ($statut == self::STATUS_CLOSED) { return $langs->trans("ServiceStatusClosed");  }
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($statut == self::STATUS_INITIAL) { return $langs->trans("ServiceStatusInitial"); }
    -			if ($statut == self::STATUS_OPEN && $expired == -1) { return $langs->trans("ServiceStatusRunning"); }
    -			if ($statut == self::STATUS_OPEN && $expired == 0)  { return $langs->trans("ServiceStatusNotLateShort"); }
    -			if ($statut == self::STATUS_OPEN && $expired == 1)  { return $langs->trans("ServiceStatusLateShort"); }
    -			if ($statut == self::STATUS_CLOSED) { return $langs->trans("ServiceStatusClosed");  }
    +			elseif ($statut == self::STATUS_OPEN && $expired == -1) { return $langs->trans("ServiceStatusRunning"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 0)  { return $langs->trans("ServiceStatusNotLateShort"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 1)  { return $langs->trans("ServiceStatusLateShort"); }
    +			elseif ($statut == self::STATUS_CLOSED) { return $langs->trans("ServiceStatusClosed");  }
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut == self::STATUS_INITIAL) { return img_picto($langs->trans('ServiceStatusInitial'),'statut0').' '.$langs->trans("ServiceStatusInitial"); }
    -			if ($statut == self::STATUS_OPEN && $expired == -1) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4').' '.$langs->trans("ServiceStatusRunning"); }
    -			if ($statut == self::STATUS_OPEN && $expired == 0)  { return img_picto($langs->trans('ServiceStatusNotLate'),'statut4').' '.$langs->trans("ServiceStatusNotLateShort"); }
    -			if ($statut == self::STATUS_OPEN && $expired == 1)  { return img_picto($langs->trans('ServiceStatusLate'),'statut3').' '.$langs->trans("ServiceStatusLateShort"); }
    -			if ($statut == self::STATUS_CLOSED) { return img_picto($langs->trans('ServiceStatusClosed'),'statut6') .' '.$langs->trans("ServiceStatusClosed"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == -1) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4').' '.$langs->trans("ServiceStatusRunning"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 0)  { return img_picto($langs->trans('ServiceStatusNotLate'),'statut4').' '.$langs->trans("ServiceStatusNotLateShort"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 1)  { return img_picto($langs->trans('ServiceStatusLate'),'statut3').' '.$langs->trans("ServiceStatusLateShort"); }
    +			elseif ($statut == self::STATUS_CLOSED) { return img_picto($langs->trans('ServiceStatusClosed'),'statut6') .' '.$langs->trans("ServiceStatusClosed"); }
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut == self::STATUS_INITIAL) { return img_picto($langs->trans('ServiceStatusInitial'),'statut0',$moreatt); }
    -			if ($statut == self::STATUS_OPEN && $expired == -1) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4',$moreatt); }
    -			if ($statut == self::STATUS_OPEN && $expired == 0)  { return img_picto($langs->trans('ServiceStatusNotLate'),'statut4',$moreatt); }
    -			if ($statut == self::STATUS_OPEN && $expired == 1)  { return img_picto($langs->trans('ServiceStatusLate'),'statut3',$moreatt); }
    -			if ($statut == self::STATUS_CLOSED) { return img_picto($langs->trans('ServiceStatusClosed'),'statut6',$moreatt); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == -1) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4',$moreatt); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 0)  { return img_picto($langs->trans('ServiceStatusNotLate'),'statut4',$moreatt); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 1)  { return img_picto($langs->trans('ServiceStatusLate'),'statut3',$moreatt); }
    +			elseif ($statut == self::STATUS_CLOSED) { return img_picto($langs->trans('ServiceStatusClosed'),'statut6',$moreatt); }
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut == self::STATUS_INITIAL) { return img_picto($langs->trans('ServiceStatusInitial'),'statut0').' '.$langs->trans("ServiceStatusInitial"); }
    -			if ($statut == self::STATUS_OPEN && $expired == -1) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4').' '.$langs->trans("ServiceStatusRunning"); }
    -			if ($statut == self::STATUS_OPEN && $expired == 0)  { return img_picto($langs->trans('ServiceStatusNotLate'),'statut4').' '.$langs->trans("ServiceStatusNotLate"); }
    -			if ($statut == self::STATUS_OPEN && $expired == 1)  { return img_picto($langs->trans('ServiceStatusLate'),'statut3').' '.$langs->trans("ServiceStatusLate"); }
    -			if ($statut == self::STATUS_CLOSED) { return img_picto($langs->trans('ServiceStatusClosed'),'statut6') .' '.$langs->trans("ServiceStatusClosed"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == -1) { return img_picto($langs->trans('ServiceStatusRunning'),'statut4').' '.$langs->trans("ServiceStatusRunning"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 0)  { return img_picto($langs->trans('ServiceStatusNotLate'),'statut4').' '.$langs->trans("ServiceStatusNotLate"); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 1)  { return img_picto($langs->trans('ServiceStatusLate'),'statut3').' '.$langs->trans("ServiceStatusLate"); }
    +			elseif ($statut == self::STATUS_CLOSED) { return img_picto($langs->trans('ServiceStatusClosed'),'statut6') .' '.$langs->trans("ServiceStatusClosed"); }
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut == self::STATUS_INITIAL) { return $langs->trans("ServiceStatusInitial").' '.img_picto($langs->trans('ServiceStatusInitial'),'statut0'); }
    -			if ($statut == self::STATUS_OPEN && $expired == -1) { return $langs->trans("ServiceStatusRunning").' '.img_picto($langs->trans('ServiceStatusRunning'),'statut4'); }
    -			if ($statut == self::STATUS_OPEN && $expired == 0)  { return $langs->trans("ServiceStatusNotLateShort").' '.img_picto($langs->trans('ServiceStatusNotLateShort'),'statut4'); }
    -			if ($statut == self::STATUS_OPEN && $expired == 1)  { return $langs->trans("ServiceStatusLateShort").' '.img_picto($langs->trans('ServiceStatusLate'),'statut3'); }
    -			if ($statut == self::STATUS_CLOSED) { return $langs->trans("ServiceStatusClosed").' '.img_picto($langs->trans('ServiceStatusClosed'),'statut6'); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == -1) { return $langs->trans("ServiceStatusRunning").' '.img_picto($langs->trans('ServiceStatusRunning'),'statut4'); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 0)  { return $langs->trans("ServiceStatusNotLateShort").' '.img_picto($langs->trans('ServiceStatusNotLateShort'),'statut4'); }
    +			elseif ($statut == self::STATUS_OPEN && $expired == 1)  { return $langs->trans("ServiceStatusLateShort").' '.img_picto($langs->trans('ServiceStatusLate'),'statut3'); }
    +			elseif ($statut == self::STATUS_CLOSED) { return $langs->trans("ServiceStatusClosed").' '.img_picto($langs->trans('ServiceStatusClosed'),'statut6'); }
     		}
     	}
     
    @@ -2761,7 +2858,6 @@ class ContratLigne extends CommonObjectLine
     				$marginInfos = getMarginInfos($obj->subprice, $obj->remise_percent, $obj->tva_tx, $obj->localtax1_tx, $obj->localtax2_tx, $this->fk_fournprice, $obj->pa_ht);
     				$this->pa_ht = $marginInfos[0];
     				$this->fk_unit     = $obj->fk_unit;
    -
     			}
     			$this->db->free($resql);
     
    @@ -2789,9 +2885,9 @@ class ContratLigne extends CommonObjectLine
     		$error=0;
     
     		// Clean parameters
    -		$this->fk_contrat=trim($this->fk_contrat);
    -		$this->fk_product=trim($this->fk_product);
    -		$this->statut=(int) $this->statut;
    +		$this->fk_contrat = (int) $this->fk_contrat;
    +		$this->fk_product = (int) $this->fk_product;
    +		$this->statut = (int) $this->statut;
     		$this->label=trim($this->label);
     		$this->description=trim($this->description);
     		$this->vat_src_code=trim($this->vat_src_code);
    @@ -2801,7 +2897,7 @@ class ContratLigne extends CommonObjectLine
     		$this->qty=trim($this->qty);
     		$this->remise_percent=trim($this->remise_percent);
     		$this->remise=trim($this->remise);
    -		$this->fk_remise_except=trim($this->fk_remise_except);
    +		$this->fk_remise_except = (int) $this->fk_remise_except;
     		$this->subprice=price2num($this->subprice);
     		$this->price_ht=price2num($this->price_ht);
     		$this->total_ht=trim($this->total_ht);
    @@ -2810,9 +2906,9 @@ class ContratLigne extends CommonObjectLine
     		$this->total_localtax2=trim($this->total_localtax2);
     		$this->total_ttc=trim($this->total_ttc);
     		$this->info_bits=trim($this->info_bits);
    -		$this->fk_user_author=trim($this->fk_user_author);
    -		$this->fk_user_ouverture=trim($this->fk_user_ouverture);
    -		$this->fk_user_cloture=trim($this->fk_user_cloture);
    +		$this->fk_user_author = (int) $this->fk_user_author;
    +		$this->fk_user_ouverture = (int) $this->fk_user_ouverture;
    +		$this->fk_user_cloture = (int) $this->fk_user_cloture;
     		$this->commentaire=trim($this->commentaire);
     		//if (empty($this->subprice)) $this->subprice = 0;
     		if (empty($this->price_ht)) $this->price_ht = 0;
    @@ -2951,15 +3047,14 @@ class ContratLigne extends CommonObjectLine
     			}
     		}
     
    -		if (! $error)
    -		{
    -			if (! $notrigger)
    -			{
    -	            // Call trigger
    -	            $result=$this->call_trigger('LINECONTRACT_UPDATE', $user);
    -	            if ($result < 0) { $error++; $this->db->rollback(); }
    -	            // End call triggers
    -			}
    +		if (! $error && ! $notrigger) {
    +	        // Call trigger
    +	        $result=$this->call_trigger('LINECONTRACT_UPDATE', $user);
    +	        if ($result < 0) {
    +                $error++;
    +                $this->db->rollback();
    +            }
    +	        // End call triggers
     		}
     
     		if (! $error)
    @@ -2974,6 +3069,7 @@ class ContratLigne extends CommonObjectLine
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Mise a jour en base des champs total_xxx de ligne
     	 *		Used by migration process
    @@ -2982,6 +3078,7 @@ class ContratLigne extends CommonObjectLine
     	 */
     	function update_total()
     	{
    +        // phpcs:enable
     		$this->db->begin();
     
     		// Mise a jour ligne en base
    @@ -3090,6 +3187,7 @@ class ContratLigne extends CommonObjectLine
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Activate a contract line
     	 *
    @@ -3101,6 +3199,7 @@ class ContratLigne extends CommonObjectLine
     	 */
     	function active_line($user, $date, $date_end = '', $comment = '')
     	{
    +        // phpcs:enable
     		global $langs, $conf;
     
     		$error = 0;
    @@ -3147,6 +3246,7 @@ class ContratLigne extends CommonObjectLine
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Close a contract line
     	 *
    @@ -3158,6 +3258,7 @@ class ContratLigne extends CommonObjectLine
     	 */
     	function close_line($user, $date_end, $comment = '', $notrigger=0)
     	{
    +        // phpcs:enable
     		global $langs, $conf;
     
     		// Update object
    diff --git a/htdocs/contrat/contact.php b/htdocs/contrat/contact.php
    index 4d403198eb8..d68eee4eb5a 100644
    --- a/htdocs/contrat/contact.php
    +++ b/htdocs/contrat/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005		Patrick Rouillon	<patrick@rouillon.net>
      * Copyright (C) 2005-2009	Destailleur Laurent	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *      \brief      Onglet de gestion des contacts des contrats
      */
     
    -require ("../main.inc.php");
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
     require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
    @@ -163,27 +163,26 @@ if ($id > 0 || ! empty($ref))
     		$morehtmlref.=$form->editfieldval("RefSupplier", 'ref_supplier', $object->ref_supplier, $object, 0, 'string', '', null, null, '', 1);
     		// Thirdparty
     	    $morehtmlref.='<br>'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1);
    -	    // Project
    -	    if (! empty($conf->projet->enabled))
    -	    {
    -	        $langs->load("projects");
    -	        $morehtmlref.='<br>'.$langs->trans('Project') . ' ';
    -	        if ($user->rights->contrat->creer)
    -	        {
    -	            if ($action != 'classify')
    -	                //$morehtmlref.='<a href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
    -	                $morehtmlref.=' : ';
    -	            	if ($action == 'classify') {
    -	                    //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
    -	                    $morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
    -	                    $morehtmlref.='<input type="hidden" name="action" value="classin">';
    -	                    $morehtmlref.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    -	                    $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
    -	                    $morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
    -	                    $morehtmlref.='</form>';
    -	                } else {
    -	                    $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1);
    -	                }
    +        // Project
    +        if (! empty($conf->projet->enabled)) {
    +            $langs->load("projects");
    +            $morehtmlref.='<br>'.$langs->trans('Project') . ' ';
    +            if ($user->rights->contrat->creer) {
    +                if ($action != 'classify') {
    +                    //$morehtmlref.='<a href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';
    +                    $morehtmlref.=' : ';
    +                }
    +                if ($action == 'classify') {
    +	                //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);
    +	                $morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
    +	                $morehtmlref.='<input type="hidden" name="action" value="classin">';
    +	                $morehtmlref.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +	                $morehtmlref.=$formproject->select_projects($object->thirdparty->id, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);
    +	                $morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
    +	                $morehtmlref.='</form>';
    +	            } else {
    +	                $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->thirdparty->id, $object->fk_project, 'none', 0, 0, 0, 1);
    +	            }
     	        } else {
     	            if (! empty($object->fk_project)) {
     	                $proj = new Project($db);
    @@ -210,9 +209,12 @@ if ($id > 0 || ! empty($ref))
     
             // Ligne info remises tiers
             print '<tr><td class="titlefield">'.$langs->trans('Discount').'</td><td colspan="3">';
    -        if ($object->thirdparty->remise_percent) print $langs->trans("CompanyHasRelativeDiscount",$object->thirdparty->remise_percent);
    -        else print $langs->trans("CompanyHasNoRelativeDiscount");
    -        $absolute_discount=$object->thirdparty->getAvailableDiscounts();
    +        if ($object->thirdparty->remise_percent) {
    +            print $langs->trans("CompanyHasRelativeDiscount",$object->thirdparty->remise_percent);
    +        } else {
    +            print $langs->trans("CompanyHasNoRelativeDiscount");
    +        }
    +        $absolute_discount = $object->thirdparty->getAvailableDiscounts();
             print '. ';
             if ($absolute_discount) print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->trans("Currency".$conf->currency));
             else print $langs->trans("CompanyHasNoAbsoluteDiscount");
    @@ -238,10 +240,7 @@ if ($id > 0 || ! empty($ref))
     
     		// Contacts lines
     		include DOL_DOCUMENT_ROOT.'/core/tpl/contacts.tpl.php';
    -
    -	}
    -	else
    -	{
    +	} else {
     		print "ErrorRecordNotFound";
     	}
     }
    diff --git a/htdocs/contrat/document.php b/htdocs/contrat/document.php
    index 0208d68f80d..7373278df1a 100644
    --- a/htdocs/contrat/document.php
    +++ b/htdocs/contrat/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Marc Barilley / Ocebo	<marc@ocebo.com>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2005		Simon TOSSER			<simon@kornog-computing.com>
      * Copyright (C) 2013		Cédric Salvador			<csalvador@gpcsolutions.fr>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
    @@ -27,7 +27,7 @@
      *       \brief      Page des documents joints sur les contrats
      */
     
    -require ("../main.inc.php");
    +require "../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    @@ -103,7 +103,7 @@ if ($object->id)
     	dol_fiche_head($head, 'documents', $langs->trans("Contract"), -1, 'contract');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -192,7 +192,6 @@ if ($object->id)
         $permtoedit = $user->rights->contrat->creer;
         $param = '&id=' . $object->id;
         include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
     }
     else
     {
    diff --git a/htdocs/contrat/index.php b/htdocs/contrat/index.php
    index b78bf52b6be..69e2b0d0ca8 100644
    --- a/htdocs/contrat/index.php
    +++ b/htdocs/contrat/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,9 +24,9 @@
      *		\brief      Home page of contract area
      */
     
    -require ("../main.inc.php");
    -require_once (DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php");
    -require_once (DOL_DOCUMENT_ROOT."/product/class/product.class.php");
    +require "../main.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php";
    +require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
     
     // Load translation files required by the page
     $langs->loadLangs(array('products', 'companies', 'contracts'));
    @@ -279,7 +279,6 @@ if (! empty($conf->contrat->enabled) && $user->rights->contrat->lire)
     				print '</tr>';
     				//$tot_ttc+=$obj->total_ttc;
     				$i++;
    -
     			}
     		}
     		else
    @@ -365,7 +364,6 @@ if ($result)
     	$db->free($result);
     
     	print "</table>";
    -
     }
     else
     {
    @@ -444,7 +442,6 @@ if ($resql)
     	$db->free();
     
     	print "</table>";
    -
     }
     else
     {
    @@ -523,7 +520,6 @@ if ($resql)
     	$db->free();
     
     	print "</table>";
    -
     }
     else
     {
    @@ -603,7 +599,6 @@ if ($resql)
     	$db->free();
     
     	print "</table>";
    -
     }
     else
     {
    diff --git a/htdocs/contrat/info.php b/htdocs/contrat/info.php
    index 8899351c284..c783ca4948c 100644
    --- a/htdocs/contrat/info.php
    +++ b/htdocs/contrat/info.php
    @@ -22,7 +22,7 @@
      *      \brief      Page des informations d'un contrat
      */
     
    -require ("../main.inc.php");
    +require "../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
    diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php
    index b4255046ad4..056362bb2d2 100644
    --- a/htdocs/contrat/list.php
    +++ b/htdocs/contrat/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
      * Copyright (C) 2014      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2015	   Claudio Aschieri		<c.aschieri@19.coop>
    @@ -28,7 +28,7 @@
      *       \brief      Page liste des contrats
      */
     
    -require ("../main.inc.php");
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
    @@ -100,7 +100,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('contrat');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
     	'c.ref'=>'Ref',
    @@ -621,7 +621,7 @@ while ($i < min($num,$limit))
     		if (!empty($obj->note_private) || !empty($obj->note_public))
     		{
     			print ' <span class="note">';
    -			print '<a href="'.DOL_URL_ROOT.'/contrat/note.php?id='.$obj->rowid.'">'.img_picto($langs->trans("ViewPrivateNote"),'object_generic').'</a>';
    +			print '<a href="'.DOL_URL_ROOT.'/contrat/note.php?id='.$obj->rowid.'&save_lastsearch_values=1">'.img_picto($langs->trans("ViewPrivateNote"),'note').'</a>';
     			print '</span>';
     		}
     
    diff --git a/htdocs/contrat/note.php b/htdocs/contrat/note.php
    index c160201191a..193c25e0398 100644
    --- a/htdocs/contrat/note.php
    +++ b/htdocs/contrat/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *      \brief      Fiche de notes sur un contrat
      */
     
    -require ("../main.inc.php");
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
     if (! empty($conf->projet->enabled)) {
    @@ -177,7 +177,6 @@ if ($id > 0 || ! empty($ref))
     	include DOL_DOCUMENT_ROOT.'/core/tpl/notes.tpl.php';
     
     	dol_fiche_end();
    -
     }
     
     
    diff --git a/htdocs/contrat/services_list.php b/htdocs/contrat/services_list.php
    index 66c56e2a162..806bff48605 100644
    --- a/htdocs/contrat/services_list.php
    +++ b/htdocs/contrat/services_list.php
    @@ -1,9 +1,10 @@
     <?php
    -/* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
    - * Copyright (C) 2018      Ferran Marcet		<fmarcet@2byte.es>
    +/* Copyright (C) 2001-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2015       Jean-François Ferry     <jfefe@aternatik.fr>
    + * Copyright (C) 2018       Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -25,10 +26,10 @@
      *		\brief      Page to list services in contracts
      */
     
    -require ("../main.inc.php");
    -require_once (DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php");
    -require_once (DOL_DOCUMENT_ROOT."/product/class/product.class.php");
    -require_once (DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
    +require "../main.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php";
    +require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
    +require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
     
     // Load translation files required by the page
     $langs->loadLangs(array('products', 'contracts', 'companies'));
    @@ -83,7 +84,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('contratdet');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Security check
     $contratid = GETPOST('id','int');
    @@ -455,7 +456,7 @@ if (! empty($arrayfields['cd.date_ouverture_prevue']['checked']))
     	print $form->selectarray('filter_opouvertureprevue',$arrayofoperators,$filter_opouvertureprevue,1);
     	print ' ';
     	$filter_dateouvertureprevue=dol_mktime(0,0,0,$opouvertureprevuemonth,$opouvertureprevueday,$opouvertureprevueyear);
    -	print $form->select_date($filter_dateouvertureprevue,'opouvertureprevue',0,0,1,'',1,0,1);
    +	print $form->selectDate($filter_dateouvertureprevue, 'opouvertureprevue', 0, 0, 1, '', 1, 0);
     	print '</td>';
     }
     if (! empty($arrayfields['cd.date_ouverture']['checked']))
    @@ -465,7 +466,7 @@ if (! empty($arrayfields['cd.date_ouverture']['checked']))
     	print $form->selectarray('filter_op1',$arrayofoperators,$filter_op1,1);
     	print ' ';
     	$filter_date1=dol_mktime(0,0,0,$op1month,$op1day,$op1year);
    -	print $form->select_date($filter_date1,'op1',0,0,1,'',1,0,1);
    +	print $form->selectDate($filter_date1, 'op1', 0, 0, 1, '', 1, 0);
     	print '</td>';
     }
     if (! empty($arrayfields['cd.date_fin_validite']['checked']))
    @@ -475,7 +476,7 @@ if (! empty($arrayfields['cd.date_fin_validite']['checked']))
     	print $form->selectarray('filter_op2',$arrayofoperators,$filter_op2,1);
     	print ' ';
     	$filter_date2=dol_mktime(0,0,0,$op2month,$op2day,$op2year);
    -	print $form->select_date($filter_date2,'op2',0,0,1,'',1,0,1);
    +	print $form->selectDate($filter_date2, 'op2', 0, 0, 1, '', 1, 0);
     	print '</td>';
     }
     if (! empty($arrayfields['cd.date_cloture']['checked']))
    @@ -485,7 +486,7 @@ if (! empty($arrayfields['cd.date_cloture']['checked']))
     	print $form->selectarray('filter_opcloture',$arrayofoperators,$filter_opcloture,1);
     	print ' ';
     	$filter_date_cloture=dol_mktime(0,0,0,$opcloturemonth,$opclotureday,$opclotureyear);
    -	print $form->select_date($filter_date_cloture,'opcloture',0,0,1,'',1,0,1);
    +	print $form->selectDate($filter_date_cloture, 'opcloture', 0, 0, 1, '', 1, 0);
     	print '</td>';
     }
     // Extra fields
    diff --git a/htdocs/contrat/tpl/linkedobjectblock.tpl.php b/htdocs/contrat/tpl/linkedobjectblock.tpl.php
    index 328be816327..64d40edebc0 100644
    --- a/htdocs/contrat/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/contrat/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2018      Juanjo Menent <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/actions_addupdatedelete.inc.php b/htdocs/core/actions_addupdatedelete.inc.php
    index c7cb1dc6f78..31a6549cc27 100644
    --- a/htdocs/core/actions_addupdatedelete.inc.php
    +++ b/htdocs/core/actions_addupdatedelete.inc.php
    @@ -72,7 +72,7 @@ if ($action == 'add' && ! empty($permissiontoadd))
     
     	if (! $error)
     	{
    -		$result=$object->createCommon($user);
    +		$result=$object->create($user);
     		if ($result > 0)
     		{
     			// Creation OK
    @@ -127,7 +127,7 @@ if ($action == 'update' && ! empty($permissiontoadd))
     
     	if (! $error)
     	{
    -		$result=$object->updateCommon($user);
    +		$result=$object->update($user);
     		if ($result > 0)
     		{
     			$action='view';
    @@ -169,7 +169,7 @@ if ($action == "update_extras" && ! empty($permissiontoadd))
     // Action to delete
     if ($action == 'confirm_delete' && ! empty($permissiontodelete))
     {
    -	$result=$object->deleteCommon($user);
    +	$result=$object->delete($user);
     	if ($result > 0)
     	{
     		// Delete OK
    diff --git a/htdocs/core/actions_extrafields.inc.php b/htdocs/core/actions_extrafields.inc.php
    index 6b6d40acd9c..6b6d4b7a176 100644
    --- a/htdocs/core/actions_extrafields.inc.php
    +++ b/htdocs/core/actions_extrafields.inc.php
    @@ -178,10 +178,12 @@ if ($action == 'add')
                     	(GETPOST('alwayseditable', 'alpha')?1:0),
                     	(GETPOST('perms', 'alpha')?GETPOST('perms', 'alpha'):''),
                     	$visibility,
    -					0,
    +					GETPOST('help','alpha'),
                         GETPOST('computed_value','alpha'),
                     	(GETPOST('entitycurrentorall', 'alpha')?0:''),
    -                	GETPOST('langfile', 'alpha')
    +                    GETPOST('langfile', 'alpha'),
    +                    1,
    +                    (GETPOST('totalizable', 'alpha')?1:0)
                     );
         			if ($result > 0)
         			{
    @@ -331,7 +333,7 @@ if ($action == 'update')
         			$visibility = GETPOST('list', 'alpha');
         			if ($type == 'separate') $visibility=3;
     
    -    			$result=$extrafields->update(
    +                $result=$extrafields->update(
         				GETPOST('attrname', 'alpha'),
         				GETPOST('label', 'alpha'),
         				$type,
    @@ -344,11 +346,13 @@ if ($action == 'update')
         				(GETPOST('alwayseditable', 'alpha')?1:0),
         				(GETPOST('perms', 'alpha')?GETPOST('perms', 'alpha'):''),
                     	$visibility,
    -					0,
    +					GETPOST('help','alpha'),
         			    GETPOST('default_value','alpha'),
         				GETPOST('computed_value','alpha'),
         				(GETPOST('entitycurrentorall', 'alpha')?0:''),
    -    				GETPOST('langfile')
    +                    GETPOST('langfile'),
    +                    1,
    +                    (GETPOST('totalizable', 'alpha')?1:0)
         			);
         			if ($result > 0)
         			{
    diff --git a/htdocs/core/actions_linkedfiles.inc.php b/htdocs/core/actions_linkedfiles.inc.php
    index 297f7821599..58f96b7faf1 100644
    --- a/htdocs/core/actions_linkedfiles.inc.php
    +++ b/htdocs/core/actions_linkedfiles.inc.php
    @@ -50,13 +50,17 @@ if (GETPOST('sendit','alpha') && ! empty($conf->global->MAIN_UPLOAD_DOC))
     
     		if (! $error)
     		{
    +			// Define if we have to generate thumbs or not
    +			$generatethumbs = 1;
    +			if (GETPOST('section_dir')) $generatethumbs=0;
    +
     			if (! empty($upload_dirold) && ! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO))
     			{
    -				$result = dol_add_file_process($upload_dirold, 0, 1, 'userfile', GETPOST('savingdocmask', 'alpha'));
    +				$result = dol_add_file_process($upload_dirold, 0, 1, 'userfile', GETPOST('savingdocmask', 'alpha'), null, '', $generatethumbs);
     			}
     			elseif (! empty($upload_dir))
     			{
    -				$result = dol_add_file_process($upload_dir, 0, 1, 'userfile', GETPOST('savingdocmask', 'alpha'));
    +				$result = dol_add_file_process($upload_dir, 0, 1, 'userfile', GETPOST('savingdocmask', 'alpha'), null, '', $generatethumbs);
     			}
     		}
     	}
    @@ -69,7 +73,7 @@ elseif (GETPOST('linkit','none') && ! empty($conf->global->MAIN_UPLOAD_DOC))
             if (substr($link, 0, 7) != 'http://' && substr($link, 0, 8) != 'https://' && substr($link, 0, 7) != 'file://') {
                 $link = 'http://' . $link;
             }
    -        dol_add_file_process($upload_dir, 0, 1, 'userfile', null, $link);
    +        dol_add_file_process($upload_dir, 0, 1, 'userfile', null, $link, '', 0);
         }
     }
     
    @@ -77,20 +81,23 @@ elseif (GETPOST('linkit','none') && ! empty($conf->global->MAIN_UPLOAD_DOC))
     // Delete file/link
     if ($action == 'confirm_deletefile' && $confirm == 'yes')
     {
    -        $urlfile = GETPOST('urlfile', 'alpha', 0, null, null, 1);	// Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
    -        if (GETPOST('section', 'alpha')) $file = $upload_dir . "/" . $urlfile;	// For a delete of GED module urlfile contains full path from upload_dir
    -        else															// For documents pages, upload_dir contains already path to file from module dir, so we clean path into urlfile.
    +        $urlfile = GETPOST('urlfile', 'alpha', 0, null, null, 1);				// Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
    +        if (GETPOST('section', 'alpha')) 	// For a delete from the ECM module, upload_dir is ECM root dir and urlfile contains relative path from upload_dir
    +        {
    +        	$file = $upload_dir . (preg_match('/\/$/', $upload_dir) ? '' : '/') . $urlfile;
    +        }
    +        else								// For a delete from the file manager into another module, or from documents pages, upload_dir contains already path to file from module dir, so we clean path into urlfile.
     		{
            		$urlfile=basename($urlfile);
    -			$file = $upload_dir . "/" . $urlfile;
    +       		$file = $upload_dir . (preg_match('/\/$/', $upload_dir) ? '' : '/') . $urlfile;
     			if (! empty($upload_dirold)) $fileold = $upload_dirold . "/" . $urlfile;
     		}
    -        $linkid = GETPOST('linkid', 'int');	// Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
    +        $linkid = GETPOST('linkid', 'int');
     
    -        if ($urlfile)
    +        if ($urlfile)		// delete of a file
             {
    -	        $dir = dirname($file).'/';     // Chemin du dossier contenant l'image d'origine
    -	        $dirthumb = $dir.'/thumbs/';   // Chemin du dossier contenant la vignette
    +	        $dir = dirname($file).'/';		// Chemin du dossier contenant l'image d'origine
    +	        $dirthumb = $dir.'/thumbs/';	// Chemin du dossier contenant la vignette (if file is an image)
     
     	        $ret = dol_delete_file($file, 0, 0, 0, (is_object($object)?$object:null));
                 if (! empty($fileold)) dol_delete_file($fileold, 0, 0, 0, (is_object($object)?$object:null));     // Delete file using old path
    @@ -114,7 +121,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes')
                 if ($ret) setEventMessages($langs->trans("FileWasRemoved", $urlfile), null, 'mesgs');
                 else setEventMessages($langs->trans("ErrorFailToDeleteFile", $urlfile), null, 'errors');
             }
    -        elseif ($linkid)
    +        elseif ($linkid)	// delete of external link
             {
                 require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php';
                 $link = new Link($db);
    @@ -143,7 +150,7 @@ if ($action == 'confirm_deletefile' && $confirm == 'yes')
             	}
             	else
             	{
    -        		header('Location: ' . $_SERVER["PHP_SELF"] . '?id=' . $object->id.(!empty($withproject)?'&withproject=1':''));
    +        		header('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id.(GETPOST('section_dir','alpha')?'&section_dir='.urlencode(GETPOST('section_dir','alpha')):'').(!empty($withproject)?'&withproject=1':''));
             		exit;
             	}
             }
    @@ -208,13 +215,20 @@ elseif ($action == 'renamefile' && GETPOST('renamefilesave','alpha'))
     	            		$result = dol_move($srcpath, $destpath);
     			            if ($result)
     			            {
    -			            	if ($object->id)
    -			            	{
    -			                	$object->addThumbs($destpath);
    -			            	}
    +			            	// Define if we have to generate thumbs or not
    +			            	$generatethumbs = 1;
    +			            	if (GETPOST('section_dir')) $generatethumbs=0;
     
    -			                // TODO Add revert function of addThumbs to remove for old name
    -			                //$object->delThumbs($srcpath);
    +			            	if ($generatethumbs)
    +			            	{
    +				            	if ($object->id)
    +				            	{
    +				                	$object->addThumbs($destpath);
    +				            	}
    +
    +				                // TODO Add revert function of addThumbs to remove thumbs with old name
    +				                //$object->delThumbs($srcpath);
    +			            	}
     
     			                setEventMessages($langs->trans("FileRenamed"), null);
     			            }
    diff --git a/htdocs/core/actions_massactions.inc.php b/htdocs/core/actions_massactions.inc.php
    index 312d6c3d507..39b89ba21f9 100644
    --- a/htdocs/core/actions_massactions.inc.php
    +++ b/htdocs/core/actions_massactions.inc.php
    @@ -74,6 +74,7 @@ if (! $error && $massaction == 'confirm_presend')
     	{
     		$thirdparty=new Societe($db);
     		if ($objecttmp->element == 'expensereport') $thirdparty=new User($db);
    +		if ($objecttmp->element == 'holiday')       $thirdparty=new User($db);
     
     		$objecttmp=new $objectclass($db);
     		foreach($toselect as $toselectid)
    @@ -83,9 +84,10 @@ if (! $error && $massaction == 'confirm_presend')
     			if ($result > 0)
     			{
     				$listofobjectid[$toselectid]=$toselectid;
    -				$thirdpartyid=$objecttmp->fk_soc?$objecttmp->fk_soc:$objecttmp->socid;
    -				if ($objecttmp->element == 'societe') $thirdpartyid=$objecttmp->id;
    +				$thirdpartyid=($objecttmp->fk_soc?$objecttmp->fk_soc:$objecttmp->socid);
    +				if ($objecttmp->element == 'societe')       $thirdpartyid=$objecttmp->id;
     				if ($objecttmp->element == 'expensereport') $thirdpartyid=$objecttmp->fk_user_author;
    +				if ($objecttmp->element == 'holiday')       $thirdpartyid=$objecttmp->fk_user;
     				$listofobjectthirdparties[$thirdpartyid]=$thirdpartyid;
     				$listofobjectref[$thirdpartyid][$toselectid]=$objecttmp;
     			}
    @@ -326,7 +328,7 @@ if (! $error && $massaction == 'confirm_presend')
     				$message = GETPOST('message','none');
     
     				$sendtobcc = GETPOST('sendtoccc');
    -				if ($objectclass == 'Propale') 				$sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO));
    +				if ($objectclass == 'Propal') 				$sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_PROPOSAL_TO));
     				if ($objectclass == 'Commande') 			$sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_ORDER_TO));
     				if ($objectclass == 'Facture') 				$sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_INVOICE_TO));
     				if ($objectclass == 'Supplier_Proposal') 	$sendtobcc .= (empty($conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO) ? '' : (($sendtobcc?", ":"").$conf->global->MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO));
    @@ -379,11 +381,32 @@ if (! $error && $massaction == 'confirm_presend')
     					$filename = $attachedfiles['names'];
     					$mimetype = $attachedfiles['mimes'];
     
    +					// Define the trackid when emails sent from the mass action
    +					if ($oneemailperrecipient)
    +					{
    +						$trackid='thi'.$thirdparty->id;
    +						if ($objecttmp->element == 'expensereport') $trackid='use'.$thirdparty->id;
    +						if ($objecttmp->element == 'holiday') $trackid='use'.$thirdparty->id;
    +					}
    +					else
    +					{
    +						$trackid=strtolower(get_class($objecttmp));
    +						if (get_class($objecttmp)=='Contrat')  $trackid='con';
    +						if (get_class($objecttmp)=='Propal')   $trackid='pro';
    +						if (get_class($objecttmp)=='Commande') $trackid='ord';
    +						if (get_class($objecttmp)=='Facture')  $trackid='inv';
    +						if (get_class($objecttmp)=='Supplier_Proposal')   $trackid='spr';
    +						if (get_class($objecttmp)=='CommandeFournisseur') $trackid='sor';
    +						if (get_class($objecttmp)=='FactureFournisseur')  $trackid='sin';
    +
    +						$trackid.=$objecttmp->id;
    +					}
     					//var_dump($filepath);
    +					//var_dump($trackid);exit;
     
     					// Send mail (substitutionarray must be done just before this)
    -					require_once(DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php');
    -					$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,$sendtobcc,$deliveryreceipt,-1);
    +					require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
    +					$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,$sendtobcc,$deliveryreceipt,-1,'','',$trackid);
     					if ($mailfile->error)
     					{
     						$resaction.='<div class="error">'.$mailfile->error.'</div>';
    @@ -437,7 +460,7 @@ if (! $error && $massaction == 'confirm_presend')
     								if (! empty($triggername))
     								{
     									// Appel des triggers
    -									include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
    +									include_once DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php";
     									$interface=new Interfaces($db);
     									$result=$interface->run_triggers($triggername, $objectobj, $user, $langs, $conf);
     									if ($result < 0) { $error++; $errors=$interface->errors; }
    @@ -707,7 +730,7 @@ if ($massaction == 'confirm_createbills')
     	if (! $error)
     	{
     		$db->commit();
    -		setEventMessage($langs->trans('BillCreated', $nb_bills_created));
    +		setEventMessages($langs->trans('BillCreated', $nb_bills_created), null, 'mesgs');
     
     		// Make a redirect to avoid to bill twice if we make a refresh or back
     		$param='';
    @@ -829,7 +852,8 @@ if (! $error && $massaction == "builddoc" && $permtoread && ! GETPOST('button_se
     	}
     
     	$arrayofinclusion=array();
    -	foreach($listofobjectref as $tmppdf) $arrayofinclusion[]='^'.preg_quote(dol_sanitizeFileName($tmppdf).'.pdf','/').'$';
    +	foreach($listofobjectref as $tmppdf) $arrayofinclusion[]='^'.preg_quote(dol_sanitizeFileName($tmppdf),'/').'\.pdf$';
    +	foreach($listofobjectref as $tmppdf) $arrayofinclusion[]='^'.preg_quote(dol_sanitizeFileName($tmppdf),'/').'_[a-zA-Z0-9-_]+\.pdf$';	// To include PDF generated from ODX files
     	$listoffiles = dol_dir_list($uploaddir,'all',1,implode('|',$arrayofinclusion),'\.meta$|\.png','date',SORT_DESC,0,true);
     
     	// build list of files with full path
    diff --git a/htdocs/core/actions_printing.inc.php b/htdocs/core/actions_printing.inc.php
    index 302ad161241..d5c40c17ad0 100644
    --- a/htdocs/core/actions_printing.inc.php
    +++ b/htdocs/core/actions_printing.inc.php
    @@ -28,8 +28,7 @@
     // Filename to print must be provided into 'file' parameter
     
     // Print file
    -if ($action == 'print_file' && $user->rights->printing->read)
    -{
    +if ($action == 'print_file' && $user->rights->printing->read) {
         $langs->load("printing");
         require_once DOL_DOCUMENT_ROOT . '/core/modules/printing/modules_printing.php';
         $objectprint = new PrintingDriver($db);
    @@ -48,14 +47,24 @@ if ($action == 'print_file' && $user->rights->printing->read)
                 {
                     $printerfound++;
     
    -                $subdir=(GETPOST('printer', 'alpha')=='expedition'?'sending':'');
    +                $subdir='';
                     $module = GETPOST('printer', 'alpha');
    -                if ($module =='commande_fournisseur') {
    -                    $module = 'fournisseur';
    -                    $subdir = 'commande';
    +                switch ($module )
    +                {
    +                    case 'livraison' :
    +                        $subdir = 'receipt';
    +                        $module = 'expedition';
    +                        break;
    +                    case 'expedition' :
    +                        $subdir = 'sending';
    +                        break;
    +                    case 'commande_fournisseur' :
    +                        $module = 'fournisseur';
    +                        $subdir = 'commande';
    +                        break;
                     }
                     try {
    -                    $ret = $printer->print_file(GETPOST('file', 'alpha'), $module, $subdir);
    +                    $ret = $printer->printFile(GETPOST('file', 'alpha'), $module, $subdir);
                         if ($ret > 0) {
                             //print '<pre>'.print_r($printer->errors, true).'</pre>';
                             setEventMessages($printer->error, $printer->errors, 'errors');
    diff --git a/htdocs/core/actions_sendmails.inc.php b/htdocs/core/actions_sendmails.inc.php
    index 6afd6b1e354..9ffaceadb26 100644
    --- a/htdocs/core/actions_sendmails.inc.php
    +++ b/htdocs/core/actions_sendmails.inc.php
    @@ -425,10 +425,11 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
     					    if (empty($actiontypecode)) $actiontypecode='AC_OTH_AUTO'; // Event insert into agenda automatically
     
     						$object->socid			= $sendtosocid;	   // To link to a company
    -						$object->sendtoid		= $sendtoid;	   // To link to contacts/addresses. This is an array.
    +						$object->sendtoid		= $sendtoid;	   // To link to contact addresses. This is an array.
     						$object->actiontypecode	= $actiontypecode; // Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...)
    -						$object->actionmsg		= $actionmsg;      // Long text
    -						$object->actionmsg2		= $actionmsg2;     // Short text
    +						$object->actionmsg		= $actionmsg;      // Long text (@TODO Replace this with $message, we already have details of email in dedicated properties)
    +						$object->actionmsg2		= $actionmsg2;     // Short text ($langs->transnoentities('MailSentBy')...);
    +
     						$object->trackid        = $trackid;
     						$object->fk_element		= $object->id;
     						$object->elementtype	= $object->element;
    @@ -439,6 +440,15 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
     							$object->sendtouserid	= $sendtouserid;
     						}
     
    +						$object->email_msgid = $mailfile->msgid;	// @TODO Set msgid into $mailfile after sending
    +						$object->email_from = $from;
    +						$object->email_subject = $subject;
    +						$object->email_to = $sendto;
    +						$object->email_tocc = $sendtocc;
    +						$object->email_tobcc = $sendtobcc;
    +						$object->email_subject = $subject;
    +						$object->email_msgid = $mailfile->msgid;
    +
     						// Call of triggers
     						if (! empty($trigger_name))
     						{
    @@ -496,5 +506,4 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO
     		dol_syslog('Failed to read data of object id='.$object->id.' element='.$object->element);
     		$action = 'presend';
     	}
    -
     }
    diff --git a/htdocs/core/actions_setnotes.inc.php b/htdocs/core/actions_setnotes.inc.php
    index 50b35392644..ec253d5ef4a 100644
    --- a/htdocs/core/actions_setnotes.inc.php
    +++ b/htdocs/core/actions_setnotes.inc.php
    @@ -32,8 +32,33 @@ if ($action == 'setnote_public' && ! empty($permissionnote) && ! GETPOST('cancel
     {
     	if (empty($action) || ! is_object($object) || empty($id)) dol_print_error('','Include of actions_setnotes.inc.php was done but required variable was not set before');
     	if (empty($object->id)) $object->fetch($id);	// Fetch may not be already done
    -	$result=$object->update_note(dol_html_entity_decode(GETPOST('note_public', 'none'), ENT_QUOTES),'_public');
    -	if ($result < 0) setEventMessages($object->error, $object->errors, 'errors');
    +	
    +	$result_update=$object->update_note(dol_html_entity_decode(GETPOST('note_public', 'none'), ENT_QUOTES),'_public');
    +
    +	if ($result_update < 0) setEventMessages($object->error, $object->errors, 'errors');
    +	elseif (in_array($object->table_element, array('supplier_proposal', 'propal', 'commande_fournisseur', 'commande', 'facture_fourn', 'facture')))
    +	{
    +		// Define output language
    +		if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
    +		{
    +			$outputlangs = $langs;
    +			$newlang = '';
    +			if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','aZ09')) $newlang = GETPOST('lang_id','aZ09');
    +			if ($conf->global->MAIN_MULTILANGS && empty($newlang))	$newlang = $object->thirdparty->default_lang;
    +			if (! empty($newlang)) {
    +				$outputlangs = new Translate("", $conf);
    +				$outputlangs->setDefaultLang($newlang);
    +			}
    +			$model=$object->modelpdf;
    +			$hidedetails = (GETPOST('hidedetails','int') ? GETPOST('hidedetails','int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0));
    +			$hidedesc = (GETPOST('hidedesc','int') ? GETPOST('hidedesc','int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ?  1 : 0));
    +			$hideref = (GETPOST('hideref','int') ? GETPOST('hideref','int') : (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0));
    +
    +			$result=$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
    +			
    +			if ($result < 0) dol_print_error($db,$result);
    +		}
    +	}
     }
     // Set public note
     else if ($action == 'setnote_private' && ! empty($permissionnote) && ! GETPOST('cancel','alpha'))
    diff --git a/htdocs/core/ajax/ajaxdirpreview.php b/htdocs/core/ajax/ajaxdirpreview.php
    index f69cc85e026..5056844bcee 100644
    --- a/htdocs/core/ajax/ajaxdirpreview.php
    +++ b/htdocs/core/ajax/ajaxdirpreview.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Simon Tosser         <simon@kornog-computing.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010	   Pierre Morin         <pierre.morin@auguria.net>
      * Copyright (C) 2013      Marcos García        <marcosgdf@gmail.com>
      *
    @@ -82,9 +82,16 @@ else    // For no ajax call
                 dol_print_error($db,$ecmdir->error);
                 exit;
             }
    +
    +        $relativepath=$ecmdir->getRelativePath();	// Example   'mydir/'
         }
    -    $relativepath=$ecmdir->getRelativePath();
    -    $upload_dir = $rootdirfordoc.'/'.$relativepath;
    +	elseif (GETPOST('section_dir'))
    +	{
    +		$relativepath=GETPOST('section_dir');
    +	}
    +	//var_dump($section.'-'.GETPOST('section_dir').'-'.$relativepath);
    +
    +	$upload_dir = $rootdirfordoc.'/'.$relativepath;
     }
     
     if (empty($url))
    @@ -158,8 +165,8 @@ print '<!-- ajaxdirpreview type='.$type.' -->'."\n";
     //print '<!-- Page called with mode='.dol_escape_htmltag(isset($mode)?$mode:'').' type='.dol_escape_htmltag($type).' module='.dol_escape_htmltag($module).' url='.dol_escape_htmltag($url).' '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
     
     $param=($sortfield?'&sortfield='.$sortfield:'').($sortorder?'&sortorder='.$sortorder:'');
    -if (! empty($website)) $param.='&website='.$website;
    -if (! empty($pageid))  $param.='&pageid='.$pageid;
    +if (! empty($websitekey)) $param.='&website='.$websitekey;
    +if (! empty($pageid))     $param.='&pageid='.$pageid;
     
     
     // Dir scan
    @@ -226,7 +233,18 @@ if ($type == 'directory')
         {
         	if ($module == 'medias')
         	{
    -    		$relativepath=GETPOST('file','alpha');
    +    		/*
    +    		   $_POST is array like
    +    		  'token' => string '062380e11b7dcd009d07318b57b71750' (length=32)
    +			  'action' => string 'file_manager' (length=12)
    +			  'website' => string 'template' (length=8)
    +			  'pageid' => string '124' (length=3)
    +			  'section_dir' => string 'mydir/' (length=3)
    +			  'section_id' => string '0' (length=1)
    +			  'max_file_size' => string '2097152' (length=7)
    +			  'sendit' => string 'Envoyer fichier' (length=15)
    +    		 */
    +    		$relativepath=GETPOST('file','alpha')?GETPOST('file','alpha'):GETPOST('section_dir','alpha');
         		if ($relativepath && $relativepath!= '/') $relativepath.='/';
         		$upload_dir = $dolibarr_main_data_root.'/'.$module.'/'.$relativepath;
         		if (GETPOSTISSET('website') || GETPOSTISSET('file_manager'))
    @@ -234,7 +252,7 @@ if ($type == 'directory')
     	    		$param.='&file_manager=1';
     	    		if (!preg_match('/website=/',$param)) $param.='&website='.urlencode(GETPOST('website','alpha'));
     	    		if (!preg_match('/pageid=/',$param)) $param.='&pageid='.urlencode(GETPOST('pageid','int'));
    -	    		//if (!preg_match('/backtopage=/',$param)) $param.='&backtopage='.urlencode($_SERVER["PHP_SELF"].'?file_manager=1&website='.$website.'&pageid='.$pageid);
    +	    		//if (!preg_match('/backtopage=/',$param)) $param.='&backtopage='.urlencode($_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid);
     	    	}
         	}
         	else
    @@ -315,7 +333,7 @@ if ($useajax || $action == 'delete')
     	$formquestion['section_id']=array('type'=>'hidden','value'=>$section_id,'name'=>'section_id');		// We must always put field, even if empty because it is fille by javascript later
     	$formquestion['section_dir']=array('type'=>'hidden','value'=>$section_dir,'name'=>'section_dir');	// We must always put field, even if empty because it is fille by javascript later
     	if (! empty($action) && $action == 'file_manager')	$formquestion['file_manager']=array('type'=>'hidden','value'=>1,'name'=>'file_manager');
    -	if (! empty($website))								$formquestion['website']=array('type'=>'hidden','value'=>$website,'name'=>'website');
    +	if (! empty($websitekey))							$formquestion['website']=array('type'=>'hidden','value'=>$websitekey,'name'=>'website');
     	if (! empty($pageid) && $pageid > 0)				$formquestion['pageid']=array('type'=>'hidden','value'=>$pageid,'name'=>'pageid');
     
     	print $form->formconfirm($url,$langs->trans("DeleteFile"),$langs->trans("ConfirmDeleteFile"),'confirm_deletefile',$formquestion,"no",($useajax?'deletefile':0));
    diff --git a/htdocs/core/ajax/ajaxdirtree.php b/htdocs/core/ajax/ajaxdirtree.php
    index cfff81749de..749f81f1197 100644
    --- a/htdocs/core/ajax/ajaxdirtree.php
    +++ b/htdocs/core/ajax/ajaxdirtree.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2007-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2007-2018  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,6 +31,7 @@ if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU','1');
     if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1');
     if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
     
    +
     if (! isset($mode) || $mode != 'noajax')    // For ajax call
     {
     	$res=@include '../../main.inc.php';
    @@ -39,16 +41,26 @@ if (! isset($mode) || $mode != 'noajax')    // For ajax call
     	include_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
     	include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php';
     
    +	//if (GETPOST('preopened')) { $_GET['dir'] = $_POST['dir'] = '/bbb/'; }
    +
     	$openeddir = GETPOST('openeddir');
     	$modulepart= GETPOST('modulepart');
     	$selecteddir = jsUnEscape(GETPOST('dir'));        // relative path. We must decode using same encoding function used by javascript: escape()
    +
    +	$preopened = GETPOST('preopened');
    +
     	if ($selecteddir != '/') $selecteddir = preg_replace('/\/$/','',$selecteddir);    // We removed last '/' except if it is '/'
     }
     else    // For no ajax call
     {
    +	//if (GETPOST('preopened')) { $_GET['dir'] = $_POST['dir'] = GETPOST('preopened'); }
    +
     	$openeddir = GETPOST('openeddir');
     	$modulepart= GETPOST('modulepart');
     	$selecteddir = GETPOST('dir');
    +
    +	$preopened = GETPOST('preopened');
    +
     	if ($selecteddir != '/') $selecteddir = preg_replace('/\/$/','',$selecteddir);    // We removed last '/' except if it is '/'
     	if (empty($url)) $url=DOL_URL_ROOT.'/ecm/index.php';
     }
    @@ -58,8 +70,16 @@ $langs->load("ecm");
     
     // Define fullpathselecteddir.
     $fullpathselecteddir='<none>';
    -if ($modulepart == 'ecm') $fullpathselecteddir=$conf->ecm->dir_output.'/'.($selecteddir != '/' ? $selecteddir : '');
    -if ($modulepart == 'medias') $fullpathselecteddir=$dolibarr_main_data_root.'/medias/'.($selecteddir != '/' ? $selecteddir : '');
    +if ($modulepart == 'ecm')
    +{
    +	$fullpathselecteddir=$conf->ecm->dir_output.'/'.($selecteddir != '/' ? $selecteddir : '');
    +	$fullpathpreopened=$conf->ecm->dir_output.'/'.($preopened != '/' ? $preopened : '');
    +}
    +elseif ($modulepart == 'medias')
    +{
    +	$fullpathselecteddir=$dolibarr_main_data_root.'/medias/'.($selecteddir != '/' ? $selecteddir : '');
    +	$fullpathpreopened=$dolibarr_main_data_root.'/medias/'.($preopened != '/' ? $preopened : '');
    +}
     
     
     // Security:
    @@ -77,7 +97,7 @@ if ($modulepart == 'ecm')
     {
     	if (! $user->rights->ecm->read) accessforbidden();
     }
    -if ($modulepart == 'medias')
    +elseif ($modulepart == 'medias')
     {
     	// Always allowed
     }
    @@ -87,20 +107,20 @@ if ($modulepart == 'medias')
      * View
      */
     
    -if (! isset($mode) || $mode != 'noajax')
    +if (! isset($mode) || $mode != 'noajax')	// if ajax mode
     {
     	top_httphead();
     }
     
    -//print '<!-- selecteddir = '.$selecteddir.', openeddir = '.$openeddir.', modulepart='.$modulepart.' -->'."\n";
    +//print '<!-- selecteddir (relative dir we click on) = '.$selecteddir.', openeddir = '.$openeddir.', modulepart='.$modulepart.', preopened='.$preopened.' -->'."\n";
     $userstatic=new User($db);
     $form=new Form($db);
     $ecmdirstatic = new EcmDirectory($db);
     
    -// Load full tree from database. We will use it to define nbofsubdir and nboffilesinsubdir
    +// Load full tree of ECM module from database. We will use it to define nbofsubdir and nboffilesinsubdir
     if (empty($sqltree)) $sqltree=$ecmdirstatic->get_full_arbo(0);
     
    -// Try to find key into $sqltree
    +// Try to find selected dir id into $sqltree and save it into $current_ecmdir_id
     $current_ecmdir_id=-1;
     foreach($sqltree as $keycursor => $val)
     {
    @@ -113,131 +133,13 @@ foreach($sqltree as $keycursor => $val)
     
     if (! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS))
     {
    -	if (file_exists($fullpathselecteddir))
    -	{
    -		$files = @scandir($fullpathselecteddir);
    +	treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened);
     
    -		if ($files)
    -	    {
    -	    	natcasesort($files);
    -	    	if (count($files) > 2)    /* The 2 accounts for . and .. */
    -	    	{
    -	    		echo '<ul class="ecmjqft" style="display: none;">'."\n";
    -
    -	    		// All dirs
    -	    		foreach ($files as $file)    // $file can be '.', '..', or 'My dir' or 'My file'
    -	    		{
    -	    		    if ($file == 'temp') continue;
    -
    -	    	        $nbofsubdir=0;
    -	    	        $nboffilesinsubdir=0;
    -
    -	    	        $val=array();
    -
    -	    	        // Loop on all database entries (sqltree) to find the one matching the subdir found into dir to scan
    -			        foreach($sqltree as $key => $tmpval)
    -			        {
    -	    	            //print "-- key=".$key." - ".$tmpval['fullrelativename']." vs ".(($selecteddir != '/'?$selecteddir.'/':'').$file)."<br>\n";
    -			        	if ($tmpval['fullrelativename'] == (($selecteddir != '/'?$selecteddir.'/':'').$file))		// We found equivalent record into database
    -			            {
    -			                $val=$tmpval;
    -			                $resarray=tree_showpad($sqltree,$key,1);
    -
    -			                // Refresh cache for this subdir
    -			            	if (isset($val['cachenbofdoc']) && $val['cachenbofdoc'] < 0)	// Cache is not up to date, so we update it for this directory t
    -			            	{
    -			            		$result=$ecmdirstatic->fetch($val['id']);
    -			            		$ecmdirstatic->ref=$ecmdirstatic->label;
    -
    -			            		$result=$ecmdirstatic->refreshcachenboffile(0);
    -			            		$val['cachenbofdoc']=$result;
    -			            	}
    -
    -	                        $a=$resarray[0];
    -	                        $nbofsubdir=$resarray[1];
    -	                        $nboffilesinsubdir=$resarray[2];
    -	                        break;
    -			            }
    -			        }
    -
    -	    		    //print 'modulepart='.$modulepart.' fullpathselecteddir='.$fullpathselecteddir.' - val[fullrelativename] (in database)='.$val['fullrelativename'].' - val[id]='.$val['id'].' - is_dir='.dol_is_dir($fullpathselecteddir . $file).' - file='.$file."\n";
    -	    		    if ($file != '.' && $file != '..' && ((! empty($val['fullrelativename']) && $val['id'] >= 0) || dol_is_dir($fullpathselecteddir . (preg_match('/\/$/',$fullpathselecteddir)?'':'/') . $file)))
    -	    		    {
    -						if (empty($val['fullrelativename']))	// If we did not find entry into database, but found a directory (dol_is_dir was ok at previous test)
    -						{
    -	    		    		$val['fullrelativename']=(($selecteddir && $selecteddir != '/')?$selecteddir.'/':'').$file;
    -	    		    		$val['id']=0;
    -	    		    		$val['label']=$file;
    -	    		    		$val['description']='';
    -	    		    		$nboffilesinsubdir=$langs->trans("Unknown");
    -						}
    -
    -			        	print '<li class="directory collapsed">';
    -
    -	    				print "<a class=\"fmdirlia jqft ecmjqft\" href=\"";
    -	    				print "#";
    -	    				print "\" rel=\"" . dol_escape_htmltag($val['fullrelativename'].'/') . "\" id=\"fmdirlia_id_".$val['id']."\"";
    -						print " onClick=\"loadandshowpreview('".dol_escape_js($val['fullrelativename'])."',".$val['id'].")";
    -	    				print "\">";
    -	    				print dol_escape_htmltag($file);
    -	    				print "</a>";
    -
    -	    				print '<div class="ecmjqft">';
    -
    -	    				print '<table class="nobordernopadding"><tr>';
    -
    -	    				/*print '<td align="left">';
    -	    				print dol_escape_htmltag($file);
    -	    				print '</td>';*/
    -
    -	    				// Nb of docs
    -	    				print '<td align="right">';
    -	    				print (isset($val['cachenbofdoc']) && $val['cachenbofdoc']  >= 0)?$val['cachenbofdoc']:'&nbsp;';
    -	    				print '</td>';
    -	    				print '<td align="left">';
    -	    				if ($nbofsubdir > 0  && $nboffilesinsubdir > 0) print '<font color="#AAAAAA">+'.$nboffilesinsubdir.'</font> ';
    -	    				print '</td>';
    -
    -	    				// Edit link
    -	    				print '<td align="right" width="18"><a href="';
    -	    				print DOL_URL_ROOT.'/ecm/dir_card.php?module='.urlencode($modulepart).'&section='.$val['id'].'&relativedir='.urlencode($val['fullrelativename']);
    -	    				print '&backtopage='.urlencode($_SERVER["PHP_SELF"].'?file_manager=1&website='.$website.'&pageid='.$pageid);
    -	    				print '">'.img_edit($langs->trans("Edit").' - '.$langs->trans("View"), 0, 'class="valignmiddle opacitymedium"').'</a></td>';
    -
    -	    				// Add link
    -	    				//print '<td align="right"><a href="'.DOL_URL_ROOT.'/ecm/dir_add_card.php?action=create&amp;catParent='.$val['id'].'">'.img_edit_add().'</a></td>';
    -	    				//print '<td align="right" width="14">&nbsp;</td>';
    -
    -	    				// Info
    -	    				if ($modulepart == 'ecm')
    -	    				{
    -	    					print '<td align="right" width="18">';
    -		    				$userstatic->id=isset($val['fk_user_c'])?$val['fk_user_c']:0;
    -		    				$userstatic->lastname=isset($val['login_c'])?$val['login_c']:0;
    -		    				$htmltooltip='<b>'.$langs->trans("ECMSection").'</b>: '.$val['label'].'<br>';
    -		    				$htmltooltip='<b>'.$langs->trans("Type").'</b>: '.$langs->trans("ECMSectionManual").'<br>';
    -		    				$htmltooltip.='<b>'.$langs->trans("ECMCreationUser").'</b>: '.$userstatic->getNomUrl(1, '', false, 1).'<br>';
    -		    				$htmltooltip.='<b>'.$langs->trans("ECMCreationDate").'</b>: '.(isset($val['date_c'])?dol_print_date($val['date_c'],"dayhour"):$langs->trans("NeedRefresh")).'<br>';
    -		    				$htmltooltip.='<b>'.$langs->trans("Description").'</b>: '.$val['description'].'<br>';
    -		    				$htmltooltip.='<b>'.$langs->trans("ECMNbOfFilesInDir").'</b>: '.((isset($val['cachenbofdoc']) && $val['cachenbofdoc'] >= 0)?$val['cachenbofdoc']:$langs->trans("NeedRefresh")).'<br>';
    -		    				if ($nboffilesinsubdir > 0) $htmltooltip.='<b>'.$langs->trans("ECMNbOfFilesInSubDir").'</b>: '.$nboffilesinsubdir;
    -		    				else $htmltooltip.='<b>'.$langs->trans("ECMNbOfSubDir").'</b>: '.($nbofsubdir >= 0 ? $nbofsubdir : $langs->trans("NeedRefresh")).'<br>';
    -		    				print $form->textwithpicto('',$htmltooltip,1,"info");
    -		    				print "</td>";
    -	    				}
    -
    -	    				print "</tr></table>\n";
    -	                    print '</div>';
    -
    -	                    //print '<div>&nbsp;</div>';
    -	    				print "</li>\n";
    -	    			}
    -	    		}
    -
    -	    		// Enable jquery handlers on new generated HTML objects (same code than into lib_footer.js.php)
    -	    		// Because the content is reloaded by ajax call, we must also reenable some jquery hooks
    -				print "\n<!-- JS CODE TO ENABLE Tooltips on all object with class classfortooltip (reload into ajaxdirtree) -->\n";
    -	    		print '<script type="text/javascript">
    +	// TODO Find a solution to not output this code for each leaf we open
    +	// Enable jquery handlers on new generated HTML objects (same code than into lib_footer.js.php)
    +	// Because the content is reloaded by ajax call, we must also reenable some jquery hooks
    +	print "\n<!-- JS CODE TO ENABLE Tooltips on all object with class classfortooltip (reload into ajaxdirtree) -->\n";
    +	print '<script type="text/javascript">
     	            	jQuery(document).ready(function () {
     	            		jQuery(".classfortooltip").tooltip({
     							show: { collision: "flipfit", effect:\'toggle\', delay:50 },
    @@ -250,13 +152,6 @@ if (! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE
     	            	});
     	            	</script>';
     
    -	    		echo "</ul>\n";
    -
    -	    	}
    -	    }
    -	    else print "PermissionDenied";
    -	}
    -
     	// This ajax service is called only when a directory $selecteddir is opened but not when closed.
     	//print '<script language="javascript">';
     	//print "loadandshowpreview('".dol_escape_js($selecteddir)."');";
    @@ -426,3 +321,175 @@ if (empty($conf->use_javascript_ajax) || ! empty($conf->global->MAIN_ECM_DISABLE
     
     // Close db if mode is not noajax
     if ((! isset($mode) || $mode != 'noajax') && is_object($db)) $db->close();
    +
    +
    +
    +/**
    + * treeOutputForAbsoluteDir
    + *
    + * @param	array	$sqltree				Sqltree
    + * @param	string	$selecteddir			Selected dir
    + * @param	string	$fullpathselecteddir	Full path of selected dir
    + * @param	string	$modulepart				Modulepart
    + * @param	string	$websitekey				Website key
    + * @param	int		$pageid					Page id
    + * @param	string	$preopened				Current open dir
    + * @param	string	$fullpathpreopened		Full path of current open dir
    + * @param	int		$depth					Depth
    + * @return	void
    + */
    +function treeOutputForAbsoluteDir($sqltree, $selecteddir, $fullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened, $depth=0)
    +{
    +	global $conf, $db, $langs, $form;
    +	global $dolibarr_main_data_root;
    +
    +	$ecmdirstatic = new EcmDirectory($db);
    +	$userstatic = new User($db);
    +
    +	if (file_exists($fullpathselecteddir))
    +	{
    +		$files = @scandir($fullpathselecteddir);
    +
    +		if (! empty($files))
    +		{
    +			natcasesort($files);
    +			if (count($files) > 2)    /* The 2 accounts for . and .. */
    +			{
    +				echo '<ul class="ecmjqft" style="display: none;">'."\n";
    +
    +				// All dirs
    +				foreach ($files as $file)    // $file can be '.', '..', or 'My dir' or 'My file'
    +				{
    +					if ($file == 'temp') continue;
    +
    +					$nbofsubdir=0;
    +					$nboffilesinsubdir=0;
    +
    +					$val=array();
    +
    +					// Loop on all database entries (sqltree) to find the one matching the subdir found into dir to scan
    +					foreach($sqltree as $key => $tmpval)
    +					{
    +						//print "-- key=".$key." - ".$tmpval['fullrelativename']." vs ".(($selecteddir != '/'?$selecteddir.'/':'').$file)."<br>\n";
    +						if ($tmpval['fullrelativename'] == (($selecteddir != '/'?$selecteddir.'/':'').$file))		// We found equivalent record into database
    +						{
    +							$val=$tmpval;
    +							$resarray=tree_showpad($sqltree,$key,1);
    +
    +							// Refresh cache for this subdir
    +							if (isset($val['cachenbofdoc']) && $val['cachenbofdoc'] < 0)	// Cache is not up to date, so we update it for this directory t
    +							{
    +								$result=$ecmdirstatic->fetch($val['id']);
    +								$ecmdirstatic->ref=$ecmdirstatic->label;
    +
    +								$result=$ecmdirstatic->refreshcachenboffile(0);
    +								$val['cachenbofdoc']=$result;
    +							}
    +
    +							$a=$resarray[0];
    +							$nbofsubdir=$resarray[1];
    +							$nboffilesinsubdir=$resarray[2];
    +							break;
    +						}
    +					}
    +
    +					//print 'modulepart='.$modulepart.' fullpathselecteddir='.$fullpathselecteddir.' - val[fullrelativename] (in database)='.$val['fullrelativename'].' - val[id]='.$val['id'].' - is_dir='.dol_is_dir($fullpathselecteddir . $file).' - file='.$file."\n";
    +					if ($file != '.' && $file != '..' && ((! empty($val['fullrelativename']) && $val['id'] >= 0) || dol_is_dir($fullpathselecteddir . (preg_match('/\/$/',$fullpathselecteddir)?'':'/') . $file)))
    +					{
    +						if (empty($val['fullrelativename']))	// If we did not find entry into database, but found a directory (dol_is_dir was ok at previous test)
    +						{
    +							$val['fullrelativename']=(($selecteddir && $selecteddir != '/')?$selecteddir.'/':'').$file;
    +							$val['id']=0;
    +							$val['label']=$file;
    +							$val['description']='';
    +							$nboffilesinsubdir=$langs->trans("Unknown");
    +						}
    +
    +						$collapsedorexpanded='collapsed';
    +						if (preg_match('/^'.preg_quote($val['fullrelativename'].'/', '/').'/', $preopened)) $collapsedorexpanded='expanded';
    +						print '<li class="directory '.$collapsedorexpanded.'">';	// collapsed is opposite if expanded
    +
    +						print "<a class=\"fmdirlia jqft ecmjqft\" href=\"";
    +						print "#";
    +						print "\" rel=\"" . dol_escape_htmltag($val['fullrelativename'].'/') . "\" id=\"fmdirlia_id_".$val['id']."\"";
    +						print " onClick=\"loadandshowpreview('".dol_escape_js($val['fullrelativename'])."',".$val['id'].")";
    +						print "\">";
    +						print dol_escape_htmltag($file);
    +						print "</a>";
    +
    +						print '<div class="ecmjqft">';
    +
    +						print '<table class="nobordernopadding"><tr>';
    +
    +						/*print '<td align="left">';
    +						 print dol_escape_htmltag($file);
    +						 print '</td>';*/
    +
    +						// Nb of docs
    +						print '<td align="right">';
    +						print (isset($val['cachenbofdoc']) && $val['cachenbofdoc']  >= 0)?$val['cachenbofdoc']:'&nbsp;';
    +						print '</td>';
    +						print '<td align="left">';
    +						if ($nbofsubdir > 0  && $nboffilesinsubdir > 0) print '<font color="#AAAAAA">+'.$nboffilesinsubdir.'</font> ';
    +						print '</td>';
    +
    +						// Edit link
    +						print '<td align="right" width="18"><a href="';
    +						print DOL_URL_ROOT.'/ecm/dir_card.php?module='.urlencode($modulepart).'&section='.$val['id'].'&relativedir='.urlencode($val['fullrelativename']);
    +						print '&backtopage='.urlencode($_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid);
    +						print '">'.img_edit($langs->trans("Edit").' - '.$langs->trans("View"), 0, 'class="valignmiddle opacitymedium"').'</a></td>';
    +
    +						// Add link
    +						//print '<td align="right"><a href="'.DOL_URL_ROOT.'/ecm/dir_add_card.php?action=create&amp;catParent='.$val['id'].'">'.img_edit_add().'</a></td>';
    +						//print '<td align="right" width="14">&nbsp;</td>';
    +
    +						// Info
    +						if ($modulepart == 'ecm')
    +						{
    +							print '<td align="right" width="18">';
    +							$userstatic->id=isset($val['fk_user_c'])?$val['fk_user_c']:0;
    +							$userstatic->lastname=isset($val['login_c'])?$val['login_c']:0;
    +							$htmltooltip='<b>'.$langs->trans("ECMSection").'</b>: '.$val['label'].'<br>';
    +							$htmltooltip='<b>'.$langs->trans("Type").'</b>: '.$langs->trans("ECMSectionManual").'<br>';
    +							$htmltooltip.='<b>'.$langs->trans("ECMCreationUser").'</b>: '.$userstatic->getNomUrl(1, '', false, 1).'<br>';
    +							$htmltooltip.='<b>'.$langs->trans("ECMCreationDate").'</b>: '.(isset($val['date_c'])?dol_print_date($val['date_c'],"dayhour"):$langs->trans("NeedRefresh")).'<br>';
    +							$htmltooltip.='<b>'.$langs->trans("Description").'</b>: '.$val['description'].'<br>';
    +							$htmltooltip.='<b>'.$langs->trans("ECMNbOfFilesInDir").'</b>: '.((isset($val['cachenbofdoc']) && $val['cachenbofdoc'] >= 0)?$val['cachenbofdoc']:$langs->trans("NeedRefresh")).'<br>';
    +							if ($nboffilesinsubdir > 0) $htmltooltip.='<b>'.$langs->trans("ECMNbOfFilesInSubDir").'</b>: '.$nboffilesinsubdir;
    +							else $htmltooltip.='<b>'.$langs->trans("ECMNbOfSubDir").'</b>: '.($nbofsubdir >= 0 ? $nbofsubdir : $langs->trans("NeedRefresh")).'<br>';
    +							print $form->textwithpicto('',$htmltooltip,1,"info");
    +							print "</td>";
    +						}
    +
    +						print "</tr></table>\n";
    +						print '</div>';
    +
    +						//print 'selecteddir='.$selecteddir.' preopened='.$preopened.' $val[\'fullrelativename\']='.$val['fullrelativename']."<br>\n";
    +						if (preg_match('/^'.preg_quote($val['fullrelativename'].'/', '/').'/', $preopened))
    +						{
    +							//print 'modulepart='.$modulepart.' fullpathselecteddir='.$fullpathselecteddir.' - val[fullrelativename] (in database)='.$val['fullrelativename'].' - val[id]='.$val['id'].' - is_dir='.dol_is_dir($fullpathselecteddir . $file).' - file='.$file."\n";
    +							$newselecteddir = $val['fullrelativename'];
    +							$newfullpathselecteddir='';
    +							if ($modulepart == 'ecm')
    +							{
    +								$newfullpathselecteddir=$conf->ecm->dir_output.'/'.($val['fullrelativename'] != '/' ? $val['fullrelativename'] : '');
    +							}
    +							elseif ($modulepart == 'medias')
    +							{
    +								$newfullpathselecteddir=$dolibarr_main_data_root.'/medias/'.($val['fullrelativename'] != '/' ? $val['fullrelativename'] : '');
    +							}
    +
    +							if ($newfullpathselecteddir) treeOutputForAbsoluteDir($sqltree, $newselecteddir, $newfullpathselecteddir, $modulepart, $websitekey, $pageid, $preopened, $fullpathpreopened, $depth+1);
    +						}
    +
    +						print "</li>\n";
    +					}
    +				}
    +
    +				echo "</ul>\n";
    +			}
    +		}
    +		else print "PermissionDenied";
    +	}
    +}
    +
    diff --git a/htdocs/core/ajax/box.php b/htdocs/core/ajax/box.php
    index f6bd5b5214a..93b317a43c9 100644
    --- a/htdocs/core/ajax/box.php
    +++ b/htdocs/core/ajax/box.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2007-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/ajax/check_notifications.php b/htdocs/core/ajax/check_notifications.php
    index 6984bbff5b4..a5c73655bab 100644
    --- a/htdocs/core/ajax/check_notifications.php
    +++ b/htdocs/core/ajax/check_notifications.php
    @@ -44,37 +44,37 @@ $eventfound = array();
     //dol_syslog('time='.$time.' $_SESSION[auto_ck_events_not_before]='.$_SESSION['auto_check_events_not_before']);
     
     // TODO Try to make a solution with only a javascript timer that is easier. Difficulty is to avoid notification twice when several tabs are opened.
    -if ($time >= $_SESSION['auto_check_events_not_before']) 
    +if ($time >= $_SESSION['auto_check_events_not_before'])
     {
         $time_update = (int) $conf->global->MAIN_BROWSER_NOTIFICATION_FREQUENCY;   // Always defined
    -    if (! empty($_SESSION['auto_check_events_not_before'])) 
    +    if (! empty($_SESSION['auto_check_events_not_before']))
         {
             // We start scan from the not before so if two tabs were opend at differents seconds and we close one (so the js timer),
    -        // then we are not losing periods 
    +        // then we are not losing periods
             $starttime = $_SESSION['auto_check_events_not_before'];
             // Protection to avoid too long sessions
    -        if ($starttime < ($time - (int) $conf->global->MAIN_SESSION_TIMEOUT)) 
    +        if ($starttime < ($time - (int) $conf->global->MAIN_SESSION_TIMEOUT))
             {
                 dol_syslog("We ask to check browser notification on a too large period. We fix this with current date.");
                 $starttime = $time;
             }
         }
    -    else 
    +    else
         {
             $starttime = $time;
         }
    -    
    +
         $_SESSION['auto_check_events_not_before'] = $time + $time_update;
    -    
    -    // Force save of session change we did. 
    +
    +    // Force save of session change we did.
         // WARNING: Any change in sessions after that will not be saved !
         session_write_close();
    -    
    +
         require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
    -	
    -    
    +
    +
         dol_syslog('NEW $_SESSION[auto_check_events_not_before]='.$_SESSION['auto_check_events_not_before']);
    -    
    +
         $sql = 'SELECT id';
         $sql .= ' FROM ' . MAIN_DB_PREFIX . 'actioncomm a, ' . MAIN_DB_PREFIX . 'actioncomm_resources ar';
         $sql .= ' WHERE a.id = ar.fk_actioncomm';
    @@ -91,11 +91,11 @@ if ($time >= $_SESSION['auto_check_events_not_before'])
     
             $actionmod = new ActionComm($db);
     
    -        while ($obj = $db->fetch_object($resql)) 
    +        while ($obj = $db->fetch_object($resql))
             {
    -            $langs->load("agenda");
    -            $langs->load("commercial");
    -            
    +            // Load translation files required by the page
    +            $langs->loadLangs(array('agenda', 'commercial'));
    +
                 $actionmod->fetch($obj->id);
     
                 // Message must be formated and translated to be used with javascript directly
    @@ -105,7 +105,7 @@ if ($time >= $_SESSION['auto_check_events_not_before'])
                 $event['tipo'] = $langs->transnoentities('Action' . $actionmod->code);
                 $event['titulo'] = $actionmod->label;
                 $event['location'] = $langs->transnoentities('Location').': '.$actionmod->location;
    -            
    +
                 $eventfound[] = $event;
             }
         }
    @@ -113,7 +113,6 @@ if ($time >= $_SESSION['auto_check_events_not_before'])
         {
             dol_syslog("Error sql = ".$db->lasterror(), LOG_ERR);
         }
    -
     }
     
     print json_encode($eventfound);
    diff --git a/htdocs/core/ajax/constantonoff.php b/htdocs/core/ajax/constantonoff.php
    index 9e9f8a0d799..0f733f4df5c 100644
    --- a/htdocs/core/ajax/constantonoff.php
    +++ b/htdocs/core/ajax/constantonoff.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011-2015 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011-2015 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/ajax/contacts.php b/htdocs/core/ajax/contacts.php
    index b03b9f128cf..777fa076639 100644
    --- a/htdocs/core/ajax/contacts.php
    +++ b/htdocs/core/ajax/contacts.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012 Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012 Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2016 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/ajax/extraparams.php b/htdocs/core/ajax/extraparams.php
    index 908c1ef9f11..e5972d29d70 100644
    --- a/htdocs/core/ajax/extraparams.php
    +++ b/htdocs/core/ajax/extraparams.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/ajax/fileupload.php b/htdocs/core/ajax/fileupload.php
    index 9405aa26cf1..1cf5678cb00 100644
    --- a/htdocs/core/ajax/fileupload.php
    +++ b/htdocs/core/ajax/fileupload.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Laurent Destailleur	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/ajax/getaccountcurrency.php b/htdocs/core/ajax/getaccountcurrency.php
    index 2289d8e1c0f..d58c81efdba 100644
    --- a/htdocs/core/ajax/getaccountcurrency.php
    +++ b/htdocs/core/ajax/getaccountcurrency.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/ajax/loadinplace.php b/htdocs/core/ajax/loadinplace.php
    index 099f66ba3de..abf3efba7db 100644
    --- a/htdocs/core/ajax/loadinplace.php
    +++ b/htdocs/core/ajax/loadinplace.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011-2014 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011-2014 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/ajax/price.php b/htdocs/core/ajax/price.php
    index 577f659b2cc..3eab18216d1 100644
    --- a/htdocs/core/ajax/price.php
    +++ b/htdocs/core/ajax/price.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -25,7 +25,7 @@ if (! defined('NOREQUIREMENU'))  define('NOREQUIREMENU','1');
     if (! defined('NOREQUIREAJAX'))  define('NOREQUIREAJAX','1');
     if (! defined('NOREQUIRESOC'))   define('NOREQUIRESOC','1');
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     
     $output		= GETPOST('output','alpha');
     $amount		= price2num(GETPOST('amount','alpha'));
    @@ -52,7 +52,6 @@ if (! empty($output) && isset($amount) && isset($tva_tx))
     			$price = price2num($amount * (1 + ($tva_tx/100)), 'MU');
     			$return['price_ht'] = $amount;
     			$return['price_ttc'] = (isset($price) && $price != '' ? price($price) : '');
    -
     		}
     		else if ($output == 'price_ht') {
     
    diff --git a/htdocs/core/ajax/row.php b/htdocs/core/ajax/row.php
    index 98f18df8a68..5348f36976d 100644
    --- a/htdocs/core/ajax/row.php
    +++ b/htdocs/core/ajax/row.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2015 Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2015 Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2017      Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -42,8 +42,8 @@ top_httphead();
     print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
     
     // Registering the location of boxes
    -if ((isset($_POST['roworder']) && ! empty($_POST['roworder'])) && (isset($_POST['table_element_line']) && ! empty($_POST['table_element_line']))
    -	&& (isset($_POST['fk_element']) && ! empty($_POST['fk_element'])) && (isset($_POST['element_id']) && ! empty($_POST['element_id'])) )
    +if ((! empty($_POST['roworder'])) && (! empty($_POST['table_element_line']))
    +	&& (! empty($_POST['fk_element'])) && (! empty($_POST['element_id'])))
     {
     	$roworder=GETPOST('roworder','alpha',2);
     	$table_element_line=GETPOST('table_element_line','alpha',2);
    @@ -53,6 +53,7 @@ if ((isset($_POST['roworder']) && ! empty($_POST['roworder'])) && (isset($_POST[
     	dol_syslog("AjaxRow roworder=".$roworder." table_element_line=".$table_element_line." fk_element=".$fk_element." element_id=".$element_id, LOG_DEBUG);
     
     	$rowordertab = explode(',',$roworder);
    +	$newrowordertab = array();
     	foreach($rowordertab as $value)
     	{
     		if (! empty($value)) $newrowordertab[] = $value;
    @@ -62,6 +63,7 @@ if ((isset($_POST['roworder']) && ! empty($_POST['roworder'])) && (isset($_POST[
     	$row->table_element_line = $table_element_line;
     	$row->fk_element = $fk_element;
     	$row->id = $element_id;
    +
     	$row->line_ajaxorder($newrowordertab);		// This update field rank or position in table row->table_element_line
     
     	// Reorder line to have position of children lines sharing same counter than parent lines
    diff --git a/htdocs/core/ajax/saveinplace.php b/htdocs/core/ajax/saveinplace.php
    index 7070d1a8799..188dcbb29da 100644
    --- a/htdocs/core/ajax/saveinplace.php
    +++ b/htdocs/core/ajax/saveinplace.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011-2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011-2012 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/ajax/security.php b/htdocs/core/ajax/security.php
    index fa1ce2103d4..d6bfe51b45c 100644
    --- a/htdocs/core/ajax/security.php
    +++ b/htdocs/core/ajax/security.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011-2015 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011-2015 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/ajax/vatrates.php b/htdocs/core/ajax/vatrates.php
    index 3826e521d06..8fe38d02552 100644
    --- a/htdocs/core/ajax/vatrates.php
    +++ b/htdocs/core/ajax/vatrates.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/ajax/ziptown.php b/htdocs/core/ajax/ziptown.php
    index 2100d3d3600..c1af6a2ac22 100644
    --- a/htdocs/core/ajax/ziptown.php
    +++ b/htdocs/core/ajax/ziptown.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010     Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010     Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2011-204 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/boxes/box_actions.php b/htdocs/core/boxes/box_actions.php
    index f6d9d03dccf..aea85fd111e 100644
    --- a/htdocs/core/boxes/box_actions.php
    +++ b/htdocs/core/boxes/box_actions.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014 	   Charles-Fr BENKE        <charles.fr@benke.fr>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
    @@ -37,7 +37,11 @@ class box_actions extends ModeleBoxes
     	var $boxlabel="BoxLastActions";
     	var $depends = array("agenda");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -228,7 +232,6 @@ class box_actions extends ModeleBoxes
     					}
     				}
     				$out.= '</table>';
    -
     			}
     			$out.= '</div>';
     			if ($actioncejour)
    @@ -256,6 +259,5 @@ class box_actions extends ModeleBoxes
     
     		return '';
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_activity.php b/htdocs/core/boxes/box_activity.php
    index 4fb8cc19c82..bd3163268ac 100644
    --- a/htdocs/core/boxes/box_activity.php
    +++ b/htdocs/core/boxes/box_activity.php
    @@ -35,7 +35,11 @@ class box_activity extends ModeleBoxes
         var $boxlabel='BoxGlobalActivity';
         var $depends = array("facture");
     
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
         var $param;
         var $enabled = 1;
     
    diff --git a/htdocs/core/boxes/box_bookmarks.php b/htdocs/core/boxes/box_bookmarks.php
    index e2a45ffab22..c3a29877104 100644
    --- a/htdocs/core/boxes/box_bookmarks.php
    +++ b/htdocs/core/boxes/box_bookmarks.php
    @@ -33,7 +33,11 @@ class box_bookmarks extends ModeleBoxes
     	var $boxlabel="BoxMyLastBookmarks";
     	var $depends = array("bookmark");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -157,6 +161,5 @@ class box_bookmarks extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_clients.php b/htdocs/core/boxes/box_clients.php
    index 7ab2de66a7b..9b1e4e34261 100644
    --- a/htdocs/core/boxes/box_clients.php
    +++ b/htdocs/core/boxes/box_clients.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -37,7 +37,11 @@ class box_clients extends ModeleBoxes
     	var $boxlabel="BoxLastCustomers";
     	var $depends = array("societe");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $enabled = 1;
     
     	var $info_box_head = array();
    @@ -159,7 +163,6 @@ class box_clients extends ModeleBoxes
                     'text' => $langs->trans("ReadPermissionNotAllowed")
     			);
     		}
    -
     	}
     
     	/**
    @@ -174,6 +177,5 @@ class box_clients extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_commandes.php b/htdocs/core/boxes/box_commandes.php
    index 9bbde140dbe..3f86909f04a 100644
    --- a/htdocs/core/boxes/box_commandes.php
    +++ b/htdocs/core/boxes/box_commandes.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -37,7 +37,11 @@ class box_commandes extends ModeleBoxes
         var $boxlabel="BoxLastCustomerOrders";
         var $depends = array("commande");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
         var $info_box_head = array();
    @@ -198,6 +202,5 @@ class box_commandes extends ModeleBoxes
         {
             return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
         }
    -
     }
     
    diff --git a/htdocs/core/boxes/box_comptes.php b/htdocs/core/boxes/box_comptes.php
    index 52f8e6c7d9e..5a5c2f59986 100644
    --- a/htdocs/core/boxes/box_comptes.php
    +++ b/htdocs/core/boxes/box_comptes.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Christophe
      * Copyright (C) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
    @@ -38,7 +38,11 @@ class box_comptes extends ModeleBoxes
     	var $boxlabel="BoxCurrentAccounts";
     	var $depends = array("banque");     // Box active if module banque active
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     	var $enabled = 1;
     
    @@ -170,7 +174,6 @@ class box_comptes extends ModeleBoxes
                     'text' => $langs->trans("ReadPermissionNotAllowed")
                 );
             }
    -
     	}
     
     	/**
    @@ -185,6 +188,5 @@ class box_comptes extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_contacts.php b/htdocs/core/boxes/box_contacts.php
    index a8dc7f1231d..2d9d7e9461b 100644
    --- a/htdocs/core/boxes/box_contacts.php
    +++ b/htdocs/core/boxes/box_contacts.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      * Copyright (C) 2018      Josep Lluís Amador   <joseplluis@lliuretic.cat>
      *
    @@ -39,7 +39,11 @@ class box_contacts extends ModeleBoxes
     	var $boxlabel="BoxLastContacts";
     	var $depends = array("societe");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -185,6 +189,5 @@ class box_contacts extends ModeleBoxes
     	{
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_contracts.php b/htdocs/core/boxes/box_contracts.php
    index 49d6df67d7f..7239fa78919 100644
    --- a/htdocs/core/boxes/box_contracts.php
    +++ b/htdocs/core/boxes/box_contracts.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010      Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      * Copyright (C) 2016-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
    @@ -36,7 +36,11 @@ class box_contracts extends ModeleBoxes
         var $boxlabel="BoxLastContracts";
         var $depends = array("contrat");	// conf->contrat->enabled
     
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
         var $param;
     
         var $info_box_head = array();
    @@ -79,7 +83,7 @@ class box_contracts extends ModeleBoxes
             	$contractstatic=new Contrat($db);
             	$thirdpartytmp=new Societe($db);
     
    -    	    $sql = "SELECT s.nom as name, s.rowid as socid,";
    +    	    $sql = "SELECT s.nom as name, s.rowid as socid, s.email, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,";
         		$sql.= " c.rowid, c.ref, c.statut as fk_statut, c.date_contrat, c.datec, c.fin_validite, c.date_cloture";
         		$sql.= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."contrat as c";
         		if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    @@ -104,6 +108,7 @@ class box_contracts extends ModeleBoxes
                     while ($line < $num)
                     {
         				$objp = $db->fetch_object($resql);
    +
         				$datec=$db->jdate($objp->datec);
         				$dateterm=$db->jdate($objp->fin_validite);
         				$dateclose=$db->jdate($objp->date_cloture);
    @@ -116,6 +121,13 @@ class box_contracts extends ModeleBoxes
     
         				$thirdpartytmp->name = $objp->name;
         				$thirdpartytmp->id = $objp->socid;
    +    				$thirdpartytmp->email = $objp->email;
    +    				$thirdpartytmp->client = $objp->client;
    +    				$thirdpartytmp->fournisseur = $objp->fournisseur;
    +    				$thirdpartytmp->code_client = $objp->code_client;
    +    				$thirdpartytmp->code_fournisseur = $objp->code_fournisseur;
    +    				$thirdpartytmp->code_compta = $objp->code_compta;
    +    				$thirdpartytmp->code_compta_fournisseur = $objp->code_compta_fournisseur;
     
         				// fin_validite is no more on contract but on services
         				// if ($objp->fk_statut == 1 && $dateterm < ($now - $conf->contrat->cloture->warning_delay)) { $late = img_warning($langs->trans("Late")); }
    @@ -181,6 +193,5 @@ class box_contracts extends ModeleBoxes
         {
             return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
         }
    -
     }
     
    diff --git a/htdocs/core/boxes/box_external_rss.php b/htdocs/core/boxes/box_external_rss.php
    index 01eb4ac8893..679509774e2 100644
    --- a/htdocs/core/boxes/box_external_rss.php
    +++ b/htdocs/core/boxes/box_external_rss.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Eric Seigne          <erics@rycks.com>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -39,7 +39,11 @@ class box_external_rss extends ModeleBoxes
         var $boxlabel="BoxLastRssInfos";
         var $depends = array("externalrss");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $paramdef;	// Params of box definition (not user params)
     
         var $info_box_head = array();
    @@ -194,6 +198,5 @@ class box_external_rss extends ModeleBoxes
         {
             return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
         }
    -
     }
     
    diff --git a/htdocs/core/boxes/box_factures.php b/htdocs/core/boxes/box_factures.php
    index 9b457bab856..c76ea8d825b 100644
    --- a/htdocs/core/boxes/box_factures.php
    +++ b/htdocs/core/boxes/box_factures.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -35,7 +35,11 @@ class box_factures extends ModeleBoxes
     	var $boxlabel="BoxLastCustomerBills";
     	var $depends = array("facture");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -189,7 +193,6 @@ class box_factures extends ModeleBoxes
                         'text' => ($db->error().' sql='.$sql),
                     );
                 }
    -
             } else {
                 $this->info_box_contents[0][0] = array(
                     'td' => 'align="left" class="nohover opacitymedium"',
    @@ -210,5 +213,4 @@ class box_factures extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
    diff --git a/htdocs/core/boxes/box_factures_fourn.php b/htdocs/core/boxes/box_factures_fourn.php
    index 00df80f334b..617f041d7d2 100644
    --- a/htdocs/core/boxes/box_factures_fourn.php
    +++ b/htdocs/core/boxes/box_factures_fourn.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -36,7 +36,11 @@ class box_factures_fourn extends ModeleBoxes
     	var $boxlabel="BoxLastSupplierBills";
     	var $depends = array("facture","fournisseur");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -214,6 +218,5 @@ class box_factures_fourn extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_factures_fourn_imp.php b/htdocs/core/boxes/box_factures_fourn_imp.php
    index 1f894be3309..bd8fde32aab 100644
    --- a/htdocs/core/boxes/box_factures_fourn_imp.php
    +++ b/htdocs/core/boxes/box_factures_fourn_imp.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -35,7 +35,11 @@ class box_factures_fourn_imp extends ModeleBoxes
     	var $boxlabel = "BoxOldestUnpaidSupplierBills";
     	var $depends = array("facture","fournisseur");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -187,7 +191,6 @@ class box_factures_fourn_imp extends ModeleBoxes
                     'text' => $langs->trans("ReadPermissionNotAllowed")
                 );
             }
    -
         }
     
     	/**
    @@ -202,6 +205,5 @@ class box_factures_fourn_imp extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_factures_imp.php b/htdocs/core/boxes/box_factures_imp.php
    index 32fa7c823d7..10edddf4667 100644
    --- a/htdocs/core/boxes/box_factures_imp.php
    +++ b/htdocs/core/boxes/box_factures_imp.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -38,7 +38,11 @@ class box_factures_imp extends ModeleBoxes
     	var $boxlabel="BoxOldestUnpaidCustomerBills";
     	var $depends = array("facture");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -207,5 +211,4 @@ class box_factures_imp extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
    diff --git a/htdocs/core/boxes/box_ficheinter.php b/htdocs/core/boxes/box_ficheinter.php
    index ef7ba62c15c..76d1414f53f 100644
    --- a/htdocs/core/boxes/box_ficheinter.php
    +++ b/htdocs/core/boxes/box_ficheinter.php
    @@ -36,7 +36,11 @@ class box_ficheinter extends ModeleBoxes
     	var $boxlabel="BoxFicheInter";
     	var $depends = array("ficheinter");	// conf->contrat->enabled
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -166,6 +170,5 @@ class box_ficheinter extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_fournisseurs.php b/htdocs/core/boxes/box_fournisseurs.php
    index 32ffd1f5618..c66c7f674c2 100644
    --- a/htdocs/core/boxes/box_fournisseurs.php
    +++ b/htdocs/core/boxes/box_fournisseurs.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2006 Destailleur Laurent  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -36,7 +36,11 @@ class box_fournisseurs extends ModeleBoxes
         var $boxlabel="BoxLastSuppliers";
         var $depends = array("fournisseur");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
         var $info_box_head = array();
    @@ -146,7 +150,6 @@ class box_fournisseurs extends ModeleBoxes
                     'text' => $langs->trans("ReadPermissionNotAllowed")
                 );
             }
    -
         }
     
     	/**
    @@ -161,6 +164,5 @@ class box_fournisseurs extends ModeleBoxes
         {
             return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
         }
    -
     }
     
    diff --git a/htdocs/core/boxes/box_goodcustomers.php b/htdocs/core/boxes/box_goodcustomers.php
    index 8e4ec988144..138326d6c01 100644
    --- a/htdocs/core/boxes/box_goodcustomers.php
    +++ b/htdocs/core/boxes/box_goodcustomers.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      * Copyright (C) 2016      Charlie Benke        <charlie@patas-monkey.com>
      *
    @@ -38,7 +38,11 @@ class box_goodcustomers extends ModeleBoxes
     	var $boxlabel="BoxGoodCustomers";
     	var $depends = array("societe");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $enabled = 1;
     
     	var $info_box_head = array();
    @@ -155,7 +159,6 @@ class box_goodcustomers extends ModeleBoxes
     				'text' => $langs->trans("ReadPermissionNotAllowed")
     			);
     		}
    -
     	}
     
     	/**
    diff --git a/htdocs/core/boxes/box_graph_invoices_permonth.php b/htdocs/core/boxes/box_graph_invoices_permonth.php
    index abbdc7b7c71..fd0b4e593c0 100644
    --- a/htdocs/core/boxes/box_graph_invoices_permonth.php
    +++ b/htdocs/core/boxes/box_graph_invoices_permonth.php
    @@ -33,7 +33,10 @@ class box_graph_invoices_permonth extends ModeleBoxes
     	var $boxlabel="BoxCustomersInvoicesPerMonth";
     	var $depends = array("facture");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	var $info_box_head = array();
     	var $info_box_contents = array();
    @@ -255,7 +258,6 @@ class box_graph_invoices_permonth extends ModeleBoxes
     			{
     				$this->info_box_contents[0][0] = array('tr'=>'class="oddeven nohover"', 'td' => 'align="left" class="nohover"', 'maxlength'=>500, 'text' => $mesg);
     			}
    -
     		}
     		else {
     			$this->info_box_contents[0][0] = array(
    @@ -277,6 +279,5 @@ class box_graph_invoices_permonth extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php
    index 53d9ce08059..f13b19259c9 100644
    --- a/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php
    +++ b/htdocs/core/boxes/box_graph_invoices_supplier_permonth.php
    @@ -33,7 +33,10 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes
     	var $boxlabel="BoxSuppliersInvoicesPerMonth";
     	var $depends = array("fournisseur");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	var $info_box_head = array();
     	var $info_box_contents = array();
    @@ -254,7 +257,6 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes
         	        										'maxlength'=>500,
     	            										'text' => $mesg);
     			}
    -
     		}
     		else {
     			$this->info_box_contents[0][0] = array(
    @@ -276,6 +278,5 @@ class box_graph_invoices_supplier_permonth extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_graph_orders_permonth.php b/htdocs/core/boxes/box_graph_orders_permonth.php
    index 05a0ff498ec..fefa90c5fea 100644
    --- a/htdocs/core/boxes/box_graph_orders_permonth.php
    +++ b/htdocs/core/boxes/box_graph_orders_permonth.php
    @@ -33,7 +33,10 @@ class box_graph_orders_permonth extends ModeleBoxes
     	var $boxlabel="BoxCustomersOrdersPerMonth";
     	var $depends = array("commande");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	var $info_box_head = array();
     	var $info_box_contents = array();
    @@ -253,7 +256,6 @@ class box_graph_orders_permonth extends ModeleBoxes
         	        										'maxlength'=>500,
     	            										'text' => $mesg);
     			}
    -
     		}
     		else {
     			$this->info_box_contents[0][0] = array(
    @@ -275,6 +277,5 @@ class box_graph_orders_permonth extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php
    index e88ed46be72..e388d226fd2 100644
    --- a/htdocs/core/boxes/box_graph_orders_supplier_permonth.php
    +++ b/htdocs/core/boxes/box_graph_orders_supplier_permonth.php
    @@ -33,7 +33,10 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes
     	var $boxlabel="BoxSuppliersOrdersPerMonth";
     	var $depends = array("fournisseur");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	var $info_box_head = array();
     	var $info_box_contents = array();
    @@ -252,7 +255,6 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes
         	        										'maxlength'=>500,
     	            										'text' => $mesg);
     			}
    -
     		}
     		else {
     			$this->info_box_contents[0][0] = array(
    @@ -274,6 +276,5 @@ class box_graph_orders_supplier_permonth extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_graph_product_distribution.php b/htdocs/core/boxes/box_graph_product_distribution.php
    index 39a7a3984d2..9dc4c162e0f 100644
    --- a/htdocs/core/boxes/box_graph_product_distribution.php
    +++ b/htdocs/core/boxes/box_graph_product_distribution.php
    @@ -1,5 +1,6 @@
     <?php
     /* Copyright (C) 2013-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,7 +34,11 @@ class box_graph_product_distribution extends ModeleBoxes
     	var $boxlabel="BoxProductDistribution";
     	var $depends = array("product|service","facture|propal|commande");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -135,10 +140,10 @@ class box_graph_product_distribution extends ModeleBoxes
     
     		if (! empty($conf->facture->enabled) && ! empty($user->rights->facture->lire))
     		{
    -
     			// Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...)
     			if ($showinvoicenb)
     			{
    +                $langs->load("bills");
     				include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facturestats.class.php';
     
     				$showpointvalue = 1; $nocolor = 0;
    @@ -198,6 +203,7 @@ class box_graph_product_distribution extends ModeleBoxes
     			// Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...)
     			if ($showpropalnb)
     			{
    +                $langs->load("propal");
     				include_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propalestats.class.php';
     
     				$showpointvalue = 1; $nocolor = 0;
    @@ -254,11 +260,10 @@ class box_graph_product_distribution extends ModeleBoxes
     
     		if (! empty($conf->commande->enabled) && ! empty($user->rights->commande->lire))
     		{
    -			$langs->load("orders");
    -
     			// Build graphic number of object. $data = array(array('Lib',val1,val2,val3),...)
     			if ($showordernb)
     			{
    +			    $langs->load("orders");
     				include_once DOL_DOCUMENT_ROOT.'/commande/class/commandestats.class.php';
     
     				$showpointvalue = 1; $nocolor = 0;
    @@ -397,7 +402,6 @@ class box_graph_product_distribution extends ModeleBoxes
     				'text' => $mesg
     			);
     		}
    -
     	}
     
     	/**
    @@ -412,6 +416,5 @@ class box_graph_product_distribution extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_graph_propales_permonth.php b/htdocs/core/boxes/box_graph_propales_permonth.php
    index 4f05e186b43..f28b0ec2c99 100644
    --- a/htdocs/core/boxes/box_graph_propales_permonth.php
    +++ b/htdocs/core/boxes/box_graph_propales_permonth.php
    @@ -33,7 +33,10 @@ class box_graph_propales_permonth extends ModeleBoxes
     	var $boxlabel="BoxProposalsPerMonth";
     	var $depends = array("propal");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	var $info_box_head = array();
     	var $info_box_contents = array();
    @@ -256,7 +259,6 @@ class box_graph_propales_permonth extends ModeleBoxes
         	        										'maxlength'=>500,
     	            										'text' => $mesg);
     			}
    -
     		}
     		else {
     			$this->info_box_contents[0][0] = array(
    @@ -278,6 +280,5 @@ class box_graph_propales_permonth extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_last_modified_ticket.php b/htdocs/core/boxes/box_last_modified_ticket.php
    index a0613d58f3e..9ce7dd91605 100644
    --- a/htdocs/core/boxes/box_last_modified_ticket.php
    +++ b/htdocs/core/boxes/box_last_modified_ticket.php
    @@ -34,7 +34,12 @@ class box_last_modified_ticket extends ModeleBoxes
         public $boximg = "ticket";
         public $boxlabel;
         public $depends = array("ticket");
    +    
    +    /**
    +     * @var DoliDB Database handler.
    +     */
         public $db;
    +    
         public $param;
         public $info_box_head = array();
         public $info_box_contents = array();
    diff --git a/htdocs/core/boxes/box_last_ticket.php b/htdocs/core/boxes/box_last_ticket.php
    index 2dfa71af904..a824a707168 100644
    --- a/htdocs/core/boxes/box_last_ticket.php
    +++ b/htdocs/core/boxes/box_last_ticket.php
    @@ -34,7 +34,12 @@ class box_last_ticket extends ModeleBoxes
         public $boximg = "ticket";
         public $boxlabel;
         public $depends = array("ticket");
    +    
    +    /**
    +     * @var DoliDB Database handler.
    +     */
         public $db;
    +    
         public $param;
         public $info_box_head = array();
         public $info_box_contents = array();
    diff --git a/htdocs/core/boxes/box_lastlogin.php b/htdocs/core/boxes/box_lastlogin.php
    index 05bd3043b0a..c8149c6384b 100644
    --- a/htdocs/core/boxes/box_lastlogin.php
    +++ b/htdocs/core/boxes/box_lastlogin.php
    @@ -35,7 +35,11 @@ class box_lastlogin extends ModeleBoxes
         var $boxlabel='BoxLoginInformation';
         var $depends = array("user");
     
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
         var $param;
         var $enabled = 1;
     
    @@ -94,7 +98,6 @@ class box_lastlogin extends ModeleBoxes
                 'td' => '',
                 'text' => $tmp,
             );
    -        
         }
     
     
    diff --git a/htdocs/core/boxes/box_members.php b/htdocs/core/boxes/box_members.php
    index e5819f0f14c..b0f999f54f1 100644
    --- a/htdocs/core/boxes/box_members.php
    +++ b/htdocs/core/boxes/box_members.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -37,7 +37,11 @@ class box_members extends ModeleBoxes
     	var $boxlabel="BoxLastMembers";
     	var $depends = array("adherent");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     	var $enabled = 1;
     
    @@ -164,7 +168,6 @@ class box_members extends ModeleBoxes
                     'text' => $langs->trans("ReadPermissionNotAllowed")
                 );
             }
    -
         }
     
     	/**
    @@ -179,6 +182,5 @@ class box_members extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_produits.php b/htdocs/core/boxes/box_produits.php
    index 53449afceeb..24699f0e9f6 100644
    --- a/htdocs/core/boxes/box_produits.php
    +++ b/htdocs/core/boxes/box_produits.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -38,7 +38,11 @@ class box_produits extends ModeleBoxes
     	var $boxlabel="BoxLastProducts";
     	var $depends = array("produit");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -226,6 +230,5 @@ class box_produits extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_produits_alerte_stock.php b/htdocs/core/boxes/box_produits_alerte_stock.php
    index ee49e9e4534..896ceb93df6 100644
    --- a/htdocs/core/boxes/box_produits_alerte_stock.php
    +++ b/htdocs/core/boxes/box_produits_alerte_stock.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2005-2012 Maxime Kohlhaas      <mko@atm-consulting.fr>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      * Copyright (C) 2015      Juanjo Menent	    <jmenent@2byte.es>
    @@ -40,7 +40,11 @@ class box_produits_alerte_stock extends ModeleBoxes
     	var $boxlabel="BoxProductsAlertStock";
     	var $depends = array("produit");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $param;
     
     	var $info_box_head = array();
    @@ -238,6 +242,5 @@ class box_produits_alerte_stock extends ModeleBoxes
         {
             return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_project.php b/htdocs/core/boxes/box_project.php
    index 976cbf1766c..a48543a00f6 100644
    --- a/htdocs/core/boxes/box_project.php
    +++ b/htdocs/core/boxes/box_project.php
    @@ -23,7 +23,7 @@
      *  \ingroup    projet
      *  \brief      Module to show Projet activity of the current Year
      */
    -include_once(DOL_DOCUMENT_ROOT."/core/boxes/modules_boxes.php");
    +include_once DOL_DOCUMENT_ROOT."/core/boxes/modules_boxes.php";
     
     /**
      * Class to manage the box to show last projet
    @@ -34,7 +34,12 @@ class box_project extends ModeleBoxes
     	var $boximg="object_projectpub";
     	var $boxlabel;
     	//var $depends = array("projet");
    -	var $db;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
     	var $param;
     
     	var $info_box_head = array();
    @@ -49,8 +54,9 @@ class box_project extends ModeleBoxes
         function __construct($db,$param='')
         {
             global $user, $langs;
    -        $langs->load("boxes");
    -        $langs->load("projects");
    +
    +        // Load translation files required by the page
    +        $langs->loadLangs(array('boxes', 'projects'));
     
             $this->db = $db;
             $this->boxlabel="Projects";
    @@ -80,7 +86,7 @@ class box_project extends ModeleBoxes
     		// list the summary of the orders
     		if ($user->rights->projet->lire) {
     
    -		    include_once(DOL_DOCUMENT_ROOT.'/projet/class/project.class.php');
    +		    include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     		    $projectstatic = new Project($this->db);
     
     		    $socid=$user->societe_id;
    @@ -179,7 +185,6 @@ class box_project extends ModeleBoxes
                 'td' => '',
                 'text' => "&nbsp;",
             );
    -
     	}
     
     	/**
    diff --git a/htdocs/core/boxes/box_propales.php b/htdocs/core/boxes/box_propales.php
    index 8dad41f64a1..2b3426f21b8 100644
    --- a/htdocs/core/boxes/box_propales.php
    +++ b/htdocs/core/boxes/box_propales.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -37,7 +37,11 @@ class box_propales extends ModeleBoxes
         var $boxlabel="BoxLastProposals";
         var $depends = array("propal");	// conf->propal->enabled
     
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
         var $param;
     
         var $info_box_head = array();
    @@ -188,6 +192,5 @@ class box_propales extends ModeleBoxes
         {
             return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
         }
    -
     }
     
    diff --git a/htdocs/core/boxes/box_prospect.php b/htdocs/core/boxes/box_prospect.php
    index 3186d0d30ce..a4382f86048 100644
    --- a/htdocs/core/boxes/box_prospect.php
    +++ b/htdocs/core/boxes/box_prospect.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -39,7 +39,11 @@ class box_prospect extends ModeleBoxes
     	var $boxlabel="BoxLastProspects";
     	var $depends = array("societe");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $enabled = 1;
     
     	var $info_box_head = array();
    @@ -176,6 +180,5 @@ class box_prospect extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_services_contracts.php b/htdocs/core/boxes/box_services_contracts.php
    index 44a1ca020b5..6a74cd005ab 100644
    --- a/htdocs/core/boxes/box_services_contracts.php
    +++ b/htdocs/core/boxes/box_services_contracts.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2017 	   Nicolas Zabouri      <info@inovea-conseil.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -37,7 +37,11 @@ class box_services_contracts extends ModeleBoxes
     	var $boxlabel="BoxLastProductsInContract";
     	var $depends = array("service","contrat");
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
     	var $param;
     
     	var $info_box_head = array();
    @@ -84,8 +88,8 @@ class box_services_contracts extends ModeleBoxes
     		    $thirdpartytmp = new Societe($db);
     		    $productstatic = new Product($db);
     
    -			$sql = "SELECT s.nom as name, s.rowid as socid,";
    -			$sql.= " c.rowid, c.ref, c.statut as contract_status,";
    +			$sql = "SELECT s.nom as name, s.rowid as socid, s.email, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,";
    +			$sql.= " c.rowid, c.ref, c.statut as contract_status, c.ref_customer, c.ref_supplier,";
     			$sql.= " cd.rowid as cdid, cd.label, cd.description, cd.tms as datem, cd.statut, cd.product_type as type,";
     			$sql.= " p.rowid as product_id, p.ref as product_ref, p.label as plabel, p.fk_product_type as ptype, p.entity";
     			$sql.= " FROM (".MAIN_DB_PREFIX."societe as s";
    @@ -123,9 +127,18 @@ class box_services_contracts extends ModeleBoxes
                         $contractstatic->statut=$objp->contract_status;
     					$contractstatic->id=$objp->rowid;
     					$contractstatic->ref=$objp->ref;
    +					$contractstatic->ref_customer=$objp->ref_customer;
    +					$contractstatic->ref_supplier=$objp->ref_supplier;
     
     					$thirdpartytmp->name = $objp->name;
     					$thirdpartytmp->id = $objp->socid;
    +					$thirdpartytmp->email = $objp->email;
    +					$thirdpartytmp->client = $objp->client;
    +					$thirdpartytmp->fournisseur = $objp->fournisseur;
    +					$thirdpartytmp->code_client = $objp->code_client;
    +					$thirdpartytmp->code_fournisseur = $objp->code_fournisseur;
    +					$thirdpartytmp->code_compta = $objp->code_compta;
    +					$thirdpartytmp->code_compta_fournisseur = $objp->code_compta_fournisseur;
     
     					// Multilangs
     					if (! empty($conf->global->MAIN_MULTILANGS) && $objp->product_id > 0) // if option multilang is on
    @@ -218,7 +231,6 @@ class box_services_contracts extends ModeleBoxes
                     'text' => $langs->trans("ReadPermissionNotAllowed")
     			);
     		}
    -
     	}
     
     	/**
    @@ -233,6 +245,5 @@ class box_services_contracts extends ModeleBoxes
         {
     		return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
     	}
    -
     }
     
    diff --git a/htdocs/core/boxes/box_services_expired.php b/htdocs/core/boxes/box_services_expired.php
    index 72d4390a2e2..ed62e127816 100644
    --- a/htdocs/core/boxes/box_services_expired.php
    +++ b/htdocs/core/boxes/box_services_expired.php
    @@ -35,7 +35,11 @@ class box_services_expired extends ModeleBoxes
         var $boxlabel="BoxOldestExpiredServices";
         var $depends = array("contrat");	// conf->propal->enabled
     
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
         var $param;
     
         var $info_box_head = array();
    @@ -80,7 +84,7 @@ class box_services_expired extends ModeleBoxes
         	    // Select contracts with at least one expired service
     			$sql = "SELECT ";
         		$sql.= " c.rowid, c.ref, c.statut as fk_statut, c.date_contrat, c.ref_customer, c.ref_supplier,";
    -			$sql.= " s.nom as name, s.rowid as socid,";
    +			$sql.= " s.nom as name, s.rowid as socid, s.email, s.client, s.fournisseur, s.code_client, s.code_fournisseur, s.code_compta, s.code_compta_fournisseur,";
     			$sql.= " MIN(cd.date_fin_validite) as date_line, COUNT(cd.rowid) as nb_services";
         		$sql.= " FROM ".MAIN_DB_PREFIX."contrat as c, ".MAIN_DB_PREFIX."societe s, ".MAIN_DB_PREFIX."contratdet as cd";
                 if (!$user->rights->societe->client->voir && !$user->societe_id) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    @@ -109,8 +113,15 @@ class box_services_expired extends ModeleBoxes
     
         				$objp = $db->fetch_object($resql);
     
    -    				$thirdpartytmp->id = $objp->socid;
         				$thirdpartytmp->name = $objp->name;
    +    				$thirdpartytmp->id = $objp->socid;
    +    				$thirdpartytmp->email = $objp->email;
    +    				$thirdpartytmp->client = $objp->client;
    +    				$thirdpartytmp->fournisseur = $objp->fournisseur;
    +    				$thirdpartytmp->code_client = $objp->code_client;
    +    				$thirdpartytmp->code_fournisseur = $objp->code_fournisseur;
    +    				$thirdpartytmp->code_compta = $objp->code_compta;
    +    				$thirdpartytmp->code_compta_fournisseur = $objp->code_compta_fournisseur;
     
         				$contract->id = $objp->rowid;
         				$contract->ref = $objp->ref;
    @@ -156,8 +167,6 @@ class box_services_expired extends ModeleBoxes
                                                             'maxlength'=>500,
                                                             'text' => ($db->error().' sql='.$sql));
         		}
    -
    -
         	}
         	else
         	{
    @@ -180,6 +189,5 @@ class box_services_expired extends ModeleBoxes
         {
             return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
         }
    -
    - }
    +}
     
    diff --git a/htdocs/core/boxes/box_supplier_orders.php b/htdocs/core/boxes/box_supplier_orders.php
    index 895f411e3d6..4621950843e 100644
    --- a/htdocs/core/boxes/box_supplier_orders.php
    +++ b/htdocs/core/boxes/box_supplier_orders.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2006 Destailleur Laurent  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Raphaël Doursenaud   <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2015      Frederic France      <frederic.france@free.fr>
      *
    @@ -36,7 +36,11 @@ class box_supplier_orders extends ModeleBoxes
         var $boxlabel="BoxLatestSupplierOrders";
         var $depends = array("fournisseur");
     
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
         var $param;
         var $info_box_head = array();
         var $info_box_contents = array();
    @@ -184,6 +188,5 @@ class box_supplier_orders extends ModeleBoxes
         {
             return parent::showBox($this->info_box_head, $this->info_box_contents, $nooutput);
         }
    -
     }
     
    diff --git a/htdocs/core/boxes/box_task.php b/htdocs/core/boxes/box_task.php
    index 3a665243073..b85ed0f4d8b 100644
    --- a/htdocs/core/boxes/box_task.php
    +++ b/htdocs/core/boxes/box_task.php
    @@ -22,8 +22,8 @@
      *  \brief      Module to Task activity of the current year
      */
     
    -include_once(DOL_DOCUMENT_ROOT."/core/boxes/modules_boxes.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php");
    +include_once DOL_DOCUMENT_ROOT."/core/boxes/modules_boxes.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
     
     
     /**
    @@ -31,16 +31,21 @@ require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php");
      */
     class box_task extends ModeleBoxes
     {
    -    var $boxcode="projet";
    -    var $boximg="object_projecttask";
    -    var $boxlabel;
    -    //var $depends = array("projet");
    -    var $db;
    -    var $param;
    -    var $enabled = 0;		// Disabled because bugged.
    +    public $boxcode="projet";
    +    public $boximg="object_projecttask";
    +    public $boxlabel;
    +    //public $depends = array("projet");
     
    -    var $info_box_head = array();
    -    var $info_box_contents = array();
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    public $param;
    +    public $enabled = 0;		// Disabled because bugged.
    +
    +    public $info_box_head = array();
    +    public $info_box_contents = array();
     
     
         /**
    @@ -52,8 +57,10 @@ class box_task extends ModeleBoxes
         function __construct($db,$param='')
         {
             global $user, $langs;
    -        $langs->load("boxes");
    -        $langs->load("projects");
    +
    +        // Load translation files required by the page
    +        $langs->loadLangs(array('boxes', 'projects'));
    +
             $this->boxlabel="Tasks";
             $this->db = $db;
     
    @@ -75,7 +82,7 @@ class box_task extends ModeleBoxes
     		$totalMnt = 0;
     		$totalnb = 0;
     		$totalDuree=0;
    -		include_once(DOL_DOCUMENT_ROOT."/projet/class/task.class.php");
    +		include_once DOL_DOCUMENT_ROOT."/projet/class/task.class.php";
     		$taskstatic=new Task($db);
     
     
    @@ -126,13 +133,12 @@ class box_task extends ModeleBoxes
     		}
     
     
    -		// Add the sum à the bottom of the boxes
    +		// Add the sum at the bottom of the boxes
     		$this->info_box_contents[$i][] = array('tr' => 'class="liste_total"', 'td' => '', 'text' => $langs->trans("Total")."&nbsp;".$textHead);
     		$this->info_box_contents[$i][] = array('td' => 'align="right" ', 'text' => number_format($totalnb, 0, ',', ' ')."&nbsp;".$langs->trans("Tasks"));
     		$this->info_box_contents[$i][] = array('td' => 'align="right" ', 'text' => ConvertSecondToTime($totalplannedtot,'all',25200,5));
     		$this->info_box_contents[$i][] = array('td' => 'align="right" ', 'text' => ConvertSecondToTime($totaldurationtot,'all',25200,5));
     		$this->info_box_contents[$i][] = array('td' => '', 'text' => "");
    -
     	}
     
     	/**
    diff --git a/htdocs/core/boxes/modules_boxes.php b/htdocs/core/boxes/modules_boxes.php
    index 61af58a4b8b..9ae35403ec7 100644
    --- a/htdocs/core/boxes/modules_boxes.php
    +++ b/htdocs/core/boxes/modules_boxes.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2013  Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2014       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2015       Frederic France     <frederic.france@free.fr>
      *
    @@ -31,7 +31,7 @@
      *
      * Boxes parent class
      */
    -class ModeleBoxes    // Can't be abtract as it is instantiated to build "empty" boxes
    +class ModeleBoxes // Can't be abtract as it is instantiated to build "empty" boxes
     {
     	/**
     	 * @var DoliDB Database handler
    @@ -213,7 +213,6 @@ class ModeleBoxes    // Can't be abtract as it is instantiated to build "empty"
             require_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php';
     
     		$MAXLENGTHBOX=60;   // Mettre 0 pour pas de limite
    -		$var = false;
     
             $cachetime = 900;   // 900 : 15mn
             $cachedir = DOL_DATA_ROOT.'/boxes/temp';
    @@ -503,8 +502,6 @@ class ModeleBoxes    // Can't be abtract as it is instantiated to build "empty"
     		}
     		return $widget;
     	}
    -
    -
     }
     
     
    diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php
    index 3db9fc941c8..015abf0d89d 100644
    --- a/htdocs/core/class/CMailFile.class.php
    +++ b/htdocs/core/class/CMailFile.class.php
    @@ -5,7 +5,7 @@
      * Copyright (C) 2000-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Jean-Louis Bergamo   <jlb@j1b.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -59,7 +59,11 @@ class CMailFile
     
     	var $eol;
     	var $eol2;
    -	var $error='';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	var $smtps;			// Contains SMTPs object (if this method is used)
     	var $phpmailer;		// Contains PHPMailer object (if this method is used)
    @@ -113,7 +117,7 @@ class CMailFile
     	 *  @param  string  $sendcontext      	 'standard', 'emailing', ... (used to define with sending mode and parameters to use)
     	 *  @param	string	$replyto			 Reply-to email (will be set to same value than From by default if not provided)
     	 */
    -	function __construct($subject,$to,$from,$msg,$filename_list=array(),$mimetype_list=array(),$mimefilename_list=array(),$addr_cc="",$addr_bcc="",$deliveryreceipt=0,$msgishtml=0,$errors_to='',$css='',$trackid='',$moreinheader='',$sendcontext='standard',$replyto='')
    +	function __construct($subject, $to, $from, $msg, $filename_list=array(), $mimetype_list=array(), $mimefilename_list=array(), $addr_cc="", $addr_bcc="", $deliveryreceipt=0, $msgishtml=0, $errors_to='', $css='', $trackid='', $moreinheader='', $sendcontext='standard', $replyto='')
     	{
     		global $conf, $dolibarr_main_data_root;
     
    @@ -377,7 +381,7 @@ class CMailFile
                 //$this->message = new Swift_SignedMessage();
                 // Adding a trackid header to a message
     			$headers = $this->message->getHeaders();
    -			$headers->addTextHeader('X-Dolibarr-TRACKID', $trackid);
    +			$headers->addTextHeader('X-Dolibarr-TRACKID', $trackid . '@' . $host);
     			$headerID = time() . '.swiftmailer-dolibarr-' . $trackid . '@' . $host;
     			$msgid = $headers->get('Message-ID');
     			$msgid->setId($headerID);
    @@ -479,7 +483,6 @@ class CMailFile
     			// --------------------------------------
     			$this->error = 'Bad value for sendmode';
     		}
    -
     	}
     
     
    @@ -566,7 +569,8 @@ class CMailFile
     				$keyforstarttls  ='MAIN_MAIL_EMAIL_STARTTLS_EMAILING';
     			}
     
    -			if(!empty($conf->global->MAIN_MAIL_FORCE_SENDTO)) {
    +			if (!empty($conf->global->MAIN_MAIL_FORCE_SENDTO))
    +			{
     				$this->addr_to = $conf->global->MAIN_MAIL_FORCE_SENDTO;
     				$this->addr_cc = '';
     				$this->addr_bcc = '';
    @@ -731,7 +735,11 @@ class CMailFile
     					if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->dump_mail();
     
     					$result=$this->smtps->getErrors();
    -					if (empty($this->error) && empty($result)) $res=true;
    +					if (empty($this->error) && empty($result))
    +					{
    +						dol_syslog("CMailFile::sendfile: mail end success", LOG_DEBUG);
    +						$res=true;
    +					}
     					else
     					{
     						if (empty($this->error)) $this->error=$result;
    @@ -794,6 +802,10 @@ class CMailFile
     					dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
     					$res=false;
     				}
    +				else
    +				{
    +					dol_syslog("CMailFile::sendfile: mail end success", LOG_DEBUG);
    +				}
     			}
     			else
     			{
    @@ -836,6 +848,7 @@ class CMailFile
     		return '=?'.$conf->file->character_set_client.'?B?'.base64_encode($stringtoencode).'?=';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Read a file on disk and return encoded content for emails (mode = 'mail')
     	 *
    @@ -844,6 +857,7 @@ class CMailFile
     	 */
     	function _encode_file($sourcefile)
     	{
    +        // phpcs:enable
     		$newsourcefile=dol_osencode($sourcefile);
     
     		if (is_readable($newsourcefile))
    @@ -861,6 +875,7 @@ class CMailFile
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Write content of a SMTP request into a dump file (mode = all)
     	 *  Used for debugging.
    @@ -870,6 +885,7 @@ class CMailFile
     	 */
     	function dump_mail()
     	{
    +        // phpcs:enable
     		global $conf,$dolibarr_main_data_root;
     
     		if (@is_writeable($dolibarr_main_data_root))	// Avoid fatal error on fopen with open_basedir
    @@ -954,6 +970,7 @@ class CMailFile
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Create SMTP headers (mode = 'mail')
     	 *
    @@ -961,6 +978,7 @@ class CMailFile
     	 */
     	function write_smtpheaders()
     	{
    +        // phpcs:enable
     		global $conf;
     		$out = "";
     
    @@ -993,9 +1011,9 @@ class CMailFile
     		if ($trackid)
     		{
     			// References is kept in response and Message-ID is returned into In-Reply-To:
    -			$out.= 'Message-ID: <' . time() . '.phpmail-dolibarr-'.$trackid.'@' . $host . ">" . $this->eol2;	// Uppercase seems replaced by phpmail
    -			$out.= 'References: <' . time() . '.phpmail-dolibarr-'.$trackid.'@' . $host . ">" . $this->eol2;
    -			$out.= 'X-Dolibarr-TRACKID: '.$trackid. $this->eol2;
    +			$out.= 'Message-ID: <' . time() . '.phpmail-dolibarr-'. $trackid . '@' . $host . ">" . $this->eol2;	// Uppercase seems replaced by phpmail
    +			$out.= 'References: <' . time() . '.phpmail-dolibarr-'. $trackid . '@' . $host . ">" . $this->eol2;
    +			$out.= 'X-Dolibarr-TRACKID: ' . $trackid . '@' . $host. $this->eol2;
     		}
     		else
     		{
    @@ -1016,6 +1034,7 @@ class CMailFile
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Create header MIME (mode = 'mail')
     	 *
    @@ -1025,10 +1044,11 @@ class CMailFile
     	 */
     	function write_mimeheaders($filename_list, $mimefilename_list)
     	{
    +        // phpcs:enable
     		$mimedone=0;
     		$out = "";
     
    -		if ($filename_list)
    +		if (is_array($filename_list))
     		{
     			$filename_list_size=count($filename_list);
     			for($i=0;$i < $filename_list_size;$i++)
    @@ -1045,6 +1065,7 @@ class CMailFile
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return email content (mode = 'mail')
     	 *
    @@ -1053,6 +1074,7 @@ class CMailFile
     	 */
     	function write_body($msgtext)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$out='';
    @@ -1145,6 +1167,7 @@ class CMailFile
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Attach file to email (mode = 'mail')
     	 *
    @@ -1155,6 +1178,7 @@ class CMailFile
     	 */
     	function write_files($filename_list,$mimetype_list,$mimefilename_list)
     	{
    +        // phpcs:enable
     		$out = '';
     
     		$filename_list_size=count($filename_list);
    @@ -1192,17 +1216,19 @@ class CMailFile
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Attach an image to email (mode = 'mail')
     	 *
    -	 * @param	array	$images_list	Tableau
    +	 * @param	array	$images_list	Array of array image
     	 * @return	string					Chaine images encodees
     	 */
     	function write_images($images_list)
     	{
    +        // phpcs:enable
     		$out = '';
     
    -		if ($images_list)
    +		if (is_array($images_list))
     		{
     			foreach ($images_list as $img)
     			{
    @@ -1223,6 +1249,7 @@ class CMailFile
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Try to create a socket connection
     	 *
    @@ -1232,6 +1259,7 @@ class CMailFile
     	 */
     	function check_server_port($host,$port)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$_retVal=0;
    @@ -1286,6 +1314,7 @@ class CMailFile
     		return $_retVal;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * This function has been modified as provided by SirSir to allow multiline responses when
     	 * using SMTP Extensions.
    @@ -1296,6 +1325,7 @@ class CMailFile
     	 */
     	function server_parse($socket, $response)
     	{
    +        // phpcs:enable
     		$_retVal = true;	// Indicates if Object was created or not
     		$server_response = '';
     
    @@ -1328,10 +1358,10 @@ class CMailFile
     		// Build the list of image extensions
     		$extensions = array_keys($this->image_types);
     
    -
    +		$matches = array();
     		preg_match_all('/(?:"|\')([^"\']+\.('.implode('|', $extensions).'))(?:"|\')/Ui', $this->html, $matches);  // If "xxx.ext" or 'xxx.ext' found
     
    -		if ($matches)
    +		if (! empty($matches))
     		{
     			$i=0;
     			foreach ($matches[1] as $full)
    @@ -1520,4 +1550,3 @@ class CMailFile
     		return $ret;
     	}
     }
    -
    diff --git a/htdocs/core/class/CSMSFile.class.php b/htdocs/core/class/CSMSFile.class.php
    index 0a149feabf4..86ffed48551 100644
    --- a/htdocs/core/class/CSMSFile.class.php
    +++ b/htdocs/core/class/CSMSFile.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2000-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Jean-Louis Bergamo   <jlb@j1b.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -34,15 +34,18 @@
      */
     class CSMSFile
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    -	var $addr_from;
    -	var $addr_to;
    -	var $deferred;
    -	var $priority;
    -	var $class;
    -	var $message;
    -	var $nostop;
    +	public $addr_from;
    +	public $addr_to;
    +	public $deferred;
    +	public $priority;
    +	public $class;
    +	public $message;
    +	public $nostop;
     
     
     	/**
    @@ -192,6 +195,7 @@ class CSMSFile
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Write content of a SendSms request into a dump file (mode = all)
     	 *  Used for debugging.
    @@ -200,6 +204,7 @@ class CSMSFile
     	 */
     	function dump_sms()
     	{
    +        // phpcs:enable
     		global $conf,$dolibarr_main_data_root;
     
     		if (@is_writeable($dolibarr_main_data_root))	// Avoid fatal error on fopen with open_basedir
    @@ -221,6 +226,7 @@ class CSMSFile
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Write content of a SendSms result into a dump file (mode = all)
          *  Used for debugging.
    @@ -230,6 +236,7 @@ class CSMSFile
          */
         function dump_sms_result($result)
         {
    +        // phpcs:enable
             global $conf,$dolibarr_main_data_root;
     
             if (@is_writeable($dolibarr_main_data_root))    // Avoid fatal error on fopen with open_basedir
    @@ -244,6 +251,4 @@ class CSMSFile
                 @chmod($outputfile, octdec($conf->global->MAIN_UMASK));
             }
         }
    -
     }
    -
    diff --git a/htdocs/core/class/antivir.class.php b/htdocs/core/class/antivir.class.php
    index 1c3ea5a07b6..1b45d490d9d 100644
    --- a/htdocs/core/class/antivir.class.php
    +++ b/htdocs/core/class/antivir.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2000-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Jean-Louis Bergamo   <jlb@j1b.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -26,15 +26,29 @@
      */
     
     /**
    - *      \class      AntiVir
    - *      \brief      Class to scan for virus
    + *      Class to scan for virus
      */
     class AntiVir
     {
    -	var $error;
    -	var $errors;
    -	var $output;
    -	var $db;
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
    +	/**
    +	 * @var string Used to return message
    +	 */
    +	public $output;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	/**
     	 *  Constructor
    @@ -46,6 +60,7 @@ class AntiVir
     		$this->db=$db;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Scan a file with antivirus.
     	 *  This function runs the command defined in setup. This antivirus command must return 0 if OK.
    @@ -56,6 +71,7 @@ class AntiVir
     	 */
     	function dol_avscan_file($file)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$return = 0;
    @@ -168,6 +184,4 @@ class AntiVir
     
     		return $ret;
     	}
    -
     }
    -
    diff --git a/htdocs/core/class/canvas.class.php b/htdocs/core/class/canvas.class.php
    index 6851c124743..4694a5e4652 100644
    --- a/htdocs/core/class/canvas.class.php
    +++ b/htdocs/core/class/canvas.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2018	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011 		Laurent Destailleur	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -28,19 +28,30 @@
      */
     class Canvas
     {
    -	var $db;
    -	var $error;
    -	var $errors=array();
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -	var $actiontype;
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    -    var $dirmodule;			// Module directory
    -    var $targetmodule;      // Module concerned by canvas (ex: thirdparty, contact, ...)
    -    var $canvas;            // Name of canvas (ex: company, individual, product, service, ...)
    -    var $card;              // Tab (sub-canvas)
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
    -    var $template_dir;			// Initialized by getCanvas with templates directory
    -    var $control;           	// Initialized by getCanvas with controller instance
    +	public $actiontype;
    +
    +    public $dirmodule;			// Module directory
    +    public $targetmodule;      // Module concerned by canvas (ex: thirdparty, contact, ...)
    +    public $canvas;            // Name of canvas (ex: company, individual, product, service, ...)
    +    public $card;              // Tab (sub-canvas)
    +
    +    public $template_dir;		// Initialized by getCanvas with templates directory
    +    public $control;           	// Initialized by getCanvas with controller instance
     
     
        /**
    @@ -122,6 +133,7 @@ class Canvas
             //print ' => template_dir='.$this->template_dir.'<br>';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 * 	Shared method for canvas to assign values for templates
     	 *
    @@ -132,6 +144,7 @@ class Canvas
     	 */
     	function assign_values(&$action='view', $id=0, $ref='')
     	{
    +        // phpcs:enable
     		if (method_exists($this->control,'assign_values')) $this->control->assign_values($action, $id, $ref);
     	}
     
    @@ -145,10 +158,11 @@ class Canvas
         {
             if (empty($this->template_dir)) return 0;
     
    -        if (file_exists($this->template_dir.($this->card?$this->card.'_':'').$this->_cleanaction($action).'.tpl.php')) return 1;
    +        if (file_exists($this->template_dir.(!empty($this->card)?$this->card.'_':'').$this->_cleanaction($action).'.tpl.php')) return 1;
             else return 0;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Display a canvas page. This will include the template for output.
     	 *	Variables used by templates may have been defined or loaded before into the assign_values function.
    @@ -158,10 +172,11 @@ class Canvas
     	 */
     	function display_canvas($action)
     	{
    +        // phpcs:enable
     		global $db, $conf, $langs, $user, $canvas;
     		global $form, $formfile;
     
    -		include $this->template_dir.($this->card?$this->card.'_':'').$this->_cleanaction($action).'.tpl.php';        // Include native PHP template
    +		include $this->template_dir.(!empty($this->card)?$this->card.'_':'').$this->_cleanaction($action).'.tpl.php';        // Include native PHP template
     	}
     
     
    @@ -197,5 +212,4 @@ class Canvas
     			return $ret;
     		}
     	}
    -
     }
    diff --git a/htdocs/core/class/ccountry.class.php b/htdocs/core/class/ccountry.class.php
    index 7964510c91c..f07916a7511 100644
    --- a/htdocs/core/class/ccountry.class.php
    +++ b/htdocs/core/class/ccountry.class.php
    @@ -32,17 +32,38 @@
      */
     class Ccountry // extends CommonObject
     {
    -	var $db;							//!< To store db handler
    -	var $error;							//!< To return error code (or message)
    -	var $errors=array();				//!< To return several error codes (or messages)
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
     	//var $element='ccountry';			//!< Id that identify managed objects
     	//var $table_element='ccountry';	//!< Name of table without prefix where object is stored
     
    -    var $id;
    -	var $code;
    -	var $code_iso;
    -	var $label;
    -	var $active;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	public $code;
    +	public $code_iso;
    +
    +	/**
    +     * @var string Countries label
    +     */
    +    public $label;
    +
    +	public $active;
     
     
     
    @@ -55,7 +76,6 @@ class Ccountry // extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -312,5 +332,4 @@ class Ccountry // extends CommonObject
     			return 1;
     		}
     	}
    -
     }
    diff --git a/htdocs/core/class/comment.class.php b/htdocs/core/class/comment.class.php
    index 9aeebd575bf..b731eb77169 100644
    --- a/htdocs/core/class/comment.class.php
    +++ b/htdocs/core/class/comment.class.php
    @@ -1,23 +1,60 @@
     <?php
    +/*
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
    +
     /**
      * 	Class to manage comment
      */
     class Comment extends CommonObject
     {
    -	public $element='comment';		//!< Id that identify managed objects
    -	public $table_element='comment';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='comment';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='comment';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
    +	public $fk_element ='';
     
    -	public $fk_element;
     	public $element_type;
     
    +	/**
    +	 * @var string description
    +	 */
     	public $description;
     
     	public $tms;
     
     	public $datec;
     
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_author;
     
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
     
     	public $import_key;
    @@ -323,9 +360,8 @@ class Comment extends CommonObject
     				$error++; $this->errors[]="Error ".$this->db->lasterror();
     				return -1;
     			}
    -
     		}
     
     		return count($this->comments);
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/core/class/commondocgenerator.class.php b/htdocs/core/class/commondocgenerator.class.php
    index 18e2817f040..d429d96ccac 100644
    --- a/htdocs/core/class/commondocgenerator.class.php
    +++ b/htdocs/core/class/commondocgenerator.class.php
    @@ -1,10 +1,11 @@
     <?php
    -/* Copyright (C) 2003-2005	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2010	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2004		Eric Seigne		<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    - * Copyright (C) 2015       	Marcos García           <marcosgdf@gmail.com>
    - * Copyright (C) 2016       	Charlie Benke           <charlie@patas-monkey.com>
    +/* Copyright (C) 2003-2005	Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2010	Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2004		Eric Seigne             <eric.seigne@ryxeo.com>
    + * Copyright (C) 2005-2012	Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2015       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2016       Charlie Benke           <charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,7 +34,19 @@
      */
     abstract class CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +    /**
    +     * @var string[]    Array of error strings
    +     */
    +    public $errors = array();
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
     	protected $db;
     
     
    @@ -42,11 +55,13 @@ abstract class CommonDocGenerator
     	 *
     	 *  @param		DoliDB		$db      Database handler
     	*/
    -	public function __construct($db) {
    -		$this->db = $db;
    -	}
    +    public function __construct($db)
    +    {
    +        $this->db = $db;
    +    }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Define array with couple subtitution key => subtitution value
          *
    @@ -56,6 +71,7 @@ abstract class CommonDocGenerator
          */
         function get_substitutionarray_user($user,$outputlangs)
         {
    +        // phpcs:enable
             global $conf;
     
             $logotouse=$conf->user->dir_output.'/'.get_exdir($user->id, 2, 0, 1, $user, 'user').'/'.$user->photo;
    @@ -83,6 +99,7 @@ abstract class CommonDocGenerator
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Define array with couple subtitution key => subtitution value
          *
    @@ -92,6 +109,7 @@ abstract class CommonDocGenerator
          */
         function get_substitutionarray_mysoc($mysoc,$outputlangs)
         {
    +        // phpcs:enable
             global $conf;
     
             if (empty($mysoc->forme_juridique) && ! empty($mysoc->forme_juridique_code))
    @@ -141,6 +159,7 @@ abstract class CommonDocGenerator
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Define array with couple subtitution key => subtitution value
          *
    @@ -150,6 +169,7 @@ abstract class CommonDocGenerator
          */
         function get_substitutionarray_thirdparty($object,$outputlangs)
         {
    +        // phpcs:enable
             global $conf;
     
             if (empty($object->country) && ! empty($object->country_code))
    @@ -220,6 +240,7 @@ abstract class CommonDocGenerator
     		return $array_thirdparty;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Define array with couple subtitution key => subtitution value
     	 *
    @@ -228,7 +249,9 @@ abstract class CommonDocGenerator
     	 * @param   array		$array_key	    Name of the key for return array
     	 * @return	array 						Array of substitution key->code
     	 */
    -	function get_substitutionarray_contact($object, $outputlangs, $array_key = 'object') {
    +    function get_substitutionarray_contact($object, $outputlangs, $array_key = 'object')
    +    {
    +        // phpcs:enable
     		global $conf;
     
     		if(empty($object->country) && ! empty($object->country_code))
    @@ -291,6 +314,7 @@ abstract class CommonDocGenerator
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Define array with couple subtitution key => subtitution value
          *
    @@ -299,6 +323,7 @@ abstract class CommonDocGenerator
          */
         function get_substitutionarray_other($outputlangs)
         {
    +        // phpcs:enable
         	global $conf;
     
         	$now=dol_now('gmt');	// gmt
    @@ -327,6 +352,7 @@ abstract class CommonDocGenerator
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Define array with couple substitution key => substitution value
     	 *
    @@ -337,6 +363,7 @@ abstract class CommonDocGenerator
     	 */
     	function get_substitutionarray_object($object,$outputlangs,$array_key='object')
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$sumpayed=$sumdeposit=$sumcreditnote='';
    @@ -473,20 +500,23 @@ abstract class CommonDocGenerator
     		return $resarray;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    -	 *	@param  array			$line				Array of lines
    +	 *	@param  Object			$line				Object line
     	 *	@param  Translate		$outputlangs        Lang object to use for output
     	 *  @return	array								Return a substitution array
     	 */
    -	function get_substitutionarray_lines($line,$outputlangs)
    +	function get_substitutionarray_lines($line, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$resarray= array(
     			'line_fulldesc'=>doc_getlinedesc($line,$outputlangs),
     			'line_product_ref'=>$line->product_ref,
    +			'line_product_ref_fourn'=>$line->ref_fourn, // for supplier doc lines
     			'line_product_label'=>$line->product_label,
     			'line_product_type'=>$line->product_type,
     			'line_desc'=>$line->desc,
    @@ -543,12 +573,13 @@ abstract class CommonDocGenerator
     			$tmpproduct = new Product($this->db);
     			$result = $tmpproduct->fetch($line->fk_product);
     			foreach($tmpproduct->array_options as $key=>$label)
    -				$resarray["line_".$key] = $label;
    +				$resarray["line_product_".$key] = $label;
     		}
     
     		return $resarray;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Define array with couple substitution key => substitution value
          *
    @@ -559,6 +590,7 @@ abstract class CommonDocGenerator
          */
         function get_substitutionarray_shipment($object,$outputlangs,$array_key='object')
         {
    +        // phpcs:enable
         	global $conf;
     		dol_include_once('/core/lib/product.lib.php');
     		$object->list_delivery_methods($object->shipping_method_id);
    @@ -610,8 +642,9 @@ abstract class CommonDocGenerator
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     *	Define array with couple substitution key => substitution value
    +     *  Define array with couple substitution key => substitution value
          *
          *	@param  ExpeditionLigne	$line				Object line
          *	@param  Translate		$outputlangs        Lang object to use for output
    @@ -619,8 +652,9 @@ abstract class CommonDocGenerator
          */
         function get_substitutionarray_shipment_lines($line, $outputlangs)
         {
    -    	global $conf;
    -		dol_include_once('/core/lib/product.lib.php');
    +        // phpcs:enable
    +        global $conf;
    +        dol_include_once('/core/lib/product.lib.php');
     
             $resarray = array(
     	    	'line_fulldesc'=>doc_getlinedesc($line,$outputlangs),
    @@ -642,7 +676,7 @@ abstract class CommonDocGenerator
     	    	'line_volume'=>empty($line->volume) ? '' : $line->volume*$line->qty_shipped.' '.measuring_units_string($line->volume_units, 'volume'),
         	);
     
    -		// Retrieve extrafields
    +        // Retrieve extrafields
             $extrafieldkey = $line->element;
             $array_key = "line";
             require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
    @@ -656,6 +690,7 @@ abstract class CommonDocGenerator
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Define array with couple subtitution key => subtitution value
          *
    @@ -664,15 +699,17 @@ abstract class CommonDocGenerator
          * @param   boolean		$recursive    	Want to fetch child array or child object
          * @return	array						Array of substitution key->code
          */
    -    function get_substitutionarray_each_var_object(&$object,$outputlangs,$recursive=true) {
    +    function get_substitutionarray_each_var_object(&$object,$outputlangs,$recursive=true)
    +    {
    +        // phpcs:enable
             $array_other = array();
    -        if(!empty($object)) {
    +        if (!empty($object)) {
                 foreach($object as $key => $value) {
    -                if(!empty($value)) {
    -                    if(!is_array($value) && !is_object($value)) {
    +                if (!empty($value)) {
    +                    if (!is_array($value) && !is_object($value)) {
                             $array_other['object_'.$key] = $value;
                         }
    -                    if(is_array($value) && $recursive){
    +                    if (is_array($value) && $recursive) {
                             $array_other['object_'.$key] = $this->get_substitutionarray_each_var_object($value,$outputlangs,false);
                         }
                     }
    @@ -682,6 +719,7 @@ abstract class CommonDocGenerator
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Fill array with couple extrafield key => extrafield value
          *
    @@ -692,8 +730,9 @@ abstract class CommonDocGenerator
          *  @param  Translate		$outputlangs        Lang object to use for output
          *	@return	array								Substitution array
          */
    -	function fill_substitutionarray_with_extrafields($object,$array_to_fill,$extrafields,$array_key,$outputlangs)
    +    function fill_substitutionarray_with_extrafields($object,$array_to_fill,$extrafields,$array_key,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     		foreach($extrafields->attribute_label as $key=>$label)
     		{
    @@ -735,11 +774,34 @@ abstract class CommonDocGenerator
     				$array_to_fill=array_merge($array_to_fill,array($array_key.'_options_'.$key.'_locale' => $object->array_options['options_'.$key.'_locale']));
     				$array_to_fill=array_merge($array_to_fill,array($array_key.'_options_'.$key.'_rfc' => $object->array_options['options_'.$key.'_rfc']));
     			}
    +			else if($extrafields->attribute_type[$key] == 'link')
    +			{
    +				$id = $object->array_options['options_'.$key];
    +				if ($id != "")
    +				{
    +					$param = $extrafields->attribute_param[$key];
    +					$param_list=array_keys($param['options']);              // $param_list='ObjectName:classPath'
    +					$InfoFieldList = explode(":", $param_list[0]);
    +					$classname=$InfoFieldList[0];
    +					$classpath=$InfoFieldList[1];
    +					if (! empty($classpath))
    +					{
    +						dol_include_once($InfoFieldList[1]);
    +						if ($classname && class_exists($classname))
    +						{
    +							$tmpobject = new $classname($this->db);
    +							$tmpobject->fetch($id);
    +							// completely replace the id with the linked object name
    +							$object->array_options['options_'.$key] = $tmpobject->name;
    +						}
    +					}
    +				}
    +			}
    +
     			$array_to_fill=array_merge($array_to_fill,array($array_key.'_options_'.$key => $object->array_options['options_'.$key]));
     		}
     
     		return $array_to_fill;
    -
     	}
     
     
    @@ -757,10 +819,232 @@ abstract class CommonDocGenerator
     	 */
         function printRect($pdf, $x, $y, $l, $h, $hidetop=0, $hidebottom=0)
         {
    -	    if (empty($hidetop) || $hidetop==-1) $pdf->line($x, $y, $x+$l, $y);
    -	    $pdf->line($x+$l, $y, $x+$l, $y+$h);
    -	    if (empty($hidebottom)) $pdf->line($x+$l, $y+$h, $x, $y+$h);
    -	    $pdf->line($x, $y+$h, $x, $y);
    +        if (empty($hidetop) || $hidetop==-1) $pdf->line($x, $y, $x+$l, $y);
    +        $pdf->line($x+$l, $y, $x+$l, $y+$h);
    +        if (empty($hidebottom)) $pdf->line($x+$l, $y+$h, $x, $y+$h);
    +        $pdf->line($x, $y+$h, $x, $y);
    +    }
    +
    +
    +    /**
    +     *   	uasort callback function to Sort colums fields
    +     *
    +     *   	@param	array			$a    			PDF lines array fields configs
    +     *   	@param	array			$b    			PDF lines array fields configs
    +     *      @return	int								Return compare result
    +     */
    +    function columnSort($a, $b)
    +    {
    +        if(empty($a['rank'])){ $a['rank'] = 0; }
    +        if(empty($b['rank'])){ $b['rank'] = 0; }
    +        if ($a['rank'] == $b['rank']) {
    +            return 0;
    +        }
    +        return ($a['rank'] > $b['rank']) ? -1 : 1;
    +    }
    +
    +    /**
    +     *   	Prepare Array Column Field
    +     *
    +     *   	@param	object			$object				common object
    +     *   	@param	Translate		$outputlangs		langs
    +     *      @param	int				$hidedetails		Do not show line details
    +     *      @param	int				$hidedesc			Do not show desc
    +     *      @param	int				$hideref			Do not show ref
    +     *      @return	null
    +     */
    +    function prepareArrayColumnField($object,$outputlangs,$hidedetails=0,$hidedesc=0,$hideref=0)
    +    {
    +        global $conf;
    +
    +        $this->defineColumnField($object,$outputlangs,$hidedetails,$hidedesc,$hideref);
    +
    +
    +        // Sorting
    +        uasort ( $this->cols, array( $this, 'columnSort' ) );
    +
    +        // Positionning
    +        $curX = $this->page_largeur-$this->marge_droite; // start from right
    +
    +        // Array witdh
    +        $arrayWidth = $this->page_largeur-$this->marge_droite-$this->marge_gauche;
    +
    +        // Count flexible column
    +        $totalDefinedColWidth = 0;
    +        $countFlexCol = 0;
    +        foreach ($this->cols as $colKey =>& $colDef)
    +        {
    +            if(!$this->getColumnStatus($colKey)) continue; // continue if desable
    +
    +            if(!empty($colDef['scale'])){
    +                // In case of column widht is defined by percentage
    +                $colDef['width'] = abs($arrayWidth * $colDef['scale'] / 100 );
    +            }
    +
    +            if(empty($colDef['width'])){
    +                $countFlexCol++;
    +            }
    +            else{
    +                $totalDefinedColWidth += $colDef['width'];
    +            }
    +        }
    +
    +        foreach ($this->cols as $colKey =>& $colDef)
    +        {
    +            // setting empty conf with default
    +            if(!empty($colDef['title'])){
    +                $colDef['title'] = array_replace($this->defaultTitlesFieldsStyle, $colDef['title']);
    +            }
    +            else{
    +                $colDef['title'] = $this->defaultTitlesFieldsStyle;
    +            }
    +
    +            // setting empty conf with default
    +            if(!empty($colDef['content'])){
    +                $colDef['content'] = array_replace($this->defaultContentsFieldsStyle, $colDef['content']);
    +            }
    +            else{
    +                $colDef['content'] = $this->defaultContentsFieldsStyle;
    +            }
    +
    +            if($this->getColumnStatus($colKey))
    +            {
    +                // In case of flexible column
    +                if(empty($colDef['width'])){
    +                    $colDef['width'] = abs(($arrayWidth - $totalDefinedColWidth)) / $countFlexCol;
    +                }
    +
    +                // Set positions
    +                $lastX = $curX;
    +                $curX = $lastX - $colDef['width'];
    +                $colDef['xStartPos'] = $curX;
    +                $colDef['xEndPos']   = $lastX;
    +            }
    +        }
    +    }
    +
    +    /**
    +     *   	get column content width from column key
    +     *
    +     *   	@param	string			$colKey    		the column key
    +     *      @return	float      width in mm
    +     */
    +    function getColumnContentWidth($colKey)
    +    {
    +        $colDef = $this->cols[$colKey];
    +        return  $colDef['width'] - $colDef['content']['padding'][3] - $colDef['content']['padding'][1];
    +    }
    +
    +
    +    /**
    +     *   	get column content X (abscissa) left position from column key
    +     *
    +     *   	@param	string    $colKey    		the column key
    +     *      @return	float      X position in mm
    +     */
    +    function getColumnContentXStart($colKey)
    +    {
    +        $colDef = $this->cols[$colKey];
    +        return  $colDef['xStartPos'] + $colDef['content']['padding'][3];
    +    }
    +
    +    /**
    +     *   	get column position rank from column key
    +     *
    +     *   	@param	string		$colKey    		the column key
    +     *      @return	int         rank on success and -1 on error
    +     */
    +    function getColumnRank($colKey)
    +    {
    +        if(!isset($this->cols[$colKey]['rank'])) return -1;
    +        return  $this->cols[$colKey]['rank'];
    +    }
    +
    +    /**
    +     *   	get column position rank from column key
    +     *
    +     *   	@param	string		$newColKey    	the new column key
    +     *   	@param	array		$defArray    	a single column definition array
    +     *   	@param	string		$targetCol    	target column used to place the new column beside
    +     *   	@param	bool		$insertAfterTarget    	insert before or after target column ?
    +     *      @return	int         new rank on success and -1 on error
    +     */
    +    function insertNewColumnDef($newColKey, $defArray, $targetCol = false, $insertAfterTarget = false)
    +    {
    +        // prepare wanted rank
    +        $rank = -1;
    +
    +        // try to get rank from target column
    +        if(!empty($targetCol)){
    +            $rank = $this->getColumnRank($targetCol);
    +            if($rank>=0 && $insertAfterTarget){ $rank++; }
    +        }
    +
    +        // get rank from new column definition
    +        if($rank<0 && !empty($defArray['rank'])){
    +            $rank = $defArray['rank'];
    +        }
    +
    +        // error: no rank
    +        if($rank<0){ return -1; }
    +
    +        foreach ($this->cols as $colKey =>& $colDef)
    +        {
    +            if( $rank <= $colDef['rank'])
    +            {
    +                $colDef['rank'] = $colDef['rank'] + 1;
    +            }
    +        }
    +
    +        $defArray['rank'] = $rank;
    +        $this->cols[$newColKey] = $defArray; // array_replace is used to preserve keys
    +
    +        return $rank;
    +    }
    +
    +
    +    /**
    +     *   	print standard column content
    +     *
    +     *   	@param	PDF		    $pdf    	pdf object
    +     *   	@param	float		$curY    	curent Y position
    +     *   	@param	string		$colKey    	the column key
    +     *   	@param	string		$columnText   column text
    +     *      @return	int         new rank on success and -1 on error
    +     */
    +    function printStdColumnContent($pdf, &$curY, $colKey, $columnText = '')
    +    {
    +        global $hookmanager;
    +
    +        $parameters=array(
    +            'object' => $object,
    +            'curY' => &$curY,
    +            'columnText' => $columnText,
    +            'colKey' => $colKey
    +        );
    +        $reshook=$hookmanager->executeHooks('printStdColumnContent',$parameters,$this);    // Note that $action and $object may have been modified by hook
    +        if ($reshook < 0) setEventMessages($hookmanager->error,$hookmanager->errors,'errors');
    +        if (!$reshook)
    +        {
    +            if(empty($columnText)) return;
    +            $pdf->SetXY($this->getColumnContentXStart($colKey),$curY); // Set curent position
    +            $colDef = $this->cols[$colKey];
    +            $pdf->MultiCell( $this->getColumnContentWidth($colKey),2, $columnText,'',$colDef['content']['align']);
    +        }
    +    }
    +
    +
    +    /**
    +     *   	get column status from column key
    +     *
    +     *   	@param	string			$colKey    		the column key
    +     *      @return	float      width in mm
    +     */
    +    function getColumnStatus($colKey)
    +    {
    +        if( !empty($this->cols[$colKey]['status'])){
    +            return true;
    +        }
    +        else  return  false;
         }
     }
    -
    diff --git a/htdocs/core/class/commoninvoice.class.php b/htdocs/core/class/commoninvoice.class.php
    index 3aa8eb4e1ab..1dd218ecc82 100644
    --- a/htdocs/core/class/commoninvoice.class.php
    +++ b/htdocs/core/class/commoninvoice.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012       Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012       Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2012       Cédric Salvador     <csalvador@gpcsolutions.fr>
      * Copyright (C) 2012-2014  Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
      *
    @@ -62,7 +62,7 @@ abstract class CommonInvoice extends CommonObject
         const TYPE_SITUATION = 5;
     
     	/**
    -	 * Draft
    +	 * Draft status
     	 */
     	const STATUS_DRAFT = 0;
     
    @@ -325,6 +325,7 @@ abstract class CommonInvoice extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return if an invoice can be deleted
     	 *	Rule is:
    @@ -340,6 +341,7 @@ abstract class CommonInvoice extends CommonObject
     	 */
     	function is_erasable()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		// We check if invoice is a temporary number (PROVxxxx)
    @@ -430,11 +432,11 @@ abstract class CommonInvoice extends CommonObject
     	{
     		global $langs;
             if ($this->type == CommonInvoice::TYPE_STANDARD) return $langs->trans("InvoiceStandard");
    -        if ($this->type == CommonInvoice::TYPE_REPLACEMENT) return $langs->trans("InvoiceReplacement");
    -        if ($this->type == CommonInvoice::TYPE_CREDIT_NOTE) return $langs->trans("InvoiceAvoir");
    -        if ($this->type == CommonInvoice::TYPE_DEPOSIT) return $langs->trans("InvoiceDeposit");
    -        if ($this->type == CommonInvoice::TYPE_PROFORMA) return $langs->trans("InvoiceProForma");           // Not used.
    -        if ($this->type == CommonInvoice::TYPE_SITUATION) return $langs->trans("InvoiceSituation");
    +        elseif ($this->type == CommonInvoice::TYPE_REPLACEMENT) return $langs->trans("InvoiceReplacement");
    +        elseif ($this->type == CommonInvoice::TYPE_CREDIT_NOTE) return $langs->trans("InvoiceAvoir");
    +        elseif ($this->type == CommonInvoice::TYPE_DEPOSIT) return $langs->trans("InvoiceDeposit");
    +        elseif ($this->type == CommonInvoice::TYPE_PROFORMA) return $langs->trans("InvoiceProForma");           // Not used.
    +        elseif ($this->type == CommonInvoice::TYPE_SITUATION) return $langs->trans("InvoiceSituation");
     		return $langs->trans("Unknown");
     	}
     
    @@ -450,6 +452,7 @@ abstract class CommonInvoice extends CommonObject
     		return $this->LibStatut($this->paye, $this->statut, $mode, $alreadypaid, $this->type);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return label of a status
     	 *
    @@ -462,6 +465,7 @@ abstract class CommonInvoice extends CommonObject
     	 */
     	function LibStatut($paye, $status, $mode=0, $alreadypaid=-1, $type=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load('bills');
     
    @@ -472,10 +476,10 @@ abstract class CommonInvoice extends CommonObject
     			if (! $paye)
     			{
     				if ($status == 0) return $langs->trans('Bill'.$prefix.'StatusDraft');
    -				if (($status == 3 || $status == 2) && $alreadypaid <= 0) return $langs->trans('Bill'.$prefix.'StatusClosedUnpaid');
    -				if (($status == 3 || $status == 2) && $alreadypaid > 0) return $langs->trans('Bill'.$prefix.'StatusClosedPaidPartially');
    -				if ($alreadypaid <= 0) return $langs->trans('Bill'.$prefix.'StatusNotPaid');
    -				return $langs->trans('Bill'.$prefix.'StatusStarted');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid <= 0) return $langs->trans('Bill'.$prefix.'StatusClosedUnpaid');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid > 0) return $langs->trans('Bill'.$prefix.'StatusClosedPaidPartially');
    +				elseif ($alreadypaid <= 0) return $langs->trans('Bill'.$prefix.'StatusNotPaid');
    +				else return $langs->trans('Bill'.$prefix.'StatusStarted');
     			}
     			else
     			{
    @@ -484,16 +488,16 @@ abstract class CommonInvoice extends CommonObject
     				else return $langs->trans('Bill'.$prefix.'StatusPaid');
     			}
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			$prefix='Short';
     			if (! $paye)
     			{
     				if ($status == 0) return $langs->trans('Bill'.$prefix.'StatusDraft');
    -				if (($status == 3 || $status == 2) && $alreadypaid <= 0) return $langs->trans('Bill'.$prefix.'StatusCanceled');
    -				if (($status == 3 || $status == 2) && $alreadypaid > 0) return $langs->trans('Bill'.$prefix.'StatusClosedPaidPartially');
    -				if ($alreadypaid <= 0) return $langs->trans('Bill'.$prefix.'StatusNotPaid');
    -				return $langs->trans('Bill'.$prefix.'StatusStarted');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid <= 0) return $langs->trans('Bill'.$prefix.'StatusCanceled');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid > 0) return $langs->trans('Bill'.$prefix.'StatusClosedPaidPartially');
    +				elseif ($alreadypaid <= 0) return $langs->trans('Bill'.$prefix.'StatusNotPaid');
    +				else return $langs->trans('Bill'.$prefix.'StatusStarted');
     			}
     			else
     			{
    @@ -502,16 +506,16 @@ abstract class CommonInvoice extends CommonObject
     				else return $langs->trans('Bill'.$prefix.'StatusPaid');
     			}
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			$prefix='Short';
     			if (! $paye)
     			{
     				if ($status == 0) return img_picto($langs->trans('BillStatusDraft'),'statut0').' '.$langs->trans('Bill'.$prefix.'StatusDraft');
    -				if (($status == 3 || $status == 2) && $alreadypaid <= 0) return img_picto($langs->trans('StatusCanceled'),'statut5').' '.$langs->trans('Bill'.$prefix.'StatusCanceled');
    -				if (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9').' '.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially');
    -				if ($alreadypaid <= 0) return img_picto($langs->trans('BillStatusNotPaid'),'statut1').' '.$langs->trans('Bill'.$prefix.'StatusNotPaid');
    -				return img_picto($langs->trans('BillStatusStarted'),'statut3').' '.$langs->trans('Bill'.$prefix.'StatusStarted');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid <= 0) return img_picto($langs->trans('StatusCanceled'),'statut5').' '.$langs->trans('Bill'.$prefix.'StatusCanceled');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9').' '.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially');
    +				elseif ($alreadypaid <= 0) return img_picto($langs->trans('BillStatusNotPaid'),'statut1').' '.$langs->trans('Bill'.$prefix.'StatusNotPaid');
    +				else return img_picto($langs->trans('BillStatusStarted'),'statut3').' '.$langs->trans('Bill'.$prefix.'StatusStarted');
     			}
     			else
     			{
    @@ -520,16 +524,16 @@ abstract class CommonInvoice extends CommonObject
     				else return img_picto($langs->trans('BillStatusPaid'),'statut6').' '.$langs->trans('Bill'.$prefix.'StatusPaid');
     			}
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			$prefix='Short';
     			if (! $paye)
     			{
     				if ($status == 0) return img_picto($langs->trans('BillStatusDraft'),'statut0');
    -				if (($status == 3 || $status == 2) && $alreadypaid <= 0) return img_picto($langs->trans('BillStatusCanceled'),'statut5');
    -				if (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9');
    -				if ($alreadypaid <= 0) return img_picto($langs->trans('BillStatusNotPaid'),'statut1');
    -				return img_picto($langs->trans('BillStatusStarted'),'statut3');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid <= 0) return img_picto($langs->trans('BillStatusCanceled'),'statut5');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9');
    +				elseif ($alreadypaid <= 0) return img_picto($langs->trans('BillStatusNotPaid'),'statut1');
    +				else return img_picto($langs->trans('BillStatusStarted'),'statut3');
     			}
     			else
     			{
    @@ -538,16 +542,16 @@ abstract class CommonInvoice extends CommonObject
     				else return img_picto($langs->trans('BillStatusPaid'),'statut6');
     			}
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			$prefix='';
     			if (! $paye)
     			{
     				if ($status == 0) return img_picto($langs->trans('BillStatusDraft'),'statut0').' '.$langs->trans('BillStatusDraft');
    -				if (($status == 3 || $status == 2) && $alreadypaid <= 0) return img_picto($langs->trans('BillStatusCanceled'),'statut5').' '.$langs->trans('Bill'.$prefix.'StatusCanceled');
    -				if (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9').' '.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially');
    -				if ($alreadypaid <= 0) return img_picto($langs->trans('BillStatusNotPaid'),'statut1').' '.$langs->trans('BillStatusNotPaid');
    -				return img_picto($langs->trans('BillStatusStarted'),'statut3').' '.$langs->trans('BillStatusStarted');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid <= 0) return img_picto($langs->trans('BillStatusCanceled'),'statut5').' '.$langs->trans('Bill'.$prefix.'StatusCanceled');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid > 0) return img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9').' '.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially');
    +				elseif ($alreadypaid <= 0) return img_picto($langs->trans('BillStatusNotPaid'),'statut1').' '.$langs->trans('BillStatusNotPaid');
    +				else return img_picto($langs->trans('BillStatusStarted'),'statut3').' '.$langs->trans('BillStatusStarted');
     			}
     			else
     			{
    @@ -556,21 +560,21 @@ abstract class CommonInvoice extends CommonObject
     				else return img_picto($langs->trans('BillStatusPaid'),'statut6').' '.$langs->trans('BillStatusPaid');
     			}
     		}
    -		if ($mode == 5 || $mode == 6)
    +		elseif ($mode == 5 || $mode == 6)
     		{
     			$prefix='';
     			if ($mode == 5) $prefix='Short';
     			if (! $paye)
     			{
     				if ($status == 0) return '<span class="xhideonsmartphone">'.$langs->trans('Bill'.$prefix.'StatusDraft').' </span>'.img_picto($langs->trans('BillStatusDraft'),'statut0');
    -				if (($status == 3 || $status == 2) && $alreadypaid <= 0) return '<span class="xhideonsmartphone">'.$langs->trans('Bill'.$prefix.'StatusCanceled').' </span>'.img_picto($langs->trans('BillStatusCanceled'),'statut5');
    -				if (($status == 3 || $status == 2) && $alreadypaid > 0) return '<span class="xhideonsmartphone">'.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially').' </span>'.img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9');
    -				if ($alreadypaid <= 0)
    +				elseif (($status == 3 || $status == 2) && $alreadypaid <= 0) return '<span class="xhideonsmartphone">'.$langs->trans('Bill'.$prefix.'StatusCanceled').' </span>'.img_picto($langs->trans('BillStatusCanceled'),'statut5');
    +				elseif (($status == 3 || $status == 2) && $alreadypaid > 0) return '<span class="xhideonsmartphone">'.$langs->trans('Bill'.$prefix.'StatusClosedPaidPartially').' </span>'.img_picto($langs->trans('BillStatusClosedPaidPartially'),'statut9');
    +				elseif ($alreadypaid <= 0)
     				{
     				    if ($type == self::TYPE_CREDIT_NOTE) return '<span class="xhideonsmartphone">'.$langs->trans('Bill'.$prefix.'StatusNotRefunded').' </span>'.img_picto($langs->trans('StatusNotRefunded'),'statut1');
     				    return '<span class="xhideonsmartphone">'.$langs->trans('Bill'.$prefix.'StatusNotPaid').' </span>'.img_picto($langs->trans('BillStatusNotPaid'),'statut1');
     				}
    -				return '<span class="xhideonsmartphone">'.$langs->trans('Bill'.$prefix.'StatusStarted').' </span>'.img_picto($langs->trans('BillStatusStarted'),'statut3');
    +				else return '<span class="xhideonsmartphone">'.$langs->trans('Bill'.$prefix.'StatusStarted').' </span>'.img_picto($langs->trans('BillStatusStarted'),'statut3');
     			}
     			else
     			{
    @@ -581,21 +585,25 @@ abstract class CommonInvoice extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoi une date limite de reglement de facture en fonction des
    -	 *	conditions de reglements de la facture et date de facturation
    +	 *	conditions de reglements de la facture et date de facturation.
     	 *
     	 *	@param      integer	$cond_reglement   	Condition of payment (code or id) to use. If 0, we use current condition.
    -	 *	@return     date     			       	Date limite de reglement si ok, <0 si ko
    +	 *  @return     date     			       	Date limite de reglement si ok, <0 si ko
     	 */
     	function calculate_date_lim_reglement($cond_reglement=0)
     	{
    +        // phpcs:enable
     		if (! $cond_reglement) $cond_reglement=$this->cond_reglement_code;
     		if (! $cond_reglement) $cond_reglement=$this->cond_reglement_id;
     
    -		$cdr_nbjour=0; $cdr_type=0; $cdr_decalage=0;
    +		$cdr_nbjour=0;
    +        $cdr_type=0;
    +        $cdr_decalage=0;
     
    -		$sqltemp = 'SELECT c.type_cdr,c.nbjour,c.decalage';
    +		$sqltemp = 'SELECT c.type_cdr, c.nbjour, c.decalage';
     		$sqltemp.= ' FROM '.MAIN_DB_PREFIX.'c_payment_term as c';
     		if (is_numeric($cond_reglement)) $sqltemp.= " WHERE c.rowid=".$cond_reglement;
     		else {
    @@ -624,12 +632,18 @@ abstract class CommonInvoice extends CommonObject
     
     		/* Definition de la date limite */
     
    -		// 1 : ajout du nombre de jours
    -		$datelim = $this->date + ($cdr_nbjour * 3600 * 24);
    -
    -		// 2 : application de la regle "fin de mois"
    -		if ($cdr_type == 1)
    +		// 0 : ajout du nombre de jours
    +		if ($cdr_type == 0)
     		{
    +			$datelim = $this->date + ($cdr_nbjour * 3600 * 24);
    +
    +			$datelim += ($cdr_decalage * 3600 * 24);
    +		}
    +		// 1 : application de la regle "fin de mois"
    +		elseif ($cdr_type == 1)
    +		{
    +			$datelim = $this->date + ($cdr_nbjour * 3600 * 24);
    +
     			$mois=date('m', $datelim);
     			$annee=date('Y', $datelim);
     			if ($mois == 12)
    @@ -644,23 +658,24 @@ abstract class CommonInvoice extends CommonObject
     			// On se deplace au debut du mois suivant, et on retire un jour
     			$datelim=dol_mktime(12,0,0,$mois,1,$annee);
     			$datelim -= (3600 * 24);
    -		}
    -		elseif($cdr_type == 2 && !empty($cdr_nbjour)) // Application de la règle, le N du mois courant ou suivant
    -		{
     
    -			$date_piece = dol_mktime(0,0,0,date('m', $this->date),date('d', $this->date),date('Y', $this->date)); // Sans les heures minutes et secondes
    -			$date_lim_current = dol_mktime(0,0,0,date('m', $this->date),$cdr_nbjour,date('Y', $this->date)); // Sans les heures minutes et secondes
    -			$date_lim_next = strtotime(date('Y-m-d', $date_lim_current).' +1month');
    +			$datelim += ($cdr_decalage * 3600 * 24);
    +		}
    +		// 2 : application de la règle, le N du mois courant ou suivant
    +		elseif ($cdr_type == 2 && !empty($cdr_decalage))
    +		{
    +			$datelim = $this->date + ($cdr_nbjour * 3600 * 24);
    +
    +			$date_piece = dol_mktime(0, 0, 0, date('m', $datelim),date('d', $datelim),date('Y', $datelim)); // Sans les heures minutes et secondes
    +			$date_lim_current = dol_mktime(0, 0, 0, date('m', $datelim), $cdr_decalage, date('Y', $datelim)); // Sans les heures minutes et secondes
    +			$date_lim_next = dol_time_plus_duree($date_lim_current, 1, 'm');	// Add 1 month
     
     			$diff = $date_piece - $date_lim_current;
     
    -			if($diff < 0) $datelim = $date_lim_current;
    +			if ($diff < 0) $datelim = $date_lim_current;
     			else $datelim = $date_lim_next;
    -
     		}
    -
    -		// 3 : application du decalage
    -		$datelim += ($cdr_decalage * 3600 * 24);
    +		else return 'Bad value for type_cdr in database for record cond_reglement = '.$cond_reglement;
     
     		return $datelim;
     	}
    @@ -777,4 +792,3 @@ abstract class CommonInvoiceLine extends CommonObjectLine
     		$this->db = $db;
     	}
     }
    -
    diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
    index 88386521079..e07001fda7c 100644
    --- a/htdocs/core/class/commonobject.class.php
    +++ b/htdocs/core/class/commonobject.class.php
    @@ -1,11 +1,9 @@
     <?php
     /* Copyright (C) 2006-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2010-2013 Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2012      Christophe Battarel  <christophe.battarel@altairis.fr>
    + * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2015 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2012-2013 Christophe Battarel  <christophe.battarel@altairis.fr>
    - * Copyright (C) 2011-2018 Philippe Grand	    <philippe.grand@atoo-net.com>
    + * Copyright (C) 2011-2018 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2012-2015 Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2012-2015 Raphaël Doursenaud   <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2012      Cedric Salvador      <csalvador@gpcsolutions.fr>
    @@ -13,8 +11,9 @@
      * Copyright (C) 2016      Bahfir abbes         <dolipar@dolipar.org>
      * Copyright (C) 2017      ATM Consulting       <support@atm-consulting.fr>
      * Copyright (C) 2017      Nicolas ZABOURI      <info@inovea-conseil.com>
    - * Copyright (C) 2017      Rui Strecht		    <rui.strecht@aliartalentos.com>
    - * Copyright (C) 2018      Frederic France      <frederic.france@netlogic.fr>
    + * Copyright (C) 2017      Rui Strecht          <rui.strecht@aliartalentos.com>
    + * Copyright (C) 2018      Frédéric France      <frederic.france@netlogic.fr>
    + * Copyright (C) 2018      Josep Lluís Amador   <joseplluis@lliuretic.cat>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -64,19 +63,19 @@ abstract class CommonObject
     	public $errors=array();
     
     	/**
    -	 * @var string
    +	 * @var string ID to identify managed object
     	 */
     	public $element;
     
     	/**
    -	 * @var string
    +	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element;
     
     	/**
    -	 * @var
    +	 * @var int    Name of subtable line
     	 */
    -	public $table_element_line;
    +	public $table_element_line='';
     
     	/**
     	 * @var string		Key value used to track if data is coming from import wizard
    @@ -169,6 +168,7 @@ abstract class CommonObject
     	 * @see fetch_origin()
     	 */
     	public $origin;
    +
     	/**
     	 * @var int 	The id of originating object
     	 * @see fetch_origin()
    @@ -399,6 +399,12 @@ abstract class CommonObject
     	public $firstname;
     	public $civility_id;
     
    +	// Dates
    +	public $date_creation;			// Date creation
    +	public $date_validation;		// Date validation
    +	public $date_modification;		// Date last change (tms field)
    +
    +
     
     	// No constructor as it is an abstract class
     
    @@ -609,12 +615,23 @@ abstract class CommonObject
     			$out.=dol_print_url($this->url,'_goout',0,1);
     			$outdone++;
     		}
    -		if (! empty($conf->skype->enabled))
    +		$out.='<div style="clear: both;">';
    +		if (! empty($conf->socialnetworks->enabled))
     		{
    -			$out.='<div style="clear: both;"></div>';
    -			if ($this->skype) $out.=dol_print_skype($this->skype,$this->id,$object->id,'AC_SKYPE');
    +			if ($this->skype) $out.=dol_print_socialnetworks($this->skype,$this->id,$object->id,'skype');
     			$outdone++;
     		}
    +		if (! empty($conf->socialnetworks->enabled))
    +		{
    +			if ($this->twitter) $out.=dol_print_socialnetworks($this->twitter,$this->id,$object->id,'twitter');
    +			$outdone++;
    +		}
    +		if (! empty($conf->socialnetworks->enabled))
    +		{
    +			if ($this->facebook) $out.=dol_print_socialnetworks($this->facebook,$this->id,$object->id,'facebook');
    +			$outdone++;
    +		}
    +		$out.='</div>';
     
     		$out.='<!-- END Part to show address block -->';
     
    @@ -714,6 +731,7 @@ abstract class CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Add a link between element $this->element and a contact
     	 *
    @@ -725,6 +743,7 @@ abstract class CommonObject
     	 */
     	function add_contact($fk_socpeople, $type_contact, $source='external',$notrigger=0)
     	{
    +        // phpcs:enable
     		global $user,$langs;
     
     
    @@ -836,6 +855,7 @@ abstract class CommonObject
     		} else return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Copy contact from one element to current
     	 *
    @@ -845,6 +865,7 @@ abstract class CommonObject
     	 */
     	function copy_linked_contact($objFrom, $source='internal')
     	{
    +        // phpcs:enable
     		$contacts = $objFrom->liste_contact(-1, $source);
     		foreach($contacts as $contact)
     		{
    @@ -857,6 +878,7 @@ abstract class CommonObject
     		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Update a link to contact line
     	 *
    @@ -868,6 +890,7 @@ abstract class CommonObject
     	 */
     	function update_contact($rowid, $statut, $type_contact_id=0, $fk_socpeople=0)
     	{
    +        // phpcs:enable
     		// Insert into database
     		$sql = "UPDATE ".MAIN_DB_PREFIX."element_contact set";
     		$sql.= " statut = ".$statut;
    @@ -886,6 +909,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Delete a link to contact line
     	 *
    @@ -895,6 +919,7 @@ abstract class CommonObject
     	 */
     	function delete_contact($rowid, $notrigger=0)
     	{
    +        // phpcs:enable
     		global $user;
     
     
    @@ -923,6 +948,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Delete all links between an object $this and all its contacts
     	 *
    @@ -932,6 +958,7 @@ abstract class CommonObject
     	 */
     	function delete_linked_contact($source='',$code='')
     	{
    +        // phpcs:enable
     		$temp = array();
     		$typeContact = $this->liste_type_contact($source,'',0,0,$code);
     
    @@ -958,6 +985,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Get array of all contacts for an object
     	 *
    @@ -965,10 +993,11 @@ abstract class CommonObject
     	 *    @param	string		$source		Source of contact: external or thirdparty (llx_socpeople) or internal (llx_user)
     	 *    @param	int         $list       0:Return array contains all properties, 1:Return array contains just id
     	 *    @param    string      $code       Filter on this code of contact type ('SHIPPING', 'BILLING', ...)
    -	 *    @return	array		            Array of contacts
    +	 *    @return	array|int		        Array of contacts, -1 if error
     	 */
     	function liste_contact($statut=-1,$source='external',$list=0,$code='')
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$tab=array();
    @@ -1063,9 +1092,9 @@ abstract class CommonObject
     			dol_print_error($this->db);
     			return -1;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Return array with list of possible values for type of contacts
     	 *
    @@ -1078,6 +1107,7 @@ abstract class CommonObject
     	 */
     	function liste_type_contact($source='internal', $order='position', $option=0, $activeonly=0, $code='')
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if (empty($order)) $order='position';
    @@ -1179,6 +1209,7 @@ abstract class CommonObject
     		return $result;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *		Load object contact with id=$this->contactid into $this->contact
     	 *
    @@ -1187,6 +1218,7 @@ abstract class CommonObject
     	 */
     	function fetch_contact($contactid=null)
     	{
    +        // phpcs:enable
     		if (empty($contactid)) $contactid=$this->contactid;
     
     		if (empty($contactid)) return 0;
    @@ -1198,6 +1230,7 @@ abstract class CommonObject
     		return $result;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    	Load the third party of object, from id $this->socid or $this->fk_soc, into this->thirdparty
     	 *
    @@ -1206,6 +1239,7 @@ abstract class CommonObject
     	 */
     	function fetch_thirdparty($force_thirdparty_id=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if (empty($this->socid) && empty($this->fk_soc) && empty($this->fk_thirdparty) && empty($force_thirdparty_id))
    @@ -1259,6 +1293,7 @@ abstract class CommonObject
     		return $this->fetch($result->rowid);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Load data for barcode into properties ->barcode_type*
     	 *	Properties ->barcode_type that is id of barcode. Type is used to find other properties, but
    @@ -1268,6 +1303,7 @@ abstract class CommonObject
     	 */
     	function fetch_barcode()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		dol_syslog(get_class($this).'::fetch_barcode this->element='.$this->element.' this->barcode_type='.$this->barcode_type);
    @@ -1308,6 +1344,7 @@ abstract class CommonObject
     		return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *		Load the project with id $this->fk_project into this->project
     	 *
    @@ -1315,6 +1352,7 @@ abstract class CommonObject
     	 */
     	function fetch_projet()
     	{
    +        // phpcs:enable
     		include_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     
     		if (empty($this->fk_project) && ! empty($this->fk_projet)) $this->fk_project = $this->fk_projet;	// For backward compatibility
    @@ -1328,6 +1366,7 @@ abstract class CommonObject
     		return $result;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *		Load the product with id $this->fk_product into this->product
     	 *
    @@ -1335,6 +1374,7 @@ abstract class CommonObject
     	 */
     	function fetch_product()
     	{
    +        // phpcs:enable
     		include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     
     		if (empty($this->fk_product)) return 0;
    @@ -1346,6 +1386,7 @@ abstract class CommonObject
     		return $result;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *		Load the user with id $userid into this->user
     	 *
    @@ -1354,12 +1395,14 @@ abstract class CommonObject
     	 */
     	function fetch_user($userid)
     	{
    +        // phpcs:enable
     		$user = new User($this->db);
     		$result=$user->fetch($userid);
     		$this->user = $user;
     		return $result;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Read linked origin object
     	 *
    @@ -1367,6 +1410,7 @@ abstract class CommonObject
     	 */
     	function fetch_origin()
     	{
    +        // phpcs:enable
     		if ($this->origin == 'shipping') $this->origin = 'expedition';
     		if ($this->origin == 'delivery') $this->origin = 'livraison';
     
    @@ -1526,6 +1570,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Load properties id_previous and id_next by comparing $fieldid with $this->ref
     	 *
    @@ -1536,6 +1581,7 @@ abstract class CommonObject
     	 */
     	function load_previous_next_ref($filter, $fieldid, $nodbprefix=0)
     	{
    +        // phpcs:enable
     		global $conf, $user;
     
     		if (! $this->table_element)
    @@ -1864,7 +1910,7 @@ abstract class CommonObject
     							case 'order_supplier':
     								$this->updateline(
     									$line->id, ($line->description?$line->description:$line->desc), $line->subprice, $line->qty, $line->remise_percent,
    -									$line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits,  $line->product_type, false,
    +									$line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type, false,
     									$line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice
     								);
     								break;
    @@ -1879,7 +1925,6 @@ abstract class CommonObject
     								dol_syslog(get_class($this).'::setMulticurrencyRate no updateline defined', LOG_DEBUG);
     								break;
     						}
    -
     					}
     				}
     
    @@ -2026,7 +2071,6 @@ abstract class CommonObject
                 $this->db->commit();
                 return 1;
             }
    -
     	}
     
     
    @@ -2161,6 +2205,7 @@ abstract class CommonObject
     
     	// TODO: Move line related operations to CommonObjectLine?
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Save a new position (field rang) for details lines.
     	 *  You can choose to set position for lines with already a position or lines without any position defined.
    @@ -2172,6 +2217,7 @@ abstract class CommonObject
     	 */
     	function line_order($renum=false, $rowidorder='ASC', $fk_parent_line=true)
     	{
    +        // phpcs:enable
     		if (! $this->table_element_line)
     		{
     			dol_syslog(get_class($this)."::line_order was called on objet with property table_element_line not defined",LOG_ERR);
    @@ -2280,6 +2326,7 @@ abstract class CommonObject
     		return $rows;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Update a line to have a lower rank
     	 *
    @@ -2289,6 +2336,7 @@ abstract class CommonObject
     	 */
     	function line_up($rowid, $fk_parent_line=true)
     	{
    +        // phpcs:enable
     		$this->line_order(false, 'ASC', $fk_parent_line);
     
     		// Get rang of line
    @@ -2298,6 +2346,7 @@ abstract class CommonObject
     		$this->updateLineUp($rowid, $rang);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Update a line to have a higher rank
     	 *
    @@ -2307,6 +2356,7 @@ abstract class CommonObject
     	 */
     	function line_down($rowid, $fk_parent_line=true)
     	{
    +        // phpcs:enable
     		$this->line_order(false, 'ASC', $fk_parent_line);
     
     		// Get rang of line
    @@ -2329,7 +2379,7 @@ abstract class CommonObject
     	function updateRangOfLine($rowid,$rang)
     	{
     		$fieldposition = 'rang';
    -		if ($this->table_element_line == 'ecm_files') $fieldposition = 'position';
    +		if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
     
     		$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
     		$sql.= ' WHERE rowid = '.$rowid;
    @@ -2341,6 +2391,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Update position of line with ajax (rang)
     	 *
    @@ -2349,6 +2400,7 @@ abstract class CommonObject
     	 */
     	function line_ajaxorder($rows)
     	{
    +        // phpcs:enable
     		$num = count($rows);
     		for ($i = 0 ; $i < $num ; $i++)
     		{
    @@ -2365,14 +2417,17 @@ abstract class CommonObject
     	 */
     	function updateLineUp($rowid,$rang)
     	{
    -		if ($rang > 1 )
    +		if ($rang > 1)
     		{
    -			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.$rang ;
    +			$fieldposition = 'rang';
    +			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
    +
    +			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang ;
     			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
     			$sql.= ' AND rang = '.($rang - 1);
     			if ($this->db->query($sql) )
     			{
    -				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang  = '.($rang - 1);
    +				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.($rang - 1);
     				$sql.= ' WHERE rowid = '.$rowid;
     				if (! $this->db->query($sql) )
     				{
    @@ -2398,12 +2453,15 @@ abstract class CommonObject
     	{
     		if ($rang < $max)
     		{
    -			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.$rang;
    +			$fieldposition = 'rang';
    +			if (in_array($this->table_element_line, array('ecm_files', 'emailcollector_emailcollectoraction'))) $fieldposition = 'position';
    +
    +			$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.$rang;
     			$sql.= ' WHERE '.$this->fk_element.' = '.$this->id;
     			$sql.= ' AND rang = '.($rang+1);
     			if ($this->db->query($sql) )
     			{
    -				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET rang = '.($rang+1);
    +				$sql = 'UPDATE '.MAIN_DB_PREFIX.$this->table_element_line.' SET '.$fieldposition.' = '.($rang+1);
     				$sql.= ' WHERE rowid = '.$rowid;
     				if (! $this->db->query($sql) )
     				{
    @@ -2456,6 +2514,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Get max value used for position of line (rang)
     	 *
    @@ -2464,6 +2523,7 @@ abstract class CommonObject
     	 */
     	function line_max($fk_parent_line=0)
     	{
    +        // phpcs:enable
     		// Search the last rang with fk_parent_line
     		if ($fk_parent_line)
     		{
    @@ -2502,6 +2562,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update external ref of element
     	 *
    @@ -2510,6 +2571,7 @@ abstract class CommonObject
     	 */
     	function update_ref_ext($ref_ext)
     	{
    +        // phpcs:enable
     		if (! $this->table_element)
     		{
     			dol_syslog(get_class($this)."::update_ref_ext was called on objet with property table_element not defined", LOG_ERR);
    @@ -2533,6 +2595,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update note of element
     	 *
    @@ -2540,8 +2603,9 @@ abstract class CommonObject
     	 *  @param		string		$suffix		'', '_public' or '_private'
     	 *  @return     int      		   		<0 if KO, >0 if OK
     	 */
    -	function update_note($note,$suffix='')
    +	function update_note($note, $suffix='')
     	{
    +        // phpcs:enable
     		global $user;
     
     		if (! $this->table_element)
    @@ -2584,6 +2648,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Update public note (kept for backward compatibility)
     	 *
    @@ -2594,9 +2659,11 @@ abstract class CommonObject
     	 */
     	function update_note_public($note)
     	{
    +        // phpcs:enable
     		return $this->update_note($note,'_public');
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Update total_ht, total_ttc, total_vat, total_localtax1, total_localtax2 for an object (sum of lines).
     	 *  Must be called at end of methods addline or updateline.
    @@ -2609,7 +2676,8 @@ abstract class CommonObject
     	 */
     	function update_price($exclspec=0,$roundingadjust='none',$nodatabaseupdate=0,$seller=null)
     	{
    -		global $conf;
    +        // phpcs:enable
    +		global $conf, $hookmanager, $action;
     
     		// Some external module want no update price after a trigger because they have another method to calculate the total (ex: with an extrafield)
     		$MODULE = "";
    @@ -2700,7 +2768,10 @@ abstract class CommonObject
     				$obj = $this->db->fetch_object($resql);
     
     				// Note: There is no check on detail line and no check on total, if $forcedroundingmode = 'none'
    -				if ($forcedroundingmode == '0')	// Check if data on line are consistent. This may solve lines that were not consistent because set with $forcedroundingmode='auto'
    +				$parameters=array('fk_element' => $obj->rowid);
    +				$reshook = $hookmanager->executeHooks('changeRoundingMode', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
    +
    +				if (empty($reshook) && $forcedroundingmode == '0')	// Check if data on line are consistent. This may solve lines that were not consistent because set with $forcedroundingmode='auto'
     				{
     					$localtax_array=array($obj->localtax1_type,$obj->localtax1_tx,$obj->localtax2_type,$obj->localtax2_tx);
     					$tmpcal=calcul_price_total($obj->qty, $obj->up, $obj->remise_percent, $obj->vatrate, $obj->localtax1_tx, $obj->localtax2_tx, 0, 'HT', $obj->info_bits, $obj->product_type, $seller, $localtax_array, (isset($obj->situation_percent) ? $obj->situation_percent : 100), $multicurrency_tx);
    @@ -2749,7 +2820,6 @@ abstract class CommonObject
     								$this->total_ttc -= $diff;
     								$total_tva_by_vats[$obj->vatrate] -= $diff;
     								$total_ttc_by_vats[$obj->vatrate] -= $diff;
    -
     					}
     				}
     
    @@ -2832,6 +2902,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Add objects linked in llx_element_element.
     	 *
    @@ -2842,6 +2913,7 @@ abstract class CommonObject
     	 */
     	function add_object_linked($origin=null, $origin_id=null)
     	{
    +        // phpcs:enable
     		$origin = (! empty($origin) ? $origin : $this->origin);
     		$origin_id = (! empty($origin_id) ? $origin_id : $this->origin_id);
     
    @@ -2879,7 +2951,9 @@ abstract class CommonObject
     	}
     
     	/**
    -	 *	Fetch array of objects linked to current object. Links are loaded into this->linkedObjects array and this->linkedObjectsIds
    +	 *	Fetch array of objects linked to current object (object of enabled modules only). Links are loaded into
    +	 *		this->linkedObjectsIds array and
    +	 *		this->linkedObjects array if $loadalsoobjects = 1
     	 *  Possible usage for parameters:
     	 *  - all parameters empty -> we look all link to current object (current object can be source or target)
     	 *  - source id+type -> will get target list linked to source
    @@ -2887,17 +2961,18 @@ abstract class CommonObject
     	 *  - source id+type + target type -> will get target list of the type
     	 *  - target id+type + target source -> will get source list of the type
     	 *
    -	 *	@param	int		$sourceid		Object source id (if not defined, id of object)
    -	 *	@param  string	$sourcetype		Object source type (if not defined, element name of object)
    -	 *	@param  int		$targetid		Object target id (if not defined, id of object)
    -	 *	@param  string	$targettype		Object target type (if not defined, elemennt name of object)
    -	 *	@param  string	$clause			'OR' or 'AND' clause used when both source id and target id are provided
    -	 *  @param  int		$alsosametype	0=Return only links to object that differs from source. 1=Include also link to objects of same type.
    -	 *  @param  string	$orderby		SQL 'ORDER BY' clause
    -	 *	@return int						<0 if KO, >0 if OK
    +	 *	@param	int		$sourceid			Object source id (if not defined, id of object)
    +	 *	@param  string	$sourcetype			Object source type (if not defined, element name of object)
    +	 *	@param  int		$targetid			Object target id (if not defined, id of object)
    +	 *	@param  string	$targettype			Object target type (if not defined, elemennt name of object)
    +	 *	@param  string	$clause				'OR' or 'AND' clause used when both source id and target id are provided
    +	 *  @param  int		$alsosametype		0=Return only links to object that differs from source type. 1=Include also link to objects of same type.
    +	 *  @param  string	$orderby			SQL 'ORDER BY' clause
    +	 *  @param	int		$loadalsoobjects	Load also array this->linkedObjects (Use 0 to increase performances)
    +	 *	@return int							<0 if KO, >0 if OK
     	 *  @see	add_object_linked, updateObjectLinked, deleteObjectLinked
     	 */
    -	function fetchObjectLinked($sourceid=null,$sourcetype='',$targetid=null,$targettype='',$clause='OR',$alsosametype=1,$orderby='sourcetype')
    +	function fetchObjectLinked($sourceid=null,$sourcetype='',$targetid=null,$targettype='',$clause='OR',$alsosametype=1,$orderby='sourcetype',$loadalsoobjects=1)
     	{
     		global $conf;
     
    @@ -2926,10 +3001,10 @@ abstract class CommonObject
     		$targettype = (! empty($targettype) ? $targettype : $this->element);
     
     		/*if (empty($sourceid) && empty($targetid))
    -        {
    -        	dol_syslog('Bad usage of function. No source nor target id defined (nor as parameter nor as object id)', LOG_ERR);
    -        	return -1;
    -        }*/
    +		 {
    +		 dol_syslog('Bad usage of function. No source nor target id defined (nor as parameter nor as object id)', LOG_ERR);
    +		 return -1;
    +		 }*/
     
     		// Links between objects are stored in table element_element
     		$sql = 'SELECT rowid, fk_source, sourcetype, fk_target, targettype';
    @@ -2991,7 +3066,8 @@ abstract class CommonObject
     
     			if (! empty($this->linkedObjectsIds))
     			{
    -				foreach($this->linkedObjectsIds as $objecttype => $objectids)       // $objecttype is a module name ('facture', 'mymodule', ...) or a module name with a suffix ('project_task', 'mymodule_myobj', ...)
    +				$tmparray = $this->linkedObjectsIds;
    +				foreach($tmparray as $objecttype => $objectids)       // $objecttype is a module name ('facture', 'mymodule', ...) or a module name with a suffix ('project_task', 'mymodule_myobj', ...)
     				{
     					// Parse element/subelement (ex: project_task, cabinetmed_consultation, ...)
     					$module = $element = $subelement = $objecttype;
    @@ -3057,21 +3133,28 @@ abstract class CommonObject
     					// Here $module, $classfile and $classname are set
     					if ($conf->$module->enabled && (($element != $this->element) || $alsosametype))
     					{
    -						dol_include_once('/'.$classpath.'/'.$classfile.'.class.php');
    -						//print '/'.$classpath.'/'.$classfile.'.class.php '.class_exists($classname);
    -						if (class_exists($classname))
    +						if ($loadalsoobjects)
     						{
    -							foreach($objectids as $i => $objectid)	// $i is rowid into llx_element_element
    +							dol_include_once('/'.$classpath.'/'.$classfile.'.class.php');
    +							//print '/'.$classpath.'/'.$classfile.'.class.php '.class_exists($classname);
    +							if (class_exists($classname))
     							{
    -								$object = new $classname($this->db);
    -								$ret = $object->fetch($objectid);
    -								if ($ret >= 0)
    +								foreach($objectids as $i => $objectid)	// $i is rowid into llx_element_element
     								{
    -									$this->linkedObjects[$objecttype][$i] = $object;
    +									$object = new $classname($this->db);
    +									$ret = $object->fetch($objectid);
    +									if ($ret >= 0)
    +									{
    +										$this->linkedObjects[$objecttype][$i] = $object;
    +									}
     								}
     							}
     						}
     					}
    +					else
    +					{
    +						unset($this->linkedObjectsIds[$objecttype]);
    +					}
     				}
     			}
     			return 1;
    @@ -3593,6 +3676,7 @@ abstract class CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return incoterms informations
     	 *    TODO Use a cache for label get
    @@ -3601,6 +3685,7 @@ abstract class CommonObject
     	 */
     	function display_incoterms()
     	{
    +        // phpcs:enable
     		$out = '';
     		$this->libelle_incoterms = '';
     		if (!empty($this->fk_incoterms))
    @@ -3772,6 +3857,7 @@ abstract class CommonObject
     
     			print '<tr class="liste_titre nodrag nodrop">';
     
    +			// Adds a line numbering column
     			if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) print '<td class="linecolnum" align="center" width="5">&nbsp;</td>';
     
     			// Description
    @@ -4200,6 +4286,7 @@ abstract class CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Add resources to the current object : add entry into llx_element_resources
     	 *	Need $this->element & $this->id
    @@ -4212,6 +4299,7 @@ abstract class CommonObject
     	 */
     	function add_element_resource($resource_id, $resource_type, $busy=0, $mandatory=0)
     	{
    +        // phpcs:enable
     		$this->db->begin();
     
     		$sql = "INSERT INTO ".MAIN_DB_PREFIX."element_resources (";
    @@ -4244,6 +4332,7 @@ abstract class CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Delete a link to resource line
     	 *
    @@ -4254,6 +4343,7 @@ abstract class CommonObject
     	 */
     	function delete_resource($rowid, $element, $notrigger=0)
     	{
    +        // phpcs:enable
     		global $user;
     
     		$this->db->begin();
    @@ -4544,7 +4634,6 @@ abstract class CommonObject
     				dol_print_error($this->db, "Error generating document for ".__CLASS__.". Error: ".$obj->error, $obj->errors);
     				return -1;
     			}
    -
     		}
     		else
     		{
    @@ -4620,13 +4709,13 @@ abstract class CommonObject
     		if (isset($conf->global->$keyforfieldname)) return $conf->global->$keyforfieldname;
     
     		// TODO Ad here a scan into table llx_overwrite_default with a filter on $this->element and $fieldname
    -
     	}
     
     
     	/* For triggers */
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Call trigger based on this instance.
     	 * Some context information may also be provided into array property this->context.
    @@ -4639,6 +4728,7 @@ abstract class CommonObject
     	 */
     	function call_trigger($trigger_name, $user)
     	{
    +        // phpcs:enable
     		global $langs,$conf;
     
     		include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    @@ -4663,6 +4753,7 @@ abstract class CommonObject
     	/* Functions for extrafields */
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Function to get extra fields of an object into $this->array_options
     	 *  This method is in most cases called by method fetch of objects but you can call it separately.
    @@ -4673,6 +4764,7 @@ abstract class CommonObject
     	 */
     	function fetch_optionals($rowid=null, $optionsArray=null)
     	{
    +        // phpcs:enable
     		if (empty($rowid)) $rowid=$this->id;
     
     		// To avoid SQL errors. Probably not the better solution though
    @@ -5184,10 +5276,10 @@ abstract class CommonObject
     	 * @param  string  		$moreparam     To add more parameters on html input tag
     	 * @param  string  		$keysuffix     Prefix string to add into name and id of field (can be used to avoid duplicate names)
     	 * @param  string  		$keyprefix     Suffix string to add into name and id of field (can be used to avoid duplicate names)
    -	 * @param  string|int	$showsize      Value for css to define size. May also be a numeric.
    +	 * @param  string|int		$morecss       Value for css to define style/length of field. May also be a numeric.
     	 * @return string
     	 */
    -	function showInputField($val, $key, $value, $moreparam='', $keysuffix='', $keyprefix='', $showsize=0)
    +	function showInputField($val, $key, $value, $moreparam='', $keysuffix='', $keyprefix='', $morecss=0)
     	{
     		global $conf,$langs,$form;
     
    @@ -5197,38 +5289,51 @@ abstract class CommonObject
     			$form=new Form($this->db);
     		}
     
    +		$val=$this->fields[$key];
    +
    +		$out='';
    +        $type='';
    +        $param = array();
    +        $param['options']=array();
    +        $size =$this->fields[$key]['size'];
    +        // Because we work on extrafields
    +        if(preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)){
    +            $param['options']=array($reg[1].':'.$reg[2]=>'N');
    +            $type ='link';
    +        } elseif(preg_match('/^link:(.*):(.*)/i', $val['type'], $reg)) {
    +            $param['options']=array($reg[1].':'.$reg[2]=>'N');
    +            $type ='link';
    +        } elseif(preg_match('/^sellist:(.*):(.*):(.*):(.*)/i', $val['type'], $reg)) {
    +            $param['options']=array($reg[1].':'.$reg[2].':'.$reg[3].':'.$reg[4]=>'N');
    +            $type ='sellist';
    +        } elseif(preg_match('/varchar\((\d+)\)/', $val['type'],$reg)) {
    +            $param['options']=array();
    +            $type ='varchar';
    +            $size=$reg[1];
    +        } elseif(preg_match('/varchar/', $val['type'])) {
    +            $param['options']=array();
    +            $type ='varchar';
    +        } elseif(is_array($this->fields[$key]['arrayofkeyval'])) {
    +            $param['options']=$this->fields[$key]['arrayofkeyval'];
    +            $type ='select';
    +        } else {
    +            $param['options']=array();
    +            $type =$this->fields[$key]['type'];
    +        }
    +
    +		$label=$this->fields[$key]['label'];
    +		//$elementtype=$this->fields[$key]['elementtype'];	// Seems not used
    +		$default=$this->fields[$key]['default'];
    +		$computed=$this->fields[$key]['computed'];
    +		$unique=$this->fields[$key]['unique'];
    +		$required=$this->fields[$key]['required'];
    +
    +		$langfile=$this->fields[$key]['langfile'];
    +		$list=$this->fields[$key]['list'];
    +		$hidden=abs($this->fields[$key]['visible'])!=1?1:0;
    +
     		$objectid = $this->id;
     
    -		$label= $val['label'];
    -		$type = $val['type'];
    -		$size = $val['css'];
    -
    -		// Convert var to be able to share same code than showInputField of extrafields
    -		if (preg_match('/varchar\((\d+)\)/', $type, $reg))
    -		{
    -			$type = 'varchar';		// convert varchar(xx) int varchar
    -			$size = $reg[1];
    -		}
    -		elseif (preg_match('/varchar/', $type)) $type = 'varchar';		// convert varchar(xx) into varchar
    -		elseif (preg_match('/double/', $type)) $type = 'double';		// convert double(xx) into double
    -		if (is_array($val['arrayofkeyval'])) $type='select';
    -		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg)) $type='link';
    -
    -		$default=$val['default'];
    -		$computed=$val['computed'];
    -		$unique=$val['unique'];
    -		$required=$val['required'];
    -		$param=$val['param'];
    -		if (is_array($val['arrayofkeyval'])) $param['options'] = $val['arrayofkeyval'];
    -		if (preg_match('/^integer:(.*):(.*)/i', $val['type'], $reg))
    -		{
    -			$type='link';
    -			$param['options']=array($reg[1].':'.$reg[2]=>$reg[1].':'.$reg[2]);
    -		}
    -		$langfile=$val['langfile'];
    -		$list=$val['list'];
    -		$hidden=(abs($val['visible'])!=1 ? 1 : 0);
    -		$help=$val['help'];
     
     		if ($computed)
     		{
    @@ -5236,54 +5341,50 @@ abstract class CommonObject
     			else return '';
     		}
     
    +
     		// Use in priority showsize from parameters, then $val['css'] then autodefine
    -		if (empty($showsize) && ! empty($val['css']))
    +		if (empty($morecss) && ! empty($val['css']))
     		{
     			$showsize = $val['css'];
     		}
    -		if (empty($showsize))
    +		if (empty($morecss))
     		{
     			if ($type == 'date')
     			{
    -				//$showsize=10;
    -				$showsize = 'minwidth100imp';
    +				$morecss = 'minwidth100imp';
     			}
     			elseif ($type == 'datetime')
     			{
    -				//$showsize=19;
    -				$showsize = 'minwidth200imp';
    +				$morecss = 'minwidth200imp';
     			}
    -			elseif (in_array($type,array('int','double','price')))
    +			elseif (in_array($type,array('int','integer','price')) || preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
     			{
    -				//$showsize=10;
    -				$showsize = 'maxwidth75';
    -			}
    -			elseif ($type == 'url')
    +				$morecss = 'maxwidth75';
    +                        }elseif ($type == 'url')
     			{
    -				$showsize='minwidth400';
    +				$morecss='minwidth400';
     			}
     			elseif ($type == 'boolean')
     			{
    -				$showsize='';
    +				$morecss='';
     			}
     			else
     			{
     				if (round($size) < 12)
     				{
    -					$showsize = 'minwidth100';
    +					$morecss = 'minwidth100';
     				}
     				else if (round($size) <= 48)
     				{
    -					$showsize = 'minwidth200';
    +					$morecss = 'minwidth200';
     				}
     				else
     				{
    -					//$showsize=48;
    -					$showsize = 'minwidth400';
    +					$morecss = 'minwidth400';
     				}
     			}
     		}
    -		//var_dump($showsize.' '.$size);
    +
     		if (in_array($type,array('date','datetime')))
     		{
     			$tmp=explode(',',$size);
    @@ -5291,37 +5392,51 @@ abstract class CommonObject
     
     			$showtime = in_array($type,array('datetime')) ? 1 : 0;
     
    -			// Do not show current date when field not required (see select_date() method)
    +			// Do not show current date when field not required (see selectDate() method)
     			if (!$required && $value == '') $value = '-1';
     
     			// TODO Must also support $moreparam
    -			$out = $form->select_date($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, ($keyprefix != 'search_' ? 1 : 0), 1, 0, 1);
    +			$out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
     		}
     		elseif (in_array($type,array('int','integer')))
     		{
     			$tmp=explode(',',$size);
     			$newsize=$tmp[0];
    -			$out='<input type="text" class="flat '.$showsize.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$newsize.'" value="'.$value.'"'.($moreparam?$moreparam:'').'>';
    +			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$newsize.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
     		}
     		elseif (preg_match('/varchar/', $type))
     		{
    -			$out='<input type="text" class="flat '.$showsize.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$size.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
    +			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" maxlength="'.$size.'" value="'.dol_escape_htmltag($value).'"'.($moreparam?$moreparam:'').'>';
     		}
     		elseif (in_array($type, array('mail', 'phone', 'url')))
     		{
    -			$out='<input type="text" class="flat '.$showsize.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'>';
    +			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
     		}
     		elseif ($type == 'text')
     		{
    -			require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
    -			$doleditor=new DolEditor($keyprefix.$key.$keysuffix,$value,'',200,'dolibarr_notes','In',false,false,0,ROWS_5,'90%');
    -			$out=$doleditor->Create(1);
    +			if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
    +			{
    +				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
    +				$doleditor=new DolEditor($keyprefix.$key.$keysuffix,$value,'',200,'dolibarr_notes','In',false,false,false,ROWS_5,'90%');
    +				$out=$doleditor->Create(1);
    +			}
    +			else
    +			{
    +				$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
    +			}
     		}
     		elseif ($type == 'html')
     		{
    -			require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
    -			$doleditor=new DolEditor($keyprefix.$key.$keysuffix,$value,'',200,'dolibarr_notes','In',false,false,! empty($conf->fckeditor->enabled) && $conf->global->FCKEDITOR_ENABLE_SOCIETE,ROWS_5,'90%');
    -			$out=$doleditor->Create(1);
    +			if (! preg_match('/search_/', $keyprefix))		// If keyprefix is search_ or search_options_, we must just use a simple text field
    +			{
    +				require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
    +				$doleditor=new DolEditor($keyprefix.$key.$keysuffix,$value,'',200,'dolibarr_notes','In',false,false,! empty($conf->fckeditor->enabled) && $conf->global->FCKEDITOR_ENABLE_SOCIETE,ROWS_5,'90%');
    +				$out=$doleditor->Create(1);
    +			}
    +			else
    +			{
    +				$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.dol_escape_htmltag($value).'" '.($moreparam?$moreparam:'').'>';
    +			}
     		}
     		elseif ($type == 'boolean')
     		{
    @@ -5331,21 +5446,21 @@ abstract class CommonObject
     			} else {
     				$checked=' value="1" ';
     			}
    -			$out='<input type="checkbox" class="flat '.$showsize.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.$checked.' '.($moreparam?$moreparam:'').'>';
    +			$out='<input type="checkbox" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.$checked.' '.($moreparam?$moreparam:'').'>';
     		}
     		elseif ($type == 'price')
     		{
     			if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
     				$value=price($value);
     			}
    -			$out='<input type="text" class="flat '.$showsize.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'> '.$langs->getCurrencySymbol($conf->currency);
    +			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'> '.$langs->getCurrencySymbol($conf->currency);
     		}
    -		elseif ($type == 'double')
    +		elseif (preg_match('/^double(\([0-9],[0-9]\)){0,1}/',$type))
     		{
     			if (!empty($value)) {		// $value in memory is a php numeric, we format it into user number format.
     				$value=price($value);
     			}
    -			$out='<input type="text" class="flat '.$showsize.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'> ';
    +			$out='<input type="text" class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'> ';
     		}
     		elseif ($type == 'select')
     		{
    @@ -5356,8 +5471,8 @@ abstract class CommonObject
     				$out.= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
     			}
     
    -			$out.='<select class="flat '.$showsize.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
    -			if ((! isset($val['default'])) || ($val['notnull'] != 1)) $out.='<option value="0">&nbsp;</option>';
    +			$out.='<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
    +                if((! isset($this->fields[$key]['default'])) ||($this->fields[$key]['notnull']!=1))$out.='<option value="0">&nbsp;</option>';
     			foreach ($param['options'] as $key => $val)
     			{
     				if ((string) $key == '') continue;
    @@ -5378,11 +5493,13 @@ abstract class CommonObject
     				$out.= ajax_combobox($keyprefix.$key.$keysuffix, array(), 0);
     			}
     
    -			$out.='<select class="flat '.$showsize.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
    +			$out.='<select class="flat '.$morecss.' maxwidthonsmartphone" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'').'>';
     			if (is_array($param['options']))
     			{
     				$param_list=array_keys($param['options']);
     				$InfoFieldList = explode(":", $param_list[0]);
    +				$parentName='';
    +				$parentField='';
     				// 0 : tableName
     				// 1 : label field name
     				// 2 : key fields name (if differ of rowid)
    @@ -5467,8 +5584,9 @@ abstract class CommonObject
     						$obj = $this->db->fetch_object($resql);
     
     						// Several field into label (eq table:code|libelle:rowid)
    +						$notrans = false;
     						$fields_label = explode('|',$InfoFieldList[1]);
    -						if(is_array($fields_label))
    +						if (is_array($fields_label))
     						{
     							$notrans = true;
     							foreach ($fields_label as $field_toshow)
    @@ -5482,7 +5600,7 @@ abstract class CommonObject
     						}
     						$labeltoshow=dol_trunc($labeltoshow,45);
     
    -						if ($value==$obj->rowid)
    +						if ($value == $obj->rowid)
     						{
     							foreach ($fields_label as $field_toshow)
     							{
    @@ -5497,7 +5615,7 @@ abstract class CommonObject
     						}
     						else
     						{
    -							if(!$notrans)
    +							if (! $notrans)
     							{
     								$translabel=$langs->trans($obj->{$InfoFieldList[1]});
     								if ($translabel!=$obj->{$InfoFieldList[1]}) {
    @@ -5513,7 +5631,7 @@ abstract class CommonObject
     								$out.='<option value="'.$obj->rowid.'" selected>'.$labeltoshow.'</option>';
     							}
     
    -							if (!empty($InfoFieldList[3]))
    +							if (!empty($InfoFieldList[3]) && $parentField)
     							{
     								$parent = $parentName.':'.$obj->{$parentField};
     							}
    @@ -5544,7 +5662,7 @@ abstract class CommonObject
     			$out='';
     			foreach ($param['options'] as $keyopt => $val)
     			{
    -				$out.='<input class="flat '.$showsize.'" type="radio" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'');
    +				$out.='<input class="flat '.$morecss.'" type="radio" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" '.($moreparam?$moreparam:'');
     				$out.=' value="'.$keyopt.'"';
     				$out.=' id="'.$keyprefix.$key.$keysuffix.'_'.$keyopt.'"';
     				$out.= ($value==$keyopt?'checked':'');
    @@ -5563,6 +5681,8 @@ abstract class CommonObject
     			if (is_array($param['options'])) {
     				$param_list = array_keys($param['options']);
     				$InfoFieldList = explode(":", $param_list[0]);
    +				$parentName='';
    +				$parentField='';
     				// 0 : tableName
     				// 1 : label field name
     				// 2 : key fields name (if differ of rowid)
    @@ -5636,6 +5756,7 @@ abstract class CommonObject
     						$labeltoshow = '';
     						$obj = $this->db->fetch_object($resql);
     
    +						$notrans = false;
     						// Several field into label (eq table:code|libelle:rowid)
     						$fields_label = explode('|', $InfoFieldList[1]);
     						if (is_array($fields_label)) {
    @@ -5659,7 +5780,6 @@ abstract class CommonObject
     							}
     
     							$data[$obj->rowid]=$labeltoshow;
    -
     						} else {
     							if (! $notrans) {
     								$translabel = $langs->trans($obj->{$InfoFieldList[1]});
    @@ -5676,7 +5796,7 @@ abstract class CommonObject
     									$data[$obj->rowid]=$labeltoshow;
     								}
     
    -								if (! empty($InfoFieldList[3])) {
    +								if (! empty($InfoFieldList[3]) && $parentField) {
     									$parent = $parentName . ':' . $obj->{$parentField};
     								}
     
    @@ -5688,23 +5808,21 @@ abstract class CommonObject
     					$this->db->free($resql);
     
     					$out=$form->multiselectarray($keyprefix.$key.$keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
    -
     				} else {
     					print 'Error in request ' . $sql . ' ' . $this->db->lasterror() . '. Check setup of extra parameters.<br>';
     				}
     			}
    -			$out .= '</select>';
     		}
     		elseif ($type == 'link')
     		{
     			$param_list=array_keys($param['options']);				// $param_list='ObjectName:classPath'
    -			$showempty=(($val['notnull'] == 1 && $val['default'] != '')?0:1);
    +			$showempty=(($required && $default != '')?0:1);
     			$out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty);
     		}
     		elseif ($type == 'password')
     		{
     			// If prefix is 'search_', field is used as a filter, we use a common text field.
    -			$out='<input type="'.($keyprefix=='search_'?'text':'password').'" class="flat '.$showsize.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'>';
    +			$out='<input type="'.($keyprefix=='search_'?'text':'password').'" class="flat '.$morecss.'" name="'.$keyprefix.$key.$keysuffix.'" id="'.$keyprefix.$key.$keysuffix.'" value="'.$value.'" '.($moreparam?$moreparam:'').'>';
     		}
     		elseif ($type == 'array')
     		{
    @@ -5751,7 +5869,6 @@ abstract class CommonObject
     		return $out;
     	}
     
    -
     	/**
     	 * Return HTML string to show a field into a page
     	 * Code very similar with showOutputField of extra fields
    @@ -6070,7 +6187,6 @@ abstract class CommonObject
     					}
     				}
     				$value='<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
    -
     			} else {
     				dol_syslog(get_class($this) . '::showOutputField error ' . $this->db->lasterror(), LOG_WARNING);
     			}
    @@ -6087,6 +6203,7 @@ abstract class CommonObject
     				$InfoFieldList = explode(":", $param_list[0]);
     				$classname=$InfoFieldList[0];
     				$classpath=$InfoFieldList[1];
    +				$getnomurlparam=(empty($InfoFieldList[2]) ? 3 : $InfoFieldList[2]);
     				if (! empty($classpath))
     				{
     					dol_include_once($InfoFieldList[1]);
    @@ -6094,7 +6211,7 @@ abstract class CommonObject
     					{
     						$object = new $classname($this->db);
     						$object->fetch($value);
    -						$value=$object->getNomUrl(3);
    +						$value=$object->getNomUrl($getnomurlparam);
     					}
     				}
     				else
    @@ -6103,6 +6220,7 @@ abstract class CommonObject
     					return 'Error bad setup of extrafield';
     				}
     			}
    +			else $value='';
     		}
     		elseif ($type == 'text' || $type == 'html')
     		{
    @@ -6129,7 +6247,7 @@ abstract class CommonObject
     	 *
     	 * @param 	Extrafields $extrafields    Extrafield Object
     	 * @param 	string      $mode           Show output (view) or input (edit) for extrafield
    -	 * @param 	array       $params         Optional parameters
    +	 * @param 	array       $params         Optional parameters. Example: array('style'=>'class="oddeven"', 'colspan'=>$colspan)
     	 * @param 	string      $keysuffix      Suffix string to add after name and id of field (can be used to avoid duplicate names)
     	 * @param 	string      $keyprefix      Prefix string to add before name and id of field (can be used to avoid duplicate names)
     	 * @param	string		$onetrtd		All fields in same tr td
    @@ -6152,6 +6270,9 @@ abstract class CommonObject
     			$e = 0;
     			foreach($extrafields->attributes[$this->table_element]['label'] as $key=>$label)
     			{
    +				//Show only the key field in params
    +				if (is_array($params) && array_key_exists('onlykey',$params) && $key != $params['onlykey']) continue;
    +
     				$enabled = 1;
     				if ($enabled && isset($extrafields->attributes[$this->table_element]['list'][$key]))
     				{
    @@ -6438,6 +6559,7 @@ abstract class CommonObject
     		return $buyPrice;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show photos of an object (nbmax maximum), into several columns
     	 *
    @@ -6457,6 +6579,7 @@ abstract class CommonObject
     	 */
     	function show_photos($modulepart, $sdir, $size=0, $nbmax=0, $nbbyrow=5, $showfilename=0, $showaction=0, $maxHeight=120, $maxWidth=160, $nolink=0, $notitle=0, $usesharelink=0)
     	{
    +        // phpcs:enable
     		global $conf,$user,$langs;
     
     		include_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php';
    @@ -6851,6 +6974,7 @@ abstract class CommonObject
     	 * Function to load data from a SQL pointer into properties of current object $this
     	 *
     	 * @param   stdClass    $obj    Contain data of object from database
    +     * @return void
     	 */
     	protected function setVarsFromFetchObj(&$obj)
     	{
    @@ -6914,7 +7038,8 @@ abstract class CommonObject
     	 * @param	array		$fieldsentry	Properties of field
     	 * @return 	string
     	 */
    -	protected function quote($value, $fieldsentry) {
    +    protected function quote($value, $fieldsentry)
    +    {
     		if (is_null($value)) return 'NULL';
     		else if (preg_match('/^(int|double|real)/i', $fieldsentry['type'])) return $this->db->escape("$value");
     		else return "'".$this->db->escape($value)."'";
    @@ -7229,7 +7354,7 @@ abstract class CommonObject
     		$comment = new Comment($this->db);
     		$result=$comment->fetchAllFor($this->element, $this->id);
     		if ($result<0) {
    -			$this->errors=array_merge($this->errors,$comment->errors);
    +			$this->errors=array_merge($this->errors, $comment->errors);
     			return -1;
     		} else {
     			$this->comments = $comment->comments;
    @@ -7247,4 +7372,19 @@ abstract class CommonObject
     		return count($this->comments);
     	}
     
    +    /**
    +     * Trim object parameters
    +     * @param string[] $parameters array of parameters to trim
    +     *
    +     * @return void
    +     */
    +    public function trimParameters($parameters)
    +    {
    +        if (!is_array($parameters)) return;
    +        foreach ($parameters as $parameter) {
    +            if (isset($this->$parameter)) {
    +                $this->$parameter = trim($this->$parameter);
    +            }
    +        }
    +    }
     }
    diff --git a/htdocs/core/class/commonobjectline.class.php b/htdocs/core/class/commonobjectline.class.php
    index bed227eb408..91d4245ff88 100644
    --- a/htdocs/core/class/commonobjectline.class.php
    +++ b/htdocs/core/class/commonobjectline.class.php
    @@ -53,7 +53,7 @@ abstract class CommonObjectLine extends CommonObject
         /**
          *	Returns the translation key from units dictionary.
          *  A langs->trans() must be called on result to get translated value.
    -     *  
    +     *
          * 	@param	string $type Label type (long or short)
          *	@return	string|int <0 if ko, label if ok
          */
    @@ -94,4 +94,3 @@ abstract class CommonObjectLine extends CommonObject
     
     	// For the moment we use the extends on CommonObject until PHP min is 5.4 so use Traits.
     }
    -
    diff --git a/htdocs/core/class/commonorder.class.php b/htdocs/core/class/commonorder.class.php
    index b3e5033330d..199b29b87cd 100644
    --- a/htdocs/core/class/commonorder.class.php
    +++ b/htdocs/core/class/commonorder.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -144,6 +144,5 @@ abstract class CommonOrderLine extends CommonObjectLine
     	public $info_bits = 0;
     
     	public $special_code = 0;
    -
     }
     
    diff --git a/htdocs/core/class/commonstickergenerator.class.php b/htdocs/core/class/commonstickergenerator.class.php
    index 1091962f6ea..d5bf6f3317e 100644
    --- a/htdocs/core/class/commonstickergenerator.class.php
    +++ b/htdocs/core/class/commonstickergenerator.class.php
    @@ -1,10 +1,10 @@
     <?php
    -/* Copyright (C) 2003 Steve Dillon
    - * Copyright (C) 2003 Laurent Passebecq
    +/* Copyright (C) 2003      Steve Dillon
    + * Copyright (C) 2003      Laurent Passebecq
      * Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
      * Copyright (C) 2006-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2015 Francis Appels  <francis.appels@yahoo.com>
    + * Copyright (C) 2015      Francis Appels  <francis.appels@yahoo.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -61,9 +61,12 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php';
      */
     abstract class CommonStickerGenerator
     {
    +	public $code;   // Code of format
     
    -	public $code;		// Code of format
    -	public $format;	// Array with informations
    +	/**
    +     * @var array format Array with informations
    +     */
    +    public $format;
     
     	// protected
     	var $_Avery_Name	= '';	// Nom du format de l'etiquette
    @@ -93,7 +96,8 @@ abstract class CommonStickerGenerator
     	{
     		$this->db = $db;
     	}
    -		
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Function to build PDF on disk, then output on HTTP strem.
     	 *
    @@ -104,6 +108,7 @@ abstract class CommonStickerGenerator
     	 *  @return int             				1=OK, 0=KO
     	 */
     	abstract function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='');
    +    // phpcs:enable
     
     	/**
     	 * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0)
    @@ -114,7 +119,8 @@ abstract class CommonStickerGenerator
     	 * @return  void
     	 */
     	abstract function addSticker(&$pdf,$outputlangs,$param);
    -	
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Methode qui permet de modifier la taille des caracteres
     	 * Cela modiera aussi l'espace entre chaque ligne
    @@ -125,13 +131,15 @@ abstract class CommonStickerGenerator
     	 */
     	function Set_Char_Size(&$pdf,$pt)
     	{
    +        // phpcs:enable
     		if ($pt > 3) {
     			$this->_Char_Size = $pt;
     			$this->_Line_Height = $this->_Get_Height_Chars($pt);
     			$pdf->SetFont('','',$pt);
     		}
    -	}	
    +	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * protected Print dot line
     	 *
    @@ -146,6 +154,7 @@ abstract class CommonStickerGenerator
     	 */
         function _Pointille(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$nbPointilles=15)
     	{
    +        // phpcs:enable
     		$pdf->SetLineWidth($epaisseur);
     		$length=abs($x1-$x2);
     		$hauteur=abs($y1-$y2);
    @@ -173,6 +182,7 @@ abstract class CommonStickerGenerator
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * protected Function realisant une croix aux 4 coins des cartes
     	 *
    @@ -187,6 +197,7 @@ abstract class CommonStickerGenerator
     	 */
     	function _Croix(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$taille=4)
     	{
    +        // phpcs:enable
     		$pdf->SetDrawColor(192,192,192);
     
     		$pdf->SetLineWidth($epaisseur);
    @@ -208,25 +219,28 @@ abstract class CommonStickerGenerator
     	}
     
     	/**
    -	 * protected Convert units (in to mm, mm to in)
    +	 * Convert units (in to mm, mm to in)
     	 * $src and $dest must be 'in' or 'mm'
     	 *
     	 * @param int       $value  value
    -	 * @param string    $src    from
    -	 * @param string    $dest   to
    +	 * @param string    $src    from ('in' or 'mm')
    +	 * @param string    $dest   to ('in' or 'mm')
     	 * @return float    value   value after conversion
     	 */
    -	function _Convert_Metric ($value, $src, $dest)
    +	private function convertMetric($value, $src, $dest)
     	{
     		if ($src != $dest) {
    -			$tab['in'] = 39.37008;
    -			$tab['mm'] = 1000;
    +			$tab = array(
    +				'in'=>39.37008,
    +				'mm'=>1000
    +			);
     			return $value * $tab[$dest] / $tab[$src];
    -		} else {
    -			return $value;
     		}
    +
    +		return $value;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * protected Give the height for a char size given.
     	 *
    @@ -235,6 +249,7 @@ abstract class CommonStickerGenerator
     	 */
     	function _Get_Height_Chars($pt)
     	{
    +        // phpcs:enable
     		// Tableau de concordance entre la hauteur des caracteres et de l'espacement entre les lignes
     		$_Table_Hauteur_Chars = array(6=>2, 7=>2.5, 8=>3, 9=>3.5, 10=>4, 11=>6, 12=>7, 13=>8, 14=>9, 15=>10);
     		if (in_array($pt, array_keys($_Table_Hauteur_Chars))) {
    @@ -244,6 +259,7 @@ abstract class CommonStickerGenerator
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * protected Set format
     	 *
    @@ -251,20 +267,20 @@ abstract class CommonStickerGenerator
     	 * @param    string    $format  Format
     	 * @return   void
     	 */
    -	function _Set_Format(&$pdf, $format)  
    +	function _Set_Format(&$pdf, $format)
     	{
    -		$this->_Metric 	= $format['metric'];
    -		$this->_Avery_Name 	= $format['name'];
    -		$this->_Avery_Code	= $format['code'];
    -		$this->_Margin_Left	= $this->_Convert_Metric($format['marginLeft'], $this->_Metric, $this->_Metric_Doc);
    -		$this->_Margin_Top	= $this->_Convert_Metric($format['marginTop'], $this->_Metric, $this->_Metric_Doc);
    -		$this->_X_Space 	= $this->_Convert_Metric($format['SpaceX'], $this->_Metric, $this->_Metric_Doc);
    -		$this->_Y_Space 	= $this->_Convert_Metric($format['SpaceY'], $this->_Metric, $this->_Metric_Doc);
    -		$this->_X_Number 	= $format['NX'];
    -		$this->_Y_Number 	= $format['NY'];
    -		$this->_Width 	= $this->_Convert_Metric($format['width'], $this->_Metric, $this->_Metric_Doc);
    -		$this->_Height	= $this->_Convert_Metric($format['height'], $this->_Metric, $this->_Metric_Doc);
    +        // phpcs:enable
    +		$this->_Metric = $format['metric'];
    +		$this->_Avery_Name = $format['name'];
    +		$this->_Avery_Code = $format['code'];
    +		$this->_Margin_Left	= $this->convertMetric($format['marginLeft'], $this->_Metric, $this->_Metric_Doc);
    +		$this->_Margin_Top = $this->convertMetric($format['marginTop'], $this->_Metric, $this->_Metric_Doc);
    +		$this->_X_Space = $this->convertMetric($format['SpaceX'], $this->_Metric, $this->_Metric_Doc);
    +		$this->_Y_Space = $this->convertMetric($format['SpaceY'], $this->_Metric, $this->_Metric_Doc);
    +		$this->_X_Number = $format['NX'];
    +		$this->_Y_Number = $format['NY'];
    +		$this->_Width = $this->convertMetric($format['width'], $this->_Metric, $this->_Metric_Doc);
    +		$this->_Height = $this->convertMetric($format['height'], $this->_Metric, $this->_Metric_Doc);
     		$this->Set_Char_Size($pdf, $format['font-size']);
     	}
    -
     }
    diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php
    index 4a76abff06f..c9669fc5ca9 100644
    --- a/htdocs/core/class/conf.class.php
    +++ b/htdocs/core/class/conf.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Xavier Dutoit        <doli@sydesy.com>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017 Regis Houssin      	<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017 Regis Houssin      	<regis.houssin@inodbox.com>
      * Copyright (C) 2006 	   Jean Heimburger    	<jean@tiaris.info>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -35,8 +35,12 @@ class Conf
     	/** \public */
     	//! To store properties found in conf file
     	var $file;
    -	//! Object with database handler
    -	var $db;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
     	//! To store properties found into database
     	var $global;
     	//! To store browser info
    @@ -178,7 +182,7 @@ class Conf
     							if (is_array($arrValue) && ! empty($arrValue)) $value = $arrValue;
     							else if (in_array($partname,array('login','menus','substitutions','triggers','tpl'))) $value = '/'.$modulename.'/core/'.$partname.'/';
     							else if (in_array($partname,array('models','theme'))) $value = '/'.$modulename.'/';
    -							else if (in_array($partname,array('sms'))) $value = $modulename;
    +							else if (in_array($partname,array('sms'))) $value = '/'.$modulename.'/';
     							else if ($value == 1) $value = '/'.$modulename.'/core/modules/'.$partname.'/';	// ex: partname = societe
     							$this->modules_parts[$partname] = array_merge($this->modules_parts[$partname], array($modulename => $value));	// $value may be a string or an array
     						}
    @@ -344,32 +348,46 @@ class Conf
     		if (! empty($this->fournisseur))
     		{
     			$this->fournisseur->commande=new stdClass();
    -			$this->fournisseur->commande->dir_output=$rootfordata."/fournisseur/commande";
    -			$this->fournisseur->commande->dir_temp  =$rootfordata."/fournisseur/commande/temp";
    +			$this->fournisseur->commande->multidir_output=array($this->entity => $rootfordata."/fournisseur/commande");
    +			$this->fournisseur->commande->multidir_temp  =array($this->entity => $rootfordata."/fournisseur/commande/temp");
    +			$this->fournisseur->commande->dir_output=$rootfordata."/fournisseur/commande";		// For backward compatibility
    +			$this->fournisseur->commande->dir_temp  =$rootfordata."/fournisseur/commande/temp";	// For backward compatibility
     			$this->fournisseur->facture=new stdClass();
    -			$this->fournisseur->facture->dir_output =$rootfordata."/fournisseur/facture";
    -			$this->fournisseur->facture->dir_temp   =$rootfordata."/fournisseur/facture/temp";
    +			$this->fournisseur->facture->multidir_output=array($this->entity => $rootfordata."/fournisseur/facture");
    +			$this->fournisseur->facture->multidir_temp  =array($this->entity => $rootfordata."/fournisseur/facture/temp");
    +			$this->fournisseur->facture->dir_output =$rootfordata."/fournisseur/facture";		// For backward compatibility
    +			$this->fournisseur->facture->dir_temp   =$rootfordata."/fournisseur/facture/temp";	// For backward compatibility
     			$this->supplierproposal=new stdClass();
    -			$this->supplierproposal->dir_output=$rootfordata."/supplier_proposal";
    -			$this->supplierproposal->dir_temp=$rootfordata."/supplier_proposal/temp";
    +			$this->supplierproposal->multidir_output=array($this->entity => $rootfordata."/supplier_proposal");
    +			$this->supplierproposal->multidir_temp  =array($this->entity => $rootfordata."/supplier_proposal/temp");
    +			$this->supplierproposal->dir_output=$rootfordata."/supplier_proposal";				// For backward compatibility
    +			$this->supplierproposal->dir_temp=$rootfordata."/supplier_proposal/temp";			// For backward compatibility
     			$this->fournisseur->payment=new stdClass();
    -			$this->fournisseur->payment->dir_output =$rootfordata."/fournisseur/payment";
    -			$this->fournisseur->payment->dir_temp   =$rootfordata."/fournisseur/payment/temp";
    +			$this->fournisseur->payment->multidir_output=array($this->entity => $rootfordata."/fournisseur/payment");
    +			$this->fournisseur->payment->multidir_temp  =array($this->entity => $rootfordata."/fournisseur/payment/temp");
    +			$this->fournisseur->payment->dir_output =$rootfordata."/fournisseur/payment";		// For backward compatibility
    +			$this->fournisseur->payment->dir_temp   =$rootfordata."/fournisseur/payment/temp";	// For backward compatibility
     
     			// To prepare split of module fournisseur into fournisseur + supplier_order + supplier_invoice
     			if (! empty($this->fournisseur->enabled) && empty($this->global->MAIN_USE_NEW_SUPPLIERMOD))  // By default, if module supplier is on, we set new properties
     			{
         			$this->supplier_order=new stdClass();
         			$this->supplier_order->enabled=1;
    -    			$this->supplier_order->dir_output=$rootfordata."/fournisseur/commande";
    -    			$this->supplier_order->dir_temp=$rootfordata."/fournisseur/commande/temp";
    +    			$this->supplier_order->multidir_output=array($this->entity => $rootfordata."/fournisseur/commande");
    +    			$this->supplier_order->multidir_temp  =array($this->entity => $rootfordata."/fournisseur/commande/temp");
    +    			$this->supplier_order->dir_output=$rootfordata."/fournisseur/commande";			// For backward compatibility
    +    			$this->supplier_order->dir_temp=$rootfordata."/fournisseur/commande/temp";		// For backward compatibility
         			$this->supplier_invoice=new stdClass();
         			$this->supplier_invoice->enabled=1;
    -    			$this->supplier_invoice->dir_output=$rootfordata."/fournisseur/facture";
    -    			$this->supplier_invoice->dir_temp=$rootfordata."/fournisseur/facture/temp";
    +    			$this->supplier_invoice->multidir_output=array($this->entity => $rootfordata."/fournisseur/facture");
    +    			$this->supplier_invoice->multidir_temp  =array($this->entity => $rootfordata."/fournisseur/facture/temp");
    +    			$this->supplier_invoice->dir_output=$rootfordata."/fournisseur/facture";		// For backward compatibility
    +    			$this->supplier_invoice->dir_temp=$rootfordata."/fournisseur/facture/temp";		// For backward compatibility
         			$this->supplierproposal=new stdClass();
    -    			$this->supplierproposal->dir_output=$rootfordata."/supplier_proposal";
    -    			$this->supplierproposal->dir_temp=$rootfordata."/supplier_proposal/temp";
    +    			$this->supplierproposal->multidir_output=array($this->entity => $rootfordata."/supplier_proposal");
    +    			$this->supplierproposal->multidir_temp  =array($this->entity => $rootfordata."/supplier_proposal/temp");
    +    			$this->supplierproposal->dir_output=$rootfordata."/supplier_proposal";			// For backward compatibility
    +    			$this->supplierproposal->dir_temp=$rootfordata."/supplier_proposal/temp";		// For backward compatibility
     			}
     		}
     
    @@ -665,7 +683,6 @@ class Conf
     				$this->loghandlers[$handler] = $loghandlerinstance;
     			}
     		}
    -
     	}
     }
     
    diff --git a/htdocs/core/class/coreobject.class.php b/htdocs/core/class/coreobject.class.php
    index 1456fb991c2..5129ac54ece 100644
    --- a/htdocs/core/class/coreobject.class.php
    +++ b/htdocs/core/class/coreobject.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* EXPERIMENTAL
    - * 
    + *
      * Copyright (C) 2016		ATM Consulting			<support@atm-consulting.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -22,7 +22,7 @@
      *	\ingroup    core
      *	\brief      File of class to manage all object. Might be replace or merge into commonobject
      */
    - 
    +
     require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
     
     class CoreObject extends CommonObject
    @@ -54,7 +54,7 @@ class CoreObject extends CommonObject
     		$this->id = 0;
     		$this->datec = 0;
     		$this->tms = 0;
    -		
    +
     		if (!empty($this->fields))
     		{
     			foreach ($this->fields as $field=>$info)
    @@ -68,14 +68,13 @@ class CoreObject extends CommonObject
     
                 $this->to_delete=false;
                 $this->is_clone=false;
    -			
    +
     			return true;
     		}
     		else
             {
     			return false;
     		}
    -			
     	}
     
         /**
    @@ -110,7 +109,7 @@ class CoreObject extends CommonObject
         	if($res>0) {
         		if ($loadChild) $this->fetchChild();
         	}
    -    	
    +
         	return $res;
     	}
     
    @@ -133,14 +132,14 @@ class CoreObject extends CommonObject
     				if($object->{$key} === $id) return $k;
     			}
     		}
    -	
    +
     		$k = count($this->{$tabName});
    -	
    +
     		$className = ucfirst($tabName);
     		$this->{$tabName}[$k] = new $className($this->db);
     		if($id>0 && $key==='id' && $try_to_load)
     		{
    -			$this->{$tabName}[$k]->fetch($id); 
    +			$this->{$tabName}[$k]->fetch($id);
     		}
     
     		return $k;
    @@ -171,6 +170,8 @@ class CoreObject extends CommonObject
     
         /**
          * Function to fetch children objects
    +     *
    +     * @return void
          */
         public function fetchChild()
         {
    @@ -207,6 +208,7 @@ class CoreObject extends CommonObject
          * Function to update children data
          *
          * @param   User    $user   user object
    +     * @return void
          */
     	public function saveChild(User &$user)
         {
    @@ -220,7 +222,7 @@ class CoreObject extends CommonObject
     					foreach($this->{$className} as $i => &$object)
     					{
     						$object->{$this->fk_element} = $this->id;
    -						
    +
     						$object->update($user);
     						if($this->unsetChildDeleted && isset($object->to_delete) && $object->to_delete==true) unset($this->{$className}[$i]);
     					}
    @@ -268,7 +270,6 @@ class CoreObject extends CommonObject
                 $this->db->rollback();
                 return -1;
             }
    -
     	}
     
         /**
    @@ -434,5 +435,4 @@ class CoreObject extends CommonObject
     
     		return 1;
     	}
    -
     }
    diff --git a/htdocs/core/class/cstate.class.php b/htdocs/core/class/cstate.class.php
    index ae2adde87d4..4320446d7b5 100644
    --- a/htdocs/core/class/cstate.class.php
    +++ b/htdocs/core/class/cstate.class.php
    @@ -32,16 +32,44 @@
      */
     class Cstate // extends CommonObject
     {
    -	var $db;							//!< To store db handler
    -	var $error;							//!< To return error code (or message)
    -	var $errors=array();				//!< To return several error codes (or messages)
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
     	//var $element='cstate';			//!< Id that identify managed objects
     	//var $table_element='cstate';	    //!< Name of table without prefix where object is stored
     
    -    var $id;
    -	var $code_departement;
    -	var $nom;
    -	var $active;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	public $code_departement;
    +
    +	/**
    +	 * @var string
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='';
    +
    +	/**
    +	 * @var string name
    +	 */
    +	public $name='';
    +
    +	public $active;
     
     
     
    @@ -54,7 +82,6 @@ class Cstate // extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -301,5 +328,4 @@ class Cstate // extends CommonObject
     			return 1;
     		}
     	}
    -
     }
    diff --git a/htdocs/core/class/ctypent.class.php b/htdocs/core/class/ctypent.class.php
    index b3bb750bd80..db8ed461727 100644
    --- a/htdocs/core/class/ctypent.class.php
    +++ b/htdocs/core/class/ctypent.class.php
    @@ -27,17 +27,33 @@
      */
     class Ctypent // extends CommonObject
     {
    -	var $db;							//!< To store db handler
    -	var $error;							//!< To return error code (or message)
    -	var $errors=array();				//!< To return several error codes (or messages)
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
     	//var $element='ctypent';			//!< Id that identify managed objects
     	//var $table_element='ctypent';	//!< Name of table without prefix where object is stored
     
    -    var $id;
    -	var $code;
    -	var $libelle;
    -	var $active;
    -	var $module;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	public $code;
    +	public $libelle;
    +	public $active;
    +	public $module;
     
     
     
    @@ -50,7 +66,6 @@ class Ctypent // extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -317,5 +332,4 @@ class Ctypent // extends CommonObject
     			return 1;
     		}
     	}
    -
     }
    diff --git a/htdocs/core/class/ctyperesource.class.php b/htdocs/core/class/ctyperesource.class.php
    index a5a6ea879ce..f4e74128747 100644
    --- a/htdocs/core/class/ctyperesource.class.php
    +++ b/htdocs/core/class/ctyperesource.class.php
    @@ -19,7 +19,7 @@
      */
     
     /**
    - * \file    resource/ctyperesource.class.php
    + * \file    htdocs/core/class/ctyperesource.class.php
      * \ingroup resource
      */
     
    @@ -36,6 +36,7 @@ class Ctyperesource
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'ctyperesource';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
    @@ -46,15 +47,14 @@ class Ctyperesource
     	 */
     	public $lines = array();
     
    -	/**
    -	 */
    -
     	public $code;
    -	public $label;
    -	public $active;
     
     	/**
    -	 */
    +     * @var string Type resource label
    +     */
    +    public $label;
    +
    +	public $active;
     
     
     	/**
    @@ -127,15 +127,15 @@ class Ctyperesource
     		if (!$error) {
     			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
     
    -			if (!$notrigger) {
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action to call a trigger.
    +			// Uncomment this and change MYOBJECT to your own tag if you
    +			// want this action to call a trigger.
    +			//if (!$notrigger) {
     
    -				//// Call triggers
    -				//$result=$this->call_trigger('MYOBJECT_CREATE',$user);
    -				//if ($result < 0) $error++;
    -				//// End call triggers
    -			}
    +			//  // Call triggers
    +			//  $result=$this->call_trigger('MYOBJECT_CREATE',$user);
    +			//  if ($result < 0) $error++;
    +			//  // End call triggers
    +			//}
     		}
     
     		// Commit or rollback
    @@ -188,8 +188,6 @@ class Ctyperesource
     				$this->code = $obj->code;
     				$this->label = $obj->label;
     				$this->active = $obj->active;
    -
    -
     			}
     
     			// Retrieve all extrafields for invoice
    @@ -269,8 +267,6 @@ class Ctyperesource
     				$line->code = $obj->code;
     				$line->label = $obj->label;
     				$line->active = $obj->active;
    -
    -
     			}
     			$this->db->free($resql);
     
    @@ -331,15 +327,15 @@ class Ctyperesource
     			dol_syslog(__METHOD__ . ' ' . implode(',', $this->errors), LOG_ERR);
     		}
     
    -		if (!$error && !$notrigger) {
    -			// Uncomment this and change MYOBJECT to your own tag if you
    -			// want this action calls a trigger.
    +		// Uncomment this and change MYOBJECT to your own tag if you
    +		// want this action calls a trigger.
    +		//if (!$error && !$notrigger) {
     
    -			//// Call triggers
    -			//$result=$this->call_trigger('MYOBJECT_MODIFY',$user);
    -			//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    -			//// End call triggers
    -		}
    +		//  // Call triggers
    +		//  $result=$this->call_trigger('MYOBJECT_MODIFY',$user);
    +		//  if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    +		//  // End call triggers
    +		//}
     
     		// Commit or rollback
     		if ($error) {
    @@ -369,17 +365,15 @@ class Ctyperesource
     
     		$this->db->begin();
     
    -		if (!$error) {
    -			if (!$notrigger) {
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action calls a trigger.
    +		// Uncomment this and change MYOBJECT to your own tag if you
    +		// want this action calls a trigger.
    +		//if (!$error && !$notrigger) {
     
    -				//// Call triggers
    -				//$result=$this->call_trigger('MYOBJECT_DELETE',$user);
    -				//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    -				//// End call triggers
    -			}
    -		}
    +		//  // Call triggers
    +		//  $result=$this->call_trigger('MYOBJECT_DELETE',$user);
    +		//  if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
    +		//  // End call triggers
    +		//}
     
     		// If you need to delete child tables to, you can insert them here
     
    @@ -468,7 +462,6 @@ class Ctyperesource
     		$this->label = '';
     		$this->active = '';
     	}
    -
     }
     
     /**
    @@ -480,16 +473,20 @@ class CtyperesourceLine
     	 * @var int ID
     	 */
     	public $id;
    +
     	/**
     	 * @var mixed Sample line property 1
     	 */
    -
     	public $code;
    -	public $label;
    +
    +	/**
    +     * @var string Type resource line label
    +     */
    +    public $label;
    +
     	public $active;
     
     	/**
     	 * @var mixed Sample line property 2
     	 */
    -
     }
    diff --git a/htdocs/core/class/discount.class.php b/htdocs/core/class/discount.class.php
    index e3098911418..26a5dfe9fb1 100644
    --- a/htdocs/core/class/discount.class.php
    +++ b/htdocs/core/class/discount.class.php
    @@ -28,23 +28,66 @@
      */
     class DiscountAbsolute
     {
    +    /**
    +     * @var DoliDB Database handler.
    +     */
         public $db;
    -    public $error;
     
    -    public $id;					// Id discount
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error;
    +
    +	/**
    +	 * @var string[]	Array of error strings
    +	 */
    +	public $errors=array();
    +
    +	/**
    +	 * @var int ID discount
    +	 */
    +	public $id;
    +
    +    /**
    +	 * @var int Thirdparty ID
    +	 */
         public $fk_soc;
    +
         public $discount_type;			// 0 => customer discount, 1 => supplier discount
         public $amount_ht;				//
         public $amount_tva;			//
         public $amount_ttc;			//
         public $tva_tx;				// Vat rate
    -    public $fk_user;				// Id utilisateur qui accorde la remise
    -    public $description;			// Description libre
    +
    +    /**
    +	 * @var int User ID Id utilisateur qui accorde la remise
    +	 */
    +	public $fk_user;
    +
    +    /**
    +	 * @var string description
    +	 */
    +	public $description;
    +
         public $datec;					// Date creation
    -    public $fk_facture_line;  		// Id invoice line when a discount is used into an invoice line (for absolute discounts)
    -    public $fk_facture;			    // Id invoice when a discount line is used into an invoice (for credit note)
    -    public $fk_facture_source;		// Id facture avoir a l'origine de la remise
    -    public $ref_facture_source;	    // Ref facture avoir a l'origine de la remise
    +
    +    /**
    +     * @var int ID invoice line when a discount is used into an invoice line (for absolute discounts)
    +     */
    +    public $fk_facture_line;
    +
    +    /**
    +     * @var int ID invoice when a discount line is used into an invoice (for credit note)
    +     */
    +    public $fk_facture;
    +
    +    /**
    +     * @var int ID credit note having caused the discount
    +     */
    +    public $fk_facture_source;
    +
    +    public $ref_facture_source;	    // Ref credit note having caused the discount
    +
         public $ref_invoice_supplier_source;
     
         /**
    @@ -343,6 +386,7 @@ class DiscountAbsolute
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Link the discount to a particular invoice line or a particular invoice.
          *	When discount is a global discount used as an invoice line, we link using rowidline.
    @@ -354,6 +398,7 @@ class DiscountAbsolute
          */
         function link_to_invoice($rowidline,$rowidinvoice)
         {
    +        // phpcs:enable
             // Check parameters
             if (! $rowidline && ! $rowidinvoice)
             {
    @@ -397,6 +442,7 @@ class DiscountAbsolute
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Link the discount to a particular invoice line or a particular invoice.
          *	Do not call this if discount is linked to a reconcialiated invoice
    @@ -405,6 +451,7 @@ class DiscountAbsolute
          */
         function unlink_invoice()
         {
    +        // phpcs:enable
             $sql ="UPDATE ".MAIN_DB_PREFIX."societe_remise_except";
     		if(! empty($this->discount_type)) {
            		$sql.=" SET fk_invoice_supplier_line = NULL, fk_invoice_supplier = NULL";
    @@ -520,11 +567,11 @@ class DiscountAbsolute
         }
     
         /**
    -     *  Return amount (with tax) of all credit notes and deposits invoices used by invoice as a payment
    +     *  Return amount (with tax) of all credit notes invoices + excess received used by invoice as a payment
          *
          *	@param		CommonInvoice	  $invoice	    	Object invoice
     	 *	@param		int			      $multicurrency	Return multicurrency_amount instead of amount
    -     *	@return		int					        		<0 if KO, Sum of credit notes and deposits amount otherwise
    +     *	@return		int					        		<0 if KO, Sum of credit notes and excess received amount otherwise
          */
         function getSumCreditNotesUsed($invoice, $multicurrency=0)
         {
    diff --git a/htdocs/core/class/doleditor.class.php b/htdocs/core/class/doleditor.class.php
    index 860d89afea8..548721be05f 100644
    --- a/htdocs/core/class/doleditor.class.php
    +++ b/htdocs/core/class/doleditor.class.php
    @@ -135,9 +135,9 @@ class DolEditor
                 $this->height				= $height;
                 $this->width				= $width;
         	}
    -
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Output edit area inside the HTML stream.
          *	Output depends on this->tool (fckeditor, ckeditor, textarea, ...)
    @@ -151,6 +151,7 @@ class DolEditor
          */
         function Create($noprint=0, $morejs='', $disallowAnyContent=true, $titlecontent='', $option='')
         {
    +        // phpcs:enable
         	global $conf,$langs;
     
         	$fullpage=false;
    @@ -345,6 +346,4 @@ class DolEditor
             if ($noprint) return $out;
             else print $out;
         }
    -
     }
    -
    diff --git a/htdocs/core/class/dolexception.class.php b/htdocs/core/class/dolexception.class.php
    index cb3c71cfd5c..b61bc6e388c 100644
    --- a/htdocs/core/class/dolexception.class.php
    +++ b/htdocs/core/class/dolexception.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/class/dolgraph.class.php b/htdocs/core/class/dolgraph.class.php
    index b002c96f081..195bec09daf 100644
    --- a/htdocs/core/class/dolgraph.class.php
    +++ b/htdocs/core/class/dolgraph.class.php
    @@ -39,42 +39,46 @@
      */
     class DolGraph
     {
    -	var $type=array();			// Array with type of each series. Example: array('bars', 'lines', ...)
    -	var $mode='side';		    // Mode bars graph: side, depth
    +	public $type=array();			// Array with type of each series. Example: array('bars', 'lines', ...)
    +	public $mode='side';		    // Mode bars graph: side, depth
     	private $_library='jflot';	// Graphic library to use (jflot, artichow)
     
     	//! Array of data
    -	var $data;				// Data of graph: array(array('abs1',valA1,valB1), array('abs2',valA2,valB2), ...)
    -	var $title;				// Title of graph
    -	var $cssprefix='';		// To add into css styles
    -	var $width=380;
    -	var $height=200;
    -	var $MaxValue=0;
    -	var $MinValue=0;
    -	var $SetShading=0;
    +	public $data;				// Data of graph: array(array('abs1',valA1,valB1), array('abs2',valA2,valB2), ...)
    +	public $title;				// Title of graph
    +	public $cssprefix='';		// To add into css styles
    +	public $width=380;
    +	public $height=200;
    +	public $MaxValue=0;
    +	public $MinValue=0;
    +	public $SetShading=0;
     
    -	var $PrecisionY=-1;
    +	public $PrecisionY=-1;
     
    -	var $horizTickIncrement=-1;
    -	var $SetNumXTicks=-1;
    -	var $labelInterval=-1;
    +	public $horizTickIncrement=-1;
    +	public $SetNumXTicks=-1;
    +	public $labelInterval=-1;
     
    -	var $hideXGrid=false;
    -	var $hideYGrid=false;
    +	public $hideXGrid=false;
    +	public $hideYGrid=false;
     
    -	var $Legend=array();
    -	var $LegendWidthMin=0;
    -	var $showlegend=1;
    -	var $showpointvalue=1;
    -	var $showpercent=0;
    -	var $combine=0;				// 0.05 if you want to combine records < 5% into "other"
    -	var $graph;     			// Objet Graph (Artichow, Phplot...)
    -	var $error;
    +	public $Legend=array();
    +	public $LegendWidthMin=0;
    +	public $showlegend=1;
    +	public $showpointvalue=1;
    +	public $showpercent=0;
    +	public $combine=0;				// 0.05 if you want to combine records < 5% into "other"
    +	public $graph;     			// Objet Graph (Artichow, Phplot...)
     
    -	var $bordercolor;			// array(R,G,B)
    -	var $bgcolor;				// array(R,G,B)
    -	var $bgcolorgrid=array(255,255,255);			// array(R,G,B)
    -	var $datacolor;				// array(array(R,G,B),...)
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	public $bordercolor;			// array(R,G,B)
    +	public $bgcolor;				// array(R,G,B)
    +	public $bgcolorgrid=array(255,255,255);			// array(R,G,B)
    +	public $datacolor;				// array(array(R,G,B),...)
     
     	private $stringtoshow;      // To store string to output graph into HTML page
     
    @@ -124,6 +128,7 @@ class DolGraph
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set Y precision
     	 *
    @@ -132,10 +137,12 @@ class DolGraph
     	 */
     	function SetPrecisionY($which_prec)
     	{
    +        // phpcs:enable
     		$this->PrecisionY = $which_prec;
     		return true;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Utiliser SetNumTicks ou SetHorizTickIncrement mais pas les 2
     	 *
    @@ -144,10 +151,12 @@ class DolGraph
     	 */
     	function SetHorizTickIncrement($xi)
     	{
    +        // phpcs:enable
     		$this->horizTickIncrement = $xi;
     		return true;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Utiliser SetNumTicks ou SetHorizTickIncrement mais pas les 2
     	 *
    @@ -156,10 +165,12 @@ class DolGraph
     	 */
     	function SetNumXTicks($xt)
     	{
    +        // phpcs:enable
     		$this->SetNumXTicks = $xt;
     		return true;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set label interval to reduce number of labels
     	 *
    @@ -168,10 +179,12 @@ class DolGraph
     	 */
     	function SetLabelInterval($x)
     	{
    +        // phpcs:enable
     		$this->labelInterval = $x;
     		return true;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Hide X grid
     	 *
    @@ -180,10 +193,12 @@ class DolGraph
     	 */
     	function SetHideXGrid($bool)
     	{
    +        // phpcs:enable
     		$this->hideXGrid = $bool;
     		return true;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Hide Y grid
     	 *
    @@ -192,10 +207,12 @@ class DolGraph
     	 */
     	function SetHideYGrid($bool)
     	{
    +        // phpcs:enable
     		$this->hideYGrid = $bool;
     		return true;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set y label
     	 *
    @@ -204,9 +221,11 @@ class DolGraph
     	 */
     	function SetYLabel($label)
     	{
    +        // phpcs:enable
     		$this->YLabel = $label;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set width
     	 *
    @@ -215,9 +234,11 @@ class DolGraph
     	 */
     	function SetWidth($w)
     	{
    +        // phpcs:enable
     		$this->width = $w;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set title
     	 *
    @@ -226,9 +247,11 @@ class DolGraph
     	 */
     	function SetTitle($title)
     	{
    +        // phpcs:enable
     		$this->title = $title;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set data
     	 *
    @@ -238,9 +261,11 @@ class DolGraph
     	 */
     	function SetData($data)
     	{
    +        // phpcs:enable
     		$this->data = $data;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set data
     	 *
    @@ -249,9 +274,11 @@ class DolGraph
     	 */
     	function SetDataColor($datacolor)
     	{
    +        // phpcs:enable
     		$this->datacolor = $datacolor;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set type
     	 *
    @@ -260,9 +287,11 @@ class DolGraph
     	 */
     	function SetType($type)
     	{
    +        // phpcs:enable
     		$this->type = $type;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set legend
     	 *
    @@ -271,9 +300,11 @@ class DolGraph
     	 */
     	function SetLegend($legend)
     	{
    +        // phpcs:enable
     		$this->Legend = $legend;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set min width
     	 *
    @@ -282,9 +313,11 @@ class DolGraph
     	 */
     	function SetLegendWidthMin($legendwidthmin)
     	{
    +        // phpcs:enable
     		$this->LegendWidthMin = $legendwidthmin;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set max value
     	 *
    @@ -293,9 +326,11 @@ class DolGraph
     	 */
     	function SetMaxValue($max)
     	{
    +        // phpcs:enable
     		$this->MaxValue = $max;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Get max value
     	 *
    @@ -303,9 +338,11 @@ class DolGraph
     	 */
     	function GetMaxValue()
     	{
    +        // phpcs:enable
     		return $this->MaxValue;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set min value
     	 *
    @@ -314,9 +351,11 @@ class DolGraph
     	 */
     	function SetMinValue($min)
     	{
    +        // phpcs:enable
     		$this->MinValue = $min;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Get min value
     	 *
    @@ -324,9 +363,11 @@ class DolGraph
     	 */
     	function GetMinValue()
     	{
    +        // phpcs:enable
     		return $this->MinValue;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set height
     	 *
    @@ -335,9 +376,11 @@ class DolGraph
     	 */
     	function SetHeight($h)
     	{
    +        // phpcs:enable
     		$this->height = $h;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set shading
     	 *
    @@ -346,9 +389,11 @@ class DolGraph
     	 */
     	function SetShading($s)
     	{
    +        // phpcs:enable
     		$this->SetShading = $s;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set shading
     	 *
    @@ -357,9 +402,11 @@ class DolGraph
     	 */
     	function SetCssPrefix($s)
     	{
    +        // phpcs:enable
     		$this->cssprefix = $s;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Reset bg color
     	 *
    @@ -367,9 +414,11 @@ class DolGraph
     	 */
     	function ResetBgColor()
     	{
    +        // phpcs:enable
     		unset($this->bgcolor);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Reset bgcolorgrid
     	 *
    @@ -377,6 +426,7 @@ class DolGraph
     	 */
     	function ResetBgColorGrid()
     	{
    +        // phpcs:enable
     		unset($this->bgcolorgrid);
     	}
     
    @@ -425,6 +475,7 @@ class DolGraph
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Define background color of complete image
     	 *
    @@ -433,6 +484,7 @@ class DolGraph
     	 */
     	function SetBgColor($bg_color = array(255,255,255))
     	{
    +        // phpcs:enable
     		global $theme_bgcolor,$theme_bgcoloronglet;
     
     		if (! is_array($bg_color))
    @@ -453,6 +505,7 @@ class DolGraph
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Define background color of grid
     	 *
    @@ -461,6 +514,7 @@ class DolGraph
     	 */
     	function SetBgColorGrid($bg_colorgrid = array(255,255,255))
     	{
    +        // phpcs:enable
     		global $theme_bgcolor,$theme_bgcoloronglet;
     
     		if (! is_array($bg_colorgrid))
    @@ -481,6 +535,7 @@ class DolGraph
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Reset data color
     	 *
    @@ -488,9 +543,11 @@ class DolGraph
     	 */
     	function ResetDataColor()
     	{
    +        // phpcs:enable
     		unset($this->datacolor);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Get max value
     	 *
    @@ -498,6 +555,7 @@ class DolGraph
     	 */
     	function GetMaxValueInData()
     	{
    +        // phpcs:enable
     		$k = 0;
     		$vals = array();
     
    @@ -516,6 +574,7 @@ class DolGraph
     		return $vals[0];
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return min value of all data
     	 *
    @@ -523,6 +582,7 @@ class DolGraph
     	 */
     	function GetMinValueInData()
     	{
    +        // phpcs:enable
     		$k = 0;
     		$vals = array();
     
    @@ -541,6 +601,7 @@ class DolGraph
     		return $vals[0];
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return max value of all data
     	 *
    @@ -548,6 +609,7 @@ class DolGraph
     	 */
     	function GetCeilMaxValue()
     	{
    +        // phpcs:enable
     		$max = $this->GetMaxValueInData();
     		if ($max != 0) $max++;
     		$size=dol_strlen(abs(ceil($max)));
    @@ -564,6 +626,7 @@ class DolGraph
     		return $res;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return min value of all data
     	 *
    @@ -571,6 +634,7 @@ class DolGraph
     	 */
     	function GetFloorMinValue()
     	{
    +        // phpcs:enable
     		$min = $this->GetMinValueInData();
     		if ($min == '') $min=0;
     		if ($min != 0) $min--;
    @@ -618,6 +682,7 @@ class DolGraph
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
     	/**
     	 * Build a graph onto disk using Artichow library and return img string to it
     	 *
    @@ -627,6 +692,7 @@ class DolGraph
     	 */
     	private function draw_artichow($file,$fileurl)
     	{
    +        // phpcs:enable
     		global $artichow_defaultfont;
     
     		dol_syslog(get_class($this)."::draw_artichow this->type=".join(',',$this->type));
    @@ -638,7 +704,7 @@ class DolGraph
     		// Create graph
     		$classname='';
     		if (! isset($this->type[0]) || $this->type[0] == 'bars')  $classname='BarPlot';    // Only one type (first one) is supported by artichow
    -		else if ($this->type[0] == 'lines') $classname='LinePlot';
    +		else if ($this->type[0] == 'lines' || $this->type[0] == 'linesnopoint') $classname='LinePlot';
     		else $classname='TypeUnknown';
     		include_once ARTICHOW_PATH.$classname.'.class.php';
     
    @@ -743,7 +809,7 @@ class DolGraph
     				$plot->SetYMin($this->MinValue);
     			}
     
    -			if ($this->type[0] == 'lines')
    +			if ($this->type[0] == 'lines' || $this->type[0] == 'linesnopoint')
     			{
     				$color=new Color($this->datacolor[$i][0],$this->datacolor[$i][1],$this->datacolor[$i][2],20);
     				$colorbis=new Color(min($this->datacolor[$i][0]+20,255),min($this->datacolor[$i][1]+20,255),min($this->datacolor[$i][2]+20,255),60);
    @@ -774,8 +840,8 @@ class DolGraph
     			// solve a bug in Artichow with UTF8
     			if (count($this->Legend))
     			{
    -				if ($this->type[0] == 'bars')  $group->legend->add($plot, $this->Legend[$i], LEGEND_BACKGROUND);
    -				if ($this->type[0] == 'lines') $group->legend->add($plot, $this->Legend[$i], LEGEND_LINE);
    +				if ($this->type[0] == 'bars')  										$group->legend->add($plot, $this->Legend[$i], LEGEND_BACKGROUND);
    +				if ($this->type[0] == 'lines' || $this->type[0] == 'linesnopoint')	$group->legend->add($plot, $this->Legend[$i], LEGEND_LINE);
     			}
     			$group->add($plot);
     
    @@ -797,6 +863,7 @@ class DolGraph
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
     	/**
     	 * Build a graph using JFlot library. Input when calling this method should be:
     	 *	$this->data  = array(array(0=>'labelxA',1=>yA),  array('labelxB',yB));
    @@ -813,8 +880,9 @@ class DolGraph
     	 * @param	string	$fileurl	Url path to show image if saved onto disk. Never used here.
     	 * @return	void
     	 */
    -	private function draw_jflot($file,$fileurl)
    +	private function draw_jflot($file, $fileurl)
     	{
    +        // phpcs:enable
     		global $artichow_defaultfont;
     
     		dol_syslog(get_class($this)."::draw_jflot this->type=".join(',',$this->type)." this->MaxValue=".$this->MaxValue);
    @@ -959,19 +1027,22 @@ class DolGraph
     		else
     		{
     			// Add code to support tooltips
    +		    // TODO: remove js css and use graph-tooltip-inner class instead by adding css in each themes
     			$this->stringtoshow.='
     			function showTooltip_'.$tag.'(x, y, contents) {
    -				$(\'<div id="tooltip_'.$tag.'">\' + contents + \'</div>\').css({
    +				$(\'<div class="graph-tooltip-inner" id="tooltip_'.$tag.'">\' + contents + \'</div>\').css({
     					position: \'absolute\',
     					display: \'none\',
    -					top: y + 5,
    -					left: x + 5,
    -					border: \'1px solid #ddd\',
    -					padding: \'2px\',
    -					\'background-color\': \'#ffe\',
    +					top: y + 10,
    +					left: x + 15,
    +					border: \'1px solid #000\',
    +					padding: \'5px\',
    +					\'background-color\': \'#000\',
    +					\'color\': \'#fff\',
    +					\'font-weight\': \'bold\',
     					width: 200,
     					opacity: 0.80
    -				}).appendTo("body").fadeIn(20);
    +				}).appendTo("body").fadeIn(100);
     			}
     
     			var previousPoint = null;
    @@ -1012,12 +1083,13 @@ class DolGraph
     				if ($i > $firstlot) $this->stringtoshow.=', '."\n";
     				$color=sprintf("%02x%02x%02x",$this->datacolor[$i][0],$this->datacolor[$i][1],$this->datacolor[$i][2]);
     				$this->stringtoshow.='{ ';
    -				if (! isset($this->type[$i]) || $this->type[$i] == 'bars') $this->stringtoshow.='bars: { show: true, align: "'.($i==$firstlot?'center':'left').'", barWidth: 0.5 }, ';
    -				if (isset($this->type[$i]) && $this->type[$i] == 'lines')  $this->stringtoshow.='lines: { show: true, fill: false }, ';
    +				if (! isset($this->type[$i]) || $this->type[$i] == 'bars') $this->stringtoshow.='bars: { lineWidth: 1, show: true, align: "'.($i==$firstlot?'center':'left').'", barWidth: 0.5 }, ';
    +				if (isset($this->type[$i]) && ($this->type[$i] == 'lines' || $this->type[$i] == 'linesnopoint')) $this->stringtoshow.='lines: { show: true, fill: false }, points: { show: '.($this->type[$i] == 'linesnopoint' ? 'false' : 'true').' }, ';
     				$this->stringtoshow.='color: "#'.$color.'", label: "'.(isset($this->Legend[$i]) ? dol_escape_js($this->Legend[$i]) : '').'", data: d'.$i.' }';
     				$i++;
     			}
    -			$this->stringtoshow.="\n".' ], { series: { stack: stack, lines: { fill: false, steps: steps }, bars: { barWidth: 0.6 } }'."\n";
    +			// shadowSize: 0 -> Drawing is faster without shadows
    +			$this->stringtoshow.="\n".' ], { series: { shadowSize: 0, stack: stack, lines: { fill: false, steps: steps }, bars: { barWidth: 0.6 } }'."\n";
     
     			// Xaxis
     			$this->stringtoshow.=', xaxis: { ticks: ['."\n";
    @@ -1036,11 +1108,10 @@ class DolGraph
     			// Background color
     			$color1=sprintf("%02x%02x%02x",$this->bgcolorgrid[0],$this->bgcolorgrid[0],$this->bgcolorgrid[2]);
     			$color2=sprintf("%02x%02x%02x",$this->bgcolorgrid[0],$this->bgcolorgrid[1],$this->bgcolorgrid[2]);
    -			$this->stringtoshow.=', grid: { hoverable: true, backgroundColor: { colors: ["#'.$color1.'", "#'.$color2.'"] } }'."\n";
    +			$this->stringtoshow.=', grid: { hoverable: true, backgroundColor: { colors: ["#'.$color1.'", "#'.$color2.'"] }, borderWidth: 1, borderColor: \'#eee\', tickColor  : \'#f3f3f3\' }'."\n";
     			//$this->stringtoshow.=', shadowSize: 20'."\n";    TODO Uncommet this
     			$this->stringtoshow.='});'."\n";
     			$this->stringtoshow.='}'."\n";
    -
     		}
     
     		$this->stringtoshow.='plotWithOptions_'.$tag.'();'."\n";
    @@ -1093,6 +1164,4 @@ class DolGraph
     		}
     		return 0;
     	}
    -
     }
    -
    diff --git a/htdocs/core/class/dolreceiptprinter.class.php b/htdocs/core/class/dolreceiptprinter.class.php
    index 2499176b58b..f38afc67807 100644
    --- a/htdocs/core/class/dolreceiptprinter.class.php
    +++ b/htdocs/core/class/dolreceiptprinter.class.php
    @@ -1,6 +1,6 @@
     <?php
     /*
    - * Copyright (C) 2015       Frederic France     <frederic.france@free.fr>
    + * Copyright (C) 2015-2018  Frédéric France     <frederic.france@free.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -45,7 +45,7 @@
      * <dol_cut_paper_partial>                          Cut ticket partially
      * <dol_open_drawer>                                Open cash drawer
      * <dol_activate_buzzer>                            Activate buzzer
    - * 
    + *
      * Code which can be placed everywhere
      * <dol_print_qrcode>                               Print QR Code
      * <dol_print_date>                                 Print date AAAA-MM-DD
    @@ -94,7 +94,7 @@
     
     require_once DOL_DOCUMENT_ROOT .'/includes/mike42/escpos-php/Escpos.php';
     
    - 
    +
     /**
      * Class to manage Receipt Printers
      */
    @@ -105,12 +105,25 @@ class dolReceiptPrinter extends Escpos
         const CONNECTOR_NETWORK_PRINT = 3;
         const CONNECTOR_WINDOWS_PRINT = 4;
         //const CONNECTOR_JAVA = 5;
    -    var $db;
    +
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
         var $tags;
         var $printer;
         var $template;
    -    var $error;
    -    var $errors;
    +
    +    /**
    +     * @var string Error code (or message)
    +     */
    +    public $error='';
    +
    +    /**
    +     * @var string[] Error codes (or messages)
    +     */
    +    public $errors = array();
     
     
     
    @@ -191,7 +204,6 @@ class dolReceiptPrinter extends Escpos
                 'dol_print_if_customer_tax_number',
                 'dol_print_if_customer_account_balance_positive',
             );
    -
         }
     
         /**
    @@ -204,6 +216,7 @@ class dolReceiptPrinter extends Escpos
             global $conf;
             $error = 0;
             $line = 0;
    +        $obj = array();
             $sql = 'SELECT rowid, name, fk_type, fk_profile, parameter';
             $sql.= ' FROM '.MAIN_DB_PREFIX.'printer_receipt';
             $sql.= ' WHERE entity = '.$conf->entity;
    @@ -271,6 +284,7 @@ class dolReceiptPrinter extends Escpos
             global $conf;
             $error = 0;
             $line = 0;
    +        $obj = array();
             $sql = 'SELECT rowid, name, template';
             $sql.= ' FROM '.MAIN_DB_PREFIX.'printer_receipt_template';
             $sql.= ' WHERE entity = '.$conf->entity;
    @@ -300,16 +314,16 @@ class dolReceiptPrinter extends Escpos
         function selectTypePrinter($selected='', $htmlname='printertypeid')
         {
             global $langs;
    -        
    +
             $options = array(
                 1 => $langs->trans('CONNECTOR_DUMMY'),
                 2 => $langs->trans('CONNECTOR_FILE_PRINT'),
                 3 => $langs->trans('CONNECTOR_NETWORK_PRINT'),
                 4 => $langs->trans('CONNECTOR_WINDOWS_PRINT')
             );
    -        
    +
             $this->resprint = Form::selectarray($htmlname, $options, $selected);
    -        
    +
             return 0;
         }
     
    @@ -324,7 +338,7 @@ class dolReceiptPrinter extends Escpos
         function selectProfilePrinter($selected='', $htmlname='printerprofileid')
         {
             global $langs;
    -        
    +
             $options = array(
                 0 => $langs->trans('PROFILE_DEFAULT'),
                 1 => $langs->trans('PROFILE_SIMPLE'),
    @@ -332,12 +346,13 @@ class dolReceiptPrinter extends Escpos
                 3 => $langs->trans('PROFILE_P822D'),
                 4 => $langs->trans('PROFILE_STAR')
             );
    -        
    +
             $this->profileresprint = Form::selectarray($htmlname, $options, $selected);
             return 0;
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Function to Add a printer in db
          *
    @@ -349,6 +364,7 @@ class dolReceiptPrinter extends Escpos
          */
         function AddPrinter($name, $type, $profile, $parameter)
         {
    +        // phpcs:enable
             global $conf;
             $error = 0;
             $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'printer_receipt';
    @@ -362,6 +378,7 @@ class dolReceiptPrinter extends Escpos
             return $error;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Function to Update a printer in db
          *
    @@ -374,6 +391,7 @@ class dolReceiptPrinter extends Escpos
          */
         function UpdatePrinter($name, $type, $profile, $parameter, $printerid)
         {
    +        // phpcs:enable
             global $conf;
             $error = 0;
             $sql = 'UPDATE '.MAIN_DB_PREFIX.'printer_receipt';
    @@ -390,6 +408,7 @@ class dolReceiptPrinter extends Escpos
             return $error;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Function to Delete a printer from db
          *
    @@ -398,6 +417,7 @@ class dolReceiptPrinter extends Escpos
          */
         function DeletePrinter($printerid)
         {
    +        // phpcs:enable
             global $conf;
             $error = 0;
             $sql = 'DELETE FROM '.MAIN_DB_PREFIX.'printer_receipt';
    @@ -410,6 +430,7 @@ class dolReceiptPrinter extends Escpos
             return $error;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Function to Update a printer template in db
          *
    @@ -420,6 +441,7 @@ class dolReceiptPrinter extends Escpos
          */
         function UpdateTemplate($name, $template, $templateid)
         {
    +        // phpcs:enable
             global $conf;
             $error = 0;
             $sql = 'UPDATE '.MAIN_DB_PREFIX.'printer_receipt_template';
    @@ -435,6 +457,7 @@ class dolReceiptPrinter extends Escpos
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Function to Send Test page to Printer
          *
    @@ -443,6 +466,7 @@ class dolReceiptPrinter extends Escpos
          */
         function SendTestToPrinter($printerid)
         {
    +        // phpcs:enable
             global $conf;
             $error = 0;
             $img = new EscposImage(DOL_DOCUMENT_ROOT .'/theme/common/dolibarr_logo_bw.png');
    @@ -460,7 +484,6 @@ class dolReceiptPrinter extends Escpos
                     $this->printer->cut();
                     //print '<pre>'.print_r($this->connector, true).'</pre>';
                     $this->printer->close();
    -
                 } catch (Exception $e) {
                     $this->errors[] = $e->getMessage();
                     $error++;
    @@ -469,6 +492,7 @@ class dolReceiptPrinter extends Escpos
             return $error;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Function to Print Receipt Ticket
          *
    @@ -479,6 +503,7 @@ class dolReceiptPrinter extends Escpos
          */
         function SendToPrinter($object, $templateid, $printerid)
         {
    +        // phpcs:enable
             global $conf;
             $error = 0;
             $ret = $this->loadTemplate($templateid);
    @@ -520,11 +545,11 @@ class dolReceiptPrinter extends Escpos
             $ret = $this->InitPrinter($printerid);
             if ($ret>0) {
                 setEventMessages($this->error, $this->errors, 'errors');
    -        } 
    -        else 
    +        }
    +        else
             {
                 $nboflines = count($vals);
    -            for ($line=0; $line < $nboflines; $line++) 
    +            for ($line=0; $line < $nboflines; $line++)
                 {
                     switch ($vals[$line]['tag']) {
                         case 'DOL_ALIGN_CENTER':
    @@ -595,7 +620,6 @@ class dolReceiptPrinter extends Escpos
                 // uncomment next line to see content sent to printer
                 //print '<pre>'.print_r($this->connector, true).'</pre>';
                 $this->printer->close();
    -
             }
             return $error;
         }
    @@ -632,6 +656,7 @@ class dolReceiptPrinter extends Escpos
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Function Init Printer
          *
    @@ -640,6 +665,7 @@ class dolReceiptPrinter extends Escpos
          */
         function InitPrinter($printerid)
         {
    +        // phpcs:enable
             global $conf;
             $error=0;
             $sql = 'SELECT rowid, name, fk_type, fk_profile, parameter';
    diff --git a/htdocs/core/class/emailsenderprofile.class.php b/htdocs/core/class/emailsenderprofile.class.php
    index 7f34165030b..b30f79f0bba 100644
    --- a/htdocs/core/class/emailsenderprofile.class.php
    +++ b/htdocs/core/class/emailsenderprofile.class.php
    @@ -39,14 +39,17 @@ class EmailSenderProfile extends CommonObject
     	 * @var string ID to identify managed object
     	 */
     	public $element = 'emailsenderprofile';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'c_email_senderprofile';
    +
     	/**
     	 * @var array  Does emailsenderprofile support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 */
     	public $ismultientitymanaged = 1;
    +
     	/**
     	 * @var string String with name of icon for emailsenderprofile
     	 */
    @@ -85,9 +88,22 @@ class EmailSenderProfile extends CommonObject
     		'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'visible'=>-1, 'enabled'=>1, 'position'=>500, 'notnull'=>1,),
     		'active' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'notnull'=>-1, 'index'=>1),
     	);
    +
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
    -	public $label;
    +
    +	/**
    +     * @var string Email Sender Profile label
    +     */
    +    public $label;
    +
     	public $email;
     	public $date_creation;
     	public $tms;
    @@ -307,6 +323,7 @@ class EmailSenderProfile extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return the status
     	 *
    @@ -318,38 +335,32 @@ class EmailSenderProfile extends CommonObject
     	{
     		global $langs;
     
    -		if ($mode == 0)
    -		{
    -			$prefix='';
    -			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    -		}
    -		if ($mode == 1)
    +		if ($mode == 0 || $mode == 1)
     		{
     			if ($status == 1) return $langs->trans('Enabled');
     			if ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    @@ -402,7 +413,6 @@ class EmailSenderProfile extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -420,7 +430,6 @@ class EmailSenderProfile extends CommonObject
     	{
     		$this->initAsSpecimenCommon();
     	}
    -
     }
     
     /**
    diff --git a/htdocs/core/class/events.class.php b/htdocs/core/class/events.class.php
    index abdbb1689f8..c4b726b19d1 100644
    --- a/htdocs/core/class/events.class.php
    +++ b/htdocs/core/class/events.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,29 +30,55 @@
     
     
     /**
    - *	Events class
    + *  Events class
      */
     class Events // extends CommonObject
     {
    -	public $element='events';				//!< Id that identify managed objects
    -	public $table_element='events';		//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='events';
     
    -	var $id;
    -	var $db;
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='events';
     
    -	var $error;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $tms;
    -	var $type;
    -	var $entity;
    -	var $dateevent;
    -	var $description;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	public $tms;
    +	public $type;
    +
    +	/**
    +	 * @var int Entity
    +	 */
    +	public $entity;
    +
    +	public $dateevent;
    +
    +	/**
    +	 * @var string description
    +	 */
    +	public $description;
     
     	// List of all Audit/Security events supported by triggers
    -	var $eventstolog=array(
    -		array('id'=>'USER_LOGIN',             'test'=>1),
    +	public $eventstolog=array(
    +		/*array('id'=>'USER_LOGIN',             'test'=>1),
     		array('id'=>'USER_LOGIN_FAILED',      'test'=>1),
    -	    array('id'=>'USER_LOGOUT',            'test'=>1),
    +	    array('id'=>'USER_LOGOUT',            'test'=>1),*/
     		array('id'=>'USER_CREATE',            'test'=>1),
     		array('id'=>'USER_MODIFY',            'test'=>1),
     		array('id'=>'USER_NEW_PASSWORD',      'test'=>1),
    @@ -96,7 +122,6 @@ class Events // extends CommonObject
     	function __construct($db)
     	{
     		$this->db = $db;
    -		return 1;
     	}
     
     
    @@ -280,5 +305,4 @@ class Events // extends CommonObject
     		$this->dateevent=time();
     		$this->description='This is a specimen event';
     	}
    -
     }
    diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php
    index 1840f62ca5d..a52a759f841 100644
    --- a/htdocs/core/class/extrafields.class.php
    +++ b/htdocs/core/class/extrafields.class.php
    @@ -4,11 +4,12 @@
      * Copyright (C) 2004       Sebastien Di Cintio     <sdicintio@ressource-toi.org>
      * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
      * Copyright (C) 2009-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2013       Florian Henry           <forian.henry@open-concept.pro>
      * Copyright (C) 2015       Charles-Fr BENKE        <charles.fr@benke.fr>
      * Copyright (C) 2016       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2017       Nicolas ZABOURI         <info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -36,7 +37,10 @@
      */
     class ExtraFields
     {
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	// type of element (for what object is the extrafield)
     	// @deprecated
    @@ -87,7 +91,11 @@ class ExtraFields
     	// New array to store extrafields definition
     	var $attributes;
     
    -	var $error;
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
     	var $errno;
     
     
    @@ -156,14 +164,14 @@ class ExtraFields
     	 *  @param  int				$alwayseditable		Is attribute always editable regardless of the document status
     	 *  @param	string			$perms				Permission to check
     	 *  @param	string			$list				Visibilty ('0'=never visible, '1'=visible on list+forms, '2'=list only, '3'=form only or 'eval string')
    -	 *  @param	int				$notused			Deprecated.
    +	 *  @param	string			$help				Text with help tooltip
     	 *  @param  string  		$computed           Computed value
     	 *  @param  string  		$entity    		 	Entity of extrafields (for multicompany modules)
     	 *  @param  string  		$langfile  		 	Language file
     	 *  @param  string  		$enabled  		 	Condition to have the field enabled or not
     	 *  @return int      							<=0 if KO, >0 if OK
     	 */
    -	function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique=0, $required=0, $default_value='', $param='', $alwayseditable=0, $perms='', $list='-1', $notused=0, $computed='', $entity='', $langfile='', $enabled='1')
    +	function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique=0, $required=0, $default_value='', $param='', $alwayseditable=0, $perms='', $list='-1', $help='', $computed='', $entity='', $langfile='', $enabled='1')
     	{
     		if (empty($attrname)) return -1;
     		if (empty($label)) return -1;
    @@ -174,13 +182,13 @@ class ExtraFields
     		// Create field into database except for separator type which is not stored in database
     		if ($type != 'separate')
     		{
    -			$result=$this->create($attrname, $type, $size, $elementtype, $unique, $required, $default_value, $param, $perms, $list, $computed);
    +			$result=$this->create($attrname, $type, $size, $elementtype, $unique, $required, $default_value, $param, $perms, $list, $computed, $help);
     		}
     		$err1=$this->errno;
     		if ($result > 0 || $err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' || $type == 'separate')
     		{
     			// Add declaration of field into table
    -			$result2=$this->create_label($attrname, $label, $type, $pos, $size, $elementtype, $unique, $required, $param, $alwayseditable, $perms, $list, $notused, $default_value, $computed, $entity, $langfile, $enabled);
    +			$result2=$this->create_label($attrname, $label, $type, $pos, $size, $elementtype, $unique, $required, $param, $alwayseditable, $perms, $list, $help, $default_value, $computed, $entity, $langfile, $enabled);
     			$err2=$this->errno;
     			if ($result2 > 0 || ($err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' && $err2 == 'DB_ERROR_RECORD_ALREADY_EXISTS'))
     			{
    @@ -285,6 +293,7 @@ class ExtraFields
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
     	/**
     	 *	Add description of a new optional attribute
     	 *
    @@ -300,7 +309,7 @@ class ExtraFields
     	 *  @param  int				$alwayseditable	Is attribute always editable regardless of the document status
     	 *  @param	string			$perms			Permission to check
     	 *  @param	string			$list			Visibily
    -	 *  @param	int				$notused		Deprecated.
    +	 *  @param	string			$help			Help on tooltip
     	 *  @param  string          $default        Default value (in database. use the default_value feature for default value on screen).
     	 *  @param  string          $computed       Computed value
     	 *  @param  string          $entity     	Entity of extrafields
    @@ -308,8 +317,9 @@ class ExtraFields
     	 *  @param  string  		$enabled  		Condition to have the field enabled or not
     	 *  @return	int								<=0 if KO, >0 if OK
     	 */
    -	private function create_label($attrname, $label='', $type='', $pos=0, $size=0, $elementtype='member', $unique=0, $required=0, $param='', $alwayseditable=0, $perms='', $list='-1', $notused=0, $default='', $computed='',$entity='', $langfile='', $enabled='1')
    +	private function create_label($attrname, $label='', $type='', $pos=0, $size=0, $elementtype='member', $unique=0, $required=0, $param='', $alwayseditable=0, $perms='', $list='-1', $help='', $default='', $computed='',$entity='', $langfile='', $enabled='1')
     	{
    +        // phpcs:enable
     		global $conf,$user;
     
     		if ($elementtype == 'thirdparty') $elementtype='societe';
    @@ -357,7 +367,8 @@ class ExtraFields
     			$sql.= " fk_user_author,";
     			$sql.= " fk_user_modif,";
     			$sql.= " datec,";
    -			$sql.= " enabled";
    +			$sql.= " enabled,";
    +			$sql.= " help";
     			$sql.= " )";
     			$sql.= " VALUES('".$attrname."',";
     			$sql.= " '".$this->db->escape($label)."',";
    @@ -378,7 +389,8 @@ class ExtraFields
     			$sql .= " " . (is_object($user) ? $user->id : 0). ",";
     			$sql .= " " . (is_object($user) ? $user->id : 0). ",";
     			$sql .= "'" . $this->db->idate(dol_now()) . "',";
    -			$sql.= " ".($enabled?"'".$this->db->escape($enabled)."'":"1");
    +			$sql.= " ".($enabled?"'".$this->db->escape($enabled)."'":"1").",";
    +			$sql.= " ".($help?"'".$this->db->escape($help)."'":"null");
     			$sql.=')';
     
     			dol_syslog(get_class($this)."::create_label", LOG_DEBUG);
    @@ -450,9 +462,9 @@ class ExtraFields
     		{
     			return 0;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
     	/**
     	 *	Delete description of an optional attribute
     	 *
    @@ -462,6 +474,7 @@ class ExtraFields
     	 */
     	private function delete_label($attrname, $elementtype='member')
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if ($elementtype == 'thirdparty') $elementtype='societe';
    @@ -490,7 +503,6 @@ class ExtraFields
     		{
     			return 0;
     		}
    -
     	}
     
     	/**
    @@ -508,20 +520,21 @@ class ExtraFields
     	 *  @param  int		$alwayseditable		Is attribute always editable regardless of the document status
     	 *  @param	string	$perms				Permission to check
     	 *  @param	string	$list				Visibility
    -	 *  @param	int		$notused			Deprecated.
    +	 *  @param	string	$help				Help on tooltip
     	 *  @param  string  $default            Default value (in database. use the default_value feature for default value on screen).
     	 *  @param  string  $computed           Computed value
     	 *  @param  string  $entity	            Entity of extrafields
     	 *  @param	string	$langfile			Language file
     	 *  @param  string  $enabled  			Condition to have the field enabled or not
    +     *  @param  int     $totalizable        Is extrafield totalizable on list
     	 * 	@return	int							>0 if OK, <=0 if KO
     	 */
    -	function update($attrname, $label, $type, $length, $elementtype, $unique=0, $required=0, $pos=0, $param='', $alwayseditable=0, $perms='', $list='', $notused=0, $default='', $computed='', $entity='', $langfile='', $enabled='1')
    +	function update($attrname, $label, $type, $length, $elementtype, $unique=0, $required=0, $pos=0, $param='', $alwayseditable=0, $perms='', $list='', $help='', $default='', $computed='', $entity='', $langfile='', $enabled='1', $totalizable=0)
     	{
     		if ($elementtype == 'thirdparty') $elementtype='societe';
     		if ($elementtype == 'contact') $elementtype='socpeople';
     
    -		$table=$elementtype.'_extrafields';
    +        $table=$elementtype.'_extrafields';
     		if ($elementtype == 'categorie') $table='categories_extrafields';
     
     		if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname))
    @@ -566,7 +579,7 @@ class ExtraFields
     			{
     				if ($label)
     				{
    -					$result=$this->update_label($attrname,$label,$type,$length,$elementtype,$unique,$required,$pos,$param,$alwayseditable,$perms,$list,$notused,$default,$computed,$entity,$langfile,$enabled);
    +					$result=$this->update_label($attrname,$label,$type,$length,$elementtype,$unique,$required,$pos,$param,$alwayseditable,$perms,$list,$help,$default,$computed,$entity,$langfile,$enabled, $totalizable);
     				}
     				if ($result > 0)
     				{
    @@ -599,9 +612,9 @@ class ExtraFields
     		{
     			return 0;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
     	/**
     	 *  Modify description of personalized attribute
     	 *
    @@ -617,18 +630,20 @@ class ExtraFields
     	 *  @param  int		$alwayseditable		Is attribute always editable regardless of the document status
     	 *  @param	string	$perms				Permission to check
     	 *  @param	string	$list				Visiblity
    -	 *  @param	int		$notused			Deprecated.
    +	 *  @param	string	$help				Help on tooltip.
     	 *  @param  string  $default            Default value (in database. use the default_value feature for default value on screen).
     	 *  @param  string  $computed           Computed value
     	 *  @param  string  $entity     		Entity of extrafields
     	 *  @param	string	$langfile			Language file
     	 *  @param  string  $enabled  			Condition to have the field enabled or not
    -	 *  @return	int							<=0 if KO, >0 if OK
    +     *  @param  int     $totalizable        Is extrafield totalizable on list
    +     *  @return	int							<=0 if KO, >0 if OK
     	 */
    -	private function update_label($attrname,$label,$type,$size,$elementtype,$unique=0,$required=0,$pos=0,$param='',$alwayseditable=0,$perms='',$list='0',$notused=0,$default='',$computed='',$entity='',$langfile='',$enabled='1')
    +	private function update_label($attrname,$label,$type,$size,$elementtype,$unique=0,$required=0,$pos=0,$param='',$alwayseditable=0,$perms='',$list='0',$help='',$default='',$computed='',$entity='',$langfile='',$enabled='1', $totalizable=0)
     	{
    +        // phpcs:enable
     		global $conf, $user;
    -		dol_syslog(get_class($this)."::update_label ".$attrname.", ".$label.", ".$type.", ".$size.", ".$elementtype.", ".$unique.", ".$required.", ".$pos.", ".$alwayseditable.", ".$perms.", ".$list.", ".$notused.", ".$default.", ".$computed.", ".$entity.", ".$langfile.", ".$enabled);
    +		dol_syslog(get_class($this)."::update_label ".$attrname.", ".$label.", ".$type.", ".$size.", ".$elementtype.", ".$unique.", ".$required.", ".$pos.", ".$alwayseditable.", ".$perms.", ".$list.", ".$default.", ".$computed.", ".$entity.", ".$langfile.", ".$enabled.", ".$totalizable);
     
     		// Clean parameters
     		if ($elementtype == 'thirdparty') $elementtype='societe';
    @@ -636,6 +651,9 @@ class ExtraFields
     
     		if (empty($pos)) $pos=0;
     		if (empty($list)) $list='0';
    +        if (empty($totalizable)) {
    +            $totalizable = 0;
    +        }
     		if (empty($required)) $required=0;
     		if (empty($unique)) $unique=0;
     		if (empty($alwayseditable)) $alwayseditable=0;
    @@ -690,12 +708,14 @@ class ExtraFields
     			$sql.= " alwayseditable,";
     			$sql.= " param,";
     			$sql.= " list,";
    +            $sql.= " totalizable,";
     			$sql.= " fielddefault,";
     			$sql.= " fieldcomputed,";
     			$sql.= " fk_user_author,";
     			$sql.= " fk_user_modif,";
     			$sql.= " datec,";
    -			$sql.= " enabled";
    +			$sql.= " enabled,";
    +			$sql.= " help";
     			$sql.= ") VALUES (";
     			$sql.= "'".$attrname."',";
     			$sql.= " ".($entity===''?$conf->entity:$entity).",";
    @@ -711,12 +731,14 @@ class ExtraFields
     			$sql.= " '".$this->db->escape($alwayseditable)."',";
     			$sql.= " '".$this->db->escape($params)."',";
     			$sql.= " '".$this->db->escape($list)."', ";
    +            $sql.= " ".$totalizable.",";
     			$sql.= " ".(($default!='')?"'".$this->db->escape($default)."'":"null").",";
     			$sql.= " ".($computed?"'".$this->db->escape($computed)."'":"null").",";
     			$sql .= " " . $user->id . ",";
     			$sql .= " " . $user->id . ",";
     			$sql .= "'" . $this->db->idate(dol_now()) . "',";
    -			$sql .= "'" . $this->db->escape($enabled). "'";
    +			$sql .= "'" . $this->db->escape($enabled). "',";
    +			$sql.= " ".($help?"'".$this->db->escape($help)."'":"null");
     			$sql.= ")";
     
     			$resql2=$this->db->query($sql);
    @@ -740,6 +762,7 @@ class ExtraFields
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Load array this->attributes, or old this->attribute_xxx like attribute_label, attribute_type, ...
     	 *
    @@ -749,6 +772,7 @@ class ExtraFields
     	 */
     	function fetch_name_optionals_label($elementtype,$forceload=false)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if (empty($elementtype)) return array();
    @@ -781,7 +805,7 @@ class ExtraFields
     		// We should not have several time this log. If we have, there is some optimization to do by calling a simple $object->fetch_optionals() that include cache management.
     		dol_syslog("fetch_name_optionals_label elementtype=".$elementtype);
     
    -		$sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired,param,pos,alwayseditable,perms,langs,list,fielddefault,fieldcomputed,entity,enabled";
    +		$sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired,param,pos,alwayseditable,perms,langs,list,totalizable,fielddefault,fieldcomputed,entity,enabled,help";
     		$sql.= " FROM ".MAIN_DB_PREFIX."extrafields";
     		$sql.= " WHERE entity IN (0,".$conf->entity.")";
     		if ($elementtype) $sql.= " AND elementtype = '".$elementtype."'";	// Filed with object->table_element
    @@ -815,6 +839,7 @@ class ExtraFields
     					$this->attribute_perms[$tab->name]=(strlen($tab->perms) == 0 ? 1 : $tab->perms);
     					$this->attribute_langfile[$tab->name]=$tab->langs;
     					$this->attribute_list[$tab->name]=$tab->list;
    +					$this->attribute_totalizable[$tab->name]=$tab->totalizable;
     					$this->attribute_entityid[$tab->name]=$tab->entity;
     					$this->attribute_entitylabel[$tab->name]=(empty($labelmulticompany[$tab->entity])?'Entity'.$tab->entity:$labelmulticompany[$tab->entity]);
     
    @@ -833,9 +858,11 @@ class ExtraFields
     					$this->attributes[$tab->elementtype]['perms'][$tab->name]=(strlen($tab->perms) == 0 ? 1 : $tab->perms);
     					$this->attributes[$tab->elementtype]['langfile'][$tab->name]=$tab->langs;
     					$this->attributes[$tab->elementtype]['list'][$tab->name]=$tab->list;
    +                    $this->attributes[$tab->elementtype]['totalizable'][$tab->name]=$tab->totalizable;
     					$this->attributes[$tab->elementtype]['entityid'][$tab->name]=$tab->entity;
     					$this->attributes[$tab->elementtype]['entitylabel'][$tab->name]=(empty($labelmulticompany[$tab->entity])?'Entity'.$tab->entity:$labelmulticompany[$tab->entity]);
     					$this->attributes[$tab->elementtype]['enabled'][$tab->name]=$tab->enabled;
    +					$this->attributes[$tab->elementtype]['help'][$tab->name]=$tab->help;
     
     					$this->attributes[$tab->elementtype]['loaded']=1;
     				}
    @@ -893,6 +920,8 @@ class ExtraFields
     			$perms=dol_eval($this->attributes[$extrafieldsobjectkey]['perms'][$key], 1);
     			$langfile=$this->attributes[$extrafieldsobjectkey]['langfile'][$key];
     			$list=dol_eval($this->attributes[$extrafieldsobjectkey]['list'][$key], 1);
    +			$totalizable=$this->attributes[$extrafieldsobjectkey]['totalizable'][$key];
    +			$help=$this->attributes[$extrafieldsobjectkey]['help'][$key];
     			$hidden=(empty($list) ? 1 : 0);		// If empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
     		}
     		else	// Old usage
    @@ -908,6 +937,7 @@ class ExtraFields
     			$param=$this->attribute_param[$key];
     			$langfile=$this->attribute_langfile[$key];
     			$list=$this->attribute_list[$key];
    +			$totalizable=$this->attribute_totalizable[$key];
     			$hidden=(empty($list) ? 1 : 0);		// If empty, we are sure it is hidden, otherwise we show. If it depends on mode (view/create/edit form or list, this must be filtered by caller)
     		}
     
    @@ -967,11 +997,11 @@ class ExtraFields
     
     			$showtime = in_array($type,array('datetime')) ? 1 : 0;
     
    -			// Do not show current date when field not required (see select_date() method)
    +			// Do not show current date when field not required (see selectDate() method)
     			if (!$required && $value == '') $value = '-1';
     
     			// TODO Must also support $moreparam
    -			$out = $form->select_date($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 1, 0, 1);
    +			$out = $form->selectDate($value, $keyprefix.$key.$keysuffix, $showtime, $showtime, $required, '', 1, (($keyprefix != 'search_' && $keyprefix != 'search_options_') ? 1 : 0), 0, 1);
     		}
     		elseif (in_array($type,array('int','integer')))
     		{
    @@ -1362,7 +1392,6 @@ class ExtraFields
     							}
     
     							$data[$obj->rowid]=$labeltoshow;
    -
     						} else {
     							if (! $notrans) {
     								$translabel = $langs->trans($obj->{$InfoFieldList[1]});
    @@ -1391,7 +1420,6 @@ class ExtraFields
     					$this->db->free($resql);
     
     					$out=$form->multiselectarray($keyprefix.$key.$keysuffix, $data, $value_arr, '', 0, '', 0, '100%');
    -
     				} else {
     					print 'Error in request ' . $sql . ' ' . $this->db->lasterror() . '. Check setup of extra parameters.<br>';
     				}
    @@ -1685,7 +1713,6 @@ class ExtraFields
     					}
     				}
     				$value='<div class="select2-container-multi-dolibarr" style="width: 90%;"><ul class="select2-choices-dolibarr">'.implode(' ', $toprint).'</ul></div>';
    -
     			} else {
     				dol_syslog(get_class($this) . '::showOutputField error ' . $this->db->lasterror(), LOG_WARNING);
     			}
    @@ -1759,7 +1786,7 @@ class ExtraFields
     
     		$align='';
     
    -		if ($type == 'date')
    +        if ($type == 'date')
     		{
     			$align="center";
     		}
    @@ -1787,6 +1814,10 @@ class ExtraFields
     		{
     			$align="center";
     		}
    +		elseif ($type == 'price')
    +		{
    +			$align="right";
    +		}
     
     		return $align;
     	}
    @@ -1910,24 +1941,36 @@ class ExtraFields
     	/**
     	 * return array_options array of data of extrafields value of object sent by a search form
     	 *
    -	 * @param  array   $extralabels    $array of extrafields (@deprecated)
    -	 * @param  string  $keyprefix      Prefix string to add into name and id of field (can be used to avoid duplicate names)
    -	 * @param  string  $keysuffix      Suffix string to add into name and id of field (can be used to avoid duplicate names)
    -	 * @return array|int               array_options set or 0 if no value
    +	 * @param  array|string		$extrafieldsobjectkey  	array of extrafields (old usage) or value of object->table_element (new usage)
    +	 * @param  string			$keyprefix      		Prefix string to add into name and id of field (can be used to avoid duplicate names)
    +	 * @param  string			$keysuffix      		Suffix string to add into name and id of field (can be used to avoid duplicate names)
    +	 * @return array|int								array_options set or 0 if no value
     	 */
    -	function getOptionalsFromPost($extralabels,$keyprefix='',$keysuffix='')
    +	function getOptionalsFromPost($extrafieldsobjectkey, $keyprefix='', $keysuffix='')
     	{
     		global $_POST;
     
    -		if (is_array($this->attributes[$object->table_element]['label'])) $extralabels=$this->attributes[$object->table_element]['label'];
    +		if (is_string($extrafieldsobjectkey) && is_array($this->attributes[$extrafieldsobjectkey]['label']))
    +		{
    +			$extralabels = $this->attributes[$extrafieldsobjectkey]['label'];
    +		}
    +		else
    +		{
    +			$extralabels = $extrafieldsobjectkey;
    +		}
     
    -		$array_options = array();
     		if (is_array($extralabels))
     		{
    +			$array_options = array();
    +
     			// Get extra fields
     			foreach ($extralabels as $key => $value)
     			{
    -				$key_type = $this->attributes[$object->table_element]['type'][$key];
    +				$key_type = '';
    +				if (is_string($extrafieldsobjectkey))
    +				{
    +					$key_type = $this->attributes[$extrafieldsobjectkey]['type'][$key];
    +				}
     
     				if (in_array($key_type,array('date','datetime')))
     				{
    @@ -1956,8 +1999,7 @@ class ExtraFields
     
     			return $array_options;
     		}
    -		else {
    -			return 0;
    -		}
    +
    +		return 0;
     	}
     }
    diff --git a/htdocs/core/class/fileupload.class.php b/htdocs/core/class/fileupload.class.php
    index c3a40599877..027fdda0514 100644
    --- a/htdocs/core/class/fileupload.class.php
    +++ b/htdocs/core/class/fileupload.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/class/fiscalyear.class.php b/htdocs/core/class/fiscalyear.class.php
    index 987033d35e3..985d67d5cae 100644
    --- a/htdocs/core/class/fiscalyear.class.php
    +++ b/htdocs/core/class/fiscalyear.class.php
    @@ -16,7 +16,7 @@
      */
     
     /**
    - *      \file       htdocs/core/class/fiscalyear.php
    + *      \file       htdocs/core/class/fiscalyear.class.php
      *		\ingroup    fiscal year
      *		\brief      File of class to manage fiscal years
      */
    @@ -28,23 +28,54 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Fiscalyear extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='fiscalyear';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='accounting_fiscalyear';
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line = '';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element = '';
    -	public $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     
    -	var $rowid;
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
     
    -	var $label;
    -	var $date_start;
    -	var $date_end;
    -	var $datec;
    -	var $statut;		// 0=open, 1=closed
    -	var $entity;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $rowid;
     
    -	var $statuts=array();
    -	var $statuts_short=array();
    +	/**
    +     * @var string fiscal year label
    +     */
    +    public $label;
    +
    +	public $date_start;
    +	public $date_end;
    +	public $datec;
    +	public $statut;		// 0=open, 1=closed
    +
    +	/**
    +	 * @var int Entity
    +	 */
    +	public $entity;
    +
    +	public $statuts=array();
    +	public $statuts_short=array();
     
     	/**
     	 * Constructor
    @@ -56,9 +87,7 @@ class Fiscalyear extends CommonObject
     		$this->db = $db;
     
     		$this->statuts_short = array(0 => 'Opened', 1 => 'Closed');
    -        $this->statuts = array(0 => 'Opened', 1 => 'Closed');
    -
    -		return 1;
    +		$this->statuts = array(0 => 'Opened', 1 => 'Closed');
     	}
     
     	/**
    @@ -238,6 +267,7 @@ class Fiscalyear extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Give a label from a status
     	 *
    @@ -247,35 +277,36 @@ class Fiscalyear extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
     			return $langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			return $langs->trans($this->statuts_short[$statut]);
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts_short[$statut]);
    -			if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut8').' '.$langs->trans($this->statuts_short[$statut]);
    +			elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut8').' '.$langs->trans($this->statuts_short[$statut]);
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4');
    -			if ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut8');
    +			elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut8');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut==0 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut4').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut8').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return img_picto($langs->trans($this->statuts_short[$statut]),'statut8').' '.$langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut==0 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut4');
    -			if ($statut==1 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    +			elseif ($statut==1 && ! empty($this->statuts_short[$statut])) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
     		}
     	}
     
    @@ -323,5 +354,4 @@ class Fiscalyear extends CommonObject
     			dol_print_error($this->db);
     		}
     	}
    -
     }
    diff --git a/htdocs/core/class/genericobject.class.php b/htdocs/core/class/genericobject.class.php
    index c89b5c31fea..993d884c88b 100644
    --- a/htdocs/core/class/genericobject.class.php
    +++ b/htdocs/core/class/genericobject.class.php
    @@ -24,20 +24,18 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
     
     
     /**
    - *	Class of a generic business object
    + *  Class of a generic business object
      */
     
     class GenericObject extends CommonObject
     {
    -	/**
    -	 *	Constructor
    -	 *
    -	 *  @param		DoliDB		$db      Database handler
    -	 */
    -	function __construct($db)
    -	{
    -	    $this->db=$db;
    -	}
    -
    +    /**
    +     * Constructor
    +     *
    +     * @param       DoliDB      $db     Database handler
    +     */
    +    function __construct($db)
    +    {
    +        $this->db=$db;
    +    }
     }
    -
    diff --git a/htdocs/core/class/google.class.php b/htdocs/core/class/google.class.php
    index e923ec12252..615729ba9c3 100644
    --- a/htdocs/core/class/google.class.php
    +++ b/htdocs/core/class/google.class.php
    @@ -26,10 +26,17 @@
      */
     class GoogleAPI
     {
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -	var $key;
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	public $key;
     
     	/**
     	 * Constructor
    diff --git a/htdocs/core/class/hookmanager.class.php b/htdocs/core/class/hookmanager.class.php
    index 439e31caae1..4b0ed682e49 100644
    --- a/htdocs/core/class/hookmanager.class.php
    +++ b/htdocs/core/class/hookmanager.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2010-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2014 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2014 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2011 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -29,9 +29,20 @@
      */
     class HookManager
     {
    -	var $db;
    -	var $error;
    -	var $errors=array();
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +	
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
         // Context hookmanager was created for ('thirdpartycard', 'thirdpartydao', ...)
         var $contextarray=array();
    @@ -272,5 +283,4 @@ class HookManager
     
             return ($error?-1:$resaction);
     	}
    -
     }
    diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php
    index cebd49737e5..9a1ac5cb834 100644
    --- a/htdocs/core/class/html.form.class.php
    +++ b/htdocs/core/class/html.form.class.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
      * Copyright (C) 2004       Sebastien Di Cintio     <sdicintio@ressource-toi.org>
      * Copyright (C) 2004       Eric Seigne             <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2017  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2006       Andre Cianfarani        <acianfa@free.fr>
      * Copyright (C) 2006       Marc Barilley/Ocebo     <marc@ocebo.com>
      * Copyright (C) 2007       Franky Van Liedekerke   <franky.van.liedekerker@telenet.be>
    @@ -17,6 +17,7 @@
      * Copyright (C) 2012-2015  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2014       Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2018       Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -47,17 +48,30 @@
      */
     class Form
     {
    -	var $db;
    -	var $error;
    -	var $num;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +    /**
    +     * @var string[]    Array of error strings
    +     */
    +    public $errors = array();
    +
    +	public $num;
     
     	// Cache arrays
    -	var $cache_types_paiements=array();
    -	var $cache_conditions_paiements=array();
    -	var $cache_availability=array();
    -	var $cache_demand_reason=array();
    -	var $cache_types_fees=array();
    -	var $cache_vatrates=array();
    +	public $cache_types_paiements=array();
    +	public $cache_conditions_paiements=array();
    +	public $cache_availability=array();
    +	public $cache_demand_reason=array();
    +	public $cache_types_fees=array();
    +	public $cache_vatrates=array();
     
     
     	/**
    @@ -202,11 +216,11 @@ class Form
     				}
     				else if ($typeofdata == 'day' || $typeofdata == 'datepicker')
     				{
    -					$ret.=$this->select_date($value,$htmlname,0,0,1,'form'.$htmlname,1,0,1);
    +					$ret.=$this->selectDate($value,$htmlname,0,0,1,'form'.$htmlname,1,0);
     				}
     				else if ($typeofdata == 'dayhour' || $typeofdata == 'datehourpicker')
     				{
    -					$ret.=$this->select_date($value,$htmlname,1,1,1,'form'.$htmlname,1,0,1);
    +					$ret.=$this->selectDate($value,$htmlname,1,1,1,'form'.$htmlname,1,0);
     				}
     				else if (preg_match('/^select;/',$typeofdata))
     				{
    @@ -645,6 +659,7 @@ class Form
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return combo list of activated countries, into language of user
     	 *
    @@ -653,14 +668,16 @@ class Form
     	 *  @param  string	$htmloption     	Options html on select object
     	 *  @param	integer	$maxlength			Max length for labels (0=no limit)
     	 *  @param	string	$morecss			More css class
    -	 *  @param	string	$usecodeaskey		'code3'=Use code on 3 alpha as key, 'code2"=Use code on 2 alpha as key
    +	 *  @param	string	$usecodeaskey		''=Use id as key (default), 'code3'=Use code on 3 alpha as key, 'code2"=Use code on 2 alpha as key
     	 *  @param	int		$showempty			Show empty choice
    -	 *  @param	int		$disablefavorites	Disable favorites
    +	 *  @param	int		$disablefavorites	1=Disable favorites,
    +	 *  @param	int		$addspecialentries	1=Add dedicated entries for group of countries (like 'European Economic Community', ...)
     	 *  @return string           			HTML string with select
     	 */
    -	function select_country($selected='', $htmlname='country_id', $htmloption='', $maxlength=0, $morecss='minwidth300', $usecodeaskey='', $showempty=1, $disablefavorites=0)
    +	function select_country($selected='', $htmlname='country_id', $htmloption='', $maxlength=0, $morecss='minwidth300', $usecodeaskey='', $showempty=1, $disablefavorites=0, $addspecialentries=0)
     	{
    -		global $conf,$langs;
    +        // phpcs:enable
    +		global $conf,$langs,$mysoc;
     
     		$langs->load("dict");
     
    @@ -702,15 +719,31 @@ class Form
     				if (empty($disablefavorites)) array_multisort($favorite, SORT_DESC, $label, SORT_ASC, $countryArray);
     				else $countryArray = dol_sort_array($countryArray, 'label');
     
    +				if ($showempty)
    +				{
    +					$out.='<option value="">&nbsp;</option>'."\n";
    +				}
    +
    +				if ($addspecialentries)	// Add dedicated entries for groups of countries
    +				{
    +					//if ($showempty) $out.= '<option value="" disabled class="selectoptiondisabledwhite">--------------</option>';
    +					$out.= '<option value="special_allnotme"'.($selected == 'special_allnotme' ? ' selected' : '').'>'.$langs->trans("CountriesExceptMe", $langs->transnoentitiesnoconv("Country".$mysoc->country_code)).'</option>';
    +					$out.= '<option value="special_eec"'.($selected == 'special_eec' ? ' selected' : '').'>'.$langs->trans("CountriesInEEC").'</option>';
    +					if ($mysoc->isInEEC()) $out.= '<option value="special_eecnotme"'.($selected == 'special_eecnotme' ? ' selected' : '').'>'.$langs->trans("CountriesInEECExceptMe", $langs->transnoentitiesnoconv("Country".$mysoc->country_code)).'</option>';
    +					$out.= '<option value="special_noteec"'.($selected == 'special_noteec' ? ' selected' : '').'>'.$langs->trans("CountriesNotInEEC").'</option>';
    +					$out.= '<option value="" disabled class="selectoptiondisabledwhite">--------------</option>';
    +				}
    +
     				foreach ($countryArray as $row)
     				{
    -					if (empty($showempty) && empty($row['rowid'])) continue;
    +					//if (empty($showempty) && empty($row['rowid'])) continue;
    +					if (empty($row['rowid'])) continue;
     
     					if (empty($disablefavorites) && $row['favorite'] && $row['code_iso']) $atleastonefavorite++;
     					if (empty($row['favorite']) && $atleastonefavorite)
     					{
     						$atleastonefavorite=0;
    -						$out.= '<option value="" disabled class="selectoptiondisabledwhite">----------------------</option>';
    +						$out.= '<option value="" disabled class="selectoptiondisabledwhite">--------------</option>';
     					}
     					if ($selected && $selected != '-1' && ($selected == $row['rowid'] || $selected == $row['code_iso'] || $selected == $row['code_iso3'] || $selected == $row['label']) )
     					{
    @@ -741,6 +774,7 @@ class Form
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return select list of incoterms
     	 *
    @@ -755,6 +789,7 @@ class Form
     	 */
     	function select_incoterms($selected='', $location_incoterms='', $page='', $htmlname='incoterm_id', $htmloption='', $forcecombo=1, $events=array())
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$langs->load("dict");
    @@ -833,6 +868,7 @@ class Form
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of types of lines (product or service)
     	 * 	Example: 0=product, 1=service, 9=other (for external module)
    @@ -846,6 +882,7 @@ class Form
     	 */
     	function select_type_of_lines($selected='',$htmlname='type',$showempty=0,$hidetext=0,$forceall=0)
     	{
    +        // phpcs:enable
     		global $db,$langs,$user,$conf;
     
     		// If product & services are enabled or both disabled.
    @@ -888,6 +925,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Load into cache cache_types_fees, array of types of fees
     	 *
    @@ -895,6 +933,7 @@ class Form
     	 */
     	function load_cache_types_fees()
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$num = count($this->cache_types_fees);
    @@ -935,6 +974,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of types of notes
     	 *
    @@ -945,6 +985,7 @@ class Form
     	 */
     	function select_type_fees($selected='',$htmlname='type',$showempty=0)
     	{
    +        // phpcs:enable
     		global $user, $langs;
     
     		dol_syslog(__METHOD__." selected=".$selected.", htmlname=".$htmlname, LOG_DEBUG);
    @@ -973,6 +1014,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return HTML code to select a company.
     	 *
    @@ -987,9 +1029,11 @@ class Form
     	 */
     	function select_thirdparty($selected='', $htmlname='socid', $filter='', $limit=20, $ajaxoptions=array(), $forcecombo=0)
     	{
    +        // phpcs:enable
        		return $this->select_thirdparty_list($selected,$htmlname,$filter,1,0,$forcecombo,array(),'',0, $limit);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Output html form to select a third party
     	 *
    @@ -1006,10 +1050,12 @@ class Form
     	 *	@param	string	$selected_input_value	Value of preselected input text (for use with ajax)
     	 *  @param	int		$hidelabel				Hide label (0=no, 1=yes, 2=show search icon (before) and placeholder, 3 search icon after)
     	 *  @param	array	$ajaxoptions			Options for ajax_autocompleter
    +	 * 	@param  bool	$multiple				add [] in the name of element and add 'multiple' attribut (not working with ajax_autocompleter)
     	 * 	@return	string							HTML string with select box for thirdparty.
     	 */
    -	function select_company($selected='', $htmlname='socid', $filter='', $showempty='', $showtype=0, $forcecombo=0, $events=array(), $limit=0, $morecss='minwidth100', $moreparam='', $selected_input_value='', $hidelabel=1, $ajaxoptions=array())
    +	function select_company($selected='', $htmlname='socid', $filter='', $showempty='', $showtype=0, $forcecombo=0, $events=array(), $limit=0, $morecss='minwidth100', $moreparam='', $selected_input_value='', $hidelabel=1, $ajaxoptions=array(), $multiple=false)
     	{
    +        // phpcs:enable
     		global $conf,$user,$langs;
     
     		$out='';
    @@ -1045,12 +1091,13 @@ class Form
     		else
     		{
     			// Immediate load of all database
    -			$out.=$this->select_thirdparty_list($selected, $htmlname, $filter, $showempty, $showtype, $forcecombo, $events, '', 0, $limit, $morecss, $moreparam);
    +			$out.=$this->select_thirdparty_list($selected, $htmlname, $filter, $showempty, $showtype, $forcecombo, $events, '', 0, $limit, $morecss, $moreparam, $multiple);
     		}
     
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Output html form to select a third party.
     	 *  Note, you must use the select_company to get the component to select a third party. This function must only be called by select_company.
    @@ -1067,27 +1114,42 @@ class Form
     	 *  @param	int		$limit			Limit number of answers
     	 *  @param	string	$morecss		Add more css styles to the SELECT component
     	 *	@param  string	$moreparam      Add more parameters onto the select tag. For example 'style="width: 95%"' to avoid select2 component to go over parent container
    +	 *	@param  bool	$multiple       add [] in the name of element and add 'multiple' attribut
     	 * 	@return	string					HTML string with
     	 */
    -	function select_thirdparty_list($selected='',$htmlname='socid',$filter='',$showempty='', $showtype=0, $forcecombo=0, $events=array(), $filterkey='', $outputmode=0, $limit=0, $morecss='minwidth100', $moreparam='')
    +	function select_thirdparty_list($selected='',$htmlname='socid',$filter='',$showempty='', $showtype=0, $forcecombo=0, $events=array(), $filterkey='', $outputmode=0, $limit=0, $morecss='minwidth100', $moreparam='', $multiple=false)
     	{
    +        // phpcs:enable
     		global $conf,$user,$langs;
     
     		$out='';
     		$num=0;
     		$outarray=array();
     
    +		if ($selected === '') $selected = array();
    +		else if (!is_array($selected)) $selected = array($selected);
    +
     		// Clean $filter that may contains sql conditions so sql code
    -		if (function_exists('test_sql_and_script_inject')) {
    -			if (test_sql_and_script_inject($filter, 3)>0) {
    +		if (function_exists('testSqlAndScriptInject')) {
    +			if (testSqlAndScriptInject($filter, 3)>0) {
     				$filter ='';
     			}
     		}
     
     		// On recherche les societes
     		$sql = "SELECT s.rowid, s.nom as name, s.name_alias, s.client, s.fournisseur, s.code_client, s.code_fournisseur";
    -		$sql.= " FROM ".MAIN_DB_PREFIX ."societe as s";
    +
    +		if ($conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST) {
    +			$sql .= " ,s.address, s.zip, s.town";
    +		 	$sql .= " , dictp.code as country_code";
    +		}
    +
    +		$sql.= " FROM (".MAIN_DB_PREFIX ."societe as s";
     		if (!$user->rights->societe->client->voir && !$user->socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +		$sql.= " )";
    +		if ($conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST) {
    +			$sql.= " LEFT OUTER JOIN ".MAIN_DB_PREFIX."c_country as dictp ON dictp.rowid=s.fk_pays";
    +		}
     		$sql.= " WHERE s.entity IN (".getEntity('societe').")";
     		if (! empty($user->socid)) $sql.= " AND s.rowid = ".$user->socid;
     		if ($filter) $sql.= " AND (".$filter.")";
    @@ -1130,7 +1192,7 @@ class Form
     			}
     
     			// Construct $out and $outarray
    -			$out.= '<select id="'.$htmlname.'" class="flat'.($morecss?' '.$morecss:'').'"'.($moreparam?' '.$moreparam:'').' name="'.$htmlname.'">'."\n";
    +			$out.= '<select id="'.$htmlname.'" class="flat'.($morecss?' '.$morecss:'').'"'.($moreparam?' '.$moreparam:'').' name="'.$htmlname.($multiple ? '[]' : '').'" '.($multiple ? 'multiple' : '').'>'."\n";
     
     			$textifempty='';
     			// Do not use textifempty = ' ' or '&nbsp;' here, or search on key will search on ' key'.
    @@ -1177,9 +1239,16 @@ class Form
     						if ($obj->client || $obj->fournisseur) $label.=')';
     					}
     
    +					if ($conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST) {
    +						$label.='-'.$obj->address.'-'. $obj->zip.' '. $obj->town;
    +						if (!empty($obj->country_code)) {
    +							$label.= ' '. $langs->trans('Country'.$obj->country_code);
    +						}
    +					}
    +
     					if (empty($outputmode))
     					{
    -						if ($selected > 0 && $selected == $obj->rowid)
    +						if (in_array($obj->rowid,$selected))
     						{
     							$out.= '<option value="'.$obj->rowid.'" selected>'.$label.'</option>';
     						}
    @@ -1211,6 +1280,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    	Return HTML combo list of absolute discounts
     	 *
    @@ -1223,6 +1293,7 @@ class Form
     	 */
     	function select_remises($selected, $htmlname, $filter, $socid, $maxvalue=0)
     	{
    +        // phpcs:enable
     		global $langs,$conf;
     
     		// On recherche les remises
    @@ -1286,6 +1357,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of all contacts (for a third party or all)
     	 *
    @@ -1308,6 +1380,7 @@ class Form
     	 */
     	function select_contacts($socid,$selected='',$htmlname='contactid',$showempty=0,$exclude='',$limitto='',$showfunction=0, $moreclass='', $showsoc=0, $forcecombo=0, $events=array(), $options_only=false, $moreparam='', $htmlid='')
     	{
    +        // phpcs:enable
     		print $this->selectcontacts($socid,$selected,$htmlname,$showempty,$exclude,$limitto,$showfunction, $moreclass, $options_only, $showsoc, $forcecombo, $events, $moreparam, $htmlid);
     		return $this->num;
     	}
    @@ -1326,19 +1399,23 @@ class Form
     	 *	@param	string		$moreclass		Add more class to class style
     	 *	@param	bool		$options_only	Return options only (for ajax treatment)
     	 *	@param	integer		$showsoc	    Add company into label
    -	 * 	@param	int			$forcecombo		Force to use combo box
    +	 * 	@param	int			$forcecombo		Force to use combo box (so no ajax beautify effect)
     	 *  @param	array		$events			Event options. Example: array(array('method'=>'getContacts', 'url'=>dol_buildpath('/core/ajax/contacts.php',1), 'htmlname'=>'contactid', 'params'=>array('add-customer-contact'=>'disabled')))
     	 *  @param	string		$moreparam		Add more parameters onto the select tag. For example 'style="width: 95%"' to avoid select2 component to go over parent container
     	 *  @param	string		$htmlid			Html id to use instead of htmlname
    +	 *  @param	bool		$multiple		add [] in the name of element and add 'multiple' attribut
     	 *	@return	 int						<0 if KO, Nb of contact in list if OK
     	 */
    -	function selectcontacts($socid, $selected='', $htmlname='contactid', $showempty=0, $exclude='', $limitto='', $showfunction=0, $moreclass='', $options_only=false, $showsoc=0, $forcecombo=0, $events=array(), $moreparam='', $htmlid='')
    +	function selectcontacts($socid, $selected='', $htmlname='contactid', $showempty=0, $exclude='', $limitto='', $showfunction=0, $moreclass='', $options_only=false, $showsoc=0, $forcecombo=0, $events=array(), $moreparam='', $htmlid='', $multiple=false)
     	{
     		global $conf,$langs;
     
     		$langs->load('companies');
     
     		if (empty($htmlid)) $htmlid = $htmlname;
    +
    +		if ($selected === '') $selected = array();
    +		else if (!is_array($selected)) $selected = array($selected);
             $out='';
     
     		// On recherche les societes
    @@ -1363,9 +1440,9 @@ class Form
     				$out .= ajax_combobox($htmlid, $events, $conf->global->CONTACT_USE_SEARCH_TO_SELECT);
     			}
     
    -			if ($htmlname != 'none' || $options_only) $out.= '<select class="flat'.($moreclass?' '.$moreclass:'').'" id="'.$htmlid.'" name="'.$htmlname.'" '.(!empty($moreparam) ? $moreparam : '').'>';
    -			if ($showempty == 1 || ($showempty == 3 && $num > 1)) $out.= '<option value="0"'.($selected=='0'?' selected':'').'>&nbsp;</option>';
    -			if ($showempty == 2) $out.= '<option value="0"'.($selected=='0'?' selected':'').'>'.$langs->trans("Internal").'</option>';
    +			if ($htmlname != 'none' || $options_only) $out.= '<select class="flat'.($moreclass?' '.$moreclass:'').'" id="'.$htmlid.'" name="'.$htmlname.($multiple ? '[]' : '').'" '.($multiple ? 'multiple' : '').' '.(!empty($moreparam) ? $moreparam : '').'>';
    +			if (($showempty == 1 || ($showempty == 3 && $num > 1)) && !$multiple) $out.= '<option value="0"'.(in_array(0,$selected)?' selected':'').'>&nbsp;</option>';
    +			if ($showempty == 2) $out.= '<option value="0"'.(in_array(0,$selected)?' selected':'').'>'.$langs->trans("Internal").'</option>';
     			$num = $this->db->num_rows($resql);
     			$i = 0;
     			if ($num)
    @@ -1373,7 +1450,6 @@ class Form
     				include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     				$contactstatic=new Contact($this->db);
     
    -				if (!is_array($selected)) $selected = array($selected);
     				while ($i < $num)
     				{
     					$obj = $this->db->fetch_object($resql);
    @@ -1423,7 +1499,7 @@ class Form
     			}
     			else
     			{
    -				$out.= '<option value="-1"'.($showempty==2?'':' selected').' disabled>';
    +				$out.= '<option value="-1"'.(($showempty==2 || $multiple) ? '' : ' selected').' disabled>';
     				$out.= ($socid != -1) ? ($langs->trans($socid?"NoContactDefinedForThirdParty":"NoContactDefined")) : $langs->trans('SelectAThirdPartyFirst');
     				$out.= '</option>';
     			}
    @@ -1442,6 +1518,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return select list of users
     	 *
    @@ -1459,9 +1536,11 @@ class Form
     	 */
     	function select_users($selected='',$htmlname='userid',$show_empty=0,$exclude=null,$disabled=0,$include='',$enableonly='',$force_entity='0')
     	{
    +        // phpcs:enable
     		print $this->select_dolusers($selected,$htmlname,$show_empty,$exclude,$disabled,$include,$enableonly,$force_entity);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return select list of users
     	 *
    @@ -1481,16 +1560,21 @@ class Form
     	 *  @param	string	$morecss		More css
     	 *  @param  int     $noactive       Show only active users (this will also happened whatever is this option if USER_HIDE_INACTIVE_IN_COMBOBOX is on).
     	 *  @param  int		$outputmode     0=HTML select string, 1=Array
    +	 *  @param  bool	$multiple       add [] in the name of element and add 'multiple' attribut
     	 * 	@return	string					HTML select string
     	 *  @see select_dolgroups
     	 */
    -	function select_dolusers($selected='', $htmlname='userid', $show_empty=0, $exclude=null, $disabled=0, $include='', $enableonly='', $force_entity='0', $maxlength=0, $showstatus=0, $morefilter='', $show_every=0, $enableonlytext='', $morecss='', $noactive=0, $outputmode=0)
    +	function select_dolusers($selected='', $htmlname='userid', $show_empty=0, $exclude=null, $disabled=0, $include='', $enableonly='', $force_entity='0', $maxlength=0, $showstatus=0, $morefilter='', $show_every=0, $enableonlytext='', $morecss='', $noactive=0, $outputmode=0, $multiple=false)
     	{
    +        // phpcs:enable
     		global $conf,$user,$langs;
     
     		// If no preselected user defined, we take current user
     		if ((is_numeric($selected) && ($selected < -2 || empty($selected))) && empty($conf->global->SOCIETE_DISABLE_DEFAULT_SALESREPRESENTATIVE)) $selected=$user->id;
     
    +		if ($selected === '') $selected = array();
    +		else if (!is_array($selected)) $selected = array($selected);
    +
     		$excludeUsers=null;
     		$includeUsers=null;
     
    @@ -1526,7 +1610,7 @@ class Form
     			else $sql.= " WHERE u.entity IS NOT NULL";
     		}
     		else
    -	   {
    +		{
     			if (! empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE))
     			{
     				$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."usergroup_user as ug";
    @@ -1566,9 +1650,9 @@ class Form
     				$out .= ajax_combobox($htmlname);
     
     				// do not use maxwidthonsmartphone by default. Set it by caller so auto size to 100% will work when not defined
    -				$out.= '<select class="flat'.($morecss?' minwidth100 '.$morecss:' minwidth200').'" id="'.$htmlname.'" name="'.$htmlname.'"'.($disabled?' disabled':'').'>';
    -				if ($show_empty) $out.= '<option value="-1"'.((empty($selected) || $selected==-1)?' selected':'').'>&nbsp;</option>'."\n";
    -				if ($show_every) $out.= '<option value="-2"'.(($selected==-2)?' selected':'').'>-- '.$langs->trans("Everybody").' --</option>'."\n";
    +				$out.= '<select class="flat'.($morecss?' minwidth100 '.$morecss:' minwidth200').'" id="'.$htmlname.'" name="'.$htmlname.($multiple ? '[]' : '').'" '.($multiple ? 'multiple' : '').' '.($disabled?' disabled':'').'>';
    +				if ($show_empty && !$multiple) $out.= '<option value="-1"'.((empty($selected) || in_array(-1,$selected))?' selected':'').'>&nbsp;</option>'."\n";
    +				if ($show_every) $out.= '<option value="-2"'.((in_array(-2,$selected))?' selected':'').'>-- '.$langs->trans("Everybody").' --</option>'."\n";
     
     				$userstatic=new User($this->db);
     
    @@ -1583,7 +1667,7 @@ class Form
     					$disableline='';
     					if (is_array($enableonly) && count($enableonly) && ! in_array($obj->rowid,$enableonly)) $disableline=($enableonlytext?$enableonlytext:'1');
     
    -					if ((is_object($selected) && $selected->id == $obj->rowid) || (! is_object($selected) && $selected == $obj->rowid))
    +					if ((is_object($selected) && $selected->id == $obj->rowid) || (! is_object($selected) && in_array($obj->rowid,$selected) ))
     					{
     						$out.= '<option value="'.$obj->rowid.'"';
     						if ($disableline) $out.= ' disabled';
    @@ -1665,6 +1749,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return select list of users. Selected users are stored into session.
     	 *  List of users are provided into $_SESSION['assignedtouser'].
    @@ -1689,6 +1774,7 @@ class Form
     	 */
     	function select_dolusers_forevent($action='', $htmlname='userid', $show_empty=0, $exclude=null, $disabled=0, $include='', $enableonly='', $force_entity='0', $maxlength=0, $showstatus=0, $morefilter='', $showproperties=0, $listofuserid=array(), $listofcontactid=array(), $listofotherid=array())
     	{
    +        // phpcs:enable
     		global $conf, $user, $langs;
     
     		$userstatic=new User($this->db);
    @@ -1753,6 +1839,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of products for customer in Ajax if Ajax activated or go to select_produits_list
     	 *
    @@ -1780,6 +1867,7 @@ class Form
     	 */
     	function select_produits($selected='', $htmlname='productid', $filtertype='', $limit=20, $price_level=0, $status=1, $finished=2, $selected_input_value='', $hidelabel=0, $ajaxoptions=array(), $socid=0, $showempty='1', $forcecombo=0, $morecss='', $hidepriceinlabel=0, $warehouseStatus='', $selected_combinations = array())
     	{
    +        // phpcs:enable
     		global $langs,$conf;
     
     		$price_level = (! empty($price_level) ? $price_level : 0);
    @@ -1895,6 +1983,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of products for a customer
     	 *
    @@ -1920,6 +2009,7 @@ class Form
     	 */
     	function select_produits_list($selected='',$htmlname='productid',$filtertype='',$limit=20,$price_level=0,$filterkey='',$status=1,$finished=2,$outputmode=0,$socid=0,$showempty='1',$forcecombo=0,$morecss='',$hidepriceinlabel=0, $warehouseStatus='')
     	{
    +        // phpcs:enable
     		global $langs,$conf,$user,$db;
     
     		$out='';
    @@ -1982,6 +2072,12 @@ class Form
     			$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."entrepot as e on ps.fk_entrepot = e.rowid";
     		}
     
    +		// include search in supplier ref
    +		if(!empty($conf->global->MAIN_SEARCH_PRODUCT_BY_FOURN_REF))
    +		{
    +            $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product";
    +		}
    +
     		//Price by customer
     		if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES) && !empty($socid)) {
     			$sql.=" LEFT JOIN  ".MAIN_DB_PREFIX."product_customer_price as pcp ON pcp.fk_soc=".$socid." AND pcp.fk_product=p.rowid";
    @@ -2034,6 +2130,7 @@ class Form
     				if ($i > 0) $sql.=" AND ";
     				$sql.="(p.ref LIKE '".$db->escape($prefix.$crit)."%' OR p.label LIKE '".$db->escape($prefix.$crit)."%'";
     				if (! empty($conf->global->MAIN_MULTILANGS)) $sql.=" OR pl.label LIKE '".$db->escape($prefix.$crit)."%'";
    +				if (! empty($conf->global->MAIN_SEARCH_PRODUCT_BY_FOURN_REF)) $sql.=" OR pfp.ref_fourn LIKE '".$db->escape($prefix.$crit)."%'";
     				$sql.=")";
     				$i++;
     			}
    @@ -2381,6 +2478,7 @@ class Form
     		$optJson = array('key'=>$outkey, 'value'=>$outref, 'label'=>$outval, 'label2'=>$outlabel, 'desc'=>$outdesc, 'type'=>$outtype, 'price_ht'=>$outprice_ht, 'price_ttc'=>$outprice_ttc, 'pricebasetype'=>$outpricebasetype, 'tva_tx'=>$outtva_tx, 'qty'=>$outqty, 'discount'=>$outdiscount, 'duration_value'=>$outdurationvalue, 'duration_unit'=>$outdurationunit);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of products for customer (in Ajax if Ajax activated or go to select_produits_fournisseurs_list)
     	 *
    @@ -2396,6 +2494,7 @@ class Form
     	 */
     	function select_produits_fournisseurs($socid, $selected='', $htmlname='productid', $filtertype='', $filtre='', $ajaxoptions=array(), $hidelabel=0, $alsoproductwithnosupplierprice=0)
     	{
    +        // phpcs:enable
     		global $langs,$conf;
     		global $price_level, $status, $finished;
     
    @@ -2422,6 +2521,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of suppliers products
     	 *
    @@ -2439,6 +2539,7 @@ class Form
     	 */
     	function select_produits_fournisseurs_list($socid,$selected='',$htmlname='productid',$filtertype='',$filtre='',$filterkey='',$statut=-1,$outputmode=0,$limit=100,$alsoproductwithnosupplierprice=0)
     	{
    +        // phpcs:enable
     		global $langs,$conf,$db;
     
     		$out='';
    @@ -2651,6 +2752,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of suppliers prices for a product
     	 *
    @@ -2661,6 +2763,7 @@ class Form
     	 */
     	function select_product_fourn_price($productid, $htmlname='productfournpriceid', $selected_supplier='')
     	{
    +        // phpcs:enable
     		global $langs,$conf;
     
     		$langs->load('stocks');
    @@ -2762,6 +2865,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return list of delivery address
     	 *
    @@ -2773,7 +2877,8 @@ class Form
     	 */
     	function select_address($selected, $socid, $htmlname='address_id',$showempty=0)
     	{
    -		// On recherche les utilisateurs
    +        // phpcs:enable
    +		// looking for users
     		$sql = "SELECT a.rowid, a.label";
     		$sql .= " FROM ".MAIN_DB_PREFIX ."societe_address as a";
     		$sql .= " WHERE a.fk_soc = ".$socid;
    @@ -2814,6 +2919,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Load into cache list of payment terms
     	 *
    @@ -2821,6 +2927,7 @@ class Form
     	 */
     	function load_cache_conditions_paiements()
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$num = count($this->cache_conditions_paiements);
    @@ -2861,6 +2968,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Charge dans cache la liste des délais de livraison possibles
     	 *
    @@ -2868,6 +2976,7 @@ class Form
     	 */
     	function load_cache_availability()
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$num = count($this->cache_availability);
    @@ -3031,6 +3140,7 @@ class Form
     		if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Charge dans cache la liste des types de paiements possibles
     	 *
    @@ -3038,6 +3148,7 @@ class Form
     	 */
     	function load_cache_types_paiements()
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$num=count($this->cache_types_paiements);
    @@ -3083,6 +3194,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Return list of payment modes.
     	 *      Constant MAIN_DEFAULT_PAYMENT_TERM_ID can used to set default value but scope is all application, probably not what you want.
    @@ -3098,6 +3210,7 @@ class Form
     	 */
     	function select_conditions_paiements($selected=0, $htmlname='condid', $filtertype=-1, $addempty=0, $noinfoadmin=0, $morecss='')
     	{
    +        // phpcs:enable
     		global $langs, $user, $conf;
     
     		dol_syslog(__METHOD__." selected=".$selected.", htmlname=".$htmlname, LOG_DEBUG);
    @@ -3127,6 +3240,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Return list of payment methods
     	 *
    @@ -3143,6 +3257,7 @@ class Form
     	 */
     	function select_types_paiements($selected='', $htmlname='paiementtype', $filtertype='', $format=0, $empty=1, $noadmininfo=0, $maxlength=0, $active=1, $morecss='')
     	{
    +        // phpcs:enable
     		global $langs,$user;
     
     		dol_syslog(__METHOD__." ".$selected.", ".$htmlname.", ".$filtertype.", ".$format, LOG_DEBUG);
    @@ -3168,17 +3283,17 @@ class Form
     			if ($empty && empty($arraytypes['code'])) continue;
     
     			if ($format == 0) print '<option value="'.$id.'"';
    -			if ($format == 1) print '<option value="'.$arraytypes['code'].'"';
    -			if ($format == 2) print '<option value="'.$arraytypes['code'].'"';
    -			if ($format == 3) print '<option value="'.$id.'"';
    +			elseif ($format == 1) print '<option value="'.$arraytypes['code'].'"';
    +			elseif ($format == 2) print '<option value="'.$arraytypes['code'].'"';
    +			elseif ($format == 3) print '<option value="'.$id.'"';
     			// Si selected est text, on compare avec code, sinon avec id
     			if (preg_match('/[a-z]/i', $selected) && $selected == $arraytypes['code']) print ' selected';
     			elseif ($selected == $id) print ' selected';
     			print '>';
     			if ($format == 0) $value=($maxlength?dol_trunc($arraytypes['label'],$maxlength):$arraytypes['label']);
    -			if ($format == 1) $value=$arraytypes['code'];
    -			if ($format == 2) $value=($maxlength?dol_trunc($arraytypes['label'],$maxlength):$arraytypes['label']);
    -			if ($format == 3) $value=$arraytypes['code'];
    +			elseif ($format == 1) $value=$arraytypes['code'];
    +			elseif ($format == 2) $value=($maxlength?dol_trunc($arraytypes['label'],$maxlength):$arraytypes['label']);
    +			elseif ($format == 3) $value=$arraytypes['code'];
     			print $value?$value:'&nbsp;';
     			print '</option>';
     		}
    @@ -3393,7 +3508,7 @@ class Form
     			    {
     			        $unitLabel = $langs->trans('unit'.$res->code)!=$res->label?$langs->trans('unit'.$res->code):$res->label;
     			    }
    -			    
    +
     				if ($selected == $res->rowid)
     				{
     				    $return.='<option value="'.$res->rowid.'" selected>'.$unitLabel.'</option>';
    @@ -3408,6 +3523,7 @@ class Form
     		return $return;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return a HTML select list of bank accounts
     	 *
    @@ -3422,6 +3538,7 @@ class Form
     	 */
     	function select_comptes($selected='',$htmlname='accountid',$statut=0,$filtre='',$useempty=0,$moreattrib='',$showcurrency=0)
     	{
    +        // phpcs:enable
     		global $langs, $conf;
     
     		$langs->load("admin");
    @@ -3511,6 +3628,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return list of categories having choosed type
     	 *
    @@ -3525,6 +3643,7 @@ class Form
     	 */
     	function select_all_categories($type, $selected='', $htmlname="parent", $maxlength=64, $excludeafterid=0, $outputmode=0)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     		$langs->load("categories");
     
    @@ -3596,6 +3715,7 @@ class Form
     		return $output;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *     Show a confirmation HTML form or AJAX popup
     	 *
    @@ -3614,6 +3734,8 @@ class Form
     	 */
     	function form_confirm($page, $title, $question, $action, $formquestion='', $selectedchoice="", $useajax=0, $height=170, $width=500)
     	{
    +        // phpcs:enable
    +        dol_syslog(__METHOD__ . ': using form_confirm is deprecated. Use formconfim instead.', LOG_WARNING);
     		print $this->formconfirm($page, $title, $question, $action, $formquestion, $selectedchoice, $useajax, $height, $width);
     	}
     
    @@ -3671,7 +3793,7 @@ class Form
     
     			// Now add questions
     			$more.='<table class="paddingtopbottomonly" width="100%">'."\n";
    -			$more.='<tr><td colspan="3">'.(! empty($formquestion['text'])?$formquestion['text']:'').'</td></tr>'."\n";
    +			if (! empty($formquestion['text'])) $more.='<tr><td colspan="2">'.$formquestion['text'].'</td></tr>'."\n";
     			foreach ($formquestion as $key => $input)
     			{
     				if (is_array($input) && ! empty($input))
    @@ -3682,53 +3804,51 @@ class Form
     
     					if ($input['type'] == 'text')
     					{
    -						$more.='<tr><td>'.$input['label'].'</td><td colspan="2" align="left"><input type="text" class="flat'.$morecss.'" id="'.$input['name'].'" name="'.$input['name'].'"'.$size.' value="'.$input['value'].'"'.$moreattr.' /></td></tr>'."\n";
    +						$more.='<tr><td'.(empty($input['tdclass'])?'':(' class="'.$input['tdclass'].'"')).'>'.$input['label'].'</td><td align="left"><input type="text" class="flat'.$morecss.'" id="'.$input['name'].'" name="'.$input['name'].'"'.$size.' value="'.$input['value'].'"'.$moreattr.' /></td></tr>'."\n";
     					}
    -					else if ($input['type'] == 'password')
    +					elseif ($input['type'] == 'password')
     					{
    -						$more.='<tr><td>'.$input['label'].'</td><td colspan="2" align="left"><input type="password" class="flat'.$morecss.'" id="'.$input['name'].'" name="'.$input['name'].'"'.$size.' value="'.$input['value'].'"'.$moreattr.' /></td></tr>'."\n";
    +						$more.='<tr><td'.(empty($input['tdclass'])?'':(' class="'.$input['tdclass'].'"')).'>'.$input['label'].'</td><td align="left"><input type="password" class="flat'.$morecss.'" id="'.$input['name'].'" name="'.$input['name'].'"'.$size.' value="'.$input['value'].'"'.$moreattr.' /></td></tr>'."\n";
     					}
    -					else if ($input['type'] == 'select')
    +					elseif ($input['type'] == 'select')
     					{
    -						$more.='<tr><td>';
    -						if (! empty($input['label'])) $more.=$input['label'].'</td><td valign="top" colspan="2" align="left">';
    +						$more.='<tr><td'.(empty($input['tdclass'])?'':(' class="'.$input['tdclass'].'"')).'>';
    +						if (! empty($input['label'])) $more.=$input['label'].'</td><td class="tdtop" align="left">';
     						$more.=$this->selectarray($input['name'],$input['values'],$input['default'],1,0,0,$moreattr,0,0,0,'',$morecss);
     						$more.='</td></tr>'."\n";
     					}
    -					else if ($input['type'] == 'checkbox')
    +					elseif ($input['type'] == 'checkbox')
     					{
     						$more.='<tr>';
    -						$more.='<td>'.$input['label'].' </td><td align="left">';
    +						$more.='<td'.(empty($input['tdclass'])?'':(' class="'.$input['tdclass'].'"')).'>'.$input['label'].' </td><td align="left">';
     						$more.='<input type="checkbox" class="flat'.$morecss.'" id="'.$input['name'].'" name="'.$input['name'].'"'.$moreattr;
     						if (! is_bool($input['value']) && $input['value'] != 'false' && $input['value'] != '0') $more.=' checked';
     						if (is_bool($input['value']) && $input['value']) $more.=' checked';
     						if (isset($input['disabled'])) $more.=' disabled';
     						$more.=' /></td>';
    -						$more.='<td align="left">&nbsp;</td>';
     						$more.='</tr>'."\n";
     					}
    -					else if ($input['type'] == 'radio')
    +					elseif ($input['type'] == 'radio')
     					{
     						$i=0;
     						foreach($input['values'] as $selkey => $selval)
     						{
     							$more.='<tr>';
    -							if ($i==0) $more.='<td class="tdtop">'.$input['label'].'</td>';
    -							else $more.='<td>&nbsp;</td>';
    -							$more.='<td width="20"><input type="radio" class="flat'.$morecss.'" id="'.$input['name'].'" name="'.$input['name'].'" value="'.$selkey.'"'.$moreattr;
    +							if ($i==0) $more.='<td'.(empty($input['tdclass'])?' class="tdtop"':(' class="tdtop '.$input['tdclass'].'"')).'>'.$input['label'].'</td>';
    +							else $more.='<td'.(empty($input['tdclass'])?'':(' class="'.$input['tdclass'].'"')).'>&nbsp;</td>';
    +							$more.='<td><input type="radio" class="flat'.$morecss.'" id="'.$input['name'].'" name="'.$input['name'].'" value="'.$selkey.'"'.$moreattr;
     							if ($input['disabled']) $more.=' disabled';
    -							$more.=' /></td>';
    -							$more.='<td align="left">';
    +							$more.=' /> ';
     							$more.=$selval;
     							$more.='</td></tr>'."\n";
     							$i++;
     						}
     					}
    -					else if ($input['type'] == 'date')
    +					elseif ($input['type'] == 'date')
     					{
    -						$more.='<tr><td>'.$input['label'].'</td>';
    -						$more.='<td colspan="2" align="left">';
    -						$more.=$this->select_date($input['value'],$input['name'],0,0,0,'',1,0,1);
    +						$more.='<tr><td'.(empty($input['tdclass'])?'':(' class="'.$input['tdclass'].'"')).'>'.$input['label'].'</td>';
    +						$more.='<td align="left">';
    +						$more.=$this->selectDate($input['value'],$input['name'],0,0,0,'',1,0);
     						$more.='</td></tr>'."\n";
     						$formquestion[] = array('name'=>$input['name'].'day');
     						$formquestion[] = array('name'=>$input['name'].'month');
    @@ -3736,17 +3856,17 @@ class Form
     						$formquestion[] = array('name'=>$input['name'].'hour');
     						$formquestion[] = array('name'=>$input['name'].'min');
     					}
    -					else if ($input['type'] == 'other')
    +					elseif ($input['type'] == 'other')
     					{
    -						$more.='<tr><td>';
    -						if (! empty($input['label'])) $more.=$input['label'].'</td><td colspan="2" align="left">';
    +						$more.='<tr><td'.(empty($input['tdclass'])?'':(' class="'.$input['tdclass'].'"')).'>';
    +						if (! empty($input['label'])) $more.=$input['label'].'</td><td align="left">';
     						$more.=$input['value'];
     						$more.='</td></tr>'."\n";
     					}
     
    -					else if ($input['type'] == 'onecolumn')
    +					elseif ($input['type'] == 'onecolumn')
     					{
    -						$more.='<tr><td colspan="3" align="left">';
    +						$more.='<tr><td colspan="2" align="left">';
     						$more.=$input['value'];
     						$more.='</td></tr>'."\n";
     					}
    @@ -3793,21 +3913,21 @@ class Form
     			$formconfirm.= ($question ? '<div class="confirmmessage">'.img_help('','').' '.$question . '</div>': '');
     			$formconfirm.= '</div>'."\n";
     
    -			$formconfirm.= "\n<!-- begin ajax form_confirm page=".$page." -->\n";
    +			$formconfirm.= "\n<!-- begin ajax formconfirm page=".$page." -->\n";
     			$formconfirm.= '<script type="text/javascript">'."\n";
     			$formconfirm.= 'jQuery(document).ready(function() {
                 $(function() {
                 	$( "#'.$dialogconfirm.'" ).dialog(
                 	{
                         autoOpen: '.($autoOpen ? "true" : "false").',';
    -					if ($newselectedchoice == 'no')
    -					{
    -						$formconfirm.='
    +			if ($newselectedchoice == 'no')
    +			{
    +				$formconfirm.='
     						open: function() {
                 				$(this).parent().find("button.ui-button:eq(2)").focus();
     						},';
    -					}
    -					$formconfirm.='
    +			}
    +			$formconfirm.='
                         resizable: false,
                         height: "'.$height.'",
                         width: "'.$width.'",
    @@ -3864,11 +3984,11 @@ class Form
                 });
                 });
                 </script>';
    -			$formconfirm.= "<!-- end ajax form_confirm -->\n";
    +			$formconfirm.= "<!-- end ajax formconfirm -->\n";
     		}
     		else
     		{
    -			$formconfirm.= "\n<!-- begin form_confirm page=".$page." -->\n";
    +			$formconfirm.= "\n<!-- begin formconfirm page=".$page." -->\n";
     
     			if (empty($disableformtag)) $formconfirm.= '<form method="POST" action="'.$page.'" class="notoptoleftroright">'."\n";
     
    @@ -3902,13 +4022,14 @@ class Form
     			if (empty($disableformtag)) $formconfirm.= "</form>\n";
     			$formconfirm.= '<br>';
     
    -			$formconfirm.= "<!-- end form_confirm -->\n";
    +			$formconfirm.= "<!-- end formconfirm -->\n";
     		}
     
     		return $formconfirm;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Show a form to select a project
     	 *
    @@ -3924,6 +4045,7 @@ class Form
     	 */
     	function form_project($page, $socid, $selected='', $htmlname='projectid', $discard_closed=0, $maxlength=20, $forcefocus=0, $nooutput=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -3967,6 +4089,7 @@ class Form
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show a form to select payment conditions
     	 *
    @@ -3978,6 +4101,7 @@ class Form
     	 */
     	function form_conditions_reglement($page, $selected='', $htmlname='cond_reglement_id', $addempty=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		if ($htmlname != "none")
     		{
    @@ -4000,6 +4124,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show a form to select a delivery delay
     	 *
    @@ -4011,6 +4136,7 @@ class Form
     	 */
     	function form_availability($page, $selected='', $htmlname='availability', $addempty=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		if ($htmlname != "none")
     		{
    @@ -4074,6 +4200,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Show a form + html select a date
     	 *
    @@ -4084,10 +4211,11 @@ class Form
     	 *    @param    int			$displaymin		Display minutes selector
     	 *    @param	int			$nooutput		1=No print output, return string
     	 *    @return	string
    -	 *    @see		select_date
    +	 *    @see		selectDate
     	 */
     	function form_date($page, $selected, $htmlname, $displayhour=0, $displaymin=0, $nooutput=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$ret='';
    @@ -4099,7 +4227,7 @@ class Form
     			$ret.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     			$ret.='<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
     			$ret.='<tr><td>';
    -			$ret.=$this->select_date($selected,$htmlname,$displayhour,$displaymin,1,'form'.$htmlname,1,0,1);
    +			$ret.=$this->selectDate($selected,$htmlname,$displayhour,$displaymin,1,'form'.$htmlname,1,0);
     			$ret.='</td>';
     			$ret.='<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
     			$ret.='</tr></table></form>';
    @@ -4115,6 +4243,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show a select form to choose a user
     	 *
    @@ -4127,6 +4256,7 @@ class Form
     	 */
     	function form_users($page, $selected='', $htmlname='userid', $exclude='', $include='')
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($htmlname != "none")
    @@ -4153,6 +4283,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Show form with payment mode
     	 *
    @@ -4165,6 +4296,7 @@ class Form
     	 */
     	function form_modes_reglement($page, $selected='', $htmlname='mode_reglement_id', $filtertype='', $active=1)
     	{
    +        // phpcs:enable
     		global $langs;
     		if ($htmlname != "none")
     		{
    @@ -4187,6 +4319,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Show form with multicurrency code
     	 *
    @@ -4197,6 +4330,7 @@ class Form
     	 */
     	function form_multicurrency_code($page, $selected='', $htmlname='multicurrency_code')
     	{
    +        // phpcs:enable
     		global $langs;
     		if ($htmlname != "none")
     		{
    @@ -4214,6 +4348,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Show form with multicurrency rate
     	 *
    @@ -4225,6 +4360,7 @@ class Form
     	 */
     	function form_multicurrency_rate($page, $rate='', $htmlname='multicurrency_tx', $currency='')
     	{
    +        // phpcs:enable
     		global $langs, $mysoc, $conf;
     
     		if ($htmlname != "none")
    @@ -4255,6 +4391,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show a select box with available absolute discounts
     	 *
    @@ -4272,6 +4409,7 @@ class Form
     	 */
     	function form_remise_dispo($page, $selected, $htmlname, $socid, $amount, $filter='', $maxvalue=0, $more='', $hidelist=0, $discount_type=0)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     		if ($htmlname != "none")
     		{
    @@ -4350,6 +4488,7 @@ class Form
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Show forms to select a contact
     	 *
    @@ -4361,6 +4500,7 @@ class Form
     	 */
     	function form_contacts($page, $societe, $selected='', $htmlname='contactid')
     	{
    +        // phpcs:enable
     		global $langs, $conf;
     
     		if ($htmlname != "none")
    @@ -4394,6 +4534,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Output html select to select thirdparty
     	 *
    @@ -4405,20 +4546,23 @@ class Form
     	 * 	@param	int		$showtype		Show third party type in combolist (customer, prospect or supplier)
     	 * 	@param	int		$forcecombo		Force to use combo box
     	 *  @param	array	$events			Event options. Example: array(array('method'=>'getContacts', 'url'=>dol_buildpath('/core/ajax/contacts.php',1), 'htmlname'=>'contactid', 'params'=>array('add-customer-contact'=>'disabled')))
    +	 *  @param  int     $nooutput       No print output. Return it only.
     	 *  @return	void
     	 */
    -	function form_thirdparty($page, $selected='', $htmlname='socid', $filter='',$showempty=0, $showtype=0, $forcecombo=0, $events=array())
    +	function form_thirdparty($page, $selected='', $htmlname='socid', $filter='',$showempty=0, $showtype=0, $forcecombo=0, $events=array(), $nooutput=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
    +		$out = '';
     		if ($htmlname != "none")
     		{
    -			print '<form method="post" action="'.$page.'">';
    -			print '<input type="hidden" name="action" value="set_thirdparty">';
    -			print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    -			print $this->select_company($selected, $htmlname, $filter, $showempty, $showtype, $forcecombo, $events);
    -			print '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
    -			print '</form>';
    +			$out.='<form method="post" action="'.$page.'">';
    +			$out.= '<input type="hidden" name="action" value="set_thirdparty">';
    +			$out.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +			$out.= $this->select_company($selected, $htmlname, $filter, $showempty, $showtype, $forcecombo, $events);
    +			$out.= '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
    +			$out.= '</form>';
     		}
     		else
     		{
    @@ -4427,24 +4571,30 @@ class Form
     				require_once DOL_DOCUMENT_ROOT .'/societe/class/societe.class.php';
     				$soc = new Societe($this->db);
     				$soc->fetch($selected);
    -				print $soc->getNomUrl($langs);
    +				$out.= $soc->getNomUrl($langs);
     			}
     			else
     			{
    -				print "&nbsp;";
    +				$out.= "&nbsp;";
     			}
     		}
    +
    +		if ($nooutput) return $out;
    +		else print $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Retourne la liste des devises, dans la langue de l'utilisateur
     	 *
     	 *    @param	string	$selected    preselected currency code
     	 *    @param    string	$htmlname    name of HTML select list
    +     *    @deprecated
     	 *    @return	void
     	 */
     	function select_currency($selected='',$htmlname='currency_id')
     	{
    +        // phpcs:enable
     		print $this->selectCurrency($selected,$htmlname);
     	}
     
    @@ -4536,7 +4686,6 @@ class Form
     					$out.= '</option>';
     				}
     			}
    -
     		}
     
     		$out.= '</select>';
    @@ -4547,6 +4696,7 @@ class Form
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Load into the cache vat rates of a country
     	 *
    @@ -4555,6 +4705,7 @@ class Form
     	 */
     	function load_cache_vatrates($country_code)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$num = count($this->cache_vatrates);
    @@ -4612,6 +4763,7 @@ class Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Output an HTML select vat rate.
     	 *  The name of this function should be selectVat. We keep bad name for compatibility purpose.
    @@ -4635,6 +4787,7 @@ class Form
     	 */
     	function load_tva($htmlname='tauxtva', $selectedrate='', $societe_vendeuse='', $societe_acheteuse='', $idprod=0, $info_bits=0, $type='', $options_only=false, $mode=0)
     	{
    +        // phpcs:enable
     		global $langs,$conf,$mysoc;
     
     		$langs->load('errors');
    @@ -4803,8 +4956,9 @@ class Form
     	}
     
     
    -	/**
    -	 *	Show a HTML widget to input a date or combo list for day, month, years and optionaly hours and minutes.
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Show a HTML widget to input a date or combo list for day, month, years and optionaly hours and minutes.
     	 *  Fields are preselected with :
     	 *            	- set_time date (must be a local PHP server timestamp or string date with format 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM')
     	 *            	- local date in user area, if set_time is '' (so if set_time is '', output may differs when done from two different location)
    @@ -4823,18 +4977,52 @@ class Form
     	 *  @param  int			$fullday        When a checkbox with this html name is on, hour and day are set with 00:00 or 23:59
     	 *  @param	string		$addplusone		Add a link "+1 hour". Value must be name of another select_date field.
     	 *  @param  datetime    $adddateof      Add a link "Date of invoice" using the following date.
    -	 * 	@return	string|null						Nothing or string if nooutput is 1
    -	 *  @see	form_date, select_month, select_year, select_dayofweek
    +	 *  @return	string|void					Nothing or string if nooutput is 1
    +     *  @deprecated
    +	 *  @see    form_date, select_month, select_year, select_dayofweek
     	 */
    -	function select_date($set_time='', $prefix='re', $h=0, $m=0, $empty=0, $form_name="", $d=1, $addnowlink=0, $nooutput=0, $disabled=0, $fullday='', $addplusone='', $adddateof='')
    +    function select_date($set_time='', $prefix='re', $h=0, $m=0, $empty=0, $form_name="", $d=1, $addnowlink=0, $nooutput=0, $disabled=0, $fullday='', $addplusone='', $adddateof='')
    +    {
    +        // phpcs:enable
    +        $retstring = $this->selectDate($set_time, $prefix, $h, $m, $empty, $form_name, $d, $addnowlink, $disabled, $fullday, $addplusone, $adddateof);
    +        if (! empty($nooutput)) {
    +            return $retstring;
    +        }
    +        print $retstring;
    +        return;
    +    }
    +
    +    /**
    +     *  Show a HTML widget to input a date or combo list for day, month, years and optionaly hours and minutes.
    +	 *  Fields are preselected with :
    +	 *              - set_time date (must be a local PHP server timestamp or string date with format 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM')
    +	 *              - local date in user area, if set_time is '' (so if set_time is '', output may differs when done from two different location)
    +	 *              - Empty (fields empty), if set_time is -1 (in this case, parameter empty must also have value 1)
    +	 *
    +	 *  @param  timestamp   $set_time       Pre-selected date (must be a local PHP server timestamp), -1 to keep date not preselected, '' to use current date with 00:00 hour (Parameter 'empty' must be 0 or 2).
    +	 *  @param	string		$prefix			Prefix for fields name
    +	 *  @param	int			$h				1 or 2=Show also hours (2=hours on a new line), -1 has same effect but hour and minutes are prefilled with 23:59 if date is empty, 3 show hour always empty
    +	 *	@param	int			$m				1=Show also minutes, -1 has same effect but hour and minutes are prefilled with 23:59 if date is empty, 3 show minutes always empty
    +	 *	@param	int			$empty			0=Fields required, 1=Empty inputs are allowed, 2=Empty inputs are allowed for hours only
    +	 *	@param	string		$form_name 		Not used
    +	 *	@param	int			$d				1=Show days, month, years
    +	 * 	@param	int			$addnowlink		Add a link "Now"
    +	 * 	@param 	int			$disabled		Disable input fields
    +	 *  @param  int			$fullday        When a checkbox with this html name is on, hour and day are set with 00:00 or 23:59
    +	 *  @param	string		$addplusone		Add a link "+1 hour". Value must be name of another selectDate field.
    +	 *  @param  datetime    $adddateof      Add a link "Date of invoice" using the following date.
    +	 * 	@return string                      Html for selectDate
    +	 *  @see    form_date, select_month, select_year, select_dayofweek
    +	 */
    +	function selectDate($set_time='', $prefix='re', $h=0, $m=0, $empty=0, $form_name="", $d=1, $addnowlink=0, $disabled=0, $fullday='', $addplusone='', $adddateof='')
     	{
     		global $conf,$langs;
     
     		$retstring='';
     
    -		if($prefix=='') $prefix='re';
    -		if($h == '') $h=0;
    -		if($m == '') $m=0;
    +		if ($prefix=='') $prefix='re';
    +		if ($h == '') $h=0;
    +		if ($m == '') $m=0;
     		$emptydate=0;
     		$emptyhours=0;
     		if ($empty == 1) { $emptydate=1; $emptyhours=1; }
    @@ -4894,7 +5082,6 @@ class Form
     		if (! empty($conf->use_javascript_ajax) && (empty($conf->global->MAIN_POPUP_CALENDAR) || $conf->global->MAIN_POPUP_CALENDAR != "none")) {
     			$usecalendar = ((empty($conf->global->MAIN_POPUP_CALENDAR) || $conf->global->MAIN_POPUP_CALENDAR == 'eldy')?'jquery':$conf->global->MAIN_POPUP_CALENDAR);
     		}
    -		//if (! empty($conf->browser->phone)) $usecalendar='combo';
     
     		if ($d)
     		{
    @@ -5173,12 +5360,10 @@ class Form
     			$retstring.=' - <button class="dpInvisibleButtons datenowlink" id="dateofinvoice" type="button" name="_dateofinvoice" value="now" onclick="jQuery(\'#re\').val(\''.dol_print_date($adddateof,'day').'\');jQuery(\'#reday\').val(\''.$tmparray['mday'].'\');jQuery(\'#remonth\').val(\''.$tmparray['mon'].'\');jQuery(\'#reyear\').val(\''.$tmparray['year'].'\');">'.$langs->trans("DateInvoice").'</a>';
     		}
     
    -		if (! empty($nooutput)) return $retstring;
    -
    -		print $retstring;
    -		return;
    +		return $retstring;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to show a form to select a duration on a page
     	 *
    @@ -5190,10 +5375,11 @@ class Form
     	 *						            if 'textselect' input hour is in text and input min is a combo
     	 *  @param	integer	$minunderhours	If 1, show minutes selection under the hours
     	 * 	@param	int	$nooutput		    Do not output html string but return it
    -	 *  @return	string|null
    +	 *  @return	string|void
     	 */
     	function select_duration($prefix, $iSecond='', $disabled=0, $typehour='select', $minunderhours=0, $nooutput=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$retstring='';
    @@ -5592,7 +5778,7 @@ class Form
     	 *  @param	string	$morecss				Add more class to css styles
     	 *  @param  int     $callurlonselect        If set to 1, some code is added so an url return by the ajax is called when value is selected.
     	 *  @param  string  $placeholder            String to use as placeholder
    -	 *  @param  integer $acceptdelayedhtml      1 if caller request to have html js content not returned but saved into global $delayedhtmlcontent (so caller can show it at end of page to avoid flash FOUC effect)
    +	 *  @param  integer $acceptdelayedhtml      1 = caller is requesting to have html js content not returned but saved into global $delayedhtmlcontent (so caller can show it at end of page to avoid flash FOUC effect)
     	 * 	@return	string   						HTML select string
     	 *  @see selectArrayFilter, ajax_combobox in ajax.lib.php
     	 */
    @@ -5694,7 +5880,7 @@ class Form
     	 *  @param	string	$morecss				Add more class to css styles
     	 *  @param  int     $callurlonselect        If set to 1, some code is added so an url return by the ajax is called when value is selected.
     	 *  @param  string  $placeholder            String to use as placeholder
    -	 *  @param  integer $acceptdelayedhtml      1 if caller request to have html js content not returned but saved into global $delayedhtmlcontent (so caller can show it at end of page to avoid flash FOUC effect)
    +	 *  @param  integer $acceptdelayedhtml      1 = caller is requesting to have html js content not returned but saved into global $delayedhtmlcontent (so caller can show it at end of page to avoid flash FOUC effect)
     	 * 	@return	string   						HTML select string
     	 *  @see selectArrayAjax, ajax_combobox in ajax.lib.php
     	 */
    @@ -5811,55 +5997,76 @@ class Form
     	 *  @param	int		$width			Force width of select box. May be used only when using jquery couch. Example: 250, 95%
     	 *  @param	string	$moreattrib		Add more options on select component. Example: 'disabled'
     	 *  @param	string	$elemtype		Type of element we show ('category', ...)
    +	 *  @param	string	$placeholder	String to use as placeholder
    +	 *  @param	int		$addjscombo		Add js combo
     	 *	@return	string					HTML multiselect string
     	 *  @see selectarray
     	 */
    -	static function multiselectarray($htmlname, $array, $selected=array(), $key_in_label=0, $value_as_key=0, $morecss='', $translate=0, $width=0, $moreattrib='',$elemtype='')
    +	static function multiselectarray($htmlname, $array, $selected=array(), $key_in_label=0, $value_as_key=0, $morecss='', $translate=0, $width=0, $moreattrib='', $elemtype='', $placeholder='', $addjscombo=1)
     	{
     		global $conf, $langs;
     
     		$out = '';
     
    +
     		// Add code for jquery to use multiselect
     		if (! empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT'))
     		{
    -			$tmpplugin=empty($conf->global->MAIN_USE_JQUERY_MULTISELECT)?constant('REQUIRE_JQUERY_MULTISELECT'):$conf->global->MAIN_USE_JQUERY_MULTISELECT;
    -   			$out.="\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
    -    			<script type="text/javascript">
    -	    			function formatResult(record) {'."\n";
    -						if ($elemtype == 'category')
    -						{
    -							$out.='	//return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> <a href="'.DOL_URL_ROOT.'/categories/viewcat.php?type=0&id=\'+record.id+\'">\'+record.text+\'</a></span>\';
    -								  	return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> \'+record.text+\'</span>\';';
    -						}
    -						else
    -						{
    -							$out.='return record.text;';
    -						}
    -			$out.= '	};
    -    				function formatSelection(record) {'."\n";
    -						if ($elemtype == 'category')
    -						{
    -							$out.='	//return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> <a href="'.DOL_URL_ROOT.'/categories/viewcat.php?type=0&id=\'+record.id+\'">\'+record.text+\'</a></span>\';
    -								  	return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> \'+record.text+\'</span>\';';
    -						}
    -						else
    -						{
    -							$out.='return record.text;';
    -						}
    -			$out.= '	};
    -	    			$(document).ready(function () {
    -    					$(\'#'.$htmlname.'\').'.$tmpplugin.'({
    -    						dir: \'ltr\',
    -							// Specify format function for dropdown item
    -							formatResult: formatResult,
    -    					 	templateResult: formatResult,		/* For 4.0 */
    -							// Specify format function for selected item
    -							formatSelection: formatSelection,
    -    					 	templateResult: formatSelection		/* For 4.0 */
    -    					});
    -    				});
    -    			</script>';
    +			$out.="\n".'<!-- JS CODE TO ENABLE '.$tmpplugin.' for id '.$htmlname.' -->
    +						<script type="text/javascript">'."\n";
    +			if ($addjscombo == 1)
    +			{
    +				$tmpplugin=empty($conf->global->MAIN_USE_JQUERY_MULTISELECT)?constant('REQUIRE_JQUERY_MULTISELECT'):$conf->global->MAIN_USE_JQUERY_MULTISELECT;
    +				$out.=	'function formatResult(record) {'."\n";
    +				if ($elemtype == 'category')
    +				{
    +					$out.='	//return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> <a href="'.DOL_URL_ROOT.'/categories/viewcat.php?type=0&id=\'+record.id+\'">\'+record.text+\'</a></span>\';
    +									  	return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> \'+record.text+\'</span>\';';
    +				}
    +				else
    +				{
    +					$out.='return record.text;';
    +				}
    +				$out.=	'};'."\n";
    +				$out.=	'function formatSelection(record) {'."\n";
    +				if ($elemtype == 'category')
    +				{
    +					$out.='	//return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> <a href="'.DOL_URL_ROOT.'/categories/viewcat.php?type=0&id=\'+record.id+\'">\'+record.text+\'</a></span>\';
    +									  	return \'<span><img src="'.DOL_URL_ROOT.'/theme/eldy/img/object_category.png'.'"> \'+record.text+\'</span>\';';
    +				}
    +				else
    +				{
    +					$out.='return record.text;';
    +				}
    +				$out.=	'};'."\n";
    +				$out.=	'$(document).ready(function () {
    +							$(\'#'.$htmlname.'\').'.$tmpplugin.'({
    +								dir: \'ltr\',
    +								// Specify format function for dropdown item
    +								formatResult: formatResult,
    +							 	templateResult: formatResult,		/* For 4.0 */
    +								// Specify format function for selected item
    +								formatSelection: formatSelection,
    +							 	templateResult: formatSelection		/* For 4.0 */
    +							});
    +						});'."\n";
    +			}
    +			elseif ($addjscombo == 2)
    +			{
    +				// Add other js lib
    +				// ...
    +				$out.= '$(document).ready(function () {
    +							$(\'#'.$htmlname.'\').multiSelect({
    +								containerHTML: \'<div class="multi-select-container">\',
    +								menuHTML: \'<div class="multi-select-menu">\',
    +								buttonHTML: \'<span class="multi-select-button '.$morecss.'">\',
    +								menuItemHTML: \'<label class="multi-select-menuitem">\',
    +								activeClass: \'multi-select-container--open\',
    +								noneText: \''.$placeholder.'\'
    +							});
    +						})';
    +			}
    +			$out.=	'</script>';
     		}
     
     		// Try also magic suggest
    @@ -5937,7 +6144,7 @@ class Form
     		   }
     		   if ($val['label'])
     		   {
    -			   $lis.='<li><input type="checkbox" value="'.$key.'"'.(empty($val['checked'])?'':' checked="checked"').'/>'.dol_escape_htmltag($langs->trans($val['label'])).'</li>';
    +		   	$lis.='<li><input type="checkbox" id="checkbox'.$key.'" value="'.$key.'"'.(empty($val['checked'])?'':' checked="checked"').'/><label for="checkbox'.$key.'">'.dol_escape_htmltag($langs->trans($val['label'])).'</label></li>';
     			   $listcheckedstring.=(empty($val['checked'])?'':$key.',');
     		   }
     		}
    @@ -6345,7 +6552,7 @@ class Form
     	 *  @param	int      	$useempty		1=Add empty line
     	 *	@return	string						See option
     	 */
    -	function selectyesno($htmlname, $value='', $option=0, $disabled=false, $useempty='')
    +	function selectyesno($htmlname, $value='', $option=0, $disabled=false, $useempty=0)
     	{
     		global $langs;
     
    @@ -6377,6 +6584,7 @@ class Form
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of export templates
     	 *
    @@ -6388,7 +6596,7 @@ class Form
     	 */
     	function select_export_model($selected='',$htmlname='exportmodelid',$type='',$useempty=0)
     	{
    -
    +        // phpcs:enable
     		$sql = "SELECT rowid, label";
     		$sql.= " FROM ".MAIN_DB_PREFIX."export_model";
     		$sql.= " WHERE type = '".$type."'";
    @@ -6610,16 +6818,17 @@ class Form
     	 * 		@param	string		$imagesize		    'mini', 'small' or '' (original)
     	 *      @param  int         $addlinktofullsize  Add link to fullsize image
     	 *      @param  int         $cache              1=Accept to use image in cache
    +	 *      @param	string		$forcecapture		Force parameter capture on HTML input file element to ask a smartphone to allow to open camera to take photo. Auto if empty.
     	 * 	  	@return string    						HTML code to output photo
     	 */
    -	static function showphoto($modulepart, $object, $width=100, $height=0, $caneditfield=0, $cssclass='photowithmargin', $imagesize='', $addlinktofullsize=1, $cache=0)
    +	static function showphoto($modulepart, $object, $width=100, $height=0, $caneditfield=0, $cssclass='photowithmargin', $imagesize='', $addlinktofullsize=1, $cache=0, $forcecapture='')
     	{
     		global $conf,$langs;
     
     		$entity = (! empty($object->entity) ? $object->entity : $conf->entity);
     		$id = (! empty($object->id) ? $object->id : $object->rowid);
     
    -		$ret='';$dir='';$file='';$originalfile='';$altfile='';$email='';
    +		$ret='';$dir='';$file='';$originalfile='';$altfile='';$email='';$capture='';
     		if ($modulepart=='societe')
     		{
     			$dir=$conf->societe->multidir_output[$entity];
    @@ -6643,6 +6852,7 @@ class Form
     				$originalfile=get_exdir(0, 0, 0, 0, $object, 'contact').'/photos/'.$object->photo;
     			}
     			$email=$object->email;
    +			$capture='user';
     		}
     		else if ($modulepart=='userphoto')
     		{
    @@ -6656,6 +6866,7 @@ class Form
     			}
     			if (! empty($conf->global->MAIN_OLD_IMAGE_LINKS)) $altfile=$object->id.".jpg";	// For backward compatibility
     			$email=$object->email;
    +			$capture='user';
     		}
     		else if ($modulepart=='memberphoto')
     		{
    @@ -6669,6 +6880,7 @@ class Form
     			}
     			if (! empty($conf->global->MAIN_OLD_IMAGE_LINKS)) $altfile=$object->id.".jpg";	// For backward compatibility
     			$email=$object->email;
    +			$capture='user';
     		}
     		else
     		{
    @@ -6685,6 +6897,8 @@ class Form
     			$email=$object->email;
     		}
     
    +		if ($forcecapture) $capture = $forcecapture;
    +
     		if ($dir)
     		{
     			if ($file && file_exists($dir."/".$file))
    @@ -6741,16 +6955,16 @@ class Form
     				if ($object->photo) $ret.="<br>\n";
     				$ret.='<table class="nobordernopadding centpercent">';
     				if ($object->photo) $ret.='<tr><td><input type="checkbox" class="flat photodelete" name="deletephoto" id="photodelete"> '.$langs->trans("Delete").'<br><br></td></tr>';
    -				$ret.='<tr><td class="tdoverflow"><input type="file" class="flat maxwidth200onsmartphone" name="photo" id="photoinput"></td></tr>';
    +				$ret.='<tr><td class="tdoverflow"><input type="file" class="flat maxwidth200onsmartphone" name="photo" id="photoinput"'.($capture?' capture="'.$capture.'"':'').'></td></tr>';
     				$ret.='</table>';
     			}
    -
     		}
     		else dol_print_error('','Call of showphoto with wrong parameters modulepart='.$modulepart);
     
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return select list of groups
     	 *
    @@ -6762,11 +6976,13 @@ class Form
     	 *  @param  string	$include        Array list of groups id to include
     	 * 	@param	int		$enableonly		Array list of groups id to be enabled. All other must be disabled
     	 * 	@param	string	$force_entity	'0' or Ids of environment to force
    +	 * 	@param	bool	$multiple		add [] in the name of element and add 'multiple' attribut (not working with ajax_autocompleter)
     	 *  @return	string
     	 *  @see select_dolusers
     	 */
    -	function select_dolgroups($selected='', $htmlname='groupid', $show_empty=0, $exclude='', $disabled=0, $include='', $enableonly='', $force_entity='0')
    +	function select_dolgroups($selected='', $htmlname='groupid', $show_empty=0, $exclude='', $disabled=0, $include='', $enableonly='', $force_entity='0', $multiple=false)
     	{
    +        // phpcs:enable
     		global $conf,$user,$langs;
     
     		// Permettre l'exclusion de groupes
    @@ -6774,6 +6990,8 @@ class Form
     		// Permettre l'inclusion de groupes
     		if (is_array($include))	$includeGroups = implode("','",$include);
     
    +		if (!is_array($selected)) $selected = array($selected);
    +
     		$out='';
     
     		// On recherche les groupes
    @@ -6805,13 +7023,13 @@ class Form
     			include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
     		   	$out .= ajax_combobox($htmlname);
     
    -			$out.= '<select class="flat minwidth200" id="'.$htmlname.'" name="'.$htmlname.'"'.($disabled?' disabled':'').'>';
    +			$out.= '<select class="flat minwidth200" id="'.$htmlname.'" name="'.$htmlname.($multiple ? '[]' : '').'" '.($multiple ? 'multiple' : '').' '.($disabled?' disabled':'').'>';
     
     			$num = $this->db->num_rows($resql);
     			$i = 0;
     			if ($num)
     			{
    -				if ($show_empty) $out.= '<option value="-1"'.($selected==-1?' selected':'').'>&nbsp;</option>'."\n";
    +				if ($show_empty && !$multiple) $out.= '<option value="-1"'.(in_array(-1,$selected)?' selected':'').'>&nbsp;</option>'."\n";
     
     				while ($i < $num)
     				{
    @@ -6821,7 +7039,7 @@ class Form
     
     					$out.= '<option value="'.$obj->rowid.'"';
     					if ($disableline) $out.= ' disabled';
    -					if ((is_object($selected) && $selected->id == $obj->rowid) || (! is_object($selected) && $selected == $obj->rowid))
    +					if ((is_object($selected[0]) && $selected[0]->id == $obj->rowid) || (! is_object($selected[0]) && in_array($obj->rowid,$selected) ))
     					{
     						$out.= ' selected';
     					}
    @@ -6839,7 +7057,7 @@ class Form
     			}
     			else
     			{
    -				if ($show_empty) $out.= '<option value="-1"'.($selected==-1?' selected':'').'></option>'."\n";
    +				if ($show_empty) $out.= '<option value="-1"'.(in_array(-1,$selected)?' selected':'').'></option>'."\n";
     				$out.= '<option value="" disabled>'.$langs->trans("NoUserGroupDefined").'</option>';
     			}
     			$out.= '</select>';
    @@ -6888,17 +7106,22 @@ class Form
                 	$("#checkallactions").click(function() {
                         if($(this).is(\':checked\')){
                             console.log("We check all");
    -                		$(".'.$cssclass.'").prop(\'checked\', true);
    +                		$(".'.$cssclass.'").prop(\'checked\', true).trigger(\'change\');
                         }
                         else
                         {
                             console.log("We uncheck all");
    -                		$(".'.$cssclass.'").prop(\'checked\', false);
    +                		$(".'.$cssclass.'").prop(\'checked\', false).trigger(\'change\');
                         }'."\n";
     		if ($calljsfunction) $out.='if (typeof initCheckForSelect == \'function\') { initCheckForSelect(0); } else { console.log("No function initCheckForSelect found. Call won\'t be done."); }';
     		$out.='         });
    -                });
    -            </script>';
    +
    +        	$(".checkforselect").change(function() {
    +				$(this).closest("tr").toggleClass("highlight", this.checked);
    +			});
    +
    + 	});
    +    </script>';
     
     		return $out;
     	}
    @@ -6922,7 +7145,7 @@ class Form
     	}
     
     	/**
    -	 * Return HTML to show the select categories of expense category
    +	 * Return HTML to show the select of expense categories
     	 *
     	 * @param	string	$selected              preselected category
     	 * @param	string	$htmlname              name of HTML select list
    @@ -6938,7 +7161,7 @@ class Form
     		global $db, $conf, $langs, $user;
     
     		$sql = 'SELECT rowid, label FROM '.MAIN_DB_PREFIX.'c_exp_tax_cat WHERE active = 1';
    -		$sql.= ' AND entity IN (0,'.getEntity('').')';
    +		$sql.= ' AND entity IN (0,'.getEntity('exp_tax_cat').')';
     		if (!empty($excludeid)) $sql.= ' AND rowid NOT IN ('.implode(',', $excludeid).')';
     		$sql.= ' ORDER BY label';
     
    @@ -7090,6 +7313,4 @@ class Form
     
     		return $out;
     	}
    -
     }
    -
    diff --git a/htdocs/core/class/html.formaccounting.class.php b/htdocs/core/class/html.formaccounting.class.php
    index 17e437f5223..5ffaf0463a6 100644
    --- a/htdocs/core/class/html.formaccounting.class.php
    +++ b/htdocs/core/class/html.formaccounting.class.php
    @@ -35,10 +35,17 @@ class FormAccounting extends Form
     
     	private $options_cache = array();
     
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +   /**
     	* Constructor
     	*
     	* @param		DoliDB		$db      Database handler
    @@ -48,6 +55,7 @@ class FormAccounting extends Form
     	    $this->db = $db;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return list of journals with label by nature
     	 *
    @@ -64,6 +72,7 @@ class FormAccounting extends Form
     	 */
     	function select_journal($selectid, $htmlname = 'journal', $nature=0, $showempty = 0, $select_in = 0, $select_out = 0, $morecss='maxwidth300 maxwidthonsmartphone', $usecache='', $disabledajaxcombo=0)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$out = '';
    @@ -129,6 +138,7 @@ class FormAccounting extends Form
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Return list of accounting category.
          * 	Use mysoc->country_id or mysoc->country_code so they must be defined.
    @@ -143,6 +153,7 @@ class FormAccounting extends Form
          */
         function select_accounting_category($selected='',$htmlname='account_category', $useempty=0, $maxlen=0, $help=1, $allcountries=0)
         {
    +        // phpcs:enable
             global $db,$langs,$user,$mysoc;
     
             if (empty($mysoc->country_id) && empty($mysoc->country_code) && empty($allcountries))
    @@ -209,6 +220,7 @@ class FormAccounting extends Form
             print $out;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return select filter with date of transaction
     	 *
    @@ -216,7 +228,9 @@ class FormAccounting extends Form
     	 * @param string $selectedkey Value
     	 * @return string HTML edit field
     	 */
    -	function select_bookkeeping_importkey($htmlname = 'importkey', $selectedkey = '') {
    +    function select_bookkeeping_importkey($htmlname = 'importkey', $selectedkey = '')
    +    {
    +        // phpcs:enable
     		$options = array();
     
     		$sql = 'SELECT DISTINCT import_key from ' . MAIN_DB_PREFIX . 'accounting_bookkeeping';
    @@ -239,6 +253,7 @@ class FormAccounting extends Form
     		return Form::selectarray($htmlname, $options, $selectedkey);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return list of accounts with label by chart of accounts
     	 *
    @@ -254,6 +269,7 @@ class FormAccounting extends Form
     	 */
     	function select_account($selectid, $htmlname = 'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $morecss='maxwidth300 maxwidthonsmartphone', $usecache='')
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		require_once DOL_DOCUMENT_ROOT . '/core/lib/accounting.lib.php';
    @@ -330,6 +346,7 @@ class FormAccounting extends Form
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return list of auxilary thirdparty accounts
     	 *
    @@ -339,7 +356,9 @@ class FormAccounting extends Form
     	 * @param string   $morecss        More css
     	 * @return string                  String with HTML select
     	 */
    -	function select_auxaccount($selectid, $htmlname='account_num_aux', $showempty=0, $morecss='maxwidth200') {
    +    function select_auxaccount($selectid, $htmlname='account_num_aux', $showempty=0, $morecss='maxwidth200')
    +    {
    +        // phpcs:enable
     
     		$aux_account = array();
     
    @@ -389,6 +408,7 @@ class FormAccounting extends Form
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return HTML combo list of years existing into book keepping
     	 *
    @@ -400,6 +420,7 @@ class FormAccounting extends Form
     	 */
     	function selectyear_accountancy_bookkepping($selected = '', $htmlname = 'yearid', $useempty = 0, $output_format = 'html')
     	{
    +        // phpcs:enable
     	    global $conf;
     
     		$out_array = array();
    @@ -428,4 +449,3 @@ class FormAccounting extends Form
     		}
     	}
     }
    -
    diff --git a/htdocs/core/class/html.formactions.class.php b/htdocs/core/class/html.formactions.class.php
    index 451ee0d700d..821bff099d2 100644
    --- a/htdocs/core/class/html.formactions.class.php
    +++ b/htdocs/core/class/html.formactions.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (c) 2008-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2018 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -29,8 +29,15 @@
      */
     class FormActions
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
         /**
    @@ -41,10 +48,10 @@ class FormActions
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Show list of action status
          *
    @@ -59,6 +66,7 @@ class FormActions
          */
         function form_select_status_action($formname, $selected, $canedit=1, $htmlname='complete', $showempty=0, $onlyselect=0, $morecss='maxwidth100')
         {
    +        // phpcs:enable
             global $langs,$conf;
     
             $listofstatus = array(
    @@ -306,6 +314,7 @@ class FormActions
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Output html select list of type of event
          *
    @@ -320,6 +329,7 @@ class FormActions
          */
         function select_type_actions($selected='', $htmlname='actioncode', $excludetype='', $onlyautoornot=0, $hideinfohelp=0, $multiselect=0, $nooutput=0)
         {
    +        // phpcs:enable
             global $langs,$user,$form,$conf;
     
             if (! is_object($form)) $form=new Form($db);
    @@ -359,5 +369,4 @@ class FormActions
             else print $out;
             return '';
         }
    -
     }
    diff --git a/htdocs/core/class/html.formadmin.class.php b/htdocs/core/class/html.formadmin.class.php
    index fd0470c63f4..32a421a7b61 100644
    --- a/htdocs/core/class/html.formadmin.class.php
    +++ b/htdocs/core/class/html.formadmin.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007      Patrick Raguin 		<patrick.raguin@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -41,9 +41,9 @@ class FormAdmin
     	function __construct($db)
     	{
     		$this->db = $db;
    -		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    	Return html select list with available languages (key='en_US', value='United States' for example)
     	 *
    @@ -55,11 +55,13 @@ class FormAdmin
     	 *      @param      int			$showwarning    Show a warning if language is not complete
     	 *      @param		int			$disabled		Disable edit of select
     	 *      @param		string		$morecss		Add more css styles
    -	 *      @param      int         $showcode       Add language code into label
    +	 *      @param      int         $showcode       1=Add language code into label at begining, 2=Add language code into label at end
    +	 *      @param		int			$forcecombo		Force to use combo box (so no ajax beautify effect)
     	 *      @return		string						Return HTML select string with list of languages
    -	 */
    -	function select_language($selected='', $htmlname='lang_id', $showauto=0, $filter=null, $showempty='', $showwarning=0, $disabled=0, $morecss='', $showcode=0)
    +     */
    +	function select_language($selected='', $htmlname='lang_id', $showauto=0, $filter=null, $showempty='', $showwarning=0, $disabled=0, $morecss='', $showcode=0, $forcecombo=0)
     	{
    +		// phpcs:enable
     		global $langs;
     
     		$langs_available=$langs->get_available_languages(DOL_DOCUMENT_ROOT,12);
    @@ -87,8 +89,9 @@ class FormAdmin
     
     		foreach ($langs_available as $key => $value)
     		{
    -		    $valuetoshow=$value;
    -		    if ($showcode) $valuetoshow=$key.' - '.$value;
    +			$valuetoshow=$value;
    +			if ($showcode == 1) $valuetoshow=$key.' - '.$value;
    +			if ($showcode == 2) $valuetoshow=$value.' ('.$key.')';
     
     			if ($filter && is_array($filter))
     			{
    @@ -109,12 +112,16 @@ class FormAdmin
     		$out.= '</select>';
     
     		// Make select dynamic
    -        include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
    -        $out.= ajax_combobox($htmlname);
    +		if (! $forcecombo)
    +		{
    +			include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
    +			$out.= ajax_combobox($htmlname);
    +		}
     
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *    Return list of available menus (eldy_backoffice, ...)
          *
    @@ -126,6 +133,7 @@ class FormAdmin
          */
         function select_menu($selected, $htmlname, $dirmenuarray, $moreattrib='')
         {
    +		// phpcs:enable
             global $langs,$conf;
     
             // Clean parameters
    @@ -204,6 +212,7 @@ class FormAdmin
     		print '</select>';
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return combo list of available menu families
          *
    @@ -214,6 +223,7 @@ class FormAdmin
          */
         function select_menu_families($selected, $htmlname, $dirmenuarray)
         {
    +		// phpcs:enable
     		global $langs,$conf;
     
             //$expdevmenu=array('smartphone_backoffice.php','smartphone_frontoffice.php');  // Menu to disable if $conf->global->MAIN_FEATURES_LEVEL is not set
    @@ -275,6 +285,7 @@ class FormAdmin
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return a HTML select list of timezones
          *
    @@ -284,6 +295,7 @@ class FormAdmin
          */
         function select_timezone($selected,$htmlname)
         {
    +		// phpcs:enable
     		global $langs,$conf;
     
             print '<select class="flat" id="'.$htmlname.'" name="'.$htmlname.'">';
    @@ -327,17 +339,19 @@ class FormAdmin
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *    	Return html select list with available languages (key='en_US', value='United States' for example)
    +	 *  Return html select list with available languages (key='en_US', value='United States' for example)
     	 *
    -	 *    	@param      string	$selected       Paper format pre-selected
    -	 *    	@param      string	$htmlname       Name of HTML select field
    -	 * 		@param		string	$filter			Value to filter on code
    -	 * 		@param		int		$showempty		Add empty value
    -	 * 		@return		string					Return HTML output
    +	 *  @param      string	$selected       Paper format pre-selected
    +	 *  @param      string	$htmlname       Name of HTML select field
    +	 * 	@param		string	$filter			Value to filter on code
    +	 * 	@param		int		$showempty		Add empty value
    +	 * 	@return		string					Return HTML output
     	 */
     	function select_paper_format($selected='',$htmlname='paperformat_id',$filter=0,$showempty=0)
     	{
    +		// phpcs:enable
     		global $langs;
     
     		$langs->load("dict");
    diff --git a/htdocs/core/class/html.formbank.class.php b/htdocs/core/class/html.formbank.class.php
    index 4ee00555b85..9cf60cc45b1 100644
    --- a/htdocs/core/class/html.formbank.class.php
    +++ b/htdocs/core/class/html.formbank.class.php
    @@ -29,8 +29,15 @@
      */
     class FormBank
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
         /**
    diff --git a/htdocs/core/class/html.formbarcode.class.php b/htdocs/core/class/html.formbarcode.class.php
    index dba8c5d24e5..857f8ee5c42 100644
    --- a/htdocs/core/class/html.formbarcode.class.php
    +++ b/htdocs/core/class/html.formbarcode.class.php
    @@ -1,21 +1,22 @@
     <?php
    -/* Copyright (C) 2007-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    - * Copyright (C) 2008-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    -*
    -* This program is free software; you can redistribute it and/or modify
    -* it under the terms of the GNU General Public License as published by
    -* the Free Software Foundation; either version 3 of the License, or
    -* (at your option) any later version.
    -*
    -* This program is distributed in the hope that it will be useful,
    -* but WITHOUT ANY WARRANTY; without even the implied warranty of
    -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -* GNU General Public License for more details.
    -*
    -* You should have received a copy of the GNU General Public License
    -* along with this program. If not, see <http://www.gnu.org/licenses/>.
    -*
    -*/
    +/* Copyright (C) 2007-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2008-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + *
    + */
     
     /**
      *      \file       htdocs/core/class/html.formbarcode.class.php
    @@ -28,19 +29,25 @@
      */
     class FormBarCode
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +     * @var string Error code (or message)
    +     */
    +    public $error='';
     
     
         /**
    -     *	Constructor
    +     *  Constructor
          *
    -     *	@param	DoliDB		$db		Database handler
    +     *  @param  DoliDB		$db		Database handler
          */
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -96,17 +103,35 @@ class FormBarCode
             return $select_encoder;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     *	Return form to select type of barcode
    +     *  Print form to select type of barcode
          *
    -     *	@param	int		$selected          Id code pre-selected
    -     *  @param	string	$htmlname          Name of HTML select field
    -     *  @param  int		$useempty          Affiche valeur vide dans liste
    -     *  @return	void
    +     *  @param  int     $selected          Id code pre-selected
    +     *  @param  string  $htmlname          Name of HTML select field
    +     *  @param  int     $useempty          Affiche valeur vide dans liste
    +     *  @return void
    +     *  @deprecated
          */
    -    function select_barcode_type($selected='',$htmlname='barcodetype_id',$useempty=0)
    +    function select_barcode_type($selected='', $htmlname='barcodetype_id', $useempty=0)
         {
    -        global $langs,$conf;
    +        // phpcs:enable
    +        print $this->selectBarcodeType($selected, $htmlname, $useempty);
    +    }
    +
    +    /**
    +     *  Return html form to select type of barcode
    +     *
    +     *  @param  int     $selected          Id code pre-selected
    +     *  @param  string  $htmlname          Name of HTML select field
    +     *  @param  int     $useempty          Display empty value in select
    +     *  @return string
    +     */
    +    function selectBarcodeType($selected='', $htmlname='barcodetype_id', $useempty=0)
    +    {
    +        global $langs, $conf;
    +
    +        $out = '';
     
             $sql = "SELECT rowid, code, libelle";
             $sql.= " FROM ".MAIN_DB_PREFIX."c_barcode_type";
    @@ -115,46 +140,40 @@ class FormBarCode
             $sql.= " ORDER BY code";
     
             $result = $this->db->query($sql);
    -        if ($result)
    -        {
    +        if ($result) {
                 $num = $this->db->num_rows($result);
                 $i = 0;
     
    -            if ($useempty && $num > 0)
    -            {
    -                print '<select class="flat minwidth75imp" name="'.$htmlname.'" id="select_'.$htmlname.'">';
    -                print '<option value="0">&nbsp;</option>';
    -            }
    -            else
    -            {
    +            if ($useempty && $num > 0) {
    +                $out .= '<select class="flat minwidth75imp" name="' . $htmlname . '" id="select_' . $htmlname . '">';
    +                $out .= '<option value="0">&nbsp;</option>';
    +            } else {
                     $langs->load("errors");
    -                print '<select disabled class="flat minwidth75imp" name="'.$htmlname.'" id="select_'.$htmlname.'">';
    -                print '<option value="0" selected>'.$langs->trans('ErrorNoActivatedBarcode').'</option>';
    +                $out .= '<select disabled class="flat minwidth75imp" name="' . $htmlname . '" id="select_' . $htmlname . '">';
    +                $out .= '<option value="0" selected>' . $langs->trans('ErrorNoActivatedBarcode') . '</option>';
                 }
     
    -            while ($i < $num)
    -            {
    +            while ($i < $num) {
                     $obj = $this->db->fetch_object($result);
    -                if ($selected == $obj->rowid)
    -                {
    -                    print '<option value="'.$obj->rowid.'" selected>';
    +                if ($selected == $obj->rowid) {
    +                    $out .= '<option value="' . $obj->rowid . '" selected>';
    +                } else {
    +                    $out .= '<option value="' . $obj->rowid . '">';
                     }
    -                else
    -                {
    -                    print '<option value="'.$obj->rowid.'">';
    -                }
    -                print $obj->libelle;
    -                print '</option>';
    +                $out .= $obj->libelle;
    +                $out .= '</option>';
                     $i++;
                 }
    -            print "</select>";
    -            print ajax_combobox("select_".$htmlname);
    +            $out .= "</select>";
    +            $out .= ajax_combobox("select_".$htmlname);
             }
             else {
                 dol_print_error($this->db);
             }
    +        return $out;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Show form to select type of barcode
          *
    @@ -162,23 +181,37 @@ class FormBarCode
          *  @param  int			$selected    	Id condition preselected
          *  @param  string		$htmlname    	Nom du formulaire select
          *  @return	void
    +     *  @deprecated
          */
         function form_barcode_type($page, $selected='', $htmlname='barcodetype_id')
         {
    -        global $langs,$conf;
    -        if ($htmlname != "none")
    -        {
    -            print '<form method="post" action="'.$page.'">';
    -            print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    -            print '<input type="hidden" name="action" value="set'.$htmlname.'">';
    -            print '<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
    -            print '<tr><td>';
    -            $this->select_barcode_type($selected, $htmlname, 1);
    -            print '</td>';
    -            print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'">';
    -            print '</td></tr></table></form>';
    -        }
    +        // phpcs:enable
    +        print $this->formBarcodeType($page, $selected, $htmlname);
         }
     
    +    /**
    +     *  Return html form to select type of barcode
    +     *
    +     *  @param  string      $page           Page
    +     *  @param  int         $selected       Id condition preselected
    +     *  @param  string      $htmlname       Nom du formulaire select
    +     *  @return string
    +     */
    +    function formBarcodeType($page, $selected='', $htmlname='barcodetype_id')
    +    {
    +        global $langs, $conf;
    +        $out = '';
    +        if ($htmlname != "none") {
    +            $out .= '<form method="post" action="' . $page . '">';
    +            $out .= '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
    +            $out .= '<input type="hidden" name="action" value="set'.$htmlname.'">';
    +            $out .= '<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
    +            $out .= '<tr><td>';
    +            $out .= $this->selectBarcodeType($selected, $htmlname, 1);
    +            $out .= '</td>';
    +            $out .= '<td align="left"><input type="submit" class="button" value="' . $langs->trans("Modify") . '">';
    +            $out .= '</td></tr></table></form>';
    +        }
    +        return $out;
    +    }
     }
    -
    diff --git a/htdocs/core/class/html.formcompany.class.php b/htdocs/core/class/html.formcompany.class.php
    index 4c7c1891a7a..60017d82570 100644
    --- a/htdocs/core/class/html.formcompany.class.php
    +++ b/htdocs/core/class/html.formcompany.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2014		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2017		Rui Strecht			<rui.strecht@aliartalentos.com>
      *
    @@ -31,10 +31,15 @@
      */
     class FormCompany
     {
    -	var $db;
    -	var $error;
    -
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *	Constructor
    @@ -44,11 +49,10 @@ class FormCompany
     	function __construct($db)
     	{
     		$this->db = $db;
    -
    -		return 1;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    	Return list of labels (translated) of third parties type
     	 *
    @@ -58,6 +62,7 @@ class FormCompany
     	 */
     	function typent_array($mode=0, $filter='')
     	{
    +        // phpcs:enable
     		global $langs,$mysoc;
     
     		$effs = array();
    @@ -90,6 +95,7 @@ class FormCompany
     		return $effs;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoie la liste des types d'effectifs possibles (pas de traduction car nombre)
     	 *
    @@ -99,6 +105,7 @@ class FormCompany
     	 */
     	function effectif_array($mode=0, $filter='')
     	{
    +        // phpcs:enable
     		$effs = array();
     
     		$sql = "SELECT id, code, libelle";
    @@ -128,6 +135,7 @@ class FormCompany
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Affiche formulaire de selection des modes de reglement
     	 *
    @@ -139,6 +147,7 @@ class FormCompany
     	 */
     	function form_prospect_level($page, $selected='', $htmlname='prospect_level_id', $empty=0)
     	{
    +        // phpcs:enable
     		global $user, $langs;
     
     		print '<form method="post" action="'.$page.'">';
    @@ -177,6 +186,7 @@ class FormCompany
     		print '</form>';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Retourne la liste deroulante des departements/province/cantons tout pays confondu ou pour un pays donne.
     	 *   Dans le cas d'une liste tout pays confondus, l'affichage fait une rupture sur le pays.
    @@ -191,9 +201,11 @@ class FormCompany
     	 */
     	function select_departement($selected='',$country_codeid=0, $htmlname='state_id')
     	{
    +        // phpcs:enable
     		print $this->select_state($selected,$country_codeid, $htmlname);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Retourne la liste deroulante des departements/province/cantons tout pays confondu ou pour un pays donne.
     	 *    Dans le cas d'une liste tout pays confondus, l'affichage fait une rupture sur le pays.
    @@ -209,6 +221,7 @@ class FormCompany
     	 */
     	function select_state($selected='',$country_codeid=0, $htmlname='state_id')
     	{
    +        // phpcs:enable
     		global $conf,$langs,$user;
     
     		dol_syslog(get_class($this)."::select_departement selected=".$selected.", country_codeid=".$country_codeid,LOG_DEBUG);
    @@ -308,6 +321,7 @@ class FormCompany
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Retourne la liste deroulante des regions actives dont le pays est actif
     	 *   La cle de la liste est le code (il peut y avoir plusieurs entree pour
    @@ -320,6 +334,7 @@ class FormCompany
     	 */
     	function select_region($selected='',$htmlname='region_id')
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     		$langs->load("dict");
     
    @@ -374,6 +389,7 @@ class FormCompany
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return combo list with people title
     	 *
    @@ -384,6 +400,7 @@ class FormCompany
     	 */
     	function select_civility($selected='',$htmlname='civility_id',$morecss='maxwidth100')
     	{
    +        // phpcs:enable
     		global $conf,$langs,$user;
     		$langs->load("dict");
     
    @@ -430,6 +447,7 @@ class FormCompany
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Retourne la liste deroulante des formes juridiques tous pays confondus ou pour un pays donne.
     	 *    Dans le cas d'une liste tous pays confondu, on affiche une rupture sur le pays.
    @@ -443,9 +461,11 @@ class FormCompany
     	 */
     	function select_forme_juridique($selected='', $country_codeid=0, $filter='')
     	{
    +        // phpcs:enable
     		print $this->select_juridicalstatus($selected, $country_codeid, $filter);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Retourne la liste deroulante des formes juridiques tous pays confondus ou pour un pays donne.
     	 *    Dans le cas d'une liste tous pays confondu, on affiche une rupture sur le pays
    @@ -458,6 +478,7 @@ class FormCompany
     	 */
     	function select_juridicalstatus($selected='', $country_codeid=0, $filter='', $htmlname='forme_juridique_code')
     	{
    +        // phpcs:enable
     		global $conf,$langs,$user;
     		$langs->load("dict");
     
    @@ -740,6 +761,7 @@ class FormCompany
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return a select list with zip codes and their town
     	 *
    @@ -754,6 +776,7 @@ class FormCompany
     	 */
     	function select_ziptown($selected='', $htmlname='zipcode', $fields='', $fieldsize=0, $disableautocomplete=0, $moreattrib='',$morecss='')
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$out='';
    @@ -771,6 +794,7 @@ class FormCompany
     		return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return HTML string to use as input of professional id into a HTML page (siren, siret, etc...)
          *
    @@ -783,6 +807,7 @@ class FormCompany
          */
         function get_input_id_prof($idprof,$htmlname,$preselected,$country_code,$morecss='maxwidth100onsmartphone quatrevingtpercent')
         {
    +        // phpcs:enable
             global $conf,$langs;
     
             $formlength=0;
    @@ -821,6 +846,7 @@ class FormCompany
             return $out;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return a HTML select with localtax values for thirdparties
          *
    @@ -831,10 +857,11 @@ class FormCompany
          */
         function select_localtax($local, $selected, $htmlname)
         {
    -    	$tax=get_localtax_by_third($local);
    +        // phpcs:enable
    +        $tax=get_localtax_by_third($local);
     
    -    	$num = $this->db->num_rows($tax);
    -    	$i = 0;
    +        $num = $this->db->num_rows($tax);
    +        $i = 0;
         	if ($num)
         	{
         		$valors=explode(":", $tax);
    @@ -861,6 +888,4 @@ class FormCompany
         		}
         	}
         }
    -
     }
    -
    diff --git a/htdocs/core/class/html.formcontract.class.php b/htdocs/core/class/html.formcontract.class.php
    index f4902e4912e..5bdb00cfc40 100644
    --- a/htdocs/core/class/html.formcontract.class.php
    +++ b/htdocs/core/class/html.formcontract.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012-2013  Charles-Fr BENKE		<charles.fr@benke.fr>
    +/* Copyright (C) 2012-2018  Charlene BENKE	<charlie@patas-monkey.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,8 +27,15 @@
      */
     class FormContract
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
         /**
    @@ -42,6 +49,7 @@ class FormContract
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show a combo list with contracts qualified for a third party
     	 *
    @@ -54,18 +62,29 @@ class FormContract
     	 */
     	function select_contract($socid=-1, $selected='', $htmlname='contrattid', $maxlength=16, $showempty=1)
     	{
    +        // phpcs:enable
     		global $db,$user,$conf,$langs;
     
     		$hideunselectables = false;
    -		if (! empty($conf->global->PROJECT_HIDE_UNSELECTABLES)) $hideunselectables = true;
    +		if (! empty($conf->global->CONTRACT_HIDE_UNSELECTABLES)) $hideunselectables = true;
     
     		// Search all contacts
     		$sql = 'SELECT c.rowid, c.ref, c.fk_soc, c.statut';
     		$sql.= ' FROM '.MAIN_DB_PREFIX .'contrat as c';
     		$sql.= " WHERE c.entity = ".$conf->entity;
     		//if ($contratListId) $sql.= " AND c.rowid IN (".$contratListId.")";
    +		if ($socid > 0)
    +		{
    +			// CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY is 'all' or a list of ids separated by coma.
    +		    	if (empty($conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY))
    +			    $sql.= " AND (c.fk_soc=".$socid." OR c.fk_soc IS NULL)";
    +		    	else if ($conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY != 'all')
    +			{
    +		        	$sql.= " AND (c.fk_soc IN (".$socid.", ".$conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY.") ";
    +				$sql.= " OR c.fk_soc IS NULL)";
    +		    	}
    +		}
     		if ($socid == 0) $sql.= " AND (c.fk_soc = 0 OR c.fk_soc IS NULL)";
    -		if ($socid > 0)  $sql.= " AND (c.fk_soc=".$socid." OR c.fk_soc IS NULL)";
     		$sql.= " ORDER BY c.ref ";
     
     		dol_syslog(get_class($this)."::select_contract", LOG_DEBUG);
    @@ -98,12 +117,12 @@ class FormContract
     						else
     						{
     							$disabled=0;
    -							if (! $obj->statut > 0)
    +							if ( $obj->statut ==  0)
     							{
     								$disabled=1;
     								$labeltoshow.=' ('.$langs->trans("Draft").')';
     							}
    -							if ($socid > 0 && (! empty($obj->fk_soc) && $obj->fk_soc != $socid))
    +							if ( empty($conf->global->CONTRACT_ALLOW_TO_LINK_FROM_OTHER_COMPANY) &&  $socid > 0 && (! empty($obj->fk_soc) && $obj->fk_soc != $socid))
     							{
     								$disabled=1;
     								$labeltoshow.=' - '.$langs->trans("LinkedToAnotherCompany");
    @@ -130,14 +149,14 @@ class FormContract
     			}
     			print '</select>';
     			$db->free($resql);
    -			
    +
     			if (!empty($conf->use_javascript_ajax))
     			{
     				// Make select dynamic
     				include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
     				print ajax_combobox($htmlname);
     			}
    -			
    +
     			return $num;
     		}
     		else
    @@ -146,7 +165,7 @@ class FormContract
     			return -1;
     		}
     	}
    -	
    +
     	/**
     	 *	Show a form to select a contract
     	 *
    @@ -156,12 +175,12 @@ class FormContract
     	 *	@param  string	$htmlname   Nom de la zone html
     	 *	@param	int		$maxlength	Maximum length of label
     	 *	@param	int		$showempty	Show empty line
    -	 *	@return int         		Nbr of project if OK, <0 if KO
    +	 *	@return int                 Nbr of project if OK, <0 if KO
     	 */
     	function formSelectContract($page, $socid=-1, $selected='', $htmlname='contrattid', $maxlength=16, $showempty=1)
     	{
    -	    global $langs;
    -	
    +        global $langs;
    +
             print "\n";
             print '<form method="post" action="'.$page.'">';
             print '<input type="hidden" name="action" value="setcontract">';
    @@ -169,6 +188,5 @@ class FormContract
             $this->select_contract($socid, $selected, $htmlname, $maxlength, $showempty);
             print '<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
             print '</form>';
    -	}	
    -	
    +    }
     }
    diff --git a/htdocs/core/class/html.formcron.class.php b/htdocs/core/class/html.formcron.class.php
    index 255868f02a5..94747481cb0 100644
    --- a/htdocs/core/class/html.formcron.class.php
    +++ b/htdocs/core/class/html.formcron.class.php
    @@ -28,8 +28,15 @@
      */
     class FormCron extends Form
     {
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *	Constructor
    @@ -39,10 +46,10 @@ class FormCron extends Form
     	function __construct($db)
     	{
     		$this->db = $db;
    -		return 1;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Display On Off selector
     	 *
    @@ -53,6 +60,7 @@ class FormCron extends Form
     	 */
     	function select_typejob($htmlname,$selected=0,$readonly=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$langs->load('cron@cron');
    diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php
    index 4e77269db4c..569d10dce4b 100644
    --- a/htdocs/core/class/html.formfile.class.php
    +++ b/htdocs/core/class/html.formfile.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2013	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2014	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2014	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2016	Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2013		Charles-Fr BENKE	<charles.fr@benke.fr>
      * Copyright (C) 2013		Cédric Salvador		<csalvador@gpcsolutions.fr>
    @@ -36,7 +36,11 @@ class FormFile
     {
     	private $db;
     
    +	/**
    +	 * @var string Error code (or message)
    +	 */
     	public $error;
    +
     	public $numoffiles;
     	public $infofiles;			// Used to return informations by function getDocumentsLink
     
    @@ -50,10 +54,10 @@ class FormFile
     	{
     		$this->db = $db;
     		$this->numoffiles=0;
    -		return 1;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show form to upload a new file.
     	 *
    @@ -75,6 +79,7 @@ class FormFile
     	 */
     	function form_attach_new_file($url, $title='', $addcancel=0, $sectionid=0, $perm=1, $size=50, $object='', $options='', $useajax=1, $savingdocmask='', $linkfiles=1, $htmlname='formuserfile', $accept='', $sectiondir='')
     	{
    +        // phpcs:enable
     		global $conf,$langs, $hookmanager;
     		$hookmanager->initHooks(array('formfile'));
     
    @@ -227,6 +232,7 @@ class FormFile
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Show the box with list of available documents for object
     	 *
    @@ -251,6 +257,7 @@ class FormFile
     	 */
     	function show_documents($modulepart,$modulesubdir,$filedir,$urlsource,$genallowed,$delallowed=0,$modelselected='',$allowgenifempty=1,$forcenomultilang=0,$iconPDF=0,$notused=0,$noform=0,$param='',$title='',$buttonlabel='',$codelang='')
     	{
    +        // phpcs:enable
     		$this->numoffiles=0;
     		print $this->showdocuments($modulepart,$modulesubdir,$filedir,$urlsource,$genallowed,$delallowed,$modelselected,$allowgenifempty,$forcenomultilang,$iconPDF,$notused,$noform,$param,$title,$buttonlabel,$codelang);
     		return $this->numoffiles;
    @@ -304,7 +311,7 @@ class FormFile
     		$param.= 'entity='.(!empty($object->entity)?$object->entity:$conf->entity);
     
     		$printer=0;
    -		if (in_array($modulepart,array('facture','supplier_proposal','propal','proposal','order','commande','expedition', 'commande_fournisseur', 'expensereport')))	// The direct print feature is implemented only for such elements
    +		if (in_array($modulepart,array('facture','supplier_proposal','propal','proposal','order','commande','expedition', 'commande_fournisseur', 'expensereport','livraison')))	// The direct print feature is implemented only for such elements
     		{
     			$printer = (!empty($user->rights->printing->read) && !empty($conf->printing->enabled))?true:false;
     		}
    @@ -673,7 +680,7 @@ class FormFile
     				$formadmin=new FormAdmin($this->db);
     				$defaultlang=$codelang?$codelang:$langs->getDefaultLang();
     				$morecss='maxwidth150';
    -				if (! empty($conf->browser->phone)) $morecss='maxwidth100';
    +				if ($conf->browser->layout == 'phone') $morecss='maxwidth100';
     				$out.= $formadmin->select_language($defaultlang, 'lang_id', 0, 0, 0, 0, 0, $morecss);
     			}
     			else
    @@ -712,7 +719,6 @@ class FormFile
     				$reshook = $hookmanager->executeHooks('formBuilddocOptions',$parameters,$GLOBALS['object']);
     				$out.= $hookmanager->resPrint;
     			}
    -
     		}
     
     		// Get list of files
    @@ -842,7 +848,6 @@ class FormFile
     			{
     				$out.='<tr><td colspan="'.(3+($addcolumforpicto?1:0)).'" class="opacitymedium">'.$langs->trans("None").'</td></tr>'."\n";
     			}
    -
     		}
     
     		if ($headershown)
    @@ -880,15 +885,13 @@ class FormFile
     		$out='';
     		$this->infofiles=array('nboffiles'=>0,'extensions'=>array(),'files'=>array());
     
    +		$entity = 1; // Without multicompany
    +
     		// Get object entity
    -		if (empty($conf->multicompany->enabled))
    -		{
    -			$entity = $conf->entity;
    -		}
    -		else
    +		if (! empty($conf->multicompany->enabled))
     		{
     			preg_match('/\/([0-9]+)\/[^\/]+\/'.preg_quote($modulesubdir,'/').'$/', $filedir, $regs);
    -			$entity = ((! empty($regs[1]) && $regs[1] > 1) ? $regs[1] : $conf->entity);
    +			$entity = ((! empty($regs[1]) && $regs[1] > 1) ? $regs[1] : 1); // If entity id not found in $filedir this is entity 1 by default
     		}
     
     		// Get list of files starting with name of ref (but not followed by "-" to discard uploaded files and get only generated files)
    @@ -909,7 +912,7 @@ class FormFile
     		if (! empty($file_list))
     		{
     			$out='<dl class="dropdown inline-block">
    -    			<dt><a data-ajax="false" href="#" onClick="return false;">'.img_picto('', 'listlight', '', 0, 0, 0, '', 'valignbottom').'</a></dt>
    +    			<dt><a data-ajax="false" href="#" onClick="return false;">'.img_picto('', 'listlight', '', 0, 0, 0, '', 'valignmiddle').'</a></dt>
         			<dd><div class="multichoicedoc" style="position:absolute;left:100px;" ><ul class="ulselectedfields" style="display: none;">';
     			$tmpout='';
     
    @@ -976,6 +979,7 @@ class FormFile
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show list of documents in $filearray (may be they are all in same directory but may not)
     	 *  This also sync database if $upload_dir is defined.
    @@ -1007,13 +1011,14 @@ class FormFile
     	 */
     	function list_of_documents($filearray,$object,$modulepart,$param='',$forcedownload=0,$relativepath='',$permonobject=1,$useinecm=0,$textifempty='',$maxlength=0,$title='',$url='', $showrelpart=0, $permtoeditline=-1,$upload_dir='',$sortfield='',$sortorder='ASC', $disablemove=1, $addfilterfields=0)
     	{
    +        // phpcs:enable
     		global $user, $conf, $langs, $hookmanager;
     		global $sortfield, $sortorder, $maxheightmini;
     		global $dolibarr_main_url_root;
     		global $form;
     
     		$disablecrop=1;
    -		if (in_array($modulepart, array('societe','product','produit','service','expensereport','holiday','member','project','ticket','user'))) $disablecrop=0;
    +		if (in_array($modulepart, array('expensereport','holiday','member','project','product','produit','service','societe','tax','ticket','user'))) $disablecrop=0;
     
     		// Define relative path used to store the file
     		if (empty($relativepath))
    @@ -1131,7 +1136,6 @@ class FormFile
     				//var_dump($sortfield.' - '.$sortorder);
     				if ($sortfield && $sortorder)	// If $sortfield is for example 'position_name', we will sort on the property 'position_name' (that is concat of position+name)
     				{
    -					//var_dump($sortfield);
     					$filearray=dol_sort_array($filearray, $sortfield, $sortorder);
     				}
     			}
    @@ -1154,7 +1158,7 @@ class FormFile
     					print '<!-- Line list_of_documents '.$key.' relativepath = '.$relativepath.' -->'."\n";
     					// Do we have entry into database ?
     					print '<!-- In database: position='.$filearray[$key]['position'].' -->'."\n";
    -					print '<tr id="row-'.($filearray[$key]['rowid']>0?$filearray[$key]['rowid']:'-AFTER'.$lastrowid.'POS'.($i+1)).'">';
    +					print '<tr class="oddeven" id="row-'.($filearray[$key]['rowid']>0?$filearray[$key]['rowid']:'AFTER'.$lastrowid.'POS'.($i+1)).'">';
     
     					// File name
     					print '<td class="minwith200">';
    @@ -1215,9 +1219,13 @@ class FormFile
     							if (! dol_is_file($file['path'].'/'.$minifile)) $minifile=getImageFileNameForSize($file['name'], '_mini', '.png'); // For backward compatibility of old thumbs that were created with filename in lower case and with .png extension
     							//print $file['path'].'/'.$minifile.'<br>';
     
    -							$urlforhref=getAdvancedPreviewUrl($modulepart, $relativepath.$fileinfo['filename'].'.'.strtolower($fileinfo['extension']), 0, '&entity='.(!empty($object->entity)?$object->entity:$conf->entity));
    -							if (empty($urlforhref)) $urlforhref=DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.(!empty($object->entity)?$object->entity:$conf->entity).'&file='.urlencode($relativepath.$fileinfo['filename'].'.'.strtolower($fileinfo['extension']));
    -							print '<a href="'.$urlforhref.'" class="aphoto" target="_blank">';
    +							$urlforhref=getAdvancedPreviewUrl($modulepart, $relativepath.$fileinfo['filename'].'.'.strtolower($fileinfo['extension']), 1, '&entity='.(!empty($object->entity)?$object->entity:$conf->entity));
    +							if (empty($urlforhref)) {
    +								$urlforhref=DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.(!empty($object->entity)?$object->entity:$conf->entity).'&file='.urlencode($relativepath.$fileinfo['filename'].'.'.strtolower($fileinfo['extension']));
    +								print '<a href="'.$urlforhref.'" class="aphoto" target="_blank">';
    +							} else {
    +								print '<a href="'.$urlforhref['url'].'" class="'.$urlforhref['css'].'" target="'.$urlforhref['target'].'" mime="'.$urlforhref['mime'].'">';
    +							}
     							print '<img border="0" height="'.$maxheightmini.'" src="'.DOL_URL_ROOT.'/viewimage.php?modulepart='.$modulepart.'&entity='.(!empty($object->entity)?$object->entity:$conf->entity).'&file='.urlencode($relativepath.$minifile).'" title="">';
     							print '</a>';
     						}
    @@ -1250,12 +1258,9 @@ class FormFile
     								if ($forcedownload) $paramlink.=($paramlink?'&':'').'attachment=1';
     
     								$fulllink=$urlwithroot.'/document.php'.($paramlink?'?'.$paramlink:'');
    -								//if (! empty($object->ref))       $fulllink.='&hashn='.$object->ref;		// Hash of file path
    -								//elseif (! empty($object->label)) $fulllink.='&hashc='.$object->label;		// Hash of file content
     
     								print img_picto($langs->trans("FileSharedViaALink"),'object_globe.png').' ';
     								print '<input type="text" class="quatrevingtpercent" id="downloadlink" name="downloadexternallink" value="'.dol_escape_htmltag($fulllink).'">';
    -								//print ' <a href="'.$fulllink.'">'.$langs->trans("Download").'</a>';	// No target here
     							}
     							else
     							{
    @@ -1291,17 +1296,12 @@ class FormFile
     
     							if ($permtoeditline)
     							{
    -								print '<a href="'.(($useinecm == 1)?'#':($url.'?action=editfile&urlfile='.urlencode($filepath).$param)).'" class="editfilelink" rel="'.$filepath.'">'.img_edit('default',0,'class="paddingrightonly"').'</a>';
    +								$paramsectiondir=(in_array($modulepart, array('medias','ecm'))?'&section_dir='.urlencode($relativepath):'');
    +								print '<a href="'.(($useinecm == 1)?'#':($url.'?action=editfile&urlfile='.urlencode($filepath).$paramsectiondir.$param)).'" class="editfilelink" rel="'.$filepath.'">'.img_edit('default',0,'class="paddingrightonly"').'</a>';
     							}
     						}
     						if ($permonobject)
     						{
    -							/*
    -    						if ($file['level1name'] <> $object->id)
    -    							$filepath=$file['level1name'].'/'.$file['name'];
    -    						else
    -    							$filepath=$file['name'];
    -    						*/
     							$useajax=1;
     							if (! empty($conf->dol_use_jmobile)) $useajax=0;
     							if (empty($conf->use_javascript_ajax)) $useajax=0;
    @@ -1312,7 +1312,7 @@ class FormFile
     
     						if (empty($disablemove))
     						{
    -							if ($nboffiles > 1 && empty($conf->browser->phone)) {
    +							if ($nboffiles > 1 && $conf->browser->layout != 'phone') {
     								print '<td align="center" class="linecolmove tdlineupdown">';
     								if ($i > 0) {
     									print '<a class="lineupdown" href="'.$_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=up&amp;rowid='.$line->id.'">'.img_up('default',0,'imgupforline').'</a>';
    @@ -1323,7 +1323,7 @@ class FormFile
     								print '</td>';
     							}
     							else {
    -							   	print '<td align="center"'.((empty($conf->browser->phone) && empty($disablemove)) ?' class="linecolmove tdlineupdown"':' class="linecolmove"').'>';
    +							   	print '<td align="center"'.(($conf->browser->layout != 'phone' && empty($disablemove)) ?' class="linecolmove tdlineupdown"':' class="linecolmove"').'>';
     							   	print '</td>';
     							}
     					   }
    @@ -1373,6 +1373,7 @@ class FormFile
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show list of documents in a directory
     	 *
    @@ -1393,6 +1394,7 @@ class FormFile
     	 */
     	function list_of_autoecmfiles($upload_dir, $filearray, $modulepart, $param, $forcedownload=0, $relativepath='', $permtodelete=1, $useinecm=0, $textifempty='', $maxlength=0, $url='', $addfilterfields=0)
     	{
    +        // phpcs:enable
     		global $user, $conf, $langs, $form;
     		global $sortfield, $sortorder;
     		global $search_doc_ref;
    @@ -1635,7 +1637,7 @@ class FormFile
     	 */
     	private function _formAjaxFileUpload($object)
     	{
    -		global $langs;
    +		global $langs, $conf;
     
     		// PHP post_max_size
     		$post_max_size				= ini_get('post_max_size');
    @@ -1655,7 +1657,6 @@ class FormFile
     
     		// Include template
     		include DOL_DOCUMENT_ROOT.'/core/tpl/ajax/fileupload_view.tpl.php';
    -
     	}
     
     	/**
    @@ -1827,6 +1828,4 @@ class FormFile
     		}
     		return $out;
     	}
    -
     }
    -
    diff --git a/htdocs/core/class/html.formintervention.class.php b/htdocs/core/class/html.formintervention.class.php
    index b675ba6e674..ae35b74fad9 100644
    --- a/htdocs/core/class/html.formintervention.class.php
    +++ b/htdocs/core/class/html.formintervention.class.php
    @@ -27,8 +27,15 @@
      */
     class FormIntervention
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
         /**
    @@ -42,6 +49,7 @@ class FormIntervention
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show a combo list with contracts qualified for a third party
     	 *
    @@ -54,6 +62,7 @@ class FormIntervention
     	 */
     	function select_interventions($socid=-1, $selected='', $htmlname='interventionid', $maxlength=16, $showempty=1)
     	{
    +        // phpcs:enable
     		global $db,$user,$conf,$langs;
     
     		$out='';
    diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php
    index 99f14e973ca..79822082797 100644
    --- a/htdocs/core/class/html.formmail.class.php
    +++ b/htdocs/core/class/html.formmail.class.php
    @@ -1,9 +1,10 @@
     <?php
     /* Copyright (C) 2005-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin		<regis.houssin@capnetworks.com>
    - * Copyright (C) 2010-2011 Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2005-2012 Regis Houssin	    <regis.houssin@inodbox.com>
    + * Copyright (C) 2010-2011 Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2015-2017 Marcos García        <marcosgdf@gmail.com>
    - * Copyright (C) 2015-2017 Nicolas ZABOURI        <info@inovea-conseil.com>
    + * Copyright (C) 2015-2017 Nicolas ZABOURI      <info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -35,58 +36,83 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/html.form.class.php';
      */
     class FormMail extends Form
     {
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -	var $withform;				// 1=Include HTML form tag and show submit button, 0=Do not include form tag and submit button, -1=Do not include form tag but include submit button
    +	public $withform;				// 1=Include HTML form tag and show submit button, 0=Do not include form tag and submit button, -1=Do not include form tag but include submit button
     
    -	var $fromname;
    -	var $frommail;
    -	var $replytoname;
    -	var $replytomail;
    -	var $toname;
    -	var $tomail;
    -	var $trackid;
    +	public $fromname;
    +	public $frommail;
    +
    +    /**
    +     * @var string user, company, robot
    +     */
    +    public $fromtype;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fromid;
    +
    +    /**
    +     * @var string thirdparty etc
    +     */
    +    public $totype;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $toid;
    +
    +    public $replytoname;
    +	public $replytomail;
    +	public $toname;
    +	public $tomail;
    +	public $trackid;
    +
    +	public $withsubstit;			// Show substitution array
    +	public $withfrom;
     
    -	var $withsubstit;			// Show substitution array
    -	var $withfrom;
     	/**
     	 * @var int
     	 * @deprecated Fill withto with array before calling method.
     	 * @see withto
     	 */
     	public $withtosocid;
    +
     	/**
     	 * @var int|int[]
     	 */
     	public $withto;				// Show recipient emails
    -	var $withtofree;			// Show free text for recipient emails
    -	var $withtocc;
    -	var $withtoccc;
    -	var $withtopic;
    -	var $withfile;				// 0=No attaches files, 1=Show attached files, 2=Can add new attached files
    -	var $withmaindocfile;		// 1=Add a checkbox "Attach also main document" for mass actions (checked by default), -1=Add checkbox (not checked by default)
    -	var $withbody;
     
    -	var $withfromreadonly;
    -	var $withreplytoreadonly;
    -	var $withtoreadonly;
    -	var $withtoccreadonly;
    -	var $withtocccreadonly;
    -	var $withtopicreadonly;
    -	var $withfilereadonly;
    -	var $withdeliveryreceipt;
    -	var $withcancel;
    -	var $withfckeditor;
    +	public $withtofree;			// Show free text for recipient emails
    +	public $withtocc;
    +	public $withtoccc;
    +	public $withtopic;
    +	public $withfile;				// 0=No attaches files, 1=Show attached files, 2=Can add new attached files
    +	public $withmaindocfile;		// 1=Add a checkbox "Attach also main document" for mass actions (checked by default), -1=Add checkbox (not checked by default)
    +	public $withbody;
     
    -	var $substit=array();
    -	var $substit_lines=array();
    -	var $param=array();
    +	public $withfromreadonly;
    +	public $withreplytoreadonly;
    +	public $withtoreadonly;
    +	public $withtoccreadonly;
    +	public $withtocccreadonly;
    +	public $withtopicreadonly;
    +	public $withfilereadonly;
    +	public $withdeliveryreceipt;
    +	public $withcancel;
    +	public $withfckeditor;
    +
    +	public $substit=array();
    +	public $substit_lines=array();
    +	public $param=array();
     
     	public $withtouser=array();
     	public $withtoccuser=array();
     
    -	var $error;
    -
     	public $lines_model;
     
     
    @@ -123,10 +149,9 @@ class FormMail extends Form
     		$this->withbodyreadonly=0;
     		$this->withdeliveryreceiptreadonly=0;
     		$this->withfckeditor=-1;	// -1 = Auto
    -
    -		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Clear list of attached files in send mail form (also stored in session)
     	 *
    @@ -134,6 +159,7 @@ class FormMail extends Form
     	 */
     	function clear_attached_files()
     	{
    +        // phpcs:enable
     		global $conf,$user;
     		require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
    @@ -148,6 +174,7 @@ class FormMail extends Form
     		unset($_SESSION["listofmimes".$keytoavoidconflict]);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Add a file into the list of attached files (stored in SECTION array)
     	 *
    @@ -158,6 +185,7 @@ class FormMail extends Form
     	 */
     	function add_attached_files($path, $file='', $type='')
     	{
    +        // phpcs:enable
     		$listofpaths=array();
     		$listofnames=array();
     		$listofmimes=array();
    @@ -180,6 +208,7 @@ class FormMail extends Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Remove a file from the list of attached files (stored in SECTION array)
     	 *
    @@ -188,6 +217,7 @@ class FormMail extends Form
     	 */
     	function remove_attached_files($keytodelete)
     	{
    +        // phpcs:enable
     		$listofpaths=array();
     		$listofnames=array();
     		$listofmimes=array();
    @@ -208,6 +238,7 @@ class FormMail extends Form
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return list of attached files (stored in SECTION array)
     	 *
    @@ -215,6 +246,7 @@ class FormMail extends Form
     	 */
     	function get_attached_files()
     	{
    +        // phpcs:enable
     		$listofpaths=array();
     		$listofnames=array();
     		$listofmimes=array();
    @@ -226,6 +258,7 @@ class FormMail extends Form
     		return array('paths'=>$listofpaths, 'names'=>$listofnames, 'mimes'=>$listofmimes);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show the form to input an email
     	 *  this->withfile: 0=No attaches files, 1=Show attached files, 2=Can add new attached files
    @@ -237,9 +270,11 @@ class FormMail extends Form
     	 */
     	function show_form($addfileaction='addfile',$removefileaction='removefile')
     	{
    +        // phpcs:enable
     		print $this->get_form($addfileaction,$removefileaction);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Get the form to input an email
     	 *  this->withfile: 0=No attaches files, 1=Show attached files, 2=Can add new attached files
    @@ -252,13 +287,13 @@ class FormMail extends Form
     	 */
     	function get_form($addfileaction='addfile', $removefileaction='removefile')
     	{
    +        // phpcs:enable
     		global $conf, $langs, $user, $hookmanager, $form;
     
     		if (! is_object($form)) $form=new Form($this->db);
     
    -		$langs->load("other");
    -		$langs->load("mails");
    -
    +		// Load translation files required by the page
    +        $langs->loadLangs(array('other', 'mails'));
     
     		// Clear temp files. Must be done at beginning, before call of triggers
     		if (GETPOST('mode','alpha') == 'init' || (GETPOST('modelmailselected','alpha') && GETPOST('modelmailselected','alpha') != '-1'))
    @@ -948,7 +983,7 @@ class FormMail extends Form
     					$url=getOnlinePaymentUrl(0, $typeforonlinepayment, $this->substit['__REF__']);
     					$paymenturl=$url;
     
    -					$validpaymentmethod = getValidOnlinePaymentMethods($paymentmethod);
    +					$validpaymentmethod = getValidOnlinePaymentMethods('');
     				}
     
     				if (count($validpaymentmethod) > 0 && $paymenturl)
    @@ -1385,8 +1420,6 @@ class FormMail extends Form
     			}
     		}
     
    -		$tmparray['__(AnyTranslationKey)__']="Translation";
    -
     		foreach($tmparray as $key => $val)
     		{
     			if (empty($val)) $tmparray[$key]=$key;
    @@ -1394,7 +1427,6 @@ class FormMail extends Form
     
     		return $tmparray;
     	}
    -
     }
     
     
    @@ -1403,8 +1435,16 @@ class FormMail extends Form
      */
     class ModelMail
     {
    +	/**
    +	 * @var int ID
    +	 */
     	public $id;
    -	public $label;
    +
    +	/**
    +     * @var string Model mail label
    +     */
    +    public $label;
    +
     	public $topic;
     	public $content;
     	public $content_lines;
    diff --git a/htdocs/core/class/html.formmailing.class.php b/htdocs/core/class/html.formmailing.class.php
    index e3e6ce4cbf9..067692f5094 100644
    --- a/htdocs/core/class/html.formmailing.class.php
    +++ b/htdocs/core/class/html.formmailing.class.php
    @@ -23,11 +23,14 @@
     require_once DOL_DOCUMENT_ROOT .'/core/class/html.form.class.php';
     
     /**
    - *	Class to offer components to list and upload files
    + *  Class to offer components to list and upload files
      */
     class FormMailing extends Form
     {
    -	public $errors=array();
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
     	/**
     	 * Output a select with destinaries status
    @@ -37,7 +40,8 @@ class FormMailing extends Form
     	 * @param integer  $show_empty     Show empty option
     	 * @return string HTML select
     	 */
    -	public function selectDestinariesStatus($selectedid='',$htmlname='dest_status', $show_empty=0) {
    +    public function selectDestinariesStatus($selectedid='', $htmlname='dest_status', $show_empty=0)
    +    {
     
     		global $langs;
     		$langs->load("mails");
    @@ -54,5 +58,5 @@ class FormMailing extends Form
             $options = $options + $mailing->statut_dest;
     
             return Form::selectarray($htmlname, $options, $selectedid, 0, 0, 0, '', 1);
    -	}
    +    }
     }
    diff --git a/htdocs/core/class/html.formmargin.class.php b/htdocs/core/class/html.formmargin.class.php
    index da8acce83d4..cdd827145b0 100644
    --- a/htdocs/core/class/html.formmargin.class.php
    +++ b/htdocs/core/class/html.formmargin.class.php
    @@ -28,8 +28,15 @@
      */
     class FormMargin
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
         /**
    @@ -40,8 +47,6 @@ class FormMargin
         function __construct($db)
         {
             $this->db = $db;
    -
    -        return 1;
         }
     
     
    @@ -275,6 +280,5 @@ class FormMargin
     		print '</table>';
     		print '</div>';
     	}
    -
     }
     
    diff --git a/htdocs/core/class/html.formorder.class.php b/htdocs/core/class/html.formorder.class.php
    index 68fa96e03ee..781b3f76e4f 100644
    --- a/htdocs/core/class/html.formorder.class.php
    +++ b/htdocs/core/class/html.formorder.class.php
    @@ -100,6 +100,5 @@ class FormOrder extends Form
     
     		return 1;
     	}
    -
     }
     
    diff --git a/htdocs/core/class/html.formother.class.php b/htdocs/core/class/html.formother.class.php
    index 69fe03ecaa1..8ca0b988fda 100644
    --- a/htdocs/core/class/html.formother.class.php
    +++ b/htdocs/core/class/html.formother.class.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
      * Copyright (C) 2006      Marc Barilley/Ocebo  <marc@ocebo.com>
      * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerker@telenet.be>
    @@ -38,7 +38,11 @@
     class FormOther
     {
         private $db;
    -    public $error;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error;
     
     
         /**
    @@ -49,11 +53,10 @@ class FormOther
         function __construct($db)
         {
             $this->db = $db;
    -
    -        return 1;
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Return HTML select list of export models
          *
    @@ -64,12 +67,13 @@ class FormOther
          *    @param    int		$fk_user          Utilisateur créant le modèle
          *    @return	void
          */
    -    function select_export_model($selected='',$htmlname='exportmodelid',$type='',$useempty=0, $fk_user=null)
    +    function select_export_model($selected='', $htmlname='exportmodelid', $type='', $useempty=0, $fk_user=null)
         {
    +        // phpcs:enable
             $sql = "SELECT rowid, label";
             $sql.= " FROM ".MAIN_DB_PREFIX."export_model";
             $sql.= " WHERE type = '".$type."'";
    -		if(!empty($fk_user))$sql.=" AND fk_user=".$fk_user;
    +		if (!empty($fk_user)) $sql.=" AND fk_user=".$fk_user;
             $sql.= " ORDER BY rowid";
             $result = $this->db->query($sql);
             if ($result)
    @@ -105,6 +109,7 @@ class FormOther
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Return list of export models
          *
    @@ -114,8 +119,9 @@ class FormOther
          *    @param    int		$useempty          Affiche valeur vide dans liste
          *    @return	void
          */
    -    function select_import_model($selected='',$htmlname='importmodelid',$type='',$useempty=0)
    +    function select_import_model($selected='', $htmlname='importmodelid', $type='', $useempty=0)
         {
    +        // phpcs:enable
             $sql = "SELECT rowid, label";
             $sql.= " FROM ".MAIN_DB_PREFIX."import_model";
             $sql.= " WHERE type = '".$type."'";
    @@ -154,6 +160,7 @@ class FormOther
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Return list of ecotaxes with label
          *
    @@ -161,8 +168,9 @@ class FormOther
          *    @param    string	$htmlname	Name of combo list
          *    @return	integer
          */
    -    function select_ecotaxes($selected='',$htmlname='ecotaxe_id')
    +    function select_ecotaxes($selected='', $htmlname='ecotaxe_id')
         {
    +        // phpcs:enable
             global $langs;
     
             $sql = "SELECT e.rowid, e.code, e.label, e.price, e.organization,";
    @@ -210,6 +218,7 @@ class FormOther
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Return list of revenue stamp for country
          *
    @@ -218,8 +227,9 @@ class FormOther
          *    @param    string	$country_code   Country Code
          *    @return	string					HTML select list
          */
    -    function select_revenue_stamp($selected='',$htmlname='revenuestamp',$country_code='')
    +    function select_revenue_stamp($selected='', $htmlname='revenuestamp', $country_code='')
         {
    +        // phpcs:enable
         	global $langs;
     
         	$out='';
    @@ -267,6 +277,7 @@ class FormOther
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Return a HTML select list to select a percent
          *
    @@ -281,6 +292,7 @@ class FormOther
          */
         function select_percent($selected=0,$htmlname='percent',$disabled=0,$increment=5,$start=0,$end=100,$showempty=0)
         {
    +        // phpcs:enable
             $return = '<select class="flat" name="'.$htmlname.'" '.($disabled?'disabled':'').'>';
             if ($showempty) $return.='<option value="-1"'.(($selected == -1 || $selected == '')?' selected':'').'>&nbsp;</option>';
     
    @@ -303,6 +315,7 @@ class FormOther
             return $return;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return select list for categories (to use in form search selectors)
          *
    @@ -317,6 +330,7 @@ class FormOther
          */
         function select_categories($type, $selected=0, $htmlname='search_categ', $nocateg=0, $showempty=1, $morecss='')
         {
    +        // phpcs:enable
             global $conf, $langs;
             require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
     
    @@ -363,6 +377,7 @@ class FormOther
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return select list for categories (to use in form search selectors)
          *
    @@ -376,6 +391,7 @@ class FormOther
          */
         function select_salesrepresentatives($selected,$htmlname,$user,$showstatus=0,$showempty=1,$morecss='')
         {
    +        // phpcs:enable
             global $conf,$langs;
             $langs->load('users');
     
    @@ -617,6 +633,7 @@ class FormOther
     		else print $textifnotdefined;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *		Output a HTML code to select a color
          *
    @@ -631,6 +648,7 @@ class FormOther
          */
         function select_color($set_color='', $prefix='f_color', $form_name='', $showcolorbox=1, $arrayofcolors='')
         {
    +        // phpcs:enable
         	print $this->selectColor($set_color, $prefix, $form_name, $showcolorbox, $arrayofcolors);
         }
     
    @@ -734,6 +752,7 @@ class FormOther
             return $out;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Creation d'un icone de couleur
          *
    @@ -746,6 +765,7 @@ class FormOther
          */
         function CreateColorIcon($color,$module,$name,$x='12',$y='12')
         {
    +        // phpcs:enable
             global $conf;
     
             $file = $conf->$module->dir_temp.'/'.$name.'.png';
    @@ -773,6 +793,7 @@ class FormOther
             ImageDestroy($image);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    	Return HTML combo list of week
          *
    @@ -783,15 +804,18 @@ class FormOther
          */
         function select_dayofweek($selected='',$htmlname='weekid',$useempty=0)
         {
    +        // phpcs:enable
             global $langs;
     
    -        $week = array(	0=>$langs->trans("Day0"),
    -        1=>$langs->trans("Day1"),
    -        2=>$langs->trans("Day2"),
    -        3=>$langs->trans("Day3"),
    -        4=>$langs->trans("Day4"),
    -        5=>$langs->trans("Day5"),
    -        6=>$langs->trans("Day6"));
    +        $week = array(
    +            0=>$langs->trans("Day0"),
    +            1=>$langs->trans("Day1"),
    +            2=>$langs->trans("Day2"),
    +            3=>$langs->trans("Day3"),
    +            4=>$langs->trans("Day4"),
    +            5=>$langs->trans("Day5"),
    +            6=>$langs->trans("Day6")
    +        );
     
             $select_week = '<select class="flat" name="'.$htmlname.'">';
             if ($useempty)
    @@ -815,6 +839,7 @@ class FormOther
             return $select_week;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *      Return HTML combo list of month
          *
    @@ -827,6 +852,7 @@ class FormOther
          */
         function select_month($selected='', $htmlname='monthid', $useempty=0, $longlabel=0, $morecss='')
         {
    +        // phpcs:enable
             global $langs;
     
             require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
    @@ -856,6 +882,7 @@ class FormOther
             return $select_month;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Return HTML combo list of years
          *
    @@ -872,6 +899,7 @@ class FormOther
          */
         function select_year($selected='',$htmlname='yearid',$useempty=0, $min_year=10, $max_year=5, $offset=0, $invert=0, $option='', $morecss='valignmiddle widthauto')
         {
    +        // phpcs:enable
             print $this->selectyear($selected,$htmlname,$useempty,$min_year,$max_year,$offset,$invert,$option,$morecss);
         }
     
    @@ -928,6 +956,7 @@ class FormOther
             return $out;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Show form to select address
          *
    @@ -941,6 +970,7 @@ class FormOther
          */
         function form_address($page, $selected, $socid, $htmlname='address_id', $origin='', $originid='')
         {
    +        // phpcs:enable
             global $langs,$conf;
             global $form;
     
    @@ -1012,7 +1042,7 @@ class FormOther
             		if (! empty($boxidactivatedforuser[$box->id])) continue;	// Already visible for user
             		$label=$langs->transnoentitiesnoconv($box->boxlabel);
             		//if (preg_match('/graph/',$box->class)) $label.=' ('.$langs->trans("Graph").')';
    -        		if (preg_match('/graph/',$box->class) && empty($conf->browser->phone))
    +        		if (preg_match('/graph/',$box->class) && $conf->browser->layout != 'phone')
             		{
             			$label=$label.' <span class="fa fa-bar-chart"></span>';
             		}
    @@ -1119,8 +1149,8 @@ class FormOther
     
             if ($nbboxactivated)
             {
    -        	$langs->load("boxes");
    -			$langs->load("projects");
    +        	// Load translation files required by the page
    +            $langs->loadLangs(array("boxes","projects"));
     
             	$emptybox=new ModeleBoxes($db);
     
    @@ -1146,7 +1176,7 @@ class FormOther
                     }
                 }
     
    -            if (empty($conf->browser->phone))
    +            if ($conf->browser->layout != 'phone')
                 {
                 	$emptybox->box_id='A';
                 	$emptybox->info_box_head=array();
    @@ -1173,7 +1203,7 @@ class FormOther
                     }
                 }
     
    -            if (empty($conf->browser->phone))
    +            if ($conf->browser->layout != 'phone')
                 {
                 	$emptybox->box_id='B';
                 	$emptybox->info_box_head=array();
    @@ -1182,13 +1212,13 @@ class FormOther
                 }
     
                 $boxlistb.= "<!-- End box right container -->\n";
    -
             }
     
             return array('selectboxlist'=>count($boxactivated)?$selectboxlist:'', 'boxactivated'=>$boxactivated, 'boxlista'=>$boxlista, 'boxlistb'=>$boxlistb);
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return a HTML select list of a dictionary
          *
    @@ -1203,6 +1233,7 @@ class FormOther
          */
         function select_dictionary($htmlname,$dictionarytable,$keyfield='code',$labelfield='label',$selected='',$useempty=0,$moreattrib='')
         {
    +        // phpcs:enable
             global $langs, $conf;
     
             $langs->load("admin");
    @@ -1251,6 +1282,4 @@ class FormOther
                 dol_print_error($this->db);
             }
         }
    -
     }
    -
    diff --git a/htdocs/core/class/html.formprojet.class.php b/htdocs/core/class/html.formprojet.class.php
    index 42ea2d216aa..1b6efe56820 100644
    --- a/htdocs/core/class/html.formprojet.class.php
    +++ b/htdocs/core/class/html.formprojet.class.php
    @@ -1,6 +1,7 @@
     <?php
     /* Copyright (c) 2013 Florian Henry  <florian.henry@open-concept.pro>
      * Copyright (C) 2015 Marcos García  <marcosgdf@gmail.com>
    + * Copyright (C) 2018 Charlene Benke <charlie@patas-monkey.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,8 +29,15 @@
      */
     class FormProjets
     {
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
     	/**
    @@ -40,9 +48,9 @@ class FormProjets
     	function __construct($db)
     	{
     		$this->db = $db;
    -		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Output a combo list with projects qualified for a third party / user
     	 *
    @@ -65,6 +73,7 @@ class FormProjets
     	 */
     	function select_projects($socid=-1, $selected='', $htmlname='projectid', $maxlength=16, $option_only=0, $show_empty=1, $discard_closed=0, $forcefocus=0, $disabled=0, $mode = 0, $filterkey = '', $nooutput=0, $forceaddid=0, $morecss='', $htmlid='')
     	{
    +        // phpcs:enable
     		global $langs,$conf,$form;
     
     		$out='';
    @@ -110,6 +119,7 @@ class FormProjets
     		else return $out;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Returns an array with projects qualified for a third party
     	 *
    @@ -132,6 +142,7 @@ class FormProjets
     	 */
     	function select_projects_list($socid=-1, $selected='', $htmlname='projectid', $maxlength=24, $option_only=0, $show_empty=1, $discard_closed=0, $forcefocus=0, $disabled=0, $mode=0, $filterkey = '', $nooutput=0, $forceaddid=0, $htmlid='', $morecss='maxwidth500')
     	{
    +        // phpcs:enable
     		global $user,$conf,$langs;
     
     		require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    @@ -139,10 +150,10 @@ class FormProjets
     		if (empty($htmlid)) $htmlid = $htmlname;
     
     		$out='';
    -        $outarray=array();
    +		$outarray=array();
     
     		$hideunselectables = false;
    -		if (! empty($conf->global->PROJECT_HIDE_UNSELECTABLES)) $hideunselectables = true;
    +		if (! empty($conf->global->CONTRACT_HIDE_UNSELECTABLES)) $hideunselectables = true;
     
     		$projectsListId = false;
     		if (empty($user->rights->projet->all->lire))
    @@ -323,7 +334,7 @@ class FormProjets
     		$out='';
     
     		$hideunselectables = false;
    -		if (! empty($conf->global->PROJECT_HIDE_UNSELECTABLES)) $hideunselectables = true;
    +		if (! empty($conf->global->CONTRACT_HIDE_UNSELECTABLES)) $hideunselectables = true;
     
     		if (empty($projectsListId))
     		{
    @@ -466,6 +477,7 @@ class FormProjets
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Build a HTML select list of element of same thirdparty to suggest to link them to project
     	 *
    @@ -473,19 +485,21 @@ class FormProjets
     	 *    @param	string		$socid				If of thirdparty to use as filter or 'id1,id2,...'
     	 *    @param	string		$morecss			More CSS
     	 *    @param    int         $limitonstatus      Add filters to limit length of list to opened status (for example to avoid ERR_RESPONSE_HEADERS_TOO_BIG on project/element.php page). TODO To implement
    +	 *    @param	string		$projectkey			Equivalent key  to fk_projet for actual table_element
     	 *    @return	int|string						The HTML select list of element or '' if nothing or -1 if KO
     	 */
    -	function select_element($table_element, $socid=0, $morecss='', $limitonstatus=-2)
    +	function select_element($table_element, $socid=0, $morecss='', $limitonstatus=-2,$projectkey="fk_projet")
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		if ($table_element == 'projet_task') return '';		// Special cas of element we never link to a project (already always done)
     
     		$linkedtothirdparty=false;
    -		if (! in_array($table_element, array('don','expensereport_det','expensereport','loan','stock_mouvement','chargesociales'))) $linkedtothirdparty=true;
    +		if (! in_array($table_element, array('don','expensereport_det','expensereport','loan','stock_mouvement','payment_salary','payment_various','chargesociales'))) $linkedtothirdparty=true;
     
     		$sqlfilter='';
    -		$projectkey="fk_projet";
    +
     		//print $table_element;
     		switch ($table_element)
     		{
    @@ -525,6 +539,9 @@ class FormProjets
     				$sql = 'SELECT t.rowid, t.label as ref';
     				$projectkey='fk_origin';
     				break;
    +			case "payment_salary":
    +				$sql = "SELECT t.rowid, t.num_payment as ref";	// TODO In a future fill and use real ref field
    +				break;
     			case "payment_various":
     				$sql = "SELECT t.rowid, t.num_payment as ref";
     				break;
    @@ -618,10 +635,16 @@ class FormProjets
     			if ($num > 0)
     			{
     				$sellist = '<select class="flat oppstatus'.($morecss?' '.$morecss:'').'" id="'.$htmlname.'" name="'.$htmlname.'">';
    -				if ($showempty) $sellist.= '<option value="-1">&nbsp;</option>';    // Without &nbsp, strange move of screen when switching value
    -				if ($showallnone) $sellist.= '<option value="all"'.($preselected == 'all'?' selected="selected"':'').'>--'.$langs->trans("OnlyOpportunitiesShort").'--</option>';
    -				if ($showallnone) $sellist.= '<option value="openedopp"'.($preselected == 'openedopp'?' selected="selected"':'').'>--'.$langs->trans("OpenedOpportunitiesShort").'--</option>';
    -				if ($showallnone) $sellist.= '<option value="none"'.($preselected == 'none'?' selected="selected"':'').'>--'.$langs->trans("NotAnOpportunityShort").'--</option>';
    +				if ($showempty) {
    +                    // Without &nbsp, strange move of screen when switching value
    +                    $sellist.= '<option value="-1">&nbsp;</option>';
    +                }
    +				if ($showallnone) {
    +                    $sellist.= '<option value="all"'.($preselected == 'all'?' selected="selected"':'').'>-- '.$langs->trans("OnlyOpportunitiesShort").' --</option>';
    +				    $sellist.= '<option value="openedopp"'.($preselected == 'openedopp'?' selected="selected"':'').'>-- '.$langs->trans("OpenedOpportunitiesShort").' --</option>';
    +				    $sellist.= '<option value="notopenedopp"'.($preselected == 'notopenedopp'?' selected="selected"':'').'>-- '.$langs->trans("NotOpenedOpportunitiesShort").' --</option>';
    +				    $sellist.= '<option value="none"'.($preselected == 'none'?' selected="selected"':'').'>-- '.$langs->trans("NotAnOpportunityShort").' --</option>';
    +                }
     				while ($i < $num)
     				{
     					$obj = $this->db->fetch_object($resql);
    @@ -662,5 +685,4 @@ class FormProjets
     			return -1;
     		}
     	}
    -
     }
    diff --git a/htdocs/core/class/html.formpropal.class.php b/htdocs/core/class/html.formpropal.class.php
    index 14e1a466275..c4ac522d98a 100644
    --- a/htdocs/core/class/html.formpropal.class.php
    +++ b/htdocs/core/class/html.formpropal.class.php
    @@ -27,8 +27,15 @@
      */
     class FormPropal
     {
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +	
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
     	/**
    @@ -59,10 +66,10 @@ class FormPropal
     
             $prefix='';
             $listofstatus=array();
    -        if ($mode == 'supplier') 
    +        if ($mode == 'supplier')
             {
                 $prefix='SupplierProposalStatus';
    -            
    +
                 $langs->load("supplier_proposal");
                 $listofstatus=array(
                     0=>array('id'=>0, 'code'=>'PR_DRAFT'),
    @@ -75,7 +82,7 @@ class FormPropal
             else
             {
                 $prefix="PropalStatus";
    -            
    +
                 $sql = "SELECT id, code, label, active FROM ".MAIN_DB_PREFIX."c_propalst";
                 $sql .= " WHERE active = 1";
                 dol_syslog(get_class($this)."::selectProposalStatus", LOG_DEBUG);
    @@ -139,4 +146,3 @@ class FormPropal
             print '</select>';
         }
     }
    -
    diff --git a/htdocs/core/class/html.formsms.class.php b/htdocs/core/class/html.formsms.class.php
    index 6db6f200136..4ef6208723d 100644
    --- a/htdocs/core/class/html.formsms.class.php
    +++ b/htdocs/core/class/html.formsms.class.php
    @@ -1,20 +1,21 @@
     <?php
    -/* Copyright (C) 2005-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
    -*
    -* This program is free software; you can redistribute it and/or modify
    -* it under the terms of the GNU General Public License as published by
    -* the Free Software Foundation; either version 3 of the License, or
    -* (at your option) any later version.
    -*
    -* This program is distributed in the hope that it will be useful,
    -* but WITHOUT ANY WARRANTY; without even the implied warranty of
    -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -* GNU General Public License for more details.
    -*
    -* You should have received a copy of the GNU General Public License
    -* along with this program. If not, see <http://www.gnu.org/licenses/>.
    -*/
    +/* Copyright (C) 2005-2011  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2010       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
     
     /**
      *       \file       htdocs/core/class/html.formsms.class.php
    @@ -32,31 +33,42 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/html.form.class.php';
      */
     class FormSms
     {
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -    var $fromname;
    -    var $fromsms;
    -    var $replytoname;
    -    var $replytomail;
    -    var $toname;
    -    var $tomail;
    +    public $fromname;
    +    public $fromsms;
    +    public $replytoname;
    +    public $replytomail;
    +    public $toname;
    +    public $tomail;
     
    -    var $withsubstit;			// Show substitution array
    -    var $withfrom;
    -    var $withto;
    -    var $withtopic;
    -    var $withbody;
    +    public $withsubstit;			// Show substitution array
    +    public $withfrom;
    +    public $withto;
    +    public $withtopic;
    +    public $withbody;
     
    -    var $withfromreadonly;
    -    var $withreplytoreadonly;
    -    var $withtoreadonly;
    -    var $withtopicreadonly;
    -    var $withcancel;
    +    public $withfromreadonly;
    +    public $withreplytoreadonly;
    +    public $withtoreadonly;
    +    public $withtopicreadonly;
    +    public $withcancel;
     
    -    var $substit=array();
    -    var $param=array();
    +    public $substit=array();
    +    public $param=array();
     
    -    var $error;
    +    /**
    +     * @var string Error code (or message)
    +     */
    +    public $error='';
    +
    +    /**
    +     * @var string[]	Array of error strings
    +     */
    +    public $errors=array();
     
     
         /**
    @@ -78,26 +90,25 @@ class FormSms
             $this->withtoreadonly=0;
             $this->withtopicreadonly=0;
             $this->withbodyreadonly=0;
    -
    -        return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Show the form to input an sms.
          *
    -     *	@param	string	$morecss        Class on first column td
    -     *  @param  int     $showform       Show form tags and submit button (recommanded is to use with value 0)
    +     *	@param	string	$morecss Class on first column td
    +     *  @param int $showform Show form tags and submit button (recommanded is to use with value 0)
          *	@return	void
          */
         function show_form($morecss='titlefield', $showform=1)
         {
    +     // phpcs:enable
             global $conf, $langs, $user, $form;
     
             if (! is_object($form)) $form=new Form($this->db);
     
    -        $langs->load("other");
    -        $langs->load("mails");
    -        $langs->load("sms");
    +        // Load translation files required by the page
    +        $langs->loadLangs(array('other', 'mails', 'sms'));
     
             $soc=new Societe($this->db);
             if (!empty($this->withtosocid) && $this->withtosocid > 0)
    @@ -354,6 +365,4 @@ function limitChars(textarea, limit, infodiv)
     
             print "<!-- End form SMS -->\n";
         }
    -
     }
    -
    diff --git a/htdocs/core/class/html.formsocialcontrib.class.php b/htdocs/core/class/html.formsocialcontrib.class.php
    index 83886e63af8..99e36878390 100644
    --- a/htdocs/core/class/html.formsocialcontrib.class.php
    +++ b/htdocs/core/class/html.formsocialcontrib.class.php
    @@ -27,8 +27,15 @@
      */
     class FormSocialContrib
     {
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
     	/**
    @@ -41,9 +48,10 @@ class FormSocialContrib
     	    $this->db = $db;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     *	Return list of social contributions.
    -     * 	Use mysoc->country_id or mysoc->country_code so they must be defined.
    +     *  Return list of social contributions.
    +     *  Use mysoc->country_id or mysoc->country_code so they must be defined.
          *
          *	@param	string	$selected       Preselected type
          *	@param  string	$htmlname       Name of field in form
    @@ -55,6 +63,7 @@ class FormSocialContrib
          */
         function select_type_socialcontrib($selected='',$htmlname='actioncode', $useempty=0, $maxlen=40, $help=1, $morecss='minwidth300')
         {
    +        // phpcs:enable
             global $conf,$db,$langs,$user,$mysoc;
     
             if (empty($mysoc->country_id) && empty($mysoc->country_code))
    @@ -113,6 +122,4 @@ class FormSocialContrib
                 dol_print_error($db,$db->lasterror());
             }
         }
    -
     }
    -
    diff --git a/htdocs/core/class/html.formticket.class.php b/htdocs/core/class/html.formticket.class.php
    index 9c3daefd62a..6c4a9703014 100644
    --- a/htdocs/core/class/html.formticket.class.php
    +++ b/htdocs/core/class/html.formticket.class.php
    @@ -39,9 +39,16 @@ if (!class_exists('FormCompany')) {
      */
     class FormTicket
     {
    +    /**
    +     * @var DoliDB Database handler.
    +     */
         public $db;
     
         public $track_id;
    +
    +    /**
    +     * @var int ID
    +     */
         public $fk_user_create;
     
         public $message;
    @@ -80,7 +87,10 @@ class FormTicket
         public $substit = array();
         public $param = array();
     
    -    public $error;
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error;
     
     
         /**
    @@ -106,8 +116,6 @@ class FormTicket
             $this->withref = 0;
             $this->withextrafields = 0;         // Show extrafields or not
             //$this->withtopicreadonly=0;
    -
    -        return 1;
         }
     
         /**
    @@ -120,9 +128,8 @@ class FormTicket
         {
             global $conf, $langs, $user, $hookmanager;
     
    -        $langs->load("other");
    -        $langs->load("mails");
    -        $langs->load("ticket");
    +        // Load translation files required by the page
    +        $langs->loadLangs(array('other', 'mails', 'ticket'));
     
             $form = new Form($this->db);
             $formcompany = new FormCompany($this->db);
    @@ -722,8 +729,8 @@ class FormTicket
         {
             global $conf, $langs, $user, $mysoc;
     
    -        $langs->load("other");
    -        $langs->load("mails");
    +        // Load translation files required by the page
    +        $langs->loadLangs(array('other', 'mails'));
     
             $addfileaction = 'addfile';
     
    diff --git a/htdocs/core/class/html.formwebsite.class.php b/htdocs/core/class/html.formwebsite.class.php
    index fc863c4d069..f5feccd5860 100644
    --- a/htdocs/core/class/html.formwebsite.class.php
    +++ b/htdocs/core/class/html.formwebsite.class.php
    @@ -28,7 +28,11 @@
     class FormWebsite
     {
         private $db;
    -    public $error;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error;
     
     
         /**
    @@ -39,8 +43,6 @@ class FormWebsite
         function __construct($db)
         {
             $this->db = $db;
    -
    -        return 1;
         }
     
     
    @@ -201,5 +203,4 @@ class FormWebsite
     
         	return $out;
         }
    -
     }
    diff --git a/htdocs/core/class/infobox.class.php b/htdocs/core/class/infobox.class.php
    index 4125aa89eb9..dedf3ec384f 100644
    --- a/htdocs/core/class/infobox.class.php
    +++ b/htdocs/core/class/infobox.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -281,6 +281,5 @@ class InfoBox
                 return -1;
             }
         }
    -
     }
     
    diff --git a/htdocs/core/class/interfaces.class.php b/htdocs/core/class/interfaces.class.php
    index 655969d73f6..abcf2132efa 100644
    --- a/htdocs/core/class/interfaces.class.php
    +++ b/htdocs/core/class/interfaces.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2006      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2010      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010      Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,9 +31,17 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
      */
     class Interfaces
     {
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
     	var $dir;				// Directory with all core and external triggers files
    -    var $errors	= array();	// Array for errors
    +
    +    /**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
         /**
          *	Constructor
    @@ -45,6 +53,7 @@ class Interfaces
             $this->db = $db;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *   Function called when a Dolibarr business event occurs
          *   This function call all qualified triggers.
    @@ -58,6 +67,7 @@ class Interfaces
          */
         function run_triggers($action,$object,$user,$langs,$conf)
         {
    +        // phpcs:enable
             // Check parameters
             if (! is_object($object) || ! is_object($conf))	// Error
             {
    @@ -360,5 +370,4 @@ class Interfaces
             }
             return $triggers;
         }
    -
     }
    diff --git a/htdocs/core/class/ldap.class.php b/htdocs/core/class/ldap.class.php
    index f54caacff8b..8c42d691d39 100644
    --- a/htdocs/core/class/ldap.class.php
    +++ b/htdocs/core/class/ldap.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004		Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2017	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2015	Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -29,12 +29,21 @@
      */
     class Ldap
     {
    -	var $error;
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[]	Array of error strings
    +	 */
    +	public $errors = array();
     
     	/**
     	 * Tableau des serveurs (IP addresses ou nom d'hotes)
     	 */
     	var $server=array();
    +
     	/**
     	 * Base DN (e.g. "dc=foo,dc=com")
     	 */
    @@ -140,6 +149,7 @@ class Ldap
     
     	// Connection handling methods -------------------------------------------
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Connect and bind
     	 * 	Use this->server, this->serverPort, this->ldapProtocolVersion, this->serverType, this->searchUser, this->searchPassword
    @@ -149,6 +159,7 @@ class Ldap
     	 */
     	function connect_bind()
     	{
    +        // phpcs:enable
     		global $langs, $conf;
     
     		$connected=0;
    @@ -370,7 +381,8 @@ class Ldap
     	 *
     	 * @return	boolean					version
     	 */
    -	function setVersion() {
    +    function setVersion()
    +    {
     		// LDAP_OPT_PROTOCOL_VERSION est une constante qui vaut 17
     		$ldapsetversion = ldap_set_option($this->connection, LDAP_OPT_PROTOCOL_VERSION, $this->ldapProtocolVersion);
     		return $ldapsetversion;
    @@ -381,7 +393,8 @@ class Ldap
     	 *
     	 * @return	boolean					referrals
     	 */
    -	function setReferrals() {
    +    function setReferrals()
    +    {
     		// LDAP_OPT_REFERRALS est une constante qui vaut ?
     		$ldapreferrals = ldap_set_option($this->connection, LDAP_OPT_REFERRALS, 0);
     		return $ldapreferrals;
    @@ -643,6 +656,7 @@ class Ldap
     		return -1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Build a LDAP message
     	 *
    @@ -652,6 +666,7 @@ class Ldap
     	 */
     	function dump_content($dn, $info)
     	{
    +        // phpcs:enable
     		$content='';
     
     		// Create file content
    @@ -1423,6 +1438,7 @@ class Ldap
     		return($retval);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Convertit le temps ActiveDirectory en Unix timestamp
     	 *
    @@ -1431,6 +1447,7 @@ class Ldap
     	 */
     	function convert_time($value)
     	{
    +        // phpcs:enable
     		$dateLargeInt=$value; // nano secondes depuis 1601 !!!!
     		$secsAfterADEpoch = $dateLargeInt / (10000000); // secondes depuis le 1 jan 1601
     		$ADToUnixConvertor=((1970-1601) * 365.242190) * 86400; // UNIX start date - AD start date * jours * secondes
    diff --git a/htdocs/core/class/link.class.php b/htdocs/core/class/link.class.php
    index 0441c04a86e..8413725ab11 100644
    --- a/htdocs/core/class/link.class.php
    +++ b/htdocs/core/class/link.class.php
    @@ -28,13 +28,29 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class Link extends CommonObject
     {
    -    public $element = 'link';
    -    public $table_element = 'links';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element = 'link';
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element = 'links';
    +
    +    /**
    +	 * @var int Entity
    +	 */
    +	public $entity;
     
    -    public $entity;
         public $datea;
         public $url;
    +
    +    /**
    +     * @var string Links label
    +     */
         public $label;
    +
         public $objecttype;
         public $objectid;
     
    @@ -46,11 +62,7 @@ class Link extends CommonObject
          */
         public function __construct($db)
         {
    -        global $conf;
    -
             $this->db = $db;
    -
    -        return 1;
         }
     
     
    @@ -378,7 +390,5 @@ class Link extends CommonObject
                 $this->db->rollback();
                 return -1;
             }
    -
         }
    -
     }
    diff --git a/htdocs/core/class/menu.class.php b/htdocs/core/class/menu.class.php
    index 17d5e06589f..3d9d92189a3 100644
    --- a/htdocs/core/class/menu.class.php
    +++ b/htdocs/core/class/menu.class.php
    @@ -73,7 +73,7 @@ class Menu
         /**
          * Insert a menu entry into this->liste
          *
    -     * @param	int		$idafter	Array key after which inserting new entry
    +     * @param   int		$idafter	Array key after which inserting new entry
          * @param	string	$url        Url to follow on click
          * @param   string	$titre      Label of menu to add
          * @param   integer	$level      Level of menu to add
    @@ -96,6 +96,7 @@ class Menu
             $this->liste=array_merge($array_start,$array_new,$array_end);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Remove a menu entry from this->liste
          *
    @@ -103,7 +104,10 @@ class Menu
          */
         function remove_last()
         {
    -    	if (count($this->liste) > 1) array_pop($this->liste);
    +        // phpcs:enable
    +        if (count($this->liste) > 1) {
    +            array_pop($this->liste);
    +        }
         }
     
         /**
    diff --git a/htdocs/core/class/menubase.class.php b/htdocs/core/class/menubase.class.php
    index 48880633563..7f4ab7c6d4a 100644
    --- a/htdocs/core/class/menubase.class.php
    +++ b/htdocs/core/class/menubase.class.php
    @@ -1,6 +1,7 @@
     <?php
     /* Copyright (C) 2007-2009	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@inodbox.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,19 +29,49 @@
      */
     class Menubase
     {
    -    public $db;							// To store db handler
    -    public $error;							// To return error code (or message)
    -    public $errors=array();				// To return several error codes (or messages)
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -    public $id;
    +    /**
    +     * @var string Error code (or message)
    +     */
    +    public $error;
    +
    +    /**
    +     * @var string[] Error codes (or messages)
    +     */
    +    public $errors = array();
    +
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
     
         public $menu_handler;
         public $module;
         public $type;
         public $mainmenu;
    +
    +    /**
    +     * @var int ID
    +     */
         public $fk_menu;
    +
    +    /**
    +     * @var string fk_mainmenu
    +     */
         public $fk_mainmenu;
    +
    +    /**
    +     * @var string fk_leftmenu
    +     */
         public $fk_leftmenu;
    +
    +    /**
    +     * @var int position
    +     */
         public $position;
         public $url;
         public $target;
    @@ -84,10 +115,10 @@ class Menubase
             $this->type=trim($this->type);
             $this->mainmenu=trim($this->mainmenu);
             $this->leftmenu=trim($this->leftmenu);
    -        $this->fk_menu=trim($this->fk_menu);          // If -1, fk_mainmenu and fk_leftmenu must be defined
    +        $this->fk_menu = (int) $this->fk_menu;          // If -1, fk_mainmenu and fk_leftmenu must be defined
             $this->fk_mainmenu=trim($this->fk_mainmenu);
             $this->fk_leftmenu=trim($this->fk_leftmenu);
    -        $this->position=trim($this->position);
    +        $this->position = (int) $this->position;
             $this->url=trim($this->url);
             $this->target=trim($this->target);
             $this->titre=trim($this->titre);
    @@ -95,7 +126,7 @@ class Menubase
             $this->perms=trim($this->perms);
             $this->enabled=trim($this->enabled);
             $this->user=trim($this->user);
    -        $this->position=trim($this->position);
    +        if (empty($this->position)) $this->position=0;
             if (! $this->level) $this->level=0;
     
             // Check parameters
    @@ -128,7 +159,7 @@ class Menubase
             $sql = "SELECT count(*)";
             $sql.= " FROM ".MAIN_DB_PREFIX."menu";
             $sql.= " WHERE menu_handler = '".$this->db->escape($this->menu_handler)."'";
    -        $sql.= " AND fk_menu = ".((int) $this->db->escape($this->fk_menu));
    +        $sql.= " AND fk_menu = ".((int) $this->fk_menu);
             $sql.= " AND position = ".((int) $this->position);
             $sql.= " AND url = '".$this->db->escape($this->url)."'";
             $sql.= " AND entity = ".$conf->entity;
    @@ -225,10 +256,10 @@ class Menubase
             $this->type=trim($this->type);
             $this->mainmenu=trim($this->mainmenu);
             $this->leftmenu=trim($this->leftmenu);
    -        $this->fk_menu=trim($this->fk_menu);
    +        $this->fk_menu = (int) $this->fk_menu;
             $this->fk_mainmenu=trim($this->fk_mainmenu);
             $this->fk_leftmenu=trim($this->fk_leftmenu);
    -        $this->position=trim($this->position);
    +        $this->position = (int) $this->position;
             $this->url=trim($this->url);
             $this->target=trim($this->target);
             $this->titre=trim($this->titre);
    @@ -247,7 +278,7 @@ class Menubase
             $sql.= " type='".$this->db->escape($this->type)."',";
             $sql.= " mainmenu='".$this->db->escape($this->mainmenu)."',";
             $sql.= " leftmenu='".$this->db->escape($this->leftmenu)."',";
    -        $sql.= " fk_menu='".$this->db->escape($this->fk_menu)."',";
    +        $sql.= " fk_menu=".$this->fk_menu.",";
             $sql.= " fk_mainmenu=".($this->fk_mainmenu?"'".$this->db->escape($this->fk_mainmenu)."'":"null").",";
             $sql.= " fk_leftmenu=".($this->fk_leftmenu?"'".$this->db->escape($this->fk_leftmenu)."'":"null").",";
             $sql.= " position=".($this->position > 0 ? $this->position : 0).",";
    @@ -683,6 +714,4 @@ class Menubase
                 }
             }
        }
    -
     }
    -
    diff --git a/htdocs/core/class/notify.class.php b/htdocs/core/class/notify.class.php
    index ae22728f06d..e7cd7cabe53 100644
    --- a/htdocs/core/class/notify.class.php
    +++ b/htdocs/core/class/notify.class.php
    @@ -2,6 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2014	   Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2018 	   Philippe Grand		<philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,21 +31,41 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/CMailFile.class.php';
      */
     class Notify
     {
    -	var $id;
    -	var $db;
    -	var $error;
    -	var $errors=array();
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $author;
    -	var $ref;
    -	var $date;
    -	var $duree;
    -	var $note;
    -	var $fk_project;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
    +	public $author;
    +	public $ref;
    +	public $date;
    +	public $duree;
    +	public $note;
    +
    +	/**
    +     * @var int Project ID
    +     */
    +    public $fk_project;
     
     	// Les codes actions sont definis dans la table llx_notify_def
     
     	// codes actions supported are
    +	// @TODO defined also into interface_50_modNotificiation_Notificiation.class.php
     	public $arrayofnotifsupported = array(
     		'BILL_VALIDATE',
     		'BILL_PAYED',
    @@ -56,7 +77,11 @@ class Notify
     		'ORDER_SUPPLIER_VALIDATE',
     		'ORDER_SUPPLIER_APPROVE',
     		'ORDER_SUPPLIER_REFUSE',
    -		'SHIPPING_VALIDATE'
    +		'SHIPPING_VALIDATE',
    +		'EXPENSE_REPORT_VALIDATE',
    +		'EXPENSE_REPORT_APPROVE',
    +		'HOLIDAY_VALIDATE',
    +		'HOLIDAY_APPROVE'
     	);
     
     
    @@ -320,22 +345,27 @@ class Notify
     		$oldref=(empty($object->oldref)?$object->ref:$object->oldref);
     		$newref=(empty($object->newref)?$object->ref:$object->newref);
     
    +		$sql = '';
    +
     		// Check notification per third party
    -		$sql = "SELECT 'tocontactid' as type_target, c.email, c.rowid as cid, c.lastname, c.firstname, c.default_lang,";
    -		$sql.= " a.rowid as adid, a.label, a.code, n.rowid, n.type";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."socpeople as c,";
    -		$sql.= " ".MAIN_DB_PREFIX."c_action_trigger as a,";
    -		$sql.= " ".MAIN_DB_PREFIX."notify_def as n,";
    -		$sql.= " ".MAIN_DB_PREFIX."societe as s";
    -		$sql.= " WHERE n.fk_contact = c.rowid AND a.rowid = n.fk_action";
    -		$sql.= " AND n.fk_soc = s.rowid";
    -		if (is_numeric($notifcode)) $sql.= " AND n.fk_action = ".$notifcode;	// Old usage
    -		else $sql.= " AND a.code = '".$notifcode."'";	// New usage
    -		$sql .= " AND s.rowid = ".$object->socid;
    +		if ($object->socid > 0)
    +		{
    +			$sql.= "SELECT 'tocontactid' as type_target, c.email, c.rowid as cid, c.lastname, c.firstname, c.default_lang,";
    +			$sql.= " a.rowid as adid, a.label, a.code, n.rowid, n.type";
    +			$sql.= " FROM ".MAIN_DB_PREFIX."socpeople as c,";
    +			$sql.= " ".MAIN_DB_PREFIX."c_action_trigger as a,";
    +			$sql.= " ".MAIN_DB_PREFIX."notify_def as n,";
    +			$sql.= " ".MAIN_DB_PREFIX."societe as s";
    +			$sql.= " WHERE n.fk_contact = c.rowid AND a.rowid = n.fk_action";
    +			$sql.= " AND n.fk_soc = s.rowid";
    +			if (is_numeric($notifcode)) $sql.= " AND n.fk_action = ".$notifcode;	// Old usage
    +			else $sql.= " AND a.code = '".$notifcode."'";	// New usage
    +			$sql .= " AND s.rowid = ".$object->socid;
    +
    +			$sql.= "\nUNION\n";
    +		}
     
     		// Check notification per user
    -		$sql.= "\nUNION\n";
    -
     		$sql.= "SELECT 'touserid' as type_target, c.email, c.rowid as cid, c.lastname, c.firstname, c.lang as default_lang,";
     		$sql.= " a.rowid as adid, a.label, a.code, n.rowid, n.type";
     		$sql.= " FROM ".MAIN_DB_PREFIX."user as c,";
    @@ -343,12 +373,20 @@ class Notify
     		$sql.= " ".MAIN_DB_PREFIX."notify_def as n";
     		$sql.= " WHERE n.fk_user = c.rowid AND a.rowid = n.fk_action";
     		if (is_numeric($notifcode)) $sql.= " AND n.fk_action = ".$notifcode;	// Old usage
    -		else $sql.= " AND a.code = '".$notifcode."'";	// New usage
    +		else $sql.= " AND a.code = '".$this->db->escape($notifcode)."'";	// New usage
     
     		$result = $this->db->query($sql);
     		if ($result)
     		{
     			$num = $this->db->num_rows($result);
    +			$projtitle='';
    +			if (! empty($object->fk_project))
    +			{
    +				require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    +				$proj = new Project($this->db);
    +				$proj->fetch($object->fk_project);
    +				$projtitle='('.$proj->title.')';
    +			}
     
     			if ($num > 0)
     			{
    @@ -371,7 +409,7 @@ class Notify
     							$outputlangs->loadLangs(array("main","other"));
     						}
     
    -						$subject = '['.$mysoc->name.'] '.$outputlangs->transnoentitiesnoconv("DolibarrNotification");
    +						$subject = '['.$mysoc->name.'] '.$outputlangs->transnoentitiesnoconv("DolibarrNotification").($projtitle?' '.$projtitle:'');
     
     						switch ($notifcode) {
     							case 'BILL_VALIDATE':
    @@ -445,6 +483,26 @@ class Notify
     								$object_type = 'order_supplier';
     								$mesg = $outputlangs->transnoentitiesnoconv("EMailTextExpeditionValidated",$newref);
     								break;
    +							case 'EXPENSE_REPORT_VALIDATE':
    +								$dir_output = $conf->expensereport->dir_output;
    +								$object_type = 'expensereport';
    +								$mesg = $outputlangs->transnoentitiesnoconv("EMailTextExpenseReportValidated",$newref);
    +								break;
    +							case 'EXPENSE_REPORT_APPROVE':
    +								$dir_output = $conf->expensereport->dir_output;
    +								$object_type = 'expensereport';
    +								$mesg = $outputlangs->transnoentitiesnoconv("EMailTextExpenseReportApproved",$newref);
    +								break;
    +							case 'HOLIDAY_VALIDATE':
    +								$dir_output = $conf->holiday->dir_output;
    +								$object_type = 'holiday';
    +								$mesg = $outputlangs->transnoentitiesnoconv("EMailTextHolidayValidated",$newref);
    +								break;
    +							case 'HOLIDAY_APPROVE':
    +								$dir_output = $conf->holiday->dir_output;
    +								$object_type = 'holiday';
    +								$mesg = $outputlangs->transnoentitiesnoconv("EMailTextHolidayApproved",$newref);
    +								break;
     						}
     						$ref = dol_sanitizeFileName($newref);
     						$pdf_path = $dir_output."/".$ref."/".$ref.".pdf";
    @@ -491,12 +549,10 @@ class Notify
     							if ($obj->type_target == 'touserid') {
     	 							$sql = "INSERT INTO ".MAIN_DB_PREFIX."notify (daten, fk_action, fk_soc, fk_user, type, objet_type, type_target, objet_id, email)";
     								$sql.= " VALUES ('".$this->db->idate(dol_now())."', ".$notifcodedefid.", ".($object->socid?$object->socid:'null').", ".$obj->cid.", '".$obj->type."', '".$object_type."', '".$obj->type_target."', ".$object->id.", '".$this->db->escape($obj->email)."')";
    -
     							}
     							else {
     								$sql = "INSERT INTO ".MAIN_DB_PREFIX."notify (daten, fk_action, fk_soc, fk_contact, type, objet_type, type_target, objet_id, email)";
     								$sql.= " VALUES ('".$this->db->idate(dol_now())."', ".$notifcodedefid.", ".($object->socid?$object->socid:'null').", ".$obj->cid.", '".$obj->type."', '".$object_type."', '".$obj->type_target."', ".$object->id.", '".$this->db->escape($obj->email)."')";
    -
     							}
     							if (! $this->db->query($sql))
     							{
    @@ -553,7 +609,7 @@ class Notify
     				$link = '';
     				$num++;
     
    -				$subject = '['.$mysoc->name.'] '.$langs->transnoentitiesnoconv("DolibarrNotification");
    +				$subject = '['.$mysoc->name.'] '.$langs->transnoentitiesnoconv("DolibarrNotification").($projtitle?' '.$projtitle:'');
     
     				switch ($notifcode) {
     					case 'BILL_VALIDATE':
    @@ -635,6 +691,26 @@ class Notify
     						$object_type = 'order_supplier';
     						$mesg = $langs->transnoentitiesnoconv("EMailTextExpeditionValidated",$newref);
     						break;
    +					case 'EXPENSE_REPORT_VALIDATE':
    +						$dir_output = $conf->expensereport->dir_output;
    +						$object_type = 'expensereport';
    +						$mesg = $langs->transnoentitiesnoconv("EMailTextExpenseReportValidated",$newref);
    +						break;
    +					case 'EXPENSE_REPORT_APPROVE':
    +						$dir_output = $conf->expensereport->dir_output;
    +						$object_type = 'expensereport';
    +						$mesg = $langs->transnoentitiesnoconv("EMailTextExpenseReportApproved",$newref);
    +						break;
    +					case 'HOLIDAY_VALIDATE':
    +						$dir_output = $conf->holiday->dir_output;
    +						$object_type = 'holiday';
    +						$mesg = $langs->transnoentitiesnoconv("EMailTextHolidayValidated",$newref);
    +						break;
    +					case 'HOLIDAY_APPROVE':
    +						$dir_output = $conf->holiday->dir_output;
    +						$object_type = 'holiday';
    +						$mesg = $langs->transnoentitiesnoconv("EMailTextHolidayApproved",$newref);
    +						break;
     				}
     				$ref = dol_sanitizeFileName($newref);
     				$pdf_path = $dir_output."/".$ref."/".$ref.".pdf";
    @@ -717,6 +793,4 @@ class Notify
     		if (! $error) return $num;
     		else return -1 * $error;
     	}
    -
     }
    -
    diff --git a/htdocs/core/class/openid.class.php b/htdocs/core/class/openid.class.php
    index d46481a0c60..48de42ad847 100644
    --- a/htdocs/core/class/openid.class.php
    +++ b/htdocs/core/class/openid.class.php
    @@ -30,8 +30,8 @@ class SimpleOpenID
         var $URLs = array();
         var $error = array();
         var $fields = array(
    -		'required'	 => array(),
    -		'optional'	 => array(),
    +		'required' => array(),
    +		'optional' => array(),
         );
     
         /**
    @@ -45,6 +45,7 @@ class SimpleOpenID
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * SetOpenIDServer
          *
    @@ -53,9 +54,11 @@ class SimpleOpenID
          */
         function SetOpenIDServer($a)
         {
    +        // phpcs:enable
             $this->URLs['openid_server'] = $a;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * SetOpenIDServer
          *
    @@ -64,9 +67,11 @@ class SimpleOpenID
          */
         function SetTrustRoot($a)
         {
    +        // phpcs:enable
             $this->URLs['trust_root'] = $a;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * SetOpenIDServer
          *
    @@ -75,9 +80,11 @@ class SimpleOpenID
          */
         function SetCancelURL($a)
         {
    +        // phpcs:enable
             $this->URLs['cancel'] = $a;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * SetApprovedURL
          *
    @@ -86,9 +93,11 @@ class SimpleOpenID
          */
         function SetApprovedURL($a)
         {
    +        // phpcs:enable
             $this->URLs['approved'] = $a;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * SetRequiredFields
          *
    @@ -97,13 +106,15 @@ class SimpleOpenID
          */
         function SetRequiredFields($a)
         {
    -        if (is_array($a)){
    +        // phpcs:enable
    +        if (is_array($a)) {
                 $this->fields['required'] = $a;
    -        }else{
    +        } else {
                 $this->fields['required'][] = $a;
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * SetOptionalFields
          *
    @@ -112,23 +123,27 @@ class SimpleOpenID
          */
         function SetOptionalFields($a)
         {
    -        if (is_array($a)){
    +        // phpcs:enable
    +        if (is_array($a)) {
                 $this->fields['optional'] = $a;
    -        }else{
    +        } else {
                 $this->fields['optional'][] = $a;
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * SetIdentity
          *
    -     * @param	string	$a		Server
    +     * @param	string  $a		Server
          * @return	void
          */
         function SetIdentity($a)
    -    { 	// Set Identity URL
    +    {
    +        // phpcs:enable
    +        // Set Identity URL
             if ((stripos($a, 'http://') === false)
    -        && (stripos($a, 'https://') === false)){
    +        && (stripos($a, 'https://') === false)) {
                 $a = 'http://'.$a;
             }
             /*
    @@ -147,16 +162,20 @@ class SimpleOpenID
             $this->openid_url_identity = $a;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * GetIdentity
          *
          * @return	string
          */
         function GetIdentity()
    -    { 	// Get Identity
    +    {
    +        // phpcs:enable
    +        // Get Identity
             return $this->openid_url_identity;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * SetOpenIDServer
          *
    @@ -164,10 +183,12 @@ class SimpleOpenID
          */
         function GetError()
         {
    +        // phpcs:enable
             $e = $this->error;
             return array('code'=>$e[0],'description'=>$e[1]);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * ErrorStore
          *
    @@ -177,6 +198,7 @@ class SimpleOpenID
          */
         function ErrorStore($code, $desc = null)
         {
    +        // phpcs:enable
             $errs['OPENID_NOSERVERSFOUND'] = 'Cannot find OpenID Server TAG on Identity page.';
             if ($desc == null){
                 $desc = $errs[$code];
    @@ -184,6 +206,7 @@ class SimpleOpenID
             $this->error = array($code,$desc);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * IsError
          *
    @@ -191,6 +214,7 @@ class SimpleOpenID
          */
         function IsError()
         {
    +        // phpcs:enable
             if (count($this->error) > 0)
             {
                 return true;
    @@ -221,6 +245,7 @@ class SimpleOpenID
             return $r;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * OpenID_Standarize
          *
    @@ -229,6 +254,7 @@ class SimpleOpenID
          */
         function OpenID_Standarize($openid_identity = null)
         {
    +        // phpcs:enable
             if ($openid_identity === null)
             $openid_identity = $this->openid_url_identity;
     
    @@ -254,7 +280,8 @@ class SimpleOpenID
          * @return false|string		false if KO, string of url if OK
          */
         function array2url($arr)
    -    { // converts associated array to URL Query String
    +    {
    +        // converts associated array to URL Query String
             if (!is_array($arr)){
                 return false;
             }
    @@ -265,6 +292,7 @@ class SimpleOpenID
             return $query;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * FSOCK_Request
          *
    @@ -275,6 +303,7 @@ class SimpleOpenID
          */
         function FSOCK_Request($url, $method="GET", $params = "")
         {
    +        // phpcs:enable
             $fp = fsockopen("ssl://www.myopenid.com", 443, $errno, $errstr, 3); // Connection timeout is 3 seconds
             if (!$fp) {
                 $this->ErrorStore('OPENID_SOCKETERROR', $errstr);
    @@ -297,6 +326,7 @@ class SimpleOpenID
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * CURL_Request
          *
    @@ -306,7 +336,9 @@ class SimpleOpenID
          * @return string
          */
         function CURL_Request($url, $method="GET", $params = "")
    -    { // Remember, SSL MUST BE SUPPORTED
    +    {
    +        // phpcs:enable
    +        // Remember, SSL MUST BE SUPPORTED
             if (is_array($params)) $params = $this->array2url($params);
     
             $curl = curl_init($url . ($method == "GET" && $params != "" ? "?" . $params : ""));
    @@ -327,6 +359,7 @@ class SimpleOpenID
             return $response;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * HTML2OpenIDServer
          *
    @@ -335,6 +368,7 @@ class SimpleOpenID
          */
         function HTML2OpenIDServer($content)
         {
    +        // phpcs:enable
             $get = array();
     
             // Get details of their OpenID server and (optional) delegate
    @@ -353,6 +387,7 @@ class SimpleOpenID
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Get openid server
          *
    @@ -361,7 +396,8 @@ class SimpleOpenID
          */
         function GetOpenIDServer($url='')
         {
    -    	global $conf;
    +        // phpcs:enable
    +        global $conf;
     
     		include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
     		if (empty($url)) $url=$conf->global->MAIN_AUTHENTICATION_OPENID_URL;
    @@ -369,18 +405,19 @@ class SimpleOpenID
             $response = getURLContent($url);
     
             list($servers, $delegates) = $this->HTML2OpenIDServer($response);
    -        if (count($servers) == 0){
    +        if (count($servers) == 0) {
                 $this->ErrorStore('OPENID_NOSERVERSFOUND');
                 return false;
             }
             if (isset($delegates[0])
    -        && ($delegates[0] != "")){
    +        && ($delegates[0] != "")) {
                 $this->SetIdentity($delegates[0]);
             }
             $this->SetOpenIDServer($servers[0]);
             return $servers[0];
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * GetRedirectURL
          *
    @@ -388,6 +425,7 @@ class SimpleOpenID
          */
         function GetRedirectURL()
         {
    +        // phpcs:enable
             $params = array();
             $params['openid.return_to'] = urlencode($this->URLs['approved']);
             $params['openid.mode'] = 'checkid_setup';
    @@ -405,6 +443,7 @@ class SimpleOpenID
             return $this->URLs['openid_server'] . "?". $this->array2url($params);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Redirect
          *
    @@ -412,6 +451,7 @@ class SimpleOpenID
          */
         function Redirect()
         {
    +        // phpcs:enable
             $redirect_to = $this->GetRedirectURL();
             if (headers_sent())
             { // Use JavaScript to redirect if content has been previously sent (not recommended, but safe)
    @@ -425,6 +465,7 @@ class SimpleOpenID
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * ValidateWithServer
          *
    @@ -432,6 +473,7 @@ class SimpleOpenID
          */
         function ValidateWithServer()
         {
    +        // phpcs:enable
             $params = array(
     			'openid.assoc_handle' => urlencode($_GET['openid_assoc_handle']),
     			'openid.signed' => urlencode($_GET['openid_signed']),
    @@ -520,6 +562,4 @@ class SimpleOpenID
             	return $server;
     	    }
         }
    -
     }
    -
    diff --git a/htdocs/core/class/rssparser.class.php b/htdocs/core/class/rssparser.class.php
    index 47c36cb0eaf..fd37476a26e 100644
    --- a/htdocs/core/class/rssparser.class.php
    +++ b/htdocs/core/class/rssparser.class.php
    @@ -26,8 +26,15 @@
      */
     class RssParser
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
         private $_format='';
         private $_urlRSS;
    @@ -54,7 +61,7 @@ class RssParser
          */
         public function __construct($db)
         {
    -    	$this->db=$db;
    +    	$this->db = $db;
         }
     
         /**
    @@ -454,6 +461,7 @@ class RssParser
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Triggered when opened tag is found
          *
    @@ -464,6 +472,7 @@ class RssParser
          */
         function feed_start_element($p, $element, &$attrs)
         {
    +        // phpcs:enable
             $el = $element = strtolower($element);
             $attrs = array_change_key_case($attrs, CASE_LOWER);
     
    @@ -536,8 +545,6 @@ class RssParser
                 }
     
                 $this->incontent = $el;
    -
    -
             }
     
             // if inside an Atom content construct (e.g. content or summary) field treat tags as text
    @@ -574,6 +581,7 @@ class RssParser
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Triggered when CDATA is found
          *
    @@ -583,6 +591,7 @@ class RssParser
          */
         function feed_cdata($p, $text)
         {
    +        // phpcs:enable
             if ($this->_format == 'atom' and $this->incontent)
             {
                 $this->append_content($text);
    @@ -594,6 +603,7 @@ class RssParser
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Triggered when closed tag is found
          *
    @@ -603,6 +613,7 @@ class RssParser
          */
         function feed_end_element($p, $el)
         {
    +        // phpcs:enable
             $el = strtolower($el);
     
             if ($el == 'item' or $el == 'entry')
    @@ -663,6 +674,7 @@ class RssParser
             $str1 .= $str2;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Enter description here ...
          *
    @@ -671,6 +683,7 @@ class RssParser
          */
         function append_content($text)
         {
    +        // phpcs:enable
             if ( $this->initem ) {
                 $this->concat($this->current_item[ $this->incontent ], $text);
             }
    @@ -719,10 +732,8 @@ class RssParser
                 elseif ($this->inchannel) {
                     $this->concat($this->channel[ $el ], $text);
                 }
    -
             }
         }
    -
     }
     
     
    @@ -745,11 +756,10 @@ function xml2php($xml)
             foreach($value->attributes() as $ak=>$av)
             {
                 $child[$ak] = (string) $av;
    -
             }
     
             //Let see if the new child is not in the array
    -        if($tab === false && in_array($key,array_keys($array)))
    +        if ($tab === false && in_array($key,array_keys($array)))
             {
                 //If this element is already in the array we will create an indexed array
                 $tmp = $array[$key];
    @@ -773,12 +783,10 @@ function xml2php($xml)
         }
     
     
    -    if($fils==0)
    +    if ($fils==0)
         {
             return (string) $xml;
         }
     
         return $array;
    -
     }
    -
    diff --git a/htdocs/core/class/smtps.class.php b/htdocs/core/class/smtps.class.php
    index ffa9dafdfbe..1ade95098fa 100644
    --- a/htdocs/core/class/smtps.class.php
    +++ b/htdocs/core/class/smtps.class.php
    @@ -344,6 +344,7 @@ class SMTPs
     		$_aryToList = $this->getTO();
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Attempt a connection to mail server
     	 *
    @@ -351,6 +352,7 @@ class SMTPs
     	 */
     	function _server_connect()
     	{
    +        // phpcs:enable
     		// Default return value
     		$_retVal = true;
     
    @@ -406,6 +408,7 @@ class SMTPs
     		return $_retVal;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Attempt mail server authentication for a secure connection
     	 *
    @@ -413,6 +416,7 @@ class SMTPs
     	 */
     	function _server_authenticate()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		// Send the RFC2554 specified EHLO.
    @@ -656,7 +660,7 @@ class SMTPs
     		{
     			// If the path is not valid, this will NOT generate an error,
     			// it will simply return false.
    -			if ( ! @include ( $_strConfigPath ) )
    +			if ( ! @include $_strConfigPath)
     			{
     				$this->_setErr(110, '"' . $_strConfigPath . '" is not a valid path.');
     				$_retVal = false;
    @@ -1036,6 +1040,7 @@ class SMTPs
     		$this->_msgRecipients = $aryHost;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Returns an array of the various parts of an email address
     	 * This assumes a well formed address:
    @@ -1054,6 +1059,7 @@ class SMTPs
     	 */
     	function _strip_email($_strAddr)
     	{
    +        // phpcs:enable
     		// Keep the orginal
     		$_aryEmail['org'] = $_strAddr;
     
    @@ -1087,6 +1093,7 @@ class SMTPs
     		return $_aryEmail;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Returns an array of bares addresses for use with 'RCPT TO:'
     	 * This is a "build as you go" method. Each time this method is called
    @@ -1096,6 +1103,7 @@ class SMTPs
     	 */
     	function get_RCPT_list()
     	{
    +        // phpcs:enable
     		/**
     		 * An array of bares addresses for use with 'RCPT TO:'
     		 */
    @@ -1117,6 +1125,7 @@ class SMTPs
     		return $_RCPT_list;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Returns an array of addresses for a specific type; TO, CC or BCC
     	 *
    @@ -1125,6 +1134,7 @@ class SMTPs
     	 */
     	function get_email_list($_which = null)
     	{
    +        // phpcs:enable
     		// We need to know which address segment to pull
     		if ( $_which )
     		{
    @@ -1165,7 +1175,6 @@ class SMTPs
     			$this->_setErr(102, 'eMail type not defined.');
     			return false;
     		}
    -
     	}
     
     	/**
    @@ -1301,7 +1310,7 @@ class SMTPs
     			// References is kept in response and Message-ID is returned into In-Reply-To:
     			$_header .= 'Message-ID: <' . time() . '.SMTPs-dolibarr-'.$trackid.'@' . $host . ">\r\n";
     			$_header .= 'References: <' . time() . '.SMTPs-dolibarr-'.$trackid.'@' . $host . ">\r\n";
    -			$_header .= 'X-Dolibarr-TRACKID: ' . $trackid . "\r\n";
    +			$_header .= 'X-Dolibarr-TRACKID: ' . $trackid . '@' . $host . "\r\n";
     		}
     		else
     		{
    @@ -1650,7 +1659,7 @@ class SMTPs
     	 * @param 	integer 	$_value 	Message Priority
     	 * @return 	void
     	 */
    -	function setPriority ( $_value = 3 )
    +	function setPriority( $_value = 3 )
     	{
     		if ( ( is_numeric($_value) ) &&
     		( ( $_value >= 0 ) && ( $_value <= 5 ) ) )
    @@ -1746,6 +1755,7 @@ class SMTPs
     		else if ($type == 'alternative') return $this->_smtpsAlternativeBoundary;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * This function has been modified as provided by SirSir to allow multiline responses when
     	 * using SMTP Extensions
    @@ -1756,6 +1766,7 @@ class SMTPs
     	 */
     	function server_parse($socket, $response)
     	{
    +        // phpcs:enable
     		/**
     		 * Returns constructed SELECT Object string or boolean upon failure
     		 * Default value is set at true
    @@ -1787,6 +1798,7 @@ class SMTPs
     		return $_retVal;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Send str
     	 *
    @@ -1797,6 +1809,7 @@ class SMTPs
     	 */
     	function socket_send_str( $_strSend, $_returnCode = null, $CRLF = "\r\n" )
     	{
    +        // phpcs:enable
     		if ($this->_debug) $this->log.=$_strSend;	// @CHANGE LDR for log
     		fputs($this->socket, $_strSend . $CRLF);
     		if ($this->_debug) $this->log.=' ('.$_returnCode.')' . $CRLF;
    @@ -1814,12 +1827,14 @@ class SMTPs
     	 * @param  int    $_errNum  Error Code Number
     	 * @param  string $_errMsg  Error Message
     	 * @return void
    -	 */
    -	function _setErr ( $_errNum, $_errMsg )
    -	{
    -		$this->_smtpsErrors[] = array( 'num' => $_errNum,
    -                                       'msg' => $_errMsg );
    -	}
    +     */
    +    function _setErr( $_errNum, $_errMsg )
    +    {
    +        $this->_smtpsErrors[] = array(
    +            'num' => $_errNum,
    +            'msg' => $_errMsg,
    +        );
    +    }
     
     	/**
     	 * Returns errors codes and messages for Class
    @@ -1840,8 +1855,6 @@ class SMTPs
     
     		return implode("\n", $_errMsg);
     	}
    -
    -
     }
     
     
    @@ -2049,4 +2062,3 @@ class SMTPs
      *  - basic shell with some commets
      *
      */
    -
    diff --git a/htdocs/core/class/stats.class.php b/htdocs/core/class/stats.class.php
    index dfb070aa5b9..1a58e14796a 100644
    --- a/htdocs/core/class/stats.class.php
    +++ b/htdocs/core/class/stats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (c) 2008-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012       Marcos García           <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php
    index 04867db0e7a..599bf25d33d 100644
    --- a/htdocs/core/class/translate.class.php
    +++ b/htdocs/core/class/translate.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001      Eric Seigne         <erics@rycks.com>
      * Copyright (C) 2004-2015 Destailleur Laurent <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin       <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -573,7 +573,11 @@ class Translate
                 //$newstr=$this->getLabelFromKey($db,$reg[1],'c_ordersource','code','label');
             }
     
    -        if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 2) dol_syslog(__METHOD__." missing translation for key '".$newstr."' in ".$_SERVER["PHP_SELF"], LOG_DEBUG);
    +        /* Disabled. There is too many cases where translation of $newstr is not defined is normal (like when output with setEventMessage an already translated string)
    +        if (! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 2)
    +        {
    +        	dol_syslog(__METHOD__." MAIN_FEATURES_LEVEL=DEVELOP: missing translation for key '".$newstr."' in ".$_SERVER["PHP_SELF"], LOG_DEBUG);
    +        }*/
     
             return $newstr;
     	}
    @@ -651,11 +655,12 @@ class Translate
     	 *  @param  string	$param2     chaine de param2
     	 *  @param  string	$param3     chaine de param3
     	 *  @param  string	$param4     chaine de param4
    +	 *  @param  string	$param5     chaine de param5
     	 *  @return string      		Translated string (encoded into UTF8)
     	 */
    -	function transnoentities($key, $param1='', $param2='', $param3='', $param4='')
    +	function transnoentities($key, $param1='', $param2='', $param3='', $param4='', $param5='')
     	{
    -		return $this->convToOutputCharset($this->transnoentitiesnoconv($key, $param1, $param2, $param3, $param4));
    +		return $this->convToOutputCharset($this->transnoentitiesnoconv($key, $param1, $param2, $param3, $param4, $param5));
     	}
     
     
    @@ -671,9 +676,10 @@ class Translate
     	 *  @param  string	$param2     chaine de param2
     	 *  @param  string	$param3     chaine de param3
     	 *  @param  string	$param4     chaine de param4
    +	 *  @param  string	$param5     chaine de param5
     	 *  @return string      		Translated string
     	 */
    -	function transnoentitiesnoconv($key, $param1='', $param2='', $param3='', $param4='')
    +	function transnoentitiesnoconv($key, $param1='', $param2='', $param3='', $param4='', $param5='')
     	{
     		global $conf;
     
    @@ -696,7 +702,7 @@ class Translate
                 if (! preg_match('/^Format/',$key))
                 {
                 	//print $str;
    -           		$str=sprintf($str,$param1,$param2,$param3,$param4);	// Replace %s and %d except for FormatXXX strings.
    +           		$str=sprintf($str, $param1, $param2, $param3, $param4, $param5);	// Replace %s and %d except for FormatXXX strings.
                 }
     
                 return $str;
    @@ -752,6 +758,7 @@ class Translate
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of all available languages
     	 *
    @@ -762,6 +769,7 @@ class Translate
     	 */
     	function get_available_languages($langdir=DOL_DOCUMENT_ROOT,$maxlength=0,$usecode=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		// We scan directory langs to detect available languages
    @@ -791,6 +799,7 @@ class Translate
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return if a filename $filename exists for current language (or alternate language)
     	 *
    @@ -800,6 +809,7 @@ class Translate
     	 */
     	function file_exists($filename,$searchalt=0)
     	{
    +        // phpcs:enable
     		// Test si fichier dans repertoire de la langue
     		foreach($this->dir as $searchdir)
     		{
    @@ -1014,6 +1024,7 @@ class Translate
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return an array with content of all loaded translation keys (found into this->tab_translate) so
     	 * we get a substitution array we can use for substitutions (for mail or ODT generation for example)
    @@ -1022,6 +1033,7 @@ class Translate
     	 */
     	function get_translations_for_substitutions()
     	{
    +        // phpcs:enable
     		$substitutionarray = array();
     
     		foreach($this->tab_translate as $code => $label) {
    diff --git a/htdocs/core/class/utils.class.php b/htdocs/core/class/utils.class.php
    index ec95063906c..9061539a804 100644
    --- a/htdocs/core/class/utils.class.php
    +++ b/htdocs/core/class/utils.class.php
    @@ -27,7 +27,10 @@
      */
     class Utils
     {
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	var $output;   // Used by Cron method to return message
     	var $result;   // Used by Cron method to return data
    @@ -210,7 +213,7 @@ class Utils
     		if ($file == 'auto')
     		{
     			$prefix='dump';
    -			$ext='.sql';
    +			$ext='sql';
     			if (in_array($type, array('mysql', 'mysqli')))  { $prefix='mysqldump'; $ext='sql'; }
     			//if ($label == 'PostgreSQL') { $prefix='pg_dump'; $ext='dump'; }
     			if (in_array($type, array('pgsql'))) { $prefix='pg_dump'; $ext='sql'; }
    @@ -281,8 +284,9 @@ class Utils
     			}
     
     			$errormsg='';
    +			$handle = '';
     
    -			// Debut appel methode execution
    +			// Start call method to execute dump
     			$fullcommandcrypted=$command." ".$paramcrypted." 2>&1";
     			$fullcommandclear=$command." ".$paramclear." 2>&1";
     			if ($compression == 'none') $handle = fopen($outputfile, 'w');
    @@ -339,7 +343,6 @@ class Utils
     						elseif (preg_match('/'.preg_quote('SET SQL_NOTES=@OLD_SQL_NOTES').'/i',$read)) $ok=1;
     					}
     					pclose($handlein);
    -
     				}
     
     
    @@ -374,7 +377,7 @@ class Utils
     				{
     					// Renommer fichier sortie en fichier erreur
     					//print "$outputfile -> $outputerror";
    -					@dol_delete_file($outputerror,1);
    +					@dol_delete_file($outputerror, 1, 0, 0, null, false, 0);
     					@rename($outputfile,$outputerror);
     					// Si safe_mode on et command hors du parametre exec, on a un fichier out vide donc errormsg vide
     					if (! $errormsg)
    @@ -406,13 +409,13 @@ class Utils
     
     			if ($compression == 'gz' or $compression == 'bz')
     			{
    -				$this->backup_tables($outputfiletemp);
    +				$this->backupTables($outputfiletemp);
     				dol_compress_file($outputfiletemp, $outputfile, $compression);
     				unlink($outputfiletemp);
     			}
     			else
     			{
    -				$this->backup_tables($outputfile);
    +				$this->backupTables($outputfile);
     			}
     
     			$this->output = "";
    @@ -481,7 +484,7 @@ class Utils
     			{
     				$i++;
     				if ($i <= $keeplastnfiles) continue;
    -				dol_delete_file($val['fullname']);
    +				dol_delete_file($val['fullname'], 0, 0, 0, null, false, 0);
     			}
     		}
     
    @@ -708,12 +711,14 @@ class Utils
     	}
     
     	/**
    -	 * This saves syslog files and compresses older ones
    -	 * Used from cronjob
    +	 * This saves syslog files and compresses older ones.
    +	 * Nb of archive to keep is defined into $conf->global->SYSLOG_FILE_SAVES
    +	 * CAN BE A CRON TASK
     	 *
     	 * @return	int						0 if OK, < 0 if KO
     	 */
    -	function compressSyslogs() {
    +    function compressSyslogs()
    +    {
     		global $conf;
     
     		if(empty($conf->loghandlers['mod_syslog_file'])) { // File Syslog disabled
    @@ -746,50 +751,52 @@ class Utils
     			$logname = $file['name'];
     			$logpath = $file['path'];
     
    -			// Handle already compressed files to rename them and add +1
    +			if (dol_is_file($logpath.'/'.$logname) && dol_filesize($logpath.'/'.$logname) > 0)	// If log file exists and is not empty
    +			{
    +				// Handle already compressed files to rename them and add +1
     
    -			$filter = '^'.preg_quote($logname, '/').'\.([0-9]+)\.gz$';
    +				$filter = '^'.preg_quote($logname, '/').'\.([0-9]+)\.gz$';
     
    -			$gzfilestmp = dol_dir_list($logpath, 'files', 0, $filter);
    -			$gzfiles = array();
    +				$gzfilestmp = dol_dir_list($logpath, 'files', 0, $filter);
    +				$gzfiles = array();
     
    -			foreach($gzfilestmp as $gzfile) {
    -				$tabmatches = array();
    -				preg_match('/'.$filter.'/i', $gzfile['name'], $tabmatches);
    +				foreach($gzfilestmp as $gzfile) {
    +					$tabmatches = array();
    +					preg_match('/'.$filter.'/i', $gzfile['name'], $tabmatches);
     
    -				$numsave = intval($tabmatches[1]);
    +					$numsave = intval($tabmatches[1]);
     
    -				$gzfiles[$numsave] = $gzfile;
    -			}
    -
    -			krsort($gzfiles, SORT_NUMERIC);
    -
    -			foreach($gzfiles as $numsave => $dummy) {
    -				if (dol_is_file($logpath.'/'.$logname.'.'.($numsave+1).'.gz')) {
    -					return -2;
    +					$gzfiles[$numsave] = $gzfile;
     				}
     
    -				if($numsave >= $nbSaves) {
    -					dol_delete_file($logpath.'/'.$logname.'.'.$numsave.'.gz');
    -				} else {
    -					dol_move($logpath.'/'.$logname.'.'.$numsave.'.gz', $logpath.'/'.$logname.'.'.($numsave+1).'.gz', 0, 1, 0, 0);
    -				}
    -			}
    +				krsort($gzfiles, SORT_NUMERIC);
     
    -			// Compress last save
    -			if (dol_is_file($logpath.'/'.$logname.'.1')) {
    -				if($nbSaves > 1) {
    -					$gzfilehandle = gzopen($logpath.'/'.$logname.'.2.gz', 'wb9');
    +				foreach($gzfiles as $numsave => $dummy) {
    +					if (dol_is_file($logpath.'/'.$logname.'.'.($numsave+1).'.gz')) {
    +						return -2;
    +					}
    +
    +					if($numsave >= $nbSaves) {
    +						dol_delete_file($logpath.'/'.$logname.'.'.$numsave.'.gz', 0, 0, 0, null, false, 0);
    +					} else {
    +						dol_move($logpath.'/'.$logname.'.'.$numsave.'.gz', $logpath.'/'.$logname.'.'.($numsave+1).'.gz', 0, 1, 0, 0);
    +					}
    +				}
    +
    +				// Compress current file and recreate it
    +
    +				if ($nbSaves > 0) {			// If $nbSaves is 1, we keep 1 archive .gz file, If 2, we keep 2 .gz files
    +					$gzfilehandle = gzopen($logpath.'/'.$logname.'.1.gz', 'wb9');
     
     					if (empty($gzfilehandle)) {
    -						$this->error = 'Failted to open file '.$logpath.'/'.$logname.'.2.gz';
    +						$this->error = 'Failted to open file '.$logpath.'/'.$logname.'.1.gz';
     						return -3;
     					}
     
    -					$sourcehandle = fopen($logpath.'/'.$logname.'.1', 'r');
    +					$sourcehandle = fopen($logpath.'/'.$logname, 'r');
     
     					if (empty($sourcehandle)) {
    -						$this->error = 'Failed to open file '.$logpath.'/'.$logname.'.1';
    +						$this->error = 'Failed to open file '.$logpath.'/'.$logname;
     						return -4;
     					}
     
    @@ -799,19 +806,18 @@ class Utils
     
     					fclose($sourcehandle);
     					gzclose($gzfilehandle);
    -				} else {
    -					dol_delete_file($logpath.'/'.$logname.'.1');
    -				}
    -			}
     
    -			// Compress current file et recreate it
    -
    -			if (dol_is_file($logpath.'/'.$logname)) {
    -				if (dol_move($logpath.'/'.$logname, $logpath.'/'.$logname.'.1', 0, 1, 0, 0))
    -				{
    -					$newlog = fopen($logpath.'/'.$logname, 'a+');
    -					fclose($newlog);
    +					@chmod($logpath.'/'.$logname.'.1.gz', octdec(empty($conf->global->MAIN_UMASK)?'0664':$conf->global->MAIN_UMASK));
     				}
    +
    +				dol_delete_file($logpath.'/'.$logname, 0, 0, 0, null, false, 0);
    +
    +				// Create empty file
    +				$newlog = fopen($logpath.'/'.$logname, 'a+');
    +				fclose($newlog);
    +
    +				//var_dump($logpath.'/'.$logname." - ".octdec(empty($conf->global->MAIN_UMASK)?'0664':$conf->global->MAIN_UMASK));
    +				@chmod($logpath.'/'.$logname, octdec(empty($conf->global->MAIN_UMASK)?'0664':$conf->global->MAIN_UMASK));
     			}
     		}
     
    @@ -829,7 +835,7 @@ class Utils
     	 *	@param	string	$tables			Table name or '*' for all
     	 *	@return	int						<0 if KO, >0 if OK
     	 */
    -	function backup_tables($outputfile, $tables='*')
    +	function backupTables($outputfile, $tables='*')
     	{
     		global $db, $langs;
     		global $errormsg;
    @@ -989,4 +995,4 @@ class Utils
     
     		return 1;
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/core/class/vcard.class.php b/htdocs/core/class/vcard.class.php
    index 8bdeb3e43b7..c3dc5547d88 100644
    --- a/htdocs/core/class/vcard.class.php
    +++ b/htdocs/core/class/vcard.class.php
    @@ -111,12 +111,13 @@ class vCard
          *	mise en forme de la photo
          *  warning NON TESTE !
          *
    -     *	@param	string	$type			Type
    -     *	@param	string	$photo			Photo
    -     *	@return	void
    -	 */
    +     *  @param  string  $type			Type
    +     *  @param  string  $photo			Photo
    +     *  @return	void
    +     */
         function setPhoto($type, $photo)
    -    { // $type = "GIF" | "JPEG"
    +    {
    +        // $type = "GIF" | "JPEG"
             $this->properties["PHOTO;TYPE=$type;ENCODING=BASE64"] = base64_encode($photo);
         }
     
    @@ -155,7 +156,7 @@ class vCard
          *	@return	void
          */
         function setBirthday($date)
    -    { 
    +    {
             // $date format is YYYY-MM-DD - RFC 2425 and RFC 2426
             $this->properties["BDAY"] = dol_print_date($date, 'dayrfc');
         }
    @@ -200,7 +201,8 @@ class vCard
          *	@param	string	$type			Type
          *	@return	void
          */
    -    function setLabel($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL") {
    +    function setLabel($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL")
    +    {
             $label = "";
             if ($postoffice!="") $label.= "$postoffice\r\n";
             if ($extended!="") $label.= "$extended\r\n";
    @@ -328,5 +330,4 @@ class vCard
         {
             return $this->filename;
         }
    -
     }
    diff --git a/htdocs/core/class/workboardresponse.class.php b/htdocs/core/class/workboardresponse.class.php
    index 13de74281ff..35449693599 100644
    --- a/htdocs/core/class/workboardresponse.class.php
    +++ b/htdocs/core/class/workboardresponse.class.php
    @@ -1,6 +1,7 @@
     <?php
     
     /* Copyright (C) 2015   Marcos García   <marcosgdf@gmail.com>
    + * Copyright (C) 2018   Charlene Benke  <charlie@patas-monkey.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -66,4 +67,9 @@ class WorkboardResponse
     	 */
     	public $nbtodolate = 0;
     
    -}
    \ No newline at end of file
    +	/**
    +	 * total price of items
    +	 * @var int
    +	 */
    +	public $total = 0;
    +}
    diff --git a/htdocs/core/datepicker.php b/htdocs/core/datepicker.php
    index 074760e88ca..6d0cd48ccfe 100644
    --- a/htdocs/core/datepicker.php
    +++ b/htdocs/core/datepicker.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) phpBSM
      * Copyright (C) 2005-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014	   Juanjo Menent        <jmenent@2byte.es>
      *
      * This file is a modified version of datepicker.php from phpBSM to fix some
    @@ -41,8 +41,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
     if (GETPOST('lang', 'aZ09')) $langs->setDefaultLang(GETPOST('lang', 'aZ09'));	// If language was forced on URL by the main.inc.php
     
    -$langs->load("main");
    -$langs->load("agenda");
    +// Load translation files required by the page
    +$langs->loadLangs(array("main","agenda"));
     
     $right=($langs->trans("DIRECTION")=='rtl'?'left':'right');
     $left=($langs->trans("DIRECTION")=='rtl'?'right':'left');
    @@ -66,18 +66,19 @@ else
     }
     
     // Define tradMonths javascript array (we define this in datapicker AND in parent page to avoid errors with IE8)
    -$tradTemp=array($langs->trans("January"),
    -$langs->trans("February"),
    -$langs->trans("March"),
    -$langs->trans("April"),
    -$langs->trans("May"),
    -$langs->trans("June"),
    -$langs->trans("July"),
    -$langs->trans("August"),
    -$langs->trans("September"),
    -$langs->trans("October"),
    -$langs->trans("November"),
    -$langs->trans("December")
    +$tradTemp=array(
    +    $langs->trans("January"),
    +    $langs->trans("February"),
    +    $langs->trans("March"),
    +    $langs->trans("April"),
    +    $langs->trans("May"),
    +    $langs->trans("June"),
    +    $langs->trans("July"),
    +    $langs->trans("August"),
    +    $langs->trans("September"),
    +    $langs->trans("October"),
    +    $langs->trans("November"),
    +    $langs->trans("December")
     );
     print '<script type="text/javascript">';
     print 'var tradMonths = [';
    @@ -96,25 +97,22 @@ $qualified=true;
     
     if (! isset($_GET["sd"])) $_GET["sd"]="00000000";
     
    -if (! isset($_GET["m"])) $qualified=false;
    -if (! isset($_GET["y"])) $qualified=false;
    +if (! isset($_GET["m"]) || ! isset($_GET["y"])) $qualified=false;
     if (isset($_GET["m"]) && isset($_GET["y"]))
     {
    -	if ($_GET["m"] < 1)    $qualified=false;
    -	if ($_GET["m"] > 12)   $qualified=false;
    -	if ($_GET["y"] < 0)    $qualified=false;
    -	if ($_GET["y"] > 9999) $qualified=false;
    +	if ($_GET["m"] < 1 || $_GET["m"] > 12) $qualified=false;
    +	if ($_GET["y"] < 0 || $_GET["y"] > 9999) $qualified=false;
     }
     
     // If parameters provided, we show calendar
     if ($qualified)
     {
     	//print $_GET["cm"].",".$_GET["sd"].",".$_GET["m"].",".$_GET["y"];exit;
    -	displayBox(GETPOST("sd",'alpha'),GETPOST("m",'int'),GETPOST("y",'int'));
    +	displayBox(GETPOST("sd",'alpha'), GETPOST("m",'int'), GETPOST("y",'int'));
     }
     else
     {
    -	dol_print_error('','ErrorBadParameters');
    +	dol_print_error('', 'ErrorBadParameters');
     }
     
     
    @@ -195,9 +193,7 @@ function displayBox($selectedDate,$month,$year)
     	{
     		echo '<td width="', (int) (($i+1)*100/7) - (int) ($i*100/7), '%">', $langs->trans($day_names[($i + $startday) % 7]), '</td>', "\n";
     	}
    -	?>
    -	</tr>
    -	<?php
    +	print '</tr>';
     	//print "x ".$thedate." y";			// $thedate = first day of month
     	$firstdate=dol_getdate($thedate);
     	//var_dump($firstdateofweek);
    @@ -210,7 +206,7 @@ function displayBox($selectedDate,$month,$year)
     		//print_r($mydate);
     		if ($mydate < $firstdate)	// At first run
     		{
    -			echo "<TR class=\"dpWeek\">";
    +			echo "<tr class=\"dpWeek\">";
     			//echo $conf->global->MAIN_START_WEEK.' '.$firstdate["wday"].' '.$startday;
     			$cols=0;
     			for ($i = 0; $i < 7; $i++)
    @@ -221,7 +217,7 @@ function displayBox($selectedDate,$month,$year)
     					$mydate = $firstdate;
     					break;
     				}
    -				echo "<TD>&nbsp;</TD>";
    +				echo "<td>&nbsp;</td>";
     				$cols++;
     			}
     		}
    @@ -229,7 +225,7 @@ function displayBox($selectedDate,$month,$year)
     		{
     			if ($mydate["wday"] == $startday)
     			{
    -				echo "<TR class=\"dpWeek\">";
    +				echo "<tr class=\"dpWeek\">";
     				$cols=0;
     			}
     		}
    @@ -245,17 +241,17 @@ function displayBox($selectedDate,$month,$year)
     		}
     
     		// Sur click dans calendrier, appelle fonction dpClickDay
    -		echo "<TD class=\"".$dayclass."\"";
    +		echo "<td class=\"".$dayclass."\"";
     		echo " onMouseOver=\"dpHighlightDay(".$mydate["year"].",parseInt('".dol_print_date($thedate,"%m")."',10),".$mydate["mday"].",tradMonths)\"";
     		echo " onClick=\"dpClickDay(".$mydate["year"].",parseInt('".dol_print_date($thedate,"%m")."',10),".$mydate["mday"].",'".$langs->trans("FormatDateShortJavaInput")."')\"";
    -		echo ">".sprintf("%02s",$mydate["mday"])."</TD>";
    +		echo ">".sprintf("%02s",$mydate["mday"])."</td>";
     		$cols++;
     
     		if (($mydate["wday"] + 1) % 7 == $startday) echo "</TR>\n";
     
     		//$thedate=strtotime("tomorrow",$thedate);
     		$day++;
    -		$thedate=dol_mktime(12,0,0,$month,$day,$year);
    +		$thedate=dol_mktime(12, 0, 0, $month, $day, $year);
     		if ($thedate == '')
     		{
     			$stoploop=1;
    @@ -269,8 +265,8 @@ function displayBox($selectedDate,$month,$year)
     
     	if ($cols < 7)
     	{
    -		for($i=6; $i>=$cols; $i--) echo "<TD>&nbsp;</TD>";
    -		echo "</TR>\n";
    +		for($i=6; $i>=$cols; $i--) echo "<td>&nbsp;</td>";
    +		echo "</tr>\n";
     	}
     	?>
     	<tr>
    diff --git a/htdocs/core/db/Database.interface.php b/htdocs/core/db/Database.interface.php
    index 65699585f4a..54b950fdee7 100644
    --- a/htdocs/core/db/Database.interface.php
    +++ b/htdocs/core/db/Database.interface.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2002-2007	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2006		Andre Cianfarani		<acianfa@free.fr>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2014-2015  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -35,13 +35,15 @@ interface Database
     	 */
     	function ifsql($test, $resok, $resko);
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return datas as an array
     	 *
     	 * @param   resource $resultset Resultset of request
     	 * @return  array                    Array
     	 */
    -	function fetch_row($resultset);
    +    function fetch_row($resultset);
    +    // phpcs:enable
     
     	/**
     	 * Convert (by PHP) a GM Timestamp date into a string date with PHP server TZ to insert into a date field.
    @@ -66,6 +68,7 @@ interface Database
     	 */
     	function begin();
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Create a new database
     	 * Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated
    @@ -77,7 +80,8 @@ interface Database
     	 * @param   string 		$owner 			Username of database owner
     	 * @return  resource                	resource defined if OK, null if KO
     	 */
    -	function DDLCreateDb($database, $charset = '', $collation = '', $owner = '');
    +    function DDLCreateDb($database, $charset = '', $collation = '', $owner = '');
    +    // phpcs:enable
     
     	/**
     	 * Return version of database server into an array
    @@ -95,6 +99,7 @@ interface Database
     	 */
     	static function convertSQLFromMysql($line, $type = 'ddl');
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE
     	 *
    @@ -102,7 +107,8 @@ interface Database
     	 * @return 	int            Nombre de lignes
     	 * @see    	num_rows
     	 */
    -	function affected_rows($resultset);
    +    function affected_rows($resultset);
    +    // phpcs:enable
     
     	/**
     	 * Return description of last error
    @@ -111,6 +117,7 @@ interface Database
     	 */
     	function error();
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  List tables into a database
     	 *
    @@ -118,7 +125,8 @@ interface Database
     	 *  @param	string		$table		Nmae of table filter ('xxx%')
     	 *  @return	array					List of tables in an array
     	 */
    -	function DDLListTables($database, $table = '');
    +    function DDLListTables($database, $table = '');
    +    // phpcs:enable
     
     	/**
     	 * Return last request executed with query()
    @@ -144,13 +152,15 @@ interface Database
     	 */
     	function decrypt($value);
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return datas as an array
     	 *
     	 * @param   resource $resultset Resultset of request
     	 * @return  array                    Array
     	 */
    -	function fetch_array($resultset);
    +    function fetch_array($resultset);
    +    // phpcs:enable
     
     	/**
     	 * Return last error label
    @@ -167,6 +177,7 @@ interface Database
     	 */
     	function escape($stringtoencode);
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Get last ID after an insert INSERT
     	 *
    @@ -174,7 +185,8 @@ interface Database
     	 * @param   string 	$fieldid 	Field name
     	 * @return  int                	Id of row
     	 */
    -	function last_insert_id($tab, $fieldid = 'rowid');
    +    function last_insert_id($tab, $fieldid = 'rowid');
    +    // phpcs:enable
     
     	/**
     	 *    Return full path of restore program
    @@ -196,7 +208,7 @@ interface Database
     	 *
     	 * @param   string $query SQL query string
     	 * @param   int $usesavepoint 0=Default mode, 1=Run a savepoint before and a rollback to savepoint if error (this allow to have some request with errors inside global transactions).
    -	 *                                    Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints.
    +	 *                            Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints.
     	 * @param   string $type Type of SQL order ('ddl' for insert, update, select, delete or 'dml' for create, alter...)
     	 * @return  resource                Resultset of answer
     	 */
    @@ -247,6 +259,7 @@ interface Database
     	 */
     	function getDefaultCollationDatabase();
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return number of lines for result of a SELECT
     	 *
    @@ -254,7 +267,8 @@ interface Database
     	 * @return 	int                        Nb of lines
     	 * @see    	affected_rows
     	 */
    -	function num_rows($resultset);
    +    function num_rows($resultset);
    +    // phpcs:enable
     
     	/**
     	 * Return full path of dump program
    @@ -277,6 +291,7 @@ interface Database
     	 */
     	function errno();
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Create a table into database
     	 *
    @@ -289,15 +304,18 @@ interface Database
     	 * @param        array $keys 			Tableau des champs cles noms => valeur
     	 * @return       int                    <0 if KO, >=0 if OK
     	 */
    -	function DDLCreateTable($table, $fields, $primary_key, $type, $unique_keys = null, $fulltext_keys = null, $keys = null);
    +    function DDLCreateTable($table, $fields, $primary_key, $type, $unique_keys = null, $fulltext_keys = null, $keys = null);
    +    // phpcs:enable
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Drop a table into database
     	 *
     	 * @param        string $table 			Name of table
     	 * @return       int                    <0 if KO, >=0 if OK
     	 */
    -	function DDLDropTable($table);
    +    function DDLDropTable($table);
    +    // phpcs:enable
     
     	/**
     	 * Return list of available charset that can be used to store data in database
    @@ -306,6 +324,7 @@ interface Database
     	 */
     	function getListOfCharacterSet();
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Create a new field into table
     	 *
    @@ -315,8 +334,10 @@ interface Database
     	 * @param    string $field_position 	Optionnel ex.: "after champtruc"
     	 * @return   int                        <0 if KO, >0 if OK
     	 */
    -	function DDLAddField($table, $field_name, $field_desc, $field_position = "");
    +    function DDLAddField($table, $field_name, $field_desc, $field_position = "");
    +    // phpcs:enable
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Drop a field from table
     	 *
    @@ -324,8 +345,10 @@ interface Database
     	 * @param    string $field_name 		Name of field to drop
     	 * @return   int                        <0 if KO, >0 if OK
     	 */
    -	function DDLDropField($table, $field_name);
    +    function DDLDropField($table, $field_name);
    +    // phpcs:enable
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Update format of a field into a table
     	 *
    @@ -334,7 +357,8 @@ interface Database
     	 * @param    string 	$field_desc 	Array with description of field format
     	 * @return   int                        <0 if KO, >0 if OK
     	 */
    -	function DDLUpdateField($table, $field_name, $field_desc);
    +    function DDLUpdateField($table, $field_name, $field_desc);
    +    // phpcs:enable
     
     	/**
     	 * Return list of available collation that can be used for database
    @@ -343,6 +367,7 @@ interface Database
     	 */
     	function getListOfCollation();
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return a pointer of line with description of a table or field
     	 *
    @@ -350,7 +375,8 @@ interface Database
     	 * @param    string 	$field 			Optionnel : Name of field if we want description of field
     	 * @return   resource            		Resource
     	 */
    -	function DDLDescTable($table, $field = "");
    +    function DDLDescTable($table, $field = "");
    +    // phpcs:enable
     
     	/**
     	 * Return version of database server
    @@ -366,6 +392,7 @@ interface Database
     	 */
     	function getDefaultCharacterSetDatabase();
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Create a user and privileges to connect to database (even if database does not exists yet)
     	 *
    @@ -380,7 +407,8 @@ interface Database
     		$dolibarr_main_db_user,
     		$dolibarr_main_db_pass,
     		$dolibarr_main_db_name
    -	);
    +    );
    +    // phpcs:enable
     
     	/**
     	 * Convert (by PHP) a PHP server TZ string date into a Timestamps date (GMT if gm=true)
    @@ -411,13 +439,15 @@ interface Database
     	 */
     	function commit($log = '');
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * List information of columns into a table.
     	 *
     	 * @param   string 			$table 			Name of table
     	 * @return  array                			Array with inforation on table
     	 */
    -	function DDLInfoTable($table);
    +    function DDLInfoTable($table);
    +    // phpcs:enable
     
     	/**
     	 * Free last resultset used.
    @@ -442,27 +472,32 @@ interface Database
     	 */
     	function lastqueryerror();
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return connexion ID
     	 *
     	 * @return  string      Id connexion
     	 */
    -	function DDLGetConnectId();
    +    function DDLGetConnectId();
    +    // phpcs:enable
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Renvoie la ligne courante (comme un objet) pour le curseur resultset
     	 *
     	 * @param   resource $resultset Curseur de la requete voulue
     	 * @return  Object                    Object result line or false if KO or end of cursor
     	 */
    -	function fetch_object($resultset);
    +    function fetch_object($resultset);
    +    // phpcs:enable
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Select a database
     	 *
     	 * @param	string $database Name of database
     	 * @return  boolean            true if OK, false if KO
     	 */
    -	function select_db($database);
    -
    +    function select_db($database);
    +    // phpcs:enable
     }
    diff --git a/htdocs/core/db/mssql.class.php b/htdocs/core/db/mssql.class.php
    index 4734c3364b5..f9e982961c9 100644
    --- a/htdocs/core/db/mssql.class.php
    +++ b/htdocs/core/db/mssql.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007      Simon Desee          <simon@dedisoft.com>
      * Copyright (C) 2015       Cedric GROSS            <c.gross@kreiz-it.fr>
      *
    @@ -139,6 +139,7 @@ class DoliDBMssql extends DoliDB
     		return $line;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Select a database
     	 *
    @@ -147,6 +148,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function select_db($database)
     	{
    +        // phpcs:enable
     		return @mssql_select_db($database, $this->db);
     	}
     
    @@ -372,7 +374,6 @@ class DoliDBMssql extends DoliDB
                         $query="ALTER TABLE [".$matches[1]."] ADD CONSTRAINT [".$matches[2]."] PRIMARY KEY CLUSTERED (".$matches[3].")";
         		    }
         		}
    -
     		}
     
     		if ($type=="auto" || $type='ddl')
    @@ -414,7 +415,6 @@ class DoliDBMssql extends DoliDB
         	       $sql='SET IDENTITY_INSERT ['.trim($matches[1]).'] ON;';
         	       @mssql_query($sql, $this->db);
         	       $post_query='SET IDENTITY_INSERT ['.trim($matches[1]).'] OFF;';
    -
         	   }
     		}
     		//print "<!--".$query."-->";
    @@ -459,6 +459,7 @@ class DoliDBMssql extends DoliDB
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoie la ligne courante (comme un objet) pour le curseur resultset
     	 *
    @@ -467,11 +468,13 @@ class DoliDBMssql extends DoliDB
     	 */
     	function fetch_object($resultset)
     	{
    +        // phpcs:enable
     		// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		return mssql_fetch_object($resultset);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *	Return datas as an array
          *
    @@ -480,12 +483,14 @@ class DoliDBMssql extends DoliDB
     	 */
     	function fetch_array($resultset)
     	{
    +        // phpcs:enable
     		// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		return mssql_fetch_array($resultset);
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *	Return datas as an array
          *
    @@ -494,11 +499,13 @@ class DoliDBMssql extends DoliDB
     	 */
     	function fetch_row($resultset)
     	{
    +        // phpcs:enable
     		// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		return @mssql_fetch_row($resultset);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *	Return number of lines for result of a SELECT
          *
    @@ -508,11 +515,13 @@ class DoliDBMssql extends DoliDB
     	 */
     	function num_rows($resultset)
     	{
    +        // phpcs:enable
     		// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		return mssql_num_rows($resultset);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE
     	 *
    @@ -522,6 +531,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function affected_rows($resultset)
     	{
    +        // phpcs:enable
     		// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		// mssql necessite un link de base pour cette fonction contrairement
    @@ -639,6 +649,7 @@ class DoliDBMssql extends DoliDB
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Get last ID after an insert INSERT
     	 *
    @@ -648,6 +659,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function last_insert_id($tab,$fieldid='rowid')
     	{
    +        // phpcs:enable
     		$res = $this->query("SELECT @@IDENTITY as id");
     		if ($res && $data = $this->fetch_array($res))
     		{
    @@ -702,6 +714,7 @@ class DoliDBMssql extends DoliDB
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return connexion ID
     	 *
    @@ -709,6 +722,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLGetConnectId()
     	{
    +        // phpcs:enable
     		$resql=$this->query('SELECT CONNECTION_ID()');
     		if ($resql)
     		{
    @@ -718,6 +732,7 @@ class DoliDBMssql extends DoliDB
     		else return '?';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a new database
     	 *	Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated
    @@ -731,6 +746,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLCreateDb($database,$charset='',$collation='',$owner='')
     	{
    +        // phpcs:enable
             /*if (empty($charset))   $charset=$this->forcecharset;
             if (empty($collation)) $collation=$this->forcecollate;
             */
    @@ -754,6 +770,7 @@ class DoliDBMssql extends DoliDB
     	    return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  List tables into a database
     	 *
    @@ -763,10 +780,12 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLListTables($database,$table='')
     	{
    +        // phpcs:enable
     		$this->_results = mssql_list_tables($database, $this->db);
     		return $this->_results;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	List information of columns into a table.
     	 *
    @@ -775,6 +794,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLInfoTable($table)
     	{
    +        // phpcs:enable
     
     		// FIXME: Dummy method
     		// TODO: Implement
    @@ -784,6 +804,7 @@ class DoliDBMssql extends DoliDB
     		return $infotables;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a table into database
     	 *
    @@ -798,6 +819,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null)
     	{
    +        // phpcs:enable
     		// FIXME: $fulltext_keys parameter is unused
     
     		// cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra
    @@ -863,6 +885,7 @@ class DoliDBMssql extends DoliDB
     		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Drop a table into database
     	 *
    @@ -871,6 +894,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLDropTable($table)
     	{
    +        // phpcs:enable
     		$sql = "DROP TABLE ".$table;
     
     		if (! $this->query($sql))
    @@ -879,6 +903,7 @@ class DoliDBMssql extends DoliDB
     			return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return a pointer of line with description of a table or field
     	 *
    @@ -888,6 +913,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLDescTable($table,$field="")
     	{
    +        // phpcs:enable
     		$sql="DESC ".$table." ".$field;
     
     		dol_syslog($sql);
    @@ -895,6 +921,7 @@ class DoliDBMssql extends DoliDB
     		return $this->_results;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a new field into table
     	 *
    @@ -906,6 +933,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLAddField($table,$field_name,$field_desc,$field_position="")
     	{
    +        // phpcs:enable
     		// cles recherchees dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
     		// ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
     		$sql= "ALTER TABLE ".$table." ADD ".$field_name." ";
    @@ -931,6 +959,7 @@ class DoliDBMssql extends DoliDB
     		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Update format of a field into a table
     	 *
    @@ -941,6 +970,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLUpdateField($table,$field_name,$field_desc)
     	{
    +        // phpcs:enable
     		$sql = "ALTER TABLE ".$table;
     		$sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type'];
     		if ($field_desc['type'] == 'tinyint' || $field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') {
    @@ -954,6 +984,7 @@ class DoliDBMssql extends DoliDB
     		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Drop a field from table
     	 *
    @@ -963,6 +994,7 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLDropField($table,$field_name)
     	{
    +        // phpcs:enable
     		$sql= "ALTER TABLE ".$table." DROP COLUMN `".$field_name."`";
     		dol_syslog($sql,LOG_DEBUG);
     		if (! $this->query($sql))
    @@ -973,6 +1005,7 @@ class DoliDBMssql extends DoliDB
     		else return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Create a user and privileges to connect to database (even if database does not exists yet)
     	 *
    @@ -984,7 +1017,8 @@ class DoliDBMssql extends DoliDB
     	 */
     	function DDLCreateUser($dolibarr_main_db_host,$dolibarr_main_db_user,$dolibarr_main_db_pass,$dolibarr_main_db_name)
     	{
    -	    $sql = "CREATE LOGIN ".$this->EscapeFieldName($dolibarr_main_db_user)." WITH PASSWORD='$dolibarr_main_db_pass'";
    +        // phpcs:enable
    +        $sql = "CREATE LOGIN ".$this->EscapeFieldName($dolibarr_main_db_user)." WITH PASSWORD='$dolibarr_main_db_pass'";
             dol_syslog(get_class($this)."::DDLCreateUser", LOG_DEBUG);	// No sql to avoid password in log
             $resql=$this->query($sql);
             if (! $resql)
    @@ -1132,17 +1166,21 @@ class DoliDBMssql extends DoliDB
     		return array();
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Escape a field name according to escape's syntax
     	 *
     	 * @param      string $fieldname   Field's name to escape
     	 * @return     string              field's name escaped
     	 */
    -	function EscapeFieldName($fieldname) {
    +    function EscapeFieldName($fieldname)
    +    {
    +        // phpcs:enable
     	    return "[".$fieldname."]";
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Get information on field
     	 *
    @@ -1150,7 +1188,9 @@ class DoliDBMssql extends DoliDB
     	 * @param      mixed   $fields     String for one field or array of string for multiple field
     	 * @return false|object
     	 */
    -	function GetFieldInformation($table,$fields) {
    +    function GetFieldInformation($table,$fields)
    +    {
    +        // phpcs:enable
     	    $sql="SELECT * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='".$this->escape($table)."' AND COLUMN_NAME";
     	    if (is_array($fields))
     	    {
    @@ -1174,6 +1214,4 @@ class DoliDBMssql extends DoliDB
     
     	    return $result;
     	}
    -
     }
    -
    diff --git a/htdocs/core/db/mysqli.class.php b/htdocs/core/db/mysqli.class.php
    index 23c19542ae6..185ebe1a56f 100644
    --- a/htdocs/core/db/mysqli.class.php
    +++ b/htdocs/core/db/mysqli.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2002-2005	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2006		Andre Cianfarani		<acianfa@free.fr>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -167,16 +167,18 @@ class DoliDBMysqli extends DoliDB
             return $line;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *	Select a database
    +	 *  Select a database
     	 *
    -	 *	@param	    string	$database	Name of database
    -	 *	@return	    boolean  		    true if OK, false if KO
    +	 *  @param	    string	$database	Name of database
    +	 *  @return	    boolean  		    true if OK, false if KO
     	 */
         function select_db($database)
         {
    +        // phpcs:enable
             dol_syslog(get_class($this)."::select_db database=".$database, LOG_DEBUG);
    -	    return $this->db->select_db($database);
    +        return $this->db->select_db($database);
         }
     
     
    @@ -285,6 +287,7 @@ class DoliDBMysqli extends DoliDB
             return $ret;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Renvoie la ligne courante (comme un objet) pour le curseur resultset
          *
    @@ -293,12 +296,14 @@ class DoliDBMysqli extends DoliDB
          */
         function fetch_object($resultset)
         {
    +        // phpcs:enable
             // Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
             if (! is_object($resultset)) { $resultset=$this->_results; }
     		return $resultset->fetch_object();
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Return datas as an array
          *
    @@ -307,11 +312,13 @@ class DoliDBMysqli extends DoliDB
          */
         function fetch_array($resultset)
         {
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
             if (! is_object($resultset)) { $resultset=$this->_results; }
             return $resultset->fetch_array();
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Return datas as an array
          *
    @@ -320,6 +327,7 @@ class DoliDBMysqli extends DoliDB
          */
         function fetch_row($resultset)
         {
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
             if (! is_bool($resultset))
             {
    @@ -333,6 +341,7 @@ class DoliDBMysqli extends DoliDB
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Return number of lines for result of a SELECT
          *
    @@ -342,11 +351,13 @@ class DoliDBMysqli extends DoliDB
          */
         function num_rows($resultset)
         {
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
             if (! is_object($resultset)) { $resultset=$this->_results; }
             return $resultset->num_rows;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE
          *
    @@ -356,6 +367,7 @@ class DoliDBMysqli extends DoliDB
          */
         function affected_rows($resultset)
         {
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
             if (! is_object($resultset)) { $resultset=$this->_results; }
             // mysql necessite un link de base pour cette fonction contrairement
    @@ -456,6 +468,7 @@ class DoliDBMysqli extends DoliDB
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 * Get last ID after an insert INSERT
     	 *
    @@ -465,6 +478,7 @@ class DoliDBMysqli extends DoliDB
          */
         function last_insert_id($tab,$fieldid='rowid')
         {
    +        // phpcs:enable
             return $this->db->insert_id;
         }
     
    @@ -538,6 +552,7 @@ class DoliDBMysqli extends DoliDB
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 * Return connexion ID
     	 *
    @@ -545,6 +560,7 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLGetConnectId()
         {
    +        // phpcs:enable
             $resql=$this->query('SELECT CONNECTION_ID()');
             if ($resql)
             {
    @@ -554,8 +570,9 @@ class DoliDBMysqli extends DoliDB
             else return '?';
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -	 *	Create a new database
    +     *  Create a new database
     	 *	Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated
     	 *	We force to create database with charset this->forcecharset and collate this->forcecollate
     	 *
    @@ -567,6 +584,7 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLCreateDb($database,$charset='',$collation='',$owner='')
         {
    +        // phpcs:enable
             if (empty($charset))   $charset=$this->forcecharset;
             if (empty($collation)) $collation=$this->forcecollate;
     
    @@ -586,6 +604,7 @@ class DoliDBMysqli extends DoliDB
             return $ret;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *  List tables into a database
     	 *
    @@ -595,6 +614,7 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLListTables($database, $table='')
         {
    +        // phpcs:enable
             $listtables=array();
     
             $like = '';
    @@ -612,6 +632,7 @@ class DoliDBMysqli extends DoliDB
             return $listtables;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	List information of columns into a table.
     	 *
    @@ -620,6 +641,7 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLInfoTable($table)
         {
    +        // phpcs:enable
             $infotables=array();
     
             $sql="SHOW FULL COLUMNS FROM ".$table.";";
    @@ -636,6 +658,7 @@ class DoliDBMysqli extends DoliDB
             return $infotables;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Create a table into database
     	 *
    @@ -650,6 +673,7 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null)
         {
    +        // phpcs:enable
     	    // FIXME: $fulltext_keys parameter is unused
     
             // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra
    @@ -718,15 +742,17 @@ class DoliDBMysqli extends DoliDB
             return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     *	Drop a table into database
    +     *  Drop a table into database
          *
          *	@param	    string	$table 			Name of table
          *	@return	    int						<0 if KO, >=0 if OK
          */
         function DDLDropTable($table)
         {
    -    	$sql = "DROP TABLE ".$table;
    +        // phpcs:enable
    +        $sql = "DROP TABLE ".$table;
     
     		if (! $this->query($sql))
      			return -1;
    @@ -734,6 +760,7 @@ class DoliDBMysqli extends DoliDB
         		return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Return a pointer of line with description of a table or field
     	 *
    @@ -743,6 +770,7 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLDescTable($table,$field="")
         {
    +        // phpcs:enable
             $sql="DESC ".$table." ".$field;
     
             dol_syslog(get_class($this)."::DDLDescTable ".$sql,LOG_DEBUG);
    @@ -750,6 +778,7 @@ class DoliDBMysqli extends DoliDB
             return $this->_results;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Create a new field into table
     	 *
    @@ -761,6 +790,7 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLAddField($table,$field_name,$field_desc,$field_position="")
         {
    +        // phpcs:enable
             // cles recherchees dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
             // ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
             $sql= "ALTER TABLE ".$table." ADD ".$field_name." ";
    @@ -800,6 +830,7 @@ class DoliDBMysqli extends DoliDB
             return -1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Update format of a field into a table
     	 *
    @@ -810,6 +841,7 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLUpdateField($table,$field_name,$field_desc)
         {
    +        // phpcs:enable
             $sql = "ALTER TABLE ".$table;
             $sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type'];
             if ($field_desc['type'] == 'double' || $field_desc['type'] == 'tinyint' || $field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') {
    @@ -845,6 +877,7 @@ class DoliDBMysqli extends DoliDB
             return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Drop a field from table
     	 *
    @@ -854,16 +887,18 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLDropField($table,$field_name)
         {
    +        // phpcs:enable
             $sql= "ALTER TABLE ".$table." DROP COLUMN `".$field_name."`";
             dol_syslog(get_class($this)."::DDLDropField ".$sql,LOG_DEBUG);
             if ($this->query($sql)) {
                 return 1;
             }
    -	    $this->error=$this->lasterror();
    -	    return -1;
    +        $this->error=$this->lasterror();
    +        return -1;
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 * 	Create a user and privileges to connect to database (even if database does not exists yet)
     	 *
    @@ -875,6 +910,7 @@ class DoliDBMysqli extends DoliDB
          */
         function DDLCreateUser($dolibarr_main_db_host,$dolibarr_main_db_user,$dolibarr_main_db_pass,$dolibarr_main_db_name)
         {
    +        // phpcs:enable
             $sql = "CREATE USER '".$this->escape($dolibarr_main_db_user)."'";
             dol_syslog(get_class($this)."::DDLCreateUser", LOG_DEBUG);	// No sql to avoid password in log
             $resql=$this->query($sql);
    @@ -1082,4 +1118,3 @@ class DoliDBMysqli extends DoliDB
             return $result;
         }
     }
    -
    diff --git a/htdocs/core/db/pgsql.class.php b/htdocs/core/db/pgsql.class.php
    index 8e57b29109e..85abdf2b004 100644
    --- a/htdocs/core/db/pgsql.class.php
    +++ b/htdocs/core/db/pgsql.class.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2014	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Yann Droneaud			<yann@droneaud.fr>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2015       Marcos García           <marcosgdf@gmail.com>
    @@ -359,8 +359,9 @@ class DoliDBPgsql extends DoliDB
     		return $line;
     	}
     
    -	/**
    -	 *	Select a database
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Select a database
          *  Ici postgresql n'a aucune fonction equivalente de mysql_select_db
          *  On compare juste manuellement si la database choisie est bien celle activee par la connexion
     	 *
    @@ -369,9 +370,13 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function select_db($database)
     	{
    -		if ($database == $this->database_name) return true;
    -		else return false;
    -	}
    +        // phpcs:enable
    +        if ($database == $this->database_name) {
    +            return true;
    +        } else {
    +            return false;
    +        }
    +    }
     
     	/**
     	 *	Connexion to server
    @@ -540,6 +545,7 @@ class DoliDBPgsql extends DoliDB
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoie la ligne courante (comme un objet) pour le curseur resultset
     	 *
    @@ -548,12 +554,14 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function fetch_object($resultset)
     	{
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		return pg_fetch_object($resultset);
     	}
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *	Return datas as an array
          *
          *	@param	resource	$resultset  Resultset of request
    @@ -561,11 +569,13 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function fetch_array($resultset)
     	{
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		return pg_fetch_array($resultset);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *	Return datas as an array
          *
    @@ -574,25 +584,29 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function fetch_row($resultset)
     	{
    +        // phpcs:enable
     		// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		return pg_fetch_row($resultset);
     	}
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *	Return number of lines for result of a SELECT
          *
          *	@param	resourse	$resultset  Resulset of requests
          *	@return int		    			Nb of lines, -1 on error
          *	@see    affected_rows
    -	 */
    +     */
     	function num_rows($resultset)
     	{
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		return pg_num_rows($resultset);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE
     	 *
    @@ -602,6 +616,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function affected_rows($resultset)
     	{
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
     		if (! is_resource($resultset)) { $resultset=$this->_results; }
     		// pgsql necessite un resultset pour cette fonction contrairement
    @@ -754,6 +769,7 @@ class DoliDBPgsql extends DoliDB
     		return pg_last_error($this->db);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Get last ID after an insert INSERT
     	 *
    @@ -763,6 +779,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function last_insert_id($tab,$fieldid='rowid')
     	{
    +        // phpcs:enable
     		//$result = pg_query($this->db,"SELECT MAX(".$fieldid.") FROM ".$tab);
     		$result = pg_query($this->db,"SELECT currval('".$tab."_".$fieldid."_seq')");
     		if (! $result)
    @@ -819,6 +836,7 @@ class DoliDBPgsql extends DoliDB
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return connexion ID
     	 *
    @@ -826,11 +844,13 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLGetConnectId()
     	{
    +        // phpcs:enable
     		return '?';
     	}
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a new database
     	 *	Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated
    @@ -844,6 +864,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLCreateDb($database,$charset='',$collation='',$owner='')
     	{
    +        // phpcs:enable
     	    if (empty($charset))   $charset=$this->forcecharset;
     		if (empty($collation)) $collation=$this->forcecollate;
     
    @@ -856,6 +877,7 @@ class DoliDBPgsql extends DoliDB
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  List tables into a database
     	 *
    @@ -864,7 +886,8 @@ class DoliDBPgsql extends DoliDB
     	 *  @return	array					List of tables in an array
     	 */
     	function DDLListTables($database, $table='')
    -	{
    +    {
    +        // phpcs:enable
     		$listtables=array();
     
     		$like = '';
    @@ -880,6 +903,7 @@ class DoliDBPgsql extends DoliDB
     		return $listtables;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	List information of columns into a table.
     	 *
    @@ -889,6 +913,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLInfoTable($table)
     	{
    +        // phpcs:enable
     		$infotables=array();
     
     		$sql="SELECT ";
    @@ -920,6 +945,7 @@ class DoliDBPgsql extends DoliDB
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a table into database
     	 *
    @@ -934,6 +960,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null)
     	{
    +        // phpcs:enable
     		// FIXME: $fulltext_keys parameter is unused
     
     		// cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra
    @@ -999,6 +1026,7 @@ class DoliDBPgsql extends DoliDB
     		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Drop a table into database
     	 *
    @@ -1007,6 +1035,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLDropTable($table)
     	{
    +        // phpcs:enable
     		$sql = "DROP TABLE ".$table;
     
     		if (! $this->query($sql))
    @@ -1015,6 +1044,7 @@ class DoliDBPgsql extends DoliDB
     			return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Create a user to connect to database
     	 *
    @@ -1026,6 +1056,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLCreateUser($dolibarr_main_db_host,$dolibarr_main_db_user,$dolibarr_main_db_pass,$dolibarr_main_db_name)
     	{
    +        // phpcs:enable
     		// Note: using ' on user does not works with pgsql
     		$sql = "CREATE USER ".$this->escape($dolibarr_main_db_user)." with password '".$this->escape($dolibarr_main_db_pass)."'";
     
    @@ -1039,6 +1070,7 @@ class DoliDBPgsql extends DoliDB
     		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return a pointer of line with description of a table or field
     	 *
    @@ -1048,6 +1080,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLDescTable($table,$field="")
     	{
    +        // phpcs:enable
     		$sql ="SELECT attname FROM pg_attribute, pg_type WHERE typname = '".$table."' AND attrelid = typrelid";
     		$sql.=" AND attname NOT IN ('cmin', 'cmax', 'ctid', 'oid', 'tableoid', 'xmin', 'xmax')";
     		if ($field) $sql.= " AND attname = '".$field."'";
    @@ -1057,6 +1090,7 @@ class DoliDBPgsql extends DoliDB
     		return $this->_results;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a new field into table
     	 *
    @@ -1068,34 +1102,36 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLAddField($table,$field_name,$field_desc,$field_position="")
     	{
    +        // phpcs:enable
     		// cles recherchees dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
     		// ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
     		$sql= "ALTER TABLE ".$table." ADD ".$field_name." ";
     		$sql .= $field_desc['type'];
    -		if(preg_match("/^[^\s]/i",$field_desc['value']))
    +		if (preg_match("/^[^\s]/i",$field_desc['value']))
     		    if (! in_array($field_desc['type'],array('int','date','datetime')))
     		    {
     		        $sql.= "(".$field_desc['value'].")";
     		    }
     		if (preg_match("/^[^\s]/i",$field_desc['attribute']))
    -		$sql .= " ".$field_desc['attribute'];
    +            $sql .= " ".$field_desc['attribute'];
     		if (preg_match("/^[^\s]/i",$field_desc['null']))
    -		$sql .= " ".$field_desc['null'];
    +            $sql .= " ".$field_desc['null'];
     		if (preg_match("/^[^\s]/i",$field_desc['default']))
    -		if (preg_match("/null/i",$field_desc['default']))
    -		$sql .= " default ".$field_desc['default'];
    -		else
    -		$sql .= " default '".$field_desc['default']."'";
    +            if (preg_match("/null/i",$field_desc['default']))
    +                $sql .= " default ".$field_desc['default'];
    +		    else
    +                $sql .= " default '".$field_desc['default']."'";
     		if (preg_match("/^[^\s]/i",$field_desc['extra']))
    -		$sql .= " ".$field_desc['extra'];
    +            $sql .= " ".$field_desc['extra'];
     		$sql .= " ".$field_position;
     
     		dol_syslog($sql,LOG_DEBUG);
    -		if(! $this -> query($sql))
    +		if (! $this -> query($sql))
     			return -1;
     		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Update format of a field into a table
     	 *
    @@ -1106,6 +1142,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLUpdateField($table,$field_name,$field_desc)
     	{
    +        // phpcs:enable
     		$sql = "ALTER TABLE ".$table;
     		$sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type'];
     		if ($field_desc['type'] == 'double' || $field_desc['type'] == 'tinyint' || $field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') {
    @@ -1139,6 +1176,7 @@ class DoliDBPgsql extends DoliDB
     		return 1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Drop a field from table
     	 *
    @@ -1148,6 +1186,7 @@ class DoliDBPgsql extends DoliDB
     	 */
     	function DDLDropField($table,$field_name)
     	{
    +        // phpcs:enable
     		$sql= "ALTER TABLE ".$table." DROP COLUMN ".$field_name;
     		dol_syslog($sql,LOG_DEBUG);
     		if (! $this->query($sql))
    diff --git a/htdocs/core/db/sqlite3.class.php b/htdocs/core/db/sqlite3.class.php
    index 78762f282b4..bbd5853f95f 100644
    --- a/htdocs/core/db/sqlite3.class.php
    +++ b/htdocs/core/db/sqlite3.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Raphaël Doursenaud   <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -260,7 +260,6 @@ class DoliDBSqlite3 extends DoliDB
                         // Pour l'instant les contraintes ne sont pas créées
                         dol_syslog(get_class().'::query line emptied');
                         $line = 'SELECT 0;';
    -
                     }
     
                     //if (preg_match('/rowid\s+.*\s+PRIMARY\s+KEY,/i', $line)) {
    @@ -296,6 +295,7 @@ class DoliDBSqlite3 extends DoliDB
             return $line;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Select a database
          *
    @@ -304,8 +304,9 @@ class DoliDBSqlite3 extends DoliDB
          */
         function select_db($database)
         {
    +        // phpcs:enable
             dol_syslog(get_class($this)."::select_db database=".$database, LOG_DEBUG);
    -	    // sqlite_select_db() does not exist
    +        // sqlite_select_db() does not exist
             //return sqlite_select_db($this->db,$database);
             return true;
         }
    @@ -443,7 +444,6 @@ class DoliDBSqlite3 extends DoliDB
     
                 // dummy statement
                 $query="SELECT 0";
    -
             } else {
                 $query=$this->convertSQLFromMysql($query,$type);
             }
    @@ -490,6 +490,7 @@ class DoliDBSqlite3 extends DoliDB
             return $ret;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Renvoie la ligne courante (comme un objet) pour le curseur resultset
          *
    @@ -498,6 +499,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function fetch_object($resultset)
         {
    +        // phpcs:enable
             // Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
             if (! is_object($resultset)) { $resultset=$this->_results; }
             //return $resultset->fetch(PDO::FETCH_OBJ);
    @@ -509,6 +511,7 @@ class DoliDBSqlite3 extends DoliDB
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Return datas as an array
          *
    @@ -517,6 +520,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function fetch_array($resultset)
         {
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
             if (! is_object($resultset)) { $resultset=$this->_results; }
             //return $resultset->fetch(PDO::FETCH_ASSOC);
    @@ -524,6 +528,7 @@ class DoliDBSqlite3 extends DoliDB
     	    return $ret;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Return datas as an array
          *
    @@ -532,6 +537,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function fetch_row($resultset)
         {
    +        // phpcs:enable
             // If resultset not provided, we take the last used by connexion
             if (! is_bool($resultset))
             {
    @@ -545,6 +551,7 @@ class DoliDBSqlite3 extends DoliDB
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Return number of lines for result of a SELECT
          *
    @@ -554,7 +561,8 @@ class DoliDBSqlite3 extends DoliDB
          */
         function num_rows($resultset)
         {
    -	    // FIXME: SQLite3Result does not have a queryString member
    +        // phpcs:enable
    +        // FIXME: SQLite3Result does not have a queryString member
     
             // If resultset not provided, we take the last used by connexion
             if (! is_object($resultset)) { $resultset=$this->_results; }
    @@ -564,6 +572,7 @@ class DoliDBSqlite3 extends DoliDB
             return 0;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Return number of lines for result of a SELECT
          *
    @@ -573,7 +582,8 @@ class DoliDBSqlite3 extends DoliDB
          */
         function affected_rows($resultset)
         {
    -	    // FIXME: SQLite3Result does not have a queryString member
    +        // phpcs:enable
    +        // FIXME: SQLite3Result does not have a queryString member
     
             // If resultset not provided, we take the last used by connexion
             if (! is_object($resultset)) { $resultset=$this->_results; }
    @@ -692,6 +702,7 @@ class DoliDBSqlite3 extends DoliDB
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Get last ID after an insert INSERT
          *
    @@ -701,6 +712,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function last_insert_id($tab,$fieldid='rowid')
         {
    +        // phpcs:enable
             return $this->db->lastInsertRowId();
         }
     
    @@ -773,6 +785,7 @@ class DoliDBSqlite3 extends DoliDB
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return connexion ID
          *
    @@ -780,10 +793,12 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLGetConnectId()
         {
    +        // phpcs:enable
             return '?';
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Create a new database
     	 *	Do not use function xxx_create_db (xxx=mysql, ...) as they are deprecated
    @@ -797,6 +812,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLCreateDb($database,$charset='',$collation='',$owner='')
         {
    +        // phpcs:enable
             if (empty($charset))   $charset=$this->forcecharset;
             if (empty($collation)) $collation=$this->forcecollate;
     
    @@ -816,6 +832,7 @@ class DoliDBSqlite3 extends DoliDB
             return $ret;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  List tables into a database
          *
    @@ -825,6 +842,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLListTables($database, $table='')
         {
    +        // phpcs:enable
             $listtables=array();
     
             $like = '';
    @@ -842,8 +860,9 @@ class DoliDBSqlite3 extends DoliDB
             return $listtables;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -	 *	List information of columns into a table.
    +     *  List information of columns into a table.
          *
     	 *	@param	string	$table		Name of table
     	 *	@return	array				Tableau des informations des champs de la table
    @@ -851,6 +870,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLInfoTable($table)
         {
    +        // phpcs:enable
             $infotables=array();
     
             $sql="SHOW FULL COLUMNS FROM ".$table.";";
    @@ -867,6 +887,7 @@ class DoliDBSqlite3 extends DoliDB
             return $infotables;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Create a table into database
          *
    @@ -881,7 +902,8 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLCreateTable($table,$fields,$primary_key,$type,$unique_keys=null,$fulltext_keys=null,$keys=null)
         {
    -	    // FIXME: $fulltext_keys parameter is unused
    +        // phpcs:enable
    +        // FIXME: $fulltext_keys parameter is unused
     
             // cles recherchees dans le tableau des descriptions (fields) : type,value,attribute,null,default,extra
             // ex. : $fields['rowid'] = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
    @@ -945,6 +967,7 @@ class DoliDBSqlite3 extends DoliDB
             return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Drop a table into database
          *
    @@ -953,6 +976,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLDropTable($table)
         {
    +        // phpcs:enable
         	$sql = "DROP TABLE ".$table;
     
         	if (! $this->query($sql))
    @@ -961,6 +985,7 @@ class DoliDBSqlite3 extends DoliDB
         		return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Return a pointer of line with description of a table or field
          *
    @@ -970,6 +995,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLDescTable($table,$field="")
         {
    +        // phpcs:enable
             $sql="DESC ".$table." ".$field;
     
             dol_syslog(get_class($this)."::DDLDescTable ".$sql,LOG_DEBUG);
    @@ -977,6 +1003,7 @@ class DoliDBSqlite3 extends DoliDB
             return $this->_results;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Create a new field into table
          *
    @@ -988,6 +1015,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLAddField($table,$field_name,$field_desc,$field_position="")
         {
    +        // phpcs:enable
             // cles recherchees dans le tableau des descriptions (field_desc) : type,value,attribute,null,default,extra
             // ex. : $field_desc = array('type'=>'int','value'=>'11','null'=>'not null','extra'=> 'auto_increment');
             $sql= "ALTER TABLE ".$table." ADD ".$field_name." ";
    @@ -1020,6 +1048,7 @@ class DoliDBSqlite3 extends DoliDB
             return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Update format of a field into a table
          *
    @@ -1030,6 +1059,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLUpdateField($table,$field_name,$field_desc)
         {
    +        // phpcs:enable
             $sql = "ALTER TABLE ".$table;
             $sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type'];
             if ($field_desc['type'] == 'tinyint' || $field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') {
    @@ -1042,6 +1072,7 @@ class DoliDBSqlite3 extends DoliDB
             return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *	Drop a field from table
          *
    @@ -1051,6 +1082,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLDropField($table,$field_name)
         {
    +        // phpcs:enable
             $sql= "ALTER TABLE ".$table." DROP COLUMN `".$field_name."`";
             dol_syslog(get_class($this)."::DDLDropField ".$sql,LOG_DEBUG);
             if (! $this->query($sql))
    @@ -1062,8 +1094,9 @@ class DoliDBSqlite3 extends DoliDB
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -	 * 	Create a user and privileges to connect to database (even if database does not exists yet)
    +     * 	Create a user and privileges to connect to database (even if database does not exists yet)
          *
     	 *	@param	string	$dolibarr_main_db_host 		Ip serveur
     	 *	@param	string	$dolibarr_main_db_user 		Nom user a creer
    @@ -1073,6 +1106,7 @@ class DoliDBSqlite3 extends DoliDB
          */
         function DDLCreateUser($dolibarr_main_db_host,$dolibarr_main_db_user,$dolibarr_main_db_pass,$dolibarr_main_db_name)
         {
    +        // phpcs:enable
             $sql = "INSERT INTO user ";
             $sql.= "(Host,User,password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Index_Priv,Alter_priv,Lock_tables_priv)";
             $sql.= " VALUES ('".$this->escape($dolibarr_main_db_host)."','".$this->escape($dolibarr_main_db_user)."',password('".addslashes($dolibarr_main_db_pass)."')";
    @@ -1294,6 +1328,7 @@ class DoliDBSqlite3 extends DoliDB
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
         /**
          * calc_daynr
          *
    @@ -1302,7 +1337,9 @@ class DoliDBSqlite3 extends DoliDB
          * @param	int     $day 		Day
          * @return int Formatted date
          */
    -    private static function calc_daynr($year, $month, $day) {
    +    private static function calc_daynr($year, $month, $day)
    +    {
    +        // phpcs:enable
             $y = $year;
             if ($y == 0 && $month == 0) return 0;
             $num = (365* $y + 31 * ($month - 1) + $day);
    @@ -1315,6 +1352,7 @@ class DoliDBSqlite3 extends DoliDB
             return $num + floor($y / 4) - $temp;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
         /**
          * calc_weekday
          *
    @@ -1322,11 +1360,14 @@ class DoliDBSqlite3 extends DoliDB
          * @param bool	$sunday_first_day_of_week		???
          * @return int
          */
    -    private static function calc_weekday($daynr, $sunday_first_day_of_week) {
    -      $ret = floor(($daynr + 5 + ($sunday_first_day_of_week ? 1 : 0)) % 7);
    -      return $ret;
    +    private static function calc_weekday($daynr, $sunday_first_day_of_week)
    +    {
    +        // phpcs:enable
    +        $ret = floor(($daynr + 5 + ($sunday_first_day_of_week ? 1 : 0)) % 7);
    +        return $ret;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
         /**
          * calc_days_in_year
          *
    @@ -1335,9 +1376,11 @@ class DoliDBSqlite3 extends DoliDB
          */
         private static function calc_days_in_year($year)
         {
    -      return (($year & 3) == 0 && ($year%100 || ($year%400 == 0 && $year)) ? 366 : 365);
    +        // phpcs:enable
    +        return (($year & 3) == 0 && ($year%100 || ($year%400 == 0 && $year)) ? 366 : 365);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
     	/**
     	 * calc_week
     	 *
    @@ -1348,7 +1391,9 @@ class DoliDBSqlite3 extends DoliDB
     	 * @param 	string	$calc_year			???
     	 * @return	string						???
     	 */
    -    private static function calc_week($year, $month, $day, $week_behaviour, &$calc_year) {
    +    private static function calc_week($year, $month, $day, $week_behaviour, &$calc_year)
    +    {
    +        // phpcs:enable
             $daynr=self::calc_daynr($year,$month,$day);
             $first_daynr=self::calc_daynr($year,1,1);
             $monday_first= ($week_behaviour & self::WEEK_MONDAY_FIRST) ? 1 : 0;
    @@ -1386,6 +1431,4 @@ class DoliDBSqlite3 extends DoliDB
           }
           return floor($days/7+1);
         }
    -
     }
    -
    diff --git a/htdocs/core/doxygen.php b/htdocs/core/doxygen.php
    index 55ea34a5778..542a0effeb2 100644
    --- a/htdocs/core/doxygen.php
    +++ b/htdocs/core/doxygen.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/filemanagerdol/connectors/php/io.php b/htdocs/core/filemanagerdol/connectors/php/io.php
    index 66d024edce8..3ac325ed5d4 100644
    --- a/htdocs/core/filemanagerdol/connectors/php/io.php
    +++ b/htdocs/core/filemanagerdol/connectors/php/io.php
    @@ -24,7 +24,7 @@
     
     /**
      * CombinePaths
    - * 
    + *
      * @param   string $sBasePath     sBasePath
      * @param   string $sFolder       sFolder
      * @return  string                Combined path
    @@ -393,13 +393,13 @@ EOF;
     // This is the function that sends the results of the uploading process to CKE.
     /**
      * SendCKEditorResults
    - * 
    + *
      * @param   string  $callback       callback
      * @param   string  $sFileUrl       sFileUrl
      * @param   string  $customMsg      customMsg
      * @return  void
      */
    -function SendCKEditorResults ($callback, $sFileUrl, $customMsg = '')
    +function SendCKEditorResults($callback, $sFileUrl, $customMsg = '')
     {
       echo '<script type="text/javascript">';
     
    @@ -409,5 +409,3 @@ function SendCKEditorResults ($callback, $sFileUrl, $customMsg = '')
     
       echo '</script>';
     }
    -
    -
    diff --git a/htdocs/core/get_info.php b/htdocs/core/get_info.php
    index 2f08a1d7d24..4e52c584083 100644
    --- a/htdocs/core/get_info.php
    +++ b/htdocs/core/get_info.php
    @@ -134,7 +134,7 @@ if (! empty($conf->modulebuilder->enabled))
     
     // Link to print main content area
     /*
    -if (empty($conf->global->MAIN_PRINT_DISABLELINK) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && empty($conf->browser->phone))
    +if (empty($conf->global->MAIN_PRINT_DISABLELINK) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && $conf->browser->layout != 'phone')
     {
     	$qs=dol_escape_htmltag($_SERVER["QUERY_STRING"]);
     
    diff --git a/htdocs/core/js/blockUI.js b/htdocs/core/js/blockUI.js
    index 6abcc706e25..b485565ee07 100644
    --- a/htdocs/core/js/blockUI.js
    +++ b/htdocs/core/js/blockUI.js
    @@ -1,4 +1,4 @@
    -// Copyright (C) 2012	Regis Houssin	<regis.houssin@capnetworks.com>
    +// Copyright (C) 2012	Regis Houssin	<regis.houssin@inodbox.com>
     //
     // This program is free software; you can redistribute it and/or modify
     // it under the terms of the GNU General Public License as published by
    @@ -41,7 +41,7 @@ $(document).ready(function() {
     				'-moz-border-radius':	 '10px',
     				'border-radius': 		 '10px'
     			},
    -			
    +
     			// styles applied when using $.growlUI
     			dolEventErrorCSS: {
     				width:  	'350px',
    @@ -60,7 +60,7 @@ $(document).ready(function() {
     			}
     
     	};*/
    -	
    +
     	$.dolEventValid = function(title, message, timeout, onClose) {
     		var $m = $('<div class="dolEventValid"></div>');
     		if (title) $m.append('<h1>'+title+'</h1>');
    @@ -73,7 +73,7 @@ $(document).ready(function() {
     			css: $.blockUI.events.dolEventValidCSS
     		});
     	};
    -	
    +
     	$.dolEventError = function(title, message, timeout, onClose) {
     		var $m = $('<div class="dolEventError"></div>');
     		if (title) $m.append('<h1>'+title+'</h1>');
    @@ -87,7 +87,7 @@ $(document).ready(function() {
     		});
     		$('.dolEventError').click($.unblockUI);
     	};
    -	
    +
     	$.pleaseBePatient = function(message) {
     		$.blockUI({
     			message: message,
    diff --git a/htdocs/core/js/dst.js b/htdocs/core/js/dst.js
    index 486e7027b43..739beebeac5 100644
    --- a/htdocs/core/js/dst.js
    +++ b/htdocs/core/js/dst.js
    @@ -1,5 +1,5 @@
     // Copyright (C) 2011-2014	Laurent Destailleur	<eldy@users.sourceforge.net>
    -// Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +// Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@inodbox.com>
     // Copyright (C) 2015       Marcos García       <marcosgdf@gmail.com>
     //
     // This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/js/editinplace.js b/htdocs/core/js/editinplace.js
    index d1d4b6254ee..8501474ec0c 100644
    --- a/htdocs/core/js/editinplace.js
    +++ b/htdocs/core/js/editinplace.js
    @@ -1,4 +1,4 @@
    -// Copyright (C) 2011-2014	Regis Houssin		<regis.houssin@capnetworks.com>
    +// Copyright (C) 2011-2014	Regis Houssin		<regis.houssin@inodbox.com>
     // Copyright (C) 2011-2017	Laurent Destailleur	<eldy@users.sourceforge.net>
     //
     // This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/js/lib_head.js.php b/htdocs/core/js/lib_head.js.php
    index 1aa9c458e39..15594570fd7 100644
    --- a/htdocs/core/js/lib_head.js.php
    +++ b/htdocs/core/js/lib_head.js.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2014  Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2014  Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014  Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -918,7 +918,7 @@ function document_preview(file, type, title)
     		{
     			optionsbuttons = {
     			    "<?php echo dol_escape_js($langs->transnoentitiesnoconv("OriginalSize")); ?>": function() { console.log("Click on original size"); jQuery(".ui-dialog-content.ui-widget-content > object").css({ "max-height": "none" }); },
    -				"<?php echo dol_escape_js($langs->transnoentitiesnoconv("Close")); ?>": function() { $( this ).dialog( "close" ); }
    +				"<?php echo dol_escape_js($langs->transnoentitiesnoconv("CloseWindow")); ?>": function() { $( this ).dialog( "close" ); }
     				};
     		}
     
    diff --git a/htdocs/core/js/lib_photosresize.js b/htdocs/core/js/lib_photosresize.js
    index 9c4c6671b1e..37fb21a4a01 100644
    --- a/htdocs/core/js/lib_photosresize.js
    +++ b/htdocs/core/js/lib_photosresize.js
    @@ -21,10 +21,10 @@
     
     /* Enable jcrop plugin onto id cropbox */
     jQuery(function() {
    -   jQuery('#cropbox').Jcrop({
    -      onSelect: updateCoords, 
    -      onChange: updateCoords
    -   });
    +    jQuery('#cropbox').Jcrop({
    +        onSelect: updateCoords,
    +        onChange: updateCoords
    +    });
     });
     
     /* Update fields that store new size */
    diff --git a/htdocs/core/js/listview.js b/htdocs/core/js/listview.js
    index de3113d0fae..f5ee0af6568 100644
    --- a/htdocs/core/js/listview.js
    +++ b/htdocs/core/js/listview.js
    @@ -22,28 +22,28 @@ var Listview_include = true;
     
     function Listview_OrderDown(idListe, column) {
     	var base_url = document.location.href;
    -	
    +
     	base_url = Listview_recup_form_param(idListe,base_url);
     	base_url = Listview_removeParam(base_url,'Listview['+encodeURIComponent(idListe)+'][orderBy]');
    -	
    +
     	base_url = Listview_removeParam(base_url,'get-all-for-export');
    -	
    +
     	document.location.href=Listview_modifyUrl(base_url,"Listview["+encodeURIComponent(idListe)+"][orderBy]["+encodeURIComponent(column)+"]","DESC");
     }
     function Listview_OrderUp(idListe, column) {
    -	
    +
     	var base_url = document.location.href;
    -	
    +
     	base_url = Listview_recup_form_param(idListe,base_url);
     	base_url = Listview_removeParam(base_url,'Listview['+encodeURIComponent(idListe)+'][orderBy]');
    -	
    +
     	base_url = Listview_removeParam(base_url,'get-all-for-export');
    -	
    +
     	document.location.href=Listview_modifyUrl(base_url,"Listview["+encodeURIComponent(idListe)+"][orderBy]["+encodeURIComponent(column)+"]","ASC");
     }
     function Listview_modifyUrl(strURL,paramName,paramNewValue){
     	    if (strURL.indexOf(paramName+'=')!=-1){
    -        	
    +
                     var strFirstPart=strURL.substring(0,strURL.indexOf(paramName+'=',0))+paramName+'=';
                     var strLastPart="";
                     if (strURL.indexOf('&',strFirstPart.length-1)>0)
    @@ -56,55 +56,55 @@ function Listview_modifyUrl(strURL,paramName,paramNewValue){
                     else
                             strURL+='?'+paramName+'='+paramNewValue;
             }
    -        
    +
             return strURL;
     }
     function Listview_removeParam(strURL, paramMask) {
     	var cpt=0;
     	var url = '';
    -	
    +
     	 while(strURL.indexOf(paramMask)!=-1 && cpt++ <50){
     	 	var strFirstPart= strURL.substring(0,strURL.indexOf(paramMask)-1);
    -	 	
    +
     	 	var strLastPart='';
     	 	if (strURL.indexOf('&',strFirstPart.length+1)>0) {
    -	 		strLastPart = strURL.substring(strURL.indexOf('&',strFirstPart.length+1),strURL.length);	
    +	 		strLastPart = strURL.substring(strURL.indexOf('&',strFirstPart.length+1),strURL.length);
     	 	}
    -	 		
    +
     		url = strFirstPart+strLastPart;
    -	 	
    +
     	 }
    -	 
    +
     	 if(url=='')url = strURL;
    -	 
    +
     	 return url;
     }
     
     function Listview_recup_form_param(idListe,base_url) {
    -	
    +
     	$('#'+idListe+' tr.barre-recherche [listviewtbs],#'+idListe+' tr.barre-recherche-head input,#'+idListe+' tr.barre-recherche-head select,#'+idListe+' div.tabsAction input[listviewtbs]').each(function(i,item) {
     		if($(item).attr("name")) {
     			base_url = Listview_modifyUrl(base_url, $(item).attr("name") , $(item).val());
     		}
    -		
    +
     	});
    -	
    +
     	return base_url;
     }
     
     function Listview_GoToPage(idListe,pageNumber){
    -	
    +
     	var base_url = document.location.href;
    -	
    +
     	base_url = Listview_recup_form_param(idListe,base_url);
     	base_url =Listview_modifyUrl(base_url,"Listview["+encodeURIComponent(idListe)+"][page]",pageNumber);
    -	
    +
     	base_url = Listview_removeParam(base_url,'get-all-for-export');
    -	
    +
     	document.location.href=base_url;
     }
     function Listview_submitSearch(obj) {
    -	
    +
     	$form = $(obj).closest('form');
     	console.log($form);
     	if($form.length>0){
    @@ -113,20 +113,20 @@ function Listview_submitSearch(obj) {
     }
     function Listview_launch_downloadAs(mode,url,token,session_name) {
     	 $('#listviewdAS_export_form').remove();
    -	
    +
     	$form = $('<form action="'+url+'" method="post" name="listviewdAS_export_form" id="listTBSdAS_export_form"></form>');
     	$form.append('<input type="hidden" name="mode" value="'+mode+'" />');
     	$form.append('<input type="hidden" name="token" value="'+token+'" />');
     	$form.append('<input type="hidden" name="session_name" value="'+session_name+'" />');
    -	
    +
     	$('body').append($form);
    -	
    +
         $('#listviewdAS_export_form').submit();
    -	
    +
     }
     
     function Listview_downloadAs(obj, mode,url,token,session_name) {
    -	
    +
     	$form = $(obj).closest('form');
     	$div = $form.find('div.tabsAction');
     	$div.append('<input type="hidden" listviewtbs="hidden" name="token" value="'+token+'" />');
    @@ -134,33 +134,33 @@ function Listview_downloadAs(obj, mode,url,token,session_name) {
     	$div.append('<input type="hidden" listviewtbs="hidden" name="url" value="'+url+'" />');
     	$div.append('<input type="hidden" listviewtbs="hidden" name="session_name" value="'+session_name+'" />');
     	$div.append('<input type="hidden" listviewtbs="hidden" name="get-all-for-export" value="1" />');
    -	
    +
     	Listview_submitSearch(obj);
     }
     
     $(document).ready(function() {
     	$('tr.barre-recherche input').keypress(function(e) {
     	    if(e.which == 13) {
    -	       
    +
     	       var id_list = $(this).closest('table').attr('id');
    -	       
    +
     	       $('#'+id_list+' .list-search-link').click();
    -	       
    +
     	    }
     	});
    -	
    +
     	var $_GET = {};
    -	
    +
     	document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
     	    function decode(s) {
     	        return decodeURIComponent(s.split("+").join(" "));
     	    }
    -	
    +
     	    $_GET[decode(arguments[1])] = decode(arguments[2]);
     	});
    -	
    +
     	if(typeof $_GET["get-all-for-export"] != "undefined") {
     		Listview_launch_downloadAs($_GET['mode'],$_GET['url'],$_GET['token'],$_GET['session_name']);
     	}
    -	
    +
     });
    diff --git a/htdocs/core/js/timepicker.js.php b/htdocs/core/js/timepicker.js.php
    index f93bb3410f2..8e67f517b44 100644
    --- a/htdocs/core/js/timepicker.js.php
    +++ b/htdocs/core/js/timepicker.js.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2012	Laurent Destailleur	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/js/timesheet.js b/htdocs/core/js/timesheet.js
    index aaec6971e2f..3bd93555d76 100644
    --- a/htdocs/core/js/timesheet.js
    +++ b/htdocs/core/js/timesheet.js
    @@ -24,9 +24,9 @@ function regexEvent(objet,evt,type)
         {
               case 'days':
                   var regex= /^[0-9]{1}([.,]{1}[0-9]{1})?$/;
    -   
    +
                   if(regex.test(objet.value) )
    -              { 
    +              {
                     var tmp=objet.value.replace(',','.');
                     if(tmp<=1.5){
                         var tmpint=parseInt(tmp);
    @@ -41,15 +41,20 @@ function regexEvent(objet,evt,type)
                   }else{
                      objet.value= '0';
                 }
    -          break; 
    +          break;
               case 'hours':
                   var regex= /^[0-9]{1,2}:[0-9]{2}$/;
                   var regex2=/^[0-9]{1,2}$/;
    +              var regex3= /^[0-9]{1}([.,]{1}[0-9]{1,2})?$/;
                   if(!regex.test(objet.value))
    -              { 
    +              {
                       if(regex2.test(objet.value))
                         objet.value=objet.value+':00';
    -                  else
    +                  else if(regex3.test(objet.value)) {
    +                    var tmp=parseFloat(objet.value.replace(',','.'));
    +                    var rnd=Math.trunc(tmp);
    +                    objet.value=rnd+':'+ Math.round(60*(tmp-rnd));
    +                  } else
                         objet.value='';
                   }
                   /* alert(jQuery("#"+id).val()); */
    @@ -58,25 +63,25 @@ function regexEvent(objet,evt,type)
                   //var regex= /^[0-9:]{1}$/;
                   //alert(event.charCode);
                   var charCode = (evt.which) ? evt.which : event.keyCode;
    -              
    +
                   if(((charCode >= 48) && (charCode <= 57)) || //num
                         (charCode===46) || (charCode===8)||// comma & periode
                         (charCode === 58) || (charCode==44) )// : & all charcode
                   {
                       // ((charCode>=96) && (charCode<=105)) || //numpad
                 	  return true;
    -         
    +
                   }else
                   {
                       return false;
                   }
    -                
    -              break;    
    +
    +              break;
               default:
                   break;
           }
    -}    
    -  
    +}
    +
     
     function pad(n) {
         return (n < 10) ? ("0" + n) : n;
    @@ -90,7 +95,7 @@ function parseTime(timeStr, dt)
         if (!dt) {
             dt = new Date();
         }
    - 
    +
         var time = timeStr.match(/(\d+)(?::(\d\d))?\s*(p?)/i);
         if (!time) {
             return -1;
    @@ -102,7 +107,7 @@ function parseTime(timeStr, dt)
         else {
             hours += (hours < 12 && time[3]) ? 12 : 0;
         }
    - 
    +
         dt.setHours(hours);
         dt.setMinutes(parseInt(time[2], 10) || 0);
         dt.setSeconds(0, 0);
    @@ -117,10 +122,10 @@ function updateTotal(days,mode)
         {
             var total = new Date(0);
             total.setHours(0);
    -        total.setMinutes(0);   
    +        total.setMinutes(0);
             var nbline = document.getElementById('numberOfLines').value;
             for (var i=-1; i<nbline; i++)
    -        { 
    +        {
                 var id='timespent['+i+']['+days+']';
                 var taskTime= new Date(0);
                 var element=document.getElementById(id);
    @@ -128,7 +133,7 @@ function updateTotal(days,mode)
                 {
                 	/* alert(element.value);*/
                     if (element.value)
    -                {   
    +                {
                     	result=parseTime(element.value,taskTime);
                     }
                     else
    @@ -142,14 +147,14 @@ function updateTotal(days,mode)
                     }
                 }
     
    -            var id='timeadded['+i+']['+days+']';   
    +            var id='timeadded['+i+']['+days+']';
                 var taskTime= new Date(0);
                 var element=document.getElementById(id);
                 if(element)
                 {
                 	/* alert(element.value);*/
                     if (element.value)
    -                {   
    +                {
                     	result=parseTime(element.value,taskTime);
                     }
                     else
    @@ -173,7 +178,7 @@ function updateTotal(days,mode)
             		console.log(this.value)
                 	alert(element.value);*/
                     if (this.value)
    -                {   
    +                {
                     	console.log(this.value+':00')
                     	result=parseTime(this.value+':00',taskTime);
                     }
    @@ -197,7 +202,7 @@ function updateTotal(days,mode)
             		console.log(this.value)
                 	alert(element.value);*/
                     if (this.value)
    -                {   
    +                {
                     	console.log('00:'+this.value)
                     	result=parseTime('00:'+"00".substring(0, 2 - this.value.length) + this.value,taskTime);
                     }
    @@ -212,11 +217,11 @@ function updateTotal(days,mode)
             		console.log(total.getMinutes())
                 }
             });
    -        
    +
             if (total.getHours() || total.getMinutes()) jQuery('.totalDay'+days).addClass("bold");
             else jQuery('.totalDay'+days).removeClass("bold");
         	jQuery('.totalDay'+days).text(pad(total.getHours())+':'+pad(total.getMinutes()));
    -    	
    +
         	var totalhour = 0;
         	var totalmin = 0;
             for (var i=0; i<7; i++)
    @@ -238,14 +243,14 @@ function updateTotal(days,mode)
             var total =0;
             var nbline = document.getElementById('numberOfLines').value;
             for (var i=-1; i<nbline; i++)
    -        { 
    -            var id='timespent['+i+']['+days+']';   
    +        {
    +            var id='timespent['+i+']['+days+']';
                 var taskTime= new Date(0);
                 var element=document.getElementById(id);
                 if(element)
                 {
                     if (element.value)
    -                {   
    +                {
                         total+=parseInt(element.value);
     
                        }
    @@ -255,13 +260,13 @@ function updateTotal(days,mode)
                     }
                 }
     
    -            var id='timeadded['+i+']['+days+']';   
    +            var id='timeadded['+i+']['+days+']';
                 var taskTime= new Date(0);
                 var element=document.getElementById(id);
                 if(element)
                 {
                     if (element.value)
    -                {   
    +                {
                         total+=parseInt(element.value);
     
                        }
    @@ -271,11 +276,9 @@ function updateTotal(days,mode)
                     }
                 }
             }
    -        
    +
             if (total) jQuery('.totalDay'+days).addClass("bold");
             else jQuery('.totalDay'+days).removeClass("bold");
         	jQuery('.totalDay'+days).text(total);
         }
     }
    -
    -   
    \ No newline at end of file
    diff --git a/htdocs/core/lib/admin.lib.php b/htdocs/core/lib/admin.lib.php
    index f4b027840c1..9d3bc24bd76 100644
    --- a/htdocs/core/lib/admin.lib.php
    +++ b/htdocs/core/lib/admin.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2011  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2016  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2016  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2012       J. Fernando Lagrange    <fernando@demo-tic.org>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
    @@ -108,28 +108,37 @@ function versiondolibarrarray()
     
     
     /**
    - *	Launch a sql file. Function used by:
    + *	Launch a sql file. Function is used by:
      *  - Migrate process (dolibarr-xyz-abc.sql)
      *  - Loading sql menus (auguria)
      *  - Running specific Sql by a module init
    + *  - Loading sql file of website import package
      *  Install process however does not use it.
    - *  Note that Sql files must have all comments at start of line.
    + *  Note that Sql files must have all comments at start of line. Also this function take ';' as the char to detect end of sql request
      *
    - *	@param		string	$sqlfile					Full path to sql file
    - * 	@param		int		$silent						1=Do not output anything, 0=Output line for update page
    - * 	@param		int		$entity						Entity targeted for multicompany module
    - *	@param		int		$usesavepoint				1=Run a savepoint before each request and a rollback to savepoint if error (this allow to have some request with errors inside global transactions).
    - *	@param		string	$handler					Handler targeted for menu
    - *	@param 		string	$okerror					Family of errors we accept ('default', 'none')
    + *	@param		string	$sqlfile			Full path to sql file
    + * 	@param		int		$silent				1=Do not output anything, 0=Output line for update page
    + * 	@param		int		$entity				Entity targeted for multicompany module
    + *	@param		int		$usesavepoint		1=Run a savepoint before each request and a rollback to savepoint if error (this allow to have some request with errors inside global transactions).
    + *	@param		string	$handler			Handler targeted for menu (replace __HANDLER__ with this value)
    + *	@param 		string	$okerror			Family of errors we accept ('default', 'none')
    + *  @param		int		$linelengthlimit	Limit for length of each line (Use 0 if unknown, may be faster if defined)
    + *  @param		int		$nocommentremoval	Do no try to remove comments (in such a case, we consider that each line is a request, so use also $linelengthlimit=0)
      *  @param		int		$offsetforchartofaccount	Offset to use to load chart of account table to update sql on the fly to add offset to rowid and account_parent value
    - * 	@return		int									<=0 if KO, >0 if OK
    + * 	@return		int							<=0 if KO, >0 if OK
      */
    -function run_sql($sqlfile, $silent=1, $entity='', $usesavepoint=1, $handler='', $okerror='default', $offsetforchartofaccount=0)
    +function run_sql($sqlfile, $silent=1, $entity='', $usesavepoint=1, $handler='', $okerror='default', $linelengthlimit=32768, $nocommentremoval=0, $offsetforchartofaccount=0)
     {
         global $db, $conf, $langs, $user;
     
         dol_syslog("Admin.lib::run_sql run sql file ".$sqlfile." silent=".$silent." entity=".$entity." usesavepoint=".$usesavepoint." handler=".$handler." okerror=".$okerror, LOG_DEBUG);
     
    +    if (! is_numeric($linelengthlimit))
    +    {
    +    	dol_syslog("Admin.lib::run_sql param linelengthlimit is not a numeric", LOG_ERR);
    +    	return -1;
    +    }
    +
         $ok=0;
         $error=0;
         $i=0;
    @@ -144,7 +153,9 @@ function run_sql($sqlfile, $silent=1, $entity='', $usesavepoint=1, $handler='',
         {
             while (! feof($fp))
             {
    -            $buf = fgets($fp, 32768);
    +        	// Warning fgets with second parameter that is null or 0 hang.
    +        	if ($linelengthlimit > 0) $buf = fgets($fp, $linelengthlimit);
    +        	else $buf = fgets($fp);
     
                 // Test if request must be ran only for particular database or version (if yes, we must remove the -- comment)
                 if (preg_match('/^--\sV(MYSQL|PGSQL)([^\s]*)/i',$buf,$reg))
    @@ -192,13 +203,13 @@ function run_sql($sqlfile, $silent=1, $entity='', $usesavepoint=1, $handler='',
                 }
     
                 // Add line buf to buffer if not a comment
    -            if (! preg_match('/^\s*--/',$buf))
    +            if ($nocommentremoval || ! preg_match('/^\s*--/',$buf))
                 {
    -                $buf=preg_replace('/([,;ERLT\)])\s*--.*$/i','\1',$buf); //remove comment from a line that not start with -- before add it to the buffer
    +            	if (empty($nocommentremoval)) $buf=preg_replace('/([,;ERLT\)])\s*--.*$/i','\1',$buf); //remove comment from a line that not start with -- before add it to the buffer
                     $buffer .= trim($buf);
                 }
     
    -            //          print $buf.'<br>';
    +            //print $buf.'<br>';exit;
     
                 if (preg_match('/;/',$buffer))	// If string contains ';', it's end of a request string, we save it in arraysql.
                 {
    @@ -230,7 +241,7 @@ function run_sql($sqlfile, $silent=1, $entity='', $usesavepoint=1, $handler='',
                 if (! isset($listofmaxrowid[$table]))
                 {
                     //var_dump($db);
    -                $sqlgetrowid='SELECT MAX(rowid) as max from '.$table;
    +                $sqlgetrowid='SELECT MAX(rowid) as max from '.preg_replace('/^llx_/', MAIN_DB_PREFIX, $table);
                     $resql=$db->query($sqlgetrowid);
                     if ($resql)
                     {
    @@ -247,9 +258,10 @@ function run_sql($sqlfile, $silent=1, $entity='', $usesavepoint=1, $handler='',
                         break;
                     }
                 }
    +            // Replace __+MAX_llx_table__ with +999
                 $from='__+MAX_'.$table.'__';
                 $to='+'.$listofmaxrowid[$table];
    -            $newsql=str_replace($from,$to,$newsql);
    +            $newsql=str_replace($from, $to, $newsql);
                 dol_syslog('Admin.lib::run_sql New Request '.($i+1).' (replacing '.$from.' to '.$to.')', LOG_DEBUG);
     
                 $arraysql[$i]=$newsql;
    @@ -717,6 +729,11 @@ function defaultvalues_prepare_head()
         $head[$h][2] = 'focus';
         $h++;
     
    +    $head[$h][0] = DOL_URL_ROOT."/admin/defaultvalues.php?mode=mandatory";
    +    $head[$h][1] = $langs->trans("DefaultMandatory");
    +    $head[$h][2] = 'mandatory';
    +    $h++;
    +
         /*$head[$h][0] = DOL_URL_ROOT."/admin/translation.php?mode=searchkey";
         $head[$h][1] = $langs->trans("TranslationKeySearch");
         $head[$h][2] = 'searchkey';
    @@ -915,10 +932,11 @@ function activateModule($value,$withdeps=1)
                 if (isset($objMod->depends) && is_array($objMod->depends) && ! empty($objMod->depends))
                 {
                     // Activation of modules this module depends on
    -                // this->depends may be array('modModule1', 'mmodModule2') or array('always'=>"modModule1", 'FR'=>'modModule2')
    +                // this->depends may be array('modModule1', 'mmodModule2') or array('always1'=>"modModule1", 'FR'=>'modModule2')
                     foreach ($objMod->depends as $key => $modulestring)
                     {
    -                    if ((! is_numeric($key)) && $key != 'always' && $key != $mysoc->country_code)
    +                	//var_dump((! is_numeric($key)) && ! preg_match('/^always/', $key) && $mysoc->country_code && ! preg_match('/^'.$mysoc->country_code.'/', $key));exit;
    +                	if ((! is_numeric($key)) && ! preg_match('/^always/', $key) && $mysoc->country_code && ! preg_match('/^'.$mysoc->country_code.'/', $key))
                         {
                             dol_syslog("We are not concerned by dependency with key=".$key." because our country is ".$mysoc->country_code);
                             continue;
    @@ -1214,9 +1232,8 @@ function activateModulesRequiredByCountry($country_code)
     							{
     								activateModule($modName);
     
    -								setEventMessage($objMod->automatic_activation[$country_code],'warnings');
    +								setEventMessages($objMod->automatic_activation[$country_code], null, 'warnings');
     							}
    -
     						}
     						else dol_syslog("Module ".get_class($objMod)." not qualified");
     					}
    @@ -1336,7 +1353,8 @@ function complete_elementList_with_modules(&$elementList)
     /**
      *	Show array with constants to edit
      *
    - *	@param	array	$tableau		Array of constants array('key'=>type, ) where type can be 'string', 'text', 'textarea', 'html', 'yesno', 'emailtemplate:xxx', ...
    + *	@param	array	$tableau		Array of constants array('key'=>array('type'=>type, 'label'=>label)
    + *									where type can be 'string', 'text', 'textarea', 'html', 'yesno', 'emailtemplate:xxx', ...
      *	@param	int		$strictw3c		0=Include form into table (deprecated), 1=Form is outside table to respect W3C (no form into table), 2=No form nor button at all
      *  @param  string  $helptext       Help
      *	@return	void
    @@ -1360,17 +1378,28 @@ function form_constantes($tableau, $strictw3c=0, $helptext='')
         if (empty($strictw3c)) print '<td align="center" width="80">'.$langs->trans("Action").'</td>';
         print "</tr>\n";
     
    +    $label='';
         $listofparam=array();
         foreach($tableau as $key => $const)	// Loop on each param
         {
    +    	$label='';
         	// $const is a const key like 'MYMODULE_ABC'
    -    	if (is_numeric($key)) {
    +    	if (is_numeric($key)) {		// Very old behaviour
         		$type = 'string';
         	}
         	else
         	{
    -    		$type = $const;
    -    		$const = $key;
    +    		if (is_array($const))
    +    		{
    +    			$type = $const['type'];
    +				$label = $const['label'];
    +    			$const = $key;
    +    		}
    +    		else
    +    		{
    +    			$type = $const;
    +    			$const = $key;
    +    		}
         	}
     
             $sql = "SELECT ";
    @@ -1411,7 +1440,7 @@ function form_constantes($tableau, $strictw3c=0, $helptext='')
                 print '<input type="hidden" name="constnote_'.$obj->name.'" value="'.nl2br(dol_escape_htmltag($obj->note)).'">';
                 print '<input type="hidden" name="consttype_'.$obj->name.'" value="'.($obj->type?$obj->type:'string').'">';
     
    -            print $langs->trans('Desc'.$const);
    +            print ($label ? $label : $langs->trans('Desc'.$const));
     
                 if ($const == 'ADHERENT_MAILMAN_URL')
                 {
    @@ -1702,7 +1731,7 @@ function email_admin_prepare_head()
     	$h = 0;
     	$head = array();
     
    -	if ($user->admin && (empty($_SESSION['leftmenu']) || $_SESSION['leftmenu'] != 'email_templates'))
    +	if (! empty($user->admin) && (empty($_SESSION['leftmenu']) || $_SESSION['leftmenu'] != 'email_templates'))
     	{
     		$head[$h][0] = DOL_URL_ROOT."/admin/mails.php";
     		$head[$h][1] = $langs->trans("OutGoingEmailSetup");
    @@ -1723,7 +1752,7 @@ function email_admin_prepare_head()
     	$head[$h][2] = 'templates';
     	$h++;
     
    -	if ($conf->global->MAIN_FEATURES_LEVEL >= 1)
    +	if ($conf->global->MAIN_FEATURES_LEVEL >= 1 && ! empty($user->admin) && (empty($_SESSION['leftmenu']) || $_SESSION['leftmenu'] != 'email_templates'))
     	{
     		$head[$h][0] = DOL_URL_ROOT."/admin/mails_senderprofile_list.php";
     		$head[$h][1] = $langs->trans("EmailSenderProfiles");
    diff --git a/htdocs/core/lib/agenda.lib.php b/htdocs/core/lib/agenda.lib.php
    index a6562af2729..6dab036193d 100644
    --- a/htdocs/core/lib/agenda.lib.php
    +++ b/htdocs/core/lib/agenda.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011	   Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -64,11 +64,11 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh
     	print '<input type="hidden" name="month" value="' . $month . '">';
     	print '<input type="hidden" name="day" value="' . $day . '">';
     	print '<input type="hidden" name="action" value="' . $action . '">';
    -	print '<input type="hidden" name="showbirthday" value="' . $showbirthday . '">';
    +	print '<input type="hidden" name="search_showbirthday" value="' . $showbirthday . '">';
     
     	print '<div class="fichecenter">';
     
    -	if (! empty($conf->browser->phone)) print '<div class="fichehalfleft">';
    +	if ($conf->browser->layout == 'phone') print '<div class="fichehalfleft">';
     	else print '<table class="nobordernopadding" width="100%"><tr><td class="borderright">';
     
     	print '<table class="nobordernopadding centpercent">';
    @@ -79,7 +79,7 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh
     		print '<td class="nowrap" style="padding-bottom: 2px; padding-right: 4px;">';
     		print $langs->trans("ActionsToDoBy").' &nbsp; ';
     		print '</td><td style="padding-bottom: 2px; padding-right: 4px;">';
    -		print $form->select_dolusers($filtert, 'filtert', 1, '', ! $canedit, '', '', 0, 0, 0, '', 0, '', 'maxwidth300');
    +		print $form->select_dolusers($filtert, 'search_filtert', 1, '', ! $canedit, '', '', 0, 0, 0, '', 0, '', 'maxwidth300');
     		if (empty($conf->dol_optimize_smallscreen)) print ' &nbsp; '.$langs->trans("or") . ' '.$langs->trans("ToUserOfGroup").' &nbsp; ';
     		print $form->select_dolgroups($usergroupid, 'usergroup', 1, '', ! $canedit);
     		print '</td></tr>';
    @@ -94,7 +94,7 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh
         		print '<td class="nowrap" style="padding-bottom: 2px; padding-right: 4px;">';
         		print $langs->trans("Resource");
         		print ' &nbsp;</td><td class="nowrap maxwidthonsmartphone" style="padding-bottom: 2px; padding-right: 4px;">';
    -            print $formresource->select_resource_list($resourceid, "resourceid", '', 1, 0, 0, null, '', 2);
    +            print $formresource->select_resource_list($resourceid, "search_resourceid", '', 1, 0, 0, null, '', 2);
         		print '</td></tr>';
     		}
     
    @@ -108,7 +108,7 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh
     		{
                 $multiselect=(!empty($conf->global->AGENDA_USE_EVENT_TYPE));
     		}
    -        print $formactions->select_type_actions($actioncode, "actioncode", $excludetype, (empty($conf->global->AGENDA_USE_EVENT_TYPE)?1:-1), 0, $multiselect);
    +        print $formactions->select_type_actions($actioncode, "search_actioncode", $excludetype, (empty($conf->global->AGENDA_USE_EVENT_TYPE)?1:-1), 0, $multiselect);
     		print '</td></tr>';
     	}
     
    @@ -118,7 +118,7 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh
     		print '<td class="nowrap" style="padding-bottom: 2px; padding-right: 4px;">';
     		print $langs->trans("ThirdParty").' &nbsp; ';
     		print '</td><td class="nowrap" style="padding-bottom: 2px;">';
    -		print $form->select_company($socid, 'socid', '', 'SelectThirdParty', 0, 0, null, 0);
    +		print $form->select_company($socid, 'search_socid', '', 'SelectThirdParty', 0, 0, null, 0);
     		print '</td></tr>';
     	}
     
    @@ -131,7 +131,7 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh
     		print '<td class="nowrap" style="padding-bottom: 2px;">';
     		print $langs->trans("Project").' &nbsp; ';
     		print '</td><td class="nowrap" style="padding-bottom: 2px;">';
    -		print $formproject->select_projects($socid?$socid:-1, $pid, 'projectid', 0, 0, 1, 0, 0, 0, 0, '', 1, 0, 'maxwidth500');
    +		print $formproject->select_projects($socid?$socid:-1, $pid, 'search_projectid', 0, 0, 1, 0, 0, 0, 0, '', 1, 0, 'maxwidth500');
     		print '</td></tr>';
     	}
     
    @@ -142,7 +142,7 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh
     		print '<td class="nowrap" style="padding-bottom: 2px; padding-right: 4px;">';
     		print $langs->trans("Status");
     		print ' &nbsp;</td><td class="nowrap" style="padding-bottom: 2px; padding-right: 4px;">';
    -		$formactions->form_select_status_action('formaction', $status, 1, 'status', 1, 2, 'minwidth100');
    +		$formactions->form_select_status_action('formaction', $status, 1, 'search_status', 1, 2, 'minwidth100');
     		print '</td></tr>';
     	}
     
    @@ -180,10 +180,10 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh
     
     	print '</table>';
     
    -	if (! empty($conf->browser->phone)) print '</div>';
    +	if ($conf->browser->layout == 'phone') print '</div>';
     	else print '</td>';
     
    -	if (! empty($conf->browser->phone)) print '<div class="fichehalfright">';
    +	if ($conf->browser->layout == 'phone') print '<div class="fichehalfright">';
     	else print '<td align="center" valign="middle" class="nowrap">';
     
     	print '<table class="centpercent"><tr><td align="center">';
    @@ -193,7 +193,7 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh
     	print '</td></tr>';
     	print '</table>';
     
    -	if (! empty($conf->browser->phone)) print '</div>';
    +	if ($conf->browser->layout == 'phone') print '</div>';
     	else print '</td></tr></table>';
     
     	print '</div>';	// Close fichecenter
    diff --git a/htdocs/core/lib/ajax.lib.php b/htdocs/core/lib/ajax.lib.php
    index 1d16ba84858..afff8198e09 100644
    --- a/htdocs/core/lib/ajax.lib.php
    +++ b/htdocs/core/lib/ajax.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2015 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Christophe Battarel  <christophe.battarel@altairis.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -35,12 +35,12 @@
      *  @param	string	$urloption			More parameters on URL request
      *  @param	int		$minLength			Minimum number of chars to trigger that Ajax search
      *  @param	int		$autoselect			Automatic selection if just one value
    - *  @param	array	$ajaxoptions		Multiple options array
    - *                                          Ex: array('update'=>array('field1','field2'...)) will reset field1 and field2 once select done
    - *                                          Ex: array('disabled'=> )
    - *                                          Ex: array('show'=> )
    - *                                          Ex: array('update_textarea'=> )
    - *                                          Ex: array('option_disabled'=> id to disable and warning to show if we select a disabled value (this is possible when using autocomplete ajax)
    + *  @param	array   $ajaxoptions		Multiple options array
    + *                                      - Ex: array('update'=>array('field1','field2'...)) will reset field1 and field2 once select done
    + *                                      - Ex: array('disabled'=> )
    + *                                      - Ex: array('show'=> )
    + *                                      - Ex: array('update_textarea'=> )
    + *                                      - Ex: array('option_disabled'=> id to disable and warning to show if we select a disabled value (this is possible when using autocomplete ajax)
      *	@return string              		Script
      */
     function ajax_autocompleter($selected, $htmlname, $url, $urloption='', $minLength=2, $autoselect=0, $ajaxoptions=array())
    @@ -377,7 +377,7 @@ function ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $
     
     	// select2 disabled for smartphones with standard browser.
     	// TODO With select2 v4, it seems ok, except that responsive style on table become crazy when scrolling at end of array)
    -	if (! empty($conf->browser->phone)) return '';
    +	if ($conf->browser->layout == 'phone') return '';
     
     	if (! empty($conf->global->MAIN_DISABLE_AJAX_COMBOX)) return '';
     	if (empty($conf->use_javascript_ajax)) return '';
    @@ -622,4 +622,3 @@ function ajax_object_onoff($object, $code, $field, $text_on, $text_off, $input=a
     
         return $out;
     }
    -
    diff --git a/htdocs/core/lib/asset.lib.php b/htdocs/core/lib/asset.lib.php
    index 5953c8b9420..b0a4a6b81a9 100644
    --- a/htdocs/core/lib/asset.lib.php
    +++ b/htdocs/core/lib/asset.lib.php
    @@ -16,7 +16,7 @@
      */
     
     /**
    - * \file    core/lib/assets.lib.php
    + * \file    htdocs/core/lib/asset.lib.php
      * \ingroup asset
      * \brief   Library files with common functions for Assets
      */
    @@ -24,9 +24,9 @@
     /**
      * Prepare admin pages header
      *
    - * @return array
    + * @return array head array with tabs
      */
    -function AssetsAdminPrepareHead()
    +function asset_admin_prepare_head()
     {
     	global $langs, $conf;
     
    @@ -65,7 +65,12 @@ function AssetsAdminPrepareHead()
     	return $head;
     }
     
    -function AssetsPrepareHead()
    +/**
    + * Prepare admin pages header
    + *
    + * @return array head array with tabs
    + */
    +function asset_prepare_head()
     {
     	global $langs, $conf;
     
    diff --git a/htdocs/core/lib/bank.lib.php b/htdocs/core/lib/bank.lib.php
    index 5e1e300520c..28845122f0d 100644
    --- a/htdocs/core/lib/bank.lib.php
    +++ b/htdocs/core/lib/bank.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2016	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2015		Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2016		Juanjo Menent   	<jmenent@2byte.es>
      *
    @@ -161,7 +161,8 @@ function bank_admin_prepare_head($object)
      * @param   Object	$object		Object related to tabs
      * @return  array				Array of tabs to shoc
      */
    -function various_payment_prepare_head($object) {
    +function various_payment_prepare_head($object)
    +{
     
     	global $db, $langs, $conf;
     
    @@ -214,7 +215,6 @@ function checkSwiftForAccount($account)
         } else {
             return false;
         }
    -
     }
     
     /**
    @@ -356,7 +356,7 @@ function checkES($IentOfi, $InumCta)
         $sum = 0;
     
         for ($i = 0; $i < 11; $i++) {
    -        $sum += $values[$i] * substr($InumCta, $i, 1);
    +        $sum += $values[$i] * (int) substr($InumCta, $i, 1);//int to cast result of substr to a number
         }
     
         $key = 11 - $sum % 11;
    @@ -369,4 +369,3 @@ function checkES($IentOfi, $InumCta)
         $keycontrol .= $key;
         return $keycontrol;
     }
    -
    diff --git a/htdocs/core/lib/barcode.lib.php b/htdocs/core/lib/barcode.lib.php
    index 13956f688aa..efd245209d2 100644
    --- a/htdocs/core/lib/barcode.lib.php
    +++ b/htdocs/core/lib/barcode.lib.php
    @@ -251,7 +251,7 @@ function barcode_encode_genbarcode($code,$encoding)
         $command=escapeshellarg($genbarcode_loc);
         //$paramclear=" \"".str_replace("\"", "\\\"",$code)."\" \"".str_replace("\"", "\\\"",strtoupper($encoding))."\"";
         $paramclear=" ".escapeshellarg($code)." ".escapeshellarg(strtoupper($encoding));
    -    
    +
         $fullcommandclear=$command." ".$paramclear." 2>&1";
         //print $fullcommandclear."<br>\n";exit;
     
    @@ -277,8 +277,8 @@ function barcode_encode_genbarcode($code,$encoding)
         	"error" => ""
         );
         //var_dump($ret);
    -    if (preg_match('/permission denied/i',$ret['bars'])) 
    -    { 
    +    if (preg_match('/permission denied/i',$ret['bars']))
    +    {
         	$ret['error']=$ret['bars']; $ret['bars']='';
         	return $ret;
         }
    diff --git a/htdocs/core/lib/categories.lib.php b/htdocs/core/lib/categories.lib.php
    index 4be484e1aa4..4d85c412bab 100644
    --- a/htdocs/core/lib/categories.lib.php
    +++ b/htdocs/core/lib/categories.lib.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,8 +33,8 @@ function categories_prepare_head($object,$type)
     {
     	global $langs, $conf, $user;
     
    -	$langs->load("categories");
    -	$langs->load("products");
    +	// Load translation files required by the page
    +    $langs->loadLangs(array('categories', 'products'));
     
     	$h = 0;
     	$head = array();
    @@ -48,7 +48,7 @@ function categories_prepare_head($object,$type)
     	$head[$h][1] = $langs->trans("Photos");
     	$head[$h][2] = 'photos';
     	$h++;
    -	
    +
     	if (! empty($conf->global->MAIN_MULTILANGS))
     	{
         	$head[$h][0] = DOL_URL_ROOT.'/categories/traduction.php?id='.$object->id.'&amp;type='.$type;
    @@ -56,7 +56,7 @@ function categories_prepare_head($object,$type)
         	$head[$h][2] = 'translation';
         	$h++;
     	}
    -	
    +
         // Show more tabs from modules
         // Entries must be declared in modules descriptor with line
         // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__');   to add new tab
    @@ -87,7 +87,7 @@ function categoriesadmin_prepare_head()
     	$head[$h][1] = $langs->trans("Setup");
     	$head[$h][2] = 'setup';
     	$h++;
    -	
    +
     	$head[$h][0] = DOL_URL_ROOT.'/categories/admin/categorie_extrafields.php';
     	$head[$h][1] = $langs->trans("ExtraFieldsCategories");
     	$head[$h][2] = 'attributes_categories';
    diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php
    index c00d4469b05..febd4fcb703 100644
    --- a/htdocs/core/lib/company.lib.php
    +++ b/htdocs/core/lib/company.lib.php
    @@ -2,15 +2,15 @@
     /* Copyright (C) 2006-2011  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2006       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2007       Patrick Raguin          <patrick.raguin@gmail.com>
    - * Copyright (C) 2010-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2013-2014  Florian Henry           <florian.henry@open-concept.pro>
      * Copyright (C) 2013-2014  Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2013       Christophe Battarel     <contact@altairis.fr>
    - * Copyright (C) 2013       Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    - * Copyright (C) 2015       Frederic France         <frederic.france@free.fr>
    + * Copyright (C) 2013-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2015-2018  Frédéric France         <frederic.france@netlogic.fr>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) 2017       Rui Strecht			    <rui.strecht@aliartalentos.com>
    - * Copyright (C) 2018       Ferran Marcet		    <fmarcet@2byte.es>
    + * Copyright (C) 2017       Rui Strecht             <rui.strecht@aliartalentos.com>
    + * Copyright (C) 2018       Ferran Marcet           <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -155,18 +155,18 @@ function societe_prepare_head(Societe $object)
     		// Tab to accountancy
     		if (! empty($conf->accounting->enabled) && $object->client>0)
     		{
    -			$head[$h][0] = DOL_URL_ROOT.'/accountancy/bookkeeping/thirdparty_lettrage.php?socid='.$object->id;
    -			$head[$h][1] = $langs->trans("TabAccountingCustomer");
    -			$head[$h][2] = 'accounting';
    +			$head[$h][0] = DOL_URL_ROOT.'/accountancy/bookkeeping/thirdparty_lettering_customer.php?socid='.$object->id;
    +			$head[$h][1] = $langs->trans("TabLetteringCustomer");
    +			$head[$h][2] = 'lettering_customer';
     			$h++;
     		}
     
     		// Tab to accountancy
     		if (! empty($conf->accounting->enabled) && $object->fournisseur>0)
     		{
    -			$head[$h][0] = DOL_URL_ROOT.'/accountancy/bookkeeping/thirdparty_lettrage_supplier.php?socid='.$object->id;
    -			$head[$h][1] = $langs->trans("TabAccountingSupplier");
    -			$head[$h][2] = 'accounting_supplier';
    +			$head[$h][0] = DOL_URL_ROOT.'/accountancy/bookkeeping/thirdparty_lettering_supplier.php?socid='.$object->id;
    +			$head[$h][1] = $langs->trans("TabLetteringSupplier");
    +			$head[$h][2] = 'lettering_supplier';
     			$h++;
     		}
     	}
    @@ -635,7 +635,6 @@ function getFormeJuridiqueLabel($code)
             {
                 return $langs->trans("NotDefined");
             }
    -
         }
     }
     
    @@ -911,7 +910,7 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='')
         {
         	if (GETPOST('search_'.$key,'alpha')) $search[$key]=GETPOST('search_'.$key,'alpha');
         }
    -    $search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +    $search_array_options=$extrafields->getOptionalsFromPost($contactstatic->table_element,'','search_');
     
         // Purge search criteria
         if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') ||GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers
    @@ -1246,12 +1245,12 @@ function show_addresses($conf,$langs,$db,$object,$backtopage='')
     			print "</tr>\n";
     		}
     	}
    -	else
    -	{
    +	//else
    +	//{
     		//print '<tr class="oddeven">';
     		//print '<td>'.$langs->trans("NoAddressYetDefined").'</td>';
     		//print "</tr>\n";
    -	}
    +	//}
     	print "\n</table>\n";
     
     	print "<br>\n";
    @@ -1287,7 +1286,7 @@ function show_actions_todo($conf,$langs,$db,$filterobj,$objcon='',$noprint=0,$ac
      * 		@param	Conf		       $conf		   Object conf
      * 		@param	Translate	       $langs		   Object langs
      * 		@param	DoliDB		       $db			   Object db
    - * 		@param	mixed			   $filterobj	   Object Adherent|Societe|Project|Product|CommandeFournisseur
    + * 		@param	mixed			   $filterobj	   Object Adherent|Societe|Project|Product|CommandeFournisseur|Dolresource
      * 		@param	Contact		       $objcon		   Object contact
      *      @param  int			       $noprint        Return string but does not output it
      *      @param  string		       $actioncode     Filter on actioncode
    @@ -1327,30 +1326,37 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=
             $sql.= " c.code as acode, c.libelle as alabel, c.picto as apicto,";
             $sql.= " u.rowid as user_id, u.login as user_login, u.photo as user_photo, u.firstname as user_firstname, u.lastname as user_lastname";
             if (is_object($filterobj) && get_class($filterobj) == 'Societe')  $sql.= ", sp.lastname, sp.firstname";
    -        if (is_object($filterobj) && get_class($filterobj) == 'Adherent') $sql.= ", m.lastname, m.firstname";
    -        if (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql.= ", o.ref";
    -        if (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", o.ref";
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') $sql.= ", m.lastname, m.firstname";
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql.= ", o.ref";
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", o.ref";
             $sql.= " FROM ".MAIN_DB_PREFIX."actioncomm as a";
             $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on u.rowid = a.fk_user_action";
             $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_actioncomm as c ON a.fk_action = c.id";
             if (is_object($filterobj) && get_class($filterobj) == 'Societe')  $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as sp ON a.fk_contact = sp.rowid";
    -        if (is_object($filterobj) && get_class($filterobj) == 'Adherent') $sql.= ", ".MAIN_DB_PREFIX."adherent as m";
    -        if (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as o";
    -        if (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", ".MAIN_DB_PREFIX."product as o";
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'Dolresource') {
    +        	$sql.= " INNER JOIN ".MAIN_DB_PREFIX."element_resources as er";
    +        	$sql.= " ON er.resource_type = 'dolresource'";
    +        	$sql.= " AND er.element_id = a.id";
    +        	$sql.= " AND er.resource_id = ".$filterobj->id;
    +        }
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent') $sql.= ", ".MAIN_DB_PREFIX."adherent as m";
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur') $sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as o";
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'Product') $sql.= ", ".MAIN_DB_PREFIX."product as o";
    +
             $sql.= " WHERE a.entity IN (".getEntity('agenda').")";
             if (is_object($filterobj) && get_class($filterobj) == 'Societe'  && $filterobj->id) $sql.= " AND a.fk_soc = ".$filterobj->id;
    -        if (is_object($filterobj) && get_class($filterobj) == 'Project' && $filterobj->id) $sql.= " AND a.fk_project = ".$filterobj->id;
    -        if (is_object($filterobj) && get_class($filterobj) == 'Adherent')
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'Project' && $filterobj->id) $sql.= " AND a.fk_project = ".$filterobj->id;
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'Adherent')
             {
                 $sql.= " AND a.fk_element = m.rowid AND a.elementtype = 'member'";
                 if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id;
             }
    -        if (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur')
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'CommandeFournisseur')
             {
             	$sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'order_supplier'";
             	if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id;
             }
    -        if (is_object($filterobj) && get_class($filterobj) == 'Product')
    +        elseif (is_object($filterobj) && get_class($filterobj) == 'Product')
             {
             	$sql.= " AND a.fk_element = o.rowid AND a.elementtype = 'product'";
             	if ($filterobj->id) $sql.= " AND a.fk_element = ".$filterobj->id;
    @@ -1367,7 +1373,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=
                     else
                     {
                         if ($actioncode == 'AC_OTH') $sql.= " AND c.type != 'systemauto'";
    -                    if ($actioncode == 'AC_OTH_AUTO') $sql.= " AND c.type = 'systemauto'";
    +                    elseif ($actioncode == 'AC_OTH_AUTO') $sql.= " AND c.type = 'systemauto'";
                     }
                 }
                 else
    @@ -1378,7 +1384,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=
                 }
             }
             if ($donetodo == 'todo') $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))";
    -        if ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))";
    +        elseif ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))";
             if (is_array($filters) && $filters['search_agenda_label']) $sql.= natural_search('a.label', $filters['search_agenda_label']);
             $sql.= $db->order($sortfield, $sortorder);
             dol_syslog("company.lib::show_actions_done", LOG_DEBUG);
    @@ -1401,7 +1407,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=
                     }
     
                     //if ($donetodo == 'todo') $sql.= " AND ((a.percent >= 0 AND a.percent < 100) OR (a.percent = -1 AND a.datep > '".$db->idate($now)."'))";
    -                //if ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))";
    +                //elseif ($donetodo == 'done') $sql.= " AND (a.percent = 100 OR (a.percent = -1 AND a.datep <= '".$db->idate($now)."'))";
                     $tododone='';
                     if (($obj->percent >= 0 and $obj->percent < 100) || ($obj->percent == -1 && $obj->datep > $now)) $tododone='todo';
     
    @@ -1499,13 +1505,10 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=
         {
             $delay_warning=$conf->global->MAIN_DELAY_ACTIONS_TODO*24*60*60;
     
    -        require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
             require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
    -        require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
    -        require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
    -        require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
    -        require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    -        require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +	    require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
    +	    require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     
             $formactions=new FormActions($db);
     
    @@ -1513,12 +1516,6 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=
             $userstatic=new User($db);
             $contactstatic = new Contact($db);
     
    -        // TODO mutualize/uniformize
    -        $propalstatic=new Propal($db);
    -        $orderstatic=new Commande($db);
    -        $supplierorderstatic=new CommandeFournisseur($db);
    -        $facturestatic=new Facture($db);
    -
             $out.='<form name="listactionsfilter" class="listactionsfilter" action="' . $_SERVER["PHP_SELF"] . '" method="POST">';
             if ($objcon && get_class($objcon) == 'Contact' && $filterobj && get_class($filterobj) == 'Societe')
             {
    @@ -1606,7 +1603,7 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=
                 $out.='</td>';
     
                 // Author of event
    -            $out.='<td>';
    +            $out.='<td class="tdoverflowmax100">';
                 //$userstatic->id=$histo[$key]['userid'];
                 //$userstatic->login=$histo[$key]['login'];
                 //$out.=$userstatic->getLoginUrl(1);
    @@ -1679,45 +1676,10 @@ function show_actions_done($conf, $langs, $db, $filterobj, $objcon='', $noprint=
                 //$out.='<td>'.dol_trunc($histo[$key]['note'], 40).'</td>';
     
                 // Objet lie
    -            // TODO mutualize/uniformize
                 $out.='<td>';
    -            //var_dump($histo[$key]['elementtype']);
    -            if (isset($histo[$key]['elementtype']))
    +            if (isset($histo[$key]['elementtype']) && !empty($histo[$key]['fk_element']))
                 {
    -            	if ($histo[$key]['elementtype'] == 'propal' && ! empty($conf->propal->enabled))
    -            	{
    -            		//$propalstatic->ref=$langs->trans("ProposalShort");
    -            		//$propalstatic->id=$histo[$key]['fk_element'];
    -                    if ($propalstatic->fetch($histo[$key]['fk_element'])>0) {
    -                        $propalstatic->type=$histo[$key]['ftype'];
    -                        $out.=$propalstatic->getNomUrl(1);
    -                    } else {
    -                        //$out.= '<span class="opacitymedium">'.$langs->trans("ProposalDeleted").'</span>';
    -                    }
    -             	}
    -            	elseif (($histo[$key]['elementtype'] == 'order' || $histo[$key]['elementtype'] == 'commande') && ! empty($conf->commande->enabled))
    -            	{
    -            		//$orderstatic->ref=$langs->trans("Order");
    -            		//$orderstatic->id=$histo[$key]['fk_element'];
    -                    if ($orderstatic->fetch($histo[$key]['fk_element'])>0) {
    -                        $orderstatic->type=$histo[$key]['ftype'];
    -                        $out.=$orderstatic->getNomUrl(1);
    -                    } else {
    -                    	//$out.= '<span class="opacitymedium">'.$langs->trans("OrderDeleted").'<span>';
    -                    }
    -             	}
    -            	elseif (($histo[$key]['elementtype'] == 'invoice' || $histo[$key]['elementtype'] == 'facture') && ! empty($conf->facture->enabled))
    -            	{
    -            		//$facturestatic->ref=$langs->trans("Invoice");
    -            		//$facturestatic->id=$histo[$key]['fk_element'];
    -                    if ($facturestatic->fetch($histo[$key]['fk_element'])>0) {
    -                        $facturestatic->type=$histo[$key]['ftype'];
    -                        $out.=$facturestatic->getNomUrl(1,'compta');
    -                    } else {
    -                    	//$out.= '<span class="opacitymedium">'.$langs->trans("InvoiceDeleted").'</span>';
    -                    }
    -            	}
    -            	else $out.='&nbsp;';
    +            	$out.=dolGetElementUrl($histo[$key]['fk_element'],$histo[$key]['elementtype'],1);
                 }
                 else $out.='&nbsp;';
                 $out.='</td>';
    diff --git a/htdocs/core/lib/contact.lib.php b/htdocs/core/lib/contact.lib.php
    index f1d721b62e6..3c61410230f 100644
    --- a/htdocs/core/lib/contact.lib.php
    +++ b/htdocs/core/lib/contact.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2010  Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2017  Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2017  Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2015       Frederic France     <frederic.france@free.fr>
      * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
      *
    diff --git a/htdocs/core/lib/contract.lib.php b/htdocs/core/lib/contract.lib.php
    index 9d986e983bc..c7434e80878 100644
    --- a/htdocs/core/lib/contract.lib.php
    +++ b/htdocs/core/lib/contract.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php
    index 8985a4e7621..7ad40349589 100644
    --- a/htdocs/core/lib/date.lib.php
    +++ b/htdocs/core/lib/date.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2015 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2017      Ferran Marcet        <fmarcet@2byte.es>
      *
    @@ -162,15 +162,15 @@ function convertTime2Seconds($iHours=0,$iMinutes=0,$iSeconds=0)
      *
      *    	@param      int		$iSecond		Number of seconds
      *    	@param      string	$format		    Output format ('all': total delay days hour:min like "2 days 12:30",
    - *                                                         'allwithouthour': total delay days without hour part like "2 days",
    - *                                                         'allhourmin': total delay with format hours:min like "60:30",
    - *                                                         'allhour': total delay hours without min/sec like "60:30",
    - *                                                         'fullhour': total delay hour decimal like "60.5" for 60:30,
    - *                                                         'hour': only hours part "12",
    - *                                                         'min': only minutes part "30",
    - *                                                         'sec': only seconds part,
    - *                                                         'month': only month part,
    - *                                                         'year': only year part);
    + *                                          - 'allwithouthour': total delay days without hour part like "2 days",
    + *                                          - 'allhourmin': total delay with format hours:min like "60:30",
    + *                                          - 'allhour': total delay hours without min/sec like "60:30",
    + *                                          - 'fullhour': total delay hour decimal like "60.5" for 60:30,
    + *                                          - 'hour': only hours part "12",
    + *                                          - 'min': only minutes part "30",
    + *                                          - 'sec': only seconds part,
    + *                                          - 'month': only month part,
    + *                                          - 'year': only year part);
      *      @param      int		$lengthOfDay    Length of day (default 86400 seconds for 1 day, 28800 for 8 hour)
      *      @param      int		$lengthOfWeek   Length of week (default 7)
      *    	@return     string		 		 	Formated text of duration
    @@ -439,7 +439,6 @@ function dol_get_next_week($day, $week, $month, $year)
     	$tmparray=dol_getdate($time,true);
     
     	return array('year' => $tmparray['year'], 'month' => $tmparray['mon'], 'day' => $tmparray['mday']);
    -
     }
     
     /**	Return GMT time for first day of a month or year
    @@ -586,6 +585,7 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode='FR', $
     	{
     		$ferie=false;
     		$countryfound=0;
    +		$includesaturdayandsunday=1;
     
     		$jour  = date("d", $timestampStart);
     		$mois  = date("m", $timestampStart);
    @@ -672,12 +672,6 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode='FR', $
     			$mois_pentecote = date("m", $date_pentecote);
     			if($jour_pentecote == $jour && $mois_pentecote == $mois) $ferie=true;
     			// "Pentecote"
    -
    -			// Calul des samedis et dimanches
    -			$jour_julien = unixtojd($timestampStart);
    -			$jour_semaine = jddayofweek($jour_julien, 0);
    -			if($jour_semaine == 0 || $jour_semaine == 6) $ferie=true;
    -			// Samedi (6) et dimanche (0)
     		}
     
     		// Pentecoste and Ascensione in Italy go to the sunday after: isn't holiday.
    @@ -704,12 +698,18 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode='FR', $
     			$mois_paques = date("m", $date_paques);
     			if($jour_paques == $jour && $mois_paques == $mois) $ferie=true;
     			// Paques
    +		}
     
    -			// Calul des samedis et dimanches
    -			$jour_julien = unixtojd($timestampStart);
    -			$jour_semaine = jddayofweek($jour_julien, 0);
    -			if($jour_semaine == 0 || $jour_semaine == 6) $ferie=true;
    -			//Samedi (6) et dimanche (0)
    +		if ($countrycode == 'IN')
    +		{
    +			$countryfound=1;
    +
    +			if($jour == 1 && $mois == 1) $ferie=true; // New Year's Day
    +			if($jour == 26 && $mois == 1) $ferie=true; // Republic Day
    +			if($jour == 1 && $mois == 5) $ferie=true; // May Day
    +			if($jour == 15 && $mois == 8) $ferie=true; // Independence Day
    +			if($jour == 2 && $mois == 10) $ferie=true; // Gandhi Jayanti
    +			if($jour == 25 && $mois == 12) $ferie=true; // Christmas
     		}
     
     		if ($countrycode == 'ES')
    @@ -747,12 +747,6 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode='FR', $
     			$mois_viernes = date("m", $date_viernes);
     			if($jour_viernes == $jour && $mois_viernes == $mois) $ferie=true;
     			//Viernes Santo
    -
    -			// Calul des samedis et dimanches
    -			$jour_julien = unixtojd($timestampStart);
    -			$jour_semaine = jddayofweek($jour_julien, 0);
    -			if($jour_semaine == 0 || $jour_semaine == 6) $ferie=true;
    -			//Samedi (6) et dimanche (0)
     		}
     
     		if ($countrycode == 'AT')
    @@ -834,22 +828,15 @@ function num_public_holiday($timestampStart, $timestampEnd, $countrycode='FR', $
     		    $mois_fronleichnam = date("m", $date_fronleichnam);
     		    if($jour_fronleichnam == $jour && $mois_fronleichnam == $mois) $ferie=true;
     		    // Fronleichnam
    -
    -		    // Calul des samedis et dimanches
    -		    $jour_julien = unixtojd($timestampStart);
    -		    $jour_semaine = jddayofweek($jour_julien, 0);
    -		    if($jour_semaine == 0 || $jour_semaine == 6) $ferie=true;
    -		    //Samedi (6) et dimanche (0)
     		}
     
    -		// Cas pays non defini
    -		if (! $countryfound)
    +		// If we have to include saturday and sunday
    +		if ($includesaturdayandsunday)
     		{
    -			// Calul des samedis et dimanches
     			$jour_julien = unixtojd($timestampStart);
     			$jour_semaine = jddayofweek($jour_julien, 0);
     			if($jour_semaine == 0 || $jour_semaine == 6) $ferie=true;
    -			//Samedi (6) et dimanche (0)
    +			//Saturday (6) and Sunday (0)
     		}
     
     		// On incremente compteur
    @@ -946,44 +933,43 @@ function num_open_day($timestampStart, $timestampEnd, $inhour=0, $lastday=0, $ha
      *  This replace old function monthArrayOrSelected.
      *
      *	@param	Translate	$outputlangs	Object langs
    - *  @param	int			$short			1=Return short label
    + *  @param	int			$short			0=Return long label, 1=Return short label
      *	@return array						Month string or array if selected < 0
      */
     function monthArray($outputlangs,$short=0)
     {
     	$montharray = array (
    -	    1  => $outputlangs->trans("January"),
    -	    2  => $outputlangs->trans("February"),
    -	    3  => $outputlangs->trans("March"),
    -	    4  => $outputlangs->trans("April"),
    -	    5  => $outputlangs->trans("May"),
    -	    6  => $outputlangs->trans("June"),
    -	    7  => $outputlangs->trans("July"),
    -	    8  => $outputlangs->trans("August"),
    -	    9  => $outputlangs->trans("September"),
    -	    10 => $outputlangs->trans("October"),
    -	    11 => $outputlangs->trans("November"),
    -	    12 => $outputlangs->trans("December")
    +	    1  => $outputlangs->trans("Month01"),
    +	    2  => $outputlangs->trans("Month02"),
    +	    3  => $outputlangs->trans("Month03"),
    +	    4  => $outputlangs->trans("Month04"),
    +	    5  => $outputlangs->trans("Month05"),
    +	    6  => $outputlangs->trans("Month06"),
    +	    7  => $outputlangs->trans("Month07"),
    +	    8  => $outputlangs->trans("Month08"),
    +	    9  => $outputlangs->trans("Month09"),
    +	    10 => $outputlangs->trans("Month10"),
    +	    11 => $outputlangs->trans("Month11"),
    +	    12 => $outputlangs->trans("Month12")
         );
     
     	if (! empty($short))
     	{
     		$montharray = array (
    -		    1  => $outputlangs->trans("JanuaryMin"),
    -		    2  => $outputlangs->trans("FebruaryMin"),
    -		    3  => $outputlangs->trans("MarchMin"),
    -		    4  => $outputlangs->trans("AprilMin"),
    -		    5  => $outputlangs->trans("MayMin"),
    -		    6  => $outputlangs->trans("JuneMin"),
    -		    7  => $outputlangs->trans("JulyMin"),
    -		    8  => $outputlangs->trans("AugustMin"),
    -		    9  => $outputlangs->trans("SeptemberMin"),
    -		    10 => $outputlangs->trans("OctoberMin"),
    -		    11 => $outputlangs->trans("NovemberMin"),
    -		    12 => $outputlangs->trans("DecemberMin")
    +		    1  => $outputlangs->trans("MonthShort01"),
    +		    2  => $outputlangs->trans("MonthShort02"),
    +		    3  => $outputlangs->trans("MonthShort03"),
    +		    4  => $outputlangs->trans("MonthShort04"),
    +		    5  => $outputlangs->trans("MonthShort05"),
    +		    6  => $outputlangs->trans("MonthShort06"),
    +		    7  => $outputlangs->trans("MonthShort07"),
    +		    8  => $outputlangs->trans("MonthShort08"),
    +		    9  => $outputlangs->trans("MonthShort09"),
    +		    10 => $outputlangs->trans("MonthShort10"),
    +		    11 => $outputlangs->trans("MonthShort11"),
    +		    12 => $outputlangs->trans("MonthShort12")
     			);
     	}
     
     	return $montharray;
     }
    -
    diff --git a/htdocs/core/lib/doc.lib.php b/htdocs/core/lib/doc.lib.php
    index ae8410bd188..b5e607fbbc5 100644
    --- a/htdocs/core/lib/doc.lib.php
    +++ b/htdocs/core/lib/doc.lib.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2006-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2006		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2007		Patrick Raguin			<patrick.raguin@gmail.com>
    - * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2012		Christophe Battarel		<christophe.battarel@altairis.fr>
      *
    diff --git a/htdocs/core/lib/doleditor.lib.php b/htdocs/core/lib/doleditor.lib.php
    index 1981ae63d09..459bb3e3f2b 100644
    --- a/htdocs/core/lib/doleditor.lib.php
    +++ b/htdocs/core/lib/doleditor.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2015		Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/lib/emailing.lib.php b/htdocs/core/lib/emailing.lib.php
    index 00a06ca3f09..06ceb2c96b0 100644
    --- a/htdocs/core/lib/emailing.lib.php
    +++ b/htdocs/core/lib/emailing.lib.php
    @@ -46,10 +46,9 @@ function emailing_prepare_head(Mailing $object)
     		if ($object->nbemail > 0) $head[$h][1].= ' <span class="badge">'.$object->nbemail.'</span>';
         	$head[$h][2] = 'targets';
         	$h++;
    -
     	}
    -	
    -	if (! empty($conf->global->EMAILING_USE_ADVANCED_SELECTOR)) 
    +
    +	if (! empty($conf->global->EMAILING_USE_ADVANCED_SELECTOR))
     	{
     		$head[$h][0] = DOL_URL_ROOT."/comm/mailing/advtargetemailing.php?id=".$object->id;
     		$head[$h][1] = $langs->trans("MailAdvTargetRecipients");
    diff --git a/htdocs/core/lib/expedition.lib.php b/htdocs/core/lib/expedition.lib.php
    index 0fa5f0ae643..275970c41c1 100644
    --- a/htdocs/core/lib/expedition.lib.php
    +++ b/htdocs/core/lib/expedition.lib.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006-2012	Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2007		Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2010-2012	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010		Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2015 Claudio Aschieri				<c.aschieri@19.coop>
      *
    diff --git a/htdocs/core/lib/expensereport.lib.php b/htdocs/core/lib/expensereport.lib.php
    index 1efdc73f247..da1a7048dee 100644
    --- a/htdocs/core/lib/expensereport.lib.php
    +++ b/htdocs/core/lib/expensereport.lib.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011	Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011	Regis Houssin	<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -67,7 +67,7 @@ function expensereport_prepare_head($object)
     	    $head[$h][2] = 'note';
     	    $h++;
     	}
    -	
    +
     	$head[$h][0] = DOL_URL_ROOT . '/expensereport/info.php?id=' . $object->id;
     	$head[$h][1] = $langs->trans("Info");
     	$head[$h][2] = 'info';
    @@ -81,11 +81,12 @@ function expensereport_prepare_head($object)
     /**
      * Returns an array with the tabs for the "Expense report payment" section
      * It loads tabs from modules looking for the entity payment
    - * 
    + *
      * @param	Paiement	$object		Current payment object
      * @return	array					Tabs for the payment section
      */
    -function payment_expensereport_prepare_head(PaymentExpenseReport $object) {
    +function payment_expensereport_prepare_head(PaymentExpenseReport $object)
    +{
     
     	global $langs, $conf;
     
    @@ -139,7 +140,7 @@ function expensereport_admin_prepare_head()
     		$head[$h][2] = 'expenseik';
     		$h++;
     	}
    -	
    +
     	if (!empty($conf->global->MAIN_USE_EXPENSE_RULE))
     	{
     		$head[$h][0] = DOL_URL_ROOT."/admin/expensereport_rules.php";
    @@ -147,7 +148,7 @@ function expensereport_admin_prepare_head()
     		$head[$h][2] = 'expenserules';
     		$h++;
     	}
    -	
    +
     	// Show more tabs from modules
     	// Entries must be declared in modules descriptor with line
     	// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__');   to add new tab
    @@ -168,5 +169,5 @@ function expensereport_admin_prepare_head()
     
     	complete_head_from_modules($conf,$langs,null,$head,$h,'expensereport_admin','remove');
     
    -	return $head;
    +    return $head;
     }
    diff --git a/htdocs/core/lib/fichinter.lib.php b/htdocs/core/lib/fichinter.lib.php
    index 8507a85292a..0ef39203f57 100644
    --- a/htdocs/core/lib/fichinter.lib.php
    +++ b/htdocs/core/lib/fichinter.lib.php
    @@ -1,9 +1,10 @@
     <?php
     /* Copyright (C) 2006-2007	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2007		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    - * Copyright (C) 2016		   Gilles Poirier 		   <glgpoirier@gmail.com>
    - 
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
    + * Copyright (C) 2016		Gilles Poirier 		   <glgpoirier@gmail.com>
    + * Copyright (C) 2018		charlene Benke 		   <charlie@patas-monkey.com>
    +
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -75,11 +76,10 @@ function fichinter_prepare_head($object)
     				foreach($resources as $resource_obj)
     				{
     					$linked_resources = $object->getElementResources('fichinter',$object->id,$resource_obj);
    -					
     				}
     			}
     		}
    -				
    +
        		$head[$h][0] = DOL_URL_ROOT.'/resource/element_resource.php?element=fichinter&element_id='.$object->id;
     		$head[$h][1] = $langs->trans("Resources");
     		if ($nbResource > 0) $head[$h][1].= ' <span class="badge">'.$nbResource.'</span>';
    @@ -162,4 +162,28 @@ function fichinter_admin_prepare_head()
     		return $head;
     }
     
    +/**
    + * Prepare array with list of tabs
    + *
    + * @param   Object  $object     Object related to tabs
    + * @return  array               Array of tabs to show
    + */
    +function fichinter_rec_prepare_head($object)
    +{
    +	global $langs, $conf; //, $user;
     
    +	$h = 0;
    +	$head = array();
    +
    +	$head[$h][0] = DOL_URL_ROOT.'/fichinter/card-rec.php?id='.$object->id;
    +	$head[$h][1] = $langs->trans("CardFichinter");
    +	$head[$h][2] = 'card';
    +	$h++;
    +
    +	complete_head_from_modules($conf, $langs, $object, $head, $h, 'intervention-rec');
    +
    +	complete_head_from_modules($conf, $langs, $object, $head, $h,'intervention-rec','remove');
    +
    +
    +	return $head;
    +}
    diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php
    index 210626f461c..1bca14827e6 100644
    --- a/htdocs/core/lib/files.lib.php
    +++ b/htdocs/core/lib/files.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2012  Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2012-2015  Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2012-2015  Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2012-2016  Juanjo Menent       <jmenent@2byte.es>
      * Copyright (C) 2015       Marcos García       <marcosgdf@gmail.com>
      * Copyright (C) 2016       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    @@ -574,7 +574,7 @@ function dol_filemtime($pathoffile)
      * @param	array	$arrayreplacement	Array with strings to replace. Example: array('valuebefore'=>'valueafter', ...)
      * @param	string	$destfile			Destination file (can't be a directory). If empty, will be same than source file.
      * @param	int		$newmask			Mask for new file (0 by default means $conf->global->MAIN_UMASK). Example: '0666'
    - * @param	int		$indexdatabase		Index new file into database.
    + * @param	int		$indexdatabase		1=index new file into database.
      * @return	int							<0 if error, 0 if nothing done (dest file already exists), >0 if OK
      * @see		dol_copy dolReplaceRegExInFile
      */
    @@ -611,7 +611,7 @@ function dolReplaceInFile($srcfile, $arrayreplacement, $destfile='', $newmask=0,
     	dol_delete_file($tmpdestfile);
     
     	// Create $newpathoftmpdestfile from $newpathofsrcfile
    -	$content=file_get_contents($newpathofsrcfile, 'r');
    +	$content = file_get_contents($newpathofsrcfile, 'r');
     
     	$content = make_substitutions($content, $arrayreplacement, null);
     
    @@ -651,7 +651,6 @@ function dolReplaceInFile($srcfile, $arrayreplacement, $destfile='', $newmask=0,
     function dolReplaceRegExInFile($srcfile, $arrayreplacement, $destfile='', $newmask=0, $indexdatabase=0)
     {
     	// TODO
    -
     }
     
     /**
    @@ -782,7 +781,6 @@ function dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayrep
     					$result=$tmpresult;
     				}
     				if ($result < 0) break;
    -
     			}
     		}
     		closedir($dir_handle);
    @@ -1134,16 +1132,17 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable
      *  @param	int		$nohook			Disable all hooks
      *  @param	object	$object			Current object in use
      *  @param	boolean	$allowdotdot	Allow to delete file path with .. inside. Never use this, it is reserved for migration purpose.
    + *  @param	int		$indexdatabase	Try to remove also index entries.
      *  @return boolean         		True if no error (file is deleted or if glob is used and there's nothing to delete), False if error
      *  @see dol_delete_dir
      */
    -function dol_delete_file($file,$disableglob=0,$nophperrors=0,$nohook=0,$object=null,$allowdotdot=false)
    +function dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1)
     {
     	global $db, $conf, $user, $langs;
     	global $hookmanager;
     
    -	$langs->load("other");
    -	$langs->load("errors");
    +	// Load translation files required by the page
    +    $langs->loadLangs(array('other', 'errors'));
     
     	dol_syslog("dol_delete_file file=".$file." disableglob=".$disableglob." nophperrors=".$nophperrors." nohook=".$nohook);
     
    @@ -1201,7 +1200,7 @@ function dol_delete_file($file,$disableglob=0,$nophperrors=0,$nohook=0,$object=n
     						{
     							$rel_filetodelete = preg_replace('/^[\\/]/', '', $rel_filetodelete);
     
    -							if (is_object($db))		// $db may not be defined when lib is in a context with define('NOREQUIREDB',1)
    +							if (is_object($db) && $indexdatabase)		// $db may not be defined when lib is in a context with define('NOREQUIREDB',1)
     							{
     								dol_syslog("Try to remove also entries in database for full relative path = ".$rel_filetodelete, LOG_DEBUG);
     								include_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmfiles.class.php';
    @@ -1269,7 +1268,7 @@ function dol_delete_dir($dir,$nophperrors=0)
      *  @param  int		$nophperrors    Disable all PHP output errors
      *  @param	int		$onlysub		Delete only files and subdir, not main directory
      *  @param  int		$countdeleted   Counter to count nb of elements found really deleted
    - *  @return int             		Number of files and directory we try to remove. NB really removed is returned into $countdeleted.
    + *  @return int             		Number of files and directory we try to remove. NB really removed is returned into var by reference $countdeleted.
      */
     function dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0)
     {
    @@ -1509,7 +1508,7 @@ function dol_init_file_process($pathtoscan='', $trackid='')
      *
      * @param	string	$upload_dir				Directory where to store uploaded file (note: used to forge $destpath = $upload_dir + filename)
      * @param	int		$allowoverwrite			1=Allow overwrite existing file
    - * @param	int		$donotupdatesession		1=Do no edit _SESSION variable but update database index. 0=Update _SESSION and not database index.
    + * @param	int		$donotupdatesession		1=Do no edit _SESSION variable but update database index. 0=Update _SESSION and not database index. -1=Do not update SESSION neither db.
      * @param	string	$varfiles				_FILES var name
      * @param	string	$savingdocmask			Mask to use to define output filename. For example 'XXXXX-__YYYYMMDD__-__file__'
      * @param	string	$link					Link to add (to add a link instead of a file)
    @@ -1591,7 +1590,7 @@ function dol_add_file_process($upload_dir, $allowoverwrite=0, $donotupdatesessio
     					}
     
     					// Update table of files
    -					if ($donotupdatesession)
    +					if ($donotupdatesession == 1)
     					{
     						$result = addFileIntoDatabaseIndex($upload_dir, basename($destfile), $TFile['name'][$i], 'uploaded', 0);
     						if ($result < 0)
    @@ -1656,7 +1655,7 @@ function dol_add_file_process($upload_dir, $allowoverwrite=0, $donotupdatesessio
      * All information used are in db, conf, langs, user and _FILES.
      *
      * @param	int		$filenb					File nb to delete
    - * @param	int		$donotupdatesession		1=Do not edit _SESSION variable
    + * @param	int		$donotupdatesession		-1 or 1 = Do not update _SESSION variable
      * @param   int		$donotdeletefile        1=Do not delete physically file
      * @param   string  $trackid                Track id (used to prefix name of session vars to avoid conflict)
      * @return	void
    @@ -2162,10 +2161,10 @@ function dol_check_secure_access_document($modulepart, $original_file, $entity,
     		$original_file=$dirins.'/'.$original_file;
     	}
     	// Wrapping for some images
    -	elseif (($modulepart == 'mycompany' || $modulepart == 'companylogo') && !empty($conf->mycompany->dir_output))
    +	elseif ($modulepart == 'mycompany' && !empty($conf->mycompany->dir_output))
     	{
     		$accessallowed=1;
    -		$original_file=$conf->mycompany->dir_output.'/logos/'.$original_file;
    +		$original_file=$conf->mycompany->dir_output.'/'.$original_file;
     	}
     	// Wrapping for users photos
     	elseif ($modulepart == 'userphoto' && !empty($conf->user->dir_output))
    diff --git a/htdocs/core/lib/format_cards.lib.php b/htdocs/core/lib/format_cards.lib.php
    index 7e89946d471..ecfce2108dd 100644
    --- a/htdocs/core/lib/format_cards.lib.php
    +++ b/htdocs/core/lib/format_cards.lib.php
    @@ -36,7 +36,7 @@ $sql = "SELECT rowid, code, name, paper_size, orientation, metric, leftmargin, t
     $resql = $db->query($sql);
     if ($resql)
     {
    -    while ($row = $db->fetch_array($resql)) 
    +    while ($row = $db->fetch_array($resql))
         {
             $_Avery_Labels[$row['code']]['name']=$row['name'];
             $_Avery_Labels[$row['code']]['paper-size']=$row['paper_size'];
    diff --git a/htdocs/core/lib/fourn.lib.php b/htdocs/core/lib/fourn.lib.php
    index ac956abf524..c251c5d03b9 100644
    --- a/htdocs/core/lib/fourn.lib.php
    +++ b/htdocs/core/lib/fourn.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2009	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2006		Marc Barilley		<marc@ocebo.com>
      * Copyright (C) 2011-2013  Philippe Grand      <philippe.grand@atoo-net.com>
      *
    diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
    index 87e63517ac2..92f2cb62308 100644
    --- a/htdocs/core/lib/functions.lib.php
    +++ b/htdocs/core/lib/functions.lib.php
    @@ -5,7 +5,7 @@
      * Copyright (C) 2004		Sebastien Di Cintio			<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier				<benoit.mortier@opensides.be>
      * Copyright (C) 2004		Christophe Combelles			<ccomb@free.fr>
    - * Copyright (C) 2005-2017	Regis Houssin				<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin				<regis.houssin@inodbox.com>
      * Copyright (C) 2008		Raphael Bertrand (Resultic)	<raphael.bertrand@resultic.fr>
      * Copyright (C) 2010-2018	Juanjo Menent				<jmenent@2byte.es>
      * Copyright (C) 2013		Cédric Salvador				<csalvador@gpcsolutions.fr>
    @@ -115,16 +115,16 @@ function getDoliDBInstance($type, $host, $user, $pass, $name, $port)
      *									'c_paiement', 'c_payment_term', ...
      * 	@param	int		$shared			0=Return id of current entity only,
      * 									1=Return id of current entity + shared entities (default)
    - *  @param	int		$forceentity	Entity id
    + *  @param	object	$currentobject	Current object if needed
      * 	@return	mixed				Entity id(s) to use
      */
    -function getEntity($element, $shared=1, $forceentity=null)
    +function getEntity($element, $shared=1, $currentobject=null)
     {
     	global $conf, $mc;
     
     	if (is_object($mc))
     	{
    -		return $mc->getEntity($element, $shared, $forceentity);
    +		return $mc->getEntity($element, $shared, $currentobject);
     	}
     	else
     	{
    @@ -254,19 +254,19 @@ function GETPOSTISSET($paramname)
      *  Use the property $user->default_values[path]['creatform'] and/or $user->default_values[path]['filters'] and/or $user->default_values[path]['sortorder']
      *  Note: The property $user->default_values is loaded by main.php when loading the user.
      *
    - *  @param	string	$paramname   Name of parameter to found
    - *  @param	string	$check	     Type of check
    - *                                  ''=no check (deprecated)
    - *                                  'none'=no check (only for param that should have very rich content)
    - *                                  'int'=check it's numeric (integer or float)
    - *                                  'intcomma'=check it's integer+comma ('1,2,3,4...')
    - *                                  'alpha'=check it's text and sign
    - *                                  'aZ'=check it's a-z only
    - *                                  'aZ09'=check it's simple alpha string (recommended for keys)
    - *                                  'array'=check it's array
    - *                                  'san_alpha'=Use filter_var with FILTER_SANITIZE_STRING (do not use this for free text string)
    - *                                  'nohtml', 'alphanohtml'=check there is no html content
    - *                                  'custom'= custom filter specify $filter and $options)
    + *  @param  string  $paramname   Name of parameter to found
    + *  @param  string  $check	     Type of check
    + *                               ''=no check (deprecated)
    + *                               'none'=no check (only for param that should have very rich content)
    + *                               'int'=check it's numeric (integer or float)
    + *                               'intcomma'=check it's integer+comma ('1,2,3,4...')
    + *                               'alpha'=check it's text and sign
    + *                               'aZ'=check it's a-z only
    + *                               'aZ09'=check it's simple alpha string (recommended for keys)
    + *                               'array'=check it's array
    + *                               'san_alpha'=Use filter_var with FILTER_SANITIZE_STRING (do not use this for free text string)
    + *                               'nohtml', 'alphanohtml'=check there is no html content
    + *                               'custom'= custom filter specify $filter and $options)
      *  @param	int		$method	     Type of method (0 = get then post, 1 = only get, 2 = only post, 3 = post then get, 4 = post then get then cookie)
      *  @param  int     $filter      Filter to apply when $check is set to 'custom'. (See http://php.net/manual/en/filter.filters.php for détails)
      *  @param  mixed   $options     Options to pass to filter_var when $check is set to 'custom'
    @@ -431,7 +431,7 @@ function GETPOST($paramname, $check='none', $method=0, $filter=null, $options=nu
     						}
     						elseif (isset($user->default_values[$relativepathstring]['filters']))
     						{
    -							foreach($user->default_values[$relativepathstring]['filters'] as $defkey => $defval)
    +							foreach($user->default_values[$relativepathstring]['filters'] as $defkey => $defval)	// $defkey is a querystring like 'a=b&c=d', $defval is key of user
     							{
     								$qualified = 0;
     								if ($defkey != '_noquery_')
    @@ -587,7 +587,6 @@ function GETPOST($paramname, $check='none', $method=0, $filter=null, $options=nu
     	// Save data into session if key start with 'search_' or is 'smonth', 'syear', 'month', 'year'
     	if (empty($method) || $method == 3 || $method == 4)
     	{
    -		//if (preg_match('/^search_/', $paramname) || in_array($paramname, array('sortorder', 'sortfield", 'smonth', 'syear', 'month', 'year')))
     		if (preg_match('/^search_/', $paramname) || in_array($paramname, array('sortorder','sortfield')))
     		{
     			//var_dump($paramname.' - '.$out.' '.$user->default_values[$relativepathstring]['filters'][$paramname]);
    @@ -596,8 +595,7 @@ function GETPOST($paramname, $check='none', $method=0, $filter=null, $options=nu
     			// - posted value not empty, or
     			// - if posted value is empty and a default value exists that is not empty (it means we did a filter to an empty value when default was not).
     
    -			//if (! empty($out) || ! empty($user->default_values[$relativepathstring]['filters'][$paramname]))
    -			if ($out != '')		// $out = '0' like 'abc' is a search criteria to keep
    +			if ($out != '')		// $out = '0' or 'abc', it is a search criteria to keep
     			{
     				$user->lastsearch_values_tmp[$relativepathstring][$paramname]=$out;
     			}
    @@ -608,26 +606,30 @@ function GETPOST($paramname, $check='none', $method=0, $filter=null, $options=nu
     }
     
     
    -/**
    - *  Return a prefix to use for this Dolibarr instance, for session/cookie names or email id.
    - *  This prefix is valid in a web context only and is unique for instance and avoid conflict
    - *  between multi-instances, even when having two instances with one root dir or two instances
    - *  in virtual servers.
    - *
    - *  @param  string  $mode       			'' (prefix for session name) or 'email' (prefix for email id)
    - *  @return	string      					A calculated prefix
    - */
     if (! function_exists('dol_getprefix'))
     {
    -	function dol_getprefix($mode='')
    -	{
    +    /**
    +     *  Return a prefix to use for this Dolibarr instance, for session/cookie names or email id.
    +     *  The prefix for session is unique in a web context only and is unique for instance and avoid conflict
    +     *  between multi-instances, even when having two instances with one root dir or two instances in virtual servers.
    +     *  The prefix for email is unique if MAIL_PREFIX_FOR_EMAIL_ID is set to a value, otherwise value may be same than other instance.
    +     *
    +     *  @param  string  $mode                   '' (prefix for session name) or 'email' (prefix for email id)
    +     *  @return	string                          A calculated prefix
    +     */
    +    function dol_getprefix($mode='')
    +    {
     		global $conf;
     
    -		// If MAIL_PREFIX_FOR_EMAIL_ID is set and prefix is for email
    -		if ($mode == 'email' && ! empty($conf->global->MAIL_PREFIX_FOR_EMAIL_ID))
    +		// If prefix is for email
    +		if ($mode == 'email')
     		{
    -			if ($conf->global->MAIL_PREFIX_FOR_EMAIL_ID != 'SERVER_NAME') return $conf->global->MAIL_PREFIX_FOR_EMAIL_ID;
    -			else if (isset($_SERVER["SERVER_NAME"])) return $_SERVER["SERVER_NAME"];
    +			if (! empty($conf->global->MAIL_PREFIX_FOR_EMAIL_ID))	// If MAIL_PREFIX_FOR_EMAIL_ID is set (a value initialized with a random value is recommended)
    +			{
    +				if ($conf->global->MAIL_PREFIX_FOR_EMAIL_ID != 'SERVER_NAME') return $conf->global->MAIL_PREFIX_FOR_EMAIL_ID;
    +				else if (isset($_SERVER["SERVER_NAME"])) return $_SERVER["SERVER_NAME"];
    +			}
    +			return dol_hash(DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
     		}
     
     		if (isset($_SERVER["SERVER_NAME"]) && isset($_SERVER["DOCUMENT_ROOT"]))
    @@ -636,7 +638,7 @@ if (! function_exists('dol_getprefix'))
     			// Use this for a "readable" cookie name
     			//return dol_sanitizeFileName($_SERVER["SERVER_NAME"].$_SERVER["DOCUMENT_ROOT"].DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
     		}
    -		else return dol_hash(DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
    +		return dol_hash(DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
     	}
     }
     
    @@ -670,7 +672,7 @@ function dol_include_once($relpath, $classname='')
     
     
     /**
    - *	Return path of url or filesystem. Return alternate root if exists.
    + *	Return path of url or filesystem. Can check into alternate dir or alternate dir + main dir depending on value of $returnemptyifnotfound.
      *
      * 	@param	string	$path						Relative path to file (if mode=0) or relative url (if mode=1). Ie: mydir/myfile, ../myfile
      *  @param	int		$type						0=Used for a Filesystem path, 1=Used for an URL path (output relative), 2=Used for an URL path (output full path using same host that current url), 3=Used for an URL path (output full path using host defined into $dolibarr_main_url_root of conf file)
    @@ -690,7 +692,10 @@ function dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
     		$res = DOL_DOCUMENT_ROOT.'/'.$path;		// Standard default path
     		foreach ($conf->file->dol_document_root as $key => $dirroot)	// ex: array(["main"]=>"/home/main/htdocs", ["alt0"]=>"/home/dirmod/htdocs", ...)
     		{
    -			if ($key == 'main') continue;
    +			if ($key == 'main')
    +			{
    +				continue;
    +			}
     			if (file_exists($dirroot.'/'.$path))
     			{
     				$res=$dirroot.'/'.$path;
    @@ -1037,6 +1042,8 @@ function dol_syslog($message, $level = LOG_INFO, $ident = 0, $suffixinfilename='
     		}
     		if ($level > $conf->global->SYSLOG_LEVEL) return;
     
    +		$message = preg_replace('/password=\'[^\']*\'/', 'password=\'hidden\'', $message);	// protection to avoid to have value of password in log
    +
     		// If adding log inside HTML page is required
     		if (! empty($_REQUEST['logtohtml']) && (! empty($conf->global->MAIN_ENABLE_LOG_TO_HTML) || ! empty($conf->global->MAIN_LOGTOHTML)))   // MAIN_LOGTOHTML kept for backward compatibility
     		{
    @@ -1044,7 +1051,7 @@ function dol_syslog($message, $level = LOG_INFO, $ident = 0, $suffixinfilename='
     		}
     
     		//TODO: Remove this. MAIN_ENABLE_LOG_INLINE_HTML should be deprecated and use a log handler dedicated to HTML output
    -		// If enable html log tag enabled and url parameter log defined, we show output log on HTML comments
    +		// If html log tag enabled and url parameter log defined, we show output log on HTML comments
     		if (! empty($conf->global->MAIN_ENABLE_LOG_INLINE_HTML) && ! empty($_GET["log"]))
     		{
     			print "\n\n<!-- Log start\n";
    @@ -1225,7 +1232,6 @@ function dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $pi
     					$outmore.='<a class="tabimage'.($morecss?' '.$morecss:'').'" href="'.$links[$i][0].'">'.$links[$i][1].'</a>'."\n";
     				else
     					$outmore.='<span class="tabspan">'.$links[$i][1].'</span>'."\n";
    -
     			}
     			else if (! empty($links[$i][1]))
     			{
    @@ -1354,7 +1360,7 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r
     		$width=80; $cssclass='photoref';
     		$showimage=$object->is_photo_available($conf->product->multidir_output[$entity]);
     		$maxvisiblephotos=(isset($conf->global->PRODUCT_MAX_VISIBLE_PHOTO)?$conf->global->PRODUCT_MAX_VISIBLE_PHOTO:5);
    -		if ($conf->browser->phone) $maxvisiblephotos=1;
    +		if ($conf->browser->layout == 'phone') $maxvisiblephotos=1;
     		if ($showimage) $morehtmlleft.='<div class="floatleft inline-block valignmiddle divphotoref">'.$object->show_photos('product', $conf->product->multidir_output[$entity],'small',$maxvisiblephotos,0,0,0,$width,0).'</div>';
     		else
     		{
    @@ -1373,7 +1379,7 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r
     		$width=80; $cssclass='photoref';
     		$showimage=$object->is_photo_available($conf->ticket->multidir_output[$entity].'/'.$object->track_id);
     		$maxvisiblephotos=(isset($conf->global->TICKETSUP_MAX_VISIBLE_PHOTO)?$conf->global->TICKETSUP_MAX_VISIBLE_PHOTO:2);
    -		if ($conf->browser->phone) $maxvisiblephotos=1;
    +		if ($conf->browser->layout == 'phone') $maxvisiblephotos=1;
     		if ($showimage) $morehtmlleft.='<div class="floatleft inline-block valignmiddle divphotoref">'.$object->show_photos('ticket', $conf->ticket->multidir_output[$entity],'small',$maxvisiblephotos,0,0,0,$width,0).'</div>';
     		else
     		{
    @@ -1595,6 +1601,7 @@ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='r
      * @param	string	$langkey		Translation key
      * @param 	string	$fieldkey		Key of the html select field the text refers to
      * @param	int		$fieldrequired	1=Field is mandatory
    + * @return string
      * @deprecated Form::editfieldkey
      */
     function fieldLabel($langkey, $fieldkey, $fieldrequired=0)
    @@ -2191,50 +2198,52 @@ function dol_print_email($email,$cid=0,$socid=0,$addlink=0,$max=64,$showinvalid=
     }
     
     /**
    - * Show Skype link
    + * Show social network link
      *
    - * @param	string		$skype			Skype to show (only skype, without 'Name of recipient' before)
    + * @param	string		$value			Skype to show (only skype, without 'Name of recipient' before)
      * @param	int 		$cid 			Id of contact if known
      * @param	int 		$socid 			Id of third party if known
    - * @param	int 		$addlink		0=no link to create action
    - * @param	int			$max			Max number of characters to show
    + * @param	string 		$type			'skype','facebook',...
      * @return	string						HTML Link
      */
    -function dol_print_skype($skype,$cid=0,$socid=0,$addlink=0,$max=64)
    +function dol_print_socialnetworks($value,$cid,$socid,$type)
     {
     	global $conf,$user,$langs;
     
    -	$newskype=$skype;
    +	$newskype=$value;
     
    -	if (empty($skype)) return '&nbsp;';
    +	if (empty($value)) return '&nbsp;';
     
    -	if (! empty($addlink))
    +	if (! empty($type))
     	{
    -		$newskype =img_picto($langs->trans("Skype"), 'object_skype.png');
    -		$newskype.= '&nbsp;';
    -		$newskype.=dol_trunc($skype,$max);
    -		$newskype.= '&nbsp;';
    -		$newskype.='<a href="skype:';
    -		$newskype.=dol_trunc($skype,$max);
    -		$newskype.='?call" alt="'.$langs->trans("Call").'&nbsp;'.$skype.'" title="'.$langs->trans("Call").'&nbsp;'.$skype.'">';
    -		$newskype.='<img src="'.DOL_URL_ROOT.'/theme/common/skype_callbutton.png" border="0">';
    -		$newskype.='</a>&nbsp;&nbsp;&nbsp;<a href="skype:';
    -		$newskype.=dol_trunc($skype,$max);
    -		$newskype.='?chat" alt="'.$langs->trans("Chat").'&nbsp;'.$skype.'" title="'.$langs->trans("Chat").'&nbsp;'.$skype.'">';
    -		$newskype.='<img src="'.DOL_URL_ROOT.'/theme/common/skype_chatbutton.png" border="0">';
    -		$newskype.='</a>';
    -
    -		if (($cid || $socid) && ! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create)
    +		$newskype ='<div class="divsocialnetwork inline-block valignmiddle">';
    +		$newskype.=img_picto($langs->trans(strtoupper($type)), $type.'.png', '', false, 0, 0, '', 'paddingright');
    +		$newskype.=$value;
    +		if ($type == 'skype')
     		{
    -			$type='AC_SKYPE'; $link='';
    -			if (! empty($conf->global->AGENDA_ADDACTIONFORSKYPE)) $link='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create&amp;backtopage=1&amp;actioncode='.$type.'&amp;contactid='.$cid.'&amp;socid='.$socid.'">'.img_object($langs->trans("AddAction"),"calendar").'</a>';
    -			$newskype='<div class="divskype nowrap">'.$newskype.($link?' '.$link:'').'</div>';
    +			$newskype.= '&nbsp;';
    +			$newskype.='<a href="skype:';
    +			$newskype.=$value;
    +			$newskype.='?call" alt="'.$langs->trans("Call").'&nbsp;'.$value.'" title="'.$langs->trans("Call").'&nbsp;'.$value.'">';
    +			$newskype.='<img src="'.DOL_URL_ROOT.'/theme/common/skype_callbutton.png" border="0">';
    +			$newskype.='</a><a href="skype:';
    +			$newskype.=$value;
    +			$newskype.='?chat" alt="'.$langs->trans("Chat").'&nbsp;'.$value.'" title="'.$langs->trans("Chat").'&nbsp;'.$value.'">';
    +			$newskype.='<img class="paddingleft" src="'.DOL_URL_ROOT.'/theme/common/skype_chatbutton.png" border="0">';
    +			$newskype.='</a>';
     		}
    +		if (($cid || $socid) && ! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create && $type=='skype')
    +		{
    +			$addlink='AC_SKYPE'; $link='';
    +			if (! empty($conf->global->AGENDA_ADDACTIONFORSKYPE)) $link='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create&amp;backtopage=1&amp;actioncode='.$addlink.'&amp;contactid='.$cid.'&amp;socid='.$socid.'">'.img_object($langs->trans("AddAction"),"calendar").'</a>';
    +			$newskype.=($link?' '.$link:'');
    +		}
    +		$newskype.='</div>';
     	}
     	else
     	{
     		$langs->load("errors");
    -		$newskype.=img_warning($langs->trans("ErrorBadSkype",$skype));
    +		$newskype.=img_warning($langs->trans("ErrorBadSocialNetworkValue",$value));
     	}
     	return $newskype;
     }
    @@ -2549,7 +2558,7 @@ function dol_print_phone($phone,$countrycode='',$cid=0,$socid=0,$addlink='',$sep
     	}
     	if (! empty($addlink))	// Link on phone number (+ link to add action if conf->global->AGENDA_ADDACTIONFORPHONE set)
     	{
    -		if (! empty($conf->browser->phone) || (! empty($conf->clicktodial->enabled) && ! empty($conf->global->CLICKTODIAL_USE_TEL_LINK_ON_PHONE_NUMBERS)))	// If phone or option for, we use link of phone
    +		if ($conf->browser->layout == 'phone' || (! empty($conf->clicktodial->enabled) && ! empty($conf->global->CLICKTODIAL_USE_TEL_LINK_ON_PHONE_NUMBERS)))	// If phone or option for, we use link of phone
     		{
     			$newphone ='<a href="tel:'.$phone.'"';
     			$newphone.='>'.$phone.'</a>';
    @@ -2783,6 +2792,35 @@ function isValidEmail($address, $acceptsupervisorkey=0)
     	return false;
     }
     
    +/**
    + *	Return if the domain name has a valid MX record.
    + *  WARNING: This need function idn_to_ascii, checkdnsrr and getmxrr
    + *
    + *	@param	    string		$domain	    			Domain name (Ex: "yahoo.com", "yhaoo.com", "dolibarr.fr")
    + *	@return     int     							-1 if error (function not available), 0=Not valid, 1=Valid
    + */
    +function isValidMXRecord($domain)
    +{
    +	if (function_exists('idn_to_ascii') && function_exists('checkdnsrr'))
    +	{
    +		if (! checkdnsrr(idn_to_ascii($domain), 'MX'))
    +		{
    +			return 0;
    +		}
    +		if (function_exists('getmxrr'))
    +		{
    +			$mxhosts=array();
    +			$weight=array();
    +			getmxrr(idn_to_ascii($domain), $mxhosts, $weight);
    +			if (count($mxhosts) > 1) return 1;
    +			if (count($mxhosts) == 1 && ! empty($mxhosts[0])) return 1;
    +
    +			return 0;
    +		}
    +	}
    +	return -1;
    +}
    +
     /**
      *  Return true if phone number syntax is ok
      *  TODO Decide what to do with this
    @@ -2803,35 +2841,50 @@ function isValidPhone($phone)
      * @param   string		$stringencoding		Encoding of string
      * @return  int								Length of string
      */
    -function dol_strlen($string,$stringencoding='UTF-8')
    +function dol_strlen($string, $stringencoding='UTF-8')
     {
     	if (function_exists('mb_strlen')) return mb_strlen($string,$stringencoding);
     	else return strlen($string);
     }
     
     /**
    - * Make a substring. Works even in mbstring module is not enabled.
    + * Make a substring. Works even if mbstring module is not enabled for better compatibility.
      *
      * @param	string	$string				String to scan
      * @param	string	$start				Start position
    - * @param	int		$length				Length
    + * @param	int		$length				Length (in nb of characters or nb of bytes depending on trunconbytes param)
      * @param   string	$stringencoding		Page code used for input string encoding
    + * @param	int		$trunconbytes		1=Length is max of bytes instead of max of characters
      * @return  string						substring
      */
    -function dol_substr($string,$start,$length,$stringencoding='')
    +function dol_substr($string, $start, $length, $stringencoding='', $trunconbytes=0)
     {
     	global $langs;
     
     	if (empty($stringencoding)) $stringencoding=$langs->charset_output;
     
     	$ret='';
    -	if (function_exists('mb_substr'))
    +	if (empty($trunconbytes))
     	{
    -		$ret=mb_substr($string,$start,$length,$stringencoding);
    +		if (function_exists('mb_substr'))
    +		{
    +			$ret=mb_substr($string, $start, $length, $stringencoding);
    +		}
    +		else
    +		{
    +			$ret=substr($string, $start, $length);
    +		}
     	}
     	else
     	{
    -		$ret=substr($string,$start,$length);
    +		if (function_exists('mb_strcut'))
    +		{
    +			$ret=mb_strcut($string, $start, $length, $stringencoding);
    +		}
    +		else
    +		{
    +			$ret=substr($string, $start, $length);
    +		}
     	}
     	return $ret;
     }
    @@ -3029,7 +3082,7 @@ function dol_print_graph($htmlid,$width,$height,$data,$showlegend=0,$type='pie',
      *	@param	string	$trunc				Where to trunc: right, left, middle (size must be a 2 power), wrap
      * 	@param	string	$stringencoding		Tell what is source string encoding
      *  @param	int		$nodot				Truncation do not add ... after truncation. So it's an exact truncation.
    - *  @param  int     $display            Trunc is use to display and can be changed for small screen. TODO Remove this param (must be dealt with CSS)
    + *  @param  int     $display            Trunc is used to display data and can be changed for small screen. TODO Remove this param (must be dealt with CSS)
      *	@return string						Truncated string. WARNING: length is never higher than $size if $nodot is set, but can be 3 chars higher otherwise.
      */
     function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodot=0, $display=0)
    @@ -3096,8 +3149,8 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodo
      *	@param		boolean|int	$pictoisfullpath	If true or 1, image path is a full path
      *	@param		int			$srconly			Return only content of the src attribute of img.
      *  @param		int			$notitle			1=Disable tag title. Use it if you add js tooltip, to avoid duplicate tooltip.
    - *  @param		string		$alt				Force alt for bind peoplae
    - *  @param		string		$morecss			Add more class css on img tag (For example 'myclascss')
    + *  @param		string		$alt				Force alt for bind people
    + *  @param		string		$morecss			Add more class css on img tag (For example 'myclascss'). Work only if $moreatt is empty.
      *  @return     string       				    Return img tag
      *  @see        #img_object, #img_picto_common
      */
    @@ -3123,12 +3176,14 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
     
     		//if (in_array($picto, array('switch_off', 'switch_on', 'off', 'on')))
     		if (empty($srconly) && in_array($pictowithoutext, array(
    -				'bank', 'close_title', 'delete', 'edit', 'ellipsis-h', 'filter', 'grip', 'grip_title', 'off', 'on', 'play', 'playdisabled', 'printer', 'resize',
    -				'switch_off', 'switch_on', 'unlink', 'uparrow')
    -			)) {
    +				'bank', 'close_title', 'delete', 'edit', 'ellipsis-h', 'filter', 'grip', 'grip_title', 'list', 'listlight', 'off', 'on', 'play', 'playdisabled', 'printer', 'resize',
    +				'note','switch_off', 'switch_on', 'unlink', 'uparrow', '1downarrow', '1uparrow',
    +				'skype','twitter','facebook'
    +			)
    +		)) {
     			$fakey = $pictowithoutext;
    -			$facolor = '';
    -			$fasize = '';
    +			$facolor = ''; $fasize = '';
    +			$marginleftonlyshort = 2;
     			if ($pictowithoutext == 'switch_off') {
     				$fakey = 'fa-toggle-off';
     				$facolor = '#999';
    @@ -3168,6 +3223,11 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
     			elseif ($pictowithoutext == 'grip_title' || $pictowithoutext == 'grip') {
     				$fakey = 'fa-arrows';
     			}
    +			elseif ($pictowithoutext == 'listlight') {
    +				$fakey = 'fa-download';
    +				$facolor = '#999';
    +				$marginleftonlyshort=1;
    +			}
     			elseif ($pictowithoutext == 'printer') {
     				$fakey = 'fa-print';
     				$fasize = '1.2em';
    @@ -3177,10 +3237,23 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
     				$fakey = 'fa-crop';
     				$facolor = '#444';
     			}
    +			elseif ($pictowithoutext == 'note') {
    +				$fakey = 'fa-sticky-note-o';
    +				$facolor = '#999';
    +				$marginleftonlyshort=1;
    +			}
     			elseif ($pictowithoutext == 'uparrow') {
     				$fakey = 'fa-mail-forward';
     				$facolor = '#555';
     			}
    +			elseif ($pictowithoutext == '1uparrow') {
    +				$fakey = 'fa-caret-up';
    +				$marginleftonlyshort = 1;
    +			}
    +			elseif ($pictowithoutext == '1downarrow') {
    +				$fakey = 'fa-caret-down';
    +				$marginleftonlyshort = 1;
    +			}
     			elseif ($pictowithoutext == 'unlink')     {
     				$fakey = 'fa-chain-broken';
     				$facolor = '#555';
    @@ -3188,16 +3261,20 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
     			elseif ($pictowithoutext == 'playdisabled') {
     				$fakey = 'fa-play';
     				$facolor = '#ccc';
    +			} elseif ($pictowithoutext == 'play') {
    +				$fakey = 'fa-play';
    +				$facolor = '#444';
     			}
     			else {
     				$fakey = 'fa-'.$pictowithoutext;
     				$facolor = '#444';
    +				$marginleftonlyshort=0;
     			}
     
     			if (preg_match('/class="([^"]+)"/', $moreatt, $reg)) {
     				$morecss.= ($morecss?' ':'').$reg[1];
     			}
    -			$enabledisablehtml = '<span class="fa '.$fakey.' marginleftonly valignmiddle'.($morecss?' '.$morecss:'').'" style="'.($fasize?('font-size: '.$fasize.';'):'').($facolor?(' color: '.$facolor.';'):'').'" alt="'.dol_escape_htmltag($titlealt).'" title="'.dol_escape_htmltag($titlealt).'"'.($moreatt?' '.$moreatt:'').'>';
    +			$enabledisablehtml = '<span class="fa '.$fakey.' '.($marginleftonlyshort?($marginleftonlyshort==1?'marginleftonlyshort':'marginleftonly'):'').' valignmiddle'.($morecss?' '.$morecss:'').'" style="'.($fasize?('font-size: '.$fasize.';'):'').($facolor?(' color: '.$facolor.';'):'').'" alt="'.dol_escape_htmltag($titlealt).'"'.(($notitle || empty($title))?'':' title="'.dol_escape_htmltag($title).'"').($moreatt?' '.$moreatt:'').'>';
     			if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
     				$enabledisablehtml.= $titlealt;
     			}
    @@ -3246,15 +3323,8 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
     	if ($srconly) {
     		return $fullpathpicto;
     	}
    -	else {
     		// tag title is used for tooltip on <a>, tag alt can be used with very simple text on image for bind people
    -		//$tmparray=array(0=>$titlealt);
    -		//if (empty($notitle) && preg_match('/:[^\s0-9]/',$titlealt)) $tmparray=explode(':',$titlealt);		// We explode if we have TextA:TextB. Not if we have TextA: TextB
    -		//$title=$tmparray[0];
    -		//$alt=empty($tmparray[1])?'':$tmparray[1];
    -		$title = $titlealt;
    -		return '<img src="'.$fullpathpicto.'" alt="'.dol_escape_htmltag($alt).'"'.(($notitle || empty($title))?'':' title="'.dol_escape_htmltag($title).'"').($moreatt?' '.$moreatt:' class="inline-block"').'>';	// Alt is used for accessibility, title for popup
    -	}
    +    return '<img src="'.$fullpathpicto.'" alt="'.dol_escape_htmltag($alt).'"'.(($notitle || empty($titlealt))?'':' title="'.dol_escape_htmltag($titlealt).'"').($moreatt?' '.$moreatt:' class="inline-block'.($morecss?' '.$morecss:'').'"').'>';	// Alt is used for accessibility, title for popup
     }
     
     /**
    @@ -3828,8 +3898,8 @@ function dol_print_error($db='',$error='',$errors=null)
     		$langs = new Translate('', $conf);
     		$langs->load("main");
     	}
    -	$langs->load("main");
    -	$langs->load("errors");
    +	// Load translation files required by the page
    +    $langs->loadLangs(array('main', 'errors'));
     
     	if ($_SERVER['DOCUMENT_ROOT'])    // Mode web
     	{
    @@ -3881,7 +3951,6 @@ function dol_print_error($db='',$error='',$errors=null)
     			$out.='> '.$langs->transnoentities("RequestLastAccessInError").":\n".($db->lastqueryerror()?$db->lastqueryerror():$langs->transnoentities("ErrorNoRequestInError"))."\n";
     			$out.='> '.$langs->transnoentities("ReturnCodeLastAccessInError").":\n".($db->lasterrno()?$db->lasterrno():$langs->transnoentities("ErrorNoRequestInError"))."\n";
     			$out.='> '.$langs->transnoentities("InformationLastAccessInError").":\n".($db->lasterror()?$db->lasterror():$langs->transnoentities("ErrorNoRequestInError"))."\n";
    -
     		}
     		$syslog.=", sql=".$db->lastquery();
     		$syslog.=", db_error=".$db->lasterror();
    @@ -4220,7 +4289,7 @@ function print_barre_liste($titre, $page, $file, $options='', $sortfield='', $so
     	// Left
     	//if ($picto && $titre) print '<td class="nobordernopadding hideonsmartphone" width="40" align="left" valign="middle">'.img_picto('', $picto, 'id="pictotitle"', $pictoisfullpath).'</td>';
     	print '<td class="nobordernopadding valignmiddle">';
    -	if ($picto && $titre) print img_picto('', $picto, 'class="hideonsmartphone valignmiddle opacityhigh widthpictotitle" id="pictotitle"', $pictoisfullpath);
    +	if ($picto && $titre) print img_picto('', $picto, 'class="hideonsmartphone valignmiddle opacityhigh pictotitle widthpictotitle"', $pictoisfullpath);
     	print '<div class="titre inline-block">'.$titre;
     	if (!empty($titre) && $savtotalnboflines >= 0 && (string) $savtotalnboflines != '') print ' ('.$totalnboflines.')';
     	print '</div></td>';
    @@ -4831,7 +4900,6 @@ function get_localtax_by_third($local)
     	}
     
     	return 0;
    -
     }
     
     
    @@ -4944,7 +5012,6 @@ function getLocalTaxesFromRate($vatrate, $local, $buyer, $seller, $firstparamisi
     		else
     		{
     			return array($obj->localtax1_type, get_localtax($vatrate, 1, $buyer, $seller), $obj->localtax2_type, get_localtax($vatrate, 2, $buyer, $seller), $obj->accountancy_code_sell,$obj->accountancy_code_buy);
    -
     		}
     	}
     
    @@ -5066,8 +5133,6 @@ function get_product_localtax_for_country($idprod, $local, $thirdparty_seller)
     		else
     		{
     			// TODO Read default product vat according to countrycode and product
    -
    -
     		}
     	}
     
    @@ -5128,7 +5193,7 @@ function get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer,
     	$buyer_country_code = $thirdparty_buyer->country_code;
     	$buyer_in_cee = isInEEC($thirdparty_buyer);
     
    -	dol_syslog("get_default_tva: seller use vat=".$seller_use_vat.", seller country=".$seller_country_code.", seller in cee=".$seller_in_cee.", buyer country=".$buyer_country_code.", buyer in cee=".$buyer_in_cee.", idprod=".$idprod.", idprodfournprice=".$idprodfournprice.", SERVICE_ARE_ECOMMERCE_200238EC=".(! empty($conf->global->SERVICES_ARE_ECOMMERCE_200238EC)?$conf->global->SERVICES_ARE_ECOMMERCE_200238EC:''));
    +	dol_syslog("get_default_tva: seller use vat=".$seller_use_vat.", seller country=".$seller_country_code.", seller in cee=".$seller_in_cee.", buyer vat number=".$thirdparty_buyer->tva_intra." buyer country=".$buyer_country_code.", buyer in cee=".$buyer_in_cee.", idprod=".$idprod.", idprodfournprice=".$idprodfournprice.", SERVICE_ARE_ECOMMERCE_200238EC=".(! empty($conf->global->SERVICES_ARE_ECOMMERCE_200238EC)?$conf->global->SERVICES_ARE_ECOMMERCE_200238EC:''));
     
     	// If services are eServices according to EU Council Directive 2002/38/EC (http://ec.europa.eu/taxation_customs/taxation/vat/traders/e-commerce/article_1610_en.htm)
     	// we use the buyer VAT.
    @@ -5179,8 +5244,7 @@ function get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer,
     	}
     
     	// Si (vendeur en France et acheteur hors Communaute europeenne et acheteur particulier) alors TVA par defaut=TVA du produit vendu. Fin de regle
    -	if (! empty($conf->global->MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC) && empty($buyer_in_cee) && !$thirdparty_buyer->isACompany())
    -	{
    +	if (! empty($conf->global->MAIN_USE_VAT_OF_PRODUCT_FOR_INDIVIDUAL_CUSTOMER_OUT_OF_EEC) && empty($buyer_in_cee) && !$thirdparty_buyer->isACompany()) {
     		return get_product_vat_for_country($idprod,$thirdparty_seller,$idprodfournprice);
     	}
     
    @@ -5551,7 +5615,6 @@ function dolGetFirstLineOfText($text, $nboflines=1)
     		{
     			$firstline=preg_replace('/<br[^>]*>.*$/s','',$text);		// The s pattern modifier means the . can match newline characters
     			$firstline=preg_replace('/<div[^>]*>.*$/s','',$firstline);	// The s pattern modifier means the . can match newline characters
    -
     		}
     		else
     		{
    @@ -5967,6 +6030,10 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
     			$substitutionarray['__SECUREKEYPAYMENT_INVOICE__'] = 'Security key for payment on an invoice';
     			$substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__'] = 'Security key for payment on a a service';
     
    +			$substitutionarray['__DIRECTDOWNLOAD_URL_PROPOSAL__'] = 'Direct download url of a proposal';
    +			$substitutionarray['__DIRECTDOWNLOAD_URL_ORDER__'] = 'Direct download url of an order';
    +			$substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__'] = 'Direct download url of an invoice';
    +
     			if (is_object($object) && $object->element == 'shipping')
     			{
     				$substitutionarray['__SHIPPINGTRACKNUM__']='Shipping tacking number';
    @@ -5980,7 +6047,7 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
     			$substitutionarray['__REFCLIENT__'] = (isset($object->ref_client) ? $object->ref_client : (isset($object->ref_customer) ? $object->ref_customer : ''));
     			$substitutionarray['__REFSUPPLIER__'] = (isset($object->ref_supplier) ? $object->ref_supplier : '');
     
    -			// TODO Use this ?
    +			// TODO Remove this
     			$msgishtml = 0;
     
     			$birthday = dol_print_date($object->birth,'day');
    @@ -6091,6 +6158,22 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
     
     			$substitutionarray['__ONLINE_PAYMENT_TEXT_AND_URL__']=($paymenturl?str_replace('\n', "\n", $outputlangs->trans("PredefinedMailContentLink", $paymenturl)):'');
     			$substitutionarray['__ONLINE_PAYMENT_URL__']=$paymenturl;
    +
    +			if (! empty($conf->global->PROPOSAL_ALLOW_EXTERNAL_DOWNLOAD) && is_object($object) && $object->element == 'propal')
    +			{
    +				$substitutionarray['__DIRECTDOWNLOAD_URL_PROPOSAL__'] = $object->getLastMainDocLink($object->element);
    +			}
    +			else $substitutionarray['__DIRECTDOWNLOAD_URL_PROPOSAL__'] = '';
    +			if (! empty($conf->global->ORDER_ALLOW_EXTERNAL_DOWNLOAD) && is_object($object) && $object->element == 'commande')
    +			{
    +				$substitutionarray['__DIRECTDOWNLOAD_URL_ORDER__'] = $object->getLastMainDocLink($object->element);
    +			}
    +			else $substitutionarray['__DIRECTDOWNLOAD_URL_ORDER__'] = '';
    +			if (! empty($conf->global->INVOICE_ALLOW_EXTERNAL_DOWNLOAD) && is_object($object) && $object->element == 'facture')
    +			{
    +				$substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__'] = $object->getLastMainDocLink($object->element);
    +			}
    +			else $substitutionarray['__DIRECTDOWNLOAD_URL_INVOICE__'] = '';
     		}
     	}
     	if (empty($exclude) || ! in_array('objectamount', $exclude))
    @@ -6134,7 +6217,13 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
     
     		$substitutionarray=array_merge($substitutionarray, array(
     			'__DAY__' => (string) $tmp['mday'],
    +			'__DAY_TEXT__' => $outputlangs->trans('Day'.$tmp['wday']),					// Monday
    +			'__DAY_TEXT_SHORT__' => $outputlangs->trans($tmp['weekday'].'Min'),			// Mon
    +			'__DAY_TEXT_MIN__' => $outputlangs->trans('Short'.$tmp['weekday']),			// M
     			'__MONTH__' => (string) $tmp['mon'],
    +			'__MONTH_TEXT__' => $outputlangs->trans('Month'.sprintf("%02d", $tmp['mon'])),
    +			'__MONTH_TEXT_SHORT__' => $outputlangs->trans('MonthShort'.sprintf("%02d", $tmp['mon'])),
    +			'__MONTH_TEXT_MIN__' => $outputlangs->trans('MonthVeryShort'.sprintf("%02d", $tmp['mon'])),
     			'__YEAR__' => (string) $tmp['year'],
     			'__PREVIOUS_DAY__' => (string) $tmp2['day'],
     			'__PREVIOUS_MONTH__' => (string) $tmp3['month'],
    @@ -6145,16 +6234,16 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
     		));
     	}
     
    -	if (empty($exclude) || ! in_array('system', $exclude))
    -	{
    -		$substitutionarray['__(AnyTranslationKey)__']=$outputlangs->trans('TranslationOfKey');
    -		$substitutionarray['__[AnyConstantKey]__']=$outputlangs->trans('ValueOfConstant');
    -		$substitutionarray['__DOL_MAIN_URL_ROOT__']=DOL_MAIN_URL_ROOT;
    -	}
     	if (! empty($conf->multicompany->enabled))
     	{
     		$substitutionarray=array_merge($substitutionarray, array('__ENTITY_ID__' => $conf->entity));
     	}
    +	if (empty($exclude) || ! in_array('system', $exclude))
    +	{
    +		$substitutionarray['__DOL_MAIN_URL_ROOT__']=DOL_MAIN_URL_ROOT;
    +		$substitutionarray['__(AnyTranslationKey)__']=$outputlangs->trans('TranslationOfKey');
    +		$substitutionarray['__[AnyConstantKey]__']=$outputlangs->trans('ValueOfConstantKey');
    +	}
     
     	return $substitutionarray;
     }
    @@ -6732,26 +6821,27 @@ function dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id
     	if ($key == '') return '';
     
     	// Check in cache
    -	if (isset($cache_codes[$tablename][$key]))	// Can be defined to 0 or ''
    +	if (isset($cache_codes[$tablename][$key][$fieldid]))	// Can be defined to 0 or ''
     	{
    -		return $cache_codes[$tablename][$key];   // Found in cache
    +		return $cache_codes[$tablename][$key][$fieldid];   // Found in cache
     	}
     
    +	dol_syslog('dol_getIdFromCode (value not found into cache)', LOG_DEBUG);
    +
     	$sql = "SELECT ".$fieldid." as valuetoget";
     	$sql.= " FROM ".MAIN_DB_PREFIX.$tablename;
     	$sql.= " WHERE ".$fieldkey." = '".$db->escape($key)."'";
     	if (! empty($entityfilter))
     		$sql.= " AND entity IN (" . getEntity($tablename) . ")";
     
    -	dol_syslog('dol_getIdFromCode', LOG_DEBUG);
     	$resql = $db->query($sql);
     	if ($resql)
     	{
     		$obj = $db->fetch_object($resql);
    -		if ($obj) $cache_codes[$tablename][$key]=$obj->valuetoget;
    -		else $cache_codes[$tablename][$key]='';
    +		if ($obj) $cache_codes[$tablename][$key][$fieldid]=$obj->valuetoget;
    +		else $cache_codes[$tablename][$key][$fieldid]='';
     		$db->free($resql);
    -		return $cache_codes[$tablename][$key];
    +		return $cache_codes[$tablename][$key][$fieldid];
     	}
     	else
     	{
    @@ -6763,7 +6853,7 @@ function dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id
      * Verify if condition in string is ok or not
      *
      * @param 	string		$strRights		String with condition to check
    - * @return 	boolean						True or False. Return true if strRights is ''
    + * @return 	boolean						True or False. Return True if strRights is ''
      */
     function verifCond($strRights)
     {
    @@ -6775,13 +6865,8 @@ function verifCond($strRights)
     	$rights = true;
     	if ($strRights != '')
     	{
    -		//$tab_rights = explode('&&', $strRights);
    -		//$i = 0;
    -		//while (($i < count($tab_rights)) && ($rights == true)) {
     		$str = 'if(!(' . $strRights . ')) { $rights = false; }';
    -		dol_eval($str);
    -		//	$i++;
    -		//}
    +		dol_eval($str);		// The dol_eval must contains all the global $xxx used into a condition
     	}
     	return $rights;
     }
    @@ -6798,8 +6883,8 @@ function verifCond($strRights)
     function dol_eval($s, $returnvalue=0, $hideerrors=1)
     {
     	// Only global variables can be changed by eval function and returned to caller
    -	global $db, $langs, $user, $conf;
    -	global $mainmenu, $leftmenu;
    +	global $db, $langs, $user, $conf, $website, $websitepage;
    +	global $action, $mainmenu, $leftmenu;
     	global $rights;
     	global $object;
     	global $mysoc;
    @@ -6844,8 +6929,6 @@ function picto_from_langcode($codelang, $moreatt = '')
     
     	if (empty($codelang)) return '';
     
    -	if (empty($codelang)) return '';
    -
     	if ($codelang == 'auto')
     	{
     		return '<span class="fa fa-globe"></span>';
    @@ -6958,7 +7041,7 @@ function complete_head_from_modules($conf,$langs,$object,&$head,&$h,$type,$mode=
     				foreach($head as $key => $val)
     				{
     					$condition = (! empty($values[3]) ? verifCond($values[3]) : 1);
    -					//var_dump($key.' - '.$tabname.' - '.$head[$key][2].' - '.$condition);
    +					//var_dump($key.' - '.$tabname.' - '.$head[$key][2].' - '.$values[3].' - '.$condition);
     					if ($head[$key][2]==$tabname && $condition)
     					{
     						unset($head[$key]);
    @@ -6995,7 +7078,8 @@ function complete_head_from_modules($conf,$langs,$object,&$head,&$h,$type,$mode=
      */
     function printCommonFooter($zone='private')
     {
    -	global $conf, $hookmanager;
    +	global $conf, $hookmanager, $user;
    +	global $action;
     	global $micro_start_time;
     
     	if ($zone == 'private') print "\n".'<!-- Common footer for private page -->'."\n";
    @@ -7015,6 +7099,7 @@ function printCommonFooter($zone='private')
     		if (! empty($conf->use_javascript_ajax))
     		{
     			print '<script type="text/javascript" language="javascript">'."\n";
    +			print 'jQuery(document).ready(function() {'."\n";
     
     			if ($zone == 'private' && empty($conf->dol_use_jmobile))
     			{
    @@ -7028,7 +7113,79 @@ function printCommonFooter($zone='private')
     				print '});'."\n";
     			}
     
    -			// Google Analytics (need Google module)
    +			// Management of focus and mandatory for fields
    +			if ($action == 'create' || $action == 'edit')
    +			{
    +				print '/* Code js to manage focus and mandatory form fields */'."\n";
    +				$relativepathstring = $_SERVER["PHP_SELF"];
    +				// Clean $relativepathstring
    +				if (constant('DOL_URL_ROOT')) $relativepathstring = preg_replace('/^'.preg_quote(constant('DOL_URL_ROOT'),'/').'/', '', $relativepathstring);
    +				$relativepathstring = preg_replace('/^\//', '', $relativepathstring);
    +				$relativepathstring = preg_replace('/^custom\//', '', $relativepathstring);
    +				$tmpqueryarraywehave=explode('&', dol_string_nohtmltag($_SERVER['QUERY_STRING']));
    +				if (!empty($user->default_values[$relativepathstring]['focus']))
    +				{
    +					foreach($user->default_values[$relativepathstring]['focus'] as $defkey => $defval)
    +					{
    +						$qualified = 0;
    +						if ($defkey != '_noquery_')
    +						{
    +							$tmpqueryarraytohave=explode('&', $defkey);
    +							$foundintru=0;
    +							foreach($tmpqueryarraytohave as $tmpquerytohave)
    +							{
    +								if (! in_array($tmpquerytohave, $tmpqueryarraywehave)) $foundintru=1;
    +							}
    +							if (! $foundintru) $qualified=1;
    +							//var_dump($defkey.'-'.$qualified);
    +						}
    +						else $qualified = 1;
    +
    +						if ($qualified)
    +						{
    +							foreach($defval as $paramkey => $paramval)
    +							{
    +								// Add property 'required' on input
    +								print 'jQuery("input[name=\''.$paramkey.'\']").focus();'."\n";
    +							}
    +						}
    +					}
    +				}
    +				if (!empty($user->default_values[$relativepathstring]['mandatory']))
    +				{
    +					foreach($user->default_values[$relativepathstring]['mandatory'] as $defkey => $defval)
    +					{
    +						$qualified = 0;
    +						if ($defkey != '_noquery_')
    +						{
    +							$tmpqueryarraytohave=explode('&', $defkey);
    +							$foundintru=0;
    +							foreach($tmpqueryarraytohave as $tmpquerytohave)
    +							{
    +								if (! in_array($tmpquerytohave, $tmpqueryarraywehave)) $foundintru=1;
    +							}
    +							if (! $foundintru) $qualified=1;
    +							//var_dump($defkey.'-'.$qualified);
    +						}
    +						else $qualified = 1;
    +
    +						if ($qualified)
    +						{
    +							foreach($defval as $paramkey => $paramval)
    +							{
    +								// Add property 'required' on input
    +								print 'jQuery("input[name=\''.$paramkey.'\']").prop(\'required\',true);'."\n";
    +								print 'jQuery("select[name=\''.$paramkey.'\']").prop(\'required\',true);'."\n";		// required on a select works only if key is "", this does not happen in Dolibarr
    +							}
    +						}
    +					}
    +				}
    +			}
    +
    +			print '});'."\n";
    +
    +			// Google Analytics
    +			// TODO Add a hook here
     			if (! empty($conf->google->enabled) && ! empty($conf->global->MAIN_GOOGLE_AN_ID))
     			{
     				if (($conf->dol_use_jmobile != 4))
    @@ -7164,15 +7321,16 @@ function dol_getmypid()
     /**
      * Generate natural SQL search string for a criteria (this criteria can be tested on one or several fields)
      *
    - * @param 	string|string[]	$fields 	String or array of strings, filled with the name of all fields in the SQL query we must check (combined with a OR). Example: array("p.field1","p.field2")
    - * @param 	string 			$value 		The value to look for.
    + * @param   string|string[]	$fields 	String or array of strings, filled with the name of all fields in the SQL query we must check (combined with a OR). Example: array("p.field1","p.field2")
    + * @param   string 			$value 		The value to look for.
      *                          		    If param $mode is 0, can contains several keywords separated with a space or |
    - *                                         like "keyword1 keyword2" = We want record field like keyword1 AND field like keyword2
    - *                                         or like "keyword1|keyword2" = We want record field like keyword1 OR field like keyword2
    + *                                      like "keyword1 keyword2" = We want record field like keyword1 AND field like keyword2
    + *                                      or like "keyword1|keyword2" = We want record field like keyword1 OR field like keyword2
      *                             			If param $mode is 1, can contains an operator <, > or = like "<10" or ">=100.5 < 1000"
      *                             			If param $mode is 2, can contains a list of int id separated by comma like "1,3,4"
      *                             			If param $mode is 3, can contains a list of string separated by comma like "a,b,c"
    - * @param	integer			$mode		0=value is list of keyword strings, 1=value is a numeric test (Example ">5.5 <10"), 2=value is a list of id separated with comma (Example '1,3,4')
    + * @param	integer			$mode		0=value is list of keyword strings, 1=value is a numeric test (Example ">5.5 <10"), 2=value is a list of ID separated with comma (Example '1,3,4')
    + * 										3=value is list of string separated with comma (Example 'text 1,text 2'), 4=value is a list of ID separated with comma (Example '1,3,4') for search into a multiselect string ('1,2')
      * @param	integer			$nofirstand	1=Do not output the first 'AND'
      * @return 	string 			$res 		The statement to append to the SQL query
      */
    @@ -7256,11 +7414,9 @@ function natural_search($fields, $value, $mode=0, $nofirstand=0)
     			else if ($mode == 4)
     			{
     			    $tmparray=explode(',',trim($crit));
    -
     			    if (count($tmparray))
     			    {
     			        $listofcodes='';
    -
     			        foreach($tmparray as $val)
     			        {
     			            if ($val)
    @@ -7269,7 +7425,7 @@ function natural_search($fields, $value, $mode=0, $nofirstand=0)
     			                $newres .= ' OR '. $field . ' = \'' . $db->escape(trim($val)) . '\'';
     			                $newres .= ' OR '. $field . ' LIKE \'%,' . $db->escape(trim($val)) . '\'';
     			                $newres .= ' OR '. $field . ' LIKE \'%,' . $db->escape(trim($val)) . ',%\'';
    -					$newres .= ')';
    +			                $newres .= ')';
     			                $i2++;
     			            }
     			        }
    @@ -7421,6 +7577,7 @@ function getAdvancedPreviewUrl($modulepart, $relativepath, $alldata=0, $param=''
      *
      * @param string	$htmlname	Id of html object
      * @param string	$addlink	Add a 'link to' after
    + * @return string
      */
     function ajax_autoselect($htmlname, $addlink='')
     {
    @@ -7558,6 +7715,7 @@ function dol_mimetype($file, $default='application/octet-stream', $mode=0)
      * @param int		$id				id of line
      * @param bool		$checkentity	add filter on entity
      * @param string	$rowidfield		name of the column rowid
    + * @return string
      */
     function getDictvalue($tablename, $field, $id, $checkentity=false, $rowidfield='rowid')
     {
    @@ -7567,7 +7725,7 @@ function getDictvalue($tablename, $field, $id, $checkentity=false, $rowidfield='
     	{
     		$dictvalues[$tablename] = array();
     		$sql = 'SELECT * FROM '.$tablename.' WHERE 1';
    -		if ($checkentity) $sql.= ' entity IN (0,'.getEntity('').')';
    +		if ($checkentity) $sql.= ' AND entity IN (0,'.getEntity($tablename).')';
     
     		$resql = $db->query($sql);
     		if ($resql)
    diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php
    index 41ff14b011a..aae70adfb62 100644
    --- a/htdocs/core/lib/functions2.lib.php
    +++ b/htdocs/core/lib/functions2.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2011  Laurent Destailleur         <eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2012  Regis Houssin               <regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2012  Regis Houssin               <regis.houssin@inodbox.com>
      * Copyright (C) 2008       Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      * Copyright (C) 2014-2016  Marcos García               <marcosgdf@gmail.com>
      * Copyright (C) 2015       Ferran Marcet               <fmarcet@2byte.es>
    @@ -194,9 +194,10 @@ function dol_print_file($langs,$filename,$searchalt=0)
      */
     function dol_print_object_info($object, $usetable=0)
     {
    -    global $langs,$db;
    -    $langs->load("other");
    -    $langs->load("admin");
    +    global $langs, $db;
    +
    +    // Load translation files required by the page
    +    $langs->loadLangs(array('other', 'admin'));
     
         include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
    @@ -989,7 +990,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m
         if ($bentityon) // only if entity enable
         	$sql.= " AND entity IN (".getEntity($sharetable).")";
         else if (! empty($forceentity))
    -    	$sql.= " AND entity = ".(int) $forceentity;
    +    	$sql.= " AND entity IN (".$forceentity.")";
         if ($where) $sql.=$where;
         if ($sqlwhere) $sql.=' AND '.$sqlwhere;
     
    @@ -1038,7 +1039,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m
         	if ($bentityon) // only if entity enable
             	$sql.= " AND entity IN (".getEntity($sharetable).")";
             else if (! empty($forceentity))
    -        	$sql.= " AND entity = ".(int) $forceentity;
    +        	$sql.= " AND entity IN (".$forceentity.")";
             if ($where) $sql.=$where;
             if ($sqlwhere) $sql.=' AND '.$sqlwhere;
     
    @@ -1094,7 +1095,7 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m
                 if ($bentityon) // only if entity enable
                 	$maskrefclient_sql.= " AND entity IN (".getEntity($sharetable).")";
                 else if (! empty($forceentity))
    -            	$sql.= " AND entity = ".(int) $forceentity;
    +            	$sql.= " AND entity IN (".$forceentity.")";
                 if ($where) $maskrefclient_sql.=$where; //use the same optional where as general mask
                 if ($sqlwhere) $maskrefclient_sql.=' AND '.$sqlwhere; //use the same sqlwhere as general mask
                 $maskrefclient_sql.=' AND (SUBSTRING('.$field.', '.(strpos($maskwithnocode,$maskrefclient)+1).', '.dol_strlen($maskrefclient_maskclientcode).")='".$maskrefclient_clientcode."')";
    @@ -1167,7 +1168,16 @@ function get_next_value($db,$mask,$table,$field,$where='',$objsoc='',$date='',$m
         return $numFinal;
     }
     
    -function get_string_between($string, $start, $end){
    +/**
    + * Get string between
    + *
    + * @param   string  $string     String to test
    + * @param   int     $start      Value for start
    + * @param   int     $end        Value for end
    + * @return  string              Return part of string
    + */
    +function get_string_between($string, $start, $end)
    +{
         $string = " ".$string;
          $ini = strpos($string,$start);
          if ($ini == 0) return "";
    @@ -1760,7 +1770,7 @@ function getSoapParams()
     
     
     /**
    - * List urls of element
    + * Return link url to an object
      *
      * @param 	int		$objectid		Id of record
      * @param 	string	$objecttype		Type of object ('invoice', 'order', 'expedition_bon', ...)
    @@ -1871,7 +1881,11 @@ function dolGetElementUrl($objectid,$objecttype,$withpicto=0,$option='')
     			{
     				$object = new $classname($db);
     				$res=$object->fetch($objectid);
    -				if ($res > 0) $ret=$object->getNomUrl($withpicto,$option);
    +				if ($res > 0) {
    +					$ret=$object->getNomUrl($withpicto,$option);
    +				} elseif($res==0) {
    +					$ret=$langs->trans('Deleted');
    +				}
     				unset($object);
     			}
     			else dol_syslog("Class with classname ".$classname." is unknown even after the include", LOG_ERR);
    @@ -2193,7 +2207,8 @@ function colorStringToArray($stringcolor,$colorifnotfound=array(88,88,88))
      * @param   array $input    Array of products
      * @return  array           Array of combinations
      */
    -function cartesianArray(array $input) {
    +function cartesianArray(array $input)
    +{
         // filter out empty values
         $input = array_filter($input);
     
    @@ -2301,8 +2316,9 @@ function getModuleDirForApiClass($module)
      * @param	$max	int	Between 0 and 255
      * @return String
      */
    -function random_color_part($min=0,$max=255) {
    -	return str_pad( dechex( mt_rand( $min, $max) ), 2, '0', STR_PAD_LEFT);
    +function random_color_part($min=0,$max=255)
    +{
    +    return str_pad( dechex( mt_rand( $min, $max) ), 2, '0', STR_PAD_LEFT);
     }
     
     /*
    @@ -2312,6 +2328,7 @@ function random_color_part($min=0,$max=255) {
      * @param	$max	int	Between 0 and 255
      * @return String
      */
    -function random_color($min=0, $max=255) {
    -	return random_color_part($min, $max) . random_color_part($min, $max) . random_color_part($min, $max);
    +function random_color($min=0, $max=255)
    +{
    +    return random_color_part($min, $max) . random_color_part($min, $max) . random_color_part($min, $max);
     }
    diff --git a/htdocs/core/lib/functionsnumtoword.lib.php b/htdocs/core/lib/functionsnumtoword.lib.php
    index f4319b7d11a..9f04a81fa5f 100644
    --- a/htdocs/core/lib/functionsnumtoword.lib.php
    +++ b/htdocs/core/lib/functionsnumtoword.lib.php
    @@ -21,12 +21,12 @@
      *	\brief			A set of functions for Dolibarr
      *					This file contains all frequently used functions.
      */
    - 
    - 
    +
    +
     /**
      * Function to return number in text.
    - * 
    - * 
    + *
    + *
      * @param	float 	$num			Number to convert
      * @param	Lang	$langs			Language
      * @param	boolean	$currency		0=number to translate | 1=currency to translate
    @@ -36,7 +36,7 @@
     function dol_convertToWord($num, $langs, $currency=false, $centimes=false)
     {
     	global $conf;
    -	
    +
         $num = str_replace(array(',', ' '), '', trim($num));
         if(! $num) {
             return false;
    @@ -48,49 +48,49 @@ function dol_convertToWord($num, $langs, $currency=false, $centimes=false)
         $num = (int) $TNum[0];
         $words = array();
         $list1 = array(
    -    	'', 
    -    	$langs->transnoentitiesnoconv('one'), 
    -    	$langs->transnoentitiesnoconv('two'), 
    -    	$langs->transnoentitiesnoconv('three'), 
    -    	$langs->transnoentitiesnoconv('four'), 
    -    	$langs->transnoentitiesnoconv('five'), 
    -    	$langs->transnoentitiesnoconv('six'), 
    -    	$langs->transnoentitiesnoconv('seven'), 
    -    	$langs->transnoentitiesnoconv('eight'), 
    -    	$langs->transnoentitiesnoconv('nine'), 
    -    	$langs->transnoentitiesnoconv('ten'), 
    +    	'',
    +    	$langs->transnoentitiesnoconv('one'),
    +    	$langs->transnoentitiesnoconv('two'),
    +    	$langs->transnoentitiesnoconv('three'),
    +    	$langs->transnoentitiesnoconv('four'),
    +    	$langs->transnoentitiesnoconv('five'),
    +    	$langs->transnoentitiesnoconv('six'),
    +    	$langs->transnoentitiesnoconv('seven'),
    +    	$langs->transnoentitiesnoconv('eight'),
    +    	$langs->transnoentitiesnoconv('nine'),
    +    	$langs->transnoentitiesnoconv('ten'),
         	$langs->transnoentitiesnoconv('eleven'),
    -        $langs->transnoentitiesnoconv('twelve'), 
    -        $langs->transnoentitiesnoconv('thirteen'), 
    -        $langs->transnoentitiesnoconv('fourteen'), 
    -        $langs->transnoentitiesnoconv('fifteen'), 
    -        $langs->transnoentitiesnoconv('sixteen'), 
    -        $langs->transnoentitiesnoconv('seventeen'), 
    -        $langs->transnoentitiesnoconv('eighteen'), 
    +        $langs->transnoentitiesnoconv('twelve'),
    +        $langs->transnoentitiesnoconv('thirteen'),
    +        $langs->transnoentitiesnoconv('fourteen'),
    +        $langs->transnoentitiesnoconv('fifteen'),
    +        $langs->transnoentitiesnoconv('sixteen'),
    +        $langs->transnoentitiesnoconv('seventeen'),
    +        $langs->transnoentitiesnoconv('eighteen'),
             $langs->transnoentitiesnoconv('nineteen')
         );
         $list2 = array(
    -    	'', 
    -	    $langs->transnoentitiesnoconv('ten'), 
    -	    $langs->transnoentitiesnoconv('twenty'), 
    -	    $langs->transnoentitiesnoconv('thirty'), 
    -	    $langs->transnoentitiesnoconv('forty'), 
    -	    $langs->transnoentitiesnoconv('fifty'), 
    -	    $langs->transnoentitiesnoconv('sixty'), 
    -	    $langs->transnoentitiesnoconv('seventy'), 
    -	    $langs->transnoentitiesnoconv('eighty'), 
    -	    $langs->transnoentitiesnoconv('ninety'), 
    +    	'',
    +	    $langs->transnoentitiesnoconv('ten'),
    +	    $langs->transnoentitiesnoconv('twenty'),
    +	    $langs->transnoentitiesnoconv('thirty'),
    +	    $langs->transnoentitiesnoconv('forty'),
    +	    $langs->transnoentitiesnoconv('fifty'),
    +	    $langs->transnoentitiesnoconv('sixty'),
    +	    $langs->transnoentitiesnoconv('seventy'),
    +	    $langs->transnoentitiesnoconv('eighty'),
    +	    $langs->transnoentitiesnoconv('ninety'),
     	    $langs->transnoentitiesnoconv('hundred')
     	);
         $list3 = array(
    -    	'', 
    -    	$langs->transnoentitiesnoconv('thousand'), 
    -    	$langs->transnoentitiesnoconv('million'), 
    -    	$langs->transnoentitiesnoconv('billion'), 
    -    	$langs->transnoentitiesnoconv('trillion'), 
    +    	'',
    +    	$langs->transnoentitiesnoconv('thousand'),
    +    	$langs->transnoentitiesnoconv('million'),
    +    	$langs->transnoentitiesnoconv('billion'),
    +    	$langs->transnoentitiesnoconv('trillion'),
         	$langs->transnoentitiesnoconv('quadrillion')
         );
    -	
    +
         $num_length = strlen($num);
         $levels = (int) (($num_length + 2) / 3);
         $max_length = $levels * 3;
    @@ -120,11 +120,11 @@ function dol_convertToWord($num, $langs, $currency=false, $centimes=false)
     	$concatWords = implode(' ', $words);
     	// Delete multi whitespaces
     	$concatWords = trim(preg_replace('/[ ]+/', ' ', $concatWords));
    -	
    +
     	if(!empty($currency)) {
     		$concatWords .= ' '.$currency;
     	}
    -	
    +
     	// If we need to write cents call again this function for cents
     	if(!empty($TNum[1])) {
     		if(!empty($currency)) $concatWords .= ' '.$langs->transnoentities('and');
    @@ -133,11 +133,11 @@ function dol_convertToWord($num, $langs, $currency=false, $centimes=false)
     	}
         return $concatWords;
     }
    - 
    - 
    +
    +
     /**
      * Function to return number or amount in text.
    - * 
    + *
      * @deprecated
      * @param	float 	$numero			Number to convert
      * @param	Lang	$langs			Language
    @@ -164,7 +164,7 @@ function dolNumberToWord($numero, $langs, $numorcurrency='number')
     	/*In dolibarr 3.6.2 (my current version) doesn't have $langs->default and
     	in case exist why ask $lang like a parameter?*/
     	if (((is_object($langs) && $langs->default == 'es_MX') || (! is_object($langs) && $langs == 'es_MX')) && $numorcurrency == 'currency')
    -	{	
    +	{
     		if ($numero>=1 && $numero<2) {
     			return ("UN PESO ".$parte_decimal." / 100 M.N.");
     		}
    @@ -229,10 +229,11 @@ function dolNumberToWord($numero, $langs, $numorcurrency='number')
     
     /**
      * hundreds2text
    - * 
    + *
      * @param integer $hundreds     Hundreds
      * @param integer $tens         Tens
      * @param integer $units        Units
    + * @return string
      */
     function hundreds2text($hundreds, $tens, $units)
     {
    diff --git a/htdocs/core/lib/holiday.lib.php b/htdocs/core/lib/holiday.lib.php
    index 56d19d0e0f1..b4b19d4df40 100644
    --- a/htdocs/core/lib/holiday.lib.php
    +++ b/htdocs/core/lib/holiday.lib.php
    @@ -61,3 +61,32 @@ function holiday_prepare_head($object)
     
     	return $head;
     }
    +
    +
    +/**
    + *  Return array head with list of tabs to view object informations
    + *
    +  *  @return array           		head
    + */
    +function holiday_admin_prepare_head()
    +{
    +	global $db, $langs, $conf, $user;
    +
    +	$h = 0;
    +	$head = array();
    +
    +    $head[$h][0] = DOL_URL_ROOT.'/admin/holiday.php';
    +    $head[$h][1] = $langs->trans("Setup");
    +    $head[$h][2] = 'holiday';
    +    $h++;
    +
    +    // Show more tabs from modules
    +    // Entries must be declared in modules descriptor with line
    +    // $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__');   to add new tab
    +    // $this->tabs = array('entity:-tabname);   												to remove a tab
    +    complete_head_from_modules($conf,$langs,null,$head,$h,'holiday_admin');
    +
    +	complete_head_from_modules($conf,$langs,null,$head,$h,'holiday_admin','remove');
    +
    +	return $head;
    +}
    diff --git a/htdocs/core/lib/hrm.lib.php b/htdocs/core/lib/hrm.lib.php
    index 5f7eabc7500..08b0e3be01a 100644
    --- a/htdocs/core/lib/hrm.lib.php
    +++ b/htdocs/core/lib/hrm.lib.php
    @@ -18,7 +18,7 @@
     /**
      * \file    htdocs/core/lib/hrm.lib.php
      * \ingroup HRM
    - * \brief   Library for hrm 
    + * \brief   Library for hrm
      */
     $langs->load('hrm');
     
    diff --git a/htdocs/core/lib/images.lib.php b/htdocs/core/lib/images.lib.php
    index f0a666b03e9..a37bd2818a1 100644
    --- a/htdocs/core/lib/images.lib.php
    +++ b/htdocs/core/lib/images.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/lib/import.lib.php b/htdocs/core/lib/import.lib.php
    index ea700c38845..c3b8beac249 100644
    --- a/htdocs/core/lib/import.lib.php
    +++ b/htdocs/core/lib/import.lib.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006-2009  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2007       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    - * Copyright (C) 2010       Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010       Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2010       Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
    diff --git a/htdocs/core/lib/invoice.lib.php b/htdocs/core/lib/invoice.lib.php
    index 4e7fa860529..aa728e5d653 100644
    --- a/htdocs/core/lib/invoice.lib.php
    +++ b/htdocs/core/lib/invoice.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry		<florian.henry@open-concept.pro>
      * Copyright (C) 2015      Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2017      	Charlie Benke		<charlie@patas-monkey.com>
    @@ -36,7 +36,7 @@
     function facture_prepare_head($object)
     {
     	global $db, $langs, $conf;
    -	
    +
     	$h = 0;
     	$head = array();
     
    @@ -63,7 +63,7 @@ function facture_prepare_head($object)
     	    $sql .= " FROM ".MAIN_DB_PREFIX."prelevement_facture_demande as pfd";
     	    $sql .= " WHERE pfd.fk_facture = ".$object->id;
             $resql=$db->query($sql);
    -        if ($resql) 
    +        if ($resql)
             {
                 $obj=$db->fetch_object($resql);
                 if ($obj) $nbStandingOrders = $obj->nb;
    @@ -152,12 +152,12 @@ function invoice_admin_prepare_head()
     	$head[$h][1] = $langs->trans("ExtraFieldsLines");
     	$head[$h][2] = 'attributeslines';
     	$h++;
    -	
    +
     	$head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facture_rec_cust_extrafields.php';
     	$head[$h][1] = $langs->trans("ExtraFieldsCustomerInvoicesRec");
     	$head[$h][2] = 'attributesrec';
     	$h++;
    -	
    +
     	$head[$h][0] = DOL_URL_ROOT.'/compta/facture/admin/facturedet_rec_cust_extrafields.php';
     	$head[$h][1] = $langs->trans("ExtraFieldsLinesRec");
     	$head[$h][2] = 'attributeslinesrec';
    @@ -169,10 +169,16 @@ function invoice_admin_prepare_head()
     }
     
     
    +/**
    + * Return array head with list of tabs to view object informations.
    + *
    + * @param   Facture     $object     Invoice object
    + * @return array                    head array with tabs
    + */
     function invoice_rec_prepare_head($object)
     {
     	global $db, $langs, $conf;
    -	
    +
     	$h = 0;
     	$head = array();
     
    @@ -191,5 +197,3 @@ function invoice_rec_prepare_head($object)
     
     	return $head;
     }
    -
    -
    diff --git a/htdocs/core/lib/invoice2.lib.php b/htdocs/core/lib/invoice2.lib.php
    index 866cf004ca6..f318f493417 100644
    --- a/htdocs/core/lib/invoice2.lib.php
    +++ b/htdocs/core/lib/invoice2.lib.php
    @@ -23,8 +23,8 @@
      *      \brief      Function to rebuild PDF and merge PDF files into one
      */
     
    -require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php');
    -require_once(DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php');
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
     
     
     /**
    diff --git a/htdocs/core/lib/json.lib.php b/htdocs/core/lib/json.lib.php
    index 61d6a923c1f..f58d1b44dbf 100644
    --- a/htdocs/core/lib/json.lib.php
    +++ b/htdocs/core/lib/json.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2011-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/lib/ldap.lib.php b/htdocs/core/lib/ldap.lib.php
    index 3db36723b32..c64ea1fa090 100644
    --- a/htdocs/core/lib/ldap.lib.php
    +++ b/htdocs/core/lib/ldap.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006		Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2017	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/lib/loan.lib.php b/htdocs/core/lib/loan.lib.php
    index 3f7029dd26b..b61c57b4bc3 100644
    --- a/htdocs/core/lib/loan.lib.php
    +++ b/htdocs/core/lib/loan.lib.php
    @@ -59,7 +59,7 @@ function loan_prepare_head($object)
     	$tab++;
     
     	if (empty($conf->global->MAIN_DISABLE_NOTES_TAB))
    -	{		
    +	{
     		$nbNote = (empty($object->note_private)?0:1)+(empty($object->note_public)?0:1);
     		$head[$tab][0] = DOL_URL_ROOT."/loan/note.php?id=".$object->id;
     		$head[$tab][1] = $langs->trans("Notes");
    diff --git a/htdocs/core/lib/member.lib.php b/htdocs/core/lib/member.lib.php
    index 3148d484ab5..a5016579cd4 100644
    --- a/htdocs/core/lib/member.lib.php
    +++ b/htdocs/core/lib/member.lib.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2006-2015	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2015-2016	Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2015		Raphaël Doursenaud	<rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) 2017		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2017		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/lib/modulebuilder.lib.php b/htdocs/core/lib/modulebuilder.lib.php
    index 8187c15f684..4981e0fffd0 100644
    --- a/htdocs/core/lib/modulebuilder.lib.php
    +++ b/htdocs/core/lib/modulebuilder.lib.php
    @@ -63,7 +63,9 @@ function rebuildObjectClass($destdir, $module, $objectname, $newmask, $readdir='
         		setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Label")), null, 'errors');
         		return -2;
         	}
    -    	if (! preg_match('/^(integer|date|timestamp|varchar|double|html|price)/', $addfieldentry['type']))
    +
    +    	if (! preg_match('/^(price|boolean|sellist|integer|date|timestamp|varchar|double|text|html)/', $addfieldentry['type']))
    +
         	{
         		setEventMessages($langs->trans('BadFormatForType', $objectname), null, 'errors');
         		return -2;
    @@ -259,8 +261,10 @@ function rebuildObjectSql($destdir, $module, $objectname, $newmask, $readdir='',
     
                 $type = $val['type'];
                 $type = preg_replace('/:.*$/', '', $type);		// For case type = 'integer:Societe:societe/class/societe.class.php'
    +
                 if ($type == 'html') $type = 'text';            // html modulebuilder type is a text type in database
    -            if ($type == 'price') $type = 'double';            // html modulebuilder type is a text type in database
    +            else if ($type == 'price') $type = 'double';            // html modulebuilder type is a text type in database
    +            else if ($type == 'link' || $type == 'sellist') $type = 'integer';
                 $texttoinsert.= "\t".$key." ".$type;
                 if ($key == 'rowid')  $texttoinsert.= ' AUTO_INCREMENT PRIMARY KEY';
                 if ($key == 'entity') $texttoinsert.= ' DEFAULT 1';
    @@ -269,7 +273,7 @@ function rebuildObjectSql($destdir, $module, $objectname, $newmask, $readdir='',
                 	if ($val['default'] != '')
                 	{
                 		if (preg_match('/^null$/i', $val['default'])) $texttoinsert.= " DEFAULT NULL";
    -            		else if (preg_match('/varchar/', $val['type'])) $texttoinsert.= " DEFAULT '".$db->escape($val['default'])."'";
    +            		else if (preg_match('/varchar/', $type )) $texttoinsert.= " DEFAULT '".$db->escape($val['default'])."'";
                 		else $texttoinsert.= (($val['default'] > 0)?' DEFAULT '.$val['default']:'');
                 	}
                 }
    @@ -339,5 +343,3 @@ function rebuildObjectSql($destdir, $module, $objectname, $newmask, $readdir='',
     
         return $error ? -1 : 1;
     }
    -
    -
    diff --git a/htdocs/core/lib/order.lib.php b/htdocs/core/lib/order.lib.php
    index cdbd46b1aa7..93a7aaa71e0 100644
    --- a/htdocs/core/lib/order.lib.php
    +++ b/htdocs/core/lib/order.lib.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006-2012	Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2007		Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2010-2012	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010		Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/lib/payments.lib.php b/htdocs/core/lib/payments.lib.php
    index 9e07976f072..0119b0f0ee5 100644
    --- a/htdocs/core/lib/payments.lib.php
    +++ b/htdocs/core/lib/payments.lib.php
    @@ -25,7 +25,8 @@
      * @param Paiement $object Current payment object
      * @return array Tabs for the payment section
      */
    -function payment_prepare_head(Paiement $object) {
    +function payment_prepare_head(Paiement $object)
    +{
     
     	global $langs, $conf;
     
    @@ -60,8 +61,8 @@ function payment_prepare_head(Paiement $object) {
      * @param Paiement $object Current payment object
      * @return array Tabs for the payment section
      */
    -function payment_supplier_prepare_head(Paiement $object) {
    -
    +function payment_supplier_prepare_head(Paiement $object)
    +{
     	global $langs, $conf;
     
     	$h = 0;
    @@ -91,7 +92,7 @@ function payment_supplier_prepare_head(Paiement $object) {
     /**
      * Return array of valid payment mode
      *
    - * @param	string	$paymentmethod		Filter on this payment method
    + * @param	string	$paymentmethod		Filter on this payment method (''=none, 'paypal', ...)
      * @return	array						Array of valid payment method
      */
     function getValidOnlinePaymentMethods($paymentmethod='')
    @@ -126,8 +127,9 @@ function showOnlinePaymentUrl($type,$ref)
     {
     	global $conf, $langs;
     
    -	$langs->load("payment");
    -	$langs->load("paybox");
    +	// Load translation files required by the page
    +    $langs->loadLangs(array('payment', 'paybox'));
    +
     	$servicename='Online';
     
     	$out = img_picto('','object_globe.png').' '.$langs->trans("ToOfferALinkForOnlinePayment",$servicename).'<br>';
    @@ -235,6 +237,24 @@ function getOnlinePaymentUrl($mode, $type, $ref='', $amount='9.99', $freetag='yo
     			}
     		}
     	}
    +	if ($type == 'donation')
    +	{
    +		$out=DOL_MAIN_URL_ROOT.'/public/payment/newpayment.php?source=donation&ref='.($mode?'<font color="#666666">':'');
    +		if ($mode == 1) $out.='donation_ref';
    +		if ($mode == 0) $out.=urlencode($ref);
    +		$out.=($mode?'</font>':'');
    +		if (! empty($conf->global->PAYMENT_SECURITY_TOKEN))
    +		{
    +			if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $out.='&securekey='.$conf->global->PAYMENT_SECURITY_TOKEN;
    +			else
    +			{
    +				$out.='&securekey='.($mode?'<font color="#666666">':'');
    +				if ($mode == 1) $out.="hash('".$conf->global->PAYMENT_SECURITY_TOKEN."' + '".$type."' + donation_ref)";
    +				if ($mode == 0) $out.= dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . $type . $ref, 2);
    +				$out.=($mode?'</font>':'');
    +			}
    +		}
    +	}
     
     	// For multicompany
     	if (! empty($out) && ! empty($conf->multicompany->enabled)) $out.="&entity=".$conf->entity; // Check the entity because we may have the same reference in several entities
    diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php
    index 73de27cafac..a9e8807c66a 100644
    --- a/htdocs/core/lib/pdf.lib.php
    +++ b/htdocs/core/lib/pdf.lib.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2006-2017	Laurent Destailleur 	<eldy@users.sourceforge.net>
      * Copyright (C) 2006		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2007		Patrick Raguin      	<patrick.raguin@gmail.com>
    - * Copyright (C) 2010-2012	Regis Houssin       	<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin       	<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2017	Juanjo Menent       	<jmenent@2byte.es>
      * Copyright (C) 2012		Christophe Battarel		<christophe.battarel@altairis.fr>
      * Copyright (C) 2012       Cédric Salvador         <csalvador@gpcsolutions.fr>
    @@ -261,8 +261,9 @@ function pdf_getHeightForLogo($logo, $url = false)
     /**
      * Function to try to calculate height of a HTML Content
      *
    - * @param TCPDF     $pdf            PDF initialized object
    - * @param string    $htmlcontent    HTML Contect
    + * @param 	TCPDF     $pdf				PDF initialized object
    + * @param 	string    $htmlcontent		HTML Contect
    + * @return 	int							Height
      * @see getStringHeight
      */
     function pdfGetHeightForHtmlContent(&$pdf, $htmlcontent)
    @@ -1203,8 +1204,16 @@ function pdf_getlinedesc($object,$i,$outputlangs,$hideref=0,$hidedesc=0,$issuppl
     	$note=(! empty($object->lines[$i]->note)?$object->lines[$i]->note:'');
     	$dbatch=(! empty($object->lines[$i]->detail_batch)?$object->lines[$i]->detail_batch:false);
     
    -	if ($issupplierline) $prodser = new ProductFournisseur($db);
    -	else $prodser = new Product($db);
    +	if ($issupplierline)
    +	{
    +		include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
    +		$prodser = new ProductFournisseur($db);
    +	}
    +	else
    +	{
    +		include_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
    +		$prodser = new Product($db);
    +	}
     
     	if ($idprod)
     	{
    @@ -1282,7 +1291,17 @@ function pdf_getlinedesc($object,$i,$outputlangs,$hideref=0,$hidedesc=0,$issuppl
     		{
     			if ($idprod)
     			{
    -				if (empty($hidedesc)) $libelleproduitservice.=$desc;
    +				if (empty($hidedesc))
    +				{
    +					if (!empty($conf->global->MAIN_DOCUMENTS_DESCRIPTION_FIRST))
    +					{
    +						$libelleproduitservice=$desc."\n".$libelleproduitservice;
    +					}
    +					else
    +					{
    +						$libelleproduitservice.=$desc;
    +					}
    +				}
     			}
     			else
     			{
    @@ -2086,8 +2105,8 @@ function pdf_getLinkedObjects($object,$outputlangs)
     		}
     		else if ($objecttype == 'shipping')
     		{
    -			$outputlangs->load('orders');
    -			$outputlangs->load('sendings');
    +			$outputlangs->loadLangs(array("orders", "sendings"));
    +
     			foreach($objects as $x => $elementobject)
     			{
     			    $order=null;
    @@ -2161,4 +2180,3 @@ function pdf_getSizeForImage($realpath)
     	}
     	return array('width'=>$width,'height'=>$height);
     }
    -
    diff --git a/htdocs/core/lib/prelevement.lib.php b/htdocs/core/lib/prelevement.lib.php
    index 47bc2cb1974..e6393326c71 100644
    --- a/htdocs/core/lib/prelevement.lib.php
    +++ b/htdocs/core/lib/prelevement.lib.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2010-2011 	Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2010		Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2011      	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2011      	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/lib/product.lib.php b/htdocs/core/lib/product.lib.php
    index 731f8859eba..68e78a29d76 100644
    --- a/htdocs/core/lib/product.lib.php
    +++ b/htdocs/core/lib/product.lib.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2007       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    - * Copyright (C) 2009-2010  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2010  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2015-2016	Marcos García			<marcosgdf@gmail.com>
      *
    @@ -190,8 +190,9 @@ function product_prepare_head($object)
     function productlot_prepare_head($object)
     {
         global $db, $langs, $conf, $user;
    -    $langs->load("products");
    -    $langs->load("productbatch");
    +
    +    // Load translation files required by the page
    +    $langs->loadLangs(array("products","productbatch"));
     
         $h = 0;
         $head = array();
    @@ -200,7 +201,7 @@ function productlot_prepare_head($object)
         $head[$h][1] = $langs->trans("Card");
         $head[$h][2] = 'card';
     	$h++;
    -	
    +
     	// Attachments
     	require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
         require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php';
    diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php
    index 4d5779c52d1..84d32725682 100644
    --- a/htdocs/core/lib/project.lib.php
    +++ b/htdocs/core/lib/project.lib.php
    @@ -1,7 +1,8 @@
     <?php
     /* Copyright (C) 2006-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent        <jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -1047,7 +1048,7 @@ function projectLinesPerDay(&$inc, $parent, $fuser, $lines, &$level, &$projectsr
     
     				// Form to add new time
     				print '<td class="nowrap leftborder" align="center">';
    -				$tableCell=$form->select_date($preselectedday,$lines[$i]->id,1,1,2,"addtime",0,0,1,$disabledtask);
    +				$tableCell = $form->selectDate($preselectedday, $lines[$i]->id, 1, 1, 2, "addtime", 0, 0, $disabledtask);
     				print $tableCell;
     				print '</td>';
     
    @@ -1706,4 +1707,3 @@ function print_projecttasks_array($db, $form, $socid, $projectsListId, $mytasks=
     		print '</table></form>';
     	}
     }
    -
    diff --git a/htdocs/core/lib/propal.lib.php b/htdocs/core/lib/propal.lib.php
    index c50661de831..3fc37196c71 100644
    --- a/htdocs/core/lib/propal.lib.php
    +++ b/htdocs/core/lib/propal.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,9 +32,7 @@
     function propal_prepare_head($object)
     {
     	global $db, $langs, $conf, $user;
    -	$langs->load("propal");
    -	$langs->load("compta");
    -	$langs->load("companies");
    +	$langs->loadLangs(array('propal', 'compta', 'companies'));
     
     	$h = 0;
     	$head = array();
    @@ -48,6 +46,7 @@ function propal_prepare_head($object)
     	|| (! empty($conf->livraison_bon->enabled) && $user->rights->expedition->livraison->lire))))
     	{
     		$langs->load("sendings");
    +		$text = '';
     		$head[$h][0] = DOL_URL_ROOT.'/expedition/propal.php?id='.$object->id;
     		if ($conf->expedition_bon->enabled) $text=$langs->trans("Shipment");
     		if ($conf->livraison_bon->enabled)  $text.='/'.$langs->trans("Receivings");
    diff --git a/htdocs/core/lib/report.lib.php b/htdocs/core/lib/report.lib.php
    index 475fbaa48d5..10fd7bc8919 100644
    --- a/htdocs/core/lib/report.lib.php
    +++ b/htdocs/core/lib/report.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/lib/resource.lib.php b/htdocs/core/lib/resource.lib.php
    index 6ab25c5b57f..defc45823e4 100644
    --- a/htdocs/core/lib/resource.lib.php
    +++ b/htdocs/core/lib/resource.lib.php
    @@ -77,6 +77,16 @@ function resource_prepare_head($object)
     	$head[$h][2] = 'documents';
     	$h++;
     
    +	$head[$h][0] = DOL_URL_ROOT.'/resource/agenda.php?id='.$object->id;
    +	$head[$h][1] = $langs->trans("Events");
    +	if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) ))
    +	{
    +		$head[$h][1].= '/';
    +		$head[$h][1].= $langs->trans("Agenda");
    +	}
    +	$head[$h][2] = 'agenda';
    +	$h++;
    +
     	/*$head[$h][0] = DOL_URL_ROOT.'/resource/info.php?id='.$object->id;
     	$head[$h][1] = $langs->trans('Info');
     	$head[$h][2] = 'info';
    @@ -87,7 +97,13 @@ function resource_prepare_head($object)
     	return $head;
     }
     
    -function resource_admin_prepare_head() {
    +/**
    + * Prepare head for admin tabs
    + *
    + * @return  array               Array of head entries
    + */
    +function resource_admin_prepare_head()
    +{
     
     	global $langs, $conf, $user;
     
    @@ -113,5 +129,4 @@ function resource_admin_prepare_head() {
     	complete_head_from_modules($conf,$langs,null,$head,$h,'resource_admin','remove');
     
     	return $head;
    -
     }
    diff --git a/htdocs/core/lib/salaries.lib.php b/htdocs/core/lib/salaries.lib.php
    index eaaa90a710e..0c121c308d3 100644
    --- a/htdocs/core/lib/salaries.lib.php
    +++ b/htdocs/core/lib/salaries.lib.php
    @@ -20,14 +20,15 @@
     /**
      * Returns an array with the tabs for the "salaries" section
      * It loads tabs from modules looking for the entity salaries
    - *  
    + *
      * @param Paiement $object Current salaries object
      * @return array Tabs for the salaries section
      */
    -function salaries_prepare_head($object) {
    -	
    +function salaries_prepare_head($object)
    +{
    +
     	global $db, $langs, $conf;
    -	
    +
     	$h = 0;
     	$head = array();
     
    @@ -57,7 +58,7 @@ function salaries_prepare_head($object) {
     	$head[$h][1] = $langs->trans("Info");
     	$head[$h][2] = 'info';
     	$h++;
    -    
    +
     	complete_head_from_modules($conf,$langs,$object,$head,$h,'salaries', 'remove');
     
     	return $head;
    diff --git a/htdocs/core/lib/security.lib.php b/htdocs/core/lib/security.lib.php
    index d2b768d75d5..83e90114bb6 100644
    --- a/htdocs/core/lib/security.lib.php
    +++ b/htdocs/core/lib/security.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2017 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -174,12 +174,11 @@ function dol_verifyHash($chain, $hash, $type='0')
      *	@param  string	$feature2		Feature to check, second level of permission (optional). Can be a 'or' check with 'level1|level2'.
      *  @param  string	$dbt_keyfield   Field name for socid foreign key if not fk_soc. Not used if objectid is null (optional)
      *  @param  string	$dbt_select     Field name for select if not rowid. Not used if objectid is null (optional)
    - *  @param	Canvas	$objcanvas		Object canvas
      *  @param	int		$isdraft		1=The object with id=$objectid is a draft
      * 	@return	int						Always 1, die process if not allowed
      *  @see dol_check_secure_access_document
      */
    -function restrictedArea($user, $features, $objectid=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $objcanvas=null, $isdraft=0)
    +function restrictedArea($user, $features, $objectid=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0)
     {
     	global $db, $conf;
     	global $hookmanager;
    @@ -659,12 +658,13 @@ function checkUserAccessToObject($user, $featuresarray, $objectid=0, $tableandsh
      */
     function accessforbidden($message='',$printheader=1,$printfooter=1,$showonlymessage=0)
     {
    -	global $conf, $db, $user, $langs;
    -	if (! is_object($langs))
    -	{
    -		include_once DOL_DOCUMENT_ROOT.'/core/class/translate.class.php';
    -		$langs=new Translate('',$conf);
    -	}
    +    global $conf, $db, $user, $langs;
    +    if (! is_object($langs))
    +    {
    +        include_once DOL_DOCUMENT_ROOT.'/core/class/translate.class.php';
    +        $langs=new Translate('',$conf);
    +        $langs->setDefaultLang();
    +    }
     
     	$langs->load("errors");
     
    diff --git a/htdocs/core/lib/security2.lib.php b/htdocs/core/lib/security2.lib.php
    index b6a348ea91d..88dae462058 100644
    --- a/htdocs/core/lib/security2.lib.php
    +++ b/htdocs/core/lib/security2.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2017 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -103,12 +103,12 @@ function checkLoginPassEntity($usertotest,$passwordtotest,$entitytotest,$authmod
         			}
         			else
         			{
    -    				dol_syslog("Authentification ko - failed to load file '".$authfile."'",LOG_ERR);
    +    				dol_syslog("Authentification ko - failed to load file '".$authfile."'", LOG_ERR);
         				sleep(1);
    -    				$langs->load('main');
    -    				$langs->load('other');
    -    				$langs->load('errors');
    -    				$_SESSION["dol_loginmesg"]=$langs->trans("ErrorFailedToLoadLoginFileForMode",$mode);
    +    				// Load translation files required by the page
    +                    $langs->loadLangs(array('other', 'main', 'errors'));
    +
    +    				$_SESSION["dol_loginmesg"]=$langs->trans("ErrorFailedToLoadLoginFileForMode", $mode);
         			}
         		}
         	}
    @@ -118,18 +118,18 @@ function checkLoginPassEntity($usertotest,$passwordtotest,$entitytotest,$authmod
     }
     
     
    -/**
    - * Show Dolibarr default login page.
    - * Part of this code is also duplicated into main.inc.php::top_htmlhead
    - *
    - * @param		Translate	$langs		Lang object (must be initialized by a new).
    - * @param		Conf		$conf		Conf object
    - * @param		Societe		$mysoc		Company object
    - * @return		void
    - */
     if (! function_exists('dol_loginfunction'))
     {
    -	function dol_loginfunction($langs,$conf,$mysoc)
    +    /**
    +     * Show Dolibarr default login page.
    +     * Part of this code is also duplicated into main.inc.php::top_htmlhead
    +     *
    +     * @param       Translate   $langs      Lang object (must be initialized by a new).
    +     * @param       Conf        $conf       Conf object
    +     * @param       Societe     $mysoc      Company object
    +     * @return      void
    +     */
    +    function dol_loginfunction($langs,$conf,$mysoc)
     	{
     		global $dolibarr_main_demo,$db;
     		global $smartphone,$hookmanager;
    @@ -228,11 +228,11 @@ if (! function_exists('dol_loginfunction'))
     
     		if (! empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small))
     		{
    -			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('thumbs/'.$mysoc->logo_small);
    +			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_small);
     		}
     		elseif (! empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$mysoc->logo))
     		{
    -			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode($mysoc->logo);
    +			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/'.$mysoc->logo);
     			$width=128;
     		}
     		elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/img/dolibarr_logo.png'))
    @@ -510,4 +510,3 @@ function getRandomPassword($generic=false)
     
     	return $generated_password;
     }
    -
    diff --git a/htdocs/core/lib/sendings.lib.php b/htdocs/core/lib/sendings.lib.php
    index b79b1d094da..1cafb6dc3d4 100644
    --- a/htdocs/core/lib/sendings.lib.php
    +++ b/htdocs/core/lib/sendings.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -36,8 +36,8 @@ function shipping_prepare_head($object)
     {
     	global $db, $langs, $conf, $user;
     
    -	$langs->load("sendings");
    -	$langs->load("deliveries");
    +	// Load translation files required by the page
    +    $langs->loadLangs(array("sendings","deliveries"));
     
     	$h = 0;
     	$head = array();
    @@ -121,8 +121,8 @@ function delivery_prepare_head($object)
     {
     	global $langs, $conf, $user;
     
    -	$langs->load("sendings");
    -	$langs->load("deliveries");
    +	// Load translation files required by the page
    +    $langs->loadLangs(array("sendings","deliveries"));
     
     	$h = 0;
     	$head = array();
    diff --git a/htdocs/core/lib/signature.lib.php b/htdocs/core/lib/signature.lib.php
    index b11d809caf2..2790c80c8e0 100644
    --- a/htdocs/core/lib/signature.lib.php
    +++ b/htdocs/core/lib/signature.lib.php
    @@ -28,8 +28,9 @@ function showOnlineSignatureUrl($type,$ref)
     {
     	global $conf, $langs;
     
    -	$langs->load("payment");
    -	$langs->load("paybox");
    +	// Load translation files required by the page
    +    $langs->loadLangs(array("payment","paybox"));
    +
     	$servicename='Online';
     
     	$out = img_picto('','object_globe.png').' '.$langs->trans("ToOfferALinkForOnlineSignature",$servicename).'<br>';
    diff --git a/htdocs/core/lib/stock.lib.php b/htdocs/core/lib/stock.lib.php
    index ac59ab230c7..579944117ab 100644
    --- a/htdocs/core/lib/stock.lib.php
    +++ b/htdocs/core/lib/stock.lib.php
    @@ -39,7 +39,7 @@ function stock_prepare_head($object)
     	$head[$h][2] = 'card';
     	$h++;
     
    -	$head[$h][0] = DOL_URL_ROOT.'/product/stock/mouvement.php?id='.$object->id;
    +	$head[$h][0] = DOL_URL_ROOT.'/product/stock/movement_list.php?id='.$object->id;
     	$head[$h][1] = $langs->trans("StockMovements");
     	$head[$h][2] = 'movements';
     	$h++;
    diff --git a/htdocs/core/lib/supplier_proposal.lib.php b/htdocs/core/lib/supplier_proposal.lib.php
    index 1756c92a32a..53dcf1c443f 100644
    --- a/htdocs/core/lib/supplier_proposal.lib.php
    +++ b/htdocs/core/lib/supplier_proposal.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,8 +32,9 @@
     function supplier_proposal_prepare_head($object)
     {
     	global $db, $langs, $conf, $user;
    -	$langs->load("supplier_proposal");
    -	$langs->load("compta");
    +
    +	// Load translation files required by the page
    +    $langs->loadLangs(array("supplier_proposal","compta"));
     
     	$h = 0;
     	$head = array();
    diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php
    index 1cce7527018..a61026fa67d 100644
    --- a/htdocs/core/lib/tax.lib.php
    +++ b/htdocs/core/lib/tax.lib.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004-2009 Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2006-2007 Yannick Warnier		<ywarnier@beeznest.org>
    - * Copyright (C) 2011	   Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2011	   Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2012-2017 Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
      * Copyright (C) 2012-2014 Raphaël Doursenaud   <rdoursenaud@gpcsolutions.fr>
    diff --git a/htdocs/core/lib/ticket.lib.php b/htdocs/core/lib/ticket.lib.php
    index 7fac65ab42b..e6ce5c1bddd 100644
    --- a/htdocs/core/lib/ticket.lib.php
    +++ b/htdocs/core/lib/ticket.lib.php
    @@ -105,6 +105,11 @@ function ticket_prepare_head($object)
         // History
         $head[$h][0] = DOL_URL_ROOT.'/ticket/history.php?track_id=' . $object->track_id;
         $head[$h][1] = $langs->trans('Events');
    +    if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) ))
    +    {
    +    	$head[$h][1].= '/';
    +    	$head[$h][1].= $langs->trans("Agenda");
    +    }
         $head[$h][2] = 'tabTicketLogs';
         $h++;
     
    @@ -155,9 +160,9 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $
         	$urllogo = DOL_URL_ROOT . '/theme/login_logo.png';
     
         	if (!empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output . '/logos/thumbs/' . $mysoc->logo_small)) {
    -    		$urllogo = DOL_URL_ROOT . '/viewimage.php?cache=1&amp;modulepart=companylogo&amp;file=' . urlencode('thumbs/' . $mysoc->logo_small);
    +    		$urllogo = DOL_URL_ROOT . '/viewimage.php?modulepart=mycompany&amp;entity='.$conf->entity.'&amp;file=' . urlencode('logos/thumbs/'.$mysoc->logo_small);
         	} elseif (!empty($mysoc->logo) && is_readable($conf->mycompany->dir_output . '/logos/' . $mysoc->logo)) {
    -    		$urllogo = DOL_URL_ROOT . '/viewimage.php?cache=1&amp;modulepart=companylogo&amp;file=' . urlencode($mysoc->logo);
    +    		$urllogo = DOL_URL_ROOT . '/viewimage.php?modulepart=mycompany&amp;entity='.$conf->entity.'&amp;file=' . urlencode('logos/'.$mysoc->logo);
         		$width = 128;
         	} elseif (is_readable(DOL_DOCUMENT_ROOT . '/theme/dolibarr_logo.png')) {
         		$urllogo = DOL_URL_ROOT . '/theme/dolibarr_logo.png';
    @@ -170,20 +175,3 @@ function llxHeaderTicket($title, $head = "", $disablejs = 0, $disablehead = 0, $
     
         print '<div style="margin-left: 50px; margin-right: 50px;">';
     }
    -
    -/**
    - * Show footer for new member
    - *
    - * @return void
    - */
    -function llxFooterTicket()
    -{
    -    print '</div>';
    -
    -    printCommonFooter('public');
    -
    -    dol_htmloutput_events();
    -
    -    print "</body>\n";
    -    print "</html>\n";
    -}
    diff --git a/htdocs/core/lib/trip.lib.php b/htdocs/core/lib/trip.lib.php
    index 33f977bcf34..76dde5be734 100644
    --- a/htdocs/core/lib/trip.lib.php
    +++ b/htdocs/core/lib/trip.lib.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011	Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011	Regis Houssin	<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php
    index 2cbba69d256..32b2be816df 100644
    --- a/htdocs/core/lib/usergroups.lib.php
    +++ b/htdocs/core/lib/usergroups.lib.php
    @@ -1,7 +1,8 @@
     <?php
     /* Copyright (C) 2006-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2017	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2015	    Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Ferran Marcet       <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -322,6 +323,10 @@ function show_theme($fuser,$edit=0,$foruserprofile=false)
     	if (empty($foruserprofile)) $hoverdisabled=(isset($conf->global->THEME_ELDY_USE_HOVER) && $conf->global->THEME_ELDY_USE_HOVER == '0');
     	else $hoverdisabled=(is_object($fuser)?(empty($fuser->conf->THEME_ELDY_USE_HOVER) || $fuser->conf->THEME_ELDY_USE_HOVER == '0'):'');
     
    +	$checkeddisabled='';
    +	if (empty($foruserprofile)) $checkeddisabled=(isset($conf->global->THEME_ELDY_USE_CHECKED) && $conf->global->THEME_ELDY_USE_CHECKED == '0');
    +	else $checkeddisabled=(is_object($fuser)?(empty($fuser->conf->THEME_ELDY_USE_CHECKED) || $fuser->conf->THEME_ELDY_USE_CHECKED == '0'):'');
    +
     	$colspan=2;
     	if ($foruserprofile) $colspan=4;
     
    @@ -809,8 +814,7 @@ function show_theme($fuser,$edit=0,$foruserprofile=false)
     	     print '</tr>';
     	     */
     	}
    -	else
    -	{
    +	else {
     		print '<tr class="oddeven">';
     		print '<td>'.$langs->trans("HighlightLinesColor").'</td>';
     		print '<td colspan="'.($colspan-1).'">';
    @@ -837,6 +841,50 @@ function show_theme($fuser,$edit=0,$foruserprofile=false)
     		print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis"));
     		print '</span>';
     		print '</td>';
    +	}
    +
    +	// Use Checked
    +	if ($foruserprofile)
    +	{
    +		/* Must first change option to choose color of highlight instead of yes or no.
    +	     print '<tr class="oddeven">';
    +	     print '<td>'.$langs->trans("HighlightLinesOnMouseHover").'</td>';
    +	     print '<td><input '.$bc[$var].' name="check_THEME_ELDY_USE_HOVER" disabled="disabled" type="checkbox" '.($conf->global->THEME_ELDY_USE_HOVER?" checked":"").'></td>';
    +	     print '<td align="left" class="nowrap" width="20%"><input '.$bc[$var].' name="check_MAIN_THEME"'.($edit?'':' disabled').' type="checkbox" '.($selected_theme?" checked":"").'> '.$langs->trans("UsePersonalValue").'</td>';
    +	     print '<td><input '.$bc[$var].' name="check_THEME_ELDY_USE_HOVER"'.($edit?'':' disabled="disabled"').' type="checkbox" '.($hoverdisabled?"":" checked").'>';
    +	     print ' &nbsp; ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')';
    +	     print '</td>';
    +	     print '</tr>';
    +	     */
    +	}
    +	else
    +	{
    +		print '<tr class="oddeven">';
    +		print '<td>'.$langs->trans("HighlightLinesChecked").'</td>';
    +		print '<td colspan="'.($colspan-1).'">';
    +		//print '<input '.$bc[$var].' name="check_THEME_ELDY_USE_HOVER"'.($edit?'':' disabled').' type="checkbox" '.($hoverdisabled?"":" checked").'>';
    +		//print ' &nbsp; ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')';
    +		if ($edit)
    +		{
    +			if ($conf->global->THEME_ELDY_USE_CHECKED == '1') $color='ffefbb';
    +			else $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_USE_CHECKED,array()),'');
    +			print $formother->selectColor($color,'THEME_ELDY_USE_CHECKED','formcolor',1).' ';
    +		}
    +		else
    +		{
    +			if ($conf->global->THEME_ELDY_USE_CHECKED == '1') $color='ffefbb';
    +			else $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_USE_CHECKED,array()),'');
    +			if ($color)
    +			{
    +				if ($color != 'ffefbb') print '<input type="text" class="colorthumb" disabled="disabled" style="padding: 1px; margin-top: 0; margin-bottom: 0; background-color: #'.$color.'" value="'.$color.'">';
    +				else print $langs->trans("Default");
    +			}
    +			else print $langs->trans("None");
    +		}
    +		print ' &nbsp; <span class="nowraponall">('.$langs->trans("Default").': <strong>ffefbb</strong>) ';
    +		print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis"));
    +		print '</span>';
    +		print '</td>';
     		print '</tr>';
     	}
     
    diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php
    index 4ca0812c9ee..350014b3eb9 100644
    --- a/htdocs/core/lib/website.lib.php
    +++ b/htdocs/core/lib/website.lib.php
    @@ -31,6 +31,7 @@
      * @param	string		$content			Content to replace
      * @param	int			$removephppart		0=Replace PHP sections with a PHP badge. 1=Remove completely PHP sections.
      * @return	boolean							True if OK
    + * @see dolWebsiteOutput for function used to replace content in a web server context
      */
     function dolWebsiteReplacementOfLinks($website, $content, $removephppart=0)
     {
    @@ -39,6 +40,23 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart=0)
     	if ($removephppart) $replacewith='';
     	$content = preg_replace('/value="<\?php((?!\?>).)*\?>\n*/ims', 'value="'.$replacewith.'"', $content);
     
    +	$replacewith='"callto=#';
    +	if ($removephppart) $replacewith='';
    +	$content = preg_replace('/"callto:<\?php((?!\?>).)*\?>\n*/ims', $replacewith, $content);
    +
    +	$replacewith='"mailto=#';
    +	if ($removephppart) $replacewith='';
    +	$content = preg_replace('/"mailto:<\?php((?!\?>).)*\?>\n*/ims', $replacewith, $content);
    +
    +	$replacewith='src="php';
    +	if ($removephppart) $replacewith='';
    +	$content = preg_replace('/src="<\?php((?!\?>).)*\?>\n*/ims', $replacewith, $content);
    +
    +	$replacewith='href="php';
    +	if ($removephppart) $replacewith='';
    +	$content = preg_replace('/href="<\?php((?!\?>).)*\?>\n*/ims', $replacewith, $content);
    +
    +	//$replacewith='<span class="phptag">...php...</span>';
     	$replacewith='<span class="phptag">...php...</span>';
     	if ($removephppart) $replacewith='';
     	$content = preg_replace('/<\?php((?!\?>).)*\?>\n*/ims', $replacewith, $content);
    @@ -48,10 +66,16 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart=0)
     	// Replace relative link /xxx.php with dolibarr URL
     	$content = preg_replace('/(href=")\/?([^:\"]*)(\.php\")/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep);
     
    +	// Fix relative link into medias with correct URL after the DOL_URL_ROOT: ../url("medias/
     	$content = preg_replace('/url\((["\']?)medias\//', 'url(\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
    +	$content = preg_replace('/data-slide-bg=(["\']?)medias\//', 'data-slide-bg=\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
     
    +	// <img src="medias/image.png... => <img src="dolibarr/viewimage.php/modulepart=medias&file=image.png...
    +	$content = preg_replace('/(<img[^>]*src=")(medias\/)/', '\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
     	// <img src="image.png... => <img src="dolibarr/viewimage.php/modulepart=medias&file=image.png...
    -	$content = preg_replace('/(<img[^>]*src=")(?!(http|'.preg_quote(DOL_URL_ROOT,'/').'\/viewimage))/', '\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
    +	$content = preg_replace('/(<img[^>]*src=")(?!(http|\/?viewimage|'.preg_quote(DOL_URL_ROOT,'/').'\/viewimage))/', '\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
    +	// <img src="viewimage.php/modulepart=medias&file=image.png" => <img src="dolibarr/viewimage.php/modulepart=medias&file=image.png"
    +	$content = preg_replace('/(<img[^>]*src=")(\/?viewimage\.php)/', '\1'.DOL_URL_ROOT.'/viewimage.php', $content, -1, $nbrep);
     
     	// action="newpage.php" => action="dolibarr/website/index.php?website=...&pageref=newpage
     	$content = preg_replace('/(action=")\/?([^:\"]*)(\.php\")/', '\1'.DOL_URL_ROOT.'/website/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep);
    @@ -70,23 +94,28 @@ function dolWebsiteReplacementOfLinks($website, $content, $removephppart=0)
      *
      * @param   string  $content    Content string
      * @return  void
    - * @see	dolWebsiteSaveContent
    + * @see	dolWebsiteReplacementOfLinks  for function used to replace content in the backoffice context when USEDOLIBARREDITOR is not on
      */
     function dolWebsiteOutput($content)
     {
     	global $db, $langs, $conf, $user;
     	global $dolibarr_main_url_root, $dolibarr_main_data_root;
     
    -	dol_syslog("dolWebsiteOutput start (mode=".(defined('USEDOLIBARRSERVER')?'USEDOLIBARRSERVER':'').')');
    +	dol_syslog("dolWebsiteOutput start (USEDOLIBARRSERVER=".(defined('USEDOLIBARRSERVER')?'1':'')." (USEDOLIBARREDITOR=".(defined('USEDOLIBARREDITOR')?'1':'').')');
     
     	// Define $urlwithroot
     	$urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
     	$urlwithroot=$urlwithouturlroot.DOL_URL_ROOT;		// This is to use external domain name found into config file
     	//$urlwithroot=DOL_MAIN_URL_ROOT;					// This is to use same domain name than current
     
    -	// Note: This seems never called when page is output inside the website editor (search 'REPLACEMENT OF LINKS When page called by website editor')
    -
    -	if (defined('USEDOLIBARRSERVER'))	// REPLACEMENT OF LINKS When page called from Dolibarr server
    +	if (defined('USEDOLIBARREDITOR'))		// REPLACEMENT OF LINKS When page called from Dolibarr editor
    +	{
    +		// We remove the <head> part of content
    +		$content = preg_replace('/<head>.*<\/head>/ims', '', $content);
    +		$content = preg_replace('/^.*<body(\s[^>]*)*>/ims', '', $content);
    +		$content = preg_replace('/<\/body(\s[^>]*)*>.*$/ims', '', $content);
    +	}
    +	elseif (defined('USEDOLIBARRSERVER'))	// REPLACEMENT OF LINKS When page called from Dolibarr server
     	{
     		global $website;
     
    @@ -98,20 +127,29 @@ function dolWebsiteOutput($content)
     		$content=preg_replace('/(href=")\/?([a-zA-Z0-9\-]+)(\")/', '\1'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2\3', $content, -1, $nbrep);
     		$content=preg_replace('/(href=")\/?([a-zA-Z0-9\-]+)(\?)/', '\1'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2\3', $content, -1, $nbrep);
     
    -		// Fix relative link /document.php with correct URL after the DOL_URL_ROOT:  ...href="/document.php?modulepart="
    +		// Fix relative link /document.php with correct URL after the DOL_URL_ROOT:  href="/document.php?modulepart=" => href="/dolibarr/document.php?modulepart="
     		$content=preg_replace('/(href=")(\/?document\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep);
     		$content=preg_replace('/(src=")(\/?document\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep);
     
    -		// Fix relative link /viewimage.php with correct URL after the DOL_URL_ROOT:  ...href="/viewimage.php?modulepart="
    +		// Fix relative link /viewimage.php with correct URL after the DOL_URL_ROOT: href="/viewimage.php?modulepart=" => href="/dolibarr/viewimage.php?modulepart="
     		$content=preg_replace('/(href=")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep);
    +		$content=preg_replace('/(src=")(\/?viewimage\.php\?[^\"]*modulepart=[^\"]*)(\")/', '\1'.DOL_URL_ROOT.'\2\3', $content, -1, $nbrep);
     
     		// Fix relative link into medias with correct URL after the DOL_URL_ROOT: ../url("medias/
     		$content=preg_replace('/url\((["\']?)medias\//', 'url(\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
    +		$content=preg_replace('/data-slide-bg=(["\']?)medias\//', 'data-slide-bg=\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
    +
    +		// <img src="medias/image.png... => <img src="dolibarr/viewimage.php/modulepart=medias&file=image.png...
    +		$content = preg_replace('/(<img[^>]*src=")(medias\/)/', '\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
    +		// <img src="image.png... => <img src="dolibarr/viewimage.php/modulepart=medias&file=image.png...
    +		$content = preg_replace('/(<img[^>]*src=")(?!(http|\/?viewimage|'.preg_quote(DOL_URL_ROOT,'/').'\/viewimage))/', '\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $content, -1, $nbrep);
    +		// <img src="viewimage.php/modulepart=medias&file=image.png" => <img src="dolibarr/viewimage.php/modulepart=medias&file=image.png"
    +		$content = preg_replace('/(<img[^>]*src=")(\/?viewimage\.php)/', '\1'.DOL_URL_ROOT.'/viewimage.php', $content, -1, $nbrep);
     
     		// action="newpage.php" => action="dolibarr/website/index.php?website=...&pageref=newpage
     		$content = preg_replace('/(action=")\/?([^:\"]*)(\.php\")/', '\1'.DOL_URL_ROOT.'/public/website/index.php?website='.$website->ref.'&pageref=\2"', $content, -1, $nbrep);
     	}
    -	else								// REPLACEMENT OF LINKS When page called from virtual host
    +	else									// REPLACEMENT OF LINKS When page called from virtual host
     	{
     		$symlinktomediaexists=1;
     
    @@ -122,9 +160,13 @@ function dolWebsiteOutput($content)
     		$nbrep=0;
     		if (! $symlinktomediaexists)
     		{
    -			$content=preg_replace('/(<a[^>]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1'.$urlwithroot.'/viewimage.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep);
    -			$content=preg_replace('/(<img[^>]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1'.$urlwithroot.'/viewimage.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep);
    -			$content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)modulepart=medias([^\)]*)file=([^\)]*)(["\']?\))/',  '\1'.$urlwithroot.'/viewimage.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep);
    +			$content=preg_replace('/(<script[^>]*src=")[^\"]*document\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep);
    +
    +			$content=preg_replace('/(<a[^>]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep);
    +			$content=preg_replace('/(<img[^>]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep);
    +			$content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)modulepart=medias([^\)]*)file=([^\)]*)(["\']?\))/',  '\1/wrapper.php\2modulepart=medias\3file=\4\5', $content, -1, $nbrep);
    +
    +			$content=preg_replace('/(<img[^>]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=mycompany([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=mycompany\3file=\4\5', $content, -1, $nbrep);
     		}
     		else
     		{
    @@ -133,6 +175,8 @@ function dolWebsiteOutput($content)
     			$content=preg_replace('/(<a[^>]*href=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep);
     			$content=preg_replace('/(<img[^>]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=medias([^\"]*)file=([^\"]*)("[^>]*>)/', '\1medias/\4\5', $content, -1, $nbrep);
     			$content=preg_replace('/(url\(["\']?)[^\)]*viewimage\.php([^\)]*)modulepart=medias([^\)]*)file=([^\)]*)(["\']?\))/', '\1medias/\4\5', $content, -1, $nbrep);
    +
    +			$content=preg_replace('/(<img[^>]*src=")[^\"]*viewimage\.php([^\"]*)modulepart=mycompany([^\"]*)file=([^\"]*)("[^>]*>)/', '\1/wrapper.php\2modulepart=mycompany\3file=\4\5', $content, -1, $nbrep);
     		}
     	}
     
    @@ -261,9 +305,9 @@ function redirectToContainer($containerref, $containeraliasalt='',$containerid=0
      */
     function includeContainer($containerref)
     {
    -	global $conf, $db, $langs, $mysoc, $user, $website;
    +	global $conf, $db, $hookmanager, $langs, $mysoc, $user, $website, $websitepage, $weblangs;	// Very important. Required to have var available when running inluded containers.
     	global $includehtmlcontentopened;
    -	global $websitekey;
    +	global $websitekey, $websitepagefile;
     
     	$MAXLEVEL=20;
     
    @@ -486,6 +530,31 @@ function getAllImages($object, $objectpage, $urltograb, &$tmp, &$action, $modify
     
     
     
    +/**
    + * Save content of a page on disk
    + *
    + * @param	string		$filemaster			Full path of filename master.inc.php for website to generate
    + * @return	boolean							True if OK
    + */
    +function dolSaveMasterFile($filemaster)
    +{
    +	global $conf;
    +
    +	// Now generate the master.inc.php page
    +	dol_syslog("We regenerate the master file");
    +	dol_delete_file($filemaster);
    +
    +	$mastercontent = '<?php'."\n";
    +	$mastercontent.= '// File generated to link to the master file - DO NOT MODIFY - It is just an include'."\n";
    +	$mastercontent.= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) require_once '".DOL_DOCUMENT_ROOT."/master.inc.php';\n";
    +	$mastercontent.= '?>'."\n";
    +	$result = file_put_contents($filemaster, $mastercontent);
    +	if (! empty($conf->global->MAIN_UMASK))
    +		@chmod($filemaster, octdec($conf->global->MAIN_UMASK));
    +
    +	return $result;
    +}
    +
     /**
      * Save content of a page on disk
      *
    @@ -508,10 +577,11 @@ function dolSavePageAlias($filealias, $object, $objectpage)
     	$aliascontent.= 'else require $dolibarr_main_data_root.\'/website/\'.$website->ref.\'/page'.$objectpage->id.'.tpl.php\';'."\n";
     	$aliascontent.= '?>'."\n";
     	$result = file_put_contents($filealias, $aliascontent);
    -	if (! empty($conf->global->MAIN_UMASK))
    -		@chmod($filealias, octdec($conf->global->MAIN_UMASK));
    +	if (! empty($conf->global->MAIN_UMASK)) {
    +        @chmod($filealias, octdec($conf->global->MAIN_UMASK));
    +    }
     
    -		return ($result?true:false);
    +	return ($result?true:false);
     }
     
     
    @@ -537,8 +607,8 @@ function dolSavePageContent($filetpl, $object, $objectpage)
     
     	$tplcontent ='';
     	$tplcontent.= "<?php // BEGIN PHP\n";
    -	$tplcontent.= '$websitekey=basename(dirname(__FILE__));'."\n";
    -	$tplcontent.= "if (! defined('USEDOLIBARRSERVER')) { require_once './master.inc.php'; } // Not already loaded"."\n";
    +	$tplcontent.= '$websitekey=basename(dirname(__FILE__)); if (empty($websitepagefile)) $websitepagefile=__FILE__;'."\n";
    +	$tplcontent.= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Not already loaded"."\n";
     	$tplcontent.= "require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';\n";
     	$tplcontent.= "require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';\n";
     	$tplcontent.= "ob_start();\n";
    @@ -554,10 +624,11 @@ function dolSavePageContent($filetpl, $object, $objectpage)
     	$tplcontent.= '<meta name="title" content="'.dol_string_nohtmltag($objectpage->title, 0, 'UTF-8').'" />'."\n";
     	$tplcontent.= '<meta name="description" content="'.dol_string_nohtmltag($objectpage->description, 0, 'UTF-8').'" />'."\n";
     	$tplcontent.= '<meta name="generator" content="'.DOL_APPLICATION_TITLE.' '.DOL_VERSION.' (https://www.dolibarr.org)" />'."\n";
    +	$tplcontent.= '<link href="/'.(($objectpage->id == $object->fk_default_home) ? '' : ($objectpage->pageurl.'.php')).'" rel="canonical" />'."\n";
     	$tplcontent.= '<!-- Include link to CSS file -->'."\n";
    -	$tplcontent.= '<link rel="stylesheet" href="styles.css.php?websiteid='.$object->id.'" type="text/css" />'."\n";
    +	$tplcontent.= '<link rel="stylesheet" href="styles.css.php?website=<?php echo $websitekey; ?>" type="text/css" />'."\n";
     	$tplcontent.= '<!-- Include HTML header from common file -->'."\n";
    -	$tplcontent.= '<?php print preg_replace(\'/<\/?html>/ims\', \'\', file_get_contents(DOL_DATA_ROOT."/website/'.$object->ref.'/htmlheader.html")); ?>'."\n";
    +	$tplcontent.= '<?php print preg_replace(\'/<\/?html>/ims\', \'\', file_get_contents(DOL_DATA_ROOT."/website/".$websitekey."/htmlheader.html")); ?>'."\n";
     	$tplcontent.= '<!-- Include HTML header from page header block -->'."\n";
     	$tplcontent.= preg_replace('/<\/?html>/ims', '', $objectpage->htmlheader)."\n";
     	$tplcontent.= '</head>'."\n";
    @@ -582,26 +653,28 @@ function dolSavePageContent($filetpl, $object, $objectpage)
     
     
     /**
    - * Save content of the index.php page
    + * Save content of the index.php and wrapper.php page
      *
      * @param	string		$pathofwebsite			Path of website root
      * @param	string		$fileindex				Full path of file index.php
      * @param	string		$filetpl				File tpl to index.php page redirect to
    + * @param	string		$filewrapper			Full path of file wrapper.php
      * @return	boolean								True if OK
      */
    -function dolSaveIndexPage($pathofwebsite, $fileindex, $filetpl)
    +function dolSaveIndexPage($pathofwebsite, $fileindex, $filetpl, $filewrapper)
     {
     	global $conf;
     
    -	$result=0;
    +	$result1=false;
    +	$result2=false;
     
     	dol_mkdir($pathofwebsite);
    -	dol_delete_file($fileindex);
     
    +	dol_delete_file($fileindex);
     	$indexcontent = '<?php'."\n";
     	$indexcontent.= "// BEGIN PHP File generated to provide an index.php as Home Page or alias redirector - DO NOT MODIFY - It is just a generated wrapper.\n";
    -	$indexcontent.= '$websitekey=basename(dirname(__FILE__));'."\n";
    -	$indexcontent.= "if (! defined('USEDOLIBARRSERVER')) { require_once './master.inc.php'; } // Load master if not already loaded\n";
    +	$indexcontent.= '$websitekey=basename(dirname(__FILE__)); if (empty($websitepagefile)) $websitepagefile=__FILE__;'."\n";
    +	$indexcontent.= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Load master if not already loaded\n";
     	$indexcontent.= 'if (! empty($_GET[\'pageref\']) || ! empty($_GET[\'pagealiasalt\']) || ! empty($_GET[\'pageid\'])) {'."\n";
     	$indexcontent.= "	require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';\n";
     	$indexcontent.= "	require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';\n";
    @@ -609,11 +682,25 @@ function dolSaveIndexPage($pathofwebsite, $fileindex, $filetpl)
     	$indexcontent.= "}\n";
     	$indexcontent.= "include_once './".basename($filetpl)."'\n";
     	$indexcontent.= '// END PHP ?>'."\n";
    -	$result = file_put_contents($fileindex, $indexcontent);
    +	$result1 = file_put_contents($fileindex, $indexcontent);
     	if (! empty($conf->global->MAIN_UMASK))
     		@chmod($fileindex, octdec($conf->global->MAIN_UMASK));
     
    -	return $result;
    +	dol_delete_file($filewrapper);
    +	$wrappercontent = '<?php'."\n";
    +	$wrappercontent.= "// BEGIN PHP File generated to provide a wrapper.php - DO NOT MODIFY - It is just a generated wrapper.\n";
    +	$wrappercontent.= '$websitekey=basename(dirname(__FILE__));'."\n";
    +	$wrappercontent.= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Load master if not already loaded\n";
    +	$wrappercontent.= '$original_file=str_replace("../","/", GETPOST("file","alpha"));'."\n";
    +	$wrappercontent.= 'if ($_GET["modulepart"] == "mycompany" && preg_match(\'/^\/?logos\//\', $original_file)) readfile(dol_osencode($conf->mycompany->dir_output."/".$original_file));'."\n";
    +	$wrappercontent.= "else print 'Bad value for modulepart or file';\n";
    +	$wrappercontent.= 'if (is_object($db)) $db->close();'."\n";
    +	$wrappercontent.= '// END PHP ?>'."\n";
    +	$result2 = file_put_contents($filewrapper, $wrappercontent);
    +	if (! empty($conf->global->MAIN_UMASK))
    +		@chmod($filewrapper, octdec($conf->global->MAIN_UMASK));
    +
    +	return ($result1 && $result2);
     }
     
     
    @@ -751,5 +838,3 @@ function dolSaveHtaccessFile($filehtaccess, $htaccess)
     
     		return true;
     }
    -
    -
    diff --git a/htdocs/core/lib/xcal.lib.php b/htdocs/core/lib/xcal.lib.php
    index b0a30697413..10d68475c97 100644
    --- a/htdocs/core/lib/xcal.lib.php
    +++ b/htdocs/core/lib/xcal.lib.php
    @@ -64,7 +64,7 @@ function build_calfile($format,$title,$desc,$events_array,$outputfile)
             && $conf->global->MAIN_AGENDA_EXPORT_CACHE > 60){
     	        $hh=convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE,'hour');
     	        $mm=convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE,'min');
    -	        $ss=convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE,'sec'); 
    +	        $ss=convertSecondToTime($conf->global->MAIN_AGENDA_EXPORT_CACHE,'sec');
     	        fwrite($calfileh,"X-PUBLISHED-TTL: P".$hh."H".$mm."M".$ss."S\n");
             }
     
    @@ -263,7 +263,6 @@ function build_calfile($format,$title,$desc,$events_array,$outputfile)
     				$comment ['enddate']		= $enddate;
     				fwrite($calfileh,"COMMENT:" . serialize ($comment) . "\n");
     				*/
    -
     			}
     		}
     
    @@ -520,4 +519,3 @@ function quotedPrintDecode($str)
     	$out = quoted_printable_decode($out);	// Available with PHP 4+
     	return trim($out);
     }
    -
    diff --git a/htdocs/core/login/functions_dolibarr.php b/htdocs/core/login/functions_dolibarr.php
    index 25d5f2dc30c..70cb1e4fa86 100644
    --- a/htdocs/core/login/functions_dolibarr.php
    +++ b/htdocs/core/login/functions_dolibarr.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2015 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2011 Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -111,8 +111,10 @@ function check_user_password_dolibarr($usertotest,$passwordtotest,$entitytotest=
     				{
     					dol_syslog("functions_dolibarr::check_user_password_dolibarr Authentification ko bad password for '".$usertotest."'");
     					sleep(2);      // Anti brut force protection
    -					$langs->load('main');
    -					$langs->load('errors');
    +
    +					// Load translation files required by the page
    +                    $langs->loadLangs(array('main', 'errors'));
    +
     					$_SESSION["dol_loginmesg"]=$langs->trans("ErrorBadLoginPassword");
     				}
     
    @@ -137,8 +139,10 @@ function check_user_password_dolibarr($usertotest,$passwordtotest,$entitytotest=
     			{
     				dol_syslog("functions_dolibarr::check_user_password_dolibarr Authentification ko user not found for '".$usertotest."'");
     				sleep(1);
    -				$langs->load('main');
    -				$langs->load('errors');
    +
    +				// Load translation files required by the page
    +                $langs->loadLangs(array('main', 'errors'));
    +
     				$_SESSION["dol_loginmesg"]=$langs->trans("ErrorBadLoginPassword");
     			}
     		}
    diff --git a/htdocs/core/login/functions_empty.php b/htdocs/core/login/functions_empty.php
    index b2ce4a3c533..a8b90de0e46 100644
    --- a/htdocs/core/login/functions_empty.php
    +++ b/htdocs/core/login/functions_empty.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/login/functions_ldap.php b/htdocs/core/login/functions_ldap.php
    index d468c882b2d..4587dbae11b 100644
    --- a/htdocs/core/login/functions_ldap.php
    +++ b/htdocs/core/login/functions_ldap.php
    @@ -54,8 +54,10 @@ function check_user_password_ldap($usertotest,$passwordtotest,$entitytotest)
     	{
     		dol_syslog("functions_ldap::check_user_password_ldap Authentification ko failed to connect to LDAP. LDAP functions are disabled on this PHP");
     		sleep(1);
    -		$langs->load('main');
    -		$langs->load('other');
    +
    +		// Load translation files required by the page
    +        $langs->loadLangs(array('main', 'other'));
    +
     		$_SESSION["dol_loginmesg"]=$langs->trans("ErrorLDAPFunctionsAreDisabledOnThisPHP").' '.$langs->trans("TryAnotherConnectionMode");
     		return;
     	}
    @@ -201,14 +203,15 @@ function check_user_password_ldap($usertotest,$passwordtotest,$entitytotest)
     					}
     					unset($usertmp);
     				}
    -
     			}
     			if ($result == 1)
     			{
     				dol_syslog("functions_ldap::check_user_password_ldap Authentification ko bad user/password for '".$usertotest."'");
     				sleep(1);
    -				$langs->load('main');
    -				$langs->load('other');
    +
    +				// Load translation files required by the page
    +                $langs->loadLangs(array('main', 'other'));
    +
     				$_SESSION["dol_loginmesg"]=$langs->trans("ErrorBadLoginPassword");
     			}
     		}
    @@ -230,9 +233,10 @@ function check_user_password_ldap($usertotest,$passwordtotest,$entitytotest)
     				dol_syslog("functions_ldap::check_user_password_ldap ".$ldap->ldapErrorCode." ".$ldap->ldapErrorText);
     			}
     			sleep(2);      // Anti brut force protection
    -			$langs->load('main');
    -			$langs->load('other');
    -			$langs->load('errors');
    +
    +			// Load translation files required by the page
    +            $langs->loadLangs(array('main', 'other', 'errors'));
    +;
     			$_SESSION["dol_loginmesg"]=($ldap->error?$ldap->error:$langs->trans("ErrorBadLoginPassword"));
     		}
     
    diff --git a/htdocs/core/login/functions_openid.php b/htdocs/core/login/functions_openid.php
    index 83543c43dd5..bc8d7f45122 100644
    --- a/htdocs/core/login/functions_openid.php
    +++ b/htdocs/core/login/functions_openid.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -70,7 +70,7 @@ function check_user_password_openid($usertotest,$passwordtotest,$entitytotest)
             $openid = new SimpleOpenID();
             $openid->SetIdentity($_GET['openid_identity']);
             $openid_validation_result = $openid->ValidateWithServer();
    -        if ($openid_validation_result == true)
    +        if ($openid_validation_result === true)
             {
                 // OK HERE KEY IS VALID
     
    @@ -90,7 +90,7 @@ function check_user_password_openid($usertotest,$passwordtotest,$entitytotest)
                     }
                 }
             }
    -        else if($openid->IsError() == true)
    +        else if($openid->IsError() === true)
             {
                 // ON THE WAY, WE GOT SOME ERROR
                 $error = $openid->GetError();
    diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql
    index c8d2692c2f5..8792d8b762a 100644
    --- a/htdocs/core/menus/init_menu_auguria.sql
    +++ b/htdocs/core/menus/init_menu_auguria.sql
    @@ -120,7 +120,7 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->stock->enabled', __HANDLER__, 'left', 3100__+MAX_llx_menu__, 'products', 'stock', 3__+MAX_llx_menu__, '/product/stock/index.php?leftmenu=stock', 'Stock', 0, 'stocks', '$user->rights->stock->lire', '', 2, 3, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->stock->enabled', __HANDLER__, 'left', 3101__+MAX_llx_menu__, 'products', '', 3100__+MAX_llx_menu__, '/product/stock/card.php?action=create', 'MenuNewWarehouse', 1, 'stocks', '$user->rights->stock->creer', '', 2, 0, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->stock->enabled', __HANDLER__, 'left', 3102__+MAX_llx_menu__, 'products', '', 3100__+MAX_llx_menu__, '/product/stock/list.php', 'List', 1, 'stocks', '$user->rights->stock->lire', '', 2, 1, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->stock->enabled', __HANDLER__, 'left', 3104__+MAX_llx_menu__, 'products', '', 3100__+MAX_llx_menu__, '/product/stock/mouvement.php', 'Movements', 1, 'stocks', '$user->rights->stock->mouvement->lire', '', 2, 3, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->stock->enabled', __HANDLER__, 'left', 3104__+MAX_llx_menu__, 'products', '', 3100__+MAX_llx_menu__, '/product/stock/movement_list.php', 'Movements', 1, 'stocks', '$user->rights->stock->mouvement->lire', '', 2, 3, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->stock->enabled && $conf->supplier_order->enabled', __HANDLER__, 'left', 3105__+MAX_llx_menu__, 'products', '', 3100__+MAX_llx_menu__, '/product/stock/replenish.php', 'Replenishments', 1, 'stocks', '$user->rights->stock->mouvement->creer && $user->rights->fournisseur->lire', '', 2, 4, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->stock->enabled', __HANDLER__, 'left', 3106__+MAX_llx_menu__, 'products', '', 3100__+MAX_llx_menu__, '/product/stock/massstockmove.php', 'MassStockTransferShort', 1, 'stocks', '$user->rights->stock->mouvement->creer', '', 2, 5, __ENTITY__);
     
    @@ -205,15 +205,15 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
     -- insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->don->enabled && $leftmenu=="donations"', __HANDLER__, 'left', 2003__+MAX_llx_menu__, 'billing', '', 2000__+MAX_llx_menu__, '/don/stats/index.php?leftmenu=donations&amp;mainmenu=billing', 'Statistics', 1, 'donations', '$user->rights->don->lire', '', 2, 2, __ENTITY__);
     -- Special expenses
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled || $conf->salaries->enabled || $conf->loan->enabled || $conf->banque->enabled', __HANDLER__, 'left', 2200__+MAX_llx_menu__, 'billing', 'tax', 6__+MAX_llx_menu__, '/compta/charges/index.php?leftmenu=tax&amp;mainmenu=billing', 'MenuSpecialExpenses', 0, 'compta', '(! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) || (! empty($conf->salaries->enabled) && ! empty($user->rights->salaries->read)) || (! empty($conf->loan->enabled) && $user->rights->loan->read) || (! empty($conf->banque->enabled) && $user->rights->banque->lire)', '', 0, 6, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled', __HANDLER__, 'left', 2210__+MAX_llx_menu__, 'billing', 'tax_sal', 2200__+MAX_llx_menu__, '/compta/salaries/index.php?leftmenu=tax_salary&amp;mainmenu=billing', 'Salaries', 1, 'salaries', '$user->rights->salaries->read', '', 0, 1, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled', __HANDLER__, 'left', 2210__+MAX_llx_menu__, 'billing', 'tax_sal', 2200__+MAX_llx_menu__, '/compta/salaries/list.php?leftmenu=tax_salary&amp;mainmenu=billing', 'Salaries', 1, 'salaries', '$user->rights->salaries->read', '', 0, 1, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2211__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/card.php?leftmenu=tax_salary&amp;action=create', 'NewPayment', 2, 'companies', '$user->rights->salaries->write', '', 0, 2, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2212__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/index.php?leftmenu=tax_salary', 'Payments', 2, 'companies', '$user->rights->salaries->read', '', 0, 3, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2212__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/list.php?leftmenu=tax_salary', 'Payments', 2, 'companies', '$user->rights->salaries->read', '', 0, 3, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->salaries->enabled && $leftmenu=="tax_salary"', __HANDLER__, 'left', 2213__+MAX_llx_menu__, 'billing', '', 2210__+MAX_llx_menu__, '/compta/salaries/stats/index.php?leftmenu=tax_salary', 'Statistics', 2, 'companies', '$user->rights->salaries->read', '', 0, 4, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled', __HANDLER__, 'left', 2220__+MAX_llx_menu__, 'billing', 'tax_loan', 2200__+MAX_llx_menu__, '/loan/index.php?leftmenu=tax_loan&amp;mainmenu=billing', 'Loans', 1, 'loan', '$user->rights->loan->read', '', 0, 1, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled', __HANDLER__, 'left', 2220__+MAX_llx_menu__, 'billing', 'tax_loan', 2200__+MAX_llx_menu__, '/loan/list.php?leftmenu=tax_loan&amp;mainmenu=billing', 'Loans', 1, 'loan', '$user->rights->loan->read', '', 0, 1, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled && $leftmenu=="tax_loan"', __HANDLER__, 'left', 2221__+MAX_llx_menu__, 'billing', '', 2220__+MAX_llx_menu__, '/loan/card.php?leftmenu=tax_loan&amp;action=create', 'NewLoan', 2, 'loan', '$user->rights->loan->write', '', 0, 2, __ENTITY__);
     --insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled && $leftmenu=="tax_loan"', __HANDLER__, 'left', 2222__+MAX_llx_menu__, 'billing', '', 2220__+MAX_llx_menu__, '/loan/payment/list.php?leftmenu=tax_loan', 'Payments', 2, 'companies', '$user->rights->loan->read', '', 0, 3, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->loan->enabled && $leftmenu=="tax_loan" && ! empty($conf->global->LOAN_SHOW_CALCULATOR)', __HANDLER__, 'left', 2223__+MAX_llx_menu__, 'billing', '', 2220__+MAX_llx_menu__, '/loan/calc.php?leftmenu=tax_loan', 'Calculator', 2, 'companies', '$user->rights->loan->calc', '', 0, 4, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled', __HANDLER__, 'left', 2250__+MAX_llx_menu__, 'billing', 'tax_social', 2200__+MAX_llx_menu__, '/compta/sociales/index.php?leftmenu=tax_social', 'SocialContributions', 1, '', '$user->rights->tax->charges->lire', '', 0, 1, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled', __HANDLER__, 'left', 2250__+MAX_llx_menu__, 'billing', 'tax_social', 2200__+MAX_llx_menu__, '/compta/sociales/list.php?leftmenu=tax_social', 'SocialContributions', 1, '', '$user->rights->tax->charges->lire', '', 0, 1, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && $leftmenu=="tax_social"', __HANDLER__, 'left', 2251__+MAX_llx_menu__, 'billing', '', 2250__+MAX_llx_menu__, '/compta/sociales/card.php?leftmenu=tax_social&amp;action=create', 'MenuNewSocialContribution', 2, '', '$user->rights->tax->charges->creer', '', 0, 2, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && $leftmenu=="tax_social"', __HANDLER__, 'left', 2252__+MAX_llx_menu__, 'billing', '', 2250__+MAX_llx_menu__, '/compta/sociales/payments.php?leftmenu=tax_social&amp;mainmenu=billing&amp;mode=sconly', 'Payments', 2, '', '$user->rights->tax->charges->lire', '', 0, 3, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS)', __HANDLER__, 'left', 2300__+MAX_llx_menu__, 'billing', 'tax_vat', 2200__+MAX_llx_menu__, '/compta/tva/list.php?leftmenu=tax_vat&amp;mainmenu=billing', 'VAT', 1, 'companies', '$user->rights->tax->charges->lire', '', 0, 7, __ENTITY__);
    @@ -222,9 +222,9 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu=="tax_vat"', __HANDLER__, 'left', 2303__+MAX_llx_menu__, 'billing', '', 2300__+MAX_llx_menu__, '/compta/tva/index.php?leftmenu=tax_vat', 'ReportByMonth', 2, 'companies', '$user->rights->tax->charges->lire', '', 0, 2, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu=="tax_vat"', __HANDLER__, 'left', 2304__+MAX_llx_menu__, 'billing', '', 2300__+MAX_llx_menu__, '/compta/tva/clients.php?leftmenu=tax_vat', 'ReportByCustomers', 2, 'companies', '$user->rights->tax->charges->lire', '', 0, 3, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->tax->enabled && empty($conf->global->TAX_DISABLE_VAT_MENUS) && $leftmenu=="tax_vat"', __HANDLER__, 'left', 2305__+MAX_llx_menu__, 'billing', '', 2300__+MAX_llx_menu__, '/compta/tva/quadri_detail.php?leftmenu=tax_vat', 'ReportByQuarter', 2, 'companies', '$user->rights->tax->charges->lire', '', 0, 4, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1', __HANDLER__, 'left', 2350__+MAX_llx_menu__, 'billing', 'tax_various', 2200__+MAX_llx_menu__, '/compta/bank/various_payment/index.php?leftmenu=tax_various&amp;mainmenu=billing', 'MenuVariousPayment', 1, 'banks', '$user->rights->banque->lire', '', 0, 1, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->banque->enabled && $leftmenu=="tax_various"', __HANDLER__, 'left', 2351__+MAX_llx_menu__, 'billing', '', 2350__+MAX_llx_menu__, '/compta/bank/various_payment/card.php?leftmenu=tax_various&amp;action=create', 'MenuNewVariousPayment', 2, 'various_payment', '$user->rights->banque->modifier', '', 0, 2, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->banque->enabled && $leftmenu=="tax_various"', __HANDLER__, 'left', 2352__+MAX_llx_menu__, 'billing', '', 2350__+MAX_llx_menu__, '/compta/bank/various_payment/index.php?leftmenu=tax_various', 'List', 2, 'various_payment', '$user->rights->banque->lire', '', 0, 3, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->banque->enabled && empty($conf->global->BANK_USE_OLD_VARIOUS_PAYMENT)', __HANDLER__, 'left', 2350__+MAX_llx_menu__, 'billing', 'tax_various', 2200__+MAX_llx_menu__, '/compta/bank/various_payment/list.php?leftmenu=tax_various&amp;mainmenu=billing', 'MenuVariousPayment', 1, 'banks', '$user->rights->banque->lire', '', 0, 1, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->banque->enabled && $leftmenu=="tax_various"', __HANDLER__, 'left', 2351__+MAX_llx_menu__, 'billing', '', 2350__+MAX_llx_menu__, '/compta/bank/various_payment/card.php?leftmenu=tax_various&amp;action=create', 'New', 2, 'various_payment', '$user->rights->banque->modifier', '', 0, 2, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->banque->enabled && $leftmenu=="tax_various"', __HANDLER__, 'left', 2352__+MAX_llx_menu__, 'billing', '', 2350__+MAX_llx_menu__, '/compta/bank/various_payment/list.php?leftmenu=tax_various', 'List', 2, 'various_payment', '$user->rights->banque->lire', '', 0, 3, __ENTITY__);
     -- Accounting Expert
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->accounting->enabled', __HANDLER__, 'left', 2400__+MAX_llx_menu__, 'accountancy', 'accountancy', 9__+MAX_llx_menu__, '/accountancy/index.php?leftmenu=accountancy', 'MenuAccountancy', 0, 'accountancy', '! empty($conf->accounting->enabled) || $user->rights->accounting->bind->write || $user->rights->accounting->bind->write || $user->rights->compta->resultat->lire', '', 0, 7, __ENTITY__);
     	-- Setup
    @@ -311,10 +311,12 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->categorie->enabled', __HANDLER__, 'left', 2650__+MAX_llx_menu__, 'accountancy', 'cat', 14__+MAX_llx_menu__, '/categories/index.php?leftmenu=bank&amp;type=5', 'Categories', 0, 'categories', '$user->rights->categorie->lire', '', 2, 4, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->categorie->enabled', __HANDLER__, 'left', 2651__+MAX_llx_menu__, 'accountancy', '', 2650__+MAX_llx_menu__, '/categories/card.php?leftmenu=bank&amp;action=create&amp;type=5', 'NewCategory', 1, 'categories', '$user->rights->categorie->creer', '', 2, 0, __ENTITY__);
     -- Project
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3600__+MAX_llx_menu__, 'project', 'projects', 7__+MAX_llx_menu__, '/projet/index.php?leftmenu=projects', 'Projects', 0, 'projects', '$user->rights->projet->lire', '', 2, 0, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3601__+MAX_llx_menu__, 'project', '', 3600__+MAX_llx_menu__, '/projet/card.php?leftmenu=projects&amp;action=create', 'NewProject', 1, 'projects', '$user->rights->projet->creer', '', 2, 1, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3600__+MAX_llx_menu__, 'project', 'projects', 7__+MAX_llx_menu__, '/projet/index.php?leftmenu=projects', 'LeadsOrProjects', 0, 'projects', '$user->rights->projet->lire', '', 2, 0, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3601__+MAX_llx_menu__, 'project', '', 3600__+MAX_llx_menu__, '/projet/card.php?leftmenu=projects&amp;action=create', 'New', 1, 'projects', '$user->rights->projet->creer', '', 2, 1, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3602__+MAX_llx_menu__, 'project', '', 3600__+MAX_llx_menu__, '/projet/list.php?leftmenu=projects', 'List', 1, 'projects', '$user->rights->projet->lire', '', 2, 2, __ENTITY__);
    -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3603__+MAX_llx_menu__, 'project', '', 3600__+MAX_llx_menu__, '/projet/stats/index.php?leftmenu=projects', 'Statistics', 1, 'projects', '$user->rights->projet->lire', '', 2, 3, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled && $conf->global->PROJECT_USE_OPPORTUNITIES != 0', __HANDLER__, 'left', 3603__+MAX_llx_menu__, 'project', '', 3600__+MAX_llx_menu__, '/projet/list.php?leftmenu=projects&search_opp_status=openedopp&search_status=99', 'ListOpenLeads', 1, 'projects', '$user->rights->projet->lire', '', 2, 2, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled && $conf->global->PROJECT_USE_OPPORTUNITIES != 2', __HANDLER__, 'left', 3604__+MAX_llx_menu__, 'project', '', 3600__+MAX_llx_menu__, '/projet/list.php?leftmenu=projects&search_opp_status=notopenedopp&search_status=99', 'ListOpenProjects', 1, 'projects', '$user->rights->projet->lire', '', 2, 2, __ENTITY__);
    +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled', __HANDLER__, 'left', 3605__+MAX_llx_menu__, 'project', '', 3600__+MAX_llx_menu__, '/projet/stats/index.php?leftmenu=projects', 'Statistics', 1, 'projects', '$user->rights->projet->lire', '', 2, 3, __ENTITY__);
     
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled && !$conf->global->PROJECT_HIDE_TASKS', __HANDLER__, 'left', 3700__+MAX_llx_menu__, 'project', '', 7__+MAX_llx_menu__, '/projet/activity/index.php?leftmenu=projects', 'Activities', 0, 'projects', '$user->rights->projet->lire', '', 2, 0, __ENTITY__);
     insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', '$conf->projet->enabled && !$conf->global->PROJECT_HIDE_TASKS', __HANDLER__, 'left', 3701__+MAX_llx_menu__, 'project', '', 3700__+MAX_llx_menu__, '/projet/tasks.php?leftmenu=projects&amp;action=create', 'NewTask', 1, 'projects', '$user->rights->projet->creer', '', 2, 1, __ENTITY__);
    diff --git a/htdocs/core/menus/standard/auguria.lib.php b/htdocs/core/menus/standard/auguria.lib.php
    index fee6ae6c595..b2bf32bf8c2 100644
    --- a/htdocs/core/menus/standard/auguria.lib.php
    +++ b/htdocs/core/menus/standard/auguria.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2010-2013	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -273,7 +273,7 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM
     		$mysoc->logo_mini=$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI;
     		if (! empty($mysoc->logo_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini))
     		{
    -			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('thumbs/'.$mysoc->logo_mini);
    +			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_mini);
     		}
     		else
     		{
    @@ -517,7 +517,7 @@ function print_left_auguria_menu($db,$menu_array_before,$menu_array_after,&$tabM
     				$tmp=explode('?',$menu_array[$i]['url'],2);
     				$url = $shorturl = $tmp[0];
     				$param = (isset($tmp[1])?$tmp[1]:'');    // params in url of the menu link
    -				
    +
     				// Complete param to force leftmenu to '' to close open menu when we click on a link with no leftmenu defined.
     				if ((! preg_match('/mainmenu/i',$param)) && (! preg_match('/leftmenu/i',$param)) && ! empty($menu_array[$i]['mainmenu']))
     				{
    diff --git a/htdocs/core/menus/standard/auguria_menu.php b/htdocs/core/menus/standard/auguria_menu.php
    index df31b9c9d8f..f4cb98d9c4b 100644
    --- a/htdocs/core/menus/standard/auguria_menu.php
    +++ b/htdocs/core/menus/standard/auguria_menu.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007      Patrick Raguin       <patrick.raguin@gmail.com>
    - * Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2008-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -28,7 +28,11 @@
      */
     class MenuManager
     {
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $type_user;								// Put 0 for internal users, 1 for external users
     	var $atarget="";                            // To store default target to use onto links
     	var $name="auguria";
    diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php
    index 6325643cf87..2bf4671504f 100644
    --- a/htdocs/core/menus/standard/eldy.lib.php
    +++ b/htdocs/core/menus/standard/eldy.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2010-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012-2015 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    @@ -95,8 +95,8 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0,$mode
     	$showmode=isVisibleToUserType($type_user, $tmpentry, $listofmodulesforexternal);
     	if ($showmode)
     	{
    -		$langs->load("companies");
    -		$langs->load("suppliers");
    +	    // Load translation files required by the page
    +        $langs->loadLangs(array("companies","suppliers"));
     
     		$classname="";
     		if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "companies") { $classname='class="tmenusel"'; $_SESSION['idmenu']=''; }
    @@ -189,8 +189,8 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0,$mode
     	$showmode=isVisibleToUserType($type_user, $tmpentry, $listofmodulesforexternal);
     	if ($showmode)
     	{
    -		$langs->load("compta");
    -		$langs->load("banks");
    +	    // Load translation files required by the page
    +        $langs->loadLangs(array("compta","banks"));
     
     		$classname="";
     		if ($_SESSION["mainmenu"] && $_SESSION["mainmenu"] == "bank") { $classname='class="tmenusel"'; $_SESSION['idmenu']=''; }
    @@ -236,7 +236,21 @@ function print_eldy_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0,$mode
     		else $classname = 'class="tmenu"';
     		$idsel='project';
     
    -		$menu->add('/projet/index.php?mainmenu=project&amp;leftmenu=', $langs->trans("Projects"), 0, $showmode, $atarget, "project", '', 70, $id, $idsel, $classname);
    +		$title = $langs->trans("LeadsOrProjects");	// Leads and opportunities by default
    +		$showmodel = $showmodep = $showmode;
    +		if (empty($conf->global->PROJECT_USE_OPPORTUNITIES))
    +		{
    +			$title = $langs->trans("Projects");
    +			$showmodel = 0;
    +		}
    +		if ($conf->global->PROJECT_USE_OPPORTUNITIES == 2) {
    +			$title = $langs->trans("Leads");
    +			$showmodep = 0;
    +		}
    +
    +		$menu->add('/projet/index.php?mainmenu=project&amp;leftmenu=', $title, 0, $showmode, $atarget, "project", '', 70, $id, $idsel, $classname);
    +		//$menu->add('/projet/index.php?mainmenu=project&amp;leftmenu=&search_opp_status=openedopp', $langs->trans("ListLeads"), 0, $showmodel & $conf->global->PROJECT_USE_OPPORTUNITIES, $atarget, "project", '', 70, $id, $idsel, $classname);
    +		//$menu->add('/projet/index.php?mainmenu=project&amp;leftmenu=&search_opp_status=notopenedopp', $langs->trans("ListProjects"), 0, $showmodep, $atarget, "project", '', 70, $id, $idsel, $classname);
     	}
     
     	// HRM
    @@ -467,7 +481,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     		$mysoc->logo_mini=$conf->global->MAIN_INFO_SOCIETE_LOGO_MINI;
     		if (! empty($mysoc->logo_mini) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_mini))
     		{
    -			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('thumbs/'.$mysoc->logo_mini);
    +			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_mini);
     		}
     		else
     		{
    @@ -526,8 +540,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     
     			if ($usemenuhider || empty($leftmenu) || $leftmenu=="setup")
     			{
    -				$langs->load("admin");
    -				$langs->load("help");
    +			    // Load translation files required by the page
    +                $langs->loadLangs(array("admin","help"));
     
     				$warnpicto='';
     				if (empty($conf->global->MAIN_INFO_SOCIETE_NOM) || empty($conf->global->MAIN_INFO_SOCIETE_COUNTRY))
    @@ -563,8 +577,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     			$newmenu->add("/admin/tools/index.php?mainmenu=home&amp;leftmenu=admintools", $langs->trans("AdminTools"), 0, $user->admin, '', $mainmenu, 'admintools', 0, '', '', '', '<i class="fa fa-server fa-fw paddingright"></i>');
     			if ($usemenuhider || empty($leftmenu) || preg_match('/^admintools/',$leftmenu))
     			{
    -				$langs->load("admin");
    -				$langs->load("help");
    +			    // Load translation files required by the page
    +                $langs->loadLangs(array('admin', 'help'));
     
     				$newmenu->add('/admin/system/dolibarr.php?mainmenu=home&amp;leftmenu=admintools_info', $langs->trans('InfoDolibarr'), 1);
     				if ($usemenuhider || empty($leftmenu) || $leftmenu=='admintools_info') $newmenu->add('/admin/system/modules.php?mainmenu=home&amp;leftmenu=admintools_info', $langs->trans('Modules'), 2);
    @@ -612,7 +626,6 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     					$newmenu->add("/user/group/list.php?leftmenu=users", $langs->trans("ListOfGroups"), 2, (($conf->global->MAIN_USE_ADVANCED_PERMS?$user->rights->user->group_advance->read:$user->rights->user->user->lire) || $user->admin) && !(! empty($conf->multicompany->enabled) && $conf->entity > 1 && $conf->global->MULTICOMPANY_TRANSVERSE_MODE));
     				}
     			}
    -
     		}
     
     
    @@ -670,6 +683,25 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				$newmenu->add("/societe/card.php?leftmenu=suppliers&amp;action=create&amp;type=f",$langs->trans("MenuNewSupplier"), 2, $user->rights->societe->creer && ($user->rights->fournisseur->lire || $user->rights->supplier_proposal->lire));
     			}
     
    +			// Categories
    +			if (! empty($conf->categorie->enabled))
    +			{
    +				$langs->load("categories");
    +				if (empty($conf->global->SOCIETE_DISABLE_PROSPECTS) || empty($conf->global->SOCIETE_DISABLE_CUSTOMERS))
    +				{
    +					// Categories prospects/customers
    +					$menutoshow=$langs->trans("CustomersProspectsCategoriesShort");
    +					if (! empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) $menutoshow=$langs->trans("CustomersCategoriesShort");
    +					if (! empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) $menutoshow=$langs->trans("ProspectsCategoriesShort");
    +					$newmenu->add("/categories/index.php?leftmenu=cat&amp;type=2", $menutoshow, 1, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    +				}
    +				// Categories suppliers
    +				if (! empty($conf->fournisseur->enabled))
    +				{
    +					$newmenu->add("/categories/index.php?leftmenu=catfournish&amp;type=1", $langs->trans("SuppliersCategoriesShort"), 1, $user->rights->categorie->lire);
    +				}
    +			}
    +
     			// Contacts
     			$newmenu->add("/societe/index.php?leftmenu=thirdparties", (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses")), 0, $user->rights->societe->contact->lire, '', $mainmenu, 'contacts');
     			$newmenu->add("/contact/card.php?leftmenu=contacts&amp;action=create", (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("NewContact") : $langs->trans("NewContactAddress")), 1, $user->rights->societe->contact->creer);
    @@ -684,25 +716,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     			if (! empty($conf->categorie->enabled))
     			{
     				$langs->load("categories");
    -				if (empty($conf->global->SOCIETE_DISABLE_PROSPECTS) || empty($conf->global->SOCIETE_DISABLE_CUSTOMERS))
    -				{
    -					// Categories prospects/customers
    -				    $menutoshow=$langs->trans("CustomersProspectsCategoriesShort");
    -				    if (! empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) $menutoshow=$langs->trans("CustomersCategoriesShort");
    -				    if (! empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) $menutoshow=$langs->trans("ProspectsCategoriesShort");
    -					$newmenu->add("/categories/index.php?leftmenu=cat&amp;type=2", $menutoshow, 0, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    -				    $newmenu->add("/categories/card.php?action=create&amp;type=2", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer);
    -				}
     				// Categories Contact
    -				$newmenu->add("/categories/index.php?leftmenu=catcontact&amp;type=4", $langs->trans("ContactCategoriesShort"), 0, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    -				$newmenu->add("/categories/card.php?action=create&amp;type=4", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer);
    -				// Categories suppliers
    -				if (! empty($conf->fournisseur->enabled))
    -				{
    -					$newmenu->add("/categories/index.php?leftmenu=catfournish&amp;type=1", $langs->trans("SuppliersCategoriesShort"), 0, $user->rights->categorie->lire);
    -					$newmenu->add("/categories/card.php?action=create&amp;type=1", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer);
    -				}
    -				//if ($usemenuhider || empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/list.php", $langs->trans("List"), 1, $user->rights->categorie->lire);
    +				$newmenu->add("/categories/index.php?leftmenu=catcontact&amp;type=4", $langs->trans("ContactCategoriesShort"), 1, $user->rights->categorie->lire, '', $mainmenu, 'cat');
     			}
     		}
     
    @@ -788,10 +803,9 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				$newmenu->add("/fichinter/index.php?leftmenu=ficheinter", $langs->trans("Interventions"), 0, $user->rights->ficheinter->lire, '', $mainmenu, 'ficheinter', 2200);
     				$newmenu->add("/fichinter/card.php?action=create&amp;leftmenu=ficheinter", $langs->trans("NewIntervention"), 1, $user->rights->ficheinter->creer, '', '', '', 201);
     				$newmenu->add("/fichinter/list.php?leftmenu=ficheinter", $langs->trans("List"), 1, $user->rights->ficheinter->lire, '', '', '', 202);
    -
    +				$newmenu->add("/fichinter/card-red.php?leftmenu=ficheinter", $langs->trans("ModelList"), 1, $user->rights->ficheinter->lire, '', '', '', 203);
     				$newmenu->add("/fichinter/stats/index.php?leftmenu=ficheinter", $langs->trans("Statistics"), 1, $user->rights->fournisseur->commande->lire);
     			}
    -
     		}
     
     
    @@ -892,9 +906,9 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				// Social contributions
     				if (! empty($conf->tax->enabled))
     				{
    -					$newmenu->add("/compta/sociales/index.php?leftmenu=tax_social",$langs->trans("MenuSocialContributions"),1,$user->rights->tax->charges->lire);
    +					$newmenu->add("/compta/sociales/list.php?leftmenu=tax_social",$langs->trans("MenuSocialContributions"),1,$user->rights->tax->charges->lire);
     					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_social/i',$leftmenu)) $newmenu->add("/compta/sociales/card.php?leftmenu=tax_social&action=create",$langs->trans("MenuNewSocialContribution"), 2, $user->rights->tax->charges->creer);
    -					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_social/i',$leftmenu)) $newmenu->add("/compta/sociales/index.php?leftmenu=tax_social",$langs->trans("List"),2,$user->rights->tax->charges->lire);
    +					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_social/i',$leftmenu)) $newmenu->add("/compta/sociales/list.php?leftmenu=tax_social",$langs->trans("List"),2,$user->rights->tax->charges->lire);
     					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_social/i',$leftmenu)) $newmenu->add("/compta/sociales/payments.php?leftmenu=tax_social&amp;mainmenu=billing&amp;mode=sconly",$langs->trans("Payments"), 2, $user->rights->tax->charges->lire);
     					// VAT
     					if (empty($conf->global->TAX_DISABLE_VAT_MENUS))
    @@ -934,9 +948,9 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				if (! empty($conf->salaries->enabled))
     				{
     					$langs->load("salaries");
    -					$newmenu->add("/compta/salaries/index.php?leftmenu=tax_salary&amp;mainmenu=billing",$langs->trans("Salaries"),1,$user->rights->salaries->read, '', $mainmenu, 'tax_salary');
    +					$newmenu->add("/compta/salaries/list.php?leftmenu=tax_salary&amp;mainmenu=billing",$langs->trans("Salaries"),1,$user->rights->salaries->read, '', $mainmenu, 'tax_salary');
     					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_salary/i',$leftmenu)) $newmenu->add("/compta/salaries/card.php?leftmenu=tax_salary&action=create",$langs->trans("NewPayment"),2,$user->rights->salaries->write);
    -					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_salary/i',$leftmenu)) $newmenu->add("/compta/salaries/index.php?leftmenu=tax_salary",$langs->trans("Payments"),2,$user->rights->salaries->read);
    +					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_salary/i',$leftmenu)) $newmenu->add("/compta/salaries/list.php?leftmenu=tax_salary",$langs->trans("Payments"),2,$user->rights->salaries->read);
     					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_salary/i',$leftmenu)) $newmenu->add("/compta/salaries/stats/index.php?leftmenu=tax_salary", $langs->trans("Statistics"),2,$user->rights->salaries->read);
     				}
     
    @@ -944,18 +958,18 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				if (! empty($conf->loan->enabled))
     				{
     					$langs->load("loan");
    -					$newmenu->add("/loan/index.php?leftmenu=tax_loan&amp;mainmenu=billing",$langs->trans("Loans"),1,$user->rights->loan->read, '', $mainmenu, 'tax_loan');
    +					$newmenu->add("/loan/list.php?leftmenu=tax_loan&amp;mainmenu=billing",$langs->trans("Loans"),1,$user->rights->loan->read, '', $mainmenu, 'tax_loan');
     					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_loan/i',$leftmenu)) $newmenu->add("/loan/card.php?leftmenu=tax_loan&action=create",$langs->trans("NewLoan"),2,$user->rights->loan->write);
     					//if (empty($leftmenu) || preg_match('/^tax_loan/i',$leftmenu)) $newmenu->add("/loan/payment/list.php?leftmenu=tax_loan",$langs->trans("Payments"),2,$user->rights->loan->read);
     				}
     
     				// Various payment
    -				if (! empty($conf->banque->enabled) && $conf->global->MAIN_FEATURES_LEVEL >= 1)
    +				if (! empty($conf->banque->enabled) && empty($conf->global->BANK_USE_OLD_VARIOUS_PAYMENT))
     				{
     					$langs->load("banks");
    -					$newmenu->add("/compta/bank/various_payment/index.php?leftmenu=tax_various&amp;mainmenu=billing",$langs->trans("MenuVariousPayment"),1,$user->rights->banque->lire, '', $mainmenu, 'tax_various');
    -					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_various/i',$leftmenu)) $newmenu->add("/compta/bank/various_payment/card.php?leftmenu=tax_various&action=create",$langs->trans("MenuNewVariousPayment"), 2, $user->rights->banque->modifier);
    -					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_various/i',$leftmenu)) $newmenu->add("/compta/bank/various_payment/index.php?leftmenu=tax_various",$langs->trans("List"),2,$user->rights->banque->lire);
    +					$newmenu->add("/compta/bank/various_payment/list.php?leftmenu=tax_various&amp;mainmenu=billing",$langs->trans("MenuVariousPayment"),1,$user->rights->banque->lire, '', $mainmenu, 'tax_various');
    +					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_various/i',$leftmenu)) $newmenu->add("/compta/bank/various_payment/card.php?leftmenu=tax_various&action=create",$langs->trans("New"), 2, $user->rights->banque->modifier);
    +					if ($usemenuhider || empty($leftmenu) || preg_match('/^tax_various/i',$leftmenu)) $newmenu->add("/compta/bank/various_payment/list.php?leftmenu=tax_various",$langs->trans("List"),2,$user->rights->banque->lire);
     				}
     			}
     		}
    @@ -1073,7 +1087,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     								if ($nature)
     								{
     									$langs->load('accountancy');
    -									$newmenu->add('/accountancy/journal/'.$nature.'journal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal='.$objp->rowid, $langs->trans($objp->label), 2, $user->rights->accounting->comptarapport->lire);
    +									$journallabel=$langs->transnoentities($objp->label);	// Labels in this table are set by loading llx_accounting_abc.sql. Label can be 'ACCOUNTING_SELL_JOURNAL', 'InventoryJournal', ...
    +									$newmenu->add('/accountancy/journal/'.$nature.'journal.php?mainmenu=accountancy&leftmenu=accountancy_journal&id_journal='.$objp->rowid, $journallabel, 2, $user->rights->accounting->comptarapport->lire);
     								}
     								$i++;
     							}
    @@ -1179,10 +1194,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     		 */
     		if ($mainmenu == 'bank')
     		{
    -			$langs->load("withdrawals");
    -			$langs->load("banks");
    -			$langs->load("bills");
    -			$langs->load('categories');
    +		    // Load translation files required by the page
    +            $langs->loadLangs(array("withdrawals","banks","bills","categories"));
     
     			// Bank-Caisse
     			if (! empty($conf->banque->enabled))
    @@ -1199,10 +1212,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     
                 if (! empty($conf->categorie->enabled)) {
                     $langs->load("categories");
    -                $newmenu->add("/categories/index.php?type=5",$langs->trans("Rubriques"),0,$user->rights->categorie->creer, '', $mainmenu, 'tags');
    -                $newmenu->add("/categories/card.php?action=create&amp;type=5",$langs->trans("NewCategory"),1,$user->rights->categorie->creer);
    -                $newmenu->add("/compta/bank/categ.php",$langs->trans("RubriquesTransactions"),0,$user->rights->categorie->creer, '', $mainmenu, 'tags');
    -                $newmenu->add("/compta/bank/categ.php",$langs->trans("NewCategory"),1,$user->rights->categorie->creer, '', $mainmenu, 'tags');
    +                $newmenu->add("/categories/index.php?type=5",$langs->trans("Rubriques"),1,$user->rights->categorie->creer, '', $mainmenu, 'tags');
    +                $newmenu->add("/compta/bank/categ.php",$langs->trans("RubriquesTransactions"),1,$user->rights->categorie->creer, '', $mainmenu, 'tags');
     	    }
     
     			// Prelevements
    @@ -1230,7 +1241,6 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				if (preg_match('/checks/',$leftmenu)) $newmenu->add("/compta/paiement/cheque/card.php?leftmenu=checks_bis&amp;action=new&amp;mainmenu=bank",$langs->trans("NewChequeDeposit"),1,$user->rights->banque->cheque);
     				if (preg_match('/checks/',$leftmenu)) $newmenu->add("/compta/paiement/cheque/list.php?leftmenu=checks_bis&amp;mainmenu=bank",$langs->trans("List"),1,$user->rights->banque->cheque);
     			}
    -
     		}
     
     		/*
    @@ -1262,6 +1272,14 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				{
     					$newmenu->add("/product/stats/card.php?id=all&leftmenu=stats&type=0", $langs->trans("Statistics"), 1, $user->rights->produit->lire && $user->rights->propale->lire);
     				}
    +
    +				// Categories
    +				if (! empty($conf->categorie->enabled))
    +				{
    +					$langs->load("categories");
    +					$newmenu->add("/categories/index.php?leftmenu=cat&amp;type=0", $langs->trans("Categories"), 1, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    +					//if ($usemenuhider || empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/list.php", $langs->trans("List"), 1, $user->rights->categorie->lire);
    +				}
     			}
     
     			// Services
    @@ -1274,15 +1292,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				{
     					$newmenu->add("/product/stats/card.php?id=all&leftmenu=stats&type=1", $langs->trans("Statistics"), 1, $user->rights->service->lire && $user->rights->propale->lire);
     				}
    -			}
    -
    -			// Categories
    -			if (! empty($conf->categorie->enabled))
    -			{
    -				$langs->load("categories");
    -				$newmenu->add("/categories/index.php?leftmenu=cat&amp;type=0", $langs->trans("Categories"), 0, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    -				$newmenu->add("/categories/card.php?action=create&amp;type=0", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer);
    -				//if ($usemenuhider || empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/list.php", $langs->trans("List"), 1, $user->rights->categorie->lire);
    +				// Categories
    +				if (! empty($conf->categorie->enabled))
    +				{
    +					$langs->load("categories");
    +					$newmenu->add("/categories/index.php?leftmenu=cat&amp;type=0", $langs->trans("Categories"), 1, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    +					//if ($usemenuhider || empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/list.php", $langs->trans("List"), 1, $user->rights->categorie->lire);
    +				}
     			}
     
     			// Warehouse
    @@ -1292,7 +1308,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				$newmenu->add("/product/stock/index.php?leftmenu=stock", $langs->trans("Warehouses"), 0, $user->rights->stock->lire, '', $mainmenu, 'stock');
     				$newmenu->add("/product/stock/card.php?action=create", $langs->trans("MenuNewWarehouse"), 1, $user->rights->stock->creer);
     				$newmenu->add("/product/stock/list.php", $langs->trans("List"), 1, $user->rights->stock->lire);
    -				$newmenu->add("/product/stock/mouvement.php", $langs->trans("Movements"), 1, $user->rights->stock->mouvement->lire);
    +				$newmenu->add("/product/stock/movement_list.php", $langs->trans("Movements"), 1, $user->rights->stock->mouvement->lire);
     
                     $newmenu->add("/product/stock/massstockmove.php", $langs->trans("MassStockTransferShort"), 1, $user->rights->stock->mouvement->creer);
                     if ($conf->supplier_order->enabled) $newmenu->add("/product/stock/replenish.php", $langs->trans("Replenishment"), 1, $user->rights->stock->mouvement->creer && $user->rights->fournisseur->lire);
    @@ -1331,7 +1347,6 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				if ($usemenuhider || empty($leftmenu) || $leftmenu=="sendings") $newmenu->add("/expedition/list.php?leftmenu=sendings&viewstatut=2", $langs->trans("StatusSendingProcessedShort"), 2, $user->rights->expedition->lire);
     				$newmenu->add("/expedition/stats/index.php?leftmenu=sendings", $langs->trans("Statistics"), 1, $user->rights->expedition->lire);
     			}
    -
     		}
     
     		/*
    @@ -1345,19 +1360,50 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     
     				$search_project_user = GETPOST('search_project_user','int');
     
    -				// Project affected to user
    -				$newmenu->add("/projet/index.php?leftmenu=projects".($search_project_user?'&search_project_user='.$search_project_user:''), $langs->trans("Projects"), 0, $user->rights->projet->lire, '', $mainmenu, 'projects');
    -				$newmenu->add("/projet/card.php?leftmenu=projects&action=create".($search_project_user?'&search_project_user='.$search_project_user:''), $langs->trans("NewProject"), 1, $user->rights->projet->creer);
    -				$newmenu->add("/projet/list.php?leftmenu=projects".($search_project_user?'&search_project_user='.$search_project_user:'')."&search_status=99", $langs->trans("List"), 1, $user->rights->projet->lire);
    +				$tmpentry=array('enabled'=>(! empty($conf->projet->enabled)),
    +				'perms'=>(! empty($user->rights->projet->lire)),
    +				'module'=>'projet');
    +				$showmode=isVisibleToUserType($type_user, $tmpentry, $listofmodulesforexternal);
    +
    +				$titleboth=$langs->trans("LeadsOrProjects");
    +				$titlenew = $langs->trans("NewLeadOrProject");	// Leads and opportunities by default
    +				if ($conf->global->PROJECT_USE_OPPORTUNITIES == 0)
    +				{
    +					$titleboth=$langs->trans("Projects");
    +					$titlenew = $langs->trans("NewProject");
    +				}
    +				if ($conf->global->PROJECT_USE_OPPORTUNITIES == 2) {	// 2 = leads only
    +					$titleboth=$langs->trans("Leads");
    +					$titlenew = $langs->trans("NewLead");
    +				}
    +
    +				// Project assigned to user
    +				$newmenu->add("/projet/index.php?leftmenu=projects".($search_project_user?'&search_project_user='.$search_project_user:''), $titleboth, 0, $user->rights->projet->lire, '', $mainmenu, 'projects');
    +				$newmenu->add("/projet/card.php?leftmenu=projects&action=create".($search_project_user?'&search_project_user='.$search_project_user:''), $titlenew, 1, $user->rights->projet->creer);
    +
    +				if ($conf->global->PROJECT_USE_OPPORTUNITIES == 0)
    +				{
    +					$newmenu->add("/projet/list.php?leftmenu=projets".($search_project_user?'&search_project_user='.$search_project_user:'').'&search_status=99', $langs->trans("List"), 1, $showmode, '', 'project', 'list');
    +				}
    +				elseif ($conf->global->PROJECT_USE_OPPORTUNITIES == 1)
    +				{
    +					$newmenu->add("/projet/list.php?leftmenu=projets".($search_project_user?'&search_project_user='.$search_project_user:''), $langs->trans("List"), 1, $showmode, '', 'project', 'list');
    +					$newmenu->add('/projet/list.php?mainmenu=project&amp;leftmenu=list&search_opp_status=openedopp&search_status=99&contextpage=lead', $langs->trans("ListOpenLeads"), 2, $showmode);
    +					$newmenu->add('/projet/list.php?mainmenu=project&amp;leftmenu=list&search_opp_status=notopenedopp&search_status=99&contextpage=project', $langs->trans("ListOpenProjects"), 2, $showmode);
    +				}
    +				elseif ($conf->global->PROJECT_USE_OPPORTUNITIES == 2) {	// 2 = leads only
    +					$newmenu->add('/projet/list.php?mainmenu=project&amp;leftmenu=list&search_opp_status=openedopp&search_status=99', $langs->trans("List"), 2, $showmode);
    +				}
     
    -				// All project i have permission on
    -				/*
    -				$newmenu->add("/projet/index.php?leftmenu=projects", $langs->trans("Projects"), 0, $user->rights->projet->lire && $user->rights->projet->lire, '', $mainmenu, 'projects');
    -				$newmenu->add("/projet/card.php?leftmenu=projects&action=create", $langs->trans("NewProject"), 1, $user->rights->projet->creer && $user->rights->projet->creer);
    -				$newmenu->add("/projet/list.php?leftmenu=projects&search_status=99", $langs->trans("List"), 1, $user->rights->projet->lire && $user->rights->projet->lire);
    -                */
     				$newmenu->add("/projet/stats/index.php?leftmenu=projects", $langs->trans("Statistics"), 1, $user->rights->projet->lire);
     
    +				// Categories
    +				if (! empty($conf->categorie->enabled))
    +				{
    +					$langs->load("categories");
    +					$newmenu->add("/categories/index.php?leftmenu=cat&amp;type=6", $langs->trans("Categories"), 1, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    +				}
    +
     				if (empty($conf->global->PROJECT_HIDE_TASKS))
     				{
     					// Project affected to user
    @@ -1367,22 +1413,6 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				    $newmenu->add("/projet/tasks/stats/index.php?leftmenu=projects", $langs->trans("Statistics"), 1, $user->rights->projet->lire);
     
     				    $newmenu->add("/projet/activity/perweek.php?leftmenu=tasks".($search_project_user?'&search_project_user='.$search_project_user:''), $langs->trans("NewTimeSpent"), 0, $user->rights->projet->lire);
    -
    -					// All project i have permission on
    -					/*$newmenu->add("/projet/activity/index.php", $langs->trans("Activities"), 0, $user->rights->projet->lire && $user->rights->projet->lire);
    -					$newmenu->add("/projet/tasks.php?action=create", $langs->trans("NewTask"), 1, $user->rights->projet->creer && $user->rights->projet->creer);
    -					$newmenu->add("/projet/tasks/list.php", $langs->trans("List"), 1, $user->rights->projet->lire && $user->rights->projet->lire);
    -					$newmenu->add("/projet/activity/perweek.php", $langs->trans("NewTimeSpent"), 1, $user->rights->projet->creer && $user->rights->projet->lire);
    -					*/
    -				}
    -
    -				// Categories
    -				if (! empty($conf->categorie->enabled))
    -				{
    -					$langs->load("categories");
    -					$newmenu->add("/categories/index.php?leftmenu=cat&amp;type=6", $langs->trans("Categories"), 0, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    -					$newmenu->add("/categories/card.php?action=create&amp;type=6", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer);
    -					//if ($usemenuhider || empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/list.php", $langs->trans("List"), 1, $user->rights->categorie->lire);
     				}
     			}
     		}
    @@ -1405,8 +1435,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     			// Leave/Holiday/Vacation module
     			if (! empty($conf->holiday->enabled))
     			{
    -				$langs->load("holiday");
    -				$langs->load("trips");
    +			    // Load translation files required by the page
    +                $langs->loadLangs(array("holiday","trips"));
     
     				$newmenu->add("/holiday/list.php?leftmenu=hrm", $langs->trans("CPTitreMenu"), 0, $user->rights->holiday->read, '', $mainmenu, 'hrm');
     				$newmenu->add("/holiday/card.php?action=request", $langs->trans("New"), 1,$user->rights->holiday->write);
    @@ -1502,8 +1532,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     		{
     			if (! empty($conf->adherent->enabled))
     			{
    -				$langs->load("members");
    -				$langs->load("compta");
    +				// Load translation files required by the page
    +                $langs->loadLangs(array("members","compta"));
     
     				$newmenu->add("/adherents/index.php?leftmenu=members&amp;mainmenu=members",$langs->trans("Members"),0,$user->rights->adherent->lire, '', $mainmenu, 'members');
     				$newmenu->add("/adherents/card.php?leftmenu=members&amp;action=create",$langs->trans("NewMember"),1,$user->rights->adherent->creer);
    @@ -1514,23 +1544,21 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				$newmenu->add("/adherents/list.php?leftmenu=members&amp;statut=1&amp;filter=outofdate",$langs->trans("MenuMembersNotUpToDate"),2,$user->rights->adherent->lire);
     				$newmenu->add("/adherents/list.php?leftmenu=members&amp;statut=0",$langs->trans("MenuMembersResiliated"),2,$user->rights->adherent->lire);
     				$newmenu->add("/adherents/stats/index.php?leftmenu=members",$langs->trans("MenuMembersStats"),1,$user->rights->adherent->lire);
    -				if (! empty($conf->global->MEMBER_LINK_TO_HTPASSWDFILE) && ($usemenuhider || empty($leftmenu) || $leftmenu=='none' || $leftmenu=="members" || $leftmenu=="export")) $newmenu->add("/adherents/htpasswd.php?leftmenu=export",$langs->trans("Filehtpasswd"),1,$user->rights->adherent->export);
    +
     				$newmenu->add("/adherents/cartes/carte.php?leftmenu=export",$langs->trans("MembersCards"),1,$user->rights->adherent->export);
    +				if (! empty($conf->global->MEMBER_LINK_TO_HTPASSWDFILE) && ($usemenuhider || empty($leftmenu) || $leftmenu=='none' || $leftmenu=="members" || $leftmenu=="export")) $newmenu->add("/adherents/htpasswd.php?leftmenu=export",$langs->trans("Filehtpasswd"),1,$user->rights->adherent->export);
    +
    +				if (! empty($conf->categorie->enabled))
    +				{
    +					$langs->load("categories");
    +					$newmenu->add("/categories/index.php?leftmenu=cat&amp;type=3", $langs->trans("Categories"), 1, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    +				}
     
     				$newmenu->add("/adherents/index.php?leftmenu=members&amp;mainmenu=members",$langs->trans("Subscriptions"),0,$user->rights->adherent->cotisation->lire);
     				$newmenu->add("/adherents/list.php?leftmenu=members&amp;statut=-1,1&amp;mainmenu=members",$langs->trans("NewSubscription"),1,$user->rights->adherent->cotisation->creer);
     				$newmenu->add("/adherents/subscription/list.php?leftmenu=members",$langs->trans("List"),1,$user->rights->adherent->cotisation->lire);
     				$newmenu->add("/adherents/stats/index.php?leftmenu=members",$langs->trans("MenuMembersStats"),1,$user->rights->adherent->lire);
     
    -
    -				if (! empty($conf->categorie->enabled))
    -				{
    -					$langs->load("categories");
    -					$newmenu->add("/categories/index.php?leftmenu=cat&amp;type=3", $langs->trans("Categories"), 0, $user->rights->categorie->lire, '', $mainmenu, 'cat');
    -					$newmenu->add("/categories/card.php?action=create&amp;type=3", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer);
    -					//if ($usemenuhider || empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/list.php", $langs->trans("List"), 1, $user->rights->categorie->lire);
    -				}
    -
     				//$newmenu->add("/adherents/index.php?leftmenu=export&amp;mainmenu=members",$langs->trans("Tools"),0,$user->rights->adherent->export, '', $mainmenu, 'export');
     				//if (! empty($conf->export->enabled) && ($usemenuhider || empty($leftmenu) || $leftmenu=="export")) $newmenu->add("/exports/index.php?leftmenu=export",$langs->trans("Datas"),1,$user->rights->adherent->export);
     
    @@ -1539,7 +1567,6 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				$newmenu->add("/adherents/type.php?leftmenu=setup&amp;mainmenu=members&amp;action=create",$langs->trans("New"),1,$user->rights->adherent->configurer);
     				$newmenu->add("/adherents/type.php?leftmenu=setup&amp;mainmenu=members",$langs->trans("List"),1,$user->rights->adherent->configurer);
     			}
    -
     		}
     
     		// Add personalized menus and modules menus
    @@ -1599,7 +1626,6 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
     				$i++;
     			}
     		}
    -
     	}
     
     	// Build final $menu_array = $menu_array_before +$newmenu->liste + $menu_array_after
    diff --git a/htdocs/core/menus/standard/eldy_menu.php b/htdocs/core/menus/standard/eldy_menu.php
    index 11f1de43a1f..049956e82e2 100644
    --- a/htdocs/core/menus/standard/eldy_menu.php
    +++ b/htdocs/core/menus/standard/eldy_menu.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,7 +27,11 @@
      */
     class MenuManager
     {
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $type_user;									// Put 0 for internal users, 1 for external users
     	var $atarget="";                                // To store default target to use onto links
     	var $name="eldy";
    @@ -311,8 +315,6 @@ class MenuManager
     	        				}
     	        				print '</li>'."\n";
            					}
    -
    -
            				}
             			//var_dump($submenu);
             			print '</ul>';
    @@ -331,6 +333,5 @@ class MenuManager
             //print 'xx'.$mode;
             return 0;
         }
    -
     }
     
    diff --git a/htdocs/core/menus/standard/empty.php b/htdocs/core/menus/standard/empty.php
    index f761b593fb7..4d7296b276b 100644
    --- a/htdocs/core/menus/standard/empty.php
    +++ b/htdocs/core/menus/standard/empty.php
    @@ -25,7 +25,11 @@
      */
     class MenuManager
     {
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    
     	var $type_user=0;					// Put 0 for internal users, 1 for external users
     	var $atarget="";               		// To store default target to use onto links
     
    @@ -53,7 +57,6 @@ class MenuManager
     	 */
     	function loadMenu()
     	{
    -
     	}
     
     
    @@ -308,8 +311,6 @@ class MenuManager
     		                    }
     		                    print '</li>'."\n";
     		                }
    -
    -
     		            }
     		            //var_dump($submenu);
     		            print '</ul>';
    diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php
    index 52d65f85678..9e8d5565f67 100644
    --- a/htdocs/core/modules/DolibarrModules.class.php
    +++ b/htdocs/core/modules/DolibarrModules.class.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
      * Copyright (C) 2004       Eric Seigne             <eric.seigne@ryxeo.com>
      * Copyright (C) 2005-2013  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2014       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2018       Josep Lluís Amador      <joseplluis@lliuretic.cat>
      *
    @@ -33,2183 +33,2188 @@
      *
      * Parent class for module descriptor class files
      */
    -class DolibarrModules           // Can not be abstract, because we need to instantiate it into unActivateModule to be able to disable a module whose files were removed.
    +class DolibarrModules // Can not be abstract, because we need to instantiate it into unActivateModule to be able to disable a module whose files were removed.
     {
    -	/**
    -	 * @var DoliDb Database handler
    -	 */
    -	public $db;
    -
    -	/**
    -	 * @var int Module unique ID
    -	 * @see https://wiki.dolibarr.org/index.php/List_of_modules_id
    -	 */
    -	public $numero;
    -
    -	/**
    -	 * @var string Publisher name
    -	 * @since 4.0.0
    -	 */
    -	public $editor_name;
    -
    -	/**
    -	 * @var string URL of module at publisher site
    -	 * @since 4.0.0
    -	 */
    -	public $editor_url;
    -
    -	/**
    -	 * @var string Family
    -	 * @see familyinfo
    -	 *
    -	 * Native values: 'crm', 'financial', 'hr', 'projects', 'products', 'ecm', 'technic', 'other'.
    -	 * Use familyinfo to declare a custom value.
    -	 */
    -	public $family;
    -
    -	/**
    -	 * @var array Custom family informations
    -	 * @see family
    -	 *
    -	 * e.g.:
    -	 * array(
    -	 *     'myownfamily' => array(
    -	 *         'position' => '001',
    -	 *         'label' => $langs->trans("MyOwnFamily")
    -	 *     )
    -	 * );
    -	 *
    -	 */
    -	public $familyinfo;
    -
    -	/**
    -	 * @var int Module position
    -	 * @since 3.9.0
    -	 */
    -	public $module_position=500;
    -
    -	/**
    -	 * @var string Module name
    -	 *
    -	 * Only used if Module[ID]Name translation string is not found.
    -	 *
    -	 * You can use the following code to automatically derive it from your module's class name:
    -	 * preg_replace('/^mod/i', '', get_class($this))
    -	 */
    -	public $name;
    -
    -	/**
    -	 * @var string[] Paths to create when module is activated
    -	 *
    -	 * e.g.: array('/mymodule/temp')
    -	 */
    -	public $dirs = array();
    -
    -	/**
    -	 * @var array Module boxes
    -	 */
    -	public $boxes = array();
    -
    -	/**
    -	 * @var array Module constants
    -	 */
    -	public $const = array();
    -
    -	/**
    -	 * @var array Module cron jobs entries
    -	 */
    -	public $cronjobs = array();
    -
    -	/**
    -	 * @var array Module access rights
    -	 */
    -	public $rights;
    -
    -	/**
    -	 * @var string Module access rights family
    -	 */
    -	public $rights_class;
    -
    -	/**
    -	 * @var array Module menu entries
    -	 */
    -	public $menu = array();
    -
    -	/**
    -	 * @var array Module parts
    -	 *  array(
    -	 *      // Set this to 1 if module has its own trigger directory (/mymodule/core/triggers)
    -	 *      'triggers' => 0,
    -	 *      // Set this to 1 if module has its own login method directory (/mymodule/core/login)
    -	 *      'login' => 0,
    -	 *      // Set this to 1 if module has its own substitution function file (/mymodule/core/substitutions)
    -	 *      'substitutions' => 0,
    -	 *      // Set this to 1 if module has its own menus handler directory (/mymodule/core/menus)
    -	 *      'menus' => 0,
    -	 *      // Set this to 1 if module has its own theme directory (/mymodule/theme)
    -	 *      'theme' => 0,
    -	 *      // Set this to 1 if module overwrite template dir (/mymodule/core/tpl)
    -	 *      'tpl' => 0,
    -	 *      // Set this to 1 if module has its own barcode directory (/mymodule/core/modules/barcode)
    -	 *      'barcode' => 0,
    -	 *      // Set this to 1 if module has its own models directory (/mymodule/core/modules/xxx)
    -	 *      'models' => 0,
    -	 *      // Set this to relative path of css file if module has its own css file
    -	 *      'css' => '/mymodule/css/mymodule.css.php',
    -	 *      // Set this to relative path of js file if module must load a js on all pages
    -	 *      'js' => '/mymodule/js/mymodule.js',
    -	 *      // Set here all hooks context managed by module
    -	 *      'hooks' => array('hookcontext1','hookcontext2')
    -	 *  )
    -	 */
    -	public $module_parts = array();
    -
    -	/**
    -	 * @var string Module documents ?
    -	 * @deprecated Seems unused anywhere
    -	 */
    -	public $docs;
    -
    -	/**
    -	 * @var string ?
    -	 * @deprecated Seems unused anywhere
    -	 */
    -	public $dbversion = "-";
    -
    -	/**
    -	 * @var string Error message
    -	 */
    -	public $error;
    -
    -	/**
    -	 * @var string Module version
    -	 * @see http://semver.org
    -	 *
    -	 * The following keywords can also be used:
    -	 * 'development'
    -	 * 'experimental'
    -	 * 'dolibarr': only for core modules that share its version
    -	 * 'dolibarr_deprecated': only for deprecated core modules
    -	 *
    -	 */
    -	public $version;
    -
    -	/**
    -	 * @var string Module description (short text)
    -	 *
    -	 * Only used if Module[ID]Desc translation string is not found.
    -	 */
    -	public $description;
    -
    -	/**
    -	 * @var string Module description (long text)
    -	 * @since 4.0.0
    -	 *
    -	 * HTML content supported.
    -	 */
    -	public $descriptionlong;
    -
    -
    -	// For exports
    -
    -	/**
    -	 * @var string Module export code
    -	 */
    -	public $export_code;
    -
    -	/**
    -	 * @var string Module export label
    -	 */
    -	public $export_label;
    -
    -	public $export_permission;
    -	public $export_fields_array;
    -	public $export_TypeFields_array;
    -	public $export_entities_array;
    -	public $export_special_array;           // special or computed field
    -	public $export_dependencies_array;
    -	public $export_sql_start;
    -	public $export_sql_end;
    -	public $export_sql_order;
    -
    -
    -	// For import
    -
    -	/**
    -	 * @var string Module import code
    -	 */
    -	public $import_code;
    -
    -	/**
    -	 * @var string Module import label
    -	 */
    -	public $import_label;
    -
    -
    -	/**
    -	 * @var string Module constant name
    -	 */
    -	public $const_name;
    -
    -	/**
    -	 * @var bool Module can't be disabled
    -	 */
    -	public $always_enabled;
    -
    -	/**
    -	 * @var int Module is enabled globally (Multicompany support)
    -	 */
    -	public $core_enabled;
    -
    -	/**
    -	 * @var string Relative path to module style sheet
    -	 * @deprecated
    -	 * @see module_parts
    -	 */
    -	public $style_sheet = '';
    -
    -	/**
    -	 * @var 0|1|2|3 Where to display the module in setup page
    -	 * @deprecated @since 4.0.0
    -	 * @see family
    -	 * @see familyinfo
    -	 *
    -	 * 0: common
    -	 * 1: interface
    -	 * 2: others
    -	 * 3: very specific
    -	 */
    -	public $special;
    -
    -	/**
    -	 * @var string Name of image file used for this module
    -	 *
    -	 * If file is in theme/yourtheme/img directory under name object_pictoname.png use 'pictoname'
    -	 * If file is in module/img directory under name object_pictoname.png use 'pictoname@module'
    -	 */
    -	public $picto;
    -
    -	/**
    -	 * @var string[] List of config pages
    -	 *
    -	 * Name of php pages stored into module/admin directory, used to setup module.
    -	 * e.g.: "admin.php@module"
    -	 */
    -	public $config_page_url;
    -
    -
    -	/**
    -	 * @var string[] List of module class names that must be enabled if this module is enabled.
    -	 *
    -	 * e.g.: array('modAnotherModule', 'modYetAnotherModule')
    -	 */
    -	public $depends;
    -
    -	/**
    -	 * @var int[] List of module ids to disable if this one is disabled.
    -	 */
    -	public $requiredby;
    -
    -	/**
    -	 * @var string[] List of module class names as string this module is in conflict with.
    -	 * @see depends
    -	 */
    -	public $conflictwith;
    -
    -	/**
    -	 * @var string[] Module language files
    -	 */
    -	public $langfiles;
    -
    -	/**
    -	 * @var array<string,string> Array of warnings to show when we activate the module
    -	 *
    -	 * array('always'='text') or array('FR'='text')
    -	 */
    -	public $warnings_activation;
    -
    -	/**
    -	 * @var array<string,string> Array of warnings to show when we activate an external module
    -	 *
    -	 * array('always'='text') or array('FR'='text')
    -	 */
    -	public $warnings_activation_ext;
    -
    -
    -	/**
    -	 * @var array() Minimum version of PHP required by module.
    -	 * e.g.: PHP ≥ 5.3 = array(5, 3)
    -	 */
    -	public $phpmin;
    -
    -	/**
    -	 * @var array Minimum version of Dolibarr required by module.
    -	 * e.g.: Dolibarr ≥ 3.6 = array(3, 6)
    -	 */
    -	public $need_dolibarr_version;
    -
    -	/**
    -	 * @var bool Whether to hide the module.
    -	 */
    -	public $hidden = false;
    -
    -
    -
    -
    -
    -	/**
    -	 * Constructor. Define names, constants, directories, boxes, permissions
    -	 *
    -	 * @param DoliDB		$db      Database handler
    -	 */
    -	public function __construct($db)
    -	{
    -		$this->db = $db;
    -	}
    -	// We should but can't set this as abstract because this will make dolibarr hang
    -	// after migration due to old module not implementing. We must wait PHP is able to make
    -	// a try catch on Fatal error to manage this correctly.
    -	// We need constructor into function unActivateModule into admin.lib.php
    -
    -
    -	/**
    -	 * Enables a module.
    -	 * Inserts all informations into database
    -	 *
    -	 * @param   array  		$array_sql  SQL requests to be executed when enabling module
    -	 * @param   string      $options    String with options when disabling module:
    -	 *                                    'noboxes' = Do not insert boxes
    -	 *                                    'newboxdefonly' = For boxes, insert def of boxes only and not boxes activation
    -	 *
    -	 * @return  int                         1 if OK, 0 if KO
    -	 */
    -	function _init($array_sql, $options='')
    -	{
    -		global $conf;
    -		$err=0;
    -
    -		$this->db->begin();
    -
    -		// Insert activation module constant
    -		if (! $err) $err+=$this->_active();
    -
    -		// Insert new pages for tabs (into llx_const)
    -		if (! $err) $err+=$this->insert_tabs();
    -
    -		// Insert activation of module's parts
    -		if (! $err) $err+=$this->insert_module_parts();
    -
    -		// Insert constant defined by modules (into llx_const)
    -		if (! $err && ! preg_match('/newboxdefonly/',$options)) $err+=$this->insert_const();	// Test on newboxdefonly to avoid to erase value during upgrade
    -
    -		// Insert boxes def into llx_boxes_def and boxes setup (into llx_boxes)
    -		if (! $err && ! preg_match('/noboxes/',$options)) $err+=$this->insert_boxes($options);
    -
    -		// Insert cron job entries (entry in llx_cronjobs)
    -		if (! $err) $err+=$this->insert_cronjobs();
    -
    -		// Insert permission definitions of module into llx_rights_def. If user is admin, grant this permission to user.
    -		if (! $err) $err+=$this->insert_permissions(1, null, 1);
    -
    -		// Insert specific menus entries into database
    -		if (! $err) $err+=$this->insert_menus();
    -
    -		// Create module's directories
    -		if (! $err) $err+=$this->create_dirs();
    -
    -		// Execute addons requests
    -		$num=count($array_sql);
    -		for ($i = 0; $i < $num; $i++)
    -		{
    -			if (! $err)
    -			{
    -				$val=$array_sql[$i];
    -				$sql=$val;
    -				$ignoreerror=0;
    -				if (is_array($val))
    -				{
    -					$sql=$val['sql'];
    -					$ignoreerror=$val['ignoreerror'];
    -				}
    -				// Add current entity id
    -				$sql=str_replace('__ENTITY__', $conf->entity, $sql);
    -
    -				dol_syslog(get_class($this)."::_init ignoreerror=".$ignoreerror."", LOG_DEBUG);
    -				$result=$this->db->query($sql, $ignoreerror);
    -				if (! $result)
    -				{
    -					if (! $ignoreerror)
    -					{
    -						$this->error=$this->db->lasterror();
    -						$err++;
    -					}
    -					else
    -					{
    -						dol_syslog(get_class($this)."::_init Warning ".$this->db->lasterror(), LOG_WARNING);
    -					}
    -				}
    -			}
    -		}
    -
    -		// Return code
    -		if (! $err)
    -		{
    -			$this->db->commit();
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->db->rollback();
    -			return 0;
    -		}
    -	}
    -
    -	/**
    -	 * Disable function. Deletes the module constant and boxes from the database.
    -	 *
    -	 * @param   string[]    $array_sql  SQL requests to be executed when module is disabled
    -	 * @param   string      $options	Options when disabling module:
    -	 *                                    'newboxdefonly|noboxes' = We don't remove boxes.
    -	 *
    -	 * @return  int                     1 if OK, 0 if KO
    -	 */
    -	function _remove($array_sql, $options='')
    -	{
    -		$err=0;
    -
    -		$this->db->begin();
    -
    -		// Remove activation module line (constant MAIN_MODULE_MYMODULE in llx_const)
    -		if (! $err) $err+=$this->_unactive();
    -
    -		// Remove activation of module's new tabs (MAIN_MODULE_MYMODULE_TABS_XXX in llx_const)
    -		if (! $err) $err+=$this->delete_tabs();
    -
    -		// Remove activation of module's parts (MAIN_MODULE_MYMODULE_XXX in llx_const)
    -		if (! $err) $err+=$this->delete_module_parts();
    -
    -		// Remove constants defined by modules
    -		if (! $err) $err+=$this->delete_const();
    -
    -		// Remove list of module's available boxes (entry in llx_boxes)
    -		if (! $err && ! preg_match('/(newboxdefonly|noboxes)/',$options)) $err+=$this->delete_boxes();	// We don't have to delete if option ask to keep boxes safe or ask to add new box def only
    -
    -		// Remove list of module's cron job entries (entry in llx_cronjobs)
    -		if (! $err) $err+=$this->delete_cronjobs();
    -
    -		// Remove module's permissions from list of available permissions (entries in llx_rights_def)
    -		if (! $err) $err+=$this->delete_permissions();
    -
    -		// Remove module's menus (entries in llx_menu)
    -		if (! $err) $err+=$this->delete_menus();
    -
    -		// Remove module's directories
    -		if (! $err) $err+=$this->delete_dirs();
    -
    -		// Run complementary sql requests
    -		$num=count($array_sql);
    -		for ($i = 0; $i < $num; $i++)
    -		{
    -			if (! $err)
    -			{
    -				dol_syslog(get_class($this)."::_remove", LOG_DEBUG);
    -				$result=$this->db->query($array_sql[$i]);
    -				if (! $result)
    -				{
    -					$this->error=$this->db->error();
    -					$err++;
    -				}
    -			}
    -		}
    -
    -		// Return code
    -		if (! $err)
    -		{
    -			$this->db->commit();
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->db->rollback();
    -			return 0;
    -		}
    -	}
    -
    -
    -	/**
    -	 * Gives the translated module name if translation exists in admin.lang or into language files of module.
    -	 * Otherwise return the module key name.
    -	 *
    -	 * @return  string  Translated module name
    -	 */
    -	function getName()
    -	{
    -		global $langs;
    -		$langs->load("admin");
    -
    -		if ($langs->transnoentitiesnoconv("Module".$this->numero."Name") != ("Module".$this->numero."Name"))
    -		{
    -			// If module name translation exists
    -			return $langs->transnoentitiesnoconv("Module".$this->numero."Name");
    -		}
    -		else
    -		{
    -			// If module name translation using it's unique id does not exists, we try to use its name to find translation
    -			if (is_array($this->langfiles))
    -			{
    -				foreach($this->langfiles as $val)
    -				{
    -					if ($val) $langs->load($val);
    -				}
    -			}
    -
    -			if ($langs->trans("Module".$this->name."Name") != ("Module".$this->name."Name"))
    -			{
    -				// If module name translation exists
    -				return $langs->transnoentitiesnoconv("Module".$this->name."Name");
    -			}
    -
    -			// Last chance with simple label
    -			return $langs->transnoentitiesnoconv($this->name);
    -		}
    -	}
    -
    -
    -	/**
    -	 * Gives the translated module description if translation exists in admin.lang or the default module description
    -	 *
    -	 * @return  string  Translated module description
    -	 */
    -	function getDesc()
    -	{
    -		global $langs;
    -		$langs->load("admin");
    -
    -		if ($langs->transnoentitiesnoconv("Module".$this->numero."Desc") != ("Module".$this->numero."Desc"))
    -		{
    -			// If module description translation exists
    -			return $langs->transnoentitiesnoconv("Module".$this->numero."Desc");
    -		}
    -		else
    -		{
    -			// If module description translation does not exist using its unique id, we can use its name to find translation
    -			if (is_array($this->langfiles))
    -			{
    -				foreach($this->langfiles as $val)
    -				{
    -					if ($val) $langs->load($val);
    -				}
    -			}
    -
    -			if ($langs->transnoentitiesnoconv("Module".$this->name."Desc") != ("Module".$this->name."Desc"))
    -			{
    -				// If module name translation exists
    -				return $langs->trans("Module".$this->name."Desc");
    -			}
    -
    -			// Last chance with simple label
    -			return $langs->trans($this->description);
    -		}
    -	}
    -
    -	/**
    -	 * Gives the long description of a module. First check README-la_LA.md then README.md
    -	 * If not markdown files found, it return translated value of the key ->descriptionlong.
    -	 *
    -	 * @return  string                  Long description of a module from README.md of from property.
    -	 */
    -	function getDescLong()
    -	{
    -		global $langs;
    -		$langs->load("admin");
    -
    -		include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    -		include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
    -
    -		$pathoffile = $this->getDescLongReadmeFound();
    -
    -		if ($pathoffile)     // Mostly for external modules
    -		{
    -			$content = file_get_contents($pathoffile);
    -
    -			if ((float) DOL_VERSION >= 6.0)
    -			{
    -				@include_once DOL_DOCUMENT_ROOT.'/core/lib/parsemd.lib.php';
    -
    -				$content = dolMd2Html($content, 'parsedown',
    -					array(
    -						'doc/'=>dol_buildpath(strtolower($this->name).'/doc/', 1),
    -						'img/'=>dol_buildpath(strtolower($this->name).'/img/', 1),
    -						'images/'=>dol_buildpath(strtolower($this->name).'/imgages/', 1),
    -					));
    -			}
    -			else
    -			{
    -				$content = nl2br($content);
    -			}
    -		}
    -		else                // Mostly for internal modules
    -		{
    -			if (! empty($this->descriptionlong))
    -			{
    -				if (is_array($this->langfiles))
    -				{
    -					foreach($this->langfiles as $val)
    -					{
    -						if ($val) $langs->load($val);
    -					}
    -				}
    -
    -				$content = $langs->transnoentitiesnoconv($this->descriptionlong);
    -			}
    -		}
    -
    -		return $content;
    -	}
    -
    -	/**
    -	 * Return path of file if a README file was found.
    -	 *
    -	 * @return  string      Path of file if a README file was found.
    -	 */
    -	function getDescLongReadmeFound()
    -	{
    -		global $langs;
    -
    -		$filefound= false;
    -
    -		// Define path to file README.md.
    -		// First check README-la_LA.md then README-la.md then README.md
    -		$pathoffile = dol_buildpath(strtolower($this->name).'/README-'.$langs->defaultlang.'.md', 0);
    -		if (dol_is_file($pathoffile))
    -		{
    -			$filefound = true;
    -		}
    -		if (! $filefound)
    -		{
    -			$tmp=explode('_', $langs->defaultlang);
    -			$pathoffile = dol_buildpath(strtolower($this->name).'/README-'.$tmp[0].'.md', 0);
    -			if (dol_is_file($pathoffile))
    -			{
    -				$filefound = true;
    -			}
    -		}
    -		if (! $filefound)
    -		{
    -			$pathoffile = dol_buildpath(strtolower($this->name).'/README.md', 0);
    -			if (dol_is_file($pathoffile))
    -			{
    -				$filefound = true;
    -			}
    -		}
    -
    -		return ($filefound?$pathoffile:'');
    -	}
    -
    -
    -	/**
    -	 * Gives the changelog. First check ChangeLog-la_LA.md then ChangeLog.md
    -	 *
    -	 * @return  string  Content of ChangeLog
    -	 */
    -	function getChangeLog()
    -	{
    -		global $langs;
    -		$langs->load("admin");
    -
    -		include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    -		include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
    -
    -		$filefound= false;
    -
    -		// Define path to file README.md.
    -		// First check README-la_LA.md then README.md
    -		$pathoffile = dol_buildpath(strtolower($this->name).'/ChangeLog-'.$langs->defaultlang.'.md', 0);
    -		if (dol_is_file($pathoffile))
    -		{
    -			$filefound = true;
    -		}
    -		if (! $filefound)
    -		{
    -			$pathoffile = dol_buildpath(strtolower($this->name).'/ChangeLog.md', 0);
    -			if (dol_is_file($pathoffile))
    -			{
    -				$filefound = true;
    -			}
    -		}
    -
    -		if ($filefound)     // Mostly for external modules
    -		{
    -			$content = file_get_contents($pathoffile);
    -
    -			if ((float) DOL_VERSION >= 6.0)
    -			{
    -				@include_once DOL_DOCUMENT_ROOT.'/core/lib/parsemd.lib.php';
    -				$content = dolMd2Html($content, 'parsedown', array('doc/'=>dol_buildpath(strtolower($this->name).'/doc/', 1)));
    -			}
    -			else
    -			{
    -				$content = nl2br($content);
    -			}
    -		}
    -
    -		return $content;
    -	}
    -
    -	/**
    -	 * Gives the publisher name
    -	 *
    -	 * @return  string  Publisher name
    -	 */
    -	function getPublisher()
    -	{
    -		return $this->editor_name;
    -	}
    -
    -	/**
    -	 * Gives the publisher url
    -	 *
    -	 * @return  string  Publisher url
    -	 */
    -	function getPublisherUrl()
    -	{
    -		return $this->editor_url;
    -	}
    -
    -	/**
    -	 * Gives module version (translated if param $translated is on)
    -	 * For 'experimental' modules, gives 'experimental' translation
    -	 * For 'dolibarr' modules, gives Dolibarr version
    -	 *
    -	 * @param   int     $translated     1=Special version keys are translated, 0=Special version keys are not translated
    -	 * @return  string                  Module version
    -	 */
    -	function getVersion($translated=1)
    -	{
    -		global $langs;
    -		$langs->load("admin");
    -
    -		$ret='';
    -
    -		$newversion=preg_replace('/_deprecated/','',$this->version);
    -		if ($newversion == 'experimental') $ret=($translated?$langs->transnoentitiesnoconv("VersionExperimental"):$newversion);
    -		elseif ($newversion == 'development') $ret=($translated?$langs->transnoentitiesnoconv("VersionDevelopment"):$newversion);
    -		elseif ($newversion == 'dolibarr') $ret=DOL_VERSION;
    -		elseif ($newversion) $ret=$newversion;
    -		else $ret=($translated?$langs->transnoentitiesnoconv("VersionUnknown"):'unknown');
    -
    -		if (preg_match('/_deprecated/',$this->version)) $ret.=($translated?' ('.$langs->transnoentitiesnoconv("Deprecated").')':$this->version);
    -		return $ret;
    -	}
    -
    -
    -	/**
    -	 * Tells if module is core or external
    -	 *
    -	 * @return  string  'core', 'external' or 'unknown'
    -	 */
    -	function isCoreOrExternalModule()
    -	{
    -		if ($this->version == 'dolibarr' || $this->version == 'dolibarr_deprecated') return 'core';
    -		if (! empty($this->version) && ! in_array($this->version,array('experimental','development'))) return 'external';
    -		if (! empty($this->editor_name) || ! empty($this->editor_url)) return 'external';
    -		if ($this->numero >= 100000) return 'external';
    -		return 'unknown';
    -	}
    -
    -
    -	/**
    -	 * Gives module related language files list
    -	 *
    -	 * @return  string[]    Language files list
    -	 */
    -	function getLangFilesArray()
    -	{
    -		return $this->langfiles;
    -	}
    -
    -	/**
    -	 * Gives translated label of an export dataset
    -	 *
    -	 * @param   int     $r  Dataset index
    -	 *
    -	 * @return string       Translated databaset label
    -	 */
    -	function getExportDatasetLabel($r)
    -	{
    -		global $langs;
    -
    -		$langstring="ExportDataset_".$this->export_code[$r];
    -		if ($langs->trans($langstring) == $langstring)
    -		{
    -			// Translation not found
    -			return $langs->trans($this->export_label[$r]);
    -		}
    -		else
    -		{
    -			// Translation found
    -			return $langs->trans($langstring);
    -		}
    -	}
    -
    -
    -	/**
    -	 * Gives translated label of an import dataset
    -	 *
    -	 * @param   int     $r  Dataset index
    -	 *
    -	 * @return  string      Translated dataset label
    -	 */
    -	function getImportDatasetLabel($r)
    -	{
    -		global $langs;
    -
    -		$langstring="ImportDataset_".$this->import_code[$r];
    -		//print "x".$langstring;
    -		if ($langs->trans($langstring) == $langstring)
    -		{
    -			// Translation not found
    -			return $langs->transnoentitiesnoconv($this->import_label[$r]);
    -		}
    -		else
    -		{
    -			// Translation found
    -			return $langs->transnoentitiesnoconv($langstring);
    -		}
    -	}
    -
    -
    -	/**
    -	 * Gives the last date of activation
    -	 *
    -	 * @return  timestamp       Date of last activation
    -	 */
    -	function getLastActivationDate()
    -	{
    -		global $conf;
    -
    -		$sql = "SELECT tms FROM ".MAIN_DB_PREFIX."const";
    -		$sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    -		$sql.= " AND entity IN (0, ".$conf->entity.")";
    -
    -		dol_syslog(get_class($this)."::getLastActiveDate", LOG_DEBUG);
    -		$resql=$this->db->query($sql);
    -		if (! $resql) $err++;
    -		else
    -		{
    -			$obj=$this->db->fetch_object($resql);
    -			if ($obj) return $this->db->jdate($obj->tms);
    -		}
    -
    -		return '';
    -	}
    -
    -
    -	/**
    -	 * Gives the last author of activation
    -	 *
    -	 * @return  array       Array array('authorid'=>Id of last activation user, 'lastactivationdate'=>Date of last activation)
    -	 */
    -	function getLastActivationInfo()
    -	{
    -		global $conf;
    -
    -		$sql = "SELECT tms, note FROM ".MAIN_DB_PREFIX."const";
    -		$sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    -		$sql.= " AND entity IN (0, ".$conf->entity.")";
    -
    -		dol_syslog(get_class($this)."::getLastActiveDate", LOG_DEBUG);
    -		$resql=$this->db->query($sql);
    -		if (! $resql) $err++;
    -		else
    -		{
    -			$obj=$this->db->fetch_object($resql);
    -			$tmp=array();
    -			if ($obj->note)
    -			{
    -				$tmp=json_decode($obj->note, true);
    -			}
    -			if ($obj) return array('authorid'=>$tmp['authorid'], 'ip'=>$tmp['ip'], 'lastactivationdate'=>$this->db->jdate($obj->tms));
    -		}
    -
    -		return array();
    -	}
    -
    -
    -	/**
    -	 * Insert constants for module activation
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function _active()
    -	{
    -		global $conf, $user;
    -
    -		$err = 0;
    -
    -		// Common module
    -		$entity = ((! empty($this->always_enabled) || ! empty($this->core_enabled)) ? 0 : $conf->entity);
    -
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    -		$sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    -		$sql.= " AND entity IN (0, ".$entity.")";
    -
    -		dol_syslog(get_class($this)."::_active delete activation constant", LOG_DEBUG);
    -		$resql=$this->db->query($sql);
    -		if (! $resql) $err++;
    -
    -		$note=json_encode(array('authorid'=>(is_object($user)?$user->id:0), 'ip'=>(empty($_SERVER['REMOTE_ADDR'])?'':$_SERVER['REMOTE_ADDR'])));
    -
    -		$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name, value, visible, entity, note) VALUES";
    -		$sql.= " (".$this->db->encrypt($this->const_name,1);
    -		$sql.= ", ".$this->db->encrypt('1',1);
    -		$sql.= ", 0, ".$entity;
    -		$sql.= ", '".$this->db->escape($note)."')";
    -
    -		dol_syslog(get_class($this)."::_active insert activation constant", LOG_DEBUG);
    -		$resql=$this->db->query($sql);
    -		if (! $resql) $err++;
    -
    -		return $err;
    -	}
    -
    -
    -	/**
    -	 * Module deactivation
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function _unactive()
    -	{
    -		global $conf;
    -
    -		$err = 0;
    -
    -		// Common module
    -		$entity = ((! empty($this->always_enabled) || ! empty($this->core_enabled)) ? 0 : $conf->entity);
    -
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    -		$sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    -		$sql.= " AND entity IN (0, ".$entity.")";
    -
    -		dol_syslog(get_class($this)."::_unactive", LOG_DEBUG);
    -		$this->db->query($sql);
    -
    -		return $err;
    -	}
    -
    -
    -	/**
    -	 * Create tables and keys required by module.
    -	 * Files module.sql and module.key.sql with create table and create keys
    -	 * commands must be stored in directory reldir='/module/sql/'
    -	 * This function is called by this->init
    -	 *
    -	 * @param   string  $reldir Relative directory where to scan files
    -	 * @return  int             <=0 if KO, >0 if OK
    -	 */
    -	function _load_tables($reldir)
    -	{
    -		global $conf;
    -
    -		$error=0;
    -		$dirfound=0;
    -
    -		if (empty($reldir)) return 1;
    -
    -		include_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
    -
    -		$ok = 1;
    -		foreach($conf->file->dol_document_root as $dirroot)
    -		{
    -			if ($ok)
    -			{
    -				$dir = $dirroot.$reldir;
    -				$ok = 0;
    -
    -				$handle=@opendir($dir);         // Dir may not exists
    -				if (is_resource($handle))
    -				{
    -					$dirfound++;
    -
    -					// Run llx_mytable.sql files, then llx_mytable_*.sql
    -					$files = array();
    -					while (($file = readdir($handle))!==false)
    -					{
    -						$files[] = $file;
    -					}
    -					sort($files);
    -					foreach ($files as $file)
    -					{
    -						if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'llx_' && substr($file,0,4) != 'data')
    -						{
    -							$result=run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG)?1:0, '', 1);
    -							if ($result <= 0) $error++;
    -						}
    -					}
    -
    -					rewinddir($handle);
    -
    -					// Run llx_mytable.key.sql files (Must be done after llx_mytable.sql) then then llx_mytable_*.key.sql
    -					$files = array();
    -					while (($file = readdir($handle))!==false)
    -					{
    -						$files[] = $file;
    -					}
    -					sort($files);
    -					foreach ($files as $file)
    -					{
    -						if (preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'llx_' && substr($file,0,4) != 'data')
    -						{
    -							$result=run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG)?1:0, '', 1);
    -							if ($result <= 0) $error++;
    -						}
    -					}
    -
    -					rewinddir($handle);
    -
    -					// Run data_xxx.sql files (Must be done after llx_mytable.key.sql)
    -					$files = array();
    -					while (($file = readdir($handle))!==false)
    -					{
    -						$files[] = $file;
    -					}
    -					sort($files);
    -					foreach ($files as $file)
    -					{
    -						if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'data')
    -						{
    -							$result=run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG)?1:0, '', 1);
    -							if ($result <= 0) $error++;
    -						}
    -					}
    -
    -					rewinddir($handle);
    -
    -					// Run update_xxx.sql files
    -					$files = array();
    -					while (($file = readdir($handle))!==false)
    -					{
    -						$files[] = $file;
    -					}
    -					sort($files);
    -					foreach ($files as $file)
    -					{
    -						if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,6) == 'update')
    -						{
    -							$result=run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG)?1:0, '', 1);
    -							if ($result <= 0) $error++;
    -						}
    -					}
    -
    -					closedir($handle);
    -				}
    -
    -				if ($error == 0)
    -				{
    -					$ok = 1;
    -				}
    -			}
    -		}
    -
    -		if (! $dirfound) dol_syslog("A module ask to load sql files into ".$reldir." but this directory was not found.", LOG_WARNING);
    -		return $ok;
    -	}
    -
    -
    -	/**
    -	 * Adds boxes
    -	 *
    -	 * @param   string  $option Options when disabling module ('newboxdefonly'=insert only boxes definition)
    -	 *
    -	 * @return  int             Error count (0 if OK)
    -	 */
    -	function insert_boxes($option='')
    -	{
    -		require_once DOL_DOCUMENT_ROOT . '/core/class/infobox.class.php';
    -
    -		global $conf;
    -
    -		$err=0;
    -
    -		if (is_array($this->boxes))
    -		{
    -			dol_syslog(get_class($this)."::insert_boxes", LOG_DEBUG);
    -
    -			$pos_name = InfoBox::getListOfPagesForBoxes();
    -
    -			foreach ($this->boxes as $key => $value)
    -			{
    -				$file  = isset($this->boxes[$key]['file'])?$this->boxes[$key]['file']:'';
    -				$note  = isset($this->boxes[$key]['note'])?$this->boxes[$key]['note']:'';
    -				$enabledbydefaulton = isset($this->boxes[$key]['enabledbydefaulton'])?$this->boxes[$key]['enabledbydefaulton']:'Home';
    -
    -				if (empty($file)) $file  = isset($this->boxes[$key][1])?$this->boxes[$key][1]:'';	// For backward compatibility
    -				if (empty($note)) $note  = isset($this->boxes[$key][2])?$this->boxes[$key][2]:'';	// For backward compatibility
    -
    -				// Search if boxes def already present
    -				$sql = "SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."boxes_def";
    -				$sql.= " WHERE file = '".$this->db->escape($file)."'";
    -				$sql.= " AND entity = ".$conf->entity;
    -				if ($note) $sql.=" AND note ='".$this->db->escape($note)."'";
    -
    -				$result=$this->db->query($sql);
    -				if ($result)
    -				{
    -					$obj = $this->db->fetch_object($result);
    -					if ($obj->nb == 0)
    -					{
    -						$this->db->begin();
    -
    -						if (! $err)
    -						{
    -							$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes_def (file, entity, note)";
    -							$sql.= " VALUES ('".$this->db->escape($file)."', ";
    -							$sql.= $conf->entity.", ";
    -							$sql.= $note?"'".$this->db->escape($note)."'":"null";
    -							$sql.= ")";
    -
    -							dol_syslog(get_class($this)."::insert_boxes", LOG_DEBUG);
    -							$resql=$this->db->query($sql);
    -							if (! $resql) $err++;
    -
    -						}
    -						if (! $err && ! preg_match('/newboxdefonly/',$option))
    -						{
    -							$lastid=$this->db->last_insert_id(MAIN_DB_PREFIX."boxes_def","rowid");
    -
    -							foreach ($pos_name as $key2 => $val2)
    -							{
    -								//print 'key2='.$key2.'-val2='.$val2."<br>\n";
    -								if ($enabledbydefaulton && $val2 != $enabledbydefaulton) continue;		// Not enabled by default onto this page.
    -
    -								$sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id,position,box_order,fk_user,entity)";
    -								$sql.= " VALUES (".$lastid.", ".$key2.", '0', 0, ".$conf->entity.")";
    -
    -								dol_syslog(get_class($this)."::insert_boxes onto page ".$key2."=".$val2."", LOG_DEBUG);
    -								$resql=$this->db->query($sql);
    -								if (! $resql) $err++;
    -							}
    -						}
    -
    -						if (! $err)
    -						{
    -							$this->db->commit();
    -						}
    -						else
    -						{
    -							$this->error=$this->db->lasterror();
    -							$this->db->rollback();
    -						}
    -					}
    -					// else box already registered into database
    -				}
    -				else
    -			  {
    -					$this->error=$this->db->lasterror();
    -					$err++;
    -				}
    -			}
    -		}
    -
    -		return $err;
    -	}
    -
    -
    -	/**
    -	 * Removes boxes
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function delete_boxes()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		if (is_array($this->boxes))
    -		{
    -			foreach ($this->boxes as $key => $value)
    -			{
    -				//$titre = $this->boxes[$key][0];
    -				$file  = $this->boxes[$key]['file'];
    -				//$note  = $this->boxes[$key][2];
    -
    -				// TODO If the box is also included by another module and the other module is still on, we should not remove it.
    -				// For the moment, we manage this with hard coded exception
    -				//print "Remove box ".$file.'<br>';
    -				if ($file == 'box_graph_product_distribution.php')
    -				{
    -					if (! empty($conf->produit->enabled) || ! empty($conf->service->enabled))
    -					{
    -						dol_syslog("We discard disabling of module ".$file." because another module still active require it.");
    -						continue;
    -					}
    -				}
    -
    -				if (empty($file)) $file  = isset($this->boxes[$key][1])?$this->boxes[$key][1]:'';	// For backward compatibility
    -
    -				if ($this->db->type == 'sqlite3') {
    -					// sqlite doesn't support "USING" syntax.
    -					// TODO: remove this dependency.
    -					$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes ";
    -					$sql .= "WHERE ".MAIN_DB_PREFIX."boxes.box_id IN (";
    -					$sql .= "SELECT ".MAIN_DB_PREFIX."boxes_def.rowid ";
    -					$sql .= "FROM ".MAIN_DB_PREFIX."boxes_def ";
    -					$sql .= "WHERE ".MAIN_DB_PREFIX."boxes_def.file = '".$this->db->escape($file)."') ";
    -					$sql .= "AND ".MAIN_DB_PREFIX."boxes.entity = ".$conf->entity;
    -				} else {
    -					$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
    -					$sql.= " USING ".MAIN_DB_PREFIX."boxes, ".MAIN_DB_PREFIX."boxes_def";
    -					$sql.= " WHERE ".MAIN_DB_PREFIX."boxes.box_id = ".MAIN_DB_PREFIX."boxes_def.rowid";
    -					$sql.= " AND ".MAIN_DB_PREFIX."boxes_def.file = '".$this->db->escape($file)."'";
    -					$sql.= " AND ".MAIN_DB_PREFIX."boxes.entity = ".$conf->entity;
    -				}
    -
    -				dol_syslog(get_class($this)."::delete_boxes", LOG_DEBUG);
    -				$resql=$this->db->query($sql);
    -				if (! $resql)
    -				{
    -					$this->error=$this->db->lasterror();
    -					$err++;
    -				}
    -
    -				$sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def";
    -				$sql.= " WHERE file = '".$this->db->escape($file)."'";
    -				$sql.= " AND entity = ".$conf->entity;
    -
    -				dol_syslog(get_class($this)."::delete_boxes", LOG_DEBUG);
    -				$resql=$this->db->query($sql);
    -				if (! $resql)
    -				{
    -					$this->error=$this->db->lasterror();
    -					$err++;
    -				}
    -			}
    -		}
    -
    -		return $err;
    -	}
    -
    -	/**
    -	 * Adds cronjobs
    -	 *
    -	 * @return  int             Error count (0 if OK)
    -	 */
    -	function insert_cronjobs()
    -	{
    -		require_once DOL_DOCUMENT_ROOT . '/core/class/infobox.class.php';
    -
    -		global $conf;
    -
    -		$err=0;
    -
    -		if (is_array($this->cronjobs))
    -		{
    -			dol_syslog(get_class($this)."::insert_cronjobs", LOG_DEBUG);
    -
    -			foreach ($this->cronjobs as $key => $value)
    -			{
    -				$entity  = isset($this->cronjobs[$key]['entity'])?$this->cronjobs[$key]['entity']:$conf->entity;
    -				$label  = isset($this->cronjobs[$key]['label'])?$this->cronjobs[$key]['label']:'';
    -				$jobtype  = isset($this->cronjobs[$key]['jobtype'])?$this->cronjobs[$key]['jobtype']:'';
    -				$class  = isset($this->cronjobs[$key]['class'])?$this->cronjobs[$key]['class']:'';
    -				$objectname  = isset($this->cronjobs[$key]['objectname'])?$this->cronjobs[$key]['objectname']:'';
    -				$method = isset($this->cronjobs[$key]['method'])?$this->cronjobs[$key]['method']:'';
    -				$command  = isset($this->cronjobs[$key]['command'])?$this->cronjobs[$key]['command']:'';
    -				$parameters  = isset($this->cronjobs[$key]['parameters'])?$this->cronjobs[$key]['parameters']:'';
    -				$comment = isset($this->cronjobs[$key]['comment'])?$this->cronjobs[$key]['comment']:'';
    -				$frequency = isset($this->cronjobs[$key]['frequency'])?$this->cronjobs[$key]['frequency']:'';
    -				$unitfrequency = isset($this->cronjobs[$key]['unitfrequency'])?$this->cronjobs[$key]['unitfrequency']:'';
    -				$status = isset($this->cronjobs[$key]['status'])?$this->cronjobs[$key]['status']:'';
    -				$priority = isset($this->cronjobs[$key]['priority'])?$this->cronjobs[$key]['priority']:'';
    -				$test = isset($this->cronjobs[$key]['test'])?$this->cronjobs[$key]['test']:'';					// Line must be enabled or not (so visible or not)
    -
    -				// Search if boxes def already present
    -				$sql = "SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."cronjob";
    -				$sql.= " WHERE module_name = '".$this->db->escape(empty($this->rights_class)?strtolower($this->name):$this->rights_class)."'";
    -				if ($class) $sql.= " AND classesname = '".$this->db->escape($class)."'";
    -				if ($objectname) $sql.= " AND objectname = '".$this->db->escape($objectname)."'";
    -				if ($method) $sql.= " AND methodename = '".$this->db->escape($method)."'";
    -				if ($command) $sql.= " AND command = '".$this->db->escape($command)."'";
    -				$sql.= " AND entity = ".$entity;	// Must be exact entity
    -
    -				$now=dol_now();
    -
    -				$result=$this->db->query($sql);
    -				if ($result)
    -				{
    -					$obj = $this->db->fetch_object($result);
    -					if ($obj->nb == 0)
    -					{
    -						$this->db->begin();
    -
    -						if (! $err)
    -						{
    -							$sql = "INSERT INTO ".MAIN_DB_PREFIX."cronjob (module_name, datec, datestart, label, jobtype, classesname, objectname, methodename, command, params, note,";
    -							if(is_int($frequency)){ $sql.= ' frequency,'; }
    -							if(is_int($unitfrequency)){ $sql.= ' unitfrequency,'; }
    -							if(is_int($priority)){ $sql.= ' priority,'; }
    -							if(is_int($status)){ $sql.= ' status,'; }
    -							$sql.= " entity, test)";
    -							$sql.= " VALUES (";
    -							$sql.= "'".$this->db->escape(empty($this->rights_class)?strtolower($this->name):$this->rights_class)."', ";
    -							$sql.= "'".$this->db->idate($now)."', ";
    -							$sql.= "'".$this->db->idate($now)."', ";
    -							$sql.= "'".$this->db->escape($label)."', ";
    -							$sql.= "'".$this->db->escape($jobtype)."', ";
    -							$sql.= ($class?"'".$this->db->escape($class)."'":"null").",";
    -							$sql.= ($objectname?"'".$this->db->escape($objectname)."'":"null").",";
    -							$sql.= ($method?"'".$this->db->escape($method)."'":"null").",";
    -							$sql.= ($command?"'".$this->db->escape($command)."'":"null").",";
    -							$sql.= ($parameters?"'".$this->db->escape($parameters)."'":"null").",";
    -							$sql.= ($comment?"'".$this->db->escape($comment)."'":"null").",";
    -							if(is_int($frequency)){ $sql.= "'".$this->db->escape($frequency)."', "; }
    -							if(is_int($unitfrequency)){ $sql.= "'".$this->db->escape($unitfrequency)."', "; }
    -							if(is_int($priority)) {$sql.= "'".$this->db->escape($priority)."', ";}
    -							if(is_int($status)){ $sql.= "'".$this->db->escape($status)."', "; }
    -							$sql.= $entity.",";
    -							$sql.= "'".$this->db->escape($test)."'";
    -							$sql.= ")";
    -
    -							$resql=$this->db->query($sql);
    -							if (! $resql) $err++;
    -
    -						}
    -
    -						if (! $err)
    -						{
    -							$this->db->commit();
    -						}
    -						else
    -						{
    -							$this->error=$this->db->lasterror();
    -							$this->db->rollback();
    -						}
    -					}
    -					// else box already registered into database
    -				}
    -				else
    -			  {
    -					$this->error=$this->db->lasterror();
    -					$err++;
    -				}
    -			}
    -		}
    -
    -		return $err;
    -	}
    -
    -
    -	/**
    -	 * Removes boxes
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function delete_cronjobs()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		if (is_array($this->cronjobs))
    -		{
    -			$sql = "DELETE FROM ".MAIN_DB_PREFIX."cronjob";
    -			$sql.= " WHERE module_name = '".$this->db->escape(empty($this->rights_class)?strtolower($this->name):$this->rights_class)."'";
    -			$sql.= " AND entity = ".$conf->entity;
    -			$sql.= " AND test = '1'";		// We delete on lines that are not set with a complete test that is '$conf->module->enabled' so when module is disabled, the cron is also removed.
    -											// For crons declared with a '$conf->module->enabled', there is no need to delete the line, so we don't loose setup if we reenable module.
    -
    -			dol_syslog(get_class($this)."::delete_cronjobs", LOG_DEBUG);
    -			$resql=$this->db->query($sql);
    -			if (! $resql)
    -			{
    -				$this->error=$this->db->lasterror();
    -				$err++;
    -			}
    -		}
    -
    -		return $err;
    -	}
    -
    -	/**
    -	 * Removes tabs
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function delete_tabs()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    -		$sql.= " WHERE ".$this->db->decrypt('name')." like '".$this->db->escape($this->const_name)."_TABS_%'";
    -		$sql.= " AND entity = ".$conf->entity;
    -
    -		dol_syslog(get_class($this)."::delete_tabs", LOG_DEBUG);
    -		if (! $this->db->query($sql))
    -		{
    -			$this->error=$this->db->lasterror();
    -			$err++;
    -		}
    -
    -		return $err;
    -	}
    -
    -	/**
    -	 * Adds tabs
    -	 *
    -	 * @return int  Error count (0 if ok)
    -	 */
    -	function insert_tabs()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		if (! empty($this->tabs))
    -		{
    -			dol_syslog(get_class($this)."::insert_tabs", LOG_DEBUG);
    -
    -			$i=0;
    -			foreach ($this->tabs as $key => $value)
    -			{
    -				if (is_array($value) && count($value) == 0) continue;	// Discard empty arrays
    -
    -				$entity=$conf->entity;
    -				$newvalue = $value;
    -
    -				if (is_array($value))
    -				{
    -					$newvalue = $value['data'];
    -					if (isset($value['entity'])) $entity = $value['entity'];
    -				}
    -
    -				if ($newvalue)
    -				{
    -					$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (";
    -					$sql.= "name";
    -					$sql.= ", type";
    -					$sql.= ", value";
    -					$sql.= ", note";
    -					$sql.= ", visible";
    -					$sql.= ", entity";
    -					$sql.= ")";
    -					$sql.= " VALUES (";
    -					$sql.= $this->db->encrypt($this->const_name."_TABS_".$i,1);
    -					$sql.= ", 'chaine'";
    -					$sql.= ", ".$this->db->encrypt($newvalue,1);
    -					$sql.= ", null";
    -					$sql.= ", '0'";
    -					$sql.= ", ".$entity;
    -					$sql.= ")";
    -
    -					$resql = $this->db->query($sql);
    -					if (! $resql)
    -					{
    -						dol_syslog($this->db->lasterror(), LOG_ERR);
    -						if ($this->db->lasterrno() != 'DB_ERROR_RECORD_ALREADY_EXISTS')
    -						{
    -							$this->error = $this->db->lasterror();
    -							$this->errors[] = $this->db->lasterror();
    -							$err++;
    -							break;
    -						}
    -					}
    -				}
    -				$i++;
    -			}
    -		}
    -		return $err;
    -	}
    -
    -	/**
    -	 * Adds constants
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function insert_const()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		if (empty($this->const)) return 0;
    -
    -		dol_syslog(get_class($this)."::insert_const", LOG_DEBUG);
    -
    -		foreach ($this->const as $key => $value)
    -		{
    -			$name      = $this->const[$key][0];
    -			$type      = $this->const[$key][1];
    -			$val       = $this->const[$key][2];
    -			$note      = isset($this->const[$key][3])?$this->const[$key][3]:'';
    -			$visible   = isset($this->const[$key][4])?$this->const[$key][4]:0;
    -			$entity    = (! empty($this->const[$key][5]) && $this->const[$key][5]!='current')?0:$conf->entity;
    -
    -			// Clean
    -			if (empty($visible)) $visible='0';
    -			if (empty($val) && $val != '0') $val='';
    -
    -			$sql = "SELECT count(*)";
    -			$sql.= " FROM ".MAIN_DB_PREFIX."const";
    -			$sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($name)."'";
    -			$sql.= " AND entity = ".$entity;
    -
    -			$result=$this->db->query($sql);
    -			if ($result)
    -			{
    -				$row = $this->db->fetch_row($result);
    -
    -				if ($row[0] == 0)   // If not found
    -				{
    -					$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,note,visible,entity)";
    -					$sql.= " VALUES (";
    -					$sql.= $this->db->encrypt($name,1);
    -					$sql.= ",'".$type."'";
    -					$sql.= ",".(($val != '')?$this->db->encrypt($val,1):"''");
    -					$sql.= ",".($note?"'".$this->db->escape($note)."'":"null");
    -					$sql.= ",'".$visible."'";
    -					$sql.= ",".$entity;
    -					$sql.= ")";
    -
    -					if (! $this->db->query($sql) )
    -					{
    -						$err++;
    -					}
    -				}
    -				else
    -				{
    -					dol_syslog(get_class($this)."::insert_const constant '".$name."' already exists", LOG_WARNING);
    -				}
    -			}
    -			else
    -			{
    -				$err++;
    -			}
    -		}
    -
    -		return $err;
    -	}
    -
    -	/**
    -	 * Removes constants tagged 'deleteonunactive'
    -	 *
    -	 * @return  int <0 if KO, 0 if OK
    -	 */
    -	function delete_const()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		if (empty($this->const)) return 0;
    -
    -		foreach ($this->const as $key => $value)
    -		{
    -			$name      = $this->const[$key][0];
    -			$deleteonunactive = (! empty($this->const[$key][6]))?1:0;
    -
    -			if ($deleteonunactive)
    -			{
    -				$sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    -				$sql.= " WHERE ".$this->db->decrypt('name')." = '".$name."'";
    -				$sql.= " AND entity in (0, ".$conf->entity.")";
    -				dol_syslog(get_class($this)."::delete_const", LOG_DEBUG);
    -				if (! $this->db->query($sql))
    -				{
    -					$this->error=$this->db->lasterror();
    -					$err++;
    -				}
    -			}
    -		}
    -
    -		return $err;
    -	}
    -
    -	/**
    -	 * Adds access rights
    -	 *
    -	 * @param   int $reinitadminperms   If 1, we also grant them to all admin users
    -	 * @param   int $force_entity       Force current entity
    -	 * @param   int	$notrigger			1=Does not execute triggers, 0= execute triggers
    -	 * @return  int                     Error count (0 if OK)
    -	 */
    -	function insert_permissions($reinitadminperms=0, $force_entity=null, $notrigger=0)
    -	{
    -		global $conf,$user;
    -
    -		$err=0;
    -		$entity=(! empty($force_entity) ? $force_entity : $conf->entity);
    -
    -		dol_syslog(get_class($this)."::insert_permissions", LOG_DEBUG);
    -
    -		// Test if module is activated
    -		$sql_del = "SELECT ".$this->db->decrypt('value')." as value";
    -		$sql_del.= " FROM ".MAIN_DB_PREFIX."const";
    -		$sql_del.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    -		$sql_del.= " AND entity IN (0,".$entity.")";
    -
    -		$resql=$this->db->query($sql_del);
    -
    -		if ($resql)
    -		{
    -			$obj=$this->db->fetch_object($resql);
    -			if ($obj !== null && ! empty($obj->value) && ! empty($this->rights))
    -			{
    -				// If the module is active
    -				foreach ($this->rights as $key => $value)
    -				{
    -					$r_id       = $this->rights[$key][0];
    -					$r_desc     = $this->rights[$key][1];
    -					$r_type     = isset($this->rights[$key][2])?$this->rights[$key][2]:'';
    -					$r_def      = $this->rights[$key][3];
    -					$r_perms    = $this->rights[$key][4];
    -					$r_subperms = isset($this->rights[$key][5])?$this->rights[$key][5]:'';
    -					$r_modul    = empty($this->rights_class)?strtolower($this->name):$this->rights_class;
    -
    -					if (empty($r_type)) $r_type='w';
    -
    -					// Search if perm already present
    -					$sql = "SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."rights_def";
    -					$sql.= " WHERE id = ".$r_id." AND entity = ".$entity;
    -
    -					$resqlselect=$this->db->query($sql);
    -					if ($resqlselect)
    -					{
    -						$objcount = $this->db->fetch_object($resqlselect);
    -						if ($objcount && $objcount->nb == 0)
    -						{
    -							if (dol_strlen($r_perms) )
    -							{
    -								if (dol_strlen($r_subperms) )
    -								{
    -									$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def";
    -									$sql.= " (id, entity, libelle, module, type, bydefault, perms, subperms)";
    -									$sql.= " VALUES ";
    -									$sql.= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."','".$r_subperms."')";
    -								}
    -								else
    -								{
    -									$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def";
    -									$sql.= " (id, entity, libelle, module, type, bydefault, perms)";
    -									$sql.= " VALUES ";
    -									$sql.= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."')";
    -								}
    -							}
    -							else
    -							{
    -								$sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ";
    -								$sql .= " (id, entity, libelle, module, type, bydefault)";
    -								$sql .= " VALUES ";
    -								$sql .= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.")";
    -							}
    -
    -							$resqlinsert=$this->db->query($sql,1);
    -
    -							if (! $resqlinsert)
    -							{
    -								if ($this->db->errno() != "DB_ERROR_RECORD_ALREADY_EXISTS")
    -								{
    -									$this->error=$this->db->lasterror();
    -									$err++;
    -									break;
    -								}
    -								else dol_syslog(get_class($this)."::insert_permissions record already exists", LOG_INFO);
    -
    -							}
    -
    -							$this->db->free($resqlinsert);
    -						}
    -
    -						$this->db->free($resqlselect);
    -					}
    -
    -					// If we want to init permissions on admin users
    -					if ($reinitadminperms)
    -					{
    -						if (! class_exists('User')) {
    -							require_once DOL_DOCUMENT_ROOT . '/user/class/user.class.php';
    -						}
    -						$sql="SELECT rowid FROM ".MAIN_DB_PREFIX."user WHERE admin = 1";
    -						dol_syslog(get_class($this)."::insert_permissions Search all admin users", LOG_DEBUG);
    -						$resqlseladmin=$this->db->query($sql,1);
    -						if ($resqlseladmin)
    -						{
    -							$num=$this->db->num_rows($resqlseladmin);
    -							$i=0;
    -							while ($i < $num)
    -							{
    -								$obj2=$this->db->fetch_object($resqlseladmin);
    -								dol_syslog(get_class($this)."::insert_permissions Add permission to user id=".$obj2->rowid);
    -
    -								$tmpuser=new User($this->db);
    -								$result = $tmpuser->fetch($obj2->rowid);
    -								if ($result > 0) {
    -									$tmpuser->addrights($r_id, '', '', 0, 1);
    -								}
    -								else
    -								{
    -									dol_syslog(get_class($this)."::insert_permissions Failed to add the permission to user because fetch return an error", LOG_ERR);
    -								}
    -								$i++;
    -							}
    -						}
    -						else
    -						{
    -							dol_print_error($this->db);
    -						}
    -					}
    -				}
    -
    -				if ($reinitadminperms && ! empty($user->admin))  // Reload permission for current user if defined
    -				{
    -					// We reload permissions
    -					$user->clearrights();
    -					$user->getrights();
    -				}
    -
    -			}
    -			$this->db->free($resql);
    -		}
    -		else
    -		{
    -			$this->error=$this->db->lasterror();
    -			$err++;
    -		}
    -
    -		return $err;
    -	}
    -
    -
    -	/**
    -	 * Removes access rights
    -	 *
    -	 * @return  int                     Error count (0 if OK)
    -	 */
    -	function delete_permissions()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."rights_def";
    -		$sql.= " WHERE module = '".$this->db->escape(empty($this->rights_class)?strtolower($this->name):$this->rights_class)."'";
    -		$sql.= " AND entity = ".$conf->entity;
    -		dol_syslog(get_class($this)."::delete_permissions", LOG_DEBUG);
    -		if (! $this->db->query($sql))
    -		{
    -			$this->error=$this->db->lasterror();
    -			$err++;
    -		}
    -
    -		return $err;
    -	}
    -
    -
    -	/**
    -	 * Adds menu entries
    -	 *
    -	 * @return  int     Error count (0 if OK)
    -	 */
    -	function insert_menus()
    -	{
    -		global $user;
    -
    -		if (! is_array($this->menu) || empty($this->menu)) return 0;
    -
    -		require_once DOL_DOCUMENT_ROOT . '/core/class/menubase.class.php';
    -
    -		dol_syslog(get_class($this)."::insert_menus", LOG_DEBUG);
    -
    -		$err=0;
    -
    -		$this->db->begin();
    -
    -		foreach ($this->menu as $key => $value)
    -		{
    -			$menu = new Menubase($this->db);
    -			$menu->menu_handler='all';
    -
    -			//$menu->module=strtolower($this->name);	TODO When right_class will be same than module name
    -			$menu->module=empty($this->rights_class)?strtolower($this->name):$this->rights_class;
    -
    -			if (! $this->menu[$key]['fk_menu'])
    -			{
    -				$menu->fk_menu=0;
    -			}
    -			else
    -			{
    -				$foundparent=0;
    -				$fk_parent=$this->menu[$key]['fk_menu'];
    -				if (preg_match('/^r=/',$fk_parent))	// old deprecated method
    -				{
    -					$fk_parent=str_replace('r=','',$fk_parent);
    -					if (isset($this->menu[$fk_parent]['rowid']))
    -					{
    -						$menu->fk_menu=$this->menu[$fk_parent]['rowid'];
    -						$foundparent=1;
    -					}
    -				}
    -				elseif (preg_match('/^fk_mainmenu=([a-zA-Z0-9_]+),fk_leftmenu=([a-zA-Z0-9_]+)$/',$fk_parent,$reg))
    -				{
    -					$menu->fk_menu=-1;
    -					$menu->fk_mainmenu=$reg[1];
    -					$menu->fk_leftmenu=$reg[2];
    -					$foundparent=1;
    -				}
    -				elseif (preg_match('/^fk_mainmenu=([a-zA-Z0-9_]+)$/',$fk_parent,$reg))
    -				{
    -					$menu->fk_menu=-1;
    -					$menu->fk_mainmenu=$reg[1];
    -					$menu->fk_leftmenu='';
    -					$foundparent=1;
    -				}
    -				if (! $foundparent)
    -				{
    -					$this->error="ErrorBadDefinitionOfMenuArrayInModuleDescriptor";
    -					dol_syslog(get_class($this)."::insert_menus ".$this->error." ".$this->menu[$key]['fk_menu'], LOG_ERR);
    -					$err++;
    -				}
    -			}
    -			$menu->type=$this->menu[$key]['type'];
    -			$menu->mainmenu=isset($this->menu[$key]['mainmenu'])?$this->menu[$key]['mainmenu']:(isset($menu->fk_mainmenu)?$menu->fk_mainmenu:'');
    -			$menu->leftmenu=isset($this->menu[$key]['leftmenu'])?$this->menu[$key]['leftmenu']:'';
    -			$menu->titre=$this->menu[$key]['titre'];
    -			$menu->url=$this->menu[$key]['url'];
    -			$menu->langs=$this->menu[$key]['langs'];
    -			$menu->position=$this->menu[$key]['position'];
    -			$menu->perms=$this->menu[$key]['perms'];
    -			$menu->target=isset($this->menu[$key]['target'])?$this->menu[$key]['target']:'';
    -			$menu->user=$this->menu[$key]['user'];
    -			$menu->enabled=isset($this->menu[$key]['enabled'])?$this->menu[$key]['enabled']:0;
    -			$menu->position=$this->menu[$key]['position'];
    -
    -			if (! $err)
    -			{
    -				$result=$menu->create($user);	// Save menu entry into table llx_menu
    -				if ($result > 0)
    -				{
    -					$this->menu[$key]['rowid']=$result;
    -				}
    -				else
    -				{
    -					$this->error=$menu->error;
    -					dol_syslog(get_class($this).'::insert_menus result='.$result." ".$this->error, LOG_ERR);
    -					$err++;
    -					break;
    -				}
    -			}
    -		}
    -
    -		if (! $err)
    -		{
    -			$this->db->commit();
    -		}
    -		else
    -		{
    -			dol_syslog(get_class($this)."::insert_menus ".$this->error, LOG_ERR);
    -			$this->db->rollback();
    -		}
    -
    -		return $err;
    -	}
    -
    -
    -	/**
    -	 * Removes menu entries
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function delete_menus()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		//$module=strtolower($this->name);		TODO When right_class will be same than module name
    -		$module=empty($this->rights_class)?strtolower($this->name):$this->rights_class;
    -
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."menu";
    -		$sql.= " WHERE module = '".$this->db->escape($module)."'";
    -		$sql.= " AND entity = ".$conf->entity;
    -
    -		dol_syslog(get_class($this)."::delete_menus", LOG_DEBUG);
    -		$resql=$this->db->query($sql);
    -		if (! $resql)
    -		{
    -			$this->error=$this->db->lasterror();
    -			$err++;
    -		}
    -
    -		return $err;
    -	}
    -
    -	/**
    -	 * Creates directories
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function create_dirs()
    -	{
    -		global $langs, $conf;
    -
    -		$err=0;
    -
    -		if (isset($this->dirs) && is_array($this->dirs))
    -		{
    -			foreach ($this->dirs as $key => $value)
    -			{
    -				$addtodatabase=0;
    -
    -				if (! is_array($value)) $dir=$value;    // Default simple mode
    -				else {
    -					$constname = $this->const_name."_DIR_";
    -					$dir       = $this->dirs[$key][1];
    -					$addtodatabase = empty($this->dirs[$key][2])?'':$this->dirs[$key][2]; // Create constante in llx_const
    -					$subname   = empty($this->dirs[$key][3])?'':strtoupper($this->dirs[$key][3]); // Add submodule name (ex: $conf->module->submodule->dir_output)
    -					$forcename = empty($this->dirs[$key][4])?'':strtoupper($this->dirs[$key][4]); // Change the module name if different
    -
    -					if (! empty($forcename)) $constname = 'MAIN_MODULE_'.$forcename."_DIR_";
    -					if (! empty($subname))   $constname = $constname.$subname."_";
    -
    -					$name = $constname.strtoupper($this->dirs[$key][0]);
    -				}
    -
    -				// Define directory full path ($dir must start with "/")
    -				if (empty($conf->global->MAIN_MODULE_MULTICOMPANY) || $conf->entity == 1) $fulldir = DOL_DATA_ROOT.$dir;
    -				else $fulldir = DOL_DATA_ROOT."/".$conf->entity.$dir;
    -				// Create dir if it does not exists
    -				if (! empty($fulldir) && ! file_exists($fulldir))
    -				{
    -					if (dol_mkdir($fulldir, DOL_DATA_ROOT) < 0)
    -					{
    -						$this->error = $langs->trans("ErrorCanNotCreateDir",$fulldir);
    -						dol_syslog(get_class($this)."::_init ".$this->error, LOG_ERR);
    -						$err++;
    -					}
    -				}
    -
    -				// Define the constant in database if requested (not the default mode)
    -				if (! empty($addtodatabase))
    -				{
    -					$result = $this->insert_dirs($name, $dir);
    -					if ($result) $err++;
    -				}
    -			}
    -		}
    -
    -		return $err;
    -	}
    -
    -
    -	/**
    -	 * Adds directories definitions
    -	 *
    -	 * @param   string  $name   Name
    -	 * @param   string  $dir    Directory
    -	 *
    -	 * @return  int             Error count (0 if OK)
    -	 */
    -	function insert_dirs($name,$dir)
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		$sql = "SELECT count(*)";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."const";
    -		$sql.= " WHERE ".$this->db->decrypt('name')." = '".$name."'";
    -		$sql.= " AND entity = ".$conf->entity;
    -
    -		dol_syslog(get_class($this)."::insert_dirs", LOG_DEBUG);
    -		$result=$this->db->query($sql);
    -		if ($result)
    -		{
    -			$row = $this->db->fetch_row($result);
    -
    -			if ($row[0] == 0)
    -			{
    -				$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,note,visible,entity)";
    -				$sql.= " VALUES (".$this->db->encrypt($name,1).",'chaine',".$this->db->encrypt($dir,1).",'Directory for module ".$this->name."','0',".$conf->entity.")";
    -
    -				dol_syslog(get_class($this)."::insert_dirs", LOG_DEBUG);
    -				$this->db->query($sql);
    -			}
    -		}
    -		else
    -		{
    -			$this->error=$this->db->lasterror();
    -			$err++;
    -		}
    -
    -		return $err;
    -	}
    -
    -
    -	/**
    -	 * Removes directories
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function delete_dirs()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    -		$sql.= " WHERE ".$this->db->decrypt('name')." LIKE '".$this->db->escape($this->const_name)."_DIR_%'";
    -		$sql.= " AND entity = ".$conf->entity;
    -
    -		dol_syslog(get_class($this)."::delete_dirs", LOG_DEBUG);
    -		if (! $this->db->query($sql))
    -		{
    -			$this->error=$this->db->lasterror();
    -			$err++;
    -		}
    -
    -		return $err;
    -	}
    -
    -	/**
    -	 * Adds generic parts
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function insert_module_parts()
    -	{
    -		global $conf;
    -
    -		$error=0;
    -
    -		if (is_array($this->module_parts) && ! empty($this->module_parts))
    -		{
    -			foreach($this->module_parts as $key => $value)
    -			{
    -				if (is_array($value) && count($value) == 0) continue;	// Discard empty arrays
    -
    -				$entity=$conf->entity; // Reset the current entity
    -				$newvalue = $value;
    -
    -				// Serialize array parameters
    -				if (is_array($value))
    -				{
    -					// Can defined other parameters
    -					// Example when $key='hooks', then $value is an array('data'=>array('hookcontext1','hookcontext2'), 'entity'=>X)
    -					if (isset($value['data']) && is_array($value['data']))
    -					{
    -						$newvalue = json_encode($value['data']);
    -						if (isset($value['entity'])) $entity = $value['entity'];
    -					}
    -					else if (isset($value['data']) && !is_array($value['data']))
    -					{
    -						$newvalue = $value['data'];
    -						if (isset($value['entity'])) $entity = $value['entity'];
    -					}
    -					else	// when hook is declared with syntax 'hook'=>array('hookcontext1','hookcontext2',...)
    -					{
    -						$newvalue = json_encode($value);
    -					}
    -				}
    -
    -				$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (";
    -				$sql.= "name";
    -				$sql.= ", type";
    -				$sql.= ", value";
    -				$sql.= ", note";
    -				$sql.= ", visible";
    -				$sql.= ", entity";
    -				$sql.= ")";
    -				$sql.= " VALUES (";
    -				$sql.= $this->db->encrypt($this->const_name."_".strtoupper($key), 1);
    -				$sql.= ", 'chaine'";
    -				$sql.= ", ".$this->db->encrypt($newvalue, 1);
    -				$sql.= ", null";
    -				$sql.= ", '0'";
    -				$sql.= ", ".$entity;
    -				$sql.= ")";
    -
    -				dol_syslog(get_class($this)."::insert_module_parts for key=".$this->const_name."_".strtoupper($key), LOG_DEBUG);
    -
    -				$resql=$this->db->query($sql,1);
    -				if (! $resql)
    -				{
    -					if ($this->db->lasterrno() != 'DB_ERROR_RECORD_ALREADY_EXISTS')
    -					{
    -						$error++;
    -						$this->error=$this->db->lasterror();
    -					}
    -					else
    -					{
    -						dol_syslog(get_class($this)."::insert_module_parts for ".$this->const_name."_".strtoupper($key)." Record already exists.", LOG_WARNING);
    -					}
    -				}
    -			}
    -		}
    -		return $error;
    -	}
    -
    -	/**
    -	 * Removes generic parts
    -	 *
    -	 * @return  int Error count (0 if OK)
    -	 */
    -	function delete_module_parts()
    -	{
    -		global $conf;
    -
    -		$err=0;
    -		$entity=$conf->entity;
    -
    -		if (is_array($this->module_parts) && ! empty($this->module_parts))
    -		{
    -			foreach($this->module_parts as $key => $value)
    -			{
    -				// If entity is defined
    -				if (is_array($value) && isset($value['entity'])) $entity = $value['entity'];
    -
    -				$sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    -				$sql.= " WHERE ".$this->db->decrypt('name')." LIKE '".$this->db->escape($this->const_name)."_".strtoupper($key)."'";
    -				$sql.= " AND entity = ".$entity;
    -
    -				dol_syslog(get_class($this)."::delete_const_".$key."", LOG_DEBUG);
    -				if (! $this->db->query($sql))
    -				{
    -					$this->error=$this->db->lasterror();
    -					$err++;
    -				}
    -			}
    -		}
    -		return $err;
    -	}
    -
    -	/**
    -	 * Function called when module is enabled.
    -	 * The init function adds tabs, constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
    -	 * It also creates data directories
    -	 *
    -	 * @param string $options   Options when enabling module ('', 'newboxdefonly', 'noboxes')
    -	 *                          'noboxes' = Do not insert boxes
    -	 *                          'newboxdefonly' = For boxes, insert def of boxes only and not boxes activation
    -	 * @return int				1 if OK, 0 if KO
    -	 */
    -	public function init($options = '')
    -	{
    -		return $this->_init(array(), $options);
    -	}
    -
    -	/**
    -	 * Function called when module is disabled.
    -	 * The remove function removes tabs, constants, boxes, permissions and menus from Dolibarr database.
    -	 * Data directories are not deleted
    -	 *
    -	 * @param      string	$options    Options when enabling module ('', 'noboxes')
    -	 * @return     int             		1 if OK, 0 if KO
    -	 */
    -	public function remove($options = '')
    -	{
    -		return $this->_remove(array(), $options);
    -	}
    +    /**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
    +
    +    /**
    +     * @var int Module unique ID
    +     * @see https://wiki.dolibarr.org/index.php/List_of_modules_id
    +     */
    +    public $numero;
    +
    +    /**
    +     * @var   string Publisher name
    +     * @since 4.0.0
    +     */
    +    public $editor_name;
    +
    +    /**
    +     * @var   string URL of module at publisher site
    +     * @since 4.0.0
    +     */
    +    public $editor_url;
    +
    +    /**
    +     * @var string Family
    +     * @see familyinfo
    +     *
    +     * Native values: 'crm', 'financial', 'hr', 'projects', 'products', 'ecm', 'technic', 'other'.
    +     * Use familyinfo to declare a custom value.
    +     */
    +    public $family;
    +
    +    /**
    +     * @var array Custom family informations
    +     * @see family
    +     *
    +     * e.g.:
    +     * array(
    +     *     'myownfamily' => array(
    +     *         'position' => '001',
    +     *         'label' => $langs->trans("MyOwnFamily")
    +     *     )
    +     * );
    +     */
    +    public $familyinfo;
    +
    +    /**
    +     * @var string    Module position on 2 digits
    +     */
    +    public $module_position='50';
    +
    +    /**
    +     * @var string Module name
    +     *
    +     * Only used if Module[ID]Name translation string is not found.
    +     *
    +     * You can use the following code to automatically derive it from your module's class name:
    +     * preg_replace('/^mod/i', '', get_class($this))
    +     */
    +    public $name;
    +
    +    /**
    +     * @var string[] Paths to create when module is activated
    +     *
    +     * e.g.: array('/mymodule/temp')
    +     */
    +    public $dirs = array();
    +
    +    /**
    +     * @var array Module boxes
    +     */
    +    public $boxes = array();
    +
    +    /**
    +     * @var array Module constants
    +     */
    +    public $const = array();
    +
    +    /**
    +     * @var array Module cron jobs entries
    +     */
    +    public $cronjobs = array();
    +
    +    /**
    +     * @var array Module access rights
    +     */
    +    public $rights;
    +
    +    /**
    +     * @var string Module access rights family
    +     */
    +    public $rights_class;
    +
    +    /**
    +     * @var array Module menu entries
    +     */
    +    public $menu = array();
    +
    +    /**
    +     * @var array Module parts
    +     *  array(
    +     *      // Set this to 1 if module has its own trigger directory (/mymodule/core/triggers)
    +     *      'triggers' => 0,
    +     *      // Set this to 1 if module has its own login method directory (/mymodule/core/login)
    +     *      'login' => 0,
    +     *      // Set this to 1 if module has its own substitution function file (/mymodule/core/substitutions)
    +     *      'substitutions' => 0,
    +     *      // Set this to 1 if module has its own menus handler directory (/mymodule/core/menus)
    +     *      'menus' => 0,
    +     *      // Set this to 1 if module has its own theme directory (/mymodule/theme)
    +     *      'theme' => 0,
    +     *      // Set this to 1 if module overwrite template dir (/mymodule/core/tpl)
    +     *      'tpl' => 0,
    +     *      // Set this to 1 if module has its own barcode directory (/mymodule/core/modules/barcode)
    +     *      'barcode' => 0,
    +     *      // Set this to 1 if module has its own models directory (/mymodule/core/modules/xxx)
    +     *      'models' => 0,
    +     *      // Set this to relative path of css file if module has its own css file
    +     *      'css' => '/mymodule/css/mymodule.css.php',
    +     *      // Set this to relative path of js file if module must load a js on all pages
    +     *      'js' => '/mymodule/js/mymodule.js',
    +     *      // Set here all hooks context managed by module
    +     *      'hooks' => array('hookcontext1','hookcontext2')
    +     *  )
    +     */
    +    public $module_parts = array();
    +
    +    /**
    +     * @var        string Module documents ?
    +     * @deprecated Seems unused anywhere
    +     */
    +    public $docs;
    +
    +    /**
    +     * @var        string ?
    +     * @deprecated Seems unused anywhere
    +     */
    +    public $dbversion = "-";
    +
    +    /**
    +     * @var string Error message
    +     */
    +    public $error;
    +
    +    /**
    +     * @var string Module version
    +     * @see http://semver.org
    +     *
    +     * The following keywords can also be used:
    +     * 'development'
    +     * 'experimental'
    +     * 'dolibarr': only for core modules that share its version
    +     * 'dolibarr_deprecated': only for deprecated core modules
    +     */
    +    public $version;
    +
    +    /**
    +     * @var string Module description (short text)
    +     *
    +     * Only used if Module[ID]Desc translation string is not found.
    +     */
    +    public $description;
    +
    +    /**
    +     * @var   string Module description (long text)
    +     * @since 4.0.0
    +     *
    +     * HTML content supported.
    +     */
    +    public $descriptionlong;
    +
    +
    +    // For exports
    +
    +    /**
    +     * @var string Module export code
    +     */
    +    public $export_code;
    +
    +    /**
    +     * @var string Module export label
    +     */
    +    public $export_label;
    +
    +    public $export_permission;
    +    public $export_fields_array;
    +    public $export_TypeFields_array;
    +    public $export_entities_array;
    +    public $export_special_array;           // special or computed field
    +    public $export_dependencies_array;
    +    public $export_sql_start;
    +    public $export_sql_end;
    +    public $export_sql_order;
    +
    +
    +    // For import
    +
    +    /**
    +     * @var string Module import code
    +     */
    +    public $import_code;
    +
    +    /**
    +     * @var string Module import label
    +     */
    +    public $import_label;
    +
    +
    +    /**
    +     * @var string Module constant name
    +     */
    +    public $const_name;
    +
    +    /**
    +     * @var bool Module can't be disabled
    +     */
    +    public $always_enabled;
    +
    +    /**
    +     * @var int Module is enabled globally (Multicompany support)
    +     */
    +    public $core_enabled;
    +
    +    /**
    +     * @var        string Relative path to module style sheet
    +     * @deprecated
    +     * @see        module_parts
    +     */
    +    public $style_sheet = '';
    +
    +    /**
    +     * @var        0|1|2|3 Where to display the module in setup page
    +     * @deprecated @since 4.0.0
    +     * @see        family
    +     * @see        familyinfo
    +     *
    +     * 0: common
    +     * 1: interface
    +     * 2: others
    +     * 3: very specific
    +     */
    +    public $special;
    +
    +    /**
    +     * @var string Name of image file used for this module
    +     *
    +     * If file is in theme/yourtheme/img directory under name object_pictoname.png use 'pictoname'
    +     * If file is in module/img directory under name object_pictoname.png use 'pictoname@module'
    +     */
    +    public $picto;
    +
    +    /**
    +     * @var string[] List of config pages
    +     *
    +     * Name of php pages stored into module/admin directory, used to setup module.
    +     * e.g.: "admin.php@module"
    +     */
    +    public $config_page_url;
    +
    +
    +    /**
    +     * @var string[] List of module class names that must be enabled if this module is enabled.
    +     *
    +     * e.g.: array('modAnotherModule', 'FR'=>'modYetAnotherModule')
    +     */
    +    public $depends;
    +
    +    /**
    +     * @var int[] List of module ids to disable if this one is disabled.
    +     */
    +    public $requiredby;
    +
    +    /**
    +     * @var string[] List of module class names as string this module is in conflict with.
    +     * @see depends
    +     */
    +    public $conflictwith;
    +
    +    /**
    +     * @var string[] Module language files
    +     */
    +    public $langfiles;
    +
    +    /**
    +     * @var array<string,string> Array of warnings to show when we activate the module
    +     *
    +     * array('always'='text') or array('FR'='text')
    +     */
    +    public $warnings_activation;
    +
    +    /**
    +     * @var array<string,string> Array of warnings to show when we activate an external module
    +     *
    +     * array('always'='text') or array('FR'='text')
    +     */
    +    public $warnings_activation_ext;
    +
    +
    +    /**
    +     * @var array() Minimum version of PHP required by module.
    +     * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +    public $phpmin;
    +
    +    /**
    +     * @var array Minimum version of Dolibarr required by module.
    +     * e.g.: Dolibarr ≥ 3.6 = array(3, 6)
    +     */
    +    public $need_dolibarr_version;
    +
    +    /**
    +     * @var bool Whether to hide the module.
    +     */
    +    public $hidden = false;
    +
    +
    +
    +
    +
    +    /**
    +     * Constructor. Define names, constants, directories, boxes, permissions
    +     *
    +     * @param DoliDB $db Database handler
    +     */
    +    public function __construct($db)
    +    {
    +        $this->db = $db;
    +    }
    +    // We should but can't set this as abstract because this will make dolibarr hang
    +    // after migration due to old module not implementing. We must wait PHP is able to make
    +    // a try catch on Fatal error to manage this correctly.
    +    // We need constructor into function unActivateModule into admin.lib.php
    +
    +
    +    /**
    +     * Enables a module.
    +     * Inserts all informations into database
    +     *
    +     * @param array  $array_sql SQL requests to be executed when enabling module
    +     * @param string $options   String with options when disabling module:
    +     *                          - 'noboxes' = Do not insert boxes -
    +     *                          'newboxdefonly' = For boxes, insert def of
    +     *                          boxes only and not boxes activation
    +     *
    +     * @return int                         1 if OK, 0 if KO
    +     */
    +    function _init($array_sql, $options='')
    +    {
    +        global $conf;
    +        $err=0;
    +
    +        $this->db->begin();
    +
    +        // Insert activation module constant
    +        if (! $err) { $err+=$this->_active();
    +        }
    +
    +        // Insert new pages for tabs (into llx_const)
    +        if (! $err) { $err+=$this->insert_tabs();
    +        }
    +
    +        // Insert activation of module's parts
    +        if (! $err) { $err+=$this->insert_module_parts();
    +        }
    +
    +        // Insert constant defined by modules (into llx_const)
    +        if (! $err && ! preg_match('/newboxdefonly/', $options)) { $err+=$this->insert_const();    // Test on newboxdefonly to avoid to erase value during upgrade
    +        }
    +
    +        // Insert boxes def into llx_boxes_def and boxes setup (into llx_boxes)
    +        if (! $err && ! preg_match('/noboxes/', $options)) { $err+=$this->insert_boxes($options);
    +        }
    +
    +        // Insert cron job entries (entry in llx_cronjobs)
    +        if (! $err) { $err+=$this->insert_cronjobs();
    +        }
    +
    +        // Insert permission definitions of module into llx_rights_def. If user is admin, grant this permission to user.
    +        if (! $err) { $err+=$this->insert_permissions(1, null, 1);
    +        }
    +
    +        // Insert specific menus entries into database
    +        if (! $err) { $err+=$this->insert_menus();
    +        }
    +
    +        // Create module's directories
    +        if (! $err) { $err+=$this->create_dirs();
    +        }
    +
    +        // Execute addons requests
    +        $num=count($array_sql);
    +        for ($i = 0; $i < $num; $i++)
    +        {
    +            if (! $err) {
    +                $val=$array_sql[$i];
    +                $sql=$val;
    +                $ignoreerror=0;
    +                if (is_array($val)) {
    +                    $sql=$val['sql'];
    +                    $ignoreerror=$val['ignoreerror'];
    +                }
    +                // Add current entity id
    +                $sql=str_replace('__ENTITY__', $conf->entity, $sql);
    +
    +                dol_syslog(get_class($this)."::_init ignoreerror=".$ignoreerror."", LOG_DEBUG);
    +                $result=$this->db->query($sql, $ignoreerror);
    +                if (! $result) {
    +                    if (! $ignoreerror) {
    +                         $this->error=$this->db->lasterror();
    +                         $err++;
    +                    }
    +                    else
    +                    {
    +                         dol_syslog(get_class($this)."::_init Warning ".$this->db->lasterror(), LOG_WARNING);
    +                    }
    +                }
    +            }
    +        }
    +
    +        // Return code
    +        if (! $err) {
    +            $this->db->commit();
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->db->rollback();
    +            return 0;
    +        }
    +    }
    +
    +    /**
    +     * Disable function. Deletes the module constants and boxes from the database.
    +     *
    +     * @param string[] $array_sql SQL requests to be executed when module is disabled
    +     * @param string   $options   Options when disabling module:
    +     *
    +     * @return int                     1 if OK, 0 if KO
    +     */
    +    function _remove($array_sql, $options='')
    +    {
    +        $err=0;
    +
    +        $this->db->begin();
    +
    +        // Remove activation module line (constant MAIN_MODULE_MYMODULE in llx_const)
    +        if (! $err) { $err+=$this->_unactive();
    +        }
    +
    +        // Remove activation of module's new tabs (MAIN_MODULE_MYMODULE_TABS_XXX in llx_const)
    +        if (! $err) { $err+=$this->delete_tabs();
    +        }
    +
    +        // Remove activation of module's parts (MAIN_MODULE_MYMODULE_XXX in llx_const)
    +        if (! $err) { $err+=$this->delete_module_parts();
    +        }
    +
    +        // Remove constants defined by modules
    +        if (! $err) { $err+=$this->delete_const();
    +        }
    +
    +        // Remove list of module's available boxes (entry in llx_boxes)
    +        if (! $err && ! preg_match('/(newboxdefonly|noboxes)/', $options)) { $err+=$this->delete_boxes();    // We don't have to delete if option ask to keep boxes safe or ask to add new box def only
    +        }
    +
    +        // Remove list of module's cron job entries (entry in llx_cronjobs)
    +        if (! $err) { $err+=$this->delete_cronjobs();
    +        }
    +
    +        // Remove module's permissions from list of available permissions (entries in llx_rights_def)
    +        if (! $err) { $err+=$this->delete_permissions();
    +        }
    +
    +        // Remove module's menus (entries in llx_menu)
    +        if (! $err) { $err+=$this->delete_menus();
    +        }
    +
    +        // Remove module's directories
    +        if (! $err) { $err+=$this->delete_dirs();
    +        }
    +
    +        // Run complementary sql requests
    +        $num=count($array_sql);
    +        for ($i = 0; $i < $num; $i++)
    +        {
    +            if (! $err) {
    +                dol_syslog(get_class($this)."::_remove", LOG_DEBUG);
    +                $result=$this->db->query($array_sql[$i]);
    +                if (! $result) {
    +                    $this->error=$this->db->error();
    +                    $err++;
    +                }
    +            }
    +        }
    +
    +        // Return code
    +        if (! $err) {
    +            $this->db->commit();
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->db->rollback();
    +            return 0;
    +        }
    +    }
    +
    +
    +    /**
    +     * Gives the translated module name if translation exists in admin.lang or into language files of module.
    +     * Otherwise return the module key name.
    +     *
    +     * @return string  Translated module name
    +     */
    +    function getName()
    +    {
    +        global $langs;
    +        $langs->load("admin");
    +
    +        if ($langs->transnoentitiesnoconv("Module".$this->numero."Name") != ("Module".$this->numero."Name")) {
    +            // If module name translation exists
    +            return $langs->transnoentitiesnoconv("Module".$this->numero."Name");
    +        }
    +        else
    +        {
    +            // If module name translation using it's unique id does not exist, we try to use its name to find translation
    +            if (is_array($this->langfiles)) {
    +                foreach($this->langfiles as $val)
    +                {
    +                    if ($val) { $langs->load($val);
    +                    }
    +                }
    +            }
    +
    +            if ($langs->trans("Module".$this->name."Name") != ("Module".$this->name."Name")) {
    +                // If module name translation exists
    +                return $langs->transnoentitiesnoconv("Module".$this->name."Name");
    +            }
    +
    +            // Last chance with simple label
    +            return $langs->transnoentitiesnoconv($this->name);
    +        }
    +    }
    +
    +
    +    /**
    +     * Gives the translated module description if translation exists in admin.lang or the default module description
    +     *
    +     * @return string  Translated module description
    +     */
    +    function getDesc()
    +    {
    +        global $langs;
    +        $langs->load("admin");
    +
    +        if ($langs->transnoentitiesnoconv("Module".$this->numero."Desc") != ("Module".$this->numero."Desc")) {
    +            // If module description translation exists
    +            return $langs->transnoentitiesnoconv("Module".$this->numero."Desc");
    +        }
    +        else
    +        {
    +            // If module description translation does not exist using its unique id, we can use its name to find translation
    +            if (is_array($this->langfiles)) {
    +                foreach($this->langfiles as $val)
    +                {
    +                    if ($val) { $langs->load($val);
    +                    }
    +                }
    +            }
    +
    +            if ($langs->transnoentitiesnoconv("Module".$this->name."Desc") != ("Module".$this->name."Desc")) {
    +                // If module name translation exists
    +                return $langs->trans("Module".$this->name."Desc");
    +            }
    +
    +            // Last chance with simple label
    +            return $langs->trans($this->description);
    +        }
    +    }
    +
    +    /**
    +     * Gives the long description of a module. First check README-la_LA.md then README.md
    +     * If no markdown files found, it returns translated value of the key ->descriptionlong.
    +     *
    +     * @return string     Long description of a module from README.md of from property.
    +     */
    +    function getDescLong()
    +    {
    +        global $langs;
    +        $langs->load("admin");
    +
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
    +
    +        $pathoffile = $this->getDescLongReadmeFound();
    +
    +        if ($pathoffile)     // Mostly for external modules
    +        {
    +            $content = file_get_contents($pathoffile);
    +
    +            if ((float) DOL_VERSION >= 6.0) {
    +                @include_once DOL_DOCUMENT_ROOT.'/core/lib/parsemd.lib.php';
    +
    +                $content = dolMd2Html(
    +                    $content, 'parsedown',
    +                    array(
    +                    'doc/'=>dol_buildpath(strtolower($this->name).'/doc/', 1),
    +                    'img/'=>dol_buildpath(strtolower($this->name).'/img/', 1),
    +                    'images/'=>dol_buildpath(strtolower($this->name).'/imgages/', 1),
    +                    )
    +                );
    +            }
    +            else
    +            {
    +                $content = nl2br($content);
    +            }
    +        }
    +        else                // Mostly for internal modules
    +        {
    +            if (! empty($this->descriptionlong)) {
    +                if (is_array($this->langfiles)) {
    +                    foreach($this->langfiles as $val)
    +                    {
    +                        if ($val) { $langs->load($val);
    +                        }
    +                    }
    +                }
    +
    +                $content = $langs->transnoentitiesnoconv($this->descriptionlong);
    +            }
    +        }
    +
    +        return $content;
    +    }
    +
    +    /**
    +     * Return path of file if a README file was found.
    +     *
    +     * @return string      Path of file if a README file was found.
    +     */
    +    function getDescLongReadmeFound()
    +    {
    +        global $langs;
    +
    +        $filefound= false;
    +
    +        // Define path to file README.md.
    +        // First check README-la_LA.md then README-la.md then README.md
    +        $pathoffile = dol_buildpath(strtolower($this->name).'/README-'.$langs->defaultlang.'.md', 0);
    +        if (dol_is_file($pathoffile)) {
    +            $filefound = true;
    +        }
    +        if (! $filefound) {
    +            $tmp=explode('_', $langs->defaultlang);
    +            $pathoffile = dol_buildpath(strtolower($this->name).'/README-'.$tmp[0].'.md', 0);
    +            if (dol_is_file($pathoffile)) {
    +                $filefound = true;
    +            }
    +        }
    +        if (! $filefound) {
    +            $pathoffile = dol_buildpath(strtolower($this->name).'/README.md', 0);
    +            if (dol_is_file($pathoffile)) {
    +                $filefound = true;
    +            }
    +        }
    +
    +        return ($filefound?$pathoffile:'');
    +    }
    +
    +
    +    /**
    +     * Gives the changelog. First check ChangeLog-la_LA.md then ChangeLog.md
    +     *
    +     * @return string  Content of ChangeLog
    +     */
    +    function getChangeLog()
    +    {
    +        global $langs;
    +        $langs->load("admin");
    +
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
    +
    +        $filefound= false;
    +
    +        // Define path to file README.md.
    +        // First check README-la_LA.md then README.md
    +        $pathoffile = dol_buildpath(strtolower($this->name).'/ChangeLog-'.$langs->defaultlang.'.md', 0);
    +        if (dol_is_file($pathoffile)) {
    +            $filefound = true;
    +        }
    +        if (! $filefound) {
    +            $pathoffile = dol_buildpath(strtolower($this->name).'/ChangeLog.md', 0);
    +            if (dol_is_file($pathoffile)) {
    +                $filefound = true;
    +            }
    +        }
    +
    +        if ($filefound)     // Mostly for external modules
    +        {
    +            $content = file_get_contents($pathoffile);
    +
    +            if ((float) DOL_VERSION >= 6.0) {
    +                @include_once DOL_DOCUMENT_ROOT.'/core/lib/parsemd.lib.php';
    +                $content = dolMd2Html($content, 'parsedown', array('doc/'=>dol_buildpath(strtolower($this->name).'/doc/', 1)));
    +            }
    +            else
    +            {
    +                $content = nl2br($content);
    +            }
    +        }
    +
    +        return $content;
    +    }
    +
    +    /**
    +     * Gives the publisher name
    +     *
    +     * @return string  Publisher name
    +     */
    +    function getPublisher()
    +    {
    +        return $this->editor_name;
    +    }
    +
    +    /**
    +     * Gives the publisher url
    +     *
    +     * @return string  Publisher url
    +     */
    +    function getPublisherUrl()
    +    {
    +        return $this->editor_url;
    +    }
    +
    +    /**
    +     * Gives module version (translated if param $translated is on)
    +     * For 'experimental' modules, gives 'experimental' translation
    +     * For 'dolibarr' modules, gives Dolibarr version
    +     *
    +     * @param  int $translated 1=Special version keys are translated, 0=Special version keys are not translated
    +     * @return string                  Module version
    +     */
    +    function getVersion($translated=1)
    +    {
    +        global $langs;
    +        $langs->load("admin");
    +
    +        $ret='';
    +
    +        $newversion=preg_replace('/_deprecated/', '', $this->version);
    +        if ($newversion == 'experimental') { $ret=($translated?$langs->transnoentitiesnoconv("VersionExperimental"):$newversion);
    +        } elseif ($newversion == 'development') { $ret=($translated?$langs->transnoentitiesnoconv("VersionDevelopment"):$newversion);
    +        } elseif ($newversion == 'dolibarr') { $ret=DOL_VERSION;
    +        } elseif ($newversion) { $ret=$newversion;
    +        } else { $ret=($translated?$langs->transnoentitiesnoconv("VersionUnknown"):'unknown');
    +        }
    +
    +        if (preg_match('/_deprecated/', $this->version)) { $ret.=($translated?' ('.$langs->transnoentitiesnoconv("Deprecated").')':$this->version);
    +        }
    +        return $ret;
    +    }
    +
    +
    +    /**
    +     * Tells if module is core or external
    +     *
    +     * @return string  'core', 'external' or 'unknown'
    +     */
    +    function isCoreOrExternalModule()
    +    {
    +        if ($this->version == 'dolibarr' || $this->version == 'dolibarr_deprecated') { return 'core';
    +        }
    +        if (! empty($this->version) && ! in_array($this->version, array('experimental','development'))) { return 'external';
    +        }
    +        if (! empty($this->editor_name) || ! empty($this->editor_url)) { return 'external';
    +        }
    +        if ($this->numero >= 100000) { return 'external';
    +        }
    +        return 'unknown';
    +    }
    +
    +
    +    /**
    +     * Gives module related language files list
    +     *
    +     * @return string[]    Language files list
    +     */
    +    function getLangFilesArray()
    +    {
    +        return $this->langfiles;
    +    }
    +
    +    /**
    +     * Gives translated label of an export dataset
    +     *
    +     * @param int $r Dataset index
    +     *
    +     * @return string       Translated databaset label
    +     */
    +    function getExportDatasetLabel($r)
    +    {
    +        global $langs;
    +
    +        $langstring="ExportDataset_".$this->export_code[$r];
    +        if ($langs->trans($langstring) == $langstring) {
    +            // Translation not found
    +            return $langs->trans($this->export_label[$r]);
    +        }
    +        else
    +        {
    +            // Translation found
    +            return $langs->trans($langstring);
    +        }
    +    }
    +
    +
    +    /**
    +     * Gives translated label of an import dataset
    +     *
    +     * @param int $r Dataset index
    +     *
    +     * @return string      Translated dataset label
    +     */
    +    function getImportDatasetLabel($r)
    +    {
    +        global $langs;
    +
    +        $langstring="ImportDataset_".$this->import_code[$r];
    +        //print "x".$langstring;
    +        if ($langs->trans($langstring) == $langstring) {
    +            // Translation not found
    +            return $langs->transnoentitiesnoconv($this->import_label[$r]);
    +        }
    +        else
    +        {
    +            // Translation found
    +            return $langs->transnoentitiesnoconv($langstring);
    +        }
    +    }
    +
    +
    +    /**
    +     * Gives the last date of activation
    +     *
    +     * @return timestamp       Date of last activation
    +     */
    +    function getLastActivationDate()
    +    {
    +        global $conf;
    +
    +        $sql = "SELECT tms FROM ".MAIN_DB_PREFIX."const";
    +        $sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    +        $sql.= " AND entity IN (0, ".$conf->entity.")";
    +
    +        dol_syslog(get_class($this)."::getLastActiveDate", LOG_DEBUG);
    +        $resql=$this->db->query($sql);
    +        if (! $resql) { $err++;
    +        } else
    +        {
    +            $obj=$this->db->fetch_object($resql);
    +            if ($obj) { return $this->db->jdate($obj->tms);
    +            }
    +        }
    +
    +        return '';
    +    }
    +
    +
    +    /**
    +     * Gives the last author of activation
    +     *
    +     * @return array       Array array('authorid'=>Id of last activation user, 'lastactivationdate'=>Date of last activation)
    +     */
    +    function getLastActivationInfo()
    +    {
    +        global $conf;
    +
    +        $sql = "SELECT tms, note FROM ".MAIN_DB_PREFIX."const";
    +        $sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    +        $sql.= " AND entity IN (0, ".$conf->entity.")";
    +
    +        dol_syslog(get_class($this)."::getLastActiveDate", LOG_DEBUG);
    +        $resql=$this->db->query($sql);
    +        if (! $resql) { $err++;
    +        } else
    +        {
    +            $obj=$this->db->fetch_object($resql);
    +            $tmp=array();
    +            if ($obj->note) {
    +                $tmp=json_decode($obj->note, true);
    +            }
    +            if ($obj) { return array('authorid'=>$tmp['authorid'], 'ip'=>$tmp['ip'], 'lastactivationdate'=>$this->db->jdate($obj->tms));
    +            }
    +        }
    +
    +        return array();
    +    }
    +
    +
    +    /**
    +     * Insert constants for module activation
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function _active()
    +    {
    +        global $conf, $user;
    +
    +        $err = 0;
    +
    +        // Common module
    +        $entity = ((! empty($this->always_enabled) || ! empty($this->core_enabled)) ? 0 : $conf->entity);
    +
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    +        $sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    +        $sql.= " AND entity IN (0, ".$entity.")";
    +
    +        dol_syslog(get_class($this)."::_active delete activation constant", LOG_DEBUG);
    +        $resql=$this->db->query($sql);
    +        if (! $resql) { $err++;
    +        }
    +
    +        $note=json_encode(array('authorid'=>(is_object($user)?$user->id:0), 'ip'=>(empty($_SERVER['REMOTE_ADDR'])?'':$_SERVER['REMOTE_ADDR'])));
    +
    +        $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name, value, visible, entity, note) VALUES";
    +        $sql.= " (".$this->db->encrypt($this->const_name, 1);
    +        $sql.= ", ".$this->db->encrypt('1', 1);
    +        $sql.= ", 0, ".$entity;
    +        $sql.= ", '".$this->db->escape($note)."')";
    +
    +        dol_syslog(get_class($this)."::_active insert activation constant", LOG_DEBUG);
    +        $resql=$this->db->query($sql);
    +        if (! $resql) { $err++;
    +        }
    +
    +        return $err;
    +    }
    +
    +
    +    /**
    +     * Module deactivation
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function _unactive()
    +    {
    +        global $conf;
    +
    +        $err = 0;
    +
    +        // Common module
    +        $entity = ((! empty($this->always_enabled) || ! empty($this->core_enabled)) ? 0 : $conf->entity);
    +
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    +        $sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    +        $sql.= " AND entity IN (0, ".$entity.")";
    +
    +        dol_syslog(get_class($this)."::_unactive", LOG_DEBUG);
    +        $this->db->query($sql);
    +
    +        return $err;
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Create tables and keys required by module.
    +     * Files module.sql and module.key.sql with create table and create keys
    +     * commands must be stored in directory reldir='/module/sql/'
    +     * This function is called by this->init
    +     *
    +     * @param  string $reldir Relative directory where to scan files
    +     * @return int             <=0 if KO, >0 if OK
    +     */
    +    function _load_tables($reldir)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $error=0;
    +        $dirfound=0;
    +
    +        if (empty($reldir)) { return 1;
    +        }
    +
    +        include_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
    +
    +        $ok = 1;
    +        foreach($conf->file->dol_document_root as $dirroot)
    +        {
    +            if ($ok) {
    +                $dir = $dirroot.$reldir;
    +                $ok = 0;
    +
    +                $handle=@opendir($dir);         // Dir may not exists
    +                if (is_resource($handle)) {
    +                    $dirfound++;
    +
    +                    // Run llx_mytable.sql files, then llx_mytable_*.sql
    +                    $files = array();
    +                    while (($file = readdir($handle))!==false)
    +                    {
    +                        $files[] = $file;
    +                    }
    +                    sort($files);
    +                    foreach ($files as $file)
    +                    {
    +                        if (preg_match('/\.sql$/i', $file) && ! preg_match('/\.key\.sql$/i', $file) && substr($file, 0, 4) == 'llx_' && substr($file, 0, 4) != 'data') {
    +                            $result=run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG)?1:0, '', 1);
    +                            if ($result <= 0) { $error++;
    +                            }
    +                        }
    +                    }
    +
    +                    rewinddir($handle);
    +
    +                    // Run llx_mytable.key.sql files (Must be done after llx_mytable.sql) then then llx_mytable_*.key.sql
    +                    $files = array();
    +                    while (($file = readdir($handle))!==false)
    +                    {
    +                        $files[] = $file;
    +                    }
    +                    sort($files);
    +                    foreach ($files as $file)
    +                    {
    +                        if (preg_match('/\.key\.sql$/i', $file) && substr($file, 0, 4) == 'llx_' && substr($file, 0, 4) != 'data') {
    +                            $result=run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG)?1:0, '', 1);
    +                            if ($result <= 0) { $error++;
    +                            }
    +                        }
    +                    }
    +
    +                    rewinddir($handle);
    +
    +                    // Run data_xxx.sql files (Must be done after llx_mytable.key.sql)
    +                    $files = array();
    +                    while (($file = readdir($handle))!==false)
    +                    {
    +                               $files[] = $file;
    +                    }
    +                    sort($files);
    +                    foreach ($files as $file)
    +                    {
    +                        if (preg_match('/\.sql$/i', $file) && ! preg_match('/\.key\.sql$/i', $file) && substr($file, 0, 4) == 'data') {
    +                            $result=run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG)?1:0, '', 1);
    +                            if ($result <= 0) { $error++;
    +                            }
    +                        }
    +                    }
    +
    +                    rewinddir($handle);
    +
    +                    // Run update_xxx.sql files
    +                    $files = array();
    +                    while (($file = readdir($handle))!==false)
    +                    {
    +                               $files[] = $file;
    +                    }
    +                    sort($files);
    +                    foreach ($files as $file)
    +                    {
    +                        if (preg_match('/\.sql$/i', $file) && ! preg_match('/\.key\.sql$/i', $file) && substr($file, 0, 6) == 'update') {
    +                            $result=run_sql($dir.$file, empty($conf->global->MAIN_DISPLAY_SQL_INSTALL_LOG)?1:0, '', 1);
    +                            if ($result <= 0) { $error++;
    +                            }
    +                        }
    +                    }
    +
    +                    closedir($handle);
    +                }
    +
    +                if ($error == 0) {
    +                    $ok = 1;
    +                }
    +            }
    +        }
    +
    +        if (! $dirfound) { dol_syslog("A module ask to load sql files into ".$reldir." but this directory was not found.", LOG_WARNING);
    +        }
    +        return $ok;
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Adds boxes
    +     *
    +     * @param string $option Options when disabling module ('newboxdefonly'=insert only boxes definition)
    +     *
    +     * @return int             Error count (0 if OK)
    +     */
    +    function insert_boxes($option='')
    +    {
    +        // phpcs:enable
    +        include_once DOL_DOCUMENT_ROOT . '/core/class/infobox.class.php';
    +
    +        global $conf;
    +
    +        $err=0;
    +
    +        if (is_array($this->boxes)) {
    +            dol_syslog(get_class($this)."::insert_boxes", LOG_DEBUG);
    +
    +            $pos_name = InfoBox::getListOfPagesForBoxes();
    +
    +            foreach ($this->boxes as $key => $value)
    +            {
    +                $file  = isset($this->boxes[$key]['file'])?$this->boxes[$key]['file']:'';
    +                $note  = isset($this->boxes[$key]['note'])?$this->boxes[$key]['note']:'';
    +                $enabledbydefaulton = isset($this->boxes[$key]['enabledbydefaulton'])?$this->boxes[$key]['enabledbydefaulton']:'Home';
    +
    +                if (empty($file)) { $file  = isset($this->boxes[$key][1])?$this->boxes[$key][1]:'';    // For backward compatibility
    +                }
    +                if (empty($note)) { $note  = isset($this->boxes[$key][2])?$this->boxes[$key][2]:'';    // For backward compatibility
    +                }
    +
    +                // Search if boxes def already present
    +                $sql = "SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."boxes_def";
    +                $sql.= " WHERE file = '".$this->db->escape($file)."'";
    +                $sql.= " AND entity = ".$conf->entity;
    +                if ($note) { $sql.=" AND note ='".$this->db->escape($note)."'";
    +                }
    +
    +                $result=$this->db->query($sql);
    +                if ($result) {
    +                    $obj = $this->db->fetch_object($result);
    +                    if ($obj->nb == 0) {
    +                        $this->db->begin();
    +
    +                        if (! $err) {
    +                            $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes_def (file, entity, note)";
    +                            $sql.= " VALUES ('".$this->db->escape($file)."', ";
    +                            $sql.= $conf->entity.", ";
    +                            $sql.= $note?"'".$this->db->escape($note)."'":"null";
    +                            $sql.= ")";
    +
    +                            dol_syslog(get_class($this)."::insert_boxes", LOG_DEBUG);
    +                            $resql=$this->db->query($sql);
    +                            if (! $resql) { $err++;
    +                            }
    +                        }
    +                        if (! $err && ! preg_match('/newboxdefonly/', $option)) {
    +                            $lastid=$this->db->last_insert_id(MAIN_DB_PREFIX."boxes_def", "rowid");
    +
    +                            foreach ($pos_name as $key2 => $val2)
    +                            {
    +                                    //print 'key2='.$key2.'-val2='.$val2."<br>\n";
    +                                if ($enabledbydefaulton && $val2 != $enabledbydefaulton) { continue;        // Not enabled by default onto this page.
    +                                }
    +
    +                                $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes (box_id,position,box_order,fk_user,entity)";
    +                                $sql.= " VALUES (".$lastid.", ".$key2.", '0', 0, ".$conf->entity.")";
    +
    +                                dol_syslog(get_class($this)."::insert_boxes onto page ".$key2."=".$val2."", LOG_DEBUG);
    +                                $resql=$this->db->query($sql);
    +                                if (! $resql) { $err++;
    +                                }
    +                            }
    +                        }
    +
    +                        if (! $err) {
    +                            $this->db->commit();
    +                        }
    +                        else
    +                        {
    +                                  $this->error=$this->db->lasterror();
    +                                  $this->db->rollback();
    +                        }
    +                    }
    +                    // else box already registered into database
    +                }
    +                else
    +                {
    +                    $this->error=$this->db->lasterror();
    +                    $err++;
    +                }
    +            }
    +        }
    +
    +        return $err;
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Removes boxes
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function delete_boxes()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        if (is_array($this->boxes)) {
    +            foreach ($this->boxes as $key => $value)
    +            {
    +                //$titre = $this->boxes[$key][0];
    +                $file  = $this->boxes[$key]['file'];
    +                //$note  = $this->boxes[$key][2];
    +
    +                // TODO If the box is also included by another module and the other module is still on, we should not remove it.
    +                // For the moment, we manage this with hard coded exception
    +                //print "Remove box ".$file.'<br>';
    +                if ($file == 'box_graph_product_distribution.php') {
    +                    if (! empty($conf->produit->enabled) || ! empty($conf->service->enabled)) {
    +                        dol_syslog("We discard disabling of module ".$file." because another module still active require it.");
    +                        continue;
    +                    }
    +                }
    +
    +                if (empty($file)) { $file  = isset($this->boxes[$key][1])?$this->boxes[$key][1]:'';    // For backward compatibility
    +                }
    +
    +                if ($this->db->type == 'sqlite3') {
    +                    // sqlite doesn't support "USING" syntax.
    +                    // TODO: remove this dependency.
    +                    $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes ";
    +                    $sql .= "WHERE ".MAIN_DB_PREFIX."boxes.box_id IN (";
    +                    $sql .= "SELECT ".MAIN_DB_PREFIX."boxes_def.rowid ";
    +                    $sql .= "FROM ".MAIN_DB_PREFIX."boxes_def ";
    +                    $sql .= "WHERE ".MAIN_DB_PREFIX."boxes_def.file = '".$this->db->escape($file)."') ";
    +                    $sql .= "AND ".MAIN_DB_PREFIX."boxes.entity = ".$conf->entity;
    +                } else {
    +                    $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
    +                    $sql.= " USING ".MAIN_DB_PREFIX."boxes, ".MAIN_DB_PREFIX."boxes_def";
    +                    $sql.= " WHERE ".MAIN_DB_PREFIX."boxes.box_id = ".MAIN_DB_PREFIX."boxes_def.rowid";
    +                    $sql.= " AND ".MAIN_DB_PREFIX."boxes_def.file = '".$this->db->escape($file)."'";
    +                    $sql.= " AND ".MAIN_DB_PREFIX."boxes.entity = ".$conf->entity;
    +                }
    +
    +                dol_syslog(get_class($this)."::delete_boxes", LOG_DEBUG);
    +                $resql=$this->db->query($sql);
    +                if (! $resql) {
    +                    $this->error=$this->db->lasterror();
    +                    $err++;
    +                }
    +
    +                $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def";
    +                $sql.= " WHERE file = '".$this->db->escape($file)."'";
    +                $sql.= " AND entity = ".$conf->entity;
    +
    +                dol_syslog(get_class($this)."::delete_boxes", LOG_DEBUG);
    +                $resql=$this->db->query($sql);
    +                if (! $resql) {
    +                    $this->error=$this->db->lasterror();
    +                    $err++;
    +                }
    +            }
    +        }
    +
    +        return $err;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Adds cronjobs
    +     *
    +     * @return int             Error count (0 if OK)
    +     */
    +    function insert_cronjobs()
    +    {
    +        // phpcs:enable
    +        include_once DOL_DOCUMENT_ROOT . '/core/class/infobox.class.php';
    +
    +        global $conf;
    +
    +        $err=0;
    +
    +        if (is_array($this->cronjobs)) {
    +            dol_syslog(get_class($this)."::insert_cronjobs", LOG_DEBUG);
    +
    +            foreach ($this->cronjobs as $key => $value)
    +            {
    +                $entity  = isset($this->cronjobs[$key]['entity'])?$this->cronjobs[$key]['entity']:$conf->entity;
    +                $label  = isset($this->cronjobs[$key]['label'])?$this->cronjobs[$key]['label']:'';
    +                $jobtype  = isset($this->cronjobs[$key]['jobtype'])?$this->cronjobs[$key]['jobtype']:'';
    +                $class  = isset($this->cronjobs[$key]['class'])?$this->cronjobs[$key]['class']:'';
    +                $objectname  = isset($this->cronjobs[$key]['objectname'])?$this->cronjobs[$key]['objectname']:'';
    +                $method = isset($this->cronjobs[$key]['method'])?$this->cronjobs[$key]['method']:'';
    +                $command  = isset($this->cronjobs[$key]['command'])?$this->cronjobs[$key]['command']:'';
    +                $parameters  = isset($this->cronjobs[$key]['parameters'])?$this->cronjobs[$key]['parameters']:'';
    +                $comment = isset($this->cronjobs[$key]['comment'])?$this->cronjobs[$key]['comment']:'';
    +                $frequency = isset($this->cronjobs[$key]['frequency'])?$this->cronjobs[$key]['frequency']:'';
    +                $unitfrequency = isset($this->cronjobs[$key]['unitfrequency'])?$this->cronjobs[$key]['unitfrequency']:'';
    +                $priority = isset($this->cronjobs[$key]['priority'])?$this->cronjobs[$key]['priority']:'';
    +                $datestart = isset($this->cronjobs[$key]['datestart'])?$this->cronjobs[$key]['datestart']:'';
    +                $dateend = isset($this->cronjobs[$key]['dateend'])?$this->cronjobs[$key]['dateend']:'';
    +                $status = isset($this->cronjobs[$key]['status'])?$this->cronjobs[$key]['status']:'';
    +                $test = isset($this->cronjobs[$key]['test'])?$this->cronjobs[$key]['test']:'';                    // Line must be enabled or not (so visible or not)
    +
    +                // Search if cron entry already present
    +                $sql = "SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."cronjob";
    +                $sql.= " WHERE module_name = '".$this->db->escape(empty($this->rights_class)?strtolower($this->name):$this->rights_class)."'";
    +                if ($class) { $sql.= " AND classesname = '".$this->db->escape($class)."'";
    +                }
    +                if ($objectname) { $sql.= " AND objectname = '".$this->db->escape($objectname)."'";
    +                }
    +                if ($method) { $sql.= " AND methodename = '".$this->db->escape($method)."'";
    +                }
    +                if ($command) { $sql.= " AND command = '".$this->db->escape($command)."'";
    +                }
    +                $sql.= " AND entity = ".$entity;    // Must be exact entity
    +
    +                $now=dol_now();
    +
    +                $result=$this->db->query($sql);
    +                if ($result) {
    +                    $obj = $this->db->fetch_object($result);
    +                    if ($obj->nb == 0) {
    +                        $this->db->begin();
    +
    +                        if (! $err) {
    +                            $sql = "INSERT INTO ".MAIN_DB_PREFIX."cronjob (module_name, datec, datestart, dateend, label, jobtype, classesname, objectname, methodename, command, params, note,";
    +                            if (is_int($frequency)) { $sql.= ' frequency,'; }
    +                            if (is_int($unitfrequency)) { $sql.= ' unitfrequency,'; }
    +                            if (is_int($priority)) { $sql.= ' priority,'; }
    +                            if (is_int($status)) { $sql.= ' status,'; }
    +                            $sql.= " entity, test)";
    +                            $sql.= " VALUES (";
    +                            $sql.= "'".$this->db->escape(empty($this->rights_class)?strtolower($this->name):$this->rights_class)."', ";
    +                            $sql.= "'".$this->db->idate($now)."', ";
    +                            $sql.= ($datestart ? "'".$this->db->idate($datestart)."'" : "'".$this->db->idate($now)."'").", ";
    +                            $sql.= ($dateend   ? "'".$this->db->idate($dateend)."'"   : "NULL").", ";
    +                            $sql.= "'".$this->db->escape($label)."', ";
    +                            $sql.= "'".$this->db->escape($jobtype)."', ";
    +                            $sql.= ($class?"'".$this->db->escape($class)."'":"null").",";
    +                            $sql.= ($objectname?"'".$this->db->escape($objectname)."'":"null").",";
    +                            $sql.= ($method?"'".$this->db->escape($method)."'":"null").",";
    +                            $sql.= ($command?"'".$this->db->escape($command)."'":"null").",";
    +                            $sql.= ($parameters?"'".$this->db->escape($parameters)."'":"null").",";
    +                            $sql.= ($comment?"'".$this->db->escape($comment)."'":"null").",";
    +                            if(is_int($frequency)) { $sql.= "'".$this->db->escape($frequency)."', ";
    +                            }
    +                            if(is_int($unitfrequency)) { $sql.= "'".$this->db->escape($unitfrequency)."', ";
    +                            }
    +                            if(is_int($priority)) {$sql.= "'".$this->db->escape($priority)."', ";
    +                            }
    +                            if(is_int($status)) { $sql.= "'".$this->db->escape($status)."', ";
    +                            }
    +                            $sql.= $entity.",";
    +                            $sql.= "'".$this->db->escape($test)."'";
    +                            $sql.= ")";
    +
    +                            $resql=$this->db->query($sql);
    +                            if (! $resql) { $err++;
    +                            }
    +                        }
    +
    +                        if (! $err) {
    +                            $this->db->commit();
    +                        }
    +                        else
    +                        {
    +                            $this->error=$this->db->lasterror();
    +                            $this->db->rollback();
    +                        }
    +                    }
    +                    // else box already registered into database
    +                }
    +                else
    +                {
    +                    $this->error=$this->db->lasterror();
    +                    $err++;
    +                }
    +            }
    +        }
    +
    +        return $err;
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Removes boxes
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function delete_cronjobs()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        if (is_array($this->cronjobs)) {
    +            $sql = "DELETE FROM ".MAIN_DB_PREFIX."cronjob";
    +            $sql.= " WHERE module_name = '".$this->db->escape(empty($this->rights_class)?strtolower($this->name):$this->rights_class)."'";
    +            $sql.= " AND entity = ".$conf->entity;
    +            $sql.= " AND test = '1'";        // We delete on lines that are not set with a complete test that is '$conf->module->enabled' so when module is disabled, the cron is also removed.
    +              // For crons declared with a '$conf->module->enabled', there is no need to delete the line, so we don't loose setup if we reenable module.
    +
    +            dol_syslog(get_class($this)."::delete_cronjobs", LOG_DEBUG);
    +            $resql=$this->db->query($sql);
    +            if (! $resql) {
    +                $this->error=$this->db->lasterror();
    +                $err++;
    +            }
    +        }
    +
    +        return $err;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Removes tabs
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function delete_tabs()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    +        $sql.= " WHERE ".$this->db->decrypt('name')." like '".$this->db->escape($this->const_name)."_TABS_%'";
    +        $sql.= " AND entity = ".$conf->entity;
    +
    +        dol_syslog(get_class($this)."::delete_tabs", LOG_DEBUG);
    +        if (! $this->db->query($sql)) {
    +            $this->error=$this->db->lasterror();
    +            $err++;
    +        }
    +
    +        return $err;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Adds tabs
    +     *
    +     * @return int  Error count (0 if ok)
    +     */
    +    function insert_tabs()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        if (! empty($this->tabs)) {
    +            dol_syslog(get_class($this)."::insert_tabs", LOG_DEBUG);
    +
    +            $i=0;
    +            foreach ($this->tabs as $key => $value)
    +            {
    +                if (is_array($value) && count($value) == 0) { continue;    // Discard empty arrays
    +                }
    +
    +                $entity=$conf->entity;
    +                $newvalue = $value;
    +
    +                if (is_array($value)) {
    +                    $newvalue = $value['data'];
    +                    if (isset($value['entity'])) { $entity = $value['entity'];
    +                    }
    +                }
    +
    +                if ($newvalue) {
    +                    $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (";
    +                    $sql.= "name";
    +                    $sql.= ", type";
    +                    $sql.= ", value";
    +                    $sql.= ", note";
    +                    $sql.= ", visible";
    +                    $sql.= ", entity";
    +                    $sql.= ")";
    +                    $sql.= " VALUES (";
    +                    $sql.= $this->db->encrypt($this->const_name."_TABS_".$i, 1);
    +                    $sql.= ", 'chaine'";
    +                    $sql.= ", ".$this->db->encrypt($newvalue, 1);
    +                    $sql.= ", null";
    +                    $sql.= ", '0'";
    +                    $sql.= ", ".$entity;
    +                    $sql.= ")";
    +
    +                    $resql = $this->db->query($sql);
    +                    if (! $resql) {
    +                         dol_syslog($this->db->lasterror(), LOG_ERR);
    +                        if ($this->db->lasterrno() != 'DB_ERROR_RECORD_ALREADY_EXISTS') {
    +                            $this->error = $this->db->lasterror();
    +                            $this->errors[] = $this->db->lasterror();
    +                            $err++;
    +                            break;
    +                        }
    +                    }
    +                }
    +                $i++;
    +            }
    +        }
    +        return $err;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Adds constants
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function insert_const()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        if (empty($this->const)) { return 0;
    +        }
    +
    +        dol_syslog(get_class($this)."::insert_const", LOG_DEBUG);
    +
    +        foreach ($this->const as $key => $value)
    +        {
    +            $name      = $this->const[$key][0];
    +            $type      = $this->const[$key][1];
    +            $val       = $this->const[$key][2];
    +            $note      = isset($this->const[$key][3])?$this->const[$key][3]:'';
    +            $visible   = isset($this->const[$key][4])?$this->const[$key][4]:0;
    +            $entity    = (! empty($this->const[$key][5]) && $this->const[$key][5]!='current')?0:$conf->entity;
    +
    +            // Clean
    +            if (empty($visible)) { $visible='0';
    +            }
    +            if (empty($val) && $val != '0') { $val='';
    +            }
    +
    +            $sql = "SELECT count(*)";
    +            $sql.= " FROM ".MAIN_DB_PREFIX."const";
    +            $sql.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($name)."'";
    +            $sql.= " AND entity = ".$entity;
    +
    +            $result=$this->db->query($sql);
    +            if ($result) {
    +                $row = $this->db->fetch_row($result);
    +
    +                if ($row[0] == 0)   // If not found
    +                {
    +                    $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,note,visible,entity)";
    +                    $sql.= " VALUES (";
    +                    $sql.= $this->db->encrypt($name, 1);
    +                    $sql.= ",'".$type."'";
    +                    $sql.= ",".(($val != '')?$this->db->encrypt($val, 1):"''");
    +                    $sql.= ",".($note?"'".$this->db->escape($note)."'":"null");
    +                    $sql.= ",'".$visible."'";
    +                    $sql.= ",".$entity;
    +                    $sql.= ")";
    +
    +                    if (! $this->db->query($sql) ) {
    +                        $err++;
    +                    }
    +                }
    +                else
    +                {
    +                    dol_syslog(get_class($this)."::insert_const constant '".$name."' already exists", LOG_WARNING);
    +                }
    +            }
    +            else
    +            {
    +                $err++;
    +            }
    +        }
    +
    +        return $err;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Removes constants tagged 'deleteonunactive'
    +     *
    +     * @return int <0 if KO, 0 if OK
    +     */
    +    function delete_const()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        if (empty($this->const)) { return 0;
    +        }
    +
    +        foreach ($this->const as $key => $value)
    +        {
    +            $name      = $this->const[$key][0];
    +            $deleteonunactive = (! empty($this->const[$key][6]))?1:0;
    +
    +            if ($deleteonunactive) {
    +                $sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    +                $sql.= " WHERE ".$this->db->decrypt('name')." = '".$name."'";
    +                $sql.= " AND entity in (0, ".$conf->entity.")";
    +                dol_syslog(get_class($this)."::delete_const", LOG_DEBUG);
    +                if (! $this->db->query($sql)) {
    +                    $this->error=$this->db->lasterror();
    +                    $err++;
    +                }
    +            }
    +        }
    +
    +        return $err;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Adds access rights
    +     *
    +     * @param  int $reinitadminperms If 1, we also grant them to all admin users
    +     * @param  int $force_entity     Force current entity
    +     * @param  int $notrigger        1=Does not execute triggers, 0= execute triggers
    +     * @return int                     Error count (0 if OK)
    +     */
    +    function insert_permissions($reinitadminperms=0, $force_entity=null, $notrigger=0)
    +    {
    +        // phpcs:enable
    +        global $conf,$user;
    +
    +        $err=0;
    +        $entity=(! empty($force_entity) ? $force_entity : $conf->entity);
    +
    +        dol_syslog(get_class($this)."::insert_permissions", LOG_DEBUG);
    +
    +        // Test if module is activated
    +        $sql_del = "SELECT ".$this->db->decrypt('value')." as value";
    +        $sql_del.= " FROM ".MAIN_DB_PREFIX."const";
    +        $sql_del.= " WHERE ".$this->db->decrypt('name')." = '".$this->db->escape($this->const_name)."'";
    +        $sql_del.= " AND entity IN (0,".$entity.")";
    +
    +        $resql=$this->db->query($sql_del);
    +
    +        if ($resql) {
    +            $obj=$this->db->fetch_object($resql);
    +            if ($obj !== null && ! empty($obj->value) && ! empty($this->rights)) {
    +                // If the module is active
    +                foreach ($this->rights as $key => $value)
    +                {
    +                    $r_id       = $this->rights[$key][0];
    +                    $r_desc     = $this->rights[$key][1];
    +                    $r_type     = isset($this->rights[$key][2])?$this->rights[$key][2]:'';
    +                    $r_def      = $this->rights[$key][3];
    +                    $r_perms    = $this->rights[$key][4];
    +                    $r_subperms = isset($this->rights[$key][5])?$this->rights[$key][5]:'';
    +                    $r_modul    = empty($this->rights_class)?strtolower($this->name):$this->rights_class;
    +
    +                    if (empty($r_type)) { $r_type='w';
    +                    }
    +
    +                    // Search if perm already present
    +                    $sql = "SELECT count(*) as nb FROM ".MAIN_DB_PREFIX."rights_def";
    +                    $sql.= " WHERE id = ".$r_id." AND entity = ".$entity;
    +
    +                    $resqlselect=$this->db->query($sql);
    +                    if ($resqlselect) {
    +                        $objcount = $this->db->fetch_object($resqlselect);
    +                        if ($objcount && $objcount->nb == 0) {
    +                            if (dol_strlen($r_perms) ) {
    +                                if (dol_strlen($r_subperms) ) {
    +                                    $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def";
    +                                    $sql.= " (id, entity, libelle, module, type, bydefault, perms, subperms)";
    +                                    $sql.= " VALUES ";
    +                                    $sql.= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."','".$r_subperms."')";
    +                                }
    +                                else
    +                                   {
    +                                    $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def";
    +                                    $sql.= " (id, entity, libelle, module, type, bydefault, perms)";
    +                                    $sql.= " VALUES ";
    +                                    $sql.= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.",'".$r_perms."')";
    +                                }
    +                            }
    +                            else
    +                            {
    +                                 $sql = "INSERT INTO ".MAIN_DB_PREFIX."rights_def ";
    +                                 $sql .= " (id, entity, libelle, module, type, bydefault)";
    +                                 $sql .= " VALUES ";
    +                                 $sql .= "(".$r_id.",".$entity.",'".$this->db->escape($r_desc)."','".$r_modul."','".$r_type."',".$r_def.")";
    +                            }
    +
    +                            $resqlinsert=$this->db->query($sql, 1);
    +
    +                            if (! $resqlinsert) {
    +                                if ($this->db->errno() != "DB_ERROR_RECORD_ALREADY_EXISTS") {
    +                                    $this->error=$this->db->lasterror();
    +                                    $err++;
    +                                    break;
    +                                }
    +                                else { dol_syslog(get_class($this)."::insert_permissions record already exists", LOG_INFO);
    +                                }
    +                            }
    +
    +                            $this->db->free($resqlinsert);
    +                        }
    +
    +                        $this->db->free($resqlselect);
    +                    }
    +
    +                    // If we want to init permissions on admin users
    +                    if ($reinitadminperms) {
    +                        if (! class_exists('User')) {
    +                            include_once DOL_DOCUMENT_ROOT . '/user/class/user.class.php';
    +                        }
    +                        $sql="SELECT rowid FROM ".MAIN_DB_PREFIX."user WHERE admin = 1";
    +                        dol_syslog(get_class($this)."::insert_permissions Search all admin users", LOG_DEBUG);
    +                        $resqlseladmin=$this->db->query($sql, 1);
    +                        if ($resqlseladmin) {
    +                            $num=$this->db->num_rows($resqlseladmin);
    +                            $i=0;
    +                            while ($i < $num)
    +                            {
    +                                  $obj2=$this->db->fetch_object($resqlseladmin);
    +                                  dol_syslog(get_class($this)."::insert_permissions Add permission to user id=".$obj2->rowid);
    +
    +                                  $tmpuser=new User($this->db);
    +                                  $result = $tmpuser->fetch($obj2->rowid);
    +                                if ($result > 0) {
    +                                    $tmpuser->addrights($r_id, '', '', 0, 1);
    +                                }
    +                                else
    +                                 {
    +                                    dol_syslog(get_class($this)."::insert_permissions Failed to add the permission to user because fetch return an error", LOG_ERR);
    +                                }
    +                                 $i++;
    +                            }
    +                        }
    +                        else
    +                        {
    +                            dol_print_error($this->db);
    +                        }
    +                    }
    +                }
    +
    +                if ($reinitadminperms && ! empty($user->admin))  // Reload permission for current user if defined
    +                {
    +                    // We reload permissions
    +                    $user->clearrights();
    +                    $user->getrights();
    +                }
    +            }
    +            $this->db->free($resql);
    +        }
    +        else
    +        {
    +            $this->error=$this->db->lasterror();
    +            $err++;
    +        }
    +
    +        return $err;
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Removes access rights
    +     *
    +     * @return int                     Error count (0 if OK)
    +     */
    +    function delete_permissions()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."rights_def";
    +        $sql.= " WHERE module = '".$this->db->escape(empty($this->rights_class)?strtolower($this->name):$this->rights_class)."'";
    +        $sql.= " AND entity = ".$conf->entity;
    +        dol_syslog(get_class($this)."::delete_permissions", LOG_DEBUG);
    +        if (! $this->db->query($sql)) {
    +            $this->error=$this->db->lasterror();
    +            $err++;
    +        }
    +
    +        return $err;
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Adds menu entries
    +     *
    +     * @return int     Error count (0 if OK)
    +     */
    +    function insert_menus()
    +    {
    +        // phpcs:enable
    +        global $user;
    +
    +        if (! is_array($this->menu) || empty($this->menu)) { return 0;
    +        }
    +
    +        include_once DOL_DOCUMENT_ROOT . '/core/class/menubase.class.php';
    +
    +        dol_syslog(get_class($this)."::insert_menus", LOG_DEBUG);
    +
    +        $err=0;
    +
    +        $this->db->begin();
    +
    +        foreach ($this->menu as $key => $value)
    +        {
    +            $menu = new Menubase($this->db);
    +            $menu->menu_handler='all';
    +
    +            //$menu->module=strtolower($this->name);    TODO When right_class will be same than module name
    +            $menu->module=empty($this->rights_class)?strtolower($this->name):$this->rights_class;
    +
    +            if (! $this->menu[$key]['fk_menu']) {
    +                $menu->fk_menu=0;
    +            }
    +            else
    +            {
    +                $foundparent=0;
    +                $fk_parent=$this->menu[$key]['fk_menu'];
    +                if (preg_match('/^r=/', $fk_parent))    // old deprecated method
    +                {
    +                    $fk_parent=str_replace('r=', '', $fk_parent);
    +                    if (isset($this->menu[$fk_parent]['rowid'])) {
    +                        $menu->fk_menu=$this->menu[$fk_parent]['rowid'];
    +                        $foundparent=1;
    +                    }
    +                }
    +                elseif (preg_match('/^fk_mainmenu=([a-zA-Z0-9_]+),fk_leftmenu=([a-zA-Z0-9_]+)$/', $fk_parent, $reg)) {
    +                    $menu->fk_menu=-1;
    +                    $menu->fk_mainmenu=$reg[1];
    +                    $menu->fk_leftmenu=$reg[2];
    +                    $foundparent=1;
    +                }
    +                elseif (preg_match('/^fk_mainmenu=([a-zA-Z0-9_]+)$/', $fk_parent, $reg)) {
    +                    $menu->fk_menu=-1;
    +                    $menu->fk_mainmenu=$reg[1];
    +                    $menu->fk_leftmenu='';
    +                    $foundparent=1;
    +                }
    +                if (! $foundparent) {
    +                    $this->error="ErrorBadDefinitionOfMenuArrayInModuleDescriptor";
    +                    dol_syslog(get_class($this)."::insert_menus ".$this->error." ".$this->menu[$key]['fk_menu'], LOG_ERR);
    +                    $err++;
    +                }
    +            }
    +            $menu->type=$this->menu[$key]['type'];
    +            $menu->mainmenu=isset($this->menu[$key]['mainmenu'])?$this->menu[$key]['mainmenu']:(isset($menu->fk_mainmenu)?$menu->fk_mainmenu:'');
    +            $menu->leftmenu=isset($this->menu[$key]['leftmenu'])?$this->menu[$key]['leftmenu']:'';
    +            $menu->titre=$this->menu[$key]['titre'];
    +            $menu->url=$this->menu[$key]['url'];
    +            $menu->langs=$this->menu[$key]['langs'];
    +            $menu->position=$this->menu[$key]['position'];
    +            $menu->perms=$this->menu[$key]['perms'];
    +            $menu->target=isset($this->menu[$key]['target'])?$this->menu[$key]['target']:'';
    +            $menu->user=$this->menu[$key]['user'];
    +            $menu->enabled=isset($this->menu[$key]['enabled'])?$this->menu[$key]['enabled']:0;
    +            $menu->position=$this->menu[$key]['position'];
    +
    +            if (! $err) {
    +                $result=$menu->create($user);    // Save menu entry into table llx_menu
    +                if ($result > 0) {
    +                    $this->menu[$key]['rowid']=$result;
    +                }
    +                else
    +                {
    +                    $this->error=$menu->error;
    +                    dol_syslog(get_class($this).'::insert_menus result='.$result." ".$this->error, LOG_ERR);
    +                    $err++;
    +                    break;
    +                }
    +            }
    +        }
    +
    +        if (! $err) {
    +            $this->db->commit();
    +        }
    +        else
    +        {
    +            dol_syslog(get_class($this)."::insert_menus ".$this->error, LOG_ERR);
    +            $this->db->rollback();
    +        }
    +
    +        return $err;
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Removes menu entries
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function delete_menus()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        //$module=strtolower($this->name);        TODO When right_class will be same than module name
    +        $module=empty($this->rights_class)?strtolower($this->name):$this->rights_class;
    +
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."menu";
    +        $sql.= " WHERE module = '".$this->db->escape($module)."'";
    +        $sql.= " AND entity = ".$conf->entity;
    +
    +        dol_syslog(get_class($this)."::delete_menus", LOG_DEBUG);
    +        $resql=$this->db->query($sql);
    +        if (! $resql) {
    +            $this->error=$this->db->lasterror();
    +            $err++;
    +        }
    +
    +        return $err;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Creates directories
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function create_dirs()
    +    {
    +        // phpcs:enable
    +        global $langs, $conf;
    +
    +        $err=0;
    +
    +        if (isset($this->dirs) && is_array($this->dirs)) {
    +            foreach ($this->dirs as $key => $value)
    +            {
    +                $addtodatabase=0;
    +
    +                if (! is_array($value)) { $dir=$value;    // Default simple mode
    +                } else {
    +                    $constname = $this->const_name."_DIR_";
    +                    $dir       = $this->dirs[$key][1];
    +                    $addtodatabase = empty($this->dirs[$key][2])?'':$this->dirs[$key][2]; // Create constante in llx_const
    +                    $subname   = empty($this->dirs[$key][3])?'':strtoupper($this->dirs[$key][3]); // Add submodule name (ex: $conf->module->submodule->dir_output)
    +                    $forcename = empty($this->dirs[$key][4])?'':strtoupper($this->dirs[$key][4]); // Change the module name if different
    +
    +                    if (! empty($forcename)) { $constname = 'MAIN_MODULE_'.$forcename."_DIR_";
    +                    }
    +                    if (! empty($subname)) {   $constname = $constname.$subname."_";
    +                    }
    +
    +                    $name = $constname.strtoupper($this->dirs[$key][0]);
    +                }
    +
    +                // Define directory full path ($dir must start with "/")
    +                if (empty($conf->global->MAIN_MODULE_MULTICOMPANY) || $conf->entity == 1) { $fulldir = DOL_DATA_ROOT.$dir;
    +                } else { $fulldir = DOL_DATA_ROOT."/".$conf->entity.$dir;
    +                }
    +                // Create dir if it does not exists
    +                if (! empty($fulldir) && ! file_exists($fulldir)) {
    +                    if (dol_mkdir($fulldir, DOL_DATA_ROOT) < 0) {
    +                         $this->error = $langs->trans("ErrorCanNotCreateDir", $fulldir);
    +                         dol_syslog(get_class($this)."::_init ".$this->error, LOG_ERR);
    +                         $err++;
    +                    }
    +                }
    +
    +                // Define the constant in database if requested (not the default mode)
    +                if (! empty($addtodatabase)) {
    +                    $result = $this->insert_dirs($name, $dir);
    +                    if ($result) { $err++;
    +                    }
    +                }
    +            }
    +        }
    +
    +        return $err;
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Adds directories definitions
    +     *
    +     * @param string $name Name
    +     * @param string $dir  Directory
    +     *
    +     * @return int             Error count (0 if OK)
    +     */
    +    function insert_dirs($name,$dir)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        $sql = "SELECT count(*)";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."const";
    +        $sql.= " WHERE ".$this->db->decrypt('name')." = '".$name."'";
    +        $sql.= " AND entity = ".$conf->entity;
    +
    +        dol_syslog(get_class($this)."::insert_dirs", LOG_DEBUG);
    +        $result=$this->db->query($sql);
    +        if ($result) {
    +            $row = $this->db->fetch_row($result);
    +
    +            if ($row[0] == 0) {
    +                $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,type,value,note,visible,entity)";
    +                $sql.= " VALUES (".$this->db->encrypt($name, 1).",'chaine',".$this->db->encrypt($dir, 1).",'Directory for module ".$this->name."','0',".$conf->entity.")";
    +
    +                dol_syslog(get_class($this)."::insert_dirs", LOG_DEBUG);
    +                $this->db->query($sql);
    +            }
    +        }
    +        else
    +        {
    +            $this->error=$this->db->lasterror();
    +            $err++;
    +        }
    +
    +        return $err;
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Removes directories
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function delete_dirs()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    +        $sql.= " WHERE ".$this->db->decrypt('name')." LIKE '".$this->db->escape($this->const_name)."_DIR_%'";
    +        $sql.= " AND entity = ".$conf->entity;
    +
    +        dol_syslog(get_class($this)."::delete_dirs", LOG_DEBUG);
    +        if (! $this->db->query($sql)) {
    +            $this->error=$this->db->lasterror();
    +            $err++;
    +        }
    +
    +        return $err;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Adds generic parts
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function insert_module_parts()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $error=0;
    +
    +        if (is_array($this->module_parts) && ! empty($this->module_parts)) {
    +            foreach($this->module_parts as $key => $value)
    +            {
    +                if (is_array($value) && count($value) == 0) { continue;    // Discard empty arrays
    +                }
    +
    +                $entity=$conf->entity; // Reset the current entity
    +                $newvalue = $value;
    +
    +                // Serialize array parameters
    +                if (is_array($value)) {
    +                    // Can defined other parameters
    +                    // Example when $key='hooks', then $value is an array('data'=>array('hookcontext1','hookcontext2'), 'entity'=>X)
    +                    if (isset($value['data']) && is_array($value['data'])) {
    +                        $newvalue = json_encode($value['data']);
    +                        if (isset($value['entity'])) { $entity = $value['entity'];
    +                        }
    +                    }
    +                    else if (isset($value['data']) && !is_array($value['data'])) {
    +                        $newvalue = $value['data'];
    +                        if (isset($value['entity'])) { $entity = $value['entity'];
    +                        }
    +                    }
    +                    else    // when hook is declared with syntax 'hook'=>array('hookcontext1','hookcontext2',...)
    +                    {
    +                        $newvalue = json_encode($value);
    +                    }
    +                }
    +
    +                $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (";
    +                $sql.= "name";
    +                $sql.= ", type";
    +                $sql.= ", value";
    +                $sql.= ", note";
    +                $sql.= ", visible";
    +                $sql.= ", entity";
    +                $sql.= ")";
    +                $sql.= " VALUES (";
    +                $sql.= $this->db->encrypt($this->const_name."_".strtoupper($key), 1);
    +                $sql.= ", 'chaine'";
    +                $sql.= ", ".$this->db->encrypt($newvalue, 1);
    +                $sql.= ", null";
    +                $sql.= ", '0'";
    +                $sql.= ", ".$entity;
    +                $sql.= ")";
    +
    +                dol_syslog(get_class($this)."::insert_module_parts for key=".$this->const_name."_".strtoupper($key), LOG_DEBUG);
    +
    +                $resql=$this->db->query($sql, 1);
    +                if (! $resql) {
    +                    if ($this->db->lasterrno() != 'DB_ERROR_RECORD_ALREADY_EXISTS') {
    +                         $error++;
    +                         $this->error=$this->db->lasterror();
    +                    }
    +                    else
    +                    {
    +                         dol_syslog(get_class($this)."::insert_module_parts for ".$this->const_name."_".strtoupper($key)." Record already exists.", LOG_WARNING);
    +                    }
    +                }
    +            }
    +        }
    +        return $error;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Removes generic parts
    +     *
    +     * @return int Error count (0 if OK)
    +     */
    +    function delete_module_parts()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $err=0;
    +        $entity=$conf->entity;
    +
    +        if (is_array($this->module_parts) && ! empty($this->module_parts)) {
    +            foreach($this->module_parts as $key => $value)
    +            {
    +                // If entity is defined
    +                if (is_array($value) && isset($value['entity'])) { $entity = $value['entity'];
    +                }
    +
    +                $sql = "DELETE FROM ".MAIN_DB_PREFIX."const";
    +                $sql.= " WHERE ".$this->db->decrypt('name')." LIKE '".$this->db->escape($this->const_name)."_".strtoupper($key)."'";
    +                $sql.= " AND entity = ".$entity;
    +
    +                dol_syslog(get_class($this)."::delete_const_".$key."", LOG_DEBUG);
    +                if (! $this->db->query($sql)) {
    +                    $this->error=$this->db->lasterror();
    +                    $err++;
    +                }
    +            }
    +        }
    +        return $err;
    +    }
    +
    +    /**
    +     * Function called when module is enabled.
    +     * The init function adds tabs, constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
    +     * It also creates data directories
    +     *
    +     * @param  string $options Options when enabling module ('', 'newboxdefonly', 'noboxes')
    +     *                         'noboxes' = Do not insert boxes 'newboxdefonly' = For boxes,
    +     *                         insert def of boxes only and not boxes activation
    +     * @return int                1 if OK, 0 if KO
    +     */
    +    public function init($options = '')
    +    {
    +        return $this->_init(array(), $options);
    +    }
    +
    +    /**
    +     * Function called when module is disabled.
    +     * The remove function removes tabs, constants, boxes, permissions and menus from Dolibarr database.
    +     * Data directories are not deleted
    +     *
    +     * @param  string $options Options when enabling module ('', 'noboxes')
    +     * @return int                     1 if OK, 0 if KO
    +     */
    +    public function remove($options = '')
    +    {
    +        return $this->_remove(array(), $options);
    +    }
     }
    diff --git a/htdocs/core/modules/action/modules_action.php b/htdocs/core/modules/action/modules_action.php
    index 2971b6f59ee..323675f88f6 100644
    --- a/htdocs/core/modules/action/modules_action.php
    +++ b/htdocs/core/modules/action/modules_action.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005	Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010	Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004     	Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -28,17 +28,22 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModeleAction extends CommonDocGenerator
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return list of active generation modules
          *
    -	 * 	@param	DoliDB		$db					Database handler
    +     * 	@param	DoliDB		$db					Database handler
          *  @param	integer		$maxfilenamelength  Max length of value to show
          * 	@return	array							List of templates
          */
         static function liste_modeles($db,$maxfilenamelength=0)
         {
    +        // phpcs:enable
             global $conf;
     
             $type='action';
    @@ -50,6 +55,8 @@ abstract class ModeleAction extends CommonDocGenerator
             return $liste;
         }
     }
    +
    +// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     /**
      *  Create an product document on disk using template defined into PRODUCT_ADDON_PDF
      *
    @@ -64,6 +71,7 @@ abstract class ModeleAction extends CommonDocGenerator
      */
     function action_create($db, $object, $modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0)
     {
    +    // phpcs:enable
     	global $conf,$langs,$user;
     	$langs->load("action");
     
    diff --git a/htdocs/core/modules/action/rapport.pdf.php b/htdocs/core/modules/action/rapport.pdf.php
    index 504164cd431..44092df6ec9 100644
    --- a/htdocs/core/modules/action/rapport.pdf.php
    +++ b/htdocs/core/modules/action/rapport.pdf.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -35,19 +35,33 @@ require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
      */
     class CommActionRapport
     {
    -	var $db;
    -	var $description;
    -	var $date_edition;
    -	var $year;
    -	var $month;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -	var $title;
    -	var $subject;
    +	/**
    +	 * @var string description
    +	 */
    +	public $description;
     
    -	var $marge_gauche;
    -	var	$marge_droite;
    -	var	$marge_haute;
    -	var	$marge_basse;
    +	public $date_edition;
    +
    +	public $year;
    +
    +	public $month;
    +
    +	public $title;
    +
    +	public $subject;
    +
    +	public $marge_gauche;
    +
    +	public	$marge_droite;
    +
    +	public	$marge_haute;
    +
    +	public	$marge_basse;
     
     
     	/**
    @@ -59,9 +73,10 @@ class CommActionRapport
     	 */
     	function __construct($db, $month, $year)
     	{
    -		global $conf,$langs;
    -		$langs->load("commercial");
    -		$langs->load("projects");
    +		global $conf, $langs;
    +
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("commercial","projects"));
     
     		$this->db = $db;
     		$this->description = "";
    @@ -84,6 +99,7 @@ class CommActionRapport
             $this->subject=$langs->transnoentitiesnoconv("ActionsReport").' '.$this->year."-".$this->month;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *      Write the object to document file to disk
          *
    @@ -94,17 +110,15 @@ class CommActionRapport
     	 */
     	function write_file($socid = 0, $catid = 0, $outputlangs='')
     	{
    +        // phpcs:enable
     		global $user,$conf,$langs,$hookmanager;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("products");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products"));
     
             $dir = $conf->agenda->dir_temp."/";
     		$file = $dir . "actions-".$this->month."-".$this->year.".pdf";
    @@ -345,4 +359,3 @@ class CommActionRapport
     		return $y;
     	}
     }
    -
    diff --git a/htdocs/core/modules/bank/doc/pdf_ban.modules.php b/htdocs/core/modules/bank/doc/pdf_ban.modules.php
    index 9941742d8d7..97a91951e81 100644
    --- a/htdocs/core/modules/bank/doc/pdf_ban.modules.php
    +++ b/htdocs/core/modules/bank/doc/pdf_ban.modules.php
    @@ -35,9 +35,18 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
     class pdf_ban extends ModeleBankAccountDoc
     {
    -	var $emetteur;	// Objet societe qui emet
    -	var $version = 'development';
    -	
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'development';
    +
     	/**
     	 *	Constructor
     	 *
    @@ -47,15 +56,13 @@ class pdf_ban extends ModeleBankAccountDoc
     	{
     		global $conf,$langs,$mysoc;
     
    -		$langs->load("main");
    -		$langs->load("bank");
    -		$langs->load("withdrawals");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","bank","withdrawals","companies"));
     
     		$this->db = $db;
     		$this->name = "ban";
     		$this->description = $langs->trans("DocumentModelBan").' (Volunteer wanted to finish)';
    -		
    +
     		// Dimension page pour format A4
     		$this->type = 'pdf';
     		$formatarray=pdf_getFormat();
    @@ -85,6 +92,7 @@ class pdf_ban extends ModeleBankAccountDoc
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Fonction generant le projet sur le disque
     	 *
    @@ -94,16 +102,15 @@ class pdf_ban extends ModeleBankAccountDoc
     	 */
     	function write_file($object,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf, $hookmanager, $langs, $user;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("projects");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "projects"));
     
     		if ($conf->bank->dir_output)
     		{
    @@ -121,7 +128,7 @@ class pdf_ban extends ModeleBankAccountDoc
     		        $dir = $conf->bank->dir_output . "/" . $objectref;
     		        $file = $dir . "/" . $objectref . ".pdf";
     		    }
    -		    
    +
     			if (! file_exists($dir))
     			{
     				if (dol_mkdir($dir) < 0)
    @@ -210,9 +217,9 @@ class pdf_ban extends ModeleBankAccountDoc
     
     				$pdf->SetXY($this->marge_gauche, $curY);
     				$pdf->MultiCell(200, 3, $outputlangs->trans("BAN").' : '.$object->account_number, 0, 'L');
    -				
    -				
    -				
    +
    +
    +
     				// Show square
     				if ($pagenb == 1)
     				{
    @@ -250,7 +257,7 @@ class pdf_ban extends ModeleBankAccountDoc
     				@chmod($file, octdec($conf->global->MAIN_UMASK));
     
     				$this->result = array('fullpath'=>$file);
    -				
    +
     				return 1;   // Pas d'erreur
     			}
     			else
    @@ -282,8 +289,6 @@ class pdf_ban extends ModeleBankAccountDoc
     		global $conf,$mysoc;
     
             $default_font_size = pdf_getPDFFontSize($outputlangs);
    -
    -
     	}
     
     	/**
    @@ -370,7 +375,6 @@ class pdf_ban extends ModeleBankAccountDoc
     	    	}
     	    }
             */
    -
     	}
     
     	/**
    @@ -388,6 +392,4 @@ class pdf_ban extends ModeleBankAccountDoc
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		//return pdf_pagefoot($pdf,$outputlangs,'BANK_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php
    index 2061b03d2ae..9b49be6063f 100644
    --- a/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php
    +++ b/htdocs/core/modules/bank/doc/pdf_sepamandate.modules.php
    @@ -35,9 +35,18 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
     class pdf_sepamandate extends ModeleBankAccountDoc
     {
    -	var $emetteur;	// Objet societe qui emet
    -	var $version = 'dolibarr';
    -	
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
     	/**
     	 *	Constructor
     	 *
    @@ -45,8 +54,8 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    -		
    +		global $conf, $langs, $mysoc;
    +
     		// Translations
     		$langs->loadLangs(array("main", "bank", "withdrawals", "companies"));
     
    @@ -83,8 +92,9 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     	}
     
     
    -	/**
    -	 *	Fonction generant le projet sur le disque
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +	 *  Fonction generant le projet sur le disque
     	 *
     	 *	@param	    Project		$object   		    Object project a generer
     	 *	@param	    Translate	$outputlangs	    Lang output object
    @@ -97,15 +107,16 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     	 */
     	function write_file($object, $outputlangs, $srctemplatepath='', $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
     	{
    +        // phpcs:enable
     		global $conf, $hookmanager, $langs, $user, $mysoc;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    -		
    -		// Translations
    +
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "dict", "withdrawals", "companies", "projects", "bills"));
    -		
    +
     		if (! empty($conf->bank->dir_output))
     		{
     			//$nblignes = count($object->lines);  // This is set later with array of tasks
    @@ -124,7 +135,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     		        else $dir = $conf->bank->dir_output . "/" . $objectref;
     		        $file = $dir . "/" . $langs->transnoentitiesnoconv("SepaMandateShort").' '.$objectref . "-".dol_sanitizeFileName($object->rum).".pdf";
     		    }
    -		    
    +
     			if (! file_exists($dir))
     			{
     				if (dol_mkdir($dir) < 0)
    @@ -212,55 +223,55 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     				$nexY = $tab_top + 7;
     
     				$posY = $curY;
    -				
    +
     				$pdf->SetFont('','', $default_font_size);
    -				
    +
     				$pdf->line($this->marge_gauche, $posY, $this->page_largeur - $this->marge_droite, $posY);
     				$posY+=2;
    -				
    +
     				$pdf->SetXY($this->marge_gauche, $posY);
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $outputlangs->transnoentitiesnoconv("RUMLong").' ('.$outputlangs->transnoentitiesnoconv("RUM").')'.' : '.$object->rum, 0, 'L');
    -				
    +
     				$posY=$pdf->GetY();
     				$posY+=2;
     				$pdf->SetXY($this->marge_gauche, $posY);
     				$ics='';
     				if (! empty($conf->global->PRELEVEMENT_ICS)) $ics=$conf->global->PRELEVEMENT_ICS;
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $outputlangs->transnoentitiesnoconv("CreditorIdentifier").' ('.$outputlangs->transnoentitiesnoconv("ICS").')'.' : '.$ics, 0, 'L');
    -				
    +
     				$posY=$pdf->GetY();
     				$posY+=1;
     				$pdf->SetXY($this->marge_gauche, $posY);
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $outputlangs->transnoentitiesnoconv("CreditorName").' : '.$mysoc->name, 0, 'L');
    -				
    +
     				$posY=$pdf->GetY();
     				$posY+=1;
     				$pdf->SetXY($this->marge_gauche, $posY);
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $outputlangs->transnoentitiesnoconv("Address").' : ', 0, 'L');
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $mysoc->getFullAddress(), 0, 'L');
    -				
    +
     				$posY=$pdf->GetY();
     				$posY+=3;
    -				
    +
     				$pdf->line($this->marge_gauche, $posY, $this->page_largeur - $this->marge_droite, $posY);
    -				
    +
     				$pdf->SetFont('','', $default_font_size - 1);
    -				
    +
     				$posY+=8;
     				$pdf->SetXY($this->marge_gauche, $posY);
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 8, $outputlangs->transnoentitiesnoconv("SEPALegalText", $mysoc->name, $mysoc->name), 0, 'L');
    -				
    +
     				// Your data form
     				$posY=$pdf->GetY();
     				$posY+=8;
     				$pdf->line($this->marge_gauche, $posY, $this->page_largeur - $this->marge_droite, $posY);
     				$posY+=2;
    -				
    +
     				$pdf->SetFont('','', $default_font_size);
    -				
    +
     				$pdf->SetXY($this->marge_gauche, $posY);
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $outputlangs->transnoentitiesnoconv("SEPAFillForm"), 0, 'C');
    -				
    +
     				$thirdparty=new Societe($this->db);
     				if ($object->socid > 0) $thirdparty->fetch($object->socid);
     
    @@ -275,7 +286,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $outputlangs->transnoentitiesnoconv("SEPAFormYourName").' * : ', 0, 'L');
     				$pdf->SetXY(80, $posY);
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $sepaname, 0, 'L');
    -				
    +
     			    $address = '______________________________________________';
     				if ($thirdparty->id > 0)
     				{
    @@ -293,7 +304,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc
         				$pdf->SetXY(80, $posY);
         				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $address, 0, 'L');
     				}
    -				
    +
     				$ban = '__________________________________________________';
     				if (! empty($object->iban)) $ban = $object->iban;
     				$posY=$pdf->GetY();
    @@ -302,7 +313,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $outputlangs->transnoentitiesnoconv("SEPAFormYourBAN").' * : ', 0, 'L');
     				$pdf->SetXY(80, $posY);
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $ban, 0, 'L');
    -				
    +
     				$bic = '__________________________________________________';
     				if (! empty($object->bic)) $bic = $object->bic;
     				$posY=$pdf->GetY();
    @@ -311,8 +322,8 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $outputlangs->transnoentitiesnoconv("SEPAFormYourBIC").' * : ', 0, 'L');
     				$pdf->SetXY(80, $posY);
     				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $bic, 0, 'L');
    -				
    -				
    +
    +
     				$posY=$pdf->GetY();
     				$posY+=1;
     				$pdf->SetXY($this->marge_gauche, $posY);
    @@ -338,13 +349,13 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     				    $txt = '('.$langs->transnoentitiesnoconv("PleaseCheckOne").')';
         				$pdf->MultiCell($this->page_largeur - $this->marge_gauche - $this->marge_droite, 3, $txt, 0, 'L');
     				}
    -				
    +
     				$posY=$pdf->GetY();
     				$posY+=3;
     				$pdf->line($this->marge_gauche, $posY, $this->page_largeur - $this->marge_droite, $posY);
     				$posY+=3;
    -				
    -				
    +
    +
     				// Show square
     				if ($pagenb == 1)
     				{
    @@ -362,10 +373,10 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     				var_dump($heightforfreetext);
     				var_dump($heightforfooter);
     				var_dump($bottomlasttab);*/
    -				
    +
     				// Affiche zone infos
     				$posy=$this->_tableau_info($pdf, $object, $bottomlasttab, $outputlangs);
    -				
    +
     				/*
     				 * Pied de page
     				 */
    @@ -391,7 +402,7 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     				@chmod($file, octdec($conf->global->MAIN_UMASK));
     
     				$this->result = array('fullpath'=>$file);
    -				
    +
     				return 1;   // Pas d'erreur
     			}
     			else
    @@ -423,10 +434,10 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     		global $conf,$mysoc;
     
             $default_font_size = pdf_getPDFFontSize($outputlangs);
    -
     	}
     
    -	
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Show miscellaneous information (payment mode, payment term, ...)
     	 *
    @@ -438,30 +449,32 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     	 */
     	function _tableau_info(&$pdf, $object, $posy, $outputlangs)
     	{
    -	    global $conf, $mysoc;
    -	
    +        // phpcs:enable
    +        global $conf, $mysoc;
    +
     	    $default_font_size = pdf_getPDFFontSize($outputlangs);
    -	
    +
     	    $diffsizetitle=(empty($conf->global->PDF_DIFFSIZE_TITLE)?1:$conf->global->PDF_DIFFSIZE_TITLE);
     
     	    $posy+=$this->_signature_area($pdf, $object, $posy, $outputlangs);
    -   
    +
     	    $pdf->SetXY($this->marge_gauche, $posy);
     	    $pdf->SetFont('','', $default_font_size);
     	    $pdf->MultiCell(100, 3, $outputlangs->transnoentitiesnoconv("PleaseReturnMandate", $mysoc->email).':', 0, 'L', 0);
     	    $posy=$pdf->GetY()+2;
    -	     
    +
     	    $pdf->SetXY($this->marge_gauche, $posy);
     	    $pdf->SetFont('','', $default_font_size - $diffsizetitle);
     	    $pdf->MultiCell(100, 6, $mysoc->name, 0, 'L', 0);
     		$pdf->MultiCell(100, 6, $outputlangs->convToOutputCharset($mysoc->getFullAddress()), 0, 'L', 0);
     		$posy=$pdf->GetY()+2;
    -		
    +
     	    return $posy;
     	}
    -	
    -	
    -	
    +
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show area for the customer to sign
     	 *
    @@ -473,19 +486,20 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     	 */
     	function _signature_area(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     	    $default_font_size = pdf_getPDFFontSize($outputlangs);
     	    $tab_top = $posy + 4;
     	    $tab_hl = 4;
    -	
    +
     	    $posx = $this->marge_gauche;
     	    $pdf->SetXY($posx, $tab_top + 0);
    -	    
    +
     	    $pdf->SetFont('','', $default_font_size - 2);
    -	    
    +
     	    $pdf->MultiCell(100, 3, $outputlangs->transnoentitiesnoconv("DateOfSignature"), 0, 'L', 0);
     	    $pdf->MultiCell(100, 3, ' ');
     	    $pdf->MultiCell(100, 3, '______________________', 0, 'L', 0);
    -	    
    +
     	    $posx = 120;
     	    $largcol = ($this->page_largeur - $this->marge_droite - $posx);
     	    $useborder=0;
    @@ -494,14 +508,14 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     	    $pdf->SetFillColor(255,255,255);
     	    $pdf->SetXY($posx, $tab_top + 0);
     	    $pdf->MultiCell($largcol, $tab_hl, $outputlangs->transnoentitiesnoconv("Signature"), 0, 'L', 1);
    -	
    +
     	    $pdf->SetXY($posx, $tab_top + $tab_hl);
     	    $pdf->MultiCell($largcol, $tab_hl*3, '', 1, 'R');
    -	
    +
     	    return ($tab_hl*7);
     	}
    -	
    -	
    +
    +
     	/**
     	 *  Show top header of page.
     	 *
    @@ -592,7 +606,6 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     	    	}
     	    }
             */
    -
     	}
     
     	/**
    @@ -610,6 +623,4 @@ class pdf_sepamandate extends ModeleBankAccountDoc
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'PAYMENTORDER_FREE_TEXT',null,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/bank/modules_bank.php b/htdocs/core/modules/bank/modules_bank.php
    index b0a121d7dc5..fe43f9cee15 100644
    --- a/htdocs/core/modules/bank/modules_bank.php
    +++ b/htdocs/core/modules/bank/modules_bank.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2014	Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2014	Regis Houssin	<regis.houssin@inodbox.com>
      * Copyright (C) 2014       Marcos García   <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -31,27 +31,31 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModeleBankAccountDoc extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation modules
     	 *
          *  @param	DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
    -	 */
    -	static function liste_modeles($db,$maxfilenamelength=0)
    +     */
    +	static function liste_modeles($db, $maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
    -		$type='bankaccount';
    -		$liste=array();
    +		$type = 'bankaccount';
    +		$list = array();
     
     		include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    -		$liste=getListOfModels($db,$type,$maxfilenamelength);
    +		$list = getListOfModels($db, $type, $maxfilenamelength);
     
    -		return $liste;
    +		return $list;
     	}
     }
    -
    diff --git a/htdocs/core/modules/barcode/doc/phpbarcode.modules.php b/htdocs/core/modules/barcode/doc/phpbarcode.modules.php
    index d04c6a70c04..6d9e492d666 100644
    --- a/htdocs/core/modules/barcode/doc/phpbarcode.modules.php
    +++ b/htdocs/core/modules/barcode/doc/phpbarcode.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005      Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,8 +32,16 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/barcode.lib.php';    // This is to inc
      */
     class modPhpbarcode extends ModeleBarCode
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error='';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
     	/**
    @@ -109,7 +117,7 @@ class modPhpbarcode extends ModeleBarCode
     	 *	@param  string	 	$encoding		  Mode of encoding
     	 *	@param  string	 	$readable		  Code can be read
     	 *	@param	integer		$scale			  Scale
    -	 *  @param  integer     $nooutputiferror  No output if error 
    +	 *  @param  integer     $nooutputiferror  No output if error
     	 *	@return	int							  <0 if KO, >0 if OK
          */
     	function buildBarCode($code,$encoding,$readable='Y',$scale=1,$nooutputiferror=0)
    @@ -150,7 +158,7 @@ class modPhpbarcode extends ModeleBarCode
     	 *	@param	string   	$encoding		  Mode of encoding
     	 *	@param  string	 	$readable		  Code can be read
     	 *	@param	integer		$scale			  Scale
    -	 *  @param  integer     $nooutputiferror  No output if error 
    +	 *  @param  integer     $nooutputiferror  No output if error
     	 *	@return	int							  <0 if KO, >0 if OK
     	 */
     	function writeBarCode($code,$encoding,$readable='Y',$scale=1,$nooutputiferror=0)
    @@ -167,6 +175,4 @@ class modPhpbarcode extends ModeleBarCode
     
     		return $result;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php
    index 5b9422b15e7..ed6a7635164 100644
    --- a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php
    +++ b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2009 Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005	   Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005	   Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2015	   Francis Appels		<francis.appels@yahoo.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -31,10 +31,19 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/barcode.lib.php';	   // This is to inc
      */
     class modTcpdfbarcode extends ModeleBarCode
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error='';
    -	var $is2d = false;
    -	
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	public $is2d = false;
    +
     	/**
     	 *	Return description of numbering model
     	 *
    @@ -55,8 +64,8 @@ class modTcpdfbarcode extends ModeleBarCode
     	function isEnabled()
     	{
     		return true;
    -	}	 
    -	
    +	}
    +
     	/**
     	 *	Test si les numeros deja en vigueur dans la base ne provoquent pas de
     	 *	de conflits qui empechera cette numerotation de fonctionner.
    @@ -66,10 +75,10 @@ class modTcpdfbarcode extends ModeleBarCode
     	function canBeActivated()
     	{
     		global $langs;
    -	
    +
     		return true;
     	}
    -	
    +
     	/**
     	 *	Return true if encoding is supported
     	 *
    @@ -83,7 +92,7 @@ class modTcpdfbarcode extends ModeleBarCode
     			return 0;
     		} else {
     			return 1;
    -		}		
    +		}
     	}
     
     	/**
    @@ -99,17 +108,17 @@ class modTcpdfbarcode extends ModeleBarCode
     	function buildBarCode($code,$encoding,$readable='Y',$scale=1,$nooutputiferror=0)
     	{
     		global $_GET;
    -		
    +
     		$tcpdfEncoding = $this->getTcpdfEncodingType($encoding);
     		if (empty($tcpdfEncoding)) return -1;
    -				
    +
     		$color = array(0,0,0);
     
     		$_GET["code"]=$code;
     		$_GET["type"]=$encoding;
     		$_GET["height"]=$height;
     		$_GET["readable"]=$readable;
    -		
    +
     		if ($code) {
     			// Load the tcpdf barcode class
     			if ($this->is2d) {
    @@ -122,15 +131,15 @@ class modTcpdfbarcode extends ModeleBarCode
     				$width = 1;
     				require_once TCPDF_PATH.'tcpdf_barcodes_1d.php';
     				$barcodeobj = new TCPDFBarcode($code, $tcpdfEncoding);
    -			}		
    -			
    +			}
    +
     			dol_syslog("buildBarCode::TCPDF.getBarcodePNG");
     			$barcodeobj->getBarcodePNG($width, $height, $color);
    -			
    +
     			return 1;
     		} else {
     			return -2;
    -		}		
    +		}
     	}
     
     	/**
    @@ -172,8 +181,8 @@ class modTcpdfbarcode extends ModeleBarCode
     				$width = 1;
     				require_once TCPDF_PATH.'tcpdf_barcodes_1d.php';
     				$barcodeobj = new TCPDFBarcode($code, $tcpdfEncoding);
    -			}		
    -			
    +			}
    +
     			dol_syslog("writeBarCode::TCPDF.getBarcodePngData");
     			if ($imageData = $barcodeobj->getBarcodePngData($width, $height, $color)) {
     				if (function_exists('imagecreate')) {
    @@ -186,16 +195,16 @@ class modTcpdfbarcode extends ModeleBarCode
     				}
     			} else {
     				return -4;
    -			}			
    +			}
     		} else {
     			return -2;
     		}
     	}
    -	
    +
     	/**
     	 *	get available output_modes for tcpdf class wth its translated description
     	 *
    -	 * @param	string $dolEncodingType dolibarr barcode encoding type	
    +	 * @param	string $dolEncodingType dolibarr barcode encoding type
     	 * @return	string tcpdf encoding type
     	 */
     	public function getTcpdfEncodingType($dolEncodingType)
    @@ -232,7 +241,7 @@ class modTcpdfbarcode extends ModeleBarCode
     						'PHARMA' => 'PHARMA',
     						'PHARMA2T' => 'PHARMA2T'
     		);
    -		
    +
     		$tcpdf2dEncodingTypes = array(
     						'DATAMATRIX' => 'DATAMATRIX',
     						'PDF417' => 'PDF417',
    @@ -240,9 +249,9 @@ class modTcpdfbarcode extends ModeleBarCode
     						'QRCODE,L' => 'QRCODE,L',
     						'QRCODE,M' => 'QRCODE,M',
     						'QRCODE,Q' => 'QRCODE,Q',
    -						'QRCODE,H' => 'QRCODE,H'						
    +						'QRCODE,H' => 'QRCODE,H'
     		);
    -		
    +
     		if (array_key_exists($dolEncodingType, $tcpdf1dEncodingTypes)) {
     			$this->is2d = false;
     			return $tcpdf1dEncodingTypes[$dolEncodingType];
    @@ -251,6 +260,6 @@ class modTcpdfbarcode extends ModeleBarCode
     			return $tcpdf2dEncodingTypes[$dolEncodingType];
     		} else {
     			return '';
    -		}		 
    +		}
     	}
     }
    diff --git a/htdocs/core/modules/barcode/mod_barcode_product_standard.php b/htdocs/core/modules/barcode/mod_barcode_product_standard.php
    index 3e233eb1843..97121eebcfd 100644
    --- a/htdocs/core/modules/barcode/mod_barcode_product_standard.php
    +++ b/htdocs/core/modules/barcode/mod_barcode_product_standard.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2006-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -33,17 +33,29 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/barcode/modules_barcode.class.php'
      */
     class mod_barcode_product_standard extends ModeleNumRefBarCode
     {
    -	var $name='Standard';				// Model Name
    -	var $code_modifiable;				// Editable code
    -	var $code_modifiable_invalide;		// Modified code if it is invalid
    -	var $code_modifiable_null;			// Modified code if it is null
    -	var $code_null;						// Optional code
    -	var $version='dolibarr';    		// 'development', 'experimental', 'dolibarr'
    -	var $code_auto;                     // Automatic Numbering
    +	public $name='Standard';				// Model Name
     
    -	var $searchcode; // Search string
    -	var $numbitcounter; // Number of digits the counter
    -	var $prefixIsRequired; // The prefix field of third party must be filled when using {pre}
    +	public $code_modifiable;				// Editable code
    +
    +	public $code_modifiable_invalide;		// Modified code if it is invalid
    +
    +	public $code_modifiable_null;			// Modified code if it is null
    +
    +	public $code_null;						// Optional code
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';    		// 'development', 'experimental', 'dolibarr'
    +
    +	public $code_auto;                     // Automatic Numbering
    +
    +	public $searchcode; // Search string
    +
    +	public $numbitcounter; // Number of digits the counter
    +
    +	public $prefixIsRequired; // The prefix field of third party must be filled when using {pre}
     
     
     	/**
    @@ -223,16 +235,18 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *		Return if a code is used (by other element)
    +	 *	Return if a code is used (by other element)
     	 *
    -	 *		@param	DoliDB		$db			Handler acces base
    -	 *		@param	string		$code		Code to check
    -	 *		@param	Product		$product	Objet product
    -	 *		@return	int						0 if available, <0 if KO
    +	 *	@param	DoliDB		$db			Handler acces base
    +	 *	@param	string		$code		Code to check
    +	 *	@param	Product		$product	Objet product
    +	 *	@return	int						0 if available, <0 if KO
     	 */
     	function verif_dispo($db, $code, $product)
     	{
    +        // phpcs:enable
     		$sql = "SELECT barcode FROM ".MAIN_DB_PREFIX."product";
     		$sql.= " WHERE barcode = '".$code."'";
     		if ($product->id > 0) $sql.= " AND rowid <> ".$product->id;
    @@ -253,9 +267,9 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode
     		{
     			return -2;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return if a barcode value match syntax
     	 *
    @@ -265,6 +279,7 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode
     	 */
     	function verif_syntax($codefortest, $typefortest)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$result = 0;
    @@ -300,6 +315,4 @@ class mod_barcode_product_standard extends ModeleNumRefBarCode
     
     		return $result;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/barcode/modules_barcode.class.php b/htdocs/core/modules/barcode/modules_barcode.class.php
    index 4720ffb1341..44d7eccbb07 100644
    --- a/htdocs/core/modules/barcode/modules_barcode.class.php
    +++ b/htdocs/core/modules/barcode/modules_barcode.class.php
    @@ -29,7 +29,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
      */
     abstract class ModeleBarCode
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
     	/**
    @@ -41,7 +44,6 @@ abstract class ModeleBarCode
     	{
     		return true;
     	}
    -
     }
     
     
    @@ -50,7 +52,10 @@ abstract class ModeleBarCode
      */
     abstract class ModeleNumRefBarCode
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
         /**     Return default description of numbering model
          *
    @@ -171,6 +176,5 @@ abstract class ModeleNumRefBarCode
     
             return $s;
         }
    -
     }
     
    diff --git a/htdocs/core/modules/cheque/doc/pdf_blochet.class.php b/htdocs/core/modules/cheque/doc/pdf_blochet.class.php
    index 1e539a2019f..c4995ead47f 100644
    --- a/htdocs/core/modules/cheque/doc/pdf_blochet.class.php
    +++ b/htdocs/core/modules/cheque/doc/pdf_blochet.class.php
    @@ -34,7 +34,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/cheque/modules_chequereceipts.php'
      */
     class BordereauChequeBlochet extends ModeleChequeReceipts
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
     	/**
     	 *	Constructor
    @@ -45,8 +49,8 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
     	{
     		global $conf,$langs,$mysoc;
     
    -		$langs->load("main");
    -		$langs->load("bills");
    +		// Load traductions files requiredby by page
    +		$langs->loadLangs(array("main", "bills"));
     
     		$this->db = $db;
     		$this->name = "blochet";
    @@ -74,10 +78,11 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
     		$this->tab_height = 200;	//$this->line_height * $this->line_per_page;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Fonction to generate document on disk
     	 *
    -	 *	@param	RemiseCheque	$object			Object RemiseCheque			
    +	 *	@param	RemiseCheque	$object			Object RemiseCheque
     	 *	@param	string			$_dir			Directory
     	 *	@param	string			$number			Number
     	 *	@param	Translate		$outputlangs	Lang output object
    @@ -85,6 +90,7 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
     	 */
     	function write_file($object, $_dir, $number, $outputlangs)
     	{
    +        // phpcs:enable
     		global $user,$conf,$langs,$hookmanager;
     
             if (! is_object($outputlangs)) $outputlangs=$langs;
    @@ -92,11 +98,8 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
             $sav_charset_output=$outputlangs->charset_output;
             if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("products");
    -        $outputlangs->load("compta");
    +        // Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "companies", "bills", "products", "compta"));
     
     		$dir = $_dir . "/".get_exdir($number,0,1,0,$object,'cheque').$number;
     
    @@ -194,12 +197,13 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
     			@chmod($file, octdec($conf->global->MAIN_UMASK));
     
     		$this->result = array('fullpath'=>$file);
    -		
    +
             $outputlangs->charset_output=$sav_charset_output;
     	    return 1;   // Pas d'erreur
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Generate Header
     	 *
    @@ -211,11 +215,12 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
     	 */
     	function Header(&$pdf, $page, $pages, $outputlangs)
     	{
    +        // phpcs:enable
     		global $langs;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    -		$outputlangs->load("compta");
    -		$outputlangs->load("banks");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("compta", "banks"));
     
     		$title = $outputlangs->transnoentities("CheckReceipt");
     		$pdf->SetFont('','B', $default_font_size);
    @@ -306,6 +311,7 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Output array
     	 *
    @@ -317,6 +323,7 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
     	 */
     	function Body(&$pdf, $pagenb, $pages, $outputlangs)
     	{
    +        // phpcs:enable
     		// x=10 - Num
     		// x=30 - Banque
     		// x=100 - Emetteur
    @@ -387,8 +394,7 @@ class BordereauChequeBlochet extends ModeleChequeReceipts
     		{
     		    $newfreetext=make_substitutions($conf->global->$paramfreetext,$substitutionarray);
     		}
    -		
    +
     		return pdf_pagefoot($pdf,$outputlangs,$newfreetext,$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
     }
    -
    diff --git a/htdocs/core/modules/cheque/mod_chequereceipt_mint.php b/htdocs/core/modules/cheque/mod_chequereceipt_mint.php
    index 680357ce9bb..ba617787cbe 100644
    --- a/htdocs/core/modules/cheque/mod_chequereceipt_mint.php
    +++ b/htdocs/core/modules/cheque/mod_chequereceipt_mint.php
    @@ -29,10 +29,20 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/cheque/modules_chequereceipts.php
      */
     class mod_chequereceipt_mint extends ModeleNumRefChequeReceipts
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefix='CHK';
    -	var $error='';
    -	var $name='Mint';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='CHK';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	public $name='Mint';
     
     
         /**
    @@ -135,6 +145,7 @@ class mod_chequereceipt_mint extends ModeleNumRefChequeReceipts
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
    @@ -144,7 +155,7 @@ class mod_chequereceipt_mint extends ModeleNumRefChequeReceipts
     	 */
     	function chequereceipt_get_num($objsoc,$objforref)
     	{
    +        // phpcs:enable
     		return $this->getNextValue($objsoc,$objforref);
     	}
    -
     }
    diff --git a/htdocs/core/modules/cheque/mod_chequereceipt_thyme.php b/htdocs/core/modules/cheque/mod_chequereceipt_thyme.php
    index 69ee2ff2b73..6e211fb4ace 100644
    --- a/htdocs/core/modules/cheque/mod_chequereceipt_thyme.php
    +++ b/htdocs/core/modules/cheque/mod_chequereceipt_thyme.php
    @@ -30,9 +30,18 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/cheque/modules_chequereceipts.php
      */
     class mod_chequereceipt_thyme extends ModeleNumRefChequeReceipts
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $name = 'Thyme';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	public $name = 'Thyme';
     
     
         /**
    @@ -42,7 +51,7 @@ class mod_chequereceipt_thyme extends ModeleNumRefChequeReceipts
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    @@ -124,6 +133,7 @@ class mod_chequereceipt_thyme extends ModeleNumRefChequeReceipts
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
    @@ -133,8 +143,7 @@ class mod_chequereceipt_thyme extends ModeleNumRefChequeReceipts
          */
         function chequereceipt_get_num($objsoc,$objforref)
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$objforref);
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/cheque/modules_chequereceipts.php b/htdocs/core/modules/cheque/modules_chequereceipts.php
    index bbf20761f5f..5a7920ce4f1 100644
    --- a/htdocs/core/modules/cheque/modules_chequereceipts.php
    +++ b/htdocs/core/modules/cheque/modules_chequereceipts.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016      Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -36,7 +36,10 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';   // Requ
      */
     abstract class ModeleNumRefChequeReceipts
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *	Return if a module can be used or not
    @@ -115,12 +118,16 @@ abstract class ModeleNumRefChequeReceipts
     
     /**
      *	\class      ModeleChequeReceipts
    - *	\brief      Classe mere des modeles de 
    + *	\brief      Classe mere des modeles de
      */
     abstract class ModeleChequeReceipts extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation modules
     	 *
    @@ -130,6 +137,7 @@ abstract class ModeleChequeReceipts extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='chequereceipt';
    @@ -201,7 +209,6 @@ function chequereceipt_pdf_create($db, $id, $message, $modele, $outputlangs)
     			dol_print_error($db,"chequereceipt_pdf_create Error: ".$obj->error);
     			return -1;
     		}
    -
     	}
     	else
     	{
    @@ -209,4 +216,3 @@ function chequereceipt_pdf_create($db, $id, $message, $modele, $outputlangs)
     		return -1;
     	}
     }
    -
    diff --git a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
    index 91c243f12d8..bd5c870e0ba 100644
    --- a/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
    +++ b/htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
    @@ -3,21 +3,23 @@
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2014		Marcos García		<marcosgdf@gmail.com>
      * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    -*
    -* This program is free software; you can redistribute it and/or modify
    -* it under the terms of the GNU General Public License as published by
    -* the Free Software Foundation; either version 3 of the License, or
    -* (at your option) any later version.
    -*
    -* This program is distributed in the hope that it will be useful,
    -* but WITHOUT ANY WARRANTY; without even the implied warranty of
    -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -* GNU General Public License for more details.
    -*
    -* You should have received a copy of the GNU General Public License
    -* along with this program. If not, see <http://www.gnu.org/licenses/>.
    -* or see http://www.gnu.org/
    -*/
    + * Copyright (C) 2018       Philippe Grand      <philippe.grand@atoo-net.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
     
     /**
      *	\file       htdocs/core/modules/commande/doc/doc_generic_order_odt.modules.php
    @@ -38,10 +40,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_order_odt extends ModelePDFCommandes
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -51,10 +66,10 @@ class doc_generic_order_odt extends ModelePDFCommandes
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -98,8 +113,8 @@ class doc_generic_order_odt extends ModelePDFCommandes
     	{
     		global $conf,$langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("errors","companies"));
     
     		$form = new Form($this->db);
     
    @@ -177,6 +192,7 @@ class doc_generic_order_odt extends ModelePDFCommandes
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -190,6 +206,7 @@ class doc_generic_order_odt extends ModelePDFCommandes
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager;
     
     		if (empty($srctemplatepath))
    @@ -211,10 +228,7 @@ class doc_generic_order_odt extends ModelePDFCommandes
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
     
     		if ($conf->commande->dir_output)
     		{
    @@ -338,6 +352,7 @@ class doc_generic_order_odt extends ModelePDFCommandes
     				catch(Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -353,6 +368,7 @@ class doc_generic_order_odt extends ModelePDFCommandes
     				}
     				catch(OdfException $e)
     				{
    +                    dol_syslog($e->getMessage(), LOG_INFO);
     				}
     
     				// Define substitution array
    @@ -389,6 +405,7 @@ class doc_generic_order_odt extends ModelePDFCommandes
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Replace tags of lines
    @@ -421,9 +438,11 @@ class doc_generic_order_odt extends ModelePDFCommandes
     								}
     								catch(OdfException $e)
     								{
    +                                    dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +                                    dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -447,6 +466,7 @@ class doc_generic_order_odt extends ModelePDFCommandes
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -460,15 +480,17 @@ class doc_generic_order_odt extends ModelePDFCommandes
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
     					}catch (Exception $e){
    -						$this->error=$e->getMessage();
    +                        $this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
     				else {
     					try {
     					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    -						$this->error=$e->getMessage();
    +					} catch (Exception $e) {
    +                        $this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -494,6 +516,4 @@ class doc_generic_order_odt extends ModelePDFCommandes
     
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php
    index 99acc394475..d35c6c7f177 100644
    --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php
    +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php
    @@ -1,7 +1,7 @@
     <?php
    -/* Copyright (C) 2004-2014	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    - * Copyright (C) 2008		Raphael Bertrand	<raphael.bertrand@resultic.fr>
    +/* Copyright (C) 2004-2014  Laurent Destailleur <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012  Regis Houssin		<regis.houssin@inodbox.com>
    + * Copyright (C) 2008       Raphael Bertrand	<raphael.bertrand@resultic.fr>
      * Copyright (C) 2010-2013	Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2012      	Christophe Battarel <christophe.battarel@altairis.fr>
      * Copyright (C) 2012       Cedric Salvador     <csalvador@gpcsolutions.fr>
    @@ -27,7 +27,7 @@
     /**
      *	\file       htdocs/core/modules/commande/doc/pdf_einstein.modules.php
      *	\ingroup    commande
    - *	\brief      Fichier de la classe permettant de generer les commandes au modele Einstein
    + *	\brief      File of Class to generate PDF orders with template Einstein
      */
     
     require_once DOL_DOCUMENT_ROOT.'/core/modules/commande/modules_commande.php';
    @@ -38,7 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
     
     
     /**
    - *	Classe to generate PDF orders with template Einstein
    + *	Class to generate PDF orders with template Einstein
      */
     class pdf_einstein extends ModelePDFCommandes
     {
    @@ -69,9 +69,9 @@ class pdf_einstein extends ModelePDFCommandes
     
     	/**
          * @var array() Minimum version of PHP required by module.
    -	 * e.g.: PHP ≥ 5.3 = array(5, 3)
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
          */
    -	public $phpmin = array(5, 2);
    +	public $phpmin = array(5, 4);
     
     	/**
          * Dolibarr version of the loaded document
    @@ -79,15 +79,46 @@ class pdf_einstein extends ModelePDFCommandes
          */
     	public $version = 'dolibarr';
     
    +	/**
    +     * @var int page_largeur
    +     */
         public $page_largeur;
    +
    +    /**
    +     * @var int page_hauteur
    +     */
         public $page_hauteur;
    +
    +    /**
    +     * @var array format
    +     */
         public $format;
    +
    +    /**
    +     * @var int marge_gauche
    +     */
     	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
     	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
     	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
     	public $marge_basse;
     
    -    public $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +    public $emetteur;
     
     
     	/**
    @@ -118,13 +149,13 @@ class pdf_einstein extends ModelePDFCommandes
     		$this->marge_haute =isset($conf->global->MAIN_PDF_MARGIN_TOP)?$conf->global->MAIN_PDF_MARGIN_TOP:10;
     		$this->marge_basse =isset($conf->global->MAIN_PDF_MARGIN_BOTTOM)?$conf->global->MAIN_PDF_MARGIN_BOTTOM:10;
     
    -		$this->option_logo = 1;                    // Affiche logo
    -		$this->option_tva = 1;                     // Gere option tva FACTURE_TVAOPTION
    -		$this->option_modereg = 1;                 // Affiche mode reglement
    -		$this->option_condreg = 1;                 // Affiche conditions reglement
    -		$this->option_codeproduitservice = 1;      // Affiche code produit-service
    -		$this->option_multilang = 1;               // Dispo en plusieurs langues
    -		$this->option_escompte = 0;                // Affiche si il y a eu escompte
    +		$this->option_logo = 1;                    // Display logo
    +		$this->option_tva = 1;                     // Manage the vat option FACTURE_TVAOPTION
    +		$this->option_modereg = 1;                 // Display payment mode
    +		$this->option_condreg = 1;                 // Display payment terms
    +		$this->option_codeproduitservice = 1;      // Display product-service code
    +		$this->option_multilang = 1;               // Available in several languages
    +		$this->option_escompte = 0;                // Displays if there has been a discount
     		$this->option_credit_note = 0;             // Support credit notes
     		$this->option_freetext = 1;				   // Support add of a personalised text
     		$this->option_draft_watermark = 1;		   // Support add of a watermark on drafts
    @@ -172,7 +203,8 @@ class pdf_einstein extends ModelePDFCommandes
     		$this->atleastonediscount=0;
     	}
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Function to build pdf onto disk
          *
          *  @param		Object		$object				Object to generate
    @@ -185,13 +217,14 @@ class pdf_einstein extends ModelePDFCommandes
     	 */
     	function write_file($object, $outputlangs, $srctemplatepath='', $hidedetails=0, $hidedesc=0, $hideref=0)
     	{
    +        // phpcs:enable
     		global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblignes;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		// Translations
    +		// Load translation files required by the page
     		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries"));
     
     		$nblignes = count($object->lines);
    @@ -613,6 +646,7 @@ class pdf_einstein extends ModelePDFCommandes
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show payments table
          *
    @@ -624,10 +658,11 @@ class pdf_einstein extends ModelePDFCommandes
     	 */
     	function _tableau_versements(&$pdf, $object, $posy, $outputlangs)
     	{
    -
    +        // phpcs:enable
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Show miscellaneous information (payment mode, payment term, ...)
     	 *
    @@ -639,6 +674,7 @@ class pdf_einstein extends ModelePDFCommandes
     	 */
     	function _tableau_info(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -814,6 +850,7 @@ class pdf_einstein extends ModelePDFCommandes
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show total to pay
     	 *
    @@ -826,6 +863,7 @@ class pdf_einstein extends ModelePDFCommandes
     	 */
     	function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     	    global $conf,$mysoc;
     
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
    @@ -929,7 +967,6 @@ class pdf_einstein extends ModelePDFCommandes
     
     								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
     								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    -
     							}
     						}
     					}
    @@ -1201,7 +1238,7 @@ class pdf_einstein extends ModelePDFCommandes
     	{
     		global $conf,$langs,$hookmanager;
     
    -		// Translations
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "bills", "propal", "orders", "companies"));
     
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
    @@ -1223,27 +1260,30 @@ class pdf_einstein extends ModelePDFCommandes
     		$pdf->SetXY($this->marge_gauche,$posy);
     
     		// Logo
    -		$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
    -		if ($this->emetteur->logo)
    +		if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO))
     		{
    -			if (is_readable($logo))
    +			$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
    +			if ($this->emetteur->logo)
     			{
    -			    $height=pdf_getHeightForLogo($logo);
    -			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
    +				if (is_readable($logo))
    +				{
    +				    $height=pdf_getHeightForLogo($logo);
    +				    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
    +				}
    +				else
    +				{
    +					$pdf->SetTextColor(200,0,0);
    +					$pdf->SetFont('','B', $default_font_size -2);
    +					$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
    +					$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
    +				}
     			}
     			else
     			{
    -				$pdf->SetTextColor(200,0,0);
    -				$pdf->SetFont('','B', $default_font_size -2);
    -				$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
    -				$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
    +				$text=$this->emetteur->name;
    +				$pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
     			}
     		}
    -		else
    -		{
    -			$text=$this->emetteur->name;
    -			$pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
    -		}
     
     		$pdf->SetFont('','B', $default_font_size + 3);
     		$pdf->SetXY($posx,$posy);
    @@ -1411,5 +1451,4 @@ class pdf_einstein extends ModelePDFCommandes
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'ORDER_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    diff --git a/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php
    new file mode 100644
    index 00000000000..07173f7db13
    --- /dev/null
    +++ b/htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php
    @@ -0,0 +1,1672 @@
    +<?php
    +/* Copyright (C) 2004-2014	Laurent Destailleur	<eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
    + * Copyright (C) 2008		Raphael Bertrand	<raphael.bertrand@resultic.fr>
    + * Copyright (C) 2010-2013	Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2012      	Christophe Battarel <christophe.battarel@altairis.fr>
    + * Copyright (C) 2012       Cedric Salvador     <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2015       Marcos García       <marcosgdf@gmail.com>
    + * Copyright (C) 2017       Ferran Marcet       <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
    +
    +/**
    + *	\file       htdocs/core/modules/commande/doc/pdf_eratosthene.modules.php
    + *	\ingroup    commande
    + *	\brief      Fichier de la classe permettant de generer les commandes au modele Eratosthène
    + */
    +
    +require_once DOL_DOCUMENT_ROOT.'/core/modules/commande/modules_commande.php';
    +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
    +
    +
    +/**
    + *	Classe to generate PDF orders with template Eratosthene
    + */
    +class pdf_eratosthene extends ModelePDFCommandes
    +{
    +    /**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
    +
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
    +
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
    +
    +    /**
    +     * @var int 	Save the name of generated file as the main doc when generating a doc with this template
    +     */
    +    public $update_main_doc_field;
    +
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +	/**
    +     * @var array Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.3 = array(5, 3)
    +     */
    +	public $phpmin = array(5, 2);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'development';
    +
    +    public $page_largeur;
    +    public $page_hauteur;
    +    public $format;
    +	public $marge_gauche;
    +	public $marge_droite;
    +	public $marge_haute;
    +	public $marge_basse;
    +
    +    public $emetteur;	// Objet societe qui emet
    +
    +
    +	/**
    +	 *	Constructor
    +	 *
    +	 *  @param		DoliDB		$db      Database handler
    +	 */
    +	public function __construct($db)
    +	{
    +		global $conf,$langs,$mysoc;
    +
    +		// Translations
    +		$langs->loadLangs(array("main", "bills", "products"));
    +
    +		$this->db = $db;
    +		$this->name = "eratosthene";
    +		$this->description = $langs->trans('PDFEratostheneDescription');
    +		$this->update_main_doc_field = 1;		// Save the name of generated file as the main doc when generating a doc with this template
    +
    +		// Dimension page
    +		$this->type = 'pdf';
    +		$formatarray=pdf_getFormat();
    +		$this->page_largeur = $formatarray['width'];
    +		$this->page_hauteur = $formatarray['height'];
    +		$this->format = array($this->page_largeur,$this->page_hauteur);
    +		$this->marge_gauche=isset($conf->global->MAIN_PDF_MARGIN_LEFT)?$conf->global->MAIN_PDF_MARGIN_LEFT:10;
    +		$this->marge_droite=isset($conf->global->MAIN_PDF_MARGIN_RIGHT)?$conf->global->MAIN_PDF_MARGIN_RIGHT:10;
    +		$this->marge_haute =isset($conf->global->MAIN_PDF_MARGIN_TOP)?$conf->global->MAIN_PDF_MARGIN_TOP:10;
    +		$this->marge_basse =isset($conf->global->MAIN_PDF_MARGIN_BOTTOM)?$conf->global->MAIN_PDF_MARGIN_BOTTOM:10;
    +
    +		$this->option_logo = 1;                    // Affiche logo
    +		$this->option_tva = 1;                     // Gere option tva FACTURE_TVAOPTION
    +		$this->option_modereg = 1;                 // Affiche mode reglement
    +		$this->option_condreg = 1;                 // Affiche conditions reglement
    +		$this->option_codeproduitservice = 1;      // Affiche code produit-service
    +		$this->option_multilang = 1;               // Dispo en plusieurs langues
    +		$this->option_escompte = 0;                // Affiche si il y a eu escompte
    +		$this->option_credit_note = 0;             // Support credit notes
    +		$this->option_freetext = 1;				   // Support add of a personalised text
    +		$this->option_draft_watermark = 1;		   // Support add of a watermark on drafts
    +
    +		$this->franchise=!$mysoc->tva_assuj;
    +
    +		// Get source company
    +		$this->emetteur=$mysoc;
    +		if (empty($this->emetteur->country_code)) $this->emetteur->country_code=substr($langs->defaultlang,-2);    // By default, if was not defined
    +
    +		// Define position of columns
    +		$this->posxdesc=$this->marge_gauche+1;
    +
    +
    +		$this->tva=array();
    +		$this->localtax1=array();
    +		$this->localtax2=array();
    +		$this->atleastoneratenotnull=0;
    +		$this->atleastonediscount=0;
    +	}
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
    +    /**
    +     *  Function to build pdf onto disk
    +     *
    +     *  @param		Object		$object				Object to generate
    +     *  @param		Translate	$outputlangs		Lang output object
    +     *  @param		string		$srctemplatepath	Full path of source filename for generator using a template file
    +     *  @param		int			$hidedetails		Do not show line details
    +     *  @param		int			$hidedesc			Do not show desc
    +     *  @param		int			$hideref			Do not show ref
    +     *  @return     int             			    1=OK, 0=KO
    +	 */
    +	public function write_file($object, $outputlangs, $srctemplatepath='', $hidedetails=0, $hidedesc=0, $hideref=0)
    +	{
    +	    // phpcs:enable
    +		global $user, $langs, $conf, $mysoc, $db, $hookmanager, $nblignes;
    +
    +		if (! is_object($outputlangs)) $outputlangs=$langs;
    +		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
    +		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    +
    +		// Translations
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries"));
    +
    +		$nblignes = count($object->lines);
    +
    +		if ($conf->commande->dir_output)
    +		{
    +            $object->fetch_thirdparty();
    +
    +            $deja_regle = 0;
    +
    +            // Definition of $dir and $file
    +			if ($object->specimen)
    +			{
    +				$dir = $conf->commande->dir_output;
    +				$file = $dir . "/SPECIMEN.pdf";
    +			}
    +			else
    +			{
    +				$objectref = dol_sanitizeFileName($object->ref);
    +				$dir = $conf->commande->dir_output . "/" . $objectref;
    +				$file = $dir . "/" . $objectref . ".pdf";
    +			}
    +
    +			if (! file_exists($dir))
    +			{
    +				if (dol_mkdir($dir) < 0)
    +				{
    +					$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
    +					return 0;
    +				}
    +			}
    +
    +			if (file_exists($dir))
    +			{
    +				// Add pdfgeneration hook
    +				if (! is_object($hookmanager))
    +				{
    +					include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
    +					$hookmanager=new HookManager($this->db);
    +				}
    +				$hookmanager->initHooks(array('pdfgeneration'));
    +				$parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs);
    +				global $action;
    +				$reshook=$hookmanager->executeHooks('beforePDFCreation',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
    +
    +				// Create pdf instance
    +				$pdf=pdf_getInstance($this->format);
    +				$default_font_size = pdf_getPDFFontSize($outputlangs);	// Must be after pdf_getInstance
    +				$pdf->SetAutoPageBreak(1,0);
    +
    +				$heightforinfotot = 40;	// Height reserved to output the info and total part
    +		        $heightforfreetext= (isset($conf->global->MAIN_PDF_FREETEXT_HEIGHT)?$conf->global->MAIN_PDF_FREETEXT_HEIGHT:5);	// Height reserved to output the free text on last page
    +		        $heightforfooter = $this->marge_basse + (empty($conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS)?12:22);	// Height reserved to output the footer (value include bottom margin)
    +
    +                if (class_exists('TCPDF'))
    +                {
    +                    $pdf->setPrintHeader(false);
    +                    $pdf->setPrintFooter(false);
    +                }
    +                $pdf->SetFont(pdf_getPDFFont($outputlangs));
    +                // Set path to the background PDF File
    +                if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND))
    +                {
    +                    $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND);
    +                    $tplidx = $pdf->importPage(1);
    +                }
    +
    +				$pdf->Open();
    +				$pagenb=0;
    +				$pdf->SetDrawColor(128,128,128);
    +
    +				$pdf->SetTitle($outputlangs->convToOutputCharset($object->ref));
    +				$pdf->SetSubject($outputlangs->transnoentities("PdfOrderTitle"));
    +				$pdf->SetCreator("Dolibarr ".DOL_VERSION);
    +				$pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs)));
    +				$pdf->SetKeyWords($outputlangs->convToOutputCharset($object->ref)." ".$outputlangs->transnoentities("PdfOrderTitle")." ".$outputlangs->convToOutputCharset($object->thirdparty->name));
    +				if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false);
    +
    +				$pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite);   // Left, Top, Right
    +
    +				/// Does we have at least one line with discount $this->atleastonediscount
    +				foreach ($object->lines as $line) {
    +				    if ($line->remise_percent){
    +				        $this->atleastonediscount = true;
    +				        break;
    +				    }
    +				}
    +
    +				if (empty($this->atleastonediscount) && empty($conf->global->PRODUCT_USE_UNITS))
    +				{
    +					$this->posxpicture+=($this->postotalht - $this->posxdiscount);
    +					$this->posxtva+=($this->postotalht - $this->posxdiscount);
    +					$this->posxup+=($this->postotalht - $this->posxdiscount);
    +					$this->posxqty+=($this->postotalht - $this->posxdiscount);
    +					$this->posxdiscount+=($this->postotalht - $this->posxdiscount);
    +					//$this->postotalht;
    +				}
    +
    +				// New page
    +				$pdf->AddPage();
    +				if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +				$pagenb++;
    +				$top_shift = $this->_pagehead($pdf, $object, 1, $outputlangs);
    +				$pdf->SetFont('','', $default_font_size - 1);
    +				$pdf->MultiCell(0, 3, '');		// Set interline to 3
    +				$pdf->SetTextColor(0,0,0);
    +
    +
    +				$tab_top = 90+$top_shift;
    +				$tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42+$top_shift:10);
    +
    +				// Incoterm
    +				if ($conf->incoterm->enabled)
    +				{
    +					$desc_incoterms = $object->getIncotermsForPDF();
    +					if ($desc_incoterms)
    +					{
    +						$tab_top -= 2;
    +
    +						$pdf->SetFont('','', $default_font_size - 1);
    +						$pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top-1, dol_htmlentitiesbr($desc_incoterms), 0, 1);
    +						$nexY = $pdf->GetY();
    +						$height_incoterms=$nexY-$tab_top;
    +
    +						// Rect prend une longueur en 3eme param
    +						$pdf->SetDrawColor(192,192,192);
    +						$pdf->Rect($this->marge_gauche, $tab_top-1, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $height_incoterms+1);
    +
    +						$tab_top = $nexY+6;
    +					}
    +				}
    +
    +				// Affiche notes
    +				$notetoshow=empty($object->note_public)?'':$object->note_public;
    +				if (! empty($conf->global->MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE))
    +				{
    +					// Get first sale rep
    +					if (is_object($object->thirdparty))
    +					{
    +						$salereparray=$object->thirdparty->getSalesRepresentatives($user);
    +						$salerepobj=new User($this->db);
    +						$salerepobj->fetch($salereparray[0]['id']);
    +						if (! empty($salerepobj->signature)) $notetoshow=dol_concatdesc($notetoshow, $salerepobj->signature);
    +					}
    +				}
    +
    +				$pagenb = $pdf->getPage();
    +				if ($notetoshow)
    +				{
    +				    $tab_width = $this->page_largeur-$this->marge_gauche-$this->marge_droite;
    +				    $pageposbeforenote = $pagenb;
    +
    +				    $substitutionarray=pdf_getSubstitutionArray($outputlangs, null, $object);
    +				    complete_substitutions_array($substitutionarray, $outputlangs, $object);
    +				    $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs);
    +
    +					$tab_top -= 2;
    +
    +				    $pdf->startTransaction();
    +
    +				    $pdf->SetFont('','', $default_font_size - 1);
    +				    $pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top, dol_htmlentitiesbr($notetoshow), 0, 1);
    +				    // Description
    +				    $pageposafternote=$pdf->getPage();
    +				    $posyafter = $pdf->GetY();
    +
    +				    if($pageposafternote>$pageposbeforenote )
    +				    {
    +				        $pdf->rollbackTransaction(true);
    +
    +				        // prepar pages to receive notes
    +				        while ($pagenb < $pageposafternote) {
    +				            $pdf->AddPage();
    +				            $pagenb++;
    +				            if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +				            if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +				            // $this->_pagefoot($pdf,$object,$outputlangs,1);
    +				            $pdf->setTopMargin($tab_top_newpage);
    +				            // The only function to edit the bottom margin of current page to set it.
    +				            $pdf->setPageOrientation('', 1, $heightforfooter + $heightforfreetext);
    +				        }
    +
    +				        // back to start
    +				        $pdf->setPage($pageposbeforenote);
    +				        $pdf->setPageOrientation('', 1, $heightforfooter + $heightforfreetext);
    +				        $pdf->SetFont('','', $default_font_size - 1);
    +				        $pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top, dol_htmlentitiesbr($notetoshow), 0, 1);
    +				        $pageposafternote=$pdf->getPage();
    +
    +				        $posyafter = $pdf->GetY();
    +
    +				        if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+20)))	// There is no space left for total+free text
    +				        {
    +				            $pdf->AddPage('','',true);
    +				            $pagenb++;
    +				            $pageposafternote++;
    +				            $pdf->setPage($pageposafternote);
    +				            $pdf->setTopMargin($tab_top_newpage);
    +				            // The only function to edit the bottom margin of current page to set it.
    +				            $pdf->setPageOrientation('', 1, $heightforfooter + $heightforfreetext);
    +				            //$posyafter = $tab_top_newpage;
    +				        }
    +
    +
    +				        // apply note frame to previus pages
    +				        $i = $pageposbeforenote;
    +				        while ($i < $pageposafternote) {
    +				            $pdf->setPage($i);
    +
    +
    +				            $pdf->SetDrawColor(128,128,128);
    +				            // Draw note frame
    +				            if($i>$pageposbeforenote){
    +				                $height_note = $this->page_hauteur - ($tab_top_newpage + $heightforfooter);
    +				                $pdf->Rect($this->marge_gauche, $tab_top_newpage-1, $tab_width, $height_note + 1);
    +				            }
    +				            else{
    +				                $height_note = $this->page_hauteur - ($tab_top + $heightforfooter);
    +				                $pdf->Rect($this->marge_gauche, $tab_top-1, $tab_width, $height_note + 1);
    +				            }
    +
    +				            // Add footer
    +				            $pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.
    +				            $this->_pagefoot($pdf,$object,$outputlangs,1);
    +
    +				            $i++;
    +				        }
    +
    +				        // apply note frame to last page
    +				        $pdf->setPage($pageposafternote);
    +				        if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +				        if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +				        $height_note=$posyafter-$tab_top_newpage;
    +				        $pdf->Rect($this->marge_gauche, $tab_top_newpage-1, $tab_width, $height_note+1);
    +				    }
    +				    else // No pagebreak
    +				    {
    +				        $pdf->commitTransaction();
    +				        $posyafter = $pdf->GetY();
    +				        $height_note=$posyafter-$tab_top;
    +				        $pdf->Rect($this->marge_gauche, $tab_top-1, $tab_width, $height_note+1);
    +
    +
    +				        if($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+20)) )
    +				        {
    +				            // not enough space, need to add page
    +				            $pdf->AddPage('','',true);
    +				            $pagenb++;
    +				            $pageposafternote++;
    +				            $pdf->setPage($pageposafternote);
    +				            if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +				            if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +
    +				            $posyafter = $tab_top_newpage;
    +				        }
    +				    }
    +
    +				    $tab_height = $tab_height - $height_note;
    +				    $tab_top = $posyafter +6;
    +				}
    +				else
    +				{
    +					$height_note=0;
    +				}
    +
    +				$iniY = $tab_top + 7;
    +				$curY = $tab_top + 7;
    +				$nexY = $tab_top + 7;
    +
    +				// Use new auto collum system
    +				$this->prepareArrayColumnField($object,$outputlangs,$hidedetails,$hidedesc,$hideref);
    +
    +				// Loop on each lines
    +				$pageposbeforeprintlines=$pdf->getPage();
    +				$pagenb = $pageposbeforeprintlines;
    +				for ($i = 0 ; $i < $nblignes ; $i++)
    +				{
    +					$curY = $nexY;
    +					$pdf->SetFont('','', $default_font_size - 1);   // Into loop to work with multipage
    +					$pdf->SetTextColor(0,0,0);
    +
    +					$pdf->setTopMargin($tab_top_newpage);
    +					$pdf->setPageOrientation('', 1, $heightforfooter+$heightforfreetext+$heightforinfotot);	// The only function to edit the bottom margin of current page to set it.
    +					$pageposbefore=$pdf->getPage();
    +
    +					// Description of product line
    +					$curX = $this->posxdesc-1;
    +
    +					$showpricebeforepagebreak=1;
    +
    +					if($this->getColumnStatus('desc'))
    +					{
    +    					$pdf->startTransaction();
    +    					pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->getColumnContentWidth('desc'),3,$this->getColumnContentXStart('desc'),$curY,$hideref,$hidedesc);
    +    					$pageposafter=$pdf->getPage();
    +    					if ($pageposafter > $pageposbefore)	// There is a pagebreak
    +    					{
    +    						$pdf->rollbackTransaction(true);
    +    						$pageposafter=$pageposbefore;
    +    						//print $pageposafter.'-'.$pageposbefore;exit;
    +    						$pdf->setPageOrientation('', 1, $heightforfooter);	// The only function to edit the bottom margin of current page to set it.
    +    						pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->getColumnContentWidth('desc'),3,$this->getColumnContentXStart('desc'),$curY,$hideref,$hidedesc);
    +    						$pageposafter=$pdf->getPage();
    +    						$posyafter=$pdf->GetY();
    +    						if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot)))	// There is no space left for total+free text
    +    						{
    +    							if ($i == ($nblignes-1))	// No more lines, and no space left to show total, so we create a new page
    +    							{
    +    								$pdf->AddPage('','',true);
    +    								if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +    								//if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +    								$pdf->setPage($pageposafter+1);
    +    							}
    +    						}
    +    						else
    +    						{
    +    							// We found a page break
    +    							$showpricebeforepagebreak=0;
    +    						}
    +    					}
    +    					else	// No pagebreak
    +    					{
    +    						$pdf->commitTransaction();
    +    					}
    +    					$posYAfterDescription=$pdf->GetY();
    +					}
    +
    +					$nexY = $pdf->GetY();
    +					$pageposafter=$pdf->getPage();
    +
    +					$pdf->setPage($pageposbefore);
    +					$pdf->setTopMargin($this->marge_haute);
    +					$pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.
    +
    +					// We suppose that a too long description is moved completely on next page
    +					if ($pageposafter > $pageposbefore && empty($showpricebeforepagebreak)) {
    +						$pdf->setPage($pageposafter); $curY = $tab_top_newpage;
    +					}
    +
    +					$pdf->SetFont('','',  $default_font_size - 1);   // On repositionne la police par defaut
    +
    +					// VAT Rate
    +					if ($this->getColumnStatus('vat'))
    +					{
    +					    $vat_rate = pdf_getlinevatrate($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'vat', $vat_rate);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +					// Unit price before discount
    +					if ($this->getColumnStatus('subprice'))
    +					{
    +					    $up_excl_tax = pdf_getlineupexcltax($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'subprice', $up_excl_tax);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +					// Quantity
    +					// Enough for 6 chars
    +					if ($this->getColumnStatus('qty'))
    +					{
    +					    $qty = pdf_getlineqty($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'qty', $qty);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +
    +					// Unit
    +					if ($this->getColumnStatus('unit'))
    +					{
    +					    $unit = pdf_getlineunit($object, $i, $outputlangs, $hidedetails, $hookmanager);
    +					    $this->printStdColumnContent($pdf, $curY, 'unit', $unit);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +					// Discount on line
    +					if ($this->getColumnStatus('discount') && $object->lines[$i]->remise_percent)
    +					{
    +					    $remise_percent = pdf_getlineremisepercent($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'discount', $remise_percent);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +					// Total HT line
    +					if ($this->getColumnStatus('totalexcltax'))
    +					{
    +					    $total_excl_tax = pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'totalexcltax', $total_excl_tax);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +
    +					$parameters=array(
    +					    'object' => $object,
    +					    'i' => $i,
    +					    'pdf' =>& $pdf,
    +					    'curY' =>& $curY,
    +					    'nexY' =>& $nexY,
    +					    'outputlangs' => $outputlangs,
    +					    'hidedetails' => $hidedetails
    +					);
    +					$reshook=$hookmanager->executeHooks('printPDFline',$parameters,$this);    // Note that $object may have been modified by hook
    +
    +
    +					// Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva
    +					if ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) $tvaligne=$object->lines[$i]->multicurrency_total_tva;
    +					else $tvaligne=$object->lines[$i]->total_tva;
    +
    +					$localtax1ligne=$object->lines[$i]->total_localtax1;
    +					$localtax2ligne=$object->lines[$i]->total_localtax2;
    +					$localtax1_rate=$object->lines[$i]->localtax1_tx;
    +					$localtax2_rate=$object->lines[$i]->localtax2_tx;
    +					$localtax1_type=$object->lines[$i]->localtax1_type;
    +					$localtax2_type=$object->lines[$i]->localtax2_type;
    +
    +					if ($object->remise_percent) $tvaligne-=($tvaligne*$object->remise_percent)/100;
    +					if ($object->remise_percent) $localtax1ligne-=($localtax1ligne*$object->remise_percent)/100;
    +					if ($object->remise_percent) $localtax2ligne-=($localtax2ligne*$object->remise_percent)/100;
    +
    +					$vatrate=(string) $object->lines[$i]->tva_tx;
    +
    +					// Retrieve type from database for backward compatibility with old records
    +					if ((! isset($localtax1_type) || $localtax1_type=='' || ! isset($localtax2_type) || $localtax2_type=='') // if tax type not defined
    +					&& (! empty($localtax1_rate) || ! empty($localtax2_rate))) // and there is local tax
    +					{
    +						$localtaxtmp_array=getLocalTaxesFromRate($vatrate,0,$object->thirdparty,$mysoc);
    +						$localtax1_type = $localtaxtmp_array[0];
    +						$localtax2_type = $localtaxtmp_array[2];
    +					}
    +
    +				    // retrieve global local tax
    +					if ($localtax1_type && $localtax1ligne != 0)
    +						$this->localtax1[$localtax1_type][$localtax1_rate]+=$localtax1ligne;
    +					if ($localtax2_type && $localtax2ligne != 0)
    +						$this->localtax2[$localtax2_type][$localtax2_rate]+=$localtax2ligne;
    +
    +					if (($object->lines[$i]->info_bits & 0x01) == 0x01) $vatrate.='*';
    +					if (! isset($this->tva[$vatrate])) 				$this->tva[$vatrate]=0;
    +					$this->tva[$vatrate] += $tvaligne;
    +
    +					// Add line
    +					if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1))
    +					{
    +						$pdf->setPage($pageposafter);
    +						$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));
    +						//$pdf->SetDrawColor(190,190,200);
    +						$pdf->line($this->marge_gauche, $nexY+1, $this->page_largeur - $this->marge_droite, $nexY+1);
    +						$pdf->SetLineStyle(array('dash'=>0));
    +					}
    +
    +					$nexY+=2;    // Passe espace entre les lignes
    +
    +					// Detect if some page were added automatically and output _tableau for past pages
    +					while ($pagenb < $pageposafter)
    +					{
    +						$pdf->setPage($pagenb);
    +						if ($pagenb == $pageposbeforeprintlines)
    +						{
    +							$this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1, $object->multicurrency_code);
    +						}
    +						else
    +						{
    +							$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code);
    +						}
    +						$this->_pagefoot($pdf,$object,$outputlangs,1);
    +						$pagenb++;
    +						$pdf->setPage($pagenb);
    +						$pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.
    +						if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +					}
    +					if (isset($object->lines[$i+1]->pagebreak) && $object->lines[$i+1]->pagebreak)
    +					{
    +					    if ($pagenb == $pageposafter)
    +						{
    +							$this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1, $object->multicurrency_code);
    +						}
    +						else
    +						{
    +							$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code);
    +						}
    +						$this->_pagefoot($pdf,$object,$outputlangs,1);
    +						// New page
    +						$pdf->AddPage();
    +						if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +						$pagenb++;
    +						if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +					}
    +				}
    +
    +				// Show square
    +				if ($pagenb == $pageposbeforeprintlines)
    +					$this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 0, 0, $object->multicurrency_code);
    +				else
    +					$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 1, 0, $object->multicurrency_code);
    +				$bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
    +
    +				// Affiche zone infos
    +				$posy=$this->drawInfoTable($pdf, $object, $bottomlasttab, $outputlangs);
    +
    +				// Affiche zone totaux
    +				$posy=$this->drawTotalTable($pdf, $object, $deja_regle, $bottomlasttab, $outputlangs);
    +
    +				// Affiche zone versements
    +				/*
    +				if ($deja_regle)
    +				{
    +					$posy=$this->drawPaymentsTable($pdf, $object, $posy, $outputlangs);
    +				}
    +				*/
    +
    +				// Pied de page
    +				$this->_pagefoot($pdf, $object, $outputlangs);
    +				if (method_exists($pdf, 'AliasNbPages')) $pdf->AliasNbPages();
    +
    +				$pdf->Close();
    +
    +				$pdf->Output($file, 'F');
    +
    +				// Add pdfgeneration hook
    +				$hookmanager->initHooks(array('pdfgeneration'));
    +				$parameters=array('file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs);
    +				global $action;
    +				$reshook=$hookmanager->executeHooks('afterPDFCreation', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
    +
    +				if (! empty($conf->global->MAIN_UMASK))
    +					@chmod($file, octdec($conf->global->MAIN_UMASK));
    +
    +				$this->result = array('fullpath'=>$file);
    +
    +				return 1;   // Pas d'erreur
    +			}
    +			else
    +			{
    +				$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
    +				return 0;
    +			}
    +		}
    +		else
    +		{
    +			$this->error=$langs->transnoentities("ErrorConstantNotDefined","COMMANDE_OUTPUTDIR");
    +			return 0;
    +		}
    +	}
    +
    +	/**
    +	 *  Show payments table
    +   *
    +	 *  @param	TCPDF		$pdf     		Object PDF
    +	 *  @param  Object		$object			Object order
    +	 *	@param	int			$posy			Position y in PDF
    +	 *	@param	Translate	$outputlangs	Object langs for output
    +	 *	@return int							<0 if KO, >0 if OK
    +	 */
    +	private function drawPaymentsTable(&$pdf, $object, $posy, $outputlangs)
    +	{
    +	}
    +
    +	/**
    +	 *   Show miscellaneous information (payment mode, payment term, ...)
    +	 *
    +	 *   @param		TCPDF		$pdf     		Object PDF
    +	 *   @param		Object		$object			Object to show
    +	 *   @param		int			$posy			Y
    +	 *   @param		Translate	$outputlangs	Langs object
    +	 *   @return	void
    +	 */
    +	private function drawInfoTable(&$pdf, $object, $posy, $outputlangs)
    +	{
    +		global $conf;
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +        // If France, show VAT mention if not applicable
    +		if ($this->emetteur->country_code == 'FR' && $this->franchise == 1)
    +		{
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
    +
    +			$posy=$pdf->GetY()+4;
    +		}
    +
    +		$posxval=52;
    +
    +		// Show payments conditions
    +		if ($object->cond_reglement_code || $object->cond_reglement)
    +		{
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$titre = $outputlangs->transnoentities("PaymentConditions").':';
    +			$pdf->MultiCell(43, 4, $titre, 0, 'L');
    +
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posxval, $posy);
    +			$lib_condition_paiement=$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code)!=('PaymentCondition'.$object->cond_reglement_code)?$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code):$outputlangs->convToOutputCharset($object->cond_reglement_doc);
    +			$lib_condition_paiement=str_replace('\n',"\n",$lib_condition_paiement);
    +			$pdf->MultiCell(67, 4, $lib_condition_paiement,0,'L');
    +
    +			$posy=$pdf->GetY()+3;
    +		}
    +
    +        // Check a payment mode is defined
    +        /* Not used with orders
    +		if (empty($object->mode_reglement_code)
    +        	&& ! $conf->global->FACTURE_CHQ_NUMBER
    +        	&& ! $conf->global->FACTURE_RIB_NUMBER)
    +		{
    +            $pdf->SetXY($this->marge_gauche, $posy);
    +            $pdf->SetTextColor(200,0,0);
    +            $pdf->SetFont('','B', $default_font_size - 2);
    +            $pdf->MultiCell(80, 3, $outputlangs->transnoentities("ErrorNoPaiementModeConfigured"),0,'L',0);
    +            $pdf->SetTextColor(0,0,0);
    +
    +            $posy=$pdf->GetY()+1;
    +        }
    +		*/
    +		/* TODO
    +		else if (! empty($object->availability_code))
    +		{
    +            $pdf->SetXY($this->marge_gauche, $posy);
    +            $pdf->SetTextColor(200,0,0);
    +            $pdf->SetFont('','B', $default_font_size - 2);
    +            $pdf->MultiCell(80, 3, $outputlangs->transnoentities("AvailabilityPeriod").': '.,0,'L',0);
    +            $pdf->SetTextColor(0,0,0);
    +
    +            $posy=$pdf->GetY()+1;
    +		}*/
    +
    +	    // Show planed date of delivery
    +        if (! empty($object->date_livraison))
    +		{
    +            $outputlangs->load("sendings");
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$titre = $outputlangs->transnoentities("DateDeliveryPlanned").':';
    +			$pdf->MultiCell(80, 4, $titre, 0, 'L');
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posxval, $posy);
    +			$dlp=dol_print_date($object->date_livraison,"daytext",false,$outputlangs,true);
    +			$pdf->MultiCell(80, 4, $dlp, 0, 'L');
    +
    +            $posy=$pdf->GetY()+1;
    +		}
    +        elseif ($object->availability_code || $object->availability)    // Show availability conditions
    +		{
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$titre = $outputlangs->transnoentities("AvailabilityPeriod").':';
    +			$pdf->MultiCell(80, 4, $titre, 0, 'L');
    +			$pdf->SetTextColor(0,0,0);
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posxval, $posy);
    +			$lib_availability=$outputlangs->transnoentities("AvailabilityType".$object->availability_code)!=('AvailabilityType'.$object->availability_code)?$outputlangs->transnoentities("AvailabilityType".$object->availability_code):$outputlangs->convToOutputCharset(isset($object->availability)?$object->availability:'');
    +			$lib_availability=str_replace('\n',"\n",$lib_availability);
    +			$pdf->MultiCell(80, 4, $lib_availability, 0, 'L');
    +
    +			$posy=$pdf->GetY()+1;
    +		}
    +
    +      	// Show payment mode
    +        if ($object->mode_reglement_code
    +        	 && $object->mode_reglement_code != 'CHQ'
    +           	 && $object->mode_reglement_code != 'VIR')
    +           	 {
    +	            $pdf->SetFont('','B', $default_font_size - 2);
    +	            $pdf->SetXY($this->marge_gauche, $posy);
    +	            $titre = $outputlangs->transnoentities("PaymentMode").':';
    +	            $pdf->MultiCell(80, 5, $titre, 0, 'L');
    +
    +				$pdf->SetFont('','', $default_font_size - 2);
    +	            $pdf->SetXY($posxval, $posy);
    +	            $lib_mode_reg=$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code)!=('PaymentType'.$object->mode_reglement_code)?$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code):$outputlangs->convToOutputCharset($object->mode_reglement);
    +	            $pdf->MultiCell(80, 5, $lib_mode_reg,0,'L');
    +
    +	            $posy=$pdf->GetY()+2;
    +           	 }
    +
    +		// Show payment mode CHQ
    +        if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'CHQ')
    +        {
    +        	// Si mode reglement non force ou si force a CHQ
    +	        if (! empty($conf->global->FACTURE_CHQ_NUMBER))
    +	        {
    +	            if ($conf->global->FACTURE_CHQ_NUMBER > 0)
    +	            {
    +	                $account = new Account($this->db);
    +	                $account->fetch($conf->global->FACTURE_CHQ_NUMBER);
    +
    +	                $pdf->SetXY($this->marge_gauche, $posy);
    +	                $pdf->SetFont('','B', $default_font_size - 3);
    +	                $pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$account->proprio),0,'L',0);
    +		            $posy=$pdf->GetY()+1;
    +
    +		            if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS))
    +		            {
    +		                $pdf->SetXY($this->marge_gauche, $posy);
    +		                $pdf->SetFont('','', $default_font_size - 3);
    +		                $pdf->MultiCell(100, 3, $outputlangs->convToOutputCharset($account->owner_address), 0, 'L', 0);
    +			            $posy=$pdf->GetY()+2;
    +		            }
    +	            }
    +	            if ($conf->global->FACTURE_CHQ_NUMBER == -1)
    +	            {
    +	                $pdf->SetXY($this->marge_gauche, $posy);
    +	                $pdf->SetFont('','B', $default_font_size - 3);
    +	                $pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$this->emetteur->name),0,'L',0);
    +		            $posy=$pdf->GetY()+1;
    +
    +		            if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS))
    +		            {
    +			            $pdf->SetXY($this->marge_gauche, $posy);
    +		                $pdf->SetFont('','', $default_font_size - 3);
    +		                $pdf->MultiCell(100, 3, $outputlangs->convToOutputCharset($this->emetteur->getFullAddress()), 0, 'L', 0);
    +			            $posy=$pdf->GetY()+2;
    +		            }
    +	            }
    +	        }
    +		}
    +
    +        // If payment mode not forced or forced to VIR, show payment with BAN
    +        if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR')
    +        {
    +			if (! empty($object->fk_account) || ! empty($object->fk_bank) || ! empty($conf->global->FACTURE_RIB_NUMBER))
    +			{
    +				$bankid=(empty($object->fk_account)?$conf->global->FACTURE_RIB_NUMBER:$object->fk_account);
    +				if (! empty($object->fk_bank)) $bankid=$object->fk_bank;   // For backward compatibility when object->fk_account is forced with object->fk_bank
    +				$account = new Account($this->db);
    +				$account->fetch($bankid);
    +
    +				$curx=$this->marge_gauche;
    +				$cury=$posy;
    +
    +				$posy=pdf_bank($pdf,$outputlangs,$curx,$cury,$account,0,$default_font_size);
    +
    +				$posy+=2;
    +			}
    +        }
    +
    +		return $posy;
    +	}
    +
    +
    +	/**
    +	 *	Show total to pay
    +	 *
    +	 *	@param	TCPDF		$pdf           Object PDF
    +	 *	@param  Facture		$object         Object invoice
    +	 *	@param  int			$deja_regle     Montant deja regle
    +	 *	@param	int			$posy			Position depart
    +	 *	@param	Translate	$outputlangs	Objet langs
    +	 *	@return int							Position pour suite
    +	 */
    +	private function drawTotalTable(&$pdf, $object, $deja_regle, $posy, $outputlangs)
    +	{
    +	    global $conf,$mysoc;
    +
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		$tab2_top = $posy;
    +		$tab2_hl = 4;
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +		// Tableau total
    +        $col1x = 120; $col2x = 170;
    +		if ($this->page_largeur < 210) // To work with US executive format
    +		{
    +			$col2x-=20;
    +		}
    +		$largcol2 = ($this->page_largeur - $this->marge_droite - $col2x);
    +
    +		$useborder=0;
    +		$index = 0;
    +
    +		// Total HT
    +		$pdf->SetFillColor(255,255,255);
    +		$pdf->SetXY($col1x, $tab2_top + 0);
    +		$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHT"), 0, 'L', 1);
    +
    +		$total_ht = ($conf->multicurrency->enabled && $object->mylticurrency_tx != 1 ? $object->multicurrency_total_ht : $object->total_ht);
    +		$pdf->SetXY($col2x, $tab2_top + 0);
    +		$pdf->MultiCell($largcol2, $tab2_hl, price($total_ht + (! empty($object->remise)?$object->remise:0), 0, $outputlangs), 0, 'R', 1);
    +
    +		// Show VAT by rates and total
    +		$pdf->SetFillColor(248,248,248);
    +
    +		$total_ttc = ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? $object->multicurrency_total_ttc : $object->total_ttc;
    +
    +		$this->atleastoneratenotnull=0;
    +		if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))
    +		{
    +			$tvaisnull=((! empty($this->tva) && count($this->tva) == 1 && isset($this->tva['0.000']) && is_float($this->tva['0.000'])) ? true : false);
    +			if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_IFNULL) && $tvaisnull)
    +			{
    +				// Nothing to do
    +			}
    +			else
    +			{
    +				//Local tax 1 before VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on')
    +				//{
    +					foreach( $this->localtax1 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('1','3','5'))) continue;
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey!=0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT1",$mysoc->country_code).' ';
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +	      		//}
    +				//Local tax 2 before VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on')
    +				//{
    +					foreach( $this->localtax2 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('1','3','5'))) continue;
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey!=0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT2",$mysoc->country_code).' ';
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +				//}
    +				// VAT
    +				foreach($this->tva as $tvakey => $tvaval)
    +				{
    +					if ($tvakey != 0)    // On affiche pas taux 0
    +					{
    +						$this->atleastoneratenotnull++;
    +
    +						$index++;
    +						$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +						$tvacompl='';
    +						if (preg_match('/\*/',$tvakey))
    +						{
    +							$tvakey=str_replace('*','',$tvakey);
    +							$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +						}
    +						$totalvat =$outputlangs->transcountrynoentities("TotalVAT",$mysoc->country_code).' ';
    +						$totalvat.=vatrate($tvakey,1).$tvacompl;
    +						$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +						$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +						$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +					}
    +				}
    +
    +				//Local tax 1 after VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on')
    +				//{
    +					foreach( $this->localtax1 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('2','4','6'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey != 0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT1",$mysoc->country_code).' ';
    +
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +	      		//}
    +				//Local tax 2 after VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on')
    +				//{
    +					foreach( $this->localtax2 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('2','4','6'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey != 0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT2",$mysoc->country_code).' ';
    +
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +				//}
    +
    +				// Total TTC
    +				$index++;
    +				$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +				$pdf->SetTextColor(0,0,60);
    +				$pdf->SetFillColor(224,224,224);
    +				$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalTTC"), $useborder, 'L', 1);
    +
    +				$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +				$pdf->MultiCell($largcol2, $tab2_hl, price($total_ttc, 0, $outputlangs), $useborder, 'R', 1);
    +			}
    +		}
    +
    +		$pdf->SetTextColor(0,0,0);
    +
    +        $creditnoteamount=0;
    +        $depositsamount=0;
    +		//$creditnoteamount=$object->getSumCreditNotesUsed();
    +		//$depositsamount=$object->getSumDepositsUsed();
    +		//print "x".$creditnoteamount."-".$depositsamount;exit;
    +		$resteapayer = price2num($total_ttc - $deja_regle - $creditnoteamount - $depositsamount, 'MT');
    +		if (! empty($object->paye)) $resteapayer=0;
    +
    +		if ($deja_regle > 0)
    +		{
    +			// Already paid + Deposits
    +			$index++;
    +
    +			$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("AlreadyPaid"), 0, 'L', 0);
    +			$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($largcol2, $tab2_hl, price($deja_regle, 0, $outputlangs), 0, 'R', 0);
    +
    +			$index++;
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->SetFillColor(224,224,224);
    +			$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("RemainderToPay"), $useborder, 'L', 1);
    +
    +			$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($largcol2, $tab2_hl, price($resteapayer, 0, $outputlangs), $useborder, 'R', 1);
    +
    +			$pdf->SetFont('','', $default_font_size - 1);
    +			$pdf->SetTextColor(0,0,0);
    +		}
    +
    +		$index++;
    +		return ($tab2_top + ($tab2_hl * $index));
    +	}
    +
    +	/**
    +	 *   Show table for lines
    +	 *
    +	 *   @param		TCPDF		$pdf     		Object PDF
    +	 *   @param		string		$tab_top		Top position of table
    +	 *   @param		string		$tab_height		Height of table (rectangle)
    +	 *   @param		int			$nexY			Y (not used)
    +	 *   @param		Translate	$outputlangs	Langs object
    +	 *   @param		int			$hidetop		1=Hide top bar of array and title, 0=Hide nothing, -1=Hide only title
    +	 *   @param		int			$hidebottom		Hide bottom bar of array
    +	 *   @param		string		$currency		Currency code
    +	 *   @return	void
    +	 */
    +	private function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop=0, $hidebottom=0, $currency='')
    +	{
    +		global $conf;
    +
    +		// Force to disable hidetop and hidebottom
    +		$hidebottom=0;
    +		if ($hidetop) $hidetop=-1;
    +
    +		$currency = !empty($currency) ? $currency : $conf->currency;
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		// Amount in (at tab_top - 1)
    +		$pdf->SetTextColor(0,0,0);
    +		$pdf->SetFont('','', $default_font_size - 2);
    +
    +		if (empty($hidetop))
    +		{
    +			$titre = $outputlangs->transnoentities("AmountInCurrency",$outputlangs->transnoentitiesnoconv("Currency".$currency));
    +			$pdf->SetXY($this->page_largeur - $this->marge_droite - ($pdf->GetStringWidth($titre) + 3), $tab_top-4);
    +			$pdf->MultiCell(($pdf->GetStringWidth($titre) + 3), 2, $titre);
    +
    +			//$conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR='230,230,230';
    +			if (! empty($conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR)) $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_droite-$this->marge_gauche, 5, 'F', null, explode(',',$conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR));
    +		}
    +
    +		$pdf->SetDrawColor(128,128,128);
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +		// Output Rect
    +		$this->printRect($pdf,$this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height, $hidetop, $hidebottom);	// Rect prend une longueur en 3eme param et 4eme param
    +
    +
    +		foreach ($this->cols as $colKey => $colDef)
    +		{
    +		    if(!$this->getColumnStatus($colKey)) continue;
    +
    +		    // get title label
    +		    $colDef['title']['label'] = !empty($colDef['title']['label'])?$colDef['title']['label']:$outputlangs->transnoentities($colDef['title']['textkey']);
    +
    +		    // Add column separator
    +		    if(!empty($colDef['border-left'])){
    +		        $pdf->line($colDef['xStartPos'], $tab_top, $colDef['xStartPos'], $tab_top + $tab_height);
    +		    }
    +
    +		    if (empty($hidetop))
    +		    {
    +		      $pdf->SetXY($colDef['xStartPos'] + $colDef['title']['padding'][3], $tab_top + $colDef['title']['padding'][0] );
    +
    +		      $textWidth = $colDef['width'] - $colDef['title']['padding'][3] -$colDef['title']['padding'][1];
    +		      $pdf->MultiCell($textWidth,2,$colDef['title']['label'],'',$colDef['title']['align']);
    +		    }
    +		}
    +
    +		if (empty($hidetop)){
    +			$pdf->line($this->marge_gauche, $tab_top+5, $this->page_largeur-$this->marge_droite, $tab_top+5);	// line prend une position y en 2eme param et 4eme param
    +		}
    +	}
    +
    +	/**
    +	 *  Show top header of page.
    +	 *
    +	 *  @param	TCPDF		$pdf     		Object PDF
    +	 *  @param  Object		$object     	Object to show
    +	 *  @param  int	    	$showaddress    0=no, 1=yes
    +	 *  @param  Translate	$outputlangs	Object lang for output
    +	 *  @param	string		$titlekey		Translation key to show as title of document
    +	 *  @return	void
    +	 */
    +	private function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $titlekey="PdfOrderTitle")
    +	{
    +		global $conf,$langs,$hookmanager;
    +
    +		// Translations
    +		$outputlangs->loadLangs(array("main", "bills", "propal", "orders", "companies"));
    +
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		pdf_pagehead($pdf,$outputlangs,$this->page_hauteur);
    +
    +		// Show Draft Watermark
    +		if($object->statut==0 && (! empty($conf->global->COMMANDE_DRAFT_WATERMARK)) )
    +		{
    +            pdf_watermark($pdf,$outputlangs,$this->page_hauteur,$this->page_largeur,'mm',$conf->global->COMMANDE_DRAFT_WATERMARK);
    +		}
    +
    +		$pdf->SetTextColor(0,0,60);
    +		$pdf->SetFont('','B', $default_font_size + 3);
    +
    +		$posy=$this->marge_haute;
    +		$posx=$this->page_largeur-$this->marge_droite-100;
    +
    +		$pdf->SetXY($this->marge_gauche,$posy);
    +
    +		// Logo
    +		if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO))
    +		{
    +			$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
    +			if ($this->emetteur->logo)
    +			{
    +				if (is_readable($logo))
    +				{
    +				    $height=pdf_getHeightForLogo($logo);
    +				    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
    +				}
    +				else
    +				{
    +					$pdf->SetTextColor(200,0,0);
    +					$pdf->SetFont('','B', $default_font_size -2);
    +					$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
    +					$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
    +				}
    +			}
    +			else
    +			{
    +				$text=$this->emetteur->name;
    +				$pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
    +			}
    +		}
    +
    +		$pdf->SetFont('','B', $default_font_size + 3);
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$title=$outputlangs->transnoentities($titlekey);
    +		$pdf->MultiCell(100, 3, $title, '', 'R');
    +
    +		$pdf->SetFont('','B',$default_font_size);
    +
    +		$posy+=5;
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$pdf->MultiCell(100, 4, $outputlangs->transnoentities("Ref")." : " . $outputlangs->convToOutputCharset($object->ref), '', 'R');
    +
    +		$posy+=1;
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +		if ($object->ref_client)
    +		{
    +			$posy+=5;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell(100, 3, $outputlangs->transnoentities("RefCustomer")." : " . $outputlangs->convToOutputCharset($object->ref_client), '', 'R');
    +		}
    +
    +		$posy+=4;
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$pdf->MultiCell(100, 3, $outputlangs->transnoentities("OrderDate")." : " . dol_print_date($object->date,"%d %b %Y",false,$outputlangs,true), '', 'R');
    +
    +		// Get contact
    +		if (!empty($conf->global->DOC_SHOW_FIRST_SALES_REP))
    +		{
    +		    $arrayidcontact=$object->getIdContact('internal','SALESREPFOLL');
    +		    if (count($arrayidcontact) > 0)
    +		    {
    +                $usertmp=new User($this->db);
    +		        $usertmp->fetch($arrayidcontact[0]);
    +                $posy+=4;
    +                $pdf->SetXY($posx,$posy);
    +		        $pdf->SetTextColor(0,0,60);
    +		        $pdf->MultiCell(100, 3, $langs->trans("SalesRepresentative")." : ".$usertmp->getFullName($langs), '', 'R');
    +		    }
    +		}
    +
    +		$posy+=2;
    +
    +		$top_shift = 0;
    +		// Show list of linked objects
    +		$current_y = $pdf->getY();
    +		$posy = pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, 100, 3, 'R', $default_font_size);
    +		if ($current_y < $pdf->getY())
    +		{
    +			$top_shift = $pdf->getY() - $current_y;
    +		}
    +
    +		if ($showaddress)
    +		{
    +			// Sender properties
    +			$carac_emetteur='';
    +		 	// Add internal contact of proposal if defined
    +			$arrayidcontact=$object->getIdContact('internal','SALESREPFOLL');
    +		 	if (count($arrayidcontact) > 0)
    +		 	{
    +		 		$object->fetch_user($arrayidcontact[0]);
    +		 		$labelbeforecontactname=($outputlangs->transnoentities("FromContactName")!='FromContactName'?$outputlangs->transnoentities("FromContactName"):$outputlangs->transnoentities("Name"));
    +		 		$carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$labelbeforecontactname." ".$outputlangs->convToOutputCharset($object->user->getFullName($outputlangs))."\n";
    +		 	}
    +
    +		 	$carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty, '', 0, 'source', $object);
    +
    +			// Show sender
    +			$posy=42+$top_shift;
    +			$posx=$this->marge_gauche;
    +			if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->page_largeur-$this->marge_droite-80;
    +			$hautcadre=40;
    +
    +			// Show sender frame
    +			$pdf->SetTextColor(0,0,0);
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posx,$posy-5);
    +			$pdf->MultiCell(66,5, $outputlangs->transnoentities("BillFrom").":", 0, 'L');
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetFillColor(230,230,230);
    +			$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
    +			$pdf->SetTextColor(0,0,60);
    +
    +			// Show sender name
    +			$pdf->SetXY($posx+2,$posy+3);
    +			$pdf->SetFont('','B', $default_font_size);
    +			$pdf->MultiCell(80, 4, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L');
    +			$posy=$pdf->getY();
    +
    +			// Show sender information
    +			$pdf->SetXY($posx+2,$posy);
    +			$pdf->SetFont('','', $default_font_size - 1);
    +			$pdf->MultiCell(80, 4, $carac_emetteur, 0, 'L');
    +
    +
    +
    +			// If CUSTOMER contact defined on order, we use it
    +			$usecontact=false;
    +			$arrayidcontact=$object->getIdContact('external','CUSTOMER');
    +			if (count($arrayidcontact) > 0)
    +			{
    +				$usecontact=true;
    +				$result=$object->fetch_contact($arrayidcontact[0]);
    +			}
    +
    +			//Recipient name
    +			// On peut utiliser le nom de la societe du contact
    +			if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) {
    +				$thirdparty = $object->contact;
    +			} else {
    +				$thirdparty = $object->thirdparty;
    +			}
    +
    +			$carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs);
    +
    +			$carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target', $object);
    +
    +			// Show recipient
    +			$widthrecbox=100;
    +			if ($this->page_largeur < 210) $widthrecbox=84;	// To work with US executive format
    +			$posy=42+$top_shift;
    +			$posx=$this->page_largeur-$this->marge_droite-$widthrecbox;
    +			if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->marge_gauche;
    +
    +			// Show recipient frame
    +			$pdf->SetTextColor(0,0,0);
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posx+2,$posy-5);
    +			$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo").":",0,'L');
    +			$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
    +
    +			// Show recipient name
    +			$pdf->SetXY($posx+2,$posy+3);
    +			$pdf->SetFont('','B', $default_font_size);
    +			$pdf->MultiCell($widthrecbox, 4, $carac_client_name, 0, 'L');
    +
    +			$posy = $pdf->getY();
    +
    +			// Show recipient information
    +			$pdf->SetFont('','', $default_font_size - 1);
    +			$pdf->SetXY($posx+2,$posy);
    +			$pdf->MultiCell($widthrecbox, 4, $carac_client, 0, 'L');
    +		}
    +
    +		$pdf->SetTextColor(0,0,0);
    +		return $top_shift;
    +	}
    +
    +	/**
    +	 *   	Show footer of page. Need this->emetteur object
    +     *
    +	 *   	@param	TCPDF		$pdf     			PDF
    +	 * 		@param	Object		$object				Object to show
    +	 *      @param	Translate	$outputlangs		Object lang for output
    +	 *      @param	int			$hidefreetext		1=Hide free text
    +	 *      @return	int								Return height of bottom margin including footer text
    +	 */
    +	private function _pagefoot(&$pdf,$object,$outputlangs,$hidefreetext=0)
    +	{
    +		global $conf;
    +		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
    +		return pdf_pagefoot($pdf,$outputlangs,'ORDER_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
    +	}
    +
    +
    +
    +	/**
    +	 *   	Define Array Column Field
    +	 *
    +	 *   	@param	object			$object    		common object
    +	 *   	@param	Translate		$outputlangs    langs
    +	 *      @param	int				$hidedetails	Do not show line details
    +	 *      @param	int				$hidedesc		Do not show desc
    +	 *      @param	int				$hideref		Do not show ref
    +	 *      @return	null
    +	 */
    +    public function defineColumnField($object,$outputlangs,$hidedetails=0,$hidedesc=0,$hideref=0)
    +    {
    +	    global $conf, $hookmanager;
    +
    +	    // Default field style for content
    +	    $this->defaultContentsFieldsStyle = array(
    +	        'align' => 'R', // R,C,L
    +	        'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	    );
    +
    +	    // Default field style for content
    +	    $this->defaultTitlesFieldsStyle = array(
    +	        'align' => 'C', // R,C,L
    +	        'padding' => array(0.5,0,0.5,0), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	    );
    +
    +	    /*
    +	     * For exemple
    +	     $this->cols['theColKey'] = array(
    +	     'rank' => $rank, // int : use for ordering columns
    +	     'width' => 20, // the column width in mm
    +	     'title' => array(
    +	     'textkey' => 'yourLangKey', // if there is no label, yourLangKey will be translated to replace label
    +	     'label' => ' ', // the final label : used fore final generated text
    +	     'align' => 'L', // text alignement :  R,C,L
    +	     'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	     ),
    +	     'content' => array(
    +	     'align' => 'L', // text alignement :  R,C,L
    +	     'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	     ),
    +	     );
    +	     */
    +
    +	    $rank=0; // do not use negative rank
    +	    $this->cols['desc'] = array(
    +	        'rank' => $rank,
    +	        'width' => false, // only for desc
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'Designation', // use lang key is usefull in somme case with module
    +	            'align' => 'L',
    +	            // 'textkey' => 'yourLangKey', // if there is no label, yourLangKey will be translated to replace label
    +	            // 'label' => ' ', // the final label
    +	            'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	        ),
    +	        'content' => array(
    +	            'align' => 'L',
    +	        ),
    +	    );
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['photo'] = array(
    +	        'rank' => $rank,
    +	        'width' => (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH)?20:$conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH), // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'Photo',
    +	            'label' => ' '
    +	        ),
    +	        'content' => array(
    +	            'padding' => array(0,0,0,0), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	        ),
    +	        'border-left' => false, // remove left line separator
    +	    );
    +
    +	    if (! empty($conf->global->MAIN_GENERATE_ORDERS_WITH_PICTURE))
    +	    {
    +	        $this->cols['photo']['status'] = true;
    +	    }
    +
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['vat'] = array(
    +	        'rank' => $rank,
    +	        'status' => false,
    +	        'width' => 16, // in mm
    +	        'title' => array(
    +	            'textkey' => 'VAT'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT) && empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN))
    +	    {
    +	        $this->cols['vat']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['subprice'] = array(
    +	        'rank' => $rank,
    +	        'width' => 19, // in mm
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'PriceUHT'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['qty'] = array(
    +	        'rank' => $rank,
    +	        'width' => 16, // in mm
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'Qty'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['progress'] = array(
    +	        'rank' => $rank,
    +	        'width' => 19, // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'Progress'
    +	        ),
    +	        'border-left' => false, // add left line separator
    +	    );
    +
    +	    if($this->situationinvoice)
    +	    {
    +	        $this->cols['progress']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['unit'] = array(
    +	        'rank' => $rank,
    +	        'width' => 11, // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'Unit'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +	    if($conf->global->PRODUCT_USE_UNITS){
    +	        $this->cols['unit']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['discount'] = array(
    +	        'rank' => $rank,
    +	        'width' => 13, // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'ReductionShort'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +	    if ($this->atleastonediscount){
    +	        $this->cols['discount']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['totalexcltax'] = array(
    +	        'rank' => $rank,
    +	        'width' => 26, // in mm
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'TotalHT'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +
    +	    $parameters=array(
    +	        'object' => $object,
    +	        'outputlangs' => $outputlangs,
    +	        'hidedetails' => $hidedetails,
    +	        'hidedesc' => $hidedesc,
    +	        'hideref' => $hideref
    +	    );
    +
    +	    $reshook=$hookmanager->executeHooks('defineColumnField',$parameters,$this);    // Note that $object may have been modified by hook
    +	    if ($reshook < 0)
    +	    {
    +	        setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +	    }
    +	    elseif (empty($reshook))
    +	    {
    +	        $this->cols = array_replace($this->cols, $hookmanager->resArray); // array_replace is used to preserve keys
    +	    }
    +	    else
    +	    {
    +	        $this->cols = $hookmanager->resArray;
    +	    }
    +	}
    +}
    diff --git a/htdocs/core/modules/commande/doc/pdf_proforma.modules.php b/htdocs/core/modules/commande/doc/pdf_proforma.modules.php
    index 918b338aa12..ebbe72f94c9 100644
    --- a/htdocs/core/modules/commande/doc/pdf_proforma.modules.php
    +++ b/htdocs/core/modules/commande/doc/pdf_proforma.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2014	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2008		Raphael Bertrand	<raphael.bertrand@resultic.fr>
      * Copyright (C) 2010-2013	Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2012      	Christophe Battarel <christophe.battarel@altairis.fr>
    @@ -73,6 +73,4 @@ class pdf_proforma extends pdf_einstein
     
     		parent::_pagehead($pdf, $object, $showaddress, $outputlangs, $titlekey);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/commande/mod_commande_marbre.php b/htdocs/core/modules/commande/mod_commande_marbre.php
    index 9941811006b..215d2380819 100644
    --- a/htdocs/core/modules/commande/mod_commande_marbre.php
    +++ b/htdocs/core/modules/commande/mod_commande_marbre.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,10 +29,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/commande/modules_commande.php';
      */
     class mod_commande_marbre extends ModeleNumRefCommandes
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefix='CO';
    -	var $error='';
    -	var $nom='Marbre';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='CO';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Marbre';
    +
    +	/**
    +	 * @var string name
    +	 */
    +	public $name='Marbre';
     
     
         /**
    @@ -128,13 +148,14 @@ class mod_commande_marbre extends ModeleNumRefCommandes
     		$yymm = strftime("%y%m",$date);
     
         	if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
    -    	else $num = sprintf("%04s",$max+1);
    +    	else $num = sprintf("%04s", $max+1);
     
     		dol_syslog("mod_commande_marbre::getNextValue return ".$this->prefix.$yymm."-".$num);
     		return $this->prefix.$yymm."-".$num;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
    @@ -144,7 +165,7 @@ class mod_commande_marbre extends ModeleNumRefCommandes
     	 */
     	function commande_get_num($objsoc,$objforref)
     	{
    +        // phpcs:enable
     		return $this->getNextValue($objsoc,$objforref);
     	}
    -
     }
    diff --git a/htdocs/core/modules/commande/mod_commande_saphir.php b/htdocs/core/modules/commande/mod_commande_saphir.php
    index 2c8ae2ef3e9..1b08c9c1105 100644
    --- a/htdocs/core/modules/commande/mod_commande_saphir.php
    +++ b/htdocs/core/modules/commande/mod_commande_saphir.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville        <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur         <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin               <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin               <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -33,9 +33,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/commande/modules_commande.php';
      */
     class mod_commande_saphir extends ModeleNumRefCommandes
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Saphir';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	/**
    +	 * @var string nom
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Saphir';
    +
    +	/**
    +	 * @var string name
    +	 */
    +	public $name='Saphir';
     
     
         /**
    @@ -45,7 +64,7 @@ class mod_commande_saphir extends ModeleNumRefCommandes
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    @@ -132,17 +151,17 @@ class mod_commande_saphir extends ModeleNumRefCommandes
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
     	 *  @param	Societe		$objsoc     Object third party
    -	 * 	@param	string		$objforref	Object for number to search
    +	 *  @param	string		$objforref	Object for number to search
     	 *  @return string      			Next free value
          */
         function commande_get_num($objsoc,$objforref)
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$objforref);
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/commande/modules_commande.php b/htdocs/core/modules/commande/modules_commande.php
    index aa6da728f56..d644de33a5d 100644
    --- a/htdocs/core/modules/commande/modules_commande.php
    +++ b/htdocs/core/modules/commande/modules_commande.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
      * Copyright (C) 2012      Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
    @@ -39,26 +39,27 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
      */
     abstract class ModelePDFCommandes extends CommonDocGenerator
     {
    -	var $error='';
     
    -	/**
    -	 *  Return list of active generation modules
    -	 *
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return list of active generation modules
    +     *
          *  @param	DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
     	 */
    -	static function liste_modeles($db,$maxfilenamelength=0)
    +	static function liste_modeles($db, $maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
    -		$type='order';
    -		$liste=array();
    +		$type = 'order';
    +		$list = array();
     
     		include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    -		$liste=getListOfModels($db,$type,$maxfilenamelength);
    +		$list = getListOfModels($db, $type, $maxfilenamelength);
     
    -		return $liste;
    +		return $list;
     	}
     }
     
    @@ -71,7 +72,10 @@ abstract class ModelePDFCommandes extends CommonDocGenerator
     
     abstract class ModeleNumRefCommandes
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *	Return if a module can be used or not
    @@ -146,4 +150,4 @@ abstract class ModeleNumRefCommandes
     		if ($this->version) return $this->version;
     		return $langs->trans("NotAvailable");
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php b/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php
    index 85c52ae877f..22dfc6388b4 100644
    --- a/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php
    +++ b/htdocs/core/modules/contract/doc/doc_generic_contract_odt.modules.php
    @@ -2,7 +2,8 @@
     /* Copyright (C) 2010-2012 	Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2018		Ferran Marcet		<fmarcet@2byte.es>
    -*
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
    @@ -37,10 +38,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_contract_odt extends ModelePDFContract
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -50,10 +64,10 @@ class doc_generic_contract_odt extends ModelePDFContract
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -97,8 +111,8 @@ class doc_generic_contract_odt extends ModelePDFContract
     	{
     		global $conf,$langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array('companies', 'errors'));
     
     		$form = new Form($this->db);
     
    @@ -167,6 +181,7 @@ class doc_generic_contract_odt extends ModelePDFContract
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -180,6 +195,7 @@ class doc_generic_contract_odt extends ModelePDFContract
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager;
     
     		if (empty($srctemplatepath))
    @@ -201,10 +217,8 @@ class doc_generic_contract_odt extends ModelePDFContract
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
     
     		if ($conf->contrat->dir_output)
     		{
    @@ -341,6 +355,7 @@ class doc_generic_contract_odt extends ModelePDFContract
     				catch(Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -354,8 +369,9 @@ class doc_generic_contract_odt extends ModelePDFContract
     				try {
     					$odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
     				}
    -				catch(OdfException $e)
    +				catch (OdfException $e)
     				{
    +					dol_syslog($e->getMessage(), LOG_INFO);
     				}
     
     				foreach($tmparray as $key=>$value)
    @@ -371,8 +387,9 @@ class doc_generic_contract_odt extends ModelePDFContract
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -406,9 +423,11 @@ class doc_generic_contract_odt extends ModelePDFContract
     								}
     								catch(OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -432,6 +451,7 @@ class doc_generic_contract_odt extends ModelePDFContract
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -443,7 +463,7 @@ class doc_generic_contract_odt extends ModelePDFContract
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
     						return -1;
     					}
    @@ -451,7 +471,7 @@ class doc_generic_contract_odt extends ModelePDFContract
     				else {
     					try {
     					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
     						return -1;
     					}
    @@ -477,6 +497,4 @@ class doc_generic_contract_odt extends ModelePDFContract
     
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/contract/doc/pdf_strato.modules.php b/htdocs/core/modules/contract/doc/pdf_strato.modules.php
    index 9fa86d24a19..600d502f562 100644
    --- a/htdocs/core/modules/contract/doc/pdf_strato.modules.php
    +++ b/htdocs/core/modules/contract/doc/pdf_strato.modules.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003		Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010	Laurent Destailleur			<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin				<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin				<regis.houssin@inodbox.com>
      * Copyright (C) 2008		Raphael Bertrand (Resultic)	<raphael.bertrand@resultic.fr>
      * Copyright (C) 2011		Fabrice CHERRIER
      * Copyright (C) 2013-2018  Philippe Grand	            <philippe.grand@atoo-net.com>
    @@ -39,21 +39,72 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
      */
     class pdf_strato extends ModelePDFContract
     {
    -	var $db;
    -	var $name;
    -	var $description;
    -	var $type;
    +	/**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
     
    -	var $phpmin = array(4,3,0); // Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
     
    -	var $page_largeur;
    -	var $page_hauteur;
    -	var $format;
    -	var $marge_gauche;
    -	var	$marge_droite;
    -	var	$marge_haute;
    -	var	$marge_basse;
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
    +
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +	/**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
     
     	/**
     	 * Issuer
    @@ -108,7 +159,8 @@ class pdf_strato extends ModelePDFContract
     		$this->posxdesc=$this->marge_gauche+1;
     	}
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Function to build pdf onto disk
          *
          *  @param		CommonObject	$object				Id of object to generate
    @@ -121,13 +173,14 @@ class pdf_strato extends ModelePDFContract
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$hookmanager,$mysoc;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    -		
    -		// Translations
    +
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "dict", "companies", "contracts"));
     
     		if ($conf->contrat->dir_output)
    @@ -486,10 +539,10 @@ class pdf_strato extends ModelePDFContract
     	function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
     	{
     		global $conf,$langs;
    -		
    +
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
    -		
    -		// Translations
    +
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "dict", "contract", "companies"));
     
     		pdf_pagehead($pdf,$outputlangs,$this->page_hauteur);
    @@ -668,6 +721,4 @@ class pdf_strato extends ModelePDFContract
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'CONTRACT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/contract/mod_contract_magre.php b/htdocs/core/modules/contract/mod_contract_magre.php
    index 54da8fc55c4..4769ec17f99 100644
    --- a/htdocs/core/modules/contract/mod_contract_magre.php
    +++ b/htdocs/core/modules/contract/mod_contract_magre.php
    @@ -29,10 +29,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/contract/modules_contract.php';
      */
     class mod_contract_magre extends ModelNumRefContracts
     {
    -	var $version='dolibarr';
    -	var $error = '';
    -	var $nom = 'Magre';
    -	var $code_auto=1;
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	/**
    +	 * @var string nom
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Magre';
    +
    +	/**
    +	 * @var string name
    +	 */
    +	public $name='Magre';
    +
    +	public $code_auto=1;
     
     	/**
     	 *	Return default description of numbering model
    @@ -117,8 +137,9 @@ class mod_contract_magre extends ModelNumRefContracts
     		return  $numFinal;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *	Return next value
    +	 *  Return next value
     	 *
     	 *	@param	Societe		$objsoc     third party object
     	 *	@param	Object		$objforref	contract object
    @@ -126,8 +147,7 @@ class mod_contract_magre extends ModelNumRefContracts
     	 */
         function contract_get_num($objsoc,$objforref)
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$objforref);
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/contract/mod_contract_olive.php b/htdocs/core/modules/contract/mod_contract_olive.php
    index 6d22aebeb3d..993f4bf9bfb 100644
    --- a/htdocs/core/modules/contract/mod_contract_olive.php
    +++ b/htdocs/core/modules/contract/mod_contract_olive.php
    @@ -32,15 +32,33 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/contract/modules_contract.php';
      */
     class mod_contract_olive extends ModelNumRefContracts
     {
    +    /**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Olive';
     
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Olive';
     
    -	var $nom='Olive';					// Nom du modele
    -	var $code_modifiable = 1;				// Code modifiable
    -	var $code_modifiable_invalide = 1;		// Code modifiable si il est invalide
    -	var $code_modifiable_null = 1;			// Code modifiables si il est null
    -	var $code_null = 1;						// Code facultatif
    -	var $version='dolibarr';    		// 'development', 'experimental', 'dolibarr'
    -	var $code_auto = 0; 	                // Numerotation automatique
    +	public $code_modifiable = 1;				// Code modifiable
    +
    +	public $code_modifiable_invalide = 1;		// Code modifiable si il est invalide
    +
    +	public $code_modifiable_null = 1;			// Code modifiables si il est null
    +
    +	public $code_null = 1;						// Code facultatif
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';    		// 'development', 'experimental', 'dolibarr'
    +
    +	public $code_auto = 0; 	                // Numerotation automatique
     
     
     	/**
    diff --git a/htdocs/core/modules/contract/mod_contract_serpis.php b/htdocs/core/modules/contract/mod_contract_serpis.php
    index 5dcb8a72baa..e91775f669c 100644
    --- a/htdocs/core/modules/contract/mod_contract_serpis.php
    +++ b/htdocs/core/modules/contract/mod_contract_serpis.php
    @@ -28,11 +28,32 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/contract/modules_contract.php';
      */
     class mod_contract_serpis extends ModelNumRefContracts
     {
    -	var $version='dolibarr';
    -	var $prefix='CT';
    -	var $error='';
    -	var $nom='Serpis';
    -	var $code_auto=1;
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	public $prefix='CT';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Serpis';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Serpis';
    +
    +	public $code_auto=1;
     
     
     	/**
    @@ -132,16 +153,17 @@ class mod_contract_serpis extends ModelNumRefContracts
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return next value
     	 *
     	 *	@param	Societe		$objsoc     third party object
    -	 *	@param	Object		$objforref	contract object
    +	 *	@param	Object		$objforref  contract object
     	 *	@return string      			Value if OK, 0 if KO
     	 */
     	function contract_get_num($objsoc,$objforref)
     	{
    +        // phpcs:enable
     		return $this->getNextValue($objsoc,$objforref);
     	}
    -
     }
    diff --git a/htdocs/core/modules/contract/modules_contract.php b/htdocs/core/modules/contract/modules_contract.php
    index 47a882b7b56..59290de7d82 100644
    --- a/htdocs/core/modules/contract/modules_contract.php
    +++ b/htdocs/core/modules/contract/modules_contract.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
      * Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2013      Philippe Grand	    <philippe.grand@atoo-net.com>
    @@ -37,9 +37,13 @@
      */
     abstract class ModelePDFContract extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of active generation modules
     	 *
    @@ -49,6 +53,7 @@ abstract class ModelePDFContract extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='contract';
    @@ -67,7 +72,10 @@ abstract class ModelePDFContract extends CommonDocGenerator
      */
     class ModelNumRefContracts
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *	Return if a module can be used or not
    diff --git a/htdocs/core/modules/dons/html_cerfafr.modules.php b/htdocs/core/modules/dons/html_cerfafr.modules.php
    index c9d2b4984ad..cac7329cf5b 100644
    --- a/htdocs/core/modules/dons/html_cerfafr.modules.php
    +++ b/htdocs/core/modules/dons/html_cerfafr.modules.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2006	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012       Marcos García           <marcosgdf@gmail.com>
      * Copyright (C) 2014-2015  Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2015  		Benoit Bruchard			<benoitb21@gmail.com>
    @@ -38,7 +38,7 @@ class html_cerfafr extends ModeleDon
     	/**
     	 *  Constructor
     	 *
    -	 *  @param      DoliDb		$db      Database handler
    +	 *  @param      DoliDb      $db      Database handler
     	 */
     	function __construct($db)
     	{
    @@ -64,6 +64,7 @@ class html_cerfafr extends ModeleDon
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Write the object to document file to disk
     	 *
    @@ -74,6 +75,7 @@ class html_cerfafr extends ModeleDon
     	 */
     	function write_file($don,$outputlangs,$currency='')
     	{
    +        // phpcs:enable
     		global $user,$conf,$langs,$mysoc;
     
     		$now=dol_now();
    @@ -81,12 +83,8 @@ class html_cerfafr extends ModeleDon
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("products");
    -		$outputlangs->load("donations");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "donations"));
     
     		$currency = !empty($currency) ? $currency : $conf->currency;
     
    @@ -167,7 +165,7 @@ class html_cerfafr extends ModeleDon
     				$form = str_replace('__DATE__',dol_print_date($don->date,'day',false,$outputlangs),$form);
     				//$form = str_replace('__IP__',$user->ip,$form); // TODO $user->ip not exist
     				$form = str_replace('__AMOUNT__', price($don->amount), $form);
    -				$form = str_replace('__AMOUNTLETTERS__',chiffre_en_lettre($don->amount),$form);
    +				$form = str_replace('__AMOUNTLETTERS__', $this->amountToLetters($don->amount),$form);
     				$form = str_replace('__CURRENCY__',$outputlangs->transnoentitiesnoconv("Currency".$currency),$form);
     				$form = str_replace('__CURRENCYCODE__',$conf->currency,$form);
     				$form = str_replace('__MAIN_INFO_SOCIETE_NOM__',$mysoc->name,$form);
    @@ -276,153 +274,163 @@ class html_cerfafr extends ModeleDon
     			return 0;
     		}
     	}
    -}
     
    -function chiffre_en_lettre($montant, $devise1='', $devise2='')
    -{
    -	if(empty($devise1)) $dev1='euros';
    -	else $dev1=$devise1;
    -	if(empty($devise2)) $dev2='centimes';
    -	else $dev2=$devise2;
    -	$valeur_entiere=intval($montant);
    -	$valeur_decimal=intval(round($montant-intval($montant), 2)*100);
    -	$dix_c=intval($valeur_decimal%100/10);
    -	$cent_c=intval($valeur_decimal%1000/100);
    -	$unite[1]=$valeur_entiere%10;
    -	$dix[1]=intval($valeur_entiere%100/10);
    -	$cent[1]=intval($valeur_entiere%1000/100);
    -	$unite[2]=intval($valeur_entiere%10000/1000);
    -	$dix[2]=intval($valeur_entiere%100000/10000);
    -	$cent[2]=intval($valeur_entiere%1000000/100000);
    -	$unite[3]=intval($valeur_entiere%10000000/1000000);
    -	$dix[3]=intval($valeur_entiere%100000000/10000000);
    -	$cent[3]=intval($valeur_entiere%1000000000/100000000);
    -	$chif=array('', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix sept', 'dix huit', 'dix neuf');
    -		$secon_c='';
    -		$trio_c='';
    -	for($i=1; $i<=3; $i++){
    -		$prim[$i]='';
    -		$secon[$i]='';
    -		$trio[$i]='';
    -		if($dix[$i]==0){
    +	/**
    +	 * numbers to letters
    +	 *
    +	 * @param   mixed   $montant    amount
    +	 * @param   mixed   $devise1    devise 1 ex: euro
    +	 * @param   mixed   $devise2    devise 2 ex: centimes
    +	 * @return string               amount in letters
    +	 */
    +	private function amountToLetters($montant, $devise1='', $devise2='')
    +	{
    +		$unite = array();
    +		$dix = array();
    +		$cent = array();
    +		if(empty($devise1)) $dev1='euros';
    +		else $dev1=$devise1;
    +		if(empty($devise2)) $dev2='centimes';
    +		else $dev2=$devise2;
    +		$valeur_entiere=intval($montant);
    +		$valeur_decimal=intval(round($montant-intval($montant), 2)*100);
    +		$dix_c=intval($valeur_decimal%100/10);
    +		$cent_c=intval($valeur_decimal%1000/100);
    +		$unite[1]=$valeur_entiere%10;
    +		$dix[1]=intval($valeur_entiere%100/10);
    +		$cent[1]=intval($valeur_entiere%1000/100);
    +		$unite[2]=intval($valeur_entiere%10000/1000);
    +		$dix[2]=intval($valeur_entiere%100000/10000);
    +		$cent[2]=intval($valeur_entiere%1000000/100000);
    +		$unite[3]=intval($valeur_entiere%10000000/1000000);
    +		$dix[3]=intval($valeur_entiere%100000000/10000000);
    +		$cent[3]=intval($valeur_entiere%1000000000/100000000);
    +		$chif=array('', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix sept', 'dix huit', 'dix neuf');
    +			$secon_c='';
    +			$trio_c='';
    +		for($i=1; $i<=3; $i++){
    +			$prim[$i]='';
     			$secon[$i]='';
    -			$prim[$i]=$chif[$unite[$i]];
    +			$trio[$i]='';
    +			if($dix[$i]==0){
    +				$secon[$i]='';
    +				$prim[$i]=$chif[$unite[$i]];
    +			}
    +			else if($dix[$i]==1){
    +				$secon[$i]='';
    +				$prim[$i]=$chif[($unite[$i]+10)];
    +			}
    +			else if($dix[$i]==2){
    +				if($unite[$i]==1){
    +				$secon[$i]='vingt et';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +				else {
    +				$secon[$i]='vingt';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +			}
    +			else if($dix[$i]==3){
    +				if($unite[$i]==1){
    +				$secon[$i]='trente et';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +				else {
    +				$secon[$i]='trente';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +			}
    +			else if($dix[$i]==4){
    +				if($unite[$i]==1){
    +				$secon[$i]='quarante et';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +				else {
    +				$secon[$i]='quarante';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +			}
    +			else if($dix[$i]==5){
    +				if($unite[$i]==1){
    +				$secon[$i]='cinquante et';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +				else {
    +				$secon[$i]='cinquante';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +			}
    +			else if($dix[$i]==6){
    +				if($unite[$i]==1){
    +				$secon[$i]='soixante et';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +				else {
    +				$secon[$i]='soixante';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +			}
    +			else if($dix[$i]==7){
    +				if($unite[$i]==1){
    +				$secon[$i]='soixante et';
    +				$prim[$i]=$chif[$unite[$i]+10];
    +				}
    +				else {
    +				$secon[$i]='soixante';
    +				$prim[$i]=$chif[$unite[$i]+10];
    +				}
    +			}
    +			else if($dix[$i]==8){
    +				if($unite[$i]==1){
    +				$secon[$i]='quatre-vingts et';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +				else {
    +				$secon[$i]='quatre-vingt';
    +				$prim[$i]=$chif[$unite[$i]];
    +				}
    +			}
    +			else if($dix[$i]==9){
    +				if($unite[$i]==1){
    +				$secon[$i]='quatre-vingts et';
    +				$prim[$i]=$chif[$unite[$i]+10];
    +				}
    +				else {
    +				$secon[$i]='quatre-vingts';
    +				$prim[$i]=$chif[$unite[$i]+10];
    +				}
    +			}
    +			if($cent[$i]==1) $trio[$i]='cent';
    +			else if($cent[$i]!=0 || $cent[$i]!='') $trio[$i]=$chif[$cent[$i]] .' cents';
     		}
    -		else if($dix[$i]==1){
    -			$secon[$i]='';
    -			$prim[$i]=$chif[($unite[$i]+10)];
    -		}
    -		else if($dix[$i]==2){
    -			if($unite[$i]==1){
    -			$secon[$i]='vingt et';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -			else {
    -			$secon[$i]='vingt';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -		}
    -		else if($dix[$i]==3){
    -			if($unite[$i]==1){
    -			$secon[$i]='trente et';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -			else {
    -			$secon[$i]='trente';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -		}
    -		else if($dix[$i]==4){
    -			if($unite[$i]==1){
    -			$secon[$i]='quarante et';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -			else {
    -			$secon[$i]='quarante';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -		}
    -		else if($dix[$i]==5){
    -			if($unite[$i]==1){
    -			$secon[$i]='cinquante et';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -			else {
    -			$secon[$i]='cinquante';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -		}
    -		else if($dix[$i]==6){
    -			if($unite[$i]==1){
    -			$secon[$i]='soixante et';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -			else {
    -			$secon[$i]='soixante';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -		}
    -		else if($dix[$i]==7){
    -			if($unite[$i]==1){
    -			$secon[$i]='soixante et';
    -			$prim[$i]=$chif[$unite[$i]+10];
    -			}
    -			else {
    -			$secon[$i]='soixante';
    -			$prim[$i]=$chif[$unite[$i]+10];
    -			}
    -		}
    -		else if($dix[$i]==8){
    -			if($unite[$i]==1){
    -			$secon[$i]='quatre-vingts et';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -			else {
    -			$secon[$i]='quatre-vingt';
    -			$prim[$i]=$chif[$unite[$i]];
    -			}
    -		}
    -		else if($dix[$i]==9){
    -			if($unite[$i]==1){
    -			$secon[$i]='quatre-vingts et';
    -			$prim[$i]=$chif[$unite[$i]+10];
    -			}
    -			else {
    -			$secon[$i]='quatre-vingts';
    -			$prim[$i]=$chif[$unite[$i]+10];
    -			}
    -		}
    -		if($cent[$i]==1) $trio[$i]='cent';
    -		else if($cent[$i]!=0 || $cent[$i]!='') $trio[$i]=$chif[$cent[$i]] .' cents';
    +
    +
    +		$chif2=array('', 'dix', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante-dix', 'quatre-vingts', 'quatre-vingts dix');
    +		$secon_c=$chif2[$dix_c];
    +		if($cent_c==1) $trio_c='cent';
    +		else if($cent_c!=0 || $cent_c!='') $trio_c=$chif[$cent_c] .' cents';
    +
    +		if(($cent[3]==0 || $cent[3]=='') && ($dix[3]==0 || $dix[3]=='') && ($unite[3]==1))
    +			$somme = $trio[3]. '  ' .$secon[3]. ' ' . $prim[3]. ' million ';
    +		else if(($cent[3]!=0 && $cent[3]!='') || ($dix[3]!=0 && $dix[3]!='') || ($unite[3]!=0 && $unite[3]!=''))
    +			$somme = $trio[3]. ' ' .$secon[3]. ' ' . $prim[3]. ' millions ';
    +		else
    +			$somme = $trio[3]. ' ' .$secon[3]. ' ' . $prim[3];
    +
    +		if(($cent[2]==0 || $cent[2]=='') && ($dix[2]==0 || $dix[2]=='') && ($unite[2]==1))
    +			$somme = $somme.' mille ';
    +		else if(($cent[2]!=0 && $cent[2]!='') || ($dix[2]!=0 && $dix[2]!='') || ($unite[2]!=0 && $unite[2]!=''))
    +			$somme = $somme. $trio[2]. ' ' .$secon[2]. ' ' . $prim[2]. ' milles ';
    +		else
    +			$somme = $somme. $trio[2]. ' ' .$secon[2]. ' ' . $prim[2];
    +
    +		$somme = $somme. $trio[1]. ' ' .$secon[1]. ' ' . $prim[1];
    +
    +		$somme = $somme. ' '. $dev1 .' ' ;
    +
    +		if(($cent_c=='0' || $cent_c=='') && ($dix_c=='0' || $dix_c==''))
    +			return $somme. ' et z&eacute;ro '. $dev2;
    +		else
    +			return $somme. $trio_c. ' ' .$secon_c. ' ' . $dev2;
     	}
    -
    -
    -$chif2=array('', 'dix', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante-dix', 'quatre-vingts', 'quatre-vingts dix');
    -	$secon_c=$chif2[$dix_c];
    -	if($cent_c==1) $trio_c='cent';
    -	else if($cent_c!=0 || $cent_c!='') $trio_c=$chif[$cent_c] .' cents';
    -
    -	if(($cent[3]==0 || $cent[3]=='') && ($dix[3]==0 || $dix[3]=='') && ($unite[3]==1))
    -		$somme = $trio[3]. '  ' .$secon[3]. ' ' . $prim[3]. ' million ';
    -	else if(($cent[3]!=0 && $cent[3]!='') || ($dix[3]!=0 && $dix[3]!='') || ($unite[3]!=0 && $unite[3]!=''))
    -		$somme = $trio[3]. ' ' .$secon[3]. ' ' . $prim[3]. ' millions ';
    -	else
    -		$somme = $trio[3]. ' ' .$secon[3]. ' ' . $prim[3];
    -
    -	if(($cent[2]==0 || $cent[2]=='') && ($dix[2]==0 || $dix[2]=='') && ($unite[2]==1))
    -		$somme = $somme.' mille ';
    -	else if(($cent[2]!=0 && $cent[2]!='') || ($dix[2]!=0 && $dix[2]!='') || ($unite[2]!=0 && $unite[2]!=''))
    -		$somme = $somme. $trio[2]. ' ' .$secon[2]. ' ' . $prim[2]. ' milles ';
    -	else
    -		$somme = $somme. $trio[2]. ' ' .$secon[2]. ' ' . $prim[2];
    -
    -	$somme = $somme. $trio[1]. ' ' .$secon[1]. ' ' . $prim[1];
    -
    -	$somme = $somme. ' '. $dev1 .' ' ;
    -
    -	if(($cent_c=='0' || $cent_c=='') && ($dix_c=='0' || $dix_c==''))
    -		return $somme. ' et z&eacute;ro '. $dev2;
    -	else
    -		return $somme. $trio_c. ' ' .$secon_c. ' ' . $dev2;
    -
     }
    diff --git a/htdocs/core/modules/dons/modules_don.php b/htdocs/core/modules/dons/modules_don.php
    index 4949cce94e1..aee52063227 100644
    --- a/htdocs/core/modules/dons/modules_don.php
    +++ b/htdocs/core/modules/dons/modules_don.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005      Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -34,17 +34,22 @@ require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
      */
     abstract class ModeleDon extends CommonDocGenerator
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return list of active generation modules
          *
    -     *  @param	DoliDB	$db     			Database handler
    -     *  @param  integer	$maxfilenamelength  Max length of value to show
    +     *  @param	DoliDB  $db     			Database handler
    +     *  @param  integer $maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
          */
         static function liste_modeles($db,$maxfilenamelength=0)
         {
    +        // phpcs:enable
             global $conf;
     
             $type='donation';
    @@ -63,7 +68,10 @@ abstract class ModeleDon extends CommonDocGenerator
      */
     abstract class ModeleNumRefDons
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
         /**
          * 	Return if a module can be used or not
    @@ -138,4 +146,3 @@ abstract class ModeleNumRefDons
             return $langs->trans("NotAvailable");
         }
     }
    -
    diff --git a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php
    index 9c45c135ac3..6a1543af4cf 100644
    --- a/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php
    +++ b/htdocs/core/modules/expedition/doc/doc_generic_shipment_odt.modules.php
    @@ -2,9 +2,10 @@
     /* Copyright (C) 2010-2012 	Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2014		Marcos García		<marcosgdf@gmail.com>
    -  * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    -
    -*
    + * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    + * Copyright (C) 2018       Philippe Grand      <philippe.grand@atoo-net.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
    @@ -39,10 +40,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_shipment_odt extends ModelePdfExpedition
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -52,10 +66,10 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -99,8 +113,8 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     	{
     		global $conf,$langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("errors","companies"));
     
     		$form = new Form($this->db);
     
    @@ -177,6 +191,7 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -190,6 +205,7 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager;
     
     		if (empty($srctemplatepath))
    @@ -211,10 +227,8 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
     
     		if ($conf->expedition->dir_output."/sending")
     		{
    @@ -333,6 +347,7 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     				catch(Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -348,6 +363,7 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     				}
     				catch(OdfException $e)
     				{
    +					dol_syslog($e->getMessage(), LOG_INFO);
     				}
     
     				// Make substitutions into odt of user info
    @@ -367,8 +383,9 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Make substitutions into odt of mysoc
    @@ -388,8 +405,9 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Make substitutions into odt of thirdparty
    @@ -407,8 +425,9 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Replace tags of object + external modules
    @@ -432,6 +451,7 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Replace tags of lines
    @@ -464,9 +484,11 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     								}
     								catch(OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -474,7 +496,7 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     						$odfHandler->mergeSegment($listlines);
     					}
     				}
    -				catch(OdfException $e)
    +				catch (OdfException $e)
     				{
     					$this->error=$e->getMessage();
     					dol_syslog($this->error, LOG_WARNING);
    @@ -488,8 +510,9 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     					try {
     						$odfHandler->setVars($key, $value, true, 'UTF-8');
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -501,16 +524,18 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
     				else {
     					try {
     					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -535,6 +560,4 @@ class doc_generic_shipment_odt extends ModelePdfExpedition
     
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php
    index 9a496cb5589..73de53f7904 100644
    --- a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php
    +++ b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Florian Henry		<florian.henry@open-concept.pro>
      * Copyright (C) 2015      Marcos García       <marcosgdf@gmail.com>
      *
    @@ -33,11 +33,82 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
     
     
     /**
    - *	Classe permettant de generer les borderaux envoi au modele Merou
    + *	Class to build sending documents with model Merou
      */
     class pdf_merou extends ModelePdfExpedition
     {
    -	var $emetteur;	// Objet societe qui emet
    +    /**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
    +
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
    +
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
    +
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +	/**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
     
     	/**
    @@ -65,12 +136,13 @@ class pdf_merou extends ModelePdfExpedition
     
     		$this->option_logo = 1;
     
    -		// Recupere emmetteur
    +		// Get source company
     		$this->emetteur=$mysoc;
     		if (! $this->emetteur->country_code) $this->emetteur->country_code=substr($langs->defaultlang,-2);    // By default if not defined
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build pdf onto disk
     	 *
    @@ -84,6 +156,7 @@ class pdf_merou extends ModelePdfExpedition
     	 */
     	function write_file(&$object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$conf,$langs,$mysoc,$hookmanager;
     
     		$object->fetch_thirdparty();
    @@ -91,10 +164,10 @@ class pdf_merou extends ModelePdfExpedition
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    -		
    -		// Translations
    +
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies", "propal", "deliveries", "sendings", "productbatch"));
    -		
    +
     		if ($conf->expedition->dir_output)
     		{
     			$object->fetch_thirdparty();
    @@ -260,7 +333,7 @@ class pdf_merou extends ModelePdfExpedition
     					$pdf->SetDrawColor(120,120,120);
     					$pdf->Rect(10+3, $curY, 3, 3);
     					$pdf->Rect(20+3, $curY, 3, 3);
    -					
    +
     					//Insertion de la reference du produit
     					$pdf->SetXY(30, $curY);
     					$pdf->SetFont('','B', $default_font_size - 3);
    @@ -353,7 +426,7 @@ class pdf_merou extends ModelePdfExpedition
                         @chmod($file, octdec($conf->global->MAIN_UMASK));
     
     				$this->result = array('fullpath'=>$file);
    -                
    +
     				return 1;
     			}
     			else
    @@ -385,7 +458,7 @@ class pdf_merou extends ModelePdfExpedition
     	{
     		global $langs;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
    -		
    +
     		// Translations
     		$langs->loadLangs(array("main", "bills"));
     
    diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php
    index d1e7ffe0917..f05c9dc31e7 100644
    --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php
    +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2012 Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2014-2015 Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2018      Frédéric France      <frederic.france@netlogic.fr>
      *
    @@ -32,11 +32,82 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
     
     
     /**
    - *	Classe permettant de generer les borderaux envoi au modele Rouget
    + *	Class to build sending documents with model Rouget
      */
     class pdf_rouget extends ModelePdfExpedition
     {
    -	var $emetteur;	// Objet societe qui emet
    +    /**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
    +
    +    /**
    +     * @var string model name
    +     */
    +    public $name;
    +
    +    /**
    +     * @var string model description (short text)
    +     */
    +    public $description;
    +
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +	/**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
     
     	/**
    @@ -75,8 +146,7 @@ class pdf_rouget extends ModelePdfExpedition
     		$this->posxqtytoship=$this->page_largeur - $this->marge_droite - 28;
     		$this->posxpuht=$this->page_largeur - $this->marge_droite;
     
    -		if (!empty($conf->global->MAIN_PDF_SHIPPING_DISPLAY_AMOUNT_HT)) {	// Show also the prices
    -
    +		if (!empty($conf->global->SHIPPING_PDF_DISPLAY_AMOUNT_HT)) {	// Show also the prices
     			$this->posxweightvol=$this->page_largeur - $this->marge_droite - 118;
     			$this->posxqtyordered=$this->page_largeur - $this->marge_droite - 96;
     			$this->posxqtytoship=$this->page_largeur - $this->marge_droite - 68;
    @@ -102,6 +172,7 @@ class pdf_rouget extends ModelePdfExpedition
     		}
     	}
     
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build pdf onto disk
     	 *
    @@ -115,6 +186,7 @@ class pdf_rouget extends ModelePdfExpedition
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +		// phpcs:enable
     		global $user,$conf,$langs,$hookmanager;
     
     		$object->fetch_thirdparty();
    @@ -123,7 +195,7 @@ class pdf_rouget extends ModelePdfExpedition
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		// Translations
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies", "propal", "deliveries", "sendings", "productbatch"));
     
     		$nblignes = count($object->lines);
    @@ -460,8 +532,11 @@ class pdf_rouget extends ModelePdfExpedition
     					    $voltxt=round($object->lines[$i]->volume * $object->lines[$i]->qty_shipped, 5).' '.measuring_units_string($object->lines[$i]->volume_units?$object->lines[$i]->volume_units:0,"volume");
     					}
     
    -					$pdf->writeHTMLCell($this->posxqtyordered - $this->posxweightvol + 2, 3, $this->posxweightvol - 1, $curY, $weighttxt.(($weighttxt && $voltxt)?'<br>':'').$voltxt, 0, 0, false, true, 'C');
    -					//$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), 3, $weighttxt.(($weighttxt && $voltxt)?'<br>':'').$voltxt,'','C');
    +					if (empty($conf->global->SHIPPING_PDF_HIDE_WEIGHT_AND_VOLUME))
    +					{
    +						$pdf->writeHTMLCell($this->posxqtyordered - $this->posxweightvol + 2, 3, $this->posxweightvol - 1, $curY, $weighttxt.(($weighttxt && $voltxt)?'<br>':'').$voltxt, 0, 0, false, true, 'C');
    +						//$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), 3, $weighttxt.(($weighttxt && $voltxt)?'<br>':'').$voltxt,'','C');
    +					}
     
     					if (empty($conf->global->SHIPPING_PDF_HIDE_ORDERED))
     					{
    @@ -469,10 +544,13 @@ class pdf_rouget extends ModelePdfExpedition
     					   $pdf->MultiCell(($this->posxqtytoship - $this->posxqtyordered), 3, $object->lines[$i]->qty_asked,'','C');
     					}
     
    -					$pdf->SetXY($this->posxqtytoship, $curY);
    -					$pdf->MultiCell(($this->posxpuht - $this->posxqtytoship), 3, $object->lines[$i]->qty_shipped,'','C');
    +					if (empty($conf->global->SHIPPING_PDF_HIDE_QTYTOSHIP))
    +					{
    +						$pdf->SetXY($this->posxqtytoship, $curY);
    +						$pdf->MultiCell(($this->posxpuht - $this->posxqtytoship), 3, $object->lines[$i]->qty_shipped,'','C');
    +					}
     
    -					if(!empty($conf->global->MAIN_PDF_SHIPPING_DISPLAY_AMOUNT_HT))
    +					if(!empty($conf->global->SHIPPING_PDF_DISPLAY_AMOUNT_HT))
     					{
     						$pdf->SetXY($this->posxpuht, $curY);
     						$pdf->MultiCell(($this->posxtotalht - $this->posxpuht-1), 3, price($object->lines[$i]->subprice, 0, $outputlangs),'','R');
    @@ -580,6 +658,7 @@ class pdf_rouget extends ModelePdfExpedition
     		}
     	}
     
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show total to pay
     	 *
    @@ -592,6 +671,7 @@ class pdf_rouget extends ModelePdfExpedition
     	 */
     	function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs)
     	{
    +		// phpcs:enable
     		global $conf,$mysoc;
     
             $sign=1;
    @@ -645,35 +725,40 @@ class pdf_rouget extends ModelePdfExpedition
             	$pdf->MultiCell($this->posxqtytoship - $this->posxqtyordered, $tab2_hl, $totalOrdered, 0, 'C', 1);
             }
     
    -    	$pdf->SetXY($this->posxqtytoship, $tab2_top + $tab2_hl * $index);
    -    	$pdf->MultiCell($this->posxpuht - $this->posxqtytoship, $tab2_hl, $totalToShip, 0, 'C', 1);
    -
    -		if(!empty($conf->global->MAIN_PDF_SHIPPING_DISPLAY_AMOUNT_HT)) {
    +        if (empty($conf->global->SHIPPING_PDF_HIDE_QTYTOSHIP))
    +        {
    +        	$pdf->SetXY($this->posxqtytoship, $tab2_top + $tab2_hl * $index);
    +        	$pdf->MultiCell($this->posxpuht - $this->posxqtytoship, $tab2_hl, $totalToShip, 0, 'C', 1);
    +        }
     
    +		if (!empty($conf->global->SHIPPING_PDF_DISPLAY_AMOUNT_HT))
    +		{
     	    	$pdf->SetXY($this->posxpuht, $tab2_top + $tab2_hl * $index);
     	    	$pdf->MultiCell($this->posxtotalht - $this->posxpuht, $tab2_hl, '', 0, 'C', 1);
     
     	    	$pdf->SetXY($this->posxtotalht, $tab2_top + $tab2_hl * $index);
     	    	$pdf->MultiCell($this->page_largeur - $this->marge_droite - $this->posxtotalht, $tab2_hl, price($object->total_ht, 0, $outputlangs), 0, 'C', 1);
    -
     		}
     
    -		// Total Weight
    -		if ($totalWeighttoshow)
    +		if (empty($conf->global->SHIPPING_PDF_HIDE_WEIGHT_AND_VOLUME))
     		{
    -    		$pdf->SetXY($this->posxweightvol, $tab2_top + $tab2_hl * $index);
    -    		$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), $tab2_hl, $totalWeighttoshow, 0, 'C', 1);
    +			// Total Weight
    +			if ($totalWeighttoshow)
    +			{
    +	    		$pdf->SetXY($this->posxweightvol, $tab2_top + $tab2_hl * $index);
    +	    		$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), $tab2_hl, $totalWeighttoshow, 0, 'C', 1);
     
    -    		$index++;
    -		}
    -		if ($totalVolumetoshow)
    -		{
    -    		$pdf->SetXY($this->posxweightvol, $tab2_top + $tab2_hl * $index);
    -    		$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), $tab2_hl, $totalVolumetoshow, 0, 'C', 1);
    +	    		$index++;
    +			}
    +			if ($totalVolumetoshow)
    +			{
    +	    		$pdf->SetXY($this->posxweightvol, $tab2_top + $tab2_hl * $index);
    +	    		$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), $tab2_hl, $totalVolumetoshow, 0, 'C', 1);
     
    -		    $index++;
    +			    $index++;
    +			}
    +			if (! $totalWeighttoshow && ! $totalVolumetoshow) $index++;
     		}
    -		if (! $totalWeighttoshow && ! $totalVolumetoshow) $index++;
     
     		$pdf->SetTextColor(0,0,0);
     
    @@ -720,11 +805,14 @@ class pdf_rouget extends ModelePdfExpedition
     			$pdf->MultiCell($this->posxqtyordered - $this->posxdesc, 2, $outputlangs->transnoentities("Description"), '', 'L');
     		}
     
    -		$pdf->line($this->posxweightvol-1, $tab_top, $this->posxweightvol-1, $tab_top + $tab_height);
    -		if (empty($hidetop))
    +		if (empty($conf->global->SHIPPING_PDF_HIDE_WEIGHT_AND_VOLUME))
     		{
    -			$pdf->SetXY($this->posxweightvol-1, $tab_top+1);
    -			$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), 2, $outputlangs->transnoentities("WeightVolShort"),'','C');
    +			$pdf->line($this->posxweightvol-1, $tab_top, $this->posxweightvol-1, $tab_top + $tab_height);
    +			if (empty($hidetop))
    +			{
    +				$pdf->SetXY($this->posxweightvol-1, $tab_top+1);
    +				$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), 2, $outputlangs->transnoentities("WeightVolShort"),'','C');
    +			}
     		}
     
             if (empty($conf->global->SHIPPING_PDF_HIDE_ORDERED))
    @@ -737,14 +825,17 @@ class pdf_rouget extends ModelePdfExpedition
         		}
             }
     
    -		$pdf->line($this->posxqtytoship-1, $tab_top, $this->posxqtytoship-1, $tab_top + $tab_height);
    -		if (empty($hidetop))
    -		{
    -			$pdf->SetXY($this->posxqtytoship, $tab_top+1);
    -			$pdf->MultiCell(($this->posxpuht - $this->posxqtytoship), 2, $outputlangs->transnoentities("QtyToShip"),'','C');
    -		}
    +        if (empty($conf->global->SHIPPING_PDF_HIDE_QTYTOSHIP))
    +        {
    +			$pdf->line($this->posxqtytoship-1, $tab_top, $this->posxqtytoship-1, $tab_top + $tab_height);
    +			if (empty($hidetop))
    +			{
    +				$pdf->SetXY($this->posxqtytoship, $tab_top+1);
    +				$pdf->MultiCell(($this->posxpuht - $this->posxqtytoship), 2, $outputlangs->transnoentities("QtyToShip"),'','C');
    +			}
    +        }
     
    -		if(!empty($conf->global->MAIN_PDF_SHIPPING_DISPLAY_AMOUNT_HT)) {
    +		if (!empty($conf->global->SHIPPING_PDF_DISPLAY_AMOUNT_HT)) {
     
     			$pdf->line($this->posxpuht-1, $tab_top, $this->posxpuht-1, $tab_top + $tab_height);
     			if (empty($hidetop))
    @@ -759,9 +850,7 @@ class pdf_rouget extends ModelePdfExpedition
     				$pdf->SetXY($this->posxtotalht-1, $tab_top+1);
     				$pdf->MultiCell(($this->page_largeur - $this->marge_droite - $this->posxtotalht), 2, $outputlangs->transnoentities("TotalHT"),'','C');
     			}
    -
     		}
    -
     	}
     
     	/**
    @@ -1027,6 +1116,4 @@ class pdf_rouget extends ModelePdfExpedition
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'SHIPPING_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/expedition/mod_expedition_ribera.php b/htdocs/core/modules/expedition/mod_expedition_ribera.php
    index c002da1eee2..35a5eb2325b 100644
    --- a/htdocs/core/modules/expedition/mod_expedition_ribera.php
    +++ b/htdocs/core/modules/expedition/mod_expedition_ribera.php
    @@ -29,9 +29,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/expedition/modules_expedition.php
      */
     class mod_expedition_ribera extends ModelNumRefExpedition
     {
    -	var $version='dolibarr';
    -	var $error = '';
    -	var $nom = 'Ribera';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Ribera';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Ribera';
     
     	/**
     	 *	Return default description of numbering model
    @@ -40,7 +59,7 @@ class mod_expedition_ribera extends ModelNumRefExpedition
     	 */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    @@ -121,6 +140,7 @@ class mod_expedition_ribera extends ModelNumRefExpedition
     		return  $numFinal;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
    @@ -130,8 +150,7 @@ class mod_expedition_ribera extends ModelNumRefExpedition
     	 */
         function expedition_get_num($objsoc,$objforref)
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$objforref);
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/expedition/mod_expedition_safor.php b/htdocs/core/modules/expedition/mod_expedition_safor.php
    index 826ba6665c4..2ebf9335755 100644
    --- a/htdocs/core/modules/expedition/mod_expedition_safor.php
    +++ b/htdocs/core/modules/expedition/mod_expedition_safor.php
    @@ -28,10 +28,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/expedition/modules_expedition.php
      */
     class mod_expedition_safor extends ModelNumRefExpedition
     {
    -	var $version='dolibarr';
    -	var $prefix='SH';
    -	var $error='';
    -	var $nom='Safor';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	public $prefix='SH';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Safor';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Safor';
     
     
     	/**
    @@ -130,6 +150,7 @@ class mod_expedition_safor extends ModelNumRefExpedition
     		return $this->prefix.$yymm."-".$num;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
    @@ -139,7 +160,7 @@ class mod_expedition_safor extends ModelNumRefExpedition
     	 */
     	function expedition_get_num($objsoc,$objforref)
     	{
    +        // phpcs:enable
     		return $this->getNextValue($objsoc,$objforref);
     	}
    -
     }
    diff --git a/htdocs/core/modules/expedition/modules_expedition.php b/htdocs/core/modules/expedition/modules_expedition.php
    index f46fa33c5f1..a22ae0d0f99 100644
    --- a/htdocs/core/modules/expedition/modules_expedition.php
    +++ b/htdocs/core/modules/expedition/modules_expedition.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
      * Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2011-2013 Philippe Grand       <philippe.grand@atoo-net.com>
    @@ -36,9 +36,13 @@
      */
     abstract class ModelePdfExpedition extends CommonDocGenerator
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation modules
     	 *
    @@ -48,6 +52,7 @@ abstract class ModelePdfExpedition extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='shipping';
    @@ -66,7 +71,10 @@ abstract class ModelePdfExpedition extends CommonDocGenerator
      */
     abstract class ModelNumRefExpedition
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/** Return if a model can be used or not
     	 *
    diff --git a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php
    index 3244bb25340..ec03a2cef8e 100644
    --- a/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php
    +++ b/htdocs/core/modules/expensereport/doc/pdf_standard.modules.php
    @@ -52,24 +52,64 @@ class pdf_standard extends ModeleExpenseReport
          * @var string model description (short text)
          */
         public $description;
    -    
    +
     	/**
          * @var string document type
          */
         public $type;
     
    -    var $phpmin = array(4,3,0); // Minimum version of PHP required by module
    -    var $version = 'dolibarr';
    +    /**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
     
    -    var $page_largeur;
    -    var $page_hauteur;
    -    var $format;
    -	var $marge_gauche;
    -	var	$marge_droite;
    -	var	$marge_haute;
    -	var	$marge_basse;
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
    -    var $emetteur;	// Objet societe qui emet
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
     
     	/**
    @@ -80,7 +120,7 @@ class pdf_standard extends ModeleExpenseReport
     	function __construct($db)
     	{
     		global $conf, $langs, $mysoc;
    -		
    +
     		// Translations
     		$langs->loadLangs(array("main", "trips", "projects"));
     
    @@ -150,7 +190,8 @@ class pdf_standard extends ModeleExpenseReport
     	}
     
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Function to build pdf onto disk
          *
          *  @param		Object		$object				Object to generate
    @@ -163,13 +204,14 @@ class pdf_standard extends ModeleExpenseReport
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$db,$hookmanager;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    -		
    -		// Translations
    +
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "trips", "projects", "dict"));
     
     		$nblignes = count($object->lines);
    @@ -236,7 +278,7 @@ class pdf_standard extends ModeleExpenseReport
     				$pagenb=0;
     				$pdf->SetDrawColor(128,128,128);
     
    -				$pdf->SetTitle($outputlangs->convToOutputCharset($object->ref_number));
    +				$pdf->SetTitle($outputlangs->convToOutputCharset($object->ref));
     				$pdf->SetSubject($outputlangs->transnoentities("Trips"));
     				$pdf->SetCreator("Dolibarr ".DOL_VERSION);
     				$pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs)));
    @@ -437,7 +479,6 @@ class pdf_standard extends ModeleExpenseReport
     						$pagenb++;
     						if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
     					}
    -
     				}
     
     				// Show square
    @@ -526,9 +567,9 @@ class pdf_standard extends ModeleExpenseReport
     	 */
     	function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
     	{
    -		global $conf,$langs,$hookmanager;
    -		
    -		// Translations
    +		global $conf, $langs, $hookmanager;
    +
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "trips", "companies"));
     
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
    @@ -736,7 +777,6 @@ class pdf_standard extends ModeleExpenseReport
     				}
     			}
     		}
    -
        	}
     
     	/**
    @@ -877,6 +917,4 @@ class pdf_standard extends ModeleExpenseReport
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'EXPENSEREPORT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/expensereport/mod_expensereport_jade.php b/htdocs/core/modules/expensereport/mod_expensereport_jade.php
    index c6153d422eb..385a7558c4c 100644
    --- a/htdocs/core/modules/expensereport/mod_expensereport_jade.php
    +++ b/htdocs/core/modules/expensereport/mod_expensereport_jade.php
    @@ -28,10 +28,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/expensereport/modules_expenserepo
      */
     class mod_expensereport_jade extends ModeleNumRefExpenseReport
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefix='ER';
    -	var $error='';
    -	var $nom='Jade';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='ER';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Jade';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Jade';
     
     
         /**
    diff --git a/htdocs/core/modules/expensereport/mod_expensereport_sand.php b/htdocs/core/modules/expensereport/mod_expensereport_sand.php
    index 4222bf163d5..95cc3d39c95 100644
    --- a/htdocs/core/modules/expensereport/mod_expensereport_sand.php
    +++ b/htdocs/core/modules/expensereport/mod_expensereport_sand.php
    @@ -30,9 +30,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/expensereport/modules_expenserepo
      */
     class mod_expensereport_sand extends ModeleNumRefExpenseReport
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Sand';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Sand';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Sand';
     
     
         /**
    @@ -42,7 +61,7 @@ class mod_expensereport_sand extends ModeleNumRefExpenseReport
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    diff --git a/htdocs/core/modules/expensereport/modules_expensereport.php b/htdocs/core/modules/expensereport/modules_expensereport.php
    index e97766b38f6..9ff7f671f9f 100644
    --- a/htdocs/core/modules/expensereport/modules_expensereport.php
    +++ b/htdocs/core/modules/expensereport/modules_expensereport.php
    @@ -23,18 +23,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModeleExpenseReport extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation modules
    -	 *
    +     *
          *  @param	DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
    -	 */
    +     */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='expensereport';
    @@ -45,9 +50,9 @@ abstract class ModeleExpenseReport extends CommonDocGenerator
     
     		return $liste;
     	}
    -
     }
     
    +// phpcs:ignore PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     /**
      * expensereport_pdf_create
      *
    @@ -63,6 +68,7 @@ abstract class ModeleExpenseReport extends CommonDocGenerator
      */
     function expensereport_pdf_create(DoliDB $db, ExpenseReport $object, $message, $modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0)
     {
    +    // phpcs:enable
     	return $object->generateDocument($modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
     }
     
    @@ -73,7 +79,10 @@ function expensereport_pdf_create(DoliDB $db, ExpenseReport $object, $message, $
     
     abstract class ModeleNumRefExpenseReport
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *	Return if a module can be used or not
    @@ -134,7 +143,7 @@ abstract class ModeleNumRefExpenseReport
     	/**
     	 *	Renvoie version du module numerotation
     	 *
    -	 *	@return     string      Valeur
    +	 *  @return     string      Valeur
     	 */
     	function getVersion()
     	{
    diff --git a/htdocs/core/modules/export/export_csv.modules.php b/htdocs/core/modules/export/export_csv.modules.php
    index 8d35ff63225..1efe6161647 100644
    --- a/htdocs/core/modules/export/export_csv.modules.php
    +++ b/htdocs/core/modules/export/export_csv.modules.php
    @@ -30,17 +30,31 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/export/modules_export.php';
      */
     class ExportCsv extends ModeleExports
     {
    -	var $id;
    -	var $label;
    -	var $extension;
    -	var $version;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $label_lib;
    -	var $version_lib;
    +	/**
    +     * @var string export files label
    +     */
    +    public $label;
     
    -	var $separator;
    +	public $extension;
     
    -	var $handle;    // Handle fichier
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	public $label_lib;
    +
    +	public $version_lib;
    +
    +	public $separator;
    +
    +	public $handle;    // Handle fichier
     
     
     	/**
    @@ -50,7 +64,7 @@ class ExportCsv extends ModeleExports
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs;
    +		global $conf, $langs;
     		$this->db = $db;
     
     		$this->separator=',';
    @@ -68,7 +82,6 @@ class ExportCsv extends ModeleExports
     		// If driver use an external library, put its name here
     		$this->label_lib='Dolibarr';
     		$this->version_lib=DOL_VERSION;
    -
     	}
     
     	/**
    @@ -142,6 +155,7 @@ class ExportCsv extends ModeleExports
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Open output file
     	 *
    @@ -151,6 +165,7 @@ class ExportCsv extends ModeleExports
     	 */
     	function open_file($file,$outputlangs)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		dol_syslog("ExportCsv::open_file file=".$file);
    @@ -169,6 +184,7 @@ class ExportCsv extends ModeleExports
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output header into file
     	 *
    @@ -177,10 +193,12 @@ class ExportCsv extends ModeleExports
     	 */
     	function write_header($outputlangs)
     	{
    +        // phpcs:enable
     		return 0;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output title line into file
     	 *
    @@ -192,6 +210,7 @@ class ExportCsv extends ModeleExports
     	 */
     	function write_title($array_export_fields_label,$array_selected_sorted,$outputlangs,$array_types)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if (! empty($conf->global->EXPORT_CSV_FORCE_CHARSET))
    @@ -215,7 +234,8 @@ class ExportCsv extends ModeleExports
     	}
     
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *	Output record line into file
          *
          *  @param     	array		$array_selected_sorted      Array with list of field to export
    @@ -226,6 +246,7 @@ class ExportCsv extends ModeleExports
     	 */
     	function write_record($array_selected_sorted,$objp,$outputlangs,$array_types)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if (! empty($conf->global->EXPORT_CSV_FORCE_CHARSET))
    @@ -258,7 +279,7 @@ class ExportCsv extends ModeleExports
     				$array = $array['options'];
     				$newvalue = $array[$newvalue];
     			}
    -			
    +
     			fwrite($this->handle,$newvalue.$this->separator);
     			$this->col++;
     		}
    @@ -267,6 +288,7 @@ class ExportCsv extends ModeleExports
     		return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output footer into file
     	 *
    @@ -275,9 +297,11 @@ class ExportCsv extends ModeleExports
     	 */
     	function write_footer($outputlangs)
     	{
    +        // phpcs:enable
     		return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Close file handle
     	 *
    @@ -285,6 +309,7 @@ class ExportCsv extends ModeleExports
     	 */
     	function close_file()
     	{
    +        // phpcs:enable
     		fclose($this->handle);
     		return 0;
     	}
    @@ -303,14 +328,14 @@ class ExportCsv extends ModeleExports
     	{
     		global $conf;
     		$addquote=0;
    -		
    +
     
     		// Rule Dolibarr: No HTML
        		//print $charset.' '.$newvalue."\n";
        		//$newvalue=dol_string_nohtmltag($newvalue,0,$charset);
        		$newvalue=dol_htmlcleanlastbr($newvalue);
        		//print $charset.' '.$newvalue."\n";
    -		
    +
     		// Rule 1 CSV: No CR, LF in cells (except if USE_STRICT_CSV_RULES is on, we can keep record as it is but we must add quotes)
     		$oldvalue=$newvalue;
     		$newvalue=str_replace("\r",'',$newvalue);
    @@ -321,7 +346,7 @@ class ExportCsv extends ModeleExports
     			$newvalue=$oldvalue;
     			$addquote=1;
     		}
    -		
    +
     		// Rule 2 CSV: If value contains ", we must escape with ", and add "
     		if (preg_match('/"/',$newvalue))
     		{
    @@ -337,6 +362,4 @@ class ExportCsv extends ModeleExports
     
     		return ($addquote?'"':'').$newvalue.($addquote?'"':'');
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/export/export_excel.modules.php b/htdocs/core/modules/export/export_excel.modules.php
    index 00d06e8511a..1982fffb07e 100644
    --- a/htdocs/core/modules/export/export_excel.modules.php
    +++ b/htdocs/core/modules/export/export_excel.modules.php
    @@ -32,19 +32,37 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
      */
     class ExportExcel extends ModeleExports
     {
    -	var $id;
    -	var $label;
    -	var $extension;
    -	var $version;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $label_lib;
    -	var $version_lib;
    +    /**
    +     * @var string Export Excel label
    +     */
    +    public $label;
     
    -	var $workbook;      // Handle fichier
    -	var $worksheet;     // Handle onglet
    -	var $row;
    -	var $col;
    -    var $file;          // To save filename
    +	public $extension;
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	public $label_lib;
    +
    +	public $version_lib;
    +
    +	public $workbook;      // Handle file
    +
    +	public $worksheet;     // Handle sheet
    +
    +	public $row;
    +
    +	public $col;
    +
    +    public $file;          // To save filename
     
     
     	/**
    @@ -65,7 +83,7 @@ class ExportExcel extends ModeleExports
     		$this->version='1.30';             // Driver version
     
     		$this->disabled = (in_array(constant('PHPEXCEL_PATH'),array('disabled','disabled/'))?1:0);	// A condition to disable module (used for native debian packages)
    -		
    +
     		if (empty($this->disabled))
     		{
         		// If driver use an external library, put its name here
    @@ -160,6 +178,7 @@ class ExportExcel extends ModeleExports
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Open output file
     	 *
    @@ -169,6 +188,7 @@ class ExportExcel extends ModeleExports
     	 */
     	function open_file($file,$outputlangs)
     	{
    +        // phpcs:enable
     		global $user,$conf,$langs;
     
     		if (! empty($conf->global->MAIN_USE_PHP_WRITEEXCEL))
    @@ -229,20 +249,23 @@ class ExportExcel extends ModeleExports
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *	Write header
    +	 *  Write header
     	 *
    -     *	@param      Translate	$outputlangs        Object lang to translate values
    +     *  @param      Translate	$outputlangs        Object lang to translate values
     	 * 	@return		int								<0 if KO, >0 if OK
     	 */
     	function write_header($outputlangs)
     	{
    +        // phpcs:enable
     		//$outputlangs->charset_output='ISO-8859-1';	// Because Excel 5 format is ISO
     
     		return 0;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *  Output title line into file
          *
    @@ -254,6 +277,7 @@ class ExportExcel extends ModeleExports
     	 */
     	function write_title($array_export_fields_label,$array_selected_sorted,$outputlangs,$array_types)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		// Create a format for the column headings
    @@ -298,6 +322,7 @@ class ExportExcel extends ModeleExports
     		return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *  Output record line into file
          *
    @@ -309,6 +334,7 @@ class ExportExcel extends ModeleExports
     	 */
     	function write_record($array_selected_sorted,$objp,$outputlangs,$array_types)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		// Create a format for the column headings
    @@ -329,14 +355,14 @@ class ExportExcel extends ModeleExports
     
     			$newvalue=$this->excel_clean($newvalue);
     			$typefield=isset($array_types[$code])?$array_types[$code]:'';
    -			
    +
     			if (preg_match('/^Select:/i', $typefield, $reg) && $typefield = substr($typefield, 7))
     			{
     				$array = unserialize($typefield);
     				$array = $array['options'];
     				$newvalue = $array[$newvalue];
     			}
    -			
    +
     			// Traduction newvalue
     			if (preg_match('/^\((.*)\)$/i',$newvalue,$reg))
     			{
    @@ -416,6 +442,7 @@ class ExportExcel extends ModeleExports
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *	Write footer
          *
    @@ -424,17 +451,20 @@ class ExportExcel extends ModeleExports
          */
     	function write_footer($outputlangs)
     	{
    +        // phpcs:enable
     		return 0;
     	}
     
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *	Close Excel file
          *
     	 * 	@return		int							<0 if KO, >0 if OK
          */
     	function close_file()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if (! empty($conf->global->MAIN_USE_PHP_WRITEEXCEL))
    @@ -453,7 +483,8 @@ class ExportExcel extends ModeleExports
     	}
     
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          * Clean a cell to respect rules of Excel file cells
          *
          * @param 	string	$newvalue	String to clean
    @@ -461,6 +492,7 @@ class ExportExcel extends ModeleExports
          */
         function excel_clean($newvalue)
         {
    +        // phpcs:enable
     		// Rule Dolibarr: No HTML
         	$newvalue=dol_string_nohtmltag($newvalue);
     
    @@ -490,4 +522,3 @@ class ExportExcel extends ModeleExports
         	return $letter;
         }
     }
    -
    diff --git a/htdocs/core/modules/export/export_excel2007.modules.php b/htdocs/core/modules/export/export_excel2007.modules.php
    index df9fd9d5705..6c80ac5977e 100644
    --- a/htdocs/core/modules/export/export_excel2007.modules.php
    +++ b/htdocs/core/modules/export/export_excel2007.modules.php
    @@ -33,19 +33,37 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
      */
     class ExportExcel2007 extends ExportExcel
     {
    -	var $id;
    -	var $label;
    -	var $extension;
    -	var $version;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $label_lib;
    -	var $version_lib;
    +	/**
    +     * @var string label
    +     */
    +    public $label;
     
    -	var $workbook;      // Handle fichier
    -	var $worksheet;     // Handle onglet
    -	var $row;
    -	var $col;
    -    var $file;          // To save filename
    +	public $extension;
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	public $label_lib;
    +
    +	public $version_lib;
    +
    +	public $workbook;      // Handle fichier
    +
    +	public $worksheet;     // Handle onglet
    +
    +	public $row;
    +
    +	public $col;
    +
    +    public $file;          // To save filename
     
     	/**
     	 *	Constructor
    @@ -65,7 +83,7 @@ class ExportExcel2007 extends ExportExcel
     		$this->version='1.30';             // Driver version
     
     		$this->disabled = (in_array(constant('PHPEXCEL_PATH'),array('disabled','disabled/'))?1:0);	// A condition to disable module (used for native debian packages)
    -		
    +
     		if (empty($this->disabled))
     		{
         		// If driver use an external library, put its name here
    @@ -85,18 +103,20 @@ class ExportExcel2007 extends ExportExcel
                     $this->version_lib='1.8.0';		// No way to get info from library
         		}
     		}
    -		
    +
     		$this->row=0;
     	}
     
     
    -	/**
    -     *	Close Excel file
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Close Excel file
          *
    -	 * 	@return		int							<0 if KO, >0 if OK
    +	 *  @return		int							<0 if KO, >0 if OK
          */
     	function close_file()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if (! empty($conf->global->MAIN_USE_PHP_WRITEEXCEL))
    @@ -113,6 +133,4 @@ class ExportExcel2007 extends ExportExcel
         	}
     		return 1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/export/export_tsv.modules.php b/htdocs/core/modules/export/export_tsv.modules.php
    index 2945c5095b8..8afa9ded884 100644
    --- a/htdocs/core/modules/export/export_tsv.modules.php
    +++ b/htdocs/core/modules/export/export_tsv.modules.php
    @@ -31,17 +31,31 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/export/modules_export.php';
      */
     class ExportTsv extends ModeleExports
     {
    -    var $id;
    -    var $label;
    -    var $extension;
    -    var $version;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -    var $label_lib;
    -    var $version_lib;
    +    /**
    +     * @var string label
    +     */
    +    public $label;
     
    -    var $separator="\t";
    +    public $extension;
     
    -    var $handle;    // Handle fichier
    +    /**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +    public $label_lib;
    +
    +    public $version_lib;
    +
    +    public $separator="\t";
    +
    +    public $handle;    // Handle fichier
     
     
         /**
    @@ -137,20 +151,22 @@ class ExportTsv extends ModeleExports
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	*	Open output file
     	*
     	 *	@param		string		$file			Path of filename to generate
     	*	@param		Translate	$outputlangs	Output language object
     	*	@return		int							<0 if KO, >=0 if OK
    -	*/
    -	function open_file($file,$outputlangs)
    +    */
    +    function open_file($file,$outputlangs)
         {
    +        // phpcs:enable
             global $langs;
     
             dol_syslog("ExportTsv::open_file file=".$file);
     
    -		$ret=1;
    +        $ret=1;
     
             $outputlangs->load("exports");
     		$this->handle = fopen($file, "wt");
    @@ -164,6 +180,7 @@ class ExportTsv extends ModeleExports
     		return $ret;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output header into file
     	 *
    @@ -172,11 +189,13 @@ class ExportTsv extends ModeleExports
     	 */
         function write_header($outputlangs)
         {
    +        // phpcs:enable
             return 0;
         }
     
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Output title line into file
          *
          *  @param      array		$array_export_fields_label   	Array with list of label of fields
    @@ -187,6 +206,7 @@ class ExportTsv extends ModeleExports
     	 */
         function write_title($array_export_fields_label,$array_selected_sorted,$outputlangs,$array_types)
         {
    +        // phpcs:enable
             foreach($array_selected_sorted as $code => $value)
             {
                 $newvalue=$outputlangs->transnoentities($array_export_fields_label[$code]);		// newvalue is now $outputlangs->charset_output encoded
    @@ -199,6 +219,7 @@ class ExportTsv extends ModeleExports
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output record line into file
     	 *
    @@ -210,6 +231,7 @@ class ExportTsv extends ModeleExports
     	 */
         function write_record($array_selected_sorted,$objp,$outputlangs,$array_types)
         {
    +        // phpcs:enable
         	global $conf;
     
     		$this->col=0;
    @@ -226,14 +248,14 @@ class ExportTsv extends ModeleExports
     			if (preg_match('/^\((.*)\)$/i',$newvalue,$reg)) $newvalue=$outputlangs->transnoentities($reg[1]);
     
     			$newvalue=$this->tsv_clean($newvalue,$outputlangs->charset_output);
    -			
    +
     			if (preg_match('/^Select:/i', $typefield, $reg) && $typefield = substr($typefield, 7))
     			{
     				$array = unserialize($typefield);
     				$array = $array['options'];
     				$newvalue = $array[$newvalue];
     			}
    -			
    +
     			fwrite($this->handle,$newvalue.$this->separator);
                 $this->col++;
     		}
    @@ -241,6 +263,7 @@ class ExportTsv extends ModeleExports
             return 0;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output footer into file
     	 *
    @@ -249,9 +272,11 @@ class ExportTsv extends ModeleExports
     	 */
         function write_footer($outputlangs)
         {
    +        // phpcs:enable
     		return 0;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Close file handle
     	 *
    @@ -259,19 +284,22 @@ class ExportTsv extends ModeleExports
     	 */
         function close_file()
         {
    +        // phpcs:enable
             fclose($this->handle);
             return 0;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Clean a cell to respect rules of TSV file cells
          *
          * @param 	string	$newvalue	String to clean
    -	 * @param	string	$charset	Input AND Output character set
    +     * @param	string	$charset	Input AND Output character set
          * @return 	string				Value cleaned
          */
         function tsv_clean($newvalue, $charset)
         {
    +        // phpcs:enable
     		// Rule Dolibarr: No HTML
     		$newvalue=dol_string_nohtmltag($newvalue, 1, $charset);
     
    @@ -285,8 +313,6 @@ class ExportTsv extends ModeleExports
     			$newvalue=str_replace("\t"," ",$newvalue);
     		}
     
    -    	return $newvalue;
    +        return $newvalue;
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/export/modules_export.php b/htdocs/core/modules/export/modules_export.php
    index 5d7e0ecac84..15536747a28 100644
    --- a/htdocs/core/modules/export/modules_export.php
    +++ b/htdocs/core/modules/export/modules_export.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005      Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,15 +30,21 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     class ModeleExports extends CommonDocGenerator    // This class can't be abstract as there is instance propreties loaded by liste_modeles
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    -	var $driverlabel=array();
    -	var $driverversion=array();
    +	public $driverlabel=array();
     
    -	var $liblabel=array();
    -	var $libversion=array();
    +	public $driverversion=array();
    +
    +	public $liblabel=array();
    +
    +	public $libversion=array();
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Load into memory list of available export format
     	 *
    @@ -48,6 +54,7 @@ class ModeleExports extends CommonDocGenerator    // This class can't be abstrac
     	 */
     	function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		dol_syslog(get_class($this)."::liste_modeles");
     
     		$dir=DOL_DOCUMENT_ROOT."/core/modules/export/";
    @@ -159,7 +166,4 @@ class ModeleExports extends CommonDocGenerator    // This class can't be abstrac
     	{
     		return $this->libversion[$key];
     	}
    -
     }
    -
    -
    diff --git a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php
    index 7c62bf1e300..f1637342fa5 100644
    --- a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php
    +++ b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php
    @@ -1,23 +1,24 @@
     <?php
     /* Copyright (C) 2010-2012	Laurent Destailleur	<ely@users.sourceforge.net>
    -* Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    -* Copyright (C) 2014		Marcos García		<marcosgdf@gmail.com>
    -* Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    -*
    -* This program is free software; you can redistribute it and/or modify
    -* it under the terms of the GNU General Public License as published by
    -* the Free Software Foundation; either version 3 of the License, or
    -* (at your option) any later version.
    -*
    -* This program is distributed in the hope that it will be useful,
    -* but WITHOUT ANY WARRANTY; without even the implied warranty of
    -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -* GNU General Public License for more details.
    -*
    -* You should have received a copy of the GNU General Public License
    -* along with this program. If not, see <http://www.gnu.org/licenses/>.
    -* or see http://www.gnu.org/
    -*/
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
    + * Copyright (C) 2014		Marcos García		<marcosgdf@gmail.com>
    + * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    + * Copyright (C) 2018		Frédéric France		<frederic.france@netlogic.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
     
     /**
      *	\file       htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php
    @@ -38,10 +39,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_invoice_odt extends ModelePDFFactures
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -51,10 +65,10 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT/ODS templates";
    @@ -96,10 +110,10 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     	 */
     	function info($langs)
     	{
    -		global $conf,$langs;
    +		global $conf, $langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("errors","companies"));
     
     		$form = new Form($this->db);
     
    @@ -176,6 +190,7 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -189,6 +204,7 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager;
     
     		if (empty($srctemplatepath))
    @@ -210,10 +226,8 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
     
     		if ($conf->facture->dir_output)
     		{
    @@ -342,9 +356,10 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     						)
     					);
     				}
    -				catch(Exception $e)
    +				catch (Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -358,8 +373,9 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     				try {
     					$odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
     				}
    -				catch(OdfException $e)
    +				catch (OdfException $e)
     				{
    +					dol_syslog($e->getMessage(), LOG_INFO);
     				}
     
     				// Define substitution array
    @@ -397,8 +413,9 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Replace tags of lines
    @@ -431,9 +448,11 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     								}
     								catch(OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -457,6 +476,7 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -470,14 +490,16 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     						$odfHandler->exportAsAttachedPDF($file);
     					}catch (Exception $e){
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
     				else {
     					try {
    -					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +						$odfHandler->saveToDisk($file);
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -502,6 +524,4 @@ class doc_generic_invoice_odt extends ModelePDFFactures
     
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php
    index 7cbe960d374..74fac8c5544 100644
    --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php
    +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2014	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2008		Raphael Bertrand		<raphael.bertrand@resultic.fr>
      * Copyright (C) 2010-2014	Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2012		Christophe Battarel	<christophe.battarel@altairis.fr>
    @@ -70,9 +70,9 @@ class pdf_crabe extends ModelePDFFactures
     
     	/**
          * @var array() Minimum version of PHP required by module.
    -	 * e.g.: PHP ≥ 5.3 = array(5, 3)
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
          */
    -	public $phpmin = array(5, 2);
    +	public $phpmin = array(5, 4);
     
     	/**
          * Dolibarr version of the loaded document
    @@ -80,15 +80,46 @@ class pdf_crabe extends ModelePDFFactures
          */
     	public $version = 'dolibarr';
     
    +	/**
    +     * @var int page_largeur
    +     */
         public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
         public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
         public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
     	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
     	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
     	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
     	public $marge_basse;
     
    -	public $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
     	/**
     	 * @var bool Situation invoice type
    @@ -108,7 +139,7 @@ class pdf_crabe extends ModelePDFFactures
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
     		// Translations
     		$langs->loadLangs(array("main", "bills"));
    @@ -187,6 +218,7 @@ class pdf_crabe extends ModelePDFFactures
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *  Function to build pdf onto disk
          *
    @@ -200,13 +232,14 @@ class pdf_crabe extends ModelePDFFactures
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		// Translations
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies"));
     
     		$nblignes = count($object->lines);
    @@ -743,6 +776,7 @@ class pdf_crabe extends ModelePDFFactures
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show payments table
     	 *
    @@ -754,6 +788,7 @@ class pdf_crabe extends ModelePDFFactures
     	 */
     	function _tableau_versements(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
             $sign=1;
    @@ -880,10 +915,10 @@ class pdf_crabe extends ModelePDFFactures
     			$this->error=$this->db->lasterror();
     			return -1;
     		}
    -
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Show miscellaneous information (payment mode, payment term, ...)
     	 *
    @@ -895,6 +930,7 @@ class pdf_crabe extends ModelePDFFactures
     	 */
     	function _tableau_info(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
    @@ -1041,6 +1077,7 @@ class pdf_crabe extends ModelePDFFactures
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show total to pay
     	 *
    @@ -1053,6 +1090,7 @@ class pdf_crabe extends ModelePDFFactures
     	 */
     	function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf,$mysoc;
     
             $sign=1;
    @@ -1164,7 +1202,6 @@ class pdf_crabe extends ModelePDFFactures
     
     								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
     								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    -
     							}
     						}
     					}
    @@ -1187,7 +1224,6 @@ class pdf_crabe extends ModelePDFFactures
     							$this->tva[$tvakey]=$tvaval * $coef_fix_tva;
     						}
     					}
    -
     				}
     
     				foreach($this->tva as $tvakey => $tvaval)
    @@ -1478,9 +1514,7 @@ class pdf_crabe extends ModelePDFFactures
     				{
     					$pdf->MultiCell($this->postotalht-$this->posxprogress,2, $outputlangs->transnoentities("Progress"),'','C');
     				}
    -
     			}
    -
     		}
     
     		if($conf->global->PRODUCT_USE_UNITS) {
    @@ -1536,7 +1570,7 @@ class pdf_crabe extends ModelePDFFactures
     	{
     		global $conf, $langs;
     
    -		// Translations
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "bills", "propal", "companies"));
     
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
    @@ -1560,27 +1594,30 @@ class pdf_crabe extends ModelePDFFactures
     		$pdf->SetXY($this->marge_gauche,$posy);
     
     		// Logo
    -		$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
    -		if ($this->emetteur->logo)
    +		if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO))
     		{
    -			if (is_readable($logo))
    +			$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
    +			if ($this->emetteur->logo)
     			{
    -			    $height=pdf_getHeightForLogo($logo);
    -				$pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
    +				if (is_readable($logo))
    +				{
    +				    $height=pdf_getHeightForLogo($logo);
    +					$pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
    +				}
    +				else
    +				{
    +					$pdf->SetTextColor(200,0,0);
    +					$pdf->SetFont('','B',$default_font_size - 2);
    +					$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
    +					$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
    +				}
     			}
     			else
     			{
    -				$pdf->SetTextColor(200,0,0);
    -				$pdf->SetFont('','B',$default_font_size - 2);
    -				$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
    -				$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
    +				$text=$this->emetteur->name;
    +				$pdf->MultiCell($w, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
     			}
     		}
    -		else
    -		{
    -			$text=$this->emetteur->name;
    -			$pdf->MultiCell($w, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
    -		}
     
     		$pdf->SetFont('','B', $default_font_size + 3);
     		$pdf->SetXY($posx,$posy);
    @@ -1810,5 +1847,4 @@ class pdf_crabe extends ModelePDFFactures
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'INVOICE_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    diff --git a/htdocs/core/modules/facture/doc/pdf_sponge.modules.php b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php
    new file mode 100644
    index 00000000000..7e28f11bb8a
    --- /dev/null
    +++ b/htdocs/core/modules/facture/doc/pdf_sponge.modules.php
    @@ -0,0 +1,2022 @@
    +<?php
    +/* Copyright (C) 2004-2014	Laurent Destailleur	<eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
    + * Copyright (C) 2008		Raphael Bertrand		<raphael.bertrand@resultic.fr>
    + * Copyright (C) 2010-2014	Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2012		Christophe Battarel	<christophe.battarel@altairis.fr>
    + * Copyright (C) 2012		Cédric Salvador		<csalvador@gpcsolutions.fr>
    + * Copyright (C) 2012-2014	Raphaël Doursenaud	<rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2015		Marcos García		<marcosgdf@gmail.com>
    + * Copyright (C) 2017		Ferran Marcet		<fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
    +
    +/**
    + *	\file       htdocs/core/modules/facture/doc/pdf_sponge.modules.php
    + *	\ingroup    facture
    + *	\brief      File of class to generate customers invoices from sponge model
    + */
    +
    +require_once DOL_DOCUMENT_ROOT.'/core/modules/facture/modules_facture.php';
    +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
    +
    +
    +/**
    + *	Class to manage PDF invoice template sponge
    + */
    +class pdf_sponge extends ModelePDFFactures
    +{
    +     /**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
    +
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
    +
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
    +
    +    /**
    +     * @var int 	Save the name of generated file as the main doc when generating a doc with this template
    +     */
    +    public $update_main_doc_field;
    +
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +	/**
    +     * @var array Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.3 = array(5, 3)
    +     */
    +	public $phpmin = array(5, 2);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'development';
    +
    +    public $page_largeur;
    +    public $page_hauteur;
    +    public $format;
    +	public $marge_gauche;
    +	public $marge_droite;
    +	public $marge_haute;
    +	public $marge_basse;
    +
    +	public $emetteur;	// Objet societe qui emet
    +
    +	/**
    +	 * @var bool Situation invoice type
    +	 */
    +	public $situationinvoice;
    +
    +	/**
    +	 * @var float X position for the situation progress column
    +	 */
    +	public $posxprogress;
    +
    +
    +	/**
    +	 *	Constructor
    +	 *
    +	 *  @param		DoliDB		$db      Database handler
    +	 */
    +	function __construct($db)
    +	{
    +		global $conf,$langs,$mysoc;
    +
    +		// Translations
    +		$langs->loadLangs(array("main", "bills"));
    +
    +		$this->db = $db;
    +		$this->name = "sponge";
    +		$this->description = $langs->trans('PDFSpongeDescription');
    +		$this->update_main_doc_field = 1;		// Save the name of generated file as the main doc when generating a doc with this template
    +
    +		// Dimensiont page
    +		$this->type = 'pdf';
    +		$formatarray=pdf_getFormat();
    +		$this->page_largeur = $formatarray['width'];
    +		$this->page_hauteur = $formatarray['height'];
    +		$this->format = array($this->page_largeur,$this->page_hauteur);
    +		$this->marge_gauche=isset($conf->global->MAIN_PDF_MARGIN_LEFT)?$conf->global->MAIN_PDF_MARGIN_LEFT:10;
    +		$this->marge_droite=isset($conf->global->MAIN_PDF_MARGIN_RIGHT)?$conf->global->MAIN_PDF_MARGIN_RIGHT:10;
    +		$this->marge_haute =isset($conf->global->MAIN_PDF_MARGIN_TOP)?$conf->global->MAIN_PDF_MARGIN_TOP:10;
    +		$this->marge_basse =isset($conf->global->MAIN_PDF_MARGIN_BOTTOM)?$conf->global->MAIN_PDF_MARGIN_BOTTOM:10;
    +
    +		$this->option_logo = 1;                    // Affiche logo
    +		$this->option_tva = 1;                     // Gere option tva FACTURE_TVAOPTION
    +		$this->option_modereg = 1;                 // Affiche mode reglement
    +		$this->option_condreg = 1;                 // Affiche conditions reglement
    +		$this->option_codeproduitservice = 1;      // Affiche code produit-service
    +		$this->option_multilang = 1;               // Dispo en plusieurs langues
    +		$this->option_escompte = 1;                // Affiche si il y a eu escompte
    +		$this->option_credit_note = 1;             // Support credit notes
    +		$this->option_freetext = 1;				   // Support add of a personalised text
    +		$this->option_draft_watermark = 1;		   // Support add of a watermark on drafts
    +
    +		$this->franchise=!$mysoc->tva_assuj;
    +
    +		// Get source company
    +		$this->emetteur=$mysoc;
    +		if (empty($this->emetteur->country_code)) $this->emetteur->country_code=substr($langs->defaultlang,-2);    // By default, if was not defined
    +
    +		// Define position of columns
    +		$this->posxdesc=$this->marge_gauche+1; // used for notes ans other stuff
    +
    +		//  Use new system for position of columns, view  $this->defineColumnField()
    +
    +		$this->tva=array();
    +		$this->localtax1=array();
    +		$this->localtax2=array();
    +		$this->atleastoneratenotnull=0;
    +		$this->atleastonediscount=0;
    +		$this->situationinvoice=false;
    +	}
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
    +    /**
    +     *  Function to build pdf onto disk
    +     *
    +     *  @param		Object		$object				Object to generate
    +     *  @param		Translate	$outputlangs		Lang output object
    +     *  @param		string		$srctemplatepath	Full path of source filename for generator using a template file
    +     *  @param		int			$hidedetails		Do not show line details
    +     *  @param		int			$hidedesc			Do not show desc
    +     *  @param		int			$hideref			Do not show ref
    +     *  @return     int         	    			1=OK, 0=KO
    +	 */
    +	public function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
    +	{
    +	    // phpcs:enable
    +	    global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes;
    +
    +	    if (! is_object($outputlangs)) $outputlangs=$langs;
    +	    // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
    +	    if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    +
    +	    // Translations
    +	    $outputlangs->loadLangs(array("main", "bills", "products", "dict", "companies"));
    +
    +	    $nblignes = count($object->lines);
    +
    +	    // Loop on each lines to detect if there is at least one image to show
    +	    $realpatharray=array();
    +	    $this->atleastonephoto = false;
    +	    if (! empty($conf->global->MAIN_GENERATE_INVOICES_WITH_PICTURE))
    +	    {
    +	        $objphoto = new Product($this->db);
    +
    +	        for ($i = 0 ; $i < $nblignes ; $i++)
    +	        {
    +	            if (empty($object->lines[$i]->fk_product)) continue;
    +
    +	            $objphoto->fetch($object->lines[$i]->fk_product);
    +	            //var_dump($objphoto->ref);exit;
    +	            if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO))
    +	            {
    +	                $pdir[0] = get_exdir($objphoto->id,2,0,0,$objphoto,'product') . $objphoto->id ."/photos/";
    +	                $pdir[1] = get_exdir(0,0,0,0,$objphoto,'product') . dol_sanitizeFileName($objphoto->ref).'/';
    +	            }
    +	            else
    +	            {
    +	                $pdir[0] = get_exdir(0,0,0,0,$objphoto,'product') . dol_sanitizeFileName($objphoto->ref).'/';				// default
    +	                $pdir[1] = get_exdir($objphoto->id,2,0,0,$objphoto,'product') . $objphoto->id ."/photos/";	// alternative
    +	            }
    +
    +	            $arephoto = false;
    +	            foreach ($pdir as $midir)
    +	            {
    +	                if (! $arephoto)
    +	                {
    +	                    $dir = $conf->product->dir_output.'/'.$midir;
    +
    +	                    foreach ($objphoto->liste_photos($dir,1) as $key => $obj)
    +	                    {
    +	                        if (empty($conf->global->CAT_HIGH_QUALITY_IMAGES))		// If CAT_HIGH_QUALITY_IMAGES not defined, we use thumb if defined and then original photo
    +	                        {
    +	                            if ($obj['photo_vignette'])
    +	                            {
    +	                                $filename= $obj['photo_vignette'];
    +	                            }
    +	                            else
    +	                            {
    +	                                $filename=$obj['photo'];
    +	                            }
    +	                        }
    +	                        else
    +	                        {
    +	                            $filename=$obj['photo'];
    +	                        }
    +
    +	                        $realpath = $dir.$filename;
    +	                        $arephoto = true;
    +	                        $this->atleastonephoto = true;
    +	                    }
    +	                }
    +	            }
    +
    +	            if ($realpath && $arephoto) $realpatharray[$i]=$realpath;
    +	        }
    +	    }
    +
    +	    //if (count($realpatharray) == 0) $this->posxpicture=$this->posxtva;
    +
    +	    if ($conf->facture->dir_output)
    +	    {
    +	        $object->fetch_thirdparty();
    +
    +	        $deja_regle = $object->getSommePaiement(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0);
    +	        $amount_credit_notes_included = $object->getSumCreditNotesUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0);
    +	        $amount_deposits_included = $object->getSumDepositsUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0);
    +
    +	        // Definition of $dir and $file
    +	        if ($object->specimen)
    +	        {
    +	            $dir = $conf->facture->dir_output;
    +	            $file = $dir . "/SPECIMEN.pdf";
    +	        }
    +	        else
    +	        {
    +	            $objectref = dol_sanitizeFileName($object->ref);
    +	            $dir = $conf->facture->dir_output . "/" . $objectref;
    +	            $file = $dir . "/" . $objectref . ".pdf";
    +	        }
    +	        if (! file_exists($dir))
    +	        {
    +	            if (dol_mkdir($dir) < 0)
    +	            {
    +	                $this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
    +	                return 0;
    +	            }
    +	        }
    +
    +	        if (file_exists($dir))
    +	        {
    +	            // Add pdfgeneration hook
    +	            if (! is_object($hookmanager))
    +	            {
    +	                include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
    +	                $hookmanager=new HookManager($this->db);
    +	            }
    +	            $hookmanager->initHooks(array('pdfgeneration'));
    +	            $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs);
    +	            global $action;
    +	            $reshook=$hookmanager->executeHooks('beforePDFCreation',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
    +
    +	            // Set nblignes with the new facture lines content after hook
    +	            $nblignes = count($object->lines);
    +	            $nbpayments = count($object->getListOfPayments());
    +
    +	            // Create pdf instance
    +	            $pdf=pdf_getInstance($this->format);
    +	            $default_font_size = pdf_getPDFFontSize($outputlangs);	// Must be after pdf_getInstance
    +	            $pdf->SetAutoPageBreak(1,0);
    +
    +	            $heightforinfotot = 50+(4*$nbpayments);	// Height reserved to output the info and total part and payment part
    +	            $heightforfreetext= (isset($conf->global->MAIN_PDF_FREETEXT_HEIGHT)?$conf->global->MAIN_PDF_FREETEXT_HEIGHT:5);	// Height reserved to output the free text on last page
    +	            $heightforfooter = $this->marge_basse + (empty($conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS)?12:22);	// Height reserved to output the footer (value include bottom margin)
    +
    +	            if (class_exists('TCPDF'))
    +	            {
    +	                $pdf->setPrintHeader(false);
    +	                $pdf->setPrintFooter(false);
    +	            }
    +	            $pdf->SetFont(pdf_getPDFFont($outputlangs));
    +
    +	            // Set path to the background PDF File
    +                if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND))
    +	            {
    +	                $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND);
    +	                $tplidx = $pdf->importPage(1);
    +	            }
    +
    +	            $pdf->Open();
    +	            $pagenb=0;
    +	            $pdf->SetDrawColor(128,128,128);
    +
    +	            $pdf->SetTitle($outputlangs->convToOutputCharset($object->ref));
    +	            $pdf->SetSubject($outputlangs->transnoentities("PdfInvoiceTitle"));
    +	            $pdf->SetCreator("Dolibarr ".DOL_VERSION);
    +	            $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs)));
    +	            $pdf->SetKeyWords($outputlangs->convToOutputCharset($object->ref)." ".$outputlangs->transnoentities("PdfInvoiceTitle")." ".$outputlangs->convToOutputCharset($object->thirdparty->name));
    +	            if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false);
    +
    +	            $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite);   // Left, Top, Right
    +
    +	            // Does we have at least one line with discount $this->atleastonediscount
    +	            foreach ($object->lines as $line) {
    +	               if ($line->remise_percent){
    +	                    $this->atleastonediscount = true;
    +	                    break;
    +	               }
    +	            }
    +
    +
    +	            // Situation invoice handling
    +	            if ($object->situation_cycle_ref)
    +	            {
    +	                $this->situationinvoice = true;
    +	            }
    +
    +	            // New page
    +	            $pdf->AddPage();
    +	            if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +	            $pagenb++;
    +
    +	            $top_shift = $this->_pagehead($pdf, $object, 1, $outputlangs);
    +	            $pdf->SetFont('','', $default_font_size - 1);
    +	            $pdf->MultiCell(0, 3, '');		// Set interline to 3
    +	            $pdf->SetTextColor(0,0,0);
    +
    +	            $tab_top = 90+$top_shift;
    +	            $tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42+$top_shift:10);
    +	            $tab_height = 130-$top_shift;
    +	            $tab_height_newpage = 150;
    +	            if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $tab_height_newpage -= $top_shift;
    +
    +	            // Incoterm
    +	            $height_incoterms = 0;
    +	            if ($conf->incoterm->enabled)
    +	            {
    +	                $desc_incoterms = $object->getIncotermsForPDF();
    +	                if ($desc_incoterms)
    +	                {
    +						$tab_top -= 2;
    +
    +	                    $pdf->SetFont('','', $default_font_size - 1);
    +	                    $pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top-1, dol_htmlentitiesbr($desc_incoterms), 0, 1);
    +	                    $nexY = max($pdf->GetY(),$nexY);
    +	                    $height_incoterms=$nexY-$tab_top;
    +
    +	                    // Rect prend une longueur en 3eme param
    +	                    $pdf->SetDrawColor(192,192,192);
    +	                    $pdf->Rect($this->marge_gauche, $tab_top-1, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $height_incoterms+1);
    +
    +	                    $tab_top = $nexY+6;
    +	                    $height_incoterms += 4;
    +	                }
    +	            }
    +
    +	            // Affiche notes
    +	            $notetoshow=empty($object->note_public)?'':$object->note_public;
    +	            if (! empty($conf->global->MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE))
    +	            {
    +	                // Get first sale rep
    +	                if (is_object($object->thirdparty))
    +	                {
    +	                    $salereparray=$object->thirdparty->getSalesRepresentatives($user);
    +	                    $salerepobj=new User($this->db);
    +	                    $salerepobj->fetch($salereparray[0]['id']);
    +	                    if (! empty($salerepobj->signature)) $notetoshow=dol_concatdesc($notetoshow, $salerepobj->signature);
    +	                }
    +	            }
    +
    +	            $pagenb = $pdf->getPage();
    +	            if ($notetoshow)
    +	            {
    +					$tab_top -= 2;
    +
    +	                $tab_width = $this->page_largeur-$this->marge_gauche-$this->marge_droite;
    +	                $pageposbeforenote = $pagenb;
    +
    +	                $substitutionarray=pdf_getSubstitutionArray($outputlangs, null, $object);
    +	                complete_substitutions_array($substitutionarray, $outputlangs, $object);
    +	                $notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs);
    +
    +
    +	                $pdf->startTransaction();
    +
    +	                $pdf->SetFont('','', $default_font_size - 1);
    +	                $pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top, dol_htmlentitiesbr($notetoshow), 0, 1);
    +	                // Description
    +	                $pageposafternote=$pdf->getPage();
    +	                $posyafter = $pdf->GetY();
    +
    +	                if($pageposafternote>$pageposbeforenote )
    +	                {
    +	                    $pdf->rollbackTransaction(true);
    +
    +	                    // prepar pages to receive notes
    +	                    while ($pagenb < $pageposafternote) {
    +	                        $pdf->AddPage();
    +	                        $pagenb++;
    +	                        if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +	                        if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +	                        // $this->_pagefoot($pdf,$object,$outputlangs,1);
    +	                        $pdf->setTopMargin($tab_top_newpage);
    +	                        // The only function to edit the bottom margin of current page to set it.
    +	                        $pdf->setPageOrientation('', 1, $heightforfooter + $heightforfreetext);
    +	                    }
    +
    +	                    // back to start
    +	                    $pdf->setPage($pageposbeforenote);
    +	                    $pdf->setPageOrientation('', 1, $heightforfooter + $heightforfreetext);
    +	                    $pdf->SetFont('','', $default_font_size - 1);
    +	                    $pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top, dol_htmlentitiesbr($notetoshow), 0, 1);
    +	                    $pageposafternote=$pdf->getPage();
    +
    +	                    $posyafter = $pdf->GetY();
    +
    +	                    if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+20)))	// There is no space left for total+free text
    +	                    {
    +	                        $pdf->AddPage('','',true);
    +	                        $pagenb++;
    +	                        $pageposafternote++;
    +	                        $pdf->setPage($pageposafternote);
    +	                        $pdf->setTopMargin($tab_top_newpage);
    +	                        // The only function to edit the bottom margin of current page to set it.
    +	                        $pdf->setPageOrientation('', 1, $heightforfooter + $heightforfreetext);
    +	                        //$posyafter = $tab_top_newpage;
    +	                    }
    +
    +
    +	                    // apply note frame to previus pages
    +	                    $i = $pageposbeforenote;
    +	                    while ($i < $pageposafternote) {
    +	                        $pdf->setPage($i);
    +
    +
    +	                        $pdf->SetDrawColor(128,128,128);
    +	                        // Draw note frame
    +	                        if($i>$pageposbeforenote){
    +	                            $height_note = $this->page_hauteur - ($tab_top_newpage + $heightforfooter);
    +	                            $pdf->Rect($this->marge_gauche, $tab_top_newpage-1, $tab_width, $height_note + 1);
    +	                        }
    +	                        else{
    +	                            $height_note = $this->page_hauteur - ($tab_top + $heightforfooter);
    +	                            $pdf->Rect($this->marge_gauche, $tab_top-1, $tab_width, $height_note + 1);
    +	                        }
    +
    +	                        // Add footer
    +	                        $pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.
    +	                        $this->_pagefoot($pdf,$object,$outputlangs,1);
    +
    +	                        $i++;
    +	                    }
    +
    +	                    // apply note frame to last page
    +	                    $pdf->setPage($pageposafternote);
    +	                    if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +	                    if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +	                    $height_note=$posyafter-$tab_top_newpage;
    +	                    $pdf->Rect($this->marge_gauche, $tab_top_newpage-1, $tab_width, $height_note+1);
    +	                }
    +	                else // No pagebreak
    +	                {
    +	                    $pdf->commitTransaction();
    +	                    $posyafter = $pdf->GetY();
    +	                    $height_note=$posyafter-$tab_top;
    +	                    $pdf->Rect($this->marge_gauche, $tab_top-1, $tab_width, $height_note+1);
    +
    +
    +	                    if($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+20)) )
    +	                    {
    +	                        // not enough space, need to add page
    +	                        $pdf->AddPage('','',true);
    +	                        $pagenb++;
    +	                        $pageposafternote++;
    +	                        $pdf->setPage($pageposafternote);
    +	                        if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +	                        if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +
    +	                        $posyafter = $tab_top_newpage;
    +	                    }
    +	                }
    +
    +	                $tab_height = $tab_height - $height_note;
    +	                $tab_top = $posyafter +6;
    +	            }
    +	            else
    +	            {
    +	                $height_note=0;
    +	            }
    +
    +	            $iniY = $tab_top + 7;
    +	            $curY = $tab_top + 7;
    +	            $nexY = $tab_top + 7;
    +
    +	            // Use new auto collum system
    +	            $this->prepareArrayColumnField($object,$outputlangs,$hidedetails,$hidedesc,$hideref);
    +
    +	            // Loop on each lines
    +	            $pageposbeforeprintlines=$pdf->getPage();
    +	            $pagenb = $pageposbeforeprintlines;
    +	            for ($i = 0; $i < $nblignes; $i++)
    +	            {
    +
    +	                $curY = $nexY;
    +	                $pdf->SetFont('','', $default_font_size - 1);   // Into loop to work with multipage
    +	                $pdf->SetTextColor(0,0,0);
    +
    +	                // Define size of image if we need it
    +	                $imglinesize=array();
    +	                if (! empty($realpatharray[$i])) $imglinesize=pdf_getSizeForImage($realpatharray[$i]);
    +
    +	                $pdf->setTopMargin($tab_top_newpage);
    +	                $pdf->setPageOrientation('', 1, $heightforfooter+$heightforfreetext+$heightforinfotot);	// The only function to edit the bottom margin of current page to set it.
    +	                $pageposbefore=$pdf->getPage();
    +
    +	                $showpricebeforepagebreak=1;
    +	                $posYAfterImage=0;
    +	                $posYAfterDescription=0;
    +
    +	                if($this->getColumnStatus('photo'))
    +	                {
    +    	                // We start with Photo of product line
    +    	                if (isset($imglinesize['width']) && isset($imglinesize['height']) && ($curY + $imglinesize['height']) > ($this->page_hauteur-($heightforfooter+$heightforfreetext+$heightforinfotot)))	// If photo too high, we moved completely on new page
    +    	                {
    +    	                    $pdf->AddPage('','',true);
    +    	                    if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +    	                    $pdf->setPage($pageposbefore+1);
    +
    +    	                    $curY = $tab_top_newpage;
    +    	                    $showpricebeforepagebreak=0;
    +    	                }
    +
    +    	                if (!empty($this->cols['photo']) && isset($imglinesize['width']) && isset($imglinesize['height']))
    +    	                {
    +    	                    $pdf->Image($realpatharray[$i], $this->getColumnContentXStart('photo'), $curY, $imglinesize['width'], $imglinesize['height'], '', '', '', 2, 300);	// Use 300 dpi
    +    	                    // $pdf->Image does not increase value return by getY, so we save it manually
    +    	                    $posYAfterImage=$curY+$imglinesize['height'];
    +    	                }
    +	                }
    +
    +	                // Description of product line
    +	                if ($this->getColumnStatus('desc'))
    +	                {
    +    	                $pdf->startTransaction();
    +    	                pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->getColumnContentWidth('desc'),3,$this->getColumnContentXStart('desc'),$curY,$hideref,$hidedesc);
    +    	                $pageposafter=$pdf->getPage();
    +    	                if ($pageposafter > $pageposbefore)	// There is a pagebreak
    +    	                {
    +    	                    $pdf->rollbackTransaction(true);
    +    	                    $pageposafter=$pageposbefore;
    +    	                    //print $pageposafter.'-'.$pageposbefore;exit;
    +    	                    $pdf->setPageOrientation('', 1, $heightforfooter);	// The only function to edit the bottom margin of current page to set it.
    +    	                    pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->getColumnContentWidth('desc'),3,$this->getColumnContentXStart('desc'),$curY,$hideref,$hidedesc);
    +    	                    $pageposafter=$pdf->getPage();
    +    	                    $posyafter=$pdf->GetY();
    +    	                    //var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit;
    +    	                    if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot)))	// There is no space left for total+free text
    +    	                    {
    +    	                        if ($i == ($nblignes-1))	// No more lines, and no space left to show total, so we create a new page
    +    	                        {
    +    	                            $pdf->AddPage('','',true);
    +    	                            if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +    	                            $pdf->setPage($pageposafter+1);
    +    	                        }
    +    	                    }
    +    	                    else
    +    	                    {
    +    	                        // We found a page break
    +    	                        $showpricebeforepagebreak=0;
    +    	                    }
    +    	                }
    +    	                else	// No pagebreak
    +    	                {
    +    	                    $pdf->commitTransaction();
    +    	                }
    +    	                $posYAfterDescription=$pdf->GetY();
    +	                }
    +
    +	                $nexY = $pdf->GetY();
    +	                $pageposafter=$pdf->getPage();
    +	                $pdf->setPage($pageposbefore);
    +	                $pdf->setTopMargin($this->marge_haute);
    +	                $pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.
    +
    +	                // We suppose that a too long description or photo were moved completely on next page
    +	                if ($pageposafter > $pageposbefore && empty($showpricebeforepagebreak)) {
    +	                    $pdf->setPage($pageposafter); $curY = $tab_top_newpage;
    +	                }
    +
    +	                $pdf->SetFont('','', $default_font_size - 1);   // On repositionne la police par defaut
    +
    +	                // VAT Rate
    +	                if ($this->getColumnStatus('vat'))
    +	                {
    +	                    $vat_rate = pdf_getlinevatrate($object, $i, $outputlangs, $hidedetails);
    +	                    $this->printStdColumnContent($pdf, $curY, 'vat', $vat_rate);
    +	                    $nexY = max($pdf->GetY(),$nexY);
    +	                }
    +
    +	                // Unit price before discount
    +	                if ($this->getColumnStatus('subprice'))
    +	                {
    +	                    $up_excl_tax = pdf_getlineupexcltax($object, $i, $outputlangs, $hidedetails);
    +	                    $this->printStdColumnContent($pdf, $curY, 'subprice', $up_excl_tax);
    +	                    $nexY = max($pdf->GetY(),$nexY);
    +	                }
    +
    +	                // Quantity
    +	                // Enough for 6 chars
    +	                if ($this->getColumnStatus('qty'))
    +	                {
    +	                    $qty = pdf_getlineqty($object, $i, $outputlangs, $hidedetails);
    +	                    $this->printStdColumnContent($pdf, $curY, 'qty', $qty);
    +	                    $nexY = max($pdf->GetY(),$nexY);
    +	                }
    +
    +	                // Situation progress
    +	                if ($this->getColumnStatus('progress'))
    +	                {
    +	                    $progress = pdf_getlineprogress($object, $i, $outputlangs, $hidedetails);
    +	                    $this->printStdColumnContent($pdf, $curY, 'progress', $progress);
    +	                    $nexY = max($pdf->GetY(),$nexY);
    +	                }
    +
    +	                // Unit
    +	                if ($this->getColumnStatus('unit'))
    +	                {
    +	                    $unit = pdf_getlineunit($object, $i, $outputlangs, $hidedetails, $hookmanager);
    +	                    $this->printStdColumnContent($pdf, $curY, 'unit', $unit);
    +	                    $nexY = max($pdf->GetY(),$nexY);
    +	                }
    +
    +	                // Discount on line
    +	                if ($this->getColumnStatus('discount') && $object->lines[$i]->remise_percent)
    +	                {
    +	                    $remise_percent = pdf_getlineremisepercent($object, $i, $outputlangs, $hidedetails);
    +	                    $this->printStdColumnContent($pdf, $curY, 'discount', $remise_percent);
    +	                    $nexY = max($pdf->GetY(),$nexY);
    +	                }
    +
    +	                // Total HT line
    +	                if ($this->getColumnStatus('totalexcltax'))
    +	                {
    +	                    $total_excl_tax = pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails);
    +	                    $this->printStdColumnContent($pdf, $curY, 'totalexcltax', $total_excl_tax);
    +	                    $nexY = max($pdf->GetY(),$nexY);
    +	                }
    +
    +
    +	                $parameters=array(
    +	                    'object' => $object,
    +	                    'i' => $i,
    +	                    'pdf' =>& $pdf,
    +	                    'curY' =>& $curY,
    +	                    'nexY' =>& $nexY,
    +	                    'outputlangs' => $outputlangs,
    +	                    'hidedetails' => $hidedetails
    +	                );
    +	                $reshook=$hookmanager->executeHooks('printPDFline',$parameters,$this);    // Note that $object may have been modified by hook
    +
    +
    +
    +	                $sign=1;
    +	                if (isset($object->type) && $object->type == 2 && ! empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) $sign=-1;
    +	                // Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva
    +	                $prev_progress = $object->lines[$i]->get_prev_progress($object->id);
    +	                if ($prev_progress > 0 && !empty($object->lines[$i]->situation_percent)) // Compute progress from previous situation
    +	                {
    +	                    if ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) $tvaligne = $sign * $object->lines[$i]->multicurrency_total_tva * ($object->lines[$i]->situation_percent - $prev_progress) / $object->lines[$i]->situation_percent;
    +	                    else $tvaligne = $sign * $object->lines[$i]->total_tva * ($object->lines[$i]->situation_percent - $prev_progress) / $object->lines[$i]->situation_percent;
    +	                } else {
    +	                    if ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) $tvaligne= $sign * $object->lines[$i]->multicurrency_total_tva;
    +	                    else $tvaligne= $sign * $object->lines[$i]->total_tva;
    +	                }
    +
    +	                $localtax1ligne=$object->lines[$i]->total_localtax1;
    +	                $localtax2ligne=$object->lines[$i]->total_localtax2;
    +	                $localtax1_rate=$object->lines[$i]->localtax1_tx;
    +	                $localtax2_rate=$object->lines[$i]->localtax2_tx;
    +	                $localtax1_type=$object->lines[$i]->localtax1_type;
    +	                $localtax2_type=$object->lines[$i]->localtax2_type;
    +
    +	                if ($object->remise_percent) $tvaligne-=($tvaligne*$object->remise_percent)/100;
    +	                if ($object->remise_percent) $localtax1ligne-=($localtax1ligne*$object->remise_percent)/100;
    +	                if ($object->remise_percent) $localtax2ligne-=($localtax2ligne*$object->remise_percent)/100;
    +
    +	                $vatrate=(string) $object->lines[$i]->tva_tx;
    +
    +	                // Retrieve type from database for backward compatibility with old records
    +	                if ((! isset($localtax1_type) || $localtax1_type=='' || ! isset($localtax2_type) || $localtax2_type=='') // if tax type not defined
    +	                    && (! empty($localtax1_rate) || ! empty($localtax2_rate))) // and there is local tax
    +	                {
    +	                    $localtaxtmp_array=getLocalTaxesFromRate($vatrate,0, $object->thirdparty, $mysoc);
    +	                    $localtax1_type = $localtaxtmp_array[0];
    +	                    $localtax2_type = $localtaxtmp_array[2];
    +	                }
    +
    +	                // retrieve global local tax
    +	                if ($localtax1_type && $localtax1ligne != 0)
    +	                    $this->localtax1[$localtax1_type][$localtax1_rate]+=$localtax1ligne;
    +	                    if ($localtax2_type && $localtax2ligne != 0)
    +	                        $this->localtax2[$localtax2_type][$localtax2_rate]+=$localtax2ligne;
    +
    +	                        if (($object->lines[$i]->info_bits & 0x01) == 0x01) $vatrate.='*';
    +	                        if (! isset($this->tva[$vatrate])) 				$this->tva[$vatrate]=0;
    +	                        $this->tva[$vatrate] += $tvaligne;
    +
    +	                        $nexY = max($nexY,$posYAfterImage);
    +
    +	                        // Add line
    +	                        if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1))
    +	                        {
    +	                            $pdf->setPage($pageposafter);
    +	                            $pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));
    +	                            //$pdf->SetDrawColor(190,190,200);
    +	                            $pdf->line($this->marge_gauche, $nexY+1, $this->page_largeur - $this->marge_droite, $nexY+1);
    +	                            $pdf->SetLineStyle(array('dash'=>0));
    +	                        }
    +
    +	                        $nexY+=2;    // Passe espace entre les lignes
    +
    +	                        // Detect if some page were added automatically and output _tableau for past pages
    +	                        while ($pagenb < $pageposafter)
    +	                        {
    +	                            $pdf->setPage($pagenb);
    +	                            if ($pagenb == $pageposbeforeprintlines)
    +	                            {
    +	                                $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1, $object->multicurrency_code);
    +	                            }
    +	                            else
    +	                            {
    +	                                $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code);
    +	                            }
    +	                            $this->_pagefoot($pdf,$object,$outputlangs,1);
    +	                            $pagenb++;
    +	                            $pdf->setPage($pagenb);
    +	                            $pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.
    +	                            if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +	                        }
    +
    +	                        if (isset($object->lines[$i+1]->pagebreak) && $object->lines[$i+1]->pagebreak)
    +	                        {
    +	                            if ($pagenb == $pageposafter)
    +	                            {
    +	                                $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1, $object->multicurrency_code);
    +	                            }
    +	                            else
    +	                            {
    +	                                $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code);
    +	                            }
    +	                            $this->_pagefoot($pdf,$object,$outputlangs,1);
    +	                            // New page
    +	                            $pdf->AddPage();
    +	                            if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +	                            $pagenb++;
    +	                            if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +	                        }
    +	            }
    +
    +	            // Show square
    +	            if ($pagenb == $pageposbeforeprintlines)
    +	            {
    +	                $this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 0, 0, $object->multicurrency_code);
    +	                $bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
    +	            }
    +	            else
    +	            {
    +	                $this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 1, 0, $object->multicurrency_code);
    +	                $bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
    +	            }
    +
    +	            // Affiche zone infos
    +	            $posy=$this->drawInfoTable($pdf, $object, $bottomlasttab, $outputlangs);
    +
    +	            // Affiche zone totaux
    +	            $posy=$this->drawTotalTable($pdf, $object, $deja_regle, $bottomlasttab, $outputlangs);
    +
    +	            // Affiche zone versements
    +	            if (($deja_regle || $amount_credit_notes_included || $amount_deposits_included) && empty($conf->global->INVOICE_NO_PAYMENT_DETAILS))
    +	            {
    +	                $posy=$this->drawPaymentsTable($pdf, $object, $posy, $outputlangs);
    +	            }
    +
    +	            // Pied de page
    +	            $this->_pagefoot($pdf,$object,$outputlangs);
    +	            if (method_exists($pdf,'AliasNbPages')) $pdf->AliasNbPages();
    +
    +	            $pdf->Close();
    +
    +	            $pdf->Output($file,'F');
    +
    +	            // Add pdfgeneration hook
    +	            $hookmanager->initHooks(array('pdfgeneration'));
    +	            $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs);
    +	            global $action;
    +	            $reshook=$hookmanager->executeHooks('afterPDFCreation',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +
    +	            if (! empty($conf->global->MAIN_UMASK))
    +	                @chmod($file, octdec($conf->global->MAIN_UMASK));
    +
    +	                $this->result = array('fullpath'=>$file);
    +
    +	                return 1;   // No error
    +	        }
    +	        else
    +	        {
    +	            $this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
    +	            return 0;
    +	        }
    +	    }
    +	    else
    +	    {
    +	        $this->error=$langs->transnoentities("ErrorConstantNotDefined","FAC_OUTPUTDIR");
    +	        return 0;
    +	    }
    +	}
    +
    +
    +	/**
    +	 *  Show payments table
    +	 *
    +     *  @param	PDF			$pdf           Object PDF
    +     *  @param  Object		$object         Object invoice
    +     *  @param  int			$posy           Position y in PDF
    +     *  @param  Translate	$outputlangs    Object langs for output
    +     *  @return int             			<0 if KO, >0 if OK
    +	 */
    +	function drawPaymentsTable(&$pdf, $object, $posy, $outputlangs)
    +	{
    +		global $conf;
    +
    +        $sign=1;
    +        if ($object->type == 2 && ! empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) $sign=-1;
    +
    +        $tab3_posx = 120;
    +		$tab3_top = $posy + 8;
    +		$tab3_width = 80;
    +		$tab3_height = 4;
    +		if ($this->page_largeur < 210) // To work with US executive format
    +		{
    +			$tab3_posx -= 20;
    +		}
    +
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		$title=$outputlangs->transnoentities("PaymentsAlreadyDone");
    +		if ($object->type == 2) $title=$outputlangs->transnoentities("PaymentsBackAlreadyDone");
    +
    +		$pdf->SetFont('','', $default_font_size - 3);
    +		$pdf->SetXY($tab3_posx, $tab3_top - 4);
    +		$pdf->MultiCell(60, 3, $title, 0, 'L', 0);
    +
    +		$pdf->line($tab3_posx, $tab3_top, $tab3_posx+$tab3_width, $tab3_top);
    +
    +		$pdf->SetFont('','', $default_font_size - 4);
    +		$pdf->SetXY($tab3_posx, $tab3_top);
    +		$pdf->MultiCell(20, 3, $outputlangs->transnoentities("Payment"), 0, 'L', 0);
    +		$pdf->SetXY($tab3_posx+21, $tab3_top);
    +		$pdf->MultiCell(20, 3, $outputlangs->transnoentities("Amount"), 0, 'L', 0);
    +		$pdf->SetXY($tab3_posx+40, $tab3_top);
    +		$pdf->MultiCell(20, 3, $outputlangs->transnoentities("Type"), 0, 'L', 0);
    +		$pdf->SetXY($tab3_posx+58, $tab3_top);
    +		$pdf->MultiCell(20, 3, $outputlangs->transnoentities("Num"), 0, 'L', 0);
    +
    +		$pdf->line($tab3_posx, $tab3_top-1+$tab3_height, $tab3_posx+$tab3_width, $tab3_top-1+$tab3_height);
    +
    +		$y=0;
    +
    +		$pdf->SetFont('','', $default_font_size - 4);
    +
    +
    +		// Loop on each deposits and credit notes included
    +		$sql = "SELECT re.rowid, re.amount_ht, re.multicurrency_amount_ht, re.amount_tva, re.multicurrency_amount_tva,  re.amount_ttc, re.multicurrency_amount_ttc,";
    +		$sql.= " re.description, re.fk_facture_source,";
    +		$sql.= " f.type, f.datef";
    +		$sql.= " FROM ".MAIN_DB_PREFIX ."societe_remise_except as re, ".MAIN_DB_PREFIX ."facture as f";
    +		$sql.= " WHERE re.fk_facture_source = f.rowid AND re.fk_facture = ".$object->id;
    +		$resql=$this->db->query($sql);
    +		if ($resql)
    +		{
    +			$num = $this->db->num_rows($resql);
    +			$i=0;
    +			$invoice=new Facture($this->db);
    +			while ($i < $num)
    +			{
    +				$y+=3;
    +				$obj = $this->db->fetch_object($resql);
    +
    +				if ($obj->type == 2) $text=$outputlangs->trans("CreditNote");
    +				elseif ($obj->type == 3) $text=$outputlangs->trans("Deposit");
    +				else $text=$outputlangs->trans("UnknownType");
    +
    +				$invoice->fetch($obj->fk_facture_source);
    +
    +				$pdf->SetXY($tab3_posx, $tab3_top+$y);
    +				$pdf->MultiCell(20, 3, dol_print_date($obj->datef,'day',false,$outputlangs,true), 0, 'L', 0);
    +				$pdf->SetXY($tab3_posx+21, $tab3_top+$y);
    +				$pdf->MultiCell(20, 3, price(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? $obj->multicurrency_amount_ttc : $obj->amount_ttc, 0, $outputlangs), 0, 'L', 0);
    +				$pdf->SetXY($tab3_posx+40, $tab3_top+$y);
    +				$pdf->MultiCell(20, 3, $text, 0, 'L', 0);
    +				$pdf->SetXY($tab3_posx+58, $tab3_top+$y);
    +				$pdf->MultiCell(20, 3, $invoice->ref, 0, 'L', 0);
    +
    +				$pdf->line($tab3_posx, $tab3_top+$y+3, $tab3_posx+$tab3_width, $tab3_top+$y+3);
    +
    +				$i++;
    +			}
    +		}
    +		else
    +		{
    +			$this->error=$this->db->lasterror();
    +			return -1;
    +		}
    +
    +		// Loop on each payment
    +		// TODO Call getListOfPaymentsgetListOfPayments instead of hard coded sql
    +		$sql = "SELECT p.datep as date, p.fk_paiement, p.num_paiement as num, pf.amount as amount, pf.multicurrency_amount,";
    +		$sql.= " cp.code";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."paiement_facture as pf, ".MAIN_DB_PREFIX."paiement as p";
    +		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_paiement as cp ON p.fk_paiement = cp.id";
    +		$sql.= " WHERE pf.fk_paiement = p.rowid AND pf.fk_facture = ".$object->id;
    +		//$sql.= " WHERE pf.fk_paiement = p.rowid AND pf.fk_facture = 1";
    +		$sql.= " ORDER BY p.datep";
    +
    +		$resql=$this->db->query($sql);
    +		if ($resql)
    +		{
    +			$num = $this->db->num_rows($resql);
    +			$i=0;
    +			while ($i < $num) {
    +				$y+=3;
    +				$row = $this->db->fetch_object($resql);
    +
    +				$pdf->SetXY($tab3_posx, $tab3_top+$y);
    +				$pdf->MultiCell(20, 3, dol_print_date($this->db->jdate($row->date),'day',false,$outputlangs,true), 0, 'L', 0);
    +				$pdf->SetXY($tab3_posx+21, $tab3_top+$y);
    +				$pdf->MultiCell(20, 3, price($sign * (($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? $row->multicurrency_amount : $row->amount), 0, $outputlangs), 0, 'L', 0);
    +				$pdf->SetXY($tab3_posx+40, $tab3_top+$y);
    +				$oper = $outputlangs->transnoentitiesnoconv("PaymentTypeShort" . $row->code);
    +
    +				$pdf->MultiCell(20, 3, $oper, 0, 'L', 0);
    +				$pdf->SetXY($tab3_posx+58, $tab3_top+$y);
    +				$pdf->MultiCell(30, 3, $row->num, 0, 'L', 0);
    +
    +				$pdf->line($tab3_posx, $tab3_top+$y+3, $tab3_posx+$tab3_width, $tab3_top+$y+3);
    +
    +				$i++;
    +			}
    +		}
    +		else
    +		{
    +			$this->error=$this->db->lasterror();
    +			return -1;
    +		}
    +	}
    +
    +
    +	/**
    +	 *   Show miscellaneous information (payment mode, payment term, ...)
    +	 *
    +	 *   @param		PDF			$pdf     		Object PDF
    +	 *   @param		Object		$object			Object to show
    +	 *   @param		int			$posy			Y
    +	 *   @param		Translate	$outputlangs	Langs object
    +	 *   @return	void
    +	 */
    +	private function drawInfoTable(&$pdf, $object, $posy, $outputlangs)
    +	{
    +		global $conf;
    +
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +		// If France, show VAT mention if not applicable
    +		if ($this->emetteur->country_code == 'FR' && $this->franchise == 1)
    +		{
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
    +
    +			$posy=$pdf->GetY()+4;
    +		}
    +
    +		$posxval=52;
    +
    +		// Show payments conditions
    +		if ($object->type != 2 && ($object->cond_reglement_code || $object->cond_reglement))
    +		{
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$titre = $outputlangs->transnoentities("PaymentConditions").':';
    +			$pdf->MultiCell(43, 4, $titre, 0, 'L');
    +
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posxval, $posy);
    +			$lib_condition_paiement=$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code)!=('PaymentCondition'.$object->cond_reglement_code)?$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code):$outputlangs->convToOutputCharset($object->cond_reglement_doc);
    +			$lib_condition_paiement=str_replace('\n',"\n",$lib_condition_paiement);
    +			$pdf->MultiCell(67, 4, $lib_condition_paiement,0,'L');
    +
    +			$posy=$pdf->GetY()+3;
    +		}
    +
    +		if ($object->type != 2)
    +		{
    +			// Check a payment mode is defined
    +			if (empty($object->mode_reglement_code)
    +			&& empty($conf->global->FACTURE_CHQ_NUMBER)
    +			&& empty($conf->global->FACTURE_RIB_NUMBER))
    +			{
    +				$this->error = $outputlangs->transnoentities("ErrorNoPaiementModeConfigured");
    +			}
    +			// Avoid having any valid PDF with setup that is not complete
    +			elseif (($object->mode_reglement_code == 'CHQ' && empty($conf->global->FACTURE_CHQ_NUMBER) && empty($object->fk_account) && empty($object->fk_bank))
    +				|| ($object->mode_reglement_code == 'VIR' && empty($conf->global->FACTURE_RIB_NUMBER) && empty($object->fk_account) && empty($object->fk_bank)))
    +			{
    +				$outputlangs->load("errors");
    +
    +				$pdf->SetXY($this->marge_gauche, $posy);
    +				$pdf->SetTextColor(200,0,0);
    +				$pdf->SetFont('','B', $default_font_size - 2);
    +				$this->error = $outputlangs->transnoentities("ErrorPaymentModeDefinedToWithoutSetup",$object->mode_reglement_code);
    +				$pdf->MultiCell(80, 3, $this->error,0,'L',0);
    +				$pdf->SetTextColor(0,0,0);
    +
    +				$posy=$pdf->GetY()+1;
    +			}
    +
    +			// Show payment mode
    +			if ($object->mode_reglement_code
    +			&& $object->mode_reglement_code != 'CHQ'
    +			&& $object->mode_reglement_code != 'VIR')
    +			{
    +				$pdf->SetFont('','B', $default_font_size - 2);
    +				$pdf->SetXY($this->marge_gauche, $posy);
    +				$titre = $outputlangs->transnoentities("PaymentMode").':';
    +				$pdf->MultiCell(80, 5, $titre, 0, 'L');
    +
    +				$pdf->SetFont('','', $default_font_size - 2);
    +				$pdf->SetXY($posxval, $posy);
    +				$lib_mode_reg=$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code)!=('PaymentType'.$object->mode_reglement_code)?$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code):$outputlangs->convToOutputCharset($object->mode_reglement);
    +				$pdf->MultiCell(80, 5, $lib_mode_reg,0,'L');
    +
    +				$posy=$pdf->GetY()+2;
    +			}
    +
    +			// Show payment mode CHQ
    +			if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'CHQ')
    +			{
    +				// Si mode reglement non force ou si force a CHQ
    +				if (! empty($conf->global->FACTURE_CHQ_NUMBER))
    +				{
    +					$diffsizetitle=(empty($conf->global->PDF_DIFFSIZE_TITLE)?3:$conf->global->PDF_DIFFSIZE_TITLE);
    +
    +					if ($conf->global->FACTURE_CHQ_NUMBER > 0)
    +					{
    +						$account = new Account($this->db);
    +						$account->fetch($conf->global->FACTURE_CHQ_NUMBER);
    +
    +						$pdf->SetXY($this->marge_gauche, $posy);
    +						$pdf->SetFont('','B', $default_font_size - $diffsizetitle);
    +						$pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$account->proprio),0,'L',0);
    +						$posy=$pdf->GetY()+1;
    +
    +			            if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS))
    +			            {
    +							$pdf->SetXY($this->marge_gauche, $posy);
    +							$pdf->SetFont('','', $default_font_size - $diffsizetitle);
    +							$pdf->MultiCell(100, 3, $outputlangs->convToOutputCharset($account->owner_address), 0, 'L', 0);
    +							$posy=$pdf->GetY()+2;
    +			            }
    +					}
    +					if ($conf->global->FACTURE_CHQ_NUMBER == -1)
    +					{
    +						$pdf->SetXY($this->marge_gauche, $posy);
    +						$pdf->SetFont('','B', $default_font_size - $diffsizetitle);
    +						$pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$this->emetteur->name),0,'L',0);
    +						$posy=$pdf->GetY()+1;
    +
    +			            if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS))
    +			            {
    +							$pdf->SetXY($this->marge_gauche, $posy);
    +							$pdf->SetFont('','', $default_font_size - $diffsizetitle);
    +							$pdf->MultiCell(100, 3, $outputlangs->convToOutputCharset($this->emetteur->getFullAddress()), 0, 'L', 0);
    +							$posy=$pdf->GetY()+2;
    +			            }
    +					}
    +				}
    +			}
    +
    +			// If payment mode not forced or forced to VIR, show payment with BAN
    +			if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR')
    +			{
    +				if (! empty($object->fk_account) || ! empty($object->fk_bank) || ! empty($conf->global->FACTURE_RIB_NUMBER))
    +				{
    +					$bankid=(empty($object->fk_account)?$conf->global->FACTURE_RIB_NUMBER:$object->fk_account);
    +					if (! empty($object->fk_bank)) $bankid=$object->fk_bank;   // For backward compatibility when object->fk_account is forced with object->fk_bank
    +					$account = new Account($this->db);
    +					$account->fetch($bankid);
    +
    +					$curx=$this->marge_gauche;
    +					$cury=$posy;
    +
    +					$posy=pdf_bank($pdf,$outputlangs,$curx,$cury,$account,0,$default_font_size);
    +
    +					$posy+=2;
    +				}
    +			}
    +		}
    +
    +		return $posy;
    +	}
    +
    +
    +	/**
    +	 *	Show total to pay
    +	 *
    +	 *	@param	PDF			$pdf           Object PDF
    +	 *	@param  Facture		$object         Object invoice
    +	 *	@param  int			$deja_regle     Montant deja regle
    +	 *	@param	int			$posy			Position depart
    +	 *	@param	Translate	$outputlangs	Objet langs
    +	 *	@return int							Position pour suite
    +	 */
    +	private function drawTotalTable(&$pdf, $object, $deja_regle, $posy, $outputlangs)
    +	{
    +		global $conf,$mysoc;
    +
    +        $sign=1;
    +        if ($object->type == 2 && ! empty($conf->global->INVOICE_POSITIVE_CREDIT_NOTE)) $sign=-1;
    +
    +        $default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		$tab2_top = $posy;
    +		$tab2_hl = 4;
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +		// Tableau total
    +		$col1x = 120; $col2x = 170;
    +		if ($this->page_largeur < 210) // To work with US executive format
    +		{
    +			$col2x-=20;
    +		}
    +		$largcol2 = ($this->page_largeur - $this->marge_droite - $col2x);
    +
    +		$useborder=0;
    +		$index = 0;
    +
    +		// Total HT
    +		$pdf->SetFillColor(255,255,255);
    +		$pdf->SetXY($col1x, $tab2_top + 0);
    +		$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHT"), 0, 'L', 1);
    +
    +		$total_ht = ($conf->multicurrency->enabled && $object->mylticurrency_tx != 1 ? $object->multicurrency_total_ht : $object->total_ht);
    +		$pdf->SetXY($col2x, $tab2_top + 0);
    +		$pdf->MultiCell($largcol2, $tab2_hl, price($sign * ($total_ht + (! empty($object->remise)?$object->remise:0)), 0, $outputlangs), 0, 'R', 1);
    +
    +		// Show VAT by rates and total
    +		$pdf->SetFillColor(248,248,248);
    +
    +		$total_ttc = ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? $object->multicurrency_total_ttc : $object->total_ttc;
    +
    +		$this->atleastoneratenotnull=0;
    +		if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))
    +		{
    +			$tvaisnull=((! empty($this->tva) && count($this->tva) == 1 && isset($this->tva['0.000']) && is_float($this->tva['0.000'])) ? true : false);
    +			if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_IFNULL) && $tvaisnull)
    +			{
    +				// Nothing to do
    +			}
    +			else
    +			{
    +			    // FIXME amount of vat not supported with multicurrency
    +
    +				//Local tax 1 before VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on')
    +				//{
    +					foreach( $this->localtax1 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('1','3','5'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey!=0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT1",$mysoc->country_code).' ';
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +	      		//}
    +				//Local tax 2 before VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on')
    +				//{
    +					foreach( $this->localtax2 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('1','3','5'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey!=0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT2",$mysoc->country_code).' ';
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +
    +                //}
    +
    +				// VAT
    +				// Situations totals migth be wrong on huge amounts
    +				if ($object->situation_cycle_ref && $object->situation_counter > 1) {
    +
    +					$sum_pdf_tva = 0;
    +					foreach($this->tva as $tvakey => $tvaval){
    +						$sum_pdf_tva+=$tvaval; // sum VAT amounts to compare to object
    +					}
    +
    +					if($sum_pdf_tva!=$object->total_tva) { // apply coef to recover the VAT object amount (the good one)
    +						$coef_fix_tva = $object->total_tva / $sum_pdf_tva;
    +
    +						foreach($this->tva as $tvakey => $tvaval) {
    +							$this->tva[$tvakey]=$tvaval * $coef_fix_tva;
    +						}
    +					}
    +				}
    +
    +				foreach($this->tva as $tvakey => $tvaval)
    +				{
    +					if ($tvakey != 0)    // On affiche pas taux 0
    +					{
    +						$this->atleastoneratenotnull++;
    +
    +						$index++;
    +						$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +						$tvacompl='';
    +						if (preg_match('/\*/',$tvakey))
    +						{
    +							$tvakey=str_replace('*','',$tvakey);
    +							$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +						}
    +						$totalvat =$outputlangs->transcountrynoentities("TotalVAT",$mysoc->country_code).' ';
    +						$totalvat.=vatrate($tvakey,1).$tvacompl;
    +						$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +						$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +						$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +					}
    +				}
    +
    +				//Local tax 1 after VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on')
    +				//{
    +					foreach( $this->localtax1 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('2','4','6'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey != 0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT1",$mysoc->country_code).' ';
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +	      		//}
    +				//Local tax 2 after VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on')
    +				//{
    +					foreach( $this->localtax2 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('2','4','6'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +						    // retrieve global local tax
    +							if ($tvakey != 0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT2",$mysoc->country_code).' ';
    +
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					//}
    +				}
    +
    +				// Revenue stamp
    +				if (price2num($object->revenuestamp) != 0)
    +				{
    +					$index++;
    +					$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +					$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("RevenueStamp"), $useborder, 'L', 1);
    +
    +					$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +					$pdf->MultiCell($largcol2, $tab2_hl, price($sign * $object->revenuestamp), $useborder, 'R', 1);
    +				}
    +
    +				// Total TTC
    +				$index++;
    +				$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +				$pdf->SetTextColor(0,0,60);
    +				$pdf->SetFillColor(224,224,224);
    +				$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalTTC"), $useborder, 'L', 1);
    +
    +				$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +				$pdf->MultiCell($largcol2, $tab2_hl, price($sign * $total_ttc, 0, $outputlangs), $useborder, 'R', 1);
    +			}
    +		}
    +
    +		$pdf->SetTextColor(0,0,0);
    +
    +		$creditnoteamount=$object->getSumCreditNotesUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0);
    +		$depositsamount=$object->getSumDepositsUsed(($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? 1 : 0);
    +		//print "x".$creditnoteamount."-".$depositsamount;exit;
    +		$resteapayer = price2num($total_ttc - $deja_regle - $creditnoteamount - $depositsamount, 'MT');
    +		if ($object->paye) $resteapayer=0;
    +
    +		if (($deja_regle > 0 || $creditnoteamount > 0 || $depositsamount > 0) && empty($conf->global->INVOICE_NO_PAYMENT_DETAILS))
    +		{
    +			// Already paid + Deposits
    +			$index++;
    +			$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("Paid"), 0, 'L', 0);
    +			$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($largcol2, $tab2_hl, price($deja_regle + $depositsamount, 0, $outputlangs), 0, 'R', 0);
    +
    +			// Credit note
    +			if ($creditnoteamount)
    +			{
    +				$index++;
    +				$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +				$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("CreditNotes"), 0, 'L', 0);
    +				$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +				$pdf->MultiCell($largcol2, $tab2_hl, price($creditnoteamount, 0, $outputlangs), 0, 'R', 0);
    +			}
    +
    +			// Escompte
    +			if ($object->close_code == Facture::CLOSECODE_DISCOUNTVAT)
    +			{
    +				$index++;
    +				$pdf->SetFillColor(255,255,255);
    +
    +				$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +				$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("EscompteOfferedShort"), $useborder, 'L', 1);
    +				$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +				$pdf->MultiCell($largcol2, $tab2_hl, price($object->total_ttc - $deja_regle - $creditnoteamount - $depositsamount, 0, $outputlangs), $useborder, 'R', 1);
    +
    +				$resteapayer=0;
    +			}
    +
    +			$index++;
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->SetFillColor(224,224,224);
    +			$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("RemainderToPay"), $useborder, 'L', 1);
    +			$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($largcol2, $tab2_hl, price($resteapayer, 0, $outputlangs), $useborder, 'R', 1);
    +
    +			$pdf->SetFont('','', $default_font_size - 1);
    +			$pdf->SetTextColor(0,0,0);
    +		}
    +
    +		$index++;
    +		return ($tab2_top + ($tab2_hl * $index));
    +	}
    +
    +	/**
    +	 *   Show table for lines
    +	 *
    +	 *   @param		PDF			$pdf     		Object PDF
    +	 *   @param		string		$tab_top		Top position of table
    +	 *   @param		string		$tab_height		Height of table (rectangle)
    +	 *   @param		int			$nexY			Y (not used)
    +	 *   @param		Translate	$outputlangs	Langs object
    +	 *   @param		int			$hidetop		1=Hide top bar of array and title, 0=Hide nothing, -1=Hide only title
    +	 *   @param		int			$hidebottom		Hide bottom bar of array
    +	 *   @param		string		$currency		Currency code
    +	 *   @return	void
    +	 */
    +	function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop=0, $hidebottom=0, $currency='')
    +	{
    +		global $conf;
    +
    +		// Force to disable hidetop and hidebottom
    +		$hidebottom=0;
    +		if ($hidetop) $hidetop=-1;
    +
    +		$currency = !empty($currency) ? $currency : $conf->currency;
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		// Amount in (at tab_top - 1)
    +		$pdf->SetTextColor(0,0,0);
    +		$pdf->SetFont('','', $default_font_size - 2);
    +
    +		if (empty($hidetop))
    +		{
    +			$titre = $outputlangs->transnoentities("AmountInCurrency",$outputlangs->transnoentitiesnoconv("Currency".$currency));
    +			$pdf->SetXY($this->page_largeur - $this->marge_droite - ($pdf->GetStringWidth($titre) + 3), $tab_top-4);
    +			$pdf->MultiCell(($pdf->GetStringWidth($titre) + 3), 2, $titre);
    +
    +			//$conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR='230,230,230';
    +			if (! empty($conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR)) $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_droite-$this->marge_gauche, 5, 'F', null, explode(',',$conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR));
    +		}
    +
    +		$pdf->SetDrawColor(128,128,128);
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +		// Output Rect
    +		$this->printRect($pdf,$this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height, $hidetop, $hidebottom);	// Rect prend une longueur en 3eme param et 4eme param
    +
    +
    +		foreach ($this->cols as $colKey => $colDef)
    +		{
    +		    if(!$this->getColumnStatus($colKey)) continue;
    +
    +		    // get title label
    +		    $colDef['title']['label'] = !empty($colDef['title']['label'])?$colDef['title']['label']:$outputlangs->transnoentities($colDef['title']['textkey']);
    +
    +		    // Add column separator
    +		    if(!empty($colDef['border-left'])){
    +		        $pdf->line($colDef['xStartPos'], $tab_top, $colDef['xStartPos'], $tab_top + $tab_height);
    +		    }
    +
    +		    if (empty($hidetop))
    +		    {
    +		      $pdf->SetXY($colDef['xStartPos'] + $colDef['title']['padding'][3], $tab_top + $colDef['title']['padding'][0] );
    +
    +		      $textWidth = $colDef['width'] - $colDef['title']['padding'][3] -$colDef['title']['padding'][1];
    +		      $pdf->MultiCell($textWidth,2,$colDef['title']['label'],'',$colDef['title']['align']);
    +		    }
    +		}
    +
    +		if (empty($hidetop)){
    +			$pdf->line($this->marge_gauche, $tab_top+5, $this->page_largeur-$this->marge_droite, $tab_top+5);	// line prend une position y en 2eme param et 4eme param
    +		}
    +	}
    +
    +	/**
    +	 *  Show top header of page.
    +	 *
    +	 *  @param	PDF			$pdf     		Object PDF
    +	 *  @param  Object		$object     	Object to show
    +	 *  @param  int	    	$showaddress    0=no, 1=yes
    +	 *  @param  Translate	$outputlangs	Object lang for output
    +	 *  @return	void
    +	 */
    +	function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
    +	{
    +		global $conf, $langs;
    +
    +		// Translations
    +		$outputlangs->loadLangs(array("main", "bills", "propal", "companies"));
    +
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		pdf_pagehead($pdf,$outputlangs,$this->page_hauteur);
    +
    +		// Show Draft Watermark
    +		if($object->statut==Facture::STATUS_DRAFT && (! empty($conf->global->FACTURE_DRAFT_WATERMARK)) )
    +        {
    +		      pdf_watermark($pdf,$outputlangs,$this->page_hauteur,$this->page_largeur,'mm',$conf->global->FACTURE_DRAFT_WATERMARK);
    +        }
    +
    +		$pdf->SetTextColor(0,0,60);
    +		$pdf->SetFont('','B', $default_font_size + 3);
    +
    +		$w = 110;
    +
    +		$posy=$this->marge_haute;
    +        $posx=$this->page_largeur-$this->marge_droite-$w;
    +
    +		$pdf->SetXY($this->marge_gauche,$posy);
    +
    +		// Logo
    +		if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO))
    +		{
    +			$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
    +			if ($this->emetteur->logo)
    +			{
    +				if (is_readable($logo))
    +				{
    +				    $height=pdf_getHeightForLogo($logo);
    +					$pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
    +				}
    +				else
    +				{
    +					$pdf->SetTextColor(200,0,0);
    +					$pdf->SetFont('','B',$default_font_size - 2);
    +					$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
    +					$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
    +				}
    +			}
    +			else
    +			{
    +				$text=$this->emetteur->name;
    +				$pdf->MultiCell($w, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
    +			}
    +		}
    +
    +		$pdf->SetFont('','B', $default_font_size + 3);
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$title=$outputlangs->transnoentities("PdfInvoiceTitle");
    +		if ($object->type == 1) $title=$outputlangs->transnoentities("InvoiceReplacement");
    +		if ($object->type == 2) $title=$outputlangs->transnoentities("InvoiceAvoir");
    +		if ($object->type == 3) $title=$outputlangs->transnoentities("InvoiceDeposit");
    +		if ($object->type == 4) $title=$outputlangs->transnoentities("InvoiceProForma");
    +		if ($this->situationinvoice) $title=$outputlangs->transnoentities("InvoiceSituation");
    +		$pdf->MultiCell($w, 3, $title, '', 'R');
    +
    +		$pdf->SetFont('','B',$default_font_size);
    +
    +		$posy+=5;
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$textref=$outputlangs->transnoentities("Ref")." : " . $outputlangs->convToOutputCharset($object->ref);
    +		if ($object->statut == Facture::STATUS_DRAFT)
    +		{
    +			$pdf->SetTextColor(128,0,0);
    +			$textref.=' - '.$outputlangs->transnoentities("NotValidated");
    +		}
    +		$pdf->MultiCell($w, 4, $textref, '', 'R');
    +
    +		$posy+=1;
    +		$pdf->SetFont('','', $default_font_size - 2);
    +
    +		if ($object->ref_client)
    +		{
    +			$posy+=4;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell($w, 3, $outputlangs->transnoentities("RefCustomer")." : " . $outputlangs->convToOutputCharset($object->ref_client), '', 'R');
    +		}
    +
    +		$objectidnext=$object->getIdReplacingInvoice('validated');
    +		if ($object->type == 0 && $objectidnext)
    +		{
    +			$objectreplacing=new Facture($this->db);
    +			$objectreplacing->fetch($objectidnext);
    +
    +			$posy+=3;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ReplacementByInvoice").' : '.$outputlangs->convToOutputCharset($objectreplacing->ref), '', 'R');
    +		}
    +		if ($object->type == 1)
    +		{
    +			$objectreplaced=new Facture($this->db);
    +			$objectreplaced->fetch($object->fk_facture_source);
    +
    +			$posy+=4;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell($w, 3, $outputlangs->transnoentities("ReplacementInvoice").' : '.$outputlangs->convToOutputCharset($objectreplaced->ref), '', 'R');
    +		}
    +		if ($object->type == 2 && !empty($object->fk_facture_source))
    +		{
    +			$objectreplaced=new Facture($this->db);
    +			$objectreplaced->fetch($object->fk_facture_source);
    +
    +			$posy+=3;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell($w, 3, $outputlangs->transnoentities("CorrectionInvoice").' : '.$outputlangs->convToOutputCharset($objectreplaced->ref), '', 'R');
    +		}
    +
    +		$posy+=4;
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$pdf->MultiCell($w, 3, $outputlangs->transnoentities("DateInvoice")." : " . dol_print_date($object->date,"day",false,$outputlangs), '', 'R');
    +
    +		if (! empty($conf->global->INVOICE_POINTOFTAX_DATE))
    +		{
    +			$posy+=4;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell($w, 3, $outputlangs->transnoentities("DatePointOfTax")." : " . dol_print_date($object->date_pointoftax,"day",false,$outputlangs), '', 'R');
    +		}
    +
    +		if ($object->type != 2)
    +		{
    +			$posy+=3;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell($w, 3, $outputlangs->transnoentities("DateDue")." : " . dol_print_date($object->date_lim_reglement,"day",false,$outputlangs,true), '', 'R');
    +		}
    +
    +		if ($object->thirdparty->code_client)
    +		{
    +			$posy+=3;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell($w, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R');
    +		}
    +
    +		// Get contact
    +		if (!empty($conf->global->DOC_SHOW_FIRST_SALES_REP))
    +		{
    +		    $arrayidcontact=$object->getIdContact('internal','SALESREPFOLL');
    +		    if (count($arrayidcontact) > 0)
    +		    {
    +		        $usertmp=new User($this->db);
    +		        $usertmp->fetch($arrayidcontact[0]);
    +                $posy+=4;
    +                $pdf->SetXY($posx,$posy);
    +		        $pdf->SetTextColor(0,0,60);
    +		        $pdf->MultiCell($w, 3, $langs->transnoentities("SalesRepresentative")." : ".$usertmp->getFullName($langs), '', 'R');
    +		    }
    +		}
    +
    +		$posy+=1;
    +
    +		$top_shift = 0;
    +		// Show list of linked objects
    +		$current_y = $pdf->getY();
    +		$posy = pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, $w, 3, 'R', $default_font_size);
    +		if ($current_y < $pdf->getY())
    +		{
    +			$top_shift = $pdf->getY() - $current_y;
    +		}
    +
    +		if ($showaddress)
    +		{
    +			// Sender properties
    +			$carac_emetteur = pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty, '', 0, 'source', $object);
    +
    +			// Show sender
    +			$posy=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 40 : 42;
    +			$posy+=$top_shift;
    +			$posx=$this->marge_gauche;
    +			if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->page_largeur-$this->marge_droite-80;
    +
    +			$hautcadre=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 38 : 40;
    +			$widthrecbox=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 82;
    +
    +
    +			// Show sender frame
    +			$pdf->SetTextColor(0,0,0);
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posx,$posy-5);
    +			$pdf->MultiCell(66,5, $outputlangs->transnoentities("BillFrom").":", 0, 'L');
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetFillColor(230,230,230);
    +			$pdf->MultiCell($widthrecbox, $hautcadre, "", 0, 'R', 1);
    +			$pdf->SetTextColor(0,0,60);
    +
    +			// Show sender name
    +			$pdf->SetXY($posx+2,$posy+3);
    +			$pdf->SetFont('','B', $default_font_size);
    +			$pdf->MultiCell($widthrecbox-2, 4, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L');
    +			$posy=$pdf->getY();
    +
    +			// Show sender information
    +			$pdf->SetXY($posx+2,$posy);
    +			$pdf->SetFont('','', $default_font_size - 1);
    +			$pdf->MultiCell($widthrecbox-2, 4, $carac_emetteur, 0, 'L');
    +
    +			// If BILLING contact defined on invoice, we use it
    +			$usecontact=false;
    +			$arrayidcontact=$object->getIdContact('external','BILLING');
    +			if (count($arrayidcontact) > 0)
    +			{
    +				$usecontact=true;
    +				$result=$object->fetch_contact($arrayidcontact[0]);
    +			}
    +
    +			//Recipient name
    +			// On peut utiliser le nom de la societe du contact
    +			if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) {
    +				$thirdparty = $object->contact;
    +			} else {
    +				$thirdparty = $object->thirdparty;
    +			}
    +
    +			$carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs);
    +
    +			$carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target',$object);
    +
    +			// Show recipient
    +			$widthrecbox=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 100;
    +			if ($this->page_largeur < 210) $widthrecbox=84;	// To work with US executive format
    +			$posy=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 40 : 42;
    +			$posy+=$top_shift;
    +			$posx=$this->page_largeur-$this->marge_droite-$widthrecbox;
    +			if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->marge_gauche;
    +
    +			// Show recipient frame
    +			$pdf->SetTextColor(0,0,0);
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posx+2,$posy-5);
    +			$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo").":",0,'L');
    +			$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
    +
    +			// Show recipient name
    +			$pdf->SetXY($posx+2,$posy+3);
    +			$pdf->SetFont('','B', $default_font_size);
    +			$pdf->MultiCell($widthrecbox, 2, $carac_client_name, 0, 'L');
    +
    +			$posy = $pdf->getY();
    +
    +			// Show recipient information
    +			$pdf->SetFont('','', $default_font_size - 1);
    +			$pdf->SetXY($posx+2,$posy);
    +			$pdf->MultiCell($widthrecbox, 4, $carac_client, 0, 'L');
    +		}
    +
    +		$pdf->SetTextColor(0,0,0);
    +		return $top_shift;
    +	}
    +
    +	/**
    +	 *   	Show footer of page. Need this->emetteur object
    +     *
    +	 *   	@param	PDF			$pdf     			PDF
    +	 * 		@param	Object		$object				Object to show
    +	 *      @param	Translate	$outputlangs		Object lang for output
    +	 *      @param	int			$hidefreetext		1=Hide free text
    +	 *      @return	int								Return height of bottom margin including footer text
    +	 */
    +	function _pagefoot(&$pdf,$object,$outputlangs,$hidefreetext=0)
    +	{
    +		global $conf;
    +		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
    +		return pdf_pagefoot($pdf,$outputlangs,'INVOICE_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
    +	}
    +
    +	/**
    +	 *   	Define Array Column Field
    +	 *
    +	 *   	@param	object			$object    		common object
    +	 *   	@param	outputlangs		$outputlangs    langs
    +     *      @param	int			   $hidedetails		Do not show line details
    +     *      @param	int			   $hidedesc		Do not show desc
    +     *      @param	int			   $hideref			Do not show ref
    +	 *      @return	null
    +	 */
    +    function defineColumnField($object,$outputlangs,$hidedetails=0,$hidedesc=0,$hideref=0)
    +    {
    +	    global $conf, $hookmanager;
    +
    +	    // Default field style for content
    +	    $this->defaultContentsFieldsStyle = array(
    +	        'align' => 'R', // R,C,L
    +	        'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	    );
    +
    +	    // Default field style for content
    +	    $this->defaultTitlesFieldsStyle = array(
    +	        'align' => 'C', // R,C,L
    +	        'padding' => array(0.5,0,0.5,0), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	    );
    +
    +	    /*
    +	     * For exemple
    +	    $this->cols['theColKey'] = array(
    +	        'rank' => $rank, // int : use for ordering columns
    +	        'width' => 20, // the column width in mm
    +	        'title' => array(
    +	            'textkey' => 'yourLangKey', // if there is no label, yourLangKey will be translated to replace label
    +	            'label' => ' ', // the final label : used fore final generated text
    +	            'align' => 'L', // text alignement :  R,C,L
    +	            'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	        ),
    +	        'content' => array(
    +	            'align' => 'L', // text alignement :  R,C,L
    +	            'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	        ),
    +	    );
    +	    */
    +
    +	    $rank=0; // do not use negative rank
    +	    $this->cols['desc'] = array(
    +	        'rank' => $rank,
    +	        'width' => false, // only for desc
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'Designation', // use lang key is usefull in somme case with module
    +	            'align' => 'L',
    +	            // 'textkey' => 'yourLangKey', // if there is no label, yourLangKey will be translated to replace label
    +	            // 'label' => ' ', // the final label
    +	            'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	        ),
    +	        'content' => array(
    +	            'align' => 'L',
    +	        ),
    +	    );
    +
    +	    // PHOTO
    +        $rank = $rank + 10;
    +        $this->cols['photo'] = array(
    +            'rank' => $rank,
    +            'width' => (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH)?20:$conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH), // in mm
    +            'status' => false,
    +            'title' => array(
    +                'textkey' => 'Photo',
    +                'label' => ' '
    +            ),
    +            'content' => array(
    +                'padding' => array(0,0,0,0), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +            ),
    +            'border-left' => false, // remove left line separator
    +        );
    +
    +	    if (! empty($conf->global->MAIN_GENERATE_INVOICES_WITH_PICTURE) && !empty($this->atleastonephoto))
    +	    {
    +	        $this->cols['photo']['status'] = true;
    +	    }
    +
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['vat'] = array(
    +	        'rank' => $rank,
    +	        'status' => false,
    +	        'width' => 16, // in mm
    +	        'title' => array(
    +	            'textkey' => 'VAT'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT) && empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN))
    +	    {
    +	        $this->cols['vat']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['subprice'] = array(
    +	        'rank' => $rank,
    +	        'width' => 19, // in mm
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'PriceUHT'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['qty'] = array(
    +	        'rank' => $rank,
    +	        'width' => 16, // in mm
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'Qty'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['progress'] = array(
    +	        'rank' => $rank,
    +	        'width' => 19, // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'Progress'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    if($this->situationinvoice)
    +	    {
    +	        $this->cols['progress']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['unit'] = array(
    +	        'rank' => $rank,
    +	        'width' => 11, // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'Unit'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +	    if($conf->global->PRODUCT_USE_UNITS){
    +	        $this->cols['unit']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['discount'] = array(
    +	        'rank' => $rank,
    +	        'width' => 13, // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'ReductionShort'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +	    if ($this->atleastonediscount){
    +	        $this->cols['discount']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['totalexcltax'] = array(
    +	        'rank' => $rank,
    +	        'width' => 26, // in mm
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'TotalHT'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +
    +	    $parameters=array(
    +	        'object' => $object,
    +	        'outputlangs' => $outputlangs,
    +	        'hidedetails' => $hidedetails,
    +	        'hidedesc' => $hidedesc,
    +	        'hideref' => $hideref
    +	    );
    +
    +	    $reshook=$hookmanager->executeHooks('defineColumnField',$parameters,$this);    // Note that $object may have been modified by hook
    +	    if ($reshook < 0)
    +	    {
    +	        setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +	    }
    +	    elseif (empty($reshook))
    +	    {
    +	        $this->cols = array_replace($this->cols, $hookmanager->resArray); // array_replace is used to preserve keys
    +	    }
    +	    else
    +	    {
    +	        $this->cols = $hookmanager->resArray;
    +	    }
    +	}
    +}
    diff --git a/htdocs/core/modules/facture/mod_facture_mars.php b/htdocs/core/modules/facture/mod_facture_mars.php
    index 831dce5d3e4..19161ae1325 100644
    --- a/htdocs/core/modules/facture/mod_facture_mars.php
    +++ b/htdocs/core/modules/facture/mod_facture_mars.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2018 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -30,12 +30,24 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/facture/modules_facture.php';
      */
     class mod_facture_mars extends ModeleNumRefFactures
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefixinvoice='FA';
    -	var $prefixreplacement='FR';
    -	var $prefixdeposit='AC';
    -	var $prefixcreditnote='AV';
    -	var $error='';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefixinvoice='FA';
    +
    +	public $prefixreplacement='FR';
    +
    +	public $prefixdeposit='AC';
    +
    +	public $prefixcreditnote='AV';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
     	/**
    @@ -133,19 +145,19 @@ class mod_facture_mars extends ModeleNumRefFactures
     	 * Return next value not used or last value used
     	 *
     	 * @param	Societe		$objsoc		Object third party
    -	 * @param   Facture		$facture	Object invoice
    +	 * @param   Facture		$invoice	Object invoice
          * @param   string		$mode       'next' for next value or 'last' for last value
     	 * @return  string       			Value
     	 */
    -	function getNextValue($objsoc,$facture,$mode='next')
    +	function getNextValue($objsoc, $invoice, $mode='next')
     	{
     		global $db;
     
     		$prefix=$this->prefixinvoice;
     
    -		if ($facture->type == 1) $prefix=$this->prefixreplacement;
    -		else if ($facture->type == 2) $prefix=$this->prefixcreditnote;
    -		else if ($facture->type == 3) $prefix=$this->prefixdeposit;
    +		if ($invoice->type == 1) $prefix=$this->prefixreplacement;
    +		else if ($invoice->type == 2) $prefix=$this->prefixcreditnote;
    +		else if ($invoice->type == 3) $prefix=$this->prefixdeposit;
     		else $prefix=$this->prefixinvoice;
     
     		// D'abord on recupere la valeur max
    @@ -153,7 +165,7 @@ class mod_facture_mars extends ModeleNumRefFactures
     		$sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
     		$sql.= " FROM ".MAIN_DB_PREFIX."facture";
     		$sql.= " WHERE facnumber LIKE '".$prefix."____-%'";
    -		$sql.= " AND entity IN (".getEntity('invoicenumber').")";
    +		$sql.= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")";
     
     		$resql=$db->query($sql);
     		dol_syslog(get_class($this)."::getNextValue", LOG_DEBUG);
    @@ -177,7 +189,7 @@ class mod_facture_mars extends ModeleNumRefFactures
                 $sql = "SELECT facnumber as ref";
                 $sql.= " FROM ".MAIN_DB_PREFIX."facture";
                 $sql.= " WHERE facnumber LIKE '".$prefix."____-".$num."'";
    -            $sql.= " AND entity IN (".getEntity('invoicenumber').")";
    +            $sql.= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")";
     
                 dol_syslog(get_class($this)."::getNextValue", LOG_DEBUG);
                 $resql=$db->query($sql);
    @@ -192,7 +204,7 @@ class mod_facture_mars extends ModeleNumRefFactures
     		}
     		else if ($mode == 'next')
     		{
    -    		$date=$facture->date;	// This is invoice date (not creation date)
    +			$date=$invoice->date;	// This is invoice date (not creation date)
         		$yymm = strftime("%y%m",$date);
     
         		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
    @@ -216,6 +228,5 @@ class mod_facture_mars extends ModeleNumRefFactures
     	{
     		return $this->getNextValue($objsoc,$objforref,$mode);
     	}
    -
     }
     
    diff --git a/htdocs/core/modules/facture/mod_facture_mercure.php b/htdocs/core/modules/facture/mod_facture_mercure.php
    index e826b18f0e0..88217172c76 100644
    --- a/htdocs/core/modules/facture/mod_facture_mercure.php
    +++ b/htdocs/core/modules/facture/mod_facture_mercure.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      * Copyright (C) 2013      Juanjo Menent		<jmenent@2byte.es>
      *
    @@ -33,8 +33,16 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/facture/modules_facture.php';
      */
     class mod_facture_mercure extends ModeleNumRefFactures
     {
    -    var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -    var $error = '';
    +    /**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +    /**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
     
     
         /**
    @@ -44,7 +52,7 @@ class mod_facture_mercure extends ModeleNumRefFactures
          */
         function info()
         {
    -        global $conf,$langs;
    +        global $conf, $langs;
     
             $langs->load("bills");
     
    @@ -78,7 +86,7 @@ class mod_facture_mercure extends ModeleNumRefFactures
             $texte.= '<tr><td>'.$langs->trans("Mask").' ('.$langs->trans("InvoiceReplacement").'):</td>';
             $texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskreplacement" value="'.$conf->global->FACTURE_MERCURE_MASK_REPLACEMENT.'">',$tooltip,1,1).'</td>';
             $texte.= '</tr>';
    -        
    +
             // Parametrage du prefix des avoirs
             $texte.= '<tr><td>'.$langs->trans("Mask").' ('.$langs->trans("InvoiceAvoir").'):</td>';
             $texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskcredit" value="'.$conf->global->FACTURE_MERCURE_MASK_CREDIT.'">',$tooltip,1,1).'</td>';
    @@ -123,19 +131,19 @@ class mod_facture_mercure extends ModeleNumRefFactures
          * Return next value
          *
          * @param	Societe		$objsoc     Object third party
    -     * @param   Facture		$facture	Object invoice
    +     * @param   Facture		$invoice	Object invoice
          * @param   string		$mode       'next' for next value or 'last' for last value
          * @return  string      			Value if OK, 0 if KO
          */
    -    function getNextValue($objsoc,$facture,$mode='next')
    +    function getNextValue($objsoc, $invoice, $mode='next')
         {
    -        global $db,$conf;
    +    	global $db,$conf;
     
    -        require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php';
    +    	require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php';
     
             // Get Mask value
             $mask = '';
    -        if (is_object($facture) && $facture->type == 1) 
    +        if (is_object($invoice) && $invoice->type == 1)
             {
             	$mask=$conf->global->FACTURE_MERCURE_MASK_REPLACEMENT;
             	if (! $mask)
    @@ -143,8 +151,8 @@ class mod_facture_mercure extends ModeleNumRefFactures
             		$mask=$conf->global->FACTURE_MERCURE_MASK_INVOICE;
             	}
             }
    -        else if (is_object($facture) && $facture->type == 2) $mask=$conf->global->FACTURE_MERCURE_MASK_CREDIT;
    -		else if (is_object($facture) && $facture->type == 3) $mask=$conf->global->FACTURE_MERCURE_MASK_DEPOSIT;
    +        else if (is_object($invoice) && $invoice->type == 2) $mask=$conf->global->FACTURE_MERCURE_MASK_CREDIT;
    +        else if (is_object($invoice) && $invoice->type == 3) $mask=$conf->global->FACTURE_MERCURE_MASK_DEPOSIT;
             else $mask=$conf->global->FACTURE_MERCURE_MASK_INVOICE;
             if (! $mask)
             {
    @@ -152,14 +160,17 @@ class mod_facture_mercure extends ModeleNumRefFactures
                 return 0;
             }
     
    -        $where='';
    -        //if ($facture->type == 2) $where.= " AND type = 2";
    -        //else $where.=" AND type != 2";
    +    	$where='';
    +    	//if ($facture->type == 2) $where.= " AND type = 2";
    +    	//else $where.=" AND type != 2";
     
    -        $numFinal=get_next_value($db,$mask,'facture','facnumber',$where,$objsoc,$facture->date,$mode);
    -        if (! preg_match('/([0-9])+/',$numFinal)) $this->error = $numFinal;
    +    	// Get entities
    +    	$entity = getEntity('invoicenumber', 1, $invoice);
     
    -        return  $numFinal;
    +    	$numFinal=get_next_value($db,$mask,'facture','facnumber',$where,$objsoc,$invoice->date,$mode,false,null,$entity);
    +    	if (! preg_match('/([0-9])+/',$numFinal)) $this->error = $numFinal;
    +
    +    	return  $numFinal;
         }
     
     
    @@ -175,5 +186,4 @@ class mod_facture_mercure extends ModeleNumRefFactures
         {
             return $this->getNextValue($objsoc,$objforref,$mode);
         }
    -
     }
    diff --git a/htdocs/core/modules/facture/mod_facture_terre.php b/htdocs/core/modules/facture/mod_facture_terre.php
    index 174d8314784..1c19d564486 100644
    --- a/htdocs/core/modules/facture/mod_facture_terre.php
    +++ b/htdocs/core/modules/facture/mod_facture_terre.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,11 +29,22 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/facture/modules_facture.php';
      */
     class mod_facture_terre extends ModeleNumRefFactures
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefixinvoice='FA';
    -	var $prefixcreditnote='AV';
    -	var $prefixdeposit='AC';
    -	var $error='';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefixinvoice='FA';
    +
    +	public $prefixcreditnote='AV';
    +
    +	public $prefixdeposit='AC';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
     	/**
    @@ -152,16 +163,16 @@ class mod_facture_terre extends ModeleNumRefFactures
     	 * Return next value not used or last value used
     	 *
     	 * @param	Societe		$objsoc		Object third party
    -	 * @param   Facture		$facture	Object invoice
    +	 * @param   Facture		$invoice	Object invoice
          * @param   string		$mode       'next' for next value or 'last' for last value
     	 * @return  string       			Value
     	 */
    -	function getNextValue($objsoc,$facture,$mode='next')
    +	function getNextValue($objsoc, $invoice, $mode='next')
     	{
     		global $db;
     
    -		if ($facture->type == 2) $prefix=$this->prefixcreditnote;
    -		else if ($facture->type == 3) $prefix=$this->prefixdeposit;
    +		if ($invoice->type == 2) $prefix=$this->prefixcreditnote;
    +		else if ($invoice->type == 3) $prefix=$this->prefixdeposit;
     		else $prefix=$this->prefixinvoice;
     
     		// D'abord on recupere la valeur max
    @@ -169,7 +180,7 @@ class mod_facture_terre extends ModeleNumRefFactures
     		$sql = "SELECT MAX(CAST(SUBSTRING(facnumber FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
     		$sql.= " FROM ".MAIN_DB_PREFIX."facture";
     		$sql.= " WHERE facnumber LIKE '".$prefix."____-%'";
    -		$sql.= " AND entity IN (".getEntity('invoicenumber').")";
    +		$sql.= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")";
     
     		$resql=$db->query($sql);
     		dol_syslog(get_class($this)."::getNextValue", LOG_DEBUG);
    @@ -193,7 +204,7 @@ class mod_facture_terre extends ModeleNumRefFactures
                 $sql = "SELECT facnumber as ref";
                 $sql.= " FROM ".MAIN_DB_PREFIX."facture";
                 $sql.= " WHERE facnumber LIKE '".$prefix."____-".$num."'";
    -            $sql.= " AND entity IN (".getEntity('invoicenumber').")";
    +            $sql.= " AND entity IN (".getEntity('invoicenumber', 1, $invoice).")";
     
                 dol_syslog(get_class($this)."::getNextValue", LOG_DEBUG);
                 $resql=$db->query($sql);
    @@ -208,7 +219,7 @@ class mod_facture_terre extends ModeleNumRefFactures
     		}
     		else if ($mode == 'next')
     		{
    -    		$date=$facture->date;	// This is invoice date (not creation date)
    +			$date=$invoice->date;	// This is invoice date (not creation date)
         		$yymm = strftime("%y%m",$date);
     
         		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
    @@ -232,6 +243,5 @@ class mod_facture_terre extends ModeleNumRefFactures
     	{
     		return $this->getNextValue($objsoc,$objforref,$mode);
     	}
    -
     }
     
    diff --git a/htdocs/core/modules/facture/modules_facture.php b/htdocs/core/modules/facture/modules_facture.php
    index b5d9a2397cc..fd9168150d6 100644
    --- a/htdocs/core/modules/facture/modules_facture.php
    +++ b/htdocs/core/modules/facture/modules_facture.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -37,8 +37,12 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';   // Requ
      */
     abstract class ModelePDFFactures extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation modules
     	 *
    @@ -48,6 +52,7 @@ abstract class ModelePDFFactures extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='invoice';
    @@ -61,11 +66,14 @@ abstract class ModelePDFFactures extends CommonDocGenerator
     }
     
     /**
    - *	Classe mere des modeles de numerotation des references de facture
    + *  Classe mere des modeles de numerotation des references de facture
      */
     abstract class ModeleNumRefFactures
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 * Return if a module can be used or not
    diff --git a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php
    index aa7ed05070b..b06922acdb9 100644
    --- a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php
    +++ b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003		Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010	Laurent Destailleur			<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin				<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin				<regis.houssin@inodbox.com>
      * Copyright (C) 2008		Raphael Bertrand (Resultic)	<raphael.bertrand@resultic.fr>
      * Copyright (C) 2011		Fabrice CHERRIER
      * Copyright (C) 2013		Cédric Salvador				<csalvador@gpcsolutions.fr>
    @@ -38,21 +38,78 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
      */
     class pdf_soleil extends ModelePDFFicheinter
     {
    -	var $db;
    -	var $name;
    -	var $description;
    -	var $type;
    +	 /**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
     
    -	var $phpmin = array(4,3,0); // Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
     
    -	var $page_largeur;
    -	var $page_hauteur;
    -	var $format;
    -	var $marge_gauche;
    -	var	$marge_droite;
    -	var	$marge_haute;
    -	var	$marge_basse;
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
    +
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +    /**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
     	/**
     	 *	Constructor
    @@ -94,6 +151,7 @@ class pdf_soleil extends ModelePDFFicheinter
     		$this->posxdesc=$this->marge_gauche+1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Function to build pdf onto disk
     	 *
    @@ -107,13 +165,14 @@ class pdf_soleil extends ModelePDFFicheinter
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$db,$hookmanager;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    -		
    -		// Translations
    +
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "interventions", "dict", "companies"));
     
     		if ($conf->ficheinter->dir_output)
    @@ -496,10 +555,8 @@ class pdf_soleil extends ModelePDFFicheinter
     		global $conf,$langs;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("interventions");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "interventions"));
     
     		pdf_pagehead($pdf,$outputlangs,$this->page_hauteur);
     
    @@ -675,6 +732,4 @@ class pdf_soleil extends ModelePDFFicheinter
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'FICHINTER_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/fichinter/mod_arctic.php b/htdocs/core/modules/fichinter/mod_arctic.php
    index 278e20ae7de..86f25dc4078 100644
    --- a/htdocs/core/modules/fichinter/mod_arctic.php
    +++ b/htdocs/core/modules/fichinter/mod_arctic.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville         <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur          <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin                <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin                <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic)  <raphael.bertrand@resultic.fr>
      * Copyright (C) 2013      Juanjo Menent				<jmenent@2byte.es>
      *
    @@ -32,9 +32,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/fichinter/modules_fichinter.php';
      */
     class mod_arctic extends ModeleNumRefFicheinter
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'arctic';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='arctic';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='arctic';
     
     
     	/**
    @@ -44,7 +63,7 @@ class mod_arctic extends ModeleNumRefFicheinter
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    @@ -137,6 +156,5 @@ class mod_arctic extends ModeleNumRefFicheinter
         {
             return $this->getNextValue($objsoc,$objforref);
         }
    -
     }
     
    diff --git a/htdocs/core/modules/fichinter/mod_pacific.php b/htdocs/core/modules/fichinter/mod_pacific.php
    index 7e60a6aed4b..24f55192ff0 100644
    --- a/htdocs/core/modules/fichinter/mod_pacific.php
    +++ b/htdocs/core/modules/fichinter/mod_pacific.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013	   Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -30,10 +30,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/fichinter/modules_fichinter.php';
      */
     class mod_pacific extends ModeleNumRefFicheinter
     {
    -    var $version='dolibarr';        // 'development', 'experimental', 'dolibarr'
    -	var $prefix='FI';
    -	var $error='';
    -	var $nom = 'pacific';
    +    /**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';        // 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='FI';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='pacific';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='pacific';
     
     
     	/**
    @@ -142,6 +162,4 @@ class mod_pacific extends ModeleNumRefFicheinter
     	{
     		return $this->getNextValue($objsoc,$objforref);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/fichinter/modules_fichinter.php b/htdocs/core/modules/fichinter/modules_fichinter.php
    index 8bcb2990bdb..a0ab40ce7a0 100644
    --- a/htdocs/core/modules/fichinter/modules_fichinter.php
    +++ b/htdocs/core/modules/fichinter/modules_fichinter.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012 Philippe Grand	    <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -34,9 +34,13 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModelePDFFicheinter extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of active generation modules
     	 *
    @@ -46,6 +50,7 @@ abstract class ModelePDFFicheinter extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='ficheinter';
    @@ -64,7 +69,10 @@ abstract class ModelePDFFicheinter extends CommonDocGenerator
      */
     abstract class ModeleNumRefFicheinter
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 * 	Return if a module can be used or not
    @@ -141,6 +149,7 @@ abstract class ModeleNumRefFicheinter
     }
     
     
    +// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     /**
      *  Create an intervention document on disk using template defined into FICHEINTER_ADDON_PDF
      *
    @@ -155,6 +164,7 @@ abstract class ModeleNumRefFicheinter
      */
     function fichinter_create($db, $object, $modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0)
     {
    +    // phpcs:enable
     	global $conf,$langs,$user;
     	$langs->load("ficheinter");
     
    @@ -238,4 +248,3 @@ function fichinter_create($db, $object, $modele, $outputlangs, $hidedetails=0, $
     		return 0;
     	}
     }
    -
    diff --git a/htdocs/core/modules/holiday/index.html b/htdocs/core/modules/holiday/index.html
    new file mode 100644
    index 00000000000..8b137891791
    --- /dev/null
    +++ b/htdocs/core/modules/holiday/index.html
    @@ -0,0 +1 @@
    +
    diff --git a/htdocs/core/modules/holiday/mod_holiday_immaculate.php b/htdocs/core/modules/holiday/mod_holiday_immaculate.php
    new file mode 100644
    index 00000000000..338b553166e
    --- /dev/null
    +++ b/htdocs/core/modules/holiday/mod_holiday_immaculate.php
    @@ -0,0 +1,154 @@
    +<?php
    +/* Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
    + * Copyright (C) 2018      Charlene Benke		<charlie@patas-monkey.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
    +
    +/**
    + *  \file       htdocs/core/modules/holiday/mod_holiday_immaculate.php
    + *  \ingroup    contract
    + *  \brief      File of class to manage contract numbering rules Magre
    + */
    +
    +require_once DOL_DOCUMENT_ROOT .'/core/modules/holiday/modules_holiday.php';
    +
    +/**
    + *	Class to manage contract numbering rules Magre
    + */
    +class mod_holiday_immaculate extends ModelNumRefHolidays
    +{
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see $name
    +	 */
    +	public $nom='Immaculate';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Immaculate';
    +
    +	public $code_auto=1;
    +
    +	/**
    +	 *	Return default description of numbering model
    +	 *
    +	 *	@return     string      text description
    +	 */
    +	function info()
    +    {
    +    	global $conf, $langs;
    +
    +		$langs->load("bills");
    +
    +		$form = new Form($this->db);
    +
    +		$texte = $langs->trans('GenericNumRefModelDesc')."<br>\n";
    +		$texte.= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
    +		$texte.= '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +		$texte.= '<input type="hidden" name="action" value="updateMask">';
    +		$texte.= '<input type="hidden" name="maskconstcontract" value="HOLIDAY_IMMACULATE_MASK">';
    +		$texte.= '<table class="nobordernopadding" width="100%">';
    +
    +		$tooltip=$langs->trans("GenericMaskCodes",$langs->transnoentities("Holiday"),$langs->transnoentities("Holiday"));
    +		$tooltip.=$langs->trans("GenericMaskCodes2");
    +		$tooltip.=$langs->trans("GenericMaskCodes3");
    +		$tooltip.=$langs->trans("GenericMaskCodes4a",$langs->transnoentities("Holiday"),$langs->transnoentities("Holiday"));
    +		$tooltip.=$langs->trans("GenericMaskCodes5");
    +
    +		$texte.= '<tr><td>'.$langs->trans("Mask").':</td>';
    +		$texte.= '<td align="right">'.$form->textwithpicto('<input type="text" class="flat" size="24" name="maskholiday" value="'.$conf->global->HOLIDAY_IMMACULATE_MASK.'">',$tooltip,1,1).'</td>';
    +		$texte.= '<td align="left" rowspan="2">&nbsp; <input type="submit" class="button" value="'.$langs->trans("Modify").'" name="Button"></td>';
    +		$texte.= '</tr>';
    +		$texte.= '</table>';
    +		$texte.= '</form>';
    +
    +		return $texte;
    +    }
    +
    +	/**
    +	 *	Return numbering example
    +	 *
    +	 *	@return     string      Example
    +	 */
    +    function getExample()
    +    {
    +     	global $conf,$langs,$user;
    +
    +    	$old_login=$user->login;
    +    	$user->login='UUUUUUU';
    +     	$numExample = $this->getNextValue($user, '');
    +		$user->login=$old_login;
    +
    +		if (! $numExample)
    +		{
    +			$numExample = $langs->trans('NotConfigured');
    +		}
    +		return $numExample;
    +    }
    +
    +	/**
    +	 *	Return next value
    +	 *
    +	 *	@param	Societe		$user     	user object
    +	 *	@param	Object		$holiday	holiday object
    +	 *	@return string      			Value if OK, 0 if KO
    +	 */
    +    function getNextValue($user, $holiday)
    +    {
    +		global $db,$conf;
    +
    +		require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php';
    +
    +		$mask=$conf->global->HOLIDAY_IMMACULATE_MASK;
    +
    +		if (! $mask)
    +		{
    +			$this->error='NotConfigured';
    +			return 0;
    +		}
    +
    +		$numFinal=get_next_value($db,$mask,'holiday','ref','', $user, $holiday->date_create);
    +
    +		return  $numFinal;
    +	}
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *  Return next value
    +	 *
    +	 *  @param  User		$fuser     	User object
    +	 *  @param  Object		$objforref	Holiday object
    +	 *  @return string      			Value if OK, 0 if KO
    +	 */
    +    function holiday_get_num($fuser, $objforref)
    +    {
    +        // phpcs:enable
    +        return $this->getNextValue($fuser, $objforref);
    +    }
    +}
    diff --git a/htdocs/core/modules/holiday/mod_holiday_madonna.php b/htdocs/core/modules/holiday/mod_holiday_madonna.php
    new file mode 100644
    index 00000000000..f53e55be6fd
    --- /dev/null
    +++ b/htdocs/core/modules/holiday/mod_holiday_madonna.php
    @@ -0,0 +1,170 @@
    +<?php
    +/* Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
    + * Copyright (C) 2018      Charlene Benke		<charlie@patas-monkey.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
    +
    +/**
    + *  \file       htdocs/core/modules/holiday/mod_holiday_madonna.php
    + *  \ingroup    contract
    + *  \brief      File of class to manage contract numbering rules Serpis
    + */
    +require_once DOL_DOCUMENT_ROOT .'/core/modules/holiday/modules_holiday.php';
    +
    +/**
    + * 	Class to manage contract numbering rules madonna
    + */
    +class mod_holiday_madonna extends ModelNumRefHolidays
    +{
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	public $prefix='HL';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see $name
    +	 */
    +	public $nom='Madonna';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Madonna';
    +
    +	public $code_auto=1;
    +
    +
    +	/**
    +	 *	Return default description of numbering model
    +	 *
    +	 *	@return     string      text description
    +	 */
    +    function info()
    +    {
    +    	global $langs;
    +      	return $langs->trans("SimpleNumRefModelDesc",$this->prefix);
    +    }
    +
    +
    +	/**
    +	 *	Return numbering example
    +	 *
    +	 *	@return     string      Example
    +	 */
    +	function getExample()
    +	{
    +		return $this->prefix."0501-0001";
    +	}
    +
    +
    +	/**
    +	 *	Test if existing numbers make problems with numbering
    +	 *
    +	 *	@return     boolean     false if conflit, true if ok
    +	 */
    +	function canBeActivated()
    +	{
    +		global $conf,$langs,$db;
    +
    +		$coyymm=''; $max='';
    +
    +		$posindice=8;
    +		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."holiday";
    +		$sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
    +		$sql.= " AND entity = ".$conf->entity;
    +
    +		$resql=$db->query($sql);
    +		if ($resql)
    +		{
    +			$row = $db->fetch_row($resql);
    +			if ($row) { $coyymm = substr($row[0],0,6); $max=$row[0]; }
    +		}
    +		if ($coyymm && ! preg_match('/'.$this->prefix.'[0-9][0-9][0-9][0-9]/i',$coyymm))
    +		{
    +			$langs->load("errors");
    +			$this->error=$langs->trans('ErrorNumRefModel', $max);
    +			return false;
    +		}
    +
    +		return true;
    +	}
    +
    +	/**
    +	 *	Return next value
    +	 *
    +	 *	@param	Societe		$objsoc     third party object
    +	 *	@param	Object		$holiday	Holiday object
    +	 *	@return string      			Value if OK, 0 if KO
    +	 */
    +	function getNextValue($objsoc, $holiday)
    +	{
    +		global $db,$conf;
    +
    +		$posindice=8;
    +		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."holiday";
    +		$sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
    +		$sql.= " AND entity = ".$conf->entity;
    +
    +		$resql=$db->query($sql);
    +		if ($resql)
    +		{
    +			$obj = $db->fetch_object($resql);
    +			if ($obj) $max = intval($obj->max);
    +			else $max=0;
    +		}
    +		else
    +		{
    +			dol_syslog("mod_holiday_madonna::getNextValue", LOG_DEBUG);
    +			return -1;
    +		}
    +
    +		$date=$holiday->date_debut;
    +		$yymm = strftime("%y%m",$date);
    +
    +		if ($max >= (pow(10, 4) - 1)) $num=$max+1;	// If counter > 9999, we do not format on 4 chars, we take number as it is
    +		else $num = sprintf("%04s",$max+1);
    +
    +		dol_syslog("mod_holiday_madonna::getNextValue return ".$this->prefix.$yymm."-".$num);
    +		return $this->prefix.$yymm."-".$num;
    +	}
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *	Return next value
    +	 *
    +	 *	@param	User		$fuser     	User object
    +	 *	@param	Object		$objforref	Holiday object
    +	 *	@return string      			Value if OK, 0 if KO
    +	 */
    +	function holiday_get_num($fuser,$objforref)
    +	{
    +        // phpcs:enable
    +		return $this->getNextValue($fuser,$objforref);
    +	}
    +}
    diff --git a/htdocs/core/modules/holiday/modules_holiday.php b/htdocs/core/modules/holiday/modules_holiday.php
    new file mode 100644
    index 00000000000..7f1c48fec10
    --- /dev/null
    +++ b/htdocs/core/modules/holiday/modules_holiday.php
    @@ -0,0 +1,154 @@
    +<?php
    +/* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
    + * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
    + * Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
    + * Copyright (C) 2013      Philippe Grand	    <philippe.grand@atoo-net.com>
    + * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
    + * Copyright (C) 2018      Charlene Benke		<charlie@patas-monkey.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
    +
    +/**
    + *  \file       htdocs/core/modules/holiday/modules_holiday.php
    + *  \ingroup    contract
    + *  \brief      File with parent class for generating holiday to PDF and File of class to manage contract numbering
    + */
    +
    + require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
    +
    +
    +/**
    + *	Parent class to manage holidays document templates
    + */
    +abstract class ModelePDFHoliday extends CommonDocGenerator
    +{
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +	 *	Return list of active generation modules
    +	 *
    +     *  @param  DoliDB  $db     			Database handler
    +     *  @param  integer	$maxfilenamelength  Max length of value to show
    +     *  @return	array						List of templates
    +     */
    +	static function liste_modeles($db, $maxfilenamelength=0)
    +	{
    +        // phpcs:enable
    +		global $conf;
    +
    +		$type = 'holiday';
    +		$list = array();
    +
    +		include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +		$list = getListOfModels($db, $type, $maxfilenamelength);
    +
    +		return $list;
    +	}
    +}
    +
    +
    +/**
    + * Parent class for all holidays numbering modules
    + */
    +class ModelNumRefHolidays
    +{
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 *	Return if a module can be used or not
    +	 *
    +	 * 	@return		boolean     true if module can be used
    +	 */
    +	function isEnabled()
    +	{
    +		return true;
    +	}
    +
    +	/**
    +	 *	Return default description of numbering model
    +	 *
    +	 *	@return     string      text description
    +	 */
    +	function info()
    +	{
    +		global $langs;
    +		$langs->load("holidays");
    +		return $langs->trans("NoDescription");
    +	}
    +
    +	/**
    +	 *	Return numbering example
    +	 *
    +	 *	@return     string      Example
    +	 */
    +	function getExample()
    +	{
    +		global $langs;
    +		$langs->load("holidays");
    +		return $langs->trans("NoExample");
    +	}
    +
    +	/**
    +	 *	Test if existing numbers make problems with numbering
    +	 *
    +	 *	@return		boolean		false if conflict, true if ok
    +	 */
    +	function canBeActivated()
    +	{
    +		return true;
    +	}
    +
    +	/**
    +	 *	Return next value
    +	 *
    +	 *	@param	Societe		$objsoc     third party object
    +	 *	@param	Object		$contract	contract object
    +	 *	@return	string					Value
    +	 */
    +	function getNextValue($objsoc, $contract)
    +	{
    +		global $langs;
    +		return $langs->trans("NotAvailable");
    +	}
    +
    +	/**
    +	 *	Return numbering version module
    +	 *
    +	 *	@return     string      Value
    +	 */
    +	function getVersion()
    +	{
    +		global $langs;
    +		$langs->load("admin");
    +
    +		if ($this->version == 'development') return $langs->trans("VersionDevelopment");
    +		if ($this->version == 'experimental') return $langs->trans("VersionExperimental");
    +		if ($this->version == 'dolibarr') return DOL_VERSION;
    +		if ($this->version) return $this->version;
    +		return $langs->trans("NotAvailable");
    +	}
    +}
    diff --git a/htdocs/core/modules/import/import_csv.modules.php b/htdocs/core/modules/import/import_csv.modules.php
    index a6473eaeb8e..6db495e9f04 100644
    --- a/htdocs/core/modules/import/import_csv.modules.php
    +++ b/htdocs/core/modules/import/import_csv.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2012      Christophe Battarel  <christophe.battarel@altairis.fr>
      * Copyright (C) 2012-2016 Juanjo Menent		<jmenent@2byte.es>
      *
    @@ -33,30 +33,58 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/import/modules_import.php';
      */
     class ImportCsv extends ModeleImports
     {
    -    var $db;
    -    var $datatoimport;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -	var $error='';
    -	var $errors=array();
    +    public $datatoimport;
     
    -    var $id;           // Id of driver
    -	var $label;        // Label of driver
    -	var $extension;    // Extension of files imported by driver
    -	var $version;      // Version of driver
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    -	var $label_lib;    // Label of external lib used by driver
    -	var $version_lib;  // Version of external lib used by driver
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
    -	var $separator;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $file;      // Path of file
    -	var $handle;    // Handle fichier
    +	/**
    +     * @var string label
    +     */
    +    public $label;
     
    -	var $cacheconvert=array();      // Array to cache list of value found after a convertion
    -	var $cachefieldtable=array();   // Array to cache list of value found into fields@tables
    +	public $extension;    // Extension of files imported by driver
     
    -	var $nbinsert = 0; // # of insert done during the import
    -	var $nbupdate = 0; // # of update done during the import
    +	/**
    +     * Dolibarr version of driver
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	public $label_lib;    // Label of external lib used by driver
    +
    +	public $version_lib;  // Version of external lib used by driver
    +
    +	public $separator;
    +
    +	public $file;      // Path of file
    +
    +	public $handle;    // Handle fichier
    +
    +	public $cacheconvert=array();      // Array to cache list of value found after a convertion
    +
    +	public $cachefieldtable=array();   // Array to cache list of value found into fields@tables
    +
    +	public $nbinsert = 0; // # of insert done during the import
    +
    +	public $nbupdate = 0; // # of update done during the import
     
     
     	/**
    @@ -67,7 +95,7 @@ class ImportCsv extends ModeleImports
     	 */
     	function __construct($db,$datatoimport)
     	{
    -		global $conf,$langs;
    +		global $conf, $langs;
     		$this->db = $db;
     
     		$this->separator=(GETPOST('separator')?GETPOST('separator'):(empty($conf->global->IMPORT_CSV_SEPARATOR_TO_USE)?',':$conf->global->IMPORT_CSV_SEPARATOR_TO_USE));
    @@ -90,6 +118,7 @@ class ImportCsv extends ModeleImports
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output header of an example file for this format
     	 *
    @@ -98,9 +127,11 @@ class ImportCsv extends ModeleImports
     	 */
     	function write_header_example($outputlangs)
     	{
    +        // phpcs:enable
     		return '';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output title line of an example file for this format
     	 *
    @@ -110,10 +141,12 @@ class ImportCsv extends ModeleImports
     	 */
     	function write_title_example($outputlangs,$headerlinefields)
     	{
    +        // phpcs:enable
     		$s=join($this->separator,array_map('cleansep',$headerlinefields));
     		return $s."\n";
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output record of an example file for this format
     	 *
    @@ -123,10 +156,12 @@ class ImportCsv extends ModeleImports
     	 */
     	function write_record_example($outputlangs,$contentlinevalues)
     	{
    +        // phpcs:enable
     		$s=join($this->separator,array_map('cleansep',$contentlinevalues));
     		return $s."\n";
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output footer of an example file for this format
     	 *
    @@ -135,11 +170,13 @@ class ImportCsv extends ModeleImports
     	 */
     	function write_footer_example($outputlangs)
     	{
    +        // phpcs:enable
     		return '';
     	}
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Open input file
     	 *
    @@ -148,6 +185,7 @@ class ImportCsv extends ModeleImports
     	 */
     	function import_open_file($file)
     	{
    +        // phpcs:enable
     		global $langs;
     		$ret=1;
     
    @@ -171,6 +209,7 @@ class ImportCsv extends ModeleImports
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Return nb of records. File must be closed.
     	 *
    @@ -179,10 +218,12 @@ class ImportCsv extends ModeleImports
     	 */
     	function import_get_nb_of_lines($file)
     	{
    -	   return dol_count_nb_of_line($file);
    +        // phpcs:enable
    +       return dol_count_nb_of_line($file);
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Input header line from file
     	 *
    @@ -190,10 +231,12 @@ class ImportCsv extends ModeleImports
     	 */
     	function import_read_header()
     	{
    +        // phpcs:enable
     		return 0;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Return array of next record in input file.
     	 *
    @@ -201,6 +244,7 @@ class ImportCsv extends ModeleImports
     	 */
     	function import_read_record()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$arrayres=fgetcsv($this->handle,100000,$this->separator,$this->enclosure,$this->escape);
    @@ -249,6 +293,7 @@ class ImportCsv extends ModeleImports
     		return $newarrayres;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Close file handle
     	 *
    @@ -256,11 +301,13 @@ class ImportCsv extends ModeleImports
     	 */
     	function import_close_file()
     	{
    +        // phpcs:enable
     		fclose($this->handle);
     		return 0;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Insert a record into database
     	 *
    @@ -274,6 +321,7 @@ class ImportCsv extends ModeleImports
     	 */
     	function import_insert($arrayrecord,$array_match_file_to_database,$objimport,$maxfields,$importid,$updatekeys)
     	{
    +        // phpcs:enable
     		global $langs,$conf,$user;
             global $thirdparty_static;    	// Specific to thirdparty import
     		global $tablewithentity_cache;	// Cache to avoid to call  desc at each rows on tables
    @@ -418,7 +466,6 @@ class ImportCsv extends ModeleImports
                                                 }
                                             }
                                         }
    -
                                     }
                                     elseif ($objimport->array_import_convertvalue[0][$val]['rule']=='zeroifnull')
                                     {
    @@ -548,9 +595,13 @@ class ImportCsv extends ModeleImports
     						$listfields[] = $fieldname;
     
     						// Note: arrayrecord (and 'type') is filled with ->import_read_record called by import.php page before calling import_insert
    -						if (empty($newval) && $arrayrecord[($key-1)]['type'] < 0)		 $listvalues[] = ($newval=='0'?$newval:"null");
    -						elseif (empty($newval) && $arrayrecord[($key-1)]['type'] == 0)	 $listvalues[] = "''";
    -						else															 $listvalues[] = "'".$this->db->escape($newval)."'";
    +						if (empty($newval) && $arrayrecord[($key-1)]['type'] < 0) {
    +                            $listvalues[] = ($newval=='0'?$newval:"null");
    +                        } elseif (empty($newval) && $arrayrecord[($key-1)]['type'] == 0) {
    +                            $listvalues[] = "''";
    +                        } else {
    +                            $listvalues[] = "'".$this->db->escape($newval)."'";
    +                        }
     					}
     					$i++;
     				}
    @@ -581,6 +632,7 @@ class ImportCsv extends ModeleImports
     				//print 'listfields='.$listfields.'<br>listvalues='.$listvalues.'<br>';
     
     				// If no error for this $alias/$tablename, we have a complete $listfields and $listvalues that are defined
    +				// so we can try to make the insert or update now.
     				if (! $errorforthistable)
     				{
     					//print "$alias/$tablename/$listfields/$listvalues<br>";
    @@ -592,7 +644,7 @@ class ImportCsv extends ModeleImports
     						if (!empty($updatekeys)) {
     							// We do SELECT to get the rowid, if we already have the rowid, it's to be used below for related tables (extrafields)
     
    -							if (empty($lastinsertid)) {
    +							if (empty($lastinsertid)) {	// No insert done yet for a parent table
     								$sqlSelect = 'SELECT rowid FROM '.$tablename;
     
     								$data = array_combine($listfields, $listvalues);
    @@ -628,10 +680,11 @@ class ImportCsv extends ModeleImports
     									$error++;
     								}
     							} else {
    -								// We have a last INSERT ID. Check if we have a row referencing this foreign key.
    -								// This is required when updating table with some extrafields. When inserting a record in parent table, we can make 
    -								// a direct insert into subtable extrafields, but when me wake an update, the insertid is defined and the child record 
    -								// may already exists. So we rescan the extrafield table to be know if record exists or not for the rowid.
    +								// We have a last INSERT ID (got by previous pass), so we check if we have a row referencing this foreign key.
    +								// This is required when updating table with some extrafields. When inserting a record in parent table, we can make
    +								// a direct insert into subtable extrafields, but when me wake an update, the insertid is defined and the child record
    +								// may already exists. So we rescan the extrafield table to know if record exists or not for the rowid.
    +								// Note: For extrafield tablename, we have in importfieldshidden_array an enty 'extra.fk_object'=>'lastrowid-tableparent' so $keyfield is 'fk_object'
     								$sqlSelect = 'SELECT rowid FROM '.$tablename;
     
     								if(empty($keyfield)) $keyfield = 'rowid';
    @@ -739,7 +792,6 @@ class ImportCsv extends ModeleImports
     
     		return 1;
     	}
    -
     }
     
     /**
    @@ -752,5 +804,3 @@ function cleansep($value)
     {
     	return str_replace(array(',',';'),'/',$value);
     };
    -
    -
    diff --git a/htdocs/core/modules/import/import_xlsx.modules.php b/htdocs/core/modules/import/import_xlsx.modules.php
    index 7f222f523ca..d96dc18104f 100644
    --- a/htdocs/core/modules/import/import_xlsx.modules.php
    +++ b/htdocs/core/modules/import/import_xlsx.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2012      Christophe Battarel  <christophe.battarel@altairis.fr>
      * Copyright (C) 2012-2016 Juanjo Menent		<jmenent@2byte.es>
      *
    @@ -33,31 +33,60 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/import/modules_import.php';
      */
     class ImportXlsx extends ModeleImports
     {
    -    var $db;
    -    var $datatoimport;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -	var $error='';
    -	var $errors=array();
    +    public $datatoimport;
     
    -    var $id;           // Id of driver
    -	var $label;        // Label of driver
    -	var $extension;    // Extension of files imported by driver
    -	var $version;      // Version of driver
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    -	var $label_lib;    // Label of external lib used by driver
    -	var $version_lib;  // Version of external lib used by driver
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
    -	var $separator;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -    var $file;      // Path of file
    -	var $handle;    // Handle fichier
    +	/**
    +     * @var string label
    +     */
    +    public $label;
     
    -	var $cacheconvert=array();      // Array to cache list of value found after a convertion
    -	var $cachefieldtable=array();   // Array to cache list of value found into fields@tables
    +	public $extension;    // Extension of files imported by driver
     
    -	var $workbook; // temporary import file
    -	var $record; // current record
    -	var $headers;
    +	/**
    +     * Dolibarr version of driver
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	public $label_lib;    // Label of external lib used by driver
    +
    +	public $version_lib;  // Version of external lib used by driver
    +
    +	public $separator;
    +
    +    public $file;      // Path of file
    +
    +	public $handle;    // Handle fichier
    +
    +	public $cacheconvert=array();      // Array to cache list of value found after a convertion
    +
    +	public $cachefieldtable=array();   // Array to cache list of value found into fields@tables
    +
    +	public $workbook; // temporary import file
    +
    +	public $record; // current record
    +
    +	public $headers;
     
     
     	/**
    @@ -96,6 +125,7 @@ class ImportXlsx extends ModeleImports
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output header of an example file for this format
     	 *
    @@ -104,29 +134,31 @@ class ImportXlsx extends ModeleImports
     	 */
     	function write_header_example($outputlangs)
     	{
    -	  global $user,$conf,$langs;
    -	  // create a temporary object, the final output will be generated in footer
    -          if (!empty($conf->global->MAIN_USE_FILECACHE_EXPORT_EXCEL_DIR)) {
    +        // phpcs:enable
    +        global $user,$conf,$langs;
    +        // create a temporary object, the final output will be generated in footer
    +        if (!empty($conf->global->MAIN_USE_FILECACHE_EXPORT_EXCEL_DIR)) {
                 $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;
                 $cacheSettings = array (
    -              'dir' => $conf->global->MAIN_USE_FILECACHE_EXPORT_EXCEL_DIR
    -          );
    -          PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
    +                'dir' => $conf->global->MAIN_USE_FILECACHE_EXPORT_EXCEL_DIR
    +            );
    +            PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
             }
     
    -            $this->workbook = new PHPExcel();
    -            $this->workbook->getProperties()->setCreator($user->getFullName($outputlangs).' - Dolibarr '.DOL_VERSION);
    -            $this->workbook->getProperties()->setTitle($outputlangs->trans("Import").' - '.$file);
    -            $this->workbook->getProperties()->setSubject($outputlangs->trans("Import").' - '.$file);
    -            $this->workbook->getProperties()->setDescription($outputlangs->trans("Import").' - '.$file);
    +        $this->workbook = new PHPExcel();
    +        $this->workbook->getProperties()->setCreator($user->getFullName($outputlangs).' - Dolibarr '.DOL_VERSION);
    +        $this->workbook->getProperties()->setTitle($outputlangs->trans("Import").' - '.$file);
    +        $this->workbook->getProperties()->setSubject($outputlangs->trans("Import").' - '.$file);
    +        $this->workbook->getProperties()->setDescription($outputlangs->trans("Import").' - '.$file);
     
    -            $this->workbook->setActiveSheetIndex(0);
    -            $this->workbook->getActiveSheet()->setTitle($outputlangs->trans("Sheet"));
    -            $this->workbook->getActiveSheet()->getDefaultRowDimension()->setRowHeight(16);
    +        $this->workbook->setActiveSheetIndex(0);
    +        $this->workbook->getActiveSheet()->setTitle($outputlangs->trans("Sheet"));
    +        $this->workbook->getActiveSheet()->getDefaultRowDimension()->setRowHeight(16);
     
    -	    return '';
    -	}
    +        return '';
    +    }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output title line of an example file for this format
     	 *
    @@ -136,6 +168,7 @@ class ImportXlsx extends ModeleImports
     	 */
     	function write_title_example($outputlangs,$headerlinefields)
     	{
    +        // phpcs:enable
     		global $conf;
     		$this->workbook->getActiveSheet()->getStyle('1')->getFont()->setBold(true);
     		$this->workbook->getActiveSheet()->getStyle('1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
    @@ -151,6 +184,7 @@ class ImportXlsx extends ModeleImports
     		return ''; // final output will be generated in footer
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output record of an example file for this format
     	 *
    @@ -160,6 +194,7 @@ class ImportXlsx extends ModeleImports
     	 */
     	function write_record_example($outputlangs,$contentlinevalues)
     	{
    +        // phpcs:enable
     		$col = 0;
     		$row = 2;
     		foreach($contentlinevalues as $cell) {
    @@ -170,6 +205,7 @@ class ImportXlsx extends ModeleImports
     		return ''; // final output will be generated in footer
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Output footer of an example file for this format
     	 *
    @@ -178,7 +214,8 @@ class ImportXlsx extends ModeleImports
     	 */
     	function write_footer_example($outputlangs)
     	{
    -		// return te file content as a string
    +        // phpcs:enable
    +		// return the file content as a string
     		$tempfile = tempnam(sys_get_temp_dir(), 'dol');
     		$objWriter = new PHPExcel_Writer_Excel2007($this->workbook);
     		$objWriter->save($tempfile);
    @@ -192,6 +229,7 @@ class ImportXlsx extends ModeleImports
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Open input file
     	 *
    @@ -200,6 +238,7 @@ class ImportXlsx extends ModeleImports
     	 */
     	function import_open_file($file)
     	{
    +        // phpcs:enable
     		global $langs;
     		$ret=1;
     
    @@ -214,6 +253,7 @@ class ImportXlsx extends ModeleImports
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Return nb of records. File must be closed.
     	 *
    @@ -222,6 +262,7 @@ class ImportXlsx extends ModeleImports
     	 */
     	function import_get_nb_of_lines($file)
     	{
    +        // phpcs:enable
     		$reader = new PHPExcel_Reader_Excel2007();
     		$this->workbook = $reader->load($file);
     
    @@ -234,6 +275,7 @@ class ImportXlsx extends ModeleImports
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Input header line from file
     	 *
    @@ -241,6 +283,7 @@ class ImportXlsx extends ModeleImports
     	 */
     	function import_read_header()
     	{
    +        // phpcs:enable
     		// This is not called by the import code !!!
     		$this->headers = array();
     		$colcount = PHPExcel_Cell::columnIndexFromString($this->workbook->getActiveSheet()->getHighestDataColumn());
    @@ -251,6 +294,7 @@ class ImportXlsx extends ModeleImports
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Return array of next record in input file.
     	 *
    @@ -258,6 +302,7 @@ class ImportXlsx extends ModeleImports
     	 */
     	function import_read_record()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$rowcount = $this->workbook->getActiveSheet()->getHighestDataRow();
    @@ -274,6 +319,7 @@ class ImportXlsx extends ModeleImports
     		return $array;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Close file handle
     	 *
    @@ -281,11 +327,14 @@ class ImportXlsx extends ModeleImports
     	 */
     	function import_close_file()
     	{
    +        // phpcs:enable
     		$this->workbook->disconnectWorksheets();
     		unset($this->workbook);
     	}
     
     
    +    // What is this doing here ? it is common to all imports, is should be in the parent class
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Insert a record into database
     	 *
    @@ -297,9 +346,9 @@ class ImportXlsx extends ModeleImports
     	 * @param	array	$updatekeys						Array of keys to use to try to do an update first before insert. This field are defined into the module descriptor.
     	 * @return	int										<0 if KO, >0 if OK
     	 */
    -	// What is this doing here ? it is common to all imports, is should be in the parent class
     	function import_insert($arrayrecord,$array_match_file_to_database,$objimport,$maxfields,$importid,$updatekeys)
     	{
    +        // phpcs:enable
     		global $langs,$conf,$user;
             global $thirdparty_static;    	// Specific to thirdparty import
     		global $tablewithentity_cache;	// Cache to avoid to call  desc at each rows on tables
    @@ -444,7 +493,6 @@ class ImportXlsx extends ModeleImports
                                                 }
                                             }
                                         }
    -
                                     }
                                     elseif ($objimport->array_import_convertvalue[0][$val]['rule']=='zeroifnull')
                                     {
    @@ -607,6 +655,7 @@ class ImportXlsx extends ModeleImports
     				//print 'listfields='.$listfields.'<br>listvalues='.$listvalues.'<br>';
     
     				// If no error for this $alias/$tablename, we have a complete $listfields and $listvalues that are defined
    +				// so we can try to make the insert or update now.
     				if (! $errorforthistable)
     				{
     					//print "$alias/$tablename/$listfields/$listvalues<br>";
    @@ -616,7 +665,8 @@ class ImportXlsx extends ModeleImports
     						$insertdone = false;
     						if (!empty($updatekeys)) {
     							// We do SELECT to get the rowid, if we already have the rowid, it's to be used below for related tables (extrafields)
    -							if (empty($lastinsertid)) {
    +
    +							if (empty($lastinsertid)) {	// No insert done yet for a parent table
     								$sqlSelect = 'SELECT rowid FROM '.$tablename;
     
     								$data = array_combine($listfields, $listvalues);
    @@ -653,9 +703,10 @@ class ImportXlsx extends ModeleImports
     								}
     							} else {
     								// We have a last INSERT ID. Check if we have a row referencing this foreign key.
    -								// This is required when updating table with some extrafields. When inserting a record in parent table, we can make 
    -								// a direct insert into subtable extrafields, but when me wake an update, the insertid is defined and the child record 
    -								// may already exists. So we rescan the extrafield table to be know if record exists or not for the rowid.
    +								// This is required when updating table with some extrafields. When inserting a record in parent table, we can make
    +								// a direct insert into subtable extrafields, but when me wake an update, the insertid is defined and the child record
    +								// may already exists. So we rescan the extrafield table to know if record exists or not for the rowid.
    +								// Note: For extrafield tablename, we have in importfieldshidden_array an enty 'extra.fk_object'=>'lastrowid-tableparent' so $keyfield is 'fk_object'
     								$sqlSelect = 'SELECT rowid FROM '.$tablename;
     
     								if(empty($keyfield)) $keyfield = 'rowid';
    @@ -763,5 +814,4 @@ class ImportXlsx extends ModeleImports
     
     		return 1;
     	}
    -
     }
    diff --git a/htdocs/core/modules/import/modules_import.php b/htdocs/core/modules/import/modules_import.php
    index 548bb128193..4c606b8bacf 100644
    --- a/htdocs/core/modules/import/modules_import.php
    +++ b/htdocs/core/modules/import/modules_import.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,25 +30,49 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
      */
     class ModeleImports
     {
    +    /**
    +     * @var DoliDB Database handler.
    +     */
         public $db;
    +
         public $datatoimport;
     
    -    public $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +    /**
    +	 * @var int id of driver
    +	 */
    +	public $id;
    +
    +    /**
    +     * @var string label
    +     */
    +    public $label;
     
    -    public $id;           // Id of driver
    -	public $label;        // Label of driver
     	public $extension;    // Extension of files imported by driver
    -	public $version;      // Version of driver
    +
    +	/**
    +     * Dolibarr version of driver
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     	public $label_lib;    // Label of external lib used by driver
    +
     	public $version_lib;  // Version of external lib used by driver
     
     	// Array of all drivers
     	public $driverlabel=array();
    +
     	public $driverdesc=array();
    +
     	public $driverversion=array();
     
     	public $liblabel=array();
    +
     	public $libversion=array();
     
     
    @@ -131,15 +155,17 @@ class ModeleImports
     	}
     
     
    -	/**
    -	 *  Charge en memoire et renvoie la liste des modeles actifs
    -	 *
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge en memoire et renvoie la liste des modeles actifs
    +     *
          *  @param	DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
     	 */
     	function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		dol_syslog(get_class($this)."::liste_modeles");
     
     		$dir=DOL_DOCUMENT_ROOT."/core/modules/import/";
    @@ -246,6 +272,4 @@ class ModeleImports
     	{
     		return $this->libversion[$key];
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php
    index 4ad3df1d6ba..77847c9a0a6 100644
    --- a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php
    +++ b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2014 Laurent Destailleur   <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2014 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
      * Copyright (C) 2008      Chiptronik
      * Copyright (C) 2011-2018 Philippe Grand        <philippe.grand@atoo-net.com>
    @@ -35,27 +35,82 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
     
     
     /**
    - *	Classe permettant de generer les bons de livraison au modele Typho
    + *	Class to build Delivery Order documents with typhon model
      */
     class pdf_typhon extends ModelePDFDeliveryOrder
     {
    -    var $db;
    -    var $name;
    -    var $description;
    -    var $type;
    +	/**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
     
    -    var $phpmin = array(4,3,0); // Minimum version of PHP required by module
    -    var $version = 'dolibarr';
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
     
    -    var $page_largeur;
    -    var $page_hauteur;
    -    var $format;
    -	var $marge_gauche;
    -	var	$marge_droite;
    -	var	$marge_haute;
    -	var	$marge_basse;
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
     
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +    /**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
     	/**
     	 *	Constructor
    @@ -65,7 +120,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder
     	function __construct($db)
     	{
     		global $conf,$langs,$mysoc;
    -		
    +
     		// Translations
     		$langs->loadLangs(array("main", "bills", "sendings", "companies"));
     
    @@ -119,7 +174,8 @@ class pdf_typhon extends ModelePDFDeliveryOrder
     	}
     
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Function to build pdf onto disk
          *
          *  @param		Object		$object				Object to generate
    @@ -129,16 +185,17 @@ class pdf_typhon extends ModelePDFDeliveryOrder
          *  @param		int			$hidedesc			Do not show desc
          *  @param		int			$hideref			Do not show ref
          *  @return     int             			1=OK, 0=KO
    -	 */
    +     */
     	function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    -		
    -		// Translations
    +
    +		// Load translation files required by the page
     		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "sendings", "deliveries"));
     
     		if ($conf->expedition->dir_output)
    @@ -574,6 +631,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder
     		return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Show miscellaneous information (payment mode, payment term, ...)
     	 *
    @@ -585,6 +643,7 @@ class pdf_typhon extends ModelePDFDeliveryOrder
     	 */
     	function _tableau_info(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf,$mysoc;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -859,6 +918,4 @@ class pdf_typhon extends ModelePDFDeliveryOrder
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'DELIVERY_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/livraison/mod_livraison_jade.php b/htdocs/core/modules/livraison/mod_livraison_jade.php
    index 228b73aad8b..8df38cbc3a2 100644
    --- a/htdocs/core/modules/livraison/mod_livraison_jade.php
    +++ b/htdocs/core/modules/livraison/mod_livraison_jade.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -34,11 +34,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/livraison/modules_livraison.php';
     
     class mod_livraison_jade extends ModeleNumRefDeliveryOrder
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = "Jade";
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
     
    -    var $prefix='BL';
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Jade';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Jade';
    +
    +    public $prefix='BL';
     
     
     	/**
    @@ -142,16 +161,17 @@ class mod_livraison_jade extends ModeleNumRefDeliveryOrder
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free ref
     	 *
    -     *  @param	Societe		$objsoc      	Object thirdparty
    +     *  @param  Societe		$objsoc      	Object thirdparty
          *  @param  Object		$object			Object livraison
    -     *  @return string      				Texte descripif
    +     *  @return string      				Texte descriptif
          */
         function livraison_get_num($objsoc=0,$object='')
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$object);
         }
    -
     }
    diff --git a/htdocs/core/modules/livraison/mod_livraison_saphir.php b/htdocs/core/modules/livraison/mod_livraison_saphir.php
    index 1192656bf8d..76579f5e757 100644
    --- a/htdocs/core/modules/livraison/mod_livraison_saphir.php
    +++ b/htdocs/core/modules/livraison/mod_livraison_saphir.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,9 +31,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/livraison/modules_livraison.php';
      */
     class mod_livraison_saphir extends ModeleNumRefDeliveryOrder
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Saphir';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Saphir';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Saphir';
     
     
         /**
    @@ -43,7 +62,7 @@ class mod_livraison_saphir extends ModeleNumRefDeliveryOrder
          */
     	function info()
     	{
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    @@ -139,17 +158,17 @@ class mod_livraison_saphir extends ModeleNumRefDeliveryOrder
         }
     
     
    -	/**
    -	 *  Return next free ref
    -	 *
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return next free ref
    +     *
          *  @param	Societe		$objsoc      	Object thirdparty
          *  @param  Object		$object			Objet livraison
          *  @return string      				Texte descripif
          */
         function livraison_get_num($objsoc=0,$object='')
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$object);
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/livraison/modules_livraison.php b/htdocs/core/modules/livraison/modules_livraison.php
    index a433f42930d..6dad7003ec5 100644
    --- a/htdocs/core/modules/livraison/modules_livraison.php
    +++ b/htdocs/core/modules/livraison/modules_livraison.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2006-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012 Philippe Grand	    <philippe.grand@atoo-net.com>
      * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
      *
    @@ -36,8 +36,12 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModelePDFDeliveryOrder extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation modules
     	 *
    @@ -47,6 +51,7 @@ abstract class ModelePDFDeliveryOrder extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='delivery';
    @@ -67,7 +72,10 @@ abstract class ModelePDFDeliveryOrder extends CommonDocGenerator
      */
     abstract class ModeleNumRefDeliveryOrder
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 * Return if a module can be used or not
    diff --git a/htdocs/core/modules/mailings/advthirdparties.modules.php b/htdocs/core/modules/mailings/advthirdparties.modules.php
    index 78aab1a5bd7..bfd7f4b0d45 100644
    --- a/htdocs/core/modules/mailings/advthirdparties.modules.php
    +++ b/htdocs/core/modules/mailings/advthirdparties.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin       <regis.houssin@inodbox.com>
     *
     * This file is an example to follow to add your own email selector inside
     * the Dolibarr email tool.
    @@ -32,7 +32,11 @@ class mailing_advthirdparties extends MailingTargets
     
     	var $require_module=array("none");	// This module should not be displayed as Selector in mailling
     	var $picto='company';
    -	var $db;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     
     	/**
    @@ -42,12 +46,11 @@ class mailing_advthirdparties extends MailingTargets
     	 */
     	function __construct($db)
     	{
    -		global $conf;
    -
     		$this->db=$db;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    This is the main function that returns the array of emails
     	 *
    @@ -59,6 +62,7 @@ class mailing_advthirdparties extends MailingTargets
     	 */
     	function add_to_target_spec($mailing_id,$socid,$type_of_target, $contactid)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		dol_syslog(get_class($this)."::add_to_target socid=".var_export($socid,true).' contactid='.var_export($contactid,true));
    @@ -273,7 +277,6 @@ class mailing_advthirdparties extends MailingTargets
     
     		$s.='</select>';
     		return $s;
    -
     	}
     
     
    @@ -296,5 +299,4 @@ class mailing_advthirdparties extends MailingTargets
     			return $contactstatic->getNomUrl(0, '', 0, '', -1, 1);
     		}
     	}
    -
     }
    diff --git a/htdocs/core/modules/mailings/contacts1.modules.php b/htdocs/core/modules/mailings/contacts1.modules.php
    index 90d81dca4a5..7a4d53172f4 100644
    --- a/htdocs/core/modules/mailings/contacts1.modules.php
    +++ b/htdocs/core/modules/mailings/contacts1.modules.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -39,7 +39,10 @@ class mailing_contacts1 extends MailingTargets
     	var $require_admin=0;                               // Module mailing actif pour user admin ou non
     	var $picto='contact';
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     
     	/**
    @@ -113,10 +116,9 @@ class mailing_contacts1 extends MailingTargets
     	function formFilter()
     	{
     		global $langs;
    -		$langs->load("companies");
    -		$langs->load("commercial");
    -		$langs->load("suppliers");
    -		$langs->load("categories");
    +
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("commercial","companies","suppliers","categories"));
     
     		$s='';
     
    @@ -324,15 +326,17 @@ class mailing_contacts1 extends MailingTargets
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Ajoute destinataires dans table des cibles
     	 *
    -	 *  @param	int		$mailing_id    	Id of emailing
    +	 *  @param  int		$mailing_id    	Id of emailing
     	 *  @param  array	$filtersarray   Optional filter data (deprecated)
     	 *  @return int           			<0 si erreur, nb ajout si ok
     	 */
     	function add_to_target($mailing_id,$filtersarray=array())
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		$filter = GETPOST('filter','alpha');
    @@ -446,6 +450,4 @@ class mailing_contacts1 extends MailingTargets
     
     		return parent::add_to_target($mailing_id, $cibles);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/mailings/example.modules.php b/htdocs/core/modules/mailings/example.modules.php
    index 548510f81a0..0af52dc5bd2 100644
    --- a/htdocs/core/modules/mailings/example.modules.php
    +++ b/htdocs/core/modules/mailings/example.modules.php
    @@ -32,12 +32,16 @@ class mailing_example extends MailingTargets
         var $desc='Put here a description';
     	// CHANGE THIS: Set to 1 if selector is available for admin users only
         var $require_admin=0;
    -    // CHANGE THIS: Add a tooltip language key to add a tooltip help icon after the email target selector 
    +    // CHANGE THIS: Add a tooltip language key to add a tooltip help icon after the email target selector
         var $tooltip='MyTooltipLangKey';
    -    
    +
         var $require_module=array();
         var $picto='';
    -    var $db;
    +
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     
         // CHANGE THIS: Constructor name must be called mailing_xxx with xxx=name of your selector
    @@ -52,6 +56,7 @@ class mailing_example extends MailingTargets
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  This is the main function that returns the array of emails
          *
    @@ -61,6 +66,7 @@ class mailing_example extends MailingTargets
          */
         function add_to_target($mailing_id,$filtersarray=array())
         {
    +        // phpcs:enable
             $target = array();
     
     	    // CHANGE THIS
    @@ -107,7 +113,7 @@ class mailing_example extends MailingTargets
          */
         function getNbOfRecipients($sql='')
         {
    -	    // CHANGE THIS: Optionnal
    +        // CHANGE THIS: Optionnal
     
             // Example: return parent::getNbOfRecipients("SELECT count(*) as nb from dolibarr_table");
             // Example: return 500;
    @@ -122,7 +128,7 @@ class mailing_example extends MailingTargets
          */
         function formFilter()
         {
    -	    // CHANGE THIS: Optionnal
    +        // CHANGE THIS: Optionnal
     
             $s='';
             return $s;
    @@ -138,10 +144,8 @@ class mailing_example extends MailingTargets
          */
         function url($id)
         {
    -	    // CHANGE THIS: Optionnal
    +        // CHANGE THIS: Optionnal
     
             return '';
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/mailings/fraise.modules.php b/htdocs/core/modules/mailings/fraise.modules.php
    index f71b6b925f0..43798799acd 100644
    --- a/htdocs/core/modules/mailings/fraise.modules.php
    +++ b/htdocs/core/modules/mailings/fraise.modules.php
    @@ -1,6 +1,7 @@
     <?php
    -/* Copyright (C) 2005      Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005       Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2009  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -41,7 +42,10 @@ class mailing_fraise extends MailingTargets
         var $require_module=array('adherent');
         var $picto='user';
     
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
         /**
          *    Constructor
    @@ -50,7 +54,7 @@ class mailing_fraise extends MailingTargets
          */
         function __construct($db)
         {
    -        $this->db=$db;
    +        $this->db = $db;
         }
     
     
    @@ -106,9 +110,9 @@ class mailing_fraise extends MailingTargets
         function formFilter()
         {
             global $conf, $langs;
    -        $langs->load("members");
    -		$langs->load("categories");
    -		$langs->load("companies");
    +
    +        // Load translation files required by the page
    +        $langs->loadLangs(array("members","companies","categories"));
     
             $form=new Form($this->db);
     
    @@ -196,9 +200,9 @@ class mailing_fraise extends MailingTargets
     
             $s.='<br>';
             $s.=$langs->trans("DateEndSubscription").': &nbsp;';
    -        $s.=$langs->trans("After").' > '.$form->select_date(-1,'subscriptionafter',0,0,1,'fraise',1,0,1,0);
    +        $s.=$langs->trans("After").' > '.$form->selectDate(-1,'subscriptionafter',0,0,1,'fraise',1,0,0);
             $s.=' &nbsp; ';
    -        $s.=$langs->trans("Before").' < '.$form->select_date(-1,'subscriptionbefore',0,0,1,'fraise',1,0,1,0);
    +        $s.=$langs->trans("Before").' < '.$form->selectDate(-1,'subscriptionbefore',0,0,1,'fraise',1,0,0);
     
             return $s;
         }
    @@ -216,6 +220,7 @@ class mailing_fraise extends MailingTargets
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Ajoute destinataires dans table des cibles
          *
    @@ -225,14 +230,16 @@ class mailing_fraise extends MailingTargets
          */
         function add_to_target($mailing_id,$filtersarray=array())
         {
    +        // phpcs:enable
     	    // Deprecation warning
     	    if ($filtersarray) {
     		    dol_syslog(__METHOD__ . ": filtersarray parameter is deprecated", LOG_WARNING);
     	    }
     
         	global $langs,$_POST;
    -		$langs->load("members");
    -        $langs->load("companies");
    +
    +    	// Load translation files required by the page
    +        $langs->loadLangs(array("members","companies"));
     
             $cibles = array();
             $now=dol_now();
    @@ -265,8 +272,8 @@ class mailing_fraise extends MailingTargets
             // Filter on type
             if ($_POST['filter_type']) $sql.= " AND ta.rowid='".$_POST['filter_type']."'";
             // Filter on category
    -		if ($_POST['filter_category']) $sql.= " AND c.rowid='".$_POST['filter_category']."'";
    -		$sql.= " ORDER BY a.email";
    +        if ($_POST['filter_category']) $sql.= " AND c.rowid='".$_POST['filter_category']."'";
    +        $sql.= " ORDER BY a.email";
             //print $sql;
     
             // Add targets into table
    @@ -316,5 +323,4 @@ class mailing_fraise extends MailingTargets
     
             return parent::add_to_target($mailing_id, $cibles);
         }
    -
     }
    diff --git a/htdocs/core/modules/mailings/modules_mailings.php b/htdocs/core/modules/mailings/modules_mailings.php
    index 1a97f3502b7..f7136d4aa63 100644
    --- a/htdocs/core/modules/mailings/modules_mailings.php
    +++ b/htdocs/core/modules/mailings/modules_mailings.php
    @@ -29,12 +29,20 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
     /**
      *		Parent class of emailing target selectors modules
      */
    -class MailingTargets    // This can't be abstract as it is used for some method
    +class MailingTargets // This can't be abstract as it is used for some method
     {
    -    var $db;
    -    var $error;
    -    var $tooltip='';
    -    
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +    public $tooltip='';
    +
     
         /**
     	 *	Constructor
    @@ -54,7 +62,7 @@ class MailingTargets    // This can't be abstract as it is used for some method
         function getDesc()
         {
             global $langs, $form;
    -        
    +
             $langs->load("mails");
             $transstring="MailingModuleDesc".$this->name;
             $s='';
    @@ -109,6 +117,7 @@ class MailingTargets    // This can't be abstract as it is used for some method
             return '';
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Met a jour nombre de destinataires
          *
    @@ -117,6 +126,7 @@ class MailingTargets    // This can't be abstract as it is used for some method
          */
         function update_nb($mailing_id)
         {
    +        // phpcs:enable
             // Mise a jour nombre de destinataire dans table des mailings
             $sql = "SELECT COUNT(*) nb FROM ".MAIN_DB_PREFIX."mailing_cibles";
             $sql .= " WHERE fk_mailing = ".$mailing_id;
    @@ -141,6 +151,7 @@ class MailingTargets    // This can't be abstract as it is used for some method
             return $nb;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Ajoute destinataires dans table des cibles
          *
    @@ -150,6 +161,7 @@ class MailingTargets    // This can't be abstract as it is used for some method
          */
         function add_to_target($mailing_id, $cibles)
         {
    +        // phpcs:enable
         	global $conf;
     
         	$this->db->begin();
    @@ -224,14 +236,16 @@ class MailingTargets    // This can't be abstract as it is used for some method
             return $j;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Supprime tous les destinataires de la table des cibles
          *
    -     *	@param	int		$mailing_id        Id of emailing
    +     *	@param  int		$mailing_id        Id of emailing
          *	@return	void
          */
         function clear_target($mailing_id)
         {
    +        // phpcs:enable
             $sql = "DELETE FROM ".MAIN_DB_PREFIX."mailing_cibles";
             $sql .= " WHERE fk_mailing = ".$mailing_id;
     
    @@ -242,6 +256,4 @@ class MailingTargets    // This can't be abstract as it is used for some method
     
             $this->update_nb($mailing_id);
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/mailings/pomme.modules.php b/htdocs/core/modules/mailings/pomme.modules.php
    index 5824f456365..b2477c1fd55 100644
    --- a/htdocs/core/modules/mailings/pomme.modules.php
    +++ b/htdocs/core/modules/mailings/pomme.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2011 Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin       <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -37,7 +37,10 @@ class mailing_pomme extends MailingTargets
     	var $require_admin=1;                           // Module mailing actif pour user admin ou non
     	var $picto='user';
     
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     
     	/**
    @@ -118,7 +121,7 @@ class mailing_pomme extends MailingTargets
     		$s.='<option value="1">'.$langs->trans("Enabled").'</option>';
     		$s.='<option value="0">'.$langs->trans("Disabled").'</option>';
     		$s.='</select>';
    -		
    +
     		$s.=' ';
     		$s.=$langs->trans("Employee").': ';
     		$s.='<select name="filteremployee" class="flat">';
    @@ -126,7 +129,7 @@ class mailing_pomme extends MailingTargets
     		$s.='<option value="1">'.$langs->trans("Yes").'</option>';
     		$s.='<option value="0">'.$langs->trans("No").'</option>';
     		$s.='</select>';
    -		
    +
     		return $s;
     	}
     
    @@ -143,6 +146,7 @@ class mailing_pomme extends MailingTargets
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Ajoute destinataires dans table des cibles
     	 *
    @@ -150,13 +154,14 @@ class mailing_pomme extends MailingTargets
     	 *  @param  array	$filtersarray   Requete sql de selection des destinataires
     	 *  @return int           			< 0 si erreur, nb ajout si ok
     	 */
    -	function add_to_target($mailing_id,$filtersarray=array())
    +	function add_to_target($mailing_id, $filtersarray=array())
     	{
    +        // phpcs:enable
     		// Deprecation warning
     	    if ($filtersarray) {
     		    dol_syslog(__METHOD__ . ": filtersarray parameter is deprecated", LOG_WARNING);
     	    }
    -	    
    +
     	    global $conf, $langs;
     		$langs->load("companies");
     
    @@ -169,10 +174,10 @@ class mailing_pomme extends MailingTargets
     		$sql.= " WHERE u.email <> ''"; // u.email IS NOT NULL est implicite dans ce test
     		$sql.= " AND u.entity IN (0,".$conf->entity.")";
     		$sql.= " AND u.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".$mailing_id.")";
    -		if (isset($_POST["filter"]) && $_POST["filter"] == '1') $sql.= " AND u.statut=1"; 
    -		if (isset($_POST["filter"]) && $_POST["filter"] == '0') $sql.= " AND u.statut=0"; 
    -		if (isset($_POST["filteremployee"]) && $_POST["filteremployee"] == '1') $sql.= " AND u.employee=1"; 
    -		if (isset($_POST["filteremployee"]) && $_POST["filteremployee"] == '0') $sql.= " AND u.employee=0"; 
    +		if (isset($_POST["filter"]) && $_POST["filter"] == '1') $sql.= " AND u.statut=1";
    +		if (isset($_POST["filter"]) && $_POST["filter"] == '0') $sql.= " AND u.statut=0";
    +		if (isset($_POST["filteremployee"]) && $_POST["filteremployee"] == '1') $sql.= " AND u.employee=1";
    +		if (isset($_POST["filteremployee"]) && $_POST["filteremployee"] == '0') $sql.= " AND u.employee=0";
     		$sql.= " ORDER BY u.email";
     
     		// Stocke destinataires dans cibles
    @@ -220,6 +225,4 @@ class mailing_pomme extends MailingTargets
     
     		return parent::add_to_target($mailing_id, $cibles);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/mailings/thirdparties.modules.php b/htdocs/core/modules/mailings/thirdparties.modules.php
    index 57a69475000..49205cf6f80 100644
    --- a/htdocs/core/modules/mailings/thirdparties.modules.php
    +++ b/htdocs/core/modules/mailings/thirdparties.modules.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2018-2018 Andre Schild        <a.schild@aarboard.ch>
      * Copyright (C) 2005-2010 Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin       <regis.houssin@inodbox.com>
      *
      * This file is an example to follow to add your own email selector inside
      * the Dolibarr email tool.
    @@ -31,7 +31,11 @@ class mailing_thirdparties extends MailingTargets
     
     	var $require_module=array("societe");	// This module allows to select by categories must be also enabled if category module is not activated
     	var $picto='company';
    -	var $db;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     
     	/**
    @@ -48,6 +52,7 @@ class mailing_thirdparties extends MailingTargets
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    This is the main function that returns the array of emails
     	 *
    @@ -55,8 +60,9 @@ class mailing_thirdparties extends MailingTargets
     	 *    @param	array	$filtersarray   If you used the formFilter function. Empty otherwise.
     	 *    @return   int 					<0 if error, number of emails added if ok
     	 */
    -	function add_to_target($mailing_id,$filtersarray=array())
    +	function add_to_target($mailing_id, $filtersarray=array())
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		$cibles = array();
    @@ -91,53 +97,53 @@ class mailing_thirdparties extends MailingTargets
     		    $sql.= " AND c.rowid='".$this->db->escape($_POST['filter'])."'";
     		}
     
    -                $addDescription= "";
    -                if (isset($_POST["filter_client"]) && $_POST["filter_client"] <> '-1')
    -                {
    -                    $sql.= " AND s.client=" . $_POST["filter_client"];
    -                    $addDescription= $langs->trans('ProspectCustomer')."=";
    -                    if ($_POST["filter_client"] == 0)
    -                    {
    -                        $addDescription.= $langs->trans('NorProspectNorCustomer');
    -                    }
    -                    else if ($_POST["filter_client"] == 1)
    -                    {
    -                        $addDescription.= $langs->trans('Customer');
    -                    }
    -                    else if ($_POST["filter_client"] == 2)
    -                    {
    -                        $addDescription.= $langs->trans('Prospect');
    -                    }
    -                    else if ($_POST["filter_client"] == 3)
    -                    {
    -                        $addDescription.= $langs->trans('ProspectCustomer');
    -                    }
    -                    else
    -                    {
    -                        $addDescription.= "Unknown status ".$_POST["filter_client"];
    -                    }
    -                }
    -                if (isset($_POST["filter_status"]))
    -                {
    -                    if (strlen($addDescription) > 0)
    -                    {
    -                        $addDescription.= ";";
    -                    }
    -                    $addDescription.= $langs->trans("Status")."=";
    -                    if ($_POST["filter_status"] == '1')
    -                    {
    -                        $sql.= " AND s.status=1";
    -                        $addDescription.= $langs->trans("Enabled");
    -                    }
    -                    else
    -                    {
    -                        $sql.= " AND s.status=0";
    -                        $addDescription.= $langs->trans("Disabled");
    -                    }
    -                }
    -		$sql.= " ORDER BY email";
    +        $addDescription= "";
    +        if (isset($_POST["filter_client"]) && $_POST["filter_client"] <> '-1')
    +        {
    +            $sql.= " AND s.client=" . $_POST["filter_client"];
    +            $addDescription= $langs->trans('ProspectCustomer')."=";
    +            if ($_POST["filter_client"] == 0)
    +            {
    +                $addDescription.= $langs->trans('NorProspectNorCustomer');
    +            }
    +            elseif ($_POST["filter_client"] == 1)
    +            {
    +                $addDescription.= $langs->trans('Customer');
    +            }
    +            elseif ($_POST["filter_client"] == 2)
    +            {
    +                $addDescription.= $langs->trans('Prospect');
    +            }
    +            elseif ($_POST["filter_client"] == 3)
    +            {
    +                $addDescription.= $langs->trans('ProspectCustomer');
    +            }
    +            else
    +            {
    +                $addDescription.= "Unknown status ".$_POST["filter_client"];
    +            }
    +        }
    +        if (isset($_POST["filter_status"]))
    +        {
    +            if (strlen($addDescription) > 0)
    +            {
    +                $addDescription.= ";";
    +            }
    +            $addDescription.= $langs->trans("Status")."=";
    +            if ($_POST["filter_status"] == '1')
    +            {
    +                $sql.= " AND s.status=1";
    +                $addDescription.= $langs->trans("Enabled");
    +            }
    +            else
    +            {
    +                $sql.= " AND s.status=0";
    +                $addDescription.= $langs->trans("Disabled");
    +            }
    +        }
    +        $sql.= " ORDER BY email";
     
    -		// Stock recipients emails into targets table
    +        // Stock recipients emails into targets table
     		$result=$this->db->query($sql);
     		if ($result)
     		{
    @@ -305,11 +311,10 @@ class mailing_thirdparties extends MailingTargets
                     $s.='<option value="0">'.$langs->trans("Disabled").'</option>';
     		$s.='</select>';
     		return $s;
    -
     	}
     
     
    -	/**
    +    /**
     	 *  Can include an URL link on each record provided by selector shown on target page.
     	 *
          *  @param	int		$id		ID
    @@ -319,6 +324,4 @@ class mailing_thirdparties extends MailingTargets
     	{
     		return '<a href="'.DOL_URL_ROOT.'/societe/card.php?socid='.$id.'">'.img_object('',"company").'</a>';
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php
    index 08473f3cb6d..91bd5127c1f 100644
    --- a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php
    +++ b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php
    @@ -29,7 +29,12 @@ class mailing_thirdparties_services_expired extends MailingTargets
     
         var $require_module=array('contrat');
         var $picto='company';
    -    var $db;
    +
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
         var $arrayofproducts=array();
     
     
    @@ -64,7 +69,6 @@ class mailing_thirdparties_services_expired extends MailingTargets
                     $i++;
                     $this->arrayofproducts[$i]=$obj->ref;
                 }
    -
             }
             else
             {
    @@ -73,6 +77,7 @@ class mailing_thirdparties_services_expired extends MailingTargets
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  This is the main function that returns the array of emails
          *
    @@ -82,6 +87,7 @@ class mailing_thirdparties_services_expired extends MailingTargets
          */
         function add_to_target($mailing_id,$filtersarray=array())
         {
    +        // phpcs:enable
             $target = array();
     
             // ----- Your code start here -----
    @@ -236,6 +242,4 @@ class mailing_thirdparties_services_expired extends MailingTargets
         {
             return '<a href="'.DOL_URL_ROOT.'/societe/card.php?socid='.$id.'">'.img_object('',"company").'</a>';
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/mailings/xinputfile.modules.php b/htdocs/core/modules/mailings/xinputfile.modules.php
    index 152322c2899..7de27a0c753 100644
    --- a/htdocs/core/modules/mailings/xinputfile.modules.php
    +++ b/htdocs/core/modules/mailings/xinputfile.modules.php
    @@ -110,6 +110,7 @@ class mailing_xinputfile extends MailingTargets
     		return $s;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Ajoute destinataires dans table des cibles
     	 *
    @@ -119,6 +120,7 @@ class mailing_xinputfile extends MailingTargets
     	 */
     	function add_to_target($mailing_id,$filtersarray=array())
     	{
    +        // phpcs:enable
     		global $conf,$langs,$_FILES;
     
     		require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    @@ -220,6 +222,4 @@ class mailing_xinputfile extends MailingTargets
     
     		return parent::add_to_target($mailing_id, $cibles);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/mailings/xinputuser.modules.php b/htdocs/core/modules/mailings/xinputuser.modules.php
    index 794de3d9294..2364eeb08ef 100644
    --- a/htdocs/core/modules/mailings/xinputuser.modules.php
    +++ b/htdocs/core/modules/mailings/xinputuser.modules.php
    @@ -37,7 +37,7 @@ class mailing_xinputuser extends MailingTargets
     	var $require_admin=0;                    // Module mailing actif pour user admin ou non
     	var $picto='generic';
     	var $tooltip='UseFormatInputEmailToTarget';
    -	
    +
     
     	/**
     	 *	Constructor
    @@ -108,6 +108,7 @@ class mailing_xinputuser extends MailingTargets
     		return $s;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Ajoute destinataires dans table des cibles
     	 *
    @@ -117,6 +118,7 @@ class mailing_xinputuser extends MailingTargets
     	 */
     	function add_to_target($mailing_id,$filtersarray=array())
     	{
    +        // phpcs:enable
     		global $conf,$langs,$_FILES;
     
     		require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    @@ -153,12 +155,9 @@ class mailing_xinputuser extends MailingTargets
     		}
     		else
     		{
    -		   	$langs->load("errors");
    -		   	$this->error = $langs->trans("ErrorBadEmail",$email);
    +            $langs->load("errors");
    +            $this->error = $langs->trans("ErrorBadEmail",$email);
     			return -1;
     		}
    -
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/member/doc/pdf_standard.class.php b/htdocs/core/modules/member/doc/pdf_standard.class.php
    index 4d08be83a43..524d1446427 100644
    --- a/htdocs/core/modules/member/doc/pdf_standard.class.php
    +++ b/htdocs/core/modules/member/doc/pdf_standard.class.php
    @@ -42,10 +42,12 @@ class pdf_standard extends CommonStickerGenerator
     	 * @param	array		$param			Associative array containing label content and optional parameters
     	 * @return	void
     	 */
    -	function addSticker(&$pdf,$outputlangs,$param) {
    +    function addSticker(&$pdf,$outputlangs,$param)
    +    {
     		// use this method in future refactoring
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0)
     	 * - __LOGO__ is replace with company logo
    @@ -63,6 +65,7 @@ class pdf_standard extends CommonStickerGenerator
     	 */
     	function Add_PDF_card(&$pdf,$textleft,$header,$footer,$outputlangs,$textright='',$idmember=0,$photo='')
     	{
    +        // phpcs:enable
     		global $db,$mysoc,$conf,$langs;
     		global $forceimgscalewidth,$forceimgscaleheight;
     
    @@ -234,6 +237,7 @@ class pdf_standard extends CommonStickerGenerator
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build PDF on disk, then output on HTTP stream.
     	 *
    @@ -246,6 +250,7 @@ class pdf_standard extends CommonStickerGenerator
     	 */
     	function write_file($object, $outputlangs, $srctemplatepath, $mode='member', $nooutput=0)
     	{
    +        // phpcs:enable
     		global $user,$conf,$langs,$mysoc,$_Avery_Labels;
     
     		$this->code=$srctemplatepath;
    @@ -324,11 +329,8 @@ class pdf_standard extends CommonStickerGenerator
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("admin");
    -		$outputlangs->load("members");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "admin", "members"));
     
     		if (empty($mode) || $mode == 'member')
     		{
    @@ -443,5 +445,4 @@ class pdf_standard extends CommonStickerGenerator
     
     		return 1;
     	}
    -
     }
    diff --git a/htdocs/core/modules/member/modules_cards.php b/htdocs/core/modules/member/modules_cards.php
    index f7ef8b94590..4f498d92158 100644
    --- a/htdocs/core/modules/member/modules_cards.php
    +++ b/htdocs/core/modules/member/modules_cards.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2004	   Eric Seigne			<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2009 Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -34,9 +34,13 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
      */
     class ModelePDFCards
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of active generation modules
     	 *
    @@ -46,6 +50,7 @@ class ModelePDFCards
     	 */
     	function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='member';
    @@ -59,6 +64,7 @@ class ModelePDFCards
     }
     
     
    +// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     /**
      *	Cree un fichier de cartes de visites en fonction du modele de ADHERENT_CARDS_ADDON_PDF
      *
    @@ -72,20 +78,21 @@ class ModelePDFCards
      */
     function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs, $outputdir='', $template='standard')
     {
    +    // phpcs:enable
     	global $conf,$langs;
     	$langs->load("members");
     
     	$error=0;
    -	
    +
     	// Increase limit for PDF build
     	$err=error_reporting();
     	error_reporting(0);
     	@set_time_limit(120);
     	error_reporting($err);
    -	
    +
     	$code='';
     	$srctemplatepath='';
    -	
    +
     	// Positionne le modele sur le nom du modele a utiliser
     	if (! dol_strlen($modele))
     	{
    @@ -108,7 +115,7 @@ function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs, $o
     		$srctemplatepath=$tmp[1];
     	}
     	else $srctemplatepath=$code;
    -	
    +
     	// Search template files
     	$file=''; $classname=''; $filefound=0;
     	$dirmodels=array('/');
    @@ -118,7 +125,7 @@ function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs, $o
     		foreach(array('doc','pdf') as $prefix)
     		{
     			$file = $prefix."_".$template.".class.php";
    -			
    +
     			// On verifie l'emplacement du modele
     			$file=dol_buildpath($reldir."core/modules/member/doc/".$file,0);
     			if (file_exists($file))
    @@ -130,8 +137,8 @@ function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs, $o
     		}
     		if ($filefound) break;
     	}
    -	
    -	
    +
    +
     	// Charge le modele
     	if ($filefound)
     	{
    @@ -160,7 +167,4 @@ function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs, $o
     		dol_print_error('',$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$file));
     		return -1;
     	}
    -
    -
     }
    -
    diff --git a/htdocs/core/modules/modAccounting.class.php b/htdocs/core/modules/modAccounting.class.php
    index 42cd67b9dab..20b9bf54edd 100644
    --- a/htdocs/core/modules/modAccounting.class.php
    +++ b/htdocs/core/modules/modAccounting.class.php
    @@ -45,7 +45,7 @@ class modAccounting extends DolibarrModules
     		$this->numero = 50400;
     
     		$this->family = "financial";
    -		$this->module_position = 610;
    +		$this->module_position = '61';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i', '', get_class($this));
     		$this->description = "Advanced accounting management";
    @@ -66,7 +66,7 @@ class modAccounting extends DolibarrModules
     		$this->depends = array("modFacture","modBanque","modTax"); // List of modules id that must be enabled if this module is enabled
     		$this->requiredby = array(); // List of modules id to disable if this one is disabled
     		$this->conflictwith = array("modComptabilite"); // List of modules are in conflict with this module
    -		$this->phpmin = array(5, 3); // Minimum version of PHP required by module
    +		$this->phpmin = array(5, 4); // Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(3, 9); // Minimum version of Dolibarr required by module
     		$this->langfiles = array("accountancy","compta");
     
    @@ -287,6 +287,5 @@ class modAccounting extends DolibarrModules
     			'aa.account_parent'=>array('rule'=>'zeroifnull'),
     		);
     		$this->import_examplevalues_array[$r]=array('aa.fk_pcg_version'=>"PCG99-ABREGE",'aa.account_number'=>"707",'aa.label'=>"Product sales",'aa.account_parent'=>"1407","aa.fk_accounting_category"=>"","aa.pcg_type"=>"PROD",'aa.pcg_subtype'=>'PRODUCT','aa.active'=>'1','aa.datec'=>"2017-04-28");
    -
     	}
     }
    diff --git a/htdocs/core/modules/modAdherent.class.php b/htdocs/core/modules/modAdherent.class.php
    index f5f63324063..9f09c01bfc7 100644
    --- a/htdocs/core/modules/modAdherent.class.php
    +++ b/htdocs/core/modules/modAdherent.class.php
    @@ -49,7 +49,7 @@ class modAdherent extends DolibarrModules
             $this->numero = 310;
     
             $this->family = "hr";
    -        $this->module_position = 20;
    +        $this->module_position = '20';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
             $this->description = "Management of members of a foundation or association";
    @@ -62,17 +62,17 @@ class modAdherent extends DolibarrModules
             $this->dirs = array("/adherent/temp");
     
             // Config pages
    -        //-------------
             $this->config_page_url = array("adherent.php@adherents");
     
             // Dependencies
    -        //------------
    -        $this->depends = array();
    -        $this->requiredby = array('modMailmanSpip');
    +        $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array('modMailmanSpip');	// List of module class names as string this module is in conflict with
             $this->langfiles = array("members","companies");
    +        $this->phpmin = array(5,4);		// Minimum version of PHP required by module
     
             // Constants
    -        //-----------
             $this->const = array();
             $r=0;
     
    @@ -347,22 +347,24 @@ class modAdherent extends DolibarrModules
     		);
     
             // Cronjobs
    +        $arraydate=dol_getdate(dol_now());
    +        $datestart=dol_mktime(22, 0, 0, $arraydate['mon'], $arraydate['mday'], $arraydate['year']);
             $this->cronjobs = array(
     			0=>array(
     				'label'=>'SendReminderForExpiredSubscriptionTitle',
     				'jobtype'=>'method', 'class'=>'adherents/class/adherent.class.php',
     				'objectname'=>'Adherent',
     				'method'=>'sendReminderForExpiredSubscription',
    -				'parameters'=>'10',
    +				'parameters'=>'10;0',
     				'comment'=>'SendReminderForExpiredSubscription',
     				'frequency'=>1,
     				'unitfrequency'=> 3600 * 24,
     				'priority'=>50,
    -				'status'=>0,
    -				'test'=>true,
    +				'status'=>1,
    +				'test'=>'$conf->adherent->enabled',
    +				'datestart'=>$datestart
     			),
             );
    -
         }
     
     
    diff --git a/htdocs/core/modules/modAgenda.class.php b/htdocs/core/modules/modAgenda.class.php
    index 30a606bb7c9..50e767fe411 100644
    --- a/htdocs/core/modules/modAgenda.class.php
    +++ b/htdocs/core/modules/modAgenda.class.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2009-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cedric Gross         <c.gross@kreiz-it.fr>
      * Copyright (C) 2015      Bahfir Abbes         <bafbes@gmail.com>
      * Copyright (C) 2017      Juanjo Menent        <jmenent@2byte.es>
    @@ -51,7 +51,7 @@ class modAgenda extends DolibarrModules
     		$this->numero = 2400;
     
     		$this->family = "projects";
    -		$this->module_position = 15;
    +		$this->module_position = '15';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Follow events or rendez-vous. Record manual events into Agendas or let application record automatic events for log tracking.";
    @@ -65,14 +65,15 @@ class modAgenda extends DolibarrModules
     		$this->dirs = array("/agenda/temp");
     
     		// Config pages
    -		//-------------
     		$this->config_page_url = array("agenda_other.php");
     
    -		// Dependancies
    -		//-------------
    -		$this->depends = array();
    -		$this->requiredby = array();
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
     		$this->langfiles = array("companies");
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     
     		// Module parts
             $this->module_parts = array();
    @@ -112,9 +113,9 @@ class modAgenda extends DolibarrModules
     
     		// Cronjobs
     		//------------
    +		$datestart=dol_now();
     		$this->cronjobs = array(
    -			0=>array('label'=>'SendEmailsReminders', 'jobtype'=>'method', 'class'=>'comm/action/class/actioncomm.class.php', 'objectname'=>'ActionComm', 'method'=>'sendEmailsReminder', 'parameters'=>'', 'comment'=>'SendEMailsReminder', 'frequency'=>10, 'unitfrequency'=>60, 'priority'=>10, 'status'=>1, 'test'=>'$conf->agenda->enabled'),
    -		    // 1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24)
    +			0=>array('label'=>'SendEmailsReminders', 'jobtype'=>'method', 'class'=>'comm/action/class/actioncomm.class.php', 'objectname'=>'ActionComm', 'method'=>'sendEmailsReminder', 'parameters'=>'', 'comment'=>'SendEMailsReminder', 'frequency'=>10, 'unitfrequency'=>60, 'priority'=>10, 'status'=>1, 'test'=>'$conf->agenda->enabled', 'datestart'=>$datestart),
     		);
     
     		// Permissions
    @@ -243,7 +244,7 @@ class modAgenda extends DolibarrModules
     		// Calendar
     		$this->menu[$r]=array('fk_menu'=>'r=1',
     													'type'=>'left',
    -													'titre'=>'Agenda',
    +													'titre'=>'Calendar',
     													'mainmenu'=>'agenda',
     													'url'=>'/comm/action/index.php?action=default&amp;mainmenu=agenda&amp;leftmenu=agenda',
     													'langs'=>'agenda',
    @@ -418,7 +419,5 @@ class modAgenda extends DolibarrModules
     		if (empty($user->rights->societe->client->voir)) $this->export_sql_end[$r] .=' AND (sc.fk_user = '.(empty($user)?0:$user->id).' OR ac.fk_soc IS NULL)';
     		if (empty($user->rights->agenda->allactions->read)) $this->export_sql_end[$r] .=' AND acr.fk_element = '.(empty($user)?0:$user->id);
     		$this->export_sql_end[$r] .=' ORDER BY ac.datep';
    -
     	}
    -
     }
    diff --git a/htdocs/core/modules/modApi.class.php b/htdocs/core/modules/modApi.class.php
    index c8dc7ae84ba..71374e136e5 100644
    --- a/htdocs/core/modules/modApi.class.php
    +++ b/htdocs/core/modules/modApi.class.php
    @@ -82,7 +82,7 @@ class modApi extends DolibarrModules
     		$this->depends = array();		// List of modules id that must be enabled if this module is enabled
     		$this->requiredby = array();	// List of modules id to disable if this one is disabled
     		$this->conflictwith = array();	// List of modules id this module is in conflict with
    -		$this->phpmin = array(5,3);					// Minimum version of PHP required by module
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("other");
     
     		// Constants
    diff --git a/htdocs/core/modules/modAsset.class.php b/htdocs/core/modules/modAsset.class.php
    index 9b82a6015c4..dd61c75df2a 100644
    --- a/htdocs/core/modules/modAsset.class.php
    +++ b/htdocs/core/modules/modAsset.class.php
    @@ -27,15 +27,11 @@
     include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
     
     
    -// The class name should start with a lower case mod for Dolibarr to pick it up
    -// so we ignore the Squiz.Classes.ValidClassName.NotCamelCaps rule.
    -// @codingStandardsIgnoreStart
     /**
      *  Description and activation class for module FixedAssets
      */
     class modAsset extends DolibarrModules
     {
    -	// @codingStandardsIgnoreEnd
     	/**
     	 * Constructor. Define names, constants, directories, boxes, permissions
     	 *
    @@ -57,7 +53,7 @@ class modAsset extends DolibarrModules
     		// It is used to group modules by family in module setup page
     		$this->family = "financial";
     		// Module position in the family on 2 digits ('01', '10', '20', ...)
    -		$this->module_position = '90';
    +		$this->module_position = '70';
     		// Gives the possibility to the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this)
     		//$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily")));
     
    @@ -96,7 +92,7 @@ class modAsset extends DolibarrModules
     		$this->requiredby = array();	// List of module ids to disable if this one is disabled
     		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
     		$this->langfiles = array("assets");
    -		$this->phpmin = array(5,3);					// Minimum version of PHP required by module
    +		$this->phpmin = array(5,4);					// Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(7,0);	// Minimum version of Dolibarr required by module
     		$this->warnings_activation = array();                     // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
     		$this->warnings_activation_ext = array();                 // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    @@ -178,9 +174,9 @@ class modAsset extends DolibarrModules
     
     		// Cronjobs (List of cron jobs entries to add when module is enabled)
     		// unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week
    -		$this->cronjobs = array(
    -			0=>array('label'=>'MyJob label', 'jobtype'=>'method', 'class'=>'/asset/class/asset.class.php', 'objectname'=>'Asset', 'method'=>'doScheduledJob', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true)
    -		);
    +		//$this->cronjobs = array(
    +		//	0=>array('label'=>'MyJob label', 'jobtype'=>'method', 'class'=>'/asset/class/asset.class.php', 'objectname'=>'Asset', 'method'=>'doScheduledJob', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true)
    +		//);
     		// Example: $this->cronjobs=array(0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true),
     		//                                1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>true)
     		// );
    @@ -335,5 +331,4 @@ class modAsset extends DolibarrModules
     
     		return $this->_init($sql,$options);
     	}
    -
     }
    diff --git a/htdocs/core/modules/modBanque.class.php b/htdocs/core/modules/modBanque.class.php
    index 602085b9f5a..8cfcaaf83da 100644
    --- a/htdocs/core/modules/modBanque.class.php
    +++ b/htdocs/core/modules/modBanque.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2008-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2011 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -49,7 +49,7 @@ class modBanque extends DolibarrModules
     		$this->numero = 85;
     
     		$this->family = "financial";
    -		$this->module_position = 510;
    +		$this->module_position = '51';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des comptes financiers de type Comptes bancaires ou postaux";
    @@ -86,49 +86,49 @@ class modBanque extends DolibarrModules
     
     		$r++;
     		$this->rights[$r][0] = 111; // id de la permission
    -		$this->rights[$r][1] = 'Lire les comptes bancaires'; // libelle de la permission
    +		$this->rights[$r][1] = 'Read bank account and transactions';
     		$this->rights[$r][2] = 'r';
     		$this->rights[$r][3] = 0;
     		$this->rights[$r][4] = 'lire';
     
     		$r++;
     		$this->rights[$r][0] = 112; // id de la permission
    -		$this->rights[$r][1] = 'Creer/modifier montant/supprimer ecriture bancaire'; // libelle de la permission
    +		$this->rights[$r][1] = 'Creer/modifier montant/supprimer ecriture bancaire';
     		$this->rights[$r][2] = 'w';
     		$this->rights[$r][3] = 0;
     		$this->rights[$r][4] = 'modifier';
     
     		$r++;
     		$this->rights[$r][0] = 113; // id de la permission
    -		$this->rights[$r][1] = 'Configurer les comptes bancaires (creer, gerer categories)'; // libelle de la permission
    +		$this->rights[$r][1] = 'Configurer les comptes bancaires (creer, gerer categories)';
     		$this->rights[$r][2] = 'a';
     		$this->rights[$r][3] = 0;
     		$this->rights[$r][4] = 'configurer';
     
     		$r++;
     		$this->rights[$r][0] = 114; // id de la permission
    -		$this->rights[$r][1] = 'Rapprocher les ecritures bancaires'; // libelle de la permission
    +		$this->rights[$r][1] = 'Rapprocher les ecritures bancaires';
     		$this->rights[$r][2] = 'w';
     		$this->rights[$r][3] = 0;
     		$this->rights[$r][4] = 'consolidate';
     
     		$r++;
     		$this->rights[$r][0] = 115; // id de la permission
    -		$this->rights[$r][1] = 'Exporter transactions et releves'; // libelle de la permission
    +		$this->rights[$r][1] = 'Exporter transactions et releves';
     		$this->rights[$r][2] = 'r';
     		$this->rights[$r][3] = 0;
     		$this->rights[$r][4] = 'export';
     
     		$r++;
     		$this->rights[$r][0] = 116; // id de la permission
    -		$this->rights[$r][1] = 'Virements entre comptes'; // libelle de la permission
    +		$this->rights[$r][1] = 'Virements entre comptes';
     		$this->rights[$r][2] = 'w';
     		$this->rights[$r][3] = 0;
     		$this->rights[$r][4] = 'transfer';
     
     		$r++;
     		$this->rights[$r][0] = 117; // id de la permission
    -		$this->rights[$r][1] = 'Gerer les envois de cheques'; // libelle de la permission
    +		$this->rights[$r][1] = 'Gerer les envois de cheques';
     		$this->rights[$r][2] = 'w';
     		$this->rights[$r][3] = 0;
     		$this->rights[$r][4] = 'cheque';
    @@ -199,7 +199,6 @@ class modBanque extends DolibarrModules
     		$this->export_sql_end[$r] .=' AND p.fk_paiement = 7';
     		$this->export_sql_end[$r] .=' AND ba.entity IN ('.getEntity('bank_account').')';
     		$this->export_sql_order[$r] =' ORDER BY b.datev, b.num_releve';
    -
     	}
     
     
    diff --git a/htdocs/core/modules/modBarcode.class.php b/htdocs/core/modules/modBarcode.class.php
    index c25d444eb8a..9e66bc3f995 100644
    --- a/htdocs/core/modules/modBarcode.class.php
    +++ b/htdocs/core/modules/modBarcode.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/modules/modBlockedLog.class.php b/htdocs/core/modules/modBlockedLog.class.php
    index 07331bcbc3c..2c422cb4ad6 100644
    --- a/htdocs/core/modules/modBlockedLog.class.php
    +++ b/htdocs/core/modules/modBlockedLog.class.php
    @@ -47,11 +47,11 @@ class modBlockedLog extends DolibarrModules
     		// It is used to group modules in module setup page
             $this->family = "base";
             // Module position in the family on 2 digits ('01', '10', '20', ...)
    -        $this->module_position = '90';
    +        $this->module_position = '75';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
             $this->name = preg_replace('/^mod/i','',get_class($this));
             $this->description = "Enable a log on some business events into a non reversible log. This module may be mandatory for some countries.";
    -		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
    +        // Possible values for version are: 'development', 'experimental', 'dolibarr' or version
             $this->version = 'dolibarr';
             // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
             $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
    @@ -145,7 +145,8 @@ class modBlockedLog extends DolibarrModules
          *
          * @return	boolean		True if already used, otherwise False
          */
    -    function alreadyUsed() {
    +    function alreadyUsed()
    +    {
     
         	require_once DOL_DOCUMENT_ROOT.'/blockedlog/class/blockedlog.class.php';
         	$b=new BlockedLog($this->db);
    @@ -204,7 +205,8 @@ class modBlockedLog extends DolibarrModules
     	 * @param      string	$options    Options when enabling module ('', 'noboxes')
     	 * @return     int             		1 if OK, 0 if KO
     	 */
    -    function remove($options = '') {
    +    function remove($options = '')
    +    {
     
         	global $conf, $user;
     
    diff --git a/htdocs/core/modules/modBookmark.class.php b/htdocs/core/modules/modBookmark.class.php
    index 191e12bc2eb..db844393cd0 100644
    --- a/htdocs/core/modules/modBookmark.class.php
    +++ b/htdocs/core/modules/modBookmark.class.php
    @@ -101,6 +101,5 @@ class modBookmark extends DolibarrModules
     		// Menus
     		//-------
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
    -
     	}
     }
    diff --git a/htdocs/core/modules/modCashDesk.class.php b/htdocs/core/modules/modCashDesk.class.php
    index 4be7a937d1a..d9d4a6c2816 100644
    --- a/htdocs/core/modules/modCashDesk.class.php
    +++ b/htdocs/core/modules/modCashDesk.class.php
    @@ -46,7 +46,7 @@ class modCashDesk extends DolibarrModules
     		$this->rights_class = 'cashdesk';
     
     		$this->family = "portal";
    -		$this->module_position = 10;
    +		$this->module_position = '10';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "CashDesk module";
    @@ -64,9 +64,10 @@ class modCashDesk extends DolibarrModules
     		$this->config_page_url = array("cashdesk.php@cashdesk");
     
     		// Dependencies
    +		$this->hidden = false;			            // A condition to hide module
     		$this->depends = array('always'=>"modBanque", 'always'=>"modFacture", 'always'=>"modProduct", 'FR'=>'modBlockedLog');	// List of modules id that must be enabled if this module is enabled
     		$this->requiredby = array();			    // List of modules id to disable if this one is disabled
    -		$this->phpmin = array(4,1);					// Minimum version of PHP required by module
    +		$this->phpmin = array(5,4);					// Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(2,4);	// Minimum version of Dolibarr required by module
     		$this->langfiles = array("cashdesk");
     		$this->warnings_activation = array('FR'=>'WarningNoteModulePOSForFrenchLaw');                     // Warning to show when we activate module. array('always'='text') or array('FR'='text')
    @@ -80,7 +81,6 @@ class modCashDesk extends DolibarrModules
     
     		// Permissions
     		$this->rights = array();
    -		$this->rights_class = 'cashdesk';
     		$r=0;
     
     		$r++;
    diff --git a/htdocs/core/modules/modCategorie.class.php b/htdocs/core/modules/modCategorie.class.php
    index 50074779955..1006869d69f 100644
    --- a/htdocs/core/modules/modCategorie.class.php
    +++ b/htdocs/core/modules/modCategorie.class.php
    @@ -45,7 +45,7 @@ class modCategorie extends DolibarrModules
     		$this->numero = 1780;
     
     		$this->family = "technic";
    -		$this->module_position = 20;
    +		$this->module_position = '20';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des categories (produits, clients, fournisseurs...)";
    diff --git a/htdocs/core/modules/modCollab.class.php b/htdocs/core/modules/modCollab.class.php
    index 5349b000ac3..90cffc85448 100644
    --- a/htdocs/core/modules/modCollab.class.php
    +++ b/htdocs/core/modules/modCollab.class.php
    @@ -46,7 +46,7 @@ class modCollab extends DolibarrModules
     		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
     		// It is used to group modules in module setup page
             $this->family = "portal";
    -        $this->module_position = 51;
    +        $this->module_position = '51';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
             $this->name = preg_replace('/^mod/i','',get_class($this));
             $this->description = "Enable the public collaboration features, like shared pad, shared online sheets, etc...";
    diff --git a/htdocs/core/modules/modCommande.class.php b/htdocs/core/modules/modCommande.class.php
    index 91a86e4e842..069d36c333c 100644
    --- a/htdocs/core/modules/modCommande.class.php
    +++ b/htdocs/core/modules/modCommande.class.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
      * Copyright (C) 2004		Eric Seigne				<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -51,7 +51,7 @@ class modCommande extends DolibarrModules
     		$this->numero = 25;
     
     		$this->family = "crm";
    -		$this->module_position = 30;
    +		$this->module_position = '30';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des commandes clients";
    diff --git a/htdocs/core/modules/modComptabilite.class.php b/htdocs/core/modules/modComptabilite.class.php
    index 41349d214fc..2d0f81cf0cc 100644
    --- a/htdocs/core/modules/modComptabilite.class.php
    +++ b/htdocs/core/modules/modComptabilite.class.php
    @@ -48,7 +48,7 @@ class modComptabilite extends DolibarrModules
     		$this->numero = 10;
     
     		$this->family = "financial";
    -		$this->module_position = 600;
    +		$this->module_position = '60';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion sommaire de comptabilite";
    @@ -98,7 +98,6 @@ class modComptabilite extends DolibarrModules
     		// Menus
     		//-------
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
    -
     	}
     
     
    diff --git a/htdocs/core/modules/modContrat.class.php b/htdocs/core/modules/modContrat.class.php
    index ac722cd04ef..2ed01afee83 100644
    --- a/htdocs/core/modules/modContrat.class.php
    +++ b/htdocs/core/modules/modContrat.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -47,6 +47,7 @@ class modContrat extends DolibarrModules
     		$this->numero = 54;
     
     		$this->family = "crm";
    +		$this->module_position = '35';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des contrats de services";
    diff --git a/htdocs/core/modules/modDataPolicy.class.php b/htdocs/core/modules/modDataPolicy.class.php
    new file mode 100644
    index 00000000000..5dfc0fb83dd
    --- /dev/null
    +++ b/htdocs/core/modules/modDataPolicy.class.php
    @@ -0,0 +1,263 @@
    +<?php
    +
    +/* Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2018      Nicolas ZABOURI      <info@inovea-conseil.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * 	\defgroup   datapolicy     Module datapolicy
    + *  \brief      datapolicy module descriptor.
    + *
    + *  \file       htdocs/datapolicy/core/modules/modDataPolicy.class.php
    + *  \ingroup    datapolicy
    + *  \brief      Description and activation file for module DATAPOLICY
    + */
    +include_once DOL_DOCUMENT_ROOT . '/core/modules/DolibarrModules.class.php';
    +
    +
    +
    +// The class name should start with a lower case mod for Dolibarr to pick it up
    +// so we ignore the Squiz.Classes.ValidClassName.NotCamelCaps rule.
    +// @codingStandardsIgnoreStart
    +/**
    + *  Description and activation class for module datapolicy
    + */
    +class modDataPolicy extends DolibarrModules {
    +
    +    // @codingStandardsIgnoreEnd
    +    /**
    +     * Constructor. Define names, constants, directories, boxes, permissions
    +     *
    +     * @param DoliDB $db Database handler
    +     */
    +    public function __construct($db)
    +    {
    +        global $langs, $conf;
    +
    +        $this->db = $db;
    +
    +        // Id for module (must be unique).
    +        // Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
    +        $this->numero = 4100;
    +        // Key text used to identify module (for permissions, menus, etc...)
    +        $this->rights_class = 'datapolicy';
    +
    +        // Family can be 'base' (core modules),'crm','financial','hr','projects','products','ecm','technic' (transverse modules),'interface' (link with external tools),'other','...'
    +        // It is used to group modules by family in module setup page
    +        $this->family = "technic";
    +        // Module position in the family on 2 digits ('01', '10', '20', ...)
    +        $this->module_position = '81';
    +        // Gives the possibility to the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this)
    +        //$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily")));
    +        // Module label (no space allowed), used if translation string 'ModuledatapolicyName' not found (MyModue is name of module).
    +        $this->name = preg_replace('/^mod/i', '', get_class($this));
    +        // Module description, used if translation string 'ModuledatapolicyDesc' not found (MyModue is name of module).
    +        $this->description = "Module to manage Data policy (for compliance with GDPR in Europe or other Data policy rules)";
    +        // Used only if file README.md and README-LL.md not found.
    +        $this->descriptionlong = "";
    +
    +        // Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z'
    +        $this->version = 'development';
    +        // Key used in llx_const table to save module status enabled/disabled (where datapolicy is value of property name of module in uppercase)
    +        $this->const_name = 'MAIN_MODULE_' . strtoupper($this->name);
    +        // Name of image file used for this module.
    +        // If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue'
    +        // If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module'
    +        $this->picto = 'generic';
    +
    +        // Defined all module parts (triggers, login, substitutions, menus, css, etc...)
    +        // for default path (eg: /datapolicy/core/xxxxx) (0=disable, 1=enable)
    +        // for specific path of parts (eg: /datapolicy/core/modules/barcode)
    +        // for specific css file (eg: /datapolicy/css/datapolicy.css.php)
    +        $this->module_parts = array(
    +            'triggers' => 0, // Set this to 1 if module has its own trigger directory (core/triggers)
    +            'login' => 0, // Set this to 1 if module has its own login method file (core/login)
    +            'substitutions' => 0, // Set this to 1 if module has its own substitution function file (core/substitutions)
    +            'menus' => 0, // Set this to 1 if module has its own menus handler directory (core/menus)
    +            'theme' => 0, // Set this to 1 if module has its own theme directory (theme)
    +            'tpl' => 0, // Set this to 1 if module overwrite template dir (core/tpl)
    +            'barcode' => 0, // Set this to 1 if module has its own barcode directory (core/modules/barcode)
    +            'models' => 0, // Set this to 1 if module has its own models directory (core/modules/xxx)
    +            'hooks' => array('data' => array('membercard', 'contactcard', 'thirdpartycard'), 'entity' => $conf->entity)  // Set here all hooks context managed by module. To find available hook context, make a "grep -r '>initHooks(' *" on source code. You can also set hook context 'all'
    +        );
    +
    +        // Data directories to create when module is enabled.
    +        // Example: this->dirs = array("/datapolicy/temp","/datapolicy/subdir");
    +        $this->dirs = array("/datapolicy/temp");
    +
    +        // Config pages. Put here list of php page, stored into datapolicy/admin directory, to use to setup module.
    +        $this->config_page_url = array("setup.php@datapolicy");
    +
    +        // Dependencies
    +        $this->hidden = false;   // A condition to hide module
    +        $this->depends = array('always'=>'modCron');  // List of module class names as string that must be enabled if this module is enabled
    +        $this->requiredby = array(); // List of module ids to disable if this one is disabled
    +        $this->conflictwith = array(); // List of module class names as string this module is in conflict with
    +        $this->langfiles = array("datapolicy@datapolicy");
    +        $this->phpmin = array(5, 3);     // Minimum version of PHP required by module
    +        $this->need_dolibarr_version = array(4, 0); // Minimum version of Dolibarr required by module
    +        $this->warnings_activation = array();                     // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    +        $this->warnings_activation_ext = array();                 // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    +        //$this->automatic_activation = array('FR'=>'datapolicyWasAutomaticallyActivatedBecauseOfYourCountryChoice');
    +        //$this->always_enabled = true;								// If true, can't be disabled
    +        // Constants
    +        // List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive)
    +        // Example: $this->const=array(0=>array('datapolicy_MYNEWCONST1','chaine','myvalue','This is a constant to add',1),
    +        //                             1=>array('datapolicy_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1)
    +        // );
    +        $this->const = array(
    +            array('DATAPOLICY_TIERS_CLIENT', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_TIERS_PROSPECT', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_TIERS_PROSPECT_CLIENT', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_TIERS_NIPROSPECT_NICLIENT', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_TIERS_FOURNISSEUR', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_CONTACT_CLIENT', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_CONTACT_PROSPECT', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_CONTACT_PROSPECT_CLIENT', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_CONTACT_NIPROSPECT_NICLIENT', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_CONTACT_FOURNISSEUR', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +            array('DATAPOLICY_ADHERENT', 'chaine', '', $langs->trans('NUMBER_MONTH_BEFORE_DELETION'), 0),
    +        );
    +
    +        $country = explode(":", $conf->global->MAIN_INFO_SOCIETE_COUNTRY);
    +
    +        // Some keys to add into the overwriting translation tables
    +        /* $this->overwrite_translation = array(
    +          'en_US:ParentCompany'=>'Parent company or reseller',
    +          'fr_FR:ParentCompany'=>'Maison mère ou revendeur'
    +          ) */
    +
    +        if (!isset($conf->datapolicy) || !isset($conf->datapolicy->enabled)) {
    +            $conf->datapolicy = new stdClass();
    +            $conf->datapolicy->enabled = 0;
    +        }
    +
    +
    +        // Array to add new pages in new tabs
    +        $this->tabs = array();
    +        // Example:
    +        // $this->tabs[] = array('data'=>'objecttype:+tabname1:Title1:mylangfile@datapolicy:$user->rights->datapolicy->read:/datapolicy/mynewtab1.php?id=__ID__');  					// To add a new tab identified by code tabname1
    +        // $this->tabs[] = array('data'=>'objecttype:+tabname2:SUBSTITUTION_Title2:mylangfile@datapolicy:$user->rights->othermodule->read:/datapolicy/mynewtab2.php?id=__ID__',  	// To add another new tab identified by code tabname2. Label will be result of calling all substitution functions on 'Title2' key.
    +        // $this->tabs[] = array('data'=>'objecttype:-tabname:NU:conditiontoremove');                                                     										// To remove an existing tab identified by code tabname
    +        //
    +        // Where objecttype can be
    +        // 'categories_x'	  to add a tab in category view (replace 'x' by type of category (0=product, 1=supplier, 2=customer, 3=member)
    +        // 'contact'          to add a tab in contact view
    +        // 'contract'         to add a tab in contract view
    +        // 'group'            to add a tab in group view
    +        // 'intervention'     to add a tab in intervention view
    +        // 'invoice'          to add a tab in customer invoice view
    +        // 'invoice_supplier' to add a tab in supplier invoice view
    +        // 'member'           to add a tab in fundation member view
    +        // 'opensurveypoll'	  to add a tab in opensurvey poll view
    +        // 'order'            to add a tab in customer order view
    +        // 'order_supplier'   to add a tab in supplier order view
    +        // 'payment'		  to add a tab in payment view
    +        // 'payment_supplier' to add a tab in supplier payment view
    +        // 'product'          to add a tab in product view
    +        // 'propal'           to add a tab in propal view
    +        // 'project'          to add a tab in project view
    +        // 'stock'            to add a tab in stock view
    +        // 'thirdparty'       to add a tab in third party view
    +        // 'user'             to add a tab in user view
    +
    +
    +        // Dictionaries
    +        $this->dictionaries = array();
    +
    +
    +        // Boxes/Widgets
    +        // Add here list of php file(s) stored in datapolicy/core/boxes that contains class to show a widget.
    +        $this->boxes = array();
    +
    +
    +        // Cronjobs (List of cron jobs entries to add when module is enabled)
    +        // unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week
    +        $this->cronjobs = array(
    +            0 => array('label' => 'DATAPOLICY Cron', 'jobtype' => 'method', 'class' => '/datapolicy/class/datapolicyCron.class.php', 'objectname' => 'DataPolicyCron', 'method' => 'exec', 'parameters' => '', 'comment' => 'Clean data', 'frequency' => 1, 'unitfrequency' => 86400, 'status' => 1, 'test' => '$conf->datapolicy->enabled'),
    +            //1 => array('label' => 'DATAPOLICY Mailing', 'jobtype' => 'method', 'class' => '/datapolicy/class/datapolicyCron.class.php', 'objectname' => 'RgpdCron', 'method' => 'sendMailing', 'parameters' => '', 'comment' => 'Comment', 'frequency' => 1, 'unitfrequency' => 86400, 'status' => 0, 'test' => true)
    +        );
    +        // Example: $this->cronjobs=array(0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true),
    +        //                                1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>true)
    +        // );
    +        // Permissions
    +        $this->rights = array();  // Permission array used by this module
    +        // Main menu entries
    +        $this->menu = array();   // List of menus to add
    +        $r = 0;
    +    }
    +
    +    /**
    +     * 	Function called when module is enabled.
    +     * 	The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
    +     * 	It also creates data directories
    +     *
    +     * 	@param      string	$options    Options when enabling module ('', 'noboxes')
    +     * 	@return     int             	1 if OK, 0 if KO
    +     */
    +    public function init($options = '')
    +    {
    +    	global $langs;
    +
    +    	$this->_load_tables('/datapolicy/sql/');
    +
    +        // Create extrafields
    +        include_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php';
    +        $extrafields = new ExtraFields($this->db);
    +
    +		/*
    +        // Extrafield contact
    +        $result1 = $extrafields->addExtraField('datapolicy_consentement', $langs->trans("DATAPOLICY_consentement"), 'boolean', 101, 3, 'thirdparty', 0, 0, '', '', 1, '', '3', 0, '', '', 'datapolicy@datapolicy', '$conf->datapolicy->enabled');
    +        $result1 = $extrafields->addExtraField('datapolicy_opposition_traitement', $langs->trans("DATAPOLICY_opposition_traitement"), 'boolean', 102, 3, 'thirdparty', 0, 0, '', '', 1, '', '3', 0, '', '', 'datapolicy@datapolicy', '$conf->datapolicy->enabled');
    +        $result1 = $extrafields->addExtraField('datapolicy_opposition_prospection', $langs->trans("DATAPOLICY_opposition_prospection"), 'boolean', 103, 3, 'thirdparty', 0, 0, '', '', 1, '', '3', 0, '', '', 'datapolicy@datapolicy', '$conf->datapolicy->enabled');
    +        $result1 = $extrafields->addExtraField('datapolicy_date', $langs->trans("DATAPOLICY_date"), 'date', 104, 3, 'thirdparty', 0, 0, '', '', 1, '', '3', 0);
    +        $result1 = $extrafields->addExtraField('datapolicy_send', $langs->trans("DATAPOLICY_send"), 'date', 105, 3, 'thirdparty', 0, 0, '', '', 0, '', '0', 0);
    +
    +        // Extrafield Tiers
    +        $result1 = $extrafields->addExtraField('datapolicy_consentement', $langs->trans("DATAPOLICY_consentement"), 'boolean', 101, 3, 'contact', 0, 0, '', '', 1, '', '3', 0, '', '', 'datapolicy@datapolicy', '$conf->datapolicy->enabled');
    +        $result1 = $extrafields->addExtraField('datapolicy_opposition_traitement', $langs->trans("DATAPOLICY_opposition_traitement"), 'boolean', 102, 3, 'contact', 0, 0, '', '', 1, '', '3', 0, '', '', 'datapolicy@datapolicy', '$conf->datapolicy->enabled');
    +        $result1 = $extrafields->addExtraField('datapolicy_opposition_prospection', $langs->trans("DATAPOLICY_opposition_prospection"), 'boolean', 103, 3, 'contact', 0, 0, '', '', 1, '', '3', 0, '', '', 'datapolicy@datapolicy', '$conf->datapolicy->enabled');
    +        $result1 = $extrafields->addExtraField('datapolicy_date', $langs->trans("DATAPOLICY_date"), 'date', 104, 3, 'contact', 0, 0, '', '', 1, '', '3', 0);
    +        $result1 = $extrafields->addExtraField('datapolicy_send', $langs->trans("DATAPOLICY_send"), 'date', 105, 3, 'contact', 0, 0, '', '', 0, '', '0', 0);
    +
    +        // Extrafield Adherent
    +        $result1 = $extrafields->addExtraField('datapolicy_consentement', $langs->trans("DATAPOLICY_consentement"), 'boolean', 101, 3, 'adherent', 0, 0, '', '', 1, '', '3', 0, '', '', 'datapolicy@datapolicy', '$conf->datapolicy->enabled');
    +        $result1 = $extrafields->addExtraField('datapolicy_opposition_traitement', $langs->trans("DATAPOLICY_opposition_traitement"), 'boolean', 102, 3, 'adherent', 0, 0, '', '', 1, '', '3', 0, '', '', 'datapolicy@datapolicy', '$conf->datapolicy->enabled');
    +        $result1 = $extrafields->addExtraField('datapolicy_opposition_prospection', $langs->trans("DATAPOLICY_opposition_prospection"), 'boolean', 103, 3, 'adherent', 0, 0, '', '', 1, '', '3', 0, '', '', 'datapolicy@datapolicy', '$conf->datapolicy->enabled');
    +        $result1 = $extrafields->addExtraField('datapolicy_date', $langs->trans("DATAPOLICY_date"), 'date', 104, 3, 'adherent', 0, 0, '', '', 1, '', '3', 0);
    +        $result1 = $extrafields->addExtraField('datapolicy_send', $langs->trans("DATAPOLICY_send"), 'date', 105, 3, 'adherent', 0, 0, '', '', 0, '', '0', 0);
    +		*/
    +
    +        $sql = array();
    +
    +        return $this->_init($sql, $options);
    +    }
    +
    +    /**
    +     * 	Function called when module is disabled.
    +     * 	Remove from database constants, boxes and permissions from Dolibarr database.
    +     * 	Data directories are not deleted
    +     *
    +     * 	@param      string	$options    Options when enabling module ('', 'noboxes')
    +     * 	@return     int             	1 if OK, 0 if KO
    +     */
    +    public function remove($options = '')
    +    {
    +        $sql = array();
    +
    +        return $this->_remove($sql, $options);
    +    }
    +}
    diff --git a/htdocs/core/modules/modDav.class.php b/htdocs/core/modules/modDav.class.php
    index 77c3f8feef7..92153d83688 100644
    --- a/htdocs/core/modules/modDav.class.php
    +++ b/htdocs/core/modules/modDav.class.php
    @@ -26,15 +26,11 @@
     include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
     
     
    -// The class name should start with a lower case mod for Dolibarr to pick it up
    -// so we ignore the Squiz.Classes.ValidClassName.NotCamelCaps rule.
    -// @codingStandardsIgnoreStart
     /**
      *  Description and activation class for module dav
      */
     class modDav extends DolibarrModules
     {
    -	// @codingStandardsIgnoreEnd
     	/**
     	 * Constructor. Define names, constants, directories, boxes, permissions
     	 *
    @@ -48,7 +44,7 @@ class modDav extends DolibarrModules
     
     		// Id for module (must be unique).
     		// Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
    -		$this->numero = 50310;		// TODO Go on page https://wiki.dolibarr.org/index.php/List_of_modules_id to reserve id number for your module
    +		$this->numero = 50310;
     		// Key text used to identify module (for permissions, menus, etc...)
     		$this->rights_class = 'dav';
     
    @@ -56,7 +52,7 @@ class modDav extends DolibarrModules
     		// It is used to group modules by family in module setup page
     		$this->family = "interface";
     		// Module position in the family on 2 digits ('01', '10', '20', ...)
    -		$this->module_position = '90';
    +		$this->module_position = '75';
     		// Gives the possibility to the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this)
     		//$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily")));
     
    @@ -68,7 +64,7 @@ class modDav extends DolibarrModules
     		$this->descriptionlong = "davDescription";
     
     		// Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z'
    -		$this->version = 'experimental';
    +		$this->version = 'dolibarr';
     		// Key used in llx_const table to save module status enabled/disabled (where DAV is value of property name of module in uppercase)
     		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
     		// Name of image file used for this module.
    @@ -108,7 +104,7 @@ class modDav extends DolibarrModules
     		//                             1=>array('DAV_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1)
     		// );
     		$this->const = array(
    -			1=>array('DAV_MYCONSTANT', 'chaine', 'avalue', 'This is a constant to add', 1, 'allentities', 1)
    +			//1=>array('DAV_MYCONSTANT', 'chaine', 'avalue', 'This is a constant to add', 1, 'allentities', 1)
     		);
     
     
    @@ -177,9 +173,9 @@ class modDav extends DolibarrModules
     
     		// Cronjobs (List of cron jobs entries to add when module is enabled)
     		// unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week
    -		$this->cronjobs = array(
    +		//$this->cronjobs = array(
     			//0=>array('label'=>'MyJob label', 'jobtype'=>'method', 'class'=>'/dav/class/myobject.class.php', 'objectname'=>'MyObject', 'method'=>'doScheduledJob', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true)
    -		);
    +		//);
     		// Example: $this->cronjobs=array(0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true),
     		//                                1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>true)
     		// );
    @@ -324,5 +320,4 @@ class modDav extends DolibarrModules
     
     		return $this->_remove($sql, $options);
     	}
    -
     }
    diff --git a/htdocs/core/modules/modDeplacement.class.php b/htdocs/core/modules/modDeplacement.class.php
    index 3baa7b74590..285d795ea11 100644
    --- a/htdocs/core/modules/modDeplacement.class.php
    +++ b/htdocs/core/modules/modDeplacement.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -45,7 +45,7 @@ class modDeplacement extends DolibarrModules
     		$this->numero = 75 ;
     
     		$this->family = "hr";
    -		$this->module_position = 41;
    +		$this->module_position = '41';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des notes de frais et deplacements";		// Si traduction Module75Desc non trouvee
    diff --git a/htdocs/core/modules/modDocumentGeneration.class.php b/htdocs/core/modules/modDocumentGeneration.class.php
    index 211fb38feca..a2ea9dea7c8 100644
    --- a/htdocs/core/modules/modDocumentGeneration.class.php
    +++ b/htdocs/core/modules/modDocumentGeneration.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -45,7 +45,7 @@ class modDocumentGeneration extends DolibarrModules
     		$this->numero = 1520;
     
     		$this->family = "technic";
    -		$this->module_position = 80;
    +		$this->module_position = '80';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Direct mail document generation";
    diff --git a/htdocs/core/modules/modDon.class.php b/htdocs/core/modules/modDon.class.php
    index dacfad736bf..325f6533f51 100644
    --- a/htdocs/core/modules/modDon.class.php
    +++ b/htdocs/core/modules/modDon.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2005	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2015		Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -140,7 +140,6 @@ class modDon extends DolibarrModules
     		// Menus
     		//-------
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
    -
     	}
     
     
    diff --git a/htdocs/core/modules/modDynamicPrices.class.php b/htdocs/core/modules/modDynamicPrices.class.php
    index c7bc152ff64..a164bec953c 100644
    --- a/htdocs/core/modules/modDynamicPrices.class.php
    +++ b/htdocs/core/modules/modDynamicPrices.class.php
    @@ -82,6 +82,5 @@ class modDynamicPrices extends DolibarrModules
             $this->rights = array();
             $this->rights_class = 'dynamicprices';
             $r=0;
    -
         }
     }
    diff --git a/htdocs/core/modules/modECM.class.php b/htdocs/core/modules/modECM.class.php
    index 5b85ada7f70..c4c00597885 100644
    --- a/htdocs/core/modules/modECM.class.php
    +++ b/htdocs/core/modules/modECM.class.php
    @@ -48,7 +48,7 @@ class modECM extends DolibarrModules
     		// Family can be 'crm','financial','hr','projects','product','ecm','technic','other'
     		// It is used to sort modules in module setup page
     		$this->family = "ecm";
    -		$this->module_position = 10;
    +		$this->module_position = '10';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		// Module description used if translation string 'ModuleXXXDesc' not found (XXX is id value)
    diff --git a/htdocs/core/modules/modEmailCollector.class.php b/htdocs/core/modules/modEmailCollector.class.php
    new file mode 100644
    index 00000000000..868e1760ded
    --- /dev/null
    +++ b/htdocs/core/modules/modEmailCollector.class.php
    @@ -0,0 +1,320 @@
    +<?php
    +/* Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * 	\defgroup   dav     Module dav
    + *  \brief      dav module descriptor.
    + *
    + *  \file       htdocs/dav/core/modules/modDav.class.php
    + *  \ingroup    dav
    + *  \brief      Description and activation file for module dav
    + */
    +include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
    +
    +
    +/**
    + *  Description and activation class for module dav
    + */
    +class modEmailCollector extends DolibarrModules
    +{
    +	/**
    +	 * Constructor. Define names, constants, directories, boxes, permissions
    +	 *
    +	 * @param DoliDB $db Database handler
    +	 */
    +	public function __construct($db)
    +	{
    +        global $langs,$conf;
    +
    +        $this->db = $db;
    +
    +		// Id for module (must be unique).
    +		// Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
    +		$this->numero = 50320;
    +		// Key text used to identify module (for permissions, menus, etc...)
    +		$this->rights_class = 'emailcollector';
    +
    +		// Family can be 'base' (core modules),'crm','financial','hr','projects','products','ecm','technic' (transverse modules),'interface' (link with external tools),'other','...'
    +		// It is used to group modules by family in module setup page
    +		$this->family = "interface";
    +		// Module position in the family on 2 digits ('01', '10', '20', ...)
    +		$this->module_position = '12';
    +		// Gives the possibility to the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this)
    +		//$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily")));
    +
    +		// Module label (no space allowed), used if translation string 'ModuledavName' not found (MyModue is name of module).
    +		$this->name = preg_replace('/^mod/i','',get_class($this));
    +		// Module description, used if translation string 'ModuledavDesc' not found (MyModue is name of module).
    +		$this->description = "EmailCollectorDescription";
    +		// Used only if file README.md and README-LL.md not found.
    +		$this->descriptionlong = "EmailCollectorDescription";
    +
    +		// Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z'
    +		$this->version = 'experimental';
    +		// Key used in llx_const table to save module status enabled/disabled (where DAV is value of property name of module in uppercase)
    +		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
    +		// Name of image file used for this module.
    +		// If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue'
    +		// If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module'
    +		$this->picto='email';
    +
    +		// Defined all module parts (triggers, login, substitutions, menus, css, etc...)
    +		// for default path (eg: /dav/core/xxxxx) (0=disable, 1=enable)
    +		// for specific path of parts (eg: /dav/core/modules/barcode)
    +		// for specific css file (eg: /dav/css/dav.css.php)
    +		$this->module_parts = array();
    +
    +		// Data directories to create when module is enabled.
    +		// Example: this->dirs = array("/dav/temp","/dav/subdir");
    +		$this->dirs = array();
    +
    +		// Config pages. Put here list of php page, stored into dav/admin directory, to use to setup module.
    +		$this->config_page_url = array("emailcollector_list.php");
    +
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array('always'=>'modCron');		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->langfiles = array("admin");
    +		$this->phpmin = array(5,4);					// Minimum version of PHP required by module
    +		$this->need_dolibarr_version = array(7,0);	// Minimum version of Dolibarr required by module
    +		$this->warnings_activation = array();                     // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    +		$this->warnings_activation_ext = array();                 // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    +		//$this->automatic_activation = array('FR'=>'davWasAutomaticallyActivatedBecauseOfYourCountryChoice');
    +		//$this->always_enabled = true;								// If true, can't be disabled
    +
    +		// Constants
    +		// List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive)
    +		// Example: $this->const=array(0=>array('DAV_MYNEWCONST1','chaine','myvalue','This is a constant to add',1),
    +		//                             1=>array('DAV_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1)
    +		// );
    +		$this->const = array(
    +			//1=>array('DAV_MYCONSTANT', 'chaine', 'avalue', 'This is a constant to add', 1, 'allentities', 1)
    +		);
    +
    +
    +		if (! isset($conf->dav) || ! isset($conf->dav->enabled))
    +		{
    +			$conf->dav=new stdClass();
    +			$conf->dav->enabled=0;
    +		}
    +
    +
    +		// Array to add new pages in new tabs
    +        $this->tabs = array();
    +		// Example:
    +		// $this->tabs[] = array('data'=>'objecttype:+tabname1:Title1:mylangfile@dav:$user->rights->dav->read:/dav/mynewtab1.php?id=__ID__');  					// To add a new tab identified by code tabname1
    +        // $this->tabs[] = array('data'=>'objecttype:+tabname2:SUBSTITUTION_Title2:mylangfile@dav:$user->rights->othermodule->read:/dav/mynewtab2.php?id=__ID__',  	// To add another new tab identified by code tabname2. Label will be result of calling all substitution functions on 'Title2' key.
    +        // $this->tabs[] = array('data'=>'objecttype:-tabname:NU:conditiontoremove');                                                     										// To remove an existing tab identified by code tabname
    +        //
    +        // Where objecttype can be
    +		// 'categories_x'	  to add a tab in category view (replace 'x' by type of category (0=product, 1=supplier, 2=customer, 3=member)
    +		// 'contact'          to add a tab in contact view
    +		// 'contract'         to add a tab in contract view
    +		// 'group'            to add a tab in group view
    +		// 'intervention'     to add a tab in intervention view
    +		// 'invoice'          to add a tab in customer invoice view
    +		// 'invoice_supplier' to add a tab in supplier invoice view
    +		// 'member'           to add a tab in fundation member view
    +		// 'opensurveypoll'	  to add a tab in opensurvey poll view
    +		// 'order'            to add a tab in customer order view
    +		// 'order_supplier'   to add a tab in supplier order view
    +		// 'payment'		  to add a tab in payment view
    +		// 'payment_supplier' to add a tab in supplier payment view
    +		// 'product'          to add a tab in product view
    +		// 'propal'           to add a tab in propal view
    +		// 'project'          to add a tab in project view
    +		// 'stock'            to add a tab in stock view
    +		// 'thirdparty'       to add a tab in third party view
    +		// 'user'             to add a tab in user view
    +
    +
    +        // Dictionaries
    +		$this->dictionaries=array();
    +        /* Example:
    +        $this->dictionaries=array(
    +            'langs'=>'mylangfile@dav',
    +            'tabname'=>array(MAIN_DB_PREFIX."table1",MAIN_DB_PREFIX."table2",MAIN_DB_PREFIX."table3"),		// List of tables we want to see into dictonnary editor
    +            'tablib'=>array("Table1","Table2","Table3"),													// Label of tables
    +            'tabsql'=>array('SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table1 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table2 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table3 as f'),	// Request to select fields
    +            'tabsqlsort'=>array("label ASC","label ASC","label ASC"),																					// Sort order
    +            'tabfield'=>array("code,label","code,label","code,label"),																					// List of fields (result of select to show dictionary)
    +            'tabfieldvalue'=>array("code,label","code,label","code,label"),																				// List of fields (list of fields to edit a record)
    +            'tabfieldinsert'=>array("code,label","code,label","code,label"),																			// List of fields (list of fields for insert)
    +            'tabrowid'=>array("rowid","rowid","rowid"),																									// Name of columns with primary key (try to always name it 'rowid')
    +            'tabcond'=>array($conf->dav->enabled,$conf->dav->enabled,$conf->dav->enabled)												// Condition to show each dictionary
    +        );
    +        */
    +
    +
    +        // Boxes/Widgets
    +		// Add here list of php file(s) stored in dav/core/boxes that contains class to show a widget.
    +        $this->boxes = array(
    +        	//0=>array('file'=>'davwidget1.php@dav','note'=>'Widget provided by dav','enabledbydefaulton'=>'Home'),
    +        	//1=>array('file'=>'davwidget2.php@dav','note'=>'Widget provided by dav'),
    +        	//2=>array('file'=>'davwidget3.php@dav','note'=>'Widget provided by dav')
    +        );
    +
    +
    +		// Cronjobs (List of cron jobs entries to add when module is enabled)
    +		// unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week
    +		$this->cronjobs = array(
    +			0=>array('label'=>'Email collector', 'priority'=>50, 'jobtype'=>'method', 'class'=>'/emailcollector/class/emailcollector.class.php', 'objectname'=>'EmailCollector', 'method'=>'doCollect', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>5, 'unitfrequency'=>60, 'status'=>1, 'test'=>'$conf->emailcollector->enabled')
    +		);
    +
    +
    +		// Permissions
    +		$this->rights = array();		// Permission array used by this module
    +
    +		/*
    +		$r=0;
    +		$this->rights[$r][0] = $this->numero + $r;	// Permission id (must not be already used)
    +		$this->rights[$r][1] = 'Read myobject of dav';	// Permission label
    +		$this->rights[$r][3] = 1; 					// Permission by default for new user (0/1)
    +		$this->rights[$r][4] = 'read';				// In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
    +		$this->rights[$r][5] = '';				    // In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
    +
    +		$r++;
    +		$this->rights[$r][0] = $this->numero + $r;	// Permission id (must not be already used)
    +		$this->rights[$r][1] = 'Create/Update myobject of dav';	// Permission label
    +		$this->rights[$r][3] = 1; 					// Permission by default for new user (0/1)
    +		$this->rights[$r][4] = 'write';				// In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
    +		$this->rights[$r][5] = '';				    // In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
    +
    +		$r++;
    +		$this->rights[$r][0] = $this->numero + $r;	// Permission id (must not be already used)
    +		$this->rights[$r][1] = 'Delete myobject of dav';	// Permission label
    +		$this->rights[$r][3] = 1; 					// Permission by default for new user (0/1)
    +		$this->rights[$r][4] = 'delete';				// In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
    +		$this->rights[$r][5] = '';				    // In php code, permission will be checked by test if ($user->rights->dav->level1->level2)
    +		*/
    +
    +		// Main menu entries
    +		$this->menu = array();			// List of menus to add
    +		$r=0;
    +
    +		// Add here entries to declare new menus
    +
    +		/* BEGIN MODULEBUILDER TOPMENU */
    +		/*$this->menu[$r++]=array('fk_menu'=>'',			                // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
    +								'type'=>'top',			                // This is a Top menu entry
    +								'titre'=>'dav',
    +								'mainmenu'=>'dav',
    +								'leftmenu'=>'',
    +								'url'=>'/dav/davindex.php',
    +								'langs'=>'dav@dav',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
    +								'position'=>1000+$r,
    +								'enabled'=>'$conf->dav->enabled',	// Define condition to show or hide menu entry. Use '$conf->dav->enabled' if entry must be visible if module is enabled.
    +								'perms'=>'1',			                // Use 'perms'=>'$user->rights->dav->level1->level2' if you want your menu with a permission rules
    +								'target'=>'',
    +								'user'=>2);				                // 0=Menu for internal users, 1=external users, 2=both
    +		*/
    +		/* END MODULEBUILDER TOPMENU */
    +
    +		/* BEGIN MODULEBUILDER LEFTMENU MYOBJECT
    +		$this->menu[$r++]=array(	'fk_menu'=>'fk_mainmenu=dav',	    // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
    +								'type'=>'left',			                // This is a Left menu entry
    +								'titre'=>'List MyObject',
    +								'mainmenu'=>'dav',
    +								'leftmenu'=>'dav_myobject_list',
    +								'url'=>'/dav/myobject_list.php',
    +								'langs'=>'dav@dav',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
    +								'position'=>1000+$r,
    +								'enabled'=>'$conf->dav->enabled',  // Define condition to show or hide menu entry. Use '$conf->dav->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
    +								'perms'=>'1',			                // Use 'perms'=>'$user->rights->dav->level1->level2' if you want your menu with a permission rules
    +								'target'=>'',
    +								'user'=>2);				                // 0=Menu for internal users, 1=external users, 2=both
    +		$this->menu[$r++]=array(	'fk_menu'=>'fk_mainmenu=dav,fk_leftmenu=dav',	    // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
    +								'type'=>'left',			                // This is a Left menu entry
    +								'titre'=>'New MyObject',
    +								'mainmenu'=>'dav',
    +								'leftmenu'=>'dav_myobject_new',
    +								'url'=>'/dav/myobject_page.php?action=create',
    +								'langs'=>'dav@dav',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
    +								'position'=>1000+$r,
    +								'enabled'=>'$conf->dav->enabled',  // Define condition to show or hide menu entry. Use '$conf->dav->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
    +								'perms'=>'1',			                // Use 'perms'=>'$user->rights->dav->level1->level2' if you want your menu with a permission rules
    +								'target'=>'',
    +								'user'=>2);				                // 0=Menu for internal users, 1=external users, 2=both
    +		END MODULEBUILDER LEFTMENU MYOBJECT */
    +
    +
    +		// Exports
    +		$r=1;
    +
    +		/* BEGIN MODULEBUILDER EXPORT MYOBJECT */
    +		/*
    +		$langs->load("dav@dav");
    +		$this->export_code[$r]=$this->rights_class.'_'.$r;
    +		$this->export_label[$r]='MyObjectLines';	// Translation key (used only if key ExportDataset_xxx_z not found)
    +		$this->export_icon[$r]='myobject@dav';
    +		$keyforclass = 'MyObject'; $keyforclassfile='/mymobule/class/myobject.class.php'; $keyforelement='myobject';
    +		include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php';
    +		$keyforselect='myobject'; $keyforaliasextra='extra'; $keyforelement='myobject';
    +		include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
    +		//$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields)
    +		$this->export_sql_start[$r]='SELECT DISTINCT ';
    +		$this->export_sql_end[$r]  =' FROM '.MAIN_DB_PREFIX.'myobject as t';
    +		$this->export_sql_end[$r] .=' WHERE 1 = 1';
    +		$this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('myobject').')';
    +		$r++; */
    +		/* END MODULEBUILDER EXPORT MYOBJECT */
    +	}
    +
    +	/**
    +	 *	Function called when module is enabled.
    +	 *	The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
    +	 *	It also creates data directories
    +	 *
    +     *	@param      string	$options    Options when enabling module ('', 'noboxes')
    +	 *	@return     int             	1 if OK, 0 if KO
    +	 */
    +	public function init($options='')
    +	{
    +		//$this->_load_tables('/dav/sql/');
    +
    +		// Create extrafields
    +		include_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
    +		$extrafields = new ExtraFields($this->db);
    +
    +		//$result1=$extrafields->addExtraField('myattr1', "New Attr 1 label", 'boolean', 1,  3, 'thirdparty',   0, 0, '', '', 1, '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
    +		//$result2=$extrafields->addExtraField('myattr2', "New Attr 2 label", 'varchar', 1, 10, 'project',      0, 0, '', '', 1, '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
    +		//$result3=$extrafields->addExtraField('myattr3', "New Attr 3 label", 'varchar', 1, 10, 'bank_account', 0, 0, '', '', 1, '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
    +		//$result4=$extrafields->addExtraField('myattr4', "New Attr 4 label", 'select',  1,  3, 'thirdparty',   0, 1, '', array('options'=>array('code1'=>'Val1','code2'=>'Val2','code3'=>'Val3')), 1 '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
    +		//$result5=$extrafields->addExtraField('myattr5', "New Attr 5 label", 'text',    1, 10, 'user',         0, 0, '', '', 1, '', 0, 0, '', '', 'dav@dav', '$conf->dav->enabled');
    +
    +		$sql = array();
    +
    +		return $this->_init($sql, $options);
    +	}
    +
    +	/**
    +	 *	Function called when module is disabled.
    +	 *	Remove from database constants, boxes and permissions from Dolibarr database.
    +	 *	Data directories are not deleted
    +	 *
    +	 *	@param      string	$options    Options when enabling module ('', 'noboxes')
    +	 *	@return     int             	1 if OK, 0 if KO
    +	 */
    +	public function remove($options = '')
    +	{
    +		$sql = array();
    +
    +		return $this->_remove($sql, $options);
    +	}
    +}
    diff --git a/htdocs/core/modules/modExpedition.class.php b/htdocs/core/modules/modExpedition.class.php
    index daf7ec4b3cc..06cb8272ce0 100644
    --- a/htdocs/core/modules/modExpedition.class.php
    +++ b/htdocs/core/modules/modExpedition.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2013	   Philippe Grand	    <philippe.grand@atoo-net.com>
      *
    @@ -49,7 +49,7 @@ class modExpedition extends DolibarrModules
     		$this->numero = 80;
     
     		$this->family = "crm";
    -		$this->module_position = 40;
    +		$this->module_position = '40';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des expeditions";
    diff --git a/htdocs/core/modules/modExpenseReport.class.php b/htdocs/core/modules/modExpenseReport.class.php
    index 2dd46c9b788..62daf54a395 100644
    --- a/htdocs/core/modules/modExpenseReport.class.php
    +++ b/htdocs/core/modules/modExpenseReport.class.php
    @@ -23,7 +23,7 @@
      *      \ingroup    expensereport
      *      \brief      Description and activation file for module ExpenseReport
      */
    -include_once(DOL_DOCUMENT_ROOT ."/core/modules/DolibarrModules.class.php");
    +include_once DOL_DOCUMENT_ROOT ."/core/modules/DolibarrModules.class.php";
     
     
     /**
    @@ -44,7 +44,7 @@ class modExpenseReport extends DolibarrModules
     		$this->numero = 770;
     
     		$this->family = "hr";
    -		$this->module_position = 40;
    +		$this->module_position = '40';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
    @@ -61,10 +61,11 @@ class modExpenseReport extends DolibarrModules
     		$this->config_page_url = array('expensereport.php');
     
     		// Dependencies
    -		$this->depends = array();		// List of modules id that must be enabled if this module is enabled
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
     		// $this->conflictwith = array("modDeplacement"); // Deactivate for access on old information
     		$this->requiredby = array();	// List of modules id to disable if this one is disabled
    -		$this->phpmin = array(4,3);					// Minimum version of PHP required by module
    +		$this->phpmin = array(5,4);					// Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(3,7);	// Minimum version of Dolibarr required by module
     		$this->langfiles = array("companies","trips");
     
    diff --git a/htdocs/core/modules/modExport.class.php b/htdocs/core/modules/modExport.class.php
    index b88438f5fe1..4847ae4da2e 100644
    --- a/htdocs/core/modules/modExport.class.php
    +++ b/htdocs/core/modules/modExport.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,7 +44,7 @@ class modExport extends DolibarrModules
     		$this->numero = 240;
     
     		$this->family = "technic";
    -		$this->module_position = 72;
    +		$this->module_position = '72';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Outils d'exports de donnees Dolibarr (via un assistant)";
    @@ -94,6 +94,5 @@ class modExport extends DolibarrModules
     		// Menus
     		//-------
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
    -
     	}
     }
    diff --git a/htdocs/core/modules/modExternalRss.class.php b/htdocs/core/modules/modExternalRss.class.php
    index cf02888b9d2..8d1bf055673 100644
    --- a/htdocs/core/modules/modExternalRss.class.php
    +++ b/htdocs/core/modules/modExternalRss.class.php
    @@ -135,5 +135,4 @@ class modExternalRss extends DolibarrModules
     
     		return $this->_remove($sql,$options);
         }
    -
     }
    diff --git a/htdocs/core/modules/modExternalSite.class.php b/htdocs/core/modules/modExternalSite.class.php
    index 18bb0b000b2..088e93955ef 100644
    --- a/htdocs/core/modules/modExternalSite.class.php
    +++ b/htdocs/core/modules/modExternalSite.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -113,7 +113,6 @@ class modExternalSite extends DolibarrModules
     			'user'=>0
     		);
     		$r++;
    -
     	}
     }
     
    diff --git a/htdocs/core/modules/modFacture.class.php b/htdocs/core/modules/modFacture.class.php
    index 0326625b943..f8982ae2893 100644
    --- a/htdocs/core/modules/modFacture.class.php
    +++ b/htdocs/core/modules/modFacture.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2018	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -48,7 +48,7 @@ class modFacture extends DolibarrModules
     		$this->numero = 30;
     
     		$this->family = "financial";
    -		$this->module_position = 10;
    +		$this->module_position = '10';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i', '', get_class($this));
     		$this->description = "Gestion des factures";
    @@ -114,13 +114,14 @@ class modFacture extends DolibarrModules
     				2=>array('file'=>'box_graph_invoices_permonth.php', 'enabledbydefaulton'=>'Home')
     		);
     
    -        // Cronjobs
    -        $this->cronjobs = array(
    -            0=>array('label'=>'RecurringInvoices', 'jobtype'=>'method', 'class'=>'compta/facture/class/facture-rec.class.php', 'objectname'=>'FactureRec', 'method'=>'createRecurringInvoices', 'parameters'=>'', 'comment'=>'Generate recurring invoices', 'frequency'=>1, 'unitfrequency'=>3600 * 24, 'priority'=>50, 'status'=>1, 'test'=>'$conf->facture->enabled'),
    -            // 1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>3600, 'unitfrequency'=>3600)
    -        );
    +		// Cronjobs
    +		$arraydate=dol_getdate(dol_now());
    +		$datestart=dol_mktime(23, 0, 0, $arraydate['mon'], $arraydate['mday'], $arraydate['year']);
    +		$this->cronjobs = array(
    +			0=>array('label'=>'RecurringInvoices', 'jobtype'=>'method', 'class'=>'compta/facture/class/facture-rec.class.php', 'objectname'=>'FactureRec', 'method'=>'createRecurringInvoices', 'parameters'=>'', 'comment'=>'Generate recurring invoices', 'frequency'=>1, 'unitfrequency'=>3600 * 24, 'priority'=>50, 'status'=>1, 'test'=>'$conf->facture->enabled', 'datestart'=>$datestart),
    +		);
     
    -        // Permissions
    +		// Permissions
     		$this->rights = array();
     		$this->rights_class = 'facture';
     		$r = 0;
    diff --git a/htdocs/core/modules/modFckeditor.class.php b/htdocs/core/modules/modFckeditor.class.php
    index 812aa227ff6..6f297ce3dc6 100644
    --- a/htdocs/core/modules/modFckeditor.class.php
    +++ b/htdocs/core/modules/modFckeditor.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -45,7 +45,7 @@ class modFckeditor extends DolibarrModules
     		$this->numero = 2000;
     
     		$this->family = "technic";
    -		$this->module_position = 20;
    +		$this->module_position = '20';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Editeur WYSIWYG";
    diff --git a/htdocs/core/modules/modFicheinter.class.php b/htdocs/core/modules/modFicheinter.class.php
    index 7db2ac45e30..b1b18da2508 100644
    --- a/htdocs/core/modules/modFicheinter.class.php
    +++ b/htdocs/core/modules/modFicheinter.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -50,6 +50,7 @@ class modFicheinter extends DolibarrModules
             $this->numero = 70;
     
             $this->family = "crm";
    +        $this->module_position = '45';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
             $this->name = preg_replace('/^mod/i','',get_class($this));
             $this->description = "Gestion des fiches d'intervention";
    @@ -196,7 +197,6 @@ class modFicheinter extends DolibarrModules
             $this->export_sql_end[$r] .=' WHERE f.fk_soc = s.rowid';
             $this->export_sql_end[$r] .=' AND f.entity IN ('.getEntity('intervention').')';
             $r++;
    -
         }
     
     
    diff --git a/htdocs/core/modules/modFournisseur.class.php b/htdocs/core/modules/modFournisseur.class.php
    index 0dc4284df7c..16712d21ec2 100644
    --- a/htdocs/core/modules/modFournisseur.class.php
    +++ b/htdocs/core/modules/modFournisseur.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2013-2015 Philippe Grand	    <philippe.grand@atoo-net.com>
      *
    @@ -50,7 +50,7 @@ class modFournisseur extends DolibarrModules
     		// Family can be 'crm','financial','hr','projects','product','ecm','technic','other'
     		// It is used to group modules in module setup page
     		$this->family = "srm";
    -		$this->module_position = 10;
    +		$this->module_position = '10';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des fournisseurs";
    diff --git a/htdocs/core/modules/modGeoIPMaxmind.class.php b/htdocs/core/modules/modGeoIPMaxmind.class.php
    index 88bc8b7e8b9..81eddf86076 100644
    --- a/htdocs/core/modules/modGeoIPMaxmind.class.php
    +++ b/htdocs/core/modules/modGeoIPMaxmind.class.php
    @@ -65,9 +65,11 @@ class modGeoIPMaxmind extends DolibarrModules
     		$this->config_page_url = array("geoipmaxmind.php");
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array();
    -		$this->phpmin = array(4,2,0);
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);
     		$this->phpmax = array();
     		$this->need_dolibarr_version = array(2,7,-1);	// Minimum version of Dolibarr required by module
     		$this->need_javascript_ajax = 1;
    diff --git a/htdocs/core/modules/modGravatar.class.php b/htdocs/core/modules/modGravatar.class.php
    index b6b9d4c9a59..de85e76e7ff 100644
    --- a/htdocs/core/modules/modGravatar.class.php
    +++ b/htdocs/core/modules/modGravatar.class.php
    @@ -49,6 +49,8 @@ class modGravatar extends DolibarrModules
     		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
     		// It is used to group modules in module setup page
     		$this->family = "interface";
    +		// Module position in the family on 2 digits ('01', '10', '20', ...)
    +		$this->module_position = '75';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i', '', get_class($this));
     		// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
    @@ -71,9 +73,11 @@ class modGravatar extends DolibarrModules
     		$this->config_page_url = array();
     
     		// Dependencies
    -		$this->depends = array(); // List of modules id that must be enabled if this module is enabled
    -		$this->requiredby = array(); // List of modules id to disable if this one is disabled
    -		$this->phpmin = array(4, 3); // Minimum version of PHP required by module
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5, 4); // Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(2, 7); // Minimum version of Dolibarr required by module
     		$this->langfiles = array();
     
    diff --git a/htdocs/core/modules/modHRM.class.php b/htdocs/core/modules/modHRM.class.php
    index a209fdccf2e..5da8cf74e71 100644
    --- a/htdocs/core/modules/modHRM.class.php
    +++ b/htdocs/core/modules/modHRM.class.php
    @@ -20,7 +20,7 @@
      * \ingroup HRM
      * \brief   Description and activation file for module HRM
      */
    -include_once (DOL_DOCUMENT_ROOT . "/core/modules/DolibarrModules.class.php");
    +include_once DOL_DOCUMENT_ROOT . "/core/modules/DolibarrModules.class.php";
     
     /**
      * Class to describe and activate the HRM module
    @@ -66,27 +66,16 @@ class modHRM extends DolibarrModules
     		$this->config_page_url = array('admin_hrm.php@hrm');
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array(/*"
    -			modSalaries,
    -			modExpenseReport,
    -			modHoliday
    -		"*/);
    -		$this->conflictwith = array();
    -		$this->phpmin = array (
    -			5,
    -			3
    -		); // Minimum version of PHP required by module
    -		$this->need_dolibarr_version = array (
    -			3,
    -			9
    -		); // Minimum version of Dolibarr required by module
    -		$this->langfiles = array (
    -			"hrm"
    -		);
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array(/*"modSalaries, modExpenseReport, modHoliday"*/);	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
    +		$this->need_dolibarr_version = array (3,9); // Minimum version of Dolibarr required by module
    +		$this->langfiles = array ("hrm");
     
    -		// Dictionnaries
    -		$this->dictionnaries=array();
    +		// Dictionaries
    +		$this->dictionaries=array();
     
     		// Constantes
     		$this->const = array ();
    @@ -131,7 +120,6 @@ class modHRM extends DolibarrModules
     		// Menus
     		//-------
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
    -
     	}
     
     	/**
    diff --git a/htdocs/core/modules/modHoliday.class.php b/htdocs/core/modules/modHoliday.class.php
    index 78a1c71fbcb..cfe722454e5 100644
    --- a/htdocs/core/modules/modHoliday.class.php
    +++ b/htdocs/core/modules/modHoliday.class.php
    @@ -1,9 +1,10 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Dimitri Mouillard 	<dmouillard@teclib.com>
      * Copyright (C) 2013      Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2018      Charlene Benke		<charlie@patas-monkey.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,7 +28,7 @@
      *    \ingroup    holiday
      *    \brief      Description and activation file for module holiday
      */
    -include_once(DOL_DOCUMENT_ROOT ."/core/modules/DolibarrModules.class.php");
    +include_once DOL_DOCUMENT_ROOT ."/core/modules/DolibarrModules.class.php";
     
     
     /**
    @@ -53,7 +54,7 @@ class modHoliday extends DolibarrModules
     		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
     		// It is used to group modules in module setup page
     		$this->family = "hr";
    -		$this->module_position = 30;
    +		$this->module_position = '30';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
    @@ -69,16 +70,22 @@ class modHoliday extends DolibarrModules
     
     		// Data directories to create when module is enabled.
     		// Example: this->dirs = array("/mymodule/temp");
    -		$this->dirs = array();
    +		$this->dirs = array("/holiday/temp");
     		$r=0;
     
    +		// Config pages
    +		$this->config_page_url = array("holiday.php");
    +
    +
     		// Config pages. Put here list of php page names stored in admmin directory used to setup module.
     		// $this->config_page_url = array("holiday.php?leftmenu=setup@holiday");
     
     		// Dependencies
    -		$this->depends = array();		// List of modules id that must be enabled if this module is enabled
    -		$this->requiredby = array();	// List of modules id to disable if this one is disabled
    -		$this->phpmin = array(4,3);					// Minimum version of PHP required by module
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);					// Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(3,0);	// Minimum version of Dolibarr required by module
     		$this->langfiles = array("holiday");
     
    @@ -87,6 +94,28 @@ class modHoliday extends DolibarrModules
     		//                             1=>array('MYMODULE_MYNEWCONST2','chaine','myvalue','This is another constant to add',0) );
     		//                             2=>array('MAIN_MODULE_MYMODULE_NEEDSMARTY','chaine',1,'Constant to say module need smarty',0)
     		$this->const = array();			// List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 0 or 'allentities')
    +		$r=0;
    +
    +		$this->const[$r][0] = "HOLIDAY_ADDON";
    +		$this->const[$r][1] = "chaine";
    +		$this->const[$r][2] = "mod_holiday_madonna";
    +		$this->const[$r][3] = 'Nom du gestionnaire de numerotation des congés';
    +		$this->const[$r][4] = 0;
    +		$r++;
    +
    +		$this->const[$r][0] = "HOLIDAY_ADDON_PDF";
    +		$this->const[$r][1] = "chaine";
    +		$this->const[$r][2] = "celebrate";
    +		$this->const[$r][3] = 'Name of PDF model of holiday';
    +		$this->const[$r][4] = 0;
    +		$r++;
    +
    +		$this->const[$r][0] = "HOLIDAY_ADDON_PDF_ODT_PATH";
    +		$this->const[$r][1] = "chaine";
    +		$this->const[$r][2] = "DOL_DATA_ROOT/doctemplates/holiday";
    +		$this->const[$r][3] = "";
    +		$this->const[$r][4] = 0;
    +		$r++;
     
     		// Array to add new pages in new tabs
     		//$this->tabs[] = array('data'=>'user:+paidholidays:CPTitreMenu:holiday:$user->rights->holiday->read:/holiday/list.php?mainmenu=hrm&id=__ID__');	// We avoid to get one tab for each module. RH data are already in RH tab.
    diff --git a/htdocs/core/modules/modImport.class.php b/htdocs/core/modules/modImport.class.php
    index 01d66644dc7..528b4531074 100644
    --- a/htdocs/core/modules/modImport.class.php
    +++ b/htdocs/core/modules/modImport.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,7 +44,7 @@ class modImport extends DolibarrModules
     		$this->numero = 250;
     
     		$this->family = "technic";
    -        $this->module_position = 70;
    +        $this->module_position = '70';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Outils d'imports de donnees Dolibarr (via un assistant)";
    @@ -60,9 +60,11 @@ class modImport extends DolibarrModules
     		$this->config_page_url = array();
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array();
    -		$this->phpmin = array(4,3,0);	// Need auto_detect_line_endings php option to solve MAC pbs.
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module - Need auto_detect_line_endings php option to solve MAC pbs.
     		$this->phpmax = array();
     		$this->need_dolibarr_version = array(2,7,-1);	// Minimum version of Dolibarr required by module
     		$this->need_javascript_ajax = 1;
    @@ -89,6 +91,5 @@ class modImport extends DolibarrModules
     		// Menus
     		//-------
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
    -
     	}
     }
    diff --git a/htdocs/core/modules/modIncoterm.class.php b/htdocs/core/modules/modIncoterm.class.php
    index 7d4d1251f31..be83d83311b 100644
    --- a/htdocs/core/modules/modIncoterm.class.php
    +++ b/htdocs/core/modules/modIncoterm.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -65,9 +65,11 @@ class modIncoterm extends DolibarrModules
     		$this->config_page_url = array();
     
     		// Dependencies
    -		$this->depends = array();		// List of modules id that must be enabled if this module is enabled
    -		$this->requiredby = array();	// List of modules id to disable if this one is disabled
    -		$this->phpmin = array(5,0);					// Minimum version of PHP required by module
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(3,0);	// Minimum version of Dolibarr required by module
     		$this->langfiles = array("incoterm");
     
    diff --git a/htdocs/core/modules/modLabel.class.php b/htdocs/core/modules/modLabel.class.php
    index 2d91fd121bb..6dd268fc360 100644
    --- a/htdocs/core/modules/modLabel.class.php
    +++ b/htdocs/core/modules/modLabel.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2007-2009 Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2007-2009 Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -44,7 +44,7 @@ class modLabel extends DolibarrModules
     		$this->numero = 60;
     
     		$this->family = "technic";
    -		$this->module_position = 80;
    +		$this->module_position = '75';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des etiquettes";
    @@ -56,9 +56,12 @@ class modLabel extends DolibarrModules
     		// Data directories to create when module is enabled
     		$this->dirs = array("/label/temp");
     
    -		// Dependancies
    -		$this->depends = array();
    -		$this->requiredby = array();
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     
     		// Config pages
     		// $this->config_page_url = array("label.php");
    @@ -87,7 +90,6 @@ class modLabel extends DolibarrModules
     		$this->rights[4][1] = 'Supprimer les etiquettes'; // libelle de la permission
     		$this->rights[4][3] = 0; // La permission est-elle une permission par defaut
     		$this->rights[4][4] = 'supprimer';
    -
     	}
     
     	/**
    diff --git a/htdocs/core/modules/modLdap.class.php b/htdocs/core/modules/modLdap.class.php
    index 0f183bd6c76..88fb7ba67a9 100644
    --- a/htdocs/core/modules/modLdap.class.php
    +++ b/htdocs/core/modules/modLdap.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -43,6 +43,8 @@ class modLdap extends DolibarrModules
     		$this->numero = 200;
     
     		$this->family = "interface";
    +		// Module position in the family on 2 digits ('01', '10', '20', ...)
    +		$this->module_position = '30';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Synchronisation Ldap";
    @@ -60,9 +62,12 @@ class modLdap extends DolibarrModules
     		// Config pages
     		$this->config_page_url = array("ldap.php");
     
    -		// Dependancies
    -		$this->depends = array();
    -		$this->requiredby = array();
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     
     		// Constants
     		$this->const = array(
    diff --git a/htdocs/core/modules/modLoan.class.php b/htdocs/core/modules/modLoan.class.php
    index 51779f6ffc5..662ded1da21 100644
    --- a/htdocs/core/modules/modLoan.class.php
    +++ b/htdocs/core/modules/modLoan.class.php
    @@ -63,9 +63,11 @@ class modLoan extends DolibarrModules
     		$this->config_page_url = array('loan.php');
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array();
    -		$this->conflictwith = array();
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("loan");
     
     		// Constants
    @@ -143,7 +145,6 @@ class modLoan extends DolibarrModules
     		// Exports
     		//--------
     		$r=0;
    -
     	}
     
     
    diff --git a/htdocs/core/modules/modMailing.class.php b/htdocs/core/modules/modMailing.class.php
    index 46b31a08696..1f600cb9f12 100644
    --- a/htdocs/core/modules/modMailing.class.php
    +++ b/htdocs/core/modules/modMailing.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,7 +44,12 @@ class modMailing extends DolibarrModules
     		$this->db = $db;
     		$this->numero = 22;
     
    -		$this->family = "technic";
    +		// Family can be 'base' (core modules),'crm','financial','hr','projects','products','ecm','technic' (transverse modules),'interface' (link with external tools),'other','...'
    +		// It is used to group modules by family in module setup page
    +		$this->family = "interface";
    +		// Module position in the family on 2 digits ('01', '10', '20', ...)
    +		$this->module_position = '11';
    +
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des EMailings";
    @@ -57,8 +62,11 @@ class modMailing extends DolibarrModules
     		$this->dirs = array("/mailing/temp");
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array();
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("mails");
     
     		// Config pages
    @@ -130,7 +138,6 @@ class modMailing extends DolibarrModules
     		// Menus
     		//-------
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
    -
     	}
     
     
    diff --git a/htdocs/core/modules/modMailmanSpip.class.php b/htdocs/core/modules/modMailmanSpip.class.php
    index 9a019db7fea..d82c8040c02 100644
    --- a/htdocs/core/modules/modMailmanSpip.class.php
    +++ b/htdocs/core/modules/modMailmanSpip.class.php
    @@ -43,7 +43,11 @@ class modMailmanSpip extends DolibarrModules
     		$this->db = $db;
     		$this->numero = 105;
     
    +		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
    +		// It is used to group modules in module setup page
     		$this->family = "interface";
    +		// Module position in the family on 2 digits ('01', '10', '20', ...)
    +		$this->module_position = '70';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Mailman or Spip interface for member module";
    @@ -58,8 +62,11 @@ class modMailmanSpip extends DolibarrModules
     		$this->dirs = array();
     
     		// Dependencies
    -		$this->depends = array('modAdherent');
    -		$this->requiredby = array();
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array('modAdherent');		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     
     		// Config pages
     		$this->config_page_url = array('mailman.php');
    @@ -80,6 +87,5 @@ class modMailmanSpip extends DolibarrModules
     		// Menus
     		//-------
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
    -
     	}
     }
    diff --git a/htdocs/core/modules/modMargin.class.php b/htdocs/core/modules/modMargin.class.php
    index 53fba120656..58de64c8aad 100644
    --- a/htdocs/core/modules/modMargin.class.php
    +++ b/htdocs/core/modules/modMargin.class.php
    @@ -48,7 +48,7 @@ class modMargin extends DolibarrModules
     		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
     		// It is used to group modules in module setup page
     		$this->family = "financial";
    -		$this->module_position = 550;
    +		$this->module_position = '55';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
    @@ -68,9 +68,11 @@ class modMargin extends DolibarrModules
     		$this->config_page_url = array("margin.php@margin");
     
     		// Dependencies
    -		$this->depends = array("modPropale", "modProduct");		// List of modules id that must be enabled if this module is enabled
    -		$this->requiredby = array();	// List of modules id to disable if this one is disabled
    -		$this->phpmin = array(5,1);					// Minimum version of PHP required by module
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array("modPropale", "modProduct");		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(3,2);	// Minimum version of Dolibarr required by module
     		$this->langfiles = array("margins");
     
    diff --git a/htdocs/core/modules/modModuleBuilder.class.php b/htdocs/core/modules/modModuleBuilder.class.php
    index b6ba08a84a5..7f4132d7e44 100644
    --- a/htdocs/core/modules/modModuleBuilder.class.php
    +++ b/htdocs/core/modules/modModuleBuilder.class.php
    @@ -1,5 +1,6 @@
     <?php
     /* Copyright (C) 2017   Laurent Destailleur  <eldy@users.sourcefore.net>
    + * Copyright (C) 2018   Nicolas ZABOURI   <info@inovea-conseil.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -48,7 +49,7 @@ class modModuleBuilder extends DolibarrModules
             $this->name = preg_replace('/^mod/i','',get_class($this));
             $this->description = "A RAD (Rapid Application Development) tool to help developers to build their own module.";
     		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
    -        $this->version = 'experimental';
    +        $this->version = 'dolibarr';
             // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
             $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
             // Name of image file used for this module.
    @@ -59,9 +60,9 @@ class modModuleBuilder extends DolibarrModules
     
             // Config pages
             //-------------
    -        $this->config_page_url = array();
    +        $this->config_page_url = array('setup.php@modulebuilder');
     
    -        // Dependancies
    +        // Dependencies
             //-------------
     	    $this->hidden = false;	// A condition to disable module
     	    $this->depends = array();		// List of modules id that must be enabled if this module is enabled
    @@ -97,6 +98,5 @@ class modModuleBuilder extends DolibarrModules
                 'enabled'=>'$conf->modulebuilder->enabled && preg_match(\'/^(admintools|all)/\',$leftmenu) && ($user->admin || $conf->global->MODULEBUILDER_FOREVERYONE)',
                 'target'=>'_modulebuilder',
                 'user'=>0);
    -
         }
     }
    diff --git a/htdocs/core/modules/modMultiCurrency.class.php b/htdocs/core/modules/modMultiCurrency.class.php
    index 2d443c2e7bb..f371c2a2919 100644
    --- a/htdocs/core/modules/modMultiCurrency.class.php
    +++ b/htdocs/core/modules/modMultiCurrency.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2016 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2016 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016      Pierre-Henry Favre  <phf@atm-consulting.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -54,7 +54,7 @@ class modMultiCurrency extends DolibarrModules
     		// It is used to group modules in module setup page
     		$this->family = "technic";
     		// Module position in the family
    -		$this->module_position = 40;
    +		$this->module_position = '40';
     
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i', '', get_class($this));
    @@ -88,7 +88,7 @@ class modMultiCurrency extends DolibarrModules
     		$this->depends = array(); // List of modules id that must be enabled if this module is enabled
     		$this->requiredby = array(); // List of modules id to disable if this one is disabled
     		$this->conflictwith = array(); // List of modules id this module is in conflict with
    -		$this->phpmin = array(5, 0); // Minimum version of PHP required by module
    +		$this->phpmin = array(5, 4); // Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(3, 0); // Minimum version of Dolibarr required by module
     		$this->langfiles = array("multicurrency");
     
    diff --git a/htdocs/core/modules/modNotification.class.php b/htdocs/core/modules/modNotification.class.php
    index cc016d294b5..21d5f81eb98 100644
    --- a/htdocs/core/modules/modNotification.class.php
    +++ b/htdocs/core/modules/modNotification.class.php
    @@ -41,7 +41,11 @@ class modNotification extends DolibarrModules
     		$this->db = $db;
     		$this->numero = 600;
     
    +		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
    +		// It is used to group modules in module setup page
     		$this->family = "interface";
    +		// Module position in the family on 2 digits ('01', '10', '20', ...)
    +		$this->module_position = '01';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "EMail notifications (push) on business Dolibarr events";
    @@ -55,8 +59,11 @@ class modNotification extends DolibarrModules
     		$this->dirs = array();
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array();
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("mails");
     
     		// Config pages
    diff --git a/htdocs/core/modules/modOauth.class.php b/htdocs/core/modules/modOauth.class.php
    index 3177e41e787..086dac64bed 100644
    --- a/htdocs/core/modules/modOauth.class.php
    +++ b/htdocs/core/modules/modOauth.class.php
    @@ -40,19 +40,19 @@ class modOauth extends DolibarrModules
          *
          *  @param      DoliDB      $db      Database handler
          */
    -    function  __construct($db)
    +    function __construct($db)
         {
             $this->db = $db ;
             $this->numero = 66000;
             // Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
             // It is used to group modules in module setup page
             $this->family = "interface";
    -        $this->module_position = 510;
    +        $this->module_position = '31';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
             $this->name = preg_replace('/^mod/i','',get_class($this));
             // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
             $this->description = "Enable OAuth authentication";
    -		// Possible values for version are: 'development', 'experimental', 'dolibarr' or 'dolibarr_deprecated' or version
    +        // Possible values for version are: 'development', 'experimental', 'dolibarr' or 'dolibarr_deprecated' or version
             $this->version = 'dolibarr';
             $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
             // Name of image file used for this module.
    @@ -67,9 +67,11 @@ class modOauth extends DolibarrModules
             $this->config_page_url = array("oauth.php");
     
             // Dependencies
    -        $this->depends = array();
    -        $this->requiredby = array();
    -        $this->phpmin = array(5,1);                     // Minimum version of PHP required by module
    +        $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module                    // Minimum version of PHP required by module
             $this->need_dolibarr_version = array(3,7,-2);   // Minimum version of Dolibarr required by module
             $this->conflictwith = array();
             $this->langfiles = array("oauth");
    @@ -117,8 +119,6 @@ class modOauth extends DolibarrModules
             //                        'user'=>0);                     // 0=Menu for internal users, 1=external users, 2=both
     
             //$r++;
    -
    -
         }
     
     
    diff --git a/htdocs/core/modules/modOpenSurvey.class.php b/htdocs/core/modules/modOpenSurvey.class.php
    index fcee9f585aa..be0b67950d7 100644
    --- a/htdocs/core/modules/modOpenSurvey.class.php
    +++ b/htdocs/core/modules/modOpenSurvey.class.php
    @@ -23,7 +23,7 @@
      *      \ingroup    opensurvey
      *      \brief      Description and activation file for module OpenSurvey
      */
    -include_once(DOL_DOCUMENT_ROOT ."/core/modules/DolibarrModules.class.php");
    +include_once DOL_DOCUMENT_ROOT ."/core/modules/DolibarrModules.class.php";
     
     
     /**
    @@ -52,7 +52,7 @@ class modOpenSurvey extends DolibarrModules
     		// Family can be 'crm','financial','hr','projects','product','technic','other'
     		// It is used to group modules in module setup page
     		$this->family = "portal";
    -		$this->module_position = 40;
    +		$this->module_position = '40';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		// Module description used if translation string 'ModuleXXXDesc' not found (XXX is value MyModule)
    @@ -72,9 +72,11 @@ class modOpenSurvey extends DolibarrModules
     		//$this->dirs[1] = DOL_DATA_ROOT.'/mymodule/temp;
     
     		// Dependencies
    -		$this->depends = array();		// List of modules id that must be enabled if this module is enabled
    -		$this->requiredby = array();	// List of modules id to disable if this one is disabled
    -		$this->phpmin = array(4,1);					// Minimum version of PHP required by module
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(3,4,0);	// Minimum version of Dolibarr required by module
     
     		// Constants
    diff --git a/htdocs/core/modules/modPaybox.class.php b/htdocs/core/modules/modPaybox.class.php
    index 727e6723ce2..ba7851aad4a 100644
    --- a/htdocs/core/modules/modPaybox.class.php
    +++ b/htdocs/core/modules/modPaybox.class.php
    @@ -69,9 +69,11 @@ class modPayBox extends DolibarrModules
             $this->config_page_url = array("paybox.php@paybox");
     
             // Dependencies
    -        $this->depends = array();		// List of modules id that must be enabled if this module is enabled
    -        $this->requiredby = array();	// List of modules id to disable if this one is disabled
    -        $this->phpmin = array(4,1);					// Minimum version of PHP required by module
    +        $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->need_dolibarr_version = array(2,6);	// Minimum version of Dolibarr required by module
             $this->langfiles = array("paybox");
     
    diff --git a/htdocs/core/modules/modPaypal.class.php b/htdocs/core/modules/modPaypal.class.php
    index e713685691c..0d19696f2fc 100644
    --- a/htdocs/core/modules/modPaypal.class.php
    +++ b/htdocs/core/modules/modPaypal.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2011      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2011      Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -70,9 +70,11 @@ class modPaypal extends DolibarrModules
             $this->config_page_url = array("paypal.php@paypal");
     
             // Dependencies
    -        $this->depends = array();						// List of modules id that must be enabled if this module is enabled
    -        $this->requiredby = array('modPaypalPlus');		// List of modules id to disable if this one is disabled
    -        $this->phpmin = array(5,2);						// Minimum version of PHP required by module
    +        $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array('modPaypalPlus');	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->need_dolibarr_version = array(3,0);		// Minimum version of Dolibarr required by module
             $this->langfiles = array("paypal");
     
    @@ -105,21 +107,21 @@ class modPaypal extends DolibarrModules
             // Main menu entries
             $this->menus = array();			// List of menus to add
             $r=0;
    -        $this->menu[$r]=array(
    -        'fk_menu'=>'fk_mainmenu=billing,fk_leftmenu=customers_bills_payment',		    // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
    -        'mainmenu'=>'billing',
    -        'leftmenu'=>'customers_bills_payment_paypal',
    -        'type'=>'left',			                // This is a Left menu entry
    -        'titre'=>'PaypalImportPayment',
    -        'url'=>'/paypal/importpayments.php',
    -        'langs'=>'paypal',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
    -        'position'=>501,
    -        'enabled'=>'$conf->paypal->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 2',  // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
    -        'perms'=>'$user->rights->banque->consolidate',	// Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
    -        'target'=>'',
    -        'user'=>2
    +        /*$this->menu[$r]=array(
    +	        'fk_menu'=>'fk_mainmenu=billing,fk_leftmenu=customers_bills_payment',		    // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
    +	        'mainmenu'=>'billing',
    +	        'leftmenu'=>'customers_bills_payment_paypal',
    +	        'type'=>'left',			                // This is a Left menu entry
    +	        'titre'=>'PaypalImportPayment',
    +	        'url'=>'/paypal/importpayments.php',
    +	        'langs'=>'paypal',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
    +	        'position'=>501,
    +	        'enabled'=>'$conf->paypal->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 2',  // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
    +	        'perms'=>'$user->rights->banque->consolidate',	// Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
    +	        'target'=>'',
    +	        'user'=>2
             );				                // 0=Menu for internal users, 1=external users, 2=both
    -        $r++;
    +        $r++;*/
     
             // Add here entries to declare new menus
             // Example to declare the Top Menu entry:
    diff --git a/htdocs/core/modules/modPrelevement.class.php b/htdocs/core/modules/modPrelevement.class.php
    index 4d91c937d99..2753c7e76ab 100644
    --- a/htdocs/core/modules/modPrelevement.class.php
    +++ b/htdocs/core/modules/modPrelevement.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2011 Juanjo Menent 		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -48,7 +48,7 @@ class modPrelevement extends DolibarrModules
     		$this->numero = 57;
     
     		$this->family = "financial";
    -		$this->module_position = 520;
    +		$this->module_position = '52';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des Prelevements";
    @@ -63,9 +63,12 @@ class modPrelevement extends DolibarrModules
     		// Data directories to create when module is enabled
     		$this->dirs = array("/prelevement/temp","/prelevement/receipts");
     
    -		// Dependancies
    -		$this->depends = array("modFacture","modBanque");
    -		$this->requiredby = array();
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array("modFacture","modBanque");		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     
     		// Config pages
     		$this->config_page_url = array("prelevement.php");
    @@ -132,7 +135,6 @@ class modPrelevement extends DolibarrModules
     		// Menus
     		//-------
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
    -
     	}
     
     
    diff --git a/htdocs/core/modules/modPrinting.class.php b/htdocs/core/modules/modPrinting.class.php
    index 1aa36bdacce..7e16b26d8ab 100644
    --- a/htdocs/core/modules/modPrinting.class.php
    +++ b/htdocs/core/modules/modPrinting.class.php
    @@ -40,17 +40,17 @@ class modPrinting extends DolibarrModules
          *
          *  @param      DoliDB      $db      Database handler
          */
    -    function  __construct($db)
    +    function __construct($db)
         {
             $this->db = $db ;
             $this->numero = 64000;
             // Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
             // It is used to group modules in module setup page
             $this->family = "interface";
    -        $this->module_position = 520;
    +        $this->module_position = '52';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
             $this->name = preg_replace('/^mod/i','',get_class($this));
    -		// Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
    +        // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
             $this->description = "Enable Direct Printing System.";
             $this->version = 'dolibarr';    // 'development' or 'experimental' or 'dolibarr' or version
             $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
    @@ -66,9 +66,11 @@ class modPrinting extends DolibarrModules
             $this->config_page_url = array("printing.php@printing");
     
             // Dependencies
    -        $this->depends = array();
    -        $this->requiredby = array();
    -        $this->phpmin = array(5,1);                     // Minimum version of PHP required by module
    +        $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->need_dolibarr_version = array(3,7,-2);   // Minimum version of Dolibarr required by module
             $this->conflictwith = array();
             $this->langfiles = array("printing");
    @@ -115,7 +117,5 @@ class modPrinting extends DolibarrModules
                                     'user'=>0);                     // 0=Menu for internal users, 1=external users, 2=both
     
             $r++;
    -
    -
         }
     }
    diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php
    index c0eee3d2061..0c26dbea9fe 100644
    --- a/htdocs/core/modules/modProduct.class.php
    +++ b/htdocs/core/modules/modProduct.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012-2013 Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2014      Christophe Battarel	<contact@altairis.fr>
      * Copyright (C) 2014      Cedric Gross			<c.gross@kreiz-it.fr>
    @@ -50,7 +50,7 @@ class modProduct extends DolibarrModules
     		$this->numero = 50;
     
     		$this->family = "products";
    -		$this->module_position = 20;
    +		$this->module_position = '20';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Product management";
    @@ -65,8 +65,11 @@ class modProduct extends DolibarrModules
     		$this->dirs = array("/product/temp");
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array("modStock","modBarcode","modProductBatch");
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array("modStock","modBarcode","modProductBatch");	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     
     		// Config pages
     		$this->config_page_url = array("product.php@product");
    @@ -130,6 +133,13 @@ class modProduct extends DolibarrModules
     		$this->rights[$r][4] = 'export';
             $r++;
     
    +		$this->rights[$r][0] = 39;
    +		$this->rights[$r][1] = 'Ignore minimum price';
    +		$this->rights[$r][2] = 'r';
    +		$this->rights[$r][3] = 0;
    +		$this->rights[$r][4] = 'ignore_price_min_advance';
    +        $r++;
    +
             // Menus
             //-------
     
    diff --git a/htdocs/core/modules/modProductBatch.class.php b/htdocs/core/modules/modProductBatch.class.php
    index 91e8ddbae3c..55a800bd366 100644
    --- a/htdocs/core/modules/modProductBatch.class.php
    +++ b/htdocs/core/modules/modProductBatch.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013-2014 Cedric GROSS         <c.gross@kreiz-it.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -46,7 +46,7 @@ class modProductBatch extends DolibarrModules
     		$this->numero = 39000;
     
     		$this->family = "products";
    -		$this->module_position = 45;
    +		$this->module_position = '45';
     
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Batch number, eat-by and sell-by date management module";
    @@ -68,9 +68,11 @@ class modProductBatch extends DolibarrModules
     		$this->config_page_url = array("product_lot_extrafields.php@product");
     
     		// Dependencies
    -		$this->depends = array("modProduct","modStock","modExpedition","modFournisseur");		// List of modules id that must be enabled if this module is enabled. modExpedition is required to manage batch exit (by manual stock decrease on shipment), modSupplier to manage batch entry (after supplier order).
    -		$this->requiredby = array();	// List of modules id to disable if this one is disabled
    -		$this->phpmin = array(5,0);					// Minimum version of PHP required by module
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array("modProduct","modStock","modExpedition","modFournisseur");		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(3,0);	// Minimum version of Dolibarr required by module
     		$this->langfiles = array("productbatch");
     
    @@ -102,7 +104,6 @@ class modProductBatch extends DolibarrModules
     
     		// Exports
     		$r=0;
    -
     	}
     
     	/**
    diff --git a/htdocs/core/modules/modProjet.class.php b/htdocs/core/modules/modProjet.class.php
    index d38fc743de1..0fe29c2d209 100644
    --- a/htdocs/core/modules/modProjet.class.php
    +++ b/htdocs/core/modules/modProjet.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013	   Florian Henry        <florian.henry@open-concept.pro>
      * Copyright (C) 2014	   Charles-Fr BENKE	<charles.fr@benke.fr>
      *
    @@ -36,7 +36,6 @@ include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
      */
     class modProjet extends DolibarrModules
     {
    -
     	/**
     	 *   Constructor. Define names, constants, directories, boxes, permissions
     	 *
    @@ -50,7 +49,7 @@ class modProjet extends DolibarrModules
     		$this->numero = 400;
     
     		$this->family = "projects";
    -		$this->module_position = 10;
    +		$this->module_position = '10';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des projets";
    @@ -64,10 +63,12 @@ class modProjet extends DolibarrModules
     		// Data directories to create when module is enabled
     		$this->dirs = array("/projet/temp");
     
    -		// Dependancies
    -		$this->depends = array();
    -		$this->requiredby = array();
    -		$this->conflictwith = array();
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array('projects');
     
     		// Constants
    @@ -359,7 +360,7 @@ class modProjet extends DolibarrModules
     		$sql[] ="INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('beluga','project',".$conf->entity.")";
     		$sql[] ="DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = 'baleine' AND type = 'project' AND entity = ".$conf->entity;
     		$sql[] ="INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('baleine','project',".$conf->entity.")";
    -		
    +
     
     		return $this->_init($sql,$options);
     	}
    diff --git a/htdocs/core/modules/modPropale.class.php b/htdocs/core/modules/modPropale.class.php
    index c0701d3bfe2..c7bf0f6979f 100644
    --- a/htdocs/core/modules/modPropale.class.php
    +++ b/htdocs/core/modules/modPropale.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2010	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -49,7 +49,7 @@ class modPropale extends DolibarrModules
     		$this->numero = 20;
     
     		$this->family = "crm";
    -		$this->module_position = 20;
    +		$this->module_position = '20';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des propositions commerciales";
    @@ -63,9 +63,12 @@ class modPropale extends DolibarrModules
     		// Data directories to create when module is enabled
     		$this->dirs = array("/propale/temp");
     
    -		// Dependancies
    -		$this->depends = array("modSociete");
    -		$this->requiredby = array();
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array("modSociete");		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->config_page_url = array("propal.php");
     		$this->langfiles = array("propal","bills","companies","deliveries","products");
     
    @@ -280,6 +283,5 @@ class modPropale extends DolibarrModules
     		);
     
     		return $this->_init($sql,$options);
    -
     	}
     }
    diff --git a/htdocs/core/modules/modReceiptPrinter.class.php b/htdocs/core/modules/modReceiptPrinter.class.php
    index 19df7ca0726..0cb05499843 100644
    --- a/htdocs/core/modules/modReceiptPrinter.class.php
    +++ b/htdocs/core/modules/modReceiptPrinter.class.php
    @@ -40,14 +40,14 @@ class modReceiptPrinter extends DolibarrModules
          *
          *  @param      DoliDB      $db      Database handler
          */
    -    function  __construct($db)
    +    function __construct($db)
         {
             $this->db = $db ;
             $this->numero = 67000;
             // Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
             // It is used to group modules in module setup page
             $this->family = "interface";
    -        $this->module_position = 530;
    +        $this->module_position = '53';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
             $this->name = preg_replace('/^mod/i','',get_class($this));
             // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module)
    @@ -67,9 +67,11 @@ class modReceiptPrinter extends DolibarrModules
             $this->config_page_url = array("receiptprinter.php");
     
             // Dependencies
    -        $this->depends = array();
    -        $this->requiredby = array();
    -        $this->phpmin = array(5,1);                     // Minimum version of PHP required by module
    +        $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->need_dolibarr_version = array(3,9,-2);   // Minimum version of Dolibarr required by module
             $this->conflictwith = array();
             $this->langfiles = array("receiptprinter");
    @@ -117,8 +119,6 @@ class modReceiptPrinter extends DolibarrModules
             //                        'user'=>0);                     // 0=Menu for internal users, 1=external users, 2=both
     
             $r++;
    -
    -
         }
     
     
    @@ -141,5 +141,4 @@ class modReceiptPrinter extends DolibarrModules
                 );
             return $this->_init($sql,$options);
         }
    -
     }
    diff --git a/htdocs/core/modules/modResource.class.php b/htdocs/core/modules/modResource.class.php
    index 15b414947ef..7e68ac7a83e 100644
    --- a/htdocs/core/modules/modResource.class.php
    +++ b/htdocs/core/modules/modResource.class.php
    @@ -55,7 +55,7 @@ class modResource extends DolibarrModules
     		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
     		// It is used to group modules in module setup page
     		$this->family = "projects";
    -		$this->module_position = 20;
    +		$this->module_position = '20';
     		// Module label (no space allowed)
     		// used if translation string 'ModuleXXXName' not found
     		// (where XXX is value of numeric property 'numero' of module)
    @@ -95,7 +95,7 @@ class modResource extends DolibarrModules
     		// List of modules id to disable if this one is disabled
     		$this->requiredby = array('modPlace');
     		// Minimum version of PHP required by module
    -		$this->phpmin = array(5, 3);
    +		$this->phpmin = array(5, 4);
     
     		$this->langfiles = array("resource"); // langfiles@resource
     		// Constants
    @@ -285,7 +285,6 @@ class modResource extends DolibarrModules
     		$this->import_regex_array[$r]=array('s.datec'=>'^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]( [0-9][0-9]:[0-9][0-9]:[0-9][0-9])?$');
     		$this->import_examplevalues_array[$r]=array('r.ref'=>"REF1",'r.fk_code_type_resource'=>"Code from dictionary resource type",'r.datec'=>"2017-01-01 or 2017-01-01 12:30:00");
     		$this->import_updatekeys_array[$r]=array('r.rf'=>'ResourceFormLabel_ref');
    -
     	}
     
     	/**
    diff --git a/htdocs/core/modules/modSalaries.class.php b/htdocs/core/modules/modSalaries.class.php
    index 52c417c0848..056b2c19785 100644
    --- a/htdocs/core/modules/modSalaries.class.php
    +++ b/htdocs/core/modules/modSalaries.class.php
    @@ -3,9 +3,9 @@
      * Copyright (C) 2004-2014	Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014		Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2014		Alexandre Spangaro	 <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2014		Alexandre Spangaro	 <aspangaro@zendsi.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,11 +23,11 @@
      */
     
     /**
    - * 		\defgroup   salaries		Module salaries
    - * 		\brief      Module to include salaries management
    - *      \file       htdocs/core/modules/modSalaries.class.php
    - *      \ingroup    salaries
    - *      \brief      File to activate module salaries
    + *  \defgroup   salaries		Module salaries
    + *  \brief      Module to include salaries management
    + *  \file       htdocs/core/modules/modSalaries.class.php
    + *  \ingroup    salaries
    + *  \brief      File to activate module salaries
      */
     include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
     
    @@ -72,9 +72,11 @@ class modSalaries extends DolibarrModules
     		$this->config_page_url = array();
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array();
    -		$this->conflictwith = array();
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("salaries","bills");
     
     		// Constants
    @@ -161,7 +163,7 @@ class modSalaries extends DolibarrModules
     	 *		The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
     	 *		It also creates data directories
     	 *
    -     *      @param      string	$options    Options when enabling module ('', 'noboxes')
    +	 *      @param      string	$options    Options when enabling module ('', 'noboxes')
     	 *      @return     int             	1 if OK, 0 if KO
     	 */
     	function init($options='')
    diff --git a/htdocs/core/modules/modService.class.php b/htdocs/core/modules/modService.class.php
    index 90b530df262..89bb423ebd7 100644
    --- a/htdocs/core/modules/modService.class.php
    +++ b/htdocs/core/modules/modService.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -48,7 +48,7 @@ class modService extends DolibarrModules
     		$this->numero = 53;
     
     		$this->family = "products";
    -		$this->module_position = 30;
    +		$this->module_position = '30';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Service management";
    @@ -62,9 +62,12 @@ class modService extends DolibarrModules
     		// Data directories to create when module is enabled
     		$this->dirs = array("/product/temp");
     
    -		// Dependancies
    -		$this->depends = array();
    -		$this->requiredby = array();
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     
     		// Config pages
     		$this->config_page_url = array("product.php@product");
    diff --git a/htdocs/core/modules/modSkype.class.php b/htdocs/core/modules/modSocialNetworks.class.php
    similarity index 62%
    rename from htdocs/core/modules/modSkype.class.php
    rename to htdocs/core/modules/modSocialNetworks.class.php
    index d84520318a3..137547bfb15 100644
    --- a/htdocs/core/modules/modSkype.class.php
    +++ b/htdocs/core/modules/modSocialNetworks.class.php
    @@ -1,5 +1,6 @@
     <?php
     /* Copyright (C) 2013   Alexandre Spangaro  <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2014   Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -16,18 +17,18 @@
      */
     
     /**
    - * 	\defgroup   Skype   Module skype
    - *  \brief      Add a skype button.
    - *  \file       htdocs/core/modules/modSkype.class.php
    - *  \ingroup    Skype
    - *  \brief      Description and activation file for module skype
    + * 	\defgroup   SocialNetworks   Module SocialNetworks
    + *  \brief      Add a SocialNetworks button.
    + *  \file       htdocs/core/modules/modSocialNetworks.class.php
    + *  \ingroup    socialnetworks
    + *  \brief      Description and activation file for module SocialNetworks
      */
     include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
     
     /**
    - *	Class to describe a Cron module
    + *	Class to describe a SocialNetworks module
      */
    -class modSkype extends DolibarrModules
    +class modSocialNetworks extends DolibarrModules
     {
     
         /**
    @@ -40,50 +41,47 @@ class modSkype extends DolibarrModules
         	global $langs,$conf;
     
             $this->db = $db;
    -        $this->numero = 3100;
    +        $this->numero = 3400;
     
     		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
     		// It is used to group modules in module setup page
             $this->family = "interface";
    +        // Module position in the family on 2 digits ('01', '10', '20', ...)
    +        $this->module_position = '20';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
             $this->name = preg_replace('/^mod/i','',get_class($this));
    -        $this->description = "Enable Skype links into contacts";
    +        $this->description = "Enable Social Networks fields into third parties and addresses (skype, twitter, facebook, ...)";
     		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
             $this->version = 'dolibarr';
             // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
             $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
             // Name of image file used for this module.
    -        $this->picto='skype';
    +        $this->picto='generic';
     
             // Data directories to create when module is enabled
             $this->dirs = array();
     
             // Config pages
    -        //-------------
    -        $this->config_page_url = array();
    +        $this->config_page_url = array("socialnetworks.php");
     
    -        // Dependancies
    -        //-------------
    -	    $this->hidden = ! empty($conf->global->MODULE_SKYPE_DISABLED);	// A condition to disable module
    -	    $this->depends = array('modSociete');		// List of modules id that must be enabled if this module is enabled
    -        $this->requiredby = array();	// List of modules id to disable if this one is disabled
    -	    $this->conflictwith = array();	// List of modules id this module is in conflict with
    +        // Dependencies
    +        $this->hidden = ! empty($conf->global->MODULE_SOCIALNETWORKS_DISABLED);	// A condition to hide module
    +		$this->depends = array('modSociete');	// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->langfiles = array();
     
             // Constants
    -        //-----------
     
     
             // New pages on tabs
    -        // -----------------
             $this->tabs = array();
     
             // Boxes
    -        //------
             $this->boxes = array();
     
             // Main menu entries
    -        //------------------
             $this->menu = array();
         }
     }
    diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php
    index 6efca941b47..35dd83a83f4 100644
    --- a/htdocs/core/modules/modSociete.class.php
    +++ b/htdocs/core/modules/modSociete.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012-2014 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -49,7 +49,7 @@ class modSociete extends DolibarrModules
     		$this->numero = 1;
     
     		$this->family = "crm";
    -		$this->module_position = 10;
    +		$this->module_position = '10';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des sociétés et contacts";
    @@ -66,8 +66,11 @@ class modSociete extends DolibarrModules
     		$this->dirs = array("/societe/temp");
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array("modExpedition","modFacture","modFournisseur","modFicheinter","modPropale","modContrat","modCommande");
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array("modExpedition","modFacture","modFournisseur","modFicheinter","modPropale","modContrat","modCommande");	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("companies",'bills');
     
     		// Constants
    diff --git a/htdocs/core/modules/modStock.class.php b/htdocs/core/modules/modStock.class.php
    index ff767dd3658..4cdc5aabf83 100644
    --- a/htdocs/core/modules/modStock.class.php
    +++ b/htdocs/core/modules/modStock.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012	   Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -48,7 +48,7 @@ class modStock extends DolibarrModules
     		$this->numero = 52;
     
     		$this->family = "products";
    -		$this->module_position = 40;
    +		$this->module_position = '40';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des stocks";
    @@ -65,16 +65,19 @@ class modStock extends DolibarrModules
     		$this->config_page_url = array("stock.php");
     
     		// Dependencies
    -		$this->depends = array("modProduct");
    -		$this->requiredby = array("modProductBatch");
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array("modProduct");		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array("modProductBatch");	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("stocks");
     
     		// Constants
     		$this->const = array();
     		$r=0;
    -		
    +
     		$this->const[$r] = array('STOCK_ALLOW_NEGATIVE_TRANSFER','chaine','1','',1);
    -		
    +
     		$r++;
     		$this->const[$r][0] = "STOCK_ADDON_PDF";
     		$this->const[$r][1] = "chaine";
    @@ -170,7 +173,6 @@ class modStock extends DolibarrModules
     		$this->rights[9][3] = 0; 					// Permission by default for new user (0/1)
     		$this->rights[9][4] = 'inventory_advance';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
     		$this->rights[9][5] = 'changePMP';			// In php code, permission will be checked by test if ($user->rights->permkey->level1->level2)
    -
     		}
     
     		// Main menu entries
    @@ -270,7 +272,7 @@ class modStock extends DolibarrModules
     			'e.rowid'=>'IdWarehouse','e.ref'=>'LocationSummary','e.description'=>'DescWareHouse','e.lieu'=>'LieuWareHouse','e.address'=>'Address','e.zip'=>'Zip',
     			'e.town'=>'Town','p.rowid'=>"ProductId",'p.ref'=>"Ref",'p.fk_product_type'=>"Type",'p.label'=>"Label",'p.description'=>"Description",'p.note'=>"Note",
     			'p.price'=>"Price",'p.tva_tx'=>'VAT','p.tosell'=>"OnSell",'p.tobuy'=>'OnBuy','p.duration'=>"Duration",'p.datec'=>'DateCreation',
    -			'p.tms'=>'DateModification','sm.rowid'=>'MovementId','sm.value'=>'Qty','sm.datem'=>'DateMovement','sm.label'=>'LabelMovement',
    +			'p.tms'=>'DateModification','sm.rowid'=>'MovementId','sm.value'=>'Qty','sm.datem'=>'DateMovement','sm.label'=>'MovementLabel',
     			'sm.inventorycode'=>'InventoryCode'
     		);
     		$this->export_TypeFields_array[$r]=array(
    @@ -345,10 +347,9 @@ class modStock extends DolibarrModules
     		$this->import_run_sql_after_array[$r]=array(    // Because we may change data that are denormalized, we must update dernormalized data after.
     		    'UPDATE llx_product p SET p.stock= (SELECT SUM(ps.reel) FROM llx_product_stock ps WHERE ps.fk_product = p.rowid);'
     		);
    -
     	}
    -	
    -	
    +
    +
     	/**
     	 *		Function called when module is enabled.
     	 *		The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
    diff --git a/htdocs/core/modules/modStripe.class.php b/htdocs/core/modules/modStripe.class.php
    index ac11e53e733..9a1584da477 100644
    --- a/htdocs/core/modules/modStripe.class.php
    +++ b/htdocs/core/modules/modStripe.class.php
    @@ -65,10 +65,11 @@ class modStripe extends DolibarrModules
             // Data directories to create when module is enabled.
             $this->dirs = array();
     
    -        // Config pages. Put here list of php page names stored in admmin directory used to setup module.
    +        // Config pages. Put here list of php page names stored in admin directory used to setup module.
             $this->config_page_url = array("stripe.php@stripe");
     
             // Dependencies
    +        $this->hidden = false;			// A condition to hide module
             $this->depends = array();		// List of modules id that must be enabled if this module is enabled
             $this->requiredby = array();	// List of modules id to disable if this one is disabled
             $this->phpmin = array(5,4);					// Minimum version of PHP required by module
    @@ -91,7 +92,7 @@ class modStripe extends DolibarrModules
     
             // Main menu entries
             $r=0;
    -        $this->menu[$r]=array(
    +       /* $this->menu[$r]=array(
             	'fk_menu'=>'fk_mainmenu=billing,fk_leftmenu=customers_bills_payment',		    // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
     	        'mainmenu'=>'billing',
             	'leftmenu'=>'customers_bills_payment_stripe',
    @@ -105,7 +106,7 @@ class modStripe extends DolibarrModules
     	        'target'=>'',
     	        'user'=>2
             );				                // 0=Menu for internal users, 1=external users, 2=both
    -        $r++;
    +        $r++;*/
     
             $this->menu[$r] = array(
             	'fk_menu'=>'fk_mainmenu=bank',
    @@ -130,7 +131,7 @@ class modStripe extends DolibarrModules
     			'url' => '/stripe/charge.php',
     			'langs' => 'stripe',
     			'position' => 102,
    -			'enabled' => '$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 2',
    +			'enabled' => '$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',
     			'perms' => '$user->rights->banque->lire',
     			'target' => '',
     			'user' => 0
    @@ -144,7 +145,7 @@ class modStripe extends DolibarrModules
     			'url' => '/stripe/transaction.php',
     			'langs' => 'stripe',
     			'position' => 102,
    -			'enabled' => '$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 2',
    +			'enabled' => '$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',
     			'perms' => '$user->rights->banque->lire',
     			'target' => '',
     			'user' => 0
    diff --git a/htdocs/core/modules/modSupplierProposal.class.php b/htdocs/core/modules/modSupplierProposal.class.php
    index b1881f11c71..570680b163b 100644
    --- a/htdocs/core/modules/modSupplierProposal.class.php
    +++ b/htdocs/core/modules/modSupplierProposal.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -32,7 +32,7 @@ include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
     
     
     /**
    - *	Class to describe and enable module AskPriceSupllier
    + *	Class to describe and enable module SupplierProposal
      */
     class modSupplierProposal extends DolibarrModules
     {
    @@ -57,13 +57,19 @@ class modSupplierProposal extends DolibarrModules
     
     		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
     		$this->picto='supplier_proposal';
    -
    +        
    +		// Data directories to create when module is enabled.
     		$this->dirs = array();
    +		
    +		 // Config pages. Put here list of php page names stored in admin directory used to setup module.
    +        $this->config_page_url = array("supplier_proposal.php");
     
    -		// Dependancies
    -		$this->depends = array('modFournisseur');
    -		$this->requiredby = array();
    -		$this->config_page_url = array("supplier_proposal.php");
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array('modFournisseur');		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("supplier_proposal");
     
     		// Constants
    @@ -251,5 +257,4 @@ class modSupplierProposal extends DolibarrModules
     
     	    return $this->_remove($sql, $options);
     	}
    -
     }
    \ No newline at end of file
    diff --git a/htdocs/core/modules/modSyslog.class.php b/htdocs/core/modules/modSyslog.class.php
    index b9db018a1c3..0a7e69ec2fe 100644
    --- a/htdocs/core/modules/modSyslog.class.php
    +++ b/htdocs/core/modules/modSyslog.class.php
    @@ -67,8 +67,11 @@ class modSyslog extends DolibarrModules
     		$this->config_page_url = array("syslog.php");
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array();
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     
     		// Constants
     		$this->const = array();
    @@ -82,20 +85,20 @@ class modSyslog extends DolibarrModules
     
     		// Cronjobs
     		$this->cronjobs = array(
    -		    0=>array(
    -		    	'label'=>'CompressSyslogs',
    -		    	'jobtype'=>'method',
    -		    	'class'=>'core/class/utils.class.php',
    -		    	'objectname'=>'Utils',
    -		    	'method'=>'compressSyslogs',
    -		    	'parameters'=>'',
    -		    	'comment'=>'Compress and archive log files. Warning: batch must be run with same account than your web server to avoid to get log files with different owner than required by web server. Another solution is to set web server Operating System group as the group of directory documents and set GROUP permission "rws" on this directory so log files will always have the group and permissions of the web server Operating System group',
    -		    	'frequency'=>1,
    -		    	'unitfrequency'=> 3600 * 24,
    -		    	'priority'=>50,
    -		    	'status'=>0,
    -		    	'test'=>true
    -		    )
    +			0 => array(
    +				'label' => 'CompressSyslogs',
    +				'jobtype' => 'method',
    +				'class' => 'core/class/utils.class.php',
    +				'objectname' => 'Utils',
    +				'method' => 'compressSyslogs',
    +				'parameters' => '',
    +				'comment' => 'Compress and archive log files. Warning: batch must be run with same account than your web server to avoid to get log files with different owner than required by web server. Another solution is to set web server Operating System group as the group of directory documents and set GROUP permission "rws" on this directory so log files will always have the group and permissions of the web server Operating System group',
    +				'frequency' => 1,
    +				'unitfrequency' => 3600 * 24,
    +				'priority' => 50,
    +				'status' => 0,
    +				'test' => true
    +			)
     		);
     	}
     }
    diff --git a/htdocs/core/modules/modTakePos.class.php b/htdocs/core/modules/modTakePos.class.php
    new file mode 100644
    index 00000000000..4404ee9de63
    --- /dev/null
    +++ b/htdocs/core/modules/modTakePos.class.php
    @@ -0,0 +1,326 @@
    +<?php
    +/* Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2018 SuperAdmin
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * 	\defgroup   takepos     Module TakePos
    + *  \brief      TakePos module descriptor.
    + *
    + *  \file       htdocs/takepos/core/modules/modTakePos.class.php
    + *  \ingroup    takepos
    + *  \brief      Description and activation file for module TakePos
    + */
    +include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
    +
    +
    +/**
    + *  Class to describe and enable module TakePos
    + */
    +class modTakePos extends DolibarrModules
    +{
    +	/**
    +	 * Constructor. Define names, constants, directories, boxes, permissions
    +	 *
    +	 * @param DoliDB $db Database handler
    +	 */
    +	public function __construct($db)
    +	{
    +        global $langs,$conf;
    +
    +        $this->db = $db;
    +
    +		// Id for module (must be unique).
    +		// Use here a free id (See in Home -> System information -> Dolibarr for list of used modules id).
    +		$this->numero = 50150;
    +		// Key text used to identify module (for permissions, menus, etc...)
    +		$this->rights_class = 'takepos';
    +
    +		// Family can be 'crm','financial','hr','projects','products','ecm','technic','interface','other'
    +		// It is used to group modules by family in module setup page
    +		$this->family = "portal";
    +		// Module position in the family on 2 digits ('01', '10', '20', ...)
    +		$this->module_position = '90';
    +		// Gives the possibility to the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this)
    +		//$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily")));
    +
    +		// Module label (no space allowed), used if translation string 'ModuleTakePosName' not found (MyModue is name of module).
    +		$this->name = preg_replace('/^mod/i','',get_class($this));
    +		// Module description, used if translation string 'ModuleTakePosDesc' not found (MyModue is name of module).
    +		$this->description = "Point of sales module (Touch Screen POS)";
    +		// Used only if file README.md and README-LL.md not found.
    +		$this->descriptionlong = "Point Of Sales (compliant with touch screen)";
    +
    +		// Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z'
    +		$this->version = 'experimental';
    +		// Key used in llx_const table to save module status enabled/disabled (where TAKEPOS is value of property name of module in uppercase)
    +		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
    +		// Name of image file used for this module.
    +		// If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue'
    +		// If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module'
    +		$this->picto='list';
    +
    +		// Defined all module parts (triggers, login, substitutions, menus, css, etc...)
    +		// for default path (eg: /takepos/core/xxxxx) (0=disable, 1=enable)
    +		// for specific path of parts (eg: /takepos/core/modules/barcode)
    +		// for specific css file (eg: /takepos/css/takepos.css.php)
    +		$this->module_parts = array(
    +		                        	'triggers' => 0,                                 	// Set this to 1 if module has its own trigger directory (core/triggers)
    +									'login' => 0,                                    	// Set this to 1 if module has its own login method file (core/login)
    +									'substitutions' => 1,                            	// Set this to 1 if module has its own substitution function file (core/substitutions)
    +									'menus' => 0,                                    	// Set this to 1 if module has its own menus handler directory (core/menus)
    +									'theme' => 0,                                    	// Set this to 1 if module has its own theme directory (theme)
    +		                        	'tpl' => 0,                                      	// Set this to 1 if module overwrite template dir (core/tpl)
    +									'barcode' => 0,                                  	// Set this to 1 if module has its own barcode directory (core/modules/barcode)
    +									'models' => 0,                                   	// Set this to 1 if module has its own models directory (core/modules/xxx)
    +									'hooks' => array('data'=>array('invoicecard'), 'entity'=>'0') 	// Set here all hooks context managed by module. To find available hook context, make a "grep -r '>initHooks(' *" on source code. You can also set hook context 'all'
    +		                        );
    +
    +		// Data directories to create when module is enabled.
    +		// Example: this->dirs = array("/takepos/temp","/takepos/subdir");
    +		$this->dirs = array();
    +
    +		// Config pages. Put here list of php page, stored into takepos/admin directory, to use to setup module.
    +		$this->config_page_url = array("setup.php@takepos");
    +
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array('always1'=>"modBanque", 'always2'=>"modFacture", 'always3'=>"modProduct", 'always4'=>'modCategorie', 'FR1'=>'modBlockedLog');			// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->langfiles = array("cashdesk");
    +		$this->phpmin = array(5,43);					// Minimum version of PHP required by module
    +		$this->need_dolibarr_version = array(4,0);	// Minimum version of Dolibarr required by module
    +		$this->warnings_activation = array();                     // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    +		$this->warnings_activation_ext = array();                 // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    +		//$this->automatic_activation = array('FR'=>'TakePosWasAutomaticallyActivatedBecauseOfYourCountryChoice');
    +		//$this->always_enabled = true;								// If true, can't be disabled
    +
    +		// Constants
    +		// List of particular constants to add when module is enabled (key, 'chaine', value, desc, visible, 'current' or 'allentities', deleteonunactive)
    +		// Example: $this->const=array(0=>array('TAKEPOS_MYNEWCONST1','chaine','myvalue','This is a constant to add',1),
    +		//                             1=>array('TAKEPOS_MYNEWCONST2','chaine','myvalue','This is another constant to add',0, 'current', 1)
    +		// );
    +		$this->const = array(
    +			//1=>array('TAKEPOS_MYCONSTANT', 'chaine', 'avalue', 'This is a constant to add', 1, 'allentities', 1)
    +		);
    +
    +
    +		if (! isset($conf->takepos) || ! isset($conf->takepos->enabled))
    +		{
    +			$conf->takepos=new stdClass();
    +			$conf->takepos->enabled=0;
    +		}
    +
    +
    +		// Array to add new pages in new tabs
    +        $this->tabs = array();
    +		// Example:
    +		// $this->tabs[] = array('data'=>'objecttype:+tabname1:Title1:mylangfile@takepos:$user->rights->takepos->read:/takepos/mynewtab1.php?id=__ID__');  					// To add a new tab identified by code tabname1
    +        // $this->tabs[] = array('data'=>'objecttype:+tabname2:SUBSTITUTION_Title2:mylangfile@takepos:$user->rights->othermodule->read:/takepos/mynewtab2.php?id=__ID__',  	// To add another new tab identified by code tabname2. Label will be result of calling all substitution functions on 'Title2' key.
    +        // $this->tabs[] = array('data'=>'objecttype:-tabname:NU:conditiontoremove');                                                     										// To remove an existing tab identified by code tabname
    +        //
    +        // Where objecttype can be
    +		// 'categories_x'	  to add a tab in category view (replace 'x' by type of category (0=product, 1=supplier, 2=customer, 3=member)
    +		// 'contact'          to add a tab in contact view
    +		// 'contract'         to add a tab in contract view
    +		// 'group'            to add a tab in group view
    +		// 'intervention'     to add a tab in intervention view
    +		// 'invoice'          to add a tab in customer invoice view
    +		// 'invoice_supplier' to add a tab in supplier invoice view
    +		// 'member'           to add a tab in fundation member view
    +		// 'opensurveypoll'	  to add a tab in opensurvey poll view
    +		// 'order'            to add a tab in customer order view
    +		// 'order_supplier'   to add a tab in supplier order view
    +		// 'payment'		  to add a tab in payment view
    +		// 'payment_supplier' to add a tab in supplier payment view
    +		// 'product'          to add a tab in product view
    +		// 'propal'           to add a tab in propal view
    +		// 'project'          to add a tab in project view
    +		// 'stock'            to add a tab in stock view
    +		// 'thirdparty'       to add a tab in third party view
    +		// 'user'             to add a tab in user view
    +
    +
    +        // Dictionaries
    +		$this->dictionaries=array();
    +        /* Example:
    +        $this->dictionaries=array(
    +            'langs'=>'mylangfile@takepos',
    +            'tabname'=>array(MAIN_DB_PREFIX."table1",MAIN_DB_PREFIX."table2",MAIN_DB_PREFIX."table3"),		// List of tables we want to see into dictonnary editor
    +            'tablib'=>array("Table1","Table2","Table3"),													// Label of tables
    +            'tabsql'=>array('SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table1 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table2 as f','SELECT f.rowid as rowid, f.code, f.label, f.active FROM '.MAIN_DB_PREFIX.'table3 as f'),	// Request to select fields
    +            'tabsqlsort'=>array("label ASC","label ASC","label ASC"),																					// Sort order
    +            'tabfield'=>array("code,label","code,label","code,label"),																					// List of fields (result of select to show dictionary)
    +            'tabfieldvalue'=>array("code,label","code,label","code,label"),																				// List of fields (list of fields to edit a record)
    +            'tabfieldinsert'=>array("code,label","code,label","code,label"),																			// List of fields (list of fields for insert)
    +            'tabrowid'=>array("rowid","rowid","rowid"),																									// Name of columns with primary key (try to always name it 'rowid')
    +            'tabcond'=>array($conf->takepos->enabled,$conf->takepos->enabled,$conf->takepos->enabled)												// Condition to show each dictionary
    +        );
    +        */
    +
    +
    +        // Boxes/Widgets
    +		// Add here list of php file(s) stored in takepos/core/boxes that contains class to show a widget.
    +        $this->boxes = array(
    +        	//0=>array('file'=>'takeposwidget1.php@takepos','note'=>'Widget provided by TakePos','enabledbydefaulton'=>'Home'),
    +        	//1=>array('file'=>'takeposwidget2.php@takepos','note'=>'Widget provided by TakePos'),
    +        	//2=>array('file'=>'takeposwidget3.php@takepos','note'=>'Widget provided by TakePos')
    +        );
    +
    +
    +		// Cronjobs (List of cron jobs entries to add when module is enabled)
    +		// unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week
    +		$this->cronjobs = array(
    +			//0=>array('label'=>'MyJob label', 'jobtype'=>'method', 'class'=>'/takepos/class/myobject.class.php', 'objectname'=>'MyObject', 'method'=>'doScheduledJob', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true)
    +		);
    +		// Example: $this->cronjobs=array(0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>true),
    +		//                                1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>true)
    +		// );
    +
    +
    +		// Permissions
    +		$this->rights = array();		// Permission array used by this module
    +
    +		/*$r=0;
    +		$this->rights[$r][0] = $this->numero + $r;	// Permission id (must not be already used)
    +		$this->rights[$r][1] = 'Read myobject of TakePos';	// Permission label
    +		$this->rights[$r][3] = 1; 					// Permission by default for new user (0/1)
    +		$this->rights[$r][4] = 'read';				// In php code, permission will be checked by test if ($user->rights->takepos->level1->level2)
    +		$this->rights[$r][5] = '';				    // In php code, permission will be checked by test if ($user->rights->takepos->level1->level2)
    +
    +		$r++;
    +		$this->rights[$r][0] = $this->numero + $r;	// Permission id (must not be already used)
    +		$this->rights[$r][1] = 'Create/Update myobject of TakePos';	// Permission label
    +		$this->rights[$r][3] = 1; 					// Permission by default for new user (0/1)
    +		$this->rights[$r][4] = 'write';				// In php code, permission will be checked by test if ($user->rights->takepos->level1->level2)
    +		$this->rights[$r][5] = '';				    // In php code, permission will be checked by test if ($user->rights->takepos->level1->level2)
    +
    +		$r++;
    +		$this->rights[$r][0] = $this->numero + $r;	// Permission id (must not be already used)
    +		$this->rights[$r][1] = 'Delete myobject of TakePos';	// Permission label
    +		$this->rights[$r][3] = 1; 					// Permission by default for new user (0/1)
    +		$this->rights[$r][4] = 'delete';				// In php code, permission will be checked by test if ($user->rights->takepos->level1->level2)
    +		$this->rights[$r][5] = '';				    // In php code, permission will be checked by test if ($user->rights->takepos->level1->level2)
    +		*/
    +
    +		// Main menu entries
    +		$this->menu = array();			// List of menus to add
    +		$r=0;
    +
    +		// Add here entries to declare new menus
    +
    +		/* BEGIN MODULEBUILDER TOPMENU */
    +		$this->menu[$r++]=array('fk_menu'=>'',			                // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
    +								'type'=>'top',			                // This is a Top menu entry
    +								'titre'=>'PointOfSale',
    +								'mainmenu'=>'takepos',
    +								'leftmenu'=>'',
    +								'url'=>'/takepos/takepos.php',
    +								'langs'=>'cashdesk',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
    +								'position'=>1000+$r,
    +								'enabled'=>'$conf->takepos->enabled',	// Define condition to show or hide menu entry. Use '$conf->takepos->enabled' if entry must be visible if module is enabled.
    +								'perms'=>'1',			                // Use 'perms'=>'$user->rights->takepos->level1->level2' if you want your menu with a permission rules
    +								'target'=>'takepos',
    +								'user'=>2);				                // 0=Menu for internal users, 1=external users, 2=both
    +
    +		/* END MODULEBUILDER TOPMENU */
    +
    +		/* BEGIN MODULEBUILDER LEFTMENU MYOBJECT
    +		$this->menu[$r++]=array(	'fk_menu'=>'fk_mainmenu=takepos',	    // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
    +								'type'=>'left',			                // This is a Left menu entry
    +								'titre'=>'List MyObject',
    +								'mainmenu'=>'takepos',
    +								'leftmenu'=>'takepos_myobject_list',
    +								'url'=>'/takepos/myobject_list.php',
    +								'langs'=>'cashdesk',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
    +								'position'=>1000+$r,
    +								'enabled'=>'$conf->takepos->enabled',  // Define condition to show or hide menu entry. Use '$conf->takepos->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
    +								'perms'=>'1',			                // Use 'perms'=>'$user->rights->takepos->level1->level2' if you want your menu with a permission rules
    +								'target'=>'',
    +								'user'=>2);				                // 0=Menu for internal users, 1=external users, 2=both
    +		$this->menu[$r++]=array(	'fk_menu'=>'fk_mainmenu=takepos,fk_leftmenu=takepos',	    // '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
    +								'type'=>'left',			                // This is a Left menu entry
    +								'titre'=>'New MyObject',
    +								'mainmenu'=>'takepos',
    +								'leftmenu'=>'takepos_myobject_new',
    +								'url'=>'/takepos/myobject_page.php?action=create',
    +								'langs'=>'cashdesk',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
    +								'position'=>1000+$r,
    +								'enabled'=>'$conf->takepos->enabled',  // Define condition to show or hide menu entry. Use '$conf->takepos->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected.
    +								'perms'=>'1',			                // Use 'perms'=>'$user->rights->takepos->level1->level2' if you want your menu with a permission rules
    +								'target'=>'',
    +								'user'=>2);				                // 0=Menu for internal users, 1=external users, 2=both
    +		END MODULEBUILDER LEFTMENU MYOBJECT */
    +
    +
    +		// Exports
    +		$r=1;
    +
    +		/* BEGIN MODULEBUILDER EXPORT MYOBJECT */
    +		/*
    +		$langs->load("cashdesk");
    +		$this->export_code[$r]=$this->rights_class.'_'.$r;
    +		$this->export_label[$r]='MyObjectLines';	// Translation key (used only if key ExportDataset_xxx_z not found)
    +		$this->export_icon[$r]='myobject@takepos';
    +		$keyforclass = 'MyObject'; $keyforclassfile='/mymobule/class/myobject.class.php'; $keyforelement='myobject';
    +		include DOL_DOCUMENT_ROOT.'/core/commonfieldsinexport.inc.php';
    +		$keyforselect='myobject'; $keyforaliasextra='extra'; $keyforelement='myobject';
    +		include DOL_DOCUMENT_ROOT.'/core/extrafieldsinexport.inc.php';
    +		//$this->export_dependencies_array[$r]=array('mysubobject'=>'ts.rowid', 't.myfield'=>array('t.myfield2','t.myfield3')); // To force to activate one or several fields if we select some fields that need same (like to select a unique key if we ask a field of a child to avoid the DISTINCT to discard them, or for computed field than need several other fields)
    +		$this->export_sql_start[$r]='SELECT DISTINCT ';
    +		$this->export_sql_end[$r]  =' FROM '.MAIN_DB_PREFIX.'myobject as t';
    +		$this->export_sql_end[$r] .=' WHERE 1 = 1';
    +		$this->export_sql_end[$r] .=' AND t.entity IN ('.getEntity('myobject').')';
    +		$r++; */
    +		/* END MODULEBUILDER EXPORT MYOBJECT */
    +	}
    +
    +	/**
    +	 *	Function called when module is enabled.
    +	 *	The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
    +	 *	It also creates data directories
    +	 *
    +     *	@param      string	$options    Options when enabling module ('', 'noboxes')
    +	 *	@return     int             	1 if OK, 0 if KO
    +	 */
    +	public function init($options='')
    +	{
    +		$this->_load_tables('/takepos/sql/');
    +
    +		$sql = array();
    +
    +		// Remove permissions and default values
    +		$this->remove($options);
    +
    +		return $this->_init($sql, $options);
    +	}
    +
    +	/**
    +	 *	Function called when module is disabled.
    +	 *	Remove from database constants, boxes and permissions from Dolibarr database.
    +	 *	Data directories are not deleted
    +	 *
    +	 *	@param      string	$options    Options when enabling module ('', 'noboxes')
    +	 *	@return     int             	1 if OK, 0 if KO
    +	 */
    +	public function remove($options = '')
    +	{
    +		$sql = array();
    +
    +		return $this->_remove($sql, $options);
    +	}
    +}
    diff --git a/htdocs/core/modules/modTax.class.php b/htdocs/core/modules/modTax.class.php
    index f3fa7d4e9db..ee04d79ebcb 100644
    --- a/htdocs/core/modules/modTax.class.php
    +++ b/htdocs/core/modules/modTax.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2012	Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2012	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -67,9 +67,11 @@ class modTax extends DolibarrModules
     		$this->config_page_url = array("taxes.php");
     
     		// Dependencies
    -		$this->depends = array();
    -		$this->requiredby = array();
    -		$this->conflictwith = array();
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("compta","bills");
     
     		// Constants
    @@ -117,13 +119,10 @@ class modTax extends DolibarrModules
     
     
     		// Menus
    -		//-------
    -
     		$this->menu = 1;        // This module add menu entries. They are coded into menu manager.
     
     
     		// Exports
    -		//--------
     		$r=0;
     
     		$r++;
    @@ -175,7 +174,6 @@ class modTax extends DolibarrModules
     		$this->import_examplevalues_array[$r]=array('t.label'=>"VAT Payment 1st quarter 2016",'t.fk_typepayment'=>"CHQ (must be id or code found into dictionary)",
     		    't.datep'=>"2016-04-02", 't.datev'=>"2016-03-31", 't.amount'=>1000, 't.num_payment'=>'123456'
     		);
    -
     	}
     
     
    diff --git a/htdocs/core/modules/modTicket.class.php b/htdocs/core/modules/modTicket.class.php
    index 01c10a631ca..79e4d015a5e 100644
    --- a/htdocs/core/modules/modTicket.class.php
    +++ b/htdocs/core/modules/modTicket.class.php
    @@ -55,7 +55,7 @@ class modTicket extends DolibarrModules
             // It is used to group modules in module setup page
             $this->family = "crm";
             // Module position in the family
    -        $this->module_position = 500;
    +        $this->module_position = '60';
             // Module label (no space allowed)
             // used if translation string 'ModuleXXXName' not found
             // (where XXX is value of numeric property 'numero' of module)
    @@ -95,12 +95,11 @@ class modTicket extends DolibarrModules
             $this->config_page_url = array("ticket.php");
     
             // Dependencies
    -        // List of modules id that must be enabled if this module is enabled
    -        $this->depends = array();
    -        // List of modules id to disable if this one is disabled
    -        $this->requiredby = array();
    -        // Minimum version of PHP required by module
    -        $this->phpmin = array(5, 3);
    +        $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->langfiles = array("ticket");
             // Constants
             // List of particular constants to add when module is enabled
    @@ -115,7 +114,7 @@ class modTicket extends DolibarrModules
                 'project:+ticket:Tickets:@ticket:$user->rights->ticket->read:/ticket/list.php?projectid=__ID__',
             );
     
    -        // Dictionnaries
    +        // Dictionaries
             if (! isset($conf->ticket->enabled)) {
                 $conf->ticket=new stdClass();
                 $conf->ticket->enabled=0;
    @@ -306,5 +305,4 @@ class modTicket extends DolibarrModules
     
             return $this->_init($sql, $options);
         }
    -
     }
    diff --git a/htdocs/core/modules/modUser.class.php b/htdocs/core/modules/modUser.class.php
    index 1c4a08411ad..a8cd523959e 100644
    --- a/htdocs/core/modules/modUser.class.php
    +++ b/htdocs/core/modules/modUser.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -46,7 +46,7 @@ class modUser extends DolibarrModules
     		$this->numero = 0;
     
     		$this->family = "hr";		// Family for module (or "base" if core module)
    -		$this->module_position = 10;
    +		$this->module_position = '10';
     		// Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
     		$this->name = preg_replace('/^mod/i','',get_class($this));
     		$this->description = "Gestion des utilisateurs (requis)";
    @@ -63,9 +63,12 @@ class modUser extends DolibarrModules
     		// Config pages
     		$this->config_page_url = array("user.php");
     
    -		// Dependancies
    -		$this->depends = array();
    -		$this->requiredby = array();
    +		// Dependencies
    +		$this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->langfiles = array("main","users","companies","members",'salaries');
     		$this->always_enabled = true;	// Can't be disabled
     
    @@ -205,13 +208,10 @@ class modUser extends DolibarrModules
     
     
             // Menus
    -        //-------
    -
             $this->menu = 1;        // This module add menu entries. They are coded into menu manager.
     
     
     		// Exports
    -		//--------
     		$r=0;
     
     		$r++;
    @@ -244,7 +244,6 @@ class modUser extends DolibarrModules
     		$this->export_sql_end[$r] .=' WHERE u.entity IN ('.getEntity('user').')';
     
     		// Imports
    -		//--------
     		$r=0;
     
     		// Import list of users attributes
    @@ -292,7 +291,6 @@ class modUser extends DolibarrModules
     			'u.email'=>"test@mycompany.com",'u.salary'=>"10000",'u.note'=>"This is an example of note for record",'u.datec'=>"2015-01-01 or 2015-01-01 12:30:00"
     		);
     		$this->import_updatekeys_array[$r]=array('u.lastname'=>'Lastname','u.firstname'=>'Firstname','u.login'=>'Login');
    -
     	}
     
     
    diff --git a/htdocs/core/modules/modVariants.class.php b/htdocs/core/modules/modVariants.class.php
    index c56f5c0e49a..1bf6c599102 100644
    --- a/htdocs/core/modules/modVariants.class.php
    +++ b/htdocs/core/modules/modVariants.class.php
    @@ -2,7 +2,7 @@
     
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016      Marcos García        <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -22,9 +22,8 @@
     /**
      * 	\defgroup   produit     Module product variants
      *  \brief      Module to manage product combinations based on product attributes
    - *  \file       htdocs/core/modules/modAttributes.class.php
    + *  \file       htdocs/core/modules/modVariants.class.php
      *  \ingroup    produit
    - *  \brief      File to describe module to manage catalog of predefined products
      */
     include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
     
    @@ -79,12 +78,10 @@ class modVariants extends DolibarrModules
     
     		// Dependencies
     		$this->hidden = false;			// A condition to hide module
    -		$this->depends = array(
    -			'modProduct'
    -		);		// List of modules id that must be enabled if this module is enabled
    -		$this->requiredby = array();	// List of modules id to disable if this one is disabled
    -		$this->conflictwith = array();	// List of modules id this module is in conflict with
    -		$this->phpmin = array(5,0);					// Minimum version of PHP required by module
    +		$this->depends = array('modProduct');	// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
     		$this->need_dolibarr_version = array(3,0);	// Minimum version of Dolibarr required by module
     		$this->langfiles = array("products");
     
    @@ -112,4 +109,3 @@ class modVariants extends DolibarrModules
     		$this->rights = array();		// Permission array used by this module
     	}
     }
    -
    diff --git a/htdocs/core/modules/modWebServices.class.php b/htdocs/core/modules/modWebServices.class.php
    index 8963f81813f..a3e9510563f 100644
    --- a/htdocs/core/modules/modWebServices.class.php
    +++ b/htdocs/core/modules/modWebServices.class.php
    @@ -55,30 +55,26 @@ class modWebServices extends DolibarrModules
             $this->dirs = array();
     
             // Config pages
    -        //-------------
             $this->config_page_url = array("index.php@webservices");
     
    -        // Dependancies
    -        //-------------
    -        $this->depends = array();
    -        $this->requiredby = array();
    -        //$this->phpmax = array(7,1);					// Maximum version of PHP required by module
    +        // Dependencies
    +        $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->langfiles = array("other");
     
             // Constants
    -        //-----------
             $this->const = array();
     
             // New pages on tabs
    -        // -----------------
             $this->tabs = array();
     
             // Boxes
    -        //------
             $this->boxes = array();
     
             // Permissions
    -        //------------
             $this->rights = array();
             $this->rights_class = 'webservices';
             $r=0;
    diff --git a/htdocs/core/modules/modWebServicesClient.class.php b/htdocs/core/modules/modWebServicesClient.class.php
    index 9b6535143b3..35c4da5b037 100644
    --- a/htdocs/core/modules/modWebServicesClient.class.php
    +++ b/htdocs/core/modules/modWebServicesClient.class.php
    @@ -55,29 +55,26 @@ class modWebServicesClient extends DolibarrModules
             $this->dirs = array();
     
             // Config pages
    -        //-------------
             //$this->config_page_url = array();
     
    -        // Dependancies
    -        //-------------
    -        $this->depends = array();
    -        $this->requiredby = array();
    +        // Dependencies
    +        $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->langfiles = array("other");
     
             // Constants
    -        //-----------
             $this->const = array();
     
             // New pages on tabs
    -        // -----------------
             $this->tabs = array();
     
             // Boxes
    -        //------
             $this->boxes = array();
     
             // Permissions
    -        //------------
             $this->rights = array();
             $this->rights_class = 'syncsupplierwebservices';
             $r=0;
    diff --git a/htdocs/core/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php
    index fb6e91283db..ade9a23e759 100644
    --- a/htdocs/core/modules/modWebsite.class.php
    +++ b/htdocs/core/modules/modWebsite.class.php
    @@ -46,12 +46,12 @@ class modWebsite extends DolibarrModules
     		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
     		// It is used to group modules in module setup page
             $this->family = "portal";
    -        $this->module_position = 50;
    +        $this->module_position = '50';
             // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
             $this->name = preg_replace('/^mod/i','',get_class($this));
             $this->description = "Enable to build and serve public web sites with CMS features";
     		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
    -        $this->version = 'experimental';
    +        $this->version = 'dolibarr';
             // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
             $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
             // Name of image file used for this module.
    @@ -61,27 +61,23 @@ class modWebsite extends DolibarrModules
     		$this->dirs = array("/website/temp");
     
             // Config pages
    -        //-------------
             $this->config_page_url = array('website.php');
     
    -        // Dependancies
    -        //-------------
    +        // Dependencies
     		$this->hidden = ! empty($conf->global->MODULE_WEBSITE_DISABLED);	// A condition to disable module
     		$this->depends = array('modFckeditor');		// List of modules id that must be enabled if this module is enabled
             $this->requiredby = array();	// List of modules id to disable if this one is disabled
     		$this->conflictwith = array();	// List of modules id this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->langfiles = array("website");
     
             // Constants
    -        //-----------
            	$this->const = array();
     
             // New pages on tabs
    -        // -----------------
            	//$this->tabs[] = array();  					// To add a new tab identified by code tabname1
     
             // Boxes
    -        //------
             $this->boxes = array();
     
     		// Permissions
    @@ -111,7 +107,7 @@ class modWebsite extends DolibarrModules
             $r=0;
             $this->menu[$r]=array(	'fk_menu'=>'0',		    // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
     						        'type'=>'top',			                // This is a Left menu entry
    -						        'titre'=>'Websites',
    +						        'titre'=>'WebSites',
                                     'mainmenu'=>'website',
     						        'url'=>'/website/index.php',
     						        'langs'=>'website',	        // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
    @@ -139,4 +135,46 @@ class modWebsite extends DolibarrModules
             $this->export_sql_end[$r] .=' AND p.entity IN ('.getEntity('website').')';
             $r++;
         }
    +
    +
    +    /**
    +     *		Function called when module is enabled.
    +     *		The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
    +     *		It also creates data directories
    +     *
    +     *      @param      string	$options    Options when enabling module ('', 'noboxes')
    +     *      @return     int             	1 if OK, 0 if KO
    +     */
    +    function init($options='')
    +    {
    +    	global $conf,$langs;
    +
    +    	// Remove permissions and default values
    +    	$this->remove($options);
    +
    +    	// Copy flags and octicons directoru
    +    	$dirarray=array('common/flags', 'common/octicons');
    +    	foreach($dirarray as $dir)
    +    	{
    +	    	$src=DOL_DOCUMENT_ROOT.'/theme/'.$dir;
    +	    	$dest=DOL_DATA_ROOT.'/medias/image/'.$dir;
    +
    +	    	if (is_dir($src))
    +	    	{
    +	    		require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +	    		dol_mkdir($dest);
    +	    		$result=dolCopyDir($src,$dest,0,0);
    +	    		if ($result < 0)
    +	    		{
    +	    			$langs->load("errors");
    +	    			$this->error=$langs->trans('ErrorFailToCopyDirectory',$src,$dest);
    +	    			return 0;
    +	    		}
    +	    	}
    +    	}
    +
    +    	$sql = array();
    +
    +    	return $this->_init($sql, $options);
    +    }
     }
    diff --git a/htdocs/core/modules/modWorkflow.class.php b/htdocs/core/modules/modWorkflow.class.php
    index e721513073a..771d718af70 100644
    --- a/htdocs/core/modules/modWorkflow.class.php
    +++ b/htdocs/core/modules/modWorkflow.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010		Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -68,9 +68,11 @@ class modWorkflow extends DolibarrModules
             $this->config_page_url = array('workflow.php');
     
             // Dependencies
    -        $this->depends = array();       // List of modules id that must be enabled if this module is enabled
    -        $this->requiredby = array();    // List of modules id to disable if this one is disabled
    -        $this->phpmin = array(5,2);                 // Minimum version of PHP required by module
    +       $this->hidden = false;			// A condition to hide module
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    +		$this->requiredby = array();	// List of module ids to disable if this one is disabled
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->phpmin = array(5,4);		// Minimum version of PHP required by module
             $this->need_dolibarr_version = array(2,8);  // Minimum version of Dolibarr required by module
             $this->langfiles = array("@workflow");
     
    diff --git a/htdocs/core/modules/payment/mod_payment_ant.php b/htdocs/core/modules/payment/mod_payment_ant.php
    index a09ad2355e4..b7d88464355 100644
    --- a/htdocs/core/modules/payment/mod_payment_ant.php
    +++ b/htdocs/core/modules/payment/mod_payment_ant.php
    @@ -30,9 +30,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/payment/modules_payment.php';
      */
     class mod_payment_ant extends ModeleNumRefPayments
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Ant';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +	 * @var string Error message
    +	 */
    +	public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Ant';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Ant';
     
     
         /**
    @@ -42,7 +61,7 @@ class mod_payment_ant extends ModeleNumRefPayments
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    @@ -124,6 +143,7 @@ class mod_payment_ant extends ModeleNumRefPayments
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
    @@ -133,8 +153,7 @@ class mod_payment_ant extends ModeleNumRefPayments
          */
         function commande_get_num($objsoc,$objforref)
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$objforref);
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/payment/mod_payment_cicada.php b/htdocs/core/modules/payment/mod_payment_cicada.php
    index 8fc05b6cdd8..5869032cc5b 100644
    --- a/htdocs/core/modules/payment/mod_payment_cicada.php
    +++ b/htdocs/core/modules/payment/mod_payment_cicada.php
    @@ -29,10 +29,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/payment/modules_payment.php';
      */
     class mod_payment_cicada extends ModeleNumRefPayments
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefix='PAY';
    -	var $error='';
    -	var $nom='Cicada';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='PAY';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Cicada';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Cicada';
     
     
         /**
    @@ -135,16 +155,17 @@ class mod_payment_cicada extends ModeleNumRefPayments
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
     	 *  @param	Societe		$objsoc     Object third party
    -	 * 	@param	string		$objforref	Object for number to search
    +	 *  @param	string		$objforref	Object for number to search
     	 *  @return string      			Next free value
     	 */
     	function payment_get_num($objsoc,$objforref)
     	{
    +        // phpcs:enable
     		return $this->getNextValue($objsoc,$objforref);
     	}
    -
     }
    diff --git a/htdocs/core/modules/payment/modules_payment.php b/htdocs/core/modules/payment/modules_payment.php
    index c9023a9fc65..d9cf9b1260f 100644
    --- a/htdocs/core/modules/payment/modules_payment.php
    +++ b/htdocs/core/modules/payment/modules_payment.php
    @@ -23,7 +23,10 @@
     
     abstract class ModeleNumRefPayments
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *	Return if a module can be used or not
    diff --git a/htdocs/core/modules/printing/modules_printing.php b/htdocs/core/modules/printing/modules_printing.php
    index 4a6560b47fa..afd46919598 100644
    --- a/htdocs/core/modules/printing/modules_printing.php
    +++ b/htdocs/core/modules/printing/modules_printing.php
    @@ -1,6 +1,6 @@
     <?php
     /*
    - * Copyright (C) 2014-2015 Frederic France      <frederic.france@free.fr>
    + * Copyright (C) 2014-2018 Frederic France      <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,8 +31,15 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
      */
     class PrintingDriver
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
         /**
    @@ -81,6 +88,4 @@ class PrintingDriver
             if ($langs->trans($transstring) != $transstring) return $langs->trans($transstring);
             else return $this->desc;
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/printing/printgcp.modules.php b/htdocs/core/modules/printing/printgcp.modules.php
    index 7cda95174c2..089fb95ba69 100644
    --- a/htdocs/core/modules/printing/printgcp.modules.php
    +++ b/htdocs/core/modules/printing/printgcp.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /*
    - * Copyright (C) 2014-2015  Frederic France      <frederic.france@free.fr>
    + * Copyright (C) 2014-2018  Frederic France      <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -35,16 +35,28 @@ use OAuth\OAuth2\Service\Google;
      */
     class printing_printgcp extends PrintingDriver
     {
    -    var $name = 'printgcp';
    -    var $desc = 'PrintGCPDesc';
    -    var $picto = 'printer';
    -    var $active = 'PRINTING_PRINTGCP';
    -    var $conf = array();
    -    var $google_id = '';
    -    var $google_secret = '';
    -    var $error;
    -    var $errors = array();
    -    var $db;
    +    public $name = 'printgcp';
    +    public $desc = 'PrintGCPDesc';
    +    public $picto = 'printer';
    +    public $active = 'PRINTING_PRINTGCP';
    +    public $conf = array();
    +    public $google_id = '';
    +    public $google_secret = '';
    +
    +    /**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +    /**
    +     * @var string[] Error codes (or messages)
    +     */
    +    public $errors = array();
    +
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
         private $OAUTH_SERVICENAME_GOOGLE = 'Google';
     
    @@ -63,8 +75,8 @@ class printing_printgcp extends PrintingDriver
             global $conf, $langs, $dolibarr_main_url_root;
     
             // Define $urlwithroot
    -        $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
    -        $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT;		// This is to use external domain name found into config file
    +        $urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
    +        $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;		// This is to use external domain name found into config file
             //$urlwithroot=DOL_MAIN_URL_ROOT;					// This is to use same domain name than current
     
             $this->db = $db;
    @@ -73,7 +85,7 @@ class printing_printgcp extends PrintingDriver
                 $this->conf[] = array(
                     'varname'=>'PRINTGCP_INFO',
                     'info'=>$langs->transnoentitiesnoconv("WarningModuleNotActive", "OAuth"),
    -                'type'=>'info'
    +                'type'=>'info',
                 );
             } else {
     
    @@ -132,7 +144,7 @@ class printing_printgcp extends PrintingDriver
     
                         $refreshtoken = $token->getRefreshToken();
     
    -                    $endoflife=$token->getEndOfLife();
    +                    $endoflife = $token->getEndOfLife();
     
                         if ($endoflife == $token::EOL_NEVER_EXPIRES)
                         {
    @@ -171,9 +183,9 @@ class printing_printgcp extends PrintingDriver
          *
          *  @return  int                     0 if OK, >0 if KO
          */
    -    function listAvailablePrinters()
    +    public function listAvailablePrinters()
         {
    -        global $bc, $conf, $langs;
    +        global $conf, $langs;
             $error = 0;
             $langs->load('printing');
     
    @@ -187,7 +199,7 @@ class printing_printgcp extends PrintingDriver
             $html.= '<td>'.$langs->trans('GCP_Type').'</td>';
             $html.= '<td align="center">'.$langs->trans("Select").'</td>';
             $html.= '</tr>'."\n";
    -        $list = $this->getlist_available_printers();
    +        $list = $this->getlistAvailablePrinters();
             //$html.= '<td><pre>'.print_r($list,true).'</pre></td>';
             foreach ($list['available'] as $printer_det)
             {
    @@ -220,7 +232,7 @@ class printing_printgcp extends PrintingDriver
          *
          *  @return array      list of printers
          */
    -    function getlist_available_printers()
    +    public function getlistAvailablePrinters()
         {
             // Token storage
             $storage = new DoliStorage($this->db, $this->conf);
    @@ -287,15 +299,17 @@ class printing_printgcp extends PrintingDriver
          * @param   string      $subdir     subdir for file
          * @return  int                     0 if OK, >0 if KO
          */
    -    function print_file($file, $module, $subdir='')
    +    public function printFile($file, $module, $subdir='')
         {
             require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
             global $conf, $user;
             $error = 0;
     
    -        $fileprint=$conf->{$module}->dir_output;
    -        if ($subdir!='') $fileprint.='/'.$subdir;
    +        $fileprint = $conf->{$module}->dir_output;
    +        if ($subdir!='') {
    +            $fileprint.='/'.$subdir;
    +        }
             $fileprint.='/'.$file;
             $mimetype = dol_mimetype($fileprint);
             // select printer uri for module order, propal,...
    @@ -326,7 +340,9 @@ class printing_printgcp extends PrintingDriver
     
             $ret = $this->sendPrintToPrinter($printer_id, $file, $fileprint, $mimetype);
             $this->error = 'PRINTGCP: '.$ret['errormessage'];
    -        if ($ret['status']!=1) $error++;
    +        if ($ret['status']!=1) {
    +            $error++;
    +        }
             return $error;
         }
     
    @@ -354,12 +370,13 @@ class printing_printgcp extends PrintingDriver
             $contents = fread($handle, filesize($filepath));
             fclose($handle);
             // Prepare post fields for sending print
    -        $post_fields = array('printerid' => $printerid,
    -                             'title' => $printjobtitle,
    -                             'contentTransferEncoding' => 'base64',
    -                             'content' => base64_encode($contents), // encode file content as base64
    -                             'contentType' => $contenttype
    -                            );
    +        $post_fields = array(
    +            'printerid' => $printerid,
    +            'title' => $printjobtitle,
    +            'contentTransferEncoding' => 'base64',
    +            'content' => base64_encode($contents), // encode file content as base64
    +            'contentType' => $contenttype,
    +        );
             // Dolibarr Token storage
             $storage = new DoliStorage($this->db, $this->conf);
             // Setup the credentials for the requests
    @@ -394,7 +411,7 @@ class printing_printgcp extends PrintingDriver
             // Send a request with api
             $response = json_decode($apiService->request(self::PRINT_URL, 'POST', $post_fields), true);
             //print '<tr><td><pre>'.print_r($response, true).'</pre></td></tr>';
    -        return array('status' =>$response['success'],'errorcode' =>$response['errorCode'],'errormessage'=>$response['message']);
    +        return array('status' => $response['success'], 'errorcode' => $response['errorCode'], 'errormessage' => $response['message']);
         }
     
     
    @@ -403,9 +420,9 @@ class printing_printgcp extends PrintingDriver
          *
          *  @return  int                     0 if OK, >0 if KO
          */
    -    function list_jobs()
    +    public function listJobs()
         {
    -        global $conf, $db, $langs, $bc;
    +        global $conf, $langs;
     
             $error = 0;
             $html = '';
    @@ -471,13 +488,11 @@ class printing_printgcp extends PrintingDriver
     
             $jobs = $responsedata['jobs'];
             //$html .= '<pre>'.print_r($jobs['0'],true).'</pre>';
    -        if (is_array($jobs))
    -        {
    -            foreach ($jobs as $value)
    -            {
    +        if (is_array($jobs)) {
    +            foreach ($jobs as $value) {
                     $html .= '<tr class="oddeven">';
                     $html .= '<td>'.$value['id'].'</td>';
    -                $dates=dol_print_date((int) substr($value['createTime'], 0, 10), 'dayhour');
    +                $dates = dol_print_date((int) substr($value['createTime'], 0, 10), 'dayhour');
                     $html .= '<td>'.$dates.'</td>';
                     $html .= '<td>'.$value['ownerId'].'</td>';
                     $html .= '<td>'.$value['printerName'].'</td>';
    @@ -500,5 +515,4 @@ class printing_printgcp extends PrintingDriver
     
             return $error;
         }
    -
     }
    diff --git a/htdocs/core/modules/printing/printipp.modules.php b/htdocs/core/modules/printing/printipp.modules.php
    index 94d14426b55..ab65f8fba3d 100644
    --- a/htdocs/core/modules/printing/printipp.modules.php
    +++ b/htdocs/core/modules/printing/printipp.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /*
    - * Copyright (C) 2014-2015  Frederic France      <frederic.france@free.fr>
    + * Copyright (C) 2014-2018  Frederic France      <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -19,7 +19,7 @@
     
     /**
      *      \file       htdocs/core/modules/printing/printipp.modules.php
    - *      \ingroup    mailing
    + *      \ingroup    printing
      *      \brief      File to provide printing with PrintIPP
      */
     
    @@ -30,19 +30,31 @@ include_once DOL_DOCUMENT_ROOT.'/core/modules/printing/modules_printing.php';
      */
     class printing_printipp extends PrintingDriver
     {
    -    var $name='printipp';
    -    var $desc='PrintIPPDesc';
    -    var $picto='printer';
    -    var $active='PRINTING_PRINTIPP';
    -    var $conf=array();
    -    var $host;
    -    var $port;
    -    var $userid;    /* user login */
    -    var $user;
    -    var $password;
    -    var $error;
    -    var $errors = array();
    -    var $db;
    +    public $name = 'printipp';
    +    public $desc = 'PrintIPPDesc';
    +    public $picto = 'printer';
    +    public $active = 'PRINTING_PRINTIPP';
    +    public $conf = array();
    +    public $host;
    +    public $port;
    +    public $userid;    /* user login */
    +    public $user;
    +    public $password;
    +
    +    /**
    +     * @var string Error code (or message)
    +     */
    +    public $error='';
    +
    +    /**
    +     * @var string[] Error codes (or messages)
    +     */
    +    public $errors = array();
    +
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     
         /**
    @@ -75,7 +87,7 @@ class printing_printipp extends PrintingDriver
          *
          * @return  int                     0 if OK, >0 if KO
          */
    -    function print_file($file, $module, $subdir='')
    +    public function printFile($file, $module, $subdir='')
         {
             global $conf, $user;
             $error = 0;
    @@ -93,8 +105,7 @@ class printing_printipp extends PrintingDriver
             // select printer uri for module order, propal,...
             $sql = "SELECT rowid,printer_id,copy FROM ".MAIN_DB_PREFIX."printing WHERE module = '".$module."' AND driver = 'printipp' AND userid = ".$user->id;
             $result = $this->db->query($sql);
    -        if ($result)
    -        {
    +        if ($result) {
                 $obj = $this->db->fetch_object($result);
                 if ($obj)
                 {
    @@ -105,18 +116,19 @@ class printing_printipp extends PrintingDriver
                 {
                     if (! empty($conf->global->PRINTIPP_URI_DEFAULT))
                     {
    -					dol_syslog("Will use default printer conf->global->PRINTIPP_URI_DEFAULT = ".$conf->global->PRINTIPP_URI_DEFAULT);
    +                    dol_syslog("Will use default printer conf->global->PRINTIPP_URI_DEFAULT = ".$conf->global->PRINTIPP_URI_DEFAULT);
                         $ipp->setPrinterURI($conf->global->PRINTIPP_URI_DEFAULT);
                     }
                     else
    -				{
    +                {
                         $this->errors[] = 'NoDefaultPrinterDefined';
                         $error++;
                         return $error;
                     }
                 }
    +        } else {
    +            dol_print_error($this->db);
             }
    -        else dol_print_error($this->db);
     
             // Set number of copy
             $ipp->setCopies($obj->copy);
    @@ -142,7 +154,7 @@ class printing_printipp extends PrintingDriver
          */
         function listAvailablePrinters()
         {
    -        global $bc, $conf, $langs;
    +        global $conf, $langs;
             $error = 0;
     
             $html = '<tr class="liste_titre">';
    @@ -158,11 +170,9 @@ class printing_printipp extends PrintingDriver
             $html.= '<td>'.$langs->trans('IPP_Supported').'</td>';
             $html.= '<td align="center">'.$langs->trans("Select").'</td>';
             $html.= "</tr>\n";
    -        $list = $this->getlist_available_printers();
    -        foreach ($list as $value)
    -        {
    -
    -            $printer_det = $this->get_printer_detail($value);
    +        $list = $this->getlistAvailablePrinters();
    +        foreach ($list as $value) {
    +            $printer_det = $this->getPrinterDetail($value);
                 $html.= '<tr class="oddeven">';
                 $html.= '<td>'.$value.'</td>';
                 //$html.= '<td><pre>'.print_r($printer_det,true).'</pre></td>';
    @@ -177,15 +187,12 @@ class printing_printipp extends PrintingDriver
                 $html.= '<td>'.$langs->trans('MEDIA_IPP_'.$printer_det->media_type_supported->_value1).'</td>';
                 // Defaut
                 $html.= '<td align="center">';
    -            if ($conf->global->PRINTIPP_URI_DEFAULT == $value)
    -            {
    +            if ($conf->global->PRINTIPP_URI_DEFAULT == $value) {
                     $html.= img_picto($langs->trans("Default"),'on');
    +            } else {
    +                $html.= '<a href="'.$_SERVER["PHP_SELF"].'?action=setvalue&amp;mode=test&amp;varname=PRINTIPP_URI_DEFAULT&amp;driver=printipp&amp;value='.urlencode($value).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
                 }
    -            else
    -			{
    -            	$html.= '<a href="'.$_SERVER["PHP_SELF"].'?action=setvalue&amp;mode=test&amp;varname=PRINTIPP_URI_DEFAULT&amp;driver=printipp&amp;value='.urlencode($value).'" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"),'off').'</a>';
    -          	}
    -			$html.= '</td>';
    +            $html.= '</td>';
                 $html.= '</tr>'."\n";
             }
             $this->resprint = $html;
    @@ -197,16 +204,18 @@ class printing_printipp extends PrintingDriver
          *
          *  @return array                list of printers
          */
    -    function getlist_available_printers()
    +    public function getlistAvailablePrinters()
         {
    -        global $conf,$db;
    +        global $conf, $db;
             include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php';
             $ipp = new CupsPrintIPP();
             $ipp->setLog(DOL_DATA_ROOT.'/dolibarr_printipp.log','file',3); // logging very verbose
             $ipp->setHost($this->host);
             $ipp->setPort($this->port);
             $ipp->setUserName($this->userid);
    -        if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
    +        if (! empty($this->user)) {
    +            $ipp->setAuthentication($this->user, $this->password);
    +        }
             $ipp->getPrinters();
             return $ipp->available_printers;
         }
    @@ -217,7 +226,7 @@ class printing_printipp extends PrintingDriver
          *  @param  string  $uri    URI
          *  @return array           List of attributes
          */
    -    function get_printer_detail($uri)
    +    private function getPrinterDetail($uri)
         {
             global $conf,$db;
     
    @@ -227,7 +236,9 @@ class printing_printipp extends PrintingDriver
             $ipp->setHost($this->host);
             $ipp->setPort($this->port);
             $ipp->setUserName($this->userid);
    -        if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
    +        if (! empty($this->user)) {
    +            $ipp->setAuthentication($this->user, $this->password);
    +        }
             $ipp->setPrinterURI($uri);
             $ipp->getPrinterAttributes();
             return $ipp->printer_attributes;
    @@ -240,9 +251,9 @@ class printing_printipp extends PrintingDriver
          *
          *  @return  int                     0 if OK, >0 if KO
          */
    -    function list_jobs($module)
    +    public function listJobs($module)
         {
    -        global $conf, $db, $bc;
    +        global $conf;
             $error = 0;
             $html = '';
             include_once DOL_DOCUMENT_ROOT.'/includes/printipp/CupsPrintIPP.php';
    @@ -251,19 +262,17 @@ class printing_printipp extends PrintingDriver
             $ipp->setHost($this->host);
             $ipp->setPort($this->port);
             $ipp->setUserName($this->userid);
    -        if (! empty($this->user)) $ipp->setAuthentication($this->user,$this->password);
    +        if (! empty($this->user)) {
    +            $ipp->setAuthentication($this->user,$this->password);
    +        }
             // select printer uri for module order, propal,...
             $sql = 'SELECT rowid,printer_uri,printer_name FROM '.MAIN_DB_PREFIX.'printer_ipp WHERE module="'.$module.'"';
             $result = $this->db->query($sql);
    -        if ($result)
    -        {
    +        if ($result) {
                 $obj = $this->db->fetch_object($result);
    -            if ($obj)
    -            {
    +            if ($obj) {
                     $ipp->setPrinterURI($obj->printer_uri);
    -            }
    -            else
    -            {
    +            } else {
                     // All printers
                     $ipp->setPrinterURI("ipp://localhost:631/printers/");
                 }
    @@ -287,8 +296,7 @@ class printing_printipp extends PrintingDriver
             $jobs = $ipp->jobs_attributes;
     
             //$html .= '<pre>'.print_r($jobs,true).'</pre>';
    -        foreach ($jobs as $value )
    -        {
    +        foreach ($jobs as $value ) {
                 $html .= '<tr class="oddeven">';
                 $html .= '<td>'.$value->job_id->_value0.'</td>';
                 $html .= '<td>'.$value->job_originating_user_name->_value0.'</td>';
    @@ -302,5 +310,4 @@ class printing_printipp extends PrintingDriver
             $this->resprint = $html;
             return $error;
         }
    -
     }
    diff --git a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php
    index 78898735f0c..0047dda7669 100644
    --- a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php
    +++ b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php
    @@ -1,10 +1,10 @@
     <?php
    -/* Copyright (C) 2003 Steve Dillon
    - * Copyright (C) 2003 Laurent Passebecq
    - * Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2002-2003 Jean-Louis Bergamo	<jlb@j1b.org>
    - * Copyright (C) 2006-2013 Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2015 Francis Appels  <francis.appels@yahoo.com>
    +/* Copyright (C) 2003       Steve Dillon
    + * Copyright (C) 2003       Laurent Passebecq
    + * Copyright (C) 2001-2003  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2002-2003  Jean-Louis Bergamo      <jlb@j1b.org>
    + * Copyright (C) 2006-2013  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2015       Francis Appels          <francis.appels@yahoo.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -21,15 +21,15 @@
      */
     
     /**
    - *	\file		htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php
    - *	\ingroup	core
    - *	\brief		Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise
    + *  \file       htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php
    + *  \ingroup    core
    + *  \brief      Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise
      */
     
     require_once DOL_DOCUMENT_ROOT.'/core/class/commonstickergenerator.class.php';
     
     /**
    - *	Class to generate stick sheet with format Avery or other personalised
    + *  Class to generate stick sheet with format Avery or other personalised
      */
     class pdf_standardlabel extends CommonStickerGenerator
     {
    @@ -41,10 +41,12 @@ class pdf_standardlabel extends CommonStickerGenerator
     	 * @param	array		$param			Associative array containing label content and optional parameters
     	 * @return	void
     	 */
    -	function addSticker(&$pdf,$outputlangs,$param) {
    +    function addSticker(&$pdf,$outputlangs,$param)
    +    {
     		// use this method in future refactoring
     	}
    -	
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0)
     	 * - %LOGO% is replace with company logo
    @@ -61,6 +63,7 @@ class pdf_standardlabel extends CommonStickerGenerator
     	 */
     	function Add_PDF_label(&$pdf,$textleft,$header,$footer,$outputlangs,$textright='',$photo='')
     	{
    +        // phpcs:enable
     		global $mysoc, $conf, $langs;
     		global $forceimgscalewidth, $forceimgscaleheight;
     
    @@ -224,6 +227,7 @@ class pdf_standardlabel extends CommonStickerGenerator
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build PDF on disk, then output on HTTP strem.
     	 *
    @@ -236,6 +240,7 @@ class pdf_standardlabel extends CommonStickerGenerator
     	 */
     	function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='',$filename='tmp_address_sheet.pdf')
     	{
    +        // phpcs:enable
     		global $user,$conf,$langs,$mysoc,$_Avery_Labels;
     
     		$this->code=$srctemplatepath;
    @@ -255,10 +260,8 @@ class pdf_standardlabel extends CommonStickerGenerator
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("admin");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "admin"));
     
     		$title=$outputlangs->transnoentities('Labels');
     		$keywords=$title." ".$outputlangs->convToOutputCharset($mysoc->name);
    diff --git a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php
    index faa62d45431..de1aa1b5d5e 100644
    --- a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php
    +++ b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php
    @@ -50,7 +50,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     					'fontsize' => 8,
     					'stretchtext' => 4
     	);
    -	
    +
     	// set style for 2d barcode
     	private $_style2d = array(
     					'border' => false,
    @@ -61,24 +61,25 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     					'module_width' => 1, // width of a single module in points
     					'module_height' => 1 // height of a single module in points
     	);
    -	
    +
     	private $_align2d = 'N';
    -	
    +
     	private $_xres = 0.4;
    -	
    +
     	/**
     	 * write barcode to pdf
    -	 * 
    +	 *
     	 * @param PDF	  $pdf		  PDF reference
     	 * @param string  $code		   code to print
     	 * @param string  $encoding	   type of barcode
     	 * @param boolean $is2d		   true if 2d barcode
    -	 * @param int	  $x		   x position in user units 
    +	 * @param int	  $x		   x position in user units
     	 * @param int	  $y		   y position in user units
     	 * @param int	  $w		   width in user units
     	 * @param int	  $h		   height in user units
    -	 */	   
    -	private function writeBarcode(&$pdf, $code, $encoding, $is2d, $x, $y, $w, $h) 
    +	 * @return void
    +	 */
    +	private function writeBarcode(&$pdf, $code, $encoding, $is2d, $x, $y, $w, $h)
     	{
     		if ($is2d) {
     			$pdf->write2DBarcode($code, $encoding, $x, $y, $w, $h, $this->_style2d, $this->_align2d);
    @@ -86,7 +87,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     			$pdf->write1DBarcode($code, $encoding, $x, $y, $w, $h, $this->_xres, $this->_style1d);
     		}
     	}
    -	
    +
     	/**
     	 * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0)
     	 *
    @@ -95,10 +96,10 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     	 * @param	array		$param			Associative array containing label content and optional parameters
     	 * @return	void
     	 */
    -	function addSticker(&$pdf,$outputlangs,$param) 
    +	function addSticker(&$pdf,$outputlangs,$param)
     	{
     		global $mysoc,$conf;
    -		
    +
     		$textleft = $param['textleft'];
     		$header = $param['textheader'];
     		$footer = $param['textfooter'];
    @@ -106,8 +107,8 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     		$code = $param['code'];
     		$encoding = $param['encoding'];
     		$is2d = $param['is2d'];
    -		
    -		
    +
    +
     
     		// We are in a new page, then we must add a page
     		if (($this->_COUNTX ==0) && ($this->_COUNTY==0) and (!$this->_First==1)) {
    @@ -132,7 +133,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     			}
     		}
     
    -		$xleft = 2; 
    +		$xleft = 2;
     		$ytop = 2;
     
     		// Top
    @@ -154,7 +155,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     		$heighttouse = $maxheighttouse;
     		$logoHeight = $heighttouse;
     		$logoWidth = $heighttouse;
    -		
    +
     		//var_dump($this->_Width.'x'.$this->_Height.' with border and scale '.$imgscale.' => max '.$maxwidthtouse.'x'.$maxheighttouse.' => We use '.$widthtouse.'x'.$heighttouse);exit;
     
     		// Center
    @@ -162,7 +163,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     		{
     			// Output left area
     			if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, 0, $logoHeight);
    -			else if ($code && !empty($encoding)) 
    +			else if ($code && !empty($encoding))
     			{
     				$this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse, $heighttouse);
     			}
    @@ -177,7 +178,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     			if (($textleft == '%LOGO%' || $textleft == '%PHOTO%' || $textleft == '%BARCODE%') && !strstr($textright, '%') )	 // left part logo/barcode right part text
     			{
     				if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, 0);
    -				else if ($code && !empty($encoding)) 
    +				else if ($code && !empty($encoding))
     				{
     					$this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, $heighttouse);
     				}
    @@ -187,7 +188,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     			else if (($textright == '%LOGO%' || $textright == '%PHOTO%' || $textright == '%BARCODE%') && !strstr($textleft, '%')) // right part logo/barcode left part text
     			{
     				if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, 0);
    -				else if ($code && !empty($encoding)) 
    +				else if ($code && !empty($encoding))
     				{
     					$this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, $heighttouse);
     				}
    @@ -203,7 +204,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     				} else {
     					$pdf->SetXY($_PosX+$xleft+$logoWidth+1, $_PosY+$ytop);
     					$pdf->MultiCell($widthtouse-$logoWidth1-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R');
    -				}				
    +				}
     			}
     			else if ($textright == '%LOGO%')  // right part logo left part text/barcode
     			{
    @@ -214,7 +215,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     				} else {
     					$pdf->SetXY($_PosX+$xleft, $_PosY+$ytop);
     					$pdf->MultiCell($widthtouse-$logoWidth-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L');
    -				}				
    +				}
     			}
     			else	// text on halft left and text on half right
     			{
    @@ -228,7 +229,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     		{
     			// Output right area
     			if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$this->_Width-$widthtouse-$xleft, $_PosY+$ytop, 0, $logoHeight);
    -			else if ($code && !empty($encoding)) 
    +			else if ($code && !empty($encoding))
     			{
     				$this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$this->_Width-$widthtouse-$xleft, $_PosY+$ytop, $widthtouse, $heighttouse);
     			}
    @@ -265,6 +266,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build PDF on disk, then output on HTTP strem.
     	 *
    @@ -277,6 +279,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     	 */
     	function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='',$filename='tmp_address_sheet.pdf')
     	{
    +        // phpcs:enable
     		global $user,$conf,$langs,$mysoc,$_Avery_Labels;
     
     		$this->code=$srctemplatepath;
    @@ -296,10 +299,8 @@ class pdf_tcpdflabel extends CommonStickerGenerator
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("admin");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "admin"));
     
     		$title=$outputlangs->transnoentities('Labels');
     		$keywords=$title." ".$outputlangs->convToOutputCharset($mysoc->name);
    diff --git a/htdocs/core/modules/printsheet/modules_labels.php b/htdocs/core/modules/printsheet/modules_labels.php
    index bac32ec45d2..7a34d5e7e64 100644
    --- a/htdocs/core/modules/printsheet/modules_labels.php
    +++ b/htdocs/core/modules/printsheet/modules_labels.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,22 +30,27 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     
     
     /**
    - *	Parent class of document generator for address sheet.
    + *  Parent class of document generator for address sheet.
      */
     class ModelePDFLabels
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation modules
     	 *
    -     *  @param	DoliDB	$db     			Database handler
    +     *  @param  DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
     	 */
     	function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='members_labels';
    @@ -59,6 +64,7 @@ class ModelePDFLabels
     }
     
     
    +// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     /**
      *  Create a document onto disk according to template module.
      *
    @@ -73,6 +79,7 @@ class ModelePDFLabels
      */
     function doc_label_pdf_create($db, $arrayofrecords, $modele, $outputlangs, $outputdir='', $template='standardlabel', $filename='tmp_address_sheet.pdf')
     {
    +    // phpcs:enable
     	global $conf,$langs;
     	$langs->load("members");
     
    @@ -111,7 +118,7 @@ function doc_label_pdf_create($db, $arrayofrecords, $modele, $outputlangs, $outp
     	else $srctemplatepath=$code;
     
     	dol_syslog("modele=".$modele." outputdir=".$outputdir." template=".$template." code=".$code." srctemplatepath=".$srctemplatepath." filename=".$filename, LOG_DEBUG);
    -	
    +
     	// Search template files
     	$file=''; $classname=''; $filefound=0;
     	$dirmodels=array('/');
    @@ -161,7 +168,4 @@ function doc_label_pdf_create($db, $arrayofrecords, $modele, $outputlangs, $outp
     		dol_print_error('',$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$file));
     		return -1;
     	}
    -
    -
     }
    -
    diff --git a/htdocs/core/modules/product/doc/doc_generic_product_odt.modules.php b/htdocs/core/modules/product/doc/doc_generic_product_odt.modules.php
    index 07d8222bea7..dd2527338a4 100644
    --- a/htdocs/core/modules/product/doc/doc_generic_product_odt.modules.php
    +++ b/htdocs/core/modules/product/doc/doc_generic_product_odt.modules.php
    @@ -1,7 +1,8 @@
     <?php
     /* Copyright (C) 2010-2012 	Laurent Destailleur <eldy@products.sourceforge.net>
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
    -*
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
    @@ -36,10 +37,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_product_odt extends ModelePDFProduct
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -49,10 +63,10 @@ class doc_generic_product_odt extends ModelePDFProduct
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -94,10 +108,10 @@ class doc_generic_product_odt extends ModelePDFProduct
     	 */
     	function info($langs)
     	{
    -		global $conf,$langs;
    +		global $conf, $langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("errors","companies"));
     
     		$form = new Form($this->db);
     
    @@ -191,6 +205,7 @@ class doc_generic_product_odt extends ModelePDFProduct
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -204,6 +219,7 @@ class doc_generic_product_odt extends ModelePDFProduct
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $product,$langs,$conf,$mysoc,$hookmanager,$user;
     
     		if (empty($srctemplatepath))
    @@ -225,10 +241,9 @@ class doc_generic_product_odt extends ModelePDFProduct
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
    +
     		if ($conf->produit->dir_output)
     		{
     			// If $object is id instead of object
    @@ -344,16 +359,17 @@ class doc_generic_product_odt extends ModelePDFProduct
     					$odfHandler = new odf(
     						$srctemplatepath,
     						array(
    -						'PATH_TO_TMP'	  => $conf->produit->dir_temp,
    -						'ZIP_PROXY'		  => 'PclZipProxy',	// PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
    -						'DELIMITER_LEFT'  => '{',
    -						'DELIMITER_RIGHT' => '}'
    +							'PATH_TO_TMP'	  => $conf->produit->dir_temp,
    +							'ZIP_PROXY'		  => 'PclZipProxy',	// PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
    +							'DELIMITER_LEFT'  => '{',
    +							'DELIMITER_RIGHT' => '}'
     						)
     					);
     				}
    -				catch(Exception $e)
    +				catch (Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -368,8 +384,9 @@ class doc_generic_product_odt extends ModelePDFProduct
     				try {
     					$odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
     				}
    -				catch(OdfException $e)
    +				catch (OdfException $e)
     				{
    +					dol_syslog($e->getMessage(), LOG_INFO);
     				}
     
     				// Define substitution array
    @@ -404,8 +421,9 @@ class doc_generic_product_odt extends ModelePDFProduct
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Replace tags of lines
    @@ -426,11 +444,13 @@ class doc_generic_product_odt extends ModelePDFProduct
     								{
     									$listlines->setVars($key, $val, true, 'UTF-8');
     								}
    -								catch(OdfException $e)
    +								catch (OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
    -								catch(SegmentException $e)
    +								catch (SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -438,7 +458,7 @@ class doc_generic_product_odt extends ModelePDFProduct
     					}
     					$odfHandler->mergeSegment($listlines);
     				}
    -				catch(OdfException $e)
    +				catch (OdfException $e)
     				{
     					$this->error=$e->getMessage();
     					dol_syslog($this->error, LOG_WARNING);
    @@ -454,6 +474,7 @@ class doc_generic_product_odt extends ModelePDFProduct
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -465,16 +486,18 @@ class doc_generic_product_odt extends ModelePDFProduct
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
     				else {
     					try {
    -					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +						$odfHandler->saveToDisk($file);
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -499,6 +522,4 @@ class doc_generic_product_odt extends ModelePDFProduct
     
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/product/doc/pdf_standard.modules.php b/htdocs/core/modules/product/doc/pdf_standard.modules.php
    index 032f75f0d65..8d30448bf2f 100644
    --- a/htdocs/core/modules/product/doc/pdf_standard.modules.php
    +++ b/htdocs/core/modules/product/doc/pdf_standard.modules.php
    @@ -58,9 +58,9 @@ class pdf_standard extends ModelePDFProduct
     
     	/**
          * @var array() Minimum version of PHP required by module.
    -	 * e.g.: PHP ≥ 5.3 = array(5, 3)
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
          */
    -	public $phpmin = array(5, 2);
    +	public $phpmin = array(5, 4);
     
     	/**
          * Dolibarr version of the loaded document
    @@ -68,15 +68,46 @@ class pdf_standard extends ModelePDFProduct
          */
     	public $version = 'dolibarr';
     
    +    /**
    +     * @var int page_largeur
    +     */
         public $page_largeur;
    +
    +    /**
    +     * @var int page_hauteur
    +     */
         public $page_hauteur;
    +
    +    /**
    +     * @var array format
    +     */
         public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
     	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
     	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
     	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
     	public $marge_basse;
     
    -    public $emetteur;	// Objet societe qui emet
    +    /**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
     
     	/**
    @@ -88,8 +119,8 @@ class pdf_standard extends ModelePDFProduct
     	{
     		global $conf,$langs,$mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load traductions files requiredby by page
    +		$langs->loadLangs(array("main", "companies"));
     
     		$this->db = $db;
     		$this->name = "standard";
    @@ -117,6 +148,7 @@ class pdf_standard extends ModelePDFProduct
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -130,19 +162,15 @@ class pdf_standard extends ModelePDFProduct
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$db,$hookmanager;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("products");
    -		$outputlangs->load("orders");
    -		$outputlangs->load("deliveries");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "orders", "deliveries"));
     
     		$nblignes = count($object->lines);
     
    @@ -688,11 +716,9 @@ class pdf_standard extends ModelePDFProduct
     	{
     	    global $conf,$langs,$hookmanager;
     
    -	    $outputlangs->load("main");
    -	    $outputlangs->load("bills");
    -	    $outputlangs->load("propal");
    -	    $outputlangs->load("companies");
    -	    $outputlangs->load("orders");
    +	    // Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "propal", "companies", "bills", "orders"));
    +
     	    $default_font_size = pdf_getPDFFontSize($outputlangs);
     
     	    if ($object->type == 1) $titlekey='ServiceSheet';
    @@ -841,6 +867,4 @@ class pdf_standard extends ModelePDFProduct
     	    $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     	    return pdf_pagefoot($pdf,$outputlangs,'PRODUCT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/product/mod_codeproduct_elephant.php b/htdocs/core/modules/product/mod_codeproduct_elephant.php
    index 32941ca1ec9..1b455743cb2 100644
    --- a/htdocs/core/modules/product/mod_codeproduct_elephant.php
    +++ b/htdocs/core/modules/product/mod_codeproduct_elephant.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2006-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -34,18 +34,39 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/product/modules_product.class.php'
      */
     class mod_codeproduct_elephant extends ModeleProductCode
     {
    -	var $nom='Elephant';				// Nom du modele
    -	var $name='Elephant';				// Nom du modele
    -	var $code_modifiable;				// Code modifiable
    -	var $code_modifiable_invalide;		// Code modifiable si il est invalide
    -	var $code_modifiable_null;			// Code modifiables si il est null
    -	var $code_null;						// Code facultatif
    -	var $version='dolibarr';    		// 'development', 'experimental', 'dolibarr'
    -	var $code_auto;                     // Numerotation automatique
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Elephant';
     
    -	var $searchcode; // String de recherche
    -	var $numbitcounter; // Nombre de chiffres du compteur
    -	var $prefixIsRequired; // Le champ prefix du tiers doit etre renseigne quand on utilise {pre}
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Elephant';
    +
    +	public $code_modifiable;				// Code modifiable
    +
    +	public $code_modifiable_invalide;		// Code modifiable si il est invalide
    +
    +	public $code_modifiable_null;			// Code modifiables si il est null
    +
    +	public $code_null;						// Code facultatif
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';    		// 'development', 'experimental', 'dolibarr'
    +
    +	public $code_auto;                     // Numerotation automatique
    +
    +	public $searchcode; // String de recherche
    +
    +	public $numbitcounter; // Nombre de chiffres du compteur
    +
    +	public $prefixIsRequired; // Le champ prefix du tiers doit etre renseigne quand on utilise {pre}
     
     
     	/**
    @@ -198,6 +219,7 @@ class mod_codeproduct_elephant extends ModeleProductCode
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Check if mask/numbering use prefix
     	 *
    @@ -205,6 +227,7 @@ class mod_codeproduct_elephant extends ModeleProductCode
     	 */
     	function verif_prefixIsUsed()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$mask = $conf->global->PRODUCT_ELEPHANT_MASK_PRODUCT;
    @@ -273,6 +296,7 @@ class mod_codeproduct_elephant extends ModeleProductCode
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *		Renvoi si un code est pris ou non (par autre tiers)
     	 *
    @@ -283,6 +307,7 @@ class mod_codeproduct_elephant extends ModeleProductCode
     	 */
     	function verif_dispo($db, $code, $product)
     	{
    +        // phpcs:enable
     		$sql = "SELECT ref FROM ".MAIN_DB_PREFIX."product";
     		$sql.= " WHERE ref = '".$code."'";
     		if ($product->id > 0) $sql.= " AND rowid <> ".$product->id;
    @@ -303,8 +328,5 @@ class mod_codeproduct_elephant extends ModeleProductCode
     		{
     			return -2;
     		}
    -
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/product/mod_codeproduct_leopard.php b/htdocs/core/modules/product/mod_codeproduct_leopard.php
    index 3b850e1ba91..815e383d900 100644
    --- a/htdocs/core/modules/product/mod_codeproduct_leopard.php
    +++ b/htdocs/core/modules/product/mod_codeproduct_leopard.php
    @@ -39,14 +39,33 @@ class mod_codeproduct_leopard extends ModeleProductCode
     	 * Le fonctionnement de celui-ci doit donc rester le plus ouvert possible
     	 */
     
    -	var $nom='Leopard';					// Nom du modele
    -	var $name='Leopard';					// Nom du modele
    -	var $code_modifiable;				// Code modifiable
    -	var $code_modifiable_invalide;		// Code modifiable si il est invalide
    -	var $code_modifiable_null;			// Code modifiables si il est null
    -	var $code_null;						// Code facultatif
    -	var $version='dolibarr';    		// 'development', 'experimental', 'dolibarr'
    -	var $code_auto; 	                // Numerotation automatique
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Leopard';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Leopard';
    +
    +	public $code_modifiable;				// Code modifiable
    +
    +	public $code_modifiable_invalide;		// Code modifiable si il est invalide
    +
    +	public $code_modifiable_null;			// Code modifiables si il est null
    +
    +	public $code_null;						// Code facultatif
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';    		// 'development', 'experimental', 'dolibarr'
    +
    +	public $code_auto; 	                // Numerotation automatique
     
     
     	/**
    diff --git a/htdocs/core/modules/product/modules_product.class.php b/htdocs/core/modules/product/modules_product.class.php
    index 83fc444f258..10470d4d9f0 100644
    --- a/htdocs/core/modules/product/modules_product.class.php
    +++ b/htdocs/core/modules/product/modules_product.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,18 +33,23 @@
      */
     abstract class ModelePDFProduct extends CommonDocGenerator
     {
    -	var $error='';
    -
    -
     	/**
    -	 *	Return list of active generation modules
    -	 *
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return list of active generation modules
    +     *
          *  @param	DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
    -	 */
    +     */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='product';
    @@ -58,7 +63,10 @@ abstract class ModelePDFProduct extends CommonDocGenerator
     
     abstract class ModeleProductCode
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
         /**     Renvoi la description par defaut du modele de numerotation
          *
    @@ -133,6 +141,7 @@ abstract class ModeleProductCode
             return $langs->trans("NotAvailable");
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Renvoi la liste des modeles de numérotation
          *
    @@ -142,6 +151,7 @@ abstract class ModeleProductCode
          */
         static function liste_modeles($db,$maxfilenamelength=0)
         {
    +        // phpcs:enable
             $liste=array();
             $sql ="";
     
    @@ -194,7 +204,7 @@ abstract class ModeleProductCode
                 if (! empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED) && ! empty($this->code_null)) $s.='</strike> '.yn(1,1,2).' ('.$langs->trans("ForcedToByAModule",$langs->transnoentities("yes")).')';
                 $s.='<br>';
             }
    -        if ($type == 1)
    +        elseif ($type == 1)
             {
                 $s.=$langs->trans("RequiredIfService").': ';
                 if (! empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED) && ! empty($this->code_null)) $s.='<strike>';
    @@ -202,7 +212,7 @@ abstract class ModeleProductCode
                 if (! empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED) && ! empty($this->code_null)) $s.='</strike> '.yn(1,1,2).' ('.$langs->trans("ForcedToByAModule",$langs->transnoentities("yes")).')';
                 $s.='<br>';
             }
    -        if ($type == -1)
    +        elseif ($type == -1)
             {
                 $s.=$langs->trans("Required").': ';
                 if (! empty($conf->global->MAIN_COMPANY_CODE_ALWAYS_REQUIRED) && ! empty($this->code_null)) $s.='<strike>';
    @@ -231,15 +241,15 @@ abstract class ModeleProductCode
             return $s;
         }
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
     	 *   Check if mask/numbering use prefix
     	 *
     	 *   @return	int		0=no, 1=yes
     	 */
         function verif_prefixIsUsed()
         {
    +        // phpcs:enable
             return 0;
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/product_batch/modules_product_batch.class.php b/htdocs/core/modules/product_batch/modules_product_batch.class.php
    index 94818d17531..0a2076e4ed0 100644
    --- a/htdocs/core/modules/product_batch/modules_product_batch.class.php
    +++ b/htdocs/core/modules/product_batch/modules_product_batch.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -21,10 +21,10 @@
     
     
     /**
    - *	    \class      ModeleProductCode
    - *		\brief  	Parent class for product code generators
    + *      \class      ModeleProductCode
    + *      \brief      Parent class for product code generators
      */
    - 
    +
     /**
      *  \file       htdocs/core/modules/contract/modules_contract.php
      *  \ingroup    contract
    @@ -32,32 +32,36 @@
      */
     
      require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
    - 
    +
     /**
      *	Parent class to manage intervention document templates
      */
     abstract class ModelePDFProductBatch extends CommonDocGenerator
     {
    -	var $error='';
    -
    -
     	/**
    -	 *	Return list of active generation modules
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +	 *  Return list of active generation modules
     	 *
    -     *  @param	DoliDB	$db     			Database handler
    +     *  @param  DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
    -	 */
    -	static function liste_modeles($db,$maxfilenamelength=0)
    +     */
    +    static function liste_modeles($db, $maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='product_batch';
    -		$liste=array();
    +		$list = array();
     
     		include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    -		$liste=getListOfModels($db,$type,$maxfilenamelength);
    -		return $liste;
    +		$list = getListOfModels($db, $type, $maxfilenamelength);
    +		return $list;
     	}
     }
    -
    diff --git a/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php b/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php
    index 69a7a84f79f..1ab3dc0180c 100644
    --- a/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php
    +++ b/htdocs/core/modules/project/doc/doc_generic_project_odt.modules.php
    @@ -3,6 +3,7 @@
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2013		Florian Henry		<florian.henry@ope-concept.pro>
      * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -53,10 +54,23 @@ if (! empty($conf->agenda->enabled))      require_once DOL_DOCUMENT_ROOT.'/comm/
      */
     class doc_generic_project_odt extends ModelePDFProjects
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -66,7 +80,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
     		// Load traductions files requiredby by page
     		$langs->loadLangs(array("companies", "main"));
    @@ -103,6 +117,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Define array with couple substitution key => substitution value
     	 *
    @@ -113,6 +128,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function get_substitutionarray_object($object,$outputlangs,$array_key='object')
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$resarray=array(
    @@ -140,6 +156,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     		return $resarray;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -149,6 +166,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function get_substitutionarray_tasks($task,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$resarray = array(
    @@ -177,9 +195,9 @@ class doc_generic_project_odt extends ModelePDFProjects
     		$resarray = $this->fill_substitutionarray_with_extrafields($task,$resarray,$extrafields,'task',$outputlangs);
     
     		return $resarray;
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -189,6 +207,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function get_substitutionarray_project_contacts($contact,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     		$pc='projcontacts_'; // prefix to avoid typos
     
    @@ -214,7 +233,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     			$ret[$pc.'phone_mobile'] = $ct->phone_mobile;
     
     			// fetch external user extrafields
    -			require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
    +			require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     			$extrafields=new ExtraFields($this->db);
     			$extralabels=$extrafields->fetch_name_optionals_label($ct->table_element, true);
     			$extrafields_num = $ct->fetch_optionals();
    @@ -236,6 +255,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -245,6 +265,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function get_substitutionarray_project_file($file,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -254,6 +275,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -263,6 +285,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function get_substitutionarray_project_reference($refdetail,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -276,6 +299,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -285,6 +309,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function get_substitutionarray_tasksressource($taskressource,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     		//dol_syslog(get_class($this).'::get_substitutionarray_tasksressource taskressource='.var_export($taskressource,true),LOG_DEBUG);
     		return array(
    @@ -298,6 +323,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -307,6 +333,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function get_substitutionarray_taskstime($tasktime,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -325,6 +352,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -334,6 +362,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function get_substitutionarray_task_file($file,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -354,8 +383,8 @@ class doc_generic_project_odt extends ModelePDFProjects
     	{
     		global $conf,$langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("companies","errors"));
     
     		$form = new Form($this->db);
     
    @@ -433,6 +462,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -443,6 +473,7 @@ class doc_generic_project_odt extends ModelePDFProjects
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager;
     
     		if (empty($srctemplatepath))
    @@ -566,10 +597,9 @@ class doc_generic_project_odt extends ModelePDFProjects
     						'DELIMITER_RIGHT' => '}'
     						)
     					);
    -				}
    -				catch(Exception $e)
    -				{
    +				} catch (Exception $e) {
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -611,8 +641,9 @@ class doc_generic_project_odt extends ModelePDFProjects
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -642,9 +673,11 @@ class doc_generic_project_odt extends ModelePDFProjects
     							}
     							catch(OdfException $e)
     							{
    +								dol_syslog($e->getMessage(), LOG_INFO);
     							}
     							catch(SegmentException $e)
     							{
    +								dol_syslog($e->getMessage(), LOG_INFO);
     							}
     						}
     
    @@ -691,9 +724,11 @@ class doc_generic_project_odt extends ModelePDFProjects
     									}
     									catch(OdfException $e)
     									{
    +										dol_syslog($e->getMessage(), LOG_INFO);
     									}
     									catch(SegmentException $e)
     									{
    +										dol_syslog($e->getMessage(), LOG_INFO);
     									}
     								}
     								$listlinestaskres->merge();
    @@ -738,9 +773,11 @@ class doc_generic_project_odt extends ModelePDFProjects
     									}
     									catch(OdfException $e)
     									{
    +										dol_syslog($e->getMessage(), LOG_INFO);
     									}
     									catch(SegmentException $e)
     									{
    +										dol_syslog($e->getMessage(), LOG_INFO);
     									}
     								}
     								$listlinestasktime->merge();
    @@ -776,9 +813,11 @@ class doc_generic_project_odt extends ModelePDFProjects
     									}
     									catch(OdfException $e)
     									{
    +										dol_syslog($e->getMessage(), LOG_INFO);
     									}
     									catch(SegmentException $e)
     									{
    +										dol_syslog($e->getMessage(), LOG_INFO);
     									}
     								}
     								$listlinestasktime->merge();
    @@ -805,11 +844,13 @@ class doc_generic_project_odt extends ModelePDFProjects
     								{
     									$listtasksfiles->setVars($key, $val, true, 'UTF-8');
     								}
    -								catch(OdfException $e)
    +								catch (OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
    -								catch(SegmentException $e)
    +								catch (SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listtasksfiles->merge();
    @@ -851,9 +892,11 @@ class doc_generic_project_odt extends ModelePDFProjects
     							}
     							catch(OdfException $e)
     							{
    +								dol_syslog($e->getMessage(), LOG_INFO);
     							}
     							catch(SegmentException $e)
     							{
    +								dol_syslog($e->getMessage(), LOG_INFO);
     							}
     						}
     						$listlines->merge();
    @@ -908,9 +951,11 @@ class doc_generic_project_odt extends ModelePDFProjects
     								}
     								catch(OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -928,113 +973,113 @@ class doc_generic_project_odt extends ModelePDFProjects
     				//List of referent
     
     				$listofreferent = array(
    -						'propal' => array(
    -								'title' => "ListProposalsAssociatedProject",
    -								'class' => 'Propal',
    -								'table' => 'propal',
    -								'test' => $conf->propal->enabled && $user->rights->propale->lire
    -						),
    -						'order' => array(
    -								'title' => "ListOrdersAssociatedProject",
    -								'class' => 'Commande',
    -								'table' => 'commande',
    -								'test' => $conf->commande->enabled && $user->rights->commande->lire
    -						),
    -						'invoice' => array(
    -								'title' => "ListInvoicesAssociatedProject",
    -								'class' => 'Facture',
    -								'table' => 'facture',
    -								'test' => $conf->facture->enabled && $user->rights->facture->lire
    -						),
    -						'invoice_predefined' => array(
    -								'title' => "ListPredefinedInvoicesAssociatedProject",
    -								'class' => 'FactureRec',
    -								'table' => 'facture_rec',
    -								'test' => $conf->facture->enabled && $user->rights->facture->lire
    -						),
    -						'proposal_supplier' => array(
    -								'title' => "ListSupplierProposalsAssociatedProject",
    -								'class' => 'SupplierProposal',
    -								'table' => 'supplier_proposal',
    -								'test' => $conf->supplier_proposal->enabled && $user->rights->supplier_proposal->lire
    -						),
    -						'order_supplier' => array(
    -								'title' => "ListSupplierOrdersAssociatedProject",
    -								'table' => 'commande_fournisseur',
    -								'class' => 'CommandeFournisseur',
    -								'test' => $conf->fournisseur->enabled && $user->rights->fournisseur->commande->lire
    -						),
    -						'invoice_supplier' => array(
    -								'title' => "ListSupplierInvoicesAssociatedProject",
    -								'table' => 'facture_fourn',
    -								'class' => 'FactureFournisseur',
    -								'test' => $conf->fournisseur->enabled && $user->rights->fournisseur->facture->lire
    -						),
    -						'contract' => array(
    -								'title' => "ListContractAssociatedProject",
    -								'class' => 'Contrat',
    -								'table' => 'contrat',
    -								'test' => $conf->contrat->enabled && $user->rights->contrat->lire
    -						),
    -						'intervention' => array(
    -								'title' => "ListFichinterAssociatedProject",
    -								'class' => 'Fichinter',
    -								'table' => 'fichinter',
    -								'disableamount' => 1,
    -								'test' => $conf->ficheinter->enabled && $user->rights->ficheinter->lire
    -						),
    -						'shipping' => array(
    -								'title' => "ListShippingAssociatedProject",
    -								'class' => 'Expedition',
    -								'table' => 'expedition',
    -								'disableamount' => 1,
    -								'test' => $conf->expedition->enabled && $user->rights->expedition->lire
    -						),
    -						'trip' => array(
    -								'title' => "ListTripAssociatedProject",
    -								'class' => 'Deplacement',
    -								'table' => 'deplacement',
    -								'disableamount' => 1,
    -								'test' => $conf->deplacement->enabled && $user->rights->deplacement->lire
    -						),
    -						'expensereport' => array(
    -								'title' => "ListExpenseReportsAssociatedProject",
    -								'class' => 'ExpenseReportLine',
    -								'table' => 'expensereport_det',
    -								'test' => $conf->expensereport->enabled && $user->rights->expensereport->lire
    -						),
    -						'donation' => array(
    -								'title' => "ListDonationsAssociatedProject",
    -								'class' => 'Don',
    -								'table' => 'don',
    -								'test' => $conf->don->enabled && $user->rights->don->lire
    -						),
    -						'loan' => array(
    -								'title' => "ListLoanAssociatedProject",
    -								'class' => 'Loan',
    -								'table' => 'loan',
    -								'test' => $conf->loan->enabled && $user->rights->loan->read
    -						),
    -						'chargesociales' => array(
    -								'title' => "ListSocialContributionAssociatedProject",
    -								'class' => 'ChargeSociales',
    -								'table' => 'chargesociales',
    -								'urlnew' => DOL_URL_ROOT . '/compta/sociales/card.php?action=create&projectid=' . $id,
    -								'test' => $conf->tax->enabled && $user->rights->tax->charges->lire
    -						),
    -						'stock_mouvement' => array(
    -								'title' => "ListMouvementStockProject",
    -								'class' => 'MouvementStock',
    -								'table' => 'stock_mouvement',
    -								'test' => ($conf->stock->enabled && $user->rights->stock->mouvement->lire && ! empty($conf->global->STOCK_MOVEMENT_INTO_PROJECT_OVERVIEW))
    -						),
    -						'agenda' => array(
    -								'title' => "ListActionsAssociatedProject",
    -								'class' => 'ActionComm',
    -								'table' => 'actioncomm',
    -								'disableamount' => 1,
    -								'test' => $conf->agenda->enabled && $user->rights->agenda->allactions->lire
    -						)
    +					'propal' => array(
    +						'title' => "ListProposalsAssociatedProject",
    +						'class' => 'Propal',
    +						'table' => 'propal',
    +						'test' => $conf->propal->enabled && $user->rights->propale->lire
    +					),
    +					'order' => array(
    +						'title' => "ListOrdersAssociatedProject",
    +						'class' => 'Commande',
    +						'table' => 'commande',
    +						'test' => $conf->commande->enabled && $user->rights->commande->lire
    +					),
    +					'invoice' => array(
    +						'title' => "ListInvoicesAssociatedProject",
    +						'class' => 'Facture',
    +						'table' => 'facture',
    +						'test' => $conf->facture->enabled && $user->rights->facture->lire
    +					),
    +					'invoice_predefined' => array(
    +						'title' => "ListPredefinedInvoicesAssociatedProject",
    +						'class' => 'FactureRec',
    +						'table' => 'facture_rec',
    +						'test' => $conf->facture->enabled && $user->rights->facture->lire
    +					),
    +					'proposal_supplier' => array(
    +						'title' => "ListSupplierProposalsAssociatedProject",
    +						'class' => 'SupplierProposal',
    +						'table' => 'supplier_proposal',
    +						'test' => $conf->supplier_proposal->enabled && $user->rights->supplier_proposal->lire
    +					),
    +					'order_supplier' => array(
    +						'title' => "ListSupplierOrdersAssociatedProject",
    +						'table' => 'commande_fournisseur',
    +						'class' => 'CommandeFournisseur',
    +						'test' => $conf->fournisseur->enabled && $user->rights->fournisseur->commande->lire
    +					),
    +					'invoice_supplier' => array(
    +						'title' => "ListSupplierInvoicesAssociatedProject",
    +						'table' => 'facture_fourn',
    +						'class' => 'FactureFournisseur',
    +						'test' => $conf->fournisseur->enabled && $user->rights->fournisseur->facture->lire
    +					),
    +					'contract' => array(
    +						'title' => "ListContractAssociatedProject",
    +						'class' => 'Contrat',
    +						'table' => 'contrat',
    +						'test' => $conf->contrat->enabled && $user->rights->contrat->lire
    +					),
    +					'intervention' => array(
    +						'title' => "ListFichinterAssociatedProject",
    +						'class' => 'Fichinter',
    +						'table' => 'fichinter',
    +						'disableamount' => 1,
    +						'test' => $conf->ficheinter->enabled && $user->rights->ficheinter->lire
    +					),
    +					'shipping' => array(
    +						'title' => "ListShippingAssociatedProject",
    +						'class' => 'Expedition',
    +						'table' => 'expedition',
    +						'disableamount' => 1,
    +						'test' => $conf->expedition->enabled && $user->rights->expedition->lire
    +					),
    +					'trip' => array(
    +						'title' => "ListTripAssociatedProject",
    +						'class' => 'Deplacement',
    +						'table' => 'deplacement',
    +						'disableamount' => 1,
    +						'test' => $conf->deplacement->enabled && $user->rights->deplacement->lire
    +					),
    +					'expensereport' => array(
    +						'title' => "ListExpenseReportsAssociatedProject",
    +						'class' => 'ExpenseReportLine',
    +						'table' => 'expensereport_det',
    +						'test' => $conf->expensereport->enabled && $user->rights->expensereport->lire
    +					),
    +					'donation' => array(
    +						'title' => "ListDonationsAssociatedProject",
    +						'class' => 'Don',
    +						'table' => 'don',
    +						'test' => $conf->don->enabled && $user->rights->don->lire
    +					),
    +					'loan' => array(
    +						'title' => "ListLoanAssociatedProject",
    +						'class' => 'Loan',
    +						'table' => 'loan',
    +						'test' => $conf->loan->enabled && $user->rights->loan->read
    +					),
    +					'chargesociales' => array(
    +						'title' => "ListSocialContributionAssociatedProject",
    +						'class' => 'ChargeSociales',
    +						'table' => 'chargesociales',
    +						'urlnew' => DOL_URL_ROOT . '/compta/sociales/card.php?action=create&projectid=' . $id,
    +						'test' => $conf->tax->enabled && $user->rights->tax->charges->lire
    +					),
    +					'stock_mouvement' => array(
    +						'title' => "ListMouvementStockProject",
    +						'class' => 'MouvementStock',
    +						'table' => 'stock_mouvement',
    +						'test' => ($conf->stock->enabled && $user->rights->stock->mouvement->lire && ! empty($conf->global->STOCK_MOVEMENT_INTO_PROJECT_OVERVIEW))
    +					),
    +					'agenda' => array(
    +						'title' => "ListActionsAssociatedProject",
    +						'class' => 'ActionComm',
    +						'table' => 'actioncomm',
    +						'disableamount' => 1,
    +						'test' => $conf->agenda->enabled && $user->rights->agenda->allactions->lire
    +					),
     				);
     
     				//Insert reference
    @@ -1086,11 +1131,11 @@ class doc_generic_project_odt extends ModelePDFProjects
     										if (!empty($element->total_ht)) {
     											$ref_array['amountht']=$element->total_ht;
     											$ref_array['amountttc']=$element->total_ttc;
    -										}else {
    +										} else {
     											$ref_array['amountht']=0;
     											$ref_array['amountttc']=0;
     										}
    -									}else {
    +									} else {
     										$ref_array['amountht']='';
     										$ref_array['amountttc']='';
     									}
    @@ -1107,21 +1152,20 @@ class doc_generic_project_odt extends ModelePDFProjects
     										}
     										catch(OdfException $e)
     										{
    +											dol_syslog($e->getMessage(), LOG_INFO);
     										}
     										catch(SegmentException $e)
     										{
    +											dol_syslog($e->getMessage(), LOG_INFO);
     										}
     									}
     									$listlines->merge();
     								}
    -
     							}
     						}
     						$odfHandler->mergeSegment($listlines);
     					}
    -				}
    -				catch(OdfException $e)
    -				{
    +				} catch(OdfException $e) {
     					$this->error=$e->getMessage();
     					dol_syslog($this->error, LOG_WARNING);
     					return -1;
    @@ -1133,9 +1177,8 @@ class doc_generic_project_odt extends ModelePDFProjects
     				{
     					try {
     						$odfHandler->setVars($key, $value, true, 'UTF-8');
    -					}
    -					catch(OdfException $e)
    -					{
    +					} catch (OdfException $e) {
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -1148,16 +1191,16 @@ class doc_generic_project_odt extends ModelePDFProjects
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
     						return -1;
     					}
    -				}
    -				else {
    +				} else {
     					try {
    -					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +						$odfHandler->saveToDisk($file);
    +					} catch (Exception $e){
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -1182,5 +1225,4 @@ class doc_generic_project_odt extends ModelePDFProjects
     
     		return -1;
     	}
    -
     }
    diff --git a/htdocs/core/modules/project/doc/pdf_baleine.modules.php b/htdocs/core/modules/project/doc/pdf_baleine.modules.php
    index baa38e8ad2d..11305e8a246 100644
    --- a/htdocs/core/modules/project/doc/pdf_baleine.modules.php
    +++ b/htdocs/core/modules/project/doc/pdf_baleine.modules.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@inodbox.com>
      * Copyright (C) 2018      Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -38,7 +38,78 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
     class pdf_baleine extends ModelePDFProjects
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
    +
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
    +
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
    +
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +    /**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
     	/**
     	 *	Constructor
    @@ -48,7 +119,7 @@ class pdf_baleine extends ModelePDFProjects
     	function __construct($db)
     	{
     		global $conf,$langs,$mysoc;
    -		
    +
     		// Translations
     		$langs->loadLangs(array("main", "projects", "companies"));
     
    @@ -94,8 +165,9 @@ class pdf_baleine extends ModelePDFProjects
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *	Fonction generant le projet sur le disque
    +	 *  Fonction generant le projet sur le disque
     	 *
     	 *	@param	Project		$object   		Object project a generer
     	 *	@param	Translate	$outputlangs	Lang output object
    @@ -103,16 +175,15 @@ class pdf_baleine extends ModelePDFProjects
     	 */
     	function write_file($object,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf, $hookmanager, $langs, $user;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("projects");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "projects"));
     
     		if ($conf->projet->dir_output)
     		{
    @@ -602,5 +673,4 @@ class pdf_baleine extends ModelePDFProjects
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'PROJECT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    diff --git a/htdocs/core/modules/project/doc/pdf_beluga.modules.php b/htdocs/core/modules/project/doc/pdf_beluga.modules.php
    index 4f1d9179aa1..40ae5097d2f 100644
    --- a/htdocs/core/modules/project/doc/pdf_beluga.modules.php
    +++ b/htdocs/core/modules/project/doc/pdf_beluga.modules.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin  <regis.houssin@inodbox.com>
      * Copyright (C) 2015		Charlie Benke  <charlie@patas-monkey.com>
      * Copyright (C) 2018      Laurent Destailleur <eldy@users.sourceforge.net>
      *
    @@ -54,7 +54,11 @@ if (! empty($conf->agenda->enabled))        require_once DOL_DOCUMENT_ROOT.'/com
     
     class pdf_beluga extends ModelePDFProjects
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
     	/**
     	 *	Constructor
    @@ -64,7 +68,7 @@ class pdf_beluga extends ModelePDFProjects
     	function __construct($db)
     	{
     		global $conf,$langs,$mysoc;
    -		
    +
     		// Translations
     		$langs->loadLangs(array("main", "projects", "companies"));
     
    @@ -110,6 +114,7 @@ class pdf_beluga extends ModelePDFProjects
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Fonction generant le projet sur le disque
     	 *
    @@ -119,6 +124,7 @@ class pdf_beluga extends ModelePDFProjects
     	 */
     	function write_file($object,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf, $hookmanager, $langs, $user;
     
             $formproject=new FormProjets($this->db);
    @@ -127,10 +133,8 @@ class pdf_beluga extends ModelePDFProjects
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("projects");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "projects"));
     
     		if ($conf->projet->dir_output)
     		{
    @@ -255,7 +259,7 @@ class pdf_beluga extends ModelePDFProjects
     				$iniY = $tab_top + $heightoftitleline + 1;
     				$curY = $tab_top + $heightoftitleline + 1;
     				$nexY = $tab_top + $heightoftitleline + 1;
    -				
    +
                     $listofreferent=array(
                         'propal'=>array(
                         	'name'=>"Proposals",
    @@ -370,8 +374,8 @@ class pdf_beluga extends ModelePDFProjects
     
                         //var_dump("$key, $tablename, $datefieldname, $dates, $datee");
                         $elementarray = $object->get_element_list($key, $tablename, $datefieldname, $dates, $datee);
    -                    
    -                    if ($key == 'agenda') 
    +
    +                    if ($key == 'agenda')
                         {
     //                    	var_dump($elementarray);
                         }
    @@ -380,11 +384,11 @@ class pdf_beluga extends ModelePDFProjects
                         if ($num >= 0)
                         {
                             $nexY = $pdf->GetY() + 5;
    -                        
    +
                             $curY = $nexY;
                             $pdf->SetFont('','', $default_font_size - 1);   // Into loop to work with multipage
                             $pdf->SetTextColor(0,0,0);
    -                          
    +
                             $pdf->SetXY($this->posxref, $curY);
                             $pdf->MultiCell($this->posxstatut - $this->posxref, 3, $outputlangs->transnoentities($title), 0, 'L');
     
    @@ -420,7 +424,7 @@ class pdf_beluga extends ModelePDFProjects
                                 $num = count($elementarray);
     
     				// Loop on each lines
    -				for ($i = 0; $i < $num; $i ++) 
    +				for ($i = 0; $i < $num; $i ++)
     				{
     					$curY = $nexY;
     					$pdf->SetFont('','', $default_font_size - 1);   // Into loop to work with multipage
    @@ -498,10 +502,10 @@ class pdf_beluga extends ModelePDFProjects
     								$pdf->SetFont('','',  $default_font_size - 1);   // On repositionne la police par defaut
     								$pdf->MultiCell(0, 3, '');		// Set interline to 3
     								$pdf->SetTextColor(0,0,0);
    -								
    +
     								$pdf->setPageOrientation('', 1, $heightforfooter);	// The only function to edit the bottom margin of current page to set it.
     								$curY = $tab_top_newpage + $heightoftitleline + 1;
    -								
    +
     								// Label
     								$pdf->SetXY($this->posxref, $curY);
     								$posybefore=$pdf->GetY();
    @@ -559,7 +563,7 @@ class pdf_beluga extends ModelePDFProjects
     					{
     						$pdf->MultiCell($this->posxamountht - $this->posxsociety, 3, (is_object($element->thirdparty)?$element->thirdparty->name:''), 1, 'L');
     					}
    -					
    +
                                     // Amount without tax
                                     if (empty($value['disableamount'])) {
                                         $pdf->SetXY($this->posxamountht, $curY);
    @@ -612,7 +616,7 @@ class pdf_beluga extends ModelePDFProjects
                                 $curY = $nexY;
                             }
                         }
    -                
    +
     					$nexY+=2;    // Passe espace entre les lignes
     
     					// Detect if some page were added automatically and output _tableau for past pages
    @@ -777,7 +781,7 @@ class pdf_beluga extends ModelePDFProjects
     			$pdf->SetXY($posx,$posy);
     			$pdf->MultiCell(100, 4, $outputlangs->transnoentities("ThirdParty")." : " . $object->thirdparty->getFullName($outputlangs), '', 'R');
     		}
    -		
    +
     		$pdf->SetTextColor(0,0,60);
     	}
     
    @@ -796,5 +800,4 @@ class pdf_beluga extends ModelePDFProjects
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'PROJECT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    diff --git a/htdocs/core/modules/project/doc/pdf_timespent.modules.php b/htdocs/core/modules/project/doc/pdf_timespent.modules.php
    index c7f23df52e3..a299a9758c7 100644
    --- a/htdocs/core/modules/project/doc/pdf_timespent.modules.php
    +++ b/htdocs/core/modules/project/doc/pdf_timespent.modules.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@inodbox.com>
     
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -37,7 +37,11 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
     class pdf_timespent extends ModelePDFProjects
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
     	/**
     	 *	Constructor
    @@ -47,7 +51,7 @@ class pdf_timespent extends ModelePDFProjects
     	function __construct($db)
     	{
     		global $conf,$langs,$mysoc;
    -		
    +
     		// Translations
     		$langs->loadLangs(array("main", "projects", "companies"));
     
    @@ -93,6 +97,7 @@ class pdf_timespent extends ModelePDFProjects
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Fonction generant le projet sur le disque
     	 *
    @@ -102,16 +107,15 @@ class pdf_timespent extends ModelePDFProjects
     	 */
     	function write_file($object,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf, $hookmanager, $langs, $user;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("projects");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "projects"));
     
     		if ($conf->projet->dir_output)
     		{
    @@ -584,7 +588,6 @@ class pdf_timespent extends ModelePDFProjects
     	    	}
     	    }
             */
    -
     	}
     
     	/**
    @@ -602,6 +605,4 @@ class pdf_timespent extends ModelePDFProjects
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'PROJECT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/project/mod_project_simple.php b/htdocs/core/modules/project/mod_project_simple.php
    index 05256a3e61f..e5f5c268f06 100644
    --- a/htdocs/core/modules/project/mod_project_simple.php
    +++ b/htdocs/core/modules/project/mod_project_simple.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2010		Laurent Destailleur	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -31,11 +31,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/project/modules_project.php';
      */
     class mod_project_simple extends ModeleNumRefProjects
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefix='PJ';
    -    var $error='';
    -	var $nom = "Simple";
    -	var $name = "Simple";
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='PJ';
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Simple';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Simple';
     
     
         /**
    @@ -103,7 +122,7 @@ class mod_project_simple extends ModeleNumRefProjects
     	*  @param   Project	$project	Object project
     	*  @return	string				Value if OK, 0 if KO
     	*/
    -    function getNextValue($objsoc,$project)
    +    function getNextValue($objsoc, $project)
         {
     		global $db,$conf;
     
    @@ -140,16 +159,17 @@ class mod_project_simple extends ModeleNumRefProjects
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     * 	Return next reference not yet used as a reference
    +     *  Return next reference not yet used as a reference
          *
          *  @param	Societe	$objsoc     Object third party
          *  @param  Project	$project	Object project
          *  @return string      		Next not used reference
          */
    -    function project_get_num($objsoc=0,$project='')
    +    function project_get_num($objsoc=0, $project='')
         {
    -        return $this->getNextValue($objsoc,$project);
    +        // phpcs:enable
    +        return $this->getNextValue($objsoc, $project);
         }
     }
    -
    diff --git a/htdocs/core/modules/project/mod_project_universal.php b/htdocs/core/modules/project/mod_project_universal.php
    index e76ed349b46..e052dbcc7bd 100644
    --- a/htdocs/core/modules/project/mod_project_universal.php
    +++ b/htdocs/core/modules/project/mod_project_universal.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,10 +30,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/project/modules_project.php';
      */
     class mod_project_universal extends ModeleNumRefProjects
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Universal';
    -	var $name = 'Universal';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Universal';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Universal';
     
     
         /**
    @@ -43,10 +61,10 @@ class mod_project_universal extends ModeleNumRefProjects
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
    -		$langs->load("projects");
    -		$langs->load("admin");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("projects","admin"));
     
     		$form = new Form($this->db);
     
    @@ -105,7 +123,7 @@ class mod_project_universal extends ModeleNumRefProjects
     	*  @param   Project		$project	Object project
     	*  @return  string					Value if OK, 0 if KO
     	*/
    -    function getNextValue($objsoc,$project)
    +    function getNextValue($objsoc, $project)
         {
     		global $db,$conf;
     
    @@ -121,12 +139,13 @@ class mod_project_universal extends ModeleNumRefProjects
     		}
     
     		$date=empty($project->date_c)?dol_now():$project->date_c;
    -		$numFinal=get_next_value($db,$mask,'projet','ref','',$objsoc->code_client,$date);
    +		$numFinal=get_next_value($db, $mask, 'projet', 'ref', '', (is_object($objsoc) ? $objsoc->code_client : ''), $date);
     
     		return  $numFinal;
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return next reference not yet used as a reference
          *
    @@ -134,9 +153,9 @@ class mod_project_universal extends ModeleNumRefProjects
          *  @param  Project		$project	Object project
          *  @return string      			Next not used reference
          */
    -    function project_get_num($objsoc=0,$project='')
    +    function project_get_num($objsoc=0, $project='')
         {
    -        return $this->getNextValue($objsoc,$project);
    +        // phpcs:enable
    +        return $this->getNextValue($objsoc, $project);
         }
     }
    -
    diff --git a/htdocs/core/modules/project/modules_project.php b/htdocs/core/modules/project/modules_project.php
    index 5f7ef3d5756..af9877d59cb 100644
    --- a/htdocs/core/modules/project/modules_project.php
    +++ b/htdocs/core/modules/project/modules_project.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2014	Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2014	Regis Houssin	<regis.houssin@inodbox.com>
      * Copyright (C) 2014       Marcos García   <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -31,18 +31,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModelePDFProjects extends CommonDocGenerator
     {
    -	var $error='';
    -
    -
     	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
     	 *  Return list of active generation modules
     	 *
    -     *  @param	DoliDB	$db     			Database handler
    +     *  @param  DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
    -	 */
    +     */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='project';
    @@ -62,7 +67,10 @@ abstract class ModelePDFProjects extends CommonDocGenerator
      */
     abstract class ModeleNumRefProjects
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *  Return if a module can be used or not
    diff --git a/htdocs/core/modules/project/task/doc/doc_generic_task_odt.modules.php b/htdocs/core/modules/project/task/doc/doc_generic_task_odt.modules.php
    index 5f7ff754a65..c8c588d1f4f 100644
    --- a/htdocs/core/modules/project/task/doc/doc_generic_task_odt.modules.php
    +++ b/htdocs/core/modules/project/task/doc/doc_generic_task_odt.modules.php
    @@ -3,6 +3,7 @@
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2013		Florian Henry		<florian.henry@ope-concept.pro>
      * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -54,10 +55,23 @@ if (! empty($conf->agenda->enabled))      require_once DOL_DOCUMENT_ROOT.'/comm/
      */
     class doc_generic_task_odt extends ModelePDFTask
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -67,10 +81,10 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -104,6 +118,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Define array with couple substitution key => substitution value
     	 *
    @@ -114,6 +129,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function get_substitutionarray_object($object,$outputlangs,$array_key='object')
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$resarray=array(
    @@ -147,6 +163,7 @@ class doc_generic_task_odt extends ModelePDFTask
     		return $resarray;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -156,6 +173,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function get_substitutionarray_tasks($task,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -176,6 +194,7 @@ class doc_generic_task_odt extends ModelePDFTask
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -185,6 +204,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function get_substitutionarray_project_contacts($contact,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -199,6 +219,7 @@ class doc_generic_task_odt extends ModelePDFTask
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -208,6 +229,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function get_substitutionarray_project_file($file,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -217,6 +239,7 @@ class doc_generic_task_odt extends ModelePDFTask
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -226,6 +249,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function get_substitutionarray_project_reference($refdetail,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -239,6 +263,7 @@ class doc_generic_task_odt extends ModelePDFTask
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -248,6 +273,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function get_substitutionarray_tasksressource($taskressource,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     		//dol_syslog(get_class($this).'::get_substitutionarray_tasksressource taskressource='.var_export($taskressource,true),LOG_DEBUG);
     		return array(
    @@ -261,6 +287,7 @@ class doc_generic_task_odt extends ModelePDFTask
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -270,6 +297,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function get_substitutionarray_taskstime($tasktime,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -284,6 +312,7 @@ class doc_generic_task_odt extends ModelePDFTask
     		);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define array with couple substitution key => substitution value
     	 *
    @@ -293,6 +322,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function get_substitutionarray_task_file($file,$outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		return array(
    @@ -313,8 +343,8 @@ class doc_generic_task_odt extends ModelePDFTask
     	{
     		global $conf,$langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("errors","companies"));
     
     		$form = new Form($this->db);
     
    @@ -392,6 +422,7 @@ class doc_generic_task_odt extends ModelePDFTask
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -402,6 +433,7 @@ class doc_generic_task_odt extends ModelePDFTask
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager;
     
     		if (empty($srctemplatepath))
    @@ -414,10 +446,8 @@ class doc_generic_task_odt extends ModelePDFTask
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("projects");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "projects"));
     
     		if ($conf->projet->dir_output)
     		{
    @@ -531,9 +561,8 @@ class doc_generic_task_odt extends ModelePDFTask
     						{
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
    -					}
    -					catch(OdfException $e)
    -					{
    +					} catch (OdfException $e) {
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -548,15 +577,12 @@ class doc_generic_task_odt extends ModelePDFTask
     					complete_substitutions_array($tmparray, $outputlangs, $object);
     					foreach($tmparray as $key => $val)
     					{
    -						try
    -						{
    +						try {
     							$odfHandler->setVars($key, $val, true, 'UTF-8');
    -						}
    -						catch(OdfException $e)
    -						{
    -						}
    -						catch(SegmentException $e)
    -						{
    +						} catch (OdfException $e) {
    +							dol_syslog($e->getMessage(), LOG_INFO);
    +						} catch(SegmentException $e) {
    +							dol_syslog($e->getMessage(), LOG_INFO);
     						}
     					}
     
    @@ -594,15 +620,13 @@ class doc_generic_task_odt extends ModelePDFTask
     
     							foreach($tmparray as $key => $val)
     							{
    -								try
    -								{
    +								try {
     									$listlinestaskres->setVars($key, $val, true, 'UTF-8');
    +								} catch (OdfException $e) {
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
    -								catch(OdfException $e)
    -								{
    -								}
    -								catch(SegmentException $e)
    -								{
    +								catch (SegmentException $e) {
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlinestaskres->merge();
    @@ -648,9 +672,11 @@ class doc_generic_task_odt extends ModelePDFTask
     								}
     								catch(OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlinestasktime->merge();
    @@ -681,9 +707,11 @@ class doc_generic_task_odt extends ModelePDFTask
     							}
     							catch(OdfException $e)
     							{
    +								dol_syslog($e->getMessage(), LOG_INFO);
     							}
     							catch(SegmentException $e)
     							{
    +								dol_syslog($e->getMessage(), LOG_INFO);
     							}
     						}
     						$listtasksfiles->merge();
    @@ -691,7 +719,6 @@ class doc_generic_task_odt extends ModelePDFTask
     					//$listlines->merge();
     
     					$odfHandler->mergeSegment($listtasksfiles);
    -
     				}
     				catch(OdfException $e)
     				{
    @@ -724,9 +751,11 @@ class doc_generic_task_odt extends ModelePDFTask
     							}
     							catch(OdfException $e)
     							{
    +								dol_syslog($e->getMessage(), LOG_INFO);
     							}
     							catch(SegmentException $e)
     							{
    +								dol_syslog($e->getMessage(), LOG_INFO);
     							}
     						}
     						$listlines->merge();
    @@ -782,9 +811,11 @@ class doc_generic_task_odt extends ModelePDFTask
     								}
     								catch(OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -809,16 +840,18 @@ class doc_generic_task_odt extends ModelePDFTask
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
     				else {
     					try {
     						$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -843,5 +876,4 @@ class doc_generic_task_odt extends ModelePDFTask
     
     		return -1;
     	}
    -
     }
    diff --git a/htdocs/core/modules/project/task/mod_task_simple.php b/htdocs/core/modules/project/task/mod_task_simple.php
    index 1a0aa3e3445..4450c57347d 100644
    --- a/htdocs/core/modules/project/task/mod_task_simple.php
    +++ b/htdocs/core/modules/project/task/mod_task_simple.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2010		Laurent Destailleur	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -31,11 +31,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/project/task/modules_task.php';
      */
     class mod_task_simple extends ModeleNumRefTask
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefix='TK';
    -    var $error='';
    -	var $nom = "Simple";
    -	var $name = "Simple";
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='TK';
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Simple';
    +
    +	/**
    +	 * @var string name
    +	 */
    +	public $name='Simple';
     
     
         /**
    @@ -140,16 +159,16 @@ class mod_task_simple extends ModeleNumRefTask
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     * 	Return next reference not yet used as a reference
    +     *  Return next reference not yet used as a reference
          *
    -     *  @param	Societe	$objsoc     Object third party
    -     *  @param  Task	$object		Object task
    -     *  @return string      		Next not used reference
    +     *  @param  Societe	$objsoc     Object third party
    +     *  @param  Task	$object     Object task
    +     *  @return string              Next not used reference
          */
         function task_get_num($objsoc=0,$object='')
         {
             return $this->getNextValue($objsoc,$object);
         }
     }
    -
    diff --git a/htdocs/core/modules/project/task/mod_task_universal.php b/htdocs/core/modules/project/task/mod_task_universal.php
    index d89acb22b06..3272d180c50 100644
    --- a/htdocs/core/modules/project/task/mod_task_universal.php
    +++ b/htdocs/core/modules/project/task/mod_task_universal.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,10 +30,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/project/task/modules_task.php';
      */
     class mod_task_universal extends ModeleNumRefTask
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Universal';
    -	var $name = 'Universal';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +	/**
    +	 * @var string
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Universal';
    +
    +	/**
    +	 * @var string name
    +	 */
    +	public $name='Universal';
     
     
         /**
    @@ -45,8 +63,8 @@ class mod_task_universal extends ModeleNumRefTask
         {
         	global $conf,$langs;
     
    -		$langs->load("projects");
    -		$langs->load("admin");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("projects","admin"));
     
     		$form = new Form($this->db);
     
    @@ -127,6 +145,7 @@ class mod_task_universal extends ModeleNumRefTask
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return next reference not yet used as a reference
          *
    @@ -136,7 +155,7 @@ class mod_task_universal extends ModeleNumRefTask
          */
         function project_get_num($objsoc=0,$object='')
         {
    -        return $this->getNextValue($objsoc,$object);
    +        // phpcs:enable
    +        return $this->getNextValue($objsoc, $object);
         }
     }
    -
    diff --git a/htdocs/core/modules/project/task/modules_task.php b/htdocs/core/modules/project/task/modules_task.php
    index 7d14ae12a3e..ef7a9be4e98 100644
    --- a/htdocs/core/modules/project/task/modules_task.php
    +++ b/htdocs/core/modules/project/task/modules_task.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
      * Copyright (C) 2010 Florian Henry  <florian.henry<àopen-concept.pro>
      * Copyright (C) 2014 Marcos García  <marcosgdf@gmail.com>
      *
    @@ -32,18 +32,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModelePDFTask extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation modules
     	 *
          *  @param	DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
    -	 */
    -	static function liste_modeles($db,$maxfilenamelength=0)
    +     */
    +    static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='project_task';
    @@ -63,7 +68,10 @@ abstract class ModelePDFTask extends CommonDocGenerator
      */
     abstract class ModeleNumRefTask
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *  Return if a module can be used or not
    diff --git a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php
    index 9686bdf6ec7..18f6d9b6102 100644
    --- a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php
    +++ b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php
    @@ -2,7 +2,8 @@
     /* Copyright (C) 2010-2012 	Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    -*
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 3 of the License, or
    @@ -37,10 +38,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_proposal_odt extends ModelePDFPropales
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -50,10 +64,10 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -97,8 +111,8 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     	{
     		global $conf,$langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("errors","companies"));
     
     		$form = new Form($this->db);
     
    @@ -207,6 +221,7 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -220,6 +235,7 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager;
     
     		if (empty($srctemplatepath))
    @@ -241,10 +257,8 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
     
     		if ($conf->propal->multidir_output[$conf->entity])
     		{
    @@ -368,6 +382,7 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     				catch(Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -382,8 +397,9 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     				try {
     					$odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
     				}
    -				catch(OdfException $e)
    +				catch (OdfException $e)
     				{
    +					dol_syslog($e->getMessage(), LOG_INFO);
     				}
     
     				// Define substitution array
    @@ -420,6 +436,7 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Replace tags of lines
    @@ -452,9 +469,11 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     								}
     								catch(OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -476,8 +495,9 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     					try {
     						$odfHandler->setVars($key, $value, true, 'UTF-8');
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -489,16 +509,18 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
     				else {
     					try {
     					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -523,6 +545,4 @@ class doc_generic_proposal_odt extends ModelePDFPropales
     
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php
    index 88331761d8a..e369018c80b 100644
    --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php
    +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php
    @@ -1,9 +1,9 @@
     <?php
     /* Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand     <raphael.bertrand@resultic.fr>
    - * Copyright (C) 2010-2015 Juanjo Menent	    <jmenent@2byte.es>
    - * Copyright (C) 2012      Christophe Battarel   <christophe.battarel@altairis.fr>
    + * Copyright (C) 2010-2015 Juanjo Menent        <jmenent@2byte.es>
    + * Copyright (C) 2012      Christophe Battarel  <christophe.battarel@altairis.fr>
      * Copyright (C) 2012      Cedric Salvador      <csalvador@gpcsolutions.fr>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2017-2018 Ferran Marcet        <fmarcet@2byte.es>
    @@ -41,24 +41,83 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
      */
     class pdf_azur extends ModelePDFPropales
     {
    -	var $db;
    -	var $name;
    -	var $description;
    -	var $update_main_doc_field;	// Save the name of generated file as the main doc when generating a doc with this template
    -	var $type;
    +	/**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
     
    -	var $phpmin = array(4,3,0); // Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
     
    -	var $page_largeur;
    -	var $page_hauteur;
    -	var $format;
    -	var $marge_gauche;
    -	var	$marge_droite;
    -	var	$marge_haute;
    -	var	$marge_basse;
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
     
    -	var $emetteur;	// Objet societe qui emet
    +    /**
    +     * @var string Save the name of generated file as the main doc when generating a doc with this template
    +     */
    +	public $update_main_doc_field;
    +
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +    /**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
     
     	/**
    @@ -143,6 +202,7 @@ class pdf_azur extends ModelePDFPropales
     		$this->atleastonediscount=0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *  Function to build pdf onto disk
          *
    @@ -156,18 +216,15 @@ class pdf_azur extends ModelePDFPropales
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("propal");
    -		$outputlangs->load("products");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "propal", "products"));
     
     		$nblignes = count($object->lines);
     
    @@ -774,6 +831,7 @@ class pdf_azur extends ModelePDFPropales
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show payments table
     	 *
    @@ -785,10 +843,11 @@ class pdf_azur extends ModelePDFPropales
     	 */
     	function _tableau_versements(&$pdf, $object, $posy, $outputlangs)
     	{
    -
    +        // phpcs:enable
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Show miscellaneous information (payment mode, payment term, ...)
     	 *
    @@ -800,6 +859,7 @@ class pdf_azur extends ModelePDFPropales
     	 */
     	function _tableau_info(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -968,6 +1028,7 @@ class pdf_azur extends ModelePDFPropales
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show total to pay
     	 *
    @@ -980,6 +1041,7 @@ class pdf_azur extends ModelePDFPropales
     	 */
     	function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf,$mysoc;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -1084,7 +1146,6 @@ class pdf_azur extends ModelePDFPropales
     
     								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
     								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    -
     							}
     						}
     					}
    @@ -1379,10 +1440,8 @@ class pdf_azur extends ModelePDFPropales
     	{
     		global $conf,$langs;
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("propal");
    -		$outputlangs->load("companies");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "propal", "companies", "bills"));
     
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -1403,27 +1462,30 @@ class pdf_azur extends ModelePDFPropales
     		$pdf->SetXY($this->marge_gauche,$posy);
     
     		// Logo
    -		$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
    -		if ($this->emetteur->logo)
    +		if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO))
     		{
    -			if (is_readable($logo))
    +			$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
    +			if ($this->emetteur->logo)
     			{
    -			    $height=pdf_getHeightForLogo($logo);
    -			    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
    +				if (is_readable($logo))
    +				{
    +				    $height=pdf_getHeightForLogo($logo);
    +				    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
    +				}
    +				else
    +				{
    +					$pdf->SetTextColor(200,0,0);
    +					$pdf->SetFont('','B',$default_font_size - 2);
    +					$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
    +					$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
    +				}
     			}
     			else
     			{
    -				$pdf->SetTextColor(200,0,0);
    -				$pdf->SetFont('','B',$default_font_size - 2);
    -				$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
    -				$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
    +				$text=$this->emetteur->name;
    +				$pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
     			}
     		}
    -		else
    -		{
    -			$text=$this->emetteur->name;
    -			$pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
    -		}
     
     		$pdf->SetFont('','B',$default_font_size + 3);
     		$pdf->SetXY($posx,$posy);
    @@ -1604,6 +1666,7 @@ class pdf_azur extends ModelePDFPropales
     		return pdf_pagefoot($pdf,$outputlangs,'PROPOSAL_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show area for the customer to sign
     	 *
    @@ -1615,6 +1678,7 @@ class pdf_azur extends ModelePDFPropales
     	 */
     	function _signature_area(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     		$tab_top = $posy + 4;
    diff --git a/htdocs/core/modules/propale/doc/pdf_cyan.modules.php b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php
    new file mode 100644
    index 00000000000..c93fc9a7c81
    --- /dev/null
    +++ b/htdocs/core/modules/propale/doc/pdf_cyan.modules.php
    @@ -0,0 +1,1888 @@
    +<?php
    +/* Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
    + * Copyright (C) 2008      Raphael Bertrand     <raphael.bertrand@resultic.fr>
    + * Copyright (C) 2010-2015 Juanjo Menent	    <jmenent@2byte.es>
    + * Copyright (C) 2012      Christophe Battarel   <christophe.battarel@altairis.fr>
    + * Copyright (C) 2012      Cedric Salvador      <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    + * Copyright (C) 2017      Ferran Marcet        <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
    +
    +/**
    + *	\file       htdocs/core/modules/propale/doc/pdf_cyan.modules.php
    + *	\ingroup    propale
    + *	\brief      Fichier de la classe permettant de generer les propales au modele Cyan
    + */
    +require_once DOL_DOCUMENT_ROOT.'/core/modules/propale/modules_propale.php';
    +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
    +
    +
    +/**
    + *	Class to generate PDF proposal Cyan
    + */
    +class pdf_cyan extends ModelePDFPropales
    +{
    +	public $db;
    +	public $name;
    +	public $description;
    +	public $update_main_doc_field;	// Save the name of generated file as the main doc when generating a doc with this template
    +	public $type;
    +
    +	public $phpmin = array(4,3,0); // Minimum version of PHP required by module
    +	public $version = 'development';
    +
    +	public $page_largeur;
    +	public $page_hauteur;
    +	public $format;
    +	public $marge_gauche;
    +	public	$marge_droite;
    +	public	$marge_haute;
    +	public	$marge_basse;
    +
    +	public $emetteur;	// Objet societe qui emet
    +
    +
    +	/**
    +	 *	Constructor
    +	 *
    +	 *  @param		DoliDB		$db      Database handler
    +	 */
    +	public function __construct($db)
    +	{
    +		global $conf,$langs,$mysoc;
    +
    +		// Translations
    +		$langs->loadLangs(array("main", "bills"));
    +
    +		$this->db = $db;
    +		$this->name = "cyan";
    +		$this->description = $langs->trans('DocModelCyanDescription');
    +		$this->update_main_doc_field = 1;		// Save the name of generated file as the main doc when generating a doc with this template
    +
    +		// Dimension page
    +		$this->type = 'pdf';
    +		$formatarray=pdf_getFormat();
    +		$this->page_largeur = $formatarray['width'];
    +		$this->page_hauteur = $formatarray['height'];
    +		$this->format = array($this->page_largeur,$this->page_hauteur);
    +		$this->marge_gauche=isset($conf->global->MAIN_PDF_MARGIN_LEFT)?$conf->global->MAIN_PDF_MARGIN_LEFT:10;
    +		$this->marge_droite=isset($conf->global->MAIN_PDF_MARGIN_RIGHT)?$conf->global->MAIN_PDF_MARGIN_RIGHT:10;
    +		$this->marge_haute =isset($conf->global->MAIN_PDF_MARGIN_TOP)?$conf->global->MAIN_PDF_MARGIN_TOP:10;
    +		$this->marge_basse =isset($conf->global->MAIN_PDF_MARGIN_BOTTOM)?$conf->global->MAIN_PDF_MARGIN_BOTTOM:10;
    +
    +		$this->option_logo = 1;                    // Affiche logo
    +		$this->option_tva = 1;                     // Gere option tva FACTURE_TVAOPTION
    +		$this->option_modereg = 1;                 // Affiche mode reglement
    +		$this->option_condreg = 1;                 // Affiche conditions reglement
    +		$this->option_codeproduitservice = 1;      // Affiche code produit-service
    +		$this->option_multilang = 1;               // Dispo en plusieurs langues
    +		$this->option_escompte = 0;                // Affiche si il y a eu escompte
    +		$this->option_credit_note = 0;             // Support credit notes
    +		$this->option_freetext = 1;				   // Support add of a personalised text
    +		$this->option_draft_watermark = 1;		   //Support add of a watermark on drafts
    +
    +		$this->franchise=!$mysoc->tva_assuj;
    +
    +		// Get source company
    +		$this->emetteur=$mysoc;
    +		if (empty($this->emetteur->country_code)) $this->emetteur->country_code=substr($langs->defaultlang,-2);    // By default, if was not defined
    +
    +		// Define position of columns
    +		$this->posxdesc=$this->marge_gauche+1;
    +
    +
    +
    +		$this->tva=array();
    +		$this->localtax1=array();
    +		$this->localtax2=array();
    +		$this->atleastoneratenotnull=0;
    +		$this->atleastonediscount=0;
    +	}
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
    +	/**
    +     *  Function to build pdf onto disk
    +     *
    +     *  @param		Object		$object				Object to generate
    +     *  @param		Translate	$outputlangs		Lang output object
    +     *  @param		string		$srctemplatepath	Full path of source filename for generator using a template file
    +     *  @param		int			$hidedetails		Do not show line details
    +     *  @param		int			$hidedesc			Do not show desc
    +     *  @param		int			$hideref			Do not show ref
    +     *  @return     int             				1=OK, 0=KO
    +	 */
    +	public function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
    +	{
    +	  // phpcs:enable
    +		global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes;
    +
    +		if (! is_object($outputlangs)) $outputlangs=$langs;
    +		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
    +		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    +
    +		$outputlangs->load("main");
    +		$outputlangs->load("dict");
    +		$outputlangs->load("companies");
    +		$outputlangs->load("bills");
    +		$outputlangs->load("propal");
    +		$outputlangs->load("products");
    +
    +		$nblignes = count($object->lines);
    +
    +		// Loop on each lines to detect if there is at least one image to show
    +		$realpatharray=array();
    +		$this->atleastonephoto = false;
    +		if (! empty($conf->global->MAIN_GENERATE_PROPOSALS_WITH_PICTURE))
    +		{
    +			$objphoto = new Product($this->db);
    +
    +			for ($i = 0 ; $i < $nblignes ; $i++)
    +			{
    +				if (empty($object->lines[$i]->fk_product)) continue;
    +
    +				$objphoto->fetch($object->lines[$i]->fk_product);
    +                //var_dump($objphoto->ref);exit;
    +				if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO))
    +				{
    +					$pdir[0] = get_exdir($objphoto->id,2,0,0,$objphoto,'product') . $objphoto->id ."/photos/";
    +					$pdir[1] = get_exdir(0,0,0,0,$objphoto,'product') . dol_sanitizeFileName($objphoto->ref).'/';
    +				}
    +				else
    +				{
    +					$pdir[0] = get_exdir(0,0,0,0,$objphoto,'product') . dol_sanitizeFileName($objphoto->ref).'/';				// default
    +					$pdir[1] = get_exdir($objphoto->id,2,0,0,$objphoto,'product') . $objphoto->id ."/photos/";	// alternative
    +				}
    +
    +				$arephoto = false;
    +				foreach ($pdir as $midir)
    +				{
    +					if (! $arephoto)
    +					{
    +						$dir = $conf->product->dir_output.'/'.$midir;
    +
    +						foreach ($objphoto->liste_photos($dir,1) as $key => $obj)
    +						{
    +							if (empty($conf->global->CAT_HIGH_QUALITY_IMAGES))		// If CAT_HIGH_QUALITY_IMAGES not defined, we use thumb if defined and then original photo
    +							{
    +								if ($obj['photo_vignette'])
    +								{
    +									$filename= $obj['photo_vignette'];
    +								}
    +								else
    +								{
    +									$filename=$obj['photo'];
    +								}
    +							}
    +							else
    +							{
    +								$filename=$obj['photo'];
    +							}
    +
    +							$realpath = $dir.$filename;
    +							$arephoto = true;
    +							$this->atleastonephoto = true;
    +						}
    +					}
    +				}
    +
    +				if ($realpath && $arephoto) $realpatharray[$i]=$realpath;
    +			}
    +		}
    +
    +		if (count($realpatharray) == 0) $this->posxpicture=$this->posxtva;
    +
    +		if ($conf->propal->multidir_output[$conf->entity])
    +		{
    +			$object->fetch_thirdparty();
    +
    +			$deja_regle = 0;
    +
    +			// Definition of $dir and $file
    +			if ($object->specimen)
    +			{
    +				$dir = $conf->propal->multidir_output[$conf->entity];
    +				$file = $dir . "/SPECIMEN.pdf";
    +			}
    +			else
    +			{
    +				$objectref = dol_sanitizeFileName($object->ref);
    +				$dir = $conf->propal->multidir_output[$object->entity] . "/" . $objectref;
    +				$file = $dir . "/" . $objectref . ".pdf";
    +			}
    +
    +			if (! file_exists($dir))
    +			{
    +				if (dol_mkdir($dir) < 0)
    +				{
    +					$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
    +					return 0;
    +				}
    +			}
    +
    +			if (file_exists($dir))
    +			{
    +				// Add pdfgeneration hook
    +				if (! is_object($hookmanager))
    +				{
    +					include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
    +					$hookmanager=new HookManager($this->db);
    +				}
    +				$hookmanager->initHooks(array('pdfgeneration'));
    +				$parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs);
    +				global $action;
    +				$reshook=$hookmanager->executeHooks('beforePDFCreation',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
    +
    +				// Create pdf instance
    +                $pdf=pdf_getInstance($this->format);
    +                $default_font_size = pdf_getPDFFontSize($outputlangs);	// Must be after pdf_getInstance
    +	            $pdf->SetAutoPageBreak(1,0);
    +
    +                if (class_exists('TCPDF'))
    +                {
    +                    $pdf->setPrintHeader(false);
    +                    $pdf->setPrintFooter(false);
    +                }
    +                $pdf->SetFont(pdf_getPDFFont($outputlangs));
    +                // Set path to the background PDF File
    +                if (! empty($conf->global->MAIN_ADD_PDF_BACKGROUND))
    +                {
    +                    $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND);
    +                    $tplidx = $pdf->importPage(1);
    +                }
    +
    +				$pdf->Open();
    +				$pagenb=0;
    +				$pdf->SetDrawColor(128,128,128);
    +
    +				$pdf->SetTitle($outputlangs->convToOutputCharset($object->ref));
    +				$pdf->SetSubject($outputlangs->transnoentities("PdfCommercialProposalTitle"));
    +				$pdf->SetCreator("Dolibarr ".DOL_VERSION);
    +				$pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs)));
    +				$pdf->SetKeyWords($outputlangs->convToOutputCharset($object->ref)." ".$outputlangs->transnoentities("PdfCommercialProposalTitle")." ".$outputlangs->convToOutputCharset($object->thirdparty->name));
    +				if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false);
    +
    +				$pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite);   // Left, Top, Right
    +
    +				// Does we have at least one line with discount $this->atleastonediscount
    +				foreach ($object->lines as $line) {
    +				    if ($line->remise_percent){
    +				        $this->atleastonediscount = true;
    +				        break;
    +				    }
    +				}
    +
    +
    +
    +				// New page
    +				$pdf->AddPage();
    +				if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +				$pagenb++;
    +
    +                $heightforinfotot = 40;	// Height reserved to output the info and total part
    +                $heightforsignature = empty($conf->global->PROPAL_DISABLE_SIGNATURE)?(pdfGetHeightForHtmlContent($pdf, $outputlangs->transnoentities("ProposalCustomerSignature"))+10):0;
    +                $heightforfreetext= (isset($conf->global->MAIN_PDF_FREETEXT_HEIGHT)?$conf->global->MAIN_PDF_FREETEXT_HEIGHT:5);	// Height reserved to output the free text on last page
    +                $heightforfooter = $this->marge_basse + (empty($conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS)?12:22);	// Height reserved to output the footer (value include bottom margin)
    +                //print $heightforinfotot + $heightforsignature + $heightforfreetext + $heightforfooter;exit;
    +
    +				$top_shift = $this->_pagehead($pdf, $object, 1, $outputlangs);
    +				$pdf->SetFont('','', $default_font_size - 1);
    +				$pdf->MultiCell(0, 3, '');		// Set interline to 3
    +				$pdf->SetTextColor(0,0,0);
    +
    +
    +	            $tab_top = 90+$top_shift;
    +				$tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42+$top_shift:10);
    +
    +
    +				// Incoterm
    +				$height_incoterms = 0;
    +				if ($conf->incoterm->enabled)
    +				{
    +					$desc_incoterms = $object->getIncotermsForPDF();
    +					if ($desc_incoterms)
    +					{
    +						$tab_top -= 2;
    +
    +						$pdf->SetFont('','', $default_font_size - 1);
    +						$pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top-1, dol_htmlentitiesbr($desc_incoterms), 0, 1);
    +						$nexY = $pdf->GetY();
    +						$height_incoterms=$nexY-$tab_top;
    +
    +						// Rect prend une longueur en 3eme param
    +						$pdf->SetDrawColor(192,192,192);
    +						$pdf->Rect($this->marge_gauche, $tab_top-1, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $height_incoterms+1);
    +
    +						$tab_top = $nexY+6;
    +					}
    +				}
    +
    +				// Affiche notes
    +				$notetoshow=empty($object->note_public)?'':$object->note_public;
    +				if (! empty($conf->global->MAIN_ADD_SALE_REP_SIGNATURE_IN_NOTE))
    +				{
    +					// Get first sale rep
    +					if (is_object($object->thirdparty))
    +					{
    +						$salereparray=$object->thirdparty->getSalesRepresentatives($user);
    +						$salerepobj=new User($this->db);
    +						$salerepobj->fetch($salereparray[0]['id']);
    +						if (! empty($salerepobj->signature)) $notetoshow=dol_concatdesc($notetoshow, $salerepobj->signature);
    +					}
    +				}
    +				if (! empty($conf->global->MAIN_ADD_CREATOR_IN_NOTE) && $object->user_author_id > 0)
    +				{
    +				    $tmpuser=new User($this->db);
    +				    $tmpuser->fetch($object->user_author_id);
    +				    $notetoshow.='Affaire suivi par '.$tmpuser->getFullName($langs);
    +				    if ($tmpuser->email) $notetoshow.=',  Mail: '.$tmpuser->email;
    +				    if ($tmpuser->office_phone) $notetoshow.=', Tel: '.$tmpuser->office_phone;
    +				}
    +
    +				$pagenb = $pdf->getPage();
    +				if ($notetoshow)
    +				{
    +					$tab_top -= 2;
    +
    +				    $tab_width = $this->page_largeur-$this->marge_gauche-$this->marge_droite;
    +				    $pageposbeforenote = $pagenb;
    +
    +					$substitutionarray=pdf_getSubstitutionArray($outputlangs, null, $object);
    +					complete_substitutions_array($substitutionarray, $outputlangs, $object);
    +					$notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs);
    +
    +
    +					$pdf->startTransaction();
    +
    +					$pdf->SetFont('','', $default_font_size - 1);
    +					$pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top, dol_htmlentitiesbr($notetoshow), 0, 1);
    +					// Description
    +					$pageposafternote=$pdf->getPage();
    +					$posyafter = $pdf->GetY();
    +
    +					if($pageposafternote>$pageposbeforenote )
    +					{
    +					    $pdf->rollbackTransaction(true);
    +
    +					    // prepar pages to receive notes
    +					    while ($pagenb < $pageposafternote) {
    +					        $pdf->AddPage();
    +					        $pagenb++;
    +					        if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +					        if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +					        // $this->_pagefoot($pdf,$object,$outputlangs,1);
    +					        $pdf->setTopMargin($tab_top_newpage);
    +					        // The only function to edit the bottom margin of current page to set it.
    +					        $pdf->setPageOrientation('', 1, $heightforfooter + $heightforfreetext);
    +					    }
    +
    +					    // back to start
    +					    $pdf->setPage($pageposbeforenote);
    +					    $pdf->setPageOrientation('', 1, $heightforfooter + $heightforfreetext);
    +					    $pdf->SetFont('','', $default_font_size - 1);
    +					    $pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top, dol_htmlentitiesbr($notetoshow), 0, 1);
    +					    $pageposafternote=$pdf->getPage();
    +
    +					    $posyafter = $pdf->GetY();
    +
    +					    if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+20)))	// There is no space left for total+free text
    +					    {
    +					        $pdf->AddPage('','',true);
    +					        $pagenb++;
    +					        $pageposafternote++;
    +					        $pdf->setPage($pageposafternote);
    +					        $pdf->setTopMargin($tab_top_newpage);
    +					        // The only function to edit the bottom margin of current page to set it.
    +					        $pdf->setPageOrientation('', 1, $heightforfooter + $heightforfreetext);
    +					        //$posyafter = $tab_top_newpage;
    +					    }
    +
    +
    +					    // apply note frame to previus pages
    +					    $i = $pageposbeforenote;
    +					    while ($i < $pageposafternote) {
    +					        $pdf->setPage($i);
    +
    +
    +					        $pdf->SetDrawColor(128,128,128);
    +					        // Draw note frame
    +					        if($i>$pageposbeforenote){
    +					            $height_note = $this->page_hauteur - ($tab_top_newpage + $heightforfooter);
    +					            $pdf->Rect($this->marge_gauche, $tab_top_newpage-1, $tab_width, $height_note + 1);
    +					        }
    +					        else{
    +					            $height_note = $this->page_hauteur - ($tab_top + $heightforfooter);
    +					            $pdf->Rect($this->marge_gauche, $tab_top-1, $tab_width, $height_note + 1);
    +					        }
    +
    +					        // Add footer
    +					        $pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.
    +					        $this->_pagefoot($pdf,$object,$outputlangs,1);
    +
    +					        $i++;
    +					    }
    +
    +					    // apply note frame to last page
    +					    $pdf->setPage($pageposafternote);
    +					    if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +					    if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +					    $height_note=$posyafter-$tab_top_newpage;
    +					    $pdf->Rect($this->marge_gauche, $tab_top_newpage-1, $tab_width, $height_note+1);
    +					}
    +					else // No pagebreak
    +					{
    +					    $pdf->commitTransaction();
    +					    $posyafter = $pdf->GetY();
    +					    $height_note=$posyafter-$tab_top;
    +					    $pdf->Rect($this->marge_gauche, $tab_top-1, $tab_width, $height_note+1);
    +
    +
    +					    if($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+20)) )
    +					    {
    +					        // not enough space, need to add page
    +					        $pdf->AddPage('','',true);
    +					        $pagenb++;
    +					        $pageposafternote++;
    +					        $pdf->setPage($pageposafternote);
    +					        if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +					        if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +
    +					        $posyafter = $tab_top_newpage;
    +					    }
    +					}
    +
    +					$tab_height = $tab_height - $height_note;
    +					$tab_top = $posyafter +6;
    +				}
    +				else
    +				{
    +					$height_note=0;
    +				}
    +
    +				$iniY = $tab_top + 7;
    +				$curY = $tab_top + 7;
    +				$nexY = $tab_top + 7;
    +
    +				// Use new auto collum system
    +				$this->prepareArrayColumnField($object,$outputlangs,$hidedetails,$hidedesc,$hideref);
    +
    +				// Loop on each lines
    +				$pageposbeforeprintlines=$pdf->getPage();
    +				$pagenb = $pageposbeforeprintlines;
    +				for ($i = 0; $i < $nblignes; $i++)
    +				{
    +					$curY = $nexY;
    +					$pdf->SetFont('','', $default_font_size - 1);   // Into loop to work with multipage
    +					$pdf->SetTextColor(0,0,0);
    +
    +					// Define size of image if we need it
    +					$imglinesize=array();
    +					if (! empty($realpatharray[$i])) $imglinesize=pdf_getSizeForImage($realpatharray[$i]);
    +
    +					$pdf->setTopMargin($tab_top_newpage);
    +					$pdf->setPageOrientation('', 1, $heightforfooter+$heightforfreetext+$heightforsignature+$heightforinfotot);	// The only function to edit the bottom margin of current page to set it.
    +					$pageposbefore=$pdf->getPage();
    +
    +					$showpricebeforepagebreak=1;
    +					$posYAfterImage=0;
    +					$posYAfterDescription=0;
    +
    +					if($this->getColumnStatus('photo'))
    +					{
    +    					// We start with Photo of product line
    +    					if (isset($imglinesize['width']) && isset($imglinesize['height']) && ($curY + $imglinesize['height']) > ($this->page_hauteur-($heightforfooter+$heightforfreetext+$heightforsignature+$heightforinfotot)))	// If photo too high, we moved completely on new page
    +    					{
    +    						$pdf->AddPage('','',true);
    +    						if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +    						//if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +    						$pdf->setPage($pageposbefore+1);
    +
    +    						$curY = $tab_top_newpage;
    +    						$showpricebeforepagebreak=0;
    +    					}
    +
    +
    +    					if (!empty($this->cols['photo']) && isset($imglinesize['width']) && isset($imglinesize['height']))
    +    					{
    +    						$pdf->Image($realpatharray[$i], $this->getColumnContentXStart('photo'), $curY, $imglinesize['width'], $imglinesize['height'], '', '', '', 2, 300);	// Use 300 dpi
    +    						// $pdf->Image does not increase value return by getY, so we save it manually
    +    						$posYAfterImage=$curY+$imglinesize['height'];
    +    					}
    +					}
    +
    +					// Description of product line
    +					if($this->getColumnStatus('desc'))
    +					{
    +    					$pdf->startTransaction();
    +    					pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->getColumnContentWidth('desc'),3,$this->getColumnContentXStart('desc'),$curY,$hideref,$hidedesc);
    +    					$pageposafter=$pdf->getPage();
    +    					if ($pageposafter > $pageposbefore)	// There is a pagebreak
    +    					{
    +    						$pdf->rollbackTransaction(true);
    +    						$pageposafter=$pageposbefore;
    +    						//print $pageposafter.'-'.$pageposbefore;exit;
    +    						$pdf->setPageOrientation('', 1, $heightforfooter);	// The only function to edit the bottom margin of current page to set it.
    +    						pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->getColumnContentWidth('desc'),3,$this->getColumnContentXStart('desc'),$curY,$hideref,$hidedesc);
    +
    +    						$pageposafter=$pdf->getPage();
    +    						$posyafter=$pdf->GetY();
    +    						//var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit;
    +    						if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforsignature+$heightforinfotot)))	// There is no space left for total+free text
    +    						{
    +    							if ($i == ($nblignes-1))	// No more lines, and no space left to show total, so we create a new page
    +    							{
    +    								$pdf->AddPage('','',true);
    +    								if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +    								//if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +    								$pdf->setPage($pageposafter+1);
    +    							}
    +    						}
    +    						else
    +    						{
    +    							// We found a page break
    +    							$showpricebeforepagebreak=0;
    +    						}
    +    					}
    +    					else	// No pagebreak
    +    					{
    +    						$pdf->commitTransaction();
    +    					}
    +    					$posYAfterDescription=$pdf->GetY();
    +					}
    +
    +					$nexY = $pdf->GetY();
    +					$pageposafter=$pdf->getPage();
    +
    +					$pdf->setPage($pageposbefore);
    +					$pdf->setTopMargin($this->marge_haute);
    +					$pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.
    +
    +					// We suppose that a too long description or photo were moved completely on next page
    +					if ($pageposafter > $pageposbefore && empty($showpricebeforepagebreak)) {
    +						$pdf->setPage($pageposafter); $curY = $tab_top_newpage;
    +					}
    +
    +					$pdf->SetFont('','', $default_font_size - 1);   // On repositionne la police par defaut
    +
    +					// VAT Rate
    +					if ($this->getColumnStatus('vat'))
    +					{
    +					    $vat_rate = pdf_getlinevatrate($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'vat', $vat_rate);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +					// Unit price before discount
    +					if ($this->getColumnStatus('subprice'))
    +					{
    +					    $up_excl_tax = pdf_getlineupexcltax($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'subprice', $up_excl_tax);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +					// Quantity
    +					// Enough for 6 chars
    +					if ($this->getColumnStatus('qty'))
    +					{
    +					    $qty = pdf_getlineqty($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'qty', $qty);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +
    +					// Unit
    +					if ($this->getColumnStatus('unit'))
    +					{
    +					    $unit = pdf_getlineunit($object, $i, $outputlangs, $hidedetails, $hookmanager);
    +					    $this->printStdColumnContent($pdf, $curY, 'unit', $unit);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +					// Discount on line
    +					if ($this->getColumnStatus('discount') && $object->lines[$i]->remise_percent)
    +					{
    +					    $remise_percent = pdf_getlineremisepercent($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'discount', $remise_percent);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +					// Total HT line
    +					if ($this->getColumnStatus('totalexcltax'))
    +					{
    +					    $total_excl_tax = pdf_getlinetotalexcltax($object, $i, $outputlangs, $hidedetails);
    +					    $this->printStdColumnContent($pdf, $curY, 'totalexcltax', $total_excl_tax);
    +					    $nexY = max($pdf->GetY(),$nexY);
    +					}
    +
    +
    +					$parameters=array(
    +					    'object' => $object,
    +					    'i' => $i,
    +					    'pdf' =>& $pdf,
    +					    'curY' =>& $curY,
    +					    'nexY' =>& $nexY,
    +					    'outputlangs' => $outputlangs,
    +					    'hidedetails' => $hidedetails
    +					);
    +					$reshook=$hookmanager->executeHooks('printPDFline',$parameters,$this);    // Note that $object may have been modified by hook
    +
    +
    +
    +					// Collecte des totaux par valeur de tva dans $this->tva["taux"]=total_tva
    +					if ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) $tvaligne=$object->lines[$i]->multicurrency_total_tva;
    +					else $tvaligne=$object->lines[$i]->total_tva;
    +
    +					$localtax1ligne=$object->lines[$i]->total_localtax1;
    +					$localtax2ligne=$object->lines[$i]->total_localtax2;
    +					$localtax1_rate=$object->lines[$i]->localtax1_tx;
    +					$localtax2_rate=$object->lines[$i]->localtax2_tx;
    +					$localtax1_type=$object->lines[$i]->localtax1_type;
    +					$localtax2_type=$object->lines[$i]->localtax2_type;
    +
    +					if ($object->remise_percent) $tvaligne-=($tvaligne*$object->remise_percent)/100;
    +					if ($object->remise_percent) $localtax1ligne-=($localtax1ligne*$object->remise_percent)/100;
    +					if ($object->remise_percent) $localtax2ligne-=($localtax2ligne*$object->remise_percent)/100;
    +
    +					$vatrate=(string) $object->lines[$i]->tva_tx;
    +
    +					// Retrieve type from database for backward compatibility with old records
    +					if ((! isset($localtax1_type) || $localtax1_type=='' || ! isset($localtax2_type) || $localtax2_type=='') // if tax type not defined
    +					&& (! empty($localtax1_rate) || ! empty($localtax2_rate))) // and there is local tax
    +					{
    +						$localtaxtmp_array=getLocalTaxesFromRate($vatrate,0,$object->thirdparty,$mysoc);
    +						$localtax1_type = $localtaxtmp_array[0];
    +						$localtax2_type = $localtaxtmp_array[2];
    +					}
    +
    +				    // retrieve global local tax
    +					if ($localtax1_type && $localtax1ligne != 0)
    +						$this->localtax1[$localtax1_type][$localtax1_rate]+=$localtax1ligne;
    +					if ($localtax2_type && $localtax2ligne != 0)
    +						$this->localtax2[$localtax2_type][$localtax2_rate]+=$localtax2ligne;
    +
    +					if (($object->lines[$i]->info_bits & 0x01) == 0x01) $vatrate.='*';
    +					if (! isset($this->tva[$vatrate]))				$this->tva[$vatrate]=0;
    +					$this->tva[$vatrate] += $tvaligne;
    +
    +					if ($posYAfterImage > $posYAfterDescription) $nexY=$posYAfterImage;
    +
    +					// Add line
    +					if (! empty($conf->global->MAIN_PDF_DASH_BETWEEN_LINES) && $i < ($nblignes - 1))
    +					{
    +						$pdf->setPage($pageposafter);
    +						$pdf->SetLineStyle(array('dash'=>'1,1','color'=>array(80,80,80)));
    +						//$pdf->SetDrawColor(190,190,200);
    +						$pdf->line($this->marge_gauche, $nexY+1, $this->page_largeur - $this->marge_droite, $nexY+1);
    +						$pdf->SetLineStyle(array('dash'=>0));
    +					}
    +
    +					$nexY+=2;    // Passe espace entre les lignes
    +
    +					// Detect if some page were added automatically and output _tableau for past pages
    +					while ($pagenb < $pageposafter)
    +					{
    +						$pdf->setPage($pagenb);
    +						if ($pagenb == $pageposbeforeprintlines)
    +						{
    +							$this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1, $object->multicurrency_code);
    +						}
    +						else
    +						{
    +							$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code);
    +						}
    +						$this->_pagefoot($pdf,$object,$outputlangs,1);
    +						$pagenb++;
    +						$pdf->setPage($pagenb);
    +						$pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.
    +						if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +					}
    +					if (isset($object->lines[$i+1]->pagebreak) && $object->lines[$i+1]->pagebreak)
    +					{
    +					    if ($pagenb == $pageposafter)
    +						{
    +							$this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforfooter, 0, $outputlangs, 0, 1, $object->multicurrency_code);
    +						}
    +						else
    +						{
    +							$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforfooter, 0, $outputlangs, 1, 1, $object->multicurrency_code);
    +						}
    +						$this->_pagefoot($pdf,$object,$outputlangs,1);
    +						// New page
    +						$pdf->AddPage();
    +						if (! empty($tplidx)) $pdf->useTemplate($tplidx);
    +						$pagenb++;
    +						if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
    +					}
    +				}
    +
    +				// Show square
    +				if ($pagenb == $pageposbeforeprintlines)
    +				{
    +					$this->_tableau($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforsignature - $heightforfooter, 0, $outputlangs, 0, 0, $object->multicurrency_code);
    +					$bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforsignature - $heightforfooter + 1;
    +				}
    +				else
    +				{
    +					$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforsignature - $heightforfooter, 0, $outputlangs, 1, 0, $object->multicurrency_code);
    +					$bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforsignature - $heightforfooter + 1;
    +				}
    +
    +				// Affiche zone infos
    +				$posy=$this->drawInfoTable($pdf, $object, $bottomlasttab, $outputlangs);
    +
    +				// Affiche zone totaux
    +				$posy=$this->drawTotalTable($pdf, $object, 0, $bottomlasttab, $outputlangs);
    +
    +				// Affiche zone versements
    +				/*
    +				if ($deja_regle || $amount_credit_notes_included || $amount_deposits_included)
    +				{
    +					$posy=$this->drawPaymentsTable($pdf, $object, $posy, $outputlangs);
    +				}
    +				*/
    +
    +				// Customer signature area
    +				if (empty($conf->global->PROPAL_DISABLE_SIGNATURE))
    +				{
    +				    $posy=$this->drawSignatureArea($pdf, $object, $posy, $outputlangs);
    +				}
    +
    +				// Pied de page
    +				$this->_pagefoot($pdf,$object,$outputlangs);
    +				if (method_exists($pdf,'AliasNbPages')) $pdf->AliasNbPages();
    +
    +				//If propal merge product PDF is active
    +				if (!empty($conf->global->PRODUIT_PDF_MERGE_PROPAL))
    +				{
    +					require_once DOL_DOCUMENT_ROOT.'/product/class/propalmergepdfproduct.class.php';
    +
    +					$already_merged = array ();
    +					foreach ( $object->lines as $line ) {
    +						if (! empty($line->fk_product) && ! (in_array($line->fk_product, $already_merged))) {
    +							// Find the desire PDF
    +							$filetomerge = new Propalmergepdfproduct($this->db);
    +
    +							if ($conf->global->MAIN_MULTILANGS) {
    +								$filetomerge->fetch_by_product($line->fk_product, $outputlangs->defaultlang);
    +							} else {
    +								$filetomerge->fetch_by_product($line->fk_product);
    +							}
    +
    +							$already_merged[] = $line->fk_product;
    +
    +							$product = new Product($this->db);
    +							$product->fetch($line->fk_product);
    +
    +							if ($product->entity!=$conf->entity) {
    +								$entity_product_file=$product->entity;
    +							} else {
    +								$entity_product_file=$conf->entity;
    +							}
    +
    +							// If PDF is selected and file is not empty
    +							if (count($filetomerge->lines) > 0) {
    +								foreach ( $filetomerge->lines as $linefile ) {
    +									if (! empty($linefile->id) && ! empty($linefile->file_name)) {
    +
    +
    +										if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO))
    +										{
    +											if (! empty($conf->product->enabled)) {
    +												$filetomerge_dir = $conf->product->multidir_output[$entity_product_file] . '/' . get_exdir($product->id,2,0,0,$product,'product') . $product->id ."/photos";
    +											} elseif (! empty($conf->service->enabled)) {
    +												$filetomerge_dir = $conf->service->multidir_output[$entity_product_file] . '/' . get_exdir($product->id,2,0,0,$product,'product') . $product->id ."/photos";
    +											}
    +										}
    +										else
    +										{
    +											if (! empty($conf->product->enabled)) {
    +												$filetomerge_dir = $conf->product->multidir_output[$entity_product_file] . '/' . get_exdir(0,0,0,0,$product,'product') . dol_sanitizeFileName($product->ref);
    +											} elseif (! empty($conf->service->enabled)) {
    +												$filetomerge_dir = $conf->service->multidir_output[$entity_product_file] . '/' . get_exdir(0,0,0,0,$product,'product') . dol_sanitizeFileName($product->ref);
    +											}
    +										}
    +
    +										dol_syslog(get_class($this) . ':: upload_dir=' . $filetomerge_dir, LOG_DEBUG);
    +
    +										$infile = $filetomerge_dir . '/' . $linefile->file_name;
    +										if (file_exists($infile) && is_readable($infile)) {
    +											$pagecount = $pdf->setSourceFile($infile);
    +											for($i = 1; $i <= $pagecount; $i ++) {
    +												$tplIdx = $pdf->importPage($i);
    +												if ($tplIdx!==false) {
    +													$s = $pdf->getTemplatesize($tplIdx);
    +													$pdf->AddPage($s['h'] > $s['w'] ? 'P' : 'L');
    +													$pdf->useTemplate($tplIdx);
    +												} else {
    +													setEventMessages(null, array($infile.' cannot be added, probably protected PDF'),'warnings');
    +												}
    +											}
    +										}
    +									}
    +								}
    +							}
    +						}
    +					}
    +				}
    +
    +				$pdf->Close();
    +
    +				$pdf->Output($file,'F');
    +
    +				//Add pdfgeneration hook
    +				$hookmanager->initHooks(array('pdfgeneration'));
    +				$parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs);
    +				global $action;
    +				$reshook=$hookmanager->executeHooks('afterPDFCreation',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +
    +				if (! empty($conf->global->MAIN_UMASK))
    +				@chmod($file, octdec($conf->global->MAIN_UMASK));
    +
    +				$this->result = array('fullpath'=>$file);
    +
    +				return 1;   // Pas d'erreur
    +			}
    +			else
    +			{
    +				$this->error=$langs->trans("ErrorCanNotCreateDir",$dir);
    +				return 0;
    +			}
    +		}
    +		else
    +		{
    +			$this->error=$langs->trans("ErrorConstantNotDefined","PROP_OUTPUTDIR");
    +			return 0;
    +		}
    +	}
    +
    +	/**
    +	 *  Show payments table
    +	 *
    +     *  @param	TCPDF		$pdf           Object PDF
    +     *  @param  Object		$object         Object proposal
    +     *  @param  int			$posy           Position y in PDF
    +     *  @param  Translate	$outputlangs    Object langs for output
    +     *  @return int             			<0 if KO, >0 if OK
    +	 */
    +	private function drawPaymentsTable(&$pdf, $object, $posy, $outputlangs)
    +	{
    +	}
    +
    +	/**
    +	 *   Show miscellaneous information (payment mode, payment term, ...)
    +	 *
    +	 *   @param		TCPDF		$pdf     		Object PDF
    +	 *   @param		Object		$object			Object to show
    +	 *   @param		int			$posy			Y
    +	 *   @param		Translate	$outputlangs	Langs object
    +	 *   @return	void
    +	 */
    +	function drawInfoTable(&$pdf, $object, $posy, $outputlangs)
    +	{
    +		global $conf;
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +		// If France, show VAT mention if not applicable
    +		if ($this->emetteur->country_code == 'FR' && $this->franchise == 1)
    +		{
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$pdf->MultiCell(100, 3, $outputlangs->transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0);
    +
    +			$posy=$pdf->GetY()+4;
    +		}
    +
    +		$posxval=52;
    +
    +        // Show shipping date
    +        if (! empty($object->date_livraison))
    +		{
    +            $outputlangs->load("sendings");
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$titre = $outputlangs->transnoentities("DateDeliveryPlanned").':';
    +			$pdf->MultiCell(80, 4, $titre, 0, 'L');
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posxval, $posy);
    +			$dlp=dol_print_date($object->date_livraison,"daytext",false,$outputlangs,true);
    +			$pdf->MultiCell(80, 4, $dlp, 0, 'L');
    +
    +            $posy=$pdf->GetY()+1;
    +		}
    +        elseif ($object->availability_code || $object->availability)    // Show availability conditions
    +		{
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$titre = $outputlangs->transnoentities("AvailabilityPeriod").':';
    +			$pdf->MultiCell(80, 4, $titre, 0, 'L');
    +			$pdf->SetTextColor(0,0,0);
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posxval, $posy);
    +			$lib_availability=$outputlangs->transnoentities("AvailabilityType".$object->availability_code)!=('AvailabilityType'.$object->availability_code)?$outputlangs->transnoentities("AvailabilityType".$object->availability_code):$outputlangs->convToOutputCharset($object->availability);
    +			$lib_availability=str_replace('\n',"\n",$lib_availability);
    +			$pdf->MultiCell(80, 4, $lib_availability, 0, 'L');
    +
    +			$posy=$pdf->GetY()+1;
    +		}
    +
    +		// Show payments conditions
    +		if (empty($conf->global->PROPALE_PDF_HIDE_PAYMENTTERMCOND) && ($object->cond_reglement_code || $object->cond_reglement))
    +		{
    +			$pdf->SetFont('','B', $default_font_size - 2);
    +			$pdf->SetXY($this->marge_gauche, $posy);
    +			$titre = $outputlangs->transnoentities("PaymentConditions").':';
    +			$pdf->MultiCell(43, 4, $titre, 0, 'L');
    +
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posxval, $posy);
    +			$lib_condition_paiement=$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code)!=('PaymentCondition'.$object->cond_reglement_code)?$outputlangs->transnoentities("PaymentCondition".$object->cond_reglement_code):$outputlangs->convToOutputCharset($object->cond_reglement_doc);
    +			$lib_condition_paiement=str_replace('\n',"\n",$lib_condition_paiement);
    +			$pdf->MultiCell(67, 4, $lib_condition_paiement,0,'L');
    +
    +			$posy=$pdf->GetY()+3;
    +		}
    +
    +		if (empty($conf->global->PROPALE_PDF_HIDE_PAYMENTTERMMODE))
    +		{
    +			// Check a payment mode is defined
    +			/* Not required on a proposal
    +			if (empty($object->mode_reglement_code)
    +			&& ! $conf->global->FACTURE_CHQ_NUMBER
    +			&& ! $conf->global->FACTURE_RIB_NUMBER)
    +			{
    +				$pdf->SetXY($this->marge_gauche, $posy);
    +				$pdf->SetTextColor(200,0,0);
    +				$pdf->SetFont('','B', $default_font_size - 2);
    +				$pdf->MultiCell(90, 3, $outputlangs->transnoentities("ErrorNoPaiementModeConfigured"),0,'L',0);
    +				$pdf->SetTextColor(0,0,0);
    +
    +				$posy=$pdf->GetY()+1;
    +			}
    +			*/
    +
    +			// Show payment mode
    +			if ($object->mode_reglement_code
    +			&& $object->mode_reglement_code != 'CHQ'
    +			&& $object->mode_reglement_code != 'VIR')
    +			{
    +				$pdf->SetFont('','B', $default_font_size - 2);
    +				$pdf->SetXY($this->marge_gauche, $posy);
    +				$titre = $outputlangs->transnoentities("PaymentMode").':';
    +				$pdf->MultiCell(80, 5, $titre, 0, 'L');
    +				$pdf->SetFont('','', $default_font_size - 2);
    +				$pdf->SetXY($posxval, $posy);
    +				$lib_mode_reg=$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code)!=('PaymentType'.$object->mode_reglement_code)?$outputlangs->transnoentities("PaymentType".$object->mode_reglement_code):$outputlangs->convToOutputCharset($object->mode_reglement);
    +				$pdf->MultiCell(80, 5, $lib_mode_reg,0,'L');
    +
    +				$posy=$pdf->GetY()+2;
    +			}
    +
    +			// Show payment mode CHQ
    +			if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'CHQ')
    +			{
    +				// Si mode reglement non force ou si force a CHQ
    +				if (! empty($conf->global->FACTURE_CHQ_NUMBER))
    +				{
    +					$diffsizetitle=(empty($conf->global->PDF_DIFFSIZE_TITLE)?3:$conf->global->PDF_DIFFSIZE_TITLE);
    +
    +					if ($conf->global->FACTURE_CHQ_NUMBER > 0)
    +					{
    +						$account = new Account($this->db);
    +						$account->fetch($conf->global->FACTURE_CHQ_NUMBER);
    +
    +						$pdf->SetXY($this->marge_gauche, $posy);
    +						$pdf->SetFont('','B', $default_font_size - $diffsizetitle);
    +						$pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$account->proprio),0,'L',0);
    +						$posy=$pdf->GetY()+1;
    +
    +			            if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS))
    +			            {
    +							$pdf->SetXY($this->marge_gauche, $posy);
    +							$pdf->SetFont('','', $default_font_size - $diffsizetitle);
    +							$pdf->MultiCell(100, 3, $outputlangs->convToOutputCharset($account->owner_address), 0, 'L', 0);
    +							$posy=$pdf->GetY()+2;
    +			            }
    +					}
    +					if ($conf->global->FACTURE_CHQ_NUMBER == -1)
    +					{
    +						$pdf->SetXY($this->marge_gauche, $posy);
    +						$pdf->SetFont('','B', $default_font_size - $diffsizetitle);
    +						$pdf->MultiCell(100, 3, $outputlangs->transnoentities('PaymentByChequeOrderedTo',$this->emetteur->name),0,'L',0);
    +						$posy=$pdf->GetY()+1;
    +
    +			            if (empty($conf->global->MAIN_PDF_HIDE_CHQ_ADDRESS))
    +			            {
    +							$pdf->SetXY($this->marge_gauche, $posy);
    +							$pdf->SetFont('','', $default_font_size - $diffsizetitle);
    +							$pdf->MultiCell(100, 3, $outputlangs->convToOutputCharset($this->emetteur->getFullAddress()), 0, 'L', 0);
    +							$posy=$pdf->GetY()+2;
    +			            }
    +					}
    +				}
    +			}
    +
    +			// If payment mode not forced or forced to VIR, show payment with BAN
    +			if (empty($object->mode_reglement_code) || $object->mode_reglement_code == 'VIR')
    +			{
    +				if (! empty($object->fk_account) || ! empty($object->fk_bank) || ! empty($conf->global->FACTURE_RIB_NUMBER))
    +				{
    +					$bankid=(empty($object->fk_account)?$conf->global->FACTURE_RIB_NUMBER:$object->fk_account);
    +					if (! empty($object->fk_bank)) $bankid=$object->fk_bank;   // For backward compatibility when object->fk_account is forced with object->fk_bank
    +					$account = new Account($this->db);
    +					$account->fetch($bankid);
    +
    +					$curx=$this->marge_gauche;
    +					$cury=$posy;
    +
    +					$posy=pdf_bank($pdf,$outputlangs,$curx,$cury,$account,0,$default_font_size);
    +
    +					$posy+=2;
    +				}
    +			}
    +		}
    +
    +		return $posy;
    +	}
    +
    +
    +	/**
    +	 *	Show total to pay
    +	 *
    +	 *	@param	PDF			$pdf            Object PDF
    +	 *	@param  Facture		$object         Object invoice
    +	 *	@param  int			$deja_regle     Montant deja regle
    +	 *	@param	int			$posy			Position depart
    +	 *	@param	Translate	$outputlangs	Objet langs
    +	 *	@return int							Position pour suite
    +	 */
    +	private function drawTotalTable(&$pdf, $object, $deja_regle, $posy, $outputlangs)
    +	{
    +		global $conf,$mysoc;
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		$tab2_top = $posy;
    +		$tab2_hl = 4;
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +		// Tableau total
    +		$col1x = 120; $col2x = 170;
    +		if ($this->page_largeur < 210) // To work with US executive format
    +		{
    +			$col2x-=20;
    +		}
    +		$largcol2 = ($this->page_largeur - $this->marge_droite - $col2x);
    +
    +		$useborder=0;
    +		$index = 0;
    +
    +		// Total HT
    +		$pdf->SetFillColor(255,255,255);
    +		$pdf->SetXY($col1x, $tab2_top + 0);
    +		$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalHT"), 0, 'L', 1);
    +
    +		$total_ht = ($conf->multicurrency->enabled && $object->mylticurrency_tx != 1 ? $object->multicurrency_total_ht : $object->total_ht);
    +		$pdf->SetXY($col2x, $tab2_top + 0);
    +		$pdf->MultiCell($largcol2, $tab2_hl, price($total_ht + (! empty($object->remise)?$object->remise:0), 0, $outputlangs), 0, 'R', 1);
    +
    +		// Show VAT by rates and total
    +		$pdf->SetFillColor(248,248,248);
    +
    +		$total_ttc = ($conf->multicurrency->enabled && $object->multicurrency_tx != 1) ? $object->multicurrency_total_ttc : $object->total_ttc;
    +
    +		$this->atleastoneratenotnull=0;
    +		if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT))
    +		{
    +			$tvaisnull=((! empty($this->tva) && count($this->tva) == 1 && isset($this->tva['0.000']) && is_float($this->tva['0.000'])) ? true : false);
    +			if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_IFNULL) && $tvaisnull)
    +			{
    +				// Nothing to do
    +			}
    +			else
    +			{
    +				//Local tax 1 before VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on')
    +				//{
    +					foreach( $this->localtax1 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('1','3','5'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey!=0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT1",$mysoc->country_code).' ';
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +	      		//}
    +				//Local tax 2 before VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on')
    +				//{
    +					foreach( $this->localtax2 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('1','3','5'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey!=0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT2", $mysoc->country_code).' ';
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +				//}
    +				// VAT
    +				foreach($this->tva as $tvakey => $tvaval)
    +				{
    +					if ($tvakey != 0)    // On affiche pas taux 0
    +					{
    +						$this->atleastoneratenotnull++;
    +
    +						$index++;
    +						$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +						$tvacompl='';
    +						if (preg_match('/\*/',$tvakey))
    +						{
    +							$tvakey=str_replace('*','',$tvakey);
    +							$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +						}
    +						$totalvat =$outputlangs->transcountrynoentities("TotalVAT",$mysoc->country_code).' ';
    +						$totalvat.=vatrate($tvakey,1).$tvacompl;
    +						$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +						$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +						$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +					}
    +				}
    +
    +				//Local tax 1 after VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX1_OPTION) && $conf->global->FACTURE_LOCAL_TAX1_OPTION=='localtax1on')
    +				//{
    +					foreach( $this->localtax1 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('2','4','6'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +							if ($tvakey != 0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT1",$mysoc->country_code).' ';
    +
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +	      		//}
    +				//Local tax 2 after VAT
    +				//if (! empty($conf->global->FACTURE_LOCAL_TAX2_OPTION) && $conf->global->FACTURE_LOCAL_TAX2_OPTION=='localtax2on')
    +				//{
    +					foreach( $this->localtax2 as $localtax_type => $localtax_rate )
    +					{
    +						if (in_array((string) $localtax_type, array('2','4','6'))) continue;
    +
    +						foreach( $localtax_rate as $tvakey => $tvaval )
    +						{
    +						    // retrieve global local tax
    +							if ($tvakey != 0)    // On affiche pas taux 0
    +							{
    +								//$this->atleastoneratenotnull++;
    +
    +								$index++;
    +								$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +
    +								$tvacompl='';
    +								if (preg_match('/\*/',$tvakey))
    +								{
    +									$tvakey=str_replace('*','',$tvakey);
    +									$tvacompl = " (".$outputlangs->transnoentities("NonPercuRecuperable").")";
    +								}
    +								$totalvat = $outputlangs->transcountrynoentities("TotalLT2",$mysoc->country_code).' ';
    +
    +								$totalvat.=vatrate(abs($tvakey),1).$tvacompl;
    +								$pdf->MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1);
    +
    +								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    +							}
    +						}
    +					}
    +				//}
    +
    +				// Total TTC
    +				$index++;
    +				$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +				$pdf->SetTextColor(0,0,60);
    +				$pdf->SetFillColor(224,224,224);
    +				$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("TotalTTC"), $useborder, 'L', 1);
    +
    +				$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +				$pdf->MultiCell($largcol2, $tab2_hl, price($total_ttc, 0, $outputlangs), $useborder, 'R', 1);
    +			}
    +		}
    +
    +		$pdf->SetTextColor(0,0,0);
    +
    +		/*
    +		$resteapayer = $object->total_ttc - $deja_regle;
    +		if (! empty($object->paye)) $resteapayer=0;
    +		*/
    +
    +		if ($deja_regle > 0)
    +		{
    +			$index++;
    +
    +			$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("AlreadyPaid"), 0, 'L', 0);
    +
    +			$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($largcol2, $tab2_hl, price($deja_regle, 0, $outputlangs), 0, 'R', 0);
    +
    +			/*
    +			if ($object->close_code == 'discount_vat')
    +			{
    +				$index++;
    +				$pdf->SetFillColor(255,255,255);
    +
    +				$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +				$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("EscompteOfferedShort"), $useborder, 'L', 1);
    +
    +				$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +				$pdf->MultiCell($largcol2, $tab2_hl, price($object->total_ttc - $deja_regle, 0, $outputlangs), $useborder, 'R', 1);
    +
    +				$resteapayer=0;
    +			}
    +			*/
    +
    +			$index++;
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->SetFillColor(224,224,224);
    +			$pdf->SetXY($col1x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($col2x-$col1x, $tab2_hl, $outputlangs->transnoentities("RemainderToPay"), $useborder, 'L', 1);
    +
    +			$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
    +			$pdf->MultiCell($largcol2, $tab2_hl, price($resteapayer, 0, $outputlangs), $useborder, 'R', 1);
    +
    +			$pdf->SetFont('','', $default_font_size - 1);
    +			$pdf->SetTextColor(0,0,0);
    +		}
    +
    +		$index++;
    +		return ($tab2_top + ($tab2_hl * $index));
    +	}
    +
    +	/**
    +	 *   Show table for lines
    +	 *
    +	 *   @param		PDF			$pdf     		Object PDF
    +	 *   @param		string		$tab_top		Top position of table
    +	 *   @param		string		$tab_height		Height of table (rectangle)
    +	 *   @param		int			$nexY			Y (not used)
    +	 *   @param		Translate	$outputlangs	Langs object
    +	 *   @param		int			$hidetop		1=Hide top bar of array and title, 0=Hide nothing, -1=Hide only title
    +	 *   @param		int			$hidebottom		Hide bottom bar of array
    +	 *   @param		string		$currency		Currency code
    +	 *   @return	void
    +	 */
    +	function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs, $hidetop=0, $hidebottom=0, $currency='')
    +	{
    +		global $conf;
    +
    +		// Force to disable hidetop and hidebottom
    +		$hidebottom=0;
    +		if ($hidetop) $hidetop=-1;
    +
    +		$currency = !empty($currency) ? $currency : $conf->currency;
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		// Amount in (at tab_top - 1)
    +		$pdf->SetTextColor(0,0,0);
    +		$pdf->SetFont('','', $default_font_size - 2);
    +
    +		if (empty($hidetop))
    +		{
    +			$titre = $outputlangs->transnoentities("AmountInCurrency",$outputlangs->transnoentitiesnoconv("Currency".$currency));
    +			$pdf->SetXY($this->page_largeur - $this->marge_droite - ($pdf->GetStringWidth($titre) + 3), $tab_top-4);
    +			$pdf->MultiCell(($pdf->GetStringWidth($titre) + 3), 2, $titre);
    +
    +			//$conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR='230,230,230';
    +			if (! empty($conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR)) $pdf->Rect($this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_droite-$this->marge_gauche, 5, 'F', null, explode(',',$conf->global->MAIN_PDF_TITLE_BACKGROUND_COLOR));
    +		}
    +
    +		$pdf->SetDrawColor(128,128,128);
    +		$pdf->SetFont('','', $default_font_size - 1);
    +
    +		// Output Rect
    +		$this->printRect($pdf,$this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height, $hidetop, $hidebottom);	// Rect prend une longueur en 3eme param et 4eme param
    +
    +
    +		foreach ($this->cols as $colKey => $colDef)
    +		{
    +		    if(!$this->getColumnStatus($colKey)) continue;
    +
    +		    // get title label
    +		    $colDef['title']['label'] = !empty($colDef['title']['label'])?$colDef['title']['label']:$outputlangs->transnoentities($colDef['title']['textkey']);
    +
    +		    // Add column separator
    +		    if(!empty($colDef['border-left'])){
    +		        $pdf->line($colDef['xStartPos'], $tab_top, $colDef['xStartPos'], $tab_top + $tab_height);
    +		    }
    +
    +		    if (empty($hidetop))
    +		    {
    +		      $pdf->SetXY($colDef['xStartPos'] + $colDef['title']['padding'][3], $tab_top + $colDef['title']['padding'][0] );
    +
    +		      $textWidth = $colDef['width'] - $colDef['title']['padding'][3] -$colDef['title']['padding'][1];
    +		      $pdf->MultiCell($textWidth,2,$colDef['title']['label'],'',$colDef['title']['align']);
    +		    }
    +		}
    +
    +		if (empty($hidetop)){
    +			$pdf->line($this->marge_gauche, $tab_top+5, $this->page_largeur-$this->marge_droite, $tab_top+5);	// line prend une position y en 2eme param et 4eme param
    +		}
    +	}
    +
    +	/**
    +	 *  Show top header of page.
    +	 *
    +	 *  @param	PDF			$pdf     		Object PDF
    +	 *  @param  Object		$object     	Object to show
    +	 *  @param  int	    	$showaddress    0=no, 1=yes
    +	 *  @param  Translate	$outputlangs	Object lang for output
    +	 *  @return	void
    +	 */
    +	function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
    +	{
    +		global $conf,$langs;
    +
    +		$outputlangs->load("main");
    +		$outputlangs->load("bills");
    +		$outputlangs->load("propal");
    +		$outputlangs->load("companies");
    +
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +
    +		pdf_pagehead($pdf,$outputlangs,$this->page_hauteur);
    +
    +		//  Show Draft Watermark
    +		if($object->statut==0 && (! empty($conf->global->PROPALE_DRAFT_WATERMARK)) )
    +		{
    +            pdf_watermark($pdf,$outputlangs,$this->page_hauteur,$this->page_largeur,'mm',$conf->global->PROPALE_DRAFT_WATERMARK);
    +		}
    +
    +		$pdf->SetTextColor(0,0,60);
    +		$pdf->SetFont('','B', $default_font_size + 3);
    +
    +		$posy=$this->marge_haute;
    +		$posx=$this->page_largeur-$this->marge_droite-100;
    +
    +		$pdf->SetXY($this->marge_gauche,$posy);
    +
    +		// Logo
    +		if (empty($conf->global->PDF_DISABLE_MYCOMPANY_LOGO))
    +		{
    +			$logo=$conf->mycompany->dir_output.'/logos/'.$this->emetteur->logo;
    +			if ($this->emetteur->logo)
    +			{
    +				if (is_readable($logo))
    +				{
    +				    $height=pdf_getHeightForLogo($logo);
    +				    $pdf->Image($logo, $this->marge_gauche, $posy, 0, $height);	// width=0 (auto)
    +				}
    +				else
    +				{
    +					$pdf->SetTextColor(200,0,0);
    +					$pdf->SetFont('','B',$default_font_size - 2);
    +					$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L');
    +					$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ErrorGoToGlobalSetup"), 0, 'L');
    +				}
    +			}
    +			else
    +			{
    +				$text=$this->emetteur->name;
    +				$pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
    +			}
    +		}
    +
    +		$pdf->SetFont('','B',$default_font_size + 3);
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$title=$outputlangs->transnoentities("PdfCommercialProposalTitle");
    +		$pdf->MultiCell(100, 4, $title, '', 'R');
    +
    +		$pdf->SetFont('','B',$default_font_size);
    +
    +		$posy+=5;
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$pdf->MultiCell(100, 4, $outputlangs->transnoentities("Ref")." : " . $outputlangs->convToOutputCharset($object->ref), '', 'R');
    +
    +		$posy+=1;
    +		$pdf->SetFont('','', $default_font_size - 2);
    +
    +		if ($object->ref_client)
    +		{
    +			$posy+=4;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell(100, 3, $outputlangs->transnoentities("RefCustomer")." : " . $outputlangs->convToOutputCharset($object->ref_client), '', 'R');
    +		}
    +
    +		$posy+=4;
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$pdf->MultiCell(100, 3, $outputlangs->transnoentities("Date")." : " . dol_print_date($object->date,"day",false,$outputlangs,true), '', 'R');
    +
    +		$posy+=4;
    +		$pdf->SetXY($posx,$posy);
    +		$pdf->SetTextColor(0,0,60);
    +		$pdf->MultiCell(100, 3, $outputlangs->transnoentities("DateEndPropal")." : " . dol_print_date($object->fin_validite,"day",false,$outputlangs,true), '', 'R');
    +
    +		if ($object->thirdparty->code_client)
    +		{
    +			$posy+=4;
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetTextColor(0,0,60);
    +			$pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R');
    +		}
    +
    +		// Get contact
    +		if (!empty($conf->global->DOC_SHOW_FIRST_SALES_REP))
    +		{
    +		    $arrayidcontact=$object->getIdContact('internal','SALESREPFOLL');
    +		    if (count($arrayidcontact) > 0)
    +		    {
    +		        $usertmp=new User($this->db);
    +		        $usertmp->fetch($arrayidcontact[0]);
    +                $posy+=4;
    +                $pdf->SetXY($posx,$posy);
    +		        $pdf->SetTextColor(0,0,60);
    +		        $pdf->MultiCell(100, 3, $langs->trans("SalesRepresentative")." : ".$usertmp->getFullName($langs), '', 'R');
    +		    }
    +		}
    +
    +		$posy+=2;
    +
    +		$top_shift = 0;
    +		// Show list of linked objects
    +		$current_y = $pdf->getY();
    +		$posy = pdf_writeLinkedObjects($pdf, $object, $outputlangs, $posx, $posy, 100, 3, 'R', $default_font_size);
    +		if ($current_y < $pdf->getY())
    +		{
    +			$top_shift = $pdf->getY() - $current_y;
    +		}
    +
    +		if ($showaddress)
    +		{
    +			// Sender properties
    +			$carac_emetteur='';
    +		 	// Add internal contact of proposal if defined
    +			$arrayidcontact=$object->getIdContact('internal','SALESREPFOLL');
    +		 	if (count($arrayidcontact) > 0)
    +		 	{
    +		 		$object->fetch_user($arrayidcontact[0]);
    +		 		$labelbeforecontactname=($outputlangs->transnoentities("FromContactName")!='FromContactName'?$outputlangs->transnoentities("FromContactName"):$outputlangs->transnoentities("Name"));
    +		 		$carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$labelbeforecontactname." ".$outputlangs->convToOutputCharset($object->user->getFullName($outputlangs))."\n";
    +		 	}
    +
    +		 	$carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty, '', 0, 'source', $object);
    +
    +			// Show sender
    +			$posy=42+$top_shift;
    +		 	$posx=$this->marge_gauche;
    +			if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->page_largeur-$this->marge_droite-80;
    +			$hautcadre=40;
    +
    +			// Show sender frame
    +			$pdf->SetTextColor(0,0,0);
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posx,$posy-5);
    +			$pdf->MultiCell(66,5, $outputlangs->transnoentities("BillFrom").":", 0, 'L');
    +			$pdf->SetXY($posx,$posy);
    +			$pdf->SetFillColor(230,230,230);
    +			$pdf->MultiCell(82, $hautcadre, "", 0, 'R', 1);
    +			$pdf->SetTextColor(0,0,60);
    +
    +			// Show sender name
    +			$pdf->SetXY($posx+2,$posy+3);
    +			$pdf->SetFont('','B', $default_font_size);
    +			$pdf->MultiCell(80, 4, $outputlangs->convToOutputCharset($this->emetteur->name), 0, 'L');
    +			$posy=$pdf->getY();
    +
    +			// Show sender information
    +			$pdf->SetXY($posx+2,$posy);
    +			$pdf->SetFont('','', $default_font_size - 1);
    +			$pdf->MultiCell(80, 4, $carac_emetteur, 0, 'L');
    +
    +
    +			// If CUSTOMER contact defined, we use it
    +			$usecontact=false;
    +			$arrayidcontact=$object->getIdContact('external','CUSTOMER');
    +			if (count($arrayidcontact) > 0)
    +			{
    +				$usecontact=true;
    +				$result=$object->fetch_contact($arrayidcontact[0]);
    +			}
    +
    +			//Recipient name
    +			// On peut utiliser le nom de la societe du contact
    +			if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) {
    +				$thirdparty = $object->contact;
    +			} else {
    +				$thirdparty = $object->thirdparty;
    +			}
    +
    +			$carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs);
    +
    +			$carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target',$object);
    +
    +			// Show recipient
    +			$widthrecbox=100;
    +			if ($this->page_largeur < 210) $widthrecbox=84;	// To work with US executive format
    +			$posy=42+$top_shift;
    +			$posx=$this->page_largeur-$this->marge_droite-$widthrecbox;
    +			if (! empty($conf->global->MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this->marge_gauche;
    +
    +			// Show recipient frame
    +			$pdf->SetTextColor(0,0,0);
    +			$pdf->SetFont('','', $default_font_size - 2);
    +			$pdf->SetXY($posx+2,$posy-5);
    +			$pdf->MultiCell($widthrecbox, 5, $outputlangs->transnoentities("BillTo").":", 0, 'L');
    +			$pdf->Rect($posx, $posy, $widthrecbox, $hautcadre);
    +
    +			// Show recipient name
    +			$pdf->SetXY($posx+2,$posy+3);
    +			$pdf->SetFont('','B', $default_font_size);
    +			$pdf->MultiCell($widthrecbox, 4, $carac_client_name, 0, 'L');
    +
    +			$posy = $pdf->getY();
    +
    +			// Show recipient information
    +			$pdf->SetFont('','', $default_font_size - 1);
    +			$pdf->SetXY($posx+2,$posy);
    +			$pdf->MultiCell($widthrecbox, 4, $carac_client, 0, 'L');
    +		}
    +
    +		$pdf->SetTextColor(0,0,0);
    +		return $top_shift;
    +	}
    +
    +	/**
    +	 *   	Show footer of page. Need this->emetteur object
    +     *
    +	 *   	@param	PDF			$pdf     			PDF
    +	 * 		@param	Object		$object				Object to show
    +	 *      @param	Translate	$outputlangs		Object lang for output
    +	 *      @param	int			$hidefreetext		1=Hide free text
    +	 *      @return	int								Return height of bottom margin including footer text
    +	 */
    +	function _pagefoot(&$pdf,$object,$outputlangs,$hidefreetext=0)
    +	{
    +		global $conf;
    +		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
    +		return pdf_pagefoot($pdf,$outputlangs,'PROPOSAL_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
    +	}
    +
    +	/**
    +	 *	Show area for the customer to sign
    +	 *
    +	 *	@param	PDF			$pdf            Object PDF
    +	 *	@param  Facture		$object         Object invoice
    +	 *	@param	int			$posy			Position depart
    +	 *	@param	Translate	$outputlangs	Objet langs
    +	 *	@return int							Position pour suite
    +	 */
    +	private function drawSignatureArea(&$pdf, $object, $posy, $outputlangs)
    +	{
    +		global $conf;
    +		$default_font_size = pdf_getPDFFontSize($outputlangs);
    +		$tab_top = $posy + 4;
    +		$tab_hl = 4;
    +
    +		$posx = 120;
    +		$largcol = ($this->page_largeur - $this->marge_droite - $posx);
    +		$useborder=0;
    +		$index = 0;
    +		// Total HT
    +		$pdf->SetFillColor(255,255,255);
    +		$pdf->SetXY($posx, $tab_top + 0);
    +		$pdf->SetFont('','', $default_font_size - 2);
    +		$pdf->MultiCell($largcol, $tab_hl, $outputlangs->transnoentities("ProposalCustomerSignature"), 0, 'L', 1);
    +
    +		$pdf->SetXY($posx, $tab_top + $tab_hl);
    +		$pdf->MultiCell($largcol, $tab_hl*3, '', 1, 'R');
    +		if (! empty($conf->global->MAIN_PDF_PROPAL_USE_ELECTRONIC_SIGNING)) {
    +			$pdf->addEmptySignatureAppearance($posx, $tab_top + $tab_hl, $largcol, $tab_hl*3);
    +		}
    +
    +		return ($tab_hl*7);
    +	}
    +
    +
    +	/**
    +	 *   	Define Array Column Field
    +	 *
    +	 *   	@param	object			$object    		common object
    +	 *   	@param	outputlangs		$outputlangs    langs
    +	 *      @param	int			   $hidedetails		Do not show line details
    +	 *      @param	int			   $hidedesc		Do not show desc
    +	 *      @param	int			   $hideref			Do not show ref
    +	 *      @return	null
    +	 */
    +    function defineColumnField($object,$outputlangs,$hidedetails=0,$hidedesc=0,$hideref=0)
    +    {
    +	    global $conf, $hookmanager;
    +
    +	    // Default field style for content
    +	    $this->defaultContentsFieldsStyle = array(
    +	        'align' => 'R', // R,C,L
    +	        'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	    );
    +
    +	    // Default field style for content
    +	    $this->defaultTitlesFieldsStyle = array(
    +	        'align' => 'C', // R,C,L
    +	        'padding' => array(0.5,0,0.5,0), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	    );
    +
    +	    /*
    +	     * For exemple
    +	     $this->cols['theColKey'] = array(
    +	     'rank' => $rank, // int : use for ordering columns
    +	     'width' => 20, // the column width in mm
    +	     'title' => array(
    +	     'textkey' => 'yourLangKey', // if there is no label, yourLangKey will be translated to replace label
    +	     'label' => ' ', // the final label : used fore final generated text
    +	     'align' => 'L', // text alignement :  R,C,L
    +	     'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	     ),
    +	     'content' => array(
    +	     'align' => 'L', // text alignement :  R,C,L
    +	     'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	     ),
    +	     );
    +	     */
    +
    +	    $rank=0; // do not use negative rank
    +	    $this->cols['desc'] = array(
    +	        'rank' => $rank,
    +	        'width' => false, // only for desc
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'Designation', // use lang key is usefull in somme case with module
    +	            'align' => 'L',
    +	            // 'textkey' => 'yourLangKey', // if there is no label, yourLangKey will be translated to replace label
    +	            // 'label' => ' ', // the final label
    +	            'padding' => array(0.5,0.5,0.5,0.5), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	        ),
    +	        'content' => array(
    +	            'align' => 'L',
    +	        ),
    +	    );
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['photo'] = array(
    +	        'rank' => $rank,
    +	        'width' => (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH)?20:$conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH), // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'Photo',
    +	            'label' => ' '
    +	        ),
    +	        'content' => array(
    +	            'padding' => array(0,0,0,0), // Like css 0 => top , 1 => right, 2 => bottom, 3 => left
    +	        ),
    +	        'border-left' => false, // remove left line separator
    +	    );
    +
    +	    if (! empty($conf->global->MAIN_GENERATE_PROPOSALS_WITH_PICTURE) && !empty($this->atleastonephoto))
    +	    {
    +	        $this->cols['photo']['status'] = true;
    +	    }
    +
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['vat'] = array(
    +	        'rank' => $rank,
    +	        'status' => false,
    +	        'width' => 16, // in mm
    +	        'title' => array(
    +	            'textkey' => 'VAT'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    if (empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT) && empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN))
    +	    {
    +	        $this->cols['vat']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['subprice'] = array(
    +	        'rank' => $rank,
    +	        'width' => 19, // in mm
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'PriceUHT'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['qty'] = array(
    +	        'rank' => $rank,
    +	        'width' => 16, // in mm
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'Qty'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['progress'] = array(
    +	        'rank' => $rank,
    +	        'width' => 19, // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'Progress'
    +	        ),
    +	        'border-left' => false, // add left line separator
    +	    );
    +
    +	    if($this->situationinvoice)
    +	    {
    +	        $this->cols['progress']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['unit'] = array(
    +	        'rank' => $rank,
    +	        'width' => 11, // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'Unit'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +	    if($conf->global->PRODUCT_USE_UNITS){
    +	        $this->cols['unit']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['discount'] = array(
    +	        'rank' => $rank,
    +	        'width' => 13, // in mm
    +	        'status' => false,
    +	        'title' => array(
    +	            'textkey' => 'ReductionShort'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +	    if ($this->atleastonediscount){
    +	        $this->cols['discount']['status'] = true;
    +	    }
    +
    +	    $rank = $rank + 10;
    +	    $this->cols['totalexcltax'] = array(
    +	        'rank' => $rank,
    +	        'width' => 26, // in mm
    +	        'status' => true,
    +	        'title' => array(
    +	            'textkey' => 'TotalHT'
    +	        ),
    +	        'border-left' => true, // add left line separator
    +	    );
    +
    +
    +	    $parameters=array(
    +	        'object' => $object,
    +	        'outputlangs' => $outputlangs,
    +	        'hidedetails' => $hidedetails,
    +	        'hidedesc' => $hidedesc,
    +	        'hideref' => $hideref
    +	    );
    +
    +	    $reshook=$hookmanager->executeHooks('defineColumnField',$parameters,$this);    // Note that $object may have been modified by hook
    +	    if ($reshook < 0)
    +	    {
    +	        setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +	    }
    +	    elseif (empty($reshook))
    +	    {
    +	        $this->cols = array_replace($this->cols, $hookmanager->resArray); // array_replace is used to preserve keys
    +	    }
    +	    else
    +	    {
    +	        $this->cols = $hookmanager->resArray;
    +	    }
    +	}
    +}
    diff --git a/htdocs/core/modules/propale/mod_propale_marbre.php b/htdocs/core/modules/propale/mod_propale_marbre.php
    index 0e1700da500..cb1638aec82 100644
    --- a/htdocs/core/modules/propale/mod_propale_marbre.php
    +++ b/htdocs/core/modules/propale/mod_propale_marbre.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,10 +31,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/propale/modules_propale.php';
      */
     class mod_propale_marbre extends ModeleNumRefPropales
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefix='PR';
    -	var $error='';
    -	var $nom = "Marbre";
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='PR';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Marbre';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Marbre';
     
     
         /**
    @@ -108,15 +128,12 @@ class mod_propale_marbre extends ModeleNumRefPropales
     	{
     		global $db,$conf;
     
    -		// Use object entity ID
    -		$entity = ((isset($propal->entity) && is_numeric($propal->entity)) ? $propal->entity : $conf->entity);
    -
     		// D'abord on recupere la valeur max
     		$posindice=8;
     		$sql = "SELECT MAX(CAST(SUBSTRING(ref FROM ".$posindice.") AS SIGNED)) as max";	// This is standard SQL
     		$sql.= " FROM ".MAIN_DB_PREFIX."propal";
     		$sql.= " WHERE ref LIKE '".$db->escape($this->prefix)."____-%'";
    -		$sql.= " AND entity = ".$entity;
    +		$sql.= " AND entity IN (".getEntity('proposalnumber', 1, $propal).")";
     
     		$resql=$db->query($sql);
     		if ($resql)
    @@ -152,5 +169,4 @@ class mod_propale_marbre extends ModeleNumRefPropales
     	{
     		return $this->getNextValue($objsoc,$objforref);
     	}
    -
     }
    diff --git a/htdocs/core/modules/propale/mod_propale_saphir.php b/htdocs/core/modules/propale/mod_propale_saphir.php
    index 54d894c20b5..87fcc7c2920 100644
    --- a/htdocs/core/modules/propale/mod_propale_saphir.php
    +++ b/htdocs/core/modules/propale/mod_propale_saphir.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville        <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur         <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin               <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin               <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -33,9 +33,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/propale/modules_propale.php';
      */
     class mod_propale_saphir extends ModeleNumRefPropales
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Saphir';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Saphir';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Saphir';
     
     
         /**
    @@ -45,7 +64,7 @@ class mod_propale_saphir extends ModeleNumRefPropales
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    @@ -115,14 +134,8 @@ class mod_propale_saphir extends ModeleNumRefPropales
     
     		require_once DOL_DOCUMENT_ROOT .'/core/lib/functions2.lib.php';
     
    -		$constant = 'PROPALE_SAPHIR_MASK_'.$propal->entity;
    -
     		// On defini critere recherche compteur
    -		if (! empty($conf->global->$constant)) {
    -			$mask = $conf->global->$constant; // for multicompany proposal sharing
    -		} else {
    -			$mask = $conf->global->PROPALE_SAPHIR_MASK;
    -		}
    +		$mask = $conf->global->PROPALE_SAPHIR_MASK;
     
     		if (! $mask)
     		{
    @@ -130,8 +143,8 @@ class mod_propale_saphir extends ModeleNumRefPropales
     			return 0;
     		}
     
    -		// Use object entity ID
    -		$entity = ((isset($propal->entity) && is_numeric($propal->entity)) ? $propal->entity : $conf->entity);
    +		// Get entities
    +		$entity = getEntity('proposalnumber', 1, $propal);
     
     		$date = $propal->date;
     
    @@ -139,5 +152,4 @@ class mod_propale_saphir extends ModeleNumRefPropales
     
     		return  $numFinal;
     	}
    -
     }
    diff --git a/htdocs/core/modules/propale/modules_propale.php b/htdocs/core/modules/propale/modules_propale.php
    index c2d52923e4f..595534c40f4 100644
    --- a/htdocs/core/modules/propale/modules_propale.php
    +++ b/htdocs/core/modules/propale/modules_propale.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
      *
    @@ -36,9 +36,13 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';   // Requ
      */
     abstract class ModelePDFPropales extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation modules
     	 *
    @@ -48,6 +52,7 @@ abstract class ModelePDFPropales extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='propal';
    @@ -66,7 +71,10 @@ abstract class ModelePDFPropales extends CommonDocGenerator
      */
     abstract class ModeleNumRefPropales
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 * Return if a module can be used or not
    diff --git a/htdocs/core/modules/rapport/pdf_paiement.class.php b/htdocs/core/modules/rapport/pdf_paiement.class.php
    index a645b105610..9bd93777df1 100644
    --- a/htdocs/core/modules/rapport/pdf_paiement.class.php
    +++ b/htdocs/core/modules/rapport/pdf_paiement.class.php
    @@ -40,9 +40,9 @@ class pdf_paiement
     	function __construct($db)
     	{
     		global $langs,$conf;
    -		$langs->load("bills");
    -		$langs->load("compta");
    -		$langs->load("main");
    +
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("bills","compta","main"));
     
     		$this->db = $db;
     		$this->description = $langs->transnoentities("ListOfCustomerPayments");
    @@ -80,10 +80,10 @@ class pdf_paiement
     		}
     		// which type of document will be generated: clients (client) or providers (fourn) invoices
     		$this->doc_type = "client";
    -
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Fonction generant la rapport sur le disque
     	 *
    @@ -95,6 +95,7 @@ class pdf_paiement
     	 */
     	function write_file($_dir, $month, $year, $outputlangs)
     	{
    +        // phpcs:enable
     		include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
     		global $conf, $hookmanager, $langs, $user;
    @@ -406,6 +407,7 @@ class pdf_paiement
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Output body
     	 *
    @@ -417,6 +419,7 @@ class pdf_paiement
     	 */
     	function Body(&$pdf, $page, $lines, $outputlangs)
     	{
    +        // phpcs:enable
     		global $langs;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -495,4 +498,3 @@ class pdf_paiement
     		$pdf->MultiCell($this->page_largeur - $this->marge_droite - $this->posxpaymentamount, $this->line_height, $langs->transnoentities('Total')." : ".price($total), 0, 'R', 0);
     	}
     }
    -
    diff --git a/htdocs/core/modules/security/generate/modGeneratePassNone.class.php b/htdocs/core/modules/security/generate/modGeneratePassNone.class.php
    index 79cbd1ff629..d0e8c617217 100644
    --- a/htdocs/core/modules/security/generate/modGeneratePassNone.class.php
    +++ b/htdocs/core/modules/security/generate/modGeneratePassNone.class.php
    @@ -31,13 +31,21 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/security/generate/modules_genpass
      */
     class modGeneratePassNone extends ModeleGenPassword
     {
    -	var $id;
    -	var $length;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $db;
    -	var $conf;
    -	var $lang;
    -	var $user;
    +	public $length;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	public $conf;
    +	public $lang;
    +	public $user;
     
     
     	/**
    @@ -100,6 +108,5 @@ class modGeneratePassNone extends ModeleGenPassword
     	{
     		return 1;
     	}
    -
     }
     
    diff --git a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php
    index 96041bcac2c..c4db7a40e7b 100644
    --- a/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php
    +++ b/htdocs/core/modules/security/generate/modGeneratePassPerso.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2014		Teddy Andreotti		<125155@supinfo.com>
    - * Copyright (C) 2017		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2017		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,26 +33,34 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/security/generate/modules_genpass
      */
     class modGeneratePassPerso extends ModeleGenPassword
     {
    -	var $id;
    -	var $length;
    -	var $length2; // didn't overright display
    -	var $NbMaj;
    -	var $NbNum;
    -	var $NbSpe;
    -	var $NbRepeat;
    -	var $WithoutAmbi;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $db;
    -	var $conf;
    -	var $lang;
    -	var $user;
    +	public $length;
    +	public $length2; // didn't overright display
    +	public $NbMaj;
    +	public $NbNum;
    +	public $NbSpe;
    +	public $NbRepeat;
    +	public $WithoutAmbi;
     
    -	var $Maj;
    -	var $Min;
    -	var $Nb;
    -	var $Spe;
    -	var $Ambi;
    -	var $All;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	public $conf;
    +	public $lang;
    +	public $user;
    +
    +	public $Maj;
    +	public $Min;
    +	public $Nb;
    +	public $Spe;
    +	public $Ambi;
    +	public $All;
     
     	/**
     	 *	Constructor
    @@ -72,7 +80,7 @@ class modGeneratePassPerso extends ModeleGenPassword
     		$this->langs=$langs;
     		$this->user=$user;
     
    -		if(empty($conf->global->USER_PASSWORD_PATTERN)){
    +		if (empty($conf->global->USER_PASSWORD_PATTERN)) {
     			// default value (8carac, 1maj, 1digit, 1spe,  3 repeat, no ambi at auto generation.
     			dolibarr_set_const($db, "USER_PASSWORD_PATTERN", '8;1;1;1;3;1','chaine',0,'',$conf->entity);
     		}
    @@ -105,7 +113,6 @@ class modGeneratePassPerso extends ModeleGenPassword
     		//$this->All = str_shuffle($this->Maj. $this->Min. $this->Nb. $this->Spe);
     		//$this->All = $this->Maj. $this->Min. $this->Nb. $this->Spe;
     		//$this->All =  $this->Spe;
    -
     	}
     
     	/**
    @@ -201,7 +208,8 @@ class modGeneratePassPerso extends ModeleGenPassword
     	 *		@param		string	$password	Password to check
     	 *      @return     int					0 if KO, >0 if OK
     	 */
    -	function consecutiveInterationSameCharacter($password){
    +    function consecutiveInterationSameCharacter($password)
    +    {
     		$last = "";
     		$count = 0;
     		$char = str_split($password);
    @@ -220,4 +228,3 @@ class modGeneratePassPerso extends ModeleGenPassword
     		return 1;
     	}
     }
    -
    diff --git a/htdocs/core/modules/security/generate/modGeneratePassStandard.class.php b/htdocs/core/modules/security/generate/modGeneratePassStandard.class.php
    index acb44256537..0ecf7d7ef38 100644
    --- a/htdocs/core/modules/security/generate/modGeneratePassStandard.class.php
    +++ b/htdocs/core/modules/security/generate/modGeneratePassStandard.class.php
    @@ -31,13 +31,21 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/security/generate/modules_genpass
      */
     class modGeneratePassStandard extends ModeleGenPassword
     {
    -	var $id;
    -	var $length;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $db;
    -	var $conf;
    -	var $lang;
    -	var $user;
    +	public $length;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	public $conf;
    +	public $lang;
    +	public $user;
     
     
     	/**
    @@ -109,7 +117,6 @@ class modGeneratePassStandard extends ModeleGenPassword
     				$password .= $char;
     				$i++;
     			}
    -
     		}
     
     		// done!
    diff --git a/htdocs/core/modules/security/generate/modules_genpassword.php b/htdocs/core/modules/security/generate/modules_genpassword.php
    index 3129a341926..e1f73b134be 100644
    --- a/htdocs/core/modules/security/generate/modules_genpassword.php
    +++ b/htdocs/core/modules/security/generate/modules_genpassword.php
    @@ -30,7 +30,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
      */
     abstract class ModeleGenPassword
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
         /**
          * 		Return if a module can be used or not
    @@ -86,6 +89,5 @@ abstract class ModeleGenPassword
         {
             return 1;
         }
    -
     }
     
    diff --git a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php
    index 6aa4267d827..3650af12b24 100644
    --- a/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php
    +++ b/htdocs/core/modules/societe/doc/doc_generic_odt.modules.php
    @@ -1,6 +1,8 @@
     <?php
     /* Copyright (C) 2010-2011 Laurent Destailleur <ely@users.sourceforge.net>
      * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
      * the Free Software Foundation; either version 3 of the License, or
    @@ -34,9 +36,17 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_odt extends ModeleThirdPartyDoc
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    +	/**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
     
     
     	/**
    @@ -46,10 +56,10 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -83,7 +93,7 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     	function info($langs)
     	{
     		global $conf,$langs;
    -        
    +
     		// Load traductions files requiredby by page
     		$langs->loadLangs(array("companies", "errors"));
     
    @@ -164,6 +174,7 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -177,6 +188,7 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager;
     
     		if (empty($srctemplatepath))
    @@ -197,7 +209,7 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
    -        
    +
     		// Load translation files required by the page
     		$outputlangs->loadLangs(array("main", "dict", "companies", "projects"));
     
    @@ -266,6 +278,7 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     				catch(Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				//print $odfHandler->__toString()."\n";
    @@ -313,9 +326,11 @@ class doc_generic_odt extends ModeleThirdPartyDoc
                     				}
                     				catch(OdfException $e)
                     				{
    +									dol_syslog($e->getMessage(), LOG_INFO);
                     				}
                     				catch(SegmentException $e)
                     				{
    +									dol_syslog($e->getMessage(), LOG_INFO);
                     				}
                     			}
                     			$listlines->merge();
    @@ -357,9 +372,10 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
     						// setVars failed, probably because key not found
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -370,8 +386,9 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     					try {
     						$odfHandler->setVars($key, $value, true, 'UTF-8');
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -383,8 +400,9 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -403,6 +421,7 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     					   $odfHandler->saveToDisk($file);
     					}catch (Exception $e){
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -428,6 +447,4 @@ class doc_generic_odt extends ModeleThirdPartyDoc
     		$this->error='UnknownError';
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/societe/mod_codeclient_elephant.php b/htdocs/core/modules/societe/mod_codeclient_elephant.php
    index 993bb2ed2b3..e0d6a186879 100644
    --- a/htdocs/core/modules/societe/mod_codeclient_elephant.php
    +++ b/htdocs/core/modules/societe/mod_codeclient_elephant.php
    @@ -1,9 +1,9 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2006-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2007-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent	    <jmenent@2byte.es>
    - * Copyright (C) 2013 	   Philippe Grand      	<philippe.grand@atoo-net.com>
    + * Copyright (C) 2013-2018 Philippe Grand      	<philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -34,18 +34,39 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/societe/modules_societe.class.php'
      */
     class mod_codeclient_elephant extends ModeleThirdPartyCode
     {
    -	var $nom='Elephant';				// Nom du modele
    -	var $name='Elephant';				// Nom du modele
    -	var $code_modifiable;				// Code modifiable
    -	var $code_modifiable_invalide;		// Code modifiable si il est invalide
    -	var $code_modifiable_null;			// Code modifiables si il est null
    -	var $code_null;						// Code facultatif
    -	var $version='dolibarr';    		// 'development', 'experimental', 'dolibarr'
    -	var $code_auto;                     // Numerotation automatique
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Elephant';
     
    -	var $searchcode; // String de recherche
    -	var $numbitcounter; // Nombre de chiffres du compteur
    -	var $prefixIsRequired; // Le champ prefix du tiers doit etre renseigne quand on utilise {pre}
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Elephant';
    +
    +	public $code_modifiable;				// Code modifiable
    +
    +	public $code_modifiable_invalide;		// Code modifiable si il est invalide
    +
    +	public $code_modifiable_null;			// Code modifiables si il est null
    +
    +	public $code_null;						// Code facultatif
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';    		// 'development', 'experimental', 'dolibarr'
    +
    +	public $code_auto;                     // Numerotation automatique
    +
    +	public $searchcode; // String de recherche
    +
    +	public $numbitcounter; // Nombre de chiffres du compteur
    +
    +	public $prefixIsRequired; // Le champ prefix du tiers doit etre renseigne quand on utilise {pre}
     
     
     	/**
    @@ -216,6 +237,7 @@ class mod_codeclient_elephant extends ModeleThirdPartyCode
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Check if mask/numbering use prefix
     	 *
    @@ -223,6 +245,7 @@ class mod_codeclient_elephant extends ModeleThirdPartyCode
     	 */
     	function verif_prefixIsUsed()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$mask = $conf->global->COMPANY_ELEPHANT_MASK_CUSTOMER;
    @@ -291,6 +314,7 @@ class mod_codeclient_elephant extends ModeleThirdPartyCode
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *		Renvoi si un code est pris ou non (par autre tiers)
     	 *
    @@ -302,6 +326,7 @@ class mod_codeclient_elephant extends ModeleThirdPartyCode
     	 */
     	function verif_dispo($db, $code, $soc, $type=0)
     	{
    +        // phpcs:enable
     		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe";
     		if ($type == 1) $sql.= " WHERE code_fournisseur = '".$code."'";
     		else $sql.= " WHERE code_client = '".$code."'";
    @@ -323,8 +348,5 @@ class mod_codeclient_elephant extends ModeleThirdPartyCode
     		{
     			return -2;
     		}
    -
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/societe/mod_codeclient_leopard.php b/htdocs/core/modules/societe/mod_codeclient_leopard.php
    index 94c9c04d2e2..9bdd27d5bee 100644
    --- a/htdocs/core/modules/societe/mod_codeclient_leopard.php
    +++ b/htdocs/core/modules/societe/mod_codeclient_leopard.php
    @@ -38,14 +38,33 @@ class mod_codeclient_leopard extends ModeleThirdPartyCode
     	 * Le fonctionnement de celui-ci doit donc rester le plus ouvert possible
     	 */
     
    -	var $nom='Leopard';					// Nom du modele
    -	var $name='Leopard';				// Nom du modele
    -	var $code_modifiable;				// Code modifiable
    -	var $code_modifiable_invalide;		// Code modifiable si il est invalide
    -	var $code_modifiable_null;			// Code modifiables si il est null
    -	var $code_null;						// Code facultatif
    -	var $version='dolibarr';    		// 'development', 'experimental', 'dolibarr'
    -	var $code_auto; 	                // Numerotation automatique
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Leopard';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Leopard';
    +
    +	public $code_modifiable;				// Code modifiable
    +
    +	public $code_modifiable_invalide;		// Code modifiable si il est invalide
    +
    +	public $code_modifiable_null;			// Code modifiables si il est null
    +
    +	public $code_null;						// Code facultatif
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';    		// 'development', 'experimental', 'dolibarr'
    +
    +	public $code_auto; 	                // Numerotation automatique
     
     
     	/**
    diff --git a/htdocs/core/modules/societe/mod_codeclient_monkey.php b/htdocs/core/modules/societe/mod_codeclient_monkey.php
    index f4d9e5b4b33..6077296101f 100644
    --- a/htdocs/core/modules/societe/mod_codeclient_monkey.php
    +++ b/htdocs/core/modules/societe/mod_codeclient_monkey.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2007	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,18 +32,39 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/societe/modules_societe.class.php'
      */
     class mod_codeclient_monkey extends ModeleThirdPartyCode
     {
    -	var $nom='Monkey';					// Nom du modele
    -	var $name='Monkey';					// Nom du modele
    -	var $code_modifiable;				// Code modifiable
    -	var $code_modifiable_invalide;		// Code modifiable si il est invalide
    -	var $code_modifiable_null;			// Code modifiables si il est null
    -	var $code_null;						// Code facultatif
    -	var $version='dolibarr';	    	// 'development', 'experimental', 'dolibarr'
    -	var $code_auto;                     // Numerotation automatique
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Monkey';
     
    -	var $prefixcustomer='CU';
    -	var $prefixsupplier='SU';
    -	var $prefixIsRequired; // Le champ prefix du tiers doit etre renseigne quand on utilise {pre}
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Monkey';
    +
    +	public $code_modifiable;				// Code modifiable
    +
    +	public $code_modifiable_invalide;		// Code modifiable si il est invalide
    +
    +	public $code_modifiable_null;			// Code modifiables si il est null
    +
    +	public $code_null;						// Code facultatif
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';	    	// 'development', 'experimental', 'dolibarr'
    +
    +	public $code_auto;                     // Numerotation automatique
    +
    +	public $prefixcustomer='CU';
    +
    +	public $prefixsupplier='SU';
    +
    +	public $prefixIsRequired; // Le champ prefix du tiers doit etre renseigne quand on utilise {pre}
     
     
     	/**
    @@ -101,24 +122,22 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
     
     		$return='000001';
     
    -		$field='';$where='';
    -		if ($type == 0)
    -		{
    +		$field='';
    +        $where='';
    +        $prefix = '';
    +		if ($type == 0) {
     			$field = 'code_client';
    +            $prefix = $this->prefixcustomer;
     			//$where = ' AND client in (1,2)';
    -		}
    -		else if ($type == 1)
    -		{
    +		} elseif ($type == 1) {
     			$field = 'code_fournisseur';
    +            $prefix = $this->prefixsupplier;
     			//$where = ' AND fournisseur = 1';
    -		}
    -		else return -1;
    +		} else {
    +            return -1;
    +        }
     
    -
    -		if ($type == 0) $prefix=$this->prefixcustomer;
    -		if ($type == 1) $prefix=$this->prefixsupplier;
    -
    -		// D'abord on recupere la valeur max (reponse immediate car champ indexe)
    +        // D'abord on recupere la valeur max (reponse immediate car champ indexe)
     		$posindice=8;
             $sql = "SELECT MAX(CAST(SUBSTRING(".$field." FROM ".$posindice.") AS SIGNED)) as max";   // This is standard SQL
     		$sql.= " FROM ".MAIN_DB_PREFIX."societe";
    @@ -210,6 +229,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *		Renvoi si un code est pris ou non (par autre tiers)
     	 *
    @@ -221,6 +241,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
     	 */
     	function verif_dispo($db, $code, $soc, $type=0)
     	{
    +        // phpcs:enable
     		global $conf, $mc;
     
     		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe";
    @@ -249,6 +270,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoi si un code respecte la syntaxe
     	 *
    @@ -257,6 +279,7 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
     	 */
     	function verif_syntax($code)
     	{
    +        // phpcs:enable
     		$res = 0;
     
     		if (dol_strlen($code) < 11)
    @@ -269,6 +292,4 @@ class mod_codeclient_monkey extends ModeleThirdPartyCode
     		}
     		return $res;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/societe/mod_codecompta_aquarium.php b/htdocs/core/modules/societe/mod_codecompta_aquarium.php
    index c237be0f91c..772b28f3d6c 100644
    --- a/htdocs/core/modules/societe/mod_codecompta_aquarium.php
    +++ b/htdocs/core/modules/societe/mod_codecompta_aquarium.php
    @@ -31,12 +31,27 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/societe/modules_societe.class.php'
      */
     class mod_codecompta_aquarium extends ModeleAccountancyCode
     {
    -	var $nom='Aquarium';
    -	var $name='Aquarium';
    -	var $version='dolibarr';        // 'development', 'experimental', 'dolibarr'
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Aquarium';
     
    -	var	$prefixcustomeraccountancycode;
    -	var	$prefixsupplieraccountancycode;
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Aquarium';
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';        // 'development', 'experimental', 'dolibarr'
    +
    +	public	$prefixcustomeraccountancycode;
    +
    +	public	$prefixsupplieraccountancycode;
     
     
     	/**
    @@ -107,6 +122,7 @@ class mod_codecompta_aquarium extends ModeleAccountancyCode
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Set accountancy account code for a third party into this->code
     	 *
    @@ -117,6 +133,7 @@ class mod_codecompta_aquarium extends ModeleAccountancyCode
     	 */
     	function get_code($db, $societe, $type='')
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$i = 0;
    @@ -212,4 +229,3 @@ class mod_codecompta_aquarium extends ModeleAccountancyCode
     		}
     	}
     }
    -
    diff --git a/htdocs/core/modules/societe/mod_codecompta_panicum.php b/htdocs/core/modules/societe/mod_codecompta_panicum.php
    index 15099eb0538..c1e83b75db4 100644
    --- a/htdocs/core/modules/societe/mod_codecompta_panicum.php
    +++ b/htdocs/core/modules/societe/mod_codecompta_panicum.php
    @@ -30,9 +30,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/societe/modules_societe.class.php'
      */
     class mod_codecompta_panicum extends ModeleAccountancyCode
     {
    -	var $nom='Panicum';
    -	var $name='Panicum';
    -	var $version='dolibarr';        // 'development', 'experimental', 'dolibarr'
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Panicum';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Panicum';
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';        // 'development', 'experimental', 'dolibarr'
     
     
     	/**
    @@ -67,6 +81,7 @@ class mod_codecompta_panicum extends ModeleAccountancyCode
     		return '';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Set accountancy account code for a third party into this->code
     	 *
    @@ -77,6 +92,7 @@ class mod_codecompta_panicum extends ModeleAccountancyCode
     	 */
     	function get_code($db, $societe, $type='')
     	{
    +        // phpcs:enable
     		$this->code='';
     
     		if (is_object($societe)) {
    @@ -87,4 +103,3 @@ class mod_codecompta_panicum extends ModeleAccountancyCode
     		return 0; // return ok
     	}
     }
    -
    diff --git a/htdocs/core/modules/societe/modules_societe.class.php b/htdocs/core/modules/societe/modules_societe.class.php
    index 0ed5eace2e2..a38acbc002a 100644
    --- a/htdocs/core/modules/societe/modules_societe.class.php
    +++ b/htdocs/core/modules/societe/modules_societe.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,28 +33,32 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModeleThirdPartyDoc extends CommonDocGenerator
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return list of active generation modules
          *
    -	 * 	@param	DoliDB		$db					Database handler
    +     * 	@param	DoliDB		$db					Database handler
          *  @param	integer		$maxfilenamelength  Max length of value to show
          * 	@return	array							List of templates
          */
         static function liste_modeles($db,$maxfilenamelength=0)
         {
    +        // phpcs:enable
             global $conf;
     
             $type='company';
             $liste=array();
     
             include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    -        $liste=getListOfModels($db,$type,$maxfilenamelength);
    +        $liste = getListOfModels($db,$type,$maxfilenamelength);
     
             return $liste;
         }
    -
     }
     
     /**
    @@ -63,7 +67,10 @@ abstract class ModeleThirdPartyDoc extends CommonDocGenerator
      */
     abstract class ModeleThirdPartyCode
     {
    -    var $error='';
    +    /**
    +     * @var string Error code (or message)
    +	 */
    +	public $error='';
     
         /**     Renvoi la description par defaut du modele de numerotation
          *
    @@ -138,8 +145,9 @@ abstract class ModeleThirdPartyCode
             return $langs->trans("NotAvailable");
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     *  Renvoi la liste des modeles de numéroation
    +     *  Renvoie la liste des modeles de numérotation
          *
          *  @param	DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
    @@ -147,6 +155,7 @@ abstract class ModeleThirdPartyCode
          */
         static function liste_modeles($db,$maxfilenamelength=0)
         {
    +        // phpcs:enable
             $liste=array();
             $sql ="";
     
    @@ -170,12 +179,12 @@ abstract class ModeleThirdPartyCode
         }
     
         /**
    -     *      Return description of module parameters
    +     *  Return description of module parameters
          *
    -     *      @param	Translate	$langs      Output language
    -     *		@param	Societe		$soc		Third party object
    -     *		@param	int			$type		-1=Nothing, 0=Customer, 1=Supplier
    -     *		@return	string					HTML translated description
    +     *  @param	Translate	$langs      Output language
    +     *  @param	Societe		$soc		Third party object
    +     *  @param	int			$type		-1=Nothing, 0=Customer, 1=Supplier
    +     *  @return	string					HTML translated description
          */
         function getToolTip($langs,$soc,$type)
         {
    @@ -236,16 +245,17 @@ abstract class ModeleThirdPartyCode
             return $s;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Check if mask/numbering use prefix
     	 *
    -	 *   @return	int		0=no, 1=yes
    -	 */
    +	 *   @return    int	    0=no, 1=yes
    +     */
         function verif_prefixIsUsed()
         {
    +        // phpcs:enable
             return 0;
         }
    -
     }
     
     
    @@ -255,7 +265,10 @@ abstract class ModeleThirdPartyCode
      */
     abstract class ModeleAccountancyCode
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
         /**		Return description of module
    @@ -345,6 +358,7 @@ abstract class ModeleAccountancyCode
             return $s;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Set accountancy account code for a third party into this->code
          *
    @@ -355,7 +369,8 @@ abstract class ModeleAccountancyCode
          */
         function get_code($db, $societe, $type='')
         {
    -	    global $langs;
    +        // phpcs:enable
    +        global $langs;
     
             return $langs->trans("NotAvailable");
         }
    @@ -363,6 +378,7 @@ abstract class ModeleAccountancyCode
     
     
     
    +// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     /**
      *  Create a document onto disk according to template module.
      *
    @@ -380,6 +396,7 @@ abstract class ModeleAccountancyCode
      */
     function thirdparty_doc_create(DoliDB $db, Societe $object, $message, $modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0)
     {
    +    // phpcs:enable
     	dol_syslog(__METHOD__ . " is deprecated", LOG_WARNING);
     
     	return $object->generateDocument($modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
    diff --git a/htdocs/core/modules/stock/doc/doc_generic_stock_odt.modules.php b/htdocs/core/modules/stock/doc/doc_generic_stock_odt.modules.php
    index 4b4a902cb96..c9c4350e050 100644
    --- a/htdocs/core/modules/stock/doc/doc_generic_stock_odt.modules.php
    +++ b/htdocs/core/modules/stock/doc/doc_generic_stock_odt.modules.php
    @@ -1,6 +1,7 @@
     <?php
     /* Copyright (C) 2010-2012 	Laurent Destailleur <eldy@stocks.sourceforge.net>
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
    @@ -36,10 +37,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_stock_odt extends ModelePDFStock
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -49,10 +63,10 @@ class doc_generic_stock_odt extends ModelePDFStock
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -94,10 +108,10 @@ class doc_generic_stock_odt extends ModelePDFStock
     	 */
     	function info($langs)
     	{
    -		global $conf,$langs;
    +		global $conf, $langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("errors","companies"));
     
     		$form = new Form($this->db);
     
    @@ -191,6 +205,7 @@ class doc_generic_stock_odt extends ModelePDFStock
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -204,6 +219,7 @@ class doc_generic_stock_odt extends ModelePDFStock
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $stock,$langs,$conf,$mysoc,$hookmanager,$user;
     
     		if (empty($srctemplatepath))
    @@ -225,10 +241,9 @@ class doc_generic_stock_odt extends ModelePDFStock
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills"));
    +
     		if ($conf->produit->dir_output)
     		{
     			// If $object is id instead of object
    @@ -354,6 +369,7 @@ class doc_generic_stock_odt extends ModelePDFStock
     				catch(Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -368,8 +384,9 @@ class doc_generic_stock_odt extends ModelePDFStock
     				try {
     					$odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
     				}
    -				catch(OdfException $e)
    +				catch (OdfException $e)
     				{
    +					dol_syslog($e->getMessage(), LOG_INFO);
     				}
     
     				// Define substitution array
    @@ -404,8 +421,9 @@ class doc_generic_stock_odt extends ModelePDFStock
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Replace tags of lines
    @@ -428,9 +446,11 @@ class doc_generic_stock_odt extends ModelePDFStock
     								}
     								catch(OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -454,6 +474,7 @@ class doc_generic_stock_odt extends ModelePDFStock
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -465,16 +486,18 @@ class doc_generic_stock_odt extends ModelePDFStock
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
     				else {
     					try {
     					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -499,6 +522,4 @@ class doc_generic_stock_odt extends ModelePDFStock
     
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/stock/doc/pdf_standard.modules.php b/htdocs/core/modules/stock/doc/pdf_standard.modules.php
    index 5825bd693f5..ce01124211a 100644
    --- a/htdocs/core/modules/stock/doc/pdf_standard.modules.php
    +++ b/htdocs/core/modules/stock/doc/pdf_standard.modules.php
    @@ -58,9 +58,9 @@ class pdf_standard extends ModelePDFStock
     
     	/**
          * @var array() Minimum version of PHP required by module.
    -	 * e.g.: PHP ≥ 5.3 = array(5, 3)
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
          */
    -	public $phpmin = array(5, 2);
    +	public $phpmin = array(5, 4);
     
     	/**
          * Dolibarr version of the loaded document
    @@ -68,15 +68,46 @@ class pdf_standard extends ModelePDFStock
          */
     	public $version = 'dolibarr';
     
    +    /**
    +     * @var int page_largeur
    +     */
         public $page_largeur;
    +
    +    /**
    +     * @var int page_hauteur
    +     */
         public $page_hauteur;
    +
    +    /**
    +     * @var array format
    +     */
         public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
     	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
     	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
     	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
     	public $marge_basse;
     
    -    public $emetteur;	// Objet societe qui emet
    +    /**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
     
     	/**
    @@ -88,8 +119,8 @@ class pdf_standard extends ModelePDFStock
     	{
     		global $conf,$langs,$mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load traductions files requiredby by page
    +		$langs->loadLangs(array("main", "companies"));
     
     		$this->db = $db;
     		$this->name = "standard";
    @@ -114,12 +145,12 @@ class pdf_standard extends ModelePDFStock
     		// Recupere emetteur
     		$this->emetteur=$mysoc;
     		if (! $this->emetteur->country_code) $this->emetteur->country_code=substr($langs->defaultlang,-2);    // By default if not defined
    -		
    +
     		// Define position of columns
     		$this->wref = 15;
     		$this->posxdesc=$this->marge_gauche+1;
     		$this->posxlabel=$this->posxdesc+$this->wref;
    -		$this->posxtva=80;		
    +		$this->posxtva=80;
     		$this->posxqty=95;
     		$this->posxup=115;
     		$this->posxunit=135;
    @@ -146,6 +177,7 @@ class pdf_standard extends ModelePDFStock
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -159,19 +191,15 @@ class pdf_standard extends ModelePDFStock
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$db,$hookmanager;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("stocks");
    -		$outputlangs->load("orders");
    -		$outputlangs->load("deliveries");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "stocks", "orders", "deliveries"));
     
     		$nblignes = count($object->lines);
     
    @@ -193,7 +221,7 @@ class pdf_standard extends ModelePDFStock
     			$stockFournisseur = new ProductFournisseur($this->db);
     			$supplierprices = $stockFournisseur->list_product_fournisseur_price($object->id);
     			$object->supplierprices = $supplierprices;
    -			
    +
     			$productstatic=new Product($db);
     
     			if (! file_exists($dir))
    @@ -273,8 +301,8 @@ class pdf_standard extends ModelePDFStock
     				/* Affichage de la liste des produits de l'entrepot                           */
     				/*                                                                            */
     				/* ************************************************************************** */
    -				
    -				$nexY+=5;				
    +
    +				$nexY+=5;
     				$nexY = $pdf->GetY();
     				$nexY+=10;
     
    @@ -316,7 +344,7 @@ class pdf_standard extends ModelePDFStock
     								if ($objtp->label != '') $objp->produit = $objtp->label;
     							}
     						}
    -						
    +
     						$curY = $nexY;
     						$pdf->SetFont('','', $default_font_size - 1);   // Into loop to work with multipage
     						$pdf->SetTextColor(0,0,0);
    @@ -324,7 +352,7 @@ class pdf_standard extends ModelePDFStock
     						$pdf->setTopMargin($tab_top_newpage);
     						$pdf->setPageOrientation('', 1, $heightforfooter+$heightforfreetext+$heightforinfotot);	// The only function to edit the bottom margin of current page to set it.
     						$pageposbefore=$pdf->getPage();
    -						
    +
     						// Description of product line
     						$curX = $this->posxdesc-1;
     
    @@ -377,13 +405,13 @@ class pdf_standard extends ModelePDFStock
     						}
     
     						$pdf->SetFont('','',  $default_font_size - 1);   // On repositionne la police par defaut
    -						
    +
     						$productstatic->id=$objp->rowid;
     						$productstatic->ref = $objp->ref;
     						$productstatic->label = $objp->produit;
     						$productstatic->type=$objp->type;
     						$productstatic->entity=$objp->entity;
    -						$productstatic->status_batch=$objp->tobatch;	
    +						$productstatic->status_batch=$objp->tobatch;
     
     						// Ref.
     						$pdf->SetXY($this->posxdesc, $curY);
    @@ -396,12 +424,12 @@ class pdf_standard extends ModelePDFStock
     						// Quantity
     						$valtoshow=price2num($objp->value, 'MS');
     						$towrite = (empty($valtoshow)?'0':$valtoshow);
    -						
    +
     						$pdf->SetXY($this->posxqty, $curY);
    -						$pdf->MultiCell($this->posxup-$this->posxqty-0.8, 3, $towrite, 0, 'R');				
    -						
    +						$pdf->MultiCell($this->posxup-$this->posxqty-0.8, 3, $towrite, 0, 'R');
    +
     						$totalunit+=$objp->value;
    -							
    +
     						$pdf->SetXY($this->posxup, $curY);
     						$pdf->MultiCell($this->posxunit-$this->posxup-0.8, 3, price(price2num($objp->ppmp,'MU'), 0, $outputlangs), 0, 'R');
     
    @@ -434,7 +462,7 @@ class pdf_standard extends ModelePDFStock
     						}
     
     						$nexY+=2;    // Passe espace entre les lignes
    -						
    +
     						// Detect if some page were added automatically and output _tableau for past pages
     						while ($pagenb < $pageposafter)
     						{
    @@ -471,20 +499,20 @@ class pdf_standard extends ModelePDFStock
     							if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
     						}
     					}
    -					
    +
     					$db->free($resql);
    -					
    +
     					/**
     					 * footer table
     					 */
     					$nexY = $pdf->GetY();
     					$nexY+=2;
    -					$curY = $nexY;					
    -					
    -					$pdf->SetLineStyle(array('dash'=>'0','color'=>array(220,26,26)));					
    +					$curY = $nexY;
    +
    +					$pdf->SetLineStyle(array('dash'=>'0','color'=>array(220,26,26)));
     					$pdf->line($this->marge_gauche, $curY-1, $this->page_largeur-$this->marge_droite, $curY-1);
     					$pdf->SetLineStyle(array('dash'=>0));
    -					
    +
     					$pdf->SetFont('','B',$default_font_size-1);
     					$pdf->SetTextColor(0,0,120);
     
    @@ -492,7 +520,7 @@ class pdf_standard extends ModelePDFStock
     					$pdf->SetXY($this->posxdesc, $curY);
     					$pdf->MultiCell($this->wref, 3, $langs->trans("Total"), 0, 'L');
     
    -					// Quantity				
    +					// Quantity
     					$valtoshow=price2num($totalunit, 'MS');
     					$towrite = empty($valtoshow)?'0':$valtoshow;
     
    @@ -741,8 +769,8 @@ class pdf_standard extends ModelePDFStock
     					}
     				}
     				*/
    -				$tab_top = $tab_top_newpage+21;               
    -				
    +				$tab_top = $tab_top_newpage+21;
    +
     				// Show square
     				if ($pagenb == 1)
     				{
    @@ -754,7 +782,7 @@ class pdf_standard extends ModelePDFStock
     					$this->_tableau($pdf, $tab_top_newpage, $this->page_hauteur - $tab_top_newpage - $heightforinfotot - $heightforfreetext - $heightforfooter, 0, $outputlangs, 1, 0, $object->multicurrency_code);
     					$bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
     				}
    -				
    +
     				$bottomlasttab=$this->page_hauteur - $heightforinfotot - $heightforfreetext - $heightforfooter + 1;
     
     				// Affiche zone infos
    @@ -841,21 +869,21 @@ class pdf_standard extends ModelePDFStock
     
     	    // Output Rect
     	    //$this->printRect($pdf,$this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height, $hidetop, $hidebottom);	// Rect prend une longueur en 3eme param et 4eme param
    -		
    +
     		$pdf->SetLineStyle(array('dash'=>'0','color'=>array(220,26,26)));
    -		$pdf->SetDrawColor(220,26,26);	
    +		$pdf->SetDrawColor(220,26,26);
     		$pdf->line($this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_droite, $tab_top);
     		$pdf->SetLineStyle(array('dash'=>0));
     		$pdf->SetDrawColor(128,128,128);
     		$pdf->SetTextColor(0,0,120);
    -		
    +
     	    if (empty($hidetop))
     	    {
     	        //$pdf->line($this->marge_gauche, $tab_top+5, $this->page_largeur-$this->marge_droite, $tab_top+5);	// line prend une position y en 2eme param et 4eme param
     	        $pdf->SetXY($this->posxdesc-1, $tab_top+1);
     	        $pdf->MultiCell($this->wref,3, $outputlangs->transnoentities("Ref"),'','L');
     	    }
    -	        
    +
     		//$pdf->line($this->posxlabel-1, $tab_top, $this->posxlabel-1, $tab_top + $tab_height);
     		if (empty($hidetop))
     		{
    @@ -865,7 +893,7 @@ class pdf_standard extends ModelePDFStock
     
     	    //$pdf->line($this->posxqty-1, $tab_top, $this->posxqty-1, $tab_top + $tab_height);
     	    if (empty($hidetop))
    -	    {	
    +	    {
     	        $pdf->SetXY($this->posxqty-1, $tab_top+1);
     	        $pdf->MultiCell($this->posxup-$this->posxqty-1,2, $outputlangs->transnoentities("Units"),'','C');
     	    }
    @@ -878,7 +906,7 @@ class pdf_standard extends ModelePDFStock
     	    }
     
     		//$pdf->line($this->posxunit - 1, $tab_top, $this->posxunit - 1, $tab_top + $tab_height);
    -		if (empty($hidetop)) 
    +		if (empty($hidetop))
     		{
     			$pdf->SetXY($this->posxunit - 1, $tab_top + 1);
     			$pdf->MultiCell($this->posxdiscount - $this->posxunit - 1, 2, $outputlangs->transnoentities("EstimatedStockValueShort"), '',
    @@ -892,18 +920,17 @@ class pdf_standard extends ModelePDFStock
     			$pdf->MultiCell($this->postotalht-$this->posxdiscount+1,2, $outputlangs->transnoentities("SellPriceMin"),'','C');
     	    }
     
    -	    //$pdf->line($this->postotalht, $tab_top, $this->postotalht, $tab_top + $tab_height);	   
    +	    //$pdf->line($this->postotalht, $tab_top, $this->postotalht, $tab_top + $tab_height);
     	    if (empty($hidetop))
     	    {
     	        $pdf->SetXY($this->postotalht-1, $tab_top+1);
     	        $pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->postotalht,2, $outputlangs->transnoentities("EstimatedStockValueSellShort"),'','C');
     	    }
    -		
    -		$pdf->SetDrawColor(220,26,26);	
    +
    +		$pdf->SetDrawColor(220,26,26);
     		$pdf->SetLineStyle(array('dash'=>'0','color'=>array(220,26,26)));
    -		$pdf->line($this->marge_gauche, $tab_top+11, $this->page_largeur-$this->marge_droite, $tab_top+11);	 
    +		$pdf->line($this->marge_gauche, $tab_top+11, $this->page_largeur-$this->marge_droite, $tab_top+11);
     		$pdf->SetLineStyle(array('dash'=>0));
    -		
     	}
     
     	/**
    @@ -920,12 +947,9 @@ class pdf_standard extends ModelePDFStock
     	{
     	    global $conf,$langs,$db,$hookmanager;
     
    -	    $outputlangs->load("main");
    -	    $outputlangs->load("bills");
    -	    $outputlangs->load("propal");
    -	    $outputlangs->load("companies");
    -	    $outputlangs->load("orders");
    -	    $outputlangs->load("stocks");
    +	    // Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "propal", "companies", "bills", "orders", "stocks"));
    +
     	    $default_font_size = pdf_getPDFFontSize($outputlangs);
     
     	    if ($object->type == 1) $titlekey='ServiceSheet';
    @@ -969,7 +993,7 @@ class pdf_standard extends ModelePDFStock
     	        $text=$this->emetteur->name;
     	        $pdf->MultiCell(100, 4, $outputlangs->convToOutputCharset($text), 0, 'L');
     	    }
    -		
    +
     	    $pdf->SetFont('','B', $default_font_size + 3);
     	    $pdf->SetXY($posx,$posy);
     	    $pdf->SetTextColor(0,0,60);
    @@ -989,22 +1013,22 @@ class pdf_standard extends ModelePDFStock
     		$pdf->SetXY($posx,$posy);
     	    $pdf->SetTextColor(0,0,60);
     	    $pdf->MultiCell(100, 3, $outputlangs->transnoentities("LocationSummary").' :', '', 'R');
    -		
    +
     		$posy+=4;
     		$pdf->SetXY($posx-50,$posy);
     		$pdf->MultiCell(150, 3, $object->lieu, '', 'R');
    -		
    -		
    +
    +
     		// Parent entrepot
     		$posy+=4;
     		$pdf->SetXY($posx,$posy);
     		$pdf->SetTextColor(0,0,60);
     		$pdf->MultiCell(100, 3, $outputlangs->transnoentities("ParentWarehouse").' :', '', 'R');
    -		
    +
     		$posy+=4;
     		$pdf->SetXY($posx-50,$posy);
     		$e = new Entrepot($db);
    -		if(!empty($object->fk_parent) && $e->fetch($object->fk_parent) > 0) 
    +		if(!empty($object->fk_parent) && $e->fetch($object->fk_parent) > 0)
     		{
     			$pdf->MultiCell(150, 3, $e->libelle, '', 'R');
     		}
    @@ -1012,14 +1036,14 @@ class pdf_standard extends ModelePDFStock
     		{
     			$pdf->MultiCell(150, 3, $outputlangs->transnoentities("None"), '', 'R');
     		}
    -		
    +
     		// Description
     		$nexY = $pdf->GetY();
     		$nexY+=5;
     		$pdf->SetXY($posx,$posy);
     		$pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY, '<b>'.$outputlangs->transnoentities("Description").' : </b>'.nl2br($object->description), 0, 1);
     		$nexY = $pdf->GetY();
    -		
    +
     		$calcproductsunique=$object->nb_different_products();
     		$calcproducts=$object->nb_products();
     
    @@ -1031,12 +1055,12 @@ class pdf_standard extends ModelePDFStock
     		$valtoshow=price2num($calcproducts['nb'], 'MS');
     		$pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY, '<b>'.$outputlangs->transnoentities("NumberOfProducts").' : </b>'.(empty($valtoshow)?'0':$valtoshow), 0, 1);
     		$nexY = $pdf->GetY();
    -		
    +
     		// Value
     		$pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY, '<b>'.$outputlangs->transnoentities("EstimatedStockValueShort").' : </b>'. price((empty($calcproducts['value'])?'0':price2num($calcproducts['value'],'MT')), 0, $langs, 0, -1, -1, $conf->currency), 0, 1);
     		$nexY = $pdf->GetY();
    -		
    -		
    +
    +
     		// Last movement
     		$sql = "SELECT max(m.datem) as datem";
     		$sql .= " FROM ".MAIN_DB_PREFIX."stock_mouvement as m";
    @@ -1064,7 +1088,7 @@ class pdf_standard extends ModelePDFStock
     		$pdf->writeHTMLCell(190, 2, $this->marge_gauche, $nexY, '<b>'.$outputlangs->transnoentities("LastMovement").' : </b>'.$toWrite, 0, 1);
     		$nexY = $pdf->GetY();
     
    -		
    +
     	    /*if ($object->ref_client)
     	    {
     	        $posy+=5;
    @@ -1153,6 +1177,4 @@ class pdf_standard extends ModelePDFStock
     	    $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     	    return pdf_pagefoot($pdf,$outputlangs,'PRODUCT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php b/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php
    index f8844a275e5..222538a8554 100644
    --- a/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php
    +++ b/htdocs/core/modules/stock/doc/pdf_stdmovement.modules.php
    @@ -59,9 +59,9 @@ class pdf_stdmovement extends ModelePDFMovement
     
     	/**
          * @var array() Minimum version of PHP required by module.
    -	 * e.g.: PHP ≥ 5.3 = array(5, 3)
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
          */
    -	public $phpmin = array(5, 2);
    +	public $phpmin = array(5, 4);
     
     	/**
          * Dolibarr version of the loaded document
    @@ -69,15 +69,46 @@ class pdf_stdmovement extends ModelePDFMovement
          */
     	public $version = 'dolibarr';
     
    +    /**
    +     * @var int page_largeur
    +     */
         public $page_largeur;
    +
    +    /**
    +     * @var int page_hauteur
    +     */
         public $page_hauteur;
    +
    +    /**
    +     * @var array format
    +     */
         public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
     	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
     	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
     	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
     	public $marge_basse;
     
    -    public $emetteur;	// Objet societe qui emet
    +    /**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
     
     	/**
    @@ -89,8 +120,8 @@ class pdf_stdmovement extends ModelePDFMovement
     	{
     		global $conf,$langs,$mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load traductions files requiredby by page
    +		$langs->loadLangs(array("main", "companies"));
     
     		$this->db = $db;
     		$this->name = "stdmouvement";
    @@ -149,6 +180,7 @@ class pdf_stdmovement extends ModelePDFMovement
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -162,19 +194,15 @@ class pdf_stdmovement extends ModelePDFMovement
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$db,$hookmanager;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("stocks");
    -		$outputlangs->load("orders");
    -		$outputlangs->load("deliveries");
    +		// Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "stocks", "orders", "deliveries"));
     
     	/**
     	 * TODO: get from object
    @@ -219,7 +247,7 @@ class pdf_stdmovement extends ModelePDFMovement
     
     		// fetch optionals attributes and labels
     		$extralabels = $extrafields->fetch_name_optionals_label('movement');
    -		$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +		$search_array_options=$extrafields->getOptionalsFromPost('movement','','search_');
     
     		$productlot=new ProductLot($db);
     		$productstatic=new Product($db);
    @@ -685,7 +713,6 @@ class pdf_stdmovement extends ModelePDFMovement
     					// Total Qty
     					$pdf->SetXY($this->postotalht, $curY);
     					$pdf->MultiCell($this->page_largeur-$this->marge_droite-$this->postotalht, 3, $totalunit, 0, 'R', 0);
    -
     				}
     				else
     				{
    @@ -905,7 +932,6 @@ class pdf_stdmovement extends ModelePDFMovement
     		$pdf->SetLineStyle(array('dash'=>'0','color'=>array(220,26,26)));
     		$pdf->line($this->marge_gauche, $tab_top+11, $this->page_largeur-$this->marge_droite, $tab_top+11);
     		$pdf->SetLineStyle(array('dash'=>0));
    -
     	}
     
     	/**
    @@ -922,12 +948,9 @@ class pdf_stdmovement extends ModelePDFMovement
     	{
     	    global $conf,$langs,$db,$hookmanager;
     
    -	    $outputlangs->load("main");
    -	    $outputlangs->load("bills");
    -	    $outputlangs->load("propal");
    -	    $outputlangs->load("companies");
    -	    $outputlangs->load("orders");
    -	    $outputlangs->load("stocks");
    +	    // Load traductions files requiredby by page
    +		$outputlangs->loadLangs(array("main", "propal", "companies", "bills", "orders", "stocks"));
    +
     	    $default_font_size = pdf_getPDFFontSize($outputlangs);
     
     	    if ($object->type == 1) $titlekey='ServiceSheet';
    @@ -1155,6 +1178,4 @@ class pdf_stdmovement extends ModelePDFMovement
     	    $showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     	    return pdf_pagefoot($pdf,$outputlangs,'PRODUCT_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/stock/modules_movement.php b/htdocs/core/modules/stock/modules_movement.php
    index 806f500dab7..33672e415ea 100644
    --- a/htdocs/core/modules/stock/modules_movement.php
    +++ b/htdocs/core/modules/stock/modules_movement.php
    @@ -30,9 +30,13 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModelePDFMovement extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of active generation modules
     	 *
    @@ -42,6 +46,7 @@ abstract class ModelePDFMovement extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='mouvement';
    @@ -50,4 +55,4 @@ abstract class ModelePDFMovement extends CommonDocGenerator
     		$liste=getListOfModels($db,$type,$maxfilenamelength);
     		return $liste;
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/core/modules/stock/modules_stock.php b/htdocs/core/modules/stock/modules_stock.php
    index a0740b50f54..a74df6198ce 100644
    --- a/htdocs/core/modules/stock/modules_stock.php
    +++ b/htdocs/core/modules/stock/modules_stock.php
    @@ -23,18 +23,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModelePDFStock extends CommonDocGenerator
     {
    -    var $error='';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return list of active generation modules
          *
    -	 * 	@param	DoliDB		$db					Database handler
    +     * 	@param	DoliDB		$db					Database handler
          *  @param	integer		$maxfilenamelength  Max length of value to show
          * 	@return	array							List of templates
          */
         static function liste_modeles($db,$maxfilenamelength=0)
         {
    +        // phpcs:enable
             global $conf;
     
             $type='stock';
    diff --git a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php
    index 2eaa85261d0..908b3c8ba41 100644
    --- a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php
    +++ b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_cactus.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2013      Philippe Grand       <philippe.grand@atoo-net.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
    + * Copyright (C) 2013-2018 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2016      Alexandre Spangaro   <aspangaro@zendsi.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -33,12 +33,34 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_invoice/modules_facturef
      */
     class mod_facture_fournisseur_cactus extends ModeleNumRefSuppliersInvoices
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Cactus';
    -	var $prefixinvoice='SI';
    -	var $prefixcreditnote='SA';
    -	var $prefixdeposit='SD';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Cactus';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Cactus';
    +
    +	public $prefixinvoice='SI';
    +
    +	public $prefixcreditnote='SA';
    +
    +	public $prefixdeposit='SD';
     
     
         /**
    diff --git a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_tulip.php b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_tulip.php
    index 7c595fe4e9d..a3cb291263a 100644
    --- a/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_tulip.php
    +++ b/htdocs/core/modules/supplier_invoice/mod_facture_fournisseur_tulip.php
    @@ -1,8 +1,8 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2013      Philippe Grand       <philippe.grand@atoo-net.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
    + * Copyright (C) 2013-2018 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2013      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2016      Alexandre Spangaro   <aspangaro@zendsi.com>
      *
    @@ -36,9 +36,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_invoice/modules_facturef
     */
     class mod_facture_fournisseur_tulip extends ModeleNumRefSuppliersInvoices
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Tulip';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Tulip';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Tulip';
     
     
         /**
    @@ -48,10 +67,10 @@ class mod_facture_fournisseur_tulip extends ModeleNumRefSuppliersInvoices
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
    -		$langs->load("bills");
    -		$langs->load("admin");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("bills","admin"));
     
     		$form = new Form($this->db);
     
    diff --git a/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php b/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php
    index 7762d8ce6a5..d1b28ebd0bd 100644
    --- a/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php
    +++ b/htdocs/core/modules/supplier_invoice/modules_facturefournisseur.php
    @@ -1,8 +1,8 @@
     <?php
    -/* Copyright (C) 2010	Juanjo Menent	<jmenent@2byte.es>
    - * Copyright (C) 2012	Regis Houssin	<regis.houssin@capnetworks.com>
    - * Copyright (C) 2013-2016   Philippe Grand  <philippe.grand@atoo-net.com>
    - * Copyright (C) 2014   Marcos García   <marcosgdf@gmail.com>
    +/* Copyright (C) 2010       Juanjo Menent       <jmenent@2byte.es>
    + * Copyright (C) 2012       Regis Houssin       <regis.houssin@inodbox.com>
    + * Copyright (C) 2013-2016  Philippe Grand      <philippe.grand@atoo-net.com>
    + * Copyright (C) 2014       Marcos García       <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -34,9 +34,13 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';	// requir
      */
     abstract class ModelePDFSuppliersInvoices extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation models
     	 *
    @@ -44,19 +48,19 @@ abstract class ModelePDFSuppliersInvoices extends CommonDocGenerator
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of numbers
     	 */
    -	static function liste_modeles($db,$maxfilenamelength=0)
    +	static function liste_modeles($db, $maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
    -		$type='invoice_supplier';
    -		$liste=array();
    +		$type = 'invoice_supplier';
    +		$list = array();
     
     		include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    -		$liste=getListOfModels($db,$type,$maxfilenamelength);
    +		$list = getListOfModels($db, $type, $maxfilenamelength);
     
    -		return $liste;
    +		return $list;
     	}
    -
     }
     
     /**
    @@ -64,7 +68,10 @@ abstract class ModelePDFSuppliersInvoices extends CommonDocGenerator
      */
     abstract class ModeleNumRefSuppliersInvoices
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**  Return if a model can be used or not
     	 *
    diff --git a/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php b/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php
    index 874e776d2e0..dec36d5adbd 100644
    --- a/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php
    +++ b/htdocs/core/modules/supplier_invoice/pdf/pdf_canelle.modules.php
    @@ -37,23 +37,79 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
      */
     class pdf_canelle extends ModelePDFSuppliersInvoices
     {
    -    var $db;
    -    var $name;
    -    var $description;
    -    var $type;
    +    /**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
     
    -    var $phpmin = array(4,3,0); // Minimum version of PHP required by module
    -    var $version = 'dolibarr';
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
     
    -    var $page_largeur;
    -    var $page_hauteur;
    -    var $format;
    -	var $marge_gauche;
    -	var	$marge_droite;
    -	var	$marge_haute;
    -	var	$marge_basse;
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
    +
    +    /**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +    /**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
    -	var $emetteur;	// Objet societe qui emet
     
     
     	/**
    @@ -63,9 +119,9 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		// Translations
    +		// Load translation files required by the page
     		$langs->loadLangs(array("main", "bills"));
     
     		$this->db = $db;
    @@ -127,6 +183,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *  Function to build pdf onto disk
          *
    @@ -137,9 +194,10 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
          *  @param		int					$hidedesc			Do not show desc
          *  @param		int					$hideref			Do not show ref
          *  @return		int										1=OK, 0=KO
    -	 */
    +     */
     	function write_file($object, $outputlangs='', $srctemplatepath='', $hidedetails=0, $hidedesc=0, $hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$hookmanager,$nblignes;
     
     		// Get source company
    @@ -152,11 +210,8 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("products");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products"));
     
     		if ($conf->fournisseur->facture->dir_output)
     		{
    @@ -188,7 +243,6 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     					$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
     					return 0;
     				}
    -
     			}
     
     			if (file_exists($dir))
    @@ -550,6 +604,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show total to pay
     	 *
    @@ -562,6 +617,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     	 */
     	function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf,$mysoc;
     
             $default_font_size = pdf_getPDFFontSize($outputlangs);
    @@ -868,9 +924,9 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     			$pdf->SetXY($this->postotalht-1, $tab_top+1);
     			$pdf->MultiCell(30,2, $outputlangs->transnoentities("TotalHTShort"),'','C');
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show payments table
     	 *
    @@ -882,6 +938,7 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     	 */
     	function _tableau_versements(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$sign=1;
    @@ -960,7 +1017,6 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     			$this->error=$this->db->lasterror();
     			return -1;
     		}
    -
     	}
     
     	/**
    @@ -974,12 +1030,11 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     	 */
     	function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
     	{
    -		global $langs,$conf,$mysoc;
    +		global $langs, $conf, $mysoc;
    +
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "orders", "companies", "bills"));
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("orders");
    -		$outputlangs->load("companies");
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
     		// Do not add the BACKGROUND as this is for suppliers
    @@ -1192,5 +1247,4 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'SUPPLIER_INVOICE_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    diff --git a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php
    index a39e7d004be..4b599a1f769 100644
    --- a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php
    +++ b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_muguet.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,10 +31,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_order/modules_commandefo
      */
     class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Muguet';
    -	var $prefix='CF';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Muguet';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Muguet';
    +
    +	public $prefix='CF';
     
     
     	/**
    @@ -143,6 +163,7 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Renvoie la reference de commande suivante non utilisee
          *
    @@ -152,7 +173,7 @@ class mod_commande_fournisseur_muguet extends ModeleNumRefSuppliersOrders
          */
         function commande_get_num($objsoc=0,$object='')
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$object);
         }
     }
    -
    diff --git a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_orchidee.php b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_orchidee.php
    index 37b8adab22e..3c8af4cd5a0 100644
    --- a/htdocs/core/modules/supplier_order/mod_commande_fournisseur_orchidee.php
    +++ b/htdocs/core/modules/supplier_order/mod_commande_fournisseur_orchidee.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,9 +32,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_order/modules_commandefo
      */
     class mod_commande_fournisseur_orchidee extends ModeleNumRefSuppliersOrders
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Orchidee';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Orchidee';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Orchidee';
     
     
         /**
    @@ -44,10 +63,10 @@ class mod_commande_fournisseur_orchidee extends ModeleNumRefSuppliersOrders
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
    -		$langs->load("bills");
    -		$langs->load("admin");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("bills","admin"));
     
     		$form = new Form($this->db);
     
    @@ -127,6 +146,7 @@ class mod_commande_fournisseur_orchidee extends ModeleNumRefSuppliersOrders
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Renvoie la reference de commande suivante non utilisee
          *
    @@ -136,7 +156,7 @@ class mod_commande_fournisseur_orchidee extends ModeleNumRefSuppliersOrders
          */
         function commande_get_num($objsoc=0,$object='')
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$object);
         }
     }
    -
    diff --git a/htdocs/core/modules/supplier_order/modules_commandefournisseur.php b/htdocs/core/modules/supplier_order/modules_commandefournisseur.php
    index 4bd262d67fb..7a6c7d4972d 100644
    --- a/htdocs/core/modules/supplier_order/modules_commandefournisseur.php
    +++ b/htdocs/core/modules/supplier_order/modules_commandefournisseur.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2005 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
      * Copyright (C) 2011-2016 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
    @@ -37,9 +37,13 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';	// requir
      */
     abstract class ModelePDFSuppliersOrders extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation models
     	 *
    @@ -49,6 +53,7 @@ abstract class ModelePDFSuppliersOrders extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +		// phpcs:enable
     		global $conf;
     
     		$type='order_supplier';
    @@ -59,7 +64,6 @@ abstract class ModelePDFSuppliersOrders extends CommonDocGenerator
     
     		return $liste;
     	}
    -
     }
     
     
    @@ -69,7 +73,10 @@ abstract class ModelePDFSuppliersOrders extends CommonDocGenerator
      */
     abstract class ModeleNumRefSuppliersOrders
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**  Return if a model can be used or not
     	 *
    diff --git a/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php b/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php
    index 63f10111529..e89a5afa801 100644
    --- a/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php
    +++ b/htdocs/core/modules/supplier_order/pdf/pdf_muscadet.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2014 Laurent Destailleur   <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
      * Copyright (C) 2010-2014 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    @@ -41,23 +41,78 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
      */
     class pdf_muscadet extends ModelePDFSuppliersOrders
     {
    -    var $db;
    -    var $name;
    -    var $description;
    -    var $type;
    +    /**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
     
    -    var $phpmin = array(4,3,0); // Minimum version of PHP required by module
    -    var $version = 'dolibarr';
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
     
    -    var $page_largeur;
    -    var $page_hauteur;
    -    var $format;
    -	var $marge_gauche;
    -	var	$marge_droite;
    -	var	$marge_haute;
    -	var	$marge_basse;
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
     
    -	var $emetteur;	// Objet societe qui emet
    +    /**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +    /**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Company object that emits
    +	 */
    +	public $emetteur;
     
     
     	/**
    @@ -67,9 +122,9 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		// Translations
    +		// Load translation files required by the page
     		$langs->loadLangs(array("main", "bills"));
     
     		$this->db = $db;
    @@ -142,6 +197,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Function to build pdf onto disk
          *
    @@ -155,18 +211,15 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
          */
     	function write_file($object,$outputlangs='',$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$hookmanager,$mysoc,$nblignes;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("products");
    -		$outputlangs->load("orders");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "orders", "companies", "bills", "dict", "products"));
     
     		$nblignes = count($object->lines);
     
    @@ -238,7 +291,6 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     					$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
     					return 0;
     				}
    -
     			}
     
     			if (file_exists($dir))
    @@ -650,6 +702,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show payments table
     	 *
    @@ -661,10 +714,11 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     	 */
     	function _tableau_versements(&$pdf, $object, $posy, $outputlangs)
     	{
    -
    +        // phpcs:enable
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Show miscellaneous information (payment mode, payment term, ...)
     	 *
    @@ -676,6 +730,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     	 */
     	function _tableau_info(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     	    global $conf;
     	    $default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -728,10 +783,11 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     		return $posy;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *	Show total to pay
    +	 *  Show total to pay
     	 *
    -	 *	@param	PDF			$pdf           Object PDF
    +	 *  @param	PDF			$pdf           Object PDF
     	 *	@param  Facture		$object         Object invoice
     	 *	@param  int			$deja_regle     Montant deja regle
     	 *	@param	int			$posy			Position depart
    @@ -740,6 +796,7 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     	 */
     	function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf,$mysoc;
     
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
    @@ -1065,13 +1122,10 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     	 */
     	function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
     	{
    -		global $langs,$conf,$mysoc;
    +		global $langs, $conf, $mysoc;
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("orders");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("sendings");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "orders", "companies", "bills", "sendings"));
     
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -1317,5 +1371,4 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'SUPPLIER_ORDER_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    diff --git a/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php b/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php
    index f9567a32a5c..2a31f265097 100644
    --- a/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php
    +++ b/htdocs/core/modules/supplier_payment/doc/pdf_standard.modules.php
    @@ -38,23 +38,78 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functionsnumtoword.lib.php';
      */
     class pdf_standard extends ModelePDFSuppliersPayments
     {
    -    var $db;
    -    var $name;
    -    var $description;
    -    var $type;
    +    /**
    +     * @var DoliDb Database handler
    +     */
    +    public $db;
     
    -    var $phpmin = array(4,3,0); // Minimum version of PHP required by module
    -    var $version = 'dolibarr';
    +	/**
    +     * @var string model name
    +     */
    +    public $name;
     
    -    var $page_largeur;
    -    var $page_hauteur;
    -    var $format;
    -	var $marge_gauche;
    -	var	$marge_droite;
    -	var	$marge_haute;
    -	var	$marge_basse;
    +	/**
    +     * @var string model description (short text)
    +     */
    +    public $description;
     
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +     * @var string document type
    +     */
    +    public $type;
    +
    +    /**
    +     * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +     */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';
    +
    +	/**
    +     * @var int page_largeur
    +     */
    +    public $page_largeur;
    +
    +	/**
    +     * @var int page_hauteur
    +     */
    +    public $page_hauteur;
    +
    +	/**
    +     * @var array format
    +     */
    +    public $format;
    +
    +	/**
    +     * @var int marge_gauche
    +     */
    +	public $marge_gauche;
    +
    +	/**
    +     * @var int marge_droite
    +     */
    +	public $marge_droite;
    +
    +	/**
    +     * @var int marge_haute
    +     */
    +	public $marge_haute;
    +
    +	/**
    +     * @var int marge_basse
    +     */
    +	public $marge_basse;
    +
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
     
     	/**
    @@ -64,9 +119,9 @@ class pdf_standard extends ModelePDFSuppliersPayments
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    -		
    -		// Translations
    +		global $conf, $langs, $mysoc;
    +
    +		// Load translation files required by the page
     		$langs->loadLangs(array("main", "bills"));
     
     		$this->db = $db;
    @@ -121,7 +176,8 @@ class pdf_standard extends ModelePDFSuppliersPayments
     	}
     
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Function to build pdf onto disk
          *
          *  @param		PaiementFourn		$object				Id of object to generate
    @@ -131,21 +187,19 @@ class pdf_standard extends ModelePDFSuppliersPayments
          *  @param		int					$hidedesc			Do not show desc
          *  @param		int					$hideref			Do not show ref
          *  @return		int										1=OK, 0=KO
    -	 */
    +     */
     	function write_file($object, $outputlangs='', $srctemplatepath='', $hidedetails=0, $hidedesc=0, $hideref=0)
     	{
    -		global $user,$langs,$conf,$mysoc,$hookmanager;
    +        // phpcs:enable
    +		global $user, $langs, $conf, $mysoc, $hookmanager;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("products");
    -		$outputlangs->load("suppliers");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "suppliers", "companies", "bills", "dict", "products"));
    +
     		$object->factures = array();
     
     		if ($conf->fournisseur->payment->dir_output)
    @@ -457,6 +511,7 @@ class pdf_standard extends ModelePDFSuppliersPayments
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show total to pay
     	 *
    @@ -468,6 +523,7 @@ class pdf_standard extends ModelePDFSuppliersPayments
     	 */
     	function _tableau_cheque(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf,$mysoc;
     
             $default_font_size = pdf_getPDFFontSize($outputlangs);
    @@ -512,7 +568,6 @@ class pdf_standard extends ModelePDFSuppliersPayments
     		// Date
     		$pdf->SetXY($this->page_largeur - $this->marge_droite - 30, $posy);
     		$pdf->MultiCell(150, 4, date("d").' '.$outputlangs->transnoentitiesnoconv(date("F")).' '.date("Y"), 0, 'L', 1);
    -
     	}
     
     
    @@ -558,7 +613,6 @@ class pdf_standard extends ModelePDFSuppliersPayments
     
     		// Output Rect
     		//$this->printRect($pdf,$this->marge_gauche, $tab_top, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $tab_height, $hidetop, $hidebottom);	// Rect prend une longueur en 3eme param et 4eme param
    -
     	}
     
     
    @@ -573,12 +627,11 @@ class pdf_standard extends ModelePDFSuppliersPayments
     	 */
     	function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
     	{
    -		global $langs,$conf,$mysoc;
    +		global $langs, $conf, $mysoc;
    +
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "orders", "companies", "bills"));
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("bills");
    -		$outputlangs->load("orders");
    -		$outputlangs->load("companies");
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
     		// Do not add the BACKGROUND as this is for suppliers
    @@ -757,6 +810,4 @@ class pdf_standard extends ModelePDFSuppliersPayments
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'SUPPLIER_INVOICE_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/supplier_payment/mod_supplier_payment_brodator.php b/htdocs/core/modules/supplier_payment/mod_supplier_payment_brodator.php
    index 97c7b077b22..216bc4bde90 100644
    --- a/htdocs/core/modules/supplier_payment/mod_supplier_payment_brodator.php
    +++ b/htdocs/core/modules/supplier_payment/mod_supplier_payment_brodator.php
    @@ -30,9 +30,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_payment/modules_supplier
      */
     class mod_supplier_payment_brodator extends ModeleNumRefSupplierPayments
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Brodator';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Brodator';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Brodator';
     
     
         /**
    @@ -42,7 +61,7 @@ class mod_supplier_payment_brodator extends ModeleNumRefSupplierPayments
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    @@ -124,6 +143,7 @@ class mod_supplier_payment_brodator extends ModeleNumRefSupplierPayments
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
    @@ -133,8 +153,7 @@ class mod_supplier_payment_brodator extends ModeleNumRefSupplierPayments
          */
         function commande_get_num($objsoc,$objforref)
         {
    +        // phpcs:enable
             return $this->getNextValue($objsoc,$objforref);
         }
    -
     }
    -
    diff --git a/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php b/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php
    index 9b0012ec089..0d64991065a 100644
    --- a/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php
    +++ b/htdocs/core/modules/supplier_payment/mod_supplier_payment_bronan.php
    @@ -29,10 +29,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_payment/modules_supplier
      */
     class mod_supplier_payment_bronan extends ModeleNumRefSupplierPayments
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefix='SPAY';
    -	var $error='';
    -	var $nom='Bronan';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='SPAY';
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Bronan';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Bronan';
     
     
         /**
    @@ -135,6 +155,7 @@ class mod_supplier_payment_bronan extends ModeleNumRefSupplierPayments
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return next free value
     	 *
    @@ -144,7 +165,7 @@ class mod_supplier_payment_bronan extends ModeleNumRefSupplierPayments
     	 */
     	function payment_get_num($objsoc,$objforref)
     	{
    +        // phpcs:enable
     		return $this->getNextValue($objsoc,$objforref);
     	}
    -
     }
    diff --git a/htdocs/core/modules/supplier_payment/modules_supplier_payment.php b/htdocs/core/modules/supplier_payment/modules_supplier_payment.php
    index 56c5bd94ae0..8eb706dc0ce 100644
    --- a/htdocs/core/modules/supplier_payment/modules_supplier_payment.php
    +++ b/htdocs/core/modules/supplier_payment/modules_supplier_payment.php
    @@ -22,18 +22,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
      */
     abstract class ModelePDFSuppliersPayments extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of active generation models
     	 *
          *  @param	DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of numbers
    -	 */
    +     */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='supplier_payment';
    @@ -44,7 +49,6 @@ abstract class ModelePDFSuppliersPayments extends CommonDocGenerator
     
     		return $liste;
     	}
    -
     }
     
     /**
    @@ -54,7 +58,10 @@ abstract class ModelePDFSuppliersPayments extends CommonDocGenerator
     
     abstract class ModeleNumRefSupplierPayments
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 *	Return if a module can be used or not
    diff --git a/htdocs/core/modules/supplier_proposal/doc/doc_generic_supplier_proposal_odt.modules.php b/htdocs/core/modules/supplier_proposal/doc/doc_generic_supplier_proposal_odt.modules.php
    index a8497416501..05bfe535ac7 100644
    --- a/htdocs/core/modules/supplier_proposal/doc/doc_generic_supplier_proposal_odt.modules.php
    +++ b/htdocs/core/modules/supplier_proposal/doc/doc_generic_supplier_proposal_odt.modules.php
    @@ -2,6 +2,7 @@
     /* Copyright (C) 2010-2012 	Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
    @@ -37,10 +38,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +   * Dolibarr version of the loaded document
    +   * @public string
    +   */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -50,10 +64,10 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -95,10 +109,10 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     	 */
     	function info($langs)
     	{
    -		global $conf,$langs;
    +		global $conf, $langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array('companies', 'errors'));
     
     		$form = new Form($this->db);
     
    @@ -207,6 +221,7 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -220,7 +235,8 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    -		global $user,$langs,$conf,$mysoc,$hookmanager;
    +        // phpcs:enable
    +		global $user, $langs, $conf, $mysoc, $hookmanager;
     
     		if (empty($srctemplatepath))
     		{
    @@ -241,10 +257,8 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "companies", "bills", "dict"));
     
     		if ($conf->supplier_proposal->dir_output)
     		{
    @@ -354,16 +368,17 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     					$odfHandler = new odf(
     						$srctemplatepath,
     						array(
    -						'PATH_TO_TMP'	  => $conf->supplier_proposal->dir_temp,
    -						'ZIP_PROXY'		  => 'PclZipProxy',	// PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
    -						'DELIMITER_LEFT'  => '{',
    -						'DELIMITER_RIGHT' => '}'
    +							'PATH_TO_TMP'	  => $conf->supplier_proposal->dir_temp,
    +							'ZIP_PROXY'		  => 'PclZipProxy',	// PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
    +							'DELIMITER_LEFT'  => '{',
    +							'DELIMITER_RIGHT' => '}'
     						)
     					);
     				}
    -				catch(Exception $e)
    +				catch (Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_INFO);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -377,8 +392,9 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     				try {
     					$odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
     				}
    -				catch(OdfException $e)
    +				catch (OdfException $e)
     				{
    +					dol_syslog($e->getMessage(), LOG_INFO);
     				}
     
     				// Define substitution array
    @@ -411,6 +427,7 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     				// Replace tags of lines
    @@ -443,9 +460,11 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     								}
     								catch(OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     								catch(SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_INFO);
     								}
     							}
     							$listlines->merge();
    @@ -469,6 +488,7 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     					}
     					catch(OdfException $e)
     					{
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     					}
     				}
     
    @@ -480,16 +500,18 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
     				else {
     					try {
    -					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +						$odfHandler->saveToDisk($file);
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +                        dol_syslog($e->getMessage(), LOG_INFO);
     						return -1;
     					}
     				}
    @@ -514,6 +536,4 @@ class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
     
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php
    index bca4ae8425f..525fdca1d59 100644
    --- a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php
    +++ b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand     <raphael.bertrand@resultic.fr>
      * Copyright (C) 2010-2014 Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2012      Christophe Battarel   <christophe.battarel@altairis.fr>
    @@ -42,17 +42,17 @@ class pdf_aurore extends ModelePDFSupplierProposal
          * @var DoliDb Database handler
          */
         public $db;
    -	
    +
     	/**
          * @var string model name
          */
         public $name;
    -	
    +
     	/**
          * @var string model description (short text)
          */
         public $description;
    -	
    +
     	/**
          * @var string document type
          */
    @@ -60,10 +60,10 @@ class pdf_aurore extends ModelePDFSupplierProposal
     
     	/**
          * @var array() Minimum version of PHP required by module.
    -	 * e.g.: PHP ≥ 5.3 = array(5, 3)
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
          */
    -	public $phpmin = array(5, 2); 
    -	
    +	public $phpmin = array(5, 4);
    +
     	/**
          * Dolibarr version of the loaded document
          * @public string
    @@ -74,32 +74,32 @@ class pdf_aurore extends ModelePDFSupplierProposal
          * @var int page_largeur
          */
         public $page_largeur;
    -	
    +
     	/**
          * @var int page_hauteur
          */
         public $page_hauteur;
    -	
    +
     	/**
          * @var array format
          */
         public $format;
    -	
    +
     	/**
          * @var int marge_gauche
          */
     	public $marge_gauche;
    -	
    +
     	/**
          * @var int marge_droite
          */
     	public $marge_droite;
    -	
    +
     	/**
          * @var int marge_haute
          */
     	public $marge_haute;
    -	
    +
     	/**
          * @var int marge_basse
          */
    @@ -120,7 +120,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     	public function __construct($db)
     	{
     		global $conf, $langs, $mysoc;
    -		
    +
     		// Translations
     		$langs->loadLangs(array("main", "bills"));
     
    @@ -160,7 +160,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     		$this->posxdesc=$this->marge_gauche+1;
     		$this->posxdiscount=162;
     		$this->postotalht=174;
    -		
    +
     		if ($conf->global->PRODUCT_USE_UNITS)
     		{
     		    $this->posxtva=101;
    @@ -172,7 +172,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     		    $this->posxup=126;
     		    $this->posxqty=145;
     		}
    -		
    +
     		if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT) || ! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT_COLUMN)) $this->posxup=$this->posxtva;
     		$this->posxpicture=$this->posxtva - (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH)?20:$conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH);	// width of images
     		if ($this->page_largeur < 210) // To work with US executive format
    @@ -193,7 +193,8 @@ class pdf_aurore extends ModelePDFSupplierProposal
     		$this->atleastonediscount=0;
     	}
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Function to build pdf onto disk
          *
          *  @param		Object		$object				Object to generate
    @@ -206,13 +207,14 @@ class pdf_aurore extends ModelePDFSupplierProposal
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    +        // phpcs:enable
     		global $user,$langs,$conf,$mysoc,$db,$hookmanager,$nblignes;
     
     		if (! is_object($outputlangs)) $outputlangs=$langs;
     		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
     		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';
    -		
    -		// Translations
    +
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "dict", "companies", "bills", "products", "supplier_proposal"));
     
     		$nblignes = count($object->lines);
    @@ -375,7 +377,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     				{
     					$tab_top -= 2;
     
    -          $substitutionarray=pdf_getSubstitutionArray($outputlangs, null, $object);
    +                    $substitutionarray=pdf_getSubstitutionArray($outputlangs, null, $object);
     					complete_substitutions_array($substitutionarray, $outputlangs, $object);
     					$notetoshow = make_substitutions($notetoshow, $substitutionarray, $outputlangs);
     
    @@ -524,7 +526,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     					{
     					    $pdf->MultiCell($this->posxdiscount-$this->posxqty-0.8, 3, $qty, 0, 'R');
     					}
    -					
    +
     					// Unit
     					if($conf->global->PRODUCT_USE_UNITS)
     					{
    @@ -696,6 +698,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Show payments table
     	 *
    @@ -707,10 +710,11 @@ class pdf_aurore extends ModelePDFSupplierProposal
     	 */
     	function _tableau_versements(&$pdf, $object, $posy, $outputlangs)
     	{
    -
    +        // phpcs:enable
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Show miscellaneous information (payment mode, payment term, ...)
     	 *
    @@ -722,6 +726,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     	 */
     	function _tableau_info(&$pdf, $object, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -877,6 +882,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Show total to pay
     	 *
    @@ -889,6 +895,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     	 */
     	function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs)
     	{
    +        // phpcs:enable
     		global $conf,$mysoc;
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
     
    @@ -990,7 +997,6 @@ class pdf_aurore extends ModelePDFSupplierProposal
     
     								$pdf->SetXY($col2x, $tab2_top + $tab2_hl * $index);
     								$pdf->MultiCell($largcol2, $tab2_hl, price($tvaval, 0, $outputlangs), 0, 'R', 1);
    -
     							}
     						}
     					}
    @@ -1232,7 +1238,7 @@ class pdf_aurore extends ModelePDFSupplierProposal
     		        $pdf->MultiCell($this->posxdiscount-$this->posxqty-1,2, $outputlangs->transnoentities("Qty"),'','C');
     		    }
     		}
    -		
    +
     		if($conf->global->PRODUCT_USE_UNITS) {
     		    $pdf->line($this->posxunit - 1, $tab_top, $this->posxunit - 1, $tab_top + $tab_height);
     		    if (empty($hidetop)) {
    @@ -1273,9 +1279,9 @@ class pdf_aurore extends ModelePDFSupplierProposal
     	 */
     	function _pagehead(&$pdf, $object, $showaddress, $outputlangs)
     	{
    -		global $conf,$langs;
    -		
    -		// Translations
    +		global $conf, $langs;
    +
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array("main", "bills", "supplier_proposal", "companies"));
     
     		$default_font_size = pdf_getPDFFontSize($outputlangs);
    @@ -1494,6 +1500,4 @@ class pdf_aurore extends ModelePDFSupplierProposal
     		$showdetails=$conf->global->MAIN_GENERATE_DOCUMENTS_SHOW_FOOT_DETAILS;
     		return pdf_pagefoot($pdf,$outputlangs,'SUPPLIER_PROPOSAL_FREE_TEXT',$this->emetteur,$this->marge_basse,$this->marge_gauche,$this->page_hauteur,$object,$showdetails,$hidefreetext);
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php
    index fa8cf6c6460..847eb49958d 100644
    --- a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php
    +++ b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_marbre.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,10 +31,30 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_proposal/modules_supplie
      */
     class mod_supplier_proposal_marbre extends ModeleNumRefSupplierProposal
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $prefix='RQ';               // RQ = Request for quotation
    -	var $error='';
    -	var $nom = "Marbre";
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	public $prefix='RQ';               // RQ = Request for quotation
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Marbre';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Marbre';
     
     
         /**
    @@ -149,5 +169,4 @@ class mod_supplier_proposal_marbre extends ModeleNumRefSupplierProposal
     	{
     		return $this->getNextValue($objsoc,$objforref);
     	}
    -
     }
    diff --git a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_saphir.php b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_saphir.php
    index 8781628917f..fdbd9f1f90d 100644
    --- a/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_saphir.php
    +++ b/htdocs/core/modules/supplier_proposal/mod_supplier_proposal_saphir.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville        <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur         <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin               <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin               <regis.houssin@inodbox.com>
      * Copyright (C) 2008      Raphael Bertrand (Resultic) <raphael.bertrand@resultic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -33,9 +33,28 @@ require_once DOL_DOCUMENT_ROOT .'/core/modules/supplier_proposal/modules_supplie
      */
     class mod_supplier_proposal_saphir extends ModeleNumRefSupplierProposal
     {
    -	var $version='dolibarr';		// 'development', 'experimental', 'dolibarr'
    -	var $error = '';
    -	var $nom = 'Saphir';
    +	/**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr';		// 'development', 'experimental', 'dolibarr'
    +
    +	/**
    +     * @var string Error code (or message)
    +     */
    +    public $error = '';
    +
    +	/**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Saphir';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Saphir';
     
     
         /**
    @@ -45,7 +64,7 @@ class mod_supplier_proposal_saphir extends ModeleNumRefSupplierProposal
          */
     	function info()
         {
    -    	global $conf,$langs;
    +    	global $conf, $langs;
     
     		$langs->load("bills");
     
    @@ -127,5 +146,4 @@ class mod_supplier_proposal_saphir extends ModeleNumRefSupplierProposal
     
     		return  $numFinal;
     	}
    -
     }
    diff --git a/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php b/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php
    index b324a1b03a8..b96dc2c4e12 100644
    --- a/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php
    +++ b/htdocs/core/modules/supplier_proposal/modules_supplier_proposal.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
      *
    @@ -36,18 +36,23 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';   // Requ
      */
     abstract class ModelePDFSupplierProposal extends CommonDocGenerator
     {
    -	var $error='';
    -
    -
     	/**
    -	 *  Return list of active generation modules
    -	 *
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return list of active generation modules
    +     *
          *  @param	DoliDB	$db     			Database handler
          *  @param  integer	$maxfilenamelength  Max length of value to show
          *  @return	array						List of templates
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='supplier_proposal';
    @@ -66,7 +71,10 @@ abstract class ModelePDFSupplierProposal extends CommonDocGenerator
      */
     abstract class ModeleNumRefSupplierProposal
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	/**
     	 * Return if a module can be used or not
    diff --git a/htdocs/core/modules/syslog/mod_syslog_chromephp.php b/htdocs/core/modules/syslog/mod_syslog_chromephp.php
    index a9b9ccd5836..2617cdb269d 100644
    --- a/htdocs/core/modules/syslog/mod_syslog_chromephp.php
    +++ b/htdocs/core/modules/syslog/mod_syslog_chromephp.php
    @@ -66,8 +66,8 @@ class mod_syslog_chromephp extends LogHandler implements LogHandlerInterface
     			}
     			set_include_path($conf->global->SYSLOG_CHROMEPHP_INCLUDEPATH);
     
    -		    $res = @include_once('ChromePhp.php');
    -		    if (! $res) $res=@include_once('ChromePhp.class.php');
    +		    $res = @include_once 'ChromePhp.php';
    +		    if (! $res) $res=@include_once 'ChromePhp.class.php';
     
     		    restore_include_path();
     
    @@ -121,13 +121,14 @@ class mod_syslog_chromephp extends LogHandler implements LogHandlerInterface
     
     		if (! file_exists($conf->global->SYSLOG_CHROMEPHP_INCLUDEPATH.'/ChromePhp.php') && ! file_exists($conf->global->SYSLOG_CHROMEPHP_INCLUDEPATH.'/ChromePhp.class.php'))
     		{
    +			$conf->global->MAIN_SYSLOG_DISABLE_CHROMEPHP = 1; // avoid infinite loop
     			if (is_object($langs))   // $langs may not be defined yet.
     			{
    -			    $errors[] = $langs->trans("ErrorFailedToOpenFile", 'ChromePhp.class.php or ChromePhp.php');
    +				$errors[] = $langs->trans("ErrorFailedToOpenFile", 'ChromePhp.class.php or ChromePhp.php');
     			}
     			else
     			{
    -		        $errors[] = "ErrorFailedToOpenFile ChromePhp.class.php or ChromePhp.php";
    +				$errors[] = "ErrorFailedToOpenFile ChromePhp.class.php or ChromePhp.php";
     			}
     		}
     
    @@ -151,12 +152,12 @@ class mod_syslog_chromephp extends LogHandler implements LogHandlerInterface
     
     		try
     		{
    -			// Warning ChromePHP must be into PHP include path. It is not possible to use into require_once() a constant from
    +			// Warning ChromePHP must be into PHP include path. It is not possible to use into require_once a constant from
     			// database or config file because we must be able to log data before database or config file read.
     			$oldinclude=get_include_path();
     			set_include_path($conf->global->SYSLOG_CHROMEPHP_INCLUDEPATH);
    -		    $res = @include_once('ChromePhp.php');
    -		    if (! $res) $res=@include_once('ChromePhp.class.php');
    +		    $res = @include_once 'ChromePhp.php';
    +		    if (! $res) $res=@include_once 'ChromePhp.class.php';
     			set_include_path($oldinclude);
     			
     			ob_start();	// To be sure headers are not flushed until all page is completely processed
    diff --git a/htdocs/core/modules/syslog/mod_syslog_firephp.php b/htdocs/core/modules/syslog/mod_syslog_firephp.php
    index 69bc98230af..abc341f9a30 100644
    --- a/htdocs/core/modules/syslog/mod_syslog_firephp.php
    +++ b/htdocs/core/modules/syslog/mod_syslog_firephp.php
    @@ -122,7 +122,15 @@ class mod_syslog_firephp extends LogHandler implements LogHandlerInterface
     
     		if (!file_exists($conf->global->SYSLOG_FIREPHP_INCLUDEPATH . self::$firephp_class_path))
     		{
    -			$errors[] = $langs->trans("ErrorFailedToOpenFile", self::$firephp_class_path);
    +			$conf->global->MAIN_SYSLOG_DISABLE_FIREPHP = 1; // avoid infinite loop
    +			if (is_object($langs))   // $langs may not be defined yet.
    +			{
    +				$errors[] = $langs->trans("ErrorFailedToOpenFile", self::$firephp_class_path);
    +			}
    +			else
    +			{
    +				$errors[] = "ErrorFailedToOpenFile " . self::$firephp_class_path;
    +			}
     		}
     
     		return $errors;
    @@ -145,7 +153,7 @@ class mod_syslog_firephp extends LogHandler implements LogHandlerInterface
     
     		try
     		{
    -			// Warning FirePHPCore must be into PHP include path. It is not possible to use into require_once() a constant from
    +			// Warning FirePHPCore must be into PHP include path. It is not possible to use into require_once a constant from
     			// database or config file because we must be able to log data before database or config file read.
     			$oldinclude=get_include_path();
     			set_include_path($conf->global->SYSLOG_FIREPHP_INCLUDEPATH);
    diff --git a/htdocs/core/modules/ticket/mod_ticket_simple.php b/htdocs/core/modules/ticket/mod_ticket_simple.php
    index b70b9babd05..d121748c285 100644
    --- a/htdocs/core/modules/ticket/mod_ticket_simple.php
    +++ b/htdocs/core/modules/ticket/mod_ticket_simple.php
    @@ -1,6 +1,6 @@
     <?php
    -/* Copyright (C) 2010-2012    Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2010        Laurent Destailleur    <eldy@users.sourceforge.net>
    +/* Copyright (C) 2010-2012   Regis Houssin        <regis.houssin@inodbox.com>
    + * Copyright (C) 2010        Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,11 +30,30 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/ticket/modules_ticket.php';
      */
     class mod_ticket_simple extends ModeleNumRefTicket
     {
    -    public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
    +    /**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
    +	public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
    +
         public $prefix = 'TS';
    +
    +    /**
    +     * @var string Error code (or message)
    +     */
         public $error = '';
    -    public $nom = "Simple";
    -    public $name = "Simple";
    +
    +    /**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Simple';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Simple';
     
         /**
          *  Return description of numbering module
    @@ -140,5 +159,4 @@ class mod_ticket_simple extends ModeleNumRefTicket
             dol_syslog("mod_ticket_simple::getNextValue return " . $this->prefix . $yymm . "-" . $num);
             return $this->prefix . $yymm . "-" . $num;
         }
    -
     }
    diff --git a/htdocs/core/modules/ticket/mod_ticket_universal.php b/htdocs/core/modules/ticket/mod_ticket_universal.php
    index 2d521f18a5b..e9e89cf4b45 100644
    --- a/htdocs/core/modules/ticket/mod_ticket_universal.php
    +++ b/htdocs/core/modules/ticket/mod_ticket_universal.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,10 +29,28 @@ require_once DOL_DOCUMENT_ROOT.'/core/modules/ticket/modules_ticket.php';
      */
     class mod_ticket_universal extends ModeleNumRefTicket
     {
    +    /**
    +     * Dolibarr version of the loaded document
    +     * @public string
    +     */
         public $version = 'dolibarr'; // 'development', 'experimental', 'dolibarr'
    +
    +    /**
    +     * @var string Error code (or message)
    +     */
         public $error = '';
    -    public $nom = 'Universal';
    -    public $name = 'Universal';
    +
    +    /**
    +	 * @var string Nom du modele
    +	 * @deprecated
    +	 * @see name
    +	 */
    +	public $nom='Universal';
    +
    +	/**
    +	 * @var string model name
    +	 */
    +	public $name='Universal';
     
         /**
          *  Renvoi la description du modele de numerotation
    @@ -43,8 +61,8 @@ class mod_ticket_universal extends ModeleNumRefTicket
         {
             global $conf, $langs;
     
    -        $langs->load("ticket");
    -        $langs->load("admin");
    +        // Load translation files required by the page
    +        $langs->loadLangs(array("ticket","admin"));
     
             $form = new Form($this->db);
     
    @@ -121,5 +139,4 @@ class mod_ticket_universal extends ModeleNumRefTicket
     
             return $numFinal;
         }
    -
     }
    diff --git a/htdocs/core/modules/ticket/modules_ticket.php b/htdocs/core/modules/ticket/modules_ticket.php
    index d6f8b06d0e8..b66eb30422f 100644
    --- a/htdocs/core/modules/ticket/modules_ticket.php
    +++ b/htdocs/core/modules/ticket/modules_ticket.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2014    Regis Houssin    <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2014    Regis Houssin    <regis.houssin@inodbox.com>
      * Copyright (C) 2014       Marcos García   <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -29,6 +29,9 @@
      */
     abstract class ModeleNumRefTicket
     {
    +    /**
    +     * @var string Error code (or message)
    +     */
         public $error = '';
     
         /**
    diff --git a/htdocs/core/modules/user/doc/doc_generic_user_odt.modules.php b/htdocs/core/modules/user/doc/doc_generic_user_odt.modules.php
    index dabe1bd99a3..28eaf77d30b 100644
    --- a/htdocs/core/modules/user/doc/doc_generic_user_odt.modules.php
    +++ b/htdocs/core/modules/user/doc/doc_generic_user_odt.modules.php
    @@ -1,6 +1,7 @@
     <?php
     /* Copyright (C) 2010-2012 	Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
    @@ -35,10 +36,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_user_odt extends ModelePDFUser
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +   * Dolibarr version of the loaded document
    +   * @public string
    +   */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -48,10 +62,10 @@ class doc_generic_user_odt extends ModelePDFUser
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +    $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -93,10 +107,10 @@ class doc_generic_user_odt extends ModelePDFUser
     	 */
     	function info($langs)
     	{
    -		global $conf,$langs;
    +		global $conf, $langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array('companies', 'errors'));
     
     		$form = new Form($this->db);
     
    @@ -190,6 +204,7 @@ class doc_generic_user_odt extends ModelePDFUser
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -203,7 +218,8 @@ class doc_generic_user_odt extends ModelePDFUser
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    -		global $user,$langs,$conf,$mysoc,$hookmanager;
    +        // phpcs:enable
    +		global $user, $langs, $conf, $mysoc, $hookmanager;
     
     		if (empty($srctemplatepath))
     		{
    @@ -224,10 +240,8 @@ class doc_generic_user_odt extends ModelePDFUser
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "companies", "bills", "dict"));
     
     		if ($conf->user->dir_output)
     		{
    @@ -320,16 +334,17 @@ class doc_generic_user_odt extends ModelePDFUser
     					$odfHandler = new odf(
     						$srctemplatepath,
     						array(
    -						'PATH_TO_TMP'	  => $conf->user->dir_temp,
    -						'ZIP_PROXY'		  => 'PclZipProxy',	// PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
    -						'DELIMITER_LEFT'  => '{',
    -						'DELIMITER_RIGHT' => '}'
    +							'PATH_TO_TMP'	  => $conf->user->dir_temp,
    +							'ZIP_PROXY'		  => 'PclZipProxy',	// PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
    +							'DELIMITER_LEFT'  => '{',
    +							'DELIMITER_RIGHT' => '}'
     						)
     					);
     				}
     				catch(Exception $e)
     				{
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_WARNING);
     					return -1;
     				}
     
    @@ -363,6 +378,7 @@ class doc_generic_user_odt extends ModelePDFUser
     					}
     					catch(OdfException $e)
     					{
    +						dol_syslog($e->getMessage(), LOG_WARNING);
     					}
     				}
     
    @@ -373,8 +389,9 @@ class doc_generic_user_odt extends ModelePDFUser
     					try {
     						$odfHandler->setVars($key, $value, true, 'UTF-8');
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +						dol_syslog($e->getMessage(), LOG_WARNING);
     					}
     				}
     
    @@ -386,16 +403,18 @@ class doc_generic_user_odt extends ModelePDFUser
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +						dol_syslog($e->getMessage(), LOG_WARNING);
     						return -1;
     					}
     				}
     				else {
     					try {
    -					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +						$odfHandler->saveToDisk($file);
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +						dol_syslog($e->getMessage(), LOG_WARNING);
     						return -1;
     					}
     				}
    @@ -421,8 +440,19 @@ class doc_generic_user_odt extends ModelePDFUser
     		return -1;
     	}
     
    -	function get_substitutionarray_object($object,$outputlangs,$array_key='object') {
    -		$array_other=array();
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * get substitution array for object
    +     *
    +     * @param User          $object         user
    +     * @param Translate     $outputlangs    translation object
    +     * @param string        $array_key      key for array
    +     * @return array                        array of substitutions
    +     */
    +    function get_substitutionarray_object($object,$outputlangs,$array_key='object')
    +    {
    +        // phpcs:enable
    +		$array_other = array();
     		foreach($object as $key => $value) {
     			if (!is_array($value) && !is_object($value)) {
     				$array_other[$array_key.'_'.$key] = $value;
    @@ -430,6 +460,4 @@ class doc_generic_user_odt extends ModelePDFUser
     		}
     		return $array_other;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/user/modules_user.class.php b/htdocs/core/modules/user/modules_user.class.php
    index 3e94ece9372..3dc46707543 100644
    --- a/htdocs/core/modules/user/modules_user.class.php
    +++ b/htdocs/core/modules/user/modules_user.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,7 +24,7 @@
      *	    \class      ModeleProductCode
      *		\brief  	Parent class for product code generators
      */
    - 
    +
     /**
      *  \file       htdocs/core/modules/contract/modules_contract.php
      *  \ingroup    contract
    @@ -32,15 +32,19 @@
      */
     
      require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
    - 
    +
     /**
      *	Parent class to manage intervention document templates
      */
     abstract class ModelePDFUser extends CommonDocGenerator
     {
    -	var $error='';
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return list of active generation modules
     	 *
    @@ -50,6 +54,7 @@ abstract class ModelePDFUser extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$type='user';
    @@ -59,4 +64,4 @@ abstract class ModelePDFUser extends CommonDocGenerator
     		$liste=getListOfModels($db,$type,$maxfilenamelength);
     		return $liste;
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/core/modules/usergroup/doc/doc_generic_usergroup_odt.modules.php b/htdocs/core/modules/usergroup/doc/doc_generic_usergroup_odt.modules.php
    index 8f21bfc9ece..a00bec92c96 100644
    --- a/htdocs/core/modules/usergroup/doc/doc_generic_usergroup_odt.modules.php
    +++ b/htdocs/core/modules/usergroup/doc/doc_generic_usergroup_odt.modules.php
    @@ -1,6 +1,7 @@
     <?php
     /* Copyright (C) 2010-2012 	Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
    @@ -37,10 +38,23 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php';
      */
     class doc_generic_usergroup_odt extends ModelePDFUserGroup
     {
    -	var $emetteur;	// Objet societe qui emet
    +	/**
    +	 * Issuer
    +	 * @var Societe
    +	 */
    +	public $emetteur;
     
    -	var $phpmin = array(5,2,0);	// Minimum version of PHP required by module
    -	var $version = 'dolibarr';
    +	/**
    +   * @var array() Minimum version of PHP required by module.
    +	 * e.g.: PHP ≥ 5.4 = array(5, 4)
    +   */
    +	public $phpmin = array(5, 4);
    +
    +	/**
    +   * Dolibarr version of the loaded document
    +   * @public string
    +   */
    +	public $version = 'dolibarr';
     
     
     	/**
    @@ -50,10 +64,10 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     	 */
     	function __construct($db)
     	{
    -		global $conf,$langs,$mysoc;
    +		global $conf, $langs, $mysoc;
     
    -		$langs->load("main");
    -		$langs->load("companies");
    +		// Load translation files required by the page
    +    $langs->loadLangs(array("main","companies"));
     
     		$this->db = $db;
     		$this->name = "ODT templates";
    @@ -97,8 +111,8 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     	{
     		global $conf,$langs;
     
    -		$langs->load("companies");
    -		$langs->load("errors");
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("errors","companies"));
     
     		$form = new Form($this->db);
     
    @@ -192,6 +206,7 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     		return $texte;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Function to build a document on disk using the generic odt module.
     	 *
    @@ -205,7 +220,8 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     	 */
     	function write_file($object,$outputlangs,$srctemplatepath,$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
    -		global $user,$langs,$conf,$mysoc,$hookmanager;
    +        // phpcs:enable
    +		global $user, $langs, $conf, $mysoc, $hookmanager;
     
     		if (empty($srctemplatepath))
     		{
    @@ -226,10 +242,8 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     		$sav_charset_output=$outputlangs->charset_output;
     		$outputlangs->charset_output='UTF-8';
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("dict");
    -		$outputlangs->load("companies");
    -		$outputlangs->load("bills");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "companies", "bills", "dict"));
     
     		if ($conf->user->dir_output)
     		{
    @@ -342,16 +356,15 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     					$odfHandler = new odf(
     						$srctemplatepath,
     						array(
    -						'PATH_TO_TMP'	  => $conf->user->dir_temp,
    -						'ZIP_PROXY'		  => 'PclZipProxy',	// PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
    -						'DELIMITER_LEFT'  => '{',
    -						'DELIMITER_RIGHT' => '}'
    +							'PATH_TO_TMP'	  => $conf->user->dir_temp,
    +							'ZIP_PROXY'		  => 'PclZipProxy',	// PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
    +							'DELIMITER_LEFT'  => '{',
    +							'DELIMITER_RIGHT' => '}'
     						)
     					);
    -				}
    -				catch(Exception $e)
    -				{
    +				} catch (Exception $e) {
     					$this->error=$e->getMessage();
    +					dol_syslog($e->getMessage(), LOG_WARNING);
     					return -1;
     				}
     				// After construction $odfHandler->contentXml contains content and
    @@ -365,8 +378,9 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     				try {
     					$odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
     				}
    -				catch(OdfException $e)
    +				catch (OdfException $e)
     				{
    +					dol_syslog($e->getMessage(), LOG_WARNING);
     				}
     
     				// Make substitutions into odt
    @@ -400,8 +414,9 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     							$odfHandler->setVars($key, $value, true, 'UTF-8');
     						}
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +						dol_syslog($e->getMessage(), LOG_WARNING);
     					}
     				}
     				// Replace tags of lines
    @@ -411,7 +426,7 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     					try {
     						$listlines = $odfHandler->setSegment('lines');
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
     						// We may arrive here if tags for lines not present into template
     						$foundtagforlines = 0;
    @@ -432,15 +447,17 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     							{
     								try
     								{
    -									if(!is_array($val)) {
    +									if (!is_array($val)) {
     										$listlines->setVars($key, $val, true, 'UTF-8');
     									}
     								}
    -								catch(OdfException $e)
    +								catch (OdfException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_WARNING);
     								}
    -								catch(SegmentException $e)
    +								catch (SegmentException $e)
     								{
    +									dol_syslog($e->getMessage(), LOG_WARNING);
     								}
     							}
     							$listlines->merge();
    @@ -457,39 +474,42 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     
     				// Replace labels translated
     				$tmparray=$outputlangs->get_translations_for_substitutions();
    -				foreach($tmparray as $key=>$value)
    +				foreach($tmparray as $key => $value)
     				{
     					try {
     						$odfHandler->setVars($key, $value, true, 'UTF-8');
     					}
    -					catch(OdfException $e)
    +					catch (OdfException $e)
     					{
    +						dol_syslog($e->getMessage(), LOG_WARNING);
     					}
     				}
     
     				// Call the beforeODTSave hook
    -				$parameters=array('odfHandler'=>&$odfHandler,'file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs);
    -				$reshook=$hookmanager->executeHooks('beforeODTSave',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +				$parameters=array('odfHandler'=>&$odfHandler, 'file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs);
    +				$reshook=$hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
     
     				// Write new file
     				if (!empty($conf->global->MAIN_ODT_AS_PDF)) {
     					try {
     						$odfHandler->exportAsAttachedPDF($file);
    -					}catch (Exception $e){
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +						dol_syslog($e->getMessage(), LOG_WARNING);
     						return -1;
     					}
     				}
     				else {
     					try {
    -					$odfHandler->saveToDisk($file);
    -					}catch (Exception $e){
    +						$odfHandler->saveToDisk($file);
    +					} catch (Exception $e) {
     						$this->error=$e->getMessage();
    +						dol_syslog($e->getMessage(), LOG_WARNING);
     						return -1;
     					}
     				}
     
    -				$reshook=$hookmanager->executeHooks('afterODTCreation',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +				$reshook=$hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
     
     				if (! empty($conf->global->MAIN_UMASK))
     					@chmod($file, octdec($conf->global->MAIN_UMASK));
    @@ -509,6 +529,4 @@ class doc_generic_usergroup_odt extends ModelePDFUserGroup
     
     		return -1;
     	}
    -
     }
    -
    diff --git a/htdocs/core/modules/usergroup/modules_usergroup.class.php b/htdocs/core/modules/usergroup/modules_usergroup.class.php
    index 26edb08d57c..fc9648ab6e9 100644
    --- a/htdocs/core/modules/usergroup/modules_usergroup.class.php
    +++ b/htdocs/core/modules/usergroup/modules_usergroup.class.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,7 +24,7 @@
      *	    \class      ModeleProductCode
      *		\brief  	Parent class for product code generators
      */
    - 
    +
     /**
      *  \file       htdocs/core/modules/contract/modules_contract.php
      *  \ingroup    contract
    @@ -32,16 +32,20 @@
      */
     
      require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
    - 
    +
     /**
      *	Parent class to manage intervention document templates
      */
     abstract class ModelePDFUserGroup extends CommonDocGenerator
     {
    -	var $error='';
    -
    -
     	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
     	 *	Return list of active generation modules
     	 *
          *  @param	DoliDB	$db     			Database handler
    @@ -50,13 +54,14 @@ abstract class ModelePDFUserGroup extends CommonDocGenerator
     	 */
     	static function liste_modeles($db,$maxfilenamelength=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
    -		$type='group';
    -		$liste=array();
    +		$type = 'group';
    +		$list = array();
     
     		include_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    -		$liste=getListOfModels($db,$type,$maxfilenamelength);
    -		return $liste;
    +		$list = getListOfModels($db, $type, $maxfilenamelength);
    +		return $list;
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/core/photos_resize.php b/htdocs/core/photos_resize.php
    index 3f266e700cc..c8e6d984539 100644
    --- a/htdocs/core/photos_resize.php
    +++ b/htdocs/core/photos_resize.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2010-2015	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2009		Meos
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2016		Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -28,8 +28,8 @@ require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
     
    -$langs->load("products");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("products","other"));
     
     $id=GETPOST('id','int');
     $action=GETPOST('action','alpha');
    @@ -83,6 +83,12 @@ elseif ($modulepart == 'societe')
     	if (! $user->rights->societe->lire) accessforbidden();
     	$accessallowed=1;
     }
    +elseif ($modulepart == 'tax')
    +{
    +	$result=restrictedArea($user, 'tax', $id, 'chargesociales','charges');
    +	if (! $user->rights->tax->charges->lire) accessforbidden();
    +	$accessallowed=1;
    +}
     elseif ($modulepart == 'ticket')
     {
     	$result=restrictedArea($user,'ticket',$id,'ticket');
    @@ -177,6 +183,17 @@ elseif ($modulepart == 'expensereport')
             $dir=$conf->expensereport->dir_output;	// By default
         }
     }
    +elseif ($modulepart == 'tax')
    +{
    +	require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
    +	$object = new ChargeSociales($db);
    +	if ($id > 0)
    +	{
    +		$result = $object->fetch($id);
    +		if ($result <= 0) dol_print_error($db,'Failed to load object');
    +		$dir=$conf->tax->dir_output;	// By default
    +	}
    +}
     elseif ($modulepart == 'ticket')
     {
     	require_once DOL_DOCUMENT_ROOT.'/ticket/class/ticket.class.php';
    @@ -200,7 +217,8 @@ if (empty($backtourl))
         else if (in_array($modulepart, array('member')))        $backtourl=DOL_URL_ROOT."/adherents/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
         else if (in_array($modulepart, array('project')))       $backtourl=DOL_URL_ROOT."/projet/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
         else if (in_array($modulepart, array('societe')))       $backtourl=DOL_URL_ROOT."/societe/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
    -    else if (in_array($modulepart, array('ticket')))     $backtourl=DOL_URL_ROOT."/ticket/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
    +    else if (in_array($modulepart, array('tax')))           $backtourl=DOL_URL_ROOT."/compta/sociales/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
    +    else if (in_array($modulepart, array('ticket')))        $backtourl=DOL_URL_ROOT."/ticket/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
         else if (in_array($modulepart, array('user')))          $backtourl=DOL_URL_ROOT."/user/document.php?id=".$id.'&file='.urldecode($_POST["file"]);
     }
     
    @@ -226,6 +244,7 @@ if ($cancel)
     if ($action == 'confirm_resize' && (isset($_POST["file"]) != "") && (isset($_POST["sizex"]) != "") && (isset($_POST["sizey"]) != ""))
     {
     	$fullpath=$dir."/".$original_file;
    +
     	$result=dol_imageResizeOrCrop($fullpath,0,$_POST['sizex'],$_POST['sizey']);
     
     	if ($result == $fullpath)
    @@ -294,6 +313,8 @@ if ($action == 'confirm_resize' && (isset($_POST["file"]) != "") && (isset($_POS
     if ($action == 'confirm_crop')
     {
     	$fullpath=$dir."/".$original_file;
    +
    +	//var_dump($_POST['w'].'x'.$_POST['h'].'-'.$_POST['x'].'x'.$_POST['y']);exit;
     	$result=dol_imageResizeOrCrop($fullpath,1,$_POST['w'],$_POST['h'],$_POST['x'],$_POST['y']);
     
     	if ($result == $fullpath)
    @@ -419,9 +440,9 @@ if (! empty($conf->use_javascript_ajax))
     	// If image is too large, we use another scale.
     	if (! empty($_SESSION['dol_screenwidth']) && ($widthforcrop > round($_SESSION['dol_screenwidth']/2)))
     	{
    -		$widthforcrop=round($_SESSION['dol_screenwidth']/2);
    +		$ratioforcrop=2;
    +		$widthforcrop=round($_SESSION['dol_screenwidth'] / $ratioforcrop);
     		$refsizeforcrop='screenwidth';
    -		$ratioforcrop=1;
     	}
     
     	print '<!-- Form to crop -->'."\n";
    @@ -448,7 +469,7 @@ if (! empty($conf->use_javascript_ajax))
     	      <input type="hidden" id="action" name="action" value="confirm_crop" />
     	      <input type="hidden" id="product" name="product" value="'.dol_escape_htmltag($id).'" />
     	      <input type="hidden" id="refsizeforcrop" name="refsizeforcrop" value="'.$refsizeforcrop.'" />
    -	      <input type="hidden" id="ratioforcrop" name="ratioforcrop" value="'.$ratioforcrop.'" />
    +	      <input type="hidden" id="ratioforcrop" name="ratioforcrop" value="'.$ratioforcrop.'" /><!-- field used by core/lib/lib_photoresize.js -->
               <input type="hidden" name="modulepart" value="'.dol_escape_htmltag($modulepart).'" />
     	      <input type="hidden" name="id" value="'.dol_escape_htmltag($id).'" />
     	      <br>
    diff --git a/htdocs/core/tools.php b/htdocs/core/tools.php
    index 25e2eb3f903..524dee2d787 100644
    --- a/htdocs/core/tools.php
    +++ b/htdocs/core/tools.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,8 +24,8 @@
     
     require '../main.inc.php';
     
    -$langs->load("companies");
    -$langs->load("other");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","other"));
     
     // Security check
     $socid=0;
    diff --git a/htdocs/core/tpl/admin_extrafields_add.tpl.php b/htdocs/core/tpl/admin_extrafields_add.tpl.php
    index 6a59722e4d8..3c852bb7b26 100644
    --- a/htdocs/core/tpl/admin_extrafields_add.tpl.php
    +++ b/htdocs/core/tpl/admin_extrafields_add.tpl.php
    @@ -1,7 +1,8 @@
     <?php
     /* Copyright (C) 2010-2017	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2016		Charlie Benke		<charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -52,6 +53,7 @@ $langs->load("modulebuilder");
         		var required = jQuery("#required");
         		var alwayseditable = jQuery("#alwayseditable");
         		var list = jQuery("#list");
    +            var totalizable = jQuery("#totalizable");
         		<?php
         		if ((GETPOST('type','alpha') != "select") && (GETPOST('type','alpha') != "sellist"))
         		{
    @@ -144,7 +146,7 @@ $langs->load("modulebuilder");
     
     <table summary="listofattributes" class="border centpercent">
     <!-- Label -->
    -<tr><td class="titlefield fieldrequired"><?php echo $langs->trans("Label"); ?></td><td class="valeur"><input type="text" name="label" size="40" value="<?php echo GETPOST('label','alpha'); ?>"></td></tr>
    +<tr><td class="titlefield fieldrequired"><?php echo $langs->trans("LabelOrTranslationKey"); ?></td><td class="valeur"><input type="text" name="label" size="40" value="<?php echo GETPOST('label','alpha'); ?>"></td></tr>
     <!-- Code -->
     <tr><td class="fieldrequired"><?php echo $langs->trans("AttributeCode"); ?></td><td class="valeur"><input type="text" name="attrname" id="attrname"  size="10" value="<?php echo GETPOST('attrname','alpha'); ?>"> (<?php echo $langs->trans("AlphaNumOnlyLowerCharsAndNoSpace"); ?>)</td></tr>
     <!-- Type -->
    @@ -186,12 +188,17 @@ $langs->load("modulebuilder");
     <tr class="extra_required"><td><?php echo $langs->trans("Required"); ?></td><td class="valeur"><input id="required" type="checkbox" name="required"<?php echo (GETPOST('required','alpha')?' checked':''); ?>></td></tr>
     <!-- Always editable -->
     <tr class="extra_alwayseditable"><td><?php echo $langs->trans("AlwaysEditable"); ?></td><td class="valeur"><input id="alwayseditable" type="checkbox" name="alwayseditable"<?php echo ((GETPOST('alwayseditable','alpha') || ! GETPOST('button','alpha'))?' checked':''); ?>></td></tr>
    -<?php if ($conf->multicompany->enabled) { ?>
    -    <tr><td><?php echo $langs->trans("AllEntities"); ?></td><td class="valeur"><input id="entitycurrentorall" type="checkbox" name="entitycurrentorall"<?php echo (GETPOST('entitycurrentorall','alpha') ? '':' checked'); ?>></td></tr>
    -<?php } ?>
     <!-- Visibility -->
     <tr><td class="extra_list"><?php echo $form->textwithpicto($langs->trans("Visibility"), $langs->trans("VisibleDesc")); ?>
     </td><td class="valeur"><input id="list" class="minwidth100" type="text" name="list" value="<?php echo GETPOST('list','int')!='' ? GETPOST('list','int') : '1'; ?>"></td></tr>
    +<!-- Totalizable -->
    +<tr class="extra_totalizable"><td><?php echo $langs->trans("Totalizable"); ?></td><td class="valeur"><input id="totalizable" type="checkbox" name="totalizable"<?php echo ((GETPOST('totalizable','alpha') || GETPOST('button','alpha'))?' checked':''); ?>></td></tr>
    +<!-- Help tooltip -->
    +<tr class="help"><td><?php echo $form->textwithpicto($langs->trans("HelpOnTooltip"), $langs->trans("HelpOnTooltipDesc")); ?></td><td class="valeur"><input id="help" class="quatrevingtpercent" type="text" name="help" value="<?php echo dol_escape_htmltag($help); ?>"></td></tr>
    +<?php if ($conf->multicompany->enabled) { ?>
    +	<!-- Multicompany entity -->
    +    <tr><td><?php echo $langs->trans("AllEntities"); ?></td><td class="valeur"><input id="entitycurrentorall" type="checkbox" name="entitycurrentorall"<?php echo (GETPOST('entitycurrentorall','alpha') ? '':' checked'); ?>></td></tr>
    +<?php } ?>
     </table>
     
     <?php dol_fiche_end(); ?>
    diff --git a/htdocs/core/tpl/admin_extrafields_edit.tpl.php b/htdocs/core/tpl/admin_extrafields_edit.tpl.php
    index 3c3cc1858c5..7a533b496a4 100644
    --- a/htdocs/core/tpl/admin_extrafields_edit.tpl.php
    +++ b/htdocs/core/tpl/admin_extrafields_edit.tpl.php
    @@ -1,6 +1,7 @@
     <?php
     /* Copyright (C) 2010-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -51,6 +52,7 @@ $langs->load("modulebuilder");
         		var required = jQuery("#required");
         		var alwayseditable = jQuery("#alwayseditable");
         		var list = jQuery("#list");
    +            var totalizable = jQuery("#totalizable");
         		<?php
         		if((GETPOST('type','alpha') != "select") &&  (GETPOST('type','alpha') != "sellist"))
         		{
    @@ -156,6 +158,8 @@ $param=$extrafields->attributes[$elementtype]['param'][$attrname];
     $perms=$extrafields->attributes[$elementtype]['perms'][$attrname];
     $langfile=$extrafields->attributes[$elementtype]['langfile'][$attrname];
     $list=$extrafields->attributes[$elementtype]['list'][$attrname];
    +$totalizable = $extrafields->attributes[$elementtype]['totalizable'][$attrname];
    +$help=$extrafields->attributes[$elementtype]['help'][$attrname];
     $entitycurrentorall=$extrafields->attributes[$elementtype]['entityid'][$attrname];
     
     if((($type == 'select') || ($type == 'checkbox') || ($type == 'radio')) && is_array($param))
    @@ -176,7 +180,7 @@ elseif (($type== 'sellist') || ($type == 'chkbxlst') || ($type == 'link') || ($t
     }
     ?>
     <!-- Label -->
    -<tr><td class="titlefield fieldrequired"><?php echo $langs->trans("Label"); ?></td><td class="valeur"><input type="text" name="label" size="40" value="<?php echo $label; ?>"></td></tr>
    +<tr><td class="titlefield fieldrequired"><?php echo $langs->trans("LabelOrTranslationKey"); ?></td><td class="valeur"><input type="text" name="label" size="40" value="<?php echo $label; ?>"></td></tr>
     <!-- Code -->
     <tr><td class="fieldrequired"><?php echo $langs->trans("AttributeCode"); ?></td><td class="valeur"><?php echo $attrname; ?></td></tr>
     <!-- Type -->
    @@ -248,12 +252,16 @@ else
     <tr class="extra_required"><td><?php echo $langs->trans("Required"); ?></td><td class="valeur"><input id="required" type="checkbox" name="required"<?php echo ($required?' checked':''); ?>></td></tr>
     <!-- Always editable -->
     <tr class="extra_alwayseditable"><td><?php echo $langs->trans("AlwaysEditable"); ?></td><td class="valeur"><input id="alwayseditable" type="checkbox" name="alwayseditable"<?php echo ($alwayseditable?' checked':''); ?>></td></tr>
    +<tr><td class="extra_list"><?php echo $form->textwithpicto($langs->trans("Visibility"), $langs->trans("VisibleDesc")); ?>
    +</td><td class="valeur"><input id="list" class="minwidth100" type="text" name="list" value="<?php echo ($list!=''?$list:'1'); ?>"></td></tr>
    +<tr class="extra_totalizable"><td><?php echo $form->textwithpicto($langs->trans("Totalizable"), $langs->trans("TotalizableDesc")); ?></td><td class="valeur"><input id="totalizable" type="checkbox" name="totalizable"<?php echo ($totalizable?' checked':''); ?>></td></tr>
    +<!-- Help tooltip -->
    +<tr class="help"><td><?php echo $form->textwithpicto($langs->trans("HelpOnTooltip"), $langs->trans("HelpOnTooltipDesc")); ?></td><td class="valeur"><input id="help" class="quatrevingtpercent" type="text" name="help" value="<?php echo dol_escape_htmltag($help); ?>"></td></tr>
     <?php if ($conf->multicompany->enabled) { ?>
    +	<!-- Multicompany entity -->
         <tr><td><?php echo $langs->trans("AllEntities"); ?></td><td class="valeur"><input id="entitycurrentorall" type="checkbox" name="entitycurrentorall"<?php echo (empty($entitycurrentorall) ?' checked':''); ?>></td></tr>
     <?php } ?>
     <!-- Visibility -->
    -<tr><td class="extra_list"><?php echo $form->textwithpicto($langs->trans("Visibility"), $langs->trans("VisibleDesc")); ?>
    -</td><td class="valeur"><input id="list" class="minwidth100" type="text" name="list" value="<?php echo ($list!=''?$list:'1'); ?>"></td></tr>
     </table>
     
     <?php dol_fiche_end(); ?>
    diff --git a/htdocs/core/tpl/admin_extrafields_view.tpl.php b/htdocs/core/tpl/admin_extrafields_view.tpl.php
    index 1b0a5303bec..42f62d03ff7 100644
    --- a/htdocs/core/tpl/admin_extrafields_view.tpl.php
    +++ b/htdocs/core/tpl/admin_extrafields_view.tpl.php
    @@ -1,6 +1,7 @@
     <?php
     /* Copyright (C) 2010-2018	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012-2017	Regis Houssin		<regis.houssin@inodbox.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -49,18 +50,21 @@ print '<table summary="listofattributes" class="noborder" width="100%">';
     
     print '<tr class="liste_titre">';
     print '<td align="left">'.$langs->trans("Position");
    -print '<span class="nowrap"><img src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/1downarrow.png" alt="" title="A-Z" class="imgdown"></span>';
    +print '<span class="nowrap">';
    +print img_picto('A-Z', '1downarrow.png');
    +print '</span>';
     print '</td>';
    -print '<td>'.$langs->trans("Label").'</td>';
    +print '<td>'.$langs->trans("LabelOrTranslationKey").'</td>';
     print '<td>'.$langs->trans("TranslationString").'</td>';
     print '<td>'.$langs->trans("AttributeCode").'</td>';
     print '<td>'.$langs->trans("Type").'</td>';
     print '<td align="right">'.$langs->trans("Size").'</td>';
    -print '<td align="center">'.$langs->trans("Unique").'</td>';
     print '<td>'.$langs->trans("ComputedFormula").'</td>';
    +print '<td align="center">'.$langs->trans("Unique").'</td>';
     print '<td align="center">'.$langs->trans("Required").'</td>';
     print '<td align="center">'.$langs->trans("AlwaysEditable").'</td>';
     print '<td align="center">'.$form->textwithpicto($langs->trans("Visible"), $langs->trans("VisibleDesc")).'</td>';
    +print '<td align="center">'.$form->textwithpicto($langs->trans("Totalizable"), $langs->trans("TotalizableDesc")).'</td>';
     if ($conf->multicompany->enabled)  {
     	print '<td align="center">'.$langs->trans("Entities").'</td>';
     }
    @@ -83,11 +87,12 @@ if (is_array($extrafields->attributes[$elementtype]['type']) && count($extrafiel
     		print "<td>".$key."</td>\n";
     		print "<td>".$type2label[$extrafields->attributes[$elementtype]['type'][$key]]."</td>\n";
     		print '<td align="right">'.$extrafields->attributes[$elementtype]['size'][$key]."</td>\n";
    -		print '<td align="center">'.yn($extrafields->attributes[$elementtype]['unique'][$key])."</td>\n";
     		print '<td>'.dol_trunc($extrafields->attributes[$elementtype]['computed'][$key], 20)."</td>\n";
    +		print '<td align="center">'.yn($extrafields->attributes[$elementtype]['unique'][$key])."</td>\n";
     		print '<td align="center">'.yn($extrafields->attributes[$elementtype]['required'][$key])."</td>\n";
     		print '<td align="center">'.yn($extrafields->attributes[$elementtype]['alwayseditable'][$key])."</td>\n";
     		print '<td align="center">'.$extrafields->attributes[$elementtype]['list'][$key]."</td>\n";
    +		print '<td align="center">'.yn($extrafields->attributes[$elementtype]['totalizable'][$key])."</td>\n";
     		if (! empty($conf->multicompany->enabled))  {
     			print '<td align="center">'.($extrafields->attributes[$elementtype]['entityid'][$key]==0?$langs->trans("All"):$extrafields->attributes[$elementtype]['entitylabel'][$key]).'</td>';
     		}
    diff --git a/htdocs/core/tpl/advtarget.tpl.php b/htdocs/core/tpl/advtarget.tpl.php
    index a25abbdde6a..15ab669bd9a 100644
    --- a/htdocs/core/tpl/advtarget.tpl.php
    +++ b/htdocs/core/tpl/advtarget.tpl.php
    @@ -1,9 +1,18 @@
     <?php
    -
    -/* 
    - * To change this license header, choose License Headers in Project Properties.
    - * To change this template file, choose Tools | Templates
    - * and open the template in the editor.
    +/*
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
      */
     
     print '<script type="text/javascript" language="javascript">
    @@ -36,8 +45,8 @@ print '<script type="text/javascript" language="javascript">
     		});
     	});
     </script>';
    -		
    -		
    +
    +
     		print_fiche_titre($langs->trans("AdvTgtTitle"));
     
     		print '<div class="tabBar">' . "\n";
    @@ -272,9 +281,9 @@ print '<script type="text/javascript" language="javascript">
     
     						print '<table class="nobordernopadding"><tr>';
     						print '<td>' . $langs->trans("AdvTgtStartDt") . '</td><td>';
    -						print $form->select_date('', 'options_' . $key . '_st_dt');
    +						print $form->selectDate('', 'options_' . $key . '_st_dt');
     						print '</td><td>' . $langs->trans("AdvTgtEndDt") . '</td><td>';
    -						print $form->select_date('', 'options_' . $key . '_end_dt');
    +						print $form->selectDate('', 'options_' . $key . '_end_dt');
     						print '</td></tr></table>';
     
     						print '</td><td>' . "\n";
    @@ -397,9 +406,9 @@ print '<script type="text/javascript" language="javascript">
     		print '</td><td>' . "\n";
     		print '<table class="nobordernopadding"><tr>';
     		print '<td>' . $langs->trans("AdvTgtStartDt") . '</td><td>';
    -		print $form->select_date($array_query['contact_create_st_dt'], 'contact_create_st_dt', 0, 0, 1, 'find_customer', 1, 1);
    +		print $form->selectDate($array_query['contact_create_st_dt'], 'contact_create_st_dt', 0, 0, 1, 'find_customer', 1, 1);
     		print '</td><td>' . $langs->trans("AdvTgtEndDt") . '</td><td>';
    -		print $form->select_date($array_query['contact_create_end_dt'], 'contact_create_end_dt', 0, 0, 1, 'find_customer', 1, 1);
    +		print $form->selectDate($array_query['contact_create_end_dt'], 'contact_create_end_dt', 0, 0, 1, 'find_customer', 1, 1);
     		print '</td></tr></table>';
     		print '</td><td>' . "\n";
     		print '</td></tr>' . "\n";
    @@ -412,9 +421,9 @@ print '<script type="text/javascript" language="javascript">
     		print '</td><td>' . "\n";
     		print '<table class="nobordernopadding"><tr>';
     		print '<td>' . $langs->trans("AdvTgtStartDt") . '</td><td>';
    -		print $form->select_date($array_query['contact_update_st_dt'], 'contact_update_st_dt', 0, 0, 1, 'find_customer', 1, 1);
    +		print $form->selectDate($array_query['contact_update_st_dt'], 'contact_update_st_dt', 0, 0, 1, 'find_customer', 1, 1);
     		print '</td><td>' . $langs->trans("AdvTgtEndDt") . '</td><td>';
    -		print $form->select_date($array_query['contact_update_end_dt'], 'contact_update_end_dt', 0, 0, 1, 'find_customer', 1, 1);
    +		print $form->selectDate($array_query['contact_update_end_dt'], 'contact_update_end_dt', 0, 0, 1, 'find_customer', 1, 1);
     		print '</td></tr></table>';
     		print '</td><td>' . "\n";
     		print '</td></tr>' . "\n";
    @@ -461,9 +470,9 @@ print '<script type="text/javascript" language="javascript">
     
     					print '<table class="nobordernopadding"><tr>';
     					print '<td>' . $langs->trans("AdvTgtStartDt") . '</td><td>';
    -					print $form->select_date('', 'options_' . $key . '_st_dt' . '_cnct');
    +					print $form->selectDate('', 'options_' . $key . '_st_dt' . '_cnct');
     					print '</td><td>' . $langs->trans("AdvTgtEndDt") . '</td><td>';
    -					print $form->select_date('', 'options_' . $key . '_end_dt' . '_cnct');
    +					print $form->selectDate('', 'options_' . $key . '_end_dt' . '_cnct');
     					print '</td></tr></table>';
     
     					print '</td><td>' . "\n";
    diff --git a/htdocs/core/tpl/ajax/fileupload_main.tpl.php b/htdocs/core/tpl/ajax/fileupload_main.tpl.php
    index 93f0826e160..c68abf1ca0a 100644
    --- a/htdocs/core/tpl/ajax/fileupload_main.tpl.php
    +++ b/htdocs/core/tpl/ajax/fileupload_main.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011-2013 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011-2013 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/tpl/ajax/fileupload_view.tpl.php b/htdocs/core/tpl/ajax/fileupload_view.tpl.php
    index 482a3aef8e4..12ef47abc18 100644
    --- a/htdocs/core/tpl/ajax/fileupload_view.tpl.php
    +++ b/htdocs/core/tpl/ajax/fileupload_view.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011-2012 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011-2012 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/tpl/ajax/objectlinked_lineimport.tpl.php b/htdocs/core/tpl/ajax/objectlinked_lineimport.tpl.php
    index ae80389bd3a..824859edfd7 100644
    --- a/htdocs/core/tpl/ajax/objectlinked_lineimport.tpl.php
    +++ b/htdocs/core/tpl/ajax/objectlinked_lineimport.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2011-2013 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2011-2013 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/tpl/ajaxrow.tpl.php b/htdocs/core/tpl/ajaxrow.tpl.php
    index 4ae64ea82ed..167d51ade75 100644
    --- a/htdocs/core/tpl/ajaxrow.tpl.php
    +++ b/htdocs/core/tpl/ajaxrow.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2016 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -16,8 +16,13 @@
      * along with this program. If not, see <http://www.gnu.org/licenses/>.
      *
      * Javascript code to activate drag and drop on lines
    - * You can use this if you want to be abale to drag and drop rows of a table.
    - * You must add id="tablelines" on table level tag and have ($nboflines or count($object->lines) or count($taskarray) > 0)
    + * You can use this if you want to be able to drag and drop rows of a table.
    + * You must add id="tablelines" on table level tag
    + * and $object and $object->id is defined
    + * and $object->fk_element or $fk_element is defined
    + * and have ($nboflines or count($object->lines) or count($taskarray) > 0)
    + * and have $table_element_line = 'tablename' or $object->table_element_line with line to move
    + *
      */
     
     // Protection to avoid direct call of template
    @@ -32,7 +37,7 @@ if (empty($object) || ! is_object($object))
     <!-- BEGIN PHP TEMPLATE AJAXROW.TPL.PHP - Script to enable drag and drop on lines of a table -->
     <?php
     $id=$object->id;
    -$fk_element=$object->fk_element;
    +$fk_element=empty($object->fk_element)?$fk_element:$object->fk_element;
     $table_element_line=(empty($table_element_line)?$object->table_element_line:$table_element_line);
     $nboflines=(isset($object->lines)?count($object->lines):(isset($tasksarray)?count($tasksarray):(empty($nboflines)?0:$nboflines)));
     $forcereloadpage=empty($conf->global->MAIN_FORCE_RELOAD_PAGE)?0:1;
    diff --git a/htdocs/core/tpl/bloc_showhide.tpl.php b/htdocs/core/tpl/bloc_showhide.tpl.php
    index 3f9c1eb0a1d..8a45ab3fc37 100644
    --- a/htdocs/core/tpl/bloc_showhide.tpl.php
    +++ b/htdocs/core/tpl/bloc_showhide.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012       Regis Houssin           <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012       Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2013       Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
    diff --git a/htdocs/core/tpl/card_presend.tpl.php b/htdocs/core/tpl/card_presend.tpl.php
    index b6f11828ffe..0d1fd84923c 100644
    --- a/htdocs/core/tpl/card_presend.tpl.php
    +++ b/htdocs/core/tpl/card_presend.tpl.php
    @@ -74,6 +74,7 @@ if ($action == 'presend')
     	{
     		$outputlangs = new Translate('', $conf);
     		$outputlangs->setDefaultLang($newlang);
    +		// Load traductions files requiredby by page
     		$outputlangs->loadLangs(array('commercial','bills','orders','contracts','members','propal','products','supplier_proposal','interventions'));
     	}
     
    @@ -168,7 +169,6 @@ if ($action == 'presend')
     			$formmail->withtouser = $listeuser;
     			$formmail->withtoccuser = $listeuser;
     		}
    -
     	}
     
     	$formmail->withto = GETPOST('sendto') ? GETPOST('sendto') : $liste;
    diff --git a/htdocs/core/tpl/commonfields_add.tpl.php b/htdocs/core/tpl/commonfields_add.tpl.php
    index 4c81e50c65c..23a60d7f675 100644
    --- a/htdocs/core/tpl/commonfields_add.tpl.php
    +++ b/htdocs/core/tpl/commonfields_add.tpl.php
    @@ -19,6 +19,7 @@
      * $action
      * $conf
      * $langs
    + * $form
      */
     
     // Protection to avoid direct call of template
    @@ -39,7 +40,7 @@ foreach($object->fields as $key => $val)
     	// Discard if extrafield is a hidden field on form
     	if (abs($val['visible']) != 1) continue;
     
    -	if (array_key_exists('enabled', $val) && isset($val['enabled']) && ! $val['enabled']) continue;	// We don't want this field
    +	if (array_key_exists('enabled', $val) && isset($val['enabled']) && ! verifCond($val['enabled'])) continue;	// We don't want this field
     
     	print '<tr id="field_'.$key.'">';
     	print '<td';
    @@ -49,6 +50,9 @@ foreach($object->fields as $key => $val)
     	print '"';
     	print '>';
     	print $langs->trans($val['label']);
    +    if(!empty($val['help'])){
    +        print $form->textwithpicto('',$langs->trans($val['help']));
    +    }
     	print '</td>';
     	print '<td>';
     	if (in_array($val['type'], array('int', 'integer'))) $value = GETPOST($key, 'int');
    @@ -60,4 +64,4 @@ foreach($object->fields as $key => $val)
     }
     
     ?>
    -<!-- END PHP TEMPLATE commonfields_add.tpl.php -->
    \ No newline at end of file
    +<!-- END PHP TEMPLATE commonfields_add.tpl.php -->
    diff --git a/htdocs/core/tpl/commonfields_edit.tpl.php b/htdocs/core/tpl/commonfields_edit.tpl.php
    index 427e9f6b894..ce41cff24d0 100644
    --- a/htdocs/core/tpl/commonfields_edit.tpl.php
    +++ b/htdocs/core/tpl/commonfields_edit.tpl.php
    @@ -40,7 +40,7 @@ foreach($object->fields as $key => $val)
     	// Discard if extrafield is a hidden field on form
     	if (abs($val['visible']) != 1) continue;
     
    -	if (array_key_exists('enabled', $val) && isset($val['enabled']) && ! $val['enabled']) continue;	// We don't want this field
    +	if (array_key_exists('enabled', $val) && isset($val['enabled']) && ! verifCond($val['enabled'])) continue;	// We don't want this field
     
     	print '<tr><td';
     	print ' class="titlefieldcreate';
    diff --git a/htdocs/core/tpl/commonfields_view.tpl.php b/htdocs/core/tpl/commonfields_view.tpl.php
    index 73f63360715..b6b2e572e49 100644
    --- a/htdocs/core/tpl/commonfields_view.tpl.php
    +++ b/htdocs/core/tpl/commonfields_view.tpl.php
    @@ -42,7 +42,7 @@ foreach($object->fields as $key => $val)
     	// Discard if extrafield is a hidden field on form
     	if (abs($val['visible']) != 1) continue;
     
    -	if (array_key_exists('enabled', $val) && isset($val['enabled']) && ! $val['enabled']) continue;	// We don't want this field
    +	if (array_key_exists('enabled', $val) && isset($val['enabled']) && ! verifCond($val['enabled'])) continue;	// We don't want this field
     	if (in_array($key, array('ref','status'))) continue;	// Ref and status are already in dol_banner
     
     	$value=$object->$key;
    diff --git a/htdocs/core/tpl/contacts.tpl.php b/htdocs/core/tpl/contacts.tpl.php
    index 99ae9a699a1..9ae34602ef6 100644
    --- a/htdocs/core/tpl/contacts.tpl.php
    +++ b/htdocs/core/tpl/contacts.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012      Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2015-2016 Charlie BENKE 	<charlie@patas-monkey.com>
      *
    @@ -199,12 +199,12 @@ if ($permission) {
     			if ($tab[$i]['source']=='internal')
     			{
     				$userstatic->fetch($tab[$i]['id']);
    -				echo $userstatic->getNomUrl(-1);
    +				echo $userstatic->getNomUrl(-1, '', 0, 0, 0, 0, '', 'valignmiddle');
     			}
     			if ($tab[$i]['source']=='external')
     			{
     				$contactstatic->fetch($tab[$i]['id']);
    -				echo $contactstatic->getNomUrl(1);
    +				echo $contactstatic->getNomUrl(1, '', 0, 0, 0, 0, '', 'valignmiddle');
     			}
     			?>
     		</div>
    diff --git a/htdocs/core/tpl/document_actions_post_headers.tpl.php b/htdocs/core/tpl/document_actions_post_headers.tpl.php
    index aa7caaa1e87..429fe8ac682 100644
    --- a/htdocs/core/tpl/document_actions_post_headers.tpl.php
    +++ b/htdocs/core/tpl/document_actions_post_headers.tpl.php
    @@ -52,7 +52,7 @@ if (in_array($modulepart, array('product', 'produit', 'societe', 'user', 'ticket
     if ($action == 'delete')
     {
     	$langs->load("companies");	// Need for string DeleteFile+ConfirmDeleteFiles
    -	$ret = $form->form_confirm(
    +	print $form->formconfirm(
     			$_SERVER["PHP_SELF"] . '?id=' . $object->id . '&urlfile=' . urlencode(GETPOST("urlfile")) . '&linkid=' . GETPOST('linkid', 'int') . (empty($param)?'':$param),
     			$langs->trans('DeleteFile'),
     			$langs->trans('ConfirmDeleteFile'),
    @@ -61,7 +61,6 @@ if ($action == 'delete')
     			0,
     			1
     	);
    -	if ($ret == 'html') print '<br>';
     }
     
     $formfile=new FormFile($db);
    diff --git a/htdocs/core/tpl/error.tpl.php b/htdocs/core/tpl/error.tpl.php
    index 8fb1641a364..6e120851b98 100644
    --- a/htdocs/core/tpl/error.tpl.php
    +++ b/htdocs/core/tpl/error.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php
    index d7b5f67adaf..6b6d22cf822 100644
    --- a/htdocs/core/tpl/extrafields_list_print_fields.tpl.php
    +++ b/htdocs/core/tpl/extrafields_list_print_fields.tpl.php
    @@ -40,6 +40,14 @@ if (! empty($extrafieldsobjectkey))	// $extrafieldsobject is the $object->table_
     				print $extrafields->showOutputField($key, $value, '', $extrafieldsobjectkey);
     				print '</td>';
     				if (! $i) $totalarray['nbfield']++;
    +
    +                if ($extrafields->attributes[$extrafieldsobjectkey]['totalizable'][$key]) {
    +                    if (! $i) {
    +                        // we keep position for the first line
    +                        $totalarray['totalizable'][$key]['pos'] = $totalarray['nbfield'];
    +                    }
    +                    $totalarray['totalizable'][$key]['total'] += $obj->$tmpkey;
    +                }
     				if (! empty($val['isameasure']))
     				{
     					if (! $i) $totalarray['pos'][$totalarray['nbfield']]='ef.'.$tmpkey;
    diff --git a/htdocs/core/tpl/extrafields_list_search_param.tpl.php b/htdocs/core/tpl/extrafields_list_search_param.tpl.php
    index 6cda8721dcd..dfc9e59d0f8 100644
    --- a/htdocs/core/tpl/extrafields_list_search_param.tpl.php
    +++ b/htdocs/core/tpl/extrafields_list_search_param.tpl.php
    @@ -8,9 +8,12 @@ if (empty($conf) || ! is_object($conf))
     }
     
     // Loop to complete $param for extrafields
    +if (! empty($search_array_options))	// $extrafieldsobject is the $object->table_element like 'societe', 'socpeople', ...
    +{
     foreach ($search_array_options as $key => $val)
     {
     	$crit=$val;
     	$tmpkey=preg_replace('/search_options_/','',$key);
     	if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val);
    -}
    \ No newline at end of file
    +}
    +}
    diff --git a/htdocs/core/tpl/extrafields_list_search_sql.tpl.php b/htdocs/core/tpl/extrafields_list_search_sql.tpl.php
    index a8e43d6429f..f3c5a10e95b 100644
    --- a/htdocs/core/tpl/extrafields_list_search_sql.tpl.php
    +++ b/htdocs/core/tpl/extrafields_list_search_sql.tpl.php
    @@ -10,7 +10,7 @@ if (empty($conf) || ! is_object($conf))
     if (empty($extrafieldsobjectkey) && is_object($object)) $extrafieldsobjectkey=$object->table_element;
     
     // Loop to complete the sql search criterias from extrafields
    -if (! empty($extrafieldsobjectkey))	// $extrafieldsobject is the $object->table_element like 'societe', 'socpeople', ...
    +if (! empty($extrafieldsobjectkey) && ! empty($search_array_options) && is_array($search_array_options))	// $extrafieldsobject is the $object->table_element like 'societe', 'socpeople', ...
     {
     	foreach ($search_array_options as $key => $val)
     	{
    @@ -18,13 +18,18 @@ if (! empty($extrafieldsobjectkey))	// $extrafieldsobject is the $object->table_
     		$tmpkey=preg_replace('/search_options_/','',$key);
     		$typ=$extrafields->attributes[$extrafieldsobjectkey]['type'][$tmpkey];
     
    -		$mode_search=0;
    -		if (in_array($typ, array('int','double','real'))) $mode_search=1;								// Search on a numeric
    -		if (in_array($typ, array('sellist','link')) && $crit != '0' && $crit != '-1') $mode_search=2;	// Search on a foreign key int
    -		if (in_array($typ, array('chkbxlst','checkbox'))) $mode_search=4;	                            // Search on a multiselect field with sql type = text
    -		if ($crit != '' && (! in_array($typ, array('select','sellist')) || $crit != '0') && (! in_array($typ, array('link')) || $crit != '-1'))
    +		if ($crit != '' && in_array($typ, array('date', 'datetime', 'timestamp')))
     		{
    +			$sql .= " AND ef.".$tmpkey." = '".$db->idate($crit)."'";
    +		}
    +		elseif ($crit != '' && (! in_array($typ, array('select','sellist')) || $crit != '0') && (! in_array($typ, array('link')) || $crit != '-1'))
    +		{
    +			$mode_search=0;
    +			if (in_array($typ, array('int','double','real'))) $mode_search=1;								// Search on a numeric
    +			if (in_array($typ, array('sellist','link')) && $crit != '0' && $crit != '-1') $mode_search=2;	// Search on a foreign key int
    +			if (in_array($typ, array('chkbxlst','checkbox'))) $mode_search=4;	                            // Search on a multiselect field with sql type = text
    +
     			$sql .= natural_search('ef.'.$tmpkey, $crit, $mode_search);
     		}
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/core/tpl/extrafields_view.tpl.php b/htdocs/core/tpl/extrafields_view.tpl.php
    index 7253474c36b..ed093e4c506 100644
    --- a/htdocs/core/tpl/extrafields_view.tpl.php
    +++ b/htdocs/core/tpl/extrafields_view.tpl.php
    @@ -24,34 +24,36 @@
      * $parameters
      * $cols
      */
    -
     // Protection to avoid direct call of template
     if (empty($object) || ! is_object($object))
     {
     	print "Error, template page can't be called as URL";
     	exit;
     }
    +
     if (! is_object($form)) $form=new Form($db);
     
    +
     ?>
     <!-- BEGIN PHP TEMPLATE extrafields_view.tpl.php -->
     <?php
    -
     if (! is_array($parameters)) $parameters = array();
     if (! empty($cols)) $parameters['colspan'] = ' colspan="'.$cols.'"';
     if (! empty($cols)) $parameters['cols'] = $cols;
     if (! empty($object->fk_soc)) $parameters['socid'] = $object->fk_soc;
    -
     $reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action);
     print $hookmanager->resPrint;
     if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
     
    +
     //var_dump($extrafields->attributes[$object->table_element]);
     if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]['label']))
    +
     {
     	foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $label)
     	{
     		// Discard if extrafield is a hidden field on form
    +
     		$enabled = 1;
     		if ($enabled && isset($extrafields->attributes[$object->table_element]['enabled'][$key]))
     		{
    @@ -74,7 +76,6 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]
     
     		// Load language if required
     		if (! empty($extrafields->attributes[$object->table_element]['langfile'][$key])) $langs->load($extrafields->attributes[$object->table_element]['langfile'][$key]);
    -
     		if ($action == 'edit_extras')
     		{
     			$value = (isset($_POST["options_" . $key]) ? $_POST["options_" . $key] : $object->array_options["options_" . $key]);
    @@ -96,27 +97,25 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]
     			print '<td';
     			print ' class="';
     			//var_dump($action);exit;
    +
     			if ((! empty($action) && ($action == 'create' || $action == 'edit')) && ! empty($extrafields->attributes[$object->table_element]['required'][$key])) print ' fieldrequired';
     			print '">';
    -			if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) print $form->textwithpicto($langs->trans($label), $extrafields->attributes[$object->table_element]['help'][$key]);
    +			if (! empty($extrafields->attributes[$object->table_element]['help'][$key])) print $form->textwithpicto($langs->trans($label), $langs->trans($extrafields->attributes[$object->table_element]['help'][$key]));
     			else print $langs->trans($label);
     			print '</td>';
     
     			//TODO Improve element and rights detection
     			//var_dump($user->rights);
     			$permok=false;
    -
     			$keyforperm=$object->element;
     			if ($object->element == 'fichinter') $keyforperm='ficheinter';
     			if (isset($user->rights->$keyforperm)) $permok=$user->rights->$keyforperm->creer||$user->rights->$keyforperm->create||$user->rights->$keyforperm->write;
    -
     			if ($object->element=='order_supplier')   $permok=$user->rights->fournisseur->commande->creer;
     			if ($object->element=='invoice_supplier') $permok=$user->rights->fournisseur->facture->creer;
     			if ($object->element=='shipping')         $permok=$user->rights->expedition->creer;
     			if ($object->element=='delivery')         $permok=$user->rights->expedition->livraison->creer;
     			if ($object->element=='productlot')       $permok=$user->rights->stock->creer;
     			if ($object->element=='facturerec') 	  $permok=$user->rights->facture->creer;
    -
     			if (($object->statut == 0 || ! empty($extrafields->attributes[$object->table_element]['alwayseditable'][$key]))
     				&& $permok && ($action != 'edit_extras' || GETPOST('attribute') != $key)
     			    && empty($extrafields->attributes[$object->table_element]['computed'][$key]))
    @@ -129,6 +128,7 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]
     			print '</td>';
     
     			$html_id = !empty($object->id) ? $object->element.'_extras_'.$key.'_'.$object->id : '';
    +
     			print '<td id="'.$html_id.'" class="'.$object->element.'_extras_'.$key.'"'.($cols?' colspan="'.$cols.'"':'').'>';
     
     			// Convert date into timestamp format
    @@ -143,21 +143,19 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]
     				//print 'x'.$object->array_options['options_' . $key].'-'.$datenotinstring.' - '.dol_print_date($datenotinstring, 'dayhour');
     				$value = isset($_POST["options_" . $key]) ? dol_mktime($_POST["options_" . $key . "hour"], $_POST["options_" . $key . "min"], 0, $_POST["options_" . $key . "month"], $_POST["options_" . $key . "day"], $_POST["options_" . $key . "year"]) : $datenotinstring;
     			}
    -
     			//TODO Improve element and rights detection
     			if ($action == 'edit_extras' && $permok && GETPOST('attribute','none') == $key)
     			{
     			    $fieldid='id';
     			    if ($object->table_element == 'societe') $fieldid='socid';
    -
     			    print '<form enctype="multipart/form-data" action="' . $_SERVER["PHP_SELF"] . '" method="post" name="formextra">';
     				print '<input type="hidden" name="action" value="update_extras">';
     				print '<input type="hidden" name="attribute" value="' . $key . '">';
     				print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
     				print '<input type="hidden" name="'.$fieldid.'" value="' . $object->id . '">';
    -
     				print $extrafields->showInputField($key, $value, '', '', '', 0, $object->id);
     
    +
     				print '<input type="submit" class="button" value="' . dol_escape_htmltag($langs->trans('Modify')) . '">';
     
     				print '</form>';
    @@ -167,6 +165,7 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]
     				//print $key.'-'.$value.'-'.$object->table_element;
     				print $extrafields->showOutputField($key, $value, '', $object->table_element);
     			}
    +
     			print '</td>';
     			print '</tr>' . "\n";
     		}
    @@ -203,11 +202,10 @@ if (empty($reshook) && is_array($extrafields->attributes[$object->table_element]
     								});
     					    	});
     						}
    -
     						setListDependencies();
     				    });
     				</script>'."\n";
     	}
     }
     ?>
    -<!-- END PHP TEMPLATE extrafields_view.tpl.php -->
    \ No newline at end of file
    +<!-- END PHP TEMPLATE extrafields_view.tpl.php -->
    diff --git a/htdocs/core/tpl/filemanager.tpl.php b/htdocs/core/tpl/filemanager.tpl.php
    index b60941f4eeb..5ee19aa25a8 100644
    --- a/htdocs/core/tpl/filemanager.tpl.php
    +++ b/htdocs/core/tpl/filemanager.tpl.php
    @@ -28,7 +28,7 @@ if (empty($conf) || ! is_object($conf))
     ?>
     
     <!-- BEGIN PHP TEMPLATE core/tpl/filemanager.tpl.php -->
    -<!-- Doc of fileTree plugin at http://www.abeautifulsite.net/blog/2008/03/jquery-file-tree/ -->
    +<!-- Doc of fileTree plugin at https://www.abeautifulsite.net/jquery-file-tree -->
     
     <?php
     
    @@ -38,15 +38,18 @@ if (empty($module)) $module='ecm';
     
     $permtoadd = 0;
     $permtoupload = 0;
    +$showroot = 0;
     if ($module == 'ecm')
     {
     	$permtoadd = $user->rights->ecm->setup;
     	$permtoupload = $user->rights->ecm->upload;
    +	$showroot = 0;
     }
     if ($module == 'medias')
     {
     	$permtoadd = ($user->rights->mailing->creer || $user->rights->website->write);
     	$permtoupload = ($user->rights->mailing->creer || $user->rights->website->write);
    +	$showroot = 1;
     }
     
     
    @@ -69,29 +72,25 @@ if (($action == 'delete' || $action == 'file_manager_delete') && empty($conf->us
     print '<div class="inline-block toolbarbutton centpercent">';
     
     // Toolbar
    -//if (preg_match('/\/ecm/', $_SERVER['PHP_SELF'])) {
    -//if ($module == 'ecm') {
    -
    -	if ($permtoadd)
    -	{
    -	    print '<a href="'.DOL_URL_ROOT.'/ecm/dir_add_card.php?action=create&module='.urlencode($module).($website?'&website='.$website:'').($pageid?'&pageid='.$pageid:'').'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?file_manager=1&website='.$website.'&pageid='.$pageid).'" class="inline-block valignmiddle toolbarbutton" title="'.dol_escape_htmltag($langs->trans('ECMAddSection')).'">';
    -	    print '<img class="toolbarbutton" border="0" src="'.DOL_URL_ROOT.'/theme/common/folder-new.png">';
    -	    print '</a>';
    -	}
    -	else
    -	{
    -	    print '<a href="#" class="inline-block valignmiddle toolbarbutton" title="'.$langs->trans("NotAllowed").'">';
    -	    print '<img class="toolbarbutton" border="0" src="'.DOL_URL_ROOT.'/theme/common/folder-new.png">';
    -	    print '</a>';
    -	}
    -	if ($module == 'ecm')
    -	{
    -		$tmpurl=((! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS))?'#':($_SERVER["PHP_SELF"].'?action=refreshmanual'.($module?'&amp;module='.$module:'').($section?'&amp;section='.$section:'')));
    -		print '<a href="'.$tmpurl.'" class="inline-block valignmiddle toolbarbutton" title="'.dol_escape_htmltag($langs->trans('ReSyncListOfDir')).'">';
    -		print '<img id="refreshbutton" class="toolbarbutton" border="0" src="'.DOL_URL_ROOT.'/theme/common/view-refresh.png">';
    -		print '</a>';
    -	}
    -//}
    +if ($permtoadd)
    +{
    +	print '<a href="'.DOL_URL_ROOT.'/ecm/dir_add_card.php?action=create&module='.urlencode($module).($websitekey?'&website='.$websitekey:'').($pageid?'&pageid='.$pageid:'').'&backtopage='.urlencode($_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid).'" class="inline-block valignmiddle toolbarbutton" title="'.dol_escape_htmltag($langs->trans('ECMAddSection')).'">';
    +    print '<img class="toolbarbutton" border="0" src="'.DOL_URL_ROOT.'/theme/common/folder-new.png">';
    +    print '</a>';
    +}
    +else
    +{
    +    print '<a href="#" class="inline-block valignmiddle toolbarbutton" title="'.$langs->trans("NotAllowed").'">';
    +    print '<img class="toolbarbutton" border="0" src="'.DOL_URL_ROOT.'/theme/common/folder-new.png">';
    +    print '</a>';
    +}
    +if ($module == 'ecm')
    +{
    +	$tmpurl=((! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS))?'#':($_SERVER["PHP_SELF"].'?action=refreshmanual'.($module?'&amp;module='.$module:'').($section?'&amp;section='.$section:'')));
    +	print '<a href="'.$tmpurl.'" class="inline-block valignmiddle toolbarbutton" title="'.dol_escape_htmltag($langs->trans('ReSyncListOfDir')).'">';
    +	print '<img id="refreshbutton" class="toolbarbutton" border="0" src="'.DOL_URL_ROOT.'/theme/common/view-refresh.png">';
    +	print '</a>';
    +}
     
     // Start "Add new file" area
     $nameforformuserfile = 'formuserfileecm';
    @@ -112,7 +111,7 @@ if ((! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABL
     		<?php
     	}
     
    -	$sectiondir=GETPOST('file','alpha');
    +	$sectiondir=GETPOST('file','alpha')?GETPOST('file','alpha'):GETPOST('section_dir','alpha');
     	print '<!-- Start form to attach new file in filemanager.tpl.php sectionid='.$section.' sectiondir='.$sectiondir.' -->'."\n";
     	include_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
         $formfile=new FormFile($db);
    @@ -148,7 +147,7 @@ if (empty($action) || $action == 'editfile' || $action == 'file_manager' || preg
     
     	print '<!-- Title for manual directories -->'."\n";
     	print '<tr class="liste_titre">'."\n";
    -    print '<th class="liste_titre" align="left" colspan="6">';
    +    print '<th class="liste_titre" align="left">';
         print '&nbsp;'.$langs->trans("ECMSections");
     	print '</th></tr>';
     
    @@ -159,18 +158,26 @@ if (empty($action) || $action == 'editfile' || $action == 'file_manager' || preg
     
         if (! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS))
         {
    -        print '<tr><td colspan="6">';
    +    	// Show the link to "Root"
    +    	if ($showroot)
    +    	{
    +    		print '<tr><td><div style="padding-left: 5px; padding-right: 5px;"><a href="'.$_SERVER["PHP_SELF"].'?file_manager=1&pageid='.$pageid.'">'.$langs->trans("Root").'</a></div></td></tr>';
    +    	}
     
    -    	// Show filemanager tree (will be filled by call of ajax enablefiletreeajax.tpl.php that execute ajaxdirtree.php)
    +
    +
    +    	print '<tr><td>';
    +
    +    	// Show filemanager tree (will be filled by a call of ajax /ecm/tpl/enablefiletreeajax.tpl.php, later, that executes ajaxdirtree.php)
     	    print '<div id="filetree" class="ecmfiletree"></div>';
     
     	    if ($action == 'deletefile') print $form->formconfirm('eeeee', $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile', '', '', 'deletefile');
     
     	    print '</td></tr>';
         }
    -    else
    +    else	// Show filtree when ajax is disabled (rare)
         {
    -        print '<tr><td colspan="6" style="padding-left: 20px">';
    +        print '<tr><td style="padding-left: 20px">';
     
             $_POST['modulepart'] = $module;
             $_POST['openeddir'] = GETPOST('openeddir');
    @@ -179,6 +186,9 @@ if (empty($action) || $action == 'editfile' || $action == 'file_manager' || preg
             // Show filemanager tree (will be filled by direct include of ajaxdirtree.php in mode noajax, this will return all dir - all levels - to show)
             print '<div id="filetree" class="ecmfiletree">';
     
    +        // Variables that may be defined:
    +        // $_GET['modulepart'], $_GET['openeddir'], $_GET['sortfield'], $_GET['sortorder']
    +        // $_POST['dir']
             $mode='noajax';
             if (empty($url)) $url=DOL_URL_ROOT.'/ecm/index.php';
             include DOL_DOCUMENT_ROOT.'/core/ajax/ajaxdirtree.php';
    @@ -204,7 +214,7 @@ if (empty($action) || $action == 'editfile' || $action == 'file_manager' || preg
     
     $mode='noajax';
     if (empty($url)) $url=DOL_URL_ROOT.'/ecm/index.php';
    -include DOL_DOCUMENT_ROOT.'/core/ajax/ajaxdirpreview.php';
    +include DOL_DOCUMENT_ROOT.'/core/ajax/ajaxdirpreview.php';	// Show content of a directory on right side
     
     
     // End right panel
    @@ -217,7 +227,15 @@ include DOL_DOCUMENT_ROOT.'/core/ajax/ajaxdirpreview.php';
     <?php
     
     
    -if (! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS)) {
    +if (! empty($conf->use_javascript_ajax) && empty($conf->global->MAIN_ECM_DISABLE_JS)) // Show filtree when ajax is enabled
    +{
    +	//var_dump($modulepart);
    +	// Variables that may be defined:
    +	// $_GET['modulepart'], $_GET['openeddir'], $_GET['sortfield'], $_GET['sortorder']
    +	// $_POST['dir']
    +	// $_POST['section_dir'], $_POST['section_id'], $_POST['token'], $_POST['max_file_size'], $_POST['sendit']
    +	if (GETPOST('section_dir','alpha')) { $preopened=GETPOST('section_dir','alpha'); }
    +
     	include DOL_DOCUMENT_ROOT.'/ecm/tpl/enablefiletreeajax.tpl.php';
     }
     
    diff --git a/htdocs/core/tpl/footer.tpl.php b/htdocs/core/tpl/footer.tpl.php
    index 8fb1641a364..6e120851b98 100644
    --- a/htdocs/core/tpl/footer.tpl.php
    +++ b/htdocs/core/tpl/footer.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/tpl/header.tpl.php b/htdocs/core/tpl/header.tpl.php
    index 1b97d4fd763..63f64441f4c 100644
    --- a/htdocs/core/tpl/header.tpl.php
    +++ b/htdocs/core/tpl/header.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/core/tpl/login.tpl.php b/htdocs/core/tpl/login.tpl.php
    index 0f22527ff01..7e3e479048b 100644
    --- a/htdocs/core/tpl/login.tpl.php
    +++ b/htdocs/core/tpl/login.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2009-2015 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2009-2015 Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2013 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -19,6 +19,7 @@
     // Need global variable $title to be defined by caller (like dol_loginfunction)
     // Caller can also set 	$morelogincontent = array(['options']=>array('js'=>..., 'table'=>...);
     
    +
     // Protection to avoid direct call of template
     if (empty($conf) || ! is_object($conf))
     {
    @@ -27,6 +28,8 @@ if (empty($conf) || ! is_object($conf))
     }
     
     
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +
     header('Cache-Control: Public, must-revalidate');
     header("Content-type: text/html; charset=".$conf->file->character_set_client);
     
    @@ -55,10 +58,16 @@ if (! preg_match('/'.constant('DOL_APPLICATION_TITLE').'/', $title)) $disablenof
     
     print top_htmlhead('', $titleofloginpage, 0, 0, $arrayofjs, array(), 0, $disablenofollow);
     
    +
    +$colorbackhmenu1='60,70,100';      // topmenu
    +if (! isset($conf->global->THEME_ELDY_TOPMENU_BACK1)) $conf->global->THEME_ELDY_TOPMENU_BACK1=$colorbackhmenu1;
    +$colorbackhmenu1     =empty($user->conf->THEME_ELDY_ENABLE_PERSONALIZED)?(empty($conf->global->THEME_ELDY_TOPMENU_BACK1)?$colorbackhmenu1:$conf->global->THEME_ELDY_TOPMENU_BACK1):(empty($user->conf->THEME_ELDY_TOPMENU_BACK1)?$colorbackhmenu1:$user->conf->THEME_ELDY_TOPMENU_BACK1);
    +$colorbackhmenu1=join(',',colorStringToArray($colorbackhmenu1));    // Normalize value to 'x,y,z'
    +
     ?>
     <!-- BEGIN PHP TEMPLATE LOGIN.TPL.PHP -->
     
    -<body class="body bodylogin"<?php print empty($conf->global->MAIN_LOGIN_BACKGROUND)?'':' style="background-size: cover; background-position: center center; background-attachment: fixed; background-repeat: no-repeat; background-image: url(\''.DOL_URL_ROOT.'/viewimage.php?cache=1&noalt=1&modulepart=mycompany&file='.urlencode($conf->global->MAIN_LOGIN_BACKGROUND).'\')"'; ?>>
    +<body class="body bodylogin"<?php print empty($conf->global->MAIN_LOGIN_BACKGROUND)?'':' style="background-size: cover; background-position: center center; background-attachment: fixed; background-repeat: no-repeat; background-image: url(\''.DOL_URL_ROOT.'/viewimage.php?cache=1&noalt=1&modulepart=mycompany&file='.urlencode('logos/'.$conf->global->MAIN_LOGIN_BACKGROUND).'\')"'; ?>>
     
     <?php if (empty($conf->dol_use_jmobile)) { ?>
     <script type="text/javascript">
    @@ -69,7 +78,7 @@ $(document).ready(function () {
     </script>
     <?php } ?>
     
    -<div class="login_center center">
    +<div class="login_center center"<?php print empty($conf->global->MAIN_LOGIN_BACKGROUND)?' style="background-size: cover; background-position: center center; background-attachment: fixed; background-repeat: no-repeat; background-image: linear-gradient(rgb('.$colorbackhmenu1.',0.3), rgb(240,240,240));"':'' ?>>
     <div class="login_vertical_align">
     
     <form id="login" name="login" method="post" action="<?php echo $php_self; ?>">
    @@ -114,26 +123,29 @@ if ($disablenofollow) echo '</a>';
     
     <div id="login_right">
     
    -<table class="left centpercent" title="<?php echo $langs->trans("EnterLoginDetail"); ?>">
    +<div class="tagtable left centpercent" title="<?php echo $langs->trans("EnterLoginDetail"); ?>">
    +
     <!-- Login -->
    -<tr>
    -<td class="nowrap center valignmiddle">
    +<div class="trinputlogin">
    +<div class="tagtd nowraponall center valignmiddle tdinputlogin">
     <?php if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) { ?><label for="username" class="hidden"><?php echo $langs->trans("Login"); ?></label><?php } ?>
     <!-- <span class="span-icon-user">-->
     <span class="fa fa-user">
    -<input type="text" id="username" placeholder="<?php echo $langs->trans("Login"); ?>" name="username" class="flat input-icon-user minwidth150" value="<?php echo dol_escape_htmltag($login); ?>" tabindex="1" autofocus="autofocus" />
     </span>
    -</td>
    -</tr>
    +<input type="text" id="username" placeholder="<?php echo $langs->trans("Login"); ?>" name="username" class="flat input-icon-user minwidth150" value="<?php echo dol_escape_htmltag($login); ?>" tabindex="1" autofocus="autofocus" />
    +</div>
    +</div>
    +
     <!-- Password -->
    -<tr>
    -<td class="nowrap center valignmiddle">
    +<div class="trinputlogin">
    +<div class="tagtd nowraponall center valignmiddle tdinputlogin">
     <?php if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) { ?><label for="password" class="hidden"><?php echo $langs->trans("Password"); ?></label><?php } ?>
     <!--<span class="span-icon-password">-->
     <span class="fa fa-key">
    -<input id="password" placeholder="<?php echo $langs->trans("Password"); ?>" name="password" class="flat input-icon-password minwidth150" type="password" value="<?php echo dol_escape_htmltag($password); ?>" tabindex="2" autocomplete="<?php echo empty($conf->global->MAIN_LOGIN_ENABLE_PASSWORD_AUTOCOMPLETE)?'off':'on'; ?>" />
     </span>
    -</td></tr>
    +<input id="password" placeholder="<?php echo $langs->trans("Password"); ?>" name="password" class="flat input-icon-password minwidth150" type="password" value="<?php echo dol_escape_htmltag($password); ?>" tabindex="2" autocomplete="<?php echo empty($conf->global->MAIN_LOGIN_ENABLE_PASSWORD_AUTOCOMPLETE)?'off':'on'; ?>" />
    +</div></div>
    +
     <?php
     if (! empty($morelogincontent)) {
     	if (is_array($morelogincontent)) {
    @@ -159,10 +171,11 @@ if ($captcha) {
     	// TODO: provide accessible captcha variants
     ?>
     	<!-- Captcha -->
    -	<tr>
    -	<td class="nowrap none center">
    +	<div class="trinputlogin">
    +	<div class="tagtd nowraponall none center valignmiddle tdinputlogin">
     
    -	<table class="login_table_securitycode centpercent"><tr>
    +	<table class="login_table_securitycode centpercent">
    +	<tr class="valignmiddle">
     	<td>
     	<span class="span-icon-security">
     	<input id="securitycode" placeholder="<?php echo $langs->trans("SecurityCode"); ?>" class="flat input-icon-security width100" type="text" maxlength="5" name="code" tabindex="3" />
    @@ -170,15 +183,17 @@ if ($captcha) {
     	</td>
     	<td><img src="<?php echo DOL_URL_ROOT ?>/core/antispamimage.php" border="0" width="80" height="32" id="img_securitycode" /></td>
     	<td><a href="<?php echo $php_self; ?>" tabindex="4" data-role="button"><?php echo $captcha_refresh; ?></a></td>
    -	</tr></table>
    +	</tr>
    +	</table>
     
    -	</td></tr>
    +	</div></div>
     <?php } ?>
    -</table>
     
    -</div> <!-- end div login-right -->
    +</div>
     
    -</div> <!-- end div login-line1 -->
    +</div> <!-- end div login_right -->
    +
    +</div> <!-- end div login_line1 -->
     
     
     <div id="login_line2" style="clear: both">
    @@ -196,11 +211,12 @@ if ($forgetpasslink || $helpcenterlink)
     	if ($dol_use_jmobile)    $moreparam.=(strpos($moreparam,'?')===false?'?':'&').'dol_use_jmobile='.$dol_use_jmobile;
     
     	echo '<br>';
    -	echo '<div class="center" style="margin-top: 8px;">';
    +	echo '<div class="center" style="margin-top: 15px;">';
     	if ($forgetpasslink) {
    -		echo '<a class="alogin" href="'.DOL_URL_ROOT.'/user/passwordforgotten.php'.$moreparam.'">(';
    +		$url=DOL_URL_ROOT.'/user/passwordforgotten.php'.$moreparam;
    +		if (! empty($conf->global->MAIN_PASSWORD_FORGOTLINK)) $url=$conf->global->MAIN_PASSWORD_FORGOTLINK;
    +		echo '<a class="alogin" href="'.dol_escape_htmltag($url).'">';
     		echo $langs->trans('PasswordForgotten');
    -		if (! $helpcenterlink) echo ')';
     		echo '</a>';
     	}
     
    @@ -210,9 +226,8 @@ if ($forgetpasslink || $helpcenterlink)
     		$url=DOL_URL_ROOT.'/support/index.php'.$moreparam;
     		if (! empty($conf->global->MAIN_HELPCENTER_LINKTOUSE)) $url=$conf->global->MAIN_HELPCENTER_LINKTOUSE;
     		echo '<a class="alogin" href="'.dol_escape_htmltag($url).'" target="_blank">';
    -		if (! $forgetpasslink) echo '(';
     		echo $langs->trans('NeedHelpCenter');
    -		echo ')</a>';
    +		echo '</a>';
     	}
     	echo '</div>';
     }
    diff --git a/htdocs/core/tpl/notes.tpl.php b/htdocs/core/tpl/notes.tpl.php
    index 39132dd1af7..39e5c545f1b 100644
    --- a/htdocs/core/tpl/notes.tpl.php
    +++ b/htdocs/core/tpl/notes.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012      Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012      Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Florian Henry	   <florian.henry@open-concept.pro>
      * Copyright (C) 2014-2017 Laurent Destailleur <eldy@destailleur.fr>
      *
    diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php
    index 61818d4deb9..2489a40c5d7 100644
    --- a/htdocs/core/tpl/objectline_create.tpl.php
    +++ b/htdocs/core/tpl/objectline_create.tpl.php
    @@ -1,11 +1,12 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2014	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2012-2013	Christophe Battarel	<christophe.battarel@altairis.fr>
      * Copyright (C) 2012       Cédric Salvador     <csalvador@gpcsolutions.fr>
      * Copyright (C) 2014		Florian Henry		<florian.henry@open-concept.pro>
      * Copyright (C) 2014       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2015-2016	Marcos García		<marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -107,7 +108,7 @@ if ($nolinesbefore) {
     	if ($object->element == 'supplier_proposal' || $object->element == 'order_supplier' || $object->element == 'invoice_supplier')	// We must have same test in printObjectLines
     	{
     	?>
    -		<td class="linecolrefsupplier" align="right"><span id="title_fourn_ref"><?php echo $langs->trans('SupplierRef'); ?></span></td>
    +		<td class="linecolrefsupplier"><span id="title_fourn_ref"><?php echo $langs->trans('SupplierRef'); ?></span></td>
     	<?php } ?>
     	<td class="linecolvat" align="right"><span id="title_vat"><?php echo $langs->trans('VAT'); ?></span></td>
     	<td class="linecoluht" align="right"><span id="title_up_ht"><?php echo $langs->trans('PriceUHT'); ?></span></td>
    @@ -159,6 +160,7 @@ if ($nolinesbefore) {
     ?>
     <tr class="pair nodrag nodrop nohoverpair<?php echo ($nolinesbefore || $object->element=='contrat')?'':' liste_titre_create'; ?>">
     <?php
    +// Adds a line numbering column
     if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) {
     	$coldisplay=2;
     	?>
    @@ -481,16 +483,16 @@ if ((! empty($conf->service->enabled) || ($object->element == 'contrat')) && $da
     	if (! empty($object->element) && $object->element == 'contrat')
     	{
     		print $langs->trans("DateStartPlanned").' ';
    -		$form->select_date($date_start,"date_start",$usehm,$usehm,1,"addproduct");
    +		print $form->selectDate($date_start,"date_start",$usehm,$usehm,1,"addproduct");
     		print ' &nbsp; '.$langs->trans("DateEndPlanned").' ';
    -		$form->select_date($date_end,"date_end",$usehm,$usehm,1,"addproduct");
    +		print $form->selectDate($date_end,"date_end",$usehm,$usehm,1,"addproduct");
     	}
     	else
     	{
     		echo $langs->trans('ServiceLimitedDuration').' '.$langs->trans('From').' ';
    -		echo $form->select_date($date_start,'date_start',empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1,empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1,1,"addproduct",1,0,1);
    +		print $form->selectDate($date_start, 'date_start', empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1, empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1, 1, "addproduct", 1, 0);
     		echo ' '.$langs->trans('to').' ';
    -		echo $form->select_date($date_end,'date_end',empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1,empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1,1,"addproduct",1,0,1);
    +		print $form->selectDate($date_end, 'date_end', empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1, empty($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?0:1, 1, "addproduct", 1, 0);
     	};
     	print '<script type="text/javascript">';
     	if (!$date_start) {
    diff --git a/htdocs/core/tpl/objectline_edit.tpl.php b/htdocs/core/tpl/objectline_edit.tpl.php
    index d3dc9807c5a..ebb2863dbfa 100644
    --- a/htdocs/core/tpl/objectline_edit.tpl.php
    +++ b/htdocs/core/tpl/objectline_edit.tpl.php
    @@ -1,10 +1,11 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2012		Christophe Battarel	<christophe.battarel@altairis.fr>
      * Copyright (C) 2012       Cédric Salvador     <csalvador@gpcsolutions.fr>
      * Copyright (C) 2012-2014  Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2013		Florian Henry		<florian.henry@open-concept.pro>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -258,9 +259,9 @@ if (!empty($extrafieldsline))
     	<td colspan="<?php echo 7+$colspan ?>"><?php echo $langs->trans('ServiceLimitedDuration').' '.$langs->trans('From').' '; ?>
     	<?php
     	$hourmin=(isset($conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE)?$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE:'');
    -	echo $form->select_date($line->date_start,'date_start',$hourmin,$hourmin,$line->date_start?0:1,"updateligne",1,0,1);
    -	echo ' '.$langs->trans('to').' ';
    -	echo $form->select_date($line->date_end,'date_end',$hourmin,$hourmin,$line->date_end?0:1,"updateligne",1,0,1);
    +	print $form->selectDate($line->date_start, 'date_start', $hourmin, $hourmin, $line->date_start?0:1, "updateline", 1, 0);
    +	print ' '.$langs->trans('to').' ';
    +	print $form->selectDate($line->date_end, 'date_end', $hourmin, $hourmin, $line->date_end?0:1, "updateline", 1, 0);
     	print '<script type="text/javascript">';
     	if (!$line->date_start) {
     		if (isset($conf->global->MAIN_DEFAULT_DATE_START_HOUR)) {
    diff --git a/htdocs/core/tpl/objectline_view.tpl.php b/htdocs/core/tpl/objectline_view.tpl.php
    index 313a4ee4def..aeaa4cf9959 100644
    --- a/htdocs/core/tpl/objectline_view.tpl.php
    +++ b/htdocs/core/tpl/objectline_view.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2013	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2013	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2012-2013	Christophe Battarel	<christophe.battarel@altairis.fr>
      * Copyright (C) 2012       Cédric Salvador     <csalvador@gpcsolutions.fr>
    @@ -66,7 +66,7 @@ $domData .= ' data-product_type="'.$line->product_type.'"';
     ?>
     <?php $coldisplay=0; ?>
     <!-- BEGIN PHP TEMPLATE objectline_view.tpl.php -->
    -<tr <?php echo 'id="row-'.$line->id.'" '.$bcdd[$var]; echo $domData; ?> >
    +<tr  id="row-<?php echo $line->id?>" class="drag drop oddeven" <?php echo $domData; ?> >
     	<?php if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER)) { ?>
     	<td class="linecolnum" align="center"><?php $coldisplay++; ?><?php echo ($i+1); ?></td>
     	<?php } ?>
    @@ -292,7 +292,7 @@ $domData .= ' data-product_type="'.$line->product_type.'"';
     	</td>
     
     	<?php
    -	if ($num > 1 && empty($conf->browser->phone) && ($this->situation_counter == 1 || !$this->situation_cycle_ref) && empty($disablemove)) { ?>
    +	if ($num > 1 && $conf->browser->layout != 'phone' && ($this->situation_counter == 1 || !$this->situation_cycle_ref) && empty($disablemove)) { ?>
     	<td align="center" class="linecolmove tdlineupdown"><?php $coldisplay++; ?>
     		<?php if ($i > 0) { ?>
     		<a class="lineupdown" href="<?php echo $_SERVER["PHP_SELF"].'?id='.$this->id.'&amp;action=up&amp;rowid='.$line->id; ?>">
    @@ -306,7 +306,7 @@ $domData .= ' data-product_type="'.$line->product_type.'"';
     		<?php } ?>
     	</td>
         <?php } else { ?>
    -    <td align="center"<?php echo ((empty($conf->browser->phone) && empty($disablemove)) ?' class="linecolmove tdlineupdown"':' class="linecolmove"'); ?>><?php $coldisplay++; ?></td>
    +    <td align="center"<?php echo (($conf->browser->layout != 'phone' && empty($disablemove)) ?' class="linecolmove tdlineupdown"':' class="linecolmove"'); ?>><?php $coldisplay++; ?></td>
     	<?php } ?>
     <?php } else { ?>
     	<td colspan="3"><?php $coldisplay=$coldisplay+3; ?></td>
    @@ -321,7 +321,7 @@ $domData .= ' data-product_type="'.$line->product_type.'"';
     //Line extrafield
     if (!empty($extrafieldsline))
     {
    -	print $line->showOptionals($extrafieldsline, 'view', array('style'=>$bcdd[$var],'colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1);
    +	print $line->showOptionals($extrafieldsline, 'view', array('style'=>'class="drag drop oddeven"','colspan'=>$coldisplay), '', '', empty($conf->global->MAIN_EXTRAFIELDS_IN_ONE_TD)?0:1);
     }
     ?>
     
    diff --git a/htdocs/core/tpl/onlinepaymentlinks.tpl.php b/htdocs/core/tpl/onlinepaymentlinks.tpl.php
    index a425055135f..37639a5f8e6 100644
    --- a/htdocs/core/tpl/onlinepaymentlinks.tpl.php
    +++ b/htdocs/core/tpl/onlinepaymentlinks.tpl.php
    @@ -118,6 +118,28 @@ if (! empty($conf->adherent->enabled))
     	}
     	print '<br>';
     }
    +if (! empty($conf->don->enabled))
    +{
    +	print img_picto('','object_globe.png').' '.$langs->trans("ToOfferALinkForOnlinePaymentOnDonation",$servicename).':<br>';
    +	print '<strong>'.getOnlinePaymentUrl(1,'donation')."</strong><br>\n";
    +	if (! empty($conf->global->PAYMENT_SECURITY_TOKEN) && ! empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE))
    +	{
    +	    $langs->load("members");
    +	    print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
    +	    print $langs->trans("EnterRefToBuildUrl",$langs->transnoentitiesnoconv("Don")).': ';
    +        print '<input type="text class="flat" id="generate_donation_ref" name="generate_donation_ref" value="'.GETPOST('generate_donation_ref','alpha').'" size="10">';
    +        print '<input type="submit" class="none reposition button" value="'.$langs->trans("GetSecuredUrl").'">';
    +        if (GETPOST('generate_donation_ref'))
    +        {
    +            print '<br> -> <strong>';
    +            $url=getOnlinePaymentUrl(0,'donation',GETPOST('generate_donation_ref','alpha'));
    +            print $url;
    +            print "</strong><br>\n";
    +        }
    +        print '</form>';
    +	}
    +	print '<br>';
    +}
     
     if (! empty($conf->use_javascript_ajax))
     {
    @@ -140,3 +162,4 @@ print info_admin($langs->trans("YouCanAddTagOnUrl"));
     
     print '<!-- END PHP TEMPLATE ONLINEPAYMENTLINKS -->';
     
    +
    diff --git a/htdocs/core/tpl/originproductline.tpl.php b/htdocs/core/tpl/originproductline.tpl.php
    index defcdb4fd72..9274359eada 100644
    --- a/htdocs/core/tpl/originproductline.tpl.php
    +++ b/htdocs/core/tpl/originproductline.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin	<regis.houssin@inodbox.com>
     /* Copyright (C) 2017		Charlie Benke	<charlie@patas-monkey.com>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/core/tpl/passwordforgotten.tpl.php b/htdocs/core/tpl/passwordforgotten.tpl.php
    index 2f36d32535f..4d5e1ad948b 100644
    --- a/htdocs/core/tpl/passwordforgotten.tpl.php
    +++ b/htdocs/core/tpl/passwordforgotten.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2009-2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2009-2010 Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2013 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,6 +24,8 @@ if (empty($conf) || ! is_object($conf))
     }
     
     
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +
     header('Cache-Control: Public, must-revalidate');
     header("Content-type: text/html; charset=".$conf->file->character_set_client);
     
    @@ -42,10 +44,17 @@ $php_self.= dol_escape_htmltag($_SERVER["QUERY_STRING"])?'?'.dol_escape_htmltag(
     $titleofpage=$langs->trans('SendNewPassword');
     
     print top_htmlhead('', $titleofpage);
    +
    +
    +$colorbackhmenu1='60,70,100';      // topmenu
    +if (! isset($conf->global->THEME_ELDY_TOPMENU_BACK1)) $conf->global->THEME_ELDY_TOPMENU_BACK1=$colorbackhmenu1;
    +$colorbackhmenu1     =empty($user->conf->THEME_ELDY_ENABLE_PERSONALIZED)?(empty($conf->global->THEME_ELDY_TOPMENU_BACK1)?$colorbackhmenu1:$conf->global->THEME_ELDY_TOPMENU_BACK1)   :(empty($user->conf->THEME_ELDY_TOPMENU_BACK1)?$colorbackhmenu1:$user->conf->THEME_ELDY_TOPMENU_BACK1);
    +$colorbackhmenu1=join(',',colorStringToArray($colorbackhmenu1));    // Normalize value to 'x,y,z'
    +
     ?>
     <!-- BEGIN PHP TEMPLATE PASSWORDFORGOTTEN.TPL.PHP -->
     
    -<body class="body bodylogin"<?php print empty($conf->global->MAIN_LOGIN_BACKGROUND)?'':' style="background-size: cover; background-position: center center; background-attachment: fixed; background-repeat: no-repeat; background-image: url(\''.DOL_URL_ROOT.'/viewimage.php?cache=1&noalt=1&modulepart=mycompany&file='.urlencode($conf->global->MAIN_LOGIN_BACKGROUND).'\')"'; ?>>
    +<body class="body bodylogin"<?php print empty($conf->global->MAIN_LOGIN_BACKGROUND)?'':' style="background-size: cover; background-position: center center; background-attachment: fixed; background-repeat: no-repeat; background-image: url(\''.DOL_URL_ROOT.'/viewimage.php?cache=1&noalt=1&modulepart=mycompany&file='.urlencode('logos/'.$conf->global->MAIN_LOGIN_BACKGROUND).'\')"'; ?>>
     
     <?php if (empty($conf->dol_use_jmobile)) { ?>
     <script type="text/javascript">
    @@ -57,7 +66,7 @@ $(document).ready(function () {
     <?php } ?>
     
     
    -<div class="login_center center">
    +<div class="login_center center"<?php print empty($conf->global->MAIN_LOGIN_BACKGROUND)?' style="background-size: cover; background-position: center center; background-attachment: fixed; background-repeat: no-repeat; background-image: linear-gradient(rgb('.$colorbackhmenu1.',0.3), rgb(240,240,240));"':'' ?>>
     <div class="login_vertical_align">
     
     <form id="login" name="login" method="POST" action="<?php echo $php_self; ?>">
    @@ -88,17 +97,17 @@ if ($disablenofollow) echo '</a>';
     
     <div id="login_right">
     
    -<table summary="Login pass" class="centpercent">
    +<div class="tagtable centpercent" title="Login pass" >
     
     <!-- Login -->
    -<tr>
    -<td valign="bottom" class="nowrap center">
    +<div class="trinputlogin">
    +<div class="tagtd nowraponall center valignmiddle tdinputlogin">
     <!-- <span class="span-icon-user">-->
     <span class="fa fa-user">
    -<input type="text" placeholder="<?php echo $langs->trans("Login"); ?>" <?php echo $disabled; ?> id="username" name="username" class="flat input-icon-user minwidth150" value="<?php echo dol_escape_htmltag($username); ?>" tabindex="1" />
     </span>
    -</td>
    -</tr>
    +<input type="text" placeholder="<?php echo $langs->trans("Login"); ?>" <?php echo $disabled; ?> id="username" name="username" class="flat input-icon-user minwidth150" value="<?php echo dol_escape_htmltag($username); ?>" tabindex="1" />
    +</div>
    +</div>
     
     <?php
     if (! empty($morelogincontent)) {
    @@ -125,10 +134,11 @@ if (! empty($morelogincontent)) {
     		else $php_self.='?time='.dol_print_date(dol_now(),'dayhourlog');
     	?>
     	<!-- Captcha -->
    -	<tr>
    -	<td class="tdtop nowrap none center">
    +	<div class="trinputlogin">
    +	<div class="tdinputlogin nowraponall none center valignmiddle tdinputlogin">
     
    -	<table class="login_table_securitycode centpercent"><tr class="valignmiddle">
    +	<table class="login_table_securitycode centpercent">
    +	<tr class="valignmiddle">
     	<td>
     	<!-- <span class="span-icon-security"> -->
     	<span class="nofa">
    @@ -139,12 +149,12 @@ if (! empty($morelogincontent)) {
     	<td><a href="<?php echo $php_self; ?>" tabindex="4"><?php echo $captcha_refresh; ?></a></td>
     	</tr></table>
     
    -	</td></tr>
    +	</div></div>
     <?php } ?>
     
    -</table>
    +</div>
     
    -</div> <!-- end div login right -->
    +</div> <!-- end div login_right -->
     
     </div> <!-- end div login_line1 -->
     
    @@ -155,7 +165,7 @@ if (! empty($morelogincontent)) {
     <br><input type="submit" <?php echo $disabled; ?> class="button" name="button_password" value="<?php echo $langs->trans('SendNewPassword'); ?>" tabindex="4" />
     
     <br>
    -<div align="center" style="margin-top: 8px;">
    +<div align="center" style="margin-top: 15px;">
     	<?php
     	$moreparam='';
     	if (! empty($conf->dol_hide_topmenu))   $moreparam.=(strpos($moreparam,'?')===false?'?':'&').'dol_hide_topmenu='.$conf->dol_hide_topmenu;
    @@ -163,7 +173,7 @@ if (! empty($morelogincontent)) {
     	if (! empty($conf->dol_no_mouse_hover)) $moreparam.=(strpos($moreparam,'?')===false?'?':'&').'dol_no_mouse_hover='.$conf->dol_no_mouse_hover;
     	if (! empty($conf->dol_use_jmobile))    $moreparam.=(strpos($moreparam,'?')===false?'?':'&').'dol_use_jmobile='.$conf->dol_use_jmobile;
     
    -	print '<a class="alogin" href="'.$dol_url_root.'/index.php'.$moreparam.'">('.$langs->trans('BackToLoginPage').')</a>';
    +	print '<a class="alogin" href="'.$dol_url_root.'/index.php'.$moreparam.'">'.$langs->trans('BackToLoginPage').'</a>';
     	?>
     </div>
     
    @@ -174,7 +184,7 @@ if (! empty($morelogincontent)) {
     </form>
     
     
    -<div class="center login_main_home paddingtopbottom<?php echo empty($conf->global->MAIN_LOGIN_BACKGROUND)?'':' backgroundsemitransparent'; ?>" style="max-width: 70%">
    +<div class="center login_main_home divpasswordmessagedesc paddingtopbottom<?php echo empty($conf->global->MAIN_LOGIN_BACKGROUND)?'':' backgroundsemitransparent'; ?>" style="max-width: 70%">
     <?php if ($mode == 'dolibarr' || ! $disabled) { ?>
     	<span class="passwordmessagedesc">
     	<?php echo $langs->trans('SendNewPasswordDesc'); ?>
    diff --git a/htdocs/core/tpl/resource_add.tpl.php b/htdocs/core/tpl/resource_add.tpl.php
    index af1d25aaee1..f9daffe33ed 100644
    --- a/htdocs/core/tpl/resource_add.tpl.php
    +++ b/htdocs/core/tpl/resource_add.tpl.php
    @@ -9,7 +9,7 @@ if (empty($conf) || ! is_object($conf))
     }
     
     
    -require_once(DOL_DOCUMENT_ROOT.'/resource/class/html.formresource.class.php');
    +require_once DOL_DOCUMENT_ROOT.'/resource/class/html.formresource.class.php';
     
     $form = new Form($db);
     $formresources = new FormResource($db);
    @@ -28,7 +28,7 @@ $out .= '<input type="hidden" name="resource_type" value="'.(empty($resource_typ
     $out .= '<div class="tagtd">'.$langs->trans("SelectResource").'</div>';
     $out .= '<div class="tagtd">';
     $events=array();
    -$out .= $formresources->select_resource_list('','fk_resource','',1,1,0,$events,'',2);
    +$out .= $formresources->select_resource_list('','fk_resource','',1,1,0,$events,'',2,null);
     $out .= '</div>';
     
     $out .= '<div class="tagtd"><label>'.$langs->trans('Busy').'</label> '.$form->selectyesno('busy',(isset($_POST['busy'])?$_POST['busy']:1),1).'</div>';
    diff --git a/htdocs/core/tpl/resource_view.tpl.php b/htdocs/core/tpl/resource_view.tpl.php
    index aff342191cb..59491c01b6f 100644
    --- a/htdocs/core/tpl/resource_view.tpl.php
    +++ b/htdocs/core/tpl/resource_view.tpl.php
    @@ -98,7 +98,6 @@ if( (array) $linked_resources && count($linked_resources) > 0)
     			print '</form>';
     		}
     	}
    -
     }
     else {
     	print '<form class="tagtr oddeven">';
    diff --git a/htdocs/core/triggers/dolibarrtriggers.class.php b/htdocs/core/triggers/dolibarrtriggers.class.php
    index 61a89b083f8..a66eb12c78e 100644
    --- a/htdocs/core/triggers/dolibarrtriggers.class.php
    +++ b/htdocs/core/triggers/dolibarrtriggers.class.php
    @@ -80,11 +80,12 @@ abstract class DolibarrTriggers
     	 *
     	 * @param DoliDB $db Database handler
     	 */
    -	public function __construct(DoliDB $db) {
    +    public function __construct(DoliDB $db)
    +    {
     
     		$this->db = $db;
     
    -		if (empty($this->name)) 
    +		if (empty($this->name))
     		{
     			$this->name = preg_replace('/^Interface/i', '', get_class($this));
     		}
    @@ -145,5 +146,4 @@ abstract class DolibarrTriggers
     	 * @return int         				<0 if KO, 0 if no triggered ran, >0 if OK
     	 */
     	abstract function runTrigger($action, $object, User $user, Translate $langs, Conf $conf);
    -
     }
    diff --git a/htdocs/core/triggers/interface_20_all_Logevents.class.php b/htdocs/core/triggers/interface_20_all_Logevents.class.php
    index c2f15bd336d..4d5d7e74280 100644
    --- a/htdocs/core/triggers/interface_20_all_Logevents.class.php
    +++ b/htdocs/core/triggers/interface_20_all_Logevents.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2009	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2017	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2014		Marcos García		<marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -31,9 +31,19 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
      */
     class InterfaceLogevents extends DolibarrTriggers
     {
    +	/**
    +	 * @var string Image of the trigger
    +	 */
     	public $picto = 'technic';
    +
     	public $family = 'core';
    +
     	public $description = "Triggers of this module allows to add security event records inside Dolibarr.";
    +
    +	/**
    +	 * Version of the trigger
    +	 * @var string
    +	 */
     	public $version = self::VERSION_DOLIBARR;
     
     	/**
    @@ -60,7 +70,7 @@ class InterfaceLogevents extends DolibarrTriggers
             $date = dol_now();
     
             // Actions
    -        if ($action == 'USER_LOGIN')
    +        /*if ($action == 'USER_LOGIN')
             {
                 dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
     
    @@ -87,7 +97,7 @@ class InterfaceLogevents extends DolibarrTriggers
                 // Initialisation donnees (date,duree,texte,desc)
                 $text="(UserLogoff,".$object->login.")";
                 $desc="(UserLogoff,".$object->login.")";
    -        }
    +        }*/
             if ($action == 'USER_CREATE')
             {
                 dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
    @@ -202,5 +212,4 @@ class InterfaceLogevents extends DolibarrTriggers
                 return -1;
             }
         }
    -
     }
    diff --git a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php
    index 94aaaeaa542..39b48cd2315 100644
    --- a/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php
    +++ b/htdocs/core/triggers/interface_20_modWorkflow_WorkflowManager.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010      Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010      Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2017 Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2014      Marcos García       <marcosgdf@gmail.com>
      *
    @@ -32,9 +32,18 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
     
     class InterfaceWorkflowManager extends DolibarrTriggers
     {
    +	/**
    +	 * @var string Image of the trigger
    +	 */
     	public $picto = 'technic';
    +
     	public $family = 'core';
     	public $description = "Triggers of this module allows to manage workflows";
    +
    +	/**
    +	 * Version of the trigger
    +	 * @var string
    +	 */
     	public $version = self::VERSION_DOLIBARR;
     
     	/**
    @@ -309,5 +318,4 @@ class InterfaceWorkflowManager extends DolibarrTriggers
     
             return 0;
         }
    -
     }
    diff --git a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php
    index 481df585f3a..09725355f43 100644
    --- a/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php
    +++ b/htdocs/core/triggers/interface_50_modAgenda_ActionsAuto.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2017	Laurent Destailleur 	<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2017	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2014	Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2013		Cedric GROSS			<c.gross@kreiz-it.fr>
      * Copyright (C) 2014		Marcos García		<marcosgdf@gmail.com>
    @@ -36,7 +36,16 @@ class InterfaceActionsAuto extends DolibarrTriggers
     {
     	public $family = 'agenda';
     	public $description = "Triggers of this module add actions in agenda according to setup made in agenda setup.";
    +
    +	/**
    +	 * Version of the trigger
    +	 * @var string
    +	 */
     	public $version = self::VERSION_DOLIBARR;
    +
    +	/**
    +	 * @var string Image of the trigger
    +	 */
     	public $picto = 'action';
     
     	/**
    @@ -78,9 +87,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		// Actions
     		if ($action == 'COMPANY_CREATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("companies");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","companies"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("NewCompanyToDolibarr",$object->name);
                 $object->actionmsg=$langs->transnoentities("NewCompanyToDolibarr",$object->name);
    @@ -91,9 +99,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
             elseif ($action == 'COMPANY_SENTBYMAIL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
                 if (empty($object->actionmsg2)) dol_syslog('Trigger called with property actionmsg2 on object not defined', LOG_ERR);
     
    @@ -102,9 +109,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
             elseif ($action == 'CONTRACT_VALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("contracts");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","contracts"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ContractValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("ContractValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -113,9 +119,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'CONTRACT_SENTBYMAIL')
     		{
    -			$langs->load("agenda");
    -			$langs->load("other");
    -			$langs->load("contract");
    +			// Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","contracts"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ContractSentByEMail",$object->ref);
     			if (empty($object->actionmsg))
    @@ -128,9 +133,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'PROPAL_VALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("propal");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","propal"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("PropalValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("PropalValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -139,9 +143,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
             elseif ($action == 'PROPAL_SENTBYMAIL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("propal");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","propal"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ProposalSentByEMail",$object->ref);
                 if (empty($object->actionmsg))
    @@ -154,9 +157,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'PROPAL_CLOSE_SIGNED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("propal");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","propal"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("PropalClosedSignedInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("PropalClosedSignedInDolibarr",$object->ref);
    @@ -165,9 +167,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'PROPAL_CLASSIFY_BILLED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("propal");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","propal"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("PropalClassifiedBilledInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("PropalClassifiedBilledInDolibarr",$object->ref);
    @@ -176,9 +177,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'PROPAL_CLOSE_REFUSED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("propal");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","propal"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("PropalClosedRefusedInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("PropalClosedRefusedInDolibarr",$object->ref);
    @@ -187,8 +187,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_VALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -197,9 +197,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_CLOSE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderDeliveredInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("OrderDeliveredInDolibarr",$object->ref);
    @@ -208,9 +207,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_CLASSIFY_BILLED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderBilledInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("OrderBilledInDolibarr",$object->ref);
    @@ -219,9 +217,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_CANCEL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderCanceledInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("OrderCanceledInDolibarr",$object->ref);
    @@ -230,9 +227,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_SENTBYMAIL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderSentByEMail",$object->ref);
                 if (empty($object->actionmsg))
    @@ -245,9 +241,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'BILL_VALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("InvoiceValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -256,9 +251,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'BILL_UNVALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    +           // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceBackToDraftInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("InvoiceBackToDraftInDolibarr",$object->ref);
    @@ -267,9 +261,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
             elseif ($action == 'BILL_SENTBYMAIL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceSentByEMail",$object->ref);
                 if (empty($object->actionmsg))
    @@ -282,9 +275,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'BILL_PAYED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills"));
     
                 // Values for this action can't be defined by caller.
                 $object->actionmsg2=$langs->transnoentities("InvoicePaidInDolibarr",$object->ref);
    @@ -294,9 +286,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'BILL_CANCEL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceCanceledInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("InvoiceCanceledInDolibarr",$object->ref);
    @@ -305,9 +296,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'FICHINTER_CREATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("interventions");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","interventions"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InterventionCreatedInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("InterventionCreatedInDolibarr",$object->ref);
    @@ -318,9 +308,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'FICHINTER_VALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("interventions");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","interventions"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InterventionValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("InterventionValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -331,9 +320,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'FICHINTER_MODIFY')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("interventions");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","interventions"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InterventionModifiedInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("InterventionModifiedInDolibarr",$object->ref);
    @@ -344,9 +332,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'FICHINTER_SENTBYMAIL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("interventions");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","interventions"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InterventionSentByEMail",$object->ref);
                 if (empty($object->actionmsg))
    @@ -359,9 +346,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
             elseif ($action == 'FICHINTER_CLASSIFY_BILLED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("interventions");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","interventions"));
     
                	if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InterventionClassifiedBilledInDolibarr",$object->ref);
                	$object->actionmsg=$langs->transnoentities("InterventionClassifiedBilledInDolibarr",$object->ref);
    @@ -370,9 +356,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
     	    elseif ($action == 'FICHINTER_CLASSIFY_UNBILLED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("interventions");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","interventions"));
     
                	if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InterventionClassifiedUnbilledInDolibarr",$object->ref);
                	$object->actionmsg=$langs->transnoentities("InterventionClassifiedUnbilledInDolibarr",$object->ref);
    @@ -381,9 +366,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
             elseif ($action == 'FICHINTER_DELETE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("interventions");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","interventions"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InterventionDeletedInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("InterventionDeletedInDolibarr",$object->ref);
    @@ -394,9 +378,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
             elseif ($action == 'SHIPPING_VALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("sendings");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","sendings"));
     
             	if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ShippingValidated",($object->newref?$object->newref:$object->ref));
             	if (empty($object->actionmsg))
    @@ -409,9 +392,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
     		elseif ($action == 'SHIPPING_SENTBYMAIL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("sendings");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","sendings"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ShippingSentByEMail",$object->ref);
                 if (empty($object->actionmsg))
    @@ -424,9 +406,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'PROPOSAL_SUPPLIER_VALIDATE')
     		{
    -			$langs->load("agenda");
    -			$langs->load("other");
    -			$langs->load("propal");
    +			// Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","propal"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("PropalValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
     			$object->actionmsg=$langs->transnoentities("PropalValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -435,9 +416,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'PROPOSAL_SUPPLIER_SENTBYMAIL')
     		{
    -			$langs->load("agenda");
    -			$langs->load("other");
    -			$langs->load("propal");
    +			// Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","propal"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ProposalSentByEMail",$object->ref);
     			if (empty($object->actionmsg))
    @@ -450,9 +430,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'PROPOSAL_SUPPLIER_CLOSE_SIGNED')
     		{
    -			$langs->load("agenda");
    -			$langs->load("other");
    -			$langs->load("propal");
    +			// Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","propal"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("PropalClosedSignedInDolibarr",$object->ref);
     			$object->actionmsg=$langs->transnoentities("PropalClosedSignedInDolibarr",$object->ref);
    @@ -461,9 +440,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'PROPOSAL_SUPPLIER_CLOSE_REFUSED')
     		{
    -			$langs->load("agenda");
    -			$langs->load("other");
    -			$langs->load("propal");
    +			// Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","propal"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("PropalClosedRefusedInDolibarr",$object->ref);
     			$object->actionmsg=$langs->transnoentities("PropalClosedRefusedInDolibarr",$object->ref);
    @@ -472,9 +450,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_SUPPLIER_CREATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderCreatedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("OrderCreatedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -483,9 +460,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_SUPPLIER_VALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("OrderValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -494,9 +470,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_SUPPLIER_APPROVE')
     		{
    -            $langs->load("agenda");
    -		    $langs->load("other");
    -			$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderApprovedInDolibarr",$object->ref);
     			$object->actionmsg=$langs->transnoentities("OrderApprovedInDolibarr",$object->ref);
    @@ -505,9 +480,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_SUPPLIER_REFUSE')
     		{
    -            $langs->load("agenda");
    -		    $langs->load("other");
    -			$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("OrderRefusedInDolibarr",$object->ref);
     			$object->actionmsg=$langs->transnoentities("OrderRefusedInDolibarr",$object->ref);
    @@ -516,9 +490,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_SUPPLIER_SUBMIT')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("SupplierOrderSubmitedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("SupplierOrderSubmitedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -527,9 +500,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_SUPPLIER_RECEIVE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("SupplierOrderReceivedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("SupplierOrderReceivedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -538,10 +510,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'ORDER_SUPPLIER_SENTBYMAIL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    -            $langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("SupplierOrderSentByEMail",$object->ref);
                 if (empty($object->actionmsg))
    @@ -554,10 +524,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
     		elseif ($action == 'ORDER_SUPPLIER_CLASSIFY_BILLED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    -            $langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("SupplierOrderClassifiedBilled",$object->ref);
                 if (empty($object->actionmsg))
    @@ -569,9 +537,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
     		elseif ($action == 'BILL_SUPPLIER_VALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
                 $object->actionmsg=$langs->transnoentities("InvoiceValidatedInDolibarr",($object->newref?$object->newref:$object->ref));
    @@ -580,9 +547,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'BILL_SUPPLIER_UNVALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceBackToDraftInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("InvoiceBackToDraftInDolibarr",$object->ref);
    @@ -591,10 +557,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
             elseif ($action == 'BILL_SUPPLIER_SENTBYMAIL')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    -            $langs->load("orders");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills","orders"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("SupplierInvoiceSentByEMail",$object->ref);
                 if (empty($object->actionmsg))
    @@ -607,9 +571,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
     		elseif ($action == 'BILL_SUPPLIER_PAYED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoicePaidInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("InvoicePaidInDolibarr",$object->ref);
    @@ -618,9 +581,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
     		elseif ($action == 'BILL_SUPPLIER_CANCELED')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("bills");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","bills"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("InvoiceCanceledInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("InvoiceCanceledInDolibarr",$object->ref);
    @@ -631,9 +593,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             // Members
             elseif ($action == 'MEMBER_VALIDATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("members");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","members"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("MemberValidatedInDolibarr",$object->getFullName($langs));
                 $object->actionmsg=$langs->transnoentities("MemberValidatedInDolibarr",$object->getFullName($langs));
    @@ -644,9 +605,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
     		elseif ($action == 'MEMBER_MODIFY')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("members");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","members"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("MemberModifiedInDolibarr",$object->getFullName($langs));
                 $object->actionmsg=$langs->transnoentities("MemberModifiedInDolibarr",$object->getFullName($langs));
    @@ -657,9 +617,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		}
             elseif ($action == 'MEMBER_SUBSCRIPTION_CREATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("members");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","members"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("MemberSubscriptionAddedInDolibarr",$object->ref,$object->getFullName($langs));
                 $object->actionmsg=$langs->transnoentities("MemberSubscriptionAddedInDolibarr",$object->ref,$object->getFullName($langs));
    @@ -673,9 +632,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
             elseif ($action == 'MEMBER_SUBSCRIPTION_MODIFY')
             {
    -        	$langs->load("agenda");
    -        	$langs->load("other");
    -        	$langs->load("members");
    +        	// Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","members"));
     
             	if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("MemberSubscriptionModifiedInDolibarr",$object->ref,$object->getFullName($langs));
             	$object->actionmsg=$langs->transnoentities("MemberSubscriptionModifiedInDolibarr",$object->ref,$object->getFullName($langs));
    @@ -689,9 +647,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
             elseif ($action == 'MEMBER_SUBSCRIPTION_DELETE')
             {
    -        	$langs->load("agenda");
    -        	$langs->load("other");
    -        	$langs->load("members");
    +        	// Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","members"));
     
             	if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("MemberSubscriptionDeletedInDolibarr",$object->ref,$object->getFullName($langs));
             	$object->actionmsg=$langs->transnoentities("MemberSubscriptionDeletedInDolibarr",$object->ref,$object->getFullName($langs));
    @@ -705,9 +662,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
             elseif ($action == 'MEMBER_RESILIATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("members");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","members"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("MemberResiliatedInDolibarr",$object->getFullName($langs));
                 $object->actionmsg=$langs->transnoentities("MemberResiliatedInDolibarr",$object->getFullName($langs));
    @@ -718,9 +674,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
             elseif ($action == 'MEMBER_DELETE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("members");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","members"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("MemberDeletedInDolibarr",$object->getFullName($langs));
                 $object->actionmsg=$langs->transnoentities("MemberDeletedInDolibarr",$object->getFullName($langs));
    @@ -733,9 +688,8 @@ class InterfaceActionsAuto extends DolibarrTriggers
             // Projects
             elseif ($action == 'PROJECT_CREATE')
             {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -        	$langs->load("projects");
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","projects"));
     
             	if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ProjectCreatedInDolibarr",$object->ref);
             	$object->actionmsg=$langs->transnoentities("ProjectCreatedInDolibarr",$object->ref);
    @@ -743,10 +697,10 @@ class InterfaceActionsAuto extends DolibarrTriggers
     
             	$object->sendtoid=0;
             }
    -        elseif($action == 'PROJECT_VALIDATE') {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("projects");
    +        elseif($action == 'PROJECT_VALIDATE')
    +        {
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","projects"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ProjectValidatedInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("ProjectValidatedInDolibarr",$object->ref);
    @@ -754,10 +708,10 @@ class InterfaceActionsAuto extends DolibarrTriggers
     
                 $object->sendtoid=0;
             }
    -        elseif($action == 'PROJECT_MODIFY') {
    -            $langs->load("agenda");
    -            $langs->load("other");
    -            $langs->load("projects");
    +        elseif($action == 'PROJECT_MODIFY')
    +        {
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","projects"));
     
                 if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("ProjectModifiedInDolibarr",$object->ref);
                 $object->actionmsg=$langs->transnoentities("ProjectModifiedInDolibarr",$object->ref);
    @@ -767,10 +721,10 @@ class InterfaceActionsAuto extends DolibarrTriggers
             }
     
     		// Project tasks
    -		elseif($action == 'TASK_CREATE') {
    -            $langs->load("agenda");
    -		    $langs->load("other");
    -			$langs->load("projects");
    +		elseif($action == 'TASK_CREATE')
    +		{
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","projects"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("TaskCreatedInDolibarr",$object->ref);
     			$object->actionmsg=$langs->transnoentities("TaskCreatedInDolibarr",$object->ref);
    @@ -779,10 +733,10 @@ class InterfaceActionsAuto extends DolibarrTriggers
     			$object->sendtoid=0;
     		}
     
    -		elseif($action == 'TASK_MODIFY') {
    -            $langs->load("agenda");
    -		    $langs->load("other");
    -			$langs->load("projects");
    +		elseif($action == 'TASK_MODIFY')
    +		{
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","projects"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("TaskModifiedInDolibarr",$object->ref);
     			$object->actionmsg=$langs->transnoentities("TaskModifieddInDolibarr",$object->ref);
    @@ -791,10 +745,10 @@ class InterfaceActionsAuto extends DolibarrTriggers
     			$object->sendtoid=0;
     		}
     
    -		elseif($action == 'TASK_DELETE') {
    -            $langs->load("agenda");
    -		    $langs->load("other");
    -			$langs->load("projects");
    +		elseif($action == 'TASK_DELETE')
    +		{
    +            // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other","projects"));
     
     			if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities("TaskDeletedInDolibarr",$object->ref);
     			$object->actionmsg=$langs->transnoentities("TaskDeletedInDolibarr",$object->ref);
    @@ -803,10 +757,11 @@ class InterfaceActionsAuto extends DolibarrTriggers
     			$object->sendtoid=0;
     		}
     		// TODO Merge all previous cases into this generic one
    -		else {
    +		else
    +		{
     		    // Note: We are here only if $conf->global->MAIN_AGENDA_ACTIONAUTO_action is on (tested at begining of this function)
    -		    $langs->load("agenda");
    -		    $langs->load("other");
    +		    // Load translation files required by the page
    +            $langs->loadLangs(array("agenda","other"));
     
     		    if (empty($object->actionmsg2)) $object->actionmsg2=$langs->transnoentities($action."InDolibarr",$object->ref);
     		    if (empty($object->actionmsg))  $object->actionmsg=$langs->transnoentities($action."InDolibarr",$object->ref);
    @@ -814,7 +769,7 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		    $object->sendtoid=0;
     		}
     
    -		$object->actionmsg.="\n".$langs->transnoentities("Author").': '.$user->login;
    +		$object->actionmsg = $langs->transnoentities("Author").': '.$user->login."\n".$object->actionmsg;
     
     		dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
     
    @@ -863,7 +818,7 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		$actioncomm->type_code   = $object->actiontypecode;		// Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...)
     		$actioncomm->code        = 'AC_'.$action;
     		$actioncomm->label       = $object->actionmsg2;
    -		$actioncomm->note        = $object->actionmsg;          // TODO Replace with $actioncomm->email_msgid ? $object->email_content : $object->actionmsg
    +		$actioncomm->note        = $object->actionmsg;          // TODO Replace with ($actioncomm->email_msgid ? $object->email_content : $object->actionmsg)
     		$actioncomm->fk_project  = $projectid;
     		$actioncomm->datep       = $now;
     		$actioncomm->datef       = $now;
    @@ -876,19 +831,27 @@ class InterfaceActionsAuto extends DolibarrTriggers
     		$actioncomm->contactid   = $contactforaction->id;
     		$actioncomm->authorid    = $user->id;   // User saving action
     		$actioncomm->userownerid = $user->id;	// Owner of action
    -        // Fields when action is en email (content should be added into note)
    -		$actioncomm->email_msgid = $object->email_msgid;
    -		$actioncomm->email_from  = $object->email_from;
    -		$actioncomm->email_sender= $object->email_sender;
    -		$actioncomm->email_to    = $object->email_to;
    -		$actioncomm->email_tocc  = $object->email_tocc;
    -		$actioncomm->email_tobcc = $object->email_tobcc;
    +        // Fields defined when action is an email (content should be into object->actionmsg to be added into note, subject into object->actionms2 to be added into label)
    +		$actioncomm->email_msgid   = $object->email_msgid;
    +		$actioncomm->email_from    = $object->email_from;
    +		$actioncomm->email_sender  = $object->email_sender;
    +		$actioncomm->email_to      = $object->email_to;
    +		$actioncomm->email_tocc    = $object->email_tocc;
    +		$actioncomm->email_tobcc   = $object->email_tobcc;
     		$actioncomm->email_subject = $object->email_subject;
    -		$actioncomm->errors_to   = $object->errors_to;
    +		$actioncomm->errors_to     = $object->errors_to;
     
    -		$actioncomm->fk_element  = $elementid;
    -		$actioncomm->elementtype = $elementtype;
    +		// Object linked (if link is for thirdparty, contact, project it is a recording error. We should not have links in link table
    +		// for such objects because there is already a dedicated field into table llx_actioncomm.
    +		if (! in_array($elementtype, array('societe','contact','project')))
    +		{
    +			$actioncomm->fk_element  = $elementid;
    +			$actioncomm->elementtype = $elementtype;
    +		}
     
    +		if (property_exists($object,'attachedfiles') && is_array($object->attachedfiles) && count($object->attachedfiles)>0) {
    +			$actioncomm->attachedfiles=$object->attachedfiles;
    +		}
     		if (property_exists($object,'sendtouserid') && is_array($object->sendtouserid) && count($object->sendtouserid)>0) {
     			$actioncomm->userassigned=$object->sendtouserid;
     		}
    @@ -927,5 +890,4 @@ class InterfaceActionsAuto extends DolibarrTriggers
                 return -1;
     		}
         }
    -
     }
    diff --git a/htdocs/core/triggers/interface_50_modBlockedlog_ActionsBlockedLog.class.php b/htdocs/core/triggers/interface_50_modBlockedlog_ActionsBlockedLog.class.php
    index 2750834bac6..f2c19394df9 100644
    --- a/htdocs/core/triggers/interface_50_modBlockedlog_ActionsBlockedLog.class.php
    +++ b/htdocs/core/triggers/interface_50_modBlockedlog_ActionsBlockedLog.class.php
    @@ -32,7 +32,16 @@ class InterfaceActionsBlockedLog extends DolibarrTriggers
     {
     	public $family = 'system';
     	public $description = "Triggers of this module add action for BlockedLog module.";
    +
    +	/**
    +	 * Version of the trigger
    +	 * @var string
    +	 */
     	public $version = self::VERSION_DOLIBARR;
    +
    +	/**
    +	 * @var string Image of the trigger
    +	 */
     	public $picto = 'technic';
     
     	/**
    @@ -133,5 +142,4 @@ class InterfaceActionsBlockedLog extends DolibarrTriggers
     			return 1;
     		}
         }
    -
     }
    diff --git a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php
    index 7677c1743a8..a5ef414a6e5 100644
    --- a/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php
    +++ b/htdocs/core/triggers/interface_50_modLdap_Ldapsynchro.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2014		Marcos García		<marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -33,7 +33,16 @@ class InterfaceLdapsynchro extends DolibarrTriggers
     {
     	public $family = 'ldap';
     	public $description = "Triggers of this module allows to synchronize Dolibarr toward a LDAP database.";
    +
    +	/**
    +	 * Version of the trigger
    +	 * @var string
    +	 */
     	public $version = self::VERSION_DOLIBARR;
    +
    +	/**
    +	 * @var string Image of the trigger
    +	 */
     	public $picto = 'technic';
     
     	/**
    @@ -799,5 +808,4 @@ class InterfaceLdapsynchro extends DolibarrTriggers
     
     		return $result;
     	}
    -
     }
    diff --git a/htdocs/core/triggers/interface_50_modMailmanspip_Mailmanspipsynchro.class.php b/htdocs/core/triggers/interface_50_modMailmanspip_Mailmanspipsynchro.class.php
    index c5f704fdcb1..0197e6bf280 100644
    --- a/htdocs/core/triggers/interface_50_modMailmanspip_Mailmanspipsynchro.class.php
    +++ b/htdocs/core/triggers/interface_50_modMailmanspip_Mailmanspipsynchro.class.php
    @@ -31,7 +31,16 @@ class InterfaceMailmanSpipsynchro extends DolibarrTriggers
     {
     	public $family = 'mailmanspip';
     	public $description = "Triggers of this module allows to synchronize Mailman an Spip.";
    +
    +	/**
    +	 * Version of the trigger
    +	 * @var string
    +	 */
     	public $version = self::VERSION_DOLIBARR;
    +
    +	/**
    +	 * @var string Image of the trigger
    +	 */
     	public $picto = 'technic';
     
     	/**
    @@ -148,5 +157,4 @@ class InterfaceMailmanSpipsynchro extends DolibarrTriggers
     
     		return 0;
         }
    -
     }
    diff --git a/htdocs/core/triggers/interface_50_modNotification_Notification.class.php b/htdocs/core/triggers/interface_50_modNotification_Notification.class.php
    index 8698b08a5c3..41dada263b4 100644
    --- a/htdocs/core/triggers/interface_50_modNotification_Notification.class.php
    +++ b/htdocs/core/triggers/interface_50_modNotification_Notification.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2011      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2011      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013-2014 Marcos García        <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -32,10 +32,20 @@ class InterfaceNotification extends DolibarrTriggers
     {
     	public $family = 'notification';
     	public $description = "Triggers of this module send email notifications according to Notification module setup.";
    +
    +	/**
    +	 * Version of the trigger
    +	 * @var string
    +	 */
     	public $version = self::VERSION_DOLIBARR;
    +
    +	/**
    +	 * @var string Image of the trigger
    +	 */
     	public $picto = 'email';
     
    -	var $listofmanagedevents=array(
    +	// @TODO Defined also into notify.class.php)
    +	public $listofmanagedevents=array(
     		'BILL_VALIDATE',
     		'BILL_PAYED',
     		'ORDER_VALIDATE',
    @@ -46,8 +56,12 @@ class InterfaceNotification extends DolibarrTriggers
     		'ORDER_SUPPLIER_VALIDATE',
     		'ORDER_SUPPLIER_APPROVE',
     		'ORDER_SUPPLIER_REFUSE',
    -		'SHIPPING_VALIDATE'
    -   	);
    +		'SHIPPING_VALIDATE',
    +		'EXPENSE_REPORT_VALIDATE',
    +		'EXPENSE_REPORT_APPROVE',
    +		'HOLIDAY_VALIDATE',
    +		'HOLIDAY_APPROVE'
    +	);
     
     	/**
     	 * Function called when a Dolibarrr business event is done.
    @@ -103,7 +117,7 @@ class InterfaceNotification extends DolibarrTriggers
     
     				$qualified=0;
     				// Check is this event is supported by notification module
    -				if (in_array($obj->code,$this->listofmanagedevents)) $qualified=1;
    +				if (in_array($obj->code, $this->listofmanagedevents)) $qualified=1;
     				// Check if module for this event is active
     				if ($qualified)
     				{
    @@ -116,7 +130,7 @@ class InterfaceNotification extends DolibarrTriggers
     					elseif ($element == 'withdraw' && empty($conf->prelevement->enabled)) $qualified=0;
     					elseif ($element == 'shipping' && empty($conf->expedition->enabled)) $qualified=0;
     					elseif ($element == 'member' && empty($conf->adherent->enabled)) $qualified=0;
    -					elseif (! in_array($element,array('order_supplier','invoice_supplier','withdraw','shipping','member')) && empty($conf->$element->enabled)) $qualified=0;
    +					elseif (! in_array($element,array('order_supplier','invoice_supplier','withdraw','shipping','member','expensereport')) && empty($conf->$element->enabled)) $qualified=0;
     				}
     
     				if ($qualified)
    @@ -131,5 +145,4 @@ class InterfaceNotification extends DolibarrTriggers
     
     		return $ret;
     	}
    -
     }
    diff --git a/htdocs/core/triggers/interface_50_modTicket_TicketEmail.class.php b/htdocs/core/triggers/interface_50_modTicket_TicketEmail.class.php
    index 56bbd897f3d..f8f5595887d 100644
    --- a/htdocs/core/triggers/interface_50_modTicket_TicketEmail.class.php
    +++ b/htdocs/core/triggers/interface_50_modTicket_TicketEmail.class.php
    @@ -30,6 +30,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
      */
     class InterfaceTicketEmail extends DolibarrTriggers
     {
    +    /**
    +     * @var DoliDB Database handler.
    +     */
         public $db;
     
         /**
    @@ -153,7 +156,7 @@ class InterfaceTicketEmail extends DolibarrTriggers
     	                        include_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php';
     		                    $mailfile = new CMailFile($subject, $sendto, $from, $message, $filepath, $mimetype, $filename, '', '', 0, -1);
     		                    if ($mailfile->error) {
    -	                            setEventMessage($mailfile->error, 'errors');
    +	                            setEventMessages($mailfile->error, $mailfile->errors, 'errors');
     		                    } else {
     		                        $result = $mailfile->sendfile();
     		                    }
    diff --git a/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php b/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php
    index 3f724e5b096..8282a09a43d 100644
    --- a/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php
    +++ b/htdocs/core/triggers/interface_80_modStripe_Stripe.class.php
    @@ -17,7 +17,7 @@
      */
     
     /**
    - *  \file       htdocs/core/triggers/interface_50_modStripe_Stripe.class.php
    + *  \file       htdocs/core/triggers/interface_80_modStripe_Stripe.class.php
      *  \ingroup    core
      *  \brief      Fichier
      *  \remarks    Son propre fichier d'actions peut etre cree par recopie de celui-ci:
    @@ -35,6 +35,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/triggers/dolibarrtriggers.class.php';
      */
     class InterfaceStripe
     {
    +    /**
    +     * @var DoliDB Database handler.
    +     */
         public $db;
     
         /**
    @@ -111,13 +114,12 @@ class InterfaceStripe
     	 */
     	public function runTrigger($action, $object, User $user, Translate $langs, Conf $conf)
     	{
    -		// Put here code you want to execute when a Dolibarr business events occurs.
    +		// Put here code you want to execute when a Dolibarr business event occurs.
     		// Data and type of action are stored into $object and $action
     		global $langs, $db, $conf;
    -		$langs->load("members");
    -		$langs->load("users");
    -		$langs->load("mails");
    -		$langs->load('other');
    +
    +		// Load translation files required by the page
    +        $langs->loadLangs(array("members","other","users","mails"));
     
     		require_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php';
     		$stripe = new Stripe($db);
    @@ -145,19 +147,33 @@ class InterfaceStripe
     				if ($customer)
     				{
     					$namecleaned = $object->name ? $object->name : null;
    -					$vatcleaned = $object->tva_intra ? $object->tva_intra : null;	// We force data to "null" if empty as expected by Stripe
    +					$vatcleaned = $object->tva_intra ? $object->tva_intra : null;
    +
    +					$taxinfo = array('type'=>'vat');
    +					if ($vatcleaned)
    +					{
    +						$taxinfo["tax_id"] = $vatcleaned;
    +					}
    +					// We force data to "null" if not defined as expected by Stripe
    +					if (empty($vatcleaned)) $taxinfo=null;
     
     					// Detect if we change a Stripe info (email, description, vat id)
     					$changerequested = 0;
     					if (! empty($object->email) && $object->email != $customer->email) $changerequested++;
     					if ($namecleaned != $customer->description) $changerequested++;
    -					if ($vatcleaned != $customer->business_vat_id) $changerequested++;
    +					if (! isset($customer->tax_info['tax_id']) && ! is_null($vatcleaned)) $changerequested++;
    +					elseif (isset($customer->tax_info['tax_id']) && is_null($vatcleaned)) $changerequested++;
    +					elseif (isset($customer->tax_info['tax_id']) && ! is_null($vatcleaned))
    +					{
    +						if ($vatcleaned != $customer->tax_info['tax_id']) $changerequested++;
    +					}
     
     					if ($changerequested)
     					{
     						if (! empty($object->email)) $customer->email = $object->email;
     						$customer->description = $namecleaned;
    -						$customer->business_vat_id = $vatcleaned;
    +						if (empty($taxinfo)) $customer->tax_info = array('type'=>'vat', 'tax_id'=>null);
    +						else $customer->tax_info = $taxinfo;
     
     						$customer->save();
     					}
    @@ -184,7 +200,6 @@ class InterfaceStripe
     		if ($action == 'COMPANYPAYMENTMODE_MODIFY' && $object->type == 'card') {
     
     			// For creation of credit card, we do not create in Stripe automatically
    -
     		}
     		if ($action == 'COMPANYPAYMENTMODE_MODIFY' && $object->type == 'card') {
     			dol_syslog("Trigger '" . $this->name . "' for action '$action' launched by " . __FILE__ . ". id=" . $object->id);
    diff --git a/htdocs/core/website.inc.php b/htdocs/core/website.inc.php
    index 46b1f955177..1338104de0b 100644
    --- a/htdocs/core/website.inc.php
    +++ b/htdocs/core/website.inc.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2017-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
    @@ -18,11 +18,76 @@
     
     /**
      *	\file			htdocs/core/website.inc.php
    - *  \brief			Common file loaded used by all website pages (after master.inc.php)
    - *  			    The global variable $website must be defined.
    + *  \brief			Common file loaded by all website pages (after master.inc.php). It set the new object $weblangs, using parameter 'l'.
    + *  				This file is included in top of all container pages.
    + *  			    The global variable $websitekey must be defined.
      */
     
    -
    +// Load website class
     include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
    -$website=new Website($db);
    -$website->fetch(0,$websitekey);
    +// Define $website
    +if (! is_object($website))
    +{
    +	$website=new Website($db);
    +	$website->fetch(0,$websitekey);
    +}
    +// Define $weblangs
    +if (! is_object($weblangs))
    +{
    +	$weblangs = dol_clone($langs);	// TODO Use an object lang from a language set into $website object instead of backoffice
    +}
    +// Define $websitepage if we have $websitepagefile defined
    +if (! $pageid && ! empty($websitepagefile))
    +{
    +	$pageid = str_replace(array('.tpl.php', 'page'), array('', ''), basename($websitepagefile));
    +}
    +if ($pageid > 0)
    +{
    +	include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
    +	$websitepage=new WebsitePage($db);
    +	$websitepage->fetch($pageid);
    +}
    +
    +// A lang was forced, so we change weblangs init
    +if (GETPOST('l','aZ09')) $weblangs->setDefaultLang(GETPOST('l','aZ09'));
    +// A lang was forced, so we check to find if we must make a redirect on translation page
    +if ($_SERVER['PHP_SELF'] != DOL_URL_ROOT.'/website/index.php')	// If we browsing page using Dolibarr server or a Native web server
    +{
    +	//print_r(get_defined_constants(true));exit;
    +	if (GETPOST('l','aZ09'))
    +	{
    +		$sql ="SELECT wp.rowid, wp.lang, wp.pageurl, wp.fk_page";
    +		$sql.=" FROM ".MAIN_DB_PREFIX."website_page as wp";
    +		$sql.=" WHERE wp.fk_website = ".$website->id;
    +		$sql.=" AND (wp.fk_page = ".$pageid." OR wp.rowid  = ".$pageid;
    +		if (is_object($websitepage) && $websitepage->fk_page > 0) $sql.=" OR wp.fk_page = ".$websitepage->fk_page." OR wp.rowid = ".$websitepage->fk_page;
    +		$sql.=")";
    +		$sql.= " AND wp.lang = '".$db->escape(GETPOST('l','aZ09'))."'";
    +
    +		$resql = $db->query($sql);
    +		if ($resql)
    +		{
    +			$obj = $db->fetch_object($resql);
    +			if ($obj)
    +			{
    +				$newpageid = $obj->rowid;
    +				if ($newpageid != $pageid) 		// To avoid to make a redirect on same page (infinite loop)
    +				{
    +					if (defined('USEDOLIBARRSERVER')) {
    +						header("Location: ".DOL_URL_ROOT.'/public/website/index.php?website='.$websitekey.'&pageid='.$newpageid.'&l='.GETPOST('l','aZ09'));
    +						exit;
    +					}
    +					else
    +					{
    +						$newpageref = $obj->pageurl;
    +						header("Location: ".$newpageref.'.php?l='.GETPOST('l','aZ09'));
    +						exit;
    +					}
    +				}
    +			}
    +		}
    +	}
    +}
    +
    +// Load websitepage class
    +include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
    diff --git a/htdocs/cron/admin/cron.php b/htdocs/cron/admin/cron.php
    index 729772bcf7e..9140973a566 100644
    --- a/htdocs/cron/admin/cron.php
    +++ b/htdocs/cron/admin/cron.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2013	Laurent Destailleur		<eldy@users.sourceforge.org>
      * Copyright (C) 2011		Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -25,7 +25,7 @@
      */
     
     // Dolibarr environment
    -$res = @include("../../main.inc.php"); // From htdocs directory
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/cron.lib.php';
     
    diff --git a/htdocs/cron/card.php b/htdocs/cron/card.php
    index bdbab5e30b0..152657e216a 100644
    --- a/htdocs/cron/card.php
    +++ b/htdocs/cron/card.php
    @@ -1,7 +1,8 @@
     <?php
    -/* Copyright (C) 2012      Nicolas Villa aka Boyquotes http://informetic.fr
    - * Copyright (C) 2013      Florian Henry <florian.henry@open-concpt.pro>
    - * Copyright (C) 2013-2016 Laurent Destailleur <eldy@users.sourceforge.net>
    +/* Copyright (C) 2012       Nicolas Villa aka Boyquotes http://informetic.fr
    + * Copyright (C) 2013       Florian Henry           <florian.henry@open-concpt.pro>
    + * Copyright (C) 2013-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -469,11 +470,11 @@ if (($action=="create") || ($action=="edit"))
     	print $langs->trans('CronDtStart')."</td><td>";
     	if(!empty($object->datestart))
     	{
    -	    $form->select_date($object->datestart,'datestart',1,1,'',"cronform");
    +        print $form->selectDate($object->datestart, 'datestart', 1, 1, '', "cronform");
     	}
     	else
     	{
    -	    $form->select_date('','datestart',1,1,'',"cronform");
    +        print $form->selectDate('', 'datestart', 1, 1, '', "cronform");
     	}
     	print "</td>";
     	print "<td>";
    @@ -483,10 +484,10 @@ if (($action=="create") || ($action=="edit"))
     	print "<tr><td>";
     	print $langs->trans('CronDtEnd')."</td><td>";
     	if(!empty($object->dateend)){
    -	    $form->select_date($object->dateend,'dateend',1,1,'',"cronform");
    +        print $form->selectDate($object->dateend, 'dateend', 1, 1, '', "cronform");
     	}
     	else{
    -	    $form->select_date(-1,'dateend',1,1,1,"cronform");
    +        print $form->selectDate(-1, 'dateend', 1, 1, 1, "cronform");
     	}
     	print "</td>";
     	print "<td>";
    @@ -523,11 +524,11 @@ if (($action=="create") || ($action=="edit"))
     	print "</td><td>";
     	if(!empty($object->datenextrun))
     	{
    -	    $form->select_date($object->datenextrun,'datenextrun',1,1,'',"cronform");
    +        print $form->selectDate($object->datenextrun, 'datenextrun', 1, 1, '', "cronform");
     	}
     	else
     	{
    -	    $form->select_date(-1,'datenextrun',1,1,'',"cronform");
    +        print $form->selectDate(-1, 'datenextrun', 1, 1, '', "cronform");
     	}
     	print "</td>";
         print "<td>";
    @@ -545,7 +546,6 @@ if (($action=="create") || ($action=="edit"))
     	print "</div>";
     
     	print "</form>\n";
    -
     }
     else
     {
    diff --git a/htdocs/cron/class/cronjob.class.php b/htdocs/cron/class/cronjob.class.php
    index e3235789d66..a71088f3286 100644
    --- a/htdocs/cron/class/cronjob.class.php
    +++ b/htdocs/cron/class/cronjob.class.php
    @@ -22,23 +22,43 @@
      */
     
     // Put here all includes required by your class file
    -require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
    +require_once DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php";
     
     
     /**
    - *	Crob Job class
    + *	Cron Job class
      */
     class Cronjob extends CommonObject
     {
    -	public $element='cronjob';			//!< Id that identify managed objects
    -	public $table_element='cronjob';		//!< Name of table without prefix where object is stored
    -    public $picto = 'cron';
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='cronjob';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='cronjob';
    +
    +    /**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'cron';
    +
    +    /**
    +	 * @var int Entity
    +	 */
    +	public $entity;
     
    -    public $entity;
         public $jobtype;
     	public $tms='';
     	public $datec='';
    -	public $label;
    +
    +	/**
    +     * @var string Cron Job label
    +     */
    +    public $label;
    +
     	public $command;
     	public $classesname;
     	public $objectname;
    @@ -56,10 +76,24 @@ class Cronjob extends CommonObject
     	public $lastoutput;
     	public $unitfrequency;
     	public $frequency;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
    +
     	public $processing;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_author;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_mod;
    +
     	public $nbrun;
     	public $libname;
     	public $test;					// A test condition to know if job is visible/qualified
    @@ -77,7 +111,6 @@ class Cronjob extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -230,8 +263,8 @@ class Cronjob extends CommonObject
             {
                 $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."cronjob");
     
    -			if (! $notrigger)
    -			{
    +			//if (! $notrigger)
    +			//{
     	            // Uncomment this and change MYOBJECT to your own tag if you
     	            // want this action calls a trigger.
     
    @@ -241,7 +274,7 @@ class Cronjob extends CommonObject
     	            //$result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf);
     	            //if ($result < 0) { $error++; $this->errors=$interface->errors; }
     	            //// End call triggers
    -			}
    +			//}
             }
     
             // Commit or rollback
    @@ -360,6 +393,7 @@ class Cronjob extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Load object in memory from the database
          *
    @@ -374,7 +408,8 @@ class Cronjob extends CommonObject
          */
         function fetch_all($sortorder='DESC', $sortfield='t.rowid', $limit=0, $offset=0, $status=1, $filter='', $processing=-1)
         {
    -    	global $langs;
    +        // phpcs:enable
    +        global $langs;
     
         	$this->lines=array();
     
    @@ -414,7 +449,7 @@ class Cronjob extends CommonObject
         	$sql.= " WHERE 1 = 1";
         	if ($processing >= 0) $sql.= " AND t.processing = ".(empty($processing)?'0':'1');
         	if ($status >= 0 && $status < 2) $sql.= " AND t.status = ".(empty($status)?'0':'1');
    -    	if ($status == 2) $sql.= " AND t.status = 2";
    +    	elseif ($status == 2) $sql.= " AND t.status = 2";
         	//Manage filter
         	if (is_array($filter) && count($filter)>0) {
         		foreach($filter as $key => $value)
    @@ -617,10 +652,8 @@ class Cronjob extends CommonObject
             $resql = $this->db->query($sql);
         	if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); }
     
    -		if (! $error)
    -		{
    -			if (! $notrigger)
    -			{
    +		//if (! $error && ! $notrigger)
    +		//{
     	            // Uncomment this and change MYOBJECT to your own tag if you
     	            // want this action calls a trigger.
     
    @@ -630,8 +663,7 @@ class Cronjob extends CommonObject
     	            //$result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf);
     	            //if ($result < 0) { $error++; $this->errors=$interface->errors; }
     	            //// End call triggers
    -	    	}
    -		}
    +		//}
     
             // Commit or rollback
     		if ($error)
    @@ -747,11 +779,11 @@ class Cronjob extends CommonObject
     			$error++;
     		}
     
    -		if (! $error)
    -		{
    +		//if (! $error)
    +		//{
     
     
    -		}
    +		//}
     
     		unset($this->context['createfromclone']);
     
    @@ -911,6 +943,7 @@ class Cronjob extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Run a job.
     	 * Once job is finished, status and nb of run is updated.
    @@ -921,6 +954,7 @@ class Cronjob extends CommonObject
     	 */
     	function run_jobs($userlogin)
     	{
    +        // phpcs:enable
     		global $langs, $conf;
     
     		$now=dol_now();
    @@ -1181,6 +1215,7 @@ class Cronjob extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Reprogram a job
     	 *
    @@ -1190,6 +1225,7 @@ class Cronjob extends CommonObject
     	 */
     	function reprogram_jobs($userlogin, $now)
     	{
    +        // phpcs:enable
     		dol_syslog(get_class($this)."::reprogram_jobs userlogin:$userlogin", LOG_DEBUG);
     
     		require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
    @@ -1268,6 +1304,7 @@ class Cronjob extends CommonObject
     	    return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -1277,39 +1314,39 @@ class Cronjob extends CommonObject
     	 */
     	function LibStatut($status,$mode=0)
     	{
    -	    global $langs;
    +        // phpcs:enable
    +        global $langs;
     	    $langs->load('users');
     
     	    if ($mode == 0)
     	    {
    -	        $prefix='';
     	        if ($status == 1) return $langs->trans('Enabled');
    -	        if ($status == 0) return $langs->trans('Disabled');
    +	        elseif ($status == 0) return $langs->trans('Disabled');
     	    }
    -	    if ($mode == 1)
    +	    elseif ($mode == 1)
     	    {
     	        if ($status == 1) return $langs->trans('Enabled');
    -	        if ($status == 0) return $langs->trans('Disabled');
    +	        elseif ($status == 0) return $langs->trans('Disabled');
     	    }
    -	    if ($mode == 2)
    +	    elseif ($mode == 2)
     	    {
     	        if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4','class="pictostatus"').' '.$langs->trans('Enabled');
    -	        if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"').' '.$langs->trans('Disabled');
    +	        elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"').' '.$langs->trans('Disabled');
     	    }
    -	    if ($mode == 3)
    +	    elseif ($mode == 3)
     	    {
     	        if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4','class="pictostatus"');
    -	        if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"');
    +	        elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"');
     	    }
    -	    if ($mode == 4)
    +	    elseif ($mode == 4)
     	    {
     	        if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4','class="pictostatus"').' '.$langs->trans('Enabled');
    -	        if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"').' '.$langs->trans('Disabled');
    +	        elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"').' '.$langs->trans('Disabled');
     	    }
    -	    if ($mode == 5)
    +	    elseif ($mode == 5)
     	    {
     	        if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4','class="pictostatus"');
    -	        if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"');
    +	        elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"');
     	    }
     	}
     }
    @@ -1321,12 +1358,24 @@ class Cronjob extends CommonObject
     class Cronjobline
     {
     
    +	/**
    +	 * @var int ID
    +	 */
     	public $id;
    +
    +	/**
    +	 * @var string Ref
    +	 */
     	public $ref;
     
     	public $tms='';
     	public $datec='';
    -	public $label;
    +
    +	/**
    +     * @var string Cron Job Line label
    +     */
    +    public $label;
    +
     	public $jobtype;
     	public $command;
     	public $classesname;
    @@ -1344,9 +1393,22 @@ class Cronjobline
     	public $lastoutput;
     	public $unitfrequency;
     	public $frequency;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_author;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_mod;
    +
     	public $note;
     	public $nbrun;
     	public $libname;
    diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php
    index 1f810132223..2ddfbee5e8c 100644
    --- a/htdocs/cron/list.php
    +++ b/htdocs/cron/list.php
    @@ -62,15 +62,16 @@ $securitykey = GETPOST('securitykey','alpha');
     
     $diroutputmassaction=$conf->cronjob->dir_output . '/temp/massgeneration/'.$user->id;
     
    +$object = new Cronjob($db);
    +
     // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
     $hookmanager->initHooks(array('cronjoblist'));
     $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('cronjob');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
    -$object = new Cronjob($db);
     
     
     /*
    @@ -191,7 +192,7 @@ if (empty($reshook))
     				$result = 0;
     				if ($massaction == 'disable') $result = $tmpcron->setStatut(Cronjob::STATUS_DISABLED);
     				elseif ($massaction == 'enable') $result = $tmpcron->setStatut(Cronjob::STATUS_ENABLED);
    -				else dol_print_error($db, 'Bad value for massaction');
    +				//else dol_print_error($db, 'Bad value for massaction');
     				if ($result < 0) setEventMessages($tmpcron->error, $tmpcron->errors, 'errors');
     			}
     			else
    diff --git a/htdocs/datapolicy/README.md b/htdocs/datapolicy/README.md
    new file mode 100644
    index 00000000000..e2bde95a6d8
    --- /dev/null
    +++ b/htdocs/datapolicy/README.md
    @@ -0,0 +1,5 @@
    +DataPolicy
    +==========
    +
    +This module provides features to be compliant with data privacy rules of your country.
    +A schedlued job is installed to automatically clean old record in your database. You defined what to delete and when in the setup of module.
    \ No newline at end of file
    diff --git a/htdocs/datapolicy/admin/setup.php b/htdocs/datapolicy/admin/setup.php
    new file mode 100644
    index 00000000000..8e92e1e6231
    --- /dev/null
    +++ b/htdocs/datapolicy/admin/setup.php
    @@ -0,0 +1,201 @@
    +<?php
    +/* Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2018      Nicolas ZABOURI      <info@inovea-conseil.com>
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    datapolicy/admin/setup.php
    + * \ingroup datapolicy
    + * \brief   datapolicy setup page.
    + */
    +
    +require '../../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT . "/core/lib/admin.lib.php";
    +require_once '../lib/datapolicy.lib.php';
    +//require_once "../class/myclass.class.php";
    +
    +// Translations
    +$langs->load('admin');
    +$langs->load('companies');
    +$langs->load('members');
    +$langs->load('datapolicy@datapolicy');
    +
    +// Access control
    +if (! $user->admin) accessforbidden();
    +
    +// Parameters
    +$action = GETPOST('action', 'alpha');
    +$backtopage = GETPOST('backtopage', 'alpha');
    +
    +$arrayofparameters=array(
    +    'DATAPOLICY_TIERS_CLIENT'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_TIERS_PROSPECT'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_TIERS_PROSPECT_CLIENT'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_TIERS_NIPROSPECT_NICLIENT'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_TIERS_FOURNISSEUR'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_CONTACT_CLIENT'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_CONTACT_PROSPECT'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_CONTACT_PROSPECT_CLIENT'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_CONTACT_NIPROSPECT_NICLIENT'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_CONTACT_FOURNISSEUR'=>array('css'=>'minwidth200'),
    +    'DATAPOLICY_ADHERENT'=>array('css'=>'minwidth200'),
    +);
    +
    +
    +/*
    + * Actions
    + */
    +
    +include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
    +
    +if (DOL_VERSION < '7' && $action == 'update') {
    +    foreach ($arrayofparameters as $k => $v) {
    +        $res = dolibarr_set_const($db,$k,GETPOST($k),'chaine',0,'',$conf->entity);
    +        if (! $res > 0) $error++;
    +    }
    +    if (! $error)
    +    {
    +        $db->commit();
    +        if (empty($nomessageinsetmoduleoptions)) setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
    +    }
    +    else
    +    {
    +        $db->rollback();
    +        if (empty($nomessageinsetmoduleoptions)) setEventMessages($langs->trans("SetupNotSaved"), null, 'errors');
    +    }
    +}
    +
    +
    +$arrayofparameters=array(
    +    'ThirdParty' => array(
    +        'DATAPOLICY_TIERS_CLIENT'=>array('css'=>'minwidth200'),
    +        'DATAPOLICY_TIERS_PROSPECT'=>array('css'=>'minwidth200'),
    +        'DATAPOLICY_TIERS_PROSPECT_CLIENT'=>array('css'=>'minwidth200'),
    +        'DATAPOLICY_TIERS_NIPROSPECT_NICLIENT'=>array('css'=>'minwidth200'),
    +        'DATAPOLICY_TIERS_FOURNISSEUR'=>array('css'=>'minwidth200'),
    +    ),
    +    'Contact' => array(
    +        'DATAPOLICY_CONTACT_CLIENT'=>array('css'=>'minwidth200'),
    +        'DATAPOLICY_CONTACT_PROSPECT'=>array('css'=>'minwidth200'),
    +        'DATAPOLICY_CONTACT_PROSPECT_CLIENT'=>array('css'=>'minwidth200'),
    +        'DATAPOLICY_CONTACT_NIPROSPECT_NICLIENT'=>array('css'=>'minwidth200'),
    +        'DATAPOLICY_CONTACT_FOURNISSEUR'=>array('css'=>'minwidth200'),
    +    ),
    +    'Member' => array(
    +        'DATAPOLICY_ADHERENT'=>array('css'=>'minwidth200'),
    +    )
    +);
    +
    +$valTab = array(
    +    '' => $langs->trans('Never'),
    +    '6' => $langs->trans('NB_MONTHS', 6),
    +    '12' => $langs->trans('ONE_YEAR'),
    +    '24' => $langs->trans('NB_YEARS', 2),
    +    '36' => $langs->trans('NB_YEARS', 3),
    +    '48' => $langs->trans('NB_YEARS', 4),
    +    '60' => $langs->trans('NB_YEARS', 5),
    +    '120' => $langs->trans('NB_YEARS', 10),
    +	'180' => $langs->trans('NB_YEARS', 15),
    +	'240' => $langs->trans('NB_YEARS', 20),
    +);
    +
    +
    +/*
    + * View
    + */
    +
    +$page_name = "datapolicySetup";
    +llxHeader('', $langs->trans($page_name));
    +
    +// Subheader
    +$linkback = '<a href="'.($backtopage?$backtopage:DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1').'">'.$langs->trans("BackToModuleList").'</a>';
    +
    +print load_fiche_titre($langs->trans($page_name), $linkback, 'object_datapolicy@datapolicy');
    +
    +// Configuration header
    +$head = datapolicyAdminPrepareHead();
    +dol_fiche_head($head, 'settings', '', -1, "datapolicy@datapolicy");
    +
    +// Setup page goes here
    +echo '<span class="opacitymedium">'.$langs->trans("datapolicySetupPage").'</span><br><br>';
    +
    +
    +if ($action == 'edit')
    +{
    +	print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    +	print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +	print '<input type="hidden" name="action" value="update">';
    +
    +	print '<table class="noborder" width="100%">';
    +	print '<tr class="liste_titre"><td class="titlefield">'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
    +
    +	foreach($arrayofparameters as $title => $tab)
    +	{
    +        print '<tr class="liste_titre"><td class="titlefield" colspan="2">'.$langs->trans($title).'</td></tr>';
    +        foreach($tab as $key => $val)
    +        {
    +            print '<tr class="oddeven"><td>';
    +            print $form->textwithpicto($langs->trans($key),$langs->trans($key.'Tooltip'));
    +            print '</td><td>';
    +            print '<select name="'.$key.'"  class="flat '.(empty($val['css'])?'minwidth200':$val['css']).'">';
    +            foreach ($valTab as $key1 => $val1) {
    +                print '<option value="'.$key1.'" ' . ($conf->global->$key == $key1 ? 'selected="selected"' : '') . '>';
    +                print $val1;
    +                print '</option>';
    +            }
    +            print '</select>';
    +            print '</td></tr>';
    +        }
    +	}
    +
    +	print '</table>';
    +
    +	print '<br><div class="center">';
    +	print '<input class="button" type="submit" value="'.$langs->trans("Save").'">';
    +	print '</div>';
    +
    +	print '</form>';
    +	print '<br>';
    +}
    +else
    +{
    +	print '<table class="noborder" width="100%">';
    +	print '<tr class="liste_titre"><td class="titlefield">'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
    +
    +    foreach($arrayofparameters as $title => $tab)
    +    {
    +        print '<tr class="liste_titre"><td class="titlefield" colspan="2">'.$langs->trans($title).'</td></tr>';
    +        foreach($tab as $key => $val)
    +        {
    +            print '<tr class="oddeven"><td>';
    +            print $form->textwithpicto($langs->trans($key),$langs->trans('DATAPOLICY_Tooltip_SETUP'));
    +            print '</td><td>' . ($conf->global->$key == '' ? $langs->trans('None') : $valTab[$conf->global->$key]) . '</td></tr>';
    +        }
    +    }
    +
    +	print '</table>';
    +
    +	print '<div class="tabsAction">';
    +	print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit">'.$langs->trans("Modify").'</a>';
    +	print '</div>';
    +}
    +
    +
    +// Page end
    +dol_fiche_end();
    +
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/datapolicy/admin/setupmail.php b/htdocs/datapolicy/admin/setupmail.php
    new file mode 100644
    index 00000000000..214f673a15f
    --- /dev/null
    +++ b/htdocs/datapolicy/admin/setupmail.php
    @@ -0,0 +1,167 @@
    +<?php
    +
    +/* Copyright (C) 2004-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Nicolas ZABOURI         <info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +require '../../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT . "/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/class/html.formadmin.class.php';
    +require_once '../lib/datapolicy.lib.php';
    +
    +// Translations
    +$langs->loadLangs(array('admin', 'companies', 'members', 'datapolicy'));
    +
    +
    +// Parameters
    +$action = GETPOST('action', 'alpha');
    +$backtopage = GETPOST('backtopage', 'alpha');
    +$formadmin = new FormAdmin($db);
    +
    +if (GETPOST('l')) {
    +    $l = GETPOST('l');
    +} else {
    +    $l = $langs->defaultlang;
    +}
    +// Access control
    +if (!$user->admin)
    +    accessforbidden();
    +
    +/*
    + * Actions
    + */
    +
    +include DOL_DOCUMENT_ROOT . '/core/actions_setmoduleoptions.inc.php';
    +
    +if ($action == 'setvalue' && $user->admin) {
    +    $db->begin();
    +    $sub = "DATAPOLICIESSUBJECT_" . $l;
    +    $result = dolibarr_set_const($db, $sub, GETPOST($sub), 'chaine', 0, '', $conf->entity);
    +    $cont = "DATAPOLICIESCONTENT_" . $l;
    +    $result = dolibarr_set_const($db, $cont, GETPOST($cont), 'chaine', 0, '', $conf->entity);
    +    $cont = "TXTLINKDATAPOLICIESACCEPT_" . $l;
    +    $result = dolibarr_set_const($db, $cont, GETPOST($cont), 'chaine', 0, '', $conf->entity);
    +    $cont = "TXTLINKDATAPOLICIESREFUSE_" . $l;
    +    $result = dolibarr_set_const($db, $cont, GETPOST($cont), 'chaine', 0, '', $conf->entity);
    +    $sub = "DATAPOLICIESACCEPT_" . $l;
    +    $result = dolibarr_set_const($db, $sub, GETPOST($sub), 'chaine', 0, '', $conf->entity);
    +    $sub = "DATAPOLICIESREFUSE_" . $l;
    +    $result = dolibarr_set_const($db, $sub, GETPOST($sub), 'chaine', 0, '', $conf->entity);
    +    if (!$result > 0)
    +        $error++;
    +    if (!$error) {
    +        $db->commit();
    +        setEventMessage($langs->trans("SetupSaved"));
    +    } else {
    +        $db->rollback();
    +        dol_print_error($db);
    +    }
    +}
    +
    +
    +/*
    + * View
    + */
    +
    +$page_name = "datapolicySetup";
    +llxHeader('', $langs->trans($page_name));
    +
    +// Subheader
    +$linkback = '<a href="' . ($backtopage ? $backtopage : DOL_URL_ROOT . '/admin/modules.php?restore_lastsearch_values=1') . '">' . $langs->trans("BackToModuleList") . '</a>';
    +
    +print load_fiche_titre($langs->trans($page_name), $linkback, 'object_datapolicy@datapolicy');
    +
    +// Configuration header
    +$head = datapolicyAdminPrepareHead();
    +dol_fiche_head($head, 'settings', '', -1, "datapolicy@datapolicy");
    +
    +
    +
    +
    +
    +print "<script type='text/javascript'>
    +        $(document).ready(function(){
    +         $('#default_lang').change(function(){
    +         lang=$('#default_lang').val();
    +                    window.location.replace('" . $_SERVER['PHP_SELF'] . "?l='+lang);
    +                    });
    +        });
    +</script>";
    +
    +print '<form method="post" action="' . $_SERVER["PHP_SELF"] . '?l=' . $l . '">';
    +print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
    +print '<input type="hidden" name="action" value="setvalue">';
    +print '<table>';
    +if ($conf->global->MAIN_MULTILANGS) {
    +    print '<tr><td>' . fieldLabel('DefaultLang', 'default_lang') . '</td><td colspan="3" class="maxwidthonsmartphone">' . "\n";
    +    print $formadmin->select_language((GETPOST('l') ? GETPOST('l') : $langs->defaultlang), 'default_lang', 0, 0, 1, 0, 0, 'maxwidth200onsmartphone');
    +    print '</tr>';
    +}
    +$subject = 'DATAPOLICIESSUBJECT_' . $l;
    +$linka = 'TXTLINKDATAPOLICIESACCEPT_' . $l;
    +$linkr = 'TXTLINKDATAPOLICIESREFUSE_' . $l;
    +$content = 'DATAPOLICIESCONTENT_' . $l;
    +$acc = 'DATAPOLICIESACCEPT_' . $l;
    +$ref = 'DATAPOLICIESREFUSE_' . $l;
    +print '<tr class"oddeven"><td class="fieldrequired">';
    +print $langs->trans('DATAPOLICIESSUBJECTMAIL') . '</td><td>';
    +print '<input type="text" size="100" name="' . $subject . '" value="' . $conf->global->$subject . '" />';
    +print '</td><tr>';
    +print '<tr class"oddeven"><td class="fieldrequired">';
    +print $langs->trans('DATAPOLICIESCONTENTMAIL').'</td><td>';
    +print $langs->trans('DATAPOLICIESSUBSITUTION');echo'__LINKACCEPT__,__LINKREFUSED__,__FIRSTNAME__,__NAME__,__CIVILITY__';
    +$doleditor = new DolEditor($content, $conf->global->$content, '', 250, 'Full', '', false, true, 1, 200, 70);
    +$doleditor->Create();
    +print '</td><tr>';
    +print '<tr class"oddeven"><td class="fieldrequired">';
    +print $langs->trans('TXTLINKDATAPOLICIESACCEPT') . '</td><td>';
    +print '<input type="text" size="200" name="' . $linka . '" value="' . $conf->global->$linka . '" />';
    +print '</td><tr>';
    +print '<tr class"oddeven"><td class="fieldrequired">';
    +print $langs->trans('TXTLINKDATAPOLICIESREFUSE') . '</td><td>';
    +print '<input type="text" size="200" name="' . $linkr . '" value="' . $conf->global->$linkr . '" />';
    +print '</td><tr>';
    +print '<tr class"oddeven"><td class="fieldrequired">';
    +
    +print $langs->trans('DATAPOLICIESACCEPT').'</td><td>';
    +
    +$doleditor = new DolEditor($acc, $conf->global->$acc, '', 250, 'Full', '', false, true, 1, 200, 70);
    +$doleditor->Create();
    +print '</td><tr>';
    +print '<tr class"oddeven"><td class="fieldrequired">';
    +print $langs->trans('DATAPOLICIESREFUSE').'</td><td>';
    +
    +print $langs->trans('');
    +$doleditor = new DolEditor($ref, $conf->global->$ref, '', 250, 'Full', '', false, true, 1, 200, 70);
    +$doleditor->Create();
    +print '</td><tr>';
    +print '</table>';
    +
    +print '<br><center><input type="submit" class="button" value="' . $langs->trans("Modify") . '"></center>';
    +
    +print '</form>';
    +
    +dol_fiche_end();
    +
    +print '<br><br>';
    +
    +print $langs->trans('SendAgreementText');
    +print '<a class="button" href="'.dol_buildpath('/datapolicy/mailing.php').'">'.$langs->trans('SendAgreement').'</a>';
    +
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/datapolicy/class/actions_datapolicy.class.php b/htdocs/datapolicy/class/actions_datapolicy.class.php
    new file mode 100644
    index 00000000000..21fcb4a5a44
    --- /dev/null
    +++ b/htdocs/datapolicy/class/actions_datapolicy.class.php
    @@ -0,0 +1,482 @@
    +<?php
    +/* Copyright (C) 2018       Nicolas ZABOURI         <info@inovea-conseom.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    datapolicy/class/actions_datapolicy.class.php
    + * \ingroup datapolicy
    + * \brief   Example hook overload.
    + */
    +
    +/**
    + * Class ActionsDatapolicy
    + */
    +class ActionsDatapolicy
    +{
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +     * @var string Error
    +     */
    +    public $error = '';
    +
    +    /**
    +     * @var array Errors
    +     */
    +    public $errors = array();
    +
    +    /**
    +     * @var array Hook results. Propagated to $hookmanager->resArray for later reuse
    +     */
    +    public $results = array();
    +
    +    /**
    +     * @var string String displayed by executeHook() immediately after return
    +     */
    +    public $resprints;
    +
    +    /**
    +     * Constructor
    +     *
    +     *  @param  DoliDB      $db      Database handler
    +     */
    +    public function __construct($db)
    +    {
    +        $this->db = $db;
    +    }
    +
    +    /**
    +     * Execute action
    +     *
    +     * @param   array           $parameters		Array of parameters
    +     * @param   CommonObject    $object         The object to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
    +     * @param   string          $action      	'add', 'update', 'view'
    +     * @return  int         					<0 if KO,
    +     *                           				=0 if OK but we want to process standard actions too,
    +     *                            				>0 if OK and we want to replace standard actions.
    +     */
    +    function getNomUrl($parameters, &$object, &$action)
    +    {
    +        global $db, $langs, $conf, $user;
    +        $this->resprints = '';
    +        return 0;
    +    }
    +
    +    /**
    +     * Overloading the doActions function : replacing the parent's function with the one below
    +     *
    +     * @param   array           $parameters     Hook metadatas (context, etc...)
    +     * @param   CommonObject    $object         The object to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
    +     * @param   string          $action         Current action (if set). Generally create or edit or null
    +     * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook
    +     * @return  int                             < 0 on error, 0 on success, 1 to replace standard code
    +     */
    +    public function doActions($parameters, &$object, &$action, $hookmanager)
    +    {
    +        global $conf, $user, $langs;
    +        $langs->load('datapolicy@datapolicy');
    +        $error = 0; // Error counter
    +
    +        if (GETPOST('socid') && $parameters['currentcontext'] == 'thirdpartycard') {
    +            $object->fetch(GETPOST('socid'));
    +        }
    +
    +        // FIXME Removed hard coded id, use codes
    +        if ($parameters['currentcontext'] == 'thirdpartycard' && $action == 'anonymiser' && (in_array($object->forme_juridique_code, array(11, 12, 13, 15, 17, 18, 19, 35, 60, 200, 311, 312, 316, 401, 600, 700, 1005)) || $object->typent_id == 8)) {
    +            // on verifie si l'objet est utilisé
    +            if ($object->isObjectUsed(GETPOST('socid'))) {
    +                $object->name = $langs->trans('ANONYME');
    +                $object->name_bis = '';
    +                $object->name_alias = '';
    +                $object->address = '';
    +                $object->town = '';
    +                $object->zip = '';
    +                $object->phone = '';
    +                $object->email = '';
    +                $object->url = '';
    +                $object->fax = '';
    +                $object->state = '';
    +                $object->country = '';
    +                $object->state_id = '';
    +                $object->skype = '';
    +                $object->country_id = '';
    +                $object->note_private = $object->note_private . '<br/>' . $langs->trans('ANONYMISER_AT', dol_print_date(time()));
    +
    +                if ($object->update($object->id, $user, 0)) {
    +
    +                    // On supprime les contacts associé
    +                    $sql = "DELETE FROM " . MAIN_DB_PREFIX . "socpeople WHERE fk_soc = " . $object->id;
    +                    $this->db->query($sql);
    +
    +                    setEventMessages($langs->trans('ANONYMISER_SUCCESS'), array());
    +                    header('Location:' . $_SERVER["PHP_SELF"] . "?socid=" . $object->id);
    +                }
    +            }
    +        } elseif ($parameters['currentcontext'] == 'thirdpartycard' && $action == 'datapolicy_portabilite') {
    +            header('Content-Type: application/csv');
    +            header('Content-Disposition: attachment; filename=datapolicy_portabilite.csv');
    +            header('Pragma: no-cache');
    +            $object->fetch(GETPOST('socid'));
    +            echo 'Name;Fistname;Civility;Thirdparty;Function;Address;ZipCode;City;Department;Country;Email;Pro Phone;Perso Phone;Mobile Phone;Instant Mail;Birthday;' . PHP_EOL;
    +            echo $object->name . ';';
    +            echo ';';
    +            echo ';';
    +            echo ';';
    +            echo ';';
    +            echo $object->address . ';';
    +            echo $object->zip . ';';
    +            echo $object->town . ';';
    +            echo $object->state . ';';
    +            echo $object->country . ';';
    +            echo $object->email . ';';
    +            echo $object->phone . ';';
    +            echo ';';
    +            echo ';';
    +            echo $object->skype . ';';
    +            echo ';';
    +            exit;
    +        } elseif ($parameters['currentcontext'] == 'membercard' && $action == 'datapolicy_portabilite') {
    +            header('Content-Type: application/csv');
    +            header('Content-Disposition: attachment; filename=datapolicy_portabilite.csv');
    +            header('Pragma: no-cache');
    +            $soc = $object->fetch_thirdparty();
    +
    +            echo 'Name;Fistname;Civility;Thirdparty;Function;Address;ZipCode;City;Department;Country;Email;Pro Phone;Perso Phone;Mobile Phone;Instant Mail;Birthday;' . PHP_EOL;
    +            echo $object->lastname . ';';
    +            echo $object->firstname . ';';
    +            echo $object->getCivilityLabel() . ';';
    +            echo ($soc != -1 ? $object->thirdparty->name : '') . ';';
    +            echo ';';
    +            echo $object->address . ';';
    +            echo $object->zip . ';';
    +            echo $object->town . ';';
    +            echo $object->state . ';';
    +            echo $object->country . ';';
    +            echo $object->email . ';';
    +            echo $object->phone . ';';
    +            echo $object->phone_perso . ';';
    +            echo $object->phone_mobile . ';';
    +            echo $object->skype . ';';
    +            echo dol_print_date($object->birth) . ';';
    +            exit;
    +        } elseif ($parameters['currentcontext'] == 'contactcard' && $action == 'datapolicy_portabilite') {
    +            $object->fetch(GETPOST('id'));
    +            header('Content-Type: application/csv');
    +            header('Content-Disposition: attachment; filename=datapolicy_portabilite.csv');
    +            header('Pragma: no-cache');
    +            $soc = $object->fetch_thirdparty();
    +            echo 'Name;Fistname;Civility;Thirdparty;Function;Address;ZipCode;City;Department;Country;Email;Pro Phone;Perso Phone;Mobile Phone;Instant Mail;Birthday;' . PHP_EOL;
    +            echo $object->lastname . ';';
    +            echo $object->firstname . ';';
    +            echo $object->getCivilityLabel() . ';';
    +            echo ($soc != -1 ? $object->thirdparty->name : '') . ';';
    +            echo $object->poste . ';';
    +            echo $object->address . ';';
    +            echo $object->zip . ';';
    +            echo $object->town . ';';
    +            echo $object->state . ';';
    +            echo $object->country . ';';
    +            echo $object->email . ';';
    +            echo $object->phone_pro . ';';
    +            echo $object->phone_perso . ';';
    +            echo $object->phone_mobile . ';';
    +            echo $object->jabberid . ';';
    +            echo dol_print_date($object->birth) . ';';
    +            exit;
    +        } elseif ($parameters['currentcontext'] == 'contactcard' && $action == 'send_datapolicy') {
    +            $object->fetch(GETPOST('id'));
    +
    +            require_once  DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
    +            require_once  DOL_DOCUMENT_ROOT . '/datapolicy/class/datapolicy.class.php';
    +            DataPolicy::sendMailDataPolicyContact($object);
    +        }
    +         elseif ($parameters['currentcontext'] == 'membercard' && $action == 'send_datapolicy') {
    +             $object->fetch(GETPOST('id'));
    +            require_once  DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php';
    +            require_once  DOL_DOCUMENT_ROOT . '/datapolicy/class/datapolicy.class.php';
    +            DataPolicy::sendMailDataPolicyAdherent($object);
    +        } elseif ($parameters['currentcontext'] == 'thirdpartycard' && $action == 'send_datapolicy') {
    +            $object->fetch(GETPOST('socid'));
    +            require_once  DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
    +            require_once  DOL_DOCUMENT_ROOT . '/datapolicy/class/datapolicy.class.php';
    +            DataPolicy::sendMailDataPolicyCompany($object);
    +        }
    +
    +
    +        if (!$error) {
    +            $this->results = array('myreturn' => 999);
    +            $this->resprints = 'A text to show';
    +            return 0; // or return 1 to replace standard code
    +        } else {
    +            $this->errors[] = 'Error message';
    +            return -1;
    +        }
    +    }
    +
    +    /**
    +     * Overloading the doActions function : replacing the parent's function with the one below
    +     *
    +     * @param   array           $parameters     Hook metadatas (context, etc...)
    +     * @param   CommonObject    $object         The object to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
    +     * @param   string          $action         Current action (if set). Generally create or edit or null
    +     * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook
    +     * @return  int                             < 0 on error, 0 on success, 1 to replace standard code
    +     */
    +    public function doMassActions($parameters, &$object, &$action, $hookmanager)
    +    {
    +        global $conf, $user, $langs;
    +
    +        $error = 0; // Error counter
    +
    +        /* print_r($parameters); print_r($object); echo "action: " . $action; */
    +        //if (in_array($parameters['currentcontext'], array('somecontext1', 'somecontext2'))) {
    +        //    // do something only for the context 'somecontext1' or 'somecontext2'
    +        //    foreach ($parameters['toselect'] as $objectid) {
    +        //        // Do action on each object id
    +        //    }
    +        //}
    +
    +        if (!$error) {
    +            $this->results = array('myreturn' => 999);
    +            $this->resprints = 'A text to show';
    +            return 0; // or return 1 to replace standard code
    +        } else {
    +            $this->errors[] = 'Error message';
    +            return -1;
    +        }
    +    }
    +
    +    /**
    +     * Overloading the addMoreMassActions function : replacing the parent's function with the one below
    +     *
    +     * @param   array           $parameters		Hook metadatas (context, etc...)
    +     * @param   CommonObject    $object         The object to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
    +     * @param   string          $action         Current action (if set). Generally create or edit or null
    +     * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook
    +     * @return  int                             < 0 on error, 0 on success, 1 to replace standard code
    +     */
    +    public function addMoreMassActions($parameters, &$object, &$action, $hookmanager)
    +    {
    +        global $conf, $user, $langs;
    +
    +        $error = 0; // Error counter
    +
    +        /* print_r($parameters); print_r($object); echo "action: " . $action; */
    +        if (in_array($parameters['currentcontext'], array('somecontext1', 'somecontext2'))) {  // do something only for the context 'somecontext1' or 'somecontext2'
    +            $this->resprints = '<option value="0"' . ($disabled ? ' disabled="disabled"' : '') . '>' . $langs->trans("datapolicyMassAction") . '</option>';
    +        }
    +
    +        if (!$error) {
    +            return 0; // or return 1 to replace standard code
    +        } else {
    +            $this->errors[] = 'Error message';
    +            return -1;
    +        }
    +    }
    +
    +    /**
    +     * Execute action
    +     *
    +     * @param   array	$parameters		Array of parameters
    +     * @param   Object	$object		   	Object output on PDF
    +     * @param   string	$action     	'add', 'update', 'view'
    +     * @return  int 		        	<0 if KO,
    +     *                          		=0 if OK but we want to process standard actions too,
    +     *  	                            >0 if OK and we want to replace standard actions.
    +     */
    +    function beforePDFCreation($parameters, &$object, &$action)
    +    {
    +        global $conf, $user, $langs;
    +        global $hookmanager;
    +
    +        $outputlangs = $langs;
    +
    +        $ret = 0;
    +        $deltemp = array();
    +        dol_syslog(get_class($this) . '::executeHooks action=' . $action);
    +
    +        /* print_r($parameters); print_r($object); echo "action: " . $action; */
    +        if (in_array($parameters['currentcontext'], array('somecontext1', 'somecontext2'))) {  // do something only for the context 'somecontext1' or 'somecontext2'
    +
    +        }
    +
    +        return $ret;
    +    }
    +
    +    /**
    +     * Execute action
    +     *
    +     * @param	array	$parameters		Array of parameters
    +     * @param   Object	$pdfhandler   	PDF builder handler
    +     * @param   string	$action     	'add', 'update', 'view'
    +     * @return  int 		        	<0 if KO,
    +     *                          		=0 if OK but we want to process standard actions too,
    +     *  	                            >0 if OK and we want to replace standard actions.
    +     */
    +    function afterPDFCreation($parameters, &$pdfhandler, &$action)
    +    {
    +        global $conf, $user, $langs;
    +        global $hookmanager;
    +
    +        $outputlangs = $langs;
    +
    +        $ret = 0;
    +        $deltemp = array();
    +        dol_syslog(get_class($this) . '::executeHooks action=' . $action);
    +
    +        /* print_r($parameters); print_r($object); echo "action: " . $action; */
    +        if (in_array($parameters['currentcontext'], array('somecontext1', 'somecontext2'))) {  // do something only for the context 'somecontext1' or 'somecontext2'
    +
    +        }
    +
    +        return $ret;
    +    }
    +
    +    /**
    +     * addMoreActionsButtons
    +     *
    +     * @param array 		$parameters		array of parameters
    +     * @param Object	 	$object			Object
    +     * @param string		$action			Actions
    +     * @param HookManager	$hookmanager	Hook manager
    +     * @return void
    +     */
    +    function addMoreActionsButtons($parameters, &$object, &$action, $hookmanager)
    +    {
    +        global $conf, $user, $langs;
    +        $langs->load('datapolicy@datapolicy');
    +
    +        if (! empty($conf->global->DATAPOLICIES_ENABLE_EMAILS))
    +        {
    +	        $dialog = '<div id="dialogdatapolicy" style="display:none;" title="' . $langs->trans('DATAPOLICIES_PORTABILITE_TITLE') . '">';
    +	        $dialog .= '<div class="confirmmessage">' . img_help('', '') . ' ' . $langs->trans('DATAPOLICIES_PORTABILITE_CONFIRMATION') . '</div>';
    +	        $dialog .= "</div>";
    +	        $dialog .= '<script>
    +	                  $( function() {
    +	                    $("#rpgpdbtn").on("click", function(){
    +	                        var href = $(this).attr("href");
    +	                        $( "#dialogdatapolicy" ).dialog({
    +	                          modal: true,
    +	                          buttons: {
    +	                            "OK": function() {
    +	                              window.open(href);
    +	                              $( this ).dialog( "close" );
    +	                            },
    +	                            "' . $langs->trans('Cancel') . '": function() {
    +	                              $( this ).dialog( "close" );
    +	                            }
    +	                          }
    +	                        });
    +
    +
    +	                    return false;
    +	                    });
    +	                  } );
    +	                  </script>';
    +	        echo $dialog;
    +	        if ($parameters['currentcontext'] == 'thirdpartycard' && in_array($object->forme_juridique_code, array(11, 12, 13, 15, 17, 18, 19, 35, 60, 200, 311, 312, 316, 401, 600, 700, 1005)) || $object->typent_id == 8) {
    +	            echo '<div class="inline-block divButAction"><a target="_blank" id="rpgpdbtn" class="butAction" href="' . $_SERVER["PHP_SELF"] . "?socid=" . $object->id . '&action=datapolicy_portabilite" title="' . $langs->trans('DATAPOLICIES_PORTABILITE_TITLE') . '">' . $langs->trans("DATAPOLICIES_PORTABILITE") . '</a></div>';
    +	        } elseif ($parameters['currentcontext'] == 'membercard') {
    +	            echo '<div class="inline-block divButAction"><a target="_blank" id="rpgpdbtn" class="butAction" href="' . $_SERVER["PHP_SELF"] . "?rowid=" . $object->id . '&action=datapolicy_portabilite" title="' . $langs->trans('DATAPOLICIES_PORTABILITE_TITLE') . '">' . $langs->trans("DATAPOLICIES_PORTABILITE") . '</a></div>';
    +	        } elseif ($parameters['currentcontext'] == 'contactcard') {
    +	            echo '<div class="inline-block divButAction"><a target="_blank" id="rpgpdbtn" class="butAction" href="' . $_SERVER["PHP_SELF"] . "?id=" . $object->id . '&action=datapolicy_portabilite" title="' . $langs->trans('DATAPOLICIES_PORTABILITE_TITLE') . '">' . $langs->trans("DATAPOLICIES_PORTABILITE") . '</a></div>';
    +	        }
    +	        if (!empty($object->mail) && empty($object->array_options['options_datapolicy_send']) && $parameters['currentcontext'] == 'thirdpartycard' && in_array($object->forme_juridique_code, array(11, 12, 13, 15, 17, 18, 19, 35, 60, 200, 311, 312, 316, 401, 600, 700, 1005)) || $object->typent_id == 8) {
    +	            echo '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . "?socid=" . $object->id . '&action=send_datapolicy" title="' . $langs->trans('DATAPOLICIES_SEND') . '">' . $langs->trans("DATAPOLICIES_SEND") . '</a></div>';
    +	        } elseif (!empty($object->mail) && empty($object->array_options['options_datapolicy_send']) && $parameters['currentcontext'] == 'membercard') {
    +	            echo '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . "?rowid=" . $object->id . '&action=send_datapolicy" title="' . $langs->trans('DATAPOLICIES_SEND') . '">' . $langs->trans("DATAPOLICIES_SEND") . '</a></div>';
    +	        } elseif (!empty($object->mail) && empty($object->array_options['options_datapolicy_send']) && $parameters['currentcontext'] == 'contactcard') {
    +	            echo '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . "?id=" . $object->id . '&action=send_datapolicy" title="' . $langs->trans('DATAPOLICIES_SEND') . '">' . $langs->trans("DATAPOLICIES_SEND") . '</a></div>';
    +	        }
    +        }
    +    }
    +
    +    /**
    +     * printCommonFooter
    +     *
    +     * @param array 		$parameters		array of parameters
    +     * @param Object	 	$object			Object
    +     * @param string		$action			Actions
    +     * @param HookManager	$hookmanager	Hook manager
    +     * @return void
    +     */
    +    function printCommonFooter($parameters, &$object, &$action, $hookmanager)
    +    {
    +        global $conf, $user, $langs;
    +
    +        $jsscript = '';
    +        if ($parameters['currentcontext'] == 'thirdpartycard') {
    +            if (GETPOST('action') == 'create' || GETPOST('action') == 'edit' || GETPOST('action') == '') {
    +                $jsscript .= '<script>';
    +                $jsscript .= "var elementToHide = 'tr.societe_extras_datapolicy_consentement, tr.societe_extras_datapolicy_opposition_traitement, tr.societe_extras_datapolicy_opposition_prospection';" . PHP_EOL;
    +                $jsscript .= "var forme_juridique = [" . PHP_EOL;
    +                $jsscript .= "11, 12, 13, 15, 17, 18, 19, 35, 60, 200, 311, 312, 316, 401, 600, 700, 1005" . PHP_EOL;
    +                $jsscript .= "];" . PHP_EOL;
    +                $jsscript .= "function hideRgPD() {" . PHP_EOL;
    +                $jsscript .= " if ($('#typent_id').val() == 8 || forme_juridique.indexOf(parseInt($('#forme_juridique_code').val())) > -1) {" . PHP_EOL;
    +                $jsscript .= " console.log(elementToHide);" . PHP_EOL;
    +                $jsscript .= " $('tr.societe_extras_datapolicy_consentement, tr.societe_extras_datapolicy_opposition_traitement, tr.societe_extras_datapolicy_opposition_prospection').show(); } else { $('tr.societe_extras_datapolicy_consentement, tr.societe_extras_datapolicy_opposition_traitement, tr.societe_extras_datapolicy_opposition_prospection').hide(); }}" . PHP_EOL;
    +                $jsscript .= "hideRgPD();" . PHP_EOL;
    +                $jsscript .= "$('#forme_juridique_code, #typent_id').change(function(){ hideRgPD(); });" . PHP_EOL;
    +                $jsscript .= '</script>';
    +            } elseif (GETPOST('action') == 'confirm_delete' && GETPOST('confirm') == 'yes' && GETPOST('socid') > 0) {
    +
    +                // La suppression n'a pas été possible
    +                require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
    +                $societe = new Societe($this->db);
    +                $societe->fetch(GETPOST('socid'));
    +                // On vérifie si il est utilisé
    +                if ((in_array($object->forme_juridique_code, array(11, 12, 13, 15, 17, 18, 19, 35, 60, 200, 311, 312, 316, 401, 600, 700, 1005)) || $societe->typent_id == 8) && $societe->isObjectUsed(GETPOST('socid'))) {
    +
    +                    require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php';
    +                    $form = new Form($this->db);
    +                    echo $form->formconfirm($_SERVER["PHP_SELF"] . "?socid=" . GETPOST('socid'), substr($langs->trans("DATAPOLICIES_POPUP_ANONYME_TITLE"), 0, strlen($langs->trans("DATAPOLICIES_POPUP_ANONYME_TITLE")) - 2), $langs->trans("DATAPOLICIES_POPUP_ANONYME_TEXTE"), 'anonymiser', '', '', 1);
    +                }
    +            }
    +
    +            if (GETPOST('socid')) {
    +                require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
    +                $societe = new Societe($this->db);
    +                $societe->fetch(GETPOST('socid'));
    +
    +                if (!in_array($object->forme_juridique_code, array(11, 12, 13, 15, 17, 18, 19, 35, 60, 200, 311, 312, 316, 401, 600, 700, 1005)) && $societe->typent_id != 8) {
    +
    +                    require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php';
    +                    $jsscript .= '<script>';
    +                    $jsscript .= "var elementToHide = 'td.societe_extras_datapolicy_opposition_traitement, td.societe_extras_datapolicy_opposition_prospection, td.societe_extras_datapolicy_consentement';" . PHP_EOL;
    +                    $jsscript .= "$(elementToHide).parent('tr').hide();" . PHP_EOL;
    +                    $jsscript .= '</script>';
    +                }
    +            }
    +        } elseif ($parameters['currentcontext'] == 'contactcard') {
    +            if (GETPOST('action') == 'create' || GETPOST('action') == 'edit') {
    +                $jsscript .= '<script>';
    +                $jsscript .= "$('#options_datapolicy_opposition_traitement, #options_datapolicy_opposition_prospection, input[name=\"options_datapolicy_opposition_traitement\"], input[name=\"options_datapolicy_opposition_prospection\"]').change(function(){
    +                    if($('#options_datapolicy_opposition_traitement').prop('checked') == true || $('input[name=options_datapolicy_opposition_traitement]').prop('checked') || $('#options_datapolicy_opposition_prospection').prop('checked') || $('input[name=options_datapolicy_opposition_prospection]').prop('checked')) {
    +                        $('#no_email').val(1);
    +                    }
    +                });";
    +                $jsscript .= '</script>';
    +            }
    +        }
    +
    +        echo $jsscript;
    +    }
    +}
    diff --git a/htdocs/datapolicy/class/datapolicy.class.php b/htdocs/datapolicy/class/datapolicy.class.php
    new file mode 100644
    index 00000000000..35b618cbaca
    --- /dev/null
    +++ b/htdocs/datapolicy/class/datapolicy.class.php
    @@ -0,0 +1,356 @@
    +<?php
    +/* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    datapolicy/class/datapolicy.class.php
    + * \ingroup datapolicy
    + * \brief   Class to manage feature of Data Policy module.
    + */
    +include_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
    +include_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
    +include_once DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php';
    +
    +
    +/**
    + * Class DataPolicy
    + */
    +Class DataPolicy
    +{
    +	/**
    +	 * getAllContactNotInformed
    +	 *
    +	 * @return number
    +	 */
    +    function getAllContactNotInformed()
    +    {
    +        global $langs, $conf, $db, $user;
    +
    +        $langs->load("companies");
    +
    +        $sql = "SELECT c.rowid";
    +        $sql .= " FROM " . MAIN_DB_PREFIX . "socpeople as c";
    +        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe as s ON c.fk_soc = s.rowid";
    +        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "socpeople_extrafields as spe ON spe.fk_object = c.rowid";
    +        $sql .= " WHERE (c.statut=1 AND c.no_email=0 AND (spe.datapolicy_consentement=0 OR spe.datapolicy_consentement IS NULL) AND (spe.datapolicy_opposition_traitement=0 OR spe.datapolicy_opposition_traitement IS NULL) AND (spe.datapolicy_opposition_prospection=0 OR spe.datapolicy_opposition_prospection IS NULL))";
    +        $sql .= " AND spe.datapolicy_send IS NULL";
    +        $sql .= " AND c.entity=" . $conf->entity;
    +        $resql = $this->db->query($sql);
    +        if ($resql) {
    +            $num = $this->db->num_rows($resql);
    +            $i = 0;
    +            while ($i < $num) {
    +                $obj = $this->db->fetch_object($resql);
    +                $contact = new Contact($db);
    +                $contact->fetch($obj->rowid);
    +
    +                DataPolicy::sendMailDataPolicyContact($contact);
    +                $i++;
    +            }
    +        } else {
    +            $this->error = $this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +    /**
    +     * getAllCompaniesNotInformed
    +     *
    +     * @return number
    +     */
    +    function getAllCompaniesNotInformed()
    +    {
    +        global $langs, $conf, $db, $user;
    +
    +        $langs->load("companies");
    +
    +        $sql = "SELECT s.rowid";
    +        $sql .= " FROM " . MAIN_DB_PREFIX . "societe as s";
    +        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "societe_extrafields as se ON se.fk_object = s.rowid";
    +        $sql .= " WHERE s.statut=0 AND (se.datapolicy_consentement=0 OR se.datapolicy_consentement IS NULL) AND (se.datapolicy_opposition_traitement=0 OR se.datapolicy_opposition_traitement IS NULL) AND (se.datapolicy_opposition_prospection=0 OR se.datapolicy_opposition_prospection IS NULL)";
    +        $sql .= " AND se.datapolicy_send IS NULL";
    +        $sql .= " AND s.entity=" . $conf->entity;
    +        $resql = $this->db->query($sql);
    +        if ($resql) {
    +            $num = $this->db->num_rows($resql);
    +            $i = 0;
    +            while ($i < $num) {
    +                $obj = $this->db->fetch_object($resql);
    +                $societe = new Societe($db);
    +                $societe->fetch($obj->rowid);
    +
    +                DataPolicy::sendMailDataPolicyCompany($societe);
    +                $i++;
    +            }
    +        } else {
    +            $this->error = $this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +    /**
    +     * getAllAdherentsNotInformed
    +     *
    +     * @return number
    +     */
    +    function getAllAdherentsNotInformed()
    +    {
    +        global $langs, $conf, $db, $user;
    +
    +        $langs->load("adherent");
    +
    +        $sql = "SELECT a.rowid";
    +        $sql .= " FROM " . MAIN_DB_PREFIX . "adherent as a";
    +        $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "adherent_extrafields as ae ON ae.fk_object = a.rowid";
    +        $sql .= " WHERE a.statut=0 AND (ae.datapolicy_consentement=0 OR ae.datapolicy_consentement IS NULL) AND (ae.datapolicy_opposition_traitement=0 OR ae.datapolicy_opposition_traitement IS NULL) AND (ae.datapolicy_opposition_prospection=0 OR ae.datapolicy_opposition_prospection IS NULL)";
    +        $sql .= " AND ae.datapolicy_send IS NULL";
    +        $sql .= " AND a.entity=" . $conf->entity;
    +        $resql = $this->db->query($sql);
    +        if ($resql) {
    +            $num = $this->db->num_rows($resql);
    +            $i = 0;
    +            while ($i < $num) {
    +                $obj = $this->db->fetch_object($resql);
    +                $adherent = new Adherent($db);
    +                $adherent->fetch($obj->rowid);
    +
    +                DataPolicy::sendMailDataPolicyAdherent($adherent);
    +                $i++;
    +            }
    +        } else {
    +            $this->error = $this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +    /**
    +     * sendMailDataPolicyContact
    +     *
    +     * @param 	mixed		$contact		Contact
    +     * @return	void
    +     */
    +    function sendMailDataPolicyContact($contact)
    +    {
    +     	global $langs, $conf, $db, $user;
    +
    +     	$error = 0;
    +
    +     	$from = $user->getFullName($langs) . ' <' . $user->email . '>';
    +
    +     	$sendto = $contact->email;
    +     	$code= md5($contact->email);
    +     	if (!empty($contact->default_lang)) {
    +     		$l = $contact->default_lang;
    +     	} else {
    +     		$l = $langs->defaultlang;
    +     	}
    +     	$s = "DATAPOLICIESSUBJECT_" . $l;
    +     	$ma = "DATAPOLICIESCONTENT_" . $l;
    +     	$la = 'TXTLINKDATAPOLICIESACCEPT_' . $l;
    +     	$lr = 'TXTLINKDATAPOLICIESREFUSE_' . $l;
    +
    +     	$subject = $conf->global->$s;
    +     	$message = $conf->global->$ma;
    +     	$linka = $conf->global->$la;
    +     	$linkr = $conf->global->$lr;
    +     	$sendtocc = $sendtobcc = '';
    +     	$filepath = $mimetype = $filename = array();
    +     	$deliveryreceipt = 0;
    +
    +     	$substitutionarray = array(
    +     	'__LINKACCEPT__' => '<a href="'.dol_buildpath('/datapolicy/public/index.php?action=1&c='.$contact->id.'&l='.$l.'&key='.$code,3).'" target="_blank">'.$linka.'</a>',
    +     	'__LINKREFUSED__' => '<a href="'.dol_buildpath('/datapolicy/public/index.php?action=2&c='.$contact->id.'&l='.$l.'&key='.$code,3).'" target="_blank">'.$linkr.'</a>',
    +     	'__FIRSTNAME__' => $contact->firstname,
    +     	'__NAME__' => $contact->lastname,
    +     	'__CIVILITY__' => $contact->civility,
    +     	);
    +     	$subject = make_substitutions($subject, $substitutionarray);
    +     	$message = make_substitutions($message, $substitutionarray);
    +
    +     	$actiontypecode = 'AC_EMAIL';
    +     	$actionmsg = $langs->transnoentities('MailSentBy') . ' ' . $from . ' ' . $langs->transnoentities('To') . ' ' . $sendto;
    +     	if ($message) {
    +     		if ($sendtocc)
    +     			$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('Bcc') . ": " . $sendtocc);
    +     			$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('MailTopic') . ": " . $subject);
    +     			$actionmsg = dol_concatdesc($actionmsg, $langs->transnoentities('TextUsedInTheMessageBody') . ":");
    +     			$actionmsg = dol_concatdesc($actionmsg, $message);
    +     	}
    +
    +
    +     	// Send mail
    +     	require_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php';
    +     	$mailfile = new CMailFile($subject, $sendto, $from, $message, $filepath, $mimetype, $filename, $sendtocc, $sendtobcc, $deliveryreceipt, -1);
    +
    +     	if ($mailfile->error) {
    +     		$resultmasssend .= '<div class="error">' . $mailfile->error . '</div>';
    +     	} else {
    +     		$result4 = $mailfile->sendfile();
    +     		if (!$error) {
    +
    +     			$resultmasssend .= $langs->trans("MailSent") . ': ' . $sendto . "<br>";
    +     			$contact->array_options['options_datapolicy_send'] = date('Y-m-d', time());
    +     			$contact->update($contact->id);
    +     		} else {
    +     			dol_print_error($db);
    +     		}
    +     	}
    +     	setEventMessage($resultmasssend);
    +    }
    +
    +    /**
    +     * sendMailDataPolicyCompany
    +     *
    +     * @param Societe	$societe	Object societe
    +     * @return	void
    +     */
    +    function sendMailDataPolicyCompany($societe)
    +    {
    +     	global $langs, $conf, $db, $user;
    +
    +     	$error = 0;
    +
    +     	$from = $user->getFullName($langs) . ' <' . $user->email . '>';
    +
    +     	$sendto = $societe->email;
    +
    +     	$code= md5($societe->email);
    +     	if (!empty($societe->default_lang)) {
    +     		$l = $societe->default_lang;
    +     	} else {
    +     		$l = $langs->defaultlang;
    +     	}
    +     	$s = "DATAPOLICIESSUBJECT_" . $l;
    +     	$ma = "DATAPOLICIESCONTENT_" . $l;
    +     	$la = 'TXTLINKDATAPOLICIESACCEPT_' . $l;
    +     	$lr = 'TXTLINKDATAPOLICIESREFUSE_' . $l;
    +
    +     	$subject = $conf->global->$s;
    +     	$message = $conf->global->$ma;
    +     	$linka = $conf->global->$la;
    +     	$linkr = $conf->global->$lr;
    +     	$sendtocc = $sendtobcc = '';
    +     	$filepath = $mimetype = $filename = array();
    +     	$deliveryreceipt = 0;
    +
    +     	$substitutionarray = array(
    +            '__LINKACCEPT__' => '<a href="'.dol_buildpath('/datapolicy/public/index.php?action=1&s='.$societe->id.'&l='.$l.'&key='.$code,3).'" target="_blank">'.$linka.'</a>',
    +            '__LINKREFUSED__' => '<a href="'.dol_buildpath('/datapolicy/public/index.php?action=2&s='.$societe->id.'&l='.$l.'&key='.$code,3).'" target="_blank">'.$linkr.'</a>',
    +     	);
    +     	$subject = make_substitutions($subject, $substitutionarray);
    +     	$message = make_substitutions($message, $substitutionarray);
    +
    +     	$actiontypecode = 'AC_EMAIL';
    +     	$actionmsg = $langs->transnoentities('MailSentBy') . ' ' . $from . ' ' . $langs->transnoentities('To') . ' ' . $sendto;
    +     	if ($message) {
    +     		if ($sendtocc) {
    +                 $actionmsg .= dol_concatdesc($actionmsg, $langs->transnoentities('Bcc') . ": " . $sendtocc);
    +             }
    +            $actionmsg .= dol_concatdesc($actionmsg, $langs->transnoentities('MailTopic') . ": " . $subject);
    +            $actionmsg .= dol_concatdesc($actionmsg, $langs->transnoentities('TextUsedInTheMessageBody') . ":");
    +            $actionmsg .= dol_concatdesc($actionmsg, $message);
    +        }
    +
    +     	// Send mail
    +     	require_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php';
    +     	$mailfile = new CMailFile($subject, $sendto, $from, $message, $filepath, $mimetype, $filename, $sendtocc, $sendtobcc, $deliveryreceipt, -1);
    +     	if ($mailfile->error) {
    +     		$resultmasssend .= '<div class="error">' . $mailfile->error . '</div>';
    +     	} else {
    +     		$result4 = $mailfile->sendfile();
    +
    +     		if (!$error) {
    +     			$resultmasssend .= $langs->trans("MailSent") . ': ' . $sendto . "<br>";
    +     			$societe->array_options['options_datapolicy_send'] = date('Y-m-d', time());
    +     			$societe->update($societe->id);
    +     		} else {
    +     			dol_print_error($db);
    +     		}
    +     	}
    +     	setEventMessage($resultmasssend);
    +    }
    +
    +    /**
    +     * sendMailDataPolicyAdherent
    +     *
    +     * @param Adherent	$adherent		Member
    +     * @return void
    +     */
    +    function sendMailDataPolicyAdherent($adherent)
    +    {
    +    	global $langs, $conf, $db, $user;
    +
    +    	$error = 0;
    +
    +    	$from = $user->getFullName($langs) . ' <' . $user->email . '>';
    +
    +    	$sendto = $adherent->email;
    +
    +    	$code= md5($adherent->email);
    +    	if (!empty($adherent->default_lang)) {
    +    		$l = $adherent->default_lang;
    +    	} else {
    +    		$l = $langs->defaultlang;
    +    	}
    +    	$la = 'TXTLINKDATAPOLICIESACCEPT_' . $l;
    +    	$lr = 'TXTLINKDATAPOLICIESREFUSE_' . $l;
    +
    +    	$subject = $conf->global->$s;
    +    	$message = $conf->global->$ma;
    +    	$linka = $conf->global->$la;
    +    	$linkr = $conf->global->$lr;
    +    	$sendtocc = $sendtobcc = '';
    +    	$filepath = $mimetype = $filename = array();
    +    	$deliveryreceipt = 0;
    +
    +    	$substitutionarray = array(
    +            '__LINKACCEPT__' => '<a href="'.dol_buildpath('/datapolicy/public/index.php?action=1&a='.$adherent->id.'&l='.$l.'&key='.$code,3).'" target="_blank">'.$linka.'</a>',
    +            '__LINKREFUSED__' => '<a href="'.dol_buildpath('/datapolicy/public/index.php?action=2&a='.$adherent->id.'&l='.$l.'&key='.$code,3).'" target="_blank">'.$linkr.'</a>',
    +    	);
    +    	$subject = make_substitutions($subject, $substitutionarray);
    +    	$message = make_substitutions($message, $substitutionarray);
    +
    +    	$actiontypecode = 'AC_EMAIL';
    +    	$actionmsg = $langs->transnoentities('MailSentBy') . ' ' . $from . ' ' . $langs->transnoentities('To') . ' ' . $sendto;
    +    	if ($message) {
    +    		if ($sendtocc) {
    +                $actionmsg .= dol_concatdesc($actionmsg, $langs->transnoentities('Bcc') . ": " . $sendtocc);
    +            }
    +            $actionmsg .= dol_concatdesc($actionmsg, $langs->transnoentities('MailTopic') . ": " . $subject);
    +            $actionmsg .= dol_concatdesc($actionmsg, $langs->transnoentities('TextUsedInTheMessageBody') . ":");
    +            $actionmsg .= dol_concatdesc($actionmsg, $message);
    +    	}
    +
    +
    +    	// Send mail
    +    	require_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php';
    +    	$mailfile = new CMailFile($subject, $sendto, $from, $message, $filepath, $mimetype, $filename, $sendtocc, $sendtobcc, $deliveryreceipt, -1);
    +    	if ($mailfile->error) {
    +    		$resultmasssend .= '<div class="error">' . $mailfile->error . '</div>';
    +    	} else {
    +    		$result4 = $mailfile->sendfile();
    +
    +    		if (!$error) {
    +    			$resultmasssend .= $langs->trans("MailSent") . ': ' . $sendto . "<br>";
    +    			$adherent->array_options['options_datapolicy_send'] = date('Y-m-d', time());
    +    			$adherent->update($user);
    +    		} else {
    +    			dol_print_error($db);
    +    		}
    +    	}
    +    	setEventMessage($resultmasssend);
    +    }
    +}
    diff --git a/htdocs/datapolicy/class/datapolicycron.class.php b/htdocs/datapolicy/class/datapolicycron.class.php
    new file mode 100644
    index 00000000000..ab4b55b35dc
    --- /dev/null
    +++ b/htdocs/datapolicy/class/datapolicycron.class.php
    @@ -0,0 +1,521 @@
    +<?php
    +/* Copyright (C) 2018 Nicolas ZABOURI   <info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    datapolicy/class/datapolicycron.class.php
    + * \ingroup datapolicy
    + * \brief   Example hook overload.
    + */
    +
    +/**
    + * Class DataPolicyCron
    + */
    +class DataPolicyCron
    +{
    +	/**
    +	 * Function exec
    +	 *
    +	 * @return boolean
    +	 */
    +    public function exec()
    +    {
    +        global $conf, $db, $langs, $user;
    +
    +        $langs->load('datapolicy@datapolicy');
    +
    +        // FIXME Removed hardcoded values of id
    +        $arrayofparameters=array(
    +            'DATAPOLICIES_TIERS_CLIENT' => array(
    +                'sql' => "
    +                    SELECT s.rowid FROM ".MAIN_DB_PREFIX."societe as s
    +                    WHERE (s.fk_forme_juridique IN (11, 12, 13, 15, 17, 18, 19, 35, 60, 312, 316, 401, 600, 700, 1005) OR s.fk_typent = 8)
    +                    AND s.entity = %d
    +                    AND s.client = 1
    +                    AND s.fournisseur = 0
    +                    AND s.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_soc
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_soc IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Societe",
    +                "file" => DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php',
    +                'fields_anonym' => array(
    +                    'name' => $langs->trans('ANONYME'),
    +                    'name_bis' => '',
    +                    'name_alias' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_TIERS_PROSPECT' => array(
    +                'sql' => "
    +                    SELECT s.rowid FROM ".MAIN_DB_PREFIX."societe as s
    +                    WHERE (s.fk_forme_juridique IN (11, 12, 13, 15, 17, 18, 19, 35, 60, 312, 316, 401, 600, 700, 1005) OR s.fk_typent = 8)
    +                    AND s.entity = %d
    +                    AND s.client = 2
    +                    AND s.fournisseur = 0
    +                    AND s.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_soc
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_soc IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Societe",
    +                "file" => DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php',
    +                'fields_anonym' => array(
    +                    'name' => $langs->trans('ANONYME'),
    +                    'name_bis' => '',
    +                    'name_alias' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_TIERS_PROSPECT_CLIENT' => array(
    +                'sql' => "
    +                    SELECT s.rowid FROM ".MAIN_DB_PREFIX."societe as s
    +                    WHERE (s.fk_forme_juridique  IN (11, 12, 13, 15, 17, 18, 19, 35, 60, 312, 316, 401, 600, 700, 1005) OR s.fk_typent = 8)
    +                    AND s.entity = %d
    +                    AND s.client = 3
    +                    AND s.fournisseur = 0
    +                    AND s.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_soc
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_soc IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Societe",
    +                "file" => DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php',
    +                'fields_anonym' => array(
    +                    'name' => $langs->trans('ANONYME'),
    +                    'name_bis' => '',
    +                    'name_alias' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_TIERS_NIPROSPECT_NICLIENT' => array(
    +                'sql' => "
    +                    SELECT s.rowid FROM ".MAIN_DB_PREFIX."societe as s
    +                    WHERE (s.fk_forme_juridique  IN (11, 12, 13, 15, 17, 18, 19, 35, 60, 312, 316, 401, 600, 700, 1005) OR s.fk_typent = 8)
    +                    AND s.entity = %d
    +                    AND s.client = 0
    +                    AND s.fournisseur = 0
    +                    AND s.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_soc
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_soc IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Societe",
    +                "file" => DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php',
    +                'fields_anonym' => array(
    +                    'name' => $langs->trans('ANONYME'),
    +                    'name_bis' => '',
    +                    'name_alias' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_TIERS_FOURNISSEUR' => array(
    +                'sql' => "
    +                    SELECT s.rowid FROM ".MAIN_DB_PREFIX."societe as s
    +                    WHERE (s.fk_forme_juridique  IN (11, 12, 13, 15, 17, 18, 19, 35, 60, 312, 316, 401, 600, 700, 1005) OR s.fk_typent = 8)
    +                    AND s.entity = %d
    +                    AND s.fournisseur = 1
    +                    AND s.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_soc
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_contact IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Societe",
    +                "file" => DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php',
    +                'fields_anonym' => array(
    +                    'name' => $langs->trans('ANONYME'),
    +                    'name_bis' => '',
    +                    'name_alias' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_CONTACT_CLIENT' => array(
    +                'sql' => "
    +                    SELECT c.rowid FROM ".MAIN_DB_PREFIX."socpeople as c
    +                    INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = c.fk_soc
    +                    WHERE c.entity = %d
    +                    AND c.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.client = 1
    +                    AND s.fournisseur = 0
    +                    AND c.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_contact
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_contact IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Contact",
    +                "file" => DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php',
    +                'fields_anonym' => array(
    +                    'lastname' => $langs->trans('ANONYME'),
    +                    'firstname' => '',
    +                    'civility_id' => '',
    +                    'poste' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone_pro' => '',
    +                    'phone_perso' => '',
    +                    'phone_mobile' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'jabberid' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_CONTACT_PROSPECT' => array(
    +                'sql' => "
    +                    SELECT c.rowid FROM ".MAIN_DB_PREFIX."socpeople as c
    +                    INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = c.fk_soc
    +                    WHERE c.entity = %d
    +                    AND c.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.client = 2
    +                    AND s.fournisseur = 0
    +                    AND c.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_contact
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_contact IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Contact",
    +                "file" => DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php',
    +                'fields_anonym' => array(
    +                    'lastname' => $langs->trans('ANONYME'),
    +                    'firstname' => '',
    +                    'civility_id' => '',
    +                    'poste' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone_pro' => '',
    +                    'phone_perso' => '',
    +                    'phone_mobile' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'jabberid' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_CONTACT_PROSPECT_CLIENT' => array(
    +                'sql' => "
    +                    SELECT c.rowid FROM ".MAIN_DB_PREFIX."socpeople as c
    +                    INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = c.fk_soc
    +                    WHERE c.entity = %d
    +                    AND c.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.client = 3
    +                    AND s.fournisseur = 0
    +                    AND c.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_contact
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_contact IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Contact",
    +                "file" => DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php',
    +                'fields_anonym' => array(
    +                    'lastname' => $langs->trans('ANONYME'),
    +                    'firstname' => '',
    +                    'civility_id' => '',
    +                    'poste' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone_pro' => '',
    +                    'phone_perso' => '',
    +                    'phone_mobile' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'jabberid' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_CONTACT_NIPROSPECT_NICLIENT' => array(
    +                'sql' => "
    +                    SELECT c.rowid FROM ".MAIN_DB_PREFIX."socpeople as c
    +                    INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = c.fk_soc
    +                    WHERE c.entity = %d
    +                    AND c.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.client = 0
    +                    AND s.fournisseur = 0
    +                    AND c.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_contact
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_contact IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Contact",
    +                "file" => DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php',
    +                'fields_anonym' => array(
    +                    'lastname' => $langs->trans('ANONYME'),
    +                    'firstname' => '',
    +                    'civility_id' => '',
    +                    'poste' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone_pro' => '',
    +                    'phone_perso' => '',
    +                    'phone_mobile' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'jabberid' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_CONTACT_FOURNISSEUR' => array(
    +                'sql' => "
    +                    SELECT c.rowid FROM ".MAIN_DB_PREFIX."socpeople as c
    +                    INNER JOIN ".MAIN_DB_PREFIX."societe as s ON s.rowid = c.fk_soc
    +                    WHERE c.entity = %d
    +                    AND c.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND s.fournisseur = 1
    +                    AND c.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_contact
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.fk_contact IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Contact",
    +                "file" => DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php',
    +                'fields_anonym' => array(
    +                    'lastname' => $langs->trans('ANONYME'),
    +                    'firstname' => '',
    +                    'civility_id' => '',
    +                    'poste' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone_pro' => '',
    +                    'phone_perso' => '',
    +                    'phone_mobile' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'jabberid' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +            'DATAPOLICIES_ADHERENT' => array(
    +                'sql' => "
    +                    SELECT a.rowid FROM ".MAIN_DB_PREFIX."adherent as a
    +                    WHERE a.entity = %d
    +                    AND a.tms < DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                    AND a.rowid NOT IN (
    +                        SELECT DISTINCT a.fk_element
    +                        FROM ".MAIN_DB_PREFIX."actioncomm as a
    +                        WHERE a.tms > DATE_SUB(NOW(), INTERVAL %d MONTH)
    +                        AND a.elementtype LIKE 'member'
    +                        AND a.fk_element IS NOT NULL
    +                    )
    +                ",
    +                "class" => "Adherent",
    +                "file" => DOL_DOCUMENT_ROOT . '/adherents/class/adherent.class.php',
    +                'fields_anonym' => array(
    +                    'lastname' => $langs->trans('ANONYME'),
    +                    'firstname' => $langs->trans('ANONYME'),
    +                    'civility_id' => '',
    +                    'societe' => '',
    +                    'address' => '',
    +                    'town' => '',
    +                    'zip' => '',
    +                    'phone' => '',
    +                    'phone_perso' => '',
    +                    'phone_mobile' => '',
    +                    'email' => '',
    +                    'url' => '',
    +                    'fax' => '',
    +                    'state' => '',
    +                    'country' => '',
    +                    'state_id' => '',
    +                    'skype' => '',
    +                    'country_id' => '',
    +                )
    +            ),
    +        );
    +
    +        foreach ($arrayofparameters as $key => $params) {
    +            if ($conf->global->$key != '' && is_numeric($conf->global->$key) && (int) $conf->global->$key > 0) {
    +
    +                $sql = sprintf($params['sql'], (int) $conf->entity, (int) $conf->global->$key, (int) $conf->global->$key);
    +
    +                $resql = $db->query($sql);
    +
    +                if ($resql && $db->num_rows($resql) > 0) {
    +
    +                    $num = $db->num_rows($resql);
    +                    $i = 0;
    +
    +                    require_once $params['file'];
    +                    $object = new $params['class']($db);
    +
    +                    while ($i < $num)
    +                    {
    +                        $obj = $db->fetch_object($resql);
    +
    +                        $object->fetch($obj->rowid);
    +                        $object->id = $obj->rowid;
    +
    +                        if ($object->isObjectUsed($obj->rowid) > 0) {
    +                            foreach ($params['fields_anonym'] as $fields => $val) {
    +                                $object->$fields = $val;
    +                            }
    +                            $object->update($obj->rowid, $user);
    +                            if ($params['class'] == 'Societe') {
    +                                // On supprime les contacts associé
    +                                $sql = "DELETE FROM ".MAIN_DB_PREFIX."socpeople WHERE fk_soc = " . $obj->rowid;
    +                                $db->query($sql);
    +                            }
    +                        } else {
    +                            if (DOL_VERSION < 8) {
    +                                $ret = $object->delete($obj->rowid, $user);
    +                            } else {
    +                                if ($object->element == 'adherent') {
    +                                    $ret = $object->delete($obj->rowid);
    +                                } else {
    +                                    $ret = $object->delete();
    +                                }
    +                            }
    +                        }
    +
    +                        $i++;
    +                    }
    +                }
    +            }
    +        }
    +        return true;
    +    }
    +
    +
    +    /**
    +     * sendMailing
    +     *
    +     * @return boolean
    +     */
    +    public function sendMailing()
    +    {
    +        global $conf, $db, $langs, $user;
    +
    +        $langs->load('datapolicy@datapolicy');
    +
    +        require_once DOL_DOCUMENT_ROOT . '/datapolicy/class/datapolicy.class.php';
    +
    +        $contacts = new DataPolicy($db);
    +        $contacts->getAllContactNotInformed();
    +        $contacts->getAllCompaniesNotInformed();
    +        $contacts->getAllAdherentsNotInformed();
    +        return true;
    +    }
    +}
    \ No newline at end of file
    diff --git a/htdocs/datapolicy/img/datapolicy.png b/htdocs/datapolicy/img/datapolicy.png
    new file mode 100644
    index 00000000000..2681ccc1d3a
    Binary files /dev/null and b/htdocs/datapolicy/img/datapolicy.png differ
    diff --git a/htdocs/datapolicy/img/gfdl.png b/htdocs/datapolicy/img/gfdl.png
    new file mode 100644
    index 00000000000..f2bacfd179a
    Binary files /dev/null and b/htdocs/datapolicy/img/gfdl.png differ
    diff --git a/htdocs/datapolicy/img/gplv3.png b/htdocs/datapolicy/img/gplv3.png
    new file mode 100644
    index 00000000000..ba78d4c4941
    Binary files /dev/null and b/htdocs/datapolicy/img/gplv3.png differ
    diff --git a/htdocs/datapolicy/img/object_datapolicy.png b/htdocs/datapolicy/img/object_datapolicy.png
    new file mode 100644
    index 00000000000..5d65c309cca
    Binary files /dev/null and b/htdocs/datapolicy/img/object_datapolicy.png differ
    diff --git a/htdocs/datapolicy/img/object_inoveaconseil.png b/htdocs/datapolicy/img/object_inoveaconseil.png
    new file mode 100644
    index 00000000000..292a9c75ef2
    Binary files /dev/null and b/htdocs/datapolicy/img/object_inoveaconseil.png differ
    diff --git a/htdocs/datapolicy/langs/en_US/datapolicy.lang b/htdocs/datapolicy/langs/en_US/datapolicy.lang
    new file mode 100644
    index 00000000000..ddcd2180cb0
    --- /dev/null
    +++ b/htdocs/datapolicy/langs/en_US/datapolicy.lang
    @@ -0,0 +1,92 @@
    +# Copyright (C) 2018 Nicolas ZABOURI    <info@inovea-conseil.com>
    +#
    +# This program is free software: you can redistribute it and/or modify
    +# it under the terms of the GNU General Public License as published by
    +# the Free Software Foundation, either version 3 of the License, or
    +# (at your option) any later version.
    +#
    +# This program is distributed in the hope that it will be useful,
    +# but WITHOUT ANY WARRANTY; without even the implied warranty of
    +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +# GNU General Public License for more details.
    +#
    +# You should have received a copy of the GNU General Public License
    +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    +
    +# Module label 'ModuledatapolicyName'
    +Module4100Name = Data Privacy Policy
    +# Module description 'ModuledatapolicyDesc'
    +Module4100Desc = Module to manage Data Privacy (Conformity with the GDPR)
    +
    +#
    +# Page d'administration
    +#
    +datapolicySetup = Module Data Privacy Policy Setup
    +Deletion = Deletion of data
    +datapolicySetupPage = Depending of laws of your countries (Example <a href="http://www.privacy-regulation.eu/en/5.htm" target="_blank">Article 5</a> of the GDPR), personal data must be kept for a period not exceeding that necessary for the purposes for which they were collected, except for archival purposes.<br>The deletion will be done automatically after a certain duration without event (the duration which you will have indicated below).
    +NB_MONTHS = %s months
    +ONE_YEAR = 1 year
    +NB_YEARS = %s years
    +DATAPOLICY_TIERS_CLIENT = Customer
    +DATAPOLICY_TIERS_PROSPECT = Prospect
    +DATAPOLICY_TIERS_PROSPECT_CLIENT = Prospect/Customer
    +DATAPOLICY_TIERS_NIPROSPECT_NICLIENT = Nor prospect/Nor customer
    +DATAPOLICY_TIERS_FOURNISSEUR = Supplier
    +DATAPOLICY_CONTACT_CLIENT = Customer
    +DATAPOLICY_CONTACT_PROSPECT = Prospect
    +DATAPOLICY_CONTACT_PROSPECT_CLIENT = Prospect/Customer
    +DATAPOLICY_CONTACT_NIPROSPECT_NICLIENT = Nor prospect/Nor customer
    +DATAPOLICY_CONTACT_FOURNISSEUR = Supplier
    +DATAPOLICY_ADHERENT = Member
    +DATAPOLICY_Tooltip_SETUP = Type of contact - Indicate your choices for each type.
    +DATAPOLICYMail=Emails Setup
    +DATAPOLICYSUBJECTMAIL=Subject of email
    +DATAPOLICYCONTENTMAIL=Content of the email
    +DATAPOLICYSUBSITUTION=You can use the following variables in your email (LINKACCEPT allows to create a link recording the agreement of the person, LINKREFUSED makes it possible to record the refusal of the person):
    +DATAPOLICYACCEPT=Message after agreement
    +DATAPOLICYREFUSE=Message after desagreement
    +SendAgreementText=You can send a GDPR email to all your relevant contacts (who have not yet received an email and for which you have not registered anything about their GDPR agreement). To do this, use the following button.
    +SendAgreement=Send emails
    +AllAgreementSend = All emails have been sent
    +TXTLINKDATAPOLICYACCEPT= Text for the link "agreement" 
    +TXTLINKDATAPOLICYREFUSE= Text for the link "desagreement" 
    +
    +
    +#
    +# Extrafield
    +#
    +DATAPOLICY_BLOCKCHECKBOX = GDPR : Processing of personal data
    +DATAPOLICY_consentement = Consent obtained for the processing of personal data 
    +DATAPOLICY_opposition_traitement = Opposes the processing of his personal data
    +DATAPOLICY_opposition_prospection = Opposes the processing of his personal data for the purposes of prospecting
    +
    +#
    +# Popup
    +#
    +DATAPOLICY_POPUP_ANONYME_TITLE = Anonymize a thirdparty
    +DATAPOLICY_POPUP_ANONYME_TEXTE = You can not delete this contact from Dolibarr because there are related items. In accordance with the GDPR, you will make all this data anonymous to respect your obligations. Would you like to continue ?
    +
    +#
    +# Bouton portabilité
    +# 
    +DATAPOLICY_PORTABILITE = Portability GDPR
    +DATAPOLICY_PORTABILITE_TITLE = Export of personal data
    +DATAPOLICY_PORTABILITE_CONFIRMATION = You want to export the personal data of this contact. Are you sure ?
    +
    +#
    +# Note ajoutés lors d'une anonymisation
    +#
    +ANONYMISER_AT = Anonymised the %s
    +
    +#V2
    +DATAPOLICYReturn=GDPR Validation
    +DATAPOLICY_date = Date of agreement/desagreement GDPR
    +DATAPOLICY_send = Date sending agreement email
    +DATAPOLICYReturn = GDPR Return
    +DATAPOLICY_SEND = Send GDPR email
    +MailSent = Email has been sent
    +
    +#ERROR
    +ErrorSubjectIsRequired= Error : The subject of email is required. Indicate it in the module setup
    +=Due to a technical problem, we were unable to register your choice. We apologize for that. Contact us to send us your choice.
    +NUMBER_MONTH_BEFORE_DELETION = Number of month before deletion
    diff --git a/htdocs/datapolicy/langs/fr_FR/datapolicy.lang b/htdocs/datapolicy/langs/fr_FR/datapolicy.lang
    new file mode 100644
    index 00000000000..7ee710aae2e
    --- /dev/null
    +++ b/htdocs/datapolicy/langs/fr_FR/datapolicy.lang
    @@ -0,0 +1,97 @@
    +# Copyright (C) 2018  INOVEA CONSEil info@inovea-conseil.com
    +#
    +# This program is free software: you can redistribute it and/or modify
    +# it under the terms of the GNU General Public License as published by
    +# the Free Software Foundation, either version 3 of the License, or
    +# (at your option) any later version.
    +#
    +# This program is distributed in the hope that it will be useful,
    +# but WITHOUT ANY WARRANTY; without even the implied warranty of
    +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +# GNU General Public License for more details.
    +#
    +# You should have received a copy of the GNU General Public License
    +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
    +
    +#
    +# Générique
    +#
    +
    +# Module label 'ModuledatapolicyName'
    +Module4100Name = Protection des Données
    +# Module description 'ModuledatapolicyDesc'
    +Module4100Desc = Module de gestion de la protection des données (RGPD)
    +
    +#
    +# Page d'administration
    +#
    +datapolicySetup = Configuration du module Protection des données
    +Settings_DATAPOLICY = Paramétrage du module Protection des données
    +datapolicySetupPage = Selon la loi de votre pays (Exemple <a href="http://www.privacy-regulation.eu/fr/5.htm" target="_blank">l’article 5</a> du RGPD), les données à caractère personnel doivent être conservées pendant une durée n’excédant pas celle nécessaire au regard des finalités pour lesquelles elles ont été traitées, à l’exception de fins archivistiques. La suppression se fera automatiquement après une certaine durée sans évènement (la durée que vous aurez indiquée ci-dessous).
    +NB_MONTHS = %s mois
    +ONE_YEAR = 1 an
    +NB_YEARS = %s ans
    +DATAPOLICY_TIERS_CLIENT = Client
    +DATAPOLICY_TIERS_PROSPECT = Prospect
    +DATAPOLICY_TIERS_PROSPECT_CLIENT = Prospect/Client
    +DATAPOLICY_TIERS_NIPROSPECT_NICLIENT = Ni prospect / Ni client
    +DATAPOLICY_TIERS_FOURNISSEUR = Fournisseur
    +DATAPOLICY_CONTACT_CLIENT = Client
    +DATAPOLICY_CONTACT_PROSPECT = Prospect
    +DATAPOLICY_CONTACT_PROSPECT_CLIENT = Prospect/Client
    +DATAPOLICY_CONTACT_NIPROSPECT_NICLIENT = Ni prospect / Ni client
    +DATAPOLICY_CONTACT_FOURNISSEUR = Fournisseur
    +DATAPOLICY_ADHERENT = Adhérent
    +DATAPOLICY_Tooltip_SETUP = Type du contact - Indiquez vos choix pour chaque type.
    +DATAPOLICYMail=Paramétrage des emails
    +DATAPOLICYSUBJECTMAIL=Objet du mail
    +DATAPOLICYCONTENTMAIL=Contenu du mail
    +DATAPOLICYSUBSITUTION=Vous pouvez utiliser les variables suivantes dans votre email (LINKACCEPT permet de créer un lien enregistrant l'acceptation de la personne, LINKREFUSED permet d'enregistrer le refus de la personne) :
    +DATAPOLICYACCEPT=Message suite acceptation
    +DATAPOLICYREFUSE=Message suite opposition
    +SendAgreementText=Vous pouvez envoyer un email DATAPOLICY à tous vos contacts concernés (qui n'ont pas encore reçus de mail et pour lesquels vous n'avez rien enregistré concernant leur accord/désaccord DATAPOLICY). Pour cela, utilisez le bouton suivant.
    +SendAgreement=Envoyer les emails
    +AllAgreementSend = Tous les e-mails de consentement ont été envoyés
    +TXTLINKDATAPOLICYACCEPT= Texte du lien d'acceptation
    +TXTLINKDATAPOLICYREFUSE= Texte du lien d'opposition
    +
    +
    +
    +#
    +# Extrafield
    +#
    +DATAPOLICY_BLOCKCHECKBOX = DATAPOLICY : Traitement des données à caractère personnel
    +DATAPOLICY_consentement = Consentement recueilli pour le traitement des données à caractère personnel le concernant
    +DATAPOLICY_opposition_traitement = S’oppose au traitement de ses données à caractère personnel
    +DATAPOLICY_opposition_prospection = S’oppose au traitement de ses données à caractère personnel à des fins de prospection
    +
    +#
    +# Popup
    +#
    +DATAPOLICY_POPUP_ANONYME_TITLE = Anonymiser un tiers
    +DATAPOLICY_POPUP_ANONYME_TEXTE = Vous ne pouvez pas supprimer ce contact de Dolibarr car des éléments y sont liés. Conformément au DATAPOLICY, vous allez rendre toutes ces données anonymes afin de respecter vos obligations. Souhaitez-vous continuer ?
    +
    +#
    +# Bouton portabilité
    +# 
    +DATAPOLICY_PORTABILITE = Portabilité DATAPOLICY
    +DATAPOLICY_PORTABILITE_TITLE = Export des données à caractère personnel
    +DATAPOLICY_PORTABILITE_CONFIRMATION = Vous souhaitez exporter les données à caractère personnel de ce contact. Etes-vous sûr ?
    +
    +#
    +# Note ajoutés lors d'une anonymisation
    +#
    +ANONYMISER_AT = Anonymisé le %s
    +
    +#V2
    +DATAPOLICYReturn=Validation DATAPOLICY
    +DATAPOLICY_date=Date d'accord/opposition au traitement
    +DATAPOLICY_send=Date envoi consentement
    +DATAPOLICYReturn=Retour DATAPOLICY
    +DATAPOLICY_SEND=Envoyer l'email de consentement
    +MailSent=L'email a bien été envoyé
    +
    +#ERROR
    +ErrorSubjectIsRequired=Erreur : vous n'avez pas indiqué l'objet de l'email dans la configuration
    +=Suite à un problème technique, nous n'avons pas pu enregistrer votre choix. Nous nous en excusons. Contactez-nous pour nous transmettre votre choix.
    +NUMBER_MONTH_BEFORE_DELETION = Nombre de mois avant suppression des données
    diff --git a/htdocs/datapolicy/langs/it_IT/datapolicy.lang b/htdocs/datapolicy/langs/it_IT/datapolicy.lang
    new file mode 100644
    index 00000000000..d8858b56c5b
    --- /dev/null
    +++ b/htdocs/datapolicy/langs/it_IT/datapolicy.lang
    @@ -0,0 +1,78 @@
    +# Copyright (C) 2018 INOVEA CONSEIl info@inovea-conseil.com - Thanks to Claudio Aschieri
    +#
    +# # Module label 'ModuledatapolicyName'
    +Module4100Name = Data Policy
    +# Module description 'ModuledatapolicyDesc'
    +Module4100Desc = Conformità con GDPR
    +
    +#
    +# Page d'administration
    +#
    +datapolicySetup = Module Setup
    +Settings_DATAPOLICY = Configurazione modulo GDPR 
    +datapolicySetupPage = In accordo con <a href="http://www.privacy-regulation.eu/it/5.htm" target="_blank">l'art 5 del GDPR </a> i dati personali devono essere conservati per un periodo di tempo che .... ed eliminati se non sono più utili agli scopi per cui sono stati processati.
    +NB_MONTHS = %s mesi
    +ONE_YEAR = 1 anno
    +NB_YEARS = %s anni
    +DATAPOLICY_TIERS_CLIENT = Cliente
    +DATAPOLICY_TIERS_PROSPECT = Fornitore
    +DATAPOLICY_TIERS_PROSPECT_CLIENT = Potenziale Cliente / Cliente
    +DATAPOLICY_TIERS_NIPROSPECT_NICLIENT = Nè potenziale cliente / Nè cliente
    +DATAPOLICY_TIERS_FOURNISSEUR = Fornitore
    +DATAPOLICY_CONTACT_CLIENT = Cliente
    +DATAPOLICY_CONTACT_PROSPECT = Potenziale cliente
    +DATAPOLICY_CONTACT_PROSPECT_CLIENT = Potenziale Cliente / Cliente
    +DATAPOLICY_CONTACT_NIPROSPECT_NICLIENT = Nè potenziale cliente / Nè cliente
    +DATAPOLICY_CONTACT_FOURNISSEUR = Fornitore
    +DATAPOLICY_ADHERENT = Membri
    +DATAPOLICY_Tooltip_SETUP = Tipo di contatto - Indica la scelta per ogni tipologia
    +DATAPOLICYMail=Configurazione Email
    +DATAPOLICYSUBJECTMAIL=Subject dell'e-mail
    +DATAPOLICYCONTENTMAIL=Contenuto dell'e-mail
    +DATAPOLICYSUBSITUTION=Puoi utilizzare le seguenti variabili nella tua email (LINKACCEPT consente di creare un link per registrare l'accettazione della persona, LINKREFUSED consente di registrare il rifiuto della persona):
    +DATAPOLICYACCEPT= Messaggio dopo il consenso
    +DATAPOLICYREFUSE=Messaggio dopo il rifiuto
    +SendAgreementText=Puoi inviare un'email GDPR a tutti i tuoi contatti rilevanti (che non hanno ancora ricevuto un'e-mail e per i quali non hai registrato nulla sul loro accordo GDPR). Per fare ciò, utilizzare il seguente pulsante.
    +SendAgreement=Invia emails
    +AllAgreementSend = Tutte le email sono state inviate
    +TXTLINKDATAPOLICYACCEPT= Testo per il link "Consenso" 
    +TXTLINKDATAPOLICYREFUSE= Testo per il link "Consenso negato" 
    +
    +#
    +# Extrafield
    +#
    +DATAPOLICY_BLOCKCHECKBOX = GDPR : Trattamento dei dati personali
    +DATAPOLICY_consentement = Consenso ottenuto al Trattamento dei dati personali
    +DATAPOLICY_opposition_traitement = Consenso negato al trattamento dei dati personali
    +DATAPOLICY_opposition_prospection = Consenso negato al trattamento dei dati personali a fini commerciali
    +
    +#
    +# Popup
    +#
    +DATAPOLICY_POPUP_ANONYME_TITLE = Anonimizza un soggetto terzo
    +DATAPOLICY_POPUP_ANONYME_TEXTE = Impossibile eliminare questo contatto da Dolibarr perchè vi sono elementi collegati. In conformità con il GDPR, renderai tutti questi dati anonimi per rispettare i tuoi obblighi. Vuoi continuare?
    +
    +
    +#
    +# Bouton portabilité
    +# 
    +DATAPOLICY_PORTABILITE = Portabilità GDPR
    +DATAPOLICY_PORTABILITE_TITLE = Esporta i dati personali
    +DATAPOLICY_PORTABILITE_CONFIRMATION = Vuoi davvero esportare i dati personali di questo contatto?
    +
    +#
    +# Note ajoutée lors d'une anonymisation
    +#
    +ANONYMISER_AT = Anonimizzato il %s
    +
    +#V2
    +DATAPOLICYReturn=GDPR Validazione
    +DATAPOLICY_date = Data di accordo / disaccordo GDPR
    +DATAPOLICY_send = Data di invio del consenso (e-mail)
    +DATAPOLICYReturn = GDPR ritorno
    +DATAPOLICY_SEND = Inviare GDPR e-mail
    +MailSent=L'email è stata inviata
    +
    +#ERROR
    +ErrorSubjectIsRequired= Errore: L'oggetto della mail è obbligatorio. Inserisci l'oggetto nella configurazione del modulo.
    +=A causa di un problema tecnico, non siamo stati in grado di registrare la tua scelta. Ci scusiamo per questo. Contattaci per inviarci la tua scelta.
    diff --git a/htdocs/datapolicy/lib/datapolicy.lib.php b/htdocs/datapolicy/lib/datapolicy.lib.php
    new file mode 100644
    index 00000000000..41c92299989
    --- /dev/null
    +++ b/htdocs/datapolicy/lib/datapolicy.lib.php
    @@ -0,0 +1,54 @@
    +<?php
    +/* Copyright (C) 2018 Nicolas ZABOURI   <info@inovea-conseil.com>
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    datapolicy/lib/datapolicy.lib.php
    + * \ingroup datapolicy
    + * \brief   Library files with common functions for datapolicy
    + */
    +
    +/**
    + * Prepare admin pages header
    + *
    + * @return array
    + */
    +function datapolicyAdminPrepareHead()
    +{
    +	global $langs, $conf;
    +
    +	$langs->load("datapolicy@datapolicy");
    +
    +	$h = 0;
    +	$head = array();
    +
    +	$head[$h][0] = dol_buildpath("/datapolicy/admin/setup.php", 1);
    +	$head[$h][1] = $langs->trans("Deletion");
    +	$head[$h][2] = 'settings';
    +	$h++;
    +
    +	if (! empty($conf->global->DATAPOLICIES_ENABLE_EMAILS))
    +	{
    +		$head[$h][0] = dol_buildpath("/datapolicy/admin/setupmail.php", 1);
    +		$head[$h][1] = $langs->trans("DATAPOLICIESMail");
    +		$head[$h][2] = 'settings';
    +		$h++;
    +	}
    +
    +	complete_head_from_modules($conf, $langs, $object, $head, $h, 'datapolicy');
    +
    +	return $head;
    +}
    diff --git a/htdocs/datapolicy/mailing.php b/htdocs/datapolicy/mailing.php
    new file mode 100644
    index 00000000000..e3f38b269be
    --- /dev/null
    +++ b/htdocs/datapolicy/mailing.php
    @@ -0,0 +1,41 @@
    +<?php
    +/* Copyright (C) 2018      Nicolas ZABOURI      <info@inovea-conseil.com>
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    datapolicy/mailing.php
    + * \ingroup datapolicy
    + * \brief   datapolicy mailing page.
    + */
    +
    +require '../../main.inc.php';
    +dol_include_once('/contact/class/contact.class.php');
    +dol_include_once('/datapolicy/class/datapolicy.class.php');
    +
    +$idcontact = GETPOST('idc');
    +
    +if(!empty($idcontact)){
    +    $contact = new Contact($db);
    +    $contact->fetch($idcontact);
    +    DataPolicy::sendMailDataPolicyContact($contact);
    +}else{
    +
    +    $contacts = new DataPolicy($db);
    +    $contacts->getAllContactNotInformed();
    +    $contacts->getAllCompaniesNotInformed();
    +    $contacts->getAllAdherentsNotInformed();
    +    echo $langs->trans('AllAgreementSend');
    +}
    diff --git a/htdocs/datapolicy/modulebuilder.txt b/htdocs/datapolicy/modulebuilder.txt
    new file mode 100644
    index 00000000000..24ea0d6eac5
    --- /dev/null
    +++ b/htdocs/datapolicy/modulebuilder.txt
    @@ -0,0 +1,3 @@
    +# DO NOT DELETE THIS FILE MANUALLY
    +# File to flag module built using official module template.
    +# When this file is present into a module directory, you can edit it with the module builder tool. Use ModuleBuilder if you want to delete module. 
    \ No newline at end of file
    diff --git a/htdocs/datapolicy/public/index.php b/htdocs/datapolicy/public/index.php
    new file mode 100644
    index 00000000000..58f7968f05d
    --- /dev/null
    +++ b/htdocs/datapolicy/public/index.php
    @@ -0,0 +1,144 @@
    +<?php
    +
    +/* Copyright (C) 2018      Nicolas ZABOURI      <info@inovea-conseil.com>
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    datapolicy/admin/setup.php
    + * \ingroup datapolicy
    + * \brief   datapolicy setup page.
    + */
    +
    +if (!defined('NOLOGIN'))
    +    define("NOLOGIN", 1);   // This means this output page does not require to be logged.
    +if (!defined('NOCSRFCHECK'))
    +    define('NOCSRFCHECK', '1');  // Do not check anti CSRF attack test
    +if (!defined('NOREQUIREMENU'))
    +    define('NOREQUIREMENU', '1');
    +
    +require '../../main.inc.php';
    +dol_include_once('/contact/class/contact.class.php');
    +dol_include_once('/societe/class/societe.class.php');
    +dol_include_once('/adherents/class/adherent.class.php');
    +dol_include_once('/user/class/user.class.php');
    +dol_include_once('/datapolicy/class/datapolicy.class.php');
    +
    +$idc = GETPOST('c', 'int');
    +$ids = GETPOST('s', 'int');
    +$ida = GETPOST('a', 'int');
    +$action = GETPOST('action', 'alpha');
    +$lang = GETPOST('l', 'alpha');
    +$code = GETPOST('key', 'alpha');
    +
    +$acc = "DATAPOLICIESACCEPT_" . $lang;
    +$ref = "DATAPOLICIESREFUSE_" . $lang;
    +$langs->load('datapolicy@datapolicy',0,0,$lang);
    +
    +if (empty($action) || (empty($idc) && empty($ids) && empty($ida))) {
    +    return 0;
    +} elseif (!empty($idc)) {
    +    $contact = new Contact($db);
    +    $contact->fetch($idc);
    +    $check = md5($contact->email);
    +    if ($check != $code) {
    +        $return = $langs->trans('ErrorEmailDATAPOLICIES');
    +    } elseif ($action == 1) {
    +        $contact->array_options['options_datapolicy_consentement'] = 1;
    +        $contact->array_options['options_datapolicy_opposition_traitement'] = 0;
    +        $contact->array_options['options_datapolicy_opposition_prospection'] = 0;
    +        $contact->array_options['options_datapolicy_date'] = date('Y-m-d', time());
    +
    +        $return = $conf->global->$acc;
    +    } elseif ($action == 2) {
    +        $contact->no_email = 1;
    +        $contact->array_options['options_datapolicy_consentement'] = 0;
    +        $contact->array_options['options_datapolicy_opposition_traitement'] = 1;
    +        $contact->array_options['options_datapolicy_opposition_prospection'] = 1;
    +        $contact->array_options['options_datapolicy_date'] = date('Y-m-d', time());
    +
    +        $return = $conf->global->$ref;
    +    }
    +    $contact->update($idc);
    +} elseif (!empty($ids)) {
    +    $societe = new Societe($db);
    +    $societe->fetch($ids);
    +    $check = md5($societe->email);
    +    if ($check != $code) {
    +        $return = $langs->trans('ErrorEmailDATAPOLICIES');
    +    } elseif ($action == 1) {
    +        $societe->array_options['options_datapolicy_consentement'] = 1;
    +        $societe->array_options['options_datapolicy_opposition_traitement'] = 0;
    +        $societe->array_options['options_datapolicy_opposition_prospection'] = 0;
    +        $societe->array_options['options_datapolicy_date'] = date('Y-m-d', time());
    +        $return = $conf->global->$acc;
    +    } elseif ($action == 2) {
    +        $societe->array_options['options_datapolicy_consentement'] = 0;
    +        $societe->array_options['options_datapolicy_opposition_traitement'] = 1;
    +        $societe->array_options['options_datapolicy_opposition_prospection'] = 1;
    +        $societe->array_options['options_datapolicy_date'] = date('Y-m-d', time());
    +
    +        $return = $conf->global->$ref;
    +    }
    +    $societe->update($ids);
    +} elseif (!empty($ida)) {
    +    $adherent = new Adherent($db);
    +    $adherent->fetch($ida);
    +    $check = md5($adherent->email);
    +    if ($check != $code) {
    +        $return = $langs->trans('ErrorEmailDATAPOLICIES');
    +    } elseif ($action == 1) {
    +        $adherent->array_options['options_datapolicy_consentement'] = 1;
    +        $adherent->array_options['options_datapolicy_opposition_traitement'] = 0;
    +        $adherent->array_options['options_datapolicy_opposition_prospection'] = 0;
    +        //$adherent->array_options['options_datapolicy_date'] = date('Y-m-d', time());
    +        $return = $conf->global->$acc;
    +    } elseif ($action == 2) {
    +        $adherent->array_options['options_datapolicy_consentement'] = 0;
    +        $adherent->array_options['options_datapolicy_opposition_traitement'] = 1;
    +        $adherent->array_options['options_datapolicy_opposition_prospection'] = 1;
    +        //$adherent->array_options['options_datapolicy_date'] = date('Y-m-d', time());
    +
    +        $return = $conf->global->$ref;
    +    }
    +    $newuser = new User($db);
    +    $adherent->update($newuser);
    +}
    +
    +header("Content-type: text/html; charset=" . $conf->file->character_set_client);
    +
    +print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">';
    +print "\n";
    +print "<html>\n";
    +print "<head>\n";
    +print '<meta name="robots" content="noindex,nofollow">' . "\n";
    +print '<meta name="keywords" content="dolibarr">' . "\n";
    +print '<meta name="description" content="Dolibarr DATAPOLICIES">' . "\n";
    +print "<title>" . $langs->trans("DATAPOLICIESReturn") . "</title>\n";
    +print '<link rel="stylesheet" type="text/css" href="' . DOL_URL_ROOT . $conf->css . '?lang=' . $lang . '">' . "\n";
    +print '<style type="text/css">';
    +print '.CTableRow1      { margin: 1px; padding: 3px; font: 12px verdana,arial; background: #e6E6eE; color: #000000; -moz-border-radius-topleft:6px; -moz-border-radius-topright:6px; -moz-border-radius-bottomleft:6px; -moz-border-radius-bottomright:6px;}';
    +print '.CTableRow2      { margin: 1px; padding: 3px; font: 12px verdana,arial; background: #FFFFFF; color: #000000; -moz-border-radius-topleft:6px; -moz-border-radius-topright:6px; -moz-border-radius-bottomleft:6px; -moz-border-radius-bottomright:6px;}';
    +print '</style>';
    +
    +print "</head>\n";
    +print '<body style="margin: 10% 40%">' . "\n";
    +print '<table class="CTableRow1" ><tr><td style="text_align:center;">';
    +print $return . "<br>\n";
    +print '</td></tr></table>';
    +print "</body>\n";
    +print "</html>\n";
    +
    +$db->close();
    diff --git a/htdocs/dav/dav.class.php b/htdocs/dav/dav.class.php
    index 9e5121112d0..b8c38773538 100644
    --- a/htdocs/dav/dav.class.php
    +++ b/htdocs/dav/dav.class.php
    @@ -34,11 +34,18 @@ class CdavLib
     
     	private $langs;
     
    +    /**
    +     * Constructor
    +     *
    +     * @param   User        $user   user
    +     * @param   DoliDB      $db     Database handler
    +     * @param   Translate   $langs  translation
    +     */
     	function __construct($user, $db, $langs)
     	{
    -		$this->user 	= $user;
    -		$this->db 		= $db;
    -		$this->langs 	= $langs;
    +		$this->user = $user;
    +		$this->db = $db;
    +		$this->langs = $langs;
     	}
     
     	/**
    @@ -106,7 +113,6 @@ class CdavLib
     		}
     
     		return $sql;
    -
     	}
     
     	/**
    @@ -295,5 +301,4 @@ class CdavLib
     		}
     		return $calevents;
     	}
    -
     }
    diff --git a/htdocs/dav/fileserver.php b/htdocs/dav/fileserver.php
    index a1d145306f5..bfdc81887ff 100644
    --- a/htdocs/dav/fileserver.php
    +++ b/htdocs/dav/fileserver.php
    @@ -28,7 +28,7 @@ if (! defined('NOREQUIREAJAX'))  define('NOREQUIREAJAX','1');
     if (! defined('NOLOGIN'))  		 define("NOLOGIN",1);		// This means this output page does not require to be logged.
     if (! defined('NOCSRFCHECK'))  	 define("NOCSRFCHECK",1);	// We accept to go on this page from external web site.
     
    -require ("../main.inc.php");
    +require "../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/security2.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
     require_once DOL_DOCUMENT_ROOT.'/dav/dav.class.php';
    @@ -58,8 +58,7 @@ $tmpDir = $conf->dav->dir_temp;
     //var_dump($tmpDir);exit;
     
     // Authentication callback function
    -$authBackend = new \Sabre\DAV\Auth\Backend\BasicCallBack(function ($username, $password)
    -{
    +$authBackend = new \Sabre\DAV\Auth\Backend\BasicCallBack(function ($username, $password) {
     	global $user;
     	global $conf;
     	global $dolibarr_main_authentication;
    diff --git a/htdocs/document.php b/htdocs/document.php
    index 725d079a9f6..07cc7cea77b 100644
    --- a/htdocs/document.php
    +++ b/htdocs/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Simon Tosser         <simon@kornog-computing.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010	   Pierre Morin         <pierre.morin@auguria.net>
      * Copyright (C) 2010	   Juanjo Menent        <jmenent@2byte.es>
      *
    @@ -37,13 +37,6 @@ if (! defined('NOREQUIREMENU'))		define('NOREQUIREMENU','1');
     if (! defined('NOREQUIREHTML'))		define('NOREQUIREHTML','1');
     if (! defined('NOREQUIREAJAX'))		define('NOREQUIREAJAX','1');
     
    -// For bittorent link, we don't need to load/check we are into a login session
    -if (isset($_GET["modulepart"]) && $_GET["modulepart"] == 'bittorrent')
    -{
    -	if (! defined("NOLOGIN"))		define("NOLOGIN",1);
    -	if (! defined("NOCSRFCHECK"))	define("NOCSRFCHECK",1);	// We accept to go on this page from external web site.
    -	if (! defined("NOIPCHECK"))		define("NOIPCHECK",1);		// Do not check IP defined into conf $dolibarr_main_restrict_ip
    -}
     // For direct external download link, we don't need to load/check we are into a login session
     if (isset($_GET["hashp"]))
     {
    @@ -64,13 +57,17 @@ if ((isset($_GET["modulepart"]) && $_GET["modulepart"] == 'medias'))
      *
      * @return	void
      */
    -function llxHeader() { }
    +function llxHeader()
    +{
    +}
     /**
      * Footer empty
      *
      * @return	void
      */
    -function llxFooter() { }
    +function llxFooter()
    +{
    +}
     
     require 'main.inc.php';	// Load $user and permissions
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    diff --git a/htdocs/don/card.php b/htdocs/don/card.php
    index 5a9e439a9c7..f3d8667dffb 100644
    --- a/htdocs/don/card.php
    +++ b/htdocs/don/card.php
    @@ -1,9 +1,11 @@
     <?php
    -/* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    - * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
    - * Copyright (C) 2015-2016  Alexandre Spangaro	  	<aspangaro.dolibarr@gmail.com>
    +/* Copyright (C) 2001-2002  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2013       Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2015-2016  Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Thibault FOUCART        <support@ptibogxiv.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -26,23 +28,23 @@
      */
     
     require '../main.inc.php';
    -require_once DOL_DOCUMENT_ROOT.'/core/modules/dons/modules_don.php';
    -require_once DOL_DOCUMENT_ROOT.'/core/lib/donation.lib.php';
    -require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
    -require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
    -require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
    -require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
    -require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
    -if (! empty($conf->projet->enabled))
    -{
    -	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
    -	require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/modules/dons/modules_don.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/lib/donation.lib.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/class/html.formfile.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/class/html.formcompany.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/don/class/don.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/compta/paiement/class/paiement.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/class/html.formmargin.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php';
    +if (! empty($conf->projet->enabled)) {
    +    require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
    +    require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     }
     require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
     
    -$langs->load("companies");
    -$langs->load("donations");
    -$langs->load("bills");
    +$langs->loadLangs(array("bills", "companies", "donations"));
     
     $id=GETPOST('rowid')?GETPOST('rowid','int'):GETPOST('id','int');
     $action=GETPOST('action','alpha');
    @@ -326,38 +328,91 @@ if ($action == 'create')
     	print '<table class="border" width="100%">';
     	print '<tbody>';
     
    -    // Date
    +	// Ref
    +	print '<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans('Ref') . '</td><td colspan="2">' . $langs->trans('Draft') . '</td></tr>';
    +
    +	// Company
    +	if (! empty($conf->societe->enabled) && ! empty($conf->global->DONATION_USE_THIRDPARTIES))
    +	{
    +		// Thirdparty
    +		print '<td>' . $langs->trans('Customer') . '</td>';
    +		if ($soc->id > 0 && ! GETPOST('fac_rec','alpha'))
    +		{
    +			print '<td colspan="2">';
    +			print $soc->getNomUrl(1);
    +			print '<input type="hidden" name="socid" value="' . $soc->id . '">';
    +			// Outstanding Bill
    +			$outstandingBills = $soc->get_OutstandingBill();
    +			print ' (' . $langs->trans('CurrentOutstandingBill') . ': ';
    +			print price($outstandingBills, '', $langs, 0, 0, -1, $conf->currency);
    +			if ($soc->outstanding_limit != '')
    +			{
    +				if ($outstandingBills > $soc->outstanding_limit) print img_warning($langs->trans("OutstandingBillReached"));
    +				print ' / ' . price($soc->outstanding_limit, '', $langs, 0, 0, -1, $conf->currency);
    +			}
    +			print ')';
    +			print '</td>';
    +		}
    +		else
    +		{
    +			print '<td colspan="2">';
    +			print $form->select_company($soc->id, 'socid', '(s.client = 1 OR s.client = 3) AND status=1', 'SelectThirdParty', 0, 0, null, 0, 'minwidth300');
    +			// Option to reload page to retrieve customer informations. Note, this clear other input
    +			if (!empty($conf->global->RELOAD_PAGE_ON_CUSTOMER_CHANGE))
    +			{
    +				print '<script type="text/javascript">
    +				$(document).ready(function() {
    +					$("#socid").change(function() {
    +						var socid = $(this).val();
    +				        var fac_rec = $(\'#fac_rec\').val();
    +						// reload page
    +						window.location.href = "'.$_SERVER["PHP_SELF"].'?action=create&socid="+socid+"&fac_rec="+fac_rec;
    +					});
    +				});
    +				</script>';
    +			}
    +			print ' <a href="'.DOL_URL_ROOT.'/societe/card.php?action=create&client=3&fournisseur=0&backtopage='.urlencode($_SERVER["PHP_SELF"].'?action=create').'">'.$langs->trans("AddThirdParty").'</a>';
    +			print '</td>';
    +		}
    +		print '</tr>' . "\n";
    +	}
    +
    +	// Date
     	print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("Date").'</td><td>';
    -	$form->select_date($donation_date?$donation_date:-1,'','','','',"add",1,1);
    +	print $form->selectDate($donation_date?$donation_date:-1, '', '', '', '', "add", 1, 1);
     	print '</td>';
     
    -    // Amount
    -    print "<tr>".'<td class="fieldrequired">'.$langs->trans("Amount").'</td><td><input type="text" name="amount" value="'.dol_escape_htmltag(GETPOST("amount")).'" size="10"> '.$langs->trans("Currency".$conf->currency).'</td></tr>';
    +	// Amount
    +	print "<tr>".'<td class="fieldrequired">'.$langs->trans("Amount").'</td><td><input type="text" name="amount" value="'.dol_escape_htmltag(GETPOST("amount")).'" size="10"> '.$langs->trans("Currency".$conf->currency).'</td></tr>';
     
    +	// Public donation
     	print '<tr><td class="fieldrequired">'.$langs->trans("PublicDonation")."</td><td>";
     	print $form->selectyesno("public",isset($_POST["public"])?$_POST["public"]:1,1);
     	print "</td></tr>\n";
     
    -	print "<tr>".'<td>'.$langs->trans("Company").'</td><td><input type="text" name="societe" value="'.dol_escape_htmltag(GETPOST("societe")).'" class="maxwidth200"></td></tr>';
    -	print "<tr>".'<td>'.$langs->trans("Lastname").'</td><td><input type="text" name="lastname" value="'.dol_escape_htmltag(GETPOST("lastname")).'" class="maxwidth200"></td></tr>';
    -	print "<tr>".'<td>'.$langs->trans("Firstname").'</td><td><input type="text" name="firstname" value="'.dol_escape_htmltag(GETPOST("firstname")).'" class="maxwidth200"></td></tr>';
    -	print "<tr>".'<td>'.$langs->trans("Address").'</td><td>';
    -	print '<textarea name="address" wrap="soft" class="quatrevingtpercent" rows="3">'.dol_escape_htmltag(GETPOST("address")).'</textarea></td></tr>';
    +	if (empty($conf->societe->enabled) || empty($conf->global->DONATION_USE_THIRDPARTIES))
    +	{
    +		print "<tr>".'<td>'.$langs->trans("Company").'</td><td><input type="text" name="societe" value="'.dol_escape_htmltag(GETPOST("societe")).'" class="maxwidth200"></td></tr>';
    +		print "<tr>".'<td>'.$langs->trans("Lastname").'</td><td><input type="text" name="lastname" value="'.dol_escape_htmltag(GETPOST("lastname")).'" class="maxwidth200"></td></tr>';
    +		print "<tr>".'<td>'.$langs->trans("Firstname").'</td><td><input type="text" name="firstname" value="'.dol_escape_htmltag(GETPOST("firstname")).'" class="maxwidth200"></td></tr>';
    +		print "<tr>".'<td>'.$langs->trans("Address").'</td><td>';
    +		print '<textarea name="address" wrap="soft" class="quatrevingtpercent" rows="3">'.dol_escape_htmltag(GETPOST("address")).'</textarea></td></tr>';
     
    -    // Zip / Town
    -    print '<tr><td>'.$langs->trans("Zip").' / '.$langs->trans("Town").'</td><td>';
    -	print $formcompany->select_ziptown((isset($_POST["zipcode"])?$_POST["zipcode"]:$object->zip),'zipcode',array('town','selectcountry_id','state_id'),6);
    -    print ' ';
    -    print $formcompany->select_ziptown((isset($_POST["town"])?$_POST["town"]:$object->town),'town',array('zipcode','selectcountry_id','state_id'));
    -    print '</tr>';
    +		// Zip / Town
    +		print '<tr><td>'.$langs->trans("Zip").' / '.$langs->trans("Town").'</td><td>';
    +		print $formcompany->select_ziptown((isset($_POST["zipcode"])?$_POST["zipcode"]:$object->zip),'zipcode',array('town','selectcountry_id','state_id'),6);
    +		print ' ';
    +		print $formcompany->select_ziptown((isset($_POST["town"])?$_POST["town"]:$object->town),'town',array('zipcode','selectcountry_id','state_id'));
    +		print '</tr>';
     
    -	// Country
    -    print '<tr><td><label for="selectcountry_id">'.$langs->trans('Country').'</label></td><td class="maxwidthonsmartphone">';
    -    print $form->select_country(GETPOST('country_id')!=''?GETPOST('country_id'):$object->country_id);
    -    if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
    -    print '</td></tr>';
    +		// Country
    +		print '<tr><td><label for="selectcountry_id">'.$langs->trans('Country').'</label></td><td class="maxwidthonsmartphone">';
    +		print $form->select_country(GETPOST('country_id')!=''?GETPOST('country_id'):$object->country_id);
    +		if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
    +		print '</td></tr>';
     
    -	print "<tr>".'<td>'.$langs->trans("EMail").'</td><td><input type="text" name="email" value="'.dol_escape_htmltag(GETPOST("email")).'" class="maxwidth200"></td></tr>';
    +		print "<tr>".'<td>'.$langs->trans("EMail").'</td><td><input type="text" name="email" value="'.dol_escape_htmltag(GETPOST("email")).'" class="maxwidth200"></td></tr>';
    +	}
     
     	// Payment mode
     	print "<tr><td>".$langs->trans("PaymentMode")."</td><td>\n";
    @@ -455,7 +510,7 @@ if (! empty($id) && $action == 'edit')
     
     	// Date
     	print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("Date").'</td><td>';
    -	$form->select_date($object->date,'','','','',"update");
    +	print $form->selectDate($object->date,'','','','',"update");
     	print '</td>';
     
     	// Amount
    @@ -791,6 +846,16 @@ if (! empty($id) && $action != 'edit')
     	$linktoelem = $form->showLinkToObjectBlock($object, null, array('don'));
     	$somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
     
    +		// Show online payment link
    +		$useonlinepayment = (! empty($conf->paypal->enabled) || ! empty($conf->stripe->enabled) || ! empty($conf->paybox->enabled));
    +
    +		if ($useonlinepayment) //$object->statut != Facture::STATUS_DRAFT &&
    +		{
    +			print '<br><!-- Link to pay -->'."\n";
    +			require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
    +			print showOnlinePaymentUrl('donation', $object->ref).'<br>';
    +		}
    +
     	print '</div><div class="fichehalfright"><div class="ficheaddleft">';
     
     	print '</div></div></div>';
    diff --git a/htdocs/don/class/don.class.php b/htdocs/don/class/don.class.php
    index 2fa0ee44178..5e035febd14 100644
    --- a/htdocs/don/class/don.class.php
    +++ b/htdocs/don/class/don.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014      Florian Henry        <florian.henry@open-concept.pro>
      * Copyright (C) 2015-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
      * Copyright (C) 2016      Juanjo Menent        <jmenent@2byte.es>
    @@ -34,34 +34,62 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Don extends CommonObject
     {
    -    public $element='don'; 					// Id that identify managed objects
    -    public $table_element='don';			// Name of table without prefix where object is stored
    -	public $fk_element = 'fk_donation';
    -	public $ismultientitymanaged = 1;  	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    -    var $picto = 'generic';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='don';
     
    -    var $date;
    -    var $amount;
    -    var $societe;
    -    var $address;
    -    var $zip;
    -    var $town;
    -    var $email;
    -    var $public;
    -    var $fk_project;
    -    var $fk_typepayment;
    -	var $num_payment;
    -	var $date_valid;
    -	var $modepaymentid = 0;
    -
    -	var $labelstatut;
    -	var $labelstatutshort;
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='don';
     
     	/**
    -	 * @deprecated
    -	 * @see note_private, note_public
    +	 * @var int Field with ID of parent key if this field has a parent
     	 */
    -	var $commentaire;
    +	public $fk_element = 'fk_donation';
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
    +
    +    /**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'generic';
    +
    +    public $date;
    +    public $amount;
    +    public $societe;
    +
    +    /**
    +	 * @var string Address
    +	 */
    +	public $address;
    +
    +    public $zip;
    +    public $town;
    +    public $email;
    +    public $public;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_project;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_typepayment;
    +
    +	public $num_payment;
    +	public $date_valid;
    +	public $modepaymentid = 0;
    +
    +	public $labelstatut;
    +	public $labelstatutshort;
     
     
         /**
    @@ -71,9 +99,7 @@ class Don extends CommonObject
          */
         function __construct($db)
         {
    -        global $langs;
    -
    -        $this->db = $db;
    +         $this->db = $db;
         }
     
     
    @@ -88,6 +114,7 @@ class Don extends CommonObject
             return $this->LibStatut($this->statut,$mode);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Renvoi le libelle d'un statut donne
          *
    @@ -97,7 +124,8 @@ class Don extends CommonObject
          */
         function LibStatut($statut,$mode=0)
         {
    -    	if (empty($this->labelstatut) || empty($this->labelstatushort))
    +        // phpcs:enable
    +    	if (empty($this->labelstatut) || empty($this->labelstatutshort))
         	{
     	    	global $langs;
     	    	$langs->load("donations");
    @@ -115,44 +143,44 @@ class Don extends CommonObject
             {
                 return $this->labelstatut[$statut];
             }
    -        if ($mode == 1)
    +        elseif ($mode == 1)
             {
                 return $this->labelstatutshort[$statut];
             }
    -        if ($mode == 2)
    +        elseif ($mode == 2)
             {
                 if ($statut == -1) return img_picto($this->labelstatut[$statut],'statut5').' '.$this->labelstatutshort[$statut];
    -            if ($statut == 0)  return img_picto($this->labelstatut[$statut],'statut0').' '.$this->labelstatutshort[$statut];
    -            if ($statut == 1)  return img_picto($this->labelstatut[$statut],'statut1').' '.$this->labelstatutshort[$statut];
    -            if ($statut == 2)  return img_picto($this->labelstatut[$statut],'statut6').' '.$this->labelstatutshort[$statut];
    +            elseif ($statut == 0)  return img_picto($this->labelstatut[$statut],'statut0').' '.$this->labelstatutshort[$statut];
    +            elseif ($statut == 1)  return img_picto($this->labelstatut[$statut],'statut1').' '.$this->labelstatutshort[$statut];
    +            elseif ($statut == 2)  return img_picto($this->labelstatut[$statut],'statut6').' '.$this->labelstatutshort[$statut];
             }
    -        if ($mode == 3)
    +        elseif ($mode == 3)
             {
                 if ($statut == -1) return img_picto($this->labelstatut[$statut],'statut5');
    -            if ($statut == 0)  return img_picto($this->labelstatut[$statut],'statut0');
    -            if ($statut == 1)  return img_picto($this->labelstatut[$statut],'statut1');
    -            if ($statut == 2)  return img_picto($this->labelstatut[$statut],'statut6');
    +            elseif ($statut == 0)  return img_picto($this->labelstatut[$statut],'statut0');
    +            elseif ($statut == 1)  return img_picto($this->labelstatut[$statut],'statut1');
    +            elseif ($statut == 2)  return img_picto($this->labelstatut[$statut],'statut6');
             }
    -        if ($mode == 4)
    +        elseif ($mode == 4)
             {
                 if ($statut == -1) return img_picto($this->labelstatut[$statut],'statut5').' '.$this->labelstatut[$statut];
    -            if ($statut == 0)  return img_picto($this->labelstatut[$statut],'statut0').' '.$this->labelstatut[$statut];
    -            if ($statut == 1)  return img_picto($this->labelstatut[$statut],'statut1').' '.$this->labelstatut[$statut];
    -            if ($statut == 2)  return img_picto($this->labelstatut[$statut],'statut6').' '.$this->labelstatut[$statut];
    +            elseif ($statut == 0)  return img_picto($this->labelstatut[$statut],'statut0').' '.$this->labelstatut[$statut];
    +            elseif ($statut == 1)  return img_picto($this->labelstatut[$statut],'statut1').' '.$this->labelstatut[$statut];
    +            elseif ($statut == 2)  return img_picto($this->labelstatut[$statut],'statut6').' '.$this->labelstatut[$statut];
             }
    -            if ($mode == 5)
    +        elseif ($mode == 5)
             {
                 if ($statut == -1) return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut5');
    -            if ($statut == 0)  return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut0');
    -            if ($statut == 1)  return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut1');
    -            if ($statut == 2)  return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut6');
    +            elseif ($statut == 0)  return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut0');
    +            elseif ($statut == 1)  return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut1');
    +            elseif ($statut == 2)  return $this->labelstatutshort[$statut].' '.img_picto($this->labelstatut[$statut],'statut6');
             }
    -        if ($mode == 6)
    +        elseif ($mode == 6)
             {
                 if ($statut == -1) return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut5');
    -            if ($statut == 0)  return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut0');
    -            if ($statut == 1)  return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut1');
    -            if ($statut == 2)  return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut6');
    +            elseif ($statut == 0)  return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut0');
    +            elseif ($statut == 1)  return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut1');
    +            elseif ($statut == 2)  return $this->labelstatut[$statut].' '.img_picto($this->labelstatut[$statut],'statut6');
             }
         }
     
    @@ -366,8 +394,8 @@ class Don extends CommonObject
             $sql.= ", '".$this->db->escape($this->address)."'";
             $sql.= ", '".$this->db->escape($this->zip)."'";
             $sql.= ", '".$this->db->escape($this->town)."'";
    -		$sql.= ", ".$this->country_id;
    -        $sql.= ", ".$this->public;
    +        $sql.= ", ".($this->country_id > 0 ? $this->country_id : '0');
    +        $sql.= ", ".((int) $this->public);
             $sql.= ", ".($this->fk_project > 0?$this->fk_project:"null");
            	$sql.= ", ".(!empty($this->note_private)?("'".$this->db->escape($this->note_private)."'"):"NULL");
     		$sql.= ", ".(!empty($this->note_public)?("'".$this->db->escape($this->note_public)."'"):"NULL");
    @@ -379,7 +407,6 @@ class Don extends CommonObject
             $sql.= ", '".$this->db->escape($this->phone_mobile)."'";
             $sql.= ")";
     
    -        dol_syslog(get_class($this)."::create", LOG_DEBUG);
             $resql = $this->db->query($sql);
             if ($resql)
             {
    @@ -415,8 +442,8 @@ class Don extends CommonObject
     
     		if (!$error && !empty($conf->global->MAIN_DISABLEDRAFTSTATUS))
             {
    -            $res = $this->setValid($user);
    -            if ($res < 0) $error++;
    +            //$res = $this->setValid($user);
    +            //if ($res < 0) $error++;
             }
     
             if (!$error)
    @@ -670,7 +697,6 @@ class Don extends CommonObject
                     $this->note_private	  = $obj->note_private;
                     $this->note_public	  = $obj->note_public;
                     $this->modelpdf       = $obj->model_pdf;
    -                $this->commentaire    = $obj->note;	// deprecated
     
                     // Retreive all extrafield
                     // fetch optionals attributes and labels
    @@ -683,9 +709,9 @@ class Don extends CommonObject
                 dol_print_error($this->db);
                 return -1;
             }
    -
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Validate a promise of donation
          *
    @@ -696,6 +722,7 @@ class Don extends CommonObject
          */
         function valid_promesse($id, $userid, $notrigger=0)
         {
    +        // phpcs:enable
     		global $langs, $user;
     
     		$error=0;
    @@ -736,6 +763,7 @@ class Don extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Classify the donation as paid, the donation was received
          *
    @@ -745,6 +773,7 @@ class Don extends CommonObject
          */
         function set_paid($id, $modepayment=0)
         {
    +        // phpcs:enable
             $sql = "UPDATE ".MAIN_DB_PREFIX."don SET fk_statut = 2";
             if ($modepayment)
             {
    @@ -771,6 +800,7 @@ class Don extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Set donation to status cancelled
          *
    @@ -779,6 +809,7 @@ class Don extends CommonObject
          */
         function set_cancel($id)
         {
    +        // phpcs:enable
             $sql = "UPDATE ".MAIN_DB_PREFIX."don SET fk_statut = -1 WHERE rowid = ".$id;
     
             $resql=$this->db->query($sql);
    @@ -800,6 +831,7 @@ class Don extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Sum of donations
          *
    @@ -808,6 +840,7 @@ class Don extends CommonObject
          */
         function sum_donations($param)
         {
    +        // phpcs:enable
             global $conf;
     
             $result=0;
    @@ -827,13 +860,15 @@ class Don extends CommonObject
             return $result;
         }
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *	Charge indicateurs this->nb pour le tableau de bord
          *
          *	@return     int         <0 if KO, >0 if OK
          */
         function load_state_board()
         {
    +        // phpcs:enable
             global $conf;
     
             $this->nb=array();
    @@ -1038,5 +1073,4 @@ class Don extends CommonObject
     			return 0;
     		}
     	}
    -
     }
    diff --git a/htdocs/don/class/donstats.class.php b/htdocs/don/class/donstats.class.php
    index dfe74b7f691..e5e34f6ad1b 100644
    --- a/htdocs/don/class/donstats.class.php
    +++ b/htdocs/don/class/donstats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -34,6 +34,9 @@ include_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
      */
     class DonationStats extends Stats
     {
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element;
     
     	var $socid;
    @@ -131,4 +134,4 @@ class DonationStats extends Stats
     
     		return $this->_getAllByYear($sql);
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/don/class/paymentdonation.class.php b/htdocs/don/class/paymentdonation.class.php
    index 8d31c292155..b0e3a80b082 100644
    --- a/htdocs/don/class/paymentdonation.class.php
    +++ b/htdocs/don/class/paymentdonation.class.php
    @@ -29,13 +29,31 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class PaymentDonation extends CommonObject
     {
    -	public $element='payment_donation';			//!< Id that identify managed objects
    -	public $table_element='payment_donation';	//!< Name of table without prefix where object is stored
    -    public $picto = 'payment';
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='payment_donation';
     
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='payment_donation';
    +
    +    /**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'payment';
    +
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
     
    +	/**
    +     * @var int ID
    +     */
     	public $fk_donation;
    +
     	public $datec='';
     	public $tms='';
     	public $datep='';
    @@ -43,8 +61,20 @@ class PaymentDonation extends CommonObject
         public $amounts=array();   // Array of amounts
     	public $typepayment;
     	public $num_payment;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_bank;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_modif;
     
     	/**
    @@ -68,7 +98,7 @@ class PaymentDonation extends CommonObject
          *  Use this->amounts to have list of lines for the payment
          *
     	 *  @param      User		$user			User making payment
    -	 *	@param      bool 		$notrigger 		false=launch triggers after, true=disable triggers
    +	 *  @param      bool 		$notrigger 		false=launch triggers after, true=disable triggers
     	 *  @return     int     					<0 if KO, id of payment if OK
     	 */
     	function create($user, $notrigger=false)
    @@ -445,6 +475,7 @@ class PaymentDonation extends CommonObject
     	    return '';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -454,7 +485,8 @@ class PaymentDonation extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    -	    global $langs;
    +        // phpcs:enable
    +        global $langs;
     
     	    return '';
     	}
    @@ -482,8 +514,6 @@ class PaymentDonation extends CommonObject
     		$this->fk_bank='';
     		$this->fk_user_creat='';
     		$this->fk_user_modif='';
    -
    -
     	}
     
     
    @@ -570,6 +600,7 @@ class PaymentDonation extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update link between the donation payment and the generated line in llx_bank
     	 *
    @@ -578,6 +609,7 @@ class PaymentDonation extends CommonObject
     	 */
     	function update_fk_bank($id_bank)
     	{
    +        // phpcs:enable
     		$sql = "UPDATE ".MAIN_DB_PREFIX."payment_donation SET fk_bank = ".$id_bank." WHERE rowid = ".$this->id;
     
     		dol_syslog(get_class($this)."::update_fk_bank", LOG_DEBUG);
    diff --git a/htdocs/don/document.php b/htdocs/don/document.php
    index 020272d5bae..cdcb5648501 100644
    --- a/htdocs/don/document.php
    +++ b/htdocs/don/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2011-2012 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -40,9 +40,8 @@ if (! empty($conf->projet->enabled))
         require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     }
     
    -$langs->load("other");
    -$langs->load("donations");
    -$langs->load("companies");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","other","donations"));
     
     $id = GETPOST('id','int');
     $ref = GETPOST('ref', 'alpha');
    @@ -107,7 +106,7 @@ if ($object->id)
     	dol_fiche_head($head, 'documents',  $langs->trans("Donation"), -1, 'generic');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -185,7 +184,6 @@ if ($object->id)
         $permtoedit = $user->rights->don->creer;
         $param = '&id=' . $object->id;
         include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
     }
     else
     {
    diff --git a/htdocs/don/index.php b/htdocs/don/index.php
    index d9bee39723c..ba68a1a215c 100644
    --- a/htdocs/don/index.php
    +++ b/htdocs/don/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/don/list.php b/htdocs/don/list.php
    index 1e7d93302d8..47408fe4bb5 100644
    --- a/htdocs/don/list.php
    +++ b/htdocs/don/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Cédric Salvador			<csalvador@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -28,8 +28,8 @@ require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/don/class/don.class.php';
     if (! empty($conf->projet->enabled)) require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     
    -$langs->load("companies");
    -$langs->load("donations");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","donations"));
     
     $sortfield = GETPOST("sortfield",'alpha');
     $sortorder = GETPOST("sortorder",'alpha');
    diff --git a/htdocs/don/note.php b/htdocs/don/note.php
    index d78aa2c7ea5..60bf2c1939f 100644
    --- a/htdocs/don/note.php
    +++ b/htdocs/don/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Florian Henry        <florian.henry@open-concept.pro>
      * Copyright (C) 2016      Alexandre Spangaro   <aspangaro@zendsi.com>
      *
    @@ -35,9 +35,8 @@ if (! empty($conf->projet->enabled))
         require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     }
     
    -$langs->load("companies");
    -$langs->load("bills");
    -$langs->load("donations");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","bills","donations"));
     
     $id=(GETPOST('id','int')?GETPOST('id','int'):GETPOST('facid','int'));  // For backward compatibility
     $ref=GETPOST('ref','alpha');
    diff --git a/htdocs/don/payment/card.php b/htdocs/don/payment/card.php
    index e4a7ef5c5d4..1c3a60e7e78 100644
    --- a/htdocs/don/payment/card.php
    +++ b/htdocs/don/payment/card.php
    @@ -28,9 +28,8 @@ require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/modules/facture/modules_facture.php';
     if (! empty($conf->banque->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
    -$langs->load('bills');
    -$langs->load('banks');
    -$langs->load('companies');
    +// Load translation files required by the page
    +$langs->loadLangs(array("bills","banks","companies"));
     
     // Security check
     $id=GETPOST('rowid')?GETPOST('rowid','int'):GETPOST('id','int');
    @@ -134,7 +133,6 @@ dol_fiche_head($head, $hselected, $langs->trans("DonationPayment"), -1, 'payment
     if ($action == 'delete')
     {
     	print $form->formconfirm('card.php?id='.$object->id, $langs->trans("DeletePayment"), $langs->trans("ConfirmDeletePayment"), 'confirm_delete','',0,2);
    -
     }
     
     /*
    @@ -144,7 +142,6 @@ if ($action == 'valide')
     {
     	$facid = GETPOST('facid','int');
     	print $form->formconfirm('card.php?id='.$object->id.'&amp;facid='.$facid, $langs->trans("ValidatePayment"), $langs->trans("ConfirmValidatePayment"), 'confirm_valide','',0,2);
    -
     }
     
     
    diff --git a/htdocs/don/payment/payment.php b/htdocs/don/payment/payment.php
    index d1cfaa6f0ad..e016bb80a8e 100644
    --- a/htdocs/don/payment/payment.php
    +++ b/htdocs/don/payment/payment.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2015       Alexandre Spangaro	  	<aspangaro.dolibarr@gmail.com>
    +/* Copyright (C) 2015       Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -174,7 +175,7 @@ if (GETPOST('action','aZ09') == 'create')
     	print '<input type="hidden" name="rowid" value="'.$chid.'">';
     	print '<input type="hidden" name="chid" value="'.$chid.'">';
     	print '<input type="hidden" name="action" value="add_payment">';
    -	
    +
         dol_fiche_head();
     
     	print '<table cellspacing="0" class="border" width="100%" cellpadding="2">';
    @@ -205,7 +206,7 @@ if (GETPOST('action','aZ09') == 'create')
     	print '<tr><td class="fieldrequired">'.$langs->trans("Date").'</td><td colspan="2">';
     	$datepaid = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]);
     	$datepayment=empty($conf->global->MAIN_AUTOFILL_DATE)?(empty($_POST["remonth"])?-1:$datepaid):0;
    -	$form->select_date($datepayment,'','','','',"add_payment",1,1);
    +	print $form->selectDate($datepayment, '', '', '', '', "add_payment", 1, 1);
     	print "</td>";
     	print '</tr>';
     
    diff --git a/htdocs/don/stats/index.php b/htdocs/don/stats/index.php
    index cb574da939a..5e7e08c0ee2 100644
    --- a/htdocs/don/stats/index.php
    +++ b/htdocs/don/stats/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -47,9 +47,8 @@ $year = GETPOST('year')>0?GETPOST('year'):$nowyear;
     $startyear=$year-1;
     $endyear=$year;
     
    -$langs->load("sendings");
    -$langs->load("other");
    -$langs->load("companies");
    +// Load translation files required by the page
    +$langs->loadLangs(array("companies","other","sendings"));
     
     
     /*
    @@ -260,6 +259,7 @@ print '<div class="fichecenter"><div class="fichethirdleft">';
     	print '<br><br>';
     //}
     
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="border" width="100%">';
     print '<tr height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -294,6 +294,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    +print '</div>';
     
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
    diff --git a/htdocs/don/tpl/linkedobjectblock.tpl.php b/htdocs/don/tpl/linkedobjectblock.tpl.php
    index d7ad6587845..f2d3178fc79 100644
    --- a/htdocs/don/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/don/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2013		Juanjo Menent <jmenent@2byte.es>
      * Copyright (C) 2014       Marcos García <marcosgdf@gmail.com>
      * Copyright (C) 2017       Charlene Benke <cf.benke@patas-monkey.com>
    @@ -36,7 +36,7 @@ $total=0; $ilink=0;
     foreach($linkedObjectBlock as $key => $objectlink)
     {
         $ilink++;
    -    
    +
         $trclass='oddeven';
         if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total';
     ?>
    @@ -66,7 +66,7 @@ if (count($linkedObjectBlock) > 1)
         	<td align="right"></td>
         	<td align="right"></td>
         </tr>
    -    <?php  
    +    <?php
     }
     ?>
     
    diff --git a/htdocs/ecm/ajax/ecmdatabase.php b/htdocs/ecm/ajax/ecmdatabase.php
    index 666c6df9217..9c4b9ffa952 100644
    --- a/htdocs/ecm/ajax/ecmdatabase.php
    +++ b/htdocs/ecm/ajax/ecmdatabase.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012	Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012	Regis Houssin	<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/ecm/class/ecmdirectory.class.php b/htdocs/ecm/class/ecmdirectory.class.php
    index a3669f909e9..3d1ecac9088 100644
    --- a/htdocs/ecm/class/ecmdirectory.class.php
    +++ b/htdocs/ecm/class/ecmdirectory.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,32 +27,77 @@
      */
     class EcmDirectory // extends CommonObject
     {
    -	public $element='ecm_directories';			//!< Id that identify managed objects
    -	//public $table_element='ecm_directories';	//!< Name of table without prefix where object is stored
    -	var $picto = 'dir';
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='ecm_directories';
     
    -	var $id;
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	//public $table_element='ecm_directories';
     
    -	var $label;
    -	var $fk_parent;
    -	var $description;
    -	var $cachenbofdoc=-1;	// By default cache initialized with value 'not calculated'
    -	var $date_c;
    -	var $date_m;
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'dir';
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	/**
    +     * @var string ECM directories label
    +     */
    +    public $label;
    +
    +    /**
    +     * @var int ID
    +     */
    +	public $fk_parent;
    +
    +	/**
    +	 * @var string description
    +	 */
    +	public $description;
    +
    +	public $cachenbofdoc=-1;	// By default cache initialized with value 'not calculated'
    +	public $date_c;
    +	public $date_m;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_m;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_c;
    +
    +	/**
    +	 * @var string Ref
    +	 */
     	public $ref;
     
    -	var $cats=array();
    -	var $motherof=array();
    +	public $cats=array();
    +	public $motherof=array();
     
    -	var $forbiddenchars = array('<','>',':','/','\\','?','*','|','"');
    -	var $forbiddencharsdir = array('<','>',':','?','*','|','"');
    +	public $forbiddenchars = array('<','>',':','/','\\','?','*','|','"');
    +	public $forbiddencharsdir = array('<','>',':','?','*','|','"');
     
     	public $full_arbo_loaded;
     
    +	/**
    +	 * @var string Error code (or message)
    +	 */
     	public $error;
    -	public $errors;
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
     
     	/**
    @@ -490,6 +535,7 @@ class EcmDirectory // extends CommonObject
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Load this->motherof that is array(id_son=>id_parent, ...)
     	 *
    @@ -497,6 +543,7 @@ class EcmDirectory // extends CommonObject
     	 */
     	function load_motherof()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$this->motherof=array();
    @@ -537,6 +584,7 @@ class EcmDirectory // extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return the status
     	 *
    @@ -546,11 +594,13 @@ class EcmDirectory // extends CommonObject
     	 */
     	static function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		return '';
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Reconstruit l'arborescence des categories sous la forme d'un tableau à partir de la base de donnée
     	 *	Renvoi un tableau de tableau('id','id_mere',...) trie selon arbre et avec:
    @@ -572,6 +622,7 @@ class EcmDirectory // extends CommonObject
     	 */
     	function get_full_arbo($force=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if (empty($force) && ! empty($this->full_arbo_loaded))
    @@ -629,7 +680,6 @@ class EcmDirectory // extends CommonObject
     					}
     				}
     				$i++;
    -
     			}
     		}
     		else
    @@ -651,6 +701,7 @@ class EcmDirectory // extends CommonObject
     		return $this->cats;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define properties fullpath, fullrelativename, fulllabel of a directory of array this->cats and all its childs.
     	 *  Separator between directories is always '/', whatever is OS.
    @@ -661,6 +712,7 @@ class EcmDirectory // extends CommonObject
     	 */
     	function build_path_from_id_categ($id_categ,$protection=0)
     	{
    +        // phpcs:enable
     		// Define fullpath
     		if (! empty($this->cats[$id_categ]['id_mere']))
     		{
    @@ -735,6 +787,7 @@ class EcmDirectory // extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          * Call trigger based on this instance
          *
    @@ -748,6 +801,7 @@ class EcmDirectory // extends CommonObject
          */
         function call_trigger($trigger_name, $user)
         {
    +        // phpcs:enable
             global $langs,$conf;
     
             include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    @@ -764,8 +818,5 @@ class EcmDirectory // extends CommonObject
                 }
             }
             return $result;
    -
         }
    -
    -
     }
    diff --git a/htdocs/ecm/class/ecmfiles.class.php b/htdocs/ecm/class/ecmfiles.class.php
    index df76bac3e9b..42af7f92635 100644
    --- a/htdocs/ecm/class/ecmfiles.class.php
    +++ b/htdocs/ecm/class/ecmfiles.class.php
    @@ -40,22 +40,44 @@ class EcmFiles extends CommonObject
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'ecmfiles';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'ecm_files';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'generic';
     
     	/**
    +	 * @var string Ref hash of file path
     	 */
    -	public $ref;					// hash of file path
    -	public $label;					// hash of file content (md5_file(dol_osencode($destfull))
    +	public $ref;
    +
    +	/**
    +	 * hash of file content (md5_file(dol_osencode($destfull))
    +     * @var string Ecm Files label
    +     */
    +    public $label;
    +
     	public $share;					// hash for file sharing, empty by default (example: getRandomPassword(true))
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
    +
     	public $filename;
     	public $filepath;
     	public $fullpath_orig;
    +
    +	/**
    +	 * @var string description
    +	 */
     	public $description;
    +
     	public $keywords;
     	public $cover;
     	public $position;
    @@ -63,15 +85,21 @@ class EcmFiles extends CommonObject
     	public $extraparams;
     	public $date_c = '';
     	public $date_m = '';
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_c;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_m;
    +
     	public $acl;
     	public $src_object_type;
     	public $src_object_id;
     
    -	/**
    -	 */
    -
     
     	/**
     	 * Constructor
    @@ -342,7 +370,7 @@ class EcmFiles extends CommonObject
     		else {
     			$sql .= ' AND t.rowid = '.$this->db->escape($id);					// rowid already unique
     		}
    -		
    +
     		$this->db->plimit(1);	// When we search on src or on hash of content (hashforfile) to solve hash conflict when several files has same content, we take first one only
     		$this->db->order('t.rowid', 'ASC');
     
    @@ -782,6 +810,7 @@ class EcmFiles extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return the status
     	 *
    @@ -791,6 +820,7 @@ class EcmFiles extends CommonObject
     	 */
     	static function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		return '';
     	}
    @@ -832,12 +862,25 @@ class EcmFiles extends CommonObject
     
     class EcmfilesLine
     {
    -	public $label;
    +	/**
    +     * @var string ECM files line label
    +     */
    +    public $label;
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
    +
     	public $filename;
     	public $filepath;
     	public $fullpath_orig;
    +
    +	/**
    +	 * @var string description
    +	 */
     	public $description;
    +
     	public $keywords;
     	public $cover;
     	public $position;
    @@ -845,8 +888,17 @@ class EcmfilesLine
     	public $extraparams;
     	public $date_c = '';
     	public $date_m = '';
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_c;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_m;
    +
     	public $acl;
     	public $src_object_type;
     	public $src_object_id;
    diff --git a/htdocs/ecm/class/htmlecm.form.class.php b/htdocs/ecm/class/htmlecm.form.class.php
    index 3139c5f9986..b6000cad923 100644
    --- a/htdocs/ecm/class/htmlecm.form.class.php
    +++ b/htdocs/ecm/class/htmlecm.form.class.php
    @@ -27,8 +27,15 @@ require_once DOL_DOCUMENT_ROOT.'/ecm/class/ecmdirectory.class.php';
      */
     class FormEcm
     {
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +	
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
     	/**
    diff --git a/htdocs/ecm/dir_add_card.php b/htdocs/ecm/dir_add_card.php
    index 5dab56b29a0..b608f72e23e 100644
    --- a/htdocs/ecm/dir_add_card.php
    +++ b/htdocs/ecm/dir_add_card.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2017	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2015-2016	Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -290,7 +290,6 @@ if (empty($action) || $action == 'delete_section')
     	if ($action == 'delete_section')
     	{
     		print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.$section, $langs->trans('DeleteSection'), $langs->trans('ConfirmDeleteSection',$ecmdir->label), 'confirm_deletesection');
    -
     	}
     
     	// Construit fiche  rubrique
    diff --git a/htdocs/ecm/dir_card.php b/htdocs/ecm/dir_card.php
    index 982fa045d32..7c3473117fc 100644
    --- a/htdocs/ecm/dir_card.php
    +++ b/htdocs/ecm/dir_card.php
    @@ -271,7 +271,6 @@ if ($action == 'update' && ! GETPOST('cancel','alpha'))
         		$upload_dir = $conf->medias->multidir_output[$conf->entity].'/'.$relativepath;
         		$section = $relativepath;
         	}
    -
         }
     }
     
    diff --git a/htdocs/ecm/file_card.php b/htdocs/ecm/file_card.php
    index b1b45141f4f..959a4bc5b8d 100644
    --- a/htdocs/ecm/file_card.php
    +++ b/htdocs/ecm/file_card.php
    @@ -390,7 +390,6 @@ if ($action == 'edit')
     if ($action == 'delete_file')
     {
         print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.urlencode($section), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile',$urlfile), 'confirm_deletefile', '', 1, 1);
    -
     }
     
     if ($action != 'edit')
    diff --git a/htdocs/ecm/index.php b/htdocs/ecm/index.php
    index ae11ebbd479..86eec8aa09a 100644
    --- a/htdocs/ecm/index.php
    +++ b/htdocs/ecm/index.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -77,6 +77,10 @@ $error=0;
      *	Actions
      */
     
    +// TODO Replace sendit and confirm_deletefile with
    +//$backtopage=$_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid;	// used after a confirm_deletefile into actions_linkedfiles.inc.php
    +//include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php';
    +
     // Upload file (code similar but different than actions_linkedfiles.inc.php)
     if (GETPOST("sendit",'none') && ! empty($conf->global->MAIN_UPLOAD_DOC))
     {
    @@ -105,7 +109,8 @@ if (GETPOST("sendit",'none') && ! empty($conf->global->MAIN_UPLOAD_DOC))
     
     	if (! $error)
     	{
    -	    $res = dol_add_file_process($upload_dir, 0, 1, 'userfile', '', '', '', 0);
    +		$generatethumbs = 0;
    +		$res = dol_add_file_process($upload_dir, 0, 1, 'userfile', '', null, '', $generatethumbs);
     	    if ($res > 0)
     	    {
     	       $result=$ecmdir->changeNbOfFiles('+');
    @@ -113,6 +118,33 @@ if (GETPOST("sendit",'none') && ! empty($conf->global->MAIN_UPLOAD_DOC))
     	}
     }
     
    +// Remove file (code similar but different than actions_linkedfiles.inc.php)
    +if ($action == 'confirm_deletefile')
    +{
    +	if (GETPOST('confirm') == 'yes')
    +	{
    +		// GETPOST('urlfile','alpha') is full relative URL from ecm root dir. Contains path of all sections.
    +		//var_dump(GETPOST('urlfile'));exit;
    +
    +		$upload_dir = $conf->ecm->dir_output.($relativepath?'/'.$relativepath:'');
    +		$file = $upload_dir . "/" . GETPOST('urlfile','alpha');
    +
    +		$ret=dol_delete_file($file);	// This include also the delete from file index in database.
    +		if ($ret)
    +		{
    +			setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile','alpha')), null, 'mesgs');
    +			$result=$ecmdir->changeNbOfFiles('-');
    +		}
    +		else
    +		{
    +			setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile','alpha')), null, 'errors');
    +		}
    +
    +		clearstatcache();
    +	}
    +	$action='file_manager';
    +}
    +
     // Add directory
     if ($action == 'add' && $user->rights->ecm->setup)
     {
    @@ -135,33 +167,6 @@ if ($action == 'add' && $user->rights->ecm->setup)
     	clearstatcache();
     }
     
    -// Remove file (code similar but different than actions_linkedfiles.inc.php)
    -if ($action == 'confirm_deletefile')
    -{
    -    if (GETPOST('confirm') == 'yes')
    -    {
    -    	// GETPOST('urlfile','alpha') is full relative URL from ecm root dir. Contains path of all sections.
    -		//var_dump(GETPOST('urlfile'));exit;
    -
    -    	$upload_dir = $conf->ecm->dir_output.($relativepath?'/'.$relativepath:'');
    -    	$file = $upload_dir . "/" . GETPOST('urlfile','alpha');	// Do not use urldecode here ($_GET and $_POST are already decoded by PHP).
    -
    -    	$ret=dol_delete_file($file);	// This include also the delete from file index in database.
    -    	if ($ret)
    -    	{
    -    		setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile','alpha')), null, 'mesgs');
    -    		$result=$ecmdir->changeNbOfFiles('-');
    -    	}
    -    	else
    -    	{
    -    		setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile','alpha')), null, 'errors');
    -    	}
    -
    -    	clearstatcache();
    -    }
    -   	$action='file_manager';
    -}
    -
     // Remove directory
     if ($action == 'confirm_deletesection' && GETPOST('confirm') == 'yes')
     {
    diff --git a/htdocs/ecm/index_auto.php b/htdocs/ecm/index_auto.php
    index 382312e4434..8ff31e54e3c 100644
    --- a/htdocs/ecm/index_auto.php
    +++ b/htdocs/ecm/index_auto.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016      Alexandre Spangaro   <aspangaro@zendsi.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -343,7 +343,6 @@ dol_fiche_head($head, 'index_auto', $langs->trans("ECMArea").' - '.$langs->trans
     if ($action == 'delete' && empty($conf->use_javascript_ajax))
     {
     	print $form->formconfirm($_SERVER["PHP_SELF"].'?section='.$section.'&urlfile='.urlencode($_GET["urlfile"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile','','',1);
    -
     }
     
     // Start container of all panels
    diff --git a/htdocs/ecm/search.php b/htdocs/ecm/search.php
    index bbf4fbbec1c..1b9a6bcb8d7 100644
    --- a/htdocs/ecm/search.php
    +++ b/htdocs/ecm/search.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/ecm/tpl/enablefiletreeajax.tpl.php b/htdocs/ecm/tpl/enablefiletreeajax.tpl.php
    index 0a51e8cc73d..ad992da84dc 100644
    --- a/htdocs/ecm/tpl/enablefiletreeajax.tpl.php
    +++ b/htdocs/ecm/tpl/enablefiletreeajax.tpl.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2012	Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012	Regis Houssin			<regis.houssin@inodbox.com>
    + * Copyright (C) 2018	Laurent Destailleur 	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,7 +28,7 @@ if (empty($conf) || ! is_object($conf))
     ?>
     
     <!-- BEGIN PHP TEMPLATE ecm/tpl/enablefiletreeajax.tpl.php -->
    -<!-- Doc of fileTree plugin at http://www.abeautifulsite.net/blog/2008/03/jquery-file-tree/ -->
    +<!-- Doc of fileTree plugin at https://www.abeautifulsite.net/jquery-file-tree -->
     
     <script type="text/javascript">
     
    @@ -35,7 +36,9 @@ if (empty($conf) || ! is_object($conf))
     if (empty($module)) $module='ecm';
     $paramwithoutsection=preg_replace('/&?section=(\d+)/', '', $param);
     
    -$openeddir='/';
    +$openeddir='/';		// The root directory shown
    +// $preopened		// The dir to have preopened
    +
     ?>
     
     $(document).ready(function() {
    @@ -43,7 +46,7 @@ $(document).ready(function() {
     	$('#filetree').fileTree({
     		root: '<?php print dol_escape_js($openeddir); ?>',
     		// Ajax called if we click to expand a dir (not a file). Parameter 'dir' is provided as a POST parameter by fileTree code to this following URL.
    -		script: '<?php echo DOL_URL_ROOT.'/core/ajax/ajaxdirtree.php?modulepart='.$module.'&openeddir='.urlencode($openeddir).(empty($paramwithoutsection)?'':$paramwithoutsection); ?>',
    +		script: '<?php echo DOL_URL_ROOT.'/core/ajax/ajaxdirtree.php?modulepart='.$module.(empty($preopened)?'':'&preopened='.urlencode($preopened)).'&openeddir='.urlencode($openeddir).(empty($paramwithoutsection)?'':$paramwithoutsection); ?>',
     		folderEvent: 'click',	// 'dblclick'
     		multiFolder: false  },
     		// Called if we click on a file (not a dir)
    diff --git a/htdocs/emailcollector/README.md b/htdocs/emailcollector/README.md
    new file mode 100644
    index 00000000000..4c307183f19
    --- /dev/null
    +++ b/htdocs/emailcollector/README.md
    @@ -0,0 +1,6 @@
    +EMailCollector
    +==============
    +
    +This module provides a sheduled job that scan regularly one or several IMAP email boxes, with filtering rules, to automatically record data in your application, like
    +* recording the email in the history of events (event is automatically linked to its related objects if possible, for example when a customer reply to an email sent from the application, the answer is automatically linked to the good objects)
    +* and/or creating a lead
    diff --git a/htdocs/emailcollector/class/emailcollector.class.php b/htdocs/emailcollector/class/emailcollector.class.php
    new file mode 100644
    index 00000000000..23522308c7e
    --- /dev/null
    +++ b/htdocs/emailcollector/class/emailcollector.class.php
    @@ -0,0 +1,1535 @@
    +<?php
    +/* Copyright (C) 2017  Laurent Destailleur <eldy@users.sourceforge.net>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file        emailcollector/class/emailcollector.class.php
    + * \ingroup     emailcollector
    + * \brief       This file is a CRUD class file for EmailCollector (Create/Read/Update/Delete)
    + */
    +
    +// Put here all includes required by your class file
    +require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
    +
    +
    +/**
    + * Class for EmailCollector
    + */
    +class EmailCollector extends CommonObject
    +{
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element = 'emailcollector';
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element = 'emailcollector_emailcollector';
    +	/**
    +	 * @var int  Does emailcollector support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 */
    +	public $ismultientitymanaged = 1;
    +	/**
    +	 * @var int  Does emailcollector support extrafields ? 0=No, 1=Yes
    +	 */
    +	public $isextrafieldmanaged = 0;
    +	/**
    +	 * @var string String with name of icon for emailcollector. Must be the part after the 'object_' into object_emailcollector.png
    +	 */
    +	public $picto = 'generic';
    +
    +
    +	/**
    +	 *  'type' if the field format.
    +	 *  'label' the translation key.
    +	 *  'enabled' is a condition when the field must be managed.
    +	 *  'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only. Using a negative value means field is not shown by default on list but can be selected for viewing)
    +	 *  'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0).
    +	 *  'default' is a default value for creation (can still be replaced by the global setup of default values)
    +	 *  'index' if we want an index in database.
    +	 *  'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...).
    +	 *  'position' is the sort order of field.
    +	 *  'searchall' is 1 if we want to search in this field when making a search from the quick search button.
    +	 *  'isameasure' must be set to 1 if you want to have a total on list for this field. Field type must be summable like integer or double(24,8).
    +	 *  'css' is the CSS style to use on field. For example: 'maxwidth200'
    +	 *  'help' is a string visible as a tooltip on field
    +	 *  'comment' is not used. You can store here any text of your choice. It is not used by application.
    +	 *  'showoncombobox' if value of the field must be visible into the label of the combobox that list record
    +	 *  'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel")
    +	 */
    +
    +	// BEGIN MODULEBUILDER PROPERTIES
    +	/**
    +	 * @var array  Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
    +	 */
    +	public $fields=array(
    +	    'rowid'         => array('type'=>'integer', 'label'=>'TechnicalID','visible'=>2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1),
    +		'entity'        =>array('type'=>'integer',      'label'=>'Entity',           'enabled'=>1, 'visible'=>0,  'default'=>1, 'notnull'=>1,  'index'=>1, 'position'=>20),
    +		'ref'           =>array('type'=>'varchar(128)', 'label'=>'Ref',              'enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'help'=>'Example: MyCollector1'),
    +		'label'         => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'notnull'=>-1, 'searchall'=>1, 'help'=>'Example: My Email collector'),
    +		'description'   => array('type'=>'text', 'label'=>'Description', 'visible'=>-1, 'enabled'=>1, 'position'=>60, 'notnull'=>-1),
    +		'host'          => array('type'=>'varchar(255)', 'label'=>'EMailHost', 'visible'=>1, 'enabled'=>1, 'position'=>100, 'notnull'=>1, 'searchall'=>1, 'comment'=>"IMAP server", 'help'=>'Example: imap.gmail.com'),
    +		'user'          => array('type'=>'varchar(128)', 'label'=>'Login', 'visible'=>1, 'enabled'=>1, 'position'=>101, 'notnull'=>1, 'index'=>1, 'comment'=>"IMAP login", 'help'=>'Example: myacount@gmail.com'),
    +		'password'      => array('type'=>'password', 'label'=>'Password', 'visible'=>-1, 'enabled'=>1, 'position'=>102, 'notnull'=>1, 'comment'=>"IMAP password"),
    +		'source_directory' => array('type'=>'varchar(255)', 'label'=>'MailboxSourceDirectory', 'visible'=>-1, 'enabled'=>1, 'position'=>103, 'notnull'=>1, 'default' => 'Inbox', 'help'=>'Example: INBOX'),
    +		//'filter'		=> array('type'=>'text', 'label'=>'Filter', 'visible'=>1, 'enabled'=>1, 'position'=>105),
    +		//'actiontodo'	=> array('type'=>'varchar(255)', 'label'=>'ActionToDo', 'visible'=>1, 'enabled'=>1, 'position'=>106),
    +		'target_directory' => array('type'=>'varchar(255)', 'label'=>'MailboxTargetDirectory', 'visible'=>1, 'enabled'=>1, 'position'=>110, 'notnull'=>0, 'comment'=>"Where to store messages once processed"),
    +		'datelastresult' => array('type'=>'datetime', 'label'=>'DateLastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>121, 'notnull'=>-1,),
    +		'codelastresult' => array('type'=>'varchar(16)', 'label'=>'CodeLastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>122, 'notnull'=>-1,),
    +		'lastresult'    => array('type'=>'varchar(255)', 'label'=>'LastResult', 'visible'=>1, 'enabled'=>'$action != "create" && $action != "edit"', 'position'=>123, 'notnull'=>-1,),
    +		'note_public'   => array('type'=>'html', 'label'=>'NotePublic', 'visible'=>0, 'enabled'=>1, 'position'=>61, 'notnull'=>-1,),
    +		'note_private'  => array('type'=>'html', 'label'=>'NotePrivate', 'visible'=>0, 'enabled'=>1, 'position'=>62, 'notnull'=>-1,),
    +		'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'visible'=>-2, 'enabled'=>1, 'position'=>500, 'notnull'=>1,),
    +		'tms'           => array('type'=>'timestamp', 'label'=>'DateModification', 'visible'=>-2, 'enabled'=>1, 'position'=>501, 'notnull'=>1,),
    +		//'date_validation'    =>array('type'=>'datetime',     'label'=>'DateCreation',     'enabled'=>1, 'visible'=>-2, 'position'=>502),
    +		'fk_user_creat' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserAuthor', 'visible'=>-2, 'enabled'=>1, 'position'=>510, 'notnull'=>1,),
    +		'fk_user_modif' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'UserModif', 'visible'=>-2, 'enabled'=>1, 'position'=>511, 'notnull'=>-1,),
    +		//'fk_user_valid' =>array('type'=>'integer',      'label'=>'UserValidation',        'enabled'=>1, 'visible'=>-1, 'position'=>512),
    +		'import_key'    => array('type'=>'varchar(14)', 'label'=>'ImportId', 'visible'=>-2, 'enabled'=>1, 'position'=>1000, 'notnull'=>-1,),
    +		'status'        => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'notnull'=>1, 'index'=>1, 'arrayofkeyval'=>array('0'=>'Inactive', '1'=>'Active'))
    +	);
    +
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $rowid;
    +
    +	/**
    +	 * @var string Ref
    +	 */
    +	public $ref;
    +
    +	/**
    +	 * @var int Entity
    +	 */
    +	public $entity;
    +
    +	/**
    +	 * @var string label
    +	 */
    +	public $label;
    +
    +
    +	/**
    +	 * @var int Status
    +	 */
    +	public $status;
    +
    +	public $date_creation;
    +	public $tms;
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $fk_user_creat;
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $fk_user_modif;
    +
    +	public $import_key;
    +
    +
    +	public $host;
    +	public $user;
    +	public $password;
    +	public $source_directory;
    +    public $target_directory;
    +    public $datelastresult;
    +	public $lastresult;
    +	// END MODULEBUILDER PROPERTIES
    +
    +	public $filters;
    +	public $actions;
    +
    +
    +	/**
    +	 * Constructor
    +	 *
    +	 * @param DoliDb $db Database handler
    +	 */
    +	public function __construct(DoliDB $db)
    +	{
    +		global $conf, $langs, $user;
    +
    +		$this->db = $db;
    +
    +		if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields['rowid'])) $this->fields['rowid']['visible']=0;
    +		if (empty($conf->multicompany->enabled) && isset($this->fields['entity'])) $this->fields['entity']['enabled']=0;
    +
    +		// Unset fields that are disabled
    +		foreach($this->fields as $key => $val)
    +		{
    +			if (isset($val['enabled']) && empty($val['enabled']))
    +			{
    +				unset($this->fields[$key]);
    +			}
    +		}
    +
    +		// Translate some data of arrayofkeyval
    +		foreach($this->fields as $key => $val)
    +		{
    +			if (is_array($this->fields['status']['arrayofkeyval']))
    +			{
    +				foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2)
    +				{
    +					$this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2);
    +				}
    +			}
    +		}
    +	}
    +
    +	/**
    +	 * Create object into database
    +	 *
    +	 * @param  User $user      User that creates
    +	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
    +	 * @return int             <0 if KO, Id of created object if OK
    +	 */
    +	public function create(User $user, $notrigger = false)
    +	{
    +		return $this->createCommon($user, $notrigger);
    +	}
    +
    +	/**
    +	 * Clone and object into another one
    +	 *
    +	 * @param  	User 	$user      	User that creates
    +	 * @param  	int 	$fromid     Id of object to clone
    +	 * @return 	mixed 				New object created, <0 if KO
    +	 */
    +	public function createFromClone(User $user, $fromid)
    +	{
    +		global $langs, $hookmanager, $extrafields;
    +		$error = 0;
    +
    +	    dol_syslog(__METHOD__, LOG_DEBUG);
    +
    +	    $object = new self($this->db);
    +
    +	    $this->db->begin();
    +
    +	    // Load source object
    +	    $object->fetchCommon($fromid);
    +	    // Reset some properties
    +	    unset($object->id);
    +	    unset($object->fk_user_creat);
    +	    unset($object->import_key);
    +
    +	    // Clear fields
    +	    $object->ref = "copy_of_".$object->ref;
    +	    $object->title = $langs->trans("CopyOf")." ".$object->title;
    +	    // ...
    +	    // Clear extrafields that are unique
    +	    if (is_array($object->array_options) && count($object->array_options) > 0)
    +	    {
    +	    	$extrafields->fetch_name_optionals_label($this->element);
    +	    	foreach($object->array_options as $key => $option)
    +	    	{
    +	    		$shortkey = preg_replace('/options_/', '', $key);
    +	    		if (! empty($extrafields->attributes[$this->element]['unique'][$shortkey]))
    +	    		{
    +	    			//var_dump($key); var_dump($clonedObj->array_options[$key]); exit;
    +	    			unset($object->array_options[$key]);
    +	    		}
    +	    	}
    +	    }
    +
    +	    // Create clone
    +		$object->context['createfromclone'] = 'createfromclone';
    +	    $result = $object->createCommon($user);
    +	    if ($result < 0) {
    +	        $error++;
    +	        $this->error = $object->error;
    +	        $this->errors = $object->errors;
    +	    }
    +
    +	    // End
    +	    if (!$error) {
    +	        $this->db->commit();
    +	        return $object;
    +	    } else {
    +	        $this->db->rollback();
    +	        return -1;
    +	    }
    +	}
    +
    +	/**
    +	 * Load object in memory from the database
    +	 *
    +	 * @param int    $id   Id object
    +	 * @param string $ref  Ref
    +	 * @return int         <0 if KO, 0 if not found, >0 if OK
    +	 */
    +	public function fetch($id, $ref = null)
    +	{
    +		$result = $this->fetchCommon($id, $ref);
    +		//if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines();
    +		return $result;
    +	}
    +
    +	/**
    +	 * Load object lines in memory from the database
    +	 *
    +	 * @return int         <0 if KO, 0 if not found, >0 if OK
    +	 */
    +	/*public function fetchLines()
    +	{
    +		$this->lines=array();
    +
    +		// Load lines with object EmailCollectorLine
    +
    +		return count($this->lines)?1:0;
    +	}*/
    +
    +	/**
    +	 * Fetch all account and load objects into an array
    +	 *
    +	 * @param   User    $user           User
    +	 * @param   int     $activeOnly     filter if active
    +	 * @param   string  $sortfield      field for sorting
    +	 * @param   string  $sortorder      sorting order
    +	 * @param   int     $limit          sort limit
    +	 * @param   int     $page           page to start on
    +	 * @return  array   Array with key => EmailCollector object
    +	 */
    +	public function fetchAll(User $user, $activeOnly = 0, $sortfield = 's.rowid', $sortorder = 'ASC', $limit = 100, $page = 0)
    +    {
    +		global $langs;
    +
    +		$obj_ret = array();
    +
    +        $socid = $user->societe_id ? $user->societe_id : '';
    +
    +		$sql = "SELECT s.rowid";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."emailcollector_emailcollector as s";
    +        $sql.= ' WHERE s.entity IN ('.getEntity('emailcollector').')';
    +        if ($activeOnly) {
    +            $sql.= " AND s.status = 1";
    +        }
    +        $sql.= $this->db->order($sortfield, $sortorder);
    +        if ($limit) {
    +            if ($page < 0) {
    +                $page = 0;
    +            }
    +            $offset = $limit * $page;
    +
    +            $sql.= $this->db->plimit($limit + 1, $offset);
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result) {
    +            $num = $this->db->num_rows($result);
    +            while ($i < $num)
    +            {
    +                $obj = $this->db->fetch_object($result);
    +                $emailcollector_static = new EmailCollector($this->db);
    +                if ($emailcollector_static->fetch($obj->rowid)) {
    +                    $obj_ret[] = $emailcollector_static;
    +                }
    +                $i++;
    +            }
    +        } else {
    +        	$this->errors[] = 'EmailCollector::fetchAll Error when retrieve emailcollector list';
    +            dol_syslog('EmailCollector::fetchAll Error when retrieve emailcollector list', LOG_ERR);
    +            $ret = -1;
    +        }
    +        if (! count($obj_ret)) {
    +        	dol_syslog('EmailCollector::fetchAll No emailcollector found', LOG_DEBUG);
    +        }
    +
    +        return $obj_ret;
    +	}
    +
    +	/**
    +	 * Update object into database
    +	 *
    +	 * @param  User $user      User that modifies
    +	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
    +	 * @return int             <0 if KO, >0 if OK
    +	 */
    +	public function update(User $user, $notrigger = false)
    +	{
    +		return $this->updateCommon($user, $notrigger);
    +	}
    +
    +	/**
    +	 * Delete object in database
    +	 *
    +	 * @param User $user       User that deletes
    +	 * @param bool $notrigger  false=launch triggers after, true=disable triggers
    +	 * @return int             <0 if KO, >0 if OK
    +	 */
    +	public function delete(User $user, $notrigger = false)
    +	{
    +		return $this->deleteCommon($user, $notrigger);
    +	}
    +
    +	/**
    +	 *  Return a link to the object card (with optionaly the picto)
    +	 *
    +	 *	@param	int		$withpicto					Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto)
    +	 *	@param	string	$option						On what the link point to ('nolink', ...)
    +     *  @param	int  	$notooltip					1=Disable tooltip
    +     *  @param  string  $morecss            		Add more css on link
    +     *  @param  int     $save_lastsearch_value    	-1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    +	 *	@return	string								String with URL
    +	 */
    +	function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
    +	{
    +		global $db, $conf, $langs, $hookmanager;
    +        global $dolibarr_main_authentication, $dolibarr_main_demo;
    +        global $menumanager;
    +
    +        if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
    +
    +        $result = '';
    +        $companylink = '';
    +
    +        $label = '<u>' . $langs->trans("EmailCollector") . '</u>';
    +        $label.= '<br>';
    +        $label.= '<b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
    +
    +        $url = dol_buildpath('/admin/emailcollector_card.php', 1).'?id='.$this->id;
    +
    +        if ($option != 'nolink')
    +        {
    +	        // Add param to save lastsearch_values or not
    +	        $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    +	        if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) {
    +                $add_save_lastsearch_values=1;
    +            }
    +	        if ($add_save_lastsearch_values) {
    +                $url.='&save_lastsearch_values=1';
    +            }
    +        }
    +
    +        $linkclose='';
    +        if (empty($notooltip))
    +        {
    +            if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
    +            {
    +                $label=$langs->trans("ShowEmailCollector");
    +                $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    +            }
    +            $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"';
    +            $linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"';
    +
    +            /*
    +             $hookmanager->initHooks(array('myobjectdao'));
    +             $parameters=array('id'=>$this->id);
    +             $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +             if ($reshook > 0) $linkclose = $hookmanager->resPrint;
    +             */
    +        }
    +        else $linkclose = ($morecss?' class="'.$morecss.'"':'');
    +
    +		$linkstart = '<a href="'.$url.'"';
    +		$linkstart.=$linkclose.'>';
    +		$linkend='</a>';
    +
    +		$result .= $linkstart;
    +		if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
    +		if ($withpicto != 2) $result.= $this->ref;
    +		$result .= $linkend;
    +		//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');
    +
    +		global $action,$hookmanager;
    +		$hookmanager->initHooks(array('emailcollectordao'));
    +		$parameters=array('id'=>$this->id, 'getnomurl'=>$result);
    +		$reshook=$hookmanager->executeHooks('getNomUrl',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +		if ($reshook > 0) $result = $hookmanager->resPrint;
    +		else $result .= $hookmanager->resPrint;
    +
    +		return $result;
    +	}
    +
    +	/**
    +	 *  Return label of the status
    +	 *
    +	 *  @param  int		$mode          0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
    +	 *  @return	string 			       Label of status
    +	 */
    +	public function getLibStatut($mode=0)
    +	{
    +		return $this->LibStatut($this->status, $mode);
    +	}
    +
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
    +	/**
    +	 *  Return the status
    +	 *
    +	 *  @param	int		$status        Id status
    +	 *  @param  int		$mode          0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
    +	 *  @return string 			       Label of status
    +	 */
    +	public function LibStatut($status, $mode=0)
    +	{
    +		// phpcs:enable
    +		if (empty($this->labelstatus))
    +		{
    +			global $langs;
    +			//$langs->load("mymodule");
    +			$this->labelstatus[1] = $langs->trans('Enabled');
    +			$this->labelstatus[0] = $langs->trans('Disabled');
    +		}
    +
    +		if ($mode == 0)
    +		{
    +			return $this->labelstatus[$status];
    +		}
    +		elseif ($mode == 1)
    +		{
    +			return $this->labelstatus[$status];
    +		}
    +		elseif ($mode == 2)
    +		{
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +		}
    +		elseif ($mode == 3)
    +		{
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
    +		}
    +		elseif ($mode == 4)
    +		{
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +		}
    +		elseif ($mode == 5)
    +		{
    +			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
    +		}
    +		elseif ($mode == 6)
    +		{
    +			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
    +		}
    +	}
    +
    +	/**
    +	 *	Charge les informations d'ordre info dans l'objet commande
    +	 *
    +	 *	@param  int		$id       Id of order
    +	 *	@return	void
    +	 */
    +	public function info($id)
    +	{
    +		$sql = 'SELECT rowid, date_creation as datec, tms as datem,';
    +		$sql.= ' fk_user_creat, fk_user_modif';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t';
    +		$sql.= ' WHERE t.rowid = '.$id;
    +		$result=$this->db->query($sql);
    +		if ($result)
    +		{
    +			if ($this->db->num_rows($result))
    +			{
    +				$obj = $this->db->fetch_object($result);
    +				$this->id = $obj->rowid;
    +				if ($obj->fk_user_author)
    +				{
    +					$cuser = new User($this->db);
    +					$cuser->fetch($obj->fk_user_author);
    +					$this->user_creation   = $cuser;
    +				}
    +
    +				if ($obj->fk_user_valid)
    +				{
    +					$vuser = new User($this->db);
    +					$vuser->fetch($obj->fk_user_valid);
    +					$this->user_validation = $vuser;
    +				}
    +
    +				if ($obj->fk_user_cloture)
    +				{
    +					$cluser = new User($this->db);
    +					$cluser->fetch($obj->fk_user_cloture);
    +					$this->user_cloture   = $cluser;
    +				}
    +
    +				$this->date_creation     = $this->db->jdate($obj->datec);
    +				$this->date_modification = $this->db->jdate($obj->datem);
    +				$this->date_validation   = $this->db->jdate($obj->datev);
    +			}
    +
    +			$this->db->free($result);
    +		}
    +		else
    +		{
    +			dol_print_error($this->db);
    +		}
    +	}
    +
    +	/**
    +	 * Initialise object with example values
    +	 * Id must be 0 if object instance is a specimen
    +	 *
    +	 * @return void
    +	 */
    +	public function initAsSpecimen()
    +	{
    +		$this->initAsSpecimenCommon();
    +	}
    +
    +	/**
    +	 * Fetch filters
    +	 *
    +	 * @return 	int		<0 if KO, >0 if OK
    +	 */
    +	public function fetchFilters()
    +	{
    +		$this->filters = array();
    +
    +		$sql = 'SELECT rowid, type, rulevalue, status';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'emailcollector_emailcollectorfilter';
    +		$sql.= ' WHERE fk_emailcollector = '.$this->id;
    +		//$sql.= ' ORDER BY position';
    +
    +		$resql = $this->db->query($sql);
    +		if ($resql)
    +		{
    +			$num=$this->db->num_rows($resql);
    +			$i = 0;
    +			while($i < $num)
    +			{
    +				$obj=$this->db->fetch_object($resql);
    +				$this->filters[$obj->rowid]=array('id'=>$obj->rowid, 'type'=>$obj->type, 'rulevalue'=>$obj->rulevalue, 'status'=>$obj->status);
    +				$i++;
    +			}
    +			$this->db->free($resql);
    +		}
    +		else dol_print_error($this->db);
    +
    +		return 1;
    +	}
    +
    +	/**
    +	 * Fetch actions
    +	 *
    +	 * @return 	int		<0 if KO, >0 if OK
    +	 */
    +	public function fetchActions()
    +	{
    +		$this->actions = array();
    +
    +		$sql = 'SELECT rowid, type, actionparam, status';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'emailcollector_emailcollectoraction';
    +		$sql.= ' WHERE fk_emailcollector = '.$this->id;
    +		$sql.= ' ORDER BY position';
    +
    +		$resql = $this->db->query($sql);
    +		if ($resql)
    +		{
    +			$num=$this->db->num_rows($resql);
    +			$i = 0;
    +			while($i < $num)
    +			{
    +				$obj=$this->db->fetch_object($resql);
    +				$this->actions[$obj->rowid]=array('id'=>$obj->rowid, 'type'=>$obj->type, 'actionparam'=>$obj->actionparam, 'status'=>$obj->status);
    +				$i++;
    +			}
    +			$this->db->free($resql);
    +		}
    +		else dol_print_error($this->db);
    +	}
    +
    +
    +	/**
    +	 * Return the connectstring to use with IMAP connection function
    +	 *
    +	 * @return string
    +	 */
    +	function getConnectStringIMAP()
    +	{
    +		// Connect to IMAP
    +		$flags ='/service=imap';		// IMAP
    +		$flags.='/ssl';					// '/tls'
    +		$flags.='/novalidate-cert';
    +		//$flags.='/readonly';
    +		//$flags.='/debug';
    +
    +		$connectstringserver = '{'.$this->host.':993'.$flags.'}';
    +
    +		return $connectstringserver;
    +	}
    +
    +	/**
    +	 * Action executed by scheduler
    +	 * CAN BE A CRON TASK. In such a case, paramerts come from the schedule job setup field 'Parameters'
    +	 *
    +	 * @return	int			0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK)
    +	 */
    +	public function doCollect()
    +	{
    +		global $user;
    +
    +		$nberror = 0;
    +
    +		$arrayofcollectors = $this->fetchAll($user, 1);
    +
    +		// Loop on each collector
    +		foreach($arrayofcollectors as $emailcollector)
    +		{
    +			$result = $emailcollector->doCollectOneCollector();
    +			dol_syslog("doCollect result = ".$result." for emailcollector->id = ".$emailcollector->id);
    +
    +			$this->error.='EmailCollector ID '.$emailcollector->id.':'.$emailcollector->error.'<br>';
    +			if (! empty($emailcollector->errors)) $this->error.=join('<br>', $emailcollector->errors);
    +			$this->output.='EmailCollector ID '.$emailcollector->id.': '.$emailcollector->lastresult.'<br>';
    +		}
    +
    +		return $nberror;
    +	}
    +
    +	/**
    +	 * overwitePropertiesOfObject
    +	 *
    +	 * @return	int		0=OK, Nb of error if error
    +	 */
    +
    +	/**
    +	 * overwitePropertiesOfObject
    +	 *
    +	 * @param	object	$object			Current object
    +	 * @param	string	$actionparam	Action parameters
    +	 * @param	string	$messagetext	Body
    +	 * @param	string	$subject		Subject
    +	 * @return	int						0=OK, Nb of error if error
    +	 */
    +	private function overwritePropertiesOfObject(&$object, $actionparam, $messagetext, $subject)
    +	{
    +		$errorforthisaction = 0;
    +
    +		// Overwrite values with values extracted from source email
    +		// $this->actionparam = 'opportunity_status=123;abc=REGEX:BODY:....'
    +		$arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '=');
    +		foreach($arrayvaluetouse as $propertytooverwrite => $valueforproperty)
    +		{
    +			$tmpclass=''; $tmpproperty='';
    +			$tmparray=explode('.', $propertytooverwrite);
    +			if (count($tmparray) == 2)
    +			{
    +				$tmpclass=$tmparray[0];
    +				$tmpproperty=$tmparray[1];
    +			}
    +			else
    +			{
    +				$tmpproperty=$tmparray[0];
    +			}
    +			if ($tmpclass && ($tmpclass != $object->element)) continue;	// Property is for another type of object
    +
    +			if (property_exists($object, $tmpproperty))
    +			{
    +				$sourcestring='';
    +				$sourcefield='';
    +				$regexstring='';
    +				//$transformationstring='';
    +				$regforregex=array();
    +				if (preg_match('/^REGEX:([a-zA-Z0-9]+):(.*):([^:])$/', $valueforproperty, $regforregex))
    +				{
    +					$sourcefield=$regforregex[1];
    +					$regexstring=$regforregex[2];
    +					//$transofrmationstring=$regforregex[3];
    +				}
    +				elseif (preg_match('/^REGEX:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex))
    +				{
    +					$sourcefield=$regforregex[1];
    +					$regexstring=$regforregex[2];
    +				}
    +
    +				if (! empty($sourcefield) && ! empty($regexstring))
    +				{
    +					if (strtolower($sourcefield) == 'body') $sourcestring=$messagetext;
    +					elseif (strtolower($sourcefield) == 'subject') $sourcestring=$subject;
    +
    +					$regforval=array();
    +					if (preg_match('/'.preg_quote($regexstring, '/').'/', $sourcestring, $regforval))
    +					{
    +						// Overwrite param $tmpproperty
    +						$object->$tmpproperty = $regforval[1];
    +					}
    +					else
    +					{
    +						// Nothing can be done for this param
    +					}
    +				}
    +				elseif (preg_match('/^VALUE:(.*)$/', $valueforproperty, $reg))
    +				{
    +					$object->$tmpproperty = $reg[1];
    +				}
    +				else
    +				{
    +					$errorforthisaction++;
    +					$this->error = 'Bad syntax for description of action parameters: '.$actionparam;
    +					$this->errors[] = $this->error;
    +				}
    +			}
    +		}
    +
    +		return $errorforthisaction;
    +	}
    +
    +	/**
    +	 * Execute collect for current collector loaded previously with fetch.
    +	 *
    +	 * @return	int			<0 if KO, >0 if OK
    +	 */
    +	public function doCollectOneCollector()
    +	{
    +		global $conf, $langs, $user;
    +
    +		//$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log';
    +
    +		require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
    +
    +		dol_syslog("EmailCollector::doCollectOneCollector start", LOG_DEBUG);
    +
    +		$langs->loadLangs(array("project", "companies", "mails", "errors"));
    +
    +		$error = 0;
    +		$this->output = '';
    +		$this->error='';
    +
    +		$now = dol_now();
    +
    +		if (empty($this->host))
    +		{
    +			$this->error=$langs->trans('ErrorFieldRequired', 'EMailHost');
    +			return -1;
    +		}
    +		if (empty($this->user))
    +		{
    +			$this->error=$langs->trans('ErrorFieldRequired', 'Login');
    +			return -1;
    +		}
    +		if (empty($this->source_directory))
    +		{
    +			$this->error=$langs->trans('ErrorFieldRequired', 'MailboxSourceDirectory');
    +			return -1;
    +		}
    +		if (! function_exists('imap_open'))
    +		{
    +			$this->error='IMAP function not enabled on your PHP';
    +			return -2;
    +		}
    +
    +		$this->fetchFilters();
    +		$this->fetchActions();
    +
    +		$sourcedir = $this->source_directory;
    +		$targetdir = ($this->target_directory ? $this->target_directory : '');			// Can be '[Gmail]/Trash' or 'mytag'
    +
    +		$connectstringserver = $this->getConnectStringIMAP();
    +		$connectstringsource = $connectstringserver.imap_utf7_encode($sourcedir);
    +		$connectstringtarget = $connectstringserver.imap_utf7_encode($targetdir);
    +
    +		$connection = imap_open($connectstringsource, $this->user, $this->password);
    +		if (! $connection)
    +		{
    +			$this->error = 'Failed to open IMAP connection '.$connectstringsource;
    +			return -3;
    +		}
    +
    +		//$search='ALL';
    +		$search='UNDELETED';
    +		$searchfilterdoltrackid=0;
    +		$searchfilternodoltrackid=0;
    +		foreach($this->filters as $rule)
    +		{
    +			if (empty($rule['status'])) continue;
    +
    +			if ($rule['type'] == 'to')      $search.=($search?' ':'').'TO "'.str_replace('"', '', $rule['rulevalue']).'"';
    +			if ($rule['type'] == 'bcc')     $search.=($search?' ':'').'BCC';
    +			if ($rule['type'] == 'cc')      $search.=($search?' ':'').'CC';
    +			if ($rule['type'] == 'from')    $search.=($search?' ':'').'FROM "'.str_replace('"', '', $rule['rulevalue']).'"';
    +			if ($rule['type'] == 'subject') $search.=($search?' ':'').'SUBJECT "'.str_replace('"', '', $rule['rulevalue']).'"';
    +			if ($rule['type'] == 'body')    $search.=($search?' ':'').'BODY "'.str_replace('"', '', $rule['rulevalue']).'"';
    +			if ($rule['type'] == 'seen')    $search.=($search?' ':'').'SEEN';
    +			if ($rule['type'] == 'unseen')  $search.=($search?' ':'').'UNSEEN';
    +			if ($rule['type'] == 'withtrackingid')    $searchfilterdoltrackid++;
    +			if ($rule['type'] == 'withouttrackingid') $searchfilternodoltrackid++;
    +		}
    +
    +		if (empty($targetdir))	// Use last date as filter if there is no targetdir defined.
    +		{
    +			$fromdate=0;
    +			if ($this->datelastresult && $this->codelastresult == 'OK') $fromdate = $this->datelastresult;
    +			if ($fromdate > 0) $search.=($search?' ':'').'SINCE '.dol_print_date($fromdate - 1,'dayhourrfc');
    +		}
    +		dol_syslog("IMAP search string = ".$search);
    +		//var_dump($search);
    +
    +		$nbemailprocessed=0;
    +		$nbemailok=0;
    +		$nbactiondone=0;
    +
    +		// Scan IMAP inbox
    +		$arrayofemail= imap_search($connection, $search);
    +		//var_dump($arrayofemail);exit;
    +
    +		// Loop on each email found
    +		if (! empty($arrayofemail) && count($arrayofemail) > 0)
    +		{
    +			foreach($arrayofemail as $imapemail)
    +			{
    +				if ($nbemailprocessed > 100) break;			// Do not process more than 100 email per launch
    +
    +				$header = imap_fetchheader($connection, $imapemail, 0);
    +				$matches=array();
    +				preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)\r\n/m', $header, $matches);
    +				$headers = array_combine($matches[1], $matches[2]);
    +				//var_dump($headers);
    +
    +				// $conf->global->MAIL_PREFIX_FOR_EMAIL_ID must be defined
    +				$host=dol_getprefix('email');
    +
    +				// If there is a filter on trackid
    +				//var_dump($host);exit;
    +				if ($searchfilterdoltrackid > 0)
    +				{
    +					//if (empty($headers['X-Dolibarr-TRACKID'])) continue;
    +					if (empty($headers['References']) || ! preg_match('/@'.preg_quote($host,'/').'/', $headers['References']))
    +					{
    +						$nbemailprocessed++;
    +						continue;
    +					}
    +				}
    +				if ($searchfilternodoltrackid > 0)
    +				{
    +					if (! empty($headers['References']) && preg_match('/@'.preg_quote($host,'/').'/', $headers['References']))
    +					{
    +						$nbemailprocessed++;
    +						continue;
    +					}
    +					//if (! empty($headers['X-Dolibarr-TRACKID']) continue;
    +				}
    +
    +				$thirdpartystatic=new Societe($this->db);
    +				$contactstatic=new Contact($this->db);
    +				$projectstatic=new Project($this->db);
    +
    +				$nbactiondoneforemail = 0;
    +				$errorforemail = 0;
    +				$errorforactions = 0;
    +				$thirdpartyfoundby = '';
    +				$contactfoundby = '';
    +				$projectfoundby = '';
    +
    +				$this->db->begin();
    +
    +				//$message = imap_body($connection, $imapemail, 0);
    +				$overview = imap_fetch_overview($connection, $imapemail, 0);
    +				$structure = imap_fetchstructure($connection, $imapemail, 0);
    +
    +				$partplain = $parthtml = -1;
    +				// Loop to get part html and plain
    +				/*
    +				0 multipart/mixed
    +				1 multipart/alternative
    +				 1.1 text/plain
    +				 1.2 text/html
    +				2 message/rfc822
    +				 2 multipart/mixed
    +				  2.1 multipart/alternative
    +				   2.1.1 text/plain
    +				   2.1.2 text/html
    +				  2.2 message/rfc822
    +				  2.2 multipart/alternative
    +				   2.2.1 text/plain
    +				   2.2.2 text/html
    +				*/
    +				/**
    +				 * create_part_array
    +				 *
    +				 * @param 	Object $structure	Structure
    +				 * @param 	string $prefix		prefix
    +				 * @return 	array				Array with number and object
    +				 */
    +				function createPartArray($structure, $prefix="")
    +				{
    +					//print_r($structure);
    +					if (count($structure->parts) > 0) {    // There some sub parts
    +						foreach ($structure->parts as $count => $part) {
    +							add_part_to_array($part, $prefix.($count+1), $part_array);
    +						}
    +					}else{    // Email does not have a seperate mime attachment for text
    +						$part_array[] = array('part_number' => $prefix.'1', 'part_object' => $obj);
    +					}
    +					return $part_array;
    +				}
    +
    +				/**
    +				 * Sub function for createPartArray(). Only called by createPartArray() and itself.
    +				 *
    +				 * @param 	Object		$obj			Structure
    +				 * @param 	string		$partno			Part no
    +				 * @param 	array		$part_array		array
    +				 * @return	void
    +				 */
    +				function addPartToArray($obj, $partno, &$part_array)
    +				{
    +					$part_array[] = array('part_number' => $partno, 'part_object' => $obj);
    +					if ($obj->type == 2) { // Check to see if the part is an attached email message, as in the RFC-822 type
    +						//print_r($obj);
    +						if (array_key_exists('parts',$obj)) {    // Check to see if the email has parts
    +							foreach ($obj->parts as $count => $part) {
    +								// Iterate here again to compensate for the broken way that imap_fetchbody() handles attachments
    +								if (count($part->parts) > 0) {
    +									foreach ($part->parts as $count2 => $part2) {
    +										addPartToArray($part2, $partno.".".($count2+1), $part_array);
    +									}
    +								}else{    // Attached email does not have a seperate mime attachment for text
    +									$part_array[] = array('part_number' => $partno.'.'.($count+1), 'part_object' => $obj);
    +								}
    +							}
    +						}else{    // Not sure if this is possible
    +							$part_array[] = array('part_number' => $partno.'.1', 'part_object' => $obj);
    +						}
    +					}else{    // If there are more sub-parts, expand them out.
    +						if (array_key_exists('parts',$obj)) {
    +							foreach ($obj->parts as $count => $p) {
    +								addPartToArray($p, $partno.".".($count+1), $part_array);
    +							}
    +						}
    +					}
    +				}
    +
    +				$result = createPartArray($structure, '');
    +				//var_dump($result);exit;
    +				foreach($result as $part)
    +				{
    +					if ($part['part_object']->subtype == 'HTML')  $parthtml=$part['part_number'];
    +					if ($part['part_object']->subtype == 'PLAIN') $partplain=$part['part_number'];
    +				}
    +
    +				/* OLD CODE to get parthtml and partplain
    +				if (count($structure->parts) > 0) {    // There some sub parts
    +					foreach($structure->parts as $key => $part)
    +					{
    +						if ($part->subtype == 'HTML') $parthtml=($key+1);									// For example: $parthtml = 1 or 2
    +						if ($part->subtype == 'PLAIN') $partplain=($key+1);
    +						if ($part->subtype == 'ALTERNATIVE')
    +						{
    +							if (count($part->parts) > 0)
    +							{
    +								foreach($part->parts as $key2 => $part2)
    +								{
    +									if ($part2->subtype == 'HTML') $parthtml=($key+1).'.'.($key2+1);		// For example: $parthtml = 1.1 or 1.2
    +									if ($part2->subtype == 'PLAIN') $partplain=($key+1).'.'.($key2+1);
    +								}
    +							}
    +							else
    +							{
    +								$partplain=($key+1).'.1';
    +							}
    +						}
    +					}
    +				}
    +				else
    +				{
    +					$partplain=1;
    +				}*/
    +
    +				//var_dump($structure);
    +				//var_dump($parthtml);var_dump($partplain);
    +
    +				$messagetext = imap_fetchbody($connection, $imapemail, ($parthtml != '-1' ? $parthtml : ($partplain != '-1' ? $partplain : 0)), FT_PEEK);
    +
    +				//var_dump($overview);
    +				//var_dump($header);
    +				//var_dump($message);
    +				//var_dump($structure->parts[0]->parts);
    +				//var_dump($messagetext);exit;
    +				$fromstring=$overview[0]->from;
    +				$sender=$overview[0]->sender;
    +				$to=$overview[0]->to;
    +				$sendtocc=$overview[0]->cc;
    +				$sendtobcc=$overview[0]->bcc;
    +				$date=$overview[0]->udate;
    +				$msgid=str_replace(array('<','>'), '', $overview[0]->message_id);
    +				$subject=$overview[0]->subject;
    +				//var_dump($msgid);exit;
    +
    +				$reg=array();
    +				if (preg_match('/^(.*)<(.*)>$/', $fromstring, $reg))
    +				{
    +					$from=$reg[2];
    +					$fromtext=$reg[1];
    +				}
    +				else
    +				{
    +					$from = $fromstring;
    +					$fromtext='';
    +				}
    +				$fk_element_id = 0; $fk_element_type = '';
    +
    +				$contactid = 0; $thirdpartyid = 0; $projectid = 0;
    +
    +				// Analyze TrackId in field References
    +				// For example: References: <1542377954.SMTPs-dolibarr-thi649@8f6014fde11ec6cdec9a822234fc557e>
    +				$trackid = '';
    +				$reg=array();
    +				if (! empty($headers['References']) && preg_match('/dolibarr-([a-z]+)([0-9]+)@'.preg_quote($host,'/').'/', $headers['References'], $reg))
    +				{
    +					$trackid = $reg[1].$reg[2];
    +
    +					$objectid = 0;
    +					$objectemail = null;
    +					if ($reg[0] == 'inv')
    +					{
    +						$objectid = $reg[1];
    +						$objectemail = new Facture($this->db);
    +					}
    +					if ($reg[0] == 'proj')
    +					{
    +						$objectid = $reg[1];
    +						$objectemail = new Project($this->db);
    +					}
    +					if ($reg[0] == 'con')
    +					{
    +						$objectid = $reg[1];
    +						$objectemail = new Contact($this->db);
    +					}
    +					if ($reg[0] == 'thi')
    +					{
    +						$objectid = $reg[1];
    +						$objectemail = new Societe($this->db);
    +					}
    +					if ($reg[0] == 'use')
    +					{
    +						$objectid = $reg[1];
    +						$objectemail = new User($this->db);
    +					}
    +
    +					if (is_object($objectemail))
    +					{
    +						$result = $objectemail->fetch($objectid);
    +						if ($result > 0)
    +						{
    +							$fk_element_id = $objectemail->id;
    +							$fk_element_type = $objectemail->element;
    +							// Fix fk_element_type
    +							if ($fk_element_type == 'facture') $fk_element_type = 'invoice';
    +
    +							$thirdpartyid = $objectemail->fk_soc;
    +							$contactid = $objectemail->fk_socpeople;
    +							$projectid = isset($objectemail->fk_project)?$objectemail->fk_project:$objectemail->fk_projet;
    +						}
    +					}
    +
    +					// Project
    +					if ($projectid > 0)
    +					{
    +						$result = $projectstatic->fetch($projectid);
    +						if ($result <= 0) $projectstatic->id = 0;
    +						else
    +						{
    +							$projectid = $projectstatic->id;
    +							$projectfoundby = 'trackid ('.$trackid.')';
    +							if (empty($contactid)) $contactid = $projectstatic->fk_contact;
    +							if (empty($thirdpartyid)) $thirdpartyid = $projectstatic->fk_soc;
    +						}
    +					}
    +					// Contact
    +					if ($contactid > 0)
    +					{
    +						$result = $contactstatic->fetch($contactid);
    +						if ($result <= 0) $contactstatic->id = 0;
    +						else
    +						{
    +							$contactid = $contactstatic->id;
    +							$contactfoundby = 'trackid ('.$trackid.')';
    +							if (empty($thirdpartyid)) $thirdpartyid = $contactstatic->fk_soc;
    +						}
    +					}
    +					// Thirdparty
    +					if ($thirdpartyid > 0)
    +					{
    +						$result = $thirdpartystatic->fetch($thirdpartyid);
    +						if ($result <= 0) $thirdpartystatic->id = 0;
    +						else
    +						{
    +							$thirdpartyid = $thirdpartystatic->id;
    +							$thirdpartyfoundby = 'trackid ('.$trackid.')';
    +						}
    +					}
    +				}
    +
    +				if (empty($contactid))		// Try to find contact using email
    +				{
    +					$result = $contactstatic->fetch(0, null, '', $from);
    +					if ($result > 0)
    +					{
    +						$contactid = $contactstatic->id;
    +						$contactfoundby = 'email of contact ('.$from.')';
    +						if ($contactstatic->fk_soc > 0)
    +						{
    +							$result = $thirdpartystatic->fetch($contactstatic->fk_soc);
    +							if ($result > 0)
    +							{
    +								$thirdpartyid = $thirdpartystatic->id;
    +								$thirdpartyfoundby = 'email of contact ('.$from.')';
    +							}
    +						}
    +					}
    +				}
    +
    +				if (empty($thirdpartyid))		// Try to find thirdparty using email
    +				{
    +					$result = $thirdpartystatic->fetch(0, '', '', '', '', '', '', '', '', '', $from);
    +					if ($result > 0) $thirdpartyfoundby = 'email ('.$from.')';
    +				}
    +
    +
    +
    +				// Do operations
    +				foreach($this->actions as $operation)
    +				{
    +					if ($errorforactions) break;
    +					if (empty($operation['status'])) continue;
    +
    +					// Make Operation
    +					dol_syslog("Execute action ".$operation['type']." actionparam=".$operation['actionparam'].' thirdpartystatic->id='.$thirdpartystatic->id.' contactstatic->id='.$contactstatic->id.' projectstatic->id='.$projectstatic->id);
    +
    +					// Search and create thirdparty
    +					if ($operation['type'] == 'loadthirdparty' || $operation['type'] == 'loadandcreatethirdparty')
    +					{
    +						if (empty($operation['actionparam']))
    +						{
    +							$errorforactions++;
    +							$this->error = "Action loadthirdparty or loadandcreatethirdparty has empty parameter. Must be 'VALUE:xxx' or 'REGEX:(body|subject):regex' to define how to extract data";
    +							$this->errors[] = $this->error;
    +						}
    +						else
    +						{
    +							$actionparam = $operation['actionparam'];
    +							$nametouseforthirdparty='';
    +
    +							// $this->actionparam = 'VALUE:aaa' or 'REGEX:BODY:....'
    +							$arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '=');
    +							foreach($arrayvaluetouse as $propertytooverwrite => $valueforproperty)
    +							{
    +								$sourcestring='';
    +								$sourcefield='';
    +								$regexstring='';
    +								$regforregex=array();
    +
    +								if (preg_match('/^REGEX:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex))
    +								{
    +									$sourcefield=$regforregex[1];
    +									$regexstring=$regforregex[2];
    +								}
    +
    +								if (! empty($sourcefield) && ! empty($regexstring))
    +								{
    +									if (strtolower($sourcefield) == 'body') $sourcestring=$messagetext;
    +									elseif (strtolower($sourcefield) == 'subject') $sourcestring=$subject;
    +
    +									$regforval=array();
    +									if (preg_match('/'.$regexstring.'/', $sourcestring, $regforval))	// Do not use preg_quote here, string is already a regex syntax, for example string is 'Name:\s([^\s]*)'
    +									{
    +										// Overwrite param $tmpproperty
    +										$nametouseforthirdparty = $regforval[1];
    +									}
    +									else
    +									{
    +										// Nothing can be done for this param
    +									}
    +									//var_dump($sourcestring); var_dump($regexstring);var_dump($nametouseforthirdparty);exit;
    +								}
    +								elseif (preg_match('/^VALUE:(.*)$/', $valueforproperty, $reg))
    +								{
    +									$nametouseforthirdparty = $reg[1];
    +								}
    +								else
    +								{
    +									$errorforactions++;
    +									$this->error = 'Bad syntax for description of action parameters: '.$actionparam;
    +									$this->errors[] = $this->error;
    +									break;
    +								}
    +							}
    +
    +							if (! $errorforactions && $nametouseforthirdparty)
    +							{
    +								$result = $thirdpartystatic->fetch(0, $nametouseforthirdparty);
    +								if ($result < 0)
    +								{
    +									$errorforactions++;
    +									$this->error = 'Error when getting thirdparty with name '.$nametouseforthirdparty.' (may be 2 record exists with same name ?)';
    +									$this->errors[] = $this->error;
    +									break;
    +								}
    +								elseif ($result == 0)
    +								{
    +									if ($operation['type'] == 'loadandcreatethirdparty')
    +									{
    +										dol_syslog("Third party with name ".$nametouseforthirdparty." was not found. We try to create it.");
    +
    +										// Create thirdparty
    +										$thirdpartystatic->name = $nametouseforthirdparty;
    +										if ($fromtext != $nametouseforthirdparty) $thirdpartystatic->name_alias = $fromtext;
    +										$thirdpartystatic->email = $from;
    +
    +										// Overwrite values with values extracted from source email
    +										$errorforthisaction = $this->overwritePropertiesOfObject($thirdpartystatic, $operation['actionparam'], $messagetext, $subject);
    +
    +										if ($errorforthisaction)
    +										{
    +											$errorforactions++;
    +										}
    +										else
    +										{
    +											$result = $thirdpartystatic->create($user);
    +											if ($result <= 0)
    +											{
    +												$errorforactions++;
    +												$this->error = $thirdpartystatic->error;
    +												$this->errors = $thirdpartystatic->errors;
    +											}
    +										}
    +									}
    +									else
    +									{
    +										dol_syslog("Third party with name ".$nametouseforthirdparty." was not found");
    +									}
    +								}
    +							}
    +						}
    +					}
    +					// Create event
    +					elseif ($operation['type'] == 'recordevent')
    +					{
    +						$actioncode = 'EMAIL_IN';
    +
    +						// Insert record of emails sent
    +						$actioncomm = new ActionComm($this->db);
    +
    +						$actioncomm->type_code   = 'AC_OTH_AUTO';		// Type of event ('AC_OTH', 'AC_OTH_AUTO', 'AC_XXX'...)
    +						$actioncomm->code        = 'AC_'.$actioncode;
    +						$actioncomm->label       = $langs->trans("ActionAC_EMAIL_IN").' - '.$langs->trans("MailFrom").' '.$from;
    +						$actioncomm->note        = $messagetext;
    +						$actioncomm->fk_project  = $projectstatic->id;
    +						$actioncomm->datep       = $date;
    +						$actioncomm->datef       = $date;
    +						$actioncomm->percentage  = -1;   // Not applicable
    +						$actioncomm->socid       = $thirdpartystatic->id;
    +						$actioncomm->contactid   = $contactstatic->id;
    +						$actioncomm->authorid    = $user->id;   // User saving action
    +						$actioncomm->userownerid = $user->id;	// Owner of action
    +						// Fields when action is an email (content should be added into note)
    +						$actioncomm->email_msgid = $msgid;
    +						$actioncomm->email_from  = $fromstring;
    +						$actioncomm->email_sender= $sender;
    +						$actioncomm->email_to    = $to;
    +						$actioncomm->email_tocc  = $sendtocc;
    +						$actioncomm->email_tobcc = $sendtobcc;
    +						$actioncomm->email_subject = $subject;
    +						$actioncomm->errors_to   = '';
    +
    +						if (! in_array($fk_element_type, array('societe','contact','project','user')))
    +						{
    +							$actioncomm->fk_element  = $fk_element_id;
    +							$actioncomm->elementtype = $fk_element_type;
    +						}
    +
    +						//$actioncomm->extraparams = $extraparams;
    +
    +						// Overwrite values with values extracted from source email
    +						$errorforthisaction = $this->overwritePropertiesOfObject($actioncommn, $operation['actionparam'], $messagetext, $subject);
    +
    +						if ($errorforthisaction)
    +						{
    +							$errorforactions++;
    +						}
    +						else
    +						{
    +							$result = $actioncomm->create($user);
    +							if ($result <= 0)
    +							{
    +								$errorforactions++;
    +								$this->errors = $actioncomm->errors;
    +							}
    +						}
    +					}
    +					// Create event
    +					elseif ($operation['type'] == 'project')
    +					{
    +						$note_private = $langs->trans("ProjectCreatedByEmailCollector", $msgid);
    +						$projecttocreate = new Project($this->db);
    +						if ($thirdpartystatic->id > 0)
    +						{
    +							$projecttocreate->socid = $thirdpartystatic->id;
    +							if ($thirdpartyfoundby) $note_private .= ' - Third party found from '.$thirdpartyfoundby;
    +						}
    +						if ($contactstatic->id > 0)
    +						{
    +							$projecttocreate->contact_id = $contactstatic->id;
    +							if ($contactfoundby) $note_private .= ' - Contact/address found from '.$contactfoundby;
    +						}
    +
    +						$id_opp_status = dol_getIdFromCode($this->db, 'PROSP', 'c_lead_status', 'code', 'rowid');
    +						$percent_opp_status = dol_getIdFromCode($this->db, 'PROSP', 'c_lead_status', 'code', 'percent');
    +
    +						$projecttocreate->title = $subject;
    +						$projecttocreate->date_start = $now;
    +						$projecttocreate->date_end = '';
    +						$projecttocreate->opp_status = $id_opp_status;
    +						$projecttocreate->opp_percent = $percent_opp_status;
    +						$projecttocreate->description = ($note_private?$note_private."\n":'').dol_string_nohtmltag($messagetext, 2);
    +						$projecttocreate->note_private = $note_private;
    +						$projecttocreate->entity = $conf->entity;
    +
    +						// Get next project Ref
    +						$defaultref='';
    +						$modele = empty($conf->global->PROJECT_ADDON)?'mod_project_simple':$conf->global->PROJECT_ADDON;
    +
    +						// Search template files
    +						$file=''; $classname=''; $filefound=0;
    +						$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
    +						foreach($dirmodels as $reldir)
    +						{
    +							$file=dol_buildpath($reldir."core/modules/project/".$modele.'.php',0);
    +							if (file_exists($file))
    +							{
    +								$filefound=1;
    +								$classname = $modele;
    +								break;
    +							}
    +						}
    +
    +						if ($filefound)
    +						{
    +							$result=dol_include_once($reldir."core/modules/project/".$modele.'.php');
    +							$modProject = new $classname;
    +
    +							$defaultref = $modProject->getNextValue(($thirdpartystatic->id > 0 ? $thirdpartystatic : null), $projecttocreate);
    +						}
    +
    +						$projecttocreate->ref = $defaultref;
    +
    +						// Overwrite values with values extracted from source email
    +						$errorforthisaction = $this->overwritePropertiesOfObject($projecttocreate, $operation['actionparam'], $messagetext, $subject);
    +
    +						if ($errorforthisaction)
    +						{
    +							$errorforactions++;
    +						}
    +						else
    +						{
    +							if (is_numeric($projecttocreate->ref) && $projecttocreate->ref <= 0)
    +							{
    +								$errorforactions++;
    +								$this->error = 'Failed to create project: Can\'t get a valid value for project Ref';
    +							}
    +							else
    +							{
    +								// Create project
    +								$result = $projecttocreate->create($user);
    +								if ($result <= 0)
    +								{
    +									$errorforactions++;
    +									$this->error = 'Failed to create project: '.$langs->trans($projecttocreate->error);
    +									$this->errors = $projecttocreate->errors;
    +								}
    +							}
    +						}
    +					}
    +
    +					if (! $errorforactions)
    +					{
    +						$nbactiondoneforemail++;
    +					}
    +				}
    +
    +				// Error for email or not ?
    +				if (! $errorforactions)
    +				{
    +					if ($targetdir)
    +					{
    +						dol_syslog("EmailCollector::doCollectOneCollector move message ".$imapemail." to ".$connectstringtarget, LOG_DEBUG);
    +						$res = imap_mail_move($connection, $imapemail, $targetdir, 0);
    +						if ($res == false) {
    +							$errorforemail++;
    +							$this->error = imap_last_error();
    +							$this->errors[] = $this->error;
    +							dol_syslog(imap_last_error());
    +						}
    +					}
    +					else
    +					{
    +						dol_syslog("EmailCollector::doCollectOneCollector message ".$imapemail." to ".$connectstringtarget." was set to read", LOG_DEBUG);
    +					}
    +				}
    +				else
    +				{
    +					$errorforemail++;
    +				}
    +
    +				if (! $errorforemail)
    +				{
    +					$nbactiondone += $nbactiondoneforemail;
    +					$nbemailok++;
    +
    +					$this->db->commit();
    +				}
    +				else
    +				{
    +					$error++;
    +
    +					$this->db->rollback();
    +				}
    +
    +				$nbemailprocessed++;
    +
    +				unset($objectemail);
    +				unset($projectstatic);
    +				unset($thirdpartystatic);
    +				unset($contactstatic);
    +			}
    +
    +			$output=$langs->trans('XEmailsDoneYActionsDone', $nbemailprocessed, $nbemailok, $nbactiondone);
    +		}
    +		else
    +		{
    +			$output=$langs->trans('NoNewEmailToProcess');
    +		}
    +
    +		imap_expunge($connection);	// To validate any move
    +
    +		imap_close($connection);
    +
    +		$this->datelastresult = $now;
    +		$this->lastresult = $output;
    +
    +		if (! empty($this->errors)) $this->lastresult.= " - ".join(" - ", $this->errors);
    +		$this->codelastresult = ($error ? 'KO' : 'OK');
    +		$this->update($user);
    +
    +		dol_syslog("EmailCollector::doCollectOneCollector end", LOG_DEBUG);
    +
    +		return $error?-1:1;
    +	}
    +}
    diff --git a/htdocs/emailcollector/class/emailcollectoraction.class.php b/htdocs/emailcollector/class/emailcollectoraction.class.php
    new file mode 100644
    index 00000000000..a1d8940d3f6
    --- /dev/null
    +++ b/htdocs/emailcollector/class/emailcollectoraction.class.php
    @@ -0,0 +1,518 @@
    +<?php
    +/* Copyright (C) 2017  Laurent Destailleur <eldy@users.sourceforge.net>
    + * Copyright (C) ---Put here your own copyright and developer email---
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file        class/emailcollectoraction.class.php
    + * \ingroup     emailcollector
    + * \brief       This file is a CRUD class file for EmailCollectorAction (Create/Read/Update/Delete)
    + */
    +
    +// Put here all includes required by your class file
    +require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
    +//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
    +//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
    +
    +/**
    + * Class for EmailCollectorAction
    + */
    +class EmailCollectorAction extends CommonObject
    +{
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element = 'emailcollectoraction';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element = 'emailcollector_emailcollectoraction';
    +
    +	/**
    +	 * @var int  Does emailcollectoraction support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 */
    +	public $ismultientitymanaged = 0;
    +
    +	/**
    +	 * @var int  Does emailcollectoraction support extrafields ? 0=No, 1=Yes
    +	 */
    +	public $isextrafieldmanaged = 0;
    +
    +	/**
    +	 * @var string String with name of icon for emailcollectoraction. Must be the part after the 'object_' into object_emailcollectoraction.png
    +	 */
    +	public $picto = 'emailcollectoraction@emailcollector';
    +
    +
    +	public $fk_element = 'fk_emailcollector';
    +
    +
    +	/**
    +	 *  'type' if the field format.
    +	 *  'label' the translation key.
    +	 *  'enabled' is a condition when the field must be managed.
    +	 *  'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only. Using a negative value means field is not shown by default on list but can be selected for viewing)
    +	 *  'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0).
    +	 *  'default' is a default value for creation (can still be replaced by the global setup of default values)
    +	 *  'index' if we want an index in database.
    +	 *  'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...).
    +	 *  'position' is the sort order of field.
    +	 *  'searchall' is 1 if we want to search in this field when making a search from the quick search button.
    +	 *  'isameasure' must be set to 1 if you want to have a total on list for this field. Field type must be summable like integer or double(24,8).
    +	 *  'css' is the CSS style to use on field. For example: 'maxwidth200'
    +	 *  'help' is a string visible as a tooltip on field
    +	 *  'comment' is not used. You can store here any text of your choice. It is not used by application.
    +	 *  'showoncombobox' if value of the field must be visible into the label of the combobox that list record
    +	 *  'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel")
    +	 */
    +
    +	// BEGIN MODULEBUILDER PROPERTIES
    +	/**
    +	 * @var array  Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
    +	 */
    +	public $fields=array(
    +		'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",),
    +		'fk_emailcollector' => array('type'=>'integer', 'label'=>'Id of emailcollector', 'foreignkey'=>'emailcollecotr.rowid'),
    +		'type' => array('type'=>'varchar(128)', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1),
    +		'actionparam' => array('type'=>'varchar(255)', 'label'=>'ParamForAction', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'notnull'=>-1),
    +		'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>500, 'notnull'=>1,),
    +		'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'position'=>501, 'notnull'=>1,),
    +		'fk_user_creat' => array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'position'=>510, 'notnull'=>1, 'foreignkey'=>'llx_user.rowid',),
    +		'fk_user_modif' => array('type'=>'integer', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'position'=>511, 'notnull'=>-1,),
    +		'position' => array('type'=>'integer', 'label'=>'Position', 'enabled'=>1, 'visible'=>1, 'position'=>600, 'default'=>'0',),
    +		'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,),
    +		'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'position'=>1000, 'notnull'=>1, 'default'=>1, 'arrayofkeyval'=>array('0'=>'Disabled', '1'=>'Enabled')),
    +	);
    +	public $rowid;
    +	public $fk_emailcollector;
    +	public $type;
    +	public $actionparam;
    +	public $date_creation;
    +	public $tms;
    +	public $fk_user_creat;
    +	public $fk_user_modif;
    +	public $position;
    +	public $import_key;
    +	public $status;
    +	// END MODULEBUILDER PROPERTIES
    +
    +
    +
    +	// If this object has a subtable with lines
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
    +	//public $table_element_line = 'emailcollectoractiondet';
    +
    +	/**
    +	 * @var int    Field with ID of parent key if this field has a parent
    +	 */
    +	//public $fk_element = 'fk_emailcollectoraction';
    +
    +	/**
    +	 * @var int    Name of subtable class that manage subtable lines
    +	 */
    +	//public $class_element_line = 'EmailcollectorActionline';
    +
    +	/**
    +	 * @var array  Array of child tables (child tables to delete before deleting a record)
    +	 */
    +	//protected $childtables=array('emailcollectoractiondet');
    +
    +	/**
    +	 * @var EmailcollectorActionLine[]     Array of subtable lines
    +	 */
    +	//public $lines = array();
    +
    +
    +
    +	/**
    +	 * Constructor
    +	 *
    +	 * @param DoliDb $db Database handler
    +	 */
    +	public function __construct(DoliDB $db)
    +	{
    +		global $conf, $langs, $user;
    +
    +		$this->db = $db;
    +
    +		if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields['rowid'])) $this->fields['rowid']['visible']=0;
    +		if (empty($conf->multicompany->enabled) && isset($this->fields['entity'])) $this->fields['entity']['enabled']=0;
    +
    +		// Unset fields that are disabled
    +		foreach($this->fields as $key => $val)
    +		{
    +			if (isset($val['enabled']) && empty($val['enabled']))
    +			{
    +				unset($this->fields[$key]);
    +			}
    +		}
    +
    +		// Translate some data of arrayofkeyval
    +		foreach($this->fields as $key => $val)
    +		{
    +			if (is_array($this->fields['status']['arrayofkeyval']))
    +			{
    +				foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2)
    +				{
    +					$this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2);
    +				}
    +			}
    +		}
    +	}
    +
    +	/**
    +	 * Create object into database
    +	 *
    +	 * @param  User $user      User that creates
    +	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
    +	 * @return int             <0 if KO, Id of created object if OK
    +	 */
    +	public function create(User $user, $notrigger = false)
    +	{
    +		global $langs;
    +		if (empty($this->type))
    +		{
    +			$langs->load("errors");
    +			$this->errors[]=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type"));
    +			return -1;
    +		}
    +
    +		return $this->createCommon($user, $notrigger);
    +	}
    +
    +	/**
    +	 * Clone and object into another one
    +	 *
    +	 * @param  	User 	$user      	User that creates
    +	 * @param  	int 	$fromid     Id of object to clone
    +	 * @return 	mixed 				New object created, <0 if KO
    +	 */
    +	public function createFromClone(User $user, $fromid)
    +	{
    +		global $langs, $hookmanager, $extrafields;
    +	    $error = 0;
    +
    +	    dol_syslog(__METHOD__, LOG_DEBUG);
    +
    +	    $object = new self($this->db);
    +
    +	    $this->db->begin();
    +
    +	    // Load source object
    +	    $object->fetchCommon($fromid);
    +	    // Reset some properties
    +	    unset($object->id);
    +	    unset($object->fk_user_creat);
    +	    unset($object->import_key);
    +
    +	    // Clear fields
    +	    $object->ref = "copy_of_".$object->ref;
    +	    $object->title = $langs->trans("CopyOf")." ".$object->title;
    +	    // ...
    +	    // Clear extrafields that are unique
    +	    if (is_array($object->array_options) && count($object->array_options) > 0)
    +	    {
    +	    	$extrafields->fetch_name_optionals_label($this->element);
    +	    	foreach($object->array_options as $key => $option)
    +	    	{
    +	    		$shortkey = preg_replace('/options_/', '', $key);
    +	    		if (! empty($extrafields->attributes[$this->element]['unique'][$shortkey]))
    +	    		{
    +	    			//var_dump($key); var_dump($clonedObj->array_options[$key]); exit;
    +	    			unset($object->array_options[$key]);
    +	    		}
    +	    	}
    +	    }
    +
    +	    // Create clone
    +		$object->context['createfromclone'] = 'createfromclone';
    +	    $result = $object->createCommon($user);
    +	    if ($result < 0) {
    +	        $error++;
    +	        $this->error = $object->error;
    +	        $this->errors = $object->errors;
    +	    }
    +
    +	    // End
    +	    if (!$error) {
    +	        $this->db->commit();
    +	        return $object;
    +	    } else {
    +	        $this->db->rollback();
    +	        return -1;
    +	    }
    +	}
    +
    +	/**
    +	 * Load object in memory from the database
    +	 *
    +	 * @param int    $id   Id object
    +	 * @param string $ref  Ref
    +	 * @return int         <0 if KO, 0 if not found, >0 if OK
    +	 */
    +	public function fetch($id, $ref = null)
    +	{
    +		$result = $this->fetchCommon($id, $ref);
    +		if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines();
    +		return $result;
    +	}
    +
    +	/**
    +	 * Load object lines in memory from the database
    +	 *
    +	 * @return int         <0 if KO, 0 if not found, >0 if OK
    +	 */
    +	/*public function fetchLines()
    +	{
    +		$this->lines=array();
    +
    +		// Load lines with object EmailcollectorActionLine
    +
    +		return count($this->lines)?1:0;
    +	}*/
    +
    +	/**
    +	 * Update object into database
    +	 *
    +	 * @param  User $user      User that modifies
    +	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
    +	 * @return int             <0 if KO, >0 if OK
    +	 */
    +	public function update(User $user, $notrigger = false)
    +	{
    +		return $this->updateCommon($user, $notrigger);
    +	}
    +
    +	/**
    +	 * Delete object in database
    +	 *
    +	 * @param User $user       User that deletes
    +	 * @param bool $notrigger  false=launch triggers after, true=disable triggers
    +	 * @return int             <0 if KO, >0 if OK
    +	 */
    +	public function delete(User $user, $notrigger = false)
    +	{
    +		return $this->deleteCommon($user, $notrigger);
    +	}
    +
    +	/**
    +	 *  Return a link to the object card (with optionaly the picto)
    +	 *
    +	 *	@param	int		$withpicto					Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto)
    +	 *	@param	string	$option						On what the link point to ('nolink', ...)
    +     *  @param	int  	$notooltip					1=Disable tooltip
    +     *  @param  string  $morecss            		Add more css on link
    +     *  @param  int     $save_lastsearch_value    	-1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    +	 *	@return	string								String with URL
    +	 */
    +	function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
    +	{
    +		global $db, $conf, $langs, $hookmanager;
    +        global $dolibarr_main_authentication, $dolibarr_main_demo;
    +        global $menumanager;
    +
    +        if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
    +
    +        $result = '';
    +        $companylink = '';
    +
    +        $label = '<u>' . $langs->trans("EmailcollectorAction") . '</u>';
    +        $label.= '<br>';
    +        $label.= '<b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
    +
    +        $url = dol_buildpath('/emailcollector/emailcollectoraction_card.php',1).'?id='.$this->id;
    +
    +        if ($option != 'nolink')
    +        {
    +	        // Add param to save lastsearch_values or not
    +	        $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    +	        if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1;
    +	        if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
    +        }
    +
    +        $linkclose='';
    +        if (empty($notooltip))
    +        {
    +            if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
    +            {
    +                $label=$langs->trans("ShowEmailcollectorAction");
    +                $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    +            }
    +            $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"';
    +            $linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"';
    +
    +            /*
    +             $hookmanager->initHooks(array('emailcollectoractiondao'));
    +             $parameters=array('id'=>$this->id);
    +             $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +             if ($reshook > 0) $linkclose = $hookmanager->resPrint;
    +             */
    +        }
    +        else $linkclose = ($morecss?' class="'.$morecss.'"':'');
    +
    +		$linkstart = '<a href="'.$url.'"';
    +		$linkstart.=$linkclose.'>';
    +		$linkend='</a>';
    +
    +		$result .= $linkstart;
    +		if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
    +		if ($withpicto != 2) $result.= $this->ref;
    +		$result .= $linkend;
    +		//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');
    +
    +		global $action,$hookmanager;
    +		$hookmanager->initHooks(array('emailcollectoractiondao'));
    +		$parameters=array('id'=>$this->id, 'getnomurl'=>$result);
    +		$reshook=$hookmanager->executeHooks('getNomUrl',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +		if ($reshook > 0) $result = $hookmanager->resPrint;
    +		else $result .= $hookmanager->resPrint;
    +
    +		return $result;
    +	}
    +
    +	/**
    +	 *  Return label of the status
    +	 *
    +	 *  @param  int		$mode          0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
    +	 *  @return	string 			       Label of status
    +	 */
    +	public function getLibStatut($mode=0)
    +	{
    +		return $this->LibStatut($this->status, $mode);
    +	}
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
    +	/**
    +	 *  Return the status
    +	 *
    +	 *  @param	int		$status        Id status
    +	 *  @param  int		$mode          0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
    +	 *  @return string 			       Label of status
    +	 */
    +	public function LibStatut($status, $mode=0)
    +	{
    +		// phpcs:enable
    +		if (empty($this->labelstatus))
    +		{
    +			global $langs;
    +			//$langs->load("emailcollector");
    +			$this->labelstatus[1] = $langs->trans('Enabled');
    +			$this->labelstatus[0] = $langs->trans('Disabled');
    +		}
    +
    +		if ($mode == 0)
    +		{
    +			return $this->labelstatus[$status];
    +		}
    +		elseif ($mode == 1)
    +		{
    +			return $this->labelstatus[$status];
    +		}
    +		elseif ($mode == 2)
    +		{
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +		}
    +		elseif ($mode == 3)
    +		{
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
    +		}
    +		elseif ($mode == 4)
    +		{
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +		}
    +		elseif ($mode == 5)
    +		{
    +			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
    +		}
    +		elseif ($mode == 6)
    +		{
    +			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
    +		}
    +	}
    +
    +	/**
    +	 *	Charge les informations d'ordre info dans l'objet commande
    +	 *
    +	 *	@param  int		$id       Id of order
    +	 *	@return	void
    +	 */
    +	public function info($id)
    +	{
    +		$sql = 'SELECT rowid, date_creation as datec, tms as datem,';
    +		$sql.= ' fk_user_creat, fk_user_modif';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t';
    +		$sql.= ' WHERE t.rowid = '.$id;
    +		$result=$this->db->query($sql);
    +		if ($result)
    +		{
    +			if ($this->db->num_rows($result))
    +			{
    +				$obj = $this->db->fetch_object($result);
    +				$this->id = $obj->rowid;
    +				if ($obj->fk_user_author)
    +				{
    +					$cuser = new User($this->db);
    +					$cuser->fetch($obj->fk_user_author);
    +					$this->user_creation   = $cuser;
    +				}
    +
    +				if ($obj->fk_user_valid)
    +				{
    +					$vuser = new User($this->db);
    +					$vuser->fetch($obj->fk_user_valid);
    +					$this->user_validation = $vuser;
    +				}
    +
    +				if ($obj->fk_user_cloture)
    +				{
    +					$cluser = new User($this->db);
    +					$cluser->fetch($obj->fk_user_cloture);
    +					$this->user_cloture   = $cluser;
    +				}
    +
    +				$this->date_creation     = $this->db->jdate($obj->datec);
    +				$this->date_modification = $this->db->jdate($obj->datem);
    +				$this->date_validation   = $this->db->jdate($obj->datev);
    +			}
    +
    +			$this->db->free($result);
    +		}
    +		else
    +		{
    +			dol_print_error($this->db);
    +		}
    +	}
    +
    +	/**
    +	 * Initialise object with example values
    +	 * Id must be 0 if object instance is a specimen
    +	 *
    +	 * @return void
    +	 */
    +	public function initAsSpecimen()
    +	{
    +		$this->initAsSpecimenCommon();
    +	}
    +}
    diff --git a/htdocs/emailcollector/class/emailcollectorfilter.class.php b/htdocs/emailcollector/class/emailcollectorfilter.class.php
    new file mode 100644
    index 00000000000..ddf68ce9512
    --- /dev/null
    +++ b/htdocs/emailcollector/class/emailcollectorfilter.class.php
    @@ -0,0 +1,491 @@
    +<?php
    +/* Copyright (C) 2017  Laurent Destailleur <eldy@users.sourceforge.net>
    + * Copyright (C) ---Put here your own copyright and developer email---
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file        emailcollector/class/emailcollectorfilter.class.php
    + * \ingroup     emailcollector
    + * \brief       This file is a CRUD class file for EmailCollectorFilter (Create/Read/Update/Delete)
    + */
    +
    +// Put here all includes required by your class file
    +require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
    +//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php';
    +//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
    +
    +/**
    + * Class for EmailCollectorFilter
    + */
    +class EmailCollectorFilter extends CommonObject
    +{
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element = 'emailcollectorfilter';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element = 'emailcollector_emailcollectorfilter';
    +
    +	/**
    +	 * @var int  Does emailcollectorfilter support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 */
    +	public $ismultientitymanaged = 0;
    +
    +	/**
    +	 * @var int  Does emailcollectorfilter support extrafields ? 0=No, 1=Yes
    +	 */
    +	public $isextrafieldmanaged = 0;
    +
    +	/**
    +	 * @var string String with name of icon for emailcollectorfilter. Must be the part after the 'object_' into object_emailcollectorfilter.png
    +	 */
    +	public $picto = 'emailcollectorfilter@emailcollector';
    +
    +
    +	/**
    +	 *  'type' if the field format.
    +	 *  'label' the translation key.
    +	 *  'enabled' is a condition when the field must be managed.
    +	 *  'visible' says if field is visible in list (Examples: 0=Not visible, 1=Visible on list and create/update/view forms, 2=Visible on list only. Using a negative value means field is not shown by default on list but can be selected for viewing)
    +	 *  'notnull' is set to 1 if not null in database. Set to -1 if we must set data to null if empty ('' or 0).
    +	 *  'default' is a default value for creation (can still be replaced by the global setup of default values)
    +	 *  'index' if we want an index in database.
    +	 *  'foreignkey'=>'tablename.field' if the field is a foreign key (it is recommanded to name the field fk_...).
    +	 *  'position' is the sort order of field.
    +	 *  'searchall' is 1 if we want to search in this field when making a search from the quick search button.
    +	 *  'isameasure' must be set to 1 if you want to have a total on list for this field. Field type must be summable like integer or double(24,8).
    +	 *  'css' is the CSS style to use on field. For example: 'maxwidth200'
    +	 *  'help' is a string visible as a tooltip on field
    +	 *  'comment' is not used. You can store here any text of your choice. It is not used by application.
    +	 *  'showoncombobox' if value of the field must be visible into the label of the combobox that list record
    +	 *  'arraykeyval' to set list of value if type is a list of predefined values. For example: array("0"=>"Draft","1"=>"Active","-1"=>"Cancel")
    +	 */
    +
    +	// BEGIN MODULEBUILDER PROPERTIES
    +	/**
    +	 * @var array  Array with all fields and their property. Do not use it as a static var. It may be modified by constructor.
    +	 */
    +	public $fields=array(
    +		'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id",),
    +		'fk_emailcollector' => array('type'=>'integer', 'label'=>'Id of emailcollector', 'foreignkey'=>'emailcollector.rowid'),
    +		'type' => array('type'=>'varchar(128)', 'label'=>'Type', 'enabled'=>1, 'visible'=>1, 'position'=>10, 'notnull'=>1,),
    +		'rulevalue' => array('type'=>'varchar(255)', 'label'=>'ValueOfRule', 'enabled'=>1, 'visible'=>1, 'position'=>30, 'notnull'=>-1, 'help'=>"Value of Rule",),
    +		'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>1, 'visible'=>-2, 'position'=>500, 'notnull'=>1,),
    +		'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'position'=>501, 'notnull'=>1,),
    +		'fk_user_creat' => array('type'=>'integer', 'label'=>'UserAuthor', 'enabled'=>1, 'visible'=>-2, 'position'=>510, 'notnull'=>1, 'foreignkey'=>'llx_user.rowid',),
    +		'fk_user_modif' => array('type'=>'integer', 'label'=>'UserModif', 'enabled'=>1, 'visible'=>-2, 'position'=>511, 'notnull'=>-1,),
    +		'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'enabled'=>1, 'visible'=>-2, 'position'=>1000, 'notnull'=>-1,),
    +		'status' => array('type'=>'integer', 'label'=>'Status', 'enabled'=>1, 'visible'=>1, 'position'=>1000, 'notnull'=>1, 'default'=>1, 'arrayofkeyval'=>array('0'=>'Disabled', '1'=>'Enabled')),
    +	);
    +	public $rowid;
    +	public $fk_emailcollector;
    +	public $type;
    +	public $rulevalue;
    +	public $date_creation;
    +	public $tms;
    +	public $fk_user_creat;
    +	public $fk_user_modif;
    +	public $import_key;
    +	public $status;
    +	// END MODULEBUILDER PROPERTIES
    +
    +
    +
    +	/**
    +	 * Constructor
    +	 *
    +	 * @param DoliDb $db Database handler
    +	 */
    +	public function __construct(DoliDB $db)
    +	{
    +		global $conf, $langs, $user;
    +
    +		$this->db = $db;
    +
    +		if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields['rowid'])) $this->fields['rowid']['visible']=0;
    +		if (empty($conf->multicompany->enabled) && isset($this->fields['entity'])) $this->fields['entity']['enabled']=0;
    +
    +		// Unset fields that are disabled
    +		foreach($this->fields as $key => $val)
    +		{
    +			if (isset($val['enabled']) && empty($val['enabled']))
    +			{
    +				unset($this->fields[$key]);
    +			}
    +		}
    +
    +		// Translate some data of arrayofkeyval
    +		foreach($this->fields as $key => $val)
    +		{
    +			if (is_array($this->fields['status']['arrayofkeyval']))
    +			{
    +				foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2)
    +				{
    +					$this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2);
    +				}
    +			}
    +		}
    +	}
    +
    +	/**
    +	 * Create object into database
    +	 *
    +	 * @param  User $user      User that creates
    +	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
    +	 * @return int             <0 if KO, Id of created object if OK
    +	 */
    +	public function create(User $user, $notrigger = false)
    +	{
    +		global $langs;
    +		if (empty($this->type))
    +		{
    +			$langs->load("errors");
    +			$this->errors[]=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type"));
    +			return -1;
    +		}
    +		if (! in_array($this->type, array('seen','unseen','withtrackingid','withouttrackingid')) && empty($this->rulevalue))
    +		{
    +			$langs->load("errors");
    +			$this->errors[]=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("StringToFilter"));
    +			return -1;
    +		}
    +
    +		return $this->createCommon($user, $notrigger);
    +	}
    +
    +	/**
    +	 * Clone and object into another one
    +	 *
    +	 * @param  	User 	$user      	User that creates
    +	 * @param  	int 	$fromid     Id of object to clone
    +	 * @return 	mixed 				New object created, <0 if KO
    +	 */
    +	public function createFromClone(User $user, $fromid)
    +	{
    +		global $langs, $hookmanager, $extrafields;
    +	    $error = 0;
    +
    +	    dol_syslog(__METHOD__, LOG_DEBUG);
    +
    +	    $object = new self($this->db);
    +
    +	    $this->db->begin();
    +
    +	    // Load source object
    +	    $object->fetchCommon($fromid);
    +	    // Reset some properties
    +	    unset($object->id);
    +	    unset($object->fk_user_creat);
    +	    unset($object->import_key);
    +
    +	    // Clear fields
    +	    $object->ref = "copy_of_".$object->ref;
    +	    $object->title = $langs->trans("CopyOf")." ".$object->title;
    +	    // ...
    +	    // Clear extrafields that are unique
    +	    if (is_array($object->array_options) && count($object->array_options) > 0)
    +	    {
    +	    	$extrafields->fetch_name_optionals_label($this->element);
    +	    	foreach($object->array_options as $key => $option)
    +	    	{
    +	    		$shortkey = preg_replace('/options_/', '', $key);
    +	    		if (! empty($extrafields->attributes[$this->element]['unique'][$shortkey]))
    +	    		{
    +	    			//var_dump($key); var_dump($clonedObj->array_options[$key]); exit;
    +	    			unset($object->array_options[$key]);
    +	    		}
    +	    	}
    +	    }
    +
    +	    // Create clone
    +		$object->context['createfromclone'] = 'createfromclone';
    +	    $result = $object->createCommon($user);
    +	    if ($result < 0) {
    +	        $error++;
    +	        $this->error = $object->error;
    +	        $this->errors = $object->errors;
    +	    }
    +
    +	    // End
    +	    if (!$error) {
    +	        $this->db->commit();
    +	        return $object;
    +	    } else {
    +	        $this->db->rollback();
    +	        return -1;
    +	    }
    +	}
    +
    +	/**
    +	 * Load object in memory from the database
    +	 *
    +	 * @param int    $id   Id object
    +	 * @param string $ref  Ref
    +	 * @return int         <0 if KO, 0 if not found, >0 if OK
    +	 */
    +	public function fetch($id, $ref = null)
    +	{
    +		$result = $this->fetchCommon($id, $ref);
    +		if ($result > 0 && ! empty($this->table_element_line)) $this->fetchLines();
    +		return $result;
    +	}
    +
    +	/**
    +	 * Load object lines in memory from the database
    +	 *
    +	 * @return int         <0 if KO, 0 if not found, >0 if OK
    +	 */
    +	/*public function fetchLines()
    +	{
    +		$this->lines=array();
    +
    +		// Load lines with object EmailcollectorFilterLine
    +
    +		return count($this->lines)?1:0;
    +	}*/
    +
    +	/**
    +	 * Update object into database
    +	 *
    +	 * @param  User $user      User that modifies
    +	 * @param  bool $notrigger false=launch triggers after, true=disable triggers
    +	 * @return int             <0 if KO, >0 if OK
    +	 */
    +	public function update(User $user, $notrigger = false)
    +	{
    +		return $this->updateCommon($user, $notrigger);
    +	}
    +
    +	/**
    +	 * Delete object in database
    +	 *
    +	 * @param User $user       User that deletes
    +	 * @param bool $notrigger  false=launch triggers after, true=disable triggers
    +	 * @return int             <0 if KO, >0 if OK
    +	 */
    +	public function delete(User $user, $notrigger = false)
    +	{
    +		return $this->deleteCommon($user, $notrigger);
    +	}
    +
    +	/**
    +	 *  Return a link to the object card (with optionaly the picto)
    +	 *
    +	 *	@param	int		$withpicto					Include picto in link (0=No picto, 1=Include picto into link, 2=Only picto)
    +	 *	@param	string	$option						On what the link point to ('nolink', ...)
    +     *  @param	int  	$notooltip					1=Disable tooltip
    +     *  @param  string  $morecss            		Add more css on link
    +     *  @param  int     $save_lastsearch_value    	-1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    +	 *	@return	string								String with URL
    +	 */
    +	function getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
    +	{
    +		global $db, $conf, $langs, $hookmanager;
    +        global $dolibarr_main_authentication, $dolibarr_main_demo;
    +        global $menumanager;
    +
    +        if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
    +
    +        $result = '';
    +        $companylink = '';
    +
    +        $label = '<u>' . $langs->trans("EmailcollectorFilter") . '</u>';
    +        $label.= '<br>';
    +        $label.= '<b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
    +
    +        $url = dol_buildpath('/emailcollector/emailcollectorfilter_card.php',1).'?id='.$this->id;
    +
    +        if ($option != 'nolink')
    +        {
    +	        // Add param to save lastsearch_values or not
    +	        $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    +	        if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1;
    +	        if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
    +        }
    +
    +        $linkclose='';
    +        if (empty($notooltip))
    +        {
    +            if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
    +            {
    +                $label=$langs->trans("ShowEmailcollectorFilter");
    +                $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    +            }
    +            $linkclose.=' title="'.dol_escape_htmltag($label, 1).'"';
    +            $linkclose.=' class="classfortooltip'.($morecss?' '.$morecss:'').'"';
    +
    +            /*
    +             $hookmanager->initHooks(array('emailcollectorfilterdao'));
    +             $parameters=array('id'=>$this->id);
    +             $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +             if ($reshook > 0) $linkclose = $hookmanager->resPrint;
    +             */
    +        }
    +        else $linkclose = ($morecss?' class="'.$morecss.'"':'');
    +
    +		$linkstart = '<a href="'.$url.'"';
    +		$linkstart.=$linkclose.'>';
    +		$linkend='</a>';
    +
    +		$result .= $linkstart;
    +		if ($withpicto) $result.=img_object(($notooltip?'':$label), ($this->picto?$this->picto:'generic'), ($notooltip?(($withpicto != 2) ? 'class="paddingright"' : ''):'class="'.(($withpicto != 2) ? 'paddingright ' : '').'classfortooltip"'), 0, 0, $notooltip?0:1);
    +		if ($withpicto != 2) $result.= $this->ref;
    +		$result .= $linkend;
    +		//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');
    +
    +		global $action,$hookmanager;
    +		$hookmanager->initHooks(array('emailcollectorfilterdao'));
    +		$parameters=array('id'=>$this->id, 'getnomurl'=>$result);
    +		$reshook=$hookmanager->executeHooks('getNomUrl',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +		if ($reshook > 0) $result = $hookmanager->resPrint;
    +		else $result .= $hookmanager->resPrint;
    +
    +		return $result;
    +	}
    +
    +	/**
    +	 *  Return label of the status
    +	 *
    +	 *  @param  int		$mode          0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
    +	 *  @return	string 			       Label of status
    +	 */
    +	public function getLibStatut($mode=0)
    +	{
    +		return $this->LibStatut($this->status, $mode);
    +	}
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
    +	/**
    +	 *  Return the status
    +	 *
    +	 *  @param	int		$status        Id status
    +	 *  @param  int		$mode          0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
    +	 *  @return string 			       Label of status
    +	 */
    +	public function LibStatut($status, $mode=0)
    +	{
    +		// phpcs:enable
    +		if (empty($this->labelstatus))
    +		{
    +			global $langs;
    +			//$langs->load("emailcollector");
    +			$this->labelstatus[1] = $langs->trans('Enabled');
    +			$this->labelstatus[0] = $langs->trans('Disabled');
    +		}
    +
    +		if ($mode == 0)
    +		{
    +			return $this->labelstatus[$status];
    +		}
    +		elseif ($mode == 1)
    +		{
    +			return $this->labelstatus[$status];
    +		}
    +		elseif ($mode == 2)
    +		{
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +		}
    +		elseif ($mode == 3)
    +		{
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
    +		}
    +		elseif ($mode == 4)
    +		{
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +		}
    +		elseif ($mode == 5)
    +		{
    +			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
    +		}
    +		elseif ($mode == 6)
    +		{
    +			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
    +		}
    +	}
    +
    +	/**
    +	 *	Charge les informations d'ordre info dans l'objet commande
    +	 *
    +	 *	@param  int		$id       Id of order
    +	 *	@return	void
    +	 */
    +	public function info($id)
    +	{
    +		$sql = 'SELECT rowid, date_creation as datec, tms as datem,';
    +		$sql.= ' fk_user_creat, fk_user_modif';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t';
    +		$sql.= ' WHERE t.rowid = '.$id;
    +		$result=$this->db->query($sql);
    +		if ($result)
    +		{
    +			if ($this->db->num_rows($result))
    +			{
    +				$obj = $this->db->fetch_object($result);
    +				$this->id = $obj->rowid;
    +				if ($obj->fk_user_author)
    +				{
    +					$cuser = new User($this->db);
    +					$cuser->fetch($obj->fk_user_author);
    +					$this->user_creation   = $cuser;
    +				}
    +
    +				if ($obj->fk_user_valid)
    +				{
    +					$vuser = new User($this->db);
    +					$vuser->fetch($obj->fk_user_valid);
    +					$this->user_validation = $vuser;
    +				}
    +
    +				if ($obj->fk_user_cloture)
    +				{
    +					$cluser = new User($this->db);
    +					$cluser->fetch($obj->fk_user_cloture);
    +					$this->user_cloture   = $cluser;
    +				}
    +
    +				$this->date_creation     = $this->db->jdate($obj->datec);
    +				$this->date_modification = $this->db->jdate($obj->datem);
    +				$this->date_validation   = $this->db->jdate($obj->datev);
    +			}
    +
    +			$this->db->free($result);
    +		}
    +		else
    +		{
    +			dol_print_error($this->db);
    +		}
    +	}
    +
    +	/**
    +	 * Initialise object with example values
    +	 * Id must be 0 if object instance is a specimen
    +	 *
    +	 * @return void
    +	 */
    +	public function initAsSpecimen()
    +	{
    +		$this->initAsSpecimenCommon();
    +	}
    +}
    +
    diff --git a/htdocs/emailcollector/index.html b/htdocs/emailcollector/index.html
    new file mode 100644
    index 00000000000..8b137891791
    --- /dev/null
    +++ b/htdocs/emailcollector/index.html
    @@ -0,0 +1 @@
    +
    diff --git a/htdocs/emailcollector/lib/emailcollector.lib.php b/htdocs/emailcollector/lib/emailcollector.lib.php
    new file mode 100644
    index 00000000000..e7cc3bcb3a0
    --- /dev/null
    +++ b/htdocs/emailcollector/lib/emailcollector.lib.php
    @@ -0,0 +1,85 @@
    +<?php
    +/* Copyright (C) ---Put here your own copyright and developer email---
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    	emailcollector/lib/emailcollector.lib.php
    + * \ingroup 	emailcollector
    + * \brief   	Library files with common functions for EmailCollector
    + */
    +
    +
    +/**
    + * Prepare array of tabs for EmailCollector
    + *
    + * @param	EmailCollector	$object		EmailCollector
    + * @return 	array					Array of tabs
    + */
    +function emailcollectorPrepareHead($object)
    +{
    +	global $db, $langs, $conf;
    +
    +	$langs->load("emailcollector@emailcollector");
    +
    +	$h = 0;
    +	$head = array();
    +
    +	$head[$h][0] = dol_buildpath("/admin/emailcollector_card.php", 1).'?id='.$object->id;
    +	$head[$h][1] = $langs->trans("Card");
    +	$head[$h][2] = 'card';
    +	$h++;
    +
    +	/*if (isset($object->fields['note_public']) || isset($object->fields['note_private']))
    +	{
    +		$nbNote = 0;
    +		if (!empty($object->note_private)) $nbNote++;
    +		if (!empty($object->note_public)) $nbNote++;
    +		$head[$h][0] = dol_buildpath('/emailcollector/emailcollector_note.php', 1).'?id='.$object->id;
    +		$head[$h][1] = $langs->trans('Notes');
    +		if ($nbNote > 0) $head[$h][1].= ' <span class="badge">'.$nbNote.'</span>';
    +		$head[$h][2] = 'note';
    +		$h++;
    +	}*/
    +
    +	/*require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +	require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php';
    +	$upload_dir = $conf->emailcollector->dir_output . "/emailcollector/" . dol_sanitizeFileName($object->ref);
    +	$nbFiles = count(dol_dir_list($upload_dir,'files',0,'','(\.meta|_preview.*\.png)$'));
    +	$nbLinks=Link::count($db, $object->element, $object->id);
    +	$head[$h][0] = dol_buildpath("/emailcollector/emailcollector_document.php", 1).'?id='.$object->id;
    +	$head[$h][1] = $langs->trans('Documents');
    +	if (($nbFiles+$nbLinks) > 0) $head[$h][1].= ' <span class="badge">'.($nbFiles+$nbLinks).'</span>';
    +	$head[$h][2] = 'document';
    +	$h++;
    +
    +	$head[$h][0] = dol_buildpath("/emailcollector/emailcollector_agenda.php", 1).'?id='.$object->id;
    +	$head[$h][1] = $langs->trans("Events");
    +	$head[$h][2] = 'agenda';
    +	$h++;
    +	*/
    +
    +	// Show more tabs from modules
    +	// Entries must be declared in modules descriptor with line
    +	//$this->tabs = array(
    +	//	'entity:+tabname:Title:@emailcollector:/emailcollector/mypage.php?id=__ID__'
    +	//); // to add new tab
    +	//$this->tabs = array(
    +	//	'entity:-tabname:Title:@emailcollector:/emailcollector/mypage.php?id=__ID__'
    +	//); // to remove a tab
    +	complete_head_from_modules($conf, $langs, $object, $head, $h, 'emailcollector');
    +
    +	return $head;
    +}
    diff --git a/htdocs/emailcollector/modulebuilder.txt b/htdocs/emailcollector/modulebuilder.txt
    new file mode 100644
    index 00000000000..24ea0d6eac5
    --- /dev/null
    +++ b/htdocs/emailcollector/modulebuilder.txt
    @@ -0,0 +1,3 @@
    +# DO NOT DELETE THIS FILE MANUALLY
    +# File to flag module built using official module template.
    +# When this file is present into a module directory, you can edit it with the module builder tool. Use ModuleBuilder if you want to delete module. 
    \ No newline at end of file
    diff --git a/htdocs/expedition/card.php b/htdocs/expedition/card.php
    index 0f45ca61804..f92660a0110 100644
    --- a/htdocs/expedition/card.php
    +++ b/htdocs/expedition/card.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2008	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2016	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Simon TOSSER			<simon@kornog-computing.com>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2017	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
      * Copyright (C) 2013       Marcos García           <marcosgdf@gmail.com>
    @@ -11,6 +11,7 @@
      * Copyright (C) 2015		Claudio Aschieri		<c.aschieri@19.coop>
      * Copyright (C) 2016-2018	Ferran Marcet			<fmarcet@2byte.es>
      * Copyright (C) 2016		Yasser Carreón			<yacasia@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -276,7 +277,7 @@ if (empty($reshook))
     			            // We try to set an amount
         			        // Case we dont use the list of available qty for each warehouse/lot
         			        // GUI does not allow this yet
    -    			        setEventMessage('StockIsRequiredToChooseWhichLotToUse', 'errors');
    +    			        setEventMessages($langs->trans("StockIsRequiredToChooseWhichLotToUse"), null, 'errors');
     			        }
     			    }
     			}
    @@ -315,7 +316,6 @@ if (empty($reshook))
     					unset($_POST["options_" . $key]);
     				}
     			}
    -
     	    }
     
     	    //var_dump($batch_line[2]);
    @@ -858,7 +858,6 @@ if (empty($reshook))
     	$mode='emailfromshipment';
     	$trackid='shi'.$object->id;
     	include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';
    -
     }
     
     
    @@ -974,7 +973,7 @@ if ($action == 'create')
                 print '<td colspan="3">';
                 //print dol_print_date($object->date_livraison,"day");	// date_livraison come from order and will be stored into date_delivery planed.
                 $date_delivery = ($date_delivery?$date_delivery:$object->date_livraison); // $date_delivery comes from GETPOST
    -            print $form->select_date($date_delivery?$date_delivery:-1,'date_delivery',1,1,1);
    +            print $form->selectDate($date_delivery?$date_delivery:-1, 'date_delivery', 1, 1, 1);
                 print "</td>\n";
                 print '</tr>';
     
    @@ -1420,7 +1419,6 @@ if ($action == 'create')
     
     										print '<!-- Show details of stock -->';
     										print '('.$stock.')';
    -
     									}
     									else
     									{
    @@ -1521,7 +1519,6 @@ if ($action == 'create')
     								}
     							}
     						}
    -
     					}
     					if ($subj == 0) // Line not shown yet, we show it
     					{
    @@ -1668,21 +1665,18 @@ else if ($id || $ref)
     			}
     
     			$formconfirm=$form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans('ValidateSending'),$text,'confirm_valid','',0,1);
    -
     		}
     		// Confirm cancelation
     		if ($action == 'annuler')
     		{
     			$formconfirm=$form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans('CancelSending'),$langs->trans("ConfirmCancelSending",$object->ref),'confirm_cancel','',0,1);
    -
     		}
     
    -		if (! $formconfirm) {
    -		    $parameters = array();
    -		    $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -		    if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -		    elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -		}
    +		// Call Hook formConfirm
    +		$parameters = array();
    +		$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +		if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +		elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     		// Print form confirm
     		print $formconfirm;
    @@ -1799,7 +1793,7 @@ else if ($id || $ref)
     			print '<form name="setdate_livraison" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">';
     			print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     			print '<input type="hidden" name="action" value="setdate_livraison">';
    -			print $form->select_date($object->date_delivery?$object->date_delivery:-1,'liv_',1,1,'',"setdate_livraison",1,0,1);
    +			print $form->selectDate($object->date_delivery?$object->date_delivery:-1, 'liv_', 1, 1, '', "setdate_livraison", 1, 0);
     			print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">';
     			print '</form>';
     		}
    @@ -1826,7 +1820,6 @@ else if ($id || $ref)
     			print ' <input class="button" name="modify" value="'.$langs->trans("Modify").'" type="submit">';
     			print ' <input class="button" name="cancel" value="'.$langs->trans("Cancel").'" type="submit">';
     			print '</form>';
    -
     		}
     		else
     		{
    @@ -1864,7 +1857,6 @@ else if ($id || $ref)
     			print ' <input class="button" name="modify" value="'.$langs->trans("Modify").'" type="submit">';
     			print ' <input class="button" name="cancel" value="'.$langs->trans("Cancel").'" type="submit">';
     			print '</form>';
    -
     		}
     		else
     		{
    @@ -2011,7 +2003,7 @@ else if ($id || $ref)
             print '<div class="div-table-responsive-no-min">';
     		print '<table class="noborder" width="100%">';
     		print '<tr class="liste_titre">';
    -		// #
    +		// Adds a line numbering column
     		if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER))
     		{
     			print '<td width="5" align="center">&nbsp;</td>';
    @@ -2143,7 +2135,7 @@ else if ($id || $ref)
     		    print '<!-- origin line id = '.$lines[$i]->origin_line_id.' -->'; // id of order line
     			print '<tr class="oddeven">';
     
    -			// #
    +			// Adds a line numbering column
     			if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER))
     			{
     				print '<td align="center">'.($i+1).'</td>';
    @@ -2536,7 +2528,6 @@ else if ($id || $ref)
     			{
     				print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delete">'.$langs->trans("Delete").'</a>';
     			}
    -
     		}
     
     		print '</div>';
    @@ -2596,7 +2587,6 @@ else if ($id || $ref)
     	include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expedition/class/api_shipments.class.php b/htdocs/expedition/class/api_shipments.class.php
    index 844a6c95305..834c0bf2bda 100644
    --- a/htdocs/expedition/class/api_shipments.class.php
    +++ b/htdocs/expedition/class/api_shipments.class.php
    @@ -35,7 +35,7 @@ class Shipments extends DolibarrApi
         static $FIELDS = array(
             'socid',
         	'origin_id',
    -    	'origin_type'
    +    	'origin_type',
         );
     
         /**
    @@ -99,7 +99,8 @@ class Shipments extends DolibarrApi
          *
     	 * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -192,13 +193,13 @@ class Shipments extends DolibarrApi
             foreach($request_data as $field => $value) {
                 $this->shipment->$field = $value;
             }
    -        /*if (isset($request_data["lines"])) {
    +        if (isset($request_data["lines"])) {
               $lines = array();
               foreach ($request_data["lines"] as $line) {
                 array_push($lines, (object) $line);
               }
               $this->shipment->lines = $lines;
    -        }*/
    +        }
     
             if ($this->shipment->create(DolibarrApiAccess::$user) < 0) {
                 throw new RestException(500, "Error creating shipment", array_merge(array($this->shipment->error), $this->shipment->errors));
    @@ -217,7 +218,8 @@ class Shipments extends DolibarrApi
          * @return int
          */
         /*
    -    function getLines($id) {
    +    function getLines($id)
    +    {
           if(! DolibarrApiAccess::$user->rights->expedition->lire) {
     		  	throw new RestException(401);
     		  }
    @@ -250,7 +252,8 @@ class Shipments extends DolibarrApi
          * @return int
          */
         /*
    -    function postLine($id, $request_data = null) {
    +    function postLine($id, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->expedition->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -312,7 +315,8 @@ class Shipments extends DolibarrApi
          * @return object
          */
         /*
    -    function putLine($id, $lineid, $request_data = null) {
    +    function putLine($id, $lineid, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->expedition->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -372,7 +376,8 @@ class Shipments extends DolibarrApi
          * @throws 401
          * @throws 404
          */
    -    function deleteLine($id, $lineid) {
    +    function deleteLine($id, $lineid)
    +    {
         	if(! DolibarrApiAccess::$user->rights->expedition->creer) {
         		throw new RestException(401);
         	}
    @@ -407,7 +412,8 @@ class Shipments extends DolibarrApi
          *
          * @return int
          */
    -    function put($id, $request_data = null) {
    +    function put($id, $request_data = null)
    +    {
           if (! DolibarrApiAccess::$user->rights->expedition->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -466,7 +472,6 @@ class Shipments extends DolibarrApi
                     'message' => 'Shipment deleted'
                 )
             );
    -
         }
     
         /**
    @@ -537,7 +542,8 @@ class Shipments extends DolibarrApi
          * @throws 404
          * @throws 405
          */
    -/*    function setinvoiced($id) {
    +/*    function setinvoiced($id)
    +    {
     
             if(! DolibarrApiAccess::$user->rights->expedition->creer) {
                     throw new RestException(401);
    @@ -573,7 +579,8 @@ class Shipments extends DolibarrApi
          * @throws 405
          */
         /*
    -    function createShipmentFromOrder($orderid) {
    +    function createShipmentFromOrder($orderid)
    +    {
     
             require_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php';
     
    @@ -608,7 +615,8 @@ class Shipments extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    @@ -653,7 +661,6 @@ class Shipments extends DolibarrApi
                 if (!isset($data[$field]))
                     throw new RestException(400, "$field field missing");
                 $shipment[$field] = $data[$field];
    -
             }
             return $shipment;
         }
    diff --git a/htdocs/expedition/class/expedition.class.php b/htdocs/expedition/class/expedition.class.php
    index 5848c1b9d9d..bfc356d945b 100644
    --- a/htdocs/expedition/class/expedition.class.php
    +++ b/htdocs/expedition/class/expedition.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2003-2008	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2007		Franky Van Liedekerke	<franky.van.liedekerke@telenet.be>
      * Copyright (C) 2006-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2011-2017	Juanjo Menent			<jmenent@2byte.es>
    @@ -10,7 +10,8 @@
      * Copyright (C) 2014-2017  Francis Appels          <francis.appels@yahoo.com>
      * Copyright (C) 2015       Claudio Aschieri        <c.aschieri@19.coop>
      * Copyright (C) 2016		Ferran Marcet			<fmarcet@2byte.es>
    - * Copyright (C) 2018      Nicolas ZABOURI			<info@inovea-conseil.com>
    + * Copyright (C) 2018       Nicolas ZABOURI			<info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,60 +45,123 @@ if (! empty($conf->productbatch->enabled)) require_once DOL_DOCUMENT_ROOT.'/expe
      */
     class Expedition extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element="shipping";
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element="fk_expedition";
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element="expedition";
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line="expeditiondet";
    -	public $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'sending';
     
    -	var $socid;
    -	var $ref_customer;
    -	var $ref_int;
    -	var $brouillon;
    -	var $entrepot_id;
    -	var $lines=array();
    -	var $tracking_number;
    -	var $tracking_url;
    -	var $billed;
    -	var $model_pdf;
    +	public $socid;
     
    -	var $trueWeight;
    -	var $weight_units;
    -	var $trueWidth;
    -	var $width_units;
    -	var $trueHeight;
    -	var $height_units;
    -	var $trueDepth;
    -	var $depth_units;
    +	/**
    +	 * @var string Customer ref
    +	 */
    +	public $ref_customer;
    +
    +	/**
    +	 * @var string internal ref
    +	 */
    +	public $ref_int;
    +
    +	public $brouillon;
    +
    +	/**
    +	 * @var int warehouse id
    +	 */
    +	public $entrepot_id;
    +	public $lines=array();
    +
    +	/**
    +	 * @var string Tracking number
    +	 */
    +	public $tracking_number;
    +
    +	/**
    +	 * @var string Tracking url
    +	 */
    +	public $tracking_url;
    +	public $billed;
    +
    +	/**
    +	 * @var string name of pdf model
    +	 */
    +	public $model_pdf;
    +
    +	public $trueWeight;
    +	public $weight_units;
    +	public $trueWidth;
    +	public $width_units;
    +	public $trueHeight;
    +	public $height_units;
    +	public $trueDepth;
    +	public $depth_units;
     	// A denormalized value
    -	var $trueSize;
    +	public $trueSize;
    +
    +	public $date_delivery;		// Date delivery planed
     
    -	var $date_delivery;		// Date delivery planed
     	/**
     	 * @deprecated
     	 * @see date_shipping
     	 */
    -	var $date;
    +	public $date;
    +
     	/**
     	 * @deprecated
     	 * @see date_shipping
     	 */
    -	var $date_expedition;
    +	public $date_expedition;
    +
     	/**
     	 * Effective delivery date
     	 * @var int
     	 */
     	public $date_shipping;
    -	var $date_creation;
    -	var $date_valid;
     
    -	var $meths;
    -	var $listmeths;			// List of carriers
    +	public $date_creation;
    +	public $date_valid;
     
    +	public $meths;
    +	public $listmeths;			// List of carriers
     
    +    /**
    +	 * Draft status
    +	 */
     	const STATUS_DRAFT = 0;
    +
    +	/**
    +	 * Validated status
    +	 */
     	const STATUS_VALIDATED = 1;
    +
    +	/**
    +	 * Closed status
    +	 */
     	const STATUS_CLOSED = 2;
     
     
    @@ -344,7 +408,6 @@ class Expedition extends CommonObject
     						$this->db->rollback();
     						return -1*$error;
     					}
    -
     				}
     				else
     				{
    @@ -371,6 +434,7 @@ class Expedition extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Create a expedition line
     	 *
    @@ -382,6 +446,7 @@ class Expedition extends CommonObject
     	 */
     	function create_line($entrepot_id, $origin_line_id, $qty,$array_options=0)
     	{
    +        //phpcs:enable
     		$expeditionline = new ExpeditionLigne($this->db);
     		$expeditionline->fk_expedition = $this->id;
     		$expeditionline->entrepot_id = $entrepot_id;
    @@ -397,6 +462,7 @@ class Expedition extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Create the detail (eat-by date) of the expedition line
     	 *
    @@ -406,6 +472,7 @@ class Expedition extends CommonObject
     	 */
     	function create_line_batch($line_ext,$array_options=0)
     	{
    +        // phpcs:enable
     		$error = 0;
     		$stockLocationQty = array(); // associated array with batch qty in stock location
     
    @@ -467,10 +534,12 @@ class Expedition extends CommonObject
     		$sql.= ", e.note_private, e.note_public";
     		$sql.= ', e.fk_incoterms, e.location_incoterms';
     		$sql.= ', i.libelle as libelle_incoterms';
    +		$sql.= ', s.libelle as shipping_method';
     		$sql.= ", el.fk_source as origin_id, el.sourcetype as origin";
     		$sql.= " FROM ".MAIN_DB_PREFIX."expedition as e";
     		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."element_element as el ON el.fk_target = e.rowid AND el.targettype = '".$this->db->escape($this->element)."'";
     		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_incoterms as i ON e.fk_incoterms = i.rowid';
    +		$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_shipment_mode as s ON e.fk_shipping_method = s.rowid';
     		$sql.= " WHERE e.entity IN (".getEntity('expedition').")";
     		if ($id)   	  $sql.= " AND e.rowid=".$id;
     		if ($ref)     $sql.= " AND e.ref='".$this->db->escape($ref)."'";
    @@ -488,9 +557,9 @@ class Expedition extends CommonObject
     				$this->id                   = $obj->rowid;
     				$this->ref                  = $obj->ref;
     				$this->socid                = $obj->socid;
    -				$this->ref_customer			= $obj->ref_customer;
    -				$this->ref_ext				= $obj->ref_ext;
    -				$this->ref_int				= $obj->ref_int;
    +				$this->ref_customer	    = $obj->ref_customer;
    +				$this->ref_ext		    = $obj->ref_ext;
    +				$this->ref_int		    = $obj->ref_int;
     				$this->statut               = $obj->fk_statut;
     				$this->user_author_id       = $obj->fk_user_author;
     				$this->date_creation        = $this->db->jdate($obj->date_creation);
    @@ -500,12 +569,13 @@ class Expedition extends CommonObject
     				$this->date_delivery        = $this->db->jdate($obj->date_delivery);	// Date planed
     				$this->fk_delivery_address  = $obj->fk_address;
     				$this->modelpdf             = $obj->model_pdf;
    -				$this->shipping_method_id	= $obj->fk_shipping_method;
    +				$this->shipping_method_id   = $obj->fk_shipping_method;
    +				$this->shipping_method	    = $obj->shipping_method;
     				$this->tracking_number      = $obj->tracking_number;
     				$this->origin               = ($obj->origin?$obj->origin:'commande'); // For compatibility
     				$this->origin_id            = $obj->origin_id;
     				$this->billed               = $obj->billed;
    -				$this->fk_project			= $obj->fk_projet;
    +				$this->fk_project	    = $obj->fk_projet;
     
     				$this->trueWeight           = $obj->weight;
     				$this->weight_units         = $obj->weight_units;
    @@ -521,13 +591,13 @@ class Expedition extends CommonObject
     				$this->note_private         = $obj->note_private;
     
     				// A denormalized value
    -				$this->trueSize           	= $obj->size."x".$obj->width."x".$obj->height;
    +				$this->trueSize             = $obj->size."x".$obj->width."x".$obj->height;
     				$this->size_units           = $obj->size_units;
     
     				//Incoterms
    -				$this->fk_incoterms = $obj->fk_incoterms;
    -				$this->location_incoterms = $obj->location_incoterms;
    -				$this->libelle_incoterms = $obj->libelle_incoterms;
    +				$this->fk_incoterms         = $obj->fk_incoterms;
    +				$this->location_incoterms   = $obj->location_incoterms;
    +				$this->libelle_incoterms    = $obj->libelle_incoterms;
     
     				$this->db->free($result);
     
    @@ -714,7 +784,6 @@ class Expedition extends CommonObject
     				$this->error=$this->db->error();
     				return -2;
     			}
    -
     		}
     
     		// Change status of order to "shipment in process"
    @@ -793,6 +862,7 @@ class Expedition extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a delivery receipt from a shipment
     	 *
    @@ -801,6 +871,7 @@ class Expedition extends CommonObject
     	 */
     	function create_delivery($user)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if ($conf->livraison_bon->enabled)
    @@ -900,6 +971,7 @@ class Expedition extends CommonObject
     		$this->lines[$num] = $line;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Add a shipment line with batch record
     	 *
    @@ -909,6 +981,7 @@ class Expedition extends CommonObject
     	 */
     	function addline_batch($dbatch,$array_options=0)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$num = count($this->lines);
    @@ -1113,7 +1186,7 @@ class Expedition extends CommonObject
     		// Stock control
     		if (! $error && $conf->stock->enabled && $conf->global->STOCK_CALCULATE_ON_SHIPMENT && $this->statut > 0)
     		{
    -			require_once(DOL_DOCUMENT_ROOT."/product/stock/class/mouvementstock.class.php");
    +			require_once DOL_DOCUMENT_ROOT."/product/stock/class/mouvementstock.class.php";
     
     			$langs->load("agenda");
     
    @@ -1285,9 +1358,9 @@ class Expedition extends CommonObject
     			$this->db->rollback();
     			return -1;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Load lines
     	 *
    @@ -1295,6 +1368,7 @@ class Expedition extends CommonObject
     	 */
     	function fetch_lines()
     	{
    +        // phpcs:enable
     		global $conf, $mysoc;
     		// TODO: recuperer les champs du document associe a part
     
    @@ -1574,6 +1648,7 @@ class Expedition extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return label of a status
     	 *
    @@ -1583,37 +1658,38 @@ class Expedition extends CommonObject
     	 */
     	function LibStatut($statut,$mode)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode==0)
     		{
     			if ($statut==0) return $langs->trans($this->statuts[$statut]);
    -			if ($statut==1) return $langs->trans($this->statuts[$statut]);
    -			if ($statut==2) return $langs->trans($this->statuts[$statut]);
    +			elseif ($statut==1) return $langs->trans($this->statuts[$statut]);
    +			elseif ($statut==2) return $langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode==1)
    +		elseif ($mode==1)
     		{
     			if ($statut==0) return $langs->trans($this->statutshorts[$statut]);
    -			if ($statut==1) return $langs->trans($this->statutshorts[$statut]);
    -			if ($statut==2) return $langs->trans($this->statutshorts[$statut]);
    +			elseif ($statut==1) return $langs->trans($this->statutshorts[$statut]);
    +			elseif ($statut==2) return $langs->trans($this->statutshorts[$statut]);
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0');
    -			if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4');
    -			if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut6');
    +			elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4');
    +			elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut6');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut==0) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut0');
    -			if ($statut==1) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut4');
    -			if ($statut==2) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut6');
    +			elseif ($statut==1) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut4');
    +			elseif ($statut==2) return $langs->trans($this->statutshorts[$statut]).' '.img_picto($langs->trans($this->statuts[$statut]),'statut6');
     		}
     	}
     
    @@ -1694,9 +1770,9 @@ class Expedition extends CommonObject
     			$this->lines[]=$line;
     			$xnbp++;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set the planned delivery date
     	 *
    @@ -1706,6 +1782,7 @@ class Expedition extends CommonObject
     	 */
     	function set_date_livraison($user, $date_livraison)
     	{
    +        // phpcs:enable
     		if ($user->rights->expedition->creer)
     		{
     			$sql = "UPDATE ".MAIN_DB_PREFIX."expedition";
    @@ -1731,6 +1808,7 @@ class Expedition extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Fetch deliveries method and return an array. Load array this->meths(rowid=>label).
     	 *
    @@ -1738,6 +1816,7 @@ class Expedition extends CommonObject
     	 */
     	function fetch_delivery_methods()
     	{
    +        // phpcs:enable
     		global $langs;
     		$this->meths = array();
     
    @@ -1757,6 +1836,7 @@ class Expedition extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Fetch all deliveries method and return an array. Load array this->listmeths.
     	 *
    @@ -1765,6 +1845,7 @@ class Expedition extends CommonObject
     	 */
     	function list_delivery_methods($id='')
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$this->listmeths = array();
    @@ -1791,6 +1872,7 @@ class Expedition extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update/create delivery method.
     	 *
    @@ -1800,6 +1882,7 @@ class Expedition extends CommonObject
     	 */
     	function update_delivery_method($id='')
     	{
    +        // phpcs:enable
     		if ($id=='')
     		{
     			$sql = "INSERT INTO ".MAIN_DB_PREFIX."c_shipment_mode (code, libelle, description, tracking)";
    @@ -1819,6 +1902,7 @@ class Expedition extends CommonObject
     		if ($resql < 0) dol_print_error($this->db,'');
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Activate delivery method.
     	 *
    @@ -1828,13 +1912,14 @@ class Expedition extends CommonObject
     	 */
     	function activ_delivery_method($id)
     	{
    +        // phpcs:enable
     		$sql = 'UPDATE '.MAIN_DB_PREFIX.'c_shipment_mode SET active=1';
     		$sql.= ' WHERE rowid='.$id;
     
     		$resql = $this->db->query($sql);
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  DesActivate delivery method.
     	 *
    @@ -1844,14 +1929,15 @@ class Expedition extends CommonObject
     	 */
     	function disable_delivery_method($id)
     	{
    +        // phpcs:enable
     		$sql = 'UPDATE '.MAIN_DB_PREFIX.'c_shipment_mode SET active=0';
     		$sql.= ' WHERE rowid='.$id;
     
     		$resql = $this->db->query($sql);
    -
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Forge an set tracking url
     	 *
    @@ -1860,6 +1946,7 @@ class Expedition extends CommonObject
     	 */
     	function GetUrlTrackingStatus($value='')
     	{
    +        // phpcs:enable
     		if (! empty($this->shipping_method_id))
     		{
     			$sql = "SELECT em.code, em.tracking";
    @@ -2037,6 +2124,7 @@ class Expedition extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Classify the shipping as invoiced (used when WORKFLOW_BILL_ON_SHIPMENT is on)
     	 *
    @@ -2044,6 +2132,7 @@ class Expedition extends CommonObject
     	 */
     	function set_billed()
     	{
    +        // phpcs:enable
     		global $user;
     		$error=0;
     
    @@ -2063,7 +2152,6 @@ class Expedition extends CommonObject
     			if ($result < 0) {
     				$error++;
     			}
    -
     		} else {
     			$error++;
     			$this->errors[]=$this->db->lasterror;
    @@ -2190,7 +2278,6 @@ class Expedition extends CommonObject
     					$error++;
     				}
        			}
    -
     		} else {
     			$error++;
     			$this->errors[]=$this->db->lasterror();
    @@ -2216,7 +2303,7 @@ class Expedition extends CommonObject
     	 *  @param      int			$hidedetails    Hide details of lines
     	 *  @param      int			$hidedesc       Hide description
     	 *  @param      int			$hideref        Hide ref
    -         *  @param   null|array  $moreparams     Array to provide more information
    +     *  @param      null|array  $moreparams     Array to provide more information
     	 *  @return     int         				0 if KO, 1 if OK
     	 */
     	public function generateDocument($modele, $outputlangs,$hidedetails=0, $hidedesc=0, $hideref=0,$moreparams=null)
    @@ -2267,64 +2354,151 @@ class Expedition extends CommonObject
      */
     class ExpeditionLigne extends CommonObjectLine
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='expeditiondet';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='expeditiondet';
     
    -	public $fk_origin_line;
    -
    -	/**
    -	 * Id of shipment
    -	 * @var int
    -	 */
    -	public $fk_expedition;
    -
    -	var $db;
    -
    -	// From llx_expeditiondet
    -	var $qty;
    -	var $qty_shipped;
    -	var $fk_product;
    -	var $detail_batch;
    -	/**
    -	 * Id of warehouse
    -	 * @var int
    -	 */
    -	public $entrepot_id;
    -
    -
    -	// From llx_commandedet or llx_propaldet
    -	var $qty_asked;
    -	public $product_ref;
    -	public $product_label;
    -	public $product_desc;
    -
    -
    -	// Invoicing
    -	var $remise_percent;
    -	var $total_ht;			// Total net of tax
    -	var $total_ttc;			// Total with tax
    -	var $total_tva;			// Total VAT
    -	var $total_localtax1;   // Total Local tax 1
    -	var $total_localtax2;   // Total Local tax 2
    -
    -
    -
    -	// Deprecated
     	/**
     	 * @deprecated
     	 * @see fk_origin_line
     	 */
    -	var $origin_line_id;
    +	public $origin_line_id;
    +
     	/**
    -	 * @deprecated
    -	 * @see product_ref
    +     * @var int ID
    +     */
    +	public $fk_origin_line;
    +
    +	/**
    +	 * @var int Id of shipment
     	 */
    -	var $ref;
    +	public $fk_expedition;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +     * @var float qty asked From llx_expeditiondet
    +     */
    +    public $qty;
    +
    +    /**
    +     * @var float qty shipped
    +     */
    +    public $qty_shipped;
    +
    +    /**
    +     * @var int Id of product
    +     */
    +    public $fk_product;
    +    public $detail_batch;
    +
    +    /**
    +     * @var int Id of warehouse
    +     */
    +	public $entrepot_id;
    +
    +
    +    /**
    +     * @var float qty asked From llx_commandedet or llx_propaldet
    +     */
    +	public $qty_asked;
    +
    +    /**
    +     * @deprecated
    +     * @see product_ref
    +     */
    +    public $ref;
    +
    +	/**
    +	 * @var string product ref
    +	 */
    +	public $product_ref;
    +
     	/**
     	 * @deprecated
     	 * @see product_label
     	 */
    -	var $libelle;
    +	public $libelle;
    +
    +    /**
    +     * @var string product label
    +     */
    +	public $product_label;
    +
    +    /**
    +     * @var string product description
    +     * @deprecated
    +     * @see product_desc
    +     */
    +    public $desc;
    +
    +    /**
    +     * @var string product description
    +     */
    +	public $product_desc;
    +
    +    /**
    +     * @var float weight
    +     */
    +    public $weight;
    +    public $weight_units;
    +
    +    /**
    +     * @var float weight
    +     */
    +    public $length;
    +    public $length_units;
    +
    +    /**
    +     * @var float weight
    +     */
    +    public $surface;
    +    public $surface_units;
    +
    +    /**
    +     * @var float weight
    +     */
    +    public $volume;
    +    public $volume_units;
    +
    +	// Invoicing
    +	public $remise_percent;
    +    public $tva_tx;
    +
    +    /**
    +     * @var float total without tax
    +     */
    +    public $total_ht;
    +
    +    /**
    +     * @var float total with tax
    +     */
    +    public $total_ttc;
    +
    +    /**
    +     * @var float total vat
    +     */
    +    public $total_tva;
    +
    +    /**
    +     * @var float total localtax 1
    +     */
    +    public $total_localtax1;
    +
    +    /**
    +     * @var float total localtax 2
    +     */
    +    public $total_localtax2;
    +
     
         /**
          *	Constructor
    @@ -2375,7 +2549,7 @@ class ExpeditionLigne extends CommonObjectLine
     	 *
     	 *	@param      User	$user			User that modify
     	 *	@param      int		$notrigger		1 = disable triggers
    -	 *	@return		int						<0 if KO, line id >0 if OK
    +	 *	@return     int						<0 if KO, line id >0 if OK
     	 */
     	function insert($user=null, $notrigger=0)
     	{
    @@ -2728,4 +2902,3 @@ class ExpeditionLigne extends CommonObjectLine
     		}
     	}
     }
    -
    diff --git a/htdocs/expedition/class/expeditionbatch.class.php b/htdocs/expedition/class/expeditionbatch.class.php
    index 520f760aee0..850e4c0dda3 100644
    --- a/htdocs/expedition/class/expeditionbatch.class.php
    +++ b/htdocs/expedition/class/expeditionbatch.class.php
    @@ -28,7 +28,11 @@
      */
     class ExpeditionLineBatch extends CommonObject
     {
    -	var $element='expeditionlignebatch';			//!< Id that identify managed objects
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='expeditionlignebatch';
    +
     	private static $_table_element='expeditiondet_batch';		//!< Name of table without prefix where object is stored
     
     	var $sellby;
    @@ -48,7 +52,6 @@ class ExpeditionLineBatch extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     	/**
    @@ -234,5 +237,4 @@ class ExpeditionLineBatch extends CommonObject
     			return -1;
     		}
     	}
    -
     }
    diff --git a/htdocs/expedition/class/expeditionstats.class.php b/htdocs/expedition/class/expeditionstats.class.php
    index 5303d6d8b7b..26f7bda7a2a 100644
    --- a/htdocs/expedition/class/expeditionstats.class.php
    +++ b/htdocs/expedition/class/expeditionstats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -34,6 +34,9 @@ include_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
      */
     class ExpeditionStats extends Stats
     {
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element;
     
     	var $socid;
    diff --git a/htdocs/expedition/contact.php b/htdocs/expedition/contact.php
    index 3f557059600..f9ea697e50d 100644
    --- a/htdocs/expedition/contact.php
    +++ b/htdocs/expedition/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Patrick Rouillon     <patrick@rouillon.net>
      * Copyright (C) 2005-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -265,9 +265,8 @@ if ($id > 0 || ! empty($ref))
     	    $res=@include dol_buildpath($reldir.'/contacts.tpl.php');
     	    if ($res) break;
     	}
    -
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expedition/document.php b/htdocs/expedition/document.php
    index 4f9616df5ed..21f357b667e 100644
    --- a/htdocs/expedition/document.php
    +++ b/htdocs/expedition/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -96,7 +96,7 @@ if ($id > 0 || ! empty($ref)){
     		dol_fiche_head($head, 'documents', $langs->trans("Shipment"), -1, 'sending');
     	
     
    -		// Construit liste des fichiers
    +		// Build file list
     		$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     		$totalsize=0;
     		foreach($filearray as $key => $file){
    @@ -185,7 +185,6 @@ else{
     	exit;
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expedition/index.php b/htdocs/expedition/index.php
    index 042d107b58e..b34b149026c 100644
    --- a/htdocs/expedition/index.php
    +++ b/htdocs/expedition/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -291,6 +291,6 @@ else dol_print_error($db);
     
     print '</div></div></div>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/expedition/list.php b/htdocs/expedition/list.php
    index 14f9eb41f44..b3fbc35bf26 100644
    --- a/htdocs/expedition/list.php
    +++ b/htdocs/expedition/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016-2018 Ferran Marcet        <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -69,13 +69,15 @@ $pagenext = $page + 1;
     
     $viewstatut=GETPOST('viewstatut');
     
    +$object = new Expedition($db);
    +
     // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
     $hookmanager->initHooks(array('shipmentlist'));
     $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('expedition');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -160,7 +162,6 @@ if (empty($reshook))
     		setEventMessages($langs->trans('TooManyRecordForMassAction',$maxformassaction), null, 'errors');
     		$error++;
     	}
    -
     }
     
     
    @@ -632,5 +633,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/expedition/note.php b/htdocs/expedition/note.php
    index fafaf10fe1f..01aa08f34af 100644
    --- a/htdocs/expedition/note.php
    +++ b/htdocs/expedition/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013 	   Florian Henry        <florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -152,7 +152,6 @@ if ($id > 0 || ! empty($ref))
     	dol_fiche_end();
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expedition/shipment.php b/htdocs/expedition/shipment.php
    index cb058e44598..50307a56f38 100644
    --- a/htdocs/expedition/shipment.php
    +++ b/htdocs/expedition/shipment.php
    @@ -1,8 +1,10 @@
     <?php
     /* Copyright (C) 2003-2006	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012-2015	Juanjo Menent			<jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
    + * Copyright (C) 2018       Philippe Grand          <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -213,7 +215,6 @@ if (empty($reshook))
         }
     
         include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
    -
     }
     
     /*
    @@ -255,15 +256,13 @@ if ($id > 0 || ! empty($ref))
     		if ($action == 'cloture')
     		{
     			$formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$id,$langs->trans("CloseShipment"),$langs->trans("ConfirmCloseShipment"),"confirm_cloture");
    -
     		}
     
    -		if (! $formconfirm) {
    -		    $parameters = array();
    -		    $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -		    if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -		    elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -		}
    +		// Call Hook formConfirm
    +		$parameters = array();
    +		$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +		if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +		elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     		// Print form confirm
     		print $formconfirm;
    @@ -371,7 +370,7 @@ if ($id > 0 || ! empty($ref))
     			print '<form name="setdate_livraison" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">';
     			print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     			print '<input type="hidden" name="action" value="setdatedelivery">';
    -			$form->select_date($object->date_livraison>0?$object->date_livraison:-1,'liv_','','','',"setdatedelivery");
    +			print $form->selectDate($object->date_livraison>0?$object->date_livraison:-1, 'liv_', '', '', '', "setdatedelivery");
     			print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">';
     			print '</form>';
     		}
    @@ -907,7 +906,6 @@ if ($id > 0 || ! empty($ref))
     				print '</div>';
     
     				$somethingshown=1;
    -
     			}
     			else
     			{
    @@ -921,12 +919,11 @@ if ($id > 0 || ! empty($ref))
     	}
     	else
     	{
    -		/* Commande non trouvee */
    -		print "Commande inexistante";
    +		/* Order not found */
    +		setEventMessages($langs->trans("NonExistentOrder"), null, 'errors');
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expedition/stats/index.php b/htdocs/expedition/stats/index.php
    index 651be627b78..e0b750e9797 100644
    --- a/htdocs/expedition/stats/index.php
    +++ b/htdocs/expedition/stats/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -213,7 +213,7 @@ if (! count($arrayyears)) $arrayyears[$nowyear]=$nowyear;
     
     $h=0;
     $head = array();
    -$head[$h][0] = DOL_URL_ROOT . '/commande/stats/index.php?mode='.$mode;
    +$head[$h][0] = DOL_URL_ROOT . '/expedition/stats/index.php?mode='.$mode;
     $head[$h][1] = $langs->trans("ByMonthYear");
     $head[$h][2] = 'byyear';
     $h++;
    @@ -259,6 +259,8 @@ print '<div class="fichecenter"><div class="fichethirdleft">';
     	print '<br><br>';
     //}
     
    +
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -298,6 +300,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    +print '</div>';
     
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
    @@ -358,6 +361,6 @@ print '</table>';
     print '<br>';
     print '<i>'.$langs->trans("StatsOnShipmentsOnlyValidated").'</i>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expedition/stats/month.php b/htdocs/expedition/stats/month.php
    index b7d217217c2..f716e06a5b2 100644
    --- a/htdocs/expedition/stats/month.php
    +++ b/htdocs/expedition/stats/month.php
    @@ -27,6 +27,8 @@ require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php';
     require_once DOL_DOCUMENT_ROOT.'/expedition/class/expeditionstats.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/dolgraph.class.php';
     
    +$year = GETPOST('year', 'int');
    +
     
     /*
      * View
    @@ -39,10 +41,10 @@ $HEIGHT=DolGraph::getDefaultGraphSizeForStats('height');
     
     $mesg = '';
     
    -print load_fiche_titre($langs->trans("StatisticsOfSendings").' '.$_GET["year"], $mesg);
    +print load_fiche_titre($langs->trans("StatisticsOfSendings").' '.$year, $mesg);
     
     $stats = new ExpeditionStats($db);
    -$data = $stats->getNbExpeditionByMonth($_GET["year"]);
    +$data = $stats->getNbExpeditionByMonth($year);
     
     dol_mkdir($conf->expedition->dir_temp);
     
    @@ -71,6 +73,6 @@ print $px->show();
     print '</td></tr>';
     print '</table>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expedition/tpl/linkedobjectblock.tpl.php b/htdocs/expedition/tpl/linkedobjectblock.tpl.php
    index 72abfe2c4d9..ce2b9cf8009 100644
    --- a/htdocs/expedition/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/expedition/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/expensereport/ajax/ajaxprojet.php b/htdocs/expensereport/ajax/ajaxprojet.php
    index bc704f7a4f3..ebb7b2d47ec 100644
    --- a/htdocs/expensereport/ajax/ajaxprojet.php
    +++ b/htdocs/expensereport/ajax/ajaxprojet.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2010      Cyrille de Lambert   <info@auguria.net>
      *
    diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php
    index 141260d36f3..4bc41f6fa47 100644
    --- a/htdocs/expensereport/card.php
    +++ b/htdocs/expensereport/card.php
    @@ -1,9 +1,10 @@
     <?php
    -/* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2015-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
    - * Copyright (C) 2017      Ferran Marcet        <fmarcet@2byte.es>
    +/* Copyright (C) 2003       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2009  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2015-2017  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2017       Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -355,7 +356,10 @@ if (empty($reshook))
         			$filename=array(); $filedir=array(); $mimetype=array();
     
         			// SUBJECT
    -    			$subject = $langs->transnoentities("ExpenseReportWaitingForApproval");
    +    			$societeName = $conf->global->MAIN_INFO_SOCIETE_NOM;
    +    			if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $societeName = $conf->global->MAIN_APPLICATION_TITLE;
    +
    +    			$subject = $societeName." - ".$langs->transnoentities("ExpenseReportWaitingForApproval");
     
         			// CONTENT
         			$link = $urlwithroot.'/expensereport/card.php?id='.$object->id;
    @@ -374,7 +378,7 @@ if (empty($reshook))
         			*/
     
         			// PREPARE SEND
    -    			$mailfile = new CMailFile($subject,$emailTo,$emailFrom,$message,$filedir,$mimetype,$filename);
    +    			$mailfile = new CMailFile($subject, $emailTo, $emailFrom, $message, $filedir, $mimetype, $filename, '', '', 0, -1);
     
         			if ($mailfile)
         			{
    @@ -471,7 +475,10 @@ if (empty($reshook))
         			$filename=array(); $filedir=array(); $mimetype=array();
     
        			    // SUBJECT
    -    			$subject = $langs->transnoentities("ExpenseReportWaitingForReApproval");
    +    			$societeName = $conf->global->MAIN_INFO_SOCIETE_NOM;
    +    			if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $societeName = $conf->global->MAIN_APPLICATION_TITLE;
    +
    +    			$subject = $societeName." - ".$langs->transnoentities("ExpenseReportWaitingForReApproval");
     
         			// CONTENT
         			$link = $urlwithroot.'/expensereport/card.php?id='.$object->id;
    @@ -495,7 +502,7 @@ if (empty($reshook))
     
     
         			// PREPARE SEND
    -    			$mailfile = new CMailFile($subject,$emailTo,$emailFrom,$message,$filedir,$mimetype,$filename);
    +    			$mailfile = new CMailFile($subject, $emailTo, $emailFrom, $message, $filedir, $mimetype, $filename, '', '', 0, -1);
     
         			if ($mailfile)
         			{
    @@ -593,7 +600,10 @@ if (empty($reshook))
         			$filename=array(); $filedir=array(); $mimetype=array();
     
        			    // SUBJECT
    -       			$subject = $langs->transnoentities("ExpenseReportApproved");
    +    			$societeName = $conf->global->MAIN_INFO_SOCIETE_NOM;
    +    			if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $societeName = $conf->global->MAIN_APPLICATION_TITLE;
    +
    +    			$subject = $societeName." - ".$langs->transnoentities("ExpenseReportApproved");
     
            			// CONTENT
            			$link = $urlwithroot.'/expensereport/card.php?id='.$object->id;
    @@ -614,7 +624,7 @@ if (empty($reshook))
         			}
         			*/
     
    -        		$mailfile = new CMailFile($subject,$emailTo,$emailFrom,$message,$filedir,$mimetype,$filename);
    +        		$mailfile = new CMailFile($subject, $emailTo, $emailFrom, $message, $filedir, $mimetype, $filename, '', '', 0, -1);
     
            			if ($mailfile)
            			{
    @@ -712,7 +722,10 @@ if (empty($reshook))
         			$filename=array(); $filedir=array(); $mimetype=array();
     
         		    // SUBJECT
    -       			$subject = $langs->transnoentities("ExpenseReportRefused");
    +    			$societeName = $conf->global->MAIN_INFO_SOCIETE_NOM;
    +    			if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $societeName = $conf->global->MAIN_APPLICATION_TITLE;
    +
    +    			$subject = $societeName." - ".$langs->transnoentities("ExpenseReportRefused");
     
            			// CONTENT
            			$link = $urlwithroot.'/expensereport/card.php?id='.$object->id;
    @@ -734,7 +747,7 @@ if (empty($reshook))
         			*/
     
             		// PREPARE SEND
    -        		$mailfile = new CMailFile($subject,$emailTo,$emailFrom,$message,$filedir,$mimetype,$filename);
    +        		$mailfile = new CMailFile($subject, $emailTo, $emailFrom, $message, $filedir, $mimetype, $filename, '', '', 0, -1);
     
             		if ($mailfile)
             		{
    @@ -787,126 +800,136 @@ if (empty($reshook))
         }
     
         //var_dump($user->id == $object->fk_user_validator);exit;
    -    if ($action == "confirm_cancel" && GETPOST('confirm', 'alpha')=="yes" && GETPOST('detail_cancel', 'alpha') && $id > 0 && $user->rights->expensereport->creer)
    +    if ($action == "confirm_cancel" && GETPOST('confirm', 'alpha')=="yes" && $id > 0 && $user->rights->expensereport->creer)
         {
    -    	$object = new ExpenseReport($db);
    -    	$object->fetch($id);
    -
    -    	if ($user->id == $object->fk_user_valid || $user->id == $object->fk_user_author)
    +    	if (! GETPOST('detail_cancel', 'alpha'))
         	{
    -    		$result = $object->set_cancel($user, GETPOST('detail_cancel', 'alpha'));
    -
    -    		if ($result > 0)
    -    		{
    -    			// Define output language
    -    			if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
    -    			{
    -    				$outputlangs = $langs;
    -    				$newlang = '';
    -    				if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','aZ09')) $newlang = GETPOST('lang_id','aZ09');
    -    				if ($conf->global->MAIN_MULTILANGS && empty($newlang))	$newlang = $object->thirdparty->default_lang;
    -    				if (! empty($newlang)) {
    -    					$outputlangs = new Translate("", $conf);
    -    					$outputlangs->setDefaultLang($newlang);
    -    				}
    -    				$model=$object->modelpdf;
    -    				$ret = $object->fetch($id); // Reload to get new records
    -
    -    				$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
    -    			}
    -    		}
    -
    -    		if ($result > 0)
    -    		{
    -    			// Send mail
    -
    -    			// TO
    -    			$destinataire = new User($db);
    -    			$destinataire->fetch($object->fk_user_author);
    -    			$emailTo = $destinataire->email;
    -
    -    			// FROM
    -    			$expediteur = new User($db);
    -    			$expediteur->fetch($object->fk_user_cancel);
    -    			$emailFrom = $expediteur->email;
    -
    -    			if ($emailFrom && $emailTo)
    -    			{
    -    			    $filename=array(); $filedir=array(); $mimetype=array();
    -
    -    			    // SUBJECT
    -    				$subject = $langs->transnoentities("ExpenseReportCanceled");
    -
    -    				// CONTENT
    -    				$link = $urlwithroot.'/expensereport/card.php?id='.$object->id;
    -    				$message = $langs->transnoentities("ExpenseReportCanceledMessage", $object->ref, $destinataire->getFullName($langs), $expediteur->getFullName($langs), $_POST['detail_cancel'], $link);
    -
    -    				// Rebuilt pdf
    -    				/*
    -    				$object->setDocModel($user,"");
    -    				$resultPDF = expensereport_pdf_create($db,$object,'',"",$langs);
    -
    -    				if($resultPDF
    -    				{
    -    					// ATTACHMENT
    -    					$filename=array(); $filedir=array(); $mimetype=array();
    -    					array_push($filename,dol_sanitizeFileName($object->ref).".pdf");
    -    					array_push($filedir, $conf->expensereport->dir_output."/".dol_sanitizeFileName($object->ref)."/".dol_sanitizeFileName($object->ref).".pdf");
    -    					array_push($mimetype,"application/pdf");
    -    				}
    -    				*/
    -
    -        			// PREPARE SEND
    -        			$mailfile = new CMailFile($subject,$emailTo,$emailFrom,$message,$filedir,$mimetype,$filename);
    -
    -        			if ($mailfile)
    -        			{
    -        				// SEND
    -        				$result=$mailfile->sendfile();
    -        				if ($result)
    -        				{
    -        					$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($emailFrom,2),$mailfile->getValidAddress($emailTo,2));
    -        					setEventMessages($mesg, null, 'mesgs');
    -        					header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
    -        					exit;
    -        				}
    -        				else
    -        				{
    -        					$langs->load("other");
    -        					if ($mailfile->error)
    -        					{
    -        						$mesg='';
    -        						$mesg.=$langs->trans('ErrorFailedToSendMail', $emailFrom, $emailTo);
    -        						$mesg.='<br>'.$mailfile->error;
    -        						setEventMessages($mesg, null, 'errors');
    -        					}
    -        					else
    -        					{
    -        						setEventMessages('No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS', null, 'warnings');
    -        					}
    -        				}
    -        			}
    -        			else
    -        			{
    -        				setEventMessages($mailfile->error,$mailfile->errors,'errors');
    -        				$action='';
    -        			}
    -    			}
    -    			else
    -    			{
    -    			    setEventMessages($langs->trans("NoEmailSentBadSenderOrRecipientEmail"), null, 'warnings');
    -    			    $action='';
    -    			}
    -    		}
    -    		else
    -    		{
    -    			setEventMessages($langs->trans("FailedToSetToCancel"), null, 'warnings');
    -    			$action='';
    -    		}
    +    		setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Comment")), null, 'errors');
         	}
         	else
         	{
    -    		setEventMessages($object->error, $object->errors, 'errors');
    +	    	$object = new ExpenseReport($db);
    +	    	$object->fetch($id);
    +
    +	    	if ($user->id == $object->fk_user_valid || $user->id == $object->fk_user_author)
    +	    	{
    +	    		$result = $object->set_cancel($user, GETPOST('detail_cancel', 'alpha'));
    +
    +	    		if ($result > 0)
    +	    		{
    +	    			// Define output language
    +	    			if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE))
    +	    			{
    +	    				$outputlangs = $langs;
    +	    				$newlang = '';
    +	    				if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','aZ09')) $newlang = GETPOST('lang_id','aZ09');
    +	    				if ($conf->global->MAIN_MULTILANGS && empty($newlang))	$newlang = $object->thirdparty->default_lang;
    +	    				if (! empty($newlang)) {
    +	    					$outputlangs = new Translate("", $conf);
    +	    					$outputlangs->setDefaultLang($newlang);
    +	    				}
    +	    				$model=$object->modelpdf;
    +	    				$ret = $object->fetch($id); // Reload to get new records
    +
    +	    				$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
    +	    			}
    +	    		}
    +
    +	    		if ($result > 0)
    +	    		{
    +	    			// Send mail
    +
    +	    			// TO
    +	    			$destinataire = new User($db);
    +	    			$destinataire->fetch($object->fk_user_author);
    +	    			$emailTo = $destinataire->email;
    +
    +	    			// FROM
    +	    			$expediteur = new User($db);
    +	    			$expediteur->fetch($object->fk_user_cancel);
    +	    			$emailFrom = $expediteur->email;
    +
    +	    			if ($emailFrom && $emailTo)
    +	    			{
    +	    			    $filename=array(); $filedir=array(); $mimetype=array();
    +
    +	    			    // SUBJECT
    +	    			    $societeName = $conf->global->MAIN_INFO_SOCIETE_NOM;
    +	    			    if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $societeName = $conf->global->MAIN_APPLICATION_TITLE;
    +
    +	    			    $subject = $societeName." - ".$langs->transnoentities("ExpenseReportCanceled");
    +
    +	    				// CONTENT
    +	    				$link = $urlwithroot.'/expensereport/card.php?id='.$object->id;
    +	    				$message = $langs->transnoentities("ExpenseReportCanceledMessage", $object->ref, $destinataire->getFullName($langs), $expediteur->getFullName($langs), GETPOST('detail_cancel','alpha'), $link);
    +
    +	    				// Rebuilt pdf
    +	    				/*
    +	    				$object->setDocModel($user,"");
    +	    				$resultPDF = expensereport_pdf_create($db,$object,'',"",$langs);
    +
    +	    				if($resultPDF
    +	    				{
    +	    					// ATTACHMENT
    +	    					$filename=array(); $filedir=array(); $mimetype=array();
    +	    					array_push($filename,dol_sanitizeFileName($object->ref).".pdf");
    +	    					array_push($filedir, $conf->expensereport->dir_output."/".dol_sanitizeFileName($object->ref)."/".dol_sanitizeFileName($object->ref).".pdf");
    +	    					array_push($mimetype,"application/pdf");
    +	    				}
    +	    				*/
    +
    +	        			// PREPARE SEND
    +	        			$mailfile = new CMailFile($subject, $emailTo, $emailFrom, $message, $filedir, $mimetype, $filename, '', '', 0, -1);
    +
    +	        			if ($mailfile)
    +	        			{
    +	        				// SEND
    +	        				$result=$mailfile->sendfile();
    +	        				if ($result)
    +	        				{
    +	        					$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($emailFrom,2),$mailfile->getValidAddress($emailTo,2));
    +	        					setEventMessages($mesg, null, 'mesgs');
    +	        					header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
    +	        					exit;
    +	        				}
    +	        				else
    +	        				{
    +	        					$langs->load("other");
    +	        					if ($mailfile->error)
    +	        					{
    +	        						$mesg='';
    +	        						$mesg.=$langs->trans('ErrorFailedToSendMail', $emailFrom, $emailTo);
    +	        						$mesg.='<br>'.$mailfile->error;
    +	        						setEventMessages($mesg, null, 'errors');
    +	        					}
    +	        					else
    +	        					{
    +	        						setEventMessages('No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS', null, 'warnings');
    +	        					}
    +	        				}
    +	        			}
    +	        			else
    +	        			{
    +	        				setEventMessages($mailfile->error,$mailfile->errors,'errors');
    +	        				$action='';
    +	        			}
    +	    			}
    +	    			else
    +	    			{
    +	    			    setEventMessages($langs->trans("NoEmailSentBadSenderOrRecipientEmail"), null, 'warnings');
    +	    			    $action='';
    +	    			}
    +	    		}
    +	    		else
    +	    		{
    +	    			setEventMessages($langs->trans("FailedToSetToCancel"), null, 'warnings');
    +	    			$action='';
    +	    		}
    +	    	}
    +	    	else
    +	    	{
    +	    		setEventMessages($object->error, $object->errors, 'errors');
    +	    	}
         	}
         }
     
    @@ -1000,25 +1023,21 @@ if (empty($reshook))
         			$filename=array(); $filedir=array(); $mimetype=array();
     
         		    // SUBJECT
    -    			$subject = $langs->transnoentities("ExpenseReportPaid");
    +    			$societeName = $conf->global->MAIN_INFO_SOCIETE_NOM;
    +    			if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $societeName = $conf->global->MAIN_APPLICATION_TITLE;
    +
    +    			$subject = $societeName." - ".$langs->transnoentities("ExpenseReportPaid");
     
         			// CONTENT
         			$link = $urlwithroot.'/expensereport/card.php?id='.$object->id;
         			$message = $langs->transnoentities("ExpenseReportPaidMessage", $object->ref, $destinataire->getFullName($langs), $expediteur->getFullName($langs), $link);
     
    -        		// CONTENT
    -        		$message = "Bonjour {$destinataire->firstname},\n\n";
    -        		$message.= "Votre note de frais \"{$object->ref}\" vient d'être payée.\n";
    -        		$message.= "- Payeur : {$expediteur->firstname} {$expediteur->lastname}\n";
    -        		$message.= "- Lien : {$dolibarr_main_url_root}/expensereport/card.php?id={$object->id}\n\n";
    -        		$message.= "Bien cordialement,\n' SI";
    -
             		// Generate pdf before attachment
             		$object->setDocModel($user,"");
             		$resultPDF = expensereport_pdf_create($db,$object,'',"",$langs);
     
             		// PREPARE SEND
    -        		$mailfile = new CMailFile($subject,$emailTo,$emailFrom,$message,$filedir,$mimetype,$filename);
    +        		$mailfile = new CMailFile($subject, $emailTo, $emailFrom, $message, $filedir, $mimetype, $filename, '', '', 0, -1);
     
             		if ($mailfile)
             		{
    @@ -1159,7 +1178,6 @@ if (empty($reshook))
     				unset($fk_projet);
     
     				unset($date);
    -
     			} else {
     				setEventMessages($object->error, $object->errors, 'errors');
     			}
    @@ -1211,7 +1229,7 @@ if (empty($reshook))
         	}
         }
     
    -    if ($action == "updateligne" && $user->rights->expensereport->creer)
    +    if ($action == "updateline" && $user->rights->expensereport->creer)
         {
         	$object = new ExpenseReport($db);
         	$object->fetch($id);
    @@ -1335,7 +1353,7 @@ if ($action == 'create')
     	print '<tr>';
     	print '<td class="titlefieldcreate fieldrequired">'.$langs->trans("DateStart").'</td>';
     	print '<td>';
    -	$form->select_date($date_start?$date_start:-1,'date_debut',0,0,0,'',1,1);
    +	print $form->selectDate($date_start?$date_start:-1, 'date_debut', 0, 0, 0, '', 1, 1);
     	print '</td>';
     	print '</tr>';
     
    @@ -1343,7 +1361,7 @@ if ($action == 'create')
     	print '<tr>';
     	print '<td class="fieldrequired">'.$langs->trans("DateEnd").'</td>';
     	print '<td>';
    -	$form->select_date($date_end?$date_end:-1,'date_fin',0,0,0,'',1,1);
    +	print $form->selectDate($date_end?$date_end:-1, 'date_fin', 0, 0, 0, '', 1, 1);
     	print '</td>';
     	print '</tr>';
     
    @@ -1372,7 +1390,7 @@ if ($action == 'create')
         	$defaultselectuser=$user->fk_user;	// Will work only if supervisor has permission to approve so is inside include_users
         	if (! empty($conf->global->EXPENSEREPORT_DEFAULT_VALIDATOR)) $defaultselectuser=$conf->global->EXPENSEREPORT_DEFAULT_VALIDATOR;   // Can force default approver
         	if (GETPOST('fk_user_validator', 'int') > 0) $defaultselectuser=GETPOST('fk_user_validator', 'int');
    -    	$s=$form->select_dolusers($defaultselectuser, "fk_user_validator", 1, "", 0, $include_users);
    +    	$s=$form->select_dolusers($defaultselectuser, "fk_user_validator", 1, "", ((empty($defaultselectuser) || empty($conf->global->EXPENSEREPORT_DEFAULT_VALIDATOR_UNCHANGEABLE))?0:1), $include_users);
         	print $form->textwithpicto($s, $langs->trans("AnyOtherInThisListCanValidate"));
     	}
     	print '</td>';
    @@ -1450,8 +1468,9 @@ else
     					print $langs->trans('NotUserRightToView');
     					print '</div>';
     
    -					llxFooter();
    -					$db->close();
    +					// End of page
    +                    llxFooter();
    +                    $db->close();
     
     					exit;
     				}
    @@ -1499,13 +1518,13 @@ else
     				print '<tr>';
     				print '<td>'.$langs->trans("DateStart").'</td>';
     				print '<td>';
    -				$form->select_date($object->date_debut,'date_debut');
    +				print $form->selectDate($object->date_debut, 'date_debut');
     				print '</td>';
     				print '</tr>';
     				print '<tr>';
     				print '<td>'.$langs->trans("DateEnd").'</td>';
     				print '<td>';
    -				$form->select_date($object->date_fin,'date_fin');
    +				print $form->selectDate($object->date_fin, 'date_fin');
     				print '</td>';
     				print '</tr>';
     
    @@ -1550,7 +1569,6 @@ else
     					$userfee->fetch($user->id);
     					print $userfee->getNomUrl(-1);
     					print '</td></tr>';
    -
     				}
     
     				// Other attributes
    @@ -1587,49 +1605,49 @@ else
     
     				if ($action == 'save')
     				{
    -					$formconfirm=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("SaveTrip"),$langs->trans("ConfirmSaveTrip"),"confirm_validate","","",1);
    +					$formconfirm=$form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("SaveTrip"),$langs->trans("ConfirmSaveTrip"),"confirm_validate","","",1);
     				}
     
     				if ($action == 'save_from_refuse')
     				{
    -					$formconfirm=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("SaveTrip"),$langs->trans("ConfirmSaveTrip"),"confirm_save_from_refuse","","",1);
    +					$formconfirm=$form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("SaveTrip"),$langs->trans("ConfirmSaveTrip"),"confirm_save_from_refuse","","",1);
     				}
     
     				if ($action == 'delete')
     				{
    -					$formconfirm=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("DeleteTrip"),$langs->trans("ConfirmDeleteTrip"),"confirm_delete","","",1);
    +					$formconfirm=$form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("DeleteTrip"),$langs->trans("ConfirmDeleteTrip"),"confirm_delete","","",1);
     				}
     
     				if ($action == 'validate')
     				{
    -					$formconfirm=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("ValideTrip"),$langs->trans("ConfirmValideTrip"),"confirm_approve","","",1);
    +					$formconfirm=$form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("ValideTrip"),$langs->trans("ConfirmValideTrip"),"confirm_approve","","",1);
     				}
     
     				if ($action == 'paid')
     				{
    -					$formconfirm=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("PaidTrip"),$langs->trans("ConfirmPaidTrip"),"confirm_paid","","",1);
    +					$formconfirm=$form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("PaidTrip"),$langs->trans("ConfirmPaidTrip"),"confirm_paid","","",1);
     				}
     
     				if ($action == 'cancel')
     				{
    -					$array_input = array('text'=>$langs->trans("ConfirmCancelTrip"), array('type'=>"text",'label'=>$langs->trans("Comment"),'name'=>"detail_cancel",'size'=>"50",'value'=>""));
    -					$formconfirm=$form->form_confirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("Cancel"),"","confirm_cancel",$array_input,"",1);
    +					$array_input = array('text'=>$langs->trans("ConfirmCancelTrip"), array('type'=>"text",'label'=>'<strong>'.$langs->trans("Comment").'</strong>','name'=>"detail_cancel",'size'=>"50",'value'=>""));
    +					$formconfirm=$form->formconfirm($_SEVER["PHP_SELF"]."?id=".$id,$langs->trans("Cancel"),"","confirm_cancel",$array_input,"",1);
     				}
     
     				if ($action == 'brouillonner')
     				{
    -				    $formconfirm=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("BrouillonnerTrip"),$langs->trans("ConfirmBrouillonnerTrip"),"confirm_brouillonner","","",1);
    +				    $formconfirm=$form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("BrouillonnerTrip"),$langs->trans("ConfirmBrouillonnerTrip"),"confirm_brouillonner","","",1);
     				}
     
     				if ($action == 'refuse')		// Deny
     				{
     					$array_input = array('text'=>$langs->trans("ConfirmRefuseTrip"), array('type'=>"text",'label'=>$langs->trans("Comment"),'name'=>"detail_refuse",'size'=>"50",'value'=>""));
    -					$formconfirm=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("Deny"),'',"confirm_refuse",$array_input,"yes",1);
    +					$formconfirm=$form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("Deny"),'',"confirm_refuse",$array_input,"yes",1);
     				}
     
     				if ($action == 'delete_line')
     				{
    -					$formconfirm=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$id."&rowid=".GETPOST('rowid','int'),$langs->trans("DeleteLine"),$langs->trans("ConfirmDeleteLine"),"confirm_delete_line",'','yes',1);
    +					$formconfirm=$form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id."&rowid=".GETPOST('rowid','int'),$langs->trans("DeleteLine"),$langs->trans("ConfirmDeleteLine"),"confirm_delete_line",'','yes',1);
     				}
     
     				// Print form confirm
    @@ -1962,7 +1980,7 @@ else
     
     				print '<div style="clear: both;"></div>';
     
    -				$actiontouse='updateligne';
    +				$actiontouse='updateline';
     				if (($object->fk_statut==0 || $object->fk_statut==99) && $action != 'editline') $actiontouse='addline';
     
     				print '<form name="expensereport" action="'.$_SERVER["PHP_SELF"].'" method="post">';
    @@ -2077,7 +2095,7 @@ else
     
     								// Select date
     								print '<td class="center">';
    -								$form->select_date($line->date,'date');
    +								print $form->selectDate($line->date,'date');
     								print '</td>';
     
     								// Select project
    @@ -2160,7 +2178,7 @@ else
     
     					// Select date
     					print '<td align="center">';
    -					$form->select_date($date?$date:-1,'date');
    +					print $form->selectDate($date?$date:-1, 'date');
     					print '</td>';
     
     					// Select project
    @@ -2223,17 +2241,13 @@ else
     				print '</form>';
     
     				dol_fiche_end();
    -
     			} // end edit or not edit
    -
     		}	// end of if result
     		else
     		{
     			dol_print_error($db);
     		}
    -
     	} //fin si id > 0
    -
     }
     
     /*
    @@ -2447,7 +2461,6 @@ if ($action != 'presend')
     	$somethingshown = $formactions->showactions($object, 'expensereport', null);
     
     	print '</div></div></div>';
    -
     }
     
     // Presend form
    diff --git a/htdocs/expensereport/class/api_expensereports.class.php b/htdocs/expensereport/class/api_expensereports.class.php
    index 726aa158413..e6475665fb8 100644
    --- a/htdocs/expensereport/class/api_expensereports.class.php
    +++ b/htdocs/expensereport/class/api_expensereports.class.php
    @@ -94,7 +94,8 @@ class ExpenseReports extends DolibarrApi
          * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')"
          * @return  array               Array of Expense Report objects
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $user_ids = 0, $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $user_ids = 0, $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -195,7 +196,8 @@ class ExpenseReports extends DolibarrApi
          * @return int
          */
     /*
    -    function getLines($id) {
    +    function getLines($id)
    +    {
           if(! DolibarrApiAccess::$user->rights->expensereport->lire) {
     		  	throw new RestException(401);
     		  }
    @@ -228,7 +230,8 @@ class ExpenseReports extends DolibarrApi
          * @return int
          */
     /*
    -    function postLine($id, $request_data = null) {
    +    function postLine($id, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->expensereport->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -290,7 +293,8 @@ class ExpenseReports extends DolibarrApi
          * @return object
          */
         /*
    -    function putLine($id, $lineid, $request_data = null) {
    +    function putLine($id, $lineid, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->expensereport->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -348,7 +352,8 @@ class ExpenseReports extends DolibarrApi
          * @return int
          */
         /*
    -    function deleteLine($id, $lineid) {
    +    function deleteLine($id, $lineid)
    +    {
           if(! DolibarrApiAccess::$user->rights->expensereport->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -380,7 +385,8 @@ class ExpenseReports extends DolibarrApi
          *
          * @return int
          */
    -    function put($id, $request_data = null) {
    +    function put($id, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->expensereport->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -439,7 +445,6 @@ class ExpenseReports extends DolibarrApi
                     'message' => 'Expense Report deleted'
                 )
             );
    -
         }
     
         /**
    @@ -490,7 +495,8 @@ class ExpenseReports extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
         	$object = parent::_cleanObjectDatas($object);
     
    @@ -516,7 +522,6 @@ class ExpenseReports extends DolibarrApi
                 if (!isset($data[$field]))
                     throw new RestException(400, "$field field missing");
                 $expensereport[$field] = $data[$field];
    -
             }
             return $expensereport;
         }
    diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php
    index 7ec20f00b61..efb5c41e300 100644
    --- a/htdocs/expensereport/class/expensereport.class.php
    +++ b/htdocs/expensereport/class/expensereport.class.php
    @@ -4,6 +4,7 @@
      * Copyright (C) 2015 Alexandre Spangaro  <aspangaro@zendsi.com>
      * Copyright (C) 2016 Ferran Marcet       <fmarcet@2byte.es>
      * Copyright (C) 2018 Nicolas ZABOURI     <info@inovea-conseil.com>
    + * Copyright (c) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,8 +34,16 @@ require_once DOL_DOCUMENT_ROOT .'/expensereport/class/expensereport_rule.class.p
      */
     class ExpenseReport extends CommonObject
     {
    -    var $element='expensereport';
    -    var $table_element='expensereport';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='expensereport';
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='expensereport';
    +
         var $table_element_line = 'expensereport_det';
         var $fk_element = 'fk_expensereport';
         var $picto = 'trip';
    @@ -96,8 +105,8 @@ class ExpenseReport extends CommonObject
             END ACTIONS
         */
     
    -   /**
    -	 * Draft
    +    /**
    +	 * Draft status
     	 */
     	const STATUS_DRAFT = 0;
     
    @@ -140,8 +149,6 @@ class ExpenseReport extends CommonObject
             $this->statuts_short = array(0 => 'Draft', 2 => 'Validated', 4 => 'Canceled', 5 => 'Approved', 6 => 'Paid', 99 => 'Refused');
             $this->statuts = array(0 => 'Draft', 2 => 'ValidatedWaitingApproval', 4 => 'Canceled', 5 => 'Approved', 6 => 'Paid', 99 => 'Refused');
             $this->statuts_logo = array(0 => 'statut0', 2 => 'statut1', 4 => 'statut5', 5 => 'statut3', 6 => 'statut6', 99 => 'statut5');
    -
    -        return 1;
         }
     
         /**
    @@ -539,6 +546,7 @@ class ExpenseReport extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Classify the expense report as paid
          *
    @@ -549,6 +557,7 @@ class ExpenseReport extends CommonObject
          */
         function set_paid($id, $fuser, $notrigger = 0)
         {
    +        // phpcs:enable
     		$error = 0;
     		$this->db->begin();
     
    @@ -610,6 +619,7 @@ class ExpenseReport extends CommonObject
             return $this->LibStatut($this->status,$mode);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Returns the label of a statut
          *
    @@ -619,27 +629,28 @@ class ExpenseReport extends CommonObject
          */
         function LibStatut($status,$mode=0)
         {
    +        // phpcs:enable
             global $langs;
     
             if ($mode == 0)
                 return $langs->transnoentities($this->statuts[$status]);
     
    -        if ($mode == 1)
    +        elseif ($mode == 1)
                 return $langs->transnoentities($this->statuts_short[$status]);
     
    -        if ($mode == 2)
    +        elseif ($mode == 2)
                 return img_picto($langs->transnoentities($this->statuts_short[$status]), $this->statuts_logo[$status]).' '.$langs->transnoentities($this->statuts_short[$status]);
     
    -        if ($mode == 3)
    +        elseif ($mode == 3)
                 return img_picto($langs->transnoentities($this->statuts_short[$status]), $this->statuts_logo[$status]);
     
    -        if ($mode == 4)
    +        elseif ($mode == 4)
                 return img_picto($langs->transnoentities($this->statuts_short[$status]),$this->statuts_logo[$status]).' '.$langs->transnoentities($this->statuts[$status]);
     
    -        if ($mode == 5)
    +        elseif ($mode == 5)
                 return '<span class="hideonsmartphone">'.$langs->transnoentities($this->statuts_short[$status]).' </span>'.img_picto($langs->transnoentities($this->statuts_short[$status]),$this->statuts_logo[$status]);
     
    -        if ($mode == 6)
    +        elseif ($mode == 6)
                 return $langs->transnoentities($this->statuts[$status]).' '.img_picto($langs->transnoentities($this->statuts_short[$status]),$this->statuts_logo[$status]);
         }
     
    @@ -709,7 +720,6 @@ class ExpenseReport extends CommonObject
                         $auser->fetch($obj->fk_user_approve);
                         $this->user_approve   = $auser;
                     }
    -
                 }
                 $this->db->free($resql);
             }
    @@ -784,6 +794,7 @@ class ExpenseReport extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * fetch_line_by_project
          *
    @@ -793,6 +804,7 @@ class ExpenseReport extends CommonObject
          */
         function fetch_line_by_project($projectid,$user='')
         {
    +        // phpcs:enable
             global $conf,$db,$langs;
     
             $langs->load('trips');
    @@ -879,7 +891,6 @@ class ExpenseReport extends CommonObject
                     print '<td align="right" width="100">'.$langs->trans("TotalTTC").' : '.price($total_TTC).'</td>';
                     print '<td>&nbsp;</td>';
                     print '</tr>';
    -
                 }
                 else
                 {
    @@ -887,7 +898,6 @@ class ExpenseReport extends CommonObject
                     return -1;
                 }
             }
    -
         }
     
         /**
    @@ -941,6 +951,7 @@ class ExpenseReport extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * fetch_lines
          *
    @@ -948,6 +959,7 @@ class ExpenseReport extends CommonObject
          */
         function fetch_lines()
         {
    +        // phpcs:enable
             $this->lines=array();
     
             $sql = ' SELECT de.rowid, de.comments, de.qty, de.value_unit, de.date, de.rang,';
    @@ -1184,6 +1196,7 @@ class ExpenseReport extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * set_save_from_refuse
          *
    @@ -1192,6 +1205,7 @@ class ExpenseReport extends CommonObject
          */
         function set_save_from_refuse($fuser)
         {
    +        // phpcs:enable
             global $conf,$langs;
     
             // Sélection de la date de début de la NDF
    @@ -1297,6 +1311,7 @@ class ExpenseReport extends CommonObject
          * @param User      $fuser      User
          * @param Details   $details    Details
     	 * @param int       $notrigger  Disable triggers
    +     * @return int
          */
         function setDeny($fuser,$details,$notrigger=0)
         {
    @@ -1355,6 +1370,7 @@ class ExpenseReport extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * set_unpaid
          *
    @@ -1364,6 +1380,7 @@ class ExpenseReport extends CommonObject
          */
         function set_unpaid($fuser, $notrigger = 0)
         {
    +        // phpcs:enable
     		$error = 0;
     
             if ($this->fk_c_deplacement_statuts != 5)
    @@ -1414,6 +1431,7 @@ class ExpenseReport extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * set_cancel
          *
    @@ -1424,6 +1442,7 @@ class ExpenseReport extends CommonObject
          */
         function set_cancel($fuser,$detail, $notrigger=0)
         {
    +        // phpcs:enable
     		$error = 0;
             $this->date_cancel = $this->db->idate(gmmktime());
             if ($this->fk_statut != 4)
    @@ -1494,7 +1513,7 @@ class ExpenseReport extends CommonObject
     			$classname = $conf->global->EXPENSEREPORT_ADDON;
     
     			// Include file with class
    -			$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
    +			$dirmodels=array_merge(array('/'), (array) $conf->modules_parts['models']);
     			foreach ($dirmodels as $reldir)
     			{
                     $dir = dol_buildpath($reldir."core/modules/expensereport/");
    @@ -1503,9 +1522,8 @@ class ExpenseReport extends CommonObject
                     $mybool|=@include_once $dir.$file;
                 }
     
    -            if (! $mybool)
    -            {
    -                dol_print_error('',"Failed to include file ".$file);
    +            if ($mybool === false) {
    +                dol_print_error('', "Failed to include file ".$file);
                     return '';
                 }
     
    @@ -1598,6 +1616,7 @@ class ExpenseReport extends CommonObject
             return $result;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Update total of an expense report when you add a line.
          *
    @@ -1607,6 +1626,7 @@ class ExpenseReport extends CommonObject
          */
         function update_totaux_add($ligne_total_ht,$ligne_total_tva)
         {
    +        // phpcs:enable
             $this->total_ht = $this->total_ht + $ligne_total_ht;
             $this->total_tva = $this->total_tva + $ligne_total_tva;
             $this->total_ttc = $this->total_ht + $this->total_tva;
    @@ -1626,6 +1646,7 @@ class ExpenseReport extends CommonObject
             endif;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Update total of an expense report when you delete a line.
          *
    @@ -1635,6 +1656,7 @@ class ExpenseReport extends CommonObject
          */
         function update_totaux_del($ligne_total_ht,$ligne_total_tva)
         {
    +        // phpcs:enable
             $this->total_ht = $this->total_ht - $ligne_total_ht;
             $this->total_tva = $this->total_tva - $ligne_total_tva;
             $this->total_ttc = $this->total_ht + $this->total_tva;
    @@ -1747,8 +1769,6 @@ class ExpenseReport extends CommonObject
     			$this->error = 'ErrorExpenseNotDraft';
                 return -3;
             }
    -
    -
     	}
     
     	/**
    @@ -2043,6 +2063,7 @@ class ExpenseReport extends CommonObject
             return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * periode_existe
          *
    @@ -2053,6 +2074,7 @@ class ExpenseReport extends CommonObject
          */
         function periode_existe($fuser, $date_debut, $date_fin)
         {
    +        // phpcs:enable
             $sql = "SELECT rowid, date_debut, date_fin";
             $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
             $sql.= " WHERE fk_user_author = '{$fuser->id}'";
    @@ -2099,6 +2121,7 @@ class ExpenseReport extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Return list of people with permission to validate expense reports.
          * Search for permission "approve expense report"
    @@ -2107,6 +2130,7 @@ class ExpenseReport extends CommonObject
          */
         function fetch_users_approver_expensereport()
         {
    +        // phpcs:enable
             $users_validator=array();
     
             $sql = "SELECT DISTINCT ur.fk_user";
    @@ -2205,13 +2229,15 @@ class ExpenseReport extends CommonObject
             return $ret;
         }
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *      Charge indicateurs this->nb pour le tableau de bord
          *
          *      @return     int         <0 if KO, >0 if OK
          */
         function load_state_board()
         {
    +        // phpcs:enable
             global $conf;
     
             $this->nb=array();
    @@ -2239,6 +2265,7 @@ class ExpenseReport extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
          *
    @@ -2248,6 +2275,7 @@ class ExpenseReport extends CommonObject
          */
         function load_board($user, $option='topay')
         {
    +        // phpcs:enable
             global $conf, $langs;
     
             if ($user->societe_id) return -1;   // protection pour eviter appel par utilisateur externe
    @@ -2368,7 +2396,6 @@ class ExpenseReport extends CommonObject
         	}
         	return 0;
         }
    -
     }
     
     
    @@ -2377,25 +2404,51 @@ class ExpenseReport extends CommonObject
      */
     class ExpenseReportLine
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -    var $rowid;
    -    var $comments;
    -    var $qty;
    -    var $value_unit;
    -    var $date;
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    -    var $fk_c_type_fees;
    -    var $fk_c_exp_tax_cat;
    -    var $fk_projet;
    -    var $fk_expensereport;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $rowid;
     
    -    var $type_fees_code;
    -    var $type_fees_libelle;
    +    public $comments;
    +    public $qty;
    +    public $value_unit;
    +    public $date;
     
    -    var $projet_ref;
    -    var $projet_title;
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_c_type_fees;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_c_exp_tax_cat;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_projet;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_expensereport;
    +
    +    public $type_fees_code;
    +    public $type_fees_libelle;
    +
    +    public $projet_ref;
    +    public $projet_title;
     
         var $vatrate;
         var $total_ht;
    @@ -2671,6 +2724,7 @@ class ExpenseReportLine
     }
     
     
    +// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     /**
      *    Retourne la liste deroulante des differents etats d'une note de frais.
      *    Les valeurs de la liste sont les id de la table c_expensereport_statuts
    @@ -2683,6 +2737,7 @@ class ExpenseReportLine
      */
     function select_expensereport_statut($selected='',$htmlname='fk_statut',$useempty=1, $useshortlabel=0)
     {
    +    // phpcs:enable
         global $db, $langs;
     
         $tmpep=new ExpenseReport($db);
    @@ -2707,6 +2762,7 @@ function select_expensereport_statut($selected='',$htmlname='fk_statut',$useempt
         print '</select>';
     }
     
    +// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     /**
      *  Return list of types of notes with select value = id
      *
    @@ -2718,6 +2774,7 @@ function select_expensereport_statut($selected='',$htmlname='fk_statut',$useempt
      */
     function select_type_fees_id($selected='',$htmlname='type',$showempty=0, $active=1)
     {
    +    // phpcs:enable
         global $db,$langs,$user;
         $langs->load("trips");
     
    diff --git a/htdocs/expensereport/class/expensereport_ik.class.php b/htdocs/expensereport/class/expensereport_ik.class.php
    index a93d4e9062c..9eaa8970a5b 100644
    --- a/htdocs/expensereport/class/expensereport_ik.class.php
    +++ b/htdocs/expensereport/class/expensereport_ik.class.php
    @@ -29,8 +29,19 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/coreobject.class.php';
      */
     class ExpenseReportIk extends CoreObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='expenseik';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='expensereport_ik';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element='fk_expense_ik';
     
     	/**
    @@ -120,8 +131,15 @@ class ExpenseReportIk extends CoreObject
     		return $categories;
     	}
     
    -	public static function getRangeByUser(User $userauthor, $fk_c_exp_tax_cat)
    -	{
    +    /**
    +     * Return an array of ranges for a user
    +     *
    +     * @param User  $userauthor         user author id
    +     * @param int   $fk_c_exp_tax_cat   category
    +     * @return boolean|array
    +     */
    +    public static function getRangeByUser(User $userauthor, $fk_c_exp_tax_cat)
    +    {
     		$default_range = (int) $userauthor->default_range; // if not defined, then 0
     		$ranges = self::getRangesByCategory($fk_c_exp_tax_cat);
     
    diff --git a/htdocs/expensereport/class/expensereport_rule.class.php b/htdocs/expensereport/class/expensereport_rule.class.php
    index 11bc480bf4f..6d2a99d2101 100644
    --- a/htdocs/expensereport/class/expensereport_rule.class.php
    +++ b/htdocs/expensereport/class/expensereport_rule.class.php
    @@ -29,8 +29,19 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/coreobject.class.php';
      */
     class ExpenseReportRule extends CoreObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='expenserule';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='expensereport_rules';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element='fk_expense_rule';
     
     	/**
    diff --git a/htdocs/expensereport/class/expensereportstats.class.php b/htdocs/expensereport/class/expensereportstats.class.php
    index 07396663f42..7901e813edc 100644
    --- a/htdocs/expensereport/class/expensereportstats.class.php
    +++ b/htdocs/expensereport/class/expensereportstats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -22,15 +22,18 @@
      *       \ingroup    expensereport
      *       \brief      Fichier de la classe de gestion des stats des expensereport et notes de frais
      */
    -include_once DOL_DOCUMENT_ROOT . '/core/class/stats.class.php';
    -include_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/class/stats.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/expensereport/class/expensereport.class.php';
     
     /**
      *  Classe permettant la gestion des stats des expensereports et notes de frais
      */
     class ExpenseReportStats extends Stats
     {
    -    public $table_element;
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element;
     
         var $socid;
         var $userid;
    diff --git a/htdocs/expensereport/class/paymentexpensereport.class.php b/htdocs/expensereport/class/paymentexpensereport.class.php
    index 0634ca16b7a..605affed253 100644
    --- a/htdocs/expensereport/class/paymentexpensereport.class.php
    +++ b/htdocs/expensereport/class/paymentexpensereport.class.php
    @@ -30,26 +30,62 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class PaymentExpenseReport extends CommonObject
     {
    -	public $element='payment_expensereport';			//!< Id that identify managed objects
    -	public $table_element='payment_expensereport';	//!< Name of table without prefix where object is stored
    -    public $picto = 'payment';
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='payment_expensereport';
     
    -	var $rowid;
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='payment_expensereport';
     
    -	var $fk_expensereport;
    -	var $datec='';
    -	var $tms='';
    -	var $datep='';
    -    var $amount;            // Total amount of payment
    -    var $amounts=array();   // Array of amounts
    -	var $fk_typepayment;
    -	var $num_payment;
    -	var $fk_bank;
    -	var $fk_user_creat;
    -	var $fk_user_modif;
    -        //Unknow field
    -        var $chid;
    -        var $total;
    +    /**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
    +	public $picto = 'payment';
    +
    +	/**
    +	 * @var int ID
    +	 */
    +	public $rowid;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_expensereport;
    +
    +	public $datec='';
    +	public $tms='';
    +	public $datep='';
    +    public $amount;            // Total amount of payment
    +    public $amounts=array();   // Array of amounts
    +
    +    /**
    +     * @var int ID
    +     */
    +	public $fk_typepayment;
    +
    +	public $num_payment;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_bank;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_modif;
    +
    +    //Unknow field
    +    public $chid;
    +    public $total;
     
     	/**
     	 *	Constructor
    @@ -129,7 +165,6 @@ class PaymentExpenseReport extends CommonObject
     			{
     				$error++;
     			}
    -
     		}
     
     		if ($totalamount != 0 && ! $error)
    @@ -240,7 +275,6 @@ class PaymentExpenseReport extends CommonObject
     		if (isset($this->fk_user_modif))	$this->fk_user_modif=trim($this->fk_user_modif);
     
     
    -
     		// Check parameters
     		// Put here code to add control on parameters values
     
    @@ -443,15 +477,17 @@ class PaymentExpenseReport extends CommonObject
     	    return '';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    -	 *  @param	int		$statut        	Id statut
    +	 *  @param  int		$statut        	Id statut
     	 *  @param  int		$mode          	0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
     	 *  @return string 			       	Libelle du statut
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     	    global $langs;
     
     	    return '';
    @@ -480,8 +516,6 @@ class PaymentExpenseReport extends CommonObject
     		$this->fk_bank='';
     		$this->fk_user_creat='';
     		$this->fk_user_modif='';
    -
    -
     	}
     
     
    @@ -505,7 +539,7 @@ class PaymentExpenseReport extends CommonObject
     
             if (! empty($conf->banque->enabled))
             {
    -            require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
    +            include_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     
                 $acc = new Account($this->db);
                 $acc->fetch($accountid);
    @@ -598,6 +632,7 @@ class PaymentExpenseReport extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update link between the expense report payment and the generated line in llx_bank
     	 *
    @@ -606,6 +641,7 @@ class PaymentExpenseReport extends CommonObject
     	 */
     	function update_fk_bank($id_bank)
     	{
    +        // phpcs:enable
     		$sql = "UPDATE ".MAIN_DB_PREFIX."payment_expensereport SET fk_bank = ".$id_bank." WHERE rowid = ".$this->id;
     
     		dol_syslog(get_class($this)."::update_fk_bank", LOG_DEBUG);
    diff --git a/htdocs/expensereport/document.php b/htdocs/expensereport/document.php
    index f0d61d0f80d..c788583d316 100644
    --- a/htdocs/expensereport/document.php
    +++ b/htdocs/expensereport/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2011-2012 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -103,7 +103,7 @@ if ($object->id)
     	dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -132,13 +132,12 @@ if ($object->id)
         $permtoedit = $user->rights->expensereport->creer;
         $param = '&id=' . $object->id;
         include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
     }
     else
     {
     	print $langs->trans("ErrorUnknown");
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expensereport/export_csv.php b/htdocs/expensereport/export_csv.php
    index 4bc461b4d13..3a104ca77b4 100644
    --- a/htdocs/expensereport/export_csv.php
    +++ b/htdocs/expensereport/export_csv.php
    @@ -1,5 +1,6 @@
     <?php
     /* Copyright (C) 2004-2011	Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -59,7 +60,6 @@ if($num < 1) {
        $insert.= ")";
     
        $req = $db->query($insert);
    -
     }
     
     
    @@ -114,7 +114,7 @@ if (isset($_POST['action']))
     {
     	if($_POST['action'] == 'export')
     	{
    -		$select_date = $_POST['annee'].'-'.$_POST['mois'];
    +		$dateselected = $_POST['annee'].'-'.$_POST['mois'];
     
     		//var_dump($conf->expensereport->dir_output.'/export/');
     		if (!file_exists($conf->expensereport->dir_output.'/export/'))
    @@ -122,7 +122,7 @@ if (isset($_POST['action']))
     			dol_mkdir($conf->expensereport->dir_output.'/export/');
     		}
     
    -		$dir = $conf->expensereport->dir_output.'/export/expensereport-'.$select_date.'.csv';
    +		$dir = $conf->expensereport->dir_output.'/export/expensereport-'.$dateselected.'.csv';
     		$outputlangs = $langs;
     		$outputlangs->charset_output = 'UTF-8';
     
    @@ -175,7 +175,6 @@ if (isset($_POST['action']))
     						$ligne.= "--->, {$objet2->rowid}, {$objet2->libelle}, {$objet2->comments}, {$objet2->total_ht}, {$objet2->total_tva}, {$objet2->total_ttc}\n";
     					}
     				}
    -
     			}
     
     			$ligne = $outputlangs->convToOutputCharset($ligne);
    @@ -183,18 +182,16 @@ if (isset($_POST['action']))
     			fwrite($open,$ligne);
     			fclose($open);
     
    -			print '<a href="'.DOL_URL_ROOT.'/document.php?modulepart=expensereport&file=export%2Fexpensereport-'.$select_date.'.csv" target="_blank">Télécharger le fichier expensereport-'.$select_date.'.csv</a>';
    -
    +			print '<a href="'.DOL_URL_ROOT.'/document.php?modulepart=expensereport&file=export%2Fexpensereport-'.$dateselected.'.csv" target="_blank">Télécharger le fichier expensereport-'.$dateselected.'.csv</a>';
     		} else {
     
     			print '<b>'.$langs->trans('NoTripsToExportCSV').'</b>';
    -
     		}
     	}
     }
     
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expensereport/index.php b/htdocs/expensereport/index.php
    index 0d988e4850d..4748bd2c2a4 100644
    --- a/htdocs/expensereport/index.php
    +++ b/htdocs/expensereport/index.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003		Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015	Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004		Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2011	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015       Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -219,7 +219,6 @@ if ($result)
     
                 $i++;
             }
    -
         }
         else
         {
    @@ -231,6 +230,6 @@ else dol_print_error($db);
     
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expensereport/info.php b/htdocs/expensereport/info.php
    index 6babfcd647c..67f70f3a984 100644
    --- a/htdocs/expensereport/info.php
    +++ b/htdocs/expensereport/info.php
    @@ -79,6 +79,6 @@ if ($id > 0 || ! empty($ref))
         dol_fiche_end();
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php
    index e576889d363..b2b8e46d668 100644
    --- a/htdocs/expensereport/list.php
    +++ b/htdocs/expensereport/list.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003     	Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017	Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004     	Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2009	Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015       Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2018       Ferran Marcet		 <fmarcet@2byte.es>
      *
    @@ -26,7 +26,7 @@
      *		\brief      list of expense reports
      */
     
    -require "../main.inc.php";
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
    @@ -90,7 +90,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('expensereport');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     
     // List of fields to search into when doing a "search in all"
    @@ -861,7 +861,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expensereport/note.php b/htdocs/expensereport/note.php
    index 7eb48443901..3beb7f49da5 100644
    --- a/htdocs/expensereport/note.php
    +++ b/htdocs/expensereport/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Florian Henry		  	<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -56,7 +56,7 @@ $permissionnote=$user->rights->expensereport->creer;	// Used by the include of a
      * Actions
      */
     
    -include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php';	// Must be include, not includ_once
    +include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php';	// Must be include, not include_once
     
     
     /*
    @@ -97,6 +97,6 @@ if ($id > 0 || ! empty($ref))
     	dol_fiche_end();
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/expensereport/payment/card.php b/htdocs/expensereport/payment/card.php
    index 29ac7e38862..f75a0f8bb31 100644
    --- a/htdocs/expensereport/payment/card.php
    +++ b/htdocs/expensereport/payment/card.php
    @@ -129,7 +129,6 @@ dol_fiche_head($head, 'payment', $langs->trans("ExpenseReportPayment"), -1, 'pay
     if ($action == 'delete')
     {
     	print $form->formconfirm('card.php?id='.$object->id, $langs->trans("DeletePayment"), $langs->trans("ConfirmDeletePayment"), 'confirm_delete','',0,2);
    -
     }
     
     /*
    @@ -139,7 +138,6 @@ if ($action == 'valide')
     {
     	$facid = $_GET['facid'];
     	print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;facid='.$facid, $langs->trans("ValidatePayment"), $langs->trans("ConfirmValidatePayment"), 'confirm_valide','',0,2);
    -
     }
     
     $linkback = '';
    @@ -313,6 +311,6 @@ if ($action == '')
     
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expensereport/payment/info.php b/htdocs/expensereport/payment/info.php
    index 97098ef2340..6c7f8dd99c6 100644
    --- a/htdocs/expensereport/payment/info.php
    +++ b/htdocs/expensereport/payment/info.php
    @@ -77,5 +77,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/expensereport/payment/payment.php b/htdocs/expensereport/payment/payment.php
    index 23959c06e67..046bb522ae2 100644
    --- a/htdocs/expensereport/payment/payment.php
    +++ b/htdocs/expensereport/payment/payment.php
    @@ -1,6 +1,7 @@
     <?php
    -/* Copyright (C) 2015       Alexandre Spangaro	 <aspangaro.dolibarr@gmail.com>
    - * Copyright (C) 2015       Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2015       Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2015       Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -149,7 +150,6 @@ if ($action == 'add_payment')
                             $error++;
                         }
                     }
    -
                 }
     
         	    if (! $error)
    @@ -235,7 +235,7 @@ if ($action == 'create' || empty($action))
         print '<tr><td class="titlefield fieldrequired">'.$langs->trans("Date").'</td><td colspan="2">';
     	$datepaid = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]);
     	$datepayment=empty($conf->global->MAIN_AUTOFILL_DATE)?(empty($_POST["remonth"])?-1:$datepaid):0;
    -	$form->select_date($datepayment,'','','','',"add_payment",1,1);
    +	print $form->selectDate($datepayment, '', '', '', '', "add_payment", 1, 1);
     	print "</td>";
     	print '</tr>';
     
    @@ -336,5 +336,6 @@ if ($action == 'create' || empty($action))
     	print "</form>\n";
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/expensereport/stats/index.php b/htdocs/expensereport/stats/index.php
    index b4f0327cd39..c192fb83447 100644
    --- a/htdocs/expensereport/stats/index.php
    +++ b/htdocs/expensereport/stats/index.php
    @@ -2,6 +2,7 @@
     /* Copyright (C) 2003-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2012      Marcos García        <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -246,6 +247,7 @@ print '</table>';
     print '</form>';
     print '<br><br>';
     
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -281,7 +283,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    -
    +print '</div>';
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
     
    @@ -305,7 +307,6 @@ print '<div style="clear:both"></div>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/expensereport/tpl/linkedobjectblock.tpl.php b/htdocs/expensereport/tpl/linkedobjectblock.tpl.php
    index 2d040834a12..aa529b17da2 100644
    --- a/htdocs/expensereport/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/expensereport/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011	Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2013		Juanjo Menent <jmenent@2byte.es>
      * Copyright (C) 2014       Marcos García <marcosgdf@gmail.com>
      *
    diff --git a/htdocs/exports/class/export.class.php b/htdocs/exports/class/export.class.php
    index 050318944d6..7d908161071 100644
    --- a/htdocs/exports/class/export.class.php
    +++ b/htdocs/exports/class/export.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2011  Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2012       Charles-Fr BENKE    <charles.fr@benke.fr>
      * Copyright (C) 2016       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
      *
    @@ -30,7 +30,10 @@
      */
     class Export
     {
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	var $array_export_code=array();             // Tableau de "idmodule_numlot"
     	var $array_export_module=array();           // Tableau de "nom de modules"
    @@ -67,6 +70,7 @@ class Export
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Load an exportable dataset
     	 *
    @@ -76,6 +80,7 @@ class Export
     	 */
     	function load_arrays($user,$filter='')
     	{
    +        // phpcs:enable
     		global $langs,$conf,$mysoc;
     
     		dol_syslog(get_class($this)."::load_arrays user=".$user->id." filter=".$filter);
    @@ -204,6 +209,7 @@ class Export
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Build the sql export request.
     	 *      Arrays this->array_export_xxx are already loaded for required datatoexport
    @@ -215,6 +221,7 @@ class Export
     	 */
     	function build_sql($indice, $array_selected, $array_filterValue)
     	{
    +        // phpcs:enable
     		// Build the sql request
     		$sql=$this->array_export_sql_start[$indice];
     		$i=0;
    @@ -266,6 +273,7 @@ class Export
     		return $sql;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Build the conditionnal string from filter the query
     	 *
    @@ -276,6 +284,7 @@ class Export
     	 */
     	function build_filterQuery($TypeField, $NameField, $ValueField)
     	{
    +        // phpcs:enable
     		//print $TypeField." ".$NameField." ".$ValueField;
     		$InfoFieldList = explode(":", $TypeField);
     		// build the input field on depend of the type of file
    @@ -359,6 +368,7 @@ class Export
     		return $Condition;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Build an input field used to filter the query
     	 *
    @@ -369,6 +379,7 @@ class Export
     	 */
     	function build_filterField($TypeField, $NameField, $ValueField)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$szFilterField='';
    @@ -507,6 +518,7 @@ class Export
     		return $szMsg;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Build export file.
     	 *      File is built into directory $conf->export->dir_temp.'/'.$user->id
    @@ -522,6 +534,7 @@ class Export
     	 */
     	function build_file($user, $model, $datatoexport, $array_selected, $array_filterValue, $sqlquery = '')
      	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$indice=0;
    @@ -817,6 +830,7 @@ class Export
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Output list all export models
     	 *  TODO Move this into a class htmlxxx.class.php
    @@ -825,6 +839,7 @@ class Export
     	 */
     	function list_export_model()
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		$sql = "SELECT em.rowid, em.field, em.label, em.type, em.filter";
    @@ -871,6 +886,4 @@ class Export
     			dol_print_error($this->db);
     		}
     	}
    -
     }
    -
    diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php
    index 6d65418be3c..7cb69ee9a3f 100644
    --- a/htdocs/exports/export.php
    +++ b/htdocs/exports/export.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Marcos García		<marcosgdf@gmail.com>
      * Copyright (C) 2012		Charles-Fr BENKE	<charles.fr@benke.fr>
      * Copyright (C) 2015       Juanjo Menent       <jmenent@2byte.es>
    @@ -208,7 +208,6 @@ if ($action=='selectfield')     // Selection of field at step 2
     
     	    setEventMessages($warnings, null, 'warnings');
         }
    -
     }
     if ($action=='unselectfield')
     {
    @@ -683,7 +682,6 @@ if ($step == 2 && $datatoexport)
     	}
     
         print '</div>';
    -
     }
     
     if ($step == 3 && $datatoexport)
    @@ -858,7 +856,6 @@ if ($step == 3 && $datatoexport)
     	// il n'est pas obligatoire de filtrer les champs
     	print '<a class="butAction" href="javascript:FilterField.submit();">'.$langs->trans("NextStep").'</a>';
     	print '</div>';
    -
     }
     
     if ($step == 4 && $datatoexport)
    @@ -1162,7 +1159,6 @@ if ($step == 5 && $datatoexport)
         if ($action == 'remove_file')
         {
         	print $form->formconfirm($_SERVER["PHP_SELF"].'?step=5&datatoexport='.$datatoexport.'&file='.urlencode(GETPOST("file")), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile', '', 0, 1);
    -
         }
     
         print '<div class="fichecenter">';
    diff --git a/htdocs/exports/index.php b/htdocs/exports/index.php
    index bccf25f1be8..81027882b6b 100644
    --- a/htdocs/exports/index.php
    +++ b/htdocs/exports/index.php
    @@ -145,7 +145,6 @@ print '</table>';
     
     //print '</div></div></div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/externalsite/frametop.php b/htdocs/externalsite/frametop.php
    index 5abc4e840a3..ee746d745cc 100644
    --- a/htdocs/externalsite/frametop.php
    +++ b/htdocs/externalsite/frametop.php
    @@ -22,7 +22,7 @@
      *		\brief      Top frame to show external web application
      */
     
    -require ("../main.inc.php");
    +require "../main.inc.php";
     
     // Load translation files required by the page
     $langs->load("externalsite");
    diff --git a/htdocs/fichinter/admin/fichinter_extrafields.php b/htdocs/fichinter/admin/fichinter_extrafields.php
    index 40fd63d7639..b74010c5882 100644
    --- a/htdocs/fichinter/admin/fichinter_extrafields.php
    +++ b/htdocs/fichinter/admin/fichinter_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -80,7 +80,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -93,8 +93,8 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    -    print load_fiche_titre($langs->trans('NewAttribute'));
    +	print '<br><div id="newattrib"></div>';
    +	print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
     }
    diff --git a/htdocs/fichinter/admin/fichinterdet_extrafields.php b/htdocs/fichinter/admin/fichinterdet_extrafields.php
    index eab70d5d585..4dceaf9c354 100644
    --- a/htdocs/fichinter/admin/fichinterdet_extrafields.php
    +++ b/htdocs/fichinter/admin/fichinterdet_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -81,7 +81,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -94,8 +94,8 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    -    print load_fiche_titre($langs->trans('NewAttribute'));
    +	print '<br><div id="newattrib"></div>';
    +	print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
     }
    diff --git a/htdocs/fichinter/card-rec.php b/htdocs/fichinter/card-rec.php
    new file mode 100644
    index 00000000000..456c27a4584
    --- /dev/null
    +++ b/htdocs/fichinter/card-rec.php
    @@ -0,0 +1,959 @@
    +<?php
    +/* Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012 Regis Houssin		<regis.houssin@inodbox.com>
    + * Copyright (C) 2013	   Florian Henry		<florian.henry@open-concept.pro>
    + * Copyright (C) 2013	   Juanjo Menent		<jmenent@2byte.es>
    + * Copyright (C) 2015	   Jean-François Ferry	<jfefe@aternatik.fr>
    + * Copyright (C) 2012	   Cedric Salvador		<csalvador@gpcsolutions.fr>
    + * Copyright (C) 2015	   Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2016-2018 Charlie Benke		<charlie@patas-monkey.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *	\file	   fichinter/card-rec.php
    + *	\ingroup	fichinter
    + *	\brief	  Page to show predefined fichinter
    + */
    +
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinterrec.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/fichinter.lib.php';
    +
    +require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
    +if (! empty($conf->projet->enabled)) {
    +	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
    +	require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
    +}
    +if (! empty($conf->contrat->enabled)) {
    +	require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
    +	require_once DOL_DOCUMENT_ROOT . '/core/class/html.formcontract.class.php';
    +}
    +
    +// Load translation files required by the page
    +$langs->loadLangs(array("interventions","admin","compta","bills"));
    +
    +// Security check
    +$id=(GETPOST('fichinterid', 'int')?GETPOST('fichinterid', 'int'):GETPOST('id', 'int'));
    +$action=GETPOST('action', 'alpha');
    +if ($user->societe_id) $socid=$user->societe_id;
    +$objecttype = 'fichinter_rec';
    +if ($action == "create" || $action == "add") $objecttype = '';
    +$result = restrictedArea($user, 'ficheinter', $id, $objecttype);
    +
    +if ($page == -1)
    +	$page = 0 ;
    +
    +$limit = GETPOST('limit', 'int')?GETPOST('limit', 'int'):$conf->liste_limit;
    +$offset = $limit * $page ;
    +
    +if ($sortorder == "")
    +	$sortorder="DESC";
    +
    +if ($sortfield == "")
    +	$sortfield="f.datec";
    +
    +$object = new FichinterRec($db);
    +
    +
    +$arrayfields=array(
    +	'f.titre'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
    +	's.nom'=>array('label'=>$langs->trans("ThirdParty"), 'checked'=>1),
    +	'f.fk_contrat'=>array('label'=>$langs->trans("Contract"), 'checked'=>1),
    +	'f.duree'=>array('label'=>$langs->trans("Duration"), 'checked'=>1),
    +	'f.total_ttc'=>array('label'=>$langs->trans("AmountTTC"), 'checked'=>1),
    +	'f.frequency'=>array('label'=>$langs->trans("RecurringInvoiceTemplate"), 'checked'=>1),
    +	'f.nb_gen_done'=>array('label'=>$langs->trans("NbOfGenerationDone"), 'checked'=>1),
    +	'f.date_last_gen'=>array('label'=>$langs->trans("DateLastGeneration"), 'checked'=>1),
    +	'f.date_when'=>array('label'=>$langs->trans("NextDateToExecution"), 'checked'=>1),
    +	'f.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500),
    +	'f.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500),
    +);
    +
    +
    +/*
    + * Actions
    + */
    +
    +
    +// Create predefined intervention
    +if ($action == 'add') {
    +	if (! GETPOST('titre')) {
    +		setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->trans("Title")), null, 'errors');
    +		$action = "create";
    +		$error++;
    +	}
    +
    +	if (! GETPOST('socid')) {
    +		setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->trans("Customer")), null, 'errors');
    +		$action = "create";
    +		$error++;
    +	}
    +
    +	// gestion des fréquences et des échéances
    +	$frequency=GETPOST('frequency', 'int');
    +	$reyear=GETPOST('reyear');
    +	$remonth=GETPOST('remonth');
    +	$reday=GETPOST('reday');
    +	$rehour=GETPOST('rehour');
    +	$remin=GETPOST('remin');
    +	$nb_gen_max = (GETPOST('nb_gen_max', 'int')?GETPOST('nb_gen_max', 'int'):0);
    +	if (GETPOST('frequency')) {
    +		if (empty($reyear) || empty($remonth) || empty($reday)) {
    +			setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->trans("Date")), null, 'errors');
    +			$action = "create";
    +			$error++;
    +		}
    +		if ($nb_gen_max === '') {
    +			setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->trans("MaxPeriodNumber")), null, 'errors');
    +			$action = "create";
    +			$error++;
    +		}
    +	}
    +
    +	if (! $error) {
    +		$object->id_origin		= $id;
    +		$object->titre			= GETPOST('titre', 'alpha');
    +		$object->description	= GETPOST('description', 'alpha');
    +		$object->socid			= GETPOST('socid', 'alpha');
    +		$object->fk_project		= GETPOST('projectid', 'int');
    +		$object->fk_contract	= GETPOST('contractid', 'int');
    +
    +		$object->frequency = $frequency;
    +		$object->unit_frequency = GETPOST('unit_frequency', 'alpha');
    +		$object->nb_gen_max = $nb_gen_max;
    +		$object->auto_validate = GETPOST('auto_validate', 'int');
    +
    +		$date_next_execution = dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear);
    +		$object->date_when = $date_next_execution;
    +
    +		if ($object->create($user) > 0) {
    +			$id = $object->id;
    +			$action = '';
    +		} else {
    +			setEventMessages($object->error, $object->errors, 'errors');
    +			$action = "create";
    +		}
    +	}
    +} elseif ($action == 'createfrommodel') {
    +	$newinter = new Fichinter($db);
    +
    +	// on récupère les enregistrements
    +	$object->fetch($id);
    +
    +
    +	// on transfert les données de l'un vers l'autre
    +	if ($object->socid > 0) {
    +		$newinter->socid=$object->socid;
    +		$newinter->fk_projet=$object->fk_projet;
    +		$newinter->fk_contrat=$object->fk_contrat;
    +	} else
    +		$newinter->socid=GETPOST("socid");
    +
    +	$newinter->entity=$object->entity;
    +	$newinter->duree=$object->duree;
    +
    +	$newinter->description=$object->description;
    +	$newinter->note_private=$object->note_private;
    +	$newinter->note_public=$object->note_public;
    +
    +	// on créer un nouvelle intervention
    +	$extrafields = new ExtraFields($db);
    +	$extralabels = $extrafields->fetch_name_optionals_label($newinter->table_element);
    +	$array_options = $extrafields->getOptionalsFromPost($newinter->table_element);
    +	$newinter->array_options = $array_options;
    +
    +	$newfichinterid = $newinter->create($user);
    +
    +	if ($newfichinterid > 0) {
    +		// on ajoute les lignes de détail ensuite
    +		foreach ($object->lines as $ficheinterligne)
    +			$newinter->addline($user, $newfichinterid, $ficheinterligne->desc, "", $ficheinterligne->duree, '');
    +
    +		// on update le nombre d'inter crée à partir du modèle
    +		$object->updateNbGenDone();
    +		//on redirige vers la fiche d'intervention nouvellement crée
    +		header('Location: '.DOL_URL_ROOT.'/fichinter/card.php?id='.$newfichinterid);
    +		exit;
    +	} else {
    +		setEventMessages($newinter->error, $newinter->errors, 'errors');
    +		$action='';
    +	}
    +} elseif ($action == 'delete' && $user->rights->ficheinter->supprimer) {
    +		// delete modele
    +	$object->fetch($id);
    +	$object->delete();
    +	$id = 0 ;
    +	header('Location: '.$_SERVER["PHP_SELF"]);
    +	exit;
    +} elseif ($action == 'setfrequency' && $user->rights->ficheinter->creer) {
    +	// Set frequency and unit frequency
    +	$object->fetch($id);
    +	$object->setFrequencyAndUnit(GETPOST('frequency', 'int'), GETPOST('unit_frequency', 'alpha'));
    +} elseif ($action == 'setdate_when' && $user->rights->ficheinter->creer) {
    +	// Set next date of execution
    +	$object->fetch($id);
    +	$date = dol_mktime(
    +					GETPOST('date_whenhour'), GETPOST('date_whenmin'), 0,
    +					GETPOST('date_whenmonth'), GETPOST('date_whenday'), GETPOST('date_whenyear')
    +	);
    +	if (!empty($date)) $object->setNextDate($date);
    +} elseif ($action == 'setnb_gen_max' && $user->rights->ficheinter->creer) {
    +// Set max period
    +	$object->fetch($id);
    +	$object->setMaxPeriod(GETPOST('nb_gen_max', 'int'));
    +}
    +
    +
    +/*
    + *	View
    + */
    +
    +llxHeader('', $langs->trans("RepeatableInterventional"), 'ch-fichinter.html#s-fac-fichinter-rec');
    +
    +$form = new Form($db);
    +$companystatic = new Societe($db);
    +if (! empty($conf->contrat->enabled))
    +	$contratstatic = new Contrat($db);
    +if (! empty($conf->projet->enabled))
    +	$projectstatic = new Project($db);
    +
    +$now = dol_now();
    +$tmparray=dol_getdate($now);
    +$today = dol_mktime(
    +				23, 59, 59,
    +				$tmparray['mon'], $tmparray['mday'], $tmparray['year']
    +);   // Today is last second of current day
    +
    +
    +
    +/*
    + * Create mode
    + */
    +if ($action == 'create') {
    +	print load_fiche_titre($langs->trans("CreateRepeatableIntervention"), '', 'title_commercial.png');
    +
    +	$object = new Fichinter($db);   // Source invoice
    +	//$object = new Managementfichinter($db);   // Source invoice
    +
    +	if ($object->fetch($id, $ref) > 0) {
    +		print '<form action="fiche-rec.php" method="post">';
    +		print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +		print '<input type="hidden" name="action" value="add">';
    +		print '<input type="hidden" name="fichinterid" value="'.$object->id.'">';
    +
    +		dol_fiche_head();
    +
    +		$rowspan=4;
    +		if (! empty($conf->projet->enabled) && $object->fk_project > 0) $rowspan++;
    +		if (! empty($conf->contrat->enabled) && $object->fk_contrat > 0) $rowspan++;
    +
    +		print '<table class="border" width="100%">';
    +
    +		$object->fetch_thirdparty();
    +
    +		// Third party
    +		print '<tr><td>'.$langs->trans("Customer").'</td><td>';
    +		print $form->select_company($object->thirdparty->id, 'socid', '', 0, 1);
    +
    +//		.$object->thirdparty->getNomUrl(1,'customer').
    +		print '</td><td>';
    +		print $langs->trans("Comment");
    +		print '</td></tr>';
    +
    +		// Title
    +		print '<tr><td class="fieldrequired">'.$langs->trans("Title").'</td><td>';
    +		print '<input class="flat" type="text" name="titre" size="24" value="'.$_POST["titre"].'">';
    +		print '</td>';
    +
    +		// Note
    +		print '<td rowspan="'.$rowspan.'" valign="top">';
    +		print '<textarea class="flat" name="description" wrap="soft" cols="60" rows="'.ROWS_4.'">';
    +		print $object->description.'</textarea>';
    +		print '</td></tr>';
    +
    +		// Author
    +		print "<tr><td>".$langs->trans("Author")."</td><td>".$user->getFullName($langs)."</td></tr>";
    +
    +		if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) {
    +			// Duration
    +			print '<tr><td>'.$langs->trans("TotalDuration").'</td>';
    +			print '<td colspan="3">'.convertSecondToTime(
    +							$object->duration, 'all',
    +							$conf->global->MAIN_DURATION_OF_WORKDAY
    +			).'</td>';
    +			print '</tr>';
    +		}
    +
    +		// Project
    +		if (! empty($conf->projet->enabled)) {
    +			$formproject = new FormProjets($db);
    +			print "<tr><td>".$langs->trans("Project")."</td><td>";
    +			$projectid = GETPOST('projectid')?GETPOST('projectid'):$object->fk_project;
    +
    +			$numprojet = $formproject->select_projects(
    +							$object->thirdparty->id, $projectid, 'projectid',
    +							0, 0, 1, 0, 0, 0, 0, '', 0, 0, ''
    +			);
    +			print ' &nbsp; <a href="'.DOL_URL_ROOT.'/projet/card.php?socid='.$object->thirdparty->id;
    +			print '&action=create&status=1&backtopage='.urlencode($_SERVER["PHP_SELF"]).'?action=create';
    +			print '&socid='.$object->thirdparty->id.(!empty($id)?'&id='.$id:'').'">';
    +			print $langs->trans("AddProject").'</a>';
    +			print "</td></tr>";
    +		}
    +
    +		// Contrat
    +		if (! empty($conf->contrat->enabled)) {
    +			$formcontract = new FormContract($db);
    +			print "<tr><td>".$langs->trans("Contract")."</td><td>";
    +			$contractid = GETPOST('contractid')?GETPOST('contractid'):$object->fk_contract;
    +			$numcontract = $formcontract->select_contract($object->thirdparty->id, $contractid, 'contracttid');
    +			print "</td></tr>";
    +		}
    +		print "</table>";
    +
    +		print '<br><br>';
    +
    +		/// frequency & duration
    +		// Autogeneration
    +		$title = $langs->trans("Recurrence");
    +		print load_fiche_titre($title, '', 'calendar');
    +
    +		print '<table class="border" width="100%">';
    +
    +		// Frequency
    +		print '<tr><td class="titlefieldcreate">';
    +		print $form->textwithpicto($langs->trans("Frequency"), $langs->transnoentitiesnoconv('toolTipFrequency'));
    +		print "</td><td>";
    +		print "<input type='text' name='frequency' value='".GETPOST('frequency', 'int')."' size='4' />&nbsp;";
    +		print $form->selectarray(
    +						'unit_frequency',
    +						array('d'=>$langs->trans('Day'), 'm'=>$langs->trans('Month'), 'y'=>$langs->trans('Year')),
    +						(GETPOST('unit_frequency')?GETPOST('unit_frequency'):'m')
    +		);
    +		print "</td></tr>";
    +
    +		// First date of execution for cron
    +		print "<tr><td>".$langs->trans('NextDateToExecution')."</td><td>";
    +		if ($date_next_execution != "")
    +			$date_next_execution = (GETPOST('remonth') ? dol_mktime(
    +							12, 0, 0, GETPOST('remonth'), GETPOST('reday'), GETPOST('reyear')
    +			) : -1);
    +		print $form->selectDate($date_next_execution, '', 1, 1, '', "add", 1, 1);
    +		print "</td></tr>";
    +
    +		// Number max of generation
    +		print "<tr><td>".$langs->trans("MaxPeriodNumber")."</td><td>";
    +		print '<input type="text" name="nb_gen_max" value="'.GETPOST('nb_gen_max').'" size="5" />';
    +		print "</td></tr>";
    +
    +		print "</table>";
    +
    +		print '<br>';
    +
    +		$title = $langs->trans("ProductsAndServices");
    +		if (empty($conf->service->enabled))
    +			$title = $langs->trans("Products");
    +		else if (empty($conf->product->enabled))
    +			$title = $langs->trans("Services");
    +
    +		print load_fiche_titre($title, '', '');
    +
    +		/*
    +		 * Invoice lines
    +		 */
    +		print '<table class="notopnoleftnoright" width="100%">';
    +		print '<tr><td colspan="3">';
    +
    +		$sql = 'SELECT l.*';
    +		$sql.= " FROM ".MAIN_DB_PREFIX."fichinterdet as l";
    +		$sql.= " WHERE l.fk_fichinter= ".$object->id;
    +		$sql.= " AND l.fk_product is null ";
    +		$sql.= " ORDER BY l.rang";
    +
    +		$result = $db->query($sql);
    +		if ($result) {
    +			$num = $db->num_rows($result);
    +			$i = 0; $total = 0;
    +
    +			echo '<table class="noborder" width="100%">';
    +			if ($num) {
    +				print '<tr class="liste_titre">';
    +				print '<td>'.$langs->trans("Description").'</td>';
    +				print '<td align="center">'.$langs->trans("Duration").'</td>';
    +				print "</tr>\n";
    +			}
    +			$var=true;
    +			while ($i < $num) {
    +				$objp = $db->fetch_object($result);
    +				print '<tr class="oddeven">';
    +
    +				// Show product and description
    +
    +				print '<td>';
    +				print '<a name="'.$objp->rowid.'"></a>'; // ancre pour retourner sur la ligne
    +
    +				$text = img_object($langs->trans('Service'), 'service');
    +
    +				print $text.' '.nl2br($objp->description);
    +
    +				// Qty
    +				print '<td align="center">'.convertSecondToTime($objp->duree).'</td>';
    +				print "</tr>";
    +
    +				$i++;
    +			}
    +			$db->free($result);
    +		} else
    +			print $db->error();
    +		print "</table>";
    +
    +		print '</td></tr>';
    +
    +		print "</table>\n";
    +
    +		dol_fiche_end();
    +
    +		print '<div align="center"><input type="submit" class="button" value="'.$langs->trans("Create").'">';
    +		print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
    +		print '<input type="button" class="button" value="'.$langs->trans("Cancel").'" onClick="javascript:history.go(-1)">';
    +		print '</div>';
    +		print "</form>\n";
    +	}
    +	else
    +		dol_print_error('', "Error, no invoice ".$object->id);
    +} elseif ($action == 'selsocforcreatefrommodel') {
    +	print load_fiche_titre($langs->trans("CreateRepeatableIntervention"), '', 'title_commercial.png');
    +	dol_fiche_head('');
    +
    +	print '<form name="fichinter" action="'.$_SERVER['PHP_SELF'].'" method="POST">';
    +	print '<table class="border" width="100%">';
    +	print '<tr><td class="fieldrequired">'.$langs->trans("ThirdParty").'</td><td>';
    +	print $form->select_company('', 'socid', '', 1, 1);
    +	print '</td></tr>';
    +	print '</table>';
    +
    +	dol_fiche_end();
    +
    +	print '<div class="center">';
    +	print '<input type="hidden" name="action" value="createfrommodel">';
    +	print '<input type="hidden" name="id" value="'.$id.'">';
    +	print '<input type="submit" class="button" value="'.$langs->trans("CreateDraftIntervention").'">';
    +	print '</div>';
    +
    +	print '</form>';
    +} else {
    +	/*
    +	 * View mode
    +	 *
    +	 */
    +	if ($id > 0) {
    +		if ($object->fetch($id) > 0) {
    +			$object->fetch_thirdparty();
    +
    +			$author = new User($db);
    +			$author->fetch($object->user_author);
    +
    +			$head = fichinter_rec_prepare_head($object);
    +
    +			dol_fiche_head($head, 'card', $langs->trans("PredefinedInterventional"), 0, 'intervention');
    +
    +			// Intervention card
    +			$linkback = '<a href="card-rec.php">'.$langs->trans("BackToList").'</a>';
    +
    +			$morehtmlref='<div class="refidno">';
    +			// Thirdparty
    +
    +			$morehtmlref.=$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1);
    +			// Project
    +			if (! empty($conf->projet->enabled)) {
    +				$formproject = new FormProjets($db);
    +				$langs->load("projects");
    +				$morehtmlref.='<br>'.$langs->trans('Project') . ' ';
    +				if ($user->rights->ficheinter->creer) {
    +					if ($action != 'classify') {
    +						$morehtmlref.='<a href="'.$_SERVER['PHP_SELF'].'?action=classify&amp;id='.$object->id.'">';
    +						$morehtmlref.=img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> : ';
    +					}
    +					if ($action == 'classify') {
    +
    +						$morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';
    +						$morehtmlref.='<input type="hidden" name="action" value="classin">';
    +						$morehtmlref.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +						$morehtmlref.=$formproject->select_projects(
    +										$object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1
    +						);
    +						$morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';
    +						$morehtmlref.='</form>';
    +					} else {
    +						$morehtmlref.=$form->form_project(
    +										$_SERVER['PHP_SELF'].'?id='.$object->id,
    +										$object->socid, $object->fk_project,
    +										'none', 0, 0, 0, 1
    +						);
    +					}
    +				} else {
    +					if (! empty($object->fk_project)) {
    +						$proj = new Project($db);
    +						$proj->fetch($object->fk_project);
    +						$morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id='.$object->fk_project.'"';
    +						$morehtmlref.='title="'.$langs->trans('ShowProject').'">';
    +						$morehtmlref.=$proj->ref;
    +						$morehtmlref.='</a>';
    +					} else {
    +						$morehtmlref.='';
    +					}
    +				}
    +			}
    +			$morehtmlref.='</div>';
    +
    +			dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
    +
    +			print '<div class="fichecenter">';
    +			print '<div class="fichehalfleft">';
    +			print '<div class="underbanner clearboth"></div>';
    +
    +			print '<table class="border" width="100%">';
    +
    +			print "<tr><td>".$langs->trans("Author").'</td><td colspan="3">'.$author->getFullName($langs)."</td></tr>";
    +
    +			if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) {
    +				// Duration
    +				print '<tr><td class="titlefield">'.$langs->trans("TotalDuration").'</td>';
    +				print '<td colspan="3">';
    +				print convertSecondToTime($object->duration, 'all', $conf->global->MAIN_DURATION_OF_WORKDAY);
    +				print '</td></tr>';
    +			}
    +
    +			print '<tr><td>'.$langs->trans("Description").'</td><td colspan="3">'.nl2br($object->description)."</td></tr>";
    +
    +			// Contrat
    +			if (! empty($conf->contrat->enabled)) {
    +				$langs->load('contrat');
    +				print '<tr>';
    +				print '<td>';
    +
    +				print '<table class="nobordernopadding" width="100%"><tr><td>';
    +				print $langs->trans('Contract');
    +				print '</td>';
    +				if ($action != 'contrat') {
    +					print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=contrat&amp;id='.$object->id.'">';
    +					print img_edit($langs->trans('SetContract'), 1);
    +					print '</a></td>';
    +				}
    +				print '</tr></table>';
    +				print '</td><td>';
    +				if ($action == 'contrat') {
    +					$formcontract= new Formcontract($db);
    +					$formcontract->formSelectContract(
    +									$_SERVER["PHP_SELF"].'?id='.$object->id, $object->socid,
    +									$object->fk_contrat, 'contratid', 0, 1
    +					);
    +				} else {
    +					if ($object->fk_contrat) {
    +						$contratstatic = new Contrat($db);
    +						$contratstatic->fetch($object->fk_contrat);
    +						print $contratstatic->getNomUrl(0, '', 1);
    +					} else
    +						print "&nbsp;";
    +				}
    +				print '</td>';
    +				print '</tr>';
    +			}
    +			print "</table>";
    +			print '</div>';
    +
    +			print '<div class="fichehalfright">';
    +			print '<div class="ficheaddleft">';
    +			print '<div class="underbanner clearboth"></div>';
    +
    +			print '<table class="border centpercent">';
    +
    +			$title = $langs->trans("Recurrence");
    +			print load_fiche_titre($title, '', 'calendar');
    +
    +			print '<table class="border" width="100%">';
    +
    +			// if "frequency" is empty or = 0, the reccurence is disabled
    +			print '<tr><td style="width: 50%">';
    +			print '<table class="nobordernopadding" width="100%"><tr><td>';
    +			print $langs->trans('Frequency');
    +			print '</td>';
    +			if ($action != 'editfrequency' && $user->rights->ficheinter->creer) {
    +				print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editfrequency&amp;id='.$id.'">';
    +				print img_edit($langs->trans('Edit'), 1) . '</a></td>';
    +			}
    +			print '</tr></table>';
    +			print '</td><td>';
    +			if ($action == 'editfrequency') {
    +				print '<form method="post" action="'.$_SERVER["PHP_SELF"] . '?id=' . $object->id.'">';
    +				print '<input type="hidden" name="action" value="setfrequency">';
    +				print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +				print '<table class="nobordernopadding" cellpadding="0" cellspacing="0">';
    +				print '<tr><td>';
    +				print "<input type='text' name='frequency' value='".$object->frequency."' size='5' />&nbsp;";
    +				print $form->selectarray(
    +								'unit_frequency',
    +								array('d'=>$langs->trans('Day'), 'm'=>$langs->trans('Month'), 'y'=>$langs->trans('Year')),
    +								($object->unit_frequency?$object->unit_frequency:'m')
    +				);
    +				print '</td>';
    +				print '<td align="left"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td>';
    +				print '</tr></table></form>';
    +			} else {
    +				if ($object->frequency > 0)
    +					print $langs->trans('FrequencyPer_'.$object->unit_frequency, $object->frequency);
    +				else
    +					print $langs->trans("NotARecurringInterventionalTemplate");
    +			}
    +			print '</td></tr>';
    +
    +			// Date when
    +			print '<tr><td>';
    +			if ( $user->rights->ficheinter->creer && ($action == 'date_when' || $object->frequency > 0)) {
    +				print $form->editfieldkey(
    +								$langs->trans("NextDateToExecution"), 'date_when', $object->date_when,
    +								$object, $user->rights->facture->creer, 'day'
    +				);
    +			} else {
    +				print $langs->trans("NextDateToExecution");
    +			}
    +			print '</td><td>';
    +			if ($action == 'date_when' || $object->frequency > 0) {
    +				print $form->editfieldval(
    +								$langs->trans("NextDateToExecution"), 'date_when', $object->date_when,
    +								$object, $user->rights->facture->creer, 'day'
    +				);
    +			}
    +			print '</td>';
    +			print '</tr>';
    +
    +			// Max period / Rest period
    +			print '<tr><td>';
    +			if ($user->rights->ficheinter->creer && ($action == 'nb_gen_max' || $object->frequency > 0)) {
    +				print $form->editfieldkey(
    +								$langs->trans("MaxPeriodNumber"), 'nb_gen_max', $object->nb_gen_max,
    +								$object, $user->rights->facture->creer
    +				);
    +			} else
    +				print $langs->trans("MaxPeriodNumber");
    +
    +			print '</td><td>';
    +			if ($action == 'nb_gen_max' || $object->frequency > 0) {
    +				print $form->editfieldval(
    +							$langs->trans("MaxPeriodNumber"), 'nb_gen_max', $object->nb_gen_max?$object->nb_gen_max:'',
    +							$object, $user->rights->facture->creer
    +				);
    +			}
    +			else
    +				print '';
    +
    +			print '</td>';
    +			print '</tr>';
    +
    +			print '</table>';
    +
    +			// Frequencry/Recurring section
    +			if ($object->frequency > 0) {
    +				print '<br>';
    +				if (empty($conf->cron->enabled)) {
    +					$txtinfoadmin=$langs->trans(
    +									"EnableAndSetupModuleCron",
    +									$langs->transnoentitiesnoconv("Module2300Name")
    +					);
    +					print info_admin($txtinfoadmin);
    +				}
    +				print '<div class="underbanner clearboth"></div>';
    +				print '<table class="border centpercent">';
    +
    +				// Nb of generation already done
    +				print '<tr><td style="width: 50%">'.$langs->trans("NbOfGenerationDone").'</td>';
    +				print '<td>';
    +				print $object->nb_gen_done?$object->nb_gen_done:'0';
    +				print '</td>';
    +				print '</tr>';
    +
    +				// Date last
    +				print '<tr><td>';
    +				print $langs->trans("DateLastGeneration");
    +				print '</td><td>';
    +				print dol_print_date($object->date_last_gen, 'dayhour');
    +				print '</td>';
    +				print '</tr>';
    +				print '</table>';
    +				print '<br>';
    +			}
    +
    +			print '</div>';
    +			print '</div>';
    +			print '</div>';
    +
    +			print '<div class="clearboth"></div><br>';
    +
    +			/*
    +			 * Lines
    +			 */
    +
    +			$title = $langs->trans("ProductsAndServices");
    +			if (empty($conf->service->enabled))
    +				$title = $langs->trans("Products");
    +			else if (empty($conf->product->enabled))
    +				$title = $langs->trans("Services");
    +
    +			print load_fiche_titre($title);
    +
    +			print '<table class="noborder" width="100%">';
    +			print '<tr class="liste_titre">';
    +			print '<td>'.$langs->trans("Description").'</td>';
    +			print '<td align="center">'.$langs->trans("Duration").'</td>';
    +			print '</tr>';
    +
    +			$num = count($object->lines);
    +			$i = 0;
    +			while ($i < $num) {
    +
    +				// Show product and description
    +				if (isset($object->lines[$i]->product_type))
    +					$type=$object->lines[$i]->product_type;
    +				else
    +					$object->lines[$i]->fk_product_type;
    +				// Try to enhance type detection using date_start and date_end for free lines when type
    +				// was not saved.
    +				if (! empty($objp->date_start)) $type=1;
    +				if (! empty($objp->date_end)) $type=1;
    +
    +				// Show line
    +				print '<tr class="oddeven">';
    +				print '<td>';
    +				$text = img_object($langs->trans('Service'), 'service');
    +				print $text.' '.nl2br($object->lines[$i]->desc);
    +				print '</td>';
    +
    +				print '<td align="center">'.convertSecondToTime($object->lines[$i]->duree).'</td>';
    +				print "</tr>\n";
    +				$i++;
    +			}
    +			print '</table>';
    +
    +			/**
    +			 * Barre d'actions
    +			 */
    +			print '<div class="tabsAction">';
    +
    +			if ($user->rights->ficheinter->creer) {
    +				print '<div class="inline-block divButAction">';
    +				print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=createfrommodel';
    +				print '&socid='.$object->thirdparty->id.'&id='.$object->id.'">';
    +				print $langs->trans("CreateFichInter").'</a></div>';
    +			}
    +
    +			if ($user->rights->ficheinter->supprimer) {
    +				print '<div class="inline-block divButAction">';
    +				print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?action=delete&id='.$object->id.'">';
    +				print $langs->trans('Delete').'</a></div>';
    +			}
    +			print '</div>';
    +		} else
    +			print $langs->trans("ErrorRecordNotFound");
    +	} else {
    +		/*
    +		 *  List mode
    +		 */
    +		$sql = "SELECT f.rowid as fich_rec, s.nom as name, s.rowid as socid, f.rowid as facid, f.titre, ";
    +		$sql.= " f.duree, f.fk_contrat, f.fk_projet, f.frequency, f.nb_gen_done, f.nb_gen_max,";
    +		$sql.= " f.date_last_gen, f.date_when, f.datec";
    +
    +		$sql.= " FROM ".MAIN_DB_PREFIX."fichinter_rec as f";
    +		$sql.= " , ".MAIN_DB_PREFIX."societe as s ";
    +		if (! $user->rights->societe->client->voir && ! $socid) {
    +			$sql .= " , ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +		}
    +		$sql.= " WHERE f.fk_soc = s.rowid";
    +		$sql.= " AND f.entity = ".$conf->entity;
    +		if ($socid)	$sql .= " AND s.rowid = ".$socid;
    +		if (! $user->rights->societe->client->voir && ! $socid) {
    +			$sql .= " AND s.rowid = sc.fk_soc AND sc.fk_user = ".$user->id;
    +		}
    +		if ($search_ref) $sql .= natural_search('f.titre', $search_ref);
    +		if ($search_societe) $sql .= natural_search('s.nom', $search_societe);
    +		if ($search_frequency == '1') $sql.= ' AND f.frequency > 0';
    +		if ($search_frequency == '0') $sql.= ' AND (f.frequency IS NULL or f.frequency = 0)';
    +
    +
    +		//$sql .= " ORDER BY $sortfield $sortorder, rowid DESC ";
    +		//	$sql .= $db->plimit($limit + 1, $offset);
    +
    +		$resql = $db->query($sql);
    +		if ($resql) {
    +			$num = $db->num_rows($resql);
    +			print_barre_liste(
    +							$langs->trans("RepeatableInterventional"), $page,
    +							$_SERVER['PHP_SELF'], "&socid=$socid", $sortfield, $sortorder,
    +							'', $num, '', 'title_commercial.png'
    +			);
    +
    +			print $langs->trans("ToCreateAPredefinedInterventional").'<br><br>';
    +
    +			$i = 0;
    +			print '<table class="noborder" width="100%">';
    +			print '<tr class="liste_titre">';
    +			print_liste_field_titre(
    +							$langs->trans("Ref"), $_SERVER['PHP_SELF'], "f.titre", "", "",
    +							'width="200px" align="left"', $sortfiled, $sortorder
    +			);
    +
    +			print_liste_field_titre(
    +							$langs->trans("Company"), $_SERVER['PHP_SELF'], "s.nom", "", "",
    +							'width="200px" align="left"', $sortfiled, $sortorder
    +			);
    +			if (! empty($conf->contrat->enabled))
    +				print_liste_field_titre(
    +								$langs->trans("Contract"), $_SERVER['PHP_SELF'],
    +								"f.fk_contrat", "", "",
    +								'width="100px" align="left"', $sortfiled, $sortorder
    +				);
    +
    +			if (! empty($conf->projet->enabled))
    +				print_liste_field_titre(
    +								$langs->trans("Project"), $_SERVER['PHP_SELF'],
    +								"f.fk_project", "", "",
    +								'width="100px" align="left"', $sortfiled, $sortorder
    +				);
    +			print_liste_field_titre(
    +							$langs->trans("Duration"), $_SERVER['PHP_SELF'],
    +							'f.duree', '', '',
    +							'width="50px" align="right"', $sortfiled, $sortorder
    +			);
    +			// Recurring or not
    +			print_liste_field_titre(
    +							$langs->trans("Frequency"), $_SERVER['PHP_SELF'],
    +							"f.frequency", "", "",
    +							'width="100px" align="center"', $sortfiled, $sortorder
    +			);
    +			print_liste_field_titre(
    +							$langs->trans("NbOfGenerationDone"), $_SERVER['PHP_SELF'],
    +							"f.nb_gen_done", "", "",
    +							'width="100px" align="center"', $sortfiled, $sortorder
    +			);
    +
    +			print_liste_field_titre(
    +							$langs->trans("DateLastGeneration"), $_SERVER['PHP_SELF'],
    +							"f.date_last_gen", "", "",
    +							'width="100px" align="center"', $sortfiled, $sortorder
    +			);
    +			print_liste_field_titre(
    +							$langs->trans("NextDateToIntervention"), $_SERVER['PHP_SELF'],
    +							"f.date_when", "", "",
    +							'width="100px" align="center"', $sortfiled, $sortorder
    +			);
    +			print '<th width="100px"></th>';
    +			print "</tr>\n";
    +
    +
    +			// les filtres à faire ensuite
    +
    +			if ($num > 0) {
    +				while ($i < min($num, $limit)) {
    +					$objp = $db->fetch_object($resql);
    +
    +					print '<tr class="oddeven">';
    +					print '<td><a href="'.$_SERVER['PHP_SELF'].'?id='.$objp->fich_rec.'">';
    +					print img_object($langs->trans("ShowIntervention"), "intervention").' '.$objp->titre;
    +					print "</a></td>\n";
    +					if ($objp->socid) {
    +						$companystatic->id=$objp->socid;
    +						$companystatic->name=$objp->name;
    +						print '<td>'.$companystatic->getNomUrl(1, 'customer').'</td>';
    +					} else
    +						print '<td>'.$langs->trans("None").'</td>';
    +
    +					if (! empty($conf->contrat->enabled)) {
    +						print '<td>';
    +						if ($objp->fk_contrat >0) {
    +							$contratstatic->fetch($objp->fk_contrat);
    +							print $contratstatic->getNomUrl(1);
    +						}
    +						print '</td>';
    +					}
    +					if (! empty($conf->projet->enabled)) {
    +						print '<td>';
    +						if ($objp->fk_project > 0) {
    +							$projectstatic->fetch($objp->fk_projet);
    +							print $projectstatic->getNomUrl(1);
    +						}
    +						print '</td>';
    +					}
    +
    +					print '<td align=right>'.convertSecondToTime($objp->duree).'</td>';
    +
    +					print '<td align="center">'.yn($objp->frequency?1:0).'</td>';
    +
    +					print '<td align="center">';
    +					if ($objp->frequency) {
    +						print $objp->nb_gen_done.($objp->nb_gen_max>0?' / '. $objp->nb_gen_max:'') ;
    +						print '</td>';
    +
    +						print '<td align="center">';
    +						print dol_print_date($db->jdate($objp->date_last_gen), 'day') ;
    +						print '</td>';
    +
    +						print '<td align="center">';
    +						print dol_print_date($db->jdate($objp->date_when), 'day');
    +						print '</td>';
    +					} else {
    +						print '<span class="opacitymedium">'.$langs->trans('NA').'</span>';
    +						print '</td>';
    +						print '<td align="center">';
    +						print '<span class="opacitymedium">'.$langs->trans('NA').'</span>';
    +						print '</td>';
    +						print '<td align="center">';
    +						print '<span class="opacitymedium">'.$langs->trans('NA').'</span>';
    +						print '</td>';
    +					}
    +
    +					if ($user->rights->ficheinter->creer) {
    +						// Action column
    +						print '<td align="center">';
    +						if ($user->rights->ficheinter->creer) {
    +							if (empty($objp->frequency) || $db->jdate($objp->date_when) <= $today) {
    +								print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?action=createfrommodel';
    +								print '&socid='.$objp->socid.'&id='.$objp->fich_rec.'">';
    +								print $langs->trans("CreateFichInter").'</a>';
    +							} else
    +								print $langs->trans("DateIsNotEnough");
    +						} else
    +							print "&nbsp;";
    +
    +						print "</td>";
    +
    +						print "</tr>\n";
    +						$i++;
    +					}
    +				}
    +			} else
    +				print '<tr class="oddeven"><td colspan="6">'.$langs->trans("NoneF").'</td></tr>';
    +
    +			print "</table>";
    +			$db->free($resql);
    +		} else
    +			dol_print_error($db);
    +	}
    +}
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php
    index 15b75495c38..756613d6a8f 100644
    --- a/htdocs/fichinter/card.php
    +++ b/htdocs/fichinter/card.php
    @@ -1,12 +1,13 @@
     <?php
     /* Copyright (C) 2002-2007	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2018	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2017  Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2013       Florian Henry           <florian.henry@open-concept.pro>
      * Copyright (C) 2014-2018  Ferran Marcet           <fmarcet@2byte.es>
    - * Copyright (C) 2014-2015 	Charlie Benke           <charlies@patas-monkey.com>
    + * Copyright (C) 2014-2018  Charlene Benke          <charlies@patas-monkey.com>
      * Copyright (C) 2015-2016  Abbes Bahfir            <bafbes@gmail.com>
    + * Copyright (C) 2018 		Philippe Grand       	<philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -258,7 +259,7 @@ if (empty($reshook))
     				// Extrafields
     				$extrafields = new ExtraFields($db);
     				$extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
    -				$array_options = $extrafields->getOptionalsFromPost($extralabels);
    +				$array_options = $extrafields->getOptionalsFromPost($object->table_element);
     
     		        $object->array_options = $array_options;
     
    @@ -378,10 +379,8 @@ if (empty($reshook))
     									$error++;
     									break;
     								}
    -
     							}
     						}
    -
     		            }
     		            else
     		            {
    @@ -408,7 +407,7 @@ if (empty($reshook))
     		    	{
     		    		// Extrafields
     		    		$extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
    -		    		$array_options = $extrafields->getOptionalsFromPost($extralabels);
    +		    		$array_options = $extrafields->getOptionalsFromPost($object->table_element);
     
     		    		$object->array_options = $array_options;
     
    @@ -1099,7 +1098,6 @@ if ($action == 'create')
     
     		print '</form>';
     	}
    -
     }
     else if ($id > 0 || ! empty($ref))
     {
    @@ -1471,8 +1469,6 @@ else if ($id > 0 || ! empty($ref))
     					$line->fetch_optionals();
     
     					print $line->showOptionals($extrafieldsline, 'view', array('style'=>$bc[$var], 'colspan'=>5));
    -
    -
     				}
     
     				// Line in update mode
    @@ -1490,8 +1486,11 @@ else if ($id > 0 || ! empty($ref))
     
     					// Date d'intervention
     					print '<td align="center" class="nowrap">';
    -                                        if (!empty($conf->global->FICHINTER_DATE_WITHOUT_HOUR)) $form->select_date($db->jdate($objp->date_intervention),'di',0,0,0,"date_intervention");
    -                                        else $form->select_date($db->jdate($objp->date_intervention),'di',1,1,0,"date_intervention");
    +                    if (!empty($conf->global->FICHINTER_DATE_WITHOUT_HOUR)) {
    +                        print $form->selectDate($db->jdate($objp->date_intervention),'di',0,0,0,"date_intervention");
    +                    } else {
    +                        print $form->selectDate($db->jdate($objp->date_intervention),'di',1,1,0,"date_intervention");
    +                    }
     					print '</td>';
     
                         // Duration
    @@ -1516,8 +1515,6 @@ else if ($id > 0 || ! empty($ref))
     					$line->fetch_optionals();
     
     					print $line->showOptionals($extrafieldsline, 'edit', array('style'=>$bc[$var], 'colspan'=>5));
    -
    -
     				}
     
     				$i++;
    @@ -1556,18 +1553,25 @@ else if ($id > 0 || ! empty($ref))
                     print '<td align="center" class="nowrap">';
     				$now=dol_now();
     				$timearray=dol_getdate($now);
    -				if (! GETPOST('diday','int')) $timewithnohour=dol_mktime(0,0,0,$timearray['mon'],$timearray['mday'],$timearray['year']);
    -				else $timewithnohour=dol_mktime(GETPOST('dihour','int'),GETPOST('dimin','int'), 0,GETPOST('dimonth','int'),GETPOST('diday','int'),GETPOST('diyear','int'));
    -                                if (!empty($conf->global->FICHINTER_DATE_WITHOUT_HOUR)) $form->select_date($timewithnohour,'di',0,0,0,"addinter");
    -                                else $form->select_date($timewithnohour,'di',1,1,0,"addinter");
    +				if (! GETPOST('diday','int')) {
    +                    $timewithnohour=dol_mktime(0,0,0,$timearray['mon'],$timearray['mday'],$timearray['year']);
    +                } else {
    +                    $timewithnohour=dol_mktime(GETPOST('dihour','int'),GETPOST('dimin','int'), 0,GETPOST('dimonth','int'),GETPOST('diday','int'),GETPOST('diyear','int'));
    +                }
    +                if (!empty($conf->global->FICHINTER_DATE_WITHOUT_HOUR)) {
    +                    print $form->selectDate($timewithnohour,'di',0,0,0,"addinter");
    +                } else {
    +                    print $form->selectDate($timewithnohour,'di',1,1,0,"addinter");
    +                }
     				print '</td>';
     
                     // Duration
                     print '<td align="right">';
                     if (empty($conf->global->FICHINTER_WITHOUT_DURATION)) {
                         $selectmode = 'select';
    -                    if (!empty($conf->global->INTERVENTION_ADDLINE_FREEDUREATION))
    +                    if (!empty($conf->global->INTERVENTION_ADDLINE_FREEDUREATION)) {
                             $selectmode = 'text';
    +                    }
                         $form->select_duration('duration', (!GETPOST('durationhour', 'int') && !GETPOST('durationmin', 'int')) ? 3600 : (60 * 60 * GETPOST('durationhour', 'int') + 60 * GETPOST('durationmin', 'int')), 0, $selectmode);
                     }
                     print '</td>';
    @@ -1643,6 +1647,15 @@ else if ($id > 0 || ! empty($ref))
     					else print '<div class="inline-block divButAction"><a class="butActionRefused" href="#">'.$langs->trans('SendMail').'</a></div>';
     				}
     
    +		    	// create intervention model
    +				if ($object->statut == Fichinter::STATUS_DRAFT && $user->rights->ficheinter->creer && (count($object->lines) > 0)) {
    +					print '<div class="inline-block divButAction">';
    +					// This feature is not yet implemented
    +					//print '<a class="butAction" href="'.DOL_URL_ROOT.'/fichinter/card-rec.php?id='.$object->id.'&action=create">'.$langs->trans("ChangeIntoRepeatableIntervention").'</a>';
    +					print '<a class="butAction" title="'.$langs->trans("ChangeIntoRepeatableIntervention").'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'">'.$langs->trans("not yet implemented").'</a>';
    +					print '</div>';
    +				}
    +
     				// Proposal
     				if ($conf->service->enabled && ! empty($conf->propal->enabled) && $object->statut > Fichinter::STATUS_DRAFT)
     				{
    @@ -1694,7 +1707,6 @@ else if ($id > 0 || ! empty($ref))
     					print '<div class="inline-block divButAction"><a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delete"';
     					print '>'.$langs->trans('Delete').'</a></div>';
     				}
    -
     			}
     		}
     	}
    diff --git a/htdocs/fichinter/class/api_interventions.class.php b/htdocs/fichinter/class/api_interventions.class.php
    index 8b21b534856..3f3315b6028 100644
    --- a/htdocs/fichinter/class/api_interventions.class.php
    +++ b/htdocs/fichinter/class/api_interventions.class.php
    @@ -35,7 +35,7 @@ class Interventions extends DolibarrApi
         static $FIELDS = array(
           'socid',
           'fk_project',
    -      'description'
    +      'description',
         );
     
         /**
    @@ -44,7 +44,7 @@ class Interventions extends DolibarrApi
         static $FIELDSLINE = array(
           'description',
           'date',
    -      'duree'
    +      'duree',
         );
     
         /**
    @@ -106,7 +106,8 @@ class Interventions extends DolibarrApi
          *
          * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -217,7 +218,8 @@ class Interventions extends DolibarrApi
          * @return int
          */
         /* TODO
    -    function getLines($id) {
    +    function getLines($id)
    +    {
         	if(! DolibarrApiAccess::$user->rights->ficheinter->lire) {
         		throw new RestException(401);
         	}
    @@ -315,7 +317,6 @@ class Interventions extends DolibarrApi
     		    	'message' => 'Intervention deleted'
     	    	)
         	);
    -
         }
     
         /**
    @@ -424,7 +425,8 @@ class Interventions extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
         	$object = parent::_cleanObjectDatas($object);
     
    @@ -453,6 +455,4 @@ class Interventions extends DolibarrApi
             }
             return $fichinter;
         }
    -
    -
     }
    diff --git a/htdocs/fichinter/class/fichinter.class.php b/htdocs/fichinter/class/fichinter.class.php
    index 789a351c776..7c05eda422e 100644
    --- a/htdocs/fichinter/class/fichinter.class.php
    +++ b/htdocs/fichinter/class/fichinter.class.php
    @@ -1,11 +1,12 @@
     <?php
     /* Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2013 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2015      Charlie Benke        <charlie@patas-monkey.com>
      * Copyright (C) 2018      Nicolas ZABOURI	<info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -35,10 +36,29 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobjectline.class.php';
      */
     class Fichinter extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='fichinter';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='fichinter';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element='fk_fichinter';
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line='fichinterdet';
    +
    +	/**
    +	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
    +	 */
     	public $picto = 'intervention';
     
     	/**
    @@ -46,36 +66,52 @@ class Fichinter extends CommonObject
     	 */
     	protected $table_ref_field = 'ref';
     
    -	var $socid;		// Id client
    +	public $socid;		// Id client
     
    -	var $author;
    -	var $datec;
    -	var $datev;
    -	var $dateo;
    -	var $datee;
    -	var $datet;
    -	var $datem;
    -	var $duration;
    -	var $statut = 0;		// 0=draft, 1=validated, 2=invoiced, 3=Terminate
    -	var $description;
    -	var $fk_contrat = 0;
    -	var $fk_project = 0;
    -	var $extraparams=array();
    +	public $author;
    +	public $datec;
    +	public $datev;
    +	public $dateo;
    +	public $datee;
    +	public $datet;
    +	public $datem;
    +	public $duration;
    +	public $statut = 0;		// 0=draft, 1=validated, 2=invoiced, 3=Terminate
     
    -	var $lines = array();
    +	/**
    +	 * @var string description
    +	 */
    +	public $description;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_contrat = 0;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_project = 0;
    +
    +	public $extraparams=array();
    +
    +	public $lines = array();
     
     	/**
     	 * Draft status
     	 */
     	const STATUS_DRAFT = 0;
    +
     	/**
     	 * Validated status
     	 */
     	const STATUS_VALIDATED = 1;
    +
     	/**
     	 * Billed
     	 */
     	const STATUS_BILLED = 2;
    +
     	/**
     	 * Closed
     	 */
    @@ -93,6 +129,7 @@ class Fichinter extends CommonObject
     		$this->products = array();
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Load indicators into this->nb for board
     	 *
    @@ -100,6 +137,7 @@ class Fichinter extends CommonObject
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $user;
     
     		$this->nb=array();
    @@ -266,7 +304,6 @@ class Fichinter extends CommonObject
     			$this->db->rollback();
     			return -1;
     		}
    -
     	}
     
     	/**
    @@ -622,6 +659,7 @@ class Fichinter extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Returns the label of a statut
     	 *
    @@ -631,6 +669,7 @@ class Fichinter extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		// Init/load array of translation of status
     		if (empty($this->statuts) || empty($this->statuts_short))
     		{
    @@ -653,17 +692,17 @@ class Fichinter extends CommonObject
     
     		if ($mode == 0)
     			return $this->statuts[$statut];
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     			return $this->statuts_short[$statut];
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     			return img_picto($this->statuts_short[$statut], $this->statuts_logo[$statut]).' '.$this->statuts_short[$statut];
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     			return img_picto($this->statuts_short[$statut], $this->statuts_logo[$statut]);
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     			return img_picto($this->statuts_short[$statut], $this->statuts_logo[$statut]).' '.$this->statuts[$statut];
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     			return '<span class="hideonsmartphone">'.$this->statuts_short[$statut].' </span>'.img_picto($this->statuts[$statut],$this->statuts_logo[$statut]);
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     			return '<span class="hideonsmartphone">'.$this->statuts[$statut].' </span>'.img_picto($this->statuts[$statut],$this->statuts_logo[$statut]);
     
     		return '';
    @@ -767,15 +806,14 @@ class Fichinter extends CommonObject
     				$mybool|=@include_once $dir.$file;
     			}
     
    -			if (! $mybool)
    -			{
    -				dol_print_error('',"Failed to include file ".$file);
    +			if ($mybool === false) {
    +				dol_print_error('', "Failed to include file ".$file);
     				return '';
     			}
     
     			$obj = new $classname();
     			$numref = "";
    -			$numref = $obj->getNextValue($soc,$this);
    +			$numref = $obj->getNextValue($soc, $this);
     
     			if ( $numref != "")
     			{
    @@ -844,7 +882,6 @@ class Fichinter extends CommonObject
     					$muser->fetch($obj->fk_user_modification);
     					$this->user_modification   = $muser;
     				}
    -
     			}
     			$this->db->free($resql);
     		}
    @@ -937,7 +974,8 @@ class Fichinter extends CommonObject
     
     					if (! dol_delete_file($file,0,0,0,$this)) // For triggers
     					{
    -						$this->error=$langs->trans("ErrorCanNotDeleteFile",$file);
    +						$langs->load("errors");
    +						$this->error=$langs->trans("ErrorFailToDeleteFile",$file);
     						return 0;
     					}
     				}
    @@ -945,7 +983,8 @@ class Fichinter extends CommonObject
     				{
     					if (! dol_delete_dir_recursive($dir))
     					{
    -						$this->error=$langs->trans("ErrorCanNotDeleteDir",$dir);
    +						$langs->load("errors");
    +						$this->error=$langs->trans("ErrorFailToDeleteDir",$dir);
     						return 0;
     					}
     				}
    @@ -964,6 +1003,7 @@ class Fichinter extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Defines a delivery date of intervention
     	 *
    @@ -973,6 +1013,7 @@ class Fichinter extends CommonObject
     	 */
     	function set_date_delivery($user, $date_delivery)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if ($user->rights->ficheinter->creer)
    @@ -996,6 +1037,7 @@ class Fichinter extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Define the label of the intervention
     	 *
    @@ -1005,6 +1047,7 @@ class Fichinter extends CommonObject
     	 */
     	function set_description($user, $description)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if ($user->rights->ficheinter->creer)
    @@ -1029,6 +1072,7 @@ class Fichinter extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Link intervention to a contract
     	 *
    @@ -1038,6 +1082,7 @@ class Fichinter extends CommonObject
     	 */
     	function set_contrat($user, $contractid)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if ($user->rights->ficheinter->creer)
    @@ -1237,6 +1282,7 @@ class Fichinter extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Load array lines ->lines
     	 *
    @@ -1244,6 +1290,7 @@ class Fichinter extends CommonObject
     	 */
     	function fetch_lines()
     	{
    +        // phpcs:enable
     		$this->lines = array();
     
     		$sql = 'SELECT rowid, description, duree, date, rang';
    @@ -1309,24 +1356,46 @@ class Fichinter extends CommonObject
      */
     class FichinterLigne extends CommonObjectLine
     {
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	// From llx_fichinterdet
    -	var $fk_fichinter;
    -	var $desc;          	// Description ligne
    -	var $datei;           // Date intervention
    -	var $duration;        // Duree de l'intervention
    -	var $rang = 0;
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_fichinter;
     
    +	public $desc;          	// Description ligne
    +	public $datei;           // Date intervention
    +	public $duration;        // Duree de l'intervention
    +	public $rang = 0;
    +
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='fichinterdet';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='fichinterdet';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element='fk_fichinter';
     
     	/**
    -	 *	Constructor
    +	 *  Constructor
     	 *
    -	 *	@param	DoliDB	$db		Database handler
    +	 *  @param  DoliDB  $db     Database handler
     	 */
     	function __construct($db)
     	{
    @@ -1533,6 +1602,7 @@ class FichinterLigne extends CommonObjectLine
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Update total duration into llx_fichinter
     	 *
    @@ -1540,6 +1610,7 @@ class FichinterLigne extends CommonObjectLine
     	 */
     	function update_total()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$this->db->begin();
    @@ -1639,6 +1710,4 @@ class FichinterLigne extends CommonObjectLine
     			return -2;
     		}
     	}
    -
     }
    -
    diff --git a/htdocs/fichinter/class/fichinterstats.class.php b/htdocs/fichinter/class/fichinterstats.class.php
    index b435398fec2..0475a2116eb 100644
    --- a/htdocs/fichinter/class/fichinterstats.class.php
    +++ b/htdocs/fichinter/class/fichinterstats.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (c) 2005-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Marcos García        <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -33,6 +33,9 @@ include_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
      */
     class FichinterStats extends Stats
     {
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element;
     
     	var $socid;
    @@ -207,6 +210,5 @@ class FichinterStats extends Stats
     
     		return $this->_getAllByProduct($sql);
     	}
    -
     }
     
    diff --git a/htdocs/fichinter/contact.php b/htdocs/fichinter/contact.php
    index d3b2ea6f78e..54ad6733e69 100644
    --- a/htdocs/fichinter/contact.php
    +++ b/htdocs/fichinter/contact.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2012      Juanjo Menent        <jmenent@2byte.es>
      *
    @@ -185,7 +185,6 @@ if ($id > 0 || ! empty($ref))
     	    $res=@include dol_buildpath($reldir.'/contacts.tpl.php');
     	    if ($res) break;
     	}
    -
     }
     
     
    diff --git a/htdocs/fichinter/document.php b/htdocs/fichinter/document.php
    index 6e84f457eb1..966c3b3f7db 100644
    --- a/htdocs/fichinter/document.php
    +++ b/htdocs/fichinter/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2011-2012 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -94,7 +94,7 @@ if ($object->id)
     	dol_fiche_head($head, 'documents',  $langs->trans("InterventionCard"), -1, 'intervention');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -168,7 +168,6 @@ if ($object->id)
         $permtoedit = $user->rights->ficheinter->creer;
         $param = '&id=' . $object->id;
         include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
     }
     else
     {
    diff --git a/htdocs/fichinter/index.php b/htdocs/fichinter/index.php
    index 6b8ce71bfb5..b1798d77e66 100644
    --- a/htdocs/fichinter/index.php
    +++ b/htdocs/fichinter/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015	   Charlie Benke		<charlie@patas-monkey.com>
     
      *
    @@ -148,7 +148,6 @@ if ($resql)
         {
             if (! $conf->use_javascript_ajax)
             {
    -
                 print '<tr class="oddeven">';
                 print '<td>'.$fichinterstatic->LibStatut($status,$bool,0).'</td>';
                 print '<td align="right"><a href="list.php?viewstatut='.$status.'">'.(isset($vals[$status.$bool])?$vals[$status.$bool]:0).' ';
    diff --git a/htdocs/fichinter/info.php b/htdocs/fichinter/info.php
    index fe3d14191d6..93494c122d5 100644
    --- a/htdocs/fichinter/info.php
    +++ b/htdocs/fichinter/info.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2005-2009  Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005-2009  Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2009-2016  Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2011       Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
    diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php
    index 96a1199255c..c26e642a651 100644
    --- a/htdocs/fichinter/list.php
    +++ b/htdocs/fichinter/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2013		Cédric Salvador			<csalvador@gpcsolutions.fr>
      * Copyright (C) 2015       Jean-François Ferry		<jfefe@aternatik.fr>
    @@ -87,7 +87,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('fichinter');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    diff --git a/htdocs/fichinter/note.php b/htdocs/fichinter/note.php
    index cece45fdab5..c40792bc8b8 100644
    --- a/htdocs/fichinter/note.php
    +++ b/htdocs/fichinter/note.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2005-2012	Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005-2012	Regis Houssin	<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012	Juanjo Menent	<jmenent@2byte.es>
      * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
    diff --git a/htdocs/fichinter/stats/index.php b/htdocs/fichinter/stats/index.php
    index 56a12997de3..7ebf701d3d5 100644
    --- a/htdocs/fichinter/stats/index.php
    +++ b/htdocs/fichinter/stats/index.php
    @@ -49,6 +49,7 @@ $endyear=$year;
     
     $object_status=GETPOST('object_status');
     
    +// Load translation files required by the page
     $langs->loadLangs(array('interventions', 'companies', 'other', 'suppliers'));
     
     
    @@ -259,6 +260,7 @@ print '<div class="fichecenter"><div class="fichethirdleft">';
     	print '<br><br>';
     //}
     
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -305,6 +307,7 @@ foreach ($data as $val)
     }
     
     print '</table>';
    +print '</div>';
     
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
    diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php
    index 36e3ba38b58..484229a1de2 100644
    --- a/htdocs/filefunc.inc.php
    +++ b/htdocs/filefunc.inc.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2005 	   Simon Tosser         <simon@kornog-computing.com>
      * Copyright (C) 2006 	   Andre Cianfarani     <andre.cianfarani@acdeveloppement.net>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
    @@ -31,7 +31,7 @@
      */
     
     if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE','Dolibarr');
    -if (! defined('DOL_VERSION')) define('DOL_VERSION','8.0.4');		// a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c
    +if (! defined('DOL_VERSION')) define('DOL_VERSION','9.0.0-beta');		// a.b.c-alpha, a.b.c-beta, a.b.c-rcX or a.b.c
     
     if (! defined('EURO')) define('EURO',chr(128));
     
    @@ -130,8 +130,8 @@ $dolibarr_main_url_root_alt=(empty($dolibarr_main_url_root_alt)?'':trim($dolibar
     $dolibarr_main_document_root=trim($dolibarr_main_document_root);
     $dolibarr_main_document_root_alt=(empty($dolibarr_main_document_root_alt)?'':trim($dolibarr_main_document_root_alt));
     
    -if (empty($dolibarr_main_db_port)) $dolibarr_main_db_port=0;		// Pour compatibilite avec anciennes configs, si non defini, on prend 'mysql'
    -if (empty($dolibarr_main_db_type)) $dolibarr_main_db_type='mysqli';	// Pour compatibilite avec anciennes configs, si non defini, on prend 'mysql'
    +if (empty($dolibarr_main_db_port)) $dolibarr_main_db_port=3306;		// For compatibility with old configs, if not defined, we take 'mysql' type
    +if (empty($dolibarr_main_db_type)) $dolibarr_main_db_type='mysqli';	// For compatibility with old configs, if not defined, we take 'mysql' type
     
     // Mysql driver support has been removed in favor of mysqli
     if ($dolibarr_main_db_type == 'mysql') $dolibarr_main_db_type = 'mysqli';
    diff --git a/htdocs/fourn/ajax/getSupplierPrices.php b/htdocs/fourn/ajax/getSupplierPrices.php
    index eeb2c1113f6..ae407d5544d 100644
    --- a/htdocs/fourn/ajax/getSupplierPrices.php
    +++ b/htdocs/fourn/ajax/getSupplierPrices.php
    @@ -34,8 +34,8 @@ $idprod=GETPOST('idprod','int');
     
     $prices = array();
     
    -$langs->load('stocks');
    -$langs->load('margins');
    +// Load translation files required by the page
    +$langs->loadLangs(array("stocks","margins"));
     
     
     /*
    diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php
    index b295355bdc9..235a3c85396 100644
    --- a/htdocs/fourn/card.php
    +++ b/htdocs/fourn/card.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Eric Seigne          <erics@rycks.com>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2015 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2014      Jean Heimburger      <jean@tiaris.info>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    @@ -374,7 +374,7 @@ if ($object->id > 0)
     	    $link=DOL_URL_ROOT.'/supplier_proposal/list.php?socid='.$object->id;
     	    $icon='bill';
     	    if ($link) $boxstat.='<a href="'.$link.'" class="boxstatsindicator thumbstat nobold nounderline">';
    -	    $boxstat.='<div class="boxstats">';
    +	    $boxstat.='<div class="boxstats" title="'.dol_escape_htmltag($text).'">';
     	    $boxstat.='<span class="boxstatstext">'.img_object("",$icon).' '.$text.'</span><br>';
     	    $boxstat.='<span class="boxstatsindicator">'.price($outstandingTotal, 1, $langs, 1, -1, -1, $conf->currency).'</span>';
     	    $boxstat.='</div>';
    @@ -392,7 +392,7 @@ if ($object->id > 0)
     	    $link=DOL_URL_ROOT.'/fourn/commande/list.php?socid='.$object->id;
     	    $icon='bill';
     	    if ($link) $boxstat.='<a href="'.$link.'" class="boxstatsindicator thumbstat nobold nounderline">';
    -	    $boxstat.='<div class="boxstats">';
    +	    $boxstat.='<div class="boxstats" title="'.dol_escape_htmltag($text).'">';
     	    $boxstat.='<span class="boxstatstext">'.img_object("",$icon).' '.$text.'</span><br>';
     	    $boxstat.='<span class="boxstatsindicator">'.price($outstandingTotal, 1, $langs, 1, -1, -1, $conf->currency).'</span>';
     	    $boxstat.='</div>';
    @@ -410,7 +410,7 @@ if ($object->id > 0)
     	    $link=DOL_URL_ROOT.'/fourn/facture/list.php?socid='.$object->id;
     	    $icon='bill';
     	    if ($link) $boxstat.='<a href="'.$link.'" class="boxstatsindicator thumbstat nobold nounderline">';
    -	    $boxstat.='<div class="boxstats">';
    +	    $boxstat.='<div class="boxstats" title="'.dol_escape_htmltag($text).'">';
     	    $boxstat.='<span class="boxstatstext">'.img_object("",$icon).' '.$text.'</span><br>';
     	    $boxstat.='<span class="boxstatsindicator">'.price($outstandingTotal, 1, $langs, 1, -1, -1, $conf->currency).'</span>';
     	    $boxstat.='</div>';
    @@ -421,7 +421,7 @@ if ($object->id > 0)
     	    $link=DOL_URL_ROOT.'/fourn/recap-fourn.php?socid='.$object->id;
     	    $icon='bill';
     	    if ($link) $boxstat.='<a href="'.$link.'" class="boxstatsindicator thumbstat nobold nounderline">';
    -	    $boxstat.='<div class="boxstats">';
    +	    $boxstat.='<div class="boxstats" title="'.dol_escape_htmltag($text).'">';
     	    $boxstat.='<span class="boxstatstext">'.img_object("",$icon).' '.$text.'</span><br>';
     	    $boxstat.='<span class="boxstatsindicator'.($outstandingOpened>0?' amountremaintopay':'').'">'.price($outstandingOpened, 1, $langs, 1, -1, -1, $conf->currency).$warn.'</span>';
     	    $boxstat.='</div>';
    @@ -884,6 +884,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/class/api_supplier_invoices.class.php b/htdocs/fourn/class/api_supplier_invoices.class.php
    index 68bb902b8fb..3b3ac43c496 100644
    --- a/htdocs/fourn/class/api_supplier_invoices.class.php
    +++ b/htdocs/fourn/class/api_supplier_invoices.class.php
    @@ -33,7 +33,7 @@ class SupplierInvoices extends DolibarrApi
          * @var array   $FIELDS     Mandatory fields, checked when create and update object
          */
         static $FIELDS = array(
    -        'socid'
    +        'socid',
         );
     
         /**
    @@ -96,7 +96,8 @@ class SupplierInvoices extends DolibarrApi
          *
     	 * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids='', $status='', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids='', $status='', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -152,8 +153,7 @@ class SupplierInvoices extends DolibarrApi
             }
     
             $result = $db->query($sql);
    -        if ($result)
    -        {
    +        if ($result) {
                 $i = 0;
                 $num = $db->num_rows($result);
                 $min = min($num, ($limit <= 0 ? $num : $limit));
    @@ -170,10 +170,10 @@ class SupplierInvoices extends DolibarrApi
             else {
                 throw new RestException(503, 'Error when retrieve supplier invoice list : '.$db->lasterror());
             }
    -        if( ! count($obj_ret)) {
    +        if ( ! count($obj_ret)) {
                 throw new RestException(404, 'No supplier invoice found');
             }
    -		return $obj_ret;
    +        return $obj_ret;
         }
     
         /**
    @@ -332,7 +332,8 @@ class SupplierInvoices extends DolibarrApi
          * @param   Object  $object    Object to clean
          * @return  array              Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    diff --git a/htdocs/fourn/class/api_supplier_orders.class.php b/htdocs/fourn/class/api_supplier_orders.class.php
    index d9596bf3958..ac5c825856c 100644
    --- a/htdocs/fourn/class/api_supplier_orders.class.php
    +++ b/htdocs/fourn/class/api_supplier_orders.class.php
    @@ -46,8 +46,8 @@ class SupplierOrders extends DolibarrApi
          */
         function __construct()
         {
    -		global $db, $conf;
    -		$this->db = $db;
    +        global $db, $conf;
    +        $this->db = $db;
             $this->order = new CommandeFournisseur($this->db);
         }
     
    @@ -68,11 +68,11 @@ class SupplierOrders extends DolibarrApi
     		}
     
             $result = $this->order->fetch($id);
    -        if( ! $result ) {
    +        if ( ! $result ) {
                 throw new RestException(404, 'Supplier order not found');
             }
     
    -		if( ! DolibarrApi::_checkAccessToResource('fournisseur',$this->order->id,'','commande')) {
    +		if ( ! DolibarrApi::_checkAccessToResource('fournisseur',$this->order->id,'','commande')) {
     			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
     		}
     
    @@ -96,7 +96,8 @@ class SupplierOrders extends DolibarrApi
          *
     	 * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids='', $status='', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids='', $status='', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -336,7 +337,8 @@ class SupplierOrders extends DolibarrApi
          * @param   Object  $object    Object to clean
          * @return  array              Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    diff --git a/htdocs/fourn/class/fournisseur.class.php b/htdocs/fourn/class/fournisseur.class.php
    index ba486e066cc..0636a356111 100644
    --- a/htdocs/fourn/class/fournisseur.class.php
    +++ b/htdocs/fourn/class/fournisseur.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2006      Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011	   Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -102,6 +102,7 @@ class Fournisseur extends Societe
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Load statistics indicators
     	 *
    @@ -109,6 +110,7 @@ class Fournisseur extends Societe
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $conf, $user;
     
     		$this->nb=array();
    @@ -141,9 +143,9 @@ class Fournisseur extends Societe
     			$this->error=$this->db->error();
     			return -1;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Create a supplier category
     	 *
    @@ -153,6 +155,7 @@ class Fournisseur extends Societe
     	 */
     	function CreateCategory($user, $name)
     	{
    +        // phpcs:enable
     		$sql = "INSERT INTO ".MAIN_DB_PREFIX."categorie (label,visible,type)";
     		$sql.= " VALUES ";
     		$sql.= " ('".$this->db->escape($name)."',1,1)";
    @@ -172,6 +175,7 @@ class Fournisseur extends Societe
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Return the suppliers list
     	 *
    @@ -179,6 +183,7 @@ class Fournisseur extends Societe
     	 */
     	function ListArray()
     	{
    +        // phpcs:enable
     		global $conf;
     		global $user;
     
    @@ -207,6 +212,4 @@ class Fournisseur extends Societe
     		}
     		return $arr;
     	}
    -
     }
    -
    diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php
    index ff3d109613f..c2e9243a331 100644
    --- a/htdocs/fourn/class/fournisseur.commande.class.php
    +++ b/htdocs/fourn/class/fournisseur.commande.class.php
    @@ -1,14 +1,15 @@
     <?php
     /* Copyright (C) 2003-2006	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2007		Franky Van Liedekerke	<franky.van.liedekerke@telenet.be>
      * Copyright (C) 2010-2014	Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2010-2016	Philippe Grand			<philippe.grand@atoo-net.com>
    + * Copyright (C) 2010-2018	Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2012-2015  Marcos García           <marcosgdf@gmail.com>
      * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
      * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
    - * Copyright (C) 2018      Nicolas ZABOURI			<info@inovea-conseil.com>
    + * Copyright (C) 2018       Nicolas ZABOURI			<info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -40,16 +41,34 @@ require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php';
      */
     class CommandeFournisseur extends CommonOrder
     {
    -    public $element='order_supplier';
    -    public $table_element='commande_fournisseur';
    -    public $table_element_line = 'commande_fournisseurdet';
    -    public $fk_element = 'fk_commande';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='order_supplier';
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='commande_fournisseur';
    +
    +    /**
    +	 * @var int    Name of subtable line
    +	 */
    +	public $table_element_line = 'commande_fournisseurdet';
    +
    +    /**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
    +	public $fk_element = 'fk_commande';
    +
         public $picto='order';
    +
         /**
          * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
          * @var int
          */
         public $ismultientitymanaged = 1;
    +
         /**
          * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
          * @var integer
    @@ -61,13 +80,17 @@ class CommandeFournisseur extends CommonOrder
          */
         protected $table_ref_field = 'ref';
     
    -    public $id;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
     
     	/**
     	 * Supplier order reference
     	 * @var string
     	 */
         public $ref;
    +
         public $ref_supplier;
         public $brouillon;
         public $statut;			// 0=Draft -> 1=Validated -> 2=Approved -> 3=Ordered/Process runing -> 4=Received partially -> 5=Received totally -> (reopen) 4=Received partially
    @@ -89,24 +112,37 @@ class CommandeFournisseur extends CommonOrder
          * Delivery date
          */
         public $date_livraison;
    +
         public $total_ht;
         public $total_tva;
         public $total_localtax1;   // Total Local tax 1
         public $total_localtax2;   // Total Local tax 2
         public $total_ttc;
         public $source;
    +
     	/**
     	 * @deprecated
     	 * @see note_private, note_public
     	 */
         public $note;
    +
     	public $note_private;
         public $note_public;
         public $model_pdf;
    +
    +    /**
    +     * @var int ID
    +     */
         public $fk_project;
    +
         public $cond_reglement_id;
         public $cond_reglement_code;
    +
    +    /**
    +     * @var int ID
    +     */
         public $fk_account;
    +
         public $mode_reglement_id;
         public $mode_reglement_code;
         public $user_author_id;
    @@ -125,13 +161,18 @@ class CommandeFournisseur extends CommonOrder
     	 * @var CommandeFournisseurLigne[]
     	 */
     	public $lines = array();
    +
     	//Add for supplier_proposal
         public $origin;
         public $origin_id;
         public $linked_objects=array();
     
     	// Multicurrency
    +	/**
    +     * @var int ID
    +     */
         public $fk_multicurrency;
    +
         public $multicurrency_code;
         public $multicurrency_tx;
         public $multicurrency_total_ht;
    @@ -142,34 +183,42 @@ class CommandeFournisseur extends CommonOrder
     	 * Draft status
     	 */
     	const STATUS_DRAFT = 0;
    +
     	/**
     	 * Validated status
     	 */
     	const STATUS_VALIDATED = 1;
    +
     	/**
     	 * Accepted
     	 */
     	const STATUS_ACCEPTED = 2;
    +
     	/**
     	 * Order sent, shipment on process
     	 */
     	const STATUS_ORDERSENT = 3;
    +
     	/**
     	 * Received partially
     	 */
     	const STATUS_RECEIVED_PARTIALLY = 4;
    +
     	/**
     	 * Received completely
     	 */
     	const STATUS_RECEIVED_COMPLETELY = 5;
    +
     	/**
     	 * Order canceled
     	 */
     	const STATUS_CANCELED = 6;
    +
     	/**
     	 * Order canceled/never received
     	 */
     	const STATUS_CANCELED_AFTER_ORDER = 7;
    +
     	/**
     	 * Refused
     	 */
    @@ -198,7 +247,7 @@ class CommandeFournisseur extends CommonOrder
          * 	@param	string	$ref		Ref of object
          *	@return int 		        >0 if OK, <0 if KO, 0 if not found
          */
    -    public function fetch($id,$ref='')
    +    public function fetch($id, $ref='')
         {
             global $conf;
     
    @@ -325,6 +374,7 @@ class CommandeFournisseur extends CommonOrder
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Load array lines
          *
    @@ -333,6 +383,7 @@ class CommandeFournisseur extends CommonOrder
          */
         function fetch_lines($only_product=0)
         {
    +        // phpcs:enable
         	//$result=$this->fetch_lines();
         	$this->lines=array();
     
    @@ -564,6 +615,7 @@ class CommandeFournisseur extends CommonOrder
             return $this->LibStatut($this->statut,$mode,$this->billed);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return label of a status
          *
    @@ -574,6 +626,7 @@ class CommandeFournisseur extends CommonOrder
          */
         function LibStatut($statut,$mode=0,$billed=0)
         {
    +        // phpcs:enable
         	global $conf, $langs;
     
         	if (empty($this->statuts) || empty($this->statutshort))
    @@ -612,46 +665,46 @@ class CommandeFournisseur extends CommonOrder
             {
                 return $langs->trans($this->statuts[$statut]);
             }
    -        if ($mode == 1)
    +        elseif ($mode == 1)
             {
             	return $langs->trans($this->statutshort[$statut]);
             }
    -        if ($mode == 2)
    +        elseif ($mode == 2)
             {
                 return $langs->trans($this->statuts[$statut]);
             }
    -        if ($mode == 3)
    +        elseif ($mode == 3)
             {
                 if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0');
    -            if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut1');
    -            if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut3');
    -            if ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut3');
    -            if ($statut==4) return img_picto($langs->trans($this->statuts[$statut]),'statut3');
    -            if ($statut==5) return img_picto($langs->trans($this->statuts[$statut]),'statut6');
    -            if ($statut==6 || $statut==7) return img_picto($langs->trans($this->statuts[$statut]),'statut5');
    -            if ($statut==9) return img_picto($langs->trans($this->statuts[$statut]),'statut5');
    +            elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut1');
    +            elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut3');
    +            elseif ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut3');
    +            elseif ($statut==4) return img_picto($langs->trans($this->statuts[$statut]),'statut3');
    +            elseif ($statut==5) return img_picto($langs->trans($this->statuts[$statut]),'statut6');
    +            elseif ($statut==6 || $statut==7) return img_picto($langs->trans($this->statuts[$statut]),'statut5');
    +            elseif ($statut==9) return img_picto($langs->trans($this->statuts[$statut]),'statut5');
             }
    -        if ($mode == 4)
    +        elseif ($mode == 4)
             {
                 if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    -            if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    -            if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    -            if ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    -            if ($statut==4) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    -            if ($statut==5) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    -            if ($statut==6 || $statut==7) return img_picto($langs->trans($this->statuts[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    -            if ($statut==9) return img_picto($langs->trans($this->statuts[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    +            elseif ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    +            elseif ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    +            elseif ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    +            elseif ($statut==4) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    +            elseif ($statut==5) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    +            elseif ($statut==6 || $statut==7) return img_picto($langs->trans($this->statuts[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
    +            elseif ($statut==9) return img_picto($langs->trans($this->statuts[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
             }
    -        if ($mode == 5)
    +        elseif ($mode == 5)
             {
             	if ($statut==0) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut0');
    -        	if ($statut==1) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut1');
    -        	if ($statut==2) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut3');
    -        	if ($statut==3) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut3');
    -        	if ($statut==4) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut3');
    -        	if ($statut==5) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut6');
    -        	if ($statut==6 || $statut==7) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut5');
    -        	if ($statut==9) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut5');
    +        	elseif ($statut==1) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut1');
    +        	elseif ($statut==2) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut3');
    +        	elseif ($statut==3) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut3');
    +        	elseif ($statut==4) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut3');
    +        	elseif ($statut==5) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut6');
    +        	elseif ($statut==6 || $statut==7) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut5');
    +        	elseif ($statut==9) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut5');
             }
         }
     
    @@ -748,8 +801,7 @@ class CommandeFournisseur extends CommonOrder
                     $mybool|=@include_once $dir.$file;
                 }
     
    -            if (! $mybool)
    -            {
    +            if ($mybool === false) {
                     dol_print_error('',"Failed to include file ".$file);
                     return '';
                 }
    @@ -1026,6 +1078,7 @@ class CommandeFournisseur extends CommonOrder
             return $result ;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Cancel an approved order.
          *	The cancellation is done after approval
    @@ -1036,6 +1089,7 @@ class CommandeFournisseur extends CommonOrder
          */
         function Cancel($user, $idwarehouse=-1)
         {
    +        // phpcs:enable
             global $langs,$conf;
     
     		$error=0;
    @@ -1086,7 +1140,6 @@ class CommandeFournisseur extends CommonOrder
             }
         }
     
    -
         /**
          * 	Submit a supplier order to supplier
          *
    @@ -1948,6 +2001,7 @@ class CommandeFournisseur extends CommonOrder
     		}
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Get list of order methods
          *
    @@ -1955,6 +2009,7 @@ class CommandeFournisseur extends CommonOrder
          */
         function get_methodes_commande()
         {
    +        // phpcs:enable
             $sql = "SELECT rowid, libelle";
             $sql.= " FROM ".MAIN_DB_PREFIX."c_input_method";
             $sql.= " WHERE active = 1";
    @@ -2033,6 +2088,7 @@ class CommandeFournisseur extends CommonOrder
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Set a delivery in database for this supplier order
          *
    @@ -2044,6 +2100,7 @@ class CommandeFournisseur extends CommonOrder
          */
         function Livraison($user, $date, $type, $comment)
         {
    +        // phpcs:enable
         	global $conf, $langs;
     
             $result = 0;
    @@ -2078,7 +2135,6 @@ class CommandeFournisseur extends CommonOrder
     		    			$this->errors[]='ErrorCantSetReceptionToTotalDoneWithReceptionToApprove';
     		    			dol_syslog('ErrorCantSetReceptionToTotalDoneWithReceptionToApprove', LOG_DEBUG);
     		    		}
    -
     		    	}
     	    		if (! $error && ! empty($conf->global->SUPPLIER_ORDER_USE_DISPATCH_STATUS_NEED_APPROVE) && ($type == 'tot'))	// Accept to move to reception done, only if status of all line are ok (refuse denied)
     	    		{
    @@ -2149,7 +2205,8 @@ class CommandeFournisseur extends CommonOrder
             return $result ;
         }
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *	Set the planned delivery date
          *
          *	@param      User			$user        		Objet user making change
    @@ -2159,6 +2216,7 @@ class CommandeFournisseur extends CommonOrder
          */
         function set_date_livraison($user, $date_livraison, $notrigger=0)
         {
    +        // phpcs:enable
             if ($user->rights->fournisseur->commande->creer)
             {
             	$error=0;
    @@ -2213,6 +2271,7 @@ class CommandeFournisseur extends CommonOrder
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
          *	Set the id projet
          *
    @@ -2223,6 +2282,7 @@ class CommandeFournisseur extends CommonOrder
          */
         function set_id_projet($user, $id_projet, $notrigger=0)
         {
    +        // phpcs:enable
             if ($user->rights->fournisseur->commande->creer)
             {
             	$error=0;
    @@ -2672,6 +2732,7 @@ class CommandeFournisseur extends CommonOrder
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Charge indicateurs this->nb de tableau de bord
          *
    @@ -2679,6 +2740,7 @@ class CommandeFournisseur extends CommonOrder
          */
         function load_state_board()
         {
    +        // phpcs:enable
             global $conf, $user;
     
             $this->nb=array();
    @@ -2713,6 +2775,7 @@ class CommandeFournisseur extends CommonOrder
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Load indicators for dashboard (this->nbtodo and this->nbtodolate)
          *
    @@ -2721,6 +2784,7 @@ class CommandeFournisseur extends CommonOrder
          */
         function load_board($user)
         {
    +        // phpcs:enable
             global $conf, $langs;
     
             $clause = " WHERE";
    @@ -2815,7 +2879,7 @@ class CommandeFournisseur extends CommonOrder
     	 *  @param      int			$hidedetails    Hide details of lines
     	 *  @param      int			$hidedesc       Hide description
     	 *  @param      int			$hideref        Hide ref
    -         *  @param   null|array  $moreparams     Array to provide more information
    +     *  @param      null|array  $moreparams     Array to provide more information
     	 *  @return     int          				0 if KO, 1 if OK
     	 */
     	public function generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
    @@ -3026,7 +3090,6 @@ class CommandeFournisseur extends CommonOrder
     							{
     								$close++;
     							}
    -
     						}
     					}
     
    @@ -3050,8 +3113,6 @@ class CommandeFournisseur extends CommonOrder
     							}
     							return 4;
     						}
    -
    -
     					}
     					else
     					{//all the products are not received
    @@ -3061,7 +3122,6 @@ class CommandeFournisseur extends CommonOrder
     						}
     						return 4;
     					}
    -
     				}
         				else
         				{
    @@ -3087,7 +3147,14 @@ class CommandeFournisseur extends CommonOrder
      */
     class CommandeFournisseurLigne extends CommonOrderLine
     {
    -    public $element='commande_fournisseurdet';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='commande_fournisseurdet';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='commande_fournisseurdet';
     
         public $oldline;
    @@ -3099,9 +3166,21 @@ class CommandeFournisseurLigne extends CommonOrderLine
         public $fk_commande;
     
         // From llx_commande_fournisseurdet
    +    /**
    +     * @var int ID
    +     */
         public $fk_parent_line;
    +
    +    /**
    +     * @var int ID
    +     */
         public $fk_facture;
    +
    +    /**
    +     * @var string supplier order line label
    +     */
         public $label;
    +
         public $rang = 0;
         public $special_code = 0;
     
    @@ -3478,4 +3557,3 @@ class CommandeFournisseurLigne extends CommonOrderLine
             }
         }
     }
    -
    diff --git a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php
    index a72e225b535..c7b5d00c797 100644
    --- a/htdocs/fourn/class/fournisseur.commande.dispatch.class.php
    +++ b/htdocs/fourn/class/fournisseur.commande.dispatch.class.php
    @@ -24,9 +24,9 @@
      */
     
     // Put here all includes required by your class file
    -require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
    -//require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
    -//require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
    +require_once DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php";
    +//require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
    +//require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
     
     
     /**
    @@ -34,24 +34,72 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
      */
     class CommandeFournisseurDispatch extends CommonObject
     {
    -	public $db;							//!< To store db handler
    -	public $error;							//!< To return error code (or message)
    -	public $errors=array();				//!< To return several error codes (or messages)
    -	public $element='commandefournisseurdispatch';			//!< Id that identify managed objects
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error;
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='commandefournisseurdispatch';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='commande_fournisseur_dispatch';		//!< Name of table without prefix where object is stored
     	public $lines=array();
     
    -    public $id;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    +	/**
    +     * @var int ID
    +     */
     	public $fk_commande;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_product;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_commandefourndet;
    +
     	public $qty;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_entrepot;
    +
    +	/**
    +	 * @var int User ID
    +	 */
     	public $fk_user;
    +
     	public $datec='';
     	public $comment;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
    +
     	public $tms='';
     	public $batch;
     	public $eatby='';
    @@ -76,8 +124,6 @@ class CommandeFournisseurDispatch extends CommonObject
             $this->statutshort[0] = 'Received';
             $this->statutshort[1] = 'Verified';
             $this->statutshort[2] = 'Denied';
    -
    -        return 1;
         }
     
     
    @@ -233,8 +279,6 @@ class CommandeFournisseurDispatch extends CommonObject
     				$this->batch = $obj->batch;
     				$this->eatby = $this->db->jdate($obj->eatby);
     				$this->sellby = $this->db->jdate($obj->sellby);
    -
    -
                 }
                 $this->db->free($resql);
     
    @@ -460,6 +504,7 @@ class CommandeFournisseurDispatch extends CommonObject
             return $this->LibStatut($this->status,$mode);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return label of a status
          *
    @@ -469,6 +514,7 @@ class CommandeFournisseurDispatch extends CommonObject
          */
         function LibStatut($statut,$mode=0)
         {
    +        // phpcs:enable
             global $langs;
             $langs->load('orders');
     
    @@ -476,27 +522,27 @@ class CommandeFournisseurDispatch extends CommonObject
             {
                 return $langs->trans($this->statuts[$statut]);
             }
    -        if ($mode == 1)
    +        elseif ($mode == 1)
             {
                 return $langs->trans($this->statutshort[$statut]);
             }
    -        if ($mode == 2)
    +        elseif ($mode == 2)
             {
                 return $langs->trans($this->statuts[$statut]);
             }
    -        if ($mode == 3)
    +        elseif ($mode == 3)
             {
                 if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0');
                 if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4');
                 if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut8');
             }
    -        if ($mode == 4)
    +        elseif ($mode == 4)
             {
                 if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]);
                 if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut4').' '.$langs->trans($this->statuts[$statut]);
                 if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut8').' '.$langs->trans($this->statuts[$statut]);
             }
    -        if ($mode == 5)
    +        elseif ($mode == 5)
             {
                 if ($statut==0) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut0');
                 if ($statut==1) return '<span class="hideonsmartphone">'.$langs->trans($this->statutshort[$statut]).' </span>'.img_picto($langs->trans($this->statuts[$statut]),'statut4');
    @@ -528,8 +574,6 @@ class CommandeFournisseurDispatch extends CommonObject
     		$this->batch='';
     		$this->eatby='';
     		$this->sellby='';
    -
    -
     	}
     
     	/**
    @@ -627,5 +671,4 @@ class CommandeFournisseurDispatch extends CommonObject
     			return - 1;
     		}
     	}
    -
     }
    diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php
    index 6e701662f07..795c63be3df 100644
    --- a/htdocs/fourn/class/fournisseur.facture.class.php
    +++ b/htdocs/fourn/class/fournisseur.facture.class.php
    @@ -3,15 +3,16 @@
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Christophe Combelles	<ccomb@free.fr>
      * Copyright (C) 2005		Marc Barilley			<marc@ocebo.com>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2017	Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
    + * Copyright (C) 2013-2018	Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2014-2016	Marcos García			<marcosgdf@gmail.com>
      * Copyright (C) 2015		Bahfir Abbes			<bafbes@gmail.com>
      * Copyright (C) 2015		Ferran Marcet			<fmarcet@2byte.es>
      * Copyright (C) 2016		Alexandre Spangaro		<aspangaro@zendsi.com>
    - * Copyright (C) 2018           Nicolas ZABOURI			<info@inovea-conseil.com>
    + * Copyright (C) 2018       Nicolas ZABOURI			<info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -41,16 +42,34 @@ require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php';
      */
     class FactureFournisseur extends CommonInvoice
     {
    -    public $element='invoice_supplier';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='invoice_supplier';
    +
    +    /**
    +     * @var string Name of table without prefix where object is stored
    +     */
         public $table_element='facture_fourn';
    -    public $table_element_line='facture_fourn_det';
    -    public $fk_element='fk_facture_fourn';
    +
    +    /**
    +	 * @var int    Name of subtable line
    +	 */
    +	public $table_element_line='facture_fourn_det';
    +
    +    /**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
    +	public $fk_element='fk_facture_fourn';
    +
         public $picto='bill';
    +
         /**
          * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
          * @var int
          */
         public $ismultientitymanaged = 1;
    +
         /**
          * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
          * @var integer
    @@ -62,8 +81,16 @@ class FactureFournisseur extends CommonInvoice
          */
         protected $table_ref_field = 'ref';
     
    -    public $rowid;
    -    public $ref;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $rowid;
    +
    +    /**
    +	 * @var string Ref
    +	 */
    +	public $ref;
    +
         public $product_ref;
         public $ref_supplier;
         public $socid;
    @@ -100,17 +127,24 @@ class FactureFournisseur extends CommonInvoice
         public $total_localtax1=0;
         public $total_localtax2=0;
         public $total_ttc=0;
    -    /**
    +
    +	/**
     	 * @deprecated
     	 * @see note_private, note_public
     	 */
         public $note;
    +
         public $note_private;
         public $note_public;
         public $propalid;
         public $cond_reglement_id;
         public $cond_reglement_code;
    +
    +    /**
    +     * @var int ID
    +     */
         public $fk_account;
    +
         public $mode_reglement_id;
         public $mode_reglement_code;
     
    @@ -119,26 +153,37 @@ class FactureFournisseur extends CommonInvoice
     	 * @var SupplierInvoiceLine[]
     	 */
         public $lines = array();
    +
     	/**
     	 * @deprecated
     	 */
         public $fournisseur;
     
    -	//Incorterms
    +	/**
    +     * @var int ID Incorterms
    +     */
         public $fk_incoterms;
    +
         public $location_incoterms;
         public $libelle_incoterms;  //Used into tooltip
     
         public $extraparams=array();
     
     	// Multicurrency
    +	/**
    +     * @var int ID
    +     */
         public $fk_multicurrency;
    +
         public $multicurrency_code;
         public $multicurrency_tx;
         public $multicurrency_total_ht;
         public $multicurrency_total_tva;
         public $multicurrency_total_ttc;
         //! id of source invoice if replacement invoice or credit note
    +    /**
    +     * @var int ID
    +     */
         public $fk_facture_source;
     
         /**
    @@ -643,7 +688,6 @@ class FactureFournisseur extends CommonInvoice
                         $this->error=$this->db->lasterror();
                         return -3;
                     }
    -
                 }
                 else
                 {
    @@ -663,13 +707,15 @@ class FactureFournisseur extends CommonInvoice
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Load this->lines
          *
    -     *	@return     int         1 si ok, < 0 si erreur
    +     *  @return     int         1 si ok, < 0 si erreur
          */
         function fetch_lines()
         {
    +        // phpcs:enable
         	$this->lines = array();
     
             $sql = 'SELECT f.rowid, f.ref as ref_supplier, f.description, f.date_start, f.date_end, f.pu_ht, f.pu_ttc, f.qty, f.remise_percent, f.vat_src_code, f.tva_tx';
    @@ -888,6 +934,7 @@ class FactureFournisseur extends CommonInvoice
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Add a discount line into an invoice (as an invoice line) using an existing absolute discount (Consume the discount)
          *
    @@ -896,6 +943,7 @@ class FactureFournisseur extends CommonInvoice
          */
         function insert_discount($idremise)
         {
    +        // phpcs:enable
         	global $langs;
     
         	include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
    @@ -1139,8 +1187,9 @@ class FactureFournisseur extends CommonInvoice
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     *	Tag invoice as a payed invoice
    +     *  Tag invoice as a payed invoice
          *
          *	@param  User	$user       Object user
     	 *	@param  string	$close_code	Code renseigne si on classe a payee completement alors que paiement incomplet. Not implementd yet.
    @@ -1149,6 +1198,7 @@ class FactureFournisseur extends CommonInvoice
          */
         function set_paid($user, $close_code='', $close_note='')
         {
    +        // phpcs:enable
             global $conf,$langs;
             $error=0;
     
    @@ -1187,6 +1237,7 @@ class FactureFournisseur extends CommonInvoice
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Tag la facture comme non payee completement + appel trigger BILL_UNPAYED
          *	Fonction utilisee quand un paiement prelevement est refuse,
    @@ -1197,6 +1248,7 @@ class FactureFournisseur extends CommonInvoice
          */
         function set_unpaid($user)
         {
    +        // phpcs:enable
             global $conf,$langs;
             $error=0;
     
    @@ -1398,6 +1450,7 @@ class FactureFournisseur extends CommonInvoice
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Set draft status
          *
    @@ -1407,6 +1460,7 @@ class FactureFournisseur extends CommonInvoice
          */
         function set_draft($user, $idwarehouse=-1)
         {
    +        // phpcs:enable
             global $conf,$langs;
     
             $error=0;
    @@ -1962,15 +2016,17 @@ class FactureFournisseur extends CommonInvoice
             }
         }
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
     	 *	Renvoi liste des factures remplacables
     	 *	Statut validee ou abandonnee pour raison autre + non payee + aucun paiement + pas deja remplacee
     	 *
    -	 *	@param		int		$socid		Id societe
    +	 *	@param      int		$socid		Id societe
     	 *	@return    	array				Tableau des factures ('id'=>id, 'ref'=>ref, 'status'=>status, 'paymentornot'=>0/1)
    -	 */
    +     */
     	function list_replacable_supplier_invoices($socid=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$return = array();
    @@ -2008,6 +2064,7 @@ class FactureFournisseur extends CommonInvoice
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoi liste des factures qualifiables pour correction par avoir
     	 *	Les factures qui respectent les regles suivantes sont retournees:
    @@ -2018,6 +2075,7 @@ class FactureFournisseur extends CommonInvoice
     	 */
     	function list_qualified_avoir_supplier_invoices($socid=0)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$return = array();
    @@ -2025,10 +2083,10 @@ class FactureFournisseur extends CommonInvoice
     		$sql = "SELECT f.rowid as rowid, f.ref, f.fk_statut, f.type, f.paye, pf.fk_paiementfourn";
     		$sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn as f";
     		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."paiementfourn_facturefourn as pf ON f.rowid = pf.fk_facturefourn";
    -		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture_fourn as ff ON (f.rowid = ff.fk_facture_source AND ff.type=".self::TYPE_REPLACEMENT.")";
     		$sql.= " WHERE f.entity = ".$conf->entity;
     		$sql.= " AND f.fk_statut in (".self::STATUS_VALIDATED.",".self::STATUS_CLOSED.")";
    -		$sql.= " AND ff.type IS NULL";									// Renvoi vrai si pas facture de remplacement
    +        $sql.= " AND NOT EXISTS (SELECT rowid from ".MAIN_DB_PREFIX."facture_fourn as ff WHERE f.rowid = ff.fk_facture_source";
    +        $sql.= " AND ff.type=".self::TYPE_REPLACEMENT.")";
     		$sql.= " AND f.type != ".self::TYPE_CREDIT_NOTE;				// Type non 2 si facture non avoir
     		if ($socid > 0) $sql.=" AND f.fk_soc = ".$socid;
     		$sql.= " ORDER BY f.ref";
    @@ -2058,6 +2116,7 @@ class FactureFournisseur extends CommonInvoice
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Load indicators for dashboard (this->nbtodo and this->nbtodolate)
          *
    @@ -2066,6 +2125,7 @@ class FactureFournisseur extends CommonInvoice
          */
         function load_board($user)
         {
    +        // phpcs:enable
             global $conf, $langs;
     
             $sql = 'SELECT ff.rowid, ff.date_lim_reglement as datefin, ff.fk_statut';
    @@ -2228,9 +2288,8 @@ class FactureFournisseur extends CommonInvoice
                 $mybool|=@include_once $dir.$file;
             }
     
    -        if (! $mybool)
    -        {
    -        	dol_print_error('',"Failed to include file ".$file);
    +        if ($mybool === false) {
    +        	dol_print_error('', "Failed to include file ".$file);
             	return '';
             }
     
    @@ -2354,13 +2413,15 @@ class FactureFournisseur extends CommonInvoice
             $this->total_ttc      = $xnbp*119.6;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
     	 *
     	 *      @return         int     <0 if KO, >0 if OK
    -	 */
    +     */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $conf, $user;
     
     		$this->nb=array();
    @@ -2570,7 +2631,14 @@ class FactureFournisseur extends CommonInvoice
      */
     class SupplierInvoiceLine extends CommonObjectLine
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='facture_fourn_det';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='facture_fourn_det';
     
     	public $oldline;
    @@ -2580,6 +2648,7 @@ class SupplierInvoiceLine extends CommonObjectLine
     	 * @see product_ref
     	 */
     	public $ref;
    +
     	/**
     	 * Internal ref
     	 * @var string
    @@ -2598,6 +2667,7 @@ class SupplierInvoiceLine extends CommonObjectLine
     	 * @see label
     	 */
     	public $libelle;
    +
     	/**
     	 * Product description
     	 * @var string
    @@ -2611,6 +2681,7 @@ class SupplierInvoiceLine extends CommonObjectLine
     	 * @see subprice
     	 */
     	public $pu_ht;
    +
     	public $subprice;
     
     	/**
    @@ -2626,6 +2697,7 @@ class SupplierInvoiceLine extends CommonObjectLine
     	 * @see total_tva
     	 */
     	public $tva;
    +
     	public $total_tva;
     
     	/**
    @@ -2671,18 +2743,32 @@ class SupplierInvoiceLine extends CommonObjectLine
     	public $total_ttc;
     	public $total_localtax1;
     	public $total_localtax2;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_product;
    +
     	public $product_type;
     	public $product_label;
     	public $info_bits;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_parent_line;
    +
     	public $special_code;
     	public $rang;
     	public $localtax1_type;
     	public $localtax2_type;
     
     	// Multicurrency
    +	/**
    +     * @var int ID
    +     */
     	public $fk_multicurrency;
    +
     	public $multicurrency_code;
     	public $multicurrency_subprice;
     	public $multicurrency_total_ht;
    @@ -2767,10 +2853,10 @@ class SupplierInvoiceLine extends CommonObjectLine
     		$this->rang       		= $obj->rang;
     		$this->fk_unit           = $obj->fk_unit;
     
    -		$this->multicurrency_subprice	= $obj->multicurrency_subprice;
    -		$this->multicurrency_total_ht	= $obj->multicurrency_total_ht;
    -		$this->multicurrency_total_tva	= $obj->multicurrency_total_tva;
    -		$this->multicurrency_total_ttc	= $obj->multicurrency_total_ttc;
    +		$this->multicurrency_subprice = $obj->multicurrency_subprice;
    +		$this->multicurrency_total_ht = $obj->multicurrency_total_ht;
    +		$this->multicurrency_total_tva = $obj->multicurrency_total_tva;
    +		$this->multicurrency_total_ttc = $obj->multicurrency_total_ttc;
     
     		$this->fetch_optionals();
     
    @@ -3072,7 +3158,6 @@ class SupplierInvoiceLine extends CommonObjectLine
     
                 $this->db->commit();
                 return $this->id;
    -
             }
             else
             {
    @@ -3081,13 +3166,16 @@ class SupplierInvoiceLine extends CommonObjectLine
                 return -2;
             }
         }
    -            /**
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          *  Mise a jour de l'objet ligne de commande en base
          *
          *  @return		int		<0 si ko, >0 si ok
          */
         function update_total()
         {
    +        // phpcs:enable
             $this->db->begin();
     
             // Mise a jour ligne en base
    diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php
    index 5c50597195a..056070d580d 100644
    --- a/htdocs/fourn/class/fournisseur.product.class.php
    +++ b/htdocs/fourn/class/fournisseur.product.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2014	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2014	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2012		Christophe Battarel	<christophe.battarel@altairis.fr>
      * Copyright (C) 2015		Marcos García           <marcosgdf@gmail.com>
    @@ -37,49 +37,70 @@ require_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.
      */
     class ProductFournisseur extends Product
     {
    -    var $db;
    -    var $error;
    -
    -    var $product_fourn_price_id;  // id of ligne product-supplier
    -
    -    var $id;                      // product id
    -	/**
    -	 * @deprecated
    -	 * @see ref_supplier
    -	 */
    -    var $fourn_ref;
    -    var $delivery_time_days;
    -    var $ref_supplier;			  // ref supplier (can be set by get_buyprice)
    -    var $vatrate_supplier;		  // default vat rate for this supplier/qty/product (can be set by get_buyprice)
    -
    -    var $fourn_id;                //supplier id
    -    var $fourn_qty;               // quantity for price (can be set by get_buyprice)
    -    var $fourn_pu;			       // unit price for quantity (can be set by get_buyprice)
    -
    -    var $fourn_price;             // price for quantity
    -    var $fourn_remise_percent;    // discount for quantity (percent)
    -    var $fourn_remise;            // discount for quantity (amount)
    -    var $product_fourn_id;        // supplier id
    -    var $fk_availability;         // availability delay - visible/used if option FOURN_PRODUCT_AVAILABILITY is on (duplicate information compared to delivery delay)
    -    var $fourn_unitprice;
    -    var $fourn_tva_tx;
    -    var $fourn_tva_npr;
    -
    -    var $fk_supplier_price_expression;
    -    var $supplier_reputation;     // reputation of supplier
    -    var $reputations=array();     // list of available supplier reputations
    -
    -    // Multicurreny
    -    var $fourn_multicurrency_id;
    -    var $fourn_multicurrency_code;
    -    var $fourn_multicurrency_tx;
    -    var $fourn_multicurrency_price;
    -    var $fourn_multicurrency_unitprice;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
         /**
    -	 *	Constructor
    -	 *
    -	 *  @param		DoliDB		$db      Database handler
    +     * @var string Error code (or message)
    +     */
    +    public $error='';
    +
    +    public $product_fourn_price_id;  // id of ligne product-supplier
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $id;
    +
    +    /**
    +     * @deprecated
    +     * @see ref_supplier
    +     */
    +    public $fourn_ref;
    +    public $delivery_time_days;
    +    public $ref_supplier;			  // ref supplier (can be set by get_buyprice)
    +    public $desc_supplier;
    +    public $vatrate_supplier;		  // default vat rate for this supplier/qty/product (can be set by get_buyprice)
    +
    +    public $fourn_id;                //supplier id
    +    public $fourn_qty;               // quantity for price (can be set by get_buyprice)
    +    public $fourn_pu;			       // unit price for quantity (can be set by get_buyprice)
    +
    +    public $fourn_price;             // price for quantity
    +    public $fourn_remise_percent;    // discount for quantity (percent)
    +    public $fourn_remise;            // discount for quantity (amount)
    +    public $product_fourn_id;        // supplier id
    +
    +    /**
    +     * @var int ID availability delay - visible/used if option FOURN_PRODUCT_AVAILABILITY is on (duplicate information compared to delivery delay)
    +     */
    +    public $fk_availability;
    +
    +    public $fourn_unitprice;
    +    public $fourn_tva_tx;
    +    public $fourn_tva_npr;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_supplier_price_expression;
    +
    +    public $supplier_reputation;     // reputation of supplier
    +    public $reputations=array();     // list of available supplier reputations
    +
    +    // Multicurreny
    +    public $fourn_multicurrency_id;
    +    public $fourn_multicurrency_code;
    +    public $fourn_multicurrency_tx;
    +    public $fourn_multicurrency_price;
    +    public $fourn_multicurrency_unitprice;
    +
    +    /**
    +     *	Constructor
    +     *
    +     *  @param		DoliDB		$db      Database handler
          */
         function __construct($db)
         {
    @@ -92,6 +113,7 @@ class ProductFournisseur extends Product
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Remove all prices for this couple supplier-product
          *
    @@ -100,6 +122,7 @@ class ProductFournisseur extends Product
          */
         function remove_fournisseur($id_fourn)
         {
    +        // phpcs:enable
             $ok=1;
     
             $this->db->begin();
    @@ -128,6 +151,7 @@ class ProductFournisseur extends Product
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Remove a price for a couple supplier-product
          *
    @@ -136,6 +160,7 @@ class ProductFournisseur extends Product
          */
         function remove_product_fournisseur_price($rowid)
         {
    +        // phpcs:enable
             global $conf, $user;
     
             $error=0;
    @@ -162,17 +187,17 @@ class ProductFournisseur extends Product
                 }
             }
     
    -        if (empty($error)){
    +        if (empty($error)) {
                 $this->db->commit();
                 return 1;
    -        }else{
    +        } else {
                 $this->db->rollback();
                 return -1;
             }
    -
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Modify the purchase price for a supplier
          *
    @@ -196,10 +221,12 @@ class ProductFournisseur extends Product
          *    @param  	string		$multicurrency_price_base_type	HT or TTC in currency
          *    @param  	float		$multicurrency_tx	            Rate currency
          *    @param  	string		$multicurrency_code	            Currency code
    +     *    @param  	string		$desc_fourn     	            Custom description for product_fourn_price
          *    @return	int								<0 if KO, >=0 if OK
          */
    -    function update_buyprice($qty, $buyprice, $user, $price_base_type, $fourn, $availability, $ref_fourn, $tva_tx, $charges=0, $remise_percent=0, $remise=0, $newnpr=0, $delivery_time_days=0, $supplier_reputation='', $localtaxes_array=array(), $newdefaultvatcode='', $multicurrency_buyprice=0, $multicurrency_price_base_type='HT',$multicurrency_tx=1,$multicurrency_code='')
    +    function update_buyprice($qty, $buyprice, $user, $price_base_type, $fourn, $availability, $ref_fourn, $tva_tx, $charges=0, $remise_percent=0, $remise=0, $newnpr=0, $delivery_time_days=0, $supplier_reputation='', $localtaxes_array=array(), $newdefaultvatcode='', $multicurrency_buyprice=0, $multicurrency_price_base_type='HT',$multicurrency_tx=1,$multicurrency_code='', $desc_fourn='')
         {
    +        // phpcs:enable
             global $conf, $langs;
             //global $mysoc;
     
    @@ -270,6 +297,7 @@ class ProductFournisseur extends Product
     	  		$sql = "UPDATE ".MAIN_DB_PREFIX."product_fournisseur_price";
     			$sql.= " SET fk_user = " . $user->id." ,";
                 $sql.= " ref_fourn = '" . $this->db->escape($ref_fourn) . "',";
    +            $sql.= " desc_fourn = '" . $this->db->escape($desc_fourn) . "',";
     			$sql.= " price = ".price2num($buyprice).",";
     			$sql.= " quantity = ".$qty.",";
     			$sql.= " remise_percent = ".$remise_percent.",";
    @@ -336,7 +364,7 @@ class ProductFournisseur extends Product
                     // Add price for this quantity to supplier
                     $sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_fournisseur_price(";
                     $sql.= " multicurrency_price, multicurrency_unitprice, multicurrency_tx, fk_multicurrency, multicurrency_code,";
    -                $sql .= "datec, fk_product, fk_soc, ref_fourn, fk_user, price, quantity, remise_percent, remise, unitprice, tva_tx, charges, fk_availability, default_vat_code, info_bits, entity, delivery_time_days, supplier_reputation)";
    +                $sql .= "datec, fk_product, fk_soc, ref_fourn, desc_fourn, fk_user, price, quantity, remise_percent, remise, unitprice, tva_tx, charges, fk_availability, default_vat_code, info_bits, entity, delivery_time_days, supplier_reputation)";
                     $sql .= " values(";
                     $sql.= (isset($multicurrency_buyprice)?"'".$this->db->escape(price2num($multicurrency_buyprice))."'":'null').",";
                     $sql.= (isset($multicurrency_unitBuyPrice)?"'".$this->db->escape(price2num($multicurrency_unitBuyPrice))."'":'null').",";
    @@ -347,6 +375,7 @@ class ProductFournisseur extends Product
                     $sql .= " " . $this->id . ",";
                     $sql .= " " . $fourn->id . ",";
                     $sql .= " '" . $this->db->escape($ref_fourn) . "',";
    +                $sql .= " '" . $this->db->escape($desc_fourn) . "',";
                     $sql .= " " . $user->id . ",";
                     $sql .= " " . $buyprice . ",";
                     $sql .= " " . $qty . ",";
    @@ -424,6 +453,7 @@ class ProductFournisseur extends Product
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Loads the price information of a provider
          *
    @@ -433,10 +463,11 @@ class ProductFournisseur extends Product
          */
         function fetch_product_fournisseur_price($rowid, $ignore_expression = 0)
         {
    +        // phpcs:enable
             global $conf;
     
             $sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.default_vat_code, pfp.info_bits as fourn_tva_npr, pfp.fk_availability,";
    -        $sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.fk_product, pfp.charges, pfp.fk_supplier_price_expression, pfp.delivery_time_days,";
    +        $sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.desc_fourn, pfp.fk_product, pfp.charges, pfp.fk_supplier_price_expression, pfp.delivery_time_days,";
             $sql.= " pfp.supplier_reputation";
             $sql.= " ,pfp.multicurrency_price, pfp.multicurrency_unitprice, pfp.multicurrency_tx, pfp.fk_multicurrency, pfp.multicurrency_code";
             $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
    @@ -456,6 +487,7 @@ class ProductFournisseur extends Product
                 	$this->fourn_id					= $obj->fk_soc;
                 	$this->fourn_ref				= $obj->ref_fourn; // deprecated
     	            $this->ref_supplier             = $obj->ref_fourn;
    +	            $this->desc_supplier            = $obj->desc_fourn;
                 	$this->fourn_price				= $obj->price;
                 	$this->fourn_charges            = $obj->charges;	// deprecated
                 	$this->fourn_qty                = $obj->quantity;
    @@ -510,6 +542,7 @@ class ProductFournisseur extends Product
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    List all supplier prices of a product
          *
    @@ -522,14 +555,14 @@ class ProductFournisseur extends Product
          */
         function list_product_fournisseur_price($prodid, $sortfield='', $sortorder='', $limit=0, $offset=0)
         {
    +        // phpcs:enable
             global $conf;
     
             $sql = "SELECT s.nom as supplier_name, s.rowid as fourn_id,";
    -        $sql.= " pfp.rowid as product_fourn_pri_id, pfp.ref_fourn, pfp.fk_product as product_fourn_id, pfp.fk_supplier_price_expression,";
    -        $sql.= " pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.fk_availability, pfp.charges, pfp.info_bits, pfp.delivery_time_days, pfp.supplier_reputation";
    -        $sql.= " ,pfp.multicurrency_price, pfp.multicurrency_unitprice, pfp.multicurrency_tx, pfp.fk_multicurrency, pfp.multicurrency_code";
    -        $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
    -        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        $sql.= " pfp.rowid as product_fourn_pri_id, pfp.ref_fourn, pfp.desc_fourn, pfp.fk_product as product_fourn_id, pfp.fk_supplier_price_expression,";
    +        $sql.= " pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.fk_availability, pfp.charges, pfp.info_bits, pfp.delivery_time_days, pfp.supplier_reputation,";
    +        $sql.= " pfp.multicurrency_price, pfp.multicurrency_unitprice, pfp.multicurrency_tx, pfp.fk_multicurrency, pfp.multicurrency_code, pfp.datec, pfp.tms";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp, ".MAIN_DB_PREFIX."societe as s";
             $sql.= " WHERE pfp.entity IN (".getEntity('productsupplierprice').")";
             $sql.= " AND pfp.fk_soc = s.rowid";
             $sql.= " AND s.status=1"; // only enabled company selected
    @@ -553,6 +586,7 @@ class ProductFournisseur extends Product
                     $prodfourn->product_fourn_id		= $record["product_fourn_id"];
                     $prodfourn->fourn_ref				= $record["ref_fourn"];
                     $prodfourn->ref_supplier			= $record["ref_fourn"];
    +                $prodfourn->desc_supplier           = $record["desc_fourn"];
                     $prodfourn->fourn_price				= $record["price"];
                     $prodfourn->fourn_qty				= $record["quantity"];
     				$prodfourn->fourn_remise_percent	= $record["remise_percent"];
    @@ -568,6 +602,8 @@ class ProductFournisseur extends Product
                     $prodfourn->fourn_tva_npr					= $record["info_bits"];
                     $prodfourn->fk_supplier_price_expression    = $record["fk_supplier_price_expression"];
     				$prodfourn->supplier_reputation    = $record["supplier_reputation"];
    +				$prodfourn->date_creation          = $this->db->jdate($record['datec']);
    +				$prodfourn->date_modification      = $this->db->jdate($record['tms']);
     
                     $prodfourn->fourn_multicurrency_price       = $record["multicurrency_price"];
                     $prodfourn->fourn_multicurrency_unitprice   = $record["multicurrency_unitprice"];
    @@ -609,6 +645,7 @@ class ProductFournisseur extends Product
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Load properties for minimum price
          *
    @@ -619,6 +656,7 @@ class ProductFournisseur extends Product
          */
         function find_min_price_product_fournisseur($prodid, $qty=0, $socid=0)
         {
    +        // phpcs:enable
             global $conf;
     
             if (empty($prodid))
    @@ -796,6 +834,7 @@ class ProductFournisseur extends Product
             return $thirdparty->getNomUrl($withpicto,$option,$maxlen,$notooltip);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Display price of product
          *
    @@ -803,12 +842,13 @@ class ProductFournisseur extends Product
          *  @param  int     $showsuptitle     Show "Supplier" into output string
          *  @param  int     $maxlen           Max length of name
          *  @param  integer $notooltip        1=Disable tooltip
    -     *  @param  array   $productFournList  list of ProductFournisseur objects
    +     *  @param  array   $productFournList list of ProductFournisseur objects
          *                                    to display in table format.
          *  @return string                    String with supplier price
          */
         function display_price_product_fournisseur($showunitprice=1,$showsuptitle=1,$maxlen=0,$notooltip=0, $productFournList=array())
         {
    +        // phpcs:enable
             global $langs;
     
             $out = '';
    @@ -848,6 +888,4 @@ class ProductFournisseur extends Product
     
     		return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
     	}
    -
     }
    -
    diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php
    index 494196e9c2d..9ff4cfb7d15 100644
    --- a/htdocs/fourn/class/paiementfourn.class.php
    +++ b/htdocs/fourn/class/paiementfourn.class.php
    @@ -2,10 +2,11 @@
     /* Copyright (C) 2002-2004 Rodolphe Quiedeville   <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007 Laurent Destailleur    <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo  <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin          <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin          <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2011 Juanjo Menent          <jmenent@2byte.es>
      * Copyright (C) 2014      Marcos García          <marcosgdf@gmail.com>
      * Copyright (C) 2018      Nicolas ZABOURI	  <info@inovea-conseil.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.francenetlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -35,8 +36,16 @@ require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php';
      */
     class PaiementFourn extends Paiement
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='payment_supplier';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='paiementfourn';
    +
     	public $picto = 'payment';
     
     	var $statut;        //Status of payment. 0 = unvalidated; 1 = validated
    @@ -254,7 +263,6 @@ class PaiementFourn extends Paiement
     							$this->error=$this->db->lasterror();
     							$error++;
     						}
    -
     					}
     					else
     					{
    @@ -497,6 +505,7 @@ class PaiementFourn extends Paiement
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoi le libelle d'un statut donne
     	 *
    @@ -506,6 +515,7 @@ class PaiementFourn extends Paiement
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$langs->load('compta');
    @@ -645,14 +655,12 @@ class PaiementFourn extends Paiement
     			}
     
     			// For compatibility
    -			if (! $mybool)
    -			{
    +			if ($mybool === false) {
     				$file = $conf->global->SUPPLIER_PAYMENT_ADDON.".php";
     				$classname = "mod_supplier_payment_".$conf->global->SUPPLIER_PAYMENT_ADDON;
     				$classname = preg_replace('/\-.*$/','',$classname);
     				// Include file with class
    -				foreach ($conf->file->dol_document_root as $dirroot)
    -				{
    +				foreach ($conf->file->dol_document_root as $dirroot) {
     					$dir = $dirroot."/core/modules/supplier_payment/";
     
     					// Load file with numbering class (if found)
    @@ -662,8 +670,7 @@ class PaiementFourn extends Paiement
     				}
     			}
     
    -			if (! $mybool)
    -			{
    +			if ($mybool === false) {
     				dol_print_error('',"Failed to include file ".$file);
     				return '';
     			}
    @@ -761,14 +768,16 @@ class PaiementFourn extends Paiement
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 *    	Load the third party of object, from id into this->thirdparty
    +	 *  Load the third party of object, from id into this->thirdparty
     	 *
    -	 *		@param		int		$force_thirdparty_id	Force thirdparty id
    -	 *		@return		int								<0 if KO, >0 if OK
    +	 *	@param		int		$force_thirdparty_id	Force thirdparty id
    +	 *	@return		int								<0 if KO, >0 if OK
     	 */
     	function fetch_thirdparty($force_thirdparty_id=0)
     	{
    +        // phpcs:enable
     		require_once DOL_DOCUMENT_ROOT . '/fourn/class/fournisseur.facture.class.php';
     
     		if (empty($force_thirdparty_id))
    @@ -786,5 +795,4 @@ class PaiementFourn extends Paiement
     
     		return parent::fetch_thirdparty($force_thirdparty_id);
     	}
    -
     }
    diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php
    index 9009364d4b1..8098946b186 100644
    --- a/htdocs/fourn/commande/card.php
    +++ b/htdocs/fourn/commande/card.php
    @@ -2,12 +2,13 @@
     /* Copyright (C) 2004-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Eric	Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2016 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2016 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2015 Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2011-2015 Philippe Grand       <philippe.grand@atoo-net.com>
    + * Copyright (C) 2011-2018 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2012-2016 Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2013      Florian Henry        <florian.henry@open-concept.pro>
      * Copyright (C) 2014      Ion Agorria          <ion@agorria.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This	program	is free	software; you can redistribute it and/or modify
      * it under	the	terms of the GNU General Public	License	as published by
    @@ -220,7 +221,6 @@ if (empty($reshook))
     				//$newstatus=3;  // Submited
     				// TODO If there is at least one reception, we can set to Received->Received partially
     				$newstatus=4;  // Received partially
    -
     			}
     			else if ($object->statut == 6) $newstatus=2;	// Canceled->Approved
     			else if ($object->statut == 7) $newstatus=3;	// Canceled->Process running
    @@ -351,7 +351,7 @@ if (empty($reshook))
     				if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
     					$idprod = $res->fk_product_child;
     				} else {
    -					setEventMessage($langs->trans('ErrorProductCombinationNotFound'), 'errors');
    +					setEventMessages($langs->trans('ErrorProductCombinationNotFound'), null, 'errors');
     					$error ++;
     				}
     			}
    @@ -399,7 +399,11 @@ if (empty($reshook))
     			{
     				$label = $productsupplier->label;
     
    -				$desc = $productsupplier->description;
    +				// if we use supplier description of the products
    +				if(!empty($productsupplier->desc_supplier) && !empty($conf->global->PRODUIT_FOURN_TEXTS)) {
    +				    $desc = $productsupplier->desc_supplier;
    +				} else $desc = $productsupplier->description;
    +
     				if (trim($product_desc) != trim($desc)) $desc = dol_concatdesc($desc, $product_desc);
     
     				$type = $productsupplier->type;
    @@ -695,7 +699,6 @@ if (empty($reshook))
     			dol_print_error($db,$object->error);
     			exit;
     			}
    -
     	}
     
     	// Remove a product line
    @@ -1438,7 +1441,6 @@ if ($action=='create')
     
     		// Object source contacts list
     		$srccontactslist = $objectsrc->liste_contact(- 1, 'external', 1);
    -
     	}
     	else
     	{
    @@ -1538,7 +1540,7 @@ if ($action=='create')
     	print '<td>';
     	$usehourmin=0;
     	if (! empty($conf->global->SUPPLIER_ORDER_USE_HOUR_FOR_DELIVERY_DATE)) $usehourmin=1;
    -	$form->select_date($datelivraison?$datelivraison:-1,'liv_',$usehourmin,$usehourmin,'',"set");
    +	print $form->selectDate($datelivraison?$datelivraison:-1, 'liv_', $usehourmin, $usehourmin, '', "set");
     	print '</td></tr>';
     
     	// Bank Account
    @@ -1695,7 +1697,6 @@ elseif (! empty($object->id))
     	if ($action	== 'delete')
     	{
     		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteOrder'), $langs->trans('ConfirmDeleteOrder'), 'confirm_delete', '', 0, 2);
    -
     	}
     
     	// Clone confirmation
    @@ -1707,7 +1708,6 @@ elseif (! empty($object->id))
     		);
     		// Paiement incomplet. On demande si motif = escompte ou autre
     		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id,$langs->trans('CloneOrder'),$langs->trans('ConfirmCloneOrder',$object->ref),'confirm_clone',$formquestion,'yes',1);
    -
     	}
     
     	// Confirmation de la validation
    @@ -1786,14 +1786,12 @@ elseif (! empty($object->id))
     	if ($action	== 'refuse')
     	{
     		$formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=$object->id",$langs->trans("DenyingThisOrder"),$langs->trans("ConfirmDenyingThisOrder",$object->ref),"confirm_refuse", '', 0, 1);
    -
     	}
     
     	// Confirmation de l'annulation
     	if ($action	== 'cancel')
     	{
     		$formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=$object->id",$langs->trans("Cancel"),$langs->trans("ConfirmCancelThisOrder",$object->ref),"confirm_cancel", '', 0, 1);
    -
     	}
     
     	// Confirmation de l'envoi de la commande
    @@ -1801,7 +1799,6 @@ elseif (! empty($object->id))
     	{
     		$date_com = dol_mktime(GETPOST('rehour'),GETPOST('remin'),GETPOST('resec'),GETPOST("remonth"),GETPOST("reday"),GETPOST("reyear"));
     		$formconfirm = $form->formconfirm($_SERVER['PHP_SELF']."?id=".$object->id."&datecommande=".$date_com."&methode=".$_POST["methodecommande"]."&comment=".urlencode($_POST["comment"]), $langs->trans("MakeOrder"),$langs->trans("ConfirmMakeOrder",dol_print_date($date_com,'day')),"confirm_commande",'',0,2);
    -
     	}
     
     	// Confirmation to delete line
    @@ -2041,7 +2038,7 @@ elseif (! empty($object->id))
     		print '<input type="hidden" name="action" value="setdate_livraison">';
     		$usehourmin=0;
     		if (! empty($conf->global->SUPPLIER_ORDER_USE_HOUR_FOR_DELIVERY_DATE)) $usehourmin=1;
    -		$form->select_date($object->date_livraison?$object->date_livraison:-1,'liv_',$usehourmin,$usehourmin,'',"setdate_livraison");
    +		print $form->selectDate($object->date_livraison?$object->date_livraison:-1, 'liv_', $usehourmin, $usehourmin, '', "setdate_livraison");
     		print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">';
     		print '</form>';
     	}
    @@ -2444,7 +2441,6 @@ elseif (! empty($object->id))
     				{
     					print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delete">'.$langs->trans("Delete").'</a>';
     				}
    -
     			}
     
     			print "</div>";
    @@ -2465,7 +2461,7 @@ elseif (! empty($object->id))
     			print '<tr><td>'.$langs->trans("OrderDate").'</td><td>';
     			$date_com = dol_mktime(GETPOST('rehour','int'), GETPOST('remin','int'), GETPOST('resec','int'), GETPOST('remonth','int'), GETPOST('reday','int'), GETPOST('reyear','int'));
     			if (empty($date_com)) $date_com=dol_now();
    -			print $form->select_date($date_com,'',1,1,'',"commande",1,1,1);
    +			print $form->selectDate($date_com, '', 1, 1, '', "commande", 1, 1);
     			print '</td></tr>';
     
     			print '<tr><td>'.$langs->trans("OrderMode").'</td><td>';
    @@ -2521,7 +2517,7 @@ elseif (! empty($object->id))
     				//print '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Receive").'</td></tr>';
     				print '<tr><td>'.$langs->trans("DeliveryDate").'</td><td>';
     				$datepreselected = dol_now();
    -				print $form->select_date($datepreselected,'',1,1,'',"commande",1,1,1);
    +				print $form->selectDate($datepreselected, '', 1, 1, '', "commande", 1, 1);
     				print "</td></tr>\n";
     
     				print "<tr><td class=\"fieldrequired\">".$langs->trans("Delivery")."</td><td>\n";
    @@ -2719,7 +2715,6 @@ elseif (! empty($object->id))
     							}
     						}
     					}
    -
     				}
     				elseif ($user_status_code == "PERMISSION_DENIED")
     				{
    @@ -2777,5 +2772,4 @@ elseif (! empty($object->id))
     
     // End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/commande/contact.php b/htdocs/fourn/commande/contact.php
    index 262d73a6082..08e30d04b7f 100644
    --- a/htdocs/fourn/commande/contact.php
    +++ b/htdocs/fourn/commande/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Patrick Rouillon     <patrick@rouillon.net>
      * Copyright (C) 2005-2009 Destailleur Laurent  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -33,10 +33,8 @@ if (! empty($conf->projet->enabled)) {
     	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
    -$langs->load("facture");
    -$langs->load("orders");
    -$langs->load("sendings");
    -$langs->load("companies");
    +// Load translation files required by the page
    +$langs->loadLangs(array("facture","orders","sendings","companies"));
     
     $id		= GETPOST('id', 'int');
     $ref	= GETPOST('ref', 'alpha');
    @@ -194,7 +192,6 @@ if ($id > 0 || ! empty($ref))
     
     		// Contacts lines
     		include DOL_DOCUMENT_ROOT.'/core/tpl/contacts.tpl.php';
    -
     	}
     	else
     	{
    @@ -203,6 +200,6 @@ if ($id > 0 || ! empty($ref))
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php
    index 761cce030f7..5b5ae13f86b 100644
    --- a/htdocs/fourn/commande/dispatch.php
    +++ b/htdocs/fourn/commande/dispatch.php
    @@ -2,11 +2,12 @@
     /* Copyright (C) 2004-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2014      Cedric Gross         <c.gross@kreiz-it.fr>
    - * Copyright (C) 2016      Florian Henry         <florian.henry@atm-consulting.fr>
    + * Copyright (C) 2016      Florian Henry        <florian.henry@atm-consulting.fr>
      * Copyright (C) 2017      Ferran Marcet        <fmarcet@2byte.es>
    + * Copyright (C) 2018      Frédéric France      <frederic.france@netlogic.fr>
      *
      * This	program	is free	software; you can redistribute it and/or modify
      * it under the	terms of the GNU General Public	License	as published by
    @@ -39,13 +40,9 @@ require_once DOL_DOCUMENT_ROOT . '/product/class/html.formproduct.class.php';
     if (! empty($conf->projet->enabled))
     	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     
    -$langs->load('orders');
    -$langs->load('sendings');
    -$langs->load('companies');
    -$langs->load('bills');
    -$langs->load('deliveries');
    -$langs->load('products');
    -$langs->load('stocks');
    +// Load translation files required by the page
    +$langs->loadLangs(array("bills", "orders", "sendings", "companies", "deliveries", "products", "stocks"));
    +
     if (! empty($conf->productbatch->enabled))
     	$langs->load('productbatch');
     
    @@ -492,7 +489,7 @@ if ($id > 0 || ! empty($ref)) {
     			$db->free($resql);
     		}
     
    -		$sql = "SELECT l.rowid, l.fk_product, l.subprice, l.remise_percent, SUM(l.qty) as qty,";
    +		$sql = "SELECT l.rowid, l.fk_product, l.subprice, l.remise_percent, l.ref AS sref, SUM(l.qty) as qty,";
     		$sql .= " p.ref, p.label, p.tobatch, p.fk_default_warehouse";
     		$sql .= " FROM " . MAIN_DB_PREFIX . "commande_fournisseurdet as l";
     		$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON l.fk_product=p.rowid";
    @@ -511,7 +508,7 @@ if ($id > 0 || ! empty($ref)) {
     				print '<tr class="liste_titre">';
     
     				print '<td>' . $langs->trans("Description") . '</td>';
    -				if (!empty($conf->productbatch->enabled))
    +				if (! empty($conf->productbatch->enabled))
     				{
     					print '<td class="dispatch_batch_number_title">'.$langs->trans("batch_number").'</td>';
     					print '<td class="dispatch_dluo_title">'.$langs->trans("EatByDate").'</td>';
    @@ -521,8 +518,9 @@ if ($id > 0 || ! empty($ref)) {
     				{
     					print '<td></td>';
     					print '<td></td>';
    -					print '<td></td>';					
    +					print '<td></td>';
     				}
    +				print '<td align="right">' . $langs->trans("SupplierRef") . '</td>';
     				print '<td align="right">' . $langs->trans("QtyOrdered") . '</td>';
     				print '<td align="right">' . $langs->trans("QtyDispatchedShort") . '</td>';
     				print '<td align="right">' . $langs->trans("QtyToDispatchShort") . '</td>';
    @@ -535,7 +533,6 @@ if ($id > 0 || ! empty($ref)) {
     			$nbproduct = 0;			// Nb of predefined product lines to dispatch (already done or not) if SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED is off (default)
     									// or nb of line that remain to dispatch if SUPPLIER_ORDER_DISABLE_STOCK_DISPATCH_WHEN_TOTAL_REACHED is on.
     
    -			$var = false;
     			while ( $i < $num ) {
     				$objp = $db->fetch_object($resql);
     
    @@ -594,6 +591,9 @@ if ($id > 0 || ! empty($ref)) {
     						if (! empty($objp->remise_percent) && empty($conf->global->STOCK_EXCLUDE_DISCOUNT_FOR_PMP))
     							$up_ht_disc = price2num($up_ht_disc * (100 - $objp->remise_percent) / 100, 'MU');
     
    +						// Supplier ref
    +						print '<td align="right">'.$objp->sref.'</td>';
    +
     						// Qty ordered
     						print '<td align="right">' . $objp->qty . '</td>';
     
    @@ -632,15 +632,15 @@ if ($id > 0 || ! empty($ref)) {
     							print '</td>';
     							print '<td class="nowraponall">';
     							$dlcdatesuffix = dol_mktime(0, 0, 0, GETPOST('dlc' . $suffix . 'month'), GETPOST('dlc' . $suffix . 'day'), GETPOST('dlc' . $suffix . 'year'));
    -							$form->select_date($dlcdatesuffix, 'dlc' . $suffix, '', '', 1, "");
    +							print $form->selectDate($dlcdatesuffix, 'dlc' . $suffix, '', '', 1, '');
     							print '</td>';
     							print '<td class="nowraponall">';
     							$dluodatesuffix = dol_mktime(0, 0, 0, GETPOST('dluo' . $suffix . 'month'), GETPOST('dluo' . $suffix . 'day'), GETPOST('dluo' . $suffix . 'year'));
    -							$form->select_date($dluodatesuffix, 'dluo' . $suffix, '', '', 1, "");
    +							print $form->selectDate($dluodatesuffix, 'dluo' . $suffix, '', '', 1, '');
     							print '</td>';
    -							print '<td colspan="2">&nbsp</td>'; // Qty ordered + qty already dispatached
    +							print '<td colspan="3">&nbsp</td>'; // Supplier ref + Qty ordered + qty already dispatched
     						} else {
    -							
    +
     							$type = 'dispatch';
     							print '<td align="right">';
     							print '</td>';     // Qty to dispatch
    @@ -651,7 +651,7 @@ if ($id > 0 || ! empty($ref)) {
     							print '</tr>';
     
     							print '<tr class="oddeven" name="' . $type . $suffix . '">';
    -							print '<td colspan="6">';
    +							print '<td colspan="7">';
     							print '<input name="fk_commandefourndet' . $suffix . '" type="hidden" value="' . $objp->rowid . '">';
     							print '<input name="product' . $suffix . '" type="hidden" value="' . $objp->fk_product . '">';
     
    @@ -673,7 +673,7 @@ if ($id > 0 || ! empty($ref)) {
     						print '<input id="qty' . $suffix . '" name="qty' . $suffix . '" type="text" class="width50 right" value="' . (GETPOST('qty' . $suffix) != '' ? GETPOST('qty' . $suffix) : $remaintodispatch) . '">';
     						print '</td>';
     
    -                        print '<td>';
    +						print '<td>';
     						if (! empty($conf->productbatch->enabled) && $objp->tobatch == 1) {
     						    $type = 'batch';
     						    //print img_picto($langs->trans('AddDispatchBatchLine'), 'split.png', 'class="splitbutton" onClick="addDispatchLine(' . $i . ',\'' . $type . '\')"');
    @@ -793,8 +793,6 @@ if ($id > 0 || ! empty($ref)) {
     			print '<td>' . $langs->trans("Date") . '</td>';
     			print "</tr>\n";
     
    -			$var = false;
    -
     			while ( $i < $num ) {
     				$objp = $db->fetch_object($resql);
     
    @@ -868,7 +866,6 @@ if ($id > 0 || ! empty($ref)) {
     				print "</tr>\n";
     
     				$i ++;
    -				$var = ! $var;
     			}
     			$db->free($resql);
     
    @@ -880,6 +877,6 @@ if ($id > 0 || ! empty($ref)) {
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/commande/document.php b/htdocs/fourn/commande/document.php
    index 59358279e31..2c460d1bedc 100644
    --- a/htdocs/fourn/commande/document.php
    +++ b/htdocs/fourn/commande/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Marcos García         <marcosgdf@gmail.com>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
    @@ -38,14 +38,8 @@ if (! empty($conf->projet->enabled)) {
     	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
    -$langs->load('orders');
    -$langs->load('other');
    -$langs->load('sendings');
    -$langs->load('companies');
    -$langs->load('bills');
    -$langs->load('deliveries');
    -$langs->load('products');
    -$langs->load('stocks');
    +// Load translation files required by the page
    +$langs->loadLangs(array("bills", "orders", "sendings", "companies", "deliveries", "products", "stocks","other"));
     
     $id = GETPOST('id','int');
     $ref = GETPOST('ref', 'alpha');
    @@ -107,7 +101,7 @@ if ($object->id > 0)
     	dol_fiche_head($head, 'documents', $langs->trans('SupplierOrder'), -1, 'order');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -181,7 +175,6 @@ if ($object->id > 0)
     	$permtoedit = $user->rights->fournisseur->commande->creer;
     	$param = '&id=' . $object->id;
     	include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
     }
     else
     {
    @@ -189,6 +182,6 @@ else
     	exit;
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/commande/index.php b/htdocs/fourn/commande/index.php
    index 4eead48abf4..1bdc9a07b48 100644
    --- a/htdocs/fourn/commande/index.php
    +++ b/htdocs/fourn/commande/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2006	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Vinicius Nogueira		<viniciusvgn@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -34,8 +34,8 @@ $orderid = GETPOST('orderid');
     if ($user->societe_id) $socid=$user->societe_id;
     $result = restrictedArea($user, 'fournisseur', $orderid, '', 'commande');
     
    -$langs->load("suppliers");
    -$langs->load("orders");
    +// Load translation files required by the page
    +$langs->loadLangs(array("suppliers", "orders"));
     
     
     /*
    @@ -432,6 +432,6 @@ print "</table><br>";
     
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/commande/info.php b/htdocs/fourn/commande/info.php
    index 016e9007fb9..5d6664347b7 100644
    --- a/htdocs/fourn/commande/info.php
    +++ b/htdocs/fourn/commande/info.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -33,10 +33,8 @@ if (! empty($conf->projet->enabled)) {
     	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
    -$langs->load("orders");
    -$langs->load("suppliers");
    -$langs->load("companies");
    -$langs->load('stocks');
    +// Load translation files required by the page
    +$langs->loadLangs(array("suppliers", "orders", "companies", "stocks"));
     
     $id=GETPOST('id','int');
     $ref=GETPOST('ref','alpha');
    @@ -221,7 +219,6 @@ if (!empty($object->id))
         show_actions_done($conf,$langs,$db,$object,null,0,$actioncode, '', $filters);
     }
     
    -
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php
    index 590bf14949e..a08e39e157c 100644
    --- a/htdocs/fourn/commande/list.php
    +++ b/htdocs/fourn/commande/list.php
    @@ -1,11 +1,12 @@
     <?php
    -/* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    +/* Copyright (C) 2001-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
      * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2014      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2016      Ferran Marcet        <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -112,7 +113,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('commande_fournisseur');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -262,7 +263,6 @@ if (empty($reshook))
     				$res = $object->create($user);
     
     				if($res > 0) $nb_bills_created++;
    -
     			}
     
     			if ($object->id > 0)
    @@ -427,7 +427,7 @@ if (empty($reshook))
     		if (! $error)
     		{
     			$db->commit();
    -			setEventMessage($langs->trans('BillCreated', $nb_bills_created));
    +			setEventMessages($langs->trans('BillCreated', $nb_bills_created), null, 'mesgs');
     		}
     		else
     		{
    @@ -517,6 +517,7 @@ if ($sall) $sql .= natural_search(array_keys($fieldstosearchall), $sall);
     if ($search_company) $sql .= natural_search('s.nom', $search_company);
     if ($search_request_author) $sql.=natural_search(array('u.lastname','u.firstname','u.login'), $search_request_author) ;
     if ($search_billed != '' && $search_billed >= 0) $sql .= " AND cf.billed = ".$db->escape($search_billed);
    +if ($search_product_category > 0) $sql.= " AND cp.fk_categorie = ".$search_product_category;
     
     //Required triple check because statut=0 means draft filter
     if (GETPOST('statut', 'intcomma') !== '')
    @@ -681,7 +682,7 @@ if ($resql)
     		print $langs->trans('DateInvoice');
     		print '</td>';
     		print '<td>';
    -		print $form->select_date('', '', '', '', '', '', 1, 1);
    +		print $form->selectDate('', '', '', '', '', '', 1, 1);
     		print '</td>';
     		print '</tr>';
     		print '<tr>';
    @@ -1127,7 +1128,7 @@ if ($resql)
     		// Status
     		if (! empty($arrayfields['cf.fk_statut']['checked']))
     		{
    -			print '<td align="right" class="nowrap">'.$objectstatic->LibStatut($obj->fk_statut, 5, $obj->billed, 1).'</td>';
    +			print '<td align="right" class="nowrap">'.$objectstatic->LibStatut($obj->fk_statut, 5, $obj->billed).'</td>';
     			if (! $i) $totalarray['nbfield']++;
     		}
     		// Billed
    @@ -1197,6 +1198,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/commande/note.php b/htdocs/fourn/commande/note.php
    index 44edbdc8f00..071f87553f2 100644
    --- a/htdocs/fourn/commande/note.php
    +++ b/htdocs/fourn/commande/note.php
    @@ -1,9 +1,9 @@
     <?php
     /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Marcos García        <marcosgdf@gmail.com>
    - * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
    + * Copyright (C) 2017      Ferran Marcet       	<fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,10 +32,8 @@ if (! empty($conf->projet->enabled)) {
     	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
    -$langs->load("orders");
    -$langs->load("suppliers");
    -$langs->load("companies");
    -$langs->load('stocks');
    +// Load translation files required by the page
    +$langs->loadLangs(array("suppliers", "orders", "companies", "stocks"));
     
     $id = GETPOST('facid','int')?GETPOST('facid','int'):GETPOST('id','int');
     $ref = GETPOST('ref');
    @@ -155,7 +153,6 @@ if ($id > 0 || ! empty($ref))
         }
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/commande/orderstoinvoice.php b/htdocs/fourn/commande/orderstoinvoice.php
    index 4c229518eba..9c32c39c2b4 100644
    --- a/htdocs/fourn/commande/orderstoinvoice.php
    +++ b/htdocs/fourn/commande/orderstoinvoice.php
    @@ -1,13 +1,14 @@
     <?php
    -/* Copyright (C) 2001-2005 Rodolphe Quiedeville   	<rodolphe@quiedeville.org>
    +/* Copyright (C) 2001-2005 Rodolphe Quiedeville     <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur   	<eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo  	<marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin          	<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin          	<regis.houssin@inodbox.com>
      * Copyright (C) 2012	   Andreu Bisquerra Gaya  	<jove@bisquerra.com>
      * Copyright (C) 2012	   David Rodriguez Martinez <davidrm146@gmail.com>
      * Copyright (C) 2012-2017 Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2014	   Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2015      Marcos García            <marcosgdf@gmail.com>
    + * Copyright (C) 2018      Frédéric France          <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -40,9 +41,8 @@ if (! empty($conf->projet->enabled)) {
     	require_once DOL_DOCUMENT_ROOT . '/core/class/html.formprojet.class.php';
     }
     
    -$langs->load('orders');
    -$langs->load('deliveries');
    -$langs->load('companies');
    +// Load translation files required by the page
    +$langs->loadLangs(array("orders", "companies", "deliveries"));
     
     if (! $user->rights->fournisseur->facture->creer)
     	accessforbidden();
    @@ -104,9 +104,9 @@ if (($action == 'create' || $action == 'add') && ! $error) {
     	if (! empty($conf->projet->enabled))
     		require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     
    -	$langs->load('bills');
    -	$langs->load('products');
    -	$langs->load('main');
    +	// Load translation files required by the page
    +    $langs->loadLangs(array("bills", "main", "products"));
    +
     	if (isset($_GET['orders_to_invoice'])) {
     		$orders_id = GETPOST('orders_to_invoice','',1);
     		$n = count($orders_id);
    @@ -261,7 +261,6 @@ if (($action == 'create' || $action == 'add') && ! $error) {
     						$error++;
     						break;
     					}
    -
     				}
     			}
     
    @@ -270,7 +269,6 @@ if (($action == 'create' || $action == 'add') && ! $error) {
     				header('Location: ' . DOL_URL_ROOT . '/fourn/facture/card.php?facid=' . $id);
     				exit();
     			}
    -
     		} else {
     			$db->rollback();
     			$action = 'create';
    @@ -332,7 +330,7 @@ if ($action == 'create' && !$error) {
     
     	// Date invoice
     	print '<tr><td class="fieldrequired">' . $langs->trans('Date') . '</td><td colspan="2">';
    -	$html->select_date('', '', '', '', '', "add", 1, 1);
    +	print $html->selectDate('', '', '', '', '', "add", 1, 1);
     	print '</td></tr>';
     	// Payment term
     	print '<tr><td class="nowrap">' . $langs->trans('PaymentConditionsShort') . '</td><td colspan="2">';
    @@ -486,8 +484,8 @@ if (($action != 'create' && $action != 'add') && !$error) {
     		$num = $db->num_rows($resql);
     		print load_fiche_titre($title);
     		$i = 0;
    -		$period = $html->select_date($date_start, 'date_start', 0, 0, 1, '', 1, 0, 1) . ' - ' . $html->select_date($date_end, 'date_end', 0, 0, 1, '', 1, 0, 1);
    -		$periodely = $html->select_date($date_starty, 'date_start_dely', 0, 0, 1, '', 1, 0, 1) . ' - ' . $html->select_date($date_endy, 'date_end_dely', 0, 0, 1, '', 1, 0, 1);
    +		$period = $html->selectDate($date_start, 'date_start', 0, 0, 1, '', 1, 0) . ' - ' . $html->selectDate($date_end, 'date_end', 0, 0, 1, '', 1, 0);
    +		$periodely = $html->selectDate($date_starty, 'date_start_dely', 0, 0, 1, '', 1, 0) . ' - ' . $html->selectDate($date_endy, 'date_end_dely', 0, 0, 1, '', 1, 0);
     
     		if (! empty($socid)) {
     			// Company
    @@ -617,5 +615,6 @@ if (($action != 'create' && $action != 'add') && !$error) {
     
     dol_htmloutput_mesg($mesg, $mesgs);
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/commande/tpl/linkedobjectblock.tpl.php b/htdocs/fourn/commande/tpl/linkedobjectblock.tpl.php
    index 4ce44845bf6..7ffc60815e6 100644
    --- a/htdocs/fourn/commande/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/fourn/commande/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2014      Marcos García <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/fourn/contact.php b/htdocs/fourn/contact.php
    index a334442e9ab..105ab78806c 100644
    --- a/htdocs/fourn/contact.php
    +++ b/htdocs/fourn/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2006 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2006 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -123,14 +123,12 @@ if ($result)
         }
         print "</table>";
         $db->free($result);
    -
     }
     else
     {
         dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php
    index bbec3ea6ed6..b6ff1d36551 100644
    --- a/htdocs/fourn/facture/card.php
    +++ b/htdocs/fourn/facture/card.php
    @@ -3,12 +3,13 @@
      * Copyright (C) 2004-2016	Laurent Destailleur 	<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Christophe Combelles	<ccomb@free.fr>
      * Copyright (C) 2005		Marc Barilley			<marc@ocebo.fr>
    - * Copyright (C) 2005-2013	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2010-2014	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2013-2015	Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2014-2016  Marcos García			<marcosgdf@gmail.com>
      * Copyright (C) 2016-2017	Alexandre Spangaro		<aspangaro@zendsi.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -94,7 +95,7 @@ if ($id > 0 || ! empty($ref))
     $socid='';
     if (! empty($user->societe_id)) $socid=$user->societe_id;
     $isdraft = (($object->statut == FactureFournisseur::STATUS_DRAFT) ? 1 : 0);
    -$result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture', 'fk_soc', 'rowid', null, $isdraft);
    +$result = restrictedArea($user, 'fournisseur', $id, 'facture_fourn', 'facture', 'fk_soc', 'rowid', $isdraft);
     
     $permissionnote=$user->rights->fournisseur->facture->creer;	// Used by the include of actions_setnotes.inc.php
     $permissiondellink=$user->rights->fournisseur->facture->creer;	// Used by the include of actions_dellink.inc.php
    @@ -532,7 +533,6 @@ if (empty($reshook))
     				{
     					$error++;
     				}
    -
     			}
     			if ($object->type == FactureFournisseur::TYPE_CREDIT_NOTE || $object->type == FactureFournisseur::TYPE_DEPOSIT)
     			{
    @@ -550,7 +550,6 @@ if (empty($reshook))
     						break;
     					}
     				}
    -
     			}
     
     			if (empty($error))
    @@ -764,7 +763,6 @@ if (empty($reshook))
     
     						$object->update_price(1);
     					}
    -
     				}
     
     				if(GETPOST('invoiceAvoirWithPaymentRestAmount', 'int')==1 && $id>0)
    @@ -1108,6 +1106,7 @@ if (empty($reshook))
     		$product_desc=(GETPOST('dp_desc')?GETPOST('dp_desc'):'');
     		$date_start=dol_mktime(GETPOST('date_start'.$predef.'hour'), GETPOST('date_start'.$predef.'min'), GETPOST('date_start' . $predef . 'sec'), GETPOST('date_start'.$predef.'month'), GETPOST('date_start'.$predef.'day'), GETPOST('date_start'.$predef.'year'));
     		$date_end=dol_mktime(GETPOST('date_end'.$predef.'hour'), GETPOST('date_end'.$predef.'min'), GETPOST('date_end' . $predef . 'sec'), GETPOST('date_end'.$predef.'month'), GETPOST('date_end'.$predef.'day'), GETPOST('date_end'.$predef.'year'));
    +
     		$prod_entry_mode = GETPOST('prod_entry_mode');
     		if ($prod_entry_mode == 'free')
     		{
    @@ -1172,7 +1171,7 @@ if (empty($reshook))
     				if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
     					$idprod = $res->fk_product_child;
     				} else {
    -					setEventMessage($langs->trans('ErrorProductCombinationNotFound'), 'errors');
    +					setEventMessages($langs->trans('ErrorProductCombinationNotFound'), null, 'errors');
     					$error ++;
     				}
     			}
    @@ -1218,7 +1217,11 @@ if (empty($reshook))
     			{
     				$label = $productsupplier->label;
     
    -				$desc = $productsupplier->description;
    +				// if we use supplier description of the products
    +				if(!empty($productsupplier->desc_supplier) && !empty($conf->global->PRODUIT_FOURN_TEXTS)) {
    +				    $desc = $productsupplier->desc_supplier;
    +				} else $desc = $productsupplier->description;
    +
     				if (trim($product_desc) != trim($desc)) $desc = dol_concatdesc($desc, $product_desc);
     
     				$type = $productsupplier->type;
    @@ -1674,7 +1677,6 @@ if ($action == 'create')
     			// Replicate extrafields
     			$objectsrc->fetch_optionals($originid);
     			$object->array_options = $objectsrc->array_options;
    -
     		}
     	}
     	else
    @@ -1961,12 +1963,12 @@ if ($action == 'create')
     
     	// Date invoice
     	print '<tr><td class="fieldrequired">'.$langs->trans('DateInvoice').'</td><td>';
    -	$form->select_date($dateinvoice,'','','','',"add",1,1);
    +	print $form->selectDate($dateinvoice, '', '', '', '', "add", 1, 1);
     	print '</td></tr>';
     
     	// Due date
     	print '<tr><td>'.$langs->trans('DateMaxPayment').'</td><td>';
    -	$form->select_date($datedue,'ech','','','',"add",1,1);
    +	print $form->selectDate($datedue, 'ech', '', '', '', "add", 1, 1);
     	print '</td></tr>';
     
     	// Payment term
    @@ -2262,7 +2264,6 @@ else
                 }
     
     			$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ValidateBill'), $text, 'confirm_valid', $formquestion, 1, 1);
    -
             }
     
             // Confirmation edit (back to draft)
    @@ -2298,27 +2299,23 @@ else
                     );
                 }
                 $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('UnvalidateBill'), $langs->trans('ConfirmUnvalidateBill', $object->ref), 'confirm_edit', $formquestion, 1, 1);
    -
     		}
     
     		// Confirmation set paid
     		if ($action == 'paid')
     		{
     			$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ClassifyPaid'), $langs->trans('ConfirmClassifyPaidBill', $object->ref), 'confirm_paid', '', 0, 1);
    -
     		}
     
     		// Confirmation de la suppression de la facture fournisseur
     		if ($action == 'delete')
     		{
     			$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteBill'), $langs->trans('ConfirmDeleteBill'), 'confirm_delete', '', 0, 1);
    -
     		}
     		if ($action == 'deletepaiement')
     		{
     			$payment_id = GETPOST('paiement_id');
     			$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&paiement_id='.$payment_id, $langs->trans('DeletePayment'), $langs->trans('ConfirmDeletePayment'), 'confirm_delete_paiement', '', 0, 1);
    -
     		}
     
     	   	// Confirmation to delete line
    @@ -3207,7 +3204,6 @@ else
     	}
     }
     
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php
    index 6b54e28987f..f570a33951c 100644
    --- a/htdocs/fourn/facture/contact.php
    +++ b/htdocs/fourn/facture/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005		Patrick Rouillon	<patrick@rouillon.net>
      * Copyright (C) 2005-2015	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -34,9 +34,7 @@ if (! empty($conf->projet->enabled)) {
     	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
    -$langs->load("bills");
    -$langs->load('other');
    -$langs->load("companies");
    +$langs->loadLangs(array("bills", "other", "companies"));
     
     $id		= (GETPOST('id','int') ? GETPOST('id','int') : GETPOST('facid','int'));
     $ref	= GETPOST('ref','alpha');
    @@ -268,7 +266,6 @@ if ($id > 0 || ! empty($ref))
     
     		// Contacts lines
     		include DOL_DOCUMENT_ROOT.'/core/tpl/contacts.tpl.php';
    -
     	}
     	else
     	{
    @@ -276,6 +273,6 @@ if ($id > 0 || ! empty($ref))
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/facture/document.php b/htdocs/fourn/facture/document.php
    index 1f0c9f86739..d76d680bc17 100644
    --- a/htdocs/fourn/facture/document.php
    +++ b/htdocs/fourn/facture/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Marc Barilley / Ocebo	<marc@ocebo.com>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Cédric Salvador			<csalvador@gpcsolutions.fr>
      * Copyright (C) 2016		Alexandre Spangaro		<aspangaro@zendsi.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
    @@ -38,9 +38,7 @@ if (! empty($conf->projet->enabled)) {
     	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
    -$langs->load('bills');
    -$langs->load('other');
    -$langs->load("companies");
    +$langs->loadLangs(array('bills', 'other', 'companies'));
     
     $id = GETPOST('facid','int')?GETPOST('facid','int'):GETPOST('id','int');
     $action=GETPOST('action','alpha');
    @@ -145,7 +143,7 @@ if ($object->id > 0)
         print '<div class="fichecenter">';
         print '<div class="underbanner clearboth"></div>';
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -159,7 +157,6 @@ if ($object->id > 0)
     	if ($action == 'delete')
     	{
     		print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id.'&urlfile='.urlencode($_GET["urlfile"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile', '', 0, 1);
    -
     	}
     
     	print '<table class="border" width="100%">';
    @@ -260,6 +257,6 @@ else
         print $langs->trans('ErrorUnknown');
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/facture/impayees.php b/htdocs/fourn/facture/impayees.php
    index c1c4be9fb76..4884a75daff 100644
    --- a/htdocs/fourn/facture/impayees.php
    +++ b/htdocs/fourn/facture/impayees.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2002-2005	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004		Eric Seigne				<eric.seigne@ryxeo.com>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Vinicius Nogueira       <viniciusvgn@gmail.com>
      * Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
      *
    @@ -33,9 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
     
     if (! $user->rights->fournisseur->facture->lire) accessforbidden();
     
    -$langs->load("companies");
    -$langs->load("bills");
    -
    +$langs->loadLangs(array("companies", "bills"));
     
     $socid=GETPOST('socid','int');
     $option = GETPOST('option');
    @@ -296,7 +294,6 @@ if ($user->rights->fournisseur->facture->lire)
     	{
     		dol_print_error($db);
     	}
    -
     }
     
     // End of page
    diff --git a/htdocs/fourn/facture/info.php b/htdocs/fourn/facture/info.php
    index 1297c44037b..8325a3449e9 100644
    --- a/htdocs/fourn/facture/info.php
    +++ b/htdocs/fourn/facture/info.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2006 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016      Alexandre Spangaro   <aspangaro@zendsi.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -34,8 +34,7 @@ if (! empty($conf->projet->enabled)) {
     	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
    -$langs->load('companies');
    -$langs->load('bills');
    +$langs->loadLangs(array("companies", "bills"));
     
     $id = GETPOST("facid",'int')?GETPOST("facid",'int'):GETPOST("id",'int');
     $ref = GETPOST("ref",'alpha');
    @@ -126,6 +125,6 @@ print '</td></tr></table>';
     
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php
    index 98a6956a809..07b53981faf 100644
    --- a/htdocs/fourn/facture/list.php
    +++ b/htdocs/fourn/facture/list.php
    @@ -1,7 +1,7 @@
     <?php
    -/* Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    +/* Copyright (C) 2002-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013-2018 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2013	   Florian Henry        <florian.henry@open-concept.pro>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
    @@ -10,6 +10,7 @@
      * Copyright (C) 2015 	   Abbes Bahfir         <bafbes@gmail.com>
      * Copyright (C) 2015-2016 Ferran Marcet        <fmarcet@2byte.es>
      * Copyright (C) 2017      Josep Lluís Amador   <joseplluis@lliuretic.cat>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -129,7 +130,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('facture_fourn');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -512,7 +513,7 @@ if ($resql)
     		print $langs->trans('DateInvoice');
     		print '</td>';
     		print '<td>';
    -		print $form->select_date('', '', '', '', '', '', 1, 1);
    +		print $form->selectDate('', '', '', '', '', '', 1, 1);
     		print '</td>';
     		print '</tr>';
     		print '<tr>';
    @@ -819,7 +820,6 @@ if ($resql)
     	if ($num > 0)
     	{
     		$i=0;
    -
     		$totalarray=array();
     		while ($i < min($num,$limit))
     		{
    @@ -1132,7 +1132,6 @@ if ($resql)
     			   else print '<td></td>';
     			}
     			print '</tr>';
    -
     		}
     	}
     
    @@ -1167,7 +1166,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/facture/note.php b/htdocs/fourn/facture/note.php
    index 11d59d1170c..b29140d3e12 100644
    --- a/htdocs/fourn/facture/note.php
    +++ b/htdocs/fourn/facture/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -33,8 +33,7 @@ if (! empty($conf->projet->enabled)) {
     	require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
     }
     
    -$langs->load('bills');
    -$langs->load("companies");
    +$langs->loadLangs(array("bills", "companies"));
     
     $id = (GETPOST('id','int') ? GETPOST('id','int') : GETPOST('facid','int'));
     $ref = GETPOST('ref','alpha');
    @@ -214,7 +213,6 @@ if ($object->id > 0)
     	dol_fiche_end();
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/facture/paiement.php b/htdocs/fourn/facture/paiement.php
    index 74593cb8675..fd313ba297c 100644
    --- a/htdocs/fourn/facture/paiement.php
    +++ b/htdocs/fourn/facture/paiement.php
    @@ -4,11 +4,12 @@
      * Copyright (C) 2004-2016	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Christophe Combelles	<ccomb@free.fr>
      * Copyright (C) 2005		Marc Barilley / Ocebo	<marc@ocebo.com>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2014		Teddy Andreotti			<125155@supinfo.com>
      * Copyright (C) 2015       Marcos García           <marcosgdf@gmail.com>
      * Copyright (C) 2015       Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2017       Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -37,10 +38,7 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
    -$langs->load('companies');
    -$langs->load('bills');
    -$langs->load('banks');
    -$langs->load('compta');
    +$langs->loadLangs(array('companies', 'bills', 'banks', 'compta'));
     
     // Security check
     $action		= GETPOST('action','alpha');
    @@ -91,7 +89,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('paymentsupplier');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost('paymentsupplier','','search_');
     
     $arrayfields=array();
     
    @@ -443,7 +441,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
                 print $supplierstatic->getNomUrl(1,'supplier');
                 print '</td></tr>';
                 print '<tr><td class="fieldrequired">'.$langs->trans('Date').'</td><td>';
    -            $form->select_date($dateinvoice,'','','','',"addpaiement",1,1,0,0,'','',$object->date);
    +            print $form->selectDate($dateinvoice, '', '', '', 0, "addpaiement", 1, 1, 0, '', '', $object->date);
                 print '</td></tr>';
                 print '<tr><td class="fieldrequired">'.$langs->trans('PaymentMode').'</td><td>';
                 $form->select_types_paiements(empty($_POST['paiementid'])?$obj->fk_mode_reglement:$_POST['paiementid'],'paiementid');
    @@ -475,14 +473,14 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
     	             * Autres factures impayees
     	             */
     	            $sql = 'SELECT f.rowid as facid, f.ref, f.ref_supplier, f.total_ht, f.total_ttc, f.multicurrency_total_ttc, f.datef as df,';
    -	            $sql.= ' SUM(pf.amount) as am, SUM(pf.multicurrency_amount) as multicurrency_am';
    +	            $sql.= ' SUM(pf.amount) as am, SUM(pf.multicurrency_amount) as multicurrency_am, f.date_lim_reglement as dlr';
     	            $sql.= ' FROM '.MAIN_DB_PREFIX.'facture_fourn as f';
     	            $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'paiementfourn_facturefourn as pf ON pf.fk_facturefourn = f.rowid';
     	            $sql.= " WHERE f.entity = ".$conf->entity;
     	            $sql.= ' AND f.fk_soc = '.$object->socid;
     	            $sql.= ' AND f.paye = 0';
     	            $sql.= ' AND f.fk_statut = 1';  // Statut=0 => non validee, Statut=2 => annulee
    -	            $sql.= ' GROUP BY f.rowid, f.ref, f.ref_supplier, f.total_ht, f.total_ttc, f.multicurrency_total_ttc, f.datef';
    +	            $sql.= ' GROUP BY f.rowid, f.ref, f.ref_supplier, f.total_ht, f.total_ttc, f.multicurrency_total_ttc, f.datef, f.date_lim_reglement';
     	            $resql = $db->query($sql);
     	            if ($resql)
     	            {
    @@ -513,6 +511,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
     	                    print '<td>'.$langs->trans('Invoice').'</td>';
     	                    print '<td>'.$langs->trans('RefSupplier').'</td>';
     	                    print '<td align="center">'.$langs->trans('Date').'</td>';
    +	                    print '<td align="center">'.$langs->trans('DateMaxPayment').'</td>';
     	                    if (!empty($conf->multicurrency->enabled)) print '<td>'.$langs->trans('Currency').'</td>';
     						if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$langs->trans('MulticurrencyAmountTTC').'</td>';
     						if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$langs->trans('MulticurrencyAlreadyPaid').'</td>';
    @@ -572,6 +571,24 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
     	                            print '<td align="center"><b>!!!</b></td>';
     	                        }
     
    +	                        // Date Max Payment
    +	                        if ($objp->dlr > 0 )
    +	                        {
    +	                            print '<td align="center">';
    +	                            print dol_print_date($db->jdate($objp->dlr), 'day');
    +
    +	                            if ($invoice->hasDelay())
    +	                            {
    +	                                print img_warning($langs->trans('Late'));
    +	                            }
    +
    +	                            print '</td>';
    +	                        }
    +	                        else
    +	                        {
    +	                            print '<td align="center"><b>--</b></td>';
    +	                        }
    +
     	                        // Multicurrency
     	                        if (!empty($conf->multicurrency->enabled))
     	                        {
    @@ -663,7 +680,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
     	                    {
     	                        // Print total
     	                        print '<tr class="liste_total">';
    -	                        print '<td colspan="3" align="left">'.$langs->trans('TotalTTC').':</td>';
    +	                        print '<td colspan="4" align="left">'.$langs->trans('TotalTTC').':</td>';
     							if (!empty($conf->multicurrency->enabled)) print '<td>&nbsp;</td>';
     							if (!empty($conf->multicurrency->enabled)) print '<td>&nbsp;</td>';
     							if (!empty($conf->multicurrency->enabled)) print '<td>&nbsp;</td>';
    @@ -941,5 +958,6 @@ if (empty($action))
         }
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/facture/rapport.php b/htdocs/fourn/facture/rapport.php
    index c20b26b1263..fb76247f5d7 100644
    --- a/htdocs/fourn/facture/rapport.php
    +++ b/htdocs/fourn/facture/rapport.php
    @@ -146,6 +146,7 @@ if ($year)
             print '<td align="right">'.$langs->trans("Size").'</td>';
             print '<td align="right">'.$langs->trans("Date").'</td>';
             print '</tr>';
    +
             if (is_resource($handle))
             {
                 while (($file = readdir($handle))!==false)
    @@ -165,6 +166,6 @@ if ($year)
         }
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php b/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php
    index 8ba0884fa6a..324e6b8dccf 100644
    --- a/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2014      Marcos García <marcosgdf@gmail.com>
      * Copyright (C) 2015      Charlie Benke <charlie@patas-monkey.com>
      * Copyright (C) 2016      Laurent Destailleur <eldy@users.sourceforge.net>
    diff --git a/htdocs/fourn/index.php b/htdocs/fourn/index.php
    index 033bcc63a2a..5812553db5c 100644
    --- a/htdocs/fourn/index.php
    +++ b/htdocs/fourn/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,9 +28,7 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
     require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
     require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
     
    -$langs->load("suppliers");
    -$langs->load("orders");
    -$langs->load("companies");
    +$langs->loadLangs(array("suppliers", "orders", "companies"));
     
     // Security check
     $socid = GETPOST("socid", 'int');
    @@ -313,6 +311,6 @@ if (count($companystatic->SupplierCategories))
     //print "</td></tr></table>\n";
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/js/lib_dispatch.js b/htdocs/fourn/js/lib_dispatch.js
    index c2c570643f8..d183aeb4e48 100644
    --- a/htdocs/fourn/js/lib_dispatch.js
    +++ b/htdocs/fourn/js/lib_dispatch.js
    @@ -23,23 +23,23 @@
     /**
      * addDispatchLine
      * Adds new table row for dispatching to multiple stock locations
    - * 
    + *
      * @param	index	int		index of product line. 0 = first product line
      * @param	type	string	type of dispatch (batch = batch dispatch, dispatch = non batch dispatch)
      * @param	mode	string	'qtymissing' will create new line with qty missing, 'lessone' will keep 1 in old line and the rest in new one
      */
    -function addDispatchLine(index, type, mode) 
    +function addDispatchLine(index, type, mode)
     {
     	mode = mode || 'qtymissing'
    -	
    +
     	console.log("fourn/js/lib_dispatch.js Split line type="+type+" index="+index+" mode="+mode);
     	var $row = $("tr[name='"+type+'_0_'+index+"']").clone(true), 		// clone first batch line to jQuery object
     		nbrTrs = $("tr[name^='"+type+"_'][name$='_"+index+"']").length, // position of line for batch
     		qtyOrdered = parseFloat($("#qty_ordered_0_"+index).val()), 		// Qty ordered is same for all rows
     		qty = parseFloat($("#qty_"+(nbrTrs - 1)+"_"+index).val()),
     		qtyDispatched;
    -			
    -	if (mode === 'lessone') 
    +
    +	if (mode === 'lessone')
     	{
     		qtyDispatched = parseFloat($("#qty_dispatched_0_"+index).val()) + 1;
     	}
    @@ -47,7 +47,7 @@ function addDispatchLine(index, type, mode)
     	{
     		qtyDispatched = parseFloat($("#qty_dispatched_0_"+index).val()) + qty;
     	}
    -	
    +
     	if (qtyDispatched < qtyOrdered)
     	{
     		//replace tr suffix nbr
    @@ -62,19 +62,19 @@ function addDispatchLine(index, type, mode)
     		$row.attr('name',type+'_'+nbrTrs+'_'+index);
     		//insert new row before last row
     		$("tr[name^='"+type+"_'][name$='_"+index+"']:last").after($row);
    -		
    +
     		//remove cloned select2 with duplicate id.
     		$("#s2id_entrepot_"+nbrTrs+'_'+index).detach();			// old way to find duplicated select2 component
     		$(".csswarehouse_"+nbrTrs+"_"+index+":first-child").parent("span.selection").parent(".select2").detach();
    -		
    +
     		/*  Suffix of lines are:  _ trs.length _ index  */
     		$("#qty_"+nbrTrs+"_"+index).focus();
     		$("#qty_dispatched_0_"+index).val(qtyDispatched);
    -		
    +
     		//hide all buttons then show only the last one
     		$("tr[name^='"+type+"_'][name$='_"+index+"'] .splitbutton").hide();
     		$("tr[name^='"+type+"_'][name$='_"+index+"']:last .splitbutton").show();
    -		
    +
     		if (mode === 'lessone')
     		{
     			qty = 1; // keep 1 in old line
    @@ -94,11 +94,11 @@ function addDispatchLine(index, type, mode)
     
     /**
      * onChangeDispatchLineQty
    - * 
    - * Change event handler for dispatch qty input field, 
    + *
    + * Change event handler for dispatch qty input field,
      * recalculate qty dispatched when qty input has changed.
      * If qty is more then qty ordered reset input qty to max qty to dispatch.
    - * 
    + *
      * element requires arbitrary data qty (value before change), type (type of dispatch) and index (index of product line)
      */
     
    @@ -124,4 +124,4 @@ function onChangeDispatchLineQty() {
     		}
     		$(this).data('qty', $(this).val());
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/fourn/paiement/card.php b/htdocs/fourn/paiement/card.php
    index daa452d0c29..9cc5fb27b84 100644
    --- a/htdocs/fourn/paiement/card.php
    +++ b/htdocs/fourn/paiement/card.php
    @@ -32,10 +32,7 @@ require DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.class.php';
     require DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
     require DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
     
    -$langs->load('bills');
    -$langs->load('banks');
    -$langs->load('companies');
    -$langs->load("suppliers");
    +$langs->loadLangs(array('bills', 'banks', 'companies', 'suppliers'));
     
     $id			= GETPOST('id','int');
     $action		= GETPOST('action','alpha');
    @@ -169,7 +166,6 @@ if ($result > 0)
     	if ($action == 'delete')
     	{
     		print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans("DeletePayment"), $langs->trans("ConfirmDeletePayment"), 'confirm_delete');
    -
     	}
     
     	/*
    @@ -178,7 +174,6 @@ if ($result > 0)
     	if ($action == 'valide')
     	{
     		print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans("ValidatePayment"), $langs->trans("ConfirmValidatePayment"), 'confirm_valide');
    -
     	}
     
     	$linkback = '<a href="' . DOL_URL_ROOT . '/fourn/facture/paiement.php' . (! empty($socid) ? '?socid=' . $socid : '') . '">' . $langs->trans("BackToList") . '</a>';
    @@ -348,7 +343,6 @@ if ($result > 0)
     		   	|| (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && ! empty($user->rights->fournisseur->supplier_invoice_advance->validate)))
     			{
     				print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;action=valide">'.$langs->trans('Valid').'</a>';
    -
     			}
     		}
     	}
    @@ -407,6 +401,6 @@ else
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/paiement/info.php b/htdocs/fourn/paiement/info.php
    index eafc4f2decc..1c670c1396a 100644
    --- a/htdocs/fourn/paiement/info.php
    +++ b/htdocs/fourn/paiement/info.php
    @@ -28,9 +28,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
     
    -$langs->load("bills");
    -$langs->load("suppliers");
    -$langs->load("companies");
    +$langs->loadLangs(array("bills", "suppliers", "companies"));
     
     $id			= GETPOST('id','int');
     
    @@ -57,6 +55,6 @@ print '<table width="100%"><tr><td>';
     dol_print_object_info($object);
     print '</td></tr></table>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php
    index 47bc949a758..16ed559814d 100644
    --- a/htdocs/fourn/product/list.php
    +++ b/htdocs/fourn/product/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010	   Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2012      Christophe Battarel   <christophe.battarel@altairis.fr>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -308,5 +308,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/fourn/recap-fourn.php b/htdocs/fourn/recap-fourn.php
    index e680c18074e..1ff9f486510 100644
    --- a/htdocs/fourn/recap-fourn.php
    +++ b/htdocs/fourn/recap-fourn.php
    @@ -191,5 +191,6 @@ else
         dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/ftp/admin/ftpclient.php b/htdocs/ftp/admin/ftpclient.php
    index ee7acc9070d..07f2847eda2 100644
    --- a/htdocs/ftp/admin/ftpclient.php
    +++ b/htdocs/ftp/admin/ftpclient.php
    @@ -25,8 +25,7 @@
     require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     
    -$langs->load("admin");
    -$langs->load("ftp");
    +$langs->loadLangs(array("admin", "ftp"));
     
     // Security check
     if (!$user->admin) accessforbidden();
    @@ -309,6 +308,6 @@ else
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/ftp/index.php b/htdocs/ftp/index.php
    index 943d4fa94e1..fd2e5e80772 100644
    --- a/htdocs/ftp/index.php
    +++ b/htdocs/ftp/index.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -22,7 +22,7 @@
      *	\brief      Main page for FTP section area
      */
     
    -require('../main.inc.php');
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/treeview.lib.php';
    @@ -235,7 +235,6 @@ if ($_POST["const"] && $_POST["delete"] && $_POST["delete"] == $langs->trans("De
     				$action='';
     			}
     		}
    -
     	}
     	else
     	{
    @@ -339,7 +338,6 @@ if ($action == 'download')
     		{
     			setEventMessages($langs->transnoentitiesnoconv('FailedToGetFile',$remotefile), null, 'errors');
     		}
    -
     	}
     	else
     	{
    @@ -378,7 +376,7 @@ jQuery(document).ready(function() {
     		$(".checkboxfordelete").prop('checked', false);
     		jQuery("#delconst").hide();
     	});
    -	
    +
     });
     
     </script>
    @@ -408,7 +406,6 @@ else
     		if ($action == 'delete')
     		{
     			print $form->formconfirm($_SERVER["PHP_SELF"].'?numero_ftp='.$numero_ftp.'&section='.urlencode($_REQUEST["section"]).'&file='.urlencode($_GET["file"]), $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile','','',1);
    -			
     		}
     
     		// Confirmation de la suppression d'une ligne categorie
    @@ -486,7 +483,7 @@ else
     			$newsection=$section;
     		    $newsectioniso=utf8_decode($section);
     			//$newsection='/home';
    -			
    +
     			// List content of directory ($newsection = '/', '/home', ...)
     			if (! empty($conf->global->FTP_CONNECT_WITH_SFTP))
     			{
    @@ -551,7 +548,7 @@ else
     					$is_directory=ftp_isdir($conn_id, $newremotefileiso);
     				}
     
    -				
    +
     				print '<tr class="oddeven" height="18">';
     				// Name
     				print '<td>';
    @@ -610,19 +607,18 @@ else
     				$i++;
     				$nbofentries++;
     			}
    -
     		}
     
     		print "</table>";
     
    -		
    +
     		if (! $ok)
     		{
     		      print $mesg.'<br>'."\n";
     		      setEventMessages($mesg, null, 'errors');
     		}
    -		
    -		
    +
    +
     		// Actions
     		/*
     		if ($user->rights->ftp->write && ! empty($section))
    @@ -654,7 +650,7 @@ else
     				break;
     			}
     			$i++;
    -		}		
    +		}
     	    if (! $foundsetup)
     	    {
                 print $langs->trans("SetupOfFTPClientModuleNotComplete");
    @@ -669,11 +665,11 @@ else
     print '<br>';
     
     // Close FTP connection
    -if ($conn_id) 
    +if ($conn_id)
     {
         if (! empty($conf->global->FTP_CONNECT_WITH_SFTP))
         {
    -        
    +
         }
         else if (! empty($conf->global->FTP_CONNECT_WITH_SSL))
         {
    @@ -684,10 +680,9 @@ if ($conn_id)
             ftp_close($conn_id);
         }
     }
    -    
     
    +// End of page
     llxFooter();
    -
     $db->close();
     
     
    @@ -709,7 +704,7 @@ function dol_ftp_connect($ftp_server, $ftp_port, $ftp_user, $ftp_password, $sect
     
     	$ok=1;
         $conn_id=null;
    -    
    +
     	if (! is_numeric($ftp_port))
     	{
     		$mesg=$langs->transnoentitiesnoconv("FailedToConnectToFTPServer",$ftp_server,$ftp_port);
    @@ -719,17 +714,17 @@ function dol_ftp_connect($ftp_server, $ftp_port, $ftp_user, $ftp_password, $sect
     	if ($ok)
     	{
     		$connecttimeout=(empty($conf->global->FTP_CONNECT_TIMEOUT)?40:$conf->global->FTP_CONNECT_TIMEOUT);
    -		if (! empty($conf->global->FTP_CONNECT_WITH_SFTP)) 
    +		if (! empty($conf->global->FTP_CONNECT_WITH_SFTP))
     		{
     		    dol_syslog('Try to connect with ssh2_ftp');
     		    $tmp_conn_id = ssh2_connect($ftp_server, $ftp_port);
     		}
    -		else if (! empty($conf->global->FTP_CONNECT_WITH_SSL)) 
    +		else if (! empty($conf->global->FTP_CONNECT_WITH_SSL))
     		{
     		    dol_syslog('Try to connect with ftp_ssl_connect');
     		    $conn_id = ftp_ssl_connect($ftp_server, $ftp_port, $connecttimeout);
     		}
    -		else 
    +		else
     		{
     		    dol_syslog('Try to connect with ftp_connect');
     		    $conn_id = ftp_connect($ftp_server, $ftp_port, $connecttimeout);
    @@ -744,7 +739,7 @@ function dol_ftp_connect($ftp_server, $ftp_port, $ftp_user, $ftp_password, $sect
         				{
         					// Turn on passive mode transfers (must be after a successful login
         					//if ($ftp_passive) ftp_pasv($conn_id, true);
    -    
    +
         					// Change the dir
         					$newsectioniso=utf8_decode($section);
         					//ftp_chdir($conn_id, $newsectioniso);
    @@ -756,25 +751,25 @@ function dol_ftp_connect($ftp_server, $ftp_port, $ftp_user, $ftp_password, $sect
             				    $error++;
     		                }
         				}
    -    				else 
    +    				else
         				{
         					$mesg=$langs->transnoentitiesnoconv("FailedToConnectToFTPServerWithCredentials");
     	   				    $ok=0;
         				    $error++;
         				}
    -				}   
    +				}
     				else
     				{
     				    if (ftp_login($conn_id, $ftp_user, $ftp_password))
         				{
         					// Turn on passive mode transfers (must be after a successful login
         					if ($ftp_passive) ftp_pasv($conn_id, true);
    -    
    +
         					// Change the dir
         					$newsectioniso=utf8_decode($section);
         					ftp_chdir($conn_id, $newsectioniso);
         				}
    -    				else 
    +    				else
         				{
         					$mesg=$langs->transnoentitiesnoconv("FailedToConnectToFTPServerWithCredentials");
     	   				    $ok=0;
    @@ -809,7 +804,6 @@ function ftp_isdir($connect_id,$dir)
     	{
     		ftp_cdup($connect_id);
     		return 1;
    -
     	}
     	else
     	{
    diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php
    index 2ac212527b3..0028367cd3d 100644
    --- a/htdocs/holiday/card.php
    +++ b/htdocs/holiday/card.php
    @@ -1,10 +1,11 @@
     <?php
     /* Copyright (C) 2011		Dimitri Mouillard	<dmouillard@teclib.com>
      * Copyright (C) 2012-2016	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012-2016	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012-2016	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2017		Alexandre Spangaro	<aspangaro@zendsi.com>
    - * Copyright (C) 2014-2017	Ferran Marcet		<fmarcet@2byte.es>
    + * Copyright (C) 2014-2017  Ferran Marcet		<fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -26,7 +27,7 @@
      *		\brief      Form and file creation of paid holiday.
      */
     
    -require('../main.inc.php');
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
     require_once DOL_DOCUMENT_ROOT.'/user/class/usergroup.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
    @@ -40,6 +41,7 @@ require_once DOL_DOCUMENT_ROOT.'/holiday/common.inc.php';
     // Get parameters
     $action=GETPOST('action', 'alpha');
     $id=GETPOST('id', 'int');
    +$ref=GETPOST('ref', 'alpha');
     $fuserid = (GETPOST('fuserid','int')?GETPOST('fuserid','int'):$user->id);
     
     // Protection if external user
    @@ -213,7 +215,7 @@ if ($action == 'update')
         $object->fetch($id);
     
     	// If under validation
    -    if ($object->statut == 1)
    +    if ($object->statut == Holiday::STATUS_DRAFT)
         {
             // If this is the requestor or has read/write rights
             if ($cancreate)
    @@ -297,7 +299,7 @@ if ($action == 'confirm_delete' && GETPOST('confirm') == 'yes' && $user->rights-
     	$object->fetch($id);
     
         // If this is a rough draft, approved, canceled or refused
    -	if ($object->statut == 1 || $object->statut == 4 || $object->statut == 5)
    +	if ($object->statut == Holiday::STATUS_DRAFT || $object->statut == Holiday::STATUS_CANCELED || $object->statut == Holiday::STATUS_REFUSED)
     	{
     		// Si l'utilisateur à le droit de lire cette demande, il peut la supprimer
     		if ($candelete)
    @@ -324,18 +326,20 @@ if ($action == 'confirm_delete' && GETPOST('confirm') == 'yes' && $user->rights-
     	}
     }
     
    -// Si envoi de la demande
    +// Action validate (+ send email for approval)
     if ($action == 'confirm_send')
     {
         $object = new Holiday($db);
         $object->fetch($id);
     
         // Si brouillon et créateur
    -    if($object->statut == 1 && $cancreate)
    +    if($object->statut == Holiday::STATUS_DRAFT && $cancreate)
         {
    -        $object->statut = 2;
    +    	$object->oldcopy = dol_clone($object);
     
    -        $verif = $object->update($user);
    +    	$object->statut = Holiday::STATUS_VALIDATED;
    +
    +        $verif = $object->validate($user);
     
             // Si pas d'erreur SQL on redirige vers la fiche de la demande
             if ($verif > 0)
    @@ -434,13 +438,15 @@ if ($action == 'confirm_valid')
         $object->fetch($id);
     
         // Si statut en attente de validation et valideur = utilisateur
    -    if ($object->statut == 2 && $user->id == $object->fk_validator)
    +    if ($object->statut == Holiday::STATUS_VALIDATED && $user->id == $object->fk_validator)
         {
    +    	$object->oldcopy = dol_clone($object);
    +
             $object->date_valid = dol_now();
             $object->fk_user_valid = $user->id;
    -        $object->statut = 3;
    +        $object->statut = Holiday::STATUS_APPROVED;
     
    -        $verif = $object->update($user);
    +        $verif = $object->approve($user);
     
             // Si pas d'erreur SQL on redirige vers la fiche de la demande
             if ($verif > 0)
    @@ -529,11 +535,11 @@ if ($action == 'confirm_refuse' && GETPOST('confirm','alpha') == 'yes')
             $object->fetch($id);
     
             // Si statut en attente de validation et valideur = utilisateur
    -        if ($object->statut == 2 && $user->id == $object->fk_validator)
    +        if ($object->statut == Holiday::STATUS_VALIDATED && $user->id == $object->fk_validator)
             {
                 $object->date_refuse = dol_print_date('dayhour', dol_now());
                 $object->fk_user_refuse = $user->id;
    -            $object->statut = 5;
    +            $object->statut = Holiday::STATUS_REFUSED;
                 $object->detail_refuse = GETPOST('detail_refuse','alphanohtml');
     
                 $verif = $object->update($user);
    @@ -614,7 +620,7 @@ if ($action == 'confirm_draft' && GETPOST('confirm') == 'yes')
         $object->fetch($id);
     
         $oldstatus = $object->statut;
    -    $object->statut = 1;
    +    $object->statut = Holiday::STATUS_DRAFT;
     
         $result = $object->update($user);
         if ($result < 0)
    @@ -645,18 +651,18 @@ if ($action == 'confirm_cancel' && GETPOST('confirm') == 'yes')
         $object->fetch($id);
     
         // Si statut en attente de validation et valideur = valideur ou utilisateur, ou droits de faire pour les autres
    -    if (($object->statut == 2 || $object->statut == 3) && ($user->id == $object->fk_validator || in_array($object->fk_user, $childids) || ! empty($user->rights->holiday->write_all)))
    +    if (($object->statut == Holiday::STATUS_VALIDATED || $object->statut == Holiday::STATUS_APPROVED) && ($user->id == $object->fk_validator || in_array($object->fk_user, $childids) || ! empty($user->rights->holiday->write_all)))
         {
         	$db->begin();
     
         	$oldstatus = $object->statut;
             $object->date_cancel = dol_now();
             $object->fk_user_cancel = $user->id;
    -        $object->statut = 4;
    +        $object->statut = Holiday::STATUS_CANCELED;
     
             $result = $object->update($user);
     
    -        if ($result >= 0 && $oldstatus == 3)	// holiday was already validated, status 3, so we must increase back sold
    +        if ($result >= 0 && $oldstatus == Holiday::STATUS_APPROVED)	// holiday was already validated, status 3, so we must increase back sold
             {
             	// Calculcate number of days consummed
             	$nbopenedday=num_open_day($object->date_debut_gmt,$object->date_fin_gmt,0,1,$object->halfday);
    @@ -740,7 +746,6 @@ if ($action == 'confirm_cancel' && GETPOST('confirm') == 'yes')
                 }
             }
         }
    -
     }
     
     
    @@ -756,7 +761,7 @@ $listhalfday=array('morning'=>$langs->trans("Morning"),"afternoon"=>$langs->tran
     
     llxHeader('', $langs->trans('CPTitreMenu'));
     
    -if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create')
    +if ((empty($id) && empty($ref)) || $action == 'add' || $action == 'request' || $action == 'create')
     {
         // Si l'utilisateur n'a pas le droit de faire une demande
         if (($fuserid == $user->id && empty($user->rights->holiday->write)) || ($fuserid != $user->id && empty($user->rights->holiday->write_all)))
    @@ -909,10 +914,10 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
             print '<td>';
             // Si la demande ne vient pas de l'agenda
             if (! GETPOST('date_debut_')) {
    -            $form->select_date(-1, 'date_debut_', 0, 0, 0, '', 1, 1);
    +            print $form->selectDate(-1, 'date_debut_', 0, 0, 0, '', 1, 1);
             } else {
                 $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_debut_month','int'), GETPOST('date_debut_day','int'), GETPOST('date_debut_year','int'));
    -            $form->select_date($tmpdate, 'date_debut_', 0, 0, 0, '', 1, 1);
    +            print $form->selectDate($tmpdate, 'date_debut_', 0, 0, 0, '', 1, 1);
             }
             print ' &nbsp; &nbsp; ';
             print $form->selectarray('starthalfday', $listhalfday, (GETPOST('starthalfday','alpha')?GETPOST('starthalfday','alpha'):'morning'));
    @@ -928,10 +933,10 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
             print '<td>';
             // Si la demande ne vient pas de l'agenda
             if (! GETPOST('date_fin_')) {
    -            $form->select_date(-1,'date_fin_', 0, 0, 0, '', 1, 1);
    +            print $form->selectDate(-1, 'date_fin_', 0, 0, 0, '', 1, 1);
             } else {
                 $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_fin_month','int'), GETPOST('date_fin_day','int'), GETPOST('date_fin_year','int'));
    -            $form->select_date($tmpdate,'date_fin_', 0, 0, 0, '', 1, 1);
    +            print $form->selectDate($tmpdate, 'date_fin_', 0, 0, 0, '', 1, 1);
             }
             print ' &nbsp; &nbsp; ';
             print $form->selectarray('endhalfday', $listhalfday, (GETPOST('endhalfday','alpha')?GETPOST('endhalfday','alpha'):'afternoon'));
    @@ -993,9 +998,9 @@ else
         else
         {
             // Affichage de la fiche d'une demande de congés payés
    -        if ($id > 0)
    +        if (($id > 0) || $ref)
             {
    -            $object->fetch($id);
    +        	$result = $object->fetch($id, $ref);
     
                 $valideur = new User($db);
                 $valideur->fetch($object->fk_validator);
    @@ -1059,7 +1064,7 @@ else
     
                     $linkback='<a href="'.DOL_URL_ROOT.'/holiday/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
     
    -                dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref');
    +                dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref');
     
     
                     print '<div class="fichecenter">';
    @@ -1104,9 +1109,9 @@ else
                         print '<tr>';
                         print '<td class="nowrap">'.$langs->trans('DateDebCP').' ('.$langs->trans("FirstDayOfHoliday").')</td>';
                         print '<td>';
    -                    $form->select_date($object->date_debut,'date_debut_');
    -			        print ' &nbsp; &nbsp; ';
    -        			print $form->selectarray('starthalfday', $listhalfday, (GETPOST('starthalfday')?GETPOST('starthalfday'):$starthalfday));
    +                    print $form->selectDate($object->date_debut, 'date_debut_');
    +                    print ' &nbsp; &nbsp; ';
    +                    print $form->selectarray('starthalfday', $listhalfday, (GETPOST('starthalfday')?GETPOST('starthalfday'):$starthalfday));
                         print '</td>';
                         print '</tr>';
                     }
    @@ -1126,9 +1131,9 @@ else
                         print '<tr>';
                         print '<td class="nowrap">'.$langs->trans('DateFinCP').' ('.$langs->trans("LastDayOfHoliday").')</td>';
                         print '<td>';
    -                    $form->select_date($object->date_fin,'date_fin_');
    -			        print ' &nbsp; &nbsp; ';
    -        			print $form->selectarray('endhalfday', $listhalfday, (GETPOST('endhalfday')?GETPOST('endhalfday'):$endhalfday));
    +                    print $form->selectDate($object->date_fin, 'date_fin_');
    +                    print ' &nbsp; &nbsp; ';
    +                    print $form->selectarray('endhalfday', $listhalfday, (GETPOST('endhalfday')?GETPOST('endhalfday'):$endhalfday));
                         print '</td>';
                         print '</tr>';
                     }
    @@ -1255,7 +1260,7 @@ else
                     }
     
                     // Si envoi en validation
    -                if ($action == 'sendToValidate' && $object->statut == 1)
    +                if ($action == 'sendToValidate' && $object->statut == Holiday::STATUS_DRAFT)
                     {
                     	print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id,$langs->trans("TitleToValidCP"),$langs->trans("ConfirmToValidCP"),"confirm_send", '', 1, 1);
                     }
    @@ -1286,10 +1291,10 @@ else
                     }
     
     
    -                if ($action == 'edit' && $object->statut == 1)
    +                if ($action == 'edit' && $object->statut == Holiday::STATUS_DRAFT)
                     {
                         print '<div align="center">';
    -                    if ($cancreate && $object->statut == 1)
    +                    if ($cancreate && $object->statut == Holiday::STATUS_DRAFT)
                         {
                             print '<input type="submit" value="'.$langs->trans("Save").'" class="button">';
                         }
    @@ -1341,23 +1346,19 @@ else
     
                         print '</div>';
                     }
    -
                 } else {
                     print '<div class="tabBar">';
                     print $langs->trans('ErrorUserViewCP');
                     print '<br><br><input type="button" value="'.$langs->trans("ReturnCP").'" class="button" onclick="history.go(-1)" />';
                     print '</div>';
                 }
    -
             } else {
                 print '<div class="tabBar">';
                 print $langs->trans('ErrorIDFicheCP');
                 print '<br><br><input type="button" value="'.$langs->trans("ReturnCP").'" class="button" onclick="history.go(-1)" />';
                 print '</div>';
             }
    -
         }
    -
     }
     
     // End of page
    diff --git a/htdocs/holiday/class/holiday.class.php b/htdocs/holiday/class/holiday.class.php
    index 03b2491ab59..f5761876795 100644
    --- a/htdocs/holiday/class/holiday.class.php
    +++ b/htdocs/holiday/class/holiday.class.php
    @@ -1,9 +1,10 @@
     <?php
     /* Copyright (C) 2011		Dimitri Mouillard	<dmouillard@teclib.com>
      * Copyright (C) 2012-2014	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012-2016	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012-2016	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry		<florian.henry@open-concept.pro>
      * Copyright (C) 2016       Juanjo Menent       <jmenent@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,44 +33,94 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Holiday extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='holiday';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='holiday';
    -	public $ismultientitymanaged = 0;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    -	var $fk_element = 'fk_holiday';
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 0;
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
    +	public $fk_element = 'fk_holiday';
    +
     	public $picto = 'holiday';
     
     	/**
     	 * @deprecated
    -	 * @see id
    +	 * @see $id
     	 */
    -	var $rowid;
    +	public $rowid;
     
    -	var $fk_user;
    -	var $date_create='';
    -	var $description;
    -	var $date_debut='';			// Date start in PHP server TZ
    -	var $date_fin='';			// Date end in PHP server TZ
    -	var $date_debut_gmt='';		// Date start in GMT
    -	var $date_fin_gmt='';		// Date end in GMT
    -	var $halfday='';			// 0:Full days, 2:Start afternoon end morning, -1:Start afternoon end afternoon, 1:Start morning end morning
    -	var $statut='';				// 1=draft, 2=validated, 3=approved
    -	var $fk_validator;
    -	var $date_valid='';
    -	var $fk_user_valid;
    -	var $date_refuse='';
    -	var $fk_user_refuse;
    -	var $date_cancel='';
    -	var $fk_user_cancel;
    -	var $detail_refuse='';
    -	var $fk_type;
    +	/**
    +	 * @var int User ID
    +	 */
    +	public $fk_user;
     
    -	var $holiday = array();
    -	var $events = array();
    -	var $logs = array();
    +	public $date_create='';
     
    -	var $optName = '';
    -	var $optValue = '';
    -	var $optRowid = '';
    +	/**
    +	 * @var string description
    +	 */
    +	public $description;
    +
    +	public $date_debut='';			// Date start in PHP server TZ
    +	public $date_fin='';			// Date end in PHP server TZ
    +	public $date_debut_gmt='';		// Date start in GMT
    +	public $date_fin_gmt='';		// Date end in GMT
    +	public $halfday='';				// 0:Full days, 2:Start afternoon end morning, -1:Start afternoon end afternoon, 1:Start morning end morning
    +	public $statut='';				// 1=draft, 2=validated, 3=approved
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_validator;
    +
    +	public $date_valid='';
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_valid;
    +
    +	public $date_refuse='';
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_refuse;
    +
    +	public $date_cancel='';
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_cancel;
    +
    +	public $detail_refuse='';
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_type;
    +
    +	public $holiday = array();
    +	public $events = array();
    +	public $logs = array();
    +
    +	public $optName = '';
    +	public $optValue = '';
    +	public $optRowid = '';
     
     	/**
     	 * Draft status
    @@ -104,6 +155,67 @@ class Holiday extends CommonObject
     	}
     
     
    +	/**
    +	 *  Returns the reference to the following non used Order depending on the active numbering module
    +	 *  defined into HOLIDAY_ADDON
    +	 *
    +	 *	@param	Societe		$objsoc     third party object
    +	 *  @return string      			Holiday free reference
    +	 */
    +	function getNextNumRef($objsoc)
    +	{
    +		global $langs, $conf;
    +		$langs->load("order");
    +
    +		if (empty($conf->global->HOLIDAY_ADDON))
    +		{
    +			$conf->global->HOLIDAY_ADDON = 'mod_holiday_madonna';
    +		}
    +
    +		if (! empty($conf->global->HOLIDAY_ADDON))
    +		{
    +			$mybool=false;
    +
    +			$file = $conf->global->HOLIDAY_ADDON.".php";
    +			$classname = $conf->global->HOLIDAY_ADDON;
    +
    +			// Include file with class
    +			$dirmodels=array_merge(array('/'),(array) $conf->modules_parts['models']);
    +			foreach ($dirmodels as $reldir)
    +			{
    +				$dir = dol_buildpath($reldir."core/modules/holiday/");
    +
    +				// Load file with numbering class (if found)
    +				$mybool|=@include_once $dir.$file;
    +			}
    +
    +			if ($mybool === false)
    +			{
    +				dol_print_error('',"Failed to include file ".$file);
    +				return '';
    +			}
    +
    +			$obj = new $classname();
    +			$numref = $obj->getNextValue($objsoc,$this);
    +
    +			if ($numref != "")
    +			{
    +				return $numref;
    +			}
    +			else
    +			{
    +				$this->error=$obj->error;
    +				//dol_print_error($this->db,get_class($this)."::getNextNumRef ".$obj->error);
    +				return "";
    +			}
    +		}
    +		else
    +		{
    +			print $langs->trans("Error")." ".$langs->trans("Error_HOLIDAY_ADDON_NotDefined");
    +			return "";
    +		}
    +	}
    +
     	/**
     	 * Update balance of vacations and check table of users for holidays is complete. If not complete.
     	 *
    @@ -221,14 +333,16 @@ class Holiday extends CommonObject
     	 *	Load object in memory from database
     	 *
     	 *  @param	int		$id         Id object
    +	 *  @param	string	$ref        Ref object
     	 *  @return int         		<0 if KO, >0 if OK
     	 */
    -	function fetch($id)
    +	function fetch($id, $ref='')
     	{
     		global $langs;
     
     		$sql = "SELECT";
     		$sql.= " cp.rowid,";
    +		$sql.= " cp.ref,";
     		$sql.= " cp.fk_user,";
     		$sql.= " cp.date_create,";
     		$sql.= " cp.description,";
    @@ -250,7 +364,8 @@ class Holiday extends CommonObject
     		$sql.= " cp.fk_type,";
     		$sql.= " cp.entity";
     		$sql.= " FROM ".MAIN_DB_PREFIX."holiday as cp";
    -		$sql.= " WHERE cp.rowid = ".$id;
    +		if ($id > 0) $sql.= " WHERE cp.rowid = ".$id;
    +		else $sql.=" WHERE cp.ref = '".$this->db->escape($ref)."'";
     
     		dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
     		$resql=$this->db->query($sql);
    @@ -262,7 +377,7 @@ class Holiday extends CommonObject
     
     				$this->id    = $obj->rowid;
     				$this->rowid = $obj->rowid;	// deprecated
    -				$this->ref   = $obj->rowid;
    +				$this->ref   = ($obj->ref?$obj->ref:$obj->rowid);
     				$this->fk_user = $obj->fk_user;
     				$this->date_create = $this->db->jdate($obj->date_create);
     				$this->description = $obj->description;
    @@ -311,6 +426,7 @@ class Holiday extends CommonObject
     
     		$sql = "SELECT";
     		$sql.= " cp.rowid,";
    +		$sql.= " cp.ref,";
     
     		$sql.= " cp.fk_user,";
     		$sql.= " cp.fk_type,";
    @@ -346,12 +462,12 @@ class Holiday extends CommonObject
     		$sql.= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid"; // Hack pour la recherche sur le tableau
     		$sql.= " AND cp.fk_user IN (".$user_id.")";
     
    -		// Filtre de séléction
    +		// Selection filter
     		if(!empty($filter)) {
     			$sql.= $filter;
     		}
     
    -		// Ordre d'affichage du résultat
    +		// Order of display of the result
     		if(!empty($order)) {
     			$sql.= $order;
     		}
    @@ -359,25 +475,26 @@ class Holiday extends CommonObject
     		dol_syslog(get_class($this)."::fetchByUser", LOG_DEBUG);
     		$resql=$this->db->query($sql);
     
    -		// Si pas d'erreur SQL
    +		// If no SQL error
     		if ($resql) {
     
     			$i = 0;
     			$tab_result = $this->holiday;
     			$num = $this->db->num_rows($resql);
     
    -			// Si pas d'enregistrement
    +			// If no registration
     			if(!$num) {
     				return 2;
     			}
     
    -			// Liste les enregistrements et les ajoutent au tableau
    +			// List the records and add them to the table
     			while($i < $num) {
     
     				$obj = $this->db->fetch_object($resql);
     
     				$tab_result[$i]['rowid'] = $obj->rowid;
    -				$tab_result[$i]['ref'] = $obj->rowid;
    +				$tab_result[$i]['ref'] = ($obj->ref?$obj->ref:$obj->rowid);
    +
     				$tab_result[$i]['fk_user'] = $obj->fk_user;
     				$tab_result[$i]['fk_type'] = $obj->fk_type;
     				$tab_result[$i]['date_create'] = $this->db->jdate($obj->date_create);
    @@ -412,13 +529,13 @@ class Holiday extends CommonObject
     				$i++;
     			}
     
    -			// Retourne 1 avec le tableau rempli
    +			// Returns 1 with the filled array
     			$this->holiday = $tab_result;
     			return 1;
     		}
     		else
     		{
    -			// Erreur SQL
    +			// SQL Error
     			$this->error="Error ".$this->db->lasterror();
     			return -1;
     		}
    @@ -437,6 +554,7 @@ class Holiday extends CommonObject
     
     		$sql = "SELECT";
     		$sql.= " cp.rowid,";
    +		$sql.= " cp.ref,";
     
     		$sql.= " cp.fk_user,";
     		$sql.= " cp.fk_type,";
    @@ -471,12 +589,12 @@ class Holiday extends CommonObject
     		$sql.= " WHERE cp.entity IN (".getEntity('holiday').")";
     		$sql.= " AND cp.fk_user = uu.rowid AND cp.fk_validator = ua.rowid "; // Hack pour la recherche sur le tableau
     
    -		// Filtrage de séléction
    +		// Selection filtering
     		if(!empty($filter)) {
     			$sql.= $filter;
     		}
     
    -		// Ordre d'affichage
    +		// order of display
     		if(!empty($order)) {
     			$sql.= $order;
     		}
    @@ -484,25 +602,25 @@ class Holiday extends CommonObject
     		dol_syslog(get_class($this)."::fetchAll", LOG_DEBUG);
     		$resql=$this->db->query($sql);
     
    -		// Si pas d'erreur SQL
    +		// If no SQL error
     		if ($resql) {
     
     			$i = 0;
     			$tab_result = $this->holiday;
     			$num = $this->db->num_rows($resql);
     
    -			// Si pas d'enregistrement
    +			// If no registration
     			if(!$num) {
     				return 2;
     			}
     
    -			// On liste les résultats et on les ajoutent dans le tableau
    +			// List the records and add them to the table
     			while($i < $num) {
     
     				$obj = $this->db->fetch_object($resql);
     
     				$tab_result[$i]['rowid'] = $obj->rowid;
    -				$tab_result[$i]['ref'] = $obj->rowid;
    +				$tab_result[$i]['ref'] = ($obj->ref?$obj->ref:$obj->rowid);
     				$tab_result[$i]['fk_user'] = $obj->fk_user;
     				$tab_result[$i]['fk_type'] = $obj->fk_type;
     				$tab_result[$i]['date_create'] = $this->db->jdate($obj->date_create);
    @@ -536,18 +654,203 @@ class Holiday extends CommonObject
     
     				$i++;
     			}
    -			// Retourne 1 et ajoute le tableau à la variable
    +			// Returns 1 and adds the array to the variable
     			$this->holiday = $tab_result;
     			return 1;
     		}
     		else
     		{
    -			// Erreur SQL
    +			// SQL Error
     			$this->error="Error ".$this->db->lasterror();
     			return -1;
     		}
     	}
     
    +
    +	/**
    +	 *	Validate leave request
    +	 *
    +	 *  @param	User	$user        	User that validate
    +	 *  @param  int		$notrigger	    0=launch triggers after, 1=disable triggers
    +	 *  @return int         			<0 if KO, >0 if OK
    +	 */
    +	function validate($user=null, $notrigger=0)
    +	{
    +		global $conf, $langs;
    +		$error=0;
    +
    +		// Define new ref
    +		if (! $error && (preg_match('/^[\(]?PROV/i', $this->ref) || empty($this->ref) || $this->ref == $this->id))
    +		{
    +			$num = $this->getNextNumRef(null);
    +		}
    +		else
    +		{
    +			$num = $this->ref;
    +		}
    +		$this->newref = $num;
    +
    +		// Update status
    +		$sql = "UPDATE ".MAIN_DB_PREFIX."holiday SET";
    +		if(!empty($this->statut) && is_numeric($this->statut)) {
    +			$sql.= " statut = ".$this->statut.",";
    +		} else {
    +			$error++;
    +		}
    +		$sql.= " ref = '".$num."'";
    +		$sql.= " WHERE rowid= ".$this->id;
    +
    +		$this->db->begin();
    +
    +		dol_syslog(get_class($this)."::validate", LOG_DEBUG);
    +		$resql = $this->db->query($sql);
    +		if (! $resql) {
    +			$error++; $this->errors[]="Error ".$this->db->lasterror();
    +		}
    +
    +		if (! $error)
    +		{
    +			if (! $notrigger)
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('HOLIDAY_VALIDATE',$user);
    +				if ($result < 0) { $error++; }
    +				// End call triggers
    +			}
    +		}
    +
    +		// Commit or rollback
    +		if ($error)
    +		{
    +			foreach($this->errors as $errmsg)
    +			{
    +				dol_syslog(get_class($this)."::validate ".$errmsg, LOG_ERR);
    +				$this->error.=($this->error?', '.$errmsg:$errmsg);
    +			}
    +			$this->db->rollback();
    +			return -1*$error;
    +		}
    +		else
    +		{
    +			$this->db->commit();
    +			return 1;
    +		}
    +	}
    +
    +
    +	/**
    +	 *	Approve leave request
    +	 *
    +	 *  @param	User	$user        	User that approve
    +	 *  @param  int		$notrigger	    0=launch triggers after, 1=disable triggers
    +	 *  @return int         			<0 if KO, >0 if OK
    +	 */
    +	function approve($user=null, $notrigger=0)
    +	{
    +		global $conf, $langs;
    +		$error=0;
    +
    +		// Update request
    +		$sql = "UPDATE ".MAIN_DB_PREFIX."holiday SET";
    +
    +		$sql.= " description= '".$this->db->escape($this->description)."',";
    +
    +		if(!empty($this->date_debut)) {
    +			$sql.= " date_debut = '".$this->db->idate($this->date_debut)."',";
    +		} else {
    +			$error++;
    +		}
    +		if(!empty($this->date_fin)) {
    +			$sql.= " date_fin = '".$this->db->idate($this->date_fin)."',";
    +		} else {
    +			$error++;
    +		}
    +		$sql.= " halfday = ".$this->halfday.",";
    +		if(!empty($this->statut) && is_numeric($this->statut)) {
    +			$sql.= " statut = ".$this->statut.",";
    +		} else {
    +			$error++;
    +		}
    +		if(!empty($this->fk_validator)) {
    +			$sql.= " fk_validator = '".$this->db->escape($this->fk_validator)."',";
    +		} else {
    +			$error++;
    +		}
    +		if(!empty($this->date_valid)) {
    +			$sql.= " date_valid = '".$this->db->idate($this->date_valid)."',";
    +		} else {
    +			$sql.= " date_valid = NULL,";
    +		}
    +		if(!empty($this->fk_user_valid)) {
    +			$sql.= " fk_user_valid = '".$this->db->escape($this->fk_user_valid)."',";
    +		} else {
    +			$sql.= " fk_user_valid = NULL,";
    +		}
    +		if(!empty($this->date_refuse)) {
    +			$sql.= " date_refuse = '".$this->db->idate($this->date_refuse)."',";
    +		} else {
    +			$sql.= " date_refuse = NULL,";
    +		}
    +		if(!empty($this->fk_user_refuse)) {
    +			$sql.= " fk_user_refuse = '".$this->db->escape($this->fk_user_refuse)."',";
    +		} else {
    +			$sql.= " fk_user_refuse = NULL,";
    +		}
    +		if(!empty($this->date_cancel)) {
    +			$sql.= " date_cancel = '".$this->db->idate($this->date_cancel)."',";
    +		} else {
    +			$sql.= " date_cancel = NULL,";
    +		}
    +		if(!empty($this->fk_user_cancel)) {
    +			$sql.= " fk_user_cancel = '".$this->db->escape($this->fk_user_cancel)."',";
    +		} else {
    +			$sql.= " fk_user_cancel = NULL,";
    +		}
    +		if(!empty($this->detail_refuse)) {
    +			$sql.= " detail_refuse = '".$this->db->escape($this->detail_refuse)."'";
    +		} else {
    +			$sql.= " detail_refuse = NULL";
    +		}
    +
    +		$sql.= " WHERE rowid= ".$this->id;
    +
    +		$this->db->begin();
    +
    +		dol_syslog(get_class($this)."::approve", LOG_DEBUG);
    +		$resql = $this->db->query($sql);
    +		if (! $resql) {
    +			$error++; $this->errors[]="Error ".$this->db->lasterror();
    +		}
    +
    +		if (! $error)
    +		{
    +			if (! $notrigger)
    +			{
    +				// Call trigger
    +				$result=$this->call_trigger('HOLIDAY_APPROVE',$user);
    +				if ($result < 0) { $error++; }
    +				// End call triggers
    +			}
    +		}
    +
    +		// Commit or rollback
    +		if ($error)
    +		{
    +			foreach($this->errors as $errmsg)
    +			{
    +				dol_syslog(get_class($this)."::approve ".$errmsg, LOG_ERR);
    +				$this->error.=($this->error?', '.$errmsg:$errmsg);
    +			}
    +			$this->db->rollback();
    +			return -1*$error;
    +		}
    +		else
    +		{
    +			$this->db->commit();
    +			return 1;
    +		}
    +	}
    +
     	/**
     	 *	Update database
     	 *
    @@ -913,6 +1216,7 @@ class Holiday extends CommonObject
     		return $this->LibStatut($this->statut, $mode, $this->date_debut);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Returns the label of a statut
     	 *
    @@ -923,58 +1227,59 @@ class Holiday extends CommonObject
     	 */
     	function LibStatut($statut, $mode=0, $startdate='')
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
     			if ($statut == 1) return $langs->trans('DraftCP');
    -			if ($statut == 2) return $langs->trans('ToReviewCP');
    -			if ($statut == 3) return $langs->trans('ApprovedCP');
    -			if ($statut == 4) return $langs->trans('CancelCP');
    -			if ($statut == 5) return $langs->trans('RefuseCP');
    +			elseif ($statut == 2) return $langs->trans('ToReviewCP');
    +			elseif ($statut == 3) return $langs->trans('ApprovedCP');
    +			elseif ($statut == 4) return $langs->trans('CancelCP');
    +			elseif ($statut == 5) return $langs->trans('RefuseCP');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			$pictoapproved='statut6';
     			if (! empty($startdate) && $startdate > dol_now()) $pictoapproved='statut4';
     			if ($statut == 1) return img_picto($langs->trans('DraftCP'),'statut0').' '.$langs->trans('DraftCP');				// Draft
    -			if ($statut == 2) return img_picto($langs->trans('ToReviewCP'),'statut1').' '.$langs->trans('ToReviewCP');		// Waiting approval
    -			if ($statut == 3) return img_picto($langs->trans('ApprovedCP'),$pictoapproved).' '.$langs->trans('ApprovedCP');
    -			if ($statut == 4) return img_picto($langs->trans('CancelCP'),'statut5').' '.$langs->trans('CancelCP');
    -			if ($statut == 5) return img_picto($langs->trans('RefuseCP'),'statut5').' '.$langs->trans('RefuseCP');
    +			elseif ($statut == 2) return img_picto($langs->trans('ToReviewCP'),'statut1').' '.$langs->trans('ToReviewCP');		// Waiting approval
    +			elseif ($statut == 3) return img_picto($langs->trans('ApprovedCP'),$pictoapproved).' '.$langs->trans('ApprovedCP');
    +			elseif ($statut == 4) return img_picto($langs->trans('CancelCP'),'statut5').' '.$langs->trans('CancelCP');
    +			elseif ($statut == 5) return img_picto($langs->trans('RefuseCP'),'statut5').' '.$langs->trans('RefuseCP');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			$pictoapproved='statut6';
     			if (! empty($startdate) && $startdate > dol_now()) $pictoapproved='statut4';
     			if ($statut == 1) return img_picto($langs->trans('DraftCP'),'statut0');
    -			if ($statut == 2) return img_picto($langs->trans('ToReviewCP'),'statut1');
    -			if ($statut == 3) return img_picto($langs->trans('ApprovedCP'),$pictoapproved);
    -			if ($statut == 4) return img_picto($langs->trans('CancelCP'),'statut5');
    -			if ($statut == 5) return img_picto($langs->trans('RefuseCP'),'statut5');
    +			elseif ($statut == 2) return img_picto($langs->trans('ToReviewCP'),'statut1');
    +			elseif ($statut == 3) return img_picto($langs->trans('ApprovedCP'),$pictoapproved);
    +			elseif ($statut == 4) return img_picto($langs->trans('CancelCP'),'statut5');
    +			elseif ($statut == 5) return img_picto($langs->trans('RefuseCP'),'statut5');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			$pictoapproved='statut6';
     			if (! empty($startdate) && $startdate > dol_now()) $pictoapproved='statut4';
     			if ($statut == 1) return $langs->trans('DraftCP').' '.img_picto($langs->trans('DraftCP'),'statut0');				// Draft
    -			if ($statut == 2) return $langs->trans('ToReviewCP').' '.img_picto($langs->trans('ToReviewCP'),'statut1');		// Waiting approval
    -			if ($statut == 3) return $langs->trans('ApprovedCP').' '.img_picto($langs->trans('ApprovedCP'),$pictoapproved);
    -			if ($statut == 4) return $langs->trans('CancelCP').' '.img_picto($langs->trans('CancelCP'),'statut5');
    -			if ($statut == 5) return $langs->trans('RefuseCP').' '.img_picto($langs->trans('RefuseCP'),'statut5');
    +			elseif ($statut == 2) return $langs->trans('ToReviewCP').' '.img_picto($langs->trans('ToReviewCP'),'statut1');		// Waiting approval
    +			elseif ($statut == 3) return $langs->trans('ApprovedCP').' '.img_picto($langs->trans('ApprovedCP'),$pictoapproved);
    +			elseif ($statut == 4) return $langs->trans('CancelCP').' '.img_picto($langs->trans('CancelCP'),'statut5');
    +			elseif ($statut == 5) return $langs->trans('RefuseCP').' '.img_picto($langs->trans('RefuseCP'),'statut5');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			$pictoapproved='statut6';
     			if (! empty($startdate) && $startdate > dol_now()) $pictoapproved='statut4';
     			if ($statut == 1) return $langs->trans('DraftCP').' '.img_picto($langs->trans('DraftCP'),'statut0');				// Draft
    -			if ($statut == 2) return $langs->trans('ToReviewCP').' '.img_picto($langs->trans('ToReviewCP'),'statut1');		// Waiting approval
    -			if ($statut == 3) return $langs->trans('ApprovedCP').' '.img_picto($langs->trans('ApprovedCP'),$pictoapproved);
    -			if ($statut == 4) return $langs->trans('CancelCP').' '.img_picto($langs->trans('CancelCP'),'statut5');
    -			if ($statut == 5) return $langs->trans('RefuseCP').' '.img_picto($langs->trans('RefuseCP'),'statut5');
    +			elseif ($statut == 2) return $langs->trans('ToReviewCP').' '.img_picto($langs->trans('ToReviewCP'),'statut1');		// Waiting approval
    +			elseif ($statut == 3) return $langs->trans('ApprovedCP').' '.img_picto($langs->trans('ApprovedCP'),$pictoapproved);
    +			elseif ($statut == 4) return $langs->trans('CancelCP').' '.img_picto($langs->trans('CancelCP'),'statut5');
    +			elseif ($statut == 5) return $langs->trans('RefuseCP').' '.img_picto($langs->trans('RefuseCP'),'statut5');
     		}
     
    -		return $statut;
    +		else return $statut;
     	}
     
     
    @@ -985,7 +1290,8 @@ class Holiday extends CommonObject
     	 *   @param		string	$htmlname		Name of HTML select field
     	 *   @return    string					Show select of status
     	 */
    -	function selectStatutCP($selected='', $htmlname='select_statut') {
    +    function selectStatutCP($selected='', $htmlname='select_statut')
    +    {
     
     		global $langs;
     
    @@ -1009,7 +1315,6 @@ class Holiday extends CommonObject
     
     		$statut.= '</select>'."\n";
     		print $statut;
    -
     	}
     
     	/**
    @@ -1019,7 +1324,8 @@ class Holiday extends CommonObject
     	 *  @param	string	$value      vrai si mise à jour OK sinon faux
     	 *  @return boolean				ok or ko
     	 */
    -	function updateConfCP($name,$value) {
    +    function updateConfCP($name,$value)
    +    {
     
     		$sql = "UPDATE ".MAIN_DB_PREFIX."holiday_config SET";
     		$sql.= " value = '".$value."'";
    @@ -1238,7 +1544,6 @@ class Holiday extends CommonObject
     				return -1;
     			}
     		}
    -
     	}
     
     	/**
    @@ -1247,7 +1552,8 @@ class Holiday extends CommonObject
     	 *  @param	string	$name       name du paramètre de configuration
     	 *  @return string      		retourne checked si > 0
     	 */
    -	function getCheckOption($name) {
    +    function getCheckOption($name)
    +    {
     
     		$sql = "SELECT value";
     		$sql.= " FROM ".MAIN_DB_PREFIX."holiday_config";
    @@ -1308,13 +1614,13 @@ class Holiday extends CommonObject
     	 *  @param	int		$user_id        ID de l'utilisateur à supprimer
     	 *  @return boolean      			Vrai si pas d'erreur, faut si Erreur
     	 */
    -	function deleteCPuser($user_id) {
    +    function deleteCPuser($user_id)
    +    {
     
     		$sql = "DELETE FROM ".MAIN_DB_PREFIX."holiday_users";
     		$sql.= " WHERE fk_user = '".$user_id."'";
     
     		$this->db->query($sql);
    -
     	}
     
     
    @@ -1415,7 +1721,6 @@ class Holiday extends CommonObject
     					$this->error="Error ".$this->db->lasterror();
     					return -1;
     				}
    -
     			}
     			else
     			{
    @@ -1457,7 +1762,6 @@ class Holiday extends CommonObject
     					return -1;
     				}
     			}
    -
     		}
     		else
     		{ // Si faux donc return array
    @@ -1570,6 +1874,7 @@ class Holiday extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return list of people with permission to validate leave requests.
     	 * Search for permission "approve leave requests"
    @@ -1578,6 +1883,7 @@ class Holiday extends CommonObject
     	 */
     	function fetch_users_approver_holiday()
     	{
    +        // phpcs:enable
     		$users_validator=array();
     
     		$sql = "SELECT DISTINCT ur.fk_user";
    @@ -1632,7 +1938,8 @@ class Holiday extends CommonObject
     	 *
     	 *  @return     int      retourne le nombre d'utilisateur
     	 */
    -	function countActiveUsersWithoutCP() {
    +    function countActiveUsersWithoutCP()
    +    {
     
     		$sql = "SELECT count(u.rowid) as compteur";
     		$sql.= " FROM ".MAIN_DB_PREFIX."user as u LEFT OUTER JOIN ".MAIN_DB_PREFIX."holiday_users hu ON (hu.fk_user=u.rowid)";
    @@ -1864,9 +2171,10 @@ class Holiday extends CommonObject
     		$this->description='SPECIMEN description';
     		$this->date_debut=dol_now();
     		$this->date_fin=dol_now()+(24*3600);
    +		$this->date_valid=dol_now();
     		$this->fk_validator=1;
     		$this->halfday=0;
     		$this->fk_type=1;
    +		$this->statut=Holiday::STATUS_VALIDATED;
     	}
    -
     }
    diff --git a/htdocs/holiday/common.inc.php b/htdocs/holiday/common.inc.php
    index 1f8f797eab2..96111cf6df0 100644
    --- a/htdocs/holiday/common.inc.php
    +++ b/htdocs/holiday/common.inc.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2011	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2011	Dimitri Mouillard	<dmouillard@teclib.com>
    - * Copyright (C) 2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php
    index 55724549360..5f283d1d1d2 100644
    --- a/htdocs/holiday/define_holiday.php
    +++ b/htdocs/holiday/define_holiday.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2007-2016	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2011		Dimitri Mouillard	<dmouillard@teclib.com>
      * Copyright (C) 2013		Marcos García		<marcosgdf@gmail.com>
    - * Copyright (C) 2016		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2016		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -26,7 +26,7 @@
      *		\brief      File that defines the balance of paid holiday of users.
      */
     
    -require('../main.inc.php');
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
     require_once DOL_DOCUMENT_ROOT.'/holiday/common.inc.php';
     
    @@ -374,6 +374,6 @@ else
     
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/holiday/document.php b/htdocs/holiday/document.php
    index 9d5618f3a2a..94015d6664b 100644
    --- a/htdocs/holiday/document.php
    +++ b/htdocs/holiday/document.php
    @@ -1,11 +1,12 @@
     <?php
    -/* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2010 Laurent Destailleur   <eldy@users.sourceforge.net>
    - * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    - * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
    - * Copyright (C) 2011-2012 Juanjo Menent         <jmenent@2byte.es>
    - * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    +/* Copyright (C) 2003-2007  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2010  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
    + * Copyright (C) 2005-2009  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2005       Simon TOSSER            <simon@kornog-computing.com>
    + * Copyright (C) 2011-2012  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -99,7 +100,7 @@ if ($object->id)
     	dol_fiche_head($head, 'documents', $langs->trans("CPTitreMenu"), -1,'holiday');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -110,7 +111,7 @@ if ($object->id)
     
     	$linkback='<a href="'.DOL_URL_ROOT.'/holiday/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
     
    -	dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref');
    +	dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref');
     
     
     	print '<div class="fichecenter">';
    @@ -152,7 +153,7 @@ if ($object->id)
             print '<tr>';
             print '<td>'.$langs->trans('DateDebCP').' ('.$langs->trans("FirstDayOfHoliday").')</td>';
             print '<td>';
    -        $form->select_date($object->date_debut,'date_debut_');
    +        print $form->selectDate($object->date_debut, 'date_debut_');
             print ' &nbsp; &nbsp; ';
     		print $form->selectarray('starthalfday', $listhalfday, (GETPOST('starthalfday')?GETPOST('starthalfday'):$starthalfday));
             print '</td>';
    @@ -174,9 +175,9 @@ if ($object->id)
             print '<tr>';
             print '<td>'.$langs->trans('DateFinCP').' ('.$langs->trans("LastDayOfHoliday").')</td>';
             print '<td>';
    -        $form->select_date($object->date_fin,'date_fin_');
    +        print $form->selectDate($object->date_fin, 'date_fin_');
             print ' &nbsp; &nbsp; ';
    -		print $form->selectarray('endhalfday', $listhalfday, (GETPOST('endhalfday')?GETPOST('endhalfday'):$endhalfday));
    +        print $form->selectarray('endhalfday', $listhalfday, (GETPOST('endhalfday')?GETPOST('endhalfday'):$endhalfday));
             print '</td>';
             print '</tr>';
         }
    @@ -295,7 +296,6 @@ else
     	print $langs->trans("ErrorUnknown");
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php
    index 5df3fdb314b..a2bdcb2a5b3 100644
    --- a/htdocs/holiday/list.php
    +++ b/htdocs/holiday/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2011	   Dimitri Mouillard	<dmouillard@teclib.com>
      * Copyright (C) 2013-2018 Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012-2016 Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012-2016 Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,7 +23,7 @@
      *		\brief      List of holiday
      */
     
    -require('../main.inc.php');
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
    @@ -78,7 +78,7 @@ $diroutputmassaction=$conf->holiday->dir_output . '/temp/massgeneration/'.$user-
     $hookmanager->initHooks(array('holidaylist'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('holiday');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Default sort order (if not yet defined by previous GETPOST)
     if (! $sortfield) $sortfield="cp.rowid";
    @@ -512,7 +512,7 @@ print '</td>';
     print "</tr>\n";
     
     print '<tr class="liste_titre">';
    -print_liste_field_titre("Ref",$_SERVER["PHP_SELF"],"cp.rowid","",$param,'',$sortfield,$sortorder);
    +print_liste_field_titre("Ref",$_SERVER["PHP_SELF"],"cp.ref","",$param,'',$sortfield,$sortorder);
     print_liste_field_titre("DateCreateCP",$_SERVER["PHP_SELF"],"cp.date_create","",$param,'align="center"',$sortfield,$sortorder);
     print_liste_field_titre("Employee",$_SERVER["PHP_SELF"],"cp.fk_user","",$param,'',$sortfield,$sortorder);
     print_liste_field_titre("ValidatorCP",$_SERVER["PHP_SELF"],"cp.fk_validator","",$param,'',$sortfield,$sortorder);
    @@ -546,7 +546,7 @@ elseif (! empty($holiday->holiday) && !empty($mysoc->country_id))
     	{
     		// Leave request
     		$holidaystatic->id=$infos_CP['rowid'];
    -		$holidaystatic->ref=$infos_CP['rowid'];
    +		$holidaystatic->ref=($infos_CP['ref']?$infos_CP['ref']:$infos_CP['rowid']);
     
     		// User
     		$userstatic->id=$infos_CP['fk_user'];
    @@ -605,7 +605,6 @@ elseif (! empty($holiday->holiday) && !empty($mysoc->country_id))
     		print '</td>';
     
     		print '</tr>'."\n";
    -
     	}
     }
     
    @@ -630,8 +629,8 @@ print '</form>';
     	print '</div>';
     }*/
     
    +// End of page
     llxFooter();
    -
     $db->close();
     
     
    diff --git a/htdocs/holiday/month_report.php b/htdocs/holiday/month_report.php
    index a19a193bc73..152bf554ab8 100644
    --- a/htdocs/holiday/month_report.php
    +++ b/htdocs/holiday/month_report.php
    @@ -23,7 +23,7 @@
      *      \brief      Monthly report of leave requests.
      */
     
    -require('../main.inc.php');
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/holiday/class/holiday.class.php';
     require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    @@ -190,11 +190,10 @@ else
              print '<td class="maxwidth300">' . dol_escape_htmltag(dolGetFirstLineOfText($obj->description)) . '</td>';
           print '</tr>';
        }
    -
     }
     print '</table>';
     print '</div>';
     
    -// Fin de page
    -$db->close();
    +// End of page
     llxFooter();
    +$db->close();
    diff --git a/htdocs/holiday/view_log.php b/htdocs/holiday/view_log.php
    index 198b9a8854c..124d26baf92 100644
    --- a/htdocs/holiday/view_log.php
    +++ b/htdocs/holiday/view_log.php
    @@ -23,7 +23,7 @@
      *  \ingroup    holiday
      */
     
    -require('../main.inc.php');
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
     require_once DOL_DOCUMENT_ROOT.'/holiday/common.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
    @@ -124,7 +124,6 @@ foreach($cp->logs as $logs_CP)
        	print '<td style="text-align: right;">'.price2num($logs_CP['prev_solde'],5).' '.$langs->trans('days').'</td>';
        	print '<td style="text-align: right;">'.price2num($logs_CP['new_solde'],5).' '.$langs->trans('days').'</td>';
        	print '</tr>'."\n";
    -
     }
     
     if ($log_holiday == '2')
    @@ -138,6 +137,6 @@ print '</tbody>'."\n";
     print '</table>'."\n";
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/hrm/admin/admin_establishment.php b/htdocs/hrm/admin/admin_establishment.php
    index 996ddd58ed3..5b15c1fb8bc 100644
    --- a/htdocs/hrm/admin/admin_establishment.php
    +++ b/htdocs/hrm/admin/admin_establishment.php
    @@ -20,7 +20,7 @@
      * \ingroup HRM
      * \brief 	HRM Establishment module setup page
      */
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/hrm.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/hrm/class/establishment.class.php';
     
    @@ -124,7 +124,6 @@ if ($result)
     
                 $i++;
             }
    -
         }
         else
         {
    @@ -145,5 +144,6 @@ print '<div class="tabsAction">';
     print '<a class="butAction" href="../establishment/card.php?action=create">'.$langs->trans("NewEstablishment").'</a>';
     print '</div>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/hrm/admin/admin_hrm.php b/htdocs/hrm/admin/admin_hrm.php
    index a7a8b8a9352..c61480347bb 100644
    --- a/htdocs/hrm/admin/admin_hrm.php
    +++ b/htdocs/hrm/admin/admin_hrm.php
    @@ -20,7 +20,7 @@
      * \ingroup HRM
      * \brief 	HRM module setup page
      */
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/hrm.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     
    @@ -108,5 +108,6 @@ print '<div class="center"><input type="submit" class="button" value="' . $langs
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/hrm/class/establishment.class.php b/htdocs/hrm/class/establishment.class.php
    index 8a99788d040..4153972d27c 100644
    --- a/htdocs/hrm/class/establishment.class.php
    +++ b/htdocs/hrm/class/establishment.class.php
    @@ -1,5 +1,6 @@
     <?php
     /* Copyright (C) 2015		Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,22 +29,67 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class Establishment extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='establishment';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='establishment';
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line = '';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element = 'fk_establishment';
    -	public $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
    +
         public $picto='building';
    -    
    -    public $id;
    -    public $ref;
    +
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +    /**
    +	 * @var string Ref
    +	 */
    +	public $ref;
    +
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
     
     	public $name;
    +
    +	/**
    +	 * @var string Address
    +	 */
     	public $address;
    +
     	public $zip;
     	public $town;
    -	public $status;		// 0=open, 1=closed
    +
    +	/**
    +	 * @var int Status 0=open, 1=closed
    +	 */
    +	public $status;
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
     
     	public $country_id;
    @@ -62,8 +108,6 @@ class Establishment extends CommonObject
     
     		$this->statuts_short = array(0 => 'Closed', 1 => 'Opened');
             $this->statuts = array(0 => 'Closed', 1 => 'Opened');
    -
    -		return 1;
     	}
     
     	/**
    @@ -208,7 +252,7 @@ class Establishment extends CommonObject
     
                 $this->country_id   = $obj->country_id;
                 $this->country_code = $obj->country_code;
    -            $this->country      = $obj->country;			
    +            $this->country      = $obj->country;
     
     			return 1;
     		}
    @@ -257,6 +301,7 @@ class Establishment extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Give a label from a status
     	 *
    @@ -266,35 +311,36 @@ class Establishment extends CommonObject
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
     			return $langs->trans($this->statuts[$status]);
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			return $langs->trans($this->statuts_short[$status]);
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status==0) return img_picto($langs->trans($this->statuts_short[$status]),'statut5').' '.$langs->trans($this->statuts_short[$status]);
    -			if ($status==1) return img_picto($langs->trans($this->statuts_short[$status]),'statut4').' '.$langs->trans($this->statuts_short[$status]);
    +			elseif ($status==1) return img_picto($langs->trans($this->statuts_short[$status]),'statut4').' '.$langs->trans($this->statuts_short[$status]);
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'statut5');
    -			if ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'statut4');
    +			elseif ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'statut4');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status==0 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'statut5').' '.$langs->trans($this->statuts[$status]);
    -			if ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'statut4').' '.$langs->trans($this->statuts[$status]);
    +			elseif ($status==1 && ! empty($this->statuts_short[$status])) return img_picto($langs->trans($this->statuts_short[$status]),'statut4').' '.$langs->trans($this->statuts[$status]);
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status==0 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut5');
    -			if ($status==1 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut4');
    +			elseif ($status==1 && ! empty($this->statuts_short[$status])) return $langs->trans($this->statuts_short[$status]).' '.img_picto($langs->trans($this->statuts_short[$status]),'statut4');
     		}
     	}
     
    @@ -320,7 +366,7 @@ class Establishment extends CommonObject
     				$obj = $this->db->fetch_object($result);
     				$this->id = $obj->rowid;
     
    -				$this->date_creation     = $this->db->jdate($obj->datec);
    +				$this->date_creation = $this->db->jdate($obj->datec);
     				if ($obj->fk_user_author)
     				{
     					$cuser = new User($this->db);
    @@ -386,7 +432,7 @@ class Establishment extends CommonObject
     
             return '';
         }
    -    
    +
         /**
          * Initialise object with example values
          * Id must be 0 if object instance is a specimen
    @@ -397,5 +443,5 @@ class Establishment extends CommonObject
         {
             $this->id = 0;
             $this->ref = 'DEAAA';
    -    }    
    +    }
     }
    diff --git a/htdocs/hrm/establishment/card.php b/htdocs/hrm/establishment/card.php
    index db316098003..d7f591da027 100644
    --- a/htdocs/hrm/establishment/card.php
    +++ b/htdocs/hrm/establishment/card.php
    @@ -19,7 +19,7 @@
      *  \file       	htdocs/hrm/establishment/card.php
      *  \brief      	Page to show an establishment
      */
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/hrm.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/hrm/class/establishment.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    @@ -334,7 +334,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
         if ($action == 'delete')
         {
             print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$id,$langs->trans("DeleteEstablishment"),$langs->trans("ConfirmDeleteEstablishment"),"confirm_delete");
    -
         }
     
     
    @@ -408,5 +407,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
         print '</div>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/hrm/establishment/info.php b/htdocs/hrm/establishment/info.php
    index 76eb236d1a1..35e4f483e3d 100644
    --- a/htdocs/hrm/establishment/info.php
    +++ b/htdocs/hrm/establishment/info.php
    @@ -20,7 +20,7 @@
      *  \brief      	Page to show info of an establishment
      */
     
    -require('../../main.inc.php');
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/hrm.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/hrm/class/establishment.class.php';
    @@ -53,5 +53,6 @@ if ($id)
         print '</div>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/hrm/index.php b/htdocs/hrm/index.php
    index e2b6acaec4f..5344e3765d7 100644
    --- a/htdocs/hrm/index.php
    +++ b/htdocs/hrm/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2011		Dimitri Mouillard	<dmouillard@teclib.com>
      * Copyright (C) 2013-2015	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012-2014	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012-2014	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2015-2016	Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *		\brief      Home page for HRM area.
      */
     
    -require('../main.inc.php');
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
    @@ -236,7 +236,6 @@ if (! empty($conf->holiday->enabled) && $user->rights->holiday->read)
     
                     $i++;
                 }
    -
             }
             else
             {
    @@ -309,7 +308,6 @@ if (! empty($conf->deplacement->enabled) && $user->rights->deplacement->lire)
     
     				$i++;
     			}
    -
     		}
     		else
     		{
    @@ -382,7 +380,6 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire
     
     				$i++;
     			}
    -
     		}
     		else
     		{
    @@ -397,8 +394,6 @@ if (! empty($conf->expensereport->enabled) && $user->rights->expensereport->lire
     
     print '</div></div></div>';
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/imports/class/import.class.php b/htdocs/imports/class/import.class.php
    index f8754193515..a0d33d4c28a 100644
    --- a/htdocs/imports/class/import.class.php
    +++ b/htdocs/imports/class/import.class.php
    @@ -43,8 +43,15 @@ class Import
     	var $array_import_convertvalue;
     	var $array_import_run_sql_after;
     
    -	var $error;
    -	var $errors;
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
     
     	/**
    @@ -58,6 +65,7 @@ class Import
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Load description int this->array_import_module, this->array_import_fields, ... of an importable dataset
     	 *
    @@ -67,6 +75,7 @@ class Import
     	 */
     	function load_arrays($user,$filter='')
     	{
    +        // phpcs:enable
     		global $langs,$conf;
     
     		dol_syslog(get_class($this)."::load_arrays user=".$user->id." filter=".$filter);
    @@ -176,6 +185,7 @@ class Import
     
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Build an import example file.
     	 *  Arrays this->array_export_xxx are already loaded for required datatoexport
    @@ -188,6 +198,7 @@ class Import
     	 */
     	function build_example_file($model, $headerlinefields, $contentlinevalues,$datatoimport)
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$indice=0;
    @@ -349,5 +360,4 @@ class Import
     			return 1;
     		}
     	}
    -
     }
    diff --git a/htdocs/imports/emptyexample.php b/htdocs/imports/emptyexample.php
    index ffb270a6306..f11ad902de6 100644
    --- a/htdocs/imports/emptyexample.php
    +++ b/htdocs/imports/emptyexample.php
    @@ -22,9 +22,15 @@
      */
     
     // This file is a wrapper, so empty header
    -function llxHeader() { print '<html><title>Build an import example file</title><body>'; }
    +function llxHeader()
    +{
    +    print '<html><title>Build an import example file</title><body>';
    +}
     // This file is a wrapper, so empty footer
    -function llxFooter() { print '</body></html>'; }
    +function llxFooter()
    +{
    +    print '</body></html>';
    +}
     
     require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    @@ -86,4 +92,3 @@ foreach($fieldstarget as $code=>$label)
     //var_dump($contentlinevalues);
     
     print $objimport->build_example_file($format,$headerlinefields,$contentlinevalues,$datatoimport);
    -
    diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php
    index c57a4207782..5e69a01bcaf 100644
    --- a/htdocs/imports/import.php
    +++ b/htdocs/imports/import.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012      Christophe Battarel	<christophe.battarel@altairis.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -488,7 +488,6 @@ if ($step == 3 && $datatoimport)
     	if ($action == 'delete')
     	{
     		print $form->formconfirm($_SERVER["PHP_SELF"].'?urlfile='.urlencode(GETPOST('urlfile')).'&step=3'.$param, $langs->trans('DeleteFile'), $langs->trans('ConfirmDeleteFile'), 'confirm_deletefile', '', 0, 1);
    -
     	}
     
     	print '<div class="underbanner clearboth"></div>';
    @@ -662,7 +661,6 @@ if ($step == 4 && $datatoimport)
                 header("Location: ".$_SERVER["PHP_SELF"].'?step=3'.$param.'&filetoimport='.urlencode($relativepath));
                 exit;
             }
    -
         }
     
     	if (GETPOST('update')) {
    @@ -906,12 +904,11 @@ if ($step == 4 && $datatoimport)
     	$height=24;
     	$i = 0;
     	$mandatoryfieldshavesource=true;
    -	$var=true;
    +
     	print '<table width="100%" class="nobordernopadding">';
     	foreach($fieldstarget as $code=>$label)
     	{
    -		$var = !$var;
    -		print '<tr '.$bc[$var].' height="'.$height.'">';
    +		print '<tr class="oddeven" height="'.$height.'">';
     
     		$i++;
     		$entity=(! empty($objimport->array_import_entities[0][$code])?$objimport->array_import_entities[0][$code]:$objimport->array_import_icon[0]);
    @@ -1163,7 +1160,6 @@ if ($step == 4 && $datatoimport)
     		print '</table>';
     		print '</form>';
     	}
    -
     }
     
     
    @@ -1610,7 +1606,6 @@ if ($step == 5 && $datatoimport)
                 print '<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv("NotEnoughPermissions")).'">'.$langs->trans("RunImportFile").'</a>';
             }
             print '</div>';
    -
         }
     
         print '</form>';
    @@ -1915,9 +1910,8 @@ if ($step == 6 && $datatoimport)
     
     print '<br>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
     
     
    diff --git a/htdocs/imports/index.php b/htdocs/imports/index.php
    index cd67a90e4dd..b1852a3de4f 100644
    --- a/htdocs/imports/index.php
    +++ b/htdocs/imports/index.php
    @@ -134,7 +134,6 @@ print '</table>';
     
     //print '</div></div></div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt b/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt
    deleted file mode 100755
    index 1076f8b4b2b..00000000000
    --- a/htdocs/includes/jquery/plugins/multiselect/MIT-LICENSE.txt
    +++ /dev/null
    @@ -1,20 +0,0 @@
    -Copyright (c) 2009 Michael Aufreiter, http://www.quasipartikel.at
    -
    -Permission is hereby granted, free of charge, to any person obtaining
    -a copy of this software and associated documentation files (the
    -"Software"), to deal in the Software without restriction, including
    -without limitation the rights to use, copy, modify, merge, publish,
    -distribute, sublicense, and/or sell copies of the Software, and to
    -permit persons to whom the Software is furnished to do so, subject to
    -the following conditions:
    -
    -The above copyright notice and this permission notice shall be
    -included in all copies or substantial portions of the Software.
    -
    -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    \ No newline at end of file
    diff --git a/htdocs/includes/jquery/plugins/multiselect/css/ui.multiselect.css b/htdocs/includes/jquery/plugins/multiselect/css/ui.multiselect.css
    deleted file mode 100755
    index 2072baa57c4..00000000000
    --- a/htdocs/includes/jquery/plugins/multiselect/css/ui.multiselect.css
    +++ /dev/null
    @@ -1,144 +0,0 @@
    -/* Multiselect
    -----------------------------------*/
    -.multiselect {
    -	width: 600px;
    -	height: 150px;
    -}
    -
    -.ui-multiselect {
    -	border: solid 1px;
    -	font-size: 0.8em;
    -}
    -
    -.ui-multiselect ul {
    -	-moz-user-select: none;
    -}
    -
    -.ui-multiselect li {
    -	margin: 0;
    -	padding: 0;
    -	cursor: default;
    -	line-height: 20px;
    -	height: 20px;
    -	font-size: 11px;
    -	list-style: none;
    -}
    -
    -.ui-multiselect li a {
    -	color: #999;
    -	text-decoration: none;
    -	padding: 0;
    -	display: block;
    -	float: left;
    -	cursor: pointer;
    -}
    -
    -.ui-multiselect li.ui-draggable-dragging {
    -	padding-left: 10px;
    -}
    -
    -.ui-multiselect div.selected {
    -	position: relative;
    -	padding: 0;
    -	margin: 0;
    -	border: 0;
    -	float: left;
    -}
    -
    -.ui-multiselect ul.selected {
    -	position: relative;
    -	padding: 0;
    -	overflow: auto;
    -	overflow-x: hidden;
    -	background: #fff;
    -	margin: 0;
    -	list-style: none;
    -	border: 0;
    -	position: relative;
    -	width: 100%;
    -}
    -
    -.ui-multiselect ul.selected li {
    -	
    -}
    -
    -.ui-multiselect div.available {
    -	position: relative;
    -	padding: 0;
    -	margin: 0;
    -	border: 0;
    -	float: left;
    -	border-left: 1px solid;
    -}
    -
    -.ui-multiselect ul.available {
    -	position: relative;
    -	padding: 0;
    -	overflow: auto;
    -	overflow-x: hidden;
    -	background: #fff;
    -	margin: 0;
    -	list-style: none;
    -	border: 0;
    -	width: 100%;
    -}
    -
    -.ui-multiselect ul.available li {
    -	padding-left: 10px;
    -}
    -
    -.ui-multiselect .ui-state-default {
    -	border: none;
    -	margin-bottom: 1px;
    -	position: relative;
    -	padding-left: 20px;
    -}
    -
    -.ui-multiselect .ui-state-hover {
    -	border: none;
    -}
    -
    -.ui-multiselect .ui-widget-header {
    -	border: none;
    -	font-size: 11px;
    -	margin-bottom: 1px;
    -}
    -
    -.ui-multiselect .add-all {
    -	float: right;
    -	padding: 7px;
    -}
    -
    -.ui-multiselect .remove-all {
    -	float: right;
    -	padding: 7px;
    -}
    -
    -.ui-multiselect .search {
    -	float: left;
    -	padding: 4px;
    -}
    -
    -.ui-multiselect .count {
    -	float: left;
    -	padding: 7px;
    -}
    -
    -.ui-multiselect li span.ui-icon-arrowthick-2-n-s {
    -	position: absolute;
    -	left: 2px;
    -}
    -
    -.ui-multiselect li a.action {
    -	position: absolute;
    -	right: 2px;
    -	top: 2px;
    -}
    -
    -.ui-multiselect input.search {
    -	height: 14px;
    -	padding: 1px;
    -	opacity: 0.5;
    -	margin: 4px;
    -	width: 100px;
    -}
    \ No newline at end of file
    diff --git a/htdocs/includes/jquery/plugins/multiselect/jquery.multi-select.js b/htdocs/includes/jquery/plugins/multiselect/jquery.multi-select.js
    new file mode 100644
    index 00000000000..ee62d1f588d
    --- /dev/null
    +++ b/htdocs/includes/jquery/plugins/multiselect/jquery.multi-select.js
    @@ -0,0 +1,360 @@
    +// jquery.multi-select.js
    +// by mySociety
    +// https://github.com/mysociety/jquery-multi-select
    +
    +;(function($) {
    +
    +  "use strict";
    +
    +  var pluginName = "multiSelect",
    +    defaults = {
    +      'containerHTML': '<div class="multi-select-container">',
    +      'menuHTML': '<div class="multi-select-menu">',
    +      'buttonHTML': '<span class="multi-select-button">',
    +      'menuItemsHTML': '<div class="multi-select-menuitems">',
    +      'menuItemHTML': '<label class="multi-select-menuitem">',
    +      'presetsHTML': '<div class="multi-select-presets">',
    +      'activeClass': 'multi-select-container--open',
    +      'noneText': '-- Select --',
    +      'allText': undefined,
    +      'presets': undefined,
    +      'positionedMenuClass': 'multi-select-container--positioned',
    +      'positionMenuWithin': undefined,
    +      'viewportBottomGutter': 20,
    +      'menuMinHeight': 200
    +    };
    +
    +  /**
    +   * @constructor
    +   */
    +  function MultiSelect(element, options) {
    +    this.element = element;
    +    this.$element = $(element);
    +    this.settings = $.extend( {}, defaults, options );
    +    this._defaults = defaults;
    +    this._name = pluginName;
    +    this.init();
    +  }
    +
    +  function arraysAreEqual(array1, array2) {
    +    if ( array1.length != array2.length ){
    +      return false;
    +    }
    +
    +    array1.sort();
    +    array2.sort();
    +
    +    for ( var i = 0; i < array1.length; i++ ){
    +      if ( array1[i] !== array2[i] ){
    +        return false;
    +      }
    +    }
    +
    +    return true;
    +  }
    +
    +  $.extend(MultiSelect.prototype, {
    +
    +    init: function() {
    +      this.checkSuitableInput();
    +      this.findLabels();
    +      this.constructContainer();
    +      this.constructButton();
    +      this.constructMenu();
    +
    +      this.setUpBodyClickListener();
    +      this.setUpLabelsClickListener();
    +
    +      this.$element.hide();
    +    },
    +
    +    checkSuitableInput: function(text) {
    +      if ( this.$element.is('select[multiple]') === false ) {
    +        throw new Error('$.multiSelect only works on <select multiple> elements');
    +      }
    +    },
    +
    +    findLabels: function() {
    +      this.$labels = $('label[for="' + this.$element.attr('id') + '"]');
    +    },
    +
    +    constructContainer: function() {
    +      this.$container = $(this.settings['containerHTML']);
    +      this.$element.data('multi-select-container', this.$container);
    +      this.$container.insertAfter(this.$element);
    +    },
    +
    +    constructButton: function() {
    +      var _this = this;
    +      this.$button = $(this.settings['buttonHTML']);
    +      this.$button.attr({
    +        'role': 'button',
    +        'aria-haspopup': 'true',
    +        'tabindex': 0,
    +        'aria-label': this.$labels.eq(0).text()
    +      })
    +      .on('keydown.multiselect', function(e) {
    +        var key = e.which;
    +        var returnKey = 13;
    +        var spaceKey = 32;
    +        if ((key === returnKey) || (key === spaceKey)) {
    +          _this.$button.click();
    +        }
    +      }).on('click.multiselect', function(e) {
    +        _this.menuToggle();
    +      })
    +      .appendTo(this.$container);
    +
    +      this.$element.on('change.multiselect', function() {
    +        _this.updateButtonContents();
    +      });
    +
    +      this.updateButtonContents();
    +    },
    +
    +    updateButtonContents: function() {
    +      var _this = this;
    +      var options = [];
    +      var selected = [];
    +
    +      this.$element.children('option').each(function() {
    +        var text = /** @type string */ ($(this).text());
    +        options.push(text);
    +        if ($(this).is(':selected')) {
    +          selected.push( $.trim(text) );
    +        }
    +      });
    +
    +      this.$button.empty();
    +
    +      if (selected.length == 0) {
    +        this.$button.text( this.settings['noneText'] );
    +      } else if ( (selected.length === options.length) && this.settings['allText']) {
    +        this.$button.text( this.settings['allText'] );
    +      } else {
    +        this.$button.text( selected.join(', ') );
    +      }
    +    },
    +
    +    constructMenu: function() {
    +      var _this = this;
    +
    +      this.$menu = $(this.settings['menuHTML']);
    +      this.$menu.attr({
    +        'role': 'menu'
    +      }).on('keyup.multiselect', function(e){
    +        var key = e.which;
    +        var escapeKey = 27;
    +        if (key === escapeKey) {
    +          _this.menuHide();
    +        }
    +      })
    +      .appendTo(this.$container);
    +
    +      this.constructMenuItems();
    +
    +      if ( this.settings['presets'] ) {
    +        this.constructPresets();
    +      }
    +    },
    +
    +    constructMenuItems: function() {
    +      var _this = this;
    +
    +      this.$menuItems = $(this.settings['menuItemsHTML']);
    +      this.$menu.append(this.$menuItems);
    +
    +      this.$element.on('change.multiselect', function(e, internal) {
    +        // Don't need to update the menu items if this
    +        // change event was fired by our tickbox handler.
    +        if(internal !== true){
    +          _this.updateMenuItems();
    +        }
    +      });
    +
    +      this.updateMenuItems();
    +    },
    +
    +    updateMenuItems: function() {
    +      var _this = this;
    +      this.$menuItems.empty();
    +
    +      this.$element.children('option').each(function(option_index, option) {
    +        var $item = _this.constructMenuItem($(option), option_index);
    +        _this.$menuItems.append($item);
    +      });
    +    },
    +
    +    constructPresets: function() {
    +      var _this = this;
    +      this.$presets = $(this.settings['presetsHTML']);
    +      this.$menu.prepend(this.$presets);
    +
    +      $.each(this.settings['presets'], function(i, preset){
    +        var unique_id = _this.$element.attr('name') + '_preset_' + i;
    +        var $item = $(_this.settings['menuItemHTML'])
    +          .attr({
    +            'for': unique_id,
    +            'role': 'menuitem'
    +          })
    +          .text(' ' + preset.name)
    +          .appendTo(_this.$presets);
    +
    +        var $input = $('<input>')
    +          .attr({
    +            'type': 'radio',
    +            'name': _this.$element.attr('name') + '_presets',
    +            'id': unique_id
    +          })
    +          .prependTo($item);
    +
    +        $input.on('change.multiselect', function(){
    +          _this.$element.val(preset.options);
    +          _this.$element.trigger('change');
    +        });
    +      });
    +
    +      this.$element.on('change.multiselect', function() {
    +        _this.updatePresets();
    +      });
    +
    +      this.updatePresets();
    +    },
    +
    +    updatePresets: function() {
    +      var _this = this;
    +
    +      $.each(this.settings['presets'], function(i, preset){
    +        var unique_id = _this.$element.attr('name') + '_preset_' + i;
    +        var $input = _this.$presets.find('#' + unique_id);
    +
    +        if ( arraysAreEqual(preset.options || [], _this.$element.val() || []) ){
    +          $input.prop('checked', true);
    +        } else {
    +          $input.prop('checked', false);
    +        }
    +      });
    +    },
    +
    +    constructMenuItem: function($option, option_index) {
    +      var unique_id = this.$element.attr('name') + '_' + option_index;
    +      var $item = $(this.settings['menuItemHTML'])
    +        .attr({
    +          'for': unique_id,
    +          'role': 'menuitem'
    +        })
    +        .text(' ' + $option.text());
    +
    +      var $input = $('<input>')
    +        .attr({
    +          'type': 'checkbox',
    +          'id': unique_id,
    +          'value': $option.val()
    +        })
    +        .prependTo($item);
    +
    +      if ( $option.is(':disabled') ) {
    +        $input.attr('disabled', 'disabled');
    +      }
    +      if ( $option.is(':selected') ) {
    +        $input.prop('checked', 'checked');
    +      }
    +
    +      $input.on('change.multiselect', function() {
    +        if ($(this).prop('checked')) {
    +          $option.prop('selected', true);
    +        } else {
    +          $option.prop('selected', false);
    +        }
    +
    +        // .prop() on its own doesn't generate a change event.
    +        // Other plugins might want to do stuff onChange.
    +        $option.trigger('change', [true]);
    +      });
    +
    +      return $item;
    +    },
    +
    +    setUpBodyClickListener: function() {
    +      var _this = this;
    +
    +      // Hide the $menu when you click outside of it.
    +      $('html').on('click.multiselect', function(){
    +        _this.menuHide();
    +      });
    +
    +      // Stop click events from inside the $button or $menu from
    +      // bubbling up to the body and closing the menu!
    +      this.$container.on('click.multiselect', function(e){
    +        e.stopPropagation();
    +      });
    +    },
    +
    +    setUpLabelsClickListener: function() {
    +      var _this = this;
    +      this.$labels.on('click.multiselect', function(e) {
    +        e.preventDefault();
    +        e.stopPropagation();
    +        _this.menuToggle();
    +      });
    +    },
    +
    +    menuShow: function() {
    +      $('html').trigger('click.multiselect'); // Close any other open menus
    +      this.$container.addClass(this.settings['activeClass']);
    +
    +      if ( this.settings['positionMenuWithin'] && this.settings['positionMenuWithin'] instanceof $ ) {
    +        var menuLeftEdge = this.$menu.offset().left + this.$menu.outerWidth();
    +        var withinLeftEdge = this.settings['positionMenuWithin'].offset().left +
    +          this.settings['positionMenuWithin'].outerWidth();
    +
    +        if ( menuLeftEdge > withinLeftEdge ) {
    +          this.$menu.css( 'width', (withinLeftEdge - this.$menu.offset().left) );
    +          this.$container.addClass(this.settings['positionedMenuClass']);
    +        }
    +      }
    +
    +      var menuBottom = this.$menu.offset().top + this.$menu.outerHeight();
    +      var viewportBottom = $(window).scrollTop() + $(window).height();
    +      if ( menuBottom > viewportBottom - this.settings['viewportBottomGutter'] ) {
    +        this.$menu.css({
    +          'maxHeight': Math.max(
    +            viewportBottom - this.settings['viewportBottomGutter'] - this.$menu.offset().top,
    +            this.settings['menuMinHeight']
    +          ),
    +          'overflow': 'scroll'
    +        });
    +      } else {
    +        this.$menu.css({
    +          'maxHeight': '',
    +          'overflow': ''
    +        });
    +      }
    +    },
    +
    +    menuHide: function() {
    +      this.$container.removeClass(this.settings['activeClass']);
    +      this.$container.removeClass(this.settings['positionedMenuClass']);
    +      this.$menu.css('width', 'auto');
    +    },
    +
    +    menuToggle: function() {
    +      if ( this.$container.hasClass(this.settings['activeClass']) ) {
    +        this.menuHide();
    +      } else {
    +        this.menuShow();
    +      }
    +    }
    +
    +  });
    +
    +  $.fn[ pluginName ] = function(options) {
    +    return this.each(function() {
    +      if ( !$.data(this, "plugin_" + pluginName) ) {
    +        $.data(this, "plugin_" + pluginName,
    +          new MultiSelect(this, options) );
    +      }
    +    });
    +  };
    +
    +})(jQuery);
    diff --git a/htdocs/includes/jquery/plugins/multiselect/jquery.multi-select.min.js b/htdocs/includes/jquery/plugins/multiselect/jquery.multi-select.min.js
    new file mode 100644
    index 00000000000..015aee2264b
    --- /dev/null
    +++ b/htdocs/includes/jquery/plugins/multiselect/jquery.multi-select.min.js
    @@ -0,0 +1,9 @@
    +(function(c){function f(b,a){this.b=c(b);this.a=c.extend({},g,a);this.H()}var g={containerHTML:'<div class="multi-select-container">',menuHTML:'<div class="multi-select-menu">',buttonHTML:'<span class="multi-select-button">',menuItemsHTML:'<div class="multi-select-menuitems">',menuItemHTML:'<label class="multi-select-menuitem">',presetsHTML:'<div class="multi-select-presets">',activeClass:"multi-select-container--open",noneText:"-- Select --",allText:void 0,presets:void 0,positionedMenuClass:"multi-select-container--positioned",
    +positionMenuWithin:void 0,viewportBottomGutter:20,menuMinHeight:200};c.extend(f.prototype,{H:function(){this.v();this.G();this.A();this.w();this.B();this.J();this.K();this.b.hide()},v:function(){if(!1===this.b.is("select[multiple]"))throw Error("$.multiSelect only works on <select multiple> elements");},G:function(){this.l=c('label[for="'+this.b.attr("id")+'"]')},A:function(){this.f=c(this.a.containerHTML);this.b.data("multi-select-container",this.f);this.f.insertAfter(this.b)},w:function(){var b=
    +this;this.g=c(this.a.buttonHTML);this.g.attr({role:"button","aria-haspopup":"true",tabindex:0,"aria-label":this.l.eq(0).text()}).on("keydown.multiselect",function(a){a=a.which;13!==a&&32!==a||b.g.click()}).on("click.multiselect",function(){b.m()}).appendTo(this.f);this.b.on("change.multiselect",function(){b.o()});this.o()},o:function(){var b=[],a=[];this.b.children("option").each(function(){var d=c(this).text();b.push(d);c(this).is(":selected")&&a.push(c.trim(d))});this.g.empty();0==a.length?this.g.text(this.a.noneText):
    +a.length===b.length&&this.a.allText?this.g.text(this.a.allText):this.g.text(a.join(", "))},B:function(){var b=this;this.c=c(this.a.menuHTML);this.c.attr({role:"menu"}).on("keyup.multiselect",function(a){27===a.which&&b.j()}).appendTo(this.f);this.D();this.a.presets&&this.F()},D:function(){var b=this;this.h=c(this.a.menuItemsHTML);this.c.append(this.h);this.b.on("change.multiselect",function(a,c){!0!==c&&b.s()});this.s()},s:function(){var b=this;this.h.empty();this.b.children("option").each(function(a,
    +d){a=b.C(c(d),a);b.h.append(a)})},F:function(){var b=this;this.i=c(this.a.presetsHTML);this.c.prepend(this.i);c.each(this.a.presets,function(a,d){a=b.b.attr("name")+"_preset_"+a;var h=c(b.a.menuItemHTML).attr({"for":a,role:"menuitem"}).text(" "+d.name).appendTo(b.i);c("<input>").attr({type:"radio",name:b.b.attr("name")+"_presets",id:a}).prependTo(h).on("change.multiselect",function(){b.b.val(d.options);b.b.trigger("change")})});this.b.on("change.multiselect",function(){b.u()});this.u()},u:function(){var b=
    +this;c.each(this.a.presets,function(a,c){a=b.b.attr("name")+"_preset_"+a;a=b.i.find("#"+a);a:{c=c.options||[];var d=b.b.val()||[];if(c.length!=d.length)c=!1;else{c.sort();d.sort();for(var e=0;e<c.length;e++)if(c[e]!==d[e]){c=!1;break a}c=!0}}c?a.prop("checked",!0):a.prop("checked",!1)})},C:function(b,a){var d=this.b.attr("name")+"_"+a;a=c(this.a.menuItemHTML).attr({"for":d,role:"menuitem"}).text(" "+b.text());d=c("<input>").attr({type:"checkbox",id:d,value:b.val()}).prependTo(a);b.is(":disabled")&&
    +d.attr("disabled","disabled");b.is(":selected")&&d.prop("checked","checked");d.on("change.multiselect",function(){c(this).prop("checked")?b.prop("selected",!0):b.prop("selected",!1);b.trigger("change",[!0])});return a},J:function(){var b=this;c("html").on("click.multiselect",function(){b.j()});this.f.on("click.multiselect",function(a){a.stopPropagation()})},K:function(){var b=this;this.l.on("click.multiselect",function(a){a.preventDefault();a.stopPropagation();b.m()})},I:function(){c("html").trigger("click.multiselect");
    +this.f.addClass(this.a.activeClass);if(this.a.positionMenuWithin&&this.a.positionMenuWithin instanceof c){var b=this.c.offset().left+this.c.outerWidth(),a=this.a.positionMenuWithin.offset().left+this.a.positionMenuWithin.outerWidth();b>a&&(this.c.css("width",a-this.c.offset().left),this.f.addClass(this.a.positionedMenuClass))}b=this.c.offset().top+this.c.outerHeight();a=c(window).scrollTop()+c(window).height();b>a-this.a.viewportBottomGutter?this.c.css({maxHeight:Math.max(a-this.a.viewportBottomGutter-
    +this.c.offset().top,this.a.menuMinHeight),overflow:"scroll"}):this.c.css({maxHeight:"",overflow:""})},j:function(){this.f.removeClass(this.a.activeClass);this.f.removeClass(this.a.positionedMenuClass);this.c.css("width","auto")},m:function(){this.f.hasClass(this.a.activeClass)?this.j():this.I()}});c.fn.multiSelect=function(b){return this.each(function(){c.data(this,"plugin_multiSelect")||c.data(this,"plugin_multiSelect",new f(this,b))})}})(jQuery);
    diff --git a/htdocs/includes/jquery/plugins/multiselect/js/ui.multiselect.js b/htdocs/includes/jquery/plugins/multiselect/js/ui.multiselect.js
    deleted file mode 100755
    index 1234fa7a957..00000000000
    --- a/htdocs/includes/jquery/plugins/multiselect/js/ui.multiselect.js
    +++ /dev/null
    @@ -1,336 +0,0 @@
    -/*
    - * jQuery UI Multiselect
    - *
    - * Authors:
    - *  Michael Aufreiter (quasipartikel.at)
    - *  Yanick Rochon (yanick.rochon[at]gmail[dot]com)
    - * 
    - * Dual licensed under the MIT (MIT-LICENSE.txt)
    - * and GPL (GPL-LICENSE.txt) licenses.
    - * 
    - * http://www.quasipartikel.at/multiselect/
    - *
    - * 
    - * Depends:
    - *	ui.core.js
    - *	ui.sortable.js
    - *
    - * Optional:
    - * localization (http://plugins.jquery.com/project/localisation)
    - * scrollTo (http://plugins.jquery.com/project/ScrollTo)
    - * 
    - * Todo:
    - *  Make batch actions faster
    - *  Implement dynamic insertion through remote calls
    - */
    -
    -
    -(function($) {
    -
    -$.widget("ui.multiselect", {
    -  options: {
    -		sortable: true,
    -		searchable: true,
    -		doubleClickable: true,
    -		animated: 'fast',
    -		show: 'slideDown',
    -		hide: 'slideUp',
    -		dividerLocation: 0.6,
    -		nodeComparator: function(node1,node2) {
    -			var text1 = node1.text(),
    -			    text2 = node2.text();
    -			return text1 == text2 ? 0 : (text1 < text2 ? -1 : 1);
    -		}
    -	},
    -	_create: function() {
    -		this.element.hide();
    -		this.id = this.element.attr("id");
    -		this.container = $('<div class="ui-multiselect ui-helper-clearfix ui-widget"></div>').insertAfter(this.element);
    -		this.count = 0; // number of currently selected options
    -		this.selectedContainer = $('<div class="selected"></div>').appendTo(this.container);
    -		this.availableContainer = $('<div class="available"></div>').appendTo(this.container);
    -		this.selectedActions = $('<div class="actions ui-widget-header ui-helper-clearfix"><span class="count">0 '+$.ui.multiselect.locale.itemsCount+'</span><a href="#" class="remove-all">'+$.ui.multiselect.locale.removeAll+'</a></div>').appendTo(this.selectedContainer);
    -		this.availableActions = $('<div class="actions ui-widget-header ui-helper-clearfix"><input type="text" class="search empty ui-widget-content ui-corner-all"/><a href="#" class="add-all">'+$.ui.multiselect.locale.addAll+'</a></div>').appendTo(this.availableContainer);
    -		this.selectedList = $('<ul class="selected connected-list"><li class="ui-helper-hidden-accessible"></li></ul>').bind('selectstart', function(){return false;}).appendTo(this.selectedContainer);
    -		this.availableList = $('<ul class="available connected-list"><li class="ui-helper-hidden-accessible"></li></ul>').bind('selectstart', function(){return false;}).appendTo(this.availableContainer);
    -		
    -		var that = this;
    -
    -		// set dimensions
    -		this.container.width(this.element.width()+1);
    -		this.selectedContainer.width(Math.floor(this.element.width()*this.options.dividerLocation));
    -		this.availableContainer.width(Math.floor(this.element.width()*(1-this.options.dividerLocation)));
    -
    -		// fix list height to match <option> depending on their individual header's heights
    -		this.selectedList.height(Math.max(this.element.height()-this.selectedActions.height(),1));
    -		this.availableList.height(Math.max(this.element.height()-this.availableActions.height(),1));
    -		
    -		if ( !this.options.animated ) {
    -			this.options.show = 'show';
    -			this.options.hide = 'hide';
    -		}
    -		
    -		// init lists
    -		this._populateLists(this.element.find('option'));
    -		
    -		// make selection sortable
    -		if (this.options.sortable) {
    -			this.selectedList.sortable({
    -				placeholder: 'ui-state-highlight',
    -				axis: 'y',
    -				update: function(event, ui) {
    -					// apply the new sort order to the original selectbox
    -					that.selectedList.find('li').each(function() {
    -						if ($(this).data('optionLink'))
    -							$(this).data('optionLink').remove().appendTo(that.element);
    -					});
    -				},
    -				receive: function(event, ui) {
    -					ui.item.data('optionLink').attr('selected', true);
    -					// increment count
    -					that.count += 1;
    -					that._updateCount();
    -					// workaround, because there's no way to reference 
    -					// the new element, see http://dev.jqueryui.com/ticket/4303
    -					that.selectedList.children('.ui-draggable').each(function() {
    -						$(this).removeClass('ui-draggable');
    -						$(this).data('optionLink', ui.item.data('optionLink'));
    -						$(this).data('idx', ui.item.data('idx'));
    -						that._applyItemState($(this), true);
    -					});
    -			
    -					// workaround according to http://dev.jqueryui.com/ticket/4088
    -					setTimeout(function() { ui.item.remove(); }, 1);
    -				}
    -			});
    -		}
    -		
    -		// set up livesearch
    -		if (this.options.searchable) {
    -			this._registerSearchEvents(this.availableContainer.find('input.search'));
    -		} else {
    -			$('.search').hide();
    -		}
    -		
    -		// batch actions
    -		this.container.find(".remove-all").click(function() {
    -			that._populateLists(that.element.find('option').removeAttr('selected'));
    -			return false;
    -		});
    -		
    -		this.container.find(".add-all").click(function() {
    -			var options = that.element.find('option').not(":selected");
    -			if (that.availableList.children('li:hidden').length > 1) {
    -				that.availableList.children('li').each(function(i) {
    -					if ($(this).is(":visible")) $(options[i-1]).attr('selected', 'selected'); 
    -				});
    -			} else {
    -				options.attr('selected', 'selected');
    -			}
    -			that._populateLists(that.element.find('option'));
    -			return false;
    -		});
    -	},
    -	destroy: function() {
    -		this.element.show();
    -		this.container.remove();
    -
    -		$.Widget.prototype.destroy.apply(this, arguments);
    -	},
    -	_populateLists: function(options) {
    -		this.selectedList.children('.ui-element').remove();
    -		this.availableList.children('.ui-element').remove();
    -		this.count = 0;
    -
    -		var that = this;
    -		var items = $(options.map(function(i) {
    -	      var item = that._getOptionNode(this).appendTo(this.selected ? that.selectedList : that.availableList).show();
    -
    -			if (this.selected) that.count += 1;
    -			that._applyItemState(item, this.selected);
    -			item.data('idx', i);
    -			return item[0];
    -    }));
    -		
    -		// update count
    -		this._updateCount();
    -		that._filter.apply(this.availableContainer.find('input.search'), [that.availableList]);
    -  },
    -	_updateCount: function() {
    -		this.selectedContainer.find('span.count').text(this.count+" "+$.ui.multiselect.locale.itemsCount);
    -	},
    -	_getOptionNode: function(option) {
    -		option = $(option);
    -		var node = $('<li class="ui-state-default ui-element" title="'+option.text()+'"><span class="ui-icon"/>'+option.text()+'<a href="#" class="action"><span class="ui-corner-all ui-icon"/></a></li>').hide();
    -		node.data('optionLink', option);
    -		return node;
    -	},
    -	// clones an item with associated data
    -	// didn't find a smarter away around this
    -	_cloneWithData: function(clonee) {
    -		var clone = clonee.clone(false,false);
    -		clone.data('optionLink', clonee.data('optionLink'));
    -		clone.data('idx', clonee.data('idx'));
    -		return clone;
    -	},
    -	_setSelected: function(item, selected) {
    -		item.data('optionLink').attr('selected', selected);
    -
    -		if (selected) {
    -			var selectedItem = this._cloneWithData(item);
    -			item[this.options.hide](this.options.animated, function() { $(this).remove(); });
    -			selectedItem.appendTo(this.selectedList).hide()[this.options.show](this.options.animated);
    -			
    -			this._applyItemState(selectedItem, true);
    -			return selectedItem;
    -		} else {
    -			
    -			// look for successor based on initial option index
    -			var items = this.availableList.find('li'), comparator = this.options.nodeComparator;
    -			var succ = null, i = item.data('idx'), direction = comparator(item, $(items[i]));
    -
    -			// TODO: test needed for dynamic list populating
    -			if ( direction ) {
    -				while (i>=0 && i<items.length) {
    -					direction > 0 ? i++ : i--;
    -					if ( direction != comparator(item, $(items[i])) ) {
    -						// going up, go back one item down, otherwise leave as is
    -						succ = items[direction > 0 ? i : i+1];
    -						break;
    -					}
    -				}
    -			} else {
    -				succ = items[i];
    -			}
    -			
    -			var availableItem = this._cloneWithData(item);
    -			succ ? availableItem.insertBefore($(succ)) : availableItem.appendTo(this.availableList);
    -			item[this.options.hide](this.options.animated, function() { $(this).remove(); });
    -			availableItem.hide()[this.options.show](this.options.animated);
    -			
    -			this._applyItemState(availableItem, false);
    -			return availableItem;
    -		}
    -	},
    -	_applyItemState: function(item, selected) {
    -		if (selected) {
    -			if (this.options.sortable)
    -				item.children('span').addClass('ui-icon-arrowthick-2-n-s').removeClass('ui-helper-hidden').addClass('ui-icon');
    -			else
    -				item.children('span').removeClass('ui-icon-arrowthick-2-n-s').addClass('ui-helper-hidden').removeClass('ui-icon');
    -			item.find('a.action span').addClass('ui-icon-minus').removeClass('ui-icon-plus');
    -			this._registerRemoveEvents(item.find('a.action'));
    -			
    -		} else {
    -			item.children('span').removeClass('ui-icon-arrowthick-2-n-s').addClass('ui-helper-hidden').removeClass('ui-icon');
    -			item.find('a.action span').addClass('ui-icon-plus').removeClass('ui-icon-minus');
    -			this._registerAddEvents(item.find('a.action'));
    -		}
    -		
    -		this._registerDoubleClickEvents(item);
    -		this._registerHoverEvents(item);
    -	},
    -	// taken from John Resig's liveUpdate script
    -	_filter: function(list) {
    -		var input = $(this);
    -		var rows = list.children('li'),
    -			cache = rows.map(function(){
    -				
    -				return $(this).text().toLowerCase();
    -			});
    -		
    -		var term = $.trim(input.val().toLowerCase()), scores = [];
    -		
    -		if (!term) {
    -			rows.show();
    -		} else {
    -			rows.hide();
    -
    -			cache.each(function(i) {
    -				if (this.indexOf(term)>-1) { scores.push(i); }
    -			});
    -
    -			$.each(scores, function() {
    -				$(rows[this]).show();
    -			});
    -		}
    -	},
    -	_registerDoubleClickEvents: function(elements) {
    -		if (!this.options.doubleClickable) return;
    -		elements.dblclick(function() {
    -			elements.find('a.action').click();
    -		});
    -	},
    -	_registerHoverEvents: function(elements) {
    -		elements.removeClass('ui-state-hover');
    -		elements.mouseover(function() {
    -			$(this).addClass('ui-state-hover');
    -		});
    -		elements.mouseout(function() {
    -			$(this).removeClass('ui-state-hover');
    -		});
    -	},
    -	_registerAddEvents: function(elements) {
    -		var that = this;
    -		elements.click(function() {
    -			var item = that._setSelected($(this).parent(), true);
    -			that.count += 1;
    -			that._updateCount();
    -			return false;
    -		});
    -		
    -		// make draggable
    -		if (this.options.sortable) {
    -  		elements.each(function() {
    -  			$(this).parent().draggable({
    -  	      connectToSortable: that.selectedList,
    -  				helper: function() {
    -  					var selectedItem = that._cloneWithData($(this)).width($(this).width() - 50);
    -  					selectedItem.width($(this).width());
    -  					return selectedItem;
    -  				},
    -  				appendTo: that.container,
    -  				containment: that.container,
    -  				revert: 'invalid'
    -  	    });
    -  		});		  
    -		}
    -	},
    -	_registerRemoveEvents: function(elements) {
    -		var that = this;
    -		elements.click(function() {
    -			that._setSelected($(this).parent(), false);
    -			that.count -= 1;
    -			that._updateCount();
    -			return false;
    -		});
    - 	},
    -	_registerSearchEvents: function(input) {
    -		var that = this;
    -
    -		input.focus(function() {
    -			$(this).addClass('ui-state-active');
    -		})
    -		.blur(function() {
    -			$(this).removeClass('ui-state-active');
    -		})
    -		.keypress(function(e) {
    -			if (e.keyCode == 13)
    -				return false;
    -		})
    -		.keyup(function() {
    -			that._filter.apply(this, [that.availableList]);
    -		});
    -	}
    -});
    -		
    -$.extend($.ui.multiselect, {
    -	locale: {
    -		addAll:'Add all',
    -		removeAll:'Remove all',
    -		itemsCount:'items selected'
    -	}
    -});
    -
    -
    -})(jQuery);
    diff --git a/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared/OLERead.php b/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared/OLERead.php
    index 261bdde5812..444d8ec641f 100644
    --- a/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared/OLERead.php
    +++ b/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Shared/OLERead.php
    @@ -289,7 +289,6 @@ class PHPExcel_Shared_OLERead {
     
     			$offset += self::PROPERTY_STORAGE_BLOCK_SIZE;
     		}
    -
     	}
     
     	/**
    diff --git a/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel2007/Chart.php b/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel2007/Chart.php
    index 4846910fa29..93e85582d5c 100644
    --- a/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel2007/Chart.php
    +++ b/htdocs/includes/phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel2007/Chart.php
    @@ -1042,7 +1042,6 @@ class PHPExcel_Writer_Excel2007_Chart extends
         }
     
         $objWriter->endElement();
    -
       }
     
       /**
    @@ -1322,7 +1321,6 @@ class PHPExcel_Writer_Excel2007_Chart extends
           $objWriter->endElement();
         }
         $objWriter->endElement();
    -
       }
     
       /**
    diff --git a/htdocs/includes/restler/framework/Luracast/Restler/explorer/css/screen.css b/htdocs/includes/restler/framework/Luracast/Restler/explorer/css/screen.css
    index dc02468fdc0..ea3a4153c15 100644
    --- a/htdocs/includes/restler/framework/Luracast/Restler/explorer/css/screen.css
    +++ b/htdocs/includes/restler/framework/Luracast/Restler/explorer/css/screen.css
    @@ -1231,7 +1231,7 @@
       cursor: pointer;
     }
     .swagger-section #header {
    -  background-color: #646257;
    +  background-color: rgb(163, 188, 210);
       padding: 14px;
     }
     .swagger-section #input_baseUrl {
    @@ -1278,7 +1278,7 @@
       font-size: 1.5em;
       font-weight: bold;
       text-decoration: none;
    -  background: transparent url(../images/logo_small.png) no-repeat left center;
    +  background: transparent url(../../../../theme/eldy/img/favicon.ico) no-repeat left center;
       padding: 20px 0 20px 40px;
       color: white;
     }
    diff --git a/htdocs/includes/restler/framework/Luracast/Restler/explorer/index.html b/htdocs/includes/restler/framework/Luracast/Restler/explorer/index.html
    index c73f1981cc9..01fb8ee2a0e 100644
    --- a/htdocs/includes/restler/framework/Luracast/Restler/explorer/index.html
    +++ b/htdocs/includes/restler/framework/Luracast/Restler/explorer/index.html
    @@ -3,7 +3,7 @@
     <html>
     <head>
       <meta charset="UTF-8">
    -  <title>Api Explorer</title>
    +  <title>REST API Explorer</title>
       <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
       <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
       <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
    @@ -73,6 +73,7 @@
             docExpansion: "none",
             jsonEditor: false,
             apisSorter: "alpha",
    +        operationsSorter: "alpha",
             defaultModelRendering: 'schema',
             showRequestHeaders: false
           });
    @@ -126,7 +127,7 @@
     <body class="swagger-section">
     <div id='header'>
       <div class="swagger-ui-wrap">
    -    <a id="logo" href="#">API Explorer</a>
    +    <a id="logo" href="#">Dolibarr REST API Explorer</a>
         <form id='api_selector'>
           <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>
           <div class='input'><input placeholder="DOLAPIKEY" id="input_apiKey" name="apiKey" type="text"/></div>
    diff --git a/htdocs/includes/restler/framework/Luracast/Restler/explorer/swagger-ui.js b/htdocs/includes/restler/framework/Luracast/Restler/explorer/swagger-ui.js
    index fee54e49324..b1c2e3f2767 100644
    --- a/htdocs/includes/restler/framework/Luracast/Restler/explorer/swagger-ui.js
    +++ b/htdocs/includes/restler/framework/Luracast/Restler/explorer/swagger-ui.js
    @@ -1193,7 +1193,7 @@ var reservedApiTags = [
       'path',
       'tag'
     ];
    -var supportedOperationMethods = ['delete', 'get', 'head', 'options', 'patch', 'post', 'put'];
    +var supportedOperationMethods = ['head', 'options', 'get', 'post', 'put', 'patch', 'delete'];
     var SwaggerClient = module.exports = function (url, options) {
       this.authorizations = null;
       this.authorizationScheme = null;
    @@ -26327,4 +26327,4 @@ SwaggerUi.Views.StatusCodeView = Backbone.View.extend({
         }
         return this;
       }
    -});}).call(this);
    \ No newline at end of file
    +});}).call(this);
    diff --git a/htdocs/includes/tcpdi/tcpdi_parser.php b/htdocs/includes/tcpdi/tcpdi_parser.php
    index 038994568ac..cdeaf4f94e6 100644
    --- a/htdocs/includes/tcpdi/tcpdi_parser.php
    +++ b/htdocs/includes/tcpdi/tcpdi_parser.php
    @@ -484,7 +484,7 @@ class tcpdi_parser {
     			$v = $sarr[$key];
     			if (($key == '/Type') AND ($v[0] == PDF_TYPE_TOKEN AND ($v[1] == 'XRef'))) {
     				$valid_crs = true;
    -			} elseif (($key == '/Index') AND ($v[0] == PDF_TYPE_ARRAY AND count($v[1] >= 2))) {
    +			} elseif (($key == '/Index') AND ($v[0] == PDF_TYPE_ARRAY AND count($v[1]) >= 2)) {
     				// first object number in the subsection
     				$index_first = intval($v[1][0][1]);
     				// number of entries in the subsection
    diff --git a/htdocs/includes/tecnickcom/tcpdf/tcpdf.php b/htdocs/includes/tecnickcom/tcpdf/tcpdf.php
    index ef411a17dee..3cdfff4f227 100644
    --- a/htdocs/includes/tecnickcom/tcpdf/tcpdf.php
    +++ b/htdocs/includes/tecnickcom/tcpdf/tcpdf.php
    @@ -17783,7 +17783,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
     											// justify block
     											if (!TCPDF_STATIC::empty_string($this->lispacer)) {
     												$this->lispacer = '';
    -												continue;
    +												break;
     											}
     											preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x', $pmid, $xmatches);
     											if (!isset($xmatches[1])) {
    diff --git a/htdocs/index.php b/htdocs/index.php
    index 9ca5585d0ca..1ef48ea9bae 100644
    --- a/htdocs/index.php
    +++ b/htdocs/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2004	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2015		Marcos García			<marcosgdf@gmail.com>
      *
    @@ -358,7 +358,7 @@ print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
     /*
      * Dolibarr Working Board with weather
      */
    -$showweather=empty($conf->global->MAIN_DISABLE_METEO)?1:0;
    +$showweather=(empty($conf->global->MAIN_DISABLE_METEO) || $conf->global->MAIN_DISABLE_METEO == 2) ? 1 : 0;
     
     //Array that contains all WorkboardResponse classes to process them
     $dashboardlines=array();
    @@ -536,7 +536,7 @@ $boxwork.='</tr>'."\n";
     if ($showweather)
     {
         $boxwork.='<tr class="nohover">';
    -    $boxwork.='<td class="nohover hideonsmartphone center valignmiddle">';
    +    $boxwork.='<td class="nohover'.($conf->global->MAIN_DISABLE_METEO == 2 ?' hideonsmartphone' : '').' center valignmiddle">';
         $text='';
         if ($totallate > 0) $text=$langs->transnoentitiesnoconv("WarningYouHaveAtLeastOneTaskLate").' ('.$langs->transnoentitiesnoconv("NActionsLate",$totallate.(!empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? '%' : '')).')';
         else $text=$langs->transnoentitiesnoconv("NoItemLate");
    @@ -552,7 +552,8 @@ if ($showweather)
     $nbworkboardempty=0;
     if (! empty($valid_dashboardlines))
     {
    -	$boxwork.='<tr class="nohover"><td class="tdboxstats nohover flexcontainer centpercent">';
    +	$boxwork.='<tr class="nohover"><td class="tdboxstats nohover flexcontainer centpercent"><div style="display: flex: flex-wrap: wrap">';
    +	
         foreach($valid_dashboardlines as $board)
         {
             if (empty($board->nbtodo)) $nbworkboardempty++;
    @@ -565,6 +566,10 @@ if (! empty($valid_dashboardlines))
             $sep=($conf->dol_use_jmobile?'<br>':' ');
             $boxwork .= '<span class="boxstatstext" title="'.dol_escape_htmltag($board->label).'">'.$board->img.' '.$board->label.'</span><br>';
             $boxwork .= '<a class="valignmiddle dashboardlineindicator" href="'.$board->url.'"><span class="dashboardlineindicator'.(($board->nbtodo == 0)?' dashboardlineok':'').'">'.$board->nbtodo.'</span></a>';
    +        if ($board->total > 0 && ! empty($conf->global->MAIN_WORKBOARD_SHOW_TOTAL_WO_TAX))
    +	{
    +		$boxwork .= '&nbsp;/&nbsp;<a class="valignmiddle dashboardlineindicator" href="'.$board->url.'"><span class="dashboardlineindicator'.(($board->nbtodo == 0)?' dashboardlineok':'').'">'.price($board->total)	.'</span></a>';
    +	}
             $boxwork .= '</div>';
             if ($board->nbtodolate > 0)
             {
    @@ -588,6 +593,8 @@ if (! empty($valid_dashboardlines))
         $boxwork .='<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
         $boxwork .='<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
         $boxwork .='<div class="boxstatsindicator thumbstat150 nobold nounderline"><div class="boxstats150empty"></div></div>';
    +    
    +    $boxwork .='</div>';
         $boxwork .='</td></tr>';
     }
     else
    @@ -675,8 +682,8 @@ if ($user->admin && empty($conf->global->MAIN_REMOVE_INSTALL_WARNING))
     
     //print 'mem='.memory_get_usage().' - '.memory_get_peak_usage();
     
    +// End of page
     llxFooter();
    -
     $db->close();
     
     
    @@ -699,15 +706,27 @@ function showWeather($totallate,$text,$options)
     
         $used_conf = !empty($conf->global->MAIN_USE_METEO_WITH_PERCENTAGE) ? 'MAIN_METEO_PERCENTAGE_LEVEL' : 'MAIN_METEO_LEVEL';
     
    -    $level0=$offset;           if (! empty($conf->global->{$used_conf.'0'})) $level0=$conf->global->{$used_conf.'0'};
    -    $level1=$offset+1*$factor; if (! empty($conf->global->{$used_conf.'1'})) $level1=$conf->global->{$used_conf.'1'};
    -    $level2=$offset+2*$factor; if (! empty($conf->global->{$used_conf.'2'})) $level2=$conf->global->{$used_conf.'2'};
    -    $level3=$offset+3*$factor; if (! empty($conf->global->{$used_conf.'3'})) $level3=$conf->global->{$used_conf.'3'};
    +    $level0=$offset;
    +    if (! empty($conf->global->{$used_conf.'0'})) {
    +        $level0=$conf->global->{$used_conf.'0'};
    +    }
    +    $level1=$offset+1*$factor;
    +    if (! empty($conf->global->{$used_conf.'1'})) {
    +        $level1=$conf->global->{$used_conf.'1'};
    +    }
    +    $level2=$offset+2*$factor;
    +    if (! empty($conf->global->{$used_conf.'2'})) {
    +        $level2=$conf->global->{$used_conf.'2'};
    +    }
    +    $level3=$offset+3*$factor;
    +    if (! empty($conf->global->{$used_conf.'3'})) {
    +        $level3=$conf->global->{$used_conf.'3'};
    +    }
     
         if ($totallate <= $level0) $out.=img_weather($text,'weather-clear.png',$options);
    -    if ($totallate > $level0 && $totallate <= $level1) $out.=img_weather($text,'weather-few-clouds.png',$options);
    -    if ($totallate > $level1 && $totallate <= $level2) $out.=img_weather($text,'weather-clouds.png',$options);
    -    if ($totallate > $level2 && $totallate <= $level3) $out.=img_weather($text,'weather-many-clouds.png',$options);
    -    if ($totallate > $level3) $out.=img_weather($text,'weather-storm.png',$options);
    +    elseif ($totallate > $level0 && $totallate <= $level1) $out.=img_weather($text,'weather-few-clouds.png',$options);
    +    elseif ($totallate > $level1 && $totallate <= $level2) $out.=img_weather($text,'weather-clouds.png',$options);
    +    elseif ($totallate > $level2 && $totallate <= $level3) $out.=img_weather($text,'weather-many-clouds.png',$options);
    +    elseif ($totallate > $level3) $out.=img_weather($text,'weather-storm.png',$options);
         return $out;
     }
    diff --git a/htdocs/install/check.php b/htdocs/install/check.php
    index 10ff1b603bb..15806c38a1b 100644
    --- a/htdocs/install/check.php
    +++ b/htdocs/install/check.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004-2005  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2013-2014  Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2014       Marcos García           <marcosgdf@gmail.com>
      * Copyright (C) 2015-2016  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    @@ -40,7 +40,7 @@ $langs->setDefaultLang($setuplang);
     
     $langs->load("install");
     
    -// Now we load forced value from install.forced.php file.
    +// Now we load forced/pre-set values from install.forced.php file.
     $useforcedwizard=false;
     $forcedfile="./install.forced.php";
     if ($conffile == "/etc/dolibarr/conf.php") $forcedfile="/etc/dolibarr/install.forced.php";
    @@ -49,14 +49,14 @@ if (@file_exists($forcedfile)) {
     	include_once $forcedfile;
     }
     
    -dolibarr_install_syslog("--- check: Dolibarr install/upgrade process started");
    +dolibarr_install_syslog("- check: Dolibarr install/upgrade process started");
     
     
     /*
      *	View
      */
     
    -pHeader('','');     // No next step for navigation buttons. Next step is defined by clik on links.
    +pHeader('','');     // No next step for navigation buttons. Next step is defined by click on links.
     
     
     //print "<br>\n";
    @@ -233,13 +233,13 @@ else
     		else dolibarr_install_syslog("check: failed to create a new file " . $conffile . " into current dir " . getcwd() . ". Please check permissions.", LOG_ERR);
     	}
     
    -	// First install, we can't upgrade
    +	// First install: no upgrade necessary/required
     	$allowupgrade=false;
     }
     
     
     
    -// File is missng and can't be created
    +// File is missing and cannot be created
     if (! file_exists($conffile))
     {
     	print '<img src="../theme/eldy/img/error.png" alt="Error"> '.$langs->trans("ConfFileDoesNotExistsAndCouldNotBeCreated",$conffiletoshow);
    @@ -258,7 +258,7 @@ else
     
     		$allowinstall=0;
     	}
    -	// File exists but can't be modified
    +	// File exists but cannot be modified
     	elseif (!is_writable($conffile))
     	{
     		if ($confexists)
    @@ -294,7 +294,7 @@ else
     	}
     	print "<br>\n";
     
    -	// Requirements ok, we display the next step button
    +	// Requirements met/all ok: display the next step button
     	if ($checksok)
     	{
     		$ok=0;
    @@ -307,7 +307,7 @@ else
     			{
     				if (! file_exists($dolibarr_main_document_root."/core/lib/admin.lib.php"))
     				{
    -				    print '<font class="error">A '.$conffiletoshow.' file exists with a dolibarr_main_document_root to '.$dolibarr_main_document_root.' that seems wrong. Try to fix or remove the '.$conffiletoshow.' file.</font><br>'."\n";
    +                    print '<span class="error">A '.$conffiletoshow.' file exists with a dolibarr_main_document_root to '.$dolibarr_main_document_root.' that seems wrong. Try to fix or remove the '.$conffiletoshow.' file.</span><br>'."\n";
     				    dol_syslog("A '" . $conffiletoshow . "' file exists with a dolibarr_main_document_root to " . $dolibarr_main_document_root . " that seems wrong. Try to fix or remove the '" . $conffiletoshow . "' file.", LOG_WARNING);
     				}
     				else
    @@ -326,7 +326,7 @@ else
                     else $dolibarr_main_db_pass = dol_decode($dolibarr_main_db_encrypted_pass);
                 }
     
    -    				// $conf is already instancied inside inc.php
    +    				// $conf already created in inc.php
         				$conf->db->type = $dolibarr_main_db_type;
         				$conf->db->host = $dolibarr_main_db_host;
         				$conf->db->port = $dolibarr_main_db_port;
    @@ -342,7 +342,7 @@ else
     			}
     		}
     
    -		// If a database access is available, we set more variable
    +		// If database access is available, we set more variables
     		if ($ok)
     		{
     			if (empty($dolibarr_main_db_encryption)) $dolibarr_main_db_encryption=0;
    @@ -364,8 +364,8 @@ else
     		// Show title
     		if (! empty($conf->global->MAIN_VERSION_LAST_UPGRADE) || ! empty($conf->global->MAIN_VERSION_LAST_INSTALL))
     		{
    -			print $langs->trans("VersionLastUpgrade").': <b><font class="ok">'.(empty($conf->global->MAIN_VERSION_LAST_UPGRADE)?$conf->global->MAIN_VERSION_LAST_INSTALL:$conf->global->MAIN_VERSION_LAST_UPGRADE).'</font></b><br>';
    -			print $langs->trans("VersionProgram").': <b><font class="ok">'.DOL_VERSION.'</font></b>';
    +            print $langs->trans("VersionLastUpgrade").': <b><span class="ok">'.(empty($conf->global->MAIN_VERSION_LAST_UPGRADE)?$conf->global->MAIN_VERSION_LAST_INSTALL:$conf->global->MAIN_VERSION_LAST_UPGRADE).'</span></b><br>';
    +            print $langs->trans("VersionProgram").': <b><span class="ok">'.DOL_VERSION.'</span></b>';
     			//print ' '.img_warning($langs->trans("RunningUpdateProcessMayBeRequired"));
     			print '<br>';
     			print '<br>';
    @@ -375,7 +375,7 @@ else
     		print $langs->trans("InstallEasy")." ";
     		print $langs->trans("ChooseYourSetupMode");
     
    -        print '<br><br>';
    +        print '<br>';
     
     		$foundrecommandedchoice=0;
     
    @@ -383,9 +383,9 @@ else
             $notavailable_choices = array();
     
     		// Show first install line
    -		$choice = '<tr class="listofchoices"><td class="listofchoices nowrap" align="center"><b>'.$langs->trans("FreshInstall").'</b>';
    +        $choice = "\n".'<tr><td class="nowrap center"><b>'.$langs->trans("FreshInstall").'</b>';
     		$choice .= '</td>';
    -		$choice .= '<td class="listofchoices listofchoicesdesc">';
    +        $choice .= '<td class="listofchoicesdesc">';
     		$choice .= $langs->trans("FreshInstallDesc");
     		if (empty($dolibarr_main_db_host))	// This means install process was not run
     		{
    @@ -397,7 +397,7 @@ else
     		}
     
             $choice .= '</td>';
    -        $choice .= '<td class="listofchoices" align="center">';
    +        $choice .= '<td class="center">';
     		if ($allowinstall)
     		{
                 $choice .= '<a class="button" href="fileconf.php?selectlang='.$setuplang.'">'.$langs->trans("Start").'</a>';
    @@ -436,7 +436,8 @@ else
     								array('from'=>'4.0.0', 'to'=>'5.0.0'),
     								array('from'=>'5.0.0', 'to'=>'6.0.0'),
     								array('from'=>'6.0.0', 'to'=>'7.0.0'),
    -								array('from'=>'7.0.0', 'to'=>'8.0.0')
    +								array('from'=>'7.0.0', 'to'=>'8.0.0'),
    +								array('from'=>'8.0.0', 'to'=>'9.0.0')
     		);
     
     		$count=0;
    @@ -464,7 +465,7 @@ else
     
                 if ($ok)
                 {
    -                if (count($dolibarrlastupgradeversionarray) >= 2)	// If a database access is available and last upgrade version is known
    +                if (count($dolibarrlastupgradeversionarray) >= 2)	// If database access is available and last upgrade version is known
                     {
                         // Now we check if this is the first qualified choice
                         if ($allowupgrade && empty($foundrecommandedchoice) &&
    @@ -476,22 +477,23 @@ else
                         }
                     }
                     else {
    -                    // We can not recommand a choice.
    +                    // We cannot recommend a choice.
                         // A version of install may be known, but we need last upgrade.
                     }
                 }
     
    -            $choice .= '<tr class="listofchoices '.($recommended_choice ? 'choiceselected' : '').'">';
    -            $choice .= '<td class="listofchoices nowrap" align="center"><b>'.$langs->trans("Upgrade").'<br>'.$newversionfrom.$newversionfrombis.' -> '.$newversionto.'</b></td>';
    -            $choice .= '<td class="listofchoices listofchoicesdesc">';
    +            $choice .= "\n".'<tr'.($recommended_choice ? ' class="choiceselected"' : '').'>';
    +            $choice .= '<td class="nowrap center"><b>'.$langs->trans("Upgrade").'<br>'.$newversionfrom.$newversionfrombis.' -> '.$newversionto.'</b></td>';
    +            $choice .= '<td class="listofchoicesdesc">';
                 $choice .= $langs->trans("UpgradeDesc");
     
                 if ($recommended_choice)
                 {
                     $choice .= '<br>';
                     //print $langs->trans("InstallChoiceRecommanded",DOL_VERSION,$conf->global->MAIN_VERSION_LAST_UPGRADE);
    -                $choice .= '<div class="center"><div class="ok">'.$langs->trans("InstallChoiceSuggested").'</div>';
    -                if ($count < count($migarray))	// There is other choices after
    +                $choice .= '<div class="center">';
    +                $choice .=  '<div class="ok">'.$langs->trans("InstallChoiceSuggested").'</div>';
    +                if ($count < count($migarray))	// There are other choices after
                     {
                         print $langs->trans("MigrateIsDoneStepByStep",DOL_VERSION);
                     }
    @@ -499,7 +501,7 @@ else
                 }
     
                 $choice .= '</td>';
    -            $choice .= '<td class="listofchoices" align="center">';
    +            $choice .= '<td class="center">';
     			if ($allowupgrade)
     			{
     				$disabled=false;
    @@ -511,8 +513,14 @@ else
     				{
     					$foundrecommandedchoice = 2;
     				}
    -				if ($disabled) $choice .= '<span class="buttonDisable runupgrade"'.($disabled?' disabled="disabled"':'').' href="#">'.$langs->trans("NotAvailable").'</span>';
    -				else $choice .= '<a class="button runupgrade"'.($disabled?' disabled="disabled"':'').' href="upgrade.php?action=upgrade'.($count<count($migrationscript)?'_'.$versionto:'').'&amp;selectlang='.$setuplang.'&amp;versionfrom='.$versionfrom.'&amp;versionto='.$versionto.'">'.$langs->trans("Start").'</a>';
    +				if ($disabled)
    +                {
    +                    $choice .= '<span class="button">'.$langs->trans("NotAvailable").'</span>';
    +                }
    +				else
    +                {
    +                    $choice .= '<a class="button runupgrade" href="upgrade.php?action=upgrade'.($count<count($migrationscript)?'_'.$versionto:'').'&amp;selectlang='.$setuplang.'&amp;versionfrom='.$versionfrom.'&amp;versionto='.$versionto.'">'.$langs->trans("Start").'</a>';
    +                }
     			}
     			else
     			{
    @@ -536,33 +544,31 @@ else
     		}
     
             // Array of install choices
    +        print"\n";
             print '<table width="100%" class="listofchoices">';
             foreach ($available_choices as $choice) {
                 print $choice;
             }
     
    -        print '</table>';
    +        print '</table>'."\n";
     
             if (count($notavailable_choices)) {
     
    -            print '<br>';
                 print '<div id="AShowChoices">';
    -            print '<img src="../theme/eldy/img/1downarrow.png"> <a href="#">'.$langs->trans('ShowNotAvailableOptions').'</a>';
    +            print '<img src="../theme/eldy/img/1downarrow.png">';
                 print '</div>';
     
                 print '<div id="navail_choices" style="display:none">';
    -            print '<br>';
    +            print "<br>\n";
                 print '<table width="100%" class="listofchoices">';
                 foreach ($notavailable_choices as $choice) {
                     print $choice;
                 }
     
    -            print '</table>';
    +            print '</table>'."\n";
                 print '</div>';
             }
    -
     	}
    -
     }
     
     print '<script type="text/javascript">
    @@ -589,6 +595,5 @@ $(".runupgrade").click(function() {
     
     </script>';
     
    -dolibarr_install_syslog("--- check: end");
    +dolibarr_install_syslog("- check: end");
     pFooter(1);	// Never display next button
    -
    diff --git a/htdocs/install/default.css b/htdocs/install/default.css
    index e23a36ddd21..2e005a30b21 100644
    --- a/htdocs/install/default.css
    +++ b/htdocs/install/default.css
    @@ -1,5 +1,5 @@
    -/* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org> 
    - * Copyright (C) 2009-2017 Laurent Destailleur  <eldy@users.sourceforge.net> 
    +/* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    + * Copyright (C) 2009-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -89,16 +89,16 @@ div.soustitre {
     	body {
     		margin: 15px 4px 4px;
     	}
    -	
    -	input, input[type=text], input[type=password], select, textarea     { 
    -		min-width: 20px; 
    +
    +	input, input[type=text], input[type=password], select, textarea     {
    +		min-width: 20px;
         	min-height: 1.4em;
         	line-height: 1.4em;
         	padding: .4em .1em;
         	border: 1px solid #BBB;
         	/* max-width: inherit; why this ? */
          }
    -     
    +
         .hideonsmartphone { display: none; }
         .noenlargeonsmartphone { width : 50px !important; display: inline !important; }
         .maxwidthonsmartphone { max-width: 100px; }
    @@ -120,13 +120,13 @@ div.soustitre {
         	padding-left: 0;
         	padding-right: 0;
     	}
    -	
    +
     	table.main-inside {
     		padding-left: 1px;
     		padding-right: 1px;
     		line-height: 20px;
     	}
    -	
    +
     	span.titre {
     	    font-size: 90%;
     	    font-weight: normal;
    @@ -146,7 +146,7 @@ input:disabled
     	padding: 0 0 0 0;
     	margin: 0 0 0 0;
     	color: #AAA !important;
    -	cursor: not-allowed !important; 
    +	cursor: not-allowed !important;
     }
     
     input[type=submit] {
    @@ -199,7 +199,7 @@ input:-webkit-autofill {
         -webkit-box-shadow: 0 0 0 50px #FBFFEA inset;
     }
     
    -table.listofchoices, tr.listofchoices, td.listofchoices {
    +table.listofchoices, table.listofchoices tr, table.listofchoices td {
     	border-collapse: collapse;
         padding: 4px;
         color: #000000;
    @@ -207,15 +207,12 @@ table.listofchoices, tr.listofchoices, td.listofchoices {
     	line-height: 18px;
     }
     
    -tr.listofchoices {
    -    height: 42px;	
    -}
     .listofchoicesdesc {
     	color: #999 !important;
     }
     .blinkwait {
     	font-weight: bold;
    -	text-decoration:blink !important;	
    +	text-decoration:blink !important;
     }
     
     .installchoices table tr td  {
    @@ -230,7 +227,7 @@ tr.listofchoices {
     div.ok {
     	color: #114466;
     }
    -font.ok {
    +span.ok {
     	color: #114466;
     }
     
    @@ -238,7 +235,7 @@ font.ok {
     div.warning {
     	color: #777711;
     }
    -font.warning {
    +span.warning {
     	color: #777711;
     }
     
    @@ -249,7 +246,7 @@ div.error {
     	padding: 0.2em 0.2em 0.2em 0;
     	margin: 0.5em 0 0.5em 0;
     }
    -font.error {
    +span.error {
     	color: #550000;
     	font-weight: bold;
     }
    diff --git a/htdocs/install/doctemplates/shipment/index.html b/htdocs/install/doctemplates/shipments/index.html
    similarity index 100%
    rename from htdocs/install/doctemplates/shipment/index.html
    rename to htdocs/install/doctemplates/shipments/index.html
    diff --git a/htdocs/install/doctemplates/shipment/template_shipment.odt b/htdocs/install/doctemplates/shipments/template_shipment.odt
    similarity index 100%
    rename from htdocs/install/doctemplates/shipment/template_shipment.odt
    rename to htdocs/install/doctemplates/shipments/template_shipment.odt
    diff --git a/htdocs/install/doctemplates/supplier_proposal/index.html b/htdocs/install/doctemplates/supplier_proposals/index.html
    similarity index 100%
    rename from htdocs/install/doctemplates/supplier_proposal/index.html
    rename to htdocs/install/doctemplates/supplier_proposals/index.html
    diff --git a/htdocs/install/doctemplates/supplier_proposal/template_supplier_proposal.odt b/htdocs/install/doctemplates/supplier_proposals/template_supplier_proposal.odt
    similarity index 100%
    rename from htdocs/install/doctemplates/supplier_proposal/template_supplier_proposal.odt
    rename to htdocs/install/doctemplates/supplier_proposals/template_supplier_proposal.odt
    diff --git a/htdocs/install/doctemplates/websites/index.html b/htdocs/install/doctemplates/websites/index.html
    new file mode 100644
    index 00000000000..e69de29bb2d
    diff --git a/htdocs/install/doctemplates/websites/website_template-corporate.zip b/htdocs/install/doctemplates/websites/website_template-corporate.zip
    new file mode 100644
    index 00000000000..0c45f47e84f
    Binary files /dev/null and b/htdocs/install/doctemplates/websites/website_template-corporate.zip differ
    diff --git a/htdocs/install/fileconf.php b/htdocs/install/fileconf.php
    index b0affb2218a..5fb832ab8a0 100644
    --- a/htdocs/install/fileconf.php
    +++ b/htdocs/install/fileconf.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2012  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
      * Copyright (C) 2004       Sebastien DiCintio      <sdicintio@ressource-toi.org>
    - * Copyright (C) 2005-2011  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2016       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
     /**
      *       \file       htdocs/install/fileconf.php
      *       \ingroup    install
    - *       \brief      Ask all informations required to build Dolibarr htdocs/conf/conf.php file (will be wrote on disk on next page step1)
    + *       \brief      Ask all information required to build Dolibarr htdocs/conf/conf.php file (will be written to disk on next page step1)
      */
     
     include_once 'inc.php';
    @@ -36,10 +36,9 @@ $err=0;
     $setuplang=GETPOST("selectlang",'',3)?GETPOST("selectlang",'',3):(isset($_GET["lang"])?$_GET["lang"]:'auto');
     $langs->setDefaultLang($setuplang);
     
    -$langs->load("install");
    -$langs->load("errors");
    +$langs->loadLangs(array("install", "errors"));
     
    -dolibarr_install_syslog("--- fileconf: entering fileconf.php page");
    +dolibarr_install_syslog("- fileconf: entering fileconf.php page");
     
     // You can force preselected values of the config step of Dolibarr by adding a file
     // install.forced.php into directory htdocs/install (This is the case with some wizard
    @@ -56,7 +55,7 @@ if (! isset($force_install_databaselogin))		$force_install_databaselogin='';
     if (! isset($force_install_databasepass))		$force_install_databasepass='';
     if (! isset($force_install_databaserootlogin))	$force_install_databaserootlogin='';
     if (! isset($force_install_databaserootpass))	$force_install_databaserootpass='';
    -// Now we load forced value from install.forced.php file.
    +// Now we load forced values from install.forced.php file.
     $useforcedwizard=false;
     $forcedfile="./install.forced.php";
     if ($conffile == "/etc/dolibarr/conf.php") $forcedfile="/etc/dolibarr/install.forced.php";	// Must be after inc.php
    @@ -71,7 +70,7 @@ if (@file_exists($forcedfile)) {
      *	View
      */
     
    -session_start();	// To be able to keep info into session (used for not loosing pass during navigation. pass must not transit throug parmaeters)
    +session_start();	// To be able to keep info into session (used for not losing pass during navigation. pass must not transit through parmaeters)
     
     pHeader($langs->trans("ConfigurationFile"), "step1", "set", "", (empty($force_dolibarr_js_JQUERY)?'':$force_dolibarr_js_JQUERY.'/'), 'main-inside-bis');
     
    @@ -80,7 +79,7 @@ if (! is_writable($conffile))
     {
         print $langs->trans("ConfFileIsNotWritable", $conffiletoshow);
     	dolibarr_install_syslog("fileconf: config file is not writable", LOG_WARNING);
    -	dolibarr_install_syslog("--- fileconf: end");
    +    dolibarr_install_syslog("- fileconf: end");
         pFooter(1,$setuplang,'jscheckparam');
         exit;
     }
    @@ -117,20 +116,18 @@ if (! empty($force_install_message))
     
     	<!-- Documents root $dolibarr_main_document_root -->
     	<tr>
    -	<?php
    -	print '<td class="tdtop label"><b>';
    -	print $langs->trans("WebPagesDirectory");
    -	print "</b></td>";
    -
    +        <td class="label"><label for="main_dir"><b><?php print $langs->trans("WebPagesDirectory"); ?></b></label></td>
    +<?php
     	if (empty($dolibarr_main_url_root)) {
     		$dolibarr_main_document_root = detect_dolibarr_main_document_root();
     	}
     	?>
    -		<td class="label tdtop">
    +		<td class="label">
     			<input type="text"
     			       class="minwidth300"
    -			       value="<?php print $dolibarr_main_document_root ?>"
    -			       name="main_dir"
    +                   id="main_dir"
    +                   name="main_dir"
    +                   value="<?php print $dolibarr_main_document_root ?>"
     				<?php if (!empty($force_install_noedit)) {
     					print ' disabled';
     				} ?>
    @@ -149,19 +146,19 @@ if (! empty($force_install_message))
     
     	<!-- Documents URL $dolibarr_main_data_root -->
     	<tr>
    -		<td class="tdtop label"><b> <?php print $langs->trans("DocumentsDirectory"); ?></b>
    -		</td>
    +		<td class="label"><label for="main_data_dir"><b><?php print $langs->trans("DocumentsDirectory"); ?></b></label></td>
     		<?php
     		$dolibarr_main_data_root = @$force_install_main_data_root;
     		if (empty($dolibarr_main_data_root)) {
     			$dolibarr_main_data_root = detect_dolibarr_main_data_root($dolibarr_main_document_root);
     		}
     		?>
    -		<td class="label tdtop">
    +		<td class="label">
     			<input type="text"
     			       class="minwidth300"
    -			       value="<?php print $dolibarr_main_data_root ?>"
    -			       name="main_data_dir"
    +                   id="main_data_dir"
    +                   name="main_data_dir"
    +                   value="<?php print $dolibarr_main_data_root ?>"
     				<?php if (!empty($force_install_noedit)) {
     					print ' disabled';
     				} ?>
    @@ -174,7 +171,7 @@ if (! empty($force_install_message))
     		?>
     		<ul>
     			<li>/var/lib/dolibarr/documents</li>
    -			<li>C:/My Documents/dolibarr/</li>
    +			<li>C:/My Documents/dolibarr/documents</li>
     		</ul>
     		</td>
     	</tr>
    @@ -186,12 +183,13 @@ if (! empty($force_install_message))
     	}
     	?>
     	<tr>
    -		<td class="tdtop label"><b> <?php echo $langs->trans("URLRoot"); ?></b>
    +        <td class="label"><label for="main_url"><b><?php echo $langs->trans("URLRoot"); ?></b></label>
     		</td>
    -		<td class="tdtop label">
    +		<td class="label">
     			<input type="text"
     			       class="minwidth300"
    -			       name="main_url"
    +			       id="main_url"
    +                   name="main_url"
     			       value="<?php print $dolibarr_main_url_root; ?> "
     				<?php if (!empty($force_install_noedit)) {
     					print ' disabled';
    @@ -202,6 +200,7 @@ if (! empty($force_install_message))
     		<ul>
     			<li>http://localhost/</li>
     			<li>http://www.myserver.com:8180/dolibarr</li>
    +			<li>https://www.myvirtualfordolibarr.com/</li>
     		</ul>
     		</td>
     	</tr>
    @@ -210,10 +209,11 @@ if (! empty($force_install_message))
     	if (! empty($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on') {   // Enabled if the installation process is "https://"
     	    ?>
     	<tr>
    -		<td class="tdtop label"><?php echo $langs->trans("ForceHttps"); ?></td>
    -		<td class="label tdtop">
    -			<input type="checkbox"
    -			       name="main_force_https"
    +                    <td class="label"><label for="main_force_https"><?php echo $langs->trans("ForceHttps"); ?></label></td>
    +                    <td class="label">
    +                        <input type="checkbox"
    +                               id="main_force_https"
    +                               name="main_force_https"
     				<?php if (!empty($force_install_mainforcehttps)) {
     					print ' checked';
     				} ?>
    @@ -239,11 +239,11 @@ if (! empty($force_install_message))
     	</tr>
     
     	<tr>
    -		<td class="label tdtop"><b> <?php echo $langs->trans("DatabaseName"); ?>
    -		</b></td>
    -		<td class="label tdtop">
    -			<input type="text" id="db_name"
    -			       name="db_name"
    +        <td class="label"><label for="db_name"><b><?php echo $langs->trans("DatabaseName"); ?></b></label></td>
    +		<td class="label">
    +			<input type="text"
    +			       id="db_name"
    +                   name="db_name"
     			       value="<?php echo (!empty($dolibarr_main_db_name)) ? $dolibarr_main_db_name : ($force_install_database ? $force_install_database : 'dolibarr'); ?>"
     				<?php if ($force_install_noedit == 2 && $force_install_database !== null) {
     					print ' disabled';
    @@ -262,8 +262,7 @@ if (! empty($force_install_message))
     	?>
     	<tr>
     		<!-- Driver type -->
    -		<td class="tdtop label"><b> <?php echo $langs->trans("DriverType"); ?>
    -		</b></td>
    +		<td class="label"><label for="db_type"><b><?php echo $langs->trans("DriverType"); ?></b></label></td>
     
     		<td class="label">
     		<?php
    @@ -338,10 +337,10 @@ if (! empty($force_install_message))
     	</tr>
     
     	<tr class="hidesqlite">
    -		<td class="tdtop label"><b> <?php echo $langs->trans("DatabaseServer"); ?>
    -		</b></td>
    -		<td class="tdtop label">
    +		<td class="label"><label for="db_host"><b><?php echo $langs->trans("DatabaseServer"); ?></b></label></td>
    +		<td class="label">
     			<input type="text"
    +                   id="db_host"
     			       name="db_host"
     			       value="<?php print (!empty($force_install_dbserver) ? $force_install_dbserver : (!empty($dolibarr_main_db_host) ? $dolibarr_main_db_host : 'localhost')); ?>"
     				<?php if ($force_install_noedit == 2 && $force_install_dbserver !== null) {
    @@ -355,8 +354,8 @@ if (! empty($force_install_message))
     	</tr>
     
     	<tr class="hidesqlite">
    -		<td class="tdtop label"><?php echo $langs->trans("Port"); ?></td>
    -		<td class="tdtop label">
    +        <td class="label"><label for="db_port"><?php echo $langs->trans("Port"); ?></label></td>
    +		<td class="label">
     			<input type="text"
     			       name="db_port"
     			       id="db_port"
    @@ -372,10 +371,10 @@ if (! empty($force_install_message))
     	</tr>
     
     	<tr class="hidesqlite">
    -		<td class="label tdtop"><?php echo $langs->trans("DatabasePrefix"); ?>
    -		</td>
    -		<td class="label tdtop">
    -			<input type="text" id="db_prefix"
    +        <td class="label"><label for="db_prefix"><?php echo $langs->trans("DatabasePrefix"); ?></label></td>
    +		<td class="label">
    +			<input type="text"
    +                   id="db_prefix"
     			       name="db_prefix"
     			       value="<?php echo(!empty($force_install_prefix) ? $force_install_prefix : (!empty($dolibarr_main_db_prefix) ? $dolibarr_main_db_prefix : 'llx_')); ?>"
     				<?php if ($force_install_noedit == 2 && $force_install_prefix !== null) {
    @@ -383,13 +382,12 @@ if (! empty($force_install_message))
     				} ?>
     			>
     		</td>
    -		<td class="comment"><?php echo $langs->trans("DatabasePrefix"); ?></td>
    +		<td class="comment"><?php echo $langs->trans("DatabasePrefixDescription"); ?></td>
     	</tr>
     
     	<tr class="hidesqlite">
    -		<td class="label tdtop"><?php echo $langs->trans("CreateDatabase"); ?>
    -		</td>
    -		<td class="label tdtop">
    +        <td class="label"><label for="db_create_database"><?php echo $langs->trans("CreateDatabase"); ?></label></td>
    +		<td class="label">
     			<input type="checkbox"
     			       id="db_create_database"
     			       name="db_create_database"
    @@ -406,10 +404,10 @@ if (! empty($force_install_message))
     	</tr>
     
     	<tr class="hidesqlite">
    -		<td class="label tdtop"><b><?php echo $langs->trans("Login"); ?></b>
    -		</td>
    -		<td class="label tdtop">
    -			<input type="text" id="db_user"
    +		<td class="label"><label for="db_user"><b><?php echo $langs->trans("Login"); ?></b></label></td>
    +		<td class="label">
    +			<input type="text"
    +                   id="db_user"
     			       name="db_user"
     			       value="<?php print (!empty($force_install_databaselogin)) ? $force_install_databaselogin : $dolibarr_main_db_user; ?>"
     				<?php if ($force_install_noedit == 2 && $force_install_databaselogin !== null) {
    @@ -421,10 +419,10 @@ if (! empty($force_install_message))
     	</tr>
     
     	<tr class="hidesqlite">
    -		<td class="label tdtop"><b><?php echo $langs->trans("Password"); ?></b>
    -		</td>
    -		<td class="label tdtop">
    -			<input type="password" id="db_pass" autocomplete="off"
    +		<td class="label"><label for="db_pass"><b><?php echo $langs->trans("Password"); ?></b></label></td>
    +		<td class="label">
    +			<input type="password"
    +                   id="db_pass" autocomplete="off"
     			       name="db_pass"
     			       value="<?php
     			       // If $force_install_databasepass is on, we don't want to set password, we just show '***'. Real value will be extracted from the forced install file at step1.
    @@ -443,11 +441,11 @@ if (! empty($force_install_message))
     	</tr>
     
     	<tr class="hidesqlite">
    -		<td class="label tdtop"><?php echo $langs->trans("CreateUser"); ?>
    -		</td>
    -		<td class="label tdtop">
    +		<td class="label"><label for="db_create_user"><?php echo $langs->trans("CreateUser"); ?></label></td>
    +		<td class="label">
     			<input type="checkbox"
    -			       id="db_create_user" name="db_create_user"
    +			       id="db_create_user"
    +                   name="db_create_user"
     				<?php if (!empty($force_install_createuser)) {
     					print ' checked';
     				} ?>
    @@ -473,8 +471,8 @@ if (! empty($force_install_message))
     	</tr>
     
     	<tr class="hidesqlite hideroot">
    -		<td class="label tdtop"><b><?php echo $langs->trans("Login"); ?></b></td>
    -		<td class="label tdtop">
    +		<td class="label"><label for="db_user_root"><b><?php echo $langs->trans("Login"); ?></b></label></td>
    +		<td class="label">
     			<input type="text"
     			       id="db_user_root"
     			       name="db_user_root"
    @@ -497,28 +495,27 @@ if (! empty($force_install_message))
     
     	</tr>
     	<tr class="hidesqlite hideroot">
    -		<td class="label tdtop"><b><?php echo $langs->trans("Password"); ?></b>
    -		</td>
    -		<td class="label tdtop">
    +		<td class="label"><label for="db_pass_root"><b><?php echo $langs->trans("Password"); ?></b></label></td>
    +		<td class="label">
     			<input type="password"
     			       autocomplete="off"
     			       id="db_pass_root"
     			       name="db_pass_root"
     			       class="needroot"
     			       value="<?php
    -			       // If $force_install_databaserootpass is on, we don't want to set password here, we just show '***'. Real value will be extracted from the forced install file at step1.
    -			       $autofill = ((!empty($force_install_databaserootpass)) ? str_pad('', strlen($force_install_databaserootpass), '*') : @$db_pass_root);
    -			       if (!empty($dolibarr_main_prod)) {
    -				       $autofill = '';
    -			       }
    -				   // Do not autofill password if instance is a production instance
    -			       if (!empty($_SERVER["SERVER_NAME"]) && !in_array($_SERVER["SERVER_NAME"],
    -					       array('127.0.0.1', 'localhost', 'localhostgit'))
    -			       ) {
    -				       $autofill = '';
    -			       }    // Do not autofill password for remote access
    -			       print dol_escape_htmltag($autofill);
    -			       ?>"
    +			        // If $force_install_databaserootpass is on, we don't want to set password here, we just show '***'. Real value will be extracted from the forced install file at step1.
    +			        $autofill = ((!empty($force_install_databaserootpass)) ? str_pad('', strlen($force_install_databaserootpass), '*') : @$db_pass_root);
    +			        if (!empty($dolibarr_main_prod)) {
    +				        $autofill = '';
    +			        }
    +				    // Do not autofill password if instance is a production instance
    +			        if (!empty($_SERVER["SERVER_NAME"]) && !in_array($_SERVER["SERVER_NAME"],
    +					    array('127.0.0.1', 'localhost', 'localhostgit'))
    +			        ) {
    +				        $autofill = '';
    +			        }    // Do not autofill password for remote access
    +			        print dol_escape_htmltag($autofill);
    +			        ?>"
     				<?php if ($force_install_noedit > 0 && ! empty($force_install_databaserootpass)) {
     					print ' disabled';     // May be removed by javascript
     				} ?>
    @@ -648,5 +645,5 @@ function jscheckparam()
     
     // $db->close();	Not database connexion yet
     
    -dolibarr_install_syslog("--- fileconf: end");
    +dolibarr_install_syslog("- fileconf: end");
     pFooter($err,$setuplang,'jscheckparam');
    diff --git a/htdocs/install/inc.php b/htdocs/install/inc.php
    index 0a2a6866f26..c1581d37392 100644
    --- a/htdocs/install/inc.php
    +++ b/htdocs/install/inc.php
    @@ -149,7 +149,7 @@ if ($suburi == '/') $suburi = '';   // If $suburi is /, it is now ''
     define('DOL_URL_ROOT', $suburi);    // URL relative root ('', '/dolibarr', ...)
     
     
    -if (empty($conf->file->character_set_client))      	$conf->file->character_set_client="UTF-8";
    +if (empty($conf->file->character_set_client))      	$conf->file->character_set_client="utf-8";
     if (empty($conf->db->character_set))  				$conf->db->character_set='utf8';
     if (empty($conf->db->dolibarr_main_db_collation))  	$conf->db->dolibarr_main_db_collation='utf8_unicode_ci';
     if (empty($conf->db->dolibarr_main_db_encryption)) 	$conf->db->dolibarr_main_db_encryption=0;
    @@ -566,7 +566,7 @@ function detect_dolibarr_main_url_root()
     		$dolibarr_main_url_root = $_SERVER["SERVER_URL"] . $_SERVER["DOCUMENT_URI"];
     	} // If SCRIPT_URI, SERVER_URL, DOCUMENT_URI not defined (Ie: Apache 2.0.44 for Windows)
     	else {
    -		$proto = 'http';
    +        $proto = ( (!empty($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on') || $_SERVER['SERVER_PORT'] == 443) ? 'https' : 'http';
     		if (!empty($_SERVER["HTTP_HOST"])) {
     			$serverport = $_SERVER["HTTP_HOST"];
     		} else {
    diff --git a/htdocs/install/index.php b/htdocs/install/index.php
    index 82dcd87b030..46e60be52ec 100644
    --- a/htdocs/install/index.php
    +++ b/htdocs/install/index.php
    @@ -55,7 +55,7 @@ print '<br><br><div class="center">';
     print '<table>';
     
     print '<tr>';
    -print '<td>'.$langs->trans("DefaultLanguage").' : </td><td align="left">';
    +print '<td>'.$langs->trans("DefaultLanguage").' : </td><td>';
     print $formadmin->select_language('auto','selectlang',1,0,0,1);
     print '</td>';
     print '</tr>';
    diff --git a/htdocs/install/lib/repair.lib.php b/htdocs/install/lib/repair.lib.php
    index 5e81b15ce10..43a6d2bce27 100644
    --- a/htdocs/install/lib/repair.lib.php
    +++ b/htdocs/install/lib/repair.lib.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012 Regis Houssin	<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012 Regis Houssin	<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -136,7 +136,6 @@ function clean_data_ecm_directories()
     				$resqlupdate=$db->query($sqlupdate);
     				if (! $resqlupdate) dol_print_error($db,'Failed to update');
     			}
    -
     		}
     	}
     	else dol_print_error($db,'Failed to run request');
    diff --git a/htdocs/install/mysql/data/llx_00_c_country.sql b/htdocs/install/mysql/data/llx_00_c_country.sql
    index 5db58817dd2..0ea1a55d3d3 100644
    --- a/htdocs/install/mysql/data/llx_00_c_country.sql
    +++ b/htdocs/install/mysql/data/llx_00_c_country.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2014 	   Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
     --
    diff --git a/htdocs/install/mysql/data/llx_10_c_regions.sql b/htdocs/install/mysql/data/llx_10_c_regions.sql
    index f6229dda906..53c9ba22028 100644
    --- a/htdocs/install/mysql/data/llx_10_c_regions.sql
    +++ b/htdocs/install/mysql/data/llx_10_c_regions.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2010-2016 Juanjo Menent        <jmenent@2byte.es>
     -- Copyright (C) 2012      Sebastian Neuwert    <sebastian.neuwert@modula71.de>
    diff --git a/htdocs/install/mysql/data/llx_20_c_departements.sql b/htdocs/install/mysql/data/llx_20_c_departements.sql
    index 541aba8a30d..4ca943a076f 100644
    --- a/htdocs/install/mysql/data/llx_20_c_departements.sql
    +++ b/htdocs/install/mysql/data/llx_20_c_departements.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2010-2016 Juanjo Menent        <jmenent@2byte.es>
     -- Copyright (C) 2012 	   Sebastian Neuwert    <sebastian.neuwert@modula71.de>
    diff --git a/htdocs/install/mysql/data/llx_accounting_abc.sql b/htdocs/install/mysql/data/llx_accounting_abc.sql
    index 9e933816ac5..6e4c62d8228 100644
    --- a/htdocs/install/mysql/data/llx_accounting_abc.sql
    +++ b/htdocs/install/mysql/data/llx_accounting_abc.sql
    @@ -3,10 +3,11 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007      Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2011-2018 Alexandre Spangaro   <aspangaro@zendsi.com>
     -- Copyright (C) 2015-2017 Juanjo Menent        <jmenent@2byte.es>
    +-- Copyright (C) 2018      Abbes bahfir         <dolipar@dolipar.org>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    @@ -29,13 +30,13 @@
     --
     
     
    -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('VT', 'ACCOUNTING_SELL_JOURNAL',           2, 1, 1);
    -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('AC', 'ACCOUNTING_PURCHASE_JOURNAL',       3, 1, 1);
    -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('BQ', 'FinanceJournal',           4, 1, 1);
    -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('OD', 'ACCOUNTING_MISCELLANEOUS_JOURNAL',          1, 1, 1);
    -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('AN', 'ACCOUNTING_HAS_NEW_JOURNAL',        9, 1, 1);
    -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('ER', 'ExpenseReportsJournal', 5, 1, 1);
    -INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('INV', 'InventoryJournal'    , 8, 1, 1);
    +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('VT',  'ACCOUNTING_SELL_JOURNAL',          2, 1, 1);
    +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('AC',  'ACCOUNTING_PURCHASE_JOURNAL',      3, 1, 1);
    +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('BQ',  'FinanceJournal',                   4, 1, 1);
    +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('OD',  'ACCOUNTING_MISCELLANEOUS_JOURNAL', 1, 1, 1);
    +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('AN',  'ACCOUNTING_HAS_NEW_JOURNAL',       9, 1, 1);
    +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('ER',  'ExpenseReportsJournal',            5, 1, 1);
    +INSERT INTO llx_accounting_journal (code, label, nature, active, entity) VALUES ('INV', 'InventoryJournal',                 8, 1, 1);
     
     
     -- Description of chart of account FR PCG99-ABREGE
    @@ -126,3 +127,5 @@ INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUE
     -- Description of chart of account RO RO-BASE
     INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUES (  188, 'RO-BASE', 'Plan de conturi romanesc', 1);
     
    +-- Description of chart of account DZ NSCF
    +INSERT INTO llx_accounting_system (fk_country, pcg_version, label, active) VALUES (  13, 'NSCF', 'Nouveau système comptable financier', 1);
    diff --git a/htdocs/install/mysql/data/llx_accounting_account_be.sql b/htdocs/install/mysql/data/llx_accounting_account_be.sql
    index 76195e8318f..610913ed36e 100644
    --- a/htdocs/install/mysql/data/llx_accounting_account_be.sql
    +++ b/htdocs/install/mysql/data/llx_accounting_account_be.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2011-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
     --
    diff --git a/htdocs/install/mysql/data/llx_accounting_account_cl.sql b/htdocs/install/mysql/data/llx_accounting_account_cl.sql
    index 76fe278dd0e..3029bc9350d 100644
    --- a/htdocs/install/mysql/data/llx_accounting_account_cl.sql
    +++ b/htdocs/install/mysql/data/llx_accounting_account_cl.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2011-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
     -- Copyright (C) 2017      Juanjo Menent        <jmenent@2byte.es>
    diff --git a/htdocs/install/mysql/data/llx_accounting_account_dk.sql b/htdocs/install/mysql/data/llx_accounting_account_dk.sql
    index 7f707b4c444..f7b3ea7e519 100644
    --- a/htdocs/install/mysql/data/llx_accounting_account_dk.sql
    +++ b/htdocs/install/mysql/data/llx_accounting_account_dk.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2011-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
     --
    diff --git a/htdocs/install/mysql/data/llx_accounting_account_dz.sql b/htdocs/install/mysql/data/llx_accounting_account_dz.sql
    new file mode 100644
    index 00000000000..bdb36303f3a
    --- /dev/null
    +++ b/htdocs/install/mysql/data/llx_accounting_account_dz.sql
    @@ -0,0 +1,838 @@
    +-- Copyright (C) 2018 Abbes Bahfir         <dolipar@dolipar.org>
    +--
    +-- This program is free software; you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation; either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program. If not, see <http://www.gnu.org/licenses/>.
    +--
    +--
    +
    +--
    +-- Ne pas placer de commentaire en fin de ligne, ce fichier est parsé lors
    +-- de l'install et tous les sigles '--' sont supprimés.
    +--
    +
    +-- Descriptif du système comptable financier DZ NSCF
    +-- ID 15000 - 15811
    +-- ADD 1300000 to rowid # Do no remove this comment --
    +
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (17000,'NSCF','CAPIT','XXXXXX','1',0,'Comptes de capitaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15001,'NSCF','CAPIT','XXXXXX','10',17000,'Capital, réserves et assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15002,'NSCF','CAPIT','XXXXXX','101',15001,'Capital émis','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15003,'NSCF','CAPIT','XXXXXX','1011',15002,'Capital souscrit, non appelé','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15004,'NSCF','CAPIT','XXXXXX','1012',15002,'Capital souscrit, appelé, non versé','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15005,'NSCF','CAPIT','XXXXXX','1013',15002,'Capital souscrit, appelé, versé','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15006,'NSCF','CAPIT','XXXXXX','10131',15005,'Capital non amorti','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15007,'NSCF','CAPIT','XXXXXX','10132',15005,'Capital amorti','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15008,'NSCF','CAPIT','XXXXXX','1018',15002,'Capital souscrit, soumis à des réglementations particulières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15009,'NSCF','CAPIT','XXXXXX','103',15001,'Primes liées au capital social','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15010,'NSCF','CAPIT','XXXXXX','1031',15009,'Primes d''émission','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15011,'NSCF','CAPIT','XXXXXX','1032',15009,'Primes de fusion','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15012,'NSCF','CAPIT','XXXXXX','1033',15009,'Primes d''apport','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15013,'NSCF','CAPIT','XXXXXX','1034',15009,'Primes de conversion d''obligations en actions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15014,'NSCF','CAPIT','XXXXXX','104',15001,'Ecart d''évaluation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15015,'NSCF','CAPIT','XXXXXX','105',15001,'Ecart de réévaluation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15016,'NSCF','CAPIT','XXXXXX','1050',15015,'Ecart de réévaluation : Immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15017,'NSCF','CAPIT','XXXXXX','10503',15016,'Ecart de réévaluation : Frais de recherche et de développement immobilisés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15018,'NSCF','CAPIT','XXXXXX','10504',15016,'Ecart de réévaluation : Logiciels informatiques et assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15019,'NSCF','CAPIT','XXXXXX','10505',15016,'Ecart de réévaluation : Concessions et droits similaires, brevets, licences et marques','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15020,'NSCF','CAPIT','XXXXXX','10507',15016,'Ecarts de réévaluation : Fonds commercial – goodwill','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15021,'NSCF','CAPIT','XXXXXX','10508',15016,'Ecart de réévaluation : Immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15022,'NSCF','CAPIT','XXXXXX','1051',15015,'Ecart de réévaluation :Immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15023,'NSCF','CAPIT','XXXXXX','10511',15022,'Ecart de réévaluation : Terrains','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15024,'NSCF','CAPIT','XXXXXX','10512',15022,'Ecart de réévaluation : Agencements et  aménagements de terrains','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15025,'NSCF','CAPIT','XXXXXX','10513',15022,'Ecart de réévaluation : Constructions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15026,'NSCF','CAPIT','XXXXXX','10515',15022,'Ecarts de réévaluation : Installations techniques','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15027,'NSCF','CAPIT','XXXXXX','10518',15022,'Ecart de réévaluation : Autres Immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15028,'NSCF','CAPIT','XXXXXX','1052',15015,'Ecart de réévaluation sur immobilisations financières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15029,'NSCF','CAPIT','XXXXXX','10526',15028,'Ecart de réévaluation : Titres de filiale','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15030,'NSCF','CAPIT','XXXXXX','10527',15028,'Ecart de réévaluation : Autres immobilisations financières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15031,'NSCF','CAPIT','XXXXXX','106',15001,'Réserves','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15032,'NSCF','CAPIT','XXXXXX','1061',15031,'Réserve légale','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15033,'NSCF','CAPIT','XXXXXX','1062',15031,'Réserve statutaire','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15034,'NSCF','CAPIT','XXXXXX','1063',15031,'Réserve ordinaire','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15035,'NSCF','CAPIT','XXXXXX','1064',15031,'Réserve réglementée','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15036,'NSCF','CAPIT','XXXXXX','10641',15035,'Réserve réglementée proprement dits','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15037,'NSCF','CAPIT','XXXXXX','10642',15035,'Plus-values nettes à long terme','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15038,'NSCF','CAPIT','XXXXXX','1068',15031,'Autres réserves','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15039,'NSCF','CAPIT','XXXXXX','107',15001,'Ecart d''équivalence','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15040,'NSCF','CAPIT','XXXXXX','108',15001,'Compte de l''exploitant','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15041,'NSCF','CAPIT','XXXXXX','109',15001,'Capital souscrit - non appelé (Solde débiteur à l''actif du bilan)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15042,'NSCF','CAPIT','XXXXXX','11',17000,'Report à nouveau (solde créditeur ou débiteur)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15043,'NSCF','CAPIT','XXXXXX','110',15042,'Report à nouveau (solde créditeur)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15044,'NSCF','CAPIT','XXXXXX','119',15042,'Report à nouveau (solde débiteur)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15045,'NSCF','CAPIT','XXXXXX','12',17000,'Résultat de l''exercice (bénéfice ou perte)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15046,'NSCF','CAPIT','XXXXXX','120',15045,'Résultat de l''exercice (bénéfice)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15047,'NSCF','CAPIT','XXXXXX','129',15045,'Résultat de l''exercice (perte)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15048,'NSCF','CAPIT','XXXXXX','13',17000,'Produits et charges différés – hors cycle d''exploitation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15049,'NSCF','CAPIT','XXXXXX','131',15048,'Subventions d''équipements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15050,'NSCF','CAPIT','XXXXXX','1312',15049,'Subventions d''équipements – Transfert gratuit d''immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15051,'NSCF','CAPIT','XXXXXX','1314',15049,'Subventions d''équipements – Financement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15052,'NSCF','CAPIT','XXXXXX','1319',15049,'Subventions d''investissement inscrites au compte de résultat','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15053,'NSCF','CAPIT','XXXXXX','132',15048,'Autres subventions d''investissements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15054,'NSCF','CAPIT','XXXXXX','133',15048,'Impôts différés actif','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15055,'NSCF','CAPIT','XXXXXX','134',15048,'Impôts différés passif','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15056,'NSCF','CAPIT','XXXXXX','138',15048,'Autres produits et charges différés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15057,'NSCF','CAPIT','XXXXXX','15',17000,'Provisions pour charges - passifs non courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15058,'NSCF','CAPIT','XXXXXX','153',15057,'Provisions pour pensions et obligations similaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15059,'NSCF','CAPIT','XXXXXX','155',15057,'Provisions pour impôts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15060,'NSCF','CAPIT','XXXXXX','156',15057,'Provisions pour renouvellement des immobilisations en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15061,'NSCF','CAPIT','XXXXXX','1560',15060,'Provisions pour renouvellement d''immobilisation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15062,'NSCF','CAPIT','XXXXXX','1562',15060,'Provisions pour renouvellement de gisements miniers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15063,'NSCF','CAPIT','XXXXXX','158',15057,'Autres provisions pour charges – passifs non courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15064,'NSCF','CAPIT','XXXXXX','1581',15063,'Provisions réglementées relatives aux immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15065,'NSCF','CAPIT','XXXXXX','1583',15063,'Provisions pour risques environnementaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15066,'NSCF','CAPIT','XXXXXX','16',17000,'Emprunts et dettes assimilées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15067,'NSCF','CAPIT','XXXXXX','161',15066,'Titres participatifs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15068,'NSCF','CAPIT','XXXXXX','162',15066,'Emprunts obligataires convertibles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15069,'NSCF','CAPIT','XXXXXX','163',15066,'Autres emprunts obligataires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15070,'NSCF','CAPIT','XXXXXX','164',15066,'Emprunts auprès des établissements de crédit','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15071,'NSCF','CAPIT','XXXXXX','165',15066,'Dépôts et cautionnements reçus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15072,'NSCF','CAPIT','XXXXXX','1651',15071,'Dépôts reçus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15073,'NSCF','CAPIT','XXXXXX','1655',15071,'Cautionnements reçus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15074,'NSCF','CAPIT','XXXXXX','167',15066,'Dettes sur contrat de location - financement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15075,'NSCF','CAPIT','XXXXXX','168',15066,'Autres emprunts et dettes assimilées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15076,'NSCF','CAPIT','XXXXXX','1681',15075,'Autres emprunts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15077,'NSCF','CAPIT','XXXXXX','1682',15075,'Emprunts auprès d''organismes internationaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15078,'NSCF','CAPIT','XXXXXX','1688',15075,'Intérêts courus sur emprunts et dettes assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15079,'NSCF','CAPIT','XXXXXX','169',15066,'Primes de remboursement des obligations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15080,'NSCF','CAPIT','XXXXXX','17',17000,'Dettes rattachées à des participations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15081,'NSCF','CAPIT','XXXXXX','171',15080,'Dettes rattachées à des participations groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15082,'NSCF','CAPIT','XXXXXX','172',15080,'Dettes rattachées à des participations hors groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15083,'NSCF','CAPIT','XXXXXX','173',15080,'Dettes rattachées à des sociétés en participation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15084,'NSCF','CAPIT','XXXXXX','1731',15083,'Principal','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15085,'NSCF','CAPIT','XXXXXX','1738',15083,'Intérêts courus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15086,'NSCF','CAPIT','XXXXXX','178',15080,'Autres dettes rattachées à des participations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15087,'NSCF','CAPIT','XXXXXX','18',17000,'Comptes de liaison des établissements et sociétés en participation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15088,'NSCF','CAPIT','XXXXXX','187',15087,'Biens et prestations de services échangés entre établissements (produits)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15089,'NSCF','CAPIT','XXXXXX','188',15087,'Comptes de liaison entre sociétés en participation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15090,'NSCF','IMMO','XXXXXX','2',0,'COMPTES D''IMMOBILISATIONS','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15091,'NSCF','IMMO','XXXXXX','20',15090,'Immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15092,'NSCF','IMMO','XXXXXX','203',15091,'Frais de développement immobilisables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15093,'NSCF','IMMO','XXXXXX','204',15091,'Logiciels informatiques et assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15094,'NSCF','IMMO','XXXXXX','205',15091,'Concessions et droits similaires, brevets, licences, marques','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15095,'NSCF','IMMO','XXXXXX','2051',15094,'Logiciels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15096,'NSCF','IMMO','XXXXXX','2052',15094,'Brevets','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15097,'NSCF','IMMO','XXXXXX','2053',15094,'Marques','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15098,'NSCF','IMMO','XXXXXX','2056',15094,'Licence','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15099,'NSCF','IMMO','XXXXXX','2058',15094,'Concession - autres droits similaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15100,'NSCF','IMMO','XXXXXX','207',15091,'Ecart d''acquisition - goodwill','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15101,'NSCF','IMMO','XXXXXX','208',15091,'Autres immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15102,'NSCF','IMMO','XXXXXX','21',15090,'Immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15103,'NSCF','IMMO','XXXXXX','211',15102,'Terrains','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15104,'NSCF','IMMO','XXXXXX','2110',15103,'Terrains de construction et chantiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15105,'NSCF','IMMO','XXXXXX','2111',15103,'Terrains nus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15106,'NSCF','IMMO','XXXXXX','2112',15103,'Terrains aménagés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15107,'NSCF','IMMO','XXXXXX','2114',15103,'Terrains bâtis','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15108,'NSCF','IMMO','XXXXXX','2115',15103,'Carrières et gisements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15109,'NSCF','IMMO','XXXXXX','2118',15103,'Autres terrains','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15110,'NSCF','IMMO','XXXXXX','212',15102,'Agencements et aménagements de terrains (même ventilation que celle du compte 211)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15111,'NSCF','IMMO','XXXXXX','213',15102,'Constructions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15112,'NSCF','IMMO','XXXXXX','2131',15111,'Bâtiments','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15113,'NSCF','IMMO','XXXXXX','21311',15112,'Bâtiments industriels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15114,'NSCF','IMMO','XXXXXX','21312',15112,'Bâtiments administratifs et commerciaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15115,'NSCF','IMMO','XXXXXX','21318',15112,'Autres ensembles immobiliers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15116,'NSCF','IMMO','XXXXXX','213181',15115,'Affectés aux opérations professionnelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15117,'NSCF','IMMO','XXXXXX','213188',15115,'Affectés aux opérations non professionnelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15118,'NSCF','IMMO','XXXXXX','2135',15111,'Installations générales - agencements - aménagements des constructions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15119,'NSCF','IMMO','XXXXXX','21351',15118,'Installation d''eau','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15120,'NSCF','IMMO','XXXXXX','21352',15118,'Installation d''électricité','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15121,'NSCF','IMMO','XXXXXX','21353',15118,'Installation de gaz','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15122,'NSCF','IMMO','XXXXXX','21354',15118,'Installation de vapeur','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15123,'NSCF','IMMO','XXXXXX','21355',15118,'Installation de protection et de sécurité','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15124,'NSCF','IMMO','XXXXXX','21356',15118,'Installation de télécommunication','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15125,'NSCF','IMMO','XXXXXX','21357',15118,'Installation d''aération, chauffage et climatisation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15126,'NSCF','IMMO','XXXXXX','21358',15118,'Autres agencements et installations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15127,'NSCF','IMMO','XXXXXX','2138',15111,'Ouvrages d''infrastructures','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15128,'NSCF','IMMO','XXXXXX','21381',15127,'Voies de terre','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15129,'NSCF','IMMO','XXXXXX','21382',15127,'Voies de fer','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15130,'NSCF','IMMO','XXXXXX','21383',15127,'Voies d''eau','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15131,'NSCF','IMMO','XXXXXX','21384',15127,'Barrages - puits d''eau','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15132,'NSCF','IMMO','XXXXXX','21385',15127,'Pistes d''aérodromes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15133,'NSCF','IMMO','XXXXXX','215',15102,'Installations techniques, matériel et outillage industriels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15134,'NSCF','IMMO','XXXXXX','2151',15133,'Installations complexes spécialisées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15135,'NSCF','IMMO','XXXXXX','2153',15133,'Installations à caractère spécifique','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15136,'NSCF','IMMO','XXXXXX','2154',15133,'Matériel industriel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15137,'NSCF','IMMO','XXXXXX','2155',15133,'Outillage industriel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15138,'NSCF','IMMO','XXXXXX','2157',15133,'Agencements et aménagements des matériels et outillage industriels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15139,'NSCF','IMMO','XXXXXX','218',15102,'Autres immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15140,'NSCF','IMMO','XXXXXX','2181',15139,'Installations générales, agencements, aménagements divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15141,'NSCF','IMMO','XXXXXX','2182',15139,'Matériel de transport','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15142,'NSCF','IMMO','XXXXXX','2183',15139,'Matériel de bureau et matériel informatique','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15143,'NSCF','IMMO','XXXXXX','2184',15139,'Mobilier','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15144,'NSCF','IMMO','XXXXXX','2185',15139,'Cheptel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15145,'NSCF','IMMO','XXXXXX','2186',15139,'Emballages récupérables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15146,'NSCF','IMMO','XXXXXX','22',15090,'Immobilisations mises en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15147,'NSCF','IMMO','XXXXXX','221',15146,'Terrains en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15148,'NSCF','IMMO','XXXXXX','222',15146,'Agencements et aménagements de terrains en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15149,'NSCF','IMMO','XXXXXX','223',15146,'Constructions en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15150,'NSCF','IMMO','XXXXXX','225',15146,'Installations techniques en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15151,'NSCF','IMMO','XXXXXX','228',15146,'Autres immobilisations corporelles en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15152,'NSCF','IMMO','XXXXXX','229',15146,'Droits du concédant','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15153,'NSCF','IMMO','XXXXXX','23',15090,'Immobilisations en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15154,'NSCF','IMMO','XXXXXX','232',15153,'Immobilisations corporelles en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15155,'NSCF','IMMO','XXXXXX','2322',15154,'Agencements et aménagements de Terrains en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15156,'NSCF','IMMO','XXXXXX','2323',15154,'Constructions en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15157,'NSCF','IMMO','XXXXXX','2325',15154,'Installations techniques, matériel et outillage industriels en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15158,'NSCF','IMMO','XXXXXX','2328',15154,'Autres immobilisations corporelles en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15159,'NSCF','IMMO','XXXXXX','237',15153,'Immobilisations incorporelles en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15160,'NSCF','IMMO','XXXXXX','238',15153,'Avances et acomptes versés sur commandes d''immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15161,'NSCF','IMMO','XXXXXX','2382',15160,'Avances et acomptes versés sur commandes d''immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15162,'NSCF','IMMO','XXXXXX','2387',15160,'Avances et acomptes versés sur commandes d''immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15163,'NSCF','IMMO','XXXXXX','26',15090,'Participations et créances rattachées à des participations (entreprises associées)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15164,'NSCF','IMMO','XXXXXX','261',15163,'Titres de filiales','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15165,'NSCF','IMMO','XXXXXX','2611',15164,'Actions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15166,'NSCF','IMMO','XXXXXX','2618',15164,'Autres titres','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15167,'NSCF','IMMO','XXXXXX','262',15163,'Autres titres de participation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15168,'NSCF','IMMO','XXXXXX','265',15163,'Titres de participation évalués par équivalence','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15169,'NSCF','IMMO','XXXXXX','266',15163,'Créances rattachées à des participations groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15170,'NSCF','IMMO','XXXXXX','2661',15169,'Créances liées à des participations groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15171,'NSCF','IMMO','XXXXXX','2665',15169,'Versements représentatifs d''apports non capitalisés (appel de fonds)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15172,'NSCF','IMMO','XXXXXX','2666',15169,'Avances consolidables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15173,'NSCF','IMMO','XXXXXX','2668',15169,'Dividendes à percevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15174,'NSCF','IMMO','XXXXXX','267',15163,'Créances rattachées à des participations hors groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15175,'NSCF','IMMO','XXXXXX','2671',15174,'Créances liées à des participations hors groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15176,'NSCF','IMMO','XXXXXX','2675',15174,'Versements représentatifs d''apports non capitalisés (appel de fonds)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15177,'NSCF','IMMO','XXXXXX','2676',15174,'Avances consolidables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15178,'NSCF','IMMO','XXXXXX','2677',15174,'Autres créances rattachées à des participations hors groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15179,'NSCF','IMMO','XXXXXX','2678',15174,'Dividendes et intérêts à percevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15180,'NSCF','IMMO','XXXXXX','268',15163,'Créances rattachées à des sociétés en participation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15181,'NSCF','IMMO','XXXXXX','2681',15180,'Principal','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15182,'NSCF','IMMO','XXXXXX','2688',15180,'Intérêts courus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15183,'NSCF','IMMO','XXXXXX','269',15163,'Versements restant à effectuer sur titres de participation non libérés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15184,'NSCF','IMMO','XXXXXX','27',15090,'Autres immobilisations financières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15185,'NSCF','IMMO','XXXXXX','271',15184,'Titres immobilisés autres que les titres immobilisés de l''activité de portefeuille','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15186,'NSCF','IMMO','XXXXXX','2711',15185,'Actions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15187,'NSCF','IMMO','XXXXXX','2718',15185,'Autres titres','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15188,'NSCF','IMMO','XXXXXX','272',15184,'Titres représentatifs de droit de créance','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15189,'NSCF','IMMO','XXXXXX','2721',15188,'Obligations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15190,'NSCF','IMMO','XXXXXX','2722',15188,'Bons','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15191,'NSCF','IMMO','XXXXXX','273',15184,'Titres immobilisés de l''activité de portefeuille','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15192,'NSCF','IMMO','XXXXXX','2731',15191,'Actions immobilisées de l''activité de portefeuille','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15193,'NSCF','IMMO','XXXXXX','2732',15191,'Obligations remboursables en actions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15194,'NSCF','IMMO','XXXXXX','2733',15191,'Obligations convertibles en actions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15195,'NSCF','IMMO','XXXXXX','274',15184,'Prêts et créances sur contrat de location – financement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15196,'NSCF','IMMO','XXXXXX','2741',15195,'Prêts participatifs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15197,'NSCF','IMMO','XXXXXX','2742',15195,'Prêts aux associés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15198,'NSCF','IMMO','XXXXXX','2743',15195,'Prêts au personnel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15199,'NSCF','IMMO','XXXXXX','2745',15195,'Créances sur contrat de location - financement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15200,'NSCF','IMMO','XXXXXX','2748',15195,'Autres prêts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15201,'NSCF','IMMO','XXXXXX','275',15184,'Dépôts et cautionnements versés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15202,'NSCF','IMMO','XXXXXX','2751',15201,'Dépôts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15203,'NSCF','IMMO','XXXXXX','2755',15201,'Cautionnements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15204,'NSCF','IMMO','XXXXXX','276',15184,'Autres créances immobilisées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15205,'NSCF','IMMO','XXXXXX','2761',15204,'Créances diverses','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15206,'NSCF','IMMO','XXXXXX','2768',15204,'Intérêts courus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15207,'NSCF','IMMO','XXXXXX','27682',15206,'Autres créances sur titres immobilisés (droit de créance)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15208,'NSCF','IMMO','XXXXXX','27684',15206,'Autres créances sur prêts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15209,'NSCF','IMMO','XXXXXX','27685',15206,'Autres créances sur dépôts et cautionnements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15210,'NSCF','IMMO','XXXXXX','27688',15206,'Autres créances sur créances diverses','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15211,'NSCF','IMMO','XXXXXX','279',15184,'Versements restant à effectuer sur titres immobilisés non libérés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15212,'NSCF','IMMO','XXXXXX','28',15090,'Amortissement des immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15213,'NSCF','IMMO','XXXXXX','280',15212,'Amortissement des immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15214,'NSCF','IMMO','XXXXXX','2803',15213,'Amortissement des frais de recherche et de développement immobilisables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15215,'NSCF','IMMO','XXXXXX','2804',15213,'Amortissement. des logiciels informatiques et assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15216,'NSCF','IMMO','XXXXXX','2805',15213,'Amortissement concessions et droits similaires, brevets, licences, marques.','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15217,'NSCF','IMMO','XXXXXX','2807',15213,'Amortissement écart d''acquisition - Goodwill','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15218,'NSCF','IMMO','XXXXXX','2808',15213,'Amortissement autres immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15219,'NSCF','IMMO','XXXXXX','281',15212,'Amortissement des immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15220,'NSCF','IMMO','XXXXXX','2812',15219,'Amortissement des agencements et aménagement de terrains','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15221,'NSCF','IMMO','XXXXXX','2813',15219,'Amortissement des constructions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15222,'NSCF','IMMO','XXXXXX','2815',15219,'Amortissement des installations techniques','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15223,'NSCF','IMMO','XXXXXX','2818',15219,'Amortissement des autres immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15224,'NSCF','IMMO','XXXXXX','282',15212,'Amortissement des immobilisations mises en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15225,'NSCF','IMMO','XXXXXX','29',15090,'Pertes de valeur sur immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15226,'NSCF','IMMO','XXXXXX','290',15225,'Pertes de valeur sur immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15227,'NSCF','IMMO','XXXXXX','2903',15226,'Pertes de valeurs sur frais de recherche et de développement immobilisables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15228,'NSCF','IMMO','XXXXXX','2904',15226,'Pertes de valeur sur logiciels informatiques et assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15229,'NSCF','IMMO','XXXXXX','2905',15226,'Pertes de valeur sur concessions et droits similaires, brevets, licences, marques.','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15230,'NSCF','IMMO','XXXXXX','2907',15226,'Pertes de valeur sur écart d''acquisition – Goodwill','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15231,'NSCF','IMMO','XXXXXX','2908',15226,'Pertes de valeur sur autres immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15232,'NSCF','IMMO','XXXXXX','291',15225,'Pertes de valeurs sur immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15233,'NSCF','IMMO','XXXXXX','2912',15232,'Pertes de valeur sur agencements et aménagements de terrains','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15234,'NSCF','IMMO','XXXXXX','2913',15232,'Pertes de valeur sur constructions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15235,'NSCF','IMMO','XXXXXX','2915',15232,'Pertes de valeur sur installations techniques','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15236,'NSCF','IMMO','XXXXXX','2918',15232,'Pertes de valeur sur autres immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15237,'NSCF','IMMO','XXXXXX','292',15225,'Pertes de valeur sur immobilisations mises en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15238,'NSCF','IMMO','XXXXXX','293',15225,'Pertes de valeur sur immobilisations en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15239,'NSCF','IMMO','XXXXXX','2931',15238,'Pertes de valeur sur immobilisations corporelles en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15240,'NSCF','IMMO','XXXXXX','2932',15238,'Pertes de valeur sur immobilisations incorporelles en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15241,'NSCF','IMMO','XXXXXX','296',15225,'Pertes de valeur sur participations et créances rattachées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15242,'NSCF','IMMO','XXXXXX','2961',15241,'Pertes de valeur sur titres de filiales','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15243,'NSCF','IMMO','XXXXXX','2962',15241,'Pertes de valeur sur autres formes de participations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15244,'NSCF','IMMO','XXXXXX','2965',15241,'Pertes de valeur sur titres de participations évalués par équivalence','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15245,'NSCF','IMMO','XXXXXX','2966',15241,'Pertes de valeur sur créances rattachées à des participations groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15246,'NSCF','IMMO','XXXXXX','2967',15241,'Pertes de valeur sur créances rattachées à des participations hors groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15247,'NSCF','IMMO','XXXXXX','2968',15241,'Pertes de valeur sur créances rattachées à des sociétés en participations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15248,'NSCF','IMMO','XXXXXX','297',15225,'Pertes de valeur sur autres titres immobilisés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15249,'NSCF','IMMO','XXXXXX','2971',15248,'Pertes de valeur sur titres immobilisés autres que les titres immobilisés autres que TIAP (droits de propriété)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15250,'NSCF','IMMO','XXXXXX','2972',15248,'Pertes de valeur sur titres représentatifs de droit de créance','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15251,'NSCF','IMMO','XXXXXX','2973',15248,'Pertes de valeur sur titres immobilisés de l''activité de portefeuille','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15252,'NSCF','IMMO','XXXXXX','2974',15248,'Pertes de valeur sur contrat de location – financement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15253,'NSCF','IMMO','XXXXXX','2975',15248,'Pertes de valeur sur dépôts et cautionnements versés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15254,'NSCF','IMMO','XXXXXX','2976',15248,'Pertes de valeur sur autres créances immobilisées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15255,'NSCF','IMMO','XXXXXX','298',15225,'Pertes de valeur sur autres instruments financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15256,'NSCF','STOCK','XXXXXX','3',0,'COMPTES DE STOCKS ET ENCOURS','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15257,'NSCF','STOCK','XXXXXX','30',15256,'Stocks de marchandises','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15258,'NSCF','STOCK','XXXXXX','31',15256,'Matières premières et fournitures','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15259,'NSCF','STOCK','XXXXXX','311',15258,'Matières (ou groupe) A','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15260,'NSCF','STOCK','XXXXXX','312',15258,'Matières (ou groupe) B','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15261,'NSCF','STOCK','XXXXXX','313',15258,'Matières ...','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15262,'NSCF','STOCK','XXXXXX','32',15256,'Autres approvisionnements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15263,'NSCF','STOCK','XXXXXX','321',15262,'Matières consommables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15264,'NSCF','STOCK','XXXXXX','322',15262,'Fournitures consommables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15265,'NSCF','STOCK','XXXXXX','326',15262,'Emballages','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15266,'NSCF','STOCK','XXXXXX','3261',15265,'Emballages perdus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15267,'NSCF','STOCK','XXXXXX','3265',15265,'Emballages récupérables non identifiables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15268,'NSCF','STOCK','XXXXXX','3267',15265,'Emballages à usage mixte','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15269,'NSCF','STOCK','XXXXXX','33',15256,'En-cours de production de biens','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15270,'NSCF','STOCK','XXXXXX','331',15269,'Produits en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15271,'NSCF','STOCK','XXXXXX','335',15269,'Travaux en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15272,'NSCF','STOCK','XXXXXX','34',15256,'En-cours de production de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15273,'NSCF','STOCK','XXXXXX','341',15272,'Etudes en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15274,'NSCF','STOCK','XXXXXX','345',15272,'Prestations de services en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15275,'NSCF','STOCK','XXXXXX','35',15256,'Stocks de produits','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15276,'NSCF','STOCK','XXXXXX','351',15275,'Produits intermédiaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15277,'NSCF','STOCK','XXXXXX','355',15275,'Produits finis','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15278,'NSCF','STOCK','XXXXXX','358',15275,'Produits résiduels ou matières de récupération','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15279,'NSCF','STOCK','XXXXXX','3581',15278,'Déchets','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15280,'NSCF','STOCK','XXXXXX','3585',15278,'Rebuts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15281,'NSCF','STOCK','XXXXXX','3586',15278,'Matières de récupération','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15282,'NSCF','STOCK','XXXXXX','36',15256,'Stocks provenant d''immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15283,'NSCF','STOCK','XXXXXX','37',15256,'Stocks à l''extérieur','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15284,'NSCF','STOCK','XXXXXX','370',15283,'Stocks de marchandises l''extérieur','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15285,'NSCF','STOCK','XXXXXX','3700',15284,'Stocks en cours de route','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15286,'NSCF','STOCK','XXXXXX','3701',15284,'Stocks de marchandises en dépôt à l''extérieur','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15287,'NSCF','STOCK','XXXXXX','3702',15284,'Stocks de marchandises en consignation à l''extérieur','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15288,'NSCF','STOCK','XXXXXX','371',15283,'Stocks de matières premières et fournitures à l''extérieur','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15289,'NSCF','STOCK','XXXXXX','375',15283,'Stocks de produits à l''extérieur','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15290,'NSCF','STOCK','XXXXXX','38',15256,'Achats stockés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15291,'NSCF','STOCK','XXXXXX','380',15290,'Marchandises stockées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15292,'NSCF','STOCK','XXXXXX','381',15290,'Matières premières et fournitures stockées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15293,'NSCF','STOCK','XXXXXX','382',15290,'Autres approvisionnements stockés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15294,'NSCF','STOCK','XXXXXX','39',15256,'Pertes de valeur sur stocks et en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15295,'NSCF','STOCK','XXXXXX','390',15294,'Pertes de valeur sur stocks de marchandises','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15296,'NSCF','STOCK','XXXXXX','391',15294,'Pertes de valeur sur matières premières et fournitures de biens','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15297,'NSCF','STOCK','XXXXXX','392',15294,'Pertes de valeur sur autres approvisionnements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15298,'NSCF','STOCK','XXXXXX','393',15294,'Pertes de valeur sur en-cours de production de de biens','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15299,'NSCF','STOCK','XXXXXX','394',15294,'Pertes de valeur sur en-cours de production de de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15300,'NSCF','STOCK','XXXXXX','395',15294,'Pertes de valeur sur stocks de produits','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15301,'NSCF','STOCK','XXXXXX','397',15294,'Pertes de valeur sur stocks à l''extérieur','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15302,'NSCF','THIRDPARTY','XXXXXX','4',0,'COMPTES DE TIERS','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15303,'NSCF','THIRDPARTY','XXXXXX','40',15302,'Fournisseurs et comptes rattachés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15304,'NSCF','THIRDPARTY','XXXXXX','401',15303,'Fournisseurs de stocks et services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15305,'NSCF','THIRDPARTY','XXXXXX','4011',15304,'Fournisseurs - Achats de biens et prestations de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15306,'NSCF','THIRDPARTY','XXXXXX','4017',15304,'Fournisseurs - Retenues de garantie','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15307,'NSCF','THIRDPARTY','XXXXXX','403',15303,'Fournisseurs - Effets à payer','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15308,'NSCF','THIRDPARTY','XXXXXX','404',15303,'Fournisseurs d''immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15309,'NSCF','THIRDPARTY','XXXXXX','4041',15308,'Fournisseurs - Achats d''immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15310,'NSCF','THIRDPARTY','XXXXXX','4047',15308,'Fournisseurs d''immobilisations – Retenues de garantie','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15311,'NSCF','THIRDPARTY','XXXXXX','405',15303,'Fournisseurs d''immobilisations - Effets à payer','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15312,'NSCF','THIRDPARTY','XXXXXX','408',15303,'Fournisseurs - factures non parvenues','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15313,'NSCF','THIRDPARTY','XXXXXX','4081',15312,'Fournisseurs de stocks - Factures non parvenues','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15314,'NSCF','THIRDPARTY','XXXXXX','4084',15312,'Fournisseurs d''immobilisations – Factures non parvenues','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15315,'NSCF','THIRDPARTY','XXXXXX','4088',15312,'Fournisseurs - Intérêts courus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15316,'NSCF','THIRDPARTY','XXXXXX','409',15303,'Fournisseurs débiteurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15317,'NSCF','THIRDPARTY','XXXXXX','4091',15316,'Fournisseurs - Avances et acomptes versés sur commandes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15318,'NSCF','THIRDPARTY','XXXXXX','4096',15316,'Fournisseurs - Créances pour emballages et matériel à rendre ','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15319,'NSCF','THIRDPARTY','XXXXXX','4097',15316,'Fournisseurs - Autres avoirs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15320,'NSCF','THIRDPARTY','XXXXXX','4098',15316,'Rabais, remises, ristournes à obtenir et autres avoirs non encore reçus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15321,'NSCF','THIRDPARTY','XXXXXX','41',15302,'Clients et comptes rattachés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15322,'NSCF','THIRDPARTY','XXXXXX','411',15321,'Clients','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15323,'NSCF','THIRDPARTY','XXXXXX','4111',15322,'Clients - Ventes de biens ou de prestations de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15324,'NSCF','THIRDPARTY','XXXXXX','4117',15322,'Clients - Retenues de garantie','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15325,'NSCF','THIRDPARTY','XXXXXX','413',15321,'Clients - Effets à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15326,'NSCF','THIRDPARTY','XXXXXX','416',15321,'Clients douteux (litigieux)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15327,'NSCF','THIRDPARTY','XXXXXX','417',15321,'Créances sur travaux ou prestations en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15328,'NSCF','THIRDPARTY','XXXXXX','418',15321,'Clients - Produits non encore facturés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15329,'NSCF','THIRDPARTY','XXXXXX','4181',15328,'Clients - Factures à établir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15330,'NSCF','THIRDPARTY','XXXXXX','4188',15328,'Clients - Intérêts courus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15331,'NSCF','THIRDPARTY','XXXXXX','419',15321,'Clients créditeurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15332,'NSCF','THIRDPARTY','XXXXXX','4191',15331,'Clients - Avances et acomptes reçus sur commandes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15333,'NSCF','THIRDPARTY','XXXXXX','4196',15331,'Clients - Dettes sur emballages et matériels consignés autres avoirs à établir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15334,'NSCF','THIRDPARTY','XXXXXX','4197',15331,'Clients - Autres avoirs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15335,'NSCF','THIRDPARTY','XXXXXX','4198',15331,'Rabais, remises, ristournes à accorder et','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15336,'NSCF','THIRDPARTY','XXXXXX','42',15302,'Personnel et comptes rattachés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15337,'NSCF','THIRDPARTY','XXXXXX','421',15336,'Personnel - Rémunérations dues','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15338,'NSCF','THIRDPARTY','XXXXXX','422',15336,'Fonds des œuvres sociales','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15339,'NSCF','THIRDPARTY','XXXXXX','423',15336,'Participation des salariés aux résultats','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15340,'NSCF','THIRDPARTY','XXXXXX','425',15336,'Personnel - Avances et acomptes accordés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15341,'NSCF','THIRDPARTY','XXXXXX','426',15336,'Personnel - Dépôts reçus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15342,'NSCF','THIRDPARTY','XXXXXX','427',15336,'Personnel - Oppositions sur salaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15343,'NSCF','THIRDPARTY','XXXXXX','428',15336,'Personnel - Charges à payer et produits à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15344,'NSCF','THIRDPARTY','XXXXXX','4286',15343,'Personnel, charges à payer','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15345,'NSCF','THIRDPARTY','XXXXXX','4287',15343,'Personnel, produits à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15346,'NSCF','THIRDPARTY','XXXXXX','43',15302,'Organismes sociaux et comptes rattachés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15347,'NSCF','THIRDPARTY','XXXXXX','431',15346,'Sécurité sociale','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15348,'NSCF','THIRDPARTY','XXXXXX','432',15346,'Autres organismes sociaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15349,'NSCF','THIRDPARTY','XXXXXX','438',15346,'Organismes sociaux - Charges à payer et produits à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15350,'NSCF','THIRDPARTY','XXXXXX','4386',15349,'Organismes sociaux, charges à payer','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15351,'NSCF','THIRDPARTY','XXXXXX','4387',15349,'Organismes sociaux, produits à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15352,'NSCF','THIRDPARTY','XXXXXX','44',15302,'État, collectivités publiques, organismes internationaux et comptes rattachés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15353,'NSCF','THIRDPARTY','XXXXXX','441',15352,'État et collectivités publiques, subventions à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15354,'NSCF','THIRDPARTY','XXXXXX','4411',15353,'Subventions d''investissement à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15355,'NSCF','THIRDPARTY','XXXXXX','4417',15353,'Subventions d''exploitation à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15356,'NSCF','THIRDPARTY','XXXXXX','4418',15353,'Subventions d''équilibre à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15357,'NSCF','THIRDPARTY','XXXXXX','4419',15353,'Avances sur subventions à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15358,'NSCF','THIRDPARTY','XXXXXX','442',15352,'Impôts et taxes recouvrables sur des tiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15359,'NSCF','THIRDPARTY','XXXXXX','443',15352,'Opérations particulières avec l''Etat et les collectivités publiques','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15360,'NSCF','THIRDPARTY','XXXXXX','444',15352,'Etat - Impôts sur les résultats','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15361,'NSCF','THIRDPARTY','XXXXXX','445',15352,'Etat - Taxes sur le chiffre d''affaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15362,'NSCF','THIRDPARTY','XXXXXX','4451',15361,'Taxes sur le chiffre d''affaires à décaisser','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15363,'NSCF','THIRDPARTY','XXXXXX','44511',15362,'T.V.A. à décaisser','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15364,'NSCF','THIRDPARTY','XXXXXX','44518',15362,'Autres taxes assimilées à décaisser','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15365,'NSCF','THIRDPARTY','XXXXXX','4456',15361,'Taxes sur le chiffre d''affaires déductibles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15366,'NSCF','THIRDPARTY','XXXXXX','44562',15365,'T.V.A. sur immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15367,'NSCF','THIRDPARTY','XXXXXX','44566',15365,'T.V.A. sur autres biens et services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15368,'NSCF','THIRDPARTY','XXXXXX','44567',15365,'Crédit de T.V.A. à reporter','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15369,'NSCF','THIRDPARTY','XXXXXX','4457',15361,'Taxes sur le chiffre d''affaires collectées par l''entreprise','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15370,'NSCF','THIRDPARTY','XXXXXX','44571',15369,'T.V.A. collectée','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15371,'NSCF','THIRDPARTY','XXXXXX','44578',15369,'Autres taxes collectée assimilées à la T.V.A.','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15372,'NSCF','THIRDPARTY','XXXXXX','4458',15361,'Taxes sur le chiffre d''affaires à régulariser ou en attente','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15373,'NSCF','THIRDPARTY','XXXXXX','44586',15372,'Taxes sur le chiffre d''affaires sur factures non parvenues','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15374,'NSCF','THIRDPARTY','XXXXXX','44587',15372,'Taxes sur le chiffre d''affaires sur factures à établir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15375,'NSCF','THIRDPARTY','XXXXXX','446',15352,'Organismes internationaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15376,'NSCF','THIRDPARTY','XXXXXX','447',15352,'Autres impôts, taxes et versements assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15377,'NSCF','THIRDPARTY','XXXXXX','448',15352,'Etat - Charges à payer et produits à recevoir (hors impôts)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15378,'NSCF','THIRDPARTY','XXXXXX','4486',15377,'Etat, charges à payer','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15379,'NSCF','THIRDPARTY','XXXXXX','4487',15377,'Etat, produits à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15380,'NSCF','THIRDPARTY','XXXXXX','4488',15377,'Obligations cautionnées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15381,'NSCF','THIRDPARTY','XXXXXX','45',15302,'Groupe et associés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15382,'NSCF','THIRDPARTY','XXXXXX','451',15381,'Opérations groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15383,'NSCF','THIRDPARTY','XXXXXX','4510',15382,'Groupe, avances accordées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15384,'NSCF','THIRDPARTY','XXXXXX','4511',15382,'Groupe, avances reçues','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15385,'NSCF','THIRDPARTY','XXXXXX','455',15381,'Associés - Comptes courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15386,'NSCF','THIRDPARTY','XXXXXX','4551',15385,'Principal','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15387,'NSCF','THIRDPARTY','XXXXXX','4558',15385,'Intérêts courus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15388,'NSCF','THIRDPARTY','XXXXXX','456',15381,'Associés - Opérations sur le capital','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15389,'NSCF','THIRDPARTY','XXXXXX','4561',15388,'Associés - Comptes d''apport en société','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15390,'NSCF','THIRDPARTY','XXXXXX','45611',15389,'Apports en nature','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15391,'NSCF','THIRDPARTY','XXXXXX','45615',15389,'Apports en numéraire','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15392,'NSCF','THIRDPARTY','XXXXXX','4562',15388,'Apporteurs - Capital appelé, non versé','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15393,'NSCF','THIRDPARTY','XXXXXX','45621',15392,'Actionnaires - Capital souscrit et appelé, non versé','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15394,'NSCF','THIRDPARTY','XXXXXX','45625',15392,'Associés - Capital appelé, non versé','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15395,'NSCF','THIRDPARTY','XXXXXX','4563',15388,'Associés - versements reçus sur augmentation de capital','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15396,'NSCF','THIRDPARTY','XXXXXX','4564',15388,'Associés - Versements anticipés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15397,'NSCF','THIRDPARTY','XXXXXX','4566',15388,'Actionnaires défaillants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15398,'NSCF','THIRDPARTY','XXXXXX','4567',15388,'Associés - Capital à rembourser','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15399,'NSCF','THIRDPARTY','XXXXXX','457',15381,'Associés - Dividendes à payer','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15400,'NSCF','THIRDPARTY','XXXXXX','458',15381,'Associés - Opérations faites en commun ou en groupement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15401,'NSCF','THIRDPARTY','XXXXXX','4581',15400,'Opérations courantes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15402,'NSCF','THIRDPARTY','XXXXXX','4588',15400,'Intérêts courus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15403,'NSCF','THIRDPARTY','XXXXXX','46',15302,'Débiteurs divers et créditeurs divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15404,'NSCF','THIRDPARTY','XXXXXX','462',15403,'Créances sur cessions d''immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15405,'NSCF','THIRDPARTY','XXXXXX','464',15403,'Dettes sur acquisitions valeurs mobilières de placement et instruments financiers dérivés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15406,'NSCF','THIRDPARTY','XXXXXX','465',15403,'Créances sur cessions valeurs mobilières de placement et instruments financiers dérivés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15407,'NSCF','THIRDPARTY','XXXXXX','467',15403,'Autres comptes débiteurs ou créditeurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15408,'NSCF','THIRDPARTY','XXXXXX','468',15403,'Diverses charges à payer et produits à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15409,'NSCF','THIRDPARTY','XXXXXX','4686',15408,'Diverses charges à payer','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15410,'NSCF','THIRDPARTY','XXXXXX','4687',15408,'Divers produits à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15411,'NSCF','THIRDPARTY','XXXXXX','47',15302,'Comptes transitoires ou d''attente','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15412,'NSCF','THIRDPARTY','XXXXXX','471',15411,'Compte d''attente 1','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15413,'NSCF','THIRDPARTY','XXXXXX','472',15411,'Compte d''attente 2','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15414,'NSCF','THIRDPARTY','XXXXXX','473',15411,'Compte d''attente 3','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15415,'NSCF','THIRDPARTY','XXXXXX','474',15411,'Compte d''attente 4','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15416,'NSCF','THIRDPARTY','XXXXXX','475',15411,'Compte d''attente 5','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15417,'NSCF','THIRDPARTY','XXXXXX','476',15411,'Différence de conversion - Actif','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15418,'NSCF','THIRDPARTY','XXXXXX','4761',15417,'Diminution des créances','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15419,'NSCF','THIRDPARTY','XXXXXX','4762',15417,'Augmentation des dettes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15420,'NSCF','THIRDPARTY','XXXXXX','4768',15417,'Différences compensées par couverture de change','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15421,'NSCF','THIRDPARTY','XXXXXX','477',15411,'Différences de conversion - Passif','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15422,'NSCF','THIRDPARTY','XXXXXX','4771',15421,'Augmentation des créances','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15423,'NSCF','THIRDPARTY','XXXXXX','4772',15421,'Diminution des dettes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15424,'NSCF','THIRDPARTY','XXXXXX','4778',15421,'Différences compensées par couverture de change','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15425,'NSCF','THIRDPARTY','XXXXXX','478',15411,'Autres comptes transitoires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15426,'NSCF','THIRDPARTY','XXXXXX','48',15302,'Charges ou produits constatés d''avance et provisions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15427,'NSCF','THIRDPARTY','XXXXXX','481',15426,'Provisions, passifs courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15428,'NSCF','THIRDPARTY','XXXXXX','486',15426,'Charges constatées d''avance','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15429,'NSCF','THIRDPARTY','XXXXXX','487',15426,'Produits constatés d''avance','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15430,'NSCF','THIRDPARTY','XXXXXX','49',15302,'Pertes de valeur sur comptes de tiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15431,'NSCF','THIRDPARTY','XXXXXX','491',15430,'Pertes de valeur sur comptes de clients','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15432,'NSCF','THIRDPARTY','XXXXXX','495',15430,'Pertes de valeur sur comptes du groupe et sur associés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15433,'NSCF','THIRDPARTY','XXXXXX','4951',15432,'Pertes de valeur sur comptes du groupe','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15434,'NSCF','THIRDPARTY','XXXXXX','4955',15432,'Pertes de valeur sur comptes courants des associés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15435,'NSCF','THIRDPARTY','XXXXXX','496',15430,'Pertes de valeur sur comptes de débiteurs divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15436,'NSCF','THIRDPARTY','XXXXXX','4962',15435,'Créances sur cessions d''immobilisations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15437,'NSCF','THIRDPARTY','XXXXXX','4965',15435,'Créances sur cessions de valeurs mobilières de placement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15438,'NSCF','THIRDPARTY','XXXXXX','4967',15435,'Autres comptes débiteurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15439,'NSCF','THIRDPARTY','XXXXXX','498',15430,'Pertes de valeur sur comptes de débiteurs divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15440,'NSCF','FINAN','XXXXXX','5',0,'COMPTES FINANCIERS','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15441,'NSCF','FINAN','XXXXXX','50',15440,'Valeurs mobilières de placement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15442,'NSCF','FINAN','XXXXXX','501',15441,'Parts dans des entreprises liées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15443,'NSCF','FINAN','XXXXXX','502',15441,'Actions propres','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15444,'NSCF','FINAN','XXXXXX','503',15441,'Autres actions ou titres conférant un droit de propriété','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15445,'NSCF','FINAN','XXXXXX','5031',15444,'Titres cotés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15446,'NSCF','FINAN','XXXXXX','5032',15444,'Titres non cotés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15447,'NSCF','FINAN','XXXXXX','506',15441,'Obligations, bons du Trésor et bons de caisse à court terme','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15448,'NSCF','FINAN','XXXXXX','5061',15447,'Obligations à court termes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15449,'NSCF','FINAN','XXXXXX','5062',15447,'Bons du trésor à court terme','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15450,'NSCF','FINAN','XXXXXX','5063',15447,'Bons de caisse à court terme','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15451,'NSCF','FINAN','XXXXXX','508',15441,'Autres valeurs mobilières de placement et créances assimilées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15452,'NSCF','FINAN','XXXXXX','5088',15451,'Autres valeurs mobilières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15453,'NSCF','FINAN','XXXXXX','5082',15451,'Bons de souscription','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15454,'NSCF','FINAN','XXXXXX','5083',15451,'Intérêts courus sur obligations, bons et valeurs assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15455,'NSCF','FINAN','XXXXXX','509',15441,'Versements restant à effectuer sur valeurs mobilières de placement non libérées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15456,'NSCF','FINAN','XXXXXX','51',15440,'Banques, établissements financiers et assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15457,'NSCF','FINAN','XXXXXX','511',15456,'Valeurs à l''encaissement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15458,'NSCF','FINAN','XXXXXX','5111',15457,'Coupons échus à l''encaissement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15459,'NSCF','FINAN','XXXXXX','5112',15457,'Chèques à encaisser','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15460,'NSCF','FINAN','XXXXXX','5113',15457,'Effets à l''encaissement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15461,'NSCF','FINAN','XXXXXX','5114',15457,'Effets à l''escompte','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15462,'NSCF','FINAN','XXXXXX','5115',15457,'Cartes bancaires à l''encaissement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15463,'NSCF','FINAN','XXXXXX','512',15456,'Banques comptes courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15464,'NSCF','FINAN','XXXXXX','514',15456,'Chèques postaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15465,'NSCF','FINAN','XXXXXX','515',15456,'Caisses du Trésor et des établissements publics','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15466,'NSCF','FINAN','XXXXXX','516',15456,'Sociétés de bourse','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15467,'NSCF','FINAN','XXXXXX','517',15456,'Autres organismes financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15468,'NSCF','FINAN','XXXXXX','518',15456,'Intérêts courus','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15469,'NSCF','FINAN','XXXXXX','5181',15468,'Intérêts courus à payer','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15470,'NSCF','FINAN','XXXXXX','5188',15468,'Intérêts courus à recevoir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15471,'NSCF','FINAN','XXXXXX','519',15456,'Concours bancaires courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15472,'NSCF','FINAN','XXXXXX','5191',15471,'Crédit de mobilisation de créances commerciales (CMCC)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15473,'NSCF','FINAN','XXXXXX','5192',15471,'Crédit documentaire','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15474,'NSCF','FINAN','XXXXXX','5193',15471,'Mobilisation de créances nées à l''étranger','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15475,'NSCF','FINAN','XXXXXX','5198',15471,'Intérêts courus sur concours bancaires courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15476,'NSCF','FINAN','XXXXXX','52',15440,'Instruments de trésorerie','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15477,'NSCF','FINAN','XXXXXX','53',15440,'Caisse','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15478,'NSCF','FINAN','XXXXXX','54',15440,'Régies d''avance et accréditifs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15479,'NSCF','FINAN','XXXXXX','541',15478,'Régie d''avance','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15480,'NSCF','FINAN','XXXXXX','542',15478,'Accréditifs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15481,'NSCF','FINAN','XXXXXX','58',15440,'Virements internes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15482,'NSCF','FINAN','XXXXXX','581',15481,'Virements de fonds','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15483,'NSCF','FINAN','XXXXXX','588',15481,'Autres virements internes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15484,'NSCF','FINAN','XXXXXX','59',15440,'Pertes de valeur des actifs financiers courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15485,'NSCF','FINAN','XXXXXX','591',15484,'Pertes de valeur des dépôts en banque et autres établissements financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15486,'NSCF','FINAN','XXXXXX','594',15484,'Pertes de valeur sur des régies d''avance et accréditifs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15487,'NSCF','EXPENSE','XXXXXX','6',0,'COMPTES DE CHARGES','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15488,'NSCF','EXPENSE','XXXXXX','60',15487,'Achats consommées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15489,'NSCF','EXPENSE','XXXXXX','600',15488,'Achats de marchandises vendues','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15490,'NSCF','EXPENSE','XXXXXX','601',15488,'Matières premières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15491,'NSCF','EXPENSE','XXXXXX','602',15488,'Autres approvisionnements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15492,'NSCF','EXPENSE','XXXXXX','603',15488,'Variations des stocks ','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15493,'NSCF','EXPENSE','XXXXXX','6030',15492,'Variations des stocks de marchandises','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15494,'NSCF','EXPENSE','XXXXXX','6031',15492,'Variations des stocks de matières premières et fournitures','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15495,'NSCF','EXPENSE','XXXXXX','6032',15492,'Variations des stocks d''autres approvisionnements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15496,'NSCF','EXPENSE','XXXXXX','604',15488,'Achats d''études  et prestations de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15497,'NSCF','EXPENSE','XXXXXX','605',15488,'Achats de matériel, équipements et travaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15498,'NSCF','EXPENSE','XXXXXX','607',15488,'Achats non stockés de matière et fournitures','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15499,'NSCF','EXPENSE','XXXXXX','6071',15498,'Fournitures non stockables (eau, énergie)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15500,'NSCF','EXPENSE','XXXXXX','6073',15498,'Fournitures d''entretien et de petit équipement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15501,'NSCF','EXPENSE','XXXXXX','6074',15498,'Fournitures administratives','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15502,'NSCF','EXPENSE','XXXXXX','6078',15498,'Autres matières et fournitures','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15503,'NSCF','EXPENSE','XXXXXX','608',15488,'Frais accessoires sur achats (FAA)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15504,'NSCF','EXPENSE','XXXXXX','609',15488,'Rabais, remises et ristournes obtenus sur achats','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15505,'NSCF','EXPENSE','XXXXXX','61',15487,'Services extérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15506,'NSCF','EXPENSE','XXXXXX','611',15505,'Sous-traitance générale','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15507,'NSCF','EXPENSE','XXXXXX','613',15505,'Locations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15508,'NSCF','EXPENSE','XXXXXX','6132',15507,'Locations immobilières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15509,'NSCF','EXPENSE','XXXXXX','6135',15507,'Locations mobilières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15510,'NSCF','EXPENSE','XXXXXX','6136',15507,'Malis sur emballages','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15511,'NSCF','EXPENSE','XXXXXX','614',15505,'Charges locatives et charges de copropriété','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15512,'NSCF','EXPENSE','XXXXXX','615',15505,'Entretien, réparations et maintenance','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15513,'NSCF','EXPENSE','XXXXXX','6152',15512,'Sur biens immobiliers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15514,'NSCF','EXPENSE','XXXXXX','6155',15512,'Sur biens mobiliers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15515,'NSCF','EXPENSE','XXXXXX','6156',15512,'Maintenance','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15516,'NSCF','EXPENSE','XXXXXX','616',15505,'Primes d''assurances','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15517,'NSCF','EXPENSE','XXXXXX','6161',15516,'Multirisques','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15518,'NSCF','EXPENSE','XXXXXX','6162',15516,'Assurance obligatoire dommage construction','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15519,'NSCF','EXPENSE','XXXXXX','6163',15516,'Assurance-transport','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15520,'NSCF','EXPENSE','XXXXXX','61636',15519,'sur achats','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15521,'NSCF','EXPENSE','XXXXXX','61637',15519,'sur ventes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15522,'NSCF','EXPENSE','XXXXXX','61638',15519,'sur autres biens','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15523,'NSCF','EXPENSE','XXXXXX','6166',15516,'Assurances véhicules','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15524,'NSCF','EXPENSE','XXXXXX','6168',15516,'Autres assurances','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15525,'NSCF','EXPENSE','XXXXXX','617',15505,'Etudes et recherches','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15526,'NSCF','EXPENSE','XXXXXX','618',15505,'Documentation et divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15527,'NSCF','EXPENSE','XXXXXX','6181',15526,'Documentation générale','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15528,'NSCF','EXPENSE','XXXXXX','6183',15526,'Documentation technique','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15529,'NSCF','EXPENSE','XXXXXX','6185',15526,'Frais de colloques, séminaires, conférences','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15530,'NSCF','EXPENSE','XXXXXX','619',15505,'Rabais, remises et ristournes obtenus sur services extérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15531,'NSCF','EXPENSE','XXXXXX','62',15487,'Autres services extérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15532,'NSCF','EXPENSE','XXXXXX','621',15531,'Personnel extérieur à l''entreprise','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15533,'NSCF','EXPENSE','XXXXXX','6211',15532,'Personnel intérimaire','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15534,'NSCF','EXPENSE','XXXXXX','6214',15532,'Personnel détaché ou prêté à l''entreprise','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15535,'NSCF','EXPENSE','XXXXXX','622',15531,'Rémunérations d''intermédiaires et honoraires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15536,'NSCF','EXPENSE','XXXXXX','6221',15535,'Commissions et courtages sur achats','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15537,'NSCF','EXPENSE','XXXXXX','6222',15535,'Commissions et courtages sur ventes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15538,'NSCF','EXPENSE','XXXXXX','6224',15535,'Rémunérations des transitaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15539,'NSCF','EXPENSE','XXXXXX','6225',15535,'Rémunérations d''affacturage (mémoire)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15540,'NSCF','EXPENSE','XXXXXX','6226',15535,'Honoraires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15541,'NSCF','EXPENSE','XXXXXX','6227',15535,'Frais d''actes et de contentieux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15542,'NSCF','EXPENSE','XXXXXX','6228',15535,'Divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15543,'NSCF','EXPENSE','XXXXXX','624',15531,'Transports de biens et transports collectifs du personnel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15544,'NSCF','EXPENSE','XXXXXX','6241',15543,'Transports sur achats','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15545,'NSCF','EXPENSE','XXXXXX','6242',15543,'Transports sur ventes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15546,'NSCF','EXPENSE','XXXXXX','6243',15543,'Transports entre établissements ou chantiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15547,'NSCF','EXPENSE','XXXXXX','6244',15543,'Transports administratifs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15548,'NSCF','EXPENSE','XXXXXX','6247',15543,'Transports collectifs du personnel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15549,'NSCF','EXPENSE','XXXXXX','6248',15543,'Divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15550,'NSCF','EXPENSE','XXXXXX','625',15531,'Déplacements, missions et réceptions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15551,'NSCF','EXPENSE','XXXXXX','6251',15550,'Voyages et déplacements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15552,'NSCF','EXPENSE','XXXXXX','6255',15550,'Frais de déménagement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15553,'NSCF','EXPENSE','XXXXXX','6256',15550,'Missions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15554,'NSCF','EXPENSE','XXXXXX','6257',15550,'Réceptions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15555,'NSCF','EXPENSE','XXXXXX','626',15531,'Frais postaux et de télécommunications','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15556,'NSCF','EXPENSE','XXXXXX','627',15531,'Services bancaires et assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15557,'NSCF','EXPENSE','XXXXXX','6271',15556,'Frais sur titres (achat, vente, garde)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15558,'NSCF','EXPENSE','XXXXXX','6272',15556,'Commissions et frais sur émission d''emprunts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15559,'NSCF','EXPENSE','XXXXXX','6275',15556,'Frais sur effets','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15560,'NSCF','EXPENSE','XXXXXX','6276',15556,'Location de coffres','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15561,'NSCF','EXPENSE','XXXXXX','6278',15556,'Autres frais et commissions sur prestations de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15562,'NSCF','EXPENSE','XXXXXX','628',15531,'Cotisations et divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15563,'NSCF','EXPENSE','XXXXXX','6281',15562,'Concours divers (cotisations)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15564,'NSCF','EXPENSE','XXXXXX','6284',15562,'Frais de recrutement de personnel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15565,'NSCF','EXPENSE','XXXXXX','629',15531,'Rabais, remises et ristournes obtenus sur autres services extérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15566,'NSCF','EXPENSE','XXXXXX','63',15487,'Charges de personnel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15567,'NSCF','EXPENSE','XXXXXX','631',15566,'Rémunérations du personnel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15568,'NSCF','EXPENSE','XXXXXX','6311',15567,'Salaires, appointements','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15569,'NSCF','EXPENSE','XXXXXX','6312',15567,'Congés payés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15570,'NSCF','EXPENSE','XXXXXX','6313',15567,'Primes et gratifications','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15571,'NSCF','EXPENSE','XXXXXX','6314',15567,'Indemnités et avantages divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15572,'NSCF','EXPENSE','XXXXXX','6316',15567,'Contributions aux œuvres sociales','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15573,'NSCF','EXPENSE','XXXXXX','634',15566,'Rémunération de l''exploitant individuel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15574,'NSCF','EXPENSE','XXXXXX','635',15566,'Cotisations aux organismes sociaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15575,'NSCF','EXPENSE','XXXXXX','6351',15574,'Cotisations CNAS','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15576,'NSCF','EXPENSE','XXXXXX','6352',15574,'Cotisations aux mutuelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15577,'NSCF','EXPENSE','XXXXXX','6353',15574,'Cotisations aux caisses de retraites','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15578,'NSCF','EXPENSE','XXXXXX','6358',15574,'Cotisations aux autres organismes sociaux (CACOBATH)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15579,'NSCF','EXPENSE','XXXXXX','636',15566,'Charges sociales de l''exploitant individuel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15580,'NSCF','EXPENSE','XXXXXX','637',15566,'Autres charges sociales','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15581,'NSCF','EXPENSE','XXXXXX','6371',15580,'Prestations directes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15582,'NSCF','EXPENSE','XXXXXX','6372',15580,'Versements aux comités d''entreprise et d''établissement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15583,'NSCF','EXPENSE','XXXXXX','6374',15580,'Versements aux autres œuvres sociales','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15584,'NSCF','EXPENSE','XXXXXX','6375',15580,'Médecine du travail, pharmacie','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15585,'NSCF','EXPENSE','XXXXXX','638',15566,'Autres charges de personnel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15586,'NSCF','EXPENSE','XXXXXX','64',15487,'Impôts, taxes et versements assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15587,'NSCF','EXPENSE','XXXXXX','641',15586,'Impôts, taxes et versements assimilés sur rémunérations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15588,'NSCF','EXPENSE','XXXXXX','6411',15587,'Taxe sur les salaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15589,'NSCF','EXPENSE','XXXXXX','6413',15587,'Participation des employeurs à la formation professionnelle','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15590,'NSCF','EXPENSE','XXXXXX','6418',15587,'Autres impôts, taxes et versements assimilés sur rémunérations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15591,'NSCF','EXPENSE','XXXXXX','642',15586,'Impôts et taxes non récupérables sur le chiffre d''affaire','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15592,'NSCF','EXPENSE','XXXXXX','6421',15591,'Taxe sur l''activité professionnelle (TAP)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15593,'NSCF','EXPENSE','XXXXXX','6422',15591,'TVA non récupérable','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15594,'NSCF','EXPENSE','XXXXXX','6423',15591,'Droits de timbre et d''enregistrement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15595,'NSCF','EXPENSE','XXXXXX','6428',15591,'Autres impôts et taxes non récupérables sur le chiffre d''affaire','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15596,'NSCF','EXPENSE','XXXXXX','645',15586,'Autres impôts et taxes (hors impôts sur le résultat)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15597,'NSCF','EXPENSE','XXXXXX','6451',15596,'Taxe foncière','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15598,'NSCF','EXPENSE','XXXXXX','6452',15596,'Taxe d''assainissement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15599,'NSCF','EXPENSE','XXXXXX','6453',15596,'Droits de douane','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15600,'NSCF','EXPENSE','XXXXXX','6454',15596,'Vignettes automobiles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15601,'NSCF','EXPENSE','XXXXXX','6456',15596,'Taxe écologique','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15602,'NSCF','EXPENSE','XXXXXX','6458',15596,'Autres droits et taxes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15603,'NSCF','EXPENSE','XXXXXX','65',15487,'Autres charges opérationnelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15604,'NSCF','EXPENSE','XXXXXX','651',15603,'Redevances pour concessions, brevets, licences, logiciels et accès similaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15605,'NSCF','EXPENSE','XXXXXX','6511',15604,'Redevances pour concessions, brevets, licences, marques, procédés, logiciels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15606,'NSCF','EXPENSE','XXXXXX','6516',15604,'Droits d''auteur et de reproduction','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15607,'NSCF','EXPENSE','XXXXXX','6518',15604,'Autres droits et valeurs similaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15608,'NSCF','EXPENSE','XXXXXX','652',15603,'Moins-values sur sorties d''actifs immobilisés non financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15609,'NSCF','EXPENSE','XXXXXX','653',15603,'Jetons de présence','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15610,'NSCF','EXPENSE','XXXXXX','654',15603,'Pertes sur créances irrécouvrables','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15611,'NSCF','EXPENSE','XXXXXX','6541',15610,'Pertes sur créances de l''exercice','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15612,'NSCF','EXPENSE','XXXXXX','6544',15610,'Pertes sur créances des exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15613,'NSCF','EXPENSE','XXXXXX','655',15603,'Quote-part de résultat sur opérations faites en commun','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15614,'NSCF','EXPENSE','XXXXXX','6551',15613,'Quote-part de résultats de groupement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15615,'NSCF','EXPENSE','XXXXXX','6558',15613,'Amortissements de caducité des immobilisations mises en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15616,'NSCF','EXPENSE','XXXXXX','6559',15613,'Dotations aux provisions des immobilisations mises en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15617,'NSCF','EXPENSE','XXXXXX','656',15603,'Amendes et pénalités, subventions accordées dons et libéralités','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15618,'NSCF','EXPENSE','XXXXXX','6561',15617,'Amendes et pénalité','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15619,'NSCF','EXPENSE','XXXXXX','6562',15617,'Subventions accordées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15620,'NSCF','EXPENSE','XXXXXX','6563',15617,'Dons et libéralités','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15621,'NSCF','EXPENSE','XXXXXX','657',15603,'Charges exceptionnelles de gestion courante','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15622,'NSCF','EXPENSE','XXXXXX','658',15603,'Autres charges de gestion courante','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15623,'NSCF','EXPENSE','XXXXXX','66',15487,'Charges financières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15624,'NSCF','EXPENSE','XXXXXX','661',15623,'Charges d''intérêts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15625,'NSCF','EXPENSE','XXXXXX','6611',15624,'Intérêts des emprunts et dettes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15626,'NSCF','EXPENSE','XXXXXX','66116',15625,'Intérêts des emprunts et dettes assimilées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15627,'NSCF','EXPENSE','XXXXXX','66117',15625,'Intérêts des emprunts et  dettes rattachées à des participations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15628,'NSCF','EXPENSE','XXXXXX','6615',15624,'Intérêts des comptes courants et des dépôts créditeurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15629,'NSCF','EXPENSE','XXXXXX','6616',15624,'Intérêts bancaires et sur opérations de financement (escompte,…)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15630,'NSCF','EXPENSE','XXXXXX','6617',15624,'Intérêts des obligations cautionnées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15631,'NSCF','EXPENSE','XXXXXX','6618',15624,'Intérêts des autres dettes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15632,'NSCF','EXPENSE','XXXXXX','66181',15631,'Intérêts des dettes commerciales','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15633,'NSCF','EXPENSE','XXXXXX','66188',15631,'Intérêts des dettes diverses','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15634,'NSCF','EXPENSE','XXXXXX','664',15623,'Pertes sur créances liées à des participations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15635,'NSCF','EXPENSE','XXXXXX','665',15623,'Ecarts d''évaluation sur actifs financiers – Moins-values','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15636,'NSCF','EXPENSE','XXXXXX','6651',15635,'Ecarts d''évaluation - moins-values sur des parts dans les entreprises liées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15637,'NSCF','EXPENSE','XXXXXX','6653',15635,'Ecarts d''évaluation - moins-values sur autres titres conférant un droit de propriété','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15638,'NSCF','EXPENSE','XXXXXX','6656',15635,'Ecarts d''évaluation - moins-values sur obligations, bons du trésor et bons de caisse à court terme','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15639,'NSCF','EXPENSE','XXXXXX','6658',15635,'Ecarts d''évaluation - moins-values sur autres valeurs mobilières et autres créances assimilées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15640,'NSCF','EXPENSE','XXXXXX','666',15623,'Pertes de change','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15641,'NSCF','EXPENSE','XXXXXX','667',15623,'Pertes nettes sur cessions d''actifs financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15642,'NSCF','EXPENSE','XXXXXX','6671',15641,'Pertes nettes sur cession des parts dans les entreprises liées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15643,'NSCF','EXPENSE','XXXXXX','6672',15641,'Pertes nettes sur cession d''actions propres','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15644,'NSCF','EXPENSE','XXXXXX','6673',15641,'Pertes nettes sur cession d''autres titres conférant un droit de propriété','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15645,'NSCF','EXPENSE','XXXXXX','6676',15641,'Pertes nettes sur cession d''obligations, bons du trésor et bons de caisse à court terme','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15646,'NSCF','EXPENSE','XXXXXX','6678',15641,'Pertes nettes sur cession des autres valeurs mobilières et autres créances assimilées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15647,'NSCF','EXPENSE','XXXXXX','668',15623,'Autres charges financières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15648,'NSCF','EXPENSE','XXXXXX','67',15487,'Eléments extraordinaires - charges','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15649,'NSCF','EXPENSE','XXXXXX','672',15648,'Valeur résiduelle des immobilisations cédées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15650,'NSCF','EXPENSE','XXXXXX','676',15648,'Charges sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15651,'NSCF','EXPENSE','XXXXXX','6760',15650,'Consommations sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15652,'NSCF','EXPENSE','XXXXXX','6761',15650,'Services sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15653,'NSCF','EXPENSE','XXXXXX','6762',15650,'Autres services sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15654,'NSCF','EXPENSE','XXXXXX','6763',15650,'Charges de personnel sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15655,'NSCF','EXPENSE','XXXXXX','6764',15650,'Impôts et taxes sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15656,'NSCF','EXPENSE','XXXXXX','6765',15650,'Autres charges opérationnelles sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15657,'NSCF','EXPENSE','XXXXXX','6766',15650,'Charges financières sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15658,'NSCF','EXPENSE','XXXXXX','6768',15650,'Dotations aux amortissements, provisions et pertes de valeurs sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15659,'NSCF','EXPENSE','XXXXXX','6769',15650,'Impôts sur les bénéfices sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15660,'NSCF','EXPENSE','XXXXXX','678',15648,'Autres éléments extraordinaires - charges','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15661,'NSCF','EXPENSE','XXXXXX','6783',15660,'Malis provenant du rachat par l''entreprise d''actions et obligations émises par elle-même','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15662,'NSCF','EXPENSE','XXXXXX','6788',15660,'Autres charges extraordinaires diverses','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15663,'NSCF','EXPENSE','XXXXXX','68',15487,'Dotations aux amortissements, provisions et pertes de valeur','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15664,'NSCF','EXPENSE','XXXXXX','681',15663,'Dotations aux amortissements, provisions et pertes de valeur, actifs non courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15665,'NSCF','EXPENSE','XXXXXX','6811',15664,'Dotations aux amortissements, provisions et pertes de valeur sur immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15666,'NSCF','EXPENSE','XXXXXX','68111',15665,'Dotations aux amortissements et provisions et pertes de valeur sur immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15667,'NSCF','EXPENSE','XXXXXX','68112',15665,'Pertes de valeur sur immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15668,'NSCF','EXPENSE','XXXXXX','6812',15664,'Dotations aux amortissements, provisions et pertes de valeur sur immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15669,'NSCF','EXPENSE','XXXXXX','68121',15668,'Dotations aux amortissements et provisions et immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15670,'NSCF','EXPENSE','XXXXXX','68122',15668,'Pertes de valeur sur immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15671,'NSCF','EXPENSE','XXXXXX','68123',15668,'Pertes de valeur sur les investissements en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15672,'NSCF','EXPENSE','XXXXXX','68126',15668,'Pertes de valeur sur immobilisations financières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15673,'NSCF','EXPENSE','XXXXXX','682',15663,'Dotations aux amortissements, provisions et pertes de valeur des biens mis en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15674,'NSCF','EXPENSE','XXXXXX','6821',15673,'Dotations aux amortissements, des biens mis en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15675,'NSCF','EXPENSE','XXXXXX','6822',15673,'Dotations aux provisions des biens mis-en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15676,'NSCF','EXPENSE','XXXXXX','6828',15673,'Pertes de valeur des biens mis en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15677,'NSCF','EXPENSE','XXXXXX','685',15663,'Dotations aux amortissements, provisions et pertes de valeur, actifs courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15678,'NSCF','EXPENSE','XXXXXX','6853',15677,'Dotations aux pertes de valeur sur stocks','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15679,'NSCF','EXPENSE','XXXXXX','6854',15677,'Dotations aux pertes de valeur sur créances','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15680,'NSCF','EXPENSE','XXXXXX','6855',15677,'Dotations aux provisions et pertes de valeur sur comptes financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15681,'NSCF','EXPENSE','XXXXXX','686',15663,'Dotations aux amortissements, provisions et pertes de valeur, éléments financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15682,'NSCF','EXPENSE','XXXXXX','6861',15681,'Dotations aux amortissements des primes de remboursement des obligations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15683,'NSCF','EXPENSE','XXXXXX','6865',15681,'Dotations aux provisions pour risques et charges financières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15684,'NSCF','EXPENSE','XXXXXX','6866',15681,'Dotations aux provisions pour dépréciations des éléments financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15685,'NSCF','EXPENSE','XXXXXX','68662',15684,'Dotations aux provisions pour dépréciations des immobilisations financières','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15686,'NSCF','EXPENSE','XXXXXX','68665',15684,'Dotations aux provisions pour les valeurs mobilières de placement','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15687,'NSCF','EXPENSE','XXXXXX','6868',15681,'Autres dotations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15688,'NSCF','EXPENSE','XXXXXX','69',15487,'Impôts sur les résultats et assimilés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15689,'NSCF','EXPENSE','XXXXXX','692',15688,'Imposition différée actif','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15690,'NSCF','EXPENSE','XXXXXX','693',15688,'Imposition différée passif','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15691,'NSCF','EXPENSE','XXXXXX','695',15688,'Impôts sur les bénéfices basés sur les résultats des activités ordinaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15692,'NSCF','EXPENSE','XXXXXX','698',15688,'Autres impôts sur les résultats','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15693,'NSCF','INCOME','XXXXXX','7',0,'COMPTES DE PRODUITS','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15694,'NSCF','INCOME','XXXXXX','70',15693,'Ventes de marchandises et de produits fabriqués, ventes de prestations de services et produits annexes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15695,'NSCF','INCOME','XXXXXX','700',15694,'Ventes de marchandises','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15696,'NSCF','INCOME','XXXXXX','701',15694,'Ventes de produits finis','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15697,'NSCF','INCOME','XXXXXX','702',15694,'Ventes de produits intermédiaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15698,'NSCF','INCOME','XXXXXX','703',15694,'Ventes de produits résiduels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15699,'NSCF','INCOME','XXXXXX','704',15694,'Ventes de travaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15700,'NSCF','INCOME','XXXXXX','705',15694,'Ventes d''études ','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15701,'NSCF','INCOME','XXXXXX','706',15694,'Autres prestations de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15702,'NSCF','INCOME','XXXXXX','708',15694,'Produits des activités annexes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15703,'NSCF','INCOME','XXXXXX','7081',15702,'Produits des services exploités dans l''intérêt du personnel','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15704,'NSCF','INCOME','XXXXXX','7082',15702,'Commissions et courtages','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15705,'NSCF','INCOME','XXXXXX','7083',15702,'Locations diverses','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15706,'NSCF','INCOME','XXXXXX','7084',15702,'Mise à disposition de personnel facturée','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15707,'NSCF','INCOME','XXXXXX','7085',15702,'Ports et frais accessoires facturés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15708,'NSCF','INCOME','XXXXXX','7086',15702,'Bonis sur reprises d''emballages consignés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15709,'NSCF','INCOME','XXXXXX','7087',15702,'Bonifications obtenues des clients et primes sur ventes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15710,'NSCF','INCOME','XXXXXX','7088',15702,'Autres produits d''activités annexes (cessions d''approvisionnements)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15711,'NSCF','INCOME','XXXXXX','709',15694,'Rabais, remises et ristournes accordés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15712,'NSCF','INCOME','XXXXXX','7090',15711,'R.RR, accordés sur ventes de marchandises','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15713,'NSCF','INCOME','XXXXXX','7091',15711,'R.RR, accordés sur ventes de produits finis','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15714,'NSCF','INCOME','XXXXXX','7092',15711,'R.RR, accordés sur ventes de produits intermédiaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15715,'NSCF','INCOME','XXXXXX','7094',15711,'R.RR, accordés sur ventes de travaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15716,'NSCF','INCOME','XXXXXX','7095',15711,'R.RR, accordés sur ventes d''études ','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15717,'NSCF','INCOME','XXXXXX','7096',15711,'R.RR, accordés sur autres prestations de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15718,'NSCF','INCOME','XXXXXX','7098',15711,'R.RR, accordés sur produits des activités annexes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15719,'NSCF','INCOME','XXXXXX','72',15693,'Production stockée ou déstockée','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15720,'NSCF','INCOME','XXXXXX','723',15719,'Variation de stocks d''encours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15721,'NSCF','INCOME','XXXXXX','7233',15720,'Variation des en-cours de production de biens','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15722,'NSCF','INCOME','XXXXXX','72331',15721,'Produits en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15723,'NSCF','INCOME','XXXXXX','72335',15721,'Travaux en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15724,'NSCF','INCOME','XXXXXX','7234',15720,'Variation des en-cours de production de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15725,'NSCF','INCOME','XXXXXX','72341',15724,'Etudes en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15726,'NSCF','INCOME','XXXXXX','72345',15724,'Autres prestations de services en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15727,'NSCF','INCOME','XXXXXX','724',15719,'Variation de stocks de produits','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15728,'NSCF','INCOME','XXXXXX','7241',15727,'Variation de stocks des produits intermédiaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15729,'NSCF','INCOME','XXXXXX','7245',15727,'Variation de stocks des produits finis','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15730,'NSCF','INCOME','XXXXXX','7248',15727,'Variation des stocks des produits résiduels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15731,'NSCF','INCOME','XXXXXX','73',15693,'Production immobilisée','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15732,'NSCF','INCOME','XXXXXX','731',15731,'Production immobilisée d''actifs incorporels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15733,'NSCF','INCOME','XXXXXX','732',15731,'Production immobilisée d''actifs corporels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15734,'NSCF','INCOME','XXXXXX','74',15693,'Subventions d''exploitation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15735,'NSCF','INCOME','XXXXXX','741',15734,'Subventions d''équilibre','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15736,'NSCF','INCOME','XXXXXX','748',15734,'Autres subventions d''exploitation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15737,'NSCF','INCOME','XXXXXX','75',15693,'Autres produits opérationnels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15738,'NSCF','INCOME','XXXXXX','751',15737,'Redevances pour concessions, brevets, licences, logiciels et valeurs similaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15739,'NSCF','INCOME','XXXXXX','7511',15738,'Redevances pour concessions, brevets, licences, logiciels, marques, procédés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15740,'NSCF','INCOME','XXXXXX','7516',15738,'Droits d''auteur et de reproduction','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15741,'NSCF','INCOME','XXXXXX','7518',15738,'Autres droits et valeurs similaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15742,'NSCF','INCOME','XXXXXX','752',15737,'Plus-value sur sortie d''actifs immobilisés non financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15743,'NSCF','INCOME','XXXXXX','753',15737,'Jetons de présence et rémunérations d''administrateurs ou de gérants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15744,'NSCF','INCOME','XXXXXX','754',15737,'Quotes-parts de subventions d''investissements virés au résultat de l''exercice','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15745,'NSCF','INCOME','XXXXXX','755',15737,'Quotes-parts de résultat sur opérations faites en commun','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15746,'NSCF','INCOME','XXXXXX','7551',15745,'Quote-part de perte transférée (comptabilité du gérant)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15747,'NSCF','INCOME','XXXXXX','7555',15745,'Quote-part de bénéfice attribuée (comptabilité des associés non-gérants)','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15748,'NSCF','INCOME','XXXXXX','756',15737,'Rentrées sur créances amorties','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15749,'NSCF','INCOME','XXXXXX','757',15737,'Produits exceptionnels sur opérations de gestion','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15750,'NSCF','INCOME','XXXXXX','758',15737,'Autres produits de gestion courante','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15751,'NSCF','INCOME','XXXXXX','76',15693,'Produits financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15752,'NSCF','INCOME','XXXXXX','761',15751,'Produits des participations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15753,'NSCF','INCOME','XXXXXX','7611',15752,'Revenus des titres de participation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15754,'NSCF','INCOME','XXXXXX','7616',15752,'Revenus sur autres formes de participation','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15755,'NSCF','INCOME','XXXXXX','7617',15752,'Revenus des créances rattachées à des participations','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15756,'NSCF','INCOME','XXXXXX','762',15751,'Revenus des actifs financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15757,'NSCF','INCOME','XXXXXX','7621',15756,'Revenus des titres immobilisés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15758,'NSCF','INCOME','XXXXXX','7626',15756,'Revenus des prêts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15759,'NSCF','INCOME','XXXXXX','7627',15756,'Revenus des créances immobilisées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15760,'NSCF','INCOME','XXXXXX','763',15751,'Revenus de créances','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15761,'NSCF','INCOME','XXXXXX','7631',15760,'Revenus des créances commerciales','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15762,'NSCF','INCOME','XXXXXX','7638',15760,'Revenus des créances diverses','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15763,'NSCF','INCOME','XXXXXX','765',15751,'Ecart d''évaluation sur actifs financiers - plus values','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15764,'NSCF','INCOME','XXXXXX','766',15751,'Gains de change','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15765,'NSCF','INCOME','XXXXXX','767',15751,'Produits nets sur cessions d''actifs financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15766,'NSCF','INCOME','XXXXXX','7671',15765,'Profits nets sur cession des part dans les entreprises liées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15767,'NSCF','INCOME','XXXXXX','7672',15765,'Profits nets sur cession d''actions propres','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15768,'NSCF','INCOME','XXXXXX','7673',15765,'Profits nets sur cession des autres titres conférant un droit de propriété','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15769,'NSCF','INCOME','XXXXXX','7676',15765,'Profits nets sur cession d''obligations, bons du trésor et bons de caisse à court terme','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15770,'NSCF','INCOME','XXXXXX','7678',15765,'Profits nets sur cession des autres valeurs mobilières et créances assimilées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15771,'NSCF','INCOME','XXXXXX','768',15751,'Autres produits financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15772,'NSCF','INCOME','XXXXXX','77',15693,'Eléments extraordinaires - produits','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15773,'NSCF','INCOME','XXXXXX','770',15772,'Produits sur exercices antérieurs','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15774,'NSCF','INCOME','XXXXXX','7700',15773,'Produits sur exercices antérieurs – ventes de marchandises','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15775,'NSCF','INCOME','XXXXXX','7701',15773,'Produits sur exercices antérieurs – ventes de produits finis','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15776,'NSCF','INCOME','XXXXXX','7702',15773,'Produits sur exercices antérieurs – ventes de produits intermédiaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15777,'NSCF','INCOME','XXXXXX','7703',15773,'Produits sur exercices antérieurs – ventes de produits résiduels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15778,'NSCF','INCOME','XXXXXX','7704',15773,'Produits sur exercices antérieurs – ventes de travaux','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15779,'NSCF','INCOME','XXXXXX','7705',15773,'Produits sur exercices antérieurs – ventes d''études ','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15780,'NSCF','INCOME','XXXXXX','7706',15773,'Produits sur exercices antérieurs – autres prestations de services','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15781,'NSCF','INCOME','XXXXXX','7708',15773,'Produits sur exercices antérieur - ventes de produits des activités annexes','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15782,'NSCF','INCOME','XXXXXX','775',15772,'Produits sur exercices antérieurs - autres produits opérationnels','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15783,'NSCF','INCOME','XXXXXX','7751',15782,'Redevances pour concessions, brevets, licence ; logiciels et valeurs similaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15784,'NSCF','INCOME','XXXXXX','7752',15782,'Plus-values sur sorties d''actifs immobilisés non financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15785,'NSCF','INCOME','XXXXXX','7753',15782,'Jetons de présence et rémunérations d''administrateurs ou de gérants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15786,'NSCF','INCOME','XXXXXX','7754',15782,'Quotes-parts de subventions d''investissements virées au résultat de l''exercice','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15787,'NSCF','INCOME','XXXXXX','7755',15782,'Quotes-parts de résultat sur opérations faites en commun','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15788,'NSCF','INCOME','XXXXXX','7756',15782,'Rentrées sur créances amorties','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15789,'NSCF','INCOME','XXXXXX','7757',15782,'Produits exceptionnels sur opération de gestion','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15790,'NSCF','INCOME','XXXXXX','7759',15782,'Produits sur exercices antérieurs - remboursement des immobilisations expropriées détruites','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15791,'NSCF','INCOME','XXXXXX','778',15772,'Autres éléments extraordinaires - produits','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15792,'NSCF','INCOME','XXXXXX','7783',15791,'Bonis provenant du rachat par l''entreprise d''actions et d''obligations émises par elle-même','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15793,'NSCF','INCOME','XXXXXX','7788',15791,'Autres Produits extraordinaires divers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15794,'NSCF','INCOME','XXXXXX','78',15693,'Reprises sur pertes de valeur et provisions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15795,'NSCF','INCOME','XXXXXX','781',15794,'Reprises d''exploitation sur pertes de valeurs et provisions - actifs non courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15796,'NSCF','INCOME','XXXXXX','7810',15795,'Reprises sur provisions et pertes de valeur des immobilisations incorporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15797,'NSCF','INCOME','XXXXXX','7811',15795,'Reprises sur provisions et pertes de valeur des immobilisations corporelles','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15798,'NSCF','INCOME','XXXXXX','7812',15795,'Reprises sur provisions des immobilisations en concession','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15799,'NSCF','INCOME','XXXXXX','7813',15795,'Reprises sur provisions d''immobilisations en cours','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15800,'NSCF','INCOME','XXXXXX','7816',15795,'Reprise sur pertes de valeur des participations et créances rattachées','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15801,'NSCF','INCOME','XXXXXX','7817',15795,'Reprise sur perte de valeur des autres titres immobilisés','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15802,'NSCF','INCOME','XXXXXX','7818',15795,'Reprise sur pertes de valeur des autres instruments financiers','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15803,'NSCF','INCOME','XXXXXX','785',15794,'Reprises d''exploitation sur pertes de valeur et provisions - actifs courants','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15804,'NSCF','INCOME','XXXXXX','7853',15803,'Reprises sur provisions et pertes de valeur sur les comptes de stocks','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15805,'NSCF','INCOME','XXXXXX','7854',15803,'Reprises sur provisions et pertes de valeur sur les comptes de créances','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15806,'NSCF','INCOME','XXXXXX','7855',15803,'Reprises sur provisions et pertes de valeur sur les comptes de trésorerie','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15807,'NSCF','INCOME','XXXXXX','786',15794,'Reprises financières sur pertes de valeurs et provisions','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15808,'NSCF','INCOME','XXXXXX','7860',15807,'Reprises provisions sur plus-values à réinvestir','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15809,'NSCF','INCOME','XXXXXX','7863',15807,'Reprises provisions sur pensions et obligations similaires','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15810,'NSCF','INCOME','XXXXXX','7865',15807,'Reprises provisions pour impôts','1');
    +INSERT IGNORE INTO llx_accounting_account (rowid, fk_pcg_version, pcg_type, pcg_subtype, account_number, account_parent, label, active) VALUES (15811,'NSCF','INCOME','XXXXXX','7868',15807,'Reprises autres provisions pour charges - passifs non courants','1');
    diff --git a/htdocs/install/mysql/data/llx_accounting_account_es.sql b/htdocs/install/mysql/data/llx_accounting_account_es.sql
    index 3000cef31d2..ef7d5aaa634 100644
    --- a/htdocs/install/mysql/data/llx_accounting_account_es.sql
    +++ b/htdocs/install/mysql/data/llx_accounting_account_es.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2011-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
     --
    diff --git a/htdocs/install/mysql/data/llx_accounting_account_fr.sql b/htdocs/install/mysql/data/llx_accounting_account_fr.sql
    index 68ed8618bc7..ef8ef176597 100644
    --- a/htdocs/install/mysql/data/llx_accounting_account_fr.sql
    +++ b/htdocs/install/mysql/data/llx_accounting_account_fr.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007      Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2011-2017 Alexandre Spangaro   <aspangaro@zendsi.com>
     --
    diff --git a/htdocs/install/mysql/data/llx_c_action_trigger.sql b/htdocs/install/mysql/data/llx_c_action_trigger.sql
    index 35077eb5bc5..143e30e8fb7 100644
    --- a/htdocs/install/mysql/data/llx_c_action_trigger.sql
    +++ b/htdocs/install/mysql/data/llx_c_action_trigger.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2013  Laurent Destailleur     <eldy@users.sourceforge.net>
     -- Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
     -- Copyright (C) 2004       Guillaume Delecourt     <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2011  Regis Houssin           <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2011  Regis Houssin           <regis.houssin@inodbox.com>
     -- Copyright (C) 2007       Patrick Raguin          <patrick.raguin@gmail.com>
     -- Copyright (C) 2010-2013  Juanjo Menent           <jmenent@2byte.es>
     -- Copyright (C) 2013       Cedric Gross            <c.gross@kreiz-it.fr>
    @@ -36,25 +36,30 @@ delete from llx_c_action_trigger;
     -- actions enabled by default (constant created for that) when we enable module agenda
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_CREATE','Third party created','Executed when a third party is created','societe',1);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_SENTBYMAIL','Mails sent from third party card','Executed when you send email from third party card','societe',1);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_DELETE','Third party deleted','Executed when you delete third party','societe',1);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_SIGNED','Customer proposal closed signed','Executed when a customer proposal is closed signed','propal',2);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_REFUSED','Customer proposal closed refused','Executed when a customer proposal is closed refused','propal',2);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLASSIFY_BILLED','Customer proposal set billed','Executed when a customer proposal is set to billed','propal',2);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SENTBYMAIL','Customer order sent by mail','Executed when a customer order is sent by mail ','commande',5);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_DELETE','Customer order deleted','Executed when a customer order is deleted','commande',5);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is conceled','facture',8);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',9);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_DELETE','Customer invoice deleted','Executed when a customer invoice is deleted','facture',9);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_VALIDATE','Price request validated','Executed when a commercial proposal is validated','proposal_supplier',10);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_SENTBYMAIL','Price request sent by mail','Executed when a commercial proposal is sent by mail','proposal_supplier',10);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_CLOSE_SIGNED','Price request closed signed','Executed when a customer proposal is closed signed','proposal_supplier',10);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_CLOSE_REFUSED','Price request closed refused','Executed when a customer proposal is closed refused','proposal_supplier',10);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_DELETE','Price request deleted','Executed when a customer proposal delete','proposal_supplier',10);
     --insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_CREATE','Supplier order created','Executed when a supplier order is created','order_supplier',11);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_VALIDATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',12);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',13);
    @@ -63,15 +68,19 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_SENTBYMAIL','Supplier order sent by mail','Executed when a supplier order is sent by mail','order_supplier',14);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_CLASSIFY_BILLED','Supplier order set billed','Executed when a supplier order is set as billed','order_supplier',14);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_DELETE','Supplier order deleted','Executed when a supplier order is deleted','order_supplier',14);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_VALIDATE','Supplier invoice validated','Executed when a supplier invoice is validated','invoice_supplier',15);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_UNVALIDATE','Supplier invoice unvalidated','Executed when a supplier invoice status is set back to draft','invoice_supplier',15);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_PAYED','Supplier invoice payed','Executed when a supplier invoice is payed','invoice_supplier',16);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_SENTBYMAIL','Supplier invoice sent by mail','Executed when a supplier invoice is sent by mail','invoice_supplier',17);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_CANCELED','Supplier invoice cancelled','Executed when a supplier invoice is cancelled','invoice_supplier',17);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_DELETE','Supplier invoice deleted','Executed when a supplier invoice is deleted','invoice_supplier',17);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_SENTBYMAIL','Contract sent by mail','Executed when a contract is sent by mail','contrat',18);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_DELETE','Contract deleted','Executed when a contract is deleted','contrat',18);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_DELETE','Shipping sent is deleted','Executed when a shipping is deleted','shipping',21);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SENTBYMAIL','Mails sent from member card','Executed when you send email from member card','member',23);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SUBSCRIPTION_CREATE','Member subscribtion recorded','Executed when a member subscribtion is deleted','member',24);
    @@ -84,12 +93,16 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',33);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_REOPEN','Intervention opened','Executed when a intervention is re-opened','ficheinter',34);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',35);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_DELETE','Intervention is deleted','Executed when a intervention is deleted','ficheinter',35);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_CREATE','Product or service created','Executed when a product or sevice is created','product',40);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_DELETE','Product or service deleted','Executed when a product or sevice is deleted','product',42);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_CREATE','Expense report created','Executed when an expense report is created','expensereport',201);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_PAYED','Expense report billed','Executed when an expense report is set as billed','expensereport',204);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_VALIDATE','Project validation','Executed when a project is validated','project',141);
     insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_DELETE','Project deleted','Executed when a project is deleted','project',143);
     -- actions not enabled by default (no constant created for that) when we enable module agenda 
    diff --git a/htdocs/install/mysql/data/llx_c_actioncomm.sql b/htdocs/install/mysql/data/llx_c_actioncomm.sql
    index 6b89ed74dd2..7f7c3d6ea2e 100644
    --- a/htdocs/install/mysql/data/llx_c_actioncomm.sql
    +++ b/htdocs/install/mysql/data/llx_c_actioncomm.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_chargesociales.sql b/htdocs/install/mysql/data/llx_c_chargesociales.sql
    index d598f6fef60..d59e0cbc290 100644
    --- a/htdocs/install/mysql/data/llx_c_chargesociales.sql
    +++ b/htdocs/install/mysql/data/llx_c_chargesociales.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_civilite.sql b/htdocs/install/mysql/data/llx_c_civilite.sql
    index 0d7c0753131..a14e84be27d 100644
    --- a/htdocs/install/mysql/data/llx_c_civilite.sql
    +++ b/htdocs/install/mysql/data/llx_c_civilite.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_currencies.sql b/htdocs/install/mysql/data/llx_c_currencies.sql
    index 5f561f26ba0..8446618e9b5 100644
    --- a/htdocs/install/mysql/data/llx_c_currencies.sql
    +++ b/htdocs/install/mysql/data/llx_c_currencies.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2011 	   Juanjo Menent        <jmenent@2byte.es>
     --
    diff --git a/htdocs/install/mysql/data/llx_c_ecotaxe.sql b/htdocs/install/mysql/data/llx_c_ecotaxe.sql
    index 845ffa1e685..12505ba81c6 100644
    --- a/htdocs/install/mysql/data/llx_c_ecotaxe.sql
    +++ b/htdocs/install/mysql/data/llx_c_ecotaxe.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2018 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2018 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_effectif.sql b/htdocs/install/mysql/data/llx_c_effectif.sql
    index 82302c61a07..6e9bc4ed0e9 100644
    --- a/htdocs/install/mysql/data/llx_c_effectif.sql
    +++ b/htdocs/install/mysql/data/llx_c_effectif.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_forme_juridique.sql b/htdocs/install/mysql/data/llx_c_forme_juridique.sql
    index 8948984e907..ec8e687203f 100644
    --- a/htdocs/install/mysql/data/llx_c_forme_juridique.sql
    +++ b/htdocs/install/mysql/data/llx_c_forme_juridique.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2010-2016 Juanjo Menent        <jmenent@2byte.es>
     -- Copyright (C) 2012 	   Sebastian Neuwert    <sebastian.neuwert@modula71.de>
    @@ -89,9 +89,9 @@ insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'29','Group
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'31','Personne morale de droit étranger, immatriculée au RCS');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'32','Personne morale de droit étranger, non immatriculée au RCS');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'35','Régime auto-entrepreneur');
    -                                                                     
    +
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'41','Etablissement public ou régie à caractère industriel ou commercial');
    -                                                                     
    +
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'51','Société coopérative commerciale particulière');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'52','Société en nom collectif');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'53','Société en commandite');
    @@ -108,18 +108,18 @@ insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'63','Soci
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'64','Société non commerciale d assurances');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'65','Société civile');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'69','Personnes de droit privé inscrites au RCS');
    -                                                                     
    +
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'71','Administration de l état');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'72','Collectivité territoriale');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'73','Etablissement public administratif');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'74','Personne morale de droit public administratif');
    -                                                                     
    +
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'81','Organisme gérant régime de protection social à adhésion obligatoire');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'82','Organisme mutualiste');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'83','Comité d entreprise');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'84','Organisme professionnel');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'85','Organisme de retraite à adhésion non obligatoire');
    -                                                                     
    +
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'91','Syndicat de propriétaires');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'92','Association loi 1901 ou assimilé');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (1,'93','Fondation');
    @@ -159,6 +159,17 @@ insert into llx_c_forme_juridique (fk_pays, code, libelle) values (5, '506', 'KG
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (5, '507', 'Ltd. - Limited Company');
     insert into llx_c_forme_juridique (fk_pays, code, libelle) values (5, '508', 'OHG - Offene Handelsgesellschaft');
     
    +-- Denmark
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8001', 'Aktieselvskab A/S');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8002', 'Anparts Selvskab ApS');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8003', 'Personlig ejet selvskab');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8004', 'Iværksætterselvskab IVS');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8005', 'Interessentskab I/S');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8006', 'Holdingselskab');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8007', 'Selskab Med Begrænset Hæftelse SMBA');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8008', 'Kommanditselskab K/S');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8009', 'SPE-selskab');
    +
     -- Greece
     INSERT INTO llx_c_forme_juridique (code,fk_pays,libelle,isvatexempted,active) VALUES ('10201',102,'Ατομική επιχείρηση',0,1);
     INSERT INTO llx_c_forme_juridique (code,fk_pays,libelle,isvatexempted,active) VALUES ('10202',102,'Εταιρική  επιχείρηση',0,1);
    @@ -313,4 +324,5 @@ INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (178,
     INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (178, '17802', 'Asociación General', 1);
     INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (178, '17803', 'Sociedad de Responsabilidad Limitada', 1);
     INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (178, '17804', 'Sociedad Civil', 1);
    -INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (178, '17805', 'Sociedad Anónima', 1);
    \ No newline at end of file
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle, active) VALUES (178, '17805', 'Sociedad Anónima', 1);
    +
    diff --git a/htdocs/install/mysql/data/llx_c_holiday_type.sql b/htdocs/install/mysql/data/llx_c_holiday_type.sql
    index 87eb67be131..64ab84f410f 100644
    --- a/htdocs/install/mysql/data/llx_c_holiday_type.sql
    +++ b/htdocs/install/mysql/data/llx_c_holiday_type.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2012 	   Tommaso Basilici       <t.basilici@19.coop>
     --
    diff --git a/htdocs/install/mysql/data/llx_c_incoterms.sql b/htdocs/install/mysql/data/llx_c_incoterms.sql
    index ad9b09f09fc..3294c8285a3 100644
    --- a/htdocs/install/mysql/data/llx_c_incoterms.sql
    +++ b/htdocs/install/mysql/data/llx_c_incoterms.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_input_method.sql b/htdocs/install/mysql/data/llx_c_input_method.sql
    index 062110f6c43..f3bd0fa6590 100644
    --- a/htdocs/install/mysql/data/llx_c_input_method.sql
    +++ b/htdocs/install/mysql/data/llx_c_input_method.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_paiement.sql b/htdocs/install/mysql/data/llx_c_paiement.sql
    index 2e459cd12a7..b0d9d0ed233 100644
    --- a/htdocs/install/mysql/data/llx_c_paiement.sql
    +++ b/htdocs/install/mysql/data/llx_c_paiement.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_paper_format.sql b/htdocs/install/mysql/data/llx_c_paper_format.sql
    index e88393ddfad..8df46f0d325 100644
    --- a/htdocs/install/mysql/data/llx_c_paper_format.sql
    +++ b/htdocs/install/mysql/data/llx_c_paper_format.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_payment_term.sql b/htdocs/install/mysql/data/llx_c_payment_term.sql
    index 852ff9db4cb..232e0ebc865 100644
    --- a/htdocs/install/mysql/data/llx_c_payment_term.sql
    +++ b/htdocs/install/mysql/data/llx_c_payment_term.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2012 	   Tommaso Basilici       <t.basilici@19.coop>
     --
    diff --git a/htdocs/install/mysql/data/llx_c_propalst.sql b/htdocs/install/mysql/data/llx_c_propalst.sql
    index 908ed48f805..b6d8b7f56e6 100644
    --- a/htdocs/install/mysql/data/llx_c_propalst.sql
    +++ b/htdocs/install/mysql/data/llx_c_propalst.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_prospectlevel.sql b/htdocs/install/mysql/data/llx_c_prospectlevel.sql
    index 6982f2d2d1e..c0bc26d883f 100644
    --- a/htdocs/install/mysql/data/llx_c_prospectlevel.sql
    +++ b/htdocs/install/mysql/data/llx_c_prospectlevel.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_shipment_mode.sql b/htdocs/install/mysql/data/llx_c_shipment_mode.sql
    index 189bd3ea94b..1c154b394ca 100644
    --- a/htdocs/install/mysql/data/llx_c_shipment_mode.sql
    +++ b/htdocs/install/mysql/data/llx_c_shipment_mode.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_stcomm.sql b/htdocs/install/mysql/data/llx_c_stcomm.sql
    index e1bf526d489..088be6c83ec 100644
    --- a/htdocs/install/mysql/data/llx_c_stcomm.sql
    +++ b/htdocs/install/mysql/data/llx_c_stcomm.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_tva.sql b/htdocs/install/mysql/data/llx_c_tva.sql
    index 91dbe5c1cf5..17c8b7489ee 100644
    --- a/htdocs/install/mysql/data/llx_c_tva.sql
    +++ b/htdocs/install/mysql/data/llx_c_tva.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2010-2016 Juanjo Menent        <jmenent@2byte.es>
     -- Copyright (C) 2012      Sebastian Neuwert    <sebastian.neuwert@modula71.de>
    diff --git a/htdocs/install/mysql/data/llx_c_type_contact.sql b/htdocs/install/mysql/data/llx_c_type_contact.sql
    index 9a4175bef81..62107525ff9 100644
    --- a/htdocs/install/mysql/data/llx_c_type_contact.sql
    +++ b/htdocs/install/mysql/data/llx_c_type_contact.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_type_container.sql b/htdocs/install/mysql/data/llx_c_type_container.sql
    index 1e915412a12..403ddd8c252 100644
    --- a/htdocs/install/mysql/data/llx_c_type_container.sql
    +++ b/htdocs/install/mysql/data/llx_c_type_container.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_type_fees.sql b/htdocs/install/mysql/data/llx_c_type_fees.sql
    index 752d6a6dd57..d78455e2939 100644
    --- a/htdocs/install/mysql/data/llx_c_type_fees.sql
    +++ b/htdocs/install/mysql/data/llx_c_type_fees.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2017      ATM Consulting       <contact@atm-consulting.fr>
     -- Copyright (C) 2017      Pierre-Henry Favre   <phf@atm-consulting.fr>
    diff --git a/htdocs/install/mysql/data/llx_c_type_resource.sql b/htdocs/install/mysql/data/llx_c_type_resource.sql
    index 8b7ca68ecf8..66480157eef 100644
    --- a/htdocs/install/mysql/data/llx_c_type_resource.sql
    +++ b/htdocs/install/mysql/data/llx_c_type_resource.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_c_typent.sql b/htdocs/install/mysql/data/llx_c_typent.sql
    index 4365a2e99a6..be24586f36d 100644
    --- a/htdocs/install/mysql/data/llx_c_typent.sql
    +++ b/htdocs/install/mysql/data/llx_c_typent.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/data/llx_const.sql b/htdocs/install/mysql/data/llx_const.sql
    index 5d3a96d7df2..9eb31db347a 100644
    --- a/htdocs/install/mysql/data/llx_const.sql
    +++ b/htdocs/install/mysql/data/llx_const.sql
    @@ -3,7 +3,7 @@
     -- Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
     -- Copyright (C) 2004      Guillaume Delecourt  <guillaume.delecourt@opensides.be>
    --- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2007 	   Patrick Raguin       <patrick.raguin@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/migration/8.0.0-9.0.0.sql b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql
    new file mode 100644
    index 00000000000..3a25b7030e0
    --- /dev/null
    +++ b/htdocs/install/mysql/migration/8.0.0-9.0.0.sql
    @@ -0,0 +1,226 @@
    +--
    +-- Be carefull to requests order.
    +-- This file must be loaded by calling /install/index.php page
    +-- when current version is 9.0.0 or higher.
    +--
    +-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y
    +-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y
    +-- To rename a table:       ALTER TABLE llx_table RENAME TO llx_table_new;
    +-- To add a column:         ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol;
    +-- To rename a column:      ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60);
    +-- To drop a column:        ALTER TABLE llx_table DROP COLUMN oldname;
    +-- To change type of field: ALTER TABLE llx_table MODIFY COLUMN name varchar(60);
    +-- To drop a foreign key:   ALTER TABLE llx_table DROP FOREIGN KEY fk_name;
    +-- To create a unique index ALTER TABLE llx_table ADD UNIQUE INDEX uk_table_field (field);
    +-- To drop an index:        -- VMYSQL4.1 DROP INDEX nomindex on llx_table
    +-- To drop an index:        -- VPGSQL8.2 DROP INDEX nomindex
    +-- To make pk to be auto increment (mysql):    -- VMYSQL4.3 ALTER TABLE llx_table CHANGE COLUMN rowid rowid INTEGER NOT NULL AUTO_INCREMENT;
    +-- To make pk to be auto increment (postgres):
    +-- -- VPGSQL8.2 CREATE SEQUENCE llx_table_rowid_seq OWNED BY llx_table.rowid;
    +-- -- VPGSQL8.2 ALTER TABLE llx_table ADD PRIMARY KEY (rowid);
    +-- -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN rowid SET DEFAULT nextval('llx_table_rowid_seq');
    +-- -- VPGSQL8.2 SELECT setval('llx_table_rowid_seq', MAX(rowid)) FROM llx_table;
    +-- To set a field as NULL:                     -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NULL;
    +-- To set a field as NULL:                     -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name DROP NOT NULL;
    +-- To set a field as NOT NULL:                 -- VMYSQL4.3 ALTER TABLE llx_table MODIFY COLUMN name varchar(60) NOT NULL;
    +-- To set a field as NOT NULL:                 -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET NOT NULL;
    +-- To set a field as default NULL:             -- VPGSQL8.2 ALTER TABLE llx_table ALTER COLUMN name SET DEFAULT NULL;
    +-- Note: fields with type BLOB/TEXT can't have default value.
    +
    +
    +-- Missing in 8.0
    +ALTER TABLE llx_accounting_account DROP FOREIGN KEY fk_accounting_account_fk_pcg_version;
    +ALTER TABLE llx_accounting_account MODIFY COLUMN fk_pcg_version varchar(32) NOT NULL;
    +ALTER TABLE llx_accounting_system MODIFY COLUMN pcg_version varchar(32) NOT NULL;
    +ALTER TABLE llx_accounting_account ADD CONSTRAINT fk_accounting_account_fk_pcg_version    FOREIGN KEY (fk_pcg_version)    REFERENCES llx_accounting_system (pcg_version);
    +
    +ALTER TABLE llx_facture ADD COLUMN module_source varchar(32);
    +ALTER TABLE llx_facture ADD COLUMN pos_source varchar(32);
    +
    +create table llx_facture_rec_extrafields
    +(
    +  rowid                     integer AUTO_INCREMENT PRIMARY KEY,
    +  tms                       timestamp,
    +  fk_object                 integer NOT NULL,
    +  import_key                varchar(14)
    +) ENGINE=innodb;
    +
    +
    +-- For 9.0
    +ALTER TABLE llx_extrafields ADD COLUMN help text NULL;
    +ALTER TABLE llx_extrafields ADD COLUMN totalizable boolean DEFAULT FALSE after list;
    +ALTER TABLE llx_product_fournisseur_price ADD COLUMN desc_fourn text after ref_fourn;
    +
    +
    +ALTER TABLE llx_user ADD COLUMN dateemploymentend date after dateemployment;
    +
    +ALTER TABLE llx_stock_mouvement ADD COLUMN fk_project integer;
    +ALTER TABLE llx_c_action_trigger MODIFY COLUMN elementtype varchar(32);
    +ALTER TABLE llx_c_field_list ADD COLUMN visible tinyint	DEFAULT 1 NOT NULL AFTER search;
    +
    +
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_DELETE','Third party deleted','Executed when you delete third party','societe',1);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_DELETE','Customer order deleted','Executed when a customer order is deleted','commande',5);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_DELETE','Customer invoice deleted','Executed when a customer invoice is deleted','facture',9);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_DELETE','Price request deleted','Executed when a customer proposal delete','proposal_supplier',10);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_DELETE','Supplier order deleted','Executed when a supplier order is deleted','order_supplier',14);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_DELETE','Supplier invoice deleted','Executed when a supplier invoice is deleted','invoice_supplier',17);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_DELETE','Contract deleted','Executed when a contract is deleted','contrat',18);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_DELETE','Intervention is deleted','Executed when a intervention is deleted','ficheinter',35);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',204);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202);
    +insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203);
    +
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8001', 'Aktieselvskab A/S');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8002', 'Anparts Selvskab ApS');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8003', 'Personlig ejet selvskab');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8004', 'Iværksætterselvskab IVS');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8005', 'Interessentskab I/S');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8006', 'Holdingselskab');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8007', 'Selskab Med Begrænset Hæftelse SMBA');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8008', 'Kommanditselskab K/S');
    +INSERT INTO llx_c_forme_juridique (fk_pays, code, libelle) VALUES (80, '8009', 'SPE-selskab');
    +
    +ALTER TABLE llx_payment_salary ADD COLUMN ref varchar(30) NULL after rowid;
    +ALTER TABLE llx_payment_salary ADD COLUMN fk_projet integer DEFAULT NULL after amount;
    +
    +ALTER TABLE llx_payment_various ADD COLUMN ref varchar(30) NULL after rowid;
    +
    +ALTER TABLE llx_categorie ADD COLUMN ref_ext varchar(255);
    +
    +ALTER TABLE llx_paiement ADD COLUMN ext_payment_id varchar(128);
    +ALTER TABLE llx_paiement ADD COLUMN ext_payment_site varchar(128);
    +
    +ALTER TABLE llx_societe ADD COLUMN twitter  varchar(255) after skype;
    +ALTER TABLE llx_societe ADD COLUMN facebook varchar(255) after skype;
    +ALTER TABLE llx_societe ADD COLUMN instagram  varchar(255) after skype;
    +ALTER TABLE llx_societe ADD COLUMN snapchat  varchar(255) after skype;
    +ALTER TABLE llx_societe ADD COLUMN googleplus  varchar(255) after skype;
    +ALTER TABLE llx_societe ADD COLUMN youtube  varchar(255) after skype;
    +ALTER TABLE llx_societe ADD COLUMN whatsapp  varchar(255) after skype;
    +
    +ALTER TABLE llx_socpeople ADD COLUMN twitter  varchar(255) after skype;
    +ALTER TABLE llx_socpeople ADD COLUMN facebook varchar(255) after skype;
    +ALTER TABLE llx_socpeople ADD COLUMN instagram  varchar(255) after skype;
    +ALTER TABLE llx_socpeople ADD COLUMN snapchat  varchar(255) after skype;
    +ALTER TABLE llx_socpeople ADD COLUMN googleplus  varchar(255) after skype;
    +ALTER TABLE llx_socpeople ADD COLUMN youtube  varchar(255) after skype;
    +ALTER TABLE llx_socpeople ADD COLUMN whatsapp  varchar(255) after skype;
    +
    +ALTER TABLE llx_adherent ADD COLUMN skype  varchar(255);
    +ALTER TABLE llx_adherent ADD COLUMN twitter  varchar(255);
    +ALTER TABLE llx_adherent ADD COLUMN facebook varchar(255);
    +ALTER TABLE llx_adherent ADD COLUMN instagram  varchar(255);
    +ALTER TABLE llx_adherent ADD COLUMN snapchat  varchar(255);
    +ALTER TABLE llx_adherent ADD COLUMN googleplus  varchar(255);
    +ALTER TABLE llx_adherent ADD COLUMN youtube  varchar(255);
    +ALTER TABLE llx_adherent ADD COLUMN whatsapp  varchar(255);
    +
    +ALTER TABLE llx_user ADD COLUMN skype  varchar(255);
    +ALTER TABLE llx_user ADD COLUMN twitter  varchar(255);
    +ALTER TABLE llx_user ADD COLUMN facebook varchar(255);
    +ALTER TABLE llx_user ADD COLUMN instagram  varchar(255);
    +ALTER TABLE llx_user ADD COLUMN snapchat  varchar(255);
    +ALTER TABLE llx_user ADD COLUMN googleplus  varchar(255);
    +ALTER TABLE llx_user ADD COLUMN youtube  varchar(255);
    +ALTER TABLE llx_user ADD COLUMN whatsapp  varchar(255);
    +
    +
    +ALTER TABLE llx_website CHANGE COLUMN fk_user_create fk_user_creat integer;
    +ALTER TABLE llx_website_page CHANGE COLUMN fk_user_create fk_user_creat integer;
    +
    +ALTER TABLE llx_website ADD COLUMN maincolor varchar(16);
    +ALTER TABLE llx_website ADD COLUMN maincolorbis varchar(16);
    +
    +
    +CREATE TABLE llx_takepos_floor_tables(
    +    rowid integer AUTO_INCREMENT PRIMARY KEY,
    +    entity integer DEFAULT 1 NOT NULL,
    +    label varchar(255),
    +    leftpos float,
    +    toppos float,
    +    floor smallint
    +) ENGINE=innodb;
    +
    +
    +UPDATE llx_c_payment_term SET decalage = nbjour, nbjour = 0 where decalage IS NULL AND type_cdr = 2;
    +
    +UPDATE llx_holiday SET ref = rowid WHERE ref IS NULL;
    +
    +
    +
    +CREATE TABLE llx_emailcollector_emailcollector(
    +        -- BEGIN MODULEBUILDER FIELDS
    +        rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
    +        entity integer DEFAULT 1 NOT NULL,
    +        ref varchar(128) NOT NULL,
    +        label varchar(255),
    +        description text,
    +        host varchar(255),
    +        user varchar(128),
    +        password varchar(128),
    +        source_directory varchar(255) NOT NULL,
    +        target_directory varchar(255),
    +        datelastresult datetime,
    +        codelastresult varchar(16),
    +        lastresult varchar(255),
    +        note_public text,
    +        note_private text,
    +        date_creation datetime NOT NULL,
    +        tms timestamp NOT NULL,
    +        fk_user_creat integer NOT NULL,
    +        fk_user_modif integer,
    +        import_key varchar(14),
    +        status integer NOT NULL
    +        -- END MODULEBUILDER FIELDS
    +) ENGINE=innodb;
    +
    +ALTER TABLE llx_emailcollector_emailcollector ADD INDEX idx_emailcollector_entity (entity);
    +ALTER TABLE llx_emailcollector_emailcollector ADD INDEX idx_emailcollector_status (status);
    +
    +
    +CREATE TABLE llx_emailcollector_emailcollectorfilter(
    +	-- BEGIN MODULEBUILDER FIELDS
    +	rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
    +	fk_emailcollector INTEGER NOT NULL,
    +	type varchar(128) NOT NULL,
    +	rulevalue varchar(255) NULL,
    +	date_creation datetime NOT NULL,
    +	tms timestamp NOT NULL,
    +	fk_user_creat integer NOT NULL,
    +	fk_user_modif integer,
    +	import_key varchar(14),
    +	status integer NOT NULL
    +	-- END MODULEBUILDER FIELDS
    +) ENGINE=innodb;
    +
    +CREATE TABLE llx_emailcollector_emailcollectoraction(
    +	-- BEGIN MODULEBUILDER FIELDS
    +	rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
    +	fk_emailcollector INTEGER NOT NULL,
    +	type varchar(128) NOT NULL,
    +	actionparam varchar(255) NULL,
    +	date_creation datetime NOT NULL,
    +	tms timestamp NOT NULL,
    +	fk_user_creat integer NOT NULL,
    +	fk_user_modif integer,
    +	position integer DEFAULT 0,
    +	import_key varchar(14),
    +	status integer NOT NULL
    +	-- END MODULEBUILDER FIELDS
    +) ENGINE=innodb;
    +
    +ALTER TABLE llx_emailcollector_emailcollectorfilter ADD INDEX idx_emailcollector_fk_emailcollector (fk_emailcollector);
    +ALTER TABLE llx_emailcollector_emailcollectorfilter ADD CONSTRAINT fk_emailcollectorfilter_fk_emailcollector FOREIGN KEY (fk_emailcollector) REFERENCES llx_emailcollector_emailcollector(rowid);
    +
    +ALTER TABLE llx_emailcollector_emailcollectoraction ADD INDEX idx_emailcollector_fk_emailcollector (fk_emailcollector);
    +ALTER TABLE llx_emailcollector_emailcollectoraction ADD CONSTRAINT fk_emailcollectoraction_fk_emailcollector FOREIGN KEY (fk_emailcollector) REFERENCES llx_emailcollector_emailcollector(rowid);
    +
    +
    +ALTER TABLE llx_emailcollector_emailcollectorfilter ADD UNIQUE INDEX uk_emailcollector_emailcollectorfilter (fk_emailcollector, type, rulevalue);
    +ALTER TABLE llx_emailcollector_emailcollectoraction ADD UNIQUE INDEX uk_emailcollector_emailcollectoraction (fk_emailcollector, type);
    +
    +
    +
    +
    diff --git a/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql b/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql
    index 4169b858536..af6cd66826d 100644
    --- a/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql
    +++ b/htdocs/install/mysql/tables/llx_accounting_bookkeeping.sql
    @@ -22,8 +22,8 @@ CREATE TABLE llx_accounting_bookkeeping
       rowid                 integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
       entity                integer DEFAULT 1 NOT NULL,	-- 					| multi company id
       doc_date              date NOT NULL,				-- FEC:PieceDate
    -  doc_type              varchar(30) NOT NULL,		-- FEC:PieceRef		| facture_client/reglement_client/facture_fournisseur/reglement_fournisseur
    -  doc_ref               varchar(300) NOT NULL,		-- 					| facture_client/reglement_client/... reference number
    +  doc_type              varchar(30) NOT NULL,		-- 					| facture_client/reglement_client/facture_fournisseur/reglement_fournisseur
    +  doc_ref               varchar(300) NOT NULL,		-- FEC:PieceRef		| facture_client/reglement_client/... reference number
       fk_doc                integer NOT NULL,			-- 					| facture_client/reglement_client/... rowid
       fk_docdet             integer NOT NULL,			-- 					| facture_client/reglement_client/... line rowid
       thirdparty_code       varchar(32),                -- Third party code (customer or supplier) when record is saved (may help debug) 
    diff --git a/htdocs/install/mysql/tables/llx_actioncomm.key.sql b/htdocs/install/mysql/tables/llx_actioncomm.key.sql
    index 257eb22a240..71fe3976a81 100644
    --- a/htdocs/install/mysql/tables/llx_actioncomm.key.sql
    +++ b/htdocs/install/mysql/tables/llx_actioncomm.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2005-2017	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2011		Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011		Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_actioncomm.sql b/htdocs/install/mysql/tables/llx_actioncomm.sql
    index 72321e19db5..8aa7fe47f3e 100644
    --- a/htdocs/install/mysql/tables/llx_actioncomm.sql
    +++ b/htdocs/install/mysql/tables/llx_actioncomm.sql
    @@ -1,7 +1,7 @@
     -- ========================================================================
     -- Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2005-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2011      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_adherent.key.sql b/htdocs/install/mysql/tables/llx_adherent.key.sql
    index 2ff771b878c..c875e2cee20 100644
    --- a/htdocs/install/mysql/tables/llx_adherent.key.sql
    +++ b/htdocs/install/mysql/tables/llx_adherent.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2009 Laurent Destailleur <eldy@users.sourceforge.net>
    --- Copyright (C) 2009 Regis Houssin       <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009 Regis Houssin       <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_adherent.sql b/htdocs/install/mysql/tables/llx_adherent.sql
    index 37b01a59dc3..96da4ffb326 100644
    --- a/htdocs/install/mysql/tables/llx_adherent.sql
    +++ b/htdocs/install/mysql/tables/llx_adherent.sql
    @@ -2,7 +2,7 @@
     -- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
     -- Copyright (C) 2006-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    @@ -46,7 +46,16 @@ create table llx_adherent
       state_id         integer,
       country          integer,
       email            varchar(255),
    +
       skype            varchar(255),
    +  twitter          varchar(255),                        		--
    +  facebook         varchar(255),                        		--
    +  instagram        varchar(255),                        		--
    +  snapchat         varchar(255),                        		--
    +  googleplus       varchar(255),                        		--
    +  youtube          varchar(255),                        		--
    +  whatsapp         varchar(255),                        		--
    +
       phone            varchar(30),
       phone_perso      varchar(30),
       phone_mobile     varchar(30),
    diff --git a/htdocs/install/mysql/tables/llx_adherent_extrafields.key.sql b/htdocs/install/mysql/tables/llx_adherent_extrafields.key.sql
    index 530bc514c23..6989d271ccc 100644
    --- a/htdocs/install/mysql/tables/llx_adherent_extrafields.key.sql
    +++ b/htdocs/install/mysql/tables/llx_adherent_extrafields.key.sql
    @@ -1,7 +1,7 @@
     -- ===================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2011      Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_adherent_extrafields.sql b/htdocs/install/mysql/tables/llx_adherent_extrafields.sql
    index a4a4851d9a8..3ad91052c24 100644
    --- a/htdocs/install/mysql/tables/llx_adherent_extrafields.sql
    +++ b/htdocs/install/mysql/tables/llx_adherent_extrafields.sql
    @@ -1,7 +1,7 @@
     -- ===================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_adherent_type.key.sql b/htdocs/install/mysql/tables/llx_adherent_type.key.sql
    index 870f0f3d5a0..f70280c41c4 100644
    --- a/htdocs/install/mysql/tables/llx_adherent_type.key.sql
    +++ b/htdocs/install/mysql/tables/llx_adherent_type.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2007-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_adherent_type.sql b/htdocs/install/mysql/tables/llx_adherent_type.sql
    index c20eade92d6..88867f9d2ad 100644
    --- a/htdocs/install/mysql/tables/llx_adherent_type.sql
    +++ b/htdocs/install/mysql/tables/llx_adherent_type.sql
    @@ -1,7 +1,7 @@
     -- ===================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_bank_account.key.sql b/htdocs/install/mysql/tables/llx_bank_account.key.sql
    index c5f2786fd24..7ef818522a7 100644
    --- a/htdocs/install/mysql/tables/llx_bank_account.key.sql
    +++ b/htdocs/install/mysql/tables/llx_bank_account.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2005      Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_bank_account.sql b/htdocs/install/mysql/tables/llx_bank_account.sql
    index af35fb0eca1..3da5a8d4ec8 100644
    --- a/htdocs/install/mysql/tables/llx_bank_account.sql
    +++ b/htdocs/install/mysql/tables/llx_bank_account.sql
    @@ -1,7 +1,7 @@
     -- =============================================================================
     -- Copyright (C) 2000-2004	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2014	Laurent Destailleur 	<eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2012	Regis Houssin       	<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin       	<regis.houssin@inodbox.com>
     -- Copyright (C) 2014		Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_bank_categ.sql b/htdocs/install/mysql/tables/llx_bank_categ.sql
    index f9190f751fd..26b9eab244e 100644
    --- a/htdocs/install/mysql/tables/llx_bank_categ.sql
    +++ b/htdocs/install/mysql/tables/llx_bank_categ.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_bordereau_cheque.key.sql b/htdocs/install/mysql/tables/llx_bordereau_cheque.key.sql
    index 750b2b60bfc..bc1c2347eca 100644
    --- a/htdocs/install/mysql/tables/llx_bordereau_cheque.key.sql
    +++ b/htdocs/install/mysql/tables/llx_bordereau_cheque.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_bordereau_cheque.sql b/htdocs/install/mysql/tables/llx_bordereau_cheque.sql
    index ec400f6cbbd..e0d3209b9ea 100644
    --- a/htdocs/install/mysql/tables/llx_bordereau_cheque.sql
    +++ b/htdocs/install/mysql/tables/llx_bordereau_cheque.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_boxes.key.sql b/htdocs/install/mysql/tables/llx_boxes.key.sql
    index 52e06daf2af..caec9208938 100644
    --- a/htdocs/install/mysql/tables/llx_boxes.key.sql
    +++ b/htdocs/install/mysql/tables/llx_boxes.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2006-2009	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2006-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2006-2012	Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_boxes.sql b/htdocs/install/mysql/tables/llx_boxes.sql
    index 383e1bbcce4..eeb294b5209 100644
    --- a/htdocs/install/mysql/tables/llx_boxes.sql
    +++ b/htdocs/install/mysql/tables/llx_boxes.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
     -- Copyright (C) 2006-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    --- Copyright (C) 2006-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2006-2012	Regis Houssin			<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_boxes_def.key.sql b/htdocs/install/mysql/tables/llx_boxes_def.key.sql
    index ba6c032dbb4..2173504dc26 100644
    --- a/htdocs/install/mysql/tables/llx_boxes_def.key.sql
    +++ b/htdocs/install/mysql/tables/llx_boxes_def.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2009 Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_boxes_def.sql b/htdocs/install/mysql/tables/llx_boxes_def.sql
    index 03016ff9a54..e9fd966fdb7 100644
    --- a/htdocs/install/mysql/tables/llx_boxes_def.sql
    +++ b/htdocs/install/mysql/tables/llx_boxes_def.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2010      Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_c_action_trigger.key.sql b/htdocs/install/mysql/tables/llx_c_action_trigger.key.sql
    index 182e49fbe6e..3260c01d498 100644
    --- a/htdocs/install/mysql/tables/llx_c_action_trigger.key.sql
    +++ b/htdocs/install/mysql/tables/llx_c_action_trigger.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2011 Regis Houssin	<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011 Regis Houssin	<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_c_action_trigger.sql b/htdocs/install/mysql/tables/llx_c_action_trigger.sql
    index 4f7dbccc786..55e93c9b3d0 100644
    --- a/htdocs/install/mysql/tables/llx_c_action_trigger.sql
    +++ b/htdocs/install/mysql/tables/llx_c_action_trigger.sql
    @@ -1,5 +1,5 @@
     -- ===================================================================
    --- Copyright (C) 2011 Regis Houssin	<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011 Regis Houssin	<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    @@ -22,7 +22,7 @@
     create table llx_c_action_trigger
     (
       rowid			integer AUTO_INCREMENT PRIMARY KEY,
    -  elementtype	varchar(24) 			NOT NULL,
    +  elementtype	varchar(32) 			NOT NULL,
       code			varchar(32)				NOT NULL,
       label			varchar(128)			NOT NULL,
       description	varchar(255),
    diff --git a/htdocs/install/mysql/tables/llx_c_barcode_type.key.sql b/htdocs/install/mysql/tables/llx_c_barcode_type.key.sql
    index 594298c952c..c87f844574e 100644
    --- a/htdocs/install/mysql/tables/llx_c_barcode_type.key.sql
    +++ b/htdocs/install/mysql/tables/llx_c_barcode_type.key.sql
    @@ -1,5 +1,5 @@
     -- ========================================================================
    --- Copyright (C) 2012	Regis Houssin	<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2012	Regis Houssin	<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_c_barcode_type.sql b/htdocs/install/mysql/tables/llx_c_barcode_type.sql
    index e2eea8d4faf..ad03c14966e 100644
    --- a/htdocs/install/mysql/tables/llx_c_barcode_type.sql
    +++ b/htdocs/install/mysql/tables/llx_c_barcode_type.sql
    @@ -1,5 +1,5 @@
     -- ========================================================================
    --- Copyright (C) 2007-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2007-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2008      Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_c_currencies.sql b/htdocs/install/mysql/tables/llx_c_currencies.sql
    index ef57ecdccaa..41a1538a002 100644
    --- a/htdocs/install/mysql/tables/llx_c_currencies.sql
    +++ b/htdocs/install/mysql/tables/llx_c_currencies.sql
    @@ -1,6 +1,6 @@
     -- ========================================================================
     -- Copyright (C) 2005	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2012	Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_c_ecotaxe.sql b/htdocs/install/mysql/tables/llx_c_ecotaxe.sql
    index cd67bb34766..96bc5e01285 100644
    --- a/htdocs/install/mysql/tables/llx_c_ecotaxe.sql
    +++ b/htdocs/install/mysql/tables/llx_c_ecotaxe.sql
    @@ -1,5 +1,5 @@
     -- ========================================================================
    --- Copyright (C) 2007-2018	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2007-2018	Regis Houssin		<regis.houssin@inodbox.com>
     -- Copyright (C) 2009		Laurent Destailleur	<eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_c_field_list.sql b/htdocs/install/mysql/tables/llx_c_field_list.sql
    index b22f98b52ec..44b02c35248 100644
    --- a/htdocs/install/mysql/tables/llx_c_field_list.sql
    +++ b/htdocs/install/mysql/tables/llx_c_field_list.sql
    @@ -1,5 +1,5 @@
     -- ========================================================================
    --- Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2010-2018 Regis Houssin  <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    @@ -33,6 +33,7 @@ create table llx_c_field_list
       align			varchar(6)		DEFAULT 'left',				-- align (left,center,right)
       sort			tinyint 		DEFAULT 1  	NOT NULL,		-- add sort field
       search		tinyint 		DEFAULT 0  	NOT NULL,		-- add search field
    +  visible		tinyint			DEFAULT 1	NOT NULL,		-- visibility of field. 0=Never visible, 1=Visible on list and forms, 2=Visible on list only
       enabled       varchar(255)	DEFAULT 1,					-- Condition to show or hide
       rang      	integer 		DEFAULT 0
       
    diff --git a/htdocs/install/mysql/tables/llx_c_paiement.key.sql b/htdocs/install/mysql/tables/llx_c_paiement.key.sql
    index fc8147805ef..cf25e3a6703 100644
    --- a/htdocs/install/mysql/tables/llx_c_paiement.key.sql
    +++ b/htdocs/install/mysql/tables/llx_c_paiement.key.sql
    @@ -1,6 +1,6 @@
     -- ========================================================================
     -- Copyright (C) 2012	Florian Henry	<florian.henry@open-concept.pro>
    --- Copyright (C) 2017	Regis Houssin	<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2017	Regis Houssin	<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_c_paiement.sql b/htdocs/install/mysql/tables/llx_c_paiement.sql
    index 1c26cb7aaeb..9e752b7e186 100644
    --- a/htdocs/install/mysql/tables/llx_c_paiement.sql
    +++ b/htdocs/install/mysql/tables/llx_c_paiement.sql
    @@ -2,7 +2,7 @@
     -- Copyright (C) 2001-2004	Rodolphe Quiedeville		<rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2014	Laurent Destailleur		<eldy@users.sourceforge.net>
     -- Copyright (C) 2014		Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
    --- Copyright (C) 2017		Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2017		Regis Houssin			<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_c_paper_format.sql b/htdocs/install/mysql/tables/llx_c_paper_format.sql
    index be0a57a2319..f0d7a3f14f3 100644
    --- a/htdocs/install/mysql/tables/llx_c_paper_format.sql
    +++ b/htdocs/install/mysql/tables/llx_c_paper_format.sql
    @@ -1,5 +1,5 @@
     -- ========================================================================
    --- Copyright (C) 2007 Regis Houssin <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2007 Regis Houssin <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_c_payment_term.key.sql b/htdocs/install/mysql/tables/llx_c_payment_term.key.sql
    index fc2f49de529..d2cb94aaeb2 100644
    --- a/htdocs/install/mysql/tables/llx_c_payment_term.key.sql
    +++ b/htdocs/install/mysql/tables/llx_c_payment_term.key.sql
    @@ -1,6 +1,6 @@
     -- ========================================================================
     -- Copyright (C) 2012	Florian Henry	<florian.henry@open-concept.pro>
    --- Copyright (C) 2017	Regis Houssin	<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2017	Regis Houssin	<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_c_payment_term.sql b/htdocs/install/mysql/tables/llx_c_payment_term.sql
    index 39ccaa70916..188c2c4f428 100644
    --- a/htdocs/install/mysql/tables/llx_c_payment_term.sql
    +++ b/htdocs/install/mysql/tables/llx_c_payment_term.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2002-2003	Rodolphe Quiedeville		<rodolphe@quiedeville.org>
     -- Copyright (C) 2016		Laurent Destailleur		<eldy@users.sourceforge.net>
    --- Copyright (C) 2017		Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2017		Regis Houssin			<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_c_ziptown.key.sql b/htdocs/install/mysql/tables/llx_c_ziptown.key.sql
    index 9d4ff705d04..a8bc952a160 100644
    --- a/htdocs/install/mysql/tables/llx_c_ziptown.key.sql
    +++ b/htdocs/install/mysql/tables/llx_c_ziptown.key.sql
    @@ -1,5 +1,5 @@
     -- ========================================================================
    --- Copyright (C) 2010 Regis Houssin      <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2010 Regis Houssin      <regis.houssin@inodbox.com>
     -- Copyright (C) 201 Laurent Destailleur <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_c_ziptown.sql b/htdocs/install/mysql/tables/llx_c_ziptown.sql
    index 4b73d308a99..3bc41baacda 100644
    --- a/htdocs/install/mysql/tables/llx_c_ziptown.sql
    +++ b/htdocs/install/mysql/tables/llx_c_ziptown.sql
    @@ -1,5 +1,5 @@
     -- ========================================================================
    --- Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2010 Regis Houssin <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_categorie.key.sql b/htdocs/install/mysql/tables/llx_categorie.key.sql
    index a3c9cf88963..1369378e59f 100644
    --- a/htdocs/install/mysql/tables/llx_categorie.key.sql
    +++ b/htdocs/install/mysql/tables/llx_categorie.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2007-2009	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_categorie.sql b/htdocs/install/mysql/tables/llx_categorie.sql
    index fe2b03b2429..2b39cf58f7b 100644
    --- a/htdocs/install/mysql/tables/llx_categorie.sql
    +++ b/htdocs/install/mysql/tables/llx_categorie.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2005		Brice Davoleau		<e1davole@iu-vannes.fr>
     -- Copyright (C) 2005		Matthieu Valleton	<mv@seeschloss.org>
    --- Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@capnetworks.com>		
    +-- Copyright (C) 2005-2012	Regis Houssin		<regis.houssin@inodbox.com>		
     -- Copyright (C) 2017       Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,8 @@ create table llx_categorie
     	rowid 		    integer AUTO_INCREMENT PRIMARY KEY,
     	entity          integer DEFAULT 1 NOT NULL,			-- multi company id
     	fk_parent		integer DEFAULT 0 NOT NULL,
    -	label 		    varchar(180) NOT NULL,				-- category name
    +	label 		    varchar(180) NOT NULL,				-- category ref/name
    +	ref_ext			varchar(255),						-- reference into an external system (not used by dolibarr)
     	type	        tinyint DEFAULT 1 NOT NULL,			-- category type (product, supplier, customer, member)
     	description 	text,								-- description of the category
         color           varchar(8),                         -- color
    diff --git a/htdocs/install/mysql/tables/llx_categorie_fournisseur.key.sql b/htdocs/install/mysql/tables/llx_categorie_fournisseur.key.sql
    index 7293c152b9a..28a2cb6a8d4 100644
    --- a/htdocs/install/mysql/tables/llx_categorie_fournisseur.key.sql
    +++ b/htdocs/install/mysql/tables/llx_categorie_fournisseur.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2012 Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2012 Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2012 Regis Houssin			<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_categorie_fournisseur.sql b/htdocs/install/mysql/tables/llx_categorie_fournisseur.sql
    index 5a270b1fad9..8133aeb8a46 100644
    --- a/htdocs/install/mysql/tables/llx_categorie_fournisseur.sql
    +++ b/htdocs/install/mysql/tables/llx_categorie_fournisseur.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2006 Rodolphe Quiedeville	<rodolphe@quiedeville.org>
     -- Copyright (C) 2012 Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2012 Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2012 Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2012 Juanjo Menent			<jmenent@2byte.es>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_categorie_lang.sql b/htdocs/install/mysql/tables/llx_categorie_lang.sql
    index 34dc0a3406e..ab2fb83405a 100644
    --- a/htdocs/install/mysql/tables/llx_categorie_lang.sql
    +++ b/htdocs/install/mysql/tables/llx_categorie_lang.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2009      Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2014      Jean-François Ferry  <jfefe@aternatik.fr>
     --
    diff --git a/htdocs/install/mysql/tables/llx_chargesociales.sql b/htdocs/install/mysql/tables/llx_chargesociales.sql
    index a22937fa643..e1556689a29 100644
    --- a/htdocs/install/mysql/tables/llx_chargesociales.sql
    +++ b/htdocs/install/mysql/tables/llx_chargesociales.sql
    @@ -1,6 +1,6 @@
     -- ========================================================================
     -- Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2017      Alexandre Spangaro   <aspangaro@zendsi.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_commande.key.sql b/htdocs/install/mysql/tables/llx_commande.key.sql
    index 9134092195b..eece575a238 100644
    --- a/htdocs/install/mysql/tables/llx_commande.key.sql
    +++ b/htdocs/install/mysql/tables/llx_commande.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2006		Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_commande.sql b/htdocs/install/mysql/tables/llx_commande.sql
    index 0b18f46bb51..d0522f7e5e3 100644
    --- a/htdocs/install/mysql/tables/llx_commande.sql
    +++ b/htdocs/install/mysql/tables/llx_commande.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2017      Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
     --
    diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur.key.sql b/htdocs/install/mysql/tables/llx_commande_fournisseur.key.sql
    index d0d9471278a..89b1096fd8e 100644
    --- a/htdocs/install/mysql/tables/llx_commande_fournisseur.key.sql
    +++ b/htdocs/install/mysql/tables/llx_commande_fournisseur.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2006-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur.sql b/htdocs/install/mysql/tables/llx_commande_fournisseur.sql
    index 54ad7a33afd..5f26a87734a 100644
    --- a/htdocs/install/mysql/tables/llx_commande_fournisseur.sql
    +++ b/htdocs/install/mysql/tables/llx_commande_fournisseur.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2007-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
     --
    diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseur_extrafields.sql b/htdocs/install/mysql/tables/llx_commande_fournisseur_extrafields.sql
    index 33d72f3cede..affbc94fc50 100644
    --- a/htdocs/install/mysql/tables/llx_commande_fournisseur_extrafields.sql
    +++ b/htdocs/install/mysql/tables/llx_commande_fournisseur_extrafields.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2007		Laurent Destailleur		<eldy@users.sourceforge.net>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
     -- Copyright (C) 2013		Florian HENRY			<florian.henry@open-concept.pro>
    diff --git a/htdocs/install/mysql/tables/llx_commande_fournisseurdet_extrafields.sql b/htdocs/install/mysql/tables/llx_commande_fournisseurdet_extrafields.sql
    index c1ef550b761..a3c2917491c 100644
    --- a/htdocs/install/mysql/tables/llx_commande_fournisseurdet_extrafields.sql
    +++ b/htdocs/install/mysql/tables/llx_commande_fournisseurdet_extrafields.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2007		Laurent Destailleur		<eldy@users.sourceforge.net>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
     -- Copyright (C) 2013		Florian HENRY			<florian.henry@open-concept.pro>
    diff --git a/htdocs/install/mysql/tables/llx_commandedet.key.sql b/htdocs/install/mysql/tables/llx_commandedet.key.sql
    index 21765a6ad1b..4420d968d9a 100644
    --- a/htdocs/install/mysql/tables/llx_commandedet.key.sql
    +++ b/htdocs/install/mysql/tables/llx_commandedet.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2006 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2011 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_commandedet.sql b/htdocs/install/mysql/tables/llx_commandedet.sql
    index 0d6468309f5..f30401304a6 100644
    --- a/htdocs/install/mysql/tables/llx_commandedet.sql
    +++ b/htdocs/install/mysql/tables/llx_commandedet.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2006-2009	Laurent Destailleur		<eldy@users.sourceforge.net>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
     -- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
    diff --git a/htdocs/install/mysql/tables/llx_commandedet_extrafields.key.sql b/htdocs/install/mysql/tables/llx_commandedet_extrafields.key.sql
    index 764b39639cf..56da1940fc3 100644
    --- a/htdocs/install/mysql/tables/llx_commandedet_extrafields.key.sql
    +++ b/htdocs/install/mysql/tables/llx_commandedet_extrafields.key.sql
    @@ -1,7 +1,7 @@
     -- ===================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2011      Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2013      Florian Henry	<florian.henry@open-concept.pro>
     --
    diff --git a/htdocs/install/mysql/tables/llx_const.sql b/htdocs/install/mysql/tables/llx_const.sql
    index 806a3337291..c27b8c45e9f 100644
    --- a/htdocs/install/mysql/tables/llx_const.sql
    +++ b/htdocs/install/mysql/tables/llx_const.sql
    @@ -2,7 +2,7 @@
     -- Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2003      Jean-Louis Bergamo   <jlb@j1b.org>
     -- Copyright (C) 2008-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_contrat.key.sql b/htdocs/install/mysql/tables/llx_contrat.key.sql
    index 3e95b75c85b..15cdb7161da 100644
    --- a/htdocs/install/mysql/tables/llx_contrat.key.sql
    +++ b/htdocs/install/mysql/tables/llx_contrat.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2005 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_contrat.sql b/htdocs/install/mysql/tables/llx_contrat.sql
    index ac6f56631ec..531f96adeb7 100644
    --- a/htdocs/install/mysql/tables/llx_contrat.sql
    +++ b/htdocs/install/mysql/tables/llx_contrat.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2005 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2014 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2014 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_contratdet.key.sql b/htdocs/install/mysql/tables/llx_contratdet.key.sql
    index 6f65271ebb7..e79a3aeea33 100644
    --- a/htdocs/install/mysql/tables/llx_contratdet.key.sql
    +++ b/htdocs/install/mysql/tables/llx_contratdet.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2005 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2011 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_deplacement.sql b/htdocs/install/mysql/tables/llx_deplacement.sql
    index 34c4ab103cd..ca58f82a642 100644
    --- a/htdocs/install/mysql/tables/llx_deplacement.sql
    +++ b/htdocs/install/mysql/tables/llx_deplacement.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2003		Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2009-2012	Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2012	Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2010		Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_document_model.key.sql b/htdocs/install/mysql/tables/llx_document_model.key.sql
    index 54f25e2169b..d813b57e1da 100644
    --- a/htdocs/install/mysql/tables/llx_document_model.key.sql
    +++ b/htdocs/install/mysql/tables/llx_document_model.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2007      Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_document_model.sql b/htdocs/install/mysql/tables/llx_document_model.sql
    index 0b93936837e..4092fc0ca43 100644
    --- a/htdocs/install/mysql/tables/llx_document_model.sql
    +++ b/htdocs/install/mysql/tables/llx_document_model.sql
    @@ -1,7 +1,7 @@
     -- ===================================================================
     -- Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2006      Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_don.sql b/htdocs/install/mysql/tables/llx_don.sql
    index a2e39f7039c..82728861fc6 100644
    --- a/htdocs/install/mysql/tables/llx_don.sql
    +++ b/htdocs/install/mysql/tables/llx_don.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2011      Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2015      Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
     --
    diff --git a/htdocs/install/mysql/tables/llx_ecm_directories.key.sql b/htdocs/install/mysql/tables/llx_ecm_directories.key.sql
    index 2e96a5f8e95..1467ae6839e 100644
    --- a/htdocs/install/mysql/tables/llx_ecm_directories.key.sql
    +++ b/htdocs/install/mysql/tables/llx_ecm_directories.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2010	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2012	Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_ecm_directories.sql b/htdocs/install/mysql/tables/llx_ecm_directories.sql
    index 518fdd4c9e1..a956b928ad5 100644
    --- a/htdocs/install/mysql/tables/llx_ecm_directories.sql
    +++ b/htdocs/install/mysql/tables/llx_ecm_directories.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2008-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.key.sql b/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.key.sql
    new file mode 100644
    index 00000000000..56295db116a
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.key.sql
    @@ -0,0 +1,25 @@
    +-- Copyright (C) 2018 Laurent Destailleur	<eldy@users.sourceforge.net>
    +--
    +-- This program is free software: you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation, either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program.  If not, see http://www.gnu.org/licenses/.
    +
    +
    +-- BEGIN MODULEBUILDER INDEXES
    +ALTER TABLE llx_emailcollector_emailcollector ADD INDEX idx_emailcollector_entity (entity);
    +ALTER TABLE llx_emailcollector_emailcollector ADD INDEX idx_emailcollector_status (status);
    +-- END MODULEBUILDER INDEXES
    +
    +--ALTER TABLE llx_emailcollector_emailcollector ADD UNIQUE INDEX uk_emailcollector_emailcollector_fieldxyz(fieldx, fieldy);
    +
    +--ALTER TABLE llx_emailcollector_emailcollector ADD CONSTRAINT llx_emailcollector_emailcollector_field_id FOREIGN KEY (fk_field) REFERENCES llx_myotherobject(rowid);
    +
    diff --git a/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.sql b/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.sql
    new file mode 100644
    index 00000000000..750c2b24e84
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_emailcollector_emailcollector.sql
    @@ -0,0 +1,41 @@
    +-- Copyright (C) 2018 Laurent Destailleur	<eldy@users.sourceforge.net>
    +--
    +-- This program is free software: you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation, either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program.  If not, see http://www.gnu.org/licenses/.
    +
    +
    +CREATE TABLE llx_emailcollector_emailcollector(
    +        -- BEGIN MODULEBUILDER FIELDS
    +        rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL, 
    +        entity integer DEFAULT 1 NOT NULL, 
    +        ref varchar(128) NOT NULL,
    +        label varchar(255), 
    +        description text,
    +        host varchar(255), 
    +        user varchar(128), 
    +        password varchar(128),
    +        source_directory varchar(255) NOT NULL,
    +        target_directory varchar(255),
    +        datelastresult datetime, 
    +        codelastresult varchar(16), 
    +        lastresult varchar(255),
    +        note_public text, 
    +        note_private text, 
    +        date_creation datetime NOT NULL, 
    +        tms timestamp NOT NULL, 
    +        fk_user_creat integer NOT NULL, 
    +        fk_user_modif integer, 
    +        import_key varchar(14), 
    +        status integer NOT NULL
    +        -- END MODULEBUILDER FIELDS
    +) ENGINE=innodb;
    diff --git a/htdocs/install/mysql/tables/llx_emailcollector_emailcollectoraction.key.sql b/htdocs/install/mysql/tables/llx_emailcollector_emailcollectoraction.key.sql
    new file mode 100644
    index 00000000000..ef8a91b5d31
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_emailcollector_emailcollectoraction.key.sql
    @@ -0,0 +1,22 @@
    +-- Copyright (C) ---Put here your own copyright and developer email---
    +--
    +-- This program is free software: you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation, either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program.  If not, see http://www.gnu.org/licenses/.
    +
    +
    +-- BEGIN MODULEBUILDER INDEXES
    +ALTER TABLE llx_emailcollector_emailcollectoraction ADD INDEX idx_emailcollector_fk_emailcollector (fk_emailcollector);
    +ALTER TABLE llx_emailcollector_emailcollectoraction ADD CONSTRAINT fk_emailcollectoraction_fk_emailcollector FOREIGN KEY (fk_emailcollector) REFERENCES llx_emailcollector_emailcollector(rowid);
    +-- END MODULEBUILDER INDEXES
    +
    +ALTER TABLE llx_emailcollector_emailcollectoraction ADD UNIQUE INDEX uk_emailcollector_emailcollectoraction (fk_emailcollector, type);
    diff --git a/htdocs/install/mysql/tables/llx_emailcollector_emailcollectoraction.sql b/htdocs/install/mysql/tables/llx_emailcollector_emailcollectoraction.sql
    new file mode 100644
    index 00000000000..e0239cf98f6
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_emailcollector_emailcollectoraction.sql
    @@ -0,0 +1,31 @@
    +-- Copyright (C) ---Put here your own copyright and developer email---
    +--
    +-- This program is free software: you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation, either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program.  If not, see http://www.gnu.org/licenses/.
    +
    +
    +CREATE TABLE llx_emailcollector_emailcollectoraction(
    +	-- BEGIN MODULEBUILDER FIELDS
    +	rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
    +	fk_emailcollector INTEGER NOT NULL,
    +	type varchar(128) NOT NULL, 
    +	actionparam varchar(255) NULL, 
    +	date_creation datetime NOT NULL, 
    +	tms timestamp NOT NULL, 
    +	fk_user_creat integer NOT NULL, 
    +	fk_user_modif integer, 
    +	position integer DEFAULT 0,
    +	import_key varchar(14),
    +	status integer NOT NULL
    +	-- END MODULEBUILDER FIELDS
    +) ENGINE=innodb;
    \ No newline at end of file
    diff --git a/htdocs/install/mysql/tables/llx_emailcollector_emailcollectorfilter.key.sql b/htdocs/install/mysql/tables/llx_emailcollector_emailcollectorfilter.key.sql
    new file mode 100644
    index 00000000000..e0eb095fad1
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_emailcollector_emailcollectorfilter.key.sql
    @@ -0,0 +1,23 @@
    +-- Copyright (C) ---Put here your own copyright and developer email---
    +--
    +-- This program is free software: you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation, either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program.  If not, see http://www.gnu.org/licenses/.
    +
    +
    +-- BEGIN MODULEBUILDER INDEXES
    +ALTER TABLE llx_emailcollector_emailcollectorfilter ADD INDEX idx_emailcollector_fk_emailcollector (fk_emailcollector);
    +ALTER TABLE llx_emailcollector_emailcollectorfilter ADD CONSTRAINT fk_emailcollectorfilter_fk_emailcollector FOREIGN KEY (fk_emailcollector) REFERENCES llx_emailcollector_emailcollector(rowid);
    +-- END MODULEBUILDER INDEXES
    +
    +ALTER TABLE llx_emailcollector_emailcollectorfilter ADD UNIQUE INDEX uk_emailcollector_emailcollectorfilter (fk_emailcollector, type, rulevalue);
    +
    diff --git a/htdocs/install/mysql/tables/llx_emailcollector_emailcollectorfilter.sql b/htdocs/install/mysql/tables/llx_emailcollector_emailcollectorfilter.sql
    new file mode 100644
    index 00000000000..6312fa5785f
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_emailcollector_emailcollectorfilter.sql
    @@ -0,0 +1,30 @@
    +-- Copyright (C) ---Put here your own copyright and developer email---
    +--
    +-- This program is free software: you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation, either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program.  If not, see http://www.gnu.org/licenses/.
    +
    +
    +CREATE TABLE llx_emailcollector_emailcollectorfilter(
    +	-- BEGIN MODULEBUILDER FIELDS
    +	rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
    +	fk_emailcollector INTEGER NOT NULL,
    +	type varchar(128) NOT NULL, 
    +	rulevalue varchar(255) NULL, 
    +	date_creation datetime NOT NULL, 
    +	tms timestamp NOT NULL, 
    +	fk_user_creat integer NOT NULL, 
    +	fk_user_modif integer, 
    +	import_key varchar(14), 
    +	status integer NOT NULL
    +	-- END MODULEBUILDER FIELDS
    +) ENGINE=innodb;
    \ No newline at end of file
    diff --git a/htdocs/install/mysql/tables/llx_entrepot.key.sql b/htdocs/install/mysql/tables/llx_entrepot.key.sql
    index 3f9137e57ee..551eeda4e95 100644
    --- a/htdocs/install/mysql/tables/llx_entrepot.key.sql
    +++ b/htdocs/install/mysql/tables/llx_entrepot.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_events.sql b/htdocs/install/mysql/tables/llx_events.sql
    index c153522cb09..f906cf0fcbd 100644
    --- a/htdocs/install/mysql/tables/llx_events.sql
    +++ b/htdocs/install/mysql/tables/llx_events.sql
    @@ -1,6 +1,6 @@
     -- ========================================================================
     -- Copyright (C) 2008      Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_expedition.key.sql b/htdocs/install/mysql/tables/llx_expedition.key.sql
    index 736945193ff..d5e041b6cdf 100644
    --- a/htdocs/install/mysql/tables/llx_expedition.key.sql
    +++ b/htdocs/install/mysql/tables/llx_expedition.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2005      Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_expedition.sql b/htdocs/install/mysql/tables/llx_expedition.sql
    index e252783ac94..044f840dc07 100644
    --- a/htdocs/install/mysql/tables/llx_expedition.sql
    +++ b/htdocs/install/mysql/tables/llx_expedition.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2003-2010 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2011-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2012      Juanjo Menent		<jmenent@2byte.es>
     --
    diff --git a/htdocs/install/mysql/tables/llx_expeditiondet.key.sql b/htdocs/install/mysql/tables/llx_expeditiondet.key.sql
    index 5f5b6a08183..9c3cd0aa2e9 100644
    --- a/htdocs/install/mysql/tables/llx_expeditiondet.key.sql
    +++ b/htdocs/install/mysql/tables/llx_expeditiondet.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2005 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2008 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2008 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_expeditiondet.sql b/htdocs/install/mysql/tables/llx_expeditiondet.sql
    index bd05bd08898..54e170d041b 100644
    --- a/htdocs/install/mysql/tables/llx_expeditiondet.sql
    +++ b/htdocs/install/mysql/tables/llx_expeditiondet.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2008 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2008 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2011 Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_expensereport.key.sql b/htdocs/install/mysql/tables/llx_expensereport.key.sql
    index a7e4fd54425..739caa58432 100644
    --- a/htdocs/install/mysql/tables/llx_expensereport.key.sql
    +++ b/htdocs/install/mysql/tables/llx_expensereport.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2005      Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_export_model.key.sql b/htdocs/install/mysql/tables/llx_export_model.key.sql
    index 53f5efbda52..4e9485f68c4 100644
    --- a/htdocs/install/mysql/tables/llx_export_model.key.sql
    +++ b/htdocs/install/mysql/tables/llx_export_model.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2007-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2007      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2007      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_export_model.sql b/htdocs/install/mysql/tables/llx_export_model.sql
    index eaf11645f83..59bbb34ed19 100644
    --- a/htdocs/install/mysql/tables/llx_export_model.sql
    +++ b/htdocs/install/mysql/tables/llx_export_model.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2001-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2007-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2007-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2011		Laurent Destailleur		<eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_extrafields.key.sql b/htdocs/install/mysql/tables/llx_extrafields.key.sql
    index 90c0174e527..55bfc77b421 100644
    --- a/htdocs/install/mysql/tables/llx_extrafields.key.sql
    +++ b/htdocs/install/mysql/tables/llx_extrafields.key.sql
    @@ -1,5 +1,5 @@
     -- ===================================================================
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2011      Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_extrafields.sql b/htdocs/install/mysql/tables/llx_extrafields.sql
    index 9acf239ee64..e7ec325d428 100644
    --- a/htdocs/install/mysql/tables/llx_extrafields.sql
    +++ b/htdocs/install/mysql/tables/llx_extrafields.sql
    @@ -1,5 +1,5 @@
     -- ===================================================================
    --- Copyright (C) 2011-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011-2012 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2011-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    @@ -36,7 +36,9 @@ create table llx_extrafields
     	alwayseditable  integer DEFAULT 0,							-- 1 if field can be edited whatever is element status
     	param			text,										-- extra parameters to define possible values of field
     	list			varchar(255) DEFAULT '1',					-- visibility of field. 0=Never visible, 1=Visible on list and forms, 2=Visible on list only. Using a negative value means field is not shown by default on list but can be selected for viewing
    +    totalizable     boolean DEFAULT FALSE,                      -- is extrafield totalizable on list
     	langs			varchar(64),								-- example: fileofmymodule@mymodule
    +	help            text,                                       -- to store help tooltip
     	fk_user_author	integer,									-- user making creation
     	fk_user_modif	integer,	                                -- user making last change
     	datec			datetime,									-- date de creation
    diff --git a/htdocs/install/mysql/tables/llx_facture.key.sql b/htdocs/install/mysql/tables/llx_facture.key.sql
    index b0755bf5d94..0a2710c86ac 100644
    --- a/htdocs/install/mysql/tables/llx_facture.key.sql
    +++ b/htdocs/install/mysql/tables/llx_facture.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_facture.sql b/htdocs/install/mysql/tables/llx_facture.sql
    index c0783a7bbd8..51f322b69ee 100644
    --- a/htdocs/install/mysql/tables/llx_facture.sql
    +++ b/htdocs/install/mysql/tables/llx_facture.sql
    @@ -1,7 +1,7 @@
     -- ===========================================================================
     -- Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
     -- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
     -- Copyright (C) 2014      Raphaël Doursenaud   <rdoursenaud@gpcsolutions.fr>
    @@ -63,16 +63,18 @@ create table llx_facture
       fk_user_modif         integer,                                -- user making last change
       fk_user_valid			integer,								-- user validating
     
    +  module_source			varchar(32),							-- name of module when invoice generated by a dedicated module (POS, ...)
    +  pos_source			varchar(32),							-- name of POS station when invoice is generated by a POS module
       fk_fac_rec_source		integer,								-- facture rec source
       fk_facture_source		integer,								-- facture origin if credit notes or replacement invoice
    -  fk_projet				integer DEFAULT NULL,					-- projet auquel est associee la facture
    +  fk_projet				integer DEFAULT NULL,					-- project invoice is linked to
     
       fk_account			integer,								-- bank account
       fk_currency			varchar(3),								-- currency code
       
    -  fk_cond_reglement		integer  DEFAULT 1 NOT NULL,			-- condition de reglement (30 jours, fin de mois ...)
    -  fk_mode_reglement		integer,								-- mode de reglement (Virement, Prelevement)
    -  date_lim_reglement	date,									-- date limite de reglement
    +  fk_cond_reglement		integer  DEFAULT 1 NOT NULL,			-- payment term (30 days, end of month...)
    +  fk_mode_reglement		integer,								-- payment mode (Virement, Prelevement)
    +  date_lim_reglement	date,									-- due date
     
       note_private			text,
       note_public			text,
    diff --git a/htdocs/install/mysql/tables/llx_facture_fourn.key.sql b/htdocs/install/mysql/tables/llx_facture_fourn.key.sql
    index cbea87a398f..7b8dc66c9fa 100644
    --- a/htdocs/install/mysql/tables/llx_facture_fourn.key.sql
    +++ b/htdocs/install/mysql/tables/llx_facture_fourn.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2005-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_facture_fourn.sql b/htdocs/install/mysql/tables/llx_facture_fourn.sql
    index b1329de08ac..36ee0a69f18 100644
    --- a/htdocs/install/mysql/tables/llx_facture_fourn.sql
    +++ b/htdocs/install/mysql/tables/llx_facture_fourn.sql
    @@ -1,7 +1,7 @@
     -- ===========================================================================
     -- Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2007-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2007-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2007-2012 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_facture_rec.key.sql b/htdocs/install/mysql/tables/llx_facture_rec.key.sql
    index 3a41233fa4a..9529695cbe5 100644
    --- a/htdocs/install/mysql/tables/llx_facture_rec.key.sql
    +++ b/htdocs/install/mysql/tables/llx_facture_rec.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2006 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_facture_rec.sql b/htdocs/install/mysql/tables/llx_facture_rec.sql
    index dc1343872c7..1add07c6e8c 100644
    --- a/htdocs/install/mysql/tables/llx_facture_rec.sql
    +++ b/htdocs/install/mysql/tables/llx_facture_rec.sql
    @@ -1,7 +1,7 @@
     -- ===========================================================================
     -- Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2012-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
     -- 
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_facturedet.key.sql b/htdocs/install/mysql/tables/llx_facturedet.key.sql
    index f1a7807a910..a0e84034d64 100644
    --- a/htdocs/install/mysql/tables/llx_facturedet.key.sql
    +++ b/htdocs/install/mysql/tables/llx_facturedet.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2005-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2011      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011      Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_facturedet.sql b/htdocs/install/mysql/tables/llx_facturedet.sql
    index bf008d41f03..ac7142c898d 100644
    --- a/htdocs/install/mysql/tables/llx_facturedet.sql
    +++ b/htdocs/install/mysql/tables/llx_facturedet.sql
    @@ -1,7 +1,7 @@
     -- ===================================================================
     -- Copyright (C) 2001-2005	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2005	Laurent Destailleur		<eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
     -- Copyright (C) 2012       Cédric Salvador       <csalvador@gpcsolutions.fr>
     -- Copyright (C) 2014       Raphaël Doursenaud    <rdoursenaud@gpcsolutions.fr>
    diff --git a/htdocs/install/mysql/tables/llx_facturedet_rec.key.sql b/htdocs/install/mysql/tables/llx_facturedet_rec.key.sql
    index 5ce0d0d296b..3facb7ade29 100644
    --- a/htdocs/install/mysql/tables/llx_facturedet_rec.key.sql
    +++ b/htdocs/install/mysql/tables/llx_facturedet_rec.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2005 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2011 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2012 Cedric Salvador      <csalvador@gpcsolutions.fr>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_facturedet_rec.sql b/htdocs/install/mysql/tables/llx_facturedet_rec.sql
    index 341afd0d9ba..ac79dfd891d 100644
    --- a/htdocs/install/mysql/tables/llx_facturedet_rec.sql
    +++ b/htdocs/install/mysql/tables/llx_facturedet_rec.sql
    @@ -2,7 +2,7 @@
     -- Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
     -- Copyright (C) 2009-2014  Laurent Destailleur		<eldy@users.sourceforge.net>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
    --- Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_fichinter.sql b/htdocs/install/mysql/tables/llx_fichinter.sql
    index 5bc5741c014..2029e15aff5 100644
    --- a/htdocs/install/mysql/tables/llx_fichinter.sql
    +++ b/htdocs/install/mysql/tables/llx_fichinter.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_fichinter_rec.key.sql b/htdocs/install/mysql/tables/llx_fichinter_rec.key.sql
    new file mode 100644
    index 00000000000..ef164d9f8d0
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_fichinter_rec.key.sql
    @@ -0,0 +1,30 @@
    +-- ============================================================================
    +-- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    +-- Copyright (C) 2004-2006 Laurent Destailleur  <eldy@users.sourceforge.net>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
    +-- Copyright (C) 2018      Charlene Benke        <charlie@patas-monkey.com>
    +--
    +-- This program is free software; you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation; either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program. If not, see <http://www.gnu.org/licenses/>.
    +--
    +-- ============================================================================
    +
    +
    +ALTER TABLE llx_fichinter_rec ADD UNIQUE INDEX idx_fichinter_rec_uk_titre (titre, entity);
    +
    +ALTER TABLE llx_fichinter_rec ADD INDEX idx_fichinter_rec_fk_soc (fk_soc);
    +ALTER TABLE llx_fichinter_rec ADD INDEX idx_fichinter_rec_fk_user_author (fk_user_author);
    +ALTER TABLE llx_fichinter_rec ADD INDEX idx_fichinter_rec_fk_projet (fk_projet);
    +
    +ALTER TABLE llx_fichinter_rec ADD CONSTRAINT fk_fichinter_rec_fk_user_author    FOREIGN KEY (fk_user_author) REFERENCES llx_user (rowid);
    +ALTER TABLE llx_fichinter_rec ADD CONSTRAINT fk_fichinter_rec_fk_projet         FOREIGN KEY (fk_projet) REFERENCES llx_projet (rowid);
    diff --git a/htdocs/install/mysql/tables/llx_fichinter_rec.sql b/htdocs/install/mysql/tables/llx_fichinter_rec.sql
    new file mode 100644
    index 00000000000..4beea8e2db1
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_fichinter_rec.sql
    @@ -0,0 +1,48 @@
    +-- ===========================================================================
    +-- Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    +-- Copyright (C) 2012-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
    +-- Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
    +-- Copyright (C) 2018      Charlene Benke		    <charlie@patas-monkey.com>
    +-- 
    +-- This program is free software; you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation; either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program. If not, see <http://www.gnu.org/licenses/>.
    +--
    +-- ===========================================================================
    +
    +create table llx_fichinter_rec
    +(
    +	rowid				integer AUTO_INCREMENT PRIMARY KEY,
    +	titre				varchar(50) NOT NULL,
    +	entity				integer DEFAULT 1 NOT NULL,	 -- multi company id
    +	fk_soc				integer DEFAULT NULL,
    +	datec				datetime,  -- date de creation
    +	
    +	fk_contrat			integer DEFAULT 0,          -- contrat auquel est rattache la fiche
    +	fk_user_author		integer,             -- createur
    +	fk_projet			integer,             -- projet auquel est associe la facture
    +	duree				real,                       -- duree totale de l'intervention
    +	description			text,
    +	modelpdf			varchar(50),
    +	note_private		text,
    +	note_public			text,
    +
    +	frequency			integer,					-- frequency (for example: 3 for every 3 month)
    +	unit_frequency		varchar(2) DEFAULT 'm',		-- 'm' for month (date_when must be a day <= 28), 'y' for year, ... 
    +	date_when			datetime DEFAULT NULL,		-- date for next gen (when an invoice is generated, this field must be updated with next date)
    +	date_last_gen		datetime DEFAULT NULL,		-- date for last gen (date with last successfull generation of invoice)
    +	nb_gen_done			integer DEFAULT NULL,		-- nb of generation done (when an invoice is generated, this field must incremented)
    +	nb_gen_max			integer DEFAULT NULL,		-- maximum number of generation
    +	auto_validate		integer NULL DEFAULT NULL	-- statut of the generated intervention
    +
    +)ENGINE=innodb;
    diff --git a/htdocs/install/mysql/tables/llx_fichinterdet.key.sql b/htdocs/install/mysql/tables/llx_fichinterdet.key.sql
    index 4fa7c1f3fa5..3266505fba9 100644
    --- a/htdocs/install/mysql/tables/llx_fichinterdet.key.sql
    +++ b/htdocs/install/mysql/tables/llx_fichinterdet.key.sql
    @@ -1,5 +1,5 @@
     -- ===================================================================
    --- Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_fichinterdet.sql b/htdocs/install/mysql/tables/llx_fichinterdet.sql
    index 5fcd1b1d524..676dfadbe35 100644
    --- a/htdocs/install/mysql/tables/llx_fichinterdet.sql
    +++ b/htdocs/install/mysql/tables/llx_fichinterdet.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_fichinterdet_rec.sql b/htdocs/install/mysql/tables/llx_fichinterdet_rec.sql
    new file mode 100644
    index 00000000000..40475b80d7d
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_fichinterdet_rec.sql
    @@ -0,0 +1,63 @@
    +-- ===================================================================
    +-- Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    +-- Copyright (C) 2009-2014	Laurent Destailleur		<eldy@users.sourceforge.net>
    +-- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
    +-- Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@inodbox.com>
    +-- Copyright (C) 2012		Cédric Salvador			<csalvador@gpcsolutions.fr>
    +-- Copyright (C) 2016-2018	Charlene Benke			<charlie@patas-monkey.com>
    +--
    +-- This program is free software; you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation; either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program. If not, see <http://www.gnu.org/licenses/>.
    +--
    +-- ===================================================================
    +
    +create table llx_fichinterdet_rec
    +(
    +	rowid				integer AUTO_INCREMENT PRIMARY KEY,
    +	fk_fichinter		integer NOT NULL,
    +	date				datetime,				-- date de la ligne d'intervention
    +	description			text,					-- description de la ligne d'intervention
    +	duree				integer,				-- duree de la ligne d'intervention
    +	rang				integer DEFAULT 0,		-- ordre affichage sur la fiche
    +	total_ht			DOUBLE(24, 8) NULL DEFAULT NULL,
    +	subprice			DOUBLE(24, 8) NULL DEFAULT NULL,
    +	fk_parent_line		integer NULL DEFAULT NULL,
    +	fk_product			integer NULL DEFAULT NULL,
    +	label				varchar(255) NULL DEFAULT NULL,
    +	tva_tx				DOUBLE(6, 3) NULL DEFAULT NULL,
    +	localtax1_tx		DOUBLE(6, 3) NULL DEFAULT 0,
    +	localtax1_type		VARCHAR(1) NULL DEFAULT NULL,
    +	localtax2_tx		DOUBLE(6, 3) NULL DEFAULT 0,
    +	localtax2_type		VARCHAR(1) NULL DEFAULT NULL,
    +	qty					double NULL DEFAULT NULL,
    +	remise_percent		double NULL DEFAULT 0,
    +	remise				double NULL DEFAULT 0,
    +	fk_remise_except	integer NULL DEFAULT NULL,
    +	price				DOUBLE(24, 8) NULL DEFAULT NULL,
    +	total_tva			DOUBLE(24, 8) NULL DEFAULT NULL,
    +	total_localtax1		DOUBLE(24, 8) NULL DEFAULT 0,
    +	total_localtax2		DOUBLE(24, 8) NULL DEFAULT 0,
    +	total_ttc			DOUBLE(24, 8) NULL DEFAULT NULL,
    +	product_type		INTEGER NULL DEFAULT 0,
    +	date_start			datetime NULL DEFAULT NULL,
    +	date_end			datetime NULL DEFAULT NULL,
    +	info_bits			INTEGER NULL DEFAULT 0,
    +	buy_price_ht		DOUBLE(24, 8) NULL DEFAULT 0,
    +	fk_product_fournisseur_price	integer NULL DEFAULT NULL,
    +	fk_code_ventilation	integer NOT NULL DEFAULT 0,
    +	fk_export_commpta	integer NOT NULL DEFAULT 0,
    +	special_code		integer UNSIGNED NULL DEFAULT 0,
    +	fk_unit				integer NULL DEFAULT NULL,	
    +	import_key			varchar(14) NULL DEFAULT NULL
    +
    +)ENGINE=innodb;
    diff --git a/htdocs/install/mysql/tables/llx_holiday.key.sql b/htdocs/install/mysql/tables/llx_holiday.key.sql
    index 9a1a6ae49e3..6243d1eee56 100644
    --- a/htdocs/install/mysql/tables/llx_holiday.key.sql
    +++ b/htdocs/install/mysql/tables/llx_holiday.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2016	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2016	Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_holiday.sql b/htdocs/install/mysql/tables/llx_holiday.sql
    index f6994810021..47c68647ffb 100644
    --- a/htdocs/install/mysql/tables/llx_holiday.sql
    +++ b/htdocs/install/mysql/tables/llx_holiday.sql
    @@ -32,9 +32,9 @@ date_debut     DATE NOT NULL,
     date_fin       DATE NOT NULL,
     halfday        integer DEFAULT 0,				-- 0=start morning and end afternoon, -1=start afternoon end afternoon, 1=start morning and end morning, 2=start afternoon and end morning
     statut         integer NOT NULL DEFAULT '1',
    -fk_validator   integer NOT NULL,
    -date_valid     DATETIME DEFAULT NULL,
    -fk_user_valid  integer DEFAULT NULL,
    +fk_validator   integer NOT NULL,				-- who should approve
    +date_valid     DATETIME DEFAULT NULL,			-- date approval
    +fk_user_valid  integer DEFAULT NULL,			-- user approval
     date_refuse    DATETIME DEFAULT NULL,
     fk_user_refuse integer DEFAULT NULL,
     date_cancel    DATETIME DEFAULT NULL,
    diff --git a/htdocs/install/mysql/tables/llx_livraison.key.sql b/htdocs/install/mysql/tables/llx_livraison.key.sql
    index f61319640ee..2769ee09c67 100644
    --- a/htdocs/install/mysql/tables/llx_livraison.key.sql
    +++ b/htdocs/install/mysql/tables/llx_livraison.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2005      Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_livraison.sql b/htdocs/install/mysql/tables/llx_livraison.sql
    index 32e9de8b2a7..5f7a6c52ef8 100644
    --- a/htdocs/install/mysql/tables/llx_livraison.sql
    +++ b/htdocs/install/mysql/tables/llx_livraison.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2008-2010 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_livraisondet.key.sql b/htdocs/install/mysql/tables/llx_livraisondet.key.sql
    index 5b9b37767eb..f6783d55a04 100644
    --- a/htdocs/install/mysql/tables/llx_livraisondet.key.sql
    +++ b/htdocs/install/mysql/tables/llx_livraisondet.key.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2005 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2008 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2008 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_livraisondet.sql b/htdocs/install/mysql/tables/llx_livraisondet.sql
    index fc0644830c5..cac8819f206 100644
    --- a/htdocs/install/mysql/tables/llx_livraisondet.sql
    +++ b/htdocs/install/mysql/tables/llx_livraisondet.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2008 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2008 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_localtax.sql b/htdocs/install/mysql/tables/llx_localtax.sql
    index 65c9fbe496b..e1cef882e7c 100644
    --- a/htdocs/install/mysql/tables/llx_localtax.sql
    +++ b/htdocs/install/mysql/tables/llx_localtax.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2011-2014	Juanjo Menent	<jmenent@2byte.es>
    --- Copyright (C) 2011		Regis Houssin	<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011		Regis Houssin	<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_mailing.sql b/htdocs/install/mysql/tables/llx_mailing.sql
    index a365aba0be1..74f022d8887 100644
    --- a/htdocs/install/mysql/tables/llx_mailing.sql
    +++ b/htdocs/install/mysql/tables/llx_mailing.sql
    @@ -1,6 +1,6 @@
     -- ========================================================================
     -- Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_mailing_cibles.sql b/htdocs/install/mysql/tables/llx_mailing_cibles.sql
    index c533eb0ff8a..f7a3c357168 100644
    --- a/htdocs/install/mysql/tables/llx_mailing_cibles.sql
    +++ b/htdocs/install/mysql/tables/llx_mailing_cibles.sql
    @@ -1,7 +1,7 @@
     -- ========================================================================
     -- Copyright (C) 2005		Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2009-2016	Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2011-2012	Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011-2012	Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_menu.key.sql b/htdocs/install/mysql/tables/llx_menu.key.sql
    index f98bb00fae0..53b26de8a04 100644
    --- a/htdocs/install/mysql/tables/llx_menu.key.sql
    +++ b/htdocs/install/mysql/tables/llx_menu.key.sql
    @@ -1,7 +1,7 @@
     -- ========================================================================
     -- Copyright (C) 2007      Patrick Raguin       <patrick.raguin@gmail.com>
     -- Copyright (C) 2005-2008 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_menu.sql b/htdocs/install/mysql/tables/llx_menu.sql
    index 18862ff496a..7cbd86bb1a1 100644
    --- a/htdocs/install/mysql/tables/llx_menu.sql
    +++ b/htdocs/install/mysql/tables/llx_menu.sql
    @@ -1,7 +1,7 @@
     -- ========================================================================
     -- Copyright (C) 2007		Patrick Raguin		<patrick.raguin@gmail.com>
     -- Copyright (C) 2007-2008	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2012	Regis Houssin		<regis.houssin@inodbox.com>
     -- Copyright (C) 2012		Marcos García		<marcosgdf@gmail.com>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_paiement.sql b/htdocs/install/mysql/tables/llx_paiement.sql
    index 2a287ac7e89..9f40cb2cfc9 100644
    --- a/htdocs/install/mysql/tables/llx_paiement.sql
    +++ b/htdocs/install/mysql/tables/llx_paiement.sql
    @@ -1,7 +1,7 @@
     -- ===================================================================
     -- Copyright (C) 2001-2004	Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004		Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2012		Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2012		Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    @@ -21,7 +21,7 @@
     create table llx_paiement
     (
       rowid            integer AUTO_INCREMENT PRIMARY KEY,
    -  ref              varchar(30) NOT NULL, -- payment reference number
    +  ref              varchar(30) NULL,                    -- payment reference number
       entity           integer   DEFAULT 1 NOT NULL,		-- Multi company id
       datec            datetime,							-- date de creation
       tms              timestamp,
    @@ -31,9 +31,11 @@ create table llx_paiement
       fk_paiement      integer NOT NULL,
       num_paiement     varchar(50),
       note             text,
    +  ext_payment_id   varchar(128),						-- external id of payment (for example Stripe charge id)
    +  ext_payment_site varchar(128),						-- name of external paymentmode (for example 'stripe')
       fk_bank          integer NOT NULL DEFAULT 0,
       fk_user_creat    integer,								-- utilisateur qui a cree l'info
       fk_user_modif    integer,								-- utilisateur qui a modifie l'info
    -  statut           smallint DEFAULT 0 NOT NULL,		-- Satut, 0 ou 1, 1 n'est plus supprimable
    +  statut           smallint DEFAULT 0 NOT NULL,			-- Satut, 0 ou 1, 1 n'est plus supprimable
       fk_export_compta integer DEFAULT 0 NOT NULL			-- fk_export_compta 0 pas exporte
     )ENGINE=innodb;
    diff --git a/htdocs/install/mysql/tables/llx_payment_salary.sql b/htdocs/install/mysql/tables/llx_payment_salary.sql
    index e3bcd0a9c4a..c56e6459aa0 100644
    --- a/htdocs/install/mysql/tables/llx_payment_salary.sql
    +++ b/htdocs/install/mysql/tables/llx_payment_salary.sql
    @@ -19,6 +19,7 @@
     create table llx_payment_salary
     (
       rowid           integer AUTO_INCREMENT PRIMARY KEY,
    +  ref             varchar(30) NOT NULL,       -- payment reference number
       tms             timestamp,
       datec           datetime,                   -- Create date
       fk_user         integer NOT NULL,
    @@ -26,11 +27,12 @@ create table llx_payment_salary
       datev           date,                       -- value date (this field should not be here, only into bank tables)
       salary          double(24,8),               -- salary of user when payment was done
       amount          double(24,8) NOT NULL DEFAULT 0,
    +  fk_projet       integer DEFAULT NULL,
       fk_typepayment  integer NOT NULL,
    -  num_payment     varchar(50),                -- ref
    +  num_payment     varchar(50),                -- num cheque or other
       label           varchar(255),
       datesp          date,                       -- date start period
    -  dateep          date,                       -- date end period    
    +  dateep          date,                       -- date end period
       entity          integer DEFAULT 1 NOT NULL, -- multi company id
       note            text,
       fk_bank         integer,
    diff --git a/htdocs/install/mysql/tables/llx_payment_various.sql b/htdocs/install/mysql/tables/llx_payment_various.sql
    index e719dae7d8c..d3351287e58 100644
    --- a/htdocs/install/mysql/tables/llx_payment_various.sql
    +++ b/htdocs/install/mysql/tables/llx_payment_various.sql
    @@ -19,7 +19,8 @@
     create table llx_payment_various
     (
       rowid                 integer AUTO_INCREMENT PRIMARY KEY,
    -  num_payment           varchar(50),				-- ref
    +  ref                   varchar(30) NOT NULL,       -- payment reference number
    +  num_payment           varchar(50),				-- num cheque or other
       label                 varchar(255),
       tms                   timestamp,
       datec                 datetime,                   -- Create date
    diff --git a/htdocs/install/mysql/tables/llx_prelevement_bons.key.sql b/htdocs/install/mysql/tables/llx_prelevement_bons.key.sql
    index 999ddc9a848..29c11790339 100644
    --- a/htdocs/install/mysql/tables/llx_prelevement_bons.key.sql
    +++ b/htdocs/install/mysql/tables/llx_prelevement_bons.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2009 Regis Houssin	<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009 Regis Houssin	<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_prelevement_bons.sql b/htdocs/install/mysql/tables/llx_prelevement_bons.sql
    index 25e9381afe0..b796ffabcd6 100644
    --- a/htdocs/install/mysql/tables/llx_prelevement_bons.sql
    +++ b/htdocs/install/mysql/tables/llx_prelevement_bons.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_product.key.sql b/htdocs/install/mysql/tables/llx_product.key.sql
    index 40b4eb130a9..d339f2082ee 100644
    --- a/htdocs/install/mysql/tables/llx_product.key.sql
    +++ b/htdocs/install/mysql/tables/llx_product.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
     -- Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
     --
    diff --git a/htdocs/install/mysql/tables/llx_product.sql b/htdocs/install/mysql/tables/llx_product.sql
    index 1e201038122..8569c6e28d2 100755
    --- a/htdocs/install/mysql/tables/llx_product.sql
    +++ b/htdocs/install/mysql/tables/llx_product.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2008-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
     -- Copyright (C) 2012-2013 Cédric Salvador      <csalvador@gpcsolutions.fr>
     -- Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
    diff --git a/htdocs/install/mysql/tables/llx_product_customer_price.sql b/htdocs/install/mysql/tables/llx_product_customer_price.sql
    index 339de2bb4be..443e48c0f5c 100644
    --- a/htdocs/install/mysql/tables/llx_product_customer_price.sql
    +++ b/htdocs/install/mysql/tables/llx_product_customer_price.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
     -- Copyright (C) 2009-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    --- Copyright (C) 2009-2013	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2013	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
     -- Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
     --
    diff --git a/htdocs/install/mysql/tables/llx_product_fournisseur_price.key.sql b/htdocs/install/mysql/tables/llx_product_fournisseur_price.key.sql
    index c290ad5518e..110736718d1 100644
    --- a/htdocs/install/mysql/tables/llx_product_fournisseur_price.key.sql
    +++ b/htdocs/install/mysql/tables/llx_product_fournisseur_price.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
     -- Copyright (C) 2005-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    --- Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_product_fournisseur_price.sql b/htdocs/install/mysql/tables/llx_product_fournisseur_price.sql
    index ab2efba1455..940967b13d4 100755
    --- a/htdocs/install/mysql/tables/llx_product_fournisseur_price.sql
    +++ b/htdocs/install/mysql/tables/llx_product_fournisseur_price.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2003		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
     -- Copyright (C) 2009-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    --- Copyright (C) 2009-2013	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2013	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
     --
     -- This program is free software; you can redistribute it and/or modify
    @@ -28,6 +28,7 @@ create table llx_product_fournisseur_price
       fk_product			integer,
       fk_soc				integer,
       ref_fourn				varchar(30),
    +  desc_fourn            text,
       fk_availability		integer,	   
       price					double(24,8) DEFAULT 0,		-- price without tax for quantity
       quantity				double,
    diff --git a/htdocs/install/mysql/tables/llx_product_lang.key.sql b/htdocs/install/mysql/tables/llx_product_lang.key.sql
    index 8aa0e8c3280..5c8ab0a5fc9 100644
    --- a/htdocs/install/mysql/tables/llx_product_lang.key.sql
    +++ b/htdocs/install/mysql/tables/llx_product_lang.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2010 Regis Houssin  <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_product_lang.sql b/htdocs/install/mysql/tables/llx_product_lang.sql
    index 7363a65a95c..cbccac26020 100644
    --- a/htdocs/install/mysql/tables/llx_product_lang.sql
    +++ b/htdocs/install/mysql/tables/llx_product_lang.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2009      Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_product_price.sql b/htdocs/install/mysql/tables/llx_product_price.sql
    index 4e5920e1dff..665470239e7 100755
    --- a/htdocs/install/mysql/tables/llx_product_price.sql
    +++ b/htdocs/install/mysql/tables/llx_product_price.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2002-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_product_price_by_qty.key.sql b/htdocs/install/mysql/tables/llx_product_price_by_qty.key.sql
    index 56dbfbd1ae0..57426b53d1b 100644
    --- a/htdocs/install/mysql/tables/llx_product_price_by_qty.key.sql
    +++ b/htdocs/install/mysql/tables/llx_product_price_by_qty.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2002-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
     -- Copyright (C) 2012		Maxime Kohlhaas			<maxime.kohlhaas@atm-consulting.fr>
     --
    diff --git a/htdocs/install/mysql/tables/llx_product_price_by_qty.sql b/htdocs/install/mysql/tables/llx_product_price_by_qty.sql
    index 9dbeb530a34..480b9239407 100644
    --- a/htdocs/install/mysql/tables/llx_product_price_by_qty.sql
    +++ b/htdocs/install/mysql/tables/llx_product_price_by_qty.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2002-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
     -- Copyright (C) 2012		Maxime Kohlhaas			<maxime.kohlhaas@atm-consulting.fr>
     --
    diff --git a/htdocs/install/mysql/tables/llx_projet.key.sql b/htdocs/install/mysql/tables/llx_projet.key.sql
    index 75ad8cb7fef..b3a18f39b03 100644
    --- a/htdocs/install/mysql/tables/llx_projet.key.sql
    +++ b/htdocs/install/mysql/tables/llx_projet.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_projet.sql b/htdocs/install/mysql/tables/llx_projet.sql
    index 8e58f0ad8c8..7216a0f20b1 100644
    --- a/htdocs/install/mysql/tables/llx_projet.sql
    +++ b/htdocs/install/mysql/tables/llx_projet.sql
    @@ -1,6 +1,6 @@
     -- ===========================================================================
     -- Copyright (C) 2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2010 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_projet_task.key.sql b/htdocs/install/mysql/tables/llx_projet_task.key.sql
    index 620bbc17eaa..a64d8395b9f 100644
    --- a/htdocs/install/mysql/tables/llx_projet_task.key.sql
    +++ b/htdocs/install/mysql/tables/llx_projet_task.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2010 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_projet_task.sql b/htdocs/install/mysql/tables/llx_projet_task.sql
    index a7418f2688c..1adc6c6b2b6 100644
    --- a/htdocs/install/mysql/tables/llx_projet_task.sql
    +++ b/htdocs/install/mysql/tables/llx_projet_task.sql
    @@ -1,6 +1,6 @@
     -- ===========================================================================
     -- Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2010 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_propal.key.sql b/htdocs/install/mysql/tables/llx_propal.key.sql
    index 0c202bea2cb..85cd86b70e1 100644
    --- a/htdocs/install/mysql/tables/llx_propal.key.sql
    +++ b/htdocs/install/mysql/tables/llx_propal.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2005 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_propal.sql b/htdocs/install/mysql/tables/llx_propal.sql
    index e4c997b940a..d8eee18629b 100644
    --- a/htdocs/install/mysql/tables/llx_propal.sql
    +++ b/htdocs/install/mysql/tables/llx_propal.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2010      Laurent Destailleur  <eldy@users.sourceforge.net>
     -- Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
     --
    diff --git a/htdocs/install/mysql/tables/llx_propaldet.key.sql b/htdocs/install/mysql/tables/llx_propaldet.key.sql
    index 3d3467ea888..f442ad36106 100644
    --- a/htdocs/install/mysql/tables/llx_propaldet.key.sql
    +++ b/htdocs/install/mysql/tables/llx_propaldet.key.sql
    @@ -1,5 +1,5 @@
     -- ===================================================================
    --- Copyright (C) 2009-2011 Regis Houssin  <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2011 Regis Houssin  <regis.houssin@inodbox.com>
     -- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_propaldet.sql b/htdocs/install/mysql/tables/llx_propaldet.sql
    index 283708fd7ce..fdee7a5dcca 100644
    --- a/htdocs/install/mysql/tables/llx_propaldet.sql
    +++ b/htdocs/install/mysql/tables/llx_propaldet.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2002-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
     -- Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
     -- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
     --
    diff --git a/htdocs/install/mysql/tables/llx_rights_def.key.sql b/htdocs/install/mysql/tables/llx_rights_def.key.sql
    index b1d86a0cd04..d68316c7273 100644
    --- a/htdocs/install/mysql/tables/llx_rights_def.key.sql
    +++ b/htdocs/install/mysql/tables/llx_rights_def.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_rights_def.sql b/htdocs/install/mysql/tables/llx_rights_def.sql
    index 297772730c7..3de223d1606 100644
    --- a/htdocs/install/mysql/tables/llx_rights_def.sql
    +++ b/htdocs/install/mysql/tables/llx_rights_def.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_societe.sql b/htdocs/install/mysql/tables/llx_societe.sql
    index f1714021fb8..6225ae416e8 100644
    --- a/htdocs/install/mysql/tables/llx_societe.sql
    +++ b/htdocs/install/mysql/tables/llx_societe.sql
    @@ -1,7 +1,7 @@
     -- ========================================================================
     -- Copyright (C) 2000-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2010      Juanjo Menent        <dolibarr@2byte.es>
     -- Copyright (C) 2014      Teddy Andreotti      <125155@supinfo.com>
     -- Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    @@ -50,7 +50,16 @@ create table llx_societe
       fax                      varchar(20),                         		-- fax number
       url                      varchar(255),                        		--
       email                    varchar(128),                        		--
    +  
       skype                    varchar(255),                        		--
    +  twitter                  varchar(255),                        		--
    +  facebook                 varchar(255),                        		--
    +  instagram                varchar(255),                        		--
    +  snapchat                 varchar(255),                        		--
    +  googleplus               varchar(255),                        		--
    +  youtube                  varchar(255),                        		--
    +  whatsapp                 varchar(255),                        		--
    +  
       fk_effectif              integer        DEFAULT 0,            		--
       fk_typent                integer        DEFAULT 0,            		--
       fk_forme_juridique       integer        DEFAULT 0,            		-- juridical status
    diff --git a/htdocs/install/mysql/tables/llx_societe_address.sql b/htdocs/install/mysql/tables/llx_societe_address.sql
    index aa596333b2c..8ae2d07f389 100644
    --- a/htdocs/install/mysql/tables/llx_societe_address.sql
    +++ b/htdocs/install/mysql/tables/llx_societe_address.sql
    @@ -1,6 +1,6 @@
     -- ========================================================================
     -- Copyright (C) 2000-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2013 Houssin Regis        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2013 Houssin Regis        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_societe_remise.sql b/htdocs/install/mysql/tables/llx_societe_remise.sql
    index a9d41fcd502..a94ff35085e 100644
    --- a/htdocs/install/mysql/tables/llx_societe_remise.sql
    +++ b/htdocs/install/mysql/tables/llx_societe_remise.sql
    @@ -1,6 +1,6 @@
     -- ========================================================================
     -- Copyright (C) 2000-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2011-2016 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011-2016 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_societe_remise_supplier.sql b/htdocs/install/mysql/tables/llx_societe_remise_supplier.sql
    index c1b56f225c7..1e3e3edd5fe 100644
    --- a/htdocs/install/mysql/tables/llx_societe_remise_supplier.sql
    +++ b/htdocs/install/mysql/tables/llx_societe_remise_supplier.sql
    @@ -1,6 +1,6 @@
     -- ========================================================================
     -- Copyright (C) 2000-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2011-2016 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011-2016 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_societe_rib.sql b/htdocs/install/mysql/tables/llx_societe_rib.sql
    index 2463378067a..57b22493c85 100644
    --- a/htdocs/install/mysql/tables/llx_societe_rib.sql
    +++ b/htdocs/install/mysql/tables/llx_societe_rib.sql
    @@ -1,6 +1,6 @@
     -- =============================================================================
     -- Copyright (C) 2000-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2012	   Juanjo Menent        <jmenent@2byte.es>
     -- Copyright (C) 2013      Peter Fontaine       <contact@peterfontaine.fr>
     --
    diff --git a/htdocs/install/mysql/tables/llx_socpeople.sql b/htdocs/install/mysql/tables/llx_socpeople.sql
    index 51848b33b48..94cf869543d 100644
    --- a/htdocs/install/mysql/tables/llx_socpeople.sql
    +++ b/htdocs/install/mysql/tables/llx_socpeople.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2008      Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    @@ -41,8 +41,17 @@ create table llx_socpeople
       phone_mobile		varchar(30),
       fax				varchar(30),
       email				varchar(255),
    +  
       jabberid			varchar(255),
       skype				varchar(255),
    +  twitter			varchar(255),                        		--
    +  facebook			varchar(255),                        		--
    +  instagram                varchar(255),                        		--
    +  snapchat                 varchar(255),                        		--
    +  googleplus               varchar(255),                        		--
    +  youtube                  varchar(255),                        		--
    +  whatsapp                 varchar(255),                        		--
    +  
       photo				varchar(255),
       no_email			smallint NOT NULL DEFAULT 0,
       priv				smallint NOT NULL DEFAULT 0,
    diff --git a/htdocs/install/mysql/tables/llx_stock_mouvement.sql b/htdocs/install/mysql/tables/llx_stock_mouvement.sql
    index 1e78e7a9820..fdeab913268 100644
    --- a/htdocs/install/mysql/tables/llx_stock_mouvement.sql
    +++ b/htdocs/install/mysql/tables/llx_stock_mouvement.sql
    @@ -33,6 +33,7 @@ create table llx_stock_mouvement
       fk_user_author  integer,							-- Id user making movement
       label           varchar(255),						-- Comment on movement
       inventorycode   varchar(128),						-- Code used to group different movement line into one operation (may be an inventory, a mass picking)
    +  fk_project	  integer,
       fk_origin       integer,
       origintype      varchar(32),
       model_pdf       varchar(255)
    diff --git a/htdocs/install/mysql/tables/llx_supplier_proposaldet.key.sql b/htdocs/install/mysql/tables/llx_supplier_proposaldet.key.sql
    index e6af3c7e515..cb6064c61f2 100644
    --- a/htdocs/install/mysql/tables/llx_supplier_proposaldet.key.sql
    +++ b/htdocs/install/mysql/tables/llx_supplier_proposaldet.key.sql
    @@ -1,5 +1,5 @@
     -- ===================================================================
    --- Copyright (C) 2009-2011 Regis Houssin  <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009-2011 Regis Houssin  <regis.houssin@inodbox.com>
     -- Copyright (C) 2012      Cédric Salvador      <csalvador@gpcsolutions.fr>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_takepos_floor_tables.sql b/htdocs/install/mysql/tables/llx_takepos_floor_tables.sql
    new file mode 100644
    index 00000000000..c8cae17b5a2
    --- /dev/null
    +++ b/htdocs/install/mysql/tables/llx_takepos_floor_tables.sql
    @@ -0,0 +1,26 @@
    +-- Copyright (C) 2018 SuperAdmin
    +--
    +-- This program is free software: you can redistribute it and/or modify
    +-- it under the terms of the GNU General Public License as published by
    +-- the Free Software Foundation, either version 3 of the License, or
    +-- (at your option) any later version.
    +--
    +-- This program is distributed in the hope that it will be useful,
    +-- but WITHOUT ANY WARRANTY; without even the implied warranty of
    +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +-- GNU General Public License for more details.
    +--
    +-- You should have received a copy of the GNU General Public License
    +-- along with this program.  If not, see http://www.gnu.org/licenses/.
    +
    +
    +CREATE TABLE llx_takepos_floor_tables(
    +    -- BEGIN MODULEBUILDER FIELDS
    +    rowid integer AUTO_INCREMENT PRIMARY KEY,
    +    entity integer DEFAULT 1 NOT NULL,
    +    label varchar(255),
    +    leftpos float,
    +    toppos float,
    +    floor smallint
    +    -- END MODULEBUILDER FIELDS
    +) ENGINE=innodb;
    diff --git a/htdocs/install/mysql/tables/llx_tva.sql b/htdocs/install/mysql/tables/llx_tva.sql
    index 34ab53a5b22..56678f4ffa6 100644
    --- a/htdocs/install/mysql/tables/llx_tva.sql
    +++ b/htdocs/install/mysql/tables/llx_tva.sql
    @@ -1,6 +1,6 @@
     -- ===================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_user.key.sql b/htdocs/install/mysql/tables/llx_user.key.sql
    index 82d5f28ef06..eaed60a3b0b 100644
    --- a/htdocs/install/mysql/tables/llx_user.key.sql
    +++ b/htdocs/install/mysql/tables/llx_user.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2006-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2007      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2007      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_user.sql b/htdocs/install/mysql/tables/llx_user.sql
    index 2ecb52511d4..90dc8a835ef 100644
    --- a/htdocs/install/mysql/tables/llx_user.sql
    +++ b/htdocs/install/mysql/tables/llx_user.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2006-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2007-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2007-2013 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    @@ -49,11 +49,21 @@ create table llx_user
       fk_country        integer        DEFAULT 0,
       birth             date,						-- birthday
       job				varchar(128),
    -  skype             varchar(255),
       office_phone      varchar(20),
       office_fax        varchar(20),
       user_mobile       varchar(20),
       email             varchar(255),
    +  
    +  jabberid			varchar(255),
    +  skype				varchar(255),
    +  twitter			varchar(255),                        		--
    +  facebook			varchar(255),                        		--
    +  instagram                varchar(255),                        		--
    +  snapchat                 varchar(255),                        		--
    +  googleplus               varchar(255),                        		--
    +  youtube                  varchar(255),                        		--
    +  whatsapp                 varchar(255),                        		--
    +  
       signature         text DEFAULT NULL,
       admin             smallint DEFAULT 0,
       module_comm       smallint DEFAULT 1,
    @@ -84,6 +94,7 @@ create table llx_user
       salary			double(24,8),				-- denormalized value coming from llx_user_employment
       salaryextra		double(24,8),				-- denormalized value coming from llx_user_employment
       dateemployment	date,						-- denormalized value coming from llx_user_employment
    +  dateemploymentend	date,						-- denormalized value coming from llx_user_employment
       weeklyhours		double(16,8),				-- denormalized value coming from llx_user_employment
     
       import_key        varchar(14),				-- import key
    diff --git a/htdocs/install/mysql/tables/llx_user_extrafields.key.sql b/htdocs/install/mysql/tables/llx_user_extrafields.key.sql
    index 3c3d6e8df7f..387934ba9be 100644
    --- a/htdocs/install/mysql/tables/llx_user_extrafields.key.sql
    +++ b/htdocs/install/mysql/tables/llx_user_extrafields.key.sql
    @@ -1,7 +1,7 @@
     -- ===================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     -- Copyright (C) 2011      Laurent Destailleur  <eldy@users.sourceforge.net>
     --
     -- This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/install/mysql/tables/llx_user_extrafields.sql b/htdocs/install/mysql/tables/llx_user_extrafields.sql
    index 9adb684da1b..b3c47a0cf0d 100644
    --- a/htdocs/install/mysql/tables/llx_user_extrafields.sql
    +++ b/htdocs/install/mysql/tables/llx_user_extrafields.sql
    @@ -1,7 +1,7 @@
     -- ===================================================================
     -- Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
    --- Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_user_param.key.sql b/htdocs/install/mysql/tables/llx_user_param.key.sql
    index 976fea1195b..b37bd16f3f8 100644
    --- a/htdocs/install/mysql/tables/llx_user_param.key.sql
    +++ b/htdocs/install/mysql/tables/llx_user_param.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2009 Regis Houssin <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009 Regis Houssin <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_user_param.sql b/htdocs/install/mysql/tables/llx_user_param.sql
    index 365f49b060d..7738cab93de 100644
    --- a/htdocs/install/mysql/tables/llx_user_param.sql
    +++ b/htdocs/install/mysql/tables/llx_user_param.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_user_rights.key.sql b/htdocs/install/mysql/tables/llx_user_rights.key.sql
    index 8fae1c1a160..51f95566651 100644
    --- a/htdocs/install/mysql/tables/llx_user_rights.key.sql
    +++ b/htdocs/install/mysql/tables/llx_user_rights.key.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
     -- Copyright (C) 2005	Laurent Destailleur		<eldy@users.sourceforge.net>
    --- Copyright (C) 2017	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2017	Regis Houssin			<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_user_rights.sql b/htdocs/install/mysql/tables/llx_user_rights.sql
    index cedfa8a00c9..092243b2c46 100644
    --- a/htdocs/install/mysql/tables/llx_user_rights.sql
    +++ b/htdocs/install/mysql/tables/llx_user_rights.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    --- Copyright (C) 2017	Regis Houssin			<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2017	Regis Houssin			<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_usergroup.key.sql b/htdocs/install/mysql/tables/llx_usergroup.key.sql
    index cc0f28bd9d2..c3ee77bd62e 100644
    --- a/htdocs/install/mysql/tables/llx_usergroup.key.sql
    +++ b/htdocs/install/mysql/tables/llx_usergroup.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2009 Regis Houssin  <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2009 Regis Houssin  <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_usergroup.sql b/htdocs/install/mysql/tables/llx_usergroup.sql
    index f82c21eae87..cde18968d43 100644
    --- a/htdocs/install/mysql/tables/llx_usergroup.sql
    +++ b/htdocs/install/mysql/tables/llx_usergroup.sql
    @@ -1,7 +1,7 @@
     -- ============================================================================
     -- Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
     -- Copyright (C) 2005-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    --- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_usergroup_rights.key.sql b/htdocs/install/mysql/tables/llx_usergroup_rights.key.sql
    index f08a6f62637..88da9c98875 100644
    --- a/htdocs/install/mysql/tables/llx_usergroup_rights.key.sql
    +++ b/htdocs/install/mysql/tables/llx_usergroup_rights.key.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2005	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2017	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2017	Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_usergroup_rights.sql b/htdocs/install/mysql/tables/llx_usergroup_rights.sql
    index e8a3af37e7c..a139dcc6317 100644
    --- a/htdocs/install/mysql/tables/llx_usergroup_rights.sql
    +++ b/htdocs/install/mysql/tables/llx_usergroup_rights.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2005	Laurent Destailleur	<eldy@users.sourceforge.net>
    --- Copyright (C) 2017	Regis Houssin		<regis.houssin@capnetworks.com>
    +-- Copyright (C) 2017	Regis Houssin		<regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_usergroup_user.key.sql b/htdocs/install/mysql/tables/llx_usergroup_user.key.sql
    index c88ac4004fc..d05b45070d1 100644
    --- a/htdocs/install/mysql/tables/llx_usergroup_user.key.sql
    +++ b/htdocs/install/mysql/tables/llx_usergroup_user.key.sql
    @@ -1,5 +1,5 @@
     -- ============================================================================
    --- Copyright (C) 2011 Regis Houssin  <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011 Regis Houssin  <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_usergroup_user.sql b/htdocs/install/mysql/tables/llx_usergroup_user.sql
    index ce29b211299..335cd58baac 100644
    --- a/htdocs/install/mysql/tables/llx_usergroup_user.sql
    +++ b/htdocs/install/mysql/tables/llx_usergroup_user.sql
    @@ -1,6 +1,6 @@
     -- ============================================================================
     -- Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    --- Copyright (C) 2011 Regis Houssin        <regis.houssin@capnetworks.com>
    +-- Copyright (C) 2011 Regis Houssin        <regis.houssin@inodbox.com>
     --
     -- This program is free software; you can redistribute it and/or modify
     -- it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/install/mysql/tables/llx_website.sql b/htdocs/install/mysql/tables/llx_website.sql
    index dd35116a91f..697e76b22a2 100644
    --- a/htdocs/install/mysql/tables/llx_website.sql
    +++ b/htdocs/install/mysql/tables/llx_website.sql
    @@ -24,12 +24,14 @@ CREATE TABLE llx_website
     	entity        integer NOT NULL DEFAULT 1,
     	ref	          varchar(128) NOT NULL,
     	description   varchar(255),
    +	maincolor     varchar(16),
    +	maincolorbis  varchar(16),
     	status		  integer DEFAULT 1,
     	fk_default_home integer, 
     	virtualhost   varchar(255), 
    -    fk_user_create integer,
    -    fk_user_modif  integer,
    -    date_creation  datetime,
    -	tms            timestamp,
    -    import_key     varchar(14)      -- import key	
    +    fk_user_creat integer,
    +    fk_user_modif integer,
    +    date_creation datetime,
    +	tms           timestamp,
    +    import_key    varchar(14)      -- import key	
     ) ENGINE=innodb;
    diff --git a/htdocs/install/mysql/tables/llx_website_page.sql b/htdocs/install/mysql/tables/llx_website_page.sql
    index c795fa254dc..3c872f00dac 100644
    --- a/htdocs/install/mysql/tables/llx_website_page.sql
    +++ b/htdocs/install/mysql/tables/llx_website_page.sql
    @@ -32,10 +32,10 @@ CREATE TABLE llx_website_page
     	htmlheader	  text,
     	content		  mediumtext,		-- text is not enough in size
         status        integer DEFAULT 1,
    -	grabbed_from   varchar(255),
    -    fk_user_create integer,
    -    fk_user_modif  integer,
    -    date_creation  datetime,
    -	tms            timestamp,
    -    import_key     varchar(14)      -- import key
    +	grabbed_from  varchar(255),
    +    fk_user_creat integer,
    +    fk_user_modif integer,
    +    date_creation datetime,
    +	tms           timestamp,
    +    import_key    varchar(14)      -- import key
     ) ENGINE=innodb;
    diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php
    index 1fbda8e8abb..888daa4abe2 100644
    --- a/htdocs/install/repair.php
    +++ b/htdocs/install/repair.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Raphaël Doursenaud   <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -549,11 +549,11 @@ if ($ok && GETPOST('clean_menus','alpha'))
     								dol_print_error($db);
     							}
     							else
    -								print ' - <font class="warning">Cleaned</font>';
    +								print ' - <span class="warning">Cleaned</span>';
     						}
     						else
     						{
    -							print ' - <font class="warning">Canceled (test mode)</font>';
    +							print ' - <span class="warning">Canceled (test mode)</span>';
     						}
     					}
     					else
    @@ -648,7 +648,6 @@ if ($ok && GETPOST('clean_orphelin_dir','alpha'))
                 $object_instance=new ChargeSociales($db);
             }
     
    -        $var=true;
             foreach($filearray as $key => $file)
             {
                 if (!is_dir($file['name'])
    @@ -898,7 +897,6 @@ if ($ok && GETPOST('set_empty_time_spent_amount','alpha'))
         {
             dol_print_error($db);
         }
    -
     }
     
     
    @@ -984,11 +982,11 @@ if ($ok && GETPOST('force_disable_of_modules_not_found','alpha'))
     	                                    dol_print_error($db);
     	                                }
     	                                else
    -	                                    print ' - <font class="warning">Cleaned</font>';
    +	                                    print ' - <span class="warning">Cleaned</span>';
     	                            }
     	                            else
     	                            {
    -	                                print ' - <font class="warning">Canceled (test mode)</font>';
    +	                                print ' - <span class="warning">Canceled (test mode)</span>';
     	                            }
     	                        }
     	                        else
    diff --git a/htdocs/install/step1.php b/htdocs/install/step1.php
    index 6f1143d6f10..50af0cc7219 100644
    --- a/htdocs/install/step1.php
    +++ b/htdocs/install/step1.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
      * Copyright (C) 2004       Sebastien Di Cintio     <sdicintio@ressource-toi.org>
    - * Copyright (C) 2005-2011  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2015-2016  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -36,9 +36,7 @@ $action=GETPOST('action','aZ09')?GETPOST('action','aZ09'):(empty($argv[1])?'':$a
     $setuplang=GETPOST('selectlang','aZ09',3)?GETPOST('selectlang','aZ09',3):(empty($argv[2])?'auto':$argv[2]);
     $langs->setDefaultLang($setuplang);
     
    -$langs->load("admin");
    -$langs->load("install");
    -$langs->load("errors");
    +$langs->loadLangs(array("admin", "install", "errors"));
     
     // Dolibarr pages directory
     $main_dir = GETPOST('main_dir')?GETPOST('main_dir'):(empty($argv[3])?'':$argv[3]);
    @@ -46,7 +44,7 @@ $main_dir = GETPOST('main_dir')?GETPOST('main_dir'):(empty($argv[3])?'':$argv[3]
     $main_data_dir = GETPOST('main_data_dir') ? GETPOST('main_data_dir') : (empty($argv[4])? ($main_dir . '/documents') :$argv[4]);
     // Dolibarr root URL
     $main_url = GETPOST('main_url')?GETPOST('main_url'):(empty($argv[5])?'':$argv[5]);
    -// Database login informations
    +// Database login information
     $userroot=GETPOST('db_user_root','alpha')?GETPOST('db_user_root','alpha'):(empty($argv[6])?'':$argv[6]);
     $passroot=GETPOST('db_pass_root','none')?GETPOST('db_pass_root','none'):(empty($argv[7])?'':$argv[7]);
     // Database server
    @@ -68,18 +66,18 @@ $main_alt_dir_name = ((GETPOST("main_alt_dir_name",'alpha') && GETPOST("main_alt
     
     session_start();    // To be able to keep info into session (used for not losing password during navigation. The password must not transit through parameters)
     
    -// Save a flag to tell to restore input value if we do back
    +// Save a flag to tell to restore input value if we go back
     $_SESSION['dol_save_pass']=$db_pass;
     //$_SESSION['dol_save_passroot']=$passroot;
     
    -// Now we load forced value from install.forced.php file.
    +// Now we load forced values from install.forced.php file.
     $useforcedwizard=false;
     $forcedfile="./install.forced.php";
     if ($conffile == "/etc/dolibarr/conf.php") $forcedfile="/etc/dolibarr/install.forced.php";
     if (@file_exists($forcedfile)) {
     	$useforcedwizard = true;
     	include_once $forcedfile;
    -	// If forced install is enabled, let's replace post values. These are empty because form fields are disabled.
    +	// If forced install is enabled, replace the post values. These are empty because form fields are disabled.
     	if ($force_install_noedit) {
     		$main_dir = detect_dolibarr_main_document_root();
     		if (!empty($force_install_main_data_root)) {
    @@ -204,7 +202,7 @@ if (! $error) {
         $result=@include_once $main_dir."/core/db/".$db_type.'.class.php';
         if ($result)
         {
    -        // If we ask database or user creation we need to connect as root, so we need root login
    +        // If we require database or user creation we need to connect as root, so we need root login credentials
             if (!empty($db_create_database) && !$userroot) {
                 print '<div class="error">'.$langs->trans("YouAskDatabaseCreationSoDolibarrNeedToConnect",$db_name).'</div>';
                 print '<br>';
    @@ -397,7 +395,7 @@ if (! $error && $db->connected && $action == "set")
                 print "<tr><td>".$langs->trans("ErrorDirDoesNotExists",$main_data_dir);
                 print ' '.$langs->trans("YouMustCreateItAndAllowServerToWrite");
                 print '</td><td>';
    -            print '<font class="error">'.$langs->trans("Error").'</font>';
    +            print '<span class="error">'.$langs->trans("Error").'</span>';
                 print "</td></tr>";
                 print '<tr><td colspan="2"><br>'.$langs->trans("CorrectProblemAndReloadPage",$_SERVER['PHP_SELF'].'?testget=ok').'</td></tr>';
                 $error++;
    @@ -420,7 +418,7 @@ if (! $error && $db->connected && $action == "set")
                     }
                 }
     
    -            // Les documents sont en dehors de htdocs car ne doivent pas pouvoir etre telecharges en passant outre l'authentification
    +            // Documents are stored above the web pages root to prevent being downloaded without authentification
                 $dir=array();
                 $dir[] = $main_data_dir."/mycompany";
                 $dir[] = $main_data_dir."/medias";
    @@ -431,7 +429,7 @@ if (! $error && $db->connected && $action == "set")
                 $dir[] = $main_data_dir."/produit";
                 $dir[] = $main_data_dir."/doctemplates";
     
    -            // Boucle sur chaque repertoire de dir[] pour les creer s'ils nexistent pas
    +            // Loop on each directory of dir [] to create them if they do not exist
                 $num=count($dir);
                 for ($i = 0; $i < $num; $i++)
                 {
    @@ -469,7 +467,7 @@ if (! $error && $db->connected && $action == "set")
                     print "<tr><td>".$langs->trans("ErrorDirDoesNotExists",$main_data_dir);
                     print ' '.$langs->trans("YouMustCreateItAndAllowServerToWrite");
                     print '</td><td>';
    -                print '<font class="error">'.$langs->trans("Error").'</font>';
    +                print '<span class="error">'.$langs->trans("Error").'</span>';
                     print "</td></tr>";
                     print '<tr><td colspan="2"><br>'.$langs->trans("CorrectProblemAndReloadPage",$_SERVER['PHP_SELF'].'?testget=ok').'</td></tr>';
                 }
    @@ -485,8 +483,8 @@ if (! $error && $db->connected && $action == "set")
                 		'products' => 'product',
                 		'projects' => 'project',
                 		'proposals' => 'proposal',
    -            		'shipment' => 'shipment',
    -            		'supplier_proposal' => 'supplier_proposal',
    +            		'shipments' => 'shipment',
    +            		'supplier_proposals' => 'supplier_proposal',
                 		'tasks' => 'task_summary',
                 		'thirdparties' => 'thirdparty',
                 		'usergroups' => 'usergroups',
    @@ -519,7 +517,7 @@ if (! $error && $db->connected && $action == "set")
             // Save old conf file on disk
             if (file_exists("$conffile"))
             {
    -            // We must ignore errors as an existing old file may already exists and not be replacable or
    +            // We must ignore errors as an existing old file may already exist and not be replaceable or
                 // the installer (like for ubuntu) may not have permission to create another file than conf.php.
                 // Also no other process must be able to read file or we expose the new file, so content with password.
                 @dol_copy($conffile, $conffile.'.old', '0400');
    @@ -539,7 +537,7 @@ if (! $error && $db->connected && $action == "set")
             print '</td>';
             print '<td><img src="../theme/eldy/img/tick.png" alt="Ok"></td></tr>';
     
    -        // Si creation utilisateur admin demandee, on le cree
    +        // Create database user if requested
             if (isset($db_create_user) && ($db_create_user == "1" || $db_create_user == "on")) {
                 dolibarr_install_syslog("step1: create database user: " . $dolibarr_main_db_user);
     
    @@ -558,7 +556,7 @@ if (! $error && $db->connected && $action == "set")
                     $databasefortest='master';
                 }
     
    -            // Creation handler de base, verification du support et connexion
    +            // Check database connection
     
                 $db=getDoliDBInstance($conf->db->type,$conf->db->host,$userroot,$passroot,$databasefortest,$conf->db->port);
     
    @@ -629,7 +627,7 @@ if (! $error && $db->connected && $action == "set")
                         print '<td><img src="../theme/eldy/img/error.png" alt="Error"></td>';
                         print '</tr>';
     
    -                    // Affiche aide diagnostique
    +                    // warning message due to connection failure
                         print '<tr><td colspan="2"><br>';
                         print $langs->trans("YouAskDatabaseCreationSoDolibarrNeedToConnect",$dolibarr_main_db_user,$dolibarr_main_db_host,$userroot);
                         print '<br>';
    @@ -640,10 +638,10 @@ if (! $error && $db->connected && $action == "set")
                         $error++;
                     }
                 }
    -        }   // Fin si "creation utilisateur"
    +        }   // end of user account creation
     
     
    -        // If database creation is asked, we create it
    +        // If database creation was asked, we create it
             if (!$error && (isset($db_create_database) && ($db_create_database == "1" || $db_create_database == "on"))) {
                 dolibarr_install_syslog("step1: create database: " . $dolibarr_main_db_name . " " . $dolibarr_main_db_character_set . " " . $dolibarr_main_db_collation . " " . $dolibarr_main_db_user);
             	$newdb=getDoliDBInstance($conf->db->type,$conf->db->host,$userroot,$passroot,'',$conf->db->port);
    @@ -672,7 +670,7 @@ if (! $error && $db->connected && $action == "set")
                     }
                     else
                     {
    -                    // Affiche aide diagnostique
    +                    // warning message
                         print '<tr><td colspan="2"><br>';
                         print $langs->trans("ErrorFailedToCreateDatabase",$dolibarr_main_db_name).'<br>';
                         print $newdb->lasterror().'<br>';
    @@ -693,7 +691,7 @@ if (! $error && $db->connected && $action == "set")
                     print '<td><img src="../theme/eldy/img/error.png" alt="Error"></td>';
                     print '</tr>';
     
    -                // Affiche aide diagnostique
    +                // warning message
                     print '<tr><td colspan="2"><br>';
                     print $langs->trans("YouAskDatabaseCreationSoDolibarrNeedToConnect",$dolibarr_main_db_user,$dolibarr_main_db_host,$userroot);
                     print '<br>';
    @@ -703,7 +701,7 @@ if (! $error && $db->connected && $action == "set")
     
                     $error++;
                 }
    -        }   // Fin si "creation database"
    +        }   // end of create database
     
     
             // We test access with dolibarr database user (not admin)
    @@ -724,7 +722,7 @@ if (! $error && $db->connected && $action == "set")
                     print '<img src="../theme/eldy/img/tick.png" alt="Ok">';
                     print "</td></tr>";
     
    -                // si acces serveur ok et acces base ok, tout est ok, on ne va pas plus loin, on a meme pas utilise le compte root.
    +                // server access ok, basic access ok
                     if ($db->database_selected)
                     {
                         dolibarr_install_syslog("step1: connection to database " . $conf->db->name . " by user " . $conf->db->user . " ok");
    @@ -747,7 +745,7 @@ if (! $error && $db->connected && $action == "set")
                         print '<img src="../theme/eldy/img/error.png" alt="Error">';
                         print "</td></tr>";
     
    -                    // Affiche aide diagnostique
    +                    // warning message
                         print '<tr><td colspan="2"><br>';
                         print $langs->trans('CheckThatDatabasenameIsCorrect',$dolibarr_main_db_name).'<br>';
                         print $langs->trans('IfAlreadyExistsCheckOption').'<br>';
    @@ -767,7 +765,7 @@ if (! $error && $db->connected && $action == "set")
                     print '<img src="../theme/eldy/img/error.png" alt="Error">';
                     print "</td></tr>";
     
    -                // Affiche aide diagnostique
    +                // warning message
                     print '<tr><td colspan="2"><br>';
                     print $langs->trans("ErrorConnection",$conf->db->host,$conf->db->name,$conf->db->user);
                     print $langs->trans('IfLoginDoesNotExistsCheckCreateUser').'<br>';
    @@ -1023,7 +1021,7 @@ function write_conf_file($conffile)
     
     		if (file_exists("$conffile"))
     		{
    -			include $conffile;	// On force rechargement. Ne pas mettre include_once !
    +			include $conffile;	// force config reload, do not put include_once
     			conf($dolibarr_main_document_root);
     
     			print "<tr><td>";
    diff --git a/htdocs/install/step2.php b/htdocs/install/step2.php
    index 30b3ff7d64f..4b12ba49432 100644
    --- a/htdocs/install/step2.php
    +++ b/htdocs/install/step2.php
    @@ -46,8 +46,7 @@ $action=GETPOST('action','aZ09')?GETPOST('action','aZ09'):(empty($argv[1])?'':$a
     $setuplang=GETPOST('selectlang','aZ09',3)?GETPOST('selectlang','aZ09',3):(empty($argv[2])?'auto':$argv[2]);
     $langs->setDefaultLang($setuplang);
     
    -$langs->load("admin");
    -$langs->load("install");
    +$langs->loadLangs(array("admin", "install"));
     
     $choix=0;
     if ($dolibarr_main_db_type == "mysqli") $choix=1;
    @@ -58,7 +57,7 @@ if ($dolibarr_main_db_type == "sqlite3")  $choix=5;
     
     //if (empty($choix)) dol_print_error('','Database type '.$dolibarr_main_db_type.' not supported into step2.php page');
     
    -// Now we load forced value from install.forced.php file.
    +// Now we load forced values from install.forced.php file.
     $useforcedwizard=false;
     $forcedfile="./install.forced.php";
     if ($conffile == "/etc/dolibarr/conf.php") $forcedfile="/etc/dolibarr/install.forced.php";
    @@ -67,7 +66,7 @@ if (@file_exists($forcedfile)) {
     	include_once $forcedfile;
     }
     
    -dolibarr_install_syslog("--- step2: entering step2.php page");
    +dolibarr_install_syslog("- step2: entering step2.php page");
     
     
     /*
    @@ -88,7 +87,7 @@ if ($action == "set")
     {
         print '<h3><img class="valigntextbottom" src="../theme/common/octicons/build/svg/database.svg" width="20" alt="Database"> '.$langs->trans("Database").'</h3>';
     
    -    print '<table cellspacing="0" style="padding: 4px 4px 4px 0px" border="0" width="100%">';
    +    print '<table cellspacing="0" style="padding: 4px 4px 4px 0" border="0" width="100%">';
         $error=0;
     
         $db=getDoliDBInstance($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port);
    @@ -237,7 +236,7 @@ if ($action == "set")
                             print "<tr><td>".$langs->trans("CreateTableAndPrimaryKey",$name);
                             print "<br>\n".$langs->trans("Request").' '.$requestnb.' : '.$buffer.' <br>Executed query : '.$db->lastquery;
                             print "\n</td>";
    -                        print '<td><font class="error">'.$langs->trans("ErrorSQL")." ".$db->errno()." ".$db->error().'</font></td></tr>';
    +                        print '<td><span class="error">'.$langs->trans("ErrorSQL")." ".$db->errno()." ".$db->error().'</span></td></tr>';
                             $error++;
                         }
                     }
    @@ -246,7 +245,7 @@ if ($action == "set")
                 {
                     print "<tr><td>".$langs->trans("CreateTableAndPrimaryKey",$name);
                     print "</td>";
    -                print '<td><font class="error">'.$langs->trans("Error").' Failed to open file '.$dir.$file.'</td></tr>';
    +                print '<td><span class="error">'.$langs->trans("Error").' Failed to open file '.$dir.$file.'</span></td></tr>';
                     $error++;
                     dolibarr_install_syslog("step2: failed to open file " . $dir . $file, LOG_ERR);
                 }
    @@ -384,7 +383,7 @@ if ($action == "set")
                                     print "<tr><td>".$langs->trans("CreateOtherKeysForTable",$name);
                                     print "<br>\n".$langs->trans("Request").' '.$requestnb.' : '.$db->lastqueryerror();
                                     print "\n</td>";
    -                                print '<td><font class="error">'.$langs->trans("ErrorSQL")." ".$db->errno()." ".$db->error().'</font></td></tr>';
    +                                print '<td><span class="error">'.$langs->trans("ErrorSQL")." ".$db->errno()." ".$db->error().'</span></td></tr>';
                                     $error++;
                                 }
                             }
    @@ -395,7 +394,7 @@ if ($action == "set")
                 {
                     print "<tr><td>".$langs->trans("CreateOtherKeysForTable",$name);
                     print "</td>";
    -                print '<td><font class="error">'.$langs->trans("Error")." Failed to open file ".$dir.$file."</font></td></tr>";
    +                print '<td><span class="error">'.$langs->trans("Error")." Failed to open file ".$dir.$file."</span></td></tr>";
                     $error++;
                     dolibarr_install_syslog("step2: failed to open file " . $dir . $file, LOG_ERR);
                 }
    @@ -417,7 +416,7 @@ if ($action == "set")
          ***************************************************************************************/
         if ($ok && $createfunctions)
         {
    -        // For this file, we use directory according to database type
    +        // For this file, we use a directory according to database type
             if ($choix==1) $dir = "mysql/functions/";
             elseif ($choix==2) $dir = "pgsql/functions/";
             elseif ($choix==3) $dir = "mssql/functions/";
    @@ -473,7 +472,7 @@ if ($action == "set")
                                 print "<tr><td>".$langs->trans("FunctionsCreation");
                                 print "<br>\n".$langs->trans("Request").' '.$requestnb.' : '.$buffer;
                                 print "\n</td>";
    -                            print '<td><font class="error">'.$langs->trans("ErrorSQL")." ".$db->errno()." ".$db->error().'</font></td></tr>';
    +                            print '<td><span class="error">'.$langs->trans("ErrorSQL")." ".$db->errno()." ".$db->error().'</span></td></tr>';
                                 $error++;
                             }
                         }
    @@ -490,7 +489,6 @@ if ($action == "set")
                     print '<td><img src="../theme/eldy/img/error.png" alt="Error"></td></tr>';
                     $ok = 1 ;
                 }
    -
             }
         }
     
    @@ -594,7 +592,7 @@ if ($action == "set")
                             {
                                 $ok = 0;
                                 $okallfile = 0;
    -                            print '<font class="error">'.$langs->trans("ErrorSQL")." : ".$db->lasterrno()." - ".$db->lastqueryerror()." - ".$db->lasterror()."</font><br>";
    +                            print '<span class="error">'.$langs->trans("ErrorSQL")." : ".$db->lasterrno()." - ".$db->lastqueryerror()." - ".$db->lasterror()."</span><br>";
                             }
                         }
                     }
    @@ -627,7 +625,7 @@ $ret=0;
     if (!$ok && isset($argv[1])) $ret=1;
     dolibarr_install_syslog("Exit ".$ret);
     
    -dolibarr_install_syslog("--- step2: end");
    +dolibarr_install_syslog("- step2: end");
     
     pFooter($ok?0:1,$setuplang);
     
    @@ -635,4 +633,3 @@ if (isset($db) && is_object($db)) $db->close();
     
     // Return code if ran from command line
     if ($ret) exit($ret);
    -
    diff --git a/htdocs/install/step4.php b/htdocs/install/step4.php
    index 92bcb3dc1a7..7a7b4e464fa 100644
    --- a/htdocs/install/step4.php
    +++ b/htdocs/install/step4.php
    @@ -35,8 +35,7 @@ global $langs;
     $setuplang=GETPOST('selectlang','aZ09',3)?GETPOST('selectlang','aZ09',3):(empty($argv[1])?'auto':$argv[1]);
     $langs->setDefaultLang($setuplang);
     
    -$langs->load("admin");
    -$langs->load("install");
    +$langs->loadLangs(array("admin", "install"));
     
     // Now we load forced value from install.forced.php file.
     $useforcedwizard=false;
    @@ -47,7 +46,7 @@ if (@file_exists($forcedfile)) {
     	include_once $forcedfile;
     }
     
    -dolibarr_install_syslog("--- step4: entering step4.php page");
    +dolibarr_install_syslog("- step4: entering step4.php page");
     
     $error=0;
     $ok = 0;
    @@ -74,18 +73,18 @@ print '<h3><img class="valigntextbottom" src="../theme/common/octicons/build/svg
     print $langs->trans("LastStepDesc").'<br><br>';
     
     
    -print '<table cellspacing="0" cellpadding="2" width="100%">';
    +print '<table cellspacing="0" cellpadding="2">';
     
     $db=getDoliDBInstance($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port);
     
     if ($db->ok)
     {
    -    print '<tr><td>'.$langs->trans("Login").' :</td><td>';
    -	print '<input name="login" type="text" value="' . (!empty($_GET["login"]) ? GETPOST("login") : (isset($force_install_dolibarrlogin) ? $force_install_dolibarrlogin : '')) . '"' . (@$force_install_noedit == 2 && $force_install_dolibarrlogin !== null ? ' disabled' : '') . '></td></tr>';
    -    print '<tr><td>'.$langs->trans("Password").' :</td><td>';
    -    print '<input type="password" name="pass"></td></tr>';
    -    print '<tr><td>'.$langs->trans("PasswordAgain").' :</td><td>';
    -    print '<input type="password" name="pass_verif"></td></tr>';
    +    print '<tr><td><label for="login">'.$langs->trans("Login").' :</label></td><td>';
    +	print '<input id="login" name="login" type="text" value="' . (!empty($_GET["login"]) ? GETPOST("login") : (isset($force_install_dolibarrlogin) ? $force_install_dolibarrlogin : '')) . '"' . (@$force_install_noedit == 2 && $force_install_dolibarrlogin !== null ? ' disabled' : '') . '></td></tr>';
    +    print '<tr><td><label for="pass">'.$langs->trans("Password").' :</label></td><td>';
    +    print '<input type="password" id="pass" name="pass"></td></tr>';
    +    print '<tr><td><label for="pass_verif">'.$langs->trans("PasswordAgain").' :</label></td><td>';
    +    print '<input type="password" id="pass_verif" name="pass_verif"></td></tr>';
         print '</table>';
     
         if (isset($_GET["error"]) && $_GET["error"] == 1)
    @@ -110,15 +109,13 @@ if ($db->ok)
             print '<div class="error">'.$langs->trans("PleaseTypeALogin").'</div>';
             $error=0;	// We show button
         }
    -
     }
     
    -
     $ret=0;
     if ($error && isset($argv[1])) $ret=1;
     dolibarr_install_syslog("Exit ".$ret);
     
    -dolibarr_install_syslog("--- step4: end");
    +dolibarr_install_syslog("- step4: end");
     
     pFooter($error,$setuplang);
     
    diff --git a/htdocs/install/step5.php b/htdocs/install/step5.php
    index 79fead3c51d..97770d39e9d 100644
    --- a/htdocs/install/step5.php
    +++ b/htdocs/install/step5.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
      * Copyright (C) 2004       Sebastien DiCintio      <sdicintio@ressource-toi.org>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2015-2016  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -23,7 +23,7 @@
     /**
      *       \file      htdocs/install/step5.php
      *       \ingroup   install
    - *       \brief     Last page of upgrade or install process
    + *       \brief     Last page of upgrade / install process
      */
     
     include_once 'inc.php';
    @@ -52,8 +52,7 @@ if (! empty($action) && preg_match('/upgrade/i', $action))	// If it's an old upg
         }
     }
     
    -$langs->load("admin");
    -$langs->load("install");
    +$langs->loadLangs(array("admin", "install"));
     
     $login = GETPOST('login', 'alpha')?GETPOST('login', 'alpha'):(empty($argv[5])?'':$argv[5]);
     $pass = GETPOST('pass', 'alpha')?GETPOST('pass', 'alpha'):(empty($argv[6])?'':$argv[6]);
    @@ -67,7 +66,7 @@ if ($conffile == "/etc/dolibarr/conf.php") $forcedfile="/etc/dolibarr/install.fo
     if (@file_exists($forcedfile)) {
     	$useforcedwizard = true;
     	include_once $forcedfile;
    -	// If forced install is enabled, let's replace post values. These are empty because form fields are disabled.
    +	// If forced install is enabled, replace post values. These are empty because form fields are disabled.
     	if ($force_install_noedit == 2) {
     		if (!empty($force_install_dolibarrlogin)) {
     			$login = $force_install_dolibarrlogin;
    @@ -75,16 +74,15 @@ if (@file_exists($forcedfile)) {
     	}
     }
     
    -dolibarr_install_syslog("--- step5: entering step5.php page");
    +dolibarr_install_syslog("- step5: entering step5.php page");
     
     $error=0;
     
    -
     /*
      *	Actions
      */
     
    -// If install, check pass and pass_verif used to create admin account
    +// If install, check password and password_verification used to create admin account
     if ($action == "set") {
     	if ($pass <> $pass_verif) {
     		header("Location: step4.php?error=1&selectlang=$setuplang" . (isset($login) ? '&login=' . $login : ''));
    @@ -394,8 +392,8 @@ if ($action == "set" && $success)
         else
         {
             // If here MAIN_VERSION_LAST_UPGRADE is not empty
    -        print $langs->trans("VersionLastUpgrade").': <b><font class="ok">'.$conf->global->MAIN_VERSION_LAST_UPGRADE.'</font></b><br>';
    -        print $langs->trans("VersionProgram").': <b><font class="ok">'.DOL_VERSION.'</font></b><br>';
    +        print $langs->trans("VersionLastUpgrade").': <b><span class="ok">'.$conf->global->MAIN_VERSION_LAST_UPGRADE.'</span></b><br>';
    +        print $langs->trans("VersionProgram").': <b><span class="ok">'.DOL_VERSION.'</span></b><br>';
             print $langs->trans("MigrationNotFinished").'<br>';
             print "<br>";
     
    @@ -442,8 +440,8 @@ elseif (empty($action) || preg_match('/upgrade/i',$action))
         else
         {
             // If here MAIN_VERSION_LAST_UPGRADE is not empty
    -        print $langs->trans("VersionLastUpgrade").': <b><font class="ok">'.$conf->global->MAIN_VERSION_LAST_UPGRADE.'</font></b><br>';
    -        print $langs->trans("VersionProgram").': <b><font class="ok">'.DOL_VERSION.'</font></b>';
    +        print $langs->trans("VersionLastUpgrade").': <b><span class="ok">'.$conf->global->MAIN_VERSION_LAST_UPGRADE.'</span></b><br>';
    +        print $langs->trans("VersionProgram").': <b><span class="ok">'.DOL_VERSION.'</span></b>';
     
             print "<br>";
     
    @@ -457,17 +455,14 @@ else
         dol_print_error('','step5.php: unknown choice of action');
     }
     
    -
    -
     // Clear cache files
     clearstatcache();
     
    -
     $ret=0;
     if ($error && isset($argv[1])) $ret=1;
     dolibarr_install_syslog("Exit ".$ret);
     
    -dolibarr_install_syslog("--- step5: Dolibarr setup finished");
    +dolibarr_install_syslog("- step5: Dolibarr setup finished");
     
     pFooter(1,$setuplang);
     
    diff --git a/htdocs/install/upgrade.php b/htdocs/install/upgrade.php
    index f6e1b535706..14856d8b6b7 100644
    --- a/htdocs/install/upgrade.php
    +++ b/htdocs/install/upgrade.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2015-2016  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -66,10 +66,7 @@ $versionto=GETPOST("versionto",'alpha',3)?GETPOST("versionto",'',3):(empty($argv
     $dirmodule=((GETPOST("dirmodule",'alpha',3) && GETPOST("dirmodule",'alpha',3) != 'ignoredbversion'))?GETPOST("dirmodule",'alpha',3):((empty($argv[3]) || $argv[3] == 'ignoredbversion')?'':$argv[3]);
     $ignoredbversion=(GETPOST('ignoredbversion','alpha',3)=='ignoredbversion')?GETPOST('ignoredbversion','alpha',3):((empty($argv[3]) || $argv[3] != 'ignoredbversion')?'':$argv[3]);
     
    -$langs->load("admin");
    -$langs->load("install");
    -$langs->load("other");
    -$langs->load("errors");
    +$langs->loadLangs(array("admin", "install", "other", "errors"));
     
     if ($dolibarr_main_db_type == "mysqli") $choix=1;
     if ($dolibarr_main_db_type == "pgsql") $choix=2;
    @@ -300,7 +297,7 @@ if (! GETPOST('action','aZ09') || preg_match('/upgrade/i',GETPOST('action','aZ09
                 		{
                 			if ($db->lasterrno() != 'DB_ERROR_NOSUCHTABLE')
                 			{
    -            				print '<tr><td colspan="2"><font  class="error">'.$sql.' : '.$db->lasterror()."</font></td></tr>\n";
    +            				print '<tr><td colspan="2"><span class="error">'.$sql.' : '.$db->lasterror()."</font></td></tr>\n";
                 			}
                 		}
                 	}
    diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php
    index 1077e37f78e..1011dcef9cb 100644
    --- a/htdocs/install/upgrade2.php
    +++ b/htdocs/install/upgrade2.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
      * Copyright (C) 2005-2018  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2010       Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2015-2016  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
    @@ -73,10 +73,7 @@ $versionfrom=GETPOST("versionfrom",'alpha',3)?GETPOST("versionfrom",'alpha',3):(
     $versionto=GETPOST("versionto",'alpha',3)?GETPOST("versionto",'alpha',3):(empty($argv[2])?'':$argv[2]);
     $enablemodules=GETPOST("enablemodules",'alpha',3)?GETPOST("enablemodules",'alpha',3):(empty($argv[3])?'':$argv[3]);
     
    -$langs->load('admin');
    -$langs->load('install');
    -$langs->load("bills");
    -$langs->load("suppliers");
    +$langs->loadLangs(array("admin", "install", "bills", "suppliers"));
     
     if ($dolibarr_main_db_type == 'mysqli') $choix=1;
     if ($dolibarr_main_db_type == 'pgsql')  $choix=2;
    @@ -204,6 +201,8 @@ if (! GETPOST('action','aZ09') || preg_match('/upgrade/i',GETPOST('action','aZ09
             $db->query($sql, 1);
             $sql = 'ALTER TABLE '.MAIN_DB_PREFIX.'user ADD COLUMN dateemployment date';
             $db->query($sql, 1);
    +        $sql = 'ALTER TABLE '.MAIN_DB_PREFIX.'user ADD COLUMN dateemploymentend date';
    +        $db->query($sql, 1);
             $sql = 'ALTER TABLE '.MAIN_DB_PREFIX.'user ADD COLUMN default_range integer';
             $db->query($sql, 1);
             $sql = 'ALTER TABLE '.MAIN_DB_PREFIX.'user ADD COLUMN default_c_exp_tax_cat integer';
    @@ -216,6 +215,8 @@ if (! GETPOST('action','aZ09') || preg_match('/upgrade/i',GETPOST('action','aZ09
             $db->query($sql, 1);
             $sql = 'ALTER TABLE '.MAIN_DB_PREFIX."extrafields ADD COLUMN enabled varchar(255) DEFAULT '1'";
             $db->query($sql, 1);
    +        $sql = 'ALTER TABLE '.MAIN_DB_PREFIX.'extrafields ADD COLUMN help text';
    +        $db->query($sql, 1);
             $sql = 'ALTER TABLE '.MAIN_DB_PREFIX.'user_rights ADD COLUMN entity integer DEFAULT 1 NOT NULL';
             $db->query($sql, 1);
     
    @@ -440,6 +441,13 @@ if (! GETPOST('action','aZ09') || preg_match('/upgrade/i',GETPOST('action','aZ09
             	migrate_rename_directories($db,$langs,$conf,'/contracts','/contract');
             }
     
    +        // Scripts for 9.0
    +        $afterversionarray=explode('.','8.0.9');
    +        $beforeversionarray=explode('.','9.0.9');
    +        if (versioncompare($versiontoarray,$afterversionarray) >= 0 && versioncompare($versiontoarray,$beforeversionarray) <= 0)
    +        {
    +        	//migrate_rename_directories($db,$langs,$conf,'/contracts','/contract');
    +        }
         }
     
     	// Code executed only if migration is LAST ONE. Must always be done.
    @@ -2287,7 +2295,6 @@ function migrate_detail_livraison($db,$langs,$conf)
                         print ". ";
                         $i++;
                     }
    -
                 }
     
                 if ($error == 0)
    @@ -2375,7 +2382,6 @@ function migrate_stocks($db,$langs,$conf)
                     print ". ";
                     $i++;
                 }
    -
             }
     
             if ($error == 0)
    @@ -2630,7 +2636,6 @@ function migrate_restore_missing_links($db,$langs,$conf)
                     //print ". ";
                     $i++;
                 }
    -
             }
             else print $langs->trans('AlreadyDone')."<br>\n";
     
    @@ -2696,7 +2701,6 @@ function migrate_restore_missing_links($db,$langs,$conf)
                     //print ". ";
                     $i++;
                 }
    -
             }
             else
             {
    @@ -4421,49 +4425,50 @@ function migrate_rename_directories($db,$langs,$conf,$oldname,$newname)
      */
     function migrate_delete_old_files($db,$langs,$conf)
     {
    -    $result=true;
    +	$result=true;
     
    -    dolibarr_install_syslog("upgrade2::migrate_delete_old_files");
    +	dolibarr_install_syslog("upgrade2::migrate_delete_old_files");
     
    -    // List of files to delete
    -    $filetodeletearray=array(
    -    DOL_DOCUMENT_ROOT.'/core/triggers/interface_demo.class.php',
    -    DOL_DOCUMENT_ROOT.'/core/menus/barre_left/default.php',
    -    DOL_DOCUMENT_ROOT.'/core/menus/barre_top/default.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/modComptabiliteExpert.class.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/modCommercial.class.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/modProduit.class.php',
    -    DOL_DOCUMENT_ROOT.'/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
    -    DOL_DOCUMENT_ROOT.'/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
    -    DOL_DOCUMENT_ROOT.'/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
    -    DOL_DOCUMENT_ROOT.'/core/triggers/interface_modCommande_Ecotax.class.php',
    -    DOL_DOCUMENT_ROOT.'/core/triggers/interface_modCommande_fraisport.class.php',
    -    DOL_DOCUMENT_ROOT.'/core/triggers/interface_modPropale_PropalWorkflow.class.php',
    -    DOL_DOCUMENT_ROOT.'/core/menus/smartphone/iphone.lib.php',
    -    DOL_DOCUMENT_ROOT.'/core/menus/smartphone/iphone_backoffice.php',
    -    DOL_DOCUMENT_ROOT.'/core/menus/smartphone/iphone_frontoffice.php',
    -    DOL_DOCUMENT_ROOT.'/core/menus/standard/auguria_backoffice.php',
    -    DOL_DOCUMENT_ROOT.'/core/menus/standard/auguria_frontoffice.php',
    -    DOL_DOCUMENT_ROOT.'/core/menus/standard/eldy_backoffice.php',
    -    DOL_DOCUMENT_ROOT.'/core/menus/standard/eldy_frontoffice.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/mailings/contacts2.modules.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/mailings/contacts3.modules.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/mailings/contacts4.modules.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/mailings/framboise.modules.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/mailings/dolibarr_services_expired.modules.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/mailings/peche.modules.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/mailings/poire.modules.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/mailings/kiwi.modules.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/facture/pdf_crabe.modules.php',
    -    DOL_DOCUMENT_ROOT.'/core/modules/facture/pdf_oursin.modules.php',
    -
    -    DOL_DOCUMENT_ROOT.'/compta/facture/class/api_invoice.class.php',
    -    DOL_DOCUMENT_ROOT.'/commande/class/api_commande.class.php',
    -    DOL_DOCUMENT_ROOT.'/user/class/api_user.class.php',
    -    DOL_DOCUMENT_ROOT.'/product/class/api_product.class.php',
    -    DOL_DOCUMENT_ROOT.'/societe/class/api_contact.class.php',
    -    DOL_DOCUMENT_ROOT.'/societe/class/api_thirdparty.class.php'
    +	// List of files to delete
    +	$filetodeletearray=array(
    +		DOL_DOCUMENT_ROOT.'/core/triggers/interface_demo.class.php',
    +		DOL_DOCUMENT_ROOT.'/core/menus/barre_left/default.php',
    +		DOL_DOCUMENT_ROOT.'/core/menus/barre_top/default.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/modComptabiliteExpert.class.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/modCommercial.class.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/modProduit.class.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/modSkype.class.php',
    +		DOL_DOCUMENT_ROOT.'/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
    +		DOL_DOCUMENT_ROOT.'/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
    +		DOL_DOCUMENT_ROOT.'/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
    +		DOL_DOCUMENT_ROOT.'/core/triggers/interface_modCommande_Ecotax.class.php',
    +		DOL_DOCUMENT_ROOT.'/core/triggers/interface_modCommande_fraisport.class.php',
    +		DOL_DOCUMENT_ROOT.'/core/triggers/interface_modPropale_PropalWorkflow.class.php',
    +		DOL_DOCUMENT_ROOT.'/core/menus/smartphone/iphone.lib.php',
    +		DOL_DOCUMENT_ROOT.'/core/menus/smartphone/iphone_backoffice.php',
    +		DOL_DOCUMENT_ROOT.'/core/menus/smartphone/iphone_frontoffice.php',
    +		DOL_DOCUMENT_ROOT.'/core/menus/standard/auguria_backoffice.php',
    +		DOL_DOCUMENT_ROOT.'/core/menus/standard/auguria_frontoffice.php',
    +		DOL_DOCUMENT_ROOT.'/core/menus/standard/eldy_backoffice.php',
    +		DOL_DOCUMENT_ROOT.'/core/menus/standard/eldy_frontoffice.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/mailings/contacts2.modules.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/mailings/contacts3.modules.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/mailings/contacts4.modules.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/mailings/framboise.modules.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/mailings/dolibarr_services_expired.modules.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/mailings/peche.modules.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/mailings/poire.modules.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/mailings/kiwi.modules.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/facture/pdf_crabe.modules.php',
    +		DOL_DOCUMENT_ROOT.'/core/modules/facture/pdf_oursin.modules.php',
     
    +		DOL_DOCUMENT_ROOT.'/compta/facture/class/api_invoice.class.php',
    +		DOL_DOCUMENT_ROOT.'/commande/class/api_commande.class.php',
    +		DOL_DOCUMENT_ROOT.'/user/class/api_user.class.php',
    +		DOL_DOCUMENT_ROOT.'/product/class/api_product.class.php',
    +		DOL_DOCUMENT_ROOT.'/societe/class/api_contact.class.php',
    +		DOL_DOCUMENT_ROOT.'/societe/class/api_thirdparty.class.php',
    +		DOL_DOCUMENT_ROOT.'/support/online.php'
         );
     
         foreach ($filetodeletearray as $filetodelete)
    diff --git a/htdocs/langs/ar_EG/admin.lang b/htdocs/langs/ar_EG/admin.lang
    index b24eb9216d5..e4b07918378 100644
    --- a/htdocs/langs/ar_EG/admin.lang
    +++ b/htdocs/langs/ar_EG/admin.lang
    @@ -8,14 +8,10 @@ SessionId=هوية المتصل
     SessionSaveHandler=معالج لتوفير دورات
     SessionSavePath=موقع تخزين الدورة
     PurgeSessions=انهاء الجلسات
    -NoSessionListWithThisHandler=.الخاص بك لا يسمح بسرد كافة الجلسات على التوالي PHP معالج حفظ الدورات و تكوينها في
     LockNewSessions=اغلاق الدخول للمتصلين الجدد
    -ConfirmLockNewSessions=هل تريد منع اي اتصال جديد للبرنامج منك. فقط المستخدم <b>%s</b> سيكون قادر على الاتصال بعد ذلك
     UnlockNewSessions=الغاء حظر الاتصال
     YourSession=جلستك
    -Sessions=جلسات المستخدمين
     WebUserGroup=مستخدم\\مجموعة خادم الويب
    -NoSessionFound=إن صلاحيات لغة بي اتش بي تمنعك من اظهار الجلسات الحالية. قد تكون الوجهة (<b>%s</b>)محمية
     DBStoringCharset=ضبط الحروف في قاعدة البيانات لحفظ المعلومات
     DBSortingCharset=ضبط الحروف في قاعدة البيانات لحفظ المعلومات
     WarningModuleNotActive=إن الوحدة <b>%s</b> لابد أن تكون مفعلة
    @@ -23,13 +19,12 @@ WarningOnlyPermissionOfActivatedModules=أن الصلاحيات المرتبطة
     DolibarrSetup=تثبيت أو ترقية البرنامج
     InternalUsers=مستخدمون داخليون
     ExternalUsers=مستخدمون خارجيون
    -SetupArea=منطقة التنصيب
     FormToTestFileUploadForm=نموذج تجربة رفع الملفات (تبعا للتنصيب)
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     Module25Name=أمر شراء
     Module25Desc=إدارة أوامر الشراء
     Module700Name=تبرعات
     Module1780Name=الأوسمة/التصنيفات
     Permission81=قراءة أوامر الشراء
    +Audit=Audit
    +LogEventDesc=You can enable here the logging for Dolibarr security events. Administrators can then see its content via menu <b>System tools - Audit</b>. Warning, this feature can consume a large amount of data in database.
    +NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    diff --git a/htdocs/langs/ar_SA/accountancy.lang b/htdocs/langs/ar_SA/accountancy.lang
    index a97dc05d79a..eac78e42869 100644
    --- a/htdocs/langs/ar_SA/accountancy.lang
    +++ b/htdocs/langs/ar_SA/accountancy.lang
    @@ -38,6 +38,10 @@ GroupIsEmptyCheckSetup=Group is empty, check setup of the personalized accountin
     DetailByAccount=Show detail by account
     AccountWithNonZeroValues=Accounts with non zero values
     ListOfAccounts=List of accounts
    +CountriesInEEC=Countries in EEC
    +CountriesNotInEEC=Countries not in EEC
    +CountriesInEECExceptMe=Countries in EEC except %s
    +CountriesExceptMe=All countries except %s
     
     MainAccountForCustomersNotDefined=Main accounting account for customers not defined in setup
     MainAccountForSuppliersNotDefined=Main accounting account for vendors not defined in setup
    @@ -90,7 +94,7 @@ MenuLoanAccounts=Loan accounts
     MenuProductsAccounts=Product accounts
     ProductsBinding=Products accounts
     Ventilation=Binding to accounts
    -CustomersVentilation=ربط فاتورة الزبون 
    +CustomersVentilation=ربط فاتورة الزبون
     SuppliersVentilation=Vendor invoice binding
     ExpenseReportsVentilation=Expense report binding
     CreateMvts=Create new transaction
    @@ -156,6 +160,7 @@ Docref=مرجع
     LabelAccount=حساب التسمية
     LabelOperation=Label operation
     Sens=السيناتور
    +LetteringCode=Lettering code
     Codejournal=دفتر اليومية
     NumPiece=Piece number
     TransactionNumShort=Num. transaction
    @@ -221,6 +226,7 @@ AutomaticBindingDone=Automatic binding done
     
     ErrorAccountancyCodeIsAlreadyUse=خطأ، لا يمكنك حذف هذا الحساب المحاسبي لأنه مستخدم
     MvtNotCorrectlyBalanced=Movement not correctly balanced. Debit = %s | Credit = %s
    +Balancing=Balancing
     FicheVentilation=Binding card
     GeneralLedgerIsWritten=Transactions are written in the Ledger
     GeneralLedgerSomeRecordWasNotRecorded=Some of the transactions could not be journalized. If there is no other error message, this is probably because they were already journalized.
    @@ -263,6 +269,7 @@ Modelcsv_ebp=Export towards EBP
     Modelcsv_cogilog=Export towards Cogilog
     Modelcsv_agiris=Export towards Agiris
     Modelcsv_configurable=Export Configurable
    +Modelcsv_FEC=Export FEC (Art. L47 A) (Test)
     ChartofaccountsId=Chart of accounts Id
     
     ## Tools - Init accounting account on product / service
    diff --git a/htdocs/langs/ar_SA/admin.lang b/htdocs/langs/ar_SA/admin.lang
    index 81ed07f3b3c..98562eee861 100644
    --- a/htdocs/langs/ar_SA/admin.lang
    +++ b/htdocs/langs/ar_SA/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=تطويرية
     VersionUnknown=غير معروف
     VersionRecommanded=موصى بها
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=معالج لحفظ الجلسات
     SessionSavePath=جلسة التخزين المحلية
     PurgeSessions=إزالة الجلسات
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=معالج حفظ الجلسة المهيأ في لغة البي إتش بي لا يسمح بسرد كل الجلسات التي تعمل
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=إقفال الإتصالات الجديدة
    -ConfirmLockNewSessions=هل أنت متأكد من أنك تريد تقييد أي اتصال جديد من دوليبار لنفسك. <b>%s</b> المستخدم الوحيد الذي سيتمكن من الإتصال بعد هذه العملية.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=إزالة قفل الإتصال
     YourSession=الجلسة الخاصة بك
    -Sessions=جلسة المستخدمين
    +Sessions=Users sessions
     WebUserGroup=خادم الويب المستخدم / المجموعة
    -NoSessionFound=يبدو أن البي إتش بي الخاص بك لا يسمح بسرد كل الجلسات النشطة. الدليل  (<b>%s</b>) المستخدم لحفظ المراحل قد يكون محمي (على سبيل المثال, محمي من قبل نظام الحماية الخاص ببرنامج التشغيل او لغة البي إتش بي.)
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=الترميز الخاص بقاعدة البيانات لتخزين المعلومات
     DBSortingCharset=الترميز الخاص بقاعدة البيانات لتخزين المعلومات
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=مستخدم خارجي
     InternalUsers=مستخدمين داخليين
     ExternalUsers=مستخدمين خارجيين
     GUISetup=العرض
    -SetupArea=منطقة الإعداد
    +SetupArea=التثبيت
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=نموذج لاختبار تحميل ملف (وفقا لبرنامج الإعداد)
     IfModuleEnabled=ملاحظة : نعم فعالة فقط في حال كان النموذج <b>%s</b> مفعل
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=الكود لا يمكن أن يحتوي على الق
     DisableJavascript=تعطيل جافا سكريبت واياكس وظائف (مستحسن للأعمى شخص أو النص المتصفحات)
     UseSearchToSelectCompanyTooltip=أيضا إذا كان لديك عدد كبير من الأحزاب الثالثة (> 100 000)، يمكنك زيادة السرعة عن طريق وضع COMPANY_DONOTSEARCH_ANYWHERE ثابت إلى 1 في الإعداد، <أخرى. وبعد ذلك البحث أن يقتصر على بداية السلسلة.
     UseSearchToSelectContactTooltip=أيضا إذا كان لديك عدد كبير من الأحزاب الثالثة (> 100 000)، يمكنك زيادة السرعة عن طريق وضع CONTACT_DONOTSEARCH_ANYWHERE ثابت إلى 1 في الإعداد، <أخرى. وبعد ذلك البحث أن يقتصر على بداية السلسلة.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=عدد الحروف لبدء البحث: %s
     NotAvailableWhenAjaxDisabled=غير متوفر عندما يكون أجاكس معطلاً
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=المعاينة غير متاحة
     ThemeCurrentlyActive=الثيم النشط حالياً
     CurrentTimeZone=حسب توقيت خادم البي إتش بي
     MySQLTimeZone=والوقت مسقل (قاعدة بيانات)
    -TZHasNoEffect=يتم تخزين التمور وعاد من قبل خادم قاعدة البيانات كما لو أنها بقيت كسلسلة مرسلة. التوقيت له تأثير فقط عند استخدام UNIX_TIMESTAMP وظيفة (وهذا لا ينبغي أن تستخدم من قبل Dolibarr، لذلك يجب أن يكون TZ قاعدة بيانات أي تأثير، حتى لو تغيرت بعد أن تم إدخال البيانات).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=فراغ
     Table=جدول
     Fields=حقول
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=نشطة
     SetupShort=الإعداد
     OtherOptions=الخيارات الأخرى
    -OtherSetup=الإعدادات الأخرى
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=الفاصلة العشرية
     CurrentValueSeparatorThousand=ألفاصلة الألفية
     Destination=المقصد
     IdModule=ID حدة
     IdPermissions=ضوابط ID
     LanguageBrowserParameter=الوحدة %s
    -LocalisationDolibarrParameters=الوحدات المحلية
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=المنطقة الزمنية للعميل (المستخدم)
     ClientHour=وقت العميل (المستخدم)
     OSTZ=OS المنطقة الزمنية الخادم
    @@ -126,8 +126,8 @@ PHPTZ=المنطقة الزمنية خادم PHP
     DaylingSavingTime=التوقيت الصيفي
     CurrentHour=PHP خادم ساعة
     CurrentSessionTimeOut=إنتها مدة التصفح الحالية
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=اكتشاف تلقائي (لغة المتصفح)
     FeatureDisabledInDemo=الميزة معلطة في العرض التجريبي
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=فقط العناصر من <a href="%s">النماذج المفعلة </a> سوف تظهر.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=جديد
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore ، في السوق الرسمي لتخطيط موارد المؤسسات وحدات Dolibarr / خارجي إدارة علاقات العملاء
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=رابط
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=لا تخزن كلمات السر في قاعدة بيا
     MainDbPasswordFileConfEncrypted=كلمة السر في قاعدة بيانات مشفرة conf.php
     InstrucToEncodePass=لديك كلمة السر المشفرة في ملف <b>conf.php،</b> استبدال الخط <br> <b>$ dolibarr_main_db_pass = "..."؛</b> <br> بواسطة <br> <b>$ dolibarr_main_db_pass = "crypted:٪ ليالي".</b>
     InstrucToClearPass=لديك كلمة مرور فك الشفرة (واضح) في ملف <b>conf.php،</b> استبدال الخط <br> <b>$ dolibarr_main_db_pass = "crypted: ...".</b> <br> بواسطة <br> <b>$ dolibarr_main_db_pass = "%s".</b>
    -ProtectAndEncryptPdfFiles=حماية الملفات ولدت الشعبي (لا recommandd ، تقتحم الجماهيري الشعبي وتوليد)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=ميزة
     DolibarrLicense=الترخيص
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=للمستخدم أو وثائق المطور (الوثيقة، أسئلة وأجوبة ...)، <br> نلقي نظرة على Dolibarr يكي: <br> <b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=عن أي أسئلة أخرى / مساعدة، يمكنك استخدام المنتدى Dolibarr: <br> <b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=هذا المجال يمكن أن تساعدك في الحصول على مساعدة لتقديم خدمات الدعم على Dolibarr.
    -HelpCenterDesc2=جزء من هذه الخدمة متوفرة باللغة <b>الانكليزية فقط.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=الحالية القائمة معالج
     MeasuringUnit=وحدة قياس
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=فترة إشعار
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=بروتوكول نقل البريد الإلكتروني / SMTPS ميناء (افتراضيا في php.ini : <b>٪)</b>
    -MAIN_MAIL_SMTP_SERVER=بروتوكول نقل البريد الإلكتروني / SMTPS المضيف (افتراضيا في php.ini : <b>٪)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=بروتوكول نقل البريد الإلكتروني / SMTPS ميناء (غير محددة في مثل PHP على أنظمة يونكس)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=بروتوكول نقل البريد الإلكتروني / SMTPS المضيف (غير محددة في مثل PHP على أنظمة يونكس)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= إرسال منهجية خفية الكربون نسخة من جميع رسائل البريد الإلكتروني المرسلة إلى
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=طريقة استخدام لإرسال رسائل البريد الإلكتروني
    -MAIN_MAIL_SMTPS_ID=إذا الهوية SMTP التوثيق اللازم
    -MAIN_MAIL_SMTPS_PW=كلمة السر اذا SMTP التوثيق اللازم
    -MAIN_MAIL_EMAIL_TLS= استخدام تلس (خدمة تصميم المواقع) تشفير
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=تعطيل كافة sendings SMS (لأغراض الاختبار أو تجريبية)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=طريقة استخدامه لإرسال الرسائل القصيرة SMS
    -MAIN_MAIL_SMS_FROM=رقم الهاتف المرسل الافتراضي لإرسال الرسائل القصيرة
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=ميزة لا تتوفر على مثل أنظمة يونكس. sendmail برنامج الاختبار الخاص بك محليا.
    -SubmitTranslation=إذا ترجمة لهذه اللغة ليست كاملة أو تجد الأخطاء، يمكنك تصحيح هذا عن طريق تحرير الملفات إلى دليل <b>LANGS /%s</b> وتقديم التغيير إلى www.transifex.com/dolibarr-association/dolibarr/~~V
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=إذا ترجمة لهذه اللغة ليست كاملة أو تجد الأخطاء، يمكنك تصحيح هذا عن طريق تحرير الملفات إلى دليل <b>LANGS /%s</b> وتقديم الملفات التي تم تعديلها على dolibarr.org/forum أو للمطورين على github.com/Dolibarr/dolibarr.
     ModuleSetup=إعداد وحدة
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=لا تستخدمها مع المنتج
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=الخطوة %s
    -FindPackageFromWebSite=العثور على الحزمة التي توفر ميزة تريد (على سبيل المثال على موقع الويب %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=تحميل الحزمة (على سبيل المثال من الموقع الرسمي على الإنترنت%s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr النسخة الحالية
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= التخزين المؤقت للتأخير في الرد على الصادرات ثانية (0 فارغة أو لا مخبأ)
     DisableLinkToHelpCenter=الاختباء وصلة <b>"هل تحتاج إلى مساعدة أو دعم"</b> على صفحة تسجيل الدخول
     DisableLinkToHelp=إخفاء تصل إلى التعليمات الفورية <b>"٪ ق"</b>
    -AddCRIfTooLong=ليس هناك التفاف تلقائي ، حتى إذا خرج من خط صفحة على وثائق لفترة طويلة جدا ، يجب إضافة حرف إرجاع نفسك في ناحية النص.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=الحد الأدني لمدة
     LanguageFilesCachedIntoShmopSharedMemory=لانغ لتحميل الملفات. في الذاكرة المشتركة
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=أمثلة مع تشغيل الإعداد الحالي
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=قائمة الدلائل المفتوحة قوالب
     ListOfDirectoriesForModelGenODT=قائمة الدلائل التي تحتوي على قوالب ملفات مع شكل المفتوحة. <br><br> ضع هنا المسار الكامل من الدلائل. <br> إضافة إرجاع بين الدليل ايه. <br> لإضافة دليل وحدة GED، أضيف هنا <b>DOL_DATA_ROOT / ECM / yourdirectoryname.</b> <br><br> الملفات في هذه الدلائل يجب أن ينتهي <b>.odt</b> أو <b>.ods.</b>
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=أمثلة على بناء الجملة : <br> ج : mydir \\ <br> / الوطن / mydir <br> DOL_DATA_ROOT / إدارة المحتوى في المؤسسة / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> لمعرفة كيفية إنشاء قوالب المستند ODT، قبل تخزينها في تلك الدلائل، وقراءة وثائق ويكي:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=مفتاح لاستخدام خدمات الشبكة ال
     TestSubmitForm=اختبار شكل مساهمة
     ThisForceAlsoTheme=وسوف تستخدم هذه القائمة أيضا استخدام مدير موضوعه الخاصة بكل ما هو خيار المستخدم. أيضا هذه القائمة مدير متخصصة للهواتف الذكية لا يعمل على جميع الهواتف الذكية. استخدم مدير آخر القائمة إذا واجهت مشاكل في يدكم.
     ThemeDir=جلود دليل
    -ConnectionTimeout=بمناسبه المهلة
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=استجابة مهلة
     SmsTestMessage=رسالة اختبار من __PHONEFROM__ إلى __PHONETO__
     ModuleMustBeEnabledFirst=يجب تمكين <b>وحدة%s</b> أولا إذا كنت تحتاج هذه الميزة.
     SecurityToken=المفتاح لعناوين المواقع الآمنة
    -NoSmsEngine=لا مدير مرسل الرسائل القصيرة المتاحة. لم يتم تثبيت SMS المرسل مع مدير التوزيع الافتراضي (لأنها تعتمد على مورد خارجي)، ولكن يمكنك أن تجد بعض على http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=يمكنك تعيين كل الخيارات العالمية المتصلة جيل PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=قواعد لتشكيل مربعات العناوين
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=إخفاء وصف المنتجات على لدت PDF
     HideRefOnPDF=المنتجات الجلدية المرجع. ولدت في PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=المعلمات لتأمين عناوين المواق
     SecurityTokenIsUnique=استخدام معلمة securekey فريدة لكل URL
     EnterRefToBuildUrl=أدخل مرجع لكائن %s
     GetSecuredUrl=الحصول على عنوان محسوب
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=معدل ضريبة القيمة المضافة القديم
     NewVATRates=معدل ضريبة القيمة المضافة الجديد
     PriceBaseTypeToChange=تعديل على الأسعار مع القيمة المرجعية قاعدة المعرفة على
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=الرمز السري
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=رابط إلى كائن
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=الوحدة الخارجية - المثبتة في الدليل %s
    -BarcodeInitForThirdparties=الحرف الأول الباركود الشامل لthirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=الحرف الأول الباركود الشامل أو إعادة للمنتجات أو الخدمات
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=قيمة الحرف الأول للسجلات فارغة الصورة٪ المقبلة
     EraseAllCurrentBarCode=محو كل القيم الباركود الحالية
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=وقد أزيلت كل القيم الباركود
    -NoBarcodeNumberingTemplateDefined=تمكين أي قالب الترقيم الباركود في الإعداد وحدة الباركود.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=حقل
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=& مجموعات المستخدمين
    +Module0Name=مجموعات المستخدمين
     Module0Desc=Users / Employees and Groups management
    -Module1Name=أطراف ثالثة
    +Module1Name=Third Parties
     Module1Desc=شركات الاتصالات وإدارة
     Module2Name=التجارية
     Module2Desc=الإدارة التجارية
     Module10Name=المحاسبة
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=مقترحات
     Module20Desc=مقترحات تجارية إدارة
     Module22Name=كتلة بالبريد الإلكتروني
    @@ -511,13 +517,13 @@ Module52Desc=مخزون إدارة المنتجات
     Module53Name=الخدمات
     Module53Desc=الخدمات الإدارية
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcodes إدارة
     Module56Name=الخدمات الهاتفية
     Module56Desc=تكامل الخدمات الهاتفية
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=انقر للاتصال
     Module58Desc=ClickToDial التكامل
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=ويلاحظ نفقات رحلات
     Module75Desc=ونفقات الرحلات تلاحظ إدارة
     Module80Name=الإرسال
     Module80Desc=الإرسال وتسليم الأوامر الإدارية
    -Module85Name=المصارف والنقد
    +Module85Name=Banks and Cash
     Module85Desc=إدارة حسابات مصرفية أو نقدا
    -Module100Name=ExternalSite
    -Module100Desc=وتشمل أي موقع خارجي في القوائم Dolibarr ومشاهدته في إطار Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=ساعي البريد ورشفة
     Module105Desc=ساعي البريد أو SPIP واجهة وحدة عضو
     Module200Name=LDAP
    -Module200Desc=دليل LDAP نمازتلا
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke التكامل
     Module240Name=بيانات الصادرات
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=بيانات الاستيراد
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=أعضاء
     Module310Desc=أعضاء إدارة المؤسسة
     Module320Name=تغذية RSS
     Module320Desc=إضافة تغذية RSS داخل الشاشة صفحة Dolibarr
    -Module330Name=العناوين
    -Module330Desc=إدارة العناوين
    -Module400Name=المشاريع / الفرص / يؤدي
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=التكامل Webcalendar
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=قرض
     Module520Desc=إدارة القروض
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=التبرعات
     Module700Desc=التبرعات إدارة
     Module770Name=تقارير المصاريف
    -Module770Desc=إدارة والمطالبة تقارير المصاريف (النقل، وجبة، ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=فرس النبي
    @@ -576,13 +582,13 @@ Module1520Desc=الجيل ثيقة الإلكتروني الشامل
     Module1780Name=الكلمات / فئات
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG المحرر
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=الأسعار الديناميكية
     Module2200Desc=تمكين استخدام تعبيرات الرياضيات للأسعار
     Module2300Name=المهام المجدولة
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=خدمات API / ويب (خادم SOAP)
    @@ -590,16 +596,16 @@ Module2600Desc=تمكين الخدمات API Dolibarr الخادم SOAP توفي
     Module2610Name=خدمات API / ويب (خادم REST)
     Module2610Desc=تمكين الخادم تقديم الخدمات API Dolibarr REST
     Module2660Name=WebServices الدعوة (العميل SOAP)
    -Module2660Desc=تمكين Dolibarr عميل خدمات الويب (يمكن أن تستخدم لدفع البيانات / الطلبات إلى ملقمات الخارجية. أوامر مورد معتمد فقط في الوقت الحالي)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=غرفتر
    -Module2700Desc=استخدام خدمة غرفتر على الانترنت (www.gravatar.com) لإظهار الصورة من المستخدمين / أعضاء (وجدت مع رسائل البريد الإلكتروني الخاصة بهم). في حاجة الى الوصول الى شبكة الانترنت
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=عميل FTP
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP التحويلات Maxmind القدرات
     Module3100Name=سكايب
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=شركة متعددة
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=ترك إدارة الطلبات
    -Module20000Desc=أعلن وتابع الموظفين يترك طلبات
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=الكثير أو الرقم التسلسلي، وتناول الطعام عن طريق وبيع عن طريق إدارة التسجيل على المنتجات
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=نقطة البيع
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=نقاط البيع
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=باي بال
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=المحاسبة (متقدم)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=(يجب أن تكون الطابعة مرئية من الخادم، ويجب أن تكون الكؤوس تركيبها على الخادم) الطباعة مباشرة (دون فتح المستندات) باستخدام واجهة الكؤوس IPP.
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=استطلاع للرأي، أو مسح التصويت
    -Module55000Desc=وحدة لجعل استطلاعات الرأي عبر الإنترنت، والدراسات الاستقصائية أو الأصوات (مثل خربش، الأزرار، Rdvz، ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=هوامش
     Module59000Desc=وحدة لإدارة الهوامش
     Module60000Name=العمولات
     Module60000Desc=وحدة لإدارة اللجان
     Module62000Name=شروط التجارة الدولية
    -Module62000Desc=إضافة ميزات لإدارة شروط التجارة الدولية
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=مصادر
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=قراءة الفواتير
    @@ -651,9 +661,9 @@ Permission32=إنشاء / تعديل المنتجات
     Permission34=حذف المنتجات
     Permission36=انظر / إدارة المنتجات المخفية
     Permission38=منتجات التصدير
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=حذف مشاريع
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=قراءة التدخلات
     Permission62=إنشاء / تعديل التدخلات
    @@ -686,7 +696,7 @@ Permission109=حذف الإرسال
     Permission111=قراءة الحسابات المالية
     Permission112=إنشاء / تعديل أو حذف ، وقارن المعاملات
     Permission113=الحسابات المالية الإعداد (إنشاء وإدارة فئات)
    -Permission114=مصالحة بين المعاملات
    +Permission114=Reconcile transactions
     Permission115=صفقات التصدير وكشوفات الحساب
     Permission116=التحويلات بين الحسابات
     Permission117=إدارة ارسال الشيكات
    @@ -694,15 +704,15 @@ Permission121=قراءة الغير مرتبطة المستخدم
     Permission122=إنشاء / تغيير الغير مرتبطة المستخدم
     Permission125=حذف الغير مرتبطة المستخدم
     Permission126=الصادرات الغير
    -Permission141=قراءة جميع المشاريع والمهام (أيضا مشاريع خاصة وأنا لا اتصال لل)
    -Permission142=إنشاء / تعديل كافة المشاريع والمهام (أيضا مشاريع خاصة وأنا لا اتصال لل)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=حذف جميع المشاريع والمهام (أيضا مشاريع خاصة وأنا لا اتصال لل)
     Permission146=قراءة موفري
     Permission147=قراءة احصائيات
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=قراءة العقود / الاشتراكات
     Permission162=إنشاء / تعديل العقود / الاشتراكات
     Permission163=تفعيل خدمة / الاشتراك عقد
    @@ -725,7 +735,7 @@ Permission187=وثيقة أوامر المورد
     Permission188=المورد إلغاء أوامر
     Permission192=إنشاء خطوط
     Permission193=إلغاء خطوط
    -Permission194=قراءة خطوط باندوتز
    +Permission194=Read the bandwidth lines
     Permission202=إنشاء خط المشترك الرقمي غير المتماثل وصلات
     Permission203=وصلات من أجل أوامر
     Permission204=من أجل وصلات
    @@ -750,12 +760,12 @@ Permission244=انظر محتويات الخفية الفئات
     Permission251=قراءة أخرى للمستخدمين والمجموعات
     PermissionAdvanced251=قراءة المستخدمين الآخرين
     Permission252=قراءة أذونات المستخدمين الآخرين
    -Permission253=تغيير كلمة مرور المستخدمين الآخرين
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=إنشاء / تعديل المستخدمين خارجي / داخلي وأذونات
     Permission254=حذف أو تعطيل المستخدمين الآخرين
     Permission255=إنشاء / تعديل بلده معلومات المستخدم
     Permission256=تعديل بنفسه كلمة المرور
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=قراءة في كاليفورنيا
     Permission272=قراءة الفواتير
     Permission273=قضية الفواتير
    @@ -765,7 +775,7 @@ Permission283=حذف اتصالات
     Permission286=تصدير اتصالات
     Permission291=قراءة التعريفات
     Permission292=مجموعة أذونات على التعريفات
    -Permission293=مصممو الأزياء تعديل الرسوم الجمركية
    +Permission293=Modify customers tariffs
     Permission300=شريط قراءة المدونات
     Permission301=إنشاء / تغيير شريط الرموز
     Permission302=حذف شريط الرموز
    @@ -787,11 +797,9 @@ Permission401=قراءة خصومات
     Permission402=إنشاء / تعديل الخصومات
     Permission403=تحقق من الخصومات
     Permission404=حذف خصومات
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=حذف الرواتب
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=رواتب التصدير
     Permission520=قراءة القروض
     Permission522=إنشاء / تعديل القروض
    @@ -844,8 +852,8 @@ Permission1251=ادارة الدمار الواردات الخارجية الب
     Permission1321=تصدير العملاء والفواتير والمدفوعات والصفات
     Permission1322=Reopen a paid bill
     Permission1421=التصدير طلبات الزبائن وصفاته
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=حذف طلبات الإجازة
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=احتمال المستوى المحتمل
     DictionaryCanton=الدولة / مقاطعة
     DictionaryRegion=المناطق
    @@ -894,7 +902,7 @@ DictionaryVAT=أسعار الضريبة على القيمة المضافة أو
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=شروط الدفع
     DictionaryPaymentModes=وسائل الدفع
    -DictionaryTypeContact=الاتصال / أنواع العناوين
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=ضرائب بيئية (WEEE)
     DictionaryPaperFormat=تنسيقات ورقة
    @@ -908,47 +916,47 @@ DictionarySource=أصل مقترحات / أوامر
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=نماذج للتخطيط للحسابات
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=رسائل البريد الإلكتروني قوالب
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=الوحدات
     DictionaryProspectStatus=حالة التنقيب
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=الوضع فرصة للمشروع / الرصاص
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=الإعداد المحفوظة
     SetupNotSaved=Setup not saved
     BackToModuleList=العودة إلى قائمة الوحدات
    -BackToDictionaryList=العودة إلى قائمة القواميس
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=إدارة الضريبة على القيمة المضافة
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=افتراضي المقترحة 0 ضريبة القيمة المضافة هو الذي يمكن أن يستخدم في حالات مثل الجمعيات والأفراد والشركات الصغيرة où.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=معدل
     LocalTax1IsNotUsed=لا تستخدم الضريبة الثانية
    -LocalTax1IsUsedDesc=استخدام النوع الثاني من الضرائب (باستثناء ضريبة القيمة المضافة)
    -LocalTax1IsNotUsedDesc=لا تستخدم أي نوع آخر من الضرائب (باستثناء ضريبة القيمة المضافة)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=النوع الثاني من الضرائب
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=لا تستخدم الضرائب الثالثة
    -LocalTax2IsUsedDesc=استخدام نوع ثالث من الضرائب (باستثناء ضريبة القيمة المضافة)
    -LocalTax2IsNotUsedDesc=لا تستخدم أي نوع آخر من الضرائب (باستثناء ضريبة القيمة المضافة)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=النوع الثالث من الضريبة
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= إدارة الطاقة المتجددة
    -LocalTax1IsUsedDescES= معدل الطاقة المتجددة بشكل افتراضي عند احتمالات إنشاء ، والفواتير ، وأوامر الخ اتباع القاعدة نشط القياسية : <br> إذا لم تعرض الشركة المصرية للاتصالات لمشتري الطاقة المتجددة ، الطاقة المتجددة بشكل افتراضي = 0. نهاية الحكم. <br> في حال التعرض للمشتري بعد ذلك الطاقة المتجددة الطاقة المتجددة بشكل افتراضي. نهاية الحكم. <br>
    -LocalTax1IsNotUsedDescES= افتراضيا الطاقة المتجددة المقترحة هي 0. نهاية الحكم.
    -LocalTax1IsUsedExampleES= في اسبانيا هم من المهنيين تخضع لبعض المقاطع المحددة للشركة التعليم الصوتي التفاعلي الاسبانية.
    -LocalTax1IsNotUsedExampleES= في اسبانيا هم المهنية والجمعيات وتخضع لقطاعات معينة من شركة التعليم الصوتي التفاعلي الاسبانية.
    -LocalTax2ManagementES= IRPF الإدارة
    -LocalTax2IsUsedDescES= معدل الطاقة المتجددة بشكل افتراضي عند احتمالات إنشاء ، والفواتير ، وأوامر الخ اتباع القاعدة نشط القياسية : <br> إذا لم يتم التعرض للبائع IRPF ، ثم IRPF افتراضيا = 0. نهاية الحكم. <br> في حال التعرض للبائع IRPF ثم IRPF افتراضيا. نهاية الحكم. <br>
    -LocalTax2IsNotUsedDescES= افتراضيا IRPF المقترحة هي 0. نهاية الحكم.
    -LocalTax2IsUsedExampleES= في اسبانيا ، لحسابهم الخاص والمهنيين المستقلين الذين يقدمون الخدمات والشركات الذين اختاروا النظام الضريبي من وحدات.
    -LocalTax2IsNotUsedExampleES= في اسبانيا هم bussines لا تخضع لنظام ضريبي وحدات.
    +LocalTax1ManagementES=إدارة الطاقة المتجددة
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=افتراضيا الطاقة المتجددة المقترحة هي 0. نهاية الحكم.
    +LocalTax1IsUsedExampleES=في اسبانيا هم من المهنيين تخضع لبعض المقاطع المحددة للشركة التعليم الصوتي التفاعلي الاسبانية.
    +LocalTax1IsNotUsedExampleES=في اسبانيا هم المهنية والجمعيات وتخضع لقطاعات معينة من شركة التعليم الصوتي التفاعلي الاسبانية.
    +LocalTax2ManagementES=IRPF الإدارة
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=افتراضيا IRPF المقترحة هي 0. نهاية الحكم.
    +LocalTax2IsUsedExampleES=في اسبانيا ، لحسابهم الخاص والمهنيين المستقلين الذين يقدمون الخدمات والشركات الذين اختاروا النظام الضريبي من وحدات.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=تقارير عن الضرائب المحلية
     CalcLocaltax1=مبيعات - مشتريات
     CalcLocaltax1Desc=وتحسب تقارير الضرائب المحلية مع الفرق بين localtaxes المبيعات والمشتريات localtaxes
    @@ -958,7 +966,8 @@ CalcLocaltax3=مبيعات
     CalcLocaltax3Desc=تقارير الضرائب المحلية هي مجموعه localtaxes المبيعات
     LabelUsedByDefault=العلامة التي يستخدمها التقصير إذا لم يمكن العثور على ترجمة للقانون
     LabelOnDocuments=علامة على وثائق
    -NbOfDays=ملاحظة : من الأيام
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=في نهاية الشهر
     CurrentNext=Current/Next
     Offset=ويقابل
    @@ -984,7 +993,7 @@ DatabaseUser=قاعدة بيانات المستخدم
     DatabasePassword=قاعدة بيانات كلمة السر
     Tables=الجداول
     TableName=اسم الجدول
    -NbOfRecord=ملاحظة : من السجلات
    +NbOfRecord=No. of records
     Host=الخادم
     DriverType=سائق نوع
     SummarySystem=نظام معلومات موجزة
    @@ -996,7 +1005,7 @@ Skin=موضوع الجلد
     DefaultSkin=موضوع التقصير الجلد
     MaxSizeList=الحد الأقصى لطول قائمة
     DefaultMaxSizeList=افتراضي الطول الاقصى للقوائم
    -DefaultMaxSizeShortList=طول الأقصى الافتراضي للقوائم قصيرة (أي في بطاقة العميل)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=رسالة اليوم
     MessageLogin=ادخل صفحة الرسالة
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=دائم البحث عن شكل القائمة اليم
     DefaultLanguage=اللغة الافتراضية لاستخدام (شفرة اللغة)
     EnableMultilangInterface=تتيح واجهة متعددة اللغات
     EnableShowLogo=عرض الشعار على اليسار القائمة
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=اسم
     CompanyAddress=عنوان
     CompanyZip=الرمز البريدي
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=صاحب الحساب المصرفي %s
     BankModuleNotActive=الحسابات المصرفية وحدة لا يمكن
     ShowBugTrackLink=مشاهدة الرابط <strong>"%s"</strong>
     Alerts=تنبيهات
    -DelaysOfToleranceBeforeWarning=محذرا من التأخير قبل التسامح
    -DelaysOfToleranceDesc=تتيح لك هذه الشاشة لتحديد التأخير قبل السماح تنبيه يقال على الشاشة مع picto ٪ ق لكل عنصر في وقت متأخر.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=التسامح التأخير (في يوم) في حالة تأهب على المقترحات المعروضة ليقفل
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=تأخير التسامح (أيام) قبل تنبيه بشأن المقترحات لا توصف
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=تأخير التسامح (في يوم) في حالة تأهب قبل يوم والخدمات لتفعيل
    -Delays_MAIN_DELAY_RUNNING_SERVICES=تأخير التسامح (في أيام) قبل انتهاء حالة التأهب على الخدمات
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=تأخير التسامح (في يوم) في حالة تأهب قبل الموردين على الفواتير غير المدفوعة
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=تأخير التسامح (في يوم) في حالة تأهب قبل العملاء على الفواتير غير المدفوعة
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=تأخير التسامح (في يوم) في حالة تأهب قبل يوم في انتظار التسوية المصرفية
    -Delays_MAIN_DELAY_MEMBERS=تأخير التسامح (في يوم) في حالة تأهب قبل يوم تأخير رسوم العضوية
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=تأخير التسامح (في يوم) في حالة تأهب قبل لإيداع الشيكات للقيام
    -Delays_MAIN_DELAY_EXPENSEREPORTS=تأخير التسامح (بالأيام) قبل حالة تأهب لتقارير النفقات الموافقة
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=القيود الأخرى القائمة في إدارة اختياري البارامترات.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=مراجعة الحسابات الأحداث الأمنية
     Audit=المراجعة
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=هنا يمكنك تمكين قطع الأشجار لDolibarr ال
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=نظام المعلومات المتنوعة المعلومات التقنية تحصل في قراءة فقط وواضحة للمشرفين فقط.
     SystemAreaForAdminOnly=هذا المجال المتاح لمدير المستخدمين فقط. أيا من Dolibarr أذونات يمكن أن تقلل من هذا الحد.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=يمكنك ان تختار كل معلمة إلى Dolibarr هنا الشكل والمظهر
     AvailableModules=Available app/modules
     ToActivateModule=لتفعيل وحدات ، على الإعداد منطقة الصفحة الرئيسية&gt; الإعداد -> الوحدات).
     SessionTimeOut=للمرة الخمسين
    -SessionExplanation=تضمن هذا العدد أن الدورة لن ينتهي قبل هذا التأخير. PHP sessoin ولكن الإدارة لا الكفالة التي دائما تنتهي الدورة بعد هذا التأخير : ويحدث هذا إذا كان نظام لتنظيف مخبأ الدورة الجارية. <br> ملاحظة : مع أي نظام الداخلي PHP عملية تنظيف كل دورة حوالي <b>٪ ق / %s</b> فقط ولكن وصول وصول أدلى به خلال دورات أخرى.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=محفزات متاحة
    -TriggersDesc=يطلق الملفات التي سوف يتم تعديل سلوك Dolibarr العمل نسخها مرة واحدة في الدليل <b>htdocs / تضم / محفزات.</b> ادركوا إجراءات جديدة ، وتفعيله على Dolibarr الأحداث (انشاء الشركة الجديدة ، والمصادقة على الفواتير ،...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=يطلق في هذا الملف من قبل المعوقين لاحقة بين <b>NORUN</b> باسمهم.
     TriggerDisabledAsModuleDisabled=يتسبب في تعطيل هذه الصورة هي وحدة قياسية <b>٪ ق</b> معوقا.
     TriggerAlwaysActive=يطلق في هذا الملف هي حركة دائمة ، وتفعيل ما هي وحدات Dolibarr.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=حدود / الدقيقة الإعداد
    -LimitsDesc=يمكنك تعريف حدود، توضيحات وتحقيق أمثلية المستخدمة من قبل Dolibarr هنا
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=ماكس عشرية لأسعار الوحدات
     MAIN_MAX_DECIMALS_TOT=الحد الأقصى لمجموع أسعار عشرية
     MAIN_MAX_DECIMALS_SHOWN=ماكس عشرية لأسعار تظهر على الشاشة (يضاف هذا العدد <b>بعد...</b> إذا كنت تريد أن <b>ترى...</b> عندما العدد مبتورة عندما تظهر على الشاشة)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=صافي سعر وحدة من المنتج
     TotalPriceAfterRounding=إجمالي السعر الصافي / ضريبة القيمة المضافة / ضريبة مدفوع) بعد التقريب
     ParameterActiveForNextInputOnly=معلمة فعالة للمساهمة المقبل فقط
     NoEventOrNoAuditSetup=لا أمن الحدث وقد سجلت حتى الآن. هذا طبيعي ويمكن مراجعة الحسابات اذا لم يتم تمكين "الإعداد -- الأمن -- مراجعة" الصفحة.
    -NoEventFoundWithCriteria=لا أمن حال تم العثور على مثل هذا البحث criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=انظر الى إرسال البريد الإعداد المحلي
     BackupDesc=لتقديم دعم كامل للDolibarr ، يجب عليك :
     BackupDesc2=حفظ محتويات الدليل وثائق <b>(٪) التي</b> تحتوي على كافة الملفات التي تم تحميلها ولدت (لذلك يشمل جميع ملفات تفريغ تم إنشاؤها في الخطوة 1).
    -BackupDesc3=حفظ محتوى قاعدة البيانات الخاصة بك <b>(%s) في</b> ملف تفريغ. لهذا، يمكنك استخدام مساعد التالي.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=الأرشيف دليل ينبغي أن تحفظ في مكان آمن.
     BackupDescY=وقد ولدت وينبغي التخلص من الملفات المخزنة في مكان آمن.
    -BackupPHPWarning=لا يمكن ضمان الخدمة الاحتياطية مع هذا الأسلوب. يفضل السابق
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Dolibarr لاستعادة النسخ الاحتياطي ، يجب عليك :
    -RestoreDesc2=استعادة ملف أرشيف (ملف مضغوط على سبيل المثال) من دليل الوثائق لاستخراج شجرة من الملفات في وثائق دليل تثبيت Dolibarr جديد أو إلى هذه الوثائق دليل الحالي <b>(%s).</b>
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=استعادة البيانات من ملف تفريغ النسخ الاحتياطي، في قاعدة بيانات التثبيت Dolibarr جديد أو إلى قاعدة البيانات من هذا التثبيت الحالي <b>(%s).</b> تحذير، بمجرد استعادة الانتهاء، يجب عليك استخدام تسجيل الدخول / كلمة المرور، التي كانت موجودة عندما تم النسخ الاحتياطي، والاتصال مرة أخرى. استعادة قاعدة بيانات النسخ الاحتياطي إلى هذا التثبيت الحالي، يمكنك اتباع هذا المساعد.
     RestoreMySQL=استيراد MySQL
     ForcedToByAModule= هذه القاعدة <b>%s</b> الى جانب تفعيل وحدة
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=يجب تشغيل هذا الأ
     YourPHPDoesNotHaveSSLSupport=وظائف خدمة تصميم المواقع لا تتوفر في بي الخاص بك
     DownloadMoreSkins=مزيد من جلود بتحميل
     SimpleNumRefModelDesc=إرجاع الرقم المرجعي مع شكل %s  yymm-NNNN حيث هو YY العام، مم هو الشهر وnnnn هو تسلسل بدون ثقب وبدون إعادة تعيين
    -ShowProfIdInAddress=إظهار رقم حرفي مع عناوين على وثائق
    -ShowVATIntaInAddress=إخفاء ضريبة القيمة المضافة داخل الأسطوانات مع العناوين على الوثائق
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=ترجمة جزئية
    -MAIN_DISABLE_METEO=تعطيل عرض ميتيو
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=اختبار الدخول إلى API
    -ProxyDesc=بعض ملامح Dolibarr في حاجة الى وصول الإنترنت إلى العمل. هنا تعريف المعلمات من أجل هذا. إذا كان الملقم Dolibarr خلف ملقم وكيل، هذه المعايير يقول Dolibarr كيفية الوصول إلى الإنترنت من خلال ذلك.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=وصول خارجي
     MAIN_PROXY_USE=استخدام ملقم وكيل (وصول مباشر إلى غير ذلك الإنترنت)
     MAIN_PROXY_HOST=الاسم / العنوان من ملقم وكيل
     MAIN_PROXY_PORT=المنفذ من ملقم وكيل
     MAIN_PROXY_USER=الدخول لاستخدام الملقم الوكيل
     MAIN_PROXY_PASS=كلمة مرور لاستخدام الملقم الوكيل
    -DefineHereComplementaryAttributes=هنا تعريف جميع atributes، لا تتوفر بالفعل افتراضيا، والتي تريد أن تدعم ل%s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=تكميلية سمات
     ExtraFieldsLines=سمات التكميلية (خطوط)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=سمات التكميلية (خطوط النظام)
     ExtraFieldsSupplierInvoicesLines=سمات التكميلية (خطوط الفاتورة)
     ExtraFieldsThirdParties=سمات التكميلية (مرشحين عن)
    -ExtraFieldsContacts=سمات التكميلية (الاتصال / العنوان)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=سمات التكميلية (عضو)
     ExtraFieldsMemberType=سمات التكميلية (النوع الأعضاء)
     ExtraFieldsCustomerInvoices=سمات التكميلية (الفواتير)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=alphanumericals فقط وشخصيات الحا
     SendmailOptionNotComplete=تحذير، في بعض أنظمة لينكس، لإرسال البريد الإلكتروني من البريد الإلكتروني الخاص بك، يجب أن تنسخ الإعداد تنفيذ conatins الخيار، على درجة البكالوريوس (mail.force_extra_parameters المعلمة في ملف php.ini الخاص بك). إذا كان بعض المستفيدين لم تلقي رسائل البريد الإلكتروني، في محاولة لتعديل هذه المعلمة PHP مع mail.force_extra_parameters =-BA).
     PathToDocuments=الطريق إلى وثائق
     PathDirectory=دليل
    -SendmailOptionMayHurtBuggedMTA=ميزة لإرسال رسائل باستخدام طريقة "البريد PHP مباشرة" سيتم إنشاء رسالة البريد الإلكتروني التي قد لا تحليل بشكل صحيح من قبل بعض ملقمات البريد المستقبلة. النتيجة هي أن بعض رسائل لا يمكن قراءتها من قبل الشعب الذي استضافته تلك البرامج تنصتت. انها حالة لبعض مزودي الانترنت (مثال: أورانج في فرنسا). هذه ليست مشكلة في Dolibarr ولا في PHP ولكن على استقبال خادم البريد. ولكن هل يمكن أن تضيف MAIN_FIX_FOR_BUGGED_MTA الخيار ل1 إلى الإعداد - البعض لتعديل Dolibarr لتجنب ذلك. ومع ذلك، قد تواجه مشكلة مع خوادم أخرى تحترم بدقة المعيار SMTP. الحل الآخر (موصى به) هو استخدام طريقة "مكتبة مأخذ SMTP" الذي لا يوجد لديه عيوب.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=يجب على الأقل تمكين 1 وحدة
    -ClassNotFoundIntoPathWarning=لم يتم العثور على  %s في مسار PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=نعم في الصيف
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=تخزين جلسة المشفرة بواسطة Suhosin
     ConditionIsCurrently=الشرط هو حاليا %s
    -YouUseBestDriver=استخدام سائق %s التي هو أفضل سائق المتاحة حاليا.
    -YouDoNotUseBestDriver=استخدام يوصى قرص٪ s ولكن سائق%s.
    -NbOfProductIsLowerThanNoPb=لديك %s فقط المنتجات / الخدمات إلى قاعدة البيانات. هذا لا يتطلب أي الأمثل معين.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=البحث الأمثل
    -YouHaveXProductUseSearchOptim=لديك منتج %s في قاعدة البيانات. يجب عليك إضافة PRODUCT_DONOTSEARCH_ANYWHERE ثابت إلى 1 في الصفحة الرئيسية الإعداد-أخرى، قصر البحث على بداية السلاسل مما يجعل من الممكن لقاعدة البيانات لاستخدام مؤشر ويجب أن تحصل على استجابة فورية.
    -BrowserIsOK=كنت تستخدم متصفح الويب %s. هذا المتصفح على ما يرام بالنسبة للأمن والأداء.
    -BrowserIsKO=كنت تستخدم متصفح الويب %s ويعرف هذا المتصفح أن يكون خيارا سيئا للأمن والأداء والموثوقية. نحن انصح لك استخدام فايرفوكس، كروم، أوبرا وسفاري.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug غير محملة.
     XCacheInstalled=XCache غير محملة.
    -AddRefInList=عرض العميل / المورد المرجع في قائمة (قائمة أو منسدل اختيار) وأكثر من الارتباط التشعبي. سوف أطراف ثالثة يظهر مع اسم "CC12345 - SC45678 - وcoorp شركة كبيرة"، بدلا من "وcoorp شركة كبيرة".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=طبعة من ميدان%s
     FillThisOnlyIfRequired=مثال: +2 (ملء إلا إذا تعوض توقيت المشاكل من ذوي الخبرة)
     GetBarCode=الحصول على الباركود
     ##### Module password generation
     PasswordGenerationStandard=عودة كلمة سر ولدت الداخلية وفقا لخوارزمية Dolibarr : 8 أحرف مشتركة تتضمن الأرقام والحروف في حرف صغير.
    -PasswordGenerationNone=لا توحي بأي كلمة المرور التي تم إنشاؤها. يجب أن تكتب كلمة المرور في يدويا.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=ترجع كلمة المرور الخاصة بك وفقا لتكوين المعرفة شخصيا.
     SetupPerso=وفقا لتكوين الخاصة بك
     PasswordPatternDesc=وصف نمط كلمة المرور
    @@ -1195,23 +1205,23 @@ UserMailRequired=مطلوب بريد إلكتروني لإنشاء مستخدم
     HRMSetup=HRM وحدة الإعداد
     ##### Company setup #####
     CompanySetup=وحدة الإعداد للشركات
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=وثائق قوالب
    -DocumentModelOdt=توليد وثائق من OpenDocuments القوالب (.ODT أو .ODS ملفات أوفيس، كي أوفيس، برنامج TextEdit، ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=علامة مائية على مشروع الوثيقة
     JSOnPaimentBill=ميزة تفعيل لتدوين كلمات خطوط المبلغ على شكل دفع
    -CompanyIdProfChecker=المهنية معرف فريد
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=تصدير صلة <b>%s </b> شكل متاح على الوصلة التالية : %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=تصدير صلة <b>%s </b> شكل متاح على ال
     BillsSetup=وحدة إعداد الفواتير
     BillsNumberingModule=الفواتير والقروض وتلاحظ وحدة الترقيم
     BillsPDFModules=فاتورة نماذج الوثائق
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=علما الائتمان
     CreditNotes=ويلاحظ الائتمان
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= إدارة تسجيل الدخول لكل عضو
     AdherentMailRequired=البريد الإلكتروني المطلوب لإنشاء عضو جديد
     MemberSendInformationByMailByDefault=مربع لإرسال الرسائل للأعضاء تأكيدا على افتراضي
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP الإعداد
     LDAPGlobalParameters=المعايير العالمية
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= اختبار البحث LDAP
     LDAPSynchroOK=تزامن اختبار ناجح
     LDAPSynchroKO=فشل تزامن الاختبار
    -LDAPSynchroKOMayBePermissions=تزامن فشل الاختبار. تأكد من أن ارتباط لخادم تهيئتها بشكل صحيح ، ويسمح LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=ربط برنامج التعاون الفني لخادم LDAP ناجحة (٪ ق= خادم بورت= ٪)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=ربط برنامج التعاون الفني لخادم LDAP فشل (خادم ق= ٪ بورت= ٪)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=ربط / Authentificate لخادم LDAP فشل (خادم ق= ٪ بورت= ٪ ق ، ق= ٪ الادارية ، كلمة المرور= ٪)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=خادم LDAP تهيئتها للنسخة 3
     LDAPSetupForVersion2=خادم LDAP لتكوين نسخة 2
     LDAPDolibarrMapping=Dolibarr رسم الخرائط
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=ادخل (سامبا ، activedirectory)
     LDAPFieldLoginSambaExample=مثال ذلك : samaccountname
     LDAPFieldFullname=الاسم الكامل
     LDAPFieldFullnameExample=مثال ذلك : cn
    -LDAPFieldPasswordNotCrypted=كلمة السر لا crypted
    -LDAPFieldPasswordCrypted=كلمة السر crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=مثال ذلك : userPassword
     LDAPFieldCommonNameExample=مثال ذلك : cn
     LDAPFieldName=اسم
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=مثال قيم تهدف <b>لOpenLDAP</b> مع مخططات بعد تحميلها : <b>core.schema ، cosine.schema ، inetorgperson.schema).</b> إذا كنت تستخدم thoose القيم وOpenLDAP تعديل LDAP الخاص بك ملف <b>slapd.conf</b> لجميع مخططات thoose تحميله.
     ForANonAnonymousAccess=لصحتها accès (لكتابة الحصول على سبيل المثال)
     PerfDolibarr=الإعداد أداء / تحسين تقرير
    -YouMayFindPerfAdviceHere=سوف تجد في هذه الصفحة بعض الشيكات أو النصائح المتعلقة بالأداء.
    -NotInstalled=غير مثبتة، لذلك الخادم الخاص بك لا تبطئ من هذا الأمر.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=مخبأ تطبيقي
     MemcachedNotAvailable=لم يتم العثور على مخبأ تطبيقي. يمكنك تحسين الأداء عن طريق تثبيت أعطها مخبأ خادم وحدة قادرة على استخدام هذا الخادم ذاكرة التخزين المؤقت. <br> مزيد من المعلومات هنا <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN.</a> <br> لاحظ أن الكثير من مزود استضافة المواقع لا توفر مثل هذا الخادم ذاكرة التخزين المؤقت.
     MemcachedModuleAvailableButNotSetup=وحدة أعطها لمخبأ تطبيقي وجدت ولكن الإعداد من وحدة ليست كاملة.
     MemcachedAvailableAndSetup=يتم تمكين أعطها حدة مخصصة لاستخدام الخادم أعطها.
     OPCodeCache=مخبأ شفرة التشغيل
    -NoOPCodeCacheFound=لم يتم العثور على مخبأ شفرة التشغيل. قد تكون استخدمت مخبأ شفرة تشغيل آخر من XCache أو eAccelerator (جيد)، قد يكون لم يكن لديك ذاكرة التخزين المؤقت شفرة التشغيل (سيئة جدا).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=مخبأ HTTP للموارد ثابتة (المغلق، IMG، وجافا سكريبت)
     FilesOfTypeCached=يتم التخزين المؤقت الملفات من نوع%s من قبل خادم HTTP
     FilesOfTypeNotCached=لا يتم التخزين المؤقت الملفات من نوع %s  من قبل خادم HTTP
     FilesOfTypeCompressed=يتم ضغط الملفات من نوع %s من قبل خادم HTTP
     FilesOfTypeNotCompressed=لا يتم ضغط الملفات من نوع %s من قبل خادم HTTP
     CacheByServer=ذاكرة التخزين المؤقت من قبل خادم
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=الذاكرة المخبئية من خلال متصفح
     CompressionOfResources=ضغط الردود HTTP
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=مثل هذا الكشف التلقائي غير ممكن مع المتصفحات الحالية
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=المنتجات وحدة الإعداد
     ServiceSetup=خدمات وحدة الإعداد
     ProductServiceSetup=منتجات وخدمات إعداد وحدات
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=الحد الأقصى لعدد من المنتجات في اختيار قوائم المجموعات (0= لا حدود)
    -ViewProductDescInFormAbility=تصور وصف المنتج في أشكال (ما المنبثقة tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=في تنشيط المنتج / الخدمة المرفقة التبويب ملفات خيار دمج المستند المنتج PDF إلى اقتراح PDF دازور إذا كان المنتج / الخدمة في الاقتراح
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=أيضا إذا كان لديك عدد كبير من المنتجات (> 100 000)، يمكنك زيادة السرعة عن طريق وضع PRODUCT_DONOTSEARCH_ANYWHERE ثابت إلى 1 في الإعداد، <أخرى. وبعد ذلك البحث أن يقتصر على بداية السلسلة.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=النوع الافتراضي لاستخدام الباركود للمنتجات
     SetDefaultBarcodeTypeThirdParties=النوع الافتراضي لاستخدام الباركود لأطراف ثالثة
     UseUnits=تحديد وحدة قياس لكمية خلال النظام، الطبعة اقتراح أو فاتورة خطوط
    @@ -1503,7 +1516,7 @@ SendingsSetup=ارسال وحدة الإعداد
     SendingsReceiptModel=ارسال استلام نموذج
     SendingsNumberingModules=Sendings ترقيم الوحدات
     SendingsAbility=أوراق دعم الشحن للشحنات العملاء
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=النص الحر على الشحنات
     ##### Deliveries #####
     DeliveryOrderNumberingModules=تلقي شحنات المنتجات الترقيم وحدة
    @@ -1515,18 +1528,18 @@ AdvancedEditor=محرر متقدم
     ActivateFCKeditor=تفعيل محرر متقدم ل:
     FCKeditorForCompany=WYSIWIG إنشاء / الطبعة شركات ووصف المذكرة
     FCKeditorForProduct=WYSIWIG إنشاء / الطبعة المنتجات / الخدمات ووصف المذكرة
    -FCKeditorForProductDetails=WYSIWIG إنشاء / طبعة من المنتجات تفاصيل الخطوط لجميع الكيانات (المقترحات والأوامر، والفواتير، الخ ...) <font class="warning">تحذير: استخدام هذا الخيار لهذه الحالة على محمل الجد ليس الموصى بها لأنها يمكن أن تخلق مشاكل مع الأحرف الخاصة وصيغة الصفحة عند بناء PDF الملفات.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG إنشاء / الطبعة بالبريد
     FCKeditorForUserSignature=إنشاء WYSIWIG / طبعة التوقيع المستعمل
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=نجح الصدد ولكن قاعدة البيانات لا يبدو أن قاعدة بيانات OSCommerce (%s  الرئيسية غير موجودة في الجدول %s ).
    -OSCommerceTestOk=اتصال الخادم '%s ' على قاعدة البيانات '%s ' مع المستخدم '%s ' النجاح.
    -OSCommerceTestKo1=علاقة الخادم '%s ' تنجح ولكن قاعدة البيانات '%s ' لا يمكن التوصل إليها.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=علاقة الخادم '%s ' مستخدم '%s ' فشلت.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=إذا كنت تستخدم نقاط البيع وحدة (وحدة POS قدمت افتراضيا أو وحدة خارجية أخرى)، قد يتم تجاهل هذا الإعداد من خلال وجهة نظرك من بيع وحدة. تم تصميم معظم نقطة من وحدات المبيعات لخلق الفور فاتورة وانخفاض الأسهم افتراضيا كل ما هي الخيارات المتاحة هنا. لذلك، إذا كنت في حاجة أو ليس لديهم انخفاض الأسهم عند تسجيل بيع من وجهة نظرك من بيع، وتحقق أيضا مجموعة وحدة POS الخاص بك.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=حذف من القائمة
     Menus=القوائم
    @@ -1548,7 +1561,7 @@ DetailRight=حالة رمادية غير مصرح بها للعرض القوائ
     DetailLangs=لانغ لتسمية اسم ملف الترجمة مدونة
     DetailUser=المتدرب / خارجي / الكل
     Target=الهدف
    -DetailTarget=هدف وصلات (_blank كبار فتح نافذة جديدة)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=المستوى (-1 : الأعلى ، 0 : رأس القائمة ،&gt; 0 القائمة والقائمة الفرعية)
     ModifMenu=قائمة التغيير
     DeleteMenu=حذف من القائمة الدخول
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=ومن المقرر ان ضريبة القيمة المضا
     OptionVatDebitOptionDesc=ومن المقرر ان ضريبة القيمة المضافة : <br> -- التسليم / الدفع للسلع <br> -- على الفاتورة (الخصم) للخدمات
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=وقت exigibility VAT افتراضيا وفقا لخيار المختار:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=التسليم
     OnPayment=عن الدفع
     OnInvoice=على فاتورة
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=شراء الحساب. رمز
     AgendaSetup=جدول الأعمال وحدة الإعداد
     PasswordTogetVCalExport=مفتاح ربط تصدير تأذن
     PastDelayVCalExport=لا تصدر الحدث الأكبر من
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=تلقائيا تعيين هذه القيمة الافتراضية لنوع من الحدث إلى الحدث إنشاء النموذج
    -AGENDA_DEFAULT_FILTER_TYPE=تلقائيا تعيين هذا النوع من الأحداث في تصفية بحثا عن عرض جدول الأعمال
    -AGENDA_DEFAULT_FILTER_STATUS=تلقائيا تعيين هذه الحالة مع الأحداث في تصفية بحثا عن عرض جدول الأعمال
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=علامة التبويب التي تريد فتح افتراضيا عند اختيار القائمة جدول الأعمال
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=انقر لإعداد وحدة الاتصال الهاتفي
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=هذه الوحدة تسمح لجعل أرقام هواتف يمكن النقر عليها. وهناك انقر على هذه الأيقونة دعوة تجعل هاتفك إلى الاتصال برقم الهاتف. وهذا يمكن أن تستخدم لاستدعاء نظام مركز الاتصال من Dolibarr يمكن أن نسميه ورقم الهاتف على نظام SIP على سبيل المثال.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=مجرد استخدام الرابط "الهاتف:" على أرقام الهواتف
    -ClickToDialUseTelLinkDesc=استخدام هذا الأسلوب إذا كان المستخدمون يكون الهاتف الرقمي أو واجهة البرامج المثبتة على الكمبيوتر نفسه من المتصفح، ويسمى عند النقر على رابط في المتصفح التي تبدأ ب "الهاتف". إذا كنت في حاجة الى حل خادم الكامل (لا حاجة لتثبيت البرامج المحلية)، يجب عليك تعيين هذا إلى "لا" وملء الحقل التالي.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=نقاط البيع
     CashDeskSetup=مكتب الإعداد وحدة نقدية
    -CashDeskThirdPartyForSell=افتراضي طرف ثالث عام على استخدام لتبيع
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=الحساب النقدي لاستخدامها لتبيع
     CashDeskBankAccountForCheque= حساب لاستخدام لتلقي المدفوعات عن طريق الشيكات
     CashDeskBankAccountForCB= حساب لاستخدام لاستلام المبالغ النقدية عن طريق بطاقات الائتمان
    -CashDeskDoNotDecreaseStock=تعطيل انخفاض الأسهم عندما يتم عمليات بيع من نقاط البيع (إذا كان "لا"، ويتم ذلك انخفاض الأسهم لكل تبيع القيام به من نقاط البيع، ومهما تم تعيين الخيار إلى وحدة المالية).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=قوة وتحد من مستودع لاستخدامها لانخفاض الأسهم
    -StockDecreaseForPointOfSaleDisabled=انخفاض الأسهم من نقاط البيع تعطيل
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=انخفاض الأسهم في POS غير متوافق مع الكثير الإدارة
    -CashDeskYouDidNotDisableStockDecease=أنت لم تقم بتعطيل انخفاض الأسهم عند اتخاذ قرار بيع من نقاط البيع. لذلك لا بد من المستودع.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=إعداد وحدة المرجعية
    -BookmarkDesc=هذا النموذج يسمح لك لإدارة العناوين. يمكنك أيضا إضافة أي Dolibarr اختصارات لصفحات أو مواقع الويب externale على القائمة اليمنى.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=أكبر عدد ممكن من العناوين تظهر في القائمة اليمنى
     ##### WebServices #####
     WebServicesSetup=إعداد وحدة خدمات الويب
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=نموذج متعدد شركة الإعداد
     ##### Suppliers #####
     SuppliersSetup=المورد الإعداد وحدة
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=فواتير الموردين الذين يبلغ عددهم نماذج
     IfSetToYesDontForgetPermission=إذا اخترت نعم، لا تنسى أن توفر الأذونات إلى المجموعات أو المستخدمين المسموح بها للموافقة الثانية
    @@ -1654,7 +1667,7 @@ ProjectsSetup=مشروع إعداد وحدة
     ProjectsModelModule=المشروع نموذج التقرير وثيقة
     TasksNumberingModules=مهام ترقيم وحدة
     TaskModelModule=تقارير المهام ثيقة نموذجية
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=قد تجد خيارات 
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=قائمة الإشعارات ثابت
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=عتبة
     BackupDumpWizard=المعالج لبناء قاعدة بيانات النسخ الاحتياطي ملف تفريغ
     SomethingMakeInstallFromWebNotPossible=تركيب وحدة خارجية غير ممكن من واجهة ويب للسبب التالي:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=تثبيت وحدة خارجية من
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=تسليط الضوء على خطوط الجدول عندما يمر تحرك الماوس فوق
     HighlightLinesColor=تسليط الضوء على لون الخط عند تمرير الماوس فوق (الحفاظ فارغة دون تمييز)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=لون الروابط
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=لون الخلفية حتى خطوط الجدول
     MinimumNoticePeriod=الحد الأدنى لمدة إشعار (يجب أن يتم طلب إجازة قبل هذا التأخير)
     NbAddedAutomatically=عدد الأيام تضاف إلى العدادات من المستخدمين (تلقائيا) كل شهر
     EnterAnyCode=يحتوي هذا الحقل على إشارة لتحديد الخط. أدخل أي قيمة من اختيارك، ولكن من دون أحرف خاصة.
    -UnicodeCurrency=أدخل هنا بين الأقواس، وقائمة من عدد البايت التي تمثل رمز العملة. لexemple: ل$، أدخل [36] - للبرازيل R الحقيقي $ [82،36] - ل€، أدخل [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=موقف خط في قوائم السرد
     SellTaxRate=بيع معدل الضريبة
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=إذا كان مزود الخدمة أو النقل تقديم صفحة أو موقع على شبكة الإنترنت للتحقق من حالة الشحن الخاص بك، يمكنك إدخاله هنا. يمكنك استخدام مفتاح {خاصية TrackID} إلى المعلمات URL وبالتالي فإن النظام سوف يحل محله مع دخلت قيمة عدد تتبع المستخدم في بطاقة الشحن.
    -OpportunityPercent=عند إنشاء فرصة، وسوف تعريف المبلغ المقدر للمشروع / الرصاص. وفقا لحالة من فرصة، قد تكون multiplicated هذا المبلغ من قبل هذا المعدل لتقييم كمية العالمي عن فرص الخاص بك قد تولد. القيمة هي في المئة (ما بين 0 و 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=ويكرس هذا السجل القالب الذي عنصر
     TypeOfTemplate=نوع القالب
    -TemplateIsVisibleByOwnerOnly=قالب مرئيا من قبل المالك فقط
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=الإصلاح والوقت
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=مثال على رسالة يمكنك استخدامها ليعلن هذا الإصدار الرئيسي (لا تتردد في استخدامها على مواقع الويب الخاص بك)
     TitleExampleForMaintenanceRelease=مثال على الرسالة التي يمكن استخدامها ليعلن هذا البيان الصيانة (لا تتردد في استخدامها على مواقع الويب الخاص بك)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=عندما خيار "مستوى العديد من الأسعار لكل المنتجات / الخدمات" في وضع التشغيل، يمكنك تحديد أسعار مختلفة (واحد لكل مستوى الأسعار) لكل منتج. لتوفير الوقت، يمكنك الدخول هنا حكم أن يكون السعر لكل مستوى autocalculated وفقا لسعر المستوى الأول، لذلك سيكون لديك للدخول الثمن الوحيد للمستوى الأول على كل منتج. هذه الصفحة هي هنا لتوفر لك الوقت ويمكن أن تكون مفيدة فقط إذا كانت الأسعار الخاص لكل LEVE قريبة إلى المستوى الأول. يمكنك تجاهل هذه الصفحة في معظم الحالات.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/ar_SA/companies.lang b/htdocs/langs/ar_SA/companies.lang
    index 1e78a09fce3..e225b75e415 100644
    --- a/htdocs/langs/ar_SA/companies.lang
    +++ b/htdocs/langs/ar_SA/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=تحديد طرف ثالث
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=حذف اتصال
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=طرف ثالث جديد
    -MenuNewCustomer=عميل جديد
    -MenuNewProspect=آفاق جديدة
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=فرد جديد
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=إنشاء طرف ثالث
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=طرف ثالث اتصال
     Company=شركة
     CompanyName=اسم الشركة
     AliasNames=الاسم المستعار (التجارية، العلامات التجارية، ...)
    -AliasNameShort=الاسم المستعار
    +AliasNameShort=Alias Name
     Companies=الشركات
    -CountryIsInEEC=البلد داخل المجموعة الاقتصادية الأوروبية
    -ThirdPartyName=اسم طرف ثالث
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=طرف ثالث
    -ThirdParties=أطراف ثالثة
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=آفاق
     ThirdPartyProspectsStats=آفاق
     ThirdPartyCustomers=العملاء
     ThirdPartyCustomersStats=العملاء
     ThirdPartyCustomersWithIdProf12=الزبائن ٪ أو ٪ ق ق
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=طرف ثالث من نوع
    +ThirdPartyType=Type of company
     Individual=فرد
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=الشركة الأم
     Subsidiaries=الشركات التابعة
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=الرمز البريدي
     Town=مدينة
     Web=الويب
     Poste= موقف
    -DefaultLang=اللغة افتراضيا
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=اقتراحات
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=تركيب صالحة
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=هذا العميل قد خصم <b>٪ ق ٪ ٪</b>
     CompanyHasNoRelativeDiscount=هذا العميل ليس لديها النسبية خصم افتراضي
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=ولا يزال هذا العميل الائتمانية ويلاحظ السابقة أو ودائع <b>ل%s ق ٪</b>
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=بلا
    -Supplier=المورد
    +Supplier=Vendor
     AddContact=إنشاء اتصال
     AddContactAddress=إنشاء الاتصال / عنوان
     EditContact=تحرير الاتصال / عنوان
    @@ -303,22 +303,22 @@ AddThirdParty=إنشاء طرف ثالث
     DeleteACompany=حذف شركة
     PersonalInformations=البيانات الشخصية
     AccountancyCode=حساب محاسبي
    -CustomerCode=رمز العميل
    -SupplierCode=Vendor code
    -CustomerCodeShort=كود العميل
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=شفرة الزبون ، فريدة من نوعها لجميع العملاء
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=إذا كان الطرف الثالث هو عميل أو احتمال
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=صحة تسيطر عليها وحدة
    -ThisIsModuleRules=هذه هي قواعد لهذه الوحدة
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=إمكانية الاتصال
     CompanyDeleted=شركة "٪ ل" حذفها من قاعدة البيانات.
     ListOfContacts=قائمة الاتصالات
    -ListOfContactsAddresses=قائمة الأسماء / عناوين
    -ListOfThirdParties=قائمة أطراف ثالثة
    -ShowCompany=Show third party
    +ListOfContactsAddresses=قائمة الاتصالات
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=وتظهر الاتصال
     ContactsAllShort=جميع (بدون فلتر)
     ContactType=نوع الاتصال
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=هذا الاتصال ليست على اتصال في أ
     NoContactForAnyContract=هذا الاتصال ليس أي عقد للاتصال
     NoContactForAnyInvoice=هذا الاتصال ليست على اتصال في أي فاتورة
     NewContact=اتصال جديد
    -NewContactAddress=اسم جديد / عنوان
    +NewContactAddress=New Contact/Address
     MyContacts=اتصالاتي
     Capital=رأس المال
     CapitalOf=ق ٪ من رأس المال
     EditCompany=تحرير الشركة
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=فحص
    -VATIntraCheckDesc=الصلة <b>٪ ق</b> يسمح نسأل الأوروبي من ضريبة القيمة المضافة فاحص الخدمة. خارجي من خدمة الإنترنت ويلزم لهذه الخدمة في العمل.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=فحص Intracomunnautary ضريبة القيمة المضافة على موقع المفوضية الاوروبية
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target=كما يمكنك التحقق يدويا من أوروبا موقع <a href="%s" target="_blank">ق ٪</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=وليس من الممكن التحقق. تأكد من خدمة لا تقدمها دولة عضو (في المائة).
    -NorProspectNorCustomer=ولا آفاق ولا العملاء
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=الموظفون
     ProspectLevelShort=المحتملة
     ProspectLevel=آفاق محتملة
    @@ -387,12 +387,12 @@ ExportCardToFormat=تصدير بطاقة شكل
     ContactNotLinkedToCompany=اتصالات ليست مرتبطة بطرف ثالث
     DolibarrLogin=ادخل Dolibarr
     NoDolibarrAccess=لا Dolibarr الوصول
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=الاتصالات والعقارات
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=مستوى الأسعار
     DeliveryAddress=عنوان التسليم
     AddAddress=أضف معالجة
    @@ -402,16 +402,16 @@ DeleteFile=حذف الملفات
     ConfirmDeleteFile=هل أنت متأكد من أنك تريد حذف هذا الملف؟
     AllocateCommercial=Assigned to sales representative
     Organization=المنظمة
    -FiscalYearInformation=معلومات عن السنة المالية
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=ابتداء من شهر من السنة المالية
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=قائمة التوقعات
    -ListCustomersShort=قائمة العملاء
    -ThirdPartiesArea=أطراف ثالثة، ومنطقة الاتصال
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=مجموع الأطراف الثالثة فريدة من نوعها
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=فتح
     ActivityCeased=مغلق
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=فاتورة المستحق حاليا
     OutstandingBill=ماكس. لمشروع قانون المتميز
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=العميل / المورد مدونة مجانية. هذا القانون يمكن تعديلها في أي وقت.
     ManagingDirectors=مدير (ق) اسم (CEO، مدير، رئيس ...)
     MergeOriginThirdparty=تكرار طرف ثالث (طرف ثالث كنت ترغب في حذف)
     MergeThirdparties=دمج أطراف ثالثة
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/ar_SA/errors.lang b/htdocs/langs/ar_SA/errors.lang
    index 4cf88cd6c6d..99ead73977e 100644
    --- a/htdocs/langs/ar_SA/errors.lang
    +++ b/htdocs/langs/ar_SA/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat='%s' قيمة له خاطئ تنسيق التاريخ
     ErrorWrongDate=تاريخ غير صحيح!
     ErrorFailedToWriteInDir=لم يكتب في دليل ٪ ق
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=العثور على بريد إلكتروني صحيح لتركيب خطوط ق ٪ في ملف (على سبيل المثال خط ٪ ق= ٪ مع البريد الإلكتروني)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=تتطلب بعض المجالات لم تملأ.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=فشل إنشاء دليل. تأكد من أن خادم الويب المستخدم أذونات لكتابة وثائق Dolibarr في الدليل. إذا تم تمكين المعلم <b>safe_mode</b> على هذا PHP ، تحقق من أن ملفات Dolibarr php تملك لخدمة الويب المستخدم (أو مجموعة).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=يرجى ملء قيمة لقائمة مختارة
     ErrorNoValueForCheckBoxType=يرجى ملء قيمة لقائمة مربع
     ErrorNoValueForRadioType=يرجى ملء قيمة لقائمة الراديو
     ErrorBadFormatValueList=قيمة القائمة لا يمكن أن يكون أكثر من واحد <u>فاصلة:٪ الصورة،</u> ولكن تحتاج إلى واحد على الأقل: مفتاح، قيمة
    -ErrorFieldCanNotContainSpecialCharacters=ميدان <b>٪ ق</b> يجب ألا يحتوي على أحرف خاصة.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=يجب أن لا يحتوي <b>الحقل%s</b> أحرف خاصة، ولا الحروف الكبيرة وليس يمكن أن تحتوي على أرقام فقط.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=أي وحدة المحاسبة وتفعيل
     ErrorExportDuplicateProfil=هذا الاسم الشخصي موجود مسبقا لهذه المجموعة التصدير.
     ErrorLDAPSetupNotComplete=Dolibarr - LDAP المطابقة وليس كاملا.
     ErrorLDAPMakeManualTest=ألف. ldif الملف قد ولدت في الدليل ٪ s. انها محاولة لتحميل يدويا من سطر في الحصول على مزيد من المعلومات عن الأخطاء.
    -ErrorCantSaveADoneUserWithZeroPercentage=لا يمكن انقاذ عمل مع "المركز الخاص لم تبدأ" اذا الحقل "الذي قام به" كما شغلها.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=المرجع المستخدمة لإنشاء موجود بالفعل.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=لا يمكن حذف السجلات. وبالفعل استخدامه أو نشره على كائن آخر.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=يجب عدم تعطيل جافا سكريبت لجعل هذا العمل الميزة. لتمكين / تعطيل جافا سكريبت ، انتقل إلى القائمة الرئيسية -> الإعداد -> العرض.
     ErrorPasswordsMustMatch=ويجب على كلا كلمات المرور المكتوبة تطابق بعضها البعض
    -ErrorContactEMail=وقع خطأ فني. من فضلك، اتصل بمسؤول إلى البريد الإلكتروني بعد <b>%s</b> EN توفير <b>%s</b> رمز الخطأ في رسالتك، أو حتى أفضل من خلال إضافة نسخة شاشة من هذه الصفحة.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=قيمة خاطئة لعدد <b>%s</b> الحقل (قيمة <b>'%s'</b> لا يتطابق <b>%s</b> حكم [رجإكس])
     ErrorFieldValueNotIn=قيمة خاطئة عن رقم <b>الحقل%s</b> (القيمة <b>'٪ ق'</b> ليست قيمة متوفرة في <b>حقل٪ الصورة</b> من <b>الجدول%s)</b>
     ErrorFieldRefNotIn=قيمة خاطئة <b>ل%s</b> عدد حقل <b>('%s</b> &quot;قيمة ليست المرجع <b>%s</b> موجود)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=وكان برنامج مكافحة الفيروس
     ErrorSpecialCharNotAllowedForField=غير مسموح الأحرف الخاصة لحقل "%s"
     ErrorNumRefModel=إشارة إلى وجود قاعدة بيانات (%s) ، وغير متوافق مع هذه القاعدة الترقيم. سجل إزالة أو إعادة تسميته اشارة الى تفعيل هذه الوحدة.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=خطأ في قناع
     ErrorBadMaskFailedToLocatePosOfSequence=خطأ، من دون قناع رقم التسلسل
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=خطأ، قيمة إعادة سيئة
     ErrorMaxNumberReachForThisMask=عدد ماكس متناول هذا القناع
     ErrorCounterMustHaveMoreThan3Digits=يجب أن يكون العداد أكثر من 3 أرقام
     ErrorSelectAtLeastOne=خطأ. حدد واحد على الأقل دخول.
    -ErrorDeleteNotPossibleLineIsConsolidated=حذف غير ممكن لأنه مرتبط سجل إلى transation البنك الذي يتم التصالح
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=يتم تعيين ثلث آخر إلى %s
     ErrorFailedToSendPassword=لم ترسل كلمة السر
     ErrorFailedToLoadRSSFile=فشل في الحصول على آر إس إس. محاولة إضافة MAIN_SIMPLEXMLLOAD_DEBUG ثابت إذا رسائل الخطأ لا توفر ما يكفي من المعلومات.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=لا يستطيع المستخدم الدخول مع <b>
     ErrorLoginHasNoEmail=هذا المستخدم ليس لديه عنوان البريد الإلكتروني. إحباط عملية.
     ErrorBadValueForCode=سيئة قيمة لرمز الحماية. حاول مرة أخرى مع القيمة الجديدة ...
     ErrorBothFieldCantBeNegative=ويمكن لحقول %s و%s لا تكون سلبية
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=كمية لخط في فواتير العملاء لا يمكن أن يكون سلبيا
     ErrorWebServerUserHasNotPermission=<b>%s</b> تستخدم حساب مستخدم لتنفيذ خادم الويب لا يوجد لديه إذن لذلك
     ErrorNoActivatedBarcode=لا يوجد نوع الباركود تفعيلها
    @@ -138,7 +141,7 @@ ErrorBadFormat=شكل سيئة!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=خطأ، وهناك بعض الولادات ترتبط هذه الشحنة. رفض الحذف.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=لا يمكنك حذف دفع تتقاسمها فاتورة واحدة على الأقل مع وضع سيولي
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=لا يمكن تعيين إلى ثابت '٪ ق'
     ErrorPriceExpression2=لا يمكن إعادة تعريف المدمج في وظيفة '٪ ق'
     ErrorPriceExpression3=متغير غير معرف '٪ s' في تعريف الدالة
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=غير متوقع '٪ ق'
     ErrorPriceExpression6=عدد خاطئ من الوسائط (٪ ق معين،٪ المتوقعة الصورة)
     ErrorPriceExpression8=مشغل غير متوقع '٪ ق'
     ErrorPriceExpression9=حدث خطأ غير متوقع
    -ErrorPriceExpression10=Iperator '٪ ق' يفتقر المعامل
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=تتوقع '٪ ق'
     ErrorPriceExpression14=القسمة على صفر
     ErrorPriceExpression17=غير معرف متغير '٪ ق'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=العميل SOAP فشلت مع الخطأ '٪ ق'
     ErrorGlobalVariableUpdater5=لا متغير عمومي مختارة
     ErrorFieldMustBeANumeric=يجب أن يكون <b>حقل٪ الصورة</b> قيمة رقمية
     ErrorMandatoryParametersNotProvided=معيار إلزامي (ق) لم تقدم
    -ErrorOppStatusRequiredIfAmount=قمت بتعيين المبلغ المقدر لهذه الفرصة / الرصاص. لذلك يجب عليك أيضا إدخال مكانتها
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=سيئة تعريف القائمة صفيف في الوحدة واصف (القيمة سيئة لfk_menu مفتاح)
    -ErrorSavingChanges=وقد ocurred لخطأ عند حفظ التغييرات
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=تم تعيين كلمة مرور لهذا العضو. ومع ذلك، تم إنشاء أي حساب المستخدم. لذلك يتم تخزين كلمة المرور هذه ولكن لا يمكن استخدامها للدخول إلى Dolibarr. ويمكن استخدامه من قبل وحدة / واجهة خارجية ولكن إذا كنت لا تحتاج إلى تعريف أي تسجيل دخول أو كلمة المرور لأحد أفراد، يمكنك تعطيل خيار "إدارة تسجيل دخول لكل عضو" من إعداد وحدة الأعضاء. إذا كنت بحاجة إلى إدارة تسجيل الدخول ولكن لا تحتاج إلى أي كلمة المرور، يمكنك الحفاظ على هذا الحقل فارغا لتجنب هذا التحذير. ملاحظة: يمكن أيضا أن تستخدم البريد الإلكتروني لتسجيل الدخول إذا تم ربط عضو إلى المستخدم.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=المرجعية هذا الكتاب أو هذا ا
     WarningPassIsEmpty=تحذير كلمة سر قاعدة بيانات فارغة. هذه هي ثغرة أمنية. يجب عليك أن تضيف كلمة السر الخاصة بك لقاعدة البيانات وتغيير conf.php ليعكس هذا الملف.
     WarningConfFileMustBeReadOnly=انذار ، ملف (التكوين <b>htdocs / أسيوط / conf.php)</b> الخاص يمكن أن تكون الكتابة بواسطة خادم الويب. هذه هي ثغرة أمنية خطيرة. أذونات تعديل على ملف ليكون في وضع القراءة فقط لمستخدم نظام التشغيل المستخدمة من قبل ملقم ويب. إذا كنت تستخدم ويندوز وشكل نسبة الدهون لمدة القرص الخاص بك ، فإنك يجب أن نعرف أن هذا النظام لا يسمح ملف لإضافة الأذونات على الملف ، بحيث لا تكون آمنة تماما.
     WarningsOnXLines=تحذيرات عن مصدر خطوط <b>%s</b>
    -WarningNoDocumentModelActivated=لا يوجد نموذج لجيل وثيقة ، قد تم تنشيط. سيكون نموذج المختار افتراضيا حتى يمكنك التحقق من إعداد وحدة الخاص.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=تحذير، بمجرد الانتهاء من الإعداد، يجب عليك تعطيل تثبيت / الهجرة أدوات بإضافة <b>install.lock</b> الملف إلى <b>الدليل٪ الصورة.</b> في عداد المفقودين هذا الملف هو ثغرة أمنية.
    -WarningUntilDirRemoved=كل التحذيرات الأمنية (مرئية من قبل المستخدمين مشرف فقط) وسوف تبقى نشطة طالما أن الضعف الحالي (أو لم يضف هذا MAIN_REMOVE_INSTALL_WARNING مستمر في الإعداد&gt; الإعداد الأخرى).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=تحذير، ويتم إغلاق حتى إذا قدر يختلف بين عناصر المصدر والهدف. تمكين هذه الميزة بحذر.
     WarningUsingThisBoxSlowDown=تحذير، وذلك باستخدام هذا الإطار تبطئ على محمل الجد كل الصفحات التي تظهر مربع.
     WarningClickToDialUserSetupNotComplete=إعداد المعلومات ClickToDial لالمستخدم الخاص بك ليست كاملة (انظر التبويب ClickToDial على بطاقة المستخدم الخاص بك).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=عدد كبير جدا من البيان
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/ar_SA/interventions.lang b/htdocs/langs/ar_SA/interventions.lang
    index 57541e506cc..fccd25e97d5 100644
    --- a/htdocs/langs/ar_SA/interventions.lang
    +++ b/htdocs/langs/ar_SA/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=المداخلات
     InterventionCard=تدخل البطاقة
     NewIntervention=التدخل الجديدة
     AddIntervention=إنشاء التدخل
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=قائمة التدخلات
     ActionsOnFicheInter=إجراءات على التدخل
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=تدخل معرف
    diff --git a/htdocs/langs/ar_SA/languages.lang b/htdocs/langs/ar_SA/languages.lang
    index 7b27cc35010..4519ef6078d 100644
    --- a/htdocs/langs/ar_SA/languages.lang
    +++ b/htdocs/langs/ar_SA/languages.lang
    @@ -1,6 +1,6 @@
     # Dolibarr language file - Source file is en_US - languages
     Language_ar_AR=العربية
    -Language_ar_EG=Arabic (Egypt)
    +Language_ar_EG=العربيه مصر
     Language_ar_SA=العربية
     Language_bn_BD=بنغالي
     Language_bg_BG=البلغارية
    @@ -86,3 +86,4 @@ Language_uz_UZ=الأوزبكي
     Language_vi_VN=الفيتنامية
     Language_zh_CN=الصينية
     Language_zh_TW=الصينية (التقليدية)
    +Language_bh_MY=الماليزية
    diff --git a/htdocs/langs/ar_SA/main.lang b/htdocs/langs/ar_SA/main.lang
    index 145c38c5039..cb5580a3616 100644
    --- a/htdocs/langs/ar_SA/main.lang
    +++ b/htdocs/langs/ar_SA/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=فشل في إرسال البريد (المرسل =٪ ق،
     ErrorFileNotUploaded=ويتم تحميل الملف. تحقق لا يتجاوز هذا الحجم الأقصى المسموح به، أن المساحة الحرة المتوفرة على القرص والتي لا يوجد بالفعل ملف بنفس الاسم في هذا الدليل.
     ErrorInternalErrorDetected=خطأ الكشف عن
     ErrorWrongHostParameter=المعلمة المضيف خاطئة
    -ErrorYourCountryIsNotDefined=لم يتم تعريف بلدك. الذهاب إلى الصفحة الرئيسية الإعداد-تحرير ومشاركة مرة أخرى في النموذج.
    -ErrorRecordIsUsedByChild=فشل في حذف هذا السجل. ويستخدم هذا السجل من قبل واحد على الأقل السجلات التابعة.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=قيمة خاطئة
     ErrorWrongValueForParameterX=قيمة خاطئة للمعلمة٪ الصورة
     ErrorNoRequestInError=أي طلب في الخطأ
    -ErrorServiceUnavailableTryLater=الخدمة غير متوفرة في الوقت الراهن. حاول مجددا لاحقا.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=قيمة مكررة في حقل فريد
    -ErrorSomeErrorWereFoundRollbackIsDone=تم العثور على بعض الأخطاء. نحن التراجع التغييرات.
    -ErrorConfigParameterNotDefined=لم يتم تعريف <b>المعلمة٪ الصورة</b> داخل ملف التكوين Dolibarr <b>conf.php.</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=فشل في العثور على <b>المستخدم٪ الصورة</b> في قاعدة بيانات Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=خطأ، لا معدلات ضريبة القيمة المضافة المحددة للبلد '٪ ق'.
     ErrorNoSocialContributionForSellerCountry=خطأ، لا الاجتماعي / المالي نوع الضرائب المحددة للبلد '٪ ق'.
     ErrorFailedToSaveFile=خطأ، فشل في حفظ الملف.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=غير مصرح لك ان تفعل ذلك.
     SetDate=التاريخ المحدد
     SelectDate=تحديد تاريخ
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=تم تحميل الملف بنجاح
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=يتم اختيار ملف لمرفق ولكن لم تحميلها بعد. انقر على "إرفاق ملف" لهذا الغرض.
    -NbOfEntries=ملحوظة من إدخالات
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=قراءة المساعدة
     RecordSaved=سجل حفظ
    @@ -94,7 +94,7 @@ Undefined=غير محدد
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=أنظر فوق
    -HomeArea=المنطقة الرئيسية
    +HomeArea=الصفحة الرئيسية
     LastConnexion=Latest connection
     PreviousConnexion=الاتصال السابق
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=مغلق
     Closed2=مغلق
     NotClosed=Not closed
     Enabled=تمكين
    +Enable=تمكين
     Deprecated=انتقدت
     Disable=تعطيل
     Disabled=تعطيل
    @@ -153,7 +154,7 @@ Update=تحديث
     Close=إغلاق
     CloseBox=Remove widget from your dashboard
     Confirm=تأكيد
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=حذف
     Remove=إزالة
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=نسخ
     Paste=لصق
     Default=افتراضي
     DefaultValue=القيمة الافتراضية
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=السعر
     PriceCurrency=Price (currency)
     UnitPrice=سعر الوحدة
    @@ -347,7 +348,7 @@ AmountTTCShort=المبلغ (المؤتمر الوطني العراقي. الض
     AmountHT=المبلغ (صافية من الضرائب)
     AmountTTC=المبلغ (المؤتمر الوطني العراقي. الضريبية)
     AmountVAT=مبلغ الضريبة
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=غير قابل للتطبيق
     ActionRunningNotStarted=لبدء
     ActionRunningShort=In progress
     ActionDoneShort=تم الانتهاء من
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=توليد
     Duration=المدة الزمنية
     TotalDuration=المدة الإجمالية
     Summary=ملخص
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=متاح
     NotYetAvailable=لم تتوفر بعد
    @@ -468,7 +469,7 @@ and=و
     or=أو
     Other=الآخر
     Others=آخرون
    -OtherInformations=المعلومات الأخرى
    +OtherInformations=Other information
     Quantity=كمية
     Qty=الكمية
     ChangedBy=تغيير من قبل
    @@ -506,7 +507,7 @@ None=لا شيء
     NoneF=لا شيء
     NoneOrSeveral=None or several
     Late=متأخر
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=صورة
     Photos=الصور
    @@ -530,18 +531,6 @@ September=سبتمبر
     October=تشرين اول
     November=تشرين الثاني
     December=ديسمبر
    -JanuaryMin=يناير
    -FebruaryMin=فبراير
    -MarchMin=مارس
    -AprilMin=أبريل
    -MayMin=قد
    -JuneMin=يونيو
    -JulyMin=يوليو
    -AugustMin=أغسطس
    -SeptemberMin=سبتمبر
    -OctoberMin=أكتوبر
    -NovemberMin=نوفمبر
    -DecemberMin=ديسمبر
     Month01=كانون الثاني
     Month02=شهر فبراير
     Month03=مارس، يسير، يتقدم
    @@ -646,6 +635,8 @@ SendMail=إرسال بريد إلكتروني
     EMail=البريد الإلكتروني
     NoEMail=أي بريد إلكتروني
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=لا هاتف المحمول
     Owner=مالك
     FollowingConstantsWillBeSubstituted=الثوابت التالية ستكون بديلا المقابلة القيمة.
    @@ -677,7 +668,7 @@ NeverReceived=لم يتلق
     Canceled=ألغى
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=لون
     Documents=ربط الملفات
     Documents2=وثائق
    @@ -716,15 +707,15 @@ Merge=دمج
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=وتظهر الصفحة الرئيسية لطباعة ناحية المحتوى
     MenuManager=مدير القائمة
    -WarningYouAreInMaintenanceMode=انذار ، كنت في وضع الصيانة ، <b>%s</b> الدخول فقط بحيث يتم السماح لاستخدام التطبيق في الوقت الراهن.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=نظام خطأ
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=بطاقة الائتمان
     ValidatePayment=تحقق من الدفع
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=حقول إلزامية مع <b>%s</b>
    -FieldsWithIsForPublic=<b>%s</b> تظهر الحقول التي تحتوي على قائمة العامة للأعضاء. إذا كنت لا تريد هذا ، والتحقق من "العامة" مربع.
    -AccordingToGeoIPDatabase=(وفقا لGeoIP التحويل)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=خط
     NotSupported=غير معتمد
     RequiredField=الحقل مطلوب
    @@ -732,6 +723,8 @@ Result=نتيجة
     ToTest=اختبار
     ValidateBefore=يجب التحقق من صحة البطاقة قبل استخدام هذه الميزة
     Visibility=وضوح
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=خاص
     Hidden=مخفي
     Resources=موارد
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=تصل إلى النظام
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=إنشاء مشروع
     SetToDraft=العودة إلى مشروع
     ClickToEdit=انقر للتحرير
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=بعد يوم
     BySalesRepresentative=بواسطة مندوب مبيعات
     LinkedToSpecificUsers=يرتبط اسم مستخدم معين
     NoResults=لا نتائج
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=ادوات النظام
     ModulesSystemTools=أدوات حدات
     Test=اختبار
     Element=العنصر
     NoPhotoYet=أي صور متوفرة حتى الآن
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=خصم
     from=من عند
     toward=نحو
    @@ -802,7 +797,7 @@ PrintFile=طباعة ملف٪ الصورة
     ShowTransaction=Show entry on bank account
     ShowIntervention=عرض التدخل
     ShowContract=وتظهر العقد
    -GoIntoSetupToChangeLogo=اذهب إلى الصفحة الرئيسية - إعداد - شركة لتغيير شعار أو الذهاب إلى الصفحة الرئيسية - إعداد - عرض للاختباء.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=رفض
     Denied=رفض
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=بإخلاص
     DeleteLine=حذف الخط
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=تصنيف الفواتير
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=التقويم
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=الأحداث
    -EMailTemplates=رسائل البريد الإلكتروني قوالب
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=المشروع
     Projects=مشاريع
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=الصلاحيات
     LineNb=Line no.
     IncotermLabel=شروط التجارة الدولية
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=يوم الاثنين
     Tuesday=الثلاثاء
    @@ -927,15 +931,15 @@ SearchIntoInterventions=التدخلات
     SearchIntoContracts=عقود
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=تقارير المصاريف
    -SearchIntoLeaves=أوراق
    +SearchIntoLeaves=Leave
     CommentLink=تعليقات
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=مشاريع مشتركة
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=يتحملها
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=مخصص ل
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/ar_SA/other.lang b/htdocs/langs/ar_SA/other.lang
    index 87a00c00252..ec0fcb50954 100644
    --- a/htdocs/langs/ar_SA/other.lang
    +++ b/htdocs/langs/ar_SA/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=رمز الحماية
     NumberingShort=N°
     Tools=أدوات
     TMenuTools=أدوات
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=عيد ميلاد
     BirthdayDate=Birthday date
     DateToBirth=تاريخ الميلاد
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=رسالة على الصفحة التحقق من صحة الدفع عودة
     MessageKO=رسالة في إلغاء دفع الصفحة عودة
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=تدخل المصادق
    -Notify_FICHINTER_SENTBYMAIL=تدخل ترسل عن طريق البريد
     Notify_ORDER_VALIDATE=التحقق من صحة النظام العميل
     Notify_ORDER_SENTBYMAIL=النظام العميل ترسل عن طريق البريد
     Notify_ORDER_SUPPLIER_SENTBYMAIL=النظام مزود ترسل عن طريق البريد
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=أجل المورد تسجيل
     Notify_ORDER_SUPPLIER_APPROVE=من أجل الموافقة على المورد
     Notify_ORDER_SUPPLIER_REFUSE=من أجل رفض الموردين
     Notify_PROPAL_VALIDATE=التحقق من صحة اقتراح العملاء
    -Notify_PROPAL_CLOSE_SIGNED=propal العملاء مغلقة وقع
    -Notify_PROPAL_CLOSE_REFUSED=propal العملاء مغلقة رفض
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=اقتراح التجارية المرسلة عن طريق البريد
     Notify_WITHDRAW_TRANSMIT=انتقال انسحاب
     Notify_WITHDRAW_CREDIT=انسحاب الائتمان
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=طرف ثالث إنشاء
     Notify_COMPANY_SENTBYMAIL=الرسائل المرسلة من بطاقة طرف ثالث
     Notify_BILL_VALIDATE=فاتورة مصادق
     Notify_BILL_UNVALIDATE=فاتورة العميل unvalidated
    -Notify_BILL_PAYED=دفعت فاتورة العميل
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=فاتورة الزبون إلغاء
     Notify_BILL_SENTBYMAIL=فاتورة الزبون إرسالها عن طريق البريد
     Notify_BILL_SUPPLIER_VALIDATE=فاتورة المورد المصادق
    -Notify_BILL_SUPPLIER_PAYED=دفعت فاتورة المورد
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=فاتورة المورد ترسل عن طريق البريد
     Notify_BILL_SUPPLIER_CANCELED=فاتورة المورد ألغت
     Notify_CONTRACT_VALIDATE=التحقق من صحة العقد
     Notify_FICHEINTER_VALIDATE=التحقق من التدخل
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=تدخل ترسل عن طريق البريد
     Notify_SHIPPING_VALIDATE=التحقق من صحة الشحن
     Notify_SHIPPING_SENTBYMAIL=الشحن ترسل عن طريق البريد
     Notify_MEMBER_VALIDATE=عضو مصدق
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=إنشاء مشروع
     Notify_TASK_CREATE=مهمة إنشاء
     Notify_TASK_MODIFY=تعديل مهمة
     Notify_TASK_DELETE=حذف المهمة
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=انظر إعداد وحدة٪ الصورة
     NbOfAttachedFiles=عدد الملفات المرفقة / وثائق
     TotalSizeOfAttachedFiles=اجمالى حجم الملفات المرفقة / وثائق
     MaxSize=الحجم الأقصى
     AttachANewFile=إرفاق ملف جديد / وثيقة
     LinkedObject=ربط وجوه
    -NbOfActiveNotifications=عدد الإخطارات (ملحوظة من رسائل البريد الإلكتروني المستلم)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>الأستاذ عيد ٪ ق</b> هي المعلومات التي تعتمد على طرف ثالث. <br> على سبيل المثال ، لبلد <b>ق ٪</b> انها رمز <b>٪ ق.</b>
     DolibarrDemo=Dolibarr تخطيط موارد المؤسسات وإدارة علاقات العملاء التجريبي
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=التدخل ٪ ق المصادق
     EMailTextInvoiceValidated=فاتورة ٪ ق المصادق
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=وقد تم اقتراح %s التحقق من صحة.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=وقد تم التحقق من صحة %s النظام.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=من أجل ٪ ق ق ٪ وافقت عليها
     EMailTextOrderRefused=من أجل رفض ق ٪
     EMailTextOrderRefusedBy=من أجل أن ترفض ٪ ق ق ٪
     EMailTextExpeditionValidated=تم التحقق من صحة%s الشحن.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=استيراد مجموعة البيانات
     DolibarrNotification=إشعار تلقائي
     ResizeDesc=أدخل عرض جديدة <b>أو</b> ارتفاع جديد. وستبقى نسبة خلال تغيير حجم...
    @@ -204,7 +212,7 @@ NewLength=عرض جديد
     NewHeight=ارتفاع جديد
     NewSizeAfterCropping=حجم جديد بعد الاقتصاص
     DefineNewAreaToPick=تحديد منطقة جديدة على الصورة لاختيار (اليسار انقر على الصورة ثم اسحب حتى تصل إلى الزاوية المقابلة)
    -CurrentInformationOnImage=معلومات عن الصورة الحالية
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=صورة المحرر
     YouReceiveMailBecauseOfNotification=تلقيت هذه الرسالة لأنه قد تم إضافة البريد الإلكتروني الخاص بك إلى قائمة الأهداف التي يتعين على علم الأحداث ولا سيما في صناعة البرمجيات من %s %s.
     YouReceiveMailBecauseOfNotification2=هذا الحدث هو ما يلي :
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=صادرات المنطقة
    diff --git a/htdocs/langs/ar_SA/projects.lang b/htdocs/langs/ar_SA/projects.lang
    index 350872e741f..9dcfcae03a3 100644
    --- a/htdocs/langs/ar_SA/projects.lang
    +++ b/htdocs/langs/ar_SA/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=وتبين للمشروع
     ShowTask=وتظهر هذه المهمة
     SetProject=وضع المشروع
     NoProject=لا يعرف أو المملوكة للمشروع
    -NbOfProjects=ملاحظة : للمشاريع
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=الوقت الذي تستغرقه
     TimeSpentByYou=الوقت الذي يقضيه من قبلك
     TimeSpentByUser=الوقت الذي يقضيه المستخدم
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=قائمة المقترحات التجارية المرتبطة بالمشروع.
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=قائمة العقود المرتبطة بالمشروع.
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=قائمة التدخلات المرتبطة بالمشروع
    -ListExpenseReportsAssociatedProject=قائمة تقارير المصاريف المرتبطة بالمشروع
    -ListDonationsAssociatedProject=قائمة التبرعات المرتبطة بالمشروع
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=قائمة الإجراءات المرتبطة بالمشروع
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=قائمة الوقت المستهلك في مهام المشروع
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=النشاط على المشروع اليوم
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=المشروع %s تم تعديلة
     TaskCreatedInDolibarr=مهمة٪ الصورة التي تم إنشاؤها
     TaskModifiedInDolibarr=مهمة٪ الصورة المعدلة
     TaskDeletedInDolibarr=مهمة٪ الصورة حذف
    -OpportunityStatus=الوضع فرصة
    +OpportunityStatus=Lead status
     OpportunityStatusShort=مقابل. الحالة
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=مبلغ فرصة
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=مقابل. كمية
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=مساهم
     SelectElement=حدد العنصر
     AddElement=تصل إلى العنصر
     # Documents models
    -DocumentModelBeluga=قالب مشروع لربط الأشياء نظرة عامة
    -DocumentModelBaleine=مشروع نموذج تقرير عن المهام
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=عبء العمل المخطط لها
     PlannedWorkloadShort=عبء العمل
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=مشاريع مع هذا العضو عن الات
     TasksWithThisUserAsContact=المهام الموكلة إلى هذا المستخدم
     ResourceNotAssignedToProject=لم يتم تعيين إلى المشروع
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=تعيين مهمة بالنسبة لي
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=عين
     ProjectOverview=نظرة عامة
    -ManageTasks=استخدام المشاريع لمتابعة المهام والوقت
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=استخدام مشاريع متابعة القرائن / opportinuties
    -ProjectNbProjectByMonth=ملحوظة من المشاريع التي تم إنشاؤها من قبل شهر
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=كمية الفرص الشهر
    -ProjectWeightedOppAmountOfProjectsByMonth=كمية المرجح الفرص من قبل شهر
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=إحصاءات عن المشاريع / يؤدي
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=المهمة الموكلة. يجب دخول الوقت على هذه المهمة يكون ممكنا.
     IdTaskTime=الوقت مهمة معرف
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=فرص المبلغ الإجمالي
    -OpportunityPonderatedAmount=كمية الفرص المرجحة
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=التنقيب
     OppStatusQUAL=المؤهل العلمى
     OppStatusPROPO=مقترح
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/ar_SA/stocks.lang b/htdocs/langs/ar_SA/stocks.lang
    index d5cc7856dbd..360c5de5164 100644
    --- a/htdocs/langs/ar_SA/stocks.lang
    +++ b/htdocs/langs/ar_SA/stocks.lang
    @@ -44,7 +44,6 @@ TransferStock=Transfer stock
     MassStockTransferShort=Mass stock transfer
     StockMovement=حركة الأسهم
     StockMovements=تحركات الأسهم
    -LabelMovement=تسمية الحركة
     NumberOfUnit=عدد الوحدات
     UnitPurchaseValue=وحدة سعر الشراء
     StockTooLow=الاسهم منخفضة جدا
    @@ -55,20 +54,20 @@ PMPValueShort=الواب
     EnhancedValueOfWarehouses=قيمة المستودعات
     UserWarehouseAutoCreate=Create a user warehouse automatically when creating a user
     AllowAddLimitStockByWarehouse=Allow to add limit and desired stock per couple (product, warehouse) instead of per product
    -IndependantSubProductStock=الأسهم المنتجات والأوراق المالية subproduct ومستقل
    +IndependantSubProductStock=Product stock and subproduct stock are independent
     QtyDispatched=ارسال كمية
     QtyDispatchedShort=أرسل الكمية
     QtyToDispatchShort=الكمية إلى إيفاد
     OrderDispatch=Item receipts
    -RuleForStockManagementDecrease=حكم لالتلقائي انخفاض إدارة المخزون (النقص اليدوي من الممكن دائما، حتى إذا تم تنشيط قاعدة الانخفاض التلقائي)
    -RuleForStockManagementIncrease=حكم لآلية الزيادة إدارة المخزون (زيادة اليدوية هي دائما ممكنة، حتى إذا تم تنشيط زيادة قاعدة تلقائية)
    -DeStockOnBill=خفض مخزونات حقيقية على فواتير الزبائن / الائتمان التحقق من صحة الملاحظات
    -DeStockOnValidateOrder=خفض مخزونات حقيقية على التحقق من صحة أوامر العملاء
    +RuleForStockManagementDecrease=Choose Rule for automatic stock decrease (manual decrease is always possible, even if an automatic decrease rule is activated)
    +RuleForStockManagementIncrease=Choose Rule for automatic stock increase (manual increase is always possible, even if an automatic increase rule is activated)
    +DeStockOnBill=Decrease real stocks on validation of customer invoice/credit note
    +DeStockOnValidateOrder=Decrease real stocks on validation of customer order
     DeStockOnShipment=انخفاض أسهم حقيقي على التحقق من صحة الشحن
     DeStockOnShipmentOnClosing=Decrease real stocks on shipping classification closed
    -ReStockOnBill=زيادة المخزون الحقيقي في فواتير الموردين / الائتمان التحقق من صحة الملاحظات
    -ReStockOnValidateOrder=Increase real stocks on purchase orders approbation
    -ReStockOnDispatchOrder=Increase real stocks on manual dispatching into warehouses, after supplier order receipt of goods
    +ReStockOnBill=Increase real stocks on validation of supplier invoice/credit note
    +ReStockOnValidateOrder=Increase real stocks on purchase order approval
    +ReStockOnDispatchOrder=Increase real stocks on manual dispatching into warehouse, after supplier order receipt of goods
     OrderStatusNotReadyToDispatch=أمر لم يتم بعد أو لا أكثر من ذلك الوضع الذي يسمح بإرسال من المنتجات في مخازن المخزون.
     StockDiffPhysicTeoric=Explanation for difference between physical and virtual stock
     NoPredefinedProductToDispatch=لا توجد منتجات محددة سلفا لهذا الكائن. لذلك لا إرسال في المخزون المطلوب.
    @@ -130,10 +129,11 @@ RecordMovement=Record transfer
     ReceivingForSameOrder=إيصالات لهذا النظام
     StockMovementRecorded=تحركات الأسهم سجلت
     RuleForStockAvailability=القواعد المتعلقة بمتطلبات الأسهم
    -StockMustBeEnoughForInvoice=Stock level must be enough to add product/service to invoice (check is done on current real stock when adding a line into invoice whatever is rule for automatic stock change)
    -StockMustBeEnoughForOrder=Stock level must be enough to add product/service to order (check is done on current real stock when adding a line into order whatever is rule for automatic stock change)
    -StockMustBeEnoughForShipment= Stock level must be enough to add product/service to shipment (check is done on current real stock when adding a line into shipment whatever is rule for automatic stock change)
    +StockMustBeEnoughForInvoice=Stock level must be enough to add product/service to invoice (check is done on current real stock when adding a line into invoice whatever the rule for automatic stock change)
    +StockMustBeEnoughForOrder=Stock level must be enough to add product/service to order (check is done on current real stock when adding a line into order whatever the rule for automatic stock change)
    +StockMustBeEnoughForShipment= Stock level must be enough to add product/service to shipment (check is done on current real stock when adding a line into shipment whatever the rule for automatic stock change)
     MovementLabel=تسمية الحركة
    +TypeMovement=Type of movement
     DateMovement=Date of movement
     InventoryCode=حركة المخزون أو كود
     IsInPackage=الواردة في حزمة
    @@ -172,7 +172,7 @@ inventoryDraft=على التوالي
     inventorySelectWarehouse=Warehouse choice
     inventoryConfirmCreate=إنشاء
     inventoryOfWarehouse=Inventory for warehouse : %s
    -inventoryErrorQtyAdd=Error : one quantity is leaser than zero
    +inventoryErrorQtyAdd=Error : one quantity is less than zero
     inventoryMvtStock=By inventory
     inventoryWarningProductAlreadyExists=This product is already into list
     SelectCategory=فئة فلتر
    @@ -195,12 +195,16 @@ AddInventoryProduct=Add product to inventory
     AddProduct=إضافة
     ApplyPMP=Apply PMP
     FlushInventory=Flush inventory
    -ConfirmFlushInventory=Do you confirm this action ?
    +ConfirmFlushInventory=Do you confirm this action?
     InventoryFlushed=Inventory flushed
     ExitEditMode=Exit edition
     inventoryDeleteLine=حذف الخط
     RegulateStock=Regulate Stock
     ListInventory=قائمة
    -StockSupportServices=Stock management support services
    +StockSupportServices=Stock management supports Services
     StockSupportServicesDesc=By default, you can stock only product with type "product". If on, and if module service is on, you can also stock a product with type "service"
     ReceiveProducts=Receive items
    +StockIncreaseAfterCorrectTransfer=Increase by correction/transfer
    +StockDecreaseAfterCorrectTransfer=Decrease by correction/transfer
    +StockIncrease=Stock increase
    +StockDecrease=Stock decrease
    diff --git a/htdocs/langs/bg_BG/admin.lang b/htdocs/langs/bg_BG/admin.lang
    index 9c97645f0a2..310cdfe0f79 100644
    --- a/htdocs/langs/bg_BG/admin.lang
    +++ b/htdocs/langs/bg_BG/admin.lang
    @@ -1,7 +1,7 @@
     # Dolibarr language file - Source file is en_US - admin
     Foundation=Организация
     Version=Версия
    -Publisher=Publisher
    +Publisher=Издател
     VersionProgram=Версия на програмата
     VersionLastInstall=Първоначално инсталирана версия
     VersionLastUpgrade=Версия на последния ъпгрейд
    @@ -9,39 +9,39 @@ VersionExperimental=Експериментален
     VersionDevelopment=Разработка
     VersionUnknown=Неизвестен
     VersionRecommanded=Препоръчва се
    -FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    -FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    -FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
    +FileCheck=Проверка за интегритета на файлове
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
    +FileIntegrityIsStrictlyConformedWithReference=Интегритетът на файловете е стриктно съобразен с позоваването.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
    +FileIntegritySomeFilesWereRemovedOrModified=Проверката за цялостта на файловете е неуспешна. Някои файлове бяха променени, премахнати или добавени.
     GlobalChecksum=Global checksum
    -MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    -LocalSignature=Embedded local signature (less reliable)
    -RemoteSignature=Remote distant signature (more reliable)
    +MakeIntegrityAnalysisFrom=Извършване на анализ на целостта на файловете на приложението от
    +LocalSignature=Вграден локален подпис (по малко надеждно)
    +RemoteSignature=Отдалечен подпис (по надежден)
     FilesMissing=Missing Files
     FilesUpdated=Updated Files
    -FilesModified=Modified Files
    -FilesAdded=Added Files
    -FileCheckDolibarr=Check integrity of application files
    +FilesModified=Променени файлове
    +FilesAdded=Добавени файлове
    +FileCheckDolibarr=Проверете целостта на файловете на приложението
     AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when application is installed from an official package
    -XmlNotFound=Xml Integrity File of application not found
    +XmlNotFound=Xml Integrity Файлът на приложението не е намерен
     SessionId=ID на сесията
     SessionSaveHandler=Handler за да запазите сесията
     SessionSavePath=Място за съхранение на сесията
     PurgeSessions=Изчистване на сесиите
     ConfirmPurgeSessions=Сигурни ли сте, че желаете да изчистите всички сесии? Това ще прекъсне всички потребители (освен Вас).
    -NoSessionListWithThisHandler=Запиши сесиен манипулатор конфигурирани във вашата PHP, не позволява да се изброят всички текущи сесии.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Заключване за нови свързвания
    -ConfirmLockNewSessions=Сигурни ли сте, че желаете да ограничите всяка нова връзка Dolibarr за себе си. Само <b>%s</b> потребителят ще бъде в състояние да се свърже след това.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Разрешаване на свързването
     YourSession=Вашата сесия
    -Sessions=Потребителска сесия
    +Sessions=Потребителски сесии
     WebUserGroup=Уеб сървър потребител/група
    -NoSessionFound=PHP изглежда не се допуска да се изброят активни сесии. Directory, използван за записване сесии <b>(%s),</b> могат да бъдат защитени (например чрез разрешения OS или чрез PHP директива open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Кодиране на знаците за съхраняваните данни в базата данни
     DBSortingCharset=Набор от знаци база данни, за да сортирате данните
    -ClientCharset=Client charset
    -ClientSortingCharset=Client collation
    +ClientCharset=Клиентски набор
    +ClientSortingCharset=Сортиране на клиент
     WarningModuleNotActive=Модула <b>%s</b> трябва да бъде включен
     WarningOnlyPermissionOfActivatedModules=Само разрешения, свързани с активирани модули са показани тук. Можете да активирате други модули в страницата Начало->Настройки->Модули.
     DolibarrSetup=Dolibarr инсталиране или обновяване
    @@ -51,13 +51,13 @@ InternalUsers=Вътрешни потребители
     ExternalUsers=Външни потребители
     GUISetup=Екран
     SetupArea=Настройки
    -UploadNewTemplate=Upload new template(s)
    +UploadNewTemplate=Качи нов шаблон(и)
     FormToTestFileUploadForm=Форма за тестване качване на файлове (за настройка)
     IfModuleEnabled=Забележка: Ефективно е само ако модула <b>%s</b> е активиран
     RemoveLock=Премахнете файла <b>%s</b> ако съществува, за да се позволи използването на инструмента за актуализация.
     RestoreLock=Възстановете файла <b>%s,</b> само с права за четене за да се забрани използването на инструмента за актуализация.
     SecuritySetup=Настройки на сигурността
    -SecurityFilesDesc=Define here options related to security about uploading files.
    +SecurityFilesDesc=Определете тук опциите, свързани със сигурността, относно качването на файлове.
     ErrorModuleRequirePHPVersion=Грешка, този модул изисква PHP версия %s или по-висока
     ErrorModuleRequireDolibarrVersion=Грешка, този модул изисква Dolibarr версия %s или по-висока
     ErrorDecimalLargerThanAreForbidden=Грешка, точност по-висока от <b>%s</b> не се поддържа.
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Кода не може да съдържа стойно
     DisableJavascript=Изключете функциите JavaScript и Ajax (Препоръчва се за незрящи и при текстови браузъри)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=NBR от знаци, за да предизвика търсене: %s
     NotAvailableWhenAjaxDisabled=Не е налично, когато Аякс инвалиди
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview не е наличен
     ThemeCurrentlyActive=Тема активни в момента
     CurrentTimeZone=TimeZone PHP (сървър)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Пространство
     Table=Таблица
     Fields=Полетата
    @@ -89,7 +89,7 @@ Mask=Маска
     NextValue=Следваща стойност
     NextValueForInvoices=Следваща стойност (фактури)
     NextValueForCreditNotes=Следваща стойност (кредитни известия)
    -NextValueForDeposit=Next value (down payment)
    +NextValueForDeposit=Следваща стойност (авансово плащане)
     NextValueForReplacements=Next value (replacements)
     MustBeLowerThanPHPLimit=Забележка: PHP ограничава размера на всяко качване на файлове на <b>%s</b> %s, независимо от стойността на този параметър е
     NoMaxSizeByPHPLimit=Забележка: Не срокът се определя в конфигурацията на вашия PHP
    @@ -101,7 +101,7 @@ AntiVirusParam= Още параметри на командния ред
     AntiVirusParamExample= Пример за ClamWin: - база данни = &quot;C: \\ Program Files (x86) \\ ClamWin \\ ИЪ&quot;
     ComptaSetup=Настройка на счетоводния модул
     UserSetup=Настройки за управление на потребителите
    -MultiCurrencySetup=Multi-currency setup
    +MultiCurrencySetup=Настройка на няколко валути
     MenuLimits=Граници и точност
     MenuIdParent=ID майка меню
     DetailMenuIdParent=ID на основното меню (0 за горното меню)
    @@ -111,14 +111,14 @@ NotConfigured=Модула не е конфигуриран
     Active=Активен
     SetupShort=Настройки
     OtherOptions=Други опции
    -OtherSetup=Други настройки
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Десетичен разделител
     CurrentValueSeparatorThousand=Thousand сепаратор
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Параметър %s
    -LocalisationDolibarrParameters=Локализация параметри
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Часова зона на клиента (потребител)
     ClientHour=Час на клиента (потребител)
     OSTZ=Часова зона на Операционната Система
    @@ -126,12 +126,12 @@ PHPTZ=Часова зона на PHP Сървъра
     DaylingSavingTime=Лятното часово време
     CurrentHour=Час на PHP (сървър)
     CurrentSessionTimeOut=Продължителност на текущата сесия
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Джаджа
     Boxes=Джаджи
     MaxNbOfLinesForBoxes=Максимален брой на редовете за джаджи
    -AllWidgetsWereEnabled=All available widgets are enabled
    +AllWidgetsWereEnabled=Всички налични джаджи са активирани
     PositionByDefault=Default order
     Position=Длъжност
     MenusDesc=Мениджърите на менюто определят дали съдържанието на двете ленти с менюта (хоризонтална лента и вертикална лента).
    @@ -151,7 +151,7 @@ PurgeDeleteAllFilesInDocumentsDir=Изтриване на всички файл
     PurgeRunNow=Изчистване сега
     PurgeNothingToDelete=Няма директория или файлове за изтриване.
     PurgeNDirectoriesDeleted=<b>%s</b> изтрити файлове или директории.
    -PurgeNDirectoriesFailed=Failed to delete <b>%s</b> files or directories.
    +PurgeNDirectoriesFailed=Неуспешно изтриване на файлове или директории от <b> %s </b>.
     PurgeAuditEvents=Поръси всички събития по сигурността
     ConfirmPurgeAuditEvents=Are you sure you want to purge all security events? All security logs will be deleted, no other data will be removed.
     GenerateBackup=Генериране на бекъп
    @@ -187,36 +187,36 @@ ExtendedInsert=Extended INSERT
     NoLockBeforeInsert=No lock commands around INSERT
     DelayedInsert=Delayed insert
     EncodeBinariesInHexa=Encode binary data in hexadecimal
    -IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
    +IgnoreDuplicateRecords=Игнориране на грешки при дублиране на записите (INSERT IGNORE)
     AutoDetectLang=Автоматично (език на браузъра)
     FeatureDisabledInDemo=Feature инвалиди в демо
    -FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +FeatureAvailableOnlyOnStable=Функционалност само налична на официалната стабилна версия.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Показани са само елементи от <a href="%s">активирани модули</a>.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    -ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    -ModulesMarketPlaces=Find external app/modules
    -ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
    +ModulesMarketPlaceDesc=Можете да намерите още модули за изтегляне на външни уеб сайтове в интернет ...
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
    +ModulesMarketPlaces=Намери външно приложение/модул
    +ModulesDevelopYourModule=Разработи твое приложение/модул
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Нов
    -FreeModule=Free
    -CompatibleUpTo=Compatible with version %s
    -NotCompatible=This module does not seem compatible with your Dolibarr %s (Min %s - Max %s).
    -CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s).
    -SeeInMarkerPlace=See in Market place
    -Updated=Updated
    -Nouveauté=Novelty
    -AchatTelechargement=Buy / Download
    +FreeModule=Свободно
    +CompatibleUpTo=Съвместим с версия %s
    +NotCompatible=Този модул не изглежда съвместим с Dolibarr %s (Мин. %s - Макс. %s).
    +CompatibleAfterUpdate=Този модул изисква актуализиране на вашия Dolibarr %s (Min %s - Max %s).
    +SeeInMarkerPlace=Вижте "Пазар"
    +Updated=Обновено
    +Nouveauté=Новост
    +AchatTelechargement=Купете / Изтеглете
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, официалният пазар за външни модули за Dolibarr ERP/CRM
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    -DevelopYourModuleDesc=Some solutions to develop your own module...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
    +DevelopYourModuleDesc=Някои решения за разработване на вашия собствен модул ...
     URL=Връзка
    -BoxesAvailable=Widgets available
    -BoxesActivated=Widgets activated
    +BoxesAvailable=Налични джаджи
    +BoxesActivated=Активни джаджи
     ActivateOn=Активиране на
     ActiveOn=Активирана
     SourceFile=Изходният файл
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Да не се магазин ясни пароли в 
     MainDbPasswordFileConfEncrypted=Парола за базата данни, кодирани в conf.php (Активира се препоръчва)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Защита на генерираните PDF файлове (активиран не се препоръчва, почивки поколение на маса PDF)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Особеност
     DolibarrLicense=Лиценз
    @@ -241,58 +241,62 @@ OfficialDemo=Dolibarr онлайн демо
     OfficialMarketPlace=Официален магазин за външни модули/добавки
     OfficialWebHostingService=Препоръчителен уеб хостинг услуги (хостинг в интернет облак)
     ReferencedPreferredPartners=Preferred Partners
    -OtherResources=Other resources
    -ExternalResources=External resources
    -SocialNetworks=Social Networks
    +OtherResources=Други ресурси
    +ExternalResources=Външни ресурси
    +SocialNetworks=Социални мрежи
     ForDocumentationSeeWiki=Документация за потребител или разработчик (Doc, често задавани въпроси ...), <br> можете да намерите в Dolibarr Wiki: <br> <a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=За всякакви други въпроси / Помощ, можете да използвате форума Dolibarr: <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=Тази област може да ви помогне да получите помощ и поддръжка за Dolibarr.
    -HelpCenterDesc2=Част от тази услуга е достъпна <b>само</b> на <b>английски език.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Текущото меню манипулатор
     MeasuringUnit=Мерна единица
    -LeftMargin=Left margin
    -TopMargin=Top margin
    -PaperSize=Paper type
    -Orientation=Orientation
    -SpaceX=Space X
    -SpaceY=Space Y
    -FontSize=Font size
    -Content=Content
    +LeftMargin=Лява граница
    +TopMargin=Горна граница
    +PaperSize=Тип хартия
    +Orientation=Ориентация
    +SpaceX=Пространство Х
    +SpaceY=Пространство Y
    +FontSize=Размер на шрифта
    +Content=Съдържание
     NoticePeriod=Период на известяване
    -NewByMonth=New by month
    -Emails=Emails
    -EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    -EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Порт (По подразбиране в php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Хост (По подразбиране в php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Порт (Не дефиниран в PHP на Unix подобни системи)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Хост (Не дефиниран в PHP на Unix подобни системи)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Изпрати систематично скрит въглероден копие на всички изпратени имейли
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    -MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Метод за изпращане на имейли
    -MAIN_MAIL_SMTPS_ID=SMTP ID, ако разпознаване, изискван
    -MAIN_MAIL_SMTPS_PW=SMTP парола, ако разпознаване, изискван
    -MAIN_MAIL_EMAIL_TLS= Използване на TLS (SSL) криптиране
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Изключване на всички SMS sendings (за тестови цели или демонстрации)
    +NewByMonth=Ново по месец
    +Emails=Имейли
    +EMailsSetup=Настройка на имейли
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
    +EmailSenderProfiles=Профили на подател на имейли
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
    +MAIN_MAIL_FORCE_SENDTO=Изпратете всички имейли до (вместо реални получатели за целите на теста)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Метод за изпращане на SMS
    -MAIN_MAIL_SMS_FROM=Номер по подразбиране на телефона за изпращане на SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    -UserEmail=User email
    -CompanyEmail=Company email
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
    +UserEmail=Потребителски имейл
    +CompanyEmail=Имейл на фирмата
     FeatureNotAvailableOnLinux=Функцията не е на разположение на Unix подобни системи. Тествайте вашата програма Sendmail на местно ниво.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Настройки на модул
    -ModulesSetup=Modules/Application setup
    +ModulesSetup=Модули / Приложения настройка
     ModuleFamilyBase=Система
     ModuleFamilyCrm=Управление на Връзки с клиенти (CRM)
    -ModuleFamilySrm=Vendor Relation Management (VRM)
    +ModuleFamilySrm=Управление на взаимоотношенията с доставчиците (VRM)
     ModuleFamilyProducts=Управление на продукти
     ModuleFamilyHr=Управление на човешките ресурси
     ModuleFamilyProjects=Проекти / съвместна работа
    @@ -306,26 +310,26 @@ ModuleFamilyInterface=Интерфейси със външни системи.
     MenuHandlers=Меню работещи
     MenuAdmin=Menu Editor
     DoNotUseInProduction=Не използвайте на продукшън платформа
    -ThisIsProcessToFollow=This is steps to process:
    -ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
    +ThisIsProcessToFollow=Това са стъпки за обработка:
    +ThisIsAlternativeProcessToFollow=Това е алтернатива за ръчно обработване:
     StepNb=Стъпка %s
    -FindPackageFromWebSite=Намери пакет, който осигурява функция искате (например относно официалния уеб сайт %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Текуща версия на Dolibarr
    -CallUpdatePage=Go to the page that updates the database structure and data: %s.
    -LastStableVersion=Latest stable version
    -LastActivationDate=Latest activation date
    +CallUpdatePage=Отворете страницата, която актуализира структурата и данните на базата данни: %s.
    +LastStableVersion=Последна стабилна версия
    +LastActivationDate=Последна дата на активиране
     LastActivationAuthor=Latest activation author
    -LastActivationIP=Latest activation IP
    +LastActivationIP=Последно IP активиране
     UpdateServerOffline=Update server offline
    -WithCounter=Manage a counter
    +WithCounter=Управление на брояч
     GenericMaskCodes=Можете да въведете всяка маска за номериране. В тази маска, могат да се използват следните тагове: <br> <b>{000000}</b> съответства на номер, който се увеличава на всеки %s. Влез като много нули като желаната дължина на брояча. Броячът ще бъде завършен с нули от ляво, за да има колкото се може повече нули като маска. <br> <b>{000000 000}</b> същата като предишната, но компенсира, съответстваща на броя на правото на знака + се прилага започва на първи %s. <br> <b>{000000 @}</b> същата като предишната, но броячът се нулира, когато месеца Х е достигнал (Х между 1 и 12, или 0, за да използвате началото на месеца на фискалната година, определени в вашата конфигурация). Ако тази опция се използва и х е 2 или по-висока, тогава последователност {гг} {mm} или {гггг} {mm} също е задължително. <br> <b>{DD}</b> ден (01 до 31). <br> <b>{Mm}</b> месец (01 до 12). <br> <b>{Гг} {гггг}</b> или <b>{Y}</b> година над 2, 4 или 1 брой. <br>
     GenericMaskCodes2=<b>{cccc}</b> the client code on n characters<br><b>{cccc000}</b> the client code on n characters is followed by a counter dedicated for customer. This counter dedicated to customer is reset at same time than global counter.<br><b>{tttt}</b> The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.<br>
     GenericMaskCodes3=Всички други символи на маската ще останат непокътнати. <br> Интервалите не са разрешени. <br>
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Забавяне за кеширане износ отговор в секунда (0 или празно за не кеш)
     DisableLinkToHelpCenter=Скриване на връзката <b>Нуждаете се от помощ или поддръжка</b> от страницата за вход
     DisableLinkToHelp=Скриване на линка към онлайн помощ "<b>%s</b>"
    -AddCRIfTooLong=, Не съществува автоматична опаковане, така че ако линията е на страницата на документи, защото твърде дълго, трябва да се добави знаци за връщане в текстовото поле.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Минимална дължина
     LanguageFilesCachedIntoShmopSharedMemory=Файлове. Lang заредени в споделена памет
    -LanguageFile=Language file
    -ExamplesWithCurrentSetup=Примери с текущата настройка
    +LanguageFile=Езиков файл
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Списък на OpenDocument директории шаблони
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Брой на ODT файлове шаблони, намерени в тези директории
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Примери на синтаксиса: <br> C: \\ mydir <br> / Начало / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> За да разберете как да създадете свои ODT шаблони на документи, преди да ги съхранявате в тези указатели, прочетете уики документация:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,36 +369,36 @@ KeyForWebServicesAccess=Ключът към използване на Web Servic
     TestSubmitForm=Формата на входящ тест
     ThisForceAlsoTheme=Използването на този Menu Manager ще използва своята собствена тема какъвто и да е избор на потребителя. Освен това меню мениджър, специализирана за смартфони не работи върху всички смартфони. Използвайте менюто друг мениджър, ако имате проблеми на твоя.
     ThemeDir=Директория с темите
    -ConnectionTimeout=Connexion изчакване
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Отговор изчакване
     SmsTestMessage=Тест съобщение от __ PHONEFROM__ __ PHONETO__
     ModuleMustBeEnabledFirst=Модул <b>%s</b> трябва да бъде активиран първо ако се нуждаете от тази опция.
     SecurityToken=Ключът за осигуряване на сигурна URL адреси
    -NoSmsEngine=Не изпращач мениджър SMS на разположение. SMS подателя мениджър не са инсталирани по подразбиране разпределение (защото зависи от външен доставчик), но можете да намерите някои по %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Можете да настроите всеки глобални опции, свързани към PDF поколение
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Правила за изграждането на адрес кутии
    -HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
    -PDFRulesForSalesTax=Rules for Sales Tax / VAT
    -PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideAnyVATInformationOnPDF=Скриване на цялата информация, свързана с данък върху продажбите / ДДС върху генерирания PDF файл
    +PDFRulesForSalesTax=Правила за данък върху продажбите / ДДС
    +PDFLocaltax=Правила за %s
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Скриване на продуктите описание на генерирани PDF
     HideRefOnPDF=Скриване на продуктите код. генерирани PDF
    -HideDetailsOnPDF=Hide product lines details on generated PDF
    +HideDetailsOnPDF=Скриване на детайлите на продуктовите линии за генерираните PDF файлове
     PlaceCustomerAddressToIsoLocation=Use french standard position (La Poste) for customer address position
     Library=Библиотека
     UrlGenerationParameters=Параметри за осигуряване на URL адреси
     SecurityTokenIsUnique=Използвайте уникална параметър securekey за всеки URL
     EnterRefToBuildUrl=Въведете справка за обект %s
     GetSecuredUrl=Изчислява URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old ставка на ДДС
     NewVATRates=Нов ставка на ДДС
     PriceBaseTypeToChange=Промяна на цените с база референтна стойност, определена на
     MassConvert=Стартиране маса конвертирате
     String=Низ
     TextLong=Дълъг текст
    -HtmlText=Html text
    +HtmlText=HTML текст
     Int=Цяло число
     Float=Десетично число
     DateAndTime=Дата и час
    @@ -408,20 +412,20 @@ ExtrafieldSelect = Избор лист
     ExtrafieldSelectList = Избор от таблица
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Парола
    -ExtrafieldRadio=Radio buttons (on choice only)
    -ExtrafieldCheckBox=Checkboxes
    -ExtrafieldCheckBoxFromList=Checkboxes from table
    +ExtrafieldRadio=Radio buttons (one choice only)
    +ExtrafieldCheckBox=Полета за отметка
    +ExtrafieldCheckBoxFromList=Отметки от таблицата
     ExtrafieldLink=Link to an object
    -ComputedFormula=Computed field
    +ComputedFormula=Изчислено поле
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpsellist=List of values comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>- idfilter is necessarly a primary int key<br>- filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntax  extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list:<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
     ExtrafieldParamHelpchkbxlst=List of values comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntax  extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list :<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
     ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax : ObjectName:Classpath<br>Examples :<br>Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php
    -LibraryToBuildPDF=Library used for PDF generation
    +LibraryToBuildPDF=Използвана библиотека за създаване на PDF файлове
     LocalTaxDesc=Some countries apply 2 or 3 taxes on each invoice line. If this is the case, choose type for second and third tax and its rate. Possible type are:<br>1 : local tax apply on products and services without vat (localtax is calculated on amount without tax)<br>2 : local tax apply on products and services including vat (localtax is calculated on amount + main tax)<br>3 : local tax apply on products without vat (localtax is calculated on amount without tax)<br>4 : local tax apply on products including vat (localtax is calculated on amount + main vat)<br>5 : local tax apply on services without vat (localtax is calculated on amount without tax)<br>6 : local tax apply on services including vat (localtax is calculated on amount + tax)
     SMS=SMS
     LinkToTestClickToDial=Enter a phone number to call to show a link to test the ClickToDial url for user <strong>%s</strong>
    @@ -429,63 +433,65 @@ RefreshPhoneLink=Обнови връзка
     LinkToTest=Генерирана е връзка за потребител <strong>%s</strong> (натиснете телефонния номер за тест)
     KeepEmptyToUseDefault=Оставете празно за стойност по подразбиране
     DefaultLink=Връзка по подразбиране
    -SetAsDefault=Set as default
    +SetAsDefault=Избери като по-подразбиране
     ValueOverwrittenByUserSetup=Внимание, тази стойност може да бъде презаписана от потребителски настройки (всеки потребител може да зададе собствен натисни-набери адрес)
     ExternalModule=Външен модул - инсталиран в директория %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
    -CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
    +CurrentlyNWithoutBarCode=Понастоящем имате <strong> %s </strong> запис на <strong> %s </strong> %s без дефиниран баркод.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
    -ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
    +ConfirmEraseAllCurrentBarCode=Сигурни ли сте че, искате да изтриете всички текущи стойности на баркода?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Пусни кеширането на файла
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
    -NoDetails=No more details in footer
    -DisplayCompanyInfo=Display company address
    -DisplayCompanyManagers=Display manager names
    -DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    -ModuleCompanyCodePanicum=Return an empty accounting code.
    -ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
    +NoDetails=Няма повече подробности в долния колонтитул
    +DisplayCompanyInfo=Показване на фирмения адрес
    +DisplayCompanyManagers=Показване на името на управителя
    +DisplayCompanyInfoAndManagers=Показване на адреса на фирмата и имената на управителя
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
    +ModuleCompanyCodePanicum=Върнете празен код за счетоводство.
    +ModuleCompanyCodeDigitaria=Счетоводният код зависи от кода на контрагента. Кодът се състои от символа "C" на първа позиция, последван от първите 5 знака на кода на Контрагента.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
    -UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +UseDoubleApproval=Използвайте одобрение от 3 стъпки, когато сумата (без данък) е по-висока от ...
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
    -ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    -RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +ClickToShowDescription=Кликнете, за да се покаже описание
    +DependsOn=This module needs the module(s)
    +RequiredBy=Този модул се изисква от модул (и)
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +EnableDefaultValues=Разрешете използването на персонализирани стойности по подразбиране
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Област
    -ProductDocumentTemplates=Document templates to generate product document
    -FreeLegalTextOnExpenseReports=Free legal text on expense reports
    -WatermarkOnDraftExpenseReports=Watermark on draft expense reports
    -AttachMainDocByDefault=Set this to 1 if you want to attach main document to email by default (if applicable)
    -FilesAttachedToEmail=Attach file
    -SendEmailsReminders=Send agenda reminders by emails
    -davDescription=Add a component to be a DAV server
    -DAVSetup=Setup of module DAV
    -DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +ProductDocumentTemplates=Шаблони на документи за генериране на продуктов документ
    +FreeLegalTextOnExpenseReports=Безплатен правен текст в отчетите за разходите
    +WatermarkOnDraftExpenseReports=Воден знак за чернови на отчети за разходите
    +AttachMainDocByDefault=Задайте това на 1, ако искате да прикачите основния документ по имейл по подразбиране (ако е приложимо)
    +FilesAttachedToEmail=Прикачите файл
    +SendEmailsReminders=Изпратете напомняния за дневния ред по имейли
    +davDescription=Добавете компонент за DAV сървър
    +DAVSetup=Настройка на модул DAV
    +DAV_ALLOW_PUBLIC_DIR=Разрешаване на публичната директория (директория WebDav, без да е необходима регистрация)
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Потребители и групи
    -Module0Desc=Users / Employees and Groups management
    -Module1Name=Контрагенти
    +Module0Desc=Управление на потребители / служители и групи
    +Module1Name=Third Parties
     Module1Desc=Фирми и управление на контакти
     Module2Name=Търговски
     Module2Desc=Търговско управление
     Module10Name=Счетоводство
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Предложения
     Module20Desc=Търговско предложение управление
     Module22Name=Масови имейли
    @@ -497,7 +503,7 @@ Module25Desc=Управление на поръчка на клиента
     Module30Name=Фактури
     Module30Desc=Фактура и управление на кредитно известие за клиентите. Фактура за управление на доставчици
     Module40Name=Доставчици
    -Module40Desc=Suppliers and purchase management (purchase orders and billing)
    +Module40Desc=Доставчици и управление на покупки (поръчки за покупка и таксуване)
     Module42Name=Debug Logs
     Module42Desc=Logging facilities (file, syslog, ...). Such logs are for technical/debug purposes.
     Module49Name=Редактори
    @@ -511,13 +517,13 @@ Module52Desc=Управление на склад (продукти)
     Module53Name=Услуги
     Module53Desc=Управление на услуги
     Module54Name=Договори/Абонаменти
    -Module54Desc=Управление на договори (услуги или абонаменти)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Баркодове
     Module55Desc=Управление на баркод
     Module56Name=Телефония
     Module56Desc=Телефония интеграция
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Интеграция на ClickToDial система (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,47 +534,47 @@ Module75Name=Разход и пътуване бележки
     Module75Desc=Сметка и управление на пътуване бележки
     Module80Name=Превозите
     Module80Desc=Пратки и управление на заповедта за доставяне
    -Module85Name=Банки и пари в брой
    +Module85Name=Banks and Cash
     Module85Desc=Управление на банкови или парични сметки
    -Module100Name=Външен сайт
    -Module100Desc=Този модул зарежда външен уеб сайт или страница във фрейм и създава връзка в менюто на Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Пощальон и СПИП
     Module105Desc=Пощальон или СПИП интерфейс за член модул
     Module200Name=LDAP
    -Module200Desc=LDAP директория за синхронизация
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke интеграция
     Module240Name=Данни износ
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Импортирането на данни
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Членове
     Module310Desc=Управление на членовете на организацията
     Module320Name=RSS емисия
     Module320Desc=Добавяне на RSS емисия в страниците на Dolibarr
    -Module330Name=Отметки
    -Module330Desc=Управление на отметките
    -Module400Name=Проекти/Възможности
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar интеграция
    -Module500Name=Taxes and Special expenses
    -Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
    -Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module500Name=Данъци и специални разходи
    +Module500Desc=Управление на други разходи (ДДС, социални или допълнителни данъци, дивиденти, ...)
    +Module510Name=Плащане на заплатите на служителите
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
    -Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    -Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module600Name=Известия за бизнес събития
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
    +Module610Name=Продуктови варианти
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Дарения
     Module700Desc=Управление на дарения
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    -Module1120Name=Vendor commercial proposal
    -Module1120Desc=Request vendor commercial proposal and prices
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
    +Module1120Name=Търговско предложение на доставчик
    +Module1120Desc=Поискайте търговско предложение и цени от доставчик
     Module1200Name=Богомолка
     Module1200Desc=Mantis интеграция
     Module1520Name=Document Generation
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG редактор
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Планирани задачи
    -Module2300Desc=Scheduled jobs management (alias cron or chrono table)
    -Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2300Desc=Планирано управление на заданията (псевдоним на таблица cron или chrono)
    +Module2400Name=Събития / Дневен ред
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API services (Web services SOAP)
    @@ -590,48 +596,52 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API services (Web services REST)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Активиране на Dolibarr клиент за уеб услуги (Може да бъде използван за изпращане на информация/заявки към външни сървъри. Поръчки от доставчик единствено за момента)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Използвайте онлайн Gravatar услуга (www.gravatar.com), за да покаже снимка на потребители / членове с техните имейли. Нуждаете се от интернет
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Клиент
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP MaxMind реализации възможности
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
    -Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Name=Незаменими архиви
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=ЧР
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Няколко фирми
     Module5000Desc=Позволява ви да управлявате няколко фирми
     Module6000Name=Workflow
     Module6000Desc=Workflow management (automatic creation of object and/or automatic status change)
    -Module10000Name=Websites
    +Module10000Name=Уебсайтове
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    -Module39000Name=Products lots
    +Module20000Desc=Declare and track employees leave requests
    +Module39000Name=Продукти партиди
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Точка на продажбите
    -Module50100Desc=Point of sales module (POS).
    +Module50100Desc=Модул за точка на продажби (POS).
    +Module50150Name=Точка на продажбите
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Полета
     Module59000Desc=Модул за управление на маржовете
     Module60000Name=Комисии
     Module60000Desc=Модул за управление на комисии
    -Module62000Name=Инкотерм
    -Module62000Desc=Добяване на свойства за управление на Инкотерм
    +Module62000Name=Инкотермс
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Ресурси
    -Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
    +Module63000Desc=Управлявайте ресурсите (принтери, коли, стая, ...), след което можете да ги споделяте в събитията
     Permission11=Клиентите фактури
     Permission12=Създаване / промяна на фактури на клиентите
     Permission13=Unvalidate клиентите фактури
    @@ -651,10 +661,10 @@ Permission32=Създаване / промяна на продукти
     Permission34=Изтриване на продукти
     Permission36=Преглед / управление на скрити продукти
     Permission38=Износ на продукти
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Изтриване на проекти (общи проекти и проекти съм се с нас за)
    -Permission45=Export projects
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
    +Permission45=Експортиране на проекти
     Permission61=Прочети интервенции
     Permission62=Създаване / промяна на интервенции
     Permission64=Изтриване на интервенции
    @@ -663,7 +673,7 @@ Permission71=Прочети членове
     Permission72=Създаване / промяна на членове
     Permission74=Изтриване на членовете
     Permission75=Setup types of membership
    -Permission76=Export data
    +Permission76=Експортиране на данни
     Permission78=Прочети абонаменти
     Permission79=Създаване/промяна на абонаменти
     Permission81=Клиенти поръчки
    @@ -686,7 +696,7 @@ Permission109=Изтриване sendings
     Permission111=Финансови сметки
     Permission112=Създаване / редакция / изтриване и сравни сделки
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Експортни сделки и извлеченията от сметките
     Permission116=Трансфери между сметки
     Permission117=Управление на проверки за експедиция
    @@ -694,21 +704,21 @@ Permission121=Четене на трети лица, свързани с пот
     Permission122=Създаване / промяна контрагенти, свързани с потребителя
     Permission125=Изтриване на трети лица, свързани с потребителя
     Permission126=Контрагенти за износ
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Прочети доставчици
     Permission147=Прочети статистиката
     Permission151=Read direct debit payment orders
    -Permission152=Create/modify a direct debit payment orders
    +Permission152=Създаване / промяна на нареждания за директен дебит
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
     Permission164=Disable a service/subscription of a contract
     Permission165=Delete contracts/subscriptions
    -Permission167=Export contracts
    +Permission167=Експортиране на договори
     Permission171=Read trips and expenses (yours and your subordinates)
     Permission172=Create/modify trips and expenses
     Permission173=Delete trips and expenses
    @@ -725,7 +735,7 @@ Permission187=Близки поръчки доставчици
     Permission188=Отказ доставчика поръчки
     Permission192=Създаване на линии
     Permission193=Отказ линии
    -Permission194=Прочетете честотна лента линии
    +Permission194=Read the bandwidth lines
     Permission202=Създаване на ADSL връзки
     Permission203=Поръчка връзки поръчки
     Permission204=Поръчка връзки
    @@ -750,12 +760,12 @@ Permission244=Вижте съдържанието на скрити катего
     Permission251=Прочетете други потребители и групи
     PermissionAdvanced251=Прочетете други потребители
     Permission252=Разрешения на други потребители
    -Permission253=Създаване / промяна на други потребители, групи и permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Създаване / промяна на вътрешни / външни потребители и разрешения
     Permission254=Създаване / промяна на външни потребители
     Permission255=Промяна на други потребители парола
     Permission256=Изтрий или забраняване на други потребители
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Прочети CA
     Permission272=Прочети фактури
     Permission273=Издаване на фактури
    @@ -765,7 +775,7 @@ Permission283=Изтриване на контакти
     Permission286=Експортиране на контакти
     Permission291=Прочети тарифи
     Permission292=Задаване на разрешения за тарифите
    -Permission293=Промяна на клиенти тарифи
    +Permission293=Modify customers tariffs
     Permission300=Баркодове
     Permission301=Създаване / промяна на баркодове
     Permission302=Изтриване на баркодове
    @@ -787,11 +797,9 @@ Permission401=Прочети отстъпки
     Permission402=Създаване / промяна на отстъпки
     Permission403=Проверка на отстъпки
     Permission404=Изтриване на отстъпки
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -842,13 +850,13 @@ Permission1236=Експорт на доставни фактури, атрибу
     Permission1237=Експорт на доставни поръчки и техните детайли
     Permission1251=Пусни масов внос на външни данни в базата данни (данни товара)
     Permission1321=Износ на клиентите фактури, атрибути и плащания
    -Permission1322=Reopen a paid bill
    +Permission1322=Отваряне на платена сметка
     Permission1421=Износ на клиентски поръчки и атрибути
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
    -Permission20004=Read all leave requests (even of user not subordinates)
    -Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    +Permission20004=Прочетете всички заявки за отсъствие (дори и на служители който не са ви подчинени)
    +Permission20005=Създаване / промяна на заявки за отсъствие за всички (дори и на потребители, които не са подчинени)
     Permission20006=Admin leave requests (setup and update balance)
     Permission23001=Read Scheduled job
     Permission23002=Create/update Scheduled job
    @@ -860,7 +868,7 @@ Permission2403=Изтрий действия (събития или задачи
     Permission2411=Прочетете действия (събития или задачи) на другите
     Permission2412=Създаване / промяна действия (събития или задачи) на другите
     Permission2413=Изтрий действия (събития или задачи) на другите
    -Permission2414=Export actions/tasks of others
    +Permission2414=Експортни действия / задачи на други
     Permission2501=/ Изтегляне документи
     Permission2502=Изтегляне на документи
     Permission2503=Изпращане или изтриване на документи
    @@ -876,79 +884,79 @@ Permission55002=Create/modify polls
     Permission59001=Read commercial margins
     Permission59002=Define commercial margins
     Permission59003=Read every user margin
    -Permission63001=Read resources
    -Permission63002=Create/modify resources
    -Permission63003=Delete resources
    -Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +Permission63001=Прочетете ресурси
    +Permission63002=Създаване / промяна на ресурси
    +Permission63003=Изтриване на ресурси
    +Permission63004=Свързване на ресурси към събитията от дневния ред
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Cantons
     DictionaryRegion=Regions
     DictionaryCountry=Countries
     DictionaryCurrency=Currencies
    -DictionaryCivility=Personal and professional titles
    -DictionaryActions=Types of agenda events
    +DictionaryCivility=Лични и професионални титли
    +DictionaryActions=Видове събития от дневния ред
     DictionarySocialContributions=Social or fiscal taxes types
     DictionaryVAT=VAT Rates or Sales Tax Rates
    -DictionaryRevenueStamp=Amount of tax stamps
    +DictionaryRevenueStamp=Размер на данъчните печати
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    -DictionaryTypeOfContainer=Type of website pages/containers
    +DictionaryTypeContact=Contact address types
    +DictionaryTypeOfContainer=Тип страници / контейнери на уебсайтове
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    -DictionaryFormatCards=Cards formats
    -DictionaryFees=Expense report - Types of expense report lines
    +DictionaryFormatCards=Формати на карти
    +DictionaryFees=Отчет за разходите - Видове отчети за разходите
     DictionarySendingMethods=Shipping methods
     DictionaryStaff=Staff
     DictionaryAvailability=Delivery delay
     DictionaryOrderMethods=Ordering methods
     DictionarySource=Origin of proposals/orders
    -DictionaryAccountancyCategory=Personalized groups for reports
    +DictionaryAccountancyCategory=Персонализирани групи за отчети
     DictionaryAccountancysystem=Models for chart of accounts
    -DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryAccountancyJournal=Счетоводни дневници
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    -DictionaryExpenseTaxCat=Expense report - Transportation categories
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
    +DictionaryExpenseTaxCat=Отчет за разходите - Категории транспорт
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup спаси
    -SetupNotSaved=Setup not saved
    +SetupNotSaved=Настройката не е запазена
     BackToModuleList=Обратно към списъка с модули
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Управление на ДДС
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=По подразбиране предложената ДДС е 0, които могат да бъдат използвани за подобни случаи сдружения, лицата ОУ малките фирми.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Курс
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Управление
    -LocalTax1IsUsedDescES= RE процент по подразбиране при създаването на перспективите, фактури, поръчки и т.н. следват активна стандартното правило: <br> Ако те купувача не се подлага на RE RE по подразбиране = 0. Край на правило. <br> Ако купувачът се подлага на RE RE по подразбиране. Край на правило. <br>
    -LocalTax1IsNotUsedDescES= По подразбиране предложения RE е 0. Край на правило.
    -LocalTax1IsUsedExampleES= В Испания те са професионалисти, подлежащи на някои специфични части на испанската IAE.
    -LocalTax1IsNotUsedExampleES= В Испания те са професионални и общества и при спазване на определени сектори на испанската IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= RE процент по подразбиране при създаването на перспективите, фактури, поръчки и т.н. следват активна стандартното правило: <br> Ако продавачът не се подлага на IRPF, тогава IRPF по подразбиране = 0. Край на правило. <br> Ако продавачът е подложен на IRPF тогава IRPF по подразбиране. Край на правило. <br>
    -LocalTax2IsNotUsedDescES= По подразбиране предложения IRPF е 0. Край на правило.
    -LocalTax2IsUsedExampleES= В Испания, на свободна практика и независими специалисти, които предоставят услуги и фирми, които са избрани на данъчната система от модули.
    -LocalTax2IsNotUsedExampleES= В Испания те са за бизнес, които не подлежат на данъчната система от модули.
    +LocalTax1ManagementES=RE Управление
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=По подразбиране предложения RE е 0. Край на правило.
    +LocalTax1IsUsedExampleES=В Испания те са професионалисти, подлежащи на някои специфични части на испанската IAE.
    +LocalTax1IsNotUsedExampleES=В Испания те са професионални и общества и при спазване на определени сектори на испанската IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=По подразбиране предложения IRPF е 0. Край на правило.
    +LocalTax2IsUsedExampleES=В Испания, на свободна практика и независими специалисти, които предоставят услуги и фирми, които са избрани на данъчната система от модули.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,14 +966,15 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Етикет на документи
    -NbOfDays=Nb дни
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=В края на месеца
    -CurrentNext=Current/Next
    +CurrentNext=Настоящ / Следваща
     Offset=Офсет
     AlwaysActive=Винаги активна
     Upgrade=Обновяване
     MenuUpgrade=Обновяване/Удължаване
    -AddExtensionThemeModuleOrOther=Deploy/install external app/module
    +AddExtensionThemeModuleOrOther=Внедрете / инсталирате външно приложение / модул
     WebServer=Уеб сървър
     DocumentRootServer=Главната директория на уеб сървъра
     DataRootServer=Файлове с данни
    @@ -984,29 +993,29 @@ DatabaseUser=Потребители на бази данни
     DatabasePassword=Database парола
     Tables=Маси
     TableName=Таблица име
    -NbOfRecord=Nb на записите
    +NbOfRecord=No. of records
     Host=Сървър
     DriverType=Шофьор тип
     SummarySystem=Резюме на информационна система
     SummaryConst=Списък на всички параметри за настройка Dolibarr
    -MenuCompanySetup=Company/Organization
    +MenuCompanySetup=Компания / Организация
     DefaultMenuManager= Стандартно меню мениджър
     DefaultMenuSmartphoneManager=Smartphone Menu Manager
     Skin=Кожата тема
     DefaultSkin=Тема по подразбиране
     MaxSizeList=Максимална дължина за списъка
     DefaultMaxSizeList=Макс. дължина за списъци по подразбиране
    -DefaultMaxSizeShortList=Макс. дължина по подразбиране за кратки списъци (т.е. в клиентската карта)  
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Послание на деня
     MessageLogin=Съобщение на страницата за вход
    -LoginPage=Login page
    -BackgroundImageLogin=Background image
    +LoginPage=Входна страница
    +BackgroundImageLogin=Изображение на фона
     PermanentLeftSearchForm=Постоянна форма за търсене в лявото меню
     DefaultLanguage=Език по подразбиране (код на езика)
     EnableMultilangInterface=Разрешаване на многоезичен интерфейс
     EnableShowLogo=Показване на логото в лявото меню
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Компания / Организация
    +CompanyIds=Company/Organization identities
     CompanyName=Име
     CompanyAddress=Адрес
     CompanyZip=П. код
    @@ -1021,55 +1030,55 @@ OwnerOfBankAccount=Собственик на %s банкови сметки
     BankModuleNotActive=Банкови сметки модул не е активиран
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Сигнали
    -DelaysOfToleranceBeforeWarning=Толерантност закъснение преди предупреждение
    -DelaysOfToleranceDesc=Този екран ви позволява да дефинирате толерирани забавяне преди сигнал се съобщава на екрана с %s икони за всяка края на елемент.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Толеранс на изчакване (в дни), преди сигнал за предложения, за да затворите
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Толеранс на изчакване (в дни) преди сигнал за предложения не таксувани
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Толерантност закъснение (в дни), преди сигнал за услуги, за да активирате
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Толерантност закъснение (в дни) преди сигнала за изтекъл срок на годност услуги
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Толерантност закъснение (в дни), преди сигнал за неплатени фактури доставчици
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Закъснение (в дни) преди tolerence сигнал за неплатени фактури на клиенти
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Толерантност закъснение (в дни), преди сигнал за висящи банково извлечение
    -Delays_MAIN_DELAY_MEMBERS=Толерантност закъснение (в дни), преди сигнал за забавено членски внос
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Толерантност закъснение (в дни), преди сигнал за проверки депозит
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Другите записи от менюто управляват допълнителни параметри.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Събития одит на сигурността
     Audit=Проверка
    -InfoDolibarr=About Dolibarr
    -InfoBrowser=About Browser
    -InfoOS=About OS
    -InfoWebServer=About Web Server
    -InfoDatabase=About Database
    -InfoPHP=About PHP
    -InfoPerf=About Performances
    +InfoDolibarr=За Dolibarr
    +InfoBrowser=За браузъра
    +InfoOS=За операционната система
    +InfoWebServer=За уеб сървър
    +InfoDatabase=За базата данни
    +InfoPHP=За PHP
    +InfoPerf=За производителността 
     BrowserName=Browser name
     BrowserOS=Browser OS
     ListOfSecurityEvents=Списък на събитията Dolibarr сигурност
     SecurityEventsPurged=Събития по сигурността прочиства
     LogEventDesc=Можете да разрешите тук сеч за събития Dolibarr сигурност. Администраторите могат да видите неговото съдържание чрез меню <b>&quot;Системни инструменти - Одит.</b> Внимание, тази функция може да се консумира голямо количество данни в база данни.
    -AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
    +AreaForAdminOnly=Параметрите за настройка могат да се задават само от <b> Администратори </b>.
     SystemInfoDesc=Информационна система Разни техническа информация можете да получите в режим само за четене и видими само за администратори.
     SystemAreaForAdminOnly=Тази област е достъпна само за администратори. Никой не може да промени това ограничение.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    -AccountantFileNumber=File number
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
    +AccountantFileNumber=Номер на файла
     DisplayDesc=От тук можете да изберете параметрите свързани с външния вид на Dolibar
    -AvailableModules=Available app/modules
    +AvailableModules=Налични приложение / модули
     ToActivateModule=За да активирате модули, отидете на настройка пространство (Начало-> Setup-> модули).
     SessionTimeOut=Време за сесията
    -SessionExplanation=Този брой е гаранция, че никога няма да изтекат преди това забавяне на сесията. Но PHP управление на сесии не гаранция, че сесията винаги изтича след това закъснение: Това се случва, ако се изпълнява система за почистване на кеша сесия. <br> Забележка: не конкретна система, вътрешен PHP процес ще почисти сесия всеки за <b>%s / %s</b> достъп, но само по време на достъп от други сесии.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Налични тригери
    -TriggersDesc=Тригерите са файлове, които ще променят поведението на Dolibarr работния процес копират в директорията <b>htdocs / ядро / тригери.</b> Те разбраха нови действия, активирани на събития Dolibarr (създаване на нова компания, фактура валидиране, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Тригерите в този файл са изключени от <b>NORUN</b> наставка в името си.
     TriggerDisabledAsModuleDisabled=Тригерите в този файл са забранени като модул <b>%s</b> е забранено.
     TriggerAlwaysActive=Тригерите в този файл са винаги активни,, каквото са активирани модули Dolibarr.
    @@ -1077,9 +1086,9 @@ TriggerActiveAsModuleActive=Тригерите в този файл са акт
     GeneratedPasswordDesc=Определете тук правилото, което искате да използвате, за да генерира нова парола, ако поискате да има автоматично генерирана парола
     DictionaryDesc=Insert all reference data. You can add your values to the default.
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
    -MiscellaneousDesc=All other security related parameters are defined here.
    +MiscellaneousDesc=Всички останали параметри, свързани със сигурността, са дефинирани тук.
     LimitsSetup=Граници / Прецизно настройване
    -LimitsDesc=Можете да дефинирате ограничения, уточнения и оптимизации, използвани от Dolibarr тук
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Макс знака след десетичната запетая за единичните цени
     MAIN_MAX_DECIMALS_TOT=Макс знака след десетичната запетая за крайни цени
     MAIN_MAX_DECIMALS_SHOWN=Максималният брой десетични числа за цени, показан на екрана <b>(...</b> след тази цифра, ако искате да видите <b>...</b> когато се отрязва номер, когато е показан на екрана)
    @@ -1088,55 +1097,55 @@ UnitPriceOfProduct=Нетен единичната цена на даден пр
     TotalPriceAfterRounding=Обща цена (нето / с ДДС / с ДДС) след закръгляване
     ParameterActiveForNextInputOnly=Параметър ефективно само за следващия вход
     NoEventOrNoAuditSetup=Няма да се иска никакво обезпечение събитие е записано още. Това може да бъде нормално, ако одитът не е разрешена във &quot;Setup - охрана - одит&quot;.
    -NoEventFoundWithCriteria=Няма да се иска никакво обезпечение събитие е за такива критерии за търсене.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Вижте настройка Sendmail
     BackupDesc=За да направите пълно архивно копие на Dolibarr, трябва да:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Архива на директорията трябва да се съхранява на сигурно място.
     BackupDescY=Генерирания дъмп файл трябва да се съхранява на сигурно място.
    -BackupPHPWarning=Backup с този метод не може да бъде гарантирано. Предпочитам предишния
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=За да възстановите резервно копие на Dolibarr, трябва да:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL внос
     ForcedToByAModule= Това правило е принуден да <b>%s</b> от активиран модул
    -PreviousDumpFiles=Generated database backup files
    +PreviousDumpFiles=Генерирани файлове с бекъп на базата данни
     WeekStartOnDay=Първи ден от седмицата
     RunningUpdateProcessMayBeRequired=Продължителност на процеса на актуализация изглежда да се изисква (Програми версия %s различава от %s версия на базата от данни)
     YouMustRunCommandFromCommandLineAfterLoginToUser=Трябва да изпълните тази команда от командния ред след влизане на черупката с потребителски <b>%s</b> или трябва да добавите опцията-W в края на командния ред, за да предоставят <b>%s</b> парола.
     YourPHPDoesNotHaveSSLSupport=SSL функции не са налични във вашата PHP
     DownloadMoreSkins=Изтегляне на повече теми
     SimpleNumRefModelDesc=Върнете референтен номер с формат %syymm-NNNN, където YY е годината, mm е месец и NNNN е последователност без дупка и не нулиране
    -ShowProfIdInAddress=Покажи professionnal номер с адреси на документи
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Частичен превод
    -MAIN_DISABLE_METEO=Изключване метео изглед
    -MeteoStdMod=Standard mode
    -MeteoStdModEnabled=Standard mode enabled
    -MeteoPercentageMod=Percentage mode
    -MeteoPercentageModEnabled=Percentage mode enabled
    -MeteoUseMod=Click to use %s
    +MAIN_DISABLE_METEO=Disable meteorological view
    +MeteoStdMod=Стандартен режим
    +MeteoStdModEnabled=Стандартният режим е активиран
    +MeteoPercentageMod=Процентен режим
    +MeteoPercentageModEnabled=Процентен режим активиран
    +MeteoUseMod=Кликнете, за да използвате %s
     TestLoginToAPI=Тествайте влезете в API
    -ProxyDesc=Някои функции на Dolibarr трябва да имат достъп до Интернет, за да работят. Определете тук параметри за това. Ако сървърът Dolibarr е зад прокси сървър, тези параметри казва Dolibarr как за достъп до интернет през него.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Външен достъп
     MAIN_PROXY_USE=Използване на прокси сървър (иначе директен достъп до интернет)
     MAIN_PROXY_HOST=Име / адрес на прокси сървър
     MAIN_PROXY_PORT=Порт на прокси сървър
     MAIN_PROXY_USER=Влез за да използвате прокси сървър
     MAIN_PROXY_PASS=Парола, за да използвате прокси сървър
    -DefineHereComplementaryAttributes=Определете тук всички atributes, не е налична по подразбиране, и че искате да се поддържа за %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Допълнителни атрибути
     ExtraFieldsLines=Complementary attributes (lines)
    -ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
    +ExtraFieldsLinesRec=Допълнителни атрибути (линии на шаблони на фактури)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    -ExtraFieldsCustomerInvoicesRec=Complementary attributes (templates invoices)
    +ExtraFieldsCustomerInvoicesRec=Допълнителни атрибути (шаблони на фактури)
     ExtraFieldsSupplierOrders=Complementary attributes (orders)
     ExtraFieldsSupplierInvoices=Complementary attributes (invoices)
     ExtraFieldsProject=Complementary attributes (projects)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Внимание, на някои системи Linux, за да изпратите имейл от електронната си поща, Sendmail изпълнение настройка трябва conatins опция-ба (параметър mail.force_extra_parameters във вашия php.ini файл). Ако някои получатели никога не получават имейли, опитайте се да редактирате тази PHP параметър с mail.force_extra_parameters = ба).
     PathToDocuments=Път до документи
     PathDirectory=Директория
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    -TranslationSetup=Setup of translation
    -TranslationKeySearch=Search a translation key or string
    -TranslationOverwriteKey=Overwrite a translation string
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
    +TranslationSetup=Настройване на превода
    +TranslationKeySearch=Търсете ключ за превод или стойност
    +TranslationOverwriteKey=Презапишете стойността за превода
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    -TranslationString=Translation string
    -CurrentTranslationString=Current translation string
    -WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
    -NewTranslationStringToShow=New translation string to show
    -OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    -TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
    +TranslationString=Превод на стойността
    +CurrentTranslationString=Настояща стойност на превода
    +WarningAtLeastKeyOrTranslationRequired=Критерият за търсене е необходим най-малко за ключ или стойност на превода
    +NewTranslationStringToShow=Нова преведена стойност, която да се показва
    +OriginalValueWas=Оригиналния превод е презаписан. Първоначалната стойност е: <br> <br> %s
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
    +TotalNumberOfActivatedModules=Активирани приложения / модули: <b> %s </b> / <b> %s </b>
     YouMustEnableOneModule=Трябва да даде възможност на най-малко 1 модул
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Върнете парола, генерирана в съответствие с вътрешен алгоритъм Dolibarr: 8 символа, съдържащи общи цифри и символи с малки.
    -PasswordGenerationNone=Без предлагане на всякакви генерирани пароли. Паролата трябва да се въвежда ръчно.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Връщане на парола съответно вашата лично определена конфигурация.
     SetupPerso=Съответно по вашата конфигурация
     PasswordPatternDesc=Описание на модел за парола
    @@ -1192,26 +1202,26 @@ DisableForgetPasswordLinkOnLogonPage=Да не се показват връзк
     UsersSetup=Потребители модул за настройка
     UserMailRequired=Задължително е въвеждането на имейл при създаване на нов потребител
     ##### HRM setup #####
    -HRMSetup=HRM module setup
    +HRMSetup=Настройка на модула за УЧР
     ##### Company setup #####
     CompanySetup=Фирми модул за настройка
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
    -NotificationsDescUser=* per users, one user at time.
    -NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
    -NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Документи шаблони
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +NotificationsDescUser=* на потребители, по един потребител след друг.
    +NotificationsDescContact=* за контакти на контрагенти (клиенти или доставчици), по един контакт след друг.
    +NotificationsDescGlobal=* или по зададете глобални целеви имейли в страницата за настройка на модули.
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Воден знак върху проект на документ
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Професионална Id уникален
    -MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    -MustBeInvoiceMandatory=Mandatory to validate invoices?
    -TechnicalServicesProvided=Technical services provided
    +CompanyIdProfChecker=Rules for Professional IDs
    +MustBeUnique=Трябва да е уникално?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
    +MustBeInvoiceMandatory=Задължително да валидирате фактурите?
    +TechnicalServicesProvided=Технически услуги предоставени 
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=За износ на линк към <b>%s</b> формат е на разположение на следния линк: %s
    @@ -1219,7 +1229,8 @@ WebCalUrlForVCalExport=За износ на линк към <b>%s</b> форма
     BillsSetup=Фактури модул за настройка
     BillsNumberingModule=Фактури и кредитни известия, номериране модул
     BillsPDFModules=Фактура модели документи
    -PaymentsPDFModules=Payment documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
    +PaymentsPDFModules=Модели на платежни документи
     CreditNote=Кредитно известие
     CreditNotes=Кредитни известия
     ForceInvoiceDate=Принудително датата на фактурата датата на валидиране
    @@ -1230,7 +1241,7 @@ FreeLegalTextOnInvoices=Свободен текст на фактури
     WatermarkOnDraftInvoices=Watermark on draft invoices (none if empty)
     PaymentsNumberingModule=Модел на номериране на плащания
     SuppliersPayment=Плащания към доставчици
    -SupplierPaymentSetup=Suppliers payments setup
    +SupplierPaymentSetup=Настройка за плащанията на доставчиците
     ##### Proposals #####
     PropalSetup=Модул за настройка на търговски предложения
     ProposalsNumberingModules=Търговско предложение за номериране на модули
    @@ -1239,10 +1250,10 @@ FreeLegalTextOnProposal=Свободен текст на търговски пр
     WatermarkOnDraftProposal=Watermark on draft commercial proposals (none if empty)
     BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Ask for bank account destination of proposal
     ##### SupplierProposal #####
    -SupplierProposalSetup=Price requests vendors module setup
    -SupplierProposalNumberingModules=Price requests vendors numbering models
    -SupplierProposalPDFModules=Price requests vendors documents models
    -FreeLegalTextOnSupplierProposal=Free text on price requests vendors
    +SupplierProposalSetup=Настройка на модула запитване за цена към доставчик
    +SupplierProposalNumberingModules=Запитване за цена към доставчик, модел на номерация.
    +SupplierProposalPDFModules=Запитване за цена към доставчик, модел на документа
    +FreeLegalTextOnSupplierProposal=Свободен текст за запитването за цена към доставчик
     WatermarkOnDraftSupplierProposal=Watermark on draft price requests vendors (none if empty)
     BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Ask for bank account destination of price request
     WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Питане за Складов източник за поръчка
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Управление на Login за всеки член
     AdherentMailRequired=Задължително е въвеждането на имейл при създаване на нов член
     MemberSendInformationByMailByDefault=Checkbox да изпрати потвърждение поща на членовете (валидиране или нов абонамент) е включена по подразбиране
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Глобални параметри
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Синхронизация тест успешно
     LDAPSynchroKO=Неуспешно синхронизиране тест
    -LDAPSynchroKOMayBePermissions=Неуспешно синхронизиране тест. Уверете се, че свързването със сървъра е конфигуриран правилно и позволява LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP свърже с LDAP сървъра успешни (сървър = %s, Порт = %s)
     LDAPTCPConnectKO=TCP се свърже с LDAP сървъра не успя (Server = %s, Port = %s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Свързване / Authentificate LDAP сървъра се провали (сървър = %s, Port = %s, Admin = %s, парола = %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP сървър, конфигуриран за версия 3
     LDAPSetupForVersion2=LDAP сървър, конфигуриран за версия 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Вход (самба, activedirectory)
     LDAPFieldLoginSambaExample=Пример: samaccountname
     LDAPFieldFullname=Пълното име
     LDAPFieldFullnameExample=Пример: cn
    -LDAPFieldPasswordNotCrypted=Паролата не криптирани
    -LDAPFieldPasswordCrypted=Парола криптирани
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Пример: userPassword
     LDAPFieldCommonNameExample=Пример: cn
     LDAPFieldName=Име
    @@ -1397,7 +1409,7 @@ LDAPFieldCompanyExample=Пример: о
     LDAPFieldSid=SID
     LDAPFieldSidExample=Пример: objectsid
     LDAPFieldEndLastSubscription=Дата на абонамент края
    -LDAPFieldTitle=Job position
    +LDAPFieldTitle=Длъжност
     LDAPFieldTitleExample=Example: title
     LDAPSetupNotComplete=LDAP настройка не е пълна (отидете на други раздели)
     LDAPNoUserOrPasswordProvidedAccessIsReadOnly=Не администратор или парола. LDAP достъп ще бъдат анонимни и в режим само за четене.
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Примерни стойности са предназначени за <b>OpenLDAP</b> със следните заредени схеми: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Ако използвате thoose ценности и OpenLDAP, променете LDAP <b>slapd.conf</b> конфигурационен файл, за да има всички thoose схеми натоварени.
     ForANonAnonymousAccess=За заверено достъп (достъп за писане например)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    -DefaultSearchFilters=Default search filters
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
    +DefaultSearchFilters=Филтри за търсене по подразбиране
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Настройка на модул Продукти
     ServiceSetup=Услуги модул за настройка
     ProductServiceSetup=Продукти и услуги модули за настройка
     NumberOfProductShowInSelect=Максимален брой продукти в комбинации изберете списъци (0 = без ограничение)
    -ViewProductDescInFormAbility=Визуализация на описания на продукти във формите (в противен случай като изскачащ прозорец подсказка)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Тип баркод по подразбиране за продукти
     SetDefaultBarcodeTypeThirdParties=Тип баркод по подразбиране за контрагенти
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Изпращане модул за настройка
     SendingsReceiptModel=Изпращане получаване модел
     SendingsNumberingModules=Sendings номериране модули
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Продукти доставки получаване номерацията модул
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Разширено редактор
     ActivateFCKeditor=Активирайте разширен редактор за:
     FCKeditorForCompany=WYSIWIG създаване / редактиране на елементи на описание и бележка (с изключение на продукти / услуги)
     FCKeditorForProduct=WYSIWIG създаване / редактиране на продукти / услуги описание и бележка
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG създаване / редактиране на писма
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Връзка успял, но базата данни не изглежда да бъде една база данни на OSCommerce (Ключови %s не е намерен в таблицата %s).
    -OSCommerceTestOk=Връзка към &quot;%s&quot; сървър на &quot;%s&quot; база данни с успешен потребителски %s.
    -OSCommerceTestKo1=Свързване към сървър &quot;%s успее, но база данни&quot; %s &quot;не може да бъде постигнато.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Връзка към сървъра &quot;%s&quot; с потребителя %s &quot;се провали.
     ##### Stock #####
    -StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +StockSetup=Настройка на модул за наличност
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Меню заличават
     Menus=Менюта
    @@ -1548,7 +1561,7 @@ DetailRight=Условие, за да се покаже неразрешени 
     DetailLangs=Lang името на файла за превод на етикета код
     DetailUser=Intern / EXTERN /
     Target=Цел
    -DetailTarget=Цел за връзки (_blank върха отвори в нов прозорец)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1: горното меню, 0: хедър, меню&gt; 0 меню и подменю)
     ModifMenu=Меню промяна
     DeleteMenu=Изтриване на елемент от менюто
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=Се дължи ДДС: <br> - При доставка на
     OptionVatDebitOptionDesc=Се дължи ДДС: <br> - При доставка на стоки (ние използваме датата на фактурата) <br> - По фактура (дебитно) за услуги
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=При доставка
     OnPayment=На плащане
     OnInvoice=На фактура
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Събития и натъкмяване на дневен ред модул
     PasswordTogetVCalExport=, За да разреши износ връзка
     PastDelayVCalExport=Не изнася случай по-стари от
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
    -AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
    +AGENDA_SHOW_LINKED_OBJECT=Показване на свързания обект в изгледа на дневния ред
     ##### Clicktodial #####
     ClickToDialSetup=Кликнете, за да наберете настройка модул
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=Този модул позволява телефонните номера да могат да се кликват. Кликване върху тази икона ще предизвика вашият телефон да набере телефонния номер. Това може да бъде използвано за обаждане към кол център система, която може да набере телефония номер на SIP система например.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Използвайте този метод ако вашите потребители имат софт-телефон или софтуерен интерфейс на същия компютър, на който е браузера, и повиквани с клик на линк във вашия браузер, който започва с "tel:". Ако се нуждаете от пълно сървърно решение (без нужда за локална софтуерна инсталация), трябва да зададете на това "Не" или да попълните следващото поле.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Точка на продажбите
     CashDeskSetup=Точка на продажбите модул за настройка
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Акаунт по подразбиране да се използва за получаване на парични плащания
     CashDeskBankAccountForCheque= Акаунт по подразбиране да се използва за получаване на плащания с чек
     CashDeskBankAccountForCB= Акаунт по подразбиране да се използва за получаване на парични плащания с кредитни карти
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark настройка модул
    -BookmarkDesc=Този модул ви позволява да управлявате отметките. Можете да добавяте преки пътища към страници на Dolibarr или външни уеб сайтове в лявото меню.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Максимален брой отметки, които да се показват в лявото меню
     ##### WebServices #####
     WebServicesSetup=WebServices модул за настройка
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-модул за настройка компания
     ##### Suppliers #####
     SuppliersSetup=Настройка доставчик модул
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,17 +1667,17 @@ ProjectsSetup=Инсталационния проект модул
     ProjectsModelModule=Проект доклади документ модел
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
    -AccountingPeriods=Accounting periods
    +AccountingPeriods=Счетоводни периоди
     AccountingPeriodCard=Accounting period
    -NewFiscalYear=New accounting period
    -OpenFiscalYear=Open accounting period
    -CloseFiscalYear=Close accounting period
    -DeleteFiscalYear=Delete accounting period
    -ConfirmDeleteFiscalYear=Are you sure to delete this accounting period?
    -ShowFiscalYear=Show accounting period
    +NewFiscalYear=Нов счетоводен период
    +OpenFiscalYear=Отворен счетоводен период
    +CloseFiscalYear=Затворен счетоводен период
    +DeleteFiscalYear=Изтри счетоводен период
    +ConfirmDeleteFiscalYear=Сигурни ли сте че искате да изтриете този счетоводен период?
    +ShowFiscalYear=Покажи счетоводен период
     AlwaysEditable=Can always be edited
     MAIN_APPLICATION_TITLE=Force visible name of application (warning: setting your own name here may break autofill login feature when using DoliDroid mobile application)
     NbMajMin=Minimum number of uppercase characters
    @@ -1684,11 +1697,11 @@ ExpenseReportsRulesSetup=Setup of module Expense Reports - Rules
     ExpenseReportNumberingModules=Expense reports numbering module
     NoModueToManageStockIncrease=No module able to manage automatic stock increase has been activated. Stock increase will be done on manual input only.
     YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for EMail notifications by enabling and configuring the module "Notification".
    -ListOfNotificationsPerUser=List of notifications per user*
    -ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
    +ListOfNotificationsPerUser=Списък на известията за потребител *
    +ListOfNotificationsPerUserOrContact=Списък на известията по потребител * или по контакт **
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,13 +1710,14 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Цвят за подчертаване на линията, когато мишката мине отгоре (оставете празно за без подчертаване)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Цвят на връзките
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
     NotSupportedByAllThemes=Will works with core themes, may not be supported by external themes
     BackgroundColor=Background color
     TopMenuBackgroundColor=Background color for Top menu
    -TopMenuDisableImages=Hide images in Top menu
    +TopMenuDisableImages=Скриване на изображения в горното меню
     LeftMenuBackgroundColor=Background color for Left menu
     BackgroundTableTitleColor=Background color for Table title line
     BackgroundTableTitleTextColor=Text color for Table title line
    @@ -1712,92 +1726,123 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    -VisibleEverywhere=Visible everywhere
    -VisibleNowhere=Visible nowhere
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
    +VisibleEverywhere=Вижда се навсякъде
    +VisibleNowhere=Вижда се никъде
     FixTZ=TimeZone fix
     FillFixTZOnlyIfRequired=Example: +2 (fill only if problem experienced)
     ExpectedChecksum=Expected Checksum
     CurrentChecksum=Current Checksum
    -ForcedConstants=Required constant values
    +ForcedConstants=Изисква постоянни стойности
     MailToSendProposal=Клиентски предложения
     MailToSendOrder=Клиентски поръчки
     MailToSendInvoice=Клиентски фактури
     MailToSendShipment=Превозите
     MailToSendIntervention=Намеси
    -MailToSendSupplierRequestForQuotation=Quotation request
    -MailToSendSupplierOrder=Purchase orders
    -MailToSendSupplierInvoice=Vendor invoices
    +MailToSendSupplierRequestForQuotation=Запитване за оферта
    +MailToSendSupplierOrder=Поръчка
    +MailToSendSupplierInvoice=Фактури на доставчик
     MailToSendContract=Договори
     MailToThirdparty=Контрагенти
     MailToMember=Членове
     MailToUser=Потребители
    -MailToProject=Projects page
    +MailToProject=Страници на проектите
     ByDefaultInList=Показване по подразбиране при показа на списък
    -YouUseLastStableVersion=You use the latest stable version
    +YouUseLastStableVersion=Използвате последната стабилна версия
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=Когато опция "Няколко нива за цени на продукт/услуга" е активирана, можете да определите различни цени (по една на ниво) за всеки продукт. За да спестите време, можете да въведете правило тук да имате цена за всяко ниво автоматично изчислена спрямо цената на първо ниво, така ще трябва да въведете само цена за първо ниво на всеки продукт. Тази страница, за да пести времето ви и може да бъде полезна само ако вашите цени за всяко ниво са относителни спрямо първото ниво. Можете да игнорирате тази страница в повечето случаи.
    -ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
    +ModelModulesProduct=Шаблони на документите за продуктите
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
    -AllPublishers=All publishers
    -UnknownPublishers=Unknown publishers
    -AddRemoveTabs=Add or remove tabs
    -AddDataTables=Add object tables
    -AddDictionaries=Add dictionaries tables
    -AddData=Add objects or dictionaries data
    -AddBoxes=Add widgets
    -AddSheduledJobs=Add scheduled jobs
    -AddHooks=Add hooks
    -AddTriggers=Add triggers
    -AddMenus=Add menus
    -AddPermissions=Add permissions
    -AddExportProfiles=Add export profiles
    -AddImportProfiles=Add import profiles
    -AddOtherPagesOrServices=Add other pages or services
    +AllPublishers=Всички издатели
    +UnknownPublishers=Неизвестни издатели
    +AddRemoveTabs=Добавяне или премахване на раздели
    +AddDataTables=Добавяне на таблици на обекти
    +AddDictionaries=Добавете таблици с речници
    +AddData=Добавете данни за обекти или речници
    +AddBoxes=Добавете джаджи
    +AddSheduledJobs=Добавете насрочени работи
    +AddHooks=Добавете куки
    +AddTriggers=Добавете тригери
    +AddMenus=Добавете менюта
    +AddPermissions=Добавете права
    +AddExportProfiles=Добавете профили за експортиране
    +AddImportProfiles=Добавете профили за импортиране
    +AddOtherPagesOrServices=Добавете други страници или услуги
     AddModels=Add document or numbering templates
    -AddSubstitutions=Add keys substitutions
    -DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +AddSubstitutions=Добавете замествания на клавиши
    +DetectionNotPossible=Откриването не е възможно
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    -BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    -MAIN_PDF_MARGIN_LEFT=Left margin on PDF
    -MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
    -MAIN_PDF_MARGIN_TOP=Top margin on PDF
    -MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    -SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    -SeveralLangugeVariatFound=Several language variants found
    -COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
    +BaseCurrency=Референтна валута на компанията (влезте в настройката на компанията, за да промените това)
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
    +MAIN_PDF_MARGIN_LEFT=Лява граница в PDF
    +MAIN_PDF_MARGIN_RIGHT=Дясна граница в PDF
    +MAIN_PDF_MARGIN_TOP=Горна граница в PDF
    +MAIN_PDF_MARGIN_BOTTOM=Долна граница в PDF
    +NothingToSetup=There is no specific setup to do for this module.
    +SetToYesIfGroupIsComputationOfOtherGroups=Задайте това да, ако тази група е съвкупност от други групи
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +SeveralLangugeVariatFound=Намерени са няколко езикови варианта
    +COMPANY_AQUARIUM_REMOVE_SPECIAL=Премахнете специалните символи
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=Само на малък екран (смартфон)
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/bg_BG/companies.lang b/htdocs/langs/bg_BG/companies.lang
    index d67da39c23a..c1b438f6d77 100644
    --- a/htdocs/langs/bg_BG/companies.lang
    +++ b/htdocs/langs/bg_BG/companies.lang
    @@ -2,19 +2,19 @@
     ErrorCompanyNameAlreadyExists=Името на фирмата %s вече съществува. Изберете друго.
     ErrorSetACountryFirst=Първо задайте държава
     SelectThirdParty=Изберете контрагент
    -ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
    +ConfirmDeleteCompany=Сигурни ли сте че искате да изтриете тази компания и цялата наследена информация?
     DeleteContact=Изтриване на контакт/адрес
    -ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Нов контрагент
    -MenuNewCustomer=Нов клиент
    -MenuNewProspect=Нов потенциален
    -MenuNewSupplier=New vendor
    +ConfirmDeleteContact=Сигурни ли сте че искате да изтриете този контакт и цялата наследена информация?
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Ново физическо лице
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewCompany=Нова компания (перспектива, клиент, доставчик)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
    +CreateDolibarrThirdPartySupplier=Създаване на контрагент (доставчик)
     CreateThirdPartyOnly=Създаване контрагент
    -CreateThirdPartyAndContact=Create a third party + a child contact
    +CreateThirdPartyAndContact=Създайте контакт на контрагент + дете
     ProspectionArea=Област потенциални
     IdThirdParty=ID на контрагент
     IdCompany=ID на фирма
    @@ -25,39 +25,39 @@ ThirdPartyContact=Контакт/адрес на контрагент
     Company=Фирма
     CompanyName=Име на фирмата
     AliasNames=Друго име (търговско, марка, ...)
    -AliasNameShort=Друго име
    +AliasNameShort=Alias Name
     Companies=Фирми
    -CountryIsInEEC=Държавата е част от Европейската икономическа общност
    -ThirdPartyName=Име на контрагент
    -ThirdPartyEmail=Third party email
    -ThirdParty=Контрагент
    -ThirdParties=Контрагенти
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
    +ThirdPartyEmail=Имейл на контрагент
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Потенциални
     ThirdPartyProspectsStats=Потенциални
     ThirdPartyCustomers=Клиенти
     ThirdPartyCustomersStats=Клиенти
     ThirdPartyCustomersWithIdProf12=Клиентите с %s или %s
    -ThirdPartySuppliers=Vendors
    -ThirdPartyType=Вид на контрагент
    +ThirdPartySuppliers=Доставчици
    +ThirdPartyType=Type of company
     Individual=Частно лице
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Фирма майка
     Subsidiaries=Филиали
    -ReportByMonth=Report by month
    -ReportByCustomers=Report by customer
    +ReportByMonth=Отчет по месец
    +ReportByCustomers=Отчет по клиент
     ReportByQuarter=Отчет по оценка
     CivilityCode=Граждански код
     RegisteredOffice=Седалище
     Lastname=Фамилия
     Firstname=Собствено име
    -PostOrFunction=Job position
    +PostOrFunction=Длъжност
     UserTitle=Звание
    -NatureOfThirdParty=Nature of Third party
    +NatureOfThirdParty=Същност контрагента
     Address=Адрес
     State=Област
    -StateShort=State
    +StateShort=Състояние
     Region=Регион
    -Region-State=Region - State
    +Region-State=Регион - Държава
     Country=Държава
     CountryCode=Код на държавата
     CountryId=ID на държава
    @@ -69,20 +69,20 @@ Chat=Чат
     PhonePro=Сл. телефон
     PhonePerso=Дом. телефон
     PhoneMobile=Моб. телефон
    -No_Email=Refuse mass e-mailings
    +No_Email=Отхвърляне на масови електронни писма
     Fax=Факс
     Zip=Пощенски код
     Town=Град
     Web=Уеб
     Poste= Позиция
    -DefaultLang=Език по подразбиране
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    -VATIsNotUsed=Sales tax is not used
    -CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
    -PaymentBankAccount=Payment bank account
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
    +VATIsNotUsed=Данъкът върху продажбите не се използва
    +CopyAddressFromSoc=Попълнете адрес на контрагента
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
    +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Контрагента е нито клиент, нито доставчик, отстъпки не са на разположение
    +PaymentBankAccount=Разплащателна банкова сметка
     OverAllProposals=Предложения
     OverAllOrders=Поръчки
     OverAllInvoices=Фактури
    @@ -99,9 +99,9 @@ LocalTax2ES=IRPF
     TypeLocaltax1ES=RE тип
     TypeLocaltax2ES=IRPF тип
     WrongCustomerCode=Невалиден код на клиент
    -WrongSupplierCode=Vendor code invalid
    +WrongSupplierCode=Кодът на доставчика е невалиден
     CustomerCodeModel=Образец на код на клиент
    -SupplierCodeModel=Vendor code model
    +SupplierCodeModel=Модел на код на доставчик
     Gencod=Бар код
     ##### Professional ID #####
     ProfId1Short=Проф. номер 1
    @@ -258,8 +258,8 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    -VATIntraShort=Tax ID
    +VATIntra=Sales Tax/VAT ID
    +VATIntraShort=ДДС номер
     VATIntraSyntaxIsValid=Синтаксиса е валиден
     VATReturn=VAT return
     ProspectCustomer=Потенциален / Клиент
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Този клиент има по подразбир
     CompanyHasNoRelativeDiscount=Този клиент няма относителна отстъпка по подразбиране
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Този клиент все още има кредити за <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Няма
    -Supplier=Доставчик
    +Supplier=Vendor
     AddContact=Създай контакт
     AddContactAddress=Създй контакт/адрес
     EditContact=Редактиране на контакт
    @@ -295,7 +295,7 @@ EditContactAddress=Редактиране на контакт/адрес
     Contact=Контакт
     ContactId=Contact id
     ContactsAddresses=Контакти/Адреси
    -FromContactName=Name:
    +FromContactName=Име:
     NoContactDefinedForThirdParty=Няма зададен контакт за тази контрагент
     NoContactDefined=Няма зададен контакт
     DefaultContact=Контакт/адрес по подразбиране
    @@ -303,50 +303,50 @@ AddThirdParty=Създаване контрагент
     DeleteACompany=Изтриване на фирма
     PersonalInformations=Лични данни
     AccountancyCode=Accounting account
    -CustomerCode=Код на клиент
    -SupplierCode=Vendor code
    -CustomerCodeShort=Код на клиента
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Потребителски код, уникален за всички клиенти
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Изисква се, ако контрагентът е клиент или потенциален
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Валидност контролирана от модул
    -ThisIsModuleRules=Това са правила за този модул
    +RequiredIfSupplier=Изисква се, ако контрагента е доставчик
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Потенциален за контакт
     CompanyDeleted=Фирма "%s" е изтрита от базата данни.
     ListOfContacts=Списък на контакти/адреси
     ListOfContactsAddresses=Списък на контакти/адреси
    -ListOfThirdParties=Списък на контрагенти
    -ShowCompany=Show third party
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Покажи контакт
     ContactsAllShort=Всички (без филтър)
     ContactType=Тип на контакт
     ContactForOrders=Контакт за поръчката
    -ContactForOrdersOrShipments=Order's or shipment's contact
    +ContactForOrdersOrShipments=Контакт за поръчки и пратки
     ContactForProposals=Контакт за предложение
     ContactForContracts=Контакт за договор
     ContactForInvoices=Контакт за фактура
     NoContactForAnyOrder=Този контакт не е контакт за поръчка
    -NoContactForAnyOrderOrShipments=This contact is not a contact for any order or shipment
    +NoContactForAnyOrderOrShipments=Този контакт не е контакт за поръчка или пратка
     NoContactForAnyProposal=Този контакт не е контакт за търговско предложение
     NoContactForAnyContract=Този контакт не е контакт за договор
     NoContactForAnyInvoice=Този контакт не е контакт за фактура
     NewContact=Нов контакт
    -NewContactAddress=Нов контакт/адрес
    +NewContactAddress=New Contact/Address
     MyContacts=Моите контакти
     Capital=Капитал
     CapitalOf=Столица на %s
     EditCompany=Редактиране на фирма
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Проверка
    -VATIntraCheckDesc=Връзката <b>%s</b> позволява да се попита Европейската служба за проверка на ДДС. Външен достъп до интернет от сървъра се изисква за тази услуга, за да работи.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Проверете Intracomunnautary VAT на сайта на Европейската комисия
    -VATIntraManualCheck=Можете също да проверите ръчно на европейския уеб сайт <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Проверката не е възможнао. Услугата не се предоставя от държавата-членка (%s).
    -NorProspectNorCustomer=Нито потенциален, нито клиент
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Персонал
     ProspectLevelShort=Потенциален
     ProspectLevel=Потенциален
    @@ -387,48 +387,48 @@ ExportCardToFormat=Износна карта формат
     ContactNotLinkedToCompany=Контактът не е свързан с никой контрагент
     DolibarrLogin=Dolibarr вход
     NoDolibarrAccess=Няма Dolibarr достъп
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Контакти и свойства
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Ценово ниво
     DeliveryAddress=Адрес за доставка
     AddAddress=Добавяне на адрес
    -SupplierCategory=Vendor category
    -JuridicalStatus200=Independent
    +SupplierCategory=Категория доставчик
    +JuridicalStatus200=Независим
     DeleteFile=Изтриване на файл
     ConfirmDeleteFile=Сигурен ли сте, че искате да изтриете този файл?
    -AllocateCommercial=Assigned to sales representative
    +AllocateCommercial=Назначен за търговски представител
     Organization=Организация
    -FiscalYearInformation=Информация за фискалната година
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Начален месец на фискалната година
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    -YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Списък на потенциални
    -ListCustomersShort=Списък на клиенти
    -ThirdPartiesArea=Контрагенти и контакти
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Общо уникални контрагенти
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
    +YouMustCreateContactFirst=За да можете да добавяте известия по имейл, първо трябва да определите контакти с валидни имейли за контрагента
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Отворено
     ActivityCeased=Затворен
    -ThirdPartyIsClosed=Third party is closed
    +ThirdPartyIsClosed=Контрагента е затворена
     ProductsIntoElements=Списък на продуктите/услугите в %s
     CurrentOutstandingBill=Текуща висяща сметка
     OutstandingBill=Макс. за висяща сметка
    -OutstandingBillReached=Max. for outstanding bill reached
    -OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +OutstandingBillReached=Макс. кредитен лимит
    +OrderMinAmount=Минимална сума за поръчка
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Кодът е безплатен. Този код може да бъде променен по всяко време.
     ManagingDirectors=Име на управител(и) (гл. изп. директор, директор, президент...)
     MergeOriginThirdparty=Дублиращ контрагент (контрагентът, който искате да изтриете)
     MergeThirdparties=Сливане на контрагенти
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    -ThirdpartiesMergeSuccess=Third parties have been merged
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
    +ThirdpartiesMergeSuccess=Контрагентите са обединени
     SaleRepresentativeLogin=Login of sales representative
    -SaleRepresentativeFirstname=First name of sales representative
    -SaleRepresentativeLastname=Last name of sales representative
    -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +SaleRepresentativeFirstname=Име на търговски представител
    +SaleRepresentativeLastname=Фамилно име на търговския представител
    +ErrorThirdpartiesMerge=При изтриването на контрагента възникна грешка. Моля, проверете дневника. Промените са възстановени.
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/bg_BG/errors.lang b/htdocs/langs/bg_BG/errors.lang
    index 7e5702e9aed..2c766d84098 100644
    --- a/htdocs/langs/bg_BG/errors.lang
    +++ b/htdocs/langs/bg_BG/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=&quot;%s&quot; Стойност има грешна дата
     ErrorWrongDate=Датата не е правилна!
     ErrorFailedToWriteInDir=Неуспех при запис в директорията %s
     ErrorFoundBadEmailInFile=Намерени неправилен синтаксис имейл за %s линии във файла (%s например съответствие с имейл = %s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Някои задължителни полета не са запълнени.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Неуспешно създаване на директория. Уверете се, че уеб сървър потребител има разрешение да пишат в Dolibarr документи. Ако параметър <b>safe_mode</b> е разрешен в тази PHP, проверете дали Dolibarr PHP файлове притежава за потребителя на уеб сървъра (или група).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Моля попълнете стойност за сп
     ErrorNoValueForCheckBoxType=Моля попълнете стойност за списък отметки
     ErrorNoValueForRadioType=Моля попълнете стойност за списък радио бутони
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Полеви <b>%s,</b> не трябва да съдържа специални знаци.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Поле <b>%s</b> не трябва да съдържа специални символи, нито главни букви и не може да съдържа само цифри.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Не е активиран модула Счетоводство
     ErrorExportDuplicateProfil=Това име на профил вече съществува за този експортен набор.
     ErrorLDAPSetupNotComplete=Dolibarr LDAP съвпадение не е пълна.
     ErrorLDAPMakeManualTest=. LDIF файл е генериран в директорията %s. Опитайте се да го заредите ръчно от командния ред, за да има повече информация за грешките,.
    -ErrorCantSaveADoneUserWithZeroPercentage=Не може да се запази действието с &quot;статут не е започнал&quot;, ако поле &quot;, направено от&quot; е пълен.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref използван за създаване вече съществува.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Не може да изтрие запис. Той вече е използван или включен в друг обект.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript не трябва да бъдат хората с увреждания да имат тази функция. За да включите / изключите Javascript, отидете в менюто Начало-> Setup-> Display.
     ErrorPasswordsMustMatch=Двете машинописни пароли трябва да съвпадат помежду си
    -ErrorContactEMail=Техническа грешка. Моля, свържете се с администратора след имейл <b>%s</b> EN предоставят на <b>%s</b> код на грешка в съобщението си, или още по-добре чрез добавяне на екран копие на тази страница.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Грешна стойност за номер на полето <b>%s (&quot;%s&quot;</b> стойността не съответства на регулярни изрази върховенството <b>%s)</b>
     ErrorFieldValueNotIn=Грешна стойност за поле номер <b>%s</b> (стойността '<b>%s</b>' не е налична стойност в поле <b>%s</b> на таблицата <b>%s</b>)
     ErrorFieldRefNotIn=Грешна стойност за номер на полето <b>%s (&quot;%s</b> стойност не е <b>%s</b> съществуващия код)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Антивирусна програма не е в
     ErrorSpecialCharNotAllowedForField=Специални знаци не са разрешени за полето &quot;%s&quot;
     ErrorNumRefModel=Позоваване съществува в база данни (%s) и не е съвместим с това правило за номериране. Премахване на запис или преименува препратка към активира този модул.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Грешка на маска
     ErrorBadMaskFailedToLocatePosOfSequence=Грешка, маска без поредния номер
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Грешка, неправилна стойност за
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Броячът трябва да има повече от 3 цифри
     ErrorSelectAtLeastOne=Грешка. Изберете поне един запис.
    -ErrorDeleteNotPossibleLineIsConsolidated=Ненужното не е възможно, тъй като записът е свързана с банкова transation, че е conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s се възлага на друга трета
     ErrorFailedToSendPassword=Не може да се изпрати парола
     ErrorFailedToLoadRSSFile=Не успее да получи RSS Feed. Опитайте се да добавите постоянно MAIN_SIMPLEXMLLOAD_DEBUG ако съобщения за грешки не предоставя достатъчно информация.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Потребителя <b>%s</b> не е намерен.
     ErrorLoginHasNoEmail=Този потребител няма имейл адрес. Процес прекратено.
     ErrorBadValueForCode=Неправилна стойност за код за сигурност. Опитайте отново с нова стойност ...
     ErrorBothFieldCantBeNegative=Полетата %s и %s не може да бъде едновременно отрицателен
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Количество за ред в клиентска фактура не може да бъде отрицателно
     ErrorWebServerUserHasNotPermission=Потребителски акаунт <b>%s</b> използват за извършване на уеб сървър не разполага с разрешение за това
     ErrorNoActivatedBarcode=Не е тип баркод активира
    @@ -138,7 +141,7 @@ ErrorBadFormat=Неправилен формат!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Грешка, има някои доставки свързани към тази пратка. Изтриването е отказано.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Не може да се изтрие плащане споделено от поне една фактура със статус Платена
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Не може да се зададе стойност на константа '%s'
     ErrorPriceExpression2=Не може да се предефинира вградена функция '%s'
     ErrorPriceExpression3=Недефинирана променлива '%s' в дефиницията на функцията
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Неочакван '%s'
     ErrorPriceExpression6=Грешен брой на аргументите (%s са подадени, %s се очакват)
     ErrorPriceExpression8=Неочакван оператор '%s'
     ErrorPriceExpression9=Неочаквана грешка се появи
    -ErrorPriceExpression10=Липсва операнд за оператор '%s'
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Очаква се '%s'
     ErrorPriceExpression14=Деление на нула
     ErrorPriceExpression17=Недефинирана променлива '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP клиента се повреди с греш
     ErrorGlobalVariableUpdater5=Няма избрана глобална променлива
     ErrorFieldMustBeANumeric=Поле <b>%s</b> трябва да бъде числена стойност
     ErrorMandatoryParametersNotProvided=Задължителен параметър(и) не е даден
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=Парола е зададено за този член. Обаче, няма създаден потребителски акаунт. Следователно тази парола е записана, но не може да бъде използвана за влизане в Dolibarr. Може да бъде използвана от външен модул/интерфейс, но ако нямате нужда да определите нито потребителско име нито парола за член, можете да деактивирате тази опция. Ако имате нужда да управлявате потребителско име, но нямата нужда от парола, можете да оставите това поле празно, за да избегнете това предупреждение. Забележка: Имейл също може да бъде използван като потребителско име ако члена с свързан към потребител.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Отметка с настоящия дял, или
     WarningPassIsEmpty=Внимание, парола за базата данни е празен. Това е дупка в сигурността. Вие трябва да добавите парола за достъп до вашата база данни и промените conf.php файл, за да се отрази това.
     WarningConfFileMustBeReadOnly=Внимание, конфигурационния файл <b>(htdocs / CONF / conf.php)</b> може да бъде заменена от уеб сървъра. Това е сериозна дупка в сигурността. Промяна на разрешения на файл, за да бъде в режим само за четене на потребителя на операционната система, използвани от уеб сървър. Ако използвате Windows и FAT формат за вашия диск, вие трябва да знаете, че тази файлова система не позволява да добавите разрешения на файл, така че не може да бъде напълно безопасен.
     WarningsOnXLines=Предупреждения върху <b>%s</b> линии източници
    -WarningNoDocumentModelActivated=Няма модел, за генерирането на документацията, е бил активиран. Модел ще бъде избра по подразбиране, докато не се провери настройката на модула.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Внимание, след Настройката е приключена, трябва да изключите инсталиране / мигрират инструменти чрез добавяне на файл <b>install.lock</b> в директорията <b>%s.</b> Липсва този файл е дупка в сигурността.
    -WarningUntilDirRemoved=Всички предупреждения относно защитата (видими само от администратори) ще остане активен, докато уязвимост е (или се добавя, че постоянното MAIN_REMOVE_INSTALL_WARNING в Setup-> настройка).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Внимание, затваряне се прави, дори ако сумата се различава между източника и целеви елементи. Активирайте тази функция с повишено внимание.
     WarningUsingThisBoxSlowDown=Предупреждение, използвайки това поле сериозно забавя всички страници, които го показват.
     WarningClickToDialUserSetupNotComplete=Настройките на информацията за ClickToDial за вашия потребител са непълни (вижте таб ClickToDial във вашата потребителска карта).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Прекалено много инфор
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/bg_BG/interventions.lang b/htdocs/langs/bg_BG/interventions.lang
    index 23e38911ec7..4d30acac5de 100644
    --- a/htdocs/langs/bg_BG/interventions.lang
    +++ b/htdocs/langs/bg_BG/interventions.lang
    @@ -4,9 +4,10 @@ Interventions=Интервенциите
     InterventionCard=Интервенция карта
     NewIntervention=Нов намеса
     AddIntervention=Създаване на намеса
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Списък на интервенциите
     ActionsOnFicheInter=Действия на интервенцията
    -LastInterventions=Latest %s interventions
    +LastInterventions=Последни %s намеси
     AllInterventions=Всички интервенции
     CreateDraftIntervention=Създаване на проект
     InterventionContact=Интервенция контакт
    @@ -14,12 +15,12 @@ DeleteIntervention=Изтриване на интервенция
     ValidateIntervention=Проверка на интервенция
     ModifyIntervention=Промяна на интервенция
     DeleteInterventionLine=Изтрий ред намеса
    -CloneIntervention=Clone intervention
    -ConfirmDeleteIntervention=Are you sure you want to delete this intervention?
    +CloneIntervention=Клонирай интервенцията
    +ConfirmDeleteIntervention=Наистина ли искате да изтриете тази интервенция?
     ConfirmValidateIntervention=Are you sure you want to validate this intervention under name <b>%s</b>?
    -ConfirmModifyIntervention=Are you sure you want to modify this intervention?
    -ConfirmDeleteInterventionLine=Are you sure you want to delete this intervention line?
    -ConfirmCloneIntervention=Are you sure you want to clone this intervention?
    +ConfirmModifyIntervention=Сигурни ли сте че искате да промените тази интервенция
    +ConfirmDeleteInterventionLine=Сигурни ли сте че искате да изтриете този ред от интервенцията
    +ConfirmCloneIntervention=Сигурни ли сте че искате да клонирате тази интервенция
     NameAndSignatureOfInternalContact=Име и подпис на намеса:
     NameAndSignatureOfExternalContact=Име и подпис на клиента:
     DocumentModelStandard=Стандартен документ модел за интервенции
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/bg_BG/main.lang b/htdocs/langs/bg_BG/main.lang
    index e5fc395ca51..91e808cabfe 100644
    --- a/htdocs/langs/bg_BG/main.lang
    +++ b/htdocs/langs/bg_BG/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Неуспешно изпращане на имейл (п
     ErrorFileNotUploaded=Файлът не беше качен. Уверете се, че размерът му не надвишава максимално допустимия, че е на разположение свободно пространство на диска и че няма файл със същото име в тази директория.
     ErrorInternalErrorDetected=Открита е грешка
     ErrorWrongHostParameter=Неправилен параметър на сървъра
    -ErrorYourCountryIsNotDefined=Вашата държава не е зададена. Отидете на Начало-Настройки-Промяна, за да я зададете.
    -ErrorRecordIsUsedByChild=Не може да изтриете този запис. Той се използва в други записи.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Грешна стойност
     ErrorWrongValueForParameterX=Грешна стойност за параметър %s
     ErrorNoRequestInError=Няма грешна заявка
    -ErrorServiceUnavailableTryLater=Услугата не е налична в момента. Опитайте отново по-късно.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Дублиране в поле с уникални стойности
    -ErrorSomeErrorWereFoundRollbackIsDone=Открити са някои грешки. Промените са отменени.
    -ErrorConfigParameterNotDefined=Параметърът <b>%s</b> не е дефиниран в конфигурационния файл на Dolibarr <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Не е открит потребител <b>%s</b> в базата данни.
     ErrorNoVATRateDefinedForSellerCountry=Грешка, за държавата '%s' няма дефинирани ДДС ставки.
     ErrorNoSocialContributionForSellerCountry=Грешка, за държава '%s' няма дефинирани ставки за социални осигуровки.
     ErrorFailedToSaveFile=Грешка, неуспешно записване на файл.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Не сте упълномощен да правите това.
     SetDate=Настройка на дата
     SelectDate=Изберете дата
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Файлът е качен успешно
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Файлът е избран за прикачване, но все още не е качен. Кликнете върху &quot;Прикачи файл&quot;.
    -NbOfEntries=Брой записи
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Прочетете помощта
     RecordSaved=Записът е съхранен
    @@ -142,6 +142,7 @@ Closed=Затворен
     Closed2=Затворен
     NotClosed=Not closed
     Enabled=Включено
    +Enable=Активирайте
     Deprecated=Остаряло
     Disable=Изключи
     Disabled=Изключено
    @@ -153,7 +154,7 @@ Update=Актуализирай
     Close=Затвари
     CloseBox=Remove widget from your dashboard
     Confirm=Потвърди
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Изтриване
     Remove=Премахване
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Копиране
     Paste=Поставяне
     Default=По подразбиране
     DefaultValue=Стойност по подразбиране
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Цена
     PriceCurrency=Price (currency)
     UnitPrice=Единична цена
    @@ -335,7 +336,7 @@ UnitPriceHT=Единична цена (нето)
     UnitPriceHTCurrency=Unit price (net) (currency)
     UnitPriceTTC=Единична цена
     PriceU=Ед.ц.
    -PriceUHT=Ед.ц. (нето)
    +PriceUHT=Ед. ц. (нето)
     PriceUHTCurrency=U.P (currency)
     PriceUTTC=Ед.ц. (с данък)
     Amount=Сума
    @@ -347,7 +348,7 @@ AmountTTCShort=Сума (с данък)
     AmountHT=Сума (без данък)
     AmountTTC=Сума (с данък)
     AmountVAT=Сума на данък
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,9 +429,9 @@ ActionNotApplicable=Не се прилага
     ActionRunningNotStarted=За започване
     ActionRunningShort=In progress
     ActionDoneShort=Завършено
    -ActionUncomplete=Незавършено
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
    -CompanyFoundation=Company/Organization
    +CompanyFoundation=Компания / Организация
     Accountant=Accountant
     ContactsForCompany=Контакти за този контрагент
     ContactsAddressesForCompany=Контакти/адреси за този контрагент
    @@ -453,8 +454,8 @@ Generate=Генерирай
     Duration=Продължителност
     TotalDuration=Обща продължителност
     Summary=Резюме
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Налично
     NotYetAvailable=Все още не е налично
    @@ -468,7 +469,7 @@ and=и
     or=или
     Other=Друг
     Others=Други
    -OtherInformations=Друга информация
    +OtherInformations=Other information
     Quantity=Количество
     Qty=К-во
     ChangedBy=Променено от
    @@ -506,7 +507,7 @@ None=Няма
     NoneF=Няма
     NoneOrSeveral=None or several
     Late=Закъснели
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Снимка
     Photos=Снимки
    @@ -530,18 +531,6 @@ September=Септември
     October=Октомври
     November=Ноември
     December=Декември
    -JanuaryMin=Яну
    -FebruaryMin=Фев
    -MarchMin=Мар
    -AprilMin=Апр
    -MayMin=Май
    -JuneMin=Юни
    -JulyMin=Юли
    -AugustMin=Авг
    -SeptemberMin=Сеп
    -OctoberMin=Окт
    -NovemberMin=Ное
    -DecemberMin=Дек
     Month01=Януари
     Month02=Февруари
     Month03=Март
    @@ -646,6 +635,8 @@ SendMail=Изпращане на имейл
     EMail=Имейл
     NoEMail=Няма имейл
     Email=Имейл
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Няма мобилен телефон
     Owner=Собственик
     FollowingConstantsWillBeSubstituted=Следните константи ще бъдат заменени със съответната стойност.
    @@ -677,7 +668,7 @@ NeverReceived=Никога не получено
     Canceled=Отменен
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Цвят
     Documents=Свързани файлове
     Documents2=Документи
    @@ -716,15 +707,15 @@ Merge=Обединяване
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Показване на страница за печат само с основното съдържание
     MenuManager=Меню менажер
    -WarningYouAreInMaintenanceMode=Внимание, вие сте в режим на поддръжка, така че само вход <b>%s</b> се разрешава за използване приложение в момента.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Системна грешка
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Кредитна карта
     ValidatePayment=Валидирай плащане
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Полетата с <b>%s</b> са задължителни
    -FieldsWithIsForPublic=Полетата с <b>%s</b> се показват на публичен списък с членовете. Ако не искате това, отмаркирайте поле "публичен".
    -AccordingToGeoIPDatabase=(Според GeoIP конверсията)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Ред
     NotSupported=Не се поддържа
     RequiredField=Задължително поле
    @@ -732,6 +723,8 @@ Result=Резултат
     ToTest=Тест
     ValidateBefore=Картата трябва да бъде потвърдена, преди да използвате тази функция
     Visibility=Видимост
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Частен
     Hidden=Скрит
     Resources=Ресурси
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Създай чернова
     SetToDraft=Назад към черновата
     ClickToEdit=Кликнете, за да редактирате
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=По ден
     BySalesRepresentative=По търговски представител
     LinkedToSpecificUsers=Свързано с контакт на потребителя
     NoResults=Няма резултати
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=Системни инструменти
     ModulesSystemTools=Модулни инструменти
     Test=Тест
     Element=Елемент
     NoPhotoYet=Все още няма налични снимки
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Удържаем
     from=от
     toward=към
    @@ -802,7 +797,7 @@ PrintFile=Печат на файл %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Покажи намеса
     ShowContract=Покажи договор
    -GoIntoSetupToChangeLogo=Отидете на Начало - Настройки - Фирма/Организация, за да промените логото или отидете на Начало - Настройки- Екран, за да го скриете.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Забрани
     Denied=Забранено
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Искрено
     DeleteLine=Изтриване на линия
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Класифицирай платени
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Календар
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Събития
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Проект
     Projects=Проекти
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Права
     LineNb=Line no.
     IncotermLabel=Инкотермс
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Понеделник
     Tuesday=Вторник
    @@ -918,24 +922,24 @@ SearchIntoProductsOrServices=Продукти или услуги
     SearchIntoProjects=Проекти
     SearchIntoTasks=Задачи
     SearchIntoCustomerInvoices=Клиентски фактури
    -SearchIntoSupplierInvoices=Vendor invoices
    +SearchIntoSupplierInvoices=Фактури на доставчик
     SearchIntoCustomerOrders=Клиентски поръчки
    -SearchIntoSupplierOrders=Purchase orders
    +SearchIntoSupplierOrders=Поръчка
     SearchIntoCustomerProposals=Клиентски предложения
    -SearchIntoSupplierProposals=Vendor proposals
    +SearchIntoSupplierProposals=Предложения на доставчик
     SearchIntoInterventions=Намеси
     SearchIntoContracts=Договори
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Опис разходи
    -SearchIntoLeaves=Отпуски
    +SearchIntoLeaves=Leave
     CommentLink=Коментари
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Всички
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Платен от
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Възложено на
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/bg_BG/other.lang b/htdocs/langs/bg_BG/other.lang
    index de2d12ca460..f663ddd9748 100644
    --- a/htdocs/langs/bg_BG/other.lang
    +++ b/htdocs/langs/bg_BG/other.lang
    @@ -1,21 +1,21 @@
     # Dolibarr language file - Source file is en_US - other
     SecurityCode=Код за сигурност
    -NumberingShort=N°
    +NumberingShort=№
     Tools=Инструменти
     TMenuTools=Инструменти
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Рожден ден
    -BirthdayDate=Birthday date
    +BirthdayDate=Рожден ден дата
     DateToBirth=Дата на раждане
     BirthdayAlertOn=Известяването за рожден ден е активно
     BirthdayAlertOff=Известяването за рожден ден е неактивно
    -TransKey=Translation of the key TransKey
    -MonthOfInvoice=Month (number 1-12) of invoice date
    -TextMonthOfInvoice=Month (text) of invoice date
    -PreviousMonthOfInvoice=Previous month (number 1-12) of invoice date
    +TransKey=Превод на ключа TransKey
    +MonthOfInvoice=Месец (номер 1-12) от датата на фактурата
    +TextMonthOfInvoice=Месец (текст) на датата на фактурата
    +PreviousMonthOfInvoice=Предишен месец (номер 1-12) от датата на фактурата
     TextPreviousMonthOfInvoice=Previous month (text) of invoice date
     NextMonthOfInvoice=Following month (number 1-12) of invoice date
    -TextNextMonthOfInvoice=Following month (text) of invoice date
    +TextNextMonthOfInvoice=Следващия месец (текст) на датата на фактурата
     ZipFileGeneratedInto=Zip file generated into <b>%s</b>.
     DocFileGeneratedInto=Doc file generated into <b>%s</b>.
     JumpToLogin=Disconnected. Go to login page...
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Съобщение на валидирана страница плащане връщане
     MessageKO=Съобщение за анулиране страница плащане връщане
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Интервенцията е валидирана
    -Notify_FICHINTER_SENTBYMAIL=Интервенцията е изпратена по пощата
     Notify_ORDER_VALIDATE=Поръчка от клиент е валидирана
     Notify_ORDER_SENTBYMAIL=Поръчка от клиент изпратена по пощата
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Доставчик реда, изпратени по пощата
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Поръчка към доставчик е за
     Notify_ORDER_SUPPLIER_APPROVE=Поръчка към доставчик е утвърдена
     Notify_ORDER_SUPPLIER_REFUSE=Поръчка към доставчик е отказана
     Notify_PROPAL_VALIDATE=Предложение към клиент е валидирано
    -Notify_PROPAL_CLOSE_SIGNED=Предложение към клиент затворено подписано
    -Notify_PROPAL_CLOSE_REFUSED=Предложение към клиент затворено отхвърлено
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Търговско предложение, изпратено по пощата
     Notify_WITHDRAW_TRANSMIT=Оттегляне на трансмисия
     Notify_WITHDRAW_CREDIT=Оттегляне на кредит
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Клиентът е сздаден
     Notify_COMPANY_SENTBYMAIL=Пощатата е изпратена от клиентска карта
     Notify_BILL_VALIDATE=Продажната фактура е валидирана
     Notify_BILL_UNVALIDATE=Продажната фактура е не валидирана
    -Notify_BILL_PAYED=Фактурата на клиента е платена
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Доставната фактура е платена
     Notify_BILL_SENTBYMAIL=Доставната фактура е изпратена по пощата
     Notify_BILL_SUPPLIER_VALIDATE=Доставна фактура валидирана
    -Notify_BILL_SUPPLIER_PAYED=Доставчик фактура плаща
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Доставчик фактура, изпратена по пощата
     Notify_BILL_SUPPLIER_CANCELED=Доставната фактура е отказана
     Notify_CONTRACT_VALIDATE=Договор валидирани
     Notify_FICHEINTER_VALIDATE=Интервенция валидирани
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Интервенцията е изпратена по пощата
     Notify_SHIPPING_VALIDATE=Доставка валидирани
     Notify_SHIPPING_SENTBYMAIL=Доставка изпращат по пощата
     Notify_MEMBER_VALIDATE=Члена е приет
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Създаване на проект
     Notify_TASK_CREATE=Задачата е създадена
     Notify_TASK_MODIFY=Задачата е променена
     Notify_TASK_DELETE=Задачата е изтрита
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Вижте настройка на модул %s
     NbOfAttachedFiles=Брой на прикачените файлове/документи
     TotalSizeOfAttachedFiles=Общ размер на прикачените файлове/документи
     MaxSize=Максимален размер
     AttachANewFile=Прикачи нов файл/документ
     LinkedObject=Свързан обект
    -NbOfActiveNotifications=Брой уведомления (брой имейли на получатели)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Проф. Id %s</b> е информация, в зависимост от трета държава, която е страна. <br> Например, за страната <b>%s,</b> това е код <b>%s.</b>
     DolibarrDemo=Dolibarr ERP/CRM демо
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Намесата %s е потвърдена.
     EMailTextInvoiceValidated=Фактура %s е потвърдена.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Предложение %s е потвърдено.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Поръчка %s е потвърдена.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Поръчка %s е одобрена от %s.
     EMailTextOrderRefused=Поръчка %s е отказана.
     EMailTextOrderRefusedBy=Поръчка %s е отказана от %s.
     EMailTextExpeditionValidated=Доставка %s е валидирана.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Импортен набор от данни
     DolibarrNotification=Автоматично уведомяване
     ResizeDesc=Въведете нова ширина <b>ИЛИ</b> нова височина. Съотношението ще се запази по време преоразмеряването...
    @@ -204,7 +212,7 @@ NewLength=Нова ширина
     NewHeight=Нова височина
     NewSizeAfterCropping=Нов размер след изрязване
     DefineNewAreaToPick=Определете нова област на изображението, за да изберете (ляв клик върху изображението, след което плъзнете, докато стигнете до противоположния ъгъл)
    -CurrentInformationOnImage=Този инструмент е създаден, за да ви помогне да изрежете или преоразмерите изображение. Това е информация по текущото редактирано изображение
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Редактор на изображения
     YouReceiveMailBecauseOfNotification=Получавате това съобщение, защото вашият имейл е добавен към списъка с цел информиране за специални събития в %s софтуер на %s.
     YouReceiveMailBecauseOfNotification2=Това събитие е следното:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Секция за експорт
    diff --git a/htdocs/langs/bg_BG/projects.lang b/htdocs/langs/bg_BG/projects.lang
    index 01ddfb33433..f225c2c499d 100644
    --- a/htdocs/langs/bg_BG/projects.lang
    +++ b/htdocs/langs/bg_BG/projects.lang
    @@ -3,12 +3,12 @@ RefProject=Реф. проект
     ProjectRef=Проект реф.
     ProjectId=Id на проект
     ProjectLabel=Етикет на проект
    -ProjectsArea=Projects Area
    +ProjectsArea=Проект зона
     ProjectStatus=Статус на проект
     SharedProject=Всички
     PrivateProject=ПРОЕКТА Контакти
     ProjectsImContactFor=Projects I'm explicitely a contact of
    -AllAllowedProjects=All project I can read (mine + public)
    +AllAllowedProjects=Всички проект, който мога да видя(мой и публичен)
     AllProjects=Всички проекти
     MyProjectsDesc=This view is limited to projects you are a contact for
     ProjectsPublicDesc=Този възглед представя всички проекти, по които могат да се четат.
    @@ -18,7 +18,7 @@ ProjectsDesc=Този възглед представя всички проек
     TasksOnProjectsDesc=This view presents all tasks on all projects (your user permissions grant you permission to view everything).
     MyTasksDesc=This view is limited to projects or tasks you are a contact for
     OnlyOpenedProject=Само отворени проекти са видими (планирани проекти или със затворен статус не са видими).
    -ClosedProjectsAreHidden=Closed projects are not visible.
    +ClosedProjectsAreHidden=Затворените проекти не са видими
     TasksPublicDesc=Този възглед представя всички проекти и задачи, които може да чете.
     TasksDesc=Този възглед представя всички проекти и задачи (потребителски разрешения ви даде разрешение да видите всичко).
     AllTaskVisibleButEditIfYouAreAssigned=All tasks for qualified projects are visible, but you can enter time only for task assigned to selected user. Assign task if you need to enter time on it.
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Покажи проект
     ShowTask=Покажи задача
     SetProject=Задайте проект
     NoProject=Нито един проект няма определени или собственост
    -NbOfProjects=Nb на проекти
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Времето, прекарано
     TimeSpentByYou=Време отделено от вас
     TimeSpentByUser=Време отделено от потребител
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Списък на търговските предложения, свързани с проекта
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Списък на договори, свързани с проекта
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Списък на интервенциите, свързани с проекта
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=Списък на даренията асоциирани със този проект
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Списък на събития, свързани с проекта
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Списък на отделеното време върху задачи на проект
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Дейност върху проект днес
    @@ -128,7 +129,7 @@ LinkedToAnotherCompany=Свързано с друг контрагент
     TaskIsNotAssignedToUser=Task not assigned to user. Use button '<strong>%s</strong>' to assign task now.
     ErrorTimeSpentIsEmpty=Изразходваното време е празна
     ThisWillAlsoRemoveTasks=Това действие ще изтрие всички задачи на проекта <b>(%s</b> задачи в момента) и всички входове на времето, прекарано.
    -IfNeedToUseOhterObjectKeepEmpty=Ако някои обекти (фактура, поръчка, ...), принадлежащи към друга трета страна, трябва да бъдат свързани с проекта за създаване, запазете тази празна да има проект е мулти трети страни.
    +IfNeedToUseOhterObjectKeepEmpty=Ако някои обекти (фактура, поръчка, ...), принадлежащи на друг контрагент, трябва да бъдат свързани с проекта, за да се създаде, запази това празно, за да бъде проектът многостранни.
     CloneProject=Clone проект
     CloneTasks=Клонингите задачи
     CloneContacts=Клонингите контакти
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Задача %s е създадена
     TaskModifiedInDolibarr=Задача %s е променена
     TaskDeletedInDolibarr=Задача %s е изтрита
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Сътрудник
     SelectElement=Избиране на елемент
     AddElement=Линк към елемент
     # Documents models
    -DocumentModelBeluga=Общ преглед на шаблон на проект за свързани обекти
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Планирана работна натовареност
     PlannedWorkloadShort=Работна натовареност
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Проекти с този потребител к
     TasksWithThisUserAsContact=Задачи възложени на този потребител
     ResourceNotAssignedToProject=Не е зададено към проект
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Възлагане на задача към мен
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Възлагане
     ProjectOverview=Общ преглед
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Бр. на създадените проекти по месец
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Статистики за проекти/инициативи
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Задачата е възложена. Въвеждането на време на тази задача би трябвало да е възможно
     IdTaskTime=Ид. време на задача
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Предложение
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/bn_BD/admin.lang b/htdocs/langs/bn_BD/admin.lang
    index d7042e784dc..08508d4e6e8 100644
    --- a/htdocs/langs/bn_BD/admin.lang
    +++ b/htdocs/langs/bn_BD/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=Unknown
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/bn_BD/companies.lang b/htdocs/langs/bn_BD/companies.lang
    index 584efd135f1..a05659f8eff 100644
    --- a/htdocs/langs/bn_BD/companies.lang
    +++ b/htdocs/langs/bn_BD/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Company
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Opened
     ActivityCeased=Closed
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/bn_BD/errors.lang b/htdocs/langs/bn_BD/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/bn_BD/errors.lang
    +++ b/htdocs/langs/bn_BD/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/bn_BD/interventions.lang b/htdocs/langs/bn_BD/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/bn_BD/interventions.lang
    +++ b/htdocs/langs/bn_BD/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/bn_BD/main.lang b/htdocs/langs/bn_BD/main.lang
    index 620790c252f..57493b1c00f 100644
    --- a/htdocs/langs/bn_BD/main.lang
    +++ b/htdocs/langs/bn_BD/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Other
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/bn_BD/other.lang b/htdocs/langs/bn_BD/other.lang
    index 8ef8cc30090..e8cd9b78d2f 100644
    --- a/htdocs/langs/bn_BD/other.lang
    +++ b/htdocs/langs/bn_BD/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/bn_BD/projects.lang b/htdocs/langs/bn_BD/projects.lang
    index e04f28689a1..aadd8b446df 100644
    --- a/htdocs/langs/bn_BD/projects.lang
    +++ b/htdocs/langs/bn_BD/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/bs_BA/admin.lang b/htdocs/langs/bs_BA/admin.lang
    index 744c60fdf7d..a0881a60946 100644
    --- a/htdocs/langs/bs_BA/admin.lang
    +++ b/htdocs/langs/bs_BA/admin.lang
    @@ -1,7 +1,7 @@
     # Dolibarr language file - Source file is en_US - admin
     Foundation=Fondacija
     Version=Verzija
    -Publisher=Publisher
    +Publisher=Izdavač
     VersionProgram=Verzija programa
     VersionLastInstall=Prvobitno instalirana verzija
     VersionLastUpgrade=Verzija zadnje nadogradnje
    @@ -10,9 +10,9 @@ VersionDevelopment=Razvoj
     VersionUnknown=Nepoznato
     VersionRecommanded=Preporučeno
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Rukovatelj snimanje sesija
     SessionSavePath=Lokalizacija snimanja sesije
     PurgeSessions=Očistiti sesije
     ConfirmPurgeSessions=Da li zaista želite očistiti sve sesije? Ovo će uzrokovati odjavu svih korisnika (osim Vas).
    -NoSessionListWithThisHandler=Rukovatelj snimanja sesija konfigurisan u PHP-u ne dopušta da se prikažu sve pokrenute sesije.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Zaključaj nove konekcije
    -ConfirmLockNewSessions=Da li ste sigurni da želite onemogućiti bilo koju novu Dolibarr konekciju sebi. Nakon toga samo će korisnik <b>%s</b> moći se prijaviti.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Ukloni zaključavanje veze
     YourSession=Vaša sesija
    -Sessions=Korisničke sesije
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Vanjski korisnik
     InternalUsers=Interni korisnici
     ExternalUsers=Vanjski korisnici
     GUISetup=Prikaz
    -SetupArea=Podrčje za postavke
    +SetupArea=Postavke
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Forma za testiranje uploada fajlova (prema postavkama)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kod ne može sadržavati vrijednost 0
     DisableJavascript=Onemogući JavaScript i Ajax funkcije (preporučeno za slijepe osobe ili tekstualne preglednike)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Broj znakova za početak pretrage: %s
     NotAvailableWhenAjaxDisabled=Nije moguće kada je Ajax isključen
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Pretpregled nije moguć
     ThemeCurrentlyActive=Trenutno aktivna tema
     CurrentTimeZone=Vremenska zona PHP (servera)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Razmak
     Table=Tabela
     Fields=Polja
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Aktivan
     SetupShort=Postavke
     OtherOptions=Druge opcije
    -OtherSetup=Ostale postavke
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Odvajanje decimala
     CurrentValueSeparatorThousand=Odvajanje hiljada
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parametar %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Automatsko otkrivanje (jezik preglednika)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Novo
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Postavke modula
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Primjeri sa trenutnim postavkama
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Šifra
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Upozorenje, ova vrijednost se može prebrisati posebnim postavkama korisnika (svaki korisnik može postaviti svoj clicktodial URL)
     ExternalModule=Eksterni moduli - Instalirani u direktorij %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Korisnici i grupe
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Treće stranke
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Poslovno
     Module2Desc=Commercial management
     Module10Name=Računovodstvo
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Prijedlozi
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Usluge
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Pošiljke
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Članovi
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Upravljanje bookmark-ima
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donacije
     Module700Desc=Donation management
     Module770Name=Izvještaj o troškovima
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=Kadrovska služba
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Prodajna mjesta
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Prodajna mjesta
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resursi
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Čitanje trećih stranaka vezanih za korisnika
     Permission122=Kreiranje/mijenjati trećih strana vezanih sa korisnika
     Permission125=Brisanje trećih stranaka vezanih za korisnika
     Permission126=Izvoz trećih stranaka
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=Država/Provincija
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Uslovi plaćanja
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Šabloni emaila
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Jedinice
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Postavke snimljene
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Stopa
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Kompanija/organizacija
    +CompanyIds=Company/Organization identities
     CompanyName=Naziv
     CompanyAddress=Adresa
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Upozorenja
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Dopunski atributi
     ExtraFieldsLines=Dopunski atributi (tekstovi)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Dopunski atributi (treća stranka)
    -ExtraFieldsContacts=Dopunski atributi (kontakt/adresa)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Dopunski atributi (član)
     ExtraFieldsMemberType=Dopunske atributa (tip član)
     ExtraFieldsCustomerInvoices=Dopunski atributi (fakture)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Direktorij
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=Možete koristiti driver %s koji je trenutno najbolji.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=Imate samo %s proizvoda/usluga u bazu podataka. To ne zahtijeva posebne optimizacije.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Optimizacija pretraživanja
    -YouHaveXProductUseSearchOptim=Imate %s proizvod u bazu podataka. Trebalo bi dodati konstantu PRODUCT_DONOTSEARCH_ANYWHERE na 1 u Početna-Postavke-Ostalo, ograničavate pretragu na početak  što je moguće za baze podataka za korištenje indeksa i trebali bi dobiti hitnu reakciju.
    -BrowserIsOK=Vi koristite web browser %s. Ovaj browser je ok za sigurnost i performanse.
    -BrowserIsKO=Vi koristite web browser %s. Poznato je da je ovaj broswer loš izbor za sigurnost, performanse i pouzdanost. Mi preporučujemo da koristite Firefox, Chrome, Opera i Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache je učitan.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Primjer: +2 (popuniti samo ako imate problema sa ofsetima vremenskih zona)
     GetBarCode=Preuzeti barkod
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Knjižna obavijest
     CreditNotes=Knjižne obavijesti
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Globalni parametri
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Naziv
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Izvještaj o perfomansama postavki/optimizacije
    -YouMayFindPerfAdviceHere=Na ovoj stranici ćete pronaći neke provjere ili savjete vezane za performanse.
    -NotInstalled=Nije instalirano, tako da vaš server nije usporen ovim.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Aplikativni cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=OPCode cache nije pronađen. Možda koristite drugu OPCode cache pored XCache ili eAccelerator (dobro), možda nemate OPCode cache (jako loše).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache za statičke resurse (css, img, javascript)
     FilesOfTypeCached=Fajlovi tipa %s su keširani na HTTP serveru
     FilesOfTypeNotCached=Fajlovi tipa %s nisu keširani na HTTP serveru
     FilesOfTypeCompressed=Fajlovi tipa %s su kompresovani od strane HTTP servera
     FilesOfTypeNotCompressed=Fajlovi tipa %s nisu kompresovani od strane HTTP servera
     CacheByServer=Keširanje na serveru
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Keširanje u browser-u
     CompressionOfResources=Kompresija HTTP odgovora
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Defaultni tip barkoda koji se koristi za treće stranke
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Za
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Na isporuci
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Prodajna mjesta
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Modul za numerisanje zadataka
     TaskModelModule=Model dokumenta za izvještaj o zadacima
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1735,8 +1749,8 @@ MailToSendInvoice=Fakture kupaca
     MailToSendShipment=Pošiljke
     MailToSendIntervention=Intervencije
     MailToSendSupplierRequestForQuotation=Quotation request
    -MailToSendSupplierOrder=Purchase orders
    -MailToSendSupplierInvoice=Vendor invoices
    +MailToSendSupplierOrder=Narudžbe za nabavku
    +MailToSendSupplierInvoice=Fakture prodavača
     MailToSendContract=Ugovori
     MailToThirdparty=Subjekti
     MailToMember=Članovi
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/bs_BA/companies.lang b/htdocs/langs/bs_BA/companies.lang
    index a0420a9aace..b042a812045 100644
    --- a/htdocs/langs/bs_BA/companies.lang
    +++ b/htdocs/langs/bs_BA/companies.lang
    @@ -5,14 +5,14 @@ SelectThirdParty=Odaberite subjekt
     ConfirmDeleteCompany=Da li ste sigurni da želite obrisati ovu kompaniju i sve podatke vezane za istu?
     DeleteContact=Obrisati kontakt/uslugu
     ConfirmDeleteContact=Da li ste sigurni da želite obrisati ovaj kontakt i sve podatke vezane za istog?
    -MenuNewThirdParty=Novi subjekt
    -MenuNewCustomer=Novi kupac
    -MenuNewProspect=Novi mogući klijent
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Novo fizičko lice
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewCompany=Nova kompanija (mogući klijent, kupac, prodavač)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
    +CreateDolibarrThirdPartySupplier=Napravi subjekt (prodavač)
     CreateThirdPartyOnly=Napravi novi subjekt
     CreateThirdPartyAndContact=Napravi subjekt + podređeni kontakt
     ProspectionArea=Područje za moguće kupce
    @@ -25,22 +25,22 @@ ThirdPartyContact=Kontakt/Adresa subjekta
     Company=Kompanija
     CompanyName=Ime kompanije
     AliasNames=Nadimak (komercijalni, trgovačkim, ...)
    -AliasNameShort=Nadimak
    +AliasNameShort=Alias Name
     Companies=Kompanije
    -CountryIsInEEC=Zemlja je unutar Evropske ekonomske zajednice
    -ThirdPartyName=Ime subjekta
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Email treće strane
    -ThirdParty=Subjekt
    -ThirdParties=Subjekti
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Mogući klijenti
     ThirdPartyProspectsStats=Mogući klijenti
     ThirdPartyCustomers=Kupci
     ThirdPartyCustomersStats=Kupci
     ThirdPartyCustomersWithIdProf12=Kupci sa %s ili %s
    -ThirdPartySuppliers=Vendors
    -ThirdPartyType=Tip subjekta
    +ThirdPartySuppliers=Prodavači
    +ThirdPartyType=Type of company
     Individual=Fizičko lice
    -ToCreateContactWithSameName=Automatski pravi kontakt/adresu sa istim informacijama kao i subjekt ispod. U većini slučajeva, čak i kada je subjekt fizička osoba, samo pravljenje subjekta je dovoljno.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Matična kompanija
     Subsidiaries=Podružnice
     ReportByMonth=Izvještaj po mjesecima
    @@ -75,13 +75,13 @@ Zip=Poštanski broj
     Town=Grad
     Web=Web
     Poste= Pozicija
    -DefaultLang=Defaultni jezik
    -VATIsUsed=Porez na promet je obračunat
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Porez na promet nije obračunat
     CopyAddressFromSoc=Popuni adresu sa adresom subjekta
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
    +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Treća strana nije niti dobavljač ni kupac, popusti nisu dostupni
     PaymentBankAccount=Bankovni račun za plaćanje
     OverAllProposals=Prijedlozi
     OverAllOrders=Narudžbe
    @@ -99,9 +99,9 @@ LocalTax2ES=IRPF
     TypeLocaltax1ES=Vrsta RE
     TypeLocaltax2ES=Vrsta IRPF
     WrongCustomerCode=Nevažeća šifra kupca
    -WrongSupplierCode=Vendor code invalid
    +WrongSupplierCode=Nevažeća šifra prodavača
     CustomerCodeModel=Model šifre kupca
    -SupplierCodeModel=Vendor code model
    +SupplierCodeModel=Model šifre prodavača
     Gencod=Barkod
     ##### Professional ID #####
     ProfId1Short=ID broj 1
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=ID poreza na promet
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Porezni ID
     VATIntraSyntaxIsValid=Sintaksa je nevažeća
     VATReturn=Povrat PDV
    @@ -267,15 +267,15 @@ Prospect=Mogući klijent
     CustomerCard=Kartica kupca
     Customer=Kupac
     CustomerRelativeDiscount=Relativni popust kupca
    -SupplierRelativeDiscount=Relative vendor discount
    +SupplierRelativeDiscount=Relativni popust prodavača
     CustomerRelativeDiscountShort=Relativni popust
     CustomerAbsoluteDiscountShort=Fiksni popust
     CompanyHasRelativeDiscount=Ovaj kupca ima defaultni popust od <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Ovaj kupac nema relativnog popusta po defaultu
     HasRelativeDiscountFromSupplier=Imate ugovoreni popust od <b>%s%%</b> od strane ovog dobavljača
     HasNoRelativeDiscountFromSupplier=Nemate ugovoreni relativni popust od ovog dobavljača
    -CompanyHasAbsoluteDiscount=Ovaj kupac ima dostupno odobrenje (Knjižne obavijesti ili avansno plaćanje) za <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=Ovaj kupac ima dostupan diskont (komercijalni, uplaćen avans) za <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Ovaj kupac i dalje ima knjižno odobrenje za <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=Nemate dostupan diskontni popust od ovog dobavljača
     HasAbsoluteDiscountFromSupplier=Imate dostupne popuste (knjižne obavjesti ili avanse) od <b>%s</b> %s od strane ovog dobavljača
    @@ -284,10 +284,10 @@ HasCreditNoteFromSupplier=Imate knjižne obavijesti od <b>%s</b> %s od strane ov
     CompanyHasNoAbsoluteDiscount=Ovaj kupac nema zasluga za popust
     CustomerAbsoluteDiscountAllUsers=Apsolutni popusti kupcima (odobreni od svih korisnika)
     CustomerAbsoluteDiscountMy=Apsolutni popusti kupcima (koje ste vi odobrili)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +SupplierAbsoluteDiscountAllUsers=Apsolutni popusti prodavača (uneseni od strane svih korisnika)
    +SupplierAbsoluteDiscountMy=Apsolutni popusti prodavača (uneseni od strane sebe)
     DiscountNone=Ništa
    -Supplier=Dobavljač
    +Supplier=Vendor
     AddContact=Napravi kontakt
     AddContactAddress=Napravi kontakt/adresu
     EditContact=Uredi kontakt
    @@ -303,22 +303,22 @@ AddThirdParty=Napravi novi subjekt
     DeleteACompany=Obrisati kompaniju
     PersonalInformations=Osobni podaci
     AccountancyCode=Računovodstveni račun
    -CustomerCode=Šifra kupca
    -SupplierCode=Vendor code
    -CustomerCodeShort=Šifra kupca
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Šifra kupca, jedinstvena za sve kupce
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Potrebno ako je subjekt kupac ili mogući klijent
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Porvjera valjanosti se kontroliše modulom
    -ThisIsModuleRules=Ovo su pravila za ovaj modul
    +RequiredIfSupplier=Potrebno ako je subjekt prodavač
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Mogući klijent za kontaktirati
     CompanyDeleted=Kompanija"%s" obrisana iz baze podataka
     ListOfContacts=Lista kontakta/adresa
     ListOfContactsAddresses=Lista kontakta/adresa
    -ListOfThirdParties=Lista subjekata
    -ShowCompany=Pokaži subjekt
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Prikaži kontakt
     ContactsAllShort=Svi (bez filtera)
     ContactType=Tip kontakta
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Ovaj kontakt nije kontakt za bilo koji poslovni prijedlo
     NoContactForAnyContract=Ovaj kontakt nije kontakt za bilo koji ugovor
     NoContactForAnyInvoice=Ovaj kontakt nije kontakt za bilo koju fakturu
     NewContact=Novi kontakt
    -NewContactAddress=Novi kontakt/adresa
    +NewContactAddress=New Contact/Address
     MyContacts=Moji kontakti
     Capital=Kapital
     CapitalOf=Kapital od %s
     EditCompany=Uredi kompaniju
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Provjeri
    -VATIntraCheckDesc=Link <b>%s</b> dozvoljava upit za evopski PDV servis za provjeru. Potrebno je imati pristup internetu na serveru za ovu uslugu.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Provjeri PDV broj na stranici Evropske komisije
    -VATIntraManualCheck=Također možete ručno provjeriti sa evropske web stranice <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Provjera nije moguća. Servis za provjeru nije naveden od stran države članice (%s).
    -NorProspectNorCustomer=Niti mogući klijent, niti kupac
    -JuridicalStatus=Pravni status
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Osoblje
     ProspectLevelShort=Potencijal
     ProspectLevel=Potencijal mogućeg klijenta
    @@ -387,31 +387,31 @@ ExportCardToFormat=Izvod podataka u formatu
     ContactNotLinkedToCompany=Kontakt nije povezan sa nekim od subjekata
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=Nema Dolibarr pristupa
    -ExportDataset_company_1=Subjekti (kompanije/fondacije/fizička lica) i svojstva
    -ExportDataset_company_2=Kontakti i osobine
    -ImportDataset_company_1=Subjekti (kompanije/fondacije/fizička lica) i svojstva
    -ImportDataset_company_2=Kontakti/adrese (trećih strana ili ne) i osobine
    -ImportDataset_company_3=Bankovni računi trećih strana
    -ImportDataset_company_4=Predstavnici prodaje/treće strane (dodavanje korisnika predstavnika prodaje kompanijama)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Visina cijene
     DeliveryAddress=Adresa za dostavu
     AddAddress=Dodaj adresu
    -SupplierCategory=Vendor category
    +SupplierCategory=Kategorija prodavača
     JuridicalStatus200=Nezavisni
     DeleteFile=Obriši fajl
     ConfirmDeleteFile=Jeste li sigurni da želite obrisati ovaj fajl?
     AllocateCommercial=Dodijeljen predstavniku prodaje
     Organization=Organizacija
    -FiscalYearInformation=Informacije o fiskalnoj godini
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Početni mjesec fiskalne godine
    -YouMustAssignUserMailFirst=Morate najprije napraviti email za ovog korisnika da biste mogli dodati email notifikacije
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Da bi mogli dodati e-mail obavještenja, prvo morate definirati kontakte s važećom e-poštom za subjekte
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Lista mogućih klijenata
    -ListCustomersShort=Lista kupaca
    -ThirdPartiesArea=Područje za subjekte i kontakte
    -LastModifiedThirdParties=Zadnjih %s izmijenjenih subjekata
    -UniqueThirdParties=Ukupno unikatnih subjekata
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Otvori
     ActivityCeased=Zatvoreno
     ThirdPartyIsClosed=Subjekat je zatvoren
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Trenutni neplaćeni račun
     OutstandingBill=Max. za neplaćeni račun
     OutstandingBillReached=Dostignut maksimum za neplaćene račune
     OrderMinAmount=Najmanja količina za naručiti
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Ova šifra je slobodna. Ova šifra se može mijenjati bilo kad.
     ManagingDirectors=Ime menadžer(a) (CEO, direktor, predsjednik...)
     MergeOriginThirdparty=Umnoži subjekta (subjekt kojeg želite obrisati)
     MergeThirdparties=Spoji subjekte
    -ConfirmMergeThirdparties=Da li ste sigurni da želite spojiti ovaj subjekt u trenutno prikazani? Svi povezani objekti (fakture, narudžbe, ...) će biti premještene trenutnom subjektu, a zatim će prethodni subjekt biti obrisan.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Treće strane su spojene
     SaleRepresentativeLogin=Pristup za predstavnika prodaje
     SaleRepresentativeFirstname=Ime predstavnika prodaje
     SaleRepresentativeLastname=Prezime predstavnika prodaje
     ErrorThirdpartiesMerge=Nastala je greška pri brisanju treće strane. Molimo vas da provjerite zapisnik. Izmjene su vraćene.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/bs_BA/errors.lang b/htdocs/langs/bs_BA/errors.lang
    index 128da908a0f..514146984bb 100644
    --- a/htdocs/langs/bs_BA/errors.lang
    +++ b/htdocs/langs/bs_BA/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/bs_BA/interventions.lang b/htdocs/langs/bs_BA/interventions.lang
    index 21bfcf1c03f..c90c8f4249f 100644
    --- a/htdocs/langs/bs_BA/interventions.lang
    +++ b/htdocs/langs/bs_BA/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervencije
     InterventionCard=Kartica intervencija
     NewIntervention=Nova intervencija
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Lista intervencija
     ActionsOnFicheInter=Akcije na intervencijama
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/bs_BA/main.lang b/htdocs/langs/bs_BA/main.lang
    index 5b56fdd4a05..edac6415690 100644
    --- a/htdocs/langs/bs_BA/main.lang
    +++ b/htdocs/langs/bs_BA/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Neuspjeh pri slanju maila (pošiljalac=%s, primalac=%s)
     ErrorFileNotUploaded=Datoteka nije postavljena. Provjerite da li joj je veličina iznad dozvoljene, da li ima dovoljno slobodnog mjesta na disku i da li već postoji datoteka istog imena u ovom direktoriju.
     ErrorInternalErrorDetected=Pronađena greška
     ErrorWrongHostParameter=Pogrešan parametar hosta
    -ErrorYourCountryIsNotDefined=Vaša država nije definirana. Idite u postavke Početna-Postavke-Uredi i pošaljite ponovno obrazac.
    -ErrorRecordIsUsedByChild=Neuspjelo brisanje ovog unosa. Ovaj unos je korišten najmanje jednom u drugom podunosu.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Pogrešna vrijednost
     ErrorWrongValueForParameterX=Pogrešna vrijednost za parametar %s
     ErrorNoRequestInError=Nema greške u zahtjevu
    -ErrorServiceUnavailableTryLater=Usluga trenutno nije dostupna. Pokušajte kasnije.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicirana vrijednost u unikatnom polju
    -ErrorSomeErrorWereFoundRollbackIsDone=Pronađene određene greške. Vraćam promjene.
    -ErrorConfigParameterNotDefined=Parametar <b>%s</b> nije definiran unutar Dolibarr konfiguracijske datoteke <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Neuspjelo traženje korisnika <b>%s</b> u Dolibarr bazi podataka.
     ErrorNoVATRateDefinedForSellerCountry=Greška, nije definirana PDV stopa za državu '%s'.
     ErrorNoSocialContributionForSellerCountry=Greška, nisu definirane vrste doprinosa i poreza za državu '%s'.
     ErrorFailedToSaveFile=Greška, neuspjelo spremanje datoteke.
    -ErrorCannotAddThisParentWarehouse=Pokušavate dodati nadređeno skladište koje je već podređeno skladište ovom trenutnom
    -MaxNbOfRecordPerPage=Maks broj unosa po stranici
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Niste ovlašteni da to uradite.
     SetDate=Postavi datum
     SelectDate=Odaberi datum
    @@ -78,10 +78,10 @@ FileRenamed=Datoteka je uspješno preimenovana
     FileGenerated=Datoteka je uspješno generirana
     FileSaved=Datoteka je uspješno spremljena
     FileUploaded=Datoteka je uspješno postavljena
    -FileTransferComplete=Datoteka(e) su uspješno učitane
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=Datoteka(e) uspješno obrisana
     FileWasNotUploaded=Datoteka je odabrana za prilog ali nije još postavljena. Kliknite na "Dodaj datoteku" da bi ste to uradili.
    -NbOfEntries=Broj unosa
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Pročitajte online pomoć (neophodan pristup internetu)
     GoToHelpPage=Pročitaj pomoć
     RecordSaved=Unos spremljen
    @@ -92,9 +92,9 @@ DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr način odobrenja je posta
     Administrator=Administrator
     Undefined=Nedefinirano
     PasswordForgotten=Zaboravljena šifra?
    -NoAccount=No account?
    +NoAccount=Nema računa?
     SeeAbove=Vidi iznad
    -HomeArea=Početno područje
    +HomeArea=Početna
     LastConnexion=Posljednje veze
     PreviousConnexion=Prethodna veza
     PreviousValue=Prethodna vrijednost
    @@ -142,6 +142,7 @@ Closed=Zatvoreno
     Closed2=Zatvoreno
     NotClosed=Nije zatvoreno
     Enabled=Omogućeno
    +Enable=Enable
     Deprecated=Prevaziđeno
     Disable=Isključi
     Disabled=Isključeno
    @@ -153,7 +154,7 @@ Update=Ažuriraj
     Close=Zatvori
     CloseBox=Ukloni kutijicu sa svoje nadzorne ploče
     Confirm=Potvrdi
    -ConfirmSendCardByMail=Da li zaista želiš poslati sadržaj ove kartice mailom za <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Obriši
     Remove=Ukloni
     Resiliate=Deaktiviraj
    @@ -327,7 +328,7 @@ Copy=Kopiraj
     Paste=Zalijepi
     Default=Uobičajeni
     DefaultValue=Uobičajena vrijednost
    -DefaultValues=Podrazumijevane vrijednosti
    +DefaultValues=Default values/filters/sorting
     Price=Cijena
     PriceCurrency=Cijena (valuta)
     UnitPrice=Jedinična cijena
    @@ -347,7 +348,7 @@ AmountTTCShort=Iznos (uklj. PDV)
     AmountHT=Iznos (neto bez PDV)
     AmountTTC=Iznos (uklj. PDV)
     AmountVAT=Iznos poreza
    -MulticurrencyAlreadyPaid=Već plaćeno, orig. valuta
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Ostatak za plaćanje, orig. valuta
     MulticurrencyPaymentAmount=Iznos za plaćanje, orig. valuta
     MulticurrencyAmountHT=Iznos (bez poreza), orig. valuta
    @@ -403,7 +404,7 @@ DefaultTaxRate=Pretpostavljena stopa poreza
     Average=Prosjek
     Sum=Zbir
     Delta=Delta
    -RemainToPay=Remain to pay
    +RemainToPay=Preostalo za platiti
     Module=Modul/aplikacija
     Modules=Moduli/aplikacije
     Option=Opcija
    @@ -416,7 +417,7 @@ Favorite=Omiljeni
     ShortInfo=Info.
     Ref=Ref.
     ExternalRef=Ref. vanjski
    -RefSupplier=Ref. vendor
    +RefSupplier=Ref. prodavača
     RefPayment=Ref. plaćanje
     CommercialProposalsShort=Poslovni prijedlozi
     Comment=Komentar
    @@ -428,7 +429,7 @@ ActionNotApplicable=Nije primjenjivo
     ActionRunningNotStarted=Treba započeti
     ActionRunningShort=U toku
     ActionDoneShort=Završeno
    -ActionUncomplete=Nedovršeno
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Posljednjih %s povezanih događaja
     CompanyFoundation=Kompanija/organizacija
     Accountant=Računovođa
    @@ -453,8 +454,8 @@ Generate=Napravi
     Duration=Trajanje
     TotalDuration=Ukupno trajanje
     Summary=Sažetak
    -DolibarrStateBoard=Statistike baze podataka
    -DolibarrWorkBoard=Pregled otvorenih predmeta
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=Nema otvorenih elemenata za obradu
     Available=Dostupno
     NotYetAvailable=Još uvijek nedostupno
    @@ -468,7 +469,7 @@ and=i
     or=ili
     Other=Ostalo
     Others=Drugi
    -OtherInformations=Ostale informacije
    +OtherInformations=Other information
     Quantity=Količina
     Qty=Kol
     ChangedBy=Izmijenio
    @@ -495,7 +496,7 @@ Received=Primljeno
     Paid=Plaćeno
     Topic=Tema
     ByCompanies=Po subjektu
    -ByUsers=By user
    +ByUsers=Po korisniku
     Links=Veze
     Link=Veza
     Rejects=Odbijeno
    @@ -506,8 +507,8 @@ None=Ništa
     NoneF=Ništa
     NoneOrSeveral=Nijedan ili više
     Late=Kasno
    -LateDesc=Kašnjenje za definiranje ako je zapis zakasnio ili nije zavisan u vašem podešenju. Pitajte administratora za promjenu kašnjenja u meniju Početan - Postavke - Upozorenja.
    -NoItemLate=No late item
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
    +NoItemLate=Nema zakašnjelih stavki
     Photo=Slika
     Photos=Slike
     AddPhoto=Dodaj sliku
    @@ -530,18 +531,6 @@ September=septembar
     October=oktobar
     November=novembar
     December=decembar
    -JanuaryMin=jan
    -FebruaryMin=feb
    -MarchMin=mar
    -AprilMin=apr
    -MayMin=maj
    -JuneMin=jun
    -JulyMin=jul
    -AugustMin=aug
    -SeptemberMin=sep
    -OctoberMin=okt
    -NovemberMin=nov
    -DecemberMin=dec
     Month01=Januar
     Month02=februar
     Month03=mart
    @@ -622,9 +611,9 @@ BuildDoc=Napravi dok.
     Entity=Okruženje
     Entities=entiteti
     CustomerPreview=Pregled kupca
    -SupplierPreview=Vendor preview
    +SupplierPreview=Pregled prodavača
     ShowCustomerPreview=Pokaži sažetak kupca
    -ShowSupplierPreview=Show vendor preview
    +ShowSupplierPreview=Pokaži pregled prodavača
     RefCustomer=Ref. kupca
     Currency=valuta
     InfoAdmin=Informacije za administratore
    @@ -646,6 +635,8 @@ SendMail=Pošalji e-mail
     EMail=Email
     NoEMail=nema emaila
     Email=email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Nema broj mobitela
     Owner=Vlasnik
     FollowingConstantsWillBeSubstituted=Sljedeće konstante će se zamijeniti sa odgovarajućim vrijednostima.
    @@ -677,7 +668,7 @@ NeverReceived=Nikad primljeno
     Canceled=Otkazan
     YouCanChangeValuesForThisListFromDictionarySetup=Možete promijeniti vrijednosti na ovom spisku u meniju Postavke-Rječnici
     YouCanChangeValuesForThisListFrom=Možete promijeniti vrijednosti za ovaj spisak u meniju %s
    -YouCanSetDefaultValueInModuleSetup=Možete postaviti podrazumijevane vrijednosti koje će se koristiti pri pravljenju novog zapisa u postavkama modula
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Boja
     Documents=Povezane datoteke
     Documents2=Dokumenti
    @@ -703,7 +694,7 @@ DateOfSignature=Datum potpisa
     HidePassword=Pokaži komandu sa skrivenom šifrom
     UnHidePassword=Pokaži stvarnu komandu sa pokazanom šifrom
     Root=Root
    -Informations=Informacije
    +Informations=Inromacije
     Page=Stranica
     Notes=Napomene
     AddNewLine=Dodaj novi red
    @@ -716,15 +707,15 @@ Merge=Spajanje
     DocumentModelStandardPDF=Standardni šablon PDFa
     PrintContentArea=Pokaži stranicu za štampu glavnog područja
     MenuManager=Upravljanje menijima
    -WarningYouAreInMaintenanceMode=Upozorenje, sada ste u modu za održavanje, tako da samo korisniku <b>%s</b> je dopušteno korištenje aplikacije u ovom trenutku.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Sistemska greška
     CoreErrorMessage=Žao nam je, desila se greška. Kontaktirajte sistemskog administratora da provjeri zapisnik ili onemogući $dolibarr_main_prod=1 za dobijanje više informacija.
     CreditCard=Kreditna kartica
     ValidatePayment=Potvrditi uplatu
     CreditOrDebitCard=Kreditna kartica
     FieldsWithAreMandatory=Polja sa <b>%s</b> su obavezna
    -FieldsWithIsForPublic=Polja sa <b>%s</b> su prikazana na javnom spisku članova. Ako ovo ne želite, deaktivirajte kućicu "javno".
    -AccordingToGeoIPDatabase=(prema GeoIP konverziji)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Red
     NotSupported=Nije podržano
     RequiredField=Obavezno polje
    @@ -732,6 +723,8 @@ Result=Rezultat
     ToTest=Test
     ValidateBefore=Kartica se mora odobriti prije korištenja ove osobine
     Visibility=Vidljivost
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privatno
     Hidden=Sakriveno
     Resources=Resursi
    @@ -750,6 +743,7 @@ LinkTo=Link ka
     LinkToProposal=Link ka prijedlogu
     LinkToOrder=Link ka narudžbi
     LinkToInvoice=Link na fakturu
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link ka narudžbi kupcu
     LinkToSupplierProposal=Link ka ponudi dobavljača
     LinkToSupplierInvoice=Link na fakturu dobavljača
    @@ -758,6 +752,7 @@ LinkToIntervention=Link ka intervencijama
     CreateDraft=Kreiraj nacrt
     SetToDraft=Nazad na nacrt
     ClickToEdit=Klikni za uređivanje
    +ClickToRefresh=Click to refresh
     EditWithEditor=Uredi sa CKUređivačem
     EditWithTextEditor=Uredi sa tekstualnim uređivačem
     EditHTMLSource=Uredi HTML izvor
    @@ -772,14 +767,14 @@ ByDay=Po danu
     BySalesRepresentative=Po predstavniku prodaje
     LinkedToSpecificUsers=Spojeno sa određenim kontaktom korisnika
     NoResults=Nema rezultata
    -AdminTools=Adminski alati
    +AdminTools=Admin Tools
     SystemTools=Sistemski alati
     ModulesSystemTools=Alati modula
     Test=Test
     Element=Element
     NoPhotoYet=Još nema dostupne slike
     Dashboard=Komandna tabla
    -MyDashboard=Moja nadzorna ploča
    +MyDashboard=My Dashboard
     Deductible=Može se odbiti
     from=od
     toward=prema
    @@ -802,7 +797,7 @@ PrintFile=Štampa datoteke %s
     ShowTransaction=Pokaži unos u bankovni račun
     ShowIntervention=Prikaži intervenciju
     ShowContract=Prikaži ugovor
    -GoIntoSetupToChangeLogo=Idite u  Početna - Postavke - Kompanija za promjenu logotipa ili Početna - Postavke - Prikaz za sakrivanje.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Zabrani
     Denied=Zabranjeno
     ListOf=Spisak %s
    @@ -818,12 +813,12 @@ Sincerely=S poštovanjem
     DeleteLine=Obriši red
     ConfirmDeleteLine=Da li ste sigurni da želite obrisati ovaj red?
     NoPDFAvailableForDocGenAmongChecked=Nijedan PDF nije dostupan za kreiranje dokumenata među provjerenim zapisima
    -TooManyRecordForMassAction=Previše zapisa odabrano za masovnu akciju. Akcija je ograničena na spisak od %s zapisa.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=Nijedan zapis nije odabran
     MassFilesArea=Područje za datoteke napravljeno masovnim akcijama
     ShowTempMassFilesArea=Pokaži područje datoteka napravljeno masovnim akcijama
    -ConfirmMassDeletion=Potvrda masovnog brisanja
    -ConfirmMassDeletionQuestion=Da li ste sigurni da želite obrisati %s odabranih zapisa ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Povezani objekti
     ClassifyBilled=Klasificiraj kao fakturisano
     ClassifyUnbilled=Klasificiraj kao nefakturisano
    @@ -841,7 +836,7 @@ Calendar=Kalendar
     GroupBy=Grupiranje po...
     ViewFlatList=Vidi čisti spisak
     RemoveString=Ukloni pojam '%s'
    -SomeTranslationAreUncomplete=Neki jezici su možda djelimično prevedeni ili mogu sadržavati greške. Ako nađete neke, možete popraviti jezičke datoteke tako što ćete ih postaviti na <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direktni link preuzimanja (javni/vanjski)
     DirectDownloadInternalLink=Link direktnog skidanja (morate biti prijavljeni i imati potrebna dopuštenja)
     Download=Skidanje
    @@ -861,16 +856,25 @@ HR=LJR
     HRAndBank=LJR i banka
     AutomaticallyCalculated=Automatski izračunato
     TitleSetToDraft=Nazad na nacrt
    -ConfirmSetToDraft=Da li ste sigurni da želite se vratiti u stanje nacrta?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Uvoz id
     Events=Događaji
    -EMailTemplates=Šabloni emaila
    -FileNotShared=Datoteka nije dijeljena vanjskim korisnicima
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projekt
     Projects=Projekti
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Dozvole
     LineNb=Red br.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Ponedjeljak
     Tuesday=Utorak
    @@ -918,24 +922,24 @@ SearchIntoProductsOrServices=Proizvodi ili usluge
     SearchIntoProjects=Projekti
     SearchIntoTasks=Zadaci
     SearchIntoCustomerInvoices=Fakture kupaca
    -SearchIntoSupplierInvoices=Vendor invoices
    +SearchIntoSupplierInvoices=Fakture prodavača
     SearchIntoCustomerOrders=Narudžbe kupaca
    -SearchIntoSupplierOrders=Purchase orders
    +SearchIntoSupplierOrders=Narudžbe za nabavku
     SearchIntoCustomerProposals=Ponude kupcima
    -SearchIntoSupplierProposals=Vendor proposals
    +SearchIntoSupplierProposals=Prijedlozi prodavača
     SearchIntoInterventions=Intervencije
     SearchIntoContracts=Ugovori
     SearchIntoCustomerShipments=Slanje kupcu
     SearchIntoExpenseReports=Izvještaj o troškovima
    -SearchIntoLeaves=Odlasci
    +SearchIntoLeaves=Leave
     CommentLink=Komentari
     NbComments=Broj komentara
     CommentPage=Prostor komentara
     CommentAdded=Dodan komentar
     CommentDeleted=Obrisan komentar
     Everybody=Zajednički projekti
    -PayedBy=Platio
    -PayedTo=Plaćeno
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Mjesečno
     Quarterly=Tromjesečno
     Annual=Godišnje
    @@ -944,7 +948,8 @@ Remote=Udaljeni
     LocalAndRemote=Lokalni i udaljeni
     KeyboardShortcut=Prečica na tastaturi
     AssignedTo=Dodijeljeno korisniku
    -Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    -FileSharedViaALink=File shared via a link
    -
    +Deletedraft=Obriši nacrt
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
    +FileSharedViaALink=Datoteka dijeljena preko linka
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/bs_BA/other.lang b/htdocs/langs/bs_BA/other.lang
    index f211e34b1ec..dca185c7231 100644
    --- a/htdocs/langs/bs_BA/other.lang
    +++ b/htdocs/langs/bs_BA/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Treća stranka kreirana
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/bs_BA/projects.lang b/htdocs/langs/bs_BA/projects.lang
    index b89b8365936..b3d99096625 100644
    --- a/htdocs/langs/bs_BA/projects.lang
    +++ b/htdocs/langs/bs_BA/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Prikaži projekt
     ShowTask=Show task
     SetProject=Postavi projekat
     NoProject=Nema definisanog ili vlastitog projekta
    -NbOfProjects=Broj projekata
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Vrijeme provedeno
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Lista poslovnih prijedloga u vezi s projektom
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Lista ugovora u vezi s projektom
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Lista intervencija u vezi s projektom
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Lista događaja u vezi s projektom
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Povezane stavke
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Prijedlog
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/ca_ES/admin.lang b/htdocs/langs/ca_ES/admin.lang
    index f2360087d78..b195e0b0bda 100644
    --- a/htdocs/langs/ca_ES/admin.lang
    +++ b/htdocs/langs/ca_ES/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Desenvolupament
     VersionUnknown=Desconeguda
     VersionRecommanded=Recomanada
     FileCheck=Comprovador de integritat de arxius
    -FileCheckDesc=Aquesta ferramenta li permet comprobar la integritat dels arxius de l'aplicació, comparant cada arxiu amb els oficials. Es pot utilitzar aquesta ferrametna per detectar si alguns arxius han sigut modificats per un hacker per exemple.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=La integritat dels arxius està estrictament conforme amb la referència.
    -FileIntegrityIsOkButFilesWereAdded=La comprovació de la integritat dels arxius ha resultat exitosa, no obstant s'han afegit alguns arxius nous.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=La comprovació d'integritat d'arxius ha fallat. Alguns arxius han sigut modificats, eliminats o afegits.
     GlobalChecksum=Checksum global
     MakeIntegrityAnalysisFrom=Fer anàlisi de la integritat dels arxius de l'aplicació de
    @@ -30,14 +30,14 @@ SessionSaveHandler=Modalitat de desar sessions
     SessionSavePath=Emmagatzema la localització de les sessions
     PurgeSessions=Purga de sessions
     ConfirmPurgeSessions=Estàs segur de voler purgar totes les sessions? Es desconnectaran tots els usuaris (excepte tu mateix)
    -NoSessionListWithThisHandler=El gestor de període de sessions configurat en la seva PHP no enumera les sessions en curs
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Bloquejar connexions noves
    -ConfirmLockNewSessions=Esteu segur de voler restringir l'accés a Dolibarr al seu usuari? Només el login< b>%s</b> podrà connectar si confirma.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Eliminar bloqueig de connexions
     YourSession=La seva sessió
     Sessions=Sessions d'usuaris
     WebUserGroup=Servidor web usuari/grup
    -NoSessionFound=Sembla que el seu PHP no pot llistar les sessions actives. El directori de salvaguardat de sessions (<b>%s</b>) pot estar protegit (per exemple, pels permisos del sistema operatiu o per la directiva open_basedir del seu PHP)
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Codificació base de dades per emmagatzematge de dades
     DBSortingCharset=Codificació base de dades per classificar les dades
     ClientCharset=Joc de caràcters del client
    @@ -50,7 +50,7 @@ ExternalUser=Usuari extern
     InternalUsers=Usuaris interns
     ExternalUsers=Usuaris externs
     GUISetup=Entorn
    -SetupArea=Àrea configuració
    +SetupArea=Configuració
     UploadNewTemplate=Carrega nova plantilla(s)
     FormToTestFileUploadForm=Formulari de prova de càrrega de fitxer (segons opcions escollides)
     IfModuleEnabled=Nota: sí només és eficaç si el mòdul <b>%s</b> està activat
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=El codi no pot contenir el valor 0
     DisableJavascript=Desactivar funcions JavaScript i Ajax (Recomanat per a persones cegues o navegadors de text)
     UseSearchToSelectCompanyTooltip=També si tenen un gran número de tercers (> 100.000), pot augmentar la velocitat mitjançant l'estableciement COMPANY_DONOTSEARCH_ANYWHERE amb la constant a 1 a Configuració --> Altres. La cerca serà limitada a la creació de la cadena
     UseSearchToSelectContactTooltip=També si vostè té un gran número de tercers (> 100.000), pot augmentar la velocitat mitjançant l'estableciment. CONTACT_DONOTSEARCH_ANYWHERE amb la constant a 1 a Configuració --> Altres. La cerca serà limitada a la creació de la cadena
    -DelaiedFullListToSelectCompany=Espera abans de pitjar una tecla mentre es carrega el contingut de la llista desplegable de tercers (Això pot incrementar la prestació si tens una llista llarga, però és menys convenient)
    -DelaiedFullListToSelectContact=Espera abans de pitjar una tecla mentre es carrega el contingut de la llista desplegable de contactes (Això pot incrementar la prestació si tens una llista llarga, però és menys convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nombre de caràcters per a desencadenar la cerca: %s
     NotAvailableWhenAjaxDisabled=No disponible quan Ajax estigui desactivat
     AllowToSelectProjectFromOtherCompany=En un document d'un tercer, pots triar un projecte enllaçat a un altre tercer
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Vista prèvia no disponible
     ThemeCurrentlyActive=Tema actualment actiu
     CurrentTimeZone=Fus horari PHP (Servidor)
     MySQLTimeZone=Zona horària MySql (base de dades)
    -TZHasNoEffect=Les dates es guarden i tornen pel servidor de la base de dedes tal com si les haguessin enviat com una cadena. La zona horària només te efecte si s'utilitza la funció UNIX_TIMESTAMP (que no pot ser utilitzada per dolibarr, per el que la zona horària de la base de dades no hauria de tenir efecte, encara que s'hagi canviat després d'introduir les dades).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Àrea
     Table=Taula
     Fields=Camps
    @@ -118,7 +118,7 @@ Destination=Destinació
     IdModule=ID del modul
     IdPermissions=ID de permisos
     LanguageBrowserParameter=Variable %s
    -LocalisationDolibarrParameters=Paràmetres de localització
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Zona horària client (usuari)
     ClientHour=Hora client (usuari)
     OSTZ=Zona horària Servidor SO
    @@ -126,8 +126,8 @@ PHPTZ=Zona horària Servidor PHP
     DaylingSavingTime=Horari d'estiu (usuari)
     CurrentHour=Hora PHP (servidor)
     CurrentSessionTimeOut=Timeout sessió actual
    -YouCanEditPHPTZ=Per establir una zona horària PHP diferent (no és necessari), pots intentar afegir un fitxer .htaccess amb una línia com aquesta "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Avís, al contrari d'altres pantalles, les hores d'aquesta pàgina no són a la vostra zona horària local, sinó a la zona horària del servidor.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Panell
     Boxes=Panells
     MaxNbOfLinesForBoxes=Màxim número de línies per panell
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignorar errors de registres duplicats (INSERT IGNORE)
     AutoDetectLang=Autodetecta (idioma del navegador)
     FeatureDisabledInDemo=Opció deshabilitada en demo
     FeatureAvailableOnlyOnStable=Funcionalitat disponible únicament en versions estables oficials 
    -BoxesDesc=Els panells són components que mostren alguna informació que pots afegir per personalitzar algunes pàgines. Pots triar entre mostrar el panell o no seleccionant la pàgina de destí i fent clic a 'Activa', o fent clic al cubell d'escombraries per desactivar.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Només els elements de <a href="%s"> mòduls activats</a> són mostrats
    -ModulesDesc=Els mòduls Dolibarr defineixen quina aplicació/característica està habilitada al programari. Algunes aplicacions/mòduls requereixen permisos que has de concedir als usuaris, després d'activar-los. Fes clic al botó d'activació/desactivació per habilitar un mòdul/aplicació.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Pots trobar més mòduls per descarregar en pàgines web externes per internet...
    -ModulesDeployDesc=Si els permisos en el seu sistema d'arxius ho permiteixen, pot utilitzar aquesta ferramente per instal·lar un mòdul extern. El mòdul estarà aleshores visible en la pestanya <strong>%s</strong>
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Trobar mòduls/complements externs
     ModulesDevelopYourModule=Desenvolupeu els vostres mòduls/aplicacions
    -ModulesDevelopDesc=Podeu desenvolupar o trobar un soci per desenvolupar per a vostè, el vostre mòdul personalitzat
    -DOLISTOREdescriptionLong=En lloc d'activar el lloc web <a href="https://www.dolistore.com">www.dolistore.com</a> per trobar un mòdul extern, podeu utilitzar aquesta eina incrustada que farà que la cerca en el lloc de mercat extern per a tu (pot ser lent, necessiteu un accés a internet) ...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Nou
     FreeModule=Gratuït
     CompatibleUpTo=Compatible amb la versió %s
    @@ -211,8 +211,8 @@ Nouveauté=Novetat
     AchatTelechargement=Comprar / Descarregar
     GoModuleSetupArea=Per instal·lar un nou mòdul, vaja al àrea de configuració de mòduls en <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, el lloc oficial de mòduls complementaris per Dolibarr ERP / CRM
    -DoliPartnersDesc=Llista d'empreses que proporcionen desenvolupament a mida de mòduls o funcionalitats (Nota: qualsevol empresa amb experiència amb programació PHP pot proporcionar desenvolupament a mida per un projecte de codi obert)
    -WebSiteDesc=Llocs web de referència per trobar més mòduls...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Algunes solucions per desenvolupar el vostre propi mòdul...
     URL=Enllaç
     BoxesAvailable=Panells disponibles
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=No emmagatzemar la contrasenya sense xifrar a la base
     MainDbPasswordFileConfEncrypted=Encriptar la contrasenya de la base en l'arxiu conf.php
     InstrucToEncodePass=Per tenir la contrasenya encriptada al fitxer <b>conf.php</b> reemplaça la línia<br><b>$dolibarr_main_db_pass="...";</b><br>per<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Per tenir la contrasenya descodificada en el fitxer de configuració <b> conf.php </b>, reemplaça en aquest fitxer la línia <br><b>$dolibarr_main_db_pass="crypted:..."</b><br> per <br><b>$dolibarr_main_db_pass="%s"</b>
    -ProtectAndEncryptPdfFiles=Protecció i encriptació dels pdf generats
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=La protecció d'un document PDF el manté disponible per llegir i imprimir amb qualsevol navegador PDF. No obstant això, l'edició i la còpia ja no és possible. Tingues en compte que l'ús d'aquesta característica fa que la construcció d'un arxiu PDF fusionat global no funcioni.
     Feature=Funció
     DolibarrLicense=Llicència
    @@ -246,8 +246,8 @@ ExternalResources=Recursos externs
     SocialNetworks=Xarxes socials
     ForDocumentationSeeWiki=Per a la documentació d'usuari, desenvolupador o Preguntes Freqüents (FAQ), consulteu el wiki Dolibarr: <br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Per altres qüestions o realitzar les seves pròpies consultes, pot utilitzar el fòrum Dolibarr: <br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Aquesta àrea et pot ajudar a obtenir un servei de suport de Dolibarr.
    -HelpCenterDesc2=Alguns d'aquests serveis només estan disponibles en <b>anglès</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Gestor de menú
     MeasuringUnit=Unitat de mesura
     LeftMargin=Marge esquerra
    @@ -262,31 +262,35 @@ NoticePeriod=Preavís
     NewByMonth=Nou per mes
     Emails=Correus
     EMailsSetup=Configuració de correu
    -EMailsDesc=Aquesta plana permet reescriure els paràmetres del PHP en quan a l'enviament de correus. A la majoria dels casos de sistemes operatius Unix/Linux, la configuració per defecte del PHP és correcta i no calen aquests paràmetres.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Perfils de remitents de correus electrònics
    -MAIN_MAIL_SMTP_PORT=Port del servidor SMTP (Per defecte a php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=Nom host o ip del servidor SMTP (Per defecte en php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Port del servidor SMTP (No definit en PHP en sistemes de tipus Unix)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Nom servidor o ip del servidor SMTP (No definit en PHP en sistemes de tipus Unix)
    -MAIN_MAIL_EMAIL_FROM=Remitent del correu per a correus automàtics (Valor per defecte a php.ini: <b>1%s</b>)
    -MAIN_MAIL_ERRORS_TO=L'adreça de correu electrònic utilitzada per retornar correus d'error (emprada al camp 'Errors-To' en els correus enviats)
    -MAIN_MAIL_AUTOCOPY_TO= Envia automàticament una còpia oculta de tots els e-mails enviats a
    -MAIN_DISABLE_ALL_MAILS=Deshabilitar l'enviament de tots els correus (per fer proves o en llocs tipus demo)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Envieu tots els correus electrònics a (en lloc de destinataris reals, amb finalitats d'assaig)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Afegir usuaris d'empleats amb correu a la llista de destinataris permesos
    -MAIN_MAIL_SENDMODE=Mètode d'enviament d'e-mails
    -MAIN_MAIL_SMTPS_ID=ID d'autenticació SMTP si es requereix autenticació SMTP
    -MAIN_MAIL_SMTPS_PW=Contrasenya autentificació SMTP si es requereix autenticació SMTP
    -MAIN_MAIL_EMAIL_TLS= Ús d'encriptació TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS= Ús d'encriptació TLS (STARTTLS)
    -MAIN_DISABLE_ALL_SMS=Desactivar globalment tot enviament de SMS (per mode de proves o demo)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Mètode d'enviament de SMS
    -MAIN_MAIL_SMS_FROM=Número de telèfon per defecte per als enviaments SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Remitent per defecte per a correus enviats manualment (adreça de correu d'usuari o d'empresa)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Correu electrònic de l'usuari
     CompanyEmail=Correu electrònic de l'empresa
     FeatureNotAvailableOnLinux=Funcionalitat no disponible en sistemes Unix. Proveu el seu sendmail localment.
    -SubmitTranslation=Si la traducció d'aquest idioma no està completa o trobes errors, pots corregir-ho editant els arxius en el directori<b>langs/%s</b> i enviant els canvis a www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Si la traducció d'aquest idioma no està completa o trobes errors, pots corregir-ho editant els fitxers en el directori<b>langs/%s</b> i enviant els fitxers modificats al fòrum de www.dolibarr.es o pels desenvolupadors a github.com/Dolibarr/dolibarr.
     ModuleSetup=Configuració del mòdul
     ModulesSetup=Configuració de mòduls/aplicacions
    @@ -309,15 +313,15 @@ DoNotUseInProduction=No utilitzar en producció
     ThisIsProcessToFollow=Aquests són els passos per al procés:
     ThisIsAlternativeProcessToFollow=Aquesta és una configuració alternativa per processar manualment:
     StepNb=Pas %s
    -FindPackageFromWebSite=Busca el paquet que t'ofereix les característiques que vols (per exemple en la web oficial %s)
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Descarrega el paquet (per exemple del lloc web oficial %s).
    -UnpackPackageInDolibarrRoot=Descomprimeix els fitxers empaquetats en en el directori del servidor dedicat a Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=Per instal·lar un mòdul extern, descomprimir l'arxiu en el directori del servidor dedicat als mòduls: <b>%s</b>
    -SetupIsReadyForUse=La instal·lació del mòdul ha finalitzat. No obstant, ha d'habilitar i configurar el mòdul en la seva aplicació, aneu a la pàgina per configurar els mòduls: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=No s'ha definit el directori arrel alternatiu a un directori existent.<br>
     InfDirAlt=Des de la versió 3, és possible definir un directori arrel alternatiu. Això li permet emmagatzemar, en un directori dedicat, plug-ins i plantilles personalitzades.<br>Només ha de crear un directori a l'arrel de Dolibarr (per exemple: custom).<br>
     InfDirExample=<br>Declareu-lo al fitxer <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>Si aquestes línies ja hi són però comentades amb un "#",  llavors simplement descomenteu-les treient aquest caràcter.
    -YouCanSubmitFile=Per a aquest pas, podeu pujar el fitxer .ZIP del mòdul aquí:
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Versió actual de Dolibarr
     CallUpdatePage=Ves a la pàgina que actualitza l'estructura de base de dades i les dades: %s
     LastStableVersion=Última versió estable
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Dona un cop d'ull a la wiki per més detalls de tots els actor
     UseACacheDelay= Demora en memòria cau de l'exportació en segons (0 o buit sense memòria)
     DisableLinkToHelpCenter=Amagar l'enllaç "Necessita suport o ajuda" a la pàgina de login
     DisableLinkToHelp=Amaga l'enllaç a l'ajuda en línia "<b>%s</b>"
    -AddCRIfTooLong=No hi ha línies de tall automàtic, de manera que si el text és massa llarg en els documents, cal afegir els seus propis retorns de carro en el text mecanografiat.
    -ConfirmPurge=Estàs segur de voler realitzar aquesta purga? <br> Això esborrarà definitivament totes les dades dels seus fitxers (àrea GED, arxius adjunts etc.).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Longuitud mínima
     LanguageFilesCachedIntoShmopSharedMemory=arxius .lang en memòria compartida
     LanguageFile=Fitxer d'idioma
    -ExamplesWithCurrentSetup=Exemples amb la configuració activa actual
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Llistat de directoris de plantilles OpenDocument
     ListOfDirectoriesForModelGenODT=Llista de directoris que contenen fitxers de plantilles amb format OpenDocument.<br><br>Posa aqui el l'adreça completa dels directoris.<br>Afegeix un "intro" entre cada directori.<br>Per afegir un directori del mòdul GED, afegeix aquí <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Els fitxers d'aquests directoris han de tenir l'extensió <b>.odt</b> o <b>.ods</b>.
    -NumberOfModelFilesFound=Nombre d'arxius de plantilles ODT trobats en aquest(s) directori(s)
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Exemples de sintaxi:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=Posant les següents etiquetes a la plantilla, obtindrà una substitució amb el valor personalitzat en generar el document:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Crear_un_modelo_de_documento_ODT
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Clau per utilitzar els Web Services (paràmetre "dolibar
     TestSubmitForm=Formulari de proves
     ThisForceAlsoTheme=Utilitzar aquest gestor de menús predetermina també el tema, sigui quina sigui l'elecció de l'usuari. A més, aquest gestor de menús, especial per a smartphones, només funciona en alguns telèfons. Utilitzar un altre gestor Si veieu qualsevol problema.
     ThemeDir=Directori dels temes
    -ConnectionTimeout=Timeout de connexió
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Timeout de resposta
     SmsTestMessage=Missatge de prova de __PHONEFROM__ per __PHONETO__
     ModuleMustBeEnabledFirst=El mòdul "<b>%s</b>" ha d'habilitar-se primer si necessita aquesta funcionalitat.
     SecurityToken=Clau per encriptar urls
    -NoSmsEngine=No hi ha cap gestor d'enviament de SMS. Els gestors d'enviament de SMS no s'instal·len en estàndard (ja que depenen d'un proveïdor), però pot trobar a la plataforma http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Defineix les opcions globals relacionades a la generació de PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Regles de visualització d'adreces
     HideAnyVATInformationOnPDF=Amagar qualsevol informació relacionada amb l'IVA al PDF que es genera
     PDFRulesForSalesTax=Regles per l'IVA
     PDFLocaltax=Regles per %s
    -HideLocalTaxOnPDF=Amagar la tasa %s a la columna d'impostos de venda del pdf
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Amagar descripció dels productes en la generació dels PDF
     HideRefOnPDF=Amagar referència dels productes en la generació dels PDF
     HideDetailsOnPDF=Oculta els detalls de les línies de producte en els PDFs generats
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Seguretat de les URL
     SecurityTokenIsUnique=Fer servir un paràmetre securekey únic per a cada URL?
     EnterRefToBuildUrl=Introduïu la referència de l'objecte %s
     GetSecuredUrl=Obté la URL calculada
    -ButtonHideUnauthorized=Amaga els botons a usuaris no administradors per accions no autoritzades enlloc de mostrar-los en gris deshabilitats
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Taxa d'IVA antiga
     NewVATRates=Taxa d'IVA nova
     PriceBaseTypeToChange=Canviar el preu on la referència de base és
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Llista de selecció
     ExtrafieldSelectList = Llista de selecció de table
     ExtrafieldSeparator=Separador (no és un camp)
     ExtrafieldPassword=Contrasenya
    -ExtrafieldRadio=Botons d'opció (només una opció)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Caselles de verificació
     ExtrafieldCheckBoxFromList=Caselles de verificació des de taula
     ExtrafieldLink=Enllaç a un objecte
     ComputedFormula=Camp calculat
     ComputedFormulaDesc=Podeu introduir aquí una fórmula usant altres propietats d'objecte o qualsevol codi PHP per obtenir un valor calculat dinàmic. Podeu utilitzar qualsevol fórmula compatible amb PHP, inclòs l'operador "?" i els següents objectes globals: <strong> $db, $conf, $langs, $mysoc, $user, $object</strong>. <br><strong> AVÍS</strong>: Només algunes propietats de $object poden estar disponibles. Si necessiteu una propietat que no s'hagi carregat, tan sols busqueu l'objecte en la formula com en el segon exemple. <br> L'ús d'un camp calculat significa que no podeu introduir cap valor des de la interfície. A més, si hi ha un error de sintaxi, la fórmula potser no torni res.  <br><br> Exemple de fórmula: <br> $object->id <10? round($object->id/2, 2): ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)  <br><br> Exemple de recarrega d'object<br> (($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br> Un altre exemple de fórmula per forçar la càrrega de l'objecte i el seu objecte principal: <br> (($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Mantenir aquest camp buit significa que el valor s'emmagatzema sense xifrar (el camp només ha d'estar amagat amb una estrella sobre la pantalla). <br> Establiu aquí el valor 'auto' per utilitzar la regla de xifrat per defecte per guardar la contrasenya a la base de dades (el valor llegit serà només el "hash", no hi haurà cap manera de recuperar el valor original)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=La llista de valors ha de ser un conjunt de línies amb un par del tipus clau,valor (on la clau no pot ser '0') <br><br> per exemple : <br>clau1,valor1<br>clau2,valor2<br>clau3,valor3<br>...<br><br>Per tenir la llista depenent d'una altra llista d'atributs complementaris: <br>1,valor1|options_<i>codi_llista_pare</i>:clau_pare<br>2,valor2|options_<i>codi_llista_pare</i>:clau_pare <br><br>Per tenir la llista depenent d'una altra llista:<br>1,valor1|<i>codi_llista_pare</i>:clau_pare<br>2,valor2|<i>codi_llista_pare</i>:clau_pare
     ExtrafieldParamHelpcheckbox=La llista de valor ha de ser un conjunt de línies del tipus clau,valor (a on la clau no pot ser '0')<br><br> per exemple : <br>1,valor1<br>2,valor2<br>3,valor3<br>...
     ExtrafieldParamHelpradio=La llista de valor ha de ser un conjunt de línies del tipus clau,valor (a on la clau no pot ser '0')<br><br> per exemple : <br>1,valor1<br>2,valor2<br>3,valor3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Enllaç per defecte
     SetAsDefault=Indica'l com Defecte
     ValueOverwrittenByUserSetup=Atenció: Aquest valor pot ser sobreescrit per un valor específic de la configuració de l'usuari (cada usuari pot tenir la seva pròpia url clicktodial)
     ExternalModule=Mòdul extern - Instal·lat al directori %s
    -BarcodeInitForThirdparties=Inici massiu de codi de barres per tercers
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Inici massiu de codi de barres per productes o serveis
     CurrentlyNWithoutBarCode=Actualment, té <strong>%s</strong> registres a <strong>%s</strong> %s sense codi de barres definit.
     InitEmptyBarCode=Iniciar valor pels %s registres buits
     EraseAllCurrentBarCode=Esborrar tots els valors de codi de barres actuals
     ConfirmEraseAllCurrentBarCode=Esteu segur que voleu esborrar tots els valors de codis de barres actuals?
     AllBarcodeReset=S'han eliminat tots els valors de codi de barres
    -NoBarcodeNumberingTemplateDefined=No hi ha plantilla de codi de barres habilitada a la configuració del mòdul de codi de barres.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Habilita la caché de fitxers
     ShowDetailsInPDFPageFoot=Afegeix més detalls en el peu dels fitxers PDF, com l'adreça de l'empresa, o altres camps (el NIF/CIF, codis professionals, ...).
     NoDetails=No hi ha més detalls en el peu
     DisplayCompanyInfo=Mostra l'adreça de l'empresa
     DisplayCompanyManagers=Mostra el gestor de noms
     DisplayCompanyInfoAndManagers=Mostra l'adreça de l'empresa i els noms del gerència
    -EnableAndSetupModuleCron=Si vols tenir aquesta factura recurrent generada automàticament, el mòdul *%s* s'ha d'habilitar i configurar correctament. D'altra banda, la generació de factures s'ha de fer manualment des d'aquesta plantilla amb el bóto "Crea". Tingues en compte que si actives la generació automàtica, pots continuar generant factures manuals. No és possible la generació de duplicitats pel mateix període. 
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Retorna un codi comptable buit.
     ModuleCompanyCodeDigitaria=El codi comptable depèn del codi del Tercer. El codi està format pel caràcter "C" a la primera posició seguit dels 5 primers caràcters del codi del Tercer.
     Use3StepsApproval=Per defecte, les comandes de compra necessiten ser creades i aprovades per 2 usuaris diferents (el primer pas/usuari és per a crear i un altre pas/usuari per aprovar. Noteu que si un usuari te permisos tant per crear com per aprovar, un sol pas/usuari serà suficient). Amb aquesta opció, tens la possibilitat d'introduir un tercer pas/usuari per a l'aprovació, si l'import es superior a un determinat valor (d'aquesta manera són necessaris 3 passos: 1=validació, 2=primera aprovació i 3=segona aprovació si l'import és suficient).<br>Deixa-ho en blanc si només vols un nivell d'aprovació (2 passos); posa un valor encara que sigui molt baix (0,1) si vols una segona aprovació (3 passos).
     UseDoubleApproval=Utilitza una aprovació en 3 passos quan l'import (sense impostos) sigui més gran que...
    -WarningPHPMail=ADVERTIMENT: sovint és millor configurar correus electrònics de sortida per utilitzar el servidor de correu electrònic del vostre proveïdor en comptes de la configuració predeterminada. Alguns proveïdors de correu electrònic (com Yahoo) no us permeten enviar un correu electrònic des d'un altre servidor que el seu propi servidor. La seva configuració actual utilitza el servidor de l'aplicació per enviar correus electrònics i no el servidor del vostre proveïdor de correu electrònic, de manera que alguns destinataris (el que sigui compatible amb el protocol restrictiu de DMARC), us preguntaran al vostre proveïdor de correu electrònic si poden acceptar el vostre correu electrònic i alguns proveïdors de correu electrònic (com Yahoo) pot respondre "no" perquè el servidor no és un servidor d'ells, així que pocs dels vostres correus electrònics enviats no es poden acceptar (tingueu cura també de la quota d'enviament del vostre proveïdor de correu electrònic). Si el vostre proveïdor de correu electrònic (com Yahoo) té aquesta restricció, heu de canviar la configuració de correu electrònic per triar l'altre mètode "servidor SMTP" i introduir el servidor SMTP i les credencials proporcionades pel vostre proveïdor de correu electrònic (demaneu al proveïdor d'EMail que obtingui credencials SMTP per al vostre compte).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=Si el vostre proveïdor SMTP necessita restringir al client de correu a una adreça IP (és raro), aquesta és la IP de l'agent d'usuari de correu (MUA) per la vostra aplicació ERP CRM: <strong>%s</strong>.
     ClickToShowDescription=Clica per mostrar la descripció
    -DependsOn=Aquest mòdul necesita el/s mòdul/s
    +DependsOn=This module needs the module(s)
     RequiredBy=Aquest mòdul és requerit pel/s mòdul/s
    -TheKeyIsTheNameOfHtmlField=Aquest és el nom del camp HTML. Això necessita tenir coneixements tècnics per llegir el contingut de la pàgina HTML per obtenir el nom clau d'un camp.
    -PageUrlForDefaultValues=Has d'introduir aquí l'URL relatiu de la pàgina. Si inclous paràmetres a l'URL, els valors predeterminats seran efectius si tots els paràmetres s'estableixen en el mateix valor. Exemples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>Per formulari per crear un nou Tercer, és <strong>%s</strong>,<br>Si voleu un valor per defecte només si la URL conté algun paràmetre, llavors podeu emprar <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>Per la plana que enllista els Tercers, és <strong>%s</strong>,<br>Si voleu un valor per defecte només si la URL conté algun paràmetre, llavors podeu emprar <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Permet l'ús de valors predeterminats personalitzats
    -EnableOverwriteTranslation=Habilita l'ús de la traducció sobreescrita
    -GoIntoTranslationMenuToChangeThis=S'ha trobat una traducció per a la clau amb aquest codi, per tant, per canviar aquest valor, heu d'editar-lo des de  Inici-Configuració-Traducció.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Avís, establir un ordre de classificació predeterminat pot provocar un error tècnic en passar a la pàgina de la llista si el camp és un camp desconegut. Si experimentes aquest error, torna a aquesta pàgina per eliminar l'ordre de classificació predeterminat i restablir el comportament predeterminat.
     Field=Camp
     ProductDocumentTemplates=Plantilles de documents per generar document de producte
    @@ -476,16 +480,18 @@ SendEmailsReminders=Enviar recordatoris d'agenda per correu electrònic
     davDescription=Afegeix un component per ser un servidor DAV
     DAVSetup=Configuració del mòdul DAV
     DAV_ALLOW_PUBLIC_DIR=Habilitar el directori públic (un directori WebDav que no requereix accés amb contrasenya)
    -DAV_ALLOW_PUBLIC_DIRTooltip=El directori públic WebDav és un directori WebDav al qual tothom pot accedir (per llegir i/o escriure), sense necessitat de tenir un compte d'accés amb contrasenya.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Usuaris i grups
     Module0Desc=Gestió d'usuaris / empleats i grups
    -Module1Name=Tercers
    +Module1Name=Third Parties
     Module1Desc=Gestió d'empreses i contactes (clients, clients potencials...)
     Module2Name=Comercial
     Module2Desc=Gestió comercial
     Module10Name=Comptabilitat
    -Module10Desc=Informes de compatbilitat senzills (diaris, facturació) basats en el contingut a la base de dades. No empra cap taula de llibre major.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Pressupostos
     Module20Desc=Gestió de pressupostos/propostes comercials
     Module22Name=E-Mailings
    @@ -511,13 +517,13 @@ Module52Desc=Gestió de stocks de productes
     Module53Name=Serveis
     Module53Desc=Gestió de serveis
     Module54Name=Contractes/Subscripcions
    -Module54Desc=Gestió de contractes (serveis o subscripcions diaries)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Codis de barra
     Module55Desc=Gestió dels codis de barra
     Module56Name=Telefonia
     Module56Desc=Gestió de la telefonia
     Module57Name=Domiciliacions
    -Module57Desc=Gestió de domiciliacions. També inclou generació del fitxer SEPA per als països europeus
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integració amb ClickToDial
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Notes de despeses i desplaçaments
     Module75Desc=Gestió de les notes de despeses i desplaçaments
     Module80Name=Expedicions
     Module80Desc=Gestió d'expedicions i recepcions
    -Module85Name=Bancs i caixes
    +Module85Name=Banks and Cash
     Module85Desc=Gestió de comptes bancaris o efectiu
    -Module100Name=External site
    -Module100Desc=Inclou qualsevol lloc web extern en els menús de Dolibarr, veient-lo en un frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman i SPIP
     Module105Desc=Interfície amb Mailman o SPIP pel mòdul de Socis
     Module200Name=LDAP
    -Module200Desc=Sincronització amb un directori LDAP
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=Integració amb PostNuke
     Module240Name=Exportacions de dades
    -Module240Desc=Eina d'exportació de dades Dolibarr (amb assistent)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Importació de dades
    -Module250Desc=Eina per importar dades a Dolibarr (amb assistent)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Socis
     Module310Desc=Gestió de socis d'una entitat
     Module320Name=Fils RSS
     Module320Desc=Addició de fils d'informació RSS en les pantalles Dolibarr
    -Module330Name=Bookmarks
    -Module330Desc=Gestió de marcadors
    -Module400Name=Projectes/Oportunitats/Leads
    -Module400Desc=Gestió de projectes, oportunitats/leads i/o tasques. Pots asignar també qualsevol element (factura, comanda, pressupost, intervenció...) a un projecte i obtindre una vista transversal del projecte.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Interface amb el calendari webcalendar
     Module500Name=Impostos i despeses especials
     Module500Desc=Gestió d'altres despeses (IVA, IRPF, altres impostos, dividends, ...)
     Module510Name=Pagament de salaris dels empleats
    -Module510Desc=Registre i seguiment del pagament dels salaris dels empleats
    +Module510Desc=Record and track employee payments
     Module520Name=Préstec
     Module520Desc=Gestió de préstecs
     Module600Name=Notificacions sobre events de negoci
    -Module600Desc=Enviar notificacions per correu (arran de cert esdeveniments de negoci) a usuaris (configuració a establir per a cada usuari), a contactes de tercers (configuració a establir per a cada tercer) o a adreces fixes
    -Module600Long=Tingueu en compte que aquest mòdul està dedicat a enviar correus electrònics en temps real quan es produeix un esdeveniment de negoci dedicat. Si cerqueu una característica per enviar recordatoris per correu electrònic dels esdeveniments de l'agenda, aneu a la configuració del mòdul Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Variants de producte
    -Module610Desc=Permet la creació de variants de producte en funció dels atributs (color, mida, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donacions
     Module700Desc=Gestió de donacions
     Module770Name=Informes de despeses
    -Module770Desc=Informes de despeses de gestió i reclamació (transport, menjar, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Pressupost del proveïdor
     Module1120Desc=Sol·licitar al venedor cotització i preus
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Generació de documents de correu massiu
     Module1780Name=Etiquetes
     Module1780Desc=Crear etiquetes/categories (productes, clients, venedors, contactes o membres)
     Module2000Name=Editor WYSIWYG
    -Module2000Desc=Permet editar algunes àrees de text utilitzant un editor avançat (basat en CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Multi-preus
     Module2200Desc=Activar l'ús d'expressions matemàtiques per als preus
     Module2300Name=Tasques programades
     Module2300Desc=Gestió de tasques programades (alias cron o taula chrono)
     Module2400Name=Esdeveniments/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=SGD / GCE
     Module2500Desc=Sistema de gestió de documents / Gestió de continguts electrònics. Organització automàtica dels vostres documents generats o emmagatzemats. Compartiu-los quan ho necessiteu.
     Module2600Name=Serveis API/WEB (servidor SOAP)
    @@ -590,46 +596,50 @@ Module2600Desc=Habilita el servidor SOAP de Dolibarr que ofereix serveis API
     Module2610Name=Serveis API/WEB (servidor REST)
     Module2610Desc=Habilita el servidor REST de Dolibarr que ofereix serveis API
     Module2660Name=Crida a WebServices (client SOAP)
    -Module2660Desc=Habilitar els serveis de client web de Dolibarr (pot ser utilitzar per gravar dades/sol·licituds de servidors externs. De moment només és suportat en comandes a proveïdors)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Utilitza el servei en línia de Gravatar (www.gravatar.com) per mostrar fotos dels usuaris/socis (que es troben en els seus missatges de correu electrònic). Necessita un accés a Internet
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=Client FTP
     Module2900Name=GeoIPMaxmind
     Module2900Desc=Capacitats de conversió GeoIP Maxmind
     Module3100Name=Skype
     Module3100Desc=Afegeix un botó d'Skype a les fitxes dels usuaris / tercers / contactes / socis
     Module3200Name=Arxius inalterables
    -Module3200Desc=Activa el registre d'alguns esdeveniments de negoci en un registre inalterable. Els esdeveniments s'arxiven en temps real. El registre és una taula d'esdeveniments encadenats que només es poden llegir i exportar. Aquest mòdul pot ser obligatori per a alguns països.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=RRHH
     Module4000Desc=Gestió de recursos humans (gestionar departaments, empleats, contractes i "feelings")
     Module5000Name=Multi-empresa
     Module5000Desc=Permet gestionar diverses empreses
     Module6000Name=Workflow
    -Module6000Desc=Workflow management (automatic creation of object and/or automatic status change)
    +Module6000Desc=Gestió del flux de treball (creació automàtica d'objectes i / o canvi d'estat automàtic)
     Module10000Name=Pàgines web
     Module10000Desc=Crear un portal web amb un editor WYSIWG. Només heu de configurar el vostre servidor web (Apache, Nginx, ...) per apuntar al directori dedicat de Dolibarr per tenir-ho publicat en línia amb el vostre propi domini.
     Module20000Name=Dies lliures
    -Module20000Desc=Gestió dels dies lliures dels empleats
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Lots de productes
     Module39000Desc=Gestió de lots o series, dates de caducitat i venda dels productes
    +Module40000Name=Multidivisa
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Mòdul per oferir una plana de pagament en línia, acceptant pagaments amb targeta de dèbit/crèdit via PayBox. Pot ser emprat per permetre als vostres clients fer pagaments lliures o bé per pagar algun objecte particular del Dolibarr (factura, comanda, etc...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=TPV
     Module50100Desc=Mòdul Terminal Punt Venda (TPV)
    +Module50150Name=Terminals Punt de Venda
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Mòdul per oferir una pàgina de pagament en línia que accepti pagaments mitjançant PayPal (targeta de crèdit o amb crèdit PayPal). Això es pot utilitzar per permetre als vostres clients fer pagaments lliures o el pagament d'un objecte particular de Dolibarr (factura, comanda, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Comptabilitat (avançat)
    -Module50400Desc=Gestió comptable (entrades dobles, suport general i llibres majors auxiliars). Exporta el llibre major en diversos altres formats de programari de comptabilitat.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=L'impressió directa (sense obrir els documents) utilitza l'interfície Cups IPP (L'impressora té que ser visible pel servidor i CUPS té que estar instal·lat en el servidor)
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Enquesta o votació
    -Module55000Desc=Mòdul per crear enquestes o votacions online (com Doodle, Studs, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marges
     Module59000Desc=Mòdul per gestionar els marges
     Module60000Name=Comissions
     Module60000Desc=Mòdul per gestionar les comissions
    -Module62000Name=Incoterm
    -Module62000Desc=Afegir funcions per gestionar Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Recursos
     Module63000Desc=Gestiona els recursos (impressores, cotxes, habitacions...) que pots compartir en esdeveniments
     Permission11=Consulta factures de client
    @@ -651,9 +661,9 @@ Permission32=Crear/modificar productes
     Permission34=Elimina productes
     Permission36=Veure/gestionar els productes ocults
     Permission38=Exportar productes
    -Permission41=Consulta projectes i tasques (els projectes compartits i els projectes en que sóc el contacte). També pots introduir els temps consumits, per a mi o la meva jerarquia, en tasques asignades (full de temps)
    -Permission42=Crea/modifica projectes (projectes compartits i projectes dels que sóc contacte). També pot crear tasques i assignar usuaris a projectes i tasques
    -Permission44=Elimina projectes (projectes compartits i projectes dels que en sóc contacte)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Exporta projectes
     Permission61=Consulta intervencions
     Permission62=Crea/modifica intervencions
    @@ -686,7 +696,7 @@ Permission109=Eliminar expedicions
     Permission111=Consultar comptes financers (comptes bancaris, caixes)
     Permission112=Crear/modificar quantitat/eliminar registres bancaris
     Permission113=Configuració de comptes financers (crear i gestionar les categories)
    -Permission114=Reconciliar transaccions
    +Permission114=Reconcile transactions
     Permission115=Exporta transaccions i extractes
     Permission116=Captar transferències entre comptes
     Permission117=Gestionar enviament de xecs
    @@ -694,15 +704,15 @@ Permission121=Consulta tercers enllaçats a usuaris
     Permission122=Crea/modifica tercers enllaçats a l'usuari
     Permission125=Elimina tercers enllaçats a l'usuari
     Permission126=Exporta tercers
    -Permission141=Consulta tots els projectes i tasques (també els projectes privats dels que no sóc contacte)
    -Permission142=Crea/modifica tots els projectes i tasques (també projectes privats dels que no sóc el contacte)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Elimina tots els projectes i tasques (també els projectes privats dels que no sóc contacte)
     Permission146=Consulta proveïdors
     Permission147=Consulta estadístiques
     Permission151=Llegir domiciliacions
     Permission152=Crear/modificar domiciliacions
     Permission153=Enviar/Transmetre domiciliacions
    -Permission154=Registrar Abonaments/Devolucions de domiciliacions
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Consulta contractes/subscripcions
     Permission162=Crear/Modificar contractes/subscripcions
     Permission163=Activar un servei/subscripció d'un contracte
    @@ -725,7 +735,7 @@ Permission187=Tancar comandes a proveïdors
     Permission188=Anul·lar comandes a proveïdors
     Permission192=Crear línies
     Permission193=Cancel·lar línies
    -Permission194=Consultar l'ample de banda de línies
    +Permission194=Read the bandwidth lines
     Permission202=Crear connexions ADSL
     Permission203=Realitzar comanda de connexions
     Permission204=Demanar connexions
    @@ -750,12 +760,12 @@ Permission244=Veure contingut de categories ocultes
     Permission251=Consultar altres usuaris
     PermissionAdvanced251=Consultar altres usuaris
     Permission252=Consultar els permisos d'altres usuaris
    -Permission253=Crear/modificar altres usuaris i els seus permisos
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Crear/modificar usuaris interns/externs i els seus permisos
     Permission254=Crea/modifica només usuaris externs
     Permission255=Eliminar o desactivar altres usuaris
     Permission256=Consultar els seus permisos
    -Permission262=Ampliar l'accés a tots els tercers (no sols als tercers dels quals l'usuari és comercial).<br>No efectiu per a usuaris externs (sempre limitat a ells mateix per a pressupostos, comandes, factures, contractes, etc).<br>No efectiu per a projectes (sols permisos de visió i asignació dels projectes).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Consultar el CA
     Permission272=Consultar les factures
     Permission273=Emetre les factures
    @@ -765,7 +775,7 @@ Permission283=Elimina contactes
     Permission286=Exporta contactes
     Permission291=Consultar tarifes
     Permission292=Indica permisos en les tarifes
    -Permission293=Modificar les tarifes a clients
    +Permission293=Modify customers tariffs
     Permission300=Consultar codis de barra
     Permission301=Crear/modificar codis de barra
     Permission302=Eliminar codi de barra
    @@ -787,11 +797,9 @@ Permission401=Consultar havers
     Permission402=Crear/modificar havers
     Permission403=Validar havers
     Permission404=Eliminar havers
    -Permission501=Consulta els contractes/salaris dels empleats
    -Permission502=Crea/modifica els contractes/salaris dels empleats
    -Permission511=Consulta el pagament dels salaris
    -Permission512=Crea/modifica el pagament dels salaris
    -Permission514=Elimina salaris
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Exportació salaris
     Permission520=Consulta préstecs
     Permission522=Crear/modificar préstecs
    @@ -844,8 +852,8 @@ Permission1251=Llançar les importacions en massa a la base de dades (càrrega d
     Permission1321=Exporta factures de clients, atributs i cobraments
     Permission1322=Reobrir una factura pagada
     Permission1421=Exporta comandes de clients i atributs
    -Permission20001=Consulta els dies de lliure disposició (els propis i els dels teus subordinats)
    -Permission20002=Crea/modifica els teus dies de lliure disposició (els propis i els dels teus subordinats)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Elimina les peticions de dies lliures retribuïts
     Permission20004=Consulta tots els dies de lliure disposició (inclòs els usuaris no subordinats)
     Permission20005=Crea/modifica els dies de lliure disposició per tothom (inclòs els usuaris no subordinats)
    @@ -880,8 +888,8 @@ Permission63001=Consulta recursos
     Permission63002=Crea/modifica recursos
     Permission63003=Elimina recursos
     Permission63004=Enllaça recursos en esdeveniments de l'agenda
    -DictionaryCompanyType=Tipus de tercers
    -DictionaryCompanyJuridicalType=Formes jurídiques de tercers
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Perspectiva nivell client potencial
     DictionaryCanton=Província
     DictionaryRegion=Regions
    @@ -891,10 +899,10 @@ DictionaryCivility=Títols personals i professionals
     DictionaryActions=Tipus d'esdeveniments de l'agenda
     DictionarySocialContributions=Tipus d'impostos varis
     DictionaryVAT=Taxa d'IVA o Impost de vendes
    -DictionaryRevenueStamp=Amount of tax stamps
    +DictionaryRevenueStamp=Imports de segells fiscals
     DictionaryPaymentConditions=Condicions de pagament
     DictionaryPaymentModes=Modes de pagament
    -DictionaryTypeContact=Tipus de contactes/adreces
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Tipus de pàgines web / contenidors
     DictionaryEcotaxe=Barems CEcoParticipación (DEEE)
     DictionaryPaperFormat=Formats paper
    @@ -908,47 +916,47 @@ DictionarySource=Orígens de pressupostos/comandes
     DictionaryAccountancyCategory=Grups personalitzats per informes
     DictionaryAccountancysystem=Models de plans comptables
     DictionaryAccountancyJournal=Diari de comptabilitat
    -DictionaryEMailTemplates=Models d'emails
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Unitats
     DictionaryProspectStatus=Estat del client potencial
    -DictionaryHolidayTypes=Tipus de dies lliures
    -DictionaryOpportunityStatus=Estat de l'oportunitat pel projecte/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Informe de despeses - Categories de transport
     DictionaryExpenseTaxRange=Informe de despeses - Rang per categoria de transport
     SetupSaved=Configuració desada
     SetupNotSaved=Configuració no desada
     BackToModuleList=Retornar llista de mòduls
    -BackToDictionaryList=Tornar a la llista de diccionaris
    -TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Gestió IVA
    -VATIsUsedDesc=El tipus d'IVA proposat per defecte en les creacions de pressupostos, factures, comandes, etc. respon a la següent regla: <br> Si el venedor no està subjecte a IVA, asigna IVA per defecte a 0. Final de regla. <br>Si el país del venedor=país del comprador, asigna per defecte el IVA del producte en el país venut. Final de regla. <br> Si el venedor i comprador resideixen a la Comunitat Europea i els béns venuts són productes de transport (cotxe, vaixell, avió), asigna IVA per defecte a 0 (l'IVA ha de ser pagat pel comprador a la hisenda pública del seu país i no al venedor). Final de regla <br> Si venedor i comprador resideixen a la Comunitat Europea i el comprador no és una empresa, asigna per defecte l'IVA del producte venut. Final de regla. <br> Si el venedor i comprador resideixen a la Comunitat Europea i el comprador és una empresa, asigna per defecte l'IVA 0 Final de regla. <br> En qualsevol altre cas l'IVA proposat per defecte és 0. Final de regla.
    -VATIsNotUsedDesc=El tipus d'IVA proposat per defecte és 0. Aquest és el cas d'associacions, particulars o algunes petites societats.
    -VATIsUsedExampleFR=A França, es tracta de les societats o organismes que trien un règim fiscal general (General simplificat o General normal), règim en el qual es declara l'IVA.
    -VATIsNotUsedExampleFR=A França, es tracta d'associacions exemptes d'IVA o societats, organismes o professions liberals que han triat el règim fiscal de mòduls (IVA en franquícia), pagant un IVA en franquícia sense fer declaració d'IVA. Aquesta elecció fa aparèixer l'anotació "IVA no aplicable - art-293B del CGI" en les factures.
    +BackToDictionaryList=Back to list of Dictionaries
    +TypeOfRevenueStamp=Tipus de segell fiscal
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Tarifa
     LocalTax1IsNotUsed=No subjecte
    -LocalTax1IsUsedDesc=Utilitza un 2n tipus d'impost (diferent de l'IVA)
    -LocalTax1IsNotUsedDesc=No utilitzar un altre tipus d'impost (diferent de l'IVA)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=2n tipus d'impost
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=No subjecte
    -LocalTax2IsUsedDesc=Utilitza un 3r tipus d'impost (diferent de l'IVA)
    -LocalTax2IsNotUsedDesc=No utilitzar un altre tipus d'impost (diferent de l'IVA)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=3r tipus d'impost
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= Gestió Recàrrec d'Equivalència
    -LocalTax1IsUsedDescES= El tipus de RE proposat per defecte en les creacions de pressupostos, factures, comandes, etc. Respon a la següent regla:<br>Si el comprador no està subjecte a RE, RE per defecte= 0. Final de regla.<br>Si el comprador està subjecte a RE aleshores s'aplica valor de RE per defecte. Final de regla.<br>
    -LocalTax1IsNotUsedDescES= El tipus de RE proposat per defecte es 0. Final de regla.
    -LocalTax1IsUsedExampleES= A Espanya, es tracta de persones físiques: autònoms subjectes a uns epígrafs concrets de l'IAE.
    -LocalTax1IsNotUsedExampleES= A Espanya, es tracta d'empreses jurídiques: Societats limitades, anònimes, etc. i persones físiques (autònoms) subjectes a certs epígrafs de l'IAE.
    -LocalTax2ManagementES= Gestió IRPF
    -LocalTax2IsUsedDescES= El tipus d'IRPF proposat per defecte en les creacions de pressupostos, factures, comandes, etc. Respon a la següent regla:<br>Si el venedor no està subjecte a IRPF, IRPF per defecte= 0. Final de regla.<br>Si el venedor està subjecte a IRPF aleshores s'aplica valor d'IRPF per defecte. Final de regla.<br>
    -LocalTax2IsNotUsedDescES= El tipus d'IRPF proposat per defecte es 0. Final de regla.
    -LocalTax2IsUsedExampleES= A Espanya, es tracta de persones físiques: autònoms i professionals independents que presten serveis i empreses que han triat el règim fiscal de mòduls.
    -LocalTax2IsNotUsedExampleES= A Espanya, es tracta d'empreses no subjectes al règim fiscal de mòduls.
    +LocalTax1ManagementES=Gestió Recàrrec d'Equivalència
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=El tipus de RE proposat per defecte es 0. Final de regla.
    +LocalTax1IsUsedExampleES=A Espanya, es tracta de persones físiques: autònoms subjectes a uns epígrafs concrets de l'IAE.
    +LocalTax1IsNotUsedExampleES=A Espanya, es tracta d'empreses jurídiques: Societats limitades, anònimes, etc. i persones físiques (autònoms) subjectes a certs epígrafs de l'IAE.
    +LocalTax2ManagementES=Gestió IRPF
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=El tipus d'IRPF proposat per defecte es 0. Final de regla.
    +LocalTax2IsUsedExampleES=A Espanya, es tracta de persones físiques: autònoms i professionals independents que presten serveis i empreses que han triat el règim fiscal de mòduls.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Informes d'impostos locals
     CalcLocaltax1=Vendes - Compres
     CalcLocaltax1Desc=Els informes es calculen amb la diferència entre les vendes i les compres
    @@ -958,7 +966,8 @@ CalcLocaltax3=Vendes
     CalcLocaltax3Desc=Els informes es basen en el total de les vendes
     LabelUsedByDefault=Etiqueta utilitzada per defecte si no es troba cap traducció per aquest codi
     LabelOnDocuments=Etiqueta sobre documents
    -NbOfDays=Nº de dies
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=A final de mes
     CurrentNext=Actual/Següent
     Offset=Decàleg
    @@ -984,7 +993,7 @@ DatabaseUser=Login de la base de dades
     DatabasePassword=Contrasenya de la base de dades
     Tables=Taules
     TableName=Nom de la taula
    -NbOfRecord=Nº Reg.
    +NbOfRecord=No. of records
     Host=Servidor
     DriverType=Tipus de driver
     SummarySystem=Resum de la informació de sistemes Dolibarr
    @@ -996,7 +1005,7 @@ Skin=Tema visual
     DefaultSkin=Tema visual por defecte
     MaxSizeList=Longuitud màxima de llistats
     DefaultMaxSizeList=Longitud màxima per defecte per a les llistes
    -DefaultMaxSizeShortList=Longitud màxima per defecte en llistes curtes (per exemple, en la fitxa de client)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Missatge del dia
     MessageLogin=Missatge del login
     LoginPage=Pàgina de login
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Zona de recerca permanent del menú de l'esquerra
     DefaultLanguage=Idioma per defecte a utilitzar (codi d'idioma)
     EnableMultilangInterface=Activar interface multiidioma
     EnableShowLogo=Mostra el logotip en el menú de l'esquerra
    -CompanyInfo=Informació de l'empresa/organització
    -CompanyIds=Identificació reglamentària
    +CompanyInfo=Empresa/Organització
    +CompanyIds=Company/Organization identities
     CompanyName=Nom/Raó social
     CompanyAddress=Adreça
     CompanyZip=Codi postal
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Titular del compte %s
     BankModuleNotActive=Mòdul comptes bancaris no activat
     ShowBugTrackLink=Mostra l'enllaç "<strong>%s</strong>"
     Alerts=Alertes
    -DelaysOfToleranceBeforeWarning=Terminis de tolerància abans d'alerta
    -DelaysOfToleranceDesc=Aquesta pantalla permet configura els terminis de tolerància abans que es alerti amb el símbol %s, sobre cada element en retard.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolerància de retard (en dies) abans de l'alerta en esdeveniments planificats (esdevenitments de l'agenda) encara no completats
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolerància de retard (en dies) abans de l'alerta en projectes no tancats a temps.
    -Delays_MAIN_DELAY_TASKS_TODO=Tolerància de retard (en dies) abans de l'alerta en tasques planificades (tasques de projectes) encara no completades
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Tolerància de retard (en dies) abans de l'alerta en comandes encara no processades
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Tolerància de retard abans de l'alerta (en dies) sobre pressupostos a tancar
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Tolerància de retard abans de l'alerta (en dies) sobre pressupostos no facturats
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerància de retard abans de l'alerta (en dies) sobre serveis a activar
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerància de retard abans de l'alerta (en dies) sobre serveis expirats
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerància de retard abans de l'alerta (en dies) sobre factures de proveïdor impagades
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerància de retard abans de l'alerta (en dies) sobre factures a client impagades
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerància de retard abans de l'alerta (en dies) sobre conciliacions bancàries pendents
    -Delays_MAIN_DELAY_MEMBERS=Tolerància de retard abans de l'alerta (en dies) sobre cotitzacions adherents en retard
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerància de retard abans de l'alerta (en dies) sobre xecs a ingressar
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerància de retard (en dies) abans d'alertar d'informes de despeses pendents d'aprovar
    -SetupDescription1=L'àrea de configuració són pels paràmetres de configuració inicials abans de començar a utilitzar Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Les altres entrades de configuració gestionen paràmetres opcionals.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Auditoria de la seguretat d'esdeveniments
     Audit=Auditoria
     InfoDolibarr=Sobre Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Podeu habilitar el registre d'esdeveniments de seguretat Dolibarr a
     AreaForAdminOnly=Els paràmetres de configuració només poden ser establerts per <b>usuaris administradors</b>.
     SystemInfoDesc=La informació del sistema és informació tècnica accessible només en només lectura als administradors.
     SystemAreaForAdminOnly=Aquesta àrea només és accessible als usuaris de tipus administradors. Cap permís Dolibarr permet estendre el cercle de usuaris autoritzats a aquesta áera.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Editeu en aquesta pàgina tota la informació coneguda sobre el vostre comptable
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=Número de fila
     DisplayDesc=Selecciona els paràmetres relacionats amb l'aparença de Dolibarr
     AvailableModules=Mòduls/complements disponibles
     ToActivateModule=Per activar els mòduls, aneu a l'àrea de Configuració (Inici->Configuració->Mòduls).
     SessionTimeOut=Timeout de sesions
    -SessionExplanation=Assegura que el període de sessions no expirarà abans d'aquest moment. Tanmateix, la gestió del període de sessions de PHP no garanteix que el període de sessions expirar després d'aquest període: Aquest serà el cas si un sistema de neteja del cau de sessions és actiu. <br>Nota: Sense mecanisme especial, el mecanisme intern per netejar el període de sessions de PHP tots els accessos <b>%s /%s</b>, però només al voltant de l'accés d'altres períodes de sessions.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Triggers disponibles
    -TriggersDesc=Els triggers són arxius que modifiquen el comportament del fluxe de treball de Dolibarr un cop s'han copiat a la carpeta <b>htdocs/core/triggers</b>. Realitzen noves accions activades pels esdeveniments de Dolibarr (creació d'empresa, validació factura, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers d'aquest arxiu desactivador pel sufix <b>-NORUN</b> en el nom de l'arxiu.
     TriggerDisabledAsModuleDisabled=Triggers d'aquest arxiu desactivats ja que el mòdul <b>%s</b> no està activat.
     TriggerAlwaysActive=Triggers d'aquest arxiu sempre actius, ja que els mòduls Dolibarr relacionats estan activats
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Afegeix totes les dades de referència. Pots afegir els teus valo
     ConstDesc=Aquesta pàgina et permet editar tots els altres paràmetres no disponibles en les pàgines anteriors. Principalment són paràmetres reservats per desenvolupadors o per casuístiques avançades. Per veure el llistat d'opcions <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">clica aquí</a>.
     MiscellaneousDesc=Tots els altres paràmetres relacionats amb la seguretat es defineixen aqui.
     LimitsSetup=Configuració de límits i precisions
    -LimitsDesc=Podeu definir aquí els límits i precisions utilitzats per Dolibarr
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Decimals màxims per als preus unitaris
     MAIN_MAX_DECIMALS_TOT=Decimals màxims per als preus totals
     MAIN_MAX_DECIMALS_SHOWN=Decimals màxims per als imports mostrats a la pantalla (Posar <b> ...</b> després del màxim si vol veure <b> ...</b> quan el nombre es trunque al mostrar a la pantalla)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Preu unitari sense IVA d'un producte
     TotalPriceAfterRounding=Preu total després de l'arrodoniment
     ParameterActiveForNextInputOnly=Paràmetre efectiu només a partir de les properes sessions
     NoEventOrNoAuditSetup=No s'han registrat esdeveniments de seguretat. Això pot ser normal si l'auditoria no ha estat habilitat a la pàgina "configuració->seguretat->auditoria".
    -NoEventFoundWithCriteria=No s'han trobat esdeveniments de seguretat per a aquests criteris de cerca.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Veure la configuració local de sendmail
     BackupDesc=Per realitzar una còpia de seguretat completa de Dolibarr, vostè ha de:
     BackupDesc2=Desa el contingut del directori de documents (<b>%s</b>) que conté tots els fitxers carregats i generats (per tant, inclou tots els fitxers de bolcat generats al pas 1)
    -BackupDesc3=Guardar el contingut de la seva base de dades (<b>%s</b>) a un archiu de bolcat. Per aixo pot utilitzar l'asistent a continuació
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=La carpeta arxivada haurà de guardar-se en un lloc segur
     BackupDescY=L'arxiu de bolcat generat haurà de guardar-se en un lloc segur.
    -BackupPHPWarning=La còpia de seguretat no pot ser garantida amb aquest mètode. És preferible utilitzar l'anterior
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Per restaurar una còpia de seguretat de Dolibarr, vostè ha de:
    -RestoreDesc2=Agafar l'arxiu (arxiu zip, per exemple) del directori dels documents i descomprimeix-lo en el directori dels documents d'una nova instal·lació de Dolibarr o a la carpeta dels documents d'aquesta instal·lació (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restaurar l'arxiu del bolcat guardat a la base de dades de la nova instal·lació de Dolibarr o d'aquesta instal·lació (<b>%s</b>). Atenció, una vegada realitzada la restauració, tindra d'utilitzar un login/contrasenya d'administrador existent en el moment de la copia de seguretat per connectar-se. Per restaurar la base de dades de l'instal·lació actual, pot utilitzar l'assistent a continuació.
     RestoreMySQL=Importació MySQL
     ForcedToByAModule= Aquesta regla està forçada a <b>%s</b> per un dels mòduls activats
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Ha d'executar la comanda des d'
     YourPHPDoesNotHaveSSLSupport=Funcions SSL no disponibles al vostre PHP
     DownloadMoreSkins=Més temes per descarregar
     SimpleNumRefModelDesc=Retorna el nombre sota el format %syymm-nnnn on yy és l'any, mm el mes i nnnn un comptador seqüencial sense ruptura i sense tornar a 0
    -ShowProfIdInAddress=Mostrar l'identificador professional en les direccions dels documents
    -ShowVATIntaInAddress=Oculta el NIF intracomunitari en les direccions dels documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Traducció parcial
    -MAIN_DISABLE_METEO=Deshabilitar la vista meteo
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Mode estàndard
     MeteoStdModEnabled=Mode estàndard habilitat
     MeteoPercentageMod=Mode percentual
     MeteoPercentageModEnabled=Mode de percentatge activat
     MeteoUseMod=Prèmer per utilitzar %s
     TestLoginToAPI=Comprovar connexió a l'API
    -ProxyDesc=Algunes de les característiques de Dolibarr requereixen que el servidor tingui accés a Internet. Definiu aquí els paràmetres per a aquest accés. Si el servidor està darrere d'un proxy, aquests paràmetres s'indiquen a Dolibarr com passar-ho.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Accés extern
     MAIN_PROXY_USE=Usar un servidor intermediari (si no accés directe a Internet)
     MAIN_PROXY_HOST=Nom/Adreça del servidor proxy
     MAIN_PROXY_PORT=Port del servidor proxy
     MAIN_PROXY_USER=Login del servidor proxy
     MAIN_PROXY_PASS=Contrasenya del servidor proxy
    -DefineHereComplementaryAttributes=Defineix tots els atributs complementaris, no disponibles per defecte, que vols gestionar per %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Atributs complementaris
     ExtraFieldsLines=Atributs complementaris (línies)
     ExtraFieldsLinesRec=Atributs complementaris (línies de plantilles de factures)
     ExtraFieldsSupplierOrdersLines=Atributs complementaris (línies de comanda)
     ExtraFieldsSupplierInvoicesLines=Atributs complementaris (línies de factura)
     ExtraFieldsThirdParties=Atributs complementaris (tercers)
    -ExtraFieldsContacts=Atributs complementaris (contactes/adreçes)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Atributs complementaris (soci)
     ExtraFieldsMemberType=Atributs complementaris (tipus de socis)
     ExtraFieldsCustomerInvoices=Atributs complementaris (factures)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=només caràcters alfanumèrics i en minúscula
     SendmailOptionNotComplete=Atenció, en alguns sistemes Linux, amb aquest mètode d'enviament, per poder enviar mails en nom seu, la configuració de sendmail ha de contenir l'opció <b>-ba</b> (paràmetre <b>mail.force_extra_parameters</b> a l'arxiu <b>php.ini</b>). Si alguns dels seus destinataris no reben els seus missatges, proveu de modificar aquest paràmetre PHP amb <b>mail.force_extra_parameters =-ba </b>.
     PathToDocuments=Rutes d'accés a documents
     PathDirectory=Catàleg
    -SendmailOptionMayHurtBuggedMTA=La funcionalitat d'enviar correus electrònics a través del "correu directe PHP" genera una sol·licitud que poden ser mal interpretats per alguns servidors de correu. Això és tradueix en missatges de correu electrònic illegibles per a les persones allotjades a aquestes plataformes. Aquest és el cas de clients en certs proveïdors de serveis d'internet (Ex: Orange). Això no és un problema ni de Dolibarr ni de PHP, però si del servidor de correu. Encara que, pot agregar la opció MAIN_FIX_FOR_BUGGED_MTA amb el valor 1 a la Configuració -> Varis per tractar que Dolibarr eviti l'error. Un altre solució (recomanada) és utilitzar el mètode d'enviament per SMTP que no té aquest inconvenient.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Configuració de traducció
     TranslationKeySearch=Cerca una clau o cadena de traducció
     TranslationOverwriteKey=Sobreescriu una cadena de traducció
     TranslationDesc=Com configurar l'idioma de visualització de l'aplicació: <br> * Sistema: menú <strong>Inici - Configuració - Entorn</strong> <br> * Per usuari: utilitzeu la pestanya <strong>Configuració de l'entorn d'usuari</strong> a la pestanya d'usuari (feu clic al nom d'usuari a la part superior de la pantalla).
     TranslationOverwriteDesc=També pot reemplaçar cadenes omplint la taula següent. Triï el seu idioma a la llista desplegable "%s", inserta la clau de la traducció a "%s" i la seva nova traducció a "%s"
    -TranslationOverwriteDesc2=Podeu utilitzar un altra pestanya per ajudar a saber quina clau de conversió utilitzar
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Cadena de traducció
     CurrentTranslationString=Cadena de traducció actual
     WarningAtLeastKeyOrTranslationRequired=Es necessita un criteri de cerca com a mínim per cadena o clau de traducció
     NewTranslationStringToShow=Nova cadena de traducció a mostrar
     OriginalValueWas=La traducció original s'ha sobreescrit. El valor original era: <br><br>%s
    -TransKeyWithoutOriginalValue=Has obligat una nova traducció per a la clau de traducció '<strong>%s</strong>' que no existeix en cap fitxer d'idioma
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Mòduls/Aplicacions activats: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Ha d'activar almenys 1 mòdul.
    -ClassNotFoundIntoPathWarning=No s'ha trobat la classe %s en el seu path PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Sí a l'estiu
    -OnlyFollowingModulesAreOpenedToExternalUsers=Només els següents moduls estan oberts a usuaris externs (segons els permisos de cada usuari) i només si tenen permisos:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Emmagatzematge de sessions xifrades per Suhosin
     ConditionIsCurrently=Actualment la condició és %s
    -YouUseBestDriver=Està utilitzant el driver %s, actualment és el millor driver disponible.
    -YouDoNotUseBestDriver=Està utilitzant el driver %s però és recomanat l'ús del driver %s.
    -NbOfProductIsLowerThanNoPb=Té %s productes/serveis a la base de dades. No és necessària cap optimització en particular.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Cerca optimització
    -YouHaveXProductUseSearchOptim=Té %s productes a la base de dades. Hauria afegir la constant PRODUCT_DONOTSEARCH_ANYWHERE a 1 a Inici-Configuració-Varis, limitant la cerca al principi de la cadena que fa possible que la base de dades usi l'índex i s'obtingui una resposta immediata.
    -BrowserIsOK=Utilitza el navegador web %s. Aquest navegador està optimitzat per a la seguretat i el rendiment.
    -BrowserIsKO=Utilitza el navegador web %s. Aquest navegador és una mala opció per a la seguretat, rendiment i fiabilitat. Aconsellem fer servir Firefox, Chrome, Opera o Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug està carregat.
     XCacheInstalled=XCache cau està carregat.
    -AddRefInList=Mostra el codi de client/proveïdor en llistats (selectors o combobox) i en la majoria d'enllaços. Els tercers apareixeran amb el nom "CC12345 - SC45678 - The big company coorp", en comptes de "The big company coorp".
    -AskForPreferredShippingMethod=Pregunta pel mètode d'enviament preferit pels tercers.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edició del camp %s
     FillThisOnlyIfRequired=Exemple: +2 (Completi només si es registre una desviació del temps en l'exportació)
     GetBarCode=Obté el codi de barres
     ##### Module password generation
     PasswordGenerationStandard=Retorna una contrasenya generada per l'algoritme intern Dolibarr: 8 caràcters, números i caràcters en minúscules barrejades.
    -PasswordGenerationNone=No suggerir cap contrassenya generada. La contrassenya s'ha d'escriure manualment.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Retorna una contrasenya d'acord a la seva configuració personalitzada.
     SetupPerso=D'acord a la teva configuració
     PasswordPatternDesc=Descripció patró contrasenya
    @@ -1195,23 +1205,23 @@ UserMailRequired=E-mail necessari per crear un usuari nou
     HRMSetup=Configuració de mòdul de gestió de recursos humans
     ##### Company setup #####
     CompanySetup=Configuració del mòdul empreses
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=La funció de les notificacions permet enviar automàticament un e-mail per alguns esdeveniments de Dolibarr. Els destinataris de les notificacions poden definir-se:
     NotificationsDescUser=* per usuaris, un usuari cada vegada
     NotificationsDescContact=* per contactes de tercers (clients o proveïdors), un contacte cada vegada
     NotificationsDescGlobal=* o definint un destí global de correu electrònic en la pàgina de configuració del mòdul
    -ModelModules=Models de documents
    -DocumentModelOdt=Generació des dels documents amb format OpenDocument (Arxiu .ODT OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Marca d'aigua en els documents esborrany
     JSOnPaimentBill=Activar funció per autocompletar les línies de pagament a les entrades de pagament
    -CompanyIdProfChecker=Règles sobre els ID professionals
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Ha de ser únic?
    -MustBeMandatory=Obligatori per a crear tercers?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Obligatori per validar factures?
     TechnicalServicesProvided=Prestació de serveis tècnics
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=URL d'origen del servidor %s: %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Un vincle d'exportació del calendari en format <b>%s</b> estarà disponible a la url: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Un vincle d'exportació del calendari en format <b>%s</b>
     BillsSetup=Configuració del mòdul Factures
     BillsNumberingModule=Mòdul de numeració de factures i abonaments
     BillsPDFModules=Models de documents de factures
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Models de documents de pagament
     CreditNote=Abonament
     CreditNotes=Abonaments
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Gestiona un compte d'usuari per a cada soci
     AdherentMailRequired=E-Mail obligatori per crear un nou soci
     MemberSendInformationByMailByDefault=Casella de verificació per enviar un missatge de confirmació als socis (validació o nova subscripció) activada per defecte
     VisitorCanChooseItsPaymentMode=El visitant pot triar entre els modes de pagament disponibles
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Configuració de LDAP
     LDAPGlobalParameters=Paràmetres globals
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Prova la sincronització del tipus de membre
     LDAPTestSearch= Provar una recerca LDAP
     LDAPSynchroOK=Prova de sincronització realitzada correctament
     LDAPSynchroKO=Prova de sincronització errònia
    -LDAPSynchroKOMayBePermissions=Error de la prova de sincronització. Comproveu que la connexió al servidor sigui correcta i que permet les actualitzacions LDAP
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=Connexió TCP al servidor LDAP efectuada (Servidor=%s, Port=%s)
     LDAPTCPConnectKO=Error de connexió TCP al servidor LDAP (Servidor=%s, Port=%s)
    -LDAPBindOK=Connexió/Autenticació al servidor LDAP aconseguida (Servidor=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Error de connexió/autenticació al servidor LDAP (Servidor=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=Servidor LDAP configurat en versió 3
     LDAPSetupForVersion2=Servidor LDAP configurat en versió 2
     LDAPDolibarrMapping=Mapping Dolibarr
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Exemple : samaccountname
     LDAPFieldFullname=Nom complet
     LDAPFieldFullnameExample=Exemple : cn
    -LDAPFieldPasswordNotCrypted=Contrasenya no encriptada
    -LDAPFieldPasswordCrypted=Contrasenya encriptada
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Exemple : userPassword
     LDAPFieldCommonNameExample=Exemple : cn
     LDAPFieldName=Nom
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=Aquesta pàgina us permet definir el nom d'atributs LDAP a
     LDAPDescValues=Els valors d'exemples s'adapten a <b>OpenLDAP</b> amb els schemas carregats: <b>core.schema, cosine.schema, inetorgperson.schema </b>). Si vostè utilitza els a valors suggerits i OpenLDAP, modifiqui el seu fitxer de configuració LDAP <b>slapd.conf </b> per a tenir tots aquests schemas actius.
     ForANonAnonymousAccess=Per un accés autentificat
     PerfDolibarr=Configuració rendiment/informe d'optimització
    -YouMayFindPerfAdviceHere=En aquesta pàgina trobareu diverses proves i consells relacionats amb el rendiment.
    -NotInstalled=No instal·lat, de manera que el servidor no baixa de rendiment amb això.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Aplicació memòria cau
     MemcachedNotAvailable=No s'ha trobat una aplicació de cache. Pot millorar el rendiment instal·lant un cache server Memcached i un mòdul capaç d'utilitzar aquest servidor de cache.<br>Mes informació aquí <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Tingui en compte que alguns hostings no ofereixen servidors cache.
     MemcachedModuleAvailableButNotSetup=Mòdul de memoria cache actiu, però la configuració del mòdul no està completa.
     MemcachedAvailableAndSetup=Modul de memoria cache dedicada a utilitzar el servidor memcached està habilitat.
     OPCodeCache=OPCode memòria cau
    -NoOPCodeCacheFound=No s'ha trobat cap opcode memòria cau. Pot ser que estigui utilitzant un altre opcode com XCache o eAccelerator (millor), o potser no tingui opcode memòria cau (pitjor).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=Memòria cau HTTP per a estadístiques de recursos (css, img, javascript)
     FilesOfTypeCached=Fitxers de tipus %s s'emmagatzemen en memòria cau pel servidor HTTP
     FilesOfTypeNotCached=Fitxers de tipus %s no s'emmagatzemen en memòria cau pel servidor HTTP
     FilesOfTypeCompressed=Fitxers de tipus %s són comprimits pel servidor HTTP
     FilesOfTypeNotCompressed=Fitxers de tipus %s no són comprimits pel servidor HTTP
     CacheByServer=Memòria cau amb el servidor
    -CacheByServerDesc=Per exemple, utilitzant la directiva Apache "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Memòria cau del navegador
     CompressionOfResources=Compressió de les respostes HTTP
    -CompressionOfResourcesDesc=Per exemple, utilitzant la directiva Apache "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=La detecció automàtica no és possible amb els navegadors actuals
    -DefaultValuesDesc=Pots definir/forçar aquí el valor predeterminat que vols obtenir quan crees un registre nou, i/o filtres predeterminats o ordenació quan el teu llistat es registri.
    -DefaultCreateForm=Valors per defecte (en formularis a crear)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Filtres de cerca per defecte
     DefaultSortOrder=Tipus d'ordenació per defecte
     DefaultFocus=Camps d'enfocament per defecte
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Configuració del mòdul Productes
     ServiceSetup=Configuració del mòdul Serveis
     ProductServiceSetup=Configuració dels mòduls Productes i Serveis
     NumberOfProductShowInSelect=Nº de productes màx a les llistes (0= sense límit)
    -ViewProductDescInFormAbility=Visualització de les descripcions dels productes en els formularis
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activa en la pestanya fitxers adjunts de productes/serveis una opció per convinar el document de producte en PDF a un pressupost en PDF (si el producte/servei es troba en el pressupost)
    -ViewProductDescInThirdpartyLanguageAbility=Visualització de les descripcions de productes en l'idioma del tercer
    -UseSearchToSelectProductTooltip=També si vostè té un gran número de productes (> 100.000), pot augmentar la velocitat mitjançant l'estableciment. PRODUCT_DONOTSEARCH_ANYWHERE amb la constant a 1 a Configuració --> Altres. La cerca serà limitada a la creació de la cadena
    -UseSearchToSelectProduct=Espera a que es prema una tecla abans de carregar el contingut de la llista combinada de productes (Açò pot incrementar el rendiment si té un gran nombre de productes)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Tipus de codi de barres utilitzat per defecte per als productes
     SetDefaultBarcodeTypeThirdParties=Tipus de codi de barres utilitzat per defecte per als tercers
     UseUnits=Defineix una unitat de mesura per Quantitats per les línies de pressupostos, comandes o factures.
    @@ -1503,7 +1516,7 @@ SendingsSetup=Configuració del mòdul Expedicions
     SendingsReceiptModel=Model de rebut de lliurament
     SendingsNumberingModules=Mòduls de numeració de notes de lliurament
     SendingsAbility=Suport en fulles d'expedició per entregues de clients
    -NoNeedForDeliveryReceipts=En la majoria dels casos, les notes d'entrega (llista de productes enviats) també actua com a nota de recepció i son firmades per el client. La gestió de les notes de recepció és per tant redundant i rara vegada s'activarà.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Text lliure en els enviaments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Mòdul de numeració de rebut de lliuraments de productes
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Editor avançat
     ActivateFCKeditor=Activar editor avançat per a :
     FCKeditorForCompany=Creació/edició WYSIWIG de la descripció i notes dels tercers
     FCKeditorForProduct=Creació/edició WYSIWIG de la descripció i notes dels productes/serveis
    -FCKeditorForProductDetails=Creació/edició WYSIWIG de les línies de detalls dels productes (comandes, pressupostos, factures, etc.). <font class="warning">Atenció: L'ús d'aquesta opció no és recomanable, ja que pot crear problemes amb els caràcters especials i el formateix de pàgina al generar arxius PDF.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= Creació/edició WYSIWIG dels E-Mails
     FCKeditorForUserSignature=Creació/edició WYSIWIG de la signatura de l'usuari
     FCKeditorForMail=Edició/creació WYSIWIG per tots els e-mails (excepte Eines->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=La connexió s'ha establert, però la base de dades no sembla de OSCommerce.
    -OSCommerceTestOk=La connexió al servidor '%s' sobre la base '%s' per l'usuari '%s' és correcta.
    -OSCommerceTestKo1=La connexió al servidor '%s' s'ha completat però amb la base de dades '%s' no s'ha pogut assolir.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=La connexió al servidor '%s' a la base '%s' per l'usuari '%s' ha estat satisfactòria.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=La connexió al servidor '%s'  per l'usuari '%s' ha fallat.
     ##### Stock #####
     StockSetup=Configuració del mòdul de Estoc
    -IfYouUsePointOfSaleCheckModule=Si utilitza un mòdul de Punt de Venda (mòdul TPV per defecte o un altre mòdul extern), aquesta configuració pot ser ignorada pel seu mòdul de Punt de Venda. La major part de mòduls TPV estan dissenyats per crear immediatament una factura i disminuir l'estoc amb qualsevol d'aquestes opcions. Per tant, si vostè necessita o no disminuir l'estoc en el registre d'una venda del seu punt de venda, controli també la configuració del seu mòdul de TPV.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menú eliminat
     Menus=Menús
    @@ -1548,7 +1561,7 @@ DetailRight=Condició de visualització completa o vidrossa
     DetailLangs=Nom del fitxer Lang pel codi d'etiqueta de traducció
     DetailUser=Intern / Extern / Tots
     Target=Objectiu
    -DetailTarget=Objectiu per enllaços (_blank obre una nova finestra)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Nivell (-1:menú superior, 0:principal, >0 menú y submenú)
     ModifMenu=Modificació del menú
     DeleteMenu=Eliminar entrada de menú
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=La càrrega de l'IVA és: <br>-en l'enviament dels béns (e
     OptionVatDebitOptionDesc=La càrrega de l'IVA és: <br>-en l'enviament dels béns en la pràctica s'usa la data de la factura<br>-sobre la facturació dels serveis
     OptionPaymentForProductAndServices=Base de caixa de productes i serveis
     OptionPaymentForProductAndServicesDesc=L'IVA es deu: <br> - pel pagament de béns <br> - sobre els pagaments per serveis
    -SummaryOfVatExigibilityUsedByDefault=Moment d'exigibilitat per defecte l'IVA per a l'opció escollida:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Al lliurament
     OnPayment=Al pagament
     OnInvoice=A la factura
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Codi comptable compres
     AgendaSetup=Mòdul configuració d'accions i agenda
     PasswordTogetVCalExport=Clau d'autorització vCal export link
     PastDelayVCalExport=No exportar els esdeveniments de més de
    -AGENDA_USE_EVENT_TYPE=Utilitzar tipus d'events (gestionables a Configuració -> Diccionaris -> Tipus d'events d'agenda)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Defineix automàticament aquest valor per defecte pels tipus d'events en el formulari de creació d'events
    -AGENDA_DEFAULT_FILTER_TYPE=Establir per defecte aquest tipus d'esdeveniment en el filtre de cerca en la vista de la agenda
    -AGENDA_DEFAULT_FILTER_STATUS=Establir per defecte aquest estat de esdeveniments en el filtre de cerca en la vista de la agenda
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Establir la pestanya per defecte al seleccionar el menú Agenda
     AGENDA_REMINDER_EMAIL=Activar el recordatori d'esdeveniments <b>per correu electrònic</b> (es pot definir l'opció retard en cada esdeveniment). Nota: el mòdul <strong>%s</strong> ha d'estar habilitat i configurat correctament per tenir un recordatori enviat amb la freqüència correcta.
    -AGENDA_REMINDER_BROWSER=Habilitar un recordatori d'esdeveniment <b>al navegador dels usuaris</b> (quan s'arribi a la data de l'esdeveniment, cada usuari pot rebutjar aquests recordatoris quan li demani confirmació el navegador)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Habilita les notificacions sonores
     AGENDA_SHOW_LINKED_OBJECT=Mostra l'objecte vinculat a la vista d'agenda
     ##### Clicktodial #####
     ClickToDialSetup=Configuració del mòdul Click To Dial
     ClickToDialUrlDesc=Es crida l'URL quan es fa un clic a la imatge miniatura de telèfon. A l'URL, pots utilitzar les etiquetes <br><b>__PHONETO__</b> que serà reemplaçada pel número de telèfon de la persona a trucar <br><b>__PHONEFROM__</b> que serà reemplaçada pel número de telèfon de la persona que truca (el vostre)  <br><b>__LOGIN__</b> que serà reemplaçada pel teu usuari d'inici de clicktodial (definit a la fitxa d'usuari)  <br><b>__PASS__</b> que serà reemplaçada per la contrasenya de clicktodial (definida a la fitxa d'usuari).
    -ClickToDialDesc=Aquest mòdul permet afegir una icona després del número de telèfon de contactes Dolibarr. Un clic en aquesta icona, truca a un servidor amb un URL que s'indica a continuació. Això pot ser usat per anomenar al sistema centre de Dolibarr que pot trucar al número de telèfon en un sistema SIP, per exemple.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Utilitzar sols l'enllaç "tel:" als números de telèfon
    -ClickToDialUseTelLinkDesc=Utilitza aquest mètode si els teus usuaris tenen un softphone o una interfície de software instal·lat en el mateix ordinador del navegador, i et truca quan fas clic en un enllaç del navegador que comença amb "tel:". Si necessites una solució amb un servidor complet (sense necessitat de instal·lació de programari en local), hauries de posar "No" i omplir el següent camp.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=TPV
     CashDeskSetup=Mòdul de configuració Terminal Punt de Venda
    -CashDeskThirdPartyForSell=Tercer genéric a utilitzar per a les vendes
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Compte per defecte a utilitzar pels cobraments en efectiu
     CashDeskBankAccountForCheque= Compte per defecte a utilitzar pels cobraments amb xecs
     CashDeskBankAccountForCB= Compte per defecte a utilitzar pels cobraments amb targeta de crèdit
    -CashDeskDoNotDecreaseStock=Desactivar disminució d'estoc si un venda es realitzada des de un Punt de Venda (si "no", la disminució d'estoc es realitza des del TPV, encara que sigui l'opció indicada en el modul Estoc).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Forçar i restringir el magatzem a usar l'stock a disminuir
    -StockDecreaseForPointOfSaleDisabled=Disminució d'estoc des de TPV descativat
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=La disminució d'estoc en el TPV no es compatible amb la gestió de lots
    -CashDeskYouDidNotDisableStockDecease=Vostè no ha desactivat la disminució d'estoc al fer una venda des del TPV. Així que es requereix un magatzem.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Configuració del mòdul Bookmark
    -BookmarkDesc=Aquest mòdul li permet gestionar els enllaços i accessos directes. També permet afegir qualsevol pàgina de Dolibarr o enllaç web al menú d'accés ràpid de l'esquerra.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Nombre màxim de marcadors que es mostrarà en el menú
     ##### WebServices #####
     WebServicesSetup=Configuració del mòdul webservices
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Mòdul de numeració de rebut de xec
     MultiCompanySetup=Configuració del mòdul Multi-empresa
     ##### Suppliers #####
     SuppliersSetup=Configuració del mòdul Proveïdors
    -SuppliersCommandModel=Plantilla completa de la comanda de compra (logotip ...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Plantilla completa de la factura del proveïdor (logotip ...)
     SuppliersInvoiceNumberingModel=Models de numeració de factures de proveïdor
     IfSetToYesDontForgetPermission=Si esta seleccionat, no oblideu de modificar els permisos en els grups o usuaris per permetre la segona aprovació
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Configuració del mòdul Projectes
     ProjectsModelModule=Model de document per a informes de projectes
     TasksNumberingModules=Mòdul numeració de tasques
     TaskModelModule=Mòdul de documents informes de tasques
    -UseSearchToSelectProject=S'espera a que premeu al menys una tecla per carregar el contingut de la llista desplegable de Projecte (Això incrementa el rendiment en el cas de que hi hagi un nombre llarg de projectes, però és menys convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Períodes comptables
    @@ -1672,7 +1685,7 @@ NbNumMin=Nombre mínim de caràcters numèrics
     NbSpeMin=Nombre mínim de caràcters especials
     NbIteConsecutive=Capacitat màxima per repetir mateixos caràcters
     NoAmbiCaracAutoGeneration=No utilitzar caràcters semblants ("1", "l", "i", "|", "0", "O") per a la generació automàtica
    -SalariesSetup=Configuració dels sous dels mòduls
    +SalariesSetup=Configuració del mòdul de salaris
     SortOrder=Ordre de classificació
     Format=Format
     TypePaymentDesc=0:Forma de pagament de client, 1:Forma de pagament a proveïdor, 2:Mateixa forma de pagament de clients i proveïdors
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Pot trobar opcions per not
     ListOfNotificationsPerUser=Llista de notificacions per usuari*
     ListOfNotificationsPerUserOrContact=Llista de notificacions per usuari* o per contacte**
     ListOfFixedNotifications=Llistat de notificacions fixes
    -GoOntoUserCardToAddMore=Ves a la pestanya "Notificacions" d'un usuari per afegir o eliminar notificacions per usuaris.
    -GoOntoContactCardToAddMore=Vagi a la pestanya "Notificacions" d'un contacte de tercers per afegir o eliminar notificacions per contactes/direccions
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Valor mínim/llindar
     BackupDumpWizard=Asistent per crear una copia de seguretat de la base de dades
     SomethingMakeInstallFromWebNotPossible=No és possible la instal·lació de mòduls externs des de la interfície web per la següent raó:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=La instal·lació de mòduls externs d
     ConfFileMustContainCustom=Per instal·lar o crear un mòdul extern desde l'aplicació es necessita desar els fitxers del mòdul en el directori <strong>%s</strong>. Per permetre a Dolibarr el processament d'aquest directori, has de configurar el teu <strong>conf/conf.php</strong> afegint aquestes 2 línies:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Remarca línies de la taula quan el ratolí passi per sobre
     HighlightLinesColor=Remarca el color de la línia quan el ratolí hi passa per sobre (deixa-ho buit per a no remarcar)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Color del text del títol de la pàgina
     LinkColor=Color dels enllaços
     PressF5AfterChangingThis=Prem CTRL+F5 en el teclat o neteja la memòria cau del navegador després de canviar aquest valor per fer-ho efectiu
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Color de fons per les línies parells de les taules
     MinimumNoticePeriod=Període mínim de notificació (La solicitud de dia lliure serà donada abans d'aquest període)
     NbAddedAutomatically=Número de dies afegits en comptadors d'usuaris (automàticament) cada mes
     EnterAnyCode=Aquest camp conté una referència a un identificador de línia. Introdueix qualsevol valor però sense caràcters especials.
    -UnicodeCurrency=Introduïu aquí entre claus, la llista de nombre de bytes que representen el símbol de moneda. Per Exemple: per $, introdueix [36] - per als reals de Brasil R$ [82,36] - per € , introdueix [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=El color RGB es troba en format HEX, per exemple: FF0000
     PositionIntoComboList=Posició de la línia en llistes combo
     SellTaxRate=Valor de l'IVA
     RecuperableOnly=Sí per l'IVA "No percebut sinó recuperable" dedicat per a algun estat a França. Manteniu el valor "No" en tots els altres casos.
     UrlTrackingDesc=Si el proveïdor o el servei de transport ofereixen una pàgina o un lloc web per comprovar l'estat del teu enviament , pots entrar aquí. Pots utilitzar la tecla {TrackID} en els paràmetres d'URL perquè el sistema ho reemplaçarà amb el valor del número de seguiment de l'usuari utilitzat en la targeta d'embarcament.
    -OpportunityPercent=Quan crees una oportunitat, es defineix un import estimat de projecte. D'acord a l'estat de l'oportunitat, aquest import es pot multiplicar per aquest taxa per avaluar l'import global eventual per totes les oportunitats que es poden generar. El valor és un percentatge (entre o i 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=Aquest registre de plantilla es dedica a quin element
     TypeOfTemplate=Tipus de plantilla
    -TemplateIsVisibleByOwnerOnly=La plantilla és visible només pel propietari
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible arreu
     VisibleNowhere=Visible enlloc
     FixTZ=Fixar zona horaria
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=Estàs utilitzant l'última versió estable
     TitleExampleForMajorRelease=Exemple de missatge que es pot utilitzar per anunciar aquesta actualització de versió (ets lliure d'utilitzar-ho a les teves webs)
     TitleExampleForMaintenanceRelease=Exemple de missatge que es pot utilitzar per anunciar aquesta actualització de manteniment (ets lliure d'utilitzar-ho a les teves webs)
     ExampleOfNewsMessageForMajorRelease=Disponible ERP/CRM Dolibarr %s. La versió %s és una versió major amb un munt de noves característiques, tant per a usuaris com per a desenvolupadors. Es pot descarregar des de la secció de descàrregues del portal https://www.dolibarr.org (subdirectori versions estables). Podeu llegir <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> per veure la llista completa dels canvis.
    -ExampleOfNewsMessageForMaintenanceRelease=Disponible ERP/CRM Dolibarr %s. La versió %s és una versió de manteniment, de manera que només conté correccions d'errors. Recomanem a tothom que usi una versió anterior que actualitzi a aquesta. Com qualsevol versió de manteniment, no hi ha novetats. Es pot descarregar des de la secció de descàrregues del portal https://www.dolibarr.org (subdirectori versions estables subdirectori). Podeu llegir <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> per veure la llista completa dels canvis.
    -MultiPriceRuleDesc=Quan l'opció "Varis nivells de preus per producte/servei" està activada, pots definir diferents preus (un preu per nivell) per cada producte. Per estalviar temps, pots entrar una regla per tenir preu per cada nivell autocalculat d'acord al preu del primer nivell, així només hauràs d'introduir el preu del primer nivell de cada producte. Aquesta pàgina està aqui per estalviar temps i pot ser útil només si els teus preus per cada nivell son relatius al primer nivell. Pots ignorar aquesta pàgina en la majoria dels casos.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Plantilles per documents de productes
    -ToGenerateCodeDefineAutomaticRuleFirst=Per poder generar codis automàticament, primer has de definir un responsable de autodefinir els números del codi de barres.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=Veure * nota per llistat de possibles variables de substitució
     SeeChangeLog=Veure el fitxer ChangeLog (només en anglès)
     AllPublishers=Tots els publicadors
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Afegeix altres pàgines o serveis
     AddModels=Afegeix document o model de numeració
     AddSubstitutions=Afegeix claus de substitució
     DetectionNotPossible=Detecció no possible
    -UrlToGetKeyToUseAPIs=Url per aconseguir l'autenticador que permetrà utilitzar l'API (un cop s'ha rebut es guarda a la taula d'usuaris de la base de dades i s'ha de proporcionar cada cop que crides l'API)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Llistat de APIs disponibles
    -activateModuleDependNotSatisfied=El mòdul "%s" depèn del mòdul "%s" que no s'ha trobat, així que el mòdul "%1$s" pot funcionar de forma incorrecte. Instal·la el mòdul "%2$s" o deshabilita el mòdul "%1$s" si vols estar segur de no tenir cap sorpresa
    -CommandIsNotInsideAllowedCommands=La comanda que intentes executar no es troba en la llista de comandes permeses definides en paràmetres <strong>$dolibarr_main_restrict_os_commands</strong> en el fitxer <strong>conf.php</strong>.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Pàgina de destinació principal
    -SamePriceAlsoForSharedCompanies=Si utilitzes el mòdul Multiempresa, amb l'elecció de "preu únic", el preu serà el mateix per totes les empreses si els productes estan compartits entre elles
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=S'ha activat el mòdul. Els permisos per als mòdul(s) activats es donen només als usuaris administradors. Podria ser necessari concedir permisos a altres usuaris o grups de forma manual si és necessari.
    -UserHasNoPermissions=Aquest usuari no té permisos definits
    -TypeCdr=Utilitze "Cap" si la data de termini de pagament és la data de la factura més un delta en dies (delta és el camp "Nº de dies")<br>Utilitze "A final de mes", si, després del delta, la data ha d'aumentar-se per arribar a final de mes (+ "Offset" opcional en dies)<br>Utilitze "Actual/Següent" per tindre la data de termini de pagament sent el primer N de cada mes (N es guarda en el camp "Nº de dies")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Moneda de referència de l'empresa (entra a la configuració de l'empresa per canviar-la)
    -WarningNoteModuleInvoiceForFrenchLaw=Aquest mòdul %s compleix les lleis franceses (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=Aquest mòdul %s compleix les lleis franceses (Loi Finance 2016) perquè el mòdul Non Reversible Logs s'ha activat automàticament.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Intenta instal·lar el mòdul %s que és un mòdul extern. Activar un mòdul extern significa que confia en l'editor del mòdul i està segur que aquest mòdul no alterarà negativament el comportament de la seva aplicació i compleix les lleis del seu país (%s). Si el mòdul ofereix una característica no legal, es fa responsable de l'ús d'un software il·legal.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Marge esquerre al PDF
     MAIN_PDF_MARGIN_RIGHT=Marge dret al PDF
     MAIN_PDF_MARGIN_TOP=Marge superior al PDF
     MAIN_PDF_MARGIN_BOTTOM=Marge inferior al PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Estableixi a SÍ si aquest grup és un càlcul d'altres grups
    -EnterCalculationRuleIfPreviousFieldIsYes=Introduïu la regla de càlculs si el camp anterior ha estat posat a SÍ (Per exemple 'CODEGRP1 + CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=S'ha trobat diverses variants d'idiomes
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Elimina els caràcters especials
     COMPANY_AQUARIUM_CLEAN_REGEX=Filtre de Regex per netejar el valor (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=Contacte GDPR
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuració del mòdul Recurs
     UseSearchToSelectResource=Utilitza un formulari de cerca per a seleccionar un recurs (millor que una llista desplegable)
     DisabledResourceLinkUser=Desactiva la funció per enllaçar un recurs als usuaris
     DisabledResourceLinkContact=Desactiva la funció per enllaçar un recurs als contactes
     ConfirmUnactivation=Confirma el restabliment del mòdul
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/ca_ES/companies.lang b/htdocs/langs/ca_ES/companies.lang
    index ba2bbe7ff74..4ab31fa0e46 100644
    --- a/htdocs/langs/ca_ES/companies.lang
    +++ b/htdocs/langs/ca_ES/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Seleccionar un tercer
     ConfirmDeleteCompany=Esteu segur de voler eliminar aquesta empresa i tota la informació dependent?
     DeleteContact=Eliminar un contacte
     ConfirmDeleteContact=Esteu segur de voler eliminar aquest contacte i tota la seva informació dependent?
    -MenuNewThirdParty=Nou tercer
    -MenuNewCustomer=Nou client
    -MenuNewProspect=Nou client potencial
    -MenuNewSupplier=Nou proveïdor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Nou particular
     NewCompany=Nova empresa (client potencial, client, proveïdor)
    -NewThirdParty=Nou tercer (client potencial, client, proveïdor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Crea un tercer (proveïdor)
     CreateThirdPartyOnly=Crea tercer
     CreateThirdPartyAndContact=Crea un tercer + un contacte fill
    @@ -27,20 +27,20 @@ CompanyName=Raó social
     AliasNames=Àlies (nom comercial, marca, ...)
     AliasNameShort=Nom comercial
     Companies=Empreses
    -CountryIsInEEC=Pais de la Comunitat Econòmica Europea
    -ThirdPartyName=Nom del tercer
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Correu electrònic del tercer
    -ThirdParty=Tercer
    -ThirdParties=Tercers
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Clients potencials
     ThirdPartyProspectsStats=Clients potencials
     ThirdPartyCustomers=Clients
     ThirdPartyCustomersStats=Clients
     ThirdPartyCustomersWithIdProf12=Clients amb %s o %s
     ThirdPartySuppliers=Proveïdors
    -ThirdPartyType=Tipus de tercer
    +ThirdPartyType=Type of company
     Individual=Particular
    -ToCreateContactWithSameName=Es crearà un contacte/adreça automàticament amb la mateixa informació que el tercer d'acord amb el propi tercer. En la majoria de casos, fins i tot si el tercer és una persona física, la creació d'un sol tercer ja és suficient.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Seu Central
     Subsidiaries=Filials
     ReportByMonth=Informe per mes
    @@ -75,12 +75,12 @@ Zip=Codi postal
     Town=Població
     Web=Web
     Poste= Càrrec
    -DefaultLang=Idioma per defecte
    -VATIsUsed=IVA està utilitzant-se
    -VATIsUsedWhenSelling=Això defineix si aquest tercer inclou un impost de venda o no quan fa una factura als seus propis clients
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=IVA no està utilitzant-se
     CopyAddressFromSoc=Omple l'adreça amb l'adreça del tercer
    -ThirdpartyNotCustomerNotSupplierSoNoRef=El tercer no és client ni proveïdor, no hi ha objectes vinculats disponibles
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=El tercer no és client ni proveïdor, els descomptes no estan disponibles
     PaymentBankAccount=Compte bancari de pagament
     OverAllProposals=Pressupostos
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=ID IVA
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=ID impost
     VATIntraSyntaxIsValid=Sintaxi vàlida
     VATReturn=Devolució de l'IVA
    @@ -267,15 +267,15 @@ Prospect=Client potencial
     CustomerCard=Fitxa client
     Customer=Client
     CustomerRelativeDiscount=Descompte client relatiu
    -SupplierRelativeDiscount=Relative vendor discount
    +SupplierRelativeDiscount=Descompte relatiu de proveïdor
     CustomerRelativeDiscountShort=Descompte relatiu
     CustomerAbsoluteDiscountShort=Descompte fixe
     CompanyHasRelativeDiscount=Aquest client té un descompte per defecte de <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Aquest client no té descomptes relatius per defecte
     HasRelativeDiscountFromSupplier=Teniu un descompte predeterminat de <b> %s%% </b> d'aquest proveïdor
     HasNoRelativeDiscountFromSupplier=No tens descomptes relatius per defecte d'aquest proveïdor
    -CompanyHasAbsoluteDiscount=Aquest client té descomptes disponibles (notes de crèdit o bestretes) per <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=Aquest client té un descompte disponible (comercial, de pagament) per a <b>%s</b>%s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Aquest client encara té abonaments per <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=No tens crèdit disponible per descomptar d'aquest proveïdor
     HasAbsoluteDiscountFromSupplier=Disposes de descomptes (notes de crèdits o pagaments pendents) per a <b> %s </b> %s d'aquest proveïdor
    @@ -284,10 +284,10 @@ HasCreditNoteFromSupplier=Teniu notes de crèdit per a <b> %s </b> %s d'aquest p
     CompanyHasNoAbsoluteDiscount=Aquest client no té més descomptes fixos disponibles
     CustomerAbsoluteDiscountAllUsers=Descomptes absoluts dels clients (concedits per tots els usuaris)
     CustomerAbsoluteDiscountMy=Descomptes absoluts dels clients (concedits per tu mateix)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +SupplierAbsoluteDiscountAllUsers=Descomptes absoluts de proveïdor (introduïts per tots els usuaris)
    +SupplierAbsoluteDiscountMy=Descomptes absoluts del proveïdor (introduït per tu mateix)
     DiscountNone=Cap
    -Supplier=Proveïdor
    +Supplier=Vendor
     AddContact=Crear contacte
     AddContactAddress=Crear contacte/adreça
     EditContact=Editar contacte
    @@ -303,22 +303,22 @@ AddThirdParty=Crea tercer
     DeleteACompany=Eliminar una empresa
     PersonalInformations=Informació personal
     AccountancyCode=Compte comptable
    -CustomerCode=Codi client
    -SupplierCode=Codi del proveïdor
    -CustomerCodeShort=Codi client
    -SupplierCodeShort=Codi del proveïdor
    -CustomerCodeDesc=Codi únic client per a cada client
    -SupplierCodeDesc=Codi de proveïdor, únic per a tots els proveïdors
    +CustomerCode=Codi de client
    +SupplierCode=Codi de proveïdor
    +CustomerCodeShort=Codi de client
    +SupplierCodeShort=Codi de proveïdor
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Requerida si el tercer és un client o client potencial
     RequiredIfSupplier=Obligatori si un tercer és proveïdor
    -ValidityControledByModule=Validació controlada pel mòdul
    -ThisIsModuleRules=Aquesta és la regla per aquest mòdul
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Client potencial a contactar
     CompanyDeleted=L'empresa "%s" ha estat eliminada
     ListOfContacts=Llistat de contactes
    -ListOfContactsAddresses=Llistat de contactes/adreces
    -ListOfThirdParties=Llistat de tercers
    -ShowCompany=Mostra el tercer
    +ListOfContactsAddresses=Llistat de contactes
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Mostrar contacte
     ContactsAllShort=Tots (sense filtre)
     ContactType=Tipus de contacte
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Aquest contacte no és contacte de cap pressupost
     NoContactForAnyContract=Aquest contacte no és contacte de cap contracte
     NoContactForAnyInvoice=Aquest contacte no és contacte de cap factura
     NewContact=Nou contacte
    -NewContactAddress=Nou contacte/adreça
    +NewContactAddress=New Contact/Address
     MyContacts=Els meus contactes
     Capital=Capital
     CapitalOf=Capital de %s
     EditCompany=Modificar empresa
    -ThisUserIsNot=Aquest usuari no és un client potencial, ni un client ni un proveïdor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Verificar
    -VATIntraCheckDesc=L'enllaç <b>%s</b> permet consultar el NIF intracomunitari al servei de control europeu. Es requereix accés a internet per a que el servei funcioni.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Verifica el NIF Intracomunitari a la web de la Comissió Europea
    -VATIntraManualCheck=Podeu també fer una verificació manual a la web europea <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Comprovació impossible. El servei de comprovació no és prestat pel país membre (%s).
    -NorProspectNorCustomer=Ni client, ni client potencial
    -JuridicalStatus=Forma legal
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Empleats
     ProspectLevelShort=Potencial
     ProspectLevel=Nivell de client potencial
    @@ -387,12 +387,12 @@ ExportCardToFormat=Exporta fitxa a format
     ContactNotLinkedToCompany=Contacte no vinculat a un tercer
     DolibarrLogin=Login usuari
     NoDolibarrAccess=Sense accés d'usuari
    -ExportDataset_company_1=Tercers (empreses/entitats/persones físiques) i propietats
    -ExportDataset_company_2=Contactes de tercers i atributs
    -ImportDataset_company_1=Tercers (empreses/entitats/persones físiques) i propietats
    -ImportDataset_company_2=Contactes/Adreces (de tercers o no) i atributs
    -ImportDataset_company_3=Comptes bancaris de tercers
    -ImportDataset_company_4=Tercers/Comercials (Assigna usuaris comercials a tercers)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Nivell de preus
     DeliveryAddress=Adreça d'enviament
     AddAddress=Afegeix adreça
    @@ -402,16 +402,16 @@ DeleteFile=Elimina el fitxer
     ConfirmDeleteFile=Esteu segur de voler eliminar aquest fitxer?
     AllocateCommercial=Assignat a un agent comercial
     Organization=Organisme
    -FiscalYearInformation=Informació de l'any fiscal
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Mes d'inici d'exercici
    -YouMustAssignUserMailFirst=Has de crear un correu electrònic per aquest usuari abans d'afegir notificacions de correu electrònic per ell.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Per poder afegir notificacions de correu electrònic, en primer lloc s'ha de definir contactes amb correu electrònic vàlid pel tercer
    -ListSuppliersShort=Llista de proveïdors
    -ListProspectsShort=Llistat de clients potencials
    -ListCustomersShort=Llistat de clients
    -ThirdPartiesArea=Àrea de tercers i contactes
    -LastModifiedThirdParties=Últims %s tercers modificats
    -UniqueThirdParties=Total de tercers únics
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Actiu
     ActivityCeased=Tancat
     ThirdPartyIsClosed=Tercer està tancat
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Factura pendent actual
     OutstandingBill=Max. de factures pendents
     OutstandingBillReached=S'ha arribat al màx. de factures pendents
     OrderMinAmount=Import mínim per comanda
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Codi de client/proveïdor lliure sense verificació. Pot ser modificat en qualsevol moment.
     ManagingDirectors=Nom del gerent(s) (CEO, director, president ...)
     MergeOriginThirdparty=Duplicar tercer (tercer que vols eliminar)
     MergeThirdparties=Fusionar tercers
    -ConfirmMergeThirdparties=Estàs segur que vols fusionar aquest tercer amb l'actual? Tots els objectes relacionats (factures, comandes, ...) seran traslladats al tercer actual, i l'anterior duplicat serà esborrat.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=S'han fusionat els tercers
     SaleRepresentativeLogin=Nom d'usuari de l'agent comercial
     SaleRepresentativeFirstname=Nom de l'agent comercial
     SaleRepresentativeLastname=Cognoms de l'agent comercial
     ErrorThirdpartiesMerge=S'ha produït un error en suprimir els tercers. Verifiqueu el registre. S'han revertit els canvis.
    -NewCustomerSupplierCodeProposed=Nou codi de client o proveïdor proposat en cas de codi duplicat
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/ca_ES/errors.lang b/htdocs/langs/ca_ES/errors.lang
    index cb7dd9a7e2d..12fc104f2f7 100644
    --- a/htdocs/langs/ca_ES/errors.lang
    +++ b/htdocs/langs/ca_ES/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=El valor '%s' té un format de data no reconegut
     ErrorWrongDate=La data no es correcta!
     ErrorFailedToWriteInDir=No es pot escriure a la carpeta %s
     ErrorFoundBadEmailInFile=Trobada sintaxi incorrecta en email a %s línies en fitxer (exemple linia %s amb email=%s)
    -ErrorUserCannotBeDelete=No es pot eliminar l'usuari. És possible que estigui relacionat amb entitats de Dolibarr.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=No s'han indicat alguns camps obligatoris
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Error en la creació d'una carpeta. Comprovi que l'usuari del servidor web té drets d'escriptura en les carpetes de documents de Dolibarr. Si el paràmetre <b>safe_mode</b> està actiu en aquest PHP, Comproveu que els fitxers php dolibarr pertanyen a l'usuari del servidor web.
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Els valors de la llista han de ser indicats
     ErrorNoValueForCheckBoxType=Els valors de la llista de la casella de verificacó han de ser indicats
     ErrorNoValueForRadioType=Els valors de la llista han de ser indicats
     ErrorBadFormatValueList=La llista de valors no pot tenir més d'una coma: <u>%s</u>, però necessita com a mínim una: clau,valor
    -ErrorFieldCanNotContainSpecialCharacters=El camp <b>%s</b> no ha de contenir caràcters especials
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=El camp <b>%s</b> no ha de contenir caràcters especials, ni caràcters en majúscula i no pot contindre només números.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Mòdul de comptabilitat no activat
     ErrorExportDuplicateProfil=El nom d'aquest perfil ja existeix per aquest conjunt d'exportació
     ErrorLDAPSetupNotComplete=La configuració Dolibarr-LDAP és incompleta.
     ErrorLDAPMakeManualTest=S'ha creat un arxiu .ldif a la carpeta %s. Intenta carregar-lo manualment des de la línia de comandes per tenir més informació sobre l'error.
    -ErrorCantSaveADoneUserWithZeroPercentage=No es pot canviar una acció al estat no començada si teniu un usuari realitzant de l'acció.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=La referència utilitzada per a la creació ja existeix
     ErrorPleaseTypeBankTransactionReportName=Si us plau, tecleja el nom del extracte bancari on s'informa del registre (format AAAAMM o AAAAMMDD)
    -ErrorRecordHasChildren=No s'ha pogut eliminar el registre, ja que té alguns registres fills.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=L'objecte té almenys un fill de tipus %s
    -ErrorRecordIsUsedCantDelete=No es pot eliminar el registre. S'està utilitzant o incloent en un altre objecte.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript ha d'estar activat per a que aquesta opció pugui utilitzar-se. Per activar/desactivar JavaScript, ves al menú Inici->Configuració->Entorn.
     ErrorPasswordsMustMatch=Les 2 contrasenyes indicades s'han de correspondre
    -ErrorContactEMail=S'ha produït un error tècnic. Contacti amb l'administrador al e-mail <b>%s</b>, indicant el codi d'error <b>%s</b> en el seu missatge, o pot també adjuntar una còpia de pantalla d'aquesta pàgina.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Valor incorrecte per al camp número <b>%s</b> (el valor '<b>%s</b>' no compleix amb la regla <b>%s</b>)
     ErrorFieldValueNotIn=Valor incorrecte per al camp número <b>%s</b> (el valor '<b>%s</b>' no és un valors disponible en el camp <b>%s</b> de la taula <b>%s</b>)
     ErrorFieldRefNotIn=Valor incorrecte per al camp nombre <b>%s</b> (el valor '<b>%s</b>' no és una referència existent en <b>%s</b>)
    @@ -87,7 +88,8 @@ ErrorsOnXLines=Errors a <b>%s</b> línies font
     ErrorFileIsInfectedWithAVirus=L'antivirus no ha pogut validar aquest arxiu (és probable que estigui infectat per un virus)!
     ErrorSpecialCharNotAllowedForField=Els caràcters especials no són admesos pel camp "%s"
     ErrorNumRefModel=Hi ha una referència a la base de dades (%s) i és incompatible amb aquesta numeració. Elimineu la línia o renomeneu la referència per activar aquest mòdul.
    -ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorQtyTooLowForThisSupplier=Quantitat massa baixa per a aquest proveïdor o sense preu definit en aquest producte per a aquest proveïdor
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=La configuració de mòduls sembla incompleta. Ves a Inici - Configuració - Mòduls a completar.
     ErrorBadMask=Error en la màscara
     ErrorBadMaskFailedToLocatePosOfSequence=Error, sense número de seqüència en la màscara
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, valor de tornada a 0 incorrecte
     ErrorMaxNumberReachForThisMask=Capacitat màxima assolit per aquesta mascara
     ErrorCounterMustHaveMoreThan3Digits=El comptador ha de tenir més de 3 dígits
     ErrorSelectAtLeastOne=Error. Seleccioneu com a mínim una entrada.
    -ErrorDeleteNotPossibleLineIsConsolidated=Eliminació impossible ja que el registre està enllaçat a una transacció bancària conciliada
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s es troba assignat a altre tercer
     ErrorFailedToSendPassword=Error en l'enviament de la contrasenya
     ErrorFailedToLoadRSSFile=Error en la recuperació del flux RSS. Afegiu la constant MAIN_SIMPLEXMLLOAD_DEBUG si el missatge d'error no és molt explícit.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=El compte d'usuari de <b>%s</b> no s'ha trobat.
     ErrorLoginHasNoEmail=Aquest usuari no té e-mail. Impossible continuar.
     ErrorBadValueForCode=Valor incorrecte per codi de seguretat. Torna a intentar-ho amb un nou valor...
     ErrorBothFieldCantBeNegative=Els camps %s i %s no poden ser negatius
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=La quantitat a les línies de factures a clients no poden ser negatives
     ErrorWebServerUserHasNotPermission=El compte d'execució del servidor web <b>%s</b> no disposa dels permisos per això
     ErrorNoActivatedBarcode=No hi ha activat cap tipus de codi de barres
    @@ -138,7 +141,7 @@ ErrorBadFormat=El format és incorrecte!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, aquest soci encara no s'ha enllaçat a un tercer. Enllaça el soci a un tercer existent o crea un tercer nou abans de crear la quota amb factura.
     ErrorThereIsSomeDeliveries=Error, hi ha entrades vinculades a aquest enviament. No es pot eliminar
     ErrorCantDeletePaymentReconciliated=No pot esborrar un pagament que va generar una entrada de banc que va ser conciliada
    -ErrorCantDeletePaymentSharedWithPayedInvoice=No es pot eliminar un pagament de vàries factures amb alguna factura amb l'estat Pagada
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=No es pot assignar a la constant '%s'
     ErrorPriceExpression2=No es pot redefinir la funció incorporada'%s'
     ErrorPriceExpression3=Variable '%s' no definida a la definició de la funció
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=No s'esperava '%s'
     ErrorPriceExpression6=Nombre d'arguments inadequats (%s dades, %s esperats)
     ErrorPriceExpression8=Operador '%s' no esperat
     ErrorPriceExpression9=Ha succeït un error no esperat
    -ErrorPriceExpression10=Operador '%s' no té operant
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=S'esperava '%s'
     ErrorPriceExpression14=Divisió per zero
     ErrorPriceExpression17=Variable '%s' indefinida
    @@ -171,13 +174,13 @@ ErrorGlobalVariableUpdater4=El client SOAP ha fallat amb l'error '%s'
     ErrorGlobalVariableUpdater5=Sense variable global seleccionada
     ErrorFieldMustBeANumeric=El camp <b>%s</b> ha de ser un valor numèric
     ErrorMandatoryParametersNotProvided=Paràmetre/s obligatori/s no definits
    -ErrorOppStatusRequiredIfAmount=S'estableix una quantitat estimada per aquesta oportunitat/prospecte. Així que també has d'introduir el seu estat
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Definició incorrecta del menú Array en el descriptor del mòdul (valor incorrecte per a la clau fk_menu)
    -ErrorSavingChanges=Hi ha hagut un error al salvar els canvis
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=El magatzem és obligatori en la línia a enviar
     ErrorFileMustHaveFormat=El fitxer té format %s
    -ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    +ErrorSupplierCountryIsNotDefined=El país d'aquest proveïdor no està definit. Corregeix-lo primer.
     ErrorsThirdpartyMerge=No es poden combinar els dos registres. Petició cancelada.
     ErrorStockIsNotEnoughToAddProductOnOrder=No hi ha suficient estoc del producte %s per afegir-ho en una nova comanda.
     ErrorStockIsNotEnoughToAddProductOnInvoice=No hi ha suficient estoc del producte %s per afegir-ho en una nova factura.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=No s'ha trobat el fitxer. Pot ser que la clau co
     ErrorProductBarCodeAlreadyExists=El codi de barres de producte %s ja existeix en la referència d'un altre producte.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Tingueu en compte també que no és possible tenir un producte virtual amb auto increment/decrement de subproductes quan almenys un subproducte (o subproducte de subproductes) necessita un número de sèrie/lot.
     ErrorDescRequiredForFreeProductLines=La descripció és obligatòria per a línies amb producte de lliure edició
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=S'ha indicat una contrasenya per aquest soci. En canvi, no s'ha creat cap compte d'usuari, de manera que aquesta contrasenya s'ha desat però no pot ser utilitzada per entrar a Dolibarr. Es pot utilitzar per un mòdul/interfície extern, però si no cal definir cap usuari i contrasenya per un soci, pots deshabilitar la opció "Gestiona l'entrada per tots els socis" des de la configuració del mòdul Socis. Si necessites gestionar una entrada sense contrasenya, pots mantenir aquest camp buit i permetre aquest avís. Nota: El correu electrònic es pot utilitzar per entrar si el soci està enllaçat a un usuarí
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Ja existeix un marcador amb aquest títol o aquest
     WarningPassIsEmpty=Atenció: La contrasenya de la base de dades està buida. Això és un forat de seguretat. Cal afegir una contrasenya a la seva base de dades i canviar el seu arxiu conf.php per reflectir això.
     WarningConfFileMustBeReadOnly=Atenció, el seu fitxer (<b>htdocs/conf/conf.php</b>) és accessible en escriptura al servidor web. Això representa un error seriós de seguretat. Modifiqueu els permisos per ser llegit únicament pel compte que executa el servidor Web.Si està executant Windows en undisco amb format FAT, sigui conscient que aquest sistema d'arxius no protegeix els arxius i no ofereix cap solució per reduir els riscos de manipulació d'aquest fitxer.
     WarningsOnXLines=Alertes a <b>%s</b> línies font
    -WarningNoDocumentModelActivated=No hi ha cap model per a la generació del document activat. Es prendrà un model per defecte fins que es configuri el mòdul.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Atenció: Un cop acabada l'instal·lació, han de desactivar les eines d'instal·lació/actualització afegint l'arxiu <b>install.lock</b> al directori <b>%s</b>. L'absència d'aquest imatge mostra una fallada de seguretat.
    -WarningUntilDirRemoved=Aquesta alerta seguirà activa mentre la carpeta existeixi (alerta visible per als usuaris admin solament).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Avís, el tancament és realitzat encara que la quantitat total difereixi entre els elements d'origen i destí. Activi aquesta funcionalitat amb precaució.
     WarningUsingThisBoxSlowDown=Atenció, l'ús d'aquest panell provoca serioses alentiments en les pàgines que mostren aquest panell.
     WarningClickToDialUserSetupNotComplete=La configuració de ClickToDial per al compte d'usuari no està completa (vegeu la pestanya ClickToDial en la seva fitxa d'usuari)
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Massa dades (més de %s línies). Utilitz
     WarningSomeLinesWithNullHourlyRate=Algunes vegades es van registrar per alguns usuaris quan no s'havia definit el seu preu per hora. Es va utilitzar un valor de 0 %s per hora, però això pot resultar una valoració incorrecta del temps dedicat.
     WarningYourLoginWasModifiedPleaseLogin=El teu login s'ha modificat. Per seguretat has de fer login amb el nou login abans de la següent acció.
     WarningAnEntryAlreadyExistForTransKey=Ja existeix una entrada per la clau de traducció d'aquest idioma
    -WarningNumberOfRecipientIsRestrictedInMassAction=Advertència: el nombre de destinataris diferents està limitat a <b>%s</b> quan s'utilitzen les accions massives sobre llistes
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Advertència, la data de la línia no està dins del rang de l'informe de despeses
    diff --git a/htdocs/langs/ca_ES/interventions.lang b/htdocs/langs/ca_ES/interventions.lang
    index b1ea75c9aa7..9754e2dc548 100644
    --- a/htdocs/langs/ca_ES/interventions.lang
    +++ b/htdocs/langs/ca_ES/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervencions
     InterventionCard=Fitxa intervenció
     NewIntervention=Nova intervenció
     AddIntervention=Crea intervenció
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Llistat d'intervencions
     ActionsOnFicheInter=Esdeveniments sobre l'intervenció
     LastInterventions=Últimes %s intervencions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Utilitza la durada dels serveis en les intervenci
     UseDurationOnFichinter=Oculta el camp de durada dels registres d'intervenció
     UseDateWithoutHourOnFichinter=Oculta hores i minuts del camp de dates dels registres d'intervenció
     InterventionStatistics=Estadístiques de intervencions
    -NbOfinterventions=Nº de fitxes de intervenció
    -NumberOfInterventionsByMonth=Nº de fitxes de intervenció per mes (data de validació)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=La quantitat d'intervenció no s'inclou de manera predeterminada en els beneficis (en la majoria dels casos, els fulls de temps s'utilitzen per comptar el temps dedicat). Per incloure'ls, afegiu la opció  PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT amb el valor 1 a Configuració &rarr; Varis.
     ##### Exports #####
     InterId=Id. d'intervenció
    diff --git a/htdocs/langs/ca_ES/main.lang b/htdocs/langs/ca_ES/main.lang
    index fef9a992d40..f183e34519b 100644
    --- a/htdocs/langs/ca_ES/main.lang
    +++ b/htdocs/langs/ca_ES/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Error en l'enviament de l'e-mail (emissor =%s, destinatair
     ErrorFileNotUploaded=El fitxer no s'ha pogut transferir
     ErrorInternalErrorDetected=Error detectat
     ErrorWrongHostParameter=Paràmetre Servidor invàlid
    -ErrorYourCountryIsNotDefined=El teu país no està definit. Ves a Inici-Configuració-Edita i omple de nou el formulari
    -ErrorRecordIsUsedByChild=Impossible de suprimir aquest registre. Es sent utilitzat com a pare per almenys un registre fill.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Valor incorrecte
     ErrorWrongValueForParameterX=Valor incorrecte del paràmetre %s
     ErrorNoRequestInError=Cap petició en error
    -ErrorServiceUnavailableTryLater=Servei no disponible actualment. Torni a intentar més tard.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicat en un camp únic
    -ErrorSomeErrorWereFoundRollbackIsDone=S'han trobat alguns errors. Modificacions desfetes.
    -ErrorConfigParameterNotDefined=El paràmetre <b>%s</b> no està definit en el fitxer de configuració Dolibarr <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Impossible trobar l'usuari <b>%s</b> a la base de dades Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Error, cap tipus d'IVA definit per al país '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, cap tipus d'impost varis definit per al país '%s'.
     ErrorFailedToSaveFile=Error, el registre del fitxer ha fallat.
    -ErrorCannotAddThisParentWarehouse=Està intentant afegir un magatzem pare que ja és fill de l'actual
    -MaxNbOfRecordPerPage=Número màxim de registres per pàgina
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=No està autoritzat per fer-ho.
     SetDate=Indica la data
     SelectDate=Seleccioneu una data
    @@ -78,10 +78,10 @@ FileRenamed=L'arxiu s'ha renombrat correctament
     FileGenerated=L'arxiu ha estat generat correctament
     FileSaved=El fitxer s'ha desat correctament
     FileUploaded=L'arxiu s'ha carregat correctament
    -FileTransferComplete=El(s) fitxer(s) s'han carregat correctament
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=El(s) fitxer(s) s'han eliminat correctament
     FileWasNotUploaded=Un arxiu ha estat seleccionat per adjuntar, però encara no ha estat pujat. Feu clic a "Adjuntar aquest arxiu" per a això.
    -NbOfEntries=Nº d'entrades
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Llegeix l'ajuda online (cal tenir accés a internet)
     GoToHelpPage=Consultar l'ajuda
     RecordSaved=Registre guardat
    @@ -94,7 +94,7 @@ Undefined=No definit
     PasswordForgotten=Heu oblidat la contrasenya?
     NoAccount=Cap compte?
     SeeAbove=Esmentar anteriorment
    -HomeArea=Àrea inici
    +HomeArea=Inici
     LastConnexion=Última connexió
     PreviousConnexion=Connexió anterior
     PreviousValue=Valor anterior
    @@ -142,6 +142,7 @@ Closed=Tancat
     Closed2=Tancat
     NotClosed=No tancat
     Enabled=Activat
    +Enable=Activar
     Deprecated=Obsolet
     Disable=Desactivar
     Disabled=Desactivat
    @@ -153,7 +154,7 @@ Update=Modificar
     Close=Tancar
     CloseBox=Elimina el panell de la taula de control
     Confirm=Confirmar
    -ConfirmSendCardByMail=Realment voleu enviar el contingut d'aquesta fitxa per correu a la direcció <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Elimina
     Remove=Retirar
     Resiliate=Dona de baixa
    @@ -327,7 +328,7 @@ Copy=Copiar
     Paste=Pegar
     Default=Defecte
     DefaultValue=Valor per defecte
    -DefaultValues=Valors per defecte
    +DefaultValues=Default values/filters/sorting
     Price=Preu
     PriceCurrency=Preu (moneda)
     UnitPrice=Preu unitari
    @@ -347,7 +348,7 @@ AmountTTCShort=Import
     AmountHT=Base imposable
     AmountTTC=Import total
     AmountVAT=Import IVA
    -MulticurrencyAlreadyPaid=Ja pagat, moneda original
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Pendent de pagar, moneda original
     MulticurrencyPaymentAmount=Import de pagament, moneda original
     MulticurrencyAmountHT=Base imposable, moneda original
    @@ -428,7 +429,7 @@ ActionNotApplicable=No aplicable
     ActionRunningNotStarted=No començat
     ActionRunningShort=En progrés
     ActionDoneShort=Acabat
    -ActionUncomplete=Incomplet
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Darrers %s esdeveniments vinculats
     CompanyFoundation=Empresa/Organització
     Accountant=Comptador
    @@ -454,7 +455,7 @@ Duration=Duració
     TotalDuration=Duració total
     Summary=Resum
     DolibarrStateBoard=Estadístiques de base de dades
    -DolibarrWorkBoard=Taula de control de indicadors oberts
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=Sense elements oberts per processar
     Available=Disponible
     NotYetAvailable=Encara no disponible
    @@ -468,7 +469,7 @@ and=i
     or=o
     Other=Altres
     Others=Altres
    -OtherInformations=Altres informacions
    +OtherInformations=Altra informació
     Quantity=Quantitat
     Qty=Qt.
     ChangedBy=Modificat per
    @@ -506,8 +507,8 @@ None=Res
     NoneF=Ninguna
     NoneOrSeveral=Cap o diversos
     Late=Retard
    -LateDesc=El retard que defineix si un registre arriba tard o no depèn de la configuració. Pregunti al seu administrador per canviar de retard des del menú Inici - Configuració - Alertes.
    -NoItemLate=No late item
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
    +NoItemLate=No hi ha cap element tardà
     Photo=Foto
     Photos=Fotos
     AddPhoto=Afegir foto
    @@ -530,18 +531,6 @@ September=setembre
     October=octubre
     November=novembre
     December=desembre
    -JanuaryMin=Gen
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Abr
    -MayMin=Mai
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Ago
    -SeptemberMin=Set
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Des
     Month01=gener
     Month02=febrer
     Month03=març
    @@ -646,6 +635,8 @@ SendMail=Envia e-mail
     EMail=Correu electrònic
     NoEMail=Sense correu electrònic
     Email=Correu
    +AlreadyRead=Alreay read
    +NotRead=No llegit
     NoMobilePhone=Sense mòbil
     Owner=Propietari
     FollowingConstantsWillBeSubstituted=Les següents constants seran substituïdes pel seu valor corresponent.
    @@ -677,7 +668,7 @@ NeverReceived=Mai rebut
     Canceled=Anul·lada
     YouCanChangeValuesForThisListFromDictionarySetup=Pots canviar els valors d'aquesta llista des del menú Configuració - Diccionaris
     YouCanChangeValuesForThisListFrom=Pots canviar els valors d'aquesta llista des del menú %s
    -YouCanSetDefaultValueInModuleSetup=Pots indicar el valor per defecte utilitzat en la creació de nous registres en el mòdul de configuració
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Documents
     Documents2=Documents
    @@ -716,15 +707,15 @@ Merge=Fussió
     DocumentModelStandardPDF=Plantilla PDF estàndard
     PrintContentArea=Mostrar pàgina d'impressió de la zona central
     MenuManager=Gestor de menú
    -WarningYouAreInMaintenanceMode=Atenció, està en mode manteniment, així que només el login <b>%s</b> està autoritzat per utilitzar l'aplicació en aquest moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Error del sistema
     CoreErrorMessage=Ho sentim, hi ha un error. Contacti amb el seu administrador del sistema per a comprovar els "logs" o des-habilita $dolibarr_main_prod=1 per a obtenir més informació.
     CreditCard=Targeta de crèdit
     ValidatePayment=Validar aquest pagament
     CreditOrDebitCard=Tarja de crèdit o dèbit
     FieldsWithAreMandatory=Els camps marcats per un <b>%s</b> són obligatoris
    -FieldsWithIsForPublic=Els camps marcats per <b>%s</b> es mostren en la llista pública de socis. Si no voleu veure'ls, desactiveu la casella "públic".
    -AccordingToGeoIPDatabase=(Obtingut per conversió GeoIP)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Línia
     NotSupported=No suportat
     RequiredField=Camp obligatori
    @@ -732,6 +723,8 @@ Result=Resultat
     ToTest=provar
     ValidateBefore=Per poder utilitzar aquesta funció ha de validar la fitxa
     Visibility=Visibilitat
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privat
     Hidden=Memòria cau
     Resources=Recursos
    @@ -750,6 +743,7 @@ LinkTo=Enllaça a
     LinkToProposal=Enllaça a pressupost
     LinkToOrder=Enllaça a comanda
     LinkToInvoice=Enllaça a factura
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Enllaça a comanda de proveïdor
     LinkToSupplierProposal=Enllaça a pressupost de proveïdor
     LinkToSupplierInvoice=Enllaça a factura de proveïdor
    @@ -758,6 +752,7 @@ LinkToIntervention=Enllaça a intervenció
     CreateDraft=Crea esborrany
     SetToDraft=Tornar a redactar
     ClickToEdit=Clic per a editar
    +ClickToRefresh=Click to refresh
     EditWithEditor=Editar amb CKEditor
     EditWithTextEditor=Editar amb l'editor de text
     EditHTMLSource=Editar el codi HTML
    @@ -779,7 +774,7 @@ Test=Prova
     Element=Element
     NoPhotoYet=No hi ha fotografia disponible
     Dashboard=Quadre de comandament
    -MyDashboard=El meu quadre de comandament
    +MyDashboard=El meu tauler
     Deductible=Deduïble
     from=de
     toward=cap a
    @@ -802,7 +797,7 @@ PrintFile=%s arxius a imprimir
     ShowTransaction=Mostra la transacció en el compte bancari
     ShowIntervention=Mostrar intervenció
     ShowContract=Mostrar contracte
    -GoIntoSetupToChangeLogo=Ves a Inici - Configuració - Empresa per canviar el logo o ves a Inici - Configuració - Entorn per ocultar-lo.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Denegar
     Denied=Denegad
     ListOf=Llista de %s
    @@ -822,8 +817,8 @@ TooManyRecordForMassAction=S'ha seleccionat massa registres per a l'acció massi
     NoRecordSelected=No s'han seleccionat registres
     MassFilesArea=Àrea de fitxers generats per accions massives
     ShowTempMassFilesArea=Mostra l'àrea de fitxers generats per accions massives
    -ConfirmMassDeletion=Confirmació d'esborrament massiu
    -ConfirmMassDeletionQuestion=Esteu segur que voleu suprimir el registre seleccionat %s?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Objectes relacionats
     ClassifyBilled=Classificar facturat
     ClassifyUnbilled=Classificar no facturat
    @@ -841,7 +836,7 @@ Calendar=Calendari
     GroupBy=Agrupat per...
     ViewFlatList=Veure llista plana
     RemoveString=Eliminar cadena '%s'
    -SomeTranslationAreUncomplete=Alguns idiomes poden estar traduïts parcialment o poden tenir errors. Si detectes algun, pots corregir els fitxers d'idiomes registrant-te a <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Enllaç de descàrrega directa (públic/extern)
     DirectDownloadInternalLink=Enllaç directe de descàrrega (necessita estar registrat i tenir permisos)
     Download=Descarrega
    @@ -861,16 +856,25 @@ HR=RRHH
     HRAndBank=RRHH i banc
     AutomaticallyCalculated=Calculat automàticament
     TitleSetToDraft=Torna a esborrany
    -ConfirmSetToDraft=Estàs segur que vols tornar a l'estat esborrany?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=ID d'importació
     Events=Esdeveniments
    -EMailTemplates=Models d'emails
    -FileNotShared=Fitxer no compartit amb el públic extern
    +EMailTemplates=Plantilles de correu electrònic
    +FileNotShared=File not shared to external public
     Project=Projecte
     Projects=Projectes
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permisos
     LineNb=Núm. línia
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Dilluns
     Tuesday=Dimarts
    @@ -927,7 +931,7 @@ SearchIntoInterventions=Intervencions
     SearchIntoContracts=Contractes
     SearchIntoCustomerShipments=Enviaments de client
     SearchIntoExpenseReports=Informes de despeses
    -SearchIntoLeaves=Dies lliures
    +SearchIntoLeaves=Leave
     CommentLink=Comentaris
     NbComments=Nombre de comentaris
     CommentPage=Espai de comentaris
    @@ -935,7 +939,7 @@ CommentAdded=Comentari afegit
     CommentDeleted=Comentari suprimit
     Everybody=Projecte compartit
     PayedBy=Pagat per
    -PayedTo=Pagat a
    +PayedTo=Paid to
     Monthly=Mensual
     Quarterly=Trimestral
     Annual=Anual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local i remota
     KeyboardShortcut=Tecla de drecera
     AssignedTo=Assignada a
     Deletedraft=Suprimeix l'esborrany
    -ConfirmMassDraftDeletion=Confirmació d'eliminació massiva d'esborranys
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=Fitxer compartit a través d'un enllaç
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=Actualment esteu en el mode %s "sandbox"
    diff --git a/htdocs/langs/ca_ES/other.lang b/htdocs/langs/ca_ES/other.lang
    index 28d596c64f0..024158f0e0c 100644
    --- a/htdocs/langs/ca_ES/other.lang
    +++ b/htdocs/langs/ca_ES/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Codi de seguretat
     NumberingShort=N°
     Tools=Utilitats
     TMenuTools=Utilitats
    -ToolsDesc=Aquí es recullen totes les eines diverses que no s'inclouen en altres entrades del menú. <br> <br>Podeu accedir a totes les eines des del menú de l'esquerra.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Aniversari
     BirthdayDate=Data d'aniversari
     DateToBirth=Data de naixement
    @@ -23,7 +23,7 @@ MessageForm=Missatge al formulari de pagament en línia
     MessageOK=Missatge a la pàgina de retorn de pagament confirmat
     MessageKO=Missatge a la pàgina de retorn de pagament cancel·lat
     ContentOfDirectoryIsNotEmpty=El contingut d'aquest directori no és buit.
    -DeleteAlsoContentRecursively=Marqueu de manera recursiva per eliminar tot el contingut
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Any de la data de factura
     PreviousYearOfInvoice=Any anterior de la data de la factura
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Any següent de la data de la factura
     DateNextInvoiceBeforeGen=Data de la propera factura (abans de la generació)
     DateNextInvoiceAfterGen=Data de la propera factura (després de la generació)
     
    -Notify_FICHINTER_ADD_CONTACT=Contacte afegit a la intervenció
    -Notify_FICHINTER_VALIDATE=Validació fitxa intervenció
    -Notify_FICHINTER_SENTBYMAIL=Enviament fitxa intervenció per e-mail
     Notify_ORDER_VALIDATE=Validació comanda client
     Notify_ORDER_SENTBYMAIL=Enviament comanda de client per e-mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Enviament comanda a proveïdor per e-mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Comanda a proveïdor registrada
     Notify_ORDER_SUPPLIER_APPROVE=Aprovació comanda a proveïdor
     Notify_ORDER_SUPPLIER_REFUSE=Comanda a proveïdor rebutjada
     Notify_PROPAL_VALIDATE=Validació pressupost client
    -Notify_PROPAL_CLOSE_SIGNED=Pressupost tancat com a firmat
    -Notify_PROPAL_CLOSE_REFUSED=Pressupost tancat com a rebutjat
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Enviament pressupost per e-mail
     Notify_WITHDRAW_TRANSMIT=Transmissió domiciliació
     Notify_WITHDRAW_CREDIT=Abonament domiciliació
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Tercer creat
     Notify_COMPANY_SENTBYMAIL=E-mails enviats des de la fitxa del tercer
     Notify_BILL_VALIDATE=Validació factura
     Notify_BILL_UNVALIDATE=Devalidació factura a client
    -Notify_BILL_PAYED=Cobrament factura a client
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Cancel·lació factura a client
     Notify_BILL_SENTBYMAIL=Enviament factura a client per e-mail
     Notify_BILL_SUPPLIER_VALIDATE=Validació factura de proveïdor
    -Notify_BILL_SUPPLIER_PAYED=Pagament factura de proveïdor
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Enviament factura de proveïdor per e-mail
     Notify_BILL_SUPPLIER_CANCELED=Factura del proveïdor cancel·lada
     Notify_CONTRACT_VALIDATE=Validació contracte
     Notify_FICHEINTER_VALIDATE=Validació intervenció
    +Notify_FICHINTER_ADD_CONTACT=Contacte afegit a la intervenció
    +Notify_FICHINTER_SENTBYMAIL=Enviament fitxa intervenció per e-mail
     Notify_SHIPPING_VALIDATE=Validació enviament
     Notify_SHIPPING_SENTBYMAIL=Enviament expedició per e-mail
     Notify_MEMBER_VALIDATE=Soci validat
    @@ -71,27 +70,31 @@ Notify_PROJECT_CREATE=Creació d'un projecte
     Notify_TASK_CREATE=Tasca creada
     Notify_TASK_MODIFY=Tasca modificada
     Notify_TASK_DELETE=Tasca eliminada
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Vegi la configuració del mòdul %s
     NbOfAttachedFiles=Número arxius/documents adjunts
     TotalSizeOfAttachedFiles=Mida total dels arxius/documents adjunts
     MaxSize=Tamany màxim
     AttachANewFile=Adjuntar nou arxiu/document
     LinkedObject=Objecte adjuntat
    -NbOfActiveNotifications=Nombre de notificacions (nº de destinataris)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nAquest és un correu electrònic de prova enviat a __EMAIL__.\nLes dues línies estan separades per un salt de línia.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nAquest és un correu electrònic de <b>prova</b> (la paraula prova ha d'estar en negreta). <br> Les dues línies es separen amb un salt de línia. <br> <br> __USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nTrobareu aquí la sol·licitud de cotització __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nTrobareu aquí la comanda __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nTrobareu aquí la nostra comanda __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nTrobareu aquí la factura __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nTrobareu aquí l'enviament __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nTrobareu aquí la intervenció __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    +PredefinedMailContentLink=Podeu fer clic a l'enllaç següent per fer el pagament si encara no està fet.\n\n%s\n\n
     DemoDesc=Dolibarr és un ERP/CRM per a la gestió de negocis (professionals o associacions), compost de mòduls funcionals independents i opcionals. Una demostració que incloga tots aquests mòduls no té sentit perquè no utilitzarà tots els mòduls al mateix temps. Per això, hi han disponibles diferents tipus de perfils de demostració.
     ChooseYourDemoProfil=Selecciona el perfil de demo que cobreixi millor les teves necessitats...
     ChooseYourDemoProfilMore=o construeix el teu perfil<br>(selecció de mòduls manual)
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Instala o habilita la llibreria GD en la teva instal·lació
     ProfIdShortDesc=<b>Prof Id %s </b> és una informació que depèn del país del tercer. <br>Per exemple, per al país <b>%s</b>, és el codi <b>%s</b>.
     DolibarrDemo=Demo de Dolibarr ERP/CRM
     StatsByNumberOfUnits=Estadístiques de suma quantitat de productes/serveis
    -StatsByNumberOfEntities=Estadístiques en nombre d'entitats referents (nº de factura, o comanda ...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Número de pressupostos
     NumberOfCustomerOrders=Número de comandes de client
     NumberOfCustomerInvoices=Número de factures de client
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Número d'unitats en factures de client
     NumberOfUnitsSupplierProposals=Número d'unitats en pressupostos de proveïdor
     NumberOfUnitsSupplierOrders=Número d'unitats en comandes de proveïdor
     NumberOfUnitsSupplierInvoices=Número d'unitats en factures de proveïdor
    -EMailTextInterventionAddedContact=La nova intervenció %s t'ha sigut assignada.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Fitxa intervenció %s validada
     EMailTextInvoiceValidated=Factura %s validada
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=El pressupost %s que el concerneix ha estat validat.
     EMailTextProposalClosedSigned=La proposta %s s'ha tancat signada.
     EMailTextOrderValidated=La comanda %s que el concerneix ha estat validada.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Comanda %s aprovada per %s
     EMailTextOrderRefused=La comanda %s s'ha rebutjat
     EMailTextOrderRefusedBy=La comanda %s s'ha rebutjat per %s
     EMailTextExpeditionValidated=L'enviament %s ha estat validat.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Lot d'importació (import key)
     DolibarrNotification=Notificació automàtica
     ResizeDesc=Introduïu l'ample <b>O</b> la nova alçada. La relació es conserva en canviar la mida...
    @@ -204,7 +212,7 @@ NewLength=Nou ample
     NewHeight=Nova alçada
     NewSizeAfterCropping=Noves dimensions després de retallar
     DefineNewAreaToPick=Indiqueu la zona d'imatge a conservar (Clic sobre la imatge i arrossegueu fins a la cantonada oposada)
    -CurrentInformationOnImage=Aquesta pàgina us permet canviar la mida o quadrar la imatge. Aquí hi ha informació sobre la imatge que s'està editant
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Editor d'imatge
     YouReceiveMailBecauseOfNotification=Vostè està rebent aquest missatge perquè el seu correu electrònica està subscrit a algunes notificacions automàtiques per informar sobre esdeveniments especials del programa %s de %s.
     YouReceiveMailBecauseOfNotification2=L'esdeveniment en qüestió és el següent:
    @@ -219,7 +227,7 @@ FileIsTooBig=L'arxiu és massa gran
     PleaseBePatient=Preguem esperi uns instants...
     NewPassword=Nova contrasenya
     ResetPassword=Restablir la contrasenya
    -RequestToResetPasswordReceived=A request to change your password has been received.
    +RequestToResetPasswordReceived=S'ha rebut una sol·licitud per canviar la teva contrasenya.
     NewKeyIs=Aquesta és la nova contrasenya per iniciar sessió
     NewKeyWillBe=La seva nova contrasenya per iniciar sessió en el software serà
     ClickHereToGoTo=Clica aquí per anar a %s
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=La teva contrasenya ha de tenir almenys <stron
     YourPasswordHasBeenReset=La teva contrasenya s'ha restablert correctament
     ApplicantIpAddress=Adreça IP del sol·licitant
     SMSSentTo=SMS enviat a %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Àrea d'exportacions
    diff --git a/htdocs/langs/ca_ES/paybox.lang b/htdocs/langs/ca_ES/paybox.lang
    index 8eed83c2fd4..c877a80a285 100644
    --- a/htdocs/langs/ca_ES/paybox.lang
    +++ b/htdocs/langs/ca_ES/paybox.lang
    @@ -21,9 +21,9 @@ ToOfferALinkForOnlinePaymentOnContractLine=URL que ofereix una interfície de pa
     ToOfferALinkForOnlinePaymentOnFreeAmount=URL que ofereix una interfície de pagament en línia %s basada en un impport llíure
     ToOfferALinkForOnlinePaymentOnMemberSubscription=URL que ofereix una interfície de pagament en línia %s per una quota de soci
     YouCanAddTagOnUrl=També pot afegir el paràmetre url <b>&tag=<i>value</i></b> per a qualsevol d'aquestes adreces (obligatori només per al pagament lliure) per veure el seu propi codi de comentari de pagament.
    -SetupPayBoxToHavePaymentCreatedAutomatically=Configureu la vostra url Paybox <b>%s</b> per tal que el pagament es creu automàticament al validar.
    +SetupPayBoxToHavePaymentCreatedAutomatically=Setup your Paybox with url <b>%s</b> to have payment created automatically when validated by Paybox.
     YourPaymentHasBeenRecorded=Aquesta pàgina confirma que el pagament s'ha registrat correctament. Gràcies.
    -YourPaymentHasNotBeenRecorded=El pagament no ha estat registrat i la transacció ha estat anul·lada. Gràcies.
    +YourPaymentHasNotBeenRecorded=Your payment has NOT been recorded and the transaction has been canceled. Thank you.
     AccountParameter=Paràmetres del compte
     UsageParameter=Paràmetres d'ús
     InformationToFindParameters=Informació per trobar la seva configuració de compte %s
    diff --git a/htdocs/langs/ca_ES/projects.lang b/htdocs/langs/ca_ES/projects.lang
    index 539a14716c4..ca92a5f125b 100644
    --- a/htdocs/langs/ca_ES/projects.lang
    +++ b/htdocs/langs/ca_ES/projects.lang
    @@ -33,8 +33,8 @@ ConfirmDeleteAProject=Vols eliminar aquest projecte?
     ConfirmDeleteATask=Vols eliminar aquesta tasca?
     OpenedProjects=Projectes oberts
     OpenedTasks=Tasques obertes
    -OpportunitiesStatusForOpenedProjects=Import d'oportunitats de projectes oberts per estat
    -OpportunitiesStatusForProjects=Import d'oportunitats de projectes per estat
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Veure projecte
     ShowTask=Veure tasca
     SetProject=Indica el projecte
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Ves al llistat de temps consumit
     GoToListOfTasks=Ves al llistat de tasques
     GoToGanttView=Vés a la vista de Gantt
     GanttView=Vista de Gantt
    -ListProposalsAssociatedProject=Llistat de pressupostos associats al projecte
    -ListOrdersAssociatedProject=Llista de comandes de client associades al projecte
    -ListInvoicesAssociatedProject=Llista de factures de client associades al projecte
    -ListPredefinedInvoicesAssociatedProject=Llista de plantilles de factures de client associat amb el projecte
    -ListSupplierOrdersAssociatedProject=Llista de comandes a proveïdors associades al projecte
    -ListSupplierInvoicesAssociatedProject=Llista de factures a proveïdors associades al projecte
    -ListContractAssociatedProject=Llistatde contractes associats al projecte
    -ListShippingAssociatedProject=Llista d'expedicions associades al projecte
    -ListFichinterAssociatedProject=Llistat d'intervencions associades al projecte
    -ListExpenseReportsAssociatedProject=Llistat d'informes de despeses associades al projecte
    -ListDonationsAssociatedProject=Llistat de donacions associades al projecte
    -ListVariousPaymentsAssociatedProject=Llista de pagaments extres associats al projecte
    -ListActionsAssociatedProject=Llista d'esdeveniments associats al projecte
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Llistat del temps consumit en tasques d'aquest projecte
     ListTaskTimeForTask=Llista de temps consumit a la tasca
     ActivityOnProjectToday=Activitat en el projecte avui
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Projecte %s modificat
     TaskCreatedInDolibarr=La tasca %s a sigut creada
     TaskModifiedInDolibarr=La tasca %s a sigut modificada
     TaskDeletedInDolibarr=La tasca %s a sigut eliminada
    -OpportunityStatus=Estat d'oportunitats
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Estat d'oportunitat
    -OpportunityProbability=Probabilitat d'oportunitat
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Probab. d'op.
    -OpportunityAmount=Import d'oportunitats
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Import d'oportunitat
     OpportunityAmountAverageShort=Import d'oportunitat mitjà
     OpportunityAmountWeigthedShort=Import d'oportunitat ponderat
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Participant
     SelectElement=Seleccioni element
     AddElement=Vincular a element
     # Documents models
    -DocumentModelBeluga=Plantilla de projecte per resum d'objectes vinculats
    -DocumentModelBaleine=Plantilla d'informe de projectes per tasques
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Càrrega de treball prevista
     PlannedWorkloadShort=Càrrega de treball
     ProjectReferers=Registres relacionats
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projectes amb aquest usuari com a contacte
     TasksWithThisUserAsContact=Tasques asignades a l'usuari
     ResourceNotAssignedToProject=No assignat a cap projecte
     ResourceNotAssignedToTheTask=No assignat a la tasca
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Temps gastat per
     TasksAssignedTo=Tasques assignades a
     AssignTaskToMe=Assignar-me una tasca
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assigna una tasca a %s
     SelectTaskToAssign=Selecciona una tasca per assignar...
     AssignTask=Assigna
     ProjectOverview=Informació general
    -ManageTasks=Utilitza els projectes per seguir tasques i temps
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Utilitza els projectes per seguir oportunitats
    -ProjectNbProjectByMonth=Nº de projectes creats per mes
    +ProjectNbProjectByMonth=No. of created projects by month
     ProjectNbTaskByMonth=Nº de tasques creades per mes
    -ProjectOppAmountOfProjectsByMonth=Import d'oportunitats per mes
    -ProjectWeightedOppAmountOfProjectsByMonth=Quantitat ponderada d'oportunitats per mes
    -ProjectOpenedProjectByOppStatus=Projectes oberts per estats d'oportunitat
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Estadístiques en projectes/leads
     TasksStatistics=Estadístiques de tasques de projecte/lideratge
     TaskAssignedToEnterTime=Tasca assignada. És possible entrar els temps en aquesta tasca.
     IdTaskTime=Id de temps de tasca
     YouCanCompleteRef=Si vols completar la referència amb més informació (per utilitzar-la als filtres de cerca), es recomana afegir el caràcter - per separar-ho, així la numeració automàtica funcionarà correctament pels propers projectes. Per exemple %s-ABC. També pots preferir afegir claus de cerca en l'etiqueta. Però la millor pràctica pot ser afegir un camp dedicat, també anomenat Atributs complementaris.
     OpenedProjectsByThirdparties=Projectes oberts per tercers
    -OnlyOpportunitiesShort=Només oportunitats
    -OpenedOpportunitiesShort=Oportunitats obertes
    -NotAnOpportunityShort=No és una oportunitat
    -OpportunityTotalAmount=Import total d'oportunitats
    -OpportunityPonderatedAmount=Quantitat ponderada d'oportunitats
    -OpportunityPonderatedAmountDesc=Quantitat ponderada d'oportunitats amb probabilitat
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Potencial
     OppStatusQUAL=Qualificació
     OppStatusPROPO=Pressupost
    @@ -227,4 +231,6 @@ AllowCommentOnProject=Permetre comentaris dels usuaris als projectes
     DontHavePermissionForCloseProject=No teniu permisos per tancar el projecte %s
     DontHaveTheValidateStatus=El projecte %s ha de ser obert per tancar
     RecordsClosed=%s projecte(s) tancat(s)
    -SendProjectRef=Information project %s
    +SendProjectRef=Informació del projecte %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/ca_ES/stripe.lang b/htdocs/langs/ca_ES/stripe.lang
    index 78119cd6700..bbbd5c48a63 100644
    --- a/htdocs/langs/ca_ES/stripe.lang
    +++ b/htdocs/langs/ca_ES/stripe.lang
    @@ -61,3 +61,4 @@ ConfirmDeleteCard=Estàs segur que vols eliminar aquesta targeta de crèdit o de
     CreateCustomerOnStripe=Crea un client a Stripe
     CreateCardOnStripe=Crea una targeta a Stripe
     ShowInStripe=Mostra a Stripe
    +StripeUserAccountForActions=Compte d'usuari per utilitzar en alguns e-mails de notificació d'esdeveniments Stripe (pagaments Stripe)
    diff --git a/htdocs/langs/ca_ES/suppliers.lang b/htdocs/langs/ca_ES/suppliers.lang
    index c748ed9b7b6..22eef83e987 100644
    --- a/htdocs/langs/ca_ES/suppliers.lang
    +++ b/htdocs/langs/ca_ES/suppliers.lang
    @@ -21,9 +21,9 @@ SupplierPayment=Pagament al proveïdor
     SuppliersArea=Àrea de proveïdors
     RefSupplierShort=Ref. proveïdor
     Availability=Disponibilitat
    -ExportDataset_fournisseur_1=Vendor invoices list and invoice lines
    -ExportDataset_fournisseur_2=Vendor invoices and payments
    -ExportDataset_fournisseur_3=Comandes de compra i línies de comanda
    +ExportDataset_fournisseur_1=Factures de proveïdor i línies de factura
    +ExportDataset_fournisseur_2=Factures i pagaments de proveïdors
    +ExportDataset_fournisseur_3=Comandes de proveïdor i línies de comanda
     ApproveThisOrder=Aprovar aquesta comanda
     ConfirmApproveThisOrder=Vols aprovar la comanda <b>%s</b>?
     DenyingThisOrder=Denegar aquesta comanda
    diff --git a/htdocs/langs/ca_ES/website.lang b/htdocs/langs/ca_ES/website.lang
    index 9c986cc367c..b61e8c6663d 100644
    --- a/htdocs/langs/ca_ES/website.lang
    +++ b/htdocs/langs/ca_ES/website.lang
    @@ -1,12 +1,13 @@
     # Dolibarr language file - Source file is en_US - website
     Shortname=Codi
    -WebsiteSetupDesc=Crea tantes entrades com número de pàgines web que necessitis. Després ves al menú Pàgines web per editar-les.
    +WebsiteSetupDesc=Creeu aquí els llocs web que voleu utilitzar. A continuació, vagi a menú de llocs web per editar-los.
     DeleteWebsite=Elimina la pàgina web
    -ConfirmDeleteWebsite=Estàs segur de voler elimiar aquesta pàgina web? També s'esborraran totes les pàgines i el seu contingut.
    +ConfirmDeleteWebsite=Està segur que vol eliminar aquest lloc web? Totes les seves pàgines i continguts també seran eliminats.
     WEBSITE_TYPE_CONTAINER=Tipus de pàgina/contenidor
     WEBSITE_PAGE_EXAMPLE=Pàgina web per utilitzar com a exemple
     WEBSITE_PAGENAME=Nom/alies de pàgina
     WEBSITE_ALIASALT=Noms de pàgina alternatius / àlies
    +WEBSITE_ALIASALTDesc=Utilitzeu aquí la llista d'altres noms / àlies, per la qual cosa també es pot accedir a la pàgina amb altres noms / àlies (per exemple, el nom antic després de canviar el nom de l'àlies per mantenir el vincle d'enllaç a l'antic vincle / nom de treball). La sintaxi és: <br> alternativament1, alternativament2, ...
     WEBSITE_CSS_URL=URL del fitxer CSS extern
     WEBSITE_CSS_INLINE=Fitxer de contingut CSS (comú a totes les pàgines)
     WEBSITE_JS_INLINE=Fitxer amb contingut Javascript (comú a totes les pàgines)
    @@ -17,17 +18,19 @@ HtmlHeaderPage=Encapçalament HTML (específic sols per aquesta pàgina)
     PageNameAliasHelp=Nom o àlies de la pàgina. <br> Aquest àlies també s'utilitza per construir un URL de SEO quan el lloc web es llanci des d'un Host Virtual d'un servidor web (com Apache, Nginx...). Utilitzeu el botó "<strong>%s</strong>" per editar aquest àlies.
     EditTheWebSiteForACommonHeader=Nota: si voleu definir un encapçalament personalitzat per a totes les pàgines, editeu el encapçalament al nivell del lloc en comptes de la pàgina/contenidor.
     MediaFiles=Llibreria Media
    -EditCss=Edita l'estil/CSS o la capçalera HTML
    +EditCss=Editar propietats
     EditMenu=Edita menú
     EditMedias=Editar multimèdia
    -EditPageMeta=Edita "meta"
    +EditPageMeta=Editar propietats de pàgina/contenidor
    +EditInLine=Editar en línia
     AddWebsite=Afegir lloc web
     Webpage=Pàgina/contenidor web
     AddPage=Afegeix pàgina/contenidor
     HomePage=Pàgina d'inici
     PageContainer=Pàgina/contenidor
    -PreviewOfSiteNotYetAvailable=La previsualització del teu lloc web <strong>%s</strong> encara no està disponible. Primer has d'afegir una pàgina.
    +PreviewOfSiteNotYetAvailable=Vista prèvia del seu lloc web <strong>%s</strong> encara no està disponible. Primer ha de '<strong>Importar plantilla web</strong>' o sols '<strong>Afegir pàgina/contenidor</strong>'.
     RequestedPageHasNoContentYet=La pàgina sol·licitada amb l'identificador %s encara no té contingut, o el fitxer de memòria cau .tpl.php s'ha eliminat. Edita el contingut de la pàgina per solucionar-ho.
    +SiteDeleted=Lloc web '%s' eliminat
     PageContent=Pàgina/Contenidor
     PageDeleted=Pàgina/Contenidor '%s' del lloc web %s eliminat
     PageAdded=Pàgina/Contenidor '%s' afegit
    @@ -36,8 +39,8 @@ ViewPageInNewTab=Mostra la pàgina en una nova pestanya
     SetAsHomePage=Indica com a Pàgina principal
     RealURL=URL real
     ViewWebsiteInProduction=Mostra la pàgina web utilitzant les URLs d'inici
    -SetHereVirtualHost=Si pots crear, al teu servidor web (Apache, Nginx...), un Host Virtual amb PHP habilitat i un directori Root a <strong>%s</strong><br><br>, llavors introduïu aquí el nom del host virtual que has creat, d'aquesta manera es pot fer una vista prèvia utilitzant aquest accés directe al servidor web, i no només utilitzant el servidor Dolibarr.
    -YouCanAlsoTestWithPHPS=En l'entorn de desenvolupament, és possible que preferiu provar el lloc amb el servidor web incrustat de PHP (requereix PHP 5.5) executant-se<br><strong>php -S 0.0.0.0:8080 -t %s</strong>
    +SetHereVirtualHost=<u>Use with Apache/NGinx/...</u><br>If you can create, on your web server (Apache, Nginx, ...), a dedicated Virtual Host with PHP enabled and a Root directory on<br><strong>%s</strong><br>then enter here the virtual hostname you have created, so the preview can be done also using this dedicated web server access instead of only using Dolibarr server.
    +YouCanAlsoTestWithPHPS=<u>Use with PHP embedded server</u><br>On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running<br><strong>php -S 0.0.0.0:8080 -t %s</strong>
     CheckVirtualHostPerms=Comproveu també que l'amfitrió virtual té permisos <strong> %s </strong> en fitxers a <strong> %s </strong>
     ReadPerm=Llegit
     WritePerm=Escriu
    @@ -45,9 +48,10 @@ PreviewSiteServedByWebServer=<LI>Vista prèvia %s en una nova pestanya.</LI><br>
     PreviewSiteServedByDolibarr=<u> Previsualitza  %s en una nova pestanya. </li> <br> <br> El servidor %s serà servit pel servidor Dolibarr d'aquesta manera no es necessita instal·la cap servidor web addicional (com ara Apache, Nginx, IIS).<br>L'inconvenient és que l'URL de les pàgines no son amigables i començen per la ruta del vostre Dolibarr. <br>URL servit per Dolibarr:<br><strong> %s </strong> <br> <br> Per utilitzar el vostre propi servidor web extern per a servir a aquest lloc web, creeu un amfitrió ('host') virtual al vostre servidor web que apunti al directori<br><strong> %s </strong><br>, llavors introduïu el nom d'aquest servidor virtual i feu clic a l'altre botó de vista prèvia (botó de 'preview').
     VirtualHostUrlNotDefined=No s'ha definit la URL de l'amfitrió virtual que serveix el servidor web extern
     NoPageYet=Encara sense pàgines
    +YouCanCreatePageOrImportTemplate=You can create a new page or import a full website template
     SyntaxHelp=Ajuda sobre consells de sintaxi específics
     YouCanEditHtmlSourceckeditor=Podeu editar el codi font HTML usant el botó "Codi font" a l'editor.
    -YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> Podeu incloure PHP codi a la font usant les etiquetes ('tags') <strong>&lt;?php ?&gt;</strong>. Les següents variables globals estan disponibles: $conf, $langs, $db, $mysoc, $user, $website.<br><br><span class="fa fa-bug"></span> Podeu també incloure contingut de un altre Page/Container amb les següents sintaxis:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> Podeu fer una redirecció a una altra Page/Container amb la següent sintaxis:<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-download"></span> Per a incloure un <strong>enllaç per a descarregar</strong> un fitxer emmagatzemat dins del <strong>documents</strong> directori, utilitza el <strong>document.php</strong> wrapper:<br>Exemple, per a un fitxer dins del documents/ecm (necessita estar 'logged'), la sintaxis és:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>Per a un fitxer dintre de documents/medias (open directory for public access), la sintaxis és:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>Per a un fitxer compartit amb un enllaç compartit (open access using the sharing hash key of file), la sintaxis és:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> Per a incloure una <strong>image</strong> emmagatzemat dintre de <strong>documents</strong> directory, utilitza el <strong>viewimage.php</strong> wrapper:<br>Exemple, per a una imatge dintre de documents/medias (open access), la sintaxis és:<br><strong>&lt;a href="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
    +YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
     ClonePage=Clona la pàgina/contenidor
     CloneSite=Clona el lloc
     SiteAdded=Lloc web afegit
    @@ -57,9 +61,10 @@ LanguageMustNotBeSameThanClonedPage=Cloneu una pàgina com a una traducció. L'i
     ParentPageId=ID de la pàgina pare
     WebsiteId=ID del lloc web
     CreateByFetchingExternalPage=Crear una pàgina/contenidor mitjançant l'obtenció del continugt des d'una URL externa ...
    -OrEnterPageInfoManually=O creeu una pàgina buida des de zero ...
    +OrEnterPageInfoManually=Or create page from scratch or from a page template...
     FetchAndCreate=Obtenir i crear
    -ExportSite=Exportar el lloc web
    +ExportSite=Exporta la web
    +ImportSite=Import website template
     IDOfPage=Id de la pàgina
     Banner=Bàner
     BlogPost=Publicació del bloc
    @@ -73,7 +78,7 @@ AnotherContainer=Un altre contenidor
     WEBSITE_USE_WEBSITE_ACCOUNTS=Activa la taula del compte del lloc web
     WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Activeu la taula per emmagatzemar comptes del lloc web (login/contrasenya) per a cada lloc web de tercers
     YouMustDefineTheHomePage=Primer heu de definir la pàgina d'inici predeterminada
    -OnlyEditionOfSourceForGrabbedContentFuture=Note: only edition of HTML source will be possible when a page content is initiliazed by grabbing it from an external page (WYSIWYG editor will not be available)
    +OnlyEditionOfSourceForGrabbedContentFuture=Warning: Creating a web page by importing an external web page is reserved to experienced user. Depending on the complexity of source page, the result of importation may differs once imported from original. Also if the source page use common CSS style or not compatible javascript, it may break the look or features of the Web site editor when working on this page. This method is faster way to have a page but it is recommanded to create your new page from scratch or from a suggested page template.<br>Note also that only edition of HTML source will be possible when a page content has been initialized by grabbing it from an external page ("Online" editor will NOT be available)
     OnlyEditionOfSourceForGrabbedContent=Només l'edició de codi HTML és possible quan el contingut s'ha capturat d'un lloc extern
     GrabImagesInto=Agafa també imatges trobades dins del css i a la pàgina.
     ImagesShouldBeSavedInto=Les imatges s'han de desar al directori
    @@ -82,3 +87,9 @@ SubdirOfPage=Subdirectori dedicat a la pàgina
     AliasPageAlreadyExists=Alias de pàgina <strong>%s</strong> ja existeixen
     CorporateHomePage=Pàgina d'inici corporativa
     EmptyPage=Pàgina buida
    +ExternalURLMustStartWithHttp=L'URL externa ha de començar amb http:// o https://
    +ZipOfWebsitePackageToImport=Zip file of website package
    +ShowSubcontainers=Show included containers
    +InternalURLOfPage=Internal URL of page
    +ThisPageIsTranslationOf=This page/container is translation of
    +ThisPageHasTranslationPages=This page/container has translation
    diff --git a/htdocs/langs/ca_ES/withdrawals.lang b/htdocs/langs/ca_ES/withdrawals.lang
    index 37afcba976a..77c67a26dbb 100644
    --- a/htdocs/langs/ca_ES/withdrawals.lang
    +++ b/htdocs/langs/ca_ES/withdrawals.lang
    @@ -13,7 +13,7 @@ RequestStandingOrderToTreat=Petició per a processar ordres de pagament mitjanç
     RequestStandingOrderTreated=Petició per a processar ordres de pagament mitjançant domiciliació bancària finalitzada
     NotPossibleForThisStatusOfWithdrawReceiptORLine=Encara no és possible. L'estat de la domiciliació ter que ser 'abonada' abans de poder realitzar devolucions a les seves línies
     NbOfInvoiceToWithdraw=Nombre de factures qualificades esperant l'ordre de domiciliació bancària
    -NbOfInvoiceToWithdrawWithInfo=Nombre de factura de client amb pagament per domiciliació bancària havent definit la informació del compte bancari
    +NbOfInvoiceToWithdrawWithInfo=Número de factures del client en espera de domiciliació per a clients que tenen el número de compte definida
     InvoiceWaitingWithdraw=Factura esperant per domiciliació bancària
     AmountToWithdraw=Import a domiciliar
     WithdrawsRefused=Domiciliació bancària refusada
    @@ -26,7 +26,7 @@ LastWithdrawalReceipt=Últims %s rebuts domiciliats
     MakeWithdrawRequest=Fer una petició de pagament per domiciliació bancària
     WithdrawRequestsDone=%s domiciliacions registrades
     ThirdPartyBankCode=Codi banc del tercer
    -NoInvoiceCouldBeWithdrawed=No s'ha domiciliat cap factura amb èxit. Comprova que les factures es troben en empreses amb un BAN vàlid per defecte i que aquest BAN té un RUM amb mode <strong>%s</strong>.
    +NoInvoiceCouldBeWithdrawed=Cap factura s'ha carregat amb èxit. Comproveu que els tercers de les factures tenen un IBAN vàlid i que IBAN té un RUM (Referència de mandat exclusiva) amb mode <strong>%s</strong>.
     ClassCredited=Classificar com "Abonada"
     ClassCreditedConfirm=Esteu segur de voler classificar aquesta domiciliació com abonada al seu compte bancari?
     TransData=Data enviament
    @@ -78,7 +78,7 @@ ThisWillAlsoAddPaymentOnInvoice=Això també registrarà els pagaments a les fac
     StatisticsByLineStatus=Estadístiques per estats de línies
     RUM=UMR
     RUMLong=Referència de mandat única (UMR)
    -RUMWillBeGenerated=If empty, UMR number will be generated once bank account information are saved
    +RUMWillBeGenerated=Si està buit, el número UMR es generarà una vegada que es guardi la informació del compte bancari
     WithdrawMode=Modo de domiciliació bancària (FRST o RECUR)
     WithdrawRequestAmount=Import de la domiciliació
     WithdrawRequestErrorNilAmount=No és possible crear una domiciliació sense import
    @@ -100,12 +100,8 @@ DirectDebitOrderCreated=S'ha creat l'ordre de domiciliació bancària %s
     AmountRequested=Quantitat sol·licitada
     SEPARCUR=SEPA CUR
     SEPAFRST=SEPA FRST
    -<<<<<<< HEAD
    -ExecutionDate=Execution date
    -=======
     ExecutionDate=Data d'execució
    ->>>>>>> branch '7.0' of git@github.com:Dolibarr/dolibarr.git
    -CreateForSepa=Create direct debit file
    +CreateForSepa=Crea un fitxer de domiciliació bancària
     
     ### Notifications
     InfoCreditSubject=Pagament de rebuts domiciliats %s pel banc
    diff --git a/htdocs/langs/ca_ES/workflow.lang b/htdocs/langs/ca_ES/workflow.lang
    index 781ccf16af9..e6162b51e6c 100644
    --- a/htdocs/langs/ca_ES/workflow.lang
    +++ b/htdocs/langs/ca_ES/workflow.lang
    @@ -1,20 +1,20 @@
     # Dolibarr language file - Source file is en_US - workflow
     WorkflowSetup=Configuració del mòdul workflow
    -WorkflowDesc=Aquest mòdul li permet canviar el comportament de les accions automàticament en l'aplicació. De forma predeterminada, el workflow està obert (configuri segons les seves necessitats). Activi les accions automàtiques que li interessin.
    +WorkflowDesc=Aquest mòdul ofereix algunes accions automàtiques. Per defecte, el flux de treball està obert (podeu fer les coses en l'ordre que vulgueu), però aquí podeu activar algunes accions automàtiques.
     ThereIsNoWorkflowToModify=No hi ha modificacions disponibles del fluxe de treball amb els mòduls activats.
     # Autocreate
    -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Crea automàticament una comanda de client després d'haver signat un pressupost (la nova comanda tindrà la mateixa quantitat que el pressupost)
    -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Crea automàticament una factura del client després d'haver signat un pressupost (la nova factura tindrà la mateixa quantitat que el pressupost)
    +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Crea automàticament una comanda de client després d'haver signat un pressupost (la nova comanda tindrà el mateixa import que el pressupost)
    +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Crea automàticament una factura del client després d'haver signat un pressupost (la nova factura tindrà el mateixa import que el pressupost)
     descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Crear automàticament una factura a client després de validar un contracte
    -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Crea automàticament una factura de client després de tancar una comanda de client (la nova factura tindrà la mateixa quantitat que la comanda)
    +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Crea automàticament una factura de client després de tancar una comanda de client (la nova factura tindrà el mateixa import que la comanda)
     # Autoclassify customer proposal or order
    -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classifica els pressupostos vinculats d'origen com a facturats quan la comanda del client es posi com a facturada (i si l'import de la comanda és igual a l'import total dels pressupostos vinculats i signats)
    -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classifica els pressupostos vinculats d'origen com a facturats quan la factura del client es validi (i si l'import de la factura és igual a l'import total dels pressupostos vinculats i signats)
    +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classifica el pressupost d'origen com a facturat quan la comanda del client es posi com a facturada (i si l'import de la comanda és igual a l'import total del pressupost signat vinculat)
    +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classifica els pressupostos vinculats d'origen com a facturats quan la factura del client es validi (i si l'import de la factura és igual a l'import total dels pressupostos signats vinculats)
     descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classifica les comandes de client vinculades d'origen com a facturades quan la factura del client es validi (i si l'import de la factura és igual a l'import total de les comandes vinculades)
     descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classifica les comandes de client vinculades d'origen com a facturades quan la factura del client es posi com a pagada (i si l'import de la factura és igual a l'import total de les comandes vinculades)
    -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classifiqueu com a "Enviada" la comanda de client original enllaçada quan es validi un enviament (sempre que la quantitat d'articles enviada per tots els enviaments sigui la mateixa que la de la comanda)
    +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classifica les comandes vinculades com a enviades quan l'expedició es validi (i si la quantitat enviada per totes les expedicions és igual que la comanda a actualitzar)
     # Autoclassify supplier order
    -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked proposals)
    -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked orders)
    +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classifica el pressupost de proveïdor vinculat com facturat quan la factura de proveïdor és validada (i si l'import de la factura és igual a l'import total del pressupost vinculat)
    +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classifica la comanda de proveïdor vinculada com facturada quan la factura de proveïdor és validada (i si l'import de la factura és igual a l'import total de la comanda vinculada)
     AutomaticCreation=Creació automàtica
     AutomaticClassification=Classificació automàtica
    diff --git a/htdocs/langs/cs_CZ/admin.lang b/htdocs/langs/cs_CZ/admin.lang
    index 7e3d67f2e06..04566302f4f 100644
    --- a/htdocs/langs/cs_CZ/admin.lang
    +++ b/htdocs/langs/cs_CZ/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Vývoj
     VersionUnknown=Neznámý
     VersionRecommanded=Doporučené
     FileCheck=Kontrola integrity souborů
    -FileCheckDesc=Tento nástroj vám umožňuje zkontrolovat integritu souborů a nastavení aplikace a porovnávat jednotlivé soubory s oficiálními. Je také možné zkontrolovat hodnotu některých konstant nastavení. Pomocí tohoto nástroje můžete zjistit, zda některé soubory byly například modifikovány hackerem.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=integrity souborů je přísně přizpůsobena s odkazem.
    -FileIntegrityIsOkButFilesWereAdded=Kontrola souborů integrity prošel, ale byly přidány některé nové soubory.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Kontrola souborů integrity selhal. Některé soubory byly změněny, odstraněny nebo přidány.
     GlobalChecksum=Global kontrolní součet
     MakeIntegrityAnalysisFrom=Udělat analýzu integrity souborů aplikací od
    @@ -30,14 +30,14 @@ SessionSaveHandler=Manipulátor uložených relací
     SessionSavePath=Místo uložení relace
     PurgeSessions=Vyčistit relace
     ConfirmPurgeSessions=Opravdu chcete, vyčistit všechny relace? Tím dojde k odpojení všech přihlášených uživatelů (kromě vás).
    -NoSessionListWithThisHandler=Nastavení Vašeho PHP neumožňuje vypsat běžící relace.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Uzamknout nové spojení
    -ConfirmLockNewSessions=Určitěchcete omezit všechna nová Dolibarr spojení? Pouze uživatel<b>%s</b> bude mít možnost se připojit.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Odstranit zámek spojení
     YourSession=Vaše relace
    -Sessions=Uživatelské relace
    +Sessions=Users sessions
     WebUserGroup=Web server uživatel / skupina
    -NoSessionFound=Nastavení Vašeho PHP Vám neumožňuje výpis aktivních relací. Složka sloužící k uložení relací <b>(%s)</b> může být chráněna (např. nastavením oprávnění OS nebo PHP open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Znaková sada pro databázi s daty
     DBSortingCharset=Znaková sada pro řazení databáze s daty
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Externí uživatel
     InternalUsers=Interní uživatelé
     ExternalUsers=Externí uživatelé
     GUISetup=Zobrazení
    -SetupArea=Modul nastavení
    +SetupArea=Nastavení
     UploadNewTemplate=Nahrát nové šablony
     FormToTestFileUploadForm=Formulář pro testování uploadu souborů (dle nastavení)
     IfModuleEnabled=Poznámka: Ano má efekt pouze tehdy, pokud je aktivní modul <b>%s</b>
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kód nemůže obsahovat hodnotu 0
     DisableJavascript=Vypnout JavaScript a Ajax funkce (Doporučuje se pro nevidomého či textové prohlížeče)
     UseSearchToSelectCompanyTooltip=Také, pokud máte velký počet subjektů (> 100 000), můžete zvýšit rychlost nastavením konstantní COMPANY_DONOTSEARCH_ANYWHERE 1 v Setup-> Ostatní. Vyhledávání pak bude omezena na začátek řetězce.
     UseSearchToSelectContactTooltip=Také, pokud máte velký počet subjektů (> 100 000), můžete zvýšit rychlost nastavením konstantní CONTACT_DONOTSEARCH_ANYWHERE 1 v Setup-> Ostatní. Vyhledávání pak bude omezena na začátek řetězce.
    -DelaiedFullListToSelectCompany=Počkat stisknutí klávesy před vložením obsahu seznamu subjektů combo (To může zvýšit výkon, pokud máte velké množství subjektů, ale je to méně pohodlné)
    -DelaiedFullListToSelectContact=Počkat stisknutí klávesy před vložením obsahu seznamu kontaktů combo (To může zvýšit výkon, pokud máte velký počet kontaktů, ale je to méně pohodlné)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Počet charakterů nutných k spuštění hledání: %s
     NotAvailableWhenAjaxDisabled=Není k dispozici při vypnutém Ajaxu
     AllowToSelectProjectFromOtherCompany=Na dokumentu třetí osoby, mohou vybrat projekt spojený s jinou třetí stranou
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Náhled není k dispozici
     ThemeCurrentlyActive=Téma aktivní
     CurrentTimeZone=Časové pásmo PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Termíny jsou uloženy a vráceny databázového serveru, jako kdyby byly vedeny jako odeslán řetězec. Časové pásmo má vliv pouze při použití funkce UNIX_TIMESTAMP (které by neměly být používány Dolibarr, takže databáze TZ by nemělo mít žádný vliv, i když se změnila po byla zadána data).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Mezera
     Table=Tabulka
     Fields=Pole
    @@ -111,14 +111,14 @@ NotConfigured=Modul/aplikace není nakonfigurován(a)
     Active=Aktivní
     SetupShort=Nastavení
     OtherOptions=Další možnosti
    -OtherSetup=Další nastavení
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Desetinný oddělovač
     CurrentValueSeparatorThousand=Oddělovač tisíců
     Destination=Destinace
     IdModule=Modul ID
     IdPermissions=Oprávnění ID
     LanguageBrowserParameter=Parametr %s
    -LocalisationDolibarrParameters=Lokalizační parametry
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Časové pásmo klienta (uživatele)
     ClientHour=Klientův čas (uživatelův)
     OSTZ=Server OS Časové pásmo
    @@ -126,8 +126,8 @@ PHPTZ=Časové pásmo PHP serveru
     DaylingSavingTime=Letní čas
     CurrentHour=PHP Čas (server)
     CurrentSessionTimeOut=Aktuální časový limit relace
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Boxy
     MaxNbOfLinesForBoxes=Maximální počet řádků pro widgety
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignorovat chyby duplicitních záznamů (INSERT IGNORE)
     AutoDetectLang=Autodetekce (jazyku prohlížeče)
     FeatureDisabledInDemo=Funkce zakázána v demu
     FeatureAvailableOnlyOnStable=Funkce je k dispozici pouze v oficiálních stabilních verzích
    -BoxesDesc=Widgety jsou oblasti obrazovky, které ukazují krátké informace na některých stránkách. Můžete si vybrat mezi zobrazením/schováním boxu zvolením cílové stránky a kliknutím na 'Aktivovat' nebo kliknutím na popelnici ji zakázat.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Pouze prvky z <a href="%s">povolených modulů</a> jsou uvedeny.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Více modulů naleznete ke stažení na externích webových stránkách ...
    -ModulesDeployDesc=Pokud oprávnění na souborovém systému dovolí, můžete použít tento nástroj k nasazení externího modulu. Modul wil pak bude viditelný na kartě <strong> %s </ strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Nový
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=Nasadit / instalovat nový modul, přejděte na nastavení plochy modulu na <a href="%s"> %s </a>.
     DoliStoreDesc=DoliStore, oficiální trh pro download externích modulů Dolibarr ERP / CRM
    -DoliPartnersDesc=Seznam firem poskytujících zakázku vyvinuté moduly nebo funkce (Poznámka: někdo se zkušenostmi v programování v PHP může poskytnout zakázkový vývoj pro open source projekt)
    -WebSiteDesc=Referenční webové stránky, kde naleznete další moduly ...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Odkaz
     BoxesAvailable=widgety k dispozici
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Ukládat hesla v databázi pouze šifrovaně (Doporučen
     MainDbPasswordFileConfEncrypted=Šifrovat přístupové heslo databáze v conf.php (Doporučeno)
     InstrucToEncodePass=Pro uložení zašifrovaného hesla do <b>conf.php</b>, nahraďte řádku <br> <b>$dolibarr_main_db_pass="..."</b> <br> hodnotou <br> <b>$dolibarr_main_db_pass="crypted:%s"</b>
     InstrucToClearPass=Pro uložení nezašifrovaného hesla do <b>conf.php</b>, nahraďte řádku <br> <b>$dolibarr_main_db_pass="crypted:..."</b> <br> hodnotou <br> <b>$dolibarr_main_db_pass="%s"</b>
    -ProtectAndEncryptPdfFiles=Přidat ochranu generovaných souborů PDF (Nedoporučuje se, zablokuje hromadné generování PDF)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Ochrana dokumentů PDF neomezí možnost otevírání dokumentů jakýmkoliv prohlížečem. Nicméně, editace a kopírování přestane být možná. Zapnutím této ochrany přijdete o možnost vytváření kumulovaných PDF (např. nezaplacených faktur)
     Feature=Funkce
     DolibarrLicense=Licence
    @@ -246,8 +246,8 @@ ExternalResources=Cizí zdroje
     SocialNetworks=Sociální sítě
     ForDocumentationSeeWiki=Pro uživatelskou nebo vývojářskou dokumentaci (Doc, FAQs ...) <br> navštivte Dolibarr Wiki: <br> <a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=V případě jakýchkoliv dalších dotazů nebo nápovědy použijte fórum Dolibarr: <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=Tato oblast slouží k získání nápovědy a podpory systému Dolibarr.
    -HelpCenterDesc2=Některé části této služby jsou k dispozici <b>pouze</b> v <b>angličtině.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Aktuální handler menu
     MeasuringUnit=Měrná jednotka
     LeftMargin=levý okraj
    @@ -262,31 +262,35 @@ NoticePeriod=Výpovědní lhůta
     NewByMonth=New podle měsíce
     Emails=Emaily
     EMailsSetup=Nastavení emailů
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS Port (Výchozí nastavení v php.ini:  <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS Host (Výchozí nastavení v php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS Port (Nedefinováno v PHP na Unixových systémech)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Hosts (Nedefinováno v PHP na Unixových systémech)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Poslat systémovou skrytou kopii všech odeslaných e-mailů na
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Metoda odesílání e-mailů
    -MAIN_MAIL_SMTPS_ID=SMTP ID je-li vyžadováno ověření
    -MAIN_MAIL_SMTPS_PW=SMTP heslo je-li vyžadováno ověření
    -MAIN_MAIL_EMAIL_TLS= Použít TLS (SSL) šifrování
    -MAIN_MAIL_EMAIL_STARTTLS= Použít TLS (STARTTLS) šifrování
    -MAIN_DISABLE_ALL_SMS=Zakázat všechny odesílané SMS (pro testovací účely apod.)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Použitá metoda pro odesílání SMS
    -MAIN_MAIL_SMS_FROM=Výchozí telefonní číslo odesílatele SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Uživatelský e-mail
     CompanyEmail=email Firma
     FeatureNotAvailableOnLinux=Funkce není k dispozici na Unixových systémech. Otestujte svůj sendmail program lokálně.
    -SubmitTranslation=Pokud překlad pro tento jazyk je neúplný, nebo chybný, můžete jej opravit editací souborů v adresáři <b>langs/%s</b> a předložit změněné soubory na fóru www.dolibarr.org.\n\nAktuální překlady získáte na https://www.transifex.com/dolibarr-association/dolibarr/dashboard/ kde se také můžete po vytvoření účtu na překladech podílet.
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Pokud překlad pro tento jazyk není úplný nebo najdete chyby, můžete to opravit úpravou souborů do adresáře <b> langs / %s </ b> a odeslat modifikované soubory na stránkách dolibarr.org/forum nebo pro vývojáře na adrese github.com/ Dolibarr / dolibarr.
     ModuleSetup=Nastavení modulu
     ModulesSetup=Nastavení modulu/aplikace
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Nepoužívejte ve výrobě
     ThisIsProcessToFollow=Nastaveno na proces:
     ThisIsAlternativeProcessToFollow=Jedná se o alternativní nastavení zpracovávat ručně:
     StepNb=Krok %s
    -FindPackageFromWebSite=Nalezni balíček, obsahující funkci jež chcete (např. na oficiálních stránkách %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download balíčku (například z oficiálních webových stránek %s).
    -UnpackPackageInDolibarrRoot=Rozbalte soubor balíčku do adresáře, vyhrazenému pro externí moduly: <b>%s</b>
    -UnpackPackageInModulesRoot=Nasadit / instalovat externí modul, rozbalit zabalené soubory do adresáře serveru věnovaného modulů: <b> %s </ b>
    -SetupIsReadyForUse=Nasazení modulu je dokončeno. Musíte však povolit a nastavit modul ve své administraci tím, že jdete na stránku nastavení modulů: <a href="%s"> %s </a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=Alternativní kořenový adresář není definován. <br>
     InfDirAlt=Od verze 3 je možné definovat alternativní kořenovou složku. To umožňuje ukládat na stejné místo plug-iny a vlastní šablony. <br> Stačí vytvořit adresář v kořenovém adresáři Dolibarr (např.: custom). <br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr aktuální verze
     CallUpdatePage=Přejděte na stránku, která aktualizuje strukturu databáze a data: %s.
     LastStableVersion=Poslední stabilní verze
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Zpoždění pro ukládání výsledku exportu do mezipaměti v sekundách (0 nebo prázdné pro neukládání)
     DisableLinkToHelpCenter=Skrýt odkaz <b>&quot;Potřebujete pomoc či podporu&quot;</b> na přihlašovací stránce
     DisableLinkToHelp=Skrýt odkaz na on-line nápovědě "<b> %s </ b>"
    -AddCRIfTooLong=Neexistuje žádný automatický balení, takže pokud linka je mimo stránky na dokumentech, protože příliš dlouho, musíte přidat sami návrat vozíku do textového pole.
    -ConfirmPurge=Jste si jisti, že chcete spustit tuto očistu? <br> Toto smaže definitivně všechny datové soubory a nelze je žádným způsobem je obnovit (ECM soubory, přiložené soubory ...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimální délka
     LanguageFilesCachedIntoShmopSharedMemory=Soubory. Lang vložen do sdílené paměti
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Příklady s aktuálním systémem nastavení
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Seznam OpenDocument šablony seznamů
     ListOfDirectoriesForModelGenODT=Seznam adresářů obsahující soubory šablon s formátem OpenDocument <br> <br> Přidejte adresář modulu GED <br> <br> Přidejte adresář modulu GED. > DOL_DATA_ROOT / ecm / yourdirectoryname </ b>. Soubory v těchto adresářích musí končit znakem <b> .odt </ b> nebo <b> .ods </ b>.
    -NumberOfModelFilesFound=Počet ODT / ODS šablony souborů naleznete v těchto adresářích
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Příklady syntaxe: <br> c: \\ mydir <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Chcete-li vědět, jak vytvořit své ODT šablony dokumentů před jejich uložením do těchto adresářů, přečtěte si wiki dokumentace:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Klíč k použití Web Services (parametr &quot;dolibarr
     TestSubmitForm=Vstup Testovací formulář
     ThisForceAlsoTheme=Pomocí tohoto menu správce bude také používat své vlastní téma, co je podle volby uživatele. Také v tomto menu správce specializuje na chytré telefony není funguje na všech smartphonu. Použijte menu jinou správce, pokud máte problémy na vás.
     ThemeDir=Skins adresář
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Reakce timeout
     SmsTestMessage=Zkušební zpráva od __ PHONEFROM__ do __ PHONETO__
     ModuleMustBeEnabledFirst=Modul <b> %s </ b> musí být napřed povolen, pokud budete potřebovat tuto funkci.
     SecurityToken=Klíč k zabezpečené URL
    -NoSmsEngine=Ne odesílatel SMS manažer k dispozici. SMS odesílatele manažer nejsou nainstalovány s výchozí rozložení (protože závisí na externím dodavatelem), ale můžete najít některé z %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Můžete nastavit každý globální možnosti týkající se generování PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Pravidla se budují adresy boxy
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Skrýt popis produktů z vytvořeného PDF
     HideRefOnPDF=Skrýt produkty čj. na vytvořené PDF
     HideDetailsOnPDF=Skrýt produktové řady podrobnosti o generované PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametry k zajištění URL
     SecurityTokenIsUnique=Používáme unikátní securekey parametr pro každou adresu URL
     EnterRefToBuildUrl=Zadejte odkaz na objekt %s
     GetSecuredUrl=Získejte vypočtenou URL
    -ButtonHideUnauthorized=Skrýt tlačítka pro uživatele mimo administrátora k neautorizovaným zásahům místo zobrazení zapadlý tlačítek bez funkce
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Staré Sazba DPH
     NewVATRates=Nová sazba DPH
     PriceBaseTypeToChange=Změnit na cenách s hodnotou základního odkazu uvedeného na
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Vyberte seznam
     ExtrafieldSelectList = Vyberte z tabulky
     ExtrafieldSeparator=Oddělovač (není položka)
     ExtrafieldPassword=Heslo
    -ExtrafieldRadio=Přepínače (pouze jedna volba)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Zaškrtávače
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Odkaz na objekt
     ComputedFormula=Vypočtené pole
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Výchozí odkaz
     SetAsDefault=Nastavit jako výchozí
     ValueOverwrittenByUserSetup=Pozor, tato hodnota může být přepsána uživatelem specifické nastavení (každý uživatel může nastavit vlastní clicktodial url)
     ExternalModule=Externí modul - instalován do adresáře %s
    -BarcodeInitForThirdparties=Mass čárový kód init pro thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass init čárový kód nebo reset pro výrobky nebo služby
     CurrentlyNWithoutBarCode=V současné době máte <strong> %s </ strong> záznam na <strong> %s </ strong> %s bez čárového kódu definovaného.
     InitEmptyBarCode=Init hodnota pro příští %s prázdnými záznamů
     EraseAllCurrentBarCode=Vymazat všechny aktuální hodnoty čárových kódů
     ConfirmEraseAllCurrentBarCode=Jste si jisti, že chcete vymazat všechny aktuální hodnoty čárových kódů?
     AllBarcodeReset=Byly odstraněny všechny hodnoty čárových kódů
    -NoBarcodeNumberingTemplateDefined=Žádné šablony číslování čárových kódů aktivované v nastavení modulu čárových kódů.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Aktivovat mezipaměť souborů
     ShowDetailsInPDFPageFoot=Přidat další podrobnosti do zápatí PDF souborů, jako vaše firemní adresy nebo názvy manažer (k dokončení profesionální IDS společnost kapitálové a číslo DPH).
     NoDetails=Žádné další podrobnosti v zápatí
     DisplayCompanyInfo=Zobrazit adresu společnosti
     DisplayCompanyManagers=Jména display manažer
     DisplayCompanyInfoAndManagers=Zobrazte adresu firmy a jména správce
    -EnableAndSetupModuleCron=Chcete-li mít tento opakující faktury soupisky generovány automaticky, modul * %s * musí být povoleno a správně nastaveny. V opačném případě, generování faktur musí být provedeno manuálně z této šablony s tlačítkem * Vytvořit *. Všimněte si, že i když jste povolili automatické generování, stále se můžete bezpečně spustit manuální generaci. Duplikáty generace za stejné období nejsou možné.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=Ve výchozím nastavení musí být nákupní objednávky vytvořeny a schváleny dvěma různými uživateli (jeden krok / uživatel k vytvoření a jeden krok / uživatel ke schválení. Všimněte si, že pokud má uživatel oprávnění k vytvoření a schválení, stačí jeden krok / uživatel) . Touto volbou můžete požádat o zavedení třetího schvalovacího kroku / schválení uživatele, pokud je částka vyšší než určená hodnota (potřebujete tedy 3 kroky: 1 = ověření, 2 = první schválení a 3 = druhé schválení, pokud je dostatečné množství). <br> Pokud je zapotřebí jedno schvalování (2 kroky), nastavte jej na velmi malou hodnotu (0,1), pokud je vždy požadováno druhé schválení (3 kroky).
     UseDoubleApproval=Použijte schválení 3 kroky, kdy částka (bez DPH) je vyšší než ...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Kliknutím zobrazíte popis
    -DependsOn=Tento modul je třeba modul (y)
    +DependsOn=This module needs the module(s)
     RequiredBy=Tento modul je vyžadováno modulu (modulů)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=Překlad byl nalezen na klíče s tímto kódem, takže tuto hodnotu změnit, musíte upravit jej FOM Home-Setup-překlad.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Pole
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Uživatelé a skupiny
     Module0Desc=Uživatelé / zaměstnanci a vedení Skupiny
    -Module1Name=Třetí strany
    +Module1Name=Third Parties
     Module1Desc=Firmy a správu kontaktů (zákazníci, vyhlídky ...)
     Module2Name=Obchodní
     Module2Desc=Obchodní řízení
     Module10Name=Účetnictví
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Návrhy
     Module20Desc=Komerční návrh řízení
     Module22Name=Mass E-mailing
    @@ -511,13 +517,13 @@ Module52Desc=Skladové hospodářství (výrobky)
     Module53Name=Služby
     Module53Desc=Správa služeb
     Module54Name=Smlouvy/Objednávky
    -Module54Desc=Správa smluv (služeb nebo reccuring předplatné)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Čárové kódy
     Module55Desc=Barcode řízení
     Module56Name=Telefonie
     Module56Desc=Telefonie integrace
     Module57Name=Přímé bankovní platební příkazy
    -Module57Desc=Správa platebních příkazů přímého inkasa. Zahrnuje generování souboru SEPA pro evropské země.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integrace ClickToDial systému (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Nákladové a výlet poznámky
     Module75Desc=Náklady a výlet poznámky řízení
     Module80Name=Zásilky
     Module80Desc=Přeprava a dodání účelem řízení
    -Module85Name=Banky a peněžní
    +Module85Name=Banks and Cash
     Module85Desc=Správa bankovních účtech nebo v hotovosti
    -Module100Name=Externí stránky
    -Module100Desc=Tento modul je externí webové stránky nebo stránku do menu Dolibarr a zobrazit ji do rámu Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Pošťák a SPIP
     Module105Desc=Pošťák nebo SPIP rozhraní pro členské modul
     Module200Name=LDAP
    -Module200Desc=LDAP synchronizace adresářů
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integrace
     Module240Name=Exporty dat
    -Module240Desc=Nástroj pro export dat Dolibarr (s asistenty)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Import dat
    -Module250Desc=Nástroj pro import dat v Dolibarr (s asistenty)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Členové
     Module310Desc=Nadace členové vedení
     Module320Name=RSS Feed
     Module320Desc=Přidat RSS kanál uvnitř obrazovek Dolibarr
    -Module330Name=Záložky
    -Module330Desc=Záložky řízení
    -Module400Name=Projekty/Příležitosti/Vedení
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=WebCalendar
     Module410Desc=WebCalendar integrace
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Platba mezd zaměstnanců
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Půjčka
     Module520Desc=Správa úvěrů
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Dary
     Module700Desc=Darování řízení
     Module770Name=Zpráva výdajů
    -Module770Desc=Management a reklamace vyúčtování výdajů (doprava, jídlo, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Hromadná pošta generování dokumentů
     Module1780Name=Tagy/Kategorie
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Umožňují upravit některá textové pole přes pokročilý editor (na základě CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamické ceny
     Module2200Desc=Povolit použití matematických výrazů pro ceny
     Module2300Name=Naplánované úlohy
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Události / Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API / Webové služby (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Povolit Dolibarr SOAP serveru poskytující služby API
     Module2610Name=API / webové služby REST (server)
     Module2610Desc=Povolit služby API serveru poskytující Dolibarr REST
     Module2660Name=Call WebServices (SOAP klient)
    -Module2660Desc=Povolit webové služby klienta Dolibarr (lze použít, aby se zasadila data / žádosti o externí servery. Dodavatel objednávky podporované jen na chvíli)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Pomocí on-line služby (Gravatar www.gravatar.com) ukázat fotku uživatelů / členů (nalezen s jejich e-maily). Potřebujete přístup k internetu
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP klient
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind konverze možnosti
     Module3100Name=Skype
     Module3100Desc=Přidání tlačítka Skype na uživatele /subjekty/ Kontakty / členy karet
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-společnost
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Webové stránky
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Nechte řízení požadavků
    -Module20000Desc=Deklarovat a dodržovat zaměstnanci opustí požadavky
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Šarže nebo sériové číslo, jíst-by a sell-managementem data o produktech
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Bod prodeje
     Module50100Desc=Bod prodejního modulu (POS).
    +Module50150Name=Prodejní místa
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Účetnictví (pokročilé)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Přímý tisk (bez otevření dokumentů) pomocí poháry IPP rozhraní (tiskárna musí být viditelné ze serveru, a CUPS musí být installe na serveru).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Anketa, průzkum nebo hlasování
    -Module55000Desc=Modul pro tvorbu on-line průzkumů a anket (jako Doodle, šroub, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Okraje
     Module59000Desc=Modul pro správu marže
     Module60000Name=Provize
     Module60000Desc=Modul pro správu provize
    -Module62000Name=Incoterm
    -Module62000Desc=Přidat funkce pro správu Incotermu
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Zdroje
     Module63000Desc=Spravovat zdroje (tiskárny, auta, prostor, ...), pak můžete sdílet na akcích
     Permission11=Přečtěte si zákazníků faktury
    @@ -651,9 +661,9 @@ Permission32=Vytvořit / upravit produktů
     Permission34=Odstranit produkty
     Permission36=Viz / správa skryté produkty
     Permission38=Export produktů
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Vytvořit/upravit projekty (společný projekt a projekty Jsem kontakt). Je také možné vytvořit úkoly a přiřazovat uživatelům projekt a úkoly
    -Permission44=Odstranit projektů (společné projekty, projekt a já jsem kontakt pro)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projekty
     Permission61=Přečtěte intervence
     Permission62=Vytvořit / upravit zásahy
    @@ -686,7 +696,7 @@ Permission109=Odstranit sendings
     Permission111=Přečtěte finančních účtů
     Permission112=Vytvořit / upravit / smazat a porovnat transakce
     Permission113=Nastavení finančních účtů (vytváření, správa kategorií)
    -Permission114=Konsolidace transakce
    +Permission114=Reconcile transactions
     Permission115=Vývozních transakcí, a výpisy z účtů
     Permission116=Převody mezi účty
     Permission117=Správa kontroly dispečinku
    @@ -694,15 +704,15 @@ Permission121=Přečtěte třetí strany v souvislosti s uživateli
     Permission122=Vytvořit / modifikovat třetí strany spojené s uživateli
     Permission125=Odstranění třetí strany v souvislosti s uživateli
     Permission126=Export třetí strany
    -Permission141=Přečtěte si všechny projekty a úkoly (také soukromých záměrů nejsem kontaktovat)
    -Permission142=Vytvořit / upravit všechny projekty a úkoly (také na soukromé záměry nejsem v kontaktu pro)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Smazat všechny projekty a úkoly (také soukromé projekty, pro které nejsem kontakt)
     Permission146=Přečtěte si poskytovatelé
     Permission147=Přečtěte si statistiky
     Permission151=Číst přímé debetní platební příkazy
     Permission152=Vytvořit / upravit inkasní příkazy k úhradě
     Permission153=Odeslat / vysílat přímý debetní platební příkazy
    -Permission154=Záznam Credits / odmítá inkasa platebních příkazů
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Přečtené smlouvy/předplatné
     Permission162=Vytvořit / upravit zakázky / předplatné
     Permission163=Aktivace služby / předplatné smlouvy
    @@ -725,7 +735,7 @@ Permission187=Zavřít dodavatelské objednávky
     Permission188=Zrušit dodavatelských objednávek
     Permission192=Vytvořte linky
     Permission193=Zrušit linky
    -Permission194=Přečtěte si šířku pásma, linky
    +Permission194=Read the bandwidth lines
     Permission202=Vytvořte přípojek ADSL
     Permission203=Objednat připojení objednávky
     Permission204=Objednat spoje
    @@ -750,12 +760,12 @@ Permission244=Viz obsah skrytých kategorií
     Permission251=Přečtěte si další uživatele a skupiny
     PermissionAdvanced251=Přečtěte si další uživatele
     Permission252=Přečtěte oprávnění ostatních uživatelů
    -Permission253=Vytvořit / upravit další uživatele, skupiny a permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Vytvořit / upravit interní / externí uživatele a oprávnění
     Permission254=Vytvořit / upravit externí uživatelé pouze
     Permission255=Upravit ostatním uživatelům heslo
     Permission256=Odstranit nebo zakázat ostatním uživatelům
    -Permission262=Rozšířit přístup ke všem subjektům (nejen třetích stran, které uživatel je prodej zástupce). <BR> neúčelné pro externí uživatele (vždy omezeny na sebe k předkládání žádostí, objednávky, faktury, smlouvy atd.) <BR> neúčelné pro projekty (pouze pravidla týkající se oprávnění projektů, viditelnost a přiřazení záležitostí).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Přečtěte CA
     Permission272=Přečtěte si faktury
     Permission273=Vydání faktury
    @@ -765,7 +775,7 @@ Permission283=Odstranění kontaktů
     Permission286=Export kontaktů
     Permission291=Přečtěte tarify
     Permission292=Nastavení oprávnění na sazby
    -Permission293=Upravit zákazníky tarify
    +Permission293=Modify customers tariffs
     Permission300=Přečtěte čárových kódů
     Permission301=Vytvořit / upravit čárových kódů
     Permission302=Odstranit čárových kódů
    @@ -787,11 +797,9 @@ Permission401=Přečtěte slevy
     Permission402=Vytvořit / upravit slevy
     Permission403=Ověřit slevy
     Permission404=Odstranit slevy
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Vytvořit/upravit výplaty mezd
    -Permission514=Smazat platy
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export výplat
     Permission520=Přečtěte si Úvěry
     Permission522=Vytvořit/upravit úvěry
    @@ -844,8 +852,8 @@ Permission1251=Spustit Hmotné dovozy externích dat do databáze (načítání
     Permission1321=Export zákazníků faktury, atributy a platby
     Permission1322=Znovu otevřít placené účet
     Permission1421=Export objednávek zákazníků a atributy
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Smazat žádosti o dovolenou
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=číst zdroje
     Permission63002=Vytvořit / upravit zdroje
     Permission63003=Odstranit zdroje
     Permission63004=Propojení zdroje s Plánem akcí
    -DictionaryCompanyType=Druhy subjektů
    -DictionaryCompanyJuridicalType=Právní formy subjektů
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Potencionální úroveň cílů
     DictionaryCanton=Stát/Okres
     DictionaryRegion=Regiony
    @@ -894,7 +902,7 @@ DictionaryVAT=Sazby DPH nebo daň z prodeje
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Platební podmínky
     DictionaryPaymentModes=Platební režimy
    -DictionaryTypeContact=Typy kontaktů/adres
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Formáty papíru
    @@ -908,47 +916,47 @@ DictionarySource=Původ nabídky/objednávky
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Modely pro účetní osnovy
     DictionaryAccountancyJournal=účetní deníky
    -DictionaryEMailTemplates=E-maily šablony
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Jednotky
     DictionaryProspectStatus=stav prospekce
    -DictionaryHolidayTypes=Typy listů
    -DictionaryOpportunityStatus=Stav příležitost k projektu / olovo
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Nastavení uloženo
     SetupNotSaved=Setup not saved
     BackToModuleList=Zpět na seznam modulů
    -BackToDictionaryList=Zpět k seznamu slovníků
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=DPH řízení
    -VATIsUsedDesc=Ve výchozím nastavení při vytváření vyhlídky, faktury, objednávky atd sazba DPH se řídí pravidlem aktivní standardní:. <br> Je-li prodávající nepodléhá dani z přidané hodnoty, pak výchozí DPH na 0. Konec vlády <br> li (prodejní země = kupovat zemi), pak se DPH standardně rovná DPH výrobku v prodejním zemi. Konec pravidla. <br> Pokud prodávající a kupující jsou oba v Evropském společenství a zboží přepravní zařízení (auto, loď, letadlo), výchozí DPH je 0 (DPH by měla být hradí kupující na customoffice své země, a nikoli na prodávající). Konec pravidla. <br> Pokud prodávající a kupující jsou oba v Evropském společenství a kupující není společnost, pak se DPH prodlením k DPH z prodaného produktu. Konec pravidla. <br> Pokud prodávající a kupující jsou oba v Evropském společenství a kupujícím je společnost, pak je daň 0 ve výchozím nastavení. Konec pravidla. <br> V každém čiš případě navrhované default je DPH = 0. Konec pravidla.
    -VATIsNotUsedDesc=Ve výchozím nastavení je navrhovaná DPH 0, který lze použít v případech, jako je sdružení jednotlivců ou malých podniků.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rychlost
     LocalTax1IsNotUsed=Nepoužívejte druhá daň
    -LocalTax1IsUsedDesc=Použijte druhý typ daně (kromě DPH)
    -LocalTax1IsNotUsedDesc=Nepoužívejte jiný typ daně (kromě DPH)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Druhý typ daně
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Nepoužívejte třetí daň
    -LocalTax2IsUsedDesc=Použijte třetí typ daně (kromě DPH)
    -LocalTax2IsNotUsedDesc=Nepoužívejte jiný typ daně (kromě DPH)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Třetí druh daně
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE řízení
    -LocalTax1IsUsedDescES= RE sazba ve výchozím nastavení při vytváření vyhlídky, faktury, objednávky atd. sledovat aktivní standardní pravidlo: <br> Pokud te Kupující není vystaven RE, RE standardně = 0. Konec vlády. <br> Pokud kupující vystaven RE RE pak ve výchozím nastavení. Konec vlády. <br>
    -LocalTax1IsNotUsedDescES= Ve výchozím nastavení je navrhovaná RE je 0. Konec vlády.
    -LocalTax1IsUsedExampleES= Ve Španělsku jsou profesionálové s výhradou některých specifických částí španělského IAE.
    -LocalTax1IsNotUsedExampleES= Ve Španělsku jsou profesionální a společnosti a za určitých částí španělského IAE.
    -LocalTax2ManagementES= IRPF řízení
    -LocalTax2IsUsedDescES= RE sazba ve výchozím nastavení při vytváření vyhlídky, faktury, objednávky atd. sledovat aktivní standardní pravidlo: <br> Pokud prodávající není vystaven IRPF, pak IRPF standardně = 0. Konec vlády. <br> Je-li prodávající vystaven IRPF pak IRPF ve výchozím nastavení. Konec vlády. <br>
    -LocalTax2IsNotUsedDescES= Ve výchozím nastavení je navrhovaná IRPF je 0. Konec vlády.
    -LocalTax2IsUsedExampleES= Ve Španělsku, na volné noze a nezávislí odborníci, kteří poskytují služby a firmy, kteří se rozhodli daňového systému modulů.
    -LocalTax2IsNotUsedExampleES= Ve Španělsku jsou bussines, které nejsou předmětem daňového systému modulů.
    +LocalTax1ManagementES=RE řízení
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Ve výchozím nastavení je navrhovaná RE je 0. Konec vlády.
    +LocalTax1IsUsedExampleES=Ve Španělsku jsou profesionálové s výhradou některých specifických částí španělského IAE.
    +LocalTax1IsNotUsedExampleES=Ve Španělsku jsou profesionální a společnosti a za určitých částí španělského IAE.
    +LocalTax2ManagementES=IRPF řízení
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Ve výchozím nastavení je navrhovaná IRPF je 0. Konec vlády.
    +LocalTax2IsUsedExampleES=Ve Španělsku, na volné noze a nezávislí odborníci, kteří poskytují služby a firmy, kteří se rozhodli daňového systému modulů.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Zprávy o místních daních
     CalcLocaltax1=Prodej - Nákupy
     CalcLocaltax1Desc=Místní zprávy Daně jsou počítány s rozdílem mezi prodejem localtaxes a localtaxes nákupů
    @@ -958,7 +966,8 @@ CalcLocaltax3=Odbyt
     CalcLocaltax3Desc=Místní taxy zprávy jsou celkové prodeje localtaxes
     LabelUsedByDefault=Label používá ve výchozím nastavení, pokud není překlad lze nalézt kód
     LabelOnDocuments=Štítek na dokumenty
    -NbOfDays=Nb dní
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Na konci měsíce
     CurrentNext=Aktuální / Next
     Offset=Ofset
    @@ -984,7 +993,7 @@ DatabaseUser=Databáze uživatel
     DatabasePassword=Databáze heslo
     Tables=Tabulky
     TableName=Název tabulky
    -NbOfRecord=Nb záznamů
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Typ ovladače
     SummarySystem=Systém souhrn informací
    @@ -996,7 +1005,7 @@ Skin=Skin téma
     DefaultSkin=Default skin téma
     MaxSizeList=Maximální délka seznamu
     DefaultMaxSizeList=Výchozí maximální délka pro seznamy
    -DefaultMaxSizeShortList=Výchozí maximální délka pro krátké seznamy (tj. V kartě zákazníka)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Zpráva dne
     MessageLogin=Přihlašovací stránka zprávu
     LoginPage=přihlašovací stránka
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanentní vyhledávací formulář na levém menu
     DefaultLanguage=Výchozí jazyk používat (kód jazyka)
     EnableMultilangInterface=Povolit vícejazyčné rozhraní
     EnableShowLogo=Zobrazit logo na levém menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Název
     CompanyAddress=Adresa
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Majitel %s bankovních účtů
     BankModuleNotActive=Účty v bankách modul není povolen,
     ShowBugTrackLink=Ukázat odkaz "<strong> %s </ strong>"
     Alerts=Upozornění
    -DelaysOfToleranceBeforeWarning=Tolerance zpoždění před varování
    -DelaysOfToleranceDesc=Tato obrazovka umožňuje definovat tolerovat zpoždění před upozornění je hlášen na obrazovce s %s Piktogram pro každý pozdní prvek.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolerance zpoždění (ve dnech) před záznamem o plánovaných akcích (Agenda akce) dosud nerealizovaných
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolerance zpoždění (ve dnech) před záznam o projektu není uzavřeno v čase
    -Delays_MAIN_DELAY_TASKS_TODO=Zpozdit toleranci (ve dnech) před záznamem o plánovaných úkolů (projektové úkoly) dosud nebyly dokončeny
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Tolerance zpoždění (ve dnech) před záznamem na objednávkách dosud nezpracovaných
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Zpoždění tolerance (ve dnech) před záznam o návrzích zavřete
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Zpoždění tolerance (ve dnech) před záznam o návrzích účtovány
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance zpoždění (ve dnech) před záznam o službách aktivovat
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance zpoždění (ve dnech) před záznam o prošlých služeb
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance zpoždění (ve dnech) před záznam o neuhrazených dodavatelských faktur
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Toleranci zpoždění (ve dnech) před záznam o nezaplacených faktur zákazníka
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance zpoždění (ve dnech) před probíhajícím záznamu o bankovním smíření
    -Delays_MAIN_DELAY_MEMBERS=Tolerance zpoždění (ve dnech) před záznam o zpoždění členského poplatku
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance zpoždění (ve dnech) před pohotovosti pro kontrolu vklad dělat
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance zpoždění (ve dnech) před záznamem pro výkazů o výdajích schválit
    -SetupDescription1=Oblast nastavení je pro počáteční nastavení parametrů ještě před začátkem užívání Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Ostatní položky menu spravovat volitelné parametry.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Události bezpečnostní audit
     Audit=Audit
     InfoDolibarr=o Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Můžete povolit zde protokolování událostí Dolibarr zabezpeče
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=Systémové informace je různé technické informace získáte v režimu pouze pro čtení a viditelné pouze pro správce.
     SystemAreaForAdminOnly=Tato oblast je k dispozici pro správce uživatele. Žádný z Dolibarr oprávnění může snížit tento limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Můžete si vybrat každý parametr týkající se vzhledu Dolibarr a cítit se zde
     AvailableModules=Available app/modules
     ToActivateModule=Pro aktivaci modulů, přejděte na nastavení prostoru (Domů-&gt; Nastavení-&gt; Modules).
     SessionTimeOut=Time out na zasedání
    -SessionExplanation=Toto číslo zaručeno, že relace nikdy nevyprší před tímto zpožděním, pokud relace čistič se provádí vnitřní čištění relace PHP (a nic jiného). Vnitřní PHP zasedání čistší není zárukou, že relace vyprší právě po této doby. Jeho platnost skončí poté, co toto zpoždění, a když relace čistič běžel, takže každý <b>%s / %s</b> přístup, ale pouze v případě přístupu ze strany jiných relacích. <br> Poznámka: na některých serverech s vnějším mechanismem relace čištění (cron pod Debian, Ubuntu ...), může být zničena relace po dobu definovanou výchozí <strong>session.gc_maxlifetime,</strong> bez ohledu na to, co je zadaná hodnota.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Dostupné spouštěče
    -TriggersDesc=Triggery jsou soubory, které se změní chování Dolibarr workflow jednou zkopírován do adresáře <b>htdocs / jádro / spouštěče.</b> Uvědomili si nové akce, aktivní na akcích Dolibarr (nová společnost stvoření, faktura validace, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Trigger v tomto souboru jsou <b>zakázána-NoRun</b> přípona ve svém názvu.
     TriggerDisabledAsModuleDisabled=Trigger v tomto souboru jsou zakázány jako modul <b>%s</b> je zakázáno.
     TriggerAlwaysActive=Trigger v tomto souboru jsou vždy aktivní, ať už jsou aktivované Dolibarr moduly.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Vložit všechny referenční data. Můžete přidat své hodnoty
     ConstDesc=Na této stránce můžete upravovat všechny ostatní parametry které nejsou k dispozici v předchozích stránkách. Ty jsou většinou vyhrazeny parametry pro vývojáře a pokročilé řešení problémů. Pro seznam možnosti <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site-otevře v novém window" target="_blank"> kontrole zde </ a>.
     MiscellaneousDesc=Všechny ostatní parametry spojené s bezpečností definujete zde.
     LimitsSetup=Limity / Přesné nastavení
    -LimitsDesc=Můžete definovat limity, upřesnění a optimalizace používané Dolibarr zde
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max desetinná pro jednotkových cen
     MAIN_MAX_DECIMALS_TOT=Max desetinná místa pro celkové ceny
     MAIN_MAX_DECIMALS_SHOWN=Max desetinná pro ceny zobrazeny na obrazovce (Přidat <b>...</b> po této řady, chcete-li vidět <b>...</b> když je číslo zkrácena při zobrazení na obrazovce)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Čistá jednotková cena produktu
     TotalPriceAfterRounding=Celková cena (bez DPH / s DPH / s DPH) po zaokrouhlení
     ParameterActiveForNextInputOnly=Parametr efektivní pro další vstup pouze
     NoEventOrNoAuditSetup=Žádná událost zabezpečení byl zaznamenán ještě. To může být normální, pokud audit nebyl povolen &quot;Nastavení - Zabezpečení - auditu&quot; stránky.
    -NoEventFoundWithCriteria=Žádná událost zabezpečení byl nalezen na těchto vyhledávacích kritérii.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Podívejte se na místní sendmail nastavení
     BackupDesc=Chcete-li provést kompletní zálohu Dolibarr, musíte:
     BackupDesc2=Uložte obsah adresáře dokumentů (<b> %s </ b>), který obsahuje všechny nahrané a generované soubory (tedy obsahuje všechny soubory výpisu generovaných v kroku 1).
    -BackupDesc3=Uložte obsah databáze <b>(%s),</b> do souboru výpisu. K tomu můžete použít následující asistenta.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archivní adresář by měl být skladován na bezpečném místě.
     BackupDescY=Vygenerovaný soubor výpisu by měl být skladován na bezpečném místě.
    -BackupPHPWarning=Záloha nemůže být garantováno s touto metodou. Preferuji předchozí
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Chcete-li obnovit zálohu Dolibarr, musíte:
    -RestoreDesc2=Obnovit archivní soubor (soubor zip například) z adresáře dokumentů extrahovat strom souborů v dokumentech adresáři nového zařízení Dolibarr nebo do tohoto aktuálních dokumentech directoy <b>(%s).</b>
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Obnovení dat, ze záložního souboru výpisu, do databáze nové instalace Dolibarr nebo do databáze tohoto stávající instalace <b>(%s).</b> Varování, po obnovení je dokončeno, musíte použít login / heslo, které existovaly, když byla provedena záloha, se znovu připojit. Chcete-li obnovit záložní databázi do této stávající instalace, můžete sledovat tento asistenta.
     RestoreMySQL=MySQL import
     ForcedToByAModule= Toto pravidlo je nucen <b>%s</b> aktivovaným modulem
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Je nutné spustit tento příka
     YourPHPDoesNotHaveSSLSupport=SSL funkce není k dispozici ve vašem PHP
     DownloadMoreSkins=Další skiny ke stažení
     SimpleNumRefModelDesc=Vrací referenční číslo ve formátu nnnn-%syymm kde yy je rok, MM je měsíc a nnnn je sekvence bez otvoru a bez resetu
    -ShowProfIdInAddress=Zobrazit professionnal id s adresami na dokumenty
    -ShowVATIntaInAddress=Skrýt DPH Intra num s adresami na dokumentech
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Částečný překlad
    -MAIN_DISABLE_METEO=Zakázat meteo názor
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Otestujte přihlásit do API
    -ProxyDesc=Některé funkce Dolibarr musí mít přístup na internet k práci. Definujte zde parametry pro toto. Pokud je server Dolibarr je za proxy serverem, tyto parametry Dolibarr říká, jak se k internetu přes něj.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Externí přístup
     MAIN_PROXY_USE=Použití proxy serveru (jinak přímý přístup k internetu)
     MAIN_PROXY_HOST=Jméno / adresa proxy serveru
     MAIN_PROXY_PORT=Port proxy serveru
     MAIN_PROXY_USER=Přihlásit se použít proxy server
     MAIN_PROXY_PASS=Heslo používat proxy server
    -DefineHereComplementaryAttributes=Definujte zde všechny atributy, které ještě nejsou k dispozici ve výchozím nastavení, a že chcete být podporovány %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Doplňkové atributy
     ExtraFieldsLines=Doplňkové atributy (linky)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Doplňkové atributy (objednávka linky)
     ExtraFieldsSupplierInvoicesLines=Doplňkové atributy (linky faktura)
     ExtraFieldsThirdParties=Doplňkové atributy (thirdparty)
    -ExtraFieldsContacts=Doplňkové atributy (kontakt / adresa)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Doplňkové atributy (člen)
     ExtraFieldsMemberType=Doplňkové atributy (člen typ)
     ExtraFieldsCustomerInvoices=Doplňkové atributy (faktury)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=pouze alfanumerické znaky s malými písmeny b
     SendmailOptionNotComplete=Upozornění na některých operačních systémech Linux, posílat e-maily z vašeho e-mailu, musíte sendmail provedení instalace obsahuje volbu-BA (parametr mail.force_extra_parameters do souboru php.ini). Pokud někteří příjemci nikdy přijímat e-maily, zkuste upravit tento parametr společně s PHP mail.force_extra_parameters =-BA).
     PathToDocuments=Cesta k dokumentům
     PathDirectory=Adresář
    -SendmailOptionMayHurtBuggedMTA=Funkce se odesílat e-maily pomocí metody "PHP mail direct" bude generovat e-mailové zprávy, které by mohly být není správně analyzovat některými dostávají poštovní servery. Výsledkem je, že některé maily nelze číst lidé hostovaných těmito platformami odposloucháván. To je případ některých poskytovatelů služeb Internetu (Ex: Orange ve Francii). To není problém do Dolibarr ani do PHP, ale na přijímání e-mailový server. Můžete však přidat možnost MAIN_FIX_FOR_BUGGED_MTA do 1 do nastavení - jiné upravovat Dolibarr k tomu nedošlo. Nicméně, může dojít k problému s jinými servery, které respektují přísně standard SMTP. Jiné řešení (doporučeno), je použít metodu "SMTP socket knihovnu", které nemá žádné nevýhody.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Nastavení překladu
     TranslationKeySearch=Hledat klíč překlad nebo řetězec
     TranslationOverwriteKey=Přepsat překlad řetězec
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=Můžete také přepsat řetězce čerpacích následující tabulky. Vyberte si svůj jazyk „%s“ rozbalené, vložte klíč řetězec překlad do „%s“ a svým novým překladem do „%s“
    -TranslationOverwriteDesc2=Můžete použít kartu další, které vám pomohou vědět, klíč překlad používat
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=překlad string
     CurrentTranslationString=Aktuální překladový řetězec
     WarningAtLeastKeyOrTranslationRequired=A kritéria vyhledávání je zapotřebí alespoň na klíče nebo překladu řetězce
     NewTranslationStringToShow=Nový překlad řetězec ukázat
     OriginalValueWas=Původní překlad je přepsán. Původní hodnota byla: <br> %s
    -TransKeyWithoutOriginalValue=nucen vám nový překlad pro klíč překladu ‚<strong> %s </ strong>‘, která nemá v žádném jazykové soubory nejsou existuje
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Musíte povolit alespoň jeden modul
    -ClassNotFoundIntoPathWarning=Třída %s nenašli cestu do PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Ano v létě
    -OnlyFollowingModulesAreOpenedToExternalUsers=Všimněte si, pouze tyto moduly jsou otevřeny pro externí uživatele (ať mají povolení těchto uživatelů) a pouze tehdy, pokud bylo uděleno oprávnění:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Úložiště relace šifrována Suhosin
     ConditionIsCurrently=Podmínkou je v současné době %s
    -YouUseBestDriver=Pomocí ovladače %s, že je nejlepší řidič současné době k dispozici.
    -YouDoNotUseBestDriver=Můžete použít disk %s, ale ovladač %s je doporučen.
    -NbOfProductIsLowerThanNoPb=Máte jen %s produktů / služeb do databáze. To však není nutné žádné zvláštní optimalizace.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Optimalizace pro vyhledávače
    -YouHaveXProductUseSearchOptim=Máte %s produkt do databáze. Měli byste přidat konstantní PRODUCT_DONOTSEARCH_ANYWHERE do 1 do Home-Nastavení-Ostatní, můžete omezit vyhledávání na začátku řetězce, která umožňují pro databáze používat index, a vy byste měli dostat okamžitou odpověď.
    -BrowserIsOK=Používáte %s webovém prohlížeči. Tento prohlížeč je v pořádku pro bezpečnost a výkon.
    -BrowserIsKO=Používáte %s webovém prohlížeči. Tento prohlížeč je známo, že špatná volba pro bezpečnost, výkon a spolehlivost. Jsme Doporučuji vám používat Firefox, Chrome, Operu nebo Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=Xdebug je načten.
     XCacheInstalled=XCache načten.
    -AddRefInList=Displej zákazník / dodavatel ref do seznamu (vyberte seznam nebo ComboBox) a většina z hypertextový odkaz. Třetí strany budou zobrazí s názvem "CC12345 - SC45678 - Velké firmy coorp", namísto "The velké společnosti coorp".
    -AskForPreferredShippingMethod=Požádat o přednostní způsob odeslání pro subjekty
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Editace položky %s
     FillThisOnlyIfRequired=Příklad: 2 (vyplnit pouze v případě časové pásmo kompenzovat problémy jsou zkušení)
     GetBarCode=Získat čárový kód
     ##### Module password generation
     PasswordGenerationStandard=Zpět heslo generované podle interního algoritmu Dolibarr: 8 znaků obsahující sdílené čísla a znaky malými písmeny.
    -PasswordGenerationNone=Nenaznačují žádnou vygenerované heslo. Heslo musí být zadány ručně.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Vrátit hesla dle Vašeho osobně definované konfiguraci.
     SetupPerso=Podle konfigurace
     PasswordPatternDesc=Popis popisu hesla
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail nutné vytvořit nového uživatele
     HRMSetup=setup HRM Modul
     ##### Company setup #####
     CompanySetup=Firmy modul nastavení
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=E-maily oznámení funkce vám umožní tiše odesílat automatické poštu, pro některé události Dolibarr. Cíle oznámení mohou být definovány:
     NotificationsDescUser=* Uživatelé na jeden uživatel v čase.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* Nebo nastavením globálních cílových e-mailů na stránce nastavení modulu.
    -ModelModules=Dokumenty šablony
    -DocumentModelOdt=Generování dokumentů z OpenDocuments šablon (. ODT nebo ODS. Soubory OpenOffice, KOffice, TextEdit, ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vodoznak na návrhu dokumentu
     JSOnPaimentBill=Aktivovat funkci pro automatické vyplňování platebních řádků na formuláři platby
    -CompanyIdProfChecker=Pravidla pro profesionální IDs
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Musí být jedinečný?
    -MustBeMandatory=Povinné k vytvoření subjektu?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Povinné ověřování faktur?
     TechnicalServicesProvided=Technické služby poskytované
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Export odkaz na <b>%s</b> formátu je k dispozici na následujícím odkazu: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Export odkaz na <b>%s</b> formátu je k dispozici na nás
     BillsSetup=Faktury modul nastavení
     BillsNumberingModule=Faktury a dobropisy číslování modelu
     BillsPDFModules=Fakturační doklady modely
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Vzory platebních dokumentů
     CreditNote=Dobropis
     CreditNotes=Dobropisy
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Správa Přihlášení pro každého člena
     AdherentMailRequired=EMail nutné vytvořit nového člena
     MemberSendInformationByMailByDefault=Zaškrtávací políčko poslat mailem potvrzení členům (validace nebo nové předplatné) je ve výchozím nastavení
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Nastavení LDAP
     LDAPGlobalParameters=Globální parametry
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Testování vyhledávání LDAP
     LDAPSynchroOK=Synchronizace zkouška úspěšná
     LDAPSynchroKO=Nepodařilo synchronizace testu
    -LDAPSynchroKOMayBePermissions=Nepodařilo synchronizace test. Zkontrolujte, zda je přípojka na server je správně nakonfigurován a umožňuje LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP připojení k LDAP serveru (Server úspěšných = %s, %s port =)
     LDAPTCPConnectKO=TCP připojení k LDAP serveru selhalo (Server = %s, Port = %s)
    -LDAPBindOK=Připojení/Autentifikace k LDAP serveru úspěšná (Server =%s, Port =%s Admin =%s, Heslo =%s)
    -LDAPBindKO=Připojit / Authentificate k LDAP serveru selhalo (Server = %s, Port = %s, Admin = %s, Password = %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server je nakonfigurován pro verzi 3
     LDAPSetupForVersion2=LDAP server je nakonfigurován pro verzi 2
     LDAPDolibarrMapping=Dolibarr mapování
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Přihlášení (samba, activedirectory)
     LDAPFieldLoginSambaExample=Příklad: sAMAccountName
     LDAPFieldFullname=Celé jméno
     LDAPFieldFullnameExample=Příklad: cn
    -LDAPFieldPasswordNotCrypted=Heslo není šifrovaných
    -LDAPFieldPasswordCrypted=Heslo šifrovaných
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Příklad: userPassword
     LDAPFieldCommonNameExample=Příklad: cn
     LDAPFieldName=Název
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Ukázkové hodnoty jsou určeny pro <b>OpenLDAP</b> s následujícími načtených schémat: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Pokud používáte thoose hodnoty a OpenLDAP, upravovat vaše LDAP konfigurační soubor <b>slapd.conf</b> mít všechny thoose schémata načíst.
     ForANonAnonymousAccess=Pro ověřený přístup (pro přístup pro zápis například)
     PerfDolibarr=Výkon Nastavení / optimalizace zpráva
    -YouMayFindPerfAdviceHere=Najdete na této stránce nějaké kontroly nebo rad týkajících se výkonnosti.
    -NotInstalled=Ne, takľe není váš server zpomalit tím.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Aplikačních mezipaměti
     MemcachedNotAvailable=Žádné applicative mezipaměti nalezen. Můžete zvýšit výkon instalací Memcached mezipaměti serveru a modul schopný použít tento mezipaměti serveru. <br> Více informací zde <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a> . <br> Všimněte si, že spousta poskytovatele web hosting neposkytuje takovou mezipaměti serveru.
     MemcachedModuleAvailableButNotSetup=Modul Memcached pro aplikační mezipaměť nalezen, ale nastavení modulu není kompletní.
     MemcachedAvailableAndSetup=Modul Memcached určené k použití Memcached serveru je povoleno.
     OPCodeCache=Opcode mezipaměti
    -NoOPCodeCacheFound=Žádné opcode nalezená keš. Může být použít další opcode paměť než XCache nebo eAccelerator (dobré), může být, že nemáte opcode cache (velmi špatně).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache pro statické zdroje (css, img, javascript)
     FilesOfTypeCached=Soubory typu %s jsou ukládány do mezipaměti serveru HTTP
     FilesOfTypeNotCached=Soubory typu %s nejsou ukládány do mezipaměti serveru HTTP
     FilesOfTypeCompressed=Soubory typu %s jsou zkomprimovány serveru HTTP
     FilesOfTypeNotCompressed=Soubory typu %s nekomprimuje serveru HTTP
     CacheByServer=Cache serverem
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache v prohlížeči
     CompressionOfResources=Komprese odpovědí HTTP
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Taková automatická detekce není možné u současných prohlížečů
    -DefaultValuesDesc=Můžete definovat / sílu zde výchozí hodnotu, kterou chcete získat, když si vytvořit nový rekord, a / nebo défaut filtry nebo pořadí řazení, když váš seznam záznamů.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Výchozí vyhledávací filtry
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Produkty modul nastavení
     ServiceSetup=Služby modul nastavení
     ProductServiceSetup=Produkty a služby moduly nastavení
     NumberOfProductShowInSelect=Maximální počet výrobků ve komba vyberte seznamy (0 = bez omezení)
    -ViewProductDescInFormAbility=Vizualizace popisy produktů ve formách (jinak jako vyskakovací bublině)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Aktivovat v servisním / Attached kartě výrobku Soubory možnost sloučit produkt PDF dokument k návrhu PDF Azur-li výrobek / služba je v návrhu
    -ViewProductDescInThirdpartyLanguageAbility=Vizualizace popisů výrobků v jazyce subjektu
    -UseSearchToSelectProductTooltip=Také pokud máte velký počet produktů (> 100 000), můžete zvýšit rychlost nastavením konstantního PRODUCT_DONOTSEARCH_ANYWHERE na 1 v položce Setup-> Other. Hledání bude omezeno na začátek řetězce.
    -UseSearchToSelectProduct=Počkat stisknutí klávesy před vložením obsahu seznamu produktů combo (To může zvýšit výkon, pokud máte velké množství výrobků, ale je to méně pohodlné)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Výchozí typ čárového kódu použít pro produkty
     SetDefaultBarcodeTypeThirdParties=Výchozí typ čárového kódu použít k třetím osobám
     UseUnits=Vymezují měrnou jednotku pro Množství v průběhu objednávky, návrh nebo faktura linky edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Odeslání Nastavení modulu
     SendingsReceiptModel=Odeslání stvrzenky modelu
     SendingsNumberingModules=Sendings číslování moduly
     SendingsAbility=Podpora zásilka listy pro dodávky zákazníkům
    -NoNeedForDeliveryReceipts=Ve většině případů, dodacích listů jsou používány i jako listů pro dodávky zákazníkům (seznam produktů pro odeslání) a listů, které jsou přijímány a podepsané zákazníkem. Takže dodávky produktů příjmy je duplicitní funkce a je zřídka aktivován.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Volný text o přepravě
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Produkty dodávky příjem číslování modul
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Rozšířené editor
     ActivateFCKeditor=Aktivace pokročilé editor pro:
     FCKeditorForCompany=WYSIWIG vytvoření / edici prvky popisu a poznámka (s výjimkou výrobků / služeb)
     FCKeditorForProduct=WYSIWIG vytvoření / edice produktů / služeb popis a poznámky
    -FCKeditorForProductDetails=WYSIWIG tvorba / vydání z výrobků Detaily linky pro všechny subjekty (návrhy, objednávky, faktury, atd ...). <font class="warning">Upozornění: Použití této možnosti pro tento případ je vážně nedoporučuje, protože to může způsobit problémy se speciálními znaky a formátování stránky při vytváření PDF soubory.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG vytvoření / edice pro hromadné eMailings (Nástroje-&gt; e-mailem)
     FCKeditorForUserSignature=WYSIWIG vytvoření / edice uživatelského podpisu
     FCKeditorForMail=Vytvoření WYSIWIG / edition pro veškerou poštu (s výjimkou Nástroje-> e-mailem)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Připojení úspěšné, ale databáze nevypadá, že databáze OsCommerce (Klíčové %s nenašli v tabulce %s).
    -OSCommerceTestOk=Připojení k serveru &quot;%s&quot; na databázi &quot;%s&quot; s úspěšní uživatel &quot;%s.
    -OSCommerceTestKo1=Připojení k &quot;%s&quot; serveru úspěšná, ale databáze &quot;%s&quot; by nebylo možno dosáhnout.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Připojení k serveru "% s" na databázi '% s' s uživatelem '% s' je úspěšné.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Připojení k serveru &quot;%s&quot; s uživatelem &quot;%s 'se nezdařilo.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=Pokud použijete místě prodeje (POS modulu modulu stanoveného ve výchozím nebo jiným externím modulu), může být toto nastavení ignorováno vaší místě prodeje modulu. Most na prodejních místech moduly jsou navrženy tak, aby vytvořit ihned fakturu a snížit zásoby standardně bez ohledu jsou možnosti zde. Takže, pokud potřebujete mít či nemít pokles zásoby při registraci prodat ze svého Point of Sale, zkontrolujte také váš POS modul nastavit.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu smazán
     Menus=Nabídky
    @@ -1548,7 +1561,7 @@ DetailRight=Podmínka pro zobrazení neoprávněným šedé menu
     DetailLangs=Lang název souboru pro překlad kódu štítek
     DetailUser=Interní / Externí / All
     Target=Cíl
    -DetailTarget=Cíl pro odkazy (_blank nahoře otevře nové okno)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Úroveň (-1: hlavní menu, 0: header menu&gt; 0 Menu a dílčí menu)
     ModifMenu=Menu změna
     DeleteMenu=Smazat položku nabídky
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=DPH je splatná: <br> - Na dobírku za zboží (používám
     OptionVatDebitOptionDesc=DPH je splatná: <br> - Na dobírku za zboží (používáme data vystavení faktury) <br> - Na fakturu (debetní) na služby
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Čas DPH exigibility standardně dle zvolené varianty:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Na dobírku
     OnPayment=Na zaplacení
     OnInvoice=Na faktuře
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Nákup účet. kód
     AgendaSetup=Akce a agenda Nastavení modulu
     PasswordTogetVCalExport=Klíč povolit export odkaz
     PastDelayVCalExport=Neexportovat události starší než
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Nastaví automaticky tuto výchozí hodnotu pro typ akce do akce vytvářet formuláře
    -AGENDA_DEFAULT_FILTER_TYPE=Nastavit automaticky tento typ události do vyhledávacího filtru pohledu agendy
    -AGENDA_DEFAULT_FILTER_STATUS=Nastavit automaticky tento stav pro události do vyhledávacího filtru pohledu agendy
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Karta, kterou chcete otevřít ve výchozím nastavení při výběru v menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Povolit zvukové upozornění
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Klikněte pro Dial Nastavení modulu
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=Tento modul umožňuje kliknutí na telefonní číslo. Kliknutím na tuto ikonu bude volat, aby váš telefon pro volání na telefonní číslo. Toho lze využít k volání call centra systému z Dolibarr které mohou volat na telefonní číslo SIP systému, například.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Na telefonních číslech použijte pouze odkaz "tel:"
    -ClickToDialUseTelLinkDesc=Tuto metodu použijte, pokud uživatelé mají softwarový telefon nebo softwarové rozhraní nainstalován na stejném počítači, než prohlížeče, a volal, když kliknete na odkaz ve vašem prohlížeči, které začínají „tel“. Pokud potřebujete komplexní řešení serveru (bez nutnosti lokální instalace softwaru), musíte toto nastavit na „Ne“ a vyplňte následující pole.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Bod prodeje
     CashDeskSetup=Místě prodeje modulu nastavení
    -CashDeskThirdPartyForSell=Výchozí obecná třetí strana použitá pro prodej
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Výchozí účet použít pro příjem plateb v hotovosti
     CashDeskBankAccountForCheque= Výchozí účet použít pro příjem plateb šekem
     CashDeskBankAccountForCB= Výchozí účet použít pro příjem plateb prostřednictvím kreditní karty
    -CashDeskDoNotDecreaseStock=Zakážete pokles akcií, pokud je prodej uskutečněn z prodejního místa (pokud je to "ne", u každého prodeje provedeného z POS se sníží akcie, ať už je nastavena volba do modulu Akcie).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Vynutit a omezit sklad používat pro pokles zásob
    -StockDecreaseForPointOfSaleDisabled=Sklad pokles od Point of Sale zakázán
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Sklad pokles POS není kompatibilní s řízením šarží
    -CashDeskYouDidNotDisableStockDecease=Jste nezakázali nutnosti snížení při provádění sell od Point of Sale. Takže je zapotřebí sklad.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Záložka Nastavení modulu
    -BookmarkDesc=Tento modul umožňuje spravovat záložky. Můžete také přidat zástupce pro všechny Dolibarr stránky nebo externale webových stránek na vašem levém menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximální počet záložek zobrazí v levém menu
     ##### WebServices #####
     WebServicesSetup=Webservices modul nastavení
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Zkontrolujte, zda příjmy číslování modul
     MultiCompanySetup=Společnost Multi-modul nastavení
     ##### Suppliers #####
     SuppliersSetup=Dodavatel modul nastavení
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Dodavatelských faktur číslování modelů
     IfSetToYesDontForgetPermission=Pokud je nastaveno na ano, nezapomeňte poskytnout oprávnění skupiny nebo uživatele povolených pro druhou schválení
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Projekt modul nastavení
     ProjectsModelModule=Projekt zprávy Vzor dokladu
     TasksNumberingModules=Úkoly číslování modul
     TaskModelModule=Úkoly zprávy Vzor dokladu
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=účetní období
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Můžete najít možnosti
     ListOfNotificationsPerUser=Seznam oznámení na uživatele *
     ListOfNotificationsPerUserOrContact=Seznam oznámení na jednoho uživatele * nebo na kontakt **
     ListOfFixedNotifications=Seznam pevných oznámení
    -GoOntoUserCardToAddMore=Přejít na záložku „oznámení“ o uživateli přidat nebo odebrat oznámení pro uživatele
    -GoOntoContactCardToAddMore=Přejít na záložku „Oznámení“ třetí strany přidat nebo odebrat oznámení pro kontakty / adresy
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Práh
     BackupDumpWizard=Průvodce vybudovat záložní databázi soubor s výpisem
     SomethingMakeInstallFromWebNotPossible=Instalace externího modulu není možné z webového rozhraní z tohoto důvodu:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Instalace externí modul z aplikace by
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Označte řádky tabulky, když tah myš vynechá
     HighlightLinesColor=Zvýrazněte barvu čáry, když myší prochází (držte prázdné, aby nebylo zvýrazněno)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Barva odkazů
     PressF5AfterChangingThis=Stisknutím klávesy CTRL + F5 na klávesnici nebo vymazat mezipaměť prohlížeče Po změně této hodnoty, aby bylo účinné
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=barva pozadí pro sudé řádky tabulky
     MinimumNoticePeriod=Minimální výpovědní lhůta (Vaše žádost dovolená musí být provedeno před tímto zpožděním)
     NbAddedAutomatically=Počet dnů, přidány do čítače uživatelů (automaticky) každý měsíc
     EnterAnyCode=Toto pole obsahuje odkaz k identifikaci řádku. Zadat libovolnou hodnotu dle vlastního výběru, ale bez speciálních znaků.
    -UnicodeCurrency=mezi závorkami, seznam počtu bajtů, které představují symbol měny zadejte zde. Pro exemple: za $, zadejte [36] - pro Brazílii real R $ [82,36] - pro €, zadejte [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=RGB barva je ve formátu HEX, např. FF0000
     PositionIntoComboList=Postavení linky do seznamů combo
     SellTaxRate=Prodej sazba daně
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=V případě, že poskytovatel nebo dopravy nabízejí stránky nebo webové stránky, zkontrolovat stav vašeho dopravou, můžete ji zadat zde. Můžete použít tlačítko {} TrackID do parametrů URL, takže systém bude jej nahradit hodnota sledovací číslo uživatele uzavřela odeslání karty.
    -OpportunityPercent=Při vytváření příležitostí, budete definoval odhadované částky projektu / olovo. V závislosti na stavu příležitosti, může být tato částka vícenásobných tímto tempem zhodnotit celkovou částku všechny své možnosti, může generovat. Hodnota je procento (mezi 0 a 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=Tento záznam šablona je určena ke kterému element
     TypeOfTemplate=Typ šablony
    -TemplateIsVisibleByOwnerOnly=Šablona je viditelná pouze vlastníkovi
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=Používáte nejnovější stabilní verzi
     TitleExampleForMajorRelease=Příklad zprávy, kterou lze použít k oznámit tuto hlavní verzi (bez obav používat na svých webových stránkách)
     TitleExampleForMaintenanceRelease=Příklad zprávy, kterou lze použít k oznámit toto uvolnění do provozu (bez obav používat na svých webových stránkách)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP a CRM %s je k dispozici. Verze %s je hlavní verze s mnoha novými funkcemi pro uživatele i vývojáře. Můžete jej stáhnout z oblasti stahování https://www.dolibarr.org portálu (podadresář Stable verze). Pro úplný seznam změn můžete přečíst <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a>.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s je k dispozici. Verze %s je verze údržby, takže obsahuje pouze opravy o chybách. Doporučujeme všem používáte starší verzi pro upgrade na tento jeden. Jako každá vydání údržby, žádné nové funkce, ani změna struktury dat je přítomna v této verzi. Můžete si jej stáhnout z stažení části https://www.dolibarr.org portál (podadresář stabilní verze). Můžete si přečíst <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> Úplný seznam změn.
    -MultiPriceRuleDesc=Když volba „Několik úroveň cen za produkt / službu“ zapnutá, můžete definovat různé ceny (jeden na cenové hladině) pro každý výrobek. Chcete-li ušetřit čas, můžete zadat zde vládnout mít cenu pro každou úroveň autocalculated podle ceny první úrovni, takže budete muset zadat pouze cenu pro první stupeň na každém výrobku. Tato stránka je zde, aby vám ušetří čas a může být užitečná pouze v případě, ceny pro každou Leve jsou vzhledem k první úrovni. Můžete ignorovat tato stránka ve většině případů.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Šablony pro dokumenty produktů
    -ToGenerateCodeDefineAutomaticRuleFirst=Aby bylo možné automaticky generovat kódy, musíte nejprve definovat správce na auto definovat číslo čárového kódu.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=Viz * Poznámka k seznamu možných substitučních proměnných
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=Všichni majitelé stránek
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Přidávat další stránky nebo služby
     AddModels=Přidat dokument nebo číslování šablony
     AddSubstitutions=Přidat klíče substituce
     DetectionNotPossible=Detekce není možná
    -UrlToGetKeyToUseAPIs=Url dostat tokenu používat API (jednou známka byla obdržena je uložena na uživatele databáze tabulce a musí být k dispozici na každé volání API)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Seznam dostupných rozhraní API
    -activateModuleDependNotSatisfied=Modul „%s“ závisí na modulu „%s“, který chybí, takže modul „%1$s“ nemusí fungovat correclty. Prosím, nainstalujte modul „%2$s“ nebo zakázat modul „%1$s“, pokud chcete být v bezpečí z jakéhokoliv překvapení
    -CommandIsNotInsideAllowedCommands=Příkaz pokusu o spuštění není uvnitř seznam povolených příkazů definovaných v parametru <strong> $ dolibarr_main_restrict_os_commands </ strong> do <strong> conf.php </ strong> souboru.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=vstupní stránka
    -SamePriceAlsoForSharedCompanies=Pokud použijete multicompany modul, s volbou „Single cen“, bude cena by také být stejná pro všechny společnosti, pokud výrobky jsou sdíleny mezi prostředími
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Modul byl aktivován. Oprávnění pro aktivovaný modul (y) byly dány pouze pro uživatele admin. Možná budete muset udělit oprávnění pro ostatní uživatele nebo skupiny ručně v případě potřeby.
    -UserHasNoPermissions=Tento uživatel nemá žádné oprávnění definované
    -TypeCdr=Použijte „Žádný“ v případě, že datum platebního termínu je datum faktury plus delta ve dnech (delta je pole „Nb dnů“) <br> použití „Na konci měsíce“, pokud se po delty, musí být datum zvýšena se dostanete na konec měsíce (+ volitelná „Offset“ ve dnech) <br> použití „Current / Next“ mít platební termín datum jako první n-tého v měsíci (N se uloží do pole „Nb dnů“)
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Referenční měna společnosti (jít do nastavení firmy to změnit)
    -WarningNoteModuleInvoiceForFrenchLaw=Tento modul %s je v souladu s francouzskými zákony (Loi finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Konfigurace modulu Zdroje
     UseSearchToSelectResource=Použijte vyhledávací formulář k výběru zdroje (spíše než rozevírací seznam).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/cs_CZ/companies.lang b/htdocs/langs/cs_CZ/companies.lang
    index 4d11e09ad0e..49356dda4ce 100644
    --- a/htdocs/langs/cs_CZ/companies.lang
    +++ b/htdocs/langs/cs_CZ/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Vyberte třetí stranu
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Smazat kontakt/adresu
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Nová třetí strana
    -MenuNewCustomer=Nový zákazník
    -MenuNewProspect=Nový cíl
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Nová soukromá osoba
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create thirdpary
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Kontakty/adresy třetí strany
     Company=Společnost
     CompanyName=Název společnosti
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Společnosti
    -CountryIsInEEC=Země je uvnitř Evropského hospodářského společenství
    -ThirdPartyName=Název třetí strany
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Třetí strana
    -ThirdParties=Třetí strany
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Cíle
     ThirdPartyProspectsStats=Cíle
     ThirdPartyCustomers=Zákazníci
     ThirdPartyCustomersStats=Zákazníci
     ThirdPartyCustomersWithIdProf12=Zákazníci s %s nebo %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Typ třetí strany
    +ThirdPartyType=Type of company
     Individual=Soukromá osoba
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Mateřská společnost
     Subsidiaries=Dceřiné společnosti
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=PSČ
     Town=Město
     Web=Web
     Poste= Pozice
    -DefaultLang=Výchozí jazyk
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Total proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntaxe je správná
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Tento zákazník má výchozí slevu <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Tento zákazník nemá výchozí relativní slevu
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=Tento zákazník stále má diskontní úvěry nebo zálohy na <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Tento zákazník stále má dobropisy na <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Nikdo
    -Supplier=Dodavatel
    +Supplier=Vendor
     AddContact=Vytvořit kontakt
     AddContactAddress=Vytvořit kontakt/adresu
     EditContact=Upravit kontakt
    @@ -303,22 +303,22 @@ AddThirdParty=Vytvořit třetí stranu
     DeleteACompany=Odstranit společnost
     PersonalInformations=Osobní údaje
     AccountancyCode=Účetní účet
    -CustomerCode=Kód zákazníka
    -SupplierCode=Vendor code
    -CustomerCodeShort=Kód zákazníka
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Zákaznický kód, jedinečný pro všechny zákazníky
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Požadováno, pokud třetí strana je zákazník či cíl
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Platnost řízena modulem
    -ThisIsModuleRules=Toto jsou pravidla pro tento modul
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Cíl ke kontaktování
     CompanyDeleted=Společnost %s odstraněna z databáze.
     ListOfContacts=Seznam kontaktů/adres
    -ListOfContactsAddresses=Seznam kontaktů / adres
    -ListOfThirdParties=Seznam třetích stran
    -ShowCompany=Show third party
    +ListOfContactsAddresses=Seznam kontaktů/adres
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Zobrazit kontakt
     ContactsAllShort=Vše (Bez filtru)
     ContactType=Typ kontaktu
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Tento kontakt není přiřazen k žádné obchodní nab
     NoContactForAnyContract=Tento kontakt není přiřazen k žádné smlouvě
     NoContactForAnyInvoice=Tento kontakt není přiřazen k žádné faktuře
     NewContact=Nový kontakt
    -NewContactAddress=Nový kontakt/adresa
    +NewContactAddress=New Contact/Address
     MyContacts=Moje kontakty
     Capital=Hlavní město
     CapitalOf=Hlavní město %s
     EditCompany=Upravit společnost
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Kontrola
    -VATIntraCheckDesc=Odkaz <b>%s</b> umožňuje zkontrolovat DIČ/VAT. Je potřeba přístup k internetu.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Kontrola VAT na stránkách Evropské Komise
    -VATIntraManualCheck=Můžete také zkontrolovat ručně na evropských stránkách <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Kontrola není možná. Služba není členským státem poskytována (%s).
    -NorProspectNorCustomer=Ani cíl, ani zákazník
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Zaměstnanci
     ProspectLevelShort=Potenciální
     ProspectLevel=Potenciální cíl
    @@ -387,12 +387,12 @@ ExportCardToFormat=Exportovat kartu do formátu
     ContactNotLinkedToCompany=Kontakt není spojen s žádnou třetí stranou
     DolibarrLogin=Přihlášení do Dolibarru
     NoDolibarrAccess=Žádný přístup k Dolibarr
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Kontakty a vlastnosti
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Cenová hladina
     DeliveryAddress=Doručovací adresa
     AddAddress=Přidat adresu
    @@ -402,16 +402,16 @@ DeleteFile=Smazat soubor
     ConfirmDeleteFile=Jste si jisti, že chcete smazat tento soubor?
     AllocateCommercial=Assigned to sales representative
     Organization=Organizace
    -FiscalYearInformation=Informace o fiskálním roce
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Počáteční měsíc fiskálního roku
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Seznam cílů
    -ListCustomersShort=Seznam zákazníků
    -ThirdPartiesArea=Kontakty třetích stran
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Celkem unikátních třetích stran
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Otevřeno
     ActivityCeased=Uzavřeno
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Momentální nezaplacený účet
     OutstandingBill=Max. za nezaplacený účet
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Kód je volný. Tento kód lze kdykoli změnit.
     ManagingDirectors=Jméno vedoucího (CEO, ředitel, předseda ...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party so you will be able to delete the duplicate one.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/cs_CZ/errors.lang b/htdocs/langs/cs_CZ/errors.lang
    index 140f376fa82..b4e259803e0 100644
    --- a/htdocs/langs/cs_CZ/errors.lang
    +++ b/htdocs/langs/cs_CZ/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Hodnota &quot;%s&quot; má nesprávný formát data
     ErrorWrongDate=Datum není správné!
     ErrorFailedToWriteInDir=Nepodařilo se zapsat do adresáře %s
     ErrorFoundBadEmailInFile=Nalezeno nesprávné email syntaxe %s řádků v souboru (%s příklad souladu s emailem = %s)
    -ErrorUserCannotBeDelete=Uživatel nemůže být odstraněn. Může být, že je spojena s Dolibarr entity.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Některé požadované pole se nevyplňuje.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Nepodařilo se vytvořit adresář. Ujistěte se, že webový server má uživatel oprávnění k zápisu do adresáře dokumentů Dolibarr. Pokud je parametr <b>safe_mode</b> je povoleno na tomto PHP, zkontrolujte, zda Dolibarr php soubory, vlastní pro uživatele webového serveru (nebo skupina).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Vyplňte, prosím, hodnotu seznamu vyberte
     ErrorNoValueForCheckBoxType=Vyplňte, prosím, hodnotu checkbox seznamu
     ErrorNoValueForRadioType=Prosím vyplňte hodnotu pro rozhlasové seznamu
     ErrorBadFormatValueList=Hodnota Seznam nemůže mít více než jednu čárku: <u> %s </ u>, ale potřebují alespoň jednu možnost: klíč, hodnota
    -ErrorFieldCanNotContainSpecialCharacters=Terénní <b>%s</b> nesmí obsahuje speciální znaky.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Pole <b> %s </ b> nesmí obsahovat speciální znaky, ani na velká písmena a nesmí obsahovat pouze čísla.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Ne účetnictví modul aktivován
     ErrorExportDuplicateProfil=Tento název profilu již existuje pro tento export sady.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP shoda není úplná.
     ErrorLDAPMakeManualTest=. LDIF soubor byl vytvořen v adresáři %s. Zkuste načíst ručně z příkazového řádku získat více informací o chybách.
    -ErrorCantSaveADoneUserWithZeroPercentage=Nelze uložit akci s &quot;Statut nezačal&quot;, pokud pole &quot;provádí&quot; je také vyplněna.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref používá pro tvorbu již existuje.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Nepodařilo se odstranit záznam, protože má nějaké Childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Nelze odstranit záznam. Ten se již používá, nebo je zahrnut do jiných objektů.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript musí být vypnuta, že tato funkce pracovat. Chcete-li povolit / zakázat Javascript, přejděte do nabídky Home-&gt; Nastavení-&gt; Zobrazení.
     ErrorPasswordsMustMatch=Oba napsaný hesla se musí shodovat se navzájem
    -ErrorContactEMail=Technické chybě. Prosím, obraťte se na správce, aby e-mailovou <b>%s</b> en poskytovat <b>%s</b> kód chyby ve zprávě, nebo ještě lépe přidáním obrazovky kopii této stránky.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Chybná hodnota <b>%s</b> číslo pole (hodnota <b>&quot;%s</b> 'neodpovídá regex pravidel <b>%s)</b>
     ErrorFieldValueNotIn=Chybná hodnota <b>%s</b> číslo pole (hodnota <b>&quot;%s</b> 'není dostupná hodnota do pole <b>%s</b> stolních <b>%s)</b>
     ErrorFieldRefNotIn=Chybná hodnota <b>%s</b> číslo pole (hodnota <b>&quot;%s&quot;</b> není <b>%s</b> stávající ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Antivirový program nebyl schopen ověřit soubor
     ErrorSpecialCharNotAllowedForField=Speciální znaky nejsou povoleny pro pole &quot;%s&quot;
     ErrorNumRefModel=Existuje odkaz do databáze (%s) a není kompatibilní s tímto pravidlem číslování. Odebrat záznam nebo přejmenovat odkaz na aktivaci tohoto modulu.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Nastavení modulu jeví nekompletní. Jdi domů - Nastavení - Moduly dokončit.
     ErrorBadMask=Chyba na masku
     ErrorBadMaskFailedToLocatePosOfSequence=Chyba maska ​​bez pořadovým číslem
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Chyba, špatná hodnota po resetu
     ErrorMaxNumberReachForThisMask=Maximální počet dosah této masce
     ErrorCounterMustHaveMoreThan3Digits=Počítadlo musí mít více než 3 číslice
     ErrorSelectAtLeastOne=Chyba. Vyberte alespoň jednu položku.
    -ErrorDeleteNotPossibleLineIsConsolidated=Odstranění není možné, protože záznam je spojena s bankovním transakčního který smířil
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s je přiřazen do jiné třetí
     ErrorFailedToSendPassword=Nepodařilo se odeslat heslo
     ErrorFailedToLoadRSSFile=Nedokáže dostat RSS feed. Zkuste přidat konstantní MAIN_SIMPLEXMLLOAD_DEBUG případě chybových hlášení neposkytuje dostatek informací.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Uživatel s přihlášením <b>%s</b> nebyl nalezen.
     ErrorLoginHasNoEmail=Tento uživatel nemá žádnou e-mailovou adresu. Proces přerušena.
     ErrorBadValueForCode=Bad hodnota bezpečnostního kódu. Zkuste to znovu s novou hodnotou ...
     ErrorBothFieldCantBeNegative=Pole %s a %s nemohou být negativní
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Množství pro linku do odběratelských faktur nemůže být záporná
     ErrorWebServerUserHasNotPermission=Uživatelský účet <b>%s</b> použít ke spuštění webový server nemá oprávnění pro které
     ErrorNoActivatedBarcode=Žádný čárový kód aktivován typ
    @@ -138,7 +141,7 @@ ErrorBadFormat=Špatný formát!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Chyba Tento člen zatím není spojen s žádným subjektem. Spojovací člen ke stávajícímu subjektu nebo vytvořit nový subjekt před vytvořením odběru s fakturou.
     ErrorThereIsSomeDeliveries=Chyba, existuje nějaké dodávky spojené s touto přepravou. Odstranění zamítnuto. Máte smůlu ....
     ErrorCantDeletePaymentReconciliated=Nelze odstranit platbu, který generovaný položku banky, který byl odsouhlasen
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Nelze odstranit platbu sdílejí alespoň jednu fakturu se statusem platí
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Nelze přiřadit k neustálému ‚%s‘
     ErrorPriceExpression2=Nelze předefinovat vestavěnou funkci ‚%s‘
     ErrorPriceExpression3=Nedefinovaná proměnná ‚%s‘ v definici funkce
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Nečekané ‚%s‘ Kdo by to byl řekl .....
     ErrorPriceExpression6=Nesprávný počet argumentů (%s uvedeny, %s očekávaný) Argumentujte lépe !!!!
     ErrorPriceExpression8=Neočekávaný operátor '%s'
     ErrorPriceExpression9=Došlo k neočekávané chybě. Poklekněte a poručte svou duši bohu ....
    -ErrorPriceExpression10=Iperator '%s' chybí operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Očekával ‚%s‘
     ErrorPriceExpression14=Dělíte nulou!! To si snad fakt děláte srandu .....
     ErrorPriceExpression17=Nedefinovaná proměnná ‚%s‘
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP klient se nezdařilo s chybou ‚%s‘
     ErrorGlobalVariableUpdater5=Žádné globální proměnná vybraná
     ErrorFieldMustBeANumeric=Pole <b> %s </ b> musí být číselná hodnota
     ErrorMandatoryParametersNotProvided=Povinné parametr (y) není k dispozici
    -ErrorOppStatusRequiredIfAmount=Nastavíte odhadovanou částku za tuto příležitost / olovo. Takže musíte zadat svůj status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definice Array Menu V modulu popisovač (špatná hodnota za klíčový fk_menu)
    -ErrorSavingChanges=Došlo k ocurred při ukládání změn
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Sklad je zapotřebí na lince na dopravu
     ErrorFileMustHaveFormat=Soubor musí mít formát %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=Heslo bylo nastaveno pro tohoto člena. Nicméně, žádný uživatelský účet byl vytvořen. Takže toto heslo uloženo, ale nemůže být použit pro přihlášení do Dolibarr. Může být použit externí modulu / rozhraní, ale pokud nepotřebujete definovat libovolné přihlašovací jméno ani heslo pro členem, můžete možnost vypnout „Správa přihlášení pro každého člena“ z nastavení člen modulu. Pokud potřebujete ke správě přihlášení, ale nepotřebují žádné heslo, můžete mít toto pole prázdné, aby se zabránilo toto upozornění. Poznámka: E-mail může být také použit jako přihlášení v případě, že člen je připojen k uživateli.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Záložka s tímto názvem, nebo tento cíl (URL) j
     WarningPassIsEmpty=Pozor, databáze je heslo prázdné. Toto je bezpečnostní díra. Měli byste přidat heslo do databáze a změnit svůj conf.php souboru v tomto smyslu.
     WarningConfFileMustBeReadOnly=Pozor, může váš konfigurační soubor <b>(htdocs / conf / conf.php)</b> musí být přepsány webovém serveru. To je vážná bezpečnostní díra. Změnit oprávnění k souboru, který chcete v režimu pouze pro čtení pro uživatele operačního systému používaného webového serveru. Pokud používáte systém Windows a FAT formát disku, musíte vědět, že je souborový systém neumožňuje přidat oprávnění na souboru, takže nemůže být zcela bezpečný.
     WarningsOnXLines=Upozornění na <b>%s</b> zdrojovém záznamu (s)
    -WarningNoDocumentModelActivated=Žádný model, pro generování dokumentů, byl aktivován. Bude model zvolil jako výchozí, dokud zkontrolovat nastavení modulu.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Pozor, po dokončení nastavení, musíte zakázat instalaci / stěhovat nástroje přidáním souboru do adresáře <b>install.lock %s.</b> Chybějící tento obrázek je bezpečnostní díra.
    -WarningUntilDirRemoved=Všechny bezpečnostní pokyny (viditelné admin uživatele) zůstane aktivní tak dlouho, dokud chyba je přítomna (nebo konstantní MAIN_REMOVE_INSTALL_WARNING se přidá Nastavení-&gt; Ostatní nastavení).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Pozor, zavírání se provádí, i když částka liší zdrojových a cílových prvků. Povolte tuto funkci se zvýšenou opatrností.
     WarningUsingThisBoxSlowDown=Upozornění Při použití tohoto políčka zpomalit vážně všechny stránky zobrazující krabici.
     WarningClickToDialUserSetupNotComplete=Nastavení ClickToDial informací pro uživatele si nejsou kompletní (viz tab ClickToDial na vaše uživatelské karty).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Příliš mnoho dat (více než %s linek)
     WarningSomeLinesWithNullHourlyRate=Někdy byly zaznamenány u některých uživatelů, zatímco jejich hodinová sazba nebyla definována. Hodnota 0 %s za hodinu byl použit, ale to může mít za následek nesprávné oceňování času stráveného.
     WarningYourLoginWasModifiedPleaseLogin=Vaše přihlašovací byla upravena. Z bezpečnostních účel budete muset přihlásit pomocí nových přihlašovacích údajů před další akci.
     WarningAnEntryAlreadyExistForTransKey=Položka již existuje pro překladatelské klíč pro tento jazyk
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/cs_CZ/interventions.lang b/htdocs/langs/cs_CZ/interventions.lang
    index 6e1f8553d2c..23b0245bb65 100644
    --- a/htdocs/langs/cs_CZ/interventions.lang
    +++ b/htdocs/langs/cs_CZ/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervence
     InterventionCard=Karta intervence
     NewIntervention=Nová intervence
     AddIntervention=Vytvořit intervenci
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Seznam intervencí
     ActionsOnFicheInter=Akce zaměřené na intervenci
     LastInterventions=Nejnovější %s intervence
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Doba použití služby pro zásahy generovaných
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistiky intervencí
    -NbOfinterventions=Nb intervenčních karet
    -NumberOfInterventionsByMonth=Nb intervenčních karet měsíce (datum schválení)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=intervence id
    diff --git a/htdocs/langs/cs_CZ/main.lang b/htdocs/langs/cs_CZ/main.lang
    index b17c1c9ab8d..951173edd8c 100644
    --- a/htdocs/langs/cs_CZ/main.lang
    +++ b/htdocs/langs/cs_CZ/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Nepodařilo se odeslat poštu (odesílatel=%s, příjemce=
     ErrorFileNotUploaded=Soubor nebyl nahrán. Zkontrolujte, zda velikost nepřesahuje maximální povolenou, že je volné místo na disku a že se v adresáři nenachází soubor se stejným názvem.
     ErrorInternalErrorDetected=Byla zjištěna chyba
     ErrorWrongHostParameter=Chybný parametr host
    -ErrorYourCountryIsNotDefined=Vaše země není definována. Přejděte na Domů-Nastavení-Úpravy a odešlete formulář znovu.
    -ErrorRecordIsUsedByChild=Nepodařilo se smazat tento záznam. Tento záznam je používán minimálně jedním vnořeným záznamem.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Chybná hodnota
     ErrorWrongValueForParameterX=Chybná hodnota parametru %s
     ErrorNoRequestInError=Žádný chybný požadavek
    -ErrorServiceUnavailableTryLater=Služba momentálně není k dispozici. Zkuste to znovu později.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicitní hodnota v poli
    -ErrorSomeErrorWereFoundRollbackIsDone=Byly nalezeny nějaké chyby. Veškeré změny budou zpětně vráceny.
    -ErrorConfigParameterNotDefined=Parametr <b>%s</b> není definován v konfiguračním souboru Dolibarr <b>conf.php.</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Nepodařilo se najít uživatele <b>%s</b> v databázi Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Chyba, pro zemi '%s' nejsou definovány žádné sazby DPH.
     ErrorNoSocialContributionForSellerCountry=Chyba, žádná společenská / daně typ fiskální definován pro země ‚%s‘.
     ErrorFailedToSaveFile=Chyba, nepodařilo se uložit soubor.
    -ErrorCannotAddThisParentWarehouse=Snažíte se přidat nadřazené sklad, který je již dítě aktuálního
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Nejste oprávněni k tomu, že.
     SetDate=Nastavení datumu
     SelectDate=Výběr datumu
    @@ -78,10 +78,10 @@ FileRenamed=Soubor byl úspěšně přejmenován
     FileGenerated=Soubor byl úspěšně vygenerován
     FileSaved=The file was successfully saved
     FileUploaded=Soubor byl úspěšně nahrán
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Soubor vybrán pro připojení, ale ještě nebyl nahrán. Klikněte na "Přiložit soubor".
    -NbOfEntries=Počet záznamů
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Přečtěte si online nápovědu (přístup k internetu je potřeba)
     GoToHelpPage=Přečíst nápovědu
     RecordSaved=Záznam uložen
    @@ -94,7 +94,7 @@ Undefined=Nedefinováno
     PasswordForgotten=Zapomněli jste heslo?
     NoAccount=No account?
     SeeAbove=Viz výše
    -HomeArea=Hlavní oblast
    +HomeArea=Domů
     LastConnexion=poslední připojení
     PreviousConnexion=Předchozí připojení
     PreviousValue=Předchozí hodnota
    @@ -142,6 +142,7 @@ Closed=Zavřeno
     Closed2=Zavřeno
     NotClosed=není uzavřen
     Enabled=Povoleno
    +Enable=Umožnit
     Deprecated=Zastaralá
     Disable=Zakázat
     Disabled=Invalidní
    @@ -153,7 +154,7 @@ Update=Aktualizovat
     Close=Zavřít
     CloseBox=Odebrat widget z panelu
     Confirm=Potvrdit
    -ConfirmSendCardByMail=Opravdu chcete poslat obsah této karty mailem na <b>%s?</b>
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Vymazat
     Remove=Odstranit
     Resiliate=přerušit
    @@ -327,7 +328,7 @@ Copy=Kopírovat
     Paste=Vložit
     Default=Standardní
     DefaultValue=Výchozí hodnota
    -DefaultValues=výchozí hodnoty
    +DefaultValues=Default values/filters/sorting
     Price=Cena
     PriceCurrency=Price (currency)
     UnitPrice=Jednotková cena
    @@ -347,7 +348,7 @@ AmountTTCShort=Částka (vč. DPH)
     AmountHT=Částka (bez DPH)
     AmountTTC=Částka (vč. DPH)
     AmountVAT=Částka daně
    -MulticurrencyAlreadyPaid=Platba již byla zaplacena, původní měna
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=I nadále platit, původní měnu
     MulticurrencyPaymentAmount=Výše platby, původní měna
     MulticurrencyAmountHT=Částka (po zdanění), původní měně
    @@ -428,7 +429,7 @@ ActionNotApplicable=Nevztahuje se
     ActionRunningNotStarted=Chcete-li začít
     ActionRunningShort=probíhá
     ActionDoneShort=Ukončený
    -ActionUncomplete=Nekompletní
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generovat
     Duration=Trvání
     TotalDuration=Celková doba trvání
     Summary=Shrnutí
    -DolibarrStateBoard=Statistika databází
    -DolibarrWorkBoard=Plocha pracovních úkolů
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No otevřel prvek zpracovávat
     Available=Dostupný
     NotYetAvailable=Zatím není k dispozici
    @@ -468,7 +469,7 @@ and=a
     or=nebo
     Other=Ostatní
     Others=Ostatní
    -OtherInformations=Ostatní informace
    +OtherInformations=Jiná informace
     Quantity=Množství
     Qty=Množství
     ChangedBy=Změnil
    @@ -506,7 +507,7 @@ None=Nikdo
     NoneF=Nikdo
     NoneOrSeveral=Žádný nebo několik
     Late=Pozdě
    -LateDesc=Zpoždění se definovat, zda záznam je pozdě, nebo ne, závisí na vašem nastavení. Požádejte svého administrátora pro změnu zpoždění z menu Home - nastavení - Výstrahy.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Obrázek
     Photos=Obrázky
    @@ -530,18 +531,6 @@ September=Září
     October=Říjen
     November=Listopad
     December=Prosinec
    -JanuaryMin=Leden
    -FebruaryMin=Únor
    -MarchMin=Březen
    -AprilMin=Duben
    -MayMin=Květen
    -JuneMin=Červen
    -JulyMin=Červenec
    -AugustMin=Srpen
    -SeptemberMin=Září
    -OctoberMin=Říjen
    -NovemberMin=Listopad
    -DecemberMin=Prosince
     Month01=Leden
     Month02=Únor
     Month03=Březen
    @@ -646,6 +635,8 @@ SendMail=Odeslat e-mail
     EMail=E-mailem
     NoEMail=Žádný e-mail
     Email=E-mail
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Žádné telefonní číslo
     Owner=Majitel
     FollowingConstantsWillBeSubstituted=Následující konstanty budou nahrazeny odpovídající hodnotou.
    @@ -677,7 +668,7 @@ NeverReceived=Nikdy nedostal
     Canceled=Zrušený
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=Můžete nastavit výchozí hodnotu použitou při vytváření nového záznamu do nastavení modulu
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Barva
     Documents=Připojené soubory
     Documents2=Dokumenty
    @@ -716,15 +707,15 @@ Merge=Spojit
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Zobrazit stránku pro tisk hlavní obsahové části
     MenuManager=Manager nabídky
    -WarningYouAreInMaintenanceMode=Pozor, jste v režimu údržby, jen pro přihlášené <b>%s</b> je dovoleno v tuto chvíli používat aplikace.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Systémová chyba
     CoreErrorMessage=Je nám líto, došlo k chybě. Obraťte se na správce systému a zkontrolujte protokoly nebo zakázat $ dolibarr_main_prod=1 pro získání více informací.
     CreditCard=Kreditní karta
     ValidatePayment=Ověření platby
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Pole označená * jsou povinná <b>%s</b>
    -FieldsWithIsForPublic=Pole s <b>%s</b> jsou uvedeny na veřejném seznamu členů. Pokud si to nepřejete, zaškrtněte "veřejný" box.
    -AccordingToGeoIPDatabase=(Podle GeoIP konverze)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Linka
     NotSupported=Není podporováno
     RequiredField=Povinné pole
    @@ -732,6 +723,8 @@ Result=Výsledek
     ToTest=Test
     ValidateBefore=Karta musí být ověřena před použitím této funkce
     Visibility=Viditelnost
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Soukromý
     Hidden=Skrytý
     Resources=Zdroje
    @@ -750,6 +743,7 @@ LinkTo=odkaz na
     LinkToProposal=Odkaz na návrh
     LinkToOrder=Odkaz na objednávku
     LinkToInvoice=Odkaz na fakturu
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Odkaz na dodavatele objednávku
     LinkToSupplierProposal=Odkaz na návrh dodavatele
     LinkToSupplierInvoice=Odkaz na dodavatelské faktury
    @@ -758,6 +752,7 @@ LinkToIntervention=Odkaz na intervenci
     CreateDraft=Vytvořte návrh
     SetToDraft=Zrušit návrh
     ClickToEdit=Klepnutím lze upravit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Podle dne
     BySalesRepresentative=Podle obchodního zástupce
     LinkedToSpecificUsers=Souvisí s konkrétním uživatelem kontaktu
     NoResults=Žádné výsledky
    -AdminTools=admin nástroje
    +AdminTools=Admin Tools
     SystemTools=Systémové nástroje
     ModulesSystemTools=Moduly nástrojů
     Test=Test
     Element=Prvek
     NoPhotoYet=Momentálně žádné fotografie k dispozici
     Dashboard=Plocha
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Spoluúčast
     from=z
     toward=k
    @@ -802,7 +797,7 @@ PrintFile=Tisk souboru %s
     ShowTransaction=Ukázat záznam o bankovním účtu
     ShowIntervention=Zobrazit intervenci
     ShowContract=Zobrazit smlouvu
    -GoIntoSetupToChangeLogo=Jděte na Domů-Nastavení-Společnost pro změnu loga, nebo je v nastavení skryjte.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Odmítnout
     Denied=Odmítnuto
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=S pozdravem
     DeleteLine=Odstranění řádku
     ConfirmDeleteLine=Jste si jisti, že chcete smazat tento řádek?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=Nevybrán žádný záznam
     MassFilesArea=Plocha pro soubory postavený masových akcí
     ShowTempMassFilesArea=Show area souborů postavený masových akcí
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Související objekty
     ClassifyBilled=Označit jako účtováno
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Kalendář
     GroupBy=Skupina vytvořená...
     ViewFlatList=Zobrazit seznam plochý
     RemoveString=Odstraňte řetězec ‚%s‘
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Stažení
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Události
    -EMailTemplates=E-maily šablony
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projekt
     Projects=Projekty
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Oprávnění
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Pondělí
     Tuesday=Úterý
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Intervence
     SearchIntoContracts=Smlouvy
     SearchIntoCustomerShipments=zásilky zákazník
     SearchIntoExpenseReports=Zpráva výdajů
    -SearchIntoLeaves=Dovolená
    +SearchIntoLeaves=Leave
     CommentLink=Komentáře
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Všichni
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Placeno
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Přiřazeno
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/cs_CZ/other.lang b/htdocs/langs/cs_CZ/other.lang
    index 376ae1c207e..c6cb236ce9d 100644
    --- a/htdocs/langs/cs_CZ/other.lang
    +++ b/htdocs/langs/cs_CZ/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Bezpečnostní kód
     NumberingShort=N°
     Tools=Nástroje
     TMenuTools=Nástroje
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Narozeniny
     BirthdayDate=datum narozenin
     DateToBirth=Datum narození
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Návratová stránka se zprávou o schválení platby
     MessageKO=Návratová stránka se zprávou o zrušení platby
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Přidá kontakt intervence
    -Notify_FICHINTER_VALIDATE=Intervence ověřena
    -Notify_FICHINTER_SENTBYMAIL=Intervence přes mail
     Notify_ORDER_VALIDATE=Objednávka zákazníka ověřena
     Notify_ORDER_SENTBYMAIL=Zákaznická objednávka zaslaná na mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Dodavatelská objednávka zaslaná e.mailem
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Dodavatelská objednávka uložena
     Notify_ORDER_SUPPLIER_APPROVE=Objednávka dodavatele schválena
     Notify_ORDER_SUPPLIER_REFUSE=Objednávka dodavatele odmítnuta
     Notify_PROPAL_VALIDATE=Nabídka zákazníka ověřena
    -Notify_PROPAL_CLOSE_SIGNED=Zákazník propal uzavřel podpisem
    -Notify_PROPAL_CLOSE_REFUSED=Zákazník propal zavřenýma odmítl
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Komerční návrh zaslán e-mailem
     Notify_WITHDRAW_TRANSMIT=Stažení převodu
     Notify_WITHDRAW_CREDIT=Stažení kreditu
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Třetí strana vytvořena
     Notify_COMPANY_SENTBYMAIL=Maily odeslané z karty třetí strany
     Notify_BILL_VALIDATE=Faktura zákazníka ověřena
     Notify_BILL_UNVALIDATE=Faktura zákazníka neověřena
    -Notify_BILL_PAYED=Zákaznická faktura zaplacena
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Zákaznická faktura zrušena
     Notify_BILL_SENTBYMAIL=Zákaznická faktura zaslaná e-mailem
     Notify_BILL_SUPPLIER_VALIDATE=Dodavatelská faktura ověřena
    -Notify_BILL_SUPPLIER_PAYED=Dodavatelská faktura zaplacena
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Dodavatelská faktura zaslaná e-mailem
     Notify_BILL_SUPPLIER_CANCELED=Dodavatelská faktura zrušena
     Notify_CONTRACT_VALIDATE=Smlouva ověřena
     Notify_FICHEINTER_VALIDATE=Intervence ověřena
    +Notify_FICHINTER_ADD_CONTACT=Přidá kontakt intervence
    +Notify_FICHINTER_SENTBYMAIL=Intervence přes mail
     Notify_SHIPPING_VALIDATE=Doprava ověřena
     Notify_SHIPPING_SENTBYMAIL=Doprava odeslána mailem
     Notify_MEMBER_VALIDATE=Uživatel ověřen
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Vytvoření projektu
     Notify_TASK_CREATE=Úkol vytvořen
     Notify_TASK_MODIFY=Úkol upraven
     Notify_TASK_DELETE=Úkol smazán
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Viz nastavení modulu %s
     NbOfAttachedFiles=Počet připojených souborů/dokumentů
     TotalSizeOfAttachedFiles=Celková velikost připojených souborů/dokumentů
     MaxSize=Maximální velikost
     AttachANewFile=Připojte nový soubor/dokument
     LinkedObject=Propojený objekt
    -NbOfActiveNotifications=Počet hlášení (několik z příjemců e-mailů)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Nainstalujte nebo povolte GD knihovnu ve vaší PHP pro vyu
     ProfIdShortDesc=<b>Prof Id %s</b> je informace v závislosti na třetích stranách země. <br> Například pro země <b>%s,</b> je to kód <b>%s.</b>
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=New intervention %s byla přiřazena k vám.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Zásah %s byl ověřen.
     EMailTextInvoiceValidated=Faktura %s byla ověřena.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Nabídka %s byla ověřena.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Objednávka %s byla ověřena.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Objednávka %s byla schválena %s.
     EMailTextOrderRefused=Objednávka %s byla zamítnuta.
     EMailTextOrderRefusedBy=Objednávka %s byla odmítnuta podle %s.
     EMailTextExpeditionValidated=Přeprava %s byla ověřena.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Import souboru dat
     DolibarrNotification=Automatické upozornění
     ResizeDesc=Zadejte novou šířku <b>nebo</b> novou výšku. Poměry budou uchovávány při změně velikosti ...
    @@ -204,7 +212,7 @@ NewLength=Nová šířka
     NewHeight=Nová výška
     NewSizeAfterCropping=Nová velikost po ořezu
     DefineNewAreaToPick=Definujte novou oblast obrázku pro jeho vložení klikněte (levým tlačítkem myši na obrázek a pak táhněte, dokud se nedostanete na protější roh)
    -CurrentInformationOnImage=Tento nástroj byl navržen tak, aby vám pomohl změnit velikost nebo oříznout obrázek. Toto je informace o aktuálním editovaném obrázku
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Editor obrázků
     YouReceiveMailBecauseOfNotification=Tato zpráva se zobrazí, protože Váš e-mail byl přidán na seznam cílů, které mají být informovány o jednotlivých akcích na %s softwaru %s.
     YouReceiveMailBecauseOfNotification2=Tato akce je následující:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exportní plocha
    diff --git a/htdocs/langs/cs_CZ/projects.lang b/htdocs/langs/cs_CZ/projects.lang
    index e5d06e2bc7b..a4af7858917 100644
    --- a/htdocs/langs/cs_CZ/projects.lang
    +++ b/htdocs/langs/cs_CZ/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Opravdu chcete tento projekt smazat?
     ConfirmDeleteATask=Jste si jisti, že chcete smazat tento úkol?
     OpenedProjects=otevřené projekty
     OpenedTasks=otevřené úkoly
    -OpportunitiesStatusForOpenedProjects=Příležitosti množství otevřených projektů stavu
    -OpportunitiesStatusForProjects=Příležitosti počet projektů podle stavu
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Zobrazit projekt
     ShowTask=Zobrazit úkol
     SetProject=Nastavit projekt
     NoProject=Žádný projekt nedefinován či vlastněn
    -NbOfProjects=Počet projektů
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Strávený čas
     TimeSpentByYou=Váš strávený čas
     TimeSpentByUser=Čas strávený uživatelem
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Přejít na seznam času spotřebovaného
     GoToListOfTasks=Přejít na seznam úkolů
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Seznam obchodních návrhů spojených s projektem
    -ListOrdersAssociatedProject=Seznam zákaznických objednávek související s projektem
    -ListInvoicesAssociatedProject=Seznam zákaznických faktur souvisejících s projektem
    -ListPredefinedInvoicesAssociatedProject=Seznam předpřipravených zákaznických faktur spojených s projektem
    -ListSupplierOrdersAssociatedProject=Seznam dodavatelských objednávek souvisejících s projektem
    -ListSupplierInvoicesAssociatedProject=Seznam dodavatelských faktur spojených s projektem
    -ListContractAssociatedProject=Seznam zakázek souvisejících s projektem
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Seznam zákroků spojených s projektem
    -ListExpenseReportsAssociatedProject=Seznam vyúčtování výdajů souvisejících s projektem
    -ListDonationsAssociatedProject=Seznam darů spojených s projektem
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Seznam událostí spojených s projektem
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Seznam času spotřebována na úkolech projektu
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Aktivita na projektu dnes
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Projekt %s modifikované
     TaskCreatedInDolibarr=Úkol %s vytvořen
     TaskModifiedInDolibarr=Úkol %s upraven
     TaskDeletedInDolibarr=Úkol %s smazán
    -OpportunityStatus=stav příležitost
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. postavení
    -OpportunityProbability=příležitost pravděpodobnost
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=množství příležitostí
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. množství
     OpportunityAmountAverageShort=Průměrná Opp. množství
     OpportunityAmountWeigthedShort=Vážený Opp. množství
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Přispěvatel
     SelectElement=Vyberte prvek
     AddElement=Odkaz na prvek
     # Documents models
    -DocumentModelBeluga=Šablona projektu pro přehled propojených objektů
    -DocumentModelBaleine=Projekt zpráva šablony pro úkoly
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Plánované vytížení
     PlannedWorkloadShort=Pracovní zátěž
     ProjectReferers=Související zboží
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projekty s tímto uživatelem jako kontakt
     TasksWithThisUserAsContact=Úkoly přidělené tomuto uživateli
     ResourceNotAssignedToProject=Není přiřazen k projektu
     ResourceNotAssignedToTheTask=Není přiřazen k úkolu
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Úkolům, které jsou
     AssignTaskToMe=Přiřadit úkol mně
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Přiřadit
     ProjectOverview=Přehled
    -ManageTasks=Projektově řídit úkoly a čas
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Projektově řídit tuhy / opportinuties
    -ProjectNbProjectByMonth=Nb vytvořených projektů měsíc
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Množství příležitostí podle měsíce
    -ProjectWeightedOppAmountOfProjectsByMonth=Vážené příležitostí v jednotlivých měsících
    -ProjectOpenedProjectByOppStatus=Otevřít projekt / vedení podle stavu příležitosti
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistiky týkající se projektů / vodičů
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Úkol přidělen. Zadání času na tomto úkolu by mělo být možné.
     IdTaskTime=Doba úkol Id
     YouCanCompleteRef=Chcete-li doplnit ref některé informace (použít jej jako vyhledávací filtry), doporučujeme přidat znak - aby se oddělil, takže automatické číslování bude fungovat správně pro další projekty. Například %s-ABC. Můžete také preferovat přidání vyhledávacích klíčů do štítku. Nejlepším postupem může být přidání specializovaného pole, nazývaného také doplňkové atributy.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=pouze příležitosti
    -OpenedOpportunitiesShort=otevřené příležitosti
    -NotAnOpportunityShort=Není to příležitost
    -OpportunityTotalAmount=Příležitosti celková částka
    -OpportunityPonderatedAmount=Příležitosti vážené
    -OpportunityPonderatedAmountDesc=Příležitosti vážené s pravděpodobností
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospektiva
     OppStatusQUAL=Kvalifikace
     OppStatusPROPO=Nabídka
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/da_DK/admin.lang b/htdocs/langs/da_DK/admin.lang
    index f788c0f02c0..72830b92be8 100644
    --- a/htdocs/langs/da_DK/admin.lang
    +++ b/htdocs/langs/da_DK/admin.lang
    @@ -2,22 +2,22 @@
     Foundation=Grundlag
     Version=Version
     Publisher=Forlægger
    -VersionProgram=Version program
    +VersionProgram=Programversion
     VersionLastInstall=Første installationsversion
     VersionLastUpgrade=Nyeste version
     VersionExperimental=Eksperimentel
     VersionDevelopment=Udvikling
     VersionUnknown=Ukendt
     VersionRecommanded=Anbefalet
    -FileCheck=Filer integritet checker
    -FileCheckDesc=Dette værktøj giver dig mulighed for at kontrollere filernes integritet og opsætning af din ansøgning, sammenligne hver fil med de officielle. Værdien af ​​nogle opsætningskonstanter kan også kontrolleres. Du kan bruge dette værktøj til at opdage, om nogle filer blev ændret af en hacker for eksempel.
    +FileCheck=Filer integritet test
    +FileCheckDesc=Dette værktøj giver dig mulighed for at kontrollere filernes integritet og opsætningen af ​​din program del, sammenligne hver fil med den officielle. Værdien af ​​nogle opsætnings værdier kan også kontrolleres. Du kan bruge dette værktøj til at opdage, om nogle filer blev ændret af en hacker, som eksempel.
     FileIntegrityIsStrictlyConformedWithReference=Filernes integritet er nøje i overensstemmelse med referencen.
    -FileIntegrityIsOkButFilesWereAdded=Filters integritetskontrol er gået, men nogle nye filer blev tilføjet.
    +FileIntegrityIsOkButFilesWereAdded=Filters integritetskontrol er udført, men nogle nye filer er blevet tilføjet.
     FileIntegritySomeFilesWereRemovedOrModified=Filer integritetskontrol er mislykket. Nogle filer blev ændret, fjernet eller tilføjet.
     GlobalChecksum=Globalt checksum
     MakeIntegrityAnalysisFrom=Gør integritetsanalyse af applikationsfiler fra
     LocalSignature=Indlejret lokal signatur (mindre pålidelig)
    -RemoteSignature=Fjern fjern signatur (mere pålidelig)
    +RemoteSignature=Lang distance signatur (mere pålidelig)
     FilesMissing=Manglende filer
     FilesUpdated=Opdaterede filer
     FilesModified=Ændrede filer
    @@ -26,37 +26,37 @@ FileCheckDolibarr=Kontroller integriteten af ​​applikationsfiler
     AvailableOnlyOnPackagedVersions=Den lokale fil for integritetskontrol er kun tilgængelig, når applikationen er installeret fra en officiel pakke
     XmlNotFound=Xml Integrity File af applikation ikke fundet
     SessionId=Session ID
    -SessionSaveHandler=Handler for at gemme sessioner
    -SessionSavePath=Storage session localization
    -PurgeSessions=Purge af sessioner
    +SessionSaveHandler="Handler" for at gemme sessioner
    +SessionSavePath=Opbevaring af sessionslokalisering
    +PurgeSessions=Udrensning af sessioner
     ConfirmPurgeSessions=Vil du virkelig slette alle sessioner? Dette vil slette alle bruger (bortset fra dig selv)
    -NoSessionListWithThisHandler=Gem session handler konfigureret i din PHP tillader ikke at liste alle kørende sessioner.
    +NoSessionListWithThisHandler=Save session handler konfigureret i dit PHP tillader ikke at notere alle løbende sessioner.
     LockNewSessions=Lås nye forbindelser
    -ConfirmLockNewSessions=Er du sikker på du vil begrænse enhver ny Dolibarr forbindelse til dig selv. Kun brugeren <b>%s</b> vil være i stand til at forbinde efter denne.
    -UnlockNewSessions=Fjern forbindelsen lås
    +ConfirmLockNewSessions=Er du sikker på, at du vil begrænse enhver ny Dolibarr-forbindelse til dig selv? Kun bruger <b>%s</b> kan derefter oprette forbindelse.
    +UnlockNewSessions=Fjern forbindelseslås
     YourSession=Din session
    -Sessions=Brugere session
    +Sessions=Brugersessioner
     WebUserGroup=Webserver bruger / gruppe
    -NoSessionFound=Din PHP synes ikke muligt at liste aktive sessioner. Directory bruges til at gemme sessioner <b>(%s)</b> kan være beskyttet (For eksempel ved at OS tilladelser eller PHP direktiv open_basedir).
    +NoSessionFound=Dit PHP tillader ikke optagelse af aktive sessioner. Den mappe, der bruges til at gemme sessioner (<b> %s </b>), kan være beskyttet (For eksempel ved brug af operativsystemer eller ved PHP-direktivet open_basedir).
     DBStoringCharset=Database charset til at gemme data
    -DBSortingCharset=Database charset at sortere data
    +DBSortingCharset=Database charset for at sortere data
     ClientCharset=Klient karaktersæt
     ClientSortingCharset=Kunden sortering
     WarningModuleNotActive=<b>Modul %s</b> skal være aktiveret
    -WarningOnlyPermissionOfActivatedModules=Kun tilladelser i forbindelse med aktiveret moduler er vist her. Du kan aktivere andre moduler i opsætningsskærmens - Modul side.
    +WarningOnlyPermissionOfActivatedModules=Kun tilladelser i forbindelse med aktiveret moduler er vist her. Du kan aktivere andre moduler i Hjem->Indstillinger-Moduler.
     DolibarrSetup=Dolibarr setup
     InternalUser=Intern bruger
     ExternalUser=Ekstern bruger
     InternalUsers=Interne brugere
     ExternalUsers=Eksterne brugere
     GUISetup=Udseende
    -SetupArea=Opsætning
    +SetupArea=Indstillinger
     UploadNewTemplate=Upload nye skabeloner
    -FormToTestFileUploadForm=Form til test-fil upload (ifølge setup)
    +FormToTestFileUploadForm=Formular til test af fil upload (ifølge opsætning)
     IfModuleEnabled=Note: ja er kun effektivt, hvis <b>modul %s</b> er aktiveret
     RemoveLock=Fjern <b>fil %s,</b> hvis det er oprettet for at tillade opdateringen værktøj.
     RestoreLock=Erstatte en <b>fil %s</b> med læse tilladelse kun på filen for at deaktivere enhver brug af værktøj.
    -SecuritySetup=Sikkerhed setup
    +SecuritySetup=Sikkerhedsopsætning
     SecurityFilesDesc=Definer her muligheder relateret til sikkerhed om upload af filer.
     ErrorModuleRequirePHPVersion=Fejl, dette modul kræver PHP version %s eller højere
     ErrorModuleRequireDolibarrVersion=Fejl, dette modul kræver Dolibarr version %s eller højere
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kode kan ikke indeholde værdien 0
     DisableJavascript=Deaktiver JavaScript og Ajax-funktioner (Anbefales til blinde personer eller tekstbrowsere)
     UseSearchToSelectCompanyTooltip=Også hvis du har et stort antal tredjeparter (> 100 000), kan du øge hastigheden ved at indstille konstant COMPANY_DONOTSEARCH_ANYWHERE til 1 i Setup-> Other. Søgningen er så begrænset til starten af ​​strengen.
     UseSearchToSelectContactTooltip=Også hvis du har et stort antal tredjeparter (> 100 000), kan du øge hastigheden ved at indstille konstant CONTACT_DONOTSEARCH_ANYWHERE til 1 i Setup-> Other. Søgningen er så begrænset til starten af ​​strengen.
    -DelaiedFullListToSelectCompany=Vent på, at du trykker på en tast, inden du lægger indholdet af tredjeparts kombinationsliste op (Dette kan øge ydeevnen, hvis du har et stort antal tredjeparter, men det er mindre praktisk)
    -DelaiedFullListToSelectContact=Vent, tryk på en tast, inden du lægger indholdet på kontaktkombinationen op (Dette kan øge ydeevnen, hvis du har et stort antal kontakter, men det er mindre praktisk)
    +DelaiedFullListToSelectCompany=Vent, indtil der trykkes på en nøgle, inden du læser indholdet i kombinationslisten fra tredjepart. <br> Dette kan øge ydeevnen, hvis du har et stort antal tredjeparter, men det er mindre praktisk.
    +DelaiedFullListToSelectContact=Vent, indtil der trykkes på en tast, inden du lægger indholdet på kontakt-kombinationsliste. <br> Dette kan øge ydeevnen, hvis du har et stort antal kontakter, men det er mindre praktisk)
     NumberOfKeyToSearch=NBR af tegn til at udløse søgning: %s
     NotAvailableWhenAjaxDisabled=Ikke tilgængelige, når Ajax handicappede
     AllowToSelectProjectFromOtherCompany=På tredjeparts dokument kan man vælge et projekt knyttet til en anden tredjepart
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview ikke tilgængeligt
     ThemeCurrentlyActive=Tema aktuelt aktive
     CurrentTimeZone=Aktuelle tidszone
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Datoer gemmes og returneres af databaseserveren som om de blev holdt som sendt streng. Tidszonen har kun virkning, når du bruger UNIX_TIMESTAMP-funktionen (det bør ikke bruges af Dolibarr, så databasen TZ skal ikke have nogen effekt, selvom den er ændret efter indtastning af data).
    +TZHasNoEffect=Datoer gemmes og returneres af databaseserveren som om de blev holdt som sendt streng. Tidszonen har kun virkning, når du bruger UNIX_TIMESTAMP-funktionen (som ikke skal bruges af Dolibarr, så databasen TZ skal ikke have nogen effekt, selvom den er ændret efter indtastning af data).
     Space=Space
     Table=Tabel
     Fields=Områder
    @@ -100,7 +100,7 @@ AntiVirusCommandExample= Eksempel på ClamWin: c: \\ Program Files (x86) \\ Clam
     AntiVirusParam= Flere parametre på kommandolinjen
     AntiVirusParamExample= Eksempel for ClamWin: - database = "C: \\ Programmer (x86) \\ ClamWin \\ lib"
     ComptaSetup=Opsætning af regnskabsmodul
    -UserSetup=Brugernes forvaltning setup
    +UserSetup=Brugerstyring opsætning
     MultiCurrencySetup=Multi-valuta opsætning
     MenuLimits=Grænseværdier og nøjagtighed
     MenuIdParent=Moderselskab menuen ID
    @@ -109,16 +109,16 @@ DetailPosition=Sorter antallet at definere menuen holdning
     AllMenus=Alle
     NotConfigured=Modul/Applikation ikke konfigureret
     Active=Aktiv
    -SetupShort=Setup
    +SetupShort=Opsætning
     OtherOptions=Andre valgmuligheder
    -OtherSetup=Andre indstillinger
    +OtherSetup=Andet opsætning
     CurrentValueSeparatorDecimal=Decimalseparator
     CurrentValueSeparatorThousand=Tusind separator
     Destination=Bestemmelsessted
     IdModule=Modul ID
     IdPermissions=Tilladelses ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Lokalisering parametre
    +LocalisationDolibarrParameters=Oversættelsesparametre
     ClientTZ=Kunden Tidszone (bruger)
     ClientHour=Kunden Tid (bruger)
     OSTZ=Server OS Tids Zone
    @@ -126,8 +126,8 @@ PHPTZ=Tidszone Server PHP
     DaylingSavingTime=Sommertid (bruger)
     CurrentHour=Nuværende time
     CurrentSessionTimeOut=Aktuelle session timeout
    -YouCanEditPHPTZ=For at indstille en anden PHP-tidszone (ikke påkrævet) kan du prøve at tilføje en fil .htaccess med en linje som denne "SetEnv TZ Europe / Paris"
    -HoursOnThisPageAreOnServerTZ=Advarsel, i modsætning til andre skærmbilleder, er timer på denne side ikke i din lokale tidszone, men for serverens tidszone.
    +YouCanEditPHPTZ=Hvis du vil indstille en anden PHP-tidszone (ikke nødvendig), kan du prøve at tilføje en .htaccess-fil med en linje som denne "SetEnv TZ Europe / Paris"
    +HoursOnThisPageAreOnServerTZ=Advarsel, i modsætning til andre skærmbilleder, er timer på denne side ikke i din lokale tidszone, men i serverens tidszone.
     Box=Boks
     Boxes=Bokse
     MaxNbOfLinesForBoxes=Max antal linjer til widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignorer fejl pga. Dubletter  (INSERT IGNORE)
     AutoDetectLang=Autodetect (browsersprog)
     FeatureDisabledInDemo=Funktionen slået fra i demo
     FeatureAvailableOnlyOnStable=Funktionen er kun tilgængelig på officielle stabile versioner
    -BoxesDesc="Bokse" er skærm komponenter, der viser et stykke af oplysninger om nogle sider. Du kan vælge mellem at få vist feltet eller ikke ved at vælge aktiv side og klikke på 'Aktiver', eller ved at klikke på skraldespanden for at deaktivere den.
    +BoxesDesc=Widgets er komponenter, der viser nogle oplysninger, som du kan tilføje for at tilpasse nogle sider. Du kan vælge mellem at vise widgeten eller ej ved at vælge målside og klikke på 'Aktiver' eller ved at klikke på papirkurven for at deaktivere den.
     OnlyActiveElementsAreShown=Kun elementer fra de <a href="%s">aktiverede moduler</a> er vist.
    -ModulesDesc=Dolibarr moduler definere, hvilke funktioner er aktiveret i softwaren. Nogle moduler kræver tilladelser skal du give brugere, efter at have aktiveret modul.
    +ModulesDesc=Modulerne / applikationerne bestemmer hvilke funktioner der er tilgængelige i softwaren. Nogle moduler kræver tilladelser til brugere efter aktivering af modulet. Klik på tænd / sluk-knappen for at aktivere / deaktivere et modul / program.
     ModulesMarketPlaceDesc=Du kan finde flere moduler som kan downloades på eksterne hjemmesider på internettet ...
    -ModulesDeployDesc=Hvis tilladelser på dit filsystem tillader det, kan du bruge dette værktøj til at installere et eksternt modul. Modulet vil så være synligt på fanen <strong> %s </ strong>.
    +ModulesDeployDesc=Hvis tilladelser i dit filsystem tillader det, kan du bruge dette værktøj til at installere et eksternt modul. Modulet vil så være synligt på fanen <strong> %s</strong>.
     ModulesMarketPlaces=Finde eksterne app/moduler
     ModulesDevelopYourModule=Udvikle din egen app / moduler
    -ModulesDevelopDesc=Du kan udvikle eller finde en partner til at udvikle til dig, dit personlige modul
    -DOLISTOREdescriptionLong=I stedet for at aktivere <a href="https://www.dolistore.com"> www.dolistore.com </a> websitet for at finde et eksternt modul, kan du bruge dette indlejrede værktøj, der vil gøre søgningen på eksternt marked for dig (kan være langsom, brug for internetadgang) ...
    +ModulesDevelopDesc=Du kan også udvikle dit eget modul eller finde en partner til at udvikle en til dig.
    +DOLISTOREdescriptionLong=I stedet for at aktivere <a href="https://www.dolistore.com"> www.dolistore.com </a> websitet for at finde et eksternt modul, kan du bruge dette indlejrede værktøj, der vil udføre søgningen på eksternt marked for dig (kan være langsom, brug for internetadgang) ...
     NewModule=Ny
     FreeModule=Gratis
     CompatibleUpTo=Kompatibel med version %s
    @@ -211,8 +211,8 @@ Nouveauté=Nyhed
     AchatTelechargement=Køb / Download
     GoModuleSetupArea=For at aktivere/installere et nyt modul, skal du gå opsætning af moduler her <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore den officielle markedsplads for Dolibarr ERP / CRM eksterne moduler
    -DoliPartnersDesc=Liste over virksomheder, der leverer specialudviklede moduler eller funktioner (Bemærk: Alle som har erfaring med PHP-programmering kan levere brugerdefineret udvikling til et open source-projekt)
    -WebSiteDesc=Reference hjemmesider for at finde flere moduler...
    +DoliPartnersDesc=Liste over virksomheder, der leverer specialudviklede moduler eller funktioner. <br> Bemærk: Da Dolibarr er en open source-applikation, kan <i> hvem som helst </i>, der har erfaring med PHP-programmering udvikle et modul.
    +WebSiteDesc=Eksterne websites til flere (tredjeparts) tillægsmoduler ...
     DevelopYourModuleDesc=Nogle løsninger til at udvikle dit eget modul ...
     URL=Link
     BoxesAvailable=Bokse til rådighed
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Må ikke gemme adgangskoder i klar i databasen
     MainDbPasswordFileConfEncrypted=Database adgangskode krypteres i conf.php
     InstrucToEncodePass=At have en adgangskode, der er kodet ind <b>conf.php</b> - fil, i stedet for linje <br><b>$dolibarr_main_db_pass="...";</b><br>Med<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=At have password afkodes (clear) i <b>conf.php</b> - fil, i stedet for linje <br><b>$dolibarr_main_db_pass="krypteret:...";</b><br><br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Beskyttelse af genereret pdf-filer (ikke recommandd, pauser masse pdf generation)
    +ProtectAndEncryptPdfFiles=Beskyttelse af genererede PDF-filer IKKE anbefalet (hindrer masse-PDF-generering)
     ProtectAndEncryptPdfFilesDesc=Beskyttelse af et PDF-dokument, holder den til rådighed til at læse og udskrive PDF-browser. Men, redigering og kopiering er ikke længere muligt. Bemærk, at ved hjælp af denne funktion er det ikke muligt at opbygge en/flere globalt flettede Pdf-filer.
     Feature=Funktion
     DolibarrLicense=Licens
    @@ -246,8 +246,8 @@ ExternalResources=Eksterne ressourcer
     SocialNetworks=Sociale netværk
     ForDocumentationSeeWiki=For brugerens eller bygherren dokumentation (doc, FAQs ...), <br> tage et kig på Dolibarr Wiki: <br> <a href="%s" target="_blank"><b> %s</b></a>
     ForAnswersSeeForum=For alle andre spørgsmål / hjælpe, kan du bruge Dolibarr forum: <br> <a href="%s" target="_blank"><b> %s</b></a>
    -HelpCenterDesc1=Dette område kan hjælpe dig med at få en supportfunktion på Dolibarr.
    -HelpCenterDesc2=En del af denne tjeneste er tilgængelig <b>på engelsk</b>.
    +HelpCenterDesc1=Her er nogle ressourcer til at få hjælp og support med Dolibarr.
    +HelpCenterDesc2=Nogle af disse ressourcer er kun tilgængelige i <b> engelsk </b>.
     CurrentMenuHandler=Aktuel menu handleren
     MeasuringUnit=Måleenhed
     LeftMargin=Venstre margen
    @@ -262,33 +262,37 @@ NoticePeriod=Notice period
     NewByMonth=Ny efter måned
     Emails=E-Post
     EMailsSetup=E-post sætop
    -EMailsDesc=Denne side giver dig mulighed for at overskrive dine PHP parametre for e-mails afsendelse. I de fleste tilfælde på Unix / Linux OS, din PHP opsætning er korrekt, og disse parametre er nytteløs.
    +EMailsDesc=Denne side giver dig mulighed for at tilsidesætte dine standard PHP-parametre til afsendelse af e-mails. I de fleste tilfælde på Unix / Linux OS er PHP-opsætningen korrekt, og disse parametre er unødvendige.
     EmailSenderProfiles=E-mails afsender profiler
    -MAIN_MAIL_SMTP_PORT=SMTP Port (som standard i <b>php.ini: %s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP Host (Som standard i <b>php.ini: %s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP Port (Ikke defineret i PHP på Unix-lignende systemer)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP Host (Ikke defineret i PHP på Unix-lignende systemer)
    -MAIN_MAIL_EMAIL_FROM=Afsenders e-mail for automatisk e-mails (Som standard i php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=E-mail navn, der bruges til at returnere e-mails (felter 'Fejl-til' i sendte e-mails)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematisk en skjult carbon-kopi af alle sendte e-mails til
    -MAIN_DISABLE_ALL_MAILS=Deaktiver alle de e-mails sendings (til testformål eller demoer)
    +MAIN_MAIL_SMTP_PORT=SMTP / SMTPS-port (standardværdi i php.ini: <b> %s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS-vært (standardværdi i php.ini: <b> %s </b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS Port (Ikke defineret i PHP på Unix-lignende systemer)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Host (Ikke defineret i PHP på Unix-lignende systemer)
    +MAIN_MAIL_EMAIL_FROM=Afsender-e-mail til automatiske e-mails (standardværdi i php.ini: <b> %s </b>)
    +MAIN_MAIL_ERRORS_TO=E-mail, der bruges til at returnere e-mails ved fejl ('Errors-To' headeren)
    +MAIN_MAIL_AUTOCOPY_TO= Kopier (Bcc) alle sendte e-mails til
    +MAIN_DISABLE_ALL_MAILS=Deaktiver al e-mail afsendelse (til testformål eller demoer)
     MAIN_MAIL_FORCE_SENDTO=Sende alle e-mails til (i stedet for rigtige modtagere, til testformål)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Tilføj medarbejdere med e-mail til tilladte destinationer liste
    -MAIN_MAIL_SENDMODE=Metode til at bruge til at sende e-mails
    -MAIN_MAIL_SMTPS_ID=SMTP ID hvis påkrævet
    -MAIN_MAIL_SMTPS_PW=SMTP Password hvis påkrævet
    -MAIN_MAIL_EMAIL_TLS= Brug TLS (SSL) kryptering
    -MAIN_MAIL_EMAIL_STARTTLS= Brug TLS (STARTTLS) kryptere
    -MAIN_DISABLE_ALL_SMS=Deaktiver alle SMS sendings (til testformål eller demoer)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Tilføj medarbejderbrugere med e-mail i listen over tilladte modtagere
    +MAIN_MAIL_SENDMODE=E-mail-sendemetode
    +MAIN_MAIL_SMTPS_ID=SMTP ID (hvis afsendelse af server kræver godkendelse)
    +MAIN_MAIL_SMTPS_PW=SMTP-adgangskode (hvis afsendelse af server kræver godkendelse)
    +MAIN_MAIL_EMAIL_TLS=Brug TLS (SSL) kryptering
    +MAIN_MAIL_EMAIL_STARTTLS=Brug TLS (STARTTLS) kryptering
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Deaktiver al sms-afsendelse (til testformål eller demoer)
     MAIN_SMS_SENDMODE=Metode til at bruge til at sende SMS
    -MAIN_MAIL_SMS_FROM=Standard afsenderens telefonnummer til afsendelse af SMS'er
    -MAIN_MAIL_DEFAULT_FROMTYPE=Afsender e-mail som standard til manuelle afsendelser (bruger e-mail eller firma email)
    +MAIN_MAIL_SMS_FROM=Standard afsender-telefonnummer til sms-afsendelse
    +MAIN_MAIL_DEFAULT_FROMTYPE=Standard afsender email til manuel afsendelse (Bruger e-mail eller Firma email)
     UserEmail=Bruger e-mail
     CompanyEmail=Firmaets e-mail
     FeatureNotAvailableOnLinux=Funktionen ikke til rådighed på Unix-lignende systemer. Test din sendmail program lokalt.
    -SubmitTranslation=Hvis oversættelse til dette sprog ikke er fuldstændig, eller finder du fejl, kan du rette dette ved at redigere filer i mappen<b> langs/%s</b>, og send din ændring www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=Hvis oversættelse til dette sprog ikke er komplet, eller du finder fejl, kan du rette op ved at redigere filer i mappen <b>langs /%s</b> og indsende din ændring via www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Hvis oversættelsen for dette sprog ikke er færdigt, eller du finder fejl, kan du rette dette ved at redigere filer i mappen <b> langs / %s </b> og indsende ændrede filer på dolibarr.org/forum eller til udviklere på github.com/ Dolibarr / Dolibarr.
    -ModuleSetup=Modul setup
    +ModuleSetup=Modulopsætning
     ModulesSetup=Moduler / Applikation sætop
     ModuleFamilyBase=System
     ModuleFamilyCrm=Kunderelationsstyring (CRM)
    @@ -304,20 +308,20 @@ ModuleFamilyECM=ECM
     ModuleFamilyPortal=Websteder og anden frontal applikation
     ModuleFamilyInterface=Grænseflader med eksterne systemer
     MenuHandlers=Menu håndterer
    -MenuAdmin=Menu editor
    +MenuAdmin=Rediger menuen
     DoNotUseInProduction=Må ikke anvendes i produktion
     ThisIsProcessToFollow=Dette er trin til at behandle:
     ThisIsAlternativeProcessToFollow=Dette er et alternativt setup til at behandle manuelt:
     StepNb=Trin %s
    -FindPackageFromWebSite=Find en pakke, der giver funktion, du ønsker (for eksempel på web site %s).
    +FindPackageFromWebSite=Find en pakke, der indeholder funktioner, du ønsker (f.eks. På den officielle hjemmeside %s).
     DownloadPackageFromWebSite=Download-pakke (for eksempel fra officielle hjemmeside %s ).
    -UnpackPackageInDolibarrRoot=Udpakning af pakkede filer til directory server, der er dedikeret til Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=For at installere / installere et eksternt modul skal du pakke de pakkede filer ud i serverkataloget dedikeret til moduler: <b> %s </ b>
    -SetupIsReadyForUse=Modul-implementering er færdig. Du skal dog aktivere og opsætning af modulet i din ansøgning ved at gå på den side, til opsætning af moduler: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Udpak / pakk de pakkede filer ud i serverkataloget dedikeret til Dolibarr: <b> %s </b>
    +UnpackPackageInModulesRoot=Hvis du vil installere / installere et eksternt modul, skal du pakke / pakke de pakkede filer ud i serverkataloget dedikeret til eksterne moduler: <br> <b> %s </ b>
    +SetupIsReadyForUse=Modulets implementering er afsluttet. Du skal dog aktivere og opsætte modulet i din ansøgning ved at gå til sideopsætningsmodulerne: <a href="%s"> %s </a>.
     NotExistsDirect=Den alternative rodmappen er ikke defineret til en eksisterende mappe.<br>
     InfDirAlt=Siden version 3, er det muligt at definere en alternativ root directory. Dette giver dig mulighed for at gemme, til en dedikeret mappe, plugins og tilpassede skabeloner.<br / >du skal Bare oprette en mappe i roden af Dolibarr (f.eks: brugerdefineret).<br>
     InfDirExample=<br / >Derefter erklære, at det i filen <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br> Hvis disse linier er kommenteret med "#", for at aktivere dem, skal du udkommentere blot ved at fjerne " # " - tegnet.
    -YouCanSubmitFile=Til dette trin, kan du indsende den .zip-fil af modul-pakke her :
    +YouCanSubmitFile=Alternativt kan du uploade modulet .zip-filpakke:
     CurrentVersion=Dolibarr aktuelle version
     CallUpdatePage=Gå til den side, der opdaterer databasen struktur og data: %s
     LastStableVersion=Seneste stabile version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Se på wiki-siden for en komplet liste over alle aktører og d
     UseACacheDelay= Forsinkelse for caching eksport svar i sekunder (0 eller tomme for ikke cache)
     DisableLinkToHelpCenter=Skjul linket <b>"Har du brug for hjælp eller støtte"</b> på loginsiden
     DisableLinkToHelp=Skjul link til online hjælp "<b>%s</b>\\
    -AddCRIfTooLong=Der er ingen automatisk indpakning, så hvis linje er ude af side om dokumenter, fordi alt for længe, skal du tilføje dig transport afkast i textarea.
    -ConfirmPurge=Er du sikker på du ønsker at udføre denne udrensning?<br>Dette vil slette absolut alle dine data, filer, med ingen måde til at genoprette dem (ECM-filer, vedhæftede filer...).
    +AddCRIfTooLong=Der er ingen automatisk tekstindpakning, tekst, der er for lang, vises ikke på dokumenter. Tilføj venligst vognretur i tekstområdet, hvis det er nødvendigt.
    +ConfirmPurge=Er du sikker på, at du vil udføre denne udrensning? <br> Dette vil permanent slette alle dine datafiler på ingen måde for at gendanne dem (ECM-filer, vedhæftede filer ...).
     MinLength=Mindste længde
     LanguageFilesCachedIntoShmopSharedMemory=Filer. Lang lastet i delt hukommelse
     LanguageFile=Sprogfil
    -ExamplesWithCurrentSetup=Eksempler med den nuværende kører setup
    +ExamplesWithCurrentSetup=Eksempler med den nuværende konfiguration
     ListOfDirectories=Liste over OpenDocument-skabeloner mapper
     ListOfDirectoriesForModelGenODT=Liste over mapper, som indeholder skabeloner filer med OpenDocument format.<br><br>her fulde sti til mapper.<br>Føjer vognretur mellem eah mappe.<br / >for At tilføje en mappe af GED modul, tilføje her <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Filer i disse mapper skal ende med <b>.odt</b> eller <b>.ods</b>.
    -NumberOfModelFilesFound=Antallet af ODT/ODS skabeloner findes filer i disse mapper
    +NumberOfModelFilesFound=Antal ODT / ODS-template filer, der findes i disse mapper
     ExampleOfDirectoriesForModelGen=Eksempler på syntaks: <br> c: \\ mydir <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> At vide hvordan du opretter dine odt dokumentskabeloner, før gemme dem i disse mapper, skal du læse wiki dokumentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,14 +369,14 @@ KeyForWebServicesAccess=Key til at bruge Web Services (parameter &quot;dolibarrk
     TestSubmitForm=Input test formular
     ThisForceAlsoTheme=Med denne menu manager vil også bruge sit eget tema, hvad der er brugerens valg. Også denne menu manager specialiseret for smartphones ikke virker på alle smartphone. Brug en anden menu chef, hvis du oplever problemer på din.
     ThemeDir=Skins mappe
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Svar timeout
     SmsTestMessage=Test besked fra __ PHONEFROM__ til __ PHONETO__
     ModuleMustBeEnabledFirst=Modul <b>%s</b> skal være aktiveret, hvis du har brug for denne funktion.
     SecurityToken=Nøglen til sikker URL'er
    -NoSmsEngine=Ingen SMS-afsender leder til rådighed. SMS-afsender leder ikke er installeret med standard fordeling (fordi de er afhængig af en ekstern leverandør), men du kan finde nogle på http://www.dolistore.com
    +NoSmsEngine=Ingen SMS afsender manager tilgængelig. En SMS-afsender manager er ikke installeret med standardfordelingen, fordi de afhænger af en ekstern leverandør, men du kan finde nogle på %s
     PDF=PDF
    -PDFDesc=Du kan indstille hvert globale muligheder i forbindelse med PDF-generation
    +PDFDesc=Du kan indstille hver global løsning relateret til PDF-generationen
     PDFAddressForging=Regler, Forge Adresse kasser
     HideAnyVATInformationOnPDF=Skjul alle oplysninger relateret til Salgs moms på genereret PDF
     PDFRulesForSalesTax=Regler for salgs moms
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametre for at sikre URL'er
     SecurityTokenIsUnique=Brug en unik securekey parameter for hver enkelt webadresse
     EnterRefToBuildUrl=Indtast reference for objekter %s
     GetSecuredUrl=Få beregnet URL
    -ButtonHideUnauthorized=Skjule knapperne til ikke-admin-brugere for uautoriserede handlinger i stedet for at vise nedtonet handicappede knapper
    +ButtonHideUnauthorized=Skjul knapper til brugere uden for administrasjon for uautoriserede handlinger i stedet for at vise gråaktiverede knapper
     OldVATRates=Gammel momssats
     NewVATRates=Ny momssats
     PriceBaseTypeToChange=Rediger priser med basisreferenceværdi defineret på
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Vælg liste
     ExtrafieldSelectList = Vælg fra tabellen
     ExtrafieldSeparator=Separator (ikke et felt)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio-knapper (på valg)
    +ExtrafieldRadio=Radio knapper (kun ét valg)
     ExtrafieldCheckBox=Afkrydsningsfelterne
     ExtrafieldCheckBoxFromList=Afkrydsningsfelter fra bordet
     ExtrafieldLink=Link til et objekt
     ComputedFormula=Beregnet felt
     ComputedFormulaDesc=Du kan indtaste her en formel ved hjælp af andre egenskaber af objekt eller en hvilken som helst PHP-kodning for at få en dynamisk beregningsværdi. Du kan bruge alle PHP-kompatible formler, herunder "?" betingelsesoperatør og følgende globale objekt: <br><strong> $ db, $ conf, $ langs, $ mysoc, $ bruger, $ objekt </strong>. <strong> ADVARSEL </strong>: Kun nogle egenskaber på $ objekt kan være tilgængeligt. Hvis du har brug for egenskaber, der ikke er indlæst, skal du bare hente objektet i din formel som i andet eksempel. <br> Ved at bruge et beregnet felt betyder det, at du ikke kan indtaste dig selv nogen værdi fra interface. Hvis der også er en syntaksfejl, kan formlen ikke returnere noget. <br> <br> Eksempel på formel: <br> $ objekt-> id <10? runde ($ objekt-> id / 2, 2): ($ objekt-> id + 2 * $ bruger-> id) * (int) substr ($ mysoc-> zip, 1, 2) <br> <br> Eksempel på genindlæsning af objekt <br> (($ reloadedobj = ny Societe ($ db)) && ($ reloadedobj-> hent ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj-> rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> kapital / 5: '-1' <br> <br> Andet eksempel på formel for at tvinge belastning af objekt og dets overordnede objekt: <br> (($ reloadedobj = ny opgave ($ db)) && ($ reloadedobj-> hent ($ objekt-> id)> 0) && ($ secondloadedobj = nyt projekt ($ db)) && ($ secondloadedobj-> hente ($ reloadedobj-> fk_project )> 0))? $ secondloadedobj-> ref: 'Forældreprojekt ikke fundet'
    -ExtrafieldParamHelpPassword=Hold dette felt tomt, betyder værdien gemmes uden kryptering (feltet skal kun være skjult med stjerne på skærmen). <br>Angiv her værdien 'auto' for at bruge standard krypteringsregel til at gemme adgangskode til database ( Så aflæses hash værdien kun og det er ikke muligt at genoprette oprindelig værdi)
    +ExtrafieldParamHelpPassword=Blankt felt her betyder, at denne værdi vil blive gemt uden kryptering (feltet skal kun være skjult med stjerne på skærmen). <br> Vælg 'auto' for at bruge standardkrypteringsreglen til at gemme adgangskoden til databasen (så vil værdien gemmes som en en-vejs hash uden mulighed at hente den oprindelige værdi)
     ExtrafieldParamHelpselect=Liste over værdier, der skal være linjer med format nøgle,værdi (hvor nøglen ikke kan være '0')<br / ><br / > for eksempel : <br>1,værdi1<br>2,værdi2<br>code3,værdi3<br>...<br><br>for at få listen, afhængigt af anden supplerende attributliste :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>for at få listen afhængig af en anden liste :<br>1,værdi1|<i>parent_list_code</i>:parent_key<br>2,værdi2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=Liste over værdier, der skal være linjer med format nøgle,værdi (hvor nøglen ikke kan være '0')<br / ><br / > for eksempel : <br>1,værdi1<br>2,værdi2<br>3,værdi3<br>...
     ExtrafieldParamHelpradio=Liste over værdier, der skal være linjer med format nøgle,værdi (hvor nøglen ikke kan være '0')<br / ><br / > for eksempel : <br>1,værdi1<br>2,værdi2<br>3,værdi3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Standard link
     SetAsDefault=Indstillet som standard
     ValueOverwrittenByUserSetup=Advarsel, denne værdi kan blive overskrevet af bruger-specifik opsætning (hver bruger kan indstille sin egen clicktodial url)
     ExternalModule=Eksternt modul - Installeret i mappe %s
    -BarcodeInitForThirdparties=Mass barcode init for tredjeparter
    +BarcodeInitForthird-parties=Mass barcode init for tredjepart
     BarcodeInitForProductsOrServices=Mass barcode init eller nulstil for produkter eller tjenester
     CurrentlyNWithoutBarCode=I øjeblikket har du <strong> %s </strong> post på <strong> %s </strong> %s uden stregkode defineret.
     InitEmptyBarCode=Initværdi for næste %s tomme poster
     EraseAllCurrentBarCode=Slet alle aktuelle stregkodeværdier
     ConfirmEraseAllCurrentBarCode=Er du sikker på, at du vil slette alle nuværende stregkodeværdier?
     AllBarcodeReset=Alle stregkodsværdier er blevet fjernet
    -NoBarcodeNumberingTemplateDefined=Ingen nummerering stregkode skabelon aktiveret til stregkode modul opsætning.
    +NoBarcodeNumberingTemplateDefined=Ingen nummerering stregkode skabelon aktiveret i stregkode modul opsætning.
     EnableFileCache=Aktivér filcache
     ShowDetailsInPDFPageFoot=Tilføj flere detaljer i footer af PDF-filer, som din virksomhedsadresse eller administrationsnavne (for at udfylde professionelle ids, firmakapital og momsnummer).
     NoDetails=Ikke flere detaljer i footer
     DisplayCompanyInfo=Vis firmaadresse
     DisplayCompanyManagers=Vis administrationsnavne
     DisplayCompanyInfoAndManagers=Vis firmaadresse og ledelsens navne
    -EnableAndSetupModuleCron=Hvis du vil have denne tilbagevendende faktura, der genereres automatisk, skal modul * %s * være aktiveret og korrekt opsat. Ellers skal generering af fakturaer udføres manuelt fra denne skabelon med knappen * Opret *. Bemærk, at selvom du aktiverede automatisk generation, kan du stadig sikkert starte den manuelle generation. Duplikater generation i samme periode er ikke mulig.
    -ModuleCompanyCodeCustomerAquarium=%s efterfulgt af tredjepartskode for en kunde regnskabskode
    -ModuleCompanyCodeSupplierAquarium=%s efterfulgt af tredjeparts leverandør kode for en leverandør regnskabskode
    +EnableAndSetupModuleCron=Hvis du vil have denne tilbagevendende faktura genereret automatisk, skal modul * %s * være aktiveret og korrekt konfigureret. Ellers skal generering af fakturaer udføres manuelt fra denne skabelon ved hjælp af knappen * Opret *. Bemærk, at selvom du aktiverede automatisk generation, kan du stadig sikkert starte den manuelle generation. Generering af duplikater i samme periode er ikke mulig.
    +ModuleCompanyCodeCustomerAquarium=%s efterfulgt af kundekode for en kunderegnskabskode
    +ModuleCompanyCodeSupplierAquarium=%s efterfulgt af leverandør kode for en leverandør regnskabskode
     ModuleCompanyCodePanicum=Returner en tom regnskabskode.
     ModuleCompanyCodeDigitaria=Regnskabskode afhænger tredjepartskode. Koden er sammensat af tegnet "C" som første tegn efterfulgt af de første 5 bogstaver af tredjepartskoden.
    -Use3StepsApproval=Som standard skal indkøbsordrer oprettes og godkendes af 2 forskellige brugere (et trin / bruger til oprettelse og et trin / bruger at godkende. Bemærk at hvis brugeren har begge tilladelser til at oprette og godkende, er et trin / bruger tilstrækkeligt) . Du kan spørge med denne mulighed for at indføre et tredje trin / brugergodkendelse, hvis mængden er højere end en dedikeret værdi (så 3 trin vil være nødvendige: 1 = validering, 2 = første godkendelse og 3 = anden godkendelse, hvis mængden er tilstrækkelig). <br> Indstil dette til tomt, hvis en godkendelse (2 trin) er tilstrækkelig, angiv den til en meget lav værdi (0,1), hvis der kræves en anden godkendelse (3 trin).
    +Use3StepsApproval=Som standard skal indkøbsordrer oprettes og godkendes af 2 forskellige brugere (et trin / bruger til oprettelse og et trin / bruger at godkende. Bemærk at hvis brugeren har begge tilladelser til at oprette og godkende, er et trin / bruger tilstrækkeligt) . Du kan spørge med denne mulighed for at indføre et tredje trin / brugergodkendelse, hvis mængden er højere end en dedikeret værdi (så 3 trin vil være nødvendige: 1 = bekræftelse, 2 = første godkendelse og 3 = anden godkendelse, hvis mængden er tilstrækkelig). <br> Indstil dette til tomt, hvis en godkendelse (2 trin) er tilstrækkelig, angiv den til en meget lav værdi (0,1), hvis der kræves en anden godkendelse (3 trin).
     UseDoubleApproval=Brug en 3-trins godkendelse, når beløbet (uden skat) er højere end ...
    -WarningPHPMail=ADVARSEL: Det er ofte bedre at opsætte udgående e-mails for at bruge e-mail-serveren hos din udbyder i stedet for standardopsætningen. Nogle email-udbydere (som Yahoo) tillader dig ikke at sende en mail fra en anden server end deres egen server. Din nuværende opsætning bruger serveren til applikationen til at sende e-mail og ikke din e-mail-udbyders server, så nogle modtagere (den, der er kompatibel med den restriktive DMARC-protokol), vil spørge din e-mail-udbyder, hvis de kan acceptere din e-mail og nogle emailudbydere (som Yahoo) kan svare "nej", fordi serveren ikke er en server af dem, så få af dine sendte e-mails muligvis ikke accepteres (vær også opmærksom på din e-mail-udbyder at sende kvote). <br> Hvis din e-mail-udbyder Yahoo) har denne begrænsning, du skal ændre Email setup for at vælge den anden metode "SMTP server" og indtaste SMTP serveren og legitimationsoplysninger fra din e-mail-udbyder (spørg din e-mail-udbyder for at få SMTP-legitimationsoplysninger til din konto).
    +WarningPHPMail=ADVARSEL: Det er ofte bedre at opsætte udgående e-mails for at bruge e-mail-serveren hos din udbyder i stedet for standardopsætningen. Nogle email-udbydere (som Yahoo) tillader dig ikke at sende en mail fra en anden server end deres egen server. Din nuværende opsætning bruger serveren til applikationen til at sende e-mail og ikke din e-mail-udbyder, så nogle modtagere (den, der er kompatibel med den restriktive DMARC-protokol), vil spørge din e-mail-udbyder, hvis de kan acceptere din e-mail og nogle emailudbydere (som Yahoo) kan svare "nej", fordi serveren ikke er deres, så få af dine sendte e-mails muligvis ikke accepteres (pas også på din e-mail-udbyders sendekvote). <br> Hvis din e-mail-udbyder (som Yahoo) har Denne begrænsning, du skal ændre Email setup for at vælge den anden metode "SMTP server" og indtaste SMTP serveren og legitimationsoplysninger fra din e-mail-udbyder (spørg din e-mail-udbyder for at få SMTP-legitimationsoplysninger for din konto).
     WarningPHPMail2=Hvis din e-mail SMTP udbyder skal begrænse e-mail klienten til nogle IP-adresser (meget sjælden), er dette IP-adressen til e-mail bruger agenten (MUA) til din ERP CRM-applikation: <strong> %s </strong>.
     ClickToShowDescription=Klik for at vise beskrivelse
     DependsOn=Dette modul har brug for modulet / modulerne
     RequiredBy=Dette modul er påkrævet efter modul (er)
    -TheKeyIsTheNameOfHtmlField=Dette er navnet på HTML-feltet. Dette skal have tekniske knowledges til at læse indholdet af HTML-siden for at få nøglenavnet på et felt.
    -PageUrlForDefaultValues=Du skal indtaste her den relative url på siden. Hvis du indbefatter parametre i URL, vil standardværdierne være effektive, hvis alle parametre er indstillet til samme værdi. Eksempler:
    +TheKeyIsTheNameOfHtmlField=Dette er navnet på HTML-feltet. Teknisk viden er nødvendig for at læse indholdet af HTML-siden for at få nøglenavnet på et felt.
    +PageUrlForDefaultValues=Du skal indtaste den relative url på siden. Hvis du indbefatter parametre i URL, vil standardværdierne være effektive, hvis alle parametre er indstillet til samme værdi. Eksempler:
     PageUrlForDefaultValuesCreate=<br> For formular til oprettelse af en ny tredjepart er det <strong> %s </strong>, <br> Hvis du kun vil have standardværdi, hvis url har nogle parametre, kan du bruge <strong> %s </strong>
    -PageUrlForDefaultValuesList=<br> For en side, der viser tredjeparter, er det <strong> %s </strong>, <br> Hvis du kun vil have standardværdi, hvis url har nogle parametre, kan du bruge <strong> %s </strong>
    +PageUrlForDefaultValuesList=<br> For side, der lister tredjeparter, er det <strong> %s </ strong>, <br> Hvis du kun vil have standardværdi, hvis url har nogle parametre, kan du bruge <strong> %s </ strong>
     EnableDefaultValues=Aktivér brug af personlige standardværdier
    -EnableOverwriteTranslation=Aktivér brug af overskrivet oversættelse
    -GoIntoTranslationMenuToChangeThis=Der er fundet en oversættelse for nøglen med denne kode, så for at ændre denne værdi skal du redigere den fra Home-Setup-translation.
    +EnableOverwriteTranslation=Aktivér brug af overskrevet oversættelse
    +GoIntoTranslationMenuToChangeThis=Der er fundet en oversættelse for nøglen med denne kode. For at ændre denne værdi skal du redigere den fra Hjem-Indstillinger-oversættelse.
     WarningSettingSortOrder=Advarsel, indstilling af en standard sorteringsrækkefølge kan medføre en teknisk fejl, når du går på listesiden, hvis feltet er et ukendt felt. Hvis du oplever en sådan fejl, skal du komme tilbage til denne side for at fjerne standard sorteringsrækkefølgen og gendanne standardadfærd.
     Field=Field
     ProductDocumentTemplates=Dokumentskabeloner til generering af produktdokument
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send dagsorden påmindelser via e-mails
     davDescription=Tilføj en komponent til at være en DAV-server
     DAVSetup=Opstilling af modul DAV
     DAV_ALLOW_PUBLIC_DIR=Aktivér det offentlige bibliotek (WebDav bibliotek uden login)
    -DAV_ALLOW_PUBLIC_DIRTooltip=WebDAV biblioteket er en WebDAV mappe, som alle kan få adgang til (i læse- og skrivefunktion), uden at skulle have / bruge en eksisterende login / adgangskonto.
    +DAV_ALLOW_PUBLIC_DIRTooltip=WebDav-biblioteket er et WebDAV-bibliotek, som alle kan få adgang til (i læse- og skrivefunktion), uden at skulle have / bruge en eksisterende login / adgangskonto.
    +DAV_ALLOW_ECM_DIR=Aktivér roddirektøren for DMS / ECM-modulet (login påkrævet)
    +DAV_ALLOW_ECM_DIRTooltip=Rotmappen, hvor alle filer uploades manuelt, når du bruger DMS / ECM-modulet. Ligesom til funktionen fra webgrænsefladen, skal du have et gyldigt login / adgangskode med tilladte tilladelser for at få adgang til det.
     # Modules
     Module0Name=Brugere og grupper
     Module0Desc=Brugere / Medarbejdere og Grupper management
    -Module1Name=Tredjemand
    -Module1Desc=Virksomheder og kontakter "forvaltning
    +Module1Name=Tredjeparter
    +Module1Desc=Virksomheder og kontaktstyring (kunder, potentielle kunder ...)
     Module2Name=Tilbud
     Module2Desc=Tilbudshåndtering
     Module10Name=Regnskab
    -Module10Desc=Enkelte regnskabsrapporter (Kassekladde, omsætning) baseret på databaseindhold. Bruger ikke nogen kontoplan.
    +Module10Desc=Enkelte regnskabsrapporter (tidsskrifter, omsætning) baseret på databaseindhold. Bruger ikke nogen oversigtstabel.
     Module20Name=Tilbud
     Module20Desc=Tilbudshåndtering
     Module22Name=E-mails
    @@ -500,8 +506,8 @@ Module40Name=Leverandører
     Module40Desc=Leverandører og indkøbs styring (købsordrer og fakturering)
     Module42Name=Debug Logs
     Module42Desc=Logning faciliteter (fil, syslog, ...). Disse logs er for teknisk/debug formål.
    -Module49Name=Redaktion
    -Module49Desc=Editors' ledelse
    +Module49Name=Tekstredigeringsværktøjer
    +Module49Desc=Indstillinger for tekstredigeringsværktøjer
     Module50Name=Varer
     Module50Desc=Varestyring
     Module51Name=Masseforsendelser
    @@ -511,62 +517,62 @@ Module52Desc=Lagerstyring (varer)
     Module53Name=Ydelser
     Module53Desc=Styring af ydelser
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Styring af kontrakter (tjenester eller reccuring abonnementer)
    +Module54Desc=Forvaltning af kontrakter (tjenester eller tilbagevendende abonnementer)
     Module55Name=Stregkoder
    -Module55Desc=Stregkoder 'ledelse
    +Module55Desc=Stregkoder administration
     Module56Name=Telefoni
     Module56Desc=Telefoni integration
     Module57Name="Direkte bank" betaling ordrer
    -Module57Desc=Håndtering af betaling via "Direkte Debitering" ordrer. Det omfatter generation af SEPA-fil for de europæiske lande.
    +Module57Desc=Forvaltning af ordrer med direkte debitering. Det omfatter generering af SEPA-fil for europæiske lande.
     Module58Name=ClickToDial
     Module58Desc=ClickToDial integration
     Module59Name=Bookmark4u
     Module59Desc=Tilføj funktion til at generere Bookmark4u konto fra en Dolibarr konto
     Module70Name=Interventioner
    -Module70Desc=Interventioner "forvaltning
    +Module70Desc=Interventioner administration
     Module75Name=Udgifter og ture noter
    -Module75Desc=Udgifter og ture noter 'ledelse
    +Module75Desc=Udgifter/Rejse bilag administration
     Module80Name=Sendings
    -Module80Desc=Sendings og levering ordrer 'ledelse
    -Module85Name=Banker og penge
    -Module85Desc=Forvaltning af bank-eller kontokurantkonti
    -Module100Name=ExternalSite
    -Module100Desc=Medtag eventuelle eksterne web site i Dolibarr menuer og se det i en Dolibarr ramme
    +Module80Desc=Forsendelse/Levering administration
    +Module85Name=Banker og kontanter
    +Module85Desc=Forvaltning af bank/kontant konti
    +Module100Name=Eksternt websted
    +Module100Desc=Tilføj ekstern hjemmeside-link til Dolibarr menuer for at se det i en Dolibarr ramme
     Module105Name=Mailman og Sip
     Module105Desc=Mailman eller SPIP interface til medlem-modul
     Module200Name=LDAP
    -Module200Desc=LDAP directory synkronisering
    +Module200Desc=LDAP-katalogsynkronisering
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data eksport
    -Module240Desc=Værktøj til at eksportere Dolibarr data (med assistenter)
    +Module240Desc=Værktøj til at eksportere Dolibarr-data (med hjælp)
     Module250Name=Data import
    -Module250Desc=Værktøj til at importere data ind i Dolibarr (med assistenter)
    +Module250Desc=Værktøj til at importere data til Dolibarr (med hjælp)
     Module310Name=Medlemmer
     Module310Desc=Instituttets medlemmer forvaltning
     Module320Name=RSS Feed
     Module320Desc=Tilføj RSS feed inde Dolibarr skærmen sider
    -Module330Name=Bogmærker
    -Module330Desc=Bogmærker forvaltning
    -Module400Name=Projekter/Muligheder/Kundeemner
    -Module400Desc=Ledelse af projekter, muligheder/kundeemner og/eller opgaver. Du kan også tildele et element (faktura, ordre, forslag, intervention, ...) til et projekt og få et tværgående udsigt fra projektet udsigt.
    +Module330Name=Bogmærker og genveje
    +Module330Desc=Opret genveje, der altid er tilgængelige, til de interne eller eksterne sider, som du ofte har adgang til
    +Module400Name=Projekter eller Potentielle kunder
    +Module400Desc=Forvaltning af projekter, ledere / muligheder og / eller opgaver. Du kan også tildele et element (faktura, ordre, forslag, intervention, ...) til et projekt og få et tværgående billede fra projektvisningen.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Skatter og særlige omkostninger
     Module500Desc=Opsætning af andre udgifter (salgsafgifter, sociale eller skattemæssige skatter, udbytte, ...)
     Module510Name=Betaling af medarbejderløn
    -Module510Desc=Optag og følg betalingen af ​​dine medarbejderlønninger
    +Module510Desc=Optag og spørg medarbejderbetalinger
     Module520Name=Loan
     Module520Desc=Forvaltning af lån
     Module600Name=Notifikationer om forretningshændelser
    -Module600Desc=Send e-Mail meddelelser (udløst af nogle forretningsmæssige begivenheder) til brugere (setup, der er defineret på hver enkelt bruger), til tredjepart kontakter (setup, der er defineret på hver tredje part) eller til en standart e-mails
    -Module600Long=Bemærk, at dette modul er dedikeret til at sende real-time e-mails, når der sker en dedikeret forretningshændelse. Hvis du leder efter en funktion til at sende påmindelser via e-mail til dine agendahændelser, skal du gå ind i opsætningen af ​​modulets dagsorden.
    +Module600Desc=Send e-mail-meddelelser udløst af en forretningsbegivenhed, for brugere (opsætning defineret på hver bruger), tredjeparts kontakter (opsætning defineret på hver tredjepart) eller til definerede e-mails
    +Module600Long=Bemærk, at dette modul sender e-mails i realtid, når en bestemt forretningsbegivenhed opstår. Hvis du leder efter en funktion til at sende e-mail påmindelser af dagsordensbegivenheder, skal du gå ind i opsætningen af ​​modulets dagsorden.
     Module610Name=Produkt Varianter
    -Module610Desc=Giver mulighed for oprettelse af produkter-variant baseret på egenskaber (farve, størrelse, ...)
    +Module610Desc=Oprettelse af produktvarianter (farve, størrelse osv.)
     Module700Name=Donationer
     Module700Desc=Gaver 'ledelse
     Module770Name=Udgiftsrapporter
    -Module770Desc=Forvaltning og krav om udgiftsrapporter (transport, måltid, ...)
    +Module770Desc=Administrer og gør krav på omkostningsrapporter (transport, måltid, ...)
     Module1120Name=Forhandler kommercielt forslag
     Module1120Desc=Forespørg levenrandør om indkøbsordre og priser
     Module1200Name=Mantis
    @@ -575,14 +581,14 @@ Module1520Name=Dokumentgenerering
     Module1520Desc=Massemail dokumentgenerering
     Module1780Name=Tags/Categories
     Module1780Desc=Opret tags/kategori (produkter, kunder, leverandører, kontakter eller medlemmer)
    -Module2000Name=FCKeditor
    -Module2000Desc=Giver mulighed for at redigere nogle tekst-området ved hjælp af en avanceret editor (Baseret på CKEditor)
    +Module2000Name=WYSIWYG tekstredigeringsværktøj
    +Module2000Desc=Tillad, at tekstfelter redigeres ved hjælp af CKEditor
     Module2200Name=Dynamiske Priser
     Module2200Desc=Aktivér brugen af ​​matematiske udtryk til priser
     Module2300Name=Scheduled jobs
     Module2300Desc=Planlagte job management (alias cron eller chrono tabel)
     Module2400Name=Begivenheder/tidsplan
    -Module2400Desc=Følg færdige og kommende begivenheder. Lad applikation logge automatisk begivenheder til sporingsformål eller optage manuelle begivenheder eller rendez-vous. Dette er det vigtigste vigtige modul for en god kunde- eller leverandørrelationsstyring.
    +Module2400Desc=Spor begivenheder. Lad Dolibarr logge automatisk hændelser til sporingsformål eller optage manuelle hændelser eller møder. Dette er hovedmodulet for god kunde- eller leverandørrelationsstyring.
     Module2500Name=DMS / ECM
     Module2500Desc=Dokument Management System / Esdh. Automatisk organisering af dit genereret eller lagrede dokumenter. Dele dem, når du har brug for.
     Module2600Name=API/webservices (SOAP-server)
    @@ -590,16 +596,16 @@ Module2600Desc=Aktivere Dolibarr SOAP-server, der leverer API service
     Module2610Name=API / Web-tjenester (REST-server)
     Module2610Desc=Aktivér Dolibarr REST-serveren, der leverer API-tjenester
     Module2660Name=Ring til webservices (SOAP-klient)
    -Module2660Desc=Aktivér Dolibarr web services klienten (Kan bruges til at skubbe data / forespørgsler til eksterne servere. Leverandør ordrer understøttes kun for øjeblikket)
    +Module2660Desc=Aktivér Dolibarr web services klienten (Kan bruges til at skubbe data / anmodninger til eksterne servere. Kun Leverandør ordrer understøttes for øjeblikket.)
     Module2700Name=Gravatar
    -Module2700Desc=Brug online Gravatar service (www.gravatar.com) for at vise foto af brugere / medlemmer (fundet med deres e-mails). Har brug for en internetadgang
    +Module2700Desc=Brug online Gravatar service (www.gravatar.com) for at vise foto af brugere / medlemmer (fundet med deres e-mails). Kræver internetadgang
     Module2800Desc=FTP Klient
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind konverteringer kapaciteter
     Module3100Name=Skype
     Module3100Desc=Tilføj en Skype-knap til brugere / tredjeparter / kontakter / medlemskort
     Module3200Name=Uændrede arkiver
    -Module3200Desc=Aktiver log af nogle forretningsbegivenheder i en uforanderlig logfil. Begivenheder arkiveres i realtid. Loggen er en tabel med sammenkædede begivenheder, som kun kan læses og eksporteres. Dette modul kan være obligatorisk for nogle lande.
    +Module3200Desc=Aktivér en uforanderlig log over forretningsbegivenheder. Begivenheder arkiveres i realtid. Loggen er et skrivebeskyttet bord af kæden, der kan eksporteres. Dette modul kan være obligatorisk for nogle lande.
     Module4000Name=HRM
     Module4000Desc=Human resources management (forvaltningen af ​​afdelingen, medarbejderkontrakter og følelser)
     Module5000Name=Multi-selskab
    @@ -609,39 +615,43 @@ Module6000Desc=Workflow management (automatisk oprettelse af objekt og/eller aut
     Module10000Name=websteder
     Module10000Desc=Opret offentlige websteder med en WYSIWG editor. Du skal bare konfigurere din webserver (Apache, Nginx, ...) for at pege på den dedikerede Dolibarr-mappe for at få den online på internettet med dit eget domænenavn.
     Module20000Name=Forespørgselsstyring
    -Module20000Desc=Erklære og følge medarbejdere forespørgelse
    +Module20000Desc=Indtast og følg medarbejderes afspaseringsanmodninger
     Module39000Name=Produkter masser
     Module39000Desc=Parti- eller serienummer, spisesteder og salgsdato-ledelse på produkter
    +Module40000Name=Multicurrency
    +Module40000Desc=Brug alternative valutaer i priser og dokumenter
     Module50000Name=PAYBOX
    -Module50000Desc=Modul til at tilbyde en online-betalings side til at acceptere betalinger via PayPal (kreditkort-eller PayPal-kredit). Dette kan bruges til at give dine kunder en mulighed for at foretage betalinger eller til betaling på en særlig Dolibarr objekt (faktura, ordre, ...)
    +Module50000Desc=Tilbyde kunder en PayBox online betalingsside (kredit / betalingskort). Dette kan bruges til at give dine kunder mulighed for at foretage gratis betalinger eller til betaling på et bestemt Dolibarr-objekt (faktura, ordre, ...)
     Module50100Name=Kasseapparat
     Module50100Desc=Kasseapparats modul (POS)
    +Module50150Name=Kasseapparat
    +Module50150Desc=Salgsmodul (Touch Screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Modul til at tilbyde en online-betalings side til at acceptere betalinger via PayPal (kreditkort-eller PayPal-kredit). Dette kan bruges til at give dine kunder en mulighed for at foretage betalinger eller til betaling på en særlig Dolibarr objekt (faktura, ordre, ...)
    +Module50200Desc=Tilbyde kunder en PayPal online betalingsside (PayPal-konto eller kredit / betalingskort). Dette kan bruges til at give dine kunder mulighed for at foretage gratis betalinger eller til betaling på et bestemt Dolibarr-objekt (faktura, ordre, ...)
     Module50400Name=Regnskab (avanceret)
    -Module50400Desc=Regnskabs administration (dobbelt posteringer, kontoplan og extra bogføring). Eksporter bogholdriet i andre software formater.
    +Module50400Desc=Regnskabsadministration (dobbelt poster, støtte generel og ekstra ledger). Eksporter højboksen i flere andre regnskabsmæssige softwareformater.
     Module54000Name=PrintIPP
    -Module54000Desc=Direkte udskrivning (uden at åbne dokumenterne) ved hjælp af IPP-konnektorens kopper (Printeren skal være synlig fra serveren, og CUPS skal installeres på serveren).
    +Module54000Desc=Direkte udskrivning (uden at åbne dokumenterne) ved hjælp af IPP-konnektorer (Printer skal være synlig fra serveren, og CUPS skal installeres på serveren).
     Module55000Name=Afstemning, Undersøgelse eller Afstemning
    -Module55000Desc=Modul til online undersøgelser, undersøgelser eller stemmer (som Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Modul til at oprette online undersøgelser, undersøgelser eller stemmer (som Doodle, Studs, Rdvz, ...)
     Module59000Name=Margin
     Module59000Desc=Modul til at styre avancer
     Module60000Name=Kommissioner
     Module60000Desc=Modul til at håndtere Kommissioner
    -Module62000Name=Incoterm
    -Module62000Desc=Tilføj funktioner til at administrere Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Tilføj funktioner til at administrere Incoterms
     Module63000Name=Ressourcer
     Module63000Desc=Administrer ressourcer (printere, biler, rum, ...), så kan du dele i begivenheder
     Permission11=Læs fakturaer
     Permission12=Opret/rediger kundefakturaer
     Permission13=Unvalidate fakturaer
    -Permission14=Valider fakturaer
    +Permission14=Bekræft fakturaer
     Permission15=Send fakturaer via e-mail
     Permission16=Opret betalinger for fakturaer
     Permission19=Slet fakturaer
     Permission21=Læs tilbud
     Permission22=Opret/rediger tilbud
    -Permission24=Valider tilbud
    +Permission24=Bekræft tilbud
     Permission25=Send tilbud
     Permission26=Luk tilbud
     Permission27=Slet tilbud
    @@ -651,9 +661,9 @@ Permission32=Opret/rediger varer/ydelser
     Permission34=Slet varer/ydelser
     Permission36=Se/administrer skjulte varer
     Permission38=Eksportere produkter
    -Permission41=Opret/rediger projekter (delte projekter og projekter jeg er kontaktperson for). Kan også oprette opgaver og tildele brugere projekter og opgaver
    -Permission42=Opret/rediger projekter (delte projekter og projekter jeg er kontaktperson for). Kan også oprette opgaver og tildele brugere projekter og opgaver
    -Permission44=Slet projekter
    +Permission41=Læs projekter og opgaver (delt projekt og projekter jeg er kontakt til). Kan også indtaste tidskrævet, for mig eller mit hierarki, på tildelte opgaver (Tidsskema)
    +Permission42=Opret / rediger projekter (delt projekt og projekter jeg er kontakt til). Kan også oprette opgaver og tildele brugere projekt og opgaver
    +Permission44=Slet projekter (delte projekter og projekter jeg er kontaktperson for)
     Permission45=Eksport projekter
     Permission61=Læs interventioner
     Permission62=Opret/rediger indgreb
    @@ -668,7 +678,7 @@ Permission78=Læs abonnementer
     Permission79=Opret/rediger abonnementer
     Permission81=Læs kundernes ordrer
     Permission82=Opret/rediger kundeordrer
    -Permission84=Validere kundernes ordrer
    +Permission84=Bekræfte kundernes ordrer
     Permission86=Send kundernes ordrer
     Permission87=Luk kunderne ordrer
     Permission88=Annuller kundernes ordrer
    @@ -680,13 +690,13 @@ Permission94=Eksporter skatter/afgifter
     Permission95=Læs rapporter
     Permission101=Læs sendings
     Permission102=Opret/rediger forsendelser
    -Permission104=Valider forsendelser
    +Permission104=Bekræft forsendelser
     Permission106=Eksporter forsendelser
     Permission109=Slet forsendelser
     Permission111=Læs finanskonti
     Permission112=Opret/rediger/slet og sammenlign transaktioner
     Permission113=Opsæt finanskonti (opret, håndter kategorier)
    -Permission114=Afstemme transaktioner
    +Permission114=Afstem transaktioner
     Permission115=Eksporttransaktioner og kontoudtog
     Permission116=Overførsler mellem konti
     Permission117=Administrer checks lastfordelingen
    @@ -694,15 +704,15 @@ Permission121=Læs tredjemand knyttet til brugerens
     Permission122=Opret/rediger tredjeparter knyttet til brugeren
     Permission125=Slet tredjemand knyttet til brugerens
     Permission126=Eksporter tredjemand
    -Permission141=Læs alle projekter og opgaver (også private projekter, jeg ikke har kontakt til)
    -Permission142=Opret/rediger alle projekter og opgaver (også private projekter, jeg ikke har kontakt til)
    +Permission141=Læs alle projekter og opgaver (også private projekter jeg er ikke kontakt til)
    +Permission142=Opret / rediger alle projekter og opgaver (også private projekter jeg er ikke kontakt til)
     Permission144=Slet alle projekter og opgaver (også private projekter, jeg ikke har kontakt til)
     Permission146=Læs udbydere
     Permission147=Læs statistikinterval
     Permission151=Læs "direkte debitering" ordrer
     Permission152=Oprette/ændre en betaling med "direkte debitering" ordrer
     Permission153=Sende/Overføre betaling via "direkte debitering" ordrer
    -Permission154=Registere Kreditter/Afvisninger af en betaling med "direkte debitering" ordrer
    +Permission154=Optag kreditter / Afslag på ordrer med direkte debitering
     Permission161=Læs kontrakter/abonnement
     Permission162=Opret / ændre kontrakter/abonnement
     Permission163=Aktivering af en tjeneste/abonnement af en kontrakt,
    @@ -717,7 +727,7 @@ Permission178=Eksport rejser og udgifter
     Permission180=Læs leverandører
     Permission181=Læs leverandør ordrer
     Permission182=Opret/rediger leverandørordrer
    -Permission183=Valider leverandør ordrer
    +Permission183=Bekræft leverandør ordrer
     Permission184=Godkend leverandør ordrer
     Permission185=Bestille eller afbestille leverandør ordrer
     Permission186=Modtag leverandør ordrer
    @@ -734,11 +744,11 @@ Permission206=Læs tilslutninger
     Permission211=Læs Telefoni
     Permission212=Ordrelinjer
     Permission213=Aktivér linje
    -Permission214=Setup Telefoni
    -Permission215=Setup udbydere
    +Permission214=Opsætningstelefoni
    +Permission215=Opsætningsudbydere
     Permission221=Læs emailings
     Permission222=Opret/rediger e-mails (emne, modtagere ...)
    -Permission223=Valider emailings (tillader afsendelse)
    +Permission223=Bekræft emailings (tillader afsendelse)
     Permission229=Slet emailings
     Permission237=Se modtagere og info
     Permission238=Send e-mails manuelt
    @@ -750,12 +760,12 @@ Permission244=Se indholdet af den skjulte kategorier
     Permission251=Læs andre brugere og grupper
     PermissionAdvanced251=Læse andre brugere
     Permission252=Opret / ændre andre brugere, grupper og yours permisssions
    -Permission253=Opret/rediger andre brugere, grupper og tilladelser
    +Permission253=Opret / rediger andre brugere, grupper og tilladelser
     PermissionAdvanced253=Opret/rediger interne/eksterne brugere og tilladelser
     Permission254=Opret/rediger kun eksterne brugere
     Permission255=Opret/rediger anden brugers adgangskode
     Permission256=Ændre sin egen adgangskode
    -Permission262=Udvide adgang til alle tredjeparter (ikke kun tredjeparter, der bruger et salg, repræsentant).<br / >Ikke er effektiv til eksterne brugere (altid begrænset til sig selv til forslag, ordrer, fakturaer, kontrakter, osv.).<br / >Ikke er effektiv til projekter (kun regler om projektet tilladelser, synlighed og assignement spørgsmål).
    +Permission262=Udvid adgang til alle tredjeparter (ikke kun tredjeparter, som bruger er salgsrepræsentant). <br> Ikke effektiv for eksterne brugere (altid begrænset til sig selv for forslag, ordrer, fakturaer, kontrakter mv.). <br>Effektiv til projekter (kun regler om projekttilladelser, synlighed og opgaver).
     Permission271=Læs CA
     Permission272=Læs fakturaer
     Permission273=Udsteder fakturaer
    @@ -765,7 +775,7 @@ Permission283=Slet kontakter
     Permission286=Eksporter kontaktpersoner
     Permission291=Læs takster
     Permission292=Angive tilladelser på de tariffer
    -Permission293=Rediger kundernes takster
    +Permission293=Ændre i kundernes takster
     Permission300=Læs stregkoder
     Permission301=Opret/rediger stregkoder
     Permission302=Slet stregkoder
    @@ -785,13 +795,11 @@ Permission354=Slet eller deaktivere grupper
     Permission358=Eksport brugere
     Permission401=Læs rabatter
     Permission402=Opret/rediger rabatter
    -Permission403=Valider rabatter
    +Permission403=Bekræft rabatter
     Permission404=Slet rabatter
    -Permission501=Læs medarbejderkontrakter / lønninger
    -Permission502=Opret / modificere medarbejderkontrakter / lønninger
    -Permission511=Læs betaling af lønninger
    -Permission512=Opret / modificer betaling af løn
    -Permission514=Slet lønninger
    +Permission511=Læs lønudbetalinger
    +Permission512=Opret / modificer lønudbetalinger
    +Permission514=Slet betaling af lønninger
     Permission517=Eksport lønninger
     Permission520=Læs lån
     Permission522=Opret / modificer lån
    @@ -820,12 +828,12 @@ Permission1004=Læs bestand bevægelser
     Permission1005=Opret/rediger lagerændringer
     Permission1101=Læs levering ordrer
     Permission1102=Opret/rediger leveringsordrer
    -Permission1104=Valider levering ordrer
    +Permission1104=Bekræft levering ordrer
     Permission1109=Slet levering ordrer
     Permission1181=Læs leverandører
     Permission1182=Læs leverandør ordrer
     Permission1183=Opret/rediger leverandørordrer
    -Permission1184=Valider leverandør ordrer
    +Permission1184=Bekræft leverandør ordrer
     Permission1185=Godkend leverandør ordrer
     Permission1186=Bestil leverandør ordrer
     Permission1187=Anerkende modtagelsen af leverandør ordrer
    @@ -835,7 +843,7 @@ Permission1201=Få resultatet af en eksport
     Permission1202=Opret/rediger en eksport
     Permission1231=Læs leverandør fakturaer
     Permission1232=Opret/rediger leverandørfakturaer
    -Permission1233=Valider leverandør fakturaer
    +Permission1233=Bekræft leverandør fakturaer
     Permission1234=Slet leverandør fakturaer
     Permission1235=Send leverandørfakturaer via e-mail
     Permission1236=Eksporter leverandør fakturaer, attributter og betalinger
    @@ -844,8 +852,8 @@ Permission1251=Kør massen import af eksterne data i databasen (data belastning)
     Permission1321=Eksporter kunde fakturaer, attributter og betalinger
     Permission1322=Genåb en betalt regning
     Permission1421=Eksporter kundens ordrer og attributter
    -Permission20001=Læs anmodninger om orlov (dine blade og din underordnede)
    -Permission20002=Opret/rediger dine anmodninger om orlov (dine blade og din underordnede)
    +Permission20001=Læs anmodninger om orlov (din orlov og din underordnede)
    +Permission20002=Opret / rediger dine anmodninger om orlov (din orlov og din underordnede)
     Permission20003=Slet permitteringsforespørgsler
     Permission20004=Læs alle orlovs forespørgsler (selv om bruger ikke er underordnede)
     Permission20005=Opret / modtag anmodninger om orlov for alle (selv af bruger ikke underordnede)
    @@ -864,7 +872,7 @@ Permission2414=Eksporter handlinger / opgaver af andre
     Permission2501=Læse dokumenter
     Permission2502=Indsend eller slette dokumenter
     Permission2503=Indsend eller slette dokumenter
    -Permission2515=Setup dokumenter abonnentfortegnelser
    +Permission2515=Opsæt dokumentdokumenter
     Permission2801=Brug FTP-klient i læsemodus (kun gennemse og download)
     Permission2802=Brug FTP-klient i skrivefunktion (slet eller upload filer)
     Permission50101=Brug salgssted
    @@ -882,7 +890,7 @@ Permission63003=Slet ressourcer
     Permission63004=Link ressourcer til begivenheder i tidsplan
     DictionaryCompanyType=Typer af tredjeparter
     DictionaryCompanyJuridicalType=Juridiske former for tredjeparter
    -DictionaryProspectLevel=Prospect potentielle niveau
    +DictionaryProspectLevel=Kundepotentialeniveau
     DictionaryCanton=Stat/provins
     DictionaryRegion=Regioner
     DictionaryCountry=Lande
    @@ -894,7 +902,7 @@ DictionaryVAT=Momssatser
     DictionaryRevenueStamp=Skattefrihedsbeløb
     DictionaryPaymentConditions=Betalingsbetingelser
     DictionaryPaymentModes=Betalingsformer
    -DictionaryTypeContact=Kontakt/adresse-typer
    +DictionaryTypeContact=Kontaktadressetyper
     DictionaryTypeOfContainer=Type af hjemmesider/containere
     DictionaryEcotaxe=Miljøafgift (WEEE)
     DictionaryPaperFormat=Papir formater
    @@ -908,47 +916,47 @@ DictionarySource=Oprindelse af tilbud/ordrer
     DictionaryAccountancyCategory=Personlige grupper til rapporter
     DictionaryAccountancysystem=Modeller til kontoplan
     DictionaryAccountancyJournal=Kontokladder
    -DictionaryEMailTemplates=E-mail skabeloner
    +DictionaryEMailTemplates=Email skabeloner
     DictionaryUnits=Enheder
    -DictionaryProspectStatus=Prospektionsstatus
    -DictionaryHolidayTypes=Typer af blade
    -DictionaryOpportunityStatus=Opportunity status for projekt / bly
    +DictionaryProspectStatus=Status på potentielle kunder
    +DictionaryHolidayTypes=Typer af orlov
    +DictionaryOpportunityStatus=Ledestatus for projekt / bly
     DictionaryExpenseTaxCat=Udgiftsrapport - Transportkategorier
     DictionaryExpenseTaxRange=Omkostningsrapport - Område efter transportkategori
    -SetupSaved=Setup gemt
    +SetupSaved=Opsætning gemt
     SetupNotSaved=Opsætning er ikke gemt
     BackToModuleList=Tilbage til moduler liste
    -BackToDictionaryList=Tilbage til liste over ordbøger
    +BackToDictionaryList=Tilbage til listen over ordbøger
     TypeOfRevenueStamp=Afgifts type
    -VATManagement=Momshåndtering
    -VATIsUsedDesc=Når der oprettes tilbud, fakturaer, ordrer osv., bruges som standard følgende regler for moms:<br>• Hvis sælger ikke er momspligtig, benyttes momssatsen 0.<br>• Hvis afsenderlandet er det samme som modtagerlandet, benyttes momssatsen for varen i afsenderlandet.<br>• Hvis både sælger og køber befinder sig i EU, og det drejer sig om fysiske varer, benyttes momssatsen 0. (Det forventes at køber betaler momsen i det modtagende land).<br>• Hvis både sælger og køber befinder sig i EU, og køber er en privatperson, benyttes momssatsen for varen i afsenderlandet.<br>• Hvis både sælger og køber befinder sig i EU, og køber er et firma, benyttes momssatsen 0.<br>• I alle andre tilfælde benyttes momssatsen 0.
    -VATIsNotUsedDesc=Som standard benyttes momssatsen 0. Dette anvendes til regnskab for foreninger, enkeltpersoner eller virksomheder med lav omsætning (under 50.000 kr).
    -VATIsUsedExampleFR=I Frankrig betyder det, at virksomheder eller organisationer har et rigtigt finanssystem (forenklet reel eller normal reel). Et system, hvor moms er angivet.
    -VATIsNotUsedExampleFR=I Frankrig betyder det foreninnger, der ikke er momsregistrerede, eller virksomheder, organisationer eller liberale erhverv, der har valgt mikrovirksomhedens skatteordning (moms i franchise) og betalt en franchise-moms uden momsangivelse. Dette valg vil vise referencen "Ikke gældende moms - art-293B af CGI" på fakturaer.
    +VATManagement=Moms sats bestemmelse
    +VATIsUsedDesc=Som standard ved oprettelse af emner, fakturaer, ordrer mv. Følger Moms satsen den aktive standardregel:\nHvis sælgeren ikke er underlagt moms, så sælges afgiften til 0. Slut på regel. Hvis sælgeren er sælger, er Moms som standard lig med moms satsen for produktet i sælgerens land. Slut på regel. Hvis sælger og køber begge er i Det Europæiske Fællesskab, og varer er transportrelaterede produkter (transport, fragt, flyselskab), er standard moms satsen 0. Denne regel er afhængig af sælgerens land - kontakt venligst din revisor. momsen skal betales af køberen til deres toldsted i deres land og ikke til sælgeren. Slut af regel. Hvis sælger og køber begge er i Det Europæiske Fællesskab, og køberen ikke er et selskab (med et registreret momsregistreringsnummer inden for Fællesskabet), så er moms satsen som standard til moms satsen af ​​sælgerens land. Slut på regel. Hvis sælger og køber begge er i Det Europæiske Fællesskab, og køberen er et firma (med et registreret international CVR nummer), så er salgsafgiften 0 som standard. Slut på regel. I ethvert andet tilfælde er den foreslåede standard moms sats = 0. Slut på regel.\n
    +VATIsNotUsedDesc=Den foreslåede Momssatser er som standard 0, som kan bruges til sager som foreninger, enkeltpersoner eller små virksomheder.
    +VATIsUsedExampleFR=I Frankrig betyder det, at virksomheder eller organisationer har et rigtigt finanssystem (forenklet reel eller normal reel). Et system, hvor salgsafgift er erklæret.
    +VATIsNotUsedExampleFR=I Frankrig betyder det foreninger, der ikke er angivet Salgsskat, eller selskaber, organisationer eller liberale erhverv, der har valgt mikrovirksomhedens skattesystem (Salgsskat i franchise) og betalt en franchise Salgsskat uden nogen Salgsskatteangivelse. Dette valg vil vise referencen "Ikke gældende salgsafgift - art-293B af CGI" på fakturaer.
     ##### Local Taxes #####
     LTRate=Hyppighed
     LocalTax1IsNotUsed=Brug ikke anden skat
    -LocalTax1IsUsedDesc=Brug en anden type skat (bortset fra moms)
    -LocalTax1IsNotUsedDesc=Brug ikke anden form for skat (bortset fra moms)
    +LocalTax1IsUsedDesc=Brug en anden type afgift (bortset fra den første)
    +LocalTax1IsNotUsedDesc=Brug ikke anden type afgift (bortset fra den første)
     LocalTax1Management=Anden type skat
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Brug ikke tredje skat
    -LocalTax2IsUsedDesc=Brug en tredje type skat (bortset fra moms)
    -LocalTax2IsNotUsedDesc=Brug ikke anden form for skat (bortset fra moms)
    +LocalTax2IsUsedDesc=Brug en tredje type afgift (bortset fra den første)
    +LocalTax2IsNotUsedDesc=Brug ikke anden type afgift (bortset fra den første)
     LocalTax2Management=Tredje type skat
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= RE sats som standard, når du opretter udsigter, fakturaer, ordrer mv følge de aktive standard regel: <br> Hvis te køber ikke udsættes for RE, RE som standard = 0. Slut på reglen. <br> Hvis køberen er underkastet RE derefter RE som standard. Slut på reglen. <br>
    -LocalTax1IsNotUsedDescES= Som standard den foreslåede RE er 0. Slut på reglen.
    -LocalTax1IsUsedExampleES= I Spanien er professionelle underlagt nogle specifikke dele af den spanske IAE.
    -LocalTax1IsNotUsedExampleES= I Spanien er professionelle og samfund og på visse dele af den spanske IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= RE sats som standard, når du opretter udsigter, fakturaer, ordrer mv følge de aktive standard regel: <br> Hvis sælgeren ikke er udsat for IRPF, så IRPF som standard = 0. Slut på reglen. <br> Hvis sælgeren er underkastet IRPF derefter IRPF som standard. Slut på reglen. <br>
    -LocalTax2IsNotUsedDescES= Som standard den foreslåede IRPF er 0. Slut på reglen.
    -LocalTax2IsUsedExampleES= I Spanien, freelancere og selvstændige, der leverer tjenesteydelser og virksomheder, der har valgt at skattesystemet i de moduler.
    -LocalTax2IsNotUsedExampleES= I Spanien er bussines ikke underlagt skattesystemet i moduler.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=RE-satsen som standard ved oprettelse af potentielle kunder, fakturaer, ordrer mv. Følger den aktive standardregel: <br> Hvis køberen ikke er udsat for RE, RE som standard = 0. Slut på regel. <br> Hvis køberen udsættes for RE, så er RE som standard. Slut på regel. <br>
    +LocalTax1IsNotUsedDescES=Som standard den foreslåede RE er 0. Slut på reglen.
    +LocalTax1IsUsedExampleES=I Spanien er professionelle underlagt nogle specifikke dele af den spanske IAE.
    +LocalTax1IsNotUsedExampleES=I Spanien er professionelle og samfund og på visse dele af den spanske IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=IRPF-kursen som standard ved oprettelse af emner. fakturaer, ordrer mv. Følger den aktive standardregel: Hvis sælgeren ikke er underlagt IRPF, skal IRPF som standard = 0. Slut på regel. Hvis sælgeren udsættes for IRPF, så er IRPF som standard. Slut på regel.
    +LocalTax2IsNotUsedDescES=Som standard den foreslåede IRPF er 0. Slut på reglen.
    +LocalTax2IsUsedExampleES=I Spanien, freelancere og selvstændige, der leverer tjenesteydelser og virksomheder, der har valgt at skattesystemet i de moduler.
    +LocalTax2IsNotUsedExampleES=I Spanien er de virksomheder, der ikke er underlagt skattesystemer for moduler.
     CalcLocaltax=Rapporter om lokale skatter
     CalcLocaltax1=Salg - Køb
     CalcLocaltax1Desc=Lokale skatter rapporter beregnes med forskellen mellem localtaxes salg og localtaxes køb
    @@ -958,7 +966,8 @@ CalcLocaltax3=Salg
     CalcLocaltax3Desc=Lokale skatter rapporter er det samlede salg af localtaxes
     LabelUsedByDefault=Etiket, som bruges som standard, hvis ingen oversættelse kan findes for kode
     LabelOnDocuments=Etiketten på dokumenter
    -NbOfDays=Nb dage
    +LabelOrTranslationKey=Etiket eller oversættelsestast
    +NbOfDays=Antal dage
     AtEndOfMonth=Ved udgangen af måneden
     CurrentNext=Aktuel / Næste
     Offset=Offset
    @@ -984,11 +993,11 @@ DatabaseUser=Database bruger
     DatabasePassword=Database password
     Tables=Tabeller
     TableName=Tabel navn
    -NbOfRecord=Nb af optegnelser
    +NbOfRecord=Antal poster
     Host=Server
     DriverType=Driver type
     SummarySystem=System oplysninger resumé
    -SummaryConst=Liste over alle Dolibarr setup parametre
    +SummaryConst=Liste over alle Dolibarr opsætningsparametre
     MenuCompanySetup=Virksomhed/Organisation
     DefaultMenuManager= Standard menuhåndtering
     DefaultMenuSmartphoneManager=Smartphone menu manager
    @@ -996,7 +1005,7 @@ Skin=Hud tema
     DefaultSkin=Default skin tema
     MaxSizeList=Maks. længde for liste
     DefaultMaxSizeList=Standard maks længde for lister
    -DefaultMaxSizeShortList=Standard maks længde for korte lister (dvs. i kundekort)
    +DefaultMaxSizeShortList=Standard max længde for korte lister (dvs. i kundekort)
     MessageOfDay=Budskab om dagen
     MessageLogin=Loginsiden besked
     LoginPage=Login side
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Faste search form på venstre menu
     DefaultLanguage=Standard sprog til brug (sprog code)
     EnableMultilangInterface=Aktiver flersproget grænseflade
     EnableShowLogo=Vis logo på venstre menu
    -CompanyInfo=Virksomhed/organisation information
    -CompanyIds=Virksomhed/organisation identiteter
    +CompanyInfo=Virksomhed/Organisation
    +CompanyIds=Virksomhed / Organisations identiteter
     CompanyName=Navn
     CompanyAddress=Adresse
     CompanyZip=Postnummer
    @@ -1019,30 +1028,30 @@ DoNotSuggestPaymentMode=Ikke tyder
     NoActiveBankAccountDefined=Ingen aktiv bankkonto defineret
     OwnerOfBankAccount=Ejer af bankkonto %s
     BankModuleNotActive=Bankkonti modul er ikke aktiveret
    -ShowBugTrackLink=Vis link "<strong> %s </ strong>"
    +ShowBugTrackLink=Vis link "<strong> %s </strong>"
     Alerts=Indberetninger
    -DelaysOfToleranceBeforeWarning=Tolerance forsinkelser før advarsel
    -DelaysOfToleranceDesc=Dette skærmbillede giver dig mulighed for at definere tolereres forsinkelser før en indberetning er rapporteret på skærmen med picto %s for hver sent element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolerance for forsinkelse (i dage) før alarm for ikke-gennemførte planlagte begivenheder (i tidsplanen)
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Forsinkelsestolerance (i dage) før advarsel om projekt ikke lukket i tide
    -Delays_MAIN_DELAY_TASKS_TODO=Forsinkelsestolerance (i dage) før advarsel om planlagte opgaver (projektopgaver) er endnu ikke gennemført
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Forsinkelsestolerance (i dage) før varsel om ordrer, der ikke er behandlet endnu
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Tilladt forsinkelse (i dage) før varsel om købsordrer, der ikke er behandlet endnu
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (i dage) inden indberetning om forslag til at lukke
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (i dage) inden indberetning om forslag ikke faktureret
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance forsinkelse (i dage) før alarm om tjenesteydelser for at aktivere
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance forsinkelse (i dage) inden indberetning om udløb tjenester
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance forsinkelse (i dage) inden indberetning om ubetalte leverandør fakturaer
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerance forsinkelse (i dage) inden indberetning om ubetalte klient fakturaer
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance forsinkelse (i dage) inden indberetning om verserende bank forsoning
    -Delays_MAIN_DELAY_MEMBERS=Tolerance forsinkelse (i dag), inden indberetning om forsinket medlemskab gebyr
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance forsinkelse (i dage) før alarm for checks depositum til at gøre
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance forsinkelse (i dage) før advarsel for udgiftsrapporter at godkende
    -SetupDescription1=Opsætningsmenuen bruges, før du går i gang med Dolibarr.
    -SetupDescription2=De to obligatoriske opsætningsstrin er følgende trin (de to første indgange i den venstre opsætningsmenu):
    -SetupDescription3=Indstillinger i menuen <a href="%s"> %s -> %s </a>. Dette trin er påkrævet, fordi det definerer data, der bruges på Dolibarr-skærmbillederne, for at tilpasse softwareens standardadfærd (for f.eks. Landrelaterede funktioner).
    -SetupDescription4=Indstillinger i menuen <a href="%s"> %s -> %s </a>. Dette trin er påkrævet, fordi Dolibarr ERP/CRM er en samling af flere moduler/applikationer, alle mere eller mindre uafhængige. Nye funktioner tilføjes til menuer for hvert modul, du aktiverer.
    -SetupDescription5=Andre menupunkter styrer valgfrie parametre.
    +DelaysOfToleranceBeforeWarning=Forsinkelser, før der vises en advarsel
    +DelaysOfToleranceDesc=Denne skærm giver dig mulighed for at definere forsinkelsen, før en advarsel rapporteres på skærmen med et %s ikon for hvert forsinket element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Forsinkelse (i dage) før advarsel om planlagte arrangementer (agendahændelser), der endnu ikke er afsluttet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Forsinkelse (i dage) før advarsel om projekt ikke lukket i tide
    +Delays_MAIN_DELAY_TASKS_TODO=Forsinkelse (i dage) før advarsel om planlagte opgaver (projektopgaver) er endnu ikke gennemført
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Forsinkelse (i dage) før advarsel om ordrer, der ikke er behandlet endnu
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Forsinkelse (i dage) før varsel om købsordrer, der ikke er behandlet endnu
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Forsinkelse (i dage) før advarsel om forslag til at lukke
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Forsinkelse (i dage) før advarsel om forslag, der ikke faktureres
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Forsinkelse (i dage) før advarsel om tjenester, der skal aktiveres
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Forsinkelse (i dage) før advarsel om udløbne tjenester
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Forsinkelse (i dage) før advarsel om ubetalte leverandørfakturaer
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Forsinkelse (i dage) før advarsel om ubetalte klientfakturaer
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Forsinkelse (i dage) før advarsel om afventer bankafstemning
    +Delays_MAIN_DELAY_MEMBERS=Forsinkelse (i dage) før advarsel om forsinket medlemsgebyr
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Forsinkelse (i dage) før varsel for check depositum at gøre
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Forsinkelse (i dage) før advarsel for udgiftsrapporter at godkende
    +SetupDescription1=Før du begynder at bruge Dolibarr, skal nogle indledende parametre defineres og moduler aktiveres / konfigureres.
    +SetupDescription2=De obligatoriske opsætningsstrin er de 2 første trin i opsætningsmenuen, nemlig:
    +SetupDescription3=<a href="%s"> %s -> %s </a> <br> Grundlæggende parametre, der bruges til at tilpasse Dolibarrs standardadfærd (f.eks. for landrelaterede funktioner).
    +SetupDescription4=<a href="%s"> %s -> %s </a> <br> Dolibarr ERP / CRM er en samling af mange moduler / applikationer, alle mere eller mindre uafhængige. Modulerne, der er relevante for dine behov, skal aktiveres og konfigureres. Nye emner / valgmuligheder tilføjes til menuer med aktivering af et modul.
    +SetupDescription5=Andre opsætningsmenuposter indeholder valgfrie parametre.
     LogEvents=Sikkerhed revision arrangementer
     Audit=Audit
     InfoDolibarr=Om Dolibarr
    @@ -1057,48 +1066,48 @@ BrowserOS=Browser OS
     ListOfSecurityEvents=Liste over Dolibarr sikkerhed begivenheder
     SecurityEventsPurged=Sikkerhed begivenheder renset
     LogEventDesc=Du kan gøre det muligt at logge for Dolibarr sikkerhed begivenheder her. Administratorer kan derefter se dens indhold via menuen <b>Systemværktøjer - Revision.</b> Advarsel, denne funktion kan forbruge en stor mængde data i databasen.
    -AreaForAdminOnly=Opsætningsparametre kan kun indstilles af <b> administratorbrugere </ b>.
    +AreaForAdminOnly=Opsætningsparametre kan kun indstilles af <b> administratorbrugere</b>.
     SystemInfoDesc=System oplysninger er diverse tekniske oplysninger du får i read only mode og synlig kun for administratorer.
     SystemAreaForAdminOnly=Dette område er til rådighed for administratoren brugere. Ingen af de Dolibarr permissions kan reducere denne grænse.
    -CompanyFundationDesc=Rediger på denne side alle kendte oplysninger om firmaet eller stiftelsen, du skal administrere (For dette, klik på "%s" eller "%s" knappen nederst på siden)
    -AccountantDesc=Rediger på denne side alle kendte oplysninger om din revisor/bogholder
    +CompanyFundationDesc=Rediger virksomhedens / enhedens oplysninger. Klik på "%s" eller "%s" knappen nederst på siden.
    +AccountantDesc=Rediger oplysningerne om din revisor / bogholder
     AccountantFileNumber=Fil nummer
     DisplayDesc=Du kan vælge hver parameter i forbindelse med Dolibarr udseende og stemning her
     AvailableModules=Tilgængelige app / moduler
     ToActivateModule=For at  aktivere moduler, skal du gå til Opsætning (Hjem->Opsætning->Moduler).
     SessionTimeOut=Time out for session
    -SessionExplanation=Dette nummer garanti for, at samlingen vil aldrig udløber før denne forsinkelse. Men PHP sessoin forvaltning ikke garanterer, at sessionen altid udløber efter denne forsinkelse: Dette sker, hvis et system til at rengøre cache session kører. <br> Bemærk: uden nogen særlig ordning, intern PHP proces vil rengøre møde hvert <b>ca %s / %s</b> adgang, men kun under adgangen foretaget af andre sessioner.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Ledige udløser
    -TriggersDesc=Udløser er filer, der vil ændre adfærd Dolibarr workflow gang kopieres til den mappe <b>htdocs / includes / udløser.</b> De realiserede nye projekter, der aktiveres på Dolibarr begivenheder (oprettelsen af nye virksomheder, faktura validering, ...).
    +TriggersDesc=Udløsere er filer, der vil ændre opførelsen af ​​Dolibarr workflow en gang kopieret til mappen <b> htdocs / core / triggers </b>. De indser nye handlinger, der aktiveres på Dolibarr events (ny oprettelse af firmaer, faktura bekræftelse, ...).
     TriggerDisabledByName=Udløser i denne fil er slået <b>fra-NoRun</b> suffikset i deres navn.
     TriggerDisabledAsModuleDisabled=Udløser i denne fil er slået fra som <b>modul %s</b> er slået fra.
     TriggerAlwaysActive=Udløser i denne fil er altid aktive, uanset hvad er det aktiverede Dolibarr moduler.
     TriggerActiveAsModuleActive=Udløser i denne fil er aktive som <b>modul %s</b> er aktiveret.
     GeneratedPasswordDesc=Definer her som regel, du vil bruge til at generere nye adgangskode, hvis du beder om at få automatisk genereret adgangskode
     DictionaryDesc=Indsæt alle referencedata. Du kan tilføje dine værdier til standardværdien.
    -ConstDesc=På denne side kan du redigere alle andre parametre, der ikke er tilgængelige på tidligere sider. Disse er for det meste forbeholdt parametre til udviklere eller avanceret fejlfinding. For en liste over muligheder <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site-åbner i et nyt vindue" target="_blank"> check her </ a>.
    +ConstDesc=På denne side kan du redigere alle andre parametre, der ikke er tilgængelige på tidligere sider. Disse er for det meste parametre forbeholdt  udviklere eller avanceret fejlfinding. For en liste over muligheder <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">tjek her</a>.
     MiscellaneousDesc=Alle andre sikkerhedsrelaterede parametre er defineret her.
    -LimitsSetup=Grænseværdier / Precision setup
    -LimitsDesc=Du kan definere grænser, præciseringer og optimeringer bruges af Dolibarr her
    +LimitsSetup=Grænser / Præcisionsopsætning
    +LimitsDesc=Du kan definere grænser, præcisioner og optimeringer, der bruges af Dolibarr her
     MAIN_MAX_DECIMALS_UNIT=Maks. decimaler for enhedspriser
     MAIN_MAX_DECIMALS_TOT=Maks. decimaler for totalpriser
     MAIN_MAX_DECIMALS_SHOWN=Maks. decimaler for priser vist på skærmen. (Tilføj <b>...</b> efter dette tal, hvis du vil se <b>...</b>, når den viste pris er afrundet).
    -MAIN_ROUNDING_RULE_TOT=Trin for afrunding (i lande, hvor afrunding sker trinvist. For eksempel angives 0,05, når afrunding sker i trin af 0,05)
    +MAIN_ROUNDING_RULE_TOT=Trin for afrunding (i lande, hvor afrunding sker med basen 10. For eksempel angives 0,05, når afrunding sker i trin af 0,05)
     UnitPriceOfProduct=Netto enhedspris for en vare
     TotalPriceAfterRounding=Samlet pris (netto/moms/inkl. moms) efter afrunding
     ParameterActiveForNextInputOnly=Parameter effektive for næste input kun
    -NoEventOrNoAuditSetup=Ingen sikkerhed tilfælde er blevet registreret endnu. Dette kan være normal, hvis revision ikke er blevet aktiveret på "setup - sikkerhed - revision" side.
    -NoEventFoundWithCriteria=Ingen sikkerhed tilfælde er fundet for sådanne søgefelter.
    -SeeLocalSendMailSetup=Se din lokale sendmail setup
    +NoEventOrNoAuditSetup=Der er ikke registreret nogen sikkerhedshændelse endnu. Dette kan være normalt, hvis audit ikke er aktiveret på siden "setup - security - audit".
    +NoEventFoundWithCriteria=Der er ikke fundet nogen sikkerhedshændelse for disse søgekriterier.
    +SeeLocalSendMailSetup=Se din lokale sendmail opsætning
     BackupDesc=Hvis du vil foretage en komplet sikkerhedskopi af Dolibarr, skal du:
    -BackupDesc2=Gem indholdet af dokumentmappe (<b> %s </ b>), der indeholder alle uploadede og genererede filer (Så det indeholder alle dump filer genereret i trin 1).
    -BackupDesc3=Gem indholdet af din database (<b> %s </ b>) i en dumpfil. Til dette kan du bruge følgende assistent.
    +BackupDesc2=Gem indholdet af dokumentmappe (<b> %s </b>), der indeholder alle uploadede og genererede filer (Så det indeholder alle dump filer genereret i trin 1).
    +BackupDesc3=Gem indholdet af din database (<b> %s </b>) i en dumpfil. Til dette kan du bruge følgende assistent.
     BackupDescX=Arkiveret mappe skal opbevares på et sikkert sted.
     BackupDescY=De genererede dump fil bør opbevares på et sikkert sted.
    -BackupPHPWarning=Sikkerhedskopiering kan ikke garanteres med denne metode. Foretrækker den forrige
    +BackupPHPWarning=Backup kan ikke garanteres med denne metode. Forrige anbefalet.
     RestoreDesc=At genskabe en Dolibarr sikkerhedskopi, skal du:
    -RestoreDesc2=Gendan arkivfil (f.eks. Zip-fil) i dokumentmappen for at udtrække træet i filer i dokumentmappen af ​​en ny Dolibarr-installation eller i dette nuværende dokument directoy (<b> %s </ b>).
    -RestoreDesc3=Gendan data, fra en sikkerhedskopieringsfil, til databasen for den nye Dolibarr-installation eller i databasen for denne nuværende installation (<b> %s </ b>). Advarsel, når genoprettelsen er færdig, skal du bruge et login / password, der eksisterede, da sikkerhedskopiering blev foretaget for at oprette forbindelse igen. For at gendanne en backup database til denne nuværende installation, kan du følge denne assistent.
    +RestoreDesc2=Gendan arkivfil (f.eks. Zip-fil) i dokumentmappen for at udtrække træ af filer i dokumentmappen af ​​en ny Dolibarr-installation eller til denne nuværende dokumentmappe (<b> %s </b>).
    +RestoreDesc3=Gendan data, fra en sikkerhedskopieringsfil, til databasen for den nye Dolibarr-installation eller i databasen for denne nuværende installation (<b> %s </b>). Advarsel, når genoprettelsen er færdig, skal du bruge et login / password, der eksisterede, da sikkerhedskopiering blev foretaget for at oprette forbindelse igen. For at gendanne en backup database til denne nuværende installation, kan du følge denne assistent.
     RestoreMySQL=MySQL import
     ForcedToByAModule= Denne regel er tvunget til <b>at %s</b> ved en aktiveret modul
     PreviousDumpFiles=Genererede database backup filer
    @@ -1106,33 +1115,33 @@ WeekStartOnDay=Første dag i ugen
     RunningUpdateProcessMayBeRequired=Kørsel opgraderingen processen synes at være nødvendig (Programmer version %s adskiller sig fra database version %s)
     YouMustRunCommandFromCommandLineAfterLoginToUser=Du skal køre denne kommando fra kommandolinjen efter login til en shell med brugerens <b>%s.</b>
     YourPHPDoesNotHaveSSLSupport=SSL-funktioner ikke er tilgængelige i dit PHP
    -DownloadMoreSkins=Mere skind til download
    +DownloadMoreSkins=Find flere skind på Dolistore.com
     SimpleNumRefModelDesc=Retur referencenummer med format %syymm-nnnn hvor yy er året, mm er måned og nnnn er en sekvens uden hul og uden reset
    -ShowProfIdInAddress=Vis Professionel id med adresser på dokumenter
    -ShowVATIntaInAddress=Skjul moms Intra num med adresser på dokumenter
    +ShowProfIdInAddress=Vis professionelt id med adresser på dokumenter
    +ShowVATIntaInAddress=Skjul moms-nummer inden for Fællesskabet med adresser på dokumenter
     TranslationUncomplete=Delvis oversættelse
    -MAIN_DISABLE_METEO=Deaktiver Meteo udsigt
    +MAIN_DISABLE_METEO=Deaktiver meteorologisk visning
     MeteoStdMod=Standard-tilstand aktiveret
     MeteoStdModEnabled=Standard-tilstand aktiveret
     MeteoPercentageMod=Procentdel tilstand
     MeteoPercentageModEnabled=Procentdel tilstand aktiveret
     MeteoUseMod=Klik for at redigere %s
     TestLoginToAPI=Test logge på API
    -ProxyDesc=Nogle funktioner i Dolibarr nødt til at have en Internet adgang til arbejde. Definer her parametre for denne. Hvis Dolibarr serveren er bag en proxy server, disse parametre fortæller Dolibarr hvordan man adgang til internettet via den.
    +ProxyDesc=Nogle funktioner i Dolibarr kræver internetadgang for at fungere korrekt. Definer her parametrene for dette. Hvis Dolibarr-serveren ligger bag en proxyserver, fortæller disse parametre Dolibarr, hvordan man får adgang til internettet via den.
     ExternalAccess=Ekstern adgang
     MAIN_PROXY_USE=Brug en proxy-server (ellers direkte adgang til internettet)
     MAIN_PROXY_HOST=Navn / adresse proxy-server
     MAIN_PROXY_PORT=Port of proxy-server
     MAIN_PROXY_USER=Log ind for at bruge proxyserveren
     MAIN_PROXY_PASS=Adgangskode for at bruge proxyserveren
    -DefineHereComplementaryAttributes=Definer her alle atributes, der ikke allerede findes som standard, og at du ønsker at blive understøttet for %s.
    +DefineHereComplementaryAttributes=Definer eventuelle attributter, der ikke allerede er tilgængelige som standard, som du vil blive understøttet for %s her.
     ExtraFields=Supplerende egenskaber
     ExtraFieldsLines=Supplerende attributter (linjer)
     ExtraFieldsLinesRec=Supplerende attributter (skabeloner faktura linjer)
     ExtraFieldsSupplierOrdersLines=Supplerende attributter (ordrelinjer)
     ExtraFieldsSupplierInvoicesLines=Supplerende attributter (faktura linjer)
     ExtraFieldsThirdParties=Supplerende attributter (tredjepart)
    -ExtraFieldsContacts=Supplerende attributter (kontakt / adresse)
    +ExtraFieldsContacts=Supplerende attributter (kontaktadresse)
     ExtraFieldsMember=Supplerende attributter (medlem)
     ExtraFieldsMemberType=Supplerende attributter (medlemstype)
     ExtraFieldsCustomerInvoices=Supplerende attributter (fakturaer)
    @@ -1143,86 +1152,88 @@ ExtraFieldsProject=Supplerende attributter (projekter)
     ExtraFieldsProjectTask=Supplerende attributter (opgaver)
     ExtraFieldHasWrongValue=Attribut %s har en forkert værdi.
     AlphaNumOnlyLowerCharsAndNoSpace=kun alfanumeriske og små bogstaver uden plads
    -SendmailOptionNotComplete=Advarsel, på nogle Linux-systemer, for at sende e-mails fra din e-mail, sendmail udførelse opsætning skal conatins option-ba (parameter mail.force_extra_parameters i din php.ini fil). Hvis nogle modtagere aldrig modtage e-mails, så prøv at redigere denne PHP parameter med mail.force_extra_parameters =-ba).
    +SendmailOptionNotComplete=Advarsel til anvendere af sendmail i Linux-system: Hvis nogle modtagere aldrig modtager e-mails, skal du prøve at redigere denne PHP-parameter med mail.force_extra_parameters = -ba i din php.ini-fil.
     PathToDocuments=Sti til dokumenter
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Funktion til at sende mails ved hjælp af metoden "PHP mail direct" genererer en mailbesked, der muligvis ikke analyseres korrekt af nogle modtagende mail-servere. Resultatet er, at nogle mails ikke kan læses af folk, der er vært for disse "bug'ed" platforme. Det er tilfældet for nogle internetudbydere (Ex: Orange i Frankrig). Dette er ikke et problem i Dolibarr eller i PHP, men på modtagende mail server. Du kan dog tilføje option MAIN_FIX_FOR_BUGGED_MTA til 1 i setup - andet for at ændre Dolibarr for at undgå dette. Du kan dog opleve problemer med andre servere, der overholder strengt SMTP-standarden. Den anden løsning (anbefales) er at bruge metoden "SMTP socket library", der ikke har nogen ulemper.
    +SendmailOptionMayHurtBuggedMTA=Funktion til at sende mails ved hjælp af metode "PHP mail direct" genererer en mailbesked, der muligvis ikke analyseres korrekt af nogle modtagende mail-servere. Resultatet er, at nogle mails ikke kan læses af folk, der er vært for disse bugged platforme. Dette er tilfældet for nogle internetudbydere (Ex: Orange i Frankrig). Dette er ikke et problem med Dolibarr eller PHP, men med den modtagende mail server. Du kan dog tilføje en mulighed MAIN_FIX_FOR_BUGGED_MTA til 1 i Setup - Other for at ændre Dolibarr for at undgå dette. Du kan dog opleve problemer med andre servere, der strengt bruger SMTP-standarden. Den anden løsning (anbefales) er at bruge metoden "SMTP socket library", som ikke har nogle ulemper.
     TranslationSetup=Opsætning af oversættelse
     TranslationKeySearch=Søg en oversættelsestast eller streng
     TranslationOverwriteKey=Overskriv en oversættelsestreng
     TranslationDesc=Sådan indstilles det viste applikationssprog: <br> * Systemwide: menu <strong> Hjem - Opsætning - Visning </strong> <br> * Per bruger: Brug fanen <strong> Brugerdisplay opsætning </strong> klik på brugernavn (øverst på skærmen).
     TranslationOverwriteDesc=Du kan også tilsidesætte strenge, der fylder nedenstående tabel. Vælg dit sprog fra "%s" dropdown, indsæt oversættelsestastens streng i "%s" og din nye oversættelse til "%s"
    -TranslationOverwriteDesc2=Du kan bruge den anden fane til at hjælpe dig med at kende oversættelsessnøglen til brug
    +TranslationOverwriteDesc2=Du kan bruge den anden fane til at hjælpe dig med at vide, hvilken oversættelsessnøgle der skal bruges
     TranslationString=Oversættelsestreng
     CurrentTranslationString=Nuværende oversættelsestreng
     WarningAtLeastKeyOrTranslationRequired=Et søgekriterium kræves i det mindste for nøgle- eller oversættelsestreng
     NewTranslationStringToShow=Ny oversættelsestreng, der skal vises
     OriginalValueWas=Den oprindelige oversættelse overskrives. Oprindelig værdi var: <br> <br> %s
    -TransKeyWithoutOriginalValue=Du har tvunget en ny oversættelse til oversættelsessnøglen '<strong> %s </strong>', der ikke findes i nogen sprogfiler
    +TransKeyWithoutOriginalValue=Du har tvinget en ny oversættelse til oversættelsessnøglen '<strong> %s </ strong>', der ikke findes i nogen sprogfiler
     TotalNumberOfActivatedModules=Aktiveret applikation / moduler: <b> %s </b> / <b> %s </b>
     YouMustEnableOneModule=Du skal i det mindste aktivere 1 modul
     ClassNotFoundIntoPathWarning=Klasse %s ikke fundet i PHP-sti
     YesInSummer=Ja om sommeren
    -OnlyFollowingModulesAreOpenedToExternalUsers=Bemærk, at kun følgende moduler åbnes for eksterne brugere (uanset tilladelse fra sådanne brugere) og kun hvis tilladelser blev givet:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Bemærk, at kun følgende moduler åbnes for eksterne brugere (uanset tilladelser fra sådanne brugere) og kun hvis der gives tilladelser:
     SuhosinSessionEncrypt=Sessionsopbevaring krypteret af Suhosin
     ConditionIsCurrently=Tilstanden er i øjeblikket %s
    -YouUseBestDriver=Du bruger driveren %s, der er den bedste driver til rådighed i øjeblikket.
    -YouDoNotUseBestDriver=Du bruger drev %s men driver %s anbefales.
    +YouUseBestDriver=Du bruger driveren %s, som er den bedste driver til rådighed i øjeblikket.
    +YouDoNotUseBestDriver=Du bruger driveren %s, men driveren %s anbefales.
     NbOfProductIsLowerThanNoPb=Du har kun %s produkter / tjenester i databasen. Dette kræver ikke nogen særlig optimering.
     SearchOptim=Søg optimering
    -YouHaveXProductUseSearchOptim=Du har %s produkt i database. Du skal tilføje den konstante PRODUCT_DONOTSEARCH_ANYWHERE til 1 i Home-Setup-Other, du begrænser søgningen til begyndelsen af ​​strenge, der gør det muligt for databasen at bruge indeks, og du skal få et øjeblikkeligt svar.
    +YouHaveXProductUseSearchOptim=Du har %s produkter i databasen. Du skal tilføje den konstante PRODUCT_DONOTSEARCH_ANYWHERE til 1 i Home-Setup-Other. Begræns søgningen til begyndelsen af ​​strenge, der gør det muligt for databasen at bruge indekser, og du bør få et øjeblikkeligt svar.
     BrowserIsOK=Du bruger browseren %s. Denne browser er ok for sikkerhed og ydeevne.
    -BrowserIsKO=Du bruger browseren %s. Denne browser er kendt for at være et dårligt valg for sikkerhed, ydeevne og pålidelighed. Vi anbefaler dig at bruge Firefox, Chrome, Opera eller Safari.
    +BrowserIsKO=Du bruger browseren %s. Denne browser er kendt for at være et dårligt valg for sikkerhed, ydeevne og pålidelighed. Vi anbefaler at bruge Firefox, Chrome, Opera eller Safari.
     XDebugInstalled=XDebug er indlæst.
     XCacheInstalled=XCache er indlæst.
    -AddRefInList=Vis kunde / leverandør ref til liste (vælg liste eller combobox) og det meste af hyperlink. Tredjeparter vil fremkomme med navnet "CC12345 - SC45678 - Det store selskab coorp", i stedet for "The big company coorp".
    -AskForPreferredShippingMethod=Anmod om foretrukket afsendelsesmetode for tredjeparter.
    +AddRefInList=Vis kunde / leverandør ref. info liste (vælg liste eller combobox) og det meste af hyperlink. <br> Tredjeparter vil blive vist med et navneformat af "CC12345 - SC45678 - The Big Company corp." i stedet for "The Big Company Corp".
    +AddAdressInList=Vis kunde / leverandør adresse info liste (vælg liste eller combobox) <br> Tredjeparter vil fremkomme med et navneformat af "The Big Company Corp." - 21 Jump Street 123456 Big Town - USA "i stedet for" The Big Company Corp ".
    +AskForPreferredShippingMethod=Anmod om en foretrukket forsendelsesmetode for tredjeparter.
     FieldEdition=Område udgave %s
     FillThisOnlyIfRequired=Eksempel: +2 (kun udfyld hvis problemer med tidszoneforskydning opstår)
     GetBarCode=Få stregkode
     ##### Module password generation
     PasswordGenerationStandard=Returnere en adgangskode, der genereres i henhold til interne Dolibarr algoritme: 8 tegn indeholder delt tal og tegn med små bogstaver.
    -PasswordGenerationNone=Foreslå ikke nogen genereret adgangskode. Adgangskoden skal indtastes manuelt.
    +PasswordGenerationNone=Foreslå ikke en genereret adgangskode. Adgangskoden skal indtastes manuelt.
     PasswordGenerationPerso=Ret en adgangskode i overensstemmelse med din personligt definerede konfiguration.
     SetupPerso=Ifølge din konfiguration
     PasswordPatternDesc=Beskrivelse af adgangskodemønster
     ##### Users setup #####
     RuleForGeneratedPasswords=Regel at generere foreslået passwords
     DisableForgetPasswordLinkOnLogonPage=Ikke viser linket "Glem adgangskode" på loginsiden
    -UsersSetup=Brugere modul opsætning
    +UsersSetup=Opsætning af brugermodul
     UserMailRequired=EMail forpligtet til at oprette en ny bruger
     ##### HRM setup #####
     HRMSetup=HRM modul opsætning
     ##### Company setup #####
    -CompanySetup=Selskaber modul opsætning
    -CompanyCodeChecker=Modul til tredjeparts kodegenerering og -kontrol (kunde eller leverandør)
    -AccountCodeManager=Modul til generering af regnskabskode (kunde eller sælger)
    +CompanySetup=Opsætning af firmamoduler
    +CompanyCodeChecker=Valg til automatisk generering af kunde / leverandørkoder
    +AccountCodeManager=Valg til automatisk generering af kunde / leverandørregnskabskoder
     NotificationsDesc=E-mail-meddelelsesfunktionen giver dig mulighed for lydløst at sende automatisk mail til nogle Dolibarr-arrangementer. Mål for meddelelser kan defineres:
     NotificationsDescUser=* pr. bruger, en bruger til tiden.
     NotificationsDescContact=* pr. tredjeparts kontakter (kunder eller leverandører), en kontakt ad gangen.
     NotificationsDescGlobal=* eller ved at indstille globale målemails i modulopsætningssiden.
    -ModelModules=Dokumenter skabeloner
    -DocumentModelOdt=Generer dokumenter fra OpenDocuments skabeloner (.ODT eller .ODS filer til OpenOffice, KOffice, TextEdit, ...)
    +ModelModules=Dokumentskabeloner
    +DocumentModelOdt=Generer dokumenter fra OpenDocument skabeloner (.ODT / .ODS filer fra LibreOffice, OpenOffice, KOffice, TextEdit, ...)
     WatermarkOnDraft=Vandmærke på udkast til et dokument
     JSOnPaimentBill=Aktivér funktion for at autofyldte betalingslinjer på betalingsformular
    -CompanyIdProfChecker=Professionel Id unikke
    +CompanyIdProfChecker=Regler for professionelle id'er
     MustBeUnique=Skal være unikt?
    -MustBeMandatory=Obligatorisk at oprette tredjeparter?
    -MustBeInvoiceMandatory=Obligatorisk at validere fakturaer?
    +MustBeMandatory=Obligatorisk at oprette tredjeparter (hvis momsnummer eller type af virksomhed er defineret)?
    +MustBeInvoiceMandatory=Obligatorisk at bekræfte fakturaer?
     TechnicalServicesProvided=Tekniske ydelser
     #####DAV #####
    -WebDAVSetupDesc=Dette er linkene for at få adgang til WebDAV-biblioteket. Den indeholder en "offentlig" dir, der er åben for enhver bruger, der kender webadressen (hvis adgang til offentlig adgang er tilladt) og en "privat" mappe, der har brug for en eksisterende loginkonto / adgangskode for at få adgang til.
    +WebDAVSetupDesc=Dette er linkene for at få adgang til WebDAV-biblioteket. Den indeholder en "offentlig" dir, der er åben for enhver bruger, der kender webadressen (hvis adgang til offentlig adgang er tilladt) og en "privat" mappe, der har brug for en eksisterende loginkonto / adgangskode for at få adgang.
     WebDavServer=Rod URL af %s server: %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=En eksportgaranti link <b>til %s</b> format er tilgængelig på følgende link: %s
     ##### Invoices #####
    -BillsSetup=Fakturaer modul opsætning
    +BillsSetup=Opsætning af fakturamodul
     BillsNumberingModule=Fakturaer og kreditnotaer nummerressourcer modul
     BillsPDFModules=Faktura dokumenter modeller
    +BillsPDFModulesAccordindToInvoiceType=Faktura dokumenter modeller efter faktura type
     PaymentsPDFModules=Betalingsdokumenter modeller
    -CreditNote=Credit note
    -CreditNotes=Credit noter
    -ForceInvoiceDate=Force fakturadatoen til validering dato
    +CreditNote=Kreditnota
    +CreditNotes=Kreditnotaer
    +ForceInvoiceDate=Force fakturadatoen til bekræftelse dato
     SuggestedPaymentModesIfNotDefinedInInvoice=Foreslåede betalinger tilstand på fakturaen som standard, hvis ikke defineret for faktura
     SuggestPaymentByRIBOnAccount=Foreslå betaling af trække på grund
     SuggestPaymentByChequeToAddress=Foreslå checkudbetaling til
    @@ -1249,7 +1260,7 @@ WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Anmode om lagerkilde for ordre
     ##### Suppliers Orders #####
     BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Anmode om købskonto bestemmelsessted
     ##### Orders #####
    -OrdersSetup=Ordrer «forvaltning setup
    +OrdersSetup=Ordrer forvaltning sætup
     OrdersNumberingModules=Ordrer nummerressourcer moduler
     OrdersModelModule=Bestil dokumenter modeller
     FreeLegalTextOnOrders=Fri tekst om ordrer
    @@ -1257,7 +1268,7 @@ WatermarkOnDraftOrders=Vandmærke på udkast til ordrer (ingen hvis tom)
     ShippableOrderIconInList=Tilføj et ikon i ordrer liste, der angiver, om ordren kan overføres
     BANK_ASK_PAYMENT_BANK_DURING_ORDER=Anmode om bestilling af bankkonto
     ##### Interventions #####
    -InterventionsSetup=Interventioner modul opsætning
    +InterventionsSetup=Opsætning af interventionsmodul
     FreeLegalTextOnInterventions=Fri tekst om intervention dokumenter
     FicheinterNumberingModules=Intervention nummerressourcer moduler
     TemplatePDFInterventions=Intervention kortet dokumenter modeller
    @@ -1269,12 +1280,13 @@ TemplatePDFContracts=Kontrakter dokumenterer modeller
     FreeLegalTextOnContracts=Fri tekst på kontrakter
     WatermarkOnDraftContractCards=Vandmærke på udkast til kontrakter (ingen hvis tom)
     ##### Members #####
    -MembersSetup=Medlemmer modul opsætning
    +MembersSetup=Opsætning af medlemsmodul
     MemberMainOptions=Standardmuligheder
     AdherentLoginRequired= Administrere et login for hvert medlem
    -AdherentMailRequired=E-Mail kræves til at oprette et nyt medlem
    +AdherentMailRequired=E-Mail kræves for at oprette en ny medlem
     MemberSendInformationByMailByDefault=Checkbox til at sende mail bekræftelse til medlemmerne er slået til som standard
     VisitorCanChooseItsPaymentMode=Besøgende kan vælge mellem tilgængelige betalingsformer
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP-opsætning
     LDAPGlobalParameters=Globale parametre
    @@ -1327,7 +1339,7 @@ LDAPMemberObjectClassListExample=Liste over objectClass definere record attribut
     LDAPMemberTypeDn=Dolibarr medlemmer typer DN
     LDAPMemberTypepDnExample=Komplet DN (ex: ou=medlemstype,dc=eksempel,dc=com)
     LDAPMemberTypeObjectClassList=Liste over objectClass
    -LDAPMemberTypeObjectClassListExample=Liste over objectClass definere record attributter (ex: top, groupOfUniqueNames)
    +LDAPMemberTypeObjectClassListExample=Liste over attributter definerede i objektClass (fx: top, groupOfUniqueNames)
     LDAPUserObjectClassList=Liste over objectClass
     LDAPUserObjectClassListExample=Liste over objectClass definere record attributter (ex: top, inetOrgPerson eller toppen, bruger Active Directory)
     LDAPGroupObjectClassList=Liste over objectClass
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test medlem type synkronisering
     LDAPTestSearch= Test en LDAP-søgning
     LDAPSynchroOK=Synkronisering test vellykket
     LDAPSynchroKO=Mislykket synkronisering test
    -LDAPSynchroKOMayBePermissions=Mislykket synkronisering test. Kontroller, at forbindelse til serveren er konfigureret korrekt og tillader LDAP udpates
    +LDAPSynchroKOMayBePermissions=Fejl ved synkroniseringstest. Kontroller, at forbindelsen til serveren er korrekt konfigureret og tillader LDAP-opdateringer
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=TCP forbindelse til LDAP-serveren vellykket (Server= %s, Port= %s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=TCP forbindelse til LDAP-serveren mislykkedes (Server= %s, Port= %s)
    -LDAPBindOK=Forbind / Autentificer til LDAP-server succesfuld (Server = %s, Port = %s, Admin = %s, Password = %s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=Slut / Authentificate til LDAP-serveren mislykkedes (Server= %s, Port= %s, Admin= %s, Password= %s)
    +LDAPBindOK=Forbind / godkend til LDAP-server succesfuldt (Server = %s, Port = %s, Admin = %s, Password = %s)
    +LDAPBindKO=Forbind / godkend til LDAP-server mislykkedes (Server = %s, Port = %s, Admin = %s, Password = %s)
     LDAPSetupForVersion3=LDAP-server er konfigureret til version 3
     LDAPSetupForVersion2=LDAP-server er konfigureret til version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Eksempel: samaccountname
     LDAPFieldFullname=Fornavn Navn
     LDAPFieldFullnameExample=Eksempel: cn
    -LDAPFieldPasswordNotCrypted=Password ikke krypteret
    -LDAPFieldPasswordCrypted=Kodeord krypteret
    +LDAPFieldPasswordNotCrypted=Adgangskode er ikke krypteret
    +LDAPFieldPasswordCrypted=Adgangskode er krypteret
     LDAPFieldPasswordExample=Eksempel: userPassword
     LDAPFieldCommonNameExample=Eksempel: cn
     LDAPFieldName=Navn
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=Denne side giver dig mulighed for at definere LDAP attribut
     LDAPDescValues=Eksempel værdier er konstrueret til <b>OpenLDAP</b> med følgende lastes skemaer: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Hvis du bruger thoose værdier og OpenLDAP, ændre din LDAP konfigurationsfil <b>slapd.conf</b> at få alle thoose skemaer indlæses.
     ForANonAnonymousAccess=For en autentificeret adgang (for en skriveadgangen for eksempel)
     PerfDolibarr=Prestationsopsætning / optimeringsrapport
    -YouMayFindPerfAdviceHere=På denne side finder du nogle checks eller råd vedrørende performance.
    +YouMayFindPerfAdviceHere=Denne side giver nogle checks eller råd vedrørende performance.
     NotInstalled=Ikke installeret, så din server er ikke bremset af dette.
     ApplicativeCache=Applikationsbuffer
     MemcachedNotAvailable=Ingen applikationsbuffer fundet. Du kan forbedre ydeevnen ved at installere en cache-server Memcached og et modul, der kan bruge denne cache-server. <br> Mere information her <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN"> http: //wiki.dolibarr.org/index.php/Module_MemCached_EN </a>. <br> Bemærk, at en masse web hosting udbyder ikke giver sådan cache server.
     MemcachedModuleAvailableButNotSetup=Modul memcached for applikationscache fundet, men opsætning af modul er ikke komplet.
     MemcachedAvailableAndSetup=Modul memcached dedikeret til brug memcached server er aktiveret.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=Ingen OPCode cache fundet. Måtte du bruge en anden OPCode cache end XCache eller eAccelerator (god), du har muligvis ikke OPCode cache (meget dårlig).
    +NoOPCodeCacheFound=Ingen OPCode cache fundet. Måske bruger du en OPCode cache andet end XCache eller eAccelerator (god), eller måske har du ikke OPCode cache (meget dårlig).
     HTTPCacheStaticResources=HTTP-cache for statiske ressourcer (css, img, javascript)
     FilesOfTypeCached=Filer af typen %s caches af HTTP-serveren
     FilesOfTypeNotCached=Filer af typen %s caches ikke af HTTP-serveren
     FilesOfTypeCompressed=Filer af typen %s komprimeres af HTTP-serveren
     FilesOfTypeNotCompressed=Filer af typen %s komprimeres ikke af HTTP-serveren
     CacheByServer=Cache af server
    -CacheByServerDesc=For eksempel med Apache-direktivet "ExpiresByType image / gif A2592000"
    +CacheByServerDesc=For eksempel ved hjælp af Apache-direktivet "ExpiresByType image / gif A2592000"
     CacheByClient=Cache via browser
     CompressionOfResources=Kompression af HTTP-reaktioner
    -CompressionOfResourcesDesc=For eksempel ved brug af Apache-direktivet "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For eksempel ved hjælp af Apache-direktivet "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=En sådan automatisk detektering er ikke mulig med de aktuelle browsere
    -DefaultValuesDesc=Du kan definere / tvinge her standardværdien, du vil have, når du opretter en ny post, og / eller defaut filtre eller sorteringsrækkefølge, når din listeoptagelse.
    -DefaultCreateForm=Standardværdier (på formularer, der skal oprettes)
    +DefaultValuesDesc=Her kan du definere / tvinge den standardværdi, du vil have, når du opretter en ny post, og / eller standardfiltre eller sorteringsrækkefølge, når din liste registreres.
    +DefaultCreateForm=Standardværdier (for at oprette på formularer)
     DefaultSearchFilters=Standard søgefiltre
     DefaultSortOrder=Standard sorteringsordrer
     DefaultFocus=Standardfokusfelter
    +DefaultMandatory=Obligatoriske formularer
     ##### Products #####
     ProductSetup=Opsætning af varemodul
    -ServiceSetup=Services modul opsætning
    +ServiceSetup=Installation af servicemoduler
     ProductServiceSetup=Opsætning af Varer/ydelser-modul
     NumberOfProductShowInSelect=Maks. antal varer i listen med muligheder til varekombinationer (0 = ingen grænse)
    -ViewProductDescInFormAbility=Visualisering af varebeskrivelser i formularerne (ellers som popup-værktøjstip)
    +ViewProductDescInFormAbility=Vis produktbeskrivelser i formularer (ellers som popup-værktøjstip)
     MergePropalProductCard=Aktivér i produkt / tjeneste Vedhæftede filer fanen en mulighed for at fusionere produkt PDF-dokument til forslag PDF azur hvis produkt / tjeneste er i forslaget
    -ViewProductDescInThirdpartyLanguageAbility=Visualisering af varebeskrivelser på tredjeparts sprog
    +ViewProductDescInThirdpartyLanguageAbility=Vis produktbeskrivelser på tredjeparts sprog
     UseSearchToSelectProductTooltip=Også hvis du har et stort antal produkter (> 100 000), kan du øge hastigheden ved at indstille konstant PRODUCT_DONOTSEARCH_ANYWHERE til 1 i Setup-> Other. Søgningen er så begrænset til starten af ​​strengen.
    -UseSearchToSelectProduct=Vent, tryk på en tast, inden du lægger indholdet på produkt kombinationslisten op (Dette kan øge ydeevnen, hvis du har et stort antal produkter, men det er mindre praktisk)
    +UseSearchToSelectProduct=Vent, indtil du trykker på en tast, inden du læser indholdet af produktkombinationslisten (dette kan øge ydeevnen, hvis du har et stort antal produkter, men det er mindre praktisk)
     SetDefaultBarcodeTypeProducts=Standard stregkodetype, der skal bruges til varer
     SetDefaultBarcodeTypeThirdParties=Default stregkode type bruge til tredjemand
     UseUnits=Definer en måleenhed for mængde under bestilling, forslag eller faktura linjer udgave
    @@ -1450,7 +1463,7 @@ ProductCodeChecker= Modul til generering af varekode og kontrol (vare eller ydel
     ProductOtherConf= Vare/ydelse-konfiguration
     IsNotADir=er ikke en mappe!
     ##### Syslog #####
    -SyslogSetup=Syslog modul opsætning
    +SyslogSetup=Log-modul opsætning
     SyslogOutput=Log output
     SyslogFacility=Facility
     SyslogLevel=Niveau
    @@ -1462,10 +1475,10 @@ CompressSyslogs=Komprimering og backup af fejlfindingslogfiler (genereret af mod
     SyslogFileNumberOfSaves=Log backups
     ConfigureCleaningCronjobToSetFrequencyOfSaves=Konfigurer rengøringsplanlagt job for at indstille log backupfrekvens
     ##### Donations #####
    -DonationsSetup=Donation modul opsætning
    +DonationsSetup=Indstilling af donationsmodul
     DonationsReceiptModel=Skabelon for donationen modtagelse
     ##### Barcode #####
    -BarcodeSetup=Barcode setup
    +BarcodeSetup=Stregkode opsætning
     PaperFormatModule=Print format modul
     BarcodeEncodeModule=Barcode encoding type
     CodeBarGenerator=Stregkode generator
    @@ -1485,12 +1498,12 @@ BarCodeNumberManager=Manager til automatisk definere stregkode numre
     ##### Prelevements #####
     WithdrawalsSetup=Opsætning af modul Betalingsordrer til "direkte debitering"
     ##### ExternalRSS #####
    -ExternalRSSSetup=Eksterne RSS import setup
    +ExternalRSSSetup=Ekstern import af RSS-import
     NewRSS=Ny RSS Feed
     RSSUrl=RSS-URL
     RSSUrlExample=Et interessant RSS-feed
     ##### Mailing #####
    -MailingSetup=Emailing modul opsætning
    +MailingSetup=Opsætning af EMail-modul
     MailingEMailFrom=Afsender E-mail (Fra) for e-mails sendt med e-mail-modulet
     MailingEMailError=Retur EMail (Fejl-til) for e-mails med fejl
     MailingDelay=Sekunder for at vente efter at sende næste besked
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sender modul opsætning
     SendingsReceiptModel=Afsendelse modtagelsen model
     SendingsNumberingModules=Sendings nummerering moduler
     SendingsAbility=Support forsendelsesark til kundeleverancer
    -NoNeedForDeliveryReceipts=I de fleste tilfælde anvendes skibsark både som ark til kundeleverancer (liste over produkter, der skal sendes) og ark, der er modtaget og underskrevet af kunden. Så produktleverancer kvitteringer er en duplikeret funktion og er sjældent aktiveret.
    +NoNeedForDeliveryReceipts=I de fleste tilfælde anvendes forsendelsesark både som ark til kundeleverancer (liste over produkter, der skal sendes) og ark, der modtages og underskrives af kunden. Kvitteringen for produktleverancer er derfor en duplikeret funktion og aktiveres sjældent.
     FreeLegalTextOnShippings=Fri tekst på forsendelser
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Modul til kvitteringsnumre for varelevering
    @@ -1511,22 +1524,22 @@ DeliveryOrderModel=Model for kvitteringsnumre for varelevering
     DeliveriesOrderAbility=Tilbyd kvitteringer for varelevering
     FreeLegalTextOnDeliveryReceipts=Fri tekst om levering kvitteringer
     ##### FCKeditor #####
    -AdvancedEditor=Avanceret editor
    +AdvancedEditor=Avanceret tekstredigeringsværktøj
     ActivateFCKeditor=Aktivér FCKeditor for:
     FCKeditorForCompany=WYSIWIG oprettelse/redigering af beskrivelseselementer og noter (undtagen varer/ydelser)
     FCKeditorForProduct=WYSIWIG oprettelse/redigering af beskrivelse/noter for varer/ydelser
    -FCKeditorForProductDetails=WYSIWIG oprettelse / udgave af produkter detaljer linjer for alle enheder (forslag, ordrer, fakturaer osv. ..). <font class = "warning"> Advarsel: Brug af denne indstilling til denne sag anbefales ikke alvorligt, da det kan skabe problemer med specialtegn og sideformatering, når du bygger PDF-filer. </font>
    +FCKeditorForProductDetails=WYSIWIG oprettelse / udgave af produkter detaljer linjer for alle enheder (forslag, ordrer, fakturaer osv. ..). <font class="warning">Advarsel: Aktivering af denne indstilling anbefales ikke, da det kan skabe problemer med specialtegn og sideformatering, når du bygger PDF-filer.</font>
     FCKeditorForMailing= WYSIWIG oprettelsen / udgave af postforsendelser
     FCKeditorForUserSignature=WYSIWIG oprettelse / udgave af bruger signatur
     FCKeditorForMail=WYSIWIG oprettelse / udgave for al mail (undtagen Værktøjer-> eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Forbindelsesstyring lykkedes, men databasen ikke ser sig at være et osCommerce database (Key %s blev ikke fundet i tabel %s).
    -OSCommerceTestOk=Forbindelse til server ' %s' på database' %s' med brugeren ' %s' succes.
    -OSCommerceTestKo1=Forbindelse til server ' %s' lykkes men database' %s' kunne ikke være nået.
    +OSCommerceErrorConnectOkButWrongDatabase=Forbindelse lykkedes, men databasen synes ikke at være en OSCommerce-database (Nøgle %s ikke fundet i tabel %s).
    +OSCommerceTestOk=Forbindelse til server '%s' på databasen '%s' med bruger '%s' vellykket.
    +OSCommerceTestKo1=Forbindelse til serveren '%s' lykkedes, men databasen '%s' kunne ikke nås.
     OSCommerceTestKo2=Forbindelse til server ' %s' med brugeren' %s' mislykkedes.
     ##### Stock #####
     StockSetup=Opsætning af lagermodul
    -IfYouUsePointOfSaleCheckModule=Hvis du bruger et Point of Sale-modul (POS-modul, der leveres som standard eller et andet eksternt modul), kan denne opsætning ignoreres af dit Point of Sale-modul. Det meste af salgsmodulerne er designet til at skabe øjeblikkelig en faktura og reducere lager som standard, hvad der er muligheder her. Så hvis du har brug for eller ikke har et lagerfald, når du registrerer et salg fra dit Point of Sale, skal du også kontrollere dit POS-modul oprettet.
    +IfYouUsePointOfSaleCheckModule=Hvis du bruger standardmodulet (POS) som standard eller et eksternt modul, kan denne opsætning ignoreres af dit POS-modul. De fleste POS-moduler er som standard designet til at oprette en faktura med det samme og reducere lager uanset valgmulighederne her. Så hvis du har brug for eller ikke har et lagerfald, når du registrerer et salg fra din POS, skal du også kontrollere din POS-modulopsætning.
     ##### Menu #####
     MenuDeleted=Menu slettet
     Menus=Menuer
    @@ -1548,7 +1561,7 @@ DetailRight=Betingelse for at vise uautoriserede grå menuer
     DetailLangs=Lang filnavn for etiketten kode oversættelse
     DetailUser=Praktikant / Eksterne / Alle
     Target=Mål
    -DetailTarget=Mål for links (_blank toppen åbne et nyt vindue)
    +DetailTarget=Mål for links (_blank top åbner et nyt vindue)
     DetailLevel=Niveau (-1: top menu, 0: header menuen&gt; 0 menu og sub-menuen)
     ModifMenu=Menu ændre
     DeleteMenu=Slet menuen indrejse
    @@ -1556,14 +1569,14 @@ ConfirmDeleteMenu=Er du sikker på, at du vil slette menuindgangen <b> %s </b>?
     FailedToInitializeMenu=Kunne ikke initialisere menuen
     ##### Tax #####
     TaxSetup=Opsætning af modul til skatter/afgifter.
    -OptionVatMode=Mulighed d'exigibilit de TVA
    +OptionVatMode=Moms skyldig
     OptionVATDefault=Standardbasis
     OptionVATDebitOption=Periodiseringsgrundlag
     OptionVatDefaultDesc=Moms skyldes: <br> - Om levering / betaling for varer <br> - Bestemmelser om betalinger for tjenester
     OptionVatDebitOptionDesc=Moms skyldes: <br> - Om levering / betaling for varer <br> - På fakturaen (debet) for tjenesteydelser
     OptionPaymentForProductAndServices=Kontantgrundlag for produkter og tjenesteydelser
     OptionPaymentForProductAndServicesDesc=Moms skyldes: <br> - ved betaling for varer <br> - på betalinger for tjenesteydelser
    -SummaryOfVatExigibilityUsedByDefault=Tid for moms eksigibilitet som standard i henhold til den valgte mulighed:
    +SummaryOfVatExigibilityUsedByDefault=Tid for momsberettigelse som standard i henhold til den valgte mulighed:
     OnDelivery=Om levering
     OnPayment=Om betaling
     OnInvoice=På fakturaen
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Indkøbskonto. kode
     AgendaSetup=Opsætning af modul for begivenheder og tidsplan
     PasswordTogetVCalExport=Nøglen til at tillade eksport link
     PastDelayVCalExport=Må ikke eksportere begivenhed ældre end
    -AGENDA_USE_EVENT_TYPE=Brug begivenhedstyper (styret til menuopsætning -> Ordbøger -> Type agendahændelser)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Brug automatisk denne type begivenhed ved oprettelse af en begivenhed
    -AGENDA_DEFAULT_FILTER_TYPE=Brug automatisk denne type begivenhed i søgefilteret for tidsplansvisning
    -AGENDA_DEFAULT_FILTER_STATUS=Brug automatisk denne type status i søgefilteret for tidsplansvisning
    +AGENDA_USE_EVENT_TYPE=Brug begivenhedstyper (styret i menuopsætning -> Ordbøger -> Type agendahændelser)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Indstil denne standardværdi automatisk for type begivenhed i begivenhedsoprettelsesformular
    +AGENDA_DEFAULT_FILTER_TYPE=Indstil denne type begivenhed automatisk i søgefilter i dagsordblik
    +AGENDA_DEFAULT_FILTER_STATUS=Indstil denne status automatisk for begivenheder i søgefilter i dagsordblik
     AGENDA_DEFAULT_VIEW=Hvilket faneblad, der skal åbnes som standard, når menuen Tidsplan vælges
     AGENDA_REMINDER_EMAIL=Aktivér hændelsespåmindelse <b> via e-mails </b> (påmindelsesindstilling / forsinkelse kan defineres på hver hændelse). Bemærk: Modul <strong> %s </strong> skal være aktiveret og korrekt konfigureret for at få påmindelse sendt med den korrekte frekvens.
    -AGENDA_REMINDER_BROWSER=Aktivér hændelsespåmindelse <b> på brugerens browser </b> (når hændelsesdatoen er nået, kan hver bruger nægte dette fra browserbekræftelsesspørgsmålet)
    +AGENDA_REMINDER_BROWSER=Aktivér hændelsespåmindelse <b> på brugerens browser </ b> (når hændelsesdatoen er nået, kan hver bruger nægte dette fra browserbekræftelsesspørgsmålet)
     AGENDA_REMINDER_BROWSER_SOUND=Aktivér lydmeddelelse
     AGENDA_SHOW_LINKED_OBJECT=Vis linkede objekter i tidsplanvisning
     ##### Clicktodial #####
    -ClickToDialSetup=Klik for at ringe modul opsætning
    +ClickToDialSetup=Opsætning af Klik-for-at-ringe-modulet
     ClickToDialUrlDesc=Url kaldes, når man klikke på telefon billed. I URL kan du bruge tags <br> <b> __ PHONETO __ </b>, der vil blive erstattet med telefonnummeret til den person, der skal ringe <br> <b> __ PHONEFROM __ </b>, der vil blive erstattet med telefonnummeret til opkaldet person (din) <br> <b> __ LOGIN __ </b>, der vil blive erstattet med clicktodial login (defineret på brugerkort) <br> <b> __ PASS __ </b>, der vil blive erstattet med clicktodial adgangskode (defineret på bruger kort).
    -ClickToDialDesc=Dette modul gør det muligt at få telefonnumre klikbare. Et klik på dette ikon vil ringe, gør din telefon til at ringe til telefonnummeret. Dette kan bruges til at ringe til et callcenter-system fra Dolibarr, som f.eks. Kan ringe til telefonnummeret på et SIP-system.
    +ClickToDialDesc=Dette modul gør det muligt at få telefonnumre klikbare. Et klik på dette ikon vil ringe ring dit telefonnummer. Dette kan bruges til at ringe til et callcenter-system fra Dolibarr, som f.eks. Kan ringe til telefonnummeret på et SIP-system.
     ClickToDialUseTelLink=Brug kun et link "tel:" på telefonnumre
    -ClickToDialUseTelLinkDesc=Brug denne metode, hvis dine brugere har en softphone eller en software-grænseflade installeret på samme computer end browseren, og kaldes, når du klikker på et link i din browser, der starter med "tel:". Hvis du har brug for en fuld serverløsning (uden brug af lokal softwareinstallation), skal du indstille dette til "Nej" og udfylde næste felt.
    +ClickToDialUseTelLinkDesc=Brug denne metode, hvis dine brugere har en softphone eller en software-grænseflade installeret på samme computer som browseren, og kaldes, når du klikker på et link i din browser, der starter med "tel:". Hvis du har brug for en fuld serverløsning (uden brug af lokal softwareinstallation), skal du indstille dette til "Nej" og udfylde næste felt.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of salg
    -CashDeskSetup=Cash desk modul opsætning
    +CashDeskSetup=Opsætning af salgsmodul
     CashDeskThirdPartyForSell=Standard generisk tredjepart til brug for salg
     CashDeskBankAccountForSell=Cash konto til brug for sælger
     CashDeskBankAccountForCheque= Konto til at bruge til at modtage betalinger med check
     CashDeskBankAccountForCB= Konto til at bruge til at modtage kontant betaling ved kreditkort
    -CashDeskDoNotDecreaseStock=Deaktiver lagerbeholdningen, når et salg er lavet fra Point of Sale (hvis "nej", lagernedgang er udført for hvert salg lavet fra POS, uanset hvad der er indstillet i modul lager).
    +CashDeskDoNotDecreaseStock=Deaktiver lagerbeholdningen, når et salg er udført fra Point of Sale (hvis "nej", lagernedgang er udført for hvert salg udført fra POS, uanset optionen i modul lager).
     CashDeskIdWareHouse=Force og begrænse lageret til brug for lagernedgang
    -StockDecreaseForPointOfSaleDisabled=Lagernedgang fra Point of Sale deaktiveret
    +StockDecreaseForPointOfSaleDisabled=Lagernedgang fra salgssted deaktiveret
     StockDecreaseForPointOfSaleDisabledbyBatch=Lagernedgang i POS er ikke kompatibel med massehåndtering
    -CashDeskYouDidNotDisableStockDecease=Du har ikke deaktiveret lagernedgang, når du sælger fra Point of Sale. Så et lager er påkrævet.
    +CashDeskYouDidNotDisableStockDecease=Du har ikke deaktiveret lagernedgang, når du sælger fra Point of Sale. Derfor er et lager påkrævet.
     ##### Bookmark #####
    -BookmarkSetup=Bogmærkemodulet setup
    -BookmarkDesc=Dette modul giver dig mulighed for at håndtere bogmærker. Du kan også tilføje genveje til enhver Dolibarr sider eller externale websteder på din venstre menu.
    +BookmarkSetup=Bogmærke modul opsætning
    +BookmarkDesc=Dette modul giver dig mulighed for at styre bogmærker. Du kan også tilføje genveje til Dolibarr-sider eller eksterne websteder på din venstre menu.
     NbOfBoomarkToShow=Maksimalt antal bogmærker til at vise i venstre menu
     ##### WebServices #####
     WebServicesSetup=Webservices modul opsætning
    @@ -1625,7 +1638,7 @@ OnlyActiveElementsAreExposed=Kun elementer fra aktiverede moduler er udsat
     ApiKey=Nøgle til API
     WarningAPIExplorerDisabled=API-udforskeren er blevet deaktiveret. API-explorer er ikke forpligtet til at levere API-tjenester. Det er et værktøj for udvikleren at finde / test REST API'er. Hvis du har brug for dette værktøj, skal du gå i setup af modul API REST for at aktivere det.
     ##### Bank #####
    -BankSetupModule=Bank modul opsætning
    +BankSetupModule=Opsætning af bankmodul
     FreeLegalTextOnChequeReceipts=Fri tekst på check kvitteringer
     BankOrderShow=Vis rækkefølgen af ​​bankkonti for lande, der anvender &quot;detaljeret bank nummer&quot;
     BankOrderGlobal=General
    @@ -1634,15 +1647,15 @@ BankOrderES=Spansk
     BankOrderESDesc=Spansk display for
     ChequeReceiptsNumberingModule=Kontroller kvitterings nummereringsmodul
     ##### Multicompany #####
    -MultiCompanySetup=Multi-selskab modul opsætning
    +MultiCompanySetup=Opsætning af multi-selskabsmodul
     ##### Suppliers #####
    -SuppliersSetup=Leverandør modul opsætning
    -SuppliersCommandModel=Komplet skabelon af prchase-ordre (logo ...)
    +SuppliersSetup=Opsætning af leverandørmodul
    +SuppliersCommandModel=Komplet skabelon for indkøbsordre (logo ...)
     SuppliersInvoiceModel=Fuldstændig skabelon af leverandørfaktura (logo ...)
     SuppliersInvoiceNumberingModel=Leverandør faktura nummerering modeller
     IfSetToYesDontForgetPermission=Hvis du er indstillet til ja, glem ikke at give tilladelser til grupper eller brugere tilladt til anden godkendelse
     ##### GeoIPMaxmind #####
    -GeoIPMaxmindSetup=GeoIP Maxmind modul opsætning
    +GeoIPMaxmindSetup=Opsætning af GeoIP Maxmind-modul
     PathToGeoIPMaxmindCountryDataFile=Sti til fil indeholdende Maxmind ip til oversættelse af land. <br> Eksempler: <br> /usr/local/share/GeoIP/GeoIP.dat <br> /usr/share/GeoIP/GeoIP.dat
     NoteOnPathLocation=Bemærk, at din ip til land datafil skal være inde en mappe din PHP kan læse (Check din PHP open_basedir setup og filsystem tilladelser).
     YouCanDownloadFreeDatFileTo=Du kan downloade en <b>gratis demo version</b> af Maxmind GeoIP land fil på %s.
    @@ -1650,11 +1663,11 @@ YouCanDownloadAdvancedDatFileTo=Du kan også downloade en mere <b>komplet versio
     TestGeoIPResult=Test af en konvertering IP -> land
     ##### Projects #####
     ProjectsNumberingModules=Projekter nummerering modul
    -ProjectsSetup=Project modul opsætning
    +ProjectsSetup=Opsætning af projektmodul
     ProjectsModelModule=Projekt rapport dokument model
     TasksNumberingModules=Opgaver nummereringsmodul
     TaskModelModule=Opgaver rapporterer dokumentmodel
    -UseSearchToSelectProject=Vent på at trykke på en tast, inden du lægger indholdet på projektkombinationslisten (Dette kan øge ydeevnen, hvis du har et stort antal projekter, men det er mindre praktisk)
    +UseSearchToSelectProject=Vent, indtil der trykkes på en tast, inden du læser indholdet på projektkombinationslisten. <br> Dette kan forbedre ydeevnen, hvis du har et stort antal projekter, men det er mindre praktisk.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Regnskabsperioder
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Du kan finde muligheder fo
     ListOfNotificationsPerUser=Liste over meddelelser pr. Bruger *
     ListOfNotificationsPerUserOrContact=Liste over meddelelser pr. Bruger * eller pr. Kontakt **
     ListOfFixedNotifications=Liste over faste meddelelser
    -GoOntoUserCardToAddMore=Gå på fanen "Notifikationer" for en bruger for at tilføje eller fjerne underretninger for brugere
    -GoOntoContactCardToAddMore=Gå på fanen "Notifikationer" fra en tredjepart for at tilføje eller fjerne meddelelser for kontakter / adresser
    +GoOntoUserCardToAddMore=Gå til fanen "Notifikationer" for en bruger for at tilføje eller fjerne underretninger for brugere
    +GoOntoContactCardToAddMore=Gå på fanen "Notifikationer" fra en tredjepart for at tilføje eller fjerne underretninger for kontaktadresser
     Threshold=Grænseværdi
     BackupDumpWizard=Guiden til at opbygge database backup dump fil
     SomethingMakeInstallFromWebNotPossible=Installation af eksternt modul er ikke muligt fra webgrænsefladen af ​​følgende årsag:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Installation af eksternt modul fra app
     ConfFileMustContainCustom=Installation eller opbygning af et eksternt modul fra applikationen skal gemme modulfilerne i mappen <strong> %s </strong>. Hvis du vil have denne mappe behandlet af Dolibarr, skal du konfigurere din <strong> conf / conf.php </strong> for at tilføje de to direktelinjer: <br> <strong> $ dolibarr_main_url_root_alt = '/ custom'; </strong> <br> <strong> $ dolibarr_main_document_root_alt = '%s /custom'; </strong>
     HighlightLinesOnMouseHover=Fremhæv tabel linjer, når musen flytter passerer over
     HighlightLinesColor=Fremhæv farve på linjen, når musen passerer over (hold tom for ingen fremhævning)
    +HighlightLinesChecked=Fremhæv farve på linjen, når den er markeret (hold tom for ingen fremhævning)
     TextTitleColor=Tekstfarve på sidetitel
     LinkColor=Farve af links
     PressF5AfterChangingThis=Tryk på CTRL + F5 på tastaturet eller ryd din browserens cache efter at have ændret denne værdi for at få den effektiv
    @@ -1718,7 +1732,7 @@ PositionIntoComboList=Linjens placering i kombinationslister
     SellTaxRate=Salgsskattesats
     RecuperableOnly=Ja for moms "Ikke opfattet, men genoprettelig" dedikeret til nogle stater i Frankrig. Hold værdi til "Nej" i alle andre tilfælde.
     UrlTrackingDesc=Hvis leverandøren eller transporttjenesten tilbyder en side eller et websted for at kontrollere status for din forsendelse, kan du indtaste det her. Du kan bruge nøglen {TRACKID} til URL-parametre, så systemet vil erstatte det med værdien af ​​sporingsnummerbrugeren, der er indtastet på forsendelseskort.
    -OpportunityPercent=Når du opretter en mulighed, definerer du en anslået mængde projekt / bly. Ifølge muligheden for muligheden kan dette beløb multipliceres med denne sats for at vurdere det globale beløb, som alle dine muligheder kan generere. Værdien er procent (mellem 0 og 100).
    +OpportunityPercent=Når du opretter en bly, definerer du en anslået mængde projekt / bly. Ifølge status for bly kan dette beløb multipliceres med denne sats for at vurdere det globale beløb, som alle dine muligheder kan generere. Værdien er procent (mellem 0 og 100).
     TemplateForElement=Denne skabelon rekord er dedikeret til hvilket element
     TypeOfTemplate=Type skabelon
     TemplateIsVisibleByOwnerOnly=Skabelon er kun synlig for ejeren
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=Du bruger den seneste stabile version
     TitleExampleForMajorRelease=Eksempel på besked, du kan bruge til at annoncere denne store udgivelse (brug det gratis at bruge det på dine websteder)
     TitleExampleForMaintenanceRelease=Eksempel på besked, du kan bruge til at annoncere denne vedligeholdelsesudgivelse (lad det være gratis at bruge det på dine websteder)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s er tilgængelig. Version %s er en stor udgivelse med mange nye funktioner til både brugere og udviklere. Du kan downloade det fra downloadområdet på https://www.dolibarr.org portal (underkatalog Stable versioner). Du kan læse <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> for en komplet liste over ændringer.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s er tilgængelig. Version %s er en vedligeholdelsesversion, så den indeholder kun fejlrettelser af fejl. Vi anbefaler, at alle bruger en ældre version for at opgradere til denne. Som enhver vedligeholdelsesfrigivelse findes ingen nye funktioner eller ændringer i datastruktur til denne version. Du kan downloade det fra downloadområdet på https://www.dolibarr.org portal (underkatalog Stable versioner). Du kan læse <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> for en komplet liste over ændringer.
    -MultiPriceRuleDesc=Når valgmuligheden "Flere prisniveauer pr. Produkt / service" er tændt, kan du definere forskellige priser (et pr. Prisniveau) for hvert produkt. For at spare tid, kan du indtaste her regel for at få prisen for hvert niveau autokalculeret i henhold til prisen på første niveau, så du skal kun indtaste prisen for første niveau på hvert produkt. Denne side er her for at spare dig tid og kan kun være nyttig, hvis dine priser for hver leve er i forhold til første niveau. Du kan ignorere denne side i de fleste tilfælde.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s er tilgængelig. Version %s er en vedligeholdelsesversion, så den indeholder kun fejlrettelser af fejl. Vi anbefaler, at alle bruger en ældre version for at opgradere til denne. Som enhver vedligeholdelsesfrigivelse findes ingen nye funktioner eller datastrukturændringer i denne version. Du kan downloade det fra downloadområdet på https://www.dolibarr.org portal (underkatalog Stable versioner). Du kan læse <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> for en komplet liste over ændringer.
    +MultiPriceRuleDesc=Når valgmuligheden "Flere prisniveauer per produkt / service" er aktiveret, kan du definere forskellige priser (en per prisniveau) for hvert produkt. For at spare tid, kan du her indtaste en regel for at få en pris for hvert niveau autokalculeret i henhold til prisen på første niveau, så du skal kun angive en pris for første niveau på hvert produkt. Denne side er her for at spare dig tid og kan kun være nyttig, hvis dine priser for hvert niveau er i forhold til første niveau. Du kan ignorere denne side i de fleste tilfælde.
     ModelModulesProduct=Skabeloner til produktdokumenter
    -ToGenerateCodeDefineAutomaticRuleFirst=For at kunne generere automatisk koder skal du først definere en manager til automatisk definere stregkode nummer.
    +ToGenerateCodeDefineAutomaticRuleFirst=For at kunne generere koder automatisk skal du først definere en manager til automatisk definere stregkode nummer.
     SeeSubstitutionVars=Se * note for liste over mulige substitutionsvariabler
     SeeChangeLog=Se ChangeLog-fil (kun engelsk)
     AllPublishers=Alle udgivere
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Tilføj andre sider eller tjenester
     AddModels=Tilføj dokument eller nummereringsskabeloner
     AddSubstitutions=Tilføj nøglesubstitutioner
     DetectionNotPossible=Detektion er ikke muligt
    -UrlToGetKeyToUseAPIs=Url for at få token til at bruge API (en gang token er blevet modtaget, gemmes den på databasebrugertabellen og skal angives på hvert API-opkald)
    +UrlToGetKeyToUseAPIs=Url for at få token til at bruge API (når token er blevet modtaget, gemmes den i databasens brugertabel og skal anvendes ved hvert API-opkald)
     ListOfAvailableAPIs=Liste over tilgængelige API'er
     activateModuleDependNotSatisfied=Modul "%s" afhænger af modulet "%s", der mangler, så modulet "%1$s" fungerer muligvis ikke korrekt. Venligst installer modul "%2$s" eller deaktiver modul "%1$s" hvis du vil være sikker fra enhver overraskelse
    -CommandIsNotInsideAllowedCommands=Kommandoen du forsøger at køre er ikke inde i listen over tilladte kommandoer defineret i parameter <strong> $ dolibarr_main_restrict_os_commands </strong> til <strong> conf.php </strong> -filen.
    +CommandIsNotInsideAllowedCommands=Kommandoen du forsøger at køre er ikke på listen over tilladte kommandoer defineret i parameter <strong> $ dolibarr_main_restrict_os_commands </ strong> i filen <strong> conf.php </ strong>.
     LandingPage=Destinationsside
     SamePriceAlsoForSharedCompanies=Hvis du bruger et multimediemodul med valget "Single price", vil prisen også være den samme for alle virksomheder, hvis produkterne deles mellem miljøer
     ModuleEnabledAdminMustCheckRights=Modulet er blevet aktiveret. Tilladelser til aktiverede moduler blev kun givet til admin-brugere. Du kan muligvis give tilladelse til andre brugere eller grupper manuelt, hvis det er nødvendigt.
    -UserHasNoPermissions=Denne bruger har ingen tilladelse defineret
    -TypeCdr=Brug "Ingen", hvis betalingsdatoen er fakturadato plus et delta i dage (delta er feltet "Nb dage") <br> Brug "Ved slutningen af ​​måneden", hvis datoen efter deltaet skal hæves for at nå udgangen af ​​måneden (+ et valgfrit "Offset" i dage) <br> Brug "Nuværende / Næste" for at have betalingsfristen den første Nth af måneden (N er gemt i feltet "Nb dage")
    +UserHasNoPermissions=Denne bruger har ingen tilladelser defineret
    +TypeCdr=Brug "Ingen", hvis betalingsdatoen er faktura dato plus et delta i dage (delta er feltet "%s") <br> Brug "Ved slutningen af ​​måneden", hvis, efter deltaet, skal datoen hæves for at nå frem til slutningen af ​​måneden (+ en valgfri "%s" i dage) <br> Brug "Nuværende / Næste" for at have betalingsfristen den første Nth af måneden efter deltaet (delta er feltet "%s", N er gemt i feltet "%s")
     BaseCurrency=Referencens valuta af virksomheden (gå i setup af firma for at ændre dette)
     WarningNoteModuleInvoiceForFrenchLaw=Dette modul %s er i overensstemmelse med franske love (Loi Finance 2016).
     WarningNoteModulePOSForFrenchLaw=Dette modul %s er i overensstemmelse med franske love (Loi Finance 2016), fordi modul Non Reversible Logs automatisk aktiveres.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Du forsøger at installere modulet %s, der er et eksternt modul. Aktivering af et eksternt modul betyder, at du har tillid til udgiveren af ​​modulet, og du er sikker på at dette modul ikke ændrer din ansøgning adfærd negativt og er i overensstemmelse med lovene i dit land (%s). Hvis modulet medfører en ikke-juridisk funktion, bliver du ansvarlig for brugen af ​​en ikke-lovlig software.
    +WarningInstallationMayBecomeNotCompliantWithLaw=Du forsøger at installere modul %s, der er et eksternt modul. Aktivering af et eksternt modul betyder, at du har tillid til udgiveren af ​​det pågældende modul, og at du er sikker på, at dette modul ikke har negativ indflydelse på din applikations adfærd og er i overensstemmelse med lovene i dit land (%s). Hvis modulet introducerer en ulovlig funktion, bliver du ansvarlig for brugen af ​​ulovlig software.
     MAIN_PDF_MARGIN_LEFT=Venstre margin på PDF
     MAIN_PDF_MARGIN_RIGHT=Højre margin på PDF
     MAIN_PDF_MARGIN_TOP=Top margin på PDF
     MAIN_PDF_MARGIN_BOTTOM=Bundmargen på PDF
    +NothingToSetup=Der er ingen specifik opsætning at gøre for dette modul.
     SetToYesIfGroupIsComputationOfOtherGroups=Indstil dette til ja, hvis denne gruppe er en beregning af andre grupper
    -EnterCalculationRuleIfPreviousFieldIsYes=Indtast beregningsregel hvis tidligere felt blev indstillet til Ja (for eksempel 'CODEGRP1 + CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Indtast beregningsregel, hvis tidligere felt blev sat til Ja (For eksempel 'CODEGRP1 + CODEGRP2')
     SeveralLangugeVariatFound=Flere sprogvarianter fundet
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Fjern specialtegn
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter til ren værdi (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR-kontakt
    -GDPRContactDesc=Hvis du opbevarer data om europæiske virksomheder / borgere, kan du gemme den kontaktperson der er ansvarlig for databeskyttelsesforordningen
    +GDPRContact=Databeskyttelsesansvarlig (DPO, Data Privacy eller GDPR-kontakt)
    +GDPRContactDesc=Hvis du gemmer data om europæiske virksomheder / borgere, kan du gemme den kontaktperson, der er ansvarlig for den generelle databeskyttelsesforordning her
    +HelpOnTooltip=Hjælpetekst til at vise på værktøjstip
    +HelpOnTooltipDesc=Indsæt tekst eller en oversættelsessnøgle her for at teksten skal vises på et værktøjstip, når dette felt vises i en formular
    +YouCanDeleteFileOnServerWith=Du kan slette denne fil på server med kommandolinje: <br> %s
    +ChartLoaded=Kort over konto indlæst
    +SocialNetworkSetup=Opsætning af modul Sociale netværk
    +EnableFeatureFor=Aktivér funktioner til <strong> %s </ strong>
    +VATIsUsedIsOff=Bemærk: Muligheden for at bruge salgsafgift eller moms er blevet indstillet til <strong> Fra </ strong> i menuen %s - %s, så Salgsskat eller moms, der anvendes, vil altid være 0 til salg.
    +SwapSenderAndRecipientOnPDF=Byt afsender og modtageradresse på PDF
    +FeatureSupportedOnTextFieldsOnly=Advarsel, funktion understøttes kun på tekstfelter
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Konfiguration du modul Ressource
     UseSearchToSelectResource=Brug en søgeformular til at vælge en ressource (i stedet for en rullemenu).
     DisabledResourceLinkUser=Deaktiver funktion for at forbinde en ressource til brugere
     DisabledResourceLinkContact=Deaktiver funktion for at forbinde en ressource til kontakter
     ConfirmUnactivation=Bekræft modul reset
    +OnMobileOnly=Kun på lille skærm (smartphone)
    +DisableProspectCustomerType=Deaktiver "Emner + Kunder" tredjeparts type (så tredjepart skal være Emner eller Kunder, men kan ikke begge)
    diff --git a/htdocs/langs/da_DK/companies.lang b/htdocs/langs/da_DK/companies.lang
    index bbf4a493320..91dae5884fe 100644
    --- a/htdocs/langs/da_DK/companies.lang
    +++ b/htdocs/langs/da_DK/companies.lang
    @@ -7,15 +7,15 @@ DeleteContact=Slet en kontakt/adresse
     ConfirmDeleteContact=Er du sikker på, at du vil slette denne kontakt og alle arvede oplysninger?
     MenuNewThirdParty=Ny tredjepart
     MenuNewCustomer=Ny kunde
    -MenuNewProspect=Nyt emne
    +MenuNewProspect=Ny potentiel kunde
     MenuNewSupplier=Ny leverandør
     MenuNewPrivateIndividual=Ny privatperson
    -NewCompany=Nyt selskab (mulighed, kunde, levenrandør)
    -NewThirdParty=Ny tredjepart (mulighed, kunde, levenrandør)
    +NewCompany=Nyt selskab (potentielle kunder, kunde, leverandør)
    +NewThirdParty=Ny tredjepart (potentielle kunder, kunde, leverandør)
     CreateDolibarrThirdPartySupplier=Opret en tredjepart (levenrandør)
     CreateThirdPartyOnly=Opret tredjepart
     CreateThirdPartyAndContact=Opret en tredjepart + en børnekontakt
    -ProspectionArea=Prospektering område
    +ProspectionArea=Prospekteringsområde
     IdThirdParty=Id tredjepart
     IdCompany=CVR
     IdContact=Kontakt-ID
    @@ -25,28 +25,28 @@ ThirdPartyContact=Kontakt for tredjepart
     Company=Firma
     CompanyName=Firmanavn
     AliasNames=Alias ​​navn (kommerciel, varemærke, ...)
    -AliasNameShort=Alias ​​navn
    +AliasNameShort=Alias ​​Navn
     Companies=Selskaber
    -CountryIsInEEC=Landet er inde i Det Europæiske Økonomiske Fællesskab
    -ThirdPartyName=Tredjeparts navn
    +CountryIsInEEC=Landet er inden for Det Europæiske Økonomiske Fællesskab
    +ThirdPartyName=Navn på tredjepart
     ThirdPartyEmail=Tredjeparts email
    -ThirdParty=Tredjepart
    -ThirdParties=Tredjepart
    -ThirdPartyProspects=Emner
    -ThirdPartyProspectsStats=Emner
    +ThirdParty=Tredje part
    +ThirdParties=Tredje partier
    +ThirdPartyProspects=Potentielle kunder
    +ThirdPartyProspectsStats=Potentielle kunder
     ThirdPartyCustomers=Kunder
     ThirdPartyCustomersStats=Kunder
     ThirdPartyCustomersWithIdProf12=Kunder med %s eller %s
     ThirdPartySuppliers=Leverandører
    -ThirdPartyType=Tredjepart type
    +ThirdPartyType=Virksomhedstype
     Individual=Privatperson
    -ToCreateContactWithSameName=Vil automatisk oprette en kontakt / adresse med samme oplysninger end tredjepart under tredjepart. I de fleste tilfælde er det nok, selvom din tredjepart er et fysisk menneske, at skabe en tredjepart alene.
    +ToCreateContactWithSameName=Vil oprette en tredjepart og en tilknyttet kontakt / adresse med samme information som tredjeparten. I de fleste tilfælde er det nok, selvom din tredjepart er en fysisk person, at skabe en tredjepart alene.
     ParentCompany=Moderselskab
     Subsidiaries=Datterselskaber
     ReportByMonth=Rapport pr. Måned
     ReportByCustomers=Rapport af kunde
     ReportByQuarter=Rapport fra kvartal
    -CivilityCode=Høfligt kode
    +CivilityCode=Civility code
     RegisteredOffice=Hjemsted
     Lastname=Efternavn
     Firstname=Fornavn
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=By
     Web=Web
     Poste= Position
    -DefaultLang=Sprog som standard
    -VATIsUsed=Salgsmoms anvendes
    -VATIsUsedWhenSelling=Dette definerer, hvis denne tredjepart indeholder en salgsafgift eller ej, når den foretager en faktura til sine egne kunder
    +DefaultLang=Sprogstandard
    +VATIsUsed=Anvendt moms
    +VATIsUsedWhenSelling=Dette definerer, om denne tredjepart indeholder en salgsafgift eller ej, når den foretager en faktura til sine egne kunder
     VATIsNotUsed=Salgsmoms anvendes ikke
     CopyAddressFromSoc=Fyld adresse med tredjepartsadresse
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Tredjepart er hverken kunde eller leverandør, ingen tilgængelige henvisningsobjekter
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Tredjepart hverken kunde eller leverandør, ingen tilgængelige henvisende objekter
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Tredjepart er hverken kunde eller leverandør, rabatter er ikke tilgængelige
     PaymentBankAccount=Betaling bankkonto
     OverAllProposals=Tilbud
    @@ -258,12 +258,12 @@ ProfId1DZ=RC
     ProfId2DZ=Kunst.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Salgsmoms ID
    +VATIntra=Momsnummer
     VATIntraShort=Skatte ID
     VATIntraSyntaxIsValid=Syntaks er gyldigt
     VATReturn=Moms returnering
    -ProspectCustomer=Emne / kunde
    -Prospect=Emne
    +ProspectCustomer=Status på potentielle kunder / kunde
    +Prospect=Potentiel kunde
     CustomerCard=Customer Card
     Customer=Kunde
     CustomerRelativeDiscount=Relativ kunde rabat
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Denne kunde har en rabat <b>på %s%%</b>
     CompanyHasNoRelativeDiscount=Denne kunde har ingen relativ discount som standard
     HasRelativeDiscountFromSupplier=Du har en standardrabat på <b> %s%% </b> fra denne leverandør
     HasNoRelativeDiscountFromSupplier=Du har ingen standard relativ rabat fra denne leverandør
    -CompanyHasAbsoluteDiscount=Denne kunde har rabat til rådighed (kredit noter eller nedbetalinger) for <b> %s </b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=Denne kunde har rabat til rådighed (kommerciel, nedbetalinger) til <b> %s </ b> %s
    +CompanyHasAbsoluteDiscount=Denne kunde har rabatter til rådighed (kreditnotaer eller nedbetalinger) for <b>%s</b>%s
    +CompanyHasDownPaymentOrCommercialDiscount=Denne kunde har rabat til rådighed (kommercielle, nedbetalinger) til <b> %s </ b> %s
     CompanyHasCreditNote=Denne kunde har stadig kreditnotaer <b>for %s %s</b>
     HasNoAbsoluteDiscountFromSupplier=Du har ingen rabatkredit tilgængelig hos denne leverandør
     HasAbsoluteDiscountFromSupplier=Du har rabatter til rådighed (krediter noter eller forudbetalinger) for <b> %s </b> %s fra denne leverandør
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolutte kunderabatter (givet af dig selv)
     SupplierAbsoluteDiscountAllUsers=Absolutte leverandørrabatter (indtastet af alle brugere)
     SupplierAbsoluteDiscountMy=Absolutte leverandørrabatter (indtastet af dig selv)
     DiscountNone=Ingen
    -Supplier=Leverandør
    +Supplier=Sælger
     AddContact=Opret kontakt
     AddContactAddress=Opret kontakt/adresse
     EditContact=Rediger kontakt
    @@ -304,16 +304,16 @@ DeleteACompany=Slet et selskab
     PersonalInformations=Personoplysninger
     AccountancyCode=Regnskabskonto
     CustomerCode=Kundekode
    -SupplierCode=Leverandør kode
    +SupplierCode=Leverandørkode
     CustomerCodeShort=Kundekode
     SupplierCodeShort=Leverandør kode
     CustomerCodeDesc=Kundekode, unik for alle kunder
     SupplierCodeDesc=Leverandørkode, unik for alle leverandører
    -RequiredIfCustomer=Påkrævet, hvis tredjepart er en kunde eller et emne
    +RequiredIfCustomer=Påkrævet, hvis tredjepart er kunde eller kunde
     RequiredIfSupplier=Påkrævet, hvis tredjepart er en sælger
    -ValidityControledByModule=Gyldighed kontrolleres af modul
    -ThisIsModuleRules=Dette er reglerne for dette modul
    -ProspectToContact=Emne at kontakte
    +ValidityControledByModule=Gyldighedsstyret af modulet
    +ThisIsModuleRules=Regler for dette modul
    +ProspectToContact=Potentiel kunde til kontakt
     CompanyDeleted=Company " %s" slettet fra databasen.
     ListOfContacts=Liste over kontakter/adresser
     ListOfContactsAddresses=Liste over kontakter/adresser
    @@ -333,29 +333,29 @@ NoContactForAnyProposal=Denne kontakt er ikke tilknyttet noget tilbud
     NoContactForAnyContract=Denne kontakt er ikke tilknyttet nogen kontrakt
     NoContactForAnyInvoice=Denne kontakt er ikke tilknyttet nogen faktura
     NewContact=Ny kontakt
    -NewContactAddress=Ny kontakt/adresse
    +NewContactAddress=Ny kontakt / adresse
     MyContacts=Mine kontakter
     Capital=Egenkapital
     CapitalOf=Egenkapital på %s
     EditCompany=Rediger virksomhed
    -ThisUserIsNot=Denne bruger er ikke en kunde, kunde eller leverandør
    +ThisUserIsNot=Denne bruger er ikke en potentiel kunde, kunde eller leverandør
     VATIntraCheck=Kontrollere
    -VATIntraCheckDesc=<b>Linket %s</b> tillader at anmode Den Europæiske moms Kontrolprogram service. En ekstern adgang til internettet fra server er påkrævet til denne tjeneste for at arbejde.
    +VATIntraCheckDesc=Linket <b> %s </b> bruger den europæiske momscheckertjeneste (VIES). En ekstern internetadgang fra serveren er nødvendig for at denne service skal fungere.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Tjek momsen for det indre marked på Europa-Kommissionens hjemmeside
    -VATIntraManualCheck=Du kan også kontrollere manuelt fra europæisk hjemmeside <a href="%s" target="_blank">%s</a>
    -ErrorVATCheckMS_UNAVAILABLE=Check ikke mulig. Check-tjenesten er ikke fastsat af medlemslandet ( %s).
    -NorProspectNorCustomer=Hverken emne eller kunde
    -JuridicalStatus=Selskabsform
    +VATIntraCheckableOnEUSite=Kontroller moms inden for Fællesskabet på Kommissionens websted
    +VATIntraManualCheck=Du kan også tjekke manuelt på Europa-Kommissionens websted <a href="%s" target="_blank"> %s </a>
    +ErrorVATCheckMS_UNAVAILABLE=Kontrol er ikke muligt. Denne service leveres ikke af medlemsstaten (%s).
    +NorProspectNorCustomer=Ikke potentiel kunde eller kunde
    +JuridicalStatus=Juridisk enhedstype
     Staff=Personale
     ProspectLevelShort=Potentiale
    -ProspectLevel=Emne potentiale
    +ProspectLevel=Kundepotentiale
     ContactPrivate=Privat
     ContactPublic=Delt
     ContactVisibility=Synlighed
     ContactOthers=Andre
     OthersNotLinkedToThirdParty=Andre, som ikke er knyttet til en tredjepart
    -ProspectStatus=Emne status
    +ProspectStatus=Status på potentielle kunde
     PL_NONE=Ingen
     PL_UNKNOWN=Ukendt
     PL_LOW=Lav
    @@ -381,18 +381,18 @@ ChangeNeverContacted=Ændre status til 'Aldrig kontaktet'
     ChangeToContact=Skift status til 'Skal Kontaktes'
     ChangeContactInProcess=Ændre status til 'Kontakt i gang'
     ChangeContactDone=Ændre status til 'Er kontaktet'
    -ProspectsByStatus=Emne ved status
    +ProspectsByStatus=Potentielle kunder efter status
     NoParentCompany=Ingen
     ExportCardToFormat=Eksporter kort til format
     ContactNotLinkedToCompany=Kontakt ikke knyttet til nogen tredjepart
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=Ingen Dolibarr adgang
    -ExportDataset_company_1=Tredjeparter (Virksomheder / fonde / fysiske personer) og opsætning
    -ExportDataset_company_2=Kontakter og egenskaber
    -ImportDataset_company_1=Tredjeparter (Virksomheder / fonde / fysiske personer) og opsætning
    -ImportDataset_company_2=Kontakter / Adresser (fra tredjeparter eller ej) og attributter
    -ImportDataset_company_3=Bankregnskaber for tredjeparter
    -ImportDataset_company_4=Tredjeparter / Salgspersoner (Tildel salgsrepræsentanters brugere til virksomheder)
    +ExportDataset_company_1=Tredjeparter (virksomheder / fonde / fysiske personer) og deres egenskaber
    +ExportDataset_company_2=Kontakter og deres egenskaber
    +ImportDataset_company_1=Tredjeparter (virksomheder / fonde / fysiske personer) og deres egenskaber
    +ImportDataset_company_2=Kontakter / Adresser og attributter
    +ImportDataset_company_3=Tredjeparts bankregnskaber
    +ImportDataset_company_4=Tredjeparter - salgsrepræsentanter (tildele selskaber / brugere til virksomheder)
     PriceLevel=Prisniveau
     DeliveryAddress=Leveringsadresse
     AddAddress=Tilføj adresse
    @@ -402,16 +402,16 @@ DeleteFile=Slet fil
     ConfirmDeleteFile=Er du sikker på du vil slette denne fil?
     AllocateCommercial=Tildelt til en salgsrepræsentant
     Organization=Organisationen
    -FiscalYearInformation=Oplysninger om regnskabssår
    +FiscalYearInformation=Skatteår
     FiscalMonthStart=Første måned i regnskabsåret
    -YouMustAssignUserMailFirst=Du skal først oprette e-mail til denne bruger for at kunne tilføje e-mail-meddelelser til ham.
    +YouMustAssignUserMailFirst=Du skal oprette en email til denne bruger, før du kan tilføje en e-mail-besked.
     YouMustCreateContactFirst=For at kunne tilføje e-mail-meddelelser skal du først definere kontakter med gyldige e-mails til tredjepart
     ListSuppliersShort=Liste over leverandører
    -ListProspectsShort=Liste over emner
    +ListProspectsShort=Liste over potentielle kunder
     ListCustomersShort=Liste over kunder
    -ThirdPartiesArea=Tredjeparter og kontakter
    -LastModifiedThirdParties=Seneste %s ændrede tredjeparter
    -UniqueThirdParties=Unikke tredjeparter i alt
    +ThirdPartiesArea=Tredjeparter / Kontakter
    +LastModifiedThirdParties=Sidste %s modificerede tredjeparter
    +UniqueThirdParties=Samlet antal tredjeparter
     InActivity=Åben
     ActivityCeased=Lukket
     ThirdPartyIsClosed=Tredjepart er lukket
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Udestående faktura i øjeblikket
     OutstandingBill=Maks. for udstående faktura
     OutstandingBillReached=Maks. for udestående regning nået
     OrderMinAmount=Minimumsbeløb for ordre
    -MonkeyNumRefModelDesc=Returner nummer med format %syymm-nnnn for kundekode og %syymm-nnnn for leverandør kode hvor det er år, mm er måned og nnnn er en sekvens uden pause og ingen tilbagevenden til 0.
    +MonkeyNumRefModelDesc=Ret et nummer med formatet %syymm-nnnn til kundekode og %syymm-nnnn for leverandørkoden, hvor du er år, mm er måned og nnnn er en sekvens uden pause og ingen tilbagevenden til 0.
     LeopardNumRefModelDesc=Kunde / leverandør-koden er ledig. Denne kode kan til enhver tid ændres.
     ManagingDirectors=Leder(e) navne (CEO, direktør, chef...)
     MergeOriginThirdparty=Duplicate tredjepart (tredjepart, du vil slette)
     MergeThirdparties=Flet tredjeparter
    -ConfirmMergeThirdparties=Er du sikker på, at du vil fusionere denne tredjepart i den nuværende? Alle linkede objekter (fakturaer, ordrer, ...) vil blive flyttet til den aktuelle tredjepart, og tredjepartet vil blive slettet.
    +ConfirmMergeThirdparties=Er du sikker på, at du vil fusionere denne tredjepart i den nuværende? Alle linkede objekter (fakturaer, ordrer, ...) flyttes til den aktuelle tredjepart, og tredjepart vil blive slettet.
     ThirdpartiesMergeSuccess=Tredjeparter er blevet fusioneret
     SaleRepresentativeLogin=Login af salgsrepræsentant
     SaleRepresentativeFirstname=Fornavn på salgsrepræsentant
     SaleRepresentativeLastname=Efternavn på salgsrepræsentant
     ErrorThirdpartiesMerge=Der opstod en fejl ved sletning af tredjeparter. Kontroller loggen. Ændringer er blevet vendt tilbage.
    -NewCustomerSupplierCodeProposed=Ny kunde- eller sælgerkode foreslået på to eksemplarer
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/da_DK/errors.lang b/htdocs/langs/da_DK/errors.lang
    index 3278c73c5f9..e83b590ecaa 100644
    --- a/htdocs/langs/da_DK/errors.lang
    +++ b/htdocs/langs/da_DK/errors.lang
    @@ -32,9 +32,9 @@ ErrorBarCodeRequired=Bar code required
     ErrorCustomerCodeAlreadyUsed=Kundekoden anvendes allerede
     ErrorBarCodeAlreadyUsed=Bar code already used
     ErrorPrefixRequired=Prefix kræves
    -ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
    -ErrorSupplierCodeRequired=Vendor code required
    -ErrorSupplierCodeAlreadyUsed=Vendor code already used
    +ErrorBadSupplierCodeSyntax=Dårlig syntax for leverandør kode
    +ErrorSupplierCodeRequired=Leverandørkode kræves
    +ErrorSupplierCodeAlreadyUsed=Leverandørkode allerede brugt
     ErrorBadParameters=Bad parametre
     ErrorBadValueForParameter=Wrong value '%s' for parameter '%s'
     ErrorBadImageFormat=Image file has not a supported format (Your PHP does not support functions to convert images of this format)
    @@ -42,12 +42,12 @@ ErrorBadDateFormat=Værdi '%s' har forkert datoformat
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Det lykkedes ikke at skrive i mappen %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=Fundet forkerte e-mail-syntaks for %s linjer i filen (f.eks line %s med email= %s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=Bruger kan ikke slettes. Måske er det forbundet med Dolibarr enheder.
     ErrorFieldsRequired=Nogle krævede felter ikke var fyldt.
    -ErrorSubjectIsRequired=The email topic is required
    +ErrorSubjectIsRequired=Emne er påkrævet
     ErrorFailedToCreateDir=Det lykkedes ikke at oprette en mappe. Kontroller, at web-serveren bruger har tilladelse til at skrive i Dolibarr dokumenter bibliotek. Hvis parameter <b>safe_mode</b> er aktiveret på dette PHP, kontrollere, at Dolibarr php filer ejer til web-serveren bruger (eller gruppe).
     ErrorNoMailDefinedForThisUser=Ingen e-mail defineret for denne bruger
    -ErrorFeatureNeedJavascript=Denne funktion skal have Javascript skal aktiveres for at arbejde. Ændre dette i opsætningen - displayet.
    +ErrorFeatureNeedJavascript=Denne funktion kræver, at javascript aktiveres for at fungere. Skift dette i setup - display.
     ErrorTopMenuMustHaveAParentWithId0=En menu af type 'Top' kan ikke have en forælder menuen. Sæt 0 i moderselskabet menu eller vælge en menu af typen »Venstre«.
     ErrorLeftMenuMustHaveAParentId=En menu af typen »Venstre« skal have en forælder id.
     ErrorFileNotFound=Filen blev ikke fundet (Forkert sti, forkerte tilladelser eller adgang nægtet ved openbasedir parameter)
    @@ -65,44 +65,46 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=<b>Felt %s</b> må ikke indeholder specialtegn.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=Feltet <b> %s </ b> må ikke indeholde specialtegn.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=Feltet <b> %s </ b> må ikke indeholde specialtegn eller store bogstaver og må ikke indeholde kun tal.
    +ErrorFieldMustHaveXChar=Feltet <b> %s </ b> skal have mindst %s tegn.
     ErrorNoAccountancyModuleLoaded=Intet regnskabsmodul aktiveret
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matchende er ikke komplet.
     ErrorLDAPMakeManualTest=A. LDIF-fil er blevet genereret i mappen %s. Prøv at indlæse den manuelt fra kommandolinjen for at få flere informationer om fejl.
    -ErrorCantSaveADoneUserWithZeroPercentage=Kan ikke gemme en aktion med "vedtægt ikke startes", hvis feltet "udført af" er også fyldt.
    +ErrorCantSaveADoneUserWithZeroPercentage=Kan ikke gemme en handling med "status ikke startet", hvis feltet "udført af" også er udfyldt.
     ErrorRefAlreadyExists=Ref bruges til oprettelse eksisterer allerede.
    -ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorPleaseTypeBankTransactionReportName=Indtast venligst kontoudskriftsnavnet, hvor indgangen skal rapporteres (Format YYYYMM eller YYYYMMDD)
    +ErrorRecordHasChildren=Kunne ikke slette rekord, da det har nogle børneposter.
     ErrorRecordHasAtLeastOneChildOfType=Objektet har mindst et under objekt af type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    -ErrorModuleRequireJavascript=Javascript skal ikke være deaktiveret for at have denne funktion virker. For at aktivere / deaktivere Javascript, gå til menu Home-> Setup-> Display.
    +ErrorRecordIsUsedCantDelete=Kan ikke slette rekord. Den er allerede brugt eller inkluderet i et andet objekt.
    +ErrorModuleRequireJavascript=Javascript må ikke være deaktiveret for at få denne funktion til at fungere. For at aktivere / deaktivere Javascript, skal du gå til menuen Home-> Setup-> Display.
     ErrorPasswordsMustMatch=Begge har skrevet passwords skal matche hinanden
    -ErrorContactEMail=En teknisk fejl opstod. Kontakt venligst administrator til at følge e-mail <b>%s</b> da give fejlkoder <b>%s</b> i din besked, eller endnu bedre ved at tilføje en skærm kopi af denne side.
    +ErrorContactEMail=Der opstod en teknisk fejl. Kontakt administratoren til følgende e-mail <b> %s </ b> og giv fejlkoden <b> %s </ b> i din besked eller tilføj en skærmkopi af denne side.
     ErrorWrongValueForField=Forkert værdi for felt nummer <b>%s</b> (værdi <b>'%s'</b> passer ikke regex regel <b>%s)</b>
     ErrorFieldValueNotIn=Forkert værdi for feltnummer <b>%s</b> (value <b>&quot;%s&quot;</b> er ikke en værdi, der i felt <b>%s</b> af tabel <b>%s)</b>
     ErrorFieldRefNotIn=Forkert værdi for feltnummer <b>%s</b> (værdien <b>'%s'</b> er ikke en <b>%s</b> eksisterende ref)
     ErrorsOnXLines=Fejl på <b>%s</b> kildelinjer
    -ErrorFileIsInfectedWithAVirus=Det antivirusprogram var ikke i stand til at validere filen (filen kan være inficeret med en virus)
    +ErrorFileIsInfectedWithAVirus=Det antivirusprogram var ikke i stand til at bekræfte filen (filen kan være inficeret med en virus)
     ErrorSpecialCharNotAllowedForField=Specialtegn er ikke tilladt for feltet "%s"
     ErrorNumRefModel=En henvisning findes i databasen (%s) og er ikke kompatible med denne nummerering regel. Fjern optage eller omdøbt henvisning til aktivere dette modul.
    -ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    -ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
    +ErrorQtyTooLowForThisSupplier=Mængden er for lav til denne sælger eller ingen pris er defineret på dette produkt for denne leverandør
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
    +ErrorModuleSetupNotComplete=Opsætning af modul ser ud til at være ufuldstændigt. Gå på Home - Setup - Moduler, der skal udfyldes.
     ErrorBadMask=Fejl på maske
     ErrorBadMaskFailedToLocatePosOfSequence=Fejl, maske uden loebenummeret
     ErrorBadMaskBadRazMonth=Fejl, dårlig reset værdi
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Fejl. Vælg mindst én post.
    -ErrorDeleteNotPossibleLineIsConsolidated=Sletning ikke muligt, fordi posten er forbundet med en banktransaktion, der er afstemt
    +ErrorDeleteNotPossibleLineIsConsolidated=Slet ikke muligt, fordi rekord er knyttet til en banktransaktion, der er forliget
     ErrorProdIdAlreadyExist=%s er tildelt til et andet tredjeland
     ErrorFailedToSendPassword=Det lykkedes ikke at sende password
     ErrorFailedToLoadRSSFile=Ikke formår at få RSS-feed. Prøv at tilføje konstant MAIN_SIMPLEXMLLOAD_DEBUG hvis fejlmeddelelser ikke giver nok information.
     ErrorForbidden=Access denied.<br>You try to access to a page, area or feature of a disabled module or without being in an authenticated session or that is not allowed to your user.
     ErrorForbidden2=Tilladelse til dette login kan defineres af din Dolibarr administrator fra menuen %s-> %s.
     ErrorForbidden3=Det ser ud til, at Dolibarr ikke bruges gennem en godkendt session. Se på Dolibarr installationsdokumentation for at vide mere om, hvordan man administrerer godkendelser (htaccess, mod_auth eller andet ...).
    -ErrorNoImagickReadimage=Funktion imagick_readimage er ikke fundet i denne PHP. Intet eksempel kan være til rådighed. Administratorer kan deaktivere denne fane fra menuen Setup - Display.
    +ErrorNoImagickReadimage=Class Imagick findes ikke i dette PHP. Ingen forhåndsvisning kan være tilgængelig. Administratorer kan deaktivere denne fane fra menuen Setup - Display.
     ErrorRecordAlreadyExists=Optag allerede findes
     ErrorLabelAlreadyExists=Denne etiket eksisterer allerede
     ErrorCantReadFile=Kunne ikke læse filen ' %s'
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Bruger med <b>login %s</b> kunne ikke findes.
     ErrorLoginHasNoEmail=Denne bruger har ingen e-mail-adresse. Processen afbrydes.
     ErrorBadValueForCode=Bad værdi former for kode. Prøv igen med en ny værdi ...
     ErrorBothFieldCantBeNegative=Fields %s og %s kan ikke være både negative
    +ErrorFieldCantBeNegativeOnInvoice=Felt <strong> %s </ strong> kan ikke være negativt på denne type faktura. Hvis du vil tilføje en rabat linje, skal du først oprette rabatten med link %s på skærmen og anvende den på faktura. Du kan også bede din administrator om at indstille option FACTURE_ENABLE_NEGATIVE_LINES til 1 for at gendanne gammel adfærd.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Brugerkonto <b>%s</b> anvendes til at udføre web-server har ikke tilladelse til at
     ErrorNoActivatedBarcode=Ingen stregkode aktiveret typen
    @@ -127,7 +130,7 @@ ErrorFailedToAddToMailmanList=Failed to add record %s to Mailman list %s or SPIP
     ErrorFailedToRemoveToMailmanList=Failed to remove record %s to Mailman list %s or SPIP base
     ErrorNewValueCantMatchOldValue=New value can't be equal to old one
     ErrorFailedToValidatePasswordReset=Failed to reinit password. May be the reinit was already done (this link can be used only one time). If not, try to restart the reinit process.
    -ErrorToConnectToMysqlCheckInstance=Connect to database fails. Check database server is running (for example, with mysql/mariadb, you can launch it from command line with 'sudo service mysql start').
    +ErrorToConnectToMysqlCheckInstance=Forbindelse til database fejler. Check databaseserveren kører (for eksempel med mysql / mariadb kan du starte det fra kommandolinjen med 'sudo service mysql start').
     ErrorFailedToAddContact=Failed to add contact
     ErrorDateMustBeBeforeToday=The date cannot be greater than today
     ErrorPaymentModeDefinedToWithoutSetup=A payment mode was set to type %s but setup of module Invoice was not completed to define information to show for this payment mode.
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Kan ikke slette en betaling deles af mindst én faktura med status Betalt
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operatør '%s' mangler operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,13 +174,13 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=Du angiver et anslået beløb for denne potentiel kunde / potentiel kunde. Så du skal også indtaste sin status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=Der er opstået en fejl, når ændringerne gemmes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
    -ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    +ErrorSupplierCountryIsNotDefined=Land for denne sælger er ikke defineret. Rett dette først.
     ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled.
     ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order.
     ErrorStockIsNotEnoughToAddProductOnInvoice=Stock is not enough for product %s to add it into a new invoice.
    @@ -187,7 +190,7 @@ ErrorFailedToLoadLoginFileForMode=Failed to get the login key for mode '%s'.
     ErrorModuleNotFound=File of module was not found.
     ErrorFieldAccountNotDefinedForBankLine=Value for Accounting account not defined for source line id %s (%s)
     ErrorFieldAccountNotDefinedForInvoiceLine=Value for Accounting account not defined for invoice id %s (%s)
    -ErrorFieldAccountNotDefinedForLine=Value for Accounting account not defined for the line (%s)
    +ErrorFieldAccountNotDefinedForLine=Værdi for regnskabskonto ikke defineret for linjen (%s)
     ErrorBankStatementNameMustFollowRegex=Error, bank statement name must follow the following syntax rule %s
     ErrorPhpMailDelivery=Check that you don't use a too high number of recipients and that your email content is not similar to a Spam. Ask also your administrator to check firewall and server logs files for a more complete information.
     ErrorUserNotAssignedToTask=User must be assigned to task to be able to enter time consumed.
    @@ -197,17 +200,18 @@ ErrorFilenameDosNotMatchDolibarrPackageRules=The name of the module package (<st
     ErrorDuplicateTrigger=Error, duplicate trigger name %s. Already loaded from %s.
     ErrorNoWarehouseDefined=Error, no warehouses defined.
     ErrorBadLinkSourceSetButBadValueForRef=The link you use is not valid. A 'source' for payment is defined, but value for 'ref' is not valid.
    -ErrorTooManyErrorsProcessStopped=Too many errors. Process was stopped.
    -ErrorMassValidationNotAllowedWhenStockIncreaseOnAction=Massvalidering er ikke mulig, når indstillingen for at øge/reducere lager er indstillet på denne handling (du skal validere en for en, så du kan definere lageret for at øge / formindske)
    -ErrorObjectMustHaveStatusDraftToBeValidated=Objekt %s skal have status 'Udkast', der skal valideres.
    -ErrorObjectMustHaveLinesToBeValidated=Objekt %s skal have linjer, der skal valideres.
    -ErrorOnlyInvoiceValidatedCanBeSentInMassAction=Kun validerede fakturaer kan sendes ved hjælp af massearrangementet Send via email.
    +ErrorTooManyErrorsProcessStopped=For mange fejl. Processen blev stoppet.
    +ErrorMassValidationNotAllowedWhenStockIncreaseOnAction=Massbekræftelse er ikke mulig, når indstillingen for at øge/reducere lager er indstillet på denne handling (du skal bekræfte en for en, så du kan definere lageret for at øge / formindske)
    +ErrorObjectMustHaveStatusDraftToBeValidated=Objekt %s skal have status 'Udkast', der skal bekræftes.
    +ErrorObjectMustHaveLinesToBeValidated=Objekt %s skal have linjer, der skal bekræftes.
    +ErrorOnlyInvoiceValidatedCanBeSentInMassAction=Kun bekræftede fakturaer kan sendes ved hjælp af massearrangementet Send via email.
     ErrorChooseBetweenFreeEntryOrPredefinedProduct=Du skal vælge, om artiklen er en foruddefineret vare eller ej
     ErrorDiscountLargerThanRemainToPaySplitItBefore=Den rabat, du forsøger at anvende, er større end det der forblive at betale. Opdel rabatten i 2 mindre rabatter før.
     ErrorFileNotFoundWithSharedLink=Filen blev ikke fundet. Det kan være, at dele nøglen blev ændret eller filen blev fjernet for nylig.
     ErrorProductBarCodeAlreadyExists=Produktets stregkode %s eksisterer allerede på en anden produktreference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Bemærk også, at brug af virtuelt produkt med automatisk forøgelse / nedsættelse af underprodukter ikke er mulig, når mindst et underprodukt (eller underprodukt af underprodukter) har brug for et serienummer / parti nummer.
    -ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorDescRequiredForFreeProductLines=Beskrivelse er obligatorisk for linjer med gratis produkt
    +ErrorAPageWithThisNameOrAliasAlreadyExists=Siden / beholderen <strong> %s </ strong> har samme navn eller alternativt alias som den, du forsøger at bruge
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,17 +221,17 @@ WarningBookmarkAlreadyExists=Et bogmærke med denne titel eller dette mål (URL)
     WarningPassIsEmpty=Advarsel, database password er tomt. Det er en sikkerheds hul. Du skal tilføje en adgangskode til din database og ændre din conf.php fil for at afspejle dette.
     WarningConfFileMustBeReadOnly=Advarsel, config fil <b>(htdocs / conf / conf.php)</b> kan din blive overskrevet af den web-server. Dette er en alvorlig sikkerhedsrisiko hul. Rediger tilladelserne til filen skal være i read only mode i operativsystemet bruger bruges af web-serveren. Hvis du bruger Windows og FAT format til din disk, skal du vide, at denne fil systemet ikke lader til at tilføje tilladelser på filen, kan så ikke helt sikker.
     WarningsOnXLines=Advarsler om <b>%s</b> kildelinjer
    -WarningNoDocumentModelActivated=Ingen model, for dokument generation, er blevet aktiveret. En model vil være choosed som standard, indtil du tjekke din modul opsætning.
    -WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=Denne advarsel vil forblive aktiv, så længe denne mappe er til stede (vises kun til admin-brugere).
    +WarningNoDocumentModelActivated=Ingen model til dokumentgenerering er blevet aktiveret. En model vælges som standard, indtil du tjekker din modulopsætning.
    +WarningLockFileDoesNotExists=Advarsel, når installationen er færdig, skal du deaktivere installerings- / migreringsværktøjer ved at tilføje en fil <b> install.lock</b>i mappen <b>%s</b>. Mangler denne fil er det et sikkerhedshul.
    +WarningUntilDirRemoved=Alle sikkerhedsadvarsler (kun synlige for adminbrugere) forbliver aktive, så længe sårbarheden er til stede (eller den konstante MAIN_REMOVE_INSTALL_WARNING er tilføjet i Setup-> Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
    -WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    +WarningClickToDialUserSetupNotComplete=Opsætning af ClickToDial-oplysninger til din bruger er ikke komplet (se fanen ClickToDial på dit brugerkort).
     WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=Feature disabled when display setup is optimized for blind person or text browsers.
     WarningPaymentDateLowerThanInvoiceDate=Betalingsdato (%s) er tidligere end faktura dato (%s) for faktura %s.
     WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Please use more filters or set the constant %s to a higher limit.
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Advarsel, antallet af forskellige modtagere er begrænset til <b> %s </b>, når du bruger bulkhandlingerne på lister
    -WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    +WarningNumberOfRecipientIsRestrictedInMassAction=Advarsel, antallet af forskellige modtagere er begrænset til <b> %s </ b>, når du bruger massehandlingerne på lister
    +WarningDateOfLineMustBeInExpenseReportRange=Advarsel, datoen for linjen ligger ikke inden for udgiftsrapporten
    diff --git a/htdocs/langs/da_DK/interventions.lang b/htdocs/langs/da_DK/interventions.lang
    index 8978ffa6768..550b1da839a 100644
    --- a/htdocs/langs/da_DK/interventions.lang
    +++ b/htdocs/langs/da_DK/interventions.lang
    @@ -3,64 +3,65 @@ Intervention=Intervention
     Interventions=Interventioner
     InterventionCard=Intervention kortet
     NewIntervention=Ny intervention
    -AddIntervention=Create intervention
    +AddIntervention=Opret indgreb
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Liste over interventioner
     ActionsOnFicheInter=Handlinger om intervention
    -LastInterventions=Latest %s interventions
    +LastInterventions=Seneste %s indgreb
     AllInterventions=Alle interventioner
     CreateDraftIntervention=Opret udkast
     InterventionContact=Intervention kontakt
     DeleteIntervention=Slet intervention
    -ValidateIntervention=Valider intervention
    +ValidateIntervention=Bekræft intervention
     ModifyIntervention=Rediger indgreb
     DeleteInterventionLine=Slet intervention linje
    -CloneIntervention=Clone intervention
    -ConfirmDeleteIntervention=Are you sure you want to delete this intervention?
    -ConfirmValidateIntervention=Are you sure you want to validate this intervention under name <b>%s</b>?
    -ConfirmModifyIntervention=Are you sure you want to modify this intervention?
    -ConfirmDeleteInterventionLine=Are you sure you want to delete this intervention line?
    -ConfirmCloneIntervention=Are you sure you want to clone this intervention?
    +CloneIntervention=Klon indgreb
    +ConfirmDeleteIntervention=Er du sikker på, at du vil slette dette indgreb?
    +ConfirmValidateIntervention=Er du sikker på, at du vil bekræfte dette indgreb under navnet <b> %s </b>?
    +ConfirmModifyIntervention=Er du sikker på, at du vil ændre dette indgreb?
    +ConfirmDeleteInterventionLine=Er du sikker på, at du vil slette denne indgrebslinje?
    +ConfirmCloneIntervention=Er du sikker på, at du vil klone dette indgreb?
     NameAndSignatureOfInternalContact=Navn og underskrift for at gribe ind:
     NameAndSignatureOfExternalContact=Navn og underskrift af kunde:
     DocumentModelStandard=Standard dokument model for indgreb
    -InterventionCardsAndInterventionLines=Interventions and lines of interventions
    +InterventionCardsAndInterventionLines=Indgreb og linjer af indgreb
     InterventionClassifyBilled=Klassificere &quot;Billed&quot;
    -InterventionClassifyUnBilled=Classify "Unbilled"
    -InterventionClassifyDone=Classify "Done"
    +InterventionClassifyUnBilled=Klassificer "Ikke faktureret"
    +InterventionClassifyDone=Klassificer "Udført"
     StatusInterInvoiced=Billed
    -SendInterventionRef=Submission of intervention %s
    -SendInterventionByMail=Send intervention by Email
    -InterventionCreatedInDolibarr=Intervention %s created
    -InterventionValidatedInDolibarr=Intervention %s valideret
    -InterventionModifiedInDolibarr=Intervention %s modified
    -InterventionClassifiedBilledInDolibarr=Intervention %s set as billed
    -InterventionClassifiedUnbilledInDolibarr=Intervention %s set as unbilled
    +SendInterventionRef=Indsend indgreb %s
    +SendInterventionByMail=Send indlæg via e-mail
    +InterventionCreatedInDolibarr=Et indgreb %s er oprettet
    +InterventionValidatedInDolibarr=Intervention %s bekræftet
    +InterventionModifiedInDolibarr=Ingreb %s ændret
    +InterventionClassifiedBilledInDolibarr=Indgreb %s indstillet til fakturering
    +InterventionClassifiedUnbilledInDolibarr=Indgreb %s angivet som ikke faktureret
     InterventionSentByEMail=Intervention %s sendt via e-mail
    -InterventionDeletedInDolibarr=Intervention %s deleted
    -InterventionsArea=Interventions area
    -DraftFichinter=Draft interventions
    +InterventionDeletedInDolibarr=Indgreb %s er slettet
    +InterventionsArea=Ingrebsområde
    +DraftFichinter=Udkast til indgreb
     LastModifiedInterventions=Latest %s modified interventions
    -FichinterToProcess=Interventions to process
    +FichinterToProcess=Indgreb til behandling
     ##### Types de contacts #####
     TypeContact_fichinter_external_CUSTOMER=Opfølgning kunde kontakt
     # Modele numérotation
    -PrintProductsOnFichinter=Print also lines of type "product" (not only services) on intervention card
    -PrintProductsOnFichinterDetails=interventions generated from orders
    -UseServicesDurationOnFichinter=Use services duration for interventions generated from orders
    -UseDurationOnFichinter=Hides the duration field for intervention records
    -UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
    -InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    -AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
    +PrintProductsOnFichinter=Udskriv også linjer af typen "produkt" (ikke kun tjenester) på ingreb kortet
    +PrintProductsOnFichinterDetails=Et indgreb genereret af ordrer
    +UseServicesDurationOnFichinter=Brug servicevarighed for indgreb genereret fra ordrer
    +UseDurationOnFichinter=Skjuler varighedsfeltet for indgrebsposter
    +UseDateWithoutHourOnFichinter=Skjuler timer og minutter fra datofeltet for indgrebsoptegnelser
    +InterventionStatistics=Statistikker af indgreb
    +NbOfinterventions=Antal interventionskort
    +NumberOfInterventionsByMonth=Antal interventionskort efter måned (dato for bekræftelse)
    +AmountOfInteventionNotIncludedByDefault=Indgreb beløb er ikke medtaget som standard i overskud (i de fleste tilfælde benyttes tidsskemaer til at tælle tid). Tilføj valgmulighed PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT til 1 i home setup-andre for at inkludere dem.
     ##### Exports #####
    -InterId=Intervention id
    -InterRef=Intervention ref.
    -InterDateCreation=Date creation intervention
    -InterDuration=Duration intervention
    -InterStatus=Status intervention
    -InterNote=Note intervention
    -InterLineId=Line id intervention
    -InterLineDate=Line date intervention
    -InterLineDuration=Line duration intervention
    -InterLineDesc=Line description intervention
    +InterId=Indgrebs id
    +InterRef=Indgreb ref.
    +InterDateCreation=Dato oprettelse for indgreb
    +InterDuration=Varighed af indgreb
    +InterStatus=Status
    +InterNote=Bemærk indgreb
    +InterLineId=Line id indgreb
    +InterLineDate=Linje dato indgreb
    +InterLineDuration=Linje varighed indgreb
    +InterLineDesc=Line beskrivelse af ingreb
    diff --git a/htdocs/langs/da_DK/main.lang b/htdocs/langs/da_DK/main.lang
    index 44f3c22b759..0f464995120 100644
    --- a/htdocs/langs/da_DK/main.lang
    +++ b/htdocs/langs/da_DK/main.lang
    @@ -24,8 +24,8 @@ FormatDateHourSecShort=%m/%d/%Y %I:%M:%S %p
     FormatDateHourTextShort=%d %b %Y %H:%M
     FormatDateHourText=%d %B %Y %H:%M
     DatabaseConnection=Database forbindelse
    -NoTemplateDefined=Ingen skabelon til rådighed for denne e-mail-type
    -AvailableVariables=Tilgængelige substitutionsvariabler
    +NoTemplateDefined=Ingen skabelon til rådighed for denne Email-type
    +AvailableVariables=Tilgængelige erstatnings variabler
     NoTranslation=Ingen oversættelse
     Translation=Oversættelse
     NoRecordFound=Ingen poster fundet
    @@ -34,8 +34,8 @@ NotEnoughDataYet=Ikke nok data
     NoError=Ingen fejl
     Error=Fejl
     Errors=Fejl
    -ErrorFieldRequired=Felt ' %s' er påkrævet
    -ErrorFieldFormat=Felt ' %s' har en dårlig værdi
    +ErrorFieldRequired=Felt '%s' er påkrævet
    +ErrorFieldFormat=Felt '%s' har en forkert værdi
     ErrorFileDoesNotExists=Fil %s ikke eksisterer
     ErrorFailedToOpenFile=Kunne ikke åbne filen %s
     ErrorCanNotCreateDir=Kan ikke oprette dir %s
    @@ -43,68 +43,68 @@ ErrorCanNotReadDir=Kan ikke læse dir %s
     ErrorConstantNotDefined=Parameter %s ikke defineret
     ErrorUnknown=Ukendt fejl
     ErrorSQL=SQL Fejl
    -ErrorLogoFileNotFound=Logo fil ' %s' blev ikke fundet
    -ErrorGoToGlobalSetup=Go to 'Company/Organization' setup to fix this
    -ErrorGoToModuleSetup=Gå til Modul setup at rette dette
    -ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=Det lykkedes ikke at sende e-mails (afsender= %s, receiver= %s)
    -ErrorFileNotUploaded=Filen blev ikke uploadet. Kontroller, at størrelse ikke overstiger den maksimalt tilladte, at den frie plads der er til rådighed på disken, og at der ikke allerede en fil med samme navn i denne mappe.
    +ErrorLogoFileNotFound=Logo fil '%s' blev ikke fundet
    +ErrorGoToGlobalSetup=Gå til 'Firma/Organisation' opsætning for at rette dette
    +ErrorGoToModuleSetup=Gå til modulopsætning for at rette dette
    +ErrorFailedToSendMail=Det lykkedes ikke at sende Email (sender=%s, receiver= %s)
    +ErrorFileNotUploaded=Filen blev ikke uploadet. Kontroller, at størrelse ikke overstiger det maksimalt tilladte, at den frie plads der er til rådighed på disken, og at der ikke allerede en fil med samme navn i denne mappe.
     ErrorInternalErrorDetected=Fejl opdaget
     ErrorWrongHostParameter=Forkert vært parameter
    -ErrorYourCountryIsNotDefined=Deres land er ikke defineret. Gå til Forside-Setup-Edit og post igen form.
    -ErrorRecordIsUsedByChild=Det lykkedes ikke at slette denne rekord. Denne registrering anvendes af mindst på barnet registre.
    +ErrorYourCountryIsNotDefined=Dit land er ikke defineret. Gå til Hjem-Indstillinger-Rediger og send formularen igen.
    +ErrorRecordIsUsedByChild=Kunne ikke slette denne post. Denne post bruges af mindst en børnepost.
     ErrorWrongValue=Forkert værdi
     ErrorWrongValueForParameterX=Forkert værdi for parameter %s
    -ErrorNoRequestInError=Ingen anmodning ved en fejl
    -ErrorServiceUnavailableTryLater=Tjenesten er ikke tilgængelig for øjeblikket. Prøv igen senere.
    +ErrorNoRequestInError=Ingen anmodning ved fejl
    +ErrorServiceUnavailableTryLater=Tjenesten er ikke tilgængelig i øjeblikket. Prøv igen senere.
     ErrorDuplicateField=Dobbelt værdi i et unikt område
    -ErrorSomeErrorWereFoundRollbackIsDone=Nogle fejl blev fundet. Vi rollback ændringer.
    -ErrorConfigParameterNotDefined=<b>Parameter %s</b> er ikke defineret inde Dolibarr konfigurationsfil <b>conf.php.</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Nogle fejl blev fundet. Ændringer er blevet rullet tilbage.
    +ErrorConfigParameterNotDefined=Parameter <b> %s </ b> er ikke defineret i Dolibarr config fil <b> conf.php </ b>.
     ErrorCantLoadUserFromDolibarrDatabase=Kunne ikke finde <b>bruger %s</b> i Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Fejl, der ikke momssatser defineret for land ' %s'.
     ErrorNoSocialContributionForSellerCountry=Fejl, ingen type af skatter/afgifter defineret for landet '%s'.
     ErrorFailedToSaveFile=Fejl, kunne ikke gemme filen.
    -ErrorCannotAddThisParentWarehouse=Du forsøger at tilføje et forældrelager, som allerede er et barn i den nuværende
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=Du forsøger at tilføje et forældrelager, som allerede er et barn af en nuværende
    +MaxNbOfRecordPerPage=Maks antal poster pr. Side
     NotAuthorized=Du har ikke tilladelse til at gøre det.
     SetDate=Indstil dato
     SelectDate=Vælg en dato
     SeeAlso=Se også %s
     SeeHere=Se her
     ClickHere=Klik her
    -Here=Here
    -Apply=ansøge
    +Here=Her
    +Apply=Ansøge
     BackgroundColorByDefault=Standard baggrundsfarve
     FileRenamed=Filen blev omdøbt
     FileGenerated=Filen blev genereret
     FileSaved=Filen er blevet gemt
     FileUploaded=Filen blev uploadet
    -FileTransferComplete=File(s) er blevet uploadet
    -FilesDeleted=Fil (er), der er slettet korrekt
    -FileWasNotUploaded=En fil er valgt for udlæg, men endnu ikke var uploadet. Klik på "Vedhæft fil" for dette.
    -NbOfEntries=Nb af tilmeldinger
    -GoToWikiHelpPage=Læs online hjælp (med adgang til Internettet er nødvendig)
    -GoToHelpPage=Læs hjælpe
    -RecordSaved=Optag gemt
    +FileTransferComplete=Fil (er) uploadet succesfuldt
    +FilesDeleted=Fil(er), der er slettet korrekt
    +FileWasNotUploaded=En fil er valgt som vedhæng, men endnu ikke uploadet. Klik på "Vedhæft fil" for dette.
    +NbOfEntries=Antal indgange
    +GoToWikiHelpPage=Læs online hjælp (Adgang til Internettet er nødvendig)
    +GoToHelpPage=Læs hjælp
    +RecordSaved=Data gemt
     RecordDeleted=Post slettet
     LevelOfFeature=Niveau funktionsliste
     NotDefined=Ikke defineret
    -DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode er sat til <b>%s</b> i konfigurationsfilen <b>conf.php</b>.<br>Dette betyder, at adgangskoden database er ekstern i forhold til Dolibarr, så ændrer dette felt har ingen effekt.
    +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode er sat til <b>%s</b> i konfigurationsfilen <b>conf.php</b>.<br>Dette betyder, at adgangskoden databasen er ekstern i forhold til Dolibarr, så ændrer dette felt har ingen effekt.
     Administrator=Administrator
    -Undefined=Undefined
    +Undefined=Undefineret
     PasswordForgotten=Har du glemt dit kodeord ?
    -NoAccount=No account?
    +NoAccount=Ingen konto?
     SeeAbove=Se ovenfor
     HomeArea=Hjem
     LastConnexion=Seneste forbindelse
     PreviousConnexion=Forrige forbindelse
     PreviousValue=Tidligere værdi
    -ConnectedOnMultiCompany=Connected på enhed
    -ConnectedSince=Connected siden
    -AuthenticationMode=Autentificeringstilstand
    +ConnectedOnMultiCompany=Forbind til enhed
    +ConnectedSince=Forbundet siden
    +AuthenticationMode=Autentificerings tilstand
     RequestedUrl=Angivne URL
    -DatabaseTypeManager=Database type manager
    -RequestLastAccessInError=Seneste database adgang anmodning fejl
    -ReturnCodeLastAccessInError=Vende tilbage kode for seneste database adgang anmodning fejl
    +DatabaseTypeManager=Database type opsætning
    +RequestLastAccessInError=Seneste database adgang forspørelses fejl
    +ReturnCodeLastAccessInError=Retur kode for seneste fejl i database forspørgelse
     InformationLastAccessInError=Information efter seneste database adgang anmodning fejl
     DolibarrHasDetectedError=Dolibarr har opdaget en teknisk fejl
     YouCanSetOptionDolibarrMainProdToZero=Du kan læse logfil eller sæt indstillingen $ dolibarr_main_prod til '0' i din config-fil for at få flere oplysninger.
    @@ -142,6 +142,7 @@ Closed=Lukket
     Closed2=Lukket
     NotClosed=Ikke lukket
     Enabled=Aktiveret
    +Enable=Aktiver
     Deprecated=Underkendt
     Disable=Deaktivere
     Disabled=Deaktiveret
    @@ -153,17 +154,17 @@ Update=Opdatering
     Close=Luk
     CloseBox=Fjern widget fra dit dashboard
     Confirm=Bekræft
    -ConfirmSendCardByMail=Ønsker du virkelig at sende indhold af dette kort pr. Mail til <b> %s </b>?
    +ConfirmSendCardByMail=Vil du virkelig sende indholdet af dette kort pr. Mail til <b> %s </ b>?
     Delete=Slet
     Remove=Fjerne
     Resiliate=Afslutte
     Cancel=Annuller
    -Modify=Gem
    +Modify=Ret
     Edit=Redigér
    -Validate=Validate
    -ValidateAndApprove=Validere og Godkende
    -ToValidate=At validere
    -NotValidated=Ikke valideret
    +Validate=Godkend
    +ValidateAndApprove=Bekræfte og godkende
    +ToValidate=Skal godkendes
    +NotValidated=Ikke godkendt
     Save=Gem
     SaveAs=Gem som
     TestConnection=Test forbindelse
    @@ -182,13 +183,13 @@ SearchOf=Søg
     Valid=Gyldig
     Approve=Godkend
     Disapprove=Afvist
    -ReOpen=Re-Open
    +ReOpen=Genåbne
     Upload=Send fil
     ToLink=Link
     Select=Vælg
     Choose=Vælge
    -Resize=Resize
    -ResizeOrCrop=Resize or Crop
    +Resize=Tilpasse størrelsen
    +ResizeOrCrop=Tilpasse størrelsen eller Beskær
     Recenter=Recenter
     Author=Forfatter
     User=Bruger
    @@ -196,8 +197,8 @@ Users=Brugere
     Group=Gruppe
     Groups=Grupper
     NoUserGroupDefined=Ingen brugergruppe definéret
    -Password=Password
    -PasswordRetype=Gentag dit password
    +Password=Kodeord
    +PasswordRetype=Gentag dit kodeord
     NoteSomeFeaturesAreDisabled=Bemærk, at en masse funktioner / moduler er slået fra i denne demonstration.
     Name=Navn
     Person=Person
    @@ -212,7 +213,7 @@ Code=Kode
     Type=Type
     Language=Sprog
     MultiLanguage=Multi-sprog
    -Note=Note
    +Note=Nota
     Title=Titel
     Label=Label
     RefOrLabel=Ref. eller etiket
    @@ -227,18 +228,18 @@ About=Om
     Number=Antal
     NumberByMonth=Antal efter måned
     AmountByMonth=Beløb efter måned
    -Numero=Numero
    -Limit=Limit
    +Numero=Nummer
    +Limit=Grænseværdi
     Limits=Grænseværdier
     Logout=Log ud
    -NoLogoutProcessWithAuthMode=Ingen applicative afbryd funktion med authentication mode <b>%s</b>
    -Connection=Login
    +NoLogoutProcessWithAuthMode=Ingen applikations afbrydelses funktion med autentificeringstilstand <b>%s</b>
    +Connection=Logind
     Setup=Opsætning
     Alert=Alarm
     MenuWarnings=Indberetninger
     Previous=Forrige
     Next=Næste
    -Cards=Postkort
    +Cards=Kort
     Card=Kort
     Now=Nu
     HourStart=Start time
    @@ -253,25 +254,25 @@ DateCreationShort=Creat. dato
     DateModification=Ændringsdatoen
     DateModificationShort=Modif. dato
     DateLastModification=Seneste ændring dato
    -DateValidation=Validering dato
    +DateValidation=Bekræftelsesdato
     DateClosing=Udløbsdato
     DateDue=Forfaldsdag
     DateValue=Valørdato
     DateValueShort=Valørdato
     DateOperation=Operation dato
    -DateOperationShort=OPE. Dato
    -DateLimit=Limit dato
    +DateOperationShort=Opret. Dato
    +DateLimit=Grænse dato
     DateRequest=Anmodning dato
     DateProcess=Proces dato
     DateBuild=Rapport genereret den
     DatePayment=Dato for betaling
    -DateApprove=Godkendelse af dato
    -DateApprove2=Godkendelse af dato (anden godkendelse)
    +DateApprove=Godkendelsesdato
    +DateApprove2=Godkendelse af dato (Anden godkendelse)
     RegistrationDate=Registrerings dato
     UserCreation=Oprettelsesbruger
     UserModification=Modifikation bruger
    -UserValidation=Valideringsbruger
    -UserCreationShort=Creat. bruger
    +UserValidation=Bruger som bekræftet
    +UserCreationShort=Opret. bruger
     UserModificationShort=Modif. bruger
     UserValidationShort=Gyldig. bruger
     DurationYear=år
    @@ -303,87 +304,87 @@ Yesterday=I går
     Tomorrow=I morgen
     Morning=Morgen
     Afternoon=Eftermiddag
    -Quadri=Quadri
    +Quadri=Kvatal
     MonthOfDay=Måned fra den dato
    -HourShort=H
    -MinuteShort=mn
    +HourShort=T
    +MinuteShort=min
     Rate=Hyppighed
    -CurrencyRate=Valutaomregningskurs
    +CurrencyRate=Valuta omregningskurs
     UseLocalTax=Incl. Moms
     Bytes=Bytes
     KiloBytes=Kilobyte
     MegaBytes=Megabyte
     GigaBytes=Gigabyte
     TeraBytes=Terabyte
    -UserAuthor=Bruger af oprettelsen
    -UserModif=Bruger af sidste opdatering
    +UserAuthor=Oprettet af bruger
    +UserModif=Bruger som sidst opdateret
     b=b.
     Kb=Kb
     Mb=Mb
     Gb=Gb
     Tb=Tb
    -Cut=Skære
    +Cut=Klip
     Copy=Kopier
    -Paste=Paste
    +Paste=Klister
     Default=Standard
     DefaultValue=Standardværdi
    -DefaultValues=Standardværdier
    +DefaultValues=Standardværdier / filtre / sortering
     Price=Pris
    -PriceCurrency=Price (currency)
    +PriceCurrency=Pris (valuta)
     UnitPrice=Enhedspris
     UnitPriceHT=Enhedspris (netto)
    -UnitPriceHTCurrency=Unit price (net) (currency)
    +UnitPriceHTCurrency=Enhedspris (netto) (valuta)
     UnitPriceTTC=Enhedspris
    -PriceU=UP
    -PriceUHT=UP (netto)
    -PriceUHTCurrency=Brutto (beløb)
    +PriceU=Salgspris
    +PriceUHT=Salgspris (netto)
    +PriceUHTCurrency=Salgspris (Valuta)
     PriceUTTC=Brutto(Inkl.Moms)
     Amount=Beløb
     AmountInvoice=Fakturabeløbet
    -AmountInvoiced=Amount invoiced
    +AmountInvoiced=Beløb faktureres
     AmountPayment=Indbetalingsbeløb
     AmountHTShort=Beløb (netto)
     AmountTTCShort=Beløb (inkl. moms)
     AmountHT=Beløb (ekskl. moms)
     AmountTTC=Beløb (inkl. moms)
    -AmountVAT=Beløb moms
    -MulticurrencyAlreadyPaid=Allerede betalt, oprindelig valuta
    -MulticurrencyRemainderToPay=Forblive at betale, original valuta
    +AmountVAT=Momsbeløb
    +MulticurrencyAlreadyPaid=Allerede betalt, original valuta
    +MulticurrencyRemainderToPay=Manglene betaling , original valuta
     MulticurrencyPaymentAmount=Betalingsbeløb, oprindelig valuta
     MulticurrencyAmountHT=Beløb (Ex. Moms), oprindelig valuta 
     MulticurrencyAmountTTC=Beløb (inkl. Moms), oprindelig valuta
    -MulticurrencyAmountVAT=Beløb i Moms, oprindelige valuta
    -AmountLT1=Beløb afgift 2
    -AmountLT2=Beløb afgift 3
    +MulticurrencyAmountVAT=Momsbeløb, oprindelige valuta
    +AmountLT1=Momsbeløb 2
    +AmountLT2=Momsbeløb 3
     AmountLT1ES=Beløb RE
     AmountLT2ES=Beløb IRPF
     AmountTotal=Beløb i alt
     AmountAverage=Gennemsnitligt beløb
    -PriceQtyMinHT=Pris mindsteantal (inkl. moms)
    -PriceQtyMinHTCurrency=Price quantity min. (net of tax) (currency)
    -Percentage=Pourcentage
    +PriceQtyMinHT=Pris mindste antal (Ex. moms)
    +PriceQtyMinHTCurrency=Pris mængde min. (Ex. Moms) (valuta)
    +Percentage=Procent
     Total=I alt
    -SubTotal=I alt
    -TotalHTShort=I alt (netto)
    -TotalHTShortCurrency=I alt (netto)
    -TotalTTCShort=I alt (inkl. moms)
    +SubTotal=Sum
    +TotalHTShort=I alt (Netto)
    +TotalHTShortCurrency=I alt (Netto i valuta)
    +TotalTTCShort=I alt (Inkl. moms)
     TotalHT=I alt (Ex. moms)
    -TotalHTforthispage=Beløb (ekskl. moms) for denne side
    +TotalHTforthispage=Beløb (Ex. Moms) for denne side
     Totalforthispage=I alt for denne side
    -TotalTTC=I alt (inkl. moms)
    -TotalTTCToYourCredit=I alt (inkl. moms) til dit kredit
    +TotalTTC=I alt (Inkl. Moms)
    +TotalTTCToYourCredit=I alt (Inkl. Moms) til din kredit
     TotalVAT=Moms i alt
     TotalVATIN=IGST i alt
    -TotalLT1=Total moms 2
    +TotalLT1=Total Moms 2
     TotalLT2=Total Moms 3
     TotalLT1ES=RE i alt
     TotalLT2ES=IRPF i alt
     TotalLT1IN=I alt CGST
     TotalLT2IN=I alt SGST
    -HT=Ekskl. moms
    -TTC=Inkl. moms
    -INCVATONLY=Inc. moms
    -INCT=Inc. Alle skatter 
    +HT=Ekskl. Moms
    +TTC=Inkl. Moms
    +INCVATONLY=Inkl. Moms
    +INCT=Inkl. Alle skatter 
     VAT=Moms
     VATIN=IGST
     VATs=Salgs Moms
    @@ -397,16 +398,16 @@ LT2ES=IRPF
     LT1IN=CGST
     LT2IN=SGST
     VATRate=Momssats
    -VATCode=Tax Rate code
    -VATNPR=Tax Rate NPR
    -DefaultTaxRate=Standardskattesats
    +VATCode=Moms kode
    +VATNPR=Moms NPR
    +DefaultTaxRate=Standards Moms sats
     Average=Gennemsnit
     Sum=Sum
     Delta=Delta
    -RemainToPay=Remain to pay
    +RemainToPay=Manglende betaling
     Module=Modul/Applikation
    -Modules=Moduler/applikationer
    -Option=Option
    +Modules=Moduler/Applikationer
    +Option=Valgmulighed
     List=Liste
     FullList=Fuldstændig liste
     Statistics=Statistik
    @@ -416,7 +417,7 @@ Favorite=Favorite
     ShortInfo=Info.
     Ref=Ref.
     ExternalRef=Ref. extern
    -RefSupplier=Ref. vendor
    +RefSupplier=Ref. sælger
     RefPayment=Ref. betaling
     CommercialProposalsShort=Tilbud
     Comment=Kommentar
    @@ -427,22 +428,22 @@ ActionsDoneShort=Gjort
     ActionNotApplicable=Ikke relevant
     ActionRunningNotStarted=Ikke startet
     ActionRunningShort=I gang
    -ActionDoneShort=Finished
    -ActionUncomplete=Uafsluttet
    +ActionDoneShort=Færdig
    +ActionUncomplete=Ufuldstændig
     LatestLinkedEvents=Seneste %s linkede begivenheder
    -CompanyFoundation=Virksomhed / organisation
    -Accountant=Accountant
    +CompanyFoundation=Virksomhed/Organisation
    +Accountant=Revisor
     ContactsForCompany=Kontakter for denne tredjepart
     ContactsAddressesForCompany=Kontakter/adresser for denne tredjepart
     AddressesForCompany=Adresse for denne tredjepart
     ActionsOnCompany=Begivenheder for denne tredjepart
    -ActionsOnMember=Begivenheder for dette medlem
    +ActionsOnMember=Begivenheder for denne medlem
     ActionsOnProduct=Begivenheder omkring dette produkt
     NActionsLate=%s sent
    -ToDo=Udestående
    -Completed=Completed
    +ToDo=At gøre
    +Completed=Afsluttet
     Running=I gang
    -RequestAlreadyDone=Anmodning allerede er registreret
    +RequestAlreadyDone=Anmodning allerede registreret
     Filter=Filter
     FilterOnInto=Søgekriterier '<strong> %s </strong>' i felter %s
     RemoveFilter=Fjern filter
    @@ -453,11 +454,11 @@ Generate=Generer
     Duration=Varighed
     TotalDuration=Varighed i alt
     Summary=Resumé
    -DolibarrStateBoard=Database statistik
    -DolibarrWorkBoard=Åbne poster instrumentbræt
    +DolibarrStateBoard=Database Statistik
    +DolibarrWorkBoard=Afventer varer
     NoOpenedElementToProcess=Intet åbnet element til behandling
     Available=Tilgængelig
    -NotYetAvailable=Endnu ikke tilgængelig
    +NotYetAvailable=Ikke tilgængelig endnu 
     NotAvailable=Ikke til rådighed
     Categories=Tags/kategorier
     Category=Tags/kategori
    @@ -468,7 +469,7 @@ and=og
     or=eller
     Other=Anden
     Others=Andre
    -OtherInformations=Andre informationer
    +OtherInformations=Anden information
     Quantity=Antal
     Qty=Qty
     ChangedBy=Ændret af
    @@ -481,12 +482,12 @@ ResultKo=Fejl
     Reporting=Rapportering
     Reportings=Rapportering
     Draft=Udkast
    -Drafts=Drafts
    +Drafts=Udkast
     StatusInterInvoiced=
    -Validated=Valideret
    -Opened=Åbent
    +Validated=Godkendt
    +Opened=Åben
     New=Ny
    -Discount=Discount
    +Discount=Rabat
     Unknown=Ukendt
     General=Almindelige
     Size=Størrelse
    @@ -495,7 +496,7 @@ Received=Modtaget
     Paid=Betales
     Topic=Emne
     ByCompanies=Tredjeparter
    -ByUsers=By user
    +ByUsers=Af bruger
     Links=Links
     Link=Link
     Rejects=Afviser
    @@ -505,19 +506,19 @@ Datas=Oplysningerne
     None=Ingen
     NoneF=Ingen
     NoneOrSeveral=Ingen eller flere
    -Late=Sen
    -LateDesc=Forsinkelse om at definere, om en optegnelse er forsinket eller ikke, afhænger af dit opsætning. Bed din administrator om at ændre forsinkelsen fra menuen Hjem - Opsætning - Advarsler.
    -NoItemLate=No late item
    +Late=Sent
    +LateDesc=Forsinkelsen for at definere, om en post er forsinket eller ej, afhænger af dit opsæt. Bed din administrator om at ændre forsinkelsen fra menuen Hjem - Opsætning - Advarsler.
    +NoItemLate=Ingen forsinket vare
     Photo=Billede
     Photos=Billeder
     AddPhoto=Tilføj billede
     DeletePicture=Billede slette
     ConfirmDeletePicture=Bekræft billed sletning?
     Login=Login
    -LoginEmail=Login (email)
    -LoginOrEmail=Login eller Email
    +LoginEmail=Logind (email)
    +LoginOrEmail=Logind eller Email
     CurrentLogin=Nuværende login
    -EnterLoginDetail=Indtast loginoplysninger
    +EnterLoginDetail=Indtast logind oplysninger
     January=Januar
     February=Februar
     March=Marts
    @@ -530,42 +531,30 @@ September=September
     October=Oktober
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=Maj
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Okt
    -NovemberMin=Nov
    -DecemberMin=Dec
    -Month01=januar
    -Month02=februar
    -Month03=marts
    -Month04=april
    -Month05=maj
    -Month06=juni
    -Month07=juli
    -Month08=august
    -Month09=september
    -Month10=oktober
    -Month11=november
    -Month12=december
    -MonthShort01=jan
    -MonthShort02=feb
    -MonthShort03=mar
    -MonthShort04=apr
    -MonthShort05=maj
    -MonthShort06=jun
    -MonthShort07=jul
    -MonthShort08=aug
    -MonthShort09=sep
    -MonthShort10=okt
    -MonthShort11=nov
    -MonthShort12=dec
    +Month01=Januar
    +Month02=Februar
    +Month03=Marts
    +Month04=April
    +Month05=Maj
    +Month06=Juni
    +Month07=Juli
    +Month08=August
    +Month09=September
    +Month10=Oktober
    +Month11=November
    +Month12=December
    +MonthShort01=Jan
    +MonthShort02=Feb
    +MonthShort03=Mar
    +MonthShort04=Apr
    +MonthShort05=Maj
    +MonthShort06=Jun
    +MonthShort07=Jul
    +MonthShort08=Aug
    +MonthShort09=Sep
    +MonthShort10=Okt
    +MonthShort11=Nov
    +MonthShort12=Dec
     MonthVeryShort01=J
     MonthVeryShort02=F
     MonthVeryShort03=M
    @@ -579,7 +568,7 @@ MonthVeryShort10=O
     MonthVeryShort11=N
     MonthVeryShort12=D
     AttachedFiles=Vedhæftede filer og dokumenter
    -JoinMainDoc=Tilmeld dig hoveddokumentet
    +JoinMainDoc=Tilmeld dig til hoveddokument
     DateFormatYYYYMM=ÅÅÅÅ-MM
     DateFormatYYYYMMDD=ÅÅÅÅ-MM-DD
     DateFormatYYYYMMDDHHMM=ÅÅÅÅ-MM-DD HH: SS
    @@ -593,9 +582,9 @@ Legend=Legend
     Fill=Udfyld
     Reset=Nulstil
     File=Fil
    -Files=Files
    +Files=Filer
     NotAllowed=Ikke tilladt
    -ReadPermissionNotAllowed=Læs tilladelse ikke tilladt
    +ReadPermissionNotAllowed=Læsetilladelse ikke tilladt
     AmountInCurrency=Beløb i %s valuta
     Example=Eksempel
     Examples=Eksempler
    @@ -621,11 +610,11 @@ Warnings=Advarsler
     BuildDoc=Build Dok
     Entity=Enhed
     Entities=Enheder
    -CustomerPreview=Forhåndsvisning for kunde
    -SupplierPreview=Vendor preview
    -ShowCustomerPreview=Vis forhåndsvisning for kunde
    -ShowSupplierPreview=Show vendor preview
    -RefCustomer=Ref. kunde
    +CustomerPreview=Forhåndsvisning til kunde
    +SupplierPreview=Forhandler forhåndsvisning
    +ShowCustomerPreview=Vis forhåndsvisning til kunde
    +ShowSupplierPreview=Vis sælger forhåndsvisning
    +RefCustomer=Ref. Kunde
     Currency=Valuta
     InfoAdmin=Oplysninger til administratorer
     Undo=Fortryd
    @@ -634,21 +623,23 @@ ExpandAll=Udvid alle
     UndoExpandAll=Fortryd udvide
     SeeAll=Se alt
     Reason=Årsag
    -FeatureNotYetSupported=Feature endnu ikke understøttet
    +FeatureNotYetSupported=Funktion endnu ikke understøttet
     CloseWindow=Luk vindue
    -Response=Response
    +Response=Responds
     Priority=Prioritet
    -SendByMail=Send via e-mail
    -MailSentBy=E-mail sendt fra
    -TextUsedInTheMessageBody=Email organ
    -SendAcknowledgementByMail=Send bekræftelses e-mail
    -SendMail=Send email
    -EMail=E-mail
    -NoEMail=Ingen e-mail
    +SendByMail=Send via Email
    +MailSentBy=Email sendt fra
    +TextUsedInTheMessageBody=Email indhold
    +SendAcknowledgementByMail=Send bekræftelses Email
    +SendMail=Send Email
    +EMail=Email
    +NoEMail=Ingen Email
     Email=EMail
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Ingen mobil telefon
     Owner=Ejer
    -FollowingConstantsWillBeSubstituted=Efter konstanterne skal erstatte med tilsvarende værdi.
    +FollowingConstantsWillBeSubstituted=Følgende konstanterne skal erstatte med tilsvarende værdi.
     Refresh=Opdatér
     BackToList=Tilbage til listen
     GoBack=Gå tilbage
    @@ -657,18 +648,18 @@ CanBeModifiedIfKo=Kan ændres, hvis ikke gyldigt
     ValueIsValid=Værdi er gyldigt
     ValueIsNotValid=Værdien er ikke gyldig
     RecordCreatedSuccessfully=Optag oprettet med succes
    -RecordModifiedSuccessfully=Optag modificerede held
    +RecordModifiedSuccessfully=Ændring gennemført med succes
     RecordsModified=%s  optag ændret
     RecordsDeleted=%s post slettet
     AutomaticCode=Automatisk kode
    -FeatureDisabled=Feature handicappede
    +FeatureDisabled=Modul slået fra
     MoveBox=Flyt box
     Offered=Fri
     NotEnoughPermissions=Du har ikke tilladelse til denne handling
     SessionName=Session navn
     Method=Metode
     Receive=Modtag
    -CompleteOrNoMoreReceptionExpected=Komplet eller intet mere forventet
    +CompleteOrNoMoreReceptionExpected=Komplet eller intet mere at forvente
     ExpectedValue=Forventet værdi
     CurrentValue=Nuværende værdi
     PartialWoman=Delvis
    @@ -677,16 +668,16 @@ NeverReceived=Aldrig modtaget
     Canceled=Annulleret
     YouCanChangeValuesForThisListFromDictionarySetup=Du kan ændre værdier for denne liste fra menuen Opsætning - Ordbøger
     YouCanChangeValuesForThisListFrom=Du kan ændre værdierne for denne liste fra menuen %s
    -YouCanSetDefaultValueInModuleSetup=Du kan indstille standard værdi, der bruges, når du opretter en ny post i modul opsætning
    -Color=Color
    -Documents=Linkede filer
    +YouCanSetDefaultValueInModuleSetup=Du kan indstille standardværdien, der bruges, når du opretter en ny post i modulopsætningen
    +Color=Farve
    +Documents=Tilknyttet filer
     Documents2=Dokumenter
    -UploadDisabled=Upload handicappede
    +UploadDisabled=Upload deaktiveret
     MenuAccountancy=Regnskab
     MenuECM=Dokumenter
     MenuAWStats=AWStats
     MenuMembers=Medlemmer
    -MenuAgendaGoogle=Google tidsplan
    +MenuAgendaGoogle=Google dagsorden
     ThisLimitIsDefinedInSetup=Dolibarr grænse (Menu hjemme-setup-sikkerhed): %s Kb, PHP grænse: %s Kb
     NoFileFound=Ingen dokumenter gemt i denne mappe
     CurrentUserLanguage=Valgt sprog
    @@ -694,17 +685,17 @@ CurrentTheme=Nuværende tema
     CurrentMenuManager=Aktuel menuhåndtering
     Browser=Browser
     Layout=Layout
    -Screen=skærm
    -DisabledModules=Handikappede moduler
    +Screen=Skærm
    +DisabledModules=Deaktive moduler
     For=For
    -ForCustomer=For kunder
    +ForCustomer=Til kunder
     Signature=Underskrift
     DateOfSignature=Dato for underskrift
     HidePassword=Vis kommandoen med adgangskode skjulte
     UnHidePassword=Vis reelle kommandoen med klare adgangskode
    -Root=Rot
    -Informations=Informations
    -Page=Page
    +Root=Rod
    +Informations=Information
    +Page=Side
     Notes=Noter
     AddNewLine=Tilføj ny linje
     AddFile=Tilføj fil
    @@ -712,26 +703,28 @@ FreeZone=Ingen registrerede varer/ydelser
     FreeLineOfType=Ikke en foruddefineret indlæg af type
     CloneMainAttributes=Klon formål med sine vigtigste attributter
     PDFMerge=PDF Sammenflet
    -Merge=Merge
    +Merge=Sammeflet
     DocumentModelStandardPDF=Standard PDF-skabelon
     PrintContentArea=Vis side for at udskrive hovedindhold område
     MenuManager=Menuhåndtering
    -WarningYouAreInMaintenanceMode=Advarsel, du er i en vedligeholdelses mode, så kun login <b>%s</b> er tilladt at bruge ansøgningen på i øjeblikket.
    +WarningYouAreInMaintenanceMode=Advarsel, du er i vedligeholdelsestilstand, så kun login <b> %s </ b> har lov til at bruge programmet på dette tidspunkt.
     CoreErrorTitle=Systemfejl
     CoreErrorMessage=Beklager, der opstod en fejl. Kontakt systemadministratoren for at kontrollere logfilerne eller deaktivere $dolibarr_main_prod=1 for at få flere oplysninger.
     CreditCard=Kreditkort
     ValidatePayment=Godkend betaling
    -CreditOrDebitCard=Credit or debit card
    +CreditOrDebitCard=Kredit- eller betalingskort
     FieldsWithAreMandatory=Felter med <b>%s</b> er obligatoriske
    -FieldsWithIsForPublic=Felter med <b>%s</b> er vist på offentlig liste over medlemmer. Hvis du ikke ønsker dette, se "offentlige" boks.
    -AccordingToGeoIPDatabase=(Ifølge GeoIP konvertering)
    -Line=Line
    +FieldsWithIsForPublic=Felter med <b> %s </ b> vises i den offentlige liste over medlemmer. Hvis du ikke vil have det, skal du fjerne markeringen i feltet "offentlig".
    +AccordingToGeoIPDatabase=(ifølge GeoIP konvertering)
    +Line=Linje
     NotSupported=Ikke understøttet
     RequiredField=Obligatorisk felt
     Result=Resultat
     ToTest=Test
    -ValidateBefore=Kortet skal være valideret, før du bruger denne funktion
    +ValidateBefore=Kortet skal være bekræftet, før du bruger denne funktion
     Visibility=Synlighed
    +Totalizable=Totalizable
    +TotalizableDesc=Dette felt kan totaliseres i listen
     Private=Private
     Hidden=Skjulte
     Resources=Ressourcer
    @@ -741,23 +734,25 @@ Before=Før
     After=Efter
     IPAddress=IP-adressen
     Frequency=Frekvens
    -IM=Instant messaging
    +IM=Instant besked
     NewAttribute=Ny attribut
     AttributeCode=Attribut koden
    -URLPhoto=Url af foto / logo
    +URLPhoto=Url af foto/logo
     SetLinkToAnotherThirdParty=Link til en anden tredjepart
     LinkTo=Link til
     LinkToProposal=Link til forslag
     LinkToOrder=Link til ordre
     LinkToInvoice=Link til faktura
    +LinkToTemplateInvoice=Link til skabelonfaktura
     LinkToSupplierOrder=Link til leverandørordre
    -LinkToSupplierProposal=Link til leverandørforslag
    -LinkToSupplierInvoice=Link til leverandørfaktura
    +LinkToSupplierProposal=Link til leverandør forslag
    +LinkToSupplierInvoice=Link til leverandør faktura
     LinkToContract=Link til kontrakt
     LinkToIntervention=Link til intervention
     CreateDraft=Opret udkast
     SetToDraft=Tilbage til udkast
     ClickToEdit=Klik for at redigere
    +ClickToRefresh=Click to refresh
     EditWithEditor=Rediger med CKEditor
     EditWithTextEditor=Rediger med tekst editor
     EditHTMLSource=Rediger HTML-kilde
    @@ -772,20 +767,20 @@ ByDay=Dag
     BySalesRepresentative=Salgsrepræsentant
     LinkedToSpecificUsers=Linked til en bestemt bruger kontakt
     NoResults=Ingen resultater
    -AdminTools=Administrative værktøjer
    +AdminTools=Admin Tools
     SystemTools=Systemværktøjer
     ModulesSystemTools=Modul værktøjer
     Test=Test
     Element=Element
    -NoPhotoYet=Inge billeder til rådighed
    +NoPhotoYet=Ingen billeder til rådighed
     Dashboard=Instrumentbræt
    -MyDashboard=Mit kontrolpanel
    +MyDashboard=Mit Dashboard
     Deductible=Fradragsberettigede
     from=fra
     toward=mod
     Access=Adgang
     SelectAction=Vælg handling
    -SelectTargetUser=Vælg målbruger / medarbejder
    +SelectTargetUser=Vælg målbruger/medarbejder
     HelpCopyToClipboard=Brug Ctrl+C for at kopiere til udklipsholderen
     SaveUploadedFileWithMask=Gem filen på serveren med navnet "<strong>%s</strong>" (ellers "%s")
     OriginFileName=Orginal filnavn
    @@ -794,7 +789,7 @@ SetBankAccount=Definér bankkonto
     AccountCurrency=Konto møntsort
     ViewPrivateNote=Vis noter
     XMoreLines=%s linje(r) skjult
    -ShowMoreLines=Vis flere / færre linjer
    +ShowMoreLines=Vis flere/færre linjer
     PublicUrl=Offentlige URL
     AddBox=Tilføj box
     SelectElementAndClick=Vælg et element og klik på %s
    @@ -802,9 +797,9 @@ PrintFile=Print fil %s
     ShowTransaction=Vis indlæg på bankkonto
     ShowIntervention=Vis indgreb
     ShowContract=Vis kontrakt
    -GoIntoSetupToChangeLogo=Gå ind i Home - Setup - Firma for at skifte logo eller gå ind i Home - Setup - Display for at skjule.
    +GoIntoSetupToChangeLogo=Gå til Home - Setup - Firma for at skifte logo eller gå til Hjem - Setup - Display for at skjule.
     Deny=Nægte
    -Denied=Denied
    +Denied=Nægtet
     ListOf=Liste over %s
     ListOfTemplates=Liste over skabeloner
     Gender=Køn
    @@ -815,34 +810,34 @@ Mandatory=Obligatorisk
     Hello=Hallo
     GoodBye=Farvel
     Sincerely=Med venlig hilsen
    -DeleteLine=Slet linie
    +DeleteLine=Slet linje
     ConfirmDeleteLine=Er du sikker på, at du vil slette denne linje?
    -NoPDFAvailableForDocGenAmongChecked=Der var ikke nogen PDF til dokumentgenerering blandt kontrollerede poster
    -TooManyRecordForMassAction=For mange poster valgt til massehandling. Handlingen er begrænset til en liste over %s rekord.
    +NoPDFAvailableForDocGenAmongChecked=Der var ikke nogen PDF til dokument generering blandt kontrollerede poster
    +TooManyRecordForMassAction=For mange poster valgt til massehandling. Handlingen er begrænset til en liste over %s poster.
     NoRecordSelected=Ingen rekord valgt
     MassFilesArea=Område for filer opbygget af massehandlinger
     ShowTempMassFilesArea=Vis område af filer bygget af massehandlinger
    -ConfirmMassDeletion=Bulk slet bekræftelse
    +ConfirmMassDeletion=Masse slette bekræftelse
     ConfirmMassDeletionQuestion=Er du sikker på, at du vil slette den %s valgte post?
     RelatedObjects=Relaterede objekter
     ClassifyBilled=Klassificere faktureret
    -ClassifyUnbilled=Classify unbilled
    +ClassifyUnbilled=Klassificer Ikke faktureret
     Progress=Fremskridt
     FrontOffice=Forreste kontor
     BackOffice=Back office
     View=Udsigt
    -Export=Export
    +Export=Eksport
     Exports=Eksporter
     ExportFilteredList=Eksporter filtreret liste
     ExportList=Eksportliste
    -ExportOptions=Eksportindstillinger
    +ExportOptions=Eksport indstillinger
     Miscellaneous=Diverse
     Calendar=Kalender
     GroupBy=Gruppér efter
     ViewFlatList=Se flad liste
     RemoveString=Fjern streng '%s'
    -SomeTranslationAreUncomplete=Nogle sprog kan oversættes delvis eller kan indeholde fejl. Hvis du registrerer noget, kan du rette sprogfiler, der registrerer dig til <a href="https://transifex.com/projects/p/dolibarr/" target="_blank"> https://transifex.com/projects/p/ Dolibarr / </a>.
    -DirectDownloadLink=Direkte download link (offentlig / ekstern)
    +SomeTranslationAreUncomplete=Nogle af de sprog, der tilbydes, kan kun oversættes eller måske indeholde fejl. Hjælp venligst med at korrigere dit sprog ved at registrere dig på <a href="https://transifex.com/projects/p/dolibarr/" target="_blank"> https://transifex.com/projects/p/dolibarr/ < / a> at tilføje dine forbedringer.
    +DirectDownloadLink=Direkte download link (offentlig/ekstern)
     DirectDownloadInternalLink=Direkte download link (skal logges og har brug for tilladelser)
     Download=Hent
     DownloadDocument=Hent dokument
    @@ -850,8 +845,8 @@ ActualizeCurrency=Opdater valutakurs
     Fiscalyear=Regnskabsår
     ModuleBuilder=Modulbygger
     SetMultiCurrencyCode=Indstil valuta
    -BulkActions=Bulk handlinger
    -ClickToShowHelp=Klik for at vise værktøjstiphjælp
    +BulkActions=Masse handlinger
    +ClickToShowHelp=Klik for at vise værktøjs tips
     WebSite=Internet side
     WebSites=Websteder
     WebSiteAccounts=Webstedkonti
    @@ -864,13 +859,22 @@ TitleSetToDraft=Gå tilbage til udkast
     ConfirmSetToDraft=Er du sikker på, at du vil gå tilbage til Udkast status?
     ImportId=Import id
     Events=Begivenheder
    -EMailTemplates=E-mail skabeloner
    +EMailTemplates=Email skabeloner
     FileNotShared=Filen er ikke delt til ekstern offentlighed
     Project=Projekt
     Projects=Projekter
    +LeadOrProject=Bly | Projekt
    +LeadsOrProjects=Potentielle kunder | Projekter
    +Lead=At føre
    +Leads=Potentielle kunder
    +ListOpenLeads=Liste åbne ledninger
    +ListOpenProjects=Liste åbne projekter
    +NewLeadOrProject=Ny ledelse eller projekt
     Rights=Tilladelser
    -LineNb=Line no.
    -IncotermLabel=Incoterms
    +LineNb=Linje nr.
    +IncotermLabel=Inkassovilkor
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Mandag
     Tuesday=Tirsdag
    @@ -879,13 +883,13 @@ Thursday=Torsdag
     Friday=Fredag
     Saturday=Lørdag
     Sunday=Søndag
    -MondayMin=Mo
    -TuesdayMin=Tu
    -WednesdayMin=Vi
    -ThursdayMin=Th
    -FridayMin=Fr
    -SaturdayMin=Sa
    -SundayMin=Su
    +MondayMin=Man
    +TuesdayMin=Tir
    +WednesdayMin=Ons
    +ThursdayMin=Tor
    +FridayMin=Fre
    +SaturdayMin=Lør
    +SundayMin=Søn
     Day1=Mandag
     Day2=Tirsdag
     Day3=Onsdag
    @@ -895,13 +899,13 @@ Day6=Lørdag
     Day0=Søndag
     ShortMonday=M
     ShortTuesday=T
    -ShortWednesday=W
    +ShortWednesday=O
     ShortThursday=T
     ShortFriday=F
    -ShortSaturday=S
    +ShortSaturday=L
     ShortSunday=S
    -SelectMailModel=Vælg en e-mail-skabelon
    -SetRef=Sæt ref
    +SelectMailModel=Vælg en Email-skabelon
    +SetRef=Sæt ref.
     Select2ResultFoundUseArrows=Nogle resultater fundet. Brug pilene til at vælge.
     Select2NotFound=Intet resultat fundet
     Select2Enter=Gå ind
    @@ -917,17 +921,17 @@ SearchIntoUsers=Brugere
     SearchIntoProductsOrServices=Produkter eller tjenester
     SearchIntoProjects=Projekter
     SearchIntoTasks=Opgaver
    -SearchIntoCustomerInvoices=Kundefakturaer
    -SearchIntoSupplierInvoices=Leverandørfakturaer
    +SearchIntoCustomerInvoices=Kunde fakturaer
    +SearchIntoSupplierInvoices=Leverandør fakturaer
     SearchIntoCustomerOrders=Kundeordrer
     SearchIntoSupplierOrders=Indkøbsordre
     SearchIntoCustomerProposals=Kundeforslag
    -SearchIntoSupplierProposals=Vendor proposals
    +SearchIntoSupplierProposals=Forhandler forslag
     SearchIntoInterventions=Interventioner
     SearchIntoContracts=Kontrakter
     SearchIntoCustomerShipments=Kundeforsendelser
     SearchIntoExpenseReports=Udgiftsrapporter
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Forlade
     CommentLink=Kommentarer
     NbComments=Antal kommentarer
     CommentPage=Kommentarer plads
    @@ -936,15 +940,16 @@ CommentDeleted=Kommentar slettet
     Everybody=Fælles projekt
     PayedBy=Betalt af
     PayedTo=Betalt til
    -Monthly=Monthly
    -Quarterly=Quarterly
    -Annual=Annual
    -Local=Local
    -Remote=Remote
    -LocalAndRemote=Local and Remote
    -KeyboardShortcut=Keyboard shortcut
    +Monthly=Månedlige
    +Quarterly=Kvartalsvis
    +Annual=Årligt
    +Local=Lokal
    +Remote=Fjern
    +LocalAndRemote=Lokal og Ekstern
    +KeyboardShortcut=Tastaturgenvej
     AssignedTo=Tildelt til
    -Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    -FileSharedViaALink=File shared via a link
    -
    +Deletedraft=Slet udkast
    +ConfirmMassDraftDeletion=Udkast til masse slette bekræftelse
    +FileSharedViaALink=Fil deles via et link
    +SelectAThirdPartyFirst=Vælg en tredjepart først ...
    +YouAreCurrentlyInSandboxMode=Du er i øjeblikket i %s "sandbox" -tilstanden
    diff --git a/htdocs/langs/da_DK/other.lang b/htdocs/langs/da_DK/other.lang
    index 7a7f292814c..12befef61d6 100644
    --- a/htdocs/langs/da_DK/other.lang
    +++ b/htdocs/langs/da_DK/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Sikkerhedskode
     NumberingShort=N °
     Tools=Værktøj
     TMenuTools=Værktøjer
    -ToolsDesc=Alle diverse værktøjer, der ikke er medtaget i andre menuposter, er samlet her. <br> <br> Alle værktøjerne kan nås i menuen til venstre.
    +ToolsDesc=Alle værktøjer, der ikke er inkluderet i andre menupunkter, er grupperet her. <br> Alle værktøjerne er tilgængelige via menuen til venstre.
     Birthday=Fødselsdag
     BirthdayDate=Fødselsdato
     DateToBirth=Dato for fødsel
    @@ -20,10 +20,10 @@ ZipFileGeneratedInto=Zip-fil genereret til <b> %s </ b>.
     DocFileGeneratedInto=Doc-fil genereret til <b> %s </ b>.
     JumpToLogin=Afbrudt. Gå til login side ...
     MessageForm=Besked på online betalingsformular
    -MessageOK=Besked på validerede betaling tilbage side
    +MessageOK=Besked på bekræftede betaling tilbage side
     MessageKO=Besked om annulleret betaling tilbage side
    -ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +ContentOfDirectoryIsNotEmpty=Indholdet af denne mappe er ikke tomt.
    +DeleteAlsoContentRecursively=Check for at slette alt indhold rekursivt
     
     YearOfInvoice=År for faktura dato
     PreviousYearOfInvoice=Tidligere års faktura dato
    @@ -31,38 +31,37 @@ NextYearOfInvoice=Følgende års faktura dato
     DateNextInvoiceBeforeGen=Dato for næste faktura (før generation)
     DateNextInvoiceAfterGen=Dato for næste faktura (efter generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Tilføjet kontakt til intervention
    -Notify_FICHINTER_VALIDATE=Valider intervention
    -Notify_FICHINTER_SENTBYMAIL=Intervention sendt via post
    -Notify_ORDER_VALIDATE=Kundeordre valideret
    +Notify_ORDER_VALIDATE=Kundeordre bekræftet
     Notify_ORDER_SENTBYMAIL=Kundens ordre sendes med posten
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Leverandør orden sendt med posten
     Notify_ORDER_SUPPLIER_VALIDATE=Leverandør ordre registreret
     Notify_ORDER_SUPPLIER_APPROVE=Leverandør for godkendt
     Notify_ORDER_SUPPLIER_REFUSE=Leverandør For nægtes
     Notify_PROPAL_VALIDATE=Tilbud godkendt
    -Notify_PROPAL_CLOSE_SIGNED=Kunde propal lukket underskrevet
    -Notify_PROPAL_CLOSE_REFUSED=Kunde propal lukket nægtet
    +Notify_PROPAL_CLOSE_SIGNED=Kundeforslag er lukket underskrevet
    +Notify_PROPAL_CLOSE_REFUSED=Kundeforslag afsluttet afslået
     Notify_PROPAL_SENTBYMAIL=Tilbud sendt med posten
     Notify_WITHDRAW_TRANSMIT=Transmission tilbagetrækning
     Notify_WITHDRAW_CREDIT=Credit tilbagetrækning
     Notify_WITHDRAW_EMIT=Isue tilbagetrækning
     Notify_COMPANY_CREATE=Tredjeparts oprettet
     Notify_COMPANY_SENTBYMAIL=Mails sendt fra tredjepartskort
    -Notify_BILL_VALIDATE=Valider regningen
    +Notify_BILL_VALIDATE=Bekræft regningen
     Notify_BILL_UNVALIDATE=Kundefaktura ugyldiggjort
    -Notify_BILL_PAYED=Kundens faktura betales
    +Notify_BILL_PAYED=Kundefaktura udbetalt
     Notify_BILL_CANCEL=Kundefaktura aflyst
     Notify_BILL_SENTBYMAIL=Kundens faktura sendes med posten
    -Notify_BILL_SUPPLIER_VALIDATE=Leverandør faktura valideret
    -Notify_BILL_SUPPLIER_PAYED=Leverandør faktura betales
    +Notify_BILL_SUPPLIER_VALIDATE=Leverandør faktura bekræftet
    +Notify_BILL_SUPPLIER_PAYED=Leverandør faktura betalt
     Notify_BILL_SUPPLIER_SENTBYMAIL=Leverandør faktura tilsendt med posten
     Notify_BILL_SUPPLIER_CANCELED=Leverandør faktura annulleret
    -Notify_CONTRACT_VALIDATE=Kontrakt valideret
    -Notify_FICHEINTER_VALIDATE=Intervention valideret
    -Notify_SHIPPING_VALIDATE=Forsendelse valideret
    +Notify_CONTRACT_VALIDATE=Kontrakt bekræftet
    +Notify_FICHEINTER_VALIDATE=Intervention bekræftet
    +Notify_FICHINTER_ADD_CONTACT=Tilføjet kontakt til intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sendt via post
    +Notify_SHIPPING_VALIDATE=Forsendelse bekræftet
     Notify_SHIPPING_SENTBYMAIL=Shipping sendes med posten
    -Notify_MEMBER_VALIDATE=Medlem valideret
    +Notify_MEMBER_VALIDATE=Medlem bekræftet
     Notify_MEMBER_MODIFY=Medlem ændret
     Notify_MEMBER_SUBSCRIPTION=Medlem abonnerer
     Notify_MEMBER_RESILIATE=Medlem afsluttet
    @@ -71,27 +70,31 @@ Notify_PROJECT_CREATE=Projektoprettelse
     Notify_TASK_CREATE=Opgave oprettet
     Notify_TASK_MODIFY=Opgave ændret
     Notify_TASK_DELETE=Opgave slettet
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Se opsætning af modul %s
     NbOfAttachedFiles=Antal vedhæftede filer / dokumenter
     TotalSizeOfAttachedFiles=Samlede størrelse på vedhæftede filer / dokumenter
     MaxSize=Maksimumstørrelse
     AttachANewFile=Vedhæfte en ny fil / dokument
     LinkedObject=Linket objekt
    -NbOfActiveNotifications=Antal meddelelser (nb modtager e-mails)
    +NbOfActiveNotifications=Antal meddelelser (nr. Modtagers e-mails)
     PredefinedMailTest=__(Hej)__\nDette er en testpost sendt til __EMAIL__.\nDe to linjer er adskilt af en vognretur.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hej)__\nDette er en <b> test </ b> mail (ordtesten skal være fed skrift). De to linjer er adskilt af en vognretur. <br> <br> __USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hej)__\n\nHer finder du prisforespørgsel __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hej)__\n\nHer finder du ordren __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hej)__\n\nHer finder du vores ordre __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hej)__\n\nHer finder du fakturaen __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hej)__\n\nHer finder du forsendelsen __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hej)__\n\nHer finder du interventionen __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hej)__\n\nVenligst find vedlagte faktura __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hej)__\n\nVi vil gerne advare dig om, at fakturaen __REF__ tilsyneladende ikke er blevet betalt. Fakturaen er vedlagt som en påmindelse.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hej)__\n\nSe venligst vedhæftet kommercielt forslag __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hej)__\n\nVenligst find vedlagt prisforespørgsel __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hej)__\n\nSe venligst vedhæftet ordre __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hej)__\n\nVenligst find vedlagt vores ordre __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hej)__\n\nVenligst find vedlagte faktura __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hej)__\n\nSe venligst vedhæftet fragt __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hej)__\n\nVenligst find vedhæftet intervention __REF__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hej)__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hej)__\n\n\n__ (Sincerely) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    +PredefinedMailContentLink=Du kan klikke på linket herunder for at foretage din betaling, hvis den ikke allerede er færdig.\n\n%s\n\n
     DemoDesc=Dolibarr er en kompakt ERP / CRM, der understøtter flere forretningsmoduler. En demo, der viser alle moduler, giver ingen mening, da dette scenario aldrig forekommer (flere hundrede tilgængelige). Så flere demo profiler er tilgængelige.
     ChooseYourDemoProfil=Vælg den demoprofil, der passer bedst til dine behov ...
     ChooseYourDemoProfilMore=... eller bygg din egen profil <br> (manuel modulvalg)
    @@ -107,12 +110,12 @@ ValidatedBy=Attesteret af %s
     ClosedBy=Lukket af %s
     CreatedById=Bruger id, der oprettede
     ModifiedById=Bruger id, der lavede den seneste ændring
    -ValidatedById=Bruger id, der er valideret
    +ValidatedById=Bruger id, der er bekræftet
     CanceledById=Bruger id, der annulleret
     ClosedById=Bruger id, der lukket
     CreatedByLogin=Bruger login, der oprettes
     ModifiedByLogin=Bruger login, som lavede den seneste ændring
    -ValidatedByLogin=Bruger login, der valideres
    +ValidatedByLogin=Bruger login, der bekræftes
     CanceledByLogin=Bruger login, der blev annulleret
     ClosedByLogin=Bruger login som lukket
     FileWasRemoved=Fil blev slettet
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Installer eller aktiver GD bibliotek på din PHP installatio
     ProfIdShortDesc=<b>Prof Id %s</b> er en information afhængigt tredjepart land. <br> For eksempel, for <b>land %s,</b> er det <b>kode %s.</b>
     DolibarrDemo=Dolibarr ERP / CRM demo
     StatsByNumberOfUnits=Statistikker for summen af ​​produkter / tjenester
    -StatsByNumberOfEntities=Statistikker i antal henvisende enheder (nb faktura eller ordre ...)
    +StatsByNumberOfEntities=Statistik i antal henvisende enheder (faktura nummer, eller rækkefølge ...)
     NumberOfProposals=Antal forslag
     NumberOfCustomerOrders=Antal kundeordrer
     NumberOfCustomerInvoices=Antal kundefakturaer
    @@ -185,18 +188,23 @@ NumberOfUnitsCustomerInvoices=Antal enheder på kundefakturaer
     NumberOfUnitsSupplierProposals=Antal enheder på leverandørforslag
     NumberOfUnitsSupplierOrders=Antal enheder på leverandørordrer
     NumberOfUnitsSupplierInvoices=Antal enheder på leverandørfakturaer
    -EMailTextInterventionAddedContact=En nyintervention %s er blevet tildelt dig.
    -EMailTextInterventionValidated=Intervention %s valideret
    -EMailTextInvoiceValidated=Faktura %s valideret
    +EMailTextInterventionAddedContact=En ny intervention %s er blevet tildelt dig.
    +EMailTextInterventionValidated=Intervention %s bekræftet
    +EMailTextInvoiceValidated=Faktura %s bekræftet
    +EMailTextInvoicePayed=Fakturaen %s er blevet betalt.
     EMailTextProposalValidated=Tilbuddet %s er ikke godkendt.
     EMailTextProposalClosedSigned=Forslaget %s er blevet lukket underskrevet.
    -EMailTextOrderValidated=Ordren %s er blevet valideret.
    +EMailTextOrderValidated=Ordren %s er blevet bekræftet.
     EMailTextOrderApproved=Bestil %s godkendt
     EMailTextOrderValidatedBy=Ordren %s er optaget af %s.
     EMailTextOrderApprovedBy=Bestil %s er godkendt af %s
     EMailTextOrderRefused=Bestil %s nægtet
     EMailTextOrderRefusedBy=Bestil %s afvises af %s
    -EMailTextExpeditionValidated=Forsendelsen %s er blevet valideret.
    +EMailTextExpeditionValidated=Forsendelsen %s er blevet bekræftet.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Indførsel datasæt
     DolibarrNotification=Automatisk anmeldelse
     ResizeDesc=Indtast nye bredde <b>OR</b> ny højde. Ratio vil blive holdt i resizing ...
    @@ -204,7 +212,7 @@ NewLength=Ny bredde
     NewHeight=Ny højde
     NewSizeAfterCropping=Ny størrelse efter beskæring
     DefineNewAreaToPick=Definer et nyt område på billedet for at vælge (til venstre klik på billedet og derefter trække, indtil du når det modsatte hjørne)
    -CurrentInformationOnImage=Informationer om aktuelle billede
    +CurrentInformationOnImage=Dette værktøj er designet til at hjælpe dig med at ændre størrelse eller beskære et billede. Dette er oplysningerne om det aktuelle redigerede billede
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=Du modtager denne besked fordi din e-mail er blevet føjet til listen over modtagere, der skal informeres om bestemte begivenheder i %s software %s.
     YouReceiveMailBecauseOfNotification2=Denne begivenhed er følgende:
    @@ -217,13 +225,13 @@ StartUpload=Start upload
     CancelUpload=Annuller upload
     FileIsTooBig=Filer er for store
     PleaseBePatient=Vær tålmodig ...
    -NewPassword=New password
    +NewPassword=Nyt kodeord
     ResetPassword=Nulstille kodeord
    -RequestToResetPasswordReceived=A request to change your password has been received.
    +RequestToResetPasswordReceived=En anmodning om at ændre dit kodeord er blevet modtaget.
     NewKeyIs=Dette er dine nye nøgler til login
     NewKeyWillBe=Din nye nøgle til login til software vil være
     ClickHereToGoTo=Klik her for at gå til %s
    -YouMustClickToChange=Du skal dog først klikke på følgende link for at validere denne adgangskode ændring
    +YouMustClickToChange=Du skal dog først klikke på følgende link for at bekræfte denne adgangskode ændring
     ForgetIfNothing=Hvis du ikke har anmodet om denne ændring, skal du bare glemme denne email. Dine legitimationsoplysninger holdes sikre.
     IfAmountHigherThan=Hvis beløb højere end <strong> %s </ strong>
     SourcesRepository=Repository for kilder
    @@ -234,7 +242,11 @@ PermissionsDelete=Tilladelser fjernet
     YourPasswordMustHaveAtLeastXChars=Dit kodeord skal have mindst <strong> %s </ strong> tegn
     YourPasswordHasBeenReset=Dit kodeord er nulstillet
     ApplicantIpAddress=Ansøgerens IP-adresse
    -SMSSentTo=SMS sent to %s
    +SMSSentTo=SMS sendt til %s
    +MissingIds=Mangler ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Eksport område
    @@ -249,4 +261,4 @@ WEBSITE_PAGEURL=URL til side
     WEBSITE_TITLE=Titel
     WEBSITE_DESCRIPTION=Beskrivelse
     WEBSITE_KEYWORDS=nøgleord
    -LinesToImport=Lines to import
    +LinesToImport=Linjer at importere
    diff --git a/htdocs/langs/da_DK/projects.lang b/htdocs/langs/da_DK/projects.lang
    index b7dbaf6ec59..e703d7719c4 100644
    --- a/htdocs/langs/da_DK/projects.lang
    +++ b/htdocs/langs/da_DK/projects.lang
    @@ -10,13 +10,13 @@ PrivateProject=Projekt kontakter
     ProjectsImContactFor=Projekter Jeg er udtrykkeligt en kontaktperson af
     AllAllowedProjects=Alt projekt jeg kan læse (mine + offentlige)
     AllProjects=Alle projekter
    -MyProjectsDesc=This view is limited to projects you are a contact for
    +MyProjectsDesc=Denne oversigt er begrænset til projekter, du er kontakt til
     ProjectsPublicDesc=Dette synspunkt præsenterer alle projekter du får lov til at læse.
     TasksOnProjectsPublicDesc=Denne visning præsenterer alle opgaver på projekter, som du må læse.
     ProjectsPublicTaskDesc=Dette synspunkt præsenterer alle projekter og opgaver, som du får lov til at læse.
     ProjectsDesc=Dette synspunkt præsenterer alle projekter (din brugertilladelser give dig tilladelse til at se alt).
     TasksOnProjectsDesc=Denne visning præsenterer alle opgaver på alle projekter (dine brugerrettigheder giver dig tilladelse til at se alt).
    -MyTasksDesc=This view is limited to projects or tasks you are a contact for
    +MyTasksDesc=Denne oversigt er begrænset til projekter eller opgaver, som du er kontakt til
     OnlyOpenedProject=Kun åbne projekter er synlige (projekter i udkast eller lukket status er ikke synlige).
     ClosedProjectsAreHidden=Afsluttede projekter er ikke synlige.
     TasksPublicDesc=Dette synspunkt præsenterer alle projekter og opgaver, som du får lov til at læse.
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Er du sikker på, at du vil slette dette projekt?
     ConfirmDeleteATask=Er du sikker på, at du vil slette denne opgave?
     OpenedProjects=Åbne projekter
     OpenedTasks=Åbn opgaver
    -OpportunitiesStatusForOpenedProjects=Muligheder Antal åbne projekter efter status
    -OpportunitiesStatusForProjects=Muligheder antal projekter efter status
    +OpportunitiesStatusForOpenedProjects=Leder mængden af ​​åbne projekter efter status
    +OpportunitiesStatusForProjects=Leder mængden af ​​projekter efter status
     ShowProject=Vis projekt
     ShowTask=Vis opgave
     SetProject=Indstil projekt
     NoProject=Intet projekt defineret
    -NbOfProjects=Nb af projekter
    -NbOfTasks=Nb af opgaver
    +NbOfProjects=Antal projekter
    +NbOfTasks=Antal opgaver
     TimeSpent=Tid brugt
     TimeSpentByYou=Tid brugt af dig
     TimeSpentByUser=Tid brugt af brugeren
    @@ -55,7 +55,7 @@ TasksOnOpenedProject=Opgaver på åbne projekter
     WorkloadNotDefined=Arbejdsbyrden er ikke defineret
     NewTimeSpent=Tid brugt
     MyTimeSpent=Min tid
    -BillTime=Bill the time spent
    +BillTime=Fakturer tidsforbruget
     Tasks=Opgaver
     Task=Opgave
     TaskDateStart=Opgave startdato
    @@ -77,23 +77,24 @@ Time=Tid
     ListOfTasks=Liste over opgaver
     GoToListOfTimeConsumed=Gå til listen over tid forbrugt
     GoToListOfTasks=Gå til listen over opgaver
    -GoToGanttView=Go to Gantt view
    +GoToGanttView=Gå til Gantt visning
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Liste over tilbud forbundet med projektet
    -ListOrdersAssociatedProject=Liste over kundeordrer i forbindelse med projektet
    -ListInvoicesAssociatedProject=Liste over kundefakturaer i forbindelse med projektet
    -ListPredefinedInvoicesAssociatedProject=Liste over fakturaer til kundemaler i forbindelse med projektet
    -ListSupplierOrdersAssociatedProject=Liste over leverandørordrer i forbindelse med projektet
    -ListSupplierInvoicesAssociatedProject=Liste over leverandørfakturaer knyttet til projektet
    -ListContractAssociatedProject=Liste over kontrakter i forbindelse med projektet
    -ListShippingAssociatedProject=Liste over afskibninger i forbindelse med projektet
    -ListFichinterAssociatedProject=Liste over interventioner i forbindelse med projektet
    -ListExpenseReportsAssociatedProject=Liste over udgiftsrapporter tilknyttet projektet
    -ListDonationsAssociatedProject=Liste over donationer i forbindelse med projektet
    -ListVariousPaymentsAssociatedProject=Liste over diverse betalinger forbundet med projektet
    -ListActionsAssociatedProject=Liste over begivenheder i forbindelse med projektet
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Liste over tid, der indtages på projektets opgaver
    -ListTaskTimeForTask=List of time consumed on task
    +ListTaskTimeForTask=Liste over tid forbrugt på opgaven
     ActivityOnProjectToday=Aktivitet på projektet i dag
     ActivityOnProjectYesterday=Aktivitet på projektet i går
     ActivityOnProjectThisWeek=Aktivitet på projektet i denne uge
    @@ -101,12 +102,12 @@ ActivityOnProjectThisMonth=Aktivitet på projektet i denne måned
     ActivityOnProjectThisYear=Aktivitet på projektet i år
     ChildOfProjectTask=Barn af projekt / opgave
     ChildOfTask=Opgavebarn
    -TaskHasChild=Task has child
    +TaskHasChild=Opgave har barn
     NotOwnerOfProject=Ikke ejer af denne private projekt
     AffectedTo=Påvirkes i
     CantRemoveProject=Dette projekt kan ikke fjernes, da det er der henvises til nogle andre objekter (faktura, ordrer eller andet). Se referers fane.
     ValidateProject=Validér projet
    -ConfirmValidateProject=Er du sikker på, at du vil validere dette projekt?
    +ConfirmValidateProject=Er du sikker på, at du vil bekræfte dette projekt?
     CloseAProject=Luk projekt
     ConfirmCloseAProject=Er du sikker på at du vil lukke dette projekt?
     AlsoCloseAProject=Luk også projektet (hold det åbent, hvis du stadig skal følge produktionsopgaverne på det)
    @@ -141,16 +142,16 @@ ProjectReportDate=Skift opgaver datoer i henhold til ny projekt startdato
     ErrorShiftTaskDate=Det er umuligt at skifte arbejdsdato i henhold til ny projekt startdato
     ProjectsAndTasksLines=Projekter og opgaver
     ProjectCreatedInDolibarr=Projekt %s oprettet
    -ProjectValidatedInDolibarr=Project %s validated
    +ProjectValidatedInDolibarr=Projekt %s bekræftet
     ProjectModifiedInDolibarr=Projekt %s ændret
     TaskCreatedInDolibarr=Opgave %s oprettet
     TaskModifiedInDolibarr=Opgave %s ændret
     TaskDeletedInDolibarr=Opgave %s slettet
    -OpportunityStatus=Mulighed for status
    +OpportunityStatus=Lederstatus
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Muligheds sandsynlighed
    +OpportunityProbability=Ledsandsynlighed
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Mulighed beløb
    +OpportunityAmount=Blybeløb
     OpportunityAmountShort=Opp. beløb
     OpportunityAmountAverageShort=Gennemsnitlig oppe. beløb
     OpportunityAmountWeigthedShort=Vægtet oppe. beløb
    @@ -167,12 +168,13 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Bidragyder
     SelectElement=Vælg element
     AddElement=Link til element
     # Documents models
    -DocumentModelBeluga=Projektskabelon for oversigt over objekter
    -DocumentModelBaleine=Projektrapport skabelon til opgaver
    +DocumentModelBeluga=Projektdokumentskabelon for oversigt over objekter
    +DocumentModelBaleine=Projektdokumentskabelon til opgaver
    +DocumentModelTimeSpent=Projektrapport skabelon for brugt tid
     PlannedWorkload=Planlagt arbejdsbyrde
     PlannedWorkloadShort=arbejdsbyrde
     ProjectReferers=Relaterede emner
    -ProjectMustBeValidatedFirst=Projektet skal valideres først
    +ProjectMustBeValidatedFirst=Projektet skal bekræftes først
     FirstAddRessourceToAllocateTime=Tildel en brugerressource til opgaven for at allokere tid
     InputPerDay=Indgang pr. Dag
     InputPerWeek=Indgang pr. Uge
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projekter med denne bruger som kontaktperson
     TasksWithThisUserAsContact=Opgaver tildelt denne bruger
     ResourceNotAssignedToProject=Ikke tildelt til projekt
     ResourceNotAssignedToTheTask=Ikke tildelt opgaven
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Tid brugt af
     TasksAssignedTo=Opgaver tildelt
     AssignTaskToMe=Tildel opgave til mig
    @@ -189,26 +192,27 @@ AssignTaskToUser=Tildel opgave til %s
     SelectTaskToAssign=Vælg opgave for at tildele ...
     AssignTask=Tildel
     ProjectOverview=Oversigt
    -ManageTasks=Brug projekter til at følge opgaver og tid
    -ManageOpportunitiesStatus=Brug projekter til at følge leads / opportunuties
    -ProjectNbProjectByMonth=Nb af oprettede projekter pr. Måned
    -ProjectNbTaskByMonth=Nb af oprettede opgaver efter måned
    -ProjectOppAmountOfProjectsByMonth=Antal muligheder pr. Måned
    -ProjectWeightedOppAmountOfProjectsByMonth=Vægtet antal muligheder pr. Måned
    -ProjectOpenedProjectByOppStatus=Åbn projekt / led efter mulighedstilstand
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
    +ManageOpportunitiesStatus=Brug projekter til at følge potentielle kunder / nye salgsmuligheder
    +ProjectNbProjectByMonth=Antal oprettet projekter pr. Måned
    +ProjectNbTaskByMonth=Antal oprettet opgaver efter måned
    +ProjectOppAmountOfProjectsByMonth=Mængden af ​​kundeemner pr. Måned
    +ProjectWeightedOppAmountOfProjectsByMonth=Vægtet antal kundeemner pr. Måned
    +ProjectOpenedProjectByOppStatus=Åbn projekt / bly med blystatus
     ProjectsStatistics=Statistik over projekter / ledere
     TasksStatistics=Statistik over projekt / hovedopgaver
     TaskAssignedToEnterTime=Opgave tildelt. Indtastning af tid på denne opgave skal være muligt.
     IdTaskTime=Id opgave tid
     YouCanCompleteRef=Hvis du vil udfylde referencen med nogle oplysninger (for at bruge den som søgefiltre), anbefales det at tilføje et tegn til at adskille det, så den automatiske nummerering fungerer stadig korrekt for de næste projekter. For eksempel %s-ABC. Du kan også foretrække at tilføje søge nøgler til etiket. Men bedste praksis kan være at tilføje et dedikeret felt, også kaldet komplementære attributter.
     OpenedProjectsByThirdparties=Åbne projekter af tredjeparter
    -OnlyOpportunitiesShort=Kun muligheder
    -OpenedOpportunitiesShort=Åben muligheder
    -NotAnOpportunityShort=Ikke en mulighed
    -OpportunityTotalAmount=Muligheder samlede beløb
    -OpportunityPonderatedAmount=Muligheder vægtet beløb
    -OpportunityPonderatedAmountDesc=Muligheder beløbet vægtet med sandsynlighed
    -OppStatusPROSP=prospektering
    +OnlyOpportunitiesShort=Kun fører
    +OpenedOpportunitiesShort=Åbne kundeemner
    +NotOpenedOpportunitiesShort=Ikke åbne ledninger
    +NotAnOpportunityShort=Ikke en ledelse
    +OpportunityTotalAmount=Samlet antal ledere
    +OpportunityPonderatedAmount=Vægtet antal ledninger
    +OpportunityPonderatedAmountDesc=Potentielle kunder beløbet vægtet med sandsynlighed
    +OppStatusPROSP=Prospection
     OppStatusQUAL=Kvalifikation
     OppStatusPROPO=Tilbud
     OppStatusNEGO=negociation
    @@ -220,11 +224,13 @@ AllowToLinkFromOtherCompany=Tillad at linke projekt fra andet firma <br> <br> <u
     LatestProjects=Seneste %s projekter
     LatestModifiedProjects=Seneste %s ændrede projekter
     OtherFilteredTasks=Andre filtrerede opgaver
    -NoAssignedTasks=No assigned tasks (assign project/tasks the current user from the top select box to enter time on it)
    +NoAssignedTasks=Ingen tildelte opgaver (tildel projekt / opgaver den aktuelle bruger fra den øverste valgboks for at indtaste tid på den)
     # Comments trans
     AllowCommentOnTask=Tillad brugernes kommentarer til opgaver
     AllowCommentOnProject=Tillad brugernes kommentarer til projekter
    -DontHavePermissionForCloseProject=You do not have permissions to close the project %s
    -DontHaveTheValidateStatus=The project %s must be open to be closed
    -RecordsClosed=%s project(s) closed
    -SendProjectRef=Information project %s
    +DontHavePermissionForCloseProject=Du har ikke tilladelser til at lukke projektet %s
    +DontHaveTheValidateStatus=Projektet %s skal være åbent for at blive lukket
    +RecordsClosed=%s projekt (er) lukket
    +SendProjectRef=Informationsprojekt %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Modul 'Betaling af lønninger til medarbejdere' skal være i stand til at definere medarbejder timeprisen for at få tiden brugt til at blive værdieret
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/de_AT/admin.lang b/htdocs/langs/de_AT/admin.lang
    index c68572335ca..80b7bd81fc3 100644
    --- a/htdocs/langs/de_AT/admin.lang
    +++ b/htdocs/langs/de_AT/admin.lang
    @@ -4,18 +4,15 @@ VersionDevelopment=Entwickler
     SessionId=Sitzungsnummer
     SessionSaveHandler=Sessionmanager
     YourSession=Ihre Anmeldung
    -Sessions=Benutzeranmeldung
     InternalUser=interner Nutzer
     ExternalUser=externer Nutzer
     InternalUsers=interne Nutzer
     ExternalUsers=externe Nutzer
     GUISetup=Anischt
    -SetupArea=Einstellungen
     NextValue=Nächste Wert
     AntiVirusCommandExample=Beispiel für ClamWin: c:\\Program Files (x86)\\ClamWin\\bin\\clamscan.exe <br>Beispiel für ClamAV: /usr/bin/clamscan
     AntiVirusParamExample=Beispiel für ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
     ImportMySqlDesc=Zum Wiederherstellen einer Sicherungsdatei müssen Sie folgenden Befehl über die Kommandozeile ausführen:
    -NumberOfModelFilesFound=Anzahl der in diesen Verzeichnissen gefundenen .odt-Dokumentvorlagen
     Module50Name=Produkte und Services
     Module53Name=Dienstleistung
     Module53Desc=Services-Verwaltung
    @@ -23,9 +20,8 @@ Module70Name=Eingriffe
     Module70Desc=Eingriffsverwaltung
     Module80Name=Sendungen
     Module310Desc=Mitgliederverwaltun
    -Module330Name=Lesezeichen
    -Module330Desc=Bookmarks-Verwaltung
     Module50100Name=Kassa
    +Module50150Name=Kassa
     Permission31=Produkte/Services einsehen
     Permission32=Produkte/Services erstellen/bearbeiten
     Permission34=Produkte/Services löschen
    @@ -37,7 +33,6 @@ Permission67=Eingriffe exportieren
     Permission172=Reisen löschen
     Permission192=Leitungen anlegen
     Permission193=Leitungen verwerfen
    -Permission194=Breitbandverbindungen einsehen
     Permission202=ADSL-Anschlüsse anlegen
     Permission203=Anschlussbestellungen übermitteln
     Permission204=Anschlussbestellungen
    @@ -49,7 +44,6 @@ Permission213=Leitungen aktivieren
     Permission214=Telefonie einstellen
     Permission215=Anbieter einstellen
     Permission252=Andere Benutzer und Gruppen erstellen/bearbeiten (inkl. Rechteverwaltung)
    -Permission253=Passwörter anderer Benutzer ändern
     Permission254=Andere Benutzer löschen oder deaktivieren
     Permission255=Eigene Benutzereinstellungen setzen/bearbeiten
     Permission256=Eigenes Passwort ändern
    @@ -73,7 +67,6 @@ Permission2411=Maßnahmen (Termine oder Aufgaben) Anderer einsehen
     Permission2412=Maßnahmen (Termine oder Aufgaben) Anderer erstellen/bearbeiten
     Permission2413=Maßnahmen (Termine oder Aufgaben) Anderer löschen
     Permission2501=Dokumente hochladen oder löschen
    -VATIsNotUsedDesc=Die vorgeschlagene MwSt. ist standardmäßig 0 für alle Fälle wie Stiftungen, Einzelpersonen oder Kleinunternehmen-
     VirtualServerName=Virtual Server Name
     PhpWebLink=Php Web-Link
     Server=Host
    @@ -89,17 +82,12 @@ DefaultSkin=Standardoberfläche
     DefaultLanguage=Standardsprache (Sprachcode)
     EnableShowLogo=Logo über dem linken Menüs anzeigen
     CompanyCurrency=Firmenwährung
    -DelaysOfToleranceBeforeWarning=Verspätungstoleranz vor Benachrichtigungen
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Verzögerungstoleranz (in Tagen) vor  Benachrichtigung über zu aktivierende Services
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Verzögerungstoleranz (in Tagen) vor Benachrichtigung zu überfälligen Services
    -DocumentModelOdt=Erstellen von Dokumentvorlagen im OpenDocuments-Format (.odt-Dateien für OpenOffice, KOffice, TextEdit, ...)
     WatermarkOnDraftInvoices=Wasserzeichen auf Rechnungsentwürfen (alle, falls leer)
     WatermarkOnDraftProposal=Wasserzeichen für Angebotsentwürfe (alle, falls leer)
     WatermarkOnDraftOrders=Wasserzeichen zu den Entwürfen von Aufträgen (alle, wenn leer)
     InterventionsSetup=Eingriffsmoduleinstellungen
     FreeLegalTextOnInterventions=Freier Rechtstext für Eingriffe
     WatermarkOnDraftInterventionCards=Wasserzeichen auf Intervention Karte Dokumente (alle, wenn leer)
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
     ClickToDialSetup=Click-to-Dial-Moduleinstellungen
     PathToGeoIPMaxmindCountryDataFile=Pfad zur Datei mit Maxmind IP to Country Übersetzung. <br> Beispiel: / usr / local / share / GeoIP / GeoIP.dat
     MailToSendShipment=Sendungen
    diff --git a/htdocs/langs/de_AT/companies.lang b/htdocs/langs/de_AT/companies.lang
    index 6563ebabda4..9340f2ca758 100644
    --- a/htdocs/langs/de_AT/companies.lang
    +++ b/htdocs/langs/de_AT/companies.lang
    @@ -7,9 +7,6 @@ Web=Webadresse
     LocalTax1IsUsedES=RE wird
     LocalTax2IsUsedES=IRPF verwendet wird
     ProfId1AR=Prof Id 1 (CUIL)
    -CustomerCode=Kunden-Code
    -CustomerCodeShort=Kunden-Code
     CapitalOf=Hauptstadt von %s
    -NorProspectNorCustomer=Weder Lead noch Kunde
     OthersNotLinkedToThirdParty=Andere, nicht mit einem Partner verknüpfte
     ActivityCeased=geschlossen
    diff --git a/htdocs/langs/de_AT/errors.lang b/htdocs/langs/de_AT/errors.lang
    index c12f8165eaf..38ccb0624ac 100644
    --- a/htdocs/langs/de_AT/errors.lang
    +++ b/htdocs/langs/de_AT/errors.lang
    @@ -4,4 +4,3 @@ ErrorBadUrl=Url %s ist ungültig
     ErrorRecordNotFound=Eintrag nicht gefunden.
     ErrorCashAccountAcceptsOnlyCashMoney=Dies ist ein Bargeldkonto (Kassa) und akzeptiert deshalb nur Bargeldtransaktionen.
     ErrorCustomerCodeAlreadyUsed=Diese Kunden Nr. ist bereits vergeben.
    -WarningUntilDirRemoved=Diese Warnung bleibt so lange aktiv, wie dieses Verzeichnis existiert (nur für Administratoren).
    diff --git a/htdocs/langs/de_AT/help.lang b/htdocs/langs/de_AT/help.lang
    deleted file mode 100644
    index f4f55ee6209..00000000000
    --- a/htdocs/langs/de_AT/help.lang
    +++ /dev/null
    @@ -1,2 +0,0 @@
    -# Dolibarr language file - Source file is en_US - help
    -ToGetHelpGoOnSparkAngels1=Einige Unternehmen bieten eine schnelle (manchmal prompte) und effiziente Online-Unterstützung durch Fernwartung Ihres Computers. Solche Helfer finden Sie auf dieser Website <b>%s</b>
    diff --git a/htdocs/langs/de_AT/other.lang b/htdocs/langs/de_AT/other.lang
    index aeece62e0e6..b53f81005e3 100644
    --- a/htdocs/langs/de_AT/other.lang
    +++ b/htdocs/langs/de_AT/other.lang
    @@ -1,6 +1,5 @@
     # Dolibarr language file - Source file is en_US - other
     DateToBirth=Geburtstdatum
    -Notify_FICHINTER_VALIDATE=Intervention validiert
     Notify_ORDER_SENTBYMAIL=Kunden bestellen per Post geschickt
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Lieferant Bestellung per Post geschickt
     Notify_ORDER_SUPPLIER_VALIDATE=Lieferanten, um validierte
    @@ -9,7 +8,6 @@ Notify_WITHDRAW_TRANSMIT=Transmission Rückzug
     Notify_WITHDRAW_CREDIT=Kreditkarten Rückzug
     Notify_WITHDRAW_EMIT=Isue Rückzug
     Notify_COMPANY_CREATE=Dritter erstellt
    -Notify_BILL_PAYED=Kunden Rechnung bezahlt
     Notify_BILL_CANCEL=Kunden Rechnung storniert
     Notify_BILL_SENTBYMAIL=Kunden Rechnung per Post geschickt
     Notify_BILL_SUPPLIER_VALIDATE=Lieferantenrechnung validiert
    diff --git a/htdocs/langs/de_AT/projects.lang b/htdocs/langs/de_AT/projects.lang
    index fa099cac87c..e9fac6a0992 100644
    --- a/htdocs/langs/de_AT/projects.lang
    +++ b/htdocs/langs/de_AT/projects.lang
    @@ -7,7 +7,6 @@ TasksDesc=Diese Ansicht zeigt alle Aufgaben (Ihre Benutzerberechtigung erlaubt I
     NoProject=Kein Projekt definiert
     RefTask=Aufgaben Nr.
     MyActivities=Meine Tätigkeiten
    -ListFichinterAssociatedProject=Liste der mit diesem Projekt verknüpften Eingriffe
     CloseAProject=Schließe Projekt
     ReOpenAProject=Öffne Projekt
     DoNotShowMyTasksOnly=Zeige auch die Aufgaben Anderer
    diff --git a/htdocs/langs/de_CH/admin.lang b/htdocs/langs/de_CH/admin.lang
    index b31fcfa9eba..76c9f612a90 100644
    --- a/htdocs/langs/de_CH/admin.lang
    +++ b/htdocs/langs/de_CH/admin.lang
    @@ -8,8 +8,6 @@ AvailableOnlyOnPackagedVersions=Die lokale Datei für die Integritätsprüfung i
     XmlNotFound=Xml Integritätsdatei der Anwendung ​​nicht gefunden
     SessionSaveHandler=Handler für Sitzungsspeicherung
     ConfirmPurgeSessions=Wollen Sie wirklich alle Sessions beenden ? Dadurch werden alle Benutzer getrennt (ausser Ihnen)
    -NoSessionListWithThisHandler=Anzeige der aktiven Sitzungen mit Ihrer PHP-Konfiguration nicht möglich.
    -ConfirmLockNewSessions=Möchten Sie wirklich alle Sitzungen bis auf Ihre eigene blocken? Nur Benutzer <b>%s</b> kann danach noch eine Verbindung aufbauen.
     ClientCharset=Benutzer-Zeichensatz
     FormToTestFileUploadForm=Formular für das Testen von Datei-Uplads (je nach Konfiguration)
     SecurityFilesDesc=Sicherheitseinstellungen für den Dateiupload definieren.
    @@ -20,8 +18,6 @@ Dictionary=Wörterbücher
     ErrorCodeCantContainZero=Code darf keinen Wert 0 enthalten
     UseSearchToSelectCompanyTooltip=Wenn Sie eine grosse Anzahl von Geschäftspartnern (> 100'000) haben, können Sie die Geschwindigkeit verbessern, indem Sie in Einstellungen -> Andere die Konstante COMPANY_DONOTSEARCH_ANYWHERE auf 1 setzen. Die Suche startet dann am Beginn des Strings.
     UseSearchToSelectContactTooltip=Wenn Sie eine grosse Anzahl von Kontakten (> 100.000) haben, können Sie die Geschwindigkeit verbessern, indem Sie in Einstellungen -> Andere die Konstante CONTACT_DONOTSEARCH_ANYWHERE auf 1 setzen. Die Suche startet dann am Beginn des Strings.
    -DelaiedFullListToSelectCompany=Warte auf Tastendruck, bevor der Inhalt der Partner-Combo-Liste geladen wird (Dies kann die Leistung verbessern, wenn Sie eine grosse Anzahl von Partnern haben).
    -DelaiedFullListToSelectContact=Warte auf Tastendruck, bevor der Inhalt der Kontakt-Combo-Liste geladen wird (Dies kann die Leistung verbessern, wenn Sie eine grosse Anzahl von Kontakten haben).
     AllowToSelectProjectFromOtherCompany=Erlaube bei den Elementen eines Partners, die Projekte von anderen Partnern zu verlinken
     Space=Raum
     MustBeLowerThanPHPLimit=Hinweis: Ihre PHP-Einstellungen beschränken die Grösse für Dateiuploads auf <b>%s</b>%s
    @@ -45,45 +41,38 @@ ConfirmPurgeAuditEvents=Möchten Sie wirklich alle Sicherheitsereignisse lösche
     ExportMethod=Export-Methode
     ImportMethod=Import-Methode
     IgnoreDuplicateRecords=Fehler durch doppelte Zeilen ignorieren (INSERT IGNORE)
    -BoxesDesc=Boxen sind auf manchen Seiten angezeigte Informationsbereiche. Sie können die Anzeige einer Box einstellen, indem Sie auf die Zielseite klicken und 'Aktivieren' wählen. Zum Ausblenden einer Box klicken Sie einfach auf den Papierkorb.
    -ModulesDesc=Die Module bestimmen, welche Funktionalität in Dolibarr verfügbar ist. Manche Module erfordern zusätzliche Berechtigungen, welche den Benutzern zugewiesen werden muss, nachdem das Modul aktiviert wurde. \nKlicken Sie auf die Schaltfläche on/off, um ein Modul/Anwendung zu aktivieren.
     ModulesMarketPlaceDesc=Sie finden weitere Module auf externen Websites
     ModulesDevelopYourModule=Entwicklen Sie Ihre eigenes Modul/Anwendung
     FreeModule=Kostenlose Module
     NotCompatible=Dieses Modul scheint nicht mit Ihrer Dolibarr Version %s (Min %s - Max %s) kompatibel zu sein.
     CompatibleAfterUpdate=Dieses Modul benötigt eine Update Ihrer Dolibarr Version %s (Min %s - Max %s).
     SeeInMarkerPlace=Siehe im Marktplatz
    -DoliPartnersDesc=Unternehmensliste, die Zusatzmodule oder Funktionen entwicklen können. (Hinweis: Alle Entwickler mit PHP Kentinissen können Dolibarr erweitern)
    -WebSiteDesc=Webseite für die Suche nach weiteren Modulen
     DevelopYourModuleDesc=Einige Lösungen um Ihr eigenes Modul zu entwickeln...
     BoxesActivated=Aktivierte Boxen
     OfficialWebSite=Offizielle Website
     ReferencedPreferredPartners=Bevorzugte Geschäftspartner
     ForAnswersSeeForum=Für alle anderen Fragen / Hilfe, können Sie die Dolibarr Forum: <br> <a href="%s" target="_blank"><b> %s</b></a>
    -HelpCenterDesc1=In diesem Bereich können Sie sich ein Hilfe-Support-Service auf Dolibarr.
     MeasuringUnit=Masseinheit
    -MAIN_MAIL_SMTP_PORT=SMTP-Port (standardmässig in der php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP-Host (standardmässig in php.ini: <b>%s</b>)
    -MAIN_MAIL_EMAIL_FROM=E-Mail-Absender für automatisch erzeugte Mails (standardmässig in php.ini: <b>%s</b>)
    -MAIN_MAIL_EMAIL_STARTTLS=TLS (STARTTLS) Verschlüsselung verwenden
    -SubmitTranslation=Wenn die Übersetzung der Sprache unvollständig ist oder wenn Sie Fehler finden, können Sie können Sie die entsprechenden Sprachdateien im Verzeichnis <b>langs/%s</b> korrigieren und und anschliessend Ihre Änderungen unter  www.transifex.com/dolibarr-association/dolibarr/ teilen.
    +MAIN_MAIL_FORCE_SENDTO=Sende alle Emails an diese Adresse zum Test (statt an die echten Empfänger)
     SubmitTranslationENUS=Sollte die Übersetzung für eine Sprache nicht vollständig sein oder Fehler beinhalten, können Sie die entsprechenden Sprachdateien im Verzeichnis <b>langs/%s</b>  bearbeiten und anschliessend Ihre Änderungen an dolibarr.org/forum oder für Entwickler auf github.com/Dolibarr/dolibarr. übertragen.
     ModuleFamilyCrm=Kundenverwaltung (CRM)
    +InfDirExample=<br>Dann deklariere in <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>\n"#" heisst, die Variablen sind auskommentiert und werden nicht berücksichtigt.\nEntferne einfach "#", um die Variablen scharf zu schalten.
     CallUpdatePage=Zur Aktualisierung der Daten und der Datenbankstruktur gehen Sie zur Seite %s.
     GenericMaskCodes=Sie können ein beliebiges Numerierungsschema wählen. Dieses Schema könnte z.B. so aussehen:<br><b>{000000}</b> steht für eine 6-stellige Nummer, die sich bei jedem neuen %s automatisch erhöht. Wählen Sie die Anzahl der Nullen je nach gewünschter Nummernlänge. Der Zähler füllt sich automatisch bis zum linken Ende mit Nullen um das gewünschte Format abzubilden. <br><b>{000000+000}</b> führt zu einem ähnlichen Ergebnis, allerdings mit einem Wertsprung in Höhe des Werts rechts des Pluszeichens, der beim ersten %s angewandt wird. <br><b>{000000@x}</b> wie zuvor, jedoch stellt sich der Zähler bei Erreichen des Monats x (zwischen 1 und 12) automatisch auf 0 zurück. Ist diese Option gewählt und x hat den Wert 2 oder höher, ist die Folge {mm}{yy} or {mm}{yyyy} ebenfalls erfoderlich. <br><b>{dd}</b> Tag (01 bis 31).<br><b>{mm}</b> Monat (01 bis 12).<br><b>{yy}</b>, <b>{yyyy}</b> or <b>{y}</b> Jahreszahl 1-, 2- oder 4-stellig. <br>
     GenericMaskCodes2=<b>{cccc}</b> der Kunden-Code mit n Zeichen<br><b>{cccc000}</b> der Kunden-Code mit n Zeichen, gefolgt von der dem Kunden zugeordneten Partner ID. Dieser Zähler wird gleichzeitig mit dem Globalen Zähler zurückgesetzt.<br><b>{tttt}</b> Die Partner ID mit n Zeichen (siehe unter Einstellungen->Stammdaten->Arten von Partnern). Wenn diese Option aktiv ist, wird für jede Partnerart ein separater Zähler geführt.<br>
     GenericMaskCodes4b=<u>Beispiel für Dritte erstellt am 2007-03-01:</u> <br>
     UMaskExplanation=Über diesen Parameter können Sie die standardmässigen Dateiberechtigungen für vom System erzeugte/verwaltete Inhalte festlegen. <br>Erforderlich ist ein Oktalwert (0666 bedeutet z.B. Lesen und Schreiben für alle). <br>Auf Windows-Umgebungen haben diese Einstellungen keinen Effekt.
    -ConfirmPurge=Möchten Sie wirklich endgültig löschen?<br> Alle Dateien werden unwiderbringlich gelöscht (Attachments, Angebote, Rechnungen usw.)
    +SeeWikiForAllTeam=Für die ganze Liste aller Rollen und Ihrer Organisation besuchst du die Wikiseiten.
     DescWeather=Die folgenden Diagramme werden auf der Übersicht Startseite angezeigt, wenn die entsprechenden Toleranzwerte erreicht werden:
    -HideLocalTaxOnPDF=Unterdrücke %s Satz in der PDF Steuerspalte
    +HideAnyVATInformationOnPDF=Verstecke MWST - Informationen im PDF.
    +PDFRulesForSalesTax=Regeln für die MWST
     HideDetailsOnPDF=Unterdrücke Produktzeilen in generierten PDF
     PlaceCustomerAddressToIsoLocation=ISO Position für die Kundenadresse verwenden
    -ButtonHideUnauthorized=Buttons für Nicht-Admins ausblenden anstatt ausgrauen?
     OldVATRates=Alter MwSt. Satz
     NewVATRates=Neuer MwSt. Satz
    +HtmlText=HTML
     Float=Gleitkommazahl
    -ExtrafieldRadio=Radio Button (Nur eine Auswahl möglich)
    +ComputedFormulaDesc=Du kannst hier Formeln mit weiteren Objekteigenschaften oder in PHP eingeben, um dynamisch berechnete Werte zu generieren. Alle PHP konformen Formeln sind erlaubt inkl dem Operator "?:" und folgende globale Objekte:<strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>Obacht</strong>: Vielleicht sind nur einige Eigenschaften von $object verfügbar. Wenn dir eine Objekteigenschaft fehlt, packe das gesamte Objekt einfach in deine Formel, wie im Beispiel zwei.<br>"Computed field" heisst, du kannst nicht selber Werte eingeben. Wenn Syntakfehler vorliegen, liefert die Formel ggf. gar nichts retour.<br><br>Ein Formelbeispiel:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Beispiel zum Neuladen eines Objektes<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Eine Weitere Variante zum erzwungenen Neuladen des Objekts und seiner Eltern:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Übergeordnetes Projekt nicht gefunden...'
     LibraryToBuildPDF=Verwendete Bibliothek zur PDF-Erzeugung
     SetAsDefault=Als Standard definieren
     ConfirmEraseAllCurrentBarCode=Wirklich alle aktuellen Barcode-Werte löschen?
    @@ -91,28 +80,18 @@ DisplayCompanyManagers=Anzeige der Namen der Geschäftsführung
     Use3StepsApproval=Standardmässig, Einkaufsaufträge müssen durch zwei unterschiedlichen Benutzer erstellt und freigegeben werden (ein Schritt/Benutzer zum Erstellen und ein Schritt/Benutzer für die Freigabe). Beachten Sie, wenn ein Benutzer beide Rechte hat - zum Erstellen und Freigeben, dann reicht ein Benutzer für diesen Vorgang. Optional können Sie einen zusätzlichen Schritt/User für die Freigabe einrichten, wenn der Betrag einen bestimmten dedizierten Wert übersteigt (wenn der Betrag höher wird, werden 3 Stufen notwendig: 1=Validierung, 2=erste Freigabe und 3=Gegenfreigabe.<br>Lassen Sie das Feld leer, wenn eine Freigabe (2 Schritte) ausreicht; tragen Sie einen sehr niedrigen Wert (0.1) ein, wenn eine zweite Freigabe notwendig ist.
     UseDoubleApproval=3-fach Verarbeitungsschritte verwenden, wenn der Betrag (ohne Steuer) höher ist als ...
     ClickToShowDescription=Klicken um die Beschreibung zu sehen
    -DependsOn=Dieses Modul benötigt die folgenden Module
    -PageUrlForDefaultValues=Hier muss die relative URL der Seite eingetragen werden. Wenn Parameter in der URL angegeben werden, dann werden alle Vorgabewerte auf den gleichen Wert gesetzt. Beispiele:
    -GoIntoTranslationMenuToChangeThis=Eine Übersetzung wurde für diesen Schlüssel gefunden, um die Übersetzung anzupassen, gehen Sie ins Menü "Home->Setup->Überseztungen"
     WarningSettingSortOrder=Warnung: Änderungen an der Standardsortierreihenfolge können zu Fehlern führen, falls das betreffende Feld nicht vorhanden ist. Falls dies passiert, entfernen sie das betreffende Feld oder stellen die den Defaultwert wieder her.
     AttachMainDocByDefault=Setzen Sie diesen Wert auf 1, wenn Sie das Hauptdokument standardmässig per E-Mail anhängen möchten (falls zutreffend).
    -Module1Name=Geschäftspartner
     Module1Desc=Geschäftspartner- und Kontakteverwaltung (Kunden, Leads, ...)
     Module20Desc=Angeboteverwaltung
     Module49Desc=Bearbeiterverwaltung
     Module70Name=Arbeitseinsätze
     Module80Name=Auslieferungen
    -Module240Desc=Werkzeug zum Datenexport (mit Assistent)
    -Module250Desc=Werkzeug zum Dateninport (mit Assistent)
    -Module330Name=Lesezeichen
    -Module330Desc=Lesezeichenverwaltung
     Module1200Desc=Mantis-Integation
    -Module2000Desc=Texte mit dem WYSIWYG Editor bearbeiten (Basierend auf CKEditor)
     Module3100Desc=Skypebutton bei Kontakten / Drittparteien / Mitgliedern hinzufügen
     Module50100Desc=Kassenmodul
     Module63000Desc=Resourcen verwalten(Drucker, Autos, Räume,...) diese können dann im Kalender verwendet werden
     Permission26=Angebote schliessen
    -Permission44=Projekte und Aufgaben löschen (gemeinsame Projekte und Projekte, in welchen ich Ansprechpartner bin)
     Permission61=Leistungen ansehen
     Permission62=Leistungen erstellen/bearbeiten
     Permission64=Interventionen löschen
    @@ -134,29 +113,14 @@ Permission525=Darlehens-rechner
     Permission1188=Lieferantenbestellungen schliessen
     Permission2414=Aktionen und Aufgaben anderer exportieren
     Permission59002=Gewinspanne definieren
    -DictionaryCompanyType=Geschäftspartnertyp
    -DictionaryCompanyJuridicalType=Gesellschafts- und Unternehmensformen
     DictionaryCivility=Anrede Bezeichnungen
     DictionaryActions=Arten von Kalenderereignissen
     DictionaryVAT=MwSt.-Sätze
    -DictionaryEMailTemplates=Textvorlagen für Emails
    -DictionaryHolidayTypes=Absenzarten
     SetupSaved=Setup gespeichert
    -BackToDictionaryList=Zurück zur Wörterbuchübersicht
    -VATManagement=MwSt-Verwaltung
    -VATIsUsedDesc=Der standardmässige MwSt.-Satz für die Erstellung von Leads, Rechnungen, Bestellungen, etc. folgt der folgenden, aktiven Regel:<br>Ist der Verkäufer mehrwertsteuerpflichtig, ist die MwSt. standardmässig 0. Ende der Regel.<br>Ist das Verkaufsland gleich dem Einkaufsland, ist die MwSt. standardmässig die MwSt. des Produkts im Verkaufsland. Ende der Regel. <br>Sind Verkäufer und Käufer beide aus Europäischen Mitgliedsstaaten und die Produkte physisch transportfähig (Auto, Schiff, Flugzeug), ist die MwSt. standardmässig 0. (Die MwSt. sollte durch den Käufer beim eigenen Zollamt entrichtet werden, nicht durch den Verkäufer. Ende der Regel.<br>Sind Verkäufer und Käufer beide aus Europäischen Mitgliedsstaaten, der Käufer jedoch kein Unternehmen so ist die MwSt. standardmässig die MwSt. des verkauften Produkts. Ende der Regel.<br>Sind Verkäufer und Käufer beide Unternehmen im Europäischen Gemeinschaftsraum, so ist die MwSt. standardmässig 0. Ende der Regel.<br>Trifft keine der obigen Regeln zu, ist die MwSt. standardmässig 0.
    -VATIsNotUsedDesc=Die vorgeschlagene MwSt. ist standardmässig 0 für alle Fälle wie Stiftungen, Einzelpersonen oder Kleinunternehmen.
    -LocalTax1IsUsedDescES=Die RE Rate standardmässig beim Erstellen Aussichten, Rechnungen, Bestellungen etc. folgen die aktive Standard-Regel: <br> Wenn te Käufer ist nicht unterworfen RE, RE standardmässig = 0 ist. Ende der Regel. <br> Ist der Käufer unterzogen, um dann die RE RE standardmässig. Ende der Regel. <br>
     LocalTax1IsNotUsedDescES=Standardmässig werden die vorgeschlagenen RE 0 ist. Ende der Regel.
    -LocalTax2IsUsedDescES=Die RE Rate standardmässig beim Erstellen Aussichten, Rechnungen, Bestellungen etc. folgen die aktive Standard-Regel: <br> Ist der Verkäufer nicht zu IRPF ausgesetzt, dann durch IRPF default = 0. Ende der Regel. <br> Ist der Verkäufer zur IRPF dann der Einkommenssteuer unterworfen standardmässig. Ende der Regel. <br>
     LocalTax2IsNotUsedDescES=Standardmässig werden die vorgeschlagenen IRPF 0 ist. Ende der Regel.
    -LocalTax2IsNotUsedExampleES=In Spanien sind sie bussines nicht der Steuer unterliegen System von Modulen.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Verzögerungstoleranz (in Tagen) vor Warnung für nicht erledigte Ereignisse
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Verzögerungstoleranz (in Tagen) vor Warnung für nicht fristgerecht geschlossene Projekte
    -Delays_MAIN_DELAY_TASKS_TODO=Verzögerungstoleranz (in Tagen) vor Warnung für nicht erledigte Projektaufgaben
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Verzögerungstoleranz (in Tagen), vor Warnung für nicht bearbeitete Bestellungen
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Verzögerungstoleranz (in Tagen) vor  Warnung für abzuschliessende Angebote
    -SetupDescription1=Der Setupbereich erlaubt das konfigurieren ihrer Dolibarr Installation vor der ersten Verwendung.
    +MenuCompanySetup=Firma / Organisation
    +CompanyInfo=Firma / Organisation
     InfoDolibarr=Infos Dolibarr
     InfoBrowser=Infos Browser
     InfoOS=Infos OS
    @@ -164,7 +128,6 @@ InfoWebServer=Infos Webserver
     InfoDatabase=Infos Datenbank
     InfoPHP=Infos PHP
     SystemAreaForAdminOnly=Dieser Bereich steht ausschliesslich Administratoren zur Verfügung. Keine der Benutzerberechtigungen kann dies ändern.
    -TriggersDesc=Trigger sind Dateien, die nach einem Kopieren in das Verzeichnis <b>htdocs/core/triggers</b> das Workflow-Verhalten des Systems beeinflussen. Diese stellen neue, mit Systemereignissen verbundene, Ereignisse dar (Neuer Geschäftspartner angelegt, Rechnung freigegeben, ...).
     TriggerDisabledByName=Trigger in dieser Datei sind durch das <b>-NORUN</b>-Suffix in ihrem Namen deaktviert.
     DictionaryDesc=Definieren Sie hier alle Defaultwerte. Sie können die vordefinierten Werte mit ihren eigenen ergänzen.
     ConstDesc=Diese Seite erlaubt es alle anderen Parameter einzustellen, die auf den vorherigen Seiten nicht verfügbar sind. Dies sind meist reservierte Parameter für Entwickler oder für die erweiterte Fehlersuche. Für eine Liste von Optionen <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="externe Seite - öffnet sich in einem neuen Fenster" target="_blank"> hier überprüfen  </a>.
    @@ -172,20 +135,13 @@ MiscellaneousDesc=Alle anderen sicherheitsrelevanten Parameter werden hier defin
     MAIN_ROUNDING_RULE_TOT=Rundungseinstellung (Für Länder in denen nicht auf 10er basis Gerundet wird. zB. 0.05 damit in 0.05 Schritten gerundet wirb)
     TotalPriceAfterRounding=Gesamtpreis (Netto/MwSt./Brutto) gerundet
     NoEventOrNoAuditSetup=Keine sicherheitsrelevanten Protokollereignisse. Überprüfen Sie die Aktivierung dieser Funktionen unter 'Einstellunge-Sicherheit-Protokoll'.
    -RestoreDesc2=Wiederherstellung von Archive Datei (zip Datei zum Beispiel)\nvom documents Verzeichnis um den documents Datei-Baum im documents verzeichnis in eine neue Dolibarr Installation oder in ein bestehendes Dolibarr Verzeichnis (<b>%s</b>).
     PreviousDumpFiles=generierte Databank Backup Dateien
     DownloadMoreSkins=Weitere grafische Oberflächen/Themes herunterladen
    -ShowVATIntaInAddress=Ausblenden MwSt. Nummer in Adressen auf Dokumenten.
     MeteoStdMod=Standard Modus
    -DefineHereComplementaryAttributes=Definieren Sie hier alle Attribute, die nicht standardmässig vorhanden sind, und in %s unterstützt werden sollen.
     ExtraFieldsSupplierOrdersLines=Ergänzende Attribute (in Bestellungszeile)
     ExtraFieldsThirdParties=Ergänzende Attribute (Geschäftspartner)
     SendmailOptionNotComplete=Achtung, auf einigen Linux-Systemen, E-Mails von Ihrem E-Mail zu senden, sendmail Ausführung Setup muss conatins Option-ba (Parameter mail.force_extra_parameters in Ihre php.ini-Datei). Wenn einige Empfänger niemals E-Mails erhalten, versuchen, diese Parameter mit PHP mail.force_extra_parameters =-ba) zu bearbeiten.
    -AddRefInList=Darstellung Kunden- /Lieferanten- Nr. in Listen (Listbox oder ComboBox) und die meisten von Hyperlinks. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Bevorzugte Kontaktmethode bei Partnern fragen.
    -PasswordGenerationNone=Keine automatische Passwortvorschläge, das Passwort muss manuell eingegeben werden.
     HRMSetup=HRM Modul Einstellungen
    -CompanyIdProfChecker=Berufs-Identifikation einzigartige
     SuggestPaymentByRIBOnAccount=Zahlung per Lastschrift vorschlagen
     SuggestPaymentByChequeToAddress=Zahlung per Scheck vorschlagen
     SupplierPaymentSetup=Lieferantenzahlungen einrichten
    @@ -213,23 +169,15 @@ MemcachedNotAvailable=Kein Cache Anwendung gefunden. \nSie können die Leistung
     MemcachedModuleAvailableButNotSetup=Module memcached für applicative Cache gefunden, aber Setup-Modul ist nicht vollständig.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled..
     ServiceSetup=Leistungen Modul Setup
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Wenn Sie eine grosse Anzahl von Produkten (> 100.000) haben, können Sie die Geschwindigkeit verbessern, indem Sie in Einstellungen -> Andere die Konstante PRODUCT_DONOTSEARCH_ANYWHERE auf 1 setzen. Die Suche startet dann am Beginn des Strings.
     SetDefaultBarcodeTypeThirdParties=Standard-Barcode-Typ für Geschäftspartner
     UseUnits=Definieren Sie eine Masseinheit für die Menge während der Auftrags-, Auftragsbestätigungs- oder Rechnungszeilen-Ausgabe
     ErrorUnknownSyslogConstant=Konstante %s ist nicht als Protkoll-Konstante definiert
     FCKeditorForCompany=WYSIWIG Erstellung/Bearbeitung der Firmennformationen und Notizen (ausser Produkte/Services)
     FCKeditorForMail=WYSIWYG Erstellung/Bearbeitung für gesamte Mail (ausser Werkzeuge->Massenmaling)
    -IfYouUsePointOfSaleCheckModule=Wenn Sie ein Point of Sale-Modul (POS-Modul Standard oder andere externe POS-Module) verwenden, kann diese Einstellung von Ihrem Point Of Sale-Modul übersteuert werden. \nDie meisten POS -Module wurden entwickelt, um sofort eine Rechnung zu erstellen und das Lager standardmässig zu verringern, egal welche Optionen hier ausgewählt wurde. \nAlso, wenn Sie während einem Verkauf einen Lagerabgang in Ihrem Point of Sale möchten oder nicht, so müssen sie auch die Konfiguration des POS-Modules überprüfen.
     DetailTitre=Menübezeichner oder Bezeichnungs-Code für Übersetzung
     DetailLangs=Sprachdateiname für Bezeichnungsübersetzung
     OptionVatMode=MwSt. fällig
    -SummaryOfVatExigibilityUsedByDefault=Standardmässiger Zeitpunkt der MwSt.-Fälligkeit in Abhängigkeit zur derzeit gewählten Option:
    -ClickToDialUseTelLinkDesc=Verwenden Sie diese Methode wenn ein Softphone oder eine andere Telefonielösung auf dem Computer ist. Es wird ein "tel:" Link generiert. Wenn Sie eine Serverbasierte Lösung benötigen, setzen Sie dieses Feld auf Nein und geben die notwendigen Daten im nächsten Feld ein.
    -CashDeskThirdPartyForSell=Standardgeschäftspartner für Kassenverkäufe
    -StockDecreaseForPointOfSaleDisabled=Lagerrückgang bei Verwendung von Point of Sale deaktivert
     BookmarkSetup=Lesezeichenmoduleinstellungen
    -BookmarkDesc=Dieses Modul ermöglicht die Verwaltung von Lesezeichen. Ausserdem können Sie hiermit Verknüpfungen zu internen und externen Seiten im linken Menü anlegen.
     NbOfBoomarkToShow=Maximale Anzeigeanzahl Lesezeichen im linken Menü
     ApiSetup=API-Modul-Setup
     ChequeReceiptsNumberingModule=Checknumerierungsmodul
    @@ -244,7 +192,6 @@ MailToSendProposal=Angebote Kunde
     MailToSendIntervention=Arbeitseinsätze
     MailToThirdparty=Geschäftspartner
     ModelModulesProduct=Vorlage für Produktdokumente
    -ToGenerateCodeDefineAutomaticRuleFirst=Um automatisch Barcodenummern zu generieren, muss zuerst ein Nummerierungmodul im Barcodemodul definiert werden.
     SeeSubstitutionVars=Siehe * für eine Liste der Verfügbaren Variablen
     AddRemoveTabs=Tab hinzufügen oder entfernen
     AddBoxes=Box hinzufügen
    @@ -259,5 +206,3 @@ AddOtherPagesOrServices=Andere Seite oder Dienst hinzufügen
     AddModels=Dokument- oder Nummerierungvorlage hinzufügen
     AddSubstitutions=Schlüsselersatzwerte hinzufügen
     ListOfAvailableAPIs=Liste der verfügbaren API's
    -activateModuleDependNotSatisfied=Modul "%s" hängt vom Modul "%s" ab, welches fehlt. Dadurch funktioniert Modul "%1$s" vermutlich nicht richtig. Installieren Sie sicherheitshalber zuerst das Modul "%2$s" oder deaktivieren Sie das Modul "%1$s"
    -CommandIsNotInsideAllowedCommands=Das Kommando ist nicht in der Liste der erlaubten Kommandos, die unter <strong>$dolibarr_main_restrict_os_commands</strong> in der Datei <strong>conf.php</strong> definiert sind.
    diff --git a/htdocs/langs/de_CH/companies.lang b/htdocs/langs/de_CH/companies.lang
    index 244a92b0f58..e949f4d3b90 100644
    --- a/htdocs/langs/de_CH/companies.lang
    +++ b/htdocs/langs/de_CH/companies.lang
    @@ -1,6 +1,5 @@
     # Dolibarr language file - Source file is en_US - companies
     SelectThirdParty=Wähle einen Geschäftspartner
    -MenuNewThirdParty=Neuer Geschäftspartner
     CreateThirdPartyOnly=Geschäftspartner erstellen
     IdThirdParty=Geschäftspartner ID
     IdCompany=Unternehmens ID
    @@ -8,10 +7,6 @@ IdContact=Kontakt ID
     ThirdPartyContacts=Geschäftspartner-Kontakte
     ThirdPartyContact=Geschäftspartner-Kontakt
     AliasNames=Alias-Name (Geschäftsname, Marke, ...)
    -ThirdPartyName=Name des Geschäftspartners
    -ThirdParty=Geschäftspartner
    -ThirdParties=Geschäftspartner
    -ThirdPartyType=Typ des Geschäftspartners
     PostOrFunction=Position
     PhoneShort=Telefon
     No_Email=Keine E-Mail-Kampagnen
    @@ -69,10 +64,7 @@ ContactId=Kontakt ID
     NoContactDefinedForThirdParty=Für diesen Geschäftspartner ist kein Kontakt eingetragen
     NoContactDefined=Kein Kontakt vorhanden
     AddThirdParty=Geschäftspartner erstellen
    -CustomerCode=Kunden-Nummer
    -CustomerCodeShort=Kunden-Nr.
     RequiredIfCustomer=Erforderlich falls Geschäftspartner Kunde oder Interessent ist
    -ListOfThirdParties=Liste der Geschäftspartner
     ShowContact=Zeige Kontaktangaben
     ContactForOrdersOrShipments=Bestellungs- oder Lieferkontakt
     ContactForProposals=Offertskontakt
    @@ -81,8 +73,6 @@ NoContactForAnyOrderOrShipments=Dieser Kontakt ist kein Kontakt für eine Bestel
     NoContactForAnyProposal=Kein Kontakt für Offerte
     NoContactForAnyContract=Kein Kontakt für Verträge
     NoContactForAnyInvoice=Dieser Kontakt ist kein Kontakt für jegliche Rechnung
    -VATIntraCheckableOnEUSite=Überprüfen Sie Intrakommunale MwSt-Website der Europäischen Kommission
    -VATIntraManualCheck=Sie können die Überprüfung auch manuell durchführen <a href="%s" target=Sie können auch manuell die eruopäische Website <a href="%s" target="_blank">%s</a> befragen
     OthersNotLinkedToThirdParty=Andere, nicht mit einem Geschäftspartner verknüpfte Projekte
     TE_GROUP=Grossunternehmen
     ContactNotLinkedToCompany=Kontakt keinem Geschäftspartner zugeordnet
    @@ -91,10 +81,7 @@ ConfirmDeleteFile=Sind Sie sicher dass Sie diese Datei löschen möchten?
     AllocateCommercial=Vertriebsmitarbeiter zuweisen
     Organization=Organisation
     FiscalMonthStart=Ab Monat des Geschäftsjahres
    -YouMustAssignUserMailFirst=Um E-Mail Benachrichtigungen für diesen Benutzer hinzuzufügen müssen Sie zuerst eine Emailadresse beim Benutzer definieren.
     YouMustCreateContactFirst=Sie müssen erst E-Mail-Kontakte beim Geschäftspartner anlegen, um E-Mail-Benachrichtigungen hinzufügen zu können.
    -ThirdPartiesArea=Geschäftspartner- und Kontaktbereich
    -LastModifiedThirdParties=Letzte %s bearbeitete Geschäftspartner
     InActivity=Offen
     OutstandingBillReached=Kreditlimit erreicht
     MergeOriginThirdparty=Geschäftspartner duplizieren (Geschäftspartner, den Sie löschen möchten)
    diff --git a/htdocs/langs/de_CH/errors.lang b/htdocs/langs/de_CH/errors.lang
    index 7eec7013d05..98499bb7706 100644
    --- a/htdocs/langs/de_CH/errors.lang
    +++ b/htdocs/langs/de_CH/errors.lang
    @@ -1,14 +1,13 @@
     # Dolibarr language file - Source file is en_US - errors
     ErrorBadValueForParamNotAString=Ungültiger Wert für ihre Parameter. Das passiert normalerweise, wenn die Übersetzung fehlt.
    +ErrorFailToRenameFile=Konnte die Datei <b>'%s'</b> nicht in <b>'%s'</b> umzubenennen.
     ErrorBadThirdPartyName=Der für den Geschäftspartner eingegebene Name ist ungültig.
     ErrorBadValueForParameter=Ungültiger Wert '%s' für Parameter '%s'
    -ErrorUserCannotBeDelete=Benutzer kann nicht gelöscht werden. Eventuell ist er noch mit Einträgen verknüpft.
     ErrorFieldsRequired=Ein oder mehrere erforderliche Felder wurden nicht ausgefüllt-
     ErrorFileSizeTooLarge=Die Grösse der gewählten Datei übersteigt den zulässigen Maximalwert.
     ErrorSizeTooLongForIntType=Die Grösse überschreitet das Maximum für den Typ 'int' (%s Ziffern maximal)
     ErrorSizeTooLongForVarcharType=Die Grösse überschreitet das Maximum für den Typ 'string' (%s Zeichen maximal)
     ErrorNoValueForCheckBoxType=Bitte Wert für Checkbox-Liste eingeben
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Das Feld <b>%s</b> darf keine Sonderzeichen, Grossbuchstaben und Zahlen enthalten.
     ErrorModuleSetupNotComplete=Das Setup des Moduls scheint unvollständig zu sein. Führen Sie nochmal das Setup aus um das Modul zu vervollständigen.
     ErrorMaxNumberReachForThisMask=Maximum Grösse für diese Maske erreicht
     ErrorProdIdAlreadyExist=%s wurde bereits einem Geschäftspartner zugewiesen
    @@ -19,6 +18,5 @@ ErrorFileMustHaveFormat=Datei muss das Format %s haben
     ErrorsThirdpartyMerge=Die zwei Einträge können nicht zusammengeführt werden. Aktion abgebrochen.
     WarningBookmarkAlreadyExists=Ein Lesezeichen mit diesem Titel oder Ziel (URL) existiert bereits.
     WarningPassIsEmpty=Warnung: Derzeit ist kein Datenbankpasswort gesetzt. Dies ist eine Sicherheitslücke. Konfigurieren Sie ehestmöglich ein Passwort für den Datenbankzugriff und passen Sie Ihre conf.php entsprechend an.
    -WarningNoDocumentModelActivated=Für das Erstellen von Dokumenten ist keine Vorlage gewählt. Eine Vorlage wird standardmässig ausgewählt, bis Sie die Moduleinstellungen angepasst haben.
     WarningSomeLinesWithNullHourlyRate=Einige Zeiten wurden durch Benutzer erfasst bei denen der Stundenansatz nicht definiert war. Ein Stundenansatz von 0 %s pro Stunde wird verwendet, was aber Fehlerhafte Zeitauswertungen zur Folge haben kann.
     WarningYourLoginWasModifiedPleaseLogin=Ihr Login wurde verändert. Aus Sicherheitsgründen müssen sie sich vor der nächsten Aktion neu anmelden.
    diff --git a/htdocs/langs/de_CH/help.lang b/htdocs/langs/de_CH/help.lang
    index 82480e7b0e3..a4483cd8984 100644
    --- a/htdocs/langs/de_CH/help.lang
    +++ b/htdocs/langs/de_CH/help.lang
    @@ -4,4 +4,3 @@ DolibarrHelpCenter=Hilfe-und Supportcenter
     ToGoBackToDolibarr=Klicken Sie hier um zum System <a href="%s">zurückzukehren</a>
     TypeHelpOnly=Ausschliesslich Hilfe
     TypeHelpDevForm=Hilfe, Entwicklung & Bildung
    -ToGetHelpGoOnSparkAngels2=Gelegentlich ist zum Zeitpunkt Ihrer Suche vielleicht kein Geschäftspartner verfügbar. Denken Sie daran, den Filter auf "Alle verfügbaren" zu setzen. So können Sie mehr Anfragen stellen.
    diff --git a/htdocs/langs/de_CH/interventions.lang b/htdocs/langs/de_CH/interventions.lang
    index 513b4dc96d7..2b891f1576e 100644
    --- a/htdocs/langs/de_CH/interventions.lang
    +++ b/htdocs/langs/de_CH/interventions.lang
    @@ -1,39 +1,59 @@
     # Dolibarr language file - Source file is en_US - interventions
     Intervention=Arbeitseinsatz
     Interventions=Arbeitseinsätze
    -InterventionCard=Kundeneinsatz
    +InterventionCard=Einsatzkarte
     NewIntervention=Neuer Einsatz
     AddIntervention=Einsatz erstellen
    -ListOfInterventions=Liste der Einsätze
    -ActionsOnFicheInter=Aktionen zum Eingriff
    +ListOfInterventions=Liste der Arbeitseinsätze
    +ActionsOnFicheInter=Aktionen zum Einsatz
     LastInterventions=Letzte %s Einsätze
     AllInterventions=Alle Einsätze
    +CreateDraftIntervention=Einsatzentwurf erstellen
    +InterventionContact=Einsatzkontakte / -adressen
     DeleteIntervention=Einsatz löschen
     ValidateIntervention=Einsatz freigeben
    -ModifyIntervention=Geänderte Eingriff
    -DeleteInterventionLine=Eingriffszeile löschen
    +ModifyIntervention=Ändere Einsatz
    +DeleteInterventionLine=Einsatzposition löschen
     CloneIntervention=Einsatz duplizieren
    +ConfirmDeleteIntervention=Bist du sicher, dass du diesen Arbeitseinsatz löschen willst?
    +ConfirmValidateIntervention=Bist du sicher, dass du den Arbeitseinsatz <b>%s</b> freigeben willst?
    +ConfirmModifyIntervention=Bist du sicher, dass du diesen Arbeitseinsatz ändern willst?
    +ConfirmDeleteInterventionLine=Bist du sicher, dass du diese Einsatzposition löschen willst?
    +ConfirmCloneIntervention=Bist du sicher, dass du diesen Einsatz duplizieren willst?
    +NameAndSignatureOfInternalContact=Name und Unterschrift des Mitarbeiters
    +NameAndSignatureOfExternalContact=Name und Unterschrift des Kunden
     DocumentModelStandard=Standard-Dokumentvorlage für Arbeitseinsätze
    -InterventionCardsAndInterventionLines=Einsatzkarte und Einsatzzeilen
    -SendInterventionRef=Einreichung von Eingriffen %s
    -SendInterventionByMail=Eingriff per E-Mail versenden
    -InterventionCreatedInDolibarr=Eingriff %s erstellt
    -InterventionValidatedInDolibarr=Eingriff %s freigegeben
    -InterventionModifiedInDolibarr=Eingriff %s geändert
    -InterventionClassifiedBilledInDolibarr=Eingriff %s als verrechnet eingestuft
    -InterventionClassifiedUnbilledInDolibarr=Eingriff %s als nicht verrechnet eingestuft
    -InterventionDeletedInDolibarr=Eingriff %s gelöscht
    -InterventionsArea=Arbeitseinsätze Übersicht
    -DraftFichinter=Kundeneinsätze Entwürfe
    -LastModifiedInterventions=%s zuletzt bearbietet Einsätze
    -PrintProductsOnFichinter=Drucke auch Produkte (Nicht nur Leistungen) auf Eingriffskarten
    -PrintProductsOnFichinterDetails=Interventionen von Bestellungen generiert
    -InterventionStatistics=Statistik der Einsätze
    -NbOfinterventions=Anzahl Einsatzkarten
    -NumberOfInterventionsByMonth=Anzahl Einsatzkarten pro Monat (Nach Freigabedatum)
    +InterventionCardsAndInterventionLines=Einsatz und Einsatzpositionen
    +InterventionClassifyBilled=Auf "verrechnet" setzten
    +InterventionClassifyUnBilled=Auf "nicht verrechnet" setzen
    +InterventionClassifyDone=Auf "erledigt" setzen
    +StatusInterInvoiced=Verrechnet
    +SendInterventionRef=Einsatz %s einreichen
    +SendInterventionByMail=Einsatz per E-Mail versenden
    +InterventionCreatedInDolibarr=Einsatz %s erstellt
    +InterventionValidatedInDolibarr=Einsatz %s freigegeben
    +InterventionModifiedInDolibarr=Einsatz %s geändert
    +InterventionClassifiedBilledInDolibarr=Einsatz %s auf "verrechnet" gesetzt
    +InterventionClassifiedUnbilledInDolibarr=Einsatz %s auf "nicht verrechnet" gesetzt.
    +InterventionDeletedInDolibarr=Einsatz %s gelöscht
    +InterventionsArea=Arbeitseinsätze
    +DraftFichinter=Einsatzentwürfe
    +LastModifiedInterventions=Die %s zuletzt bearbeitete Einsätze
    +FichinterToProcess=Durchzuführende Einsätze
    +PrintProductsOnFichinter=Drucke auch Produkte (Nicht nur Leistungen) auf Einsatzkarten
    +PrintProductsOnFichinterDetails=Über Bestellungen generierte Einsätze
    +UseServicesDurationOnFichinter=Benutze Servicezeiten für Arbeitseinsätze aus Bestellungen
    +UseDurationOnFichinter=Versteckt das Feld "Dauer" auf der Einsatzkarte
    +UseDateWithoutHourOnFichinter=Versteckt Stunden und Minuten im Datumsfeld von Einsatzkarten
    +InterventionStatistics=Einsatzstatistik
    +AmountOfInteventionNotIncludedByDefault=Der Aufwand für Einsätze ist im Normalfall nicht im Profit eingerechnet. Meistens wird das über die Zeiterfassung geregelt.\nDamit die Einsatz - Aufwände im Profit sichtbar werden, fügst du Unter Einstellungen -> Weitere Einstellungen die Option 'PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT' hinzu und setzest diese auf den Wert 1
     InterId=Einsatz ID
     InterRef=Einsatz Ref.
     InterDateCreation=Erstellungsdatum Einsatz
     InterDuration=Dauer Arbeitseinsatz
    -InterStatus=Einsatz Status
    +InterStatus=Einsatzstatus
     InterNote=Einsatzbeschreibung
    +InterLineId=ID der Einsatzposition
    +InterLineDate=Datum der Einsatzposition
    +InterLineDuration=Dauer der Einsatzposition
    +InterLineDesc=Beschreibung der Einsatzposition
    diff --git a/htdocs/langs/de_CH/main.lang b/htdocs/langs/de_CH/main.lang
    index d99a7bb54a2..ae7e179549d 100644
    --- a/htdocs/langs/de_CH/main.lang
    +++ b/htdocs/langs/de_CH/main.lang
    @@ -19,41 +19,96 @@ FormatDateHourShort=%d.%m.%Y %H:%M
     FormatDateHourSecShort=%d.%m.%Y %H:%M:%S
     FormatDateHourTextShort=%d %b %Y %H:%M
     FormatDateHourText=%d %B %Y %H:%M
    +NoTemplateDefined=Für diesen Emailtyp habe ich keine Vorlage..
     AvailableVariables=Verfügbare Ersatzvariablen
    +NoRecordDeleted=Es wurde kein Datensatz gelöscht
     NotEnoughDataYet=Nicht genügend Daten
    -ErrorCanNotCreateDir=Kann Verzeichnis %s nicht erstellen
    -ErrorFileNotUploaded=Die Datei konnte nicht hochgeladen werden. Stellen Sie sicher dass die Dateigrösse nicht den gesetzten Maximalwert übersteigt, das Zielverzeichnis über genügend freien Speicherplatz verfügt und noch keine Datei mit gleichem Namen existiert.
    -ErrorRecordIsUsedByChild=Kann diesen Eintrag nicht löschen. Dieser Eintrag wird von mindestens einem untegeordneten Datensatz verwendet.
    +NoError=Kein Fehler
    +ErrorFieldRequired=Das Feld '%s' musst du ausfüllen.
    +ErrorFieldFormat=Der Wert im Feld '%s' ist nicht erlaubt
    +ErrorFileDoesNotExists=Hoppla, die Datei %s habe ich nirgends gefunden...
    +ErrorFailedToOpenFile=Ich kann die Datei %s nicht öffnen...
    +ErrorCanNotCreateDir=Ich kann das Verzeichnis %s nicht erstellen...
    +ErrorCanNotReadDir=Ich kann im Verzeichnis %s nicht lesen...
    +ErrorConstantNotDefined=Der Parameter %s wurde nicht definiert.
    +ErrorUnknown=Oha - es ist ein unbekannter Fehler aufgetreten...
    +ErrorSQL=SQL - Fehler
    +ErrorLogoFileNotFound=Ich kann die Logodatei '%s' nicht finden...
    +ErrorGoToGlobalSetup=Bitte behebe das unter Einstellungen -> Firma / Organisation
    +ErrorGoToModuleSetup=Bitte wechsle zu den Einstellungen des Moduls, um das Problem zu beheben.
    +ErrorFailedToSendMail=Ich kann die Email von %s an %s nicht verschicken...
    +ErrorFileNotUploaded=Ich konnte die Datei nicht hochladen. Prüfe, ob Sie zu gross ist, ob der Speicher im Zielverzeichnis voll ist, oder nicht bereits eine Datei mit gleichem Namen dort liegt.
    +ErrorInternalErrorDetected=Oha, es ist ein Fehler aufgetreten...
    +ErrorWrongHostParameter=Der Host Parameter ist leider ungültig
    +ErrorWrongValue=Der Wert ist ungültig...
    +ErrorWrongValueForParameterX=Der Wert des Parameters %s ist leider ungültig.
     ErrorDuplicateField=Dieser Wert ist nicht einzigartig (schon vorhanden)
    -ErrorSomeErrorWereFoundRollbackIsDone=Einige Fehler wurden gefunden. Änderungen rückgängig gemacht.
     ErrorCantLoadUserFromDolibarrDatabase=Kann Benutzer <b>%s</b> nicht aus der Systemdatenbank laden.
     ErrorNoSocialContributionForSellerCountry=Fehler, keine Definition für Sozialabgaben/Steuerwerte definiert für Land '%s'.
    +FileRenamed=Datei erfolgreich umbenannt
    +FileGenerated=Datei erfolgreich erzeugt
    +FileSaved=Datei erfolgreich gespeichert
    +FilesDeleted=Daten erfolgreich gelöscht
     GoToWikiHelpPage=Onlinehilfe (Internetzugang notwendig)
    +DolibarrInHttpAuthenticationSoPasswordUseless=Der Dolibarr Authentifizierungsmodus steht auf <b>%s</b> in der Konfigurationsdatei. Das heisst, dass Änderungen in diesem Feld keine Auswirkung haben werden, weil die Passwort - Datenbank ausserhalb der Dolibarr - Umgebung liegt.
    +PasswordForgotten=Hast du dein Passwort vergessen?
    +NoAccount=Ich habe kein Benutzerkonto
    +LastConnexion=Zuletzt gesehen am:
    +AuthenticationMode=Authentifizierungsmodus
    +RequestedUrl=Angeforderte URL
     RequestLastAccessInError=Letzter Datenbankfehler
     ReturnCodeLastAccessInError=Rückgabewert des letzten Datenbankfehlers
     InformationLastAccessInError=Informationen zum letzten Datenbankfehler
    +YouCanSetOptionDolibarrMainProdToZero=Für weitere Informationen schaust du in der Logdatei nach, oder setzest in der Konfigurationsdatei die Option $dolibarr_main_prod auf '0'.
    +InformationToHelpDiagnose=Diese Informationen helfen dir bei der Fehlersuche. Wenn du das nicht mehr sehen möchtest, setze in der Konfigurationsdatei die Option $dolibarr_main_prod auf '1'.
     MediaBrowser=Mediabrowser
    +SelectedPeriod=Gewählter Zeitraum
    +PreviousPeriod=Vorangegangener Zeitraum
    +NotClosed=Nicht geschlossen
     AddToDraft=Zu Entwurf hinzufügen
     Close=Schliessen
     CloseBox=Box vom Startbildschirm entfernen
    +Resiliate=Abschliessen
     ValidateAndApprove=Freigeben und bestätigen
    +NotValidated=Nicht validiert
    +Hide=Verbergen
     Valid=Freigabe
    +ResizeOrCrop=Skalieren oder Beschneiden
    +NewObject=Erzeuge %s
    +Model=Dokumentenvorlage
    +DefaultModel=Standardvorlage
     Connection=Anmeldung
     DateToday=Aktuelles Datum
     DateStart=Startdatum
     DateEnd=Enddatum
     DateModificationShort=Änd.Datum
    +DateLastModification=Zuletzt geändert am
     DateClosing=Schliessungsdatum
     DateOperationShort=Ausf.Datum
    +RegistrationDate=Benutzer registriert am
    +UserCreation=Benutzer erzeugt am
    +UserModification=Zuletzt bearbeitet am
    +UserValidation=Benutzer validieren
    +UserCreationShort=Neu
    +UserModificationShort=Ändern
    +UserValidationShort=Validieren
     MinuteShort=min
    +CurrencyRate=Wechselkurs
    +UserAuthor=Erstellt von
    +UserModif=Zuletzt geändert durch
    +PriceCurrency=Währung
    +UnitPriceHTCurrency=Nettopreis
     PriceUTTC=E.P. (inkl. Steuern)
    +AmountInvoiced=Verrechneter Betrag
     AmountHT=Betrag (exkl. MwSt.)
     AmountVAT=MwSt.-Betrag
    +MulticurrencyRemainderToPay=Offener Betrag in Originalwährung
     MulticurrencyAmountHT=Nettobetrag, in Währung
     MulticurrencyAmountTTC=Bruttobetrag, in Währung
     MulticurrencyAmountVAT=Steuerbetrag, in Währung
     AmountLT1=MwSt.-Betrag 2
     AmountLT2=MwSt.-Betrag 3
    +PriceQtyMinHTCurrency=Staffelpreise in Originalwährung
     Percentage=Prozentangabe
     TotalHTShortCurrency=Totalbetrag (In Währung)
     TotalTTCShort=Totalbetrag (inkl. MwSt.)
    @@ -64,57 +119,144 @@ TotalTTCToYourCredit=Bruttosumme
     TotalVAT=MwSt.
     TotalLT1=Gesamte MwSt. 2
     TotalLT2=Gesamte MwSt. 3
    +INCVATONLY=Inkl MWST
    +INCT=Inkl alle Steuern
     VAT=MwSt.
    +VATINs=IGST
    +LT1=MWST Satz 2
    +LT1Type=MWST 2 Typ
    +LT2=MWST Satz 3
    +LT2Type=MWST 3 Typ
    +VATCode=MWST Code
    +VATNPR=NPR Steuersatz
    +DefaultTaxRate=Standard Steuersatz
    +RemainToPay=Offener Betrag
    +Module=Modul / Applikation
    +Modules=Module / Applikationen
     Ref=Nummer
    +RefSupplier=Lieferantennummer
     RefPayment=Zahlungs-Nr.
     ActionsToDo=unvollständige Ereignisse
     ActionsToDoShort=Zu erledigen
     ActionRunningNotStarted=Nicht begonnen
    +ActionRunningShort=In Bearbeitung
    +LatestLinkedEvents=Die neuesten %s verknüpften Vorgänge
    +CompanyFoundation=Firma / Organisation
    +Accountant=Berater
     ContactsForCompany=Ansprechpartner/Adressen dieses Geschäftspartners
     ContactsAddressesForCompany=Ansprechpartner / Adressen zu diesem Geschäftspartner
     AddressesForCompany=Adressen für den Geschäftspartner
     ActionsOnCompany=Ereignisse zu diesem Geschäftspartner
    +ActionsOnProduct=Vorgänge zu diesem Produkt
     ToDo=Zu erledigen
    +Running=In Bearbeitung
     Generate=Erstelle
    +NoOpenedElementToProcess=Keine offenen Aktionen
    +OtherInformations=Weitere Informationen
     Refused=zurückgewiesen
     Validated=Freigegeben
     Opened=Offen
     Size=Grösse
    +OriginalSize=Originalgrösse
     ByCompanies=Von Geschäftspartnern
    -LateDesc=Die anzahl Tage die einen Datensatz verspätet markiert, hängt von ihren Einstellungen ab. Fragen sie den Administrator umd die Einstellung unter Home-Setup-Alerts zu ändern.
    +ByUsers=Nach Benutzer
    +NoneOrSeveral=Keine oder einige
    +NoItemLate=Es gibt keine verspätete Artikel
    +LoginEmail=Benutzer Email - Adresse
    +LoginOrEmail=Benutzername oder Email - Adresse
    +EnterLoginDetail=Gib die Zugangsdaten ein
    +JoinMainDoc=Führe das Hauptdokument zusammen.
     Keyword=Stichwort
    +Origin=Herkunft
     NbOfThirdParties=Anzahl der Geschäftspartner
     NbOfObjectReferers=Anzahl verknüpfter Objekte
     Referers=Verknüpfte Objekte
     Uncheck=nicht gewählt
    +ShowSupplierPreview=Zeige Vorschau
    +SeeAll=Zeige alles an
     CloseWindow=Fenster schliessen
     SendAcknowledgementByMail=Bestätigungsemail senden
     NoMobilePhone=Kein Mobiltelefon
    -YouCanSetDefaultValueInModuleSetup=Standardwerte für neue Datensätzen können im Modulsetup eingestellt werden
    +ValueIsNotValid=Der Wert ist leider ungültig.
    +RecordCreatedSuccessfully=Eintrag erfolgreich erstellt
    +RecordsModified=%s Einträge geändert
    +RecordsDeleted=%s Einträge gelöscht
    +CompleteOrNoMoreReceptionExpected=Vollständig oder keine Aktionen mehr erwartet
    +YouCanChangeValuesForThisListFromDictionarySetup=Du kannst die Werte für diese Liste in Einstellungen -> Wörterbücher anpassen.
    +YouCanChangeValuesForThisListFrom=Du kannst die Werte für diese Liste im Menu %s einstellen.
     CurrentTheme=Aktuelle Oberfläche
    +DateOfSignature=Unterschriftsdatum
    +FreeZone=Nicht hinterlegte Position vom Typ
    +FreeLineOfType=Nicht hinterlegte Position vom Typ
    +DocumentModelStandardPDF=Standardvorlage (PDF)
    +CoreErrorMessage=Hoppla, es ist ein Fehler aufgetreten. Dein Administrator kann mehr herausfinden, indem er die Logdateien durchgeht (oder in der Systemkonfiguration $dolibarr_main_prod auf '0' setzen)
     CreditCard=Kreditkarte
    -FieldsWithIsForPublic=Felder mit <b>%s</b> sind für Mitglieder öffentlich sichtbar. Über die "Öffentlich"-Checkbox können Sie dies ändern.
    +CreditOrDebitCard=Kredit- oder Debitkarte
    +LinkToProposal=Verknüpftes Angebot
    +LinkToInvoice=Verknüpfte Rechnung
    +LinkToSupplierOrder=Verknüpfte Lieferantenbestellung
    +LinkToSupplierProposal=Verknüpftes Lieferantenangebot
    +LinkToSupplierInvoice=Verknüpfte Lieferantenrechnung
    +LinkToContract=Verknüpfter Vertrag
    +LinkToIntervention=Verknüpfter Arbeitseinsatz
    +EditWithTextEditor=Mit Nur-Text Editor bearbeiten
    +EditHTMLSource=HTML Quelltext bearbeiten
     ByMonthYear=Von Monat / Jahr
    -AdminTools=Adminwerkzeuge
     SelectAction=Aktion auswählen
    +SelectTargetUser=Wähle den Benutzer / Mitarbeiter
    +ShowMoreLines=Mehr oder weniger Positionen anzeigen
    +SelectElementAndClick=Wähle etwas aus und klicke dann auf %s
    +ShowTransaction=Zeige die Transaktion auf dem zugehörigen Bankkonto.
     ShowIntervention=Zeige Kundeneinsatz
    +ListOf=Liste der %s
    +GoodBye=Auf Wiedersehen!
     Sincerely=Mit freundlichen Grüssen
    +ConfirmDeleteLine=Willst du diese Position wirklich löschen?
    +NoPDFAvailableForDocGenAmongChecked=Für die gewählten Einträge kann ich kein Dokument erstellen, weil die PDFs dazu fehlen.
    +TooManyRecordForMassAction=Zu viele Datensätze für Massenaktion ausgewählt. Die Aktion ist auf maximal %s Datensätze limitiert.
    +NoRecordSelected=Hoppla, du hast keine Einträge ausgewählt...
     MassFilesArea=Bereich für Dateien, die durch Massenaktionen erstellt werden
     ShowTempMassFilesArea=Bereich für Dateien anzeigen, die durch Massenaktionen erstellt wurden
     ClassifyBilled=Verrechnet
    +ClassifyUnbilled=Auf "Nicht verrechnet" setzen
     Progress=Fortschritt
     BackOffice=Dolibarr
    +ExportFilteredList=Exportiere gefilterte Positionen
    +ExportList=Exportiere Positionen
     Calendar=Kalender
    +GroupBy=Sortieren nach
    +ViewFlatList=Einfache Liste anzeigen
    +RemoveString=Entferne die Zeichenfolge '%s'
    +DirectDownloadLink=Direkter externer Downloadlink
    +DirectDownloadInternalLink=Direkter Downloadlink, wenn eingeloggt und die Rechte vorhanden sind.
    +ActualizeCurrency=Aktualisiere Währung
    +SetMultiCurrencyCode=Setze Währung
    +BulkActions=Stapelverarbeitungen
    +ClickToShowHelp=Clicke hier für Kontexthilfe.
     WebSite=Website
    +WebSites=Webseiten
    +WebSiteAccounts=Webseitenkonten
     ExpenseReports=Spesenrapporte
    -EMailTemplates=Textvorlagen für Emails
    +AutomaticallyCalculated=Automatisch generiert
    +TitleSetToDraft=In Entwurfsstatus setzen
    +LineNb=Position Nr.
     ShortTuesday=D
     ShortWednesday=M
     ShortThursday=D
    +SelectMailModel=Wähle deine Email - Vorlage
    +Select2ResultFoundUseArrows=Ich habe mehrere Resultate gefunden - wähle mit den Pfeiltasten aus.
     Select2Enter=Eingabe
    +Select2MoreCharactersMore=<strong>Suchsyntax:</strong><br><kbd><strong> |</strong></kbd><kbd> OR</kbd> (a|b)<br><kbd><strong>*</strong></kbd><kbd> Alle Zeichen</kbd> (a*b)<br><kbd><strong>^</strong></kbd><kbd> Beginnt mit</kbd> (^ab)<br><kbd><strong>$</strong></kbd><kbd> Endet mit</kbd> (ab$)<br>
     SearchIntoThirdparties=Geschäftspartner
     SearchIntoCustomerProposals=Angebote Kunde
     SearchIntoInterventions=Arbeitseinsätze
     SearchIntoCustomerShipments=Kundenlieferungen
     SearchIntoExpenseReports=Spesenrapporte
    -SearchIntoLeaves=Ferien
    +NbComments=Anzahl Kommentare
    +CommentPage=Kommentare
    +CommentDeleted=Kommentar entfernt
    +Quarterly=Vierteljährlich
    +Remote=Entfernt
    +LocalAndRemote=Lokal und Entfernt
    +KeyboardShortcut=Tastaturkürzel
    +Deletedraft=Lösche den Entwurf
    diff --git a/htdocs/langs/de_CH/other.lang b/htdocs/langs/de_CH/other.lang
    index 6f70fab1b47..ddcebd06927 100644
    --- a/htdocs/langs/de_CH/other.lang
    +++ b/htdocs/langs/de_CH/other.lang
    @@ -1,11 +1,10 @@
     # Dolibarr language file - Source file is en_US - other
     NumberingShort=Nr
     MessageKO=Nachrichtenseite für abgebrochene Zahlung
    -Notify_FICHINTER_ADD_CONTACT=Kontakt zu Einsatz hinzugefügt
    -Notify_FICHINTER_VALIDATE=Eingriff freigegeben
    -Notify_FICHINTER_SENTBYMAIL=Service per E-Mail versendet
     Notify_COMPANY_SENTBYMAIL=Von Geschäftspartner-Karte gesendete Mails
     Notify_FICHEINTER_VALIDATE=Eingriff freigegeben
    +Notify_FICHINTER_ADD_CONTACT=Kontakt zu Einsatz hinzugefügt
    +Notify_FICHINTER_SENTBYMAIL=Service per E-Mail versendet
     TotalSizeOfAttachedFiles=Gesamtgrösse der angehängten Dateien/Dokumente
     MaxSize=Maximalgrösse
     ChooseYourDemoProfil=Bitte wählen Sie das Demo-Profil das Ihrem Einsatzgebiet am ehesten entspricht
    @@ -15,7 +14,6 @@ FeaturesSupported=Unterstützte Funktionen
     SizeUnitfoot=Fuss
     EnableGDLibraryDesc=Für den Einsatz dieser Option installieren, bzw. aktivieren Sie bitte die GD-Library.
     ProfIdShortDesc=<b>Prof ID %s</b> dient zur Speicherung landesabhängiger Geschäftspartnerdaten. <br> Für das Land <b>%s</b> ist dies beispielsweise Code <b>%s</b>.
    -EMailTextInterventionAddedContact=Ein neuer Einsatz %s wurde ihnen zugeteilt.
     EMailTextInterventionValidated=Service %s wurde freigegeben
     NewSizeAfterCropping=Neue Grösse nach dem Zuschneiden
     DefineNewAreaToPick=Definieren Sie einen neuen Bereich innerhalb des Bildes (Klicken Sie mit der linken Maustaste auf das Bild und halten Sie bis zur gegenüberligenden Ecke)
    diff --git a/htdocs/langs/de_CH/projects.lang b/htdocs/langs/de_CH/projects.lang
    index 0db8351335a..4d83b17d2bd 100644
    --- a/htdocs/langs/de_CH/projects.lang
    +++ b/htdocs/langs/de_CH/projects.lang
    @@ -8,7 +8,6 @@ TimeSpentByYou=Dein Zeitaufwand
     MyProjectsArea=Mein Projektbereich
     GoToListOfTimeConsumed=Zur Stundenaufwandsliste wechseln
     GoToListOfTasks=Zur Aufgabenliste gehen
    -ListFichinterAssociatedProject=Liste Eingriffe, die mit diesem Projekt verknüpft sind
     ChildOfProjectTask=Kindelement von Projekt/Aufgabe
     CloseAProject=Projekt schliessen
     ProjectsDedicatedToThisThirdParty=Mit diesem Geschäftspartner verknüpfte Projekte
    @@ -17,4 +16,3 @@ ThisWillAlsoRemoveTasks=Diese Aktion löscht ebenfalls alle Aufgaben zum Projekt
     CloneTaskFiles=Aufgabe (n) clonen beigetreten Dateien (falls Aufgabe (n) geklont)
     ProjectReferers=Verknüpfte Objekte
     ResourceNotAssignedToTheTask=Nicht der Aufgabe zugewiesen
    -OpportunityPonderatedAmount=Verkaufschancen geschätzer Betrag
    diff --git a/htdocs/langs/de_DE/admin.lang b/htdocs/langs/de_DE/admin.lang
    index d9314912660..315bf621265 100644
    --- a/htdocs/langs/de_DE/admin.lang
    +++ b/htdocs/langs/de_DE/admin.lang
    @@ -12,7 +12,7 @@ VersionRecommanded=Empfohlen
     FileCheck=Dateien Integritätsprüfung
     FileCheckDesc=Dieses Tool ermöglicht es Ihnen, die Integrität von Dateien und das Setup der Anwendung zu überprüfen, indem jede Datei mit den offiziellen Versionen verglichen wird. Der Wert einiger Setup-Konstanten kann auch überprüft werden. Sie können dieses Tool z.B. verwenden, um festzustellen, ob Dateien von einem Hacker geändert wurden.
     FileIntegrityIsStrictlyConformedWithReference=Datei-Integrität entspricht genau der Referenz.
    -FileIntegrityIsOkButFilesWereAdded=Datei-Integrität bestätigt, allerdings wurden zusätzliche Dateien gefunden.
    +FileIntegrityIsOkButFilesWereAdded=Die Dateiintegritätsprüfung wurde bestanden, jedoch wurden einige neue Dateien hinzugefügt.
     FileIntegritySomeFilesWereRemovedOrModified=Datei-Integrität konnte NICHT bestätigt werden. Dateien wurden modifiziert, entfernt oder zugefügt.
     GlobalChecksum=globale Prüfsumme
     MakeIntegrityAnalysisFrom=Mache Integrität Analyse von Anwendungsdateien aus
    @@ -30,12 +30,12 @@ SessionSaveHandler=Session Handler
     SessionSavePath=Pfad für Sitzungsdatenspeicherung
     PurgeSessions=Bereinigung von Sessions
     ConfirmPurgeSessions=Wollen Sie wirklich alle Sitzungen beenden ? Dadurch werden alle Benutzer getrennt (ausser Ihnen)
    -NoSessionListWithThisHandler=Anzeige aller aktiven Sitzungen mit Ihrer PHP-Konfiguration nicht möglich.
    +NoSessionListWithThisHandler=Anzeige der aktiven Sitzungen mit Ihrer PHP-Konfiguration nicht möglich. 
     LockNewSessions=Keine neuen Sitzungen zulassen
     ConfirmLockNewSessions=Möchten Sie wirklich alle Sitzungen bis auf Ihre eigene blockieren? Nur Benutzer <b>%s</b> kann danach noch eine Verbindung aufbauen.
     UnlockNewSessions=Sperrung neuer Sitzungen aufheben
     YourSession=Ihre Sitzung
    -Sessions=Benutzer-Sessions
    +Sessions=Benutzersitzungen
     WebUserGroup=WebServer Benutzer/Gruppen
     NoSessionFound=Ihre PHP -Konfiguration scheint keine Liste aktiver Sitzungen zuzulassen. Eventuell ist die Speicherung im Verzeichnis (<b>%s</b>) aktiviert und fehlerhafte Dateizugriffsberechtigungen blockieren den Zugriff (z.B. open_basedir-Beschränkungen).
     DBStoringCharset=Zeichensatz der Datenbank-Speicherung
    @@ -50,7 +50,7 @@ ExternalUser=Externer Benutzer
     InternalUsers=Interne Benutzer
     ExternalUsers=Externe Benutzer
     GUISetup=Anzeige
    -SetupArea=Einstellungen - Übersicht
    +SetupArea=Einstellungen
     UploadNewTemplate=Neue Vorlage(n) hochladen
     FormToTestFileUploadForm=Formular für das Testen von Datei-Uploads (je nach Konfiguration)
     IfModuleEnabled=Anmerkung: Ist nur wirksam wenn Modul <b>%s</b> aktiviert ist
    @@ -69,7 +69,7 @@ DisableJavascript=JavaScript- und Ajax-Funktionen deaktivieren (empfohlen für B
     UseSearchToSelectCompanyTooltip=Wenn Sie eine große Anzahl von Partnern (> 100.000) haben, können Sie die Geschwindigkeit verbessern, indem Sie in Einstellungen -> Andere die Konstante COMPANY_DONOTSEARCH_ANYWHERE auf 1 setzen. Die Suche startet dann am Beginn des Strings.
     UseSearchToSelectContactTooltip=Wenn Sie eine große Anzahl von Kontakten (> 100.000) haben, können Sie die Geschwindigkeit verbessern, indem Sie in Einstellungen -> Andere die Konstante CONTACT_DONOTSEARCH_ANYWHERE auf 1 setzen. Die Suche startet dann am Beginn des Strings.
     DelaiedFullListToSelectCompany=Warte auf Tastendruck, bevor der Inhalt der Partner-Combo-Liste geladen wird (Dies kann die Leistung verbessern, wenn Sie eine große Anzahl von Partnern haben).
    -DelaiedFullListToSelectContact=Warte auf Tastendruck, bevor der Inhalt der Kontakt-Combo-Liste geladen wird (Dies kann die Leistung verbessern, wenn Sie eine große Anzahl von Kontakten haben).
    +DelaiedFullListToSelectContact=Warte auf Tastendruck, bevor der Inhalt der Partner-Combo-Liste geladen wird (Dies kann die Leistung verbessern, wenn Sie eine große Anzahl von Partnern haben).
     NumberOfKeyToSearch=Anzahl der Buchstaben um eine Suche auszulösen: %s
     NotAvailableWhenAjaxDisabled=Nicht verfügbar, wenn Ajax deaktiviert
     AllowToSelectProjectFromOtherCompany=Bei den Elementen eines Partners, ist es möglich Projekte von anderen Partnern zu verlinken
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Vorschau nicht verfügbar
     ThemeCurrentlyActive=derzeit aktivierte grafische Oberfläche
     CurrentTimeZone=Aktuelle Zeitzone des PHP-Servers
     MySQLTimeZone=Aktuelle Zeitzone von MySql (Datenbank)
    -TZHasNoEffect=Daten werden vom Datenbank-Server gespeichert und zurückgeliefert, als würde der eingegebene String abgelegt werden. Die Zeitzone hat nur dann eine Auswirkung, wenn die UNIX_TIMESTAMP-Funktion benutzt wird (Dolibarr nutzt diese nicht, daher sollte die Datenbank-TZ keine Rolle spielen, selbst wenn diese nach Dateneingabe geändert wird).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Platz
     Table=Tabelle
     Fields=Felder
    @@ -126,8 +126,8 @@ PHPTZ=Zeitzone der PHP-Version
     DaylingSavingTime=Sommerzeit (Benutzer)
     CurrentHour=PHP-Zeit (Server)
     CurrentSessionTimeOut=Aktuelle Session timeout
    -YouCanEditPHPTZ=Um eine andere PHP-Zeitzone zu setzen (nicht erforderlich), können Sie eine .htaccess-Datei mit einer Zeile wie  "SetEnv TZ Europe / Paris" erstellen.
    -HoursOnThisPageAreOnServerTZ=Warnung: Im Gegensatz zu anderen Darstellungen, sind Stunden auf dieser Seite nicht in Ihrer lokalen Zeitzone, sondern in der Zeitzone des Servers.
    +YouCanEditPHPTZ=Um eine andere PHP Zeitzone einzustellen (optional), ist es auch möglich eine Zeile, bspw. "SetEnv TZ Europe/Paris", in der Datei .htaccess hinzuzufügen.
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Box
     Boxes=Boxen
     MaxNbOfLinesForBoxes=Maximale Zeilenanzahl in Boxen\n
    @@ -191,28 +191,28 @@ IgnoreDuplicateRecords=Doppelte Zeilen Fehler ignorieren (INSERT IGNORE)
     AutoDetectLang=Automatische Erkennung (Browser-Sprache)
     FeatureDisabledInDemo=Funktion in der Demoversion deaktiviert
     FeatureAvailableOnlyOnStable=Diese Funktion steht nur in offiziellen stabilen Versionen zur Verfügung
    -BoxesDesc=Boxen sind auf einigen Seiten angezeigte Informationsbereiche. Sie können die Anzeige einer Box einstellen, indem Sie auf die Zielseite klicken und 'Aktivieren' wählen. Zum Ausblenden einer Box klicken Sie einfach auf den Papierkorb.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Nur Elemente aus <a href="%s">aktiven Module</a> werden angezeigt.
    -ModulesDesc=Die Module bestimmen, welche Funktionalität in Dolibarr verfügbar ist. Manche Module erfordern zusätzlich Berechtigungen die Benutzern zugewiesen werden muss, nachdem das Modul aktiviert wurde. \nKlicken Sie auf die Schaltfläche on/off, um ein Modul/Anwendung zu aktivieren.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Sie finden weitere Module auf externen Web-Sites...
    -ModulesDeployDesc=Wenn die Rechte Ihres Dateisystems es zulassen, können Sie mit diesem Werkzeug ein externes Modul installieren. Es wird dann im Reiter <strong>%s</strong> erscheinen.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Suche externe Module
     ModulesDevelopYourModule=Eigene App/Modul entwickeln
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=Sie können ihre eigenen Module programmieren oder einen Partner finden der die Module für sie programmiert
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Neu
     FreeModule=Frei
     CompatibleUpTo=Kompatibel mit Version %s
    -NotCompatible=This module does not seem compatible with your Dolibarr %s (Min %s - Max %s).
    -CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s).
    +NotCompatible=Dieses Modul scheint nicht mit Ihrere Dolibarr Version %skompatibel zu sein. (Min %s - Max %s).
    +CompatibleAfterUpdate=Dieses Modul benötigt ein Upgrade Ihrere Dolibarr Installation %s ( Min %s - Max %s).
     SeeInMarkerPlace=Siehe Marktplatz
     Updated=Aktualisiert
     Nouveauté=Neuheit
     AchatTelechargement=Kaufen / Herunterladen
     GoModuleSetupArea=Um ein neues Modul zu installieren, gehen Sie auf die Modul-Setup Seite <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, der offizielle Marktplatz für dolibarr Module/Erweiterungen
    -DoliPartnersDesc=Firmenliste die Kundenspezifische Module oder Funktionen entwickeln. (Hinweis: Jedermann mit PHP Erfahrung kann Kundenspezifische Funktionen für Opensource Projekte Entwickeln)
    -WebSiteDesc=Anbieter für weitere Module...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=Externe Webseiten mit zusätzlichen Add-on (nicht zum Grundumfang gehörend) Modulen ...
     DevelopYourModuleDesc=Lösungen um eigene Module zu entwickeln...
     URL=Link
     BoxesAvailable=Verfügbare Boxen
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Passwörter in der Datenbank nicht im Klartext speichern
     MainDbPasswordFileConfEncrypted=Datenbankpasswort in der Konfigurationsdatei verschlüsselt speichern (Empfohlene Einstellung)
     InstrucToEncodePass=Um das Kennwort in der Konfigurationsdatei <b>conf.php</b> verschlüsselt zu speichern, ersetzen Sie die Zeile <br><b>$dolibarr_main_db_pass="...";</b><br>durch<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Um das Kennwort unverschlüsselt (im Klartext) in der Konfigurationsdatei <b>conf.php</b> zu speichern, ersetzen Sie die Zeile<br><b>$dolibarr_main_db_pass="crypted:...";</b><br>durch<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=PDF-Dokumentschutz aktivieren (Die Aktivierung ist nicht empfohlen, weil dadurch die Stapelerzeugung von PDFs nicht mehr funktioniert)
    +ProtectAndEncryptPdfFiles=Dokumentenschutz für erzeugte PDFs - wird NICHT empfohlen (verhindert die Stapelerzeugung von PDFs)
     ProtectAndEncryptPdfFilesDesc=Die Aktivierung des PDF-Dokumentschutzes erhält die Lesbarkeit und Druckfähigkeit des Dokuments, Bearbeitung und Kopien sind jedoch nicht mehr möglich. Bitte beachten Sie, dass nach Aktivierung dieser Funktion auch die Stapelverarbeitung von PDF-Dokumenten (z.B. alle offenen Rechnungen zusammenführen) nicht mehr funktioniert.
     Feature=Funktion
     DolibarrLicense=Lizenz
    @@ -246,8 +246,8 @@ ExternalResources=Externe Resourcen
     SocialNetworks=Soziale Netzwerke
     ForDocumentationSeeWiki=Für Benutzer-und Entwickler-Dokumentation (DOC, ...), FAQs <br> Werfen Sie einen Blick auf die Dolibarr Wiki: <br> <a href="%s" target="_blank"><b> %s</b></a>
     ForAnswersSeeForum=Für alle anderen Fragen, können Sie das Dolibarr Forum: <br> <a href="%s" target="_blank"><b> %s</b></a> benutzen.
    -HelpCenterDesc1=In diesem Bereich erwartet Sie eine Übersicht von Hilfe und Support-Services für Dolibarr.
    -HelpCenterDesc2=Ein Teil dieses Dienstes sind <b>nur</b> in <b>Englisch</b> verfügbar.
    +HelpCenterDesc1=Hier finden Sie eine Übersicht mit einigen Angeboten für Hilfe und Support-Leistungen zu Dolibarr. 
    +HelpCenterDesc2=Einige dieser Angebote sind nur in <b>Englisch</b> verfügbar. 
     CurrentMenuHandler=Aktuelle Menü-Handler
     MeasuringUnit=Maßeinheit
     LeftMargin=Linker Rand
    @@ -262,23 +262,27 @@ NoticePeriod=Kündigungsfrist
     NewByMonth=Neu nach Monat
     Emails=E-Mail
     EMailsSetup=E-Mail Einstellungen
    -EMailsDesc=Auf dieser Seite können Sie Ihre PHP-Parameter für den E-Mail-Versand überschreiben. In den meisten Unix/Linux-Umgebungen mit korrekter PHP-Konfiguration sind diese Einstellungen nutzlos.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Absenderprofil
    -MAIN_MAIL_SMTP_PORT=SMTP-Port (standardmäßig in der php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP-Host (standardmäßig in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT=SMTP(S)-Port  (Standardeintrag in der php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP(S)-Host (Standardeintrag in der php.ini: <b>%s</b>)
     MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS-Port (nicht in PHP definiert in Unix-Umgebungen)
     MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP-Host (nicht in PHP definiert auf Unix-Umgebungen)
    -MAIN_MAIL_EMAIL_FROM=E-Mail-Absender für automatisch erzeugte Mails (standardmäßig in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Senden Sie automatisch eine Blindkopie aller gesendeten Mails an
    -MAIN_DISABLE_ALL_MAILS=Alle E-Mail-Funktionen deaktivieren (für Test- oder Demozwecke)
    -MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Methode zum Senden von E-Mails
    -MAIN_MAIL_SMTPS_ID=SMTP ID, wenn Authentifizierung erforderlich
    -MAIN_MAIL_SMTPS_PW=SMTP Passwort, wenn Authentifizierung erforderlich
    -MAIN_MAIL_EMAIL_TLS= TLS (SSL)-Verschlüsselung verwenden
    -MAIN_MAIL_EMAIL_STARTTLS= TLS (STARTTLS)-Verschlüsselung verwenden
    +MAIN_MAIL_EMAIL_FROM=Absender Email für automatische Emails (Standardwert in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Blindkopie (Bcc) aller gesendeten Emails an
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
    +MAIN_MAIL_FORCE_SENDTO=Sende alle E-Mails an (Anstelle der echten Empfänger, zu Testzwecken)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Sendemethode für Emails
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=TLS (SSL) Verschlüsselung verwenden
    +MAIN_MAIL_EMAIL_STARTTLS=TLS (STARTTLS)-Verschlüsselung verwenden
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
     MAIN_DISABLE_ALL_SMS=Alle SMS-Funktionen abschalten (für Test- oder Demozwecke)
     MAIN_SMS_SENDMODE=Methode zum Senden von SMS
     MAIN_MAIL_SMS_FROM=Standard Versendetelefonnummer der SMS-Funktion
    @@ -292,7 +296,7 @@ ModuleSetup=Moduleinstellung
     ModulesSetup=Modul-/Applikationseinstellung
     ModuleFamilyBase=System
     ModuleFamilyCrm=Kunden-Beziehungs-Management (CRM)
    -ModuleFamilySrm=Vendor Relation Management (VRM)
    +ModuleFamilySrm=Verkäufermanagement (VRM)
     ModuleFamilyProducts=Produktverwaltung (WW)
     ModuleFamilyHr=Personalverwaltung (PM)
     ModuleFamilyProjects=Projektverwaltung/Zusammenarbeit
    @@ -312,12 +316,12 @@ StepNb=Schritt %s
     FindPackageFromWebSite=Finden Sie ein Paket, das die gewünschten Funktionen beinhaltet (zum Beispiel auf der offiziellen Website %s).
     DownloadPackageFromWebSite=Installationspaket herunterladen (z.B. von offizieller Webseite %s).
     UnpackPackageInDolibarrRoot=Entpacke die Paketdatei in das Dolibarr Serververzeichnis für externe Module: <b>%s</b>
    -UnpackPackageInModulesRoot=Um eine externes Modul bereit zu stellen, entpacken Sie die gepackten Dateien in das Serververzeichnis für Module: <b>%s</b>
    -SetupIsReadyForUse=Modul-Installation abgeschlossen, es muss aber noch aktiviert und konfiguriert werden: <a href="%s">%s</a>.
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=Das alternative Stammverzeichnis ist nicht zu einem existierenden Verzeichnis definiert.<br>
     InfDirAlt=Seit Version 3 ist es möglich, ein alternatives Stammverzeichnis anzugeben. Dies ermöglicht, Erweiterungen und eigene Templates am gleichen Ort zu speichern.<br>Erstellen Sie einfach ein Verzeichis im Hauptverzeichnis von Dolibarr an (z.B. "custom").<br>
     InfDirExample=<br>Danach in der Datei <strong>conf.php</strong> deklarieren<br> $dolibarr_main_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>Wenn diese Zeilen mit "#" auskommentiert sind, um sie zu aktivieren, einfach das Zeichen "#" entfernen.
    -YouCanSubmitFile=In diesen Schritt können Sie die .zip-Datei des Modul-Pakets auswählen:
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Aktuelle dolibarr-Version
     CallUpdatePage=Zur Aktualisierung der Daten und Datenbankstrukturen zur Seite %s gehen.
     LastStableVersion=Letzte stabile Version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Werfen Sie einen Blick auf die Wiki-Seite für eine vollständ
     UseACacheDelay= Verzögerung für den Export der Cache-Antwort in Sekunden (0 oder leer für kein Caching)
     DisableLinkToHelpCenter=Link mit "<b>Benötigen Sie Hilfe oder Unterstützung</b>" auf der Anmeldeseite ausblenden
     DisableLinkToHelp=Link zur Online-Hilfe "<b>%s</b>" ausblenden
    -AddCRIfTooLong=Kein automatischer Zeilenumbruch. Entsprechend müssen Sie, falls die Länge Ihrer Zeilen die Dokumentenbreite übersteigt, manuelle Zeilenschaltungen im Textbereich einfügen.
    -ConfirmPurge=Möchten Sie wirklich endgültig löschen ?<br> Alle Dateien werden unwiderbringlich gelöscht (Attachments, Angebote, Rechnungen usw.)
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Mindestlänge
     LanguageFilesCachedIntoShmopSharedMemory=.lang-Sprachdateien in gemeinsamen Cache geladen
     LanguageFile=Sprachdatei
    -ExamplesWithCurrentSetup=Beispiele mit der derzeitigen Systemkonfiguration
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Liste der OpenDocument-Vorlagenverzeichnisse
     ListOfDirectoriesForModelGenODT=Liste der Verzeichnisse mit Vorlagendateien mit OpenDocument-Format.<br><br>Fügen Sie hier den vollständigen Pfad der Verzeichnisse ein.<br>Trennen Sie jedes Verzeichnis mit einer Zeilenschaltung<br>Verzeichnisse des ECM-Moduls fügen Sie z.B. so ein <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br> Dateien in diesen Verzeichnissen müssen mit <b>.odt</b>  oder <b>.ods</b> enden.
    -NumberOfModelFilesFound=Anzahl der in diesen Verzeichnissen gefundenen .odt/.ods-Dokumentvorlagen
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Beispiele für Syntax:<br>c:\\mydir<br>/Home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>Lesen Sie die Wiki Dokumentation um zu wissen, wie Sie Ihre odt Dokumentenvorlage erstellen, bevor Sie diese in den Kategorien speichern:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -370,14 +374,14 @@ ResponseTimeout=Antwort Timeout
     SmsTestMessage=Test Nachricht von __PHONEFROM__ zu __PHONETO__
     ModuleMustBeEnabledFirst=Modul <b>%s</b> muss aktiviert sein wenn Sie dieses Feature benötigen.
     SecurityToken=Schlüssel um die URLs zu entschlüsseln
    -NoSmsEngine=Kein SMS Sende Manager verfügbar. SMS Sende Manager sind nicht installiert (weil diese von externen Lieferanten abhängig sind) aber Sie können welche auf http://www.dolistore.com finden.
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Sie können jede globale Optionen im Zusammenhang mit der PDF-Erzeugung einstellen
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Regeln zum Formen der Adresse-Boxen
    -HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
    +HideAnyVATInformationOnPDF=Alle Informationen zu Steuern und MWSt in generierten PDB ausblenden
     PDFRulesForSalesTax=Regeln für Umsatzsteuer / MwSt.
     PDFLocaltax=Regeln für %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Unterdrücke Produktbeschreibungen in generierten PDF
     HideRefOnPDF=Unterdrücke Produkt-Referenzen in generierten PDF
     HideDetailsOnPDF=Unterdrücke Produktdetailzeilen in generierten PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameter zum Sichern von URLs
     SecurityTokenIsUnique=Verwenden Sie einen eindeutigen Sicherheitsschlüssel für jede URL
     EnterRefToBuildUrl=Geben Sie eine Referenz für das Objekt %s ein
     GetSecuredUrl=Holen der berechneten URL
    -ButtonHideUnauthorized=Buttons für Nicht-Admins ausblenden anstatt auszugrauen ?
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Alter USt.-Satz
     NewVATRates=Neuer USt.-Satz
     PriceBaseTypeToChange=Ändern Sie den Basispreis definierte nach
    @@ -413,14 +417,14 @@ ExtrafieldCheckBox=Kontrollkästchen
     ExtrafieldCheckBoxFromList=Kontrollkästchen aus Tabelle
     ExtrafieldLink=Verknüpftes Objekt
     ComputedFormula=Berechnetes Feld
    -ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    -ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
    +ComputedFormulaDesc=Hier kann eine Formler hinterlegt werden die andere Eigenschaften von Objekten oder PHP Code um dynamischen Werte zu berechnen. Jede PHP kompatible Syntax, inklusive der "?" Bedingung und den folgenden globalen Objekten: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong> können verwendet werden.<br><strong>WARNUNG</strong>: Nur bestimte Eigenschaften der Objekte können verfügbar sein. Falls eine nicht geladene Eigenschaft notwendig ist, kann das Objekt selbst geladen werden, wie im zweiten Beispiel.<br>Bei der Verwendung von berechneten Feldern kann der Benutzer keine eigenen Werte eingeben. Zudem, wenn es einen Syntaxfehler gibt, kann es sein dass die Formel keinen Wert zurückgibt.<br><br>Beispielformel:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Beispiel um ein Objekt erneut zu laden<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Weiteres Beispiel um ein Objekt und das Vaterobjekt zu laden:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
    +ExtrafieldParamHelpselect=Parameterlisten müssen das Format Schlüssel,Wert haben (Der Schlüssel kann nicht '0' sein)<br><br> zum Beispiel:<br>1,Wert1<br>2,Wert2<br>3,Wert3<br>...<br><br>Um die Liste in Abhängigkeit zu einer anderen zu haben:<br>1,Wert1|options_<i>parent_list_code</i>:parent_key<br>2,Wert2|options_<i>parent_list_code</i>:parent_key<br><br>Um Listen in Abhängigkeit zu anderen listen zu haben: <br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=Die Liste muss im Format: Schlüssel, Wert sein (wobei der Schlüssel nicht '0' sein kann) <br> <br> zum Beispiel: <br> 1, Wert1 <br> 2, Wert2 <br> 3, Wert3 <br> ...
     ExtrafieldParamHelpradio=Die Liste muss im Format: Schlüssel, Wert sein (wobei der Schlüssel nicht '0' sein kann) <br> <br> zum Beispiel: <br> 1, Wert1 <br> 2, Wert2 <br> 3, Wert3 <br> ...
    -ExtrafieldParamHelpsellist=List of values comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>- idfilter is necessarly a primary int key<br>- filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntax  extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list:<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
    -ExtrafieldParamHelpchkbxlst=List of values comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntax  extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list :<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
    -ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax : ObjectName:Classpath<br>Examples :<br>Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php
    +ExtrafieldParamHelpsellist=Die Parameterliste stammt aus einer Tabelle<br>Syntax: \ntable_name: label_field: id_field::filter<br>Beispiel: c_typent: libelle:id::filter<br><br>Filter kann ein einfacher Test sein (z.B. active=1) um nur aktive Werte anzuzeigen<br>Benutzen Sie $ID$  für die ID des aktuellen Objekts im Filter<br>Benutzen Sie $SEL$<br>Wenn Sie ein SELECT<br>Benutzen Sie zur Abfrage von Extra-Feldern(Attributen) die extra.fieldcode = ... \n(wo Feldcode ist der Code von extrafield)<br><br>um auf einer anderen komplementären Attributliste, die Liste zu haben je c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter<br>um die Liste zu haben, auf einer anderen Liste abhängig:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter\n
    +ExtrafieldParamHelpchkbxlst=Die Parameterliste stammt aus einer Tabelle <br>:\nSyntax:  table_name:label_field:id_field::filter<br>\nBeispiele: c_typent:libelle:id::filter<br><br> der Filter kann ein einfacher Test sein(z.B. aktiv=1) um nur die aktiven Werte zu zeigen.<br>\nBenutzen Sie $ID$ um die ID des aktuellen Objekts im Filter zu nutzen<br>\nUm ein SELECT in einem Filter zu verwenden, verwenden Sie $SEL$ <br>\nUm in der Abfrage die zusätzlichen Attribute zu filtern, verwenden Sie den Syntax \nextra.fieldcode=... (fieldcode bezeichnet den Feldcode des zusätzlichen Feldes)<br><br>eine Liste abhängig von einem anderen zusätzlichen Attribute anzuzeigen<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter \n<br><br>Um eine Liste anzuzeigen auf einer anderen Liste je <br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
    +ExtrafieldParamHelplink=Parameter müssen folgendes Format haben: ObjektName:Klassenpfad<br>Syntax: ObjektName:Klassenpfad<br> Beispiele:<br>Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php
     LibraryToBuildPDF=Bibliothek zum erstellen von PDF
     LocalTaxDesc=In einigen Ländern gelten zwei oder drei Steuern auf jeder Rechnungszeile. Wenn dies der Fall ist, wählen Sie den Typ für die zweite und dritte Steuer und den Steuersatz. Mögliche Arten sind: <br> 1: Ortsteuer gelten für Produkte und Dienstleistungen, ohne Mehrwertsteuer (Ortssteuer wird ohne Berücksichtigung der MwSt berechnet) <br> 2: Ortssteuer gilt für Produkte und Dienstleistungen mit Mehrwertsteuer (Ortssteuer wird mit Berücksichtigung det MwSt berechnet) <br> 3: Ortstaxe gilt für Produkte ohne Mehrwertsteuer (Ortssteuer wird ohne Berücksichtigung der MwSt berechnet) <br> 4: Ortssteuer gilt für Produkte, mit Mehrwertsteuer (Ortssteuer wird mit Berücksichtigung der MwSt berechnet) <br> 5: Ortssteuer gilt für Dienstleistungen, ohne Mehrwertsteuer (Ortssteuer wird ohne Berücksichtigung der MwSt berechnet) <br> 6: Ortssteuer gilt für Dienstleistungen mit Mehrwertsteuer (Ortssteuer wird mit Berücksichtigung der MwSt berechnet)
     SMS=SMS
    @@ -432,39 +436,39 @@ DefaultLink=Standardlink
     SetAsDefault=Als Standard setzen
     ValueOverwrittenByUserSetup=Achtung, dieser Wert kann durch den Benutzer überschrieben werden (jeder kann seine eigene ClickToDial-URL setzen)
     ExternalModule=Externes Modul - im Verzeichnis %s installiert
    -BarcodeInitForThirdparties=Alle Strichcodes für Drittanbieter initialisieren
    +BarcodeInitForthird-parties=Alle Strichcodes für Drittanbieter initialisieren
     BarcodeInitForProductsOrServices=Alle Strichcodes für Produkte oder Services initialisieren oder zurücksetzen
     CurrentlyNWithoutBarCode=Zur Zeit gibt es <strong>%s</strong> Datensätze in <strong>%s</strong> %s ohne Barcode.
     InitEmptyBarCode=Startwert für die nächsten %s leeren Datensätze
     EraseAllCurrentBarCode=Alle aktuellen Barcode-Werte löschen
     ConfirmEraseAllCurrentBarCode=Wirklich alle aktuellen Barcode-Werte löschen
     AllBarcodeReset=Alle Barcode-Werte wurden entfernt
    -NoBarcodeNumberingTemplateDefined=Im Barcode-Modul wurde kein Numerierungs-Schema aktiviert.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Dateicache aktivieren
     ShowDetailsInPDFPageFoot=Mehr Detailinfos im PDF Fussbereich anzeigen, wie z.B. Ihre Firmenadresse, oder CEO Name (Zusätzlich zur Firmennummer, Firmenart und MWSt Nummer).
     NoDetails=Keine weiteren Details in der Fusszeile
     DisplayCompanyInfo=Firmenadresse anzeigen
     DisplayCompanyManagers=Anzeige Namen der Geschäftsführung
     DisplayCompanyInfoAndManagers=Firmenanschrift und Managernamen anzeigen
    -EnableAndSetupModuleCron=Um wiederkehrende Rechnungen automatisch zu generieren, muss Modul *%s* aktiviert und korrekt eingerichtet sein. Ansonsten müssen die Rechnungen via *Erstellen* Knopf auf dieser Vorlage erstellt werden. Auch wenn die Rechnungen automatisch generiert werden, können trotzdem noch manuelle Rechnungen erstellt werden. Die Perioden werden nicht doppelt in Rechnung gestellt.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Leeren Kontierungscode zurückgeben.
    -ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
    +ModuleCompanyCodeDigitaria=Kontierungscode hängt vom Partnercode ab. Der Code setzt sich aus dem Buchstaben 'C' und den ersten 5 Stellen des Partnercodes zusammen.
     Use3StepsApproval=Standardmäßig, Einkaufsaufträge müssen durch zwei unterschiedlichen Benutzer erstellt und freigegeben werden (ein Schritt/Benutzer zu erstellen und ein Schritt/Benutzer für die Freigabe). Beachten Sie wenn ein Benutzer beide Rechte hat - zum erstellen und freigeben, dann reicht ein Benutzer für diesen Vorgang. Optional können Sie ein zusätzlicher Schritt/User für die Freigabe einrichten, wenn der Betrag einen bestimmten dedizierten Wert übersteigt (wenn der Betrag übersteigt wird, werden 3 Stufen notwendig: 1=Validierung, 2=erste Freigabe und 3=Gegenfreigabe.<br>Lassen Sie den Feld leer wenn eine Freigabe (2 Schritte) ausreicht; Tragen Sie einen sehr niedrigen Wert (0.1) wenn eine zweite Freigabe notwendig ist.
     UseDoubleApproval=3-Fach Verarbeitungsschritte verwenden wenn der Betrag (ohne Steuer) höher ist als ...
    -WarningPHPMail=WARNUNG: Es ist oft besser, für ausgehende E-Mails den E-Mail-Server Ihres Providers anstatt des Standardservers zu verwenden. Einige E-Mail-Provider (wie Yahoo) erlauben Ihnen nicht, eine E-Mail von einem anderen Server als ihrem eigenen Server zu senden. Ihre aktuelle Konfiguration verwendet den Server der Anwendung zum Senden von E-Mails und nicht den Server Ihres E-Mail-Providers. Daher werden einige Empfänger (die mit dem restriktiven DMARC-Protokoll kompatibel sind) Ihren E-Mail-Provider fragen, ob sie Ihre E-Mail annehmen können. Einige Provider (wie Yahoo) werden dann mit "Nein" antworten, weil der Server nicht ihrer ist. Also könnte es sein, dass einige Ihrer gesendeten E-Mails nicht akzeptiert werden (beachten Sie auch die E-Mail-Quota ihres Providers). <br>Wenn Ihr Provider (wie Yahoo) diese Einschränkung hat, müssen Sie das E-Mail-Setup ändern, und die andere Methode "SMTP-Server" auszuwählen und den SMTP-Server mit den von Ihrem E-Mail-Anbieter bereitgestellten Anmeldeinformationen einrichten (fragen Sie Ihren E-Mail-Provider nach SMTP-Zugangsdaten für Ihr Konto).
    -WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
    +WarningPHPMail2=Falls Ihm E-Mailprovider den Zugriff für den Emailclient auf eine IP Adresse einschränken muss (Sehr selten), dann ist dies die IP Adresse für ihr ERP CRM System: <strong>%s</strong>.
     ClickToShowDescription=Klicke um die Beschreibung zu sehen
     DependsOn=Diese Modul benötigt die folgenden Module
     RequiredBy=Diese Modul wird durch folgende Module verwendet
    -TheKeyIsTheNameOfHtmlField=Das ist der Name des HTML Feldes. Sie benötigen HTML Kenntnisse um den Namen des Feldes aus der HTML Seite zu ermitteln.
    -PageUrlForDefaultValues=Hier muss die relative URL der Seite eingegeben werden. Wenn Parameter in der URL angegeben werden, dann werden alle Vorgabewerte auf den gleichen Wert gesetzt. Beispiele:
    -PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +PageUrlForDefaultValuesCreate=<br>Formular um einen neuen Partner zu erstellen ist <strong>%s</strong>,<br>Fall Sie Vorgabewerte via URL angeben wollen, können Sie <strong>%s</strong> verwenden
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Persönliche Standardwerte erlauben
    -EnableOverwriteTranslation=Aktiviere die Verwendung von übersteuerten Übersetzungen
    -GoIntoTranslationMenuToChangeThis=Eine Übersetzung wurde für diesen Schlüssel gefunden, um die Übersetzung anzupassen, gehen Sie in Menü "Home->Setup->Überseztungen"
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warnung: Änderung an der Standardsortierreihenfolge können zu Fehlern führen, falls das betreffende Feld nicht vohanden ist. Falls dies passiert, entfernen sie das betreffende Feld oder stellen die den Defaultwert wieder her.
     Field=Feld
     ProductDocumentTemplates=Dokumentvorlagen zur Erstellung von Produktdokumenten
    @@ -473,19 +477,21 @@ WatermarkOnDraftExpenseReports=Wasserzeichen auf Entwurf von Ausgabenbelegen
     AttachMainDocByDefault=Setzen Sie diesen Wert auf 1, wenn Sie das Hauptdokument standardmäßig per E-Mail anhängen möchten (falls zutreffend).
     FilesAttachedToEmail=Datei hinzufügen
     SendEmailsReminders=Erinnerung per E-Mail versenden
    -davDescription=Add a component to be a DAV server
    -DAVSetup=Setup of module DAV
    -DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +davDescription=Komponente hinzufügen damit der DAV Server aktiviert wird
    +DAVSetup=DAV Modul einrichten
    +DAV_ALLOW_PUBLIC_DIR=Öffentliches Webdav Verzeichnis aktivieren (WebDav Verzeichenis ohne Login)
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Benutzer und Gruppen
    +Module0Name=Benutzer & Gruppen
     Module0Desc=Benutzer / Mitarbeiter und Gruppen Administration
     Module1Name=Partner
     Module1Desc=Partner- und Kontakteverwaltung
     Module2Name=Vertrieb
     Module2Desc=Vertriebsverwaltung
     Module10Name=Buchhaltung
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Angebote
     Module20Desc=Angebotsverwaltung
     Module22Name=E-Mail-Kampagnen
    @@ -497,7 +503,7 @@ Module25Desc=Kundenauftragsverwaltung
     Module30Name=Rechnungen
     Module30Desc=Rechnungs- und Gutschriftsverwaltung für Kunden. Rechnungsverwaltung für Lieferanten
     Module40Name=Lieferanten
    -Module40Desc=Suppliers and purchase management (purchase orders and billing)
    +Module40Desc=Lieferanten und Einkaufsverwaltung (Bestellungen und Lieferantenrechnungen)
     Module42Name=Debug Logs
     Module42Desc=Protokollierungsdienste (Syslog). Diese Logs dienen der Fehlersuche/Analyse.
     Module49Name=Bearbeiter
    @@ -511,13 +517,13 @@ Module52Desc=Produktbestandsverwaltung
     Module53Name=Leistungen
     Module53Desc=Leistungs-Verwaltung
     Module54Name=Verträge/Abonnements
    -Module54Desc=Vertragsverwaltung (Services oder sich wiederholende Abos)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode-Verwaltung
     Module56Name=Telefonie
     Module56Desc=Telefonie-Integration
     Module57Name=Bestellung mit Zahlart Lastschrift
    -Module57Desc=Verwaltung von Lastschrift-Bestellungen. Inklusive SEPA Erzeugung für EU Länder.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=ClickToDial-Integration
     Module59Name=Bookmark4u
    @@ -528,108 +534,112 @@ Module75Name=Spesen- und Reiseaufzeichnungen
     Module75Desc=Reise- und Fahrtspesenverwaltung
     Module80Name=Lieferungen
     Module80Desc=Versand und Lieferauftragsverwaltung
    -Module85Name=Banken und Kassen
    +Module85Name=Bank | Kassa
     Module85Desc=Verwaltung von Bank- oder Bargeldkonten
    -Module100Name=Externe Website
    -Module100Desc=Erlaubt die Einbindung einer externen Website in die Menüs von dolibarr und die Anzeige der Seite innerhalb eines Frames
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman und SPIP
     Module105Desc=Mailman oder SPIP Schnittstelle für die Mitgliedsmodul
     Module200Name=LDAP
    -Module200Desc=LDAP-Verzeichnissynchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke-Integration
     Module240Name=Daten Exporte
    -Module240Desc=Datenexport-Werkzeug (mit einem Assistenten)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Daten Importe
    -Module250Desc=Werkzeug zum Datenimport (mit Assistenten)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Mitglieder
     Module310Desc=Management von Mitglieder einer Stiftung/Vereins
     Module320Name=RSS Feed
     Module320Desc=RSS-Feed-Bildschirm innerhalb des Systems anzeigen
    -Module330Name=Favoriten
    -Module330Desc=Verwalten von Favoriten
    -Module400Name=Projekte / Chancen / Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Lesezeichen und Kurzbefehle
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projekte | Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webkalender
     Module410Desc=Webkalenderintegration
     Module500Name=Steuern und Sonderausgaben
    -Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
    +Module500Desc=Verwalten von weiteren Ausgaben (Steuern, Sozialabgaben, Dividenden, ...)
     Module510Name=Lohnzahlungen
    -Module510Desc=Verwaltung der Angestellten-Löhne und -Zahlungen
    +Module510Desc=Record and track employee payments
     Module520Name=Darlehen
     Module520Desc=Verwaltung von Darlehen
     Module600Name=Benachrichtigungen bei Geschäftsereignissen
    -Module600Desc=Email-Benachrichtigung (ausgelößt durch einige Ereignisse) zu Benutzern (seperate Einstellungen je Benutzer), Partner-Kontakte (seperate Einstellung für jeden Partner) oder festen Email-Adressen.
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Produkt Varianten
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Spenden
     Module700Desc=Spendenverwaltung
     Module770Name=Spesenabrechnungen
    -Module770Desc=Management und Reporting von Reise- und Spesenabrechnungen (Transport, Essen, ...)
    -Module1120Name=Vendor commercial proposal
    -Module1120Desc=Request vendor commercial proposal and prices
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
    +Module1120Name=Lieferantenangebot
    +Module1120Desc=Anfordern von Lieferanten-Angeboten und Preise
     Module1200Name=Mantis
     Module1200Desc=Mantis-Integration
     Module1520Name=Dokumente erstellen
     Module1520Desc=Mailings Dokumente erstellen
     Module1780Name=Kategorien/#tags
    -Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
    +Module1780Desc=Kategorien/Tags erstellen (Produkte, Kunden, Lieferanten, Kontakte oder Mitglieder)
     Module2000Name=FCKeditor
    -Module2000Desc=Bearbeitung von machen Textbereichen mit erweiterten Editor (basierend auf CKEditor) erlauben
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamische Preise
     Module2200Desc=Mathematische Ausdrücke für Preise aktivieren
     Module2300Name=Geplante Aufträge
     Module2300Desc=Verwaltung geplanter Aufgaben (Cron oder chrono Tabelle)
     Module2400Name=Ereignisse/Termine
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / CMS
    -Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
    +Module2500Desc=Speicherung und Verteilung von Dokumenten. Automatische organisation der generierten oder gespeicherten Dokumente. Teilen Sie sie bei Bedarf.
     Module2600Name=API/Webservice (SOAP Server)
     Module2600Desc=Aktivieren Sie Dolibarr SOAP Server,  unterstütztes API-Service.
     Module2610Name=API/Web Services (REST Server)
     Module2610Desc=Aktiviere der Dolibarr REST Serverdienst
     Module2660Name=WebServices aufrufen (SOAP Client)
    -Module2660Desc=Web Service Client von Dolibarr aktivieren (Kann benutzt werde, um Daten/anfragen zu externen Servern zu verschicken. Momentan ist das nur für Bestellungen vorgesehen).
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Verwenden Sie den online Gravatar-Dienst (www.gravatar.com) für die Anzeige von Benutzer- und Mitgliederbildern (Zuordnung über E-Mail-Adressen). Hierfür benötigen Sie eine aktive Internetverbindung
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP-Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind Konvertierung
     Module3100Name=Skype
     Module3100Desc=Skype-Button zu Karten von Benutzer-/Partner-/Kontakt-/Mitglieder-Karten hinzufügen
     Module3200Name=Unveränderliche Archive
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=PV
     Module4000Desc=Personalverwaltung
     Module5000Name=Mandantenfähigkeit
     Module5000Desc=Ermöglicht Ihnen die Verwaltung mehrerer Firmen
     Module6000Name=Workflow
    -Module6000Desc=Workflow management (automatic creation of object and/or automatic status change)
    +Module6000Desc=Workflow Management (Automaitische Erstellung von Objekten und/oder automatische Statusaktualisierungen)
     Module10000Name=Webseiten
    -Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
    +Module10000Desc=Erstelle öffentliche Webseiten mit dem WYSIWYG-Editor.\nDer Webserver (Apache, Nginx, ...) muss auf das Dolibarrverzeichnis verweisen damit ein eigener Domainname verwendet werden kann.
     Module20000Name=Urlaubsantrags-Verwaltung
    -Module20000Desc=Definieren und beobachten sie die Urlaubsanträge Ihrer Angestellten.
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Produkt Chargen
     Module39000Desc=Chargen oder Seriennummer, Haltbarkeitsdatum und Verfallsdatum Management für Produkte
    +Module40000Name=Mehrere Währungen
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Modul um Onlinezahlungen von Debit/Kreditkarten via PayBox entgegennehmen. Ihre Kunden können damit freie Zahlungen machen, oder Dolibarr Objekte (Rechnungen, Bestelltungen...) bezahlen
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Kasse
     Module50100Desc=Modul Point of Sale (POS)\n
    +Module50150Name=Kassen
    +Module50150Desc=Kassenmodul
     Module50200Name=Paypal
    -Module50200Desc=Modul um Online Zahlungen via PayPal entgegenzunehmen. Ihre Kunden können damit freie Zahlungen machen, oder Dolibarr Objekte (Rechnungen, Bestelltungen...) bezahlen
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Buchhaltung (erweitert)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direktdruck (ohne die Dokumente zu öffnen) mittels CUPS IPP (Drucker muss vom Server aus sichtbar sein und auf dem Server muss CUPS installiert sein)
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Befragung, Umfrage oder Abstimmung
    -Module55000Desc=Modul zur Online-Umfragen, Umfragen oder Abstimmungen zu machen (wie Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Gewinnspannen
     Module59000Desc=Modul zur Verwaltung von Gewinnspannen
     Module60000Name=Kommissionen
     Module60000Desc=Modul zur Verwaltung von Kommissionen
    -Module62000Name=Incoterm
    -Module62000Desc=Funktion hinzufügen um Incoterms zu verwalten
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Ressourcen
     Module63000Desc=Verwalte Ressourcen (Drucker, Fahrzeuge, Räume, etc.) für Ereignisse.
     Permission11=Rechnungen einsehen
    @@ -651,9 +661,9 @@ Permission32=Produkte/Leistungen erstellen/bearbeiten
     Permission34=Produkte/Leistungen löschen
     Permission36=Projekte/Leistungen exportieren
     Permission38=Produkte exportieren
    -Permission41=Projekte und Aufgaben lesen (Geteilte Projekte und Projekte in denen ich Kontakt bin).  Es kann auch Zeitaufwand auf zugewiesenen Aufgaben oder via Hierarchie gebucht werden.
    -Permission42=Erstellen und Ändern von Projekten (geteilte Projekte und solche, in denen ich Kontakt bin). Kann auch Aufgaben erstellen und Benutzer dem Projekt und den Aufgaben zuweisen.
    -Permission44=Projekte und Aufgaben löschen (gemeinsame Projekte und Projekte in welchen ich Ansprechpartner bin)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Projekte exportieren
     Permission61=Serviceaufträge ansehen
     Permission62=Serviceaufträge erstellen/bearbeiten
    @@ -686,7 +696,7 @@ Permission109=Sendungen löschen
     Permission111=Finanzkonten einsehen
     Permission112=Transaktionen erstellen/ändern/löschen und vergleichen
     Permission113=Einstellungen Finanzkonten (erstellen, Kategorien verwalten)
    -Permission114=Transaktionen ausgleichen
    +Permission114=Reconcile transactions
     Permission115=Transaktionen und Kontoauszüge exportieren
     Permission116=Transfers zwischen Konten
     Permission117=Scheckeinlösungen verwalten
    @@ -694,15 +704,15 @@ Permission121=Mit Benutzer verbundene Partner einsehen
     Permission122=Mit Benutzer verbundene Partner erstellen/bearbeiten
     Permission125=Mit Benutzer verbundene Partner löschen
     Permission126=Partner exportieren
    -Permission141=Alle Projekte und Aufgaben lesen (Auch private Projekte in denen ich nicht Kontakt bin)
    -Permission142=Projekte und Aufgaben erstellen und ändern (Auch private Projekte in denen ich nicht Kontakt bin)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Löschen Sie alle Projekte und Aufgaben (einschließlich privater Projekte in denen ich kein Kontakt bin)
     Permission146=Lieferanten einsehen
     Permission147=Statistiken einsehen
     Permission151=Bestellung mit Zahlart Lastschrift
     Permission152=Lastschriftaufträge erstellen/bearbeiten
     Permission153=Bestellungen mit Zahlart Lastschrift übertragen
    -Permission154=Lastschriftaufträge genehmigen/ablehnen
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Verträge/Abonnements einsehen
     Permission162=Verträge/Abonnements erstellen/bearbeiten
     Permission163=Service/Abonnement in einem Vertrag aktivieren
    @@ -725,7 +735,7 @@ Permission187=Lieferantenbestellungen schließen
     Permission188=Lieferantenbestellungen stornieren
     Permission192=Leitungen erstellen
     Permission193=Zeilen stornieren
    -Permission194=Leitungen einsehen
    +Permission194=Read the bandwidth lines
     Permission202=ADSL Verbindungen erstellen
     Permission203=Verbindungen zwischen Bestellungen
     Permission204=Bestell-Verbindungen
    @@ -750,12 +760,12 @@ Permission244=Inhalte versteckter Kategorien einsehen
     Permission251=Andere Benutzer und Gruppen einsehen
     PermissionAdvanced251=Andere Benutzer einsehen
     Permission252=Berechtigungen andere Benutzer einsehen
    -Permission253=Andere Benutzer und Gruppen erstellen/bearbeiten (inkl. Rechteverwaltung)
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Andere interne/externe Benutzer und Gruppen erstellen/bearbeiten (inkl. Rechteverwaltung)
     Permission254=Nur externe Benutzer erstellen/bearbeiten
     Permission255=Andere Passwörter ändern
     Permission256=Andere Benutzer löschen oder deaktivieren
    -Permission262=Zugang auf alle Partner erweitern (Nicht nur  Partner wo der Benutzer der Handelsvertreter ist) <br>Nicht wirksam für externe Nutzer (Immer beschränkt auf sich selbst für Angebote, Bestellungen, Rechnungen, Verträge, etc).<br>Nicht wirksam für Projekte(Nur Regeln für Projektberechtigungen, Sichtbarkeits- und Zuordnungsfragen)
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Rechnungen anzeigen
     Permission273=Ausgabe Rechnungen
    @@ -765,7 +775,7 @@ Permission283=Kontakte löschen
     Permission286=Kontakte exportieren
     Permission291=Tarife einsehen
     Permission292=Berechtigungen der Tarife einstellen
    -Permission293=Kundentarife ändern
    +Permission293=Modify customers tariffs
     Permission300=Barcodes einsehen
     Permission301=Barcodes erstellen/bearbeiten
     Permission302=Barcodes löschen
    @@ -787,11 +797,9 @@ Permission401=Rabatte einsehen
     Permission402=Rabatte erstellen/bearbeiten
     Permission403=Rabatte freigeben
     Permission404=Rabatte löschen
    -Permission501=Mitarbeiter Verträge und Löhne einlesen
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Lohnzahlungen einlesen
    -Permission512=Lohnzahlungen erstellen/bearbeiten
    -Permission514=Löhne löschen
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Löhne exportieren
     Permission520=Darlehen einsehen
     Permission522=Darlehen erstellen/bearbeiten
    @@ -844,8 +852,8 @@ Permission1251=Massenimports von externen Daten ausführen (data load)
     Permission1321=Kundenrechnungen, -attribute und -zahlungen exportieren
     Permission1322=Eine bezahlte Rechnung wieder öffnen
     Permission1421=Exportieren von Kundenaufträge und Attribute
    -Permission20001=Urlaubsanträge einsehen (eigene und die der Untergebenen) 
    -Permission20002=Urlaubsanträge anlegen/verändern (eigene und die der Untergebenen)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Urlaubsanträge löschen
     Permission20004=Alle Urlaubsanträge einsehen (von allen Benutzern einschließlich der nicht Untergebenen)
     Permission20005=Urlaubsanträge anlegen/verändern (von allen Benutzern einschließlich der nicht Untergebenen)
    @@ -880,8 +888,8 @@ Permission63001=Ressourcen anzeigen
     Permission63002=Ressource erstellen/bearbeiten
     Permission63003=Ressource löschen
     Permission63004=Verbinden von  Ressourcen zu Ereignissen
    -DictionaryCompanyType=Arten von Partnern
    -DictionaryCompanyJuridicalType=Rechtsformen von Partnern
    +DictionaryCompanyType=Art des Partners
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Potenzialstufen von Geschäftsaussicht
     DictionaryCanton=Bundesländer/Provinzen/Kantone
     DictionaryRegion=Regionen
    @@ -891,11 +899,11 @@ DictionaryCivility=Anreden und Titel
     DictionaryActions=Typen von Kalender Ereignissen
     DictionarySocialContributions=Arten von Sozialabgaben/Unternehmenssteuern
     DictionaryVAT=USt.-Sätze
    -DictionaryRevenueStamp=Amount of tax stamps
    +DictionaryRevenueStamp=Steuermarken Beträge
     DictionaryPaymentConditions=Zahlungsbedingungen
     DictionaryPaymentModes=Zahlungsarten
    -DictionaryTypeContact=Kontaktarten
    -DictionaryTypeOfContainer=Type of website pages/containers
    +DictionaryTypeContact=Contact address types
    +DictionaryTypeOfContainer=Art der Webseite Seiten/Container
     DictionaryEcotaxe=Ökosteuern (WEEE)
     DictionaryPaperFormat=Papierformate
     DictionaryFormatCards=Karten Formate
    @@ -908,47 +916,47 @@ DictionarySource=Quelle der Angebote/Aufträge
     DictionaryAccountancyCategory=Personalisierte Gruppen für Berichte
     DictionaryAccountancysystem=Kontenplan Modul
     DictionaryAccountancyJournal=Buchhaltungsjournale
    -DictionaryEMailTemplates=Textvorlagen für E-Mails
    +DictionaryEMailTemplates=Emailvorlagen
     DictionaryUnits=Einheiten
     DictionaryProspectStatus=Geschäftsanbahnungsarten
     DictionaryHolidayTypes=Urlaubsarten
     DictionaryOpportunityStatus=Verkaufschancen für Projekt/Lead
     DictionaryExpenseTaxCat=Spesenbericht - Mobilität
    -DictionaryExpenseTaxRange=Expense report - Range by transportation category
    +DictionaryExpenseTaxRange=Spesenreport - Bereich pro Transportkategorie
     SetupSaved=Einstellungen gespeichert
     SetupNotSaved=Einstellungen nicht gespeichert
     BackToModuleList=Zurück zur Modulübersicht
    -BackToDictionaryList=Zurück zur der Stammdatenübersicht
    -TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=USt-Verwaltung
    -VATIsUsedDesc=Beim Erstellen von Leads, Rechnungen, Bestellungen, etc. wird folgende Regel zum Berechnen des USt.-Satz verwendet:<br>Wenn der Verkäufer nicht der MwSt. unterliegt, wird ein MwSt. Satz von 0 verwendet. Ende der Regel.<br>Wenn Verkäufer- und Käufer-Land identisch sind, wird der MwSt. Satz des Produktes verwendet. Ende der Regel.<br>Wenn Verkäufer und Käufer beide in der EU sind und es sich um Transportprodukte (Autos, Schiffe, Flugzeuge) handelt, wird ein MwSt. Satz von 0 verwendet. (Die MwSt. muss durch den Käufer in seinem Land abgerechnet werden). Ende der Regel.<br>Wenn Verkäufer und Käufer beide in der EU sind und der Käufer kein Unternehmen ist, dann wird der MwSt. Satz des Produktes verwendet.<br>Wenn Verkäufer und Käufer beide in der EU sind, und der Käufer ein Unternehen ist, dann wird ein MwSt. Satz von 0 verwendet. Ende der Regel.<br>In allen andere Fällen wird ein MwSt. Satz von 0 vorgeschlagen. Ende der Regel.
    -VATIsNotUsedDesc=Die vorgeschlagene USt. ist standardmäßig 0 für alle Fälle wie Stiftungen, Einzelpersonen oder Kleinunternehmen.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +BackToDictionaryList=Back to list of Dictionaries
    +TypeOfRevenueStamp=Art der Steuermarke
    +VATManagement=MwSt-Verwaltung
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Zweite Steuer nicht nutzen
    -LocalTax1IsUsedDesc=Benutzen sie eine zweite Art von Steuer (andere als Mehrwertsteuer)
    -LocalTax1IsNotUsedDesc=Benutzen sie keine andere Art von Steuer (anders als Mehrwertsteuer)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Zweite Steuer-Art
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Dritte Steuer nicht nutzen
    -LocalTax2IsUsedDesc=Benutzen Sie eine dritte Art von Steuer (anders als Mehrwertsteuer)
    -LocalTax2IsNotUsedDesc=Benutzen sie keine andere Art von Steuer (anders als Mehrwertsteuer)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Dritte Steuer-Art
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= Die RE Rate standardmäßig beim Erstellen Aussichten, Rechnungen, Bestellungen etc. folgen die aktive Standard-Regel: <br> Wenn te Käufer ist nicht unterworfen RE, RE standardmäßig = 0 ist. Ende der Regel. <br> Ist der Käufer unterzogen, um dann die RE RE standardmäßig. Ende der Regel. <br>
    -LocalTax1IsNotUsedDescES= Standardmäßig werden die vorgeschlagenen RE 0 ist. Ende der Regel.
    -LocalTax1IsUsedExampleES= In Spanien sind sie Profis unterliegen bestimmten Abschnitten der spanischen IAE.
    -LocalTax1IsNotUsedExampleES= In Spanien sind sie professionelle und Gesellschaften und vorbehaltlich bestimmter Abschnitte der spanischen IAE.
    -LocalTax2ManagementES= EKSt. Management
    -LocalTax2IsUsedDescES= Die RE Rate standardmäßig beim Erstellen Aussichten, Rechnungen, Bestellungen etc. folgen die aktive Standard-Regel: <br> Unterliegt der Verkäufer nicht IRPF, dann ist IRPF standardmäßig 0. Ende der Regel. <br> Ist der Verkäufer zur IRPF dann der Einkommenssteuer unterworfen standardmäßig. Ende der Regel. <br>
    -LocalTax2IsNotUsedDescES= Standardmäßig werden die vorgeschlagenen IRPF 0 ist. Ende der Regel.
    -LocalTax2IsUsedExampleES= In Spanien, Freiberufler und unabhängigen Fachleuten, die ihre Dienstleistungen und Unternehmen, die das Steuersystem von Modulen gewählt haben.
    -LocalTax2IsNotUsedExampleES= In Spanien sind dies Firmen, die nicht der Steuer-System aller Module unterliegen.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Standardmäßig werden die vorgeschlagenen RE 0 ist. Ende der Regel.
    +LocalTax1IsUsedExampleES=In Spanien sind sie Profis unterliegen bestimmten Abschnitten der spanischen IAE.
    +LocalTax1IsNotUsedExampleES=In Spanien sind sie professionelle und Gesellschaften und vorbehaltlich bestimmter Abschnitte der spanischen IAE.
    +LocalTax2ManagementES=EKSt. Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Standardmäßig werden die vorgeschlagenen IRPF 0 ist. Ende der Regel.
    +LocalTax2IsUsedExampleES=In Spanien, Freiberufler und unabhängigen Fachleuten, die ihre Dienstleistungen und Unternehmen, die das Steuersystem von Modulen gewählt haben.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Berichte über lokale Steuern
     CalcLocaltax1=Sales - Käufe
     CalcLocaltax1Desc=Lokale Steuer-Reports werden mit der Differenz von lokalen Verkaufs- und Einkaufs-Steuern berechnet
    @@ -958,7 +966,8 @@ CalcLocaltax3=Verkauf
     CalcLocaltax3Desc=Lokale Steuer-Reports sind die Summe der lokalen Steuern auf Verkäufe
     LabelUsedByDefault=Bezeichnung wird verwendet falls keine Übersetzung für den Code vorhanden ist.
     LabelOnDocuments=Bezeichnung auf Dokumenten
    -NbOfDays=Anzahl der Tage
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Am Ende des Monats
     CurrentNext=Aktueller/ Nächster
     Offset=Wertsprung
    @@ -984,7 +993,7 @@ DatabaseUser=DB Benutzername
     DatabasePassword=DB Passwort
     Tables=Tabellen
     TableName=Tabellenname
    -NbOfRecord=Anzahl der Einträge
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Treiber Typ
     SummarySystem=Zusammenfassung der Systeminformationen
    @@ -996,7 +1005,7 @@ Skin=grafische Oberfläche
     DefaultSkin=Standardvorlage grafische Oberfläche
     MaxSizeList=Maximale Listenlänge
     DefaultMaxSizeList=Voreinstellung maximale Anzahl Zeilen für Listen
    -DefaultMaxSizeShortList=Standard für maximale Länge bei kurzen Listen (z.B. Kundenkarte)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Nachricht des Tages
     MessageLogin=Nachricht auf der Anmeldeseite
     LoginPage=Anmeldeseite
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Ständiges Suchfeld auf der linken Seite
     DefaultLanguage=Standardsprache der Anwendung (Sprachcode)
     EnableMultilangInterface=Mehrsprachigkeit aktivieren
     EnableShowLogo=Logo über dem linken Menü anzeigen
    -CompanyInfo=Information über die Firma/Institution
    -CompanyIds=Firmen-/Stiftungs-IDs
    +CompanyInfo=Firma oder Institution
    +CompanyIds=Company/Organization identities
     CompanyName=Firmenname
     CompanyAddress=Firmenadresse
     CompanyZip=Postleitzahl
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Kontoinhaber %s
     BankModuleNotActive=Finanzkontenmodul nicht aktiv
     ShowBugTrackLink=Zeige Link  <strong>%s</strong>
     Alerts=Benachrichtigungen
    -DelaysOfToleranceBeforeWarning=Verzögerungstoleranz vor Warnung
    -DelaysOfToleranceDesc=Hier können Sie die Verspätungstoleranz einstellen, bevor eine Benachrichtigung auf dem Bildschirm für jedes verspätete Element mit dem Symbol %s ausgegeben wird.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Verzögerungstoleranz (in Tagen) vor Warnung für noch nicht erledigte geplante Ereignisse (Kalenderereignisse)
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Verzögerungstoleranz (in Tagen) vor Warnungen für nicht rechtzeitig geschlossene Projekte
    -Delays_MAIN_DELAY_TASKS_TODO=Verzögerungstoleranz (in Tagen) vor Warnung für noch nicht erledigte, geplante Aufgaben (Projektaufgaben)
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Verzögerungstoleranz (in Tagen) vor  Warnung für noch nicht bearbeitete Bestellungen
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Verzögerungstoleranz (in Tagen) vor  Warnung für abzuschließende Angebote
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Verzögerungstoleranz (in Tagen) vor Warnung für nicht in Rechnung gestellte Angebote
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Verzögerungstoleranz (in Tagen) vor Warnung für zu aktivierende Leistungen
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Verzögerungstoleranz (in Tagen) vor Warnung für überfällige Vertrags-Leistungen
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Verzögerungstoleranz (in Tagen) vor Benachrichtigung über unbezahlte Lieferantenrechnungen
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Verzögerungstoleranz (in Tagen) vor Benachrichtigung über unbezahlte Kundenrechnungen
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Verzögerungstoleranz (in Tagen) vor Benachrichtigung über Bankkontenabgleich
    -Delays_MAIN_DELAY_MEMBERS=Verzögerungstoleranz (in Tagen) vor Benachrichtigung über verspätete Mitgliedsbeiträge
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Verzögerungstoleranz (in Tagen) vor der Benachrichtigung über einzulösende Schecks
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Toleranz in Tagen vor der Benachrichtigung zur Genehmigung einer Spesenabrechnung
    -SetupDescription1=Die Einstellungsübersicht dient zum initialen Einrichten before mit der Verwendung von Dolibarr begonnen wird.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Andere Einträge verwalten optionale Parameter.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Protokollierte Ereignisse
     Audit=Protokoll
     InfoDolibarr=Über Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Hier können Sie die Protokollierungseinstellungen für sicherheits
     AreaForAdminOnly=Einstellungen können nur durch </b>Administratoren</b> verändert werden.
     SystemInfoDesc=Verschiedene systemrelevante, technische Informationen - Lesemodus und nur für Administratoren sichtbar.
     SystemAreaForAdminOnly=Dieser Bereich steht ausschließlich Administratoren zur Verfügung. Keine der Benutzerberechtigungen kann dies ändern.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    -AccountantFileNumber=File number
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
    +AccountantFileNumber=Dateinummer
     DisplayDesc=Hier können Sie die Oberfläche, sowie das allgemeine 'Look and Feel' des Systems anpassen
     AvailableModules=Verfügbare Module
     ToActivateModule=Zum Aktivieren von Modulen gehen Sie zu Start->Einstellungen->Module
     SessionTimeOut=Sitzungszeitbegrenzung
    -SessionExplanation=Dieser Wert garantiert, dass eine Sitzung nie vor Zeitablauf beendet wird. Die PHP-Sitzungsverwaltung garantiert jedoch nicht, dass eine Sitzung wirklich nach Ablauf dieser Zeit beendet wird. Hierzu kann es kommen, wenn ein System zur Sitzungscache-Bereinigung im Einsatz ist.<br>Hinweis: ohne spezielles System wird PHP die Sitzung nach etwa <b>%s/%s</b> beenden - allerdings erst nach dem Start einer anderen Sitzung.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Verfügbare Trigger
    -TriggersDesc=Trigger sind Dateien, die nach einem Kopieren in das Verzeichnis <b>htdocs/core/triggers</b> das Workflow-Verhalten des Systems beeinflussen. Diese stellen neue, mit Systemereignissen verbundene, Ereignisse dar (Neuer Partner angelegt, Rechnung freigegeben, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Trigger in dieser Datei sind durch das <b>-NORUN</b>-Suffix in ihrem Namen deaktiviert.
     TriggerDisabledAsModuleDisabled=Trigger in dieser Datei sind durch das übergeordnete Modul <b>%s</b> deaktiviert.
     TriggerAlwaysActive=Trigger in dieser Datei sind unabhängig der Modulkonfiguration immer aktiviert.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Alle Standardwerte einfügen. Sie können eigene Werte zu den Sta
     ConstDesc=Diese Seite erlaubt es alle anderen Parameter einzustellen, die auf den vorherigen Seiten nicht verfügbar sind. Dies sind meist reservierte Parameter für Entwickler oder für die erweiterte Fehlersuche. Für eine Liste von Optionen <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank"> hier überprüfen </a>.
     MiscellaneousDesc=Alle anderen sicherheitsrelevanten Parameter werden hier eingestellt.
     LimitsSetup=Limits und Genauigkeit Einstellungen
    -LimitsDesc=Hier können Sie Grenzwerte, Genauigkeitseinstellungen und das Rundungsverhalten einstellen.
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Dezimalstellen max. für Stückpreise
     MAIN_MAX_DECIMALS_TOT=Dezimalstellen max. für Gesamtsummen
     MAIN_MAX_DECIMALS_SHOWN=Dezimalstellen max. für auf dem Bildschirm angezeigte Preise (Fügen Sie <b>...</b> nach dieser Nummer ein, wenn Sie <b>...</b> sehen wollen, falls ein Bildschirmpreis abgeschnitten wurde.
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Nettostückpreis
     TotalPriceAfterRounding=Gesamtpreis (Netto/USt./Brutto) gerundet
     ParameterActiveForNextInputOnly=Die Einstellungen werden erst bei der nächsten Eingabe wirksam
     NoEventOrNoAuditSetup=Keine sicherheitsrelevanten Protokollereignisse. Überprüfen Sie die Aktivierung dieser Funktionen unter 'Einstellungen-Sicherheit-Protokoll'.
    -NoEventFoundWithCriteria=Kein sicherheitsrelevantes Protokollereignis zu Ihren Suchkriterien gefunden
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Lokale sendmail-Einstellungen anzeigen
     BackupDesc=Um eine vollständige Systemsicherung durchzuführen müssen Sie:
     BackupDesc2=Sichern des Dokumenten-Verzeichnis (<b>%s</b>;) welches alle hochgeladenen und erzeugten Dateien enthält (dies beinhaltet alle Dump-Dateien die in Schritt 1 erzeugt wurden).
    -BackupDesc3=Sicherung der Datenbank  (<b>%s</b>) über Dump-Befehl anlegen. Dafür können Sie folgende Assistenten verwenden.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Bewahren Sie die archivierten Verzeichnisse an einem sicheren Ort auf.
     BackupDescY=Bewahren Sie den Datenbank-Dump an einem sicheren Ort auf.
    -BackupPHPWarning=Datensicherung kann mit dieser Methode nicht garantiert werden. Bevorzugen Sie die vorherige.
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Um eine Systemsicherung wiederherzustellen, müssen Sie:
    -RestoreDesc2=Wiederherstellung der Archivdatei des Dokumentenverzeichnis (zum Beispiel zip-Datei) um den Datei-Baum im Dokumentenverzeichnis einer neuen Dolibarr Installation oder in ein bestehendes Dolibarr Verzeichnis (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=* Die Datenbanksicherung aus dem Dump in eine neue Dolibarr-Installation oder das bestehende System (<b>%s</b>) zurückspielen. Achtung: Nach Beendigung dieses Vorganges müssen Sie sich mit dem Benutzernamen/Passwort-Paar zum Zeitpunkt der Sicherung am System anmelden. Zur Wiederherstellung der Datenbank steht Ihnen der folgende Assistent zur Verfügung:
     RestoreMySQL=MySQL Import
     ForcedToByAModule= Diese Regel wird <b>%s</b> durch ein aktiviertes Modul aufgezwungen
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Diesen Befehl müssen Sie auf d
     YourPHPDoesNotHaveSSLSupport=Ihre PHP-Konfiguration unterstützt keine SSL-Verschlüsselung
     DownloadMoreSkins=Weitere grafische Oberflächen herunterladen
     SimpleNumRefModelDesc=Liefere eine Nummer im Format %syymm-nnnn zurück, wobei YY für das Jahr, MM für das Monat und nnnn für eine 4-stellige, nicht unterbrochene Zahlensequenz steht
    -ShowProfIdInAddress=Zeige professionnal ID mit Adressen auf Dokumente
    -ShowVATIntaInAddress=Ausblenden UID Nummer in Adressen auf Dokumenten.
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Teilweise Übersetzung
    -MAIN_DISABLE_METEO=Deaktivere Wetteransicht
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standart Modus
     MeteoStdModEnabled=Standardmodus aktiviert
     MeteoPercentageMod=Prozentmodus
     MeteoPercentageModEnabled=Prozentmodus aktiviert
     MeteoUseMod=Ancklicken um %s zu verwenden
     TestLoginToAPI=Testen Sie sich anmelden, um API
    -ProxyDesc=Einige Features von Dolibarr müssen einen Internet-Zugang zu Arbeit haben. Definieren Sie hier Parameter für diese. Wenn die Dolibarr Server hinter einem Proxy-Server, erzählt jene Parameter Dolibarr wie man Internet über ihn zugreifen.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Externer Zugriff
     MAIN_PROXY_USE=Verwenden Sie einen Proxy-Server (sonst direkten Zugang zum Internet)
     MAIN_PROXY_HOST=Name / Anschrift des Proxy-Servers
     MAIN_PROXY_PORT=Port of Proxy-Server
     MAIN_PROXY_USER=Passwort an, um den Proxy-Server verwenden
     MAIN_PROXY_PASS=Kennwort ein, um den Proxy-Server verwenden
    -DefineHereComplementaryAttributes=Definieren Sie hier alle Attribute, die nicht standardmäßig vorhanden sind, und in %s unterstützt werden sollen.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Ergänzende Attribute
     ExtraFieldsLines=Ergänzende Attribute (Zeilen)
     ExtraFieldsLinesRec=Zusätzliche Attribute (Rechnungsvorlage, Zeilen)
     ExtraFieldsSupplierOrdersLines=Ergänzende Attribute (in Bestellposition)
     ExtraFieldsSupplierInvoicesLines=Ergänzende Attribute (in Rechnungszeile)
     ExtraFieldsThirdParties=Ergänzende Attribute (Partner)
    -ExtraFieldsContacts=Ergänzende Attribute (Kontakt)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Ergänzende Attribute (Mitglied)
     ExtraFieldsMemberType=Ergänzende Attribute (Mitglied)
     ExtraFieldsCustomerInvoices=Ergänzende Attribute (Rechnungen)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=nur Kleinbuchstaben und Zahlen, keine Leerzeich
     SendmailOptionNotComplete=Achtung: Auf einigen Linux-Systemen muss die Einrichtung von sendmail die Option -ba ethalten, um E-Mail versenden zu können (Parameter mail.force_extra_parameters in der php.ini-Datei). Wenn einige Empfänger niemals E-Mails erhalten, verändern Sie den PHP Parameter folgendermaßen mail.force_extra_parameters =-ba.
     PathToDocuments=Dokumentenpfad
     PathDirectory=Verzeichnispfad
    -SendmailOptionMayHurtBuggedMTA=Feature-Mails mit der Methode "PHP mail direkt" senden generiert eine Mail-Nachricht, die nicht korrekt möglicherweise von einigen Mail-Servern empfangen analysiert werden. Ergebnis ist, dass manche Mails nicht von Menschen, die von thoose abgehört Plattformen gehostet gelesen werden. Es ist bei einigen Internet-Providern (Ex: Orange in Frankreich). Dies ist nicht ein Problem in Dolibarr noch in PHP aber auf empfangende Mail-Server. Sie können jedoch hinzuzufügen MAIN_FIX_FOR_BUGGED_MTA Option auf 1 in die Setup - andere zu Dolibarr ändern, um dies zu vermeiden. Sie können jedoch Probleme mit anderen Servern, dass die Achtung streng dem SMTP-Standard zu erleben. Die andere Lösung (empfohlen) ist es, die Methode "SMTP-Socket-Bibliothek", die keine Nachteile hat benutzen.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Konfiguration der Übersetzung
     TranslationKeySearch=Übersetzungsschlüssel oder -Zeichenkette suchen
     TranslationOverwriteKey=Überschreiben der Übersetzung
    -TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
    +TranslationDesc=Wie die angezeigte Sprache gewählt wird <br>*Systemweit: Menu <strong>Start - Einstellungen - Anzeige</strong><br>* Pro Benutzer: <strong>Benutzeroberfläche</strong>-Registerkarte der Benutzerkarte (Klicken Sie auf den Benutzernamen am oberen Bildschirmrand).
     TranslationOverwriteDesc=Sie können Zeichenketten durch Füllen der folgenden Tabelle überschreiben. Wählen Sie Ihre Sprache aus dem "%s" Drop-Down und tragen Sie den Schlüssel in "%s" und Ihre neue Übersetzung in "%s" ein.
    -TranslationOverwriteDesc2=Sie können die andere Registerkarte verwenden, um Ihnen zu helfen, den Übersetzungsschlüssel zu verwenden
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Übersetzung Zeichenkette
     CurrentTranslationString=Aktuelle Übersetzung
     WarningAtLeastKeyOrTranslationRequired=Es sind mindestens ein Suchkriterium erforderlich für eine Schlüssel- oder Übersetzungszeichenfolge
     NewTranslationStringToShow=Neue Übersetzungen anzeigen
     OriginalValueWas=Original-Übersetzung überschrieben. Der frühere Wert war:<br><br>%s
    -TransKeyWithoutOriginalValue=Sie haben den Überstzungsschlüssel '<strong>%s</strong>' erstellt, der in keiner Sprachdatei existiert.
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Aktivierte Anwendungen/Module: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Sie müssen mindestens 1 Modul aktivieren
    -ClassNotFoundIntoPathWarning=Klasse %s nicht innerhalb PHP-Pfad gefunden
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Ja im Sommer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Hinweis: Nur die folgenden Module sind für externe Nutzer verfügbar (unabhängig von der Berechtigung dieser Benutzer), und das auch nur, wenn die Rechte zugeteilt wurden:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Sitzungsspeicher durch Suhosin verschlüsselt
     ConditionIsCurrently=Einstellung ist aktuell %s
    -YouUseBestDriver=Sie verwenden den Treiber %s, dies ist derzeit der beste verfügbare.
    -YouDoNotUseBestDriver=Sie verwenden Treiber %s, aber der Treiber %s wird empfohlen.
    -NbOfProductIsLowerThanNoPb=Sie haben nur %s Produkte/Leistungen in der Datenbank. Daher ist keine bestimmte Optimierung erforderlich.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Such Optimierung
    -YouHaveXProductUseSearchOptim=Sie haben %s Produkte/Leistungen in die Datenbank. Sie sollten die Konstante PRODUCT_DONOTSEARCH_ANYWHERE auf 1 unter  Start-Einstellungen-Andere Einstellungen hinzufügen, wodurch das Suchlimit in der Datenbank von  Anfang des Strings möglich gemacht wird,  und der Index verwendet wird, dadurch sollten sie sofort Antwort auf Ihre suche bekommen.
    -BrowserIsOK=Sie benutzen den Webbrowser %s. Dieser ist hinsichtlich Sicherheit und Leistung ok.
    -BrowserIsKO=Sie benutzen den Webbrowser %s. Dieser ist bekannt für Sicherheitsprobleme, schlechte Leistung und Zuverlässigkeit. Wir empfehlen Ihnen, Firefox, Chrome, Opera oder Safari zu nutzen.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug installiert.
     XCacheInstalled=XCache installiert.
    -AddRefInList=Darstellung Kunden- /Lieferanten- Nr. in Listen (Listbox oder ComboBox) und die meisten von Hyperlinks. Partner erscheinen mit dem namen "CC12345 - SC45678 - Grosse Firma AG" anstelle von "Grosse Firma AG".
    -AskForPreferredShippingMethod=Bervorzugte Liefermethode für Partner fragen
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Bearbeitung von Feld %s
     FillThisOnlyIfRequired=Beispiel: +2 (nur ausfüllen, wenn Sie Probleme mit der Zeitzone haben)
     GetBarCode=Erhalten Sie einen Barcode
     ##### Module password generation
     PasswordGenerationStandard=Generiere ein Passwort nach dem internen Systemalgorithmus: 8 Zeichen, Zahlen und Kleinbuchstaben.
    -PasswordGenerationNone=Schlagen Sie kein generiertes Passwort vor. Passwörter sollten manuell eingegeben werden.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Ein Passwort entsprechend der persönlich definierten Konfiguration zurückgeben.
     SetupPerso=Nach Ihrer Konfiguration
     PasswordPatternDesc=Beschreibung für Passwortmuster
    @@ -1195,30 +1205,31 @@ UserMailRequired=Für das Erstellen eines neuen Benutzers ist dessen E-Mail-Adre
     HRMSetup=PV Modul Einstellungen
     ##### Company setup #####
     CompanySetup=Unternehmenseinstellungen
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=Die Funktion der E-Mail-Benachrichtigung erlaubt Ihnen den stillen und automatischen Versand von E-Mails zu einigen Dolibarr-Ereignissen. Folgende Ziele können definiert werden:
     NotificationsDescUser=* pro Benutzer, ein Benutzer pro mal
    -NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
    +NotificationsDescContact=* pro Partnerkontakte (Kunden oder Lieferanten), ein Kontakt pro mal
     NotificationsDescGlobal=* oder duch setzten der globalen E-Mailziele im Modulsetup
    -ModelModules=Dokumentvorlagenmodul
    -DocumentModelOdt=Erstellen von Dokumentvorlagen im OpenDocuments-Format (.odt- oder .ods-Dateien für OpenOffice, KOffice, TextEdit, ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Wasserzeichen auf Entwurf
     JSOnPaimentBill=Feature aktivieren, um Zahlungs-Zeilen in Zahlungs-Formularen automatisch zu füllen
    -CompanyIdProfChecker=Regeln für Identifikationsnummern
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Muss es eindeutig sein ?
    -MustBeMandatory=Erforderlich zur Anlage von Partnern ?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Erforderlich, um Rechnungen freizugeben ?
     TechnicalServicesProvided=Technische Unterstützung durch
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    -WebDavServer=Root URL of %s server : %s
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
    +WebDavServer=Root URL von %s Server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Ein Eportlink für das Format <b>%s</b> findet sich unter folgendem Link: %s
     ##### Invoices #####
     BillsSetup=Rechnungsmoduleinstellungen
     BillsNumberingModule=Rechnungs- und Gutschriftsnumerierungsmodul
     BillsPDFModules=PDF-Rechnungsvorlagen
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Zahlungsvorlagen
     CreditNote=Gutschrift
     CreditNotes=Gutschriften
    @@ -1239,15 +1250,15 @@ FreeLegalTextOnProposal=Freier Rechtstext auf Angeboten
     WatermarkOnDraftProposal=Wasserzeichen auf Angebots-Entwurf (keines, falls leer)
     BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=Fragen Sie nach dem Bankkonto bei einem Angebot
     ##### SupplierProposal #####
    -SupplierProposalSetup=Price requests vendors module setup
    -SupplierProposalNumberingModules=Price requests vendors numbering models
    -SupplierProposalPDFModules=Price requests vendors documents models
    -FreeLegalTextOnSupplierProposal=Free text on price requests vendors
    -WatermarkOnDraftSupplierProposal=Watermark on draft price requests vendors (none if empty)
    +SupplierProposalSetup=Einrichtung des Moduls für Preisanfragen bei Lieferanten
    +SupplierProposalNumberingModules=Modell zu Numerierung von Preisanfragen für Lieferanten
    +SupplierProposalPDFModules=Modell für Dokumente von Preisanfragen für Lieferanten
    +FreeLegalTextOnSupplierProposal=Freier Text auf Preisanfragen bei Lieferanten
    +WatermarkOnDraftSupplierProposal=Wasserzeichen auf vorbereiteten Preisanfrage für Lieferanten (leerlassen für kein Wasserzeichen)
     BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Frage nach Bankkonto für Preisanfragen
     WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Frage nach Lager für Aufträge
     ##### Suppliers Orders #####
    -BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Ask for bank account destination of purchase order
    +BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Frage nach der Ziel-Bankverbindung der Lieferantenbestellung
     ##### Orders #####
     OrdersSetup=Bestellverwaltungseinstellungen
     OrdersNumberingModules=Bestellnumerierungs-Module
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Verwalten Sie eine Anmeldung für jedes Mitglied
     AdherentMailRequired=Für das Anlegen eines neuen Mitglieds ist eine E-Mail-Adresse erforderlich
     MemberSendInformationByMailByDefault=Das Kontrollkästchen für den automatischen Mail-Bestätigungsversand an Mitglieder (bei Freigabe oder neuem Abonnement) ist standardmäßig aktiviert
     VisitorCanChooseItsPaymentMode=Besucher können zwischen den verfügbaren Zahlungsarten wählen
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP-Einstellungen
     LDAPGlobalParameters=Globale LDAP-Parameter
    @@ -1292,7 +1304,7 @@ LDAPSynchronizeUsers=dolibarr-Benutzer mit LDAP synchronisieren
     LDAPSynchronizeGroups=dolibarr-Gruppen mit LDAP synchronisieren
     LDAPSynchronizeContacts=dolibarr-Kontakte mit LDAP synchronisieren
     LDAPSynchronizeMembers=dolibarr-Stiftungsmitglieder mit LDAP synchronisieren
    -LDAPSynchronizeMembersTypes=Organization of foundation's members types in LDAP
    +LDAPSynchronizeMembersTypes=Verwalten der Mitgliedsarten via LDAP
     LDAPPrimaryServer=Primärer LDAP-Server
     LDAPSecondaryServer=Sekundärer LDAP-Server
     LDAPServerPort=Server-Port
    @@ -1346,7 +1358,7 @@ LDAPSynchroKO=Synchronisationstest fehlgeschlagen
     LDAPSynchroKOMayBePermissions=Synchronisationstest fehlgeschlagen. Überprüfen Sie die richtige Konfiguration der Serververbindung und die Erlaubnis für LDAP-Updates
     LDAPTCPConnectOK=TCP-Verbindung zum LDAP-Server erfolgreich (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP-Verbindung zum LDAP-Server fehlgeschlagen (Server= %s, Port= %s)
    -LDAPBindOK=Verbindung/Authentifizierung am LDAP-Server erfolgreich (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPBindKO=Verbindung/Authentifizierung am LDAP-Server fehlgeschlagen (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP-Server für Version 3 konfiguriert
     LDAPSetupForVersion2=LDAP-Server für Version 2 konfiguriert
    @@ -1405,7 +1417,7 @@ LDAPDescContact=Auf dieser Seite definieren Sie die LDAP-Attribute im LDAP-Baum
     LDAPDescUsers=Auf dieser Seite definieren Sie die LDAP-Attribute im LDAP-Baum für jeden Datensatz zu dolibarr-Benutzern.
     LDAPDescGroups=Auf dieser Seite definieren Sie die LDAP-Attribute im LDAP-Baum für jeden Datensatz zu dolibarr-Gruppen.
     LDAPDescMembers=Auf dieser Seite definieren Sie die LDAP-Attribute im LDAP-Baum für jeden Datensatz zu dolibarr-Mitgliedern.
    -LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP tree for each data found on Dolibarr members types.
    +LDAPDescMembersTypes=Auf dieser Seiten kann man die LDAP Attributnamen aus dem LDAP System für alle Daten im Dolibarr System einstellen.
     LDAPDescValues=Die Beispielwerte für <b>OpenLDAP</b> verfügen über folgende Muster: <b>core.schema, cosine.schema, inetorgperson.schema</b>. Wenn Sie diese Werte für OpenLDAP verwenden möchten, passen Sie bitte die LDAP-Konfigurationsdatei <b>slapd.conf</b> entsprechend an, damit all diese Muster geladen werden.
     ForANonAnonymousAccess=Für einen authentifizierten Zugang (z.B. für Schreibzugriff)
     PerfDolibarr=Leistungs-Einstellungen/Optimierungsreport
    @@ -1433,6 +1445,7 @@ DefaultCreateForm=Vorgabewerte für neue Einträge
     DefaultSearchFilters=Standard Suchfilter
     DefaultSortOrder=Standardsortierreihenfolge
     DefaultFocus=Standardfokusfeld
    +DefaultMandatory=Formularfelder die ausgefüllt werden müssen
     ##### Products #####
     ProductSetup=Produktmoduleinstellungen
     ServiceSetup=Modul Leistungen - Einstellungen
    @@ -1441,7 +1454,7 @@ NumberOfProductShowInSelect=Max. Anzahl der Produkte in Mehrfachauswahllisten (0
     ViewProductDescInFormAbility=Anzeige der Produktbeschreibungen in Formularen (sonst als ToolTip-  Popup)
     MergePropalProductCard=Aktivieren einer Option unter Produkte/Leistungen  Registerkarte verknüpfte Dateien, um Produkt-PDF-Dokumente um Angebots PDF azur zusammenzuführen, wenn Produkte/Leistungen in dem Angebot sind.
     ViewProductDescInThirdpartyLanguageAbility=Anzeige der Produktbeschreibungen in der Sprache des Partners
    -UseSearchToSelectProductTooltip=Wenn Sie eine große Anzahl von Produkten (> 100.000) haben, können Sie die Geschwindigkeit verbessern, indem Sie in Einstellungen -> Andere die Konstante PRODUCT_DONOTSEARCH_ANYWHERE auf 1 setzen. Die Suche startet dann am Beginn des Strings.
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectProduct=Warte auf Tastendruck, bevor der Inhalt der Produkt-Combo-Liste geladen wird (Dies kann die Leistung verbessern, wenn Sie eine große Anzahl von Produkten haben).
     SetDefaultBarcodeTypeProducts=Standard-Barcode-Typ für Produkte
     SetDefaultBarcodeTypeThirdParties=Standard-Barcode-Typ für Partner
    @@ -1458,9 +1471,9 @@ SyslogFilename=Dateiname und-pfad
     YouCanUseDOL_DATA_ROOT=Sie können DOL_DATA_ROOT/dolibarr.log als Protokolldatei in Ihrem Dokumentenverzeichnis verwenden. Bei Bedarf können Sie auch den Pfad der Datei anpassen.
     ErrorUnknownSyslogConstant=Konstante %s ist nicht als Protokoll-Konstante definiert
     OnlyWindowsLOG_USER=Windows unterstützt nur LOG_USER
    -CompressSyslogs=Compression and backup of debug log files (generated by module Log for debug)
    -SyslogFileNumberOfSaves=Log backups
    -ConfigureCleaningCronjobToSetFrequencyOfSaves=Configure cleaning scheduled job to set log backup frequency
    +CompressSyslogs=Komprimierung von Datensicherung- und Debuglogs (Generiert durch das Logmodul)
    +SyslogFileNumberOfSaves=Backuplogs
    +ConfigureCleaningCronjobToSetFrequencyOfSaves=Konfigurieren Sie einen geplanten Job um die Logbackups zu automatisieren
     ##### Donations #####
     DonationsSetup=Spendenmoduleinstellungen
     DonationsReceiptModel=Vorlage für Spendenquittungen
    @@ -1525,8 +1538,8 @@ OSCommerceTestOk=Verbindung zum Server '%s' für Datenbank '%s' mit Benutzer '%s
     OSCommerceTestKo1=Verbindung zum Server '%s' erfolgreich, aber Datenbank '%s' konnte nicht erreicht werden.
     OSCommerceTestKo2=Verbindung zum Server '%s' mit dem Benutzer '%s' fehlgeschlagen.
     ##### Stock #####
    -StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=Wenn Sie ein Point of Sale-Modul (POS-Modul Standard oder andere externe POS-Module) verwenden, kann diese Einstellung von Ihrem Point Of Sale-Modul übersteuert werden. \nDie meisten POS -Module wurden entwickelt, um sofort eine Rechnung zu erstellen und das Lager standardmäßig zu verringern, egal welche Optionen hier ausgewählt wurde. \nAlso, wenn Sie während einem Verkauf einen Lagerabgang in Ihrem Point of Sale möchten oder nicht, so müssen sie auch die Konfiguration des POS-Modules überprüfen.
    +StockSetup=Warenlager-Modul Einstellungen
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menü gelöscht
     Menus=Menüs
    @@ -1561,9 +1574,9 @@ OptionVATDefault=Standardbasis
     OptionVATDebitOption=Rückstellungsbasis
     OptionVatDefaultDesc=Mehrwertsteuerschuld entsteht: <br>- Bei Lieferung/Zahlung für Waren<br>- Bei Zahlung für Leistungen
     OptionVatDebitOptionDesc=Mehrwertsteuerschuld entsteht: <br>- Bei Lieferung/Zahlung für Waren<br>- Bei Rechnungslegung (Lastschrift) für Dienstleistungen
    -OptionPaymentForProductAndServices=Cash basis for products and services
    -OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Standardmäßiger Zeitpunkt der USt.-Fälligkeit in Abhängigkeit zur derzeit gewählten Option:
    +OptionPaymentForProductAndServices=Cashbasis für Produkte und Dienstleistungen
    +OptionPaymentForProductAndServicesDesc=USt is fällig: <br>- Bei Bezahlung von Waren<br>- Bei Bezahlung von Dienstleistungen
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Bei Lieferung
     OnPayment=Bei Zahlung
     OnInvoice=Bei Rechnungslegung
    @@ -1580,13 +1593,13 @@ AccountancyCodeBuy=Einkaufskonto-Code
     AgendaSetup=Aufgaben/Termine-Modul Einstellungen
     PasswordTogetVCalExport=Passwort für den VCal-Export
     PastDelayVCalExport=Keine Termine exportieren die älter sind als
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Diesen Standardwert automatisch als Ereignistyp im  Ereignis Erstell-Formular verwenden.
    -AGENDA_DEFAULT_FILTER_TYPE=Diesen Ereignistyp automatisch in den Suchfilter für die Agenda-Ansicht übernehmen
    -AGENDA_DEFAULT_FILTER_STATUS=Diesen Ereignisstatus automatisch in den Suchfilter für die Agenda-Ansicht übernehmen
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Welchen Reiter möchten Sie beim Öffnen der Agenda automatisch anzeigen
    -AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_EMAIL=Aktiviere Terminbenachrichtigungen <b>via E-Mail</b> (Die Benachrichtigungszeit/Frequenz kann auf dem jeweiligen Termin eingestellt werden). Info: Modul <strong>%s</strong> muss aktiviert und richtig konfiguriert sein, damit die Erinnerungen korrekt versendet werden können.
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Aktiviere Tonbenachrichtigung
     AGENDA_SHOW_LINKED_OBJECT=Verknüpfte Objekte in Agenda anzeigen
     ##### Clicktodial #####
    @@ -1606,7 +1619,7 @@ CashDeskDoNotDecreaseStock=Deaktiviere Lagerabgangsbuchung wenn ein Verkauf auf
     CashDeskIdWareHouse=Lager für Entnahmen festlegen und und erzwingen
     StockDecreaseForPointOfSaleDisabled=Lagerrückgang bei Verwendung von Point of Sale deaktiviert
     StockDecreaseForPointOfSaleDisabledbyBatch=Lagerrückgang in POS-Modul ist noch nicht mit dem Chargen- /Seriennummern Management kompatibel.
    -CashDeskYouDidNotDisableStockDecease=Sie haben die Reduzierung der Lagerbestände nicht deaktiviert, wenn Sie einen Verkauf auf dem  POS durchführen.\nAuch ist ein Lager/Standort notwendig.
    +CashDeskYouDidNotDisableStockDecease=Sie haben die Reduzierung der Lagerbestände nicht deaktiviert, wenn Sie einen Verkauf auf dem  Point of Sale durchführen.\nAuch ist ein Lager/Standort notwendig.
     ##### Bookmark #####
     BookmarkSetup=Favoriten-Moduleinstellungen
     BookmarkDesc=Dieses Modul ermöglicht die Verwaltung von Favoriten. Außerdem können Sie hiermit Verknüpfungen zu internen und externen Seiten im linken Menü anlegen.
    @@ -1637,8 +1650,8 @@ ChequeReceiptsNumberingModule=Checknummerierungsmodul
     MultiCompanySetup=Einstellungen des Modul Mandanten
     ##### Suppliers #####
     SuppliersSetup=Lieferantenmoduleinstellungen
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    -SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
    +SuppliersCommandModel=Vollständige Vorlage für Lieferantenbestellungen (Logo, ...)
    +SuppliersInvoiceModel=Vollständige Vorlage der Lieferantenrechnung (logo. ..)
     SuppliersInvoiceNumberingModel=Lieferantenrechnungen Zähl-Modell
     IfSetToYesDontForgetPermission=Wenn auf Ja gesetzt, vergessen Sie nicht, die Berechtigungen den dafür erlaubten Gruppen oder Benutzern auch das Recht für die zweite Zustimmung zu geben.
     ##### GeoIPMaxmind #####
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Projekteinstellungenmodul
     ProjectsModelModule=Projektvorlagenmodul
     TasksNumberingModules=Modul zur Numerierung von Aufgaben
     TaskModelModule=Vorlage für Arbeitsberichte
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Warte auf Tastendruck, bevor der Inhalt der Partner-Combo-Liste geladen wirdv<br> (Dies kann die Leistung verbessern, wenn Sie eine große Anzahl von Partnern haben, verschlechtert aber die Nutzungsfreundlichkeit).
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Buchhaltungs Perioden
    @@ -1675,12 +1688,12 @@ NoAmbiCaracAutoGeneration=Verwende keine mehrdeutigen Zeichen ("1", "l", "i", "|
     SalariesSetup=Einstellungen des Gehaltsmodul
     SortOrder=Sortierreihenfolge
     Format=Format
    -TypePaymentDesc=0:Customer payment type, 1:Vendor payment type, 2:Both customers and vendors payment type
    +TypePaymentDesc=0:Kundenzahlungsart, 1:Lieferantenzahlungsart, 2:Sowohl Kunden- als auch Lieferanten-Zahlungsart
     IncludePath=Include-Pfad (in Variable '%s' definiert)
     ExpenseReportsSetup=Einstellungen des Moduls Spesenabrechnung
     TemplatePDFExpenseReports=Dokumentvorlagen zur Erstellung einer Spesenabrechnung
     ExpenseReportsIkSetup=Einstellungen des Spesenmoduls - Meilenindex
    -ExpenseReportsRulesSetup=Setup of module Expense Reports - Rules
    +ExpenseReportsRulesSetup=Setup des Moduls Spesen - Regeln
     ExpenseReportNumberingModules=Nummerierung Spesenabrechnungen
     NoModueToManageStockIncrease=Kein Modul zur automatische Bestandserhöhung ist aktiviert. Lager Bestandserhöhung kann nur durch manuelle Eingabe erfolgen.
     YouMayFindNotificationsFeaturesIntoModuleNotification=Sie können Optionen für E-Mail-Benachrichtigungen von Aktivierung und Konfiguration des Moduls "Benachrichtigung" finden.
    @@ -1688,7 +1701,7 @@ ListOfNotificationsPerUser=Liste der Benachrichtigungen nach Benutzer*
     ListOfNotificationsPerUserOrContact=Liste der Benachrichtigungen nach Benutzer oder Kontakt**
     ListOfFixedNotifications=Liste von ausbesserten Benachrichtigungen
     GoOntoUserCardToAddMore=Gehen Sie auf die Registerkarte "Hinweise" eines Benutzers, um Benachrichtigungen für Benutzer zu erstellen/entfernen
    -GoOntoContactCardToAddMore=Gehen Sie auf die Registerkarte "Hinweise" des Partners, um Hinweise für Kontakte/Adressen zu erstellen oder zu entfernen
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Schwellenwert
     BackupDumpWizard=Assistenten zum erstellen der Datenbank-Backup Dump-Datei
     SomethingMakeInstallFromWebNotPossible=Die Installation von dem externen Modul ist aus folgenden Gründen vom Web-Interface nicht möglich:
    @@ -1697,7 +1710,8 @@ InstallModuleFromWebHasBeenDisabledByFile=Installieren von externen Modul aus de
     ConfFileMustContainCustom=Um ein externes Modul zu erstellen oder installieren, müssen die Dateien im Verzeichnis <strong>%s</strong> gespeichert werden. Damit dieses Verzeichnis durch Dolibarr verwendet wird, muss in den Einstellungen <strong>conf/conf.php</strong> die folgenden beiden Zeilen hinzugefügt werden:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Zeilen hervorheben bei Mouseover
     HighlightLinesColor=Farbe der Zeile hervorheben, wenn die Maus darüberfährt (leer lassen, um den Effekt zu deaktivieren)
    -TextTitleColor=Text color of Page title
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
    +TextTitleColor=Farbe des Seitenkopfs
     LinkColor=Farbe für Hyperlinks
     PressF5AfterChangingThis=Drücken Sie CTRL+F5 auf der Tastatur oder löschen Sie Ihren Browser-Cache, nachdem dem Sie diesen Wert geändert haben, damit die Änderung wirksam wird
     NotSupportedByAllThemes=Funktioniert mit dem Standard-Designvorlagen: wird möglicherweise nicht von externen Designvorlagen unterstützt
    @@ -1706,22 +1720,22 @@ TopMenuBackgroundColor=Hintergrundfarbe für Hauptmenü
     TopMenuDisableImages=Symbole im oberen Menü ausblenden.
     LeftMenuBackgroundColor=Hintergrundfarbe für Menü Links
     BackgroundTableTitleColor=Hintergrundfarbe für Titelzeilen in Tabellen
    -BackgroundTableTitleTextColor=Text color for Table title line
    +BackgroundTableTitleTextColor=Textfarbe für Tabellen Titelzeile
     BackgroundTableLineOddColor=Hintergrundfarbe für ungerade Tabellenzeilen
     BackgroundTableLineEvenColor=Hintergrundfarbe für gerade Tabellenzeilen
     MinimumNoticePeriod=Kündigungsfrist (Ihre Kündigung muss vor dieser Zeit erfolgen)
     NbAddedAutomatically=Anzahl Tage die den Benutzern jeden Monat (automatisch) hinzuaddiert werden
     EnterAnyCode=Dieses Feld enthält eine Referenz um die Zeile zu identifizieren. Geben Sie einen beliebigen Wert ohne Sonderzeichen ein.
    -UnicodeCurrency=Fügen sie zwischen den eckigen Klammern die Unicode Zeichenwerte für das Währungssymbol ein. Beispiele: Für $ den Wert [36], für brasilianische Real R$ [82,36], für € den Wert [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=Die RGB Farben sind im Hexformat, zB. FF0000
     PositionIntoComboList=Zeilenposition in der Combo-Listen
     SellTaxRate=Mehrwertsteuersatz
     RecuperableOnly=Ja für USt. "Wahrgenommene nicht Erstattungsfähig" für einige Regionen in Frankreich. Nein für alle anderen Fälle.
     UrlTrackingDesc=Falls der Liefer- bzw. Transportdienst eine Website für die Statusüberprüfung anbietet, kann die URL hier angegeben werden. Sie können die Zeichenfolge {TRACKID}  in URL-Parameter verwenden,  damit das System den Wert von Tracking-Nummer des Benutzers in die Lieferkarte ersetzen kann.
    -OpportunityPercent=Wenn Sie eine Verkaufschance erfassen, wird ein geschätzter Betrag an einem Projekt / Lead definiert. Entsprechend der Chance kann diese Menge durch diese Rate multipliziert werden, um die Gesamtmenge, die alle ihre Möglichkeiten erzeugen, generieren kann. Ist der Prozentwert (zwischen 0 und 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=Diese Vorlage gehört zu diesem Element
     TypeOfTemplate=Type der Vorlage
    -TemplateIsVisibleByOwnerOnly=Vorlage ist nur vom Besitzer sichtbar
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Überall sichtbar
     VisibleNowhere=Nirgendwo sichtbar
     FixTZ=Zeitzonen-Korrektur
    @@ -1734,23 +1748,23 @@ MailToSendOrder=Kundenaufträge
     MailToSendInvoice=Kundenrechnungen
     MailToSendShipment=Lieferungen
     MailToSendIntervention=Serviceaufträge
    -MailToSendSupplierRequestForQuotation=Quotation request
    -MailToSendSupplierOrder=Purchase orders
    -MailToSendSupplierInvoice=Vendor invoices
    +MailToSendSupplierRequestForQuotation=Offertanfrage
    +MailToSendSupplierOrder=Lieferantenbestellungen
    +MailToSendSupplierInvoice=Lieferantenrechnungen
     MailToSendContract=Verträge
     MailToThirdparty=Partner
     MailToMember=Mitglieder
     MailToUser=Benutzer
    -MailToProject=Projects page
    +MailToProject=Projektseiten
     ByDefaultInList=Standardanzeige als Listenansicht
     YouUseLastStableVersion=Sie verwenden die letzte stabile Version
     TitleExampleForMajorRelease=Beispielnachricht, die Sie nutzen können, um eine Hauptversion anzukündigen. Sie können diese auf Ihrer Website verwenden.
     TitleExampleForMaintenanceRelease=Beispielnachricht, die Sie nutzen können, um ein Wartungsupdate anzukündigen. Sie können diese auf Ihrer Website verwenden.
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s ist verfügbar. Version %s ist eine Hauptversion mit vielen neuen Features für Benutzer und Entwickler. Sie können die Version aus dem Downloadbereich des Portals http://www.dolibarr.org laden (Unterverzeichnis "stabile Versionen"). Lesen Sie die komplette Liste der <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">Änderungen</a>.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s ist verfügbar. Version %s ist ein Wartungsupdate , das Fehlerbereinigungen enthält. Es wird allen Nutzern einer älteren Version empfohlen, auf diese zu wechseln. Wie bei jedem Wartungsupdate sind keinen neuen Features oder Änderungen in den Datenstrukturen enthalten. Sie können die Version aus dem Downloadbereich des Portals http://www.dolibarr.org laden (Unterverzeichnis "stabile Versionen"). Lesen Sie die komplette Liste der <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">Änderungen</a>.
    -MultiPriceRuleDesc=Wenn die Option "mehrere Preisebenen pro Artikel/Dienstleistung" aktiviert ist, können Sie verschiedene Preis (einen pro Ebene) für jeden artikel definieren. Um Zeit zu sparen, können Sie eine Regel anlegen, mit der der Preis pro Ebene automatisch anhand des Preise in der ersten Ebene kalkuliert wird, so dass Sie nur einen Preis in der ersten Ebene eingeben müssen. Diese Seite kann Ihnen nur Zeit sparen und nützlich sein, wenn die Preise anderer Ebenen vom Preis der ersten Ebene abhängig sind. Ansonsten können Sie diese Seite ignorieren.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Vorlagen für Produktdokumente
    -ToGenerateCodeDefineAutomaticRuleFirst=Um Barcode automatisch zu erstellen, müssen Sie zuerst einen Manager definieren, der die Barcode-Nummern erstellt.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=Siehe * für einen Liste möglicher Ersetzungsvariablen
     SeeChangeLog=Siehe ChangeLog-Datei (nur Englisch)
     AllPublishers=Alle Verfasser
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Andere Seiten oder Dienste hinzufügen
     AddModels=Dokumente oder Nummerierungsvorlagen hinzufügen
     AddSubstitutions=Ersatzwerte hinzufügen
     DetectionNotPossible=Erkennung nicht möglich
    -UrlToGetKeyToUseAPIs=URL um ein Token für die API Nutzung zu erhalten (Erhaltene Token werden in der Benutzertabelle gespeichert und bei jedem Zugriff validiert)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Liste von verfügbaren APIs
    -activateModuleDependNotSatisfied=Modul "%s" benötigt Modul "%s" welches fehlt, dadurch funktioniert Modul "%1$s" möglicherweise nicht korrekt. Installieren Sie Modul "%2$s" oder deaktivieren Sie Modul "%1$s" um auf der sicheren Seite zu sein
    -CommandIsNotInsideAllowedCommands=Das Kommando ist nicht in der Liste der erlaubten Kommandos, definiert in <strong>$dolibarr_main_restrict_os_commands</strong> in der <strong>conf.php</strong> Datei.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Einstiegsseite
    -SamePriceAlsoForSharedCompanies=Wenn Sie das Mehrfirmenmodul mit der Einstellung "Einzelner Preis" verwenden, dann ist der Preis für die Produkte identisch, die zwischen den Unternehmen geteilt werden.
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Das Modul wurde aktiviert. Rechte wurden nur Admin-Benutzern gewährt. Wenn nötig, müssen Sie anderen Benutzern oder Gruppen Rechte manuell zuweisen.
    -UserHasNoPermissions=Dieser Benutzer hat keine Rechte
    -TypeCdr=Verwenden Sie „Nein“, wenn das Datum der Zahlungsfrist ist das Rechnungsdatum plus ein Delta in Tagen (Delta ist die „Anzahl der Tage“) <br> Use „Am Ende des Monats“, wenn nach dem Delta das Datum muss bis zum Ende des Monats erhöht werden (+ ein „Offset“ optional Tage) <br> „Aktueller/ Nächster“, um das Datum der Zahlungsfrist verwenden ist der erste n-ten Tag des Monats nach (N ist in der „Anzahl der Tage“ Feld gespeichert)
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Basiswährung des Unternehmens (Kann in den Unternehmenseinstellungen verändert werden)
    -WarningNoteModuleInvoiceForFrenchLaw=Dieses Modul %s erfüllt die Französische Gesetzgebung (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=Modul %s entspricht der französischen Gesetzgebung (Loi Finance 2016) weil das Modul "Unveränderbare Logs" automatisch aktiviert wird.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Sie versuchen das externe Modul %s zu installieren. Mit der Aktivierung eines externen Moduls vertrauen sie dem Herausgeber des Moduls und sind sicher, dass das System weiterhin die Gesetze Ihres Landes (%s) erfüllt. Falls das Modul Funktionalität bietet die in Ihrem Land nicht erlaubt sind, dann sind Sie Verantwortlich dass diese nicht genutzt werden.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Linker Rand im PDF
     MAIN_PDF_MARGIN_RIGHT=Rechter Rand im PDF
     MAIN_PDF_MARGIN_TOP=Oberer Rand im PDF
     MAIN_PDF_MARGIN_BOTTOM=Unterer Rand im PDF
    -SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    -SeveralLangugeVariatFound=Several language variants found
    -COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
    -COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +NothingToSetup=There is no specific setup to do for this module.
    +SetToYesIfGroupIsComputationOfOtherGroups=Setzen Sie dieses Fehld auf Ja, wenn diese Gruppe eine Berechnung von anderen Gruppen ist
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +SeveralLangugeVariatFound=Mehrere Sprachvarianten gefunden
    +COMPANY_AQUARIUM_REMOVE_SPECIAL=Sonderzeichen entfernen
    +COMPANY_AQUARIUM_CLEAN_REGEX=Regexfilter um die Werte zu Bereinigen (COMPANY_AQUARIUM_CLEAN_REGEX)
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Einstellungen des Moduls Soziale Medien (Social Networks)
    +EnableFeatureFor=Aktiviere Features für <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Vertauschen von Absender- und Empfängeradresse im PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Konfiguration des Modul Ressourcen
     UseSearchToSelectResource=Verwende ein Suchformular um eine Ressource zu wählen (eher als eine Dropdown-Liste) zu wählen.
     DisabledResourceLinkUser=Funktion deaktivieren, um eine Ressource mit Benutzern zu verknüpfen
     DisabledResourceLinkContact=Funktion deaktivieren, um eine Ressource mit Kontakten zu verknüpfen
     ConfirmUnactivation=Modul zurücksetzen bestätigen
    +OnMobileOnly=Nur auf kleinen Bildschirmen (Smartphones)
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/de_DE/bills.lang b/htdocs/langs/de_DE/bills.lang
    index f457d28fef1..ec2b27d0943 100644
    --- a/htdocs/langs/de_DE/bills.lang
    +++ b/htdocs/langs/de_DE/bills.lang
    @@ -11,7 +11,7 @@ BillsSuppliersUnpaidForCompany=Unbezahlte Lieferantenrechnungen für %s
     BillsLate=Verspätete Zahlungen
     BillsStatistics=Statistik Kundenrechnungen
     BillsStatisticsSuppliers=Statistik Lieferantenrechnungen
    -DisabledBecauseDispatchedInBookkeeping=Deaktiviert da die Rechnung schon in die Buchhaltung übernommen wurde
    +DisabledBecauseDispatchedInBookkeeping=Deaktiviert, da die Rechnung schon in die Buchhaltung übernommen wurde
     DisabledBecauseNotLastInvoice=Deaktiviert da die Rechnung nicht gelöscht werden kann. Es wurden schon Rechnungen nach dieser Rechnung erstellt, so dass die Nummerierung nicht fortlaufend wäre.
     DisabledBecauseNotErasable=Deaktiviert, da löschen nicht möglich
     InvoiceStandard=Standardrechnung
    @@ -25,10 +25,10 @@ InvoiceProFormaAsk=Proforma-Rechnung
     InvoiceProFormaDesc=Die <b>Proforma-Rechnung</b> ist das Abbild einer echten Rechnung, hat aber keinen buchhalterischen Wert.
     InvoiceReplacement=Ersatzrechnung
     InvoiceReplacementAsk=Ersatzrechnung für Rechnung
    -InvoiceReplacementDesc=<b>Ersatzrechnungen</b> dienen dem Storno und vollständigen Ersatz einer Rechnung ohne bereits erfolgtem Zahlungseingang. <br><br> Hinweis: Rechnungen mit Zahlungseingang können nicht ersetzt werden. Falls noch nicht geschlossen, werden ersetzte Rechnungen automatisch als 'Aufgegeben geschlossen' markiert.
    +InvoiceReplacementDesc=<b>Replacement invoice</b> is used to cancel and completely replace an invoice with no payment already received.<br><br>Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'.
     InvoiceAvoir=Gutschrift
     InvoiceAvoirAsk=Gutschrift zur Rechnungskorrektur
    -InvoiceAvoirDesc=Eine <b>Gutschrift</b> ist eine negative Rechnung zur Begleichung von Wertdifferenzen zwischen Rechnungssummen und Zahlungseingängen (Zuviel bezahlt oder mangelhafte Lieferung).
    +InvoiceAvoirDesc=The <b>credit note</b> is a negative invoice used to correct the fact that an invoice has an amount that differs from the amount really paid (eg customer paid too much by mistake, or will not pay completely since he returned some products).
     invoiceAvoirWithLines=Neue Gutschrift mit den Positionen der Ursprungs-Rechnung
     invoiceAvoirWithPaymentRestAmount=Gutschrift über den Restbetrag der Originalrechnung erstellen
     invoiceAvoirLineWithPaymentRestAmount=Gutschrift über den Restbetrag der Originalrechnung
    @@ -66,8 +66,8 @@ paymentInInvoiceCurrency=in Rechnungswährung
     PaidBack=Zurück bezahlt
     DeletePayment=Lösche Zahlung
     ConfirmDeletePayment=Möchten Sie diese Zahlung wirklich löschen?
    -ConfirmConvertToReduc=Möchten Sie dieses %s in einen absoluten Rabatt konvertieren? <br> Der Betrag wird so unter allen Rabatten gespeichert und kann als Rabatt für ein aktuelle oder zukünftige Rechnung für diese Kunden verwendet werden.
    -ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount ?<br>The amount will so be saved among all discounts and could be used as a discount for a current or a future invoice for this supplier.
    +ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount?<br>The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer.
    +ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount?<br>The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this supplier.
     SupplierPayments=Lieferantenzahlungen
     ReceivedPayments=Erhaltene Zahlungen
     ReceivedCustomersPayments=Erhaltene Anzahlungen von Kunden
    @@ -91,8 +91,8 @@ PaymentConditionsShort=Zahlungsziel
     PaymentAmount=Zahlungsbetrag
     ValidatePayment=Zahlung freigeben
     PaymentHigherThanReminderToPay=Zahlungsbetrag übersteigt Zahlungserinnerung
    -HelpPaymentHigherThanReminderToPay=Achtung, der Zahlungsbetrag einer oder mehrerer Rechnungen ist höher als der offene Restbetrag.<br>Bearbeiten Sie Ihre Eingabe oder bestätigen Sie die Überzahlung und erstellen Sie ggf eine Gutschrift für jede überzahlte Rechnung.
    -HelpPaymentHigherThanReminderToPaySupplier=Attention, the payment amount of one or more bills is higher than the rest to pay. <br> Edit your entry, otherwise confirm and think about creating a credit note of the excess paid for each overpaid invoice.
    +HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay. <br> Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice.
    +HelpPaymentHigherThanReminderToPaySupplier=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay. <br> Edit your entry, otherwise confirm and consider creating a credit note for the excess paid for each overpaid invoice.
     ClassifyPaid=Als 'bezahlt' markieren
     ClassifyPaidPartially=Als 'teilweise bezahlt' markieren
     ClassifyCanceled=Rechnung 'aufgegeben'
    @@ -109,9 +109,9 @@ CancelBill=Rechnung stornieren
     SendRemindByMail=Zahlungserinnerung per E-Mail versenden
     DoPayment=Zahlung eingeben
     DoPaymentBack=Rückerstattung eingeben
    -ConvertToReduc=Mark as credit available
    -ConvertExcessReceivedToReduc=Convert excess received into available credit
    -ConvertExcessPaidToReduc=Convert excess paid into available discount
    +ConvertToReduc=Markieren als "Guthaben verfügbar"
    +ConvertExcessReceivedToReduc=Zuviel erhalterner Betrag in Guthaben umwandeln
    +ConvertExcessPaidToReduc=Zuviel bezahlter Betrag in Rabatt umwandeln
     EnterPaymentReceivedFromCustomer=Geben Sie die vom Kunden erhaltene Zahlung ein
     EnterPaymentDueToCustomer=Kundenzahlung fällig stellen
     DisabledBecauseRemainderToPayIsZero=Deaktiviert, da Zahlungserinnerung auf null steht
    @@ -120,7 +120,7 @@ BillStatus=Rechnung Status
     StatusOfGeneratedInvoices=Status der erstellten Rechnungen
     BillStatusDraft=Entwurf (freizugeben)
     BillStatusPaid=Bezahlt
    -BillStatusPaidBackOrConverted=Credit note refund or marked as credit available
    +BillStatusPaidBackOrConverted=Gutschrift oder als Guthaben markiert
     BillStatusConverted=Bezahlt (in der Schlussrechnung zu verarbeiten)
     BillStatusCanceled=Aufgegeben
     BillStatusValidated=Freigegeben (zu bezahlen)
    @@ -132,6 +132,7 @@ BillStatusClosedPaidPartially=Bezahlt (teilweise)
     BillShortStatusDraft=Entwurf
     BillShortStatusPaid=Bezahlt
     BillShortStatusPaidBackOrConverted=Rückerstattet oder umgewandelt
    +Refunded=Rückerstattet
     BillShortStatusConverted=Bezahlt
     BillShortStatusCanceled=Storniert
     BillShortStatusValidated=Freigegeben
    @@ -145,7 +146,7 @@ ErrorVATIntraNotConfigured=Intrakommunale UID-Nr. noch nicht definiert
     ErrorNoPaiementModeConfigured=Keine standardmäßige Zahlungsart definiert. Beheben Sie diesen Fehler in den Einstellungen des Rechnungsmoduls.
     ErrorCreateBankAccount=Legen Sie ein Bankkonto an und definieren Sie anschließend die Zahlungsarten in den Einstellungen des Rechnungsmoduls.
     ErrorBillNotFound=Rechnung %s existiert nicht
    -ErrorInvoiceAlreadyReplaced=Fehler: Sie versuchen eine Ersatzrechnung für Rechnung %s freizugeben. Diese wurde allerdings bereits durch Rechnung %s ersetzt.
    +ErrorInvoiceAlreadyReplaced=Error, you tried to validate an invoice to replace invoice %s. But this one has already been replaced by invoice %s.
     ErrorDiscountAlreadyUsed=Fehler: Dieser Rabatt ist bereits verbraucht.
     ErrorInvoiceAvoirMustBeNegative=Fehler: Gutschriften verlangen nach einem negativen Rechnungsbetrag
     ErrorInvoiceOfThisTypeMustBePositive=Fehler: Rechnungen dieses Typs verlangen nach einem positiven Rechnungsbetrag
    @@ -179,7 +180,7 @@ ConfirmClassifyPaidBill=Möchten Sie die Rechnung <b>%s</b> wirklich als 'bezahl
     ConfirmCancelBill=Möchten sie die Rechnung <b>%s</b> wirklich stornieren?
     ConfirmCancelBillQuestion=Möchten Sie diesen Sozialbeitrag wirklich als 'abgebrochen' markieren?
     ConfirmClassifyPaidPartially=Möchten Sie die Rechnung <b>%s</b> wirklich als 'bezahlt' markieren?
    -ConfirmClassifyPaidPartiallyQuestion=Diese Rechnung wurde noch nicht vollständig bezahlt. Warum möchten Sie diese Rechnung als erledigt bestätigen ?
    +ConfirmClassifyPaidPartiallyQuestion=This invoice has not been paid completely. What is the reason/s for you closing this invoice?
     ConfirmClassifyPaidPartiallyReasonAvoir=Der offene Zahlbetrag <b>( %s %s)</b> resultiert aus einem gewährten Skonto. Zur Korrektur der USt. wird eine Gutschrift angelegt.
     ConfirmClassifyPaidPartiallyReasonDiscount=Unbezahlter Rest <b>(%s %s)</b> ist gewährter Rabatt / Skonto.
     ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Der offene Zahlbetrag <b>( %s %s)</b> resultiert aus einem gewährten Skonto. Ich akzeptiere den Verlust der USt. aus diesem Rabatt.
    @@ -187,12 +188,12 @@ ConfirmClassifyPaidPartiallyReasonDiscountVat=Der offene Zahlbetrag <b>( %s %s)<
     ConfirmClassifyPaidPartiallyReasonBadCustomer=schlechter Zahler
     ConfirmClassifyPaidPartiallyReasonProductReturned=Produkte teilweise retourniert
     ConfirmClassifyPaidPartiallyReasonOther=Betrag aus anderen Gründen uneinbringlich
    -ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=Diese Wahl ist möglich, wenn Sie Ihre Rechnung mit passenden Kommentar versehen sein. (Beispiel «Nur die Steuer entsprechend dem Preis, der gezahlt worden tatsächlich gibt Rechte an Abzug»)
    -ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=Diese Option steht Ihnen nur dann offen, falls Ihre Rechnung einen entsprechenden Vermerk enthält. (Beispiel: Nur der tatsächlich bezahlte Preis ist abzugsfähig)
    +ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=This choice is possible if your invoice has been provided with suitable comments. (Example «Only the tax corresponding to the price that has been actually paid gives rights to deduction»)
    +ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=In some countries, this choice might be possible only if your invoice contains correct notes.
     ConfirmClassifyPaidPartiallyReasonAvoirDesc=Mit dieser Wahl, wenn alle anderen nicht passt
    -ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=Unter <b>Kundenverschulden</b> fallen vor allem Zahlungsunwilligkeit-, bzw. -unfähigkeit (Insolvenz).
    +ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=A <b>bad customer</b> is a customer that refuses to pay his debt.
     ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Wählen Sie diese Option, falls die Zahlungsdifferenz aus Warenrücksendungen resultiert.
    -ConfirmClassifyPaidPartiallyReasonOtherDesc=Wählen Sie diese Option, falls keine der anderen zutrifft: <br> - Mangelhafte oder falsche Lieferung <br> - Forderung auf Grund vergessenen Rabatts zu hoch <br> Korrigieren Sie in jedem Fall das Rechnungswesen über eine entsprechende Gutschrift.
    +ConfirmClassifyPaidPartiallyReasonOtherDesc=Use this choice if all others are not suitable, for example in following situation:<br>- payment not complete because some products were shipped back<br>- amount claimed too important because a discount was forgotten<br>In all cases, amount over-claimed must be corrected in accountancy system by creating a credit note.
     ConfirmClassifyAbandonReasonOther=Andere
     ConfirmClassifyAbandonReasonOtherDesc=Wählen Sie diese Option in allen anderen Fällen, z.B. wenn Sie planen, eine Ersatzrechnung anzulegen.
     ConfirmCustomerPayment=Bestätigen Sie diesen Zahlungseingang für <b>%s</b>, %s?
    @@ -200,9 +201,10 @@ ConfirmSupplierPayment=Bestätigen Sie diesen Zahlungseingang für <b>%s</b>, %s
     ConfirmValidatePayment=Zahlung wirklich annehmen? Eine Änderung ist anschließend nicht mehr möglich.
     ValidateBill=Rechnung freigeben
     UnvalidateBill=Ungültige Rechnung
    -NumberOfBills=Anzahl der Rechnungen
    +NumberOfBills=Anzahl Rechnungen
     NumberOfBillsByMonth=Anzahl Rechnungen pro Monat
     AmountOfBills=Anzahl der Rechnungen
    +AmountOfBillsHT=Rechnungsbetrag (Netto ohne Steuern)
     AmountOfBillsByMonthHT=Gesamtbetrag Rechnungen pro Monat (inkl. Steuern)
     ShowSocialContribution=Zeige Sozialabgaben/Unternehmenssteuer
     ShowBill=Zeige Rechnung
    @@ -260,9 +262,9 @@ Repeatables=Vorlagen
     ChangeIntoRepeatableInvoice=erzeuge Rechnungsvorlage
     CreateRepeatableInvoice=Rechnungs-Vorlage erstellen
     CreateFromRepeatableInvoice=Aus Rechnungs-Vorlage erzeugen
    -CustomersInvoicesAndInvoiceLines=Kundenrechnungen und -positionen
    +CustomersInvoicesAndInvoiceLines=Kundenrechnungen und -details
     CustomersInvoicesAndPayments=Kundenrechnungen und -zahlungen
    -ExportDataset_invoice_1=Kundenrechnungen und -positionen
    +ExportDataset_invoice_1=Kundenrechnungen und -details
     ExportDataset_invoice_2=Kundenrechnungen und -zahlungen
     ProformaBill=Proforma-Rechnung:
     Reduction=Ermäßigung
    @@ -282,13 +284,13 @@ RelativeDiscount=Relativer Rabatt
     GlobalDiscount=Rabattregel
     CreditNote=Gutschrift
     CreditNotes=Gutschriften
    -CreditNotesOrExcessReceived=Credit notes or excess received
    +CreditNotesOrExcessReceived=Gutschriften / erh. Überschuss
     Deposit=Anzahlung
     Deposits=Anzahlungen
     DiscountFromCreditNote=Rabatt aus Gutschrift %s
     DiscountFromDeposit=Anzahlung für Rechnung %s
    -DiscountFromExcessReceived=Payments in excess of invoice %s
    -DiscountFromExcessPaid=Payments in excess of invoice %s
    +DiscountFromExcessReceived=Überzahlungen der Rechnung %s empfangen
    +DiscountFromExcessPaid=Überzahlungen der Rechnung %s empfangen
     AbsoluteDiscountUse=Diese Art von Guthaben kann verwendet werden auf der Rechnung vor der Validierung
     CreditNoteDepositUse=Die Rechnung muss bestätigt werden, um Gutschriften zu erstellen
     NewGlobalDiscount=Neue Rabattregel
    @@ -297,14 +299,14 @@ DiscountType=Rabatt Typ
     NoteReason=Anmerkung/Begründung
     ReasonDiscount=Rabattgrund
     DiscountOfferedBy=Rabatt angeboten von
    -DiscountStillRemaining=Discounts or credits available
    -DiscountAlreadyCounted=Discounts or credits already consumed
    -CustomerDiscounts=Customer discounts
    -SupplierDiscounts=Vendors discounts
    +DiscountStillRemaining=Rabatte oder Gutschriften verfügbar
    +DiscountAlreadyCounted=Rabatte oder Gutschriften  bereits berücksichtigt
    +CustomerDiscounts=Kundenrabatte
    +SupplierDiscounts=Lieferantenrabatte
     BillAddress=Rechnungsanschrift
    -HelpEscompte=Bei diesem Rabatt handelt es sich um einen Skonto.
    -HelpAbandonBadCustomer=Dieser Betrag wurde aufgegeben (Kundenverschulden) ist als uneinbringlich zu werten.
    -HelpAbandonOther=Dieser Betrag wurde auf Grund eines Fehlers aufgegeben (falsche Rechnung oder an falschen Kunden)
    +HelpEscompte=This discount is a discount granted to customer because payment was made before term.
    +HelpAbandonBadCustomer=This amount has been abandoned (customer said to be a bad customer) and is considered as an exceptional loss.
    +HelpAbandonOther=Dieser Betrag wurde auf Grund eines Fehlers aufgegeben (z.B. falscher Kunde oder Ersatzrechnung erstellt)
     IdSocialContribution=Sozialabgaben/Unternehmenssteuer Zahlungs-ID
     PaymentId=Zahlung id
     PaymentRef=Zahlung Nr.
    @@ -321,31 +323,31 @@ InvoiceNotChecked=Keine Rechnung ausgewählt
     CloneInvoice=Rechnung duplizieren
     ConfirmCloneInvoice=Möchten Sie diese Rechnung <b>%s</b> wirklich duplizieren?
     DisabledBecauseReplacedInvoice=Aktion unzulässig, da die betreffende Rechnung ersetzt wurde
    -DescTaxAndDividendsArea=Dieser Bereich zeigt eine Zusammenfassung aller Zahlungen auf spezielle Ausgaben. Nur Zeilen mit Zahlungen in dem Geschäftsjahr werden angezeigt.
    -NbOfPayments=Anzahl der Zahlungen
    +DescTaxAndDividendsArea=Dieser Bereich stellt eine Übersicht aller Zahlungen für sonstige Ausgaben dar. Nur Datensätze mit Zahlung im festgelegten Jahr sind enthalten.
    +NbOfPayments=Anzahl Zahlungen
     SplitDiscount=Rabatt in zwei aufteilen
    -ConfirmSplitDiscount=Möchten Sie wirklich den Rabatt von  <b>%s</b> %s in zwei kleinere Rabatte aufteilen ?
    -TypeAmountOfEachNewDiscount=Geben Sie den Betrag für jeden der zwei Teile ein:
    -TotalOfTwoDiscountMustEqualsOriginal=Summe der beiden neuen Rabatte muss gleich dem ursprünglichen Rabattbetrag sein.
    +ConfirmSplitDiscount=Are you sure you want to split this discount of <b>%s</b> %s into 2 smaller discounts?
    +TypeAmountOfEachNewDiscount=Geben Sie den Betrag für jeden der beiden Teile ein:
    +TotalOfTwoDiscountMustEqualsOriginal=Total of two new discounts must be equal to original discount amount.
     ConfirmRemoveDiscount=Sind Sie sicher, dass sie diesen Rabatt löschen wollen?
     RelatedBill=Ähnliche Rechnung
     RelatedBills=Ähnliche Rechnungen
     RelatedCustomerInvoices=Ähnliche Kundenrechnungen
     RelatedSupplierInvoices=Ähnliche Lieferantenrechnungen
     LatestRelatedBill=Letzte ähnliche Rechnung
    -WarningBillExist=Achtung, es existiert bereits mindestens eine Rechnung
    +WarningBillExist=Warning, one or more invoices already exist
     MergingPDFTool=PDF zusammenführen
     AmountPaymentDistributedOnInvoice=Zahlungsbetrag verteilt auf Rechnung
     PaymentOnDifferentThirdBills=Erlaube Zahlungen für Rechnungen an verschiedene Partner der selben Firma.
     PaymentNote=Zahlungshinweis
     ListOfPreviousSituationInvoices=Liste der vorherigen Fortschrittsrechnungen
     ListOfNextSituationInvoices=Liste der nächsten Fortschrittsrechnungen
    -ListOfSituationInvoices=List of situation invoices
    -CurrentSituationTotal=Total current situation
    -DisabledBecauseNotEnouthCreditNote=To remove a situation invoice from cycle, this invoice's credit note total must cover this invoice total
    -RemoveSituationFromCycle=Remove this invoice from cycle
    -ConfirmRemoveSituationFromCycle=Remove this invoice %s from cycle ?
    -ConfirmOuting=Confirm outing
    +ListOfSituationInvoices=Liste der Rechnungssituationen
    +CurrentSituationTotal=Total Rechnungssituationen
    +DisabledBecauseNotEnouthCreditNote=Um eine Rechnungssitzuation von diesem Zyklus auszuschliessen, muss das Guthabentotal den Rechnungsbetrag abdecken
    +RemoveSituationFromCycle=Diese Rechnung aus diesem Rechnugslauf ausschliessen
    +ConfirmRemoveSituationFromCycle=Diese Rechnung %s aus diesem Rechnungslauf ausschliessen?
    +ConfirmOuting=Auslassen bestätigen
     FrequencyPer_d=alle %s Tage
     FrequencyPer_m=Alle %s Monate
     FrequencyPer_y=Alle %s Jahre
    @@ -355,10 +357,10 @@ NextDateToExecution=Datum der nächsten Rechnungserstellung
     NextDateToExecutionShort=Datum nächste Generierung
     DateLastGeneration=Datum der letzten Generierung
     DateLastGenerationShort=Datum letzte Generierung
    -MaxPeriodNumber=Max number of invoice generation
    -NbOfGenerationDone=Number of invoice generation already done
    -NbOfGenerationDoneShort=Number of generation done
    -MaxGenerationReached=Maximum number of generations reached
    +MaxPeriodNumber=Höchten Nummer des Rechnungslaufes
    +NbOfGenerationDone=Rechnungslauf für diese Nummer schon durchgeführt
    +NbOfGenerationDoneShort=Anzahl Generationen durchgeführt
    +MaxGenerationReached=Max. Anzahl Generierungen erreicht
     InvoiceAutoValidate=Rechnungen automatisch freigeben
     GeneratedFromRecurringInvoice=Erstelle wiederkehrende Rechnung %s aus Vorlage
     DateIsNotEnough=Datum noch nicht erreicht
    @@ -394,7 +396,7 @@ PaymentConditionShort14DENDMONTH=14 Tage nach Monatsende
     PaymentCondition14DENDMONTH=Innerhalb von 14 Tagen nach Monatsende
     FixAmount=Fester Betrag
     VarAmount=Variabler Betrag (%% tot.)
    -VarAmountOneLine=Variable amount (%% tot.) - 1 line with label '%s'
    +VarAmountOneLine=Variabler Betrag (%% Total) -1 Position mit Label '%s'
     # PaymentType
     PaymentTypeVIR=Banküberweisung
     PaymentTypeShortVIR=Banküberweisung
    @@ -408,8 +410,8 @@ PaymentTypeCHQ=Scheck
     PaymentTypeShortCHQ=Scheck
     PaymentTypeTIP=Banküberweisung (Dokument gegen Zahlung)
     PaymentTypeShortTIP=Banküberweisung
    -PaymentTypeVAD=Online-Zahlung
    -PaymentTypeShortVAD=Online-Zahlung
    +PaymentTypeVAD=Online Zahlung
    +PaymentTypeShortVAD=Online Zahlung
     PaymentTypeTRA=Scheck
     PaymentTypeShortTRA=Scheck
     PaymentTypeFAC=Nachnahme
    @@ -418,9 +420,9 @@ BankDetails=Bankverbindung
     BankCode=Bankleitzahl
     DeskCode=Desk-Code
     BankAccountNumber=Kontonummer
    -BankAccountNumberKey=Schlüssel
    +BankAccountNumberKey=Prüfziffer
     Residence=Lastschrift
    -IBANNumber=IBAN-Nummer
    +IBANNumber=Ganze IBAN Kontonummer
     IBAN=IBAN
     BIC=BIC/SWIFT
     BICNumber=BIC Code
    @@ -445,7 +447,7 @@ PaymentByTransferOnThisBankAccount=Zahlung per Überweisung auf folgendes Konto
     VATIsNotUsedForInvoice=* Nicht für USt-art-CGI-293B
     LawApplicationPart1=Durch die Anwendung des Gesetzes 80,335 von 12/05/80
     LawApplicationPart2=Die Ware bleibt Eigentum
    -LawApplicationPart3=des Verkäufers bis zur vollständigen Bezahlung
    +LawApplicationPart3=the seller until full payment of
     LawApplicationPart4=des Preises.
     LimitedLiabilityCompanyCapital=SARL mit einem Kapital von
     UseLine=Übernehmen
    @@ -474,21 +476,22 @@ Reported=Verzögert
     DisabledBecausePayments=Nicht möglich, da es Zahlungen gibt
     CantRemovePaymentWithOneInvoicePaid=Die Zahlung kann nicht entfernt werden, da es mindestens eine Rechnung gibt, die als bezahlt markiert ist
     ExpectedToPay=Erwartete Zahlung
    -CantRemoveConciliatedPayment=Zugeordnete Zahlung kann nicht gelöscht werden.
    +CantRemoveConciliatedPayment=Can't remove reconciled payment
     PayedByThisPayment=mit dieser Zahlung beglichen
    -ClosePaidInvoicesAutomatically=Markiert alle Standard-, Anzahlungs- oder Ersatzrechnungen als "bezahlt", wenn diese vollständig beglichen sind.
    +ClosePaidInvoicesAutomatically=Classify "Paid" all standard, down payment or replacement invoices paid entirely.
     ClosePaidCreditNotesAutomatically=Markiert alle Gutschriften als "bezahlt", wenn diese vollständig beglichen sind.
    -ClosePaidContributionsAutomatically=Vollständig beglichenen Sozialabgaben oder Steuerbeträge als "bezahlt" kennzeichnen.
    -AllCompletelyPayedInvoiceWillBeClosed=Alle Rechnungen ohne ausstehende Zahlungen werden automatisch geschlossen und als "bezahlt" markiert.
    +ClosePaidContributionsAutomatically=Classify "Paid" all social or fiscal contributions paid entirely.
    +AllCompletelyPayedInvoiceWillBeClosed=All invoice with no remainder to pay will be automatically closed with status "Paid".
     ToMakePayment=Bezahlen
     ToMakePaymentBack=Rückzahlung
     ListOfYourUnpaidInvoices=Liste aller unbezahlten Rechnungen
     NoteListOfYourUnpaidInvoices=Bitte beachten: Diese Liste enthält nur Rechnungen an Partner, bei denen Sie als Vertreter angegeben sind.
     RevenueStamp=Steuermarke
    -YouMustCreateInvoiceFromThird=Diese Option ist nur verfügbar beim erstellen von Rechnungen aus dem Kundenbereich
    -YouMustCreateInvoiceFromSupplierThird=Diese Option ist nur verfügbar beim erstellen von Rechnungen aus dem Bereich Lieferanten in den Partnern
    +YouMustCreateInvoiceFromThird=This option is only available when creating invoices from tab "customer" of third party
    +YouMustCreateInvoiceFromSupplierThird=This option is only available when creating invoices from tab "supplier" of third party
     YouMustCreateStandardInvoiceFirstDesc=Zuerst muss eine Standardrechnung erstellt werden, dies kann dann in eine neue Rechnungsvorlage konvertiert werden
     PDFCrabeDescription=Rechnungs-Modell Crabe. Eine vollständige Rechnung (Empfohlene Vorlage)
    +PDFSpongeDescription=Invoice PDF template Sponge. A complete invoice template
     PDFCrevetteDescription=PDF Rechnungsvorlage Crevette. Vollständige Rechnungsvolage für normale Rechnungen
     TerreNumRefModelDesc1=Liefert eine Nummer mit dem Format %syymm-nnnn für Standard-Rechnungen und %syymm-nnnn für Gutschriften, wobei yy=Jahr, mm=Monat und nnnn eine lückenlose Folge ohne Überlauf auf 0 ist
     MarsNumRefModelDesc1=Liefere Nummer im Format  %syymm-nnnn für Standardrechnungen %syymm-nnnn für Ersatzrechnung,  %syymm-nnnn für Anzahlungsrechnung und %syymm-nnnn für Gutschriften wobei  yy Jahr, mm Monat und nnnn eine laufende Nummer ohne Unterbrechung und ohne Rückkehr zu 0 ist.
    @@ -513,9 +516,9 @@ SituationAmount=Situation Rechnungsbetrag (ohne USt.)
     SituationDeduction=Situation Subtraktion
     ModifyAllLines=Bearbeite alle Zeilen
     CreateNextSituationInvoice=Erstelle nächsten Fortschritt-Rechnung
    -ErrorFindNextSituationInvoice=Error unable to find next situation cycle ref
    -ErrorOutingSituationInvoiceOnUpdate=Unable to outing this situation invoice.
    -ErrorOutingSituationInvoiceCreditNote=Unable to outing linked credit note.
    +ErrorFindNextSituationInvoice=Fehler Kann die nächste Situation im Zyklus nicht finden
    +ErrorOutingSituationInvoiceOnUpdate=Kann diese Situationsrechnung nicht ausschliessen.
    +ErrorOutingSituationInvoiceCreditNote=Kann dies verknüpfte Gutschrift nicht ausschliessen.
     NotLastInCycle=Diese Rechnung ist nicht die letzte im Zyklus und darf nicht geändert werden.
     DisabledBecauseNotLastInCycle=Die nächste Situation existiert bereits.
     DisabledBecauseFinal=Dieser Status ist endgültig.
    @@ -533,7 +536,7 @@ invoiceLineProgressError=Fortschritt der Rechnungsposition kann nicht größer o
     updatePriceNextInvoiceErrorUpdateline=Fehler: Preis der Rechnungsposition %s aktualisieren
     ToCreateARecurringInvoice=Um eine wiederkehrende Rechnung für diesen Vertrag zu erstellen, legen Sie zuerst einen Rechnungsentwurf an, wandeln diesen dann in eine Rechnungsvorlage um und definieren die Häufigkeit der Erstellung der zukünftigen Rechnungen.
     ToCreateARecurringInvoiceGene=Um zukünftige Rechnungen regelmäßig und manuell zu erstellen, rufen Sie das Menü <strong>%s - %s - %s</strong>.
    -ToCreateARecurringInvoiceGeneAuto=Wollen Sie diese Rechnungen automatisch generieren lassen, fragen Sie Ihren Administrator das Modul <strong>%s</strong> zu aktivieren und einzurichten. Sie können beide Methoden (manuell und automatisch) ohne Risiko von doppelten Rechnungen zusammen verwenden.
    +ToCreateARecurringInvoiceGeneAuto=If you need to have such invoices generated automatically, ask your administrator to enable and setup module <strong>%s</strong>. Note that both method (manual and automatic) can be used together with no risk of duplication.
     DeleteRepeatableInvoice=Rechnungs-Template löschen
     ConfirmDeleteRepeatableInvoice=Möchten Sie diese Rechnungsvorlage wirklich löschen?
     CreateOneBillByThird=Erstelle eine Rechnung pro Partner (andernfalls, eine Rechnung pro Bestellung)
    @@ -541,8 +544,9 @@ BillCreated=%s Rechnung(en) erstellt
     StatusOfGeneratedDocuments=Status der Dokumentenerstellung
     DoNotGenerateDoc=Dokumentdatei nicht erstellen
     AutogenerateDoc=Dokumentdatei automatisch erstellen
    -AutoFillDateFrom=Set start date for service line with invoice date
    +AutoFillDateFrom=Startdatum der Dienstleistung auf das Rechnungsdatum setzen
     AutoFillDateFromShort=Legen Sie das Startdatum fest
    -AutoFillDateTo=Set end date for service line with next invoice date
    -AutoFillDateToShort=Set end date
    -MaxNumberOfGenerationReached=Max number of gen. reached
    +AutoFillDateTo=Enddatum der Dienstleistung auf das Rechnungsdatum setzen
    +AutoFillDateToShort=Enddatum festlegen
    +MaxNumberOfGenerationReached=Maximal Anzahl Generierungen erreicht
    +BILL_DELETEInDolibarr=Rechnung gelöscht
    diff --git a/htdocs/langs/de_DE/companies.lang b/htdocs/langs/de_DE/companies.lang
    index 856871fe635..51e9d405440 100644
    --- a/htdocs/langs/de_DE/companies.lang
    +++ b/htdocs/langs/de_DE/companies.lang
    @@ -8,11 +8,11 @@ ConfirmDeleteContact=Möchten Sie diesen Partner und alle damit verbundenen Info
     MenuNewThirdParty=Neuer Partner
     MenuNewCustomer=Neuer Kunde
     MenuNewProspect=Neuer Lead
    -MenuNewSupplier=New vendor
    +MenuNewSupplier=Neuer Lieferant
     MenuNewPrivateIndividual=Neue Privatperson
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewCompany=Neue Firma  (Interessent, Kunde, Lieferant)
    +NewThirdParty=Neuer Partner (Interessent, Kunde, Lieferant)
    +CreateDolibarrThirdPartySupplier=Neuen Lieferanten erstellen 
     CreateThirdPartyOnly=Partner erstellen
     CreateThirdPartyAndContact=Neuen Partner und Unteradresse erstellen
     ProspectionArea=Übersicht Geschäftsanbahnung
    @@ -37,14 +37,14 @@ ThirdPartyProspectsStats=Leads
     ThirdPartyCustomers=Kunden
     ThirdPartyCustomersStats=Kunden
     ThirdPartyCustomersWithIdProf12=Kunden mit %s oder %s
    -ThirdPartySuppliers=Vendors
    +ThirdPartySuppliers=Lieferanten
     ThirdPartyType=Typ des Partners
     Individual=Privatperson
    -ToCreateContactWithSameName=Erzeugt automatisch einen Kontakt/Adresse mit der gleichen Information wie der Partner unter dem Partner. In den meisten Fällen, auch wenn Ihr Prtner eine natürliche Person ist, reicht nur die Anlage eines Partners
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Muttergesellschaft
     Subsidiaries=Tochtergesellschaften
    -ReportByMonth=Report by month
    -ReportByCustomers=Report by customer
    +ReportByMonth=Bericht nach Monat
    +ReportByCustomers=Bericht nach Kunden
     ReportByQuarter=Bericht Quartal
     CivilityCode=Anrede
     RegisteredOffice=Firmensitz
    @@ -77,11 +77,11 @@ Web=Web
     Poste= Posten
     DefaultLang=Standard-Sprache
     VATIsUsed=inkl. MwSt.
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +VATIsUsedWhenSelling=Dies definiert ob dieser Partner Steuern auf der Rechnung an seine eigenen Kunden ausweist oder nicht
     VATIsNotUsed=exkl. MwSt.
     CopyAddressFromSoc=Anschriften zu diesem Partner
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Partner ist weder Kunde noch Lieferant, keine verbundenen Objekte
    +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Partner ist weder Kunde noch Lieferant, Rabatte sind nicht verfügbar
     PaymentBankAccount=Bankkonto für Zahlungen
     OverAllProposals=Angebote
     OverAllOrders=Bestellungen
    @@ -99,9 +99,9 @@ LocalTax2ES=EKSt.
     TypeLocaltax1ES=RE Typ
     TypeLocaltax2ES=EKSt. Typ
     WrongCustomerCode=Kundencode ungültig
    -WrongSupplierCode=Vendor code invalid
    +WrongSupplierCode=Lieferantennummer ist ungültig
     CustomerCodeModel=Kundencode-Modell
    -SupplierCodeModel=Vendor code model
    +SupplierCodeModel=Lieferantennummern-Modell
     Gencod=Barcode
     ##### Professional ID #####
     ProfId1Short=Prof. ID 1
    @@ -261,31 +261,31 @@ ProfId4DZ=Kundenidentifikationsnummer
     VATIntra=Umsatzsteuer ID
     VATIntraShort=Steuer ID
     VATIntraSyntaxIsValid=Die Syntax ist gültig
    -VATReturn=VAT return
    +VATReturn=Mehrwertsteuererstattung
     ProspectCustomer=Lead / Kunde
     Prospect=Lead
     CustomerCard=Kunden - Karte
     Customer=Kunde
     CustomerRelativeDiscount=Kundenrabatt relativ
    -SupplierRelativeDiscount=Relative vendor discount
    +SupplierRelativeDiscount=Relativer Lieferantenrabatt
     CustomerRelativeDiscountShort=Rabatt relativ
     CustomerAbsoluteDiscountShort=Rabatt absolut
     CompanyHasRelativeDiscount=Dieser Kunde hat einen Rabatt <b>von %s%%</b>
     CompanyHasNoRelativeDiscount=Dieser Kunde hat standardmäßig keinen relativen Rabatt
    -HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
    -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=Dieser Kunde hat noch ein Guthaben (Gutschrift oder Überzahlung) über <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=Für diesen Kunden existieren Rabatte (Anzahlungen) für <b>%s</b>%s
    +HasRelativeDiscountFromSupplier=Sie haben einen Standardrabatt von <b>%s%%</b> bei diesem Lieferanten
    +HasNoRelativeDiscountFromSupplier=Sie haben keinen relativen Rabatt bei diesem Lieferanten
    +CompanyHasAbsoluteDiscount=Dieser Kunde hat ein Guthaben verfügbar (Gutschriften oder Anzahlungen) für <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=Dieser Kunde hat ein Guthaben verfügbar (Gutschriften oder Anzahlungen) für<b>%s</b> %s
     CompanyHasCreditNote=Dieser Kunde hat noch Gutschriften <b>über %s %s</b>
    -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
    -HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    -HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for <b>%s</b> %s from this supplier
    -HasCreditNoteFromSupplier=You have credit notes for <b>%s</b> %s from this supplier
    +HasNoAbsoluteDiscountFromSupplier=Sie haben keinen Gutschschriften von diesen Lieferanten verfügbar
    +HasAbsoluteDiscountFromSupplier=Sie haben Rabatte (Gutschrift / Vorauszahlung) über <b>%s</b>%s bei diesem Lieferanten verfügbar
    +HasDownPaymentOrCommercialDiscountFromSupplier=Sie haben Rabatte (Restguthaben / Vorauszahlung) über <b>%s</b>%s bei diesem Lieferanten verfügbar
    +HasCreditNoteFromSupplier=Sie haben Gutschriften über <b>%s</b>%s bei diesem Lieferanten verfügbar
     CompanyHasNoAbsoluteDiscount=Dieser Kunde hat keine Rabattgutschriften zur Verfügung
    -CustomerAbsoluteDiscountAllUsers=Absolute customer discounts (granted by all users)
    -CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +CustomerAbsoluteDiscountAllUsers=Absolute Kundenrabatte (von allen Nutzern gewährte)
    +CustomerAbsoluteDiscountMy=Absolute Kundenrabatte (Durch sie persönlich gewährt)
    +SupplierAbsoluteDiscountAllUsers=Absolute Lieferantenrabatte (von allen Benutzern erfasst)
    +SupplierAbsoluteDiscountMy=Absolute Lieferantenrabatte (durch sie erfasst)
     DiscountNone=Keine
     Supplier=Lieferant
     AddContact=Kontakt erstellen
    @@ -304,19 +304,19 @@ DeleteACompany=Löschen eines Unternehmens
     PersonalInformations=Persönliche Daten
     AccountancyCode=Buchhaltungskonto
     CustomerCode=Kundennummer
    -SupplierCode=Vendor code
    +SupplierCode=Lieferantennummer
     CustomerCodeShort=Kundennummer
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Kunden-Code, einzigartig für alle Kunden
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +SupplierCodeShort=Lieferantennummer
    +CustomerCodeDesc=Kundennummer, eindeutig über alle Kunden
    +SupplierCodeDesc=Lieferantennummer, eindeutig über alle Lieferanten
     RequiredIfCustomer=Erforderlich falls Partner Kunde oder Interessent ist
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Gültigkeit überwacht von Modul
    -ThisIsModuleRules=Regeln dieses Moduls
    +RequiredIfSupplier=Erforderlich falls Partner Lieferant ist
    +ValidityControledByModule=Gültigkeit kontrolliert von Modul
    +ThisIsModuleRules=Regeln für dieses Modul
     ProspectToContact=Lead zu kontaktieren
     CompanyDeleted=Firma "%s" aus der Datenbank gelöscht.
     ListOfContacts=Liste der Kontakte
    -ListOfContactsAddresses=Liste der Ansprechpartner/Adressen
    +ListOfContactsAddresses=Liste der Kontakte
     ListOfThirdParties=Liste der Partner
     ShowCompany=Partner zeigen
     ShowContact=Kontakt  anzeigen
    @@ -338,14 +338,14 @@ MyContacts=Meine Kontakte
     Capital=Kapital
     CapitalOf=Stammkapital: %s
     EditCompany=Unternehmen bearbeiten
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=Dieser Benutzer ist kein Interessent, Kunde oder Lieferant
     VATIntraCheck=Prüfen
    -VATIntraCheckDesc=Der Link <b>%s</b> erlaubt eine Anfrage am Europäischen Mehrwertsteuer-Check-Service. Ein externer Zugang zum Internet-Server ist für diesen Dienst erforderlich.
    +VATIntraCheckDesc=Der Link <b>%s</b> erlaubt eine Anfrage am Europäischen Mehrwertsteuer-Check-Service. Ein Internetzugang ist für diesen Dienst erforderlich.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
     VATIntraCheckableOnEUSite=Überprüfen Sie Intrakommunale USt-Website der Europäischen Kommission
     VATIntraManualCheck=Sie können die Überprüfung auch manuell auf der Internetseite der Europäische Kommission durchführen: <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Anfrage nicht möglich. Überprüfungsdienst wird vom Mitgliedsland nicht angeboten (%s).
    -NorProspectNorCustomer=kein Kunde, kein Lead
    +NorProspectNorCustomer=Nicht Interessent oder Kunde
     JuridicalStatus=Rechtsform
     Staff=Mitarbeiterzahl
     ProspectLevelShort=Potenzial
    @@ -387,31 +387,31 @@ ExportCardToFormat=Karte in Format exportieren
     ContactNotLinkedToCompany=Kontakt keinem Partner zugeordnet
     DolibarrLogin=Dolibarr-Benutzername
     NoDolibarrAccess=Kein Zugang
    -ExportDataset_company_1=Partner und Eigenschaften
    -ExportDataset_company_2=Kontakte und Eigenschaften
    -ImportDataset_company_1=Partner und Eigenschaften
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Dritte / Außendienstmitarbeiter (Zuweisen von Außendienstmitarbeitern zu Unternehmen)
    +ExportDataset_company_1=Partner (Firmen/Stiftungen/Natürliche Personen) und ihre Eigenschaften
    +ExportDataset_company_2=Kontakte und ihre Eigenschaften
    +ImportDataset_company_1=Partner (Firmen/Stiftungen/Natürliche Personen) und ihre Eigenschaften
    +ImportDataset_company_2=Kontakte/Adressen und Attribute
    +ImportDataset_company_3=Bankkonten des Partners
    +ImportDataset_company_4=Partner - Außendienstmitarbeiter (Zuweisen von Außendienstmitarbeitern zu Unternehmen)
     PriceLevel=Preisstufe
     DeliveryAddress=Lieferadresse
     AddAddress=Adresse hinzufügen
    -SupplierCategory=Vendor category
    +SupplierCategory=Lieferantenkategorie
     JuridicalStatus200=Unabhängig
     DeleteFile=Datei löschen
     ConfirmDeleteFile=Möchten Sie diese Datei wirklich löschen?
     AllocateCommercial=Dem Vertriebsmitarbeiter zugewiesen
     Organization=Partner
    -FiscalYearInformation=Informationen über das Geschäftsjahr
    +FiscalYearInformation=Geschäftsjahr
     FiscalMonthStart=Erster Monat des Geschäftsjahres
     YouMustAssignUserMailFirst=Sie müssen zunächst eine E-Mail-Adresse für diesen Benutzer anlegen, um E-Mail-Benachrichtigungen zu ermöglichen.
     YouMustCreateContactFirst=Um E-mail-Benachrichtigungen anlegen zu können, müssen Sie zunächst einen Kontakt mit gültiger Email-Adresse zum Partner hinzufügen.
    -ListSuppliersShort=List of vendors
    +ListSuppliersShort=Liste der Lieferanten
     ListProspectsShort=Liste der Leads
     ListCustomersShort=Liste der Kunden
    -ThirdPartiesArea=Partner- und Kontaktbereich
    +ThirdPartiesArea=Partner und Kontakte
     LastModifiedThirdParties=%s zuletzt bearbeitete Partner
    -UniqueThirdParties=Gesamte Anzahl der Kontakte
    +UniqueThirdParties=Gesamte Anzahl Partner
     InActivity=Geöffnet
     ActivityCeased=Inaktiv
     ThirdPartyIsClosed=Partner ist geschlossen
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Aktuell ausstehende Rechnung
     OutstandingBill=Max. für ausstehende Rechnung
     OutstandingBillReached=Kreditlimite erreicht
     OrderMinAmount=Mindestbestellwert
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Gibt Zahlen mit dem Format %syymm-nnnn für die Kundennummer und %syymm-nnnn für die Lieferantennummer zurück, wobei yy Jahr, mm Monat und nnnn ununterbrochene Zahlenfolge ohne 0 ist.
     LeopardNumRefModelDesc=Kunden / Lieferanten-Code ist frei. Dieser Code kann jederzeit geändert werden.
     ManagingDirectors=Name(n) des/der Manager (CEO, Direktor, Geschäftsführer, ...)
     MergeOriginThirdparty=Partner duplizieren (Partner den Sie löschen möchten)
     MergeThirdparties=Partner zusammenlegen
    -ConfirmMergeThirdparties=Möchten Sie wirklich diesen Partner mit dem Aktuellen zusammenführen? Alle verbundenen Objekte (Rechnungen, Aufträge, ...) werden mit dem Aktuellen zusammengeführt, dann wird der Partner gelöscht werden.
    -ThirdpartiesMergeSuccess=Third parties have been merged
    +ConfirmMergeThirdparties=Möchten Sie wirklich diesen Partner mit dem aktuellen Partner zusammenführen? Alle verbundenen Objekte (Rechnungen, Aufträge, ...) werden mit dem aktuellen Partner zusammengeführt, dann wird der Partner gelöscht werden.
    +ThirdpartiesMergeSuccess=Partner wurden zusammengelegt
     SaleRepresentativeLogin=Login des Vertriebsmitarbeiters
     SaleRepresentativeFirstname=Vorname des Vertreter
     SaleRepresentativeLastname=Nachname des Vertreter
    -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +ErrorThirdpartiesMerge=Es gab einen Fehler beim Löschen des Partners. Bitte Details sind im Prokoll zu finden. Die Löschung wurden rückgängig gemacht.
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/de_DE/errors.lang b/htdocs/langs/de_DE/errors.lang
    index 3e3bc2089ad..13d52783b6a 100644
    --- a/htdocs/langs/de_DE/errors.lang
    +++ b/htdocs/langs/de_DE/errors.lang
    @@ -12,7 +12,7 @@ ErrorGroupAlreadyExists=Gruppe %s existiert bereits.
     ErrorRecordNotFound=Eintrag wurde nicht gefunden.
     ErrorFailToCopyFile=Konnte die Datei <b>'%s'</b> nicht nach <b>'%s'</b> kopieren.
     ErrorFailToCopyDir=Konnte Verzeichnis '<b>%s</b>' nicht nach '<b>%s</b>' kopieren.
    -ErrorFailToRenameFile=Konnte die Datei <b>'%s'</b> nicht in <b>'%s'</b> umzubenennen.
    +ErrorFailToRenameFile=Konnte die Datei <b>'%s'</b> nicht in <b>'%s'</b> umbenennen.
     ErrorFailToDeleteFile=Fehler beim Löschen der Datei '<b>%s</b>'.
     ErrorFailToCreateFile=Fehler beim Erstellen der Datei '<b>%s</b>'.
     ErrorFailToRenameDir=Fehler beim Umbenennen des Verzeichnisses '<b>%s</b>' in '<b>%s</b>'.
    @@ -32,9 +32,9 @@ ErrorBarCodeRequired=Barcode erforderlich
     ErrorCustomerCodeAlreadyUsed=Diese Kunden-Nr. ist bereits vergeben.
     ErrorBarCodeAlreadyUsed=Barcode wird bereits verwendet
     ErrorPrefixRequired=Präfix erforderlich
    -ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
    -ErrorSupplierCodeRequired=Lieferantennummer nötig 
    -ErrorSupplierCodeAlreadyUsed=Vendor code already used
    +ErrorBadSupplierCodeSyntax=Ungültige Syntax für Lieferantennummer.
    +ErrorSupplierCodeRequired=Lieferantennummer notwendig
    +ErrorSupplierCodeAlreadyUsed=Lieferanten Nr. bereits vergeben.
     ErrorBadParameters=Ungültige Werte
     ErrorBadValueForParameter=Ungültiger Wert '%s' für Paramter '%s'
     ErrorBadImageFormat=Bildformat nicht unsterstützt (Ihr PHP hat keine Konvertierungsfunktion für dieses Format)
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Eintrag '%s' hat falsche Datumsformat
     ErrorWrongDate=Falsches Datum!
     ErrorFailedToWriteInDir=Fehler beim Schreiben in das Verzeichnis %s
     ErrorFoundBadEmailInFile=Ungültige E-Mail-Adresse in %s Zeilen der Datei gefunden (z.B. Zeile %s mit E-Mail=%s)
    -ErrorUserCannotBeDelete=Dieser Benutzer kann nicht gelöscht werden. Eventuell ist er noch mit einem Partner verknüpft.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Ein oder mehrere erforderliche Felder wurden nicht ausgefüllt.
     ErrorSubjectIsRequired=Der E-Mailbetreff ist notwendig
     ErrorFailedToCreateDir=Fehler beim Erstellen eines Verzeichnisses. Vergewissern Sie sich, dass der Webserver-Benutzer Schreibberechtigungen für das Dokumentverzeichnis des Systems besitzt. Bei aktiviertem <b>safe_mode</b> sollten die Systemdateien den Webserver-Benutzer oder die -Gruppe als Besitzer haben.
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Bitte Wert für Auswahlliste eingeben
     ErrorNoValueForCheckBoxType=Bitte Wert für Kontrollkästchen-Liste eingeben
     ErrorNoValueForRadioType=Bitte Wert für Radiobutton-Liste eingeben
     ErrorBadFormatValueList=Die Listewerte kann nicht mehr als ein Komma:<u>%s</u> , muss jedoch mindestens einen Schlüssel, Wert beinhalten
    -ErrorFieldCanNotContainSpecialCharacters=Das Feld <b>%s</b> darf keine Sonderzeichen enthalten.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Das Feld <b>%s</b> darf keine Sonderzeichen, Großbuchstaben und Zahlen enthalten.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Kein Buchhaltungsmodul aktiviert
     ErrorExportDuplicateProfil=Dieser Profilname existiert bereits für dieses Exportprofil.
     ErrorLDAPSetupNotComplete=Der LDAP-Abgleich für dieses System ist nicht vollständig eingerichtet.
     ErrorLDAPMakeManualTest=Eine .ldif-Datei wurde im Verzeichnis %s erstellt. Laden Sie diese Datei von der Kommandozeile aus um mehr Informationen über Fehler zu erhalten.
    -ErrorCantSaveADoneUserWithZeroPercentage=Ereignisse können nicht mit Status "Nicht begonnen" gespeichert werden, wenn das Feld "Erledigt durch" ausgefüllt ist.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Die Nr. für den Erstellungsvorgang ist bereits vergeben
     ErrorPleaseTypeBankTransactionReportName=Geben Sie den Kontoauszug an, in dem die Zahlung enthalten ist (Format JJJJMM oder JJJJMMTT)
    -ErrorRecordHasChildren=Kann diesen Eintrag nicht löschen. Dieser Eintrag wird von mindestens einem untergeordneten Datensatz verwendet.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Objekt hat mindestens einen Untereintrag vom Typ %s
    -ErrorRecordIsUsedCantDelete=Eintrag kann nicht gelöscht werden. Er wird bereits benutzt oder ist in einem anderen Objekt enthalten.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Diese Funktion erfordert aktiviertes JavaScript. Aktivieren/deaktivieren können Sie Javascript im Menü Start-> Einstellungen->Anzeige.
     ErrorPasswordsMustMatch=Die eingegebenen Passwörter müssen identisch sein.
    -ErrorContactEMail=Ein technischer Fehler ist aufgetreten. Bitte kontaktieren Sie Ihren Administrator unter der folgenden E-Mail-Adresse <b>%s</b> und fügen Sie den Fehlercode <b>%s</b> in Ihrer Nachricht ein, oder (noch besser) fügen Sie einen Screenshot dieser Seite als Anhang bei.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Falscher Wert für Feld Nr. <b>%s</b> (Wert '<b>%s</b>' passt nicht zur Regex-Regel <b>%s</b>)
     ErrorFieldValueNotIn=Nicht korrekter Wert für das Feld Nummer <b>%s</b> (Wert '<b>%s</b>' ist kein verfügbarer Wert im Feld <b>%s</b> der Tabelle <b>%s</b>)
     ErrorFieldRefNotIn=Falscher Wert für Feldnummer <b>%s</b> (für den Wert <b>'%s'</b> besteht keine <b>%s</b> Referenz)
    @@ -87,7 +88,8 @@ ErrorsOnXLines=Fehler in <b>%s</b> Quellzeilen
     ErrorFileIsInfectedWithAVirus=Der Virenschutz konnte diese Datei nicht freigeben (eventuell ist diese mit einem Virus infiziert)
     ErrorSpecialCharNotAllowedForField=Sonderzeichen sind im Feld '%s' nicht erlaubt
     ErrorNumRefModel=Es besteht ein Bezug zur Datenbank (%s) der mit dieser Numerierungsfolge nicht kompatibel ist. Entfernen Sie den Eintrag oder benennen Sie den Verweis um, um dieses Modul zu aktivieren.
    -ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorQtyTooLowForThisSupplier=Menge zu klein für diesen Lieferanten oder kein Einstandspreis für diesen Lieferanten definiert
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Das Setup des Moduls ist unvollständig. Gehen Sie zu Home - Einstellungen - Module um die Einstellungen zu vervollständigen.
     ErrorBadMask=Fehler auf der Maske
     ErrorBadMaskFailedToLocatePosOfSequence=Fehler, Maske ohne fortlaufende Nummer
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Fehler, falscher Reset-Wert
     ErrorMaxNumberReachForThisMask=Maximum Größe für diese Maske erreicht
     ErrorCounterMustHaveMoreThan3Digits=Zähler muss mehr als 3 Stellen haben
     ErrorSelectAtLeastOne=Fehler. Wählen Sie mindestens einen Eintrag.
    -ErrorDeleteNotPossibleLineIsConsolidated=Löschen nicht möglich, da der Datensatz mit einer Banktransaktion verbunden ist.
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s wurde bereits einem Partner zugewiesen
     ErrorFailedToSendPassword=Fehler beim Zusenden des Passworts
     ErrorFailedToLoadRSSFile=RSS-Feeds welche Fehler erhalten. Versuchen Sie die Konstante 'MAIN_SIMPLEXMLLOAD_DEBUG' hinzufügen, wenn die Fehlermeldungen nicht genügend Informationen enthält.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Benutzer mit Anmeldung <b>%s</b> konnte nicht gefunden w
     ErrorLoginHasNoEmail=Dieser Benutzer hat keine E-Mail-Adresse. Prozess abgebrochen.
     ErrorBadValueForCode=Unzulässiger Code-Wert. Versuchen Sie es mit einem anderen Wert erneut...
     ErrorBothFieldCantBeNegative=Die Felder %s und %s können nicht gleichzeitig negativ sein
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Mengen in Kundenrechnungen dürfen nicht negativ sein
     ErrorWebServerUserHasNotPermission=Der Benutzerkonto <b>%s</b> wurde verwendet um auf dem Webserver etwas auszuführen, hat aber keine Rechte dafür.
     ErrorNoActivatedBarcode=Kein Barcode aktiviert
    @@ -138,7 +141,7 @@ ErrorBadFormat=Falsches Format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Fehler: Dieses Mitglied ist noch nicht mit einem Partner verbunden. Verknüpfen Sie das Mitglied zuerst mit einem vorhandenen Partner oder legen Sie einen neuen an, bevor Sie ein Abonnement mit Rechnung erstellen.
     ErrorThereIsSomeDeliveries=Fehler: Es sind noch Auslieferungen zu diesen Versand vorhanden. Löschen deshalb nicht möglich.
     ErrorCantDeletePaymentReconciliated=Eine Zahlung, deren Bank-Transaktion schon abgeglichen wurde, kann nicht gelöscht werden
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Eine Zahlung, die zu mindestens einer als bezahlt markierten Rechnung gehört, kann nicht entfernt werden
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Zur Konstanten '%s' kann nicht zugewiesen werden
     ErrorPriceExpression2=Die eingebaute Funktion '%s' kann nicht neu definiert werden
     ErrorPriceExpression3=Nicht definierte Variable '%s' in Funktionsdefinition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5='%s' unerwartet
     ErrorPriceExpression6=Falsche Anzahl Argumente (%s angegeben, %s erwartet)
     ErrorPriceExpression8=Unerwarteter operator '%s'
     ErrorPriceExpression9=Ein unerwarteter Fehler ist aufgetreten
    -ErrorPriceExpression10=Operand fehlt bei Operator '%s' 
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11='%s' erwartet
     ErrorPriceExpression14=Division durch Null
     ErrorPriceExpression17=Nicht definierte Variable '%s
    @@ -171,13 +174,13 @@ ErrorGlobalVariableUpdater4=SOAP Client fehlgeschlagen mit Fehler '%s'
     ErrorGlobalVariableUpdater5=Keine globale Variable ausgewählt
     ErrorFieldMustBeANumeric=Feld <b>%s</b> muss ein numerischer Wert sein
     ErrorMandatoryParametersNotProvided=Erforderliche(r) Parameter wird nicht angeboten
    -ErrorOppStatusRequiredIfAmount=Sie legen einen geschätzten Betrag für diese Verkaufschance/Lead erfasst. Deshalb müssen Sie auch den Status eingeben
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Moduldeskriptor für Klasse %s konnte nicht geladen werden
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Falsche Definition von Menü Array in  Module Descriptor (falscher Wert für den Key  fk_menu)
    -ErrorSavingChanges=Beim Speichern der Änderungen trat ein Fehler auf
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Lager in der Zeile ist für die Lieferung notwendig
     ErrorFileMustHaveFormat=Die Datei muss das Format %s haben.
    -ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    +ErrorSupplierCountryIsNotDefined=Land für diesen Lieferanten ist nicht definiert. Muss zuerst korrigiert werden.
     ErrorsThirdpartyMerge=Fehler beim Zusammenführen der beiden Einträge. Die Anforderung wurde abgebrochen.
     ErrorStockIsNotEnoughToAddProductOnOrder=Nicht genug Bestand von Produkt %s, um es einem neuen Auftrag zuzufügen.
     ErrorStockIsNotEnoughToAddProductOnInvoice=Nicht genug Bestand von Produkt %s, um es einer neuen Rechnung zuzufügen.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=Datei nicht gefunden. Eventuell wurde der Sharek
     ErrorProductBarCodeAlreadyExists=Der Produktbarcode %sexistiert schon bei einer anderen Produktreferenz
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Das verwenden von virtuellen Produkten welche den Lagerbestand von Unterprodukten verändern ist nicht möglich, wenn ein Unterprodukt (Oder Unter-Unterprodukt) eine Seriennummer oder Chargennummer benötigt.
     ErrorDescRequiredForFreeProductLines=Beschreibung ist erforderlich für freie Produkte
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=Es wurde ein Passwort für dieses Mitglied vergeben, aber kein Benutzer erstellt. Das Passwort wird gespeichert, aber kann nicht für die Anmeldung an Dolibarr verwendet werden. Es kann von einem externen Modul/einer Schnittstelle verwendet werden, aber wenn Sie kein Login oder Passwort für dieses Mitglied definiert müssen, können Sie die Option "Login für jedes Mitglied verwalten" in den Mitgliedseinstellungen deaktivieren. Wenn Sie ein Login aber kein Passwort benötige, lassen Sie dieses Feld leer, um diese Meldung zu deaktivieren. Anmerkung: Die E-Mail-Adresse kann auch zur Anmeldung verwendet werden, wenn das Mitglied mit einem Benutzer verbunden wird.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Ein Favorit mit diesem Titel oder dieser Adresse ex
     WarningPassIsEmpty=Warnung: Derzeit ist kein Datenbankpasswort gesetzt. Dies ist eine Sicherheitslücke. Konfigurieren Sie schnellstmöglich ein Passwort für den Datenbankzugriff und passen Sie Ihre conf.php entsprechend an.
     WarningConfFileMustBeReadOnly=Achtung: Die Konfigurationsdatei (<b>htdocs/conf/conf.php</b>) kann von Ihrem Webserver überschrieben werden. Dies ist eine ernstzunehmende Sicherheitslücke. Ändern Sie den Zugriff schnellstmöglich auf reinen Lesezugriff. Wenn Sie Windows und das FAT-Format für Ihre Festplatte nutzen, seien Sie sich bitte bewusst dass dieses Format keine individuellen Dateiberechtigungen unterstützt und so auch nicht völlig sicher ist,
     WarningsOnXLines=Warnhinweise in <b>%s</b> Quellzeilen
    -WarningNoDocumentModelActivated=Für das Erstellen von Dokumenten ist keine Vorlage gewählt. Eine Vorlage wird standardmäßig ausgewählt, bis Sie die Moduleinstellungen angepasst haben.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warnung, nachdem das Setup abgeschlossen ist, müssen Sie die Installations- und Migrations-Tools deaktivieren. Dazu fügen Sie die Datei <b>install.lock</b> in dem Verzeichnis <b>%s</b> hinzu. Das fehlen dieser Datei stellt eine Sicherheitslücke dar.
    -WarningUntilDirRemoved=Diese Warnung bleibt so lange bestehen, bis die Sicherheitslücke geschlossen wurde (nur für Administratoren sichtbar).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Achtung: es wird auch dann geschlossen, wenn der Betrag zwischen Quelle und Ziel unterschiedlich ist. Aktivieren Sie dieses Feature mit Bedacht.
     WarningUsingThisBoxSlowDown=Warnung: Der Einsatz dieser Box verlangsamt sämtliche Seiten mit dieser Box spürbar.
     WarningClickToDialUserSetupNotComplete=Die ClickToDial-Informationen für Ihren Benutzer sind nicht vollständig (siehe Registerkarte ClickToDial auf Ihrer Benutzerkarte).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Zu viele Ergebnisse (mehr als %s Zeilen).
     WarningSomeLinesWithNullHourlyRate=Einige erfasste Zeiten wurden von Benutzern erfasst bei denen der Stundensatz undefiniert war. Ein Stundenansatz von 0 %s pro Stunde wurde verwendet, was eine fehlerhafte Zeitauswertungen zur Folge haben kann.
     WarningYourLoginWasModifiedPleaseLogin=Ihr Login wurde verändert. Aus Sicherheitsgründen müssen Sie sich vor der nächsten Aktion mit Ihrem neuen Login anmelden.
     WarningAnEntryAlreadyExistForTransKey=Eine Übersetzung für diesen Übersetzungsschlüssel existiert schon für diese Sprache
    -WarningNumberOfRecipientIsRestrictedInMassAction=Achtung, die Anzahl unterschiedlicher Empfänger ist auf <b>%s</b> begrenzt, wenn sie Massenaktionen auf dieser Liste verwenden
    -WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
    +WarningDateOfLineMustBeInExpenseReportRange=Das Datum dieser Positionszeile ist ausserhalb der Datumsspanne dieser Spesenabrechnung
    diff --git a/htdocs/langs/de_DE/interventions.lang b/htdocs/langs/de_DE/interventions.lang
    index c2fc9d029a9..cec0695f56d 100644
    --- a/htdocs/langs/de_DE/interventions.lang
    +++ b/htdocs/langs/de_DE/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Serviceaufträge
     InterventionCard=Serviceauftrag - Karte
     NewIntervention=Neuer Serviceauftrag
     AddIntervention=Serviceauftrag erstellen
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Liste der Serviceaufträge
     ActionsOnFicheInter=Aktionen zum Serviceauftrag
     LastInterventions=%s neueste Serviceaufträge
    @@ -16,7 +17,7 @@ ModifyIntervention=Ändere Serviceauftrag
     DeleteInterventionLine=Serviceauftragsposition löschen
     CloneIntervention=Serviceauftrag duplizieren
     ConfirmDeleteIntervention=Möchten Sie diesen Serviceauftrag wirklich löschen?
    -ConfirmValidateIntervention=Are you sure you want to validate this intervention under name <b>%s</b>?
    +ConfirmValidateIntervention=Sind Sie sicher, dass Sie diese Intervention unter dem Namen <b>%s</b> validieren wollen?
     ConfirmModifyIntervention=Möchten sie diesen Serviceauftrag wirklich ändern?
     ConfirmDeleteInterventionLine=Möchten Sie diese Vertragsposition wirklich löschen?
     ConfirmCloneIntervention=Möchten Sie diesen Serviceauftrag wirklich duplizieren?
    diff --git a/htdocs/langs/de_DE/main.lang b/htdocs/langs/de_DE/main.lang
    index b04057e1b96..512a642623f 100644
    --- a/htdocs/langs/de_DE/main.lang
    +++ b/htdocs/langs/de_DE/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Fehler beim Senden der E-Mail (Absender=%s, Empfänger=%s)
     ErrorFileNotUploaded=Die Datei konnte nicht hochgeladen werden. Stellen Sie sicher dass die Dateigröße nicht den gesetzten Maximalwert übersteigt, das Zielverzeichnis über genügend freien Speicherplatz verfügt und noch keine Datei mit gleichem Namen existiert.
     ErrorInternalErrorDetected=Interner Fehler entdeckt
     ErrorWrongHostParameter=Ungültige Host-Parameter
    -ErrorYourCountryIsNotDefined=Ihr Land ist nicht definiert. Bitte vervollständigen Sie das Profil unter Start - Einstellungen - Firma/Stiftung
    -ErrorRecordIsUsedByChild=Kann diesen Eintrag nicht löschen. Dieser Eintrag wird von mindestens einem untergeordneten Datensatz verwendet.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Ungültiger Wert
     ErrorWrongValueForParameterX=Ungültiger Wert für den Parameter %s
     ErrorNoRequestInError=Keine Anfrage im Fehler
    -ErrorServiceUnavailableTryLater=Dieser Service steht derzeit nicht zur Verfügung. Bitte versuchen Sie es später erneut.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Dieser Wert ist schon vorhanden (Das Feld erfordert einen einzigartigen Wert)
    -ErrorSomeErrorWereFoundRollbackIsDone=Einige Fehler wurden gefunden. Änderungen werden rückgängig gemacht.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> innerhalb der Konfigurationsdatei <b>conf.php.</b> nicht definiert.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Benutzer <b>%s</b> in der Dolibarr-Datenbank nicht gefunden
     ErrorNoVATRateDefinedForSellerCountry=Fehler, keine MwSt.-Sätze für Land  '%s' definiert.
     ErrorNoSocialContributionForSellerCountry=Fehler, Sozialabgaben/Steuerwerte für Land '%s' nicht definiert.
     ErrorFailedToSaveFile=Fehler, konnte Datei nicht speichern.
    -ErrorCannotAddThisParentWarehouse=Sie versuchen ein HauptLager hinzuzufügen, das bereits ein Unterlager von dem aktuellen Lagerort ist 
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Sie haben keine Berechtigung dazu.
     SetDate=Datum
     SelectDate=Wählen Sie ein Datum
    @@ -78,10 +78,10 @@ FileRenamed=Datei wurde erfolgreich unbenannt
     FileGenerated=Die Datei wurde erfolgreich erstellt
     FileSaved=Die Datei wurde erfolgreich gespeichert
     FileUploaded=Datei wurde erfolgreich hochgeladen
    -FileTransferComplete=Datei(en) wurde(n) erfolgreich hochgeladen
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=Datei(en) erfolgreich gelöscht
     FileWasNotUploaded=Ein Dateianhang wurde gewählt aber noch nicht hochgeladen. Klicken Sie auf "Datei anhängen" um den Vorgang zu starten.
    -NbOfEntries=Anzahl der Einträge
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Onlinehilfe lesen (Internetzugang notwendig)
     GoToHelpPage=Hilfe lesen
     RecordSaved=Eintrag gespeichert
    @@ -92,9 +92,9 @@ DolibarrInHttpAuthenticationSoPasswordUseless=Der Dolibarr Authentifizierungsmod
     Administrator=Administrator
     Undefined=Nicht definiert
     PasswordForgotten=Passwort vergessen?
    -NoAccount=No account?
    +NoAccount=Kein Konto?
     SeeAbove=Siehe oben
    -HomeArea=Startseite
    +HomeArea=Start
     LastConnexion=Letzte Verbindung
     PreviousConnexion=Letzte Anmeldung
     PreviousValue=Vorheriger Wert
    @@ -142,6 +142,7 @@ Closed=Geschlossen
     Closed2=Geschlossen
     NotClosed=nicht geschlossen
     Enabled=Aktiviert
    +Enable=Aktivieren
     Deprecated=Veraltet
     Disable=Deaktivieren
     Disabled=Deaktiviert
    @@ -153,7 +154,7 @@ Update=Aktualisieren
     Close=Schließen
     CloseBox=Box vom Ihrer Startseite entfernen
     Confirm=Bestätigen
    -ConfirmSendCardByMail=Möchten Sie die Inhalte dieser Karteikarte per E-Mail an <b>%s</b> senden?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Löschen
     Remove=Entfernen
     Resiliate=aufheben
    @@ -188,7 +189,7 @@ ToLink=Link
     Select=Wählen Sie
     Choose=Wählen
     Resize=Skalieren
    -ResizeOrCrop=Resize or Crop
    +ResizeOrCrop=Grösse ändern oder zuschneiden
     Recenter=Zentrieren
     Author=Autor
     User=Benutzer
    @@ -327,12 +328,12 @@ Copy=Kopieren
     Paste=Einfügen
     Default=Standard
     DefaultValue=Standardwert
    -DefaultValues=Standardwert
    +DefaultValues=Default values/filters/sorting
     Price=Preis
     PriceCurrency=Preis (Währung)
     UnitPrice=Stückpreis
     UnitPriceHT=Stückpreis (netto)
    -UnitPriceHTCurrency=Unit price (net) (currency)
    +UnitPriceHTCurrency=Stückpreis (Netto) (Währung)
     UnitPriceTTC=Stückpreis (brutto)
     PriceU=VP
     PriceUHT=VP (netto)
    @@ -347,7 +348,7 @@ AmountTTCShort=Bruttobetrag
     AmountHT=Betrag (exkl. USt.)
     AmountTTC=Bruttobetrag
     AmountVAT=USt.-Betrag
    -MulticurrencyAlreadyPaid=Bereits bezahlte, Originalwährung
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Noch zu bezahlen, Originalwährung
     MulticurrencyPaymentAmount=Zahlungsbetrag, Originalwährung
     MulticurrencyAmountHT=Betrag (Netto), Originalwährung
    @@ -360,7 +361,7 @@ AmountLT2ES=Betrag IRPF
     AmountTotal=Gesamtbetrag
     AmountAverage=Durchschnittsbetrag
     PriceQtyMinHT=Mindestmengenpreis (netto)
    -PriceQtyMinHTCurrency=Price quantity min. (net of tax) (currency)
    +PriceQtyMinHTCurrency=Mindestpreis pro Menge (Netto) (Währung)
     Percentage=Prozentsatz
     Total=Gesamt
     SubTotal=Zwischensumme
    @@ -428,7 +429,7 @@ ActionNotApplicable=Nicht anwendbar
     ActionRunningNotStarted=zu beginnen
     ActionRunningShort=in Bearbeitung
     ActionDoneShort=Abgeschlossen
    -ActionUncomplete=unvollständig
    +ActionUncomplete=Unvollständig
     LatestLinkedEvents=Neueste %s verknüpfte Ereignisse
     CompanyFoundation=Firma oder Institution
     Accountant=Buchhalter
    @@ -454,7 +455,7 @@ Duration=Dauer
     TotalDuration=Gesamtdauer
     Summary=Zusammenfassung
     DolibarrStateBoard=Datenbank Statistik
    -DolibarrWorkBoard=Aufgabenübersicht
    +DolibarrWorkBoard=Ausstehend
     NoOpenedElementToProcess=Kein Element zum Verarbeiten geöffnet
     Available=Verfügbar
     NotYetAvailable=Noch nicht verfügbar
    @@ -495,7 +496,7 @@ Received=Erhalten
     Paid=Bezahlt
     Topic=Thema
     ByCompanies=Von Partnern
    -ByUsers=By user
    +ByUsers=Durch Benutzer
     Links=Links
     Link=Link
     Rejects=Ablehnungen
    @@ -506,8 +507,8 @@ None=Keine
     NoneF=Keine
     NoneOrSeveral=Keine oder mehrere
     Late=Verspätet
    -LateDesc=Verzögerung, die definiert, ob ein Datensatz spät ist oder nicht von der Einrichtung abhängig ist. Fragen Sie den Administrator, die Verzögerung im Menü Startseite - Einrichtung - Alarme
    -NoItemLate=No late item
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
    +NoItemLate=Keine späten Einträge
     Photo=Bild
     Photos=Bilder
     AddPhoto=Bild hinzufügen
    @@ -530,18 +531,6 @@ September=September
     October=Oktober
     November=November
     December=Dezember
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=Mai
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Okt
    -NovemberMin=Nov
    -DecemberMin=Dez
     Month01=Januar
     Month02=Februar
     Month03=März
    @@ -622,9 +611,9 @@ BuildDoc=Erstelle Doc
     Entity=Entität
     Entities=Entitäten
     CustomerPreview=Kundenvorschau
    -SupplierPreview=Vendor preview
    +SupplierPreview=Lieferantenvorschau
     ShowCustomerPreview=Zeige Kundenvorschau
    -ShowSupplierPreview=Show vendor preview
    +ShowSupplierPreview=Zeige Lieferantenvorschau
     RefCustomer=Ihr Zeichen
     Currency=Währung
     InfoAdmin=Hinweise für Administratoren
    @@ -646,6 +635,8 @@ SendMail=sende E-Mail
     EMail=E-Mail
     NoEMail=Keine E-Mail
     Email=E-Mail
    +AlreadyRead=Alreay read
    +NotRead=Nicht gelesen
     NoMobilePhone=Kein Handy
     Owner=Eigentümer
     FollowingConstantsWillBeSubstituted=Nachfolgende Konstanten werden durch entsprechende Werte ersetzt.
    @@ -677,7 +668,7 @@ NeverReceived=Nie erhalten
     Canceled=Storniert
     YouCanChangeValuesForThisListFromDictionarySetup=Sie können die Listenoptionen in den Wörterbuch-Einstellungen anpassen
     YouCanChangeValuesForThisListFrom=Werte für diese Liste können im Menü %s bearbeitet werden
    -YouCanSetDefaultValueInModuleSetup=Sie können den Standardwert verwendet setzen, wenn ein neuer Datensatz in der Modulkonfiguration erstellt wird
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Farbe
     Documents=Verknüpfte Dokumente
     Documents2=Dokumente
    @@ -703,7 +694,7 @@ DateOfSignature=Datum der Unterzeichnung
     HidePassword=Sichere Passworteingabe (Zeichen nicht angezeigt)
     UnHidePassword=Passwort in Klartext anzeigen
     Root=Stammordner
    -Informations=Informationen
    +Informations=Information
     Page=Seite
     Notes=Hinweise
     AddNewLine=Neue Zeile hinzufügen
    @@ -716,15 +707,15 @@ Merge=Verbinden
     DocumentModelStandardPDF=Standard PDF Vorlage
     PrintContentArea=Zeige Druckansicht für Seiteninhalt
     MenuManager=Menüverwaltung
    -WarningYouAreInMaintenanceMode=Achtung: Die Anwendung befindet sich im Wartungsmodus und kann derzeit nur von Benutzer <b>%s</b> verwendet werden.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Systemfehler
     CoreErrorMessage=Leider ist ein Fehler aufgetreten. Wenden Sie sich an Ihren Systemadministrator, um die Logs zu überprüfen oder deaktivieren Sie die Option $dolibarr_main_prod=1 für weitere Informationen.
     CreditCard=Kredit - Karte
     ValidatePayment=Zahlung freigeben
     CreditOrDebitCard=Kreditkarte
     FieldsWithAreMandatory=Felder mit <b>%s</b> sind Pflichtfelder
    -FieldsWithIsForPublic=Felder mit <b>%s</b> werden auf die öffentlich sichtbare Mitgliederliste angezeigt. Deaktivieren Sie bitte den "Öffentlich"-Kontrollkästchen wenn das nicht möchten.\n
    -AccordingToGeoIPDatabase=(nach GeoIP-Auflösung)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Zeile
     NotSupported=Nicht unterstützt
     RequiredField=Pflichtfeld
    @@ -732,6 +723,8 @@ Result=Ergebnis
     ToTest=Test
     ValidateBefore=Vor Verwendung dieser Funktion müssen Sie die Karte überprüfen
     Visibility=Sichtbarkeit
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privat
     Hidden=Versteckt
     Resources=Ressourcen
    @@ -750,6 +743,7 @@ LinkTo=Link zu
     LinkToProposal=Link zu Angebot
     LinkToOrder=Link zur Bestellung
     LinkToInvoice=Link zur Rechnung
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link zur Lieferentenbestellung
     LinkToSupplierProposal=Link zum Lieferantenangebot
     LinkToSupplierInvoice=Link zur Lieferantenrechnung
    @@ -758,6 +752,7 @@ LinkToIntervention=Link zu Arbeitseinsatz
     CreateDraft=Entwurf erstellen
     SetToDraft=Auf Entwurf zurücksetzen
     ClickToEdit=Klicken zum Bearbeiten
    +ClickToRefresh=Click to refresh
     EditWithEditor=Mit CKEditor bearbeiten
     EditWithTextEditor=Mit Texteditor bearbeiten
     EditHTMLSource=HTML-Code bearbeiten
    @@ -772,7 +767,7 @@ ByDay=Bei Tag
     BySalesRepresentative=Nach Vertriebsmitarbeiter
     LinkedToSpecificUsers=Mit Kontakt verknüpft
     NoResults=Keine Ergebnisse
    -AdminTools=Administratorwerkzeuge
    +AdminTools=Admin-Tools
     SystemTools=Systemwerkzeuge
     ModulesSystemTools=Module Hilfsprogramme
     Test=Testen
    @@ -802,7 +797,7 @@ PrintFile=Drucke Datei %s
     ShowTransaction=Transaktion auf Bankkonto anzeigen
     ShowIntervention=Zeige Serviceauftrag
     ShowContract=Zeige Vertrag
    -GoIntoSetupToChangeLogo=Gehen Sie zu Start - Einstellungen - Firma/Stiftung um das Logo zu ändern oder gehen Sie in Start -> Einstellungen -> Anzeige um es zu verstecken.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=ablehnen
     Denied=abgelehnt
     ListOf=Liste von %s
    @@ -818,12 +813,12 @@ Sincerely=Mit freundlichen Grüßen
     DeleteLine=Zeile löschen
     ConfirmDeleteLine=Möchten Sie diese Zeile wirklich löschen?
     NoPDFAvailableForDocGenAmongChecked=In den selektierten Datensätzen war kein PDF zur Erstellung der Dokumente vorhanden.
    -TooManyRecordForMassAction=Zu viele Datensätze für Massenaktion ausgewählt. Solche Aktionen sind auf maximal %s Zeilen beschränkt.
    +TooManyRecordForMassAction=Zu viele Einträge für Massenaktion selektiert. Die Aktion ist auf eine Liste von %s Einträgen beschränkt.
     NoRecordSelected=Kein Datensatz ausgewählt
     MassFilesArea=Bereich für Dateien aus Massenaktionen
     ShowTempMassFilesArea=Bereich für Dateien aus Massenaktionen zeigen
    -ConfirmMassDeletion=MassenLöschbestätigung
    -ConfirmMassDeletionQuestion=Möchten Sie den/die %s ausgewählten Datensatz wirklich löschen?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Verknüpfte Objekte
     ClassifyBilled=Als verrechnet markieren
     ClassifyUnbilled=als "nicht berechnet" markieren
    @@ -841,7 +836,7 @@ Calendar=Terminkalender
     GroupBy=Gruppiere nach ...
     ViewFlatList=Listenansicht zeigen
     RemoveString=Entfernen Sie die Zeichenfolge '%s'
    -SomeTranslationAreUncomplete=Einige Sprachen sind nur teilweise übersetzt oder enthalten Fehler. Wenn Sie dies feststellen, können Sie die Übersetzungen unter <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">http://transifex.com/projects/p/dolibarr/</a> \nverbessern bzw. ergänzen.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direkter Download Link
     DirectDownloadInternalLink=Direkter Download-Link (muss angemeldet sein und benötigt Berechtigungen)
     Download=Download
    @@ -861,16 +856,25 @@ HR=Personalabteilung
     HRAndBank=HR und Bank
     AutomaticallyCalculated=Automatisch berechnet
     TitleSetToDraft=Zurück zu Entwurf gehen
    -ConfirmSetToDraft=Wirklich zurück zum Entwurfstatus gehen?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import ID
     Events=Ereignisse
     EMailTemplates=Textvorlagen für E-Mails
    -FileNotShared=Datei nicht öffentlich zugänglich
    +FileNotShared=File not shared to external public
     Project=Projekt
     Projects=Projekte
    +LeadOrProject=Anfrage | Projekt
    +LeadsOrProjects=Anfragen | Projekte
    +Lead=Anfrage
    +Leads=Anfragen
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Berechtigungen
     LineNb=Zeilennummer
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Montag
     Tuesday=Dienstag
    @@ -918,24 +922,24 @@ SearchIntoProductsOrServices=Produkte oder Dienstleistungen
     SearchIntoProjects=Projekte
     SearchIntoTasks=Aufgaben
     SearchIntoCustomerInvoices=Kundenrechnungen
    -SearchIntoSupplierInvoices=Vendor invoices
    +SearchIntoSupplierInvoices=Lieferantenrechnungen
     SearchIntoCustomerOrders=Kundenaufträge
    -SearchIntoSupplierOrders=Purchase orders
    +SearchIntoSupplierOrders=Lieferantenbestellungen
     SearchIntoCustomerProposals=Kunden Angebote
    -SearchIntoSupplierProposals=Vendor proposals
    +SearchIntoSupplierProposals=Lieferantenangebote
     SearchIntoInterventions=Serviceaufträge
     SearchIntoContracts=Verträge
     SearchIntoCustomerShipments=Kunden Lieferungen
     SearchIntoExpenseReports=Spesenabrechnungen
    -SearchIntoLeaves=Urlaube
    +SearchIntoLeaves=Urlaub
     CommentLink=Kommentare
     NbComments=Anzahl der Kommentare
     CommentPage=Kommentare Leerzeichen
     CommentAdded=Kommentar hinzugefügt
     CommentDeleted=Kommentar gelöscht
     Everybody=Jeder
    -PayedBy=Bezahlt durch
    -PayedTo=Bezahlt an
    +PayedBy=Einbezahlt von
    +PayedTo=Bezahlt
     Monthly=Monatlich
     Quarterly=Quartalsweise
     Annual=Jährlich
    @@ -944,7 +948,8 @@ Remote=Remote
     LocalAndRemote=Lokal und Remote
     KeyboardShortcut=Tastaur Kürzel
     AssignedTo=Zugewiesen an
    -Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +Deletedraft=Entwurf löschen
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=Datei via Link geteilt
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=Sie befinden sich derzeit im %s "Sandbox" -Modus
    diff --git a/htdocs/langs/de_DE/other.lang b/htdocs/langs/de_DE/other.lang
    index 514d7ed7c60..4d32eec849b 100644
    --- a/htdocs/langs/de_DE/other.lang
    +++ b/htdocs/langs/de_DE/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Sicherheitsschlüssel
     NumberingShort=Nr.
     Tools=Hilfsprogramme
     TMenuTools=Hilfsprogramme
    -ToolsDesc=Alle sonstigen Hilfsprogramme, die nicht in anderen Menü-Einträgen enthalten sind, werden hier zusammengefasst. <br><br>Alle Hilfsprogramme können über das linke Menü erreicht werden.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Geburtstag
     BirthdayDate=Geburtstag
     DateToBirth=Geburtsdatum
    @@ -22,8 +22,8 @@ JumpToLogin=Abgemeldet. Zur Anmeldeseite...
     MessageForm=Mitteilung im Onlinezahlungsformular
     MessageOK=Nachrichtenseite für bestätigte Zahlung
     MessageKO=Nachrichtenseite für stornierte Zahlung
    -ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +ContentOfDirectoryIsNotEmpty=Dieses Verzeichnis ist nicht leer.
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Jahr der Rechnung
     PreviousYearOfInvoice=Vorangehendes Jahr des Rechnungsdatums
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Folgendes Jahr des Rechnungsdatums
     DateNextInvoiceBeforeGen=Datum der nächsten Rechnung (Vor Generierung)
     DateNextInvoiceAfterGen=Datum der nächsten Rechnung (Nach Generierung)
     
    -Notify_FICHINTER_ADD_CONTACT=Kontakt zum Serviceauftrag hinzufügen
    -Notify_FICHINTER_VALIDATE=Serviceauftrag freigegeben
    -Notify_FICHINTER_SENTBYMAIL=Serviceauftrag per E-Mail versendet
     Notify_ORDER_VALIDATE=Kundenauftrag freigegeben
     Notify_ORDER_SENTBYMAIL=Kundenauftrag mit E-Mail versendet
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Lieferantenbestellung per E-Mail zugestellt
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=freigegebene Lieferantenbestellung
     Notify_ORDER_SUPPLIER_APPROVE=Lieferantenbestellung freigegeben
     Notify_ORDER_SUPPLIER_REFUSE=Lieferantenbestellung abgelehnt
     Notify_PROPAL_VALIDATE=Angebot freigegeben
    -Notify_PROPAL_CLOSE_SIGNED=geschlossene Verkäufe  Signiert Angebote
    -Notify_PROPAL_CLOSE_REFUSED=Geschlossene Verkäufe Angebot abgelehnt
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Angebot mit E-Mail gesendet
     Notify_WITHDRAW_TRANSMIT=Transaktion zurückziehen
     Notify_WITHDRAW_CREDIT=Kreditkarten Rücknahme
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Durch Dritte erstellt
     Notify_COMPANY_SENTBYMAIL=Von Partnern gesendete Mails
     Notify_BILL_VALIDATE=Rechnung freigegeben
     Notify_BILL_UNVALIDATE=Rechnung nicht freigegeben
    -Notify_BILL_PAYED=Kundenrechnung bezahlt
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Kundenrechnung storniert
     Notify_BILL_SENTBYMAIL=Kundenrechnung per E-Mail zugestellt
     Notify_BILL_SUPPLIER_VALIDATE=Lieferantenrechnung bestätigen
    -Notify_BILL_SUPPLIER_PAYED=Lieferantenrechnung bezahlt
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Lieferantenrechnung mit E-Mail versendet
     Notify_BILL_SUPPLIER_CANCELED=Lieferantenrechnung storniert
     Notify_CONTRACT_VALIDATE=Vertrag gültig
     Notify_FICHEINTER_VALIDATE=Serviceauftrag freigegeben
    +Notify_FICHINTER_ADD_CONTACT=Kontakt zum Serviceauftrag hinzufügen
    +Notify_FICHINTER_SENTBYMAIL=Serviceauftrag per E-Mail versendet
     Notify_SHIPPING_VALIDATE=Versand freigegeben
     Notify_SHIPPING_SENTBYMAIL=Versanddaten mit E-Mail versendet
     Notify_MEMBER_VALIDATE=Mitglied bestätigt
    @@ -71,27 +70,31 @@ Notify_PROJECT_CREATE=Projekt-Erstellung
     Notify_TASK_CREATE=Aufgabe erstellt
     Notify_TASK_MODIFY=Aufgabe geändert
     Notify_TASK_DELETE=Aufgabe gelöscht
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Finden Sie im Modul-Setup %s
     NbOfAttachedFiles=Anzahl der angehängten Dateien/Dokumente
     TotalSizeOfAttachedFiles=Gesamtgröße der angehängten Dateien/Dokumente
     MaxSize=Maximalgröße
     AttachANewFile=Neue Datei/Dokument anhängen
     LinkedObject=Verknüpftes Objekt
    -NbOfActiveNotifications= Anzahl Benachrichtigungen ( Anz.  E-Mail Empfänger)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nDas ist ein Test-Mail gesendet an __EMAIL__.\nDie beiden Zeilen sind durch einem Zeilenumbruch getrennt.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=Dies ist ein <b>Test</b> Mail (das Wort Test muss in Fettschrift erscheinen). <br> Die beiden Zeilen sollten durch einen Zeilenumbruch getrennt sein.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nHier die gewünschte Preisauskunft __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nBitte entnehmen Sie dem Anhang die Bestellung __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nBitte entnehmen Sie dem Anhang unsere Bestellung __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nAnbei erhalten Sie die Rechnung __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nAls Anlage erhalten Sie unsere Lieferung __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nAnbei finden Sie den Serviceauftrag __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    +PredefinedMailContentLink=Sie können den folgenden Link anklicken um die Zahlung auszuführen, falls sie noch nicht getätigt wurde.\n\n%s\n\n
     DemoDesc=Dolibarr ist eine Management-Software die mehrere Business-Module anbietet. Eine Demo, die alle Module beinhaltet ist nicht sinnvoll , weil der Fall nie existiert (Hunderte von verfügbaren Module). Es stehen auch einige Demo-Profile Typen zur Verfügung.
     ChooseYourDemoProfil=Bitte wählen Sie das Demo-Profil das Ihrem Anwendgsfall am ehesten entspricht
     ChooseYourDemoProfilMore=...oder bauen Sie Ihr eigenes Profil <br> (manuelle Auswahl der Module)
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Installiere oder aktiviere die GD Bibliothek in der PHP Inst
     ProfIdShortDesc=<b>Prof ID %s</b> dient zur Speicherung landesabhängiger Partnerdaten. <br> Für das Land <b>%s</b> ist dies beispielsweise Code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM-Demo
     StatsByNumberOfUnits=Statistik zu den Totalstückzahlen Produkte/Dienstleistungen
    -StatsByNumberOfEntities=Statistik der Zahl der referenzierten Entitäten (Anzahl Rechnungen, Bestellungen, ...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Anzahl Angebote
     NumberOfCustomerOrders=Anzahl Kundenbestellungen
     NumberOfCustomerInvoices=Anzahl Kundenrechnungen
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Anzahl von Einheiten in Kundenrechnungen
     NumberOfUnitsSupplierProposals=Anzahl von Einheiten in Lieferantenangeboten
     NumberOfUnitsSupplierOrders=Anzahl von Einheiten in Lieferantenbestellungen
     NumberOfUnitsSupplierInvoices=Anzahl von Einheiten in Lieferantenrechnungen
    -EMailTextInterventionAddedContact=Ein neuer Serviceauftrag %s wurde Ihnen zugewiesen.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Serviceauftrag %s wurde freigegeben
     EMailTextInvoiceValidated=Rechnung %s wurde freigegeben
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Angebot %s wurde freigegeben
     EMailTextProposalClosedSigned=Das Angebot %s wurde unterschrieben.
     EMailTextOrderValidated=Bestellung %s wurde freigegeben
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Bestellung %s wurde von %s genehmigt
     EMailTextOrderRefused=Bestellung %s wurde abgelehnt
     EMailTextOrderRefusedBy=Bestellung %s wurde von %s abgelehnt
     EMailTextExpeditionValidated=Der Versand %s wurde freigegeben.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Import Datensatz
     DolibarrNotification=Automatische Benachrichtigung
     ResizeDesc=Bitte geben Sie eine neue Breite <b>oder</b> Höhe ein. Das Verhältnis wird während des Zuschneidens erhalten...
    @@ -204,7 +212,7 @@ NewLength=Neue Breite
     NewHeight=Neue Höhe
     NewSizeAfterCropping=Neue Größe nach dem Zuschneiden
     DefineNewAreaToPick=Definieren Sie einen neuen Bereich innerhalb des Bildes (Klicken Sie mit der linken Maustaste auf das Bild und halten Sie bis zur gegenüberliegenden Ecke)
    -CurrentInformationOnImage=Dieses Werzeug hilft Ihnen beim Skalieren und Zuschneiden von Bildern. Diese Informationen existieren derzeit zur Bilddatei
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Bildbearbeitung
     YouReceiveMailBecauseOfNotification=Sie erhalten diese Nachricht, weil Ihre E-Mail-Adresse zur Liste der zu benachrichtigenden Kontakte für %s von %s hinzugefügt wurde.
     YouReceiveMailBecauseOfNotification2=Sie erhalten dieses Mail aufgrund folgender Benachrichtigung:
    @@ -217,9 +225,9 @@ StartUpload=Hochladen starten
     CancelUpload=Hochladen abbrechen
     FileIsTooBig=Dateien sind zu groß
     PleaseBePatient=Bitte haben Sie ein wenig Geduld ...
    -NewPassword=New password
    +NewPassword=Neue Kennwort
     ResetPassword=Kennwort zurücksetzen
    -RequestToResetPasswordReceived=A request to change your password has been received.
    +RequestToResetPasswordReceived=Eine Anfrage zur Änderung Ihres Passwortes erhalten.
     NewKeyIs=Dies sind Ihre neuen Anmeldedaten
     NewKeyWillBe=Ihr neuer Anmeldeschlüssel für die Software ist
     ClickHereToGoTo=Hier klicken für %s
    @@ -233,8 +241,12 @@ PermissionsAdd=Berechtigungen hinzugefügt
     PermissionsDelete=Berechtigungen entfernt
     YourPasswordMustHaveAtLeastXChars=Ihr Passwort muss mindestens <strong> %s </strong> Zeichen enthalten
     YourPasswordHasBeenReset=Ihr Passwort wurde zurückgesetzt
    -ApplicantIpAddress=IP address of applicant
    -SMSSentTo=SMS sent to %s
    +ApplicantIpAddress=IP Adresse des Antragstellers
    +SMSSentTo=SMS an %s gesendet
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exportübersicht
    @@ -249,4 +261,4 @@ WEBSITE_PAGEURL=URL der Seite
     WEBSITE_TITLE=TItel
     WEBSITE_DESCRIPTION=Beschreibung
     WEBSITE_KEYWORDS=Schlüsselwörter
    -LinesToImport=Lines to import
    +LinesToImport=Positionen zum importieren
    diff --git a/htdocs/langs/de_DE/projects.lang b/htdocs/langs/de_DE/projects.lang
    index 6aaef1d7850..0fd5978082b 100644
    --- a/htdocs/langs/de_DE/projects.lang
    +++ b/htdocs/langs/de_DE/projects.lang
    @@ -10,14 +10,14 @@ PrivateProject=Projektkontakte
     ProjectsImContactFor=Projekte bei denen ich ein direkter Kontakt bin
     AllAllowedProjects=Alle Projekte die ich sehen kann (Eigene + Öffentliche)
     AllProjects=Alle Projekte
    -MyProjectsDesc=This view is limited to projects you are a contact for
    +MyProjectsDesc=Diese Ansicht ist beschränkt auf Projekte bei denen Sie als Ansprechpartner eingetragen sind.
     ProjectsPublicDesc=Diese Ansicht zeigt alle Projekte, für die Sie zum Lesen berechtigt sind.
     TasksOnProjectsPublicDesc=Diese Ansicht zeigt alle Aufgaben der Projekte, für die Sie zum Lesen berechtigt sind.
     ProjectsPublicTaskDesc=Diese Ansicht ist beschränkt auf Projekt und Aufgaben bei welchen Sie über Leserechte verfügen.
     ProjectsDesc=Es werden alle Projekte angezeigt (Ihre Berechtigungen berechtigt Sie alle Projekte zu sehen).
     TasksOnProjectsDesc=Es werden alle Aufgaben angezeigt (Ihre Berechtigungen berechtigt Sie alles zu sehen).
    -MyTasksDesc=This view is limited to projects or tasks you are a contact for
    -OnlyOpenedProject=Nur offene Projekte sind sichtbar. (Projekte im Status Entwurf oder Geschlossen sind nicht sichtbar)
    +MyTasksDesc=Diese Ansicht ist beschränkt asuf Projekte oder Aufgaben bei denen Sie als Ansprechspartner eingetragen sind
    +OnlyOpenedProject=Nur offene Projekte sind sichtbar. (Projekte mit dem Status Entwurf oder Geschlossen sind nicht sichtbar)
     ClosedProjectsAreHidden=Abgeschlossene Projekte werden nicht angezeigt.
     TasksPublicDesc=Diese Ansicht ist beschränkt auf Projekt und Aufgaben bei welchen Sie über Leserechte verfügen.
     TasksDesc=Diese Ansicht zeigt alle Projekte und Aufgaben (Ihre Benutzerberechtigungen berechtigt Sie alles zu sehen).
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Sind Sie sicher, dass diese Vertragsposition löschen woll
     ConfirmDeleteATask=Sind Sie sicher, dass diese Aufgabe löschen wollen?
     OpenedProjects=Offene Projekte
     OpenedTasks=Offene Aufgaben
    -OpportunitiesStatusForOpenedProjects=Betrag Verkaufschancen offene Projekt nach Status
    -OpportunitiesStatusForProjects=Betrag Verkaufschancen pro Projekt nach Status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Zeige Projekt
     ShowTask=Zeige Aufgabe
     SetProject=Projekt setzen
     NoProject=Kein Projekt definiert oder keine Rechte
    -NbOfProjects=Anzahl der Projekte
    -NbOfTasks=Anzahl Aufgaben
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Zeitaufwand
     TimeSpentByYou=Ihr Zeitaufwand
     TimeSpentByUser=Zeitaufwand von Benutzer ausgegeben
    @@ -55,7 +55,7 @@ TasksOnOpenedProject=Aufgaben in offenen Projekten
     WorkloadNotDefined=Arbeitsaufwand nicht definiert
     NewTimeSpent=Zeitaufwände
     MyTimeSpent=Mein Zeitaufwand
    -BillTime=Bill the time spent
    +BillTime=Zeitaufwand verrechnen
     Tasks=Aufgaben
     Task=Aufgabe
     TaskDateStart=Startdatum der Aufgabe
    @@ -77,23 +77,24 @@ Time=Zeitaufwand
     ListOfTasks=Aufgabenliste
     GoToListOfTimeConsumed=Liste der verwendeten Zeit aufrufen
     GoToListOfTasks=Liste der Aufgaben aufrufen
    -GoToGanttView=Go to Gantt view
    +GoToGanttView=Zur Gantansicht
     GanttView=Gantt-Diagramm
    -ListProposalsAssociatedProject=Liste Angebote, die mit diesem Projekt verknüpft sind
    -ListOrdersAssociatedProject=Liste der mit diesem Projekt verbundenen Kunden-Bestellungen
    -ListInvoicesAssociatedProject=Liste der mit diesem Projekt verbundenen Kunden-Rechnungen
    -ListPredefinedInvoicesAssociatedProject=Liste von Rechnungsvorlagen, die mit diesem Projekt verknüpft sind.
    -ListSupplierOrdersAssociatedProject=Liste der mit diesem Projekt verbundenen Lieferantenbestellungen
    -ListSupplierInvoicesAssociatedProject=Liste der mit diesem Projekt verbundenen Lieferantenrechnungen
    -ListContractAssociatedProject=Liste Verträge, die mit diesem Projekt verknüpft sind
    -ListShippingAssociatedProject=Liste der Lieferungen zu diesem Projekt
    -ListFichinterAssociatedProject=Liste der Serviceaufträge, die mit diesem Projekt verknüpft sind
    -ListExpenseReportsAssociatedProject=Liste Spesenabrechnungen, die mit diesem Projekt verknüpft sind
    -ListDonationsAssociatedProject=Liste Spenden, die mit diesem Projekt verknüpft sind
    -ListVariousPaymentsAssociatedProject=Liste der sonstigen mit dem Projekt verbundenen Zahlungen
    -ListActionsAssociatedProject=Liste Ereignisse, die mit diesem Projekt verknüpft sind
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Liste mit Zeitaufwand der Projektaufgaben
    -ListTaskTimeForTask=List of time consumed on task
    +ListTaskTimeForTask=Zeitaufwand auf Aufgaben
     ActivityOnProjectToday=Projektaktivitäten von heute
     ActivityOnProjectYesterday=Projektaktivitäten von gestern
     ActivityOnProjectThisWeek=Projektaktivitäten dieser Woche
    @@ -101,7 +102,7 @@ ActivityOnProjectThisMonth=Projektaktivitäten dieses Monats
     ActivityOnProjectThisYear=Projektaktivitäten dieses Jahres
     ChildOfProjectTask=Subelemente des Projekts/Aufgabe
     ChildOfTask=Kindelement der Aufgabe
    -TaskHasChild=Task has child
    +TaskHasChild=Aufgabe hat eine Unteraufgabe
     NotOwnerOfProject=Nicht Eigner des privaten Projekts
     AffectedTo=Zugewiesen an
     CantRemoveProject=Löschen des Projekts auf Grund verbundener Elemente (Rechnungen, Bestellungen oder andere) nicht möglich. Näheres finden Sie unter dem Reiter Bezugnahmen.
    @@ -141,16 +142,16 @@ ProjectReportDate=Passe Aufgaben-Datum dem neuen Projekt-Startdatum an
     ErrorShiftTaskDate=Es ist nicht möglich, das Aufgabendatum dem neuen Projektdatum anzupassen
     ProjectsAndTasksLines=Projekte und Aufgaben
     ProjectCreatedInDolibarr=Projekt %s erstellt
    -ProjectValidatedInDolibarr=Project %s validated
    +ProjectValidatedInDolibarr=Projekt %s validiert
     ProjectModifiedInDolibarr=Projekt %s geändert
     TaskCreatedInDolibarr=Aufgabe %s erstellt
     TaskModifiedInDolibarr=Aufgabe %s geändert
     TaskDeletedInDolibarr=Aufgabe %s gelöscht
    -OpportunityStatus=Verkaufschance Status
    +OpportunityStatus=Status / Chancen Lead
     OpportunityStatusShort=Chance Status
    -OpportunityProbability=Wahrscheinlichkeit Verkaufschance
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Wahrscheinlichkeit Verkaufschance
    -OpportunityAmount=Verkaufschance Betrag
    +OpportunityAmount=Wert/Betrag für Lead
     OpportunityAmountShort=Chance Betrag
     OpportunityAmountAverageShort=Durchschnittsbetrag Chance
     OpportunityAmountWeigthedShort=Gewichtete Erfolgschance
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Mitwirkender
     SelectElement=Element wählen
     AddElement=Mit Element verknüpfen
     # Documents models
    -DocumentModelBeluga=Bericht Vorlage für verknüpfte Objekte-Übersicht
    -DocumentModelBaleine=Projektberichtsvorlage für Aufgaben
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Geplante Auslastung
     PlannedWorkloadShort=Arbeitsaufwand
     ProjectReferers=Verknüpfte Einträge
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projekte mit diesem Anwender als Kontakt
     TasksWithThisUserAsContact=Aufgaben zugeordnet zu diesem Anwender
     ResourceNotAssignedToProject=Zugewiesen zu Projekt
     ResourceNotAssignedToTheTask=nicht der Aufgabe zugewiesen
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Zeitaufwand durch
     TasksAssignedTo=Aufgabe zugewiesen an
     AssignTaskToMe=Aufgabe mir selbst zuweisen
    @@ -189,25 +192,26 @@ AssignTaskToUser=Aufgabe an %s zuweisen
     SelectTaskToAssign=Zuzuweisende Aufgabe auswählen...
     AssignTask=Zuweisen
     ProjectOverview=Projekt-Übersicht
    -ManageTasks=Verwende Projekte um Aufgaben und Zeitaufwand zu verwalten
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Verwende Projekte um Leads und Chancen zu verwalten
    -ProjectNbProjectByMonth=Anzahl der Projekte pro Monat
    -ProjectNbTaskByMonth=Anzahl erstellter Projekte pro Monat
    -ProjectOppAmountOfProjectsByMonth=Betrag der Verkaufschancen pro Monat
    -ProjectWeightedOppAmountOfProjectsByMonth=gewichteter Betrag der Verkaufschancen pro Monat
    -ProjectOpenedProjectByOppStatus=Offene Projekte/Verkaufschancen nach Status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistik über Projekte und Leads
     TasksStatistics=Statistik über Projekte und Lead Aufgaben
     TaskAssignedToEnterTime=Aufgabe zugewiesen. Eingabe der Zeit zu diese Aufgabe sollte möglich sein.
     IdTaskTime=ID Zeit Aufgabe
     YouCanCompleteRef=Wenn Sie die Referenz mit Infromationen vervollständigen möchten (um diese als Suchfilter zu verwenden), wird empfohlen ein Trennzeichen einzusetzen, damit den Nummernkreis der zukünftigen Projekten weiterhin korrekt funktioniert. Zum Beispiel  %s-ABC. Sie können aber auch in den Label Suchbegriffe hinzufügen. Ein bewährtes Verfahren besteht darin, ein dedizierter Feld einzufügen, bekannt unter dem Begriff ergänzenden Attributen.
     OpenedProjectsByThirdparties=Offene Projekte nach Partner
    -OnlyOpportunitiesShort=nur Verkaufschancen
    -OpenedOpportunitiesShort=Offene Verkaufschancen
    -NotAnOpportunityShort=keine Verkaufschance
    -OpportunityTotalAmount=Verkaufschancen Gesamtbetrag
    -OpportunityPonderatedAmount=Verkaufschancen geschätzter Betrag
    -OpportunityPonderatedAmountDesc=Betrag der Verkaufschance gewichtet nach Wahrscheinlichkeit
    +OnlyOpportunitiesShort=nur Leads/Verkaufschancen
    +OpenedOpportunitiesShort=offene Verkaufschancen
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Gesamtbetrag Leads/Verkaufschancen
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Geschäftsanbahnung
     OppStatusQUAL=Qualifikation
     OppStatusPROPO=Angebot
    @@ -220,11 +224,13 @@ AllowToLinkFromOtherCompany=Projekt von anderem Unternehmen verknüpfen lassen <
     LatestProjects=%s neueste Projekte
     LatestModifiedProjects=Neueste %s modifizierte Projekte
     OtherFilteredTasks=Andere gefilterte Aufgaben
    -NoAssignedTasks=No assigned tasks (assign project/tasks the current user from the top select box to enter time on it)
    +NoAssignedTasks=Keine zugewiesenen Aufgaben (ordnen Sie sich das Projekt / Aufgaben aus dem oberen Auswahlfeld zu, um Zeitaufwand einzugeben)
     # Comments trans
     AllowCommentOnTask=Alle Benutzerkommentare zur Aufgabe
     AllowCommentOnProject=Benutzer dürfen Projekte kommentieren
    -DontHavePermissionForCloseProject=You do not have permissions to close the project %s
    -DontHaveTheValidateStatus=The project %s must be open to be closed
    -RecordsClosed=%s project(s) closed
    -SendProjectRef=Information project %s
    +DontHavePermissionForCloseProject=Sie haben nicht die Berechtigung das Projekt %s zu schliessen
    +DontHaveTheValidateStatus=Projekt %smuss offen sein, damit es geschlossen werden kann
    +RecordsClosed=%s Projekt(e) geschlossen
    +SendProjectRef=Informationen zu Projekt %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/el_GR/admin.lang b/htdocs/langs/el_GR/admin.lang
    index 9815e8ce767..0069c20110c 100644
    --- a/htdocs/langs/el_GR/admin.lang
    +++ b/htdocs/langs/el_GR/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Υπό ανάπτυξη
     VersionUnknown=Άγνωστη
     VersionRecommanded=Προτεινόμενη
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Φορέας χειρισμού αποθήκευσης συν
     SessionSavePath=Αποθήκευση τοπικής προσαρμογής συνεδρίας
     PurgeSessions=Διαγραφή συνόδων
     ConfirmPurgeSessions=Είστε σίγουροι πως θέλετε να διαγράψετε όλες τις συνεδρίες; Αυτό θα αποσυνδέσει όλους τους χρήστες (εκτός από εσάς).
    -NoSessionListWithThisHandler=Ο Φορέας χειρισμού αποθήκευσης συνεδριών που έχει διαμορφωθεί στο PHP σας δεν επιτρέπει καταχώρηση όλων των τρέχοντων συνεδριών.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Κλειδώστε τις νέες συνδέσεις
    -ConfirmLockNewSessions=Είστε σίγουροι ότι θέλετε να περιορίσετε κάθε νέα σύνδεση Dolibarr για τον εαυτό σας. Μόνο ο χρήστης <b>%s</b>  θα είναι σε θέση να συνδεθεί μετά από αυτό.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Κατάργηση κλειδώματος σύνδεσης
     YourSession=Η σύνοδος σας
    -Sessions=Σύνοδοι χρηστών
    +Sessions=Users sessions
     WebUserGroup=Χειριστής/Ομάδα Διακομιστή Web
    -NoSessionFound=Το PHP σας δεν επιτρέπει την καταγραφή όλων των ενεργοποιημένων συνεδριών.  Ο κατάλογος που χρησιμοποιείται για να αποθηκεύετε συνεδρίες (<b>%s</b>) πιθανόν προστατεύεται (Για παράδειγμα, από OS άδειες ή από οδηγίες PHP open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Σύνολο χαρακτήρων βάσης δεδομένων για την αποθήκευση δεδομένων
     DBSortingCharset=Σετ χαρακτήρων βάσης δεδομένων για ταξινόμηση δεδομένων
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Εξωτερικός χρήστης
     InternalUsers=Εσωτερικοί χρήστες
     ExternalUsers=Εξωτερικοί χρήστες
     GUISetup=Εμφάνιση
    -SetupArea=Περιοχή ρύθμισης
    +SetupArea=Ρύθμιση
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Έντυπο για να ελέγξετε το αρχείο μεταφόρτωσης (ανάλογα με τις ρυθμίσεις)
     IfModuleEnabled=Σημείωση: ναι, είναι αποτελεσματική μόνο αν το module <b>%s</b> είναι ενεργοποιημένο
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Ο κώδικας δεν μπορεί να περιέχ
     DisableJavascript=Απενεργοποίηση της Java ακολουθίας και των Ajax  λειτουργιών (Προτείνεται για χρήση από άτομα με προβλήματα όρασης ή φυλλομετρητές κειμένου)
     UseSearchToSelectCompanyTooltip=Επίσης, αν έχετε ένα μεγάλο αριθμό Πελ./Προμ. (> 100 000), μπορείτε να αυξήσετε την ταχύτητα με τον καθορισμό της σταθερά COMPANY_DONOTSEARCH_ANYWHERE σε 1 στο Setup->Other. Η αναζήτηση στη συνέχεια θα περιορίζεται από την έναρξη της σειράς.
     UseSearchToSelectContactTooltip=Επίσης, αν έχετε ένα μεγάλο αριθμό Πελ./Προμ. (> 100 000), μπορείτε να αυξήσετε την ταχύτητα με τον καθορισμό της σταθερά COMPANY_DONOTSEARCH_ANYWHERE σε 1 στο Setup->Other. Η αναζήτηση στη συνέχεια θα περιορίζεται από την έναρξη της σειράς.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Πλήθος χαρακτήρων για να ξεκινήσει η αναζήτηση: %s
     NotAvailableWhenAjaxDisabled=Δεν είναι διαθέσιμο όταν η Ajax είναι απενεργοποιημένη
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Η προ επισκόπηση δεν είναι διαθέ
     ThemeCurrentlyActive=Θεματική Επι του Παρόντος Ενεργή
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (βάση δεδομένων)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Κενό
     Table=Πίνακας
     Fields=Πεδία
    @@ -111,14 +111,14 @@ NotConfigured=Το ένθεμα/εφαρμογή δεν έχει ρυθμιστ
     Active=Ενεργό
     SetupShort=Ρύθμιση
     OtherOptions=Άλλες Επιλογές
    -OtherSetup=Άλλες Ρυθμίσεις
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Διαχωριστικό Δεκαδικών
     CurrentValueSeparatorThousand=Διαχωριστικό Χιλιάδων
     Destination=Προορισμός
     IdModule=Module ID
     IdPermissions=Δικαιώματα ID
     LanguageBrowserParameter=Παράμετρος %s
    -LocalisationDolibarrParameters=Παράμετροι τοπικών ρυθμίσεων
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Ζώνη Ώρας χρήστη (χρήστης)
     ClientHour=Ωρα χρήστη (χρήστης)
     OSTZ=OS Time Zone του διακομιστή 
    @@ -126,8 +126,8 @@ PHPTZ=Ζώνη Ώρας PHP server
     DaylingSavingTime=Η θερινή ώρα (χρήστη)
     CurrentHour=PHP server hour
     CurrentSessionTimeOut=Χρονικό όριο περιόδου λειτουργίας τρέχουσας συνοδού
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Μέγιστο πλήθος γραμμών για τα widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Αυτόματη Ανίχνευση (γλώσσα φυλλομετρητή)
     FeatureDisabledInDemo=Δυνατότητα απενεργοποίησης στο demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Μόνο στοιχεία από <a href="%s">ενεργοποιημένα modules</a> προβάλλονται.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Νέο
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=Το DoliStore, είναι η επίσημη περιοχή για να βρείτε εξωτερικά modules για το Dolibarr ERP/CRM
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Σύνδεσμος
     BoxesAvailable=Διαθέσιμα Widgets
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Μην αποθηκεύετε αποκρυπτογραφ
     MainDbPasswordFileConfEncrypted=Ο κωδικός της βάσης δεδομένων να είναι κρυπτογραφημένος στο conf.php (προτείνεται να είναι ενεργό)
     InstrucToEncodePass=Για κρυπτογραφημένο κωδικό στο αρχείο <b>conf.php</b>, κάντε αντικατάσταση στη γραμμή <br><b>$dolibarr_main_db_pass="...";</b><br>με<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Προστασία παραγόμενων αρχείων pdf (Η ενεργοποίηση ΔΕΝ προτείνεται, χαλάει την μαζική δημιουργία pdf)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Χαρακτηριστικό
     DolibarrLicense=Άδεια χρήσης
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=Για την τεκμηρίωση χρήστη ή προγραμματιστή  (Doc, FAQs...),<br>ρίξτε μια ματιά στο Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Για οποιαδήποτε άλλη ερώτηση/βοήθεια, μπορείτε να χρησιμοποιήσετε το forum του Dolibarr:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Αυτή η περιοχή μπορεί να σας βοηθήσει να αποκτήσετε υπηρεσίες βοήθειας στο Dolibarr.
    -HelpCenterDesc2=Κάποια κομμάτια αυτής της υπηρεσίας είναι διαθέσιμα <b> μόνο στα αγγλικά</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Τρέχον μενού
     MeasuringUnit=Μονάδα μέτρησης
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=Θύρα SMTP/SMTPS (Προεπιλογή στο php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (Προεπιλογή στο php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Θύρα SMTP/SMTPS (Δεν καθορίζεται στην PHP σε συστήματα Unix)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Δεν καθορίζεται στην PHP σε συστήματα Unix)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Να αποστέλλονται κρυφά αντίγραφα των απεσταλμένων emails στο
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Μέθοδος που χρησιμοποιείτε για αποστολή EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID αν απαιτείται πιστοποίηση
    -MAIN_MAIL_SMTPS_PW=Κωδικός SMTP αν απαιτείται πιστοποίηση
    -MAIN_MAIL_EMAIL_TLS= Χρησιμοποιήστε TLS (SSL) κωδικοποίηση
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Απενεργοποίηση όλων των αποστολών SMS (για λόγους δοκιμής ή demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Μέθοδος που θέλετε να χρησιμοποιηθεί για την αποστολή SMS
    -MAIN_MAIL_SMS_FROM=Προεπιλεγμένος αριθμός τηλεφώνου αποστολέα για την αποστολή SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Αυτή η λειτουργία δεν είναι διαθέσιμη σε συστήματα Unix like. Δοκιμάστε το πρόγραμμα sendmail τοπικά.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Διαχείριση Αρθρώματος
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Να μην χρησιμοποιείται για παρα
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Βήμα %s
    -FindPackageFromWebSite=Βρείτε ένα πακέτο που να παρέχει την λειτουργία που επιθυμείτε (για παράδειγμα στο επίσημο %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Λήψη πακέτου (για παράδειγμα από την επίσημη ιστοσελίδα %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Έκδοση Dolibarr
     CallUpdatePage=Μετάβαση στη σελίδα ενημέρωσης της δομής της βάσης δεδομένων και των δεδομένων: %s.
     LastStableVersion=Τελευταία σταθερή έκδοση
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Καθυστέρηση για την τοποθέτηση απόκρισης εξαγωγής στην προσωρινή μνήμη σε δευτερόλεπτα (0 ή άδεια για μη χρήση προσωρινής μνήμης)
     DisableLinkToHelpCenter=Αποκρύψτε τον σύνδεσμο "<b>Αναζητήστε βοήθεια ή υποστήριξη</b>" στην σελίδα σύνδεσης
     DisableLinkToHelp=Απόκρυψη του συνδέσμου online βοήθεια "<b>%s</b>"
    -AddCRIfTooLong=Δεν υπάρχει αυτόματη αναδίπλωση κειμένου.  Αν η γραμμή σας δεν χωράει στην σελίδα των εγγράφων επειδή είναι πολύ μεγάλη, θα πρέπει να προσθέσετε μόνοι σας χαρακτήρες αλλαγής γραμμής carriage return στην περιοχή κειμένου.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Ελάχιστο μήκος
     LanguageFilesCachedIntoShmopSharedMemory=Τα αρχεία τύπου .lang έχουν φορτωθεί στην κοινόχρηστη μνήμη
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Παραδείγματα με την τωρινή διαμόρφωση
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Λίστα φακέλων προτύπων OpenDocument
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Αριθμός αρχείων προτύπων ODT/ODS που βρέθηκαν σε αυτούς τους φακέλους
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Παραδείγματα σύνταξης:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>Για να μάθετε πως να δημιουργήσετε τα δικά σας αρχεία προτύπων, πριν τα αποθηκεύσετε σε αυτούς τους φακέλους, διαβάστε την τεκμηρίωση στο wiki:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Φόρμα δοκιμής εισαγωγής δεδομένων
     ThisForceAlsoTheme=Αυτός ο τροποποιητής μενού χρησιμοποιεί το δικό του θέμα όποιο θέμα και να έχει επιλέξει ο χρήστης.  Επίσης, αυτό το πρόγραμμα διαχείρισης μενού που ειδικεύεται στις κινητές συσκευές δεν δουλεύει σε όλα τα smartphone. Χρησιμοποιήσετε κάποιον άλλο διαχειριστή μενού αν αντιμετωπίζετε προβλήματα στο δικό σας.
     ThemeDir=Φάκελος skins
    -ConnectionTimeout=Λήξη σύνδεσης
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Λήξη χρόνου αναμονής απάντησης
     SmsTestMessage=Δοκιμαστικό μήνυμα από __PHONEFROM__ να __PHONETO__
     ModuleMustBeEnabledFirst=Το άρθρωμα <b>%s</b> πρέπει να ενεργοποιηθεί πρώτα εάν χρειάζεστε συτή τη λειτουργία.
     SecurityToken=Security Token
    -NoSmsEngine=Δεν υπάρχει πρόγραμμα αποστολής SMS διαθέσιμο. Τα προγράμματα αποστολής SMS δεν εγκαθίστανται με την διανομή από προεπιλογή (επειδή εξαρτώνται από εξωτερικούς προμηθευτές) αλλά μπορείτε να βρείτε κάποια διαθέσιμα προγράμματα στο %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Μπορείτε να ρυθμίσετε κάθε κεντρική επιλογή που σχετίζεται με τη δημιουργία PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Κανόνες για να δημιουργηθούν διευθύνσεις
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Απόκρυψη περιγραφών προϊόντων στα δημιουργηθέντα PDF
     HideRefOnPDF=Απόκρυψη αναφοράς προϊόντος στα δημιουργηθέντα PDF
     HideDetailsOnPDF=Απόκρυψη λεπτομερειών προϊόντων στα δημιουργηθέντα PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Παράμετροι για δημιουργία ασφ
     SecurityTokenIsUnique=Χρησιμοποιήστε μια μοναδική παράμετρο securekey για κάθε διεύθυνση URL
     EnterRefToBuildUrl=Εισάγετε αναφοράς για %s αντικείμενο
     GetSecuredUrl=Πάρτε υπολογιζόμενο URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Παλιός συντελεστής ΦΠΑ
     NewVATRates=Νέος συντελεστής ΦΠΑ
     PriceBaseTypeToChange=Τροποποίηση τιμών με βάση την τιμή αναφοράς όπως ρυθμίστηκε στο
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Επιλογή από λίστα
     ExtrafieldSelectList = Επιλογή από πίνακα
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Συνθηματικό
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Προεπιλεγμένος σύνδεσμος
     SetAsDefault=Ορισμός ως προεπιλογή
     ValueOverwrittenByUserSetup=Προσοχή, αυτή η τιμή μπορεί να αντικατασταθεί από επιλογή του χρήστη (ο κάθε χρήστης μπορεί να κάνει τον δικό του σύνδεσμο clicktodial)
     ExternalModule=Εξωτερικό module - Εγκατεστημένο στον φάκελο %s
    -BarcodeInitForThirdparties=Όγκος barcode init για Πέλ./Πρόμ.
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Όγκος barcode init ή επαναφορά για προϊόντα ή υπηρεσίες
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init τιμή για τις επόμενες %s άδειες καταχωρήσεις
     EraseAllCurrentBarCode=Διαγραφή όλων των τρεχουσών τιμών barcode
     ConfirmEraseAllCurrentBarCode=Είστε σίγουροι ότι θέλετε να διαγράψετε όλες τις τρέχουσες τιμές barcode;
     AllBarcodeReset=Όλες οι τιμές barcode έχουν αφαιρεθεί
    -NoBarcodeNumberingTemplateDefined=Δεν υπάρχει πρότυπο για barcode αρίθμηση ενεργοποιημένη στο module barcode
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Εμφάνιση διεύθυνσης επιχείρησης
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Χρήστες & Ομάδες
    +Module0Name=Χρήστες και Ομάδες
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Στοιχεία
    +Module1Name=Third Parties
     Module1Desc=Διαχείριση εταιρειών και επαφών (πελάτες, πιθανοί πελάτες...)
     Module2Name=Εμπορικό
     Module2Desc=Εμπορική διαχείριση
     Module10Name=Λογιστική
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Προτάσεις
     Module20Desc=Διαχείριση προσφορών
     Module22Name=Μαζική αποστολή e-mail
    @@ -511,13 +517,13 @@ Module52Desc=Διαχείριση αποθεμάτων (προϊόντων)
     Module53Name=Υπηρεσίες
     Module53Desc=Διαχείριση υπηρεσιών
     Module54Name=Συμβάσεις/Συνδρομές
    -Module54Desc=Διαχείριση συμβολαίων (υπηρεσιών ή ανανεώσιμων συνδρομών)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Διαχείριση barcode
     Module56Name=Τηλεφωνία
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Ενοποίηση ενός συστήματος ClickToDial (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Σημειώσεις εξόδων και ταξιδιών
     Module75Desc=Διαχείριση σημειώσεων εξόδων και ταξιδιών
     Module80Name=Αποστολές
     Module80Desc=Διαχείριση αποστολών και εντολών παράδοσης
    -Module85Name=Τράπεζες και μετρητά
    +Module85Name=Banks and Cash
     Module85Desc=Διαχείριση τραπεζών και λογαριασμών μετρητών
    -Module100Name=Εξωτερική ιστοσελίδα
    -Module100Desc=Αυτό το module περιέχει μία εξωτερική ιστοσελίδα ή site μέσα από το μενού του Dolibarr  για να προβληθεί μέσω ενός παραθύρου Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman και SIP
     Module105Desc=Mailman ή SPIP διεπαφή για ενότητα μέλος
     Module200Name=LDAP
    -Module200Desc=Συγχρονισμός LDAP directory
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=Διεπαφή PostNuke
     Module240Name=Εξαγωγές δεδομένων
    -Module240Desc=Εργαλείο για την εξαγωγή δεδομένων του Dolibarr (με βοήθεια)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Εισαγωγές δεδομένων
    -Module250Desc=Εργαλείο για την εισαγωγή δεδομένων στο Dolibarr (με βοήθεια)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Μέλη
     Module310Desc=Διαχείριση μελών οργανισμού
     Module320Name=RSS Feed
     Module320Desc=Εισαγωγή RSS feed εντός των σελίδων του Dolibarr
    -Module330Name=Σελιδοδείκτες
    -Module330Desc=Διαχείριση σελιδοδεικτών
    -Module400Name=Έργα/Ευκαιρίες/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Ημερολόγιο ιστού
     Module410Desc=Διεπαφή ημερολογίου ιστού
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Δάνειο
     Module520Desc=Διαχείριση δανείων
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Δωρεές
     Module700Desc=Donation management
     Module770Name=Αναφορές εξόδων
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Δημιουργία εγγράφου για μαζικά mail
     Module1780Name=Ετικέτες/Κατηγορίες
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Δυναμικές Τιμές
     Module2200Desc=Ενεργοποιήστε τη χρήση των μαθηματικών εκφράσεων για τις τιμές
     Module2300Name=Προγραμματισμένες εργασίες
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Ενεργοποιήστε το Dolibarr web services client (Μπορεί να χρησιμοποιηθεί για την προώθηση των δεδομένων/αιτήσεις σε εξωτερικούς διακομιστές. Μόνο Παραγγελίες προμηθευτών υποστηρίζονται προς το παρόν)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Αφήστε τη διαχείριση των ερωτήσεων
    -Module20000Desc=Δηλώστε και παρακολουθήστε τις αιτήσεις αδειών των εργαζομένων
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Σημείο Πωλήσεων
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Σημείο πωλήσεων
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Λογιστική (για προχωρημένους)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Απευθείας εκτύπωση (χωρίς να ανοίξετε τα έγγραφα) χρησιμοποιώντας Cups IPP διασύνδεση (Ο Εκτυπωτής πρέπει να είναι ορατός από τον server, και το CUPS πρέπει να έχει εγκατασταθεί στο server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Δημοσκόπηση, έρευνα ή ψηφοφορία
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Περιθώρια
     Module59000Desc=Πρόσθετο για την διαχείριση των περιθωρίων
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Διεθνείς Εμπορικός Όρος
    -Module62000Desc=Προσθέστε δυνατότητες για τη διαχείριση του Διεθνή Εμπορικού Όρου
    +Module62000Name=Διεθνείς Εμπορικοί Όροι
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Πόροι
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Εξαγωγή έργων
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Εγκατάσταση χρηματοοικονομικών λογαριασμών (δημιουργία, διαχείριση κατηγοριών)
    -Permission114=Συμφιλιώνει τις συναλλαγές
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Διαβάστε συμβάσεις/συνδρομές
     Permission162=Δημιουργία/τροποποίηση συμβολαίων/συνδρομών
     Permission163=Ενεργοποίηση υπηρεσίας/συνδρομής ενός συμβολαίου
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Διαγραφή επαφών
     Permission286=Εξαγωγή επαφών
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Διαγραφή μισθών
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Εξαγωγή μισθών
     Permission520=Ανάγνωση δανείων
     Permission522=Δημιουργία/μεταβολή δανείων
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Διαγραφή των αιτήσεων άδειας
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Προοπτική δυνητικό επίπεδο
     DictionaryCanton=Πολιτεία/Επαρχία
     DictionaryRegion=Περιοχές
    @@ -894,7 +902,7 @@ DictionaryVAT=Τιμές ΦΠΑ ή φόρου επί των πωλήσεων
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Όροι πληρωμής
     DictionaryPaymentModes=Τρόποι πληρωμής
    -DictionaryTypeContact=Τύποι Επικοινωνίας/Διεύθυνση
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Οικολογικός φόρος (ΑΗΗΕ)
     DictionaryPaperFormat=Μορφές χαρτιού
    @@ -908,47 +916,47 @@ DictionarySource=Προέλευση των προτάσεων/παραγγελι
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Μοντέλα λογιστικού σχεδίου
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Πρότυπα email
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Μονάδες
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Οι ρυθμίσεις αποθηκεύτηκαν
     SetupNotSaved=Setup not saved
     BackToModuleList=Πίσω στη λίστα με τα modules
    -BackToDictionaryList=Επιστροφή στη λίστα λεξικών
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Διαχείριση Φ.Π.Α.
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Τιμή
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Αναφορές για τοπικούς φόρους
     CalcLocaltax1=Πωλήσεις - Αγορές
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Πωλήσεις
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Ετικέτα στα έγγραφα
    -NbOfDays=Πλήθος Ημερών
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Στο τέλος του μήνα
     CurrentNext=Current/Next
     Offset=Απόκλιση
    @@ -984,7 +993,7 @@ DatabaseUser=Χρήστης ΒΔ
     DatabasePassword=Συνθηματικό ΒΔ
     Tables=Πίνακες
     TableName=Όνομα Πίνακα
    -NbOfRecord=Πλήθος Εγγραφών
    +NbOfRecord=No. of records
     Host=Διακομιστής
     DriverType=Driver type
     SummarySystem=Σύνοψη πληροφοριών συστήματος
    @@ -996,7 +1005,7 @@ Skin=Θέμα
     DefaultSkin=Προκαθορισμένο Θέμα
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Προεπιλεγμένο μέγιστο μέγεθος για λίστες
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Μήνυμα της ημέρας
     MessageLogin=Μήνυμα σελίδας εισόδου
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Προκαθορισμένη Γλώσσα (κωδ. γλώσσας)
     EnableMultilangInterface=Ενεργοποίησ πολυγλωσσικού περιβάλλοντος
     EnableShowLogo=Εμφάνιση λογότυπου στο αριστερό μενού
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Όνομα
     CompanyAddress=Διεύθυνση
     CompanyZip=Τ.Κ.
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Ιδιοκτήτης του λογαριασμού τράπε
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Εμφάνιση συνδέσμου link <strong>%s</strong>
     Alerts=Συναγερμοί
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Ιστορικό εισόδου χρηστών
     InfoDolibarr=Πληροφορίες Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Χρήση Δεκαδικών ψηφίων στις τιμές ειδών
     MAIN_MAX_DECIMALS_TOT=μέγιστος αριθμός δεκαδικών στη συνολική πληρωτέα τιμή
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Καθαρή τιμή επί του προϊόντος
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Ημιτελής μεταγλώττιση
    -MAIN_DISABLE_METEO=Απενεργοποίηση Meteo θέα
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Δοκιμή για να συνδεθείτε API
    -ProxyDesc=Μερικά χαρακτηριστικά του Dolibarr πρέπει να έχουν πρόσβαση στο Internet στην εργασία. Ορίστε εδώ τις παραμέτρους για αυτό. Εάν ο διακομιστής Dolibarr είναι πίσω από ένα διακομιστή μεσολάβησης, οι παράμετροι αυτές λέει Dolibarr τον τρόπο πρόσβασης στο Internet μέσω αυτού.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Εξωτερική πρόσβαση
     MAIN_PROXY_USE=Χρησιμοποιήστε ένα διακομιστή μεσολάβησης (αλλιώς άμεση πρόσβαση στο διαδίκτυο)
     MAIN_PROXY_HOST=Ονοματεπώνυμο / διεύθυνση του διακομιστή μεσολάβησης
     MAIN_PROXY_PORT=Λιμάνι του διακομιστή μεσολάβησης
     MAIN_PROXY_USER=Σύνδεση για να χρησιμοποιήσετε το διακομιστή μεσολάβησης
     MAIN_PROXY_PASS=Κωδικός πρόσβασης για να χρησιμοποιήσετε το διακομιστή μεσολάβησης
    -DefineHereComplementaryAttributes=Ορίστε εδώ όλα τα χαρακτηριστικά, δεν είναι ήδη διαθέσιμη από προεπιλογή, και ότι θέλετε να υποστηριχθούν για %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Συμπληρωματικά χαρακτηριστικά
     ExtraFieldsLines=Συμπληρωματικά χαρακτηριστικά (σειρές)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Συμπληρωματικές ιδιότητες (τιμολόγια)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=μόνο αλφαριθμητικά και πε
     SendmailOptionNotComplete=Προσοχή, σε μερικά συστήματα Linux, για να στείλετε e-mail από το e-mail σας, το sendmail εγκατάστασης εκτέλεση πρέπει conatins επιλογή-βα (mail.force_extra_parameters παράμετρος σε php.ini αρχείο σας). Αν δεν ορισμένοι παραλήπτες λαμβάνουν μηνύματα ηλεκτρονικού ταχυδρομείου, προσπαθήστε να επεξεργαστείτε αυτή την PHP με την παράμετρο-mail.force_extra_parameters = βα).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Εγκατάσταση της μετάφρασης
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=Μπορείτε να χρησιμοποιήσετε το πρόγραμμα οδήγησης %s που είναι καλύτερος οδηγός που διατίθεται σήμερα.
    -YouDoNotUseBestDriver=Μπορείτε να χρησιμοποιήσετε τη μονάδα %s αλλά ο οδηγός %s προτείνετε.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Βελτιστοποίηση αναζήτησης
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=Xdebug είναι φορτωμένο.
     XCacheInstalled=XCache είναι φορτωμένο.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Έκδοση στο πεδίο %s
     FillThisOnlyIfRequired=Παράδειγμα: +2 (συμπληρώστε μόνο αν ζώνη ώρας αντισταθμίσουν τα προβλήματα για προβλήματα που προέκυψαν)
     GetBarCode=Πάρτε barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Να μην προτείνεται η δημιουργία κωδικού. Ο κωδικός πρέπει να πληκτρολογηθεί με το χέρι.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Ρυθμίσεις αρθρώματος Εταιριών
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Πρότυπα εγγράφων
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Ενεργοποιήστε τη δυνατότητα να συμπληρώνει αυτόματα τις γραμμές πληρωμής σε έντυπο πληρωμής
    -CompanyIdProfChecker=Επαγγελματική ταυτότητα μοναδική
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Τιμολόγια και πιστωτικά τιμολόγια μοντέλο αρίθμησης
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Πιστωτικό τιμολόγιο
     CreditNotes=Πιστωτικά τιμολόγια
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Διαχείριση μιας Σύνδεση για κά
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Σύνδεση/έλεγχος ταυτότητας με το διακομιστή LDAP επιτυχή (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Επιδόσεις ρύθμισης/βελτιστοποίηση της αναφοράς
    -YouMayFindPerfAdviceHere=Θα βρείτε σε αυτή τη σελίδα ορισμένους ελέγχους ή συμβουλές που σχετίζονται με την απόδοση.
    -NotInstalled=Δεν έχει εγκατασταθεί, οπότε ο server σας δεν έχει επιβραδυνθεί από αυτό.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Εφαρμογή Cache
     MemcachedNotAvailable=Δεν βρέθηκε applicative προσωρινή μνήμη. Μπορείτε να βελτιώσετε την απόδοση με την εγκατάσταση ενός Memcached διακομιστή προσωρινής μνήμης και ένα module θα είναι σε θέση να χρησιμοποίηση το διακομιστή προσωρινής μνήμης.<br>Περισσότερες πληροφορίες εδώ <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Σημειώστε ότι πολλοί πάροχοι web hosting δεν παρέχουν διακομιστή cache.
     MemcachedModuleAvailableButNotSetup=Το module memcached για εφαρμογή cache βρέθηκε, αλλά η εγκατάσταση του module δεν είναι πλήρης.
     MemcachedAvailableAndSetup=Το module memcache προορίζεται για χρήση memcached του διακομιστή όταν είναι ενεργοποιημένη.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Αρχεία τύπου %s αποθηκεύονται προσωρινά από το διακομιστή HTTP
     FilesOfTypeNotCached=Αρχεία τύπου %s δεν αποθηκεύονται προσωρινά από το διακομιστή HTTP
     FilesOfTypeCompressed=Τα αρχεία τύπου %s συμπιέζονται από το διακομιστή HTTP
     FilesOfTypeNotCompressed=Αρχεία τύπου %s δεν συμπιέζονται από το διακομιστή HTTP
     CacheByServer=Cache από τον server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache από τον browser
     CompressionOfResources=Συμπίεση HTTP απαντήσεων
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Μια τέτοια αυτόματη ανίχνευση δεν είναι δυνατόν με τα τρέχουσα προγράμματα περιήγησης
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Υπηρεσίες εγκατάστασης μονάδας
     ProductServiceSetup=Προϊόντα και Υπηρεσίες εγκατάστασης μονάδων
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Επίσης, αν έχετε ένα μεγάλο αριθμό προϊόντων (> 100 000), μπορείτε να αυξήσετε την ταχύτητα με τον καθορισμό της σταθερά PRODUCT_DONOTSEARCH_ANYWHERE σε 1 στο Setup->Other.  αναζήτηση στη συνέχεια θα περιορίζεται από την έναρξη της σειράς.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Σας αποστολές αρίθμησης ενοτήτων
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Ελεύθερο κείμενο για τις μεταφορές
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Εξελιγμένο πρόγραμμα επεξεργασίας
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Σύνδεση με τον διακομιστή '%s' στη βάση δεδομένων '%s' με το χρήστη '%s' είναι επιτυχείς.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Χρόνος της καταλληλότητας του ΦΠΑ εξ ορισμού ανάλογα την επιλογή:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Κατά την αποστολή
     OnPayment=Κατά την πληρωμή
     OnInvoice=Κατά την έκδοση τιμ/γίου
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Ρυθμίστε αυτόματα αυτό το είδος της εκδήλωσης στο φίλτρο αναζήτησης του προβολή ατζέντας
    -AGENDA_DEFAULT_FILTER_STATUS=Ορίστε αυτό το καθεστώς για τα γεγονότα στο φίλτρο αναζήτησης της προβολής ατζέντας
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Ποια καρτέλα θέλετε να ανοίξετε από προεπιλογή κατά την επιλογή του μενού Ατζέντα
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Σημείο Πωλήσεων
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Προεπιλογή γενικός Πελ./Προμ. να χρησιμοποιηθεί για Πωλήσεις
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Αναγκαστικός περιορισμός αποθήκης για μείωση των αποθεμάτων
    -StockDecreaseForPointOfSaleDisabled=Μείωση αποθέματος από Point Of Sale απενεργοποιημένο
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=Δεν έχετε απενεργοποιήσει μείωση των αποθεμάτων κατά την πραγματοποίηση μιας πώλησης από το σημείο πώλησης "POS". Μια αποθήκη είναι απαραίτητη.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Εργασίες αριθμοδότησης μονάδας
     TaskModelModule=Εργασίες υπόδειγμα εγγράφου αναφορών
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=Λίστα ειδοποιήσεων ανά χρήστη*
     ListOfNotificationsPerUserOrContact=Λίστα ειδοποιήσεων ανά χρήστη* ή ανά επαφή**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Χρώμα σε συνδέσμους
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Χρώμα φόντου για τις άρτιες
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Θέση γραμμής σε σύνθετο πλαίσιο
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Τύπος πρότυπου
    -TemplateIsVisibleByOwnerOnly=Το πρότυπο είναι ορατό μόνο από τον κάτοχο
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Σελίδα στόχος
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/el_GR/companies.lang b/htdocs/langs/el_GR/companies.lang
    index ef61b1842c5..85e04b4456e 100644
    --- a/htdocs/langs/el_GR/companies.lang
    +++ b/htdocs/langs/el_GR/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Επιλέξτε ένα Πελ./Προμ.
     ConfirmDeleteCompany=Είστε σίγουροι ότι θέλετε να διαγράψετε την εταιρία και όλες τις σχετικές πληροφορίες;
     DeleteContact=Διαγραφή προσώπου επικοινωνίας
     ConfirmDeleteContact=Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την επαφή και όλες τις πληροφορίες της;
    -MenuNewThirdParty=Νέα εγγραφή
    -MenuNewCustomer=Νέος Πελάτης
    -MenuNewProspect=Νέα Προοπτική
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Νέος Ιδιώτης
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create thirdpary
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Αντιπρόσωπος στοιχείου
     Company=Εταιρία
     CompanyName=Όνομα εταιρίας
     AliasNames=Ψευδώνυμο (εμπορικό, εμπορικό σήμα, ...)
    -AliasNameShort=Ψευδώνυμο
    +AliasNameShort=Alias Name
     Companies=Εταιρίες
    -CountryIsInEEC=Η χώρα βρίσκετε στην Ε.Ε.
    -ThirdPartyName=Όνομα Πελ./Προμ.
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Λογαριασμοί
    -ThirdParties=Πελ./Προμ.
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Προοπτικές
     ThirdPartyProspectsStats=Προοπτικές
     ThirdPartyCustomers=Πελάτες
     ThirdPartyCustomersStats=Πελάτες
     ThirdPartyCustomersWithIdProf12=Πελάτες με %s ή %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Τύπος Πελ./Προμ.
    +ThirdPartyType=Type of company
     Individual=Ιδιώτης
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Γονική εταιρία
     Subsidiaries=Θυγατρικές
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Ταχ. Κώδικας
     Town=Πόλη
     Web=Ιστοσελίδα
     Poste= Θέση
    -DefaultLang=Γλώσσα
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Total proposals
    @@ -258,10 +258,10 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Το συντακτικό είναι έγκυρο
    -VATReturn=VAT return
    +VATReturn=Επιστροφή ΦΠΑ
     ProspectCustomer=Προοπτική / Πελάτης
     Prospect=Προοπτική
     CustomerCard=Καρτέλα Πελάτη
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer still has discount credits for <b>%s %s</b>
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Ο πελάτης εξακολουθεί να έχει πιστωτικά τιμολόγια για <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Καμία
    -Supplier=Προμηθευτής
    +Supplier=Vendor
     AddContact=Δημιουργία επαφής
     AddContactAddress=Δημιουργία επαφής/διεύθυνση
     EditContact=Επεξεργασία επαφής
    @@ -303,22 +303,22 @@ AddThirdParty=Δημιουργήστε Πελ./Προμ.
     DeleteACompany=Διαγραφή εταιρίας
     PersonalInformations=Προσωπικά δεδομένα
     AccountancyCode=Λογιστική λογαριασμού
    -CustomerCode=Κωδικός Πελάτη
    -SupplierCode=Vendor code
    -CustomerCodeShort=Κωδικός Πελάτη
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Κωδικός πελάτη, μοναδικός για όλους τους πελάτες
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Απαιτείται αν το στοιχείο είναι πελάτης ή προοπτική
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Η εγκυρότητα καθορίζεται από το άρθρωμα
    -ThisIsModuleRules=Κανόνες αρθρώματος
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Προοπτική σε Επαφή
     CompanyDeleted="%s" διαγράφηκε από την βάση δεδομένων
     ListOfContacts=Λίστα αντιπροσώπων
    -ListOfContactsAddresses=Κατάλογος των επαφών/διευθύνσεων
    -ListOfThirdParties=Λίστα στοιχείων
    -ShowCompany=Show third party
    +ListOfContactsAddresses=Λίστα αντιπροσώπων
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Εμφάνιση Προσώπου Επικοινωνίας
     ContactsAllShort=Όλα (Χωρίς Φίλτρο)
     ContactType=Τύπος αντιπροσώπου επικοινωνίας
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Αυτός ο αντιπρόσωπος δεν αντισ
     NoContactForAnyContract=Αυτός ο αντιπρόσωπος δεν αντιστοιχεί σε  κανένα συμβόλαιο
     NoContactForAnyInvoice=Αυτός ο αντιπρόσωπος δεν αντιστοιχεί σε  κανένα τιμολόγιο
     NewContact=Νέος αντιπρόσωπος επικοινωνίας
    -NewContactAddress=Νέα επαφή/διεύθυνση
    +NewContactAddress=New Contact/Address
     MyContacts=Αντιπρόσωποι επικοινωνίας
     Capital=Κεφάλαιο
     CapitalOf=Capital of %s
     EditCompany=Επεξεργασία Εταιρίας
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Έλεγχος
    -VATIntraCheckDesc=Ο σύνδεσμος <b>%s</b> σας επιτρέπει να επικοινωνήσετε τον ευρωπαϊκό οργανισμό ελέγχου ΑΦΜ. Απαιτείται σύνδεση με το Internet.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Ούτε προοπτική ούτε πελάτης
    -JuridicalStatus=Νομικό καθεστώς
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Προσωπικό
     ProspectLevelShort=Δυναμική
     ProspectLevel=Δυναμική προοπτικής
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Ο αντιπρόσωπος δεν αντιστοιχεί σε κάποιο στοιχείο
     DolibarrLogin=Είσοδος Dolibarr
     NoDolibarrAccess=Χωρίς πρόσβαση στο Dolibarr
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Αντιπρόσωποι και ιδιότητες
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Επίπεδο τιμής
     DeliveryAddress=Διεύθυνση αποστολής
     AddAddress=Δημιουργία διεύθυνσης
    @@ -402,16 +402,16 @@ DeleteFile=Διαγραφή Αρχείου
     ConfirmDeleteFile=Είστε σίγουροι ότι θέλετε να διαγράψετε το αρχείο;
     AllocateCommercial=Έχει αποδοθεί σε αντιπρόσωπο πωλήσεων
     Organization=Οργανισμός
    -FiscalYearInformation=Πληροφορίες Οικονομικού Έτους
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Μήνας Εκκίνησης Οικονομικού Έτους
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Λίστα Προοπτικών
    -ListCustomersShort=Λίστα Πελατών
    -ThirdPartiesArea=Περιοχή Πελ./Προμ. και επαφών
    -LastModifiedThirdParties=Τελευταία %s τροποποιημένα στοιχεία
    -UniqueThirdParties=Σύνολο μοναδικών Πελ./Προμ.
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Ανοίξτε
     ActivityCeased=Κλειστό
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Τρέχον εκκρεμείς λογαριασμός
     OutstandingBill=Μέγιστο. για εκκρεμείς λογαριασμό
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Customer/supplier code is free. This code can be modified at any time.
     ManagingDirectors=Διαχειριστής (ες) ονομασία (CEO, διευθυντής, πρόεδρος ...)
     MergeOriginThirdparty=Διπλότυπο Πελ./Προμ. ( Πελ./Προμ. θέλετε να διαγραφεί)
     MergeThirdparties=Συγχώνευση  Πελ./Προμ.
    -ConfirmMergeThirdparties=Είστε σίγουροι ότι θέλετε να εισάγεται τα στοιχεία αυτού του Πελ./Προμ. στον υπάρχον; Όλα τα συνδεδεμένα πεδία (Τιμολόγια, Παραγγελίες, ....) θα μετακινηθούν στον υπάρχον Πελ./Προμ., και έπειτα αυτός ο Πελ./Προμ. θα διαγραφεί.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/el_GR/errors.lang b/htdocs/langs/el_GR/errors.lang
    index dd51f028504..13aa9957a77 100644
    --- a/htdocs/langs/el_GR/errors.lang
    +++ b/htdocs/langs/el_GR/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Η τιμή «%s« δεν έχει σωστή μορφή ημ
     ErrorWrongDate=Η ημερομηνία δεν είναι σωστή!
     ErrorFailedToWriteInDir=Αποτυχία εγγραφής στον %s φάκελο
     ErrorFoundBadEmailInFile=Βρέθηκε εσφαλμένη σύνταξη e-mail για %s γραμμές στο αρχείο (%s γραμμή παράδειγμα με e-mail = %s)
    -ErrorUserCannotBeDelete=Ο χρήστης δεν μπορεί να διαγραφεί. Μπορεί να σχετίζεται με οντότητες του Dolibarr.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Ορισμένα από τα απαιτούμενα πεδία δεν έχουν συμπληρωθεί.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Αποτυχία δημιουργίας φακέλου. Βεβαιωθείτε ότι ο Web server χρήστης έχει δικαιώματα να γράψει στο φάκελο εγγράφων του Dolibarr. Αν η <b>safe_mode</b> παράμετρος είναι ενεργοποιημένη για την PHP, ελέγξτε ότι τα αρχεία php του Dolibarr ανήκουν στον web server χρήστη (ή ομάδα).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Παρακαλούμε συμπληρώστε τιμή
     ErrorNoValueForCheckBoxType=Παρακαλούμε συμπληρώστε τιμή για την λίστα επιλογής
     ErrorNoValueForRadioType=Παρακαλούμε συμπληρώστε τιμή για την λίστα επιλογής μίας επιλογής
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Το πεδίο <b>%s</b> δεν πρέπει να περιέχει ειδικούς χαρακτήρες.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Δεν έχει ενεργοποιηθεί λογιστική μονάδα
     ErrorExportDuplicateProfil=Αυτό το όνομα προφίλ υπάρχει ήδη για αυτό το σύνολο των εξαγωγών.
     ErrorLDAPSetupNotComplete=Η αντιστοίχιση Dolibarr-LDAP δεν είναι πλήρης.
     ErrorLDAPMakeManualTest=Ένα αρχείο. Ldif έχει δημιουργηθεί στον φάκελο %s. Προσπαθήστε να το φορτώσετε χειροκίνητα από την γραμμή εντολών για να έχετε περισσότερες πληροφορίες σχετικά με τα σφάλματα.
    -ErrorCantSaveADoneUserWithZeroPercentage=Δεν μπορεί να σώσει μια ενέργεια με &quot;δεν statut ξεκίνησε&quot; αν πεδίο &quot;γίνεται από&quot; είναι επίσης γεμάτη.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Κωδικός που χρησιμοποιείται για τη δημιουργία ήδη υπάρχει.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Δεν είναι δυνατή η διαγραφή της εγγραφής.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Η Javascript πρέπει να είναι άτομα με ειδικές ανάγκες να μην έχουν αυτή τη δυνατότητα εργασίας. Για να ενεργοποιήσετε / απενεργοποιήσετε το Javascript, πηγαίνετε στο μενού Home-> Setup-> Εμφάνιση.
     ErrorPasswordsMustMatch=Και οι δύο πληκτρολογήσει τους κωδικούς πρόσβασης πρέπει να ταιριάζουν μεταξύ τους
    -ErrorContactEMail=Ένα τεχνικό σφάλμα. Παρακαλούμε, επικοινωνήστε με τον διαχειριστή για μετά <b>%s</b> email en παρέχουν την <b>%s</b> κωδικό σφάλματος στο μήνυμά σας, ή ακόμα καλύτερα με την προσθήκη ενός αντιγράφου της οθόνης αυτής της σελίδας.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Λάθος τιμή για <b>%s</b> αριθμό τομέα <b>(«%s»</b> τιμή δεν ταιριάζει regex <b>%s</b> κανόνα)
     ErrorFieldValueNotIn=Λάθος τιμή για <b>%s</b> αριθμό τομέα <b>(«%s»</b> τιμή δεν είναι μια τιμή διαθέσιμη σε <b>%s</b> τομέα της <b>%s</b> πίνακα)
     ErrorFieldRefNotIn=Λάθος τιμή για τον αριθμό <b>%s</b> τομέα <b>(«%s»</b> τιμή δεν είναι <b>%s</b> υφιστάμενων ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Το πρόγραμμα προστασίας απ
     ErrorSpecialCharNotAllowedForField=Ειδικοί χαρακτήρες δεν επιτρέπονται για το πεδίο &quot;%s&quot;
     ErrorNumRefModel=Μια αναφορά υπάρχει στη βάση δεδομένων (%s) και δεν είναι συμβατές με αυτόν τον κανόνα αρίθμηση. Αφαιρέστε το αρχείο ή μετονομαστεί αναφοράς για να ενεργοποιήσετε αυτή την ενότητα.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Σφάλμα στην μάσκα
     ErrorBadMaskFailedToLocatePosOfSequence=Σφάλμα, μάσκα χωρίς τον αύξοντα αριθμό
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Σφάλμα, κακή αξία επαναφορά
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Ο μετρητής πρέπει να έχει περισσότερα από 3 ψηφία
     ErrorSelectAtLeastOne=Σφάλμα. Επιλέξτε τουλάχιστον μία είσοδο.
    -ErrorDeleteNotPossibleLineIsConsolidated=Διαγραφή δεν είναι δυνατόν λόγω εγγραφή συνδέεται με μια τράπεζα transation που συμβιβασμό
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s έχει ανατεθεί σε άλλη τρίτη
     ErrorFailedToSendPassword=Αποτυχία αποστολής κωδικού
     ErrorFailedToLoadRSSFile=Αποτυγχάνει να πάρει RSS feed. Προσπαθήστε να προσθέσετε σταθερή MAIN_SIMPLEXMLLOAD_DEBUG εάν τα μηνύματα λάθους δεν παρέχει αρκετές πληροφορίες.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Χρήστης με <b>%s</b> login δεν θα μπορ
     ErrorLoginHasNoEmail=Αυτός ο χρήστης δεν έχει τη διεύθυνση ηλεκτρονικού ταχυδρομείου. Επεξεργασία ματαιώθηκε.
     ErrorBadValueForCode=Κακό αξία για τον κωδικό ασφαλείας. Δοκιμάστε ξανά με νέα τιμή ...
     ErrorBothFieldCantBeNegative=Πεδία %s %s και δεν μπορεί να είναι τόσο αρνητικές όσο
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Η ποσότητα στην γραμμή στα τιμολόγια των πελατών δεν μπορεί να είναι αρνητική
     ErrorWebServerUserHasNotPermission=Λογαριασμό χρήστη <b>%s</b> χρησιμοποιείται για την εκτέλεση του web server δεν έχει άδεια για τη συγκεκριμένη
     ErrorNoActivatedBarcode=Δεν ενεργοποιείται τύπου barcode
    @@ -138,7 +141,7 @@ ErrorBadFormat=Κακή μορφή!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Σφάλμα υπάρχουν κάποιες παραδόσεις που συνδέονται με την εν λόγω αποστολή. Η διαγραφή απορρίφθηκε.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Δεν μπορείτε να διαγράψετε μια πληρωμή που σχετίζεται με ένα τουλάχιστον τιμολόγιο με καθεστώς πληρωμένο
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Αδύνατη η ανάθεση στην σταθερά '%s'
     ErrorPriceExpression2=Αδυναμία επαναπροσδιορισμού ενσωματωμένης λειτουργίας '%s'
     ErrorPriceExpression3=Μη ορισμένη μεταβλητή '%s' στον ορισμό συνάρτησης
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Μη αναμενόμενο '%s'
     ErrorPriceExpression6=Λάθος αριθμός παραμέτρων (%s δόθηκαν, %s αναμενώμενα)
     ErrorPriceExpression8=Μη αναμενόμενος τελεστής '%s'
     ErrorPriceExpression9=Μη αναμενόμενο σφάλμα
    -ErrorPriceExpression10=Λείπει ο τελεστής '%s'
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Περιμένει '%s'
     ErrorPriceExpression14=Διαίρεση με το μηδέν
     ErrorPriceExpression17=Μη ορισμένη μεταβλητή '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Το πεδίο  <b>%s</b> πρέπει να περιέχει αριθμητική τιμή
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Ένας σελιδοδείκτης με αυτόν
     WarningPassIsEmpty=Προειδοποίηση, password της βάσης δεδομένων είναι άδειο. Αυτή είναι μια τρύπα ασφαλείας. Θα πρέπει να προσθέσετε έναν κωδικό πρόσβασης στη βάση δεδομένων σας και να αλλάξετε conf.php αρχείο σας για να εκφραστεί αυτό.
     WarningConfFileMustBeReadOnly=Προειδοποίηση, config αρχείο σας <b>(htdocs / conf / conf.php)</b> μπορούν να αντικατασταθούν από τον web server. Αυτό είναι ένα σοβαρό κενό ασφαλείας. Τροποποιήστε τα δικαιώματα στο αρχείο για να είναι σε λειτουργία μόνο για ανάγνωση για τη λειτουργία των χρηστών του συστήματος που χρησιμοποιείται από τον διακομιστή Web. Εάν χρησιμοποιείτε Windows και μορφή FAT για το δίσκο σας, πρέπει να ξέρετε ότι αυτό το σύστημα αρχείων δεν επιτρέπει να προσθέσετε δικαιώματα στο αρχείο, οπότε δεν μπορεί να είναι απολύτως ασφαλής.
     WarningsOnXLines=Προειδοποιήσεις στα <b>%s</b> γραμμές κώδικα
    -WarningNoDocumentModelActivated=Κανένα μοντέλο, για την παραγωγή εγγράφων, έχει ενεργοποιηθεί. Ένα μοντέλο θα είναι επιλεγμένο από προεπιλογή μέχρι να ελέγξετε την εγκατάσταση μονάδας σας.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=Όλες οι προειδοποιήσεις ασφαλείας (ορατό από το admin χρήστες μόνο) θα παραμείνει ενεργό για όσο διάστημα η ευπάθεια είναι παρούσα (ή ότι η συνεχής MAIN_REMOVE_INSTALL_WARNING προστίθεται στο Setup-> Άλλες setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/el_GR/interventions.lang b/htdocs/langs/el_GR/interventions.lang
    index 68f806912aa..f4e5510e6e1 100644
    --- a/htdocs/langs/el_GR/interventions.lang
    +++ b/htdocs/langs/el_GR/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Παρεμβάσεις
     InterventionCard=Καρτέλα παρέμβασης
     NewIntervention=Νέα παρέμβαση
     AddIntervention=Δημιουργία παρέμβασης
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Λίστα παρεμβάσεων
     ActionsOnFicheInter=Δράσεις για την παρέμβαση
     LastInterventions=Τελευταίες %s παρεμβάσεις
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Στατιστικά παρεμβάσεων
    -NbOfinterventions=Αρ. καρτών παρέμβασης
    -NumberOfInterventionsByMonth=Αρ. καρτών παρέμβασης  ανά μήνα (ημερομηνία επικύρωσης)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Κωδ παρέμβασης
    diff --git a/htdocs/langs/el_GR/main.lang b/htdocs/langs/el_GR/main.lang
    index 83e30ee288c..e7d3ba5c85e 100644
    --- a/htdocs/langs/el_GR/main.lang
    +++ b/htdocs/langs/el_GR/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Αποτυχία αποστολής mail (αποστολέ
     ErrorFileNotUploaded=Το αρχείο δεν φορτώθηκε. Βεβαιωθείτε ότι το μέγεθος δεν υπερβαίνει το μέγιστο επιτρεπόμενο όριο, ότι υπάρχει διαθέσιμος χώρος στο δίσκο και ότι δεν υπάρχει ήδη ένα αρχείο με το ίδιο όνομα σε αυτόν τον κατάλογο.
     ErrorInternalErrorDetected=Εντοπίστηκε Σφάλμα
     ErrorWrongHostParameter=Λάθος παράμετρος διακομιστή
    -ErrorYourCountryIsNotDefined=Η χώρα σας δεν ορίστηκε. Πηγαίνεται στις Ρυθμίσεις - Εταιρία και ρυθμίστε την
    -ErrorRecordIsUsedByChild=Αποτυχία διαγραφής εγγραφής. Η εγγραφή χρησιμοποιείται από τουλάχιστον μια θυγατρική εγγραφή
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Εσφαλμένη Τιμή
     ErrorWrongValueForParameterX=Εσφαλμένη Τιμή για την παράμετρο %s
     ErrorNoRequestInError=Δεν υπάρχει αίτημα στο Σφάλμα
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Διπλόεγγραφή (Διπλή τιμή σε πεδίο με ξεχωριστές τιμές)
    -ErrorSomeErrorWereFoundRollbackIsDone=Εμφανίστηκαν λάθη. Όλες οι αλλαγές θα αναιρεθούν
    -ErrorConfigParameterNotDefined=Η παράμετρος <b>%s</b> δεν είναι καθορισμένη στο αρχείο ρυθμίσεων του Dolibarr <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Αποτυχία εύρεσης του χρήστη <b>%s</b> στην βάση δεδομένων του Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Σφάλμα, δεν ορίστηκαν ποσοστά φόρων για την χώρα  '%s'.
     ErrorNoSocialContributionForSellerCountry=Σφάλμα, καμία κοινωνική εισφορά / φόροι ορίζονται για τη χώρα '%s'.
     ErrorFailedToSaveFile=Σφάλμα, αποτυχία αποθήκευσης αρχείου
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Δεν έχετε εξουσιοδότηση για να το πραγματοποιήσετε
     SetDate=Ορισμός ημερομηνίας
     SelectDate=Επιλέξτε μια ημερομηνία
    @@ -78,10 +78,10 @@ FileRenamed=Το αρχείο μετονομάστηκε με επιτυχία
     FileGenerated=Το αρχείο δημιουργήθηκε με επιτυχία
     FileSaved=The file was successfully saved
     FileUploaded=Το αρχείο ανέβηκε με επιτυχία
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Επιλέχθηκε ένα αρχείο για επισύναψη, αλλά δεν έχει μεταφερθεί ακόμη. Πατήστε στο "Επισύναψη Αρχείου".
    -NbOfEntries=Πλήθος εγγραφών
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Online βοήθεια (απαιτείται σύνδεση στο internet)
     GoToHelpPage=Βοήθεια
     RecordSaved=Η εγγραφή αποθηκεύτηκε
    @@ -142,6 +142,7 @@ Closed=Κλειστή
     Closed2=Κλειστή
     NotClosed=Not closed
     Enabled=Ενεργή
    +Enable=Ενεργοποίηση
     Deprecated=Παρωχημένο
     Disable=Απενεργοποίηση
     Disabled=Ανενεργή
    @@ -153,7 +154,7 @@ Update=Ανανέωση
     Close=Κλείσιμο
     CloseBox=Remove widget from your dashboard
     Confirm=Επιβεβαίωση
    -ConfirmSendCardByMail=Είστε σίγουροι πως θέλετε να στείλετε το περιεχόμενο αυτής της κάρτας με email στο <b>%s</b>;
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Διαγραφή
     Remove=Απομάκρυνση
     Resiliate=Τερματισμός
    @@ -327,7 +328,7 @@ Copy=Αντιγραφή
     Paste=Επικόλληση
     Default=Προκαθορ.
     DefaultValue=Προκαθορισμένη Τιμή
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Τιμή
     PriceCurrency=Price (currency)
     UnitPrice=Τιμή Μονάδος
    @@ -347,7 +348,7 @@ AmountTTCShort=Ποσό (με Φ.Π.Α.)
     AmountHT=Ποσό (χ. Φ.Π.Α.)
     AmountTTC=Ποσό (με Φ.Π.Α.)
     AmountVAT=Ποσό Φόρου
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Ποσό (χωρίς φόρους), αρχικό νόμισμα
    @@ -428,7 +429,7 @@ ActionNotApplicable=Δεν ισχύει
     ActionRunningNotStarted=Δεν έχουν ξεκινήσει
     ActionRunningShort=Σε εξέλιξη
     ActionDoneShort=Ολοκληρωμένες
    -ActionUncomplete=Μη ολοκληρωμένη
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Δημιουργία
     Duration=Διάρκεια
     TotalDuration=Συνολική Διάρκεια
     Summary=Σύνοψη
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Σε διάθεση
     NotYetAvailable=Δεν είναι ακόμη σε διάθεση
    @@ -468,7 +469,7 @@ and=και
     or=ή
     Other=Άλλο
     Others=Άλλα-οι
    -OtherInformations=Άλλες Πληροφορίες
    +OtherInformations=Other information
     Quantity=Ποσότητα
     Qty=Ποσ.
     ChangedBy=Τροποποιήθηκε από
    @@ -495,7 +496,7 @@ Received=Παραλήφθηκε
     Paid=Πληρωμές
     Topic=Αντικείμενο
     ByCompanies=Ανά στοιχείο
    -ByUsers=By user
    +ByUsers=Ανα χρήστη
     Links=Σύνδεσμοι
     Link=Σύνδεσμος
     Rejects=Απορρίψεις
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Καθυστερ.
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Φωτογραφία
     Photos=Φωτογραφίες
    @@ -530,18 +531,6 @@ September=Σεπτέμβριος
     October=Οκτώβριος
     November=Νοέμβριος
     December=Δεκέμβριος
    -JanuaryMin=Ιαν
    -FebruaryMin=Φεβ
    -MarchMin=Μαρ
    -AprilMin=Απρ
    -MayMin=Μάι
    -JuneMin=Ιούν
    -JulyMin=Ιούλ
    -AugustMin=Αύγ
    -SeptemberMin=Σεπ
    -OctoberMin=Οκτ
    -NovemberMin=Νοέ
    -DecemberMin=Δεκ
     Month01=Ιανουάριος
     Month02=Φεβρουάριος
     Month03=Μάρτιος
    @@ -646,6 +635,8 @@ SendMail=Αποστολή email
     EMail=E-mail
     NoEMail=Χωρίς email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Χωρείς κινητό τηλέφωνο
     Owner=Ιδιοκτήτης
     FollowingConstantsWillBeSubstituted=Οι ακόλουθες σταθερές θα αντικαταστασθούν με τις αντίστοιχες τιμές
    @@ -677,7 +668,7 @@ NeverReceived=Δεν παραλήφθηκε
     Canceled=Ακυρώθηκε
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=Μπορείτε να ορίσετε την προεπιλεγμένη τιμή που θα χρησιμοποιείται κατά τη δημιουργία μίας νέας εγγραφής στις ρυθμίσεις του module
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Χρώμα
     Documents=Συνδεδεμένα Αρχεία
     Documents2=Έγγραφα
    @@ -716,15 +707,15 @@ Merge=Ενσωμάτωση
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Εμγάνιση σελίδας για εκτύπωση
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Σφάλμα συστήματος
     CoreErrorMessage=Λυπούμαστε, παρουσιάστηκε ένα σφάλμα. Επικοινωνήστε με το διαχειριστή του συστήματος σας για να ελέγξετε τα αρχεία καταγραφής ή να απενεργοποιήστε το $ dolibarr_main_prod = 1 για να πάρετε περισσότερες πληροφορίες.
     CreditCard=Πιστωτική Κάρτα
     ValidatePayment=Επικύρωση πληρωμής
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Τα πεδία <b>%s</b> είναι υποχρεωτικά
    -FieldsWithIsForPublic=Τα πεδία με <b>%s</b> εμφανίζονται στην δημόσια λίστα των μελών. Αν δεν επιθυμείτε κάτι τέτοιο αποεπιλέξτε την επιλογή "Δημόσιο".
    -AccordingToGeoIPDatabase=(σύμφωνα με το GeoIP)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Γραμμή
     NotSupported=Χωρίς Υποστήριξη
     RequiredField=Απαιτούμενο Πεδίο
    @@ -732,6 +723,8 @@ Result=Αποτέλεσμα
     ToTest=Δοκιμή
     ValidateBefore=Η καρτέλα πρέπει να επικυρωθεί πριν χρησιμοποιήσετε αυτή τη δυνατότητα
     Visibility=Ορατότητα
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Προσωπικό
     Hidden=Κρυφό
     Resources=Πόροι
    @@ -750,6 +743,7 @@ LinkTo=Σύνδεση σε
     LinkToProposal=Σύνδεση σε προσφορά
     LinkToOrder=Σύνδεση με παραγγελία
     LinkToInvoice=Σύνδεση σε τιμολόγιο
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Σύνδεση σε παραγγελία προμηθευτή
     LinkToSupplierProposal=Σύνδεση σε προσφορά προμηθευτή
     LinkToSupplierInvoice=Σύνδεση σε τιμολόγιο προμηθευτή
    @@ -758,6 +752,7 @@ LinkToIntervention=Σύνδεση σε παρέμβαση
     CreateDraft=Δημιουργία σχεδίου
     SetToDraft=Επιστροφή στο προσχέδιο
     ClickToEdit=Κάντε κλικ για να επεξεργαστείτε
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Μέχρι την ημέρα
     BySalesRepresentative=Με τον αντιπρόσωπο πωλήσεων
     LinkedToSpecificUsers=Συνδέεται με μια συγκεκριμένη επαφή χρήστη
     NoResults=Δεν υπάρχουν αποτελέσματα
    -AdminTools=Εργαλεία διαχειριστή
    +AdminTools=Admin Tools
     SystemTools=Εργαλεία συστήματος
     ModulesSystemTools=Εργαλεία πρόσθετων
     Test=Δοκιμή
     Element=Στοιχείο
     NoPhotoYet=Δεν υπαρχουν διαθεσημες φωτογραφίες ακόμα
     Dashboard=Πίνακας ελέγχου 
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Εκπίπτουν
     from=από
     toward=προς
    @@ -802,7 +797,7 @@ PrintFile=Εκτύπωση του αρχείου %s
     ShowTransaction=Εμφάνιση καταχώρισης σε τραπεζικό λογαριασμό
     ShowIntervention=Εμφάνιση παρέμβασης
     ShowContract=Εμφάνιση συμβολαίου
    -GoIntoSetupToChangeLogo=Πηγαίνετε Αρχική - Ρυθμίσεις - Εταιρία να αλλάξει το λογότυπο ή πηγαίνετε Αρχική - Ρυθμίσεις - Προβολή για απόκρυψη.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Άρνηση
     Denied=Άρνηση
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Ειλικρινώς
     DeleteLine=Διαγραφή γραμμής
     ConfirmDeleteLine=Είστε σίγουρος ότι θέλετε να διαγράψετε αυτή τη γραμμή;
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=Δεν έχει επιλεγεί εγγραφή
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Σχετικά Αντικείμενα
     ClassifyBilled=Χαρακτηρισμός ως τιμολογημένο
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Ημερολόγιο
     GroupBy=Ομαδοποίηση κατά...
     ViewFlatList=Προβολή λίστας
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Ενέργειες
    -EMailTemplates=Πρότυπα email
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Έργο
     Projects=Έργα
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Άδειες
     LineNb=Line no.
     IncotermLabel=Διεθνείς Εμπορικοί Όροι
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Δευτέρα
     Tuesday=Τρίτη
    @@ -927,7 +931,7 @@ SearchIntoInterventions=Παρεμβάσεις
     SearchIntoContracts=Συμβόλαια
     SearchIntoCustomerShipments=Αποστολές Πελάτη
     SearchIntoExpenseReports=Αναφορές εξόδων
    -SearchIntoLeaves=Άδειες
    +SearchIntoLeaves=Leave
     CommentLink=Σχόλια
     NbComments=Number of comments
     CommentPage=Comments space
    @@ -935,7 +939,7 @@ CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Όλοι
     PayedBy=Πληρώθηκε από
    -PayedTo=Payed to
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Ανάθεση σε
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/el_GR/other.lang b/htdocs/langs/el_GR/other.lang
    index 26b075d8b34..9a9acb30595 100644
    --- a/htdocs/langs/el_GR/other.lang
    +++ b/htdocs/langs/el_GR/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Κωδικός ασφαλείας
     NumberingShort=N°
     Tools=Εργαλεία
     TMenuTools=Εργαλεία
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Γενέθλια
     BirthdayDate=Ημερομηνία γενεθλίων
     DateToBirth=Ημερομηνία γεννήσεως
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Μήνυμα για την επικυρωμένη σελίδα επιστροφή πληρωμής
     MessageKO=Μήνυμα για την ακύρωση σελίδα επιστροφή πληρωμής
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Προσθήκη επαφής στην παρέμβαση
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Παρέμβαση αποστέλλεται μέσω ταχυδρομείου
     Notify_ORDER_VALIDATE=Η παραγγελία πελάτη επικυρώθηκε
     Notify_ORDER_SENTBYMAIL=Για πελατών αποστέλλονται με το ταχυδρομείο
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Για Προμηθευτής σταλούν ταχυδρομικώς
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Παραγγελία του προμηθευτή
     Notify_ORDER_SUPPLIER_APPROVE=Η παραγγελία προμηθευτή εγγρίθηκε
     Notify_ORDER_SUPPLIER_REFUSE=Η παραγγελία προμηθευτή απορρίφθηκε
     Notify_PROPAL_VALIDATE=Η εμπ. πρόταση πελάτη επικυρώθηκε
    -Notify_PROPAL_CLOSE_SIGNED=Προσφορά πελατών έκλεισε έχει υπογραφεί
    -Notify_PROPAL_CLOSE_REFUSED=Προσφορά πελατών έκλεισε απορρίφθηκε
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Εμπορικές προτάσεις που αποστέλλονται ταχυδρομικώς
     Notify_WITHDRAW_TRANSMIT=Μετάδοση απόσυρση
     Notify_WITHDRAW_CREDIT=Πιστωτικές απόσυρση
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Τρίτο κόμμα δημιουργήθηκε
     Notify_COMPANY_SENTBYMAIL=Μηνύματα που αποστέλλονται από την κάρτα Πελ./Προμ.
     Notify_BILL_VALIDATE=Το τιμολόγιο πελάτη επικυρώθηκε
     Notify_BILL_UNVALIDATE=Τιμολόγιο του Πελάτη μη επικυρωμένο
    -Notify_BILL_PAYED=Τιμολογίου Πελατών payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Τιμολογίου Πελατών ακυρώσεις
     Notify_BILL_SENTBYMAIL=Τιμολογίου Πελατών σταλούν ταχυδρομικώς
     Notify_BILL_SUPPLIER_VALIDATE=Τιμολόγιο Προμηθευτή επικυρωθεί
    -Notify_BILL_SUPPLIER_PAYED=Τιμολόγιο Προμηθευτή payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Τιμολόγιο Προμηθευτή σταλούν ταχυδρομικώς
     Notify_BILL_SUPPLIER_CANCELED=Το τιμολόγιο του προμηθευτή ακυρώθηκε
     Notify_CONTRACT_VALIDATE=Επικυρωμένη σύμβαση
     Notify_FICHEINTER_VALIDATE=Επικυρωθεί Παρέμβαση
    +Notify_FICHINTER_ADD_CONTACT=Προσθήκη επαφής στην παρέμβαση
    +Notify_FICHINTER_SENTBYMAIL=Παρέμβαση αποστέλλεται μέσω ταχυδρομείου
     Notify_SHIPPING_VALIDATE=Αποστολή επικυρωθεί
     Notify_SHIPPING_SENTBYMAIL=Αποστολές αποστέλλονται με το ταχυδρομείο
     Notify_MEMBER_VALIDATE=Επικυρωθεί μέλη
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Δημιουργία έργου
     Notify_TASK_CREATE=Η εργασία δημιουργήθηκε
     Notify_TASK_MODIFY=Η εργασία τροποποιήθηκε
     Notify_TASK_DELETE=Η εργασία διαγράφηκε
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Δείτε την ρύθμιση του module %s
     NbOfAttachedFiles=Πλήθος επισυναπτώμενων αρχείων/εγγράφων
     TotalSizeOfAttachedFiles=Συνολικό μέγεθος επισυναπτώμενων αρχείων/εγγράφων
     MaxSize=Μέγιστο μέγεθος
     AttachANewFile=Επισύναψη νέου αρχείου/εγγράφου
     LinkedObject=Συνδεδεμένα αντικείμενα
    -NbOfActiveNotifications=Αριθμός κοινοποιήσεων (Αριθμός emails παραλήπτη)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Καθ %s ταυτότητα</b> είναι μια ενημερωτική ανάλογα με τρίτη χώρα μέρος. <br> Για παράδειγμα, για <b>%s</b> χώρα, είναι <b>%s</b> κώδικα.
     DolibarrDemo=Dolibarr ERP / CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=Μια νέα παρέμβαση %s έχει ανατεθεί σε εσάς
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Η %s παρέμβαση έχει επικυρωθεί.
     EMailTextInvoiceValidated=Το τιμολόγιο %s έχει επικυρωθεί.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Η %s πρόταση έχει επικυρωθεί.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Η σειρά %s έχει επικυρωθεί.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Η σειρά %s έχει εγκριθεί από %s.
     EMailTextOrderRefused=Η σειρά %s έχει απορριφθεί.
     EMailTextOrderRefusedBy=Η σειρά %s έχει απορριφθεί από %s.
     EMailTextExpeditionValidated=Η αποστολη %s  έχει επικυρωθεί.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Η εισαγωγή των δεδομένων που
     DolibarrNotification=Αυτόματη ειδοποίηση
     ResizeDesc=Εισάγετε το νέο πλάτος <b>ή το</b> νέο ύψος. Λόγος θα διατηρηθούν κατά τη διάρκεια της αλλαγής μεγέθους ...
    @@ -204,7 +212,7 @@ NewLength=Νέο βάρος
     NewHeight=Νέο ύψος
     NewSizeAfterCropping=Νέο μέγεθος μετά το ψαλίδισμα
     DefineNewAreaToPick=Ορίστε νέα περιοχή στην εικόνα για να πάρει (αριστερό κλικ στην εικόνα στη συνέχεια σύρετε μέχρι να φτάσετε στην απέναντι γωνία)
    -CurrentInformationOnImage=Το εργαλείο αυτό σχεδιάστηκε για να σας βοηθήσει να αλλάξετε το μέγεθος ή την καλλιέργεια μιας εικόνας. Πρόκειται για πληροφορίες σχετικά με τις τρέχουσες επεξεργασμένη εικόνα
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Επεξεργαστής εικόνας
     YouReceiveMailBecauseOfNotification=Αυτό το μήνυμα επειδή το email σας έχει προστεθεί στη λίστα των στόχων που πρέπει να ενημερώνεται για συγκεκριμένα γεγονότα σε %s λογισμικό της %s.
     YouReceiveMailBecauseOfNotification2=Το γεγονός είναι το ακόλουθο:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/el_GR/projects.lang b/htdocs/langs/el_GR/projects.lang
    index b75b790a269..1c73ca5d1a8 100644
    --- a/htdocs/langs/el_GR/projects.lang
    +++ b/htdocs/langs/el_GR/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Ανοιχτά έργα
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Εμφάνιση έργου
     ShowTask=Εμφάνιση Εργασίας
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Αριθμός έργων
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Χρόνος που δαπανήθηκε
     TimeSpentByYou=Χρόνος που δαπανάται από εσάς
     TimeSpentByUser=Χρόνος που δαπανάται από τον χρήστη
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Κατάλογος των εμπορικών προτάσεων που σχετίζονται με το έργο
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Κατάλογος των συμβάσεων που συνδέονται με το έργο
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Κατάλογος των παρεμβάσεων που σχετίζονται με το έργο
    -ListExpenseReportsAssociatedProject=Λίστα αναφορών των δαπανών που σχετίζονται με το έργο
    -ListDonationsAssociatedProject=Λίστα των δωρεών που σχετίζονται με το έργο
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Κατάλογος των εκδηλώσεων που σχετίζονται με το έργο
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Εργασία %s δημιουργήθηκε
     TaskModifiedInDolibarr=Εργασία %s τροποποιήθηκε
     TaskDeletedInDolibarr=Εργασία %s διαγράφηκε
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Συνεισφέρων
     SelectElement=Επιλέξτε το στοιχείο
     AddElement=Σύνδεση με το στοιχείο
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Σχέδιο φόρτου εργασίας
     PlannedWorkloadShort=Φόρτος εργασίας
     ProjectReferers=Σχετικά αντικείμενα
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Ανάθεση εργασίας σε εμένα
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Ανάθεση
     ProjectOverview=Επισκόπηση
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Μόνο ευκαιρίες
    -OpenedOpportunitiesShort=Ανοιχτές ευαιρίες
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Πρόταση
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/en_AU/admin.lang b/htdocs/langs/en_AU/admin.lang
    index 59efa529c01..fbd93559c94 100644
    --- a/htdocs/langs/en_AU/admin.lang
    +++ b/htdocs/langs/en_AU/admin.lang
    @@ -1,16 +1,6 @@
     # Dolibarr language file - Source file is en_US - admin
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     OldVATRates=Old GST rate
     NewVATRates=New GST rate
     DictionaryVAT=GST Rates or Sales Tax Rates
    -VATManagement=GST Management
    -VATIsNotUsedDesc=By default the proposed GST rate is 0 which can be used for cases like associations, individuals and small companies.
    -LocalTax1IsUsedDesc=Use a second type of tax (other than GST)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than GST)
    -LocalTax2IsUsedDesc=Use a third type of tax (other than GST)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than GST)
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
     OptionVatMode=GST due
     LinkColor=Colour of links
    diff --git a/htdocs/langs/en_AU/compta.lang b/htdocs/langs/en_AU/compta.lang
    index ff183175110..8498a092945 100644
    --- a/htdocs/langs/en_AU/compta.lang
    +++ b/htdocs/langs/en_AU/compta.lang
    @@ -9,8 +9,6 @@ CheckReceiptShort=Cheque deposit
     NewCheckDeposit=New cheque deposit
     DateChequeReceived=Cheque received date
     NbOfCheques=Nb of cheques
    -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation on actual payments made even if they are not yet accounted in Ledger.
    -SeeReportInDueDebtMode=See %sanalysis of invoices%s for a calculation based on known recorded invoices even if they are not yet accounted in Ledger.
     RulesResultDue=- It includes outstanding invoices, expenses, GST, donations whether they are paid or not. Is also includes paid salaries.<br>- It is based on the validation date of invoices and GST and on the due date for expenses. For salaries defined with Salary module, the value date of payment is used.
     RulesResultInOut=- It includes the real payments made on invoices, expenses, GST and salaries. <br>- It is based on the payment dates of the invoices, expenses, GST and salaries. The donation date for donation.
     VATReportByCustomersInInputOutputMode=Report by the customer GST collected and paid
    diff --git a/htdocs/langs/en_CA/admin.lang b/htdocs/langs/en_CA/admin.lang
    index a1d35f5ea7d..3973e5e4c22 100644
    --- a/htdocs/langs/en_CA/admin.lang
    +++ b/htdocs/langs/en_CA/admin.lang
    @@ -1,12 +1,4 @@
     # Dolibarr language file - Source file is en_US - admin
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
    -VATManagement=GST Management
    -LocalTax1IsUsedDesc=Use a second tax (PST)
    -LocalTax1IsNotUsedDesc=Do not use second tax (PST)
     LocalTax1Management=PST Management
    -LocalTax2IsNotUsedDesc=Do not use second tax (PST)
     CompanyZip=Postal code
     LDAPFieldZip=Postal code
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    diff --git a/htdocs/langs/en_GB/admin.lang b/htdocs/langs/en_GB/admin.lang
    index c2ed9bc8e13..d5046722e24 100644
    --- a/htdocs/langs/en_GB/admin.lang
    +++ b/htdocs/langs/en_GB/admin.lang
    @@ -4,10 +4,6 @@ VersionProgram=Program Version
     VersionLastInstall=Version Initially Installed
     SessionSavePath=Storage session localisation
     PurgeSessions=Purge sessions
    -NoSessionListWithThisHandler=The Saved session handler configured in your PHP does not allow listing of all running sessions.
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connections to yourself. Only user <b>%s</b> will be able to connect after that.
    -Sessions=User session
    -NoSessionFound=Your PHP does not allow listing active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     WarningOnlyPermissionOfActivatedModules=Only permissions related to activated modules are shown here. You can activate other modules on the Home->Setup->Modules page.
     RestoreLock=Restore file <b>%s</b>, with read permission only, to disable any usage of the update tool.
     ErrorModuleRequirePHPVersion=Error: This module requires PHP version %s or higher
    @@ -19,8 +15,6 @@ DisableJavascript=Disable JavaScript and Ajax functions (Recommended for a blind
     NumberOfKeyToSearch=Number of characters to trigger search: %s
     MustBeLowerThanPHPLimit=Note: Your PHP limits each files upload size to <b>%s</b> %s, whatever you enter here
     MaxSizeForUploadedFiles=Maximum size for uploaded files (0 to prevent any uploads)
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
     CurrentValueSeparatorThousand=Thousands separator
     PositionByDefault=Default position
     MenusDesc=Menu managers set the content of the two menu bars (horizontal and vertical).
    @@ -32,39 +26,23 @@ ImportMySqlDesc=To import a backup file, you must use the mysql command from the
     ImportPostgreSqlDesc=To import a backup file, you must use the pg_restore command from the command line:
     FileNameToGenerate=File name to be generated
     CommandsToDisableForeignKeysForImportWarning=This is mandatory if you want to restore your sql dumps later
    -BoxesDesc=Widgets are components showing information that you can add to personalise some pages. You can choose between either showing the widget or not by selecting the target page and clicking 'Activate'. Clicking the dustbin will disable it.
    -ModulesDesc=Dolibarr modules define which applications or features are enabled in the software. Some applications and modules require permissions you must grant to users after activating it. Click on the 'on/off' button to enable or disable a particular module or application.
     ModulesMarketPlaceDesc=You can find more modules to download from external websites on the Internet...
     ModulesMarketPlaces=Find external applications and modules
     AvailableOnlyIfJavascriptAndAjaxNotDisabled=Available only if JavaScript is enabled
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>with<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>with<br><b>$dolibarr_main_db_pass="%s";</b>
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying the document is no longer possible. Note: Using this feature disables your ability to build global merged PDFs.
    -HelpCenterDesc1=This area can access a support service on Dolibarr.
    -HelpCenterDesc2=Some parts of this service are available in <b>english only</b>.
     MeasuringUnit=Measurement unit
    -EMailsDesc=This page allows you to overwrite your PHP parameters for sending emails. In most cases on a Unix/Linux OS, your PHP setup is correct and these parameters are unnecessary.
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined in PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined in PHP on Unix like systems)
    -MAIN_MAIL_AUTOCOPY_TO=Systematically send a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all email postings (for test purposes or demos)
    -MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    -MAIN_DISABLE_ALL_SMS=Disable all SMS postings (for test purposes or demos)
    -MAIN_MAIL_SMS_FROM=Default sender telephone number for SMS posting
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +MAIN_MAIL_AUTOCOPY_TO=Copy (Cc) all sent emails to
     ModuleFamilyCrm=Customer Relations Management (CRM)
     ModuleFamilyProducts=Product Management (PM)
     ModuleFamilyHr=Human Resources Management (HR)
     ModuleFamilyTechnic=Multi-module tools
     ThisIsProcessToFollow=These are steps to process:
    -FindPackageFromWebSite=Find a package that provides the features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download a package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the compressed files into the server directory dedicated to Dolibarr: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however, enable and then setup the modules in your application. Go to the setup page for these modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined in an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, in a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines start with a "#", they are comments. To enable them, just remove the "#" character and save the file.
    -YouCanSubmitFile=For this step, you can upload the .zip file of module package here :
     GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags could be used:<br><b>{000000}</b> corresponds to a number which will be incremented on each %s. Enter as many zeros to the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask. <br><b>{000000+000}</b> same as previous but an offset corresponding to the number to the right of the + sign is applied starting on first %s. <br><b>{000000@x}</b> same as previous but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then sequence {yy}{mm} or {yyyy}{mm} is also required. <br><b>{dd}</b> day (01 to 31).<br><b>{mm}</b> month (01 to 12).<br><b>{yy}</b>, <b>{yyyy}</b> or <b>{y}</b> year over 2, 4 or 1 numbers. <br>
     GenericMaskCodes2=<b>{cccc}</b> the client code is n characters<br><b>{cccc000}</b> the client code of n characters is followed by a counter dedicated per customer. This counter dedicated per customer is reset at same time as the global counter.<br><b>{tttt}</b> The code of third party type of n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.<br>
     GenericMaskCodes4a=<u>Example of the 99th %s of the third party TheCompany, with date 2007-01-31:</u><br>
    @@ -72,17 +50,11 @@ GenericMaskCodes4b=<u>Example of third party created on 2007-03-01:</u><br>
     GenericMaskCodes4c=<u>Example of product created on 2007-03-01:</u><br>
     GenericNumRefModelDesc=Returns a customisable number according to a defined mask.
     UMaskExplanation=This parameter allows you to define permissions set by default on files created by Dolibarr on server (during upload for example).<br>It must be the octal value (for example, 0666 means read and write for everyone).<br>This parameter is useless on a Windows server.
    -AddCRIfTooLong=There is no automatic text wrapping. If lines of text extend off the page in your documents, you must insert carriage returns where appropriate to break lines in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will definitely delete  all your data files with no way to restore them (ECM files, attached files...).
     ListOfDirectories=List of OpenDocument template directories
     ListOfDirectoriesForModelGenODT=List of directories containing template files in OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between each directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS template files found in those directories
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To learn how to create your .odt document templates, before storing them in those directories, read wiki documentation:
     DescWeather=The following pictures will be shown on the dashboard when the number of late actions reaches the following values:
     ThisForceAlsoTheme=This menu manager will use its own theme irrespective of user choice. This menu manager is also specialised for some but not all, smartphones. Use another menu manager if you experience problems with yours.
    -ConnectionTimeout=Connection timeout
    -Module330Desc=Bookmark management
     Module50200Name=PayPal
     Permission300=Read barcodes
     Permission301=Create/modify barcodes
    @@ -90,6 +62,4 @@ Permission302=Delete barcodes
     DictionaryAccountancyJournal=Finance journals
     CompanyZip=Postcode
     LDAPFieldZip=Postcode
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
     GenbarcodeLocation=Barcode generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".<br>For example: /usr/local/bin/genbarcode
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to automatically generate codes, you must first set a rule to define the barcode number.
    diff --git a/htdocs/langs/en_GB/compta.lang b/htdocs/langs/en_GB/compta.lang
    index d8dff1d8689..48f980f4449 100644
    --- a/htdocs/langs/en_GB/compta.lang
    +++ b/htdocs/langs/en_GB/compta.lang
    @@ -6,5 +6,3 @@ NewCheckDepositOn=Create receipt for deposit to account: %s
     NoWaitingChecks=No cheques awaiting deposit.
     DateChequeReceived=Cheque reception date
     NbOfCheques=Number of cheques
    -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation on actual payments made even if they are not yet accounted in Ledger.
    -SeeReportInDueDebtMode=See %sanalysis of invoices%s for a calculation based on known recorded invoices even if they are not yet accounted in Ledger.
    diff --git a/htdocs/langs/en_GB/main.lang b/htdocs/langs/en_GB/main.lang
    index f6f528c8777..988f51b6d8f 100644
    --- a/htdocs/langs/en_GB/main.lang
    +++ b/htdocs/langs/en_GB/main.lang
    @@ -19,15 +19,10 @@ FormatDateHourShort=%d/%m/%Y %H:%M
     FormatDateHourSecShort=%d/%m/%Y %H:%M:%S
     FormatDateHourTextShort=%d %b %Y %H:%M
     FormatDateHourText=%d %B %Y %H:%M
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and modify the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorNoVATRateDefinedForSellerCountry=Error, no VAT rates defined for country '%s'.
     NotAuthorized=You are not authorised to do that.
     BackgroundColorByDefault=Default background colour
     FileWasNotUploaded=A file is selected for attachment but has not yet been uploaded. Click on "Attach file" for this.
    -NbOfEntries=Number of entries
     PrecisionUnitIsLimitedToXDecimals=Dolibarr was setup to limit precision of unit prices to <b>%s</b> decimal places.
     Resiliate=Deactivate
     SaveAs=Save as
    @@ -40,13 +35,9 @@ TTC=Inc. VAT
     VAT=VAT
     VATRate=VAT Rate
     Favorite=Favourite
    -ActionUncomplete=Incomplete
     GeneratedOn=Built on %s
    -OtherInformations=Other information
     Canceled=Cancelled
     Color=Colour
    -Informations=Information
    -AccordingToGeoIPDatabase=(according to GeoIP lookup)
     NoPhotoYet=No picture available yet
     WebSite=Website
     SearchIntoSupplierProposals=Vendor quotes
    diff --git a/htdocs/langs/en_GB/users.lang b/htdocs/langs/en_GB/users.lang
    index c38e02240f5..b54b55fab56 100644
    --- a/htdocs/langs/en_GB/users.lang
    +++ b/htdocs/langs/en_GB/users.lang
    @@ -12,7 +12,5 @@ PermissionInheritedFromAGroup=Permission granted through inherited rights from o
     UserWillBeInternalUser=Created user will be an internal user (because they are not linked to a particular third party)
     UserWillBeExternalUser=Created user will be an external user (because they are linked to a particular third party)
     NewUserPassword=Password changed for %s
    -NbOfUsers=No. of users
    -NbOfPermissions=No. of permissions
     ExpectedWorkedHours=Expected hours worked per week
     ColorUser=Colour for the user
    diff --git a/htdocs/langs/en_IN/admin.lang b/htdocs/langs/en_IN/admin.lang
    index 1e94b9bd629..623af356da5 100644
    --- a/htdocs/langs/en_IN/admin.lang
    +++ b/htdocs/langs/en_IN/admin.lang
    @@ -1,7 +1,4 @@
     # Dolibarr language file - Source file is en_US - admin
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     Module20Name=Quotations
     Module20Desc=Management of quotations
     Permission21=Read quotations
    @@ -16,6 +13,4 @@ ProposalsNumberingModules=Quotation numbering models
     ProposalsPDFModules=Quotation documents models
     FreeLegalTextOnProposal=Free text on quotations
     WatermarkOnDraftProposal=Watermark on draft quotations (none if empty)
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (quotations, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
     MailToSendProposal=Customer quotations
    diff --git a/htdocs/langs/en_IN/compta.lang b/htdocs/langs/en_IN/compta.lang
    index 8ef2e8a50d2..6e6975592c2 100644
    --- a/htdocs/langs/en_IN/compta.lang
    +++ b/htdocs/langs/en_IN/compta.lang
    @@ -1,4 +1,2 @@
     # Dolibarr language file - Source file is en_US - compta
    -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation on actual payments made even if they are not yet accounted in Ledger.
    -SeeReportInDueDebtMode=See %sanalysis of invoices%s for a calculation based on known recorded invoices even if they are not yet accounted in Ledger.
     ProposalStats=Statistics on quotations
    diff --git a/htdocs/langs/en_US/accountancy.lang b/htdocs/langs/en_US/accountancy.lang
    index 5ff295e38db..e2f6083e6a6 100644
    --- a/htdocs/langs/en_US/accountancy.lang
    +++ b/htdocs/langs/en_US/accountancy.lang
    @@ -36,8 +36,12 @@ AlreadyInGeneralLedger=Already journalized in ledgers
     NotYetInGeneralLedger=Not yet journalized in ledgers
     GroupIsEmptyCheckSetup=Group is empty, check setup of the personalized accounting group
     DetailByAccount=Show detail by account
    -AccountWithNonZeroValues=Accounts with non zero values
    +AccountWithNonZeroValues=Accounts with non-zero values
     ListOfAccounts=List of accounts
    +CountriesInEEC=Countries in EEC
    +CountriesNotInEEC=Countries not in EEC
    +CountriesInEECExceptMe=Countries in EEC except %s
    +CountriesExceptMe=All countries except %s
     
     MainAccountForCustomersNotDefined=Main accounting account for customers not defined in setup
     MainAccountForSuppliersNotDefined=Main accounting account for vendors not defined in setup
    @@ -54,19 +58,19 @@ AccountancyAreaDescJournalSetup=STEP %s: Create or check content of your journal
     AccountancyAreaDescChartModel=STEP %s: Create a model of chart of account from menu %s
     AccountancyAreaDescChart=STEP %s: Create or check content of your chart of account from menu %s
     
    -AccountancyAreaDescVat=STEP %s: Define accounting accounts for each VAT Rates. For this, use the menu entry %s.    
    +AccountancyAreaDescVat=STEP %s: Define accounting accounts for each VAT Rates. For this, use the menu entry %s.
     AccountancyAreaDescDefault=STEP %s: Define default accounting accounts. For this, use the menu entry %s.
     AccountancyAreaDescExpenseReport=STEP %s: Define default accounting accounts for each type of expense report. For this, use the menu entry %s.
    -AccountancyAreaDescSal=STEP %s: Define default accounting accounts for payment of salaries. For this, use the menu entry %s.    
    -AccountancyAreaDescContrib=STEP %s: Define default accounting accounts for special expences (miscellaneous taxes). For this, use the menu entry %s.    
    +AccountancyAreaDescSal=STEP %s: Define default accounting accounts for payment of salaries. For this, use the menu entry %s.
    +AccountancyAreaDescContrib=STEP %s: Define default accounting accounts for special expenses (miscellaneous taxes). For this, use the menu entry %s.
     AccountancyAreaDescDonation=STEP %s: Define default accounting accounts for donation. For this, use the menu entry %s.
     AccountancyAreaDescMisc=STEP %s: Define mandatory default account and default accounting accounts for miscellaneous transactions. For this, use the menu entry %s.
    -AccountancyAreaDescLoan=STEP %s: Define default accounting accounts for loans. For this, use the menu entry %s. 
    +AccountancyAreaDescLoan=STEP %s: Define default accounting accounts for loans. For this, use the menu entry %s.
     AccountancyAreaDescBank=STEP %s: Define accounting accounts and journal code for each bank and financial accounts. For this, use the menu entry %s.
     AccountancyAreaDescProd=STEP %s: Define accounting accounts on your products/services. For this, use the menu entry %s.
     
     AccountancyAreaDescBind=STEP %s: Check the binding between existing %s lines and accounting account is done, so application will be able to journalize transactions in Ledger in one click. Complete missing bindings. For this, use the menu entry %s.
    -AccountancyAreaDescWriteRecords=STEP %s: Write transactions into the Ledger. For this, go into menu <strong>%s</strong>, and click into button <strong>%s</strong>. 
    +AccountancyAreaDescWriteRecords=STEP %s: Write transactions into the Ledger. For this, go into menu <strong>%s</strong>, and click into button <strong>%s</strong>.
     AccountancyAreaDescAnalyze=STEP %s: Add or edit existing transactions and generate reports and exports.
     
     AccountancyAreaDescClosePeriod=STEP %s: Close period so we can't make modification in a future.
    @@ -156,12 +160,13 @@ Docref=Reference
     LabelAccount=Label account
     LabelOperation=Label operation
     Sens=Sens
    +LetteringCode=Lettering code
     Codejournal=Journal
     NumPiece=Piece number
     TransactionNumShort=Num. transaction
     AccountingCategory=Personalized groups
     GroupByAccountAccounting=Group by accounting account
    -AccountingAccountGroupsDesc=You can define here some groups of accounting account. They will be used for personalized accounting reports.  
    +AccountingAccountGroupsDesc=You can define here some groups of accounting account. They will be used for personalized accounting reports.
     ByAccounts=By accounts
     ByPredefinedAccountGroups=By predefined groups
     ByPersonalizedAccountGroups=By personalized groups
    @@ -187,7 +192,7 @@ NewAccountingMvt=New transaction
     NumMvts=Numero of transaction
     ListeMvts=List of movements
     ErrorDebitCredit=Debit and Credit cannot have a value at the same time
    -AddCompteFromBK=Add accounting accounts to the group 
    +AddCompteFromBK=Add accounting accounts to the group
     ReportThirdParty=List third party account
     DescThirdPartyReport=Consult here the list of the third party customers and vendors and their accounting accounts
     ListAccounts=List of the accounting accounts
    @@ -198,13 +203,13 @@ PaymentsNotLinkedToProduct=Payment not linked to any product / service
     
     Pcgtype=Group of account
     Pcgsubtype=Subgroup of account
    -PcgtypeDesc=Group and subgroup of account are used as predefined 'filter' and 'grouping' criterias for some accounting reports. For example, 'INCOME' or 'EXPENSE' are used as groups for accounting accounts of products to build the expense/income report.
    +PcgtypeDesc=Group and subgroup of account are used as predefined 'filter' and 'grouping' criteria for some accounting reports. For example, 'INCOME' or 'EXPENSE' are used as groups for accounting accounts of products to build the expense/income report.
     
     TotalVente=Total turnover before tax
     TotalMarge=Total sales margin
     
     DescVentilCustomer=Consult here the list of customer invoice lines bound (or not) to a product accounting account
    -DescVentilMore=In most cases, if you use predefined products or services and you set the account number on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button <strong>"%s"</strong>. If account was not set on product/service cards or if you still has some lines not bound to an account, you will have to make a manual binding from the menu "<strong>%s</strong>".  
    +DescVentilMore=In most cases, if you use predefined products or services and you set the account number on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button <strong>"%s"</strong>. If account was not set on product/service cards or if you still have some lines not bound to an account, you will have to make a manual binding from the menu "<strong>%s</strong>".
     DescVentilDoneCustomer=Consult here the list of the lines of invoices customers and their product accounting account
     DescVentilTodoCustomer=Bind invoice lines not already bound with a product accounting account
     ChangeAccount=Change the product/service accounting account for selected lines with the following accounting account:
    @@ -213,7 +218,7 @@ DescVentilSupplier=Consult here the list of vendor invoice lines bound or not ye
     DescVentilDoneSupplier=Consult here the list of the lines of invoices vendors and their accounting account
     DescVentilTodoExpenseReport=Bind expense report lines not already bound with a fee accounting account
     DescVentilExpenseReport=Consult here the list of expense report lines bound (or not) to a fee accounting account
    -DescVentilExpenseReportMore=If you setup accounting account on type of expense report lines, the application will be able to make all the binding between your expense report lines and the accounting account of your chart of accounts, just in one click with the button <strong>"%s"</strong>. If account was not set on fees dictionary or if you still has some lines not bound to any account, you will have to make a manual binding from the menu "<strong>%s</strong>".  
    +DescVentilExpenseReportMore=If you setup accounting account on type of expense report lines, the application will be able to make all the binding between your expense report lines and the accounting account of your chart of accounts, just in one click with the button <strong>"%s"</strong>. If account was not set on fees dictionary or if you still have some lines not bound to any account, you will have to make a manual binding from the menu "<strong>%s</strong>".
     DescVentilDoneExpenseReport=Consult here the list of the lines of expenses reports and their fees accounting account
     
     ValidateHistory=Bind Automatically
    @@ -221,6 +226,7 @@ AutomaticBindingDone=Automatic binding done
     
     ErrorAccountancyCodeIsAlreadyUse=Error, you cannot delete this accounting account because it is used
     MvtNotCorrectlyBalanced=Movement not correctly balanced. Debit = %s | Credit = %s
    +Balancing=Balancing
     FicheVentilation=Binding card
     GeneralLedgerIsWritten=Transactions are written in the Ledger
     GeneralLedgerSomeRecordWasNotRecorded=Some of the transactions could not be journalized. If there is no other error message, this is probably because they were already journalized.
    @@ -232,7 +238,7 @@ NotYetAccounted=Not yet accounted in ledger
     
     ## Admin
     ApplyMassCategories=Apply mass categories
    -AddAccountFromBookKeepingWithNoCategories=Available acccount not yet in a personalized group
    +AddAccountFromBookKeepingWithNoCategories=Available account not yet in a personalized group
     CategoryDeleted=Category for the accounting account has been removed
     AccountingJournals=Accounting journals
     AccountingJournal=Accounting journal
    @@ -262,7 +268,8 @@ Modelcsv_quadratus=Export towards Quadratus QuadraCompta
     Modelcsv_ebp=Export towards EBP
     Modelcsv_cogilog=Export towards Cogilog
     Modelcsv_agiris=Export towards Agiris
    -Modelcsv_configurable=Export Configurable
    +Modelcsv_configurable=Export CSV Configurable
    +Modelcsv_FEC=Export FEC (Art. L47 A) (Test)
     ChartofaccountsId=Chart of accounts Id
     
     ## Tools - Init accounting account on product / service
    @@ -292,7 +299,7 @@ ErrorNoAccountingCategoryForThisCountry=No accounting account group available fo
     ErrorInvoiceContainsLinesNotYetBounded=You try to journalize some lines of the invoice <strong>%s</strong>, but some other lines are not yet bounded to accounting account. Journalization of all invoice lines for this invoice are refused.
     ErrorInvoiceContainsLinesNotYetBoundedShort=Some lines on invoice are not bound to accounting account.
     ExportNotSupported=The export format setuped is not supported into this page
    -BookeppingLineAlreayExists=Lines already existing into bookeeping
    +BookeppingLineAlreayExists=Lines already existing into bookkeeping
     NoJournalDefined=No journal defined
     Binded=Lines bound
     ToBind=Lines to bind
    @@ -301,6 +308,6 @@ UseMenuToSetBindindManualy=Lines not yet bound, use menu <a href="%s">%s</a> to
     ## Import
     ImportAccountingEntries=Accounting entries
     
    -WarningReportNotReliable=Warning, this report is not based on the Ledger, so does not contains transaction modified manualy in the Ledger. If your journalization is up to date, the bookkeeping view is more accurate.
    +WarningReportNotReliable=Warning, this report is not based on the Ledger, so does not contains transaction modified manually in the Ledger. If your journalization is up to date, the bookkeeping view is more accurate.
     ExpenseReportJournal=Expense Report Journal
     InventoryJournal=Inventory Journal
    diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
    index cbe085f3149..93fd206ef94 100644
    --- a/htdocs/langs/en_US/admin.lang
    +++ b/htdocs/langs/en_US/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=Unknown
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -23,21 +23,21 @@ FilesUpdated=Updated Files
     FilesModified=Modified Files
     FilesAdded=Added Files
     FileCheckDolibarr=Check integrity of application files
    -AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when application is installed from an official package 
    +AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when application is installed from an official package
     XmlNotFound=Xml Integrity File of application not found
     SessionId=Session ID
     SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that. 
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered). 
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -96,9 +96,9 @@ NoMaxSizeByPHPLimit=Note: No limit is set in your PHP configuration
     MaxSizeForUploadedFiles=Maximum size for uploaded files (0 to disallow any upload)
     UseCaptchaCode=Use graphical code (CAPTCHA) on login page
     AntiVirusCommand= Full path to antivirus command
    -AntiVirusCommandExample= Example for ClamWin: c:\Progra~1\ClamWin\bin\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    +AntiVirusCommandExample= Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
     AntiVirusParam= More parameters on command line
    -AntiVirusParamExample= Example for ClamWin: --database="C:\Program Files (x86)\ClamWin\lib"
    +AntiVirusParamExample= Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
     ComptaSetup=Accounting module setup
     UserSetup=User management setup
     MultiCurrencySetup=Multi-currency setup
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -184,22 +184,22 @@ AddDropTable=Add DROP TABLE command
     ExportStructure=Structure
     NameColumn=Name columns
     ExtendedInsert=Extended INSERT
    -NoLockBeforeInsert=No lock commands around INSERT 
    +NoLockBeforeInsert=No lock commands around INSERT
     DelayedInsert=Delayed insert
     EncodeBinariesInHexa=Encode binary data in hexadecimal
     IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -208,11 +208,11 @@ CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s
     SeeInMarkerPlace=See in Market place
     Updated=Updated
     Nouveauté=Novelty
    -AchatTelechargement=Buy / Download 
    +AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -333,7 +337,7 @@ GenericMaskCodes4a=<u>Example on the 99th %s of the third party TheCompany, with
     GenericMaskCodes4b=<u>Example on third party created on 2007-03-01:</u><br>
     GenericMaskCodes4c=<u>Example on product created on 2007-03-01:</u><br>
     GenericMaskCodes5=<b>ABC{yy}{mm}-{000000}</b> will give <b>ABC0701-000099</b><br><b>{0000+100@1}-ZZZ/{dd}/XXX</b> will give <b>0199-ZZZ/31/XXX</b><br><b>IN{yy}{mm}-{0000}-{t}</b> will give <b>IN0701-0099-A</b> if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI'
    -GenericNumRefModelDesc=Returns a customizable number according to a defined mask. 
    +GenericNumRefModelDesc=Returns a customizable number according to a defined mask.
     ServerAvailableOnIPOrPort=Server is available at address <b>%s</b> on port <b>%s</b>
     ServerNotAvailableOnIPOrPort=Server is not available at address <b>%s</b> on port <b>%s</b>
     DoTestServerAvailability=Test server connectivity
    @@ -347,37 +351,37 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...). 
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
    -ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>. 
    +ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
     NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
    -FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation: 
    +ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
    +FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
     FirstnameNamePosition=Position of Name/Lastname
     DescWeather=The following pictures will be shown on dashboard when number of late actions reach the following values:
     KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webservices)
     TestSubmitForm=Input test form
    -ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours. 
    +ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,14 +436,14 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
    @@ -450,22 +454,22 @@ EnableAndSetupModuleCron=If you want to have this recurring invoice generated au
     ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
     ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
    -ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.  
    -Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.  
    +ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
    +Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    -WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior. 
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
    +WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
     FreeLegalTextOnExpenseReports=Free legal text on expense reports
    @@ -476,18 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
     DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
     DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -513,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -532,43 +536,43 @@ Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
     Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -578,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -592,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment) 
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -611,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -653,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -688,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -696,25 +704,25 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
     Permission164=Disable a service/subscription of a contract
     Permission165=Delete contracts/subscriptions
     Permission167=Export contracts
    -Permission171=Read trips and expenses (yours and your subordinates) 
    +Permission171=Read trips and expenses (yours and your subordinates)
     Permission172=Create/modify trips and expenses
     Permission173=Delete trips and expenses
    -Permission174=Read all trips and expenses 
    +Permission174=Read all trips and expenses
     Permission178=Export trips and expenses
     Permission180=Read suppliers
     Permission181=Read supplier orders
    @@ -727,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -752,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -767,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -806,7 +814,7 @@ Permission538=Export services
     Permission701=Read donations
     Permission702=Create/modify donations
     Permission703=Delete donations
    -Permission771=Read expense reports (yours and your subordinates) 
    +Permission771=Read expense reports (yours and your subordinates)
     Permission772=Create/modify expense reports
     Permission773=Delete expense reports
     Permission774=Read all expense reports (even for user not subordinates)
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,10 +916,11 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
    @@ -919,35 +928,35 @@ SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
     BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -957,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -LabelOrTranslationKey=Label or translation key 
    +LabelOrTranslationKey=Label or translation key
    +ValueOfConstantKey=Value of constant
     NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
    @@ -996,7 +1006,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1015,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,30 +1031,30 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
     SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
    -Audit=Audit
    +Audit=Security events
     InfoDolibarr=About Dolibarr
     InfoBrowser=About Browser
     InfoOS=About OS
    @@ -1056,20 +1066,20 @@ BrowserName=Browser name
     BrowserOS=Browser OS
     ListOfSecurityEvents=List of Dolibarr security events
     SecurityEventsPurged=Security events purged
    -LogEventDesc=You can enable here the logging for Dolibarr security events. Administrators can then see its content via menu <b>System tools - Audit</b>. Warning, this feature can consume a large amount of data in database.
    +LogEventDesc=You can enable here the logging for security events. Administrators can then see its content via menu <b>%s - %s</b>. Warning, this feature can consume a large amount of data in database.
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here. 
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1089,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1087,52 +1097,52 @@ MAIN_ROUNDING_RULE_TOT=Step of rounding range (for countries where rounding is d
     UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
    -NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "Setup - Security - Events" page.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
     PreviousDumpFiles=Generated database backup files
    -WeekStartOnDay=First day of week 
    +WeekStartOnDay=First day of week
     RunningUpdateProcessMayBeRequired=Running the upgrade process seems to be required (Programs version %s differs from database version %s)
     YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from command line after login to a shell with user <b>%s</b> or you must add -W option at end of command line to provide <b>%s</b> password.
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it. 
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1156,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
     AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    -AskForPreferredShippingMethod=Ask for preferred sending method for Third Parties.
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,8 +1206,8 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Options for automatic generation of customer/supplier codes
    -AccountCodeManager=Options for automatic generation of customer/supplier accounting codes
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
    @@ -1211,7 +1222,7 @@ MustBeMandatory=Mandatory to create third parties (if vat number or type of comp
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1230,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1287,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1356,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1373,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1422,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
    -MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server. 
    +MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad). 
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    -TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers 
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record. 
    -DefaultCreateForm=Default values (on forms to create)
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
    +TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the language of the third party
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1458,7 +1472,7 @@ SyslogFilename=File name and path
     YouCanUseDOL_DATA_ROOT=You can use DOL_DATA_ROOT/dolibarr.log for a log file in Dolibarr "documents" directory. You can set a different path to store this file.
     ErrorUnknownSyslogConstant=Constant %s is not a known Syslog constant
     OnlyWindowsLOG_USER=Windows only supports LOG_USER
    -CompressSyslogs=Compression and backup of debug log files (generated by module Log for debug) 
    +CompressSyslogs=Compression and backup of debug log files (generated by module Log for debug)
     SyslogFileNumberOfSaves=Log backups
     ConfigureCleaningCronjobToSetFrequencyOfSaves=Configure cleaning scheduled job to set log backup frequency
     ##### Donations #####
    @@ -1479,7 +1493,7 @@ BarcodeDescC39=Barcode of type C39
     BarcodeDescC128=Barcode of type C128
     BarcodeDescDATAMATRIX=Barcode of type Datamatrix
     BarcodeDescQRCODE=Barcode of type QR code
    -GenbarcodeLocation=Bar code generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".<br>For example: /usr/local/bin/genbarcode 
    +GenbarcodeLocation=Bar code generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".<br>For example: /usr/local/bin/genbarcode
     BarcodeInternalEngine=Internal engine
     BarCodeNumberManager=Manager to auto define barcode numbers
     ##### Prelevements #####
    @@ -1503,7 +1517,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1529,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1562,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1556,14 +1570,14 @@ ConfirmDeleteMenu=Are you sure you want to delete menu entry <b>%s</b>?
     FailedToInitializeMenu=Failed to initialize menu
     ##### Tax #####
     TaxSetup=Taxes, social or fiscal taxes and dividends module setup
    -OptionVatMode=VAT due 
    +OptionVatMode=VAT due
     OptionVATDefault=Standard basis
     OptionVATDebitOption=Accrual basis
     OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on payments for services
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option: 
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1575,41 +1589,41 @@ InvoiceDateUsed=Invoice date used
     YourCompanyDoesNotUseVAT=Your company has been defined to not use VAT (Home - Setup - Company/Organization), so there is no VAT options to setup.
     AccountancyCode=Accounting Code
     AccountancyCodeSell=Sale account. code
    -AccountancyCodeBuy=Purchase account. code 
    +AccountancyCodeBuy=Purchase account. code
     ##### Agenda #####
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1623,7 +1637,7 @@ ApiProductionMode=Enable production mode (this will activate use of a cache for
     ApiExporerIs=You can explore and test the APIs at URL
     OnlyActiveElementsAreExposed=Only elements from enabled modules are exposed
     ApiKey=Key for API
    -WarningAPIExplorerDisabled=The API explorer has been disabled. API explorer is not required to provide API services. It is a tool for developer to find/test REST APIs. If you need this tool, go into setup of module API REST to activate it. 
    +WarningAPIExplorerDisabled=The API explorer has been disabled. API explorer is not required to provide API services. It is a tool for developer to find/test REST APIs. If you need this tool, go into setup of module API REST to activate it.
     ##### Bank #####
     BankSetupModule=Bank module setup
     FreeLegalTextOnChequeReceipts=Free text on cheque receipts
    @@ -1675,7 +1689,7 @@ NoAmbiCaracAutoGeneration=Do not use ambiguous characters ("1","l","i","|","0","
     SalariesSetup=Setup of module salaries
     SortOrder=Sort order
     Format=Format
    -TypePaymentDesc=0:Customer payment type, 1:Vendor payment type, 2:Both customers and vendors payment type 
    +TypePaymentDesc=0:Customer payment type, 1:Vendor payment type, 2:Both customers and vendors payment type
     IncludePath=Include path (defined into variable %s)
     ExpenseReportsSetup=Setup of module Expense Reports
     TemplatePDFExpenseReports=Document templates to generate expense report document
    @@ -1687,16 +1701,17 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    -SomethingMakeInstallFromWebNotPossible2=For this reason, process to upgrade described here is only manual steps a privileged user can do. 
    +SomethingMakeInstallFromWebNotPossible2=For this reason, process to upgrade described here is only manual steps a privileged user can do.
     InstallModuleFromWebHasBeenDisabledByFile=Install of external module from application has been disabled by your administrator. You must ask him to remove the file <strong>%s</strong> to allow this feature.
    -ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong> 
    +ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1727,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1762,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,35 +1786,68 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call) 
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016). 
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated. 
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
     NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=Privacy Policies or GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
     YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails qualified, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record email event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
    +LoadThirdPartyFromName=Load thirdparty from name (load only)
    +LoadThirdPartyFromNameOrCreate=Load thirdparty from name (create if not found)
    +WithDolTrackingID=Dolibarr Tracking ID found
    +WithoutDolTrackingID=Dolibarr Tracking ID not found
     ##### Resource ####
    -ResourceSetup=Configuration du module Resource 
    +ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang
    index 4a7ab99ca77..cd39a43abe8 100644
    --- a/htdocs/langs/en_US/agenda.lang
    +++ b/htdocs/langs/en_US/agenda.lang
    @@ -1,12 +1,12 @@
    -# Dolibarr language file - Source file is en_US - agenda 
    +# Dolibarr language file - Source file is en_US - agenda
     IdAgenda=ID event
     Actions=Events
     Agenda=Agenda
     TMenuAgenda=Agenda
     Agendas=Agendas
     LocalAgenda=Internal calendar
    -ActionsOwnedBy=Event owned by 
    -ActionsOwnedByShort=Owner 
    +ActionsOwnedBy=Event owned by
    +ActionsOwnedByShort=Owner
     AffectedTo=Assigned to
     Event=Event
     Events=Events
    @@ -31,14 +31,15 @@ ViewWeek=Week view
     ViewPerUser=Per user view
     ViewPerType=Per type view
     AutoActions= Automatic filling
    -AgendaAutoActionDesc= Define here events for which you want Dolibarr to create automatically an event in agenda. If nothing is checked, only manual actions will be included in logged and visible into agenda. Automatic tracking of business actions done on objects (validation, status change) will not be saved. 
    -AgendaSetupOtherDesc= This page provides options to allow export of your Dolibarr events into an external calendar (thunderbird, google calendar, ...)
    +AgendaAutoActionDesc= Here you can define events which you want Dolibarr to create automatically  in Agenda. If nothing is checked, only manual actions will be included in logs and displayed in Agenda. Automatic tracking of business actions done on objects (validation, status change) will not be saved.
    +AgendaSetupOtherDesc= This page provides options to allow exports of your Dolibarr events into an external calendar (thunderbird, google calendar, ...)
     AgendaExtSitesDesc=This page allows to declare external sources of calendars to see their events into Dolibarr agenda.
     ActionsEvents=Events for which Dolibarr will create an action in agenda automatically
     EventRemindersByEmailNotEnabled=Event reminders by email was not enabled into %s module setup.
     ##### Agenda event labels #####
     NewCompanyToDolibarr=Third party %s created
     ContractValidatedInDolibarr=Contract %s validated
    +CONTRACT_DELETEInDolibarr=Contract %s deleted
     PropalClosedSignedInDolibarr=Proposal %s signed
     PropalClosedRefusedInDolibarr=Proposal %s refused
     PropalValidatedInDolibarr=Proposal %s validated
    @@ -110,7 +111,7 @@ DefaultWorkingHours=Default working hours in day (Example: 9-18)
     # External Sites ical
     ExportCal=Export calendar
     ExtSites=Import external calendars
    -ExtSitesEnableThisTool=Show external calendars (defined into global setup) into agenda. Does not affect external calendars defined by users.
    +ExtSitesEnableThisTool=Show external calendars (defined in global setup) in Agenda. Does not affect external calendars defined by users.
     ExtSitesNbOfAgenda=Number of calendars
     AgendaExtNb=Calendar no. %s
     ExtSiteUrlAgenda=URL to access .ical file
    diff --git a/htdocs/langs/en_US/assets.lang b/htdocs/langs/en_US/assets.lang
    index 0f955fe19ce..b780fb6fcba 100644
    --- a/htdocs/langs/en_US/assets.lang
    +++ b/htdocs/langs/en_US/assets.lang
    @@ -22,7 +22,14 @@ AccountancyCodeAsset = Accounting code (asset)
     AccountancyCodeDepreciationAsset = Accounting code (depreciation asset account)
     AccountancyCodeDepreciationExpense = Accounting code (depreciation expense account)
     NewAssetType=New asset type
    +AssetsTypeSetup=Assets type setup
    +AssetTypeModified=Asset type modified
    +AssetType=Asset type
     AssetsLines=Assets
    +DeleteType=Delete
    +DeleteAnAssetType=Delete an asset type
    +ConfirmDeleteAssetType=Are you sure you want to delete this asset type?
    +ShowTypeCard=Show type '%s'
     
     # Module label 'ModuleAssetsName'
     ModuleAssetsName = Assets
    diff --git a/htdocs/langs/en_US/banks.lang b/htdocs/langs/en_US/banks.lang
    index c62dc0498e0..7650613341e 100644
    --- a/htdocs/langs/en_US/banks.lang
    +++ b/htdocs/langs/en_US/banks.lang
    @@ -7,7 +7,7 @@ BankName=Bank name
     FinancialAccount=Account
     BankAccount=Bank account
     BankAccounts=Bank accounts
    -BankAccountsAndGateways=Bank accounts | Gateways
    +BankAccountsAndGateways=Bank | Gateways
     ShowAccount=Show Account
     AccountRef=Financial account ref
     AccountLabel=Financial account label
    @@ -46,7 +46,7 @@ BankAccountDomiciliation=Account address
     BankAccountCountry=Account country
     BankAccountOwner=Account owner name
     BankAccountOwnerAddress=Account owner address
    -RIBControlError=Integrity check of values fails. This means information for this account number are not complete or wrong (check country, numbers and IBAN).
    +RIBControlError=Integrity check of values fails. This means the information for this account number is incomplete or incorrect (check country, numbers and IBAN).
     CreateAccount=Create account
     NewBankAccount=New account
     NewFinancialAccount=New financial account
    @@ -76,6 +76,7 @@ TransactionsToConciliate=Entries to reconcile
     Conciliable=Can be reconciled
     Conciliate=Reconcile
     Conciliation=Reconciliation
    +SaveStatementOnly=Save statement only
     ReconciliationLate=Reconciliation late
     IncludeClosedAccount=Include closed accounts
     OnlyOpenedAccount=Only open accounts
    @@ -104,7 +105,7 @@ SocialContributionPayment=Social/fiscal tax payment
     BankTransfer=Bank transfer
     BankTransfers=Bank transfers
     MenuBankInternalTransfer=Internal transfer
    -TransferDesc=Transfer from one account to another one, Dolibarr will write two record (a debit in source account and a credit in target account. The same amount (except sign), label and date will be used for this transaction)
    +TransferDesc=Transfer from one account to another one, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction)
     TransferFrom=From
     TransferTo=To
     TransferFromToDone=A transfer from <b>%s</b> to <b>%s</b> of <b>%s</b> %s has been recorded.
    @@ -135,8 +136,8 @@ BankTransactionLine=Bank entry
     AllAccounts=All bank and cash accounts
     BackToAccount=Back to account
     ShowAllAccounts=Show for all accounts
    -FutureTransaction=Transaction in futur. No way to conciliate.
    -SelectChequeTransactionAndGenerate=Select/filter checks to include into the check deposit receipt and click on "Create".
    +FutureTransaction=Transaction in future. No way to reconcile.
    +SelectChequeTransactionAndGenerate=Select/filter checks to include in the check deposit receipt and click on "Create".
     InputReceiptNumber=Choose the bank statement related with the conciliation. Use a sortable numeric value: YYYYMM or YYYYMMDD
     EventualyAddCategory=Eventually, specify a category in which to classify the records
     ToConciliate=To reconcile?
    @@ -153,7 +154,7 @@ RejectCheckDate=Date the check was returned
     CheckRejected=Check returned
     CheckRejectedAndInvoicesReopened=Check returned and invoices reopened
     BankAccountModelModule=Document templates for bank accounts
    -DocumentModelSepaMandate=Template of SEPA mandate. Usefull for european countries in EEC only.
    +DocumentModelSepaMandate=Template of SEPA mandate. Useful for European countries in EEC only.
     DocumentModelBan=Template to print a page with BAN information.
     NewVariousPayment=New miscellaneous payments
     VariousPayment=Miscellaneous payments
    @@ -162,4 +163,4 @@ ShowVariousPayment=Show miscellaneous payments
     AddVariousPayment=Add miscellaneous payments
     SEPAMandate=SEPA mandate
     YourSEPAMandate=Your SEPA mandate
    -FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Thanks to return it signed (scan of the signed document) or sent it by mail to 
    +FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Return it signed (scan of the signed document) or send it by mail to
    diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang
    index fae0f88fcc5..9e3d2a4af98 100644
    --- a/htdocs/langs/en_US/bills.lang
    +++ b/htdocs/langs/en_US/bills.lang
    @@ -25,12 +25,12 @@ InvoiceProFormaAsk=Proforma invoice
     InvoiceProFormaDesc=<b>Proforma invoice</b> is an image of a true invoice but has no accountancy value.
     InvoiceReplacement=Replacement invoice
     InvoiceReplacementAsk=Replacement invoice for invoice
    -InvoiceReplacementDesc=<b>Replacement invoice</b> is used to cancel and replace completely an invoice with no payment already received.<br><br>Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'.
    +InvoiceReplacementDesc=<b>Replacement invoice</b> is used to cancel and completely replace an invoice with no payment already received.<br><br>Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'.
     InvoiceAvoir=Credit note
     InvoiceAvoirAsk=Credit note to correct invoice
    -InvoiceAvoirDesc=The <b>credit note</b> is a negative invoice used to solve fact that an invoice has an amount that differs than amount really paid (because customer paid too much by error, or will not paid completely since he returned some products for example).
    +InvoiceAvoirDesc=The <b>credit note</b> is a negative invoice used to correct the fact that an invoice has an amount that differs from the amount really paid (eg customer paid too much by mistake, or will not pay completely since he returned some products).
     invoiceAvoirWithLines=Create Credit Note with lines from the origin invoice
    -invoiceAvoirWithPaymentRestAmount=Create Credit Note with remaining unpaid of origin invoice 
    +invoiceAvoirWithPaymentRestAmount=Create Credit Note with remaining unpaid of origin invoice
     invoiceAvoirLineWithPaymentRestAmount=Credit Note for remaining unpaid amount
     ReplaceInvoice=Replace invoice %s
     ReplacementInvoice=Replacement invoice
    @@ -66,12 +66,12 @@ paymentInInvoiceCurrency=in invoices currency
     PaidBack=Paid back
     DeletePayment=Delete payment
     ConfirmDeletePayment=Are you sure you want to delete this payment?
    -ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount ?<br>The amount will so be saved among all discounts and could be used as a discount for a current or a future invoice for this customer.
    -ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount ?<br>The amount will so be saved among all discounts and could be used as a discount for a current or a future invoice for this supplier.
    +ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount?<br>The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer.
    +ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount?<br>The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this supplier.
     SupplierPayments=Suppliers payments
     ReceivedPayments=Received payments
     ReceivedCustomersPayments=Payments received from customers
    -PayedSuppliersPayments=Payments payed to suppliers
    +PayedSuppliersPayments=Payments paid to suppliers
     ReceivedCustomersPaymentsToValid=Received customers payments to validate
     PaymentsReportsForYear=Payments reports for %s
     PaymentsReports=Payments reports
    @@ -91,8 +91,8 @@ PaymentConditionsShort=Payment terms
     PaymentAmount=Payment amount
     ValidatePayment=Validate payment
     PaymentHigherThanReminderToPay=Payment higher than reminder to pay
    -HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the rest to pay. <br> Edit your entry, otherwise confirm and think about creating a credit note of the excess received for each overpaid invoices.
    -HelpPaymentHigherThanReminderToPaySupplier=Attention, the payment amount of one or more bills is higher than the rest to pay. <br> Edit your entry, otherwise confirm and think about creating a credit note of the excess paid for each overpaid invoice.
    +HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay. <br> Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice.
    +HelpPaymentHigherThanReminderToPaySupplier=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay. <br> Edit your entry, otherwise confirm and consider creating a credit note for the excess paid for each overpaid invoice.
     ClassifyPaid=Classify 'Paid'
     ClassifyPaidPartially=Classify 'Paid partially'
     ClassifyCanceled=Classify 'Abandoned'
    @@ -131,7 +131,8 @@ BillStatusClosedUnpaid=Closed (unpaid)
     BillStatusClosedPaidPartially=Paid (partially)
     BillShortStatusDraft=Draft
     BillShortStatusPaid=Paid
    -BillShortStatusPaidBackOrConverted=Refund or converted
    +BillShortStatusPaidBackOrConverted=Refunded or converted
    +Refunded=Refunded
     BillShortStatusConverted=Paid
     BillShortStatusCanceled=Abandoned
     BillShortStatusValidated=Validated
    @@ -141,16 +142,16 @@ BillShortStatusNotRefunded=Not refunded
     BillShortStatusClosedUnpaid=Closed
     BillShortStatusClosedPaidPartially=Paid (partially)
     PaymentStatusToValidShort=To validate
    -ErrorVATIntraNotConfigured=Intracommunautary VAT number not yet defined
    +ErrorVATIntraNotConfigured=Intra-Community VAT number not yet defined
     ErrorNoPaiementModeConfigured=No default payment mode defined. Go to Invoice module setup to fix this.
     ErrorCreateBankAccount=Create a bank account, then go to Setup panel of Invoice module to define payment modes
     ErrorBillNotFound=Invoice %s does not exist
    -ErrorInvoiceAlreadyReplaced=Error, you try to validate an invoice to replace invoice %s. But this one has already been replaced by invoice %s.
    +ErrorInvoiceAlreadyReplaced=Error, you tried to validate an invoice to replace invoice %s. But this one has already been replaced by invoice %s.
     ErrorDiscountAlreadyUsed=Error, discount already used
     ErrorInvoiceAvoirMustBeNegative=Error, correct invoice must have a negative amount
     ErrorInvoiceOfThisTypeMustBePositive=Error, this type of invoice must have a positive amount
     ErrorCantCancelIfReplacementInvoiceNotValidated=Error, can't cancel an invoice that has been replaced by another invoice that is still in draft status
    -ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=This part or another is already used so discount serie cant be removed.
    +ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=This part or another is already used so discount series cannot be removed.
     BillFrom=From
     BillTo=To
     ActionsOnBill=Actions on invoice
    @@ -179,20 +180,20 @@ ConfirmClassifyPaidBill=Are you sure you want to change invoice <b>%s</b> to sta
     ConfirmCancelBill=Are you sure you want to cancel invoice <b>%s</b>?
     ConfirmCancelBillQuestion=Why do you want to classify this invoice 'abandoned'?
     ConfirmClassifyPaidPartially=Are you sure you want to change invoice <b>%s</b> to status paid?
    -ConfirmClassifyPaidPartiallyQuestion=This invoice has not been paid completely. What are reasons for you to close this invoice?
    -ConfirmClassifyPaidPartiallyReasonAvoir=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I regularise the VAT with a credit note.
    +ConfirmClassifyPaidPartiallyQuestion=This invoice has not been paid completely. What is the reason/s for you closing this invoice?
    +ConfirmClassifyPaidPartiallyReasonAvoir=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I regularize the VAT with a credit note.
     ConfirmClassifyPaidPartiallyReasonDiscount=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term.
     ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I accept to lose the VAT on this discount.
    -ConfirmClassifyPaidPartiallyReasonDiscountVat=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I recover the VAT on this discount without a credit note. 
    +ConfirmClassifyPaidPartiallyReasonDiscountVat=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I recover the VAT on this discount without a credit note.
     ConfirmClassifyPaidPartiallyReasonBadCustomer=Bad customer
     ConfirmClassifyPaidPartiallyReasonProductReturned=Products partially returned
     ConfirmClassifyPaidPartiallyReasonOther=Amount abandoned for other reason
    -ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=This choice is possible if your invoice have been provided with suitable comment. (Example «Only the tax corresponding to the price that have been actually paid gives rights to deduction»)
    -ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=In some countries, this choice might be possible only if your invoice contains correct note.
    +ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=This choice is possible if your invoice has been provided with suitable comments. (Example «Only the tax corresponding to the price that has been actually paid gives rights to deduction»)
    +ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=In some countries, this choice might be possible only if your invoice contains correct notes.
     ConfirmClassifyPaidPartiallyReasonAvoirDesc=Use this choice if all other does not suit
    -ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=A <b>bad customer</b> is a customer that refuse to pay his debt.
    +ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=A <b>bad customer</b> is a customer that refuses to pay his debt.
     ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=This choice is used when payment is not complete because some of products were returned
    -ConfirmClassifyPaidPartiallyReasonOtherDesc=Use this choice if all other does not suit, for example in following situation:<br>- payment not complete because some products were shipped back<br>- amount claimed too important because a discount was forgotten<br>In all cases, amount over-claimed must be corrected in accountancy system by creating a credit note.
    +ConfirmClassifyPaidPartiallyReasonOtherDesc=Use this choice if all others are not suitable, for example in following situation:<br>- payment not complete because some products were shipped back<br>- amount claimed too important because a discount was forgotten<br>In all cases, amount over-claimed must be corrected in accountancy system by creating a credit note.
     ConfirmClassifyAbandonReasonOther=Other
     ConfirmClassifyAbandonReasonOtherDesc=This choice will be used in all other cases. For example because you plan to create a replacing invoice.
     ConfirmCustomerPayment=Do you confirm this payment input for <b>%s</b> %s?
    @@ -203,6 +204,7 @@ UnvalidateBill=Unvalidate invoice
     NumberOfBills=No. of invoices
     NumberOfBillsByMonth=No. of invoices per month
     AmountOfBills=Amount of invoices
    +AmountOfBillsHT=Amount of invoices (net of tax)
     AmountOfBillsByMonthHT=Amount of invoices by month (net of tax)
     ShowSocialContribution=Show social/fiscal tax
     ShowBill=Show invoice
    @@ -302,9 +304,9 @@ DiscountAlreadyCounted=Discounts or credits already consumed
     CustomerDiscounts=Customer discounts
     SupplierDiscounts=Vendors discounts
     BillAddress=Bill address
    -HelpEscompte=This discount is a discount granted to customer because its payment was made before term.
    -HelpAbandonBadCustomer=This amount has been abandoned (customer said to be a bad customer) and is considered as an exceptional loose.
    -HelpAbandonOther=This amount has been abandoned since it was an error (wrong customer or invoice replaced by an other for example)
    +HelpEscompte=This discount is a discount granted to customer because payment was made before term.
    +HelpAbandonBadCustomer=This amount has been abandoned (customer said to be a bad customer) and is considered as an exceptional loss.
    +HelpAbandonOther=This amount has been abandoned since it was an error (wrong customer or invoice replaced by another for example)
     IdSocialContribution=Social/fiscal tax payment id
     PaymentId=Payment id
     PaymentRef=Payment ref.
    @@ -321,22 +323,22 @@ InvoiceNotChecked=No invoice selected
     CloneInvoice=Clone invoice
     ConfirmCloneInvoice=Are you sure you want to clone this invoice <b>%s</b>?
     DisabledBecauseReplacedInvoice=Action disabled because invoice has been replaced
    -DescTaxAndDividendsArea=This area presents a summary of all payments made for special expenses. Only record with payment during the fixed year are included here.
    +DescTaxAndDividendsArea=This area presents a summary of all payments made for special expenses. Only records with payment during the fixed year are included here.
     NbOfPayments=No. of payments
     SplitDiscount=Split discount in two
    -ConfirmSplitDiscount=Are you sure you want to split this discount of <b>%s</b> %s into 2 lower discounts?
    -TypeAmountOfEachNewDiscount=Input amount for each of two parts :
    -TotalOfTwoDiscountMustEqualsOriginal=Total of two new discount must be equal to original discount amount. 
    +ConfirmSplitDiscount=Are you sure you want to split this discount of <b>%s</b> %s into 2 smaller discounts?
    +TypeAmountOfEachNewDiscount=Input amount for each of two parts:
    +TotalOfTwoDiscountMustEqualsOriginal=Total of two new discounts must be equal to original discount amount.
     ConfirmRemoveDiscount=Are you sure you want to remove this discount?
     RelatedBill=Related invoice
     RelatedBills=Related invoices
     RelatedCustomerInvoices=Related customer invoices
     RelatedSupplierInvoices=Related supplier invoices
     LatestRelatedBill=Latest related invoice
    -WarningBillExist=Warning, one or more invoice already exist
    +WarningBillExist=Warning, one or more invoices already exist
     MergingPDFTool=Merging PDF tool
     AmountPaymentDistributedOnInvoice=Payment amount distributed on invoice
    -PaymentOnDifferentThirdBills=Allow payments on different thirdparties bills but same parent company
    +PaymentOnDifferentThirdBills=Allow payments on different third parties bills but same parent company
     PaymentNote=Payment note
     ListOfPreviousSituationInvoices=List of previous situation invoices
     ListOfNextSituationInvoices=List of next situation invoices
    @@ -344,7 +346,7 @@ ListOfSituationInvoices=List of situation invoices
     CurrentSituationTotal=Total current situation
     DisabledBecauseNotEnouthCreditNote=To remove a situation invoice from cycle, this invoice's credit note total must cover this invoice total
     RemoveSituationFromCycle=Remove this invoice from cycle
    -ConfirmRemoveSituationFromCycle=Remove this invoice %s from cycle ? 
    +ConfirmRemoveSituationFromCycle=Remove this invoice %s from cycle ?
     ConfirmOuting=Confirm outing
     FrequencyPer_d=Every %s days
     FrequencyPer_m=Every %s months
    @@ -408,19 +410,19 @@ PaymentTypeCHQ=Check
     PaymentTypeShortCHQ=Check
     PaymentTypeTIP=TIP (Documents against Payment)
     PaymentTypeShortTIP=TIP Payment
    -PaymentTypeVAD=On line payment
    -PaymentTypeShortVAD=On line payment
    +PaymentTypeVAD=Online payment
    +PaymentTypeShortVAD=Online payment
     PaymentTypeTRA=Bank draft
     PaymentTypeShortTRA=Draft
     PaymentTypeFAC=Factor
     PaymentTypeShortFAC=Factor
     BankDetails=Bank details
     BankCode=Bank code
    -DeskCode=Desk code
    +DeskCode=Office code
     BankAccountNumber=Account number
    -BankAccountNumberKey=Key
    +BankAccountNumberKey=Check digits
     Residence=Direct debit
    -IBANNumber=IBAN number
    +IBANNumber=IBAN complete account number
     IBAN=IBAN
     BIC=BIC/SWIFT
     BICNumber=BIC/SWIFT number
    @@ -436,7 +438,7 @@ NetToBePaid=Net to be paid
     PhoneNumber=Tel
     FullPhoneNumber=Telephone
     TeleFax=Fax
    -PrettyLittleSentence=Accept the amount of payments due by checks issued in my name as a Member of an accounting association approved by the Fiscal Administration.  
    +PrettyLittleSentence=Accept the amount of payments due by checks issued in my name as a Member of an accounting association approved by the Fiscal Administration.
     IntracommunityVATNumber=Intracommunity number of VAT
     PaymentByChequeOrderedTo=Check payment (including tax) are payable to %s send to
     PaymentByChequeOrderedToShort=Check payment (including tax) are payable to
    @@ -445,7 +447,7 @@ PaymentByTransferOnThisBankAccount=Payment by transfer on the following bank acc
     VATIsNotUsedForInvoice=* Non applicable VAT art-293B of CGI
     LawApplicationPart1=By application of the law 80.335 of 12/05/80
     LawApplicationPart2=the goods remain the property of
    -LawApplicationPart3=the seller until the complete cashing of
    +LawApplicationPart3=the seller until full payment of
     LawApplicationPart4=their price.
     LimitedLiabilityCompanyCapital=SARL with Capital of
     UseLine=Apply
    @@ -474,21 +476,22 @@ Reported=Delayed
     DisabledBecausePayments=Not possible since there are some payments
     CantRemovePaymentWithOneInvoicePaid=Can't remove payment since there is at least one invoice classified paid
     ExpectedToPay=Expected payment
    -CantRemoveConciliatedPayment=Can't remove conciliated payment
    +CantRemoveConciliatedPayment=Can't remove reconciled payment
     PayedByThisPayment=Paid by this payment
    -ClosePaidInvoicesAutomatically=Classify "Paid" all standard, down payment or replacement invoices entirely paid.
    +ClosePaidInvoicesAutomatically=Classify "Paid" all standard, down payment or replacement invoices paid entirely.
     ClosePaidCreditNotesAutomatically=Classify "Paid" all credit notes entirely paid back.
    -ClosePaidContributionsAutomatically=Classify "Paid" all social or fiscal contributions entirely paid.
    -AllCompletelyPayedInvoiceWillBeClosed=All invoice with no remain to pay will be automatically closed to status "Paid".
    +ClosePaidContributionsAutomatically=Classify "Paid" all social or fiscal contributions paid entirely.
    +AllCompletelyPayedInvoiceWillBeClosed=All invoice with no remainder to pay will be automatically closed with status "Paid".
     ToMakePayment=Pay
     ToMakePaymentBack=Pay back
     ListOfYourUnpaidInvoices=List of unpaid invoices
     NoteListOfYourUnpaidInvoices=Note: This list contains only invoices for third parties you are linked to as a sale representative.
     RevenueStamp=Revenue stamp
    -YouMustCreateInvoiceFromThird=This option is only available when creating invoice from tab "customer" of third party
    -YouMustCreateInvoiceFromSupplierThird=This option is only available when creating invoice from tab "supplier" of third party
    +YouMustCreateInvoiceFromThird=This option is only available when creating invoices from tab "customer" of third party
    +YouMustCreateInvoiceFromSupplierThird=This option is only available when creating invoices from tab "supplier" of third party
     YouMustCreateStandardInvoiceFirstDesc=You have to create a standard invoice first and convert it to "template" to create a new template invoice
     PDFCrabeDescription=Invoice PDF template Crabe. A complete invoice template (recommended Template)
    +PDFSpongeDescription=Invoice PDF template Sponge. A complete invoice template
     PDFCrevetteDescription=Invoice PDF template Crevette. A complete invoice template for situation invoices
     TerreNumRefModelDesc1=Return number with format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequence with no break and no return to 0
     MarsNumRefModelDesc1=Return number with format %syymm-nnnn for standard invoices, %syymm-nnnn for replacement invoices, %syymm-nnnn for down payment invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequence with no break and no return to 0
    @@ -533,7 +536,7 @@ invoiceLineProgressError=Invoice line progress can't be greater than or equal to
     updatePriceNextInvoiceErrorUpdateline=Error : update price on invoice line : %s
     ToCreateARecurringInvoice=To create a recurring invoice for this contract, first create this draft invoice, then convert it into an invoice template and define the frequency for generation of future invoices.
     ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu <strong>%s - %s - %s</strong>.
    -ToCreateARecurringInvoiceGeneAuto=If you need to have such invoices generated automatically, ask you administrator to enable and setup module <strong>%s</strong>. Note that both method (manual and automatic) can be used together with no risk of duplication.
    +ToCreateARecurringInvoiceGeneAuto=If you need to have such invoices generated automatically, ask your administrator to enable and setup module <strong>%s</strong>. Note that both method (manual and automatic) can be used together with no risk of duplication.
     DeleteRepeatableInvoice=Delete template invoice
     ConfirmDeleteRepeatableInvoice=Are your sure you want to delete the template invoice?
     CreateOneBillByThird=Create one invoice per third party (otherwise, one invoice per order)
    @@ -546,3 +549,4 @@ AutoFillDateFromShort=Set start date
     AutoFillDateTo=Set end date for service line with next invoice date
     AutoFillDateToShort=Set end date
     MaxNumberOfGenerationReached=Max number of gen. reached
    +BILL_DELETEInDolibarr=Invoice deleted
    diff --git a/htdocs/langs/en_US/blockedlog.lang b/htdocs/langs/en_US/blockedlog.lang
    index fa56db7eed6..88d3662be9c 100644
    --- a/htdocs/langs/en_US/blockedlog.lang
    +++ b/htdocs/langs/en_US/blockedlog.lang
    @@ -2,13 +2,13 @@ BlockedLog=Unalterable Logs
     Field=Field
     BlockedLogDesc=This module tracks some events into an unalterable log (that you can't modify once recorded) into a block chain, in real time. This module provides compatibility with requirements of laws of some countries (like France with the law Finance 2016 - Norme NF535).
     Fingerprints=Archived events and fingerprints
    -FingerprintsDesc=This is the tool to browse or extract the unalterable logs. Unalterable logs are generated and archived locally into a dedicated table, in real time when you record a business event. You can use this tool to export this archive and save it into an external support (some countries, like France, ask you do it every year). Note that, there is no feature to purge this log and every change tried to be done directly into this log (by a hacker for example) will be reported with a non valid fingerprint. If you really need to purge this table because you used your application for a demo/test purpose and want to clean your data to start your production, you can ask your reseller or integrator to reset your database (all your data will be removed).  
    +FingerprintsDesc=This is the tool to browse or extract the unalterable logs. Unalterable logs are generated and archived locally into a dedicated table, in real time when you record a business event. You can use this tool to export this archive and save it into an external support (some countries, like France, ask that you do it every year). Note that, there is no feature to purge this log and every change tried to be done directly into this log (by a hacker for example) will be reported with a non-valid fingerprint. If you really need to purge this table because you used your application for a demo/test purpose and want to clean your data to start your production, you can ask your reseller or integrator to reset your database (all your data will be removed).
     CompanyInitialKey=Company initial key (hash of genesis block)
     BrowseBlockedLog=Unalterable logs
     ShowAllFingerPrintsMightBeTooLong=Show all archived logs (might be long)
    -ShowAllFingerPrintsErrorsMightBeTooLong=Show all non valid archive logs (might be long)
    +ShowAllFingerPrintsErrorsMightBeTooLong=Show all non-valid archive logs (might be long)
     DownloadBlockChain=Download fingerprints
    -KoCheckFingerprintValidity=Archived log is not valid. It means someone (a hacker ?) has modified some datas of this archived log after it was recorded, or has erased the previous archived record (check that line with previous # exists).
    +KoCheckFingerprintValidity=Archived log is not valid. It means someone (a hacker?) has modified some data of this archived log after it was recorded, or has erased the previous archived record (check that line with previous # exists).
     OkCheckFingerprintValidity=Archived log is valid. It means all data on this line were not modified and record follow the previous one.
     OkCheckFingerprintValidityButChainIsKo=Archived log seems valid compared to previous one but the chain was corrupted previously.
     AddedByAuthority=Stored into remote authority
    @@ -22,8 +22,8 @@ logPAYMENT_CUSTOMER_CREATE=Customer payment created
     logPAYMENT_CUSTOMER_DELETE=Customer payment logical deletion
     logDONATION_PAYMENT_CREATE=Donation payment created
     logDONATION_PAYMENT_DELETE=Donation payment logical deletion
    -logBILL_PAYED=Customer invoice payed
    -logBILL_UNPAYED=Customer invoice set unpayed
    +logBILL_PAYED=Customer invoice paid
    +logBILL_UNPAYED=Customer invoice set unpaid
     logBILL_VALIDATE=Customer invoice validated
     logBILL_SENTBYMAIL=Customer invoice send by mail
     logBILL_DELETE=Customer invoice logically deleted
    @@ -32,9 +32,9 @@ logMODULE_SET=Module BlockedLog was enabled
     logDON_VALIDATE=Donation validated
     logDON_MODIFY=Donation modified
     logDON_DELETE=Donation logical deletion
    -logMEMBER_SUBSCRIPTION_CREATE=Member subcription created
    -logMEMBER_SUBSCRIPTION_MODIFY=Member subcription modified
    -logMEMBER_SUBSCRIPTION_DELETE=Member subcription logical deletion
    +logMEMBER_SUBSCRIPTION_CREATE=Member subscription created
    +logMEMBER_SUBSCRIPTION_MODIFY=Member subscription modified
    +logMEMBER_SUBSCRIPTION_DELETE=Member subscription logical deletion
     BlockedLogBillDownload=Customer invoice download
     BlockedLogBillPreview=Customer invoice preview
     BlockedlogInfoDialog=Log Details
    @@ -46,8 +46,8 @@ logDOC_DOWNLOAD=Download of a validated document in order to print or send
     DataOfArchivedEvent=Full datas of archived event
     ImpossibleToReloadObject=Original object (type %s, id %s) not linked (see 'Full datas' column to get unalterable saved data)
     BlockedLogAreRequiredByYourCountryLegislation=Unalterable Logs module may be required by the legislation of your country. Disabling this module may render any future transactions invalid with respect to the law and the use of legal software as they can not be validated by a tax audit.
    -BlockedLogActivatedBecauseRequiredByYourCountryLegislation=Unalterable Logs module was activated because of the legislation of your country. Disabling this module may render any future transactions invalid with respect to the law and the use of legal software as they can not be validated by a tax audit.
    +BlockedLogActivatedBecauseRequiredByYourCountryLegislation=Unalterable Logs module was activated because of the legislation of your country. Disabling this module may render any future transactions invalid with respect to the law and the use of legal software as they cannot be validated by a tax audit.
     BlockedLogDisableNotAllowedForCountry=List of countries where usage of this module is mandatory (just to prevent to disable the module by error, if your country is in this list, disable of module is not possible without editing this list first. Note also that enabling/disabling this module will keep a track into the unalterable log).
    -OnlyNonValid=Non valid
    -TooManyRecordToScanRestrictFilters=Too many record to scan/analyze. Please restrict list with more restrictive filters.
    +OnlyNonValid=Non-valid
    +TooManyRecordToScanRestrictFilters=Too many records to scan/analyze. Please restrict list with more restrictive filters.
     RestrictYearToExport=Restrict month / year to export
    diff --git a/htdocs/langs/en_US/boxes.lang b/htdocs/langs/en_US/boxes.lang
    index 152a6eccce5..8a519879ac3 100644
    --- a/htdocs/langs/en_US/boxes.lang
    +++ b/htdocs/langs/en_US/boxes.lang
    @@ -23,11 +23,11 @@ BoxTitleLastRssInfos=Latest %s news from %s
     BoxTitleLastProducts=Products/Services: latest %s modified
     BoxTitleProductsAlertStock=Products: stock alert
     BoxTitleLastSuppliers=Latest %s recorded suppliers
    -BoxTitleLastModifiedSuppliers=Suppliers: latest %s modified
    -BoxTitleLastModifiedCustomers=Customers: latest %s modified
    +BoxTitleLastModifiedSuppliers=Latest %s modified vendors
    +BoxTitleLastModifiedCustomers=Latest %s modified customers
     BoxTitleLastCustomersOrProspects=Latest %s customers or prospects
     BoxTitleLastCustomerBills=Latest %s modified customer invoices
    -BoxTitleLastSupplierBills=Latest %s modified supplier invoices
    +BoxTitleLastSupplierBills=Latest %s modified vendor invoices
     BoxTitleLastModifiedProspects=Latest %s modified prospects
     BoxTitleLastModifiedMembers=Latest %s modified members
     BoxTitleLastFicheInter=Latest %s modified interventions
    @@ -35,7 +35,7 @@ BoxTitleOldestUnpaidCustomerBills=Customer Invoices: oldest %s unpaid
     BoxTitleOldestUnpaidSupplierBills=Supplier Invoices: oldest %s unpaid
     BoxTitleCurrentAccounts=Open Accounts: balances
     BoxTitleLastModifiedContacts=Contacts/Addresses: latest %s modified
    -BoxMyLastBookmarks=Bookmarks: latest %s
    +BoxMyLastBookmarks=Bookmarks: latest %s modified
     BoxOldestExpiredServices=Oldest active expired services
     BoxLastExpiredServices=Latest %s oldest contacts with active expired services
     BoxTitleLastActionsToDo=Latest %s actions to do
    @@ -45,7 +45,7 @@ BoxTitleLastModifiedExpenses=Latest %s modified expense reports
     BoxGlobalActivity=Global activity (invoices, proposals, orders)
     BoxGoodCustomers=Good customers
     BoxTitleGoodCustomers=%s Good customers
    -FailedToRefreshDataInfoNotUpToDate=Failed to refresh RSS flux. Latest successfull refresh date: %s
    +FailedToRefreshDataInfoNotUpToDate=Failed to refresh RSS flux. Latest successful refresh date: %s
     LastRefreshDate=Latest refresh date
     NoRecordedBookmarks=No bookmarks defined.
     ClickToAdd=Click here to add.
    @@ -83,4 +83,4 @@ ForCustomersOrders=Customers orders
     ForProposals=Proposals
     LastXMonthRolling=The latest %s month rolling
     ChooseBoxToAdd=Add widget to your dashboard
    -BoxAdded=Widget was added in your dashboard
    \ No newline at end of file
    +BoxAdded=Widget was added in your dashboard
    diff --git a/htdocs/langs/en_US/cashdesk.lang b/htdocs/langs/en_US/cashdesk.lang
    index 1f51f375e89..7fb03ea235c 100644
    --- a/htdocs/langs/en_US/cashdesk.lang
    +++ b/htdocs/langs/en_US/cashdesk.lang
    @@ -30,5 +30,14 @@ ShowCompany=Show company
     ShowStock=Show warehouse
     DeleteArticle=Click to remove this article
     FilterRefOrLabelOrBC=Search (Ref/Label)
    -UserNeedPermissionToEditStockToUsePos=You ask to decrease stock on invoice creation, so user that use POS need to have permission to edit stock.
    +UserNeedPermissionToEditStockToUsePos=You ask to decrease stock on invoice creation, so user that uses POS needs to have permission to edit stock.
     DolibarrReceiptPrinter=Dolibarr Receipt Printer
    +PointOfSale=Point of sales
    +CloseBill=Close Bill
    +Floors=Floors
    +Floor=Floor
    +AddTable=Add table
    +Place=Place
    +TakeboxNecesary='TakeBOX' application required
    +OrderPrinters=Order printers
    +SearchProduct=Search product
    diff --git a/htdocs/langs/en_US/categories.lang b/htdocs/langs/en_US/categories.lang
    index ee019d0ebbb..cef3eaa2815 100644
    --- a/htdocs/langs/en_US/categories.lang
    +++ b/htdocs/langs/en_US/categories.lang
    @@ -55,7 +55,7 @@ MembersCategoryShort=Members tag/category
     SuppliersCategoriesShort=Suppliers tags/categories
     CustomersCategoriesShort=Customers tags/categories
     ProspectsCategoriesShort=Prospects tags/categories
    -CustomersProspectsCategoriesShort=Cust./Prosp. categories
    +CustomersProspectsCategoriesShort=Cust./Prosp. tags/categories
     ProductsCategoriesShort=Products tags/categories
     MembersCategoriesShort=Members tags/categories
     ContactCategoriesShort=Contacts tags/categories
    diff --git a/htdocs/langs/en_US/commercial.lang b/htdocs/langs/en_US/commercial.lang
    index 47c5d8646ba..96b8abbb937 100644
    --- a/htdocs/langs/en_US/commercial.lang
    +++ b/htdocs/langs/en_US/commercial.lang
    @@ -52,6 +52,7 @@ ActionAC_TEL=Phone call
     ActionAC_FAX=Send fax
     ActionAC_PROP=Send proposal by mail
     ActionAC_EMAIL=Send Email
    +ActionAC_EMAIL_IN=Reception of Email
     ActionAC_RDV=Meetings
     ActionAC_INT=Intervention on site
     ActionAC_FAC=Send customer invoice by mail
    @@ -72,8 +73,8 @@ StatusProsp=Prospect status
     DraftPropals=Draft commercial proposals
     NoLimit=No limit
     ToOfferALinkForOnlineSignature=Link for online signature
    -WelcomeOnOnlineSignaturePage=Welcome to the page to accept commerical proposals from %s
    +WelcomeOnOnlineSignaturePage=Welcome to the page to accept commercial proposals from %s
     ThisScreenAllowsYouToSignDocFrom=This screen allow you to accept and sign, or refuse, a quote/commercial proposal
     ThisIsInformationOnDocumentToSign=This is information on document to accept or refuse
    -SignatureProposalRef=Signature of quote/commerical proposal %s
    -FeatureOnlineSignDisabled=Feature for online signing disabled or document generated before the feature was enabled  
    \ No newline at end of file
    +SignatureProposalRef=Signature of quote/commercial proposal %s
    +FeatureOnlineSignDisabled=Feature for online signing disabled or document generated before the feature was enabled
    diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang
    index 78762e542e2..e5de5614886 100644
    --- a/htdocs/langs/en_US/companies.lang
    +++ b/htdocs/langs/en_US/companies.lang
    @@ -7,7 +7,7 @@ DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
     MenuNewThirdParty=New Third Party
     MenuNewCustomer=New Customer
    -MenuNewProspect=Nnew Prospect
    +MenuNewProspect=New Prospect
     MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    @@ -40,7 +40,7 @@ ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
     ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -80,7 +80,7 @@ VATIsUsed=Sales tax used
     VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -311,8 +311,8 @@ CustomerCodeDesc=Customer Code, unique for all customers
     SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    @@ -338,15 +338,15 @@ MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -402,9 +402,9 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
     ListSuppliersShort=List of Vendors
     ListProspectsShort=List of Prospects
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/en_US/compta.lang b/htdocs/langs/en_US/compta.lang
    index ba36f59ba4a..6ad5e357b35 100644
    --- a/htdocs/langs/en_US/compta.lang
    +++ b/htdocs/langs/en_US/compta.lang
    @@ -6,7 +6,7 @@ OptionMode=Option for accountancy
     OptionModeTrue=Option Incomes-Expenses
     OptionModeVirtual=Option Claims-Debts
     OptionModeTrueDesc=In this context, the turnover is calculated over payments (date of payments). The validity of the figures is assured only if the book-keeping is scrutinized through the input/output on the accounts via invoices.
    -OptionModeVirtualDesc=In this context, the turnover is calculated over invoices (date of validation). When these invoices are due, whether they have been paid or not, they are listed in the turnover output. 
    +OptionModeVirtualDesc=In this context, the turnover is calculated over invoices (date of validation). When these invoices are due, whether they have been paid or not, they are listed in the turnover output.
     FeatureIsSupportedInInOutModeOnly=Feature only available in CREDITS-DEBTS accountancy mode (See Accountancy module configuration)
     VATReportBuildWithOptionDefinedInModule=Amounts shown here are calculated using rules defined by Tax module setup.
     LTReportBuildWithOptionDefinedInModule=Amounts shown here are calculated using rules defined by Company setup.
    @@ -29,7 +29,7 @@ BalanceBefore=Balance (before)
     Balance=Balance
     Debit=Debit
     Credit=Credit
    -Piece=Accounting Doc. 
    +Piece=Accounting Doc.
     AmountHTVATRealReceived=Net collected
     AmountHTVATRealPaid=Net paid
     VATToPay=Tax sales
    @@ -154,8 +154,8 @@ AnnualSummaryInputOutputMode=Balance of income and expenses, annual summary
     AnnualByCompanies=Balance of income and expenses, by predefined groups of account
     AnnualByCompaniesDueDebtMode=Balance of income and expenses, detail by predefined groups, mode <b>%sClaims-Debts%s</b> said <b>Commitment accounting</b>.
     AnnualByCompaniesInputOutputMode=Balance of income and expenses, detail by predefined groups, mode <b>%sIncomes-Expenses%s</b> said <b>cash accounting</b>.
    -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation on actual payments made, if they are not yet accounted in Ledger.
    -SeeReportInDueDebtMode=See %sanalysis of invoices%s for a calculation based on known recorded invoices even, if they are not yet accounted in Ledger.
    +SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation on actual payments made even if they are not yet accounted in Ledger.
    +SeeReportInDueDebtMode=See %sanalysis of invoices%s for a calculation based on known recorded invoices even if they are not yet accounted in Ledger.
     SeeReportInBookkeepingMode=See <b>%sBookeeping report%s</b> for a calculation on <b>Bookkeeping Ledger table</b>
     RulesAmountWithTaxIncluded=- Amounts shown are with all taxes included
     RulesResultDue=- It includes outstanding invoices, expenses, VAT, donations whether they are paid or not. Is also includes paid salaries.<br>- It is based on the validation date of invoices and VAT and on the due date for expenses. For salaries defined with Salary module, the value date of payment is used.
    @@ -167,7 +167,7 @@ RulesAmountOnInOutBookkeepingRecord=It includes record in your Ledger with accou
     RulesResultBookkeepingPredefined=It includes record in your Ledger with accounting accounts that has the group "EXPENSE" or "INCOME"
     RulesResultBookkeepingPersonalized=It show record in your Ledger with accounting accounts <b>grouped by personalized groups</b>
     SeePageForSetup=See menu <a href="%s">%s</a> for setup
    -DepositsAreNotIncluded=- Down payment invoices are nor included
    +DepositsAreNotIncluded=- Down payment invoices are not included
     DepositsAreIncluded=- Down payment invoices are included
     LT1ReportByCustomers=Report tax 2 by third party
     LT2ReportByCustomers=Report tax 3 by third party
    @@ -191,7 +191,7 @@ RulesVATInProducts=- For material assets, the report includes the VAT received o
     RulesVATDueServices=- For services, the report includes VAT invoices due, paid or not, based on the invoice date.
     RulesVATDueProducts=- For material assets, the report includes the VAT invoices, based on the invoice date.
     OptionVatInfoModuleComptabilite=Note: For material assets, it should use the date of delivery to be more fair.
    -ThisIsAnEstimatedValue=This is a preview, based on business events and not from the final ledger table, so final results may differ from this preview values 
    +ThisIsAnEstimatedValue=This is a preview, based on business events and not from the final ledger table, so final results may differ from this preview values
     PercentOfInvoice=%%/invoice
     NotUsedForGoods=Not used on goods
     ProposalStats=Statistics on proposals
    @@ -203,7 +203,7 @@ ToDispatch=To dispatch
     ThirdPartyMustBeEditAsCustomer=Third party must be defined as a customer
     SellsJournal=Sales Journal
     PurchasesJournal=Purchases Journal
    -DescSellsJournal=Sales Journal 
    +DescSellsJournal=Sales Journal
     DescPurchasesJournal=Purchases Journal
     InvoiceRef=Invoice ref.
     CodeNotDef=Not defined
    @@ -229,9 +229,9 @@ ACCOUNTING_VAT_SOLD_ACCOUNT=Accounting account by default for VAT on sales (used
     ACCOUNTING_VAT_BUY_ACCOUNT=Accounting account by default for VAT on purchases (used if not defined on VAT dictionary setup)
     ACCOUNTING_VAT_PAY_ACCOUNT=Accounting account by default for paying VAT
     ACCOUNTING_ACCOUNT_CUSTOMER=Accounting account used for customer third parties
    -ACCOUNTING_ACCOUNT_CUSTOMER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accouting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated customer accouting account on third party is not defined.
    +ACCOUNTING_ACCOUNT_CUSTOMER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated customer accounting account on third party is not defined.
     ACCOUNTING_ACCOUNT_SUPPLIER=Accounting account used for vendor third parties
    -ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accouting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated supplier accouting account on third party is not defined.
    +ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated supplier accounting account on third party is not defined.
     CloneTax=Clone a social/fiscal tax
     ConfirmCloneTax=Confirm the clone of a social/fiscal tax
     CloneTaxForNextMonth=Clone it for next month
    @@ -248,7 +248,7 @@ ErrorBankAccountNotFound=Error: Bank account not found
     FiscalPeriod=Accounting period
     ListSocialContributionAssociatedProject=List of social contributions associated with the project
     DeleteFromCat=Remove from accounting group
    -AccountingAffectation=Accounting assignement
    +AccountingAffectation=Accounting assignment
     LastDayTaxIsRelatedTo=Last day of period the tax is related to
     VATDue=Sale tax claimed
     ClaimedForThisPeriod=Claimed for the period
    @@ -256,4 +256,4 @@ PaidDuringThisPeriod=Paid during this period
     ByVatRate=By sale tax rate
     TurnoverbyVatrate=Turnover invoiced by sale tax rate
     TurnoverCollectedbyVatrate=Turnover collected by sale tax rate
    -PurchasebyVatrate=Purchase by sale tax rate
    \ No newline at end of file
    +PurchasebyVatrate=Purchase by sale tax rate
    diff --git a/htdocs/langs/en_US/contracts.lang b/htdocs/langs/en_US/contracts.lang
    index d2a03f64935..b4e8d7c96d9 100644
    --- a/htdocs/langs/en_US/contracts.lang
    +++ b/htdocs/langs/en_US/contracts.lang
    @@ -67,7 +67,7 @@ CloseService=Close service
     BoardRunningServices=Expired running services
     ServiceStatus=Status of service
     DraftContracts=Drafts contracts
    -CloseRefusedBecauseOneServiceActive=Contract can't be closed as ther is at least one open service on it
    +CloseRefusedBecauseOneServiceActive=Contract can't be closed as there is at least one open service on it
     ActivateAllContracts=Activate all contract lines
     CloseAllContracts=Close all contract lines
     DeleteContractLine=Delete a contract line
    diff --git a/htdocs/langs/en_US/cron.lang b/htdocs/langs/en_US/cron.lang
    index 704b852e138..63d56feca61 100644
    --- a/htdocs/langs/en_US/cron.lang
    +++ b/htdocs/langs/en_US/cron.lang
    @@ -11,11 +11,11 @@ URLToLaunchCronJobs=URL to check and launch qualified cron jobs
     OrToLaunchASpecificJob=Or to check and launch a specific job
     KeyForCronAccess=Security key for URL to launch cron jobs
     FileToLaunchCronJobs=Command line to check and launch qualified cron jobs
    -CronExplainHowToRunUnix=On Unix environment you should use the following crontab entry to run the command line each 5 minutes 
    -CronExplainHowToRunWin=On Microsoft(tm) Windows environement you can use Scheduled task tools to run the command line each 5 minutes
    +CronExplainHowToRunUnix=On Unix environment you should use the following crontab entry to run the command line each 5 minutes
    +CronExplainHowToRunWin=On Microsoft(tm) Windows environment you can use Scheduled Task tools to run the command line each 5 minutes
     CronMethodDoesNotExists=Class %s does not contains any method %s
     CronJobDefDesc=Cron job profiles are defined into the module descriptor file. When module is activated, they are loaded and available so you can administer the jobs from the admin tools menu %s.
    -CronJobProfiles=List of predefined cron job profiles 
    +CronJobProfiles=List of predefined cron job profiles
     # Menu
     EnabledAndDisabled=Enabled and disabled
     # Page list
    @@ -61,11 +61,11 @@ CronStatusInactiveBtn=Disable
     CronTaskInactive=This job is disabled
     CronId=Id
     CronClassFile=Filename with class
    -CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module). <BR> For exemple to call the fetch method of Dolibarr Product object /htdocs/<u>product</u>/class/product.class.php, the value for module is<br><i>product</i>
    -CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory). <BR> For exemple to call the fetch method of Dolibarr Product object htdocs/product/class/<u>product.class.php</u>, the value for class file name is<br><i>product/class/product.class.php</i>
    -CronObjectHelp=The object name to load. <BR> For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is<br><i>Product</i>
    -CronMethodHelp=The object method to launch. <BR> For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is<br><i>fetch</i>
    -CronArgsHelp=The method arguments. <BR> For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be<br><i>0, ProductRef</i>
    +CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module). <BR> For example to call the fetch method of Dolibarr Product object /htdocs/<u>product</u>/class/product.class.php, the value for module is<br><i>product</i>
    +CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory). <BR> For example to call the fetch method of Dolibarr Product object htdocs/product/class/<u>product.class.php</u>, the value for class file name is<br><i>product/class/product.class.php</i>
    +CronObjectHelp=The object name to load. <BR> For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is<br><i>Product</i>
    +CronMethodHelp=The object method to launch. <BR> For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is<br><i>fetch</i>
    +CronArgsHelp=The method arguments. <BR> For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be<br><i>0, ProductRef</i>
     CronCommandHelp=The system command line to execute.
     CronCreateJob=Create new Scheduled Job
     CronFrom=From
    diff --git a/htdocs/langs/en_US/deliveries.lang b/htdocs/langs/en_US/deliveries.lang
    index 7e39f48ea55..0d432c3f426 100644
    --- a/htdocs/langs/en_US/deliveries.lang
    +++ b/htdocs/langs/en_US/deliveries.lang
    @@ -17,14 +17,15 @@ DeliveryNotValidated=Delivery not validated
     StatusDeliveryCanceled=Canceled
     StatusDeliveryDraft=Draft
     StatusDeliveryValidated=Received
    -# merou PDF model						   
    -NameAndSignature=Name and Signature : 
    +# merou PDF model
    +NameAndSignature=Name and Signature :
     ToAndDate=To___________________________________ on ____/_____/__________
     GoodStatusDeclaration=Have received the goods above in good condition,
    -Deliverer=Deliverer : 
    +Deliverer=Deliverer :
     Sender=Sender
     Recipient=Recipient
     ErrorStockIsNotEnough=There's not enough stock
     Shippable=Shippable
     NonShippable=Not Shippable
     ShowReceiving=Show delivery receipt
    +NonExistentOrder=Non-existent order
    diff --git a/htdocs/langs/en_US/dict.lang b/htdocs/langs/en_US/dict.lang
    index bb79cd59d7d..59e7cc058f4 100644
    --- a/htdocs/langs/en_US/dict.lang
    +++ b/htdocs/langs/en_US/dict.lang
    @@ -116,7 +116,7 @@ CountryHM=Heard Island and McDonald
     CountryVA=Holy See (Vatican City State)
     CountryHN=Honduras
     CountryHK=Hong Kong
    -CountryIS=Icelande
    +CountryIS=Iceland
     CountryIN=India
     CountryID=Indonesia
     CountryIR=Iran
    @@ -131,7 +131,7 @@ CountryKI=Kiribati
     CountryKP=North Korea
     CountryKR=South Korea
     CountryKW=Kuwait
    -CountryKG=Kyrghyztan
    +CountryKG=Kyrgyzstan
     CountryLA=Lao
     CountryLV=Latvia
     CountryLB=Lebanon
    @@ -160,7 +160,7 @@ CountryMD=Moldova
     CountryMN=Mongolia
     CountryMS=Monserrat
     CountryMZ=Mozambique
    -CountryMM=Birmania (Myanmar)
    +CountryMM=Myanmar (Burma)
     CountryNA=Namibia
     CountryNR=Nauru
     CountryNP=Nepal
    @@ -223,7 +223,7 @@ CountryTO=Tonga
     CountryTT=Trinidad and Tobago
     CountryTR=Turkey
     CountryTM=Turkmenistan
    -CountryTC=Turks and Cailos Islands
    +CountryTC=Turks and Caicos Islands
     CountryTV=Tuvalu
     CountryUG=Uganda
     CountryUA=Ukraine
    @@ -277,7 +277,7 @@ CurrencySingMGA=Ariary
     CurrencyMUR=Mauritius rupees
     CurrencySingMUR=Mauritius rupee
     CurrencyNOK=Norwegian krones
    -CurrencySingNOK=Norwegian krone
    +CurrencySingNOK=Norwegian kronas
     CurrencyTND=Tunisian dinars
     CurrencySingTND=Tunisian dinar
     CurrencyUSD=US Dollars
    @@ -354,4 +354,4 @@ ExpAuto13PCV=13 CV and more
     ExpCyclo=Capacity lower to 50cm3
     ExpMoto12CV=Motorbike 1 or 2 CV
     ExpMoto345CV=Motorbike 3, 4 or 5 CV
    -ExpMoto5PCV=Motorbike 5 CV and more
    \ No newline at end of file
    +ExpMoto5PCV=Motorbike 5 CV and more
    diff --git a/htdocs/langs/en_US/donations.lang b/htdocs/langs/en_US/donations.lang
    index 748057cc9cc..5edc8d62033 100644
    --- a/htdocs/langs/en_US/donations.lang
    +++ b/htdocs/langs/en_US/donations.lang
    @@ -27,7 +27,7 @@ IConfirmDonationReception=The recipient declare reception, as a donation, of the
     MinimumAmount=Minimum amount is  %s
     FreeTextOnDonations=Free text to show in footer
     FrenchOptions=Options for France
    -DONATION_ART200=Show article 200 from CGI if you are concerned 
    +DONATION_ART200=Show article 200 from CGI if you are concerned
     DONATION_ART238=Show article 238 from CGI if you are concerned
     DONATION_ART885=Show article 885 from CGI if you are concerned
     DonationPayment=Donation payment
    diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang
    index 25a5344ff62..038ef926c91 100644
    --- a/htdocs/langs/en_US/errors.lang
    +++ b/htdocs/langs/en_US/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
    -ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD) 
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -96,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -116,7 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    -ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour. 
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -140,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -149,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -173,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -198,38 +199,39 @@ ErrorModuleFileSeemsToHaveAWrongFormat=The module package seems to have a wrong
     ErrorFilenameDosNotMatchDolibarrPackageRules=The name of the module package (<strong>%s</strong>) does not match expected name syntax: <strong>%s</strong>
     ErrorDuplicateTrigger=Error, duplicate trigger name %s. Already loaded from %s.
     ErrorNoWarehouseDefined=Error, no warehouses defined.
    -ErrorBadLinkSourceSetButBadValueForRef=The link you use is not valid. A 'source' for payment is defined, but value for 'ref' is not valid. 
    +ErrorBadLinkSourceSetButBadValueForRef=The link you use is not valid. A 'source' for payment is defined, but value for 'ref' is not valid.
     ErrorTooManyErrorsProcessStopped=Too many errors. Process was stopped.
     ErrorMassValidationNotAllowedWhenStockIncreaseOnAction=Mass validation is not possible when option to increase/decrease stock is set on this action (you must validate one by one so you can define the warehouse to increase/decrease)
     ErrorObjectMustHaveStatusDraftToBeValidated=Object %s must have status 'Draft' to be validated.
     ErrorObjectMustHaveLinesToBeValidated=Object %s must have lines to be validated.
    -ErrorOnlyInvoiceValidatedCanBeSentInMassAction=Only validated invoices can be sent using the "Send by email" mass action. 
    +ErrorOnlyInvoiceValidatedCanBeSentInMassAction=Only validated invoices can be sent using the "Send by email" mass action.
     ErrorChooseBetweenFreeEntryOrPredefinedProduct=You must choose if article is a predefined product or not
     ErrorDiscountLargerThanRemainToPaySplitItBefore=The discount you try to apply is larger than remain to pay. Split the discount in 2 smaller discounts before.
     ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was modified or file was removed recently.
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
    -WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.  
    +WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
     WarningMandatorySetupNotComplete=Mandatory setup parameters are not yet defined
     WarningSafeModeOnCheckExecDir=Warning, PHP option <b>safe_mode</b> is on so command must be stored inside a directory declared by php parameter <b>safe_mode_exec_dir</b>.
     WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) already exists.
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    -WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole. 
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
    +WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
     WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=Feature disabled when display setup is optimized for blind person or text browsers.
    -WarningPaymentDateLowerThanInvoiceDate=Payment date (%s) is earlier than invoice date (%s) for invoice %s. 
    -WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Please use more filters or set the constant %s to a higher limit. 
    +WarningPaymentDateLowerThanInvoiceDate=Payment date (%s) is earlier than invoice date (%s) for invoice %s.
    +WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Please use more filters or set the constant %s to a higher limit.
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    -WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    \ No newline at end of file
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
    +WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/en_US/exports.lang b/htdocs/langs/en_US/exports.lang
    index 093b4f4b46c..179556ddb19 100644
    --- a/htdocs/langs/en_US/exports.lang
    +++ b/htdocs/langs/en_US/exports.lang
    @@ -7,17 +7,17 @@ ExportableDatas=Exportable dataset
     ImportableDatas=Importable dataset
     SelectExportDataSet=Choose dataset you want to export...
     SelectImportDataSet=Choose dataset you want to import...
    -SelectExportFields=Choose fields you want to export, or select a predefined export profile
    -SelectImportFields=Choose source file fields you want to import and their target field in database by moving them up and down with anchor %s, or select a predefined import profile:
    +SelectExportFields=Choose the fields you want to export, or select a predefined export profile
    +SelectImportFields=Choose the source file fields you want to import and their target field in database by moving them up and down with anchor %s, or select a predefined import profile:
     NotImportedFields=Fields of source file not imported
     SaveExportModel=Save your selections as an export profile/template (for reuse).
     SaveImportModel=Save this import profile (for reuse) ...
     ExportModelName=Export profile name
    -ExportModelSaved=Export profile saved under name <b>%s</b>.
    +ExportModelSaved=Export profile saved as <b>%s</b>.
     ExportableFields=Exportable fields
     ExportedFields=Exported fields
     ImportModelName=Import profile name
    -ImportModelSaved=Import profile saved under name <b>%s</b>.
    +ImportModelSaved=Import profile saved as <b>%s</b>.
     DatasetToExport=Dataset to export
     DatasetToImport=Import file into dataset
     ChooseFieldsOrdersAndTitle=Choose fields order...
    @@ -83,25 +83,25 @@ ErrorMissingMandatoryValue=Mandatory data is empty in the source file for field
     TooMuchErrors=There are still <b>%s</b> other source lines with errors but output has been limited.
     TooMuchWarnings=There are still <b>%s</b> other source lines with warnings but output has been limited.
     EmptyLine=Empty line (will be discarded)
    -CorrectErrorBeforeRunningImport=You must first correct all errors before running definitive import.
    -FileWasImported=File was imported with number <b>%s</b>. 
    -YouCanUseImportIdToFindRecord=You can find all imported record in your database by filtering on field <b>import_key='%s'</b>.
    +CorrectErrorBeforeRunningImport=You <b>must</b> correct all errors <b>before</b> running the definitive import.
    +FileWasImported=File was imported with number <b>%s</b>.
    +YouCanUseImportIdToFindRecord=You can find all the imported records in your database by filtering on field <b>import_key='%s'</b>.
     NbOfLinesOK=Number of lines with no errors and no warnings: <b>%s</b>.
     NbOfLinesImported=Number of lines successfully imported: <b>%s</b>.
     DataComeFromNoWhere=Value to insert comes from nowhere in source file.
     DataComeFromFileFieldNb=Value to insert comes from field number <b>%s</b> in source file.
    -DataComeFromIdFoundFromRef=Value that comes from field number <b>%s</b> of source file will be used to find id of parent object to use (So the objet <b>%s</b> that has the ref. from source file must exists into Dolibarr).
    -DataComeFromIdFoundFromCodeId=Code that comes from field number <b>%s</b> of source file will be used to find id of parent object to use (So the code from source file must exists into dictionary <b>%s</b>). Note that if you know id, you can also use it into source file instead of code. Import should work in both cases. 
    +DataComeFromIdFoundFromRef=Value that comes from field number <b>%s</b> of source file will be used to find the id of the parent object to use (so the object <b>%s</b> that has the ref. from source file must exist in the database).
    +DataComeFromIdFoundFromCodeId=Code that comes from field number <b>%s</b> of source file will be used to find the id of the parent object to use (so the code from source file must exist in the dictionary <b>%s</b>). Note that if you know the id, you can also use it in the source file instead of the code. Import should work in both cases.
     DataIsInsertedInto=Data coming from source file will be inserted into the following field:
    -DataIDSourceIsInsertedInto=The id of parent object found using the data in source file, will be inserted into the following field:
    +DataIDSourceIsInsertedInto=The id of parent object was found using the data in the source file, will be inserted into the following field:
     DataCodeIDSourceIsInsertedInto=The id of parent line found from code, will be inserted into following field:
     SourceRequired=Data value is mandatory
     SourceExample=Example of possible data value
     ExampleAnyRefFoundIntoElement=Any ref found for element <b>%s</b>
     ExampleAnyCodeOrIdFoundIntoDictionary=Any code (or id) found into dictionary <b>%s</b>
    -CSVFormatDesc=<b>Comma Separated Value</b> file format (.csv).<br>This is a text file format where fields are separated by separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ].
    -Excel95FormatDesc=<b>Excel</b> file format (.xls)<br>This is native Excel 95 format (BIFF5).
    -Excel2007FormatDesc=<b>Excel</b> file format (.xlsx)<br>This is native Excel 2007 format (SpreadsheetML).
    +CSVFormatDesc=<b>Comma Separated Value</b> file format (.csv).<br>This is a text file format where fields are separated by a separator [ %s ]. If separator is found inside a field content, field is rounded by round character [ %s ]. Escape character to escape round character is [ %s ].
    +Excel95FormatDesc=<b>Excel</b> file format (.xls)<br>This is the native Excel 95 format (BIFF5).
    +Excel2007FormatDesc=<b>Excel</b> file format (.xlsx)<br>This is the native Excel 2007 format (SpreadsheetML).
     TsvFormatDesc=<b>Tab Separated Value</b> file format (.tsv)<br>This is a text file format where fields are separated by a tabulator [tab].
     ExportFieldAutomaticallyAdded=Field <b>%s</b> was automatically added. It will avoid you to have similar lines to be treated as duplicate record (with this field added, all lines will own their own id and will differ).
     CsvOptions=CSV format options
    @@ -118,7 +118,7 @@ SetThisValueTo2ToExcludeFirstLine=For example, set this value to 3 to exclude th
     KeepEmptyToGoToEndOfFile=Keep this field empty to go up to the end of file
     SelectPrimaryColumnsForUpdateAttempt=Select column(s) to use as primary key for update attempt
     UpdateNotYetSupportedForThisImport=Update is not supported for this type of import (only insert)
    -NoUpdateAttempt=No update attempt was performed, only insert 
    +NoUpdateAttempt=No update attempt was performed, only insert
     ImportDataset_user_1=Users (employees or not) and properties
     ComputedField=Computed field
     ## filters
    @@ -130,4 +130,4 @@ FormatControlRule=Format control rule
     KeysToUseForUpdates=Key (column) to use for <b>updating</b> existing data
     NbInsert=Number of inserted lines: %s
     NbUpdate=Number of updated lines: %s
    -MultipleRecordFoundWithTheseFilters=Multiple records have been found with these filters: %s
    \ No newline at end of file
    +MultipleRecordFoundWithTheseFilters=Multiple records have been found with these filters: %s
    diff --git a/htdocs/langs/en_US/externalsite.lang b/htdocs/langs/en_US/externalsite.lang
    index afec761f5fe..da4853df0df 100644
    --- a/htdocs/langs/en_US/externalsite.lang
    +++ b/htdocs/langs/en_US/externalsite.lang
    @@ -2,4 +2,4 @@
     ExternalSiteSetup=Setup link to external website
     ExternalSiteURL=External Site URL
     ExternalSiteModuleNotComplete=Module ExternalSite was not configured properly.
    -ExampleMyMenuEntry=My menu entry
    \ No newline at end of file
    +ExampleMyMenuEntry=My menu entry
    diff --git a/htdocs/langs/en_US/ftp.lang b/htdocs/langs/en_US/ftp.lang
    index d6b9d2ca070..8ecb0c55cad 100644
    --- a/htdocs/langs/en_US/ftp.lang
    +++ b/htdocs/langs/en_US/ftp.lang
    @@ -11,4 +11,4 @@ FTPFailedToRemoveFile=Failed to remove file <b>%s</b>.
     FTPFailedToRemoveDir=Failed to remove directory <b>%s</b> (Check permissions and that directory is empty).
     FTPPassiveMode=Passive mode
     ChooseAFTPEntryIntoMenu=Choose a FTP entry into menu...
    -FailedToGetFile=Failed to get files %s
    \ No newline at end of file
    +FailedToGetFile=Failed to get files %s
    diff --git a/htdocs/langs/en_US/help.lang b/htdocs/langs/en_US/help.lang
    index 2ddbc51ce3a..da776683a6a 100644
    --- a/htdocs/langs/en_US/help.lang
    +++ b/htdocs/langs/en_US/help.lang
    @@ -5,9 +5,9 @@ RemoteControlSupport=Online real time / remote support
     OtherSupport=Other support
     ToSeeListOfAvailableRessources=To contact/see available resources:
     HelpCenter=Help center
    -DolibarrHelpCenter=Dolibarr help and support center
    -ToGoBackToDolibarr=Otherwise, click <a href="%s">here to use Dolibarr</a>
    -TypeOfSupport=Source of support
    +DolibarrHelpCenter=Dolibarr Help and Support Center
    +ToGoBackToDolibarr=Otherwise, <a href="%s">click here to continue to use Dolibarr</a>.
    +TypeOfSupport=Type of support
     TypeSupportCommunauty=Community (free)
     TypeSupportCommercial=Commercial
     TypeOfHelp=Type
    @@ -15,12 +15,9 @@ NeedHelpCenter=Need help or support?
     Efficiency=Efficiency
     TypeHelpOnly=Help only
     TypeHelpDev=Help+Development
    -TypeHelpDevForm=Help+Development+Formation
    -ToGetHelpGoOnSparkAngels1=Some companies can provide a fast (sometime immediate) and more efficient online support by taking control of your computer. Such helpers can be found on <b>%s</b> web site:
    -ToGetHelpGoOnSparkAngels3=You can also go to the list of all available coaches for Dolibarr, for this click on button 
    -ToGetHelpGoOnSparkAngels2=Sometimes, there is no company available at the moment you make your search, so think to change the filter to look for "all availability". You will be able to send more requests.
    -BackToHelpCenter=Otherwise, click here to go <a href="%s">back to help center home page</a>.
    -LinkToGoldMember=You can call one of the coach preselected by Dolibarr for your language (%s) by clicking his Widget (status and maximum price are automatically updated):
    +TypeHelpDevForm=Help+Development+Training
    +BackToHelpCenter=Otherwise, <a href="%s">go back to Help center home page</a>.
    +LinkToGoldMember=You can call one of the trainers preselected by Dolibarr for your language (%s) by clicking their Widget (status and maximum price are automatically updated):
     PossibleLanguages=Supported languages
    -SubscribeToFoundation=Help Dolibarr project, subscribe to the foundation
    +SubscribeToFoundation=Help the Dolibarr project, subscribe to the foundation
     SeeOfficalSupport=For official Dolibarr support in your language: <br><b><a href="%s" target="_blank">%s</a></b>
    diff --git a/htdocs/langs/en_US/holiday.lang b/htdocs/langs/en_US/holiday.lang
    index eca2bbdfe46..8cf5ec2c1e6 100644
    --- a/htdocs/langs/en_US/holiday.lang
    +++ b/htdocs/langs/en_US/holiday.lang
    @@ -1,10 +1,10 @@
     # Dolibarr language file - Source file is en_US - holiday
     HRM=HRM
    -Holidays=Leaves
    -CPTitreMenu=Leaves
    +Holidays=Leave
    +CPTitreMenu=Leave
     MenuReportMonth=Monthly statement
     MenuAddCP=New leave request
    -NotActiveModCP=You must enable the module Leaves to view this page.
    +NotActiveModCP=You must enable the module Leave to view this page.
     AddCP=Make a leave request
     DateDebCP=Start date
     DateFinCP=End date
    @@ -15,18 +15,18 @@ ApprovedCP=Approved
     CancelCP=Canceled
     RefuseCP=Refused
     ValidatorCP=Approbator
    -ListeCP=List of leaves
    +ListeCP=List of leave
     LeaveId=Leave ID
     ReviewedByCP=Will be approved by
     UserForApprovalID=User for approval ID
    -UserForApprovalFirstname=Firstname of approval user
    -UserForApprovalLastname=Lastname of approval user
    +UserForApprovalFirstname=First name of approval user
    +UserForApprovalLastname=Last name of approval user
     UserForApprovalLogin=Login of approval user
     DescCP=Description
     SendRequestCP=Create leave request
     DelayToRequestCP=Leave requests must be made at least <b>%s day(s)</b> before them.
    -MenuConfCP=Balance of leaves
    -SoldeCPUser=Leaves balance is <b>%s</b> days.
    +MenuConfCP=Balance of leave
    +SoldeCPUser=Leave balance is <b>%s</b> days.
     ErrorEndDateCP=You must select an end date greater than the start date.
     ErrorSQLCreateCP=An SQL error occurred during the creation:
     ErrorIDFicheCP=An error has occurred, the leave request does not exist.
    @@ -85,7 +85,7 @@ NewSoldeCP=New Balance
     alreadyCPexist=A leave request has already been done on this period.
     FirstDayOfHoliday=First day of vacation
     LastDayOfHoliday=Last day of vacation
    -BoxTitleLastLeaveRequests=Latest %s modified leave requests 
    +BoxTitleLastLeaveRequests=Latest %s modified leave requests
     HolidaysMonthlyUpdate=Monthly update
     ManualUpdate=Manual update
     HolidaysCancelation=Leave request cancelation
    @@ -101,8 +101,8 @@ LEAVE_SICK=Sick leave
     LEAVE_OTHER=Other leave
     LEAVE_PAID_FR=Paid vacation
     ## Configuration du Module ##
    -LastUpdateCP=Latest automatic update of leaves allocation
    -MonthOfLastMonthlyUpdate=Month of latest automatic update of leaves allocation
    +LastUpdateCP=Latest automatic update of leave allocation
    +MonthOfLastMonthlyUpdate=Month of latest automatic update of leave allocation
     UpdateConfCPOK=Updated successfully.
     Module27130Name= Management of leave requests
     Module27130Desc= Management of leave requests
    @@ -112,7 +112,7 @@ NoticePeriod=Notice period
     HolidaysToValidate=Validate leave requests
     HolidaysToValidateBody=Below is a leave request to validate
     HolidaysToValidateDelay=This leave request will take place within a period of less than %s days.
    -HolidaysToValidateAlertSolde=The user who made this leave reques do not have enough available days.
    +HolidaysToValidateAlertSolde=The user who made this leave request does have enough available days.
     HolidaysValidated=Validated leave requests
     HolidaysValidatedBody=Your leave request for %s to %s has been validated.
     HolidaysRefused=Request denied
    @@ -121,4 +121,9 @@ HolidaysCanceled=Canceled leaved request
     HolidaysCanceledBody=Your leave request for %s to %s has been canceled.
     FollowedByACounter=1: This type of leave need to be followed by a counter. Counter is incremented manually or automatically and when a leave request is validated, counter is decremented.<br>0: Not followed by a counter.
     NoLeaveWithCounterDefined=There is no leave types defined that need to be followed by a counter
    -GoIntoDictionaryHolidayTypes=Go into <strong>Home - Setup - Dictionaries - Type of leaves</strong> to setup the different types of leaves.
    +GoIntoDictionaryHolidayTypes=Go into <strong>Home - Setup - Dictionaries - Type of leave</strong> to setup the different types of leaves.
    +HolidaySetup=Setup of module Holiday
    +HolidaysNumberingModules=Leave requests numbering models
    +TemplatePDFHolidays=Template for leave requests PDF
    +FreeLegalTextOnHolidays=Free text on PDF
    +WatermarkOnDraftHolidayCards=Watermarks on draft leave requests
    \ No newline at end of file
    diff --git a/htdocs/langs/en_US/hrm.lang b/htdocs/langs/en_US/hrm.lang
    index 3889c73dbbb..12bb1592cbc 100644
    --- a/htdocs/langs/en_US/hrm.lang
    +++ b/htdocs/langs/en_US/hrm.lang
    @@ -5,7 +5,7 @@ Establishments=Establishments
     Establishment=Establishment
     NewEstablishment=New establishment
     DeleteEstablishment=Delete establishment
    -ConfirmDeleteEstablishment=Are-you sure to delete this establishment?
    +ConfirmDeleteEstablishment=Are you sure you wish to delete this establishment?
     OpenEtablishment=Open establishment
     CloseEtablishment=Close establishment
     # Dictionary
    diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang
    index 00d4be864ff..bcca348c861 100644
    --- a/htdocs/langs/en_US/install.lang
    +++ b/htdocs/langs/en_US/install.lang
    @@ -2,37 +2,37 @@
     InstallEasy=Just follow the instructions step by step.
     MiscellaneousChecks=Prerequisites check
     ConfFileExists=Configuration file <b>%s</b> exists.
    -ConfFileDoesNotExistsAndCouldNotBeCreated=Configuration file <b>%s</b> does not exist and could not be created !
    +ConfFileDoesNotExistsAndCouldNotBeCreated=Configuration file <b>%s</b> does not exist and could not be created!
     ConfFileCouldBeCreated=Configuration file <b>%s</b> could be created.
    -ConfFileIsNotWritable=Configuration file <b>%s</b> is not writable. Check permissions. For first install, your web server must be granted to be able to write into this file during configuration process ("chmod 666" for example on a Unix like OS).
    +ConfFileIsNotWritable=Configuration file <b>%s</b> is not writable. Check permissions. For first install, your web server must be able to write into this file during configuration process ("chmod 666" for example on a Unix like OS).
     ConfFileIsWritable=Configuration file <b>%s</b> is writable.
     ConfFileMustBeAFileNotADir=Configuration file <b>%s</b> must be a file, not a directory.
    -ConfFileReload=Reload all information from configuration file.
    +ConfFileReload=Reloading parameters from configuration file.
     PHPSupportSessions=This PHP supports sessions.
     PHPSupportPOSTGETOk=This PHP supports variables POST and GET.
    -PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check your parameter <b>variables_order</b> in php.ini.
    -PHPSupportGD=This PHP support GD graphical functions.
    -PHPSupportCurl=This PHP support Curl.
    -PHPSupportUTF8=This PHP support UTF8 functions.
    +PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check the parameter <b>variables_order</b> in php.ini.
    +PHPSupportGD=This PHP supports GD graphical functions.
    +PHPSupportCurl=This PHP supports Curl.
    +PHPSupportUTF8=This PHP supports UTF8 functions.
     PHPMemoryOK=Your PHP max session memory is set to <b>%s</b>. This should be enough.
    -PHPMemoryTooLow=Your PHP max session memory is set to <b>%s</b> bytes. This should be too low. Change your <b>php.ini</b> to set <b>memory_limit</b> parameter to at least <b>%s</b> bytes.
    -Recheck=Click here for a more significative test
    -ErrorPHPDoesNotSupportSessions=Your PHP installation does not support sessions. This feature is required to make Dolibarr working. Check your PHP setup.
    -ErrorPHPDoesNotSupportGD=Your PHP installation does not support graphical function GD. No graph will be available.
    +PHPMemoryTooLow=Your PHP max session memory is set to <b>%s</b> bytes. This is too low. Change your <b>php.ini</b> to set <b>memory_limit</b> parameter to at least <b>%s</b> bytes.
    +Recheck=Click here for a more detailed test
    +ErrorPHPDoesNotSupportSessions=Your PHP installation does not support sessions. This feature is required to allow Dolibarr to work. Check your PHP setup and permissions of the sessions directory.
    +ErrorPHPDoesNotSupportGD=Your PHP installation does not support GD graphical functions. No graphs will be available.
     ErrorPHPDoesNotSupportCurl=Your PHP installation does not support Curl.
    -ErrorPHPDoesNotSupportUTF8=Your PHP installation does not support UTF8 functions. Dolibarr can't work correctly. Solve this before installing Dolibarr.
    +ErrorPHPDoesNotSupportUTF8=Your PHP installation does not support UTF8 functions. Dolibarr cannot work correctly. Resolve this before installing Dolibarr.
     ErrorDirDoesNotExists=Directory %s does not exist.
    -ErrorGoBackAndCorrectParameters=Go backward and correct wrong parameters.
    +ErrorGoBackAndCorrectParameters=Go back and check/correct the parameters.
     ErrorWrongValueForParameter=You may have typed a wrong value for parameter '%s'.
     ErrorFailedToCreateDatabase=Failed to create database '%s'.
     ErrorFailedToConnectToDatabase=Failed to connect to database '%s'.
     ErrorDatabaseVersionTooLow=Database version (%s) too old. Version %s or higher is required.
     ErrorPHPVersionTooLow=PHP version too old. Version %s is required.
    -ErrorConnectedButDatabaseNotFound=Connection to server successfull but database '%s' not found.
    +ErrorConnectedButDatabaseNotFound=Connection to server successful but database '%s' not found.
     ErrorDatabaseAlreadyExists=Database '%s' already exists.
    -IfDatabaseNotExistsGoBackAndUncheckCreate=If database does not exists, go back and check option "Create database".
    +IfDatabaseNotExistsGoBackAndUncheckCreate=If the database does not exist, go back and check option "Create database".
     IfDatabaseExistsGoBackAndCheckCreate=If database already exists, go back and uncheck "Create database" option.
    -WarningBrowserTooOld=Too old version of browser. Upgrading your browser to a recent version of Firefox, Chrome or Opera is highly recommanded.
    +WarningBrowserTooOld=Version of browser is too old. Upgrading your browser to a recent version of Firefox, Chrome or Opera is highly recommended.
     PHPVersion=PHP Version
     License=Using license
     ConfigurationFile=Configuration file
    @@ -45,22 +45,23 @@ DolibarrDatabase=Dolibarr Database
     DatabaseType=Database type
     DriverType=Driver type
     Server=Server
    -ServerAddressDescription=Name or ip address for database server, usually 'localhost' when database server is hosted on same server than web server
    +ServerAddressDescription=Name or ip address for the database server. Usually 'localhost' when the database server is hosted on the same server as the web server.
     ServerPortDescription=Database server port. Keep empty if unknown.
     DatabaseServer=Database server
     DatabaseName=Database name
    -DatabasePrefix=Database prefix table
    -AdminLogin=Login for Dolibarr database owner.
    -PasswordAgain=Retype password a second time
    +DatabasePrefix=Database table prefix
    +DatabasePrefixDescription=Database table prefix. If empty, defaults to llx_.
    +AdminLogin=User account for the Dolibarr database owner.
    +PasswordAgain=Retype password confirmation
     AdminPassword=Password for Dolibarr database owner.
     CreateDatabase=Create database
    -CreateUser=Create owner or grant him permission on database
    +CreateUser=Create user account or grant user account permission on the Dolibarr database
     DatabaseSuperUserAccess=Database server - Superuser access
    -CheckToCreateDatabase=Check box if database does not exist and must be created.<br>In this case, you must fill the login/password for superuser account at the bottom of this page.
    -CheckToCreateUser=Check box if database owner does not exist and must be created, or if it exists but database does not exists and permissions must be granted.<br>In this case, you must choose its login and password and also fill the login/password for the superuser account at the bottom of this page. If this box is unchecked, owner database and its passwords must exists.
    -DatabaseRootLoginDescription=Login of the user allowed to create new databases or new users, mandatory if your database or its owner does not already exists.
    -KeepEmptyIfNoPassword=Leave empty if user has no password (avoid this)
    -SaveConfigurationFile=Save values
    +CheckToCreateDatabase=Check the box if the database does not exist yet and so must be created.<br>In this case, you must also fill in the user name and password for the superuser account at the bottom of this page.
    +CheckToCreateUser=Check the box if:<br>the database user account does not yet exist and so must be created, or<br>if the user account exists but the database does not exist and permissions must be granted.<br>In this case, you must enter the user account and password and <b>also</b> the superuser account name and password at the bottom of this page. If this box is unchecked, database owner and password must already exist.
    +DatabaseRootLoginDescription=Superuser account name (to create new databases or new users), mandatory if the database or its owner does not already exist.
    +KeepEmptyIfNoPassword=Leave empty if superuser has no password (NOT recommended)
    +SaveConfigurationFile=Saving parameters to
     ServerConnection=Server connection
     DatabaseCreation=Database creation
     CreateDatabaseObjects=Database objects creation
    @@ -71,9 +72,9 @@ CreateOtherKeysForTable=Create foreign keys and indexes for table %s
     OtherKeysCreation=Foreign keys and indexes creation
     FunctionsCreation=Functions creation
     AdminAccountCreation=Administrator login creation
    -PleaseTypePassword=Please type a password, empty passwords are not allowed !
    -PleaseTypeALogin=Please type a login !
    -PasswordsMismatch=Passwords differs, please try again !
    +PleaseTypePassword=Please type a password, empty passwords are not allowed!
    +PleaseTypeALogin=Please type a login!
    +PasswordsMismatch=Passwords differs, please try again!
     SetupEnd=End of setup
     SystemIsInstalled=This installation is complete.
     SystemIsUpgraded=Dolibarr has been upgraded successfully.
    @@ -81,65 +82,65 @@ YouNeedToPersonalizeSetup=You need to configure Dolibarr to suit your needs (app
     AdminLoginCreatedSuccessfuly=Dolibarr administrator login '<b>%s</b>' created successfully.
     GoToDolibarr=Go to Dolibarr
     GoToSetupArea=Go to Dolibarr (setup area)
    -MigrationNotFinished=Version of your database is not completely up to date, so you'll have to run the upgrade process again. 
    +MigrationNotFinished=The database version is not completely up to date: run the upgrade process again.
     GoToUpgradePage=Go to upgrade page again
     WithNoSlashAtTheEnd=Without the slash "/" at the end
    -DirectoryRecommendation=It is recommanded to use a directory outside of your directory of your web pages.
    +DirectoryRecommendation=It is recommended to use a directory outside of the web pages.
     LoginAlreadyExists=Already exists
     DolibarrAdminLogin=Dolibarr admin login
    -AdminLoginAlreadyExists=Dolibarr administrator account '<b>%s</b>' already exists. Go back, if you want to create another one.
    +AdminLoginAlreadyExists=Dolibarr administrator account '<b>%s</b>' already exists. Go back if you want to create another one.
     FailedToCreateAdminLogin=Failed to create Dolibarr administrator account.
    -WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, to avoid using install tools again, you should add a file called <b>install.lock</b> into Dolibarr document directory, in order to avoid malicious use of it.
    -FunctionNotAvailableInThisPHP=Not available on this PHP
    +WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should add a file called <b>install.lock</b> into the Dolibarr document directory in order to prevent the accidental/malicious use of the install tools again.
    +FunctionNotAvailableInThisPHP=Not available in this PHP
     ChoosedMigrateScript=Choose migration script
     DataMigration=Database migration (data)
     DatabaseMigration=Database migration (structure + some data)
     ProcessMigrateScript=Script processing
     ChooseYourSetupMode=Choose your setup mode and click "Start"...
     FreshInstall=Fresh install
    -FreshInstallDesc=Use this mode if this is your first install. If not, this mode can repair a incomplete previous install, but if you want to upgrade your version, choose "Upgrade" mode.
    +FreshInstallDesc=Use this mode if this is your first install. If not, this mode can repair a incomplete previous install. If you want to upgrade your version, choose "Upgrade" mode.
     Upgrade=Upgrade
     UpgradeDesc=Use this mode if you have replaced old Dolibarr files with files from a newer version. This will upgrade your database and data.
     Start=Start
     InstallNotAllowed=Setup not allowed by <b>conf.php</b> permissions
     YouMustCreateWithPermission=You must create file %s and set write permissions on it for the web server during install process.
    -CorrectProblemAndReloadPage=Please fix the problem and press F5 to reload page.
    +CorrectProblemAndReloadPage=Please fix the problem and press F5 to reload the page.
     AlreadyDone=Already migrated
     DatabaseVersion=Database version
     ServerVersion=Database server version
     YouMustCreateItAndAllowServerToWrite=You must create this directory and allow for the web server to write into it.
     DBSortingCollation=Character sorting order
    -YouAskDatabaseCreationSoDolibarrNeedToConnect=You ask to create database <b>%s</b>, but for this, Dolibarr need to connect to server <b>%s</b> with super user <b>%s</b> permissions.
    -YouAskLoginCreationSoDolibarrNeedToConnect=You ask to create database login <b>%s</b>, but for this, Dolibarr need to connect to server <b>%s</b> with super user <b>%s</b> permissions.
    -BecauseConnectionFailedParametersMayBeWrong=As connection failed, host or super user parameters must be wrong.
    +YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database <b>%s</b>, but for this, Dolibarr needs to connect to server <b>%s</b> with super user <b>%s</b> permissions.
    +YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user <b>%s</b>, but for this, Dolibarr needs to connect to server <b>%s</b> with super user <b>%s</b> permissions.
    +BecauseConnectionFailedParametersMayBeWrong=The database connection failed: the host or super user parameters must be wrong.
     OrphelinsPaymentsDetectedByMethod=Orphans payment detected by method %s
     RemoveItManuallyAndPressF5ToContinue=Remove it manually and press F5 to continue.
     FieldRenamed=Field renamed
    -IfLoginDoesNotExistsCheckCreateUser=If login does not exists yet, you must check option "Create user"
    -ErrorConnection=Server "<b>%s</b>", database name "<b>%s</b>", login "<b>%s</b>", or database password may be wrong or PHP client version may be too old compared to database version.
    +IfLoginDoesNotExistsCheckCreateUser=If the user does not exist yet, you must check option "Create user"
    +ErrorConnection=Server "<b>%s</b>", database name "<b>%s</b>", login "<b>%s</b>", or database password may be wrong or the PHP client version may be too old compared to the database version.
     InstallChoiceRecommanded=Recommended choice to install version <b>%s</b> from your current version <b>%s</b>
     InstallChoiceSuggested=<b>Install choice suggested by installer</b>.
    -MigrateIsDoneStepByStep=The targeted version (%s) has a gap of several versions, so install wizard will come back to suggest next migration once this one will be finished.
    -CheckThatDatabasenameIsCorrect=Check that database name "<b>%s</b>" is correct.
    +MigrateIsDoneStepByStep=The targeted version (%s) has a gap of several versions. The install wizard will come back to suggest a further migration once this one is complete.
    +CheckThatDatabasenameIsCorrect=Check that the database name "<b>%s</b>" is correct.
     IfAlreadyExistsCheckOption=If this name is correct and that database does not exist yet, you must check option "Create database".
     OpenBaseDir=PHP openbasedir parameter
    -YouAskToCreateDatabaseSoRootRequired=You checked the box "Create database". For this, you need to provide login/password of superuser (bottom of form).
    -YouAskToCreateDatabaseUserSoRootRequired=You checked the box "Create database owner". For this, you need to provide login/password of superuser (bottom of form).
    -NextStepMightLastALongTime=Current step may last several minutes. Please wait until the next screen is shown completely before continuing.
    -MigrationCustomerOrderShipping=Migrate shipping for customer orders storage 
    -MigrationShippingDelivery=Upgrade storage of shipping 
    -MigrationShippingDelivery2=Upgrade storage of shipping 2 
    +YouAskToCreateDatabaseSoRootRequired=You checked the box "Create database". For this, you need to provide the login/password of superuser (bottom of form).
    +YouAskToCreateDatabaseUserSoRootRequired=You checked the box "Create database owner". For this, you need to provide the login/password of superuser (bottom of form).
    +NextStepMightLastALongTime=The current step may take several minutes. Please wait until the next screen is shown completely before continuing.
    +MigrationCustomerOrderShipping=Migrate shipping for customer orders storage
    +MigrationShippingDelivery=Upgrade storage of shipping
    +MigrationShippingDelivery2=Upgrade storage of shipping 2
     MigrationFinished=Migration finished
    -LastStepDesc=<strong>Last step</strong>: Define here login and password you plan to use to connect to software. Do not loose this as it is the account to administer all others.
    +LastStepDesc=<strong>Last step</strong>: Define here the login and password you wish to use to connect to Dolibarr. <b>Do not lose this as it is the master account to administer all other/additional user accounts.</b>
     ActivateModule=Activate module %s
     ShowEditTechnicalParameters=Click here to show/edit advanced parameters (expert mode)
    -WarningUpgrade=Warning:\nDid your run a database backup first?\nThis is highly recommanded: for example, due to some bugs into databases systems (for example mysql version 5.5.40/41/42/43), some data or tables may be lost during this process, so it is highly recommanded to have a complete dump of your database before starting migration.\n\nClick OK to start migration process...
    -ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug making data loss if you make structure change on your database, like it is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a higher fixed version (list of known bugged version: %s) 
    -KeepDefaultValuesWamp=You use the Dolibarr setup wizard from DoliWamp, so values proposed here are already optimized. Change them only if you know what you do.
    -KeepDefaultValuesDeb=You use the Dolibarr setup wizard from a Linux package (Ubuntu, Debian, Fedora...), so values proposed here are already optimized. Only the password of the database owner to create must be completed. Change other parameters only if you know what you do.
    -KeepDefaultValuesMamp=You use the Dolibarr setup wizard from DoliMamp, so values proposed here are already optimized. Change them only if you know what you do.
    -KeepDefaultValuesProxmox=You use the Dolibarr setup wizard from a Proxmox virtual appliance, so values proposed here are already optimized. Change them only if you know what you do.
    -UpgradeExternalModule=Run dedicated upgrade process of external modules
    +WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process...
    +ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug, making data loss possible if you make structural changes in your database, such as is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a layer (patched) version (list of known buggy versions: %s)
    +KeepDefaultValuesWamp=You used the Dolibarr setup wizard from DoliWamp, so values proposed here are already optimized. Change them only if you know what you are doing.
    +KeepDefaultValuesDeb=You used the Dolibarr setup wizard from a Linux package (Ubuntu, Debian, Fedora...), so the values proposed here are already optimized. Only the password of the database owner to create must be entered. Change other parameters only if you know what you are doing.
    +KeepDefaultValuesMamp=You used the Dolibarr setup wizard from DoliMamp, so the values proposed here are already optimized. Change them only if you know what you are doing.
    +KeepDefaultValuesProxmox=You used the Dolibarr setup wizard from a Proxmox virtual appliance, so the values proposed here are already optimized. Change them only if you know what you are doing.
    +UpgradeExternalModule=Run dedicated upgrade process of external module
     SetAtLeastOneOptionAsUrlParameter=Set at least one option as a parameter in URL. For example:  '...repair.php?standard=confirmed'
     NothingToDelete=Nothing to clean/delete
     NothingToDo=Nothing to do
    @@ -151,7 +152,7 @@ MigrationSupplierOrder=Data migration for vendor's orders
     MigrationProposal=Data migration for commercial proposals
     MigrationInvoice=Data migration for customer's invoices
     MigrationContract=Data migration for contracts
    -MigrationSuccessfullUpdate=Upgrade successfull
    +MigrationSuccessfullUpdate=Upgrade successful
     MigrationUpdateFailed=Failed upgrade process
     MigrationRelationshipTables=Data migration for relationship tables (%s)
     MigrationPaymentsUpdate=Payment data correction
    @@ -163,9 +164,9 @@ MigrationContractsUpdate=Contract data correction
     MigrationContractsNumberToUpdate=%s contract(s) to update
     MigrationContractsLineCreation=Create contract line for contract ref %s
     MigrationContractsNothingToUpdate=No more things to do
    -MigrationContractsFieldDontExist=Field fk_facture does not exists anymore. Nothing to do.
    +MigrationContractsFieldDontExist=Field fk_facture does not exist anymore. Nothing to do.
     MigrationContractsEmptyDatesUpdate=Contract empty date correction
    -MigrationContractsEmptyDatesUpdateSuccess=Contract emtpy date correction done successfully
    +MigrationContractsEmptyDatesUpdateSuccess=Contract empty date correction done successfully
     MigrationContractsEmptyDatesNothingToUpdate=No contract empty date to correct
     MigrationContractsEmptyCreationDatesNothingToUpdate=No contract creation date to correct
     MigrationContractsInvalidDatesUpdate=Bad value date contract correction
    @@ -187,24 +188,24 @@ MigrationDeliveryDetail=Delivery update
     MigrationStockDetail=Update stock value of products
     MigrationMenusDetail=Update dynamic menus tables
     MigrationDeliveryAddress=Update delivery address in shipments
    -MigrationProjectTaskActors=Data migration for llx_projet_task_actors table
    +MigrationProjectTaskActors=Data migration for table llx_projet_task_actors
     MigrationProjectUserResp=Data migration field fk_user_resp of llx_projet to llx_element_contact
     MigrationProjectTaskTime=Update time spent in seconds
     MigrationActioncommElement=Update data on actions
     MigrationPaymentMode=Data migration for payment mode
     MigrationCategorieAssociation=Migration of categories
    -MigrationEvents=Migration of events to add event owner into assignement table
    -MigrationEventsContact=Migration of events to add event contact into assignement table
    +MigrationEvents=Migration of events to add event owner into assignment table
    +MigrationEventsContact=Migration of events to add event contact into assignment table
     MigrationRemiseEntity=Update entity field value of llx_societe_remise
     MigrationRemiseExceptEntity=Update entity field value of llx_societe_remise_except
     MigrationUserRightsEntity=Update entity field value of llx_user_rights
     MigrationUserGroupRightsEntity=Update entity field value of llx_usergroup_rights
     MigrationReloadModule=Reload module %s
     MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
    -ShowNotAvailableOptions=Show not available options
    -HideNotAvailableOptions=Hide not available options
    -ErrorFoundDuringMigration=Error were reported during migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but application or some features may not work correctly until fixed.
    -YouTryInstallDisabledByDirLock=The application try to sefl upgrade, but install/upgrade pages have been disabled for security reason (directory renamed with .lock suffix).<br>
    -YouTryInstallDisabledByFileLock=The application try to sefl upgrade, but install/upgrade pages pages have been disabled for security reason (by lock file <strong>install.lock</strong> into dolibarr documents directory).<br>
    +ShowNotAvailableOptions=Show unavailable options
    +HideNotAvailableOptions=Hide unavailable options
    +ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.
    +YouTryInstallDisabledByDirLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (directory renamed with .lock suffix).<br>
    +YouTryInstallDisabledByFileLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (by the existence of a lock file <strong>install.lock</strong> in the dolibarr documents directory).<br>
     ClickHereToGoToApp=Click here to go to your application
    -ClickOnLinkOrRemoveManualy=Click on following link and if you always reach this page, you must remove the file install.lock into documents directory manually
    \ No newline at end of file
    +ClickOnLinkOrRemoveManualy=Click on the following link. If you always see this same page, you must remove/rename the file install.lock in the documents directory.
    diff --git a/htdocs/langs/en_US/interventions.lang b/htdocs/langs/en_US/interventions.lang
    index 604d51c41b9..a130367b14f 100644
    --- a/htdocs/langs/en_US/interventions.lang
    +++ b/htdocs/langs/en_US/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    diff --git a/htdocs/langs/en_US/languages.lang b/htdocs/langs/en_US/languages.lang
    index a062883d667..99c9b6486e0 100644
    --- a/htdocs/langs/en_US/languages.lang
    +++ b/htdocs/langs/en_US/languages.lang
    @@ -86,3 +86,4 @@ Language_uz_UZ=Uzbek
     Language_vi_VN=Vietnamese
     Language_zh_CN=Chinese
     Language_zh_TW=Chinese (Traditional)
    +Language_bh_MY=Malay
    diff --git a/htdocs/langs/en_US/ldap.lang b/htdocs/langs/en_US/ldap.lang
    index 67824ccd237..abe11602147 100644
    --- a/htdocs/langs/en_US/ldap.lang
    +++ b/htdocs/langs/en_US/ldap.lang
    @@ -24,4 +24,4 @@ MemberTypeSynchronized=Member type synchronized
     ContactSynchronized=Contact synchronized
     ForceSynchronize=Force synchronizing Dolibarr -> LDAP
     ErrorFailedToReadLDAP=Failed to read LDAP database. Check LDAP module setup and database accessibility.
    -PasswordOfUserInLDAP=Password of user in LDAP
    \ No newline at end of file
    +PasswordOfUserInLDAP=Password of user in LDAP
    diff --git a/htdocs/langs/en_US/link.lang b/htdocs/langs/en_US/link.lang
    index 77a1814f1ca..fdcf07aeff4 100644
    --- a/htdocs/langs/en_US/link.lang
    +++ b/htdocs/langs/en_US/link.lang
    @@ -7,4 +7,4 @@ ErrorFileNotLinked=The file could not be linked
     LinkRemoved=The link %s has been removed
     ErrorFailedToDeleteLink= Failed to remove link '<b>%s</b>'
     ErrorFailedToUpdateLink= Failed to update link '<b>%s</b>'
    -URLToLink=URL to link
    \ No newline at end of file
    +URLToLink=URL to link
    diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang
    index 23fc671e9b1..d4f835874e7 100644
    --- a/htdocs/langs/en_US/mails.lang
    +++ b/htdocs/langs/en_US/mails.lang
    @@ -33,7 +33,7 @@ ValidMailing=Valid emailing
     MailingStatusDraft=Draft
     MailingStatusValidated=Validated
     MailingStatusSent=Sent
    -MailingStatusSentPartialy=Sent partialy
    +MailingStatusSentPartialy=Sent partially
     MailingStatusSentCompletely=Sent completely
     MailingStatusError=Error
     MailingStatusNotSent=Not sent
    @@ -45,7 +45,7 @@ MailingStatusReadAndUnsubscribe=Read and unsubscribe
     ErrorMailRecipientIsEmpty=Email recipient is empty
     WarningNoEMailsAdded=No new Email to add to recipient's list.
     ConfirmValidMailing=Are you sure you want to validate this emailing?
    -ConfirmResetMailing=Warning, by reinitializing emailing <b>%s</b>, you will allow resending this email in a mass mailing. Are you sure you this is what you want to do?
    +ConfirmResetMailing=Warning, by re-initializing emailing <b>%s</b> , you will allow resending this email in a mass mailing. Are you sure you want to do this?
     ConfirmDeleteMailing=Are you sure you want to delete this emailing?
     NbOfUniqueEMails=No. of unique emails
     NbOfEMails=No. of EMails
    @@ -66,16 +66,16 @@ DateLastSend=Date of latest sending
     DateSending=Date sending
     SentTo=Sent to <b>%s</b>
     MailingStatusRead=Read
    -YourMailUnsubcribeOK=The email <b>%s</b>  is correctly unsubcribe from mailing list
    -ActivateCheckReadKey=Key used to encrypt URL used for "Read Receipt" and "Unsubcribe" feature
    +YourMailUnsubcribeOK=The email <b>%s</b>  is correctly unsubscribe from mailing list
    +ActivateCheckReadKey=Key used to encrypt URL used for "Read Receipt" and "Unsubscribe" feature
     EMailSentToNRecipients=EMail sent to %s recipients.
     EMailSentForNElements=EMail sent for %s elements.
     XTargetsAdded=<b>%s</b> recipients added into target list
    -OnlyPDFattachmentSupported=If the PDF documents were already generated for the objects to send, they will be attached to email. If not, no email will be sent (also, note that only pdf documents are supported as attachment in mass sending in this version).
    +OnlyPDFattachmentSupported=If the PDF documents were already generated for the objects to send, they will be attached to email. If not, no email will be sent (also, note that only pdf documents are supported as attachments in mass sending in this version).
     AllRecipientSelected=The recipients of the %s record selected (if their email is known).
     GroupEmails=Group emails
     OneEmailPerRecipient=One email per recipient (by default, one email per record selected)
    -WarningIfYouCheckOneRecipientPerEmail=Warning, if you check this box, it means only one email will be sent for several different record selected, so, if your message contains substitution variables that refers to data of a record, it becomes not possible to replace them. 
    +WarningIfYouCheckOneRecipientPerEmail=Warning, if you check this box, it means only one email will be sent for several different record selected, so, if your message contains substitution variables that refers to data of a record, it becomes not possible to replace them.
     ResultOfMailSending=Result of mass EMail sending
     NbSelected=No. selected
     NbIgnored=No. ignored
    @@ -105,7 +105,7 @@ SearchAMailing=Search mailing
     SendMailing=Send emailing
     SentBy=Sent by
     MailingNeedCommand=Sending an emailing can be performed from command line. Ask your server administrator to launch the following command to send the emailing to all recipients:
    -MailingNeedCommand2=You can however send them online by adding parameter MAILING_LIMIT_SENDBYWEB with value of max number of emails you want to send by session. For this, go on Home - Setup - Other. 
    +MailingNeedCommand2=You can however send them online by adding parameter MAILING_LIMIT_SENDBYWEB with value of max number of emails you want to send by session. For this, go on Home - Setup - Other.
     ConfirmSendingEmailing=If you want to send emailing directly from this screen, please confirm you are sure you want to send emailing now from your browser ?
     LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, <b>%s</b> recipients at a time for each sending session.
     TargetsReset=Clear list
    @@ -121,7 +121,7 @@ TagUnsubscribe=Unsubscribe link
     TagSignature=Signature of sending user
     EMailRecipient=Recipient EMail
     TagMailtoEmail=Recipient EMail (including html "mailto:" link)
    -NoEmailSentBadSenderOrRecipientEmail=No email sent. Bad sender or recipient email. Verify user profile. 
    +NoEmailSentBadSenderOrRecipientEmail=No email sent. Bad sender or recipient email. Verify user profile.
     # Module Notifications
     Notifications=Notifications
     NoNotificationsWillBeSent=No email notifications are planned for this event and company
    @@ -133,13 +133,13 @@ ListOfNotificationsDone=List all email notifications sent
     MailSendSetupIs=Configuration of email sending has been setup to '%s'. This mode can't be used to send mass emailing.
     MailSendSetupIs2=You must first go, with an admin account, into menu %sHome - Setup - EMails%s to change parameter <strong>'%s'</strong> to use mode '%s'. With this mode, you can enter setup of the SMTP server provided by your Internet Service Provider and use Mass emailing feature.
     MailSendSetupIs3=If you have any questions on how to setup your SMTP server, you can ask to %s.
    -YouCanAlsoUseSupervisorKeyword=You can also add the keyword <strong>__SUPERVISOREMAIL__</strong> to have email being sent to the supervisor of user (works only if an email is defined for this supervisor) 
    +YouCanAlsoUseSupervisorKeyword=You can also add the keyword <strong>__SUPERVISOREMAIL__</strong> to have email being sent to the supervisor of user (works only if an email is defined for this supervisor)
     NbOfTargetedContacts=Current number of targeted contact emails
     UseFormatFileEmailToTarget=Imported file must have format <strong>email;name;firstname;other</strong>
     UseFormatInputEmailToTarget=Enter a string with format <strong>email;name;firstname;other</strong>
     MailAdvTargetRecipients=Recipients (advanced selection)
     AdvTgtTitle=Fill input fields to preselect the third parties or contacts/addresses to target
    -AdvTgtSearchTextHelp=Use %% as magic caracters. For exemple to find all item like <b>jean, joe, jim</b>, you can input <b>j%%</b>, you can also use ; as separator for value, and use ! for except this value. For exemple  <b>jean;joe;jim%%;!jimo;!jima%</b> will target all jean, joe, start with jim but not jimo and not everythnig taht start by jima 
    +AdvTgtSearchTextHelp=Use %% as wildcards. For example to find all item like <b>jean, joe, jim</b>, you can input <b>j%%</b>, you can also use ; as separator for value, and use ! for except this value. For example  <b>jean;joe;jim%%;!jimo;!jima%</b> will target all jean, joe, start with jim but not jimo and not everything that starts with jima
     AdvTgtSearchIntHelp=Use interval to select int or float value
     AdvTgtMinVal=Minimum value
     AdvTgtMaxVal=Maximum value
    @@ -153,7 +153,7 @@ AddAll=Add all
     RemoveAll=Remove all
     ItemsCount=Item(s)
     AdvTgtNameTemplate=Filter name
    -AdvTgtAddContact=Add emails according to criterias
    +AdvTgtAddContact=Add emails according to criteria
     AdvTgtLoadFilter=Load filter
     AdvTgtDeleteFilter=Delete filter
     AdvTgtSaveFilter=Save filter
    @@ -166,4 +166,4 @@ InGoingEmailSetup=Incoming email setup
     OutGoingEmailSetupForEmailing=Outgoing email setup (for mass emailing)
     DefaultOutgoingEmailSetup=Default outgoing email setup
     Information=Information
    -ContactsWithThirdpartyFilter=Contacts avec filtre client
    +ContactsWithThirdpartyFilter=Contacts with third party filter
    diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang
    index b52301bd3fe..233b9bba076 100644
    --- a/htdocs/langs/en_US/main.lang
    +++ b/htdocs/langs/en_US/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,7 +78,7 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
     NbOfEntries=No. of entries
    @@ -154,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -232,7 +232,7 @@ Numero=Number
     Limit=Limit
     Limits=Limits
     Logout=Logout
    -NoLogoutProcessWithAuthMode=No applicative disconnect feature with authentication mode <b>%s</b> 
    +NoLogoutProcessWithAuthMode=No applicative disconnect feature with authentication mode <b>%s</b>
     Connection=Login
     Setup=Setup
     Alert=Alert
    @@ -348,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -429,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -445,7 +445,7 @@ Completed=Completed
     Running=In progress
     RequestAlreadyDone=Request already recorded
     Filter=Filter
    -FilterOnInto=Search criteria '<strong>%s</strong>' into fields %s 
    +FilterOnInto=Search criteria '<strong>%s</strong>' into fields %s
     RemoveFilter=Remove filter
     ChartGenerated=Chart generated
     ChartNotGenerated=Chart not generated
    @@ -469,7 +469,7 @@ and=and
     or=or
     Other=Other
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -507,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -531,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -647,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -671,14 +661,14 @@ Method=Method
     Receive=Receive
     CompleteOrNoMoreReceptionExpected=Complete or nothing more expected
     ExpectedValue=Expected Value
    -CurrentValue=Current Value
    +CurrentValue=Current value
     PartialWoman=Partial
     TotalWoman=Total
     NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -704,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -717,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -733,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -760,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -804,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -820,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -843,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>. 
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -863,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
     EMailTemplates=Email templates
    -FileNotShared=File not shared to exernal public
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -929,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -947,6 +949,8 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
     SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    +Inventory=Inventory
    diff --git a/htdocs/langs/en_US/margins.lang b/htdocs/langs/en_US/margins.lang
    index b9d52dcfdc6..167e316703c 100644
    --- a/htdocs/langs/en_US/margins.lang
    +++ b/htdocs/langs/en_US/margins.lang
    @@ -41,4 +41,4 @@ rateMustBeNumeric=Rate must be a numeric value
     markRateShouldBeLesserThan100=Mark rate should be lower than 100
     ShowMarginInfos=Show margin infos
     CheckMargins=Margins detail
    -MarginPerSaleRepresentativeWarning=The report of margin per user use the link between third parties and sale representatives to calculate the margin of each sale representative. Because some thirdparties may not have any ddiated sale representative and some thirdparties may be linked to several, some amounts may not be included into this report (if there is no sale representative) and some may appear on different lines (for each sale representative).
    +MarginPerSaleRepresentativeWarning=The report of margin per user use the link between third parties and sale representatives to calculate the margin of each sale representative. Because some thirdparties may not have any dedicated sale representative and some third parties may be linked to several, some amounts may not be included into this report (if there is no sale representative) and some may appear on different lines (for each sale representative).
    diff --git a/htdocs/langs/en_US/members.lang b/htdocs/langs/en_US/members.lang
    index b74ad44b45f..e28f242d964 100644
    --- a/htdocs/langs/en_US/members.lang
    +++ b/htdocs/langs/en_US/members.lang
    @@ -33,7 +33,7 @@ DateSubscription=Subscription date
     DateEndSubscription=Subscription end date
     EndSubscription=End subscription
     SubscriptionId=Subscription id
    -MemberId=Member id 
    +MemberId=Member id
     NewMember=New member
     MemberType=Member type
     MemberTypeId=Member type id
    @@ -61,7 +61,7 @@ ConfirmDeleteMemberType=Are you sure you want to delete this member type?
     MemberTypeDeleted=Member type deleted
     MemberTypeCanNotBeDeleted=Member type can not be deleted
     NewSubscription=New subscription
    -NewSubscriptionDesc=This form allows you to record your subscription as a new member of the foundation. If you want to renew your subscription (if already a member), please contact foundation board instead by email %s. 
    +NewSubscriptionDesc=This form allows you to record your subscription as a new member of the foundation. If you want to renew your subscription (if already a member), please contact foundation board instead by email %s.
     Subscription=Subscription
     Subscriptions=Subscriptions
     SubscriptionLate=Late
    @@ -88,7 +88,7 @@ ConfirmDeleteSubscription=Are you sure you want to delete this subscription?
     Filehtpasswd=htpasswd file
     ValidateMember=Validate a member
     ConfirmValidateMember=Are you sure you want to validate this member?
    -FollowingLinksArePublic=The following links are open pages not protected by any Dolibarr permission. They are not formated pages, provided as example to show how to list members database. 
    +FollowingLinksArePublic=The following links are open pages not protected by any Dolibarr permission. They are not formatted pages, provided as example to show how to list members database.
     PublicMemberList=Public member list
     BlankSubscriptionForm=Public self-subscription form
     BlankSubscriptionFormDesc=Dolibarr can provide you a public URL/website to allow external visitors to ask to subscribe to the foundation. If an online payment module is enabled, a payment form may also be automatically provided.
    @@ -115,7 +115,7 @@ SendingReminderForExpiredSubscription=Sending reminder for expired subscriptions
     SendingEmailOnCancelation=Sending email on cancelation
     # Topic of email templates
     YourMembershipRequestWasReceived=Your membership was received.
    -YourMembershipWasValidated=Your membership was validated 
    +YourMembershipWasValidated=Your membership was validated
     YourSubscriptionWasRecorded=Your new subscription was recorded
     SubscriptionReminderEmail=Subscription reminder
     YourMembershipWasCanceled=Your membership was canceled
    @@ -125,7 +125,7 @@ ThisIsContentOfYourMembershipRequestWasReceived=We want to let you know that you
     ThisIsContentOfYourMembershipWasValidated=We want to let you know that your membership was validated with the following information:<br><br>
     ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded.<br><br>
     ThisIsContentOfSubscriptionReminderEmail=We want to let you know that your subscription is about to expire or is already expired (__MEMBER_LAST_SUBSCRIPTION_DATE_END__). We hope you can make a renewal of it.<br><br>
    -ThisIsContentOfYourCard=This is a remind of the information we get about you. Feel free to contact us if something looks wrong.<br><br> 
    +ThisIsContentOfYourCard=This is a remind of the information we get about you. Feel free to contact us if something looks wrong.<br><br>
     DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Subject of the e-mail received in case of auto-inscription of a guest
     DescADHERENT_AUTOREGISTER_NOTIF_MAIL=E-mail received in case of auto-inscription of a guest
     DescADHERENT_EMAIL_TEMPLATE_AUTOREGISTER=Template Email to use to send email to a member on member autosubscription
    diff --git a/htdocs/langs/en_US/modulebuilder.lang b/htdocs/langs/en_US/modulebuilder.lang
    index 6638e1fa674..6aef75a5746 100644
    --- a/htdocs/langs/en_US/modulebuilder.lang
    +++ b/htdocs/langs/en_US/modulebuilder.lang
    @@ -1,10 +1,10 @@
     # Dolibarr language file - Source file is en_US - loan
    -ModuleBuilderDesc=This tools must be used by experienced users or developers. It gives you utilities to build or edit your own module (Documentation for alternative <a href="%s" target="_blank">manual development is here</a>).
    +ModuleBuilderDesc=This tool must be used by only by experienced users or developers. It gives you utilities to build or edit your own module.<br>Documentation for alternative <a href="%s" target="_blank">manual development is here</a>.
     EnterNameOfModuleDesc=Enter name of the module/application to create with no spaces. Use uppercase to separate words (For example: MyModule, EcommerceForShop, SyncWithMySystem...)
     EnterNameOfObjectDesc=Enter name of the object to create with no spaces. Use uppercase to separate words (For example: MyObject, Student, Teacher...). The CRUD class file, but also API file, pages to list/add/edit/delete object and SQL files will be generated.
     ModuleBuilderDesc2=Path where modules are generated/edited (first alternative directory defined into %s): <strong>%s</strong>
     ModuleBuilderDesc3=Generated/editable modules found: <strong>%s</strong>
    -ModuleBuilderDesc4=A module is detected as 'editable' when the file <strong>%s</strong> exists in root of module directory 
    +ModuleBuilderDesc4=A module is detected as 'editable' when the file <strong>%s</strong> exists in root of module directory
     NewModule=New module
     NewObject=New object
     ModuleKey=Module key
    @@ -13,7 +13,7 @@ ModuleInitialized=Module initialized
     FilesForObjectInitialized=Files for new object '%s' initialized
     FilesForObjectUpdated=Files for object '%s' updated (.sql files and .class.php file)
     ModuleBuilderDescdescription=Enter here all general information that describe your module.
    -ModuleBuilderDescspecifications=You can enter here a long text to describe the specifications of your module that is not already structured into other tabs. So you have within easy reach all the rules to develop. Also this text content will be included into the generated documentation (see last tab). You can use Markdown format, but it is recommanded to use Asciidoc format (Comparison between .md and .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
    +ModuleBuilderDescspecifications=You can enter here a detailed description of the specifications of your module that is not already structured into other tabs. So you have within easy reach all the rules to develop. Also this text content will be included into the generated documentation (see last tab). You can use Markdown format, but it is recommended to use Asciidoc format (comparison between .md and .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown).
     ModuleBuilderDescobjects=Define here the objects you want to manage with your module. A CRUD DAO class, SQL files, page to list record of objects, to create/edit/view a record and an API will be generated.
     ModuleBuilderDescmenus=This tab is dedicated to define menu entries provided by your module.
     ModuleBuilderDescpermissions=This tab is dedicated to define the new permissions you want to provide with your module.
    @@ -21,12 +21,12 @@ ModuleBuilderDesctriggers=This is the view of triggers provided by your module.
     ModuleBuilderDeschooks=This tab is dedicated to hooks.
     ModuleBuilderDescwidgets=This tab is dedicated to manage/build widgets.
     ModuleBuilderDescbuildpackage=You can generate here a "ready to distribute" package file (a normalized .zip file) of your module and a "ready to distribute" documentation file. Just click on button to build the package or documentation file.
    -EnterNameOfModuleToDeleteDesc=You can delete your module. WARNING: All files of module but also structured data and documentation will be definitly lost !
    -EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All files related to object will be definitly lost !
    +EnterNameOfModuleToDeleteDesc=You can delete your module. WARNING: ALL files of module AND structured data and documentation will be deleted!
    +EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All files related to object will be deleted!
     DangerZone=Danger zone
     BuildPackage=Build package/documentation
     BuildDocumentation=Build documentation
    -ModuleIsNotActive=This module was not activated yet. Go into %s to make it live or click here:
    +ModuleIsNotActive=This module is not activated yet. Go to %s to make it live or click here:
     ModuleIsLive=This module has been activated. Any change on it may break a current active feature.
     DescriptionLong=Long description
     EditorName=Name of editor
    @@ -47,9 +47,9 @@ RegenerateClassAndSql=Erase and regenerate class and sql files
     RegenerateMissingFiles=Generate missing files
     SpecificationFile=File with business rules
     LanguageFile=File for language
    -ConfirmDeleteProperty=Are you sure you want to delete the property <strong>%s</strong> ? This will change code in PHP class but also remove column from table definition of object.
    +ConfirmDeleteProperty=Are you sure you want to delete the property <strong>%s</strong>? This will change code in PHP class but also remove column from table definition of object.
     NotNull=Not NULL
    -NotNullDesc=1=Set database to NOT NULL. -1=Allow null values and force value to NULL if empty ('' or 0). 
    +NotNullDesc=1=Set database to NOT NULL. -1=Allow null values and force value to NULL if empty ('' or 0).
     SearchAll=Used for 'search all'
     DatabaseIndex=Database index
     FileAlreadyExists=File %s already exists
    @@ -66,7 +66,7 @@ PageForLib=File for PHP libraries
     SqlFileExtraFields=Sql file for complementary attributes
     SqlFileKey=Sql file for keys
     AnObjectAlreadyExistWithThisNameAndDiffCase=An object already exists with this name and a different case
    -UseAsciiDocFormat=You can use Markdown format, but it is recommanded to use Asciidoc format (Comparison between .md and .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
    +UseAsciiDocFormat=You can use Markdown format, but it is recommended to use Asciidoc format (omparison between .md and .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
     IsAMeasure=Is a measure
     DirScanned=Directory scanned
     NoTrigger=No trigger
    @@ -74,10 +74,11 @@ NoWidget=No widget
     GoToApiExplorer=Go to API explorer
     ListOfMenusEntries=List of menu entries
     ListOfPermissionsDefined=List of defined permissions
    +SeeExamples=See examples here
     EnabledDesc=Condition to have this field active (Examples: 1 or $conf->global->MYMODULE_MYOPTION)
     VisibleDesc=Is the field visible ? (Examples: 0=Never visible, 1=Visible on list and create/update/view forms, 2=Visible on list only, 3=Visible on create/update/view form only. Using a negative value means field is not shown by default on list but can be selected for viewing)
    -IsAMeasureDesc=Can the value of field be cumulated to get a total into list ? (Examples: 1 or 0)
    -SearchAllDesc=Is the field used to make a search from the quick search tool ? (Examples: 1 or 0)
    +IsAMeasureDesc=Can the value of field be cumulated to get a total into list? (Examples: 1 or 0)
    +SearchAllDesc=Is the field used to make a search from the quick search tool? (Examples: 1 or 0)
     SpecDefDesc=Enter here all documentation you want to provide with your module that is not already defined by other tabs. You can use .md or better, the rich .asciidoc syntax.
     LanguageDefDesc=Enter in this files, all the key and the translation for each language file.
     MenusDefDesc=Define here the menus provided by your module (once defined, they are visible into the menu editor %s)
    @@ -87,11 +88,15 @@ TriggerDefDesc=Define in the trigger file the code you want to execute for each
     SeeIDsInUse=See IDs in use in your installation
     SeeReservedIDsRangeHere=See range of reserved IDs
     ToolkitForDevelopers=Toolkit for Dolibarr developers
    -TryToUseTheModuleBuilder=If you have knowledge in SQL and PHP, you can try to use the native module builder wizard. Just enable the module and use the wizard by clicking the <span class="fa fa-bug"></span> on the top right menu. Warning: This is a developer feature, bad use may breaks your application.
    +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.<br>Enable the module <strong>%s</strong> and use the wizard by clicking the <span class="fa fa-bug"></span> on the top right menu.<br>Warning: This is an advanced developer feature, do <b>not</b> experiment on your production site!
     SeeTopRightMenu=See <span class="fa fa-bug"></span> on the top right menu
     AddLanguageFile=Add language file
     YouCanUseTranslationKey=You can use here a key that is the translation key found into language file (see tab "Languages")
     DropTableIfEmpty=(Delete table if empty)
     TableDoesNotExists=The table %s does not exists
     TableDropped=Table %s deleted
    -InitStructureFromExistingTable=Build the structure array string of an existing table 
    \ No newline at end of file
    +InitStructureFromExistingTable=Build the structure array string of an existing table
    +UseAboutPage=Disable the about page
    +UseDocFolder=Disable the documentation folder
    +UseSpecificReadme=Use a specific ReadMe
    +RealPathOfModule=Real path of module
    diff --git a/htdocs/langs/en_US/multicurrency.lang b/htdocs/langs/en_US/multicurrency.lang
    index 0da2ee58b60..47c5590b862 100644
    --- a/htdocs/langs/en_US/multicurrency.lang
    +++ b/htdocs/langs/en_US/multicurrency.lang
    @@ -3,18 +3,18 @@ MultiCurrency=Multi currency
     ErrorAddRateFail=Error in added rate
     ErrorAddCurrencyFail=Error in added currency
     ErrorDeleteCurrencyFail=Error delete fail
    -multicurrency_syncronize_error=Synchronisation error: %s
    -MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=Use date of document to find currency rate, instead of using latest known rate 
    -multicurrency_useOriginTx=When an object is created from another, keep the original rate of source object (otherwise use the latest known rate)
    +multicurrency_syncronize_error=Synchronization error: %s
    +MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=Use the date of the document to find the currency rate, instead of using the latest known rate
    +multicurrency_useOriginTx=When an object is created from another, keep the original rate from the source object (otherwise use the latest known rate)
     CurrencyLayerAccount=CurrencyLayer API
    -CurrencyLayerAccount_help_to_synchronize=You sould create an account on their website to use this functionnality<br>Get your <b>API key</b><br>If you use a free account you can't change the <b>currency source</b> (USD by default)<br>But if your main currency isn't USD you can use the <b>alternate currency source</b> to force you main currency<br><br>You are limited at 1000 synchronizations per month 
    +CurrencyLayerAccount_help_to_synchronize=You must create an account on their website to use this functionality.<br>Get your <b>API key</b>.<br>If you use a free account you can't change the <b>currency source</b> (USD by default).<br>If your main currency is not USD you can use the <b>alternate currency source</b> to force your main currency.<br><br>You are limited to 1000 synchronizations per month.
     multicurrency_appId=API key
     multicurrency_appCurrencySource=Currency source
     multicurrency_alternateCurrencySource=Alternate currency source
     CurrenciesUsed=Currencies used
    -CurrenciesUsed_help_to_add=Add the differents currencies and rates you need to use on you <b>proposals</b>, <b>orders</b>, etc.
    +CurrenciesUsed_help_to_add=Add the different currencies and rates you need to use on your <b>proposals</b>, <b>orders</b> etc.
     rate=rate
     MulticurrencyReceived=Received, original currency
    -MulticurrencyRemainderToTake=Remaining amout, original currency
    +MulticurrencyRemainderToTake=Remaining amount, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
    -AmountToOthercurrency=Amount To (in currency of receiving account)
    \ No newline at end of file
    +AmountToOthercurrency=Amount To (in currency of receiving account)
    diff --git a/htdocs/langs/en_US/opensurvey.lang b/htdocs/langs/en_US/opensurvey.lang
    index 0203bf74b28..906de8c2f37 100644
    --- a/htdocs/langs/en_US/opensurvey.lang
    +++ b/htdocs/langs/en_US/opensurvey.lang
    @@ -11,7 +11,7 @@ PollTitle=Poll title
     ToReceiveEMailForEachVote=Receive an email for each vote
     TypeDate=Type date
     TypeClassic=Type standard
    -OpenSurveyStep2=Select your dates amoung the free days (grey). The selected days are green. You can unselect a day previously selected by clicking again on it
    +OpenSurveyStep2=Select your dates among the free days (grey). The selected days are green. You can unselect a day previously selected by clicking again on it
     RemoveAllDays=Remove all days
     CopyHoursOfFirstDay=Copy hours of first day
     RemoveAllHours=Remove all hours
    @@ -19,7 +19,7 @@ SelectedDays=Selected days
     TheBestChoice=The best choice currently is
     TheBestChoices=The best choices currently are
     with=with
    -OpenSurveyHowTo=If you agree to vote in this poll, you have to give your name, choose the values that fit best for you and validate with the plus button at the end of the line. 
    +OpenSurveyHowTo=If you agree to vote in this poll, you have to give your name, choose the values that fit best for you and validate with the plus button at the end of the line.
     CommentsOfVoters=Comments of voters
     ConfirmRemovalOfPoll=Are you sure you want to remove this poll (and all votes)
     RemovePoll=Remove poll
    @@ -58,4 +58,4 @@ MoreChoices=Enter more choices for the voters
     SurveyExpiredInfo=The poll has been closed or voting delay has expired.
     EmailSomeoneVoted=%s has filled a line.\nYou can find your poll at the link: \n%s
     ShowSurvey=Show survey
    -UserMustBeSameThanUserUsedToVote=You must have voted and use the same user name that the one used to vote, to post a comment
    \ No newline at end of file
    +UserMustBeSameThanUserUsedToVote=You must have voted and use the same user name that the one used to vote, to post a comment
    diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang
    index 94ed74acb4e..66073b8f0c9 100644
    --- a/htdocs/langs/en_US/orders.lang
    +++ b/htdocs/langs/en_US/orders.lang
    @@ -56,7 +56,7 @@ StatusOrderReceivedAll=All products received
     ShippingExist=A shipment exists
     QtyOrdered=Qty ordered
     ProductQtyInDraft=Product quantity into draft orders
    -ProductQtyInDraftOrWaitingApproved=Product quantity into draft or approved orders, not yet ordered 
    +ProductQtyInDraftOrWaitingApproved=Product quantity into draft or approved orders, not yet ordered
     MenuOrdersToBill=Orders delivered
     MenuOrdersToBill2=Billable orders
     ShipProduct=Ship product
    @@ -88,7 +88,7 @@ NumberOfOrdersByMonth=Number of orders by month
     AmountOfOrdersByMonthHT=Amount of orders by month (net of tax)
     ListOfOrders=List of orders
     CloseOrder=Close order
    -ConfirmCloseOrder=Are you sure you want to set this order to deliverd? Once an order is delivered, it can be set to billed.
    +ConfirmCloseOrder=Are you sure you want to set this order to delivered? Once an order is delivered, it can be set to billed.
     ConfirmDeleteOrder=Are you sure you want to delete this order?
     ConfirmValidateOrder=Are you sure you want to validate this order under name <b>%s</b>?
     ConfirmUnvalidateOrder=Are you sure you want to restore order <b>%s</b> to draft status?
    @@ -116,7 +116,7 @@ DispatchSupplierOrder=Receiving supplier order %s
     FirstApprovalAlreadyDone=First approval already done
     SecondApprovalAlreadyDone=Second approval already done
     SupplierOrderReceivedInDolibarr=Purchase Order %s received %s
    -SupplierOrderSubmitedInDolibarr=Purchase Order %s submited
    +SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted
     SupplierOrderClassifiedBilled=Purchase Order %s set billed
     OtherOrders=Other orders
     ##### Types de contacts #####
    @@ -141,18 +141,19 @@ OrderByWWW=Online
     OrderByPhone=Phone
     # Documents models
     PDFEinsteinDescription=A complete order model (logo...)
    +PDFEratostheneDescription=A complete order model (logo...)
     PDFEdisonDescription=A simple order model
     PDFProformaDescription=A complete proforma invoice (logo…)
     CreateInvoiceForThisCustomer=Bill orders
     NoOrdersToInvoice=No orders billable
    -CloseProcessedOrdersAutomatically=Classify "Processed" all selected orders. 
    +CloseProcessedOrdersAutomatically=Classify "Processed" all selected orders.
     OrderCreation=Order creation
     Ordered=Ordered
     OrderCreated=Your orders have been created
     OrderFail=An error happened during your orders creation
     CreateOrders=Create orders
     ToBillSeveralOrderSelectCustomer=To create an invoice for several orders, click first onto customer, then choose "%s".
    -OptionToSetOrderBilledNotEnabled=Option (from module Workflow) to set order to 'Billed' automatically when invoice is validated is off, so you will have to set status of order to 'Billed' manually.  
    +OptionToSetOrderBilledNotEnabled=Option (from module Workflow) to set order to 'Billed' automatically when invoice is validated is off, so you will have to set status of order to 'Billed' manually.
     IfValidateInvoiceIsNoOrderStayUnbilled=If invoice validation is 'No', the order will remain to status 'Unbilled' until the invoice is validated.
     CloseReceivedSupplierOrdersAutomatically=Close order to "%s" automatically if all products are received.
    -SetShippingMode=Set shipping mode
    \ No newline at end of file
    +SetShippingMode=Set shipping mode
    diff --git a/htdocs/langs/en_US/other.lang b/htdocs/langs/en_US/other.lang
    index f6bb3e76e95..e8cd9b78d2f 100644
    --- a/htdocs/langs/en_US/other.lang
    +++ b/htdocs/langs/en_US/other.lang
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,6 +70,10 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
    @@ -80,15 +83,15 @@ LinkedObject=Linked object
     NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -185,10 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    -EMailTextInvoicePayed=The invoice %s has been payed.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -198,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -205,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -236,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/en_US/paybox.lang b/htdocs/langs/en_US/paybox.lang
    index e87c7058121..cf0bd40b716 100644
    --- a/htdocs/langs/en_US/paybox.lang
    +++ b/htdocs/langs/en_US/paybox.lang
    @@ -21,9 +21,9 @@ ToOfferALinkForOnlinePaymentOnContractLine=URL to offer a %s online payment user
     ToOfferALinkForOnlinePaymentOnFreeAmount=URL to offer a %s online payment user interface for a free amount
     ToOfferALinkForOnlinePaymentOnMemberSubscription=URL to offer a %s online payment user interface for a member subscription
     YouCanAddTagOnUrl=You can also add url parameter <b>&tag=<i>value</i></b> to any of those URL (required only for free payment) to add your own payment comment tag.
    -SetupPayBoxToHavePaymentCreatedAutomatically=Setup your PayBox with url <b>%s</b> to have payment created automatically when validated by paybox. 
    +SetupPayBoxToHavePaymentCreatedAutomatically=Setup your Paybox with url <b>%s</b> to have payment created automatically when validated by Paybox.
     YourPaymentHasBeenRecorded=This page confirms that your payment has been recorded. Thank you.
    -YourPaymentHasNotBeenRecorded=You payment has NOT been recorded and transaction has been canceled. Thank you.
    +YourPaymentHasNotBeenRecorded=Your payment has NOT been recorded and the transaction has been canceled. Thank you.
     AccountParameter=Account parameters
     UsageParameter=Usage parameters
     InformationToFindParameters=Help to find your %s account information
    @@ -35,4 +35,4 @@ NewPayboxPaymentFailed=New Paybox payment tried but failed
     PAYBOX_PAYONLINE_SENDEMAIL=EMail to warn after a payment (success or failed)
     PAYBOX_PBX_SITE=Value for PBX SITE
     PAYBOX_PBX_RANG=Value for PBX Rang
    -PAYBOX_PBX_IDENTIFIANT=Value for PBX ID
    \ No newline at end of file
    +PAYBOX_PBX_IDENTIFIANT=Value for PBX ID
    diff --git a/htdocs/langs/en_US/paypal.lang b/htdocs/langs/en_US/paypal.lang
    index ad8b9612935..d34bb4baf18 100644
    --- a/htdocs/langs/en_US/paypal.lang
    +++ b/htdocs/langs/en_US/paypal.lang
    @@ -1,25 +1,24 @@
     # Dolibarr language file - Source file is en_US - paypal
     PaypalSetup=PayPal module setup
    -PaypalDesc=This module offer pages to allow payment on <a href="http://www.paypal.com" target="_blank">PayPal</a> by customers. This can be used for a free payment or for a payment on a particular Dolibarr object (invoice, order, ...)
    -PaypalOrCBDoPayment=Pay with Paypal (Credit Card or Paypal)
    -PaypalDoPayment=Pay with Paypal
    +PaypalDesc=This module allows payment on <a href="http://www.paypal.com" target="_blank">PayPal</a> by customers. This can be used for a free payment or for a payment on a particular Dolibarr object (invoice, order, ...)
    +PaypalOrCBDoPayment=Pay with PayPal (Credit Card or PayPal)
    +PaypalDoPayment=Pay with PayPal
     PAYPAL_API_SANDBOX=Mode test/sandbox
     PAYPAL_API_USER=API username
     PAYPAL_API_PASSWORD=API password
     PAYPAL_API_SIGNATURE=API signature
     PAYPAL_SSLVERSION=Curl SSL Version
    -PAYPAL_API_INTEGRAL_OR_PAYPALONLY=Offer payment "integral" (Credit card+Paypal) or "Paypal" only
    +PAYPAL_API_INTEGRAL_OR_PAYPALONLY=Offer payment "integral" (Credit card+PayPal) or "PayPal" only
     PaypalModeIntegral=Integral
     PaypalModeOnlyPaypal=PayPal only
    -ONLINE_PAYMENT_CSS_URL=Optionnal URL of CSS style sheet on online payment page
    +ONLINE_PAYMENT_CSS_URL=Optional URL of CSS stylesheet on online payment page
     ThisIsTransactionId=This is id of transaction: <b>%s</b>
    -PAYPAL_ADD_PAYMENT_URL=Add the url of Paypal payment when you send a document by mail
    -YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    +PAYPAL_ADD_PAYMENT_URL=Add the url of PayPal payment when you send a document by mail
     NewOnlinePaymentReceived=New online payment received
     NewOnlinePaymentFailed=New online payment tried but failed
     ONLINE_PAYMENT_SENDEMAIL=EMail to warn after a payment (success or not)
     ReturnURLAfterPayment=Return URL after payment
    -ValidationOfOnlinePaymentFailed=Validation of online payment failed 
    +ValidationOfOnlinePaymentFailed=Validation of online payment failed
     PaymentSystemConfirmPaymentPageWasCalledButFailed=Payment confirmation page was called by payment system returned an error
     SetExpressCheckoutAPICallFailed=SetExpressCheckout API call failed.
     DoExpressCheckoutPaymentAPICallFailed=DoExpressCheckoutPayment API call failed.
    @@ -28,8 +27,8 @@ ShortErrorMessage=Short Error Message
     ErrorCode=Error Code
     ErrorSeverityCode=Error Severity Code
     OnlinePaymentSystem=Online payment system
    -PaypalLiveEnabled=Paypal live enabled (otherwise test/sandbox mode)
    -PaypalImportPayment=Import Paypal payments
    +PaypalLiveEnabled=PayPal live enabled (otherwise test/sandbox mode)
    +PaypalImportPayment=Import PayPal payments
     PostActionAfterPayment=Post actions after payments
     ARollbackWasPerformedOnPostActions=A rollback was performed on all Post actions. You must complete post actions manually if they are necessary.
    -ValidationOfPaymentFailed=Validation of payment has failed
    \ No newline at end of file
    +ValidationOfPaymentFailed=Validation of payment has failed
    diff --git a/htdocs/langs/en_US/printing.lang b/htdocs/langs/en_US/printing.lang
    index e8349453247..d2399823e37 100644
    --- a/htdocs/langs/en_US/printing.lang
    +++ b/htdocs/langs/en_US/printing.lang
    @@ -2,7 +2,7 @@
     Module64000Name=Direct Printing
     Module64000Desc=Enable Direct Printing System
     PrintingSetup=Setup of Direct Printing System
    -PrintingDesc=This module adds a Print button to send documents directly to a printer (without opening document into an application) with various module.
    +PrintingDesc=This module adds a Print button to various modules to allow documents to be printed directly to a printer without needing to open the document in another application.
     MenuDirectPrinting=Direct Printing jobs
     DirectPrint=Direct print
     PrintingDriverDesc=Configuration variables for printing driver.
    @@ -19,7 +19,7 @@ UserConf=Setup per user
     PRINTGCP_INFO=Google OAuth API setup
     PRINTGCP_AUTHLINK=Authentication
     PRINTGCP_TOKEN_ACCESS=Google Cloud Print OAuth Token
    -PrintGCPDesc=This driver allow to send documents directly to a printer with Google Cloud Print.
    +PrintGCPDesc=This driver allows sending documents directly to a printer using Google Cloud Print.
     GCP_Name=Name
     GCP_displayName=Display Name
     GCP_Id=Printer Id
    @@ -27,7 +27,7 @@ GCP_OwnerName=Owner Name
     GCP_State=Printer State
     GCP_connectionStatus=Online State
     GCP_Type=Printer Type
    -PrintIPPDesc=This driver allow to send documents directly to a printer. It requires a Linux system with CUPS installed.
    +PrintIPPDesc=This driver allows sending of documents directly to a printer. It requires a Linux system with CUPS installed.
     PRINTIPP_HOST=Print server
     PRINTIPP_PORT=Port
     PRINTIPP_USER=Login
    diff --git a/htdocs/langs/en_US/productbatch.lang b/htdocs/langs/en_US/productbatch.lang
    index f0eafc807cf..54270c4a23b 100644
    --- a/htdocs/langs/en_US/productbatch.lang
    +++ b/htdocs/langs/en_US/productbatch.lang
    @@ -21,4 +21,4 @@ ProductDoesNotUseBatchSerial=This product does not use lot/serial number
     ProductLotSetup=Setup of module lot/serial
     ShowCurrentStockOfLot=Show current stock for couple product/lot
     ShowLogOfMovementIfLot=Show log of movements for couple product/lot
    -StockDetailPerBatch=Stock detail per lot
    \ No newline at end of file
    +StockDetailPerBatch=Stock detail per lot
    diff --git a/htdocs/langs/en_US/products.lang b/htdocs/langs/en_US/products.lang
    index 88d06eb9939..95b93aba4e9 100644
    --- a/htdocs/langs/en_US/products.lang
    +++ b/htdocs/langs/en_US/products.lang
    @@ -17,12 +17,12 @@ Reference=Reference
     NewProduct=New product
     NewService=New service
     ProductVatMassChange=Mass VAT change
    -ProductVatMassChangeDesc=This page can be used to modify a VAT rate defined on products or services from a value to another. Warning, this change is done on all database.
    +ProductVatMassChangeDesc=This page can be used to modify a VAT rate defined on products or services from one value to another. Warning, this change is global/done on all database.
     MassBarcodeInit=Mass barcode init
     MassBarcodeInitDesc=This page can be used to initialize a barcode on objects that does not have barcode defined. Check before that setup of module barcode is complete.
     ProductAccountancyBuyCode=Accounting code (purchase)
     ProductAccountancySellCode=Accounting code (sale)
    -ProductAccountancySellIntraCode=Accounting code (sale intra-community)
    +ProductAccountancySellIntraCode=Accounting code (sale intra-Community)
     ProductAccountancySellExportCode=Accounting code (sale export)
     ProductOrService=Product or Service
     ProductsAndServices=Products and Services
    @@ -130,11 +130,11 @@ DiscountQtyMin=Default discount for qty
     NoPriceDefinedForThisSupplier=No price/qty defined for this supplier/product
     NoSupplierPriceDefinedForThisProduct=No supplier price/qty defined for this product
     PredefinedProductsToSell=Predefined products to sell
    -PredefinedServicesToSell=Predefined services to sell 
    +PredefinedServicesToSell=Predefined services to sell
     PredefinedProductsAndServicesToSell=Predefined products/services to sell
     PredefinedProductsToPurchase=Predefined product to purchase
     PredefinedServicesToPurchase=Predefined services to purchase
    -PredefinedProductsAndServicesToPurchase=Predefined products/services to puchase
    +PredefinedProductsAndServicesToPurchase=Predefined products/services to purchase
     NotPredefinedProducts=Not predefined products/services
     GenerateThumb=Generate thumb
     ServiceNb=Service #%s
    @@ -145,7 +145,7 @@ Finished=Manufactured product
     RowMaterial=Raw Material
     CloneProduct=Clone product or service
     ConfirmCloneProduct=Are you sure you want to clone product or service <b>%s</b>?
    -CloneContentProduct=Clone all main informations of product/service
    +CloneContentProduct=Clone all main information of product/service
     ClonePricesProduct=Clone prices
     CloneCompositionProduct=Clone packaged product/service
     CloneCombinationsProduct=Clone product variants
    @@ -202,7 +202,7 @@ PriceByQuantity=Different prices by quantity
     DisablePriceByQty=Disable prices by quantity
     PriceByQuantityRange=Quantity range
     MultipriceRules=Price segment rules
    -UseMultipriceRules=Use price segment rules (defined into product module setup) to autocalculate prices of all other segment according to first segment
    +UseMultipriceRules=Use price segment rules (defined into product module setup) to auto calculate prices of all other segments according to first segment
     PercentVariationOver=%% variation over %s
     PercentDiscountOver=%% discount over %s
     KeepEmptyForAutoCalculation=Keep empty to have this calculated automatically from weight or volume of products
    @@ -233,7 +233,7 @@ BarCodeDataForThirdparty=Barcode information of third party %s :
     ResetBarcodeForAllRecords=Define barcode value for all record (this will also reset barcode value already defined with new values)
     PriceByCustomer=Different prices for each customer
     PriceCatalogue=A single sell price per product/service
    -PricingRule=Rules for sell prices
    +PricingRule=Rules for selling prices
     AddCustomerPrice=Add price by customer
     ForceUpdateChildPriceSoc=Set same price on customer subsidiaries
     PriceByCustomerLog=Log of previous customer prices
    @@ -254,7 +254,7 @@ ComposedProduct=Sub-product
     MinSupplierPrice=Minimum buying price
     MinCustomerPrice=Minimum selling price
     DynamicPriceConfiguration=Dynamic price configuration
    -DynamicPriceDesc=On product card, with this module enabled, you should be able to set mathematic functions to calculate Customer or Supplier prices. Such function can use all mathematic operators, some constants and variables. You can set here the variables you want to be able to use and if the variable need an automatic update, the external URL to use to ask Dolibarr to update automaticaly the value.
    +DynamicPriceDesc=On product card, with this module enabled, you should be able to set mathematic functions to calculate Customer or Supplier prices. Such function can use all mathematic operators, some constants and variables. You can set here the variables you want to be able to use and if the variable need an automatic update, the external URL to use to ask Dolibarr to update the value automatically.
     AddVariable=Add Variable
     AddUpdater=Add Updater
     GlobalVariables=Global variables
    @@ -269,7 +269,7 @@ GlobalVariableUpdaterHelpFormat1=Format for request is {"URL": "http://example.c
     UpdateInterval=Update interval (minutes)
     LastUpdated=Latest update
     CorrectlyUpdated=Correctly updated
    -PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is 
    +PropalMergePdfProductActualFile=Files use to add into PDF Azur are/is
     PropalMergePdfProductChooseFile=Select PDF files
     IncludingProductWithTag=Including product/service with tag
     DefaultPriceRealPriceMayDependOnCustomer=Default price, real price may depend on customer
    @@ -292,8 +292,9 @@ SubProduct=Sub product
     ProductSheet=Product sheet
     ServiceSheet=Service sheet
     PossibleValues=Possible values
    -GoOnMenuToCreateVairants=Go on menu %s - %s to prepare attribute variants (like colors, size, ...) 
    -
    +GoOnMenuToCreateVairants=Go on menu %s - %s to prepare attribute variants (like colors, size, ...)
    +UseProductFournDesc=Use supplier descriptions of products in supplier documents
    +ProductSupplierDescription=Supplier description for the product
     #Attributes
     VariantAttributes=Variant attributes
     ProductAttributes=Variant attributes for products
    @@ -329,6 +330,8 @@ NbOfDifferentValues=No. of different values
     NbProducts=No. of products
     ParentProduct=Parent product
     HideChildProducts=Hide variant products
    +ShowChildProducts=Show variant products
    +NoEditVariants=Go to Parent product card and edit variants price impact in the variants tab
     ConfirmCloneProductCombinations=Would you like to copy all the product variants to the other parent product with the given reference?
     CloneDestinationReference=Destination product reference
     ErrorCopyProductCombinations=There was an error while copying the product variants
    diff --git a/htdocs/langs/en_US/projects.lang b/htdocs/langs/en_US/projects.lang
    index 5c66e298fe8..2655ebbdc05 100644
    --- a/htdocs/langs/en_US/projects.lang
    +++ b/htdocs/langs/en_US/projects.lang
    @@ -7,7 +7,7 @@ ProjectsArea=Projects Area
     ProjectStatus=Project status
     SharedProject=Everybody
     PrivateProject=Project contacts
    -ProjectsImContactFor=Projects I'm explicitely a contact of 
    +ProjectsImContactFor=Projects I'm explicitely a contact of
     AllAllowedProjects=All project I can read (mine + public)
     AllProjects=All projects
     MyProjectsDesc=This view is limited to projects you are a contact for
    @@ -33,8 +33,8 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -125,7 +126,7 @@ TaskRessourceLinks=Contacts task
     ProjectsDedicatedToThisThirdParty=Projects dedicated to this third party
     NoTasks=No tasks for this project
     LinkedToAnotherCompany=Linked to other third party
    -TaskIsNotAssignedToUser=Task not assigned to user. Use button '<strong>%s</strong>' to assign task now. 
    +TaskIsNotAssignedToUser=Task not assigned to user. Use button '<strong>%s</strong>' to assign task now.
     ErrorTimeSpentIsEmpty=Time spent is empty
     ThisWillAlsoRemoveTasks=This action will also delete all tasks of project (<b>%s</b> tasks at the moment) and all inputs of time spent.
     IfNeedToUseOhterObjectKeepEmpty=If some objects (invoice, order, ...), belonging to another third party, must be linked to the project to create, keep this empty to have the project being multi third parties.
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -183,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -190,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
     ProjectNbProjectByMonth=No. of created projects by month
     ProjectNbTaskByMonth=No. of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -230,3 +233,4 @@ DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
     ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    \ No newline at end of file
    diff --git a/htdocs/langs/en_US/propal.lang b/htdocs/langs/en_US/propal.lang
    index 3552076a4e7..fd1240e3ea6 100644
    --- a/htdocs/langs/en_US/propal.lang
    +++ b/htdocs/langs/en_US/propal.lang
    @@ -53,7 +53,7 @@ ErrorPropalNotFound=Propal %s not found
     AddToDraftProposals=Add to draft proposal
     NoDraftProposals=No draft proposals
     CopyPropalFrom=Create commercial proposal by copying existing proposal
    -CreateEmptyPropal=Create empty commercial proposals vierge or from list of products/services
    +CreateEmptyPropal=Create empty commercial proposal or from list of products/services
     DefaultProposalDurationValidity=Default commercial proposal validity duration (in days)
     UseCustomerContactAsPropalRecipientIfExist=Use customer contact address if defined instead of third party address as proposal recipient address
     ClonePropal=Clone commercial proposal
    @@ -78,8 +78,9 @@ TypeContact_propal_external_CUSTOMER=Customer contact following-up proposal
     TypeContact_propal_external_SHIPPING=Customer contact for delivery
     # Document models
     DocModelAzurDescription=A complete proposal model (logo...)
    +DocModelCyanDescription=A complete proposal model (logo...)
     DefaultModelPropalCreate=Default model creation
     DefaultModelPropalToBill=Default template when closing a business proposal (to be invoiced)
     DefaultModelPropalClosed=Default template when closing a business proposal (unbilled)
     ProposalCustomerSignature=Written acceptance, company stamp, date and signature
    -ProposalsStatisticsSuppliers=Supplier proposals statistics 
    +ProposalsStatisticsSuppliers=Supplier proposals statistics
    diff --git a/htdocs/langs/en_US/resource.lang b/htdocs/langs/en_US/resource.lang
    index 5a907f6ba23..33a5046e006 100644
    --- a/htdocs/langs/en_US/resource.lang
    +++ b/htdocs/langs/en_US/resource.lang
    @@ -5,7 +5,7 @@ DeleteResource=Delete resource
     ConfirmDeleteResourceElement=Confirm delete the resource for this element
     NoResourceInDatabase=No resource in database.
     NoResourceLinked=No resource linked
    -
    +ActionsOnResource=Events about this resource
     ResourcePageIndex=Resources list
     ResourceSingular=Resource
     ResourceCard=Resource card
    diff --git a/htdocs/langs/en_US/salaries.lang b/htdocs/langs/en_US/salaries.lang
    index 432ab894040..620517b5324 100644
    --- a/htdocs/langs/en_US/salaries.lang
    +++ b/htdocs/langs/en_US/salaries.lang
    @@ -1,10 +1,11 @@
     # Dolibarr language file - Source file is en_US - salaries
     SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties
    -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accouting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accouting account on user is not defined.
    +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accounting account on user is not defined.
     SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments
     Salary=Salary
     Salaries=Salaries
     NewSalaryPayment=New salary payment
    +AddSalaryPayment=Add salary payment
     SalaryPayment=Salary payment
     SalariesPayments=Salaries payments
     ShowSalaryPayment=Show salary payment
    @@ -15,4 +16,4 @@ THMDescription=This value may be used to calculate cost of time consumed on a pr
     TJMDescription=This value is currently as information only and is not used for any calculation
     LastSalaries=Latest %s salary payments
     AllSalaries=All salary payments
    -SalariesStatistics=Statistiques salaires
    \ No newline at end of file
    +SalariesStatistics=Salary statistics
    diff --git a/htdocs/langs/en_US/sendings.lang b/htdocs/langs/en_US/sendings.lang
    index b8474775e75..2b46ada5ee9 100644
    --- a/htdocs/langs/en_US/sendings.lang
    +++ b/htdocs/langs/en_US/sendings.lang
    @@ -56,7 +56,7 @@ ProductQtyInCustomersOrdersRunning=Product quantity into open customer orders
     ProductQtyInSuppliersOrdersRunning=Product quantity into open purchase orders
     ProductQtyInShipmentAlreadySent=Product quantity from open customer order already sent
     ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from open supplier order already received
    -NoProductToShipFoundIntoStock=No product to ship found into warehouse <b>%s</b>. Correct stock or go back to choose another warehouse. 
    +NoProductToShipFoundIntoStock=No product to ship found in warehouse <b>%s</b>. Correct stock or go back to choose another warehouse.
     WeightVolShort=Weight/Vol.
     ValidateOrderFirstBeforeShipment=You must first validate the order before being able to make shipments.
     
    diff --git a/htdocs/langs/en_US/sms.lang b/htdocs/langs/en_US/sms.lang
    index b333d7887bb..79bd8827198 100644
    --- a/htdocs/langs/en_US/sms.lang
    +++ b/htdocs/langs/en_US/sms.lang
    @@ -1,9 +1,9 @@
     # Dolibarr language file - Source file is en_US - sms
     Sms=Sms
    -SmsSetup=Sms setup
    -SmsDesc=This page allows you to define globals options on SMS features
    +SmsSetup=SMS setup
    +SmsDesc=This page allows you to define global options on SMS features
     SmsCard=SMS Card
    -AllSms=All SMS campains
    +AllSms=All SMS campaigns
     SmsTargets=Targets
     SmsRecipients=Targets
     SmsRecipient=Target
    @@ -13,20 +13,20 @@ SmsTo=Target
     SmsTopic=Topic of SMS
     SmsText=Message
     SmsMessage=SMS Message
    -ShowSms=Show Sms
    -ListOfSms=List SMS campains
    -NewSms=New SMS campain
    -EditSms=Edit Sms
    +ShowSms=Show SMS
    +ListOfSms=List SMS campaigns
    +NewSms=New SMS campaign
    +EditSms=Edit SMS
     ResetSms=New sending
    -DeleteSms=Delete Sms campain
    -DeleteASms=Remove a Sms campain
    -PreviewSms=Previuw Sms
    -PrepareSms=Prepare Sms
    -CreateSms=Create Sms
    -SmsResult=Result of Sms sending
    -TestSms=Test Sms
    -ValidSms=Validate Sms
    -ApproveSms=Approve Sms
    +DeleteSms=Delete SMS campaign
    +DeleteASms=Remove a SMS campaign
    +PreviewSms=Previuw SMS
    +PrepareSms=Prepare SMS
    +CreateSms=Create SMS
    +SmsResult=Result of SMS sending
    +TestSms=Test SMS
    +ValidSms=Validate SMS
    +ApproveSms=Approve SMS
     SmsStatusDraft=Draft
     SmsStatusValidated=Validated
     SmsStatusApproved=Approved
    @@ -35,7 +35,7 @@ SmsStatusSentPartialy=Sent partially
     SmsStatusSentCompletely=Sent completely
     SmsStatusError=Error
     SmsStatusNotSent=Not sent
    -SmsSuccessfulySent=Sms correctly sent (from %s to %s)
    +SmsSuccessfulySent=SMS correctly sent (from %s to %s)
     ErrorSmsRecipientIsEmpty=Number of target is empty
     WarningNoSmsAdded=No new phone number to add to target list
     ConfirmValidSms=Do you confirm validation of this campaign?
    @@ -48,4 +48,4 @@ SmsInfoNumero= (international format ie : +33899701761)
     DelayBeforeSending=Delay before sending (minutes)
     SmsNoPossibleSenderFound=No sender available. Check setup of your SMS provider.
     SmsNoPossibleRecipientFound=No target available. Check setup of your SMS provider.
    -DisableStopIfSupported=Disable STOP message (if supported) 
    +DisableStopIfSupported=Disable STOP message (if supported)
    diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang
    index 0d22a3b3c75..fbbc00887aa 100644
    --- a/htdocs/langs/en_US/stocks.lang
    +++ b/htdocs/langs/en_US/stocks.lang
    @@ -44,7 +44,6 @@ TransferStock=Transfer stock
     MassStockTransferShort=Mass stock transfer
     StockMovement=Stock movement
     StockMovements=Stock movements
    -LabelMovement=Movement label
     NumberOfUnit=Number of units
     UnitPurchaseValue=Unit purchase price
     StockTooLow=Stock too low
    @@ -55,20 +54,20 @@ PMPValueShort=WAP
     EnhancedValueOfWarehouses=Warehouses value
     UserWarehouseAutoCreate=Create a user warehouse automatically when creating a user
     AllowAddLimitStockByWarehouse=Allow to add limit and desired stock per couple (product, warehouse) instead of per product
    -IndependantSubProductStock=Product stock and subproduct stock are independant
    +IndependantSubProductStock=Product stock and subproduct stock are independent
     QtyDispatched=Quantity dispatched
     QtyDispatchedShort=Qty dispatched
     QtyToDispatchShort=Qty to dispatch
     OrderDispatch=Item receipts
    -RuleForStockManagementDecrease=Rule for automatic stock management decrease (manual decrease is always possible, even if an automatic decrease rule is activated)
    -RuleForStockManagementIncrease=Rule for automatic stock management increase (manual increase is always possible, even if an automatic increase rule is activated)
    -DeStockOnBill=Decrease real stocks on customers invoices/credit notes validation
    -DeStockOnValidateOrder=Decrease real stocks on customers orders validation
    +RuleForStockManagementDecrease=Choose Rule for automatic stock decrease (manual decrease is always possible, even if an automatic decrease rule is activated)
    +RuleForStockManagementIncrease=Choose Rule for automatic stock increase (manual increase is always possible, even if an automatic increase rule is activated)
    +DeStockOnBill=Decrease real stocks on validation of customer invoice/credit note
    +DeStockOnValidateOrder=Decrease real stocks on validation of customer order
     DeStockOnShipment=Decrease real stocks on shipping validation
     DeStockOnShipmentOnClosing=Decrease real stocks on shipping classification closed
    -ReStockOnBill=Increase real stocks on suppliers invoices/credit notes validation
    -ReStockOnValidateOrder=Increase real stocks on purchase orders approbation
    -ReStockOnDispatchOrder=Increase real stocks on manual dispatching into warehouses, after supplier order receipt of goods
    +ReStockOnBill=Increase real stocks on validation of supplier invoice/credit note
    +ReStockOnValidateOrder=Increase real stocks on purchase order approval
    +ReStockOnDispatchOrder=Increase real stocks on manual dispatching into warehouse, after supplier order receipt of goods
     OrderStatusNotReadyToDispatch=Order has not yet or no more a status that allows dispatching of products in stock warehouses.
     StockDiffPhysicTeoric=Explanation for difference between physical and virtual stock
     NoPredefinedProductToDispatch=No predefined products for this object. So no dispatching in stock is required.
    @@ -78,7 +77,7 @@ StockLimit=Stock limit for alert
     StockLimitDesc=(empty) means no warning.<br>0 can be used for a warning as soon as stock is empty.
     PhysicalStock=Physical stock
     RealStock=Real Stock
    -RealStockDesc=Physical or real stock is the stock you currently have into your internal warehouses/emplacements. 
    +RealStockDesc=Physical or real stock is the stock you currently have into your internal warehouses/emplacements.
     RealStockWillAutomaticallyWhen=The real stock will automatically change according to this rules (see stock module setup to change this):
     VirtualStock=Virtual stock
     VirtualStockDesc=Virtual stock is the stock you will get once all open pending actions that affect stocks will be closed (supplier order received, customer order shipped, ...)
    @@ -130,14 +129,15 @@ RecordMovement=Record transfer
     ReceivingForSameOrder=Receipts for this order
     StockMovementRecorded=Stock movements recorded
     RuleForStockAvailability=Rules on stock requirements
    -StockMustBeEnoughForInvoice=Stock level must be enough to add product/service to invoice (check is done on current real stock when adding a line into invoice whatever is rule for automatic stock change)
    -StockMustBeEnoughForOrder=Stock level must be enough to add product/service to order (check is done on current real stock when adding a line into order whatever is rule for automatic stock change)
    -StockMustBeEnoughForShipment= Stock level must be enough to add product/service to shipment (check is done on current real stock when adding a line into shipment whatever is rule for automatic stock change)
    +StockMustBeEnoughForInvoice=Stock level must be enough to add product/service to invoice (check is done on current real stock when adding a line into invoice whatever the rule for automatic stock change)
    +StockMustBeEnoughForOrder=Stock level must be enough to add product/service to order (check is done on current real stock when adding a line into order whatever the rule for automatic stock change)
    +StockMustBeEnoughForShipment= Stock level must be enough to add product/service to shipment (check is done on current real stock when adding a line into shipment whatever the rule for automatic stock change)
     MovementLabel=Label of movement
    +TypeMovement=Type of movement
     DateMovement=Date of movement
     InventoryCode=Movement or inventory code
     IsInPackage=Contained into package
    -WarehouseAllowNegativeTransfer=Stock can be negative 
    +WarehouseAllowNegativeTransfer=Stock can be negative
     qtyToTranferIsNotEnough=You don't have enough stock from your source warehouse and your setup does not allow negative stocks.
     ShowWarehouse=Show warehouse
     MovementCorrectStock=Stock correction for product %s
    @@ -172,12 +172,12 @@ inventoryDraft=Running
     inventorySelectWarehouse=Warehouse choice
     inventoryConfirmCreate=Create
     inventoryOfWarehouse=Inventory for warehouse : %s
    -inventoryErrorQtyAdd=Error : one quantity is leaser than zero
    +inventoryErrorQtyAdd=Error : one quantity is less than zero
     inventoryMvtStock=By inventory
     inventoryWarningProductAlreadyExists=This product is already into list
     SelectCategory=Category filter
     SelectFournisseur=Supplier filter
    -inventoryOnDate=Inventory 
    +inventoryOnDate=Inventory
     INVENTORY_DISABLE_VIRTUAL=Allow to not destock child product from a kit on inventory
     INVENTORY_USE_MIN_PA_IF_NO_LAST_PA=Use the buy price if no last buy price can be found
     INVENTORY_USE_INVENTORY_DATE_FROM_DATEMVT=Stock movement have date of inventory
    @@ -195,12 +195,16 @@ AddInventoryProduct=Add product to inventory
     AddProduct=Add
     ApplyPMP=Apply PMP
     FlushInventory=Flush inventory
    -ConfirmFlushInventory=Do you confirm this action ?
    +ConfirmFlushInventory=Do you confirm this action?
     InventoryFlushed=Inventory flushed
     ExitEditMode=Exit edition
     inventoryDeleteLine=Delete line
     RegulateStock=Regulate Stock
     ListInventory=List
    -StockSupportServices=Stock management support services
    +StockSupportServices=Stock management supports Services
     StockSupportServicesDesc=By default, you can stock only product with type "product". If on, and if module service is on, you can also stock a product with type "service"
    -ReceiveProducts=Receive items
    \ No newline at end of file
    +ReceiveProducts=Receive items
    +StockIncreaseAfterCorrectTransfer=Increase by correction/transfer
    +StockDecreaseAfterCorrectTransfer=Decrease by correction/transfer
    +StockIncrease=Stock increase
    +StockDecrease=Stock decrease
    diff --git a/htdocs/langs/en_US/stripe.lang b/htdocs/langs/en_US/stripe.lang
    index ecd176a0ae7..ed3d24f4370 100644
    --- a/htdocs/langs/en_US/stripe.lang
    +++ b/htdocs/langs/en_US/stripe.lang
    @@ -22,7 +22,7 @@ ToOfferALinkForOnlinePaymentOnContractLine=URL to offer a %s online payment user
     ToOfferALinkForOnlinePaymentOnFreeAmount=URL to offer a %s online payment user interface for a free amount
     ToOfferALinkForOnlinePaymentOnMemberSubscription=URL to offer a %s online payment user interface for a member subscription
     YouCanAddTagOnUrl=You can also add url parameter <b>&tag=<i>value</i></b> to any of those URL (required only for free payment) to add your own payment comment tag.
    -SetupStripeToHavePaymentCreatedAutomatically=Setup your Stripe with url <b>%s</b> to have payment created automatically when validated by Stripe. 
    +SetupStripeToHavePaymentCreatedAutomatically=Setup your Stripe with url <b>%s</b> to have payment created automatically when validated by Stripe.
     AccountParameter=Account parameters
     UsageParameter=Usage parameters
     InformationToFindParameters=Help to find your %s account information
    @@ -60,4 +60,5 @@ DeleteACard=Delete Card
     ConfirmDeleteCard=Are you sure you want to delete this Credit or Debit card?
     CreateCustomerOnStripe=Create customer on Stripe
     CreateCardOnStripe=Create card on Stripe
    -ShowInStripe=Show in Stripe
    \ No newline at end of file
    +ShowInStripe=Show in Stripe
    +StripeUserAccountForActions=User account to use for some emails notification of Stripe events (Stripe payouts)
    diff --git a/htdocs/langs/en_US/ticket.lang b/htdocs/langs/en_US/ticket.lang
    index d8f1137b7af..75de962b7ce 100644
    --- a/htdocs/langs/en_US/ticket.lang
    +++ b/htdocs/langs/en_US/ticket.lang
    @@ -138,7 +138,7 @@ TicketStatByStatus=Tickets by status
     #
     # Ticket card
     #
    -Ticket=Incident ticket
    +Ticket=Ticket
     TicketCard=Ticket card
     CreateTicket=Create ticket
     EditTicket=Edit ticket
    diff --git a/htdocs/langs/en_US/trips.lang b/htdocs/langs/en_US/trips.lang
    index 0f9fcac1d02..2ede3bc474e 100644
    --- a/htdocs/langs/en_US/trips.lang
    +++ b/htdocs/langs/en_US/trips.lang
    @@ -33,7 +33,7 @@ ExpenseReportCanceledMessage=The expense report %s was canceled.<br> - User: %s<
     ExpenseReportPaid=An expense report was paid
     ExpenseReportPaidMessage=The expense report %s was paid.<br> - User: %s<br> - Paid by: %s<br>Click here to show the expense report: %s
     TripId=Id expense report
    -AnyOtherInThisListCanValidate=Person to inform for validation. 
    +AnyOtherInThisListCanValidate=Person to inform for validation.
     TripSociete=Information company
     TripNDF=Informations expense report
     PDFStandardExpenseReports=Standard template to generate a PDF document for expense report
    @@ -154,4 +154,4 @@ nolimitbyEX_EXP=by line (no limitation)
     
     CarCategory=Category of car
     ExpenseRangeOffset=Offset amount: %s
    -RangeIk=Mileage range
    \ No newline at end of file
    +RangeIk=Mileage range
    diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang
    index 20c3e90ae41..68fffde3bb0 100644
    --- a/htdocs/langs/en_US/users.lang
    +++ b/htdocs/langs/en_US/users.lang
    @@ -35,7 +35,7 @@ SuperAdministrator=Super Administrator
     SuperAdministratorDesc=Global administrator
     AdministratorDesc=Administrator
     DefaultRights=Default permissions
    -DefaultRightsDesc=Define here <u>default</u> permissions that are automatically granted to a <u>new created</u> user (Go on user card to change permission of an existing user).
    +DefaultRightsDesc=Define here <u>default</u> permissions that are automatically granted to a <u>new created</u> user (Go to user card to change permission of an existing user).
     DolibarrUsers=Dolibarr users
     LastName=Last name
     FirstName=First name
    @@ -108,4 +108,4 @@ UserAccountancyCode=User accounting code
     UserLogoff=User logout
     UserLogged=User logged
     DateEmployment=Date of Employment
    -DateEmploymentEnd=End date of Employment
    \ No newline at end of file
    +DateEmploymentEnd=End date of Employment
    diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang
    index 21935b5dae0..bee23264d7a 100644
    --- a/htdocs/langs/en_US/website.lang
    +++ b/htdocs/langs/en_US/website.lang
    @@ -1,8 +1,8 @@
    -# Dolibarr language file - Source file is en_US - website 
    +# Dolibarr language file - Source file is en_US - website
     Shortname=Code
    -WebsiteSetupDesc=Create here as much entry as number of different websites you need. Then go into menu Websites to edit them.
    +WebsiteSetupDesc=Create here the websites you wish to use. Then go into menu Websites to edit them.
     DeleteWebsite=Delete website
    -ConfirmDeleteWebsite=Are you sure you want to delete this web site. All its pages and content will also be removed. 
    +ConfirmDeleteWebsite=Are you sure you want to delete this web site? All its pages and content will also be removed.
     WEBSITE_TYPE_CONTAINER=Type of page/container
     WEBSITE_PAGE_EXAMPLE=Web page to use as example
     WEBSITE_PAGENAME=Page name/alias
    @@ -16,19 +16,21 @@ WEBSITE_ROBOT=Robot file (robots.txt)
     WEBSITE_HTACCESS=Web site .htaccess file
     HtmlHeaderPage=HTML header (specific to this page only)
     PageNameAliasHelp=Name or alias of the page.<br>This alias is also used to forge a SEO URL when website is ran from a Virtual host of a Web server (like Apacke, Nginx, ...). Use the button "<strong>%s</strong>" to edit this alias.
    -EditTheWebSiteForACommonHeader=Note: If you want to define a personalized header for all pages, edit the header on the site level instead of on the page/container.   
    +EditTheWebSiteForACommonHeader=Note: If you want to define a personalized header for all pages, edit the header on the site level instead of on the page/container.
     MediaFiles=Media library
    -EditCss=Edit Style/CSS or HTML header
    +EditCss=Edit website properties
     EditMenu=Edit menu
     EditMedias=Edit medias
    -EditPageMeta=Edit Meta
    +EditPageMeta=Edit page/container properties
    +EditInLine=Edit inline
     AddWebsite=Add website
     Webpage=Web page/container
     AddPage=Add page/container
     HomePage=Home Page
     PageContainer=Page/container
    -PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first add a page.
    +PreviewOfSiteNotYetAvailable=Preview of your website <strong>%s</strong> not yet available. You must first '<strong>Import a full website template</strong>' or just '<strong>Add a page/container</strong>'.
     RequestedPageHasNoContentYet=Requested page with id %s has no content yet, or cache file .tpl.php was removed. Edit content of the page to solve this.
    +SiteDeleted=Web site '%s' deleted
     PageContent=Page/Contenair
     PageDeleted=Page/Contenair '%s' of website %s deleted
     PageAdded=Page/Contenair '%s' added
    @@ -37,18 +39,19 @@ ViewPageInNewTab=View page in new tab
     SetAsHomePage=Set as Home page
     RealURL=Real URL
     ViewWebsiteInProduction=View web site using home URLs
    -SetHereVirtualHost=If you can create, on your web server (Apache, Nginx, ...), a dedicated Virtual Host with PHP enabled and a Root directory on<br><strong>%s</strong><br>then enter here the virtual hostname you have created, so the preview can be done also using this dedicated web server access instead of only using Dolibarr server.
    -YouCanAlsoTestWithPHPS=On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running<br><strong>php -S 0.0.0.0:8080 -t %s</strong>
    +SetHereVirtualHost=<u>Use with Apache/NGinx/...</u><br>If you can create, on your web server (Apache, Nginx, ...), a dedicated Virtual Host with PHP enabled and a Root directory on<br><strong>%s</strong><br>then enter here the virtual hostname you have created, so the preview can be done also using this dedicated web server access instead of only using Dolibarr server.
    +YouCanAlsoTestWithPHPS=<u>Use with PHP embedded server</u><br>On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running<br><strong>php -S 0.0.0.0:8080 -t %s</strong>
     CheckVirtualHostPerms=Check also that virtual host has permission <strong>%s</strong> on files into<br><strong>%s</strong>
     ReadPerm=Read
     WritePerm=Write
     PreviewSiteServedByWebServer=<u>Preview %s in a new tab.</u><br><br>The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:<br><strong>%s</strong><br>URL served by external server:<br><strong>%s</strong>
    -PreviewSiteServedByDolibarr=<u>Preview %s in a new tab.</u><br><br>The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.<br>The inconvenient is that URL of pages are not user friendly and start with path of your Dolibarr.<br>URL served by Dolibarr:<br><strong>%s</strong><br><br>To use your own external web server to serve this web site, create a virtual host on your web server that point on directory<br><strong>%s</strong><br>then enter the name of this virtual server and click on the other preview button.  
    +PreviewSiteServedByDolibarr=<u>Preview %s in a new tab.</u><br><br>The %s will be served by Dolibarr server so it does not need any extra web server (like Apache, Nginx, IIS) to be installed.<br>The inconvenient is that URL of pages are not user friendly and start with path of your Dolibarr.<br>URL served by Dolibarr:<br><strong>%s</strong><br><br>To use your own external web server to serve this web site, create a virtual host on your web server that point on directory<br><strong>%s</strong><br>then enter the name of this virtual server and click on the other preview button.
     VirtualHostUrlNotDefined=URL of the virtual host served by external web server not defined
     NoPageYet=No pages yet
    +YouCanCreatePageOrImportTemplate=You can create a new page or import a full website template
     SyntaxHelp=Help on specific syntax tips
    -YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor. 
    -YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $langs, $db, $mysoc, $user, $website.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax:<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open access), syntax is:<br><strong>&lt;a href="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
    +YouCanEditHtmlSourceckeditor=You can edit HTML source code using the "Source" button in editor.
    +YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
     ClonePage=Clone page/container
     CloneSite=Clone site
     SiteAdded=Web site added
    @@ -58,9 +61,10 @@ LanguageMustNotBeSameThanClonedPage=You clone a page as a translation. The langu
     ParentPageId=Parent page ID
     WebsiteId=Website ID
     CreateByFetchingExternalPage=Create page/container by fetching page from external URL...
    -OrEnterPageInfoManually=Or create empty page from scratch...
    +OrEnterPageInfoManually=Or create page from scratch or from a page template...
     FetchAndCreate=Fetch and Create
    -ExportSite=Export site
    +ExportSite=Export website
    +ImportSite=Import website template
     IDOfPage=Id of page
     Banner=Banner
     BlogPost=Blog post
    @@ -74,7 +78,7 @@ AnotherContainer=Another container
     WEBSITE_USE_WEBSITE_ACCOUNTS=Enable the web site account table
     WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Enable the table to store web site accounts (login/pass) for each website / thirdparty
     YouMustDefineTheHomePage=You must first define the default Home page
    -OnlyEditionOfSourceForGrabbedContentFuture=Note: only edition of HTML source will be possible when a page content is initiliazed by grabbing it from an external page (WYSIWYG editor will not be available)
    +OnlyEditionOfSourceForGrabbedContentFuture=Warning: Creating a web page by importing an external web page is reserved to experienced user. Depending on the complexity of source page, the result of importation may differs once imported from original. Also if the source page use common CSS style or not compatible javascript, it may break the look or features of the Web site editor when working on this page. This method is faster way to have a page but it is recommanded to create your new page from scratch or from a suggested page template.<br>Note also that only edition of HTML source will be possible when a page content has been initialized by grabbing it from an external page ("Online" editor will NOT be available)
     OnlyEditionOfSourceForGrabbedContent=Only edition of HTML source is possible when content was grabbed from an external site
     GrabImagesInto=Grab also images found into css and page.
     ImagesShouldBeSavedInto=Images should be saved into directory
    @@ -83,4 +87,9 @@ SubdirOfPage=Sub-directory dedicated to page
     AliasPageAlreadyExists=Alias page <strong>%s</strong> already exists
     CorporateHomePage=Corporate Home page
     EmptyPage=Empty page
    -ExternalURLMustStartWithHttp=External URL must start with http:// or https://
    \ No newline at end of file
    +ExternalURLMustStartWithHttp=External URL must start with http:// or https://
    +ZipOfWebsitePackageToImport=Zip file of website package
    +ShowSubcontainers=Show included containers
    +InternalURLOfPage=Internal URL of page
    +ThisPageIsTranslationOf=This page/container is translation of
    +ThisPageHasTranslationPages=This page/container has translation
    \ No newline at end of file
    diff --git a/htdocs/langs/en_US/withdrawals.lang b/htdocs/langs/en_US/withdrawals.lang
    index fa02317b321..c2c384793c4 100644
    --- a/htdocs/langs/en_US/withdrawals.lang
    +++ b/htdocs/langs/en_US/withdrawals.lang
    @@ -26,7 +26,7 @@ LastWithdrawalReceipt=Latest %s direct debit receipts
     MakeWithdrawRequest=Make a direct debit payment request
     WithdrawRequestsDone=%s direct debit payment requests recorded
     ThirdPartyBankCode=Third party bank code
    -NoInvoiceCouldBeWithdrawed=No invoice withdrawed with success. Check that invoices are on companies with a valid default BAN and that BAN has a RUM with mode <strong>%s</strong>.
    +NoInvoiceCouldBeWithdrawed=No invoice debited successfully. Check that invoices are on companies with a valid IBAN and that IBAN has a UMR (Unique Mandate Reference) with mode <strong>%s</strong>.
     ClassCredited=Classify credited
     ClassCreditedConfirm=Are you sure you want to classify this withdrawal receipt as credited on your bank account?
     TransData=Transmission date
    @@ -61,7 +61,7 @@ CreateAll=Create direct debit file (all)
     CreateGuichet=Only office
     CreateBanque=Only bank
     OrderWaiting=Waiting for treatment
    -NotifyTransmision=Withdrawal Transmission 
    +NotifyTransmision=Withdrawal Transmission
     NotifyCredit=Withdrawal Credit
     NumeroNationalEmetter=National Transmitter Number
     WithBankUsingRIB=For bank accounts using RIB
    @@ -80,7 +80,7 @@ RUM=UMR
     RUMLong=Unique Mandate Reference
     RUMWillBeGenerated=If empty, UMR number will be generated once bank account information are saved
     WithdrawMode=Direct debit mode (FRST or RECUR)
    -WithdrawRequestAmount=Amount of Direct debit request: 
    +WithdrawRequestAmount=Amount of Direct debit request:
     WithdrawRequestErrorNilAmount=Unable to create direct debit request for empty amount.
     SepaMandate=SEPA Direct Debit Mandate
     SepaMandateShort=SEPA Mandate
    @@ -103,7 +103,7 @@ SEPAFRST=SEPA FRST
     ExecutionDate=Execution date
     CreateForSepa=Create direct debit file
     
    -### Notifications 
    +### Notifications
     InfoCreditSubject=Payment of direct debit payment order %s by the bank
     InfoCreditMessage=The direct debit payment order %s has been paid by the bank<br>Data of payment: %s
     InfoTransSubject=Transmission of direct debit payment order %s to bank
    diff --git a/htdocs/langs/en_US/workflow.lang b/htdocs/langs/en_US/workflow.lang
    index ed19a531c07..c16caf44765 100644
    --- a/htdocs/langs/en_US/workflow.lang
    +++ b/htdocs/langs/en_US/workflow.lang
    @@ -1,20 +1,20 @@
    -# Dolibarr language file - Source file is en_US - workflow 
    +# Dolibarr language file - Source file is en_US - workflow
     WorkflowSetup=Workflow module setup
    -WorkflowDesc=This module is designed to modify the behaviour of automatic actions into application. By default, workflow is open (you can do things in the order you want). You can activate the automatic actions you are interested in.
    +WorkflowDesc=This module provides some automatic actions. By default, the workflow is open (you can do things in the order you want) but here you can activate some automatic actions.
     ThereIsNoWorkflowToModify=There is no workflow modifications available with the activated modules.
     # Autocreate
    -descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a customer order after a commercial proposal is signed (new order will have same amount than proposal)
    -descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (new invoice will have same amount than proposal)
    +descWORKFLOW_PROPAL_AUTOCREATE_ORDER=Automatically create a customer order after a commercial proposal is signed (the new order will have same amount as the proposal)
    +descWORKFLOW_PROPAL_AUTOCREATE_INVOICE=Automatically create a customer invoice after a commercial proposal is signed (the new invoice will have same amount as the proposal)
     descWORKFLOW_CONTRACT_AUTOCREATE_INVOICE=Automatically create a customer invoice after a contract is validated
    -descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a customer order is closed (new invoice will have same amount than order)
    +descWORKFLOW_ORDER_AUTOCREATE_INVOICE=Automatically create a customer invoice after a customer order is closed (the new invoice will have same amount as the order)
     # Autoclassify customer proposal or order
    -descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal(s) to billed when customer order is set to billed (and if amount of the order is same than total amount of signed linked proposals)
    -descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal(s) to billed when customer invoice is validated (and if amount of the invoice is same than total amount of signed linked proposals)
    -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is validated (and if amount of the invoice is same than total amount of linked orders)
    -descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source customer order(s) to billed when customer invoice is set to paid (and if amount of the invoice is same than total amount of linked orders)
    -descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source customer order to shipped when a shipment is validated (and if quantity shipped by all shipments is the same as in the order to update)
    +descWORKFLOW_ORDER_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when customer order is set to billed (and if the amount of the order is the same as the total amount of the signed linked proposal)
    +descWORKFLOW_INVOICE_CLASSIFY_BILLED_PROPAL=Classify linked source proposal as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the signed linked proposal)
    +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_ORDER=Classify linked source customer order as billed when customer invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
    +descWORKFLOW_INVOICE_CLASSIFY_BILLED_ORDER=Classify linked source customer order as billed when customer invoice is set to paid (and if the amount of the invoice is the same as the total amount of the linked order)
    +descWORKFLOW_ORDER_CLASSIFY_SHIPPED_SHIPPING=Classify linked source customer order as shipped when a shipment is validated (and if the quantity shipped by all shipments is the same as in the order to update)
     # Autoclassify supplier order
    -descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked proposals)
    -descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order(s) to billed when vendor invoice is validated (and if amount of the invoice is same than total amount of linked orders)
    +descWORKFLOW_ORDER_CLASSIFY_BILLED_SUPPLIER_PROPOSAL=Classify linked source vendor proposal as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked proposal)
    +descWORKFLOW_INVOICE_AMOUNT_CLASSIFY_BILLED_SUPPLIER_ORDER=Classify linked source purchase order as billed when vendor invoice is validated (and if the amount of the invoice is the same as the total amount of the linked order)
     AutomaticCreation=Automatic creation
    -AutomaticClassification=Automatic classification
    \ No newline at end of file
    +AutomaticClassification=Automatic classification
    diff --git a/htdocs/langs/es_AR/admin.lang b/htdocs/langs/es_AR/admin.lang
    deleted file mode 100644
    index 790d1e6cd7b..00000000000
    --- a/htdocs/langs/es_AR/admin.lang
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -# Dolibarr language file - Source file is en_US - admin
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    diff --git a/htdocs/langs/es_BO/admin.lang b/htdocs/langs/es_BO/admin.lang
    deleted file mode 100644
    index 790d1e6cd7b..00000000000
    --- a/htdocs/langs/es_BO/admin.lang
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -# Dolibarr language file - Source file is en_US - admin
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    diff --git a/htdocs/langs/es_CL/admin.lang b/htdocs/langs/es_CL/admin.lang
    index 8afcfd78a60..27c8e300d02 100644
    --- a/htdocs/langs/es_CL/admin.lang
    +++ b/htdocs/langs/es_CL/admin.lang
    @@ -4,9 +4,7 @@ VersionLastInstall=Versión de instalación inicial
     VersionLastUpgrade=Versión de actualización más reciente.
     VersionUnknown=Desconocido
     VersionRecommanded=Recomendado
    -FileCheckDesc=Esta herramienta le permite verificar la integridad de los archivos y la configuración de su aplicación, comparando cada archivo con los archivos oficiales. El valor de algunas constantes de configuración también puede verificarse. Puede usar esta herramienta para detectar si algunos archivos fueron modificados por un hacker, por ejemplo.
     FileIntegrityIsStrictlyConformedWithReference=La integridad de los archivos está estrictamente conformada con la referencia.
    -FileIntegrityIsOkButFilesWereAdded=La verificación de integridad de archivos ha pasado, sin embargo, se agregaron algunos archivos nuevos.
     FileIntegritySomeFilesWereRemovedOrModified=La verificación de la integridad de los archivos ha fallado. Algunos archivos fueron modificados, eliminados o agregados.
     MakeIntegrityAnalysisFrom=Haga un análisis de integridad de los archivos de la aplicación desde
     LocalSignature=Firma local incorporada (menos confiable)
    @@ -20,20 +18,16 @@ SessionId=ID de sesión
     SessionSaveHandler=Handler para guardar sesiones
     SessionSavePath=Localización de la sesión de almacenamiento
     ConfirmPurgeSessions=¿De verdad quieres purgar todas las sesiones? Esto desconectará a todos los usuarios (excepto usted).
    -NoSessionListWithThisHandler=Guardar el controlador de sesión configurado en su PHP no permite listar todas las sesiones en ejecución.
    -ConfirmLockNewSessions=¿Seguro que quieres restringir cualquier conexión nueva de Dolibarr contigo mismo? Solo el usuario <b>%s</b> podrá conectarse después de aplicar.
     UnlockNewSessions=Eliminar bloqueo de conexión
     YourSession=Tu sesión
    -Sessions=Sesión de usuarios
     WebUserGroup=Usuario / grupo del servidor web
    -NoSessionFound=Parece que su PHP no permite listar sesiones activas. El directorio utilizado para guardar sesiones (<b>%s</b>) puede estar protegido (por ejemplo, por permisos del sistema operativo o por la directiva PHP open_basedir).
     DBStoringCharset=Juego de caracteres de base de datos para almacenar datos
     DBSortingCharset=Juego de caracteres de base de datos para ordenar los datos
     WarningModuleNotActive=El módulo <b>%s</b> debe estar habilitado.
     WarningOnlyPermissionOfActivatedModules=Aquí solo se muestran los permisos relacionados con los módulos activados. Puede activar otros módulos en la página Inicio-> Configuración-> Módulos.
     DolibarrSetup=Instalación o actualización de Dolibarr
     GUISetup=Visualización
    -SetupArea=Área de configuración
    +SetupArea=Configurar
     UploadNewTemplate=Cargar nueva plantilla (s)
     FormToTestFileUploadForm=Formulario para probar la carga del archivo (según la configuración)
     IfModuleEnabled=Nota: sí es efectivo solo si el módulo <b>%s</b> está habilitado
    @@ -49,8 +43,6 @@ ErrorReservedTypeSystemSystemAuto=El valor 'sistema' y 'systemauto' para el tipo
     DisableJavascript=Deshabilite las funciones de JavaScript y Ajax (recomendado para navegadores ciegos o de texto)
     UseSearchToSelectCompanyTooltip=Además, si tiene un gran número de terceros (> 100 000), puede aumentar la velocidad estableciendo constante COMPANY_DONOTSEARCH_ANYWHERE en 1 en Configuración-> Otro. La búsqueda se limitará al inicio de la cadena.
     UseSearchToSelectContactTooltip=Además, si tiene un gran número de terceros (> 100 000), puede aumentar la velocidad estableciendo CONTACT_DONOTSEARCH_ANYWHERE constante en 1 en Configuración-> Otro. La búsqueda se limitará al inicio de la cadena.
    -DelaiedFullListToSelectCompany=Espere a que presione una tecla antes de cargar el contenido de la lista combinada de terceros (Esto puede aumentar el rendimiento si tiene una gran cantidad de terceros, pero es menos conveniente)
    -DelaiedFullListToSelectContact=Espere a que presione una tecla antes de cargar el contenido de la lista combinada de contactos (Esto puede aumentar el rendimiento si tiene una gran cantidad de contactos, pero es menos conveniente)
     NumberOfKeyToSearch=Número de caracteres para activar la búsqueda: %s
     NotAvailableWhenAjaxDisabled=No disponible cuando Ajax está deshabilitado
     AllowToSelectProjectFromOtherCompany=En el documento de un tercero, puede elegir un proyecto vinculado a otro tercero
    @@ -59,7 +51,6 @@ UsePreviewTabs=Usa pestañas de vista previa
     ShowPreview=Mostrar vista previa
     CurrentTimeZone=TimeZone PHP (servidor)
     MySQLTimeZone=TimeZone MySql (base de datos)
    -TZHasNoEffect=Las fechas son almacenadas y devueltas por el servidor de la base de datos como si se mantuvieran como cadenas enviadas. La zona horaria tiene efecto solo cuando se utiliza la función UNIX_TIMESTAMP (que Dolibarr no debe usar, por lo que la base de datos TZ no debería tener ningún efecto, incluso si se cambió después de que se ingresaron los datos).
     Space=Espacio
     NextValue=Siguiente valor
     NextValueForInvoices=Siguiente valor (facturas)
    @@ -71,9 +62,7 @@ NoMaxSizeByPHPLimit=Nota: no hay límite establecido en su configuración de PHP
     MaxSizeForUploadedFiles=Tamaño máximo para los archivos cargados (0 para no permitir ninguna carga)
     UseCaptchaCode=Use el código gráfico (CAPTCHA) en la página de inicio de sesión
     AntiVirusCommand=Ruta completa al comando de antivirus
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
     AntiVirusParam=Más parámetros en la línea de comando
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
     ComptaSetup=Configuración del módulo de contabilidad
     UserSetup=Configuración de administración de usuario
     MultiCurrencySetup=Configuración multimoneda
    @@ -83,7 +72,6 @@ DetailPosition=Ordenar número para definir la posición del menú
     AllMenus=Todo
     NotConfigured=Módulo / Aplicación no configurada
     SetupShort=Configurar
    -OtherSetup=Otra configuración
     CurrentValueSeparatorThousand=Mil separadores
     Destination=Destino
     IdModule=ID del módulo
    @@ -96,8 +84,6 @@ PHPTZ=Servidor PHP Zona horaria
     DaylingSavingTime=Horario de verano
     CurrentHour=Tiempo de PHP (servidor)
     CurrentSessionTimeOut=Tiempo de espera actual de la sesión
    -YouCanEditPHPTZ=Para configurar una zona horaria de PHP diferente (no requerida), puede intentar agregar un archivo .htaccess con una línea como esta "SetEnv TZ Europe / Paris"
    -HoursOnThisPageAreOnServerTZ=Advertencia, a diferencia de otras pantallas, las horas en esta página no están en su zona horaria local, sino en la zona horaria del servidor.
     MaxNbOfLinesForBoxes=Número máximo de líneas para widgets
     PositionByDefault=Orden predeterminada
     MenusDesc=Los administradores de menú establecen el contenido de las dos barras de menú (horizontal y vertical).
    @@ -143,21 +129,15 @@ IgnoreDuplicateRecords=Ignorar errores de registro duplicado (INSERTAR IGNORAR)
     AutoDetectLang=Autodetectar (idioma del navegador)
     FeatureDisabledInDemo=Característica deshabilitada en demostración
     FeatureAvailableOnlyOnStable=Característica solo disponible en versiones estables oficiales
    -BoxesDesc=Los widgets son componentes que muestran cierta información que puede agregar para personalizar algunas páginas. Puede elegir entre mostrar el widget o no seleccionando la página de destino y haciendo clic en 'Activar', o haciendo clic en el cubo de basura para desactivarlo.
     OnlyActiveElementsAreShown=Solo se muestran los elementos de los <a href="%s"> módulos habilitados </a>.
    -ModulesDesc=Los módulos de Dolibarr definen qué aplicación / función está habilitada en el software. Algunas aplicaciones / módulos requieren permisos que debe otorgar a los usuarios después de activarlos. Haga clic en el botón activar / desactivar para habilitar un módulo / aplicación.
    -ModulesDeployDesc=Si los permisos en su sistema de archivos lo permiten, puede usar esta herramienta para implementar un módulo externo. El módulo será visible en la pestaña <strong>%s</strong>.
     ModulesMarketPlaces=Buscar aplicaciones / módulos externos
     ModulesDevelopYourModule=Desarrolla tu propia aplicación / módulos
    -ModulesDevelopDesc=Puede desarrollar o encontrar un socio para desarrollar para usted, su módulo personalizado
    -DOLISTOREdescriptionLong=En lugar de activar el <a href="https://www.dolistore.com"> sitio web de www.dolistore.com </a> para encontrar un módulo externo, puede usar esta herramienta incrustada que hará que la búsqueda en el mercado externo para usted (puede ser lento, necesita un acceso a internet) ...
     NotCompatible=Este módulo no parece compatible con su Dolibarr %s (Min. %s - Max. %s).
     CompatibleAfterUpdate=Este módulo requiere una actualización de su Dolibarr %s (Min. %s - Max. %s).
     SeeInMarkerPlace=Ver en Market place
     AchatTelechargement=Compra / Descarga
     GoModuleSetupArea=Para implementar / instalar un nuevo módulo, vaya al área de configuración del Módulo en <a href="%s"> %s </a>.
     DoliStoreDesc=DoliStore, el mercado oficial para los módulos externos Dolibarr ERP / CRM
    -DoliPartnersDesc=Lista de compañías que ofrecen módulos o características personalizadas (Nota: cualquier persona con experiencia en programación PHP puede proporcionar desarrollo personalizado para un proyecto de código abierto)
     URL=Enlazar
     BoxesAvailable=Widgets disponibles
     BoxesActivated=Widgets activados
    @@ -170,7 +150,6 @@ DoNotStoreClearPassword=No almacene contraseñas claras en la base de datos, per
     MainDbPasswordFileConfEncrypted=Contraseña de la base de datos encriptada en conf.php (Activada recomendada)
     InstrucToEncodePass=Para codificar la contraseña en el archivo <b>conf.php</b>, reemplace la línea <br><b>$dolibarr_main_db_pass="..."; </b><br>por<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Para decodificar la contraseña (elimina) en el archivo <b>conf.php</b>, reemplace la línea <br><b>$dolibarr_main_db_pass="crypted: ...";</b><br>por<br><b>$dolibarr_main_db_pass="%s"; </b>
    -ProtectAndEncryptPdfFiles=Protección de archivos pdf generados (NO activado activado, rompe generación masiva de pdf)
     ProtectAndEncryptPdfFilesDesc=La protección de un documento PDF lo mantiene disponible para leer e imprimir con cualquier navegador PDF. Sin embargo, la edición y copia ya no es posible. Tenga en cuenta que el uso de esta característica hace que la creación de un archivo PDF global fusionado no funcione.
     Feature=Característica
     Developpers=Desarrolladores / contribuyentes
    @@ -182,39 +161,20 @@ OfficialWebHostingService=Servicios de alojamiento web a los que se hace referen
     ReferencedPreferredPartners=Socios Preferidos
     ForDocumentationSeeWiki=Para documentación del usuario o desarrollador (Doc, Preguntas frecuentes ...), <br> echa un vistazo a la Wiki de Dolibarr: <br> <b> <a href="%s" target="_blank"> %s </a></b>
     ForAnswersSeeForum=Para cualquier otra pregunta/ayuda, puede utilizar el foro de Dolibarr: <br> <b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Esta área puede ayudarlo a obtener un servicio de ayuda de Ayuda en Dolibarr.
    -HelpCenterDesc2=Alguna parte de este servicio está disponible <b>solo en inglés</b>.
     CurrentMenuHandler=Manejador de menú actual
     SpaceX=Espacio X
     SpaceY=Espacio Y
     Emails=Correos electrónicos
     EMailsSetup=Configuración de correos electrónicos
    -EMailsDesc=Esta página le permite sobrescribir sus parámetros de PHP para el envío de correos electrónicos. En la mayoría de los casos, en el sistema operativo Unix / Linux, su configuración de PHP es correcta y estos parámetros son inútiles.
     EmailSenderProfiles=Perfiles de remitentes de correos electrónicos
    -MAIN_MAIL_SMTP_PORT=Puerto SMTP/SMTPS (por defecto en php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=Servidor SMTP/SMTP (por defecto en php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Puerto SMTP / SMTPS (no definido en PHP en sistemas tipo Unix)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Servidor SMTP / SMTPS (no definido en PHP en sistemas tipo Unix)
    -MAIN_MAIL_EMAIL_FROM=Correo electrónico remitente para correos electrónicos automáticos (por defecto en php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail utilizado para los correos electrónicos de devoluciones de errores (campos 'Errores-Para' en los correos electrónicos enviados)
    -MAIN_MAIL_AUTOCOPY_TO=Envíe sistemáticamente una copia oculta de todos los correos electrónicos enviados a
    -MAIN_DISABLE_ALL_MAILS=Deshabilitar todos los envíos de correos electrónicos (para propósitos de prueba o demostraciones)
     MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, para fines de prueba)
    -MAIN_MAIL_SENDMODE=Método a usar para enviar correos electrónicos
    -MAIN_MAIL_SMTPS_ID=SMTP ID si se requiere autenticación
    -MAIN_MAIL_SMTPS_PW=Contraseña SMTP si se requiere autenticación
    -MAIN_MAIL_EMAIL_TLS=Use el cifrado TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS=Utilice el cifrado TLS (STARTTLS)
    -MAIN_DISABLE_ALL_SMS=Deshabilitar todos los envíos de SMS (para propósitos de prueba o demostraciones)
     MAIN_SMS_SENDMODE=Método a usar para enviar SMS
    -MAIN_MAIL_SMS_FROM=Número de teléfono del remitente predeterminado para el envío de SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Correo electrónico del remitente por defecto para envíos manuales (correo electrónico del usuario o correo electrónico de la empresa)
     UserEmail=Correo electrónico del usuario
     CompanyEmail=Correo de la empresa
     FeatureNotAvailableOnLinux=Característica no disponible en sistemas como Unix. Pruebe su programa sendmail localmente.
    -SubmitTranslation=Si la traducción de este idioma no está completa o si encuentra errores, puede corregir esto editando archivos en el directorio <b>langs/%s</b> y envíe su cambio a www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Si la traducción de este idioma no está completa o si encuentra errores, puede corregir esto editando archivos en el directorio <b>langs /%s</b> y enviando archivos modificados en dolibarr.org/forum o para desarrolladores en github.com/Dolibarr/dolibarr.
     ModulesSetup=Módulos / configuración de la aplicación
    +ModuleFamilySrm=Gestión de relaciones con proveedores (VRM)
     ModuleFamilyProjects=Proyectos / trabajo colaborativo
     ModuleFamilyTechnic=Herramientas de varios módulos
     ModuleFamilyFinancial=Módulos financieros (Contabilidad / Tesorería)
    @@ -225,15 +185,10 @@ MenuHandlers=Controladores de menú
     MenuAdmin=Editor de menú
     ThisIsProcessToFollow=Estos son los pasos para procesar:
     ThisIsAlternativeProcessToFollow=Esta es una configuración alternativa para procesar manualmente:
    -FindPackageFromWebSite=Encuentre un paquete que proporcione la característica que desea (por ejemplo, en el sitio web oficial %s).
     DownloadPackageFromWebSite=Descargar el paquete (por ejemplo, desde el sitio web oficial %s).
    -UnpackPackageInDolibarrRoot=Extraiga los archivos empaquetados en el directorio del servidor dedicado a Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=Para implementar/instalar un módulo externo, descomprima los archivos empaquetados en el directorio del servidor dedicado a los módulos: <b>%s</b>
    -SetupIsReadyForUse=La implementación del módulo ha finalizado. Sin embargo, debe habilitar y configurar el módulo en su aplicación yendo a la página para configurar los módulos: <a href="%s"> %s </a>.
     NotExistsDirect=El directorio raíz alternativo no está definido en un directorio existente. <br>
     InfDirAlt=Desde la versión 3, es posible definir un directorio raíz alternativo. Esto le permite almacenar, en un directorio dedicado, complementos y plantillas personalizadas. <br> Simplemente cree un directorio en la raíz de Dolibarr (p. Ej .: personalizado). <br>
     InfDirExample=<br>Entonces, declare en el archivo <strong>conf.php</strong><br> $dolibarr_main_url_root_alt = '/ custom'<br>$ dolibarr_main_document_root_alt = '/path/of /dolibarr/htdocs /custom' <br> Si estas líneas se comentan con "#", para habilitarlas, simplemente elimine el comentario del carácter "#".
    -YouCanSubmitFile=Para este paso, puede enviar el archivo .zip del paquete de módulo aquí:
     CallUpdatePage=Vaya a la página que actualiza la estructura de la base de datos y los datos: %s.
     LastActivationIP=Última activación IP
     UpdateServerOffline=Servidor de actualización fuera de línea
    @@ -259,15 +214,10 @@ SeeWikiForAllTeam=Echa un vistazo a la página wiki para ver una lista completa
     UseACacheDelay=Retardo para la respuesta de exportación en caché en segundos (0 o vacío para no caché)
     DisableLinkToHelpCenter=Ocultar enlace "<b>Necesita ayuda o soporte</b>" en la página de inicio de sesión
     DisableLinkToHelp=Ocultar link para ayuda online "<b>%s</b>"
    -AddCRIfTooLong=No hay ajuste automático, por lo que si la línea está fuera de página en los documentos porque es demasiado larga, debe agregar los retornos de carro en el área de texto.
    -ConfirmPurge=¿Estás seguro de que deseas ejecutar esta purga? <br> Esto eliminará definitivamente todos tus archivos de datos sin forma de restaurarlos (archivos ECM, archivos adjuntos ...).
     MinLength=Longitud mínima
     LanguageFilesCachedIntoShmopSharedMemory=Archivos .lang cargados en la memoria compartida
    -ExamplesWithCurrentSetup=Ejemplos con la configuración de ejecución actual
     ListOfDirectories=Lista de directorios de plantillas de OpenDocument
     ListOfDirectoriesForModelGenODT=Lista de directorios que contienen archivos de plantillas con formato OpenDocument.<br><br>Ponga aquí la ruta completa de directorios.<br>Agregue un retorno de carro entre cada directorio.<br>Para agregar un directorio del módulo GED, agregue aquí <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>. <br><br>Los archivos en esos directorios deben terminar con <b>.odt</b> o <b>.ods</b>.
    -NumberOfModelFilesFound=Número de archivos de plantillas ODT / ODS encontrados en esos directorios
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Para saber cómo crear sus plantillas de documento Odt, antes de almacenarlas en esos directorios, lea la documentación wiki:
     FirstnameNamePosition=Posición del nombre / apellido
     DescWeather=Las siguientes imágenes se mostrarán en el tablero cuando el número de acciones tardías alcance los siguientes valores:
    @@ -275,17 +225,13 @@ KeyForWebServicesAccess=Clave para usar los servicios web (parámetro "dolibarrk
     TestSubmitForm=Formulario de prueba de entrada
     ThisForceAlsoTheme=El uso de este administrador de menú también usará su propio tema, cualquiera que sea la elección del usuario. Además, este administrador de menú especializado para teléfonos inteligentes no funciona en todos los teléfonos inteligentes. Use otro administrador de menú si tiene problemas en el suyo.
     ThemeDir=Directorio de pieles
    -ConnectionTimeout=Tiempo de espera de conexión
     ResponseTimeout=Tiempo de espera de respuesta
     SmsTestMessage=Mensaje de prueba de __PHONEFROM__ a __PHONETO__
     ModuleMustBeEnabledFirst=El módulo <b>%s</b> debe estar habilitado primero si necesitas esta característica.
     SecurityToken=Clave para asegurar URLs
    -NoSmsEngine=No hay un administrador de envío de SMS disponible. SMS sender manager no están instalados con distribución predeterminada (porque dependen de un proveedor externo) pero puede encontrar algunos en %s
    -PDFDesc=Puede establecer cada opción global relacionada con la generación de PDF
     PDFAddressForging=Reglas para forjar cuadros de direcciones
     HideAnyVATInformationOnPDF=Ocultar toda la información relacionada con Impuesto a las ventas / IVA en PDF generado
     PDFRulesForSalesTax=Reglas para el impuesto a las ventas / IVA
    -HideLocalTaxOnPDF=Ocultar %s tasa en venta de impuestos en la columna de PDF
     HideDescOnPDF=Ocultar la descripción de productos en PDF generado
     HideRefOnPDF=Ocultar REF. de productos en PDF generado
     HideDetailsOnPDF=Ocultar detalles de líneas de productos en PDF generado
    @@ -295,7 +241,6 @@ UrlGenerationParameters=Parámetros para asegurar URLs
     SecurityTokenIsUnique=Use un parámetro de clave segura único para cada URL
     EnterRefToBuildUrl=Ingrese la referencia para el objeto %s
     GetSecuredUrl=Obtener URL calculado
    -ButtonHideUnauthorized=Ocultar botones a usuarios que no son administradores para acciones no autorizadas en lugar de mostrar botones desactivados en gris
     OldVATRates=Tasa de IVA anterior
     NewVATRates=Nueva tasa de IVA
     PriceBaseTypeToChange=Modificar en precios con el valor de referencia base definido en
    @@ -307,13 +252,11 @@ Boolean=Boolean (una casilla de verificación)
     ExtrafieldSelect =Seleccionar lista
     ExtrafieldSelectList =Seleccionar de la mesa
     ExtrafieldSeparator=Separador (no un campo)
    -ExtrafieldRadio=Botones de opción (solo a elección)
     ExtrafieldCheckBox=Casillas de verificación
     ExtrafieldCheckBoxFromList=Casillas de verificación de la mesa
     ExtrafieldLink=Enlace a un objeto
     ComputedFormula=Campo computado
     ComputedFormulaDesc=Puede ingresar aquí una fórmula usando otras propiedades del objeto o cualquier código PHP para obtener un valor calculado dinámico. Puede usar cualquier fórmula compatible con PHP, incluido el "?" operador de condición y objeto global siguiente: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>. <br><strong> ADVERTENCIA</strong>: solo algunas propiedades de $object puede estar disponible. Si necesita propiedades no cargadas, simplemente busque el objeto en su fórmula como en el segundo ejemplo. <br> Usar un campo calculado significa que no puede ingresar ningún valor desde la interfaz. Además, si hay un error de sintaxis, la fórmula puede devolver nada. <br><br>Ejemplo de fórmula: <br>$object-> id <10? round ($ object-> id / 2, 2): ($ object-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2) <br><br>Ejemplo para recargar objeto<br> (($reloadedobj = new Societe ($db)) && ($reloadedobj-> fetch ($obj-> id? $Obj-> id: ($obj-> rowid? $Obj-> rowid: $ object-> id))> 0))? $reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1'<br><br>Otro ejemplo de fórmula para forzar la carga del objeto y su objeto principal: <br> (($reloadedobj = new task ($ db)) && ($ reloadedobj-> fetch ($ object-> id)> 0) && ($ secondloadedobj = new Project ($ db)) && ($secondloadedobj-> fetch ($reloadedobj-> fk_project )> 0))? $secondloadedobj-> ref: 'Proyecto principal no encontrado'
    -ExtrafieldParamHelpPassword=Mantenga este campo vacío significa que el valor se almacenará sin cifrado (el campo debe estar solo oculto con estrella en la pantalla). Establezca aquí el valor 'automático' para usar la regla de cifrado predeterminada para guardar la contraseña en la base de datos (entonces el valor leído será el solo hash, no hay forma de recuperar el valor original)
     ExtrafieldParamHelpselect=La lista de valores debe ser líneas con formato clave, valor (donde la clave no puede ser '0')<br><br> por ejemplo: <br>1, valor1<br>2, valor2<br>código3, valor3<br>...<br><br>Para que la lista dependa de otra lista de atributos complementarios: <br> 1, valor1 | opciones_ <i>parent_list_code</i>: parent_key<br>2, value2 | options_<i>parent_list_code</i>:parent_key <br><br>Para que la lista dependa de otra lista: <br>1, value1 | <i>parent_list_code</i> :parent_key <br>2,value2|<i> parent_list_code</i> :parent_key
     ExtrafieldParamHelpcheckbox=La lista de valores debe ser líneas con formato clave, valor (donde la clave no puede ser '0') <br> <br> por ejemplo: <br> 1, valor1 <br> 2, valor2 <br> 3, valor3 <br> ...
     ExtrafieldParamHelpradio=La lista de valores debe ser líneas con formato clave, valor (donde la clave no puede ser '0')<br><br>por ejemplo: <br>1, valor1<br>2, valor2<br>3, valor3<br> ...
    @@ -329,44 +272,32 @@ KeepEmptyToUseDefault=Manténgalo vacío para usar el valor predeterminado
     DefaultLink=Enlace predeterminado
     ValueOverwrittenByUserSetup=Advertencia, este valor puede ser sobrescrito por la configuración específica del usuario (cada usuario puede establecer su propia URL de clicktodial)
     ExternalModule=Módulo externo: instalado en el directorio %s
    -BarcodeInitForThirdparties=Código de barras masivo init para terceros
     BarcodeInitForProductsOrServices=Inicialización o reinicio masivo del código de barras para productos o servicios
     CurrentlyNWithoutBarCode=Actualmente, tiene <strong>%s</strong> registros en <strong>%s</strong> %s sin código de barras definido.
     InitEmptyBarCode=Valor inicial para los próximos %s registros vacíos
     EraseAllCurrentBarCode=Borrar todos los valores actuales del código de barras
     ConfirmEraseAllCurrentBarCode=¿Seguro que quieres borrar todos los valores actuales del código de barras?
     AllBarcodeReset=Todos los valores del código de barras han sido eliminados
    -NoBarcodeNumberingTemplateDefined=No hay ninguna plantilla de código de barras habilitada en la configuración del módulo de código de barras.
     ShowDetailsInPDFPageFoot=Agregue más detalles en el pie de página de los archivos PDF, como la dirección de su empresa o los nombres de los administradores (para completar los ID profesionales, el capital de la empresa y el número de IVA).
     NoDetails=No hay más detalles en el pie de página
     DisplayCompanyManagers=Mostrar nombres de administrador
     DisplayCompanyInfoAndManagers=Mostrar los nombres de administrador y dirección de la compañía
    -EnableAndSetupModuleCron=Si desea que esta factura recurrente sea generada automáticamente, el módulo *%s* debe estar habilitado y configurado correctamente. De lo contrario, la generación de facturas se debe hacer manualmente desde esta plantilla con el botón * Crear *. Tenga en cuenta que incluso si activó la generación automática, puede iniciar de forma segura la generación manual. La generación de duplicados para el mismo período no es posible.
    -ModuleCompanyCodeCustomerAquarium=%s seguido por un código de cliente externo para un código de contabilidad del cliente
    -ModuleCompanyCodeSupplierAquarium=%s seguido por un código de proveedor externo para un código de contabilidad de proveedor
     ModuleCompanyCodePanicum=Devuelve un código de contabilidad vacío.
     ModuleCompanyCodeDigitaria=El código de contabilidad depende del código de un tercero. El código se compone del carácter "C" en la primera posición seguido de los primeros 5 caracteres del código de terceros.
     Use3StepsApproval=De forma predeterminada, los pedidos de compra deben ser creados y aprobados por 2 usuarios diferentes (un paso / usuario para crear y un paso / usuario para aprobar. Tenga en cuenta que si el usuario tiene ambos permisos para crear y aprobar, un paso / usuario será suficiente) . Puede solicitar con esta opción que presente un tercer paso / aprobación del usuario, si el monto es mayor que un valor dedicado (por lo que se necesitarán 3 pasos: 1 = validación, 2 = primera aprobación y 3 = segunda aprobación si el monto es suficiente). <br> Configure esto como vacío si una aprobación (2 pasos) es suficiente, configúrelo a un valor muy bajo (0.1) si siempre se requiere una segunda aprobación (3 pasos).
     UseDoubleApproval=Utilice una aprobación de 3 pasos cuando la cantidad (sin impuestos) sea más alta que ...
    -WarningPHPMail=ADVERTENCIA: a menudo es mejor configurar los correos electrónicos salientes para usar el servidor de correo electrónico de su proveedor en lugar de la configuración predeterminada. Algunos proveedores de correo electrónico (como Yahoo) no le permiten enviar un correo electrónico desde otro servidor que no sea su propio servidor. Su configuración actual utiliza el servidor de la aplicación para enviar correos electrónicos y no el servidor de su proveedor de correo electrónico, por lo que algunos destinatarios (el compatible con el restrictivo protocolo DMARC) le preguntarán a su proveedor de correo electrónico si pueden aceptar su correo electrónico y algunos proveedores de correo electrónico. (como Yahoo) puede responder "no" porque el servidor no es un servidor de ellos, por lo que es posible que no se acepten algunos de sus correos electrónicos enviados (tenga cuidado también con la cuota de envío de su proveedor de correo electrónico). Si su proveedor de correo electrónico (como Yahoo) tiene esta restricción, debe cambiar Configuración de correo electrónico para elegir el otro método "Servidor SMTP" e ingresar el servidor SMTP y las credenciales proporcionadas por su proveedor de correo electrónico (solicite a su proveedor de correo electrónico que obtenga las credenciales SMTP para su cuenta).
    +WarningPHPMail2=Si su proveedor SMTP de correo electrónico necesita restringir el cliente de correo electrónico a algunas direcciones IP (muy raras), esta es la dirección IP del agente de usuario de correo (MUA) para su aplicación ERP CRM: <strong> %s </ strong>.
     ClickToShowDescription=Haga clic para mostrar la descripción
    -DependsOn=Este módulo necesita el módulo (s)
     RequiredBy=Este módulo es requerido por el módulo (s)
    -TheKeyIsTheNameOfHtmlField=Este es el nombre del campo HTML. Esta necesidad de tener conocimientos técnicos para leer el contenido de la página HTML para obtener el nombre clave de un campo.
    -PageUrlForDefaultValues=Debes ingresar aquí la url relativa de la página. Si incluye parámetros en la URL, los valores predeterminados serán efectivos si todos los parámetros tienen el mismo valor. Ejemplos:
     PageUrlForDefaultValuesCreate=<br>Para que la forma de crear un nuevo tercero, es <strong>%s</strong>,<br>. Si desea valor predeterminado solo si url tiene algún parámetro, puede usar <strong>%s</strong>.
    -PageUrlForDefaultValuesList=<br>Para la página que enumera terceros, es<strong>%s</strong>,<br>. Si desea valor predeterminado solo si url tiene algún parámetro, puede usar <strong>%s</strong>
    -GoIntoTranslationMenuToChangeThis=Se ha encontrado una traducción para la clave con este código, así que para cambiar este valor, debe editarlo desde Home-Setup-translation.
     WarningSettingSortOrder=Advertencia: establecer un orden de clasificación predeterminado puede dar como resultado un error técnico al ir a la página de la lista si el campo es un campo desconocido. Si experimenta dicho error, vuelva a esta página para eliminar el orden de clasificación predeterminado y restablecer el comportamiento predeterminado.
     ProductDocumentTemplates=Plantillas de documentos para generar documentos de productos
     FreeLegalTextOnExpenseReports=Texto legal gratuito en informes de gastos
     WatermarkOnDraftExpenseReports=Marca de agua en los borradores de informes de gastos
     AttachMainDocByDefault=Establezca esto en 1 si desea adjuntar el documento principal al correo electrónico de forma predeterminada (si corresponde)
    -DAV_ALLOW_PUBLIC_DIRTooltip=El directorio público de WebDav es un directorio WebDAV al que todos pueden acceder (en modo lectura y escritura), sin necesidad de tener / usar una cuenta de inicio de sesión / contraseña existente.
     Module0Desc=Gestión de usuarios / empleados y grupos
     Module1Desc=Empresas y gestión de contactos (clientes, prospectos ...)
     Module2Desc=Administración comercial
    -Module10Desc=Informes contables simples (diarios, rotación) basados ​​en el contenido de la base de datos. No usa ninguna tabla de contabilidad.
     Module20Name=Cotizaciones
     Module20Desc=Gestión de cotizaciones/propuestas comerciales
     Module22Name=E-mailings masivos
    @@ -375,6 +306,7 @@ Module23Desc=Monitoreo del consumo de energías
     Module25Desc=Gestión de pedidos del cliente
     Module30Name=Facturas
     Module30Desc=Gestión de facturas y notas de crédito para clientes. Gestión de facturas para proveedores
    +Module40Desc=Proveedores y gestión de compras (órdenes de compra y facturación)
     Module42Desc=Instalaciones de registro (archivo, syslog, ...). Dichos registros son para fines técnicos / de depuración.
     Module49Desc=Gestión del editor
     Module50Desc=Gestión de producto
    @@ -382,11 +314,9 @@ Module51Name=Envíos masivos
     Module51Desc=Gerencia de correo de papel en masa
     Module52Desc=Gestión de stock (productos)
     Module53Desc=Gestión De Servicios
    -Module54Desc=Gestión de contratos (servicios o suscripciones de reconexión)
     Module55Desc=Gestión del código de barras
     Module56Desc=Integración de telefonía
     Module57Name=Ordenes de pago bancarias directas
    -Module57Desc=Gestión de órdenes de pago de débito directo. Incluye generación de archivo SEPA para países europeos.
     Module58Desc=Integración de un sistema ClickToDial (Asterisk, ...)
     Module59Desc=Agregar función para generar una cuenta de Bookmark4u desde una cuenta de Dolibarr
     Module70Desc=Gestión de intervención
    @@ -395,70 +325,50 @@ Module75Desc=Gestión de gastos y viajes
     Module80Name=Envíos
     Module80Desc=Gestión de envíos y entrega
     Module85Desc=Gestión de cuentas bancarias o de efectivo
    -Module100Name=Sitio externo
    -Module100Desc=Este módulo incluye un sitio web externo o una página en los menús de Dolibarr y lo visualiza en un marco de Dolibarr
     Module105Desc=Mailman o interfaz SPIP para el módulo miembro
    -Module200Desc=Sincronización de directorios LDAP
     Module210Desc=Integración PostNuke
     Module240Name=Exportación de datos
    -Module240Desc=Herramienta para exportar datos de Dolibarr (con asistentes)
     Module250Name=Importaciones de datos
    -Module250Desc=Herramienta para importar datos en Dolibarr (con asistentes)
     Module310Desc=Gestión de miembros de la Fundación
     Module320Desc=Agregar fuente RSS dentro de las páginas de pantalla de Dolibarr
    -Module400Name=Proyectos / Oportunidades / Leads
    -Module400Desc=Gestión de proyectos, oportunidades / clientes potenciales y / o tareas. También puede asignar cualquier elemento (factura, orden, propuesta, intervención, ...) a un proyecto y obtener una vista transversal desde la vista del proyecto.
     Module410Desc=Integración de Webcalendar
    +Module500Desc=Gestión de otros gastos (impuestos a la venta, impuestos sociales o fiscales, dividendos, ...)
     Module510Name=Pago de los salarios de los empleados
    -Module510Desc=Registre y siga el pago de los salarios de sus empleados
     Module520Name=Préstamo
     Module520Desc=Gestión de préstamos
     Module600Name=Notificaciones sobre eventos comerciales
    -Module600Desc=Enviar notificaciones de correo electrónico (activadas por algunos eventos comerciales) a los usuarios (configuración definida en cada usuario), a contactos de terceros (configuración definida en cada tercero) o a correos electrónicos fijos
    -Module600Long=Tenga en cuenta que este módulo está dedicado a enviar correos electrónicos en tiempo real cuando ocurre un evento comercial dedicado. Si está buscando una función para enviar recordatorios por correo electrónico de los eventos de su agenda, vaya a la configuración del módulo Agenda.
     Module770Name=Reporte de gastos
    -Module770Desc=Informes de gestión y reclamación de gastos (transporte, comida, ...)
     Module1120Name=Propuesta comercial del vendedor
    +Module1120Desc=Solicitar propuesta comercial del vendedor y precios
     Module1200Desc=Integración Mantis
     Module1520Name=Generación de documentos
     Module1520Desc=Generación masiva de documentos de correo
     Module1780Name=Etiquetas / Categorías
     Module1780Desc=Crear etiquetas / categoría (productos, clientes, proveedores, contactos o miembros)
    -Module2000Desc=Permitir editar un área de texto usando un editor avanzado (Basado en CKEditor)
     Module2200Desc=Permitir el uso de expresiones matemáticas para los precios
     Module2300Name=Trabajos programados
     Module2300Desc=Gestión programada de trabajos (alias cron o crono tabla)
     Module2400Name=Eventos / Agenda
    -Module2400Desc=Siga los eventos hechos y venideros. Deje que la aplicación registre los eventos automáticos con fines de seguimiento o registre eventos manuales o rendez-vous. Este es el principal módulo importante para una buena gestión de relaciones con clientes o proveedores.
     Module2500Desc=Sistema de gestión de documentos / gestión electrónica de contenidos. Organización automática de sus documentos generados o almacenados. Compártelos cuando lo necesites.
     Module2600Name=API / servicios web (servidor SOAP)
     Module2600Desc=Habilite el servidor Dolibarr SOAP que proporciona servicios de API
     Module2610Name=API / servicios web (servidor REST)
     Module2610Desc=Habilite el servidor REST Dolibarr proporcionando servicios API
     Module2660Name=Llamar a WebServices (cliente SOAP)
    -Module2660Desc=Habilite el cliente de servicios web Dolibarr (se puede usar para enviar datos / solicitudes a servidores externos. Pedidos a proveedores admitidos solo por el momento)
    -Module2700Desc=Use el servicio Gravatar en línea (www.gravatar.com) para mostrar la foto de los usuarios / miembros (que se encuentra con sus correos electrónicos). Necesita un acceso a internet
     Module2900Desc=Capacidades de conversiones GeoIP Maxmind
     Module3100Desc=Agregar un botón de Skype a los usuarios / terceros / contactos / tarjetas de miembros
    -Module3200Desc=Active el registro de algunos eventos comerciales en un registro inalterable. Los eventos se archivan en tiempo real. El registro es una tabla de eventos encadenados que solo se puede leer y exportar. Este módulo puede ser obligatorio para algunos países.
     Module4000Desc=Gestión de recursos humanos (gestión del departamento, contratos de empleados y sentimientos)
     Module5000Name=Multi-compañía
     Module5000Desc=Le permite administrar múltiples compañías
    +Module6000Desc=Gestión de flujo de trabajo (creación automática de objeto y / o cambio de estado automático)
     Module10000Desc=Crea sitios web públicos con un editor WYSIWG. Simplemente configure su servidor web (Apache, Nginx, ...) para que apunte al directorio dedicado de Dolibarr para tenerlo en línea en Internet con su propio nombre de dominio.
     Module20000Name=Administración de peticiones días libres
    -Module20000Desc=Declarar y seguir a los empleados deja las solicitudes
     Module39000Desc=Número de lote o de serie, administración de la fecha de caducidad y de vencimiento en los productos
    -Module50000Desc=Módulo para ofrecer una página de pago en línea que acepta pagos con tarjeta de crédito / débito a través de PayBox. Esto se puede usar para permitir que sus clientes realicen pagos gratuitos o para un pago en un objeto Dolibarr en particular (factura, orden, ...)
     Module50100Name=Puntos de venta
     Module50100Desc=Módulo de punto de venta (POS).
    -Module50200Desc=Módulo para ofrecer una página de pago en línea que acepta pagos con PayPal (tarjeta de crédito o crédito de PayPal). Esto se puede usar para permitir que sus clientes realicen pagos gratuitos o para un pago en un objeto Dolibarr en particular (factura, orden, ...)
    -Module50400Desc=Gestión contable (entradas dobles, libros auxiliares generales y auxiliares). Exporte el libro de contabilidad en varios otros formatos de software de contabilidad.
    -Module54000Desc=Impresión directa (sin abrir los documentos) utilizando la interfaz Cups IPP (la impresora debe estar visible desde el servidor, y las CUPS deben estar instaladas en el servidor).
     Module55000Name=Encuesta, encuesta o voto
    -Module55000Desc=Módulo para hacer sondeos, encuestas o votaciones en línea (como Doodle, Studs, Rdvz, ...)
     Module59000Desc=Módulo para administrar márgenes
     Module60000Desc=Módulo para gestionar comisiones
    -Module62000Desc=Agregue funciones para administrar Incoterm
     Module63000Desc=Administre los recursos (impresoras, automóviles, habitaciones, ...) que luego puede compartir en eventos
     Permission11=Lea las facturas de los clientes
     Permission12=Crear/modificar facturas de clientes
    @@ -476,9 +386,6 @@ Permission27=Eliminar cotizaciones
     Permission28=Exportar las cotizaciones
     Permission31=Leer productos
     Permission36=Ver / administrar productos ocultos
    -Permission41=Leer proyectos y tareas (proyecto compartido y proyectos para los que estoy en contacto). También puede ingresar el tiempo consumido, para mí o mi jerarquía, en las tareas asignadas (parte de horas)
    -Permission42=Crear/modificar proyectos (proyectos y proyectos compartidos para los que soy contacto). También puede crear tareas y asignar usuarios a proyectos y tareas
    -Permission44=Eliminar proyectos (proyectos compartidos y proyectos para los que soy contacto)
     Permission45=Proyectos de exportación
     Permission61=Leer intervenciones
     Permission67=Intervenciones de exportación
    @@ -501,7 +408,6 @@ Permission109=Eliminar envíos
     Permission111=Leer cuentas financieras
     Permission112=Crear/modificar / eliminar y comparar transacciones
     Permission113=Configurar cuentas financieras (crear, administrar categorías)
    -Permission114=Conciliar transacciones
     Permission115=Exportar transacciones y estados de cuenta
     Permission116=Transferencias entre cuentas
     Permission117=Administrar el envío de cheques
    @@ -509,15 +415,12 @@ Permission121=Leer terceros vinculados al usuario
     Permission122=Crear/modificar terceros vinculados al usuario
     Permission125=Eliminar terceros vinculados al usuario
     Permission126=Exportar terceros
    -Permission141=Lee todos los proyectos y tareas (también proyectos privados para los que no estoy en contacto)
    -Permission142=Crear/modificar todos los proyectos y tareas (también proyectos privados para los que no estoy en contacto)
     Permission144=Eliminar todos los proyectos y tareas (también proyectos privados para los que no estoy en contacto)
     Permission146=Leer proveedores
     Permission147=Leer estadísticas
     Permission151=Lea las órdenes de pago de débito directo
     Permission152=Crear/modificar una orden de pago de débito directo
     Permission153=Enviar / Transmitir órdenes de pago de débito directo
    -Permission154=Registro de créditos / rechazos de órdenes de pago de débito directo
     Permission161=Leer contratos/suscripciones
     Permission163=Activar un servicio / suscripción de un contrato
     Permission164=Deshabilitar un servicio / suscripción de un contrato
    @@ -533,7 +436,6 @@ Permission183=Validar órdenes de proveedor
     Permission185=Ordene o cancele pedidos a proveedores
     Permission186=Reciba pedidos a proveedores
     Permission188=Cancelar pedidos a proveedores
    -Permission194=Lee las líneas de bandwith
     Permission203=Ordenar pedidos de conexiones
     Permission204=Solicitar conexiones
     Permission205=Gestionar las conexiones
    @@ -554,18 +456,15 @@ Permission244=Ver los contenidos de las categorías ocultas
     Permission251=Leer otros usuarios y grupos
     PermissionAdvanced251=Leer otros usuarios
     Permission252=Permisos de lectura de otros usuarios
    -Permission253=Crear/modificar otros usuarios, grupos y permisos
     PermissionAdvanced253=Crear/modificar usuarios y permisos internos / externos
     Permission254=Crear/modificar solo usuarios externos
     Permission256=Eliminar o deshabilitar a otros usuarios
    -Permission262=Ampliar el acceso a todos los terceros (no solo a terceros que el usuario sea un representante de ventas). No es efectivo para usuarios externos (siempre se limitan a ellos mismos para propuestas, pedidos, facturas, contratos, etc.). No es efectivo para proyectos (solo reglas sobre permisos de proyecto, visibilidad y asuntos de asignación).
     Permission271=Lee CA
     Permission272=Leer facturas
     Permission273=Emitir facturas
     Permission281=Leer contactos
     Permission291=Tarifas de lectura
     Permission292=Establecer permisos sobre las tarifas
    -Permission293=Modificar las tarifas de los clientes
     Permission300=Leer códigos de barras
     Permission302=Eliminar códigos de barras
     Permission311=Leer Servicios
    @@ -581,10 +480,6 @@ Permission401=Leer descuentos
     Permission402=Crear/modificar descuentos
     Permission403=Validar descuentos
     Permission404=Eliminar descuentos
    -Permission501=Leer contratos/salarios de empleados
    -Permission502=Crear/modificar contratos/salarios de empleados
    -Permission511=Leer el pago de los salarios
    -Permission512=Crear/modificar el pago de los salarios
     Permission517=Salarios de exportación
     Permission520=Leer préstamos
     Permission522=Crear/modificar préstamos
    @@ -625,8 +520,6 @@ Permission1251=Ejecutar las importaciones masivas de datos externos en la base d
     Permission1321=Exportar facturas, atributos y pagos de clientes
     Permission1322=Reabrir una factura paga
     Permission1421=Exportar pedidos y atributos de los clientes
    -Permission20001=Lea las solicitudes de ausencia (sus hojas y la de sus subordinados)
    -Permission20002=Crea / modifica tus solicitudes de ausencia (las tuyas se van y la de tus subordinados)
     Permission20003=Eliminar solicitudes de permiso
     Permission20004=Lea todas las solicitudes de licencia (incluso del usuario no subordinado)
     Permission20005=Crear / modificar solicitudes de abandono para todos (incluso para usuarios no subordinados)
    @@ -648,12 +541,11 @@ Permission50202=Transacciones de importación
     Permission54001=Impresión
     Permission59003=Lea cada margen de usuario
     Permission63004=Enlace de recursos a eventos de la agenda
    -DictionaryCompanyJuridicalType=Formas legales de terceros
     DictionaryProspectLevel=Nivel de potencial prospectivo
     DictionaryCanton=Estado / Provincia
     DictionaryVAT=Tipos de IVA o tasas de impuestos a las ventas
    +DictionaryRevenueStamp=Cantidad de estampillas fiscales
     DictionaryPaymentConditions=Términos de pago
    -DictionaryTypeContact=Tipo de contacto / dirección
     DictionaryTypeOfContainer=Tipo de páginas web / contenedores
     DictionaryEcotaxe=Ecotax (RAEE)
     DictionaryFormatCards=Formatos de tarjetas
    @@ -665,38 +557,23 @@ DictionarySource=Origen de las propuestas / órdenes
     DictionaryAccountancyCategory=Grupos personalizados para informes
     DictionaryAccountancysystem=Modelos para el cuadro de cuentas
     DictionaryAccountancyJournal=Libros contables
    -DictionaryEMailTemplates=Plantillas de correos electrónicos
     DictionaryProspectStatus=Estado de prospección
    -DictionaryHolidayTypes=Tipos de Vacaciones
    -DictionaryOpportunityStatus=Estado de oportunidad para el proyecto / plomo
    -VATManagement=Gestión del IVA
    -VATIsUsedDesc=Por defecto cuando se crean prospectos, facturas, pedidos, etc., la tasa del IVA sigue la regla del estándar activo: <br> Si el vendedor no está sujeto al IVA, entonces el IVA predeterminado es 0. Fin de la regla. <br> Si el (país de venta = país de compra), entonces el IVA por defecto es igual al IVA del producto en el país de venta. Fin de la regla <br> Si el vendedor y el comprador pertenecen a la Comunidad Europea y los productos son de transporte (automóvil, barco, avión), el IVA por defecto es 0 (el comprador debe pagar el IVA a la oficina de su país y no a la vendedor). Fin de la regla. <br> Si el vendedor y el comprador están en la Comunidad Europea y el comprador no es una empresa, entonces el IVA se convierte por defecto en el IVA del producto vendido. Fin de la regla. <br> Si el vendedor y el comprador están en la Comunidad Europea y el comprador es una empresa, entonces el IVA es 0 por defecto. Fin de la regla. <br> En cualquier otro caso, el valor predeterminado propuesto es el IVA = 0. Fin de la regla
    -VATIsNotUsedDesc=Por defecto, el IVA propuesto es 0, que puede utilizarse para casos como asociaciones, particulares o pequeñas empresas.
    -VATIsUsedExampleFR=En Francia, significa empresas u organizaciones que tienen un sistema fiscal real (real simplificado real o real). Un sistema en el que se declara el IVA.
    -VATIsNotUsedExampleFR=En Francia, significa las asociaciones que no están declaradas con IVA o las empresas, organizaciones o profesiones liberales que han elegido el sistema fiscal de microempresas (IVA en franquicia) y pagaron una franquicia con IVA sin ninguna declaración de IVA. Esta elección mostrará la referencia "IVA no aplicable - art-293B de CGI" en las facturas.
    +TypeOfRevenueStamp=Tipo de sello fiscal
     LocalTax1IsNotUsed=No use el segundo impuesto
    -LocalTax1IsUsedDesc=Use un segundo tipo de impuesto (que no sea el IVA)
    -LocalTax1IsNotUsedDesc=No use otro tipo de impuesto (que no sea el IVA)
     LocalTax1Management=Segundo tipo de impuesto
     LocalTax2IsNotUsed=No use el tercer impuesto
    -LocalTax2IsUsedDesc=Use un tercer tipo de impuesto (que no sea el IVA)
    -LocalTax2IsNotUsedDesc=No use otro tipo de impuesto (que no sea el IVA)
     LocalTax2Management=Tercer tipo de impuesto
    -LocalTax1IsUsedDescES=La tasa de RE por defecto cuando se crean prospectos, facturas, pedidos, etc. sigue la regla estándar activa: <br> Si el comprador no está sujeto a RE, RE por defecto = 0. Fin de la regla. <br> Si el comprador está sujeto a RE, entonces el RE está predeterminado. Fin de la regla. <br>
     LocalTax1IsNotUsedDescES=Por defecto, la RE propuesta es 0. Fin de la regla.
     LocalTax1IsUsedExampleES=En España son profesionales sujetos a algunas secciones específicas del IAE español.
     LocalTax1IsNotUsedExampleES=En España son profesionales y sociedades y están sujetas a ciertas secciones del IAE español.
    -LocalTax2IsUsedDescES=La tasa de RE por defecto cuando se crean prospectos, facturas, pedidos, etc. sigue la regla estándar activa: <br> Si el vendedor no está sujeto a IRPF, entonces el IRPF por defecto es igual a 0. Fin de la regla. <br> Si el vendedor está sujeto a IRPF, entonces el IRPF por defecto. Fin de la regla. <br>
     LocalTax2IsNotUsedDescES=Por defecto, el IRPF propuesto es 0. Fin de la regla.
     LocalTax2IsUsedExampleES=En España, autónomos y profesionales independientes que prestan servicios y empresas que han elegido el sistema impositivo de los módulos.
    -LocalTax2IsNotUsedExampleES=En España son negocios no sujetos a un sistema impositivo de módulos.
     CalcLocaltax=Informes sobre impuestos locales
     CalcLocaltax1Desc=Los informes de impuestos locales se calculan con la diferencia entre las ventas locales y las compras locales.
     CalcLocaltax2Desc=Los informes de impuestos locales son el total de compras de impuestos locales
     CalcLocaltax3Desc=Los informes de impuestos locales son el total de las ventas de impuestos locales
     LabelUsedByDefault=Etiqueta usada por defecto si no se puede encontrar traducción para el código
     LabelOnDocuments=Etiqueta en documentos
    -NbOfDays=N° de días
     AtEndOfMonth=Al final del mes
     CurrentNext=Actual / Siguiente
     Offset=Compensar
    @@ -711,7 +588,6 @@ DatabasePort=Puerto de base
     DatabaseUser=Usuario de la base
     DatabasePassword=Contraseña de la base
     Tables=Mesas
    -NbOfRecord=N° de registros
     DriverType=Tipo de controlador
     SummarySystem=Resumen de información del sistema
     SummaryConst=Lista de todos los parámetros de configuración de Dolibarr
    @@ -722,15 +598,12 @@ Skin=Tema de la piel
     DefaultSkin=Tema predeterminado de la piel
     MaxSizeList=Longitud máxima para la lista
     DefaultMaxSizeList=Longitud máxima predeterminada para las listas
    -DefaultMaxSizeShortList=Longitud máxima predeterminada para listas cortas (es decir, en la tarjeta de cliente)
     MessageLogin=Mensaje de la página de inicio
     LoginPage=Página de inicio de sesión
     PermanentLeftSearchForm=Formulario de búsqueda permanente en el menú de la izquierda
    -DefaultLanguage=Lenguaje predeterminado para usar (código de idioma)
     EnableMultilangInterface=Habilitar interfaz multilingüe
     EnableShowLogo=Mostrar logo en el menú de la izquierda
    -CompanyInfo=Información de la empresa / organización
    -CompanyIds=Identidades de empresa / organización
    +CompanyInfo=Empresa / Organización
     CompanyName=Nombre
     CompanyCurrency=Moneda principal
     DoNotSuggestPaymentMode=No sugiera
    @@ -738,26 +611,6 @@ NoActiveBankAccountDefined=No se definió una cuenta bancaria activa
     OwnerOfBankAccount=Propietario de la cuenta bancaria %s
     BankModuleNotActive=Módulo de cuentas bancarias no habilitado
     ShowBugTrackLink=Mostrar  el link "<strong>%s</strong>"
    -DelaysOfToleranceBeforeWarning=La tolerancia se retrasa antes de la advertencia
    -DelaysOfToleranceDesc=Esta pantalla le permite definir los retrasos tolerados antes de que se notifique una alerta en la pantalla con el picto %s para cada elemento retrasado.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolerancia de retraso (en días) antes de la alerta sobre eventos planeados (eventos de la agenda) aún no completada
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolerancia de retraso (en días) antes de que la alerta en el proyecto no se cierre a tiempo
    -Delays_MAIN_DELAY_TASKS_TODO=Tolerancia de retraso (en días) antes de la alerta en las tareas planificadas (tareas del proyecto) aún no completada
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Tolerancia de retardo (en días) antes de la alerta en pedidos no procesados ​​todavía
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Tolerancia de retraso antes de la alerta (en días) sobre cotizaciones a cerrar
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Tolerancia de retraso antes de la alerta (en días) sobre cotizaciones no facturadas
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Retraso de tolerancia (en días) antes de la alerta en los servicios para activar
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Retraso de tolerancia (en días) antes de la alerta en servicios caducados
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Retraso de tolerancia (en días) antes de la alerta en las facturas pendientes de pago del proveedor
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Retraso de tolerancia (en días) antes de la alerta en las facturas pendientes de pago del cliente
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Retraso de tolerancia (en días) antes de la alerta en conciliación bancaria pendiente
    -Delays_MAIN_DELAY_MEMBERS=Retraso en la tolerancia (en días) antes de la alerta en la cuota de membresía demorada
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Retraso de tolerancia (en días) antes de la alerta para depósitos de cheques para hacer
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Retraso de tolerancia (en días) antes de la alerta para que los informes de gastos aprueben
    -SetupDescription1=El área de configuración es para los parámetros iniciales de configuración antes de comenzar a usar Dolibarr.
    -SetupDescription3=Configuración en el menú <a href="%s"> %s -> %s </a>. Este paso es necesario porque define los datos utilizados en las pantallas de Dolibarr para personalizar el comportamiento predeterminado del software (por ejemplo, para las características relacionadas con el país).
    -SetupDescription4=Configuración en el menú <a href="%s"> %s -> %s </a>. Este paso es necesario porque Dolibarr ERP / CRM es una colección de varios módulos / aplicaciones, todos más o menos independientes. Las nuevas funciones se agregan a los menús para cada módulo que active.
    -SetupDescription5=Otras entradas de menú administran parámetros opcionales.
     LogEvents=Eventos de auditoría de seguridad
     InfoDolibarr=Sobre Dolibarr
     InfoBrowser=Acerca del navegador
    @@ -768,18 +621,15 @@ InfoPerf=Sobre representaciones
     BrowserOS=Sistema operativo del navegador
     ListOfSecurityEvents=Lista de eventos de seguridad de Dolibarr
     LogEventDesc=Puede habilitar aquí el registro de eventos de seguridad de Dolibarr. Los administradores pueden ver su contenido a través del menú <b>Herramientas del sistema - Auditoría</b>. Advertencia, esta característica puede consumir una gran cantidad de datos en la base de datos.
    -AreaForAdminOnly=Los <b> usuarios administradores </ b> solo pueden configurar los parámetros de configuración.
    +AreaForAdminOnly=Los parámetros de configuración solo pueden modificarse por <b>usuarios administradores</b>.
     SystemInfoDesc=La información del sistema es información técnica miscelánea que obtienes en modo solo lectura y visible solo para los administradores.
     SystemAreaForAdminOnly=Esta área está disponible solo para usuarios administradores. Ninguno de los permisos de Dolibarr puede reducir este límite.
    -AccountantDesc=Edite en esta página toda la información conocida sobre su contador / tenedor de libros
     AccountantFileNumber=Número de expediente
     DisplayDesc=Puede elegir cada parámetro relacionado con el aspecto y la sensación de Dolibarr aquí
     AvailableModules=Aplicación / módulos disponibles
     ToActivateModule=Para activar los módulos, vaya al Área de configuración (Inicio-> Configuración-> Módulos).
     SessionTimeOut=Tiempo de espera para la sesión
    -SessionExplanation=Este número garantiza que la sesión nunca caducará antes de este delay , si el limpiador de sesión se realiza mediante el limpiador interno de sesiones PHP (y nada más). El limpiador interno de sesiones PHP no garantiza que la sesión caduque justo después de este retraso. Caducará, después de este retraso, y cuando se ejecute el limpiador de sesión, por lo que cada <b>%s/%s</b>acceso, pero solo durante el acceso realizado por otras sesiones.<br>Nota: en algunos servidores con un mecanismo de limpieza de sesión externo (cron en debian , ubuntu ...), las sesiones se pueden destruir después de un período definido por el valor predeterminado <strong>session.gc_maxlifetime</strong>, sin importar el valor ingresado aquí.
     TriggersAvailable=Disparadores disponibles
    -TriggersDesc=Los desencadenantes son archivos que modificarán el comportamiento del flujo de trabajo de Dolibarr una vez copiados en el directorio <b> htdocs / core / triggers </ b>. Se dieron cuenta de nuevas acciones, activadas en eventos Dolibarr (creación de nueva empresa, validación de factura, ...).
     TriggerDisabledByName=Los desencadenantes en este archivo están deshabilitados por el sufijo <b> -NORUN </ b> en su nombre.
     TriggerDisabledAsModuleDisabled=Los disparadores en este archivo están deshabilitados ya que el módulo <b>%s</b> está deshabilitado.
     TriggerAlwaysActive=Los activadores en este archivo están siempre activos, cualesquiera que sean los módulos Dolibarr activados.
    @@ -789,7 +639,6 @@ DictionaryDesc=Inserta todos los datos de referencia. Puede agregar sus valores
     ConstDesc=Esta página le permite editar todos los demás parámetros no disponibles en páginas anteriores. Estos son principalmente parámetros reservados para desarrolladores o resolución avanzada de problemas. Para obtener una lista de opciones <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">revise aquí</a>.
     MiscellaneousDesc=Todos los demás parámetros relacionados con la seguridad se definen aquí.
     LimitsSetup=Límites / configuración de precisión
    -LimitsDesc=Puede definir los límites, las precisiones y las optimizaciones utilizadas por Dolibarr aquí
     MAIN_MAX_DECIMALS_UNIT=Máximos decimales para precios unitarios
     MAIN_MAX_DECIMALS_TOT=Máximos decimales para los precios totales
     MAIN_MAX_DECIMALS_SHOWN=Máximos de decimales para los precios mostrados en la pantalla (Agregue <b> ... </ b> después de este número si desea ver <b> ... </ b> cuando el número se trunca cuando se muestra en la pantalla)
    @@ -798,16 +647,12 @@ UnitPriceOfProduct=Precio unitario neto de un producto
     TotalPriceAfterRounding=Precio total (impuesto neto / IVA / IVA) después del redondeo
     ParameterActiveForNextInputOnly=Parámetro efectivo solo para la siguiente entrada
     NoEventOrNoAuditSetup=Aún no se ha registrado ningún evento de seguridad. Esto puede ser normal si la auditoría no se ha habilitado en la página "configuración - seguridad - auditoría".
    -NoEventFoundWithCriteria=No se ha encontrado ningún evento de seguridad para tales criterios de búsqueda.
     SeeLocalSendMailSetup=Consulte su configuración de sendmail local
     BackupDesc=Para hacer una copia de seguridad completa de Dolibarr, debes:
     BackupDesc2=Guarde el contenido del directorio de documentos (<b>%s</b>) que contiene todos los archivos cargados y generados (por lo que incluye todos los archivos de volcado generados en el paso 1).
    -BackupDesc3=Guarde el contenido de su base de datos (<b>%s</b>) en un archivo de volcado. Para esto, puede usar el siguiente asistente.
     BackupDescX=El directorio archivado debe almacenarse en un lugar seguro.
     BackupDescY=El archivo de volcado generado debe almacenarse en un lugar seguro.
    -BackupPHPWarning=La copia de seguridad no se puede garantizar con este método. Prefiero el anterior
     RestoreDesc=Para restaurar una copia de seguridad de Dolibarr, debe:
    -RestoreDesc2=Restaure el archivo de almacenamiento (archivo zip, por ejemplo) del directorio de documentos para extraer el árbol de archivos en el directorio de documentos de una nueva instalación de Dolibarr o en el directorio de documentos actuales (<b>%s</b>).
     RestoreDesc3=Restaure los datos, desde un archivo de volcado de respaldo, en la base de datos de la nueva instalación de Dolibarr o en la base de datos de esta instalación actual (<b>%s</b>). Advertencia, una vez que finaliza la restauración, debe usar un inicio de sesión / contraseña, que existía cuando se realizó la copia de seguridad, para conectarse de nuevo. Para restaurar una base de datos de respaldo en esta instalación actual, puede seguir a este asistente.
     RestoreMySQL=Importación de MySQL
     ForcedToByAModule=Esta regla es forzada a <b>%s</b> por un módulo activado
    @@ -817,25 +662,19 @@ RunningUpdateProcessMayBeRequired=Parece que es necesario ejecutar el proceso de
     YouMustRunCommandFromCommandLineAfterLoginToUser=Debe ejecutar este comando desde la línea de comando después de iniciar sesión en un shell con el usuario <b>%s</b> o debe agregar la opción -W al final de la línea de comandos para proporcionar una contraseña de <b>%s</b>.
     DownloadMoreSkins=Más pieles para descargar
     SimpleNumRefModelDesc=Devuelve el número de referencia con el formato %syymm-nnnn donde yy es año, mm es mes y nnnn es una secuencia sin saltos ni reinicio
    -ShowProfIdInAddress=Mostrar id. Profesional con direcciones en documentos
    -ShowVATIntaInAddress=Ocultar IVA Intra num con direcciones en documentos
    -MAIN_DISABLE_METEO=Desactivar vista meteo
     MeteoStdMod=Modo estandar
     MeteoUseMod=Haz clic para usar %s
     TestLoginToAPI=Prueba de inicio de sesión a la API
    -ProxyDesc=Algunas características de Dolibarr necesitan tener acceso a Internet para funcionar. Define aquí los parámetros para esto. Si el servidor de Dolibarr está detrás de un servidor Proxy, esos parámetros le dicen a Dolibarr cómo acceder a Internet a través de él.
     MAIN_PROXY_USE=Use un servidor proxy (de lo contrario, acceso directo a internet)
     MAIN_PROXY_HOST=Nombre / dirección del servidor proxy
     MAIN_PROXY_USER=Inicie sesión para usar el servidor proxy
     MAIN_PROXY_PASS=Contraseña para usar el servidor proxy
    -DefineHereComplementaryAttributes=Defina aquí todos los atributos, que aún no están disponibles de manera predeterminada, y que desea que sean compatibles con %s.
     ExtraFields=Atributos complementarios
     ExtraFieldsLines=Atributos complementarios (líneas)
     ExtraFieldsLinesRec=Atributos complementarios (líneas plantillas de facturas)
     ExtraFieldsSupplierOrdersLines=Atributos complementarios (líneas de pedido)
     ExtraFieldsSupplierInvoicesLines=Atributos complementarios (líneas de factura)
     ExtraFieldsThirdParties=Atributos complementarios (terceros)
    -ExtraFieldsContacts=Atributos complementarios (contacto/dirección)
     ExtraFieldsMember=Atributos complementarios (miembro)
     ExtraFieldsMemberType=Atributos complementarios (tipo de miembro)
     ExtraFieldsCustomerInvoices=Atributos complementarios (facturas)
    @@ -848,13 +687,11 @@ ExtraFieldHasWrongValue=El atributo %s tiene un valor incorrecto.
     AlphaNumOnlyLowerCharsAndNoSpace=solo caracteres alfanuméricos y minúsculas sin espacio
     SendmailOptionNotComplete=Advertencia, en algunos sistemas Linux, para enviar correos electrónicos desde su correo electrónico, la configuración de ejecución de sendmail debe contener la opción -ba (parámetro mail.force_extra_parameters en su archivo php.ini). Si algunos destinatarios nunca reciben correos electrónicos, intente editar este parámetro de PHP con mail.force_extra_parameters = -ba).
     PathToDocuments=Camino a los documentos
    -SendmailOptionMayHurtBuggedMTA=Característica para enviar correos electrónicos utilizando el método "PHP mail direct" generará un mensaje de correo que algunos servidores de correo de recepción podrían no analizar correctamente. El resultado es que algunos correos electrónicos no pueden ser leídos por las personas alojadas en esas plataformas con errores. Es el caso de algunos proveedores de Internet (por ejemplo, Orange en Francia). Esto no es un problema para Dolibarr ni para PHP, sino para recibir el servidor de correo. Sin embargo, puede agregar la opción MAIN_FIX_FOR_BUGGED_MTA a 1 en configuración - otra para modificar Dolibarr para evitar esto. Sin embargo, puede experimentar problemas con otros servidores que respetan estrictamente el estándar SMTP. La otra solución (recomendada) es utilizar el método "Biblioteca de socket SMTP" que no tiene inconvenientes.
     TranslationSetup=Configuración de la traducción
     TranslationKeySearch=Buscar una clave o cadena de traducción
     TranslationOverwriteKey=Sobrescribir una cadena de traducción
     TranslationDesc=Cómo configurar el idioma de la aplicación que se muestra: <br> * Systemwide: menú <strong> Inicio - Configuración - Pantalla </ strong> <br> * Por usuario: use la pestaña <strong> Configuración de visualización del usuario </ strong> en la tarjeta de usuario ( haga clic en el nombre de usuario en la parte superior de la pantalla).
     TranslationOverwriteDesc=También puede anular cadenas que llenan la siguiente tabla. Elija su idioma del menú desplegable "%s", inserte la cadena de clave de traducción en "%s" y su nueva traducción en "%s"
    -TranslationOverwriteDesc2=Puede usar la otra pestaña para ayudarlo a saber qué clave de traducción usar
     TranslationString=Cadena de traducción
     CurrentTranslationString=Cadena de traducción actual
     WarningAtLeastKeyOrTranslationRequired=Se requiere un criterio de búsqueda al menos para la cadena clave o de traducción
    @@ -862,23 +699,12 @@ NewTranslationStringToShow=Nueva cadena de traducción para mostrar
     OriginalValueWas=La traducción original se sobrescribe. El valor original fue: <br> <br> %s
     TotalNumberOfActivatedModules=Aplicaciones/módulos activos: <b>%s</b>/<b>%s</b>
     YouMustEnableOneModule=Debe al menos habilitar 1 módulo
    -ClassNotFoundIntoPathWarning=Clase %s no encontrada en la ruta de PHP
    -OnlyFollowingModulesAreOpenedToExternalUsers=Tenga en cuenta que solo los siguientes módulos están abiertos a usuarios externos (cualquiera que sea el permiso de dichos usuarios) y solo si se otorgaron permisos:
     SuhosinSessionEncrypt=Almacenamiento de sesión cifrado por Suhosin
     ConditionIsCurrently=La condición es actualmente %s
    -YouUseBestDriver=Utiliza el controlador %s que es el mejor controlador disponible actualmente.
    -YouDoNotUseBestDriver=Utiliza la unidad %s pero se recomienda el controlador %s.
    -NbOfProductIsLowerThanNoPb=Solo tiene %s productos / servicios en la base de datos. Esto no requiere ninguna optimización particular.
     SearchOptim=Optimización de búsqueda
    -YouHaveXProductUseSearchOptim=Tienes %s producto en la base de datos. Debe agregar la constante PRODUCT_DONOTSEARCH_ANYWHERE a 1 en Home-Setup-Other, limita la búsqueda al comienzo de las cadenas, haciendo posible que la base de datos use el índice y debería obtener una respuesta inmediata.
    -BrowserIsOK=Está utilizando el navegador web %s. Este navegador está bien para la seguridad y el rendimiento.
    -BrowserIsKO=Está utilizando el navegador web %s. Se sabe que este navegador es una mala opción para la seguridad, el rendimiento y la fiabilidad. Le recomendamos utilizar Firefox, Chrome, Opera o Safari.
     XCacheInstalled=XCache está cargado.
    -AddRefInList=Muestre la referencia del cliente / proveedor en la lista (seleccione la lista o el cuadro combinado) y la mayor parte del hipervínculo. Los terceros aparecerán con el nombre "CC12345 - SC45678 - La gran empresa coorp", en lugar de "La gran compañía coorp".
    -AskForPreferredShippingMethod=Pregunte por el método de envío preferido para terceros.
     FillThisOnlyIfRequired=Ejemplo: +2 (llenar solo si se experimentan problemas de compensación de zona horaria)
     PasswordGenerationStandard=Devuelve una contraseña generada de acuerdo con el algoritmo interno de Dolibarr: 8 caracteres que contienen números compartidos y caracteres en minúscula.
    -PasswordGenerationNone=No sugiera ninguna contraseña generada. La contraseña debe escribirse manualmente.
     PasswordGenerationPerso=Devuelve una contraseña de acuerdo a tu configuración definida personalmente.
     SetupPerso=De acuerdo con tu configuración
     PasswordPatternDesc=Descripción del patrón de contraseña
    @@ -888,16 +714,10 @@ UsersSetup=Configuración del módulo de usuarios
     UserMailRequired=Se requiere correo electrónico para crear un nuevo usuario
     HRMSetup=Configuración del módulo RRHH
     CompanySetup=Configuración del módulo de empresas
    -CompanyCodeChecker=Módulo para la generación y verificación de código de terceros (cliente o proveedor)
    -AccountCodeManager=Módulo para la generación de códigos de contabilidad (cliente o proveedor)
     NotificationsDesc=La función de notificaciones de Correo Electrónico le permite enviar correos automáticos en silencio para algunos eventos de Dolibarr. Los objetivos de las notificaciones se pueden definir:
     NotificationsDescGlobal=* o estableciendo correos electrónicos de objetivos globales en la página de configuración del módulo.
    -ModelModules=Plantillas de documentos
    -DocumentModelOdt=Genere documentos a partir de plantillas de OpenDocuments (archivos .ODT o .ODS para OpenOffice, KOffice, TextEdit, ...)
     WatermarkOnDraft=Marca de agua en el borrador del documento
     JSOnPaimentBill=Activar la función para completar automáticamente las líneas de pago en forma de pago
    -CompanyIdProfChecker=Reglas sobre Ids profesionales
    -MustBeMandatory=Obligatorio para crear terceros?
     MustBeInvoiceMandatory=Obligatorio para validar facturas?
     TechnicalServicesProvided=Servicios técnicos proporcionados
     WebDavServer=URL raíz del servidor %s: %s
    @@ -991,11 +811,8 @@ LDAPTestSynchroMemberType=Pruebe la sincronización del tipo de miembro
     LDAPTestSearch=Pruebe una búsqueda LDAP
     LDAPSynchroOK=Prueba de sincronización exitosa
     LDAPSynchroKO=Prueba de sincronización fallida
    -LDAPSynchroKOMayBePermissions=Prueba de sincronización fallida. Verifique que la conexión al servidor esté configurada correctamente y permita que udpates LDAP
     LDAPTCPConnectOK=Conexión TCP al servidor LDAP exitosa (Servidor = %s, Puerto = %s)
     LDAPTCPConnectKO=No se pudo conectar TCP al servidor LDAP (Servidor = %s, Puerto = %s)
    -LDAPBindOK=Connect / Authentificate al servidor LDAP exitoso (Servidor = %s, Puerto = %s, Admin = %s, Contraseña = %s)
    -LDAPBindKO=Error de conexión / autentificación al servidor LDAP (Servidor = %s, Puerto = %s, Admin = %s, Contraseña = %s)
     LDAPSetupForVersion3=Servidor LDAP configurado para la versión 3
     LDAPSetupForVersion2=Servidor LDAP configurado para la versión 2
     LDAPDolibarrMapping=Mapas de Dolibarr
    @@ -1005,7 +822,6 @@ LDAPFieldLoginExample=Ejemplo: uid
     LDAPFilterConnectionExample=Ejemplo: & (objectClass = inetOrgPerson)
     LDAPFieldLoginSambaExample=Ejemplo: samaccountname
     LDAPFieldFullnameExample=Ejemplo: cn
    -LDAPFieldPasswordNotCrypted=La contraseña no está encriptada
     LDAPFieldPasswordExample=Ejemplo: userPassword
     LDAPFieldCommonNameExample=Ejemplo: cn
     LDAPFieldNameExample=Ejemplo: sn
    @@ -1040,37 +856,27 @@ LDAPDescMembers=Esta página le permite definir el nombre de los atributos LDAP
     LDAPDescValues=Los valores de ejemplo están diseñados para <b> OpenLDAP </ b> con los siguientes esquemas cargados: <b> core.schema, cosine.schema, inetorgperson.schema </ b>). Si usa estos valores y OpenLDAP, modifique su archivo de configuración de LDAP <b> slapd.conf </ b> para que se carguen todos estos esquemas.
     ForANonAnonymousAccess=Para un acceso autenticado (para un acceso de escritura, por ejemplo)
     PerfDolibarr=Configuración de rendimiento / informe de optimización
    -YouMayFindPerfAdviceHere=Encontrará en esta página algunos controles o consejos relacionados con el rendimiento.
    -NotInstalled=No está instalado, por lo que su servidor no se ralentiza con esto.
     ApplicativeCache=Caché aplicable
     MemcachedNotAvailable=No se encontró caché aplicativo. Puede mejorar el rendimiento instalando un servidor de caché Memcached y un módulo capaz de usar este servidor de caché. Más información aquí <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN"> http: //wiki.dolibarr.org/index.php/Module_MemCached_EN </a>. <br> Tenga en cuenta que muchos proveedores de alojamiento web no proporcionan dicho servidor de caché.
     MemcachedModuleAvailableButNotSetup=El módulo memcached para la memoria caché aplicativa se encuentra pero la configuración del módulo no está completa.
     MemcachedAvailableAndSetup=El módulo memcached dedicado a usar el servidor memcached está habilitado.
     OPCodeCache=Caché OPCode
    -NoOPCodeCacheFound=No se encontró caché OPCode. Puede ser que use otro caché OPCode que XCache o eAccelerator (bueno), puede ser que no tenga caché OPCode (muy malo).
     HTTPCacheStaticResources=Caché HTTP para recursos estáticos (css, img, javascript)
     FilesOfTypeCached=Los archivos del tipo %s están en caché en el servidor HTTP
     FilesOfTypeNotCached=El servidor HTTP no almacena en caché los archivos del tipo %s
     FilesOfTypeCompressed=Los archivos del tipo %s están comprimidos por el servidor HTTP
     FilesOfTypeNotCompressed=Los archivos del tipo %s no son comprimidos por el servidor HTTP
     CacheByServer=Caché por servidor
    -CacheByServerDesc=Por ejemplo, usando la directiva Apache "ExpiresByType image / gif A2592000"
     CacheByClient=Caché por navegador
     CompressionOfResources=Compresión de respuestas HTTP
    -CompressionOfResourcesDesc=Por ejemplo, usando la directiva Apache "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Tal detección automática no es posible con los navegadores actuales
    -DefaultValuesDesc=Puede definir / forzar aquí el valor predeterminado que desea obtener cuando cree un nuevo registro, y / o altere los filtros u ordene el orden cuando el registro de su lista.
     DefaultSearchFilters=Filtros de búsqueda predeterminados
     DefaultSortOrder=Ordenar por defecto
     ProductSetup=Configuración del módulo de productos
     ServiceSetup=Configuración del módulo de servicios
     ProductServiceSetup=Configuración de módulos de productos y servicios
     NumberOfProductShowInSelect=Número máximo de productos en listas de selección de combos (0 = sin límite)
    -ViewProductDescInFormAbility=Visualización de descripciones de productos en los formularios (de lo contrario, como información emergente emergente)
     MergePropalProductCard=Activar en el producto / servicio pestaña Archivos adjuntos una opción para combinar el documento PDF del producto con la propuesta PDF azur si el producto / servicio figura en la propuesta
    -ViewProductDescInThirdpartyLanguageAbility=Visualización de descripciones de productos en el idioma de terceros
    -UseSearchToSelectProductTooltip=Además, si tiene una gran cantidad de productos (> 100 000), puede aumentar la velocidad estableciendo PRODUCT_DONOTSEARCH_ANYWHERE constante en 1 en Configuración-> Otro. La búsqueda se limitará al inicio de la cadena.
    -UseSearchToSelectProduct=Espere a que presione una tecla antes de cargar el contenido de la lista combinada de productos (Esto puede aumentar el rendimiento si tiene una gran cantidad de productos, pero es menos conveniente)
     SetDefaultBarcodeTypeProducts=Tipo de código de barras predeterminado para usar en productos
     SetDefaultBarcodeTypeThirdParties=Tipo de código de barras predeterminado para usar con terceros
     UseUnits=Defina una unidad de medida para Cantidad durante la orden, propuesta o edición de líneas de factura
    @@ -1117,7 +923,6 @@ NotificationEMailFrom=Remitente correo electrónico (desde) para correos electr
     SendingsSetup=Configuración del módulo de envío
     SendingsReceiptModel=Modelo de recibo de envío
     SendingsNumberingModules=Módulos de numeración de los mensajes
    -NoNeedForDeliveryReceipts=En la mayoría de los casos, las hojas de envío se utilizan como hojas para entregas a clientes (lista de productos a enviar) y hojas que el cliente recibe y firma. Por lo tanto, los recibos de entregas de productos son una característica duplicada y rara vez se activan.
     DeliveryOrderNumberingModules=Módulo de numeración de recibos de entregas de productos
     DeliveryOrderModel=Modelo de recepción de entregas de productos
     DeliveriesOrderAbility=Productos de soporte recibos de entregas
    @@ -1125,16 +930,11 @@ FreeLegalTextOnDeliveryReceipts=Texto libre en recibos de entrega
     ActivateFCKeditor=Activa el editor avanzado para:
     FCKeditorForCompany=Creación / edición WYSIWIG de descripción y nota de elementos (excepto productos / servicios)
     FCKeditorForProduct=WYSIWIG creación / edición de productos / servicios descripción y nota
    -FCKeditorForProductDetails=Creación/edición WYSIWIG de las líneas de detalle de los productos (en pedidos, cotizaciones, facturas, etc.)
     FCKeditorForMailing=Creación / edición WYSIWIG para eMailings masivos (Herramientas-> eMailing)
     FCKeditorForUserSignature=Creación / edición WYSIWIG de la firma del usuario
     FCKeditorForMail=Creación / edición WYSIWIG para todo el correo (excepto Herramientas-> correo electrónico)
    -OSCommerceErrorConnectOkButWrongDatabase=La conexión se realizó correctamente pero la base de datos no parece ser una base de datos de OSCommerce (la clave %s no se encuentra en la tabla %s).
    -OSCommerceTestOk=Conexión al servidor '%s' en la base de datos '%s' con el usuario '%s' exitoso.
    -OSCommerceTestKo1=La conexión al servidor '%s' tuvo éxito pero no se pudo alcanzar la base de datos '%s'.
     OSCommerceTestKo2=La conexión al servidor '%s' con el usuario '%s' falló.
     StockSetup=Configuración del módulo de stock
    -IfYouUsePointOfSaleCheckModule=Si usa un módulo de punto de venta (el módulo POS se proporciona por defecto u otro módulo externo), su configuración puede ser ignorada por su módulo de punto de venta. La mayoría de los módulos de puntos de venta están diseñados para crear inmediatamente una factura y disminuir el stock por defecto, sean cuales sean las opciones aquí. Por lo tanto, si necesita o no tiene una disminución de stock al registrar una venta desde su Punto de venta, verifique también la configuración de su módulo POS.
     MenuDeleted=Menú borrado
     NotTopTreeMenuPersonalized=Menús personalizados no vinculados a una entrada del menú superior
     Menu=Selección de menú
    @@ -1152,7 +952,6 @@ DetailRight=Condición para mostrar menús grises no autorizados
     DetailLangs=Nombre de archivo Lang para la traducción del código de etiqueta
     DetailUser=Pasante / Externo / Todos
     Target=Objetivo
    -DetailTarget=Objetivo para enlaces (_blank top abrir una nueva ventana)
     DetailLevel=Nivel (-1: menú superior, 0: menú del encabezado,> 0 menú y submenú)
     ModifMenu=Cambio de menú
     ConfirmDeleteMenu=¿Seguro que quieres eliminar la entrada del menú <b>%s</b>?
    @@ -1163,7 +962,6 @@ OptionVATDebitOption=Devengo
     OptionVatDefaultDesc=El IVA es pagadero: <br> - a la entrega de los bienes (utilizamos la fecha de la factura) <br> - en los pagos por los servicios
     OptionVatDebitOptionDesc=El IVA es pagadero: <br> - a la entrega de los bienes (utilizamos la fecha de la factura) <br> - en la factura (débito) de los servicios
     OptionPaymentForProductAndServicesDesc=El IVA es pagadero: <br> - en el pago de bienes<br> - en los pagos por servicios
    -SummaryOfVatExigibilityUsedByDefault=Tiempo de exigibilidad del IVA por defecto según la opción elegida:
     OnPayment=En pago
     SupposedToBePaymentDate=Fecha de pago utilizada
     SupposedToBeInvoiceDate=Fecha de la factura utilizada
    @@ -1177,32 +975,20 @@ AccountancyCodeBuy=Cuenta de compra código
     AgendaSetup=Configuración del módulo de eventos y agenda
     PasswordTogetVCalExport=Clave para autorizar el enlace de exportación
     PastDelayVCalExport=No exportar evento más antiguo que
    -AGENDA_USE_EVENT_TYPE=Usar tipos de eventos (gestionados en el menú Configuración -> Diccionarios -> Tipo de eventos de la agenda)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Establezca automáticamente este valor predeterminado para el tipo de evento en forma de evento creado
    -AGENDA_DEFAULT_FILTER_TYPE=Establecer automáticamente este tipo de evento en el filtro de búsqueda de la vista de agenda
    -AGENDA_DEFAULT_FILTER_STATUS=Establecer automáticamente este estado para los eventos en el filtro de búsqueda de la vista de agenda
     AGENDA_DEFAULT_VIEW=¿Qué pestaña desea abrir de forma predeterminada al seleccionar el menú Agenda?
     AGENDA_REMINDER_EMAIL=Habilite el recordatorio de eventos <b>por correo electrónico</b>  (la opción recordar/demorar se puede definir en cada evento). Nota: El módulo <strong>%s</strong> debe estar habilitado y configurado correctamente para que el recordatorio se envíe con la frecuencia correcta.
    -AGENDA_REMINDER_BROWSER=Habilite el recordatorio de eventos <b> en el navegador de los usuarios </ b> (cuando se llega a la fecha del evento, cada usuario puede rechazarlo de la pregunta de confirmación del navegador)
     AGENDA_REMINDER_BROWSER_SOUND=Habilitar notificación de sonido
     AGENDA_SHOW_LINKED_OBJECT=Mostrar objeto vinculado en la vista de agenda
     ClickToDialUrlDesc=Se llama a Url cuando se hace clic en el picto de un teléfono. En la URL, puede usar etiquetas <br> <b> __ PHONETO __ </ b> que se reemplazarán por el número de teléfono de la persona a quien llamar <br> <b> __ PHONEFROM __ </ b> que se reemplazará por el número de teléfono de la llamada persona (suya) <br> <b> __ LOGIN __ </ b> que se reemplazará con clicktodial de inicio de sesión (definido en la tarjeta de usuario) <br> <b> __ PASS __ </ b> que se reemplazará con clicktodial contraseña (definida en usuario tarjeta).
    -ClickToDialDesc=Este módulo permite hacer clic en los números de teléfono. Un clic en este ícono lo llamará para que su teléfono llame al número de teléfono. Esto se puede utilizar para llamar a un sistema de centro de llamadas de Dolibarr que puede llamar al número de teléfono en un sistema SIP, por ejemplo.
     ClickToDialUseTelLink=Use solo un enlace "tel:" en los números de teléfono
    -ClickToDialUseTelLinkDesc=Utilice este método si sus usuarios tienen un softphone o una interfaz de software instalados en la misma computadora que el navegador, y haga clic cuando hace clic en un enlace en su navegador que comienza con "tel:". Si necesita una solución de servidor completa (no necesita instalación de software local), debe configurar esto en "No" y completar el siguiente campo.
     CashDesk=Puntos de venta
     CashDeskSetup=Configuración del módulo de punto de venta
    -CashDeskThirdPartyForSell=Tercera parte genérica predeterminada para usar para vender
     CashDeskBankAccountForSell=Cuenta predeterminada para usar para recibir pagos en efectivo
     CashDeskBankAccountForCheque=Cuenta predeterminada para usar para recibir pagos con cheque
     CashDeskBankAccountForCB=Cuenta predeterminada para usar para recibir pagos con tarjeta de crédito
    -CashDeskDoNotDecreaseStock=Inhabilite la disminución de stock cuando se realiza una venta desde el punto de venta (si se realiza "no", se realiza una disminución de stock por cada venta realizada desde el punto de venta, cualquiera que sea la opción configurada en el stock del módulo).
     CashDeskIdWareHouse=Fuerce y restrinja el almacén para utilizarlo en la disminución de existencias
    -StockDecreaseForPointOfSaleDisabled=Disminución de stock desde el punto de venta deshabilitado
     StockDecreaseForPointOfSaleDisabledbyBatch=La disminución de stock en POS no es compatible con la administración de lotes
    -CashDeskYouDidNotDisableStockDecease=No inhabilitó la disminución de stock al realizar una venta desde el punto de venta. Entonces se requiere un almacén.
     BookmarkSetup=Configuración del módulo marcador
    -BookmarkDesc=Este módulo te permite administrar marcadores. También puede agregar accesos directos a cualquier página de Dolibarr o sitios web externos en el menú de la izquierda.
     NbOfBoomarkToShow=Número máximo de marcadores para mostrar en el menú de la izquierda
     WebServicesSetup=Configuración del módulo de servicios web
     WebServicesDesc=Al habilitar este módulo, Dolibarr se convierte en un servidor de servicios web para proporcionar servicios web diversos.
    @@ -1220,7 +1006,6 @@ BankOrderESDesc=Orden de exhibición en español
     ChequeReceiptsNumberingModule=Compruebe el módulo de numeración de recibos
     MultiCompanySetup=Configuración de módulo multi-compañía
     SuppliersSetup=Configuración del módulo de proveedor
    -SuppliersCommandModel=Plantilla completa de orden de compra (logo ...)
     SuppliersInvoiceModel=Plantilla completa de la factura del proveedor (logotipo ...)
     SuppliersInvoiceNumberingModel=Modelos de numeración de facturas de proveedores
     IfSetToYesDontForgetPermission=Si se establece en sí, no se olvide de proporcionar permisos a los grupos o usuarios permitidos para la segunda aprobación
    @@ -1234,7 +1019,6 @@ ProjectsSetup=Configuración del módulo de proyecto
     ProjectsModelModule=Modelo de documento de informes de proyecto
     TasksNumberingModules=Módulo de numeración de tareas
     TaskModelModule=Tareas informa el modelo del documento
    -UseSearchToSelectProject=Espere a que presione una tecla antes de cargar el contenido de la lista combinada del proyecto (Esto puede aumentar el rendimiento si tiene una gran cantidad de proyectos, pero es menos conveniente)
     AccountingPeriodCard=Período contable
     NewFiscalYear=Nuevo período contable
     OpenFiscalYear=Período contable abierto
    @@ -1249,6 +1033,7 @@ NoAmbiCaracAutoGeneration=No utilice caracteres ambiguos ("1", "l", "i", "|", "0
     SalariesSetup=Configuración de los salarios del módulo
     SortOrder=Orden de clasificación
     Format=Formato
    +TypePaymentDesc=0: tipo de pago del cliente, 1: tipo de pago del proveedor, 2: tipo de pago de clientes y proveedores
     IncludePath=Incluir ruta (definida en la variable %s)
     ExpenseReportsSetup=Configuración del módulo Informes de gastos
     TemplatePDFExpenseReports=Plantillas de documentos para generar el documento de informe de gastos
    @@ -1258,8 +1043,6 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Puede encontrar opciones p
     ListOfNotificationsPerUser=Lista de notificaciones por usuario *
     ListOfNotificationsPerUserOrContact=Lista de notificaciones por usuario * o por contacto **
     ListOfFixedNotifications=Lista de notificaciones fijas
    -GoOntoUserCardToAddMore=Vaya a la pestaña "Notificaciones" de un usuario para agregar o eliminar notificaciones para los usuarios
    -GoOntoContactCardToAddMore=Vaya a la pestaña "Notificaciones" de un tercero para agregar o eliminar notificaciones de contactos/direcciones
     Threshold=Límite
     BackupDumpWizard=Asistente para compilar un archivo de volcado de copia de seguridad
     SomethingMakeInstallFromWebNotPossible=La instalación del módulo externo no es posible desde la interfaz web por el siguiente motivo:
    @@ -1281,15 +1064,12 @@ BackgroundTableLineEvenColor=Color de fondo para líneas de mesas uniformes
     MinimumNoticePeriod=Periodo de preaviso mínimo (Su solicitud de ausencia debe hacerse antes de este retraso)
     NbAddedAutomatically=Cantidad de días añadidos a los contadores de usuarios (automáticamente) cada mes
     EnterAnyCode=Este campo contiene una referencia para identificar la línea. Ingrese cualquier valor de su elección, pero sin caracteres especiales.
    -UnicodeCurrency=Ingrese aquí entre llaves, lista de números de bytes que representan el símbolo de moneda. Por ejemplo: para $, ingrese [36] - para Brasil real R $ [82,36] - para €, ingrese [8364]
     ColorFormat=El color RGB está en formato HEX, por ejemplo: FF0000
     PositionIntoComboList=Posición de la línea en listas combinadas
     SellTaxRate=Tasa de impuesto a la venta
     RecuperableOnly=Sí para el IVA "No percibido pero recuperable" dedicado para un estado en Francia. Mantenga el valor en "No" en todos los demás casos.
     UrlTrackingDesc=Si el proveedor o servicio de transporte ofrece una página o sitio web para verificar el estado de su envío, puede ingresarlo aquí. Puede usar la clave {TRACKID} en los parámetros de URL para que el sistema la reemplace con el valor del usuario del número de seguimiento ingresado en la tarjeta de envío.
    -OpportunityPercent=Cuando crea una oportunidad, definirá una cantidad estimada de proyecto / lead. De acuerdo con el estado de oportunidad, esta cantidad puede multiplicarse por esta tasa para evaluar la cantidad global que todas sus oportunidades pueden generar. El valor es por ciento (entre 0 y 100).
     TemplateForElement=Este registro de plantilla está dedicado a qué elemento
    -TemplateIsVisibleByOwnerOnly=La plantilla solo es visible por el propietario
     VisibleNowhere=Visible en ninguna parte
     FillFixTZOnlyIfRequired=Ejemplo: +2 (llenar solo si se experimentó un problema)
     ExpectedChecksum=Suma de comprobación esperada
    @@ -1306,10 +1086,7 @@ YouUseLastStableVersion=Usas la última versión estable
     TitleExampleForMajorRelease=Ejemplo de mensaje que puede usar para anunciar esta versión principal (no dude en utilizarla en sus sitios web)
     TitleExampleForMaintenanceRelease=Ejemplo de mensaje que puede usar para anunciar esta versión de mantenimiento (no dude en utilizarla en sus sitios web)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s está disponible. La versión %s es una versión importante con muchas características nuevas para usuarios y desarrolladores. Puede descargarlo desde el área de descarga del portal https://www.dolibarr.org (versiones estables del subdirectorio). Puede leer <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> para obtener la lista completa de cambios.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s está disponible. La versión %s es una versión de mantenimiento, por lo que solo contiene correcciones de errores. Recomendamos a todos los que usen una versión anterior actualizar a esta. Como cualquier versión de mantenimiento, no hay nuevas características ni cambios en la estructura de datos en esta versión. Puede descargarlo desde el área de descarga del portal https://www.dolibarr.org (versiones estables del subdirectorio). Puede leer <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> para obtener la lista completa de cambios.
    -MultiPriceRuleDesc=Cuando la opción "Varios niveles de precios por producto / servicio" está activada, puede definir diferentes precios (uno por nivel de precio) para cada producto. Para ahorrarle tiempo, puede ingresar aquí la regla para que el precio de cada nivel se calcule automáticamente según el precio del primer nivel, por lo que tendrá que ingresar solo el precio del primer nivel en cada producto. Esta página está aquí para ahorrarle tiempo y puede ser útil solo si sus precios para cada nivel son relativos al primer nivel. Puede ignorar esta página en la mayoría de los casos.
     ModelModulesProduct=Plantillas para documentos de productos
    -ToGenerateCodeDefineAutomaticRuleFirst=Para poder generar códigos automáticamente, primero debe definir un administrador para definir automáticamente el número de código de barras.
     SeeSubstitutionVars=Ver * nota para la lista de posibles variables de sustitución
     AllPublishers=Todos los editores
     AddRemoveTabs=Agregar o eliminar pestañas
    @@ -1328,21 +1105,12 @@ AddOtherPagesOrServices=Agregar otras páginas o servicios
     AddModels=Agregar documento o plantillas de numeración
     AddSubstitutions=Añadir sustituciones de teclas
     DetectionNotPossible=La detección no es posible
    -UrlToGetKeyToUseAPIs=URL para obtener token para utilizar API (una vez que se ha recibido el token, se guarda en la tabla de usuario de la base de datos y se debe proporcionar en cada llamada de API)
     ListOfAvailableAPIs=Lista de API disponibles
    -activateModuleDependNotSatisfied=El módulo "%s" depende del módulo "%s" que falta, por lo que el módulo "%1$s" puede no funcionar correctamente. Instale el módulo "%2$s" o deshabilite el módulo "%1$s" si quiere estar a salvo de cualquier sorpresa
    -CommandIsNotInsideAllowedCommands=El comando que intenta ejecutar no está dentro de la lista de comandos permitidos definidos en el parámetro <strong>$dolibarr_main_restrict_os_commands</strong> en el archivo <strong>conf.php</strong>.
     LandingPage=Página de destino
    -SamePriceAlsoForSharedCompanies=Si utiliza un módulo multicompañía, con la opción "precio único", el precio también será el mismo para todas las empresas si los productos se comparten entre entornos
     ModuleEnabledAdminMustCheckRights=Módulo ha sido activado. Los permisos para los módulos activados se otorgaron solo a los usuarios administradores. Es posible que deba otorgar permisos a otros usuarios o grupos manualmente si es necesario.
    -UserHasNoPermissions=Este usuario no tiene permiso definido
    -TypeCdr=Use "Ninguno" si la fecha del plazo de pago es la fecha de la factura más un delta en días (delta es el campo "N° de días") <br> Utilice "Al final del mes" si, después del delta, la fecha debe aumentarse para llegar al final del mes (+ un "Offset" opcional en días) <br> Utilice "Current / Next" para que la fecha del plazo de pago sea la primera Nth del mes (N se almacena en el campo "N° of days")
     BaseCurrency=Moneda de referencia de la empresa (entre en la configuración de la empresa para cambiar esto)
    -WarningNoteModulePOSForFrenchLaw=Este módulo %s cumple con las leyes francesas (Loi Finance 2016) porque el módulo Registros no reversibles se activa automáticamente.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Intenta instalar el módulo %s que es un módulo externo. Activar un módulo externo significa que confía en el editor del módulo y está seguro de que este módulo no altera negativamente el comportamiento de su aplicación y cumple con las leyes de su país (%s). Si el módulo trae una característica no legal, usted se convierte en responsable del uso de un software no legal.
     SetToYesIfGroupIsComputationOfOtherGroups=Establezca esto en sí si este grupo es un cálculo de otros grupos
     SeveralLangugeVariatFound=Varias variantes de lenguaje encontradas
    -GDPRContactDesc=Si almacena datos sobre empresas / ciudadanos europeos, puede almacenar aquí el contacto responsable del Reglamento general de protección de datos
     ResourceSetup=Recurso de configuración del módulo
     UseSearchToSelectResource=Use un formulario de búsqueda para elegir un recurso (en lugar de una lista desplegable).
     DisabledResourceLinkUser=Deshabilitar característica para vincular un recurso a los usuarios
    diff --git a/htdocs/langs/es_CL/bills.lang b/htdocs/langs/es_CL/bills.lang
    index 60c7428c075..9c34e11775f 100644
    --- a/htdocs/langs/es_CL/bills.lang
    +++ b/htdocs/langs/es_CL/bills.lang
    @@ -325,8 +325,6 @@ PaymentTypeShortPRE=Orden de pago de débito
     PaymentTypeCB=Tarjeta de crédito
     PaymentTypeShortCB=Tarjeta de crédito
     PaymentTypeTIP=TIP (Documentos contra pago)
    -PaymentTypeVAD=Pago en línea
    -PaymentTypeShortVAD=Pago en línea
     PaymentTypeTRA=giro bancario
     BankDetails=Detalles del banco
     BankCode=codigo bancario
    diff --git a/htdocs/langs/es_CL/companies.lang b/htdocs/langs/es_CL/companies.lang
    index 81b3e831919..249ab6e6b41 100644
    --- a/htdocs/langs/es_CL/companies.lang
    +++ b/htdocs/langs/es_CL/companies.lang
    @@ -5,11 +5,8 @@ SelectThirdParty=Seleccione un tercero
     ConfirmDeleteCompany=¿Está seguro de que desea eliminar esta empresa y toda la información heredada?
     DeleteContact=Eliminar un contacto/dirección
     ConfirmDeleteContact=¿Está seguro de que desea eliminar este contacto y toda la información heredada?
    -MenuNewProspect=Nuevo prospecto
    -MenuNewSupplier=Nuevo vendedor
     MenuNewPrivateIndividual=Nueva privada individual
     NewCompany=Nueva compañía (prospecto, cliente, vendedor)
    -NewThirdParty=Nuevo tercero (prospecto, cliente, proveedor)
     CreateDolibarrThirdPartySupplier=Crear un tercero (vendedor)
     CreateThirdPartyOnly=Crear un tercero
     CreateThirdPartyAndContact=Crear un tercero + un contacto infantil
    @@ -21,17 +18,13 @@ Contacts=Contactos/Direcciones
     ThirdPartyContacts=Contactos de terceros
     ThirdPartyContact=Contacto / dirección de terceros
     AliasNames=Nombre de alias (comercial, marca registrada, ...)
    -AliasNameShort=Alias
     Companies=Compañías
    -CountryIsInEEC=El país está dentro de la Comunidad Económica Europea
    -ThirdPartyName=Nombre de tercero
     ThirdPartyEmail=Correo electrónico de terceros
     ThirdPartyProspects=Perspectivas
     ThirdPartyProspectsStats=Perspectivas
     ThirdPartyCustomersWithIdProf12=Clientes con %s o %s
     ThirdPartySuppliers=Vendedores
     Individual=Individuo privado
    -ToCreateContactWithSameName=Creará automáticamente un contacto / dirección con la misma información que un tercero bajo el tercero. En la mayoría de los casos, incluso si su tercero es una persona física, crear un tercero solo es suficiente.
     ParentCompany=Empresa matriz
     Subsidiaries=Subsidiarias
     CivilityCode=Código de civilidad
    @@ -47,9 +40,9 @@ PhonePerso=Pers. teléfono
     No_Email=Rechazar correos electrónicos masivos
     Town=Ciudad
     Poste=Posición
    -VATIsUsed=Impuesto a las ventas se utiliza
     VATIsNotUsed=Impuesto a las ventas no se utiliza
     CopyAddressFromSoc=Rellenar dirección con dirección de tercero
    +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Tercero, ni cliente ni proveedor, los descuentos no están disponibles
     OverAllProposals=Cotizaciones
     OverAllSupplierProposals=Peticiones de precio
     LocalTax1IsUsed=Use el segundo impuesto
    @@ -86,7 +79,6 @@ ProfId4PT=Prof Id 4 (Conservatorio)
     ProfId2TN=Prof Id 2 (matrícula fiscal)
     ProfId3TN=Prof Id 3 (código de Douane)
     ProfId1US=Id del profesor (FEIN)
    -VATIntra=ID de impuesto a las ventas
     VATIntraShort=Identificación del impuesto
     VATIntraSyntaxIsValid=La sintaxis es valida
     VATReturn=Devolución del IVA
    @@ -99,8 +91,6 @@ CustomerAbsoluteDiscountShort=Descuento absoluto
     CompanyHasNoRelativeDiscount=Este cliente no tiene descuento relativo por defecto
     HasRelativeDiscountFromSupplier=Tiene un descuento predeterminado de <b> %s%% </ b> de este proveedor
     HasNoRelativeDiscountFromSupplier=No tiene descuento relativo predeterminado de este proveedor
    -CompanyHasAbsoluteDiscount=Este cliente tiene descuento disponible (notas de crédito o pagos anticipados) por <b>%s</b>%s
    -CompanyHasDownPaymentOrCommercialDiscount=Este cliente tiene descuento disponible (pagos iniciales, comerciales) para <b>%s</b>%s
     CompanyHasCreditNote=Este cliente todavía tiene notas de crédito por <b>%s</b>%s
     HasNoAbsoluteDiscountFromSupplier=No tiene crédito de descuento disponible de este proveedor
     HasAbsoluteDiscountFromSupplier=Tiene descuentos disponibles (notas de créditos o anticipos) para <b> %s </ b> %s de este proveedor
    @@ -109,6 +99,8 @@ HasCreditNoteFromSupplier=Tiene notas de crédito para <b> %s </ b> %s de este p
     CompanyHasNoAbsoluteDiscount=Este cliente no tiene crédito de descuento disponible
     CustomerAbsoluteDiscountAllUsers=Descuentos absolutos de clientes (concedidos por todos los usuarios)
     CustomerAbsoluteDiscountMy=Descuentos absolutos de clientes (otorgados por usted)
    +SupplierAbsoluteDiscountAllUsers=Descuentos absolutos de proveedores (ingresados ​​por todos los usuarios)
    +SupplierAbsoluteDiscountMy=Descuentos absolutos de proveedores (ingresados ​​por usted mismo)
     AddContactAddress=Crear contacto / dirección
     EditContactAddress=Editar contacto / dirección
     ContactId=ID de contacto
    @@ -116,22 +108,12 @@ NoContactDefinedForThirdParty=Sin contacto definido para este tercero
     NoContactDefined=Sin contacto definido
     DefaultContact=Contacto / dirección predeterminados
     AddThirdParty=Crear un tercero
    -CustomerCode=Código de cliente
    -SupplierCode=Código de proveedor
    -CustomerCodeShort=Código de cliente
    -SupplierCodeShort=Código de proveedor
    -CustomerCodeDesc=Código de cliente, único para todos los clientes
    -SupplierCodeDesc=Código de proveedor, único para todos los proveedores
     RequiredIfCustomer=Obligatorio si un tercero es un cliente o prospecto
     RequiredIfSupplier=Requerido si un tercero es un vendedor
    -ValidityControledByModule=Validez controlada por módulo
    -ThisIsModuleRules=Estas son las reglas para este módulo
     ProspectToContact=Perspectiva de contactar
     CompanyDeleted=La compañía "%s" eliminada de la base de datos.
     ListOfContacts=Lista de contactos/direcciones
     ListOfContactsAddresses=Lista de contactos/direcciones
    -ListOfThirdParties=Lista de terceros
    -ShowCompany=Mostrar un tercero
     ContactsAllShort=Todo (Sin filtro)
     ContactType=Tipo de Contacto
     ContactForOrders=Contacto de la orden
    @@ -145,13 +127,8 @@ NoContactForAnyProposal=Este contacto no es contacto de ninguna cotización
     NoContactForAnyContract=Este contacto no es un contacto para ningún contrato
     NoContactForAnyInvoice=Este contacto no es un contacto para ninguna factura
     EditCompany=Editar empresa
    -ThisUserIsNot=Este usuario no es un cliente potencial, ni un proveedor
     VATIntraCheck=Cheque
    -VATIntraCheckDesc=El enlace <b>%s</b> permite preguntar al servicio europeo de verificación de IVA. Se requiere un acceso externo a Internet desde el servidor para que este servicio funcione.
    -VATIntraCheckableOnEUSite=Consultar el IVA intracomunitario en el sitio de la comisión europea
    -VATIntraManualCheck=También puede verificar manualmente desde el sitio web europeo <a href="%s" target="_blank"> %s </a>
     ErrorVATCheckMS_UNAVAILABLE=No es posible comprobar. El servicio de verificación no proporcionado por el estado miembro  (%s).
    -NorProspectNorCustomer=Ni prospecto, ni cliente
     Staff=Personal
     ProspectLevel=Potencial prospectivo
     OthersNotLinkedToThirdParty=Otros, no vinculados a un tercero
    @@ -177,25 +154,14 @@ ExportCardToFormat=Exportar la tarjeta al formato
     ContactNotLinkedToCompany=Contacto no vinculado a ningún tercero
     DolibarrLogin=Ingreso Dolibbarr
     NoDolibarrAccess=Sin acceso a Dolibarr
    -ExportDataset_company_1=Terceros (Empresas / fundaciones / personas físicas) y propiedades
    -ExportDataset_company_2=Contactos y propiedades
    -ImportDataset_company_1=Terceros (Empresas / fundaciones / personas físicas) y propiedades
    -ImportDataset_company_2=Contactos / Direcciones (de terceros o no) y atributos
    -ImportDataset_company_4=Terceros / representantes de ventas (asignar usuarios de representantes de ventas a las empresas)
     DeliveryAddress=Dirección de entrega
     SupplierCategory=Categoría del vendedor
     DeleteFile=Borrar archivo
     ConfirmDeleteFile=¿Seguro que quieres eliminar este archivo?
     AllocateCommercial=Asignado al representante de ventas
     Organization=Organización
    -FiscalYearInformation=Información sobre el año fiscal
     FiscalMonthStart=Mes de inicio del año fiscal
    -YouMustAssignUserMailFirst=Primero debe crear un correo electrónico para este usuario para poder agregar notificaciones de correos electrónicos para él.
     YouMustCreateContactFirst=Para poder agregar notificaciones por correo electrónico, primero debe definir contactos con correos electrónicos válidos para el tercero
    -ListSuppliersShort=Lista de proveedores
    -ListProspectsShort=Lista de prospectos
    -ListCustomersShort=Lista de clientes
    -ThirdPartiesArea=Terceros y área de contacto
     InActivity=Abierto
     ThirdPartyIsClosed=Tercero está cerrado
     ProductsIntoElements=Lista de productos / servicios en %s
    @@ -203,14 +169,11 @@ CurrentOutstandingBill=Factura pendiente actual
     OutstandingBill=Max. por factura pendiente
     OutstandingBillReached=Max. por la factura pendiente alcanzado
     OrderMinAmount=Monto mínimo para la orden
    -MonkeyNumRefModelDesc=Devuelva el número con el formato %syymm-nnnn para el código del cliente y %syymm-nnnn para el código del proveedor donde yy es año, mm es mes y nnnn es una secuencia sin interrupción y sin retorno a 0.
     LeopardNumRefModelDesc=El código es libre. Este código se puede modificar en cualquier momento.
     ManagingDirectors=Nombre del gerente (CEO, director, presidente ...)
     MergeOriginThirdparty=Tercero duplicado (tercero que desea eliminar)
    -ConfirmMergeThirdparties=¿Estás seguro de que deseas fusionar a este tercero en el actual? Todos los objetos vinculados (facturas, pedidos, ...) se moverán al tercero actual, luego se eliminará el tercero.
     ThirdpartiesMergeSuccess=Los terceros se han fusionado
     SaleRepresentativeLogin=Inicio de sesión del representante de ventas
     SaleRepresentativeFirstname=Nombre del representante de ventas
     SaleRepresentativeLastname=Apellido del representante de ventas
     ErrorThirdpartiesMerge=Hubo un error al eliminar los terceros. Por favor revise el registro. Los cambios han sido revertidos.
    -NewCustomerSupplierCodeProposed=Nuevo código de cliente o proveedor sugerido en código duplicado
    diff --git a/htdocs/langs/es_CL/interventions.lang b/htdocs/langs/es_CL/interventions.lang
    index c9f94d2bd0b..0456e818956 100644
    --- a/htdocs/langs/es_CL/interventions.lang
    +++ b/htdocs/langs/es_CL/interventions.lang
    @@ -34,8 +34,6 @@ TypeContact_fichinter_external_CUSTOMER=Seguimiento de contacto con el cliente
     PrintProductsOnFichinter=Imprima también líneas de tipo "producto" (no solo servicios) en la tarjeta de intervención
     PrintProductsOnFichinterDetails=intervenciones generadas a partir de órdenes
     UseServicesDurationOnFichinter=Usar la duración de los servicios para las intervenciones generadas a partir de órdenes
    -NbOfinterventions=N° de tarjetas de intervención
    -NumberOfInterventionsByMonth=Número de tarjetas de intervención por mes (fecha de validación)
     AmountOfInteventionNotIncludedByDefault=La cantidad de intervención no se incluye por defecto en los beneficios (en la mayoría de los casos, las hojas de tiempo se utilizan para contar el tiempo invertido). Agregue la opción PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT a 1 en home-setup-other para incluirlos.
     InterId=Id de intervención
     InterRef=Intervención ref.
    diff --git a/htdocs/langs/es_CL/main.lang b/htdocs/langs/es_CL/main.lang
    index 6c2991575d2..9bb6dd7f295 100644
    --- a/htdocs/langs/es_CL/main.lang
    +++ b/htdocs/langs/es_CL/main.lang
    @@ -36,20 +36,13 @@ ErrorGoToModuleSetup=Ir a la configuración del módulo para arreglar esto
     ErrorFailedToSendMail=Error al enviar el correo (remitente = %s, receptor = %s)
     ErrorFileNotUploaded=El archivo no fue cargado. Compruebe que el tamaño no exceda el máximo permitido, que el espacio libre esté disponible en el disco y que no haya un archivo con el mismo nombre en este directorio.
     ErrorWrongHostParameter=Parámetro de host incorrecto
    -ErrorYourCountryIsNotDefined=Tu país no está definido. Vaya a Inicio-Configuración-Editar y publique nuevamente el formulario.
    -ErrorRecordIsUsedByChild=Error al eliminar este registro Este registro es utilizado por al menos un registro de niño.
     ErrorWrongValueForParameterX=Valor incorrecto para el parámetro %s
     ErrorNoRequestInError=Sin solicitud por error
    -ErrorServiceUnavailableTryLater=Servicio no disponible por el momento. Inténtalo más tarde.
     ErrorDuplicateField=Duplicar valor en un campo único
    -ErrorSomeErrorWereFoundRollbackIsDone=Se encontraron algunos errores. Revertimos los cambios.
    -ErrorConfigParameterNotDefined=El parámetro <b>%s</b> no está definido en el archivo de configuración <b>conf.php</b> Dolibarr.
     ErrorCantLoadUserFromDolibarrDatabase=Falló al encontrar el usuario <b>%s</b> en la base de datos Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Error, sin tasas de IVA definidas para el país '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, ningún tipo de impuestos sociales/fiscales definidos para el país '%s'.
     ErrorFailedToSaveFile=Error, no se pudo guardar el archivo.
    -ErrorCannotAddThisParentWarehouse=Está intentando agregar un almacén principal que ya es hijo de uno actual
    -MaxNbOfRecordPerPage=Número máximo de registro por página
     NotAuthorized=Usted no está autorizado a hacer eso.
     SetDate=Establece la fecha
     SeeAlso=Véase también %s
    @@ -61,10 +54,8 @@ FileRenamed=El archivo fue renombrado con éxito
     FileGenerated=El archivo fue generado con éxito
     FileSaved=El archivo se guardó con éxito
     FileUploaded=El archivo se cargó correctamente
    -FileTransferComplete=Archivo (s) fue cargado con éxito
     FilesDeleted=Archivo eliminado con éxito
     FileWasNotUploaded=Se seleccionó un archivo para el archivo adjunto pero aún no se cargó. Haga clic en "Adjuntar archivo" para esto.
    -NbOfEntries=N de entradas
     GoToWikiHelpPage=Lea la ayuda en línea (se necesita acceso a Internet)
     GoToHelpPage=Leer la ayuda
     RecordDeleted=Registro borrado
    @@ -72,8 +63,8 @@ LevelOfFeature=Nivel de características
     DolibarrInHttpAuthenticationSoPasswordUseless=El modo de autenticación Dolibarr está configurado en <b>%s</b> en el archivo de configuración <b>conf.php</b>.<br> Esto significa que la base de datos de contraseñas es externa a Dolibarr, por lo que cambiar este campo puede no tener efecto.
     Undefined=Indefinido
     PasswordForgotten=¿Contraseña olvidada?
    +NoAccount=Sin cuenta?
     SeeAbove=Véase más arriba
    -HomeArea=Área de inicio
     PreviousConnexion=Conexión previa
     PreviousValue=Valor anterior
     ConnectedOnMultiCompany=Conectado al entorno
    @@ -101,7 +92,6 @@ AddLink=Agregar enlace
     AddToDraft=Agregar al borrador
     Update=Actualizar
     CloseBox=Retire el widget de su tablero de instrumentos
    -ConfirmSendCardByMail=¿Realmente quieres mandar el contenido de esta tarjeta al email <b>%s</b>?
     Delete=Borrar
     Remove=retirar
     Resiliate=Terminar
    @@ -168,7 +158,6 @@ Mb=megabyte
     Tb=Tuberculosis
     Copy=Dupdo
     Default=Defecto
    -DefaultValues=Valores predeterminados
     UnitPriceHT=Precio unitario (neto)
     UnitPriceHTCurrency=Precio unitario (neto) (moneda)
     UnitPriceTTC=Precio unitario
    @@ -185,7 +174,6 @@ AmountTTCShort=Monto (IVA inc.)
     AmountHT=Monto (neto de impuestos)
     AmountTTC=Monto (impuesto inc.)
     AmountVAT=IVA
    -MulticurrencyAlreadyPaid=Ya pagó, moneda original
     MulticurrencyRemainderToPay=Permanecer en el pago, moneda original
     MulticurrencyPaymentAmount=Importe del pago, moneda original
     MulticurrencyAmountHT=Importe (neto de impuestos), moneda original
    @@ -231,7 +219,7 @@ Module=Módulo / Aplicación
     Modules=Módulos / Aplicaciones
     FullList=Lista llena
     ExternalRef=Ref. externo
    -RefSupplier=Árbitro. vendedor
    +RefSupplier=Ref. vendedor
     CommercialProposalsShort=Cotizaciones
     ActionsToDo=Eventos para hacer
     ActionsToDoShort=Que hacer
    @@ -252,8 +240,6 @@ Filter=Filtrar
     FilterOnInto=Criterio de búsqueda '<strong>%s</strong>' en los campos %s
     ChartGenerated=Gráfico generado
     GeneratedOn=Construir en %s
    -DolibarrStateBoard=Estadísticas en Base de Datos
    -DolibarrWorkBoard=Tablero de items pendientes
     NoOpenedElementToProcess=Sin elemento abierto para procesar
     NotYetAvailable=No disponible aún
     Categories=Etiquetas / categorías
    @@ -273,7 +259,7 @@ Preview=Previsualizar
     NextStep=Próximo paso
     None=Ninguna
     Late=Tarde
    -LateDesc=Demora para definir si un registro está retrasado o no depende de su configuración. Pídale a su administrador que cambie la demora desde el menú Inicio - Configuración - Alertas.
    +NoItemLate=No hay artículo tarde
     Photo=Imagen
     Photos=Imágenes
     ConfirmDeletePicture=Confirmar eliminación de imagen?
    @@ -284,7 +270,6 @@ CurrentLogin=Inicio de sesión actual
     EnterLoginDetail=Ingrese los detalles de inicio
     May=Mayo
     December=diciembre
    -MayMin=Mayo
     Month05=Mayo
     MonthShort01=Ene
     MonthShort04=Abr
    @@ -350,7 +335,6 @@ Receive=Recibir
     CompleteOrNoMoreReceptionExpected=Completo o nada más esperado
     YouCanChangeValuesForThisListFromDictionarySetup=Puede cambiar los valores para esta lista desde el menú Configuración - Diccionarios
     YouCanChangeValuesForThisListFrom=Puede cambiar los valores para esta lista desde el menú %s
    -YouCanSetDefaultValueInModuleSetup=Puede establecer el valor predeterminado utilizado al crear un nuevo registro en la configuración del módulo
     Documents=Archivos
     UploadDisabled=Carga inhabilitada
     MenuAgendaGoogle=Agenda de Google
    @@ -361,7 +345,6 @@ Layout=Diseño
     For=por
     ForCustomer=Para el cliente
     UnHidePassword=Mostrar comando real con contraseña clara
    -Informations=Informaciones
     AddNewLine=Agregar nueva línea
     AddFile=Agregar archivo
     FreeZone=No es un producto / servicio predefinido
    @@ -371,11 +354,8 @@ Merge=Unir
     DocumentModelStandardPDF=Plantilla PDF estándar
     PrintContentArea=Mostrar página para imprimir área de contenido principal
     MenuManager=Administrador de menú
    -WarningYouAreInMaintenanceMode=Advertencia, se encuentra en modo de mantenimiento, por lo que solo se puede iniciar sesión con <b>%s</b> en este momento.
     CoreErrorMessage=Disculpe, ocurrió un error. Póngase en contacto con el administrador del sistema para verificar los registros o deshabilitar $ dolibarr_main_prod = 1 para obtener más información.
     FieldsWithAreMandatory=Campos con <b>%s</b> son obligatorios
    -FieldsWithIsForPublic=Los campos con <b>%s</b> se muestran en la lista pública de miembros. Si no quiere esto, no marque la casilla "pública".
    -AccordingToGeoIPDatabase=(según la conversión GeoIP)
     RequiredField=campo requerido
     ToTest=Prueba
     ValidateBefore=La tarjeta debe ser validada antes de usar esta característica
    @@ -404,7 +384,6 @@ ByTown=Por la ciudad
     BySalesRepresentative=Por representante de ventas
     LinkedToSpecificUsers=Vinculado a un contacto de usuario particular
     NoResults=No hay resultados
    -AdminTools=Herramientas de administración
     SystemTools=Herramientas del sistema
     ModulesSystemTools=Herramientas de módulos
     NoPhotoYet=No hay fotos disponibles todavía
    @@ -420,7 +399,6 @@ AddBox=Agregar caja
     SelectElementAndClick=Seleccione un elemento y haga clic en %s
     PrintFile=Imprimir archivo %s
     ShowTransaction=Mostrar entrada en cuenta bancaria
    -GoIntoSetupToChangeLogo=Vaya a Inicio - Configuración - Compañía para cambiar el logotipo o vaya a Inicio - Configuración - Pantalla para ocultar.
     Deny=Negar
     Denied=Negado
     ListOfTemplates=Lista de plantillas
    @@ -430,11 +408,8 @@ Sincerely=Sinceramente
     DeleteLine=Eliminar línea
     ConfirmDeleteLine=¿Estás seguro de que deseas eliminar esta línea?
     NoPDFAvailableForDocGenAmongChecked=No hay PDF disponible para la generación de documentos entre el registro verificado
    -TooManyRecordForMassAction=Demasiados registros seleccionados para acción masiva. La acción está restringida a una lista de %s registro.
     NoRecordSelected=Ningún registro seleccionado
     MassFilesArea=Área para archivos creados por acciones masivas
    -ConfirmMassDeletion=Confirmación de eliminación masiva
    -ConfirmMassDeletionQuestion=¿Seguro que quieres eliminar el registro %s seleccionado?
     ClassifyBilled=Clasificar pago
     ClassifyUnbilled=Clasificar sin facturar
     FrontOffice=Oficina frontal
    @@ -443,7 +418,6 @@ ExportList=Lista de exportación
     Miscellaneous=Diverso
     GroupBy=Agrupar por...
     RemoveString=Eliminar la cadena '%s'
    -SomeTranslationAreUncomplete=Algunos idiomas pueden traducirse parcialmente o contener errores. Si detecta alguno, puede corregir los archivos de idioma que se registran en <a href="https://transifex.com/projects/p/dolibarr/" target="_blank"> https://transifex.com/projects/p/ dolibarr / </a>.
     DirectDownloadLink=Enlace de descarga directa (público / externo)
     DirectDownloadInternalLink=Enlace de descarga directa (debe registrarse y necesita permisos)
     DownloadDocument=Descargar documento
    @@ -455,10 +429,7 @@ ExpenseReports=Reporte de gastos
     HR=HORA
     HRAndBank=Recursos Humanos y Banco
     TitleSetToDraft=Volver al borrador
    -ConfirmSetToDraft=¿Estás seguro de que quieres volver al estado de Borrador?
     ImportId=Importar identificación
    -EMailTemplates=Plantillas de correos electrónicos
    -FileNotShared=Archivo no compartido para el público externo
     LineNb=Line no
     Monday=lunes
     Tuesday=martes
    @@ -466,8 +437,6 @@ Thursday=jueves
     Friday=viernes
     Saturday=sábado
     Sunday=domingo
    -MondayMin=Mes
    -WednesdayMin=Nosotros
     Day1=lunes
     Day2=martes
     Day4=jueves
    @@ -491,9 +460,7 @@ SearchIntoCustomerProposals=Propuestas de clientes
     SearchIntoSupplierProposals=Propuestas del vendedor
     SearchIntoCustomerShipments=Envíos de clientes
     SearchIntoExpenseReports=Reporte de gastos
    -SearchIntoLeaves=Vacaciones
     NbComments=Numero de comentarios
     CommentAdded=Comentario agregado
     Everybody=Todos
     AssignedTo=Asignado a
    -ConfirmMassDraftDeletion=Borrador de confirmación de eliminación masiva
    diff --git a/htdocs/langs/es_CL/members.lang b/htdocs/langs/es_CL/members.lang
    index e9de73ff99f..974e25135ed 100644
    --- a/htdocs/langs/es_CL/members.lang
    +++ b/htdocs/langs/es_CL/members.lang
    @@ -144,7 +144,6 @@ MembersByNature=Esta pantalla muestra estadísticas de los miembros por naturale
     MembersByRegion=Esta pantalla muestra estadísticas de los miembros por región.
     VATToUseForSubscriptions=Tipo de IVA para suscripciones
     NoVatOnSubscription=Sin TVA para suscripciones
    -MEMBER_PAYONLINE_SENDEMAIL=Correo electrónico a utilizar para recibir una advertencia por correo electrónico cuando Dolibarr reciba una confirmación de un pago validado para una suscripción (Ejemplo: paymentdone@example.com)
     ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Producto utilizado para la línea de suscripción en la factura: %s
     SubscriptionRecorded=Suscripción grabada
     NoEmailSentToMember=No se envió ningún correo electrónico al miembro
    diff --git a/htdocs/langs/es_CL/other.lang b/htdocs/langs/es_CL/other.lang
    index 4f83154f0ca..de6d52694bf 100644
    --- a/htdocs/langs/es_CL/other.lang
    +++ b/htdocs/langs/es_CL/other.lang
    @@ -3,7 +3,6 @@ SecurityCode=Código de seguridad
     NumberingShort=NORTE
     Tools=Herramientas
     TMenuTools=Herramientas
    -ToolsDesc=Aquí se recopilan todas las herramientas diversas que no están incluidas en otras entradas del menú. <br><br>Todas las herramientas se pueden obtener en el menú de la izquierda.
     Birthday=Cumpleaños
     BirthdayAlertOn=alerta de cumpleaños activa
     BirthdayAlertOff=alerta de cumpleaños inactiva
    @@ -16,13 +15,9 @@ DocFileGeneratedInto=Archivo de documento generado en <b>%s</b>.
     MessageOK=Mensaje en la página de devolución de pago validada
     MessageKO=Mensaje en la página de devolución de pago cancelado
     ContentOfDirectoryIsNotEmpty=El contenido de este directorio no está vacío.
    -DeleteAlsoContentRecursively=Compruebe para eliminar todo el contenido recursiveley
     YearOfInvoice=Año de la fecha de factura
     PreviousYearOfInvoice=Año anterior de la fecha de facturación
     NextYearOfInvoice=El año siguiente a la fecha de la factura
    -Notify_FICHINTER_ADD_CONTACT=Contacto agregado a la intervención
    -Notify_FICHINTER_VALIDATE=Intervención validada
    -Notify_FICHINTER_SENTBYMAIL=Intervención enviada por correo
     Notify_ORDER_VALIDATE=Pedido del cliente validado
     Notify_ORDER_SENTBYMAIL=Pedido del cliente enviado por correo
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Pedido del proveedor enviado por correo
    @@ -30,8 +25,6 @@ Notify_ORDER_SUPPLIER_VALIDATE=Orden del proveedor registrada
     Notify_ORDER_SUPPLIER_APPROVE=Pedido del proveedor aprobado
     Notify_ORDER_SUPPLIER_REFUSE=Orden del proveedor rechazada
     Notify_PROPAL_VALIDATE=Validación cotización cliente
    -Notify_PROPAL_CLOSE_SIGNED=Cliente propal cerrado firmado
    -Notify_PROPAL_CLOSE_REFUSED=Cliente propal cerrado rechazado
     Notify_PROPAL_SENTBYMAIL=Envío cotización por e-mail
     Notify_WITHDRAW_TRANSMIT=Retirada de transmisión
     Notify_WITHDRAW_CREDIT=Retiro de crédito
    @@ -40,14 +33,14 @@ Notify_COMPANY_CREATE=Tercero creado
     Notify_COMPANY_SENTBYMAIL=Correos enviados desde una tarjeta de terceros
     Notify_BILL_VALIDATE=Factura del cliente validada
     Notify_BILL_UNVALIDATE=Factura del cliente sin validar
    -Notify_BILL_PAYED=Factura del cliente pagado
     Notify_BILL_CANCEL=Factura del cliente cancelada
     Notify_BILL_SENTBYMAIL=Factura del cliente enviada por correo
     Notify_BILL_SUPPLIER_VALIDATE=Factura del proveedor validada
    -Notify_BILL_SUPPLIER_PAYED=Factura del proveedor pagado
     Notify_BILL_SUPPLIER_SENTBYMAIL=Factura del proveedor enviada por correo
     Notify_CONTRACT_VALIDATE=Contrato validado
     Notify_FICHEINTER_VALIDATE=Intervención validada
    +Notify_FICHINTER_ADD_CONTACT=Contacto agregado a la intervención
    +Notify_FICHINTER_SENTBYMAIL=Intervención enviada por correo
     Notify_SHIPPING_VALIDATE=Envío validado
     Notify_SHIPPING_SENTBYMAIL=Envío enviado por correo
     Notify_MEMBER_VALIDATE=Miembro validado
    @@ -61,15 +54,8 @@ TotalSizeOfAttachedFiles=Tamaño total de los archivos / documentos adjuntos
     MaxSize=Talla máxima
     AttachANewFile=Adjunte un nuevo archivo / documento
     LinkedObject=Objeto vinculado
    -NbOfActiveNotifications=Número de notificaciones (N° de correos electrónicos de destinatarios)
     PredefinedMailTest=__(Hola)__\nEste es un correo de prueba enviado a __EMAIL__.\nLas dos líneas están separadas por un retorno de carro.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hola)__\nEste es un correo de <b> prueba </b> (la palabra prueba debe estar en negrita). <br> Las dos líneas están separadas por un retorno de carro. <br> <br> __USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hola)__\n\nAquí encontrará la solicitud de precio __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hola)__\n\nAquí encontrará el orden __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hola)__\n\nAquí encontrará nuestro pedido __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hola)__\n\nAquí encontrará la factura __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hola)__\n\nAquí encontrará el envío __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hola)__\n\nAquí encontrará la intervención __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
     DemoDesc=Dolibarr es un ERP / CRM compacto que admite varios módulos comerciales. Una demostración que muestra todos los módulos no tiene sentido ya que este escenario nunca ocurre (varios cientos disponibles). Entonces, varios perfiles de demostración están disponibles.
     ChooseYourDemoProfilMore=... o crea tu propio perfil <br> (selección manual del módulo)
     DemoFundation=Administrar miembros de una fundación
    @@ -107,7 +93,6 @@ EnableGDLibraryDesc=Instale o habilite la biblioteca de GD en su instalación de
     ProfIdShortDesc=<b>Prof Id %s</b> es una información que depende del país de un tercero. <br> Por ejemplo, para el país <b>%s</b>, es el código<b>%s</b>.
     DolibarrDemo=Demo de Dolibarr ERP / CRM
     StatsByNumberOfUnits=Estadísticas para suma de cantidad de productos / servicios
    -StatsByNumberOfEntities=Estadísticas en número de entidades remitentes (N° de factura, u orden ...)
     NumberOfProposals=Número de propuestas
     NumberOfCustomerInvoices=Número de facturas de clientes
     NumberOfSupplierProposals=Número de propuestas de proveedores
    @@ -119,7 +104,6 @@ NumberOfUnitsCustomerInvoices=Número de unidades en las facturas de los cliente
     NumberOfUnitsSupplierProposals=Número de unidades en propuestas de proveedores
     NumberOfUnitsSupplierOrders=Número de unidades en pedidos a proveedores
     NumberOfUnitsSupplierInvoices=Número de unidades en las facturas del proveedor
    -EMailTextInterventionAddedContact=Se le ha asignado una nueva intervención %s.
     EMailTextInterventionValidated=La intervención %s ha sido validada.
     EMailTextInvoiceValidated=La factura %s ha sido validada.
     EMailTextProposalValidated=La cotización %s que le concierne ha sido validado.
    @@ -133,7 +117,6 @@ ImportedWithSet=Conjunto de datos de importación
     ResizeDesc=Ingrese un nuevo ancho <b> O </ b> nueva altura. La relación se mantendrá durante el cambio de tamaño ...
     NewSizeAfterCropping=Nuevo tamaño después del recorte
     DefineNewAreaToPick=Defina una nueva área en la imagen para elegir (haga clic con el botón izquierdo en la imagen y luego arrastre hasta que llegue a la esquina opuesta)
    -CurrentInformationOnImage=Esta herramienta fue diseñada para ayudarlo a cambiar el tamaño o recortar una imagen. Esta es información sobre la imagen editada actual
     YouReceiveMailBecauseOfNotification=Usted recibe este mensaje porque su correo electrónico ha sido agregado a la lista de objetivos para ser informado de eventos particulares en el software %s de %s.
     YouReceiveMailBecauseOfNotification2=Este evento es el siguiente:
     ThisIsListOfModules=Esta es una lista de módulos preseleccionados por este perfil de demostración (solo los módulos más comunes son visibles en esta demostración). Edítelo para tener una demostración más personalizada y haga clic en "Comenzar".
    @@ -145,6 +128,7 @@ CancelUpload=Cancelar carga
     FileIsTooBig=Los archivos son demasiado grandes
     PleaseBePatient=Por favor sea paciente...
     ResetPassword=Restablecer la contraseña
    +RequestToResetPasswordReceived=Se recibió una solicitud para cambiar su contraseña.
     NewKeyIs=Estas son sus nuevas claves para iniciar sesión
     NewKeyWillBe=Su nueva clave para iniciar sesión en el software será
     ClickHereToGoTo=Haga clic aquí para ir a %s
    diff --git a/htdocs/langs/es_CL/projects.lang b/htdocs/langs/es_CL/projects.lang
    index 8210d3ff1e0..38a931d2b48 100644
    --- a/htdocs/langs/es_CL/projects.lang
    +++ b/htdocs/langs/es_CL/projects.lang
    @@ -21,14 +21,10 @@ OnlyYourTaskAreVisible=Solo las tareas asignadas a ti son visibles. Asigna la ta
     ProjectCategories=Etiquetas / categorías de proyecto
     ConfirmDeleteAProject=¿Seguro que quieres eliminar este proyecto?
     ConfirmDeleteATask=¿Seguro que quieres eliminar esta tarea?
    -OpportunitiesStatusForOpenedProjects=Cantidad de oportunidades de proyectos abiertos por estado
    -OpportunitiesStatusForProjects=Cantidad de oportunidades de proyectos por estado
     ShowProject=Mostrar proyecto
     ShowTask=Mostrar tarea
     SetProject=Establecer proyecto
     NoProject=Ningún proyecto definido o propiedad
    -NbOfProjects=N° de proyectos
    -NbOfTasks=N° de tareas
     TimeSpentByYou=Tiempo pasado por ti
     TimeSpentByUser=Tiempo dedicado por el usuario
     TimesSpent=Tiempo dedicado
    @@ -51,18 +47,6 @@ ListOfTasks=Lista de tareas
     GoToListOfTimeConsumed=Ir a la lista de tiempo consumido
     GoToListOfTasks=Ir a la lista de tareas
     GoToGanttView=Ve a la vista de Gantt
    -ListProposalsAssociatedProject=Listado de cotizaciones asociadas al proyecto
    -ListOrdersAssociatedProject=Lista de pedidos de clientes asociados con el proyecto
    -ListInvoicesAssociatedProject=Lista de facturas de clientes asociadas con el proyecto
    -ListPredefinedInvoicesAssociatedProject=Lista de plantillas de facturas de cliente asociadas al proyecto
    -ListSupplierOrdersAssociatedProject=Lista de pedidos a proveedores asociados con el proyecto
    -ListSupplierInvoicesAssociatedProject=Lista de facturas de proveedores asociadas con el proyecto
    -ListContractAssociatedProject=Lista de contratos asociados con el proyecto
    -ListShippingAssociatedProject=Lista de envíos asociados con el proyecto
    -ListFichinterAssociatedProject=Lista de intervenciones asociadas con el proyecto
    -ListExpenseReportsAssociatedProject=Lista de informes de gastos asociados con el proyecto
    -ListDonationsAssociatedProject=Lista de donaciones asociadas con el proyecto
    -ListActionsAssociatedProject=Lista de eventos asociados con el proyecto
     ListTaskTimeUserProject=Lista de tiempo consumido en las tareas del proyecto
     ListTaskTimeForTask=Lista de tiempo consumido en la tarea
     ActivityOnProjectToday=Actividad en proyecto hoy
    @@ -106,8 +90,6 @@ TaskCreatedInDolibarr=Tarea %s creada
     TaskModifiedInDolibarr=Tarea %s modificada
     TaskDeletedInDolibarr=Tarea %s eliminada
     OpportunityStatusShort=Opp. estado
    -OpportunityProbability=Probabilidad de oportunidad
    -OpportunityAmount=Cantidad de oportunidad
     OpportunityAmountShort=Opp. cantidad
     OpportunityAmountAverageShort=Opp promedio cantidad
     OpportunityAmountWeigthedShort=Opp ponderado cantidad
    @@ -122,8 +104,6 @@ TypeContact_project_task_internal_TASKCONTRIBUTOR=Colaborador
     TypeContact_project_task_external_TASKCONTRIBUTOR=Colaborador
     SelectElement=Seleccionar elemento
     AddElement=Enlace al elemento
    -DocumentModelBeluga=Plantilla de proyecto para vista general de objetos vinculados
    -DocumentModelBaleine=Plantilla de informe de proyecto para tareas
     PlannedWorkload=Carga de trabajo planificada
     ProjectReferers=Artículos relacionados
     ProjectMustBeValidatedFirst=El proyecto debe ser validado primero
    @@ -133,24 +113,13 @@ TimeSpentBy=Tiempo consumido por
     AssignTaskToMe=Asignarme una tarea
     AssignTaskToUser=Asignar tarea a %s
     SelectTaskToAssign=Seleccionar tarea para asignar ...
    -ProjectOverview=Visión de conjunto
    -ManageTasks=Usa proyectos para seguir tareas y tiempo
     ManageOpportunitiesStatus=Usa proyectos para seguir leads / opportinuties
    -ProjectNbProjectByMonth=Número de proyectos creados por mes
    -ProjectNbTaskByMonth=Número de tareas creadas por mes
    -ProjectOppAmountOfProjectsByMonth=Cantidad de oportunidades por mes
    -ProjectWeightedOppAmountOfProjectsByMonth=Cantidad ponderada de oportunidades por mes
    -ProjectOpenedProjectByOppStatus=Abrir proyecto / conducir por estado de oportunidad
     ProjectsStatistics=Estadísticas de proyectos / leads
     TasksStatistics=Estadísticas sobre proyectos/tareas principales
     TaskAssignedToEnterTime=Tarea asignada Ingresar el tiempo en esta tarea debería ser posible.
     IdTaskTime=Tiempo de la tarea de identificación
     YouCanCompleteRef=Si desea completar la referencia con cierta información (para utilizarla como filtros de búsqueda), se recomienda agregar un carácter para separarla, por lo que la numeración automática seguirá funcionando correctamente para los próximos proyectos. Por ejemplo %s-ABC. También puede preferir agregar claves de búsqueda en la etiqueta. Pero la mejor práctica puede ser agregar un campo dedicado, también llamado atributos complementarios.
     OpenedProjectsByThirdparties=Proyectos abiertos por terceros
    -OnlyOpportunitiesShort=Solo oportunidades
    -OpportunityTotalAmount=Cantidad total de oportunidades
    -OpportunityPonderatedAmount=Cantidad ponderada de oportunidades
    -OpportunityPonderatedAmountDesc=Cantidad de oportunidades ponderada con probabilidad
     OppStatusQUAL=Calificación
     OppStatusPROPO=Cotización
     AllowToLinkFromOtherCompany=Permitir vincular proyecto de otra empresa<br><br><u>Valores admitidos: </u><br> - Mantener vacío: puede vincular cualquier proyecto de la empresa (predeterminado)<br> - "todo": puede vincular cualquier proyecto, incluso proyecto de otras empresas<br> - Una lista de identificación de terceros separada por comas: puede vincular todos los proyectos de estos terceros definidos (Ejemplo: 123,4795,53)<br>
    diff --git a/htdocs/langs/es_CL/stocks.lang b/htdocs/langs/es_CL/stocks.lang
    index fe8f71f5b08..1922b6ff759 100644
    --- a/htdocs/langs/es_CL/stocks.lang
    +++ b/htdocs/langs/es_CL/stocks.lang
    @@ -29,7 +29,6 @@ StockTransfer=Transferencia de acciones
     MassStockTransferShort=Transferencia stock en masa
     StockMovement=Movimiento de valores
     StockMovements=Movimientos de acciones
    -LabelMovement=Etiqueta de movimiento
     NumberOfUnit=Número de unidades
     StockTooLow=Stock demasiado bajo
     StockLowerThanLimit=Stock inferior al límite de alerta (%s)
    diff --git a/htdocs/langs/es_CO/admin.lang b/htdocs/langs/es_CO/admin.lang
    index a2e54cdcb94..b2e59fdd9a9 100644
    --- a/htdocs/langs/es_CO/admin.lang
    +++ b/htdocs/langs/es_CO/admin.lang
    @@ -9,20 +9,15 @@ SessionSaveHandler=Manejador para grabar sesiones
     SessionSavePath=Ubicación de almacenamiento de sesión
     PurgeSessions=Limpiado de sesiones
     ConfirmPurgeSessions=¿Realmente quiere eliminar todas las sesiones? Ésto desconectará todos los usuarios (excepto a usted).
    -NoSessionListWithThisHandler=El manejador para grabar sesiones configurado en su PHP no permite listar todas las sesiones activas.
     LockNewSessions=Bloquear conexiones nuevas
    -ConfirmLockNewSessions=¿Está seguro que desea restringir solo a usted cualquier conexión nueva a Dolibarr? Solo el usuario <b>%s</b> podrá conectarse después de esto.
     UnlockNewSessions=Eliminar el bloqueo de conexión
    -Sessions=La sesión de usuarios
     WebUserGroup=Grupo/Usuario del servidor web
    -NoSessionFound=Al parecer su PHP no permite listar las sesiones activas. La directiva usada para grabar sesiones (<b>%s</b>) parece estar protegida (Por ejemplo, por permisos del SO o por la directiva PHP open_basedir).
     DBStoringCharset=Conjunto de caracteres de la base de datos para almacenar datos
     DBSortingCharset=Conjunto de caracteres para organizar datos
     WarningModuleNotActive=El módulo <b>%s</b> debe estar activo
     WarningOnlyPermissionOfActivatedModules=Solo los permisos relacionados a los modulos activos se muestran acá. Puede activar otros modulos en la página Inicio->Configuración->Módulos.
     DolibarrSetup=Instalación o actualización de Dolibarr
     GUISetup=Mostrar
    -SetupArea=Área de configuración
     FormToTestFileUploadForm=Formulario para probar la importación de archivos (según configuración)
     IfModuleEnabled=Nota: solo aplica el SI en caso de que el modulo <b>%s</b> esté activo
     RemoveLock=Eliminar el archivo <b>%s</b> solo en caso de existir para permitir el uso de la herramienta actualizar.
    @@ -61,7 +56,6 @@ DetailMenuIdParent=ID de un menú principal (dejar vacío para menú superior)
     DetailPosition=Organizar número para definir la posición del menú
     AllMenus=Todo
     SetupShort=Configuración
    -OtherSetup=Otra configuración
     CurrentValueSeparatorDecimal=Separador de decimales
     CurrentValueSeparatorThousand=Separador de miles
     LanguageBrowserParameter=Parámetro %s
    @@ -72,8 +66,6 @@ PHPTZ=Zona Hora del servidor PHP
     DaylingSavingTime=Horario de verano
     CurrentHour=Hora del PHP (servidor)
     Position=Puesto
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     DictionaryCanton=Departamento
     LTRate=Tipo
     CompanyName=Nombre
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    diff --git a/htdocs/langs/es_CO/companies.lang b/htdocs/langs/es_CO/companies.lang
    index 250bb5bb7c3..c6db4aa2a7a 100644
    --- a/htdocs/langs/es_CO/companies.lang
    +++ b/htdocs/langs/es_CO/companies.lang
    @@ -1,12 +1,13 @@
     # Dolibarr language file - Source file is en_US - companies
     ConfirmDeleteContact=Está seguro de borrar este contacto y todas la información relacionada?
    +NewCompany=Nueva compañía (prospecto, cliente, vendedor)
    +CreateDolibarrThirdPartySupplier=Crear un tercero (vendedor)
     ParentCompany=Sede principal
     Subsidiaries=Sucursales
     RegisteredOffice=Domicilio principal
     State=Departamento
     PhonePerso=Teléf. personal
     No_Email=Rechazar correos de cadena
    -VATIsUsed=Sujeto a IVA
     VATIsNotUsed=No sujeto a IVA
     ProfId1AT=Id prof. 1 (USt.-IdNr)
     ProfId2AT=Id prof. 2 (USt.-Nr)
    @@ -15,11 +16,6 @@ ProfId2CO=Identificación (CC, NIT, CE)
     ProfId3CO=CIIU
     CompanyHasCreditNote=Este cliente tiene <b>%s %s</b> anticipos disponibles
     NoContactForAnyProposal=Este contacto no es contacto de ningúna cotización
    -VATIntraCheckDesc=El link <b>%s</b> permite consultar al servicio RUES el NIT. Se requiere acceso a internet para que el servicio funcione
     VATIntraCheckURL=http://www.rues.org.co/RUES_Web/Consultas#tabs-3
    -VATIntraCheckableOnEUSite=Verificar en la web
    -VATIntraManualCheck=Puede también realizar una verificación manual en la web <a href="%s" target="_blank">%s</a>
    -ExportDataset_company_2=Contactos de terceros y atributos
     ConfirmDeleteFile=¿Está seguro que quiere eliminar este archivo?
    -ThirdPartiesArea=Área Terceros
     ManagingDirectors=Administrador(es) (CEO, gerente, director, presidente, etc.)
    diff --git a/htdocs/langs/es_CO/main.lang b/htdocs/langs/es_CO/main.lang
    index 900a3db52b8..8b0649a08bb 100644
    --- a/htdocs/langs/es_CO/main.lang
    +++ b/htdocs/langs/es_CO/main.lang
    @@ -21,7 +21,6 @@ FormatDateHourTextShort=%d %b %Y %H:%M
     FormatDateHourText=%d %B %Y %H:%M
     NoRecordFound=No se encontraron registros
     ErrorFileNotUploaded=El archivo no se transifirió. Compruebe que el tamaño no supere el máximo permitido, el espacio libre disponible en el disco y que no hay un archivo con el mismo nombre en el directorio destino.
    -ErrorSomeErrorWereFoundRollbackIsDone=Se encontraron algunos errores. Modificaciones sin aplicar.
     SeeHere=Ver aquí
     FileWasNotUploaded=Un archivo ha sido seleccionado para adjuntarlo, pero aún no se ha subido. Haga clic en "Adjuntar este archivo".
     SeeAbove=Ver arriba
    diff --git a/htdocs/langs/es_DO/admin.lang b/htdocs/langs/es_DO/admin.lang
    index d7037ec6bab..cacb957bc9f 100644
    --- a/htdocs/langs/es_DO/admin.lang
    +++ b/htdocs/langs/es_DO/admin.lang
    @@ -1,22 +1,11 @@
     # Dolibarr language file - Source file is en_US - admin
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     OldVATRates=Tasa de ITBIS antigua
     NewVATRates=Tasa de ITBIS nueva
     Permission91=Consultar impuestos e ITBIS
     Permission92=Crear/modificar impuestos e ITBIS
     Permission93=Eliminar impuestos e ITBIS
     DictionaryVAT=Tasa de ITBIS (Impuesto sobre ventas en EEUU)
    -VATManagement=Gestión ITBIS
    -VATIsNotUsedDesc=El tipo de ITBIS propuesto por defecto es 0. Este es el caso de asociaciones, particulares o algunas pequeñas sociedades.
    -LocalTax1IsUsedDesc=Uso de un 2º tipo de impuesto (Distinto del ITBIS)
    -LocalTax1IsNotUsedDesc=No usar un 2º tipo de impuesto (Distinto del ITBIS)
    -LocalTax2IsNotUsedDesc=No usar un 2º tipo de impuesto (Distinto del ITBIS)
     UnitPriceOfProduct=Precio unitario sin ITBIS de un producto
    -ShowVATIntaInAddress=Ocultar el identificador ITBIS en las direcciones de los documentos
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
     OptionVatMode=Opción de carga de ITBIS
     OptionVatDefaultDesc=La carga del ITBIS es: <br>-en el envío de los bienes (en la práctica se usa la fecha de la factura)<br>-sobre el pago por los servicios
     OptionVatDebitOptionDesc=La carga del ITBIS es: <br>-en el envío de los bienes (en la práctica se usa la fecha de la factura)<br>-sobre la facturación de los servicios
    -SummaryOfVatExigibilityUsedByDefault=Tiempo de exigibilidad de ITBIS por defecto según la opción eligida
    diff --git a/htdocs/langs/es_EC/admin.lang b/htdocs/langs/es_EC/admin.lang
    index 7ed9732c760..b5be72a7b68 100644
    --- a/htdocs/langs/es_EC/admin.lang
    +++ b/htdocs/langs/es_EC/admin.lang
    @@ -4,8 +4,6 @@ VersionLastInstall=Versión de instalación inicial
     VersionLastUpgrade=Actualización de la versión más reciente
     VersionUnknown=Desconocido
     VersionRecommanded=Recomendado
    -FileCheckDesc=Esta herramienta le permite comprobar la integridad de los archivos y la configuración de la aplicación, la comparación de cada archivo con las oficiales. Valor de algunas constantes de configuración pueden ser también verificados. Puede utilizar esta herramienta para detectar si algunos archivos fueron modificados por un hacker por ejemplo.
    -FileIntegrityIsOkButFilesWereAdded=La comprobación de integridad de archivos ha pasado, sin embargo, se han añadido algunos archivos nuevos.
     FileIntegritySomeFilesWereRemovedOrModified=La comprobación de integridad de archivos ha fallado. Algunos archivos fueron modificados, eliminados o añadidos.
     GlobalChecksum=Verificación global
     MakeIntegrityAnalysisFrom=Hacer análisis de la integridad de los archivos de la aplicación de
    @@ -20,19 +18,15 @@ SessionId=ID de sesión
     SessionSaveHandler=Manejador para guardar sesiones
     SessionSavePath=Localización del almacenamiento de las sesiones
     ConfirmPurgeSessions=Es lo que realmente desea purgar todas las sesiones? Esto desconectará todos los usuarios (excepto usted mismo).
    -NoSessionListWithThisHandler=Guardar controlador de sesión configurado en su PHP no permite la lista de todas las sesiones en ejecución.
    -ConfirmLockNewSessions=¿Está seguro de que desea restringir cualquier conexión Dolibarr nueva a sí mismo. Solo el usuario <b>%s</b> podrá conectarse después de eso.
     UnlockNewSessions=Quitar el bloqueo de conexión
    -Sessions=Sesión de usuarios
     WebUserGroup=Usuario/grupo del servidor web
    -NoSessionFound=Su PHP parece no permitir la lista de sesiones activas. El directorio utilizado para guardar las sesiones (<b>%s</b>) puede estar protegido (por ejemplo, por los permisos del sistema operativo o por la directiva PHP open_basedir).
     DBStoringCharset=Conjunto de caracteres de base de datos para almacenar datos
     DBSortingCharset=Conjunto de caracteres de base de datos para ordenar los datos
     ClientSortingCharset=Intercalación de clientes
     WarningModuleNotActive=Módulo <b>%s</b> debe estar habilitado
     WarningOnlyPermissionOfActivatedModules=Solamente los permisos relacionados con los módulos activados se muestran aquí. Puede activar otros módulos desde: Inicio-> Configuración-> Página Módulos.
     DolibarrSetup=Dolibarr instalar o actualizar
    -SetupArea=Area de configuración
    +SetupArea=Configurar
     UploadNewTemplate=Subir nueva(s) plantilla(s)
     FormToTestFileUploadForm=Formulario para probar la carga del archivo (según la configuración)
     IfModuleEnabled=Nota: si es efectivo sólo si el módulo <b>%s</b> está activado
    @@ -48,8 +42,6 @@ ErrorReservedTypeSystemSystemAuto=El valor 'sistema' y 'sistemamauto' esta reser
     DisableJavascript=Desactivar las funciones JavaScript y Ajax (Recomendado para navegadores de texto o personas ciegas)
     UseSearchToSelectCompanyTooltip=Además, si usted tiene un gran número de clientes (> 100 000), puede aumentar la velocidad estableciendo COMPANY_DONOTSEARCH_ANYWHERE constante en 1 en: Configuración-> Otros. La búsqueda se limitará entonces al inicio de la cadena.
     UseSearchToSelectContactTooltip=Además, si tiene un gran número de clientes (> 100 000), puede aumentar la velocidad estableciendo constante CONTACT_DONOTSEARCH_ANYWHERE en 1 en: Configuración-> Otros. La búsqueda se limitará entonces al inicio de la cadena.
    -DelaiedFullListToSelectCompany=Espere a que presione una tecla antes de cargar el contenido de la lista combinada de clientes (Esto puede aumentar el rendimiento si tiene un gran número de clientes, pero es menos conveniente)
    -DelaiedFullListToSelectContact=Espere que presione una tecla antes de cargar el contenido de la lista de contactos (Esto puede aumentar el rendimiento si tiene un gran número de contactos, pero es menos conveniente)
     NumberOfKeyToSearch=Número de caracteres para activar la búsqueda: %s
     NotAvailableWhenAjaxDisabled=No disponible cuando Ajax esta inhabilitado
     AllowToSelectProjectFromOtherCompany=En el documento de un cliente, puede elegir un proyecto vinculado a otro cliente
    @@ -58,7 +50,6 @@ UsePreviewTabs=Usar pestañas de vista previa
     ShowPreview=Mostrar vista previa
     CurrentTimeZone=Zona horaria PHP (servidor)
     MySQLTimeZone=Zona horaria MySQL (base de datos)
    -TZHasNoEffect=Las fechas son almacenadas y devueltas por el servidor de base de datos como si estuvieran guardadas como cadena enviada. La zona horaria sólo tiene efecto cuando se utiliza la función UNIX_TIMESTAMP (que no debe ser utilizada por Dolibarr, por lo que la base de datos TZ no debería tener ningún efecto, incluso si se modificó después de introducir los datos).
     Space=Espacio
     Index=Indice
     NextValue=siguiente valor
    @@ -82,7 +73,6 @@ DetailPosition=Orden por número para definir la posición del menú
     AllMenus=Todas
     NotConfigured=Módulo/aplicación no está configurado
     SetupShort=Configurar
    -OtherSetup=Otras configuraciones
     CurrentValueSeparatorThousand=separador de miles
     Destination=Destino
     IdModule=Módulo de Identificación
    @@ -94,8 +84,6 @@ OSTZ=Zona horaria del servidor
     PHPTZ=Zona horaria del servidor PHP
     DaylingSavingTime=Horario de verano
     CurrentSessionTimeOut=Tiempo de espera de la sesión actual
    -YouCanEditPHPTZ=Para establecer una zona horaria diferente PHP (no es obligatorio), se puede tratar de añadir un archivo .htaccess con una línea como esta "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Advertencia, al contrario de otras pantallas, las horas de esta página no se encuentran en su zona horaria local, sino en la zona horaria del servidor.
     MaxNbOfLinesForBoxes=Número máximo de líneas para los widgets
     PositionByDefault=Orden predeterminada
     MenusDesc=Los administradores de menús establecen el contenido de las dos barras de menú (horizontal y vertical).
    @@ -145,14 +133,9 @@ IgnoreDuplicateRecords=Ignorar los errores de registro duplicado (INSERT IGNORE)
     AutoDetectLang=Detección automática (idioma del navegador)
     FeatureDisabledInDemo=Función desactivada en demostración
     FeatureAvailableOnlyOnStable=Característica sólo está disponible en las versiones oficiales estables
    -BoxesDesc=Los widgets son componentes que muestran algunos datos que se pueden agregar para personalizar algunas páginas. Puede elegir entre mostrar el widget o no mediante la selección de la página de destino y haciendo clic en 'Activar', o haciendo clic en el cubo de basura para desactivarlo.
     OnlyActiveElementsAreShown=Solo se muestran elementos de <a href="%s">módulos habilitados</a> are shown.
    -ModulesDesc=Los módulos Dolibarr definen qué aplicación / función está habilitada en el software. Algunas aplicaciones / módulos requieren permisos que debe otorgar a los usuarios, después de activarlos. Haga clic en el botón on / off para activar un módulo / aplicación.
    -ModulesDeployDesc=Si los permisos de su sistema de archivos lo permiten, puede utilizar esta herramienta para implementar un módulo externo. El módulo estará entonces visible en la pestaña  <strong>%s</strong>.
     ModulesMarketPlaces=Buscar aplicaciones/módulos externos
     ModulesDevelopYourModule=Desarrolle su propia aplicación/módulos
    -ModulesDevelopDesc=Usted puede desarrollar o encontrar un socio para desarrollar para usted, su módulo personalizado
    -DOLISTOREdescriptionLong=En lugar de cambiar al sitio web <a href="https://www.dolistore.com">www.dolistore.com</a> para encontrar un módulo externo, puede utilizar esta herramienta incluida que hará la búsqueda en el mercado externo por usted (puede ser lento, necesita un acceso a Internet) ...
     CompatibleUpTo=Compatible con la versión 1%s
     NotCompatible=Este módulo no parece compatible con su Dolibarr %s (Min %s - Max%s).
     CompatibleAfterUpdate=Este módulo requiere una actualización de su Dolibarr %s (Min%s - Max%s).
    @@ -160,7 +143,6 @@ SeeInMarkerPlace=Ver en el mercado
     AchatTelechargement=Comprar / Descargar
     GoModuleSetupArea=Para implementar / instalar un nuevo módulo, vaya al área de configuración del módulo en <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, el mercado oficial de módulos externos ERP/CRM de Dolibarr
    -DoliPartnersDesc=Lista de las empresas que ofrecen módulos o funciones desarrolladas a medida (Nota: cualquier persona con experiencia en programación PHP puede proporcionar desarrollos a medida para un proyecto de código abierto)
     BoxesAvailable=Widgets disponibles
     BoxesActivated=Widgets activados
     ActiveOn=Activado en
    @@ -172,7 +154,6 @@ DoNotStoreClearPassword=No almacene las contraseñas en la base de datos, pero a
     MainDbPasswordFileConfEncrypted=Contraseña de base de datos cifrada en conf.php (activada recomendado)
     InstrucToEncodePass=Para que la contraseña se codifique en el archivo <b>conf.php</b>, reemplazar la línea <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Para que la contraseña se descodifique (borrar) en el archivo <b>conf.php</b>, reemplazar la línea <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protección de archivos generados en pdf (Activado NO recomendado, rompe la generación de pdf en masa)
     ProtectAndEncryptPdfFilesDesc=La protección de un documento PDF lo mantiene disponible para leer e imprimir con cualquier navegador PDF. Sin embargo, la edición y la copia ya no son posibles. Tenga en cuenta que el uso de esta característica hace que la creación de un conjunto global de PDF no funcione.
     Feature=Característica
     Developpers=Desarrolladores/colaboradores
    @@ -184,42 +165,23 @@ ReferencedPreferredPartners=Socios Preferidos
     SocialNetworks=Redes Sociales
     ForDocumentationSeeWiki=Para la documentación del usuario o del desarrollador (Doc, Preguntas Frecuentes...),<br>Eche un vistazo a la Wiki Dolibarr:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Para cualquier otra pregunta/ayuda, puede utilizar el foro Dolibarr:<br><b><a href="%s" target="_blank">%s</a></b
    -HelpCenterDesc1=Esta área le puede ayudar a obtener un servicio de ayuda de Dolibarr.
    -HelpCenterDesc2=Una parte de este servicio está disponible en <b>Inglés solamente</b>.
     CurrentMenuHandler=Controlador de menús actual
     SpaceX=Espacio X
     SpaceY=Espacio Y
     NoticePeriod=Periodo de notificación
     Emails=Correos electrónicos
     EMailsSetup=Configuración de correo electrónico
    -EMailsDesc=Esta página le permite sobrescribir los parámetros de PHP para el envío de correos electrónicos. En la mayoría de los casos en Unix OS/Linux, la configuración de PHP es correcta y estos parámetros son inútiles.
     EmailSenderProfiles=Perfiles de remitentes de correos electrónicos
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS puerto (Por defecto en php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/Host SMTPS (Por defecto en php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS puerto (No está definido en PHP en sistemas Unix)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (No está definido en PHP en sistemas Unix)
    -MAIN_MAIL_EMAIL_FROM=Dirección electróica del remitente para correos electrónicos automáticos (por defecto en php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Correo electrónico utilizado para los correos electrónicos devueltos con errores (campos 'Errores-Para' en los correos electrónicos enviados)
    -MAIN_MAIL_AUTOCOPY_TO=Enviar sistemáticamente una copia carbon oculta (CCO) de todos los correos enviados a
    -MAIN_DISABLE_ALL_MAILS=Desactivar todos los envíos de correo electrónico (con fines de prueba o demos)
     MAIN_MAIL_FORCE_SENDTO=Enviar todos los correos electrónicos a (en lugar de destinatarios reales, para fines de prueba)
    -MAIN_MAIL_SENDMODE=Método a utilizar para enviar mensajes de correo electrónico
    -MAIN_MAIL_SMTPS_ID=ID de SMTP si se requiere autenticación
    -MAIN_MAIL_SMTPS_PW=Contraseña SMTP si se necesita autenticación
    -MAIN_MAIL_EMAIL_TLS=Usar cifrado TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS=Usar cifrado TLS (STARTTLS)
    -MAIN_DISABLE_ALL_SMS=Desactivar todos los envíos de SMS (con fines de prueba o demos)
     MAIN_SMS_SENDMODE=Método a utilizar para enviar SMS
    -MAIN_MAIL_SMS_FROM=Número de teléfono del remitente predeterminado para el envío de SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Correo electrónico del remitente por defecto para envíos manuales (correo electrónico del usuario o correo electrónico de la empresa)
     UserEmail=Correo electrónico del usuario
     CompanyEmail=Correo de la empresa
     FeatureNotAvailableOnLinux=Característica no disponible en sistemas Unix. Comprobar el programa Sendmail localmente.
    -SubmitTranslation=Si la traducción para este idioma no es completo o presente errores, puede corregir esto mediante la edición de archivos en el directorio <b>langs/%s</b> y presentar su cambio a www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Si la traducción para este idioma no es completo o presente errores, puede corregir esto editando los archivos en el directorio <b>langs/%s</b> y enviar archivos modificados a dolibarr.org/forum o para los desarrolladores en github.com / Dolibarr / Dolibarr.
     ModuleSetup=Módulo de configuración
     ModulesSetup=Módulos de configuración/Aplicación
     ModuleFamilyCrm=Gestión de Relaciones con el Cliente (CRM)
    +ModuleFamilySrm=Gestión de relaciones con proveedores (GRP)
     ModuleFamilyHr=Gestión de Recursos Humanos (RRHH)
     ModuleFamilyProjects=Proyectos/trabajo colaborativo
     ModuleFamilyTechnic=Herramientas multi-módulos
    @@ -232,15 +194,10 @@ MenuAdmin=Editor de menús
     DoNotUseInProduction=No utilizar en producción
     ThisIsProcessToFollow=Esto es pasos a procesar:
     ThisIsAlternativeProcessToFollow=Esta es una configuración alternativa para procesar manualmente:
    -FindPackageFromWebSite=Encontrar un paquete que proporciona la función que desea (por ejemplo, en el sitio web oficial de %s).
     DownloadPackageFromWebSite=Descargar paquete (por ejemplo, desde el sitio web oficial de %s).
    -UnpackPackageInDolibarrRoot=Descomprimir los archivos empaquetados en el directorio de servidor dedicado a Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=Para implementar/instalar un módulo externo, descomprimir los archivos empaquetados en el directorio del servidor dedicado a los módulos: <b>%s</b>
    -SetupIsReadyForUse=La implementación del módulo está terminada. Sin embargo, debe habilitar y configurar el módulo en su aplicación, vaya a la página para configurar los módulos: <a href="%s">%s</a>.
     NotExistsDirect=El directorio raíz alternativo no está definido en un directorio existente.<br>
     InfDirAlt=Desde la versión 3, es posible definir un directorio raíz alternativo. Esto le permite almacenar, en un directorio dedicado, plug-ins y plantillas personalizadas.<br>Sólo cree un directorio en la raíz de Dolibarr (por ejemplo: personalizado).<br>
     InfDirExample=<br>Entonces declare en el fichero <strong>conf.php </strong><br>$dolibarr_main_url_root_alt='/custom'<br> $dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br> Si estas líneas se comentan con "#", para habilitarlas, basta con retirar el comentario al eliminar el carácter "#".
    -YouCanSubmitFile=Para este paso, puede enviar el archivo .zip del paquete de módulos aquí:
     CurrentVersion=Dolibarr versión actual
     CallUpdatePage=Vaya a la página que actualiza la estructura y los datos de la base de datos: %s.
     LastStableVersion=La última versión estable
    @@ -268,14 +225,10 @@ UMaskExplanation=Este parámetro le permite definir los permisos establecidos de
     SeeWikiForAllTeam=Echa un vistazo a la página wiki para ver una lista completa de todos los actores y su organización
     UseACacheDelay=Retardo para el almacenamiento en caché de la respuesta de exportación en segundos (0 o vacío para no caché)
     DisableLinkToHelpCenter=Ocultar enlace "<b>Necesita ayuda o soporte</b>" en la página de inicio de sesión
    -AddCRIfTooLong=No hay envoltura automática, por lo que si la línea está fuera de la página de los documentos porque es demasiado larga, debe agregar devoluciones de carro en la zona de texto.
    -ConfirmPurge=¿Seguro que desea ejecutar esta purga?<br>Esto eliminará definitivamente todos los archivos de datos y no hay forma de restaurarlos (ECM archivos, archivos adjuntos ...).
     MinLength=Longitud mínima
     LanguageFilesCachedIntoShmopSharedMemory=Archivos .lang cargados en la memoria compartida
    -ExamplesWithCurrentSetup=Ejemplos con la configuración actual en ejecución
     ListOfDirectories=Lista de directorios plantillas OpenDocument
     ListOfDirectoriesForModelGenODT=Lista de directorios que contienen archivos de plantillas con formato OpenDocument.<br><br> Ponga aquí la ruta completa de los directorios.<br> Agregue un transporte entre cada directorio.<br> Para añadir un directorio del módulo GED, añádalo aquí <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br> Los archivos de esos directorios deben finalizar con <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Número de archivos de plantillas ODT/ODS que se encuentran en esos directorios
     FollowingSubstitutionKeysCanBeUsed=<br>Para saber cómo crear sus plantillas de documentos ODT, antes de guardarlos en esos directorios, leer la documentación wiki:
     FirstnameNamePosition=Posición del Nombre / Apellido
     DescWeather=Las siguientes imágenes se mostrarán en el tablero cuando el número de acciones tardías alcance los siguientes valores:
    @@ -283,17 +236,13 @@ KeyForWebServicesAccess=Clave para utilizar Servicios Web (parámetro "dolibarrk
     TestSubmitForm=Formulario de prueba de entrada
     ThisForceAlsoTheme=El uso de este administrador de menús también utilizará su propio tema, sea cual sea la elección del usuario. También este administrador de menús especializado para smartphones no funciona en todos los teléfonos inteligentes. Utilice otro administrador de menús si experimenta problemas en la suya.
     ThemeDir=Directorio de Skins
    -ConnectionTimeout=Tiempo de espera de conexión
     ResponseTimeout=Tiempo de espera de respuesta
     SmsTestMessage=Mensaje de prueba desde __PHONEFROM__ a __PHONETO__
     ModuleMustBeEnabledFirst=Módulo <b>%s</b> debe estar habilitado primero si necesita esta función.
     SecurityToken=Clave para proteger las URL
    -NoSmsEngine=No hay gestor de envío de SMS disponible. El gestor de envío de SMS no está instalado con la distribución predeterminada (porque depende de un proveedor externo), pero puede encontrar algunos en %s
    -PDFDesc=Puede configurar cada opción globales relacionados con la generación de PDF
     PDFAddressForging=Reglas para forjar cuadros de direcciones
     HideAnyVATInformationOnPDF=Ocultar toda la información relacionada con Impuesto a las ventas / IVA en PDF generado
     PDFRulesForSalesTax=Reglas para el impuesto a las ventas / IVA
    -HideLocalTaxOnPDF=Ocultar tarifa de %s en la columna de impuestos de la columna de PDF
     HideDescOnPDF=Ocultar la descripción de los productos en el PDF generado
     HideRefOnPDF=Ocultar referencia de productos en PDF generado
     HideDetailsOnPDF=Ocultar líneas de productos en PDF generado detalles
    @@ -302,7 +251,6 @@ Library=Biblioteca
     UrlGenerationParameters=Parámetros para asegurar URL
     SecurityTokenIsUnique=Utilice un parámetro de SecureKey único para cada URL
     GetSecuredUrl=Obtener URL calculada
    -ButtonHideUnauthorized=Ocultar botones para usuarios no administradores para acciones no autorizadas en lugar de mostrar los botones desactivados en gris
     OldVATRates=Antigua tasa de IVA
     NewVATRates=Nueva tasa de IVA
     PriceBaseTypeToChange=Modificar los precios con el valor base de referencia definido en
    @@ -314,13 +262,11 @@ Boolean=Boolean (una casilla de verificación)
     ExtrafieldSelect =Seleccionar lista
     ExtrafieldSelectList =Seleccionear tabla
     ExtrafieldSeparator=Separador (no un campo)
    -ExtrafieldRadio=Botones de opción (en la única opción)
     ExtrafieldCheckBox=Casillas de verificación
     ExtrafieldCheckBoxFromList=Casillas de verificación de la tabla
     ExtrafieldLink=Enlace a un objeto
     ComputedFormula=Campo calculado
     ComputedFormulaDesc=Puede introducir aquí una fórmula utilizando otras propiedades de objeto o cualquier código PHP para obtener un valor calculado dinámico. Puede utilizar cualquier fórmula compatible con PHP, incluyendo el "?" Operador de condición y objeto global siguiente: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Sólo algunas propiedades de $object puede estar disponible. Si necesita propiedades no cargadas, solo busque el objeto en su fórmula como en el segundo ejemplo.<br> Utilizando un campo computado significa que no puede ingresar ningún valor de la interfaz. Además, si hay un error de sintaxis, la fórmula no puede devolver nada.<br><br> Ejemplo de fórmula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br> Ejemplo para volver a cargar el objeto<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br> Otro ejemplo de fórmula para forzar la carga del objeto y su objeto primario:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Proyecto principal no encontrado'
    -ExtrafieldParamHelpPassword=Mantener este campo vacío significa que el valor se almacenará sin encriptación (el campo debe estar oculto con estrella en la pantalla). <br>Establezca aquí valor 'automático' para usar la regla de encriptación predeterminada para guardar la contraseña en la base de datos (entonces la lectura de valor será solo hash, no hay forma de recuperar el valor original)
     ExtrafieldParamHelpselect=La lista de valores debe ser líneas con clave de formato, valor (donde la clave no puede ser '0')<br><br> por ejemplo: <br>1,valor1<br>2,valor2<br> código3,valor3<br>... <br><br>Para que la lista dependa de otra lista de atributos complementarios: <br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>Para que la lista dependa de otra lista:<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=La lista de valores debe ser líneas con la clave de formato, valor (donde la clave no puede ser '0')<br><br> por ejemplo: <br>1,valor1<br>2,valor2<br>3,valor3<br>...
     ExtrafieldParamHelpradio=La lista de valores debe ser líneas con la clave de formato, valor (donde la clave no puede ser '0')<br><br> por ejemplo: <br>1,valor1<br>2,valor2<br>3,valor3<br>...
    @@ -334,46 +280,33 @@ RefreshPhoneLink=Actualizar enlace
     LinkToTest=hacer clic en enlace generado para el usuario <strong>% s </ strong> (haga clic en el número de teléfono para probar)
     KeepEmptyToUseDefault=Dejar en blanco para usar valor predeterminado
     ValueOverwrittenByUserSetup=Advertencia, este valor puede ser sobrescrito por la configuración específica del usuario (cada usuario puede establecer su propia URL de clicktodial)
    -BarcodeInitForThirdparties=Init código de barras masivo para clientes / proveedores
     BarcodeInitForProductsOrServices=Init de código de barras masivo o restablecimiento de productos o servicios
     CurrentlyNWithoutBarCode=Actualmente, tiene <strong>%s</strong> registrado en <strong>%s</strong>%s sin código de barras definido.
     InitEmptyBarCode=init valor para el siguiente %s registro vacío
     EraseAllCurrentBarCode=Borrar todos los valores de códigos de barras actuales
     ConfirmEraseAllCurrentBarCode=¿Está seguro de que desea borrar todos los valores de códigos de barras actuales?
     AllBarcodeReset=Todos los valores de código de barras se han eliminado
    -NoBarcodeNumberingTemplateDefined=No se ha habilitado la plantilla de código de barras de numeración en la configuración del módulo de código de barras.
     ShowDetailsInPDFPageFoot=Añada más detalles al pie de los archivos PDF, como la dirección de su empresa o los nombres de los administradores (para completar los identificadores profesionales, el capital de la empresa y el número de IVA).
     NoDetails=No hay más detalles en el pie de página
     DisplayCompanyInfo=Mostrar la dirección de la empresa
     DisplayCompanyManagers=Mostrar nombres de administradores
     DisplayCompanyInfoAndManagers=Mostrar la dirección de la empresa y los nombres de los administradores
    -EnableAndSetupModuleCron=Si desea que esta factura recurrente se genere automáticamente, el módulo *%s* Debe estar habilitado y configurado correctamente. De lo contrario, la generación de facturas se debe hacer manualmente desde esta plantilla con el botón *Crear*. Tenga en cuenta que, aunque haya habilitado la generación automática, puede iniciar la generación manual de forma segura. No es posible la generación de duplicados para el mismo período.
    -ModuleCompanyCodeCustomerAquarium=%s seguido de un código de cliente externo para un código de contabilidad del cliente
    -ModuleCompanyCodeSupplierAquarium=%s seguido de un código de proveedor externo para un código de contabilidad de proveedor
     ModuleCompanyCodePanicum=Devolver un código de contabilidad vacío.
     ModuleCompanyCodeDigitaria=El código de contabilidad depende del código de un cliente/proveedor. El código está compuesto por el carácter "C" en la primera posición seguido por los primeros 5 caracteres del código de cliente/proveedor.
     Use3StepsApproval=De forma predeterminada, las órdenes de compra deben ser creadas y aprobadas por dos usuarios diferentes (un paso/usuario para crear y un paso/usuario para aprobar.) Nota: si el usuario tiene permiso para crear y aprobar, un paso/usuario será suficiente). Puede pedir con esta opción introducir una tercera aprobación de paso/usuario, si la cantidad es mayor que un valor dedicado (por lo que serán necesarios 3 pasos: 1= validación, 2= primera aprobación y 3= segunda aprobación si la cantidad es suficiente).<br> Establezca esto en blanco para una aprobación (2 pasos) es suficiente, establezca un valor muy bajo (0.1) si se requiere una segunda aprobación (3 pasos).
     UseDoubleApproval=Utilice una aprobación de 3 pasos cuando la cantidad (sin impuestos) es mayor que ...
    -WarningPHPMail=ADVERTENCIA: Es mejor configurar los correos electrónicos salientes para usar el servidor de correo electrónico de su proveedor en lugar de la configuración predeterminada. Algunos proveedores de correo electrónico (como Yahoo) no le permiten enviar un correo electrónico desde otro servidor que no sea su propio servidor. Su configuración actual utiliza el servidor de la aplicación para enviar correos electrónicos y no el servidor de su proveedor de correo electrónico, por lo que algunos destinatarios (el compatible con el restrictivo protocolo DMARC) le preguntarán a su proveedor de correo electrónico si pueden aceptar su correo electrónico y algunos proveedores de correo electrónico. (como Yahoo) puede responder "no" porque el servidor no es un servidor de ellos, por lo que es posible que no se acepten algunos de sus correos electrónicos enviados (tenga cuidado también con la cuota de envío de su proveedor de correo electrónico). <br> Si su proveedor de correo electrónico (como Yahoo) tiene esta restricción, debe cambiar la Configuración de correo electrónico para elegir el otro método "Servidor SMTP" e ingresar el servidor SMTP y las credenciales provistas por su proveedor de correo electrónico (solicite a su proveedor de correo electrónico que le envíen las credenciales SMTP para su cuenta).
    +WarningPHPMail2=Si su proveedor SMTP de correo electrónico necesita restringir el cliente de correo electrónico a algunas direcciones IP (muy raras), esta es la dirección IP del usuario de correo (MUA) para su aplicación ERP CRM: <strong>%s</strong>.
     ClickToShowDescription=Haga clic para mostrar la descripción
    -DependsOn=Este módulo necesita el módulo(s)
     RequiredBy=Este módulo es necesario por el módulo(s)
    -TheKeyIsTheNameOfHtmlField=Este es el nombre del campo HTML. Esta necesario tener conocimientos técnicos para leer el contenido de la página HTML para obtener el nombre de la clave de un campo.
    -PageUrlForDefaultValues=Debe ingresar aquí la URL relativa de la página. Si incluye parámetros en URL, los valores predeterminados serán efectivos si todos los parámetros están configurados con el mismo valor. Ejemplos:
     PageUrlForDefaultValuesCreate=<br>Para el formulario para crear un nuevo cliente/proveedor, es <strong>1%s</strong>,<br>Si queremos que el valor predeterminado sólo si URL tiene algún parámetro, podemos utilizar <strong>1%s</strong>
    -PageUrlForDefaultValuesList=<br>Para el formulario para crear un nuevo cliente/proveedor, es <strong>1%s</strong>,<br>Si queremos que el valor predeterminado sólo si URL tiene algún parámetro, podemos utilizar <strong>1%s</strong>
    -GoIntoTranslationMenuToChangeThis=Se ha encontrado una traducción para la clave con este código, por lo que para cambiar este valor, debe editarlo desde Inicio-Configuración-traducción.
     WarningSettingSortOrder=Advertencia, establecer un orden predeterminado puede resultar en un error técnico al pasar a la página de lista si el campo es un campo desconocido. Si experimenta este error, vuelva a esta página para eliminar el orden predeterminado y restaurar el comportamiento predeterminado.
     ProductDocumentTemplates=Plantillas para generar documento de producto
     FreeLegalTextOnExpenseReports=Texto legal gratuita en los informes de gastos
     WatermarkOnDraftExpenseReports=Marca de agua en informes de gastos preliminares
     AttachMainDocByDefault=Configúrelo en 1 si desea adjuntar el documento principal al correo electrónico de forma predeterminada (si corresponde)
    -Module0Name=Usuarios & Grupos
     Module0Desc=Gestión de Usuarios / Empleados y Grupos
    -Module1Name=Clientes / Proveedores
     Module1Desc=Empresas y gestión de contactos (clientes, prospectos ...)
     Module2Desc=Administración comercial
    -Module10Desc=Informes contables simples (diarios, rotación) basados en el contenido de la base de datos. No usa ninguna tabla de contabilidad.
     Module20Name=Propuestas
     Module20Desc=Gestión de propuestas comerciales
     Module22Name=E-mailings masivos
    @@ -383,6 +316,7 @@ Module25Name=Pedidos de los clientes
     Module25Desc=Administración de pedidos de clientes
     Module30Name=Facturas
     Module30Desc=Gestión de facturas y notas de crédito para clientes. Gestión de facturas para proveedores
    +Module40Desc=Proveedores y gestión de compras (órdenes de compra y facturación)
     Module42Desc=Instalaciones de registro (archivo, syslog,...). Dichos registros son para propósitos técnicos/depuración.
     Module49Desc=Administración del editor
     Module50Desc=Administración de producto
    @@ -392,12 +326,10 @@ Module52Name=Existencias
     Module52Desc=Administración de existencias (productos)
     Module53Desc=Administración de Servicios
     Module54Name=Contratos / Suscripciones
    -Module54Desc=Administración de contratos (servicios o suscripciones recurrentes)
     Module55Desc=Administración de código de barras
     Module56Name=Telefonos
     Module56Desc=Integración de telefonos
     Module57Name=Ordenes de pago bancarias directas
    -Module57Desc=Administración de órdenes de pago de débito directo. Incluye generación de archivo de la SEPA para los países europeos.
     Module58Desc=Integración de un sistema ClickToDial (Asterisk, ...)
     Module59Desc=Añadir función para generar cuenta Bookmark4u desde una cuenta de Dolibarr
     Module70Desc=Administración de la intervención
    @@ -405,78 +337,56 @@ Module75Name=Gastos y notas de viaje
     Module75Desc=Administración de gasto y notas de viaje
     Module80Name=Envíos
     Module80Desc=Administración de envíos y pedidos de entrega
    -Module85Name=Bancos y efectivo
     Module85Desc=Gestión de cuentas bancarias o en efectivo
    -Module100Name=Sitio externo
    -Module100Desc=Este módulo incluye un sitio web externo o página en los menús de Dolibarr y verla en un marco de Dolibarr
     Module105Desc=Interfaz de Mailman o SPIP para el módulo miembro
    -Module200Desc=Sincronización de directorios LDAP
     Module210Desc=Integración PostNuke
     Module240Name=Exportar datos
    -Module240Desc=Herramienta para exportar los datos de Dolibarr (con asistentes)
     Module250Name=Importar datos
    -Module250Desc=Herramienta para importar datos en Dolibarr (con asistentes)
     Module310Desc=Administración de miembros de la Fundación
     Module320Name=RSS
     Module320Desc=Añadir RSS dentro de las páginas de Dolibarr
    -Module330Desc=Administración de marcadores
    -Module400Name=Proyectos / Oportunidades / Prospectos
    -Module400Desc=198/5000\nGestión de proyectos, oportunidades/clientes potenciales y/o tareas. También puede asignar cualquier elemento (factura, orden, propuesta, intervención, ...) a un proyecto y obtener una vista transversal desde la vista del proyecto.
     Module410Name=Calendario web
     Module410Desc=Integración calendario web
    +Module500Desc=Gestión de otros gastos (impuestos a la venta, impuestos sociales o fiscales, dividendos, ...)
     Module510Name=Pago de salarios de empleados
    -Module510Desc=Registre y siga el pago de los salarios de empleado
     Module520Name=Préstamo
     Module520Desc=Gestión de préstamos
     Module600Name=Notificaciones sobre eventos empresariales
    -Module600Desc=Enviar notificaciones por correo electrónico (activadas por algunos eventos empresariales) a los usuarios (configuración definida en cada usuario), a contactos de cliente/proveedor (configuración definida en cada cliente/proveedor) o a correos electrónicos fijos
    -Module600Long=Tenga en cuenta que este módulo está dedicado a enviar mensajes de correo electrónico en tiempo real cuando se produce un evento de negocio dedicado. Si está buscando una función para enviar recordatorios por correo electrónico de los eventos de su agenda, vaya a la configuración del módulo Agenda.
     Module700Desc=Administración de donaciones
     Module770Name=Reporte de gastos
    -Module770Desc=Administración y reposición de informes de gastos (transporte, comida, ...)
     Module1120Name=Propuesta comercial del vendedor
    +Module1120Desc=Solicitar propuesta comercial del vendedor y precios
     Module1200Desc=Integración Mantis
     Module1520Name=Generación de documentos
     Module1780Name=Etiquetas / Categorías
    -Module1780Desc=Crear etiquetas/categoría (productos, clientes, proveedores, contactos o miembros)
    -Module2000Desc=Permitir editar algún área de texto usando un editor avanzado (Basado en CKEditor)
     Module2200Desc=Habilitar el uso de expresiones matemáticas para los precios
     Module2300Name=Trabajos programados
     Module2300Desc=Gestión de trabajos programados (alias cron o chrono table)
     Module2400Name=Eventos / Agenda
    -Module2400Desc=Siga los eventos realizados y próximos. Deje que la aplicación registre los eventos automáticos con fines de seguimiento o registre eventos manuales o citas. Este es el módulo principal para una buena gestión de relaciones con clientes o proveedores.
     Module2500Desc=Sistema de gestión de documentos / gestión electrónica de contenidos. Organización automática de sus documentos generados o almacenados. Compártelos cuando lo necesites.
     Module2600Name=API / Servicios Web (servidor SOAP)
     Module2600Desc=Habilitar el servidor SOAP de Dolibarr que proporciona servicios API
     Module2610Name=API / Servicios Web (servidor REST)
     Module2610Desc=Habilitar el servidor REST de Dolibarr que proporciona servicios API
     Module2660Name=WebServices de llamadas (cliente SOAP)
    -Module2660Desc=Habilitar el cliente de servicios web de Dolibarr (Puede ser utilizado para enviar datos / solicitudes a servidores externos, pedidos de proveedores soportados sólo por el momento)
    -Module2700Desc=Utilice el servicio Gravatar en línea (www.gravatar.com) para mostrar la foto de los usuarios/miembros (que se encuentran con sus correos electrónicos). Necesita un acceso a Internet
     Module2900Desc=Capacidades de conversiones GeoIP Maxmind
     Module3100Desc=Agregar un botón de Skype a usuarios / cliente / proveedor / contactos / tarjetas de miembros
    -Module3200Desc=Active el registro de algunos eventos comerciales en un registro inalterable. Los eventos se archivan en tiempo real. El registro es una tabla de eventos encadenados que solo se puede leer y exportar. Este módulo puede ser obligatorio para algunos países.
     Module4000Desc=Administración de recursos humanos (administración del departamento, los contratos y los sentimientos de los empleados)
     Module5000Desc=Permite gestionar múltiples empresas
     Module6000Name=Flujo de Trabajo
    +Module6000Desc=Gestión de flujo de trabajo (creación automática de objeto y/o cambio de estado automático)
     Module10000Name=Sitios Web
     Module10000Desc=Cree sitios web públicos con un editor WYSIWYG. Simplemente configure su servidor web (Apache, Nginx, ...) para que apunte al directorio dedicado de Dolibarr para tenerlo en línea en Internet con su propio nombre de dominio.
     Module20000Name=Administración de solicitudes de permisos
    -Module20000Desc=Declare y siga las solicitudes de los empleados
     Module39000Desc=Administración de lotes o numeros de series, fechas de caducidad y venta de los productos
     Module50000Name=Paybox
    -Module50000Desc=Módulo para ofrecer una página de pago en línea que acepta pagos con tarjeta de crédito/débito a través de PayBox. Esto se puede usar para permitir que sus clientes realicen pagos gratuitos o para un pago en un objeto Dolibarr en particular (factura, orden, ...)
     Module50100Name=Puntos de venta
     Module50100Desc=Módulo punto de venta (POS).
    -Module50200Desc=Módulo para ofrecer una página de pago en línea que acepta pagos con PayPal (tarjeta de crédito o crédito de PayPal). Esto se puede usar para permitir que sus clientes realicen pagos gratuitos o para un pago en un objeto Dolibarr en particular (factura, orden, ...)
    +Module50150Name=Puntos de venta
     Module50400Name=Contabilidad (avanzado)
    -Module50400Desc=Gestión contable (entradas dobles, libros auxiliares generales y auxiliares). Exporte el libro de contabilidad en otros formatos de software de contabilidad.
    -Module54000Desc=Impresión directa (sin abrir los documentos) utilizando la interfaz Cups IPP (La impresora debe estar visible desde el servidor y CUPS debe instalarse en el servidor).
     Module55000Name=Sondeo, encuesta o votación
    -Module55000Desc=Módulo para hacer sondeos en línea, encuestas o votaciones (como Doodle, Pasadores, Rdvz, ...)
     Module59000Desc=Módulo para administración los márgenes
     Module60000Desc=Módulo para gestionar las comisiones
    -Module62000Desc=Añadir características para administrar Incoterm
     Module63000Desc=Administrar los recursos (impresoras, automóviles, habitación, ...) se puede compartir en eventos
     Permission11=Leer facturas de clientes
     Permission12=Crear / modificar facturas de clientes
    @@ -495,9 +405,6 @@ Permission28=Exportar propuestas comerciales
     Permission31=Lee productos
     Permission32=Crear / modificar productos
     Permission36=Ver / gestionar productos ocultos
    -Permission41=Leer proyectos y tareas (proyecto compartido y proyectos para los que estoy en contacto). También puede ingresar tiempo consumido, para mí o mi jerarquía, en las tareas asignadas (Hoja de Horario)
    -Permission42=Crear / modificar proyectos (proyecto compartido y proyectos para los que estoy en contacto). También puede crear tareas y asignar usuarios al proyecto y tareas
    -Permission44=Eliminar proyectos (proyecto compartido y proyectos para los que estoy en contacto)
     Permission61=Leer intervenciones
     Permission62=Crear / modificar intervenciones
     Permission71=Leer miembros
    @@ -525,15 +432,12 @@ Permission121=Leer cliente / proveedor vinculados al usuario
     Permission122=Crear / modificar cliente / proveedor vinculados al usuario
     Permission125=Eliminar cliente / proveedor vinculados al usuario
     Permission126=Exportar cliente / proveedor
    -Permission141=Leer todos los proyectos y tareas (también proyectos privados en los que no estoy en contacto)
    -Permission142=Crear / modificar todos los proyectos y tareas (también proyectos privados en los que no estoy en contacto)
     Permission144=Eliminar todos los proyectos y tareas (también proyectos privados en los que no estoy en contacto)
     Permission146=Leer proveedores
     Permission147=Leer estadísticas
     Permission151=Leer órdenes de pago por débito directo
     Permission152=Crear / modificar órdenes de pago por débito directo
     Permission153=Enviar / transmitir órdenes de pago por débito directo
    -Permission154=Créditos de grabación / rechazos de órdenes de pago por débito directo
     Permission161=Leer contratos / suscripciones
     Permission162=Crear / modificar contratos / suscripciones
     Permission163=Habilitar un servicio / suscripción de un contrato
    @@ -553,7 +457,6 @@ Permission184=Aprobar pedidos de proveedores
     Permission185=Solicitar o cancelar pedidos de proveedores
     Permission187=Cerrar pedidos de proveedores
     Permission188=Cancelar pedidos de proveedores
    -Permission194=Leer líneas de ancho de banda
     Permission203=Ordenar pedidos de conexión
     Permission204=Ordene conexiones
     Permission205=Administrar conexiones
    @@ -575,11 +478,9 @@ Permission244=Ver contenido de las categorías ocultas
     Permission251=Leer otros usuarios y grupos
     PermissionAdvanced251=Leer otros usuarios
     Permission252=Leer permisos de otros usuarios
    -Permission253=Crear / modificar otros usuarios, grupos y permisssions
     PermissionAdvanced253=Crear / modificar usuarios internos / externos y permisos
     Permission254=Crear / modificar sólo usuarios externos
     Permission255=Modificar contraseña de otro usuario
    -Permission262=Ampliar el acceso a todos los cliente/proveedor (no sólo a cliente/proveedor que el usuario es un representante de venta).<br>No es efectivo para los usuarios externos (siempre limitado a ellos mismos para las propuestas, pedidos, facturas, contratos, etc).<br>No es efectivo para proyectos (sólo reglas sobre permisos de proyecto, visibilidad y asignación).
     Permission271=Leer CA
     Permission272=Leer facturas
     Permission273=Emitir facturas
    @@ -587,7 +488,6 @@ Permission281=Leer contactos
     Permission282=Crear / modificar contactos
     Permission291=Leer tarifas
     Permission292=Establecer permisos en las tarifas
    -Permission293=Modificar las tarifas de los clientes
     Permission300=Leer códigos de barras
     Permission301=Crear / modificar códigos de barras
     Permission302=Borrar códigos de barras
    @@ -604,10 +504,6 @@ Permission401=Leer descuentos
     Permission402=Crear / modificar descuentos
     Permission403=Validar descuentos
     Permission404=Eliminar descuentos
    -Permission501=Lea contratos / salarios de los empleados
    -Permission502=Crear / modificar contratos de empleados / salarios
    -Permission511=Leer pago de salarios
    -Permission512=Crear / modificar salarios
     Permission520=Leer Préstamos
     Permission522=Crear / modificar préstamos
     Permission524=Eliminar préstamos
    @@ -652,8 +548,6 @@ Permission1237=Exportar órdenes de proveedores y sus detalles
     Permission1251=Ejecutar importaciones masivas de datos externos en la base de datos (carga de datos)
     Permission1321=Exportar facturas, atributos y pagos de clientes
     Permission1421=Exportar pedidos y atributos de clientes
    -Permission20001=Lea las solicitudes de permiso (sus hojas y la de sus subordinados)
    -Permission20002=Crea/modifica las solicitudes de permiso (las suyas y las de sus subordinados)
     Permission20003=Eliminar solicitudes de licencia / permiso
     Permission20004=Lea todas las solicitudes de permiso (incluso del usuario no subordinado)
     Permission20005=Crear/modificar solicitudes de permiso para todos (incluso para usuarios no subordinados)
    @@ -680,14 +574,12 @@ Permission59003=Leer todos los márgenes de usuario
     Permission63001=leer recursos
     Permission63002=Crear / modificar recursos
     Permission63004=Enlazar los recursos con los eventos de la agenda
    -DictionaryCompanyType=Tipos de cliente/proveedor
    -DictionaryCompanyJuridicalType=Formas legales de cliente/proveedor
     DictionaryProspectLevel=Nivel potencial de la perspectiva
     DictionaryCanton=Estado / Provincia
     DictionaryActions=Tipos de eventos de agenda
     DictionaryVAT=Tarifas de IVA o impuestos de IVA
    +DictionaryRevenueStamp=Cantidad de impuestos fiscales
     DictionaryPaymentConditions=Términos de pago
    -DictionaryTypeContact=Tipos de contacto / dirección
     DictionaryTypeOfContainer=Tipo de páginas web/contenedores
     DictionaryFormatCards=Formatos de tarjetas
     DictionaryFees=Informe de gastos: tipos de líneas de informe de gastos
    @@ -698,40 +590,25 @@ DictionarySource=Origen de las propuestas / pedidos
     DictionaryAccountancyCategory=Grupos personalizados para informes
     DictionaryAccountancysystem=Modelos para el plan de cuentas
     DictionaryAccountancyJournal=Diarios / libros de contabilidad
    -DictionaryEMailTemplates=Plantillas de correo electrónico
     DictionaryProspectStatus=Estado de la prospección
    -DictionaryHolidayTypes=Tipos de hojas
    -DictionaryOpportunityStatus=Estado de la oportunidad del proyecto
    -VATManagement=Administración del IVA
    -VATIsUsedDesc=Por defecto al crear prospectos, facturas, órdenes, etc la tasa de IVA sigue la regla estándar activa: <br>Si el vendedor no está sujeto al IVA, entonces el IVA por defecto es 0. Fin de la regla. <br>Si el (país vendedor = país comprador), entonces el IVA por defecto es igual al IVA del producto en el país vendedor. Fin de la regla. <br>Si el vendedor y el comprador están en la Comunidad Europea y los bienes son productos de transporte (automóvil, barco, avión), el IVA por defecto es 0 (el IVA debe ser pagado por el comprador a la aduana de su país y no al vendedor). Fin de la regla. <br>Si el vendedor y el comprador están en la Comunidad Europea y el comprador no es una empresa, entonces el IVA por defecto es el IVA del producto vendido. Fin de la regla. <br>Si el vendedor y el comprador están en la Comunidad Europea y el comprador es una empresa, entonces el IVA es 0 por defecto. Fin de la regla.<br>En cualquier otro caso, el impuesto por defecto es IVA = 0. Fin de la regla.
    -VATIsNotUsedDesc=Por defecto, el IVA propuesto es 0, que puede utilizarse para casos como asociaciones, particulares o pequeñas empresas.
    -VATIsUsedExampleFR=En Francia, significa empresas u organizaciones que tienen un sistema fiscal real (simplificado real o real). Un sistema en el que se declara el IVA.
    -VATIsNotUsedExampleFR=En Francia, significa las asociaciones que no están declaradas con IVA o las empresas, organizaciones o profesiones liberales que han elegido el sistema fiscal de microempresas (IVA en franquicia) y pagaron una franquicia con IVA sin ninguna declaración de IVA. Esta elección mostrará la referencia "IVA no aplicable - art-293B de CGI" en las facturas.
    +TypeOfRevenueStamp=Tipo de impuesto fiscal
     LTRate=Tarifa
     LocalTax1IsNotUsed=No utilice el segundo impuesto
    -LocalTax1IsUsedDesc=Utilizar un segundo tipo de impuesto (distinto del IVA)
    -LocalTax1IsNotUsedDesc=No utilice otro tipo de impuesto (distinto del IVA)
     LocalTax1Management=Segundo tipo de impuesto
     LocalTax2IsNotUsed=No utilice tercer impuestos
    -LocalTax2IsUsedDesc=Utilizar un tercer tipo de impuesto (distinto del IVA)
    -LocalTax2IsNotUsedDesc=No utilice otro tipo de impuesto (distintos del IVA)
     LocalTax2Management=Tercer tipo de impuesto
     LocalTax1ManagementES=Administración RE
    -LocalTax1IsUsedDescES=La tasa de RE por defecto al crear prospectos, facturas, órdenes, etc seguir la norma estándar activa:<br>Si el comprador no está sujeto a RE, RE por defecto=0. Fin de la regla.<br>Si el comprador está sujeto a RE, entonces el RE por defecto. Fin de la regla.<br>
     LocalTax1IsNotUsedDescES=Por defecto, el RE propuesto es 0. Fin de la regla.
     LocalTax1IsUsedExampleES=En España son profesionales sujetos a algunas secciones específicas del IAE español.
     LocalTax1IsNotUsedExampleES=En España son profesionales y sociedades y están sujetos a ciertas secciones del IAE español.
     LocalTax2ManagementES=Administración IRPF
    -LocalTax2IsUsedDescES=La tasa de RE por defecto al crear prospectos, facturas, órdenes, etc., seguir la norma estándar activa:<br>Si el vendedor no está sujeto a IRPF, entonces IRPF por defecto=0. Fin de la regla.<br>Si el vendedor está sujeto al IRPF entonces el IRPF por defecto. Fin de la regla.<br>
     LocalTax2IsNotUsedDescES=Por defecto, el IRPF propuesto es 0. Fin de la regla.
     LocalTax2IsUsedExampleES=En España, freelancers y profesionales independientes que prestan servicios y empresas que han elegido el sistema tributario de módulos.
    -LocalTax2IsNotUsedExampleES=En España son negocios no sujetos al sistema tributario de módulos.
     CalcLocaltax=Informes sobre impuestos locales
     CalcLocaltax1Desc=Los informes de impuestos locales se calculan con la diferencia entre las compras de impuestos locales y las compras de impuestos locales
     CalcLocaltax2Desc=Los informes de Impuestos locales son el total de compras de impuestos locales
     LabelUsedByDefault=Etiqueta que se utiliza por defecto si no se encuentra traducción para el código
     LabelOnDocuments=Etiqueta en los documentos
    -NbOfDays=Nb de días
     AtEndOfMonth=Al final del mes
     CurrentNext=Actual / Siguiente
     Offset=Compensar
    @@ -744,7 +621,6 @@ DataRootServer=Directorio de archivos de datos
     PhpWebLink=Enlace Web-Php
     DatabaseServer=Host de base de datos
     DatabaseUser=Usuario de la base de datos
    -NbOfRecord=Nb de registros
     DriverType=Tipo de controlador
     SummarySystem=Resumen de información del sistema
     SummaryConst=Lista de todos los parámetros de configuración de Dolibarr
    @@ -754,13 +630,11 @@ Skin=Tema
     DefaultSkin=Tema por defecto
     MaxSizeList=Longitud máxima de la lista
     DefaultMaxSizeList=Longitud máxima predeterminada para las listas
    -DefaultMaxSizeShortList=Longitud máxima predeterminada para listas cortas (es decir, en la tarjeta del cliente)
     MessageLogin=Mensaje de la página de inicio de sesión
     LoginPage=Página de inicio de sesión
     PermanentLeftSearchForm=Formulario de búsqueda permanente en el menú de la izquierda
     DefaultLanguage=Idioma predeterminado a utilizar (código de idioma)
     EnableMultilangInterface=Habilitar interfaz multilingüe
    -CompanyIds=Identidades de empresa/organización
     CompanyName=Nombre
     CompanyZip=Código Postal
     CompanyTown=Ciudad
    @@ -768,26 +642,6 @@ CompanyCurrency=Moneda principal
     DoNotSuggestPaymentMode=No sugiera
     OwnerOfBankAccount=Dueño de una cuenta bancaria %s
     BankModuleNotActive=Módulo cuentas bancarias no habilitado
    -DelaysOfToleranceBeforeWarning=Tolerancia de retrasos antes de la advertencia
    -DelaysOfToleranceDesc=Esta pantalla le permite definir los retrasos tolerados antes de que se muestre una alerta en la pantalla con picto %s para cada elemento tardío.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolerancia de demora (en días) antes de la alerta sobre los eventos planificados (eventos de la agenda) aún no terminados
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolerancia de retardo (en días) antes de la alerta en el proyecto no cerrado en el tiempo
    -Delays_MAIN_DELAY_TASKS_TODO=Tolerancia de retardo (en días) antes de la alerta sobre las tareas planificadas (tareas del proyecto) aún no finalizadas
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Tolerancia de retardo (en días) antes de la alerta en pedidos no procesados todavía
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Tolerancia de retardo (en días) antes de la alerta sobre las propuestas para cerrar
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Tolerancia de retardo (en días) antes de la alerta sobre propuestas no facturadas
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Retardo de tolerancia (en días) antes de la alerta de servicios para activar
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Retardo de tolerancia (en días) antes de la alerta en servicios expirados
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Retardo de tolerancia (en días) antes de la alerta en facturas de proveedores no pagadas
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Retardo de tolerancia (en días) antes de la alerta en facturas de clientes no pagadas
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Retardo de tolerancia (en días) antes de la alerta de reconciliación bancaria pendiente
    -Delays_MAIN_DELAY_MEMBERS=Retardo de tolerancia (en días) antes de la alerta de cuota de membresía retrasada
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Demora de la tolerancia (en días) antes de la alerta para cheques de depósito para hacer
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Retardo de tolerancia (en días) antes de la alerta para que los informes de gastos aprueben
    -SetupDescription1=El área de configuración es para los parámetros de configuración inicial antes de comenzar a utilizar Dolibarr.
    -SetupDescription3=Configuraciones en el menú <a href="%s">%s -> %s</a>. Este paso es necesario porque define los datos utilizados en las pantallas de Dolibarr para personalizar el comportamiento predeterminado del software (por ejemplo, para las características relacionadas con el país).
    -SetupDescription4=Configuraciones en el menú <a href="%s">%s -> %s</a>. Este paso es necesario porque Dolibarr ERP/CRM es una colección de varios módulos/aplicaciones, todos más o menos independientes. Las nuevas funciones se agregan a los menús para cada módulo que active.
    -SetupDescription5=Otras entradas de menú controlan los parámetros opcionales.
     LogEvents=Eventos de auditoría de seguridad
     InfoBrowser=Acerca del navegador
     InfoOS=Acerca del OS
    @@ -798,15 +652,12 @@ LogEventDesc=Puede activar aquí el registro de eventos de seguridad de Dolibarr
     AreaForAdminOnly=Los parámetros de configuración sólo pueden ser establecidos por <b>usuarios de administrador</b>.
     SystemInfoDesc=La información del sistema es información técnica diversa que se obtiene en modo de sólo lectura y visible sólo para los administradores.
     SystemAreaForAdminOnly=Esta área está disponible sólo para usuarios de administrador. Ninguno de los permisos de Dolibarr puede reducir este límite.
    -AccountantDesc=Edite en esta página toda la información conocida sobre su contador
     AccountantFileNumber=Número de expediente
     DisplayDesc=Puede elegir cada parámetro relacionado con el aspecto de Dolibarr aquí
     AvailableModules=Aplicaciones/módulos disponibles
     ToActivateModule=Para activar los módulos, vaya al área de configuración (Inicio-> Configuración-> Módulos).
     SessionTimeOut=Tiempo de espera para la sesión
    -SessionExplanation=Este número garantiza que la sesión nunca expirará antes de este retraso, si el limpiador de sesiones se realiza mediante el limpiador interno de sesión de PHP (y nada más). El limpiador interno de sesión de PHP no garantiza que la sesión caduque justo después de este retraso. Expirará, después de este retraso, y cuando se ejecute el limpiador de sesión, por lo que cada acceso <b>%s/%s</b>, Pero sólo durante el acceso realizado por otras sesiones.<br>Nota: en algunos servidores con un mecanismo de limpieza de sesión externo (cron en debian, ubuntu ...), Las sesiones se pueden destruir después de un período definido por el valor predeterminado <strong>session.gc_maxlifetime</strong>, sin importar el valor introducido aquí.
     TriggersAvailable=Desencadenantes disponibles
    -TriggersDesc=Los desencadenantes son archivos que modifican el comportamiento del flujo de trabajo de Dolibarr una vez copiado en el directorio <b>htdocs/core/triggers</b>. Realizan nuevas acciones, activadas en eventos Dolibarr (creación de nuevas empresas, validación de facturas, ...).
     TriggerDisabledByName=Los desencadenantes de este archivo se deshabilitan con el sufijo <b>-NORUN</b> en su nombre.
     TriggerDisabledAsModuleDisabled=Los desencadenadores de este archivo están deshabilitados, ya que el módulo <b>%s</b> está deshabilitado.
     TriggerAlwaysActive=Los desencadenadores de este archivo están siempre activos, independientemente de los módulos Dolibarr activados.
    @@ -816,7 +667,6 @@ DictionaryDesc=Insertar todos los datos de referencia. Puede agregar sus valores
     ConstDesc=Esta página le permite editar todos los demás parámetros no disponibles en las páginas anteriores. Estos son en su mayoría parámetros reservados para desarrolladores o solución avanzada de problemas. Para obtener una lista de opciones <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options"title=" Sitio Externo - se abre en una nueva ventana " target="_blank">marque aquí</a>.
     MiscellaneousDesc=Aquí se definen todos los demás parámetros relacionados con la seguridad.
     LimitsSetup=Límites / Precisión configuración
    -LimitsDesc=Usted puede definir los límites, las precisiones y las optimizaciones usadas por Dolibarr aquí
     MAIN_MAX_DECIMALS_UNIT=Máximo de decimales para precios unitarios
     MAIN_MAX_DECIMALS_TOT=Máximo de decimales para precios totales
     MAIN_MAX_DECIMALS_SHOWN=Máximo de decimales para los precios mostrados en la pantalla (Add <b>...</b> después de este número si desea ver <b>...</b> cuando el número se trunca cuando se muestra en la pantalla)
    @@ -825,15 +675,11 @@ UnitPriceOfProduct=Precio unitario neto de un producto
     TotalPriceAfterRounding=Precio total (IVA neto) después del redondeo
     ParameterActiveForNextInputOnly=Parámetro efectivo sólo para la siguiente entrada
     NoEventOrNoAuditSetup=Todavía no se ha registrado ningún evento de seguridad. Esto puede ser normal si la auditoría no se ha habilitado en la página "configuración - seguridad - auditoría".
    -NoEventFoundWithCriteria=No se ha encontrado ningún evento de seguridad para dichos criterios de búsqueda.
     SeeLocalSendMailSetup=Ver configuración de sendmail local
     BackupDesc=Para hacer una copia de seguridad completa de Dolibarr, usted debe:
     BackupDesc2=Guardar el contenido del directorio de documentos (<b>% s </ b>) que contiene todos los archivos subidos y generados (por lo que incluye todos los archivos de volcado generados en el paso 1).
    -BackupDesc3=Guardar el contenido de su base de datos (<b>%s</b>) en un archivo de volcado. Para ello, puede utilizar el siguiente asistente.
     BackupDescX=El directorio archivado debe ser almacenado en un lugar seguro.
     BackupDescY=El archivo de volcado generado se debe almacenar en un lugar seguro.
    -BackupPHPWarning=No se puede garantizar la copia de seguridad con este método. Prefiero uno anterior
    -RestoreDesc2=Restaurar el archivo (archivo zip por ejemplo) del directorio de documentos para extraer el árbol de archivos en el directorio de documentos de una nueva instalación de Dolibarr o en el directorio de documentos actual (<b>%s</b>).
     RestoreDesc3=Restaure los datos, desde un archivo de volcado de copia de seguridad, en la base de datos de la nueva instalación de Dolibarr o en la base de datos de esta instalación actual (<b>%s</b>). Advertencia, una vez finalizada la restauración, debe utilizar un nombre de usuario / contraseña, que existía cuando se realizó la copia de seguridad, para conectarse de nuevo. Para restaurar una base de datos de copia de seguridad en esta instalación actual, puede seguir este asistente.
     RestoreMySQL=Importación de MySQL
     ForcedToByAModule=Esta regla se ve forzada a <b>%s</b> por un módulo activado
    @@ -843,26 +689,20 @@ RunningUpdateProcessMayBeRequired=La ejecución del proceso de actualización es
     YouMustRunCommandFromCommandLineAfterLoginToUser=Debe ejecutar este comando desde la línea de comandos después de iniciar sesión en un shell con el usuario <b>%s</b> o debe agregar la opción -W al final de la línea de comandos para proporcionar la contraseña <b>%s</b>.
     YourPHPDoesNotHaveSSLSupport=funciones SSL no disponibles en su PHP
     SimpleNumRefModelDesc=Devuelve el número de referencia con el formato %syymm-nnnn donde yy es año, mm es mes y nnnn es una secuencia sin agujero y sin reiniciar
    -ShowProfIdInAddress=Mostrar identificación profesional con direcciones en documentos
    -ShowVATIntaInAddress=Ocultar IVA Intra num con direcciones en documentos
    -MAIN_DISABLE_METEO=Desactivar vista meteo
     MeteoPercentageMod=Modo porcentual
     MeteoPercentageModEnabled=Modo de porcentaje habilitado
     MeteoUseMod=Haga clic para usar%s
     TestLoginToAPI=Prueba de acceso a la API
    -ProxyDesc=Algunas características de Dolibarr necesitan tener acceso a Internet para trabajar. Defina aquí los parámetros para esto. Si el servidor de Dolibarr está detrás de un servidor proxy, dichos parámetros le indicarán a Dolibarr cómo acceder a Internet a través de él.
     MAIN_PROXY_USE=Utilizar un servidor proxy (de lo contrario acceso directo a Internet)
     MAIN_PROXY_HOST=Nombre / Dirección del servidor proxy
     MAIN_PROXY_USER=Inicie sesión para utilizar el servidor proxy
     MAIN_PROXY_PASS=Contraseña para utilizar el servidor proxy
    -DefineHereComplementaryAttributes=Defina aquí todos los atributos, que ya no están disponibles de forma predeterminada y que desea que sean compatible con %s.
     ExtraFields=Atributos complementarios
     ExtraFieldsLines=Atributos complementarios (líneas)
     ExtraFieldsLinesRec=Atributos complementarios (plantillas de líneas de facturas)
     ExtraFieldsSupplierOrdersLines=Atributos complementarios (líneas de pedido)
     ExtraFieldsSupplierInvoicesLines=Atributos complementarios (líneas de factura)
     ExtraFieldsThirdParties=Atributos complementarios (cliente/proveedor)
    -ExtraFieldsContacts=Atributos complementarios (contacto/dirección)
     ExtraFieldsMember=Atributos complementarios (miembro)
     ExtraFieldsMemberType=Atributos complementarios (tipo de miembro)
     ExtraFieldsCustomerInvoices=Atributos complementarios (facturas)
    @@ -875,40 +715,26 @@ ExtraFieldHasWrongValue=Atributo %s tiene un valor incorrecto.
     AlphaNumOnlyLowerCharsAndNoSpace=Sólo caracteres alfanuméricos y minúsculas sin espacio
     SendmailOptionNotComplete=Advertencia, en algunos sistemas Linux, para enviar correo electrónico desde su correo electrónico, la configuración de ejecución de sendmail debe incluir la opción -ba (parámetro mail.force_extra_parameters en su archivo php.ini). Si algunos destinatarios nunca reciben correos electrónicos, intente editar este parámetro PHP con mail.force_extra_parameters = -ba).
     PathToDocuments=Ruta de acceso a los documentos
    -SendmailOptionMayHurtBuggedMTA=Función para enviar correos usando el método "PHP mail direct" generará un mensaje de correo que puede no ser analizado correctamente por algunos servidores de correo de recepción. El resultado es que algunos correos no pueden ser leídos por personas alojadas en esas plataformas. Es el caso de algunos proveedores de Internet (por ejemplo: Orange en Francia). Esto no es un problema en Dolibarr ni en PHP sino en el servidor de correo. Sin embargo, puede agregar la opción MAIN_FIX_FOR_BUGGED_MTA a 1 en (configuración – otro) para modificar Dolibarr y evitar esto. Sin embargo, puede experimentar problemas con otros servidores que respetan estrictamente el estándar SMTP. La otra solución (recomendada) es utilizar el método "SMTP socket library" que no tiene inconvenientes.
     TranslationSetup=Configuración de la traducción
     TranslationKeySearch=Buscar una clave o cadena de traducción
     TranslationOverwriteKey=Sobrescribir una cadena de traducción
     TranslationDesc=Cómo configurar el idioma de la aplicación: <br> * Systemwide: menú <strong>Inicio - Configuración - Pantalla</strong><br> * Por usuario: utilice la <strong>pestaña de configuración de visualización</strong>del usuario en la tarjeta de usuario (haga clic en username en la parte superior de la pantalla).
     TranslationOverwriteDesc=También puede reemplazar cadenas de llenado de la siguiente tabla. Cambiar la lengua del menú desplegable "% s", insertar la cadena de clave traducción a "% s" y su nueva traducción a "% s"
    -TranslationOverwriteDesc2=Puede utilizar la otra pestaña para ayudarle a saber la clave de traducción que desea utilizar
     TranslationString=Cadena de traducción
     CurrentTranslationString=Cadena de traducción actual
     WarningAtLeastKeyOrTranslationRequired=Se requiere un criterio de búsqueda al menos para la clave o cadena de traducción
     NewTranslationStringToShow=Nueva cadena de traducción para mostrar
     OriginalValueWas=La traducción original se sobrescribe. El valor original fue: <br><br>%s
    -TransKeyWithoutOriginalValue=Forzó una nueva traducción para la clave de traducción '<strong>% s </ strong>' que no existe en ningún archivo de idioma
     TotalNumberOfActivatedModules=Aplicación activada / módulos: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Debe activar al menos 1 módulo
    -ClassNotFoundIntoPathWarning=Clase %s no encontrada en el path de PHP
     YesInSummer=Si en verano
    -OnlyFollowingModulesAreOpenedToExternalUsers=Tenga en cuenta que sólo los siguientes módulos se abren a usuarios externos (lo que es permiso de dichos usuarios) y sólo si se concedieron permisos:
     SuhosinSessionEncrypt=Almacenamiento de sesión cifrado por Suhosin
     ConditionIsCurrently=Condición actual %s
    -YouUseBestDriver=Utiliza el controlador %s que es el mejor controlador disponible actualmente.
    -YouDoNotUseBestDriver=Se utiliza la unidad %s, pero se recomienda el controlador %s.
    -NbOfProductIsLowerThanNoPb=Sólo tiene %s productos / servicios en la base de datos. Esto no requiere ninguna optimización en particular.
     SearchOptim=Optimización de la búsqueda
    -YouHaveXProductUseSearchOptim=Tienes %s producto en la base de datos. Debe agregar la constante PRODUCT_DONOTSEARCH_ANYWHERE a 1 en Inicio-Configuración-Otros, se limita la búsqueda al principio de las cadenas haciendo posible que la base de datos utilice el índice y debe obtener una respuesta inmediata.
    -BrowserIsOK=Está utilizando el navegador web %s. Este navegador está bien para la seguridad y el rendimiento.
    -BrowserIsKO=Está utilizando el navegador web %s. Este navegador es conocido por ser una mala elección para la seguridad, el rendimiento y la fiabilidad. Recomendamos que utilices Firefox, Chrome, Opera o Safari.
     XCacheInstalled=XCache está cargado.
    -AddRefInList=Pantalla de cliente / ref proveedor en la lista (lista o cuadro combinado seleccionar) y la mayoría de hipervínculo. Los terceros se aparece con el nombre "CC12345 - SC45678 - La gran coorp empresa", en lugar de "La gran coorp empresa".
    -AskForPreferredShippingMethod=Pedir Método de envio preferido para cliente/proveedor.
     FieldEdition=Edición del campo% s
     FillThisOnlyIfRequired=Ejemplo: +2 (llenar sólo si se experimentan problemas de compensación de zona horaria)
     PasswordGenerationStandard=Devuelve una contraseña generada de acuerdo con el algoritmo interno de Dolibarr: 8 caracteres que contengan números y caracteres en minúsculas, compartidos.
    -PasswordGenerationNone=No sugiera ninguna contraseña generada. La contraseña debe escribirse manualmente.
     PasswordGenerationPerso=Devuelva una contraseña de acuerdo con su configuración personal definida previamente.
     SetupPerso=Según su configuración
     PasswordPatternDesc=Descripción del patrón de contraseña
    @@ -918,17 +744,11 @@ UsersSetup=Configuración de módulos de usuario
     UserMailRequired=Se requiere correo electrónico para crear un nuevo usuario
     HRMSetup=Configuración del módulo de RRHH (Recursos Humanos)
     CompanySetup=Configuración del módulo de empresas
    -CompanyCodeChecker=Módulo para la generación y verificación de código de terceros (cliente o proveedor)
    -AccountCodeManager=Módulo para la generación de códigos de contabilidad (cliente o proveedor)
     NotificationsDesc=La función de notificaciones de EMails le permite enviar en forma silenciosa el correo automático, para algunos eventos de Dolibarr. Los destinos de las notificaciones se pueden definir:
     NotificationsDescUser=* Por usuarios, un usuario a la vez.
     NotificationsDescGlobal=* O estableciendo mensajes de destino globales en la página de configuración del módulo.
    -ModelModules=Plantillas de documentos
    -DocumentModelOdt=Generar documentos desde plantillas OpenDocuments (archivos .ODT o .ODS para OpenOffice, KOffice, TextEdit, ...)
     WatermarkOnDraft=Marca de agua en el documento preliminar
     JSOnPaimentBill=Activar función para llenar automáticamente las líneas de pago en el formulario de pago
    -CompanyIdProfChecker=Reglas de identificación profesional
    -MustBeMandatory=¿Obligatorio crear cliente/proveedor?
     MustBeInvoiceMandatory=¿Es obligatorio validar facturas?
     WebDavServer=URL raíz del %s servidor: %s
     WebCalUrlForVCalExport=Un enlace de exportación al formato <b>%s</b> está disponible en el siguiente enlace: %s
    @@ -1029,11 +849,8 @@ LDAPTestSynchroMemberType=Prueba de tipo de miembro de sincronización
     LDAPTestSearch=Prueba de una búsqueda LDAP
     LDAPSynchroOK=Prueba de sincronización satisfactoria
     LDAPSynchroKO=Prueba de sincronización fallida
    -LDAPSynchroKOMayBePermissions=Error en la prueba de sincronización. Compruebe que la conexión con el servidor está configurada correctamente y permite actualizaciones LDAP
     LDAPTCPConnectOK=TCP se conecta al servidor LDAP con éxito (Servidor =%s, Puerto =%s)
     LDAPTCPConnectKO=Error de conexión TCP al servidor LDAP (Servidor =%s, Puerto =%s)
    -LDAPBindOK=Conectar / Autenticar al servidor LDAP con éxito (Servidor =%s, Puerto =%s, Admin =%s, Contraseña =%s)
    -LDAPBindKO=Error de conexión / autenticación al servidor LDAP (Servidor =%s, Puerto =%s, Admin =%s, Contraseña =%s)
     LDAPSetupForVersion3=Servidor LDAP configurado para la versión 3
     LDAPSetupForVersion2=Servidor LDAP configurado para la versión 2
     LDAPDolibarrMapping=Mapeo Dolibarr
    @@ -1080,35 +897,26 @@ LDAPDescMembersTypes=Esta página le permite definir el nombre de los atributos
     LDAPDescValues=Los valores de ejemplo están diseñados para <b>OpenLDAP</b> con los siguientes esquemas cargados: <b>core.schema, cosine.schema, inetorgperson.schema</b>). Si usa los valores thoose y OpenLDAP, modifique su archivo de configuración LDAP <b>slapd.conf</b> para que todos los esquemas se carguen.
     ForANonAnonymousAccess=Para un acceso autenticado (por ejemplo, para un acceso de escritura)
     PerfDolibarr=Configuración del rendimiento / optimización del informe
    -YouMayFindPerfAdviceHere=Encontrará en esta página algunas marcas o consejos relacionados con el rendimiento.
    -NotInstalled=No está instalado, por lo que su servidor no es lento por esto.
     ApplicativeCache=Caché aplicable
     MemcachedNotAvailable=No se encontró caché de aplicaciones. Puede mejorar el rendimiento mediante la instalación de un servidor de caché Memcached y un módulo capaz de utilizar este servidor de caché.<br>Más información aquí <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Tenga en cuenta que una gran cantidad de proveedor de alojamiento web no proporciona este servidor de caché.
     MemcachedModuleAvailableButNotSetup=Módulo memcached para caché de aplicaciones encontrado, pero la configuración del módulo no está completa.
     MemcachedAvailableAndSetup=El módulo memcached dedicado a utilizar el servidor memcached está habilitado.
     OPCodeCache=Caché OPCode
    -NoOPCodeCacheFound=No se encontró ninguna caché OPCode. Puede ser que utilice otro caché OPCode XCache o eAccelerator (bueno), puede ser que no tiene caché OPCode (muy malo).
     HTTPCacheStaticResources=Caché HTTP para recursos estáticos (css, img, javascript)
     FilesOfTypeCached=Los archivos del tipo %s son almacenados en caché por el servidor HTTP
     FilesOfTypeNotCached=Los archivos del tipo %s no se almacenan en caché por el servidor HTTP
     FilesOfTypeCompressed=Los archivos del tipo %s están comprimidos por el servidor HTTP
     FilesOfTypeNotCompressed=Los archivos del tipo %s no están comprimidos por el servidor HTTP
     CacheByServer=Caché por servidor
    -CacheByServerDesc=Por ejemplo, utilizando la directiva Apache "ExpiresByType image / gif A2592000"
     CacheByClient=Caché por navegador
     TestNotPossibleWithCurrentBrowsers=Tal detección automática no es posible con los navegadores actuales
    -DefaultValuesDesc=Puede definir / forzar aquí el valor predeterminado que desea obtener cuando cree un nuevo registro y/o defina filtros o ordenes de clasificación cuando su registro de lista.
     DefaultSearchFilters=Filtros de búsqueda predeterminados
     DefaultSortOrder=Ordenes de clasificación por defecto
     ProductSetup=Configuración del módulo de productos
     ServiceSetup=Configuración del módulo de servicios
     ProductServiceSetup=Configuración de módulos de productos y servicios
     NumberOfProductShowInSelect=Número máximo de productos en listas de selección combinadas (0=sin límite)
    -ViewProductDescInFormAbility=Visualización de las descripciones de los productos en los formularios (de lo contrario como información emergente)
     MergePropalProductCard=Activar en la ficha Archivos adjuntos de producto / servicio una opción para fusionar el documento PDF del producto con la propuesta PDF azur si el producto / servicio está en la propuesta
    -ViewProductDescInThirdpartyLanguageAbility=Visualización de descripciones de productos en el idioma de cliente / proveedor
    -UseSearchToSelectProductTooltip=Además, si tiene un gran número de productos (> 100 000), puede aumentar la velocidad estableciendo la constante PRODUCT_DONOTSEARCH_ANYWHERE en 1 en Configuración-> Otros. La búsqueda se limitará entonces al inicio de la cadena.
    -UseSearchToSelectProduct=Espere a que presione una tecla antes de cargar el contenido de la lista de combo del producto (Esto puede aumentar el rendimiento si tiene un gran número de productos, pero es menos conveniente)
     SetDefaultBarcodeTypeProducts=Tipo de código de barras predeterminado para utilizar en los productos
     SetDefaultBarcodeTypeThirdParties=Tipo de código de barras predeterminado que se utiliza para cliente / proveedor
     UseUnits=Definir una unidad de medida para Cantidad durante la edición de líneas de pedido, propuesta o factura
    @@ -1158,7 +966,6 @@ SendingsSetup=Configuración del módulo de envío
     SendingsReceiptModel=Modelo de envío de recibos
     SendingsNumberingModules=Módulos de numeración de envíos
     SendingsAbility=Soporte de hojas de envío para entregas de clientes
    -NoNeedForDeliveryReceipts=En la mayoría de los casos, las hojas de envío se utilizan tanto como hojas para entregas del cliente (lista de productos para enviar) y hojas que se reciben y firman por el cliente. Así que los recibos de entregas de productos son una característica duplicada y rara vez se activan.
     DeliveryOrderNumberingModules=Módulo de numeración de recibos de entregas de productos
     DeliveryOrderModel=Modelo de recibos de entregas de productos
     DeliveriesOrderAbility=Soporte de productos entregados recibos
    @@ -1166,16 +973,11 @@ FreeLegalTextOnDeliveryReceipts=Texto libre en los recibos de entrega
     ActivateFCKeditor=Activar editor avanzado para:
     FCKeditorForCompany=WYSIWIG creación / edición de elementos descripción y nota (excepto productos / servicios)
     FCKeditorForProduct=WYSIWIG creación / edición de productos / servicios descripción y nota
    -FCKeditorForProductDetails=WYSIWIG creación / edición de líneas de detalles de productos para todas las entidades (propuestas, pedidos, facturas, etc ...). <Font class="warning">Advertencia: No es recomendable utilizar esta opción para este caso, ya que puede crear problemas con caracteres especiales y formateo de páginas al crear archivos PDF.</Font>
     FCKeditorForMailing= WYSIWIG creación / edición para eMailings masivos (Herramientas->eMailing)
     FCKeditorForUserSignature=WYSIWIG creación / edición de firma de usuario
     FCKeditorForMail=WYSIWIG Creación / edición para todo el correo (excepto Herramientas->eMailing)
    -OSCommerceErrorConnectOkButWrongDatabase=La conexión tuvo éxito pero la base de datos no parece ser una base de datos OSCommerce (clave %s no encontrada en la tabla %s).
    -OSCommerceTestOk=Conexión al servidor '%s' en la base de datos '%s' con el usuario '%s' exitoso.
    -OSCommerceTestKo1=Conexión al servidor '%s' tuvo éxito, pero no se pudo acceder a la base de datos '%s'.
     OSCommerceTestKo2=Conexión al servidor '%s' con el usuario '%s' falló.
     StockSetup=Configuración del módulo de stock/inventario
    -IfYouUsePointOfSaleCheckModule=Si utiliza un módulo de punto de venta (módulo POS proporcionado por defecto u otro módulo externo), esta configuración puede ser ignorada por su módulo de punto de venta. La mayoría de los módulos de punto de venta están diseñados para crear inmediatamente una factura y disminuir el stock por defecto, cualesquiera sean las opciones aquí. Por lo tanto, si necesita o no tener una disminución de existencias al registrar una venta desde su punto de venta, compruebe también que el módulo de POS este configurado.
     NotTopTreeMenuPersonalized=Menús personalizados no vinculados a una entrada de menú superior
     Menu=Selección del menú
     MenuHandler=Manejador de menús
    @@ -1190,7 +992,6 @@ DetailEnabled=Condición para mostrar o no la entrada
     DetailRight=Condición para mostrar menús grises no autorizados
     DetailLangs=Nombre de archivo Lang para la traducción de código de etiqueta
     Target=Objetivo
    -DetailTarget=Objetivo de los enlaces (_blank top abrir una nueva ventana)
     DetailLevel=Nivel (-1: menú superior, 0: menú del encabezado,> 0 menú y submenú)
     ModifMenu=Cambio de menús
     DeleteMenu=Borrar entrada de menú
    @@ -1202,7 +1003,6 @@ OptionVATDebitOption=Base de devengo
     OptionVatDefaultDesc=El IVA se debe:<br>- en la entrega de mercancías (que utilizamos la fecha de factura)<br>- en los pagos por servicios
     OptionVatDebitOptionDesc=El IVA se debe:<br>- en la entrega de las mercancías (utilizamos la fecha de factura)<br>- en la factura (débito) de los servicios
     OptionPaymentForProductAndServicesDesc=El IVA es pagadero: <br> - en el pago de los bienes <br> - en los pagos por servicios
    -SummaryOfVatExigibilityUsedByDefault=Tiempo de exigibilidad del IVA por defecto según la opción elegida:
     OnDelivery=En entrega
     OnPayment=En pago
     OnInvoice=En factura
    @@ -1218,33 +1018,21 @@ AccountancyCodeBuy=Cuenta de compra. código
     AgendaSetup=Eventos y configuración del módulo de agenda
     PasswordTogetVCalExport=Clave para autorizar enlace de exportación
     PastDelayVCalExport=No exportar eventos más antiguos de
    -AGENDA_USE_EVENT_TYPE=Utilice los tipos de eventos (administrados en el menú Configuración -> Diccionarios -> Tipo de eventos del programa)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Establecer automáticamente este valor predeterminado para el tipo de evento en el formulario de creación de eventos
    -AGENDA_DEFAULT_FILTER_TYPE=Establecer automáticamente este tipo de eventos en el filtro de búsqueda de la vista de agenda
    -AGENDA_DEFAULT_FILTER_STATUS=Establecer automáticamente este estado para eventos en el filtro de búsqueda de la vista de agenda
     AGENDA_DEFAULT_VIEW=Qué pestaña desea abrir de forma predeterminada al seleccionar el menú Agenda
     AGENDA_REMINDER_EMAIL=Habilite el recordatorio de eventos <b>por correo electrónico</b> (la opción recordar/demora se puede definir en cada evento). Nota: El módulo <strong>%s</strong> debe estar habilitado y configurado correctamente para enviar un recordatorio a la frecuencia correcta.
    -AGENDA_REMINDER_BROWSER=Habilite el recordatorio de eventos <b>en el navegador de los usuarios</b> (cuando se llega a la fecha del evento, cada usuario puede rechazarlo de la pregunta de confirmación del navegador)
     AGENDA_REMINDER_BROWSER_SOUND=Habilitar la notificación de sonido
     AGENDA_SHOW_LINKED_OBJECT=Mostrar objeto vinculado en la vista de agenda
     ClickToDialSetup=Configuración del módulo - Click To Dial
     ClickToDialUrlDesc=URL llamado cuando se hace clic en el icono de teléfono. En URL, puede usar las etiquetas<br><b>__PHONETO__</b> que se reemplazarán con el número de teléfono de la persona a quien llamar<br><b>__PHONEFROM__</b> que será reemplazado por el número de teléfono de la persona que llama (suyo)<br><b>__LOGIN__</b> que se reemplazará con el inicio de sesión de “click to dial” (definido en la tarjeta de usuario)<br><b>__PASS__</b> que se reemplazará con la contraseña de “click to dial” (definida en el usuario tarjeta).
    -ClickToDialDesc=Este módulo permite hacer clic en los números de teléfono. Un clic en este icono llamará a su teléfono para llamar al número de teléfono. Esto se puede utilizar para llamar a un sistema de centro de llamadas de Dolibarr que puede llamar al número de teléfono en un sistema SIP, por ejemplo.
     ClickToDialUseTelLink=Utilice sólo un enlace "tel:" en los números de teléfono
    -ClickToDialUseTelLinkDesc=Utilice este método si sus usuarios tienen un softphone o una interfaz de software instalados en el mismo equipo que el navegador y se llaman cuando hace clic en un enlace de su navegador que comienza con "tel:". Si necesita una solución de servidor completa (no necesita instalación de software local), debe establecer esto en "No" y rellenar el siguiente campo.
     CashDesk=Puntos de venta
     CashDeskSetup=Configuración del módulo de punto de venta
    -CashDeskThirdPartyForSell=Predeterminado genérico de clientes/proveedores utilizado para vender
     CashDeskBankAccountForSell=Cuenta predeterminada para recibir pagos en efectivo
     CashDeskBankAccountForCheque=Cuenta predeterminada para recibir pagos por cheque
     CashDeskBankAccountForCB=Cuenta predeterminada para recibir pagos con tarjetas de crédito
    -CashDeskDoNotDecreaseStock=Inhabilitar la disminución de existencias cuando se realiza una venta desde el punto de venta (si "no", la disminución de existencias se realiza para cada venta realizada desde POS, independientemente de la opción establecida en el módulo Stock).
     CashDeskIdWareHouse=Forzar y restringir el almacén a utilizar para la disminución de existencias
    -StockDecreaseForPointOfSaleDisabled=Disminución de existencias desde el punto de venta desactivado
     StockDecreaseForPointOfSaleDisabledbyBatch=La disminución de stock en POS no es compatible con la gestión de lotes
    -CashDeskYouDidNotDisableStockDecease=No desactivó la disminución de existencias al realizar una venta desde el punto de venta. Así que un almacén es necesario.
     BookmarkSetup=Configuración del módulo de marcadores
    -BookmarkDesc=Este módulo le permite administrar marcadores. También puede añadir accesos directos a cualquier página de Dolibarr o sitios web externos en su menú de la izquierda.
     NbOfBoomarkToShow=Número máximo de marcadores que se mostrarán en el menú de la izquierda
     WebServicesSetup=Configuración del módulo Webservices
     WebServicesDesc=Al habilitar este módulo, Dolibarr se convierte en un servidor de servicio web para proporcionar diversos servicios web.
    @@ -1262,7 +1050,6 @@ BankOrderESDesc=Orden de exhibición en español
     ChequeReceiptsNumberingModule=Módulo de numeración de recibos de cheques
     MultiCompanySetup=Configuración del módulo de varias empresas
     SuppliersSetup=Configuración del módulo de proveedores
    -SuppliersCommandModel=Plantilla completa de orden de compra (logo ...)
     SuppliersInvoiceModel=Plantilla completa de la factura del proveedor (logo ...)
     SuppliersInvoiceNumberingModel=Modelos de numeración de facturas de proveedores
     IfSetToYesDontForgetPermission=Si se establece en sí, no olvide proporcionar permisos a grupos o usuarios permitidos para la segunda aprobación
    @@ -1276,7 +1063,6 @@ ProjectsSetup=Configuración del módulo de proyecto
     ProjectsModelModule=Modelo de documento de informes de proyectos
     TasksNumberingModules=Módulo de numeración de tareas
     TaskModelModule=Modelo de documento de informes de tareas
    -UseSearchToSelectProject=Utilice los campos de autocompletado para elegir el proyecto (en lugar de utilizar un cuadro de lista)
     AccountingPeriods=Períodos contables
     AccountingPeriodCard=Período contable
     NewFiscalYear=Nuevo período contable
    @@ -1293,6 +1079,7 @@ NoAmbiCaracAutoGeneration=No utilice caracteres ambiguos ("1", "l", "i", "|", "0
     SalariesSetup=Configuración del módulo de los salarios
     SortOrder=Orden de clasificación
     Format=Formato
    +TypePaymentDesc=0:Tipo de pago del cliente, 1:Tipo de pago del proveedor, 2:Tipo de pago de clientes y proveedores
     IncludePath=Incluir ruta (definida en la variable %s)
     ExpenseReportsSetup=Configuración del módulo Informes de gastos
     TemplatePDFExpenseReports=Plantillas para generar el documento de informe de gastos
    @@ -1301,8 +1088,6 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Puede encontrar opciones p
     ListOfNotificationsPerUser=Lista de notificaciones por usuario*
     ListOfNotificationsPerUserOrContact=Lista de notificaciones por usuario* o por contacto**
     ListOfFixedNotifications=Lista de notificaciones fijas
    -GoOntoUserCardToAddMore=Vaya a la pestaña "Notificaciones" de un usuario para agregar o eliminar notificaciones para los usuarios
    -GoOntoContactCardToAddMore=Vaya a la pestaña "Notificaciones" de un cliente/proveedor para agregar o eliminar notificaciones de contactos / direcciones
     Threshold=Límite
     BackupDumpWizard=Asistente para crear archivo de volcado de copia de seguridad de base de datos
     SomethingMakeInstallFromWebNotPossible=La instalación del módulo externo no es posible desde la interfaz web por el siguiente motivo:
    @@ -1323,13 +1108,10 @@ BackgroundTableLineOddColor=Color de fondo para líneas de tabla impares
     BackgroundTableLineEvenColor=Color de fondo para líneas de tabla pares
     MinimumNoticePeriod=Período mínimo de notificación (Su solicitud de permiso debe ser hecha antes de este retraso)
     NbAddedAutomatically=Número de días añadidos a los contadores de usuarios (automáticamente) cada mes
    -UnicodeCurrency=Introduzca aquí entre llaves, lista de número de bytes que representan el símbolo de moneda. Por ejemplo: por $, escriba [36] - para Brasil real R $ [82,36] - por €, ingrese [8364]
     ColorFormat=El color RGB está en formato HEX, por ejemplo: FF0000
     SellTaxRate=Tasa de venta
     RecuperableOnly=Sí por IVA "No percibido pero recuperable" dedicado a algún estado en Francia. Mantenga el valor de "No" en todos los demás casos.
     UrlTrackingDesc=Si el proveedor o el servicio de transporte ofrecen una página o un sitio web para comprobar el estado de su envío, puede ingresarlo aquí. Puede usar la clave {TRACKID} en los parámetros de URL para que el sistema lo reemplace con el valor del número de seguimiento ingresado por el usuario en la tarjeta de envío.
    -OpportunityPercent=Cuando crea una oportunidad, definirá una cantidad estimada de proyecto / dirigir. De acuerdo con el estado de oportunidad, esta cantidad puede ser multiplicada por esta tasa para evaluar la cantidad global de todas sus oportunidades pueden generar. El valor es el porcentaje (entre 0 y 100).
    -TemplateIsVisibleByOwnerOnly=La plantilla es visible solo por el propietario
     VisibleNowhere=Visible en ninguna parte
     FixTZ=Fijar la zona horaria
     FillFixTZOnlyIfRequired=Ejemplo: +2 (relleno sólo si el problema ha sido experimentado)
    @@ -1348,10 +1130,7 @@ YouUseLastStableVersion=Utiliza la última versión estable
     TitleExampleForMajorRelease=Ejemplo de mensaje que puede usar para anunciar esta versión principal (siéntase libre de usarla en sus sitios web)
     TitleExampleForMaintenanceRelease=Ejemplo de mensaje que puede utilizar para anunciar esta versión de mantenimiento (siéntase libre de usarla en sus sitios web)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s está disponible. La versión %s es un lanzamiento importante con muchas nuevas características tanto para usuarios como para desarrolladores. Puede descargarlo desde el área de descarga del portal https://www.dolibarr.org (subdirectorio Versiones estables). Puede leer <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> para obtener la lista completa de cambios.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s está disponible. La versión %s es una versión de mantenimiento, por lo que sólo contiene correcciones de errores. Recomendamos que todos usen una versión anterior para actualizar a ésta. Como cualquier versión de mantenimiento, no hay nuevas características, ni cambio de estructura de datos está presente en esta versión. Puede descargarlo desde el área de descarga del portal https://www.dolibarr.org (subdirectorio Versiones estables). Puede leer <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> para obtener la lista completa de cambios.
    -MultiPriceRuleDesc=Cuando la opción "Varios niveles de precios por producto / servicio" está activada, puede definir diferentes precios (uno por nivel de precio) para cada producto. Para ahorrar tiempo, puede ingresar aquí la regla para que el precio de cada nivel se calcule automáticamente según el precio del primer nivel, por lo que tendrá que ingresar sólo el precio del primer nivel de cada producto. Esta página está aquí para ahorrar tiempo y sólo puede ser útil si sus precios para cada nivel son relativos al primer nivel. Puede ignorar esta página en la mayoría de los casos.
     ModelModulesProduct=Plantillas para documentos de producto
    -ToGenerateCodeDefineAutomaticRuleFirst=Para poder generar códigos automáticamente, primero debe definir un administrador para definir automáticamente el número de código de barras.
     SeeSubstitutionVars=Ver * nota para la lista de posibles variables de sustitución
     SeeChangeLog=Consulte el archivo ChangeLog (solo en inglés)
     AllPublishers=Todos los editores
    @@ -1371,21 +1150,11 @@ AddOtherPagesOrServices=Añadir otras páginas o servicios
     AddModels=Agregar plantillas de documento o de numeración
     AddSubstitutions=Agregar sustituciones de claves
     DetectionNotPossible=La detección no es posible
    -UrlToGetKeyToUseAPIs=Url para obtener un token para usar la API (una vez que se ha recibido el token, se guarda en la tabla de usuario de la base de datos y se debe proporcionar en cada llamada a la API)
     ListOfAvailableAPIs=Lista de APIs disponibles
    -activateModuleDependNotSatisfied=El módulo "%s" depende del módulo "%s" que falta, por lo que el módulo "%1$s" puede no funcionar correctamente. Instale el módulo "%2$s" o deshabilite el módulo "%1$s" si desea estar a salvo de cualquier sorpresa
    -CommandIsNotInsideAllowedCommands=El comando que intenta ejecutar no está dentro de la lista de comandos permitidos definidos en el parámetro <strong>$dolibarr_main_restrict_os_commands</strong> en el archivo <strong>conf.php</strong>.
     LandingPage=Página de destino
    -SamePriceAlsoForSharedCompanies=Si utiliza un módulo multicompany, con la opción "Precio único", el precio será igual para todas las empresas si los productos son compartidos entre entornos
     ModuleEnabledAdminMustCheckRights=El módulo se ha activado. Los permisos para módulo(s) activado(s) se dieron sólo a usuarios admin. Es posible que deba conceder permisos a otros usuarios o grupos manualmente si es necesario.
    -UserHasNoPermissions=Este usuario no tiene permiso definido
    -TypeCdr=Utilice "Ninguno" si la fecha de pago es la fecha de factura más (+) un delta en días (delta es el campo "Nb de días")<br>Utilice "Al final del mes", si, después del delta, La fecha debe ser aumentada para llegar al final del mes (+ un "Offset" opcional en días) )<br>Use " Actual / Siguiente" para que la fecha del plazo de pago sea el primer Nth del mes (N se almacena en el campo "Nb de días")
    -WarningNoteModulePOSForFrenchLaw=Este módulo %s cumple con las leyes francesas (Loi Finance 2016) porque el módulo registros no reversibles se activa automáticamente.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Intenta instalar el módulo %s que es un módulo externo. La activación de un módulo externo significa que confía en el editor del módulo y está seguro de que este módulo no altera negativamente el comportamiento de su aplicación y es compatible con las leyes de su país (%s). Si el módulo trae una característica no legal, usted se hace responsable del uso de un software no legal.
     SetToYesIfGroupIsComputationOfOtherGroups=Establezca esto en "sí" si este grupo es un cálculo de otros grupos
    -EnterCalculationRuleIfPreviousFieldIsYes=Ingrese regla de cálculo si el campo anterior se estableció en Sí (por ejemplo, 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Algunas variantes de lenguaje encontradas
    -GDPRContactDesc=Si almacena datos sobre empresas/ciudadanos Europeos, puede almacenar aquí el contacto responsable del Reglamento General de Protección de Datos
     ResourceSetup=Configuración del módulo Recurso
     DisabledResourceLinkUser=Deshabilitar característica para vincular un recurso a los usuarios
     DisabledResourceLinkContact=Deshabilitar característica para vincular un recurso a contactos
    diff --git a/htdocs/langs/es_EC/main.lang b/htdocs/langs/es_EC/main.lang
    index 7268d5df4df..d391ac58b14 100644
    --- a/htdocs/langs/es_EC/main.lang
    +++ b/htdocs/langs/es_EC/main.lang
    @@ -36,20 +36,13 @@ ErrorFailedToSendMail=No se pudo enviar el correo (emisor= %s, receptor= %s)
     ErrorFileNotUploaded=El archivo no se ha subido. Compruebe que el tamaño no exceda el máximo permitido, el espacio libre disponible en el disco y que no hay ya un archivo con el mismo nombre en este directorio.
     ErrorInternalErrorDetected=Detectado un error
     ErrorWrongHostParameter=Parámetro host incorrecto
    -ErrorYourCountryIsNotDefined=Su país no está definido. Ir a Inicio-Configuración-Edit y vuelva a publicar el formulario.
    -ErrorRecordIsUsedByChild=No se ha podido eliminar este registro. Este registro se utiliza por lo menos un registro secundario.
     ErrorWrongValueForParameterX=valor incorrecto para el parámetro %s
     ErrorNoRequestInError=Ninguna solicitud por error
    -ErrorServiceUnavailableTryLater=El servicio no está disponible por el momento. Inténtelo de nuevo más tarde.
     ErrorDuplicateField=Valor duplicado en un campo único
    -ErrorSomeErrorWereFoundRollbackIsDone=Se encontraron algunos errores. Revertiremos los cambios.
    -ErrorConfigParameterNotDefined=Parámetro <b>%s</b> no está definido dentro de archivo de configuración Dolibarr <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=No se pudo encontrar el usuario <b>%s</b> en la base de datos Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Error, no hay tipos de IVA definidos para el país '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no hay ningun tipo de impuesto fiscal definido para el país '%s'.
     ErrorFailedToSaveFile=Error, Error al guardar el archivo.
    -ErrorCannotAddThisParentWarehouse=Está intentando agregar un almacén padre que ya es un hijo de uno actual
    -MaxNbOfRecordPerPage=Número máximo de registro por página
     NotAuthorized=No está autorizado para hacer eso.
     SetDate=Establecer fecha
     SeeHere=Mire aquí
    @@ -58,17 +51,15 @@ BackgroundColorByDefault=Color de fondo por defecto
     FileRenamed=El archivo se cambió de nombre correctamente.
     FileGenerated=El archivo se generó correctamente
     FileSaved=El archivo se ha guardado correctamente
    -FileTransferComplete=Archivo(s) cargados correctamente
     FilesDeleted=Archivo(s) eliminados correctamente
     FileWasNotUploaded=Se ha seleccionado un archivo para adjuntarlo, pero todavía no se ha cargado. Haga clic en "Adjuntar archivo" para hacerlo.
    -NbOfEntries=Número de entradas
     GoToWikiHelpPage=Lea la ayuda en línea (acceso a Internet es necesario)
     GoToHelpPage=Leer la ayuda
     DolibarrInHttpAuthenticationSoPasswordUseless=El modo de autenticación Dolibarr está configurado en <b>%s</b> en el archivo de configuración <b>conf.php</b>. <br> Esto significa que la base de datos de contraseñas es externa a Dolibarr, por lo que cambiar este campo puede no tener efecto.
     Undefined=Indefinido
     PasswordForgotten=¿Contraseña olvidada?
    +NoAccount=Sin cuenta?
     SeeAbove=Véase más arriba
    -HomeArea=Área de inicio
     PreviousValue=Valor anterior
     ConnectedOnMultiCompany=Conectado en ambiente
     AuthenticationMode=Modo de autenticación
    @@ -91,6 +82,7 @@ Period=Período
     PeriodEndDate=Fecha de finalización del período
     NotClosed=No se ha cerrado
     Enabled=Habilitado
    +Enable=Habilitar
     Disable=Inhabilitar
     Disabled=Inhabilitado
     AddLink=Agregar enlace
    @@ -99,7 +91,6 @@ AddToDraft=Añadir a redactar
     Update=Actualizar
     Close=Cerrado
     CloseBox=Retire widget desde su panel de control
    -ConfirmSendCardByMail=Es lo que realmente desea enviar el contenido de esta carta por correo a <b>%s</b>?
     Delete=Borrar
     Remove=retirar
     Resiliate=Terminar
    @@ -167,7 +158,6 @@ UseLocalTax=Incluye impuestos
     Gb=GB
     Default=Predeterminados
     DefaultValue=Valor predeterminado
    -DefaultValues=Valores predeterminados
     UnitPriceHT=Precio unitario (neto)
     UnitPriceHTCurrency=Precio unitario (neto) (moneda)
     UnitPriceTTC=Precio unitario
    @@ -184,7 +174,6 @@ AmountTTCShort=Valor (inc. IVA)
     AmountHT=Valor (neto de impuestos)
     AmountTTC=Valor (inc. IVA)
     AmountVAT=Impuesto sobre el Valor
    -MulticurrencyAlreadyPaid=Ya pagado, moneda de origen
     MulticurrencyRemainderToPay=Seguir pagando, moneda de origen
     MulticurrencyPaymentAmount=Monto a pagar, moneda de origen
     MulticurrencyAmountHT=Valor (neto de impuestos), moneda de origen
    @@ -256,13 +245,10 @@ RemoveFilter=Retirar filtro
     ChartGenerated=Gráfico generado
     ChartNotGenerated=Gráfico no genera
     GeneratedOn=Construir el %s
    -DolibarrStateBoard=Estadísticas de la base de datos
    -DolibarrWorkBoard=Abrir el tablero de artículos
     NoOpenedElementToProcess=Ningún elemento abierto para procesar
     NotYetAvailable=No disponible aún
     Categories=Etiquetas/categorías
     Category=Etiquetas/categoría
    -OtherInformations=Otra informacion
     ChangedBy=Cambiado por
     ResultKo=Fallo
     Reporting=Informes
    @@ -275,7 +261,7 @@ Preview=Vista Previa
     NextStep=Próximo paso
     None=Ninguna
     Late=Tarde
    -LateDesc=Retardo para definir si un registro es tarde o no depende de la configuración. Pregunte a su administrador para cambiar de retardo desde el menú Inicio - Configuración - Alertas.
    +NoItemLate=No hay artículo tarde
     Photo=Imagen
     Photos=Imágenes
     DeletePicture=Borrar imagen
    @@ -295,7 +281,6 @@ August=Agosto
     September=Septiembre
     October=Octubre
     November=Noviembre
    -MayMin=Mayo
     Month01=Enero
     Month02=Febrero
     Month03=Marzo
    @@ -360,6 +345,7 @@ SendMail=Enviar correo electrónico
     EMail=Correo electrónico
     NoEMail=Sin correo electrónico
     Email=Correo electrónico
    +NotRead=No leer
     NoMobilePhone=No hay teléfono móvil
     FollowingConstantsWillBeSubstituted=Las siguientes constantes serán reemplazados con el valor correspondiente.
     BackToList=Volver a la lista
    @@ -380,7 +366,6 @@ Receive=Recibir
     CompleteOrNoMoreReceptionExpected=Completa o nada más esperada
     YouCanChangeValuesForThisListFromDictionarySetup=Puede cambiar los valores para esta lista de menú de Configuración - Diccionarios
     YouCanChangeValuesForThisListFrom=Puede cambiar los valores para esta lista de menú %s
    -YouCanSetDefaultValueInModuleSetup=Se puede establecer el valor predeterminado que se utiliza cuando se crea un nuevo registro en la configuración del módulo
     Documents=Archivos enlazados
     UploadDisabled=Carga inhabilitada
     MenuAgendaGoogle=Agenda de google
    @@ -392,7 +377,6 @@ For=Por
     ForCustomer=Para el cliente
     HidePassword=Mostrar comando con la contraseña oculta
     UnHidePassword=Mostrar comando real con contraseña clara
    -Informations=informaciones
     AddFile=Agregar archivo
     FreeZone=No es un producto/servicio predefinido
     FreeLineOfType=No es una entrada predefinida de tipo
    @@ -402,11 +386,8 @@ Merge=Combinar
     DocumentModelStandardPDF=Plantilla PDF estándar
     PrintContentArea=Mostrar la página para imprimir el área de contenido principal
     MenuManager=Administrador de menús
    -WarningYouAreInMaintenanceMode=Advertencia, está en un modo de mantenimiento, por lo que sólo se permite el acceso <b>%s</b> a la aplicación en este momento.
     CoreErrorMessage=Disculpe, ocurrió un error. Póngase en contacto con el administrador del sistema para comprobar los registros o desactivar $dolibarr_main_prod=1 para obtener más información.
     FieldsWithAreMandatory=Los campos con <b>%s</b> son obligatorios
    -FieldsWithIsForPublic=Los campos con <b>%s</b> se muestran en la lista pública de miembros. Si no lo desea, marque la casilla "público".
    -AccordingToGeoIPDatabase=(Según la conversión GeoIP)
     RequiredField=Campo requerido
     ToTest=Prueba
     ValidateBefore=La tarjeta debe ser validado antes de usar esta función
    @@ -433,7 +414,6 @@ ByTown=por ciudad
     BySalesRepresentative=Por representante de ventas
     LinkedToSpecificUsers=Enlace a un contacto de usuario en particular
     NoResults=No hay resultados
    -AdminTools=Herramientas de administración
     SystemTools=Herramientas del sistema
     ModulesSystemTools=Módulos de herramientas
     NoPhotoYet=No hay imagenes disponibles todavía
    @@ -449,7 +429,6 @@ SelectElementAndClick=Seleccione un elemento y haga clic en %s
     PrintFile=Imprimir archivo %s
     ShowTransaction=Mostrar entrada en la cuenta bancaria
     ShowIntervention=Mostrar la intervención
    -GoIntoSetupToChangeLogo=Vaya a Inicio-Configuración - Empresa para cambiar el logotipo o entrar en Inicio-Configuración-Mostrar para ocultar.
     Deny=Negar
     Denied=Negado
     ListOfTemplates=Lista de plantillas
    @@ -458,19 +437,15 @@ ViewList=Vista de la lista
     Sincerely=Sinceramente
     DeleteLine=Borrar línea
     NoPDFAvailableForDocGenAmongChecked=No hay PDF disponibles para la generación de documentos entre el registro guardado
    -TooManyRecordForMassAction=Demasiados registros seleccionados para la acción masiva. La acción está restringida a una lista de %s registros.
     NoRecordSelected=Ningún registro seleccionado
     MassFilesArea=Área para archivos construidos por acciones masivas
     ShowTempMassFilesArea=Mostrar área de archivos creados por acciones masivas
    -ConfirmMassDeletion=Confirmación de eliminación masiva
    -ConfirmMassDeletionQuestion=¿Seguro que quieres eliminar el %s registro seleccionado?
     ClassifyBilled=Clasificar facturas
     ClassifyUnbilled=Clasificar sin facturar
     ExportFilteredList=Exportar lista filtrada
     ExportList=Exportar lista
     Miscellaneous=Varios
     GroupBy=Agrupar por...
    -SomeTranslationAreUncomplete=Algunos idiomas pueden traducirse parcialmente o pueden contener errores. Si detecta alguno, puede arreglar archivos de idioma que se registren en <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
     DirectDownloadLink=Enlace de descarga directa (público/externo)
     DownloadDocument=Descargar documento
     ActualizeCurrency=Actualizar tipo de cambio
    @@ -481,9 +456,6 @@ ExpenseReport=Informe de gastos
     ExpenseReports=Reporte de gastos
     HRAndBank=HR y Banco
     TitleSetToDraft=Volver al borrador
    -ConfirmSetToDraft=¿Seguro que desea volver al estado de borrador?
    -EMailTemplates=Plantillas de correo electrónico
    -FileNotShared=Archivo no compartido con público externo
     LineNb=Número de línea
     MondayMin=Lun
     TuesdayMin=Mar
    @@ -510,8 +482,7 @@ SearchIntoCustomerProposals=Propuestas de clientes
     SearchIntoSupplierProposals=Propuestas del vendedor
     SearchIntoCustomerShipments=Envíos de clientes
     SearchIntoExpenseReports=Reporte de gastos
    -SearchIntoLeaves=Hojas
     CommentPage=Espacio para comentarios
     Everybody=Todos
     AssignedTo=Asignado a
    -ConfirmMassDraftDeletion=Confirmación de eliminación masiva
    +YouAreCurrentlyInSandboxMode=Actualmente estás en el modo%s "sandbox"
    diff --git a/htdocs/langs/es_ES/accountancy.lang b/htdocs/langs/es_ES/accountancy.lang
    index 12b9b1bb56b..f1974e50b4a 100644
    --- a/htdocs/langs/es_ES/accountancy.lang
    +++ b/htdocs/langs/es_ES/accountancy.lang
    @@ -38,6 +38,10 @@ GroupIsEmptyCheckSetup=El grupo está vacío, compruebe la configuración de gru
     DetailByAccount=Ver detalles por cuenta
     AccountWithNonZeroValues=Cuentas con valores no cero
     ListOfAccounts=Lista de cuentas
    +CountriesInEEC=Países en la CEE
    +CountriesNotInEEC=Países no incluidos en la CEE
    +CountriesInEECExceptMe=Países en la CEE excepto %s
    +CountriesExceptMe=Todos los países excepto %s
     
     MainAccountForCustomersNotDefined=Cuenta contable para clientes no definida en la configuración
     MainAccountForSuppliersNotDefined=Cuenta contable para proveedores no definida en la configuración
    @@ -55,7 +59,7 @@ AccountancyAreaDescChartModel=PASO %s: Crear un modelo de plan general contable
     AccountancyAreaDescChart=PASO %s: Crear o comprobar el contenido de su plan general contable desde el menú %s
     
     AccountancyAreaDescVat=PASO %s: Defina las cuentas contables para cada tasa de IVA. Para ello puede usar el menú %s.
    -AccountancyAreaDescDefault=STEP %s: Define default accounting accounts. For this, use the menu entry %s.
    +AccountancyAreaDescDefault=PASO %s: Defina las cuentas contables predeterminadas. Para ello puede utilizar el menú %s.
     AccountancyAreaDescExpenseReport=PASO %s: Defina las cuentas contables para los informes de gastos. Para ello puede utilizar el menú %s.
     AccountancyAreaDescSal=PASO %s: Defina las cuentas contables para los pagos de salarios. Para ello puede utilizar el menú %s.
     AccountancyAreaDescContrib=PASO %s: Defina las cuentas contables de los gastos especiales (impuestos varios). Para ello puede utilizar el menú %s.
    @@ -156,6 +160,7 @@ Docref=Referencia
     LabelAccount=Descripción
     LabelOperation=Etiqueta operación
     Sens=Sentido
    +LetteringCode=Cogido de letras
     Codejournal=Diario
     NumPiece=Apunte
     TransactionNumShort=Núm. transacción
    @@ -221,6 +226,7 @@ AutomaticBindingDone=Vinculación automática finalizada
     
     ErrorAccountancyCodeIsAlreadyUse=Error, no puede eliminar esta cuenta ya que está siendo usada
     MvtNotCorrectlyBalanced=Asiento contabilizado incorrectamente. Debe=%s. Haber=%s
    +Balancing=Saldo
     FicheVentilation=Ficha contable
     GeneralLedgerIsWritten=Transacciones escritas en el Libro Mayor
     GeneralLedgerSomeRecordWasNotRecorded=Algunas de las operaciones no pueden contabilizarse. Si no hay otro mensaje de error, es probable que ya estén contabilizadas.
    @@ -262,7 +268,8 @@ Modelcsv_quadratus=Exportar hacia Quadratus QuadraCompta
     Modelcsv_ebp=Exportar a EBP
     Modelcsv_cogilog=Eportar a Cogilog
     Modelcsv_agiris=Exportar a Agiris
    -Modelcsv_configurable=Exportación configurable
    +Modelcsv_configurable=Exportación CSV Configurable
    +Modelcsv_FEC=Exportación FEC (Art. L47 A) (Prueba)
     ChartofaccountsId=Id plan contable
     
     ## Tools - Init accounting account on product / service
    diff --git a/htdocs/langs/es_ES/admin.lang b/htdocs/langs/es_ES/admin.lang
    index 3db8d60e280..3513bb95452 100644
    --- a/htdocs/langs/es_ES/admin.lang
    +++ b/htdocs/langs/es_ES/admin.lang
    @@ -10,7 +10,7 @@ VersionDevelopment=Desarrollo
     VersionUnknown=Desconocida
     VersionRecommanded=Recomendada
     FileCheck=Comprobador de integridad de archivos
    -FileCheckDesc=Esta herramienta le permite comprobar la integridad de los archivos de la aplicación, comparando cada archivo con los oficiales. Se puede utilizar esta herramienta para detectar si algunos archivos fueron modificados por un hacker por ejemplo.
    +FileCheckDesc=Esta herramienta le permite verificar la integridad de los archivos y la configuración de su aplicación, comparando cada archivo con los oficiales. También se puede verificar el valor de algunas constantes de configuración. Se puede utilizar esta herramienta para detectar si algunos archivos fueron modificados por un hacker por ejemplo.
     FileIntegrityIsStrictlyConformedWithReference=La integridad de los archivos se ajusta estrictamente a la referencia.
     FileIntegrityIsOkButFilesWereAdded=La comprobación de la integridad de los archivos ha resultado exitosa, sin embargo se han agregado algunos archivos nuevos.
     FileIntegritySomeFilesWereRemovedOrModified=La comprobación de integridad de archivos ha fallado. Algunos archivos fueron modificados, eliminados o agregados.
    @@ -30,14 +30,14 @@ SessionSaveHandler=Modalidad de salvaguardado de sesiones
     SessionSavePath=Localización salvaguardado de sesiones
     PurgeSessions=Purga de sesiones
     ConfirmPurgeSessions=¿Realmente desea purgar todas las sesiones? Esto desconectará todos los usuarios (excepto a si mismo).
    -NoSessionListWithThisHandler=El gestor de período de sesiones configurado en su PHP no enumera las sesiones en curso
    +NoSessionListWithThisHandler=El gestor de sesiones configurado en su PHP no permite mostrar las sesiones en curso
     LockNewSessions=Bloquear nuevas conexiones
    -ConfirmLockNewSessions=¿Está seguro de querer restringir el acceso a Dolibarr a su usuario? Solamente el login <b>%s</b> podrá conectarse si confirma.
    +ConfirmLockNewSessions=¿Está seguro de querer restringir el acceso a Dolibarr únicamente a su usuario? Solamente el login <b>%s</b> podrá conectarse si confirma.
     UnlockNewSessions=Eliminar bloqueo de conexiones
     YourSession=Su sesión
     Sessions=Sesiones de usuarios
     WebUserGroup=Servidor web usuario/grupo
    -NoSessionFound=Parece que su PHP no puede listar las sesiones activas. El directorio utilizado para el guardado de sesiones (<b>%s</b>) puede estar protegido (por ejemplo, por los permisos del sistema operativo o por la directiva open_basedir de su PHP).
    +NoSessionFound=Parece que su PHP no puede listar las sesiones activas. El directorio de salvaguardado de sesiones (<b>%s</b>) puede estar protegido (por ejemplo, por los permisos del sistema operativo o por la directiva open_basedir de su PHP).
     DBStoringCharset=Codificación de la base de datos para el almacenamiento de datos
     DBSortingCharset=Codificación de la base de datos para clasificar los datos
     ClientCharset=Juego de caracteres del cliente
    @@ -50,7 +50,7 @@ ExternalUser=Usuario externo
     InternalUsers=Usuarios internos
     ExternalUsers=Usuarios externos
     GUISetup=Entorno
    -SetupArea=Área configuración
    +SetupArea=Configuración
     UploadNewTemplate=Nueva(s) plantilla(s) actualizada(s)
     FormToTestFileUploadForm=Formulario de prueba de subida de archivo (según opciones elegidas)
     IfModuleEnabled=Nota: sólo es eficaz si el módulo <b>%s</b> está activado
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=El código no puede contener el valor 0
     DisableJavascript=Deshabilitar Javascript y funciones Ajax (Recomendado para personas ciegas o navegadores de texto)
     UseSearchToSelectCompanyTooltip=También si tiene un gran número de terceros (> 100 000), puede aumentar la velocidad mediante el establecimiento COMPANY_DONOTSEARCH_ANYWHERE constante a 1 en Configuración-> Otros. La búsqueda será limitada a la creación de cadena.
     UseSearchToSelectContactTooltip=También si usted tiene un gran número de terceros (> 100 000), puede aumentar la velocidad mediante el establecimiento CONTACT_DONOTSEARCH_ANYWHERE constante a 1 en Configuración-> Otros. La búsqueda será limitada a la creación de cadena.
    -DelaiedFullListToSelectCompany=Esperar a que presione una tecla antes de cargar el contenido de la lista combinada de terceros (Esto puede incrementar el rendimiento si tiene un gran número de terceros) 
    -DelaiedFullListToSelectContact=Esperar a que presione una tecla antes de cargar el contenido de la lista combinada de contactos (Esto puede incrementar el rendimiento si tiene un gran número de contactos) 
    +DelaiedFullListToSelectCompany=Esperar a que presione una tecla antes de cargar el contenido de la lista combinada de terceros <br>Esto puede incrementar el rendimiento si tiene un gran número de terceros, pero es menos conveniente.
    +DelaiedFullListToSelectContact=Esperar a que presione una tecla antes de cargar el contenido de la lista combinada de contactos. <br> Esto puede incrementar el rendimiento si tiene un gran número de contactos, pero es menos conveniente.
     NumberOfKeyToSearch=Nº de caracteres para desencadenar la búsqueda: %s
     NotAvailableWhenAjaxDisabled=No disponible cuando Ajax esté desactivado
     AllowToSelectProjectFromOtherCompany=En un documento de un tercero, puede elegir un proyecto vinculado a otro tercero
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Vista previa no disponible
     ThemeCurrentlyActive=Tema actualmente activo
     CurrentTimeZone=Zona horaria PHP (Servidor)
     MySQLTimeZone=Zona horaria MySql (base de datos)
    -TZHasNoEffect=Las fechas se guardan y devuelven por el servidor de base de datos tal y como si se las hubieran enviado como una cadena. La zona horaria solamente tiene efecto si se usa la función UNIX_TIMESTAMP (que no debe ser usada por dolibarr, por lo que la zona horaria de la base de datos no debe tener efecto, aunque se haya cambiado después de introducir los datos).
    +TZHasNoEffect=Las fechas se guardan y devueltas por el servidor de base de datos tal y como si se las hubieran enviado como una cadena. La zona horaria solamente tiene efecto si se usa la función UNIX_TIMESTAMP (que no debe ser usada por Dolibarr, por lo que la zona horaria de la base de datos no debe tener efecto, aunque se haya cambiado después de introducir los datos).
     Space=Área
     Table=Tabla
     Fields=Campos
    @@ -111,7 +111,7 @@ NotConfigured=Módulo/Aplicación no configurado
     Active=Activo
     SetupShort=Config.
     OtherOptions=Otras opciones
    -OtherSetup=Varios
    +OtherSetup=Otras configuraciones
     CurrentValueSeparatorDecimal=Separador decimal
     CurrentValueSeparatorThousand=Separador miles
     Destination=destino
    @@ -126,8 +126,8 @@ PHPTZ=Zona horaria Servidor PHP
     DaylingSavingTime=Horario de verano (usuario)
     CurrentHour=Hora PHP (servidor)
     CurrentSessionTimeOut=Timeout sesión actual
    -YouCanEditPHPTZ=Para definir una zona horaria PHP diferente (no es necesario), pruebe a añadir un archivo .htacces con una línea como esta "SetEnvTZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Atención, al contrario de otras pantallas, las horas de esta página no se encuentran en su zona horaria local, sino en la zona horaria del servidor
    +YouCanEditPHPTZ=Para definir una zona horaria PHP diferente (no es necesario), pruebe a añadir un archivo .htacces con una línea como esta "SetEnvTZ Europe/Madrid"
    +HoursOnThisPageAreOnServerTZ=Atención, al contrario de otras pantallas, las horas de esta página no se encuentran en su zona horaria local, sino en la zona horaria del servidor.
     Box=Panel
     Boxes=Paneles
     MaxNbOfLinesForBoxes=Número máximo de líneas para paneles
    @@ -193,13 +193,13 @@ FeatureDisabledInDemo=Opción deshabilitada en demo
     FeatureAvailableOnlyOnStable=Funcionaliad disponible únicamente en versiones oficiales estables
     BoxesDesc=Los paneles son componentes que muestran algunos datos que pueden añadirse para personalizar algunas páginas. Puede elegir entre mostrar o no el panel mediante la selección de la página de destino y haciendo clic en 'Activar', o haciendo clic en la papelera para desactivarlo.
     OnlyActiveElementsAreShown=Sólo los elementos de <a href="%s">módulos activados</a> son mostrados.
    -ModulesDesc=Los módulos de Dolibarr definen qué funcionalidad está habilitada en el software. Algunos módulos requieren permisos que se deben conceder a los usuarios después de activar el módulo. Haga clic en el botón de encendido/apagado para activar un módulo/función.
    +ModulesDesc=Los módulos de Dolibarr definen qué funcionalidad está habilitada en el software. Algunos módulos requieren permisos que se deben conceder a los usuarios después de activar el módulo. Haga clic en el botón de encendido/apagado para activar/desactivar un módulo/aplicación.
     ModulesMarketPlaceDesc=Puede encontrar más módulos para descargar en sitios web externos en Internet ...
     ModulesDeployDesc=Si los permisos en su sistema de archivos lo permiten, puede utilizar esta herramienta para instalar un módulo externo. El módulo estará entonces visible en la pestaña <strong>%s</strong>.
     ModulesMarketPlaces=Buscar módulos externos...
     ModulesDevelopYourModule=Desarrolle sus propios módulos
     ModulesDevelopDesc=Usted puede desarrollar o encontrar un socio para que le desarrolle su módulo personalizado
    -DOLISTOREdescriptionLong=En lugar de activar el sitio web <a href="https://www.dolistore.com">www.dolistore.com</a> para encontrar un módulo externo, puede utilizar esta herramienta incrustada que hará que la búsqueda en la tienda para usted (puede ser lento, es necesario acceso a Internet) ...
    +DOLISTOREdescriptionLong=En lugar de ir al sitio web <a href="https://www.dolistore.com">www.dolistore.com</a> para encontrar un módulo externo, puede utilizar esta herramienta incorporada que hará la búsqueda en la tienda por usted (puede ser lento, es necesario acceso a Internet)...
     NewModule=Nuevo
     FreeModule=Gratis
     CompatibleUpTo=Compatible con la versión %s
    @@ -211,8 +211,8 @@ Nouveauté=Novedad
     AchatTelechargement=Comprar/Descargar
     GoModuleSetupArea=Para instalar un nuevo módulo, vaya al área de configuración de módulos en <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, el sitio oficial de módulos complementarios y para Dolibarr ERP/CRM
    -DoliPartnersDesc=Lista de empresas que ofrecen módulos y desarrollos a medida (Nota: cualquier persona con experiencia en programación PHP puede ofrecer desarrollos a medida para un proyecto de código abierto)
    -WebSiteDesc=Sitios web de referencia para encontrar más módulos ...
    +DoliPartnersDesc=Lista de empresas que ofrecen módulos y desarrollos a medida.<br> Nota: dado que Dolibarr es una aplicación de código abierto, <i>cualquier persona</i> con experiencia en programación PHP puede desarrollar un módulo.
    +WebSiteDesc=Sitios web de referencia para encontrar más módulos (no core)...
     DevelopYourModuleDesc=Algunas soluciones para desarrollar su propio módulo ...
     URL=Enlace
     BoxesAvailable=Paneles disponibles
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=No almacenar la contraseña sin cifrar en la base
     MainDbPasswordFileConfEncrypted=Encriptar la contraseña de la base en el archivo conf.php
     InstrucToEncodePass=Para tener la contraseña codificada en el archivo <b>conf.php</b>, reemplace la línea <br><b>$dolibarr_main_db_pass = "...";</b><br>por<br> <b>$dolibarr_main_db_pass = "crypted:%s";</b>
     InstrucToClearPass=Para tener la contraseña decodificada (visible) en el archivo <b>conf.php</b>, reemplace la línea <br><b>$dolibarr_main_db_pass = "crypted:...";</b><br>por<br><b>$dolibarr_main_db_pass = "%s";</b>
    -ProtectAndEncryptPdfFiles=Protección y encriptación de los pdf generados
    +ProtectAndEncryptPdfFiles=Protección y encriptación de los ficheros PDF NO está recomendado (puede fallar la generación de PDF en masa)
     ProtectAndEncryptPdfFilesDesc=La protección de un documento PDF lo mantiene disponible para leer e imprimir con cualquier navegador PDF. Sin embargo, la edición y la copia no son posibles. Tenga en cuenta que el uso de esta característica hace que la creación global de un conjunto de PDFs no funcione.
     Feature=Función
     DolibarrLicense=Licencia
    @@ -246,8 +246,8 @@ ExternalResources=Recursos externos
     SocialNetworks=Redes sociales
     ForDocumentationSeeWiki=Para la documentación de usuario, desarrollador o Preguntas Frecuentes (FAQ), consulte el wiki Dolibarr: <br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Para otras cuestiones o realizar sus propias consultas, puede utilizar el foro Dolibarr: <br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Esta aplicación, independiente de Dolibarr, le permite ayudarle a obtener un servicio de soporte de Dolibarr.
    -HelpCenterDesc2=Algunos de estos servicios sólo están disponibles en <b>inglés</b>.
    +HelpCenterDesc1=Aquí hay algunos recursos para obtener ayuda y soporte de Dolibarr
    +HelpCenterDesc2=Algunos de estos recursos sólo están disponibles en <b>inglés</b>.
     CurrentMenuHandler=Gestor de menú
     MeasuringUnit=Unidad de medida
     LeftMargin=Margen izquierdo
    @@ -262,23 +262,27 @@ NoticePeriod=Plazo de aviso
     NewByMonth=Nuevo por mes
     Emails=E-Mails
     EMailsSetup=Configuración e-mails
    -EMailsDesc=Esta página le permite sobrescribir sus parámetros de PHP para el envío de correos electrónicos. En la mayoría de los casos, en el sistema operativo Unix/Linux, su configuración de PHP es correcta y estos parámetros son inútiles.
    +EMailsDesc=Esta página le permite sobrescribir sus parámetros de PHP para el envío de correos electrónicos. En la mayoría de los casos, en el sistema operativo Unix/Linux, su configuración de PHP es correcta y estos parámetros son innecesarios.
     EmailSenderProfiles=Perfiles de remitentes de e-mails
     MAIN_MAIL_SMTP_PORT=Puerto del servidor SMTP (Por defecto en php.ini: <b>%s</b>)
     MAIN_MAIL_SMTP_SERVER=Nombre host o ip del servidor SMTP (Por defecto en php.ini: <b>%s</b>)
     MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Puerto del servidor SMTP (No definido en PHP en sistemas de tipo Unix)
     MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Nombre servidor o ip del servidor SMTP (No definido en PHP en sistemas de tipo Unix)
     MAIN_MAIL_EMAIL_FROM=E-mail del remitente para e-mails automáticos (por defecto en php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=E-mail a usar para los e-mails de error enviados
    -MAIN_MAIL_AUTOCOPY_TO= Enviar automáticamente copia oculta de los e-mails enviados a
    +MAIN_MAIL_ERRORS_TO=E-mail a usar para los e-mails de error enviados (campo 'Errors-To' en los emails enviados)
    +MAIN_MAIL_AUTOCOPY_TO= Enviar copia oculta (Bcc) de todos los emails enviados a
     MAIN_DISABLE_ALL_MAILS=Deshabilitar todos los envíos de e-mail (para propósitos de prueba o demostraciones)
     MAIN_MAIL_FORCE_SENDTO=Enviar todos los e-mails a (en lugar de destinatarios reales, para pruebas)
     MAIN_MAIL_ENABLED_USER_DEST_SELECT=Añadir usuarios de empleados con e-mail a la lista de destinatarios permitidos
     MAIN_MAIL_SENDMODE=Método de envío de e-mails
    -MAIN_MAIL_SMTPS_ID=ID de autentificación SMTP  si se requiere autenticación SMTP
    -MAIN_MAIL_SMTPS_PW=Contraseña autentificación SMTP si se requiere autentificación SMTP
    -MAIN_MAIL_EMAIL_TLS= Uso de encriptación TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS= Uso de encriptación TLS (STARTTLS)
    +MAIN_MAIL_SMTPS_ID=ID de autentificación SMTP  (si el servidor requiere autenticación)
    +MAIN_MAIL_SMTPS_PW=Contraseña SMTP (si el servidor requiere autentificación)
    +MAIN_MAIL_EMAIL_TLS=Usar encriptación TLS (SSL)
    +MAIN_MAIL_EMAIL_STARTTLS=Uso de encriptación TLS (STARTTLS)
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Usar DKIM para generar firma de e-mail
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Dominio de e-mail para usar con dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Nombre del selector dkim
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Clave privada para la firma dkim
     MAIN_DISABLE_ALL_SMS=Desactivar globalmente todo envío de SMS (para modo de pruebas o demo)
     MAIN_SMS_SENDMODE=Método de envío de SMS
     MAIN_MAIL_SMS_FROM=Número de teléfono por defecto para los envíos SMS
    @@ -309,15 +313,15 @@ DoNotUseInProduction=No usar en producción
     ThisIsProcessToFollow=Estos son los pasos para proceder:
     ThisIsAlternativeProcessToFollow=Este es una configuración alternativa para procesar manualmente:
     StepNb=Paso %s
    -FindPackageFromWebSite=Buscar el paquete que responde a su necesidad (por ejemplo en el sitio web %s)
    +FindPackageFromWebSite=Buscar el paquete que proporciona la funcionalidad que necesita (por ejemplo en el sitio web oficial %s)
     DownloadPackageFromWebSite=Descargue el paquete (por ejemplo desde el sitio web oficial %s).
     UnpackPackageInDolibarrRoot=Descomprimir los archivos comprimidos en el directorio del servidor dedicado a Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=Para instalar un módulo externo, descomprima el archivo en el directorio del servidor dedicado a los módulos: <b>%s</b>
    -SetupIsReadyForUse=La instalación del módulo ha concluido. Sin embargo, debe habilitar y configurar el módulo en su aplicación, vaya a la página para configurar los módulos: <a href="%s">%s</a>.
    +UnpackPackageInModulesRoot=Para instalar un módulo externo, descomprima el archivo en el directorio del servidor dedicado a los módulos externos: <br><b>%s</b>
    +SetupIsReadyForUse=La instalación del módulo ha concluido. Sin embargo, debe habilitar y configurar el módulo en su aplicación, yendo a la página para configurar los módulos: <a href="%s">%s</a>.
     NotExistsDirect=El directorio raíz alternativo no está configurado en un directorio existente.<br>
     InfDirAlt=Desde la versión 3, es posible definir un directorio raíz alternativo. Esto le permite almacenar, en un directorio dedicado, plug-ins y plantillas personalizadas.<br>Sólo cree un directorio en la raíz de Dolibarr (por ejemplo: custom).<br>
     InfDirExample=<br>Luego indíquelo en el archivo <strong>conf.php</strong><br> $ dolibarr_main_url_root_alt = 'http://miservidor /custom'<br>$ dolibarr_main_document_root_alt = '/ruta/de/dolibarr/htdocs/custom '<br>Si estas líneas se encuentran comentadas con "#", para habilitarlas, basta con descomentar eliminando el carácter "#".
    -YouCanSubmitFile=En este paso, puede enviar su archivo del módulo aquí:
    +YouCanSubmitFile=Alternativamente, puedes subir el módulo .zip comprimido:
     CurrentVersion=Versión actual de Dolibarr
     CallUpdatePage=Ir a la página de actualización de la estructura de la base de datos y sus datos: %s.
     LastStableVersion=Última versión estable
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Vea el wiki para más detalles de todos los actores y de su or
     UseACacheDelay= Demora en caché de la exportación en segundos (0 o vacio sin caché)
     DisableLinkToHelpCenter=Ocultar el enlace "¿Necesita soporte o ayuda?" en la página de login
     DisableLinkToHelp=Ocultar enlace a la ayuda en línea "<b>%s</b>"
    -AddCRIfTooLong=No hay líneas de corte automático, de modo que si el texto es demasiado largo en los documentos, debe agregar sus propios retornos de carro en el texto mecanografiado.
    -ConfirmPurge=¿Está seguro de querer realizar esta purga?<br>Esto borrará definitivamente todos los datos de sus archivos (área GED, archivos adjuntos etc.).
    +AddCRIfTooLong=No hay líneas de corte automático, de modo que si el texto es demasiado largo no se mostrará en los documentos. Por favor añada un salto de línea en el área de texto si fuese necesario.
    +ConfirmPurge=¿Está seguro de querer realizar esta purga?<br>Esto borrará definitivamente todos los datos de sus archivos (área GED, archivos adjuntos...).
     MinLength=Longuitud mínima
     LanguageFilesCachedIntoShmopSharedMemory=archivos .lang en memoria compartida
     LanguageFile=Archivo de idioma
    -ExamplesWithCurrentSetup=Ejemplos con la configuración activa actual
    +ExamplesWithCurrentSetup=Ejemplos con la configuración actual
     ListOfDirectories=Listado de directorios de plantillas OpenDocument
     ListOfDirectoriesForModelGenODT=Listado de directorios que contienen las plantillas de archivos con el formato OpenDocument.<br>Ponga aquí la ruta completa de directorios.<br>Añada un retorno de carro entre cada directorio<br> Para agregar un directorio del módulo GED, agregue aquí <b>DOL_DATA_ROOT/ecm/sunombrededirectorio.</b><br><br>Los archivos de esos directorios deben terminar con <b>.odt</b> o <b>.ods</b>.
    -NumberOfModelFilesFound=Número de archivos de plantillas ODT encontrados en este/estos directorio(s)
    +NumberOfModelFilesFound=Número de archivos de plantillas ODT/ODS encontrados en estos directorios
     ExampleOfDirectoriesForModelGen=Ejemplos de sintaxis:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=Colocando los siguientes tags en la plantilla, obtendrá una sustitución con el valor personalizado al generar el documento:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Crear_un_modelo_de_documento_ODT
    @@ -370,14 +374,14 @@ ResponseTimeout=Timeout de respuesta
     SmsTestMessage=Mensaje de prueba de __PHONEFROM__ para __PHONETO__
     ModuleMustBeEnabledFirst=El módulo <b>%s</b> debe ser activado antes si necesita esta funcionalidad.
     SecurityToken=Clave para encriptar urls
    -NoSmsEngine=No hay disponible ningún gestor de envío de SMS. Los gestores de envío de SMS no se instalan por defecto ya que dependen de cada proveedor, sin embargo puede encontrarlos en la plataforma %s.
    +NoSmsEngine=No hay disponible ningún gestor de envío de SMS. Los gestores de envío de SMS no se instalan por defecto ya que dependen de cada proveedor, sin embargo puede encontrarlos en la plataforma %s
     PDF=PDF
     PDFDesc=Puede definir aquí las opciones globales para la generación de los PDF
     PDFAddressForging=Reglas de visualización de direcciones
     HideAnyVATInformationOnPDF=Ocultar toda la información relacionada con el IVA en la generación de los PDF
     PDFRulesForSalesTax=Reglas de IVA
     PDFLocaltax=Reglas para %s
    -HideLocalTaxOnPDF=Ocultar %s tasa en la columna de impuestos del pdf
    +HideLocalTaxOnPDF=Ocultar la tasa %s en la columna de impuestos del pdf
     HideDescOnPDF=Ocultar descripción de los productos en la generación de los PDF
     HideRefOnPDF=Ocultar referencia de los productos en la generación de los PDF
     HideDetailsOnPDF=Ocultar detalles de las líneas en la generación de los PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Seguridad de las URLs
     SecurityTokenIsUnique=¿Usar un parámetro securekey único para cada URL?
     EnterRefToBuildUrl=Introduzca la referencia del objeto %s
     GetSecuredUrl=Obtener la URL calculada
    -ButtonHideUnauthorized=Ocultar a los usuarios no administradores los botones de acciones no autorizadas en vez de mostrarlos atenuados
    +ButtonHideUnauthorized=Ocultar botones de acciones no autorizadas a los usuarios no administradores en vez de mostrarlos atenuados
     OldVATRates=Tasa de IVA antigua
     NewVATRates=Tasa de IVA nueva
     PriceBaseTypeToChange=Cambiar el precio cuya referencia de base es
    @@ -408,7 +412,7 @@ ExtrafieldSelect = Lista de selección
     ExtrafieldSelectList = Lista desde una tabla
     ExtrafieldSeparator=Separador (No es un campo)
     ExtrafieldPassword=Contraseña
    -ExtrafieldRadio=Botón de selección excluyente
    +ExtrafieldRadio=Botón tipo radio (solo uno seleccionado)
     ExtrafieldCheckBox=Casilla de verificación
     ExtrafieldCheckBoxFromList=Casilla de selección de tabla
     ExtrafieldLink=Objeto adjuntado
    @@ -432,7 +436,7 @@ DefaultLink=Enlace por defecto
     SetAsDefault=Establecer por defecto
     ValueOverwrittenByUserSetup=Atención: Este valor puede ser sobreescrito por un valor específico de la configuración del usuario (cada usuario puede tener su propia url clicktodial)
     ExternalModule=Módulo externo - Instalado en el directorio %s
    -BarcodeInitForThirdparties=Inicio masivo de código de barras para terceros
    +BarcodeInitForthird-parties=Inicialización masiva de códigos de barras para terceros
     BarcodeInitForProductsOrServices=Inicio masivo de código de barras para productos o servicios
     CurrentlyNWithoutBarCode=Actualmente tiene <strong>%s</strong> registros de <strong>%s</strong> %s sin código de barras definido.
     InitEmptyBarCode=Iniciar valor para los %s registros vacíos
    @@ -446,9 +450,9 @@ NoDetails=No hay más detalles al pie de página
     DisplayCompanyInfo=Mostrar dirección de la empresa
     DisplayCompanyManagers=Mostrar nombres de los gestores
     DisplayCompanyInfoAndManagers=Mostrar dirección de la empresa y nombres de los gestores
    -EnableAndSetupModuleCron=Si desea tener esta factura recurrente para generarla automáticamente, el módulo *%s* debe estar activado y configurado correctamente. De lo contrario, la generación de facturas debe hacerse manualmente desde esta plantilla con el botón  *Crear*. Tenga en cuenta que incluso si se habilita la generación automática, todavía puede lanzarla generación manual. No es posible la generación de duplicados para el mismo período.
    -ModuleCompanyCodeCustomerAquarium=%s seguido por un código de cliente  para código de contabilidad
    -ModuleCompanyCodeSupplierAquarium=%s seguido por un código de proveedor  para código de contabilidad
    +EnableAndSetupModuleCron=Si desea que esta factura recurrente se generare automáticamente, el módulo *%s* debe estar activado y configurado correctamente. De lo contrario, la generación de facturas debe hacerse manualmente desde esta plantilla con el botón  *Crear*. Tenga en cuenta que incluso si se habilita la generación automática, todavía puede lanzar la generación manual. No es posible la generación de duplicados para el mismo período.
    +ModuleCompanyCodeCustomerAquarium=%s seguido por un código de cliente para código de contabilidad de cliente
    +ModuleCompanyCodeSupplierAquarium=%s seguido por un código de proveedor  para código de contabilidad de proveedor
     ModuleCompanyCodePanicum=Devuelve un código contable vacío.
     ModuleCompanyCodeDigitaria=El código contable depende del código de tercero. El código está formado por carácter ' C ' en primera posición seguido de los 5 primeros caracteres del código tercero.
     Use3StepsApproval=De forma predeterminada, los pedidos a proveedor deben ser creados y aprobados por 2 usuarios diferentes (un paso/usuario para crear y un paso/usuario para aprobar. Tenga en cuenta que si el usuario tiene tanto el permiso para crear y aprobar, un paso usuario será suficiente) . Puede pedir con esta opción introducir una tercera etapa de aprobación/usuario, si la cantidad es superior a un valor específico (por lo que serán necesarios 3 pasos: 1 validación, 2=primera aprobación y 3=segunda aprobación si la cantidad es suficiente).<br>Deje vacío si una aprobación (2 pasos) es suficiente, si se establece en un valor muy bajo (0,1) se requiere siempre una segunda aprobación (3 pasos).
    @@ -456,15 +460,15 @@ UseDoubleApproval=Usar 3 pasos de aprobación si el importe (sin IVA) es mayor q
     WarningPHPMail=ADVERTENCIA: A menudo es mejor configurar el email para usar el servidor de tu proveedor en lugar de la configuración por defecto. Algunos proveedores de correo electrónico (como Yahoo) no le permiten enviar un e-mail desde otro servidor que no sea el servidor de Yahoo. Tu configuración actual usa el servidor de la aplicación para enviar emails y no el servidor de tu proveedor de correo, así que algunos destinatarios (aquellos compatibles con el protocolo restrictivo DMARC), preguntarán a tu proveedor de correo si pueden aceptar el correo y otros proveedores (como Yahoo) pueden responder "no" porque el servidor no es uno de sus servidores, así que tus correos enviados pueden no ser aceptados (vigila también la cuota de envío de tu servidor de correo). <br>Si su proveedor de correo electrónico (como Yahoo) tiene esta restricción, debe cambiar la configuración de e-mail para elegir el método "servidor SMTP" y introducir el servidor SMTP y credenciales proporcionadas por su proveedor de correo electrónico (pregunte a su proveedor de correo electrónico las credenciales SMTP para su cuenta).
     WarningPHPMail2=Si su proveedor SMTP de correo electrónico necesita restringir el cliente de correo electrónico a algunas direcciones IP (muy raro), esta es la dirección IP de su aplicación ERP CRM: <strong>%s</strong>.
     ClickToShowDescription=Clic para ver la descripción
    -DependsOn=Este módulo necesita los módulos
    +DependsOn=Este módulo necesita el módulo(s)
     RequiredBy=Este módulo es requerido por los módulos
    -TheKeyIsTheNameOfHtmlField=La clave es el nombre del campo HTML. es necesario tener conocimientos técnicos para leer el contenido de la página HTML para obtener el nombre clave de un campo.
    -PageUrlForDefaultValues=Debe introducir aquí la URL relativa de la página. Si incluye parámetros en URL, los valores predeterminados serán efectivos si todos los parámetros están configurados con el mismo valor. Ejemplos:
    +TheKeyIsTheNameOfHtmlField=Este es el nombre del del campo HTML. Son necesarios tener conocimientos técnicos para leer el contenido de la página HTML para obtener el nombre clave de un campo.
    +PageUrlForDefaultValues=Debe introducir aquí la URL relativa de la página. Si incluye parámetros en la URL, los valores predeterminados serán efectivos si todos los parámetros están configurados con el mismo valor. Ejemplos:
     PageUrlForDefaultValuesCreate=<br> Para que el formulario cree un nuevo tercero, es <strong> %s</strong>, <br> Si queremos que el valor predeterminado sea sólo una url con algún parámetro, podemos usar <strong>%s</strong>
     PageUrlForDefaultValuesList=<br>Para la página que lista terceros, es <strong>%s</strong>,<br>si queremos que el valor predeterminado sea sólo una url con algún parámetro, podemos usar <strong>%s</strong>
     EnableDefaultValues=Habilitar el uso de valores predeterminados personalizados
     EnableOverwriteTranslation=Habilitar el uso de la traducción sobrescrita
    -GoIntoTranslationMenuToChangeThis=Se ha encontrado una traducción para la clave con este código, por lo que para cambiar este valor, debe editarlo desde Inicio-Configuración-Traducción.
    +GoIntoTranslationMenuToChangeThis=Se ha encontrado una traducción para la clave con este código. Para cambiar este valor, debe editarlo desde Inicio-Configuración-Traducción.
     WarningSettingSortOrder=Atención, establecer un orden predeterminado puede resultar en un error técnico al pasar a la página de lista si un campo es un campo desconocido. Si experimenta un error de este tipo, vuelva a esta página para eliminar el orden predeterminado y restaurar el comportamiento predeterminado.
     Field=Campo
     ProductDocumentTemplates=Plantillas de documentos para generar documento de producto
    @@ -477,6 +481,8 @@ davDescription=Agregue un componente para ser un servidor DAV
     DAVSetup=Configuración del módulo DAV
     DAV_ALLOW_PUBLIC_DIR=Habilite el directorio público (directorio WebDav sin necesidad de iniciar sesión)
     DAV_ALLOW_PUBLIC_DIRTooltip=El directorio público de WebDav es un directorio WebDAV al que todos pueden acceder (en modo lectura y escritura), sin necesidad de tener/usar una cuenta de inicio de sesión/contraseña existente.
    +DAV_ALLOW_ECM_DIR=Activar el directorio raíz del módulo GED (autentificación requerida)
    +DAV_ALLOW_ECM_DIRTooltip=El directorio raíz donde se cargan manualmente todos los archivos cuando se utiliza el módulo GED. Al igual que para la función de la interfaz web, necesitará un nombre de usuario/contraseña válido con permisos adecuados para acceder a ella.
     # Modules
     Module0Name=Usuarios y grupos
     Module0Desc=Gestión de Usuarios / Empleados y grupos
    @@ -485,7 +491,7 @@ Module1Desc=Gestión de terceros (empresas, particulares) y contactos
     Module2Name=Comercial
     Module2Desc=Gestión comercial
     Module10Name=Contabilidad
    -Module10Desc=Activación de informes simples de contabilidad (diarios, ventas) basados en el contenido de la base de datos. Sin desgloses.
    +Module10Desc=Activación de informes simples de contabilidad (diarios, ventas) basados en el contenido de la base de datos. No utiliza ninguna tabla de contabilidad.
     Module20Name=Presupuestos
     Module20Desc=Gestión de presupuestos/propuestas comerciales
     Module22Name=E-Mailings
    @@ -546,27 +552,27 @@ Module310Name=Miembros
     Module310Desc=Gestión de miembros de una asociación
     Module320Name=Hilos RSS
     Module320Desc=Adición de hilos de información RSS en las pantallas Dolibarr
    -Module330Name=Marcadores
    -Module330Desc=Gestión de marcadores
    -Module400Name=Proyectos/Oportunidades/Leads
    -Module400Desc=Gestión de proyectos, oportunidades/leads o tareas, Puede asignar cualquier elemento (factura, pedido, presupuesto, intervención...) a un proyecto y obtener una vista transversal del proyecto
    +Module330Name=Marcadores y atajos
    +Module330Desc=Crear marcadores, siempre accesibles, a páginas internas o externas a las que suele acceder
    +Module400Name=Proyectos u Oportunidades
    +Module400Desc=Gestión de proyectos, oportunidades/leads y/o tareas. También puedes asignar cualquier elemento (factura, pedido, presupuesto, intervención...) a un proyecto y obtener una vista transversal del proyecto
     Module410Name=Webcalendar
     Module410Desc=Interfaz con el calendario Webcalendar
     Module500Name=Impuestos y gastos especiales
    -Module500Desc=Gestión de gastos especiales (impuestos, gastos sociales, dividendos)
    +Module500Desc=Gestión de gastos especiales (impuestos, gastos sociales, dividendos...)
     Module510Name=Pago de salarios
    -Module510Desc=Registro y seguimiento del pago de los salarios de su empleado
    +Module510Desc=Registro y seguimiento del pago de los salarios de sus empleados
     Module520Name=Crédito
     Module520Desc=Gestión de créditos
     Module600Name=Notificaciones
    -Module600Desc=Enviar notificaciones por e-mail (desencadenados por algunos eventos) a los usuarios (configuración definida para cada usuario), los contactos de terceros (configuración definida en cada tercero) o e-mails fijos
    -Module600Long=Tenga en cuenta que este módulo está dedicado a enviar mensajes de e-mail en tiempo real cuando se produce un evento. Si está buscando una función para enviar recordatorios por e-mail de los eventos de su agenda, vaya a la configuración del módulo Agenda.
    +Module600Desc=Enviar notificaciones por e-mail desencadenados por algunos eventos a los usuarios (configuración definida para cada usuario), los contactos de terceros (configuración definida en cada tercero) o e-mails definidos
    +Module600Long=Tenga en cuenta que este módulo envía mensajes de e-mail en tiempo real cuando se produce un evento. Si está buscando una función para enviar recordatorios por e-mail de los eventos de su agenda, vaya a la configuración del módulo Agenda.
     Module610Name=Variantes de productos
    -Module610Desc=Permite la creación de variantes de productos en función de los atributos (color, tamaño, ...)
    +Module610Desc=Permite la creación de variantes de productos (color, talla, etc.)
     Module700Name=Donaciones
     Module700Desc=Gestión de donaciones
     Module770Name=Informes de gastos
    -Module770Desc=Gestión de informes de gastos (transporte, dietas, etc.)
    +Module770Desc=Gestión de informes de gastos (transporte, dietas...)
     Module1120Name=Presupuesto de proveedor
     Module1120Desc=Solicitud presupuesto y precios a proveedor
     Module1200Name=Mantis
    @@ -574,15 +580,15 @@ Module1200Desc=Interfaz con el sistema de seguimiento de incidencias Mantis
     Module1520Name=Generación Documento
     Module1520Desc=Generación de documentos de correo masivo
     Module1780Name=Etiquetas/Categorías
    -Module1780Desc=Crear etiquetas/Categoría(Productos, clientes,proveedores,contactos y miembros)
    +Module1780Desc=Crear etiquetas/categoría (productos, clientes, proveedores, contactos o miembros)
     Module2000Name=Editor WYSIWYG
    -Module2000Desc=Permite la edición de un área de texto con un editor avanzado (Basado en CKEditor)
    +Module2000Desc=Permite la edición de un área de texto usando CKEditor
     Module2200Name=Precios dinámicos
     Module2200Desc=Activar el uso de expresiones matemáticas para precios
     Module2300Name=Tareas programadas
     Module2300Desc=Gestión del Trabajo programado (alias cron)
     Module2400Name=Eventos/Agenda
    -Module2400Desc=Siga los eventos o citas. Registre eventos manuales en las agendas o deje a la aplicación registrar eventos automáticos para fines de seguimiento. Este es un módulo importante para una buena gestión de relaciones con clientes o proveedores.
    +Module2400Desc=Siga los eventos o citas. Deje que Dolibarr registre eventos automáticos a fin de realizar seguimiento o registre eventos manuales o reuniones. Este es el módulo más importante para una buena gestión de relaciones con clientes o proveedores.
     Module2500Name=GED / SGD
     Module2500Desc=Sistema de Gestión de Documentos / Gestión Electrónica de Contenidos. Organización automática de sus documentos generados o almacenados. Compártalos cuando lo necesite.
     Module2600Name=API/Servicios web (servidor SOAP)
    @@ -590,34 +596,38 @@ Module2600Desc=Habilitar los servicios Dolibarr SOAP proporcionando servicios AP
     Module2610Name=API/Servicios web (servidor REST)
     Module2610Desc=Habilitar los servicios Dolibarr REST proporcionando servicios API
     Module2660Name=Llamada Webservices (Cliente SOAP)
    -Module2660Desc=Habilitar los web services de Dolibarr (puede ser utilizado para grabar datos/solicitudes de servidores externos. De momento solo se soporta pedidos a proveedor)
    +Module2660Desc=Habilitar los servicios web de Dolibarr (puede ser utilizado para grabar datos/solicitudes de servidores externos. De momento solo se soporta pedidos a proveedor)
     Module2700Name=Gravatar
    -Module2700Desc=Utiliza el servicio en línea de Gravatar (www.gravatar.com) para mostrar fotos de los usuarios/miembros (que se encuentran en sus mensajes de correo electrónico). Necesita un acceso a Internet
    +Module2700Desc=Utiliza el servicio en línea de Gravatar (www.gravatar.com) para mostrar fotos de los usuarios/miembros (que se encuentran en sus correos electrónicos). Necesita un acceso a Internet
     Module2800Desc=Cliente FTP
     Module2900Name=GeoIPMaxmind
     Module2900Desc=Capacidades de conversión GeoIP Maxmind
     Module3100Name=Skype
     Module3100Desc=Añadir un botón Skype en las fichas de usuarios/terceros/contactos/miembros
     Module3200Name=Archivos inalterables
    -Module3200Desc=Activar el registro de algunos eventos empresariales en un registro no reversible. Los eventos se archivan en tiempo real. El registro es una tabla de sucesos encadenados que se pueden leer y exportar. Este módulo puede ser obligatorio en algunos países.
    +Module3200Desc=Activar el registro inalterable de eventos empresariales. Los eventos se archivan en tiempo real. El registro es una tabla de sucesos encadenados que se pueden leer y exportar. Este módulo puede ser obligatorio en algunos países.
     Module4000Name=RRHH
     Module4000Desc=Departamento de Recursos Humanos (gestión del departamento, contratos de empleados)
     Module5000Name=Multi-empresa
     Module5000Desc=Permite gestionar varias empresas
     Module6000Name=Flujo de trabajo
    -Module6000Desc=Workflow management (automatic creation of object and/or automatic status change)
    +Module6000Desc=Gestión de flujos de trabajo (creación automática de objeto y/o cambio de estado automático)
     Module10000Name=Sitios web
     Module10000Desc=Cree sitios web públicos con un editor WYSIWYG. Configure el servidor web (Apache, Nginx,...) para que apunte al directorio dedicado para tenerlo en línea en Internet.
     Module20000Name=Gestión de días libres retribuidos
    -Module20000Desc=Gestión de los días libres retribuidos de los empleados
    +Module20000Desc=Gestión de los días libres de los empleados
     Module39000Name=Lotes de productos
     Module39000Desc=Gestión de lotes o series, fechas de caducidad y venta de los productos
    +Module40000Name=Multimoneda
    +Module40000Desc=Usa divisas alternativas en precios y documentos
     Module50000Name=PayBox
    -Module50000Desc=Módulo para ofrecer pagos online aceptando pagos con tarjeta de Débito/Crédito via PayBox. Esto puede ser usado para permitir a tus clientes realizar pagos libres o pagos en un objeto de Dolibarr en particular (factura, pedido...)
    +Module50000Desc=Ofrece a los clientes pagos online vía PayBox (tarjetas de crédito/débito). Esto puede ser usado para permitir a sus clientes realizar pagos libres o pagos en un objeto de Dolibarr en particular (factura, pedido...)
     Module50100Name=TPV
     Module50100Desc=Módulo punto de venta (TPV)
    +Module50150Name=Terminales Punto de Venta
    +Module50150Desc=Módulo punto de venta (Pantalla táctil TPV)
     Module50200Name=Paypal
    -Module50200Desc=Módulo para ofrecer pagos online aceptando pagos utilizando PayPal (tarjeta de crédito o crédito PayPal). Esto puede ser usado para permitir a tus clientes realizar pagos libres o pagos en un objeto de Dolibarr en particular (factura, pedido...)
    +Module50200Desc=Ofrece a los clientes pagos online  vía PayPal (cuenta PayPal o tarjetas de crédito/débito). Esto puede ser usado para permitir a sus clientes realizar pagos libres o pagos en un objeto de Dolibarr en particular (factura, pedido...)
     Module50400Name=Contabilidad (avanzada)
     Module50400Desc=Gestión contable (doble partida, libros generales y auxiliares). Exporte a varios formatos de software de contabilidad.
     Module54000Name=PrintIPP
    @@ -628,7 +638,7 @@ Module59000Name=Márgenes
     Module59000Desc=Módulo para gestionar los márgenes de beneficio
     Module60000Name=Comisiones
     Module60000Desc=Módulo para gestionar las comisiones de venta
    -Module62000Name=Incoterm
    +Module62000Name=Incoterms
     Module62000Desc=Añade funciones para gestionar Incoterm
     Module63000Name=Recursos
     Module63000Desc=Gestionar recursos (impresoras, automóviles, salas, ...) puede compartirlos en  los eventos
    @@ -651,9 +661,9 @@ Permission32=Crear/modificar productos
     Permission34=Eliminar productos
     Permission36=Ver/gestionar los productos ocultos
     Permission38=Exportar productos
    -Permission41=Leer proyectos y tareas (proyectos compartidos y proyectos de los que soy contacto). También puede introducir tiempos consumidos en tareas asignadas (Hojas de tiempo).
    +Permission41=Leer proyectos y tareas (proyectos compartidos y proyectos de los que soy contacto). También puede introducir tiempos consumidos, para mí o mis subordinados, en tareas asignadas (Hojas de tiempo).
     Permission42=Crear/modificar proyectos (proyectos compartidos y proyectos de los que soy contacto). También puede crear tareas y asignar usuarios a proyectos y tareas
    -Permission44=Eliminar proyectos y tareas (compartidos o soy contacto)
    +Permission44=Eliminar proyectos (compartidos o soy contacto)
     Permission45=Exportar proyectos
     Permission61=Consultar intervenciones
     Permission62=Crear/modificar intervenciones
    @@ -750,12 +760,12 @@ Permission244=Ver contenido de categorías ocultas
     Permission251=Consultar otros usuarios
     PermissionAdvanced251=Consultar otros usuarios
     Permission252=Consultar los permisos de otros usuarios
    -Permission253=Crear/modificar otros usuarios y sus permisos
    +Permission253=Crear/modificar otros usuarios, grupos y permisos
     PermissionAdvanced253=Crear/modificar usuarios internos/externos y sus permisos
     Permission254=Crear/modificar únicamente usuarios externos
     Permission255=Modificar la contraseña de otros usuarios
     Permission256=Eliminar o desactivar otros usuarios
    -Permission262=Ampliar el acceso a todos los terceros (no sólo a los terceros que el usuario es comercial).<br>No efectivo para usuarios externos (Solamente usuarios internos. Los externos están limitados a ellos mismos para presupuestos, facturas, contratos, etc.).<br>No efectivo para proyectos (solamente permisos de visión y asignación de los proyectos).
    +Permission262=Ampliar el acceso a todos los terceros (no sólo a los terceros que el usuario es comercial).<br>No efectivo para usuarios externos (siempre están limitados a sus propios presupuestos, facturas, contratos, etc.).<br>No efectivo para proyectos (solamente permisos de visión y asignación de los proyectos).
     Permission271=Consultar el CA
     Permission272=Consultar las facturas
     Permission273=Emitir las facturas
    @@ -787,11 +797,9 @@ Permission401=Consultar haberes
     Permission402=Crear/modificar haberes
     Permission403=Validar haberes
     Permission404=Eliminar haberes
    -Permission501=Consultar contratos/salarios de empleados
    -Permission502=Crear/modificar contratos/salarios del empleado
     Permission511=Consultar pagos de salarios
     Permission512=Crear/modificar pagos de salarios
    -Permission514=Eliminar salarios
    +Permission514=Eliminar pagos de salarios
     Permission517=Exportar salarios
     Permission520=Consultar Créditos
     Permission522=Crear/modificar Créditos
    @@ -844,11 +852,11 @@ Permission1251=Lanzar las importaciones en masa a la base de datos (carga de dat
     Permission1321=Exportar facturas a clientes, campos adicionales y cobros
     Permission1322=Reabrir una factura pagada
     Permission1421=Exportar pedidos de clientes y campos adicionales
    -Permission20001=Leer peticiones días retribuidos (suyos y subordinados)
    -Permission20002=Crear/modificar peticiones días retribuidos (suyos y subordinados)
    +Permission20001=Leer peticiones días retribuidos (suyos y de sus subordinados)
    +Permission20002=Crear/modificar peticiones días retribuidos (suyos y de sus subordinados)
     Permission20003=Eliminar peticiones de días retribuidos
     Permission20004=Leer todas las peticiones de días retribuidos (incluso no subordinados)
    -Permission20005=Crear/modificar las peticiones de días retribuidos (incluso no subordinados)
    +Permission20005=Crear/modificar las peticiones de días retribuidos para todos (incluso no subordinados)
     Permission20006=Administrar días retribuidos (configuración y actualización de balance)
     Permission23001=Consultar Trabajo programado
     Permission23002=Crear/actualizar Trabajo programado
    @@ -911,8 +919,8 @@ DictionaryAccountancyJournal=Diarios contables
     DictionaryEMailTemplates=Plantillas E-Mails
     DictionaryUnits=Unidades
     DictionaryProspectStatus=Estado cliente potencial
    -DictionaryHolidayTypes=Tipos de honorarios
    -DictionaryOpportunityStatus=Estado de oportunidad para el proyecto/lead
    +DictionaryHolidayTypes=Tipos de vacaciones
    +DictionaryOpportunityStatus=Estado de oportunidad para el proyecto/oportunidad
     DictionaryExpenseTaxCat=Informe de gastos - Categorías de transporte
     DictionaryExpenseTaxRange=Informe de gastos - Rango por categoría de transporte
     SetupSaved=Configuración guardada
    @@ -921,9 +929,9 @@ BackToModuleList=Volver a la lista de módulos
     BackToDictionaryList=Volver a la lista de diccionarios
     TypeOfRevenueStamp=Tipos de sellos fiscales
     VATManagement=Gestión IVA
    -VATIsUsedDesc=Por defecto cuando se crean presupuestos, facturas, pedidos, etc. el tipo de IVA sigue la regla estándar seleccionada: <br>. Si el vendedor no está sujeto a IVA, entonces IVA por defecto es 0. Fin de la regla <br> Si el país del vendedor =  país del comprador, entonces el IVA por defecto es igual al IVA del producto en el país del vendedor. Fin de la regla. <br> Si el vendedor y el comprador son de la Comunidad Europea y los bienes son productos de transporte (coche, barco, avión), el IVA por defecto es 0 (El IVA debe ser pagado por el comprador a la hacienda de su país y no al vendedor). Fin de la regla. <br> Si el vendedor y el comprador están ambos en la Comunidad Europea y el comprador no es una empresa, entonces el IVA por defecto es el IVA del producto vendido. Fin de la regla. <br> Si el vendedor y el comprador son de la Comunidad Europea y el comprador es una empresa, entonces el IVA es 0 por defecto. Fin de la regla. <br> En cualquier otro caso el IVA propuesto por defecto es 0. Fin de la regla.
    +VATIsUsedDesc=Por defecto cuando se crean presupuestos, facturas, pedidos, etc. el tipo de IVA sigue la regla estándar seleccionada: <br>. Si el vendedor no está sujeto a IVA, entonces IVA por defecto es 0. Fin de la regla <br>Si (el país del vendedor =  país del comprador), entonces el IVA por defecto es igual al IVA del producto en el país del vendedor. Fin de la regla. <br>Si el vendedor y el comprador son de la Comunidad Europea y los bienes son productos de transporte (coche, barco, avión), el IVA por defecto es 0. Esta regla depende del país del vendedor - por favor consulta tu asesor contable. El IVA debe ser pagado por el comprador a la hacienda de su país y no al vendedor. Fin de la regla.<br> Si el vendedor y el comprador están ambos en la Comunidad Europea y el comprador no es una empresa (no tiene CIF intracomunitario), entonces el IVA por defecto es el IVA del país del vendedor. Fin de la regla. <br> Si el vendedor y el comprador son de la Comunidad Europea y el comprador es una empresa (con CIF intracomunitario), entonces el IVA es 0 por defecto. Fin de la regla.<br> En cualquier otro caso el IVA propuesto por defecto es 0. Fin de la regla.
     VATIsNotUsedDesc=El tipo de IVA propuesto por defecto es 0. Este es el caso de asociaciones, particulares o algunas pequeñas sociedades.
    -VATIsUsedExampleFR=En Francia, se trata de las sociedades u organismos que eligen un régimen fiscal general (General simplificado o General normal), régimen en el cual se declara el IVA.
    +VATIsUsedExampleFR=En Francia, se trata de las sociedades u organismos que eligen un régimen fiscal general (General simplificado o General normal). Régimen en el cual se declara el IVA.
     VATIsNotUsedExampleFR=En Francia, se trata de asociaciones exentas de IVA o sociedades, organismos o profesiones liberales que han elegido el régimen fiscal de módulos (IVA en franquicia), pagando un IVA en franquicia sin hacer declaración de IVA. Esta elección hace aparecer la anotación  "IVA no aplicable - art-293B del CGI" en las facturas.
     ##### Local Taxes #####
     LTRate=Tasa
    @@ -935,20 +943,20 @@ LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=No sujeto
     LocalTax2IsUsedDesc=Uso de un 3er. tipo de impuesto (Distinto del IVA)
    -LocalTax2IsNotUsedDesc=No usar un 3er. tipo de impuesto (Distinto del IVA)
    +LocalTax2IsNotUsedDesc=No usar un 3er tipo de impuesto (Distinto del IVA)
     LocalTax2Management=Gestión 3er. tipo de impuesto
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= Gestión RE
    -LocalTax1IsUsedDescES= El tipo de RE propuesto por defecto en las creaciones de presupuestos, facturas, pedidos, etc. Responde a la siguiente regla:<br>Si el comprador no está sujeto a RE, RE por defecto=0. Final de regla.<br>Si el comprador está sujeto a RE entonces se aplica valor de RE por defecto. Final de regla.<br>
    -LocalTax1IsNotUsedDescES= El tipo de RE propuesto por defecto es 0. Final de regla.
    -LocalTax1IsUsedExampleES= En España, se trata de personas físicas: autónomos sujetos a unos epígrafes concretos del IAE.
    -LocalTax1IsNotUsedExampleES= En España, se trata de empresas jurídicas: Sociedades limitadas, anónimas, etc. y personas físicas (autónomos) sujetos a ciertos epígrafes del IAE.
    -LocalTax2ManagementES= Gestión IRPF
    -LocalTax2IsUsedDescES= El tipo de IRPF propuesto por defecto en las creaciones de presupuestos, facturas, pedidos, etc. Responde a la siguiente regla:<br>Si el vendedor no está sujeto a IRPF, IRPF por defecto=0. Final de regla.<br>Si el vendedor está sujeto a IRPF entonces se aplica valor de IRPF por defecto. Final de regla.<br>
    -LocalTax2IsNotUsedDescES= El tipo de IRPF propuesto por defecto es 0. Final de regla.
    -LocalTax2IsUsedExampleES= En España, se trata de personas físicas: autónomos y profesionales independientes que prestan servicios y empresas que han elegido el régimen fiscal de módulos.
    -LocalTax2IsNotUsedExampleES= En España, se trata de empresas no sujetas al régimen fiscal de módulos.
    +LocalTax1ManagementES=Gestión RE
    +LocalTax1IsUsedDescES=El tipo de RE propuesto por defecto en las creaciones de presupuestos, facturas, pedidos, etc. Responde a la siguiente regla:<br>Si el comprador no está sujeto a RE, RE por defecto=0. Final de regla.<br>Si el comprador está sujeto a RE entonces se aplica valor de RE por defecto. Final de regla.<br>
    +LocalTax1IsNotUsedDescES=El tipo de RE propuesto por defecto es 0. Final de regla.
    +LocalTax1IsUsedExampleES=En España, se trata de personas físicas: autónomos sujetos a unos epígrafes concretos del IAE.
    +LocalTax1IsNotUsedExampleES=En España, se trata de empresas jurídicas: Sociedades limitadas, anónimas, etc. y personas físicas (autónomos) sujetos a ciertos epígrafes del IAE.
    +LocalTax2ManagementES=Gestión IRPF
    +LocalTax2IsUsedDescES=El tipo de IRPF propuesto por defecto en las creaciones de presupuestos, facturas, pedidos, etc. Responde a la siguiente regla:<br>Si el vendedor no está sujeto a IRPF, IRPF por defecto=0. Final de regla.<br>Si el vendedor está sujeto a IRPF entonces se aplica valor de IRPF por defecto. Final de regla.<br>
    +LocalTax2IsNotUsedDescES=El tipo de IRPF propuesto por defecto es 0. Final de regla.
    +LocalTax2IsUsedExampleES=En España, se trata de personas físicas: autónomos y profesionales independientes que prestan servicios y empresas que han elegido el régimen fiscal de módulos.
    +LocalTax2IsNotUsedExampleES=En España, se trata de empresas no sujetas al régimen fiscal de módulos.
     CalcLocaltax=Informes de impuestos locales
     CalcLocaltax1=Ventas - Compras
     CalcLocaltax1Desc=Los informes se calculan con la diferencia entre las ventas y las compras
    @@ -958,6 +966,7 @@ CalcLocaltax3=Ventas
     CalcLocaltax3Desc=Los informes se basan en el total de las ventas
     LabelUsedByDefault=Etiqueta que se utilizará si no se encuentra traducción para este código
     LabelOnDocuments=Etiqueta sobre documentos
    +LabelOrTranslationKey=Clave de traducción o cadena
     NbOfDays=Nº de días
     AtEndOfMonth=A fin de mes
     CurrentNext=Actual/Siguiente
    @@ -984,7 +993,7 @@ DatabaseUser=Login de la base de datos
     DatabasePassword=Contraseña de la base de datos
     Tables=Tablas
     TableName=Nombre de la tabla
    -NbOfRecord=Nº Reg.
    +NbOfRecord=Nº de registros
     Host=Servidor
     DriverType=Tipo de driver
     SummarySystem=Resumen de la información de sistemas Dolibarr
    @@ -996,7 +1005,7 @@ Skin=Tema visual
     DefaultSkin=Tema visual por defecto
     MaxSizeList=Longitud máxima de listados
     DefaultMaxSizeList=Longitud máxima de registros en listados
    -DefaultMaxSizeShortList=Longitud máxima de registros en listados
    +DefaultMaxSizeShortList=Longitud máxima de registros en listados cortos (por ejemplo en ficha cliente)
     MessageOfDay=Mensaje del día
     MessageLogin=Mensaje del login
     LoginPage=Página de login
    @@ -1005,7 +1014,7 @@ PermanentLeftSearchForm=Zona de búsqueda permanente del menú izquierdo
     DefaultLanguage=Idioma por defecto a utilizar (código idioma)
     EnableMultilangInterface=Activar interfaz multi-idioma
     EnableShowLogo=Mostrar el logotipo en el menú de la izquierda
    -CompanyInfo=Información de la empresa/organización
    +CompanyInfo=Empresa/Organización
     CompanyIds=Identificación de la empresa/organización
     CompanyName=Nombre/Razón social
     CompanyAddress=Dirección
    @@ -1023,25 +1032,25 @@ ShowBugTrackLink=Mostrar enlace "<strong>%s</strong>"
     Alerts=Alertas
     DelaysOfToleranceBeforeWarning=Plazos de tolerancia antes de alerta
     DelaysOfToleranceDesc=Esta pantalla permite configura los plazos de tolerancia antes de que se alerte con el símbolo %s, sobre cada elemento en retraso.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolerancia de retraso (en días) sobre eventos planificados (eventos de la agnda) todavía no completados
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolerancia de retraso antes de la alerta (en días) sobre proyectos no cerrados a tiempo
    -Delays_MAIN_DELAY_TASKS_TODO=Tolerancia de retraso (en días) sobre tareas planificadas (tareas de proyectos) todavía no completadas
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Tolerancia de retraso antes de la alerta (en días) sobre pedidos no procesados
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Tolerancia de retraso antes de la alerta (en días) sobre presupuestos a cerrar
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Tolerancia de retraso antes de la alerta (en días) sobre presupuestos no facturados
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerancia de retraso antes de la alerta (en días) sobre servicios a activar
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerancia de retraso antes de la alerta (en días) sobre servicios expirados
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerancia de retraso antes de la alerta (en días) sobre facturas de proveedor impagadas
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerancia de retraso antes de la alerta (en días) sobre facturas a cliente impagadas
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerancia de retraso antes de la alerta (en días) sobre conciliaciones bancarias pendientes
    -Delays_MAIN_DELAY_MEMBERS=Tolerancia de retraso entes de la alerta  (en días) sobre cotizaciones adherentes en retraso
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerancia de retraso entes de la alerta  (en días) sobre cheques a ingresar
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerancia de retraso entes de la alerta  (en días) sobre gastos a aprobar
    -SetupDescription1=El área de configuración sirve para configurar los parámetros antes de empezar a usar Dolibarr
    -SetupDescription2=Los dos pasos de configuración obligatorios son los siguientes (las dos primeras entradas en el menú de configuración izquierdo):
    -SetupDescription3=Los parámetros de configuración del menú <a href="%s">%s->%s</a> son necesarios ya que los datos presentados se utilizan en las pantallas Dolibarr y para personalizar el comportamiento por defecto del software (para funciones relacionadas con el país, por ejemplo).
    -SetupDescription4=Los parámetros de configuración del menú <a href="%s">%s -> %s</a> son necesarios porque Dolibarr es un ERP/CRM una colección de varios módulos, todos más o menos independientes. Se añadirán nuevas funcionalidades a los menús por cada módulo que se active.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Retraso (en días) sobre eventos planificados (eventos de la agenda) todavía no completados
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Retraso antes de la alerta (en días) sobre proyectos no cerrados a tiempo
    +Delays_MAIN_DELAY_TASKS_TODO=Retraso (en días) sobre tareas planificadas (tareas de proyectos) todavía no completadas
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Retraso antes de la alerta (en días) sobre pedidos no procesados
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Retraso antes de la alerta (en días) sobre pedidos a proveedores no procesados
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Retraso antes de la alerta (en días) sobre presupuestos a cerrar
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Retraso antes de la alerta (en días) sobre presupuestos no facturados
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Retraso antes de la alerta (en días) sobre servicios a activar
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Retraso antes de la alerta (en días) sobre servicios expirados
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Retraso antes de la alerta (en días) sobre facturas de proveedor impagadas
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Retraso antes de la alerta (en días) sobre facturas a cliente impagadas
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Retraso antes de la alerta (en días) sobre conciliaciones bancarias pendientes
    +Delays_MAIN_DELAY_MEMBERS=Retraso antes de la alerta  (en días) sobre cotizaciones de miembros en retraso
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Retraso entes de la alerta  (en días) sobre cheques a ingresar
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Retraso entes de la alerta  (en días) sobre informes de gastos a aprobar
    +SetupDescription1=Antes de comenzar a usar Dolibarr, se deben definir algunos parámetros iniciales y habilitar/configurar los módulos.
    +SetupDescription2=Los pasos de configuración obligatorios son los 2 primeros pasos en el menú de configuración, a saber:
    +SetupDescription3=Los parámetros del menú <a href="%s">%s->%s</a> <br>Parámetros básicos para personalizar el comportamiento por defecto de Dolibarr (por ejemplo características relacionadas con el país)
    +SetupDescription4=<a href="%s">%s -> %s</a> <br>Dolibarr ERP/CRM es una colección de varios módulos, todos más o menos independientes. Los módulos relevantes para tus necesidades deben ser activados y configurados. Se añadirán nuevas funcionalidades a los menús por cada módulo que se active.
     SetupDescription5=Las otras entradas de configuración gestionan parámetros opcionales.
     LogEvents=Auditoría de la seguridad de eventos
     Audit=Auditoría
    @@ -1060,16 +1069,16 @@ LogEventDesc=Puede habilitar el registro de eventos de seguridad Dolibarr aquí.
     AreaForAdminOnly=Los parámetros de configuración solamente pueden ser tratados por <b>usuarios administrador</b>
     SystemInfoDesc=La información del sistema es información técnica accesible solamente en solo lectura a los administradores.
     SystemAreaForAdminOnly=Esta área solo es accesible a los usuarios de tipo administradores. Ningún permiso Dolibarr permite extender el círculo de usuarios autorizados a esta área.
    -CompanyFundationDesc=Edite en esta página toda la información conocida de la empresa o institución que necesita gestionar (Para ello haga clic en el botón "%s" o "%s" a pié de página)
    -AccountantDesc=Edite en esta página toda la información conocida de su contable/auditor
    +CompanyFundationDesc=Edite la información de la empresa o institución. Haga clic en el botón "%s" o "%s" a pié de página
    +AccountantDesc=Edite los detalles de su contable/auditor
     AccountantFileNumber=Número de archivo
     DisplayDesc=Puede encontrar aquí todos los parámetros relacionados con la apariencia de Dolibarr
     AvailableModules=Módulos disponibles
     ToActivateModule=Para activar los módulos, vaya al área de Configuración (Inicio->Configuración->Módulos).
     SessionTimeOut=Timeout de sesiones
    -SessionExplanation=Asegura que el período de sesiones no expirará antes de este momento. Sin embargo, la gestión del período de sesiones de PHP no garantiza que el período de sesiones expira después de este período: Este será el caso si un sistema de limpieza del caché de sesiones es activo. <br> Nota: Sin mecanismo especial, el mecanismo interno para limpiar el período de sesiones de PHP todos los accesos <b>%s/%s</b>, pero sólo en torno al acceso de otros períodos de sesiones.
    +SessionExplanation=Este número garantiza que la sesión nunca caducará antes de este retraso, si el limpiador de sesión se realiza mediante un limpiador de sesión interno de PHP (y nada más). El limpiador interno de sesiones de PHP no garantiza que la sesión caduque después de este retraso. Expirará, después de este retraso, y cuando se ejecute el limpiador de sesiones, por lo que cada acceso <b> %s/%s </b>, pero solo durante el acceso realizado por otras sesiones. <br> Nota: en algunos servidores con un mecanismo externo de limpieza de sesión (cron bajo debian, ubuntu...), las sesiones se pueden destruir después de un período definido por una configuración externa, sin importar el valor introducido aquí
     TriggersAvailable=Triggers disponibles
    -TriggersDesc=Los triggers son archivos que, une vez depositados en el directorio <b>htdocs/core/triggers</b>, modifican el comportamiento del workflow de Dolibarr. Realizan acciones suplementarias, desencadenadas por los eventos Dolibarr (creación de empresa, validación factura, cierre contrato, etc).
    +TriggersDesc=Los triggers son archivos que, une vez copiados en el directorio <b>htdocs/core/triggers</b>, modifican el comportamiento del workflow de Dolibarr. Realizan acciones suplementarias, desencadenadas por los eventos Dolibarr (creación de empresa, validación factura...).
     TriggerDisabledByName=Triggers de este archivo desactivados por el sufijo <b>-NORUN</b> en el nombre del archivo.
     TriggerDisabledAsModuleDisabled=Triggers de este archivo desactivados ya que el módulo <b>%s</b> no está activado.
     TriggerAlwaysActive=Triggers de este archivo siempre activos, ya que los módulos Dolibarr relacionados están activados
    @@ -1109,7 +1118,7 @@ YourPHPDoesNotHaveSSLSupport=Funciones SSL no disponibles en su PHP
     DownloadMoreSkins=Más temas para descargar
     SimpleNumRefModelDesc=Devuelve el número bajo el formato %syymm-nnnn donde yy es el año, mm el mes y nnnn un contador secuencial sin ruptura y sin volver a 0
     ShowProfIdInAddress=Mostrar el identificador profesional en las direcciones de los documentos
    -ShowVATIntaInAddress=Ocultar el identificador IVA en las direcciones de los documentos
    +ShowVATIntaInAddress=Ocultar el CIF intracomunitario en las direcciones de los documentos
     TranslationUncomplete=Traducción parcial
     MAIN_DISABLE_METEO=Deshabilitar la vista meteorológica
     MeteoStdMod=Modo estándar
    @@ -1118,7 +1127,7 @@ MeteoPercentageMod=Modo de porcentaje
     MeteoPercentageModEnabled=Modo Porcentaje habilitado
     MeteoUseMod=Clic para usar %s
     TestLoginToAPI=Comprobar conexión a la API
    -ProxyDesc=Algunas de las características de Dolibarr requieren que el servidor tenga acceso a Internet. Defina aqui los parámetros para dicho acceso. Si el servidor está detrás de un proxy, estos parámetros indican a Dolibarr cómo pasarlo.
    +ProxyDesc=Algunas de las características de Dolibarr requieren que el servidor tenga acceso a Internet. Defina aquí los parámetros para dicho acceso. Si el servidor está detrás de un proxy, estos parámetros indican a Dolibarr cómo acceder a internet a través de él.
     ExternalAccess=Acceso externo
     MAIN_PROXY_USE=Usar un servidor proxy (si no acceso directo a Internet)
     MAIN_PROXY_HOST=Nombre/Dirección del servidor proxy
    @@ -1152,7 +1161,7 @@ TranslationKeySearch=Buscar una clave de traducción o cadena
     TranslationOverwriteKey=Sobreescribir una cadena traducida
     TranslationDesc=Cómo se establece el idioma de la aplicación a usar: :<br>* Sistema: menu <strong>Inicio - Configuración - Entorno</strong><br>* Por usario: pestaña <strong>Interfaz usuario</strong> de la ficha del usuario (clic en el nombre de usuario en la parte superior de la pantalla).
     TranslationOverwriteDesc=También puede reemplazar cadenas llenando la tabla siguiente. Elija su idioma en la lista desplegable "%s",  inserte la clave de la traducción en "%s" y su nueva traducción en "%s"
    -TranslationOverwriteDesc2=Puede utilizar otra pestaña para ayudarle a saber clave a utilizar
    +TranslationOverwriteDesc2=Puede utilizar la otra pestaña para ayudarle a saber la clave a utilizar
     TranslationString=Cadena traducida
     CurrentTranslationString=Cadena traducida actual
     WarningAtLeastKeyOrTranslationRequired=Se necesita un criterio de búsqueda al menos por cadena de clave o traducción
    @@ -1163,7 +1172,7 @@ TotalNumberOfActivatedModules=Número total de módulos activados: <b>%s</b> / <
     YouMustEnableOneModule=Debe activar al menos un módulo.
     ClassNotFoundIntoPathWarning=No se ha encontrado la clase %s en su path PHP
     YesInSummer=Sí en verano
    -OnlyFollowingModulesAreOpenedToExternalUsers=Atención: únicamente los módulos siguientes están disponibles a usuarios externos (sea cual sea el permiso de dichos usuarios):
    +OnlyFollowingModulesAreOpenedToExternalUsers=Atención: únicamente los módulos siguientes están disponibles a usuarios externos (sea cual sea el permiso de dichos usuarios) y solo si se otorgan permisos:
     SuhosinSessionEncrypt=Almacenamiento de sesiones cifradas por Suhosin
     ConditionIsCurrently=Actualmente la condición es %s
     YouUseBestDriver=Está usando el driver %s, actualmente es el mejor driver disponible.
    @@ -1175,7 +1184,8 @@ BrowserIsOK=Usa el navegador web %s. Este navegador está optimizado para la seg
     BrowserIsKO=Usa el navegador web %s.  Este navegador es una mala opción para la seguridad, rendimiento y fiabilidad. Aconsejamos utilizar Firefox, Chrome, Opera o Safari.
     XDebugInstalled=XDebug está cargado.
     XCacheInstalled=XCache está cargado
    -AddRefInList=Mostrar código de cliente/proveedor en los listados (y selectores) y enlaces. Los terceros aparecerán con el nombre "CC12345 - SC45678 - The big company coorp", en lugar de "The big company coorp".
    +AddRefInList=Mostrar código de cliente/proveedor en los listados (y selectores) y enlaces.<br>Los terceros aparecerán con el nombre "CC12345 - SC45678 - The big company coorp", en lugar de "The big company coorp".
    +AddAdressInList=Mostrar la dirección del cliente/proveedor en los listados (y selectores) <br>Los terceros aparecerán con el nombre "The big company coorp - 21 jump street 123456 Big town - USA ", en lugar de "The big company coorp".
     AskForPreferredShippingMethod=Consultar por el método preferido de envío a terceros.
     FieldEdition=Edición del campo %s
     FillThisOnlyIfRequired=Ejemplo: +2 (Complete sólo si se registra una desviación del tiempo en la exportación)
    @@ -1195,19 +1205,19 @@ UserMailRequired=E-Mail necesario para crear un usuario nuevo
     HRMSetup=Setup del módulo RRHH
     ##### Company setup #####
     CompanySetup=Configuración del módulo terceros
    -CompanyCodeChecker=Módulo de generación y control de los códigos de terceros (clientes/proveedores)
    -AccountCodeManager=Módulo de generación de los códigos contables (clientes/proveedores)
    +CompanyCodeChecker=Opciones para la generación automática de códigos de clientes / proveedores.
    +AccountCodeManager=Opciones para la generación automática de cuentas contables de clientes / proveedores.
     NotificationsDesc=Las notificaciones por e-mail le permite enviar silenciosamente e-mails  automáticos, para algunos eventos Dolibarr. Se pueden definir los destinatarios:
     NotificationsDescUser=* por usuarios, un usuario a la vez.
     NotificationsDescContact=* por contactos de terceros (clientes o proveedores), un contacto a la vez.
     NotificationsDescGlobal=* o configurando destinatarios globlalmente en la configuración del módulo.
    -ModelModules=Modelos de documentos
    +ModelModules=Plantillas de documentos
     DocumentModelOdt=Generación desde los documentos OpenDocument (Archivo .ODT OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Marca de agua en los documentos borrador
     JSOnPaimentBill=Activar función para autocompletar las líneas de pago en la entrada de pagos
     CompanyIdProfChecker=Reglas sobre los ID profesionales
     MustBeUnique=¿Debe ser único?
    -MustBeMandatory=¿Obligatorio para crear terceros?
    +MustBeMandatory=¿Obligatorio para crear terceros (si el CIF o tipo de compañía definido)?
     MustBeInvoiceMandatory=¿Obligatorio para validar facturas?
     TechnicalServicesProvided=Servicios técnicos prestados
     #####DAV #####
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Un vínculo de exportación del calendario en formato <b>
     BillsSetup=Configuración del módulo Facturas
     BillsNumberingModule=Módulo de numeración de facturas y abonos
     BillsPDFModules=Modelo de documento de facturas
    +BillsPDFModulesAccordindToInvoiceType=Modelos de documentos de facturas según tipo de factura
     PaymentsPDFModules=Modelo de documentos de pago
     CreditNote=Abono
     CreditNotes=Abonos
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Gestionar un login para cada miembro
     AdherentMailRequired=E-Mail obligatorio para crear un miembro nuevo
     MemberSendInformationByMailByDefault=Casilla de verificación para enviar el correo de confirmación (validación ó nueva cotización) a los miembros es por defecto "sí"
     VisitorCanChooseItsPaymentMode=El visitante puede elegir entre los modos de pago disponibles
    +MEMBER_REMINDER_EMAIL=Habilitar recordatorio de eventos <b>por e-mail</b> de suscripciones expiradas. Nota: El módulo <strong>%s</strong> debe estar habilitado y configurado correctamente para que el recordatorio se envíe.
     ##### LDAP setup #####
     LDAPSetup=Configuración del módulo LDAP
     LDAPGlobalParameters=Parámetros globales
    @@ -1429,10 +1441,11 @@ CompressionOfResources=Compresión de las respuestas HTTP
     CompressionOfResourcesDesc=Por ejemplo, utilizando la directiva Apache "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=La detección automática no es posible con el navegador actual
     DefaultValuesDesc=Puede definir/forzar aquí el valor predeterminado que desea obtener cuando cree un nuevo registro y/o defina filtros u ordenaciones en sus registros de listados.
    -DefaultCreateForm=Valores predeterminados (en formularios para crear)
    +DefaultCreateForm=Valores predeterminados (en formularios de creación)
     DefaultSearchFilters=Filtros de búsqueda por defecto
     DefaultSortOrder=Ordenaciones por defecto
     DefaultFocus=Campos de enfoque predeterminados
    +DefaultMandatory=Campos obligatorios
     ##### Products #####
     ProductSetup=Configuración del módulo Productos
     ServiceSetup=Configuración del módulo Servicios
    @@ -1441,7 +1454,7 @@ NumberOfProductShowInSelect=Nº de productos máx. en las listas (0=sin límite)
     ViewProductDescInFormAbility=Visualización de las descripciones de los productos en los formularios
     MergePropalProductCard=Activar en el producto/servicio la pestaña Documentos una opción para fusionar documentos PDF de productos al presupuesto PDF azur si el producto/servicio se encuentra en el presupuesto
     ViewProductDescInThirdpartyLanguageAbility=Visualización de las descripciones de productos en el idioma del tercero
    -UseSearchToSelectProductTooltip=También si usted tiene una gran cantidad de producto (> 100 000), puede aumentar la velocidad mediante el establecimiento PRODUCT_DONOTSEARCH_ANYWHERE constante a 1 en Configuración-> Otros. La búsqueda será limitada a la creación de cadena.
    +UseSearchToSelectProductTooltip=También si usted tiene una gran cantidad de producto (> 100 000), puede aumentar la velocidad mediante el establecimiento PRODUCT_DONOTSEARCH_ANYWHERE constante a 1 en Configuración-> Otros. La búsqueda será limitada al inicio de la cadena.
     UseSearchToSelectProduct=Esperar a que presione una tecla antes de cargar el contenido de la lista combinada de productos (Esto puede incrementar el rendimiento si tiene un gran número de productos) 
     SetDefaultBarcodeTypeProducts=Tipo de código de barras utilizado por defecto para los productos
     SetDefaultBarcodeTypeThirdParties=Tipo de código de barras utilizado por defecto para los terceros
    @@ -1520,9 +1533,9 @@ FCKeditorForMailing= Creación/edición WYSIWIG de los E-Mails (Utilidades->E-Ma
     FCKeditorForUserSignature=Creación/edición WYSIWIG de la firma de usuarios
     FCKeditorForMail=Creación/edición WYSIWIG de todos los e-mails ( excepto Utilidades->E-Mailings)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=La conexión se ha establecido, pero la base de datos no parece de OSCommerce.
    -OSCommerceTestOk=La conexión al servidor '%s' sobre la base '%s' por el usuario '%s' es correcta.
    -OSCommerceTestKo1=La conexión al servidor '%s' sobre la base '%s' por el usuario '%s' no se pudo efectuar.
    +OSCommerceErrorConnectOkButWrongDatabase=La conexión se ha establecido, pero la base de datos no parece de OSCommerce. (la clave %s no se encuentra en la tabla %s).
    +OSCommerceTestOk=Conectado correctamente al servidor '%s', base de datos '%s', usuario '%s'.
    +OSCommerceTestKo1=La conexión al servidor '%s' sobre la base '%s' no se pudo efectuar.
     OSCommerceTestKo2=La conexión al servidor '%s' por el usuario '%s' ha fallado.
     ##### Stock #####
     StockSetup=Configuración del módulo Almacenes
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=La carga del IVA es: <br>-en el envío de los bienes (en la
     OptionVatDebitOptionDesc=La carga del IVA es: <br>-en el envío de los bienes (en la práctica se usa la fecha de la factura)<br>-sobre la facturación de los servicios
     OptionPaymentForProductAndServices=Base de efectivo para productos y servicios
     OptionPaymentForProductAndServicesDesc=La carga del IVA es: <br>-en el pago de los bienes <br>-sobre el pago por los servicios
    -SummaryOfVatExigibilityUsedByDefault=Tiempo de exigibilidad de IVA por defecto según la opción eligida
    +SummaryOfVatExigibilityUsedByDefault=Tiempo de exigibilidad de IVA por defecto según la opción elegida
     OnDelivery=En la entrega
     OnPayment=En el pago
     OnInvoice=En la factura
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Configuración del módulo Proyectos
     ProjectsModelModule=Modelo de documento para informes de proyectos
     TasksNumberingModules=Módulo numeración de tareas
     TaskModelModule=Módulo de documentos informes de tareas
    -UseSearchToSelectProject=Espere a cargar el contenido de la lista de proyectos antes de pulsar una tecla (Esto puede aumentar el rendimiento si tiene una gran cantidad de proyectos, pero es menos conveniente)
    +UseSearchToSelectProject=Esperar a que presione una tecla antes de cargar el contenido de la lista combinada de proyectos. <br> Esto puede incrementar el rendimiento si tiene un gran número de proyectos, pero es menos conveniente.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Periodos contables
    @@ -1688,7 +1701,7 @@ ListOfNotificationsPerUser=Listado de notificaciones por usuario*
     ListOfNotificationsPerUserOrContact=Listado de notificaciones por usuario* o por contacto**
     ListOfFixedNotifications=Listado de notificaciones fijas
     GoOntoUserCardToAddMore=Vaya a la pestaña "Notificaciones" de un usuario para añadir o elliminar notificaciones a usuarios
    -GoOntoContactCardToAddMore=Vaya a la pestaña "Notificaciones" de un contacto de tercero para añadir o eliminar notificaciones para contactos/direcciones
    +GoOntoContactCardToAddMore=Vaya a la pestaña "Notificaciones" de un tercero para añadir o eliminar notificaciones a contactos/direcciones
     Threshold=Valor mínimo/umbral
     BackupDumpWizard=Asistente para crear una copia de seguridad de la base de datos
     SomethingMakeInstallFromWebNotPossible=No es posible la instalación de módulos externos desde la interfaz web por la siguiente razón:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=La instalación de módulos externos d
     ConfFileMustContainCustom=La instalación o construcción de un módulo externo desde la aplicación necesita guardar los archivos del módulo en el directorio <strong>%s</strong>. Para que este directorio sea procesado por Dolibarr, debe configurar su <strong>conf/conf.php</strong> para agregar las 2 líneas de directiva: <br><strong>$dolibarr_main_url_root_alt = '/custom';</strong><br><strong> $dolibarr_main_document_root_alt = '%s/custom';</strong>
     HighlightLinesOnMouseHover=Resaltar líneas de los listados cuando el ratón pasa por encima de ellas
     HighlightLinesColor=Resalta el color de la línea cuando el ratón pasa por encima (mantener vacío para no resaltar)
    +HighlightLinesChecked=Resalta el color de la línea cuando el ratón pasa por encima (mantener vacío para no resaltar)
     TextTitleColor=Color para la página de título
     LinkColor=Color para los enlaces
     PressF5AfterChangingThis=Para que sea eficaz el cambio, presione CTRL+F5 en el teclado o borre la memoria caché del navegador después de cambiar este valor
    @@ -1779,7 +1793,7 @@ LandingPage=Landing page
     SamePriceAlsoForSharedCompanies=Si se utiliza un módulo multi-empresa, con la opción "precio único", el precio será el mismo para todas las empresas si los productos son compartidos entre ellas
     ModuleEnabledAdminMustCheckRights=El módulo ha sido activado. Los permisos para los módulos activados se dan solamente a los usuarios administradores. Deberá otorgar permisos manualmente a otros usuarios si es necesario.
     UserHasNoPermissions=Este usuario no tiene permisos definidos
    -TypeCdr=Use "Ninguno" si la fecha del plazo de pago es la fecha de factura más un delta en días (delta es el campo "Nº de días")<br>Use "A final de mes", si, después del delta, la fecha debe aumentarse para llegar al final del mes (+ opcional "Offset" en días)<br>Use "Actual/Siguiente" para tener la fecha del plazo de pago sea el primer N de cada mes (N se almacena en el campo "Nº de días")
    +TypeCdr=Use "Ninguno" si la fecha del plazo de pago es la fecha de factura más un delta en días (delta es el campo "%s")<br>Use "A final de mes", si, después del delta, la fecha debe aumentarse para llegar al final del mes (+ opcional "%s" en días)<br>Use "Actual/Siguiente" para tener la fecha del plazo de pago sea el primer N de cada mes (el campo delta "%s", N se almacena en el campo "%s")
     BaseCurrency=Moneda de referencia de la empresa (entrar en la configuración de la empresa para cambiar esto)
     WarningNoteModuleInvoiceForFrenchLaw=Este módulo %s cumple con las leyes francesas (Loi Finance 2016).
     WarningNoteModulePOSForFrenchLaw=Este módulo %s cumple con las leyes francesas (Loi Finance 2016) porque el módulo Non Reversible Logs se activa automáticamente.
    @@ -1788,16 +1802,47 @@ MAIN_PDF_MARGIN_LEFT=Margen izquierdo en PDF
     MAIN_PDF_MARGIN_RIGHT=Margen derecho en PDF
     MAIN_PDF_MARGIN_TOP=Margen superior en PDF
     MAIN_PDF_MARGIN_BOTTOM=Margen inferior en PDF
    +NothingToSetup=No hay ninguna configuración a realizar en este módulo.
     SetToYesIfGroupIsComputationOfOtherGroups=Establezca esto a sí si este grupo es un cálculo de otros grupos
     EnterCalculationRuleIfPreviousFieldIsYes=Ingrese regla de cálculo si el campo anterior se estableció en Sí (por ejemplo, 'CODEGRP1 + CODEGRP2')
     SeveralLangugeVariatFound=Varias variantes de idioma encontradas
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Eliminar caracteres especiales
     COMPANY_AQUARIUM_CLEAN_REGEX=Filtro Regex para limpiar el valor (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=Contacto GDPR
    +GDPRContact=Oficina Protección de datos (DPO, Políticas de privacidad o contacto GDPR)
     GDPRContactDesc=Si almacena datos sobre empresas/ciudadanos europeos, puede almacenar aquí el contacto responsable del Reglamento general de protección de datos
    +HelpOnTooltip=Texto de ayuda a mostrar en la ventana emergente
    +HelpOnTooltipDesc=Coloque aquí un texto o una clave de traducción para mostrar información emergente cuando este campo aparezca en un formulario
    +YouCanDeleteFileOnServerWith=Puede eliminar este archivo del servidor con la línea de comandos: <br> %s
    +ChartLoaded=Plan contable cargado
    +SocialNetworkSetup=Configuración del módulo de redes sociales.
    +EnableFeatureFor=Habilitar funciones para <strong> %s </strong>
    +VATIsUsedIsOff=Nota: La opción de usar el IVA se ha establecido como <strong>Desactivado</strong> en el menú %s - %s, por lo que el IVA usado siempre será 0 para las ventas.
    +SwapSenderAndRecipientOnPDF=Intercambiar dirección de remitente y destinatario en PDF
    +FeatureSupportedOnTextFieldsOnly=Advertencia, función compatible solo en campos de texto
    +EmailCollector=Recolector de correo
    +EmailCollectorDescription=Añade una tarea programada y una página de configuración para escanear los buzones de e-mail con regularidad (utilizando el protocolo IMAP) y registra los e-mails recibidos en su aplicación, en el lugar correcto y/o crea registros automáticamente (como leads).
    +NewEmailCollector=Nuevo recolector de e-mail
    +EMailHost=Host del servidor de e-mail IMAP
    +MailboxSourceDirectory=Directorio fuente del buzón
    +MailboxTargetDirectory=Directorio de destino del buzón
    +EmailcollectorOperations=Operaciones a realizar por el colector
    +CollectNow=Recoger ahora
    +DateLastResult=Fecha de la última recogida
    +LastResult=Ultimo resultado
    +EmailCollectorConfirmCollectTitle=Confirmación recolección e-mail
    +EmailCollectorConfirmCollect=¿Desea ejecutar la recolección de este recolector ahora?
    +NoNewEmailToProcess=No hay e-mails nuevos (filtros coincidentes) para procesar
    +NothingProcessed=Nada hecho
    +XEmailsDoneYActionsDone=%s e-mails analizados, %s e-mails procesados ​​con éxito (para %s registro/acciones realizadas) por el recolector
    +RecordEvent=Registro de evento
    +CreateLeadAndThirdParty=Crear lead (y tercero si es necesario)
    +CodeLastResult=Código de resultado de la última recogida
    +NbOfEmailsInInbox=Número de emails en el directorio fuente
     ##### Resource ####
     ResourceSetup=Configuración del módulo Recursos
     UseSearchToSelectResource=Utilice un formulario de búsqueda para elegir un recurso (en lugar de una lista desplegable).
     DisabledResourceLinkUser=Desactivar funcionalidad de enlazar recursos a usuarios
     DisabledResourceLinkContact=Desactivar funcionalidad de enlazar recurso a contactos
     ConfirmUnactivation=Confirme el restablecimiento del módulo
    +OnMobileOnly=Sólo en pantalla pequeña (smartphone)
    +DisableProspectCustomerType=Deshabilitar el tipo de tercero "Cliente Potencial/Cliente" (por lo tanto, el tercero debe ser Cliente Potencial o Cliente pero no pueden ser ambos)
    diff --git a/htdocs/langs/es_ES/banks.lang b/htdocs/langs/es_ES/banks.lang
    index 8add13345b2..4d4dcf98583 100644
    --- a/htdocs/langs/es_ES/banks.lang
    +++ b/htdocs/langs/es_ES/banks.lang
    @@ -1,13 +1,13 @@
     # Dolibarr language file - Source file is en_US - banks
     Bank=Banco
    -MenuBankCash=Bank | Cash
    +MenuBankCash=Bancos | Cajas
     MenuVariousPayment=Pagos varios
     MenuNewVariousPayment=Nuevo pago varios
     BankName=Nombre del banco
     FinancialAccount=Cuenta
     BankAccount=Cuenta bancaria
     BankAccounts=Cuentas Bancarias
    -BankAccountsAndGateways=Cuentas bancarias | Gateways
    +BankAccountsAndGateways=Cuentas bancarias | Pasarelas
     ShowAccount=Mostrar cuenta
     AccountRef=Ref. cuenta financiera
     AccountLabel=Etiqueta cuenta financiera
    @@ -76,6 +76,7 @@ TransactionsToConciliate=Registros a conciliar
     Conciliable=Conciliable
     Conciliate=Conciliar
     Conciliation=Conciliación
    +SaveStatementOnly=Guardar solo extracto
     ReconciliationLate=Conciliación tardía
     IncludeClosedAccount=Incluir cuentas cerradas
     OnlyOpenedAccount=Solamente cuentas abiertas
    @@ -116,7 +117,7 @@ ConfirmDeleteCheckReceipt=¿Está seguro de querer eliminar esta remesa?
     BankChecks=Cheques
     BankChecksToReceipt=Cheques en espera de depositar
     ShowCheckReceipt=Mostrar remesa
    -NumberOfCheques=Nº de cheques
    +NumberOfCheques=Nº Cheque
     DeleteTransaction=Eliminar registro
     ConfirmDeleteTransaction=¿Está seguro de querer eliminar este registro?
     ThisWillAlsoDeleteBankRecord=Esto también eliminará el registro bancario
    @@ -132,7 +133,7 @@ PaymentDateUpdateSucceeded=Fecha de pago actualizada correctamente
     PaymentDateUpdateFailed=Fecha de pago no pudo ser modificada
     Transactions=Transacciones
     BankTransactionLine=Registro bancario
    -AllAccounts=All bank and cash accounts
    +AllAccounts=Todas las cuentas bancarias/de caja
     BackToAccount=Volver a la cuenta
     ShowAllAccounts=Mostrar para todas las cuentas
     FutureTransaction=Transacción futura. No es posible conciliar.
    @@ -153,7 +154,7 @@ RejectCheckDate=Fecha de devolución del cheque
     CheckRejected=Cheque devuelto
     CheckRejectedAndInvoicesReopened=Cheque devuelto y facturas reabiertas
     BankAccountModelModule=Modelos de documentos para cuentas bancarias
    -DocumentModelSepaMandate=Plantilla de mandato SEPA, usable únicamente para paises miembros de la UEE
    +DocumentModelSepaMandate=Plantilla de mandato SEPA. Útil únicamente para países miembros de la UEE
     DocumentModelBan=Plantilla para imprimir una página con la información IBAN.
     NewVariousPayment=Nuevo pago varios
     VariousPayment=Pagos varios
    diff --git a/htdocs/langs/es_ES/bills.lang b/htdocs/langs/es_ES/bills.lang
    index 13234f0e7f7..5c0b63a2aa0 100644
    --- a/htdocs/langs/es_ES/bills.lang
    +++ b/htdocs/langs/es_ES/bills.lang
    @@ -67,7 +67,7 @@ PaidBack=Reembolsado
     DeletePayment=Eliminar el pago
     ConfirmDeletePayment=¿Está seguro de querer eliminar este pago?
     ConfirmConvertToReduc=¿Desea convertir este %s en un descuento absoluto?<br>El importe se guardará entre todos los descuentos y podría utilizarse como descuento para una factura actual o futura para este cliente.
    -ConfirmConvertToReducSupplier=¿Desea convertir este %s en un descuento absoluto?<br>El importe se guardará entre todos los descuentos y podría utilizarse como descuento para una factura actual o futura para este cliente.
    +ConfirmConvertToReducSupplier=¿Desea convertir este %s en un descuento absoluto?<br>El importe se guardará entre todos los descuentos y podría utilizarse como descuento para una factura actual o futura para este proveedor.
     SupplierPayments=Pagos a proveedores
     ReceivedPayments=Pagos recibidos
     ReceivedCustomersPayments=Pagos recibidos de cliente
    @@ -107,11 +107,11 @@ SearchACustomerInvoice=Buscar una factura a cliente
     SearchASupplierInvoice=Buscar una factura de proveedor
     CancelBill=Anular una factura
     SendRemindByMail=Enviar recordatorio
    -DoPayment=Ingresar pago
    -DoPaymentBack=Ingresar reembolso
    -ConvertToReduc=Convertir en reducción futura
    -ConvertExcessReceivedToReduc=Convert excess received into available credit
    -ConvertExcessPaidToReduc=Convert excess paid into available discount
    +DoPayment=Añadir pago
    +DoPaymentBack=Añadir reembolso
    +ConvertToReduc=Convertir en crédito disponible
    +ConvertExcessReceivedToReduc=Convertir lo recibido en exceso en crédito disponible
    +ConvertExcessPaidToReduc=Convertir lo recibido en exceso en descuento disponible
     EnterPaymentReceivedFromCustomer=Añadir pago recibido de cliente
     EnterPaymentDueToCustomer=Realizar pago de abonos al cliente
     DisabledBecauseRemainderToPayIsZero=Desactivado ya que el resto a pagar es 0
    @@ -132,6 +132,7 @@ BillStatusClosedPaidPartially=Cerrada (pagada parcialmente)
     BillShortStatusDraft=Borrador
     BillShortStatusPaid=Pagada
     BillShortStatusPaidBackOrConverted=Reembolsada o convertida
    +Refunded=Reembolsada
     BillShortStatusConverted=Tratada
     BillShortStatusCanceled=Abandonada
     BillShortStatusValidated=Validada
    @@ -141,7 +142,7 @@ BillShortStatusNotRefunded=No reembolsada
     BillShortStatusClosedUnpaid=Cerrada (pte. pago)
     BillShortStatusClosedPaidPartially=Cerrada (pago parcial)
     PaymentStatusToValidShort=A validar
    -ErrorVATIntraNotConfigured=Número de IVA intracomunitario aún no configurado
    +ErrorVATIntraNotConfigured=Número de CIF intracomunitario aún no configurado
     ErrorNoPaiementModeConfigured=No hay definido modo de pago por defecto. Corregir desde el módulo factura
     ErrorCreateBankAccount=Crear una cuenta bancaria y después en la configuración del módulo factura definir los modos de pago
     ErrorBillNotFound=Factura %s inexistente
    @@ -188,7 +189,7 @@ ConfirmClassifyPaidPartiallyReasonBadCustomer=Cliente moroso
     ConfirmClassifyPaidPartiallyReasonProductReturned=Productos devueltos en parte
     ConfirmClassifyPaidPartiallyReasonOther=Por otra razón
     ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=Esta elección es posible si su factura se proveyera de la mención adecuada. (Ejemplo: "descuento neto de impuestos")
    -ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=Esta elección es posible si su factura se proveyera de la mención adecuada. (Ejemplo: mención por la que se define el descuento o de la clase "solamente el impuesto que corresponde al precio efectivamente pagado causa derecho a deducción")
    +ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=En algunos países, esta opción podría ser posible solo si su factura contiene notas correctas.
     ConfirmClassifyPaidPartiallyReasonAvoirDesc=Esta elección es la elección que debe tomarse si las otras no son aplicables
     ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=Un <b>cliente moroso</b> es un cliente que no quiere regularizar su deuda.
     ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Esta elección es posible si el caso de pago incompleto es a raíz de una devolución de parte de los productos
    @@ -203,6 +204,7 @@ UnvalidateBill=Devolver factura a borrador
     NumberOfBills=Nº de facturas
     NumberOfBillsByMonth=Nº de facturas por mes
     AmountOfBills=Importe de las facturas
    +AmountOfBillsHT=Importe de las facturas (Sin IVA)
     AmountOfBillsByMonthHT=Importe de las facturas por mes (Sin IVA)
     ShowSocialContribution=Ver tasa social/fiscal
     ShowBill=Ver factura
    @@ -262,7 +264,7 @@ CreateRepeatableInvoice=Crear plantilla de factura
     CreateFromRepeatableInvoice=Crear desde plantilla de factura
     CustomersInvoicesAndInvoiceLines=Facturas a clientes y líneas de facturas
     CustomersInvoicesAndPayments=Facturas a clientes y pagos
    -ExportDataset_invoice_1=Facturas a clientes y líneas de factura
    +ExportDataset_invoice_1=Facturas a clientes y líneas de facturas
     ExportDataset_invoice_2=Facturas a clientes y pagos
     ProformaBill=Factura pro-forma:
     Reduction=Reducción
    @@ -282,7 +284,7 @@ RelativeDiscount=Descuento relativo
     GlobalDiscount=Descuento fijo
     CreditNote=Abono
     CreditNotes=Abonos
    -CreditNotesOrExcessReceived=Credit notes or excess received
    +CreditNotesOrExcessReceived=Notas de crédito o exceso recibido
     Deposit=Anticipo
     Deposits=Anticipos
     DiscountFromCreditNote=Descuento resultante del abono %s
    @@ -302,7 +304,7 @@ DiscountAlreadyCounted=Descuentos ya consumidos
     CustomerDiscounts=Descuentos a clientes
     SupplierDiscounts=Descuentos de proveedores
     BillAddress=Dirección de facturación
    -HelpEscompte=Un <b>descuento</b> es un descuento acordado sobre una factura dada, a un cliente que realizó su pago mucho antes del vencimiento.
    +HelpEscompte=Este descuento es un descuento otorgado al cliente porque el pago se realizó antes del plazo.
     HelpAbandonBadCustomer=Este importe se abandonó (cliente juzgado como moroso) y se considera como una pérdida excepcional.
     HelpAbandonOther=Este importe se abandonó este importe ya que se trataba de un error de facturación (mala introducción de datos, factura sustituida por otra).
     IdSocialContribution=Id pago tasa social/fiscal
    @@ -394,7 +396,7 @@ PaymentConditionShort14DENDMONTH=14 días fin de mes
     PaymentCondition14DENDMONTH=14 días a fin de més
     FixAmount=Importe fijo
     VarAmount=Importe variable (%% total)
    -VarAmountOneLine=Variable amount (%% tot.) - 1 line with label '%s'
    +VarAmountOneLine=Cantidad variable (%% tot.) - 1 línea con la etiqueta '%s'
     # PaymentType
     PaymentTypeVIR=Transferencia bancaria
     PaymentTypeShortVIR=Transferencia bancaria
    @@ -408,19 +410,19 @@ PaymentTypeCHQ=Cheque
     PaymentTypeShortCHQ=Cheque
     PaymentTypeTIP=TIP (Titulo interbancario de pago)
     PaymentTypeShortTIP=Pago TIP
    -PaymentTypeVAD=Pago On Line
    -PaymentTypeShortVAD=Pago On Line
    +PaymentTypeVAD=Pago en línea
    +PaymentTypeShortVAD=Pago en línea
     PaymentTypeTRA=Banco borrador
     PaymentTypeShortTRA=Borrador
     PaymentTypeFAC=Factor
     PaymentTypeShortFAC=Factor
     BankDetails=Datos bancarios
     BankCode=Código banco
    -DeskCode=Cód. sucursal
    +DeskCode=Código de oficina
     BankAccountNumber=Número cuenta
    -BankAccountNumberKey=D. C.
    +BankAccountNumberKey=DC
     Residence=Ingreso en cuenta
    -IBANNumber=Código IBAN
    +IBANNumber=Número de cuenta IBAN completo
     IBAN=IBAN
     BIC=BIC/SWIFT
     BICNumber=Código BIC/SWIFT
    @@ -476,7 +478,7 @@ CantRemovePaymentWithOneInvoicePaid=Eliminación imposible cuando existe al meno
     ExpectedToPay=Esperando el pago
     CantRemoveConciliatedPayment=No se puede eliminar un pago conciliado
     PayedByThisPayment=Pagada por este pago
    -ClosePaidInvoicesAutomatically=Clasificar como "Pagadas" las facturas, facturas de situación y facturas rectificativas completamente pagadas.
    +ClosePaidInvoicesAutomatically=Clasificar como "Pagadas" las facturas, anticipos y facturas rectificativas completamente pagadas.
     ClosePaidCreditNotesAutomatically=Clasificar automáticamente como "Pagados" los abonos completamente reembolsados
     ClosePaidContributionsAutomatically=Clasificar como "Pagadas" todas las tasas fiscales o sociales completamente pagadas
     AllCompletelyPayedInvoiceWillBeClosed=Todas las facturas con un resto a pagar 0 serán automáticamente cerradas al estado "Pagada".
    @@ -489,6 +491,7 @@ YouMustCreateInvoiceFromThird=Esta opción solo está disponible al crear una fa
     YouMustCreateInvoiceFromSupplierThird=Esta opción solo está disponible al crear una factura desde la pestaña 'proveedor' en terceros
     YouMustCreateStandardInvoiceFirstDesc=Tiene que crear una factura estandar antes de convertirla a "plantilla" para crear una nueva plantilla de factura
     PDFCrabeDescription=Modelo de factura completo (modelo recomendado por defecto)
    +PDFSpongeDescription=Modelo de factura Esponja. Una plantilla de factura completa.
     PDFCrevetteDescription=Modelo PDF de factura Crevette. Un completo modelo de facturas de situación
     TerreNumRefModelDesc1=Devuelve el número bajo el formato %syymm-nnnn para las facturas, %syymm-nnnn para las facturas rectificativas y %syymm-nnnn para los abonos donde yy es el año, mm. el mes y nnnn un contador secuencial sin ruptura y sin permanencia a 0
     MarsNumRefModelDesc1=Devuelve el número bajo el formato %syymm-nnnn para las facturas, %syymm-nnnn para las facturas rectificativas, %syymm-nnnn para los anticipos y %syymm-nnnn para los abonos donde yy es el año, mm. el mes y nnnn un contador secuencial sin ruptura y sin permanencia a 0
    @@ -546,3 +549,4 @@ AutoFillDateFromShort=Definir fecha de inicio
     AutoFillDateTo=Establecer fecha de finalización para la línea de servicio con la próxima fecha de facturación
     AutoFillDateToShort=Definir fecha de finalización
     MaxNumberOfGenerationReached=Máximo número de generaciones alcanzado
    +BILL_DELETEInDolibarr=Factura eliminada
    diff --git a/htdocs/langs/es_ES/cashdesk.lang b/htdocs/langs/es_ES/cashdesk.lang
    index 326ccef53bb..518874346bf 100644
    --- a/htdocs/langs/es_ES/cashdesk.lang
    +++ b/htdocs/langs/es_ES/cashdesk.lang
    @@ -32,3 +32,10 @@ DeleteArticle=Haga clic para quitar este artículo
     FilterRefOrLabelOrBC=Búsqueda (Ref/Etiq.)
     UserNeedPermissionToEditStockToUsePos=Ha configurado el decremento de stock en la creación de facturas, por lo que el usuario que utilice el TPV deberá tener permiso para editar stock.
     DolibarrReceiptPrinter=Impresora de tickets Dolibarr
    +CloseBill=Cerrar venta
    +Floors=Salones
    +Floor=Salón
    +AddTable=Añadir mesa
    +Place=Puesto
    +TakeboxNecesary=Aplicación 'TakeBOX' requerida
    +OrderPrinters=Impresoras de pedido
    diff --git a/htdocs/langs/es_ES/categories.lang b/htdocs/langs/es_ES/categories.lang
    index 9a1a71d28c7..b3277599027 100644
    --- a/htdocs/langs/es_ES/categories.lang
    +++ b/htdocs/langs/es_ES/categories.lang
    @@ -16,6 +16,7 @@ MembersCategoriesArea=Área etiquetas/categorías Miembros
     ContactsCategoriesArea=Área etiquetas/categorías de contactos
     AccountsCategoriesArea=Área categorías contables
     ProjectsCategoriesArea=Área etiquetas/categorías Proyectos
    +UsersCategoriesArea=Área etiquetas/categorías Usuarios
     SubCats=Subcategorías
     CatList=Listado de etiquetas/categorías
     NewCategory=Nueva etiqueta/categoría
    @@ -54,12 +55,13 @@ MembersCategoryShort=Etiquetas/categorías de miembros
     SuppliersCategoriesShort=Etiquetas/categorías de proveedores
     CustomersCategoriesShort=Etiquetas/categorías de clientes
     ProspectsCategoriesShort=Etiquetas/categorías clientes potenciales
    -CustomersProspectsCategoriesShort=Categorías clientes
    +CustomersProspectsCategoriesShort=Categorias clientes/potenciales
     ProductsCategoriesShort=Etiquetas/categorías de productos
     MembersCategoriesShort=Etiquetas/categorías de miembros
     ContactCategoriesShort=Etiquetas/categorías de contactos
     AccountsCategoriesShort=Categorías contables
     ProjectsCategoriesShort=Etiquetas/categorías de Proyectos
    +UsersCategoriesShort=Área etiquetas/categorías Usuarios
     ThisCategoryHasNoProduct=Esta categoría no contiene ningún producto.
     ThisCategoryHasNoSupplier=Esta categoría no contiene ningún proveedor.
     ThisCategoryHasNoCustomer=Esta categoría no contiene ningún cliente.
    @@ -85,4 +87,4 @@ CategorieRecursivHelp=Si está activado, el producto se enlazará a la categorí
     AddProductServiceIntoCategory=Añadir el siguiente producto/servicio
     ShowCategory=Mostrar etiqueta/categoría
     ByDefaultInList=Por defecto en lista
    -ChooseCategory=Choose category
    +ChooseCategory=Elija una categoría
    diff --git a/htdocs/langs/es_ES/companies.lang b/htdocs/langs/es_ES/companies.lang
    index 1736c591f63..2c25d8c26f1 100644
    --- a/htdocs/langs/es_ES/companies.lang
    +++ b/htdocs/langs/es_ES/companies.lang
    @@ -8,11 +8,11 @@ ConfirmDeleteContact=¿Está seguro de querer eliminar este contacto y toda la i
     MenuNewThirdParty=Nuevo tercero
     MenuNewCustomer=Nuevo cliente
     MenuNewProspect=Nuevo cliente potencial
    -MenuNewSupplier=New vendor
    +MenuNewSupplier=Nuevo proveedor
     MenuNewPrivateIndividual=Nuevo particular
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewCompany=Nueva empresa (cliente potencial, cliente, proveedor)
    +NewThirdParty=Nuevo tercero (cliente potencial, cliente, proveedor)
    +CreateDolibarrThirdPartySupplier=Crear un tercero (proveedor)
     CreateThirdPartyOnly=Crear tercero
     CreateThirdPartyAndContact=Crear un tercero + un contacto
     ProspectionArea=Área de prospección
    @@ -27,7 +27,7 @@ CompanyName=Razón social
     AliasNames=Apodo (comercial, marca registrada, ...)
     AliasNameShort=Apodo
     Companies=Empresas
    -CountryIsInEEC=País de la Comunidad Económica Europea
    +CountryIsInEEC=País dentro de la Comunidad Económica Europea
     ThirdPartyName=Nombre del tercero
     ThirdPartyEmail=E-mail tercero
     ThirdParty=Tercero
    @@ -37,10 +37,10 @@ ThirdPartyProspectsStats=Clientes potenciales
     ThirdPartyCustomers=Clientes
     ThirdPartyCustomersStats=Clientes
     ThirdPartyCustomersWithIdProf12=Clientes con %s ó %s
    -ThirdPartySuppliers=Vendors
    -ThirdPartyType=Tipo de tercero
    +ThirdPartySuppliers=Proveedores
    +ThirdPartyType=Tipo de empresa
     Individual=Particular
    -ToCreateContactWithSameName=Creará automáticamente un contacto físico con la misma información. en la mayoría de casos. En la mayoría de los casos, incluso si el tercero es una persona física, la creación de un tercero por sí solo es suficiente.
    +ToCreateContactWithSameName=Creará automáticamente un contacto/dirección en el tercero con la misma información que el tercero. En la mayoría de los casos, aunque el tercero sea una persona física, creando solo el tercero será suficiente.
     ParentCompany=Sede central
     Subsidiaries=Filiales
     ReportByMonth=Informe por mes
    @@ -76,12 +76,12 @@ Town=Población
     Web=Web
     Poste= Puesto
     DefaultLang=Idioma por defecto
    -VATIsUsed=IVA está siendo usado
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +VATIsUsed=Sujeto a IVA
    +VATIsUsedWhenSelling=Esto define si este tercero incluye un impuesto a la venta o no cuando realiza una factura a sus propios clientes
     VATIsNotUsed=IVA no está siendo usado
     CopyAddressFromSoc=Copiar dirección de la empresa
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Tercero que no es cliente ni proveedor, sin objetos referenciados
    +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Tercero que no es cliente ni proveedor, descuentos no disponibles
     PaymentBankAccount=Cuenta bancaria de pago
     OverAllProposals=Presupuestos
     OverAllOrders=Pedidos
    @@ -99,9 +99,9 @@ LocalTax2ES=IRPF
     TypeLocaltax1ES=Tasa RE
     TypeLocaltax2ES=Tasa IRPF
     WrongCustomerCode=Código cliente incorrecto
    -WrongSupplierCode=Vendor code invalid
    +WrongSupplierCode=Código proveedor incorrecto
     CustomerCodeModel=Modelo de código cliente
    -SupplierCodeModel=Vendor code model
    +SupplierCodeModel=Modelo de código proveedor
     Gencod=Código de barras
     ##### Professional ID #####
     ProfId1Short=Prof. id 1
    @@ -267,7 +267,7 @@ Prospect=Cliente potencial
     CustomerCard=Ficha cliente
     Customer=Cliente
     CustomerRelativeDiscount=Descuento cliente relativo
    -SupplierRelativeDiscount=Relative vendor discount
    +SupplierRelativeDiscount=Descuento proveedor relativo
     CustomerRelativeDiscountShort=Descuento relativo
     CustomerAbsoluteDiscountShort=Descuento fijo
     CompanyHasRelativeDiscount=Este cliente tiene un descuento por defecto de <b>%s%%</b>
    @@ -275,7 +275,7 @@ CompanyHasNoRelativeDiscount=Este cliente no tiene descuentos relativos por defe
     HasRelativeDiscountFromSupplier=Tiene un descuento predeterminado de <b> %s%%</b> en este proveedor
     HasNoRelativeDiscountFromSupplier=No tiene descuento relativo predeterminado en este proveedor
     CompanyHasAbsoluteDiscount=Este cliente tiene <b>%s %s</b> en descuentos (abonos o anticipos) disponibles
    -CompanyHasDownPaymentOrCommercialDiscount=Este cliente tiene descuentos disponibles (abonos, comerciales) para <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=Este cliente tiene descuentos disponibles (anticipos, comerciales) para <b>%s</b> %s
     CompanyHasCreditNote=Este cliente tiene <b>%s %s</b> en anticipos disponibles
     HasNoAbsoluteDiscountFromSupplier=No tiene crédito de descuento disponible en este proveedor
     HasAbsoluteDiscountFromSupplier=Tiene descuentos disponibles (notas de créditos o anticipos) para <b> %s </b> %s en este proveedor
    @@ -284,8 +284,8 @@ HasCreditNoteFromSupplier=Tiene abonos para <b> %s </b> %s en este proveedor
     CompanyHasNoAbsoluteDiscount=Este cliente no tiene más descuentos fijos disponibles
     CustomerAbsoluteDiscountAllUsers=Descuentos fijos a clientes (acordado por todos los usuarios)
     CustomerAbsoluteDiscountMy=Descuentos fijos a clientes (acordados personalmente)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +SupplierAbsoluteDiscountAllUsers=Descuentos fijos de proveedores (acordado por todos los usuarios)
    +SupplierAbsoluteDiscountMy=Descuentos fijos de proveedores (acordados personalmente)
     DiscountNone=Ninguna
     Supplier=Proveedor
     AddContact=Crear contacto
    @@ -304,19 +304,19 @@ DeleteACompany=Eliminar una empresa
     PersonalInformations=Información personal
     AccountancyCode=Cuenta contable
     CustomerCode=Código cliente
    -SupplierCode=Vendor code
    -CustomerCodeShort=Código cliente
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Código único cliente para cada cliente
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +SupplierCode=Código proveedor
    +CustomerCodeShort=Cód. cliente
    +SupplierCodeShort=Cód. proveedor
    +CustomerCodeDesc=Código cliente, único para todos los clientes
    +SupplierCodeDesc=Código proveedor, único para todos los proveedores
     RequiredIfCustomer=Requerida si el tercero es un cliente o cliente potencial
    -RequiredIfSupplier=Required if third party is a vendor
    +RequiredIfSupplier=Requerida si el tercero es un proveedor
     ValidityControledByModule=Validación controlada por el módulo
    -ThisIsModuleRules=Esta es la regla para este módulo
    +ThisIsModuleRules=Reglas para este módulo.
     ProspectToContact=Cliente potencial a contactar
     CompanyDeleted=La empresa "%s" ha sido eliminada
     ListOfContacts=Listado de contactos
    -ListOfContactsAddresses=Listado de contactos/direcciones
    +ListOfContactsAddresses=Listado de contactos
     ListOfThirdParties=Listado de terceros
     ShowCompany=Mostrar tercero
     ShowContact=Mostrar contacto
    @@ -333,17 +333,17 @@ NoContactForAnyProposal=Este contacto no es contacto de ningún presupuesto
     NoContactForAnyContract=Este contacto no es contacto de ningún contrato
     NoContactForAnyInvoice=Este contacto no es contacto de ninguna factura
     NewContact=Nuevo contacto
    -NewContactAddress=Nuevo contacto/dirección
    +NewContactAddress=Nuevo Contacto/Dirección
     MyContacts=Mis contactos
     Capital=Capital
     CapitalOf=Capital de %s
     EditCompany=Modificar empresa
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=Este usuario no es ni un cliente potencial, ni un cliente, ni un proveedor
     VATIntraCheck=Verificar
    -VATIntraCheckDesc=El link <b>%s</b> permite consultar al servicio europeo de control de números de IVA intracomunitario. Se requiere acceso a internet para que el servicio funcione
    +VATIntraCheckDesc=El enlace <b>%s</b> permite consultar al servicio europeo de control de números de IVA intracomunitario (VIES). Se requiere acceso a internet para que el servicio funcione.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Verificar en la web de la Comisión Europea
    -VATIntraManualCheck=Puede también realizar una verificación manual en la web europea <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Verificar el CIF/NIF intracomunitario en la web de la Comisión Europea
    +VATIntraManualCheck=Puede también realizar una verificación manual en la web de la comisión europea <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Comprobación imposible. El servicio de comprobación no es prestado por el país país miembro (%s).
     NorProspectNorCustomer=Ni cliente, ni cliente potencial
     JuridicalStatus=Forma jurídica
    @@ -388,15 +388,15 @@ ContactNotLinkedToCompany=Contacto no vinculado a un tercero
     DolibarrLogin=Login usuario
     NoDolibarrAccess=Sin acceso de usuario
     ExportDataset_company_1=Terceros (Empresas / asociaciones / particulares) y propiedades
    -ExportDataset_company_2=Contactos de terceros y campos adicionales
    +ExportDataset_company_2=Contactos y sus propiedades
     ImportDataset_company_1=Terceros (Empresas / asociaciones / particulares) y propiedades
    -ImportDataset_company_2=Contactos/Direcciones (de terceros o no) y campos adicionales
    +ImportDataset_company_2=Contactos/Direcciones y campos adicionales
     ImportDataset_company_3=Cuentas bancarias de terceros
    -ImportDataset_company_4=Terceros/Comerciales (Asigna usuarios comerciales a terceros)
    +ImportDataset_company_4=Terceros/Comerciales (Asigna comerciales/usuarios a terceros)
     PriceLevel=Nivel de precios
     DeliveryAddress=Dirección de envío
     AddAddress=Añadir dirección
    -SupplierCategory=Vendor category
    +SupplierCategory=Categoría de proveedor
     JuridicalStatus200=Independiente
     DeleteFile=Eliminación de un archivo
     ConfirmDeleteFile=¿Está seguro de querer eliminar este archivo?
    @@ -404,9 +404,9 @@ AllocateCommercial=Asignado a comercial
     Organization=Organismo
     FiscalYearInformation=Información del año fiscal
     FiscalMonthStart=Mes de inicio de ejercicio
    -YouMustAssignUserMailFirst=Primero debe indicar un e-mail para este usuario para poder añadirlo en e-mails de notificaciones.
    +YouMustAssignUserMailFirst=Primero debes asignar un e-mail para este usuario para poder añadirlo en notificaciones de e-mail.
     YouMustCreateContactFirst=Para poder añadir notificaciones por e-mail, primero debe definir contactos con e-mails válidos en el tercero
    -ListSuppliersShort=List of vendors
    +ListSuppliersShort=Listado de proveedores
     ListProspectsShort=Listado de clientes potenciales
     ListCustomersShort=Listado de clientes
     ThirdPartiesArea=Área terceros y contactos
    @@ -420,7 +420,7 @@ CurrentOutstandingBill=Riesgo alcanzado
     OutstandingBill=Importe máximo para facturas pendientes
     OutstandingBillReached=Importe máximo para facturas pendientes
     OrderMinAmount=Importe mínimo para pedido
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Devuelve un número bajo el formato %syymm-nnnn para los códigos de clientes y %syymm-nnnn para los códigos de los proveedores, donde yy es el año, mm el mes y nnnn un contador secuencial sin ruptura y sin volver a 0.
     LeopardNumRefModelDesc=Código de cliente/proveedor libre sin verificación. Puede ser modificado en cualquier momento.
     ManagingDirectors=Administrador(es) (CEO, director, presidente, etc.)
     MergeOriginThirdparty=Tercero duplicado (tercero que debe eliminar)
    @@ -431,4 +431,4 @@ SaleRepresentativeLogin=Inicio de sesión del comercial
     SaleRepresentativeFirstname=Nombre del comercial
     SaleRepresentativeLastname=Apellidos del comercial
     ErrorThirdpartiesMerge=Se produjo un error al eliminar los terceros. Por favor, compruebe el log. Los cambios han sido anulados.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Código de cliente o proveedor ya utilizado, se sugiere un nuevo código
    diff --git a/htdocs/langs/es_ES/compta.lang b/htdocs/langs/es_ES/compta.lang
    index 748f5e762ff..f926fc7eed0 100644
    --- a/htdocs/langs/es_ES/compta.lang
    +++ b/htdocs/langs/es_ES/compta.lang
    @@ -19,8 +19,8 @@ Income=Ingresos
     Outcome=Gastos
     MenuReportInOut=Resultado / Ejercicio
     ReportInOut=Resultado / Ejercicio
    -ReportTurnover=Turnover invoiced
    -ReportTurnoverCollected=Turnover collected
    +ReportTurnover=Volumen de ventas emitidas
    +ReportTurnoverCollected=Volumen de ventas cobradas
     PaymentsNotLinkedToInvoice=Pagos vinculados a ninguna factura, por lo que ninguún tercero
     PaymentsNotLinkedToUser=Pagos no vinculados a un usuario
     Profit=Beneficio
    @@ -38,7 +38,7 @@ VATToCollect=IVA compras
     VATSummary=Balance de IVA
     VATBalance=Balance de IVA
     VATPaid=IVA Pagado
    -LT1Summary=Saldo IRPF
    +LT1Summary=Resumen RE
     LT2Summary=Resumen de IRPF
     LT1SummaryES=Balance del RE
     LT2SummaryES=Balance de IRPF
    @@ -78,7 +78,7 @@ MenuNewSocialContribution=Nueva tasa
     NewSocialContribution=Nueva tasa social/fiscal
     AddSocialContribution=Añadir tasa social/fiscal
     ContributionsToPay=Tasas sociales/fiscales a pagar
    -AccountancyTreasuryArea=Billing and payment area
    +AccountancyTreasuryArea=Área facturación y pagos
     NewPayment=Nuevo pago
     Payments=Pagos
     PaymentCustomerInvoice=Cobro factura a cliente
    @@ -118,9 +118,9 @@ CustomerAccountancyCodeShort=Cód. cuenta cliente
     SupplierAccountancyCodeShort=Cód. cuenta proveedor
     AccountNumber=Número de cuenta
     NewAccountingAccount=Nueva cuenta
    -Turnover=Turnover invoiced
    -TurnoverCollected=Turnover collected
    -SalesTurnoverMinimum=Minimum turnover
    +Turnover=Volumen de ventas emitidas
    +TurnoverCollected=Volumen de ventas cobradas
    +SalesTurnoverMinimum=Volumen de ventas mínimo
     ByExpenseIncome=Por gastos e ingresos
     ByThirdParties=Por tercero
     ByUserAuthorOfInvoice=Por autor de la factura
    @@ -140,9 +140,9 @@ ConfirmDeleteSocialContribution=¿Está seguro de querer eliminar este pago de t
     ExportDataset_tax_1=tasas sociales y fiscales y pagos
     CalcModeVATDebt=Modo <b>%sIVA sobre facturas emitidas%s</b>.
     CalcModeVATEngagement=Modo <b>%sIVA sobre facturas cobradas%s</b>.
    -CalcModeDebt=Analysis of known recorded invoices even if they are not yet accounted in ledger.
    -CalcModeEngagement=Analysis of known recorded payments, even if they are not yet accounted in Ledger.
    -CalcModeBookkeeping=Análisis de datos <b>registrados en la tabla Libro mayor</b>
    +CalcModeDebt=Análisis de facturas registradas conocidas incluso si aún no se encuentran contabilizadas en el libro mayor.
    +CalcModeEngagement=Análisis de los pagos registrados conocidos, incluso si aún no se encuentran contabilizados en el Libro mayor.
    +CalcModeBookkeeping=Análisis de los datos registrados en el Libro mayor
     CalcModeLT1= Modo <b>%sRE facturas a clientes - facturas de proveedores%s</b>
     CalcModeLT1Debt=Modo <b>%sRE en facturas a clientes%s</b>
     CalcModeLT1Rec= Modo <b>%sRE en facturas de proveedores%s</b>
    @@ -154,9 +154,9 @@ AnnualSummaryInputOutputMode=Resumen anual del balance de ingresos y gastos
     AnnualByCompanies=Balance de ingresos y gastos, por grupos de cuenta predefinidos
     AnnualByCompaniesDueDebtMode=Balance de ingresos y gastos, desglosado por terceros, en modo<b>%sCréditos-Deudas%s</b> llamada <b>contabilidad de compromiso</b>.
     AnnualByCompaniesInputOutputMode=Balance de ingresos y gastos, desglosado por terceros, en modo <b>%sIngresos-Gastos%s</b> llamada <b>contabilidad de caja</b>.
    -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation on actual payments made even if they are not yet accounted in Ledger.
    -SeeReportInDueDebtMode=See %sanalysis of invoices%s for a calculation based on known recorded invoices even if they are not yet accounted in Ledger.
    -SeeReportInBookkeepingMode=See <b>%sBookeeping report%s</b> for a calculation on <b>Bookkeeping Ledger table</b>
    +SeeReportInInputOutputMode=Consulte %sanálisis de pagos%s para obtener un cálculo de los pagos efectuados, incluso si aún no se han contabilizado en el Libro mayor.
    +SeeReportInDueDebtMode=Consulte %sanálisis de facturas %s para un cálculo basado en facturas registradas conocidas, incluso si aún no se han contabilizado en Libro mayor.
    +SeeReportInBookkeepingMode=Consulte el <b>%sInforme de facturación%s</b> para realizar un cálculo en la <b>Tabla Libro mayor</b>
     RulesAmountWithTaxIncluded=- Los importes mostrados son con todos los impuestos incluídos.
     RulesResultDue=- Incluye las facturas pendientes, los gastos, el IVA,  las donaciones pagadas o no. También se incluyen los salarios pagados.<br>- Se basa en la fecha de la validación de las facturas e IVA y en la fecha de vencimiento de los gastos. Para los salarios definidos con el módulo de Salarios, se usa la fecha de valor del pago.
     RulesResultInOut=- Incluye los pagos realizados sobre las facturas, las gastos y el IVA. <br>- Se basa en las fechas de pago de las facturas, gastos e IVA. La fecha de donación para las donaciones
    @@ -169,10 +169,10 @@ RulesResultBookkeepingPersonalized=Muestra un registro en su libro mayor con cue
     SeePageForSetup=Vea el menú <a href="%s">%s</a> para configurarlo
     DepositsAreNotIncluded=- Las facturas de anticipo no están incluidas
     DepositsAreIncluded=- Las facturas de anticipo están incluidas
    -LT1ReportByCustomers=Informe por terceros del RE
    +LT1ReportByCustomers=Informe por tercero del RE
     LT2ReportByCustomers=Informe por tercero del IRPF
    -LT1ReportByCustomersES=Informe de RE por terceros
    -LT2ReportByCustomersES=Informe por tercero del IRPF
    +LT1ReportByCustomersES=Informe de RE por tercero
    +LT2ReportByCustomersES=Informe de IRPF por tercero del
     VATReport=Informe IVA
     VATReportByPeriods=Informe de IVA por período
     VATReportByRates=Informe de impuestos por tasa
    @@ -221,16 +221,16 @@ Mode1=Método 1
     Mode2=Método 2
     CalculationRuleDesc=Para calcular el IVA total hay 2 métodos:<br>El método 1 consiste en redondear el IVA en cada línea y luego sumarlo .<br>El método 2 consiste en sumar el IVA de cada línea y luego redondear el resultado.<br>El resultado final puede variar unos céntimos. El modo por defecto es el método <b>%s</b>.
     CalculationRuleDescSupplier=Según el proveedor, elija el método adecuado para aplicar misma regla de cálculo y obtener el resultado esperado por su proveedor.
    -TurnoverPerProductInCommitmentAccountingNotRelevant=The report of Turnover collected per product is not available. This report is only available for turnover invoiced.
    -TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=The report of Turnover collected per sale tax rate is not available. This report is only available for turnover invoiced.
    +TurnoverPerProductInCommitmentAccountingNotRelevant=El informe del volumen de ventas cobradas por producto no está disponible. Este informe solo está disponible para el volumen de ventas emitidas.
    +TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=El informe Volumen de ventas cobradas por tasa de impuesto no está disponible. Este informe solo está disponible para volumen de ventas emitidas.
     CalculationMode=Modo de cálculo
     AccountancyJournal=Código contable diario
     ACCOUNTING_VAT_SOLD_ACCOUNT=Cuenta contable por defecto para el IVA de ventas (usado si no se define en el diccionario de IVA)
     ACCOUNTING_VAT_BUY_ACCOUNT=Cuenta contable por defecto para el IVA de compras (usado si no se define en el diccionario de IVA)
     ACCOUNTING_VAT_PAY_ACCOUNT=Código contable por defecto para el pago de IVA
    -ACCOUNTING_ACCOUNT_CUSTOMER=Cuenta contable a usar para clientes
    +ACCOUNTING_ACCOUNT_CUSTOMER=Cuenta contable usada para clientes
     ACCOUNTING_ACCOUNT_CUSTOMER_Desc=Se utilizará una cuenta contable dedicada definida en la ficha de terceros para el relleno del Libro Mayor,  o como valor predeterminado de la contabilidad del Libro Mayor si no se define una cuenta contable en la ficha del tercero
    -ACCOUNTING_ACCOUNT_SUPPLIER=Cuenta contable usada para los terceros
    +ACCOUNTING_ACCOUNT_SUPPLIER=Cuenta contable usada para proveedores
     ACCOUNTING_ACCOUNT_SUPPLIER_Desc=Se utilizará una cuenta contable dedicada definida en la ficha de terceros para el relleno del Libro Mayor, o como valor predeterminado de la contabilidad del Libro Mayor si no se define una cuenta contable en la ficha del tercero
     CloneTax=Clonar una tasa social/fiscal
     ConfirmCloneTax=Confirmar la clonación de una tasa social/fiscal
    @@ -254,6 +254,6 @@ VATDue=Impuesto reclamado
     ClaimedForThisPeriod=Reclamado para el período
     PaidDuringThisPeriod=Pagado durante este período
     ByVatRate=Por tasa de impuesto
    -TurnoverbyVatrate=Turnover invoiced by sale tax rate
    -TurnoverCollectedbyVatrate=Turnover collected by sale tax rate
    +TurnoverbyVatrate=Volumen de ventas emitidas por tipo de impuesto
    +TurnoverCollectedbyVatrate=Volumen de ventas cobradas por tipo de impuesto
     PurchasebyVatrate=Compra por tasa de impuestos
    diff --git a/htdocs/langs/es_ES/cron.lang b/htdocs/langs/es_ES/cron.lang
    index da8ac9c00aa..50497ad0b98 100644
    --- a/htdocs/langs/es_ES/cron.lang
    +++ b/htdocs/langs/es_ES/cron.lang
    @@ -64,7 +64,7 @@ CronClassFile=Nombre de archivo con clase
     CronModuleHelp=Nombre del directorio del módulo Dolibarr (también funciona con módulos externos). <BR> Por ejemplo, para realizar un fetch del objeto Product /htdocs/<u>product</u>/class/product.class.php, el valor del módulo es <i>product</i>
     CronClassFileHelp=El nombre del archivo a cargar (la ruta es relativa al directorio raiz del servidor web). <BR> Por ejemplo para realizar un fetch del objeto Product /htdocs/product/class/<u>product.class.php</u>, el valor del nombre del archivo de la clase es <i>product.class.php</i>
     CronObjectHelp=El nombre del objeto a cargar. <BR> Por ejemplo para realizar un fetch del objeto Product /htdocs/product/class/product.class.php, el valor del nombre de la clase es <i>Product</i>
    -CronMethodHelp=El método del objeto a lanzar. <BR> Por ejemplo para realizar un fetch del objeto Product /htdocs/product/class/product.class.php, el valor del método es <i>fecth</i>
    +CronMethodHelp=El método del objeto a lanzar. <BR> Por ejemplo para realizar un fetch del objeto Product /htdocs/product/class/product.class.php, el valor del método es <i>fetch</i>
     CronArgsHelp=Los argumentos del método. <BR> Por ejemplo para realizar un fetch del objeto Product /htdocs/product/class/product.class.php, los valores pueden ser <i>0, ProductRef</i>
     CronCommandHelp=El comando en línea del sistema a ejecutar.
     CronCreateJob=Crear nueva tarea programada
    diff --git a/htdocs/langs/es_ES/dict.lang b/htdocs/langs/es_ES/dict.lang
    index c034f2f530b..e66686b4c51 100644
    --- a/htdocs/langs/es_ES/dict.lang
    +++ b/htdocs/langs/es_ES/dict.lang
    @@ -131,7 +131,7 @@ CountryKI=Kiribati
     CountryKP=Corea del Norte
     CountryKR=Corea del Sur
     CountryKW=Kuwait
    -CountryKG=Kirguistán
    +CountryKG=Kirguizstán
     CountryLA=Laos
     CountryLV=Letonia
     CountryLB=Líbano
    @@ -160,7 +160,7 @@ CountryMD=Moldavia
     CountryMN=Mongolia
     CountryMS=Monserrat
     CountryMZ=Mozambique
    -CountryMM=Birmania (Myanmar)
    +CountryMM=Myanmar (Birmania)
     CountryNA=Namibia
     CountryNR=Nauru
     CountryNP=Nepal
    @@ -277,7 +277,7 @@ CurrencySingMGA=Ariary
     CurrencyMUR=Rupias mauritanas
     CurrencySingMUR=Rupia mauritana
     CurrencyNOK=Coronas noruegas
    -CurrencySingNOK=Corona noruega
    +CurrencySingNOK=Coronas noruegas
     CurrencyTND=Dinares tunecinos
     CurrencySingTND=Dinar tunecino
     CurrencyUSD=Dólares USA
    @@ -295,7 +295,7 @@ CurrencyCentINR=paisa
     CurrencyCentSingINR=paise
     CurrencyThousandthSingTND=milésimo
     #### Input reasons #####
    -DemandReasonTypeSRC_INTE=Internet
    +DemandReasonTypeSRC_INTE=Internetaaa
     DemandReasonTypeSRC_CAMP_MAIL=Campaña correo
     DemandReasonTypeSRC_CAMP_EMAIL=Campaña E-Mailing
     DemandReasonTypeSRC_CAMP_PHO=Campaña telefónica
    diff --git a/htdocs/langs/es_ES/errors.lang b/htdocs/langs/es_ES/errors.lang
    index 26902fa0858..b684ad1b158 100644
    --- a/htdocs/langs/es_ES/errors.lang
    +++ b/htdocs/langs/es_ES/errors.lang
    @@ -32,9 +32,9 @@ ErrorBarCodeRequired=Código de barras requerido
     ErrorCustomerCodeAlreadyUsed=Código de cliente ya utilizado
     ErrorBarCodeAlreadyUsed=El código de barras ya está siendo utilizado
     ErrorPrefixRequired=Prefijo obligatorio
    -ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
    -ErrorSupplierCodeRequired=Vendor code required
    -ErrorSupplierCodeAlreadyUsed=Vendor code already used
    +ErrorBadSupplierCodeSyntax=La sintaxis del código proveedor es incorrecta
    +ErrorSupplierCodeRequired=Código proveedor obligatorio
    +ErrorSupplierCodeAlreadyUsed=Código de proveedor ya utilizado
     ErrorBadParameters=Parámetros incorrectos
     ErrorBadValueForParameter=valor '%s' incorrecto para el parámetro '%s'
     ErrorBadImageFormat=El archivo de imagen es de un formato no soportado (Su PHP no soporta las funciones de conversión de este formato de imagen)
    @@ -67,6 +67,7 @@ ErrorNoValueForRadioType=Los valores de la lista deben ser indicados
     ErrorBadFormatValueList=El valor de la lista no puede tener más de una coma: <u>%s</u>, pero es necesaria al menos una: clave,valor
     ErrorFieldCanNotContainSpecialCharacters=El campo <b>%s</b> no debe contener carácteres especiales
     ErrorFieldCanNotContainSpecialNorUpperCharacters=El campo <b>%s</b> no debe contener carácteres especiales, ni caracteres en mayúsculas y no puede contener sólo números
    +ErrorFieldMustHaveXChar=El campo <b> %s </b> debe tener al menos %s caracteres.
     ErrorNoAccountancyModuleLoaded=Módulo de contabilidad no activado
     ErrorExportDuplicateProfil=El nombre de este perfil ya existe para este conjunto de exportación
     ErrorLDAPSetupNotComplete=La configuración Dolibarr-LDAP es incompleta.
    @@ -87,7 +88,8 @@ ErrorsOnXLines=Errores en <b>%s</b> líneas fuente
     ErrorFileIsInfectedWithAVirus=¡El antivirus no ha podido validar este archivo (es probable que esté infectado por un virus)!
     ErrorSpecialCharNotAllowedForField=Los caracteres especiales no son admitidos por el campo "%s"
     ErrorNumRefModel=Hay una referencia en la base de datos (%s) y es incompatible con esta numeración. Elimine la línea o renombre la referencia para activar este módulo.
    -ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorQtyTooLowForThisSupplier=Cantidad insuficiente para este proveedor
    +ErrorOrdersNotCreatedQtyTooLow=Algunos pedidos no se han creado debido a una cantidad demasiado baja
     ErrorModuleSetupNotComplete=La configuración del módulo parece incompleta. Vaya a Inicio - Configuración - Módulos para completarla.
     ErrorBadMask=Error en la máscara
     ErrorBadMaskFailedToLocatePosOfSequence=Error, sin número de secuencia en la máscara
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=La cuenta de usuario de <b>%s</b> no se ha encontrado.
     ErrorLoginHasNoEmail=Este usuario no tiene e-mail. Imposible continuar.
     ErrorBadValueForCode=Valor incorrecto para el código. Vuelva a intentar con un nuevo valor...
     ErrorBothFieldCantBeNegative=Los campos %s y %s no pueden ser negativos
    +ErrorFieldCantBeNegativeOnInvoice=El campo <strong> %s </strong> no puede ser negativo en este tipo de factura. Si desea agregar una línea de descuento, primero cree el descuento con el enlace %s en la pantalla y aplíquelo a la factura. También puede pedir a su administrador que establezca la opción FACTURE_ENABLE_NEGATIVE_LINES en 1 para restaurar el comportamiento anterior.
     ErrorQtyForCustomerInvoiceCantBeNegative=Las cantidades en las líneas de facturas a clientes no pueden ser negativas
     ErrorWebServerUserHasNotPermission=La cuenta de ejecución del servidor web <b>%s</b> no dispone de los permisos para esto
     ErrorNoActivatedBarcode=No hay activado ningún tipo de código de barras
    @@ -138,7 +141,7 @@ ErrorBadFormat=¡El formato es erróneo!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, este miembro aún no está enlazado a un tercero. Enlace el miembro a un tercero existente o cree un tercero nuevo antes de crear la suscripción con la factura.
     ErrorThereIsSomeDeliveries=Error, hay entregas vinculadas a este envío. No se puede eliminar.
     ErrorCantDeletePaymentReconciliated=No se puede eliminar un registro bancario que esté conciliado
    -ErrorCantDeletePaymentSharedWithPayedInvoice=No se puede eliminar un pago de varias factura con alguna factura con estado Pagada
    +ErrorCantDeletePaymentSharedWithPayedInvoice=No se puede eliminar un pago de varias facturas con alguna factura con estado Pagada
     ErrorPriceExpression1=No se puede asignar a la constante '%s'
     ErrorPriceExpression2=No se puede redefinir la función incorporada '%s'
     ErrorPriceExpression3=Variable '%s' no definida en la definición de la función
    @@ -177,7 +180,7 @@ ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Definición incorrecta de la mat
     ErrorSavingChanges=Ha ocurrido un error al guardar los cambios
     ErrorWarehouseRequiredIntoShipmentLine=El almacén es obligatorio en la línea a enviar
     ErrorFileMustHaveFormat=El archivo debe tener el formato %s
    -ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    +ErrorSupplierCountryIsNotDefined=El país de este proveedor no está definido, corríjalo en su ficha
     ErrorsThirdpartyMerge=No se han podido fusionar los dos registros. Petición cancelada. 
     ErrorStockIsNotEnoughToAddProductOnOrder=No hay stock suficiente del producto %s para añadirlo a un nuevo pedido.
     ErrorStockIsNotEnoughToAddProductOnInvoice=No hay stock suficiente del producto %s para añadirlo a una nueva factura.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=Archivo no encontrado. Puede ser que la clave co
     ErrorProductBarCodeAlreadyExists=El código de barras del producto %s ya existe en otra referencia de producto.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Tenga en cuenta también que no es posible utilizar productos virtuales para aumentar/disminuir automáticamente subproductos cuando al menos un subproducto (o subproducto de subproductos) necesita un número de serie/lote.
     ErrorDescRequiredForFreeProductLines=La descripción es obligatoria para las líneas libres
    +ErrorAPageWithThisNameOrAliasAlreadyExists=La página/contenedor <strong>%s</strong> tiene el mismo nombre o alias alternativo que el que intenta utilizar
     
     # Warnings
     WarningPasswordSetWithNoAccount=Se fijó una contraseña para este miembro. Sin embargo, no se ha creado ninguna cuenta de usuario. Así que esta contraseña no se puede utilizar para acceder a Dolibarr. Puede ser utilizada por un módulo/interfaz externo, pero si no necesitar definir accesos de un miembro, puede desactivar la opción "Administrar un inicio de sesión para cada miembro" en la configuración del módulo miembros. Si necesita administrar un inicio de sesión, pero no necesita ninguna contraseña, puede dejar este campo vacío para evitar esta advertencia. Nota: También puede usarse el correo electrónico como inicio de sesión si el miembro está vinculada a un usuario.
    diff --git a/htdocs/langs/es_ES/holiday.lang b/htdocs/langs/es_ES/holiday.lang
    index 98959df18b2..c66e6c7122c 100644
    --- a/htdocs/langs/es_ES/holiday.lang
    +++ b/htdocs/langs/es_ES/holiday.lang
    @@ -1,10 +1,10 @@
     # Dolibarr language file - Source file is en_US - holiday
     HRM=RRHH
    -Holidays=Días libres
    -CPTitreMenu=Días libres
    +Holidays=Día libre
    +CPTitreMenu=Día libre
     MenuReportMonth=Estado mensual
     MenuAddCP=Nueva petición de vacaciones
    -NotActiveModCP=Debe activar el módulo Días libres retribuidos para ver esta página
    +NotActiveModCP=Debe activar el módulo Días libres para ver esta página
     AddCP=Realizar una petición de días libres
     DateDebCP=Fecha inicio
     DateFinCP=Fecha fin
    @@ -25,7 +25,7 @@ UserForApprovalLogin=Inicio de sesión de usuario de aprobación
     DescCP=Descripción
     SendRequestCP=Enviar la petición de días libres
     DelayToRequestCP=Las peticiones de días libres deben realizarse al menos <b>%s días</b> antes.
    -MenuConfCP=Balance de vacaciones
    +MenuConfCP=Balance de días libres
     SoldeCPUser=Su saldo de días libres es de <b>%s días</b>.
     ErrorEndDateCP=Debe indicar una fecha de fin superior a la fecha de inicio.
     ErrorSQLCreateCP=Se ha producido un error de SQL durante la creación :
    @@ -101,8 +101,8 @@ LEAVE_SICK=Baja por enfermedad
     LEAVE_OTHER=Otra petición
     LEAVE_PAID_FR=Vacación
     ## Configuration du Module ##
    -LastUpdateCP=Última actualización automática de días retribuidos
    -MonthOfLastMonthlyUpdate=Mes de la última actualización automática de días retribuidos
    +LastUpdateCP=Última actualización automática de días libres
    +MonthOfLastMonthlyUpdate=Mes de la última actualización automática de días libres
     UpdateConfCPOK=Actualización efectuada correctamente.
     Module27130Name= Gestión de los días libres
     Module27130Desc= Gestión de días libres
    @@ -112,7 +112,7 @@ NoticePeriod=Plazo de aviso
     HolidaysToValidate=Días libres retribuidos a validar
     HolidaysToValidateBody=A continuación encontrará una solicitud de días libres retribuidos para validar
     HolidaysToValidateDelay=Esta solicitud de días libres retribuidos tendrá lugar en un plazo de menos de %s días.
    -HolidaysToValidateAlertSolde=El usuario que ha realizado la solicitud de días libres retribuidos no dispone de suficientes días disponibles.
    +HolidaysToValidateAlertSolde=El usuario que ha realizado la solicitud de días retribuidos no dispone de suficientes días disponibles.
     HolidaysValidated=Días libres retribuidos validados
     HolidaysValidatedBody=Su solicitud de días libres retribuidos desde el %s al %s ha sido validada.
     HolidaysRefused=Días libres retribuidos denegados
    @@ -121,4 +121,9 @@ HolidaysCanceled=Días libres retribuidos cancelados
     HolidaysCanceledBody=Su solicitud de días libres retribuidos desde el %s al %s ha sido cancelada.
     FollowedByACounter=1: Este tipo de día retribuido necesita ser seguido por un contador. El contador se incrementa de forma manual o automáticamente y cuando se valida una solicitud, el contador disminuye.<br> 0: No es seguido por un contador.
     NoLeaveWithCounterDefined=No hay ningún tipo de peticiones definidas que deben ser seguidas por un contador
    -GoIntoDictionaryHolidayTypes=Vaya a <strong>Inicio - Configuración - Diccionarios - Tipos de vacaciones </strong> para configurar los diferentes tipos.
    +GoIntoDictionaryHolidayTypes=Vaya a <strong>Inicio - Configuración - Diccionarios - Tipos de días libres </strong> para configurar los diferentes tipos.
    +HolidaySetup=Configuración del módulo Días libres
    +HolidaysNumberingModules=Modelos de numeración de petición de días libres
    +TemplatePDFHolidays=Plantilla PDF para petición de días libres
    +FreeLegalTextOnHolidays=Texto libre en el PDF
    +WatermarkOnDraftHolidayCards=Marca de agua en las peticiones de días libres
    diff --git a/htdocs/langs/es_ES/interventions.lang b/htdocs/langs/es_ES/interventions.lang
    index faa4d1bcc67..f78e697eb88 100644
    --- a/htdocs/langs/es_ES/interventions.lang
    +++ b/htdocs/langs/es_ES/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervenciones
     InterventionCard=Ficha intervención
     NewIntervention=Nueva intevención
     AddIntervention=Crear intervención
    +ChangeIntoRepeatableIntervention=Cambiar a intervención repetible.
     ListOfInterventions=Listado de intervenciones
     ActionsOnFicheInter=Eventos sobre la intervención
     LastInterventions=Últimas %s intervenciones
    diff --git a/htdocs/langs/es_ES/languages.lang b/htdocs/langs/es_ES/languages.lang
    index ec9b14b68fc..82cedefa998 100644
    --- a/htdocs/langs/es_ES/languages.lang
    +++ b/htdocs/langs/es_ES/languages.lang
    @@ -86,3 +86,4 @@ Language_uz_UZ=Uzbeco
     Language_vi_VN=Vietnamita
     Language_zh_CN=Chino
     Language_zh_TW=Chino (Tradicional)
    +Language_bh_MY=Malayo
    diff --git a/htdocs/langs/es_ES/mails.lang b/htdocs/langs/es_ES/mails.lang
    index ad93ddbb2d8..d46afa5b25f 100644
    --- a/htdocs/langs/es_ES/mails.lang
    +++ b/htdocs/langs/es_ES/mails.lang
    @@ -11,9 +11,9 @@ MailFrom=Remitente
     MailErrorsTo=Errores a
     MailReply=Responder a
     MailTo=Destinatario(s)
    -MailToUsers=To user(s)
    +MailToUsers=A usuario(s)
     MailCC=Copia a
    -MailToCCUsers=Copy to users(s)
    +MailToCCUsers=Copia a usuario(s)
     MailCCC=Adjuntar copia a
     MailTopic=Asunto del e-mail
     MailText=Mensaje
    @@ -66,7 +66,7 @@ DateLastSend=Fecha del último envío
     DateSending=Fecha envío
     SentTo=Enviado a <b>%s</b>
     MailingStatusRead=Leido
    -YourMailUnsubcribeOK=El correo electrónico <b>%s</b> es correcta desuscribe.
    +YourMailUnsubcribeOK=El e-mail <b>%s</b> ha sido dado de baja correctamente de la lista de correo
     ActivateCheckReadKey=Clave usada para cifrar la URL utilizada para la función de "Darse de baja"
     EMailSentToNRecipients=E-Mail enviado a %s destinatarios.
     EMailSentForNElements=E-Mail enviado a %s elementos.
    @@ -166,4 +166,4 @@ InGoingEmailSetup=Configuración del correo entrante
     OutGoingEmailSetupForEmailing=Configuración de correo saliente (para correo masivo)
     DefaultOutgoingEmailSetup=Configuración de correo saliente predeterminada
     Information=Información
    -ContactsWithThirdpartyFilter=Contacts avec filtre client
    +ContactsWithThirdpartyFilter=Contactos con filtro de terceros.
    diff --git a/htdocs/langs/es_ES/main.lang b/htdocs/langs/es_ES/main.lang
    index f7607480a89..8a3079d4212 100644
    --- a/htdocs/langs/es_ES/main.lang
    +++ b/htdocs/langs/es_ES/main.lang
    @@ -55,7 +55,7 @@ ErrorRecordIsUsedByChild=Imposible de suprimir este registro. Esta siendo utiliz
     ErrorWrongValue=Valor incorrecto
     ErrorWrongValueForParameterX=Valor incorrecto del parámetro %s
     ErrorNoRequestInError=Ninguna petición en error
    -ErrorServiceUnavailableTryLater=Servicio no disponible actualmente. Vuélvalo a intentar más tarde.
    +ErrorServiceUnavailableTryLater=Servicio no disponible actualmente. Inténtelo de nuevo más tarde.
     ErrorDuplicateField=Duplicado en un campo único
     ErrorSomeErrorWereFoundRollbackIsDone=Se encontraron algunos errores. Modificaciones deshechas.
     ErrorConfigParameterNotDefined=El parámetro <b>%s</b> no está definido en el archivo de configuración Dolibarr <b>conf.php</b>.
    @@ -78,7 +78,7 @@ FileRenamed=El archivo ha sido renombrado correctamente
     FileGenerated=el archivo ha sido generado correctamente
     FileSaved=El fichero ha sido guardado correctamente
     FileUploaded=El archivo se ha subido correctamente
    -FileTransferComplete=Fichero(s) cargados correctamente
    +FileTransferComplete=Archivo(s) cargado(s) correctamente
     FilesDeleted=Fichero(s) eliminados correctamente
     FileWasNotUploaded=Un archivo ha sido seleccionado para adjuntarlo, pero aún no se ha subido. Haga clic en "Adjuntar este archivo" para ello.
     NbOfEntries=Nº de entradas
    @@ -94,7 +94,7 @@ Undefined=No definido
     PasswordForgotten=¿Olvidó su contraseña?
     NoAccount=¿Sin cuenta?
     SeeAbove=Mencionado anteriormente
    -HomeArea=Área inicio
    +HomeArea=Inicio
     LastConnexion=Última conexión
     PreviousConnexion=Conexión anterior
     PreviousValue=Valor previo
    @@ -142,6 +142,7 @@ Closed=Cerrado
     Closed2=Cerrado
     NotClosed=No cerrado
     Enabled=Activado
    +Enable=Activo
     Deprecated=Obsoleto
     Disable=Desactivar
     Disabled=Desactivado
    @@ -153,7 +154,7 @@ Update=Modificar
     Close=Cerrar
     CloseBox=Eliminar panel de su  tablero
     Confirm=Confirmar
    -ConfirmSendCardByMail=¿Quiere enviar el contenido de esta ficha por e-mail a la dirección <b>%s</b>?
    +ConfirmSendCardByMail=¿Quiere enviar el contenido de esta ficha por e-mail a <b>%s</b>?
     Delete=Eliminar
     Remove=Retirar
     Resiliate=Cancelar
    @@ -327,7 +328,7 @@ Copy=Copiar
     Paste=Pegar
     Default=Predeterminado
     DefaultValue=Valor por defecto
    -DefaultValues=Valores por defecto
    +DefaultValues=Valores/filtros/ordenación por defecto
     Price=Precio
     PriceCurrency=Precio (moneda)
     UnitPrice=Precio unitario
    @@ -403,7 +404,7 @@ DefaultTaxRate=Tasa de impuesto por defecto
     Average=Media
     Sum=Suma
     Delta=Diferencia
    -RemainToPay=Queda per pagar
    +RemainToPay=Queda por pagar
     Module=Módulo
     Modules=Módulos
     Option=Opción
    @@ -453,8 +454,8 @@ Generate=Generar
     Duration=Duración
     TotalDuration=Duración total
     Summary=Resumen
    -DolibarrStateBoard=Estadísticas
    -DolibarrWorkBoard=Indicadores de trabajo
    +DolibarrStateBoard=Estadísticas de la base de datos
    +DolibarrWorkBoard=Items pendientes
     NoOpenedElementToProcess=Sin elementos a procesar
     Available=Disponible
     NotYetAvailable=Aún no disponible
    @@ -468,7 +469,7 @@ and=y
     or=o
     Other=Otro
     Others=Otros
    -OtherInformations=Otras informaciones
    +OtherInformations=Otra información
     Quantity=Cantidad
     Qty=Cant.
     ChangedBy=Modificado por
    @@ -507,7 +508,7 @@ NoneF=Ninguna
     NoneOrSeveral=Ninguno o varios
     Late=Retraso
     LateDesc=El retraso que indica si un registro lleva retraso o no depende de la configuración. Pregunte a su administrador para cambiar el retraso desde el menú Inicio - Configuración - Alertas.
    -NoItemLate=No late item
    +NoItemLate=Sin items en retraso
     Photo=Foto
     Photos=Fotos
     AddPhoto=Añadir foto
    @@ -530,18 +531,6 @@ September=septiembre
     October=octubre
     November=noviembre
     December=Diciembre
    -JanuaryMin=Ene
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Abr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Ago
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dic
     Month01=enero
     Month02=febrero
     Month03=marzo
    @@ -646,6 +635,8 @@ SendMail=Enviar e-mail
     EMail=E-mail
     NoEMail=Sin e-mail
     Email=Correo
    +AlreadyRead=Ya leído
    +NotRead=No lleído
     NoMobilePhone=Sin teléfono móvil
     Owner=Propietario
     FollowingConstantsWillBeSubstituted=Las siguientes constantes serán substituidas por su valor correspondiente.
    @@ -724,7 +715,7 @@ ValidatePayment=Validar pago
     CreditOrDebitCard=Tarjeta de crédito o débito
     FieldsWithAreMandatory=Los campos marcados por un <b>%s</b> son obligatorios
     FieldsWithIsForPublic=Los campos marcados por <b>%s</b> se mostrarán en la lista pública de miembros. Si no desea verlos, desactive la casilla "público".
    -AccordingToGeoIPDatabase=(Obtenido por conversión GeoIP)
    +AccordingToGeoIPDatabase=(obtenido por conversión GeoIP)
     Line=Línea
     NotSupported=No soportado
     RequiredField=Campo obligatorio
    @@ -732,6 +723,8 @@ Result=Resultado
     ToTest=Probar
     ValidateBefore=Para poder usar esta función debe validarse la ficha
     Visibility=Visibilidad
    +Totalizable=Totalizable
    +TotalizableDesc=Este campo es totalizable en los listados
     Private=Privado
     Hidden=Caché
     Resources=Recursos
    @@ -750,6 +743,7 @@ LinkTo=Enlazar a
     LinkToProposal=Enlazar a pedido
     LinkToOrder=Enlazar a pedido
     LinkToInvoice=Enlazar a factura
    +LinkToTemplateInvoice=Enlazar a plantilla de factura
     LinkToSupplierOrder=Enlazar a pedido a proveedor
     LinkToSupplierProposal=Enlazar a presupuesto de proveedor
     LinkToSupplierInvoice=Enlazar a factura de proveedor
    @@ -758,6 +752,7 @@ LinkToIntervention=Enlazar a intervención
     CreateDraft=Crear borrador
     SetToDraft=Volver a borrador
     ClickToEdit=Clic para editar
    +ClickToRefresh=Clic para actualizar
     EditWithEditor=Editar con CKEditor
     EditWithTextEditor=Editar con editor de texto
     EditHTMLSource=Editar código HTML
    @@ -772,14 +767,14 @@ ByDay=Por día
     BySalesRepresentative=Por comercial
     LinkedToSpecificUsers=Enlazado a un contacto de usuario particular
     NoResults=Ningún resultado
    -AdminTools=Utilidades administración
    +AdminTools=Herramientas de administración
     SystemTools=Utilidades sistema
     ModulesSystemTools=Utilidades módulos
     Test=Prueba
     Element=Elemento
     NoPhotoYet=No hay fotografía disponible
     Dashboard=Tablero
    -MyDashboard=Mi tablero
    +MyDashboard=Mi panel de control
     Deductible=Deducible
     from=de
     toward=hacia
    @@ -818,12 +813,12 @@ Sincerely=Atentamente
     DeleteLine=Eliminación de línea
     ConfirmDeleteLine=¿Está seguro de querer eliminar esta línea?
     NoPDFAvailableForDocGenAmongChecked=Sin PDF disponibles para la generación de documentos entre los registros seleccionados
    -TooManyRecordForMassAction=Demasiados registros seleccionados para la acción masiva. La acción está restringida a un listado de %s registros.
    +TooManyRecordForMassAction=Demasiados registros seleccionardos para la acción masiva. La acción está restringida a un listado de %s registros.
     NoRecordSelected=Sin registros seleccionados
     MassFilesArea=Área de archivos generados por acciones masivas
     ShowTempMassFilesArea=Mostrar área de archivos generados por acciones masivas
    -ConfirmMassDeletion=Confirmación de borrado en lote
    -ConfirmMassDeletionQuestion=Esta seguro que quiere supprimir el/los %s registro(s) seleccionado(s) ?
    +ConfirmMassDeletion=Confirmación borrado en masa
    +ConfirmMassDeletionQuestion=¿Estás seguro que quieres eliminar los %s registro(s) seleccionado(s)?
     RelatedObjects=Objetos relacionados
     ClassifyBilled=Clasificar facturado
     ClassifyUnbilled=Clasificar no facturado
    @@ -841,7 +836,7 @@ Calendar=Calendario
     GroupBy=Agrupado por...
     ViewFlatList=Ver lista plana
     RemoveString=Eliminar cadena '%s'
    -SomeTranslationAreUncomplete=Algunos idiomas pueden estar parcialmente traducidos o pueden contener errores. Si detecta algunos, puede arreglar los archivos de idiomas registrándose en <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">http://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Algunos de los idiomas ofrecidos pueden estar parcialmente traducidos o pueden contener errores. Si detecta algunos, puede corregir los archivos de idiomas registrándose en <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">http://transifex.com/projects/p/dolibarr/</a>.
     DirectDownloadLink=Enlace de descarga directa
     DirectDownloadInternalLink=Enlace de descarga directa (necesita estar registrado y necesita permisos)
     Download=Descargar
    @@ -864,13 +859,22 @@ TitleSetToDraft=Devolver a borrador
     ConfirmSetToDraft=¿Está seguro de querer devolver al estado Borrador?
     ImportId=ID de importación
     Events=Eventos
    -EMailTemplates=Plantillas E-Mails
    +EMailTemplates=Plantillas Email
     FileNotShared=Archivo no compartido a público externo
     Project=Proyecto
     Projects=Proyectos
    +LeadOrProject=Oportunidad | Proyecto
    +LeadsOrProjects=Oportunidades | Proyectos
    +Lead=Oportunidad
    +Leads=Oportunidades
    +ListOpenLeads=Lista oportunidades abiertas
    +ListOpenProjects=Lista proyectos abiertos
    +NewLeadOrProject=Nueva oportunidad o proyecto
     Rights=Permisos
     LineNb=Línea
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Letras del cliente
    +TabLetteringSupplier=Letras del proveedor
     # Week day
     Monday=Lunes
     Tuesday=Martes
    @@ -927,7 +931,7 @@ SearchIntoInterventions=Intervenciones
     SearchIntoContracts=Contratos
     SearchIntoCustomerShipments=Envíos a clientes
     SearchIntoExpenseReports=Informes de gastos
    -SearchIntoLeaves=Permisos
    +SearchIntoLeaves=Día libre
     CommentLink=Comentarios
     NbComments=Número de comentarios
     CommentPage=Espacio de comentarios
    @@ -945,6 +949,7 @@ LocalAndRemote=Local y remoto
     KeyboardShortcut=Atajo de teclado
     AssignedTo=Asignada a
     Deletedraft=Eliminar borrador
    -ConfirmMassDraftDeletion=Confirmación de borrado de borradores en lote
    +ConfirmMassDraftDeletion=Confirmación de borrado de borradores en masa
     FileSharedViaALink=Archivo compartido a través de un enlace
    -
    +SelectAThirdPartyFirst=Selecciona un tercero primero...
    +YouAreCurrentlyInSandboxMode=Actualmente se encuentra en el modo %s "sandbox"
    diff --git a/htdocs/langs/es_ES/members.lang b/htdocs/langs/es_ES/members.lang
    index 0ba42342885..e284a793d26 100644
    --- a/htdocs/langs/es_ES/members.lang
    +++ b/htdocs/langs/es_ES/members.lang
    @@ -88,7 +88,7 @@ ConfirmDeleteSubscription=¿Está seguro de querer eliminar esta afiliación?
     Filehtpasswd=Archivo htpasswd
     ValidateMember=Validar un miembro
     ConfirmValidateMember=¿Está seguro de querer validar a este miembro?
    -FollowingLinksArePublic=Los vínculos siguientes son páginas accesibles a todos y no protegidas por ninguna habilitación Dolibarr.
    +FollowingLinksArePublic=Los siguientes enlaces son páginas abiertas que no están protegidas por ningún permiso de Dolibarr. No son páginas con formato, se proporcionan como ejemplo para mostrar cómo enumerar la base de datos de miembros.
     PublicMemberList=Listado público de miembros
     BlankSubscriptionForm=Formulario público de auto-inscripción
     BlankSubscriptionFormDesc=Dolibarr puede proporcionar una página pública para que los visitantes externos puedan solicitar afiliarse. Si se encuentra activo un módulo de pago en línea, se propondrá automáticamente un formulario de pago.
    @@ -111,7 +111,7 @@ SendingAnEMailToMember=Enviar e-mail de información al miembro
     SendingEmailOnAutoSubscription=Enviar E-Mail en una auto-inscripción
     SendingEmailOnMemberValidation=Enviar E-Mail en la validación de un nuevo miembro
     SendingEmailOnNewSubscription=Enviar E-Mail en una nueva suscripción
    -SendingReminderForExpiredSubscription=Sending reminder for expired subscriptions
    +SendingReminderForExpiredSubscription=Enviar un recordatorio para suscripción caducada
     SendingEmailOnCancelation=Enviar E-Mail en una cancelación
     # Topic of email templates
     YourMembershipRequestWasReceived=Su membresía fue recibida.
    @@ -124,7 +124,7 @@ CardContent=Contenido de su ficha de miembro
     ThisIsContentOfYourMembershipRequestWasReceived=Queremos informarle que se ha solicitado una nueva membresía. <br> <br>
     ThisIsContentOfYourMembershipWasValidated=Queremos hacerle saber que su membresía fue validada con la siguiente información: <br> <br>
     ThisIsContentOfYourSubscriptionWasRecorded=Queremos informarle que su nueva suscripción fue grabada. <br> <br>
    -ThisIsContentOfSubscriptionReminderEmail=Queremos informarle que su nueva suscripción está a punto de expirar.  Esperamos que pueda renovarla<br><br>
    +ThisIsContentOfSubscriptionReminderEmail=Queremos informarle que su nueva suscripción está a punto o ha expirado  (__MEMBER_LAST_SUBSCRIPTION_DATE_END__).  Esperamos que pueda renovarla<br><br>
     ThisIsContentOfYourCard=Este es un recordatorio de la información que obtenemos sobre usted. No dude en contactar con nosotros si algo le parece incorrecto.<br><br>
     DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Asunto del e-mail recibido en caso de auto-inscripción de un invitado
     DescADHERENT_AUTOREGISTER_NOTIF_MAIL=E-mail recibido en caso de auto-inscripción de un invitado
    @@ -188,11 +188,10 @@ MembersByNature=Esta pantalla presenta una estadística del número de miembros
     MembersByRegion=Esta pantalla presenta una estadística del número de miembros por región
     VATToUseForSubscriptions=Tasa de IVA para las afiliaciones
     NoVatOnSubscription=Sin IVA para en las afiliaciones
    -MEMBER_PAYONLINE_SENDEMAIL=E-mail a usar para alertas de e-mail cuando Dolibarr reiba una confirmación de pago validado para una subscripción (por ejemplo: paymentdone@example.com)
     ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Producto usado para las suscripciones en línea en facturas: %s
     NameOrCompany=Nombre o Empresa
     SubscriptionRecorded=Suscripción guardada
     NoEmailSentToMember=No se envió ningún e-mail al miembro
     EmailSentToMember=E-Mail enviado al miembro a %s
     SendReminderForExpiredSubscriptionTitle=Enviar un recordatorio por E-Mail para la suscripción expirada
    -SendReminderForExpiredSubscription=Enviar recordatorio por e-mail a los miembros cuando la suscripción esté a punto de caducar (el parámetro es el número de días antes del final de la suscripción para enviar el recordatorio)
    +SendReminderForExpiredSubscription=Enviar recordatorio por e-mail a los miembros cuando la suscripción esté a punto de caducar (el parámetro es el número de días antes del final de la suscripción para enviar el recordatorio. Puede ser una lista de días separados por un punto y coma, por ejemplo, '10; 5; 0; -5 ')
    diff --git a/htdocs/langs/es_ES/modulebuilder.lang b/htdocs/langs/es_ES/modulebuilder.lang
    index 1f8f53879ca..c0c8b091ab0 100644
    --- a/htdocs/langs/es_ES/modulebuilder.lang
    +++ b/htdocs/langs/es_ES/modulebuilder.lang
    @@ -13,7 +13,7 @@ ModuleInitialized=Módulo inicializado
     FilesForObjectInitialized=Ficheros para el nuevo objeto '%s' inicializado
     FilesForObjectUpdated=Ficheros del objeto '%s' actualizado (ficheros .sql y fichero .class.php)
     ModuleBuilderDescdescription=Introduzca aquí toda la información general que describa su módulo
    -ModuleBuilderDescspecifications=Puedes introducir aquí un texto largo para describir las especificaciones de tu módulo que no estén estructuradas en otras pestañas. Así que tienes al alcance de la mano todas las reglas para desarrollar. Asimismo, este texto se incluirá en la documentación generada (ver última pestaña). Puede utilizar el formato Markdown, pero se recomienda usar el formato Asciidoc (Comparación entre .md y .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
    +ModuleBuilderDescspecifications=Puede introducir aquí un texto largo para describir las especificaciones de su módulo que no estén estructuradas en otras pestañas. Así que tiene al alcance de la mano todas las reglas para desarrollar. Asimismo, este texto se incluirá en la documentación generada (ver última pestaña). Puede utilizar el formato Markdown, pero se recomienda usar el formato Asciidoc (Comparación entre .md y .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
     ModuleBuilderDescobjects=Define aquí los objetos que deseas gestionar con tu módulo. Se creará una clase CRUD DAO, archivos SQL, página para listar el registro de objetos, para crear/editar/ver un registro y una API.
     ModuleBuilderDescmenus=Esta pestaña está dedicada a definir entradas de menú proporcionadas por su módulo.
     ModuleBuilderDescpermissions=Esta pestaña está dedicada a definir los nuevos permisos que desea proporcionar con su módulo.
    @@ -21,12 +21,12 @@ ModuleBuilderDesctriggers=Esta es la vista de triggers proporcionada por tu mód
     ModuleBuilderDeschooks=Esta pestaña está dedicada a los hooks.
     ModuleBuilderDescwidgets=Esta pestaña está dedicada a administrar/crear widgets.
     ModuleBuilderDescbuildpackage=Puedes generar aquí un archivo comprimido "listo para distribuir" (un archivo .zip normalizado) de tu módulo y un archivo de documentación "listo para distribuir". Simplemente haga clic en el botón para crear el paquete o el archivo de documentación.
    -EnterNameOfModuleToDeleteDesc=Puedes eliminar tu módulo. ATENCIÓN: Todos los ficheros del módulo pero también los datos estructurados y la documentación será eliminada definitivamente!
    -EnterNameOfObjectToDeleteDesc=Puedes eliminar un objeto. ATENCIÓN: Todos los ficheros relacionados con el objeto serán eliminados!
    +EnterNameOfModuleToDeleteDesc=Puede eliminar su módulo. ATENCIÓN: ¡Todos los ficheros del módulo pero también los datos estructurados y la documentación será eliminada definitivamente!
    +EnterNameOfObjectToDeleteDesc=Puede eliminar un objeto. ATENCIÓN: ¡Todos los ficheros relacionados con el objeto serán eliminados!
     DangerZone=Zona peligrosa
     BuildPackage=Generar paquete/documentación
     BuildDocumentation=Generar documentación
    -ModuleIsNotActive=Este módulo no ha sido activado todavía. Ve a %s para activarlo o pulse aquí:
    +ModuleIsNotActive=Este módulo no ha sido activado todavía. Vaya a %s para activarlo o pulse aquí:
     ModuleIsLive=Este módulo ha sido activado. Cualquier cambio en él puede romper una característica activa actual.
     DescriptionLong=Descripción larga
     EditorName=Nombre del editor
    @@ -47,7 +47,7 @@ RegenerateClassAndSql=Borrar y regenerar archivos de clase y sql
     RegenerateMissingFiles=Generar archivos no encontrados
     SpecificationFile=Fichero con las reglas de negocio
     LanguageFile=Archivo para el idioma
    -ConfirmDeleteProperty=¿Estás seguro que quieres eliminar la propiedad <strong>%s</strong>? Esto cambiará código en la clase PHP pero también eliminará la columna de la definición de la tabla del objeto.
    +ConfirmDeleteProperty=¿Está seguro de querer eliminar la propiedad <strong>%s</strong>? Esto cambiará código en la clase PHP pero también eliminará la columna de la definición de la tabla del objeto.
     NotNull=No NULL
     NotNullDesc=1=Establecer la base de datos en NOT NULL. -1=Permitir valores nulos y forzar valor a NULL si está vacío ('' o 0).
     SearchAll=Usada para 'buscar todo'
    @@ -66,7 +66,7 @@ PageForLib=Archivo para bibliotecas PHP
     SqlFileExtraFields=Archivo Sql para atributos complementarios
     SqlFileKey=Fichero Sql de claves
     AnObjectAlreadyExistWithThisNameAndDiffCase=Un objeto ya existe con este nombre y un caso diferente
    -UseAsciiDocFormat=Puedes utilizar el formato Markdown, pero se recomienda usar el formato Asciidoc (Comparación entre .md y .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
    +UseAsciiDocFormat=Puede usar el formato Markdown, pero se recomienda usar el formato Asciidoc (Comparación entre .md y .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
     IsAMeasure=Es una medida
     DirScanned=Directorio analizado
     NoTrigger=No hay trigger
    @@ -74,7 +74,7 @@ NoWidget=No hay widget
     GoToApiExplorer=Ir al Explorador de API
     ListOfMenusEntries=Lista de entradas de menú
     ListOfPermissionsDefined=Listado de permisos definidos
    -SeeExamples=See examples here
    +SeeExamples=Vea ejemplos aquí
     EnabledDesc=Condición para tener este campo activo (Ejemplos: 1 o $conf->global->MYMODULE_MYOPTION)
     VisibleDesc=¿Es el campo visible? (Ejemplos: 0=Nunca visible, 1=Visible en listado y  en formularios creación /actualización/visualización, 2=Visible en listado solamente, 3=Visible en formularios creación /actualización/visualización. Usar un valor negativo significa que no se muestra el campo predeterminado en el listado pero se puede seleccionar para verlo)
     IsAMeasureDesc=¿Se puede acumular el valor del campo para obtener un total en el listado? (Ejemplos: 1 o 0)
    @@ -88,7 +88,7 @@ TriggerDefDesc=Defina en el archivo trigger el código que desea ejecutar para c
     SeeIDsInUse=Ver IDs en uso en su instalación
     SeeReservedIDsRangeHere=Ver rango de IDs reservados
     ToolkitForDevelopers=Herramientas para desarrolladores de Dolibarr
    -TryToUseTheModuleBuilder=Si tiene conocimientos en SQL y PHP, puede intentar utilizar el asistente nativo de creación de módulos. Simplemente active el módulo y use el asistente haciendo clic <span class="fa fa-bug"></span>en  en el menú superior derecho. Advertencia: esta es una funcionalidad para desarrolladores, un uso inadecuado puede romper su aplicación.
    +TryToUseTheModuleBuilder=Si tiene conocimientos de SQL y PHP, puede usar el asistente del creador de módulos nativo. <br> Active el módulo <strong> %s </strong> y use el asistente haciendo clic en <span class = "fa fa-bug"> </span> en el menú superior derecho. <br> Advertencia: esta es una función avanzada para desarrolladores, ¡no experimente <b> no </b> en su sitio de producción!
     SeeTopRightMenu=Ver <span class="fa fa-bug"></span> en el menú superior derecho
     AddLanguageFile=Añadir archivo de idioma
     YouCanUseTranslationKey=Aquí puede usar una clave que es la clave de traducción encontrada en el archivo de idioma (ver pestaña "Idiomas")
    @@ -96,6 +96,7 @@ DropTableIfEmpty=(Eliminar tabla si está vacía)
     TableDoesNotExists=La tabla %s no existe
     TableDropped=Tabla %s eliminada
     InitStructureFromExistingTable=Construir la estructura de array de una tabla existente
    -UseAboutPage=Disallow the about page
    -UseDocFolder=Disallow the documentation folder
    -UseSpecificReadme=Use a specific ReadMe
    +UseAboutPage=Desactivar la página acerca de
    +UseDocFolder=Desactivar directorio de documentación
    +UseSpecificReadme=Usar un archivo Léame específico
    +RealPathOfModule=Ruta real del módulo
    diff --git a/htdocs/langs/es_ES/other.lang b/htdocs/langs/es_ES/other.lang
    index acdc769a7c5..f277782cecc 100644
    --- a/htdocs/langs/es_ES/other.lang
    +++ b/htdocs/langs/es_ES/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Código seguridad
     NumberingShort=Nº
     Tools=Utilidades
     TMenuTools=Utilidades
    -ToolsDesc=Todas las utilidades que no están incluidas en otras entradas del menú se encuentran aquí.<br><br>Están disponibles en el menú de la izquierda.
    +ToolsDesc=Todas las utilidades que no están incluidas en otras entradas del menú se encuentran aquí.<br>Están disponibles en el menú de la izquierda.
     Birthday=Aniversario
     BirthdayDate=Fecha de cumpleaños
     DateToBirth=Fecha de nacimiento
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Mes siguiente de la fecha de la factura
     DateNextInvoiceBeforeGen=Fecha de la próxima factura (antes de la generación)
     DateNextInvoiceAfterGen=Fecha de la próxima factura (después de la generación)
     
    -Notify_FICHINTER_ADD_CONTACT=Contacto añadido a intervención
    -Notify_FICHINTER_VALIDATE=Validación ficha intervención
    -Notify_FICHINTER_SENTBYMAIL=Envío ficha de intervención por e-mail
     Notify_ORDER_VALIDATE=Validación pedido cliente
     Notify_ORDER_SENTBYMAIL=Envío pedido de cliente por e-mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Envío pedido a proveedor por e-mail
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Creación tercero
     Notify_COMPANY_SENTBYMAIL=Correos enviados desde la ficha del tercero
     Notify_BILL_VALIDATE=Validación factura
     Notify_BILL_UNVALIDATE=Devalidación factura a cliente
    -Notify_BILL_PAYED=Cobro factura a cliente
    +Notify_BILL_PAYED=Factura del cliente pagada
     Notify_BILL_CANCEL=Cancelación factura a cliente
     Notify_BILL_SENTBYMAIL=Envío factura a cliente por e-mail
     Notify_BILL_SUPPLIER_VALIDATE=Validación factura de proveedor
    -Notify_BILL_SUPPLIER_PAYED=Pago factura de proveedor
    +Notify_BILL_SUPPLIER_PAYED=Factura del proveedor pagada
     Notify_BILL_SUPPLIER_SENTBYMAIL=Envío factura de proveedor por e-mail
     Notify_BILL_SUPPLIER_CANCELED=Factura del proveedor cancelada
     Notify_CONTRACT_VALIDATE=Validación contrato
     Notify_FICHEINTER_VALIDATE=Validación intervención
    +Notify_FICHINTER_ADD_CONTACT=Contacto añadido a intervención
    +Notify_FICHINTER_SENTBYMAIL=Envío ficha de intervención por e-mail
     Notify_SHIPPING_VALIDATE=Validación envío
     Notify_SHIPPING_SENTBYMAIL=Envío expedición por e-mail
     Notify_MEMBER_VALIDATE=Validación miembro
    @@ -71,6 +70,10 @@ Notify_PROJECT_CREATE=Creación de proyecto
     Notify_TASK_CREATE=Tarea creada
     Notify_TASK_MODIFY=Tarea modificada
     Notify_TASK_DELETE=Tarea eliminada
    +Notify_EXPENSE_REPORT_VALIDATE=Informe de gastos validado (se requiere aprobación)
    +Notify_EXPENSE_REPORT_APPROVE=Informe de gastos aprobado
    +Notify_HOLIDAY_VALIDATE=Petición días libres validada (se requiere aprobación)
    +Notify_HOLIDAY_APPROVE=Petición días libres aprobada
     SeeModuleSetup=Vea la configuración del módulo %s
     NbOfAttachedFiles=Número archivos/documentos adjuntos
     TotalSizeOfAttachedFiles=Tamaño total de los archivos/documentos adjuntos
    @@ -80,18 +83,18 @@ LinkedObject=Objeto adjuntado
     NbOfActiveNotifications=Número de notificaciones (nº de destinatarios)
     PredefinedMailTest=__(Hello)__\nEste es un correo de prueba enviado a __EMAIL__.\nLas dos líneas están separadas por un retorno de carro.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nEste es un correo de <b> prueba</b> (la palabra prueba debe estar en negrita). <br> Las dos líneas están separadas por un retorno de carro. <br> <br> __USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hola)__\n\nNos ponemos en contacto con usted para facilitarle el presupuesto __PREF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hola)__\n\nNos ponemos en contacto con usted para facilitarle nuestra solicitud de presupuesto __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hola)__\n\nNos ponemos en contacto con usted para facilitarle el pedido __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hola)__\n\nNos ponemos en contacto con usted para facilitarle nuestro pedido __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hola)__\n\nNos ponemos en contacto con usted para facilitarle la factura __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hola)__\n\nNos ponemos en contacto con usted para facilitarle el envío __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hola)__\n\nNos ponemos en contacto con usted para facilitarle la intervención __REF__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nAquí encontrará la factura __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nNos gustaría advertirle que la factura __REF__ parece no ser pagada. Así que le enviamos de nuevo la factura en el archivo adjunto, como un recordatorio.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nNos ponemos en contacto con usted para facilitarle el presupuesto __PREF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nNos ponemos en contacto con usted para facilitarle el presupuesto __PREF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nNos ponemos en contacto con usted para facilitarle el presupuesto __PREF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nNos ponemos en contacto con usted para facilitarle el presupuesto __PREF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nNos ponemos en contacto con usted para facilitarle el presupuesto __PREF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nNos ponemos en contacto con usted para facilitarle el presupuesto __PREF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nNos ponemos en contacto con usted para facilitarle el presupuesto __PREF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hola)__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hola)__\n\n\n__(Sinceramente)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    +PredefinedMailContentLink=Puede hacer clic en el siguiente enlace para realizar su pago, si aún no lo ha hecho.\n\n%s\n\n
     DemoDesc=Dolibarr es un ERP/CRM para la gestión de negocios (profesionales o asociaciones), compuesto de módulos funcionales independientes y opcionales. Una demostración que incluya todos estos módulos no tiene sentido porque no utilizará todos los módulos. Además, tiene disponibles varios tipos de perfiles de demostración.
     ChooseYourDemoProfil=Elija el perfil de demostración que mejor se adapte a sus necesidades ...
     ChooseYourDemoProfilMore=... o construya su perfil<br>(modo de selección manual)
    @@ -198,6 +201,10 @@ EMailTextOrderApprovedBy=Pedido %s aprobado por %s
     EMailTextOrderRefused=Pedido %s rechazado
     EMailTextOrderRefusedBy=Pedido %s rechazado por %s
     EMailTextExpeditionValidated=El envío %s ha sido validado.
    +EMailTextExpenseReportValidated=El informe de gastos %s ha sido validado.
    +EMailTextExpenseReportApproved=El informe de gastos %s ha sido aprobado.
    +EMailTextHolidayValidated=La petición de lías libres %s ha sido validada.
    +EMailTextHolidayApproved=La petición de lías libres %s ha sido aprobada.
     ImportedWithSet=Lote de importación (import key)
     DolibarrNotification=Notificación automática
     ResizeDesc=Introduzca el nuevo ancho <b>O</b> la nueva altura. La relación se conserva al cambiar el tamaño ...
    @@ -205,7 +212,7 @@ NewLength=Nuevo ancho
     NewHeight=Nueva altura
     NewSizeAfterCropping=Nuevas dimensiones después de recortar
     DefineNewAreaToPick=Establezca la zona de imagen a conservar (clic izquierdo sobre la imagen y arrastre hasta la esquina opuesta)
    -CurrentInformationOnImage=Esta página le permite cambiar el tamaño o cuadrar la imagen. Aquí hay información sobre la imagen que se está editando
    +CurrentInformationOnImage=Esta herramienta le permite cambiar el tamaño o cuadrar la imagen. Aquí hay información sobre la imagen que se está editando
     ImageEditor=Editor de imagen
     YouReceiveMailBecauseOfNotification=Usted está recibiendo este mensaje porque su correo electrónico está suscrito a algunas notificaciones automáticas para informarle acerca de eventos especiales del programa %s de %s.
     YouReceiveMailBecauseOfNotification2=El evento en cuestión es el siguiente:
    @@ -236,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Su contraseña debe contener al menos <strong>
     YourPasswordHasBeenReset=Su contraseña ha sido restablecida con éxito
     ApplicantIpAddress=Dirección IP del solicitante
     SMSSentTo=SMS enviado a %s
    +MissingIds=IDs no encontrados
    +ThirdPartyCreatedByEmailCollector=Tercero creado por el recolector de e-mails del ID de e-mail %s
    +ContactCreatedByEmailCollector=Contacto/dirección creada por el recolector de e-mails del ID de e-mail %s
    +ProjectCreatedByEmailCollector=Proyecto creado por el recolector de e-mails del ID de e-mail %s
     
     ##### Export #####
     ExportsArea=Área de exportaciones
    diff --git a/htdocs/langs/es_ES/products.lang b/htdocs/langs/es_ES/products.lang
    index def354ead7b..dfcce57e708 100644
    --- a/htdocs/langs/es_ES/products.lang
    +++ b/htdocs/langs/es_ES/products.lang
    @@ -17,12 +17,12 @@ Reference=Referencia
     NewProduct=Nuevo producto
     NewService=Nuevo servicio
     ProductVatMassChange=Cambio de IVA masivo
    -ProductVatMassChangeDesc=Puede usar esta página para modificar la tasa de IVA definida en los productos o servicios de un valor a otro. Tenga cuidado, este cambio  se realizará en toda la base de datos.
    +ProductVatMassChangeDesc=Esta página le permite cambiar el tipo de IVA definido en  los productos o servicios de un valor a otro. Tenga en cuenta que el cambio se lleva a cabo en masa sobre toda la base de datos.
     MassBarcodeInit=Inicialización masiva de códigos de barra
     MassBarcodeInitDesc=Puede usar esta página para inicializar el código de barras en los objetos que no tienen un código de barras definido. Compruebe antes que el módulo de códigos de barras esté configurado correctamente.
     ProductAccountancyBuyCode=Código contable (compras)
     ProductAccountancySellCode=Código contable (ventas)
    -ProductAccountancySellIntraCode=Código de contabilidad (venta intracomunitaria)
    +ProductAccountancySellIntraCode=Código contable (venta intracomunitaria)
     ProductAccountancySellExportCode=Código de contabilidad (venta de exportación)
     ProductOrService=Producto o servicio
     ProductsAndServices=Productos y servicios
    @@ -97,7 +97,7 @@ NoteNotVisibleOnBill=Nota (no visible en las facturas, presupuestos, etc.)
     ServiceLimitedDuration=Si el servicio es de duración limitada :
     MultiPricesAbility=Varios segmentos de precios por producto/servicio (cada cliente está en un segmento)
     MultiPricesNumPrices=Nº de precios
    -AssociatedProductsAbility=Activar funcionalidad de gestión de productos virtuales
    +AssociatedProductsAbility=Activar productos compuestos (kits)
     AssociatedProducts=Productos compuestos
     AssociatedProductsNumber=Nº de productos que componen este producto
     ParentProductsNumber=Nº de productos que este producto compone
    @@ -252,7 +252,7 @@ DefaultPrice=Precio por defecto
     ComposedProductIncDecStock=Incrementar/Decrementar stock al cambiar su padre
     ComposedProduct=Sub-producto
     MinSupplierPrice=Precio mínimo de compra
    -MinCustomerPrice=Minimum selling price
    +MinCustomerPrice=Precio de venta mínimo
     DynamicPriceConfiguration=Configuración de precio dinámico
     DynamicPriceDesc=En la ficha de producto, con este módulo activado, debería ser capaz de establecer funciones matemáticas para calcular los precios de cliente o proveedor. Esta función puede utilizar todos los operadores matemáticos, algunas constantes y variables. Puede definir aquí las variables que desea utilizar y si la variable necesita una actualización automática, la URL externa que debe utilizarse para pedirle a Dolibarr que actualice automáticamente el valor.
     AddVariable=Añadir variable
    @@ -293,7 +293,8 @@ ProductSheet=Hoja de producto
     ServiceSheet=Hoja de servicio
     PossibleValues=Valores posibles
     GoOnMenuToCreateVairants=Vaya al menú %s - %s para preparar variantes de atributos (como colores, tamaño, ...)
    -
    +UseProductFournDesc=Usar las descripciones de los productos de los proveedores en los documentos del proveedor.
    +ProductSupplierDescription=Descripción del proveedor para el producto.
     #Attributes
     VariantAttributes=Atributos de variantes
     ProductAttributes=Atributos de variantes para productos
    @@ -329,6 +330,8 @@ NbOfDifferentValues=Nº de valores diferentes
     NbProducts=Nº de productos
     ParentProduct=Producto padre
     HideChildProducts=Ocultar productos hijos
    +ShowChildProducts=Mostrara variantes de productos
    +NoEditVariants=Vaya a la ficha del producto padre y edite el impacto del precio de las variantes en la pestaña de variantes
     ConfirmCloneProductCombinations=¿Desea copiar todas las variantes del producto al producto con la referencia dada?
     CloneDestinationReference=Referencia de producto de destino
     ErrorCopyProductCombinations=Se ha producido un error al copiar las variantes de producto
    diff --git a/htdocs/langs/es_ES/projects.lang b/htdocs/langs/es_ES/projects.lang
    index 6c97e4fb36c..16c361ac5e6 100644
    --- a/htdocs/langs/es_ES/projects.lang
    +++ b/htdocs/langs/es_ES/projects.lang
    @@ -77,7 +77,7 @@ Time=Tiempo
     ListOfTasks=Listado de tareas
     GoToListOfTimeConsumed=Ir al listado de tiempos consumidos
     GoToListOfTasks=Ir al listado de tareas
    -GoToGanttView=Go to Gantt view
    +GoToGanttView=Ir a la vista de Gantt
     GanttView=Vista de Gantt
     ListProposalsAssociatedProject=Listado de presupuestos asociados al proyecto
     ListOrdersAssociatedProject=Listado de pedidos de clientes asociados al proyecto
    @@ -86,12 +86,13 @@ ListPredefinedInvoicesAssociatedProject=Listado de facturas predefinidas asociad
     ListSupplierOrdersAssociatedProject=Listado de pedidos a proveedor asociados al proyecto
     ListSupplierInvoicesAssociatedProject=Listado de facturas de proveedores asociadas al proyecto
     ListContractAssociatedProject=Listado de contratos asociados al proyecto
    -ListShippingAssociatedProject=Listado de envíos asociados a este proyecto
    +ListShippingAssociatedProject=Listado de envíos asociados al proyecto
     ListFichinterAssociatedProject=Listado de intervenciones asociadas al proyecto
     ListExpenseReportsAssociatedProject=Listado de informes de gastos asociados al proyecto
     ListDonationsAssociatedProject=Listado de donaciones asociadas al proyecto
    -ListVariousPaymentsAssociatedProject=Lista de pagos diversos asociados con el proyecto
    -ListActionsAssociatedProject=Lista de eventos asociados al proyecto
    +ListVariousPaymentsAssociatedProject=Lista de pagos diversos asociados al proyecto
    +ListSalariesAssociatedProject=Listado de pagos de salarios asociados al proyecto
    +ListActionsAssociatedProject=Listado de eventos asociados al proyecto
     ListTaskTimeUserProject=Listado de tiempos en tareas del proyecto
     ListTaskTimeForTask=Listado de tiempos en tareas
     ActivityOnProjectToday=Actividad en el proyecto hoy
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Proyecto %s modificado
     TaskCreatedInDolibarr=La tarea %s fue creada
     TaskModifiedInDolibarr=La tarea %s fue modificada
     TaskDeletedInDolibarr=La tarea %s fue eliminada
    -OpportunityStatus=Estado de oportunidad
    +OpportunityStatus=Estado oportunidades
     OpportunityStatusShort=Estado oportunidad
     OpportunityProbability=Probabilidad de oportunidades
     OpportunityProbabilityShort=Prob. Opor.
    -OpportunityAmount=Importe Oportunidad
    +OpportunityAmount=Importe oportunidad
     OpportunityAmountShort=Importe oportunidad
     OpportunityAmountAverageShort=Importe medio oportunidad
     OpportunityAmountWeigthedShort=Importe ponderado oportunidad
    @@ -169,6 +170,7 @@ AddElement=Vincular a elmento
     # Documents models
     DocumentModelBeluga=Plantilla de proyecto de resumen objetos vinculados
     DocumentModelBaleine=Plantilla de informe del proyecto para tareas
    +DocumentModelTimeSpent=Plantilla de informe de proyecto para el tiempo dedicado
     PlannedWorkload=Carga de trabajo prevista
     PlannedWorkloadShort=Carga de trabajo
     ProjectReferers=Items relacionados
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Proyectos con este usuario como contacto
     TasksWithThisUserAsContact=Tareas asignadas a este usuario
     ResourceNotAssignedToProject=No asignado al proyecto
     ResourceNotAssignedToTheTask=No asignado a la tarea
    +NoUserAssignedToTheProject=Ningún usuario asignado a este proyecto
     TimeSpentBy=Tiempo dedicado por
     TasksAssignedTo=Tareas asignadas a
     AssignTaskToMe=Asignarme tarea
    @@ -202,12 +205,13 @@ TaskAssignedToEnterTime=Tarea asignada. Debería poder introducir tiempos en est
     IdTaskTime=Id
     YouCanCompleteRef=Si desea completar la referencia con alguna información (para usarlo como filtros de búsqueda), se recomienda añadir un caracter - para separarlo, la numeración automática seguirá funcionando correctamente para los próximos proyectos. Por ejemplo %s-ABC. También puede preferir añadir claves de búsqueda en la etiqueta. Pero la mejor práctica puede ser añadir un campo dedicado, también llamados atributos adicionales.
     OpenedProjectsByThirdparties=Proyectos abiertos de terceros
    -OnlyOpportunitiesShort=Solamente oportunidades
    +OnlyOpportunitiesShort=Sólo oportunidades
     OpenedOpportunitiesShort=Oportunidades abiertas
    +NotOpenedOpportunitiesShort=Sin oportunidades abiertas
     NotAnOpportunityShort=No es una oportunidad
    -OpportunityTotalAmount=Importe total oportunidades
    -OpportunityPonderatedAmount=Importe medio oportunidades
    -OpportunityPonderatedAmountDesc=Importe ponderado oportunidades con probabilidad
    +OpportunityTotalAmount=Importe total de oportunidades
    +OpportunityPonderatedAmount=Importe medio de oportunidades
    +OpportunityPonderatedAmountDesc=Importe medio oportunidades con probabilidad
     OppStatusPROSP=Prospección
     OppStatusQUAL=Cualificación
     OppStatusPROPO=Presupuesto
    @@ -227,4 +231,6 @@ AllowCommentOnProject=Permitir comentarios de los usuarios en los proyectos
     DontHavePermissionForCloseProject=No tienes permisos para cerrar el proyecto %s
     DontHaveTheValidateStatus=El proyecto %s debe estar abierto para ser cerrado
     RecordsClosed=%s proyecto(s) cerrado(s)
    -SendProjectRef=Information project %s
    +SendProjectRef=Acerca del proyecto %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Debe activarse el módulo 'Pago de salarios de los empleados'  para poder definir el precio por hora de los empleados y poder valorar el tiempo empleado
    +NewTaskRefSuggested=Referencia de tarea ya utilizada, se sugiere una nueva referencia de tarea
    diff --git a/htdocs/langs/es_ES/propal.lang b/htdocs/langs/es_ES/propal.lang
    index 9da5dcc64d7..309576cabe1 100644
    --- a/htdocs/langs/es_ES/propal.lang
    +++ b/htdocs/langs/es_ES/propal.lang
    @@ -33,7 +33,7 @@ PropalStatusSigned=Firmado (a facturar)
     PropalStatusNotSigned=No firmado (cerrado)
     PropalStatusBilled=Facturado
     PropalStatusDraftShort=Borrador
    -PropalStatusValidatedShort=Validado
    +PropalStatusValidatedShort=Validado (abierto)
     PropalStatusClosedShort=Cerrado
     PropalStatusSignedShort=Firmado
     PropalStatusNotSignedShort=No firmado
    @@ -53,7 +53,7 @@ ErrorPropalNotFound=Presupuesto %s inexistente
     AddToDraftProposals=Añadir a presupuesto borrador
     NoDraftProposals=Sin presupuestos borrador
     CopyPropalFrom=Crear presupuesto por copia de uno existente
    -CreateEmptyPropal=Crear presupuesto vacío
    +CreateEmptyPropal=Crear propuesta comercial vacía o desde lista de productos/servicios.
     DefaultProposalDurationValidity=Plazo de validez por defecto (en días)
     UseCustomerContactAsPropalRecipientIfExist=Utilizar dirección contacto de seguimiento de cliente definido en vez de la dirección del tercero como destinatario de los presupuestos
     ClonePropal=Clonar presupuesto
    @@ -75,9 +75,10 @@ AvailabilityTypeAV_1M=1 mes
     TypeContact_propal_internal_SALESREPFOLL=Comercial seguimiento presupuesto
     TypeContact_propal_external_BILLING=Contacto cliente de facturación presupuesto
     TypeContact_propal_external_CUSTOMER=Contacto cliente seguimiento presupuesto
    -TypeContact_propal_external_SHIPPING=Customer contact for delivery
    +TypeContact_propal_external_SHIPPING=Contacto cliente para envíos
     # Document models
     DocModelAzurDescription=Modelo de presupuesto completo (logo...)
    +DocModelCyanDescription=Modelo de presupuesto completo (logo...)
     DefaultModelPropalCreate=Modelo por defecto
     DefaultModelPropalToBill=Modelo por defecto al cerrar un presupuesto (a facturar)
     DefaultModelPropalClosed=Modelo por defecto al cerrar un presupuesto (no facturado)
    diff --git a/htdocs/langs/es_ES/resource.lang b/htdocs/langs/es_ES/resource.lang
    index 2f4732d7b90..2b2feb78181 100644
    --- a/htdocs/langs/es_ES/resource.lang
    +++ b/htdocs/langs/es_ES/resource.lang
    @@ -5,7 +5,7 @@ DeleteResource=Eliminar recurso
     ConfirmDeleteResourceElement=¿Está seguro de querer eliminar el recurso de este elemento?
     NoResourceInDatabase=Sin recursos en la base de datos.
     NoResourceLinked=Sin recursos enlazados
    -
    +ActionsOnResource=Eventos sobre este recurso
     ResourcePageIndex=Listado de recursos
     ResourceSingular=Recurso
     ResourceCard=Ficha recurso
    diff --git a/htdocs/langs/es_ES/sendings.lang b/htdocs/langs/es_ES/sendings.lang
    index fa0f73aef1d..e65604aae05 100644
    --- a/htdocs/langs/es_ES/sendings.lang
    +++ b/htdocs/langs/es_ES/sendings.lang
    @@ -52,8 +52,8 @@ ActionsOnShipping=Eventos sobre la expedición
     LinkToTrackYourPackage=Enlace para el seguimento de su paquete
     ShipmentCreationIsDoneFromOrder=De momento, la creación de una nueva expedición se realiza desde la ficha de pedido.
     ShipmentLine=Línea de expedición
    -ProductQtyInCustomersOrdersRunning=Product quantity into open customer orders
    -ProductQtyInSuppliersOrdersRunning=Product quantity into open purchase orders
    +ProductQtyInCustomersOrdersRunning=Cantidad en pedidos de clientes abiertos
    +ProductQtyInSuppliersOrdersRunning=Cantidad en pedidos a proveedores abiertos
     ProductQtyInShipmentAlreadySent=Ya ha sido enviada la cantidad del producto del pedido de cliente abierto
     ProductQtyInSuppliersShipmentAlreadyRecevied=Cantidad en pedidos a proveedores ya recibidos
     NoProductToShipFoundIntoStock=Sin stock disponible en el almacén <b>%s</b>. Corrija el stock o vuelva atrás para seleccionar otro almacén.
    diff --git a/htdocs/langs/es_ES/stocks.lang b/htdocs/langs/es_ES/stocks.lang
    index b352f8b228e..8b5c2c33dad 100644
    --- a/htdocs/langs/es_ES/stocks.lang
    +++ b/htdocs/langs/es_ES/stocks.lang
    @@ -44,7 +44,6 @@ TransferStock=Transferir stock
     MassStockTransferShort=Transferencia de stock en masa
     StockMovement=Movimiento de stock
     StockMovements=Movimientos de stock
    -LabelMovement=Etiqueta del movimiento
     NumberOfUnit=Número de piezas
     UnitPurchaseValue=Precio de compra unitario
     StockTooLow=Stock insuficiente
    @@ -67,8 +66,8 @@ DeStockOnValidateOrder=Decrementar los stocks físicos sobre los pedidos de clie
     DeStockOnShipment=Decrementar stock real en la validación de envíos
     DeStockOnShipmentOnClosing=Decrementar stock real en el cierre del envío
     ReStockOnBill=Incrementar los stocks físicos sobre las facturas/abonos de proveedores
    -ReStockOnValidateOrder=Increase real stocks on purchase orders approbation
    -ReStockOnDispatchOrder=Incrementa los stocks físicos en el desglose manual de la recepción de los pedidos a proveedores en los almacenes
    +ReStockOnValidateOrder=Incrementar los stocks físicos en la aprobación de pedidos a proveedores
    +ReStockOnDispatchOrder=Incrementa los stocks físicos en el desglose manual de la recepción de los pedidos a proveedores
     OrderStatusNotReadyToDispatch=El pedido aún no está o no tiene un estado que permita un desglose de stock.
     StockDiffPhysicTeoric=Motivo de la diferencia entre valores físicos y teóricos
     NoPredefinedProductToDispatch=No hay productos predefinidos en este objeto. Por lo tanto no se puede realizar un desglose de stock.
    @@ -134,6 +133,7 @@ StockMustBeEnoughForInvoice=El nivel de stock debe ser suficiente para añadir e
     StockMustBeEnoughForOrder=El nivel de stock debe ser suficiente para añadir el producto/servicio al pedido (se realiza comprobación del stock real actual al agregar una línea en el pedido según las reglas del módulo stocks)
     StockMustBeEnoughForShipment= El nivel de stock debe ser suficiente para añadir el producto/servicio en el envío (se realiza comprobación del stock real actual al agregar una línea en el envío según las reglas del módulo stocks)
     MovementLabel=Etiqueta del movimiento
    +TypeMovement=Tipo de movimiento
     DateMovement=Fecha de movimiento
     InventoryCode=Movimiento o código de inventario
     IsInPackage=Contenido en el paquete
    @@ -201,6 +201,10 @@ ExitEditMode=Salir
     inventoryDeleteLine=Eliminación de línea
     RegulateStock=Regular stock
     ListInventory=Listado
    -StockSupportServices=Servicios de apoyo a la gestión de stocks
    +StockSupportServices=La gestión de stock soporta Servicios
     StockSupportServicesDesc=Por defecto sólo puede almacenar el producto con el tipo "producto". Si está activado y si el servicio de módulo está activado, también puede almacenar un producto con el tipo "servicio"
     ReceiveProducts=Recibir artículos
    +StockIncreaseAfterCorrectTransfer=Incremento por corrección/transferencia
    +StockDecreaseAfterCorrectTransfer=Decremento por corrección/transferencia
    +StockIncrease=Incremento de stock
    +StockDecrease=Decremento de stock
    diff --git a/htdocs/langs/es_ES/users.lang b/htdocs/langs/es_ES/users.lang
    index 85570ab8898..c41e993f8df 100644
    --- a/htdocs/langs/es_ES/users.lang
    +++ b/htdocs/langs/es_ES/users.lang
    @@ -35,7 +35,7 @@ SuperAdministrator=Super Administrador
     SuperAdministratorDesc=Administrador global
     AdministratorDesc=Administrador
     DefaultRights=Permisos por defecto
    -DefaultRightsDesc=Defina aquí los permisos <b>por defecto</b>, es decir: los permisos que se asignarán automáticamente a un nuevo usuario en el momento de su creación (Ver la ficha usuario para cambiar los permisos a un usuario existente).
    +DefaultRightsDesc=Defina aquí los permisos <u>por defecto</u>, es decir: los permisos que se asignarán automáticamente a un <u>nuevo</u> usuario en el momento de su creación (Ver la ficha usuario para cambiar los permisos a un usuario existente).
     DolibarrUsers=Usuarios Dolibarr
     LastName=Apellidos
     FirstName=Nombre
    @@ -48,7 +48,7 @@ PasswordChangeRequest=Solicitud para cambiar la contraseña de <b>%s</b>
     PasswordChangeRequestSent=Petición de cambio de contraseña para <b>%s</b> enviada a <b>%s</b>.
     ConfirmPasswordReset=Confirmar restablecimiento de contraseña
     MenuUsersAndGroups=Usuarios y grupos
    -LastGroupsCreated=Latest %s groups created
    +LastGroupsCreated=Últimos %s grupos creados
     LastUsersCreated=Últimos %s usuarios creados
     ShowGroup=Ver grupo
     ShowUser=Ver usuario
    @@ -66,7 +66,7 @@ CreateDolibarrThirdParty=Crear un tercero
     LoginAccountDisableInDolibarr=La cuenta está desactivada en Dolibarr
     UsePersonalValue=Utilizar valores personalizados
     InternalUser=Usuario interno
    -ExportDataset_user_1=Usuarios Dolibarr y campos adicionales
    +ExportDataset_user_1=Usuarios y sus propiedades.
     DomainUser=Usuario de dominio
     Reactivate=Reactivar
     CreateInternalUserDesc=Este formulario le permite crear un usuario interno para su empresa/organización. Para crear un usuario externo (cliente, proveedor, etc), use el botón "Crear una cuenta de usuario" desde una ficha de un contacto del tercero.
    @@ -108,3 +108,4 @@ UserAccountancyCode=Código contable usuario
     UserLogoff=Usuario desconectado
     UserLogged=Usuario conectado
     DateEmployment=Fecha de contratación
    +DateEmploymentEnd=Fecha de baja
    diff --git a/htdocs/langs/es_ES/website.lang b/htdocs/langs/es_ES/website.lang
    index bda2c9cd750..189da73243f 100644
    --- a/htdocs/langs/es_ES/website.lang
    +++ b/htdocs/langs/es_ES/website.lang
    @@ -1,12 +1,13 @@
     # Dolibarr language file - Source file is en_US - website
     Shortname=Código
    -WebsiteSetupDesc=Cree aquí tanto la entrada como el número de diferentes sitios web que necesita. Entonces entre en el menú de sitios web para editarlos.
    +WebsiteSetupDesc=Cree aquí los sitios web que necesite. Entonces entre en el menú de sitios web para editarlos.
     DeleteWebsite=Eliminar sitio web
     ConfirmDeleteWebsite=¿Está seguro de querer eliminar este sitio web? Todas las páginas y contenido también sera eliminado
     WEBSITE_TYPE_CONTAINER=Tipo de página/contenedor
     WEBSITE_PAGE_EXAMPLE=Página web para usar como ejemplo
     WEBSITE_PAGENAME=Nombre/alias página
     WEBSITE_ALIASALT=Nombres de página/alias alternativos
    +WEBSITE_ALIASALTDesc=Utilice aquí la lista de otros nombres/alias para que también se pueda acceder a la página usando estos otros nombres/alias (por ejemplo, el nombre anterior después de cambiar el nombre del alias para mantener el enlace posterior en funcionamiento). La sintaxis es: <br> alternativename1, alternativename2, ...
     WEBSITE_CSS_URL=URL del fichero CSS externo
     WEBSITE_CSS_INLINE=Contenido del archivo CSS (común a todas las páginas)
     WEBSITE_JS_INLINE=Contenido del archivo Javascript (común a todas las páginas)
    @@ -17,17 +18,19 @@ HtmlHeaderPage=Encabezado HTML (específico de esta página solamente)
     PageNameAliasHelp=Nombre o alias de la página.<br>Este alias es utilizado también para construir una URL SEO cuando el website sea lanzado desde un Host Virtual de un servidor (como Apache, Nginx...). Usar el botón "<strong>%s</strong>" para editar este alias.
     EditTheWebSiteForACommonHeader=Nota: Si desea definir un encabezado personalizado para todas las páginas, edite el encabezado en el nivel del sitio en lugar de en la página/contenedor.
     MediaFiles=Librería de medios
    -EditCss=Editar Estilo/CSS o cabecera HTML
    +EditCss=Editar propiedades
     EditMenu=Editar menu
     EditMedias=Editar los medios
    -EditPageMeta=Editar Meta
    +EditPageMeta=Editar propiedades de página/contenedor
    +EditInLine=Editar en línea
     AddWebsite=Añadir sitio web
     Webpage=Página web/Contenedor
     AddPage=Añadir página/contenedor
     HomePage=Página de inicio
     PageContainer=Página/contenedor
    -PreviewOfSiteNotYetAvailable=Vista previa de su sitio web <strong>%s</strong> todavía no disponible. Debe de añadir primero una página.
    +PreviewOfSiteNotYetAvailable=La vista previa de su sitio web <strong>%s</strong> aún no está disponible. Primero debe '<strong>Importar una plantilla de sitio web completa</strong>' o simplemente '<strong>Agregar una página/contenedor</strong>'.
     RequestedPageHasNoContentYet=La página pedida con id %s todavía no tiene contenido, o cache file.tpl.php ha sido eliminado. Editar el contenido de la página para resolverlo.
    +SiteDeleted=Sitio web '%s' eliminado
     PageContent=Página/Contenedor
     PageDeleted=Página/Contenedor '%s' o sitio web %s eliminado
     PageAdded=Página/Contenedor '%s' añadido
    @@ -36,7 +39,7 @@ ViewPageInNewTab=Ver página en una pestaña nueva
     SetAsHomePage=Establecer como Página de inicio
     RealURL=URL Real
     ViewWebsiteInProduction=Ver sitio web usando la URL de inicio
    -SetHereVirtualHost=Si tu puedes crear, en tu servidor web (Apache, Nginx...), un Host Virtual con PHP activado y un directorio Root en <br><strong>%s</strong> <br>introduce aquí el nombre del host virtual que has creado, así que la previsualización puede verse usando este acceso directo al servidor, y no solo usando el servidor de Dolibarr
    +SetHereVirtualHost=Si puede crear, en su servidor web (Apache, Nginx...), un Host Virtual con PHP activado y un directorio Root en <br><strong>%s</strong> <br>introduzca aquí el nombre del host virtual que ha creado, así que la previsualización puede verse usando este acceso directo al servidor, y no solo usando el servidor de Dolibarr
     YouCanAlsoTestWithPHPS=En el entorno de desarrollo, es posible que prefiera probar el sitio con el servidor web incrustado de PHP (se requiere PHP 5.5) ejecutando <br><strong> php -S 0.0.0.0:8080 -t %s</strong>
     CheckVirtualHostPerms=Compruebe también que el host virtual tiene <strong>%s</strong> en archivos en <strong>%s</strong>
     ReadPerm=Leido
    @@ -45,6 +48,7 @@ PreviewSiteServedByWebServer=<u>Vista previa de %s en una nueva pestaña.</u> <b
     PreviewSiteServedByDolibarr=<u>Vista previa %s en una nueva pestaña.</u> <br> <br> El %s será servido por el servidor de Dolibarr por lo que no necesita instalar ningún servidor web extra (como Apache, Nginx, IIS). <br> El inconveniente es que la URL de las páginas no amigables y comienzan con la ruta de su Dolibarr. <br> URL que sirve Dolibarr: <br><strong>%s</strong>   <br> <br>Para utilizar su propio servidor web externo para servir esta web, cree un host virtual en su servidor web que apunte al directorio<br> <strong>%s</strong><br> luego escriba el nombre de este servidor virtual y haga clic en el otro botón de vista previa.
     VirtualHostUrlNotDefined=URL del Host Virtual servido por un servidor externo no definido
     NoPageYet=No hay páginas todavía
    +YouCanCreatePageOrImportTemplate=Puede crear una nueva página o importar una plantilla de sitio web completa
     SyntaxHelp=Ayuda en la sintaxis del código
     YouCanEditHtmlSourceckeditor=Puede editar código fuente HTML utilizando el botón "Origen" en el editor.
     YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> Puede incluir código PHP en este fuente usando los tags <strong>&lt;?php ?&gt;</strong>. Dispone de estas variables globales: $conf, $langs, $db, $mysoc, $user, $website.<br><br><span class="fa fa-bug"></span> También puede incluir contenido de otra Página/Contenedor con la siguiente sintaxis:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-download"></span> Para incluir un <strong>enlace para descargar</strong> un archivo guardado en el directorio <strong>documents</strong>, use el wrapper <strong>document.php</strong> :<br>Por ejemplo, para un archivo de documents/ecm (es necesario estar logueado), la sintaxis:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>Para un archivo de into documents/medias (directorio abierto para acceso público), la sintaxis es:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>Para un archivo compartido mediante un enlace compartido (acceso abierto utilizando la clave hash para compartir del archivo), la sintaxis es:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> Para incluir una <strong>imagen</strong> guardada en el directorio <strong>documents</strong> , use el wrapper <strong>viewimage.php</strong> :<br>Ejemplo para una imagen de documents/medias (acceso abierto), la sintaxis es:<br><strong>&lt;a href="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
    @@ -59,7 +63,8 @@ WebsiteId=ID del sitio web
     CreateByFetchingExternalPage=Crear página/contenedor mediante la búsqueda de la página de la URL externa ...
     OrEnterPageInfoManually=O crear una página vacía desde cero ...
     FetchAndCreate=Buscar y crear
    -ExportSite=Exportar sitio
    +ExportSite=Exportar sitio web
    +ImportSite=Importar plantilla de sitio web
     IDOfPage=Id de la página
     Banner=Banner
     BlogPost=Entrada en el blog
    @@ -73,7 +78,7 @@ AnotherContainer=Otro contenedor
     WEBSITE_USE_WEBSITE_ACCOUNTS=Habilitar tabla de cuentas del sitio web
     WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Habilitar tabla para almacenar cuentas del sitio web (inicio de sesión/contraseña) para cada sitio web/tercero
     YouMustDefineTheHomePage=Antes debe definir la página de inicio por defecto
    -OnlyEditionOfSourceForGrabbedContentFuture=Note: only edition of HTML source will be possible when a page content is initiliazed by grabbing it from an external page (WYSIWYG editor will not be available)
    +OnlyEditionOfSourceForGrabbedContentFuture=Atención: la creación de una página web mediante la importación de una página web externa está reservada para usuarios experimentados. Dependiendo de la complejidad de la página de origen, el resultado de la importación puede diferir una vez importado del original. Además, si la página de origen utiliza un estilo CSS común o un javascript no compatible, puede interrumpir el aspecto o las características del editor del sitio web al trabajar en esta página. Este método es una forma más rápida de tener una página, pero se recomienda crear su nueva página desde cero o desde una plantilla de página sugerida. También tenga en cuenta que solo será posible la edición de código HTML cuando el contenido de una página se haya inicializado al agarrar desde una página externa (el editor "en línea" NO estará disponible)
     OnlyEditionOfSourceForGrabbedContent=Nota: solo será posible editar una fuente HTML cuando el contenido de una página se integre utilizando una página externa
     GrabImagesInto=Obtener también imágenes encontradas en css y página.
     ImagesShouldBeSavedInto=Las imágenes deben guardarse en el directorio
    @@ -82,3 +87,9 @@ SubdirOfPage=Sub-directorio dedicado a la página
     AliasPageAlreadyExists=Ya existe el alias de página <strong>%s</strong>
     CorporateHomePage=Página de inicio corporativa
     EmptyPage=Página vacía
    +ExternalURLMustStartWithHttp=La URL externa debe comenzar con http:// o https://
    +ZipOfWebsitePackageToImport=Archivo zip del paquete de sitio web
    +ShowSubcontainers=Mostrar contenedores incluidos
    +InternalURLOfPage=URL interna de la página
    +ThisPageIsTranslationOf=Esta página/contenedor es traducción de
    +ThisPageHasTranslationPages=Esta página/contenedor tiene traducción
    diff --git a/htdocs/langs/es_MX/admin.lang b/htdocs/langs/es_MX/admin.lang
    index 1fe9b2ac842..49489213a95 100644
    --- a/htdocs/langs/es_MX/admin.lang
    +++ b/htdocs/langs/es_MX/admin.lang
    @@ -1,23 +1,25 @@
     # Dolibarr language file - Source file is en_US - admin
     VersionProgram=Versión del programa
    +FileCheck=Comprobar integridad de archivos
    +FileCheckDesc=Esta herramienta le permite verificar la integridad de los archivos y la configuración de su aplicación, comparando cada archivo con los archivos oficiales. El valor de algunas constantes de configuración también pueden verificarse. Puede usar esta herramienta para detectar si algunos archivos fueron modificados por un hacker, por ejemplo.
    +FileIntegrityIsStrictlyConformedWithReference=La integridad de los archivos está estrictamente conformada con la referencia.
    +FileIntegrityIsOkButFilesWereAdded=La verificación de integridad de los archivos ha pasado, sin embargo, se han agregado algunos archivos nuevos.
    +FileIntegritySomeFilesWereRemovedOrModified=La verificación de integridad de los archivos ha fallado. Algunos archivos fueron modificados, eliminados o agregados.
    +GlobalChecksum=Checksum global
    +MakeIntegrityAnalysisFrom=Hacer análisis de integridad de los archivos de la aplicación de
     SessionId=ID de sesión
     SessionSaveHandler=Modalidad para guardar sesiones
     SessionSavePath=Ubicación de la sesión guardada
     PurgeSessions=Depuración de sesiones
     ConfirmPurgeSessions=¿Realmente desea depurar todas las sesiónes? Esto desconectara a todos los usuarios (excepto usted).
    -NoSessionListWithThisHandler=El controlador configurado para guardar sesion en tu PHP no permite listar todas las sesiones ejecutandose.
    -ConfirmLockNewSessions=¿Seguro que deseas restringir cualquier nueva conexión Dolibarr? Solamente el usuario <b>%s</b> será capaz de conectarse después de esto.
     UnlockNewSessions=Remover bloqueo de conexión
     YourSession=Tu sesión
    -Sessions=Sesión de usuarios
     WebUserGroup=Usuario/Grupo del servidor web
    -NoSessionFound=Tu PHP parece no permitir listar sesiones activas. El directorio usado para guardar las sesiones (<b>%s</b>) puede estar protegido (Por ejemplo, por permisos del SO o por la directiva open_basedir de PHP).
     DBStoringCharset=Charset de la base de datos para almacenar información
     DBSortingCharset=Charset de la base para ordenar información
     WarningModuleNotActive=El módulo <b>%s</b> debe estar habilitado
     WarningOnlyPermissionOfActivatedModules=Sólo los permisos relacionados a los módulos activados son mostrados aquí. Puedes activar otros módulos en la página Inicio->Configuración->Módulos
     DolibarrSetup=Instalación o actualización de Dolibarr
    -SetupArea=Área de configuración
     UploadNewTemplate=Subir nueva(s) plantilla(s)
     FormToTestFileUploadForm=Formulario para probar la carga de archivos (según la configuración)
     IfModuleEnabled=Nota: sí es efectivo sólo si el módulo <b>%s</b> está activado
    @@ -57,10 +59,8 @@ DetailPosition=Clasificar cantidad para definir posición del menú
     AllMenus=Todo
     NotConfigured=Modulo/Aplicación no configurado
     SetupShort=Configuración
    -OtherSetup=Otra configuración
     CurrentValueSeparatorThousand=Separador millar
     LanguageBrowserParameter=Parámetro %s
    -LocalisationDolibarrParameters=Parametros de localización
     ClientTZ=Zona Horaria cliente (usuario)
     OSTZ=Servidor OS Zona Horaria
     PHPTZ=Servidor PHP Zona Horaria
    @@ -106,9 +106,7 @@ AddDropTable=Agregar comando DROP TABLE
     NameColumn=Nombre de columnas
     EncodeBinariesInHexa=Convertir datos binarios en hexadecimal
     OnlyActiveElementsAreShown=Solo elementos de <a href="%s">\nmodulos habilitados</a> son\n mostrados.
    -ModulesDesc=Módulos Dolibarr definen que\naplicación/característica esta habilitada en\nel programa. Algunas\naplicaciónes/módulos requieren\npermisos que tu debes otorgar a\nusuarios, despues de activarlos.\nHaz click en el botón on/off para habilitar un\nmódulo/aplicación.
     ModulesMarketPlaceDesc=Tu puedes encontrar mas módulos para descargar en sitios web externos en el Internet
    -WebSiteDesc=Sitios web de consulta para encontrar mas módulos...
     URL=Vínculo
     ActivateOn=Activar
     ActiveOn=Activado
    @@ -120,22 +118,17 @@ OfficialWebSite=Sitio web oficial Dolibarr Internacional
     OfficialWiki=Documentación Dolibarr en Wiki
     OfficialDemo=Dolibarr demo en línea
     LastActivationIP=IP de activación más reciente
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     WarningSettingSortOrder=Advertencia, establecer un orden predeterminado puede resultar en un error técnico al pasar a la página de lista si "campo" es un campo desconocido. Si experimenta un error de este tipo, vuelva a esta página para eliminar el orden predeterminado y restaurar el comportamiento predeterminado.
     Module20Name=Propuestas
     Module30Name=Facturas
     Module770Name=Reporte de gastos
    -Module62000Desc=Añadir característica(s) para administrar Incoterm
     DictionaryCanton=Estado/Provincia
     DictionaryAccountancyJournal=Diarios de contabilidad
     Upgrade=Actualizar
     CompanyName=Nombre
     LDAPFieldFirstName=Nombre(s)
    -CacheByServerDesc=Por ejemplo, utilizando la directiva Apache "ExpiresByType image/gif A2592000"
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
     AGENDA_SHOW_LINKED_OBJECT=Mostrar objeto vinculado en la vista de agenda
     ConfFileMustContainCustom=Instalar o construir un módulo externo desde la aplicación necesita guardar los archivos del módulo en el directorio <strong> %s </strong>. Para que este directorio sea procesado por Dolibarr, debe configurar su <strong> conf/conf.php </strong> para agregar las 2 líneas de directiva: <strong> $dolibarr_main_url_root_alt='/custom'; </strong> <br> <strong> $dolibarr_main_document_root_alt='%s/custom'; </strong>
     MailToSendProposal=Propuestas de clientes
     MailToSendOrder=Pedidos de los clientes
     MailToSendInvoice=Facturas de clientes
    -WarningNoteModulePOSForFrenchLaw=Este módulo %s es compatible con las leyes francesas (Loi Finance 2016) porque el módulo Non Reversible Logs se activa automáticamente.
    diff --git a/htdocs/langs/es_MX/companies.lang b/htdocs/langs/es_MX/companies.lang
    index 7c8f3679e88..3563b8eb803 100644
    --- a/htdocs/langs/es_MX/companies.lang
    +++ b/htdocs/langs/es_MX/companies.lang
    @@ -13,11 +13,7 @@ Contacts=Contactos/Direcciones
     ThirdPartyContacts=Contactos de terceros
     ThirdPartyContact=Contacto/Dirección de tercero
     AliasNames=Nombre simple (comercial, marca registrada, ...)
    -AliasNameShort=Nombre simple
    -CountryIsInEEC=El país está dentro de la Comunidad Económica Europea
    -ThirdPartyName=Nombre de tercero
     ThirdPartyCustomersWithIdProf12=Clientes con %s o %s
    -ToCreateContactWithSameName=Creará automáticamente un contacto/dirección con la misma información en tercero. En la mayoría de los casos, incluso si su tercero es una persona física, la creación de un tercero solo es suficiente.
     ParentCompany=Empresa matriz
     ReportByQuarter=Reporte por tasa
     CivilityCode=Código de civilidad
    @@ -98,7 +94,6 @@ CustomerRelativeDiscount=Descuento relativo del cliente
     CustomerAbsoluteDiscountShort=Descuento absoluto
     CompanyHasRelativeDiscount=Éste cliente tiene un descuento por defecto de <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Este cliente no tiene ningún descuento relativo por defecto
    -CompanyHasAbsoluteDiscount=Este cliente tiene descuento disponible (notas de crédito o anticipos) para <b> %s </b> %s
     CompanyHasCreditNote=Este cliente aún tiene notas de crédito por <b>%s</b> %s
     CompanyHasNoAbsoluteDiscount=Este cliente no tiene descuentos fijos disponibles
     DiscountNone=Ninguno
    @@ -108,21 +103,15 @@ NoContactDefined=No hay contacto definido
     DefaultContact=Contacto/dirección por defecto
     DeleteACompany=Eliminar empresa
     PersonalInformations=Datos personales
    -CustomerCode=Código de cliente
    -CustomerCodeShort=Código de cliente
    -CustomerCodeDesc=Código de cliente, único para todos los clientes
     RequiredIfCustomer=Requerido si el tercero es un cliente o cliente potencial
     CompanyDeleted=Empresa "%s" eliminada de la base de datos.
     ListOfContacts=Lista de contactos/direcciones
     ListOfContactsAddresses=Lista de contactos/direcciones
    -ListOfThirdParties=Lista de terceros
     ContactsAllShort=Todos (Sin filtro)
     ContactForOrdersOrShipments=Contacto de la orden o del envío
     ContactForInvoices=Contacto de facturación
     NoContactForAnyOrderOrShipments=Este contacto no es un contacto para cualquier pedido o envío
     EditCompany=Editar empresa
    -VATIntraCheckDesc=El enlace <b>%s</b> permite consultar al servicio de control de números de IVA intracomunitario. Se requiere acceso a Internet desde el servidor para que este servicio funcione.
    -VATIntraManualCheck=También puedes verificar manualmente desde el sitio web europeo <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=No es posible realizar la verificación. El servicio de comprobación no es prestado por el país miembro (%s).
     OthersNotLinkedToThirdParty=Otros, no vinculado a un tercero
     ProspectStatus=Estatus del cliente potencial
    @@ -138,27 +127,18 @@ ChangeContactInProcess=Cambiar estado a 'Contacto en proceso'
     ChangeContactDone=Cambiar estado a 'Contacto realizado'
     NoParentCompany=Ninguno
     DolibarrLogin=Login de usuario
    -ExportDataset_company_1=Terceros (Empresas / fundaciones / personas físicas) y propiedades
    -ExportDataset_company_2=Contactos y propiedades
    -ImportDataset_company_1=Terceros (Empresas / fundaciones / personas físicas) y propiedades
     DeleteFile=Borrar archivo
     ConfirmDeleteFile=¿Seguro que quieres borrar este archivo?
     AllocateCommercial=Asignado al representante de ventas
     Organization=Organización
    -FiscalYearInformation=Información sobre el año fiscal
     FiscalMonthStart=Més de inicio del año fiscal
    -YouMustAssignUserMailFirst=Debe crear un correo electrónico para este usuario primero para poder agregar notificaciones de correo electrónico para él.
     YouMustCreateContactFirst=Para poder agregar notificaciones por correo electrónico, primero debe definir contactos con correos electrónicos válidos para el tercero
    -ListProspectsShort=Lista de clientes potenciales
    -ListCustomersShort=Lista de clientes
    -ThirdPartiesArea=Terceros y área de contacto
     InActivity=Abierta
     OutstandingBillReached=Max. para la cuenta pendiente alcanzada
     LeopardNumRefModelDesc=El código es libre. Este código puede ser modificado en cualquier momento.
     ManagingDirectors=Administrador(es) (CEO, Director, Presidente...)
     MergeOriginThirdparty=Tercero duplicado (tercero que deseas eliminar)
     MergeThirdparties=Combinar terceros
    -ConfirmMergeThirdparties=¿Está seguro de que desea combinar este tercero en el actual? Todos los objetos enlazados (facturas, pedidos, ...) se moverán a terceros actuales, y luego se eliminará el tercero.
     SaleRepresentativeLogin=Inicio de sesión del representante de ventas
     SaleRepresentativeFirstname=Nombre del representante de ventas
     SaleRepresentativeLastname=Apellido del representante de ventas
    diff --git a/htdocs/langs/es_MX/main.lang b/htdocs/langs/es_MX/main.lang
    index 022f780c2e4..5d9a6b2fcda 100644
    --- a/htdocs/langs/es_MX/main.lang
    +++ b/htdocs/langs/es_MX/main.lang
    @@ -29,14 +29,9 @@ ErrorGoToModuleSetup=Vaya a la configuración de Módulo para solucionar esto
     ErrorFailedToSendMail=Falló el envío del correo electrónico (remitente=%s, destinatario=%s)
     ErrorFileNotUploaded=El archivo no fue transferido. Revise que el tamaño no exceda el máximo permitido, que haya espacio disponible suficiente en disco y que no exista algún archivo con el mismo nombre en el mismo directorio.
     ErrorWrongHostParameter=Parámetro de servidor inválido
    -ErrorYourCountryIsNotDefined=Tu país no está definido. Corrígelo en Inicio-Configuración-Empresa/institución-Editar.
    -ErrorRecordIsUsedByChild=Falló la eliminación de este registro. Este registro está siendo utilizado por al menos un registro hijo
     ErrorWrongValue=Valor erróneo
     ErrorWrongValueForParameterX=Valor erróneo para el parámetro %s
    -ErrorServiceUnavailableTryLater=El servicio no está disponible por el momento. Intente de nuevo más tarde.
     ErrorDuplicateField=Valor duplicado en un campo único
    -ErrorSomeErrorWereFoundRollbackIsDone=Se encontraron algunos errores. Modificaciones revertidas.
    -ErrorConfigParameterNotDefined=El parámetro <b>%s</b> no está definido dentro del archivo de configuración de Dolibarr <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Imposible encontrar al usuario <b>%s</b> en la base de datos de Dolibarr
     ErrorNoVATRateDefinedForSellerCountry=Error, no se ha definido tasa para el IVA del país '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no hay tipos de impuestos sociales/fiscales definidos para el país '%s'.
    @@ -45,10 +40,8 @@ SetDate=Ajustar fecha
     SeeHere=Mira aquí
     BackgroundColorByDefault=Color de fondo por defecto
     FileWasNotUploaded=Un archivo fue seleccionado para adjuntar, sin embargo, no ha sido cargado aún. De clic en "Adjuntar archivo" para éllo.
    -NbOfEntries=Número de entradas
     LevelOfFeature=Nivel de características
     NotDefined=No definido
    -HomeArea=Área de Inicio
     PreviousConnexion=Conexión Anterior
     ConnectedOnMultiCompany=Conectado a la entidad
     DatabaseTypeManager=Administrador de tipo de base de datos
    @@ -150,7 +143,6 @@ Login=Inicio de sesión
     CurrentLogin=Inicio de sesión actual
     May=Mayo
     December=diciembre
    -MayMin=Mayo
     Month05=Mayo
     MonthShort01=Ene
     MonthShort04=Abr
    @@ -174,7 +166,6 @@ NoExample=Ningún ejemplo
     FindBug=Reportar un bug
     NbOfLines=Número de líneas
     DateFrom=Desde %s
    -Check=Cheque
     Uncheck=Desmarcar
     Internals=Interno
     Externals=Externo
    @@ -215,17 +206,13 @@ DisabledModules=Módulos deshabilitados
     ForCustomer=Para el cliente
     HidePassword=Mostrar comando con la contraseña oculta
     UnHidePassword=Mostrar comando real mostrando la contraseña
    -Informations=Informaciones
     AddFile=Agregar archivo
     CloneMainAttributes=Clonar objeto con sus principales atributos
     PDFMerge=Unir PDF
     Merge=Unir
     PrintContentArea=Mostrar la página para imprimir el área de contenido principal
     MenuManager=Administrar menú
    -WarningYouAreInMaintenanceMode=Advertencia, usted está en un modo de mantenimiento, solamente se permite el uso de la aplicación con el login <b>%s</b>
     FieldsWithAreMandatory=Los campos con <b>%s</b> son obligatorios
    -FieldsWithIsForPublic=Los campos con <b>%s</b> se muestran en la lista pública de miembros. Si usted no desea esto, desmarque la casilla "público".
    -AccordingToGeoIPDatabase=(de acuerdo con la conversión GeoIP)
     RequiredField=Campo requerido
     ValidateBefore=La tarjeta debe ser validada antes de usar esta característica
     Hidden=Oculto
    @@ -242,7 +229,6 @@ ByTown=Por municipio
     BySalesRepresentative=Por representante de ventas
     LinkedToSpecificUsers=Vinculado a un usuario de contacto determinado
     NoResults=No hay resultados
    -AdminTools=Herramientas de Administración
     SystemTools=Herramientas de sistema
     ModulesSystemTools=Módulos de herramientas
     Test=Probar
    @@ -256,7 +242,6 @@ SetBankAccount=Definir Cuenta Bancaria
     XMoreLines=%s línea(s) oculta(s)
     PublicUrl=URL Pública
     AddBox=Añade una caja
    -GoIntoSetupToChangeLogo=Ve a Inicio - Configuración - Empresa para cambiar el logo o ve a Inicio - Configuración - Vista para ocultarlo.
     Denied=Denegado
     ListOfTemplates=Lista de plantillas
     Gender=Género
    @@ -294,5 +279,4 @@ SearchIntoCustomerInvoices=Facturas de clientes
     SearchIntoCustomerOrders=Pedidos de los clientes
     SearchIntoCustomerProposals=Propuestas de clientes
     SearchIntoExpenseReports=Reporte de gastos
    -SearchIntoLeaves=Licencias
     AssignedTo=Asignado a
    diff --git a/htdocs/langs/es_PA/admin.lang b/htdocs/langs/es_PA/admin.lang
    index 0cc8933bca1..75e885f430e 100644
    --- a/htdocs/langs/es_PA/admin.lang
    +++ b/htdocs/langs/es_PA/admin.lang
    @@ -1,6 +1,2 @@
     # Dolibarr language file - Source file is en_US - admin
     VersionUnknown=Desconocido
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    diff --git a/htdocs/langs/es_PE/admin.lang b/htdocs/langs/es_PE/admin.lang
    index 1e3c901bcd5..299ae2a6312 100644
    --- a/htdocs/langs/es_PE/admin.lang
    +++ b/htdocs/langs/es_PE/admin.lang
    @@ -1,15 +1,9 @@
     # Dolibarr language file - Source file is en_US - admin
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     Permission91=Consultar impuestos e IGV
     Permission92=Crear/modificar impuestos e IGV
     Permission93=Eliminar impuestos e IGV
     DictionaryVAT=Tasa de IGV (Impuesto sobre ventas en EEUU)
    -VATManagement=Gestión IGV
    -VATIsNotUsedDesc=El tipo de IGV propuesto por defecto es 0. Este es el caso de asociaciones, particulares o algunas pequeñas sociedades.
     UnitPriceOfProduct=Precio unitario sin IGV de un producto
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
     OptionVatMode=Opción de carga de IGV
     OptionVatDefaultDesc=La carga del IGV es: <br>-en el envío de los bienes (en la práctica se usa la fecha de la factura)<br>-sobre el pago por los servicios
     OptionVatDebitOptionDesc=La carga del IGV es: <br>-en el envío de los bienes (en la práctica se usa la fecha de la factura)<br>-sobre la facturación de los servicios
    diff --git a/htdocs/langs/es_PE/main.lang b/htdocs/langs/es_PE/main.lang
    index 679279a459d..b2dc338cb21 100644
    --- a/htdocs/langs/es_PE/main.lang
    +++ b/htdocs/langs/es_PE/main.lang
    @@ -19,6 +19,7 @@ FormatDateHourShort=%d/%m/%Y %H:%M
     FormatDateHourSecShort=%d/%m/%Y %H:%M:%S
     FormatDateHourTextShort=%d %b %Y %H:%M
     FormatDateHourText=%d %B %Y %H:%M
    +Enable=Activado
     Disable=Inhabilitar
     Close=Cerrado
     AmountVAT=Importe IGV
    @@ -29,3 +30,4 @@ VAT=IGV
     VATRate=Tasa IGV
     Drafts=Borrador
     Opened=Abrir
    +NotRead=Sin leer
    diff --git a/htdocs/langs/es_PY/admin.lang b/htdocs/langs/es_PY/admin.lang
    deleted file mode 100644
    index 790d1e6cd7b..00000000000
    --- a/htdocs/langs/es_PY/admin.lang
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -# Dolibarr language file - Source file is en_US - admin
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    diff --git a/htdocs/langs/es_VE/admin.lang b/htdocs/langs/es_VE/admin.lang
    index 20ee7042b7e..2a2ba3bc3bb 100644
    --- a/htdocs/langs/es_VE/admin.lang
    +++ b/htdocs/langs/es_VE/admin.lang
    @@ -2,9 +2,9 @@
     VersionLastInstall=Versión de instalación inicial
     VersionLastUpgrade=Última actualización de la versión
     ConfirmPurgeSessions=¿De verdad quieres purgar todas las sesiones? Esto desconectará a todos los usuarios (excepto a usted).
    +SetupArea=Parametrizaje
     NotConfigured=Módulo / Aplicación no configurada
     ModuleFamilyCrm=Gestión cliente (CRM)
    -Module2660Desc=Habilitar los servicios web cliente de Dolibarr (puede ser utilizado para grabar datos/solicitudes de servidores externos. De momento solo se soporta pedidos a proveedor)
     Permission254=Modificar la contraseña de otros usuarios
     Permission255=Eliminar o desactivar otros usuarios
     Permission256=Consultar sus permisos
    @@ -14,13 +14,11 @@ Permission1421=Exportar pedidos de clientes y atributos
     Permission20003=Eliminar peticiones de días libres retribuidos
     Permission2402=Crear/eliminar acciones (eventos o tareas) vinculadas a su cuenta
     Permission2403=Modificar acciones (eventos o tareas) vinculadas a su cuenta
    -DefineHereComplementaryAttributes=Defina aquí la lista de atributos adicionales, no disponibles por defecto, y que desea gestionar para %s.
     ExtraFields=Atributos adicionales
     ExtraFieldsLines=Atributos adicionales (líneas)
     ExtraFieldsSupplierOrdersLines=Atributos complementarios (líneas de pedido)
     ExtraFieldsSupplierInvoicesLines=Atributos complementarios (líneas de factura)
     ExtraFieldsThirdParties=Atributos adicionales (terceros)
    -ExtraFieldsContacts=Atributos adicionales (contactos/direcciones)
     ExtraFieldsMember=Atributos adicionales (miembros)
     ExtraFieldsMemberType=Atributos adicionales  (tipos de miembros)
     ExtraFieldsCustomerInvoices=Atributos adicionales (facturas a clientes)
    @@ -32,4 +30,3 @@ ExtraFieldHasWrongValue=El atributo %s tiene un valor no válido
     LDAPMemberObjectClassListExample=Lista de ObjectClass que definen los atributos de un registro (ej: top,inetOrgPerson o top,user for active directory)
     LDAPUserObjectClassListExample=Lista de ObjectClass que definen los atributos de un registro (ej: top,inetOrgPerson o top,user for active directory)
     LDAPContactObjectClassListExample=Lista de objectClass que definen los atributos de un registro (ej: top,inetOrgPerson o top,user for active directory)
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    diff --git a/htdocs/langs/es_VE/companies.lang b/htdocs/langs/es_VE/companies.lang
    index b39081379b2..93ac64371ec 100644
    --- a/htdocs/langs/es_VE/companies.lang
    +++ b/htdocs/langs/es_VE/companies.lang
    @@ -1,5 +1,4 @@
     # Dolibarr language file - Source file is en_US - companies
    -CountryIsInEEC=Venezuela
     OverAllSupplierProposals=Solicitudes de precios
     LocalTax1IsUsed=Sujeto
     LocalTax2IsUsed=Sujeto
    @@ -19,10 +18,6 @@ ProfId1HN=-
     ProfId2MX=Registro Patronal IVSS
     ProfId3MX=-
     CompanyHasCreditNote=Este cliente tiene <b>%s %s</b> anticipos disponibles
    -VATIntraCheckDesc=El link <b>%s</b> permite consultar al SENIAT el RIF. Se requiere acceso a internet para que el servicio funcione
     VATIntraCheckURL=http://contribuyente.seniat.gob.ve/BuscaRif/BuscaRif.jsp
    -VATIntraCheckableOnEUSite=Verificar en la web del SENIAT
    -VATIntraManualCheck=Puede también realizar una verificación manual en la página del SENIAT <a href="%s" target="_blank">%s</a>
     ContactOthers=Otra
    -ExportDataset_company_2=Contactos de terceros y atributos
     InActivity=Abierta
    diff --git a/htdocs/langs/es_VE/main.lang b/htdocs/langs/es_VE/main.lang
    index a0aed660c7d..8dd07d39592 100644
    --- a/htdocs/langs/es_VE/main.lang
    +++ b/htdocs/langs/es_VE/main.lang
    @@ -39,4 +39,3 @@ Progress=Progresión
     Export=Exportación
     ExpenseReports=Gastos
     SearchIntoExpenseReports=Gastos
    -SearchIntoLeaves=Días libres
    diff --git a/htdocs/langs/es_VE/projects.lang b/htdocs/langs/es_VE/projects.lang
    deleted file mode 100644
    index 8fd41c4e71b..00000000000
    --- a/htdocs/langs/es_VE/projects.lang
    +++ /dev/null
    @@ -1,2 +0,0 @@
    -# Dolibarr language file - Source file is en_US - projects
    -DocumentModelBaleine=Plantilla de informe tareas del Proyecto
    diff --git a/htdocs/langs/et_EE/admin.lang b/htdocs/langs/et_EE/admin.lang
    index 6366677a0b2..c1f71a8f52c 100644
    --- a/htdocs/langs/et_EE/admin.lang
    +++ b/htdocs/langs/et_EE/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Arendusversioon
     VersionUnknown=Teadmata
     VersionRecommanded=Soovitatav
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Sessioonide töötleja
     SessionSavePath=Salvestuse sessiooni lokaliseerimine
     PurgeSessions=Sessioonide tühjendamine
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Sinu PHP seadistusfailis seadistatud sessioonide töötleja ei võimalda käimasolevatest sessioonidest nimekirja loomist.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Keela uued ühendused
    -ConfirmLockNewSessions=Kas oled kindel, et soovid uusi Dolibarri ühendusi lubada ainult enda kasutajale? Pärast seda toimingut saab sisse logida vaid kasutaja <b>%s</b>.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Luba uued ühendused
     YourSession=Sinu sessioon
    -Sessions=Kasutajate sessioonid
    +Sessions=Users sessions
     WebUserGroup=Veebiserveri kasutaja/grupp
    -NoSessionFound=Tundub, et PHP ei luba luua aktiivsete sessioonide nimekirja. Sessioonide salvestamiseks kasutatav kaust  <b>(%s)</b> võib olla kaitstud (näiteks operatsioonisüsteemi õigustega või PHP direktiiviga open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Märgistik, mida kasutatakse andmete salvestamiseks andmebaasi
     DBSortingCharset=Märgistik, mida kasutada andmete sorteerimiseks andmebaasis
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Väline kasutaja
     InternalUsers=Sisemised kasutajad
     ExternalUsers=Välised kasutajad
     GUISetup=Kuva
    -SetupArea=Seadistamise ala
    +SetupArea=Seadistamine
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Failide üleslaadimise teistimiseks kasutatav vorm (vastavalt seadistustele)
     IfModuleEnabled=Märkus: jah töötab vaid siis, kui moodul <b>%s</b> on sisse lülitatud.
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kood ei või sisaldada väärtust 0
     DisableJavascript=Lülita JavaScripti ja Ajaxi funktsioonid välja (soovitatav vaegnägijate või tekstibrauserite jaoks)
     UseSearchToSelectCompanyTooltip=Suure kolmandate isikute arvu korral (> 100 000) saab kiiruse suurendamiseks seadistada Seadistamine->Muu menüüs konstandi COMPANY_DONOTSEARCH_ANYWHERE väärtuseks 1. Sellisel juhul piirdub otsing sõne algusega.
     UseSearchToSelectContactTooltip=Suure kolmandate isikute arvu korral (> 100 000) saab kiiruse suurendamiseks seadistada Seadistamine->Muu menüüs konstandi CONTACT_DONOTSEARCH_ANYWHERE väärtuseks 1. Sellisel juhul piirdub otsing sõne algusega.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Sisestatud märkide arv otsingu käivitamiseks: %s
     NotAvailableWhenAjaxDisabled=Ei ole saadaval, kui Ajax on välja lülitatud
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Eelvaade pole saadaval
     ThemeCurrentlyActive=Hetkel kasutatav teema
     CurrentTimeZone=PHP ajavöönd (serveri ajavöönd)
     MySQLTimeZone=MySQLi (andmebaasi) ajavöönd
    -TZHasNoEffect=Andmebaasiserver säilitab ja tagastab kuupäevi sisestatud sõnena. Ajavöönd omab mõju vaid UNIX_TIMESTAMP funktsiooni kasutamisel (mida Dolibarr ei tohiks kasutada, seega ei tohiks andmebaasi ajavöönd omada mitte mingit mõju isegi pärast seda, kui ajavööndit muudetakse pärast andmete sisestamist)
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Ruum
     Table=Tabel
     Fields=Väljad
    @@ -111,14 +111,14 @@ NotConfigured=Moodul/Rakendus pole veel seadistatud
     Active=Aktiivne
     SetupShort=Seadistamine
     OtherOptions=Muud seaded
    -OtherSetup=Muud seadistused
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Kümnendkoha eraldaja
     CurrentValueSeparatorThousand=Tuhandete eraldaja
     Destination=Sihtkoht
     IdModule=Mooduli ID
     IdPermissions=Kasutajaõiguste ID
     LanguageBrowserParameter=Parameeter %s
    -LocalisationDolibarrParameters=Lokaliseerimise parameetrid
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Kliendi ajavöönd (kasutaja)
     ClientHour=Kliendi aeg (kasutaja)
     OSTZ=Serveri operatsioonisüsteemi ajavöönd
    @@ -126,8 +126,8 @@ PHPTZ=Time Zone PHP server
     DaylingSavingTime=Suveaeg
     CurrentHour=Tund PHP (server)
     CurrentSessionTimeOut=Praeguse sessiooni aegumine
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Vidin
     Boxes=Vidinad
     MaxNbOfLinesForBoxes=Vidinate maksimaalne ridade arv
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignoreeri duplikaatkirjete põhjustatud vead (INSERT IGNO
     AutoDetectLang=Tuvasta automaatselt (brauseri keel)
     FeatureDisabledInDemo=Demoversioonis blokeeritud funktsionaalsus
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Kastid on ekraani ala, mis näitavad mõnedel lehekülgedel mingit infot. Kasti näitamise saab sisse või välja lülitada, valides soovitud lehe ning klõpsates nupul 'Aktiveeri' või klõpsates prügikastil selle välja lülitamiseks.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Näidatakse ainult elemente <a href="%s">sisse lülitatud moodulitest</a>.
    -ModulesDesc=Dolibarri moodulid määravad, millist funktsionaalsust tarkvara võimaldab. Mõned moodulite puhul tuleb pärast mooduli sisse lülitamist lubada kasutajatele nende kasutamine. Klõpsa sisse/välja nupul "Staatus" veerus, et moodulit/funktsionaalsust sisse lülitada.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Alla laadimiseks leiad rohkem mooduleid Internetist.
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Otsi katsetuskärgus rakendusi/mooduleid
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Uus
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore on ametlik Dolibarr ERP/CRM moodulite müümiseks kasutatav koht
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Saadaolevad vidinad
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Ära säilita paroole andmebaasis avatud tekstis, vaid a
     MainDbPasswordFileConfEncrypted=Andmebaasi parool on conf.php failis krüpteeritud (soovitatav aktiveeritud).
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Automaatselt loodud PDF failide kaitse (soovitatav välja lülitatud, kuna vastasel juhul ei tööta PDFide hulgi loomine)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Funktsionaalsus
     DolibarrLicense=Litsents
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=Kasutaja või arendaja dokumentatsiooni (KKK jms) võid leida<br>ametlikust Dolibarri Wikist:<br><a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=Muude küsimuste või abi küsimise tarbeks saab kasutada Dolibarri foorumit:<br><a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=See ala võib aidata saada Dolibarri tugiteenust.
    -HelpCenterDesc2=Mõned osad sellest teenusest on saadaval <b>ainult inglise keeles</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Praegune menüü töötleja
     MeasuringUnit=Mõõtühik
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=E-postid
     EMailsSetup=E-posti seadistamine
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS port (vaikimisi php.ini failis: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS host (vaikimisi php.ini failis: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS port (pole Unix laadsetel süsteemidel PHPs määratletud)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS host (pole Unix laadsetel süsteemidel PHPs määratletud)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Saada kõigist saadetud kirjadest automaatselt pimekoopia aadressile
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=E-kirjade saatmiseks kasutatav meetod
    -MAIN_MAIL_SMTPS_ID=SMTP kasutaja, kui autentimine on nõutud
    -MAIN_MAIL_SMTPS_PW=SMTP parool, kui autentimine on nõutud
    -MAIN_MAIL_EMAIL_TLS= Kasuta TLS (SSL) krüpteerimist
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Keela SMSide saatmine (testimise või demo paigaldused)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=SMSi saatmiseks kasutatav meetod
    -MAIN_MAIL_SMS_FROM=Vaikimisi määratud saatja telefoninumber SMSide saatmiseks
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Funktsionaalsus pole kasutatav Unixi laadsel süsteemil. Kontrolli oma sendmail programmi seadistust.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Moodulite seadistamine
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Ära kasuta tootmispaigaldustes
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Samm %s
    -FindPackageFromWebSite=Leia pakett, mis võimaldab soovitud funktsionaalsuse (näiteks ametlikul veebilehel %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarri praegune versioo
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Viimane stabiilne versioon
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Eksportimise vastuse vahemällu salvestamise viivitus (0 või tühi vahemälu mitte kasutamiseks)
     DisableLinkToHelpCenter=Peida link "<b>Vajad abi või tuge</b>" sisselogimise lehel
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=Automaatselt ei murta ridu, seega peab dokumentide koostamisel lehe piiridest väljuva pika rea murdmiseks ise tekstikasti reavahetusi sisestama.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimaalne pikkus
     LanguageFilesCachedIntoShmopSharedMemory=Jagatud mällu laetud .lang failid
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Praegu töötava seadistusega näited
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=OpenDocument mallide kaustad
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Nendes kaustades leitud ODT/ODS mallide arv
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Süntaksi näited:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>Enne dokumendimallide loomist loe wikis olevat dokumentatsiooni:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Veebiteenuste kasutamise võti (parameeter "dolibarrkey"
     TestSubmitForm=Sisestamise testimiseks mõeldud vorm
     ThisForceAlsoTheme=Selle menüühalduri kasutamisel kasutatakse ka kasutaja valitud oma teemat. Nutitelefonide jaoks mõeldud menüühaldur ei tööta kõigil nutitelefonidel. Kasuta mõnda muud menüühaldurit, kui hetkel kasutuses olevaga esineb tõrkeid.
     ThemeDir=Kestade kataloog
    -ConnectionTimeout=Ühenduse aegumine
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Vastuse aegumine
     SmsTestMessage=Test sõnum __TELEFONIST__TELEFONI__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=URLide kaitsmiseks kasutatav võti
    -NoSmsEngine=Ühtki SMSi saatmise haldurit pole võimalik kasutada. SMSi saatmise haldurid ei ole vaikepaigalduses kaasas (kuna nad sõltuvad välisest teenusepakkujast), kuid mõningaid võib leida aadressil %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Siit saab määratleda üldised PDFide loomise seaded
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Aadressikastide loomise reeglid
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Peida loodud PDFis toodete kirjeldused
     HideRefOnPDF=Peida loodud PDFis toodete viited
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=URLide turvamise parameetrid
     SecurityTokenIsUnique=Kasuta iga URLi jaoks unikaalset turvalise võtme parameetrit
     EnterRefToBuildUrl=Sisesta viide objektile %s
     GetSecuredUrl=Saada arvutatud URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Vana käibemaksumäär
     NewVATRates=Uus käibemaksumäär
     PriceBaseTypeToChange=Muuda hindadel, mille baasväärtus on defineeritud kui
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Valikute nimekiri
     ExtrafieldSelectList = Vali tabelist
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Salasõna
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Vaikimisi link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Hoiatus: kasutaja võib selle väärtuse üle kirjutada oma seadetega (iga kasutaja saab määratleda isikliku clicktodial URLi)
     ExternalModule=Väline moodul - paigaldatud kausta %s
    -BarcodeInitForThirdparties=Kolmandate isikute jaoks vöötkoodide massiline loomine
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Toodete/teenuste jaoks massiline vöötkoodide loomine või lähtestamine
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Järgmise %s tühja kirje lähtestamise väärtus
     EraseAllCurrentBarCode=Kustuta kõik hetkel kasutatavad vöötkoodide väärtused
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=Kõik triipkoodi väärtused on eemaldatud
    -NoBarcodeNumberingTemplateDefined=Vöötkoodide mooduli seadistuses pole määratletud ühtki vöötkoodide numeratsiooni malli
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Väli
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Kasutajad ja grupid
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Kolmandad isikud
    +Module1Name=Third Parties
     Module1Desc=Ettevõtete ja kontaktide haldamine (kliendid, huvilised)
     Module2Name=Äritegevus
     Module2Desc=Äritegevuse seadistamine
     Module10Name=Raamatupidamine
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Pakkumised
     Module20Desc=Pakkumiste haldamine
     Module22Name=Masspostitus
    @@ -511,13 +517,13 @@ Module52Desc=Ladude haldamine (tooted)
     Module53Name=Teenused
     Module53Desc=Teenuste haldamine
     Module54Name=Lepingud/Tellimused
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Vöötkoodid
     Module55Desc=Vöötkoodide haldamine
     Module56Name=Telefonitehnika
     Module56Desc=Telefonitehnika integratsioon
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=ClickToDial süsteemiga (Asterisk jne) integreerimine
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Kulud ja lähetused
     Module75Desc=Kulude ja lähetuste haldamine
     Module80Name=Saadetised
     Module80Desc=Saadetiste ja saatelehtede haldamine
    -Module85Name=Pangad ja raha
    +Module85Name=Banks and Cash
     Module85Desc=Panga- ja kassakontode haldamine
    -Module100Name=Väline veebileht
    -Module100Desc=See moodul lisab välise veebilehe Dolibarri menüüdesse ning võimaldab selle kasutamise Dolibarri raamis
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman ja SPIP
     Module105Desc=Mailman või SPIP liides liikme mooduli jaoks
     Module200Name=LDAP
    -Module200Desc=LDAP kausta sünkroniseerimine
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integratsioon
     Module240Name=Andmete eksport
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Andmete import
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Liikmed
     Module310Desc=Ühenduse liikmete haldamine
     Module320Name=RSS voog
     Module320Desc=Lisa RSS voog Dolibarri lehtedele
    -Module330Name=Järjehoidjad
    -Module330Desc=Järjehoidjate haldamine
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=WebCalendari integratsioon
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Annetused
     Module700Desc=Annetuste haldamine
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Sildid/kategooriad
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG toimeti
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Plaanitud käivitused
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Lülita sisse Dolibarri SOAPi server API võimaldamiseks
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Kasuta Gravatar (www.gravatar.com) teenust, et näidata kasutajate/liikmete pilte (loodud nende e-posti aadresside põhjal). Vajab Interneti ligipääsu.
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP klient
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind konverteerimise võimekus
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=Personalihaldus
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-ettevõte
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Puhkusetaotluste haldamine
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Kassa
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Kassa
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marginaalid
     Module59000Desc=Marginaalide haldamise moodu
     Module60000Name=Komisjonitasu
     Module60000Desc=Komisjonitasude haldamise moodu
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Ressursid
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Müügiarvete vaatamine
    @@ -651,9 +661,9 @@ Permission32=Toodete loomine/muutmine
     Permission34=Toodete kustutamine
     Permission36=Peidetud toodete vaatamine/haldamine
     Permission38=Toodete eksport
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Projektide kustutamine (jagatud projekt ja projektid, mille kontaktiks on kasutaja)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Sekkumiste vaatamine
     Permission62=Sekkumiste loomine/muutmine
    @@ -686,7 +696,7 @@ Permission109=Saatmiste kustutamine
     Permission111=Finantskontode vaatamine
     Permission112=Tehingute loomine/muutmine/kustutamine ja võrdlemine
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Tehingute ja kontosaldode ekspor
     Permission116=Kontode vahelised kanded
     Permission117=Tšekkide saatmise haldamine
    @@ -694,15 +704,15 @@ Permission121=Kasutajaga seotud kolmandate isikute vaatamine
     Permission122=Kasutajaga seotud kolmandate isikute loomine/muutmine
     Permission125=Kasutajaga seotud kolmandate isikute kustutamine
     Permission126=Kolmandate isikute eksport
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Pakkujate vaatamine
     Permission147=Statistika vaatamine
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Ostutellimuste sulgemine
     Permission188=Ostutellimuste tühistamine
     Permission192=Ridade loomine
     Permission193=Ridade kustutamine
    -Permission194=Ribalaiuse ridade vaatamine
    +Permission194=Read the bandwidth lines
     Permission202=ADSL-ühenduste loomine
     Permission203=Ühendustellimuste tellimine
     Permission204=Ühenduste tellimine
    @@ -750,12 +760,12 @@ Permission244=Peidetud kategooriate sisu vaatamine
     Permission251=Teiste kasutajate ja gruppide vaatamine
     PermissionAdvanced251=Teiste kasutajate vaatamine
     Permission252=Teiste kasutajate õiguste vaatamine
    -Permission253=Teiste kasutajate, gruppide ja õiguste loomine/muutmine
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Väliste ja sisemiste kasutajate ja õiguste loomine/muutmine
     Permission254=Ainult väliste kasutajate loomine/muutmine
     Permission255=Teiste kasutajate paroolide muutmine
     Permission256=Teiste kasutajate kustutamine või keelamine
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=CA vaatamine
     Permission272=Arvete vaatamine
     Permission273=Arvete väljastamine
    @@ -765,7 +775,7 @@ Permission283=Kontaktide kustutamine
     Permission286=Kontaktide ekspor
     Permission291=Tariifide vaatamine
     Permission292=Tariifide õiguste seadmine
    -Permission293=Klientide tariifide muutmine
    +Permission293=Modify customers tariffs
     Permission300=Vöötkoodide vaatamine
     Permission301=Vöötkoodide loomine/muutmine
     Permission302=Vöötkoodide kustutamine
    @@ -787,11 +797,9 @@ Permission401=Allahindluste vaatamine
     Permission402=Allahindluste loomine/muutmine
     Permission403=Allahindluste kinnitamine
     Permission404=Allahindluste kustutamine
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Palkade kustutamine
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Palkade eksportimine
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Väliste andmete massiline import andmebaasi (andmete laadimine)
     Permission1321=Müügiarvete, atribuutide ja maksete eksport
     Permission1322=Reopen a paid bill
     Permission1421=Müügitellimuste ja atribuutide eksport
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Huvilise huvitatuse tase
     DictionaryCanton=Osariik/provints
     DictionaryRegion=Piirkonnad
    @@ -894,7 +902,7 @@ DictionaryVAT=Käibe- või müügimaksumäärad
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Maksetingimused
     DictionaryPaymentModes=Maksmine režiimid
    -DictionaryTypeContact=Kontakti/Aadressi tüübid
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ökomaks (WEEE)
     DictionaryPaperFormat=Paberiformaadid
    @@ -908,47 +916,47 @@ DictionarySource=Pakkumiste/tellimuste päritolu
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Kontoplaani mudelid
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Ühikud
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Seadistused salvestatud
     SetupNotSaved=Setup not saved
     BackToModuleList=Tagasi moodulite nimekirja
    -BackToDictionaryList=Tagasi sõnastike nimekirja
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Käibemaksu haldamine
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=Vaikimisi pakutakse käibemaksumääraks 0, mida kasutavad näiteks mittetulundusühingud, eraisikud või väikesed ettevõtted.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Määr
     LocalTax1IsNotUsed=Ära kasuta teist maksu
    -LocalTax1IsUsedDesc=Kasuta teist liiki maksu (mitte KM)
    -LocalTax1IsNotUsedDesc=Ära kasuta teist liiki maksu (mitte KM)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Teist liiki maks
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Ära kasuta kolmandat maksu
    -LocalTax2IsUsedDesc=Kasuta kolmandat liiki maksu (mitte KM)
    -LocalTax2IsNotUsedDesc=Ära kasuta ühtki muud liiki maksu (mitte KM)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Kolmandat liiki maks
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE haldamine
    -LocalTax1IsUsedDescES= Pakkumiste, arvete, tellimuste jne loomisel kasutatav RE vaikimisi määr järgib aktiivset standardreeglit:<br>Kui ostja ei ole RE kohuslane, siis on RE vaikimisi 0. Reegli lõpp.<br>Kui ostja on RE kohuslane, siis on RE vaikimisi määraga. Reegli lõpp.<br>
    -LocalTax1IsNotUsedDescES= Vaikimisi pakutud RE on 0. Reegli lõpp.
    -LocalTax1IsUsedExampleES= Hispaanias on tegu spetsialistidega, kellele kohalduvad mõned Hispaania IAE spetsiifilised osad.
    -LocalTax1IsNotUsedExampleES= Hispaanias on nad spetsialistid ja organisatsioonid, kellele kohalduvad mõningad Hispaania IAE spetsiifilised osad.
    -LocalTax2ManagementES= IRPF haldamine
    -LocalTax2IsUsedDescES= Pakkumiste, arvete, tellimuste jne loomisel kasutatav RE vaikimisi määr järgib aktiivset standardreeglit:<br>Kui müüja ei ole IRPF kohuslane, siis on IRPF vaikimisi 0. Reegli lõpp.<br>Kui müüja on IRPF kohuslane, siis on IRPF vaikimisi määraga. Reegli lõpp.<br>
    -LocalTax2IsNotUsedDescES= Vaikimisi pakutud IRPF on 0. Reegli lõpp.
    -LocalTax2IsUsedExampleES= Hispaanias on nad vabakutselised ja spetsialistid, kes pakuvad teenuseid ja ettevõtted, kes on valinud moodulipõhise maksusüsteemi.
    -LocalTax2IsNotUsedExampleES= Hispaanias on nad ettevõtted, kes ei kasuta moodulipõhist maksusüsteemi.
    +LocalTax1ManagementES=RE haldamine
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Vaikimisi pakutud RE on 0. Reegli lõpp.
    +LocalTax1IsUsedExampleES=Hispaanias on tegu spetsialistidega, kellele kohalduvad mõned Hispaania IAE spetsiifilised osad.
    +LocalTax1IsNotUsedExampleES=Hispaanias on nad spetsialistid ja organisatsioonid, kellele kohalduvad mõningad Hispaania IAE spetsiifilised osad.
    +LocalTax2ManagementES=IRPF haldamine
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Vaikimisi pakutud IRPF on 0. Reegli lõpp.
    +LocalTax2IsUsedExampleES=Hispaanias on nad vabakutselised ja spetsialistid, kes pakuvad teenuseid ja ettevõtted, kes on valinud moodulipõhise maksusüsteemi.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Müügid - Ostud
     CalcLocaltax1Desc=Kohalike maksude aruannete arvutamiseks kasutatakse kohalike maksude müügi ja kohalike maksude ostude vahet
    @@ -958,7 +966,8 @@ CalcLocaltax3=Müügid
     CalcLocaltax3Desc=Kohalike maksude aruanded on kohalike maksude müükide summas
     LabelUsedByDefault=Vaikimisi kasutatav silt, kui koodile ei leitud tõlke vastet
     LabelOnDocuments=Dokumentide silt
    -NbOfDays=Päevade arv
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Kuu lõpus
     CurrentNext=Current/Next
     Offset=Nihe
    @@ -984,7 +993,7 @@ DatabaseUser=Andmebaasi kasutaja
     DatabasePassword=Andmebaasi parool
     Tables=Tabelid
     TableName=Tabeli nimi
    -NbOfRecord=Kirjete arv
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Draiveri tüüp
     SummarySystem=Süsteemiinfo kokkuvõte
    @@ -996,7 +1005,7 @@ Skin=Kesta kujundus
     DefaultSkin=Vaikimisi kesta kujundus
     MaxSizeList=Nimekirja maksimaalne pikkus
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Päeva sõnu
     MessageLogin=Sisselogimise lehe sõnu
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Vasakus menüüs on alati otsingu vorm
     DefaultLanguage=Vaikimisi kasutatav keel (keele kood)
     EnableMultilangInterface=Luba mitmekeelne liides
     EnableShowLogo=Näita vasakul menüüs logo
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Nimi
     CompanyAddress=Aadress
     CompanyZip=Postiindeks
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Pangakonto %s omani
     BankModuleNotActive=Pangakontode moodul pole sisse lülitatud
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Häired
    -DelaysOfToleranceBeforeWarning=Hilinemiste viivitus enne hoiatuse näitamist
    -DelaysOfToleranceDesc=See ekraan võimaldab määratleda lubatud hilinemist lubatud enne hoiatuskasti näitamist ekraanil pildiga %s iga hilinenud elemendi kohta.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Hilinemise viivitus (päevades) enne hoiatust sulgemata pakkumiste kohta
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Hilinemise viivitus (päevades) enne hoiatust pakkumiste kohta, mille eest ei ole arvet esitatud
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Hilinemise viivitus (päevades) enne hoiatust aktiveerimata teenuste kohta
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Hilinemise viivitus (päevades) enne hoiatust aegunud teenuste kohta
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Hilinemise viivitus (päevades) enne hoiatust maksmata ostuarvete kohta
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Hilinemise viivitus (päevades) enne hoiatust maksmata müügiarvete kohta
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Hilinemise viivitus (päevades) enne hoiatust ootel panga ühildamiste kohta
    -Delays_MAIN_DELAY_MEMBERS=Hilinemise viivitus (päevades) enne hoiatust hilinenud liikmetasude kohta
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Hilinemise viivitus (päevades) enne hoiatust deponeerimata tšekkide kohta
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Teised menüükanded haldavad muid parameetreid
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Sündmuste turvaaudit
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Siin saab sisse lülitada Dolibarri turvalisusega seotud sündmuste
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=Süsteemi info sisaldab mitmesugust tehnilist infot, mida ei saa muuta ning mis on nähtav vaid administraatoritele.
     SystemAreaForAdminOnly=Sellele alale saavad ligi ainult administraatorid. Ükski Dolibarri õigus ei saa seda piirangut eemaldada.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Siit saab muuta iga parameetrit, mis on seotud Dolibarri kujundusega
     AvailableModules=Available app/modules
     ToActivateModule=Moodulite aktiveerimiseks mine süsteemi seadistusesse (Kodu->Seadistamine->Moodulid).
     SessionTimeOut=Sessiooni aegumise aeg
    -SessionExplanation=Juhul, kui sessioone puhastab PHP sisemine sessioonide puhastaja (ja mitte miski muu), siis see arv garanteerib, et sessioonid ei aegu mitte kunagi enne seda viivitust. PHP sisemine sessioonide puhastaja ei garanteeri sessioonide kohest lõpetamist pärast seda aega. Sessioon aegub pärast määratletud aega järgmisel sessioonipuhastuse käivitusel, seega igal <b>%s/%s</b> ligipääsul, aga ainult teiste sessioonide poolt tehtud ligipääsul.<br>Märkus: mõnedel serveritel, mis kasutavad väliseid sessioonide puhastamise vahendeid (nt Debiani või Ubuntu süsteemidel cron), saab hoolimata siin määratletud väärtusest sessioone lõpetada pärast <strong>session.gc_maxlifetime</strong> väärtust.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Saadaval olevad trigerid
    -TriggersDesc=Trigerid on failid, mis muudavad Dolibarri töövoogu. Trigerite kasutamiseks peab nad kopeerima kausta <b>htdocs/core/triggers</b>. Trigerid realiseerivad uusi tegevusi, mis aktiveeritakse Dolibarri sündmuste puhul (uue ettevõtte loomine, arve kinnitamine jne).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Selles failis olevaid trigereid saab blokeerida <b>-NORUN</b> sufiksiga nende nimes.
     TriggerDisabledAsModuleDisabled=Selles failis olevad trigerid on blokeeritud, kuna moodul <b>%s</b> on blokeeritud.
     TriggerAlwaysActive=Selles failis olevad trigerid on alati aktiivsed hoolimata aktiveeritud Dolibarri moodulitest.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Piiride/täpsuse seadistamine
    -LimitsDesc=Siin saab määratleda Dolibarri poolt kasutatavad piirid, täpsuse ja optimeerimised
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Maks kümnendkohti ühikuhindades
     MAIN_MAX_DECIMALS_TOT=Maks kümnendkohti kogusummades
     MAIN_MAX_DECIMALS_SHOWN=Max kümnendkohti ekraanil näidatavate hindade jaoks (lisa <b>...</b> pärast seda parameetrit, kui tahad, et arvude kärpimisel näidatakse nendel järel <b>...</b>)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Toote neto ühikuhind
     TotalPriceAfterRounding=Koguhind (neto/km/km-ga) pärast ümardamist
     ParameterActiveForNextInputOnly=Parameeter kehtib vaid järgmise sisestuse ajal
     NoEventOrNoAuditSetup=Ühtki turvasündmust pole veel salvestatud. See on täiesti tavaline, kui auditeerimist pole veel "Seadistamine->Turvalisus->Audit" lehelt sisse lülitatud.
    -NoEventFoundWithCriteria=Selliste otsingutingimustega ei leitud ühtkik turvasündmust.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Vaata oma kohaliku sendmaili seadistust
     BackupDesc=Dolibarrist täieliku varukoopia tegemiseks pead:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Arhiveeritud kausta peaks säilitama turvalises kohas.
     BackupDescY=Loodud tõmmisfaili peaks säilitama turvalises kohas.
    -BackupPHPWarning=Antud meetodi abil ei saa garanteerida varukoopia loomist, eelistan eelmist meetodit.
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Dolibarri varukoopiast taastamiseks peate:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQLi import
     ForcedToByAModule= Aktiveeritud moodul on antud reegli väärtuseks sundinud <b>%s</b>
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Antud käsu peab käivitama kä
     YourPHPDoesNotHaveSSLSupport=Antud PHP ei võimalda SSL funktsioone
     DownloadMoreSkins=Veel alla laetavaid kujundusi
     SimpleNumRefModelDesc=Tagast viitenumbri kujul %syymm-nnnn kus yy on aasta, mm on kuu ja nnnn on vahedeta jada, mida ei nullita.
    -ShowProfIdInAddress=Näita dokumentidel registreerimisnumbrit koos aadressidega
    -ShowVATIntaInAddress=Peida dokumentidel KMKR number koos aadressidega
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Osaline tõlge
    -MAIN_DISABLE_METEO=Keela meteo vaade
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Testi API sisse logimist
    -ProxyDesc=Teatud Dolibarri funktsioonid vajavad töötamiseks ligipääsu Internetile. Antud lehel saad määratleda selleks tarvilikke parameetreid. Need parameetrid annavad Dolibarrile info, kuidas kasutada Interneti läbi puhverserveri e proxy.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Väline juurdepääs
     MAIN_PROXY_USE=Kasuta puherverserverit (muul juhul otseühendus Internetiga)
     MAIN_PROXY_HOST=Puhverserveri nimi/aadress
     MAIN_PROXY_PORT=Puhverserveri port
     MAIN_PROXY_USER=Puhverserveri kasutajanimi
     MAIN_PROXY_PASS=Puhverserveri salasõna
    -DefineHereComplementaryAttributes=Määratle siin kõik %s toetamiseks vajalikud atribuudid, mis ei ole vaikimisi saadaval.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Täiendavad atribuudid
     ExtraFieldsLines=Lisaatribuudid (read)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Täiendavad atribuudid (thirdparty e kolmas isik)
    -ExtraFieldsContacts=Täiendavad atribuudid (contact/address e kontakt/aadress)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Täiendavad atribuudid (member e liige)
     ExtraFieldsMemberType=Täiendavad atribuudid (member type e liikme liik)
     ExtraFieldsCustomerInvoices=Täiendavad atribuudid (arved)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=ainult tühikuteta väikesed tähed ja numbrid
     SendmailOptionNotComplete=Hoiatus: mõnedel Linuxi süsteemidel peab e-kirja saatmiseks sendmaili käivitamise seadistus sisaldama võtit -ba (php.ini failis parameeter mail.force_extra_parameters). Kui mõned adressaadid ei saa kunagi kirju kätte, siis proovi parameetri väärtust mail.force_extra_parameters = -ba
     PathToDocuments=Dokumentide rada
     PathDirectory=Kaust
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Pead vähemalt 1 mooduli sisse lülitama
    -ClassNotFoundIntoPathWarning=Klassi %s ei ole PHP rajas
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Suviti 'jah'
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Sessiooni andmehoidla krüpteeritud Suhosini poolt
     ConditionIsCurrently=Olek on hetkel %s
    -YouUseBestDriver=Kasutad draiverit %s, mis on hetkel saadaolevatest parim.
    -YouDoNotUseBestDriver=Kasutad draiverit %s, kuid soovitatav on kasutada draiverit %s.
    -NbOfProductIsLowerThanNoPb=Andmebaasis on vaid %s toodet/teenust. See ei nõua mingit erilist optimeerimist.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Otsingu optimeerimine
    -YouHaveXProductUseSearchOptim=Andmebaasis on %s toodet. Peaksid lisama konstandi PRODUCT_DONOTSEARCH_ANYWHERE väärtusega 1 Kodu->Seadistamine->Muu paneeli, et piirata otsing sõne algusesse ning võimaldada andmebaasil indeksite kasutamine kohese vastuse saamiseks.
    -BrowserIsOK=Kasutad brauserit %s, mis on nii turvalisuse kui jõudluse suhtes OK.
    -BrowserIsKO=Kasutad brauserit %s. See brauser on tuntud halva turvalisuse, jõudluse ja usaldusväärsuse poolest. Soovtitame kasutada Firefoxi, Chromei, Operat või Safarit.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug on laetud.
     XCacheInstalled=XCache on laetud.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Välja %s muutmine
     FillThisOnlyIfRequired=Näide: +2 (täida vaid siis, kui koged ajavööndi nihkega probleeme)
     GetBarCode=Hangi triipkood
     ##### Module password generation
     PasswordGenerationStandard=Tagastab parooli, mis vastab Dolibarri sisemisele algoritmile: 8 tähemärki pikk ja koosneb väikestest tähtedest ja numbritest.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=Uue kasutaja loomiseks on vajalik e-posti aadress
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Ettevõtete mooduli seadistamine
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Dokumendimallid
    -DocumentModelOdt=Loo dokumendid OpenDocument mallidest (.ODT või .ODS failid OpenOffices, KOffices, TextEditis jne)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Mustandi vesimärk
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Registreerimisnumbrite reeglid
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Eksportimise link <b>%s</b> formaati on saadaval järgmisel aadressil: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Eksportimise link <b>%s</b> formaati on saadaval järgmis
     BillsSetup=Arvete mooduli seadistamine
     BillsNumberingModule=Arvete ja kreeditarvete numeratsiooni mudel
     BillsPDFModules=Arve dokumentide mudelid
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Kreeditarve
     CreditNotes=Kreeditarved
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Halda iga liikme kasutajanime
     AdherentMailRequired=Uue liikme loomisel on kohustuslik lisada e-posti aadress
     MemberSendInformationByMailByDefault=Liikmetele e-kirja kinnituse saatmise (kinnitamise või uue tellimuse puhul) märkeruut on vaikimisi valitud
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP seadistamine
     LDAPGlobalParameters=Üldised parameetrid
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Testi LDAPi otsingut
     LDAPSynchroOK=Sünkroniseerimise testimine edukas
     LDAPSynchroKO=Sünkroniseerimise testimine ebaõnnestus
    -LDAPSynchroKOMayBePermissions=Sünkroniseerimise test ebaõnnestus. Kontrolli, et ühendus serveriga on õigestu seadistatud ning et LDAPi uuendused on lubatud
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP ühendust LDAPi serveriga õnnestus (server=%s, port=%s)
     LDAPTCPConnectKO=TCP ühendust LDAPi serveriga ebaõnnestus (server=%s, port=%s)
    -LDAPBindOK=LDAP serveriga ühendamine/autentimine õnnestus (Server=%s, Port=%s, Admin=%s, Parool=%s)
    -LDAPBindKO=LDAPi serveriga ühendumine/autentimine ebaõnnestus (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAPi server seadistatud versioonile 3
     LDAPSetupForVersion2=LDAPi server seadistatud versioonile 2
     LDAPDolibarrMapping=Dolibarri kaardistus
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Kasutajanimi (samba, activedirectory)
     LDAPFieldLoginSambaExample=Näide: samaccountname
     LDAPFieldFullname=Täielik nimi
     LDAPFieldFullnameExample=Näide: cn
    -LDAPFieldPasswordNotCrypted=Krüpteerimata salasõna
    -LDAPFieldPasswordCrypted=Krüpteeritud salasõna
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Näide: kasutajaParool
     LDAPFieldCommonNameExample=Näide: cn
     LDAPFieldName=Nimi
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Näiteväärtused on mõeldud <b>OpenLDAP</b> tarbeks koos järgnevate laetud skeemidega: <b>core.schema, cosine.schema, inetorgperson.schema</b>). Kui kasutad neid väärtusi ja OpenLDAPi, siis muuda LDAPi seadistusfaili <b>slapd.conf</b> kõigi nende skeemide laadimiseks.
     ForANonAnonymousAccess=Autenditud ligipääsu jaoks (näiteks kirjutusõiguse jaoks)
     PerfDolibarr=Jõudluse seadistamise/optimeerimise aruanne
    -YouMayFindPerfAdviceHere=Sellelt lehelt leiad mõningaid jõudlusega seotud kontrolle või nõuandeid.
    -NotInstalled=Pole paigaldatud, seega ei aegusta serverit.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Rakenduse vahemälu
     MemcachedNotAvailable=Puhvermälu ei leitud. Jõudluse suurendamiseks paigalda puhverserver Memcached ja selle kasutamist võimaldav moodul.<br>Rohkem infot siit <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Pane tähele, et paljud veebimajutused sellist serverit teenusena ei paku.
     MemcachedModuleAvailableButNotSetup=Puhvri jaoks kasutatav moodul memcached on olemas, kuid mooduli seadistamine on lõpuni viimata
     MemcachedAvailableAndSetup=Memcached serverit kasutav memcached moodul on sisse lülitatud.
     OPCodeCache=OPCode vahemälu
    -NoOPCodeCacheFound=OPCode vahemälu ei leitud. Võib-olla kasutada mõnda muud OPCode vahemälu peale XCache või eAcceleratori (hea), aga võib-olla ei ole OPCode vahemälu kasutusel (väga halb).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP vahemälu staatiliste ressursside jaoks (CSS, pildid, JavaScript)
     FilesOfTypeCached=%s tüüpi failid hoiab HTTP server vahemälus
     FilesOfTypeNotCached=%s tüüpi faile ei hoia HTTP server vahemälus
     FilesOfTypeCompressed=%s tüüpi faile pakib HTTP server kokk
     FilesOfTypeNotCompressed=%s tüüpi faile ei paki HTTP server kokk
     CacheByServer=Serveri vahemäl
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Brauseri vahemälu
     CompressionOfResources=HTTP vastuste kokku pakkimine
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Toodete mooduli seadistamine
     ServiceSetup=Teenuste mooduli seadistamine
     ProductServiceSetup=Toodete ja teenuste mooduli seadistamine
     NumberOfProductShowInSelect=Maksimaalne toodete arv liitbokside nimekirjades (0=piirangut ei ole)
    -ViewProductDescInFormAbility=Toodete kirjelduste visualiseerimine vormides (hüpikaknas)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Suure toodete arvu korral (> 100 000) saab kiiruse suurendamiseks seadistada Seadistamine->Muu menüüs konstandi PRODUCT_DONOTSEARCH_ANYWHERE väärtuseks 1. Sellisel juhul piirdub otsing sõne algusega.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Vaikimisi vöötkoodi tüüp toodetel
     SetDefaultBarcodeTypeThirdParties=Vaikimisi vöötkoodi tüüpi kolmandatel isikutel
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Saatmiste mooduli seadistamine
     SendingsReceiptModel=Saatekviitungi mudel
     SendingsNumberingModules=Saatmiste numeratsiooni moodulid
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Saatedokumentide numeratsiooni moodul
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Keerulisem toimeti
     ActivateFCKeditor=Aktiveeri keerulisem toimeti järgmistel lehtedel:
     FCKeditorForCompany=WYSIWIG loomine/muutmine elementide kirjeldustes ja märkustes (välja arvatud tooted/teenused)
     FCKeditorForProduct=WYSIWIG loomine/muutmine toodete/teenuste kirjeldustes ja märkustes
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG loomine/muutmine masspostitusel (Tööriistad->E-kirjad)
     FCKeditorForUserSignature=WYSIWIG loomine/muutmine kasutaja allkirjas
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Ühendumine õnnestus, aga andmebaas ei paista olevat OSCommercei andmebaas (võtit %s ei olnud tabelis %s).
    -OSCommerceTestOk=Ühendumine serveri '%s' andmebaasiga '%s' kasutajga '%s' õnnestus.
    -OSCommerceTestKo1=Ühendumine serveriga '%s' õnnestus, kuid andmebaasi '%s' ei õnnestunud kätte saada.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Ühendus serveri '%s' andmebaasiga '%s' kasutajanimega '%s' õnnestus.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Ühendumine serveriga '%s' kasutajaga '%s' ebaõnnestus.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menüü kustutatud
     Menus=Menüüd
    @@ -1548,7 +1561,7 @@ DetailRight=Volitamata hallide menüüde näitamise tingimus
     DetailLangs=Keelefaili nimi siltide koodide tõlke jaoks
     DetailUser=Sisemine/Välimine/Kõik
     Target=Sihtmärk
    -DetailTarget=Linkide sihtmärk (_blank avab uue akna)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Tase (-1: ülemine menüü, 0: päise menüü, >0 menüü ja alammenüü)
     ModifMenu=Menüü muutmine
     DeleteMenu=Kustuta menüükanne
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=KM on tingitud:<br>- kaupade üleandmisel (arve kuupäev)<b
     OptionVatDebitOptionDesc=KM on tingitud:<br>- kaupade üleandmisel (arve kuupäev)<br>- arve esitamisel (deebet) teenuste eest
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Käibemaksu kõlbulikuks arvestamise vaikimisi aeg vastavalt määratletud seadetele:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Üleandmisel
     OnPayment=Maksmisel
     OnInvoice=Arve esitamisel
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Ostukonto kood
     AgendaSetup=Tegevuste ja päevakava mooduli seadistamine
     PasswordTogetVCalExport=Ekspordilingi autoriseerimise võti
     PastDelayVCalExport=Ära ekspordi tegevusi, mis on vanemad kui
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Seda liiki sündmus lisatakse automaatselt vaate otsingufiltrisse
    -AGENDA_DEFAULT_FILTER_STATUS=Seda liiki tegevuse staatus lisatakse automaatselt päevakava otsingufiltrisse
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Vaikimisi avatav sakk päevakava avamisel
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial mooduli seadistamine
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Müügikoht
     CashDeskSetup=Müügikoha mooduli seadistamine
    -CashDeskThirdPartyForSell=Vaikimisi kasutatav kolmas isik müümisel
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Sularahamaksete vastu võtmiseks kasutatav konto
     CashDeskBankAccountForCheque= Tšekimaksete vastu võtmiseks kasutatav konto
     CashDeskBankAccountForCB= Krediitkaardimaksete vastu võtmiseks kasutatav konto
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Järjehoidjate mooduli seadistamine
    -BookmarkDesc=See moodul võimaldab Sul hallata järjehoidjaid. Samuti võib vasakusse menüüsse lisada lühiteid suvalistele Dolibarri lehtedele või välistele lehtedele.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maksimaalne vasakus menüüs näidatav järjehoidjate arv
     ##### WebServices #####
     WebServicesSetup=Veebiteenuste mooduli seadistamine
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Mitme ettevõtte mooduli seadistamine
     ##### Suppliers #####
     SuppliersSetup=Hankijate mooduli seadistamine
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Ostuarvete numeratsiooni mudel
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Projektide mooduli seadistamine
     ProjectsModelModule=Projektiaruannete dokumendi mudel
     TasksNumberingModules=Ülesannete numeratsiooni moodu
     TaskModelModule=Ülesannete aruande dokumendi mudel
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=Ajavööndi parandus
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/et_EE/companies.lang b/htdocs/langs/et_EE/companies.lang
    index 6922c531961..316db9e838d 100644
    --- a/htdocs/langs/et_EE/companies.lang
    +++ b/htdocs/langs/et_EE/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Vali kolmas isik
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Kustuta kontakt/aadress
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Uus kolmas isik
    -MenuNewCustomer=Uus klient
    -MenuNewProspect=Uus huviline
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Uus eraisik
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Uus kolmas isik
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Kolmanda isiku kontakt/aadress
     Company=Ettevõte
     CompanyName=Ettevõtte nimi
     AliasNames=Hüüdnimi (ärinimi, kaubamärk, ...)
    -AliasNameShort=Hüüdnimi
    +AliasNameShort=Alias Name
     Companies=Ettevõtted
    -CountryIsInEEC=Riik on Euroopa Majandusühenduse liige
    -ThirdPartyName=Kolmanda isiku nimi
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Kolmas isik
    -ThirdParties=Kolmandad isikud
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Huvilised
     ThirdPartyProspectsStats=Huvilised
     ThirdPartyCustomers=Kliendid
     ThirdPartyCustomersStats=Kliendid
     ThirdPartyCustomersWithIdProf12=Klient koos %s või %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Kolmanda isiku tüüp
    +ThirdPartyType=Type of company
     Individual=Eraisik
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Emaettevõte
     Subsidiaries=Tütarettevõtted
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Postiindeks
     Town=Linn
     Web=Veeb
     Poste= Ametikoht
    -DefaultLang=Vaikimisi keel
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Pakkumised
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Süntaks on kehtiv
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Sellel kliendil on vaikimisi allahindlus <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Sellel kliendil pole vaikimisi allahindlust
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Kliendil on kreeditarveid <b>%s %s</b> väärtuses
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Pole
    -Supplier=Hankija
    +Supplier=Vendor
     AddContact=Uus kontakt
     AddContactAddress=Uus kontakt/aadress
     EditContact=Muuda kontakti
    @@ -303,22 +303,22 @@ AddThirdParty=Uus kolmas isik
     DeleteACompany=Kustuta ettevõte
     PersonalInformations=Isikuandmed
     AccountancyCode=Accounting account
    -CustomerCode=Kliendi kood
    -SupplierCode=Vendor code
    -CustomerCodeShort=Kliendi kood
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Kliendi kood, igale kliendile unikaalne
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Nõutud, kui kolmas isik on klient või huviline
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Kehtivust kontrollib moodul
    -ThisIsModuleRules=Reeglid sellele moodulile
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Huviline, kellega ühendust võtta
     CompanyDeleted=Ettevõte &quot;%s&quot; on andmebaasist kustutatud.
     ListOfContacts=Kontaktide/aadresside nimekiri
     ListOfContactsAddresses=Kontaktide/aadresside nimekiri
    -ListOfThirdParties=Kolmandate isikute nimekiri
    -ShowCompany=Show third party
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Näita kontakti
     ContactsAllShort=Kõik (filtrita)
     ContactType=Kontakti liik
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=See kontakt ei ole ühegi pakkumisega seotud
     NoContactForAnyContract=See kontakt ei ole ühegi lepinguga seotud
     NoContactForAnyInvoice=See kontakt ei ole ühegi arvega seotud
     NewContact=Uus kontaktisik
    -NewContactAddress=Uus kontakt/aadress
    +NewContactAddress=New Contact/Address
     MyContacts=Minu kontaktid
     Capital=Kapital
     CapitalOf=%s kapital
     EditCompany=Muuda ettevõtet
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Kontrolli
    -VATIntraCheckDesc=Link <b>%s</b> võimaldab kasutada Euroopa käibemaksuregistri kontrollija teenust. Veebiserverile peab olema lubatud Interneti teenuse kasutamine.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Kontrolli Intracomunnautary VAT Euroopa komisjoni lehelt
    -VATIntraManualCheck=Seda võib käsitsi kontrollida Euroopa veebilehel <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Kontrollida pole võimalik. Kontrolli, et liikmesriik (%s) võimaldab teenust kasutada.
    -NorProspectNorCustomer=Pole huviline ega klient
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Personal
     ProspectLevelShort=Potentsiaalne
     ProspectLevel=Huvilise potentsiaal
    @@ -387,12 +387,12 @@ ExportCardToFormat=Ekspordi kaart formaati
     ContactNotLinkedToCompany=Kontakt ole seotud ühegi kolmanda isikuga
     DolibarrLogin=Dolibarri kasutaja
     NoDolibarrAccess=Dolibarri ligipääs puudub
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Kontaktid ja omadused
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Hinnatase
     DeliveryAddress=Tarneaadress
     AddAddress=Lisa aadress
    @@ -402,16 +402,16 @@ DeleteFile=Kustuta fail
     ConfirmDeleteFile=Oled sa kindel, et soovid selle faili kustutada?
     AllocateCommercial=Assigned to sales representative
     Organization=Organisatsioon
    -FiscalYearInformation=Majandusaasta informatsioon
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Majandusaasta esimene kuu
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Huviliste nimekiri
    -ListCustomersShort=Klientide nimekiri
    -ThirdPartiesArea=Kolmandate isikute ja kontaktide ala
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Kokku unikaalseid kolmandaid isikuid
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Ava
     ActivityCeased=Suletud
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Hetkel maksmata summa
     OutstandingBill=Suurim võimalik maksmata arve
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Kood on vaba, seda saab igal ajal muuta.
     ManagingDirectors=Haldaja(te) nimi (CEO, direktor, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/et_EE/errors.lang b/htdocs/langs/et_EE/errors.lang
    index 692d1a573b3..c1077f133cc 100644
    --- a/htdocs/langs/et_EE/errors.lang
    +++ b/htdocs/langs/et_EE/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Väärtus '%s' on vales kuupäeva vormingus
     ErrorWrongDate=Kuupäev pole korrektne!
     ErrorFailedToWriteInDir=Ei suutnud kirjutada kausta %s
     ErrorFoundBadEmailInFile=Failis on %s real ebaõige e-posti aadressi süntaks (näiteks on rida %s aadress=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Mõned nõutud väljad on täitmata.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Kausta loomine ebaõnnestus. Kontrolli, et veebiserveri kasutajal on piisavalt õigusi Dolibarri dokumentide kausta kirjutamiseks. Kui PHP <b>safe_mode</b> parameeter on sisse lülitatud, siis kontrolli, et veebiserveri kasutaja (või grupp) on Dolibarri PHP failide omanik.
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Palun sisesta nimekirja väärtused
     ErrorNoValueForCheckBoxType=Palun sisesta märkenuppude väärtused
     ErrorNoValueForRadioType=Palun sisesta raadionuppude väärtused
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Väli <b>%s</b> ei tohi sisaldada erisümboleid.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Ühtki raamatupidamise moodulit pole aktiveeritud
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP sobitamine ei ole täielik.
     ErrorLDAPMakeManualTest=Kausta %s on loodud .ldif fail. Vigade kohta lisainfo saamiseks proovi selle käsitsi käsurealt laadimist.
    -ErrorCantSaveADoneUserWithZeroPercentage=Ülesanne, mille staatuseks on 'Alustamata' ei saa salvestada, kui väli "Tegevuse teinud isik" on samuti täidetud.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Loomiseks kasutatav viide on juba olemas.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Selle võimaluse töötamiseks peab JavaScript olema sisse lülitatud. JavaScripti sisse või välja lülitamiseks kasuta menüüd Kodu->Seadistamine->Kuva.
     ErrorPasswordsMustMatch=Sisestatud paroolid peavad klappima
    -ErrorContactEMail=Tekkis tehniline viga. Palun võta ühendust oma administraatoriga e-posti aadressil <b>%s</b> ning lisa sõnumisse vea kood <b>%s</b> või veel parem oleks lisada sõnumisse antud lehe kuvatõmmis.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Väli number <b>%s</b> sisaldab vale väärtust (väärtus'<b>%s</b>' ei sobi regulaaravaldisega <b>%s</b>)
     ErrorFieldValueNotIn=Väli number <b>%s</b> sisaldab vale väärtust (väärtus '<b>%s</b>' ei sobi välja <b>%s</b> tüübiga tabelis <b>%s</b>)
     ErrorFieldRefNotIn=Väli number <b>%s</b> sisaldab vale väärtust (väärtus '<b>%s</b>' ei ole üksuse <b>%s</b> olemasolev viide)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Antiviiruse programm ei suutnud faili valideerida
     ErrorSpecialCharNotAllowedForField="%s" väljal ei ole erisümbolid lubatud
     ErrorNumRefModel=Andmebaasi viide on juba olemas (%s) ja ei ole kooskõlas antud numeratsiooni reegliga. Kustuta kirje või nimeta viide ümber antud mooduli aktiveerimiseks.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Maski viga
     ErrorBadMaskFailedToLocatePosOfSequence=Viga: mask on järjekorranumbrita
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Viga: halb lähteväärtus
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Viga: vali vähemalt üks sissekanne
    -ErrorDeleteNotPossibleLineIsConsolidated=Kustutamine ei ole võimalik, kuna kirje on seotud juba vastavusse viidud pangaülekandega
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s on määratud muule kolmandale isikule
     ErrorFailedToSendPassword=Parooli saatmine ebaõnnestus
     ErrorFailedToLoadRSSFile=RSS voo saamine ebaõnnestus. Proovi konstandi MAIN_SIMPLEXMLLOAD_DEBUG lisamist, kui veateated ei anna piisavalt infot
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Kasutajanime <b>%s</b> ei leitud.
     ErrorLoginHasNoEmail=Antud kasutajal ei ole e-posti aadressi. Protsess katkestatud.
     ErrorBadValueForCode=Turvakoodi halb väärtus. Proovi uuesti...
     ErrorBothFieldCantBeNegative=Mõlemad väljad %s ja %s ei saa olla negatiivse väärtusega
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Veebiserveri käivitamiseks kasutataval kontrol <b>%s</b> ei ole selleks õigusi
     ErrorNoActivatedBarcode=Ühtki vöötkoodi tüüpi pole aktiveeritud
    @@ -138,7 +141,7 @@ ErrorBadFormat=Vigane vorming!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Selle nimega või lingiga (URL) järjehoidja on jub
     WarningPassIsEmpty=Hoiatus: andmebaasi parool on tühi. Tegu on turvaauguga. Andmebaasile peaks lisama parooli ja conf.php failis andmebaasi parooli muutma.
     WarningConfFileMustBeReadOnly=Hoiatus: seadistuste fail (<b>htdocs/conf/conf.php</b>) on veebiserveri poolt ülekirjutatav. Tegu on tõsise turvaauguga. Muuda faili ligipääsuõigusi niimoodi, et veebiserveri poolt kasutataval operatsioonisüsteemi kasutajal on vaid lugemisõigused. Kui kasutad Windowsi operatsioonisüsteemi FAT-failisüsteemiga, siis tea, et see failisüsteem ei luba failide ligipääsuõigusi ning ei ole seega turvaline.
     WarningsOnXLines=<b>%s</b> lähtekirjega on seotud hoiatus(ed)
    -WarningNoDocumentModelActivated=Ühtki dokumentide loomise malli pole aktiveeritud. Mooduli seadistuse muutmiseni kasutatakse vaikimisi malli
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Hoiatus: kui paigaldamine on lõpetatud, pead paigaldamise/migreerimise tööriistad keelama, lisades faili <b>install.lock</b> kausta <b>%s</b>. Selle faili loomata jätmine on turvarisk.
    -WarningUntilDirRemoved=Kõik turvahoiatused (nähtavad vaid administraatorile) jäävad aktiivseks senikaua, kuni turvarisk on eemaldatud (või konstant MAIN_REMOVE_INSTALL_WARNING lisatakse Seadistamine->Muud seadistused alla).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Hoiatus: sulgemine toimub isegi siis, kui lähte- ja sihtelementide summa erineb. Lülita see funktsioon sisse ainult siis, kui tead, mida teed.
     WarningUsingThisBoxSlowDown=Hoiatus: selle kasti kasutamine muudab kõik seda kasti kasutavad lehed märgatavalt aeglaseks.
     WarningClickToDialUserSetupNotComplete=Sinu kasutaja ClickToDial info seadistamine ei ole lõpetatud (vaata oma kasutaja kaardi ClickToDial sakki).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/et_EE/interventions.lang b/htdocs/langs/et_EE/interventions.lang
    index 3351e4953de..6fcfc995d21 100644
    --- a/htdocs/langs/et_EE/interventions.lang
    +++ b/htdocs/langs/et_EE/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Sekkumised
     InterventionCard=Sekkumise kaart
     NewIntervention=Uus sekkumine
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Sekkumiste nimekiri
     ActionsOnFicheInter=Sekkumise tegevused
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/et_EE/main.lang b/htdocs/langs/et_EE/main.lang
    index 6009bcbf141..2a065ff3b66 100644
    --- a/htdocs/langs/et_EE/main.lang
    +++ b/htdocs/langs/et_EE/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=E-kirja saatmine ebaõnnestus (saatja = %s, vastuvõtja =
     ErrorFileNotUploaded=Ei õnnestunud faili üles laadida. Kontrolli järgmist: fail ei ületa lubatud suurust, serveri kettal on vaba ruumi ning sama nimega faili ei oleks samas kaustas.
     ErrorInternalErrorDetected=Tuvastati viga
     ErrorWrongHostParameter=Vigane hosti parameeter
    -ErrorYourCountryIsNotDefined=Hetkel kasutuses olev riik on määratlemata. Mine Kodu-Paigaldus-Muuda ja postita vorm uuesti.
    -ErrorRecordIsUsedByChild=Kirje kustutamine ebaõnnestus. Antud kirje on seotud vähemalt ühe tütarkirjega.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Vigane väärtus
     ErrorWrongValueForParameterX=Parameetrile %s on omistatud vigane väärtus
     ErrorNoRequestInError=Veas puudub päring
    -ErrorServiceUnavailableTryLater=Teenus ei ole hetkel kättesaadav. Palun proovi hiljem uuesti.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Unikaalsust nõudval väljal on dubleeritud väärtus
    -ErrorSomeErrorWereFoundRollbackIsDone=Töö käigus tekkisid mõned vead. Tehtud muudatused on tühistatud.
    -ErrorConfigParameterNotDefined=Parameeter <b>%s</b> ei ole Dolibarri seadistusfailis <b>conf.php</b> määratletud.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Kasutajat <b>%s</b> ei leitud Dolibarri andmebaasist.
     ErrorNoVATRateDefinedForSellerCountry=Viga: riigi '%s' jaoks ei ole käibemaksumäärasid määratletud.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Viga: faili salvestamine ebaõnnestus.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Sea kuupäev
     SelectDate=Vali kuupäev
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Fail on edukalt üles laetud
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Fail on valitud manustamiseks, kuid on veel üles laadimata. Klõpsa &quot;Lisa fail&quot; nupul selle lisamiseks.
    -NbOfEntries=Kannete arv
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Loe abi
     RecordSaved=Kirje salvestatud
    @@ -94,7 +94,7 @@ Undefined=Määratlemata
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=Vt eespool
    -HomeArea=Kodu ala
    +HomeArea=Kodu
     LastConnexion=Latest connection
     PreviousConnexion=Eelmine sisselogimine
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Suletud
     Closed2=Suletud
     NotClosed=Not closed
     Enabled=Lubatud
    +Enable=Lülita sisse
     Deprecated=Vananenud
     Disable=Keela
     Disabled=Keelatud
    @@ -153,7 +154,7 @@ Update=Uuenda
     Close=Sulge
     CloseBox=Remove widget from your dashboard
     Confirm=Kinnita
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Kustuta
     Remove=Eemalda
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Kopeeri
     Paste=Kleebi
     Default=Vaikimisi
     DefaultValue=Vaikeväärtus
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Hind
     PriceCurrency=Price (currency)
     UnitPrice=Ühiku hind
    @@ -347,7 +348,7 @@ AmountTTCShort=Summa (koos km-ga)
     AmountHT=Summa (maksudeta)
     AmountTTC=Summa (koos km-ga)
     AmountVAT=Maksu summa
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Ei ole kohaldatav
     ActionRunningNotStarted=Alustada
     ActionRunningShort=In progress
     ActionDoneShort=Lõpetatud
    -ActionUncomplete=Lõpuni viimata
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Loo
     Duration=Kestus
     TotalDuration=Kogukestus
     Summary=Kokkuvõte
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Saadaval
     NotYetAvailable=Pole veel saadaval
    @@ -468,7 +469,7 @@ and=ja
     or=või
     Other=Muu
     Others=Teised
    -OtherInformations=Muu informatsioon
    +OtherInformations=Other information
     Quantity=Kogus
     Qty=Kogus
     ChangedBy=Muutis
    @@ -506,7 +507,7 @@ None=Puudub
     NoneF=Puudub
     NoneOrSeveral=None or several
     Late=Hilja
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Pilt
     Photos=Pildid
    @@ -530,18 +531,6 @@ September=September
     October=Oktoober
     November=November
     December=Detsember
    -JanuaryMin=jaan
    -FebruaryMin=veebr
    -MarchMin=märts
    -AprilMin=apr
    -MayMin=mai
    -JuneMin=juuni
    -JulyMin=juuli
    -AugustMin=aug
    -SeptemberMin=sept
    -OctoberMin=okt
    -NovemberMin=nov
    -DecemberMin=dets
     Month01=jaanuar
     Month02=veebruar
     Month03=märts
    @@ -646,6 +635,8 @@ SendMail=Saada e-kiri
     EMail=E-mail
     NoEMail=E-posti aadress puudub
     Email=E-post
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Mobiiltelefon puudub
     Owner=Omanik
     FollowingConstantsWillBeSubstituted=Järgnevad konstandid asendatakse vastavate väärtustega.
    @@ -677,7 +668,7 @@ NeverReceived=Pole vastu võetud
     Canceled=Tühistatud
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Värv
     Documents=Seotud failid
     Documents2=Dokumendid
    @@ -716,15 +707,15 @@ Merge=Ühendamine
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Kuva leht lehe sisu printimiseks
     MenuManager=Menüü haldaja
    -WarningYouAreInMaintenanceMode=Hoiatus: hooldusrežiim on aktiivne, praegu on rakendusele ligipääs vaid kasutajal <b>%s</b>.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Süsteemi viga
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Krediitkaart
     ValidatePayment=Kinnita makse
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Väljad omadusega <b>%s</b> on kohustuslikud
    -FieldsWithIsForPublic=Väljad <b>%s</b> omadusega kuvatakse avalikus liikmete nimekirjas. Kui soovid seda välja lülitada, võta märge maha "avalik" kastilt.
    -AccordingToGeoIPDatabase=(vastavalt GeoIP andmebaasi teisendusele)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Rida
     NotSupported=Ei ole toetatud
     RequiredField=Kohustuslik väli
    @@ -732,6 +723,8 @@ Result=Tulemus
     ToTest=Test
     ValidateBefore=Enne selle funktsiooni kasutamist peab kaart olema valideeritud
     Visibility=Nähtavus
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privaatne
     Hidden=Peidetud
     Resources=Ressursid
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Viide tellimusele
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Loo mustand
     SetToDraft=Tagasi mustandiks
     ClickToEdit=Klõpsa muutmiseks
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=päeva järgi
     BySalesRepresentative=Müügiesindaja järgi
     LinkedToSpecificUsers=Seostatud kindla kasutaja kontaktiga
     NoResults=Vasteid ei leitud
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=Süsteemi tööriistad
     ModulesSystemTools=Moodulite tööriistad
     Test=Test
     Element=Element
     NoPhotoYet=Pildid puuduvad
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Maha arvatav
     from=alates
     toward=kuni
    @@ -802,7 +797,7 @@ PrintFile=Prindi fail %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Näita sekkumist
     ShowContract=Näita lepingut
    -GoIntoSetupToChangeLogo=Mine Kodu - Seadistamine - Ettevõte logo muutmiseks või mine Kodu - Seadistamine - Kuva logo peitmiseks.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Lükka tagasi
     Denied=Tagasi lükatud
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Kustuta rida
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Liigita arve esitatud
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Kalender
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Tegevused
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projekt
     Projects=Projektid
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Õigused
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Esmaspäev
     Tuesday=Teisipäev
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Sekkumised
     SearchIntoContracts=Lepingud
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Kommentaarid
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Kõik
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Mõjutatud isik
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/et_EE/other.lang b/htdocs/langs/et_EE/other.lang
    index 9eed5ac17b1..9156ba9f899 100644
    --- a/htdocs/langs/et_EE/other.lang
    +++ b/htdocs/langs/et_EE/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Turvakood
     NumberingShort=N°
     Tools=Tööriistad
     TMenuTools=Tööriistad
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Sünnipäev
     BirthdayDate=Birthday date
     DateToBirth=Sünniaeg
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Kinnitatud makse lehel olev sõnum
     MessageKO=Tühistatud makse lehel olev sõnum
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Sekkumine kinnitatud
    -Notify_FICHINTER_SENTBYMAIL=Sekkumine saadetud postiga
     Notify_ORDER_VALIDATE=Müügitellimus kinnitatud
     Notify_ORDER_SENTBYMAIL=Müügitellimus saadetud postiga
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Ostutellimus saadetud postiga
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Ostutellimus heaks kiidetud
     Notify_ORDER_SUPPLIER_REFUSE=Ostutellimus tagasi lükatud
     Notify_PROPAL_VALIDATE=Müügipakkumine kinnitatud
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Müügipakkumine saadetud postiga
     Notify_WITHDRAW_TRANSMIT=Tehingu väljamakse
     Notify_WITHDRAW_CREDIT=Krediidi väljamakse
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Kolmas isik loodud
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Müügiarve kinnitatud
     Notify_BILL_UNVALIDATE=Müügiarve avatud
    -Notify_BILL_PAYED=Müügiarve tasutud
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Müügiarve tühistatud
     Notify_BILL_SENTBYMAIL=Müügiarve saadetud postiga
     Notify_BILL_SUPPLIER_VALIDATE=Ostuarve kinnitatud
    -Notify_BILL_SUPPLIER_PAYED=Ostuarve makstud
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Ostuarve saadetud postiga
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Leping kinnitatud
     Notify_FICHEINTER_VALIDATE=Sekkumine kinnitatud
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Sekkumine saadetud postiga
     Notify_SHIPPING_VALIDATE=Saatmine kinnitatud
     Notify_SHIPPING_SENTBYMAIL=Saatmine saadetud postiga
     Notify_MEMBER_VALIDATE=Liige kinnitatud
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Manusena lisatud faile/dokumente
     TotalSizeOfAttachedFiles=Manusena lisatud failide/dokumentide kogusuurus
     MaxSize=Maksimaalne suurus
     AttachANewFile=Manusta uus fail/dokument
     LinkedObject=Seostatud objekt
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Reg kood %s</b> on info, mis sõltub kolmanda isiku riigist.<br>Näiteks riigi <b>%s</b> puhul on see kood <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Sekkumine %s on kinnitatud.
     EMailTextInvoiceValidated=Arve %s on kinnitatud.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Pakkumine %s on kinnitatud.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Tellimus %s on kinnitatud.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Tellimuse %s kiitis %s heaks
     EMailTextOrderRefused=Tellimus %s on tagasi lükatud.
     EMailTextOrderRefusedBy=Tellimuse %s lükkas %s tagasi
     EMailTextExpeditionValidated=Saadetis %s on kinnitatud.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Andmekogu import
     DolibarrNotification=Automaatne teavitamine
     ResizeDesc=Sisesta uus laius <b>VÕI</b> uus kõrgus. Suuruse muutmise käigus säilitatakse kõrguse ja laiuse suhe...
    @@ -204,7 +212,7 @@ NewLength=Uus laius
     NewHeight=Uus kõrgus
     NewSizeAfterCropping=Uus suurus pärast lõikamist
     DefineNewAreaToPick=Määratle valitav uus ala pildil (vasak klõps pildil, siis lohista vastasnurka jõudmiseni)
    -CurrentInformationOnImage=See tööriist loodi selleks, et aidata sul pildi suurust muuta või pilti lõigata. Siin on info hetkel muudetava pildi kohta
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Pildiredkator
     YouReceiveMailBecauseOfNotification=Antud sõnum saadeti sulle sellepärast, et sinu e-posti aadress on lisatud teavitatavate nimekirja, keda teatatakse automaatselt %s tarkvaras toimuvatest %s organisatsiooni sündmustest.
     YouReceiveMailBecauseOfNotification2=Antud tegevus on järgmine:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Ekspordi ala
    diff --git a/htdocs/langs/et_EE/projects.lang b/htdocs/langs/et_EE/projects.lang
    index 6608c1fa194..1827ba74ab3 100644
    --- a/htdocs/langs/et_EE/projects.lang
    +++ b/htdocs/langs/et_EE/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Kuva projekt
     ShowTask=Näita ülesannet
     SetProject=Määra projekt
     NoProject=Ühtki projekti pole määratletud või ei oma ühtki projekt
    -NbOfProjects=Projekte
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Aega kulutatud
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Antud projektiga seotud pakkumised
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Antud projektiga seotud lepingute nimekiri
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Antud projektiga seotud sekkumiste nimekiri
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Antud projektiga seotud tegevuste nimekiri
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Ülesanne %s on loodud
     TaskModifiedInDolibarr=Ülesannet %s on muudetud
     TaskDeletedInDolibarr=Ülesanne %s on kustutatud
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Toetaja
     SelectElement=Vali element
     AddElement=Seosta elemendiga
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planeeritav koormus
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Pakkumine
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/eu_ES/admin.lang b/htdocs/langs/eu_ES/admin.lang
    index 2a3e3059af1..ca1686c9df7 100644
    --- a/htdocs/langs/eu_ES/admin.lang
    +++ b/htdocs/langs/eu_ES/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Garapena
     VersionUnknown=Ezezaguna
     VersionRecommanded=Gomendatua
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Kudeatzailea sesioak gordetzeko
     SessionSavePath=Sesio biltegiaren kokapena
     PurgeSessions=Sesio garbiketa
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Konexio berriak blokeatu
    -ConfirmLockNewSessions=Ziur zaude, blokeatu nahi dituzula zure dolibarr-eko konexio berriak. Bakarrik <b>%s</b> erabiltzaileak, konexioa burutu ahal izango du honen ondorioz.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Konexioaren blokeoa kendu
     YourSession=Zure sesioa
    -Sessions=Erabiltzaileen sesioa
    +Sessions=Users sessions
     WebUserGroup=Web-zerbitzariaren erabiltzailea/taldea
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Kanpoko erabiltzailea
     InternalUsers=Barneko erabiltzaileak
     ExternalUsers=Kanpoko erabiltzaileak
     GUISetup=Itxura
    -SetupArea=Setup area
    +SetupArea=Konfigurazioa
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kodeak ezin du 0 balioa izan
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Ajax ezgaituta dagoenean ez dago erabilgarri
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Aurreikuspena ez dago eskuragarri
     ThemeCurrentlyActive=Aktibatuta dagoen gaia
     CurrentTimeZone=TimeZone PHP (zerbitzaria)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Taula
     Fields=Eremuak
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Aktibo
     SetupShort=Konfigurazioa
     OtherOptions=Beste aukerak
    -OtherSetup=Beste konfigurazioa
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Bereizle hamartarra
     CurrentValueSeparatorThousand=Milakoen bereizlea
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=%s parametroa
    -LocalisationDolibarrParameters=Lokalizazio parametroak
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Denbora (zerbitzaria)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Berez antzeman (nabigatzailean hizkuntza)
     FeatureDisabledInDemo=Demo-an ezgaitutako aukera
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Esteka
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Aukera
     DolibarrLicense=Lizentzia
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Neurri-unitatea
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS ataka (berez php.ini fitxategian adierazita: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS zerbitzaria (berez php.ini fitxategian adierazita: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID-a autentifikazio behar bada
    -MAIN_MAIL_SMTPS_PW=SMTP parahitza autentifikazioa behar bada
    -MAIN_MAIL_EMAIL_TLS= TLS (SSL) enkriptazioa erabili
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=SMS-ak bidaltzeko erabiliko den modua
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Moduluaren konfigurazioa
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=%s pausua
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr-en uneko bertsioa
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Gutxieneko luzeera
     LanguageFilesCachedIntoShmopSharedMemory=.lang fitxategiak memoria partekatuan kargatu dira
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Gaien kokapena
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Erantzuteko denbora-muga
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=%s objektuen erreferentzia sartu
     GetSecuredUrl=Kalkulatutako URL-a hartu
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Aukeren zerrenda
     ExtrafieldSelectList = Taulatik aukeratu
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Pasahitza
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Erabiltzaileak & Taldeak
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Komertziala
     Module2Desc=Kudeaketa komertziala
     Module10Name=Kontabilitatea
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposamenak
     Module20Desc=Proposamen komertzialak kudeatzea
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock-ak kudeatzea (produktuak)
     Module53Name=Zerbitzuak
     Module53Desc=Zerbitzuak kudeatzea
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barra-kodeak
     Module55Desc=Barra-kodeak kudeatzea
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Bidalketak
     Module80Desc=Bidalketa eta banaketa eskerak kudeatzea
    -Module85Name=Bankuak eta eskudirua
    +Module85Name=Banks and Cash
     Module85Desc=Banku edo eskudiru kontuak kudeatzea
    -Module100Name=Kanpoko tokia
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman eta SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP direktorioa sinkronizatzea
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integrazioa
     Module240Name=Daten esportazioa
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Daten inportazioa
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Kideak
     Module310Desc=Foundation members management
     Module320Name=RSS kanala
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Laster-markak
    -Module330Desc=Laster-marken kudeaketa
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Web-egutegia
     Module410Desc=Web-egutegiaren integrazioa
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Diru-emateak
     Module700Desc=Diru-emateak kudeatzea
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editorea
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Bezeroa
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marjinak
     Module59000Desc=Marjinak kudeatzeko modulua
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Bezeroen fakturak ikusi
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Produktuak ezabatu
     Permission36=See/manage hidden products
     Permission38=Produktuak esportatu
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=BEZ-a kudeatzea
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Izena
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Kide bakoitzarentzat Sarrera bat kudeatu
     AdherentMailRequired=Kide berria sortzeko e-posta beharrezkoa da
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP konfigurazioa
     LDAPGlobalParameters=Parametro orokorrak
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Izena
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/eu_ES/companies.lang b/htdocs/langs/eu_ES/companies.lang
    index b9501126d3a..c5f4853274a 100644
    --- a/htdocs/langs/eu_ES/companies.lang
    +++ b/htdocs/langs/eu_ES/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Erakundea
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Posizioa
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposamenak
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Hornitzailea
    +Supplier=Vendor
     AddContact=Kontaktua sortu
     AddContactAddress=Kontua/helbidea sortu
     EditContact=Kontaktua editatu
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Closed
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/eu_ES/errors.lang b/htdocs/langs/eu_ES/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/eu_ES/errors.lang
    +++ b/htdocs/langs/eu_ES/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/eu_ES/interventions.lang b/htdocs/langs/eu_ES/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/eu_ES/interventions.lang
    +++ b/htdocs/langs/eu_ES/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/eu_ES/main.lang b/htdocs/langs/eu_ES/main.lang
    index 28dfdbd078c..967a801a0f9 100644
    --- a/htdocs/langs/eu_ES/main.lang
    +++ b/htdocs/langs/eu_ES/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Gaituta
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Berritu
     Close=Itxi
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Ezabatu
     Remove=Kendu
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Prezioa
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Besteak
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Irudia
     Photos=Irudiak
    @@ -530,18 +531,6 @@ September=Iraila
     October=Urria
     November=Azaroa
     December=Abendua
    -JanuaryMin=Urt
    -FebruaryMin=Ots
    -MarchMin=Mar
    -AprilMin=Api
    -MayMin=Mai
    -JuneMin=Eka
    -JulyMin=Uzt
    -AugustMin=Abu
    -SeptemberMin=Ira
    -OctoberMin=Urr
    -NovemberMin=Aza
    -DecemberMin=Abe
     Month01=Urtarrila
     Month02=Otsaila
     Month03=Martxoa
    @@ -646,6 +635,8 @@ SendMail=e-posta bidali
     EMail=E-mail
     NoEMail=No email
     Email=E-posta
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Informazioa
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Ordainketak balioztatu
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=Sistemaren tresnak
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Egutegia
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Gertaerak
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Proiektuak
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Baimenak
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Kontratuak
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/eu_ES/other.lang b/htdocs/langs/eu_ES/other.lang
    index 9485b1c7709..2d45c813ffb 100644
    --- a/htdocs/langs/eu_ES/other.lang
    +++ b/htdocs/langs/eu_ES/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/eu_ES/projects.lang b/htdocs/langs/eu_ES/projects.lang
    index ea77b367d8b..ce5b98ccc70 100644
    --- a/htdocs/langs/eu_ES/projects.lang
    +++ b/htdocs/langs/eu_ES/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/fa_IR/admin.lang b/htdocs/langs/fa_IR/admin.lang
    index f5614dc4842..dc20b67d3e6 100644
    --- a/htdocs/langs/fa_IR/admin.lang
    +++ b/htdocs/langs/fa_IR/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=توسعه
     VersionUnknown=ناشناخته
     VersionRecommanded=توصیه شده
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=هندلر برای صرفه جویی در جلسات
     SessionSavePath=محلی سازی را وارد نمایید و ذخیره سازی
     PurgeSessions=پاکسازی جلسات
     ConfirmPurgeSessions=آيا واقعاً می‌خواهيد تمام جلسات پاک شود؟ در اين حالت اتصال همه کاربران قطع می شود (بجز خودتان)
    -NoSessionListWithThisHandler=کنترل جویی در هزینه را وارد نمایید پیکربندی در PHP شما اجازه نمی دهد که لیست تمام جلسات در حال اجرا.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=قفل کردن ارتباطات جدید
    -ConfirmLockNewSessions=آیا مطمئن هستید که می خواهید برای محدود کردن هر اتصال جدید Dolibarr به خودتان. تنها <b>کاربر٪ s را</b> قادر پس از آن برای اتصال خواهد بود.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=حذف قفل اتصال
     YourSession=نشست شما
    -Sessions=کاربران را وارد نمایید
    +Sessions=Users sessions
     WebUserGroup=کاربر وب سرور / گروه
    -NoSessionFound=PHP شما به نظر می رسد اجازه نمی دهد به لیست نمود. دایرکتوری استفاده می شود برای صرفه جویی در جلسات <b>(٪ ها)</b> ممکن است از آن محافظت شود (به عنوان مثال، با مجوز OS یا با PHP open_basedir باشد بخشنامه).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=پایگاه داده مجموعه کاراکتر برای ذخیره داده ها
     DBSortingCharset=مجموعه نویسه پایگاه داده به مرتب سازی داده ها
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=کاربر خارجی
     InternalUsers=کاربران داخلی
     ExternalUsers=کاربران خارجی
     GUISetup=نمایش
    -SetupArea=منطقه راه اندازی
    +SetupArea=برپایی
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=فرم برای تست آپلود فایل (با توجه به راه اندازی)
     IfModuleEnabled=توجه داشته باشید: بله موثر است تنها در صورتی که <b>بخش٪ s</b> فعال است
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=کد می تواند مقدار 0 را شامل نمی
     DisableJavascript=توابع غیر فعال کردن جاوا اسکریپت و آژاکس (توصیه شده برای فرد نابینا یا مرورگرهای متنی)
     UseSearchToSelectCompanyTooltip=همچنین اگر شما تعداد زیادی از اشخاص ثالث (> 100 000)، شما می توانید سرعت با تنظیم COMPANY_DONOTSEARCH_ANYWHERE ثابت به 1 در راه اندازی-> دیگر افزایش دهد. جست و جو خواهد شد و سپس محدود به شروع از رشته است.
     UseSearchToSelectContactTooltip=همچنین اگر شما تعداد زیادی از اشخاص ثالث (> 100 000)، شما می توانید سرعت با تنظیم CONTACT_DONOTSEARCH_ANYWHERE ثابت به 1 در راه اندازی-> دیگر افزایش دهد. جست و جو خواهد شد و سپس محدود به شروع از رشته است.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=اسمشو نبر از شخصیت های به ماشه جستجو:٪ s را
     NotAvailableWhenAjaxDisabled=در دسترس نیست زمانی که آژاکس غیر فعال است
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=پیش بازی در دسترس نیست
     ThemeCurrentlyActive=تم در حال حاضر فعال
     CurrentTimeZone=منطقه زمانی PHP (سرور)
     MySQLTimeZone=خروجی منطقه زمانی (پایگاه داده)
    -TZHasNoEffect=تاریخ های ذخیره شده و بازگردانده شده توسط سرور پایگاه داده به عنوان اگر آنها به عنوان رشته ارسال شده نگهداری شدند. منطقه زمانی اثر تنها زمانی که با استفاده از تابع UNIX_TIMESTAMP (که باید توسط Dolibarr استفاده نمی شود، بنابراین پایگاه داده TZ باید اثر ندارد حتی اگر پس از داده های وارد شده را تغییر داده اند،).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=فضا
     Table=جدول
     Fields=زمینه
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=فعال
     SetupShort=برپایی
     OtherOptions=گزینه های دیگر
    -OtherSetup=دیگر راه اندازی
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=جداکننده دهدهی
     CurrentValueSeparatorThousand=هزار جدا
     Destination=مقصد
     IdModule=ماژول ID
     IdPermissions=مجوز های ID
     LanguageBrowserParameter=پارامتر٪ بازدید کنندگان
    -LocalisationDolibarrParameters=پارامترهای محلی سازی
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=کارفرما منطقه زمان (کاربر)
     ClientHour=زمان مشتری (کاربر)
     OSTZ=سرور OS منطقه زمان
    @@ -126,8 +126,8 @@ PHPTZ=PHP سرور منطقه زمان
     DaylingSavingTime=نور روز صرفه جویی در زمان
     CurrentHour=PHP زمان (سرور)
     CurrentSessionTimeOut=فاصله را وارد نمایید کنونی
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=آشکارسازی خودکار (زبان مرورگر)
     FeatureDisabledInDemo=از ویژگی های غیر فعال در نسخه ی نمایشی
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=تنها عناصر از <a href="%s">ماژول های فعال</a> نمایش داده می شود.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=جدید
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore، محل رسمی بازار برای ماژول های خارجی Dolibarr ERP / CRM
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=پیوند
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=آیا بدون رمز عبور روشن ذخیره در
     MainDbPasswordFileConfEncrypted=رمز عبور پایگاه داده را در conf.php رمز شده (فعال توصیه می شود)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=حفاظت از فایل های پی دی اف ایجاد شده (فعال توصیه نمی شود، می شکند نسل پی دی اف توده)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=خصیصه
     DolibarrLicense=پروانه
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=برای کاربر و یا اسناد و مدارک توسعه (دکتر، پرسش و ...)، <br> نگاهی به Dolibarr ویکی: <br> <a href="%s" target="_blank"><b>از٪ s</b></a>
     ForAnswersSeeForum=برای هر گونه سوال / کمک های دیگر، شما می توانید انجمن Dolibarr استفاده کنید: <br> <a href="%s" target="_blank"><b>از٪ s</b></a>
    -HelpCenterDesc1=این منطقه می تواند به شما کمک کند برای دریافت خدمات پشتیبانی راهنما در Dolibarr.
    -HelpCenterDesc2=بخشی از این سرویس <b>تنها</b> در <b>انگلیسی</b> موجود است.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=منو کنترل کنونی
     MeasuringUnit=اندازه گیری واحد
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS بندر (به طور پیش فرض در فایل php.ini <b>اجرا:٪ بازدید کنندگان)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS میزبان (به طور پیش فرض در فایل php.ini <b>اجرا:٪ بازدید کنندگان)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS بندر (به PHP بر روی یونیکس تعریف نشده مانند سیستم)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS هاست (به PHP بر روی یونیکس تعریف نشده مانند سیستم)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= ارسال سیستماتیک مخفی کربن کپی از همه ایمیل های ارسال شده به
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=روش استفاده برای ارسال ایمیل
    -MAIN_MAIL_SMTPS_ID=SMTP ID اگر احراز هویت مورد نیاز
    -MAIN_MAIL_SMTPS_PW=SMTP رمز عبور در صورت احراز هویت مورد نیاز
    -MAIN_MAIL_EMAIL_TLS= استفاده از TLS (SSL) رمزگذاری
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=غیر فعال کردن همه sendings SMS (برای تست و یا دموی)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=روش استفاده برای ارسال SMS
    -MAIN_MAIL_SMS_FROM=شماره تلفن پیش فرض فرستنده برای ارسال SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=این قابلیت وجود ندارد در یونیکس مانند سیستم های. تست برنامه در Sendmail خود را به صورت محلی.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=ماژول راه اندازی
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=آیا در استفاده از تولید نیست
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=مرحله٪ s را
    -FindPackageFromWebSite=پیدا کردن یک بسته است که ویژگی فراهم می کند شما می خواهید (به عنوان مثال در وب سایت رسمی٪ بازدید کنندگان).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=نسخه فعلی Dolibarr
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= تاخیر برای ذخیره پاسخ صادرات در ثانیه (0 یا خالی بدون هیچ کش)
     DisableLinkToHelpCenter=مخفی کردن لینک <b>"آیا نیازمند کمک و یا حمایت"</b> در صفحه ورود
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=هیچ بسته بندی اتوماتیک وجود دارد، بنابراین اگر خط از صفحه در اسناد به دلیل بیش از حد طولانی، شما باید خودتان بازده حمل در ناحیه ی متن اضافه کنید.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=حداقل طول
     LanguageFilesCachedIntoShmopSharedMemory=فایل های. زبان بارگذاری شده در حافظه به اشتراک گذاشته شده
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=به عنوان مثال با راه اندازی فعلی در حال اجرا
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=فهرست دایرکتوری قالب مستندات باز
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=تعداد ODT / ODS فایل های قالب که در آن دایرکتوری
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=نمونه هایی از سینتکس: <br> c: \\ mydir <br> / صفحه اصلی / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> بدانید که چگونه برای ایجاد خود را از قالب سند ODT، قبل از ذخیره سازی آنها را در آن دایرکتوری ها، به عنوان خوانده شده اسناد ویکی:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=کلیدی برای استفاده از خدمات وب
     TestSubmitForm=فرم آزمون ورودی
     ThisForceAlsoTheme=با استفاده از این مدیر منو نیز تم خاص خود را از هر چه به انتخاب کاربر می باشد. همچنین این مدیریت منو های تخصصی برای گوشی های هوشمند می کند بر روی تمام گوشی های هوشمند کار می کند نیست. استفاده از مدیریت منو یکی دیگر از صورت بروز مشکل در شما باشد.
     ThemeDir=دایرکتوری پوسته
    -ConnectionTimeout=فاصله وابستگی
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=تایم پاسخ
     SmsTestMessage=پیام تست از __ PHONEFROM__ به __ PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=کلیدی برای ایمن سازی آدرس ها
    -NoSmsEngine=بدون SMS مدیر فرستنده در دسترس است. مدیر فرستنده SMS با توزیع به طور پیش فرض نصب نشده است (به این دلیل که یک تامین کننده خارجی بستگی دارد) اما شما می توانید برخی از٪ s را پیدا
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=شما می توانید هر یک از گزینه های جهانی مربوط به نسل PDF مجموعه
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=قوانین برای ایجاد جعبه آدرس
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=پنهان کردن محصولات توضیحات در تولید PDF
     HideRefOnPDF=پنهان کردن محصولات کد عکس. در تولید PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=پارامترهای به امن آدرس
     SecurityTokenIsUnique=استفاده از یک پارامتر securekey منحصر به فرد برای هر URL
     EnterRefToBuildUrl=مرجع را برای شی از٪ s
     GetSecuredUrl=دریافت URL محاسبه
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=قدیمی نرخ مالیات بر ارزش افزوده
     NewVATRates=نرخ مالیات بر ارزش افزوده جدید
     PriceBaseTypeToChange=تغییر در قیمت با ارزش پایه مرجع تعریف شده در
    @@ -408,13 +412,13 @@ ExtrafieldSelect = لیست انتخاب کنید
     ExtrafieldSelectList = انتخاب از جدول
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=رمز عبور
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=لینک پیش فرض
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=اخطار، این مقدار ممکن است با راه اندازی خاص کاربر رونویسی (هر کاربر می تواند آدرس clicktodial خود تنظیم)
     ExternalModule=ماژول های خارجی - نصب به شاخه٪ s
    -BarcodeInitForThirdparties=init انجام بارکد جمعی برای thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=init انجام بارکد جرم یا تنظیم مجدد برای محصولات یا خدمات
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=ارزش init انجام برای٪ بعدی پرونده خالی
     EraseAllCurrentBarCode=پاک کردن همه ارزش بارکد فعلی
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=همه مقادیر بارکد حذف شده اند
    -NoBarcodeNumberingTemplateDefined=بدون قالب بارکد شماره فعال به راه اندازی ماژول بارکد.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=رشته
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=کاربران و گروه های
    +Module0Name=کاربران و گروهها
     Module0Desc=Users / Employees and Groups management
    -Module1Name=احزاب سوم
    +Module1Name=Third Parties
     Module1Desc=شرکت ها و مدیریت تماس (مشتریان، چشم انداز ...)
     Module2Name=تجاری
     Module2Desc=مدیریت بازرگانی
     Module10Name=حسابداری
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=پیشنهادات
     Module20Desc=مدیریت طرح های تجاری
     Module22Name=توده E-نامههای پستی
    @@ -511,13 +517,13 @@ Module52Desc=مدیریت انبار (محصول)
     Module53Name=خدمات
     Module53Desc=مدیریت خدمات
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=بارکد
     Module55Desc=مدیریت بارکد
     Module56Name=تلفن
     Module56Desc=یکپارچه سازی تلفن
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=کلیک برای تماس
     Module58Desc=یکپارچه سازی سیستم ClickToDial (ستاره، ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=هزینه و سفر یادداشت ها
     Module75Desc=مدیریت هزینه و سفر یادداشت ها
     Module80Name=حمل و نقل
     Module80Desc=حمل و نقل و مدیریت سفارش تحویل
    -Module85Name=بانک ها و پول نقد
    +Module85Name=Banks and Cash
     Module85Desc=مدیریت بانک و یا پول نقد حساب
    -Module100Name=سایت خارجی
    -Module100Desc=این ماژول شامل وب سایت های خارجی و یا صفحه را به منوهای Dolibarr و مشاهده آن را به یک قاب Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=پستچی و SPIP
     Module105Desc=پستچی و یا رابط SPIP برای ماژول عضو
     Module200Name=LDAP
    -Module200Desc=هماهنگ سازی دایرکتوری LDAP
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=ادغام PostNuke
     Module240Name=صادرات داده ها
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=واردات داده ها
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=کاربران
     Module310Desc=مدیریت اعضای بنیاد
     Module320Name=خوراک RSS
     Module320Desc=اضافه کردن خوراک RSS در داخل صفحات صفحه نمایش Dolibarr
    -Module330Name=بوک مارک ها
    -Module330Desc=مدیریت بوک مارک ها
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=ادغام Webcalendar
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=کمک های مالی
     Module700Desc=مدیریت کمک مالی
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=اخوندک
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=ویرایشگر WYSIWYG
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=قیمت های پویا.
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=شغل برنامه ریزی
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar در
    -Module2700Desc=استفاده از سرویس آنلاین Gravatar در (www.gravatar.com) برای نشان دادن عکس از کاربران / کاربران (که با ایمیل های خود را). نیاز به دسترسی به اینترنت
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP کارفرما
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP با Maxmind قابلیت تبدیل
     Module3100Name=اسکایپ
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=چند شرکت
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=خزانه
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=نقطه ای از فروش
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=نقطه ای از فروش
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=پی پال
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=حاشیه
     Module59000Desc=ماژول برای مدیریت حاشیه
     Module60000Name=کمیسیون ها
     Module60000Desc=ماژول برای مدیریت کمیسیون
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=منابع
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=خوانده شده فاکتورها مشتری
    @@ -651,9 +661,9 @@ Permission32=ایجاد / تغییر محصول
     Permission34=حذف محصول
     Permission36=مشاهده / مدیریت محصولات مخفی
     Permission38=محصولات صادراتی
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=حذف پروژه (پروژه مشترک و پروژه های I تماس با هستم)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=خوانده شده مداخله
     Permission62=ایجاد / تغییر مداخلات
    @@ -686,7 +696,7 @@ Permission109=حذف sendings
     Permission111=دفعات بازدید: حساب های مالی
     Permission112=ایجاد / تغییر / حذف و مقایسه معاملات
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=معاملات صادرات و اظهارات حساب کاربری
     Permission116=نقل و انتقالات بین حساب
     Permission117=مدیریت چک اعزام
    @@ -694,15 +704,15 @@ Permission121=خوانده شده اشخاص ثالث مرتبط به کاربر
     Permission122=ایجاد / تغییر اشخاص ثالث مرتبط به کاربر
     Permission125=حذف اشخاص ثالث مرتبط به کاربر
     Permission126=صادرات اشخاص ثالث
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=خوانده شده ارائه دهندگان
     Permission147=دفعات بازدید: آمار
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=نزدیک سفارشات کالا
     Permission188=لغو سفارشات کالا
     Permission192=ایجاد خطوط
     Permission193=لغو خطوط
    -Permission194=دفعات بازدید: خطوط پهنای باند
    +Permission194=Read the bandwidth lines
     Permission202=ایجاد اتصالات ADSL
     Permission203=سفارشات اتصالات منظور
     Permission204=اتصالات منظور
    @@ -750,12 +760,12 @@ Permission244=مشاهده محتویات دسته بندی های مخفی
     Permission251=خوانده شده کاربران و گروه های دیگر
     PermissionAdvanced251=خوانده شده کاربران دیگر
     Permission252=خوانده شده مجوز از کاربران دیگر
    -Permission253=ایجاد / تغییر دیگر کاربران، گروه ها و permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=ایجاد / تغییر کاربران خارجی / داخلی و مجوز
     Permission254=ایجاد / تغییر کاربران خارجی فقط
     Permission255=تغییر دیگر کاربران رمز عبور
     Permission256=حذف و یا کاربران دیگر را غیر فعال کنید
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=خوانده شده CA
     Permission272=خوانده شده فاکتورها
     Permission273=صورت حساب شماره
    @@ -765,7 +775,7 @@ Permission283=حذف اطلاعات تماس
     Permission286=تماس با صادرات
     Permission291=خوانده شده تعرفه ها
     Permission292=اجازه انتخاب در تعرفه ها
    -Permission293=تغییر مشتریان تعرفه ها
    +Permission293=Modify customers tariffs
     Permission300=دفعات بازدید: بارکد
     Permission301=ایجاد / تغییر کدهای نوار
     Permission302=حذف کدهای نوار
    @@ -787,11 +797,9 @@ Permission401=خوانده شده تخفیف
     Permission402=ایجاد / اصلاح تخفیف
     Permission403=اعتبار تخفیف
     Permission404=حذف تخفیف
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=حذف حقوق
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=حقوق صادرات
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=اجرای واردات انبوه از داده های خارج
     Permission1321=فاکتورها صادرات به مشتریان، ویژگی ها و پرداخت ها
     Permission1322=Reopen a paid bill
     Permission1421=سفارشات صادرات مشتری و ویژگی های
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=سطح بالقوه چشم انداز
     DictionaryCanton=ایالت / استان
     DictionaryRegion=مناطق
    @@ -894,7 +902,7 @@ DictionaryVAT=نرخ مالیات بر ارزش افزوده و یا فروش ن
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=شرایط پرداخت
     DictionaryPaymentModes=حالت های پرداخت
    -DictionaryTypeContact=انواع تماس / آدرس
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=فرمت مقاله
    @@ -908,47 +916,47 @@ DictionarySource=منبع از پیشنهادات / سفارشات
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=مدل برای نمودار حساب
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=الگوهای ایمیل
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=واحد
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=راه اندازی نجات داد
     SetupNotSaved=Setup not saved
     BackToModuleList=بازگشت به لیست ماژول ها
    -BackToDictionaryList=برگشت به فهرست واژه نامه ها
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=مدیریت مالیات بر ارزش افزوده
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=به طور پیش فرض مالیات بر ارزش افزوده ارائه شده است 0 که می تواند برای موارد مانند ارتباط استفاده می شود، افراد عضو جدید می توانید شرکت های کوچک است.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=نرخ
     LocalTax1IsNotUsed=آیا مالیات دوم استفاده نکنید
    -LocalTax1IsUsedDesc=استفاده از نوع دوم از مالیات (به غیر از مالیات بر ارزش افزوده)
    -LocalTax1IsNotUsedDesc=آیا نوع دیگری از مالیات (به غیر از مالیات بر ارزش افزوده) استفاده کنید
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=نوع دوم از مالیات
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=آیا مالیات سوم استفاده کنید
    -LocalTax2IsUsedDesc=استفاده از یک نوع سوم از مالیات (به غیر از مالیات بر ارزش افزوده)
    -LocalTax2IsNotUsedDesc=آیا نوع دیگری از مالیات (به غیر از مالیات بر ارزش افزوده) استفاده کنید
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=نوع سوم از مالیات
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE مدیریت
    -LocalTax1IsUsedDescES= نرخ RE به طور پیش فرض هنگام ایجاد چشم انداز، فاکتورها، سفارشات و غیره پیروی از قانون استاندارد های فعال: <br> اگر ته خریدار است قرار نیست که دوباره، RE طور پیش فرض = 0. پایان حکومت. <br> اگر خریدار است در معرض RE سپس RE به طور پیش فرض. پایان حکومت. <br>
    -LocalTax1IsNotUsedDescES= به طور پیش فرض RE پیشنهادی 0. پایان حکومت است.
    -LocalTax1IsUsedExampleES= در اسپانیا آنها حرفه ای موضوع را به برخی از بخش های خاصی از IAE اسپانیایی می باشد.
    -LocalTax1IsNotUsedExampleES= در اسپانیا آنها حرفه ای و جوامع و موضوع را به بخش های خاصی از IAE اسپانیایی می باشد.
    -LocalTax2ManagementES= مدیریت IRPF
    -LocalTax2IsUsedDescES= نرخ RE به طور پیش فرض هنگام ایجاد چشم انداز، فاکتورها، سفارشات و غیره پیروی از قانون استاندارد های فعال: <br> اگر فروشنده به IRPF به طور پیش فرض = 0 قرار نیست، پس IRPF. پایان حکومت. <br> اگر فروشنده در معرض IRPF سپس IRPF به طور پیش فرض. پایان حکومت. <br>
    -LocalTax2IsNotUsedDescES= به طور پیش فرض IRPF پیشنهاد 0. پایان حکومت است.
    -LocalTax2IsUsedExampleES= در اسپانیا، مترجمان آزاد و مستقل حرفه ای که ارائه خدمات و شرکت های که انتخاب کرده اند نظام مالیاتی از ماژول های.
    -LocalTax2IsNotUsedExampleES= در اسپانیا آنها bussines به سیستم مالیاتی از ماژول های موضوع نیست.
    +LocalTax1ManagementES=RE مدیریت
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=به طور پیش فرض RE پیشنهادی 0. پایان حکومت است.
    +LocalTax1IsUsedExampleES=در اسپانیا آنها حرفه ای موضوع را به برخی از بخش های خاصی از IAE اسپانیایی می باشد.
    +LocalTax1IsNotUsedExampleES=در اسپانیا آنها حرفه ای و جوامع و موضوع را به بخش های خاصی از IAE اسپانیایی می باشد.
    +LocalTax2ManagementES=مدیریت IRPF
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=به طور پیش فرض IRPF پیشنهاد 0. پایان حکومت است.
    +LocalTax2IsUsedExampleES=در اسپانیا، مترجمان آزاد و مستقل حرفه ای که ارائه خدمات و شرکت های که انتخاب کرده اند نظام مالیاتی از ماژول های.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=فروش - خرید
     CalcLocaltax1Desc=گزارش مالیات های محلی با تفاوت بین localtaxes فروش و localtaxes خرید محاسبه
    @@ -958,7 +966,8 @@ CalcLocaltax3=فروش
     CalcLocaltax3Desc=گزارش مالیات های محلی هستند که مجموع localtaxes فروش
     LabelUsedByDefault=برچسب استفاده می شود به طور پیش فرض اگر هیچ ترجمه ای برای کد یافت
     LabelOnDocuments=برچسب در اسناد
    -NbOfDays=Nb در روز
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=در پایان ماه
     CurrentNext=Current/Next
     Offset=افست
    @@ -984,7 +993,7 @@ DatabaseUser=کاربر پایگاه داده
     DatabasePassword=رمز عبور پایگاه داده
     Tables=جداول
     TableName=نام جدول
    -NbOfRecord=Nb و سوابق
    +NbOfRecord=No. of records
     Host=سرور
     DriverType=نوع درایور
     SummarySystem=سیستم خلاصه اطلاعات
    @@ -996,7 +1005,7 @@ Skin=تم پوست
     DefaultSkin=پیش فرض پوست
     MaxSizeList=حداکثر طول برای لیست
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=پیام روز
     MessageLogin=ارسال صفحه ورود
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=فرم جستجو دائمی در منوی سمت چپ
     DefaultLanguage=زبان پیش فرض برای استفاده از (زبان)
     EnableMultilangInterface=فعال کردن رابط کاربری چند زبانه
     EnableShowLogo=نمایش لوگو را در منوی سمت چپ
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=نام
     CompanyAddress=نشانی
     CompanyZip=زیپ
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=صاحب حساب بانکی از٪ s
     BankModuleNotActive=ماژول حساب بانکی فعال نیست
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=تصویر، موسیقی
    -DelaysOfToleranceBeforeWarning=تاخیر تحمل قبل از هشدار دهنده
    -DelaysOfToleranceDesc=این صفحه نمایش به شما اجازه تعریف تاخیر قابل تحمل قبل از یک هشدار بر روی صفحه نمایش با picto٪ برای هر یک از عناصر در اواخر گزارش شده است.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=تحمل (در روز) تاخیر قبل از آماده باش در طرح به بستن
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=تحمل (در روز) تاخیر قبل از آماده باش در طرح های ثبت شده در صورتحساب ندارد
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=تاخیر تحمل (در روز) قبل از آماده باش در خدمات را به فعال
    -Delays_MAIN_DELAY_RUNNING_SERVICES=تاخیر تحمل (در روز) قبل از هشدار در مورد خدمات منقضی شده
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=تاخیر تحمل (در روز) قبل از آماده باش در فاکتورها منبع پرداخت نشده
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence تاخیر (در روز) قبل از آماده باش در صورت حساب مشتری پرداخت نشده
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=تاخیر تحمل (در روز) قبل از آماده باش در انتظار آشتی بانکی
    -Delays_MAIN_DELAY_MEMBERS=تاخیر تحمل (در روز) قبل از آماده باش در حق عضویت به تاخیر افتاد
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=تاخیر تحمل (در روز) قبل از آماده باش برای چک سپرده به انجام
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=دیگر نوشته های منو مدیریت پارامتر اختیاری دارد.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=رویدادهای ممیزی امنیت
     Audit=ممیزی
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=شما می توانید در اینجا قادر به ورود ب
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=اطلاعات سیستم اطلاعات فنی موارد دیگر شما در حالت فقط خواندنی و قابل مشاهده فقط برای مدیران دریافت می باشد.
     SystemAreaForAdminOnly=این منطقه در دسترس است فقط برای کاربران مدیر سیستم باشد. هیچ یک از مجوز Dolibarr می تواند از این حد کاهش دهد.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=شما می توانید هر پارامتر مربوط به نگاه Dolibarr را انتخاب کنید و احساس می کنید در اینجا
     AvailableModules=Available app/modules
     ToActivateModule=برای فعال کردن ماژول ها، رفتن در منطقه راه اندازی (صفحه اصلی> راه اندازی-> ماژول).
     SessionTimeOut=وقت برای جلسه
    -SessionExplanation=این تضمین تعدادی است که در جلسه پیش از این هرگز این تاخیر منقضی خواهد شد، اگر پاک کن جلسه توسط داخلی PHP پاک کن را وارد نمایید (و هیچ چیز دیگری) انجام می شود. داخلی پاک کننده را وارد نمایید PHP می کند گارانتی نیست که جلسه درست بعد از این تاخیر به پایان می رسد. این منقضی خواهد شد، پس از این تاخیر، و هنگامی که پاک کن را وارد نمایید به این صورت اجرا می شود، بنابراین هر <b>از٪ s /٪ دسترسی</b> است، اما تنها در دسترسی ساخته شده توسط جلسات دیگر. <br> توجه: در برخی از سرویس دهنده با یک مکانیزم خارجی تمیز کردن را وارد نمایید (cron را تحت اوبونتو ...)، جلسات می تواند پس از یک دوره تعریف شده توسط <strong>session.gc_maxlifetime</strong> به طور پیش فرض از بین برده، بدون توجه به آنچه ارزش در اینجا وارد شده است.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=محرک های موجود
    -TriggersDesc=باعث فایل است که رفتار جریان کار Dolibarr یک بار به <b>htdocs</b> دایرکتوری <b>/ هسته / محرک های</b> کپی شده تغییر می باشد. آنها اقدامات جدید، فعال در حوادث Dolibarr (خلق جدید شرکت، اعتبار صورتحساب، ...) متوجه شدم.
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=راه اندازی در این فایل ها <b>توسط-NORUN</b> پسوند در نام آنها غیر فعال است.
     TriggerDisabledAsModuleDisabled=راه اندازی در این فایل ها غیر فعال هستند به عنوان <b>بخش٪ s</b> غیر فعال است.
     TriggerAlwaysActive=راه اندازی در این فایل همیشه فعال، هر آنچه که می ماژول های Dolibarr فعال می شود.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=محدوده / راه اندازی دقیق
    -LimitsDesc=شما می توانید محدودیت، دقت و بهینه سازی استفاده شده توسط Dolibarr در اینجا تعریف
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=حداکثر اعشار برای قیمت واحد
     MAIN_MAX_DECIMALS_TOT=حداکثر اعشار برای کل قیمت
     MAIN_MAX_DECIMALS_SHOWN=حداکثر اعشار برای قیمت نشان داده شده بر روی صفحه نمایش (اضافه کردن <b>...</b> بعد از این شماره اگر شما می خواهید برای دیدن <b>...</b> وقتی که تعداد ناقص است که بر روی صفحه نمایش نشان داده شده است)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=قیمت واحد خالص محصول
     TotalPriceAfterRounding=قیمت کل (خالص مالیاتی / مالیات بر ارزش افزوده / نرم) پس از گرد کردن
     ParameterActiveForNextInputOnly=پارامتر برای ورودی بعدی موثر تنها
     NoEventOrNoAuditSetup=هیچ رویداد امنیتی ثبت نشده است. این می تواند طبیعی اگر ممیزی شده است در "راه اندازی - امنیتی - حسابرسی" فعال نیست صفحه.
    -NoEventFoundWithCriteria=هیچ رویداد امنیتی شده است برای چنین معیارهای جستجو در بر داشت.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=مشاهده راه اندازی از sendmail محلی خود
     BackupDesc=برای ایجاد یک پشتیبان کامل از Dolibarr، شما باید:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=دایرکتوری آرشیو شده باید در یک مکان امن ذخیره می شود.
     BackupDescY=فایل روگرفت تولید باید در یک مکان امن ذخیره می شود.
    -BackupPHPWarning=پشتیبان گیری می توانید با این روش نمی توان guaranted. ترجیح می دهند قبل
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=برای بازگرداندن یک نسخه پشتیبان تهیه Dolibarr، شما باید:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=واردات خروجی زیر
     ForcedToByAModule= این قانون توسط یک ماژول فعال <b>به٪ s</b> اجباری
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=شما باید این دستو
     YourPHPDoesNotHaveSSLSupport=توابع SSL در PHP شما موجود نیست
     DownloadMoreSkins=پوسته های بیشتر برای دانلود
     SimpleNumRefModelDesc=بازگرداندن شماره مرجع با فرمت٪ syymm-NNNN که در آن YY سال است، میلی متر در ماه است و NNNN دنباله بدون سوراخ و بدون تنظیم مجدد است
    -ShowProfIdInAddress=نمایش شناسه professionnal با آدرس در اسناد
    -ShowVATIntaInAddress=مخفی کردن مالیات بر ارزش افزوده تعداد داخل با آدرس در اسناد
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=ترجمه جزئی
    -MAIN_DISABLE_METEO=غیر فعال کردن دیدگاه هواشناسی
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=ورود به سیستم تست به API
    -ProxyDesc=برخی از ویژگی های Dolibarr نیاز به دسترسی به اینترنت به کار می کنند. تعریف در اینجا پارامتر ها را برای این. اگر سرور Dolibarr است در پشت یک پروکسی سرور، این پارامترها Dolibarr می گوید که چگونه برای دسترسی به اینترنت از طریق آن.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=دسترسی خارجی
     MAIN_PROXY_USE=استفاده از یک پروکسی سرور (دسترسی در غیر این صورت مستقیم به اینترنت)
     MAIN_PROXY_HOST=نام / آدرس پروکسی سرور
     MAIN_PROXY_PORT=بندر از پروکسی سرور
     MAIN_PROXY_USER=ورود به استفاده از پروکسی سرور
     MAIN_PROXY_PASS=رمز عبور به استفاده از پروکسی سرور
    -DefineHereComplementaryAttributes=تعریف در اینجا تمام صفات، در حال حاضر به طور پیش فرض در دسترس نیست، و این که شما می خواهید برای٪ s پشتیبانی می شود.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=ویژگی های مکمل
     ExtraFieldsLines=ویژگی های مکمل (خط)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=ویژگی های مکمل (thirdparty)
    -ExtraFieldsContacts=ویژگی های مکمل (تماس / آدرس)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=ویژگی های مکمل (عضو)
     ExtraFieldsMemberType=ویژگی های مکمل (نوع عضو)
     ExtraFieldsCustomerInvoices=ویژگی های مکمل (فاکتورها)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=فقط alphanumericals و شخصیت های ح
     SendmailOptionNotComplete=اخطار، در برخی از سیستم های لینوکس، برای ارسال ایمیل از ایمیل شما، از sendmail باید راه اندازی حکم اعدام گزینه-BA (mail.force_extra_parameters پارامتر به یک فایل php.ini خود را). اگر برخی از دریافت کنندگان هرگز ایمیل های دریافت، سعی کنید به ویرایش این پارامتر PHP با mail.force_extra_parameters =-BA).
     PathToDocuments=مسیر اسناد
     PathDirectory=دایرکتوری
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=شما باید حداقل قادر می سازد 1 ماژول
    -ClassNotFoundIntoPathWarning=کلاس٪ s ​​را به مسیر PHP یافت نشد
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=بله در فصل تابستان
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=ذخیره سازی جلسه رمز شده توسط Suhosin
     ConditionIsCurrently=وضعیت در حال حاضر از٪ s
    -YouUseBestDriver=شما با استفاده از راننده٪ است که بهترین راننده های موجود در حال حاضر.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=شما فقط٪ محصولات / خدمات را به پایگاه داده باشد. این به این مورد نیاز هر بهینه سازی خاص است.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=بهینه سازی جستجو
    -YouHaveXProductUseSearchOptim=شما محصول٪ s را به پایگاه داده باشد. شما باید PRODUCT_DONOTSEARCH_ANYWHERE ثابت تا 1 را به خانه، راه اندازی، دیگر اضافه کنید، شما جستجو را محدود به ابتدای رشته های ساخت ممکن است برای پایگاه داده برای استفاده از شاخص و شما باید پاسخ فوری دریافت کنید.
    -BrowserIsOK=شما با استفاده از مرورگر وب از٪ s. این مرورگر خوب برای امنیت و عملکرد است.
    -BrowserIsKO=شما با استفاده از مرورگر وب از٪ s. این مرورگر شناخته شده است به یک انتخاب بد برای امنیت، عملکرد و قابلیت اطمینان. ما recommand شما را به استفاده از فایرفاکس، کروم، اپرا و یا سافاری.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug بارگذاری شده است.
     XCacheInstalled=XCache بارگذاری شده است.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=نسخه فیلد٪ s
     FillThisOnlyIfRequired=به عنوان مثال: +2 (را پر کنید فقط اگر منطقه زمانی جبران مشکلات با تجربه هستند)
     GetBarCode=دریافت بارکد
     ##### Module password generation
     PasswordGenerationStandard=بازگشت یک کلمه عبور تولید شده با توجه به الگوریتم Dolibarr داخلی: 8 کاراکتر شامل اعداد مشترک و شخصیت در حروف کوچک.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=ایمیل مورد نیاز برای ایجاد یک کارب
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=راه اندازی ماژول شرکت
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=اسناد قالب
    -DocumentModelOdt=تولید اسناد از OpenDocuments قالب (. ODT و یا فایل های ODS برای آفیس اپن سورس کنند، KOffice، TextEdit، ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=تعیین میزان مد آب در پیش نویس سند
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=قوانین در حرفه شناسه
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=لینک صادرات به <b>فرمت٪ s</b> در لینک زیر موجود است:٪ s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=لینک صادرات به <b>فرمت٪ s</b> در لی
     BillsSetup=راه اندازی ماژول فاکتورها
     BillsNumberingModule=فاکتورها و یادداشت های اعتباری مدل شماره
     BillsPDFModules=اسناد فاکتور مدل
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=توجه داشته باشید اعتباری
     CreditNotes=یادداشت های اعتباری
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= مدیریت ورود برای هر عضو
     AdherentMailRequired=ایمیل مورد نیاز برای ایجاد یک عضو جدید
     MemberSendInformationByMailByDefault=جعبه برای ارسال از تایید پست الکترونیکی به کاربران (اعتبار سنجی و یا اشتراک جدید) است به صورت پیش فرض
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP راه اندازی
     LDAPGlobalParameters=پارامترهای جهانی
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= تست یک جستجوی LDAP
     LDAPSynchroOK=آزمون موفقیت آمیز هماهنگ سازی
     LDAPSynchroKO=آزمون هماهنگ سازی ناموفق
    -LDAPSynchroKOMayBePermissions=آزمون هماهنگ سازی شکست خورده است. بررسی کنید که اتصال به سرور به درستی پیکربندی شده و اجازه می دهد تا udpates LDAP
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP اتصال به سرور LDAP موفق (سرور =٪ S، بندر =٪ بازدید کنندگان)
     LDAPTCPConnectKO=TCP اتصال به سرور LDAP شکست خورده (سرور =٪ S، بندر =٪ بازدید کنندگان)
    -LDAPBindOK=به سرور LDAP اتصال / Authentificate موفق (سرور =٪ S، بندر =٪ S، مدیر =٪ ثانیه، رمز عبور =٪ بازدید کنندگان)
    -LDAPBindKO=به سرور LDAP اتصال / Authentificate شکست خورده (سرور =٪ S، بندر =٪ S، مدیر =٪ ثانیه، رمز عبور =٪ بازدید کنندگان)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=سرور LDAP پیکربندی از نسخه 3
     LDAPSetupForVersion2=سرور LDAP پیکربندی شده برای نسخه 2
     LDAPDolibarrMapping=نقشه برداری Dolibarr
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=ورود (سامبا، با Active Directory)
     LDAPFieldLoginSambaExample=به عنوان مثال: samaccountname
     LDAPFieldFullname=نام و نام خانوادگی
     LDAPFieldFullnameExample=به عنوان مثال: را انتخاب نمایید:
    -LDAPFieldPasswordNotCrypted=رمز عبور crypted نمی
    -LDAPFieldPasswordCrypted=رمز عبور crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=به عنوان مثال: userPassword
     LDAPFieldCommonNameExample=به عنوان مثال: را انتخاب نمایید:
     LDAPFieldName=نام
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=ارزش به عنوان مثال برای <b>OpenLDAP</b> با زیر طرحواره لود طراحی: <b>core.schema، cosine.schema، inetorgperson.schema).</b> اگر شما استفاده از thoose ارزش ها و OpenLDAP، تغییر پیکربندی LDAP فایل <b>slapd.conf</b> خود را به تمام طرحواره thoose لود می شود.
     ForANonAnonymousAccess=برای دسترسی تصدیق (برای دسترسی به عنوان مثال)
     PerfDolibarr=گزارش راه اندازی عملکرد / بهینه سازی
    -YouMayFindPerfAdviceHere=شما در این صفحه برخی از چک و یا توصیه های مربوط به عملکرد پیدا کنید.
    -NotInstalled=نصب نشده است، به طوری که سرور شما توسط این نمی کند.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=کش کاربردی
     MemcachedNotAvailable=بدون کش عملی در بر داشت. شما می توانید عملکرد با نصب کش Memcached سرور و ماژول قادر به استفاده از این کش سرور را بالا ببرد. <br> اطلاعات بیشتر در اینجا <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a> . <br> توجه داشته باشید که بسیاری از ارائه دهنده خدمات میزبانی وب چنین کش سرور ارائه نمی دهد.
     MemcachedModuleAvailableButNotSetup=ماژول memcached برای ذخیره سازی عملی در بر داشت اما راه اندازی ماژول کامل نیست.
     MemcachedAvailableAndSetup=memcached ماژول اختصاص داده شده به استفاده از سرور memcached را فعال کنید.
     OPCodeCache=کش شناسنده
    -NoOPCodeCacheFound=بدون کش شناسنده یافت. ممکن است شما با استفاده از یکی دیگر از کش شناسنده از XCache یا eAccelerator (خوب)، ممکن است شما کش شناسنده (خیلی بد) ندارد.
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=کش HTTP برای منابع استاتیک (css، img، جاوا اسکریپت)
     FilesOfTypeCached=فایل های از نوع٪ s را با HTTP سرور ذخیره سازی
     FilesOfTypeNotCached=فایل های از نوع٪ s را با HTTP سرور کش نشده
     FilesOfTypeCompressed=فایل های از نوع٪ s را با HTTP سرور فشرده
     FilesOfTypeNotCompressed=فایل های از نوع٪ s را با HTTP سرور فشرده نیست
     CacheByServer=کش سرور
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=کش شده توسط مرورگر
     CompressionOfResources=فشرده سازی از پاسخهای HTTP
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=راه اندازی ماژول محصولات
     ServiceSetup=راه اندازی خدمات ماژول
     ProductServiceSetup=راه اندازی محصولات و خدمات ماژول ها
     NumberOfProductShowInSelect=تعداد حداکثر از محصولات در combos را از لیست انتخاب کنید (0 = بدون محدودیت)
    -ViewProductDescInFormAbility=تجسم از توصیف محصول در اشکال (در غیر این صورت به عنوان دوست پنجره)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=همچنین اگر شما تعداد زیادی از محصول (> 100 000)، شما می توانید سرعت با تنظیم PRODUCT_DONOTSEARCH_ANYWHERE ثابت به 1 در راه اندازی-> دیگر افزایش دهد. جست و جو خواهد شد و سپس محدود به شروع از رشته است.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=فرض نوع بارکد استفاده برای محصولات
     SetDefaultBarcodeTypeThirdParties=فرض نوع بارکد استفاده برای اشخاص ثالث
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=در حال ارسال راه اندازی ماژول
     SendingsReceiptModel=ارسال مدل رسید
     SendingsNumberingModules=Sendings تعداد ماژول ها
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=محصولات تحویل رسید ماژول شماره
    @@ -1515,18 +1528,18 @@ AdvancedEditor=ویرایشگر پیشرفته
     ActivateFCKeditor=فعال کردن ویرایشگر پیشرفته برای:
     FCKeditorForCompany=ایجاد WYSIWIG / نسخه عناصر توضیحات و توجه داشته باشید (به جز محصولات / خدمات)
     FCKeditorForProduct=ایجاد WYSIWIG / نسخه از محصولات / خدمات شرح و توجه داشته باشید
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= ایجاد WYSIWIG / نسخه برای eMailings جرم (ابزار> ایمیل)
     FCKeditorForUserSignature=ایجاد WYSIWIG / نسخه از امضای کاربر
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=اتصال موفق پایگاه داده اما به نظر نمی آید که یک پایگاه داده آهنگ تولد (٪ بازدید کنندگان کلیدی در جدول٪ s را یافت نشد).
    -OSCommerceTestOk=اتصال به سرور '٪ s' را در پایگاه داده '٪ s' را با کاربر '٪ s' موفق.
    -OSCommerceTestKo1=اتصال به کارگزار «٪ s 'موفق اما پایگاه داده'٪ s 'را نمی تواند رسید.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=اتصال به سرور '٪ s' را در پایگاه داده '٪ s' را با کاربر '٪ s' موفقیت آمیز.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=اتصال به کارگزار «٪ s 'با کاربر'٪ s 'شکست خورده است.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=منوی حذف
     Menus=منوها
    @@ -1548,7 +1561,7 @@ DetailRight=وضعیت برای نمایش منوها خاکستری غیر مج
     DetailLangs=نام فایل زبان برای ترجمه کد برچسب
     DetailUser=کارورز / خارج / همه
     Target=هدف
    -DetailTarget=هدف در پیوندهای (_blank بالا باز کردن یک پنجره جدید)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=سطح (-1: منوی بالای صفحه، 0: منو هدر،> 0 منو و زیر منو)
     ModifMenu=تغییر منو
     DeleteMenu=حذف ورود به منو
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=مالیات بر ارزش افزوده است به دلی
     OptionVatDebitOptionDesc=مالیات بر ارزش افزوده است به دلیل: <br> - تحویل کالا (ما استفاده از تاریخ فاکتور) <br> - در فاکتور (بدهی) برای خدمات
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=زمان exigibility مالیات بر ارزش افزوده به طور پیش فرض با توجه به گزینه انتخاب شده:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=در هنگام تحویل
     OnPayment=در پرداخت
     OnInvoice=در هنگام قبض
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=خرید حساب. رمز
     AgendaSetup=رویدادها و برنامه راه اندازی ماژول
     PasswordTogetVCalExport=کلیدی به اجازه لینک صادرات
     PastDelayVCalExport=آیا رویداد صادرات و نه بزرگتر از
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=تنظیم به صورت خودکار این نوع از رویداد را به فیلتر جستجو از نظر دستور کار
    -AGENDA_DEFAULT_FILTER_STATUS=تنظیم به صورت خودکار این وضعیت رویدادی به فیلتر جستجو از نظر دستور کار
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=کدام زبانه می خواهید برای باز کردن به طور پیش فرض هنگام انتخاب دستور کار منو
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=کلیک کنید تا شماره گیری راه اندازی ماژول
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=نقطه ای از فروش
     CashDeskSetup=نقطه ای از راه اندازی ماژول فروش
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=پیش فرض حساب استفاده برای دریافت پرداخت های نقدی
     CashDeskBankAccountForCheque= پیش فرض حساب استفاده برای دریافت پرداخت توسط چک
     CashDeskBankAccountForCB= پیش فرض حساب استفاده برای دریافت پرداخت توسط کارت های اعتباری
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=راه اندازی ماژول چوب الف
    -BookmarkDesc=این ماژول به شما اجازه مدیریت بوک مارک ها. شما همچنین می توانید کلید های میانبر برای هر صفحه Dolibarr و یا وب سایت های externale در منوی سمت چپ خود را اضافه کنید.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=بیشترین تعداد بوک مارک های به نمایش در منو سمت چپ
     ##### WebServices #####
     WebServicesSetup=راه اندازی ماژول Webservices
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=چند شرکت نصب ماژول
     ##### Suppliers #####
     SuppliersSetup=تامین کننده راه اندازی ماژول
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=فاکتورها تامین کننده شماره مدل
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=راه اندازی ماژول پروژه
     ProjectsModelModule=گزارش پروژه مدل سند
     TasksNumberingModules=ماژول وظایف شماره
     TaskModelModule=گزارش کارهای سند مدل
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=ثابت منطقه زمانی
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/fa_IR/companies.lang b/htdocs/langs/fa_IR/companies.lang
    index e5c540124da..abcf66f09fd 100644
    --- a/htdocs/langs/fa_IR/companies.lang
    +++ b/htdocs/langs/fa_IR/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=انتخاب شخص ثالث
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=حذف یک تماس / آدرس
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=شخص ثالث جدید
    -MenuNewCustomer=مشتری جدید
    -MenuNewProspect=چشم انداز جدید
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=فردی خصوصی جدید
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=شخص ثالث تماس با ما / آدرس
     Company=شرکت
     CompanyName=نام شرکت
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=شرکت
    -CountryIsInEEC=کشور است در داخل جامعه اقتصادی اروپا
    -ThirdPartyName=نام و نام خانوادگی شخص ثالث
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=شخص ثالث
    -ThirdParties=احزاب سوم
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=چشم انداز
     ThirdPartyProspectsStats=چشم انداز
     ThirdPartyCustomers=مشتریان
     ThirdPartyCustomersStats=مشتریان
     ThirdPartyCustomersWithIdProf12=مشتریان با٪ s یا٪ s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=نوع شخص ثالث
    +ThirdPartyType=Type of company
     Individual=فردی خصوصی
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=شرکت مادر
     Subsidiaries=شرکتهای تابعه
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=کد پستی
     Town=شهرستان
     Web=وب سایت
     Poste= درجه
    -DefaultLang=زبان پیش فرض
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=پیشنهادات
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=نحو معتبر است
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=این مشتری است تخفیف به طور پی
     CompanyHasNoRelativeDiscount=این مشتری ندارد تخفیف نسبی به طور پیش فرض
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=این مشتری هنوز یادداشت های اعتباری <b>برای٪ s٪</b> s را
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=هیچ یک
    -Supplier=تامین کننده
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=ویرایش مخاطب
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=حذف یک شرکت
     PersonalInformations=اطلاعات شخصی
     AccountancyCode=حساب حسابداری
    -CustomerCode=کد مشتری
    -SupplierCode=Vendor code
    -CustomerCodeShort=کد مشتری
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=کد مشتری، منحصر به فرد برای همه مشتریان
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=در صورتیکه شخص ثالث یک مشتری و یا چشم انداز است
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=اعتبار کنترل های ماژول
    -ThisIsModuleRules=این قوانین برای این ماژول است
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=چشم انداز تماس
     CompanyDeleted=شرکت "٪ s" را حذف از پایگاه داده.
     ListOfContacts=لیست مخاطبین / آدرس
     ListOfContactsAddresses=لیست مخاطبین / آدرس
    -ListOfThirdParties=فهرست اشخاص ثالث
    -ShowCompany=Show third party
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=نمایش تماس
     ContactsAllShort=همه (بدون فیلتر)
     ContactType=تماس با نوع
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=این تماس یک تماس برای هر پیشنها
     NoContactForAnyContract=این تماس یک تماس برای هر قرارداد
     NoContactForAnyInvoice=این تماس یک تماس برای هر فاکتور نمی
     NewContact=تماس جدید
    -NewContactAddress=تماس جدید / آدرس
    +NewContactAddress=New Contact/Address
     MyContacts=مخاطبین من
     Capital=سرمایه
     CapitalOf=سرمایه از٪ s
     EditCompany=ویرایش شرکت
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=تصفیه
    -VATIntraCheckDesc=لینک <b>از٪ s</b> اجازه می دهد تا به درخواست سرویس جستجوگر مالیات بر ارزش افزوده اروپا. دسترسی به اینترنت خارجی را از سرور مورد نیاز است برای این سرویس به کار می کنند.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=ورود به Intracomunnautary مالیات بر ارزش افزوده در سایت کمیسیون اروپا
    -VATIntraManualCheck=شما همچنین می توانید به صورت دستی از اروپا وب سایت بررسی <a href="%s" target="_blank">از٪ s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=ورود امکان پذیر نیست. خدمات تصفیه توسط دولت عضو (٪ بازدید کنندگان) ارائه نشده است.
    -NorProspectNorCustomer=و نه چشم انداز، و نه مشتری
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=کارکنان
     ProspectLevelShort=پتانسیل
     ProspectLevel=بالقوه چشم انداز
    @@ -387,12 +387,12 @@ ExportCardToFormat=کارت صادرات به فرمت
     ContactNotLinkedToCompany=تماس با به هر شخص ثالث مرتبط نیست
     DolibarrLogin=ورود Dolibarr
     NoDolibarrAccess=بدون دسترسی Dolibarr
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=اطلاعات تماس و خواص
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=سطح قیمت
     DeliveryAddress=آدرس تحویل
     AddAddress=اضافه کردن آدرس
    @@ -402,16 +402,16 @@ DeleteFile=حذف فایل
     ConfirmDeleteFile=آیا مطمئن هستید که می خواهید این فایل را حذف کنید؟
     AllocateCommercial=Assigned to sales representative
     Organization=سازمان
    -FiscalYearInformation=اطلاعات در سال مالی
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=شروع ماه از سال مالی
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=فهرست چشم انداز
    -ListCustomersShort=فهرست مشتریان
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=مجموع اشخاص ثالث منحصر به فرد
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=باز
     ActivityCeased=بسته
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=لایحه برجسته کنونی
     OutstandingBill=حداکثر. برای لایحه برجسته
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=کد آزاد است. این کد را می توان در هر زمان تغییر یافتهاست.
     ManagingDirectors=مدیر (بازدید کنندگان) نام (مدیر عامل شرکت، مدیر، رئيس جمهور ...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/fa_IR/errors.lang b/htdocs/langs/fa_IR/errors.lang
    index 89754d79012..a17be7c6b37 100644
    --- a/htdocs/langs/fa_IR/errors.lang
    +++ b/htdocs/langs/fa_IR/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=مقدار «٪ s 'است قالب تاریخ اشتباه
     ErrorWrongDate=تاریخ صحیح نمی باشد!
     ErrorFailedToWriteInDir=برای نوشتن در پوشه٪ s شکست خورد
     ErrorFoundBadEmailInFile=یافت نحو ایمیل نادرست برای٪ s خط در فایل (به عنوان مثال خط٪ با ایمیل =٪ بازدید کنندگان)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=برخی از زمینه های مورد نیاز است نه شد.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=برای ایجاد یک دایرکتوری شکست خورده است. بررسی کنید که کاربر وب سرور دارای مجوز به ارسال به Dolibarr دایرکتوری اسناد. اگر <b>safe_mode</b> پارامتر در این PHP را فعال کنید، بررسی کنید که فایل های پی اچ پی Dolibarr صاحب به کاربر وب سرور (یا گروه).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=لطفا ارزش برای انتخاب لیست را
     ErrorNoValueForCheckBoxType=لطفا ارزش برای استخراج را پر کنید
     ErrorNoValueForRadioType=لطفا ارزش برای فهرست های رادیویی را پر کنید
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=<b>٪</b> درست <b>ها</b> باید شامل کاراکترهای خاص نیست.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=بدون ماژول حسابداری فعال
     ErrorExportDuplicateProfil=این نام مشخصات در حال حاضر برای این مجموعه صادرات وجود دارد.
     ErrorLDAPSetupNotComplete=تطبیق Dolibarr-LDAP کامل نیست.
     ErrorLDAPMakeManualTest=فایل LDIF. شده است در شاخه٪ s تولید می شود. سعی کنید به آن بار دستی از خط فرمان به کسب اطلاعات بیشتر در مورد خطا است.
    -ErrorCantSaveADoneUserWithZeroPercentage=آیا می توانم اقدام با "statut آغاز شده است" اگر درست "انجام شده توسط" نیز پر را نجات دهد.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=کد عکس مورد استفاده برای ایجاد وجود دارد.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=می توانید ضبط را حذف کنید. این است که در حال حاضر به شی دیگر استفاده می شود و یا گنجانده شده است.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=جاوا اسکریپت نمی باید غیر فعال شود که این ویژگی کار. برای فعال کردن / غیر فعال کردن جاوا اسکریپت، رفتن به منو صفحه اصلی> راه اندازی> نمایش.
     ErrorPasswordsMustMatch=هر دو کلمه عبور تایپ شده باید با یکدیگر مطابقت
    -ErrorContactEMail=یک خطای فنی رخ داد. لطفا، با مدیر سایت تماس به زیر ایمیل <b>از٪ s</b> EN ارائه کد <b>خطا٪ s</b> در پیام خود، و یا حتی بهتر با اضافه کردن یک کپی روی صفحه نمایش از این صفحه.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=ارزش اشتباه برای تعداد <b>فیلد٪ s</b> (مقدار <b>«٪ s» به</b> عبارت منظم حکومت <b>از٪ s</b> مطابقت ندارد)
     ErrorFieldValueNotIn=ارزش اشتباه برای تعداد <b>فیلد٪ s</b> (مقدار <b>«٪ s»</b> است مقدار موجود در <b>فیلد٪ s را</b> از <b>جدول٪ نیست)</b>
     ErrorFieldRefNotIn=ارزش اشتباه برای تعداد <b>فیلد٪ s</b> (مقدار <b>«٪ s»</b> است <b>از٪ s</b> کد عکس موجود نیست)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=برنامه آنتی ویروس قادر به ا
     ErrorSpecialCharNotAllowedForField=شخصیت های ویژه برای رشته "٪ s" مجاز نیست
     ErrorNumRefModel=مرجع به پایگاه داده وجود دارد (٪ s) و سازگار با این قانون شماره نیست. حذف رکورد و یا مرجع تغییر نام داد و به این ماژول را فعال کنید.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=خطا در ماسک
     ErrorBadMaskFailedToLocatePosOfSequence=خطا، ماسک بدون شماره ترتیب
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=خطا، مقدار تنظیم مجدد بد
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=خطا. حداقل یک ورودی را انتخاب کنید.
    -ErrorDeleteNotPossibleLineIsConsolidated=حذف ممکن نیست چون رکورد به یک transation بانکی است که با آشتی خاتمه نیافت مرتبط
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=٪ s را به یک سوم دیگر اختصاص داده
     ErrorFailedToSendPassword=برای ارسال رمز عبور ناموفق
     ErrorFailedToLoadRSSFile=نتواند به دریافت خوراک RSS. سعی کنید برای اضافه کردن MAIN_SIMPLEXMLLOAD_DEBUG ثابت اگر پیغام خطا می کند اطلاعات کافی را فراهم نمی کند.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=کاربر با ورود <b>به٪ s را</b> می تو
     ErrorLoginHasNoEmail=این کاربر هیچ آدرس ایمیل. فرآیند سقط شده.
     ErrorBadValueForCode=ارزش بد برای کد امنیتی. دوباره سعی کنید با ارزش جدید ...
     ErrorBothFieldCantBeNegative=زمینه های٪ s و٪ s نمی تواند هر دو منفی
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=حساب <b>کاربری٪ s را</b> برای اجرای وب سرور بدون اجازه که
     ErrorNoActivatedBarcode=بدون بارکد از نوع فعال
    @@ -138,7 +141,7 @@ ErrorBadFormat=فرمت بد!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=خطا، برخی از زایمان مرتبط با این حمل و نقل وجود دارد. حذف خودداری کرد.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=چوب الف با این عنوان و یا این
     WarningPassIsEmpty=هشدار، رمز عبور پایگاه داده خالی است. این یک حفره امنیتی است. شما باید یک رمز عبور را به پایگاه داده خود اضافه کنید و تغییر فایل conf.php خود را به منعکس کننده این.
     WarningConfFileMustBeReadOnly=اخطار، فایل پیکربندی خود را <b>(htdocs / کنفرانس / conf.php)</b> می تواند توسط وب سرور رونویسی. این یک حفره امنیتی جدی است. تغییر مجوز فایل را در حالت فقط خواندنی است برای کاربر سیستم عامل های استفاده شده توسط وب سرور. در صورت استفاده از ویندوز و FAT فرمت برای هارد دیسک شما، شما باید بدانید که این فایل سیستم اجازه نمی دهد برای اضافه کردن مجوز در فایل، بنابراین نمی تواند به طور کامل امن است.
     WarningsOnXLines=اخطار <b>در٪ s را</b> ثبت منبع (ها)
    -WarningNoDocumentModelActivated=بدون مدل، برای تولید سند، فعال شده است. یک مدل خواهد شد به طور پیش فرض انتخاب تا زمانی که شما راه اندازی ماژول خود را چک کنید.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=اخطار، یک بار نصب به پایان رسید، شما باید با اضافه کردن یک <b>install.lock</b> فایل به <b>شاخه٪ s</b> غیر فعال کردن نصب / مهاجرت ابزار. گمشده این فایل یک حفره امنیتی است.
    -WarningUntilDirRemoved=تمام هشدارهای امنیتی (قابل مشاهده توسط کاربران مدیر تنها) خواهد فعال تا زمانی که آسیب پذیری وجود داشته باشد باقی می ماند (و یا که MAIN_REMOVE_INSTALL_WARNING ثابت است در راه اندازی-> دیگر تنظیمات اضافه شده است).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=هشدار، بسته شدن انجام می شود حتی اگر مقدار بین منبع و مقصد عناصر متفاوت است. فعال کردن این ویژگی با احتیاط.
     WarningUsingThisBoxSlowDown=اخطار، با استفاده از این جعبه کاهش سرعت به طور جدی تمام صفحات نشان دادن جعبه.
     WarningClickToDialUserSetupNotComplete=راه اندازی از اطلاعات ClickToDial برای کاربر شما کامل نیست (ClickToDial زبانه دیدن بر روی کارت کاربر خود را).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/fa_IR/interventions.lang b/htdocs/langs/fa_IR/interventions.lang
    index 2d331676a61..f9b902d1c89 100644
    --- a/htdocs/langs/fa_IR/interventions.lang
    +++ b/htdocs/langs/fa_IR/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=مداخلات
     InterventionCard=کارت مداخله
     NewIntervention=مداخله های جدید
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=فهرست مداخلات
     ActionsOnFicheInter=عملیات مداخله
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/fa_IR/main.lang b/htdocs/langs/fa_IR/main.lang
    index 3982487d683..83a9c5bae79 100644
    --- a/htdocs/langs/fa_IR/main.lang
    +++ b/htdocs/langs/fa_IR/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=برای ارسال ایمیل (فرستنده =٪ S، گ
     ErrorFileNotUploaded=فایل آپلود نشد. بررسی کنید که اندازه حداکثر مجاز تجاوز نمی کند، که فضای خالی موجود بر روی دیسک است و در حال حاضر وجود دارد یک فایل با همین نام در این شاخه.
     ErrorInternalErrorDetected=خطا در شناسایی
     ErrorWrongHostParameter=پارامتر میزبان اشتباه است
    -ErrorYourCountryIsNotDefined=کشور شما تعریف نشده است. برو به خانه، راه اندازی، ویرایش و ارسال دوباره فرم.
    -ErrorRecordIsUsedByChild=این رکورد را حذف کنید شکست خورده است. این رکورد توسط حداقل یک پرونده کودک استفاده می شود.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=ارزش اشتباه است
     ErrorWrongValueForParameterX=ارزش اشتباه برای پارامتر از٪ s
     ErrorNoRequestInError=بدون درخواست در خطا
    -ErrorServiceUnavailableTryLater=خدمات برای لحظه ای در دسترس نیست. بعدا دوباره سعی کنید.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=مقدار تکراری در یک فیلد منحصر به فرد
    -ErrorSomeErrorWereFoundRollbackIsDone=برخی از خطاهای یافت شد. ما عقبگرد تغییرات.
    -ErrorConfigParameterNotDefined=<b>پارامتر٪ s</b> در داخل Dolibarr فایل پیکربندی <b>conf.php</b> تعریف نشده است.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=برای پیدا کردن <b>کاربر٪ s در</b> پایگاه داده Dolibarr شکست خورده است.
     ErrorNoVATRateDefinedForSellerCountry=خطا، هیچ نرخ مالیات بر ارزش افزوده تعریف شده برای این کشور شد '٪ s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=خطا، موفق به صرفه جویی در فایل.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=تاریخ تنظیم
     SelectDate=یک تاریخ را انتخاب کنید
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=فایل با موفقیت آپلود شد
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=فایل برای پیوست انتخاب شده، اما هنوز ارسال نشده. بر روی "فایل ضمیمه" برای این کلیک کنید.
    -NbOfEntries=Nb و از نوشته
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=خوانده شده راهنما
     RecordSaved=رکورد ذخیره شده
    @@ -94,7 +94,7 @@ Undefined=تعریف نشده
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=در بالا مشاهده کنید
    -HomeArea=منطقه خانه
    +HomeArea=خانه
     LastConnexion=Latest connection
     PreviousConnexion=ارتباط قبلی
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=بسته
     Closed2=بسته
     NotClosed=Not closed
     Enabled=فعال بودن
    +Enable=قادر ساختن
     Deprecated=توصیه
     Disable=از کار انداختن
     Disabled=غیر فعال
    @@ -153,7 +154,7 @@ Update=به روز رسانی
     Close=نزدیک
     CloseBox=Remove widget from your dashboard
     Confirm=تکرار
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=حذف کردن
     Remove=برداشتن
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=نسخه
     Paste=خمیر
     Default=پیش فرض
     DefaultValue=ارزش قرار دادی
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=قیمت
     PriceCurrency=Price (currency)
     UnitPrice=قیمت واحد
    @@ -347,7 +348,7 @@ AmountTTCShort=مقدار (مالیات شرکت)
     AmountHT=مقدار (خالص از مالیات)
     AmountTTC=مقدار (مالیات شرکت)
     AmountVAT=مالیات بر مقدار
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=قابل اجرا نیست
     ActionRunningNotStarted=برای شروع
     ActionRunningShort=In progress
     ActionDoneShort=در دست اجرا
    -ActionUncomplete=ناقص
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=تولید
     Duration=مدت
     TotalDuration=مدت زمان کل
     Summary=خلاصه
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=در دسترس
     NotYetAvailable=هنوز در دسترس نیست
    @@ -468,7 +469,7 @@ and=و
     or=یا
     Other=دیگر
     Others=دیگران
    -OtherInformations=سایر اطلاعات
    +OtherInformations=Other information
     Quantity=مقدار
     Qty=تعداد
     ChangedBy=تغییر توسط
    @@ -506,7 +507,7 @@ None=هیچ یک
     NoneF=هیچ یک
     NoneOrSeveral=None or several
     Late=دیر
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=تصویر
     Photos=تصاویر
    @@ -530,18 +531,6 @@ September=سپتامبر
     October=اکتبر
     November=نوامبر
     December=دسامبر
    -JanuaryMin=ژان
    -FebruaryMin=فوریه
    -MarchMin=ضایع کردن
    -AprilMin=آوریل
    -MayMin=مه
    -JuneMin=ژوئن
    -JulyMin=ژوئیه
    -AugustMin=اوت
    -SeptemberMin=سپتامبر
    -OctoberMin=اکتبر
    -NovemberMin=نوامبر
    -DecemberMin=دسامبر
     Month01=ژانویه
     Month02=فوریه
     Month03=مارس
    @@ -646,6 +635,8 @@ SendMail=ارسال ایمیل
     EMail=E-mail
     NoEMail=بدون پست الکترونیک
     Email=پست الکترونیک
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=موبایل ممنوع
     Owner=مالک
     FollowingConstantsWillBeSubstituted=ثابت های زیر را با مقدار متناظر جایگزین شده است.
    @@ -677,7 +668,7 @@ NeverReceived=هرگز دریافت
     Canceled=لغو شد
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=رنگ
     Documents=فایل های مرتبط
     Documents2=اسناد
    @@ -716,15 +707,15 @@ Merge=ادغام کردن
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=نمایش صفحه به چاپ منطقه محتوای اصلی
     MenuManager=مدیریت منو
    -WarningYouAreInMaintenanceMode=اخطار، شما در یک حالت تعمیر و نگهداری می باشد، بنابراین تنها ورود <b>به٪ s را</b> مجاز به استفاده از نرم افزار در حال حاضر.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=خطای سیستم
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=کارت های اعتباری
     ValidatePayment=اعتبار پرداخت
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=زمینه <b>با٪ s</b> الزامی است
    -FieldsWithIsForPublic=مواردی که <b>با٪ s را</b> در لیست عمومی کاربران نشان داده شده است. اگر شما این کار را می خواهید نیست، چک کردن جعبه "عمومی".
    -AccordingToGeoIPDatabase=(با توجه به تبدیل GeoIP با)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=خط
     NotSupported=پشتیبانی نمی شود
     RequiredField=زمینه مورد نیاز
    @@ -732,6 +723,8 @@ Result=نتیجه
     ToTest=تست
     ValidateBefore=کارت باید قبل از استفاده از این ویژگی معتبر
     Visibility=دید
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=خصوصی
     Hidden=پنهان
     Resources=منابع
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=ایجاد پیش نویس
     SetToDraft=Back to draft
     ClickToEdit=برای ویرایش کلیک کنید
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=به روز
     BySalesRepresentative=با نمایندگی فروش
     LinkedToSpecificUsers=لینک به تماس با کاربر خاص
     NoResults=هیچ نتیجه ای
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=ابزار های سیستم
     ModulesSystemTools=ماژول ابزار
     Test=تست
     Element=عنصر
     NoPhotoYet=بدون ورود دست هنوز
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=مالیات پذیر
     from=از
     toward=نسبت به
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=نمایش مداخله
     ShowContract=نمایش قرارداد
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=حذف خط
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=طبقه بندی صورتحساب
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=تقویم
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=رویدادها
    -EMailTemplates=الگوهای ایمیل
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=پروژه
     Projects=پروژه ها
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=مجوز
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=دوشنبه
     Tuesday=سهشنبه
    @@ -927,15 +931,15 @@ SearchIntoInterventions=مداخلات
     SearchIntoContracts=قراردادها
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=نظرات
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=هر کسی
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=واگذار شده به
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/fa_IR/other.lang b/htdocs/langs/fa_IR/other.lang
    index 2f18cd41b67..80a7d1df104 100644
    --- a/htdocs/langs/fa_IR/other.lang
    +++ b/htdocs/langs/fa_IR/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=کد امنیتی
     NumberingShort=N°
     Tools=ابزار
     TMenuTools=ابزار ها
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=جشن تولد
     BirthdayDate=Birthday date
     DateToBirth=تاریخ تولد
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=پیام در اعتبار صفحه بازگشت پرداخت
     MessageKO=پیام در لغو صفحه بازگشت پرداخت
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=مداخله اعتبار
    -Notify_FICHINTER_SENTBYMAIL=مداخله با پست
     Notify_ORDER_VALIDATE=سفارش مشتری معتبر
     Notify_ORDER_SENTBYMAIL=سفارش مشتری با پست
     Notify_ORDER_SUPPLIER_SENTBYMAIL=منظور تامین کننده با پست
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=منظور تامین کننده تایید
     Notify_ORDER_SUPPLIER_REFUSE=منظور تامین کننده خودداری کرد
     Notify_PROPAL_VALIDATE=پیشنهاد به مشتری اعتبار
    -Notify_PROPAL_CLOSE_SIGNED=propal با مشتری بسته امضا
    -Notify_PROPAL_CLOSE_REFUSED=propal با مشتری بسته خودداری کرد
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=پیشنهاد تجاری با پست
     Notify_WITHDRAW_TRANSMIT=خروج خطوط انتقال
     Notify_WITHDRAW_CREDIT=خروج اعتباری
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=شخص ثالث ایجاد شده
     Notify_COMPANY_SENTBYMAIL=ایمیل های فرستاده شده از کارت شخص ثالث
     Notify_BILL_VALIDATE=صورت حساب به مشتری اعتبار
     Notify_BILL_UNVALIDATE=صورت حساب به مشتری unvalidated
    -Notify_BILL_PAYED=صورت حساب به مشتری غیر انتفایی
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=صورت حساب به مشتری لغو
     Notify_BILL_SENTBYMAIL=صورت حساب به مشتری با پست
     Notify_BILL_SUPPLIER_VALIDATE=فاکتور تامین کننده معتبر
    -Notify_BILL_SUPPLIER_PAYED=فاکتور تامین کننده غیر انتفایی
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=فاکتور تامین کننده با پست
     Notify_BILL_SUPPLIER_CANCELED=فاکتور تامین کننده لغو
     Notify_CONTRACT_VALIDATE=قرارداد معتبر
     Notify_FICHEINTER_VALIDATE=مداخله اعتبار
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=مداخله با پست
     Notify_SHIPPING_VALIDATE=حمل و نقل معتبر
     Notify_SHIPPING_SENTBYMAIL=حمل و نقل با پست
     Notify_MEMBER_VALIDATE=کاربران معتبر
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=ایجاد پروژه
     Notify_TASK_CREATE=وظیفه ایجاد
     Notify_TASK_MODIFY=وظیفه اصلاح شده
     Notify_TASK_DELETE=وظیفه حذف
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=تعداد فایل های پیوست / اسناد
     TotalSizeOfAttachedFiles=اندازه کل فایل های پیوست / اسناد
     MaxSize=حداکثر اندازه
     AttachANewFile=ضمیمه کردن فایل جدید / سند
     LinkedObject=شی مرتبط
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>پروفسور کد از٪ s</b> اطلاعات بسته به کشور های شخص ثالث است. <br> به عنوان مثال، برای <b>کشور٪، این کد٪ بازدید کنندگان</b> است.
     DolibarrDemo=Dolibarr ERP / CRM نسخه ی نمایشی
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=مداخله٪ s را دارای اعتبار بوده است.
     EMailTextInvoiceValidated=صورتحساب٪ s را دارای اعتبار بوده است.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=این پیشنهاد از٪ s دارای اعتبار بوده است.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=منظور از٪ s دارای اعتبار بوده است.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=منظور از٪ s شده توسط٪ s تایید شد
     EMailTextOrderRefused=منظور از٪ s رد شده است.
     EMailTextOrderRefusedBy=منظور از٪ s شده توسط٪ s خودداری کرد.
     EMailTextExpeditionValidated=حمل و نقل از٪ s دارای اعتبار بوده است.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=واردات مجموعه داده
     DolibarrNotification=اطلاع رسانی به صورت خودکار
     ResizeDesc=عرض جدید <b>OR</b> ارتفاع جدید را وارد کنید. نسبت در طول تغییر اندازه نگه داشته ...
    @@ -204,7 +212,7 @@ NewLength=عرض جدید
     NewHeight=ارتفاع جدید
     NewSizeAfterCropping=اندازه های جدید پس از برداشت
     DefineNewAreaToPick=تعریف منطقه جدید روی تصویر انتخاب کنید (کلیک چپ بر روی تصویر بکشید تا زمانی که شما رسیدن به گوشه مقابل)
    -CurrentInformationOnImage=این ابزار برای کمک به شما برای تغییر اندازه و یا برش یک تصویر طراحی شده است. این اطلاعات بر روی تصویر ویرایش شده در حال حاضر است
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=ویرایشگر تصویر
     YouReceiveMailBecauseOfNotification=شما این پیام را دریافت خواهید کرد چرا که ایمیل شما به لیست از اهداف به حوادث خاص به٪ نرم افزار از٪ s را مطلع اضافه شده است.
     YouReceiveMailBecauseOfNotification2=این رویداد به شرح زیر است:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=منطقه صادرات
    diff --git a/htdocs/langs/fa_IR/projects.lang b/htdocs/langs/fa_IR/projects.lang
    index 971df275cb8..42efd456040 100644
    --- a/htdocs/langs/fa_IR/projects.lang
    +++ b/htdocs/langs/fa_IR/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=نمایش پروژه
     ShowTask=نمایش کار
     SetProject=تنظیم پروژه
     NoProject=هیچ پروژه تعریف شده و یا متعلق به
    -NbOfProjects=Nb در پروژه
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=زمان صرف شده
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=فهرست طرح تجاری مرتبط با پروژه
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=فهرست قرارداد در ارتباط با پروژه
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=فهرست مداخلات مرتبط با پروژه
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=فهرست رویدادی به این پروژه
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=وظیفه٪ s را ایجاد
     TaskModifiedInDolibarr=وظیفه٪ s تغییر
     TaskDeletedInDolibarr=وظیفه٪ s را حذف
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=شرکت کننده
     SelectElement=انتخاب عنصر
     AddElement=لینک به عنصر
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=حجم کار برنامه ریزی شده
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=پیشنهاد
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/fi_FI/admin.lang b/htdocs/langs/fi_FI/admin.lang
    index d5506e794b7..c3043105bed 100644
    --- a/htdocs/langs/fi_FI/admin.lang
    +++ b/htdocs/langs/fi_FI/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Kehitys
     VersionUnknown=Tuntematon
     VersionRecommanded=Suositeltava
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler tallentaa istuntojen
     SessionSavePath=Varasto istuntojakson localization
     PurgeSessions=Tuhoa istuntoja
     ConfirmPurgeSessions=Haluatko varmasti poistii kaikki istunnot? Tämä katkaisee istunnot jokaiselta käyttäjältä (paitsi itseltäsi).
    -NoSessionListWithThisHandler=Tallenna istunto handler konfiguroitu PHP ei ole mahdollista luetella kaikkia lenkkivaatteita.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lukitse uusia yhteyksiä
    -ConfirmLockNewSessions=Oletko varma että haluat rajoittaa uusia Dolibarr yhteys itse. Vain käyttäjä <b>%s</b> voi kytkeä sen jälkeen.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Poista yhteys lukko
     YourSession=Istuntosi
    -Sessions=Käyttäjät istunto
    +Sessions=Users sessions
     WebUserGroup=Web-palvelimen käyttäjä / ryhmä
    -NoSessionFound=PHP näyttää voida luetella aktiivisten istuntojen. Directory käyttää tallentaa istuntoja <b>(%s)</b> voidaan suojata (Jos esimerkiksi OS luvat tai PHP direktiivi open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset tallentaa tiedot
     DBSortingCharset=Database charset lajitella tiedot
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Ulkoinen käyttäjä
     InternalUsers=Sisäiset käyttäjät
     ExternalUsers=Ulkopuoliset käyttäjät
     GUISetup=Näyttö
    -SetupArea=Asetusalue
    +SetupArea=Asetukset
     UploadNewTemplate=Päivitä uusi pohja(t)
     FormToTestFileUploadForm=Lomake testata tiedostonlähetyskiintiö (mukaan setup)
     IfModuleEnabled=Huomaa: kyllä on tehokas vain, jos <b>moduuli %s</b> on käytössä
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Koodi ei voi sisältää arvoa 0
     DisableJavascript=Poista käytöstä JavaScript ja Ajax funktiot (Suositeltu näkövammaisille ja tekstiselaimille)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr merkkien laukaista haku: %s
     NotAvailableWhenAjaxDisabled=Ole käytettävissä, kun Ajax vammaisten
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Esikatselu ei ole käytettävissä
     ThemeCurrentlyActive=Teema on tällä hetkellä aktiivinen
     CurrentTimeZone=Nykyinen aikavyöhyke
     MySQLTimeZone=Aikavyöhyke MySql (tietokanta)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Taulu
     Fields=Kentät
    @@ -111,14 +111,14 @@ NotConfigured=Moduulia/Applikaatiota ei ole määritetty
     Active=Aktiivinen
     SetupShort=Asetukset
     OtherOptions=Muut valinnat
    -OtherSetup=Muut asetukset
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Desimaalierotin
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Määränpää
     IdModule=Moduuli ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parametri %s
    -LocalisationDolibarrParameters=Lokalisointi parametrit
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Asiakkaan aikavyöhyke (käyttäjä)
     ClientHour=Asiakkaan aikavyöhyke (käyttäjä)
     OSTZ=Palvelimen OS aikavyöhyke
    @@ -126,8 +126,8 @@ PHPTZ=Aikavyöhyke Server PHP
     DaylingSavingTime=Kesäaika (käyttäjä)
     CurrentHour=Nykyinen tunti
     CurrentSessionTimeOut=Nykyinen istunnon aikakatkaisun
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgetit
     MaxNbOfLinesForBoxes=Rivien maksimimäärä widgeteille
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ohita duplikaatti virheet (VALITSE OHITA)
     AutoDetectLang=Automaatti tunnistus (selaimen kieli)
     FeatureDisabledInDemo=Ominaisuus on poistettu käytöstä demossa
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Löydä ulkoisia app/moduuleja
     ModulesDevelopYourModule=Kehitä oma app/moduuli
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Uusi
     FreeModule=Ilmainen
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Osta / Lataa
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, virallinen markkinapaikka Dolibarr ERP / CRM ulkoisten moduulien
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Linkki
     BoxesAvailable=Widgetit saatavilla
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Onko mitään salasanoja vuonna selväksi tietokantaan
     MainDbPasswordFileConfEncrypted=Tietokannan salasana salattu conf.php
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Suojaaminen syntyy pdf-tiedostoja (ei recommandd, taukoja massa pdf sukupolvi)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Ominaisuus
     DolibarrLicense=Lisenssi
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Sosiaaliset verkostot
     ForDocumentationSeeWiki=Käyttäjälle tai kehittäjän dokumentaatio (doc, FAQs ...), <br> katsoa, että Dolibarr Wiki: <br> <a href="%s" target="_blank"><b> %s</b></a>
     ForAnswersSeeForum=Muita kysymyksiä / apua, voit käyttää Dolibarr foorumilla: <br> <a href="%s" target="_blank"><b> %s</b></a>
    -HelpCenterDesc1=Tämä alue voi auttaa sinua saamaan tukea palvelua Dolibarr.
    -HelpCenterDesc2=Osa tätä palvelua on saatavilla <b>vain Englanti.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Nykyinen valikko handler
     MeasuringUnit=Mittayksikkö
     LeftMargin=Vasen marginaali
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Sähköpostit
     EMailsSetup=Sähköpostien asetukset
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP-portti (oletusarvoisesti <b>php.ini: %s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP Host (oletusarvoisesti <b>php.ini: %s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP-portti (Ei määritelty osaksi PHP Unix-koneissa)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP Host (Ei määritelty osaksi PHP Unix-koneissa)
    -MAIN_MAIL_EMAIL_FROM=Lähettäjä sähköposti automaattisille sähköpostiviesteille (Oletuksena php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Lähetä järjestelmällisesti piilotettu hiili-kopio kaikki lähetetyt sähköpostit
    -MAIN_DISABLE_ALL_MAILS=Poista käytöstä kaikki sähköpostiviestin lähetykset (testaus tarkoituksiin tai demoihin)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Käyttömenetelmä sähköposteja lähettäessä
    -MAIN_MAIL_SMTPS_ID=SMTP tunnus, jos vaaditaan
    -MAIN_MAIL_SMTPS_PW=SMTP Salasana jos vaaditaan
    -MAIN_MAIL_EMAIL_TLS= Käytä TLS (SSL) salausta
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Poista kaikki SMS-lähetysten (testitarkoituksiin tai demot)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Käyttömenetelmä tekstiviestejä lähettäessä
    -MAIN_MAIL_SMS_FROM=Vakio lähettäjän puhelinnumero tekstiviestien lähetykseen
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Käyttäjän sähköposti
     CompanyEmail=Yrityksen sähköposti
     FeatureNotAvailableOnLinux=Ominaisuus ei ole Unix-koneissa. Testaa sendmail ohjelmaa paikallisesti.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Moduuli asetukset
     ModulesSetup=Moduulit/Applikaatio asetukset
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Älä käytä tuotannossa
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Vaihe %s
    -FindPackageFromWebSite=Etsi paketti, joka sisältää haluamasi toiminnon (esimerkiksi www-sivuston %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr nykyinen versio
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Viimeisin vakaa versio
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Viive cashing vienti vastehuippu sekuntia (0 tai tyhjä ei välimuisti)
     DisableLinkToHelpCenter=Piilota linkki <b>"Tarvitsetko apua tai tukea"</b> on kirjautumissivulla
     DisableLinkToHelp=Piilota linkki online apuun "<b>%s</b>"
    -AddCRIfTooLong=Ei ole automaattinen rivitys, joten jos linja on poissa sivu asiakirjoja, koska liian pitkä, sinun on lisättävä itse kuljetukseen tuotot ovat textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Vähimmäispituus
     LanguageFilesCachedIntoShmopSharedMemory=Tiedostot. Lang ladattu jaettua muistia
     LanguageFile=Kielitiedosto
    -ExamplesWithCurrentSetup=Esimerkkejä nykyisellä asetuksella
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Luettelo OpenDocument malleja hakemistoja
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Esimerkkejä syntaksin: <br> c: \\ mydir <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Jos haluat tietää, miten voit luoda odt asiakirjamalleja, ennen kuin laitat ne näistä hakemistoista, lue wiki dokumentaatio:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Avain käyttää Web Services (parametri &quot;dolibarrk
     TestSubmitForm=Tulo testi lomake
     ThisForceAlsoTheme=Tämän valikon avulla manageri käyttää myös oma teemansa mikä on käyttäjän valinta. Myös tämä valikko johtaja erikoistunut älypuhelimiin ei toimi kaikille älypuhelimeen. Käytä toista valikonhallinta jos ongelmia on sinun.
     ThemeDir=Skins hakemisto
    -ConnectionTimeout=Connexion aikakatkaisu
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response aikakatkaisu
     SmsTestMessage=Test viesti __ PHONEFROM__ ja __ PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Avain turvallinen URL
    -NoSmsEngine=Ei SMS lähettäjän Manager. SMS lähettäjä johtaja ei ole asennettu oletuksena jakelussa (koska ne riippuu ulkopuolinen toimittaja), mutta voit löytää siitä http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Voit määrittää kunkin globaalin liittyviä vaihtoehtoja PDF sukupolvi
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Säännöt luoda osoitteeseen laatikot
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Piilota tuotekuvaukset syntyvässä PDF -tiedostossa
     HideRefOnPDF=Piilota tuotteiden viitteet syntyvässä PDF - tiedostossa
     HideDetailsOnPDF=Piilota tuote rivitiedot syntyvässä PDF -tiedostossa
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametrit turvata URL
     SecurityTokenIsUnique=Käytä ainutlaatuinen securekey parametri jokaiselle URL
     EnterRefToBuildUrl=Kirjoita viittaus objektin %s
     GetSecuredUrl=Hanki lasketaan URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Vanha ALV prosentti
     NewVATRates=Uusi ALV prosentti
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Valitse lista
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Salasana
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Valintaruudut
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Oletuslinkki
     SetAsDefault=Aseta oletukseksi
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Poista kaikki nykyiset viivakoodi arvot
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=Kaikki viivakoodi arvot on poistettu
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Näytä yrityksen osoitetiedot
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Klikkaa näyttääksesi kuvaus
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Kenttä
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Lähetä asialista muistutus sähköpostilla
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Käyttäjät & ryhmät
     Module0Desc=Käyttäjien / Työntekijöiden ja ryhmien hallinta
    -Module1Name=Ulkopuoliset sidosryhmät
    +Module1Name=Third Parties
     Module1Desc=Yrityksien ja yhteystietojen hallinnointi (asiakkaat, prospektit...)
     Module2Name=Kaupalliset
     Module2Desc=Kaupallinen hallinnointi
     Module10Name=Kirjanpito
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Ehdotukset
     Module20Desc=Kaupalliset ehdotuksia hallinto -
     Module22Name=Massa sähköpostitus
    @@ -511,13 +517,13 @@ Module52Desc=Varastojen hallinnan tuotteet
     Module53Name=Palvelut
     Module53Desc=Palvelut hallinto
     Module54Name=Sopimukset/Tilaukset
    -Module54Desc=Hallinnoi Sopimukset (palvelut tai toistuvat tilaukset)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Viivakoodi
     Module55Desc=Viivakoodien hallinnointi
     Module56Name=Puhelimet
     Module56Desc=Puhelimet yhdentyminen
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=ClickToDial yhdentyminen
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Kulut ja matka muistiinpanot
     Module75Desc=Kulut ja matkat muistiinpanojen hallinnointi
     Module80Name=Lähetykset
     Module80Desc=Lähetys ja toimitus tilauksien hallinnointi
    -Module85Name=Pankit ja käteinen
    +Module85Name=Banks and Cash
     Module85Desc=Pankkitilien ja käteistilien hallinnointi
    -Module100Name=ExternalSite
    -Module100Desc=Sisälly erillisiä web sivuston Dolibarr valikot ja tarkastella sen Dolibarr runko
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman ja SIP
     Module105Desc=Mailman tai spip liitäntä jäsen moduuli
     Module200Name=LDAP
    -Module200Desc=LDAP-hakemiston synkronointi
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke yhdentyminen
     Module240Name=Tietojen vienti
    -Module240Desc=Työkalu Dolibarr tietojen vientiin (avustuksella)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Tietojen tuonti
    -Module250Desc=Työkalu Dolibarr tietojen tuontiin (avustuksella)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Jäsenet
     Module310Desc=Säätiön jäsenten hallintaan
     Module320Name=RSS Feed
     Module320Desc=Lisää RSS-syöte sisällä Dolibarr näytön sivuilla
    -Module330Name=Kirjanmerkit
    -Module330Desc=Kirjanmerkkien hallinta
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar yhdentyminen
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Suoritus työntekijöiden palkoista
    -Module510Desc=Tallenna ja seuraa suorituksia työntekijöiden palkoista
    +Module510Desc=Record and track employee payments
     Module520Name=Laina
     Module520Desc=Lainojen hallinnointi
     Module600Name=Ilmoitukset liiketapahtumista
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Lahjoitukset
     Module700Desc=Lahjoituksien hallinnointi
     Module770Name=Kuluraportit
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Massa sähköposti dokumentin luominen
     Module1780Name=Merkit/Kategoriat
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=FCKeditor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynaamiset Hinnat
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Ajastetut työt
     Module2300Desc=Ajastettujen töiden hallinnointi (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Käytä online Gravatar palvelu (www.gravatar.com) näyttää kuvan käyttäjät / jäsenet (löytyi niiden sähköpostit). Tarvitsetko internetyhteys
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Ohjelma
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind tulokset valmiuksia
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=Henkilöstöhallinta
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-yhtiö
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Nettisivut
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Kassa
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of myynnin
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Kirjanpito (edistynyt)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=Tulosta IPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Vaalit, Kysely vai Äänestys
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Katteet
     Module59000Desc=Moduuli katteiden hallintaan
     Module60000Name=Komissiot
     Module60000Desc=Moduuli komissioiden hallintaan
    -Module62000Name=Incoterm
    -Module62000Desc=Lisää Incoterm ominaisuuksia
    +Module62000Name=Incoterm-ehdot
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resurssit
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Lue laskut
    @@ -651,9 +661,9 @@ Permission32=Luoda / muuttaa tuotetta / palvelua
     Permission34=Poista tuotteita / palveluita
     Permission36=Vienti tuotteet / palvelut
     Permission38=Vie tuotteita
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Poista hankkeiden
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Vie Projektit
     Permission61=Lue interventioiden
     Permission62=Luoda / muuttaa interventioiden
    @@ -686,7 +696,7 @@ Permission109=Poista sendings
     Permission111=Lue tilinpäätös
     Permission112=Luoda / muuttaa / poistaa ja vertailla liiketoimet
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Vientitoimien ja tiliotteita
     Permission116=Siirrot tilien välillä
     Permission117=Hallitse sekkien lähettämistä
    @@ -694,15 +704,15 @@ Permission121=Lue kolmannen osapuolen liittyy käyttäjän
     Permission122=Luoda / muuttaa kolmansien osapuolten liittyy käyttäjän
     Permission125=Poista kolmansien osapuolten liittyy käyttäjän
     Permission126=Vienti kolmansiin osapuoliin
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Lue tarjoajien
     Permission147=Lue stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Sulje toimittaja tilaukset
     Permission188=Peruuta toimittaja tilaukset
     Permission192=Luo rivit
     Permission193=Peruuta rivit
    -Permission194=Lue kaistanleveys linjat
    +Permission194=Read the bandwidth lines
     Permission202=Luo ADSL-liittymien
     Permission203=Tilaa yhteydet tilaukset
     Permission204=Tilaa yhteydet
    @@ -750,12 +760,12 @@ Permission244=Katso sisältö piilotetut luokat
     Permission251=Lue muiden käyttäjien ja ryhmien
     PermissionAdvanced251=Lukea muiden käyttäjien
     Permission252=Luoda / muuttaa muille käyttäjille, ja sinun permisssions
    -Permission253=Muokata muiden käyttäjien salasana
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Luo / muokkaa sisäiset / ulkoiset käyttäjät ja käyttöoikeudet
     Permission254=Poista tai poistaa muiden käyttäjien
     Permission255=Luoda / muuttaa omaa käyttäjän tiedot
     Permission256=Muokkaa oma salasana
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Lue CA
     Permission272=Lue laskut
     Permission273=Laskutuksen
    @@ -765,7 +775,7 @@ Permission283=Poista yhteystietoja
     Permission286=Vie yhteystietoja
     Permission291=Lue tariffit
     Permission292=Aseta oikeudet tariffien
    -Permission293=Muokka makuun tariffit
    +Permission293=Modify customers tariffs
     Permission300=Lue viivakoodin
     Permission301=Luoda / muuttaa viivakoodin
     Permission302=Poista viivakoodin
    @@ -787,11 +797,9 @@ Permission401=Lue alennukset
     Permission402=Luoda / muuttaa alennukset
     Permission403=Validate alennukset
     Permission404=Poista alennukset
    -Permission501=Lue työntekijän sopimukset/palkat
    -Permission502=Luo / muuta työntekijän sopimuksia / palkkoja
    -Permission511=Lue Palkkojen Suoritukset
    -Permission512=Luo/muokkaa Palkkojen Suoritus
    -Permission514=Poista palkat
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Vie palkat
     Permission520=Lue Lainat
     Permission522=Luo/muokkaa Lainat
    @@ -844,8 +852,8 @@ Permission1251=Suorita massa tuonnin ulkoisten tiedot tietokantaan (tiedot kuorm
     Permission1321=Vienti asiakkaan laskut, ominaisuudet ja maksut
     Permission1322=Avaa uudelleen maksettu lasku
     Permission1421=Vienti asiakkaan tilaukset ja attribuutit
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Sidosryhmä tyypit
    -DictionaryCompanyJuridicalType=Sidostyhmän oikeudellinen muoto
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Esitetilaus mahdolliset tasolla
     DictionaryCanton=Valtio / Lääni
     DictionaryRegion=Alueiden
    @@ -894,7 +902,7 @@ DictionaryVAT=Alv
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Maksuehdot
     DictionaryPaymentModes=Maksutavat
    -DictionaryTypeContact=Yhteystiedot tyypit
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ympäristöveron (WEEE)
     DictionaryPaperFormat=Paper tiedostomuodot
    @@ -908,47 +916,47 @@ DictionarySource=Alkuperä ehdotusten / tilaukset
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Kirjanpitotilityypit
    -DictionaryEMailTemplates=Sähköposti pohjat
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Yksiköt
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup tallennettu
     SetupNotSaved=Asetuksia ei tallennettu
     BackToModuleList=Palaa moduulien luetteloon
    -BackToDictionaryList=Palaa sanakirjat luettelo
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Alv Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=Oletusarvon ehdotettu alv on 0, jota voidaan käyttää tapauksissa, kuten yhdistysten, yksityishenkilöiden tai pieniä yrityksiä.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Kurssi
     LocalTax1IsNotUsed=Älä käytä toista veroa
    -LocalTax1IsUsedDesc=Käytä toisen tyyppistä veroa (muu kuin ALV)
    -LocalTax1IsNotUsedDesc=Älä käytä toisen tyyppistä veroa (muu kuin ALV)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Toisen tyyppinen vero
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Älä käytä kolmatta veroa
    -LocalTax2IsUsedDesc=Käytä kolmannen tyyppistä veroa (muu kuin ALV)
    -LocalTax2IsNotUsedDesc=Älä käytä muun tyyppistä veroa (muu kuin ALV)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Kolmannen tyypin vero
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE hallinta
    -LocalTax1IsUsedDescES= RE määrä oletuksena luodessasi näkymiä, laskuja, tilauksia jne seuraa aktiivisesti vakiokäytäntönä: <br> Jos te ostaja ei kohdistu RE-RE oletusarvoisesti = 0. Loppu sääntö. <br> Jos ostaja joutuu RE sitten RE oletusarvoisesti. Loppu sääntö. <br>
    -LocalTax1IsNotUsedDescES= Oletuksena ehdotettu RE 0. Loppu sääntö.
    -LocalTax1IsUsedExampleES= Espanjassa he ovat ammattilaisia sovelletaan tiettyjä osia Espanjan IEA.
    -LocalTax1IsNotUsedExampleES= Espanjassa he ovat ammattitaitoisia ja yhteiskunnan tietyin osa Espanjan IEA.
    -LocalTax2ManagementES= IRPF hallinta
    -LocalTax2IsUsedDescES= RE määrä oletuksena luodessasi näkymiä, laskuja, tilauksia jne seuraa aktiivisesti vakiokäytäntönä: <br> Jos myyjä ei kohdistu IRPF sitten IRPF oletusarvoisesti = 0. Loppu sääntö. <br> Jos myyjä joutuu IRPF sitten IRPF oletusarvoisesti. Loppu sääntö. <br>
    -LocalTax2IsNotUsedDescES= Oletuksena ehdotettu IRPF on 0. Loppu sääntö.
    -LocalTax2IsUsedExampleES= Espanjassa, freelancer ja itsenäisten ammatinharjoittajien, jotka tarjoavat palveluja ja yrityksiä, jotka ovat valinneet verojärjestelmän moduuleja.
    -LocalTax2IsNotUsedExampleES= Espanjassa niitä bussines ei veroteta järjestelmän moduulit.
    +LocalTax1ManagementES=RE hallinta
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Oletuksena ehdotettu RE 0. Loppu sääntö.
    +LocalTax1IsUsedExampleES=Espanjassa he ovat ammattilaisia sovelletaan tiettyjä osia Espanjan IEA.
    +LocalTax1IsNotUsedExampleES=Espanjassa he ovat ammattitaitoisia ja yhteiskunnan tietyin osa Espanjan IEA.
    +LocalTax2ManagementES=IRPF hallinta
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Oletuksena ehdotettu IRPF on 0. Loppu sääntö.
    +LocalTax2IsUsedExampleES=Espanjassa, freelancer ja itsenäisten ammatinharjoittajien, jotka tarjoavat palveluja ja yrityksiä, jotka ovat valinneet verojärjestelmän moduuleja.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Raportit paikallisista veroista
     CalcLocaltax1=Myynnit - Ostot
     CalcLocaltax1Desc=Paikallisten Verojen raportit on laskettu paikallisverojen myyntien ja ostojen erotuksena
    @@ -958,7 +966,8 @@ CalcLocaltax3=Myynti
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label käyttää oletusarvoisesti, jos ei ole käännös löytyy koodi
     LabelOnDocuments=Label asiakirjoihin
    -NbOfDays=Nb päivää
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Kuukauden lopussa
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Tietokantakäyttäjien
     DatabasePassword=Tietokannan salasana
     Tables=Taulukot
     TableName=Taulukko nimi
    -NbOfRecord=Nb tietueista
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver tyyppi
     SummarySystem=System Information summary
    @@ -996,7 +1005,7 @@ Skin=Ihon teema
     DefaultSkin=Oletus ihon teema
     MaxSizeList=Max pituus luettelo
     DefaultMaxSizeList=Oletus luettelon maksimipituuteen
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Kirjoita viesti
     LoginPage=Kirjautumissivu
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Pysyvä hakulomake vasemmassa valikossa
     DefaultLanguage=Oletuskieltä käyttää (kieli-koodi)
     EnableMultilangInterface=Ota monikielinen käyttöliittymä
     EnableShowLogo=Show logo vasemmalla valikossa
    -CompanyInfo=Yritys/Organisaatio tiedot
    -CompanyIds=Yritys/Organisaatio identiteetit
    +CompanyInfo=Yritys/Organisaatio
    +CompanyIds=Company/Organization identities
     CompanyName=Nimi
     CompanyAddress=Osoite
     CompanyZip=Postinumero
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Omistajan pankkitilille %s
     BankModuleNotActive=Pankkitilit moduuli ei ole käytössä
     ShowBugTrackLink=Näytä linkki "<strong>%s</strong>"
     Alerts=Vahtipalvelu
    -DelaysOfToleranceBeforeWarning=Suvaitsevaisuus viivästyksellä ennen varoitus
    -DelaysOfToleranceDesc=Tässä näytössä voidaan määrittää siedetty viivästyksiä, ennen kuin hälytys on raportoitu näytön kanssa picto %s kunkin myöhään elementti.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Viive toleranssi (päivinä) ennen varoituskynnysten ehdotuksista lopettaa
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Viive toleranssi (päivinä) ennen varoituskynnysten ehdotuksista ei laskuteta
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Suvaitsevaisuus viive (päivinä) ennen varoituskynnysten palveluista aktivoida
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Suvaitsevaisuus viive (päivinä) ennen kuin hälytys on lakannut palvelut
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Suvaitsevaisuus viive (päivinä) ennen varoituskynnysten Palkattoman toimittajan laskut
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Suvaitsevaisuus viive (päivinä) ennen varoituskynnysten Palkattoman asiakkaan laskut
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Suvaitsevaisuus viive (päivinä) ennen kuin hälytys on vireillä pankki sovinnon
    -Delays_MAIN_DELAY_MEMBERS=Suvaitsevaisuus viive (päivinä) ennen ilmoituksen myöhästymisestä jäsenmaksu
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Suvaitsevaisuus viive (päivinä) ennen varoituksena sekit tallettaa tehdä
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Muut valikkoon rivit hallita valinnaisia parametrejä.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security Audit tapahtumat
     Audit=Audit
     InfoDolibarr=Tietoja Dolibarrista
    @@ -1060,16 +1069,16 @@ LogEventDesc=Voit ottaa loki Dolibarr turvallisuus tapahtumia täältä. Järjes
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=Järjestelmän tiedot ovat erinäiset tekniset tiedot saavat lukea vain tila ja näkyvissä vain järjestelmänvalvojat.
     SystemAreaForAdminOnly=Tämä alue on käytettävissä järjestelmänvalvojan käyttäjät vain. Ei mikään Dolibarr käyttöoikeudet voidaan vähentää tätä rajaa.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Voit valita kunkin parametrin yhteydessä Dolibarr näyttävät ja tuntuvat täällä
     AvailableModules=Saatavilla olevat app/moduulit
     ToActivateModule=Aktivoi moduulit, mennä setup-alueella.
     SessionTimeOut=Aika pois istunnosta
    -SessionExplanation=Tämä määrä taata, että istunto ei koskaan pääty ennen tätä viivästystä. Mutta PHP sessoin johto ei takeet siitä, että istunto aina päättyy sen jälkeen, kun tämä viive: Tämä ongelma ilmenee, jos järjestelmä puhdistaa välimuisti istunto on käynnissä. <br> Huom: ilman erityistä järjestelmää, sisäisen PHP prosessi puhtaan istuntoonsa joka <b>noin %s / %s,</b> mutta ainoastaan pääsy tehdään muissa istunnoissa.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Saatavilla laukaisimet
    -TriggersDesc=Käynnistäjät ovat tiedostoja, joka muuttaa käyttäytymistä Dolibarr työnkulun kerran kopioidaan hakemistoon <b>htdocs / includes / aiheuttajia.</b> He ymmärsivät uusia toimia, aktivoitu Dolibarr tapahtumia (uuden yrityksen perustamiseen, laskun validointi, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Käynnistäjät tässä tiedosto on poistettu, <b>joita-NORUN</b> suffix heidän nimissään.
     TriggerDisabledAsModuleDisabled=Käynnistäjät tähän tiedostoon pois päältä kuin <b>moduuli %s</b> on poistettu käytöstä.
     TriggerAlwaysActive=Käynnistäjät tässä tiedosto on aina aktiivinen, mikä on aktivoitu Dolibarr moduulit.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=Kaikki turvallisuuteen liittyvät parametrit määritetään täällä.
     LimitsSetup=Rajat / Precision setup
    -LimitsDesc=Voit määrittää rajat, täsmennyksiä ja optimisations käyttää Dolibarr tästä
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max desimaalitarkkuuksia yksikkökohtaiseen hinnat
     MAIN_MAX_DECIMALS_TOT=Max desimaalitarkkuuksia kokonaistyöllisyyttä hinnat
     MAIN_MAX_DECIMALS_SHOWN=Max desimaalitarkkuuksia hinnat näkyvät näytöllä (Lisää <b>...</b> sen jälkeen, kun tämä numero, jos haluat nähdä <b>...</b> kun numero on katkaistu, kun näkyy näytössä)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net yksikköhinta tuotteen
     TotalPriceAfterRounding=Kokonaishinta (netto / vat / sis. alv) pyöristämisen jälkeen
     ParameterActiveForNextInputOnly=Parametri tehokas Seuraavan vain tuloa
     NoEventOrNoAuditSetup=O turvallisuus tapahtuma on kirjattu vielä. Tämä voi olla normaali, jos tarkastusta ei ole käytössä "setup - turvallisuus - audit"-sivulla.
    -NoEventFoundWithCriteria=O turvallisuus tapauksessa on todettu tällaisen haun criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Katso paikallisen sendmail setup
     BackupDesc=Voit tehdä täydellinen varmuuskopio Dolibarr sinun tulee:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Arkistoidut hakemistossa on säilytettävä turvallisessa paikassa.
     BackupDescY=Luotu dump tiedosto on säilytettävä turvallisessa paikassa.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Jos haluat palauttaa Dolibarr varmuuskopio, sinun täytyy:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL vienti
     ForcedToByAModule= Tämä sääntö on <b>pakko %s</b> on aktivoitu moduuli
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Sinun on suoritettava tämä ko
     YourPHPDoesNotHaveSSLSupport=SSL toimintoja ei saatavilla PHP
     DownloadMoreSkins=Lisää nahat ladata
     SimpleNumRefModelDesc=Palaa viitenumero muodossa %syymm-nnnn jossa yy on vuosi, MM kuukautta ja nnnn on sekvenssiin reikä ja ilman nollaa
    -ShowProfIdInAddress=Näytä ammattijärjestöt id osoitteiden kanssa asiakirjojen
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Osittainen käännös
    -MAIN_DISABLE_METEO=Poista Meteo näkymä
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standardi tila
     MeteoStdModEnabled=Standardi tila aktivoitu
     MeteoPercentageMod=Prosenttitila
     MeteoPercentageModEnabled=Prosenttitila käytössä
     MeteoUseMod=Klikkaa käyttääksesi %s
     TestLoginToAPI=Testaa kirjautua API
    -ProxyDesc=Jotkin Dolibarr on oltava Internet-työhön. Määritä tässä parametrit tästä. Jos Dolibarr palvelin on välityspalvelimen takana, näiden parametrien kertoo Dolibarr miten Internetin kautta läpi.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Ulkoinen pääsy
     MAIN_PROXY_USE=Käytä välityspalvelinta (muuten suora pääsy Internetiin)
     MAIN_PROXY_HOST=Nimi / osoite välityspalvelimen
     MAIN_PROXY_PORT=Satama välityspalvelinta
     MAIN_PROXY_USER=Kirjaudu käyttää välityspalvelinta
     MAIN_PROXY_PASS=Salasana käyttää välityspalvelinta
    -DefineHereComplementaryAttributes=Määritä tässä kaikki atributes, jo ole oletuksena, ja että haluat tuettava %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Täydentävät ominaisuudet
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Varoitus, joissakin Linux-järjestelmissä, lähettää sähköpostia sähköpostisi, sendmail toteuttaminen setup on conatins optio-ba (parametri mail.force_extra_parameters tulee php.ini tiedosto). Jos jotkut vastaanottajat eivät koskaan vastaanottaa sähköposteja, yrittää muokata tätä PHP parametrin mail.force_extra_parameters =-ba).
     PathToDocuments=Polku asiakirjoihin
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Käännöksen asetukset
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Sinulla pitää olla ainakin 1 moduuli käytössä
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Hakuoptimointi
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug ladattu
     XCacheInstalled=XCache ladattu
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Alalla painos %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Hanki viivakoodi
     ##### Module password generation
     PasswordGenerationStandard=Palauta salasana luodaan mukaan sisäinen Dolibarr algoritmi: 8 merkkiä sisältävät jaettua numerot ja merkit pieniä.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=Sähköposti Vaaditaan Luo uusi käyttäjä
     HRMSetup=Henkilöstöhallinta moduulin asetukset
     ##### Company setup #####
     CompanySetup=Yritykset moduulin asetukset
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Asiakirjat mallit
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vesileima asiakirjaluonnos
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Ammatillinen tunnus ainutlaatuinen
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Täytyy olla uniikki?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=<b>Vienti-yhteys %s-muodossa</b> on saatavilla seuraavasta linkistä: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=<b>Vienti-yhteys %s-muodossa</b> on saatavilla seuraavast
     BillsSetup=Laskut moduulin asetukset
     BillsNumberingModule=Laskut ja hyvityslaskut numerointiin moduuli
     BillsPDFModules=Laskun asiakirjojen malleja
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Menoilmoitus
     CreditNotes=Hyvityslaskuja
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Hallitse Sisään jokaiselle jäsenelle
     AdherentMailRequired=EMail tarvitse luoda uuden jäsenen
     MemberSendInformationByMailByDefault=Checkbox lähettää vahvistusviestin jäsenille on oletusarvoisesti
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP-asetukset
     LDAPGlobalParameters=Global parametrit
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synkronointi testi onnistunut
     LDAPSynchroKO=Epäonnistui synkronointi testi
    -LDAPSynchroKOMayBePermissions=Epäonnistui synkronointi testi. Tarkista, että connexion palvelimelle on määritetty oikein ja mahdollistaa LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=TCP yhteyden LDAP-palvelin onnistunut (Server= %s, Port= %s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=TCP yhteyden LDAP-palvelimeen ei onnistunut (Server= %s, Port= %s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=Yhdistä / Authentificate on LDAP-palvelimeen ei onnistunut (Server= %s, Port= %s, Admin= %s, salasana= %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP-palvelin määritetty versio 3
     LDAPSetupForVersion2=LDAP-palvelin määritetty versio 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Esimerkki: samaccountname
     LDAPFieldFullname=Etunimi Nimi
     LDAPFieldFullnameExample=Esimerkki: cn
    -LDAPFieldPasswordNotCrypted=Salasana ei crypted
    -LDAPFieldPasswordCrypted=Salasana crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Esimerkki: userPassword
     LDAPFieldCommonNameExample=Esimerkki: cn
     LDAPFieldName=Nimi
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Esimerkki arvot on suunniteltu <b>OpenLDAP</b> kanssa seuraavat ladattu kaavat: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Jos käytät thoose arvot ja OpenLDAP, muokata LDAP config file <b>slapd.conf</b> on kaikki thoose kaavat ladattu.
     ForANonAnonymousAccess=Jotta autentikoitu acces (for a kirjoitusoikeuksia esimerkiksi)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Oletus hakusuodattimet
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Tuotteet Moduuli setup
     ServiceSetup=Services-moduuli asennus
     ProductServiceSetup=Tuotteet ja palvelut moduulien asennus
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=Max numero tuotteiden yhdistelmät valitse listat (0= ei ylärajaa)
    -ViewProductDescInFormAbility=Visualisointi tuotteen kuvaukset lomakkeiden (toisin kuin popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Oletus viivakoodi tyyppi käyttää tuotteita
     SetDefaultBarcodeTypeThirdParties=Oletus viivakoodi tyyppi käyttämään kolmansien osapuolten
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Lähetysvalinnat-moduulin asetukset
     SendingsReceiptModel=Lähettävä vastaanottanut malli
     SendingsNumberingModules=Lähetysten numerointi moduulit
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Vapaa sana lähetyksissä
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Tuotteiden toimitukset vastaanottamisesta numerointiin moduuli
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Kehittynyt editori
     ActivateFCKeditor=Ota FCKeditor varten:
     FCKeditorForCompany=WYSIWIG luominen / painos yritysten kuvaus ja huomaa
     FCKeditorForProduct=WYSIWIG luominen / painos tuotteiden / palvelujen kuvaus ja huomaa
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG luominen / painos postitusten
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Yhteys onnistunut mutta tietokanta ei näytä olevan OSCommerce tietokanta (Key %s ei löydy taulukossa %s).
    -OSCommerceTestOk=Yhteys palvelimeen ' %s' on tietokanta' %s' kanssa käyttäjä ' %s' onnistunut.
    -OSCommerceTestKo1=Yhteys palvelimeen ' %s' onnistua mutta tietokanta' %s' ei tavoitettu.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Yhteys palvelimeen ' %s' kanssa käyttäjä' %s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Valikko poistettu
     Menus=Menut
    @@ -1548,7 +1561,7 @@ DetailRight=Ehto näyttö luvattoman harmaa valikot
     DetailLangs=Lang tiedoston nimen etiketti koodin käännös
     DetailUser=Intern / avun / Kaikki
     Target=Kohde
    -DetailTarget=Tavoite vuodelle linkkejä (_blank alkuun avata uuteen ikkunaan)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Tasolla (-1: ylävalikosta 0: header-valikko&gt; 0-valikon ja alivalikon)
     ModifMenu=Valikko muutos
     DeleteMenu=Poista Valikosta
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=Arvonlisävero on maksettava: <br> - Toimituksen / maksuja
     OptionVatDebitOptionDesc=Arvonlisävero on maksettava: <br> - Toimituksen / maksuja tavaroista <br> - Laskulla (debet) ja palvelut
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Toimituksen
     OnPayment=Maksu
     OnInvoice=Käytössä lasku
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Ostojen tili
     AgendaSetup=Toimet ja esityslistan moduulin asetukset
     PasswordTogetVCalExport=Avain sallia viennin linkki
     PastDelayVCalExport=Älä viedä tapauksessa vanhempia kuin
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Ota käyttöön ilmoitusäänet
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Napsauttamalla Dial-moduulin asetukset
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of myynti
     CashDeskSetup=Kassa-moduulin asetukset
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Rahat tilille käyttää myy
     CashDeskBankAccountForCheque= Tilin käyttö vastaanottaa maksuja sekillä
     CashDeskBankAccountForCB= Tilin käyttö voidaan saada käteismaksujen luottokorttia
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Kirjanmerkin moduulin asetukset
    -BookmarkDesc=Tämän moduulin avulla voit hallita kirjanmerkkejä. Voit myös lisätä linkkejä mihin tahansa Dolibarr sivuja tai externale webbisivuilta vasemmalla valikossa.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Enimmäismäärä kirjanmerkit näytetään vasemmanpuoleisessa valikossa
     ##### WebServices #####
     WebServicesSetup=Webservices moduulin asetukset
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-yhtiö moduulin asetukset
     ##### Suppliers #####
     SuppliersSetup=Toimittajan moduuli setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Hankkeen moduuli setup
     ProjectsModelModule=Hankkeen raportti asiakirjan malli
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Tilikaudet
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Linkkien värit
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Myyti veroprosentti
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Näkyvillä kaikkialla
     VisibleNowhere=Visible nowhere
     FixTZ=Aikavyöhyke korjaus
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Mallipohjat tuoteiden liitteille
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Luettelo saatavilla olevista API:sta
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=PDF:n vasen marginaali
     MAIN_PDF_MARGIN_RIGHT=PDF:n oikea marginaali
     MAIN_PDF_MARGIN_TOP=PDF:n ylämarginaali
     MAIN_PDF_MARGIN_BOTTOM=PDF:n alamarginaali
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/fi_FI/companies.lang b/htdocs/langs/fi_FI/companies.lang
    index 163a429db9f..007dd506a46 100644
    --- a/htdocs/langs/fi_FI/companies.lang
    +++ b/htdocs/langs/fi_FI/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Valitse sidosryhmä
     ConfirmDeleteCompany=Haluatko varmasti poistaa tämän yrityksen ja kaikki siitä johdetut tiedot?
     DeleteContact=Poista yhteystieto
     ConfirmDeleteContact=Haluatko varmasti poistaa tämän yhteystiedon ja kaikki siitä johdetut tiedot?
    -MenuNewThirdParty=Uusi sidosryhmä
    -MenuNewCustomer=Uusi asiakas
    -MenuNewProspect=Uusi prospekti
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Uusi yksityishenkilö
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Luo sidosryhmä
     CreateThirdPartyAndContact=Luo sidosryhmä + ala yhteystieto
    @@ -25,22 +25,22 @@ ThirdPartyContact=Sidosryhmän yhteystiedot/osoitteet
     Company=Yritys
     CompanyName=Yrityksen nimi
     AliasNames=Lisänimi (tuotenimi, brändi, ...)
    -AliasNameShort=Lisänimi
    +AliasNameShort=Alias Name
     Companies=Yritykset
    -CountryIsInEEC=Maa kuuluu EU:hun
    -ThirdPartyName=Sidosryhmän nimi
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Sidosryhmän sähköposti
    -ThirdParty=Sidosryhmä
    -ThirdParties=Sidosryhmät
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospektit
     ThirdPartyProspectsStats=Näkymät
     ThirdPartyCustomers=Asiakkaat
     ThirdPartyCustomersStats=Asiakkaat
     ThirdPartyCustomersWithIdProf12=Asiakkaat, joilla on %s tai %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Sidosryhmän tyyppi
    +ThirdPartyType=Type of company
     Individual=Yksityishenkilö
    -ToCreateContactWithSameName=Luo automaattisesti yhteystiedot/osoitteen sidosryhmän tiedoilla sidosryhmän alaisuuteen. Yleensä, vaikka sidosryhmä olisi henkilö, pelkkä sidosryhmän luominen riittää.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Emoyhtiö
     Subsidiaries=Tytäryhtiöt
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Postinumero
     Town=Postitoimipaikka
     Web=Kotisivut
     Poste= Asema
    -DefaultLang=Oletuskieli
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Täytä osoite käyttäen sidosryhmän osoitetta
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Maksunt pankkitili
     OverAllProposals=Ehdotukset
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntaksi on voimassa
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Tällä asiakkaalla on oletusalennus<b> %s%%</b>
     CompanyHasNoRelativeDiscount=Tällä asiakkaalla ei ole suhteellista alennusta oletuksena
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=Tällä asiakkaalla on alennuksia saatavilla (luottoa tai hyvityksiä) <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Tällä asiakkaalla on vielä luottomerkintöjä <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Ei mitään
    -Supplier=Toimittaja
    +Supplier=Vendor
     AddContact=Luo yhteystiedot
     AddContactAddress=Luo yhteystiedot/osoite
     EditContact=Muokkaa yhteystiedot / osoite
    @@ -303,22 +303,22 @@ AddThirdParty=Luo sidosryhmä
     DeleteACompany=Poista yritys
     PersonalInformations=Henkilötiedot
     AccountancyCode=Kirjanpito tili
    -CustomerCode=Asiakas-koodi
    -SupplierCode=Vendor code
    -CustomerCodeShort=Asiakas-koodi
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Asiakas koodi ainutlaatuinen kaikille asiakkaille
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Vaaditaan, jos kolmas osapuoli on asiakas tai mahdollisuus
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Voimassaolo hallinnassa moduuli
    -ThisIsModuleRules=Tämä on säännöt tämän moduulin
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Esitetilaus yhteyttä
     CompanyDeleted=Yritys " %s" poistettu tietokannasta.
     ListOfContacts=Luettelo yhteystiedot
    -ListOfContactsAddresses=Yhteystietojen/osoitteiden luettelo
    -ListOfThirdParties=Luettelo kolmansien osapuolten
    -ShowCompany=Näytä sidosryhmä
    +ListOfContactsAddresses=Luettelo yhteystiedot
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Näytä yhteystiedot
     ContactsAllShort=Kaikki (Ei suodatinta)
     ContactType=Yhteystiedon tyyppi
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Tämä yhteys ei ole yhteyttä mihinkään kaupalliseen
     NoContactForAnyContract=Tämä yhteys ei ole yhteyttä mihinkään sopimukseen
     NoContactForAnyInvoice=Tämä yhteys ei ole yhteyttä mihinkään lasku
     NewContact=Uusi yhteystieto
    -NewContactAddress=Uusi yhteystieto/osoite
    +NewContactAddress=New Contact/Address
     MyContacts=Omat yhteystiedot
     Capital=Pääoma
     CapitalOf=Pääoma of %s
     EditCompany=Muokkaa yritystä
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Shekki
    -VATIntraCheckDesc=<b>Linkkiä %s</b> sallii pyytää Euroopan alv checker palveluun. Ulkoisen Internet-palvelimelta vaaditaan tätä palvelua työtä.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Tarkista yhteisömyynnin ALV Euroopan komission Internet-sivustolla
    -VATIntraManualCheck=Voit myös tarkistaa manuaalisesti euroopan nettisivuilta <a href="%s" target="_blank">www-sivuston %s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Tarkista ole mahdollista. Tarkista palvelu ei toimiteta jäsenvaltion ( %s).
    -NorProspectNorCustomer=Eikä näköpiirissä, eikä asiakkaan
    -JuridicalStatus=Yhtiömuoto
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Henkilökunta
     ProspectLevelShort=Potenttiaali
     ProspectLevel=Prospekti potentiaali
    @@ -387,12 +387,12 @@ ExportCardToFormat=Vienti kortin muodossa
     ContactNotLinkedToCompany=Yhteystiedot eivät liity minkään kolmannen osapuolen
     DolibarrLogin=Dolibarr sisäänkirjoittautumissivuksesi
     NoDolibarrAccess=Ei Dolibarr pääsyä
    -ExportDataset_company_1=Sidosryhmät (Yritykset / säätiöt / ihmiset) ja ominaisuudet
    -ExportDataset_company_2=Yhteystiedot ja ominaisuudet
    -ImportDataset_company_1=Sidosryhmät (Yritykset / säätiöt / ihmiset) ja ominaisuudet
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Hintataso
     DeliveryAddress=Toimitusosoite
     AddAddress=Lisää osoite
    @@ -402,16 +402,16 @@ DeleteFile=Poista tiedosto
     ConfirmDeleteFile=Oletko varma, että haluat poistaa tämän tiedoston?
     AllocateCommercial=Liitä myyntiedustajaan
     Organization=Organisaatio
    -FiscalYearInformation=Tilivuoden tiedot
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Tilivuoden aloitus kuukausi
    -YouMustAssignUserMailFirst=Tälle käyttäjälle täytyy luoda sähköpostiosoite  jotta sähköpostimuistutukset voidaan ottaa käyttöön
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Voidaksesi lisätä sähköposti muistutukset, täytyy ensin täyttää yhteystiedot sidosryhmän oikealla sähköpostiosoitteella
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Luettelo prospektit
    -ListCustomersShort=Luettelo asiakkaat
    -ThirdPartiesArea=Sidosryhmät ja yhteystiedot
    -LastModifiedThirdParties=Viimeisimmät %s muokattua sidosryhmää
    -UniqueThirdParties=Yhteensä ainutlaatuinen kolmannen osapuolen
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Avoinna
     ActivityCeased=Kiinni
     ThirdPartyIsClosed=Sidosryhmä on suljettu
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Avoin lasku
     OutstandingBill=Avointen laskujen enimmäismäärä
     OutstandingBillReached=Avointen laskujen enimmäismäärä saavutettu
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Asiakas / toimittaja-koodi on maksuton. Tämä koodi voidaan muuttaa milloin tahansa.
     ManagingDirectors=Johtajien nimet (TJ, johtaja, päällikkö...)
     MergeOriginThirdparty=Monista sidosryhmä (sidosryhmä jonka haluat poistaa)
     MergeThirdparties=Yhdistä sidosryhmät
    -ConfirmMergeThirdparties=Haluatko varmasti yhdistää tämän sidosryhmän nykyiseen? Kaikki yhdistetyt tiedot (laskut, tilaukset, ...) siirretään nykyiselle sidosryhmälle jolloin voit poistaa vastaavan sidosryhmän.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Myyntiedustajan kirjautuminen
     SaleRepresentativeFirstname=Myyntiedustajan etunimi
     SaleRepresentativeLastname=Myyntiedustajan sukunimi
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/fi_FI/errors.lang b/htdocs/langs/fi_FI/errors.lang
    index d593ce66c6f..c6b9f3b7359 100644
    --- a/htdocs/langs/fi_FI/errors.lang
    +++ b/htdocs/langs/fi_FI/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Arvo &quot;%s&quot; on väärä päivämäärä muoto
     ErrorWrongDate=Päivämäärä ei ole oikein!
     ErrorFailedToWriteInDir=Epäonnistui kirjoittaa hakemistoon %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=Löytyi virheellinen sähköposti syntaksi %s rivit tiedoston (esimerkiksi rivi %s email= %s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Jotkin vaaditut kentät eivät ole täytetty.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Luominen epäonnistui hakemiston. Tarkista, että Web-palvelin käyttäjällä on oikeudet kirjoittaa Dolibarr asiakirjat hakemistoon. Jos parametri <b>safe_mode</b> on käytössä tämän PHP, tarkista, että Dolibarr php tiedostot omistaa web-palvelimen käyttäjä (tai ryhmä).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=<b>Kenttä %s</b> ei saa sisältää erikoismerkkejä.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=O kirjanpito moduuli aktivoitu
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP yhteensovitus ei ole täydellinen.
     ErrorLDAPMakeManualTest=A. LDIF tiedosto on luotu hakemistoon %s. Yritä ladata se manuaalisesti komentoriviltä on enemmän tietoa virheitä.
    -ErrorCantSaveADoneUserWithZeroPercentage=Ei voi tallentaa toimia "statut ole käynnistetty", jos alalla "tehtävä" on myös täytettävä.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref käytetään luomista jo olemassa.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript ei saa keskeytyä, on tämä ominaisuus toimii. Ottaa käyttöön / poistaa Javascript, mene menu Koti-> Asetukset-> Näyttö.
     ErrorPasswordsMustMatch=Molemmat kirjoittaa salasanat on vastattava toisiaan
    -ErrorContactEMail=Tekninen virhe. Ota yhteys järjestelmänvalvojaan jälkeen sähköpostin <b>%s</b> en antaa virhekoodi <b>%s</b> viesti, tai jopa paremmin lisäämällä näytön kopion tästä sivusta.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Väärä arvo kentän numero <b>%s</b> (arvo <b>"%s"</b> ei vastaa regex sääntö <b>%s)</b>
     ErrorFieldValueNotIn=Väärä arvo kentän numero <b>%s</b> (arvo <b>&quot;%s&quot;</b> ei ole arvoa käytettävissä tulee kenttään <b>%s</b> taulukon <b>%s)</b>
     ErrorFieldRefNotIn=Väärä arvo kentän numero <b>%s</b> (arvo <b>&quot;%s&quot;</b> ei <b>%s</b> olemassa ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Virustentorjuntaohjelma ei voinut tarkistaa tiedos
     ErrorSpecialCharNotAllowedForField=Erikoismerkkejä ei sallita kentän "%s"
     ErrorNumRefModel=Viittaus olemassa otetaan tietokantaan (%s) ja ei ole yhteensopiva tämän numeroinnin sääntöä. Poista levy tai nimen viittaus aktivoida tämän moduulin.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Virhe naamio
     ErrorBadMaskFailedToLocatePosOfSequence=Virhe, maski ilman järjestysnumeroa
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Virhe, huono palautus arvo
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Valitse ainakin yksi merkintä.
    -ErrorDeleteNotPossibleLineIsConsolidated=Poistaminen ei ole mahdollista, koska levy on sidottu pankin transation joka sovitelleet
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s on siirretty toiseen kolmanteen
     ErrorFailedToSendPassword=Epäonnistui lähettää salasana
     ErrorFailedToLoadRSSFile=Ei saada RSS-syötteen. Yritä lisätä jatkuvasti MAIN_SIMPLEXMLLOAD_DEBUG jos virheilmoituksia ei ole tarpeeksi tietoa.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Käyttäjälle <b>sisäänkirjoittautumissivuksesi %s</b
     ErrorLoginHasNoEmail=Tämä käyttäjä ei ole sähköpostiosoitetta. Process aborted.
     ErrorBadValueForCode=Bad arvotyypeillä koodin. Yritä uudelleen uuteen arvoon ...
     ErrorBothFieldCantBeNegative=Kentät %s ja %s voi olla sekä kielteisiä
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Käyttäjätili <b>%s</b> käyttää myös toteuttaa web-palvelimella ei ole lupaa, että
     ErrorNoActivatedBarcode=Ei viivakoodin tyyppi aktivoitu
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Odottamaton virhe '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Odottamaton operaatio '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP ohjelma epäonnistui virheellä '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=Tiedoston on oltava formaatissa %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Kirjanmerkki tämän otsikon tai tämän tavoitteen
     WarningPassIsEmpty=Varoitus, tietokannan salasana on tyhjä. Tämä on turvallisuus reikään. Sinun tulisi lisätä salasanan tietokantaan ja muuttaa conf.php tiedosto vastaavasti.
     WarningConfFileMustBeReadOnly=Varoitus, config tiedosto <b>(htdocs / conf / conf.php)</b> voidaan korvata jonka web-palvelin. Tämä on vakava tietoturva-aukko. Muokkaa käyttöoikeuksia tiedoston luettavaksi vain tila-käyttöjärjestelmän käyttäjä käyttää Web-palvelimeen. Jos käytät Windows ja FAT oman levy, sinun täytyy tietää, että tämä tiedostojärjestelmä ei mahdollista lisätä käyttöoikeuksia tiedostoon, joten ei voi olla täysin turvallista.
     WarningsOnXLines=Varoitukset <b>%s</b> lähde linjat
    -WarningNoDocumentModelActivated=Ei mallia, dokumenttien tuotanto, on aktivoitu. Mallia valitsi oletuksena kunnes olet tarkistanut moduuli setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=Tämä varoitus pysyy aktiivisena niin kauan kuin tähän hakemistoon on läsnä (Näkyy vain admin-käyttäjät).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/fi_FI/interventions.lang b/htdocs/langs/fi_FI/interventions.lang
    index ac9517af499..1b5072e0d44 100644
    --- a/htdocs/langs/fi_FI/interventions.lang
    +++ b/htdocs/langs/fi_FI/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Interventio-kortti
     NewIntervention=Uusi
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Luettelo interventioiden
     ActionsOnFicheInter=Toimia interventio
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/fi_FI/main.lang b/htdocs/langs/fi_FI/main.lang
    index 973e4b7867a..0ab2aded356 100644
    --- a/htdocs/langs/fi_FI/main.lang
    +++ b/htdocs/langs/fi_FI/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=Failed to send ma
     ErrorFileNotUploaded=Tiedosto ei ole ladattu. Tarkista, että koko ei ylitä suurinta sallittua, että vapaata tilaa on käytettävissä levyllä ja että siellä ei ole jo tiedoston samalla nimellä tähän hakemistoon.
     ErrorInternalErrorDetected=Virhe havaittu
     ErrorWrongHostParameter=Väärä vastaanottavan parametri
    -ErrorYourCountryIsNotDefined=Oma maa ei ole määritelty. Siirry Home-Setup-Edit ja sen jälkeen uudelleen muodossa.
    -ErrorRecordIsUsedByChild=Epäonnistui poistaa tämän tietueen. Tämä rekisteri on käytössä ainakin lapsen kirjaa.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Väärä arvo
     ErrorWrongValueForParameterX=Väärä arvo parametri %s
     ErrorNoRequestInError=N: o pyynnöstä virhe
    -ErrorServiceUnavailableTryLater=Palvelu ei ole tällä hetkellä ole käytettävissä. Yritä myöhemmin uudelleen.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Päällekkäinen arvo ainutlaatuisella alalla
    -ErrorSomeErrorWereFoundRollbackIsDone=Joitakin virheitä ei löytynyt. Meidän palautus muutoksia.
    -ErrorConfigParameterNotDefined=<b>Parametri %s</b> ei ole määritelty sisällä Dolibarr config file <b>conf.php.</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Ei onnistunut löytämään <b>käyttäjän %s</b> Dolibarr tietokantaan.
     ErrorNoVATRateDefinedForSellerCountry=Virhe ei alv määritellään maa ' %s'.
     ErrorNoSocialContributionForSellerCountry=Virhe, ei sosiaalisia tai fiskaalisia verotyyppejä, jotka on määritelty maata "%s" varten.
     ErrorFailedToSaveFile=Virhe, ei tallenna tiedosto.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Oikeutesi ei riitä tähän toimintoon
     SetDate=Aseta päivä
     SelectDate=Valitse päivä
    @@ -78,10 +78,10 @@ FileRenamed=Tiedosto on uudelleen nimetty onnistuneesti
     FileGenerated=Tiedosto luotiin onnistuneesti
     FileSaved=Tiedosto tallennettiin onnistuneesti
     FileUploaded=Tiedosto on siirretty onnistuneesti
    -FileTransferComplete=Tiedosto(t) ladattiin onnistuneesti
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=Tiedosto(t) poistettiin onnistuneesti
     FileWasNotUploaded=Tiedosto on valittu liite mutta ei ollut vielä ladattu. Klikkaa "Liitä tiedosto" tätä.
    -NbOfEntries=Huom Merkintöjen
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Lue online-ohjeet (tarvitaan Internet-yhteys)
     GoToHelpPage=Lue auttaa
     RecordSaved=Record tallennettu
    @@ -94,7 +94,7 @@ Undefined=Määrittelemätön
     PasswordForgotten=Unohditko salasanasi?
     NoAccount=No account?
     SeeAbove=Katso edellä
    -HomeArea=Etusivu alue
    +HomeArea=Koti
     LastConnexion=Viimeisin yhteys
     PreviousConnexion=Edellinen yhteydessä
     PreviousValue=Edellinen arvo
    @@ -142,6 +142,7 @@ Closed=Suljettu
     Closed2=Suljettu
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Käytöstä poistettu
     Disable=Poistaa käytöstä
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Päivittää
     Close=Sulje
     CloseBox=Poista widgetti kojelaudaltasi
     Confirm=Vahvista
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Poistaa
     Remove=Poistaa
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Kopioi
     Paste=Liitä
     Default=Oletus
     DefaultValue=Oletusarvo
    -DefaultValues=Oletusarvot
    +DefaultValues=Default values/filters/sorting
     Price=Hinta
     PriceCurrency=Price (currency)
     UnitPrice=Yksikköhinta
    @@ -347,7 +348,7 @@ AmountTTCShort=Määrä (sis. alv)
     AmountHT=Määrä (ilman veroja)
     AmountTTC=Määrä (sis. alv)
     AmountVAT=Verot
    -MulticurrencyAlreadyPaid=Maksettu jo, alkuperäinen valuutta
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Maksua avoimena, alkuperäinen valuutta
     MulticurrencyPaymentAmount=Suorituksen summa, alkuperäinen valuutta
     MulticurrencyAmountHT=Summa (veroton), alkuperäisessä valuutassa
    @@ -428,7 +429,7 @@ ActionNotApplicable=Ei sovelleta
     ActionRunningNotStarted=Aloitetaan
     ActionRunningShort=Käsittelyssä
     ActionDoneShort=Päättetty
    -ActionUncomplete=Keskeneräinen
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Yritys/Organisaatio
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Luo
     Duration=Kesto
     TotalDuration=Kokonaiskesto
     Summary=Yhteenveto
    -DolibarrStateBoard=Tietokannan tilastot
    -DolibarrWorkBoard=Avoimet työtehtävät
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=Ei avattuja elementtejä prosessissa
     Available=Saatavissa
     NotYetAvailable=Ei vielä saatavilla
    @@ -468,7 +469,7 @@ and=ja
     or=tai
     Other=Muu
     Others=Muut
    -OtherInformations=Muut tiedot
    +OtherInformations=Other information
     Quantity=Määrä
     Qty=Kpl
     ChangedBy=Muuttanut
    @@ -506,7 +507,7 @@ None=Ei mitään
     NoneF=Ei mitään
     NoneOrSeveral=Ei yhtään tai useita
     Late=Myöhässä
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Kuva
     Photos=Kuvat
    @@ -530,18 +531,6 @@ September=Syyskuu
     October=Lokakuu
     November=Marraskuu
     December=Joulukuu
    -JanuaryMin=Tammikuu
    -FebruaryMin=Helmikuu
    -MarchMin=Maaliskuu
    -AprilMin=Huhtikuu
    -MayMin=Toukokuu
    -JuneMin=Kesäkuu
    -JulyMin=Heinäkuu
    -AugustMin=Elokuu
    -SeptemberMin=Syyskuu
    -OctoberMin=Lokakuu
    -NovemberMin=Marraskuu
    -DecemberMin=Joulukuu
     Month01=tammikuu
     Month02=helmikuu
     Month03=maaliskuu
    @@ -646,6 +635,8 @@ SendMail=Lähetä sähköpostia
     EMail=Sähköposti
     NoEMail=Ei sähköpostia
     Email=Sähköposti
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Ei matkapuhelinta
     Owner=Omistaja
     FollowingConstantsWillBeSubstituted=Seuraavat vakiot voidaan korvata ja vastaava arvo.
    @@ -677,7 +668,7 @@ NeverReceived=Ei ole saapunut
     Canceled=Peruutettu
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=Oletusarvon uudelle luotavalle tietueelle voi määrittää modulin asetuksista
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Väri
     Documents=Linkitettyjä tiedostoja
     Documents2=Asiakirjat
    @@ -703,7 +694,7 @@ DateOfSignature=Allekirjoituksen päivämäärä
     HidePassword=Näytä komento salasana piilotettuna
     UnHidePassword=Näytä todellinen komento salasana näkyen
     Root=Juuri
    -Informations=Informaatiot
    +Informations=Information
     Page=Sivu
     Notes=Huomiot
     AddNewLine=Lisää uusi rivi
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standardi PDF pohja
     PrintContentArea=Näytä sivu tulostaa päävalikkoon alue
     MenuManager=Valikkomanageri
    -WarningYouAreInMaintenanceMode=Varoitus, olet ylläpitotilassa, joten vain kirjautunut <b>%s</b> saa käyttää hakemuksen tällä hetkellä.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Järjestelmävirhe
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Luottokortti
     ValidatePayment=Vahvista maksu
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Tähdellä <b>%s</b> ovat pakollisia
    -FieldsWithIsForPublic=Tähdellä <b>%s</b> näkyvät julkisessa jäsenluettelossa. Jos et halua tätä, poista valinta "julkinen"-kentästä.
    -AccordingToGeoIPDatabase=(Mukaan GeoIP muuntaminen)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Rivi
     NotSupported=Ei tuettu
     RequiredField=Pakollinen kenttä
    @@ -732,6 +723,8 @@ Result=Tulos
     ToTest=Testi
     ValidateBefore=Kortti on vahvistettava ennen toiminnon käyttöä
     Visibility=Näkyvyys
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Yksityinen
     Hidden=Kätketty
     Resources=Resurssit
    @@ -750,6 +743,7 @@ LinkTo=Linkki
     LinkToProposal=Linkki Tarjoukseen
     LinkToOrder=Linkki Tilauksiin
     LinkToInvoice=Linkki Laskuihin
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Linkki Toimittaja tilauksiin
     LinkToSupplierProposal=Linkki Toimittaja tarjouksiin
     LinkToSupplierInvoice=Linkki Toimittaja laskuihin
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Luo luonnos
     SetToDraft=Palaa luonnokseen
     ClickToEdit=Klikkaa muokataksesi
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Päivän mukaan
     BySalesRepresentative=Myyntiedustajittain
     LinkedToSpecificUsers=Linkitetty käyttäjätietoon
     NoResults=Ei tuloksia
    -AdminTools=Ylläpidon työkalut
    +AdminTools=Admin Tools
     SystemTools=Kehitysresurssit
     ModulesSystemTools=Moduuli työkalut
     Test=Testi
     Element=Osa
     NoPhotoYet=Ei kuvaa saatavilla vielä
     Dashboard=Kojelauta
    -MyDashboard=Minun kojelauta
    +MyDashboard=My Dashboard
     Deductible=Omavastuu
     from=mistä
     toward=eteenpäin
    @@ -802,7 +797,7 @@ PrintFile=Tulosta tiedostoon %s
     ShowTransaction=Näytä pankkitilin kirjaus
     ShowIntervention=Näytä interventio
     ShowContract=Näytä sopimus
    -GoIntoSetupToChangeLogo=Vaihtaaksesi logoa mene Home - Setup - Company tai Home - Setup - Display poistaaksesi
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Kiellä
     Denied=Kielletty
     ListOf=Luettelo %s
    @@ -818,12 +813,12 @@ Sincerely=Vilpittömästi
     DeleteLine=Poista rivi
     ConfirmDeleteLine=Halutako varmasti poistaa tämän rivin?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=Tallennusta ei ole valittu
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Luokittele laskutetaan
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Kalenteri
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Suora latauslinkki (julkinen/ulkoinen)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Lataa
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automaattisesti laskettu
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Vie ID
     Events=Tapahtumat
    -EMailTemplates=Sähköposti pohjat
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Hanke
     Projects=Projektit
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Oikeudet
     LineNb=Line no.
     IncotermLabel=Incoterm-ehdot
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Maanantai
     Tuesday=Tiistai
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Sopimukset
     SearchIntoCustomerShipments=Asiakas lähetykset
     SearchIntoExpenseReports=Kuluraportit
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Kommentit
     NbComments=Kommenttien määrä
     CommentPage=Comments space
     CommentAdded=Kommentti lisätty
     CommentDeleted=Kommentti poistettu
     Everybody=Yhteiset hanke
    -PayedBy=Maksanut
    -PayedTo=Maksettu
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Vaikuttaa
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/fi_FI/other.lang b/htdocs/langs/fi_FI/other.lang
    index 021b4b712bd..ac722be4e7e 100644
    --- a/htdocs/langs/fi_FI/other.lang
    +++ b/htdocs/langs/fi_FI/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Suojakoodi
     NumberingShort=N°
     Tools=Työkalut
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Syntymäpäivä
     BirthdayDate=Birthday date
     DateToBirth=Päiväys syntyvyyden
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Viesti on validoitu maksun tuotto sivu
     MessageKO=Viesti on peruutettu maksun tuotto sivu
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Validate interventioelimen
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Asiakas tilaa validoitu
     Notify_ORDER_SENTBYMAIL=Asiakas tilaa postitse
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Toimittaja jotta postitse
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Toimittaja jotta hyväksytty
     Notify_ORDER_SUPPLIER_REFUSE=Toimittaja jotta evätty
     Notify_PROPAL_VALIDATE=Asiakas ehdotus validoidaan
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Kaupallinen ehdotus lähetetään postitse
     Notify_WITHDRAW_TRANSMIT=Vaihteisto peruuttaminen
     Notify_WITHDRAW_CREDIT=Luotto peruuttaminen
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Kolmannen osapuolen luotu
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Validate bill
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Asiakas laskun maksanut
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Asiakas lasku peruutettu
     Notify_BILL_SENTBYMAIL=Asiakkaan lasku lähetetään postitse
     Notify_BILL_SUPPLIER_VALIDATE=Toimittaja laskun validoitu
    -Notify_BILL_SUPPLIER_PAYED=Toimittaja laskun maksanut
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Toimittaja lasku lähetetään postitse
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Sopimus validoitu
     Notify_FICHEINTER_VALIDATE=Intervention validoitu
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Toimitus validoitu
     Notify_SHIPPING_SENTBYMAIL=Toimitus postitse
     Notify_MEMBER_VALIDATE=Jäsen validoitu
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Numero liitettyjen tiedostojen / asiakirjat
     TotalSizeOfAttachedFiles=Kokonaiskoosta liitettyjen tiedostojen / asiakirjat
     MaxSize=Enimmäiskoko
     AttachANewFile=Liitä uusi tiedosto / asiakirjan
     LinkedObject=Linkitettyä objektia
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> on tietojen mukaan kolmannen osapuolen maassa. <br> Esimerkiksi <b>maa %s,</b> se <b>koodi %s.</b>
     DolibarrDemo=Dolibarr ERP / CRM-demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Väliintulo %s validoitava
     EMailTextInvoiceValidated=Lasku %s validoitava
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Ehdotus %s on hyväksytty.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Jotta %s on hyväksytty.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Tilaa %s hyväksynyt %s
     EMailTextOrderRefused=Tilaa %s evätty
     EMailTextOrderRefusedBy=Tilaa %s hylätty %s
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Tuonti tietokokonaisuutta
     DolibarrNotification=Automaattinen ilmoitus
     ResizeDesc=Kirjoita uusi leveys <b>tai</b> uusien korkeus. Suhde pidetään ajan kokoa ...
    @@ -204,7 +212,7 @@ NewLength=Uusi leveys
     NewHeight=Uusi korkeus
     NewSizeAfterCropping=Uusi koko jälkeen rajaus
     DefineNewAreaToPick=Määritä uusi alue kuvasta valita (vasemmalla klikkaa kuvaa vetämällä kunnes tulet päinvastainen kulma)
    -CurrentInformationOnImage=Tiedot ajankohtaisista kuva
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Kuvankäsittelyohjelmassa
     YouReceiveMailBecauseOfNotification=Saat tämän viestin koska sähköpostiosoitteesi on lisätty luetteloon tavoitteet ilmoitetaan erityisesti tapahtumien osaksi %s ohjelmisto %s.
     YouReceiveMailBecauseOfNotification2=Tämä tapahtuma on seuraava:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Vienti alueen
    diff --git a/htdocs/langs/fi_FI/projects.lang b/htdocs/langs/fi_FI/projects.lang
    index 44aa47f6f7a..1b2149fe3ef 100644
    --- a/htdocs/langs/fi_FI/projects.lang
    +++ b/htdocs/langs/fi_FI/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Näytä hankkeen
     ShowTask=Näytä tehtävä
     SetProject=Aseta hankkeen
     NoProject=Ei hanke määritellään
    -NbOfProjects=Nb hankkeiden
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Käytetty aika
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Luettelot kaupallisen ehdotuksia hankkeeseen liittyvät
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Luettelo sopimukset hankkeeseen liittyvät
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Luettelo toimien hankkeeseen liittyvän
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Luettelo toimia, jotka liittyvät hankkeen
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Avustaja
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Liittyvät tuotteet
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Ehdotus
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/fr_BE/admin.lang b/htdocs/langs/fr_BE/admin.lang
    index aa389328b18..4a6114a0d1a 100644
    --- a/htdocs/langs/fr_BE/admin.lang
    +++ b/htdocs/langs/fr_BE/admin.lang
    @@ -5,26 +5,18 @@ VersionRecommanded=Recommandée
     SessionId=ID de session
     SessionSaveHandler=Gestionnaire de sessions
     PurgeSessions=Nettoyage des sessions
    -NoSessionListWithThisHandler=Le gestionnaire de sessions configuré dans votre PHP ne permet pas de faire la liste des sessions existantes.
     LockNewSessions=Bloquer les nouvelles connexions
    -ConfirmLockNewSessions=Êtes-vous certain de vouloir restreindre toute nouvelle connexion à vous seul? Seul l'utilisateur <b>%s</b> pourra se connecter après cela.
     UnlockNewSessions=Éliminer le blocage des connexions
     WebUserGroup=Utilisateur/groupe du serveur web
    -NoSessionFound=Votre configuration PHP ne semble pas permettre de faire une liste des sessions actives. Le répertoire utilisé pour stocker les sessions (<b>%s</b>) pourrait être protégé (par exemple, par des permissions du système d'exploitation ou par la directive PHP open_basedir).
     DBStoringCharset=Codification de caractères de base de données pour stocker les données
     DBSortingCharset=Codification de caractères de base de données pour trier les données
     WarningModuleNotActive=Le module <b>%s</b> doit être activé
     WarningOnlyPermissionOfActivatedModules=Seules les permissions liées à des modules activés sont montrées ici. Vous pouvez activer d'autres modules sur la page Accueil->Configuration->Modules.
    -SetupArea=Zone de configuration
     FormToTestFileUploadForm=Formulaire pour tester l'upload de fichiers (selon la configuration)
     IfModuleEnabled=Note: oui ne fonctionne que si le module <b>%s</b> est activé
     RemoveLock=Supprimez le fichier <b>%s</b> s'il existe pour autoriser l'utilisation de l'outil de mise à jour.
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     Module20Name=Propales
     Module30Name=Factures
     DictionaryPaymentConditions=Conditions de paiement
     SuppliersPayment=Paiements fournisseurs
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
     Target=Objectif
    diff --git a/htdocs/langs/fr_BE/compta.lang b/htdocs/langs/fr_BE/compta.lang
    index 488b53843a6..a4ec8230e86 100644
    --- a/htdocs/langs/fr_BE/compta.lang
    +++ b/htdocs/langs/fr_BE/compta.lang
    @@ -1,5 +1,3 @@
     # Dolibarr language file - Source file is en_US - compta
    -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation on actual payments made even if they are not yet accounted in Ledger.
    -SeeReportInDueDebtMode=See %sanalysis of invoices%s for a calculation based on known recorded invoices even if they are not yet accounted in Ledger.
     Dispatched=Envoyé
     ToDispatch=Envoyer
    diff --git a/htdocs/langs/fr_CA/admin.lang b/htdocs/langs/fr_CA/admin.lang
    index a7fdc2395cd..0a4118bdacf 100644
    --- a/htdocs/langs/fr_CA/admin.lang
    +++ b/htdocs/langs/fr_CA/admin.lang
    @@ -3,9 +3,7 @@ Publisher=Éditeur
     VersionLastInstall=Version d'installation initiale
     VersionLastUpgrade=Version de la dernière mise à jour
     FileCheck=Vérificateur d'intégrité des fichiers
    -FileCheckDesc=Cet outil vous permet de vérifier l'intégrité des fichiers et la configuration de votre application, en comparant chaque fichier avec les officiels. La valeur de certaines constantes d'installation peut également être vérifiée. Vous pouvez utiliser cet outil pour détecter si certains fichiers ont été modifiés par un pirate informatique par exemple.
     FileIntegrityIsStrictlyConformedWithReference=L'intégrité des fichiers est strictement conforme à la référence.
    -FileIntegrityIsOkButFilesWereAdded=La vérification de l'intégrité des fichiers s'est écoulée, mais certains nouveaux fichiers ont été ajoutés.
     FileIntegritySomeFilesWereRemovedOrModified=La vérification de l'intégrité des fichiers a échoué. Certains fichiers ont été modifiés, supprimés ou ajoutés.
     GlobalChecksum=Somme de contrôle globale
     MakeIntegrityAnalysisFrom=Effectuer une analyse d'intégrité des fichiers d'application de
    @@ -16,17 +14,14 @@ FileCheckDolibarr=Vérifier l'intégrité des fichiers d'application
     AvailableOnlyOnPackagedVersions=Le fichier local pour la vérification de l'intégrité n'est disponible que lorsque l'application est installée à partir d'un paquet officiel
     XmlNotFound=Xml Integrity Fichier de l'application introuvable
     ConfirmPurgeSessions=Voulez-vous vraiment purger toutes les sessions? Cela déconnectera tous les utilisateurs (sauf vous).
    -WebUserGroup=Utilisateur/groupe du serveur Web
     ClientCharset=Encodage Client
    +SetupArea=Paramétrage
     UploadNewTemplate=Télécharger un nouveau modèle (s)
     SecurityFilesDesc=Définissez ici les options liées à la sécurité concernant le téléchargement de fichiers.
    -DelaiedFullListToSelectCompany=Attendez que vous appuyez sur une touche avant de charger le contenu de la liste des combinaisons de tiers (cela peut augmenter les performances si vous avez un grand nombre de tiers, mais cela est moins pratique)
    -DelaiedFullListToSelectContact=Attendez que vous appuyez sur une touche avant de charger le contenu de la liste des contacts combinés (Cela peut augmenter les performances si vous avez un grand nombre de contacts, mais cela est moins pratique)
     AllowToSelectProjectFromOtherCompany=Sur le document d'un tiers, peut choisir un projet lié à un autre tiers
     NextValueForDeposit=Valeur suivante (acompte)
     MultiCurrencySetup=Configuration multi-devises
     NotConfigured=Module / Application non configuré
    -HoursOnThisPageAreOnServerTZ=Avertissement, contrairement à d'autres écrans, les heures sur cette page ne sont pas dans votre fuseau horaire local, mais pour le fuseau horaire du serveur.
     MaxNbOfLinesForBoxes=Nombre maximum de lignes pour les widgets
     AllWidgetsWereEnabled=Tous les widgets disponibles sont activés
     MenusDesc=Les gestionnaires de menu définissent le contenu des deux barres de menus (horizontales et verticales).
    @@ -40,21 +35,15 @@ PurgeNDirectoriesFailed=Impossible de supprimer <b>%s</b> fichiers ou les réper
     ConfirmPurgeAuditEvents=Êtes-vous sûr de vouloir purger tous les événements de sécurité? Tous les journaux de sécurité seront supprimés, aucune autre donnée ne sera supprimée.
     IgnoreDuplicateRecords=Ignorer les erreurs d'enregistrement en double (INSERT IGNORE)
     FeatureAvailableOnlyOnStable=La fonctionnalité est uniquement disponible sur les versions officielles stables
    -BoxesDesc=Les widgets sont des composants montrant des informations que vous pouvez ajouter pour personnaliser certaines pages. Vous pouvez choisir entre afficher le widget ou non en sélectionnant la page cible et en cliquant sur 'Activer', ou en cliquant sur la poubelle pour la désactiver.
     ModulesMarketPlaceDesc=Vous pouvez trouver plus de modules à télécharger sur des sites Web externes sur Internet ...
    -ModulesDeployDesc=Si les autorisations sur votre système de fichiers le permettent, vous pouvez utiliser cet outil pour déployer un module externe. Le module sera alors visible sur l'onglet <strong>%s</strong>.
     ModulesMarketPlaces=Trouver des applications / modules externes
     ModulesDevelopYourModule=Développez votre propre application / modules
    -ModulesDevelopDesc=Vous pouvez développer ou trouver un partenaire pour développer pour vous, votre module personnalisé
    -DOLISTOREdescriptionLong=Au lieu d'activer le site web <a href="https://www.dolistore.com">www.dolistore.com</a> pour trouver un module externe, vous pouvez utiliser cet outil embarqué qui rendra la recherche sur le marché externe pour vous (peut être lent, dépendant de votre accès internet) ...
     NotCompatible=Ce module ne semble pas compatible avec votre Dolibarr %s (Min %s - Max %s).
     CompatibleAfterUpdate=Ce module nécessite une mise à jour de votre Dolibarr %s (Min %s - Max %s).
     SeeInMarkerPlace=Voir dans Market place
     Updated=Mis à jour
     AchatTelechargement=Acheter / Télécharger
     GoModuleSetupArea=Pour déployer / installer un nouveau module, accédez à la zone de configuration du module à <a href="%s"> %s </a>.
    -DoliPartnersDesc=Liste des entreprises proposant des modules ou des fonctionnalités développés personnalisés (Remarque: toute personne expérimentée dans la programmation PHP peut fournir un développement personnalisé pour un projet open source)
    -WebSiteDesc=Les sites Web de référence pour trouver plus de modules ...
     DevelopYourModuleDesc=Quelques solutions pour développer votre propre module ...
     InstrucToEncodePass=Pour chiffrer le mot de passe de la base dans le fichier de configuration <b>conf.php</b>, remplacer la ligne<br><b>$dolibarr_main_db_pass="...";</b><br>par<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Pour avoir le mot de passe de la base décodé (en clair) dans le fichier de configuration <b>conf.php</b>, remplacer dans ce fichier la ligne<br><b>$dolibarr_main_db_pass="crypted:..."</b><br>par<br><b>$dolibarr_main_db_pass="%s"</b>
    @@ -63,18 +52,10 @@ NoticePeriod=Période de préavis
     NewByMonth=Nouveau par mois
     Emails=Courriels
     EMailsSetup=Configuration des courriels
    -EMailsDesc=Cette page vous permet d'écraser vos paramètres PHP pour l'envoi de mails. Dans la plupart des cas sur Unix / Linux OS, votre configuration PHP est correcte et ces paramètres sont inutiles.
     EmailSenderProfiles=Profils d'expéditeurs d'e-mails
    -MAIN_MAIL_EMAIL_FROM=Courriel de l'expéditeur pour les courriels automatiques (Par défaut dans php.ini:<b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=L'e-mail utilisé pour les erreurs renvoie les e-mails (champs "Erreurs-A" dans les e-mails envoyés)
    -MAIN_DISABLE_ALL_MAILS=Désactiver toutes les envois de courriels (pour des fins de démonstration ou de tests)
     MAIN_MAIL_FORCE_SENDTO=Envoyer tous les emails à (au lieu des destinataires réels, à des fins de test)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Ajouter les utilisateurs des employés avec email dans la liste des destinataires autorisés
    -MAIN_MAIL_EMAIL_STARTTLS=Utilisation du chiffrement TLS (SSL)
    -MAIN_MAIL_DEFAULT_FROMTYPE=Courriel de l'expéditeur par défaut pour les envois manuels (courriel de l'utilisateur ou courriel de la société)
     UserEmail=Courrier électronique de l'utilisateur
     CompanyEmail=Courrier électronique de la société
    -SubmitTranslation=Si la traduction de cette langue est incomplète ou vous trouvez des erreur , vous pouvez corriger cela en modifiant les fichiers dans le répertoire <b>langs/%s</b> et soumettre votre changement à www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Si la traduction de cette langue est incomplète ou vous trouvez des erreurs , vous pouvez corriger cela en modifiant les fichiers dans le répertoire <b> langs/%s </b> et soumettre les fichiers modifiés sur dolibarr.org/forum ou pour les développeurs sur github.com/Dolibarr/dolibarr.
     ModulesSetup=Modules / Configuration de l'application
     ModuleFamilyProducts=Gestion des produits
    @@ -83,14 +64,9 @@ ModuleFamilyPortal=Site internet et autres applications frontales
     ModuleFamilyInterface=Interfaces avec les systèmes externes
     ThisIsProcessToFollow=Voici des étapes à suivre pour traiter:
     ThisIsAlternativeProcessToFollow=Il s'agit d'une configuration alternative à traiter manuellement:
    -FindPackageFromWebSite=Recherche le paquet qui répond à votre besoin (par exemple sur le site web %s).
     DownloadPackageFromWebSite=Télécharger le package %s.
    -UnpackPackageInDolibarrRoot=Décompressez les fichiers emballés dans le répertoire du serveur dédié à Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=Pour déployer / installer un module externe, décompressez les fichiers emballés dans le répertoire du serveur dédié aux modules: <b>%s</b>
    -SetupIsReadyForUse=Le déploiement du module est terminé. Vous devez toutefois activer et configurer le module dans votre application en allant sur la page pour configurer les modules: <a href="%s"> %s </a>.
     NotExistsDirect=Le répertoire racine alternatif n'est pas défini dans un répertoire existant.
     InfDirAlt=Depuis la version 3, il est possible de définir un autre répertoire racine. Cela vous permet de stocker, dans un répertoire dédié, des plug-ins et des modèles personnalisés. <br> Créez simplement un répertoire à la racine de Dolibarr (par exemple: personnalisé).
    -YouCanSubmitFile=Pour cette étape, vous pouvez insérer le fichier du module .zip ici :
     CallUpdatePage=Accédez à la page qui met à jour la structure et les données de la base de données: %s.
     LastStableVersion=Dernière version stable
     LastActivationDate=Dernière date d'activation
    @@ -100,16 +76,13 @@ GenericMaskCodes2=<B> {cccc} </ b> le code client sur n caractères <br> <b> {cc
     GenericMaskCodes4a=<br><u> Exemple au 99th %s du tiers TheCompany, avec la date 2007-01-31: </u>
     GenericMaskCodes5=<b>ABC{yy}{mm}-{000000}</b> donnera <b>ABC0701-000099</b><br><b>{0000+100@1}-ZZZ/{dd}/XXX</b> donnera <b>0199-ZZZ/31/XXX</b><br><b>IN{yy}{mm}-{0000}-{t}</b> donnera <b>IN0701-0099-A</b> si le type d'entreprise est 'Responsable Inscripto' avec un code pour le type 'A_RI'
     DisableLinkToHelp=Masquer lien vers l'aide en ligne "<b>%s</b>"
    -ConfirmPurge=Êtes-vous sûr de vouloir exécuter cette purge? <br> Cela supprimera définitivement tous vos fichiers de données sans pouvoir les restaurer (fichiers ECM, fichiers joints ...).
     ListOfDirectoriesForModelGenODT=Liste des répertoires contenant des fichiers de modèles avec le format OpenDocument . <br><br> Mettez ici le chemin complet des répertoires .<br>Ajouter un retour chariot entre répertoire eah.<br> Pour ajouter un répertoire du module de GED , ajouter ici<b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br> Fichiers dans ces répertoires doit se terminer par <b>.odt</b> or <b>.ods</b>.
     HideDetailsOnPDF=Masquer les détails des lignes de produits sur le PDF généré
     PlaceCustomerAddressToIsoLocation=Utilisez french standard position (La Poste) pour le client position d'adresse
    -ButtonHideUnauthorized=Masquer les boutons pour les utilisateurs non administrateurs pour les actions non autorisées au lieu de afficher les boutons désactivés grisés
     OldVATRates=Ancien taux de TPS/TVH
     NewVATRates=Nouveau taux de TPS/TVH
     Boolean=Boolean (une case à cocher)
     ExtrafieldSeparator=Séparateur (pas un champ)
    -ExtrafieldRadio=Boutons radio (uniquement sur le choix)
     ExtrafieldCheckBoxFromList=Les cases à cocher du tableau
     ExtrafieldLink=Lier à un objet
     ComputedFormulaDesc=Vous pouvez entrer ici une formule utilisant d'autres propriétés de l'objet ou tout codage PHP pour obtenir une valeur calculée dynamique. Vous pouvez utiliser toutes les formules compatibles PHP, y compris le "?" L'opérateur de condition et l'objet global suivant: <strong> $ db, $ conf, $ langs, $ mysoc, $ user, $ object </ strong>. <br> <strong> AVERTISSEMENT </ strong>: Seules certaines propriétés de $ L'objet peut être disponible. Si vous avez besoin de propriétés non chargées, récupérez-vous l'objet dans votre formule comme dans le deuxième exemple. L'utilisation d'un champ calculé signifie que vous ne pouvez pas entrer de valeur d'interface. De plus, s'il existe une erreur de syntaxe, la formule ne peut renvoyer rien. <br> <br> Exemple de formule: $ $ object-> id <10? Round ($ object-> id / 2, 2): ($ object-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2) <br> <br> Exemple de recharger l'objet <br> (($ reloadedobj = new Societe ($ db)) && ($ reloadedobj-> fetch ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj-> Rowid: $ object-> id))> 0))? $ Reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1' <br> <br> Autre exemple de formule pour forcer la charge de l'objet et son objet parent: <br> (($ reloadedobj = New Task ($ db)) && ($ reloadedobj-> fetch ($ object-> id)> 0) && ($ secondloadedobj = new Project ($ db)) && ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project )> 0))? $ Secondloadedobj-> ref: 'Projet parent introuvable'
    @@ -122,17 +95,11 @@ ShowDetailsInPDFPageFoot=Ajoutez plus de détails au pied de page de fichiers PD
     NoDetails=Plus de détails dans le pied de page
     DisplayCompanyManagers=Afficher les noms des gestionnaires
     DisplayCompanyInfoAndManagers=Afficher l'adresse de la société et les noms des gestionnaires
    -EnableAndSetupModuleCron=Si vous souhaitez que cette facture récurrente soit générée automatiquement, le module * %s * doit être activé et correctement configuré. Sinon, la génération des factures doit être effectuée manuellement à partir de ce modèle avec le bouton * Créer *. Notez que même si vous avez activé la génération automatique, vous pouvez toujours lancer une génération manuelle sans risque. La génération de doublons pour la même période n'est pas possible.
     Use3StepsApproval=Par défaut, les bons de commande doivent être créés et approuvés par 2 utilisateurs différents (une étape / utilisateur à créer et une étape / utilisateur à approuver. Notez que si l'utilisateur a la permission de créer et d'approuver, un pas / utilisateur suffira) . Vous pouvez demander cette option pour introduire une troisième étape / approbation de l'utilisateur, si le montant est supérieur à une valeur dédiée (donc 3 étapes seront nécessaires: 1 = validation, 2 = première approbation et 3 = deuxième approbation si le montant est suffisant). <br> Configurez ceci pour vider si une approbation (2 étapes) est suffisante, définissez-la à une valeur très faible (0.1) si une deuxième approbation (3 étapes) est toujours requise.
     UseDoubleApproval=Utilisez une approbation de 3 étapes lorsque le montant (sans taxes) est supérieur à ...
     ClickToShowDescription=Cliquez pour afficher la description
    -DependsOn=Ce module nécessite le (s) module (s)
     RequiredBy=Ce module est requis par module (s)
    -TheKeyIsTheNameOfHtmlField=C'est le nom du champ HTML. Ce besoin d'avoir des connaissances techniques pour lire le contenu de la page HTML pour obtenir le nom clé d'un champ.
    -PageUrlForDefaultValues=Vous devez entrer ici l'URL relative de la page. Si vous incluez des paramètres dans l'URL, les valeurs par défaut seront effectives si tous les paramètres sont définis sur la même valeur. Exemples:
     EnableDefaultValues=Activer l'utilisation de valeurs par défaut personnalisées
    -EnableOverwriteTranslation=Activer l'utilisation de la traduction écrasée
    -GoIntoTranslationMenuToChangeThis=Une traduction a été trouvée pour la clé avec ce code, afin de modifier cette valeur, vous devez l'éditer pour la traduction à domicile.
     WarningSettingSortOrder=Avertissement, le réglage d'un ordre de tri par défaut peut entraîner une erreur technique lors de la page de la liste si un champ est un champ inconnu. Si vous rencontrez une telle erreur, revenez à cette page pour supprimer l'ordre de tri par défaut et restaurer le comportement par défaut.
     ProductDocumentTemplates=Modèles de documents pour générer un document produit
     FreeLegalTextOnExpenseReports=Texte juridique gratuit sur les rapports de dépenses
    @@ -140,32 +107,22 @@ WatermarkOnDraftExpenseReports=Filigrane sur les projets de rapports de dépense
     Module0Desc=Gestion des utilisateurs / employés et des groupes
     Module42Desc=Installations de journalisation (fichier, syslog, ...). Ces journaux sont à des fins techniques / de débogage.
     Module57Name=Ordres de paiement bancaire direct
    -Module57Desc=Gestion des ordres de paiement de débit direct. Il comprend la génération du fichier SEPA pour les pays européens.
     Module75Name=Notes de frais et déplacements
    -Module240Desc=Outil d'exportation de données Dolibarr (avec des assistants)
    -Module250Desc=Outil d'importation de données à Dolibarr (avec des assistants)
     Module510Name=Paiement des salaires des employés
    -Module510Desc=Enregistrer et suivre le paiement de vos salaires salariés
     Module770Name=Note de frais
    -Module2000Desc=Permet d'éditer une zone de texte à l'aide d'un éditeur avancé (basé sur CKEditor)
     Module2400Name=Evénements / Agenda
     Module2600Name=services API / Web ( serveur SOAP )
     Module2600Desc=Active le serveur de Web Services de Dolibarr
     Module2610Name=services API / Web ( serveur REST )
     Module2610Desc=Activer le serveur REST de services API de les services
     Module2660Name=WebServices appel ( client SOAP )
    -Module2660Desc=Activer le client Dolibarr de services Web (peut être utilisé pour pousser les données / demandes de serveurs externes . Fournisseur commandes prises en charge seulement pour le moment )
     Module3100Desc=Ajouter un bouton Skype aux utilisateurs / tiers / contacts / cartes membres
     Module4000Name=Gestion des ressources humaines
     Module10000Name=Sites Internet
     Module20000Name=Gestion des demandes de congès
    -Module20000Desc=Déclaration et suivi des congès des employés
     Module50100Desc=Module de point de vente (POS).
     Module55000Name=Sondage, enquête ou vote
    -Module55000Desc=Module pour faire des sondages en ligne, des enquêtes ou des votes (comme Doodle , Studs , Rdvz , ... )
     Module63000Desc=Gérer les ressources (imprimantes, voitures, salles, ...) vous pouvez ensuite partager vos événements
    -Permission41=Lisez les projets et les tâches (projet partagé et projets auxquels je suis contacté). Peut aussi entrer dans le temps, pour moi ou pour ma hiérarchie, sur les tâches assignées (feuille de temps)
    -Permission42=Créer / modifier des projets (projet partagé et projets pour lesquels je suis contact). Peut également créer des tâches et affecter des utilisateurs à des projets et à des tâches
     Permission45=Exportation de projets
     Permission76=Exporter des données
     Permission91=Consulter les charges et la TPS/TVH
    @@ -176,10 +133,8 @@ Permission144=Supprimer tous les projets et tâches (y compris privés dont je n
     Permission151=Lire les ordres de paiement de débit direct
     Permission152=Créer / modifier des ordres de paiement de débit direct
     Permission153=Envoyer / Transmettre les ordres de paiement de débit direct
    -Permission154=Enregistrer les crédits / Rejet des ordres de paiement par prélèvement automatique
     Permission167=Exportation de contacts
     Permission171=Lire les déplacements et les dépenses (le vôtre et vos subordonnés )
    -Permission262=Prolonger l'accès à tous les tiers (non seulement les tiers que l'utilisateur est un représentant de la vente). <br> Pas efficace pour les utilisateurs externes (toujours limités à eux-mêmes pour des propositions, des commandes, des factures, des contrats, etc.). Projets (règles uniquement sur les autorisations de projet, visibilité et affectation).
     Permission771=Lire les rapports de dépenses (le vôtre et vos subordonnés )
     Permission1322=Réouvrir une facture payée
     Permission20006=Administration des demandes de congé (balance de configuration et de mise à jour )
    @@ -188,8 +143,6 @@ Permission2414=Exportation d'actions/tâches des autres
     Permission59001=Consulter les propositions commerciales
     Permission63002=Créer / modifier des ressources
     Permission63004=Relier les ressources aux événements de l'agenda
    -DictionaryCompanyType=Types de tiers
    -DictionaryCompanyJuridicalType=Formes juridiques des tierces parties
     DictionaryCanton=État / Province
     DictionaryCivility=Titres personnels et professionnels
     DictionaryActions=Types d'événements de l'agenda
    @@ -197,27 +150,11 @@ DictionarySocialContributions=Types de charges sociales
     DictionaryVAT=Taux de TPS/TVH ou de Taxes de Ventes
     DictionaryFormatCards=Formats de cartes
     DictionaryAccountancyJournal=Revues comptables
    -DictionaryHolidayTypes=Types de feuilles
    -DictionaryOpportunityStatus=État d'opportunité pour le projet/chef de file
     SetupNotSaved=Le programme d'installation n'a pas été enregistré
    -VATManagement=Gestion TPS/TVH
    -VATIsUsedDesc=Par défaut, lors de la création de prospects, factures, commandes, etc., le taux de TVA suit la règle standard active: <br> Si le vendeur n'est pas assujetti à la TVA, la TVA prend par défaut 0. Fin de la règle. Si le (pays vendeur = Pays d'achat), la TVA par défaut est égale à la TVA du produit dans le pays de vente. Fin de la règle. <br> Si le vendeur et l'acheteur sont tous deux dans la Communauté européenne et les marchandises sont des produits de transport (voiture, bateau, avion), la TVA par défaut est 0 (la TVA devrait être payée par l'acheteur au bureau de son pays et non à la vendeur). Fin de la règle. Si le vendeur et l'acheteur sont tous deux dans la Communauté européenne et que l'acheteur n'est pas une société, la TVA par défaut est la TVA du produit vendu. Fin de la règle. Si le vendeur et l'acheteur sont tous deux dans la Communauté européenne et l'acheteur est une société, la TVA est 0 par défaut. Fin de la règle. En tout autre cas, le défaut proposé est la TVA = 0. Fin de la règle.
    -VATIsNotUsedDesc=Le taux de TPS/TVH proposé par défaut est 0. C'est le cas d'associations, particuliers ou certaines petites sociétés.
    -LocalTax1IsUsedDesc=Utilisation d'un 2ème type taxe (autre que TPS/TVH)
    -LocalTax1IsNotUsedDesc=Pas d'utilisation de 2ème type taxe (autre que TPS/TVH)
    -LocalTax2IsUsedDesc=Utilisation d'un 3ème type taxe  (autre que TPS/TVH)
    -LocalTax2IsNotUsedDesc=Pas d'utilisation de 3ème type taxe  (autre que TPS/TVH)
     CurrentNext=Actuel / Suivant
     DefaultMaxSizeList=Longueur maximale des listes
    -DefaultMaxSizeShortList=Longueur maximale par défaut des listes
     CompanyObject=Objet de la compagnie
     ShowBugTrackLink=Afficher le lien "Signaler un défaut"
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolérance retardée (en jours) avant l'alerte sur les événements planifiés (événements agenda) non encore terminés
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolérance retardée (en jours) avant l'alerte sur le projet non fermé dans le temps
    -Delays_MAIN_DELAY_TASKS_TODO=Tolérance retardée (en jours) avant l'alerte sur les tâches planifiées (tâches du projet) non complétées encore
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Tolérance de retard (en jours) avant l'alerte sur les commandes non traitées encore
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolérance de retard (en jours) avant alerte pour les rapports de dépenses à approuver
    -SetupDescription1=La zone de configuration est pour les paramètres de configuration initiale avant de commencer à utiliser Dolibarr.
     InfoDolibarr=À propos de Dolibarr
     InfoBrowser=À propos du navigateur
     InfoWebServer=À propos du serveur Web
    @@ -238,11 +175,8 @@ TranslationString=Chaîne de traduction
     WarningAtLeastKeyOrTranslationRequired=Un critère de recherche est requis au moins pour une clé ou une chaîne de traduction
     NewTranslationStringToShow=Nouvelle chaîne de traduction à afficher
     OriginalValueWas=La traduction originale est écrasée. La valeur d'origine était: <br> <br> %s
    -TransKeyWithoutOriginalValue=Vous avez forcé une nouvelle traduction pour la clé de traduction '<strong>%s</strong>' qui n'existe pas dans aucun fichier de langue
     TotalNumberOfActivatedModules=Application / modules activés: <b>%s</b> / <b>%s</b>
    -OnlyFollowingModulesAreOpenedToExternalUsers=Remarque, seuls les modules suivants sont ouverts aux utilisateurs externes (quelle que soit l'autorisation de ces utilisateurs) et uniquement si les autorisations ont été accordées:
    -AskForPreferredShippingMethod=Demandez la méthode d'envoi préférée pour les tiers.
    -PasswordGenerationNone=Aucune suggestion de mot de passe généré . Le mot de passe doit être saisi manuellement.
    +SearchOptim=Optimization des recherches
     PasswordGenerationPerso=Retour un mot de passe en fonction de votre configuration personnellement défini.
     PasswordPatternDesc=Description du modèle de mot de passe
     DisableForgetPasswordLinkOnLogonPage=Ne pas afficher le lien "Mot de passe oublié" sur la page de connexion
    @@ -251,7 +185,6 @@ NotificationsDesc=La fonction de notification des messages électroniques vous p
     NotificationsDescUser=* Par utilisateur, un utilisateur à l'heure.
     NotificationsDescGlobal=* Ou en définissant des emails de cible globaux dans la page de configuration du module.
     MustBeUnique=Doit être unique?
    -MustBeMandatory=Obligatoire de créer des tiers?
     MustBeInvoiceMandatory=Obligatoire de valider les factures?
     PaymentsPDFModules=Modèles de documents de paiement
     PaymentsNumberingModule=Modèles de numérotation des paiements
    @@ -261,20 +194,15 @@ WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Demandez une source d'entrepôt pour l'ordr
     ShippableOrderIconInList=Ajouter un icône dans la liste des commandes qui indique si la commande est expédiable.
     LDAPAdminDnExample=DN complet (ex: cn = admin, dc = exemple, dc = com ou cn = Administrateur, cn = Utilisateurs, dc = exemple, dc = com pour le répertoire actif)
     LDAPFieldTitle=Poste
    -CacheByServerDesc=Par exemple, en utilisant la directive Apache "ExpiresByType image / gif A2592000"
    -DefaultValuesDesc=Vous pouvez définir / forcer ici la valeur par défaut que vous voulez obtenir lorsque vous créez un nouvel enregistrement, et / ou défairez les filtres ou le tri lors de votre liste.
     DefaultSortOrder=Ordres de tri par défaut
     DefaultFocus=Champs de mise au point par défaut
     MergePropalProductCard=Activez dans le produit/service, l'option onglet de fichiers attachés pour fusionner le produit PDF le document à la proposition PDF azur si le produit/service est dans la proposition
    -ViewProductDescInThirdpartyLanguageAbility=Visualisation des descriptions de produits dans la langue de tiers
    -UseSearchToSelectProduct=Attendez que vous appuyez sur une touche avant de charger le contenu de la liste des combo du produit (cela peut augmenter les performances si vous avez un grand nombre de produits, mais cela est moins pratique)
     UseUnits=Définir une unité de mesure pour la quantité lors de la commande, l'édition de la proposition ou les lignes de facture
     IsNotADir=n'est pas un répertoire
     BarcodeDescDATAMATRIX=Codebarre de type Datamatrix
     BarcodeDescQRCODE=Codebarre de type QRcode
     WithdrawalsSetup=Configuration du module Ordres de paiement de débit direct
     SendingsAbility=Fiches d'expédition de soutien pour les livraisons aux clients
    -NoNeedForDeliveryReceipts=Dans la plupart des cas, les feuilles d'expédition sont utilisées à la fois comme feuilles pour les livraisons clients (liste des produits à envoyer) et les feuilles reçues et signées par le client. Donc, les reçus des livraisons de produits sont une fonctionnalité en double et sont rarement activés.
     FCKeditorForMail=Création / édition WYSIWIG pour tous les courriers (sauf Outils-> eMailing)
     NotTopTreeMenuPersonalized=Menus personnalisés non liés à une entrée de menu supérieure
     ConfirmDeleteMenu=Êtes-vous sûr de vouloir supprimer l'entrée du menu <b>%s</b>?
    @@ -283,15 +211,9 @@ TaxSetup=Configuration du module Taxes, charges sociales et dividendes
     OptionVatMode=TPS/TVH due
     OptionVatDefaultDesc=TPS/TVH sur encaissement, l'exigibilité de la TPS/TVH est:<br>- sur livraison pour les biens (en pratique on utilise la date de facturation)<br>- sur paiement pour les services
     OptionVatDebitOptionDesc=TPS/TVH sur débit, l'exigibilité de la TPS/TVH est:<br>- sur livraison pour les biens (en pratique on utilise la date de facturation)<br>- sur facturation (débit) pour les services
    -SummaryOfVatExigibilityUsedByDefault=Moment d'exigibilité par défaut de la TPS/TVH pour l'option choisie:
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Réglez automatiquement cette valeur par défaut pour le type d'événement dans en événement de lors de la création »
    -AGENDA_DEFAULT_FILTER_TYPE=Régler automatiquement ce type d'événement dans le filtre de recherche de la vue agenda
    -AGENDA_DEFAULT_FILTER_STATUS=Régler automatiquement le statut d'événement dans le filtre de recherche de la vue agenda
     AGENDA_SHOW_LINKED_OBJECT=Afficher l'objet lié dans la vue d'agenda
     ClickToDialUrlDesc=Url appelle quand un clic sur le picto du téléphone est terminé. Dans l'URL, vous pouvez utiliser des tags sur <b> __ PHONETO __ </ b> qui sera remplacé par le numéro de téléphone de la personne à appeler <b> __ PHONEFROM __ </ b> qui sera remplacé par le numéro de téléphone de l'appel Personne (votre) <br> <b> __ LOGIN __ </ b> qui sera remplacé par login clicktodial (défini sur la carte utilisateur) <br> <b> __ PASS __ </ b> qui sera remplacé par le mot de passe clicktodial (défini sur l'utilisateur carte).
    -ClickToDialDesc=Ce module permet de faire des numéros de téléphone cliquable . Un clic sur cette icône fera appel à rendre votre téléphone pour appeler le numéro de téléphone . Cela peut être utilisé pour appeler un système de Dolibarr du centre d'appels qui peut appeler le numéro de téléphone sur un système SIP par exemple.
     ClickToDialUseTelLink=Utilisez juste un lien "tel: " sur les numéros de téléphone
    -ClickToDialUseTelLinkDesc=Utilisez cette méthode si vos utilisateurs ont un softphone ou une interface de logiciel installé sur un même ordinateur que le navigateur , et a appelé lorsque vous cliquez sur un lien dans votre navigateur qui commencent par "tel: " . Si vous avez besoin d'une solution de serveur complet (pas besoin d'installation locale du logiciel ) , vous devez définir ce "Non" et remplir champ suivant.
     EndPointIs=Les clients SOAP doivent envoyer leurs demandes au point d'extrémité Dolibarr disponible à l'URL
     ApiSetup=Configuration du module API
     ApiDesc=En activant ce module , Dolibarr devenir un serveur REST pour fournir des services Web divers .
    @@ -312,8 +234,6 @@ ShowFiscalYear=Afficher la période comptable
     SalariesSetup=Configuration du module salariés
     ListOfNotificationsPerUser=Liste des notifications par utilisateur *
     ListOfNotificationsPerUserOrContact=Liste des notifications par utilisateur * ou par contact **
    -GoOntoUserCardToAddMore=Allez sur l'onglet "Notifications" d'un utilisateur pour ajouter ou supprimer des notifications pour les utilisateurs
    -GoOntoContactCardToAddMore=Accédez à l'onglet "Notifications" d'un tiers pour ajouter ou supprimer des notifications de contacts / adresses
     ConfFileMustContainCustom=L'installation ou la construction d'un module externe à partir de l'application doit sauvegarder les fichiers du module dans le répertoire <strong>%s</strong>. Pour que ce répertoire soit traité par Dolibarr, vous devez configurer votre <strong> conf / conf.php </strong> pour ajouter les 2 lignes de directive: <br><strong> $ dolibarr_main_url_root_alt = '/ custom'; </strong><br><strong> $ dolibarr_main_document_root_alt = '%s / custom'; </strong>
     HighlightLinesOnMouseHover=Mettez en surbrillance les lignes de table lorsque déplacement de la souris passe au-dessus
     HighlightLinesColor=Mettez en surbrillance la couleur de la ligne lorsque la souris passe au-dessus (gardez vide pour ne pas mettre en évidence)
    @@ -328,15 +248,12 @@ BackgroundTableLineEvenColor=Couleur de fond même pour les lignes de table
     MinimumNoticePeriod=Période minimale de préavis  (Votre demande de congé doit être fait avant ce délai)
     NbAddedAutomatically=Nombre de jours ajoutés aux compteurs d'utilisateurs (automatiquement) chaque mois
     EnterAnyCode=Ce champ contient une référence pour identifier la ligne. Entrez une valeur de votre choix, mais sans caractères spéciaux.
    -UnicodeCurrency=Saisissez ici entre accolades , liste de nombre d'octets qui représentent le symbole monétaire . Pour exemple : pour $ , entrez [ 36 ] - pour le Brésil réel R $ [ 82,36 ] - pour € , entrez [ 8364 ]
     ColorFormat=La couleur RVB est en format HEX, par exemple: FF0000
     PositionIntoComboList=Position de la ligne dans les listes déroulantes
     SellTaxRate=Taxes de vente
     UrlTrackingDesc=Si le fournisseur ou le service de transport offrent une page ou un site Web pour vérifier l'état de votre expédition, vous pouvez entrer ici. Vous pouvez utiliser la touche {TrackID} dans les paramètres d'URL afin que le système sera remplacé par la valeur de l'utilisateur du numéro de suivi est entré dans la carte de l'expédition .
    -OpportunityPercent=Lorsque vous créez une opportunité , vous défini un montant estimatif de projet / plomb. Selon le statut des chances , ce montant peut être multiplier par ce taux pour évaluer le montant global toutes vos possibilités peuvent générer. La valeur est pour cent ( entre 0 et 100 ) .
     TemplateForElement=Ce gabarit est dédié à cet élément
     TypeOfTemplate=Type de thèmes
    -TemplateIsVisibleByOwnerOnly=Thème visible par propriétaire seulement
     FillFixTZOnlyIfRequired=Exemple: +2 (remplir seulement si le problème est connu)
     ExpectedChecksum=Somme attendue
     CurrentChecksum=Somme actuel
    @@ -346,10 +263,7 @@ ByDefaultInList=Afficher par défaut sur la liste vue
     TitleExampleForMajorRelease=Exemple de message que vous pouvez utiliser pour annoncer cette version majeure ( se sentir libre de l'utiliser sur vos sites web )
     TitleExampleForMaintenanceRelease=Exemple de message que vous pouvez utiliser pour annoncer cette version de maintenance ( se sentir libre de l'utiliser sur vos sites web )
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s est disponible. La version %s est une version majeure avec beaucoup de nouvelles fonctionnalités pour les utilisateurs et les développeurs. Vous pouvez le télécharger à partir de la zone de téléchargement du https://www.dolibarr.org portal (sous-répertoire Stable versions). Vous pouvez lire <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> pour obtenir la liste complète des modifications.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s est disponible. La version %s est une version de maintenance, donc elle contient uniquement des corrections de bogues. Nous vous recommandons tout le monde en utilisant une ancienne version pour passer à celle-ci. Comme toute version de maintenance, aucune nouvelle fonctionnalité, ni changement de structure de données n'est présent dans cette version. Vous pouvez le télécharger à partir de la zone de téléchargement du https://www.dolibarr.org portal (sous-répertoire Stable versions). Vous pouvez lire <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> pour obtenir la liste complète des modifications.
    -MultiPriceRuleDesc=Lorsque l'option " Plusieurs niveaux de prix par produit / service " est activée, vous pouvez définir des prix différents (un par niveau de prix ) pour chaque produit . Pour gagner du temps , vous pouvez entrer ici la règle pour avoir le prix pour chaque niveau autocalculated en fonction du prix du premier niveau , de sorte que vous devrez entrer seulement le prix pour le premier niveau sur chaque produit . Cette page est ici pour gagner du temps et peut être utile que si vos prix pour chaque leve sont liés à premier niveau . Vous pouvez ignorer cette page dans la plupart des cas .
     ModelModulesProduct=Modèles de documents produits
    -ToGenerateCodeDefineAutomaticRuleFirst=Pour être en mesure de générer automatiquement des codes , vous devez d'abord définir un gestionnaire à l'auto de définir le numéro de code à barres .
     SeeSubstitutionVars=Voir la note * pour la liste des variables de substitution possibles
     AddRemoveTabs=Ajouter ou supprimer des onglets
     AddBoxes=Ajouter des widgets
    @@ -364,17 +278,8 @@ AddOtherPagesOrServices=Ajouter d'autres pages ou services
     AddModels=Ajouter un document ou des modèles de numérotation
     AddSubstitutions=Ajouter des substitutions de clés
     DetectionNotPossible=La détection n'est pas possible
    -UrlToGetKeyToUseAPIs=Url pour obtenir un jeton pour utiliser l'API (une fois que le jeton a été reçu, il est enregistré sur la table des utilisateurs de la base de données et doit être fourni sur chaque appel d'API)
     ListOfAvailableAPIs=Liste des API disponibles
    -activateModuleDependNotSatisfied=Le module "%s" dépend du module "%s" qui manque, donc le module "%1$s" peut ne pas fonctionner correctement. Veuillez installer le module "%2$s" ou désactiver le module "%1$s" si vous souhaitez être à l'abri de toute surprise
    -CommandIsNotInsideAllowedCommands=La commande que vous essayez d'exécuter n'est pas dans la liste des commandes autorisées définies dans le paramètre <strong> $ dolibarr_main_restrict_os_commands </ strong> dans le fichier <strong> conf.php </ strong>.
     LandingPage=Page d'atterrissage
    -SamePriceAlsoForSharedCompanies=Si vous utilisez un module multicompanique, avec le choix "Prix unique", le prix sera également le même pour toutes les entreprises si les produits sont partagés entre les environnements
     ModuleEnabledAdminMustCheckRights=Le module a été activé. Les autorisations pour les modules activés ont été données uniquement aux utilisateurs administratifs. Vous devrez peut-être accorder des autorisations aux autres utilisateurs ou groupes manuellement si nécessaire.
    -UserHasNoPermissions=Cet utilisateur n'a pas d'autorisation définie
    -TypeCdr=Utilisez "Aucun" si la date du terme de paiement est la date de facture plus un delta en jours (delta est le champ "Nb de jours") <br> Utilisez "Fin de mois", si, après le delta, la date doit être augmentée Pour atteindre la fin du mois (+ un «décalage» optionnel en jours) <br> Utilisez "Current / Next" pour que la date de terme de paiement soit le premier Nième du mois (N est stocké dans le champ "Nb de jours")
     BaseCurrency=Monnaie de référence de la société (entrer dans la configuration de l'entreprise pour modifier cela)
    -WarningNoteModuleInvoiceForFrenchLaw=Ce module %s est conforme aux lois françaises (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=Ce module %s est conforme aux lois françaises (Loi Finance 2016) car le module Les journaux non réversibles est automatiquement activé.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Vous essayez d'installer le module %s qui est un module externe. L'activation d'un module externe signifie que vous faites confiance à l'éditeur du module et que vous êtes sûr que ce module ne modifie pas négativement le comportement de votre application et est conforme aux lois de votre pays (%s). Si le module comporte une fonctionnalité non juridique, vous devenez responsable de l'utilisation d'un logiciel non juridique.
     UseSearchToSelectResource=Utilisez un formulaire de recherche pour choisir une ressource (plutôt qu'une liste déroulante).
    diff --git a/htdocs/langs/fr_CA/companies.lang b/htdocs/langs/fr_CA/companies.lang
    index 6047b3d8f71..81c395172a7 100644
    --- a/htdocs/langs/fr_CA/companies.lang
    +++ b/htdocs/langs/fr_CA/companies.lang
    @@ -3,8 +3,6 @@ ConfirmDeleteCompany=Êtes-vous sûr de vouloir supprimer cette entreprise et to
     ConfirmDeleteContact=Êtes-vous sûr de vouloir supprimer ce contact et toutes les informations héritées?
     CreateThirdPartyAndContact=Créer un tiers + un contact enfant
     AliasNames=Nom de l'alias (commercial, marque, ... )
    -AliasNameShort=Nom de l'alias
    -ToCreateContactWithSameName=Créeront automatiquement un contact / adresse avec les mêmes informations que le tiers sous le tiers. Dans la plupart des cas, même si votre tiers est une personne physique, créer un tiers seul suffit.
     PostOrFunction=Poste
     State=États/Provinces
     StateShort=États
    @@ -18,7 +16,6 @@ LocalTax1IsUsed=Assujeti à la TVQ
     LocalTax2IsUsed=Assujeti à une troisième taxe
     ProfId6Short=TVQ
     ProfId6=TVQ
    -CompanyHasAbsoluteDiscount=Ce client dispose d'un rabais disponible (notes de crédits ou acomptes) pour <b> %s</b>%s
     CompanyHasNoAbsoluteDiscount=Ce client n'a pas ou plus de remise fixe disponible
     ContactId=ID de contact
     FromContactName=Prénom:
    @@ -26,20 +23,15 @@ ContactForOrdersOrShipments=Contact de commandes ou de livraison
     NoContactForAnyOrderOrShipments=Ce contact n'est contact d'aucune commande ou livraison
     StatusProspect1=Pour être contacté
     ChangeToContact=Changer l'état sur 'À contacter'
    -ExportDataset_company_1=Les tiers (Entreprises / fondations / personnes physiques) et les propriétés
    -ImportDataset_company_1=Les tiers (Entreprises / fondations / personnes physiques) et les propriétés
     AddAddress=Ajoutez l'adresse
     AllocateCommercial=Attribué au représentant des ventes
    -YouMustAssignUserMailFirst=Vous devez d'abord créer un email pour cet utilisateur afin d'y ajouter des notifications par courrier électronique.
     YouMustCreateContactFirst=Pour pouvoir ajouter des notifications par courrier électronique, vous devez d'abord définir des contacts avec des courriels valides pour le tiers
    -LastModifiedThirdParties=Dernier %s tiers modifiés
     InActivity=Ouverte
     ThirdPartyIsClosed=Le tiers est fermé
     ProductsIntoElements=Liste des produits/services en %s
     OutstandingBillReached=Max. Pour la facture exceptionnelle atteinte
     MergeOriginThirdparty=Dupliquer tiers (tiers que vous souhaitez supprimer)
     MergeThirdparties=Fusionner des tiers
    -ConfirmMergeThirdparties=Êtes-vous sûr de vouloir fusionner ce tiers avec le présent? Tous les objets liés (factures, commandes, ...) seront transférés vers un tiers actuel, puis la tierce partie sera supprimée.
     SaleRepresentativeLogin=Connexion du représentant des ventes
     SaleRepresentativeFirstname=Prénom du représentant des ventes
     SaleRepresentativeLastname=Nom de représentant commercial
    diff --git a/htdocs/langs/fr_CA/compta.lang b/htdocs/langs/fr_CA/compta.lang
    index 49ac7c03439..b7119dae022 100644
    --- a/htdocs/langs/fr_CA/compta.lang
    +++ b/htdocs/langs/fr_CA/compta.lang
    @@ -45,8 +45,6 @@ ConfirmDeleteSocialContribution=Êtes-vous sûr de vouloir supprimer cette charg
     ExportDataset_tax_1=Charges sociales et paiements
     CalcModeVATDebt=Mode <b>%sTPS/TVH sur débit%s</b>.
     CalcModeVATEngagement=Mode <b>%s TPS/TVH sur encaissement%s</b>.
    -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation on actual payments made even if they are not yet accounted in Ledger.
    -SeeReportInDueDebtMode=See %sanalysis of invoices%s for a calculation based on known recorded invoices even if they are not yet accounted in Ledger.
     RulesResultDue=- Il comprend les factures, les dépenses, la TVA, les dons, qu'ils soient payés ou non. Comprend également les salaires payés. <br> - Il est basé sur la date de validation des factures et la TVA et à la date d'échéance des dépenses. Pour les salaires définis avec le module Salaire, la date de valeur du paiement est utilisée.
     RulesResultInOut=- Il comprend les paiements réels effectués sur les factures, les dépenses, la TVA et les salaires. <br> - Il est basé sur les dates de paiement des factures, des dépenses, de la TVA et des salaires. La date de donation pour le don.
     RulesCADue=- Il comprend les factures exigibles du client, qu'elles soient payées ou non. <br> - Il est basé sur la date de validation de ces factures.<br>
    diff --git a/htdocs/langs/fr_CA/errors.lang b/htdocs/langs/fr_CA/errors.lang
    index 4edfcb3a650..3ba8a944739 100644
    --- a/htdocs/langs/fr_CA/errors.lang
    +++ b/htdocs/langs/fr_CA/errors.lang
    @@ -32,7 +32,6 @@ ErrorBadDateFormat=La valeur '%s' a un mauvais format de date
     ErrorWrongDate=La date n'est pas correcte!
     ErrorFailedToWriteInDir=Erreur d'écriture dans le répertoire %s
     ErrorFoundBadEmailInFile=Trouver une syntaxe de courrier électronique incorrecte pour les lignes %s dans le fichier (ligne d'exemple %s avec email = %s)
    -ErrorUserCannotBeDelete=L'utilisateur ne peut pas être supprimé. Peut-être qu'il soit associé à des entités Dolibarr.
     ErrorFieldsRequired=Certains champs obligatoires n'ont pas été remplis.
     ErrorSubjectIsRequired=Le sujet du courrier électronique est requis
     ErrorFailedToCreateDir=Impossible de créer un répertoire. Vérifiez que l'utilisateur du serveur Web a la permission d'écrire dans le répertoire de documents Dolibarr. Si le paramètre <b> safe_mode </ b> est activé sur ce PHP, vérifiez que les fichiers Dolibarr php appartiennent à l'utilisateur du serveur Web (ou au groupe).
    @@ -54,18 +53,12 @@ ErrorNoValueForSelectType=Remplissez la valeur pour sélectionner la liste
     ErrorNoValueForCheckBoxType=Veuillez remplir la valeur pour la liste des cases à cocher
     ErrorNoValueForRadioType=Remplissez la valeur pour la liste radio
     ErrorBadFormatValueList=La valeur de la liste ne peut pas contenir plus d'une virgule: <u>%s</u>, mais nécessite au moins une: clé, valeur
    -ErrorFieldCanNotContainSpecialCharacters=Le champ <b>%s</b> ne doit pas contenir de caractères spéciaux.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Le champ <b>%s</b> ne doit pas contenir de caractères spéciaux, ni les caractères majuscules et ne peut contenir que des nombres.
     ErrorExportDuplicateProfil=Ce nom de profil existe déjà pour ce jeu d'exportation.
     ErrorLDAPSetupNotComplete=La correspondance Dolibarr-LDAP n'est pas complète.
     ErrorLDAPMakeManualTest=Un fichier .ldif a été généré dans le répertoire %s. Essayez de le charger manuellement à partir de la ligne de commande pour avoir plus d'informations sur les erreurs.
    -ErrorCantSaveADoneUserWithZeroPercentage=Impossible d'enregistrer une action avec "statut non démarré" si le champ "fait par" est également rempli.
     ErrorRefAlreadyExists=La référence utilisée pour la création existe déjà.
    -ErrorRecordHasChildren=Impossible de supprimer l'enregistrement puisqu'il a des enfants.
    -ErrorRecordIsUsedCantDelete=Impossible de supprimer l'enregistrement. Il est déjà utilisé ou inclus dans un autre objet.
     ErrorModuleRequireJavascript=Javascript ne doit pas être désactivé pour que cette fonction fonctionne. Pour activer / désactiver Javascript, accédez au menu Accueil-> Configuration-> Affichage.
     ErrorPasswordsMustMatch=Les deux mots de passe dactylographiés doivent correspondre les uns aux autres
    -ErrorContactEMail=Une erreur technique s'est produite. Veuillez contacter l'administrateur pour suivre le courrier électronique <b>%s</b> en fournir le code d'erreur <b>%s</b>dans votre message, ou encore mieux en ajoutant une copie d'écran de cette page.
     ErrorWrongValueForField=Valeur incorrecte pour le numéro de champ <b>%s</b> (valeur '<b>%s</b>' ne correspond pas à la règle regex <b>%s</b>)
     ErrorFieldValueNotIn=Valeur incorrecte pour le numéro de champ <b>%s</b> (valeur '<b>%s</b>' n'est pas une valeur disponible dans le champ <b>%s</b> de la table <b> %s</b> )
     ErrorFieldRefNotIn=Valeur incorrecte pour le numéro de champ <b>%s</b> (valeur '<b> %s</b>' n'est pas un <b>%s</b> référence existante)
    @@ -76,7 +69,6 @@ ErrorModuleSetupNotComplete=La configuration du module semble être inachevée.
     ErrorBadMaskBadRazMonth=Erreur, mauvaise valeur de réinitialisation
     ErrorMaxNumberReachForThisMask=Nombre maxi pour ce masque
     ErrorCounterMustHaveMoreThan3Digits=Le compteur doit avoir plus de 3 chiffres
    -ErrorDeleteNotPossibleLineIsConsolidated=L'effacement n'est pas possible car l'enregistrement est lié à une transition bancaire conciliée
     ErrorProdIdAlreadyExist=%s est affecté à un autre tiers
     ErrorFailedToLoadRSSFile=Impossible d'obtenir un flux RSS. Essayez d'ajouter constante MAIN_SIMPLEXMLLOAD_DEBUG si les messages d'erreur ne fournissent pas suffisamment d'informations.
     ErrorForbidden=Accès refusé. <br> Vous essayez d'accéder à une page, zone ou fonctionnalité d'un module désactivé ou sans être dans une session authentifiée ou non autorisée pour votre utilisateur.
    @@ -114,14 +106,12 @@ ErrorBadFormat=Mauvais format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Erreur, ce membre n'est pas encore lié à un tiers. Associez le membre à un tiers existant ou créez un nouveau tiers avant de créer une souscription avec facture.
     ErrorThereIsSomeDeliveries=Une erreur, des livraisons sont liées à cette expédition. La suppression a été refusée.
     ErrorCantDeletePaymentReconciliated=Impossible de supprimer un paiement qui a généré une entrée bancaire qui a été réconciliée
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Impossible de supprimer un paiement partagé par au moins une facture avec le statut Payé
     ErrorPriceExpression1=Impossible d'assigner à la constante '%s'
     ErrorPriceExpression2=Impossible de redéfinir la fonction intégrée '%s'
     ErrorPriceExpression3=Variable non définie '%s' en définition de fonction
     ErrorPriceExpression5=Inattendue '%s'
     ErrorPriceExpression6=Mauvais nombre d'arguments (%s donné, %s prévu)
     ErrorPriceExpression8=Opérateur inattendu '%s'
    -ErrorPriceExpression10=Iperator '%s' manque d'opérande
     ErrorPriceExpression11=En attendant '%s'
     ErrorPriceExpression17=Variable non définie '%s'
     ErrorPriceExpression19=Expression non trouvée
    @@ -134,10 +124,8 @@ ErrorGlobalVariableUpdater3=Les données demandées n'ont pas été trouvées en
     ErrorGlobalVariableUpdater5=Aucune variable globale sélectionnée
     ErrorFieldMustBeANumeric=Le champ <b>%s</b> doit être une valeur numérique
     ErrorMandatoryParametersNotProvided=Paramètre (s) obligatoire (s) non fourni
    -ErrorOppStatusRequiredIfAmount=Vous avez fixé un montant estimé pour cette opportunité / chef de file. Vous devez donc entrer son statut
     ErrorFailedToLoadModuleDescriptorForXXX=Impossible de charger la classe descripteur du module pour %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Définition incorrecte de la matrice de menus dans le descripteur de module (mauvaise valeur pour la clé fk_menu)
    -ErrorSavingChanges=Une erreur s'est produite lors de l'enregistrement des modifications
     ErrorWarehouseRequiredIntoShipmentLine=Un entrepôt est requis sur la ligne à expédier
     ErrorFileMustHaveFormat=Le fichier doit avoir un format %s
     ErrorsThirdpartyMerge=Impossible de fusionner les deux enregistrements. Demande annulée.
    @@ -167,9 +155,7 @@ WarningBookmarkAlreadyExists=Un marque-page avec ce titre ou cette cible (URL) e
     WarningPassIsEmpty=Attention, le mot de passe de la base de données est vide. C'est un trou de sécurité. Vous devez ajouter un mot de passe à votre base de données et modifier votre fichier conf.php pour refléter cela.
     WarningConfFileMustBeReadOnly=Avertissement, votre fichier de configuration (<b> htdocs / conf / conf.php </ b>) peut être écrasé par le serveur Web. C'est un trou de sécurité sérieux. Modifiez les autorisations sur le fichier pour être en mode lecture seule pour l'utilisateur du système d'exploitation utilisé par le serveur Web. Si vous utilisez le format Windows et FAT pour votre disque, vous devez savoir que ce système de fichiers ne permet pas d'ajouter des autorisations au fichier, donc ne peut pas être complètement sécurisé.
     WarningsOnXLines=Avertissements sur <b>%s</b> enregistrement source (s)
    -WarningNoDocumentModelActivated=Aucun modèle, pour la génération de document, n'a été activé. Un modèle sera choisi par défaut jusqu'à ce que vous vérifiez la configuration de votre module.
     WarningLockFileDoesNotExists=Attention, une fois la configuration terminée, vous devez désactiver l'installation / la migration des outils en ajoutant un fichier <b> install.lock</b> dans le répertoire <b> %s</b>. Le fait de manquer ce fichier est un trou de sécurité.
    -WarningUntilDirRemoved=Tous les avertissements de sécurité (visibles uniquement par les utilisateurs d'administration) resteront actifs tant que la vulnérabilité est présente (ou que constante MAIN_REMOVE_INSTALL_WARNING est ajoutée dans Configuration-> Autre configuration).
     WarningCloseAlways=Avertissement, la fermeture se fait même si le montant diffère entre les éléments source et cible. Activez cette fonctionnalité avec prudence.
     WarningUsingThisBoxSlowDown=Avertissement, l'utilisation de cette boîte ralentit sérieusement toutes les pages montrant la boîte.
     WarningClickToDialUserSetupNotComplete=L'installation des informations ClickToDial pour votre utilisateur n'est pas complète (voir l'onglet ClickToDial sur votre carte utilisateur).
    diff --git a/htdocs/langs/fr_CA/help.lang b/htdocs/langs/fr_CA/help.lang
    index 99eb4ab0d71..9c18c5031d5 100644
    --- a/htdocs/langs/fr_CA/help.lang
    +++ b/htdocs/langs/fr_CA/help.lang
    @@ -13,9 +13,6 @@ NeedHelpCenter=Besoin d'aide ou de soutien?
     TypeHelpOnly=Aide seulement
     TypeHelpDev=Aide + Développement
     TypeHelpDevForm=Aide + Développement + Formation
    -ToGetHelpGoOnSparkAngels1=Certaines entreprises peuvent fournir un soutien en ligne rapide (parfois immédiat) et plus efficace en prenant le contrôle de votre ordinateur. Ces assistants peuvent être trouvés sur le site Web <b>%s</b>:
    -ToGetHelpGoOnSparkAngels3=Vous pouvez également consulter la liste de tous les entraîneurs disponibles pour Dolibarr, pour ce clic sur le bouton
    -ToGetHelpGoOnSparkAngels2=Parfois, il n'y a pas d'entreprise disponible au moment où vous faites votre recherche, alors pensez à changer le filtre pour rechercher "toutes les disponibilités". Vous pourrez envoyer plus de demandes.
     BackToHelpCenter=Sinon, cliquez ici pour aller <a href="%s"> retour à la page d'accueil du Centre d'aide </a>.
     LinkToGoldMember=Vous pouvez appeler l'un des entraîneurs présélectionnés par Dolibarr pour votre langue (%s) en cliquant sur son Widget (l'état et le prix maximum sont automatiquement mis à jour):
     PossibleLanguages=Langues prises en charge
    diff --git a/htdocs/langs/fr_CA/interventions.lang b/htdocs/langs/fr_CA/interventions.lang
    index e659b59bde5..38f5120a2de 100644
    --- a/htdocs/langs/fr_CA/interventions.lang
    +++ b/htdocs/langs/fr_CA/interventions.lang
    @@ -34,8 +34,6 @@ TypeContact_fichinter_external_CUSTOMER=Suivi du contact client
     PrintProductsOnFichinter=Imprimez également les lignes de type "produit" (non seulement les services) sur la carte d'intervention
     PrintProductsOnFichinterDetails=Interventions générées à partir des commandes
     UseServicesDurationOnFichinter=Utiliser la durée des services pour les interventions générées à partir des commandes
    -NbOfinterventions=Nb de cartes d'intervention
    -NumberOfInterventionsByMonth=Nb de cartes d'intervention par mois (date de validation)
     InterId=ID d'intervention
     InterRef=Intervention réf.
     InterDateCreation=Intervention de création de date
    diff --git a/htdocs/langs/fr_CA/main.lang b/htdocs/langs/fr_CA/main.lang
    index 25d94a95349..c7466f9df38 100644
    --- a/htdocs/langs/fr_CA/main.lang
    +++ b/htdocs/langs/fr_CA/main.lang
    @@ -23,7 +23,6 @@ DatabaseConnection=Connexion à la base de donnée
     ErrorCanNotCreateDir=Impossible de créer le dir %s
     ErrorCanNotReadDir=Impossible de lire le dir %s
     ErrorNoSocialContributionForSellerCountry=Erreur, aucun type de charges défini pour le pays '%s'.
    -ErrorCannotAddThisParentWarehouse=Vous essayez d'ajouter un entrepôt parent qui est déjà un enfant de l'actuel
     NotAuthorized=Vous n'êtes pas autorisé à le faire.
     SeeHere=Regardez ici
     ClickHere=Cliquez ici
    @@ -40,7 +39,6 @@ NotClosed=Pas fermé
     RemoveLink=Supprimer lien
     AddToDraft=Ajouter au projet
     CloseBox=Supprimer le widget de votre tableau de bord
    -ConfirmSendCardByMail=Voulez-vous vraiment envoyer le contenu de cette carte par mail à <b>%s</b>?
     Resiliate=Mettre fin
     NotValidated=Pas validé
     NoteSomeFeaturesAreDisabled=Attention, seules quelques modules/fonctionnalités ont été activés dans cette démo.
    @@ -56,7 +54,6 @@ UserCreationShort=Util. création
     UserModificationShort=Util. modification
     CurrencyRate=Taux de conversion monétaire
     UseLocalTax=Inclure taxe
    -DefaultValues=Les valeurs par défaut
     UnitPriceHT=Prix unitaire (no tax.)
     UnitPriceTTC=Prix unitaire tx incl.
     PriceUHT=Prix
    @@ -67,7 +64,6 @@ AmountTTCShort=Montant (tx incl.)
     AmountHT=Montant (no tax.)
     AmountTTC=Montant (tx incl.)
     AmountVAT=Montant TPS/TVH
    -MulticurrencyAlreadyPaid=Déjà payé, monnaie d'origine
     MulticurrencyRemainderToPay=Reste à payer, monnaie d'origine
     MulticurrencyAmountHT=Montant (net d'impôt), monnaie d'origine
     MulticurrencyAmountTTC=Montant (hors taxe), monnaie d'origine
    @@ -91,11 +87,8 @@ VATRate=Taux TPS/TVH
     Module=Module / Application
     Modules=Modules / Applications
     FilterOnInto=Critères de recherche '<strong>%s</strong>' dans les champs %s
    -DolibarrStateBoard=Statistiques de base de données
    -DolibarrWorkBoard=Ouvrir le tableau de bord des éléments
     Approved=Approuver
     Opened=Ouverte
    -LateDesc=Retard pour définir si un enregistrement est en retard ou non dépend de votre configuration. Demandez à votre administrateur de modifier le délai du menu Accueil - Configuration - Alertes.
     DeletePicture=Supprimer image
     ConfirmDeletePicture=Etes-vous sur de vouloir supprimer cette image ?
     EnterLoginDetail=Entrez les détails de connexion
    @@ -113,7 +106,6 @@ RecordsDeleted=%s enregistrement(s) supprimé(s)
     CompleteOrNoMoreReceptionExpected=Complète ou rien de plus attendu
     YouCanChangeValuesForThisListFromDictionarySetup=Vous pouvez modifier les valeurs de cette liste dans le menu Configuration - Dictionnaires
     YouCanChangeValuesForThisListFrom=Vous pouvez modifier les valeurs de cette liste dans le menu %s
    -YouCanSetDefaultValueInModuleSetup=Vous pouvez configurer la valeur par défaut utilisée lors de la création d'un nouvel enregistrement dans la configuration du module
     MenuAccountancy=Compte
     Layout=Disposition
     Screen=Écran
    @@ -128,7 +120,6 @@ ShowTransaction=Afficher l'entrée sur le compte bancaire
     DeleteLine=Suppression de ligne
     ConfirmDeleteLine=Êtes-vous sûr de vouloir supprimer cette ligne?
     NoPDFAvailableForDocGenAmongChecked=Aucun document PDF n'était disponible pour la génération du document parmi les enregistrements vérifiés
    -TooManyRecordForMassAction=Trop d'enregistrement sélectionné pour une action de masse. L'action est limitée à une liste de %s enregistrement.
     NoRecordSelected=Aucun enregistrement sélectionné
     MassFilesArea=Domaine pour les fichiers construits par des actions de masse
     ShowTempMassFilesArea=Afficher la zone des fichiers construits par des actions de masse
    @@ -139,7 +130,6 @@ ExportList=Liste des exportations
     GroupBy=Par groupe...
     ViewFlatList=Afficher la liste forfaitaire
     RemoveString=Supprimer la chaîne '%s'
    -SomeTranslationAreUncomplete=Certaines langues peuvent être partiellement traduites ou peuvent contenir des erreurs. Si vous détectez certains, vous pouvez réparer les fichiers de langue se connectant à <a href="https://transifex.com/projects/p/dolibarr/" target="_blank"> https://transifex.com/projects/p/ Dolibarr / </a>.
     Download=Télécharger
     ActualizeCurrency=Mettre à jour le taux de change
     Fiscalyear=Année fiscale
    @@ -150,7 +140,6 @@ ExpenseReports=Note de frais
     HR=HEURE
     HRAndBank=RH et Banque
     TitleSetToDraft=Retourner au brouillon
    -ConfirmSetToDraft=Êtes-vous sûr de vouloir revenir à l'état du projet?
     Rights=Droits
     SetRef=Ref.
     Select2ResultFoundUseArrows=Certains résultats ont été trouvés. Utilisez les flèches pour sélectionner.
    @@ -165,5 +154,4 @@ SearchIntoTasks=les tâches
     SearchIntoCustomerProposals=Propositions de clients
     SearchIntoCustomerShipments=Envois clients
     SearchIntoExpenseReports=Note de frais
    -SearchIntoLeaves=Feuilles
     AssignedTo=Affecté à
    diff --git a/htdocs/langs/fr_CA/members.lang b/htdocs/langs/fr_CA/members.lang
    index 51d1c0a17c4..59416044d4b 100644
    --- a/htdocs/langs/fr_CA/members.lang
    +++ b/htdocs/langs/fr_CA/members.lang
    @@ -138,5 +138,4 @@ MembersByNature=Cet écran vous montre des statistiques sur les membres par natu
     MembersByRegion=Cet écran vous montre des statistiques sur les membres par région.
     VATToUseForSubscriptions=Taux de TVA à utiliser pour les abonnements
     NoVatOnSubscription=Pas de TVA pour les abonnements
    -MEMBER_PAYONLINE_SENDEMAIL=Courrier électronique à utiliser pour l'alerte par courrier électronique lorsque Dolibarr reçoit une confirmation d'un paiement validé pour un abonnement (Exemple: paymentdone@example.com)
     ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Produit utilisé pour la ligne d'abonnement en facture: %s
    diff --git a/htdocs/langs/fr_CA/other.lang b/htdocs/langs/fr_CA/other.lang
    index b4d27a0a27a..13d212f5189 100644
    --- a/htdocs/langs/fr_CA/other.lang
    +++ b/htdocs/langs/fr_CA/other.lang
    @@ -10,9 +10,6 @@ ZipFileGeneratedInto=Fichier Zip généré dans <b>%s</b>.
     MessageOK=Message sur la page de retour de paiement validée
     MessageKO=Message sur la page de retour de paiement annulée
     PreviousYearOfInvoice=Année de facture précédente
    -Notify_FICHINTER_ADD_CONTACT=Ajout de contact à Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validée
    -Notify_FICHINTER_SENTBYMAIL=Intervention envoyée par courrier
     Notify_ORDER_VALIDATE=Ordre client validé
     Notify_ORDER_SENTBYMAIL=Commande client envoyée par courrier électronique
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Commande du fournisseur envoyée par courrier
    @@ -20,23 +17,21 @@ Notify_ORDER_SUPPLIER_VALIDATE=Ordre du fournisseur enregistré
     Notify_ORDER_SUPPLIER_APPROVE=Ordre du fournisseur approuvé
     Notify_ORDER_SUPPLIER_REFUSE=Ordre du fournisseur refusé
     Notify_PROPAL_VALIDATE=Proposition client validée
    -Notify_PROPAL_CLOSE_SIGNED=Client propal fermé signé
    -Notify_PROPAL_CLOSE_REFUSED=Client propal fermé refusé
     Notify_PROPAL_SENTBYMAIL=Proposition commerciale envoyée par courrier
     Notify_WITHDRAW_TRANSMIT=Retrait de la transmission
     Notify_WITHDRAW_CREDIT=Retrait de crédit
     Notify_WITHDRAW_EMIT=Effectuer le retrait
     Notify_COMPANY_SENTBYMAIL=Les envois envoyés par une carte tierce
     Notify_BILL_UNVALIDATE=Facture du client non valide
    -Notify_BILL_PAYED=Facture du client payée
     Notify_BILL_CANCEL=Facture du client annulée
     Notify_BILL_SENTBYMAIL=Facture du client envoyée par courrier
     Notify_BILL_SUPPLIER_VALIDATE=Facture du fournisseur validée
    -Notify_BILL_SUPPLIER_PAYED=Facture du fournisseur payée
     Notify_BILL_SUPPLIER_SENTBYMAIL=Facture du fournisseur envoyée par courrier
     Notify_BILL_SUPPLIER_CANCELED=Facture du fournisseur annulée
     Notify_CONTRACT_VALIDATE=Contrat validé
     Notify_FICHEINTER_VALIDATE=Intervention validée
    +Notify_FICHINTER_ADD_CONTACT=Ajout de contact à Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention envoyée par courrier
     Notify_SHIPPING_VALIDATE=Expédition validée
     Notify_SHIPPING_SENTBYMAIL=Expédition envoyée par mail
     Notify_MEMBER_VALIDATE=Membre validé
    @@ -47,7 +42,6 @@ Notify_MEMBER_DELETE=Membre supprimé
     NbOfAttachedFiles=Nombre de fichiers / documents attachés
     TotalSizeOfAttachedFiles=Taille totale des fichiers / documents attachés
     AttachANewFile=Joindre un nouveau fichier / document
    -NbOfActiveNotifications=Nombre de notifications (nb des emails du destinataire)
     DemoDesc=Dolibarr est un ERP / CRM compact prenant en charge plusieurs modules métier. Une démonstration montrant tous les modules n'a aucun sens car ce scénario ne se produit jamais (plusieurs centaines disponibles). Ainsi, plusieurs profils de démonstration sont disponibles.
     ChooseYourDemoProfil=Choisissez le profil de démonstration qui correspond le mieux à vos besoins ...
     ChooseYourDemoProfilMore=... ou créez votre propre profil <br> (sélection du module manuel)
    @@ -99,7 +93,6 @@ EnableGDLibraryDesc=Installez ou activez la bibliothèque GD sur votre installat
     ProfIdShortDesc=<b>Prof ID%s</b> est une information en fonction d'un pays tiers. <br> Par exemple, pour le pays <b>%s</b>, c'est le code<b>%s</b>.
     DolibarrDemo=Démo Dolibarr ERP / CRM
     StatsByNumberOfUnits=Statistiques pour la somme des produits / services
    -StatsByNumberOfEntities=Statistiques en nombre d'entités référantes (nb de facture, ou commande ...)
     NumberOfProposals=Nombre de propositions
     NumberOfCustomerInvoices=Nombre de factures des clients
     NumberOfSupplierProposals=Nombre de propositions de fournisseurs
    @@ -110,7 +103,6 @@ NumberOfUnitsCustomerInvoices=Nombre d'unités sur les factures des clients
     NumberOfUnitsSupplierProposals=Nombre d'unités sur les propositions des fournisseurs
     NumberOfUnitsSupplierOrders=Nombre d'unités sur commandes fournisseurs
     NumberOfUnitsSupplierInvoices=Nombre d'unités sur les factures des fournisseurs
    -EMailTextInterventionAddedContact=Une nouvelle intervention %s vous a été assignée.
     EMailTextInterventionValidated=L'intervention %s a été validée.
     EMailTextInvoiceValidated=La facture %s a été validée.
     EMailTextProposalValidated=Le projet %s a été validé.
    @@ -122,7 +114,6 @@ ImportedWithSet=Ensemble de données sur l'importation
     ResizeDesc=Entrez une nouvelle largeur <b> OU </ b> nouvelle hauteur. Le ratio sera maintenu pendant le redimensionnement ...
     NewSizeAfterCropping=Nouvelle taille après la culture
     DefineNewAreaToPick=Définir une nouvelle zone sur l'image à choisir (clic gauche sur l'image, puis faites glisser jusqu'à ce que vous atteigniez le coin opposé)
    -CurrentInformationOnImage=Cet outil a été conçu pour vous aider à redimensionner ou à recadrer une image. Il s'agit d'informations sur l'image éditée en cours
     YouReceiveMailBecauseOfNotification=Vous recevez ce message car votre courriel a été ajouté à la liste des cibles pour être informé des événements particuliers dans le logiciel %s de %s.
     YouReceiveMailBecauseOfNotification2=Cet événement est le suivant:
     ThisIsListOfModules=Il s'agit d'une liste de modules présélectionnés par ce profil de démonstration (seuls les modules les plus courants sont visibles dans cette démo). Modifiez ceci pour avoir une démo plus personnalisée et cliquez sur "Démarrer".
    diff --git a/htdocs/langs/fr_CA/projects.lang b/htdocs/langs/fr_CA/projects.lang
    index 803c80994c3..1e448ea512a 100644
    --- a/htdocs/langs/fr_CA/projects.lang
    +++ b/htdocs/langs/fr_CA/projects.lang
    @@ -22,12 +22,9 @@ AddProject=Créer un projet
     ConfirmDeleteAProject=Êtes-vous sûr de vouloir supprimer ce projet?
     ConfirmDeleteATask=Êtes-vous sûr de vouloir supprimer cette tâche?
     OpenedTasks=Ouvrir des tâches
    -OpportunitiesStatusForOpenedProjects=Opportunités nombre de projets ouverts par statut
    -OpportunitiesStatusForProjects=Opportunités montant des projets par statut
     ShowProject=Afficher le projet
     SetProject=Définir le projet
     NoProject=Aucun projet défini ou détenu
    -NbOfProjects=Nb de projets
     TimeSpent=Temps passé
     TimeSpentByYou=Temps passé par vous
     TimeSpentByUser=Temps passé par l'utilisateur
    @@ -47,10 +44,6 @@ MyActivities=Mes tâches / activités
     MyProjectsArea=Zone de mes projets
     ProgressDeclared=Progrès déclaré
     ListOfTasks=Liste des tâches
    -ListInvoicesAssociatedProject=Liste des factures de clients associées au projet
    -ListPredefinedInvoicesAssociatedProject=Liste des factures de modèles de clients associées au projet
    -ListShippingAssociatedProject=Liste des envois associés au projet
    -ListExpenseReportsAssociatedProject=Liste des rapports de dépenses associés au projet
     ListTaskTimeUserProject=Liste des temps consacrés aux tâches du projet
     ActivityOnProjectToday=Activité sur le projet aujourd'hui
     ActivityOnProjectYesterday=Activité sur projet hier
    @@ -89,10 +82,8 @@ ConfirmCloneProject=Êtes-vous sûr de cloner ce projet?
     ProjectReportDate=Modifier les dates des tâches en fonction de la nouvelle date de début du projet
     ErrorShiftTaskDate=Impossible de modifier la date de la tâche selon la nouvelle date de début du projet
     TaskDeletedInDolibarr=Tâche %s supprimé
    -OpportunityStatus=Statut d'opportunité
     OpportunityStatusShort=Opp. statut
     OpportunityProbabilityShort=Opp. Probab.
    -OpportunityAmount=Montant de l'opportunité
     OpportunityAmountShort=Opp. montant
     OpportunityAmountAverageShort=Moyenne Opp. montant
     OpportunityAmountWeigthedShort=Opp pondéré. montant
    @@ -105,8 +96,6 @@ TypeContact_project_task_internal_TASKCONTRIBUTOR=Donateur
     TypeContact_project_task_external_TASKCONTRIBUTOR=Donateur
     SelectElement=Sélectionnez l'élément
     AddElement=Lien vers l'élément
    -DocumentModelBeluga=Modèle de projet pour l'aperçu des objets liés
    -DocumentModelBaleine=Modèle de rapport de projet pour les tâches
     PlannedWorkload=Charge de travail planifiée
     ProjectReferers=Articles connexes
     ProjectMustBeValidatedFirst=Le projet doit d'abord être validé
    @@ -122,19 +111,12 @@ AssignTaskToUser=Affectez une tâche à %s
     SelectTaskToAssign=Sélectionnez la tâche à affecter ...
     AssignTask=Attribuer
     ProjectOverview=Aperçu
    -ManageTasks=Utiliser des projets pour suivre les tâches et le temps
     ManageOpportunitiesStatus=Utiliser des projets pour suivre les pistes / opportunités
    -ProjectOppAmountOfProjectsByMonth=Nombre de possibilités par mois
    -ProjectOpenedProjectByOppStatus=Projet ouvert / chef d'entreprise selon le statut d'opportunité
     ProjectsStatistics=Statistiques sur les projets / prospects
     TasksStatistics=Statistiques sur les tâches de projet / chef de file
     TaskAssignedToEnterTime=Tâche attribuée. La saisie de cette tâche devrait être possible.
     IdTaskTime=Id temps de tâche
     YouCanCompleteRef=Si vous souhaitez compléter la référence avec certaines informations (pour l'utiliser comme filtres de recherche), il est recommandé d'ajouter un caractère pour le séparer, de sorte que la numérotation automatique fonctionnera toujours correctement pour les prochains projets. Par exemple %s-ABC. Vous pouvez également ajouter des clés de recherche dans l'étiquette. Mais la meilleure pratique peut être d'ajouter un champ dédié, également appelé attributs complémentaires.
     OpenedProjectsByThirdparties=Projets ouverts par des tiers
    -OnlyOpportunitiesShort=Seules les opportunités
    -NotAnOpportunityShort=Pas une opportunité
    -OpportunityTotalAmount=Possibilité montant total
    -OpportunityPonderatedAmountDesc=Montant des opportunités pondéré avec probabilité
     OppStatusPENDING=Créance
     OppStatusWON=A gagné
    diff --git a/htdocs/langs/fr_CA/stocks.lang b/htdocs/langs/fr_CA/stocks.lang
    index 4cb04eb36da..fbf6cdcbe0f 100644
    --- a/htdocs/langs/fr_CA/stocks.lang
    +++ b/htdocs/langs/fr_CA/stocks.lang
    @@ -16,7 +16,6 @@ ListMouvementStockProject=Liste des mouvements de stock associés au projet
     StocksArea=Zone d'entrepôts
     LocationSummary=Nom abrégé
     MassStockTransferShort=Transfert de stock de masse
    -LabelMovement=Étiquette de mouvement
     NumberOfUnit=Nombre d'unités
     UnitPurchaseValue=Prix ​​unitaire d'achat
     StockTooLow=Stock trop bas
    diff --git a/htdocs/langs/fr_CH/admin.lang b/htdocs/langs/fr_CH/admin.lang
    deleted file mode 100644
    index 790d1e6cd7b..00000000000
    --- a/htdocs/langs/fr_CH/admin.lang
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -# Dolibarr language file - Source file is en_US - admin
    -AntiVirusCommandExample=Example for ClamWin: c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>Example for ClamAv: /usr/bin/clamscan
    -AntiVirusParamExample=Example for ClamWin: --database="C:\\Program Files (x86)\\ClamWin\\lib"
    -ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    diff --git a/htdocs/langs/fr_FR/accountancy.lang b/htdocs/langs/fr_FR/accountancy.lang
    index 4f546828652..2520a840997 100644
    --- a/htdocs/langs/fr_FR/accountancy.lang
    +++ b/htdocs/langs/fr_FR/accountancy.lang
    @@ -36,8 +36,12 @@ AlreadyInGeneralLedger=Enregistrement déjà présent dans le grand livre
     NotYetInGeneralLedger=Pas encore envoyé dans le grand livre
     GroupIsEmptyCheckSetup=Le groupe est vide. Vérifier la configuration du groupe personnalisé
     DetailByAccount=Afficher le détail par compte
    -AccountWithNonZeroValues=Comptes avec valeurs non nulles
    +AccountWithNonZeroValues=Accounts with non-zero values
     ListOfAccounts=Liste des comptes
    +CountriesInEEC=Countries in EEC
    +CountriesNotInEEC=Countries not in EEC
    +CountriesInEECExceptMe=Countries in EEC except %s
    +CountriesExceptMe=All countries except %s
     
     MainAccountForCustomersNotDefined=Compte comptable général pour les clients non défini dans la configuration
     MainAccountForSuppliersNotDefined=Compte comptable général pour les fournisseurs non défini dans la configuration
    @@ -55,7 +59,7 @@ AccountancyAreaDescChartModel=Étape %s : Créer un modèle de plan de compte de
     AccountancyAreaDescChart=Étape %s : Créer ou vérifier le contenu de votre plan de compte depuis le menu %s
     
     AccountancyAreaDescVat=Étape %s : Définissez les comptes comptables de chaque taux de TVA utilisé. Pour cela, suivez le menu suivant %s.
    -AccountancyAreaDescDefault=ÉTAPE %s: Définir les comptes de comptabilité par défaut. Pour cela, utilisez l'entrée de menu %s.
    +AccountancyAreaDescDefault=Étape %s: Définir les comptes de comptabilité par défaut. Pour cela, utilisez l'entrée de menu %s.
     AccountancyAreaDescExpenseReport=Étape %s : Définissez les comptes comptables par défaut des dépenses des notes de frais. Pour cela, suivez le menu suivant %s.
     AccountancyAreaDescSal=Étape %s : Définissez les comptes comptables de paiements de salaires. Pour cela, suivez le menu suivant %s.
     AccountancyAreaDescContrib=Étape %s : Définissez les comptes comptables des dépenses spéciales (taxes diverses). Pour cela, suivez le menu suivant %s.
    @@ -130,7 +134,7 @@ ACCOUNTING_LENGTH_DESCRIPTION=Tronquer la description des produits & services da
     ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Tronquer la description du compte des produits & services dans les listes à n caractères (Idéalement = 50)
     ACCOUNTING_LENGTH_GACCOUNT=Longueur des comptes de la comptabilité générale (Si vous définissez la valeur à 6 ici, le compte « 706 » apparaîtra comme « 706000 » à l'écran)
     ACCOUNTING_LENGTH_AACCOUNT=Longueur des comptes comptables de Tiers (Si vous définissez la valeur à 6 ici, le compte « 401 » apparaîtra comme « 401000 » à l'écran)
    -ACCOUNTING_MANAGE_ZERO=Permettre de gérer un nombre différent de zéro à la fin d'un compte comptable. Nécessaire par certains pays (comme la Suisse). Si conservé à Non (par défaut), vous pouvez définir les 2 paramètres suivants pour demander à l'application d'ajouter des zéros virtuels.
    +ACCOUNTING_MANAGE_ZERO=Permettre de gérer un nombre différent de zéro à la fin d'un compte comptable. Nécessaire pour certains pays (comme la Suisse). Si conservé à Non (par défaut), vous pouvez définir les 2 paramètres suivants pour demander à l'application d'ajouter des zéros virtuels.
     BANK_DISABLE_DIRECT_INPUT=Désactiver la saisie directe de transactions en banque
     ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Activer l'export brouillon sur les journaux comptables
     
    @@ -139,7 +143,7 @@ ACCOUNTING_PURCHASE_JOURNAL=Journal des achats
     ACCOUNTING_MISCELLANEOUS_JOURNAL=Journal des opérations diverses
     ACCOUNTING_EXPENSEREPORT_JOURNAL=Journal des notes de frais
     ACCOUNTING_SOCIAL_JOURNAL=Journal de paie
    -ACCOUNTING_HAS_NEW_JOURNAL=Journal des A -nouveaux
    +ACCOUNTING_HAS_NEW_JOURNAL=Journal des A-nouveaux
     
     ACCOUNTING_ACCOUNT_TRANSFER_CASH=Compte comptable de tranfert
     ACCOUNTING_ACCOUNT_SUSPENSE=Compte comptable d'attente
    @@ -156,6 +160,7 @@ Docref=Référence
     LabelAccount=Libellé du compte
     LabelOperation=Libellé opération
     Sens=Sens
    +LetteringCode=Lettering code
     Codejournal=Journal
     NumPiece=Numéro de pièce
     TransactionNumShort=Num. transaction
    @@ -198,7 +203,7 @@ PaymentsNotLinkedToProduct=Paiement non lié à un produit / service
     
     Pcgtype=Groupe de comptes comptables
     Pcgsubtype=Sous-groupe de comptes comptables
    -PcgtypeDesc=Le groupe et le sous-groupe d'un compte comptable sont prédéfinis comme critère de 'filtre' et 'regroupement' pour certains rapports comptables. Par exemple, 'INCOME' or 'EXPENSE' sont regroupés pour construire le rapport des recettes/dépenses.
    +PcgtypeDesc=Group and subgroup of account are used as predefined 'filter' and 'grouping' criteria for some accounting reports. For example, 'INCOME' or 'EXPENSE' are used as groups for accounting accounts of products to build the expense/income report.
     
     TotalVente=Total chiffre affaires hors taxe
     TotalMarge=Total marge
    @@ -221,6 +226,7 @@ AutomaticBindingDone=Liaison automatique faite
     
     ErrorAccountancyCodeIsAlreadyUse=Erreur, vous ne pouvez pas détruire de compte comptable car il est utilisé
     MvtNotCorrectlyBalanced=Mouvement non équilibré. Débit = %s| Crébit = %s
    +Balancing=Balancing
     FicheVentilation=Fiche lien
     GeneralLedgerIsWritten=Les transactions sont enregistrées dans le grand livre
     GeneralLedgerSomeRecordWasNotRecorded=Certaines des opérations n'ont pu être journalisées. S'il n'y a pas d'autres messages, c'est probablement car elles sont déjà comptabilisées.
    @@ -262,7 +268,8 @@ Modelcsv_quadratus=Export vers Quadratus QuadraCompta
     Modelcsv_ebp=Export vers EBP
     Modelcsv_cogilog=Export vers Cogilog
     Modelcsv_agiris=Export vers Agiris
    -Modelcsv_configurable=Export configurable
    +Modelcsv_configurable=Export CSV Configurable
    +Modelcsv_FEC=Export FEC (Art. L47 A) (Test)
     ChartofaccountsId=Id plan comptable
     
     ## Tools - Init accounting account on product / service
    @@ -296,7 +303,7 @@ BookeppingLineAlreayExists=Lignes dejà existantes dans le grand livre
     NoJournalDefined=Pas de journal défini
     Binded=Lignes liées
     ToBind=Lignes à lier
    -UseMenuToSetBindindManualy=L'autodection n'est pas possible, utilisez le menu <a href="%s"> %s </a> pour effectuer la liaison manuellement
    +UseMenuToSetBindindManualy=Lines not yet bound, use menu <a href="%s">%s</a> to make the binding manually
     
     ## Import
     ImportAccountingEntries=Écritures comptables
    diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
    index 58cd1d09b11..943a3398b87 100644
    --- a/htdocs/langs/fr_FR/admin.lang
    +++ b/htdocs/langs/fr_FR/admin.lang
    @@ -30,13 +30,13 @@ SessionSaveHandler=Modalité de sauvegarde des sessions
     SessionSavePath=Emplacement de sauvegarde sessions
     PurgeSessions=Purge des sessions
     ConfirmPurgeSessions=Voulez-vous purger les sessions. Ceci déconnectera tous les utilisateurs (sauf vous même).
    -NoSessionListWithThisHandler=Le gestionnaire de session configuré pour votre PHP ne permet pas de lister les sessions en cours
    +NoSessionListWithThisHandler=Le gestionnaire de session configuré pour votre PHP ne permet pas de lister les sessions en cours.
     LockNewSessions=Bloquer nouvelles connexions
     ConfirmLockNewSessions=Êtes-vous sûr de vouloir restreindre l'accès Dolibarr à votre utilisateur. Seul l'utilisateur <b>%s</b> pourra se connecter après cela.
     UnlockNewSessions=Lever blocage des connexions
     YourSession=Votre session
     Sessions=Sessions utilisateurs
    -WebUserGroup=Serveur web utilisateur/groupe
    +WebUserGroup=Utilisateur/groupe du serveur Web
     NoSessionFound=Votre PHP ne semble pas pouvoir lister les sessions actives. Le répertoire de sauvegarde des sessions (<b>%s</b>) est peut être protégé (Par exemple, par les permissions de l'OS ou par la directive open_basedir de votre PHP, ce qui d'un point de vue sécurité est une bonne chose).
     DBStoringCharset=Encodage base pour stockage données
     DBSortingCharset=Encodage base pour tri données
    @@ -50,7 +50,7 @@ ExternalUser=Utilisateur externe
     InternalUsers=Utilisateurs internes
     ExternalUsers=Utilisateurs externes
     GUISetup=Affichage
    -SetupArea=Espace de configuration
    +SetupArea=Configuration
     UploadNewTemplate=Télécharger un / des nouveau(x) modèle(s)
     FormToTestFileUploadForm=Formulaire de test d'envoi de fichier (selon options choisies)
     IfModuleEnabled=Rem: oui est effectif uniquement si le module <b>%s</b> est activé
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Erreur, le code ne peut contenir la valeur 0
     DisableJavascript=Désactive les fonctions Javascript et Ajax (Recommandé pour les personnes aveugles ou navigateurs text).
     UseSearchToSelectCompanyTooltip=Si vous avez un nombre important de tiers (>100 000), vous pourrez améliorer les performances en positionnant la constante COMPANY_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limité au début des chaines.
     UseSearchToSelectContactTooltip=Si vous avez un nombre important de contacts (>100 000), vous pourrez améliorer les performances en positionnant la constante CONTACT_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limité au début des chaines.
    -DelaiedFullListToSelectCompany=Attendre que vous ayez appuyé sur une touche avant de charger le contenu de la liste déroulante des tiers (Cela peut augmenter les performances si vous avez un grand nombre de tiers, mais cela est moins convivial)
    -DelaiedFullListToSelectContact=Attendre que vous ayez appuyé sur une touche avant de charger le contenu de la liste déroulante des contacts/adresses (Cela peut augmenter les performances si vous avez un grand nombre de contacts, mais cela est moins convivial)
    +DelaiedFullListToSelectCompany=Attendre que vous ayez appuyé sur une touche avant de charger le contenu de la liste déroulante des tiers. <br>Cela peut augmenter les performances si vous avez un grand nombre de tiers, mais cela est moins convivial.
    +DelaiedFullListToSelectContact=Attendre que vous ayez appuyé sur une touche avant de charger le contenu de la liste déroulante des adresses de contact. <br>Cela peut augmenter les performances si vous avez un grand nombre de contacts, mais cela est moins convivial
     NumberOfKeyToSearch=Nb carac. déclenchant recherche : %s
     NotAvailableWhenAjaxDisabled=Non disponible quand Ajax est désactivé
     AllowToSelectProjectFromOtherCompany=Sur les éléments d'un tiers, autorise la sélection d'un projet lié à un autre tiers
    @@ -193,12 +193,12 @@ FeatureDisabledInDemo=Fonction désactivée dans la démo
     FeatureAvailableOnlyOnStable=Fonction disponible uniquement sur les versions officielles stables
     BoxesDesc=Les widgets sont des composants montrant des informations que vous pouvez ajouter à vos pages pour les personnaliser. Vous pouvez choisir de les afficher ou non en sélectionnant la page cible et en cliquant sur "Activer" ou "Désactiver".
     OnlyActiveElementsAreShown=Seuls les éléments en rapport avec un <a href="%s">module actif</a> sont présentés.
    -ModulesDesc=Les modules Dolibarr définissent quelle application / fonctionnalité est activée dans le logiciel. Certaines applications / modules nécessitent des autorisations que vous devez accorder aux utilisateurs, après l'avoir activé. Cliquez sur le bouton activé / désactivé pour activer un module / application.
    +ModulesDesc=Les modules Dolibarr définissent quelles  fonctionnalités sont disponibles dans le logiciel. Certains modules / applications nécessitent, après activation, d'accorder des autorisations aux utilisateurs. Cliquez sur le bouton activé / désactivé pour activer un module / application.
     ModulesMarketPlaceDesc=D'autres modules/extensions sont disponibles en téléchargement sur des sites externes sur Internet...
     ModulesDeployDesc=Si les permissions de votre système de fichier le permettent , vous pouvez utiliser cet outil pour déployer un module externe. Le module sera alors visible dans l'onglet <strong>%s</strong>.
     ModulesMarketPlaces=Rechercher un module/application externe
     ModulesDevelopYourModule=Développer son propre module/application
    -ModulesDevelopDesc=Vous pouvez développer vous-même ou trouver un partenaire pour faire développer votre module personnalisé
    +ModulesDevelopDesc=Vous pouvez également développer votre propre module ou trouver un partenaire pour en développer un pour vous.
     DOLISTOREdescriptionLong=Au lieu de basculer sur le site web <a href="https://www.dolistore.com"> www.dolistore.com </a>pour trouver un module externe, vous pouvez utiliser cet outil intégré qui fera la recherche sur la place de marché pour vous (peut être lent, besoin d'un accès Internet) ...
     NewModule=Nouveau
     FreeModule=Gratuit
    @@ -211,7 +211,7 @@ Nouveauté=Nouveauté
     AchatTelechargement=Acheter/télécharger
     GoModuleSetupArea=Pour déployer/installer un nouveau module, rendez vous dans la zone de configuration des modules : <a href="%s">%s</a>
     DoliStoreDesc=DoliStore, la place de marché officielle des modules et extensions complémentaires pour Dolibarr ERP/CRM
    -DoliPartnersDesc=Liste de quelques sociétés qui peuvent fournir/développer des modules ou fonctions sur mesure  (Remarque: Toute société Open Source connaissant le langage PHP peut fournir du développement spécifique)
    +DoliPartnersDesc=Liste de quelques sociétés qui peuvent fournir/développer des modules ou fonctions sur mesure. <br>Remarque: Toute société Open Source connaissant le langage PHP peut fournir du développement spécifique.
     WebSiteDesc=Sites fournisseurs à consulter pour trouver plus de modules...
     DevelopYourModuleDesc=Quelques pistes pour développer votre propre module/application...
     URL=Lien
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Ne pas stocker de mots de passe en clair dans la base (A
     MainDbPasswordFileConfEncrypted=Chiffrer le mot de passe de la base dans le fichier conf.php (Activation recommandée)
     InstrucToEncodePass=Pour avoir le mot de passe de la base encodé dans le fichier de configuration <b>conf.php</b>, remplacer dans ce fichier la ligne<br><b>$dolibarr_main_db_pass="...";</b><br>par<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Pour avoir le mot de passe de la base décodé (en clair) dans le fichier de configuration <b>conf.php</b>, remplacer dans ce fichier la ligne<br><b>$dolibarr_main_db_pass="crypted:...";</b><br>par<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection des PDF générés (Activation NON recommandée, rend inopérante la génération de PDF de masse)
    +ProtectAndEncryptPdfFiles=Protection des PDF générés. Activation NON recommandée (rend inopérante la génération de PDF de masse)
     ProtectAndEncryptPdfFilesDesc=La protection d'un document PDF laisse le document libre à la lecture et à l'impression avec tout logiciel de lecture PDF. Par contre, la modification et la copie deviennent impossible. Notez que, de plus, l'utilisation de cette option empêche la génération de PDFs cumulés.
     Feature=Fonction
     DolibarrLicense=Licence
    @@ -246,8 +246,8 @@ ExternalResources=Ressources externes
     SocialNetworks=Réseaux sociaux
     ForDocumentationSeeWiki=Pour la documentation utilisateur, développeur ou les FAQs,<br>consultez le wiki Dolibarr:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Pour tout autre question/aide, vous pouvez utiliser le forum Dolibarr:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Cette application, indépendante de Dolibarr,  permet de vous aider à obtenir un service d'assistance sur Dolibarr.
    -HelpCenterDesc2=Choisissez le service qui correspond à votre besoin en cliquant sur le lien adéquat (Certains de ces services ne sont disponibles qu'en <b>anglais</b>).
    +HelpCenterDesc1=Voici quelques ressources pour obtenir de l’aide et du support avec Dolibarr.
    +HelpCenterDesc2=Certains de ces services ne sont disponibles qu'en <b>anglais</b>.
     CurrentMenuHandler=Gestionnaire menu courant
     MeasuringUnit=Unité de mesure
     LeftMargin=Marge de gauche
    @@ -264,24 +264,28 @@ Emails=Emails
     EMailsSetup=Configuration Emails
     EMailsDesc=Cette page permet de remplacer les paramètres PHP en rapport avec l'envoi d'emails. Dans la plupart des cas, sur des OS comme Unix/Linux, les paramètres PHP sont déjà corrects et cette page est inutile.
     EmailSenderProfiles=Expéditeur des e-mails
    -MAIN_MAIL_SMTP_PORT=Port du serveur SMTP/SMTPS (Par défaut dans php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT=Nom d'hôte ou adresse IP du serveur SMTP/SMTPS (Par défaut dans php.ini: <b>%s</b>)
     MAIN_MAIL_SMTP_SERVER=Nom d'hôte ou adresse IP du serveur SMTP/SMTPS (Par défaut dans php.ini: <b>%s</b>)
     MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Port du serveur SMTP/SMTPS (Non défini dans le PHP sur les systèmes de type Unix)
     MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Nom d'hôte ou adresse IP du serveur SMTP/SMTPS (Non défini dans le PHP sur les systèmes de type Unix)
     MAIN_MAIL_EMAIL_FROM=Adresse email de l'émetteur pour l'envoi d'emails automatiques (Par défaut dans php.ini: <b>%s</b>)
     MAIN_MAIL_ERRORS_TO=E-mail utilisé les retours d'erreur (champ "Errors-To" dans les e-mails envoyés)
    -MAIN_MAIL_AUTOCOPY_TO= Envoyer systématiquement une copie cachée des emails envoyés à
    +MAIN_MAIL_AUTOCOPY_TO= Envoyer systématiquement une copie cachée (Bcc) des emails envoyés à
     MAIN_DISABLE_ALL_MAILS=Désactiver globalement tout envoi d'emails (pour mode test ou démos)
     MAIN_MAIL_FORCE_SENDTO=Envoyer tous les emails à (au lieu des vrais destinataires, à des fins de test)
     MAIN_MAIL_ENABLED_USER_DEST_SELECT=Ajouter les utilisateurs salariés avec email dans la liste des destinataires autorisés
    -MAIN_MAIL_SENDMODE=Méthode d'envoi des emails
    -MAIN_MAIL_SMTPS_ID=Identifiant d'authentification SMTP si authentification SMTP requise
    -MAIN_MAIL_SMTPS_PW=Mot de passe d'authentification SMTP si authentification SMTP requise
    -MAIN_MAIL_EMAIL_TLS= Utilisation du chiffrement TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS= Utiliser le cryptage TTS (STARTTLS)
    -MAIN_DISABLE_ALL_SMS=Désactiver globalement tout envoi de SMS (pour mode test ou démos)
    +MAIN_MAIL_SENDMODE=Méthode d'envoi d'email
    +MAIN_MAIL_SMTPS_ID=ID SMTP (si le serveur d'envoi nécessite une authentification)
    +MAIN_MAIL_SMTPS_PW=Mot de passe SMTP (si le serveur d'envoi nécessite une authentification)
    +MAIN_MAIL_EMAIL_TLS=Utilisation du chiffrement TLS (SSL)
    +MAIN_MAIL_EMAIL_STARTTLS=Utiliser le cryptage TTS (STARTTLS)
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Utiliser DKIM pour signer les emails
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Nom de domaine pour la signature DKIM
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Nom du sélecteur DKIM
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Clé privée pour générer la signature DKIM
    +MAIN_DISABLE_ALL_SMS=Désactiver globalement tout envoi de Sms (pour mode test ou démos)
     MAIN_SMS_SENDMODE=Méthode d'envoi des SMS
    -MAIN_MAIL_SMS_FROM=Numéro de téléphone par défaut pour l'envoi des SMS
    +MAIN_MAIL_SMS_FROM=Numéro de téléphone par défaut pour envoi Sms
     MAIN_MAIL_DEFAULT_FROMTYPE=Expéditeur par défaut des e-mails pour les envois manuels (e-mail utilisateur ou de la société)
     UserEmail=Email utilisateur
     CompanyEmail=Email institution
    @@ -312,8 +316,8 @@ StepNb=Étape %s
     FindPackageFromWebSite=Rechercher le paquet qui répond à votre besoin (par exemple sur le site web %s).
     DownloadPackageFromWebSite=Télécharger le package (par exemple depuis le site web officiel %s)
     UnpackPackageInDolibarrRoot=Décompressez les fichiers de l'archive dans le répertoire du serveur Dolibarr dédié aux modules externes: <b>%s</b>
    -UnpackPackageInModulesRoot=Pour installer un module externe, décompresser les fichiers de l'archive dans le répertoire dédié aux modules : <b>%s</b>
    -SetupIsReadyForUse=L"installation du module est terminée. Il est cependant nécessaire de procéer à son activation et à son paramétrage : <a href="%s">%s</a>
    +UnpackPackageInModulesRoot=Pour installer un module externe, décompresser les fichiers de l'archive dans le répertoire du serveur Dolibarr dédié aux modules externes <br> <b>%s</b>
    +SetupIsReadyForUse=L"installation du module est terminée. Il est cependant nécessaire de procéder à son activation et à son paramétrage dans la page de configuration des modules : <a href="%s">%s</a>
     NotExistsDirect=Le dossier racine alternatif n'est pas défini.<br>
     InfDirAlt=Depuis les versions 3, il est possible de définir un dossier racine alternatif. Cela permet d'installer modules et thèmes additionnels dans un répertoire dédié.<br>Créer un dossier racine alternatif à Dolibarr (ex : custom).<br>
     InfDirExample=<br>Ensuite, déclarez le dans le fichier <strong>conf.php</strong><br>$dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>Si ces lignes sont commentées avec un symbole "#" ou "//", activer les en supprimant le caractère "#" ou "//".
    @@ -352,7 +356,7 @@ ConfirmPurge=Êtes-vous sûr de vouloir réaliser cette purge ?<br>Ceci effacera
     MinLength=Longueur minimale
     LanguageFilesCachedIntoShmopSharedMemory=Fichiers .lang en mémoire partagée
     LanguageFile=Fichier de langue
    -ExamplesWithCurrentSetup=Exemples avec le paramétrage actif courant
    +ExamplesWithCurrentSetup=Exemples avec la configuration actuelle
     ListOfDirectories=Liste des répertoires des modèles OpenDocument
     ListOfDirectoriesForModelGenODT=Liste des répertoires contenant des documents modèles au format OpenDocument.<br><br>Indiquer ici les chemins complets de répertoire.<br>Ajouter un retour à la ligne entre chaque répertoire.<br>Pour indiquer un répertoire du module GED, mettre ici <b>DOL_DATA_ROOT/ecm/nomdurepertoireged</b><br><br>Les fichiers modèles dans ces répertoires doivent se terminer par <b>.odt</b> ou <b>.ods</b>.
     NumberOfModelFilesFound=Nombre de fichiers modèles ODT/ODS trouvés dans ce(s) répertoire(s)
    @@ -365,7 +369,7 @@ KeyForWebServicesAccess=Clé pour utiliser les Web Services (paramètre "dolibar
     TestSubmitForm=Formulaire de test de saisie
     ThisForceAlsoTheme=Utiliser ce gestionnaire de menu force aussi le thème quel que soit le choix de thème de l'utilisateur. De plus, ce gestionnaire de menu, spécialisé pour smartphone, ne fonctionne que sur certains téléphones. Utilisez un autre gestionnaire si vous constatez des problèmes.
     ThemeDir=Répertoire des thèmes
    -ConnectionTimeout=Délai expiration de connexion
    +ConnectionTimeout=Timeout de connexion
     ResponseTimeout=Délai expiration de réponse
     SmsTestMessage=Message de test de __PHONEFROM__ vers __PHONETO__
     ModuleMustBeEnabledFirst=Le module <b>%s</b> doit être activé pour utiliser cette fonction.
    @@ -377,7 +381,7 @@ PDFAddressForging=Règles de fabrication des zones adresses
     HideAnyVATInformationOnPDF=Masquer toutes les informations relatives à la Taxe de vente / TVA sur les PDF générés
     PDFRulesForSalesTax=Règles pour la taxe de vente / TVA
     PDFLocaltax=Règles pour %s
    -HideLocalTaxOnPDF=Cacher le taux de %s dans la colonne taxe
    +HideLocalTaxOnPDF=Cacher le taux de %s dans la colonne taxe des PDF
     HideDescOnPDF=Cacher la description des produits sur les PDF générés
     HideRefOnPDF=Cacher la référence des produits sur les PDF générés
     HideDetailsOnPDF=Cacher les détails des lignes de produits sur les PDF générés
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Sécurisation des URLs
     SecurityTokenIsUnique=Utiliser un paramètre securekey unique pour chaque URL ?
     EnterRefToBuildUrl=Entrer la référence pour l'objet %s
     GetSecuredUrl=Obtenir l'URL calculée
    -ButtonHideUnauthorized=Cacher les boutons non autorisés au lieu de les voir grisés
    +ButtonHideUnauthorized=Cacher les boutons non autorisés, pour les utilisateurs non admin, au lieu de les voir grisés
     OldVATRates=Ancien taux de TVA
     NewVATRates=Nouveau taux de TVA
     PriceBaseTypeToChange=Modifier sur les prix dont la référence de base est le
    @@ -414,7 +418,7 @@ ExtrafieldCheckBoxFromList=Cases à cocher issues d'une table
     ExtrafieldLink=Lien vers un objet
     ComputedFormula=Champ calculé
     ComputedFormulaDesc=Vous pouvez entrer ici une formule utilisant les propriétés objet ou tout code PHP pour obtenir des valeurs dynamiques. Vous pouvez utiliser toute formule compatible PHP, incluant l'opérateur conditionnel "?", et les objets globaux : <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>ATTENTION</strong> : Seulement quelques propriétés de l'objet $object pourraient être disponibles. Si vous avez besoin de propriétés non chargées, créez vous même une instance de l'objet dans votre formule, comme dans le deuxième exemple.<br>Utiliser un champs calculé signifie que vous ne pouvez pas entrer vous même toute valeur à partir de l'interface. Aussi, s'il y a une erreur de syntaxe, la formule pourrait ne rien retourner.<br><br>Exemple de formule:<br> $object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Exemple pour recharger l'objet: <br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Un autre exemple de formule pour forcer le rechargement d'un objet et de son objet parent:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Objet parent projet non trouvé'
    -ExtrafieldParamHelpPassword=Gardez ce champ vide signifie que la valeur sera stockée sans cryptage (le champ doit juste être caché avec des étoiles sur l'écran). <br> Définissez la valeur 'auto' pour utiliser la règle de cryptage par défaut pour enregistrer le mot de passe dans la base de données (ensuite la valeur lue sera le hash uniquement, sans moyen de retrouver la valeur d'origine)
    +ExtrafieldParamHelpPassword=Laissez ce champ vide signifie que la valeur sera stockée sans cryptage (le champ doit juste être caché avec des étoiles sur l'écran).<br> Définissez la valeur 'auto' pour utiliser la règle de cryptage par défaut pour enregistrer le mot de passe dans la base de données (ensuite la valeur utilisée sera le hash uniquement, sans moyen de retrouver la valeur d'origine)
     ExtrafieldParamHelpselect=La liste doit être de la forme clef,valeur (où la clé ne peut être '0')<br><br> par exemple : <br>1,valeur1<br>2,valeur2<br>3,valeur3<br>...<br><br>\nPour afficher une liste dépendant d'une autre liste attribut complémentaire: <br>1, valeur1|options_<i>code_liste_parente</i>:clé_parente<br> 2,valeur2|option_<i>Code_liste_parente</i>:clé_parente<br><br>\nPour que la liste soit dépendante d'une autre liste:<br>1,valeur1|<i>code_liste_parent</i>:clef_parent<br>2,valeur2|<i>code_liste_parent</i>:clef_parent
     ExtrafieldParamHelpcheckbox=La liste doit être de la forme clef,valeur (où la clé ne peut être '0')<br><br> par exemple : <br>1,valeur1<br>2,valeur2<br>3,valeur3<br>...
     ExtrafieldParamHelpradio=La liste doit être de la forme clef,valeur (où la clé ne peut être '0')<br><br> par exemple : <br>1,valeur1<br>2,valeur2<br>3,valeur3<br>...
    @@ -432,7 +436,7 @@ DefaultLink=Lien par défaut
     SetAsDefault=Définir par défaut
     ValueOverwrittenByUserSetup=Attention, cette valeur peut être écrasée par une valeur spécifique à la configuration de l'utilisateur (chaque utilisateur pouvant avoir sa propre URL « clicktodial »)
     ExternalModule=Module externe - Installé dans le répertoire %s
    -BarcodeInitForThirdparties=Initialisation du code-barre en masse pour les tiers
    +BarcodeInitForthird-parties=Initialisation du code-barre en masse pour les tiers
     BarcodeInitForProductsOrServices=Initialisation ou purge en masse des codes-barre des produits ou services
     CurrentlyNWithoutBarCode=Actuellement, vous avez <strong>%s</strong> enregistrements sur <strong>%s</strong> %s sans code barre défini.
     InitEmptyBarCode=Initialisez les valeurs pour les %s enregistrements vides suivant
    @@ -446,7 +450,7 @@ NoDetails=Pas plus de détails dans le pied-de-page
     DisplayCompanyInfo=Afficher l'adresse de la société
     DisplayCompanyManagers=Afficher le nom des responsables
     DisplayCompanyInfoAndManagers=Afficher l'adresse du tiers et le nom de son responsable
    -EnableAndSetupModuleCron=Si vous voulez avoir cette facture récurrente générée automatiquement, le module *%s* doit être activé et correctement configuré. Dans le cas contraire, la génération des factures doit être effectuée manuellement à partir de ce modèle avec le bouton *Créer*. Notez que même si vous avez activé la génération automatique, vous pouvez toujours lancer en toute sécurité la génération manuelle. La génération en double sur une même période n'est pas possibles.
    +EnableAndSetupModuleCron=Si vous voulez avoir cette facture récurrente générée automatiquement, le module *%s* doit être activé et correctement configuré. Dans le cas contraire, la création des factures doit être effectuée manuellement à partir de ce modèle avec le bouton *Créer*. Notez que même si vous avez activé la création automatique, vous pouvez toujours lancer, en toute sécurité, la création manuelle. En effet, il n'est pas possible de créer plusieurs factures sur une même période.
     ModuleCompanyCodeCustomerAquarium=%s suivi d'un code client tiers pour un code comptable client
     ModuleCompanyCodeSupplierAquarium=%s suivi du code d'un fournisseur tiers pour un code comptable fournisseur
     ModuleCompanyCodePanicum=Retourne un code comptable vide
    @@ -463,7 +467,7 @@ PageUrlForDefaultValues=Vous devez entrer ici l'URL relative de la page. Si vous
     PageUrlForDefaultValuesCreate=<br> Pour le formulaire pour créer un nouveau tiers, c'est <strong> %s </strong>, <br> Si vous voulez une valeur par défaut seulement si l'url a certains paramètres, vous pouvez utiliser <strong> %s </strong>
     PageUrlForDefaultValuesList=<br>Pour la page de liste des tiers, c'est <strong>%s</strong>,<br>Si vous voulez une valeur par défaut uniquement sir l'url a certains paramètres, vous pouvez utiliser <strong>%s</strong>
     EnableDefaultValues=Activer la fonction de valeurs par défaut personnalisées
    -EnableOverwriteTranslation=Activer la réécriture des traductions
    +EnableOverwriteTranslation=Permettre la réécriture des traductions
     GoIntoTranslationMenuToChangeThis=Une traduction a été trouvée pour le code de cette valeur. Pour changer cette valeur, vous devez modifier le fichier depuis Accueil > Configuration > Traduction.
     WarningSettingSortOrder=Attention, le réglage d'un ordre de tri par défaut peut entraîner une erreur technique lorsque le champ est inconnu dans le listing. Si vous rencontrez une telle erreur, revenez à cette page pour supprimer l'ordre de tri par défaut et restaurer le comportement par défaut.
     Field=Champ
    @@ -477,8 +481,10 @@ davDescription=Ajout un composant pour devenir un serveur DAV
     DAVSetup=Configuration du module DAV
     DAV_ALLOW_PUBLIC_DIR=Activer le répertoire public (répertoire WebDav sans login requis)
     DAV_ALLOW_PUBLIC_DIRTooltip=Le répertoire public WebDav est un répertoire WebDAV auquel tout le monde peut accéder (en lecture et en écriture), sans avoir besoin d'avoir/utiliser un compte de connexion/mot de passe existant.
    +DAV_ALLOW_ECM_DIR=Permettre l'accès au répertoire racine du module GED (connexion requise)
    +DAV_ALLOW_ECM_DIRTooltip=Répertoire racine où tous les fichiers sont téléchargés manuellement lors de l’utilisation du module GED. Comme pour la fonctionnalité via l'interface Web, vous aurez besoin d'un identifiant / mot de passe valide avec les autorisations accordées pour y accéder.
     # Modules
    -Module0Name=Utilisateurs & groupes
    +Module0Name=Utilisateurs & Groupes
     Module0Desc=Gestion des utilisateurs / employés et groupes
     Module1Name=Tiers
     Module1Desc=Gestion des tiers (sociétés, particuliers) et contacts
    @@ -546,9 +552,9 @@ Module310Name=Adhérents
     Module310Desc=Gestion des adhérents d'une association
     Module320Name=Flux RSS
     Module320Desc=Ajout de flux d'informations RSS dans les écrans Dolibarr
    -Module330Name=Marque-pages
    -Module330Desc=Gestion des marque-pages
    -Module400Name=Projets/Opportunités/Affaires
    +Module330Name=Marque-pages et raccourci
    +Module330Desc=Créez des raccourcis, toujours accessibles, vers les pages internes ou externes auxquelles vous accédez fréquemment
    +Module400Name=Projets ou Opportunités
     Module400Desc=Gestion des projets, opportunités/affaires et/ou tâches. Vous pouvez aussi assigner tous les autres éléments (facture, commande, proposition, intervention, ...) à ces projets et avoir une vue transverse depuis la vue projet.
     Module410Name=Webcalendar
     Module410Desc=Interface avec le calendrier Webcalendar
    @@ -562,7 +568,7 @@ Module600Name=Notifications d'événements métiers
     Module600Desc=Envoi de notifications par e-mails (déclenchées par des événements métiers) aux utilisateurs (configuration faite sur chaque fiche utilisateur), contacts de tiers (configuration faite sur chaque fiche tiers) ou vers des adresses e-mails spécifiques.
     Module600Long=Notez que ce module est dédié à l'envoi d'e-mails en temps réel lorsqu'un événement métier dédié se produit. Si vous cherchez une fonctionnalité pour envoyer des rappels par email de vos événements agenda, allez dans la configuration du module Agenda.
     Module610Name=Variantes de produits
    -Module610Desc=Autoriser la création de variantes de produits basées sur les attributs (couleur, taille,...)
    +Module610Desc=Création de variantes de produits (couleur, taille, etc.)
     Module700Name=Dons
     Module700Desc=Gestion des dons
     Module770Name=Notes de frais
    @@ -582,7 +588,7 @@ Module2200Desc=Active l'usage d'expressions mathématiques
     Module2300Name=Travaux planifiés
     Module2300Desc=Gestion des travaux planifiées (alias cron ou table chrono)
     Module2400Name=Événements/Agenda
    -Module2400Desc=Gestion des événements réalisés ou à venir. Laissez l'application tracer automatiquement les événements pour des raisons de suivi ou enregistrer manuellement les événements ou rendez-vous dans l'agenda. Ceci est le module le plus important pour une bonne Gestion de la Relation Client ou Fournisseur.
    +Module2400Desc=Gestion des événements. Laissez l'application tracer automatiquement les événements pour des besoin de suivi ou enregistrer manuellement les événements ou rendez-vous dans l'agenda. Ceci est le module le plus important pour une bonne Gestion de la Relation Client ou Fournisseur.
     Module2500Name=GED
     Module2500Desc=Gestion de documents (GED). Stockage automatic des documents générés ou stockés. Fonction de partage.
     Module2600Name=API/Web services (serveur SOAP)
    @@ -606,18 +612,22 @@ Module5000Name=Multi-société
     Module5000Desc=Permet de gérer plusieurs sociétés
     Module6000Name=Workflow
     Module6000Desc=Gestion du workflow (création automatique d'objet et / ou changement automatique d'état)
    -Module10000Name=Sites internet
    +Module10000Name=Sites web
     Module10000Desc=Créer des sites internet publics (sites web) avec un éditeur WYSIWYG. Indiquer à votre serveur web (Apache, Nginx, ...) le chemin d'accès au à dossier pour mettre votre site en ligne avec votre propre nom de domaine.
     Module20000Name=Demandes de congés
     Module20000Desc=Déclaration et suivi des congés des employés
     Module39000Name=Numéros de Lot/Série
     Module39000Desc=Gestion des lots et numéro de série, et date de péremption ou consommation sur les produits
    +Module40000Name=Multi-devise
    +Module40000Desc=Utiliser des devises alternatives dans les prix et les documents
     Module50000Name=PayBox
     Module50000Desc=Module permettant d'offrir une page de paiement en ligne par carte de crédit avec PayBox. Ceci peut être utilisé par les clients pour faire des paiements de montants libre ou pour des paiements d'un objet particulier de Dolibarr (facture, commande, ...)
     Module50100Name=Point de vente
     Module50100Desc=Module Caisse enregistreuse - Point de vente (POS)
    +Module50150Name=Caisse enregistreuses
    +Module50150Desc=Module de point de vente (POS à écran tactile).
     Module50200Name=Paypal
    -Module50200Desc=Module permettant d'offrir une page de paiement en ligne par carte de crédit avec Paypal. Ceci peut être utilisé par les clients pour faire des paiements de montants libre ou pour des paiements d'un objet particulier de Dolibarr (facture, commande, ...)
    +Module50200Desc=Module permettant d'offrir une page de paiement en ligne par carte de crédit avec PayBox. Ceci peut être utilisé par les clients pour faire des paiements de montants libre ou pour des paiements d'un objet particulier de Dolibarr (facture, commande, ...)
     Module50400Name=Comptabilité (avancée)
     Module50400Desc=Gestion de la comptabilité (double partie, comptabilité général et auxiliaire). Export du grand livre dans différent formats de logiciels comptables.
     Module54000Name=PrintIPP
    @@ -628,7 +638,7 @@ Module59000Name=Marges
     Module59000Desc=Module pour gérer les marges
     Module60000Name=Commissions
     Module60000Desc=Module pour gérer les commissions
    -Module62000Name=Incoterm
    +Module62000Name=Incoterms
     Module62000Desc=Ajouts de fonctionnalités pour gérer les incoterms
     Module63000Name=Ressources
     Module63000Desc=Gère les ressources (imprimantes, voitures, salles...). les ressources peuvent être affectées à des événements.
    @@ -651,7 +661,7 @@ Permission32=Créer/modifier les produits
     Permission34=Supprimer les produits
     Permission36=Voir/gérer les produits cachés
     Permission38=Exporter les produits
    -Permission41=Lire les projets et tâches (partagés ou dont vous êtes un contact). Permet la saisie de temps passé, par vous et votre hiérarchie (vos subordonnés), sur les tâches assignées.
    +Permission41=Lire les projets et tâches (partagés ou dont vous n'êtes pas contact). Permet la saisie de temps passé, pour vous-même et votre hiérarchie (vos subordonnés), sur les tâches assignées (Feuilles de temps).
     Permission42=Créer/modifier les projets (projets partagés et projets pour lesquels je suis contact). Permet aussi de créer des tâches et d'assigner des utilisateurs aux projets et tâches.
     Permission44=Supprimer les projets et tâches (partagés ou dont je suis contact)
     Permission45=Exporter les projets
    @@ -695,7 +705,7 @@ Permission122=Créer/modifier les tiers (sociétés) liés à l'utilisateur
     Permission125=Supprimer les tiers (sociétés) liés à l'utilisateur
     Permission126=Exporter les tiers (sociétés)
     Permission141=Consulter tous les projets et tâches (y compris privés dont je ne suis pas contact)
    -Permission142=Créer/modifier tous les projets et tâches (y compris privés dont je ne suis pas contact)
    +Permission142=Créer/modifier tous les projets et tâches (y compris privés dont vous n'êtes pas contact)
     Permission144=Supprimer les projets et tâches (y compris privés dont je ne suis pas contact)
     Permission146=Consulter les fournisseurs
     Permission147=Consulter les stats
    @@ -787,11 +797,9 @@ Permission401=Consulter les avoirs
     Permission402=Créer/modifier les avoirs
     Permission403=Valider les avoirs
     Permission404=Supprimer les avoirs
    -Permission501=Lire les fiches contrats/salaires
    -Permission502=Créer/modifier les contrats/salaires des employés
     Permission511=Lire les règlements de salaires
     Permission512=Créer/modifier les règlements de salaires
    -Permission514=Supprimer les salaires
    +Permission514=Supprimer les paiements de salaires
     Permission517=Exporter les salaires
     Permission520=Consulter les emprunts
     Permission522=Créer/Modifier les emprunts
    @@ -920,11 +928,11 @@ SetupNotSaved=Configuration non enregistrée
     BackToModuleList=Retour liste des modules
     BackToDictionaryList=Retour liste des dictionnaires
     TypeOfRevenueStamp=Type de timbre fiscal
    -VATManagement=Gestion TVA
    -VATIsUsedDesc=Le taux de TVA proposé par défaut lors de la création de propositions commerciales, factures, commandes, etc... répond à la règle standard suivante :<br>Si vendeur non assujetti à TVA, TVA par défaut=0. Fin de règle.<br>Si le (pays vendeur= pays acheteur) alors TVA par défaut=TVA du produit vendu. Fin de règle.<br>Si vendeur et acheteur dans Communauté européenne et bien vendu= moyen de transport neuf (auto, bateau, avion), TVA par défaut=0 (La TVA doit être payée par acheteur au centre d'impôts de son pays et non au vendeur). Fin de règle.<br>Si vendeur et acheteur dans Communauté européenne et acheteur= particulier alors TVA par défaut=TVA du produit vendu. Fin de règle.<br>Si vendeur et acheteur sont dans la Communauté européenne et que l'acheteur est une société alors TVA par défaut=0. Fin de règle.<br>Sinon la TVA proposée par défaut=0. Fin de règle.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
     VATIsNotUsedDesc=Le taux de TVA proposé par défaut est 0. C'est le cas d'associations, particuliers ou certaines petites sociétés.
     VATIsUsedExampleFR=En France, cela signifie que les entreprises ou les organisations sont assuetis à la tva (réel ou normal).
    -VATIsNotUsedExampleFR=En France, il s'agit des associations ne déclarant pas de TVA ou sociétés, organismes ou professions libérales ayant choisi le régime fiscal micro entreprise (TVA en franchise) et payant une TVA en franchise sans faire de déclaration de TVA. Ce choix fait de plus apparaître la mention "TVA non applicable - art-293B du CGI" sur les factures.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Taux
     LocalTax1IsNotUsed=Non assujeti
    @@ -934,21 +942,21 @@ LocalTax1Management=Gestion 2ème type de taxe
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Non assujeti
    -LocalTax2IsUsedDesc=Utilisation d'un 3ème type taxe (autre que TVA)
    -LocalTax2IsNotUsedDesc=Pas d'utilisation de 3ème type taxe (autre que TVA)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Pas d'utilisation de 2ème type taxe (autre que TVA)
     LocalTax2Management=Gestion 3ème type de tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= Gestion RE
    -LocalTax1IsUsedDescES= Le taux de RE proposé par défaut lors de la création de proposition commercial, facture, commande, etc… répond à la règle standard suivante:<br>Si acheteur non assujetti à RE, RE par défaut=0. Fin de règle.<br>Si acheteur assujetti à RE alors RE par défaut. Fin de règle.<br>
    -LocalTax1IsNotUsedDescES= Le taux de RE proposé par défaut est 0. Fin de règle.
    -LocalTax1IsUsedExampleES= En Espagne, ce sont des professionnels sous réserve de certaines sections spécifiques de l'IAE Espagnol.
    -LocalTax1IsNotUsedExampleES= En Espagne, ce sont des sociétés en commandite, les sociétés anonymes, etc... et les individus (autonomes) sous réserve de certaines sections de l'IAE Espagnol.
    -LocalTax2ManagementES= Gestion IRPF
    -LocalTax2IsUsedDescES= L'IRPF proposé par défaut lors de la création de proposition commerciale, facture, commande, etc… répond à la règle standard suivante:<br>Si vendeur non assujetti à IRPF, IRPF par défaut=0. Fin de règle.<br>Si vendeur assujetti à IRPF alors IRPF par défaut. Fin de règle.<br>
    -LocalTax2IsNotUsedDescES= L'IRPF proposé par défaut est 0. Fin de règle.
    -LocalTax2IsUsedExampleES= En Espagne, ce sont des professionnels autonomes et indépendants qui offrent des services, et des sociétés qui ont choisi le système fiscal du module.
    -LocalTax2IsNotUsedExampleES= En Espagne, ce sont des sociétés qui ne sont pas soumises au système fiscal du module.
    +LocalTax1ManagementES=Gestion RE
    +LocalTax1IsUsedDescES=Le taux de RE proposé par défaut lors de la création de propale, facture, commande, etc... répond à la règle standard suivante:<br>Si acheteur non assujetti à RE, RE par défaut=0. Fin de règle.<br>Si acheteur assujetti à RE alors RE par défaut. Fin de règle.<br>
    +LocalTax1IsNotUsedDescES=Le taux de RE proposé par défaut est 0. Fin de règle.
    +LocalTax1IsUsedExampleES=En Espagne, ce sont des professionnels sous réserve de certaines sections spécifiques de l'IAE Espagnol.
    +LocalTax1IsNotUsedExampleES=En Espagne, ce sont des sociétés en commandite, les sociétés anonymes, etc... et les individus (autonomes) sous réserve de certaines sections de l'IAE Espagnol.
    +LocalTax2ManagementES=Gestion IRPF
    +LocalTax2IsUsedDescES=Le IRPF proposé par défaut lors de la création de propale, facture, commande, etc... répond à la règle standard suivante:<br>Si vendeur non assujetti à IRPF, IRPF par défaut=0. Fin de règle.<br>Si vendeur assujetti à IRPF alors IRPF par défaut. Fin de règle.<br>
    +LocalTax2IsNotUsedDescES=L'IRPF proposé par défaut est 0. Fin de règle.
    +LocalTax2IsUsedExampleES=En Espagne, ce sont des professionnels autonomes et indépendants qui offrent des services, et des sociétés qui ont choisi le système fiscal du module.
    +LocalTax2IsNotUsedExampleES=En Espagne, ce sont des sociétés qui ne sont pas soumises au système fiscal du module.
     CalcLocaltax=Rapports sur les taxes locales
     CalcLocaltax1=Ventes - Achats
     CalcLocaltax1Desc=Les rapports des Taxes locales sont calculées avec la différence entre les taxes locales de ventes et les taxes locales d'achats
    @@ -958,7 +966,8 @@ CalcLocaltax3=Ventes
     CalcLocaltax3Desc=Le Rapports des Taxes locales sont le total des taxes locales de ventes
     LabelUsedByDefault=Libellé qui sera utilisé si aucune traduction n'est trouvée pour ce code
     LabelOnDocuments=Libellé sur les documents
    -NbOfDays=Nbre de jours
    +LabelOrTranslationKey=Libellé ou clé de traduction
    +NbOfDays=Nb. de jours
     AtEndOfMonth=En fin de mois
     CurrentNext=Current/Next
     Offset=Décalage
    @@ -984,7 +993,7 @@ DatabaseUser=Utilisateur de la base de données
     DatabasePassword=Mot de passe de la base de données
     Tables=Tables
     TableName=Nom de la table
    -NbOfRecord=Nb d'enr.
    +NbOfRecord=Nb. d'enregistrements
     Host=Serveur
     DriverType=Type du pilote
     SummarySystem=Résumé des informations systèmes
    @@ -996,7 +1005,7 @@ Skin=Thème visuel
     DefaultSkin=Thème visuel par défaut
     MaxSizeList=Longueur maximale des listes
     DefaultMaxSizeList=Longueur maximale par défaut des listes
    -DefaultMaxSizeShortList=Longueur maximale par défaut des listes courtes (e.g. dans la carte du client)
    +DefaultMaxSizeShortList=Longueur maximale par défaut des listes courtes (e.g. dans la fiche client)
     MessageOfDay=Message du jour
     MessageLogin=Message page de connexion
     LoginPage=Page de connexion
    @@ -1005,7 +1014,7 @@ PermanentLeftSearchForm=Zone de recherche permanente du menu de gauche
     DefaultLanguage=Langue à utiliser par défaut (code langue)
     EnableMultilangInterface=Activer l'interface multi-langue
     EnableShowLogo=Afficher le logo dans le menu gauche
    -CompanyInfo=Informations sur la société/organisation
    +CompanyInfo=Société/Organisation
     CompanyIds=Identifiants société/organisation
     CompanyName=Nom/Enseigne/Raison sociale
     CompanyAddress=Adresse
    @@ -1021,7 +1030,7 @@ OwnerOfBankAccount=Propriétaire du compte %s
     BankModuleNotActive=Module comptes bancaires non activé
     ShowBugTrackLink=Afficher lien <strong>"%s"</strong>
     Alerts=Alertes
    -DelaysOfToleranceBeforeWarning=Délais de tolérance avant alerte
    +DelaysOfToleranceBeforeWarning=Délais avant affichage de l'avertissement alerte retard
     DelaysOfToleranceDesc=Cet écran permet de définir les délais de tolérance après lesquels une alerte sera signalée à l'écran par le pictogramme %s sur chaque élément en retard.
     Delays_MAIN_DELAY_ACTIONS_TODO=Tolérance de retard avant alerte (en jours) sur les évènements planifiées (évènements de l'agenda) et pas encore réalisés
     Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolérance de retard (en jours) avant alerte pour les projets non clos à temps
    @@ -1032,16 +1041,16 @@ Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Tolérance de retard avant alerte (en jours)
     Delays_MAIN_DELAY_PROPALS_TO_BILL=Tolérance de retard avant alerte (en jours) sur propales non facturées
     Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolérance de retard avant alerte (en jours) sur services à activer
     Delays_MAIN_DELAY_RUNNING_SERVICES=Tolérance de retard avant alerte (en jours) sur services expirés
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolérance de retard avant alerte (en jours) sur factures fournisseur impayées
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolérance de retard avant alerte (en jours) sur factures client impayées
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolérance de retard avant alerte (en jours) sur factures fournisseurs impayées
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolérance de retard avant alerte (en jours) sur factures fournisseurs impayées
     Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolérance de retard avant alerte (en jours) sur rapprochements bancaires à faire
     Delays_MAIN_DELAY_MEMBERS=Tolérance de retard avant alerte (en jours) sur cotisations adhérents en retard
     Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolérance de retard avant alerte (en jours) sur chèques à déposer
     Delays_MAIN_DELAY_EXPENSEREPORTS=Tolérance de retard avant alerte (en jours) sur les notes de frais à approuver
    -SetupDescription1=L'espace configuration permet de réaliser le paramétrage afin de pouvoir commencer à utiliser l'application.
    -SetupDescription2=Les deux étapes obligatoires sont les 2 premières du menu de configuration, c'est à dire
    -SetupDescription3=Les paramètres dans le menu <a href="%s">%s -> %s</a>. Cette étape est requise car elle définie des données utilisées dans les écrans Dolibarr pour personnaliser le comportement par défaut du logiciel (pour les fonctionnalités liées à un pays par exemple).
    -SetupDescription4=Les paramètres dans le menu <a href="%s"> %s -> %s </a>. Cette étape est requise car Dolibarr ERP/CRM est un ensemble de plusieurs modules/applications, tous plus ou moins indépendants. Les fonctionnalités sont ajoutées aux menus pour chaque module que vous activez.
    +SetupDescription1=L'espace configuration permet de réaliser le paramétrage initial afin de pouvoir commencer à utiliser l'application.
    +SetupDescription2=Les deux étapes obligatoires sont les deux premières entrées dans le menu de configuration, soit
    +SetupDescription3=<a href="%s">%s -> %s</a>. Paramètres pour personnaliser le comportement par défaut du logiciel (comportement lié au pays par exemple).
    +SetupDescription4=<a href="%s"> %s -> %s </a><br>Cette étape est requise car Dolibarr ERP/CRM est un ensemble de plusieurs modules/applications, tous plus ou moins indépendants. Les fonctionnalités sont ajoutées aux menus pour chaque module que vous activez.
     SetupDescription5=Les autres entrées de configuration gèrent des paramètres facultatifs.
     LogEvents=Événements d'audit de sécurité
     Audit=Audit
    @@ -1060,7 +1069,7 @@ LogEventDesc=Vous pouvez activer ici, la journalisation des événements d'audit
     AreaForAdminOnly=Les paramètres d'installation ne peuvent être remplis que par les <b>utilisateurs administrateurs</b> uniquement.
     SystemInfoDesc=Les informations systèmes sont des informations techniques diverses accessibles en lecture seule aux administrateurs uniquement.
     SystemAreaForAdminOnly=Cet espace n'est accessible qu'aux utilisateurs de type administrateur. Aucune permission Dolibarr ne permet d'étendre le cercle des utilisateurs autorisés à cet espace.
    -CompanyFundationDesc=Éditez sur cette page toutes les informations connues de la société ou de l'association que vous souhaitez gérer (Pour cela, cliquez sur les boutons "%s" ou "%s" en bas de page)
    +CompanyFundationDesc=Éditez sur cette page toutes les informations connues de la société ou de l'association que vous souhaitez gérer. Pour cela, cliquez sur les boutons "%s" ou "%s" en bas de page.
     AccountantDesc=Renseignez sur cette page toutes les informations connues sur votre comptable
     AccountantFileNumber=Numéro de fichier
     DisplayDesc=Vous pouvez choisir ici tous les paramètres liés à l'apparence de Dolibarr
    @@ -1088,14 +1097,14 @@ UnitPriceOfProduct=Prix unitaire HT d'un produit
     TotalPriceAfterRounding=Prix total (HT/TVA/TTC) après arrondis
     ParameterActiveForNextInputOnly=Paramètre effectif pour les prochaines saisies uniquement
     NoEventOrNoAuditSetup=Aucun événement d'audit de sécurité n'a été enregistré. Ceci peut être normal si l'audit n'a pas été activé dans la configuration - sécurité - audit.
    -NoEventFoundWithCriteria=Aucun événement d'audit de sécurité trouvé avec ces critères.
    +NoEventFoundWithCriteria=Aucun événement d'audit de sécurité trouvé avec ces critères de recherche.
     SeeLocalSendMailSetup=Voir la configuration locale de sendmail
     BackupDesc=Pour réaliser une sauvegarde complète de Dolibarr, vous devez :
     BackupDesc2=Sauvegardez le contenu du répertoire document (<b>%s</b>) qui contient tous les fichiers envoyés et générés (Par conséquent il contient également les fichiers dump générés à l'étape 1).
    -BackupDesc3=Sauvez le contenu de votre base de données (<b>%s</b>) dans un fichier « dump ». Pour cela vous pouvez utiliser l'assistant ci-dessous.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Le répertoire archivé devra être placé en lieu sûr.
     BackupDescY=Le fichier « dump » généré devra être placé en lieu sûr.
    -BackupPHPWarning=La sauvegarde n'est pas garantie avec cette méthode. Préférez la méthode précédente.
    +BackupPHPWarning=La sauvegarde n'est pas garantie avec cette méthode. Il est recommandé d'utiliser la méthode précédente.
     RestoreDesc=Pour restaurer une sauvegarde de Dolibarr, vous devez :
     RestoreDesc2=Restaurez le fichier archive (fichier zip par exemple) du répertoire documents en extrayant l'arborescence dans le répertoire documents d'une nouvelle installation de Dolibarr ou dans le répertoire documents de cette installation (<b>%s</b>).
     RestoreDesc3=Restaurez les données, depuis le fichier « dump » de sauvegarde, dans  la base de données d'une nouvelle installation de Dolibarr ou de cette instance en cours (<b>%s</b>). Attention, une fois la restauration faite, il faudra utiliser un identifiant/mot de passe administrateur existant à l'époque de la sauvegarde pour se connecter. Pour restaurer la base dans l'installation actuelle, vous pouvez utiliser l'assistant suivant.
    @@ -1109,7 +1118,7 @@ YourPHPDoesNotHaveSSLSupport=Fonctions SSL non présentes dans votre PHP
     DownloadMoreSkins=Plus de thèmes à télécharger
     SimpleNumRefModelDesc=Renvoie le numéro sous la forme %syymm-nnnn où yy est l'année, mm le mois et nnnn un compteur séquentiel sans rupture et sans remise à 0.
     ShowProfIdInAddress=Afficher l'identifiant professionnel dans les adresses sur les documents
    -ShowVATIntaInAddress=Cacher l'identifiant de TVA Intracommunautaire dans les adresses sur les documents
    +ShowVATIntaInAddress=Cacher l'identifiant de TVA Intracommunautaire dans les adresses sur les documents.
     TranslationUncomplete=Traduction partielle
     MAIN_DISABLE_METEO=Désactiver la vue météo
     MeteoStdMod=Mode standard
    @@ -1118,7 +1127,7 @@ MeteoPercentageMod=Mode pourcentage
     MeteoPercentageModEnabled=Mode pourcentage activé
     MeteoUseMod=Cliquez pour utiliser %s
     TestLoginToAPI=Tester connexion à l'API
    -ProxyDesc=Certaines fonctions de Dolibarr nécessitent que le serveur ait accès à internet. Définissez ici les paramètres de ces accès. Si le serveur Dolibarr est derrière un proxy, ces paramètres indiquent à Dolibarr comment le traverser.
    +ProxyDesc=Certaines fonctions de Dolibarr nécessitent que le serveur ait accès à internet. Définissez ici les paramètres pour les fonctions qui nécessitent cet  accès. Si le serveur Dolibarr est derrière un proxy, ces paramètres indiquent à Dolibarr comment accéder à internet à travers celui-ci.
     ExternalAccess=Accès externes
     MAIN_PROXY_USE=Utiliser un serveur proxy mandataire (sinon accès direct à internet)
     MAIN_PROXY_HOST=Nom/Adresse du serveur proxy mandataire
    @@ -1132,7 +1141,7 @@ ExtraFieldsLinesRec=Attributs supplémentaires (ligne de factures modèles)
     ExtraFieldsSupplierOrdersLines=Attributs supplémentaires (lignes de commandes)
     ExtraFieldsSupplierInvoicesLines=Attributs supplémentaires (lignes de factures)
     ExtraFieldsThirdParties=Attributs supplémentaires (tiers)
    -ExtraFieldsContacts=Attributs supplémentaires (contacts/adresses)
    +ExtraFieldsContacts=Attributs supplémentaires (adresses de contacts)
     ExtraFieldsMember=Attributs supplémentaires (adhérents)
     ExtraFieldsMemberType=Attributs supplémentaires (type d'adhérents)
     ExtraFieldsCustomerInvoices=Attributs supplémentaires (factures)
    @@ -1146,13 +1155,13 @@ AlphaNumOnlyLowerCharsAndNoSpace=uniquement des caractères alphanumériques et
     SendmailOptionNotComplete=Attention, sur certains systèmes Linux, avec cette méthode d'envoi, pour pouvoir envoyer des emails en votre nom, la configuration d'exécution de sendmail doit contenir l'option <b>-ba</b> (paramètre <b>mail.force_extra_parameters</b> dans le fichier <b>php.ini</b>). Si certains de vos destinataires ne reçoivent pas de message, essayer de modifier ce paramètre PHP avec <b>mail.force_extra_parameters = -ba</b>.
     PathToDocuments=Chemin d'accès aux documents
     PathDirectory=Répertoire
    -SendmailOptionMayHurtBuggedMTA=La fonction d'envoi de mails par la méthode "PHP mail directe" génère un message mail qui peut être mal interprété par certains serveurs mal configurés de réception de mail. Cela se traduit par des mails non lisibles chez les personnes hébergés par ces plateformes boguées. C'est le cas des clients de certains fournisseurs d'accès internet (Ex: Orange). Ce n'est pas un problème, ni dans Dolibarr ni dans PHP mais sur le serveur de réception. Vous pouvez toutefois ajouter l'option MAIN_FIX_FOR_BUGGED_MTA à 1 dans configuration - divers pour modifier Dolibarr afin de compenser le bug. Toutefois ce sont les serveurs respectueux du standard d'envoi de mail qui pourront avoir des problèmes. L'autre solution (recommandée) est d'utiliser la méthode d'envoi SMTP socket library qui n'a aucun de ces inconvénients.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Configuration de la traduction
     TranslationKeySearch=Rechercher une traduction
     TranslationOverwriteKey=Ajouter une traduction
     TranslationDesc=Pour sélectionner la langue d'affichage de l'environnement : <br>* langue par défaut : menu <strong>Accueil - Configuration - Affichage</strong><br>* langue par utilisateur: Onglet <strong>Interface utilisateur</strong> de la fiche utilisateur (Accès a la fiche de l'utilisateur depuis l'identifiant dans l'angle supérieur droit de l'écran).
     TranslationOverwriteDesc=Vous pouvez aussi écraser des valeurs en complétant/corrigeant le tableau suivant. Choisissez votre code de langue depuis la liste déroulante "%s", choisissez le code trouvé dans le fichier lang dans le champ "%s", et dans "%s" la nouvelle valeur que vous souhaitez utiliser comme nouvelle traduction.
    -TranslationOverwriteDesc2=Vous pouvez utiliser l'autre onglet pour vous aider à connaître la clé de traduction à utiliser
    +TranslationOverwriteDesc2=Vous pouvez utilisez l'autre onglet pour vous aider à trouver la clé de traduction à utiliser
     TranslationString=Traduction
     CurrentTranslationString=Chaîne de traduction actuelle
     WarningAtLeastKeyOrTranslationRequired=Un critère de recherche est nécessaire au moins pour la clé ou la valeur de traduction
    @@ -1161,22 +1170,23 @@ OriginalValueWas=La traduction d'origine est écrasée. La valeur initiale étai
     TransKeyWithoutOriginalValue=Vous avez forcé une nouvelle traduction pour la clé de traduction '<strong>%s</strong>' qui n'existe dans aucun fichier de langue
     TotalNumberOfActivatedModules=Modules activés : <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Vous devez activer au moins une fonctionnalité
    -ClassNotFoundIntoPathWarning=La classe %s n'a pas été trouvée dans le chemin PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Oui en été
    -OnlyFollowingModulesAreOpenedToExternalUsers=Remarque, seuls les modules suivants sont ouverts aux utilisateurs externes (quelles qu'en soient les permissions de ces utilisateurs) et seulement si les permissions leur ont été données:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Stockage des sessions chiffrées par Suhosin
     ConditionIsCurrently=La condition est actuellement %s
     YouUseBestDriver=Vous utilisez le driver %s qui est le driver recommandé actuellement.
    -YouDoNotUseBestDriver=Vous utilisez le driver %s mais le driver %s est recommandé.
    -NbOfProductIsLowerThanNoPb=Vous n'avez que %s produits/services en base. Ceci ne requiert pas d'optimisation particulière.
    -SearchOptim=Optimization des recherches
    -YouHaveXProductUseSearchOptim=Vous avez %s produits/services en base. Il est recommandé d'ajouter la constante PRODUCT_DONOTSEARCH_ANYWHERE à 1 dans Accueil-Configuration-Divers, vous limiterez ainsi la recherche au début de la chaine rendant possible l'utilisation de l'index et obtiendrez une réponse immédiate.
    -BrowserIsOK=Vous utilisez le navigateur %s. Ce navigateur est réputé optimisé pour la sécurité et performance.
    -BrowserIsKO=Vous utilisez le navigateur %s. Ce navigateur est déconseillé pour des raisons de sécurité, performance et qualité des pages restituées. Nous vous recommandons d'utiliser Firefox, Chrome, Opera ou Safari.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
    +SearchOptim=Optimisation des recherches
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug est chargé.
     XCacheInstalled=XCache est chargé.
    -AddRefInList=Afficher les références client/fournisseur dans les listes (listes déroulantes ou à autocomplétion) et les libellés des liens clicables. Les tiers apparaîtront alors sous la forme "CC12345 - SC45678 - La big company coorp", au lieu de "La big company coorp".
    -AskForPreferredShippingMethod=Demander la méthode d'expédition préférée pour les tiers.
    +AddRefInList=Afficher les références client/fournisseur dans les listes (listes déroulantes ou à autocomplétion) et les libellés des liens clicables.<br>Les tiers apparaîtront alors sous la forme "CC12345 - SC45678 - La big company coorp", au lieu de "La big company coorp".
    +AddAdressInList=Affiche les informations sur l’adresse du client/fournisseur (liste de sélection ou liste déroulante) <br> Les tiers apparaîtront avec le format de nom suivant: "The Big Company corp. - 21, rue du saut 123456 Big town - USA" au lieu de "The Big Company corp".
    +AskForPreferredShippingMethod=Demander la méthode d'expédition préférée pour les Tiers
     FieldEdition=Édition du champ %s
     FillThisOnlyIfRequired=Exemple: +2 (ne remplir que si un décalage d'heure est constaté dans l'export)
     GetBarCode=Récupérer code barre
    @@ -1195,19 +1205,19 @@ UserMailRequired=Email requis pour créer un nouvel utilisateur
     HRMSetup=Configuration du module GRH
     ##### Company setup #####
     CompanySetup=Configuration du module Tiers
    -CompanyCodeChecker=Modèle de génération et contrôle des codes tiers (client ou fournisseur)
    -AccountCodeManager=Modèle de génération des codes comptables (client ou fournisseur)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=Les notifications activent l'envoi d'e-mails automatiques pour certains événements de Dolibarr. L'envoi de ces e-mails automatiques est défini selon :
     NotificationsDescUser=* par utilisateurs, utilisateur par utilisateur.
     NotificationsDescContact=* par tiers de contacts (clients ou fournisseur), contact par contact.
     NotificationsDescGlobal=* ou en définissant des emails cibles fixes sur la page de configuration du module.
     ModelModules=Modèle de documents
    -DocumentModelOdt=Génération depuis des modèles OpenDocument (Fichier .ODT ou .ODS OpenOffice, KOffice, TextEdit…)
    +DocumentModelOdt=Génération depuis des modèles OpenDocument (Fichier .ODT ou .ODS LibreOffice, KOffice, TextEdit…)
     WatermarkOnDraft=Filigrane sur les documents brouillons
     JSOnPaimentBill=Activer la fonctionnalité de remplissage automatique des lignes de paiement sur le formulaire de paiement
     CompanyIdProfChecker=Règles sur les Identifiants professionnels
     MustBeUnique=Doit être unique ?
    -MustBeMandatory=Obligatoire pour créer des tiers (si num tva ou type de société défini) ?
    +MustBeMandatory=Obligatoire pour créer des tiers ?
     MustBeInvoiceMandatory=Obligatoire pour valider des factures ?
     TechnicalServicesProvided=Services techniques fournis
     #####DAV #####
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Un lien d'exportation du calendrier au format <b>%s</b> s
     BillsSetup=Configuration du module Factures
     BillsNumberingModule=Modèle de numérotation des factures et avoirs
     BillsPDFModules=Modèle de document de factures
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Modèle de document pour les règlements
     CreditNote=Avoir
     CreditNotes=Avoirs
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Gérer un identifiant pour chaque adhérent
     AdherentMailRequired=Email obligatoire pour créer un nouvel adhérent
     MemberSendInformationByMailByDefault=Case à cocher pour envoyer un email de confirmation (validation ou nouvelle cotisation) aux adhérents est à oui par défaut.
     VisitorCanChooseItsPaymentMode=Le visiteur peut choisir parmi les modes de paiement disponibles
    +MEMBER_REMINDER_EMAIL=Activer le rappel automatique <b> par e-mail </b> des abonnements expirés. Remarque: le module <strong> %s </strong> doit être activé et configuré correctement pour qu'un rappel soit envoyé.
     ##### LDAP setup #####
     LDAPSetup=Configuration du module LDAP
     LDAPGlobalParameters=Paramètres globaux
    @@ -1346,8 +1358,8 @@ LDAPSynchroKO=Échec du test de synchronisation
     LDAPSynchroKOMayBePermissions=Échec du test de synchronisation. Vérifier que la connexion au serveur est correctement configurée et permet les mises à jour LDAP
     LDAPTCPConnectOK=Connexion TCP au serveur LDAP réussie (Serveur=%s, Port=%s)
     LDAPTCPConnectKO=Connexion TCP au serveur LDAP échouée (Serveur=%s, Port=%s)
    -LDAPBindOK=Connection/Authentification au serveur LDAP réussie (Serveur=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connexion/Authentification au serveur LDAP échouée (Serveur=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=Serveur LDAP configuré en version 3
     LDAPSetupForVersion2=Serveur LDAP configuré en version 2
     LDAPDolibarrMapping=Mapping Dolibarr
    @@ -1409,39 +1421,40 @@ LDAPDescMembersTypes=Cette page permet de définir le nom des attributs de l'arb
     LDAPDescValues=Les valeurs exemples sont adaptées à <b>OpenLDAP</b> avec les schémas suivant chargés: <b>core.schema, cosine.schema, inetorgperson.schema</b>). Si vous utilisez les valeurs suggérées et OpenLDAP, modifiez votre fichier de configuration LDAP <b>slapd.conf</b> pour avoir tous ces schémas actifs.
     ForANonAnonymousAccess=Pour un accès authentifié (pour accès en écriture par exemple)
     PerfDolibarr=Rapport de configuration/optimisation sur la performance
    -YouMayFindPerfAdviceHere=Sur cette page vous trouverez quelques indicateurs ou conseils pour optimiser la performance.
    -NotInstalled=Non installé, aussi votre serveur n'est pas ralentit par cela.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Cache applicatif
     MemcachedNotAvailable=Aucun cache applicatif trouvé. Vous pouvez accélérer les performances de Dolibarr en installant un serveur de cache Memcached et un module de cache applicatif exploitant ce serveur.<br>Plus d'info sur la page <a href="http://wiki.dolibarr.org/index.php/Module_MemCached">http://wiki.dolibarr.org/index.php/Module_MemCached</a>. Notez que de nombreux hébergeurs low-cost ne fournissent pas de tels serveurs de cache dans leur infrastructure.
     MemcachedModuleAvailableButNotSetup=Le module memcached pour le cache applicatif a été trouvé mais la configuration de ce module n'est pas complète.
     MemcachedAvailableAndSetup=Le module memcached dédié à l'utilisation du serveur de cache memcached est activé.
     OPCodeCache=Cache OPCode
    -NoOPCodeCacheFound=Pas de cache OPCode trouvé. Peut-être utilisez-vous un cache OPCode différent de XCache ou eAccelerator (bien), peut-être n'avez vous pas du tout de cache OPCode (très mauvais).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=Cache HTTP des ressources statiques (css, img, javascript)
     FilesOfTypeCached=Fichiers de type %s mis en cache par le serveur HTTP
     FilesOfTypeNotCached=Fichiers de type %s non mis en cache par le serveur HTTP
     FilesOfTypeCompressed=Fichiers de type %s compressé par le serveur HTTP
     FilesOfTypeNotCompressed=Fichiers de type %s non compressé par le serveur HTTP
     CacheByServer=Cache par le serveur
    -CacheByServerDesc=Par exemple, en utilisant la directive Apache "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache par le navigateur
     CompressionOfResources=Compression des réponses HTTP
    -CompressionOfResourcesDesc=Par exemple, en utilisant la directive Apache "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Une détection automatique n'est pas possible avec le navigateur courant
     DefaultValuesDesc=Vous pouvez définir/forcer ici la valeur par défaut que vous voulez obtenir lorsque vous créez un nouvel enregistrement, et/ou les filtres par défaut ou ordre de tri des listes.
     DefaultCreateForm=Valeurs par défaut (sur les formulaires de création)
     DefaultSearchFilters=Filtres de recherche par défaut
     DefaultSortOrder=Ordre de tri par défaut 
     DefaultFocus=Champs par défaut ayant le focus
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Configuration du module Produits
     ServiceSetup=Configuration du module Services
     ProductServiceSetup=Configuration des modules Produits et Services
     NumberOfProductShowInSelect=Nombre maximum de produits dans les listes déroulantes (0=aucune limite)
    -ViewProductDescInFormAbility=Visualisation des descriptions produits dans les formulaires (sinon en tant que bulle d'aide)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Ajoute dans l'onglet Fichiers joints des produits/services, une option pour fusionner le document PDF du produit au PDF des propositions Azur si le produit/services est inclut dans la proposition.
    -ViewProductDescInThirdpartyLanguageAbility=Visualisation des descriptions de produits dans la langue du tiers
    -UseSearchToSelectProductTooltip=Si vous avez un nombre important de produits (>100 000), vous pourrez améliorer les performances en positionnant la constante PRODUCT_DONOTSEARCH_ANYWHERE à 1 dans Configuration->Divers. La recherche sera alors limité au début des chaines.
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectProduct=Attendre que vous ayez appuyé sur une touche avant de charger le contenu de la liste déroulante des produits (Cela peut augmenter les performances si vous avez un grand nombre de produits, mais cela est moins convivial)
     SetDefaultBarcodeTypeProducts=Type de code-barre utilisé par défaut pour les produits
     SetDefaultBarcodeTypeThirdParties=Type de code-barre utilisé par défaut pour les tiers
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Editeur avancé
     ActivateFCKeditor=Activer l'éditeur avancé pour :
     FCKeditorForCompany=Création/édition WYSIWIG de la description et note des éléments (autre que produits/services)
     FCKeditorForProduct=Création/édition WYSIWIG de la description et note des produits/services
    -FCKeditorForProductDetails=Création/édition WYSIWIG des lignes détails produits sur tous les éléments (commandes, propales, factures, etc...). <font class="warning">Attention: L'utilisation pour ce cas est fortement déconseillée car peut poser des problèmes dans la gestion de caractères et mise en page des fichiers PDF générés.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= Création/édition WYSIWIG des emailings (Outils->Emailings)
     FCKeditorForUserSignature=Création/édition WYSIWIG de la signature des utilisateurs
     FCKeditorForMail=Création/édition WYSIWIG tous les emails (sauf Outils->Emailings)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=La connexion a réussi mais la base ne semble pas être une base OSCommerce (clé %s  non trouvée dans la table %s).
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
     OSCommerceTestOk=La connexion au serveur '%s' sur la base '%s' par l'utilisateur '%s' a réussi.
    -OSCommerceTestKo1=La connexion au serveur '%s' a réussi mais la base '%s' n'a pu être atteinte.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=La connexion au serveur '%s' par l'utilisateur '%s' à échoué.
     ##### Stock #####
     StockSetup=Configuration du module Stock / Entrepôt
    -IfYouUsePointOfSaleCheckModule=Si vous utilisez un module Point de Vente (module POS fourni par défaut ou un autre module externe), cette configuration peut être ignoré par votre module point de vente. La plupart de modules Point de Vente sont conçus pour créer immédiatement une facture et de réduire les stocks par défaut quelles que soient les options ici. Donc, si vous avez besoin ou non d'avoir une diminution du stock lors de l'enregistrement d'une vente dans votre Point de Vente, vérifiez également la configuration de votre module POS.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu supprimé
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition d'affichage plein ou grisé
     DetailLangs=Fichier .lang pour la traduction du code libellé
     DetailUser=Interne / Externe / Tous
     Target=Cible
    -DetailTarget=Cible liens menu (_blank pour ouvrir une nouvelle fenêtre)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Niveau (-1:menu haut, 0:entête menu, >0 menu et sous menu)
     ModifMenu=Modification du menu
     DeleteMenu=Effacer entrée de menu
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=TVA sur encaissement, l'exigibilité de la TVA est:<br>- su
     OptionVatDebitOptionDesc=TVA sur débit, l'exigibilité de la TVA est:<br>- sur livraison pour les biens (en pratique on utilise la date de facturation)<br>- sur facturation (débit) pour les services
     OptionPaymentForProductAndServices=Sur paiements pour les produits et services
     OptionPaymentForProductAndServicesDesc=La TVA est due: <br> - sur le paiement pour les marchandises <br> - sur les paiements pour les services
    -SummaryOfVatExigibilityUsedByDefault=Moment d'exigibilité par défaut de la TVA pour l'option choisie:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Sur livraison
     OnPayment=Sur paiement
     OnInvoice=Sur facture
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Code comptable achat
     AgendaSetup=Configuration du module actions et agenda
     PasswordTogetVCalExport=Clé pour autoriser le lien d'exportation
     PastDelayVCalExport=Ne pas exporter les événements de plus de
    -AGENDA_USE_EVENT_TYPE=Utilisez les types d'événements (gérés dans le menu Configuration -> Dictionnaires -> Type d'événements agenda)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Configurez automatiquement cette valeur par défaut pour un type d'événement dans un formulaire de création d'événement.
    -AGENDA_DEFAULT_FILTER_TYPE=Positionner automatiquement ce type d'événement dans le filtre de recherche de la vue agenda
    -AGENDA_DEFAULT_FILTER_STATUS=Positionner automatiquement ce statut d'événement dans le filtre de recherche de la vue agenda
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Quel onglet voulez-vous voir ouvrir par défaut quand on choisit le menu Agenda
     AGENDA_REMINDER_EMAIL=Activer le rappel d'événement <b> par e-mail </b> (l'option de rappel / délai peut être défini pour chaque événement). Remarque: Le module <strong> %s </strong> doit être activé et configuré correctement pour que le rappel soit envoyé à la bonne fréquence.
    -AGENDA_REMINDER_BROWSER=Activer la notification d'événement <b>dans le navigateur de l'utilisateur</b> (lorsque la date de l'événement est atteinte, chaque utilisateur peut refuser ceci au moment de la question de confirmation posée par le navigateur)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Activer les notifications sonores.
     AGENDA_SHOW_LINKED_OBJECT=Afficher l'objet lié dans la vue agenda
     ##### Clicktodial #####
     ClickToDialSetup=Configuration du module Click To Dial
     ClickToDialUrlDesc=URL appelée quand un clic sur l'icône téléphone est fait. Dans l'URL, vous pouvez utiliser les tags<br><b>__PHONETO__</b> qui sera remplacée par le numéro de téléphone de la personne à appeler<br><b>__PHONEFROM__</b> qui sera remplacée par le numéro de l'appelant (vous)<br><b>__LOGIN__</b> qui sera remplacée par l'identifiant d'accès de l'utilisateur à l'application d'appel (à définir sur la fiche utilisateur) et <br><b>__PASS__</b> qui sera remplacée par le mot de passe d'accès de l'utilisateur à l'application d'appel (également à définir sur la fiche utilisateur).
    -ClickToDialDesc=Ce module permet de rendre un numéro de téléphone cliquable. Un clique sur cet icone fera votre téléphone appeler le numéro cliqué. Ce module peut être utilisé pour appeler un système de centre d'appel à partir de Dolibarr. 
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Utiliser un lien «Tel.» sur les numéros de téléphone
    -ClickToDialUseTelLinkDesc=Utilisez cette méthode si vos utilisateurs ont un softphone ou une interface de logiciel installé sur un même ordinateur que le navigateur, et a appelé lorsque vous cliquez sur un lien dans votre navigateur qui commencent par "tel:". Si vous avez besoin d'une solution de serveur complet (pas besoin d'installation locale du logiciel), vous devez définir ce "Non" et remplissez champ suivant.
    +ClickToDialUseTelLinkDesc=Utilisez cette méthode si vos utilisateurs ont un softphone ou une interface de logiciel installé sur un même ordinateur que le navigateur, et a appelé lorsque vous cliquez sur un lien dans votre navigateur qui commencent par "tel:". Si vous avez besoin d'une solution de serveur complet (pas besoin d'installation locale du logiciel), vous devez définir ceci à  "Non" et remplir le champ suivant.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Caisse enregistreuse
     CashDeskSetup=Configuration du module Point de vente/caisse enregistreuse
    -CashDeskThirdPartyForSell=Tiers générique à utiliser par défaut pour les ventes
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Compte par défaut à utiliser pour l'encaissement en liquide
     CashDeskBankAccountForCheque= Compte par défaut à utiliser pour l'encaissement en chèque
     CashDeskBankAccountForCB= Compte par défaut à utiliser pour l'encaissement en carte de crédit
    -CashDeskDoNotDecreaseStock=Désactiver la réduction de stocks systématique lorsque une vente se fait à partir du Point de Vente (si «non», la réduction du stock est faite pour chaque vente faite depuis le POS, quelquesoit l'option de changement de stock définit dans le module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Forcer et restreindre l'emplacement/entrepôt à utiliser pour la réduction de stock
    -StockDecreaseForPointOfSaleDisabled=Réduction de stock lors de l'utilisation du Point de Vente désactivée
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=La décrémentation de stock depuis ce module Point de Vente n'est pas encore compatible avec la gestion des numéros de lots/série.
    -CashDeskYouDidNotDisableStockDecease=Vous n'avez pas désactivé la réduction de stocks lors de la réalisation d'une vente depuis le Point de Vente. Aussi, un entrepôt/emplacement est nécessaire.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Configuration du module Marque-pages
    -BookmarkDesc=Ce module vous permet de gérer des liens et raccourcis. Il permet aussi d'ajouter n'importe quelle page de Dolibarr ou lien web dans le menu d'accès rapide sur la gauche.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Nombre maximum de marques-pages à afficher dans le menu
     ##### WebServices #####
     WebServicesSetup=Configuration du module Webservices
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Module de numérotation des bordereaux de remises
     MultiCompanySetup=Configuration du module Multi-société
     ##### Suppliers #####
     SuppliersSetup=Configuration du module Fournisseurs
    -SuppliersCommandModel=Modèle de commandes fournisseur complet (logo…)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Modèle de factures fournisseur complet (logo…)
     SuppliersInvoiceNumberingModel=Modèles de numérotation des factures fournisseur
     IfSetToYesDontForgetPermission=Si positionné sur Oui, n'oubliez pas de donner les permissions aux groupes ou utilisateurs qui auront le droit de cette action.
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Configuration du module Projets
     ProjectsModelModule=Modèles de document de rapport projets
     TasksNumberingModules=Modèles de numérotation des références tâches
     TaskModelModule=Modèles de document de rapport tâches
    -UseSearchToSelectProject=Attendre que vous ayez appuyé sur une touche avant de charger le contenu de la liste déroulante des projets (Cela peut augmenter les performances si vous avez un grand nombre de projets, mais cela est moins convivial)
    +UseSearchToSelectProject=Attendre que vous ayez appuyé sur une touche avant de charger le contenu de la liste déroulante des projets.<br> Cela peut augmenter les performances si vous avez un grand nombre de projets, mais cela est moins convivial.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Période fiscales
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Vous pouvez trouver d'autr
     ListOfNotificationsPerUser=Liste des notifications par utilisateur*
     ListOfNotificationsPerUserOrContact=Liste des notifications par utilisateur* ou par contact**
     ListOfFixedNotifications=Liste des notifications emails fixes
    -GoOntoUserCardToAddMore=Aller sur l'onglet "Notificiation" de l'utilisateur pour ajouter ou modifier une notification par utilisateurs
    -GoOntoContactCardToAddMore=Rendez-vous sur l'onglet "Notifications" d'un tiers pour ajouter ou enlever les notifications pour les contacts/adresses
    +GoOntoUserCardToAddMore=Allez dans l'onglet "Notifications" d'un utilisateur pour ajouter ou supprimer des notifications pour les utilisateurs
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Seuil
     BackupDumpWizard=Assistant de génération d'un fichier de sauvegarde de la base de données
     SomethingMakeInstallFromWebNotPossible=L'installation de module externe est impossible depuis l'interface web pour la raison suivante : 
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=L'installation de module externe depui
     ConfFileMustContainCustom=Installer ou créer un module externe à partir de l'application nécessite de sauvegarder les fichiers du module dans le répertoire <strong>%s</strong>. Pour que ce répertoire soit reconnu par Dolibarr, vous devez paramétrer le fichier de configuration <strong>conf/conf.php</strong> en ajoutant les 2 lignes suivantes :<br><strong>$dolibarr_main_url_root_alt='/custom'</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Mettre en surbrillance les lignes de la table lorsque la souris passe au-dessus
     HighlightLinesColor=Couleur de la ligne de surbrillance lorsque la souris passe au-dessus (laisser vide pour ne pas mettre en surbrillance)
    +HighlightLinesChecked=Couleur de la ligne de surbrillance lorsque la souris passe au-dessus (laisser vide pour ne pas mettre en surbrillance)
     TextTitleColor=Couleur du texte du titre de la page
     LinkColor=Couleur des liens
     PressF5AfterChangingThis=Appuyez sur la touche CTRL+F5 ou videz le cache de votre navigateur après avoir modifié cette valeur pour que le changement soit effectif
    @@ -1718,7 +1732,7 @@ PositionIntoComboList=Position de la ligne dans des listes déroulantes
     SellTaxRate=Taux de TVA
     RecuperableOnly=Oui pour une TVA "Non Perçue mais Récupérable" dédiée à certains pays comme la France. Gardez la valeur à "Non" dans tous les autres cas.
     UrlTrackingDesc=Si le fournisseur ou le service de transport offrent une page ou un site Web pour vérifier l'état de votre envoi, vous pouvez l'entrer ici. Vous pouvez utiliser la clé {TRACKID} dans les paramètres d'URL afin que le système la remplace par la valeur du numéro de suivi entré sur la fiche d'expédition.
    -OpportunityPercent=Lorsque vous créez une opportunité, vous aurez défini un montant estimatif de projet/affaire. Selon le statut de l'opportunité, ce montant peut être multiplié par ce taux pour évaluer montant probable que vos opportunités sont susceptibles de générer. La valeur est un pourcentage (entre 0 et 100).
    +OpportunityPercent=Lorsque vous créez une opportunité, vous pouvez ďéfinir un montant estimatif de projet/affaire. Selon le statut de l'opportunité, ce montant peut être multiplié par ce taux pour évaluer le montant probable que vos opportunités sont susceptibles de générer. La valeur est un pourcentage (entre 0 et 100).
     TemplateForElement=Cet enregistrement modèle est dédié à quel élément
     TypeOfTemplate=Type de modèle
     TemplateIsVisibleByOwnerOnly=Le modèle est visible par le propriétaire seulement
    @@ -1750,7 +1764,7 @@ ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s est disponible. La ver
     ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s est disponible. La version %s est une version de maintenance, aussi elle ne contient que des correctifs de bugs. Nous recommandons à toute personne utilisant une version plus ancienne de migrer vers celle-ci. En tant que version de maintenance, aucune nouvelle fonctionnalité n'est ajoutée, ni modification de format de données. Vous pouvez télécharger cette version à partir de la zone de téléchargement du portail https://www.dolibarr.org (sous-répertoire "Versions stables"). Vous pouvez lire le <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> pour la liste complète des changements.
     MultiPriceRuleDesc=Quand l'option « Plusieurs niveaux de prix par produit/service» est activée, vous pouvez définir différents prix (un par niveau de prix) pour chaque produits. Pour sauver du temps, vous pouvez entrer ici une règle pour avoir un prix pour chaque niveau calculé automatiquement. Cette page est ici pour sauver du temps et peut être utile si vos prix pour chaque niveaux sont relatif au premier niveau. Vous pouvez ignorer cette page dans la plupart des cas
     ModelModulesProduct=Modèles des documents de produits
    -ToGenerateCodeDefineAutomaticRuleFirst=Pour pouvoir générer automatiquement des codes, vous devez d'abord définir un gestionnaire pour définir automatiquement le numéro du code-barre.
    +ToGenerateCodeDefineAutomaticRuleFirst=Pour pouvoir générer automatiquement des codes, vous devez d'abord définir un gestionnaire de numérotation pour définir automatiquement les numéros du code-barre.
     SeeSubstitutionVars=Voir * note pour la liste des variables de substitutions possibles
     SeeChangeLog=Voir le fichier changeLog (anglais)
     AllPublishers=Tous les éditeurs
    @@ -1771,15 +1785,15 @@ AddOtherPagesOrServices=Ajout d'autres pages ou services
     AddModels=Ajout de modèles de document ou de numérotation
     AddSubstitutions=Ajout de valeurs de substitution
     DetectionNotPossible=Détection impossible
    -UrlToGetKeyToUseAPIs=Url pour obtenir le jeton pour utiliser l'API (une fois le jeton reçu, il est enregistré dans la table des utilisateurs de la base de données et doit être fourni à chaque appel d'API)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Liste des APIs disponibles
    -activateModuleDependNotSatisfied=Le module "%s" dépend du module "%s" qui est manquant, aussi le module "%1$s" peut ne pas fonctionner correctement. Merci d'installer le module "%2$s" ou désactiver le module "%1$s" si vous ne souhaitez pas avoir de mauvaise surprise
    -CommandIsNotInsideAllowedCommands=La commande demandée n'est pas autorisée par le paramètre <strong>$dolibarr_main_restrict_os_commands</strong> du fichier <strong>conf.php</strong>.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=La commande que vous essayez d'exécuter ne figure pas dans la liste des commandes autorisées définies dans le paramètre <strong> $dolibarr_main_restrict_os_commands </strong> du fichier <strong> conf.php </strong>.
     LandingPage=Page cible
     SamePriceAlsoForSharedCompanies=Si vous utilisez un module multi-société, avec le choix «prix unique», le prix sera aussi le même pour toutes les sociétés si les produits sont partagés entre les environnements
     ModuleEnabledAdminMustCheckRights=Le module a été activé. Les permissions pour le(s) module(s) activé(s) ont été donnés aux utilisateurs admin uniquement. Vous devrez peut-être accorder des autorisations aux autres utilisateurs ou groupes manuellement si nécessaire.
     UserHasNoPermissions=Cet utilisateur n'a pas de permission définie
    -TypeCdr=Utilisez "Aucune" si la date du terme de paiement est la date de la facture plus un delta en jours (delta est le champ "Nb de jours") <br> Utilisez "À la fin du mois", si, après le delta, la date doit être augmentée pour atteindre la fin du mois (+ un «Offset» optionnel en jours) <br> Utilisez "Coutant/Suivant" pour que la date du terme de paiement soit la premier Nième jour du mois qui suit (N est stocké dans le champ "Nb de jours")
    +TypeCdr=Utilisez "Aucune" si la date du terme de paiement est la date de la facture plus un delta en jours (delta est le champ "%s") <br> Utilisez "À la fin du mois", si, après le delta, la date doit être augmentée pour atteindre la fin du mois (+ un optionnel "%s" en jours) <br> Utilisez "Coutant/Suivant" pour que la date du terme de paiement soit la premier Nième jour du mois après le delta le delta est le champ "%s", N est stocké dans le champ "%s")
     BaseCurrency=Devise par défaut de votre société/institution (Voir Accueil > configuration > Société/Institution)
     WarningNoteModuleInvoiceForFrenchLaw=Ce module %s permet d'être conforme aux lois françaises (Loi Finance 2016 par exemple).
     WarningNoteModulePOSForFrenchLaw=Le module %s est conforme à la législation française ( Loi Finance 2016 ) car les logs non réversibles sont automatiquement activés.
    @@ -1788,16 +1802,47 @@ MAIN_PDF_MARGIN_LEFT=Marge gauche sur les PDF
     MAIN_PDF_MARGIN_RIGHT=Marge droite sur les PDF
     MAIN_PDF_MARGIN_TOP=Marge haute sur les PDF
     MAIN_PDF_MARGIN_BOTTOM=Marge bas sur les PDF
    +NothingToSetup=Aucune configuration particulière n'est requise pour ce module.
     SetToYesIfGroupIsComputationOfOtherGroups=Réglez ceci sur Oui si ce groupe est un calcul d'autres groupes
    -EnterCalculationRuleIfPreviousFieldIsYes=Entrez la règle de calcul si le champ précédent a été défini sur Oui (par exemple, 'CODEGRP1 + CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Plusieurs variantes de langue trouvées
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Supprimer les caractères spéciaux
     COMPANY_AQUARIUM_CLEAN_REGEX=Filtre Regex pour nettoyer la valeur (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=Contact RGPD
    -GDPRContactDesc=Si vous stockez des données sur des entreprises / citoyens européens, vous pouvez stocker ici le contact responsable du RGPD.
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Modèle de plan de compte chargé
    +SocialNetworkSetup=Configuration du module Réseaux Sociaux
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Échanger adresses expéditeurs et destinataires sur le PDF
    +FeatureSupportedOnTextFieldsOnly=Attention, fonctionnalité prise en charge sur les champs de texte uniquement
    +EmailCollector=Email collector
    +EmailCollectorDescription=Ajoute un travail planifié et une page de configuration pour analyser régulièrement les boîtes aux lettres (à l'aide du protocole IMAP) et enregistrer les courriers électroniques reçus dans votre application, au bon endroit et/ou créer automatiquement certains enregistrements (comme des opportunités).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Créer opportunité (et tiers si nécessaire)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Ressource
     UseSearchToSelectResource=Utilisez un champ avec auto-complétion pour choisir les ressources (plutôt qu'une liste déroulante).
     DisabledResourceLinkUser=Désactiver la fonctionnalité pour lier une ressource aux utilisateurs
     DisabledResourceLinkContact=Désactiver la fonctionnalité pour lier une ressource aux contacts/adresses
     ConfirmUnactivation=Confirmer réinitialisation du module
    +OnMobileOnly=Sur petit écran (smartphone) uniquement
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/fr_FR/agenda.lang b/htdocs/langs/fr_FR/agenda.lang
    index f64e93b7188..9bf6509a277 100644
    --- a/htdocs/langs/fr_FR/agenda.lang
    +++ b/htdocs/langs/fr_FR/agenda.lang
    @@ -32,13 +32,14 @@ ViewPerUser=Vue par utilisateur
     ViewPerType=Vue par type
     AutoActions= Alimentation automatique
     AgendaAutoActionDesc= Définissez ici les événements pour lesquels Dolibarr créera automatiquement une entrée dans l'agenda. Si aucun n'est coché, seules les actions manuelles seront affichées dans l'agenda. Les événements sur les objets (validation, changement de statut, modification) ne seront pas enregistrées.
    -AgendaSetupOtherDesc= Cette page permet de configurer quelques options permettant d'exporter une vue de votre agenda Dolibarr vers un calendrier externe (Thunderbird, Google calendar, …)
    +AgendaSetupOtherDesc= Cette page permet de configurer quelques options permettant d'exporter une vue de votre agenda Dolibarr vers un calendrier externe (thunderbird, google calendar, ...)
     AgendaExtSitesDesc=Cette page permet d'ajouter des sources de calendriers externes pour les visualiser au sein de l'agenda Dolibarr.
     ActionsEvents=Événements pour lesquels Dolibarr doit insérer un évènement dans l'agenda en automatique.
    -EventRemindersByEmailNotEnabled=Les rappels d'événements par email n'ont pas été activés dans la configuration du module %s.
    +EventRemindersByEmailNotEnabled=Les rappels d'événement par email n'ont pas été activés dans la configuration du module %s.
     ##### Agenda event labels #####
     NewCompanyToDolibarr=Tiers %s créé
     ContractValidatedInDolibarr=Contrat %s validé
    +CONTRACT_DELETEInDolibarr=Contrat %s supprimé
     PropalClosedSignedInDolibarr=Proposition %s signée
     PropalClosedRefusedInDolibarr=Proposition %s refusée
     PropalValidatedInDolibarr=Proposition %s validée
    @@ -100,7 +101,7 @@ AgendaUrlOptions3=<b>logina=%s</b> pour limiter l'export aux actions dont l'util
     AgendaUrlOptionsNotAdmin=<b>logina=!%s</b> pour limiter l'export aux actions non assignées à l'utilisateur <b>%s</b>.
     AgendaUrlOptions4=<b>logint=%s</b>pour limiter l'export aux actions assignées à l'utilisateur <b>%s</b> (propriétaire et autres).
     AgendaUrlOptionsProject=<b>project=PROJECT_ID</b> pour restreindre aux événements associés au projet <b>PROJECT_ID</b>.
    -AgendaUrlOptionsNotAutoEvent=<b> notactiontype=systemauto </b> pour exclure un événement automatique.
    +AgendaUrlOptionsNotAutoEvent=<b> notactiontype=systemauto </b> pour exclure les événements automatiques.
     AgendaShowBirthdayEvents=Afficher les anniversaires de contacts
     AgendaHideBirthdayEvents=Masquer les anniversaires de contacts
     Busy=Occupé
    diff --git a/htdocs/langs/fr_FR/bills.lang b/htdocs/langs/fr_FR/bills.lang
    index 4b088f8dea2..19e4e877acb 100644
    --- a/htdocs/langs/fr_FR/bills.lang
    +++ b/htdocs/langs/fr_FR/bills.lang
    @@ -12,7 +12,7 @@ BillsLate=Retards de paiement
     BillsStatistics=Statistiques factures clients
     BillsStatisticsSuppliers=Statistiques factures fournisseurs
     DisabledBecauseDispatchedInBookkeeping=Action désactivée car facture comptabilisée dans le grand livre
    -DisabledBecauseNotLastInvoice=Action désactivée car facture non supprimable. Des factures ont été créées après cet facture et cela va créer un trou dans la numérotation des factures.
    +DisabledBecauseNotLastInvoice=Action désactivée car facture non supprimable. Des factures ont été créées après celle-ci et cela va créer un trou dans la numérotation des factures.
     DisabledBecauseNotErasable=Désactivé car non supprimable
     InvoiceStandard=Facture standard
     InvoiceStandardAsk=Facture standard
    @@ -25,10 +25,10 @@ InvoiceProFormaAsk=Facture proforma
     InvoiceProFormaDesc=La <b>facture proforma</b> est une image de facture définitive mais qui n'a aucune valeur comptable.
     InvoiceReplacement=Facture de remplacement
     InvoiceReplacementAsk=Facture de remplacement de la facture
    -InvoiceReplacementDesc=La <b>facture de remplacement</b> sert à annuler et remplacer complètement une facture existante sur laquelle aucun paiement n'a encore eu lieu.<br><br>Rem: Seules les factures sans aucun paiement peuvent être remplacées. Si ces dernières ne sont pas fermées, elles le seront automatiquement au statut 'abandonnée'.
    +InvoiceReplacementDesc=<b>Replacement invoice</b> is used to cancel and completely replace an invoice with no payment already received.<br><br>Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'.
     InvoiceAvoir=Facture avoir
     InvoiceAvoirAsk=Facture avoir pour correction de la facture
    -InvoiceAvoirDesc=La <b>facture d'avoir</b> est une facture négative destinée à compenser un montant de facture qui diffère du montant réellement versé (suite à un trop versé par le client par erreur ou un manque non versé par le client suite à un retour produit par exemple).
    +InvoiceAvoirDesc=The <b>credit note</b> is a negative invoice used to correct the fact that an invoice has an amount that differs from the amount really paid (eg customer paid too much by mistake, or will not pay completely since he returned some products).
     invoiceAvoirWithLines=Créer l'avoir avec les même lignes que la factures dont il est issu
     invoiceAvoirWithPaymentRestAmount=Créer l'avoir avec le montant restant à payer de la facture dont il est issu.
     invoiceAvoirLineWithPaymentRestAmount=Avoir sur le reste à payer
    @@ -66,12 +66,12 @@ paymentInInvoiceCurrency=Dans la devise des factures
     PaidBack=Remboursé
     DeletePayment=Supprimer le paiement
     ConfirmDeletePayment=Êtes-vous sûr de vouloir supprimer ce paiement ?
    -ConfirmConvertToReduc=Voulez vous convertir ce(cet) %s en remise fixe ?<br>Le montant sera enregistré parmi les autres remises et pourra être utilisé en tant que remise sur une autre facture du client.
    -ConfirmConvertToReducSupplier=Voulez vous convertir ce(cet) %s en remise fixe ?<br>Le montant sera enregistré parmi les autres remises et pourra être utilisé en tant que remise sur une autre facture courante ou future de ce fournisseur.
    +ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount?<br>The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this customer.
    +ConfirmConvertToReducSupplier=Do you want to convert this %s into an absolute discount?<br>The amount will be saved among all discounts and could be used as a discount for a current or a future invoice for this supplier.
     SupplierPayments=Règlements fournisseurs
     ReceivedPayments=Règlements reçus
     ReceivedCustomersPayments=Règlements reçus du client
    -PayedSuppliersPayments=Paiements aux fournisseurs
    +PayedSuppliersPayments=Payments paid to suppliers
     ReceivedCustomersPaymentsToValid=Règlements clients reçus à valider
     PaymentsReportsForYear=Rapports de règlements pour %s
     PaymentsReports=Rapports de règlements
    @@ -91,8 +91,8 @@ PaymentConditionsShort=Conditions de règlement
     PaymentAmount=Montant règlement
     ValidatePayment=Valider ce règlement
     PaymentHigherThanReminderToPay=Règlement supérieur au reste à payer
    -HelpPaymentHigherThanReminderToPay=Attention, le montant de paiement pour une ou plusieurs factures est supérieur au reste à payer.<br>Corrigez votre saisie, sinon, confirmez et pensez à créer un avoir du trop perçu lors de la fermeture de chacune des factures surpayées.
    -HelpPaymentHigherThanReminderToPaySupplier=Attention, le montant de paiement pour une ou plusieurs factures est supérieur au reste à payer.<br>Corrigez votre saisie, sinon, confirmez et pensez à créer un avoir pour l'excédent pour chaque facture surpayée.
    +HelpPaymentHigherThanReminderToPay=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay. <br> Edit your entry, otherwise confirm and consider creating a credit note for the excess received for each overpaid invoice.
    +HelpPaymentHigherThanReminderToPaySupplier=Attention, the payment amount of one or more bills is higher than the outstanding amount to pay. <br> Edit your entry, otherwise confirm and consider creating a credit note for the excess paid for each overpaid invoice.
     ClassifyPaid=Classer 'Payée'
     ClassifyPaidPartially=Classer 'Payée partiellement'
     ClassifyCanceled=Classer 'Abandonnée'
    @@ -131,7 +131,8 @@ BillStatusClosedUnpaid=Fermée (impayée)
     BillStatusClosedPaidPartially=Payée (partiellement)
     BillShortStatusDraft=Brouillon
     BillShortStatusPaid=Payée
    -BillShortStatusPaidBackOrConverted=Remboursé ou converti
    +BillShortStatusPaidBackOrConverted=Refunded or converted
    +Refunded=Refunded
     BillShortStatusConverted=Payé
     BillShortStatusCanceled=Abandonnée
     BillShortStatusValidated=Validée
    @@ -141,16 +142,16 @@ BillShortStatusNotRefunded=Non remboursé
     BillShortStatusClosedUnpaid=Fermée
     BillShortStatusClosedPaidPartially=Payée
     PaymentStatusToValidShort=A valider
    -ErrorVATIntraNotConfigured=Numéro de TVA intracommunautaire pas encore configuré
    +ErrorVATIntraNotConfigured=Intra-Community VAT number not yet defined
     ErrorNoPaiementModeConfigured=Aucun mode de règlement défini par défaut. Allez corriger dans la configuration du module facture.
     ErrorCreateBankAccount=Créer un compte bancaire puis aller dans la configuration du module facture pour définir les modes de règlement
     ErrorBillNotFound=Facture %s inexistante
    -ErrorInvoiceAlreadyReplaced=Erreur, vous voulez valider une facture qui doit remplacer la facture %s. Mais cette dernière a déjà été remplacée par une autre facture %s.
    +ErrorInvoiceAlreadyReplaced=Error, you tried to validate an invoice to replace invoice %s. But this one has already been replaced by invoice %s.
     ErrorDiscountAlreadyUsed=Erreur, la remise a déjà été attribuée
     ErrorInvoiceAvoirMustBeNegative=Erreur, une facture de type Avoir doit avoir un montant négatif
     ErrorInvoiceOfThisTypeMustBePositive=Erreur, une facture de ce type doit avoir un montant positif
     ErrorCantCancelIfReplacementInvoiceNotValidated=Erreur, il n'est pas possible d'annuler une facture qui a été remplacée par une autre qui se trouve toujours à l'état 'brouillon'.
    -ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Cette partie ou une autre est déjà utilisé, aussi la remise ne peut être supprimée.
    +ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=This part or another is already used so discount series cannot be removed.
     BillFrom=Émetteur
     BillTo=Adressé à
     ActionsOnBill=Événements sur la facture
    @@ -179,20 +180,20 @@ ConfirmClassifyPaidBill=Êtes-vous sûr de vouloir classer la facture <b>%s</b>
     ConfirmCancelBill=Êtes-vous sûr de vouloir annuler la facture <b>%s</b> ?
     ConfirmCancelBillQuestion=Pour quelle raison voulez-vous classer la facture abandonnée ?
     ConfirmClassifyPaidPartially=Êtes-vous sûr de vouloir classer la facture <b>%s</b> comme payée ?
    -ConfirmClassifyPaidPartiallyQuestion=Cette facture n'a pas été payée à hauteur du montant initial. Pour quelle raison voulez-vous la classer malgré tout ?
    -ConfirmClassifyPaidPartiallyReasonAvoir=Le reste à payer <b>(%s %s)</b> est un trop facturé (car article retourné, oubli, escompte réalisé...), régularisé par un avoir
    +ConfirmClassifyPaidPartiallyQuestion=This invoice has not been paid completely. What is the reason/s for you closing this invoice?
    +ConfirmClassifyPaidPartiallyReasonAvoir=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I regularize the VAT with a credit note.
     ConfirmClassifyPaidPartiallyReasonDiscount=Le reste à payer <b> (%s %s) </b> est un escompte accordé parce que le paiement a été effectué avant terme.
     ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Le reste à payer <b>(%s %s)</b> est un escompte accordé après facture. J'accepte de perdre la TVA sur cet escompte
     ConfirmClassifyPaidPartiallyReasonDiscountVat=Le reste à payer <b>(%s %s)</b> est un escompte
     ConfirmClassifyPaidPartiallyReasonBadCustomer=Mauvais payeur
     ConfirmClassifyPaidPartiallyReasonProductReturned=Produits en partie retournés
     ConfirmClassifyPaidPartiallyReasonOther=Créance abandonnée pour autre raison
    -ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=Ce choix est possible si votre facture était munie de la mention adéquate. (Exemple: «escompte net de taxe»)
    -ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=Ce choix est possible si votre facture était munie de la mention adéquate. (Exemple: mention définissant l'escompte ou du genre «seule la taxe correspondant au prix effectivement payé ouvre droit à déduction»)
    +ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=This choice is possible if your invoice has been provided with suitable comments. (Example «Only the tax corresponding to the price that has been actually paid gives rights to deduction»)
    +ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=In some countries, this choice might be possible only if your invoice contains correct notes.
     ConfirmClassifyPaidPartiallyReasonAvoirDesc=Ce choix est le choix à prendre si les autres ne sont pas applicables
    -ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=Un <b>mauvais payeur</b> est un client qui refuse de régler sa dette.
    +ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=A <b>bad customer</b> is a customer that refuses to pay his debt.
     ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Ce choix sera celui choisi, dans le cas du paiement incomplet suite au retour d'une partie des produits
    -ConfirmClassifyPaidPartiallyReasonOtherDesc=Ce choix sera celui choisi dans tout autre cas, par exemple, dans les cas suivants:<br>- paiement partiel car une partie des produits a été retourné.<br>- trop réclamé suite à oubli d'une remise<br>Dans tous les cas, le trop réclamé doit être régularisé en compta et envers le client par un avoir.
    +ConfirmClassifyPaidPartiallyReasonOtherDesc=Use this choice if all others are not suitable, for example in following situation:<br>- payment not complete because some products were shipped back<br>- amount claimed too important because a discount was forgotten<br>In all cases, amount over-claimed must be corrected in accountancy system by creating a credit note.
     ConfirmClassifyAbandonReasonOther=Autre
     ConfirmClassifyAbandonReasonOtherDesc=Ce choix sera celui choisi dans tout autre cas. Par exemple suite à l'intention de créer une facture de remplacement.
     ConfirmCustomerPayment=Confirmez-vous la saisie de ce règlement de <b>%s</b> %s ?
    @@ -200,9 +201,10 @@ ConfirmSupplierPayment=Confirmez-vous la saisie de ce règlement de <b>%s</b> %s
     ConfirmValidatePayment=Êtes-vous sûr de vouloir valider ce paiement, aucune modification n'est possible une fois le paiement validé ?
     ValidateBill=Valider facture
     UnvalidateBill=Repasser facture en brouillon
    -NumberOfBills=Nb de factures
    -NumberOfBillsByMonth=Nb de factures par mois
    +NumberOfBills=No. of invoices
    +NumberOfBillsByMonth=No. of invoices per month
     AmountOfBills=Montant de factures
    +AmountOfBillsHT=Amount of invoices (net of tax)
     AmountOfBillsByMonthHT=Montant de factures par mois (HT)
     ShowSocialContribution=Afficher charge fiscale/sociale
     ShowBill=Afficher facture
    @@ -260,9 +262,9 @@ Repeatables=Modèles
     ChangeIntoRepeatableInvoice=Convertir en facture modèle
     CreateRepeatableInvoice=Créer facture modèle
     CreateFromRepeatableInvoice=Créer depuis facture modèle
    -CustomersInvoicesAndInvoiceLines=Factures clients et lignes de factures
    +CustomersInvoicesAndInvoiceLines=Customer invoices and invoice details
     CustomersInvoicesAndPayments=Factures clients et règlements
    -ExportDataset_invoice_1=Factures clients et lignes de facture
    +ExportDataset_invoice_1=Customer invoices and invoice details
     ExportDataset_invoice_2=Factures clients et règlements
     ProformaBill=Facture Proforma :
     Reduction=Réduction
    @@ -302,9 +304,9 @@ DiscountAlreadyCounted=Réductions ou crédits déjà consommés
     CustomerDiscounts=Remises client
     SupplierDiscounts=Remises vendeurs
     BillAddress=Adresse de facturation
    -HelpEscompte=Un <b>escompte</b> est une remise accordée, sur une facture donnée, à un client car ce dernier a réalisé son règlement bien avant l'échéance.
    -HelpAbandonBadCustomer=Ce montant a été abandonné (client jugé mauvais payeur) et est considéré comme une perte exceptionnelle.
    -HelpAbandonOther=Ce montant a été abandonné car il s'agissait d'une erreur de facturation (saisie mauvais client, facture remplacée par une autre).
    +HelpEscompte=This discount is a discount granted to customer because payment was made before term.
    +HelpAbandonBadCustomer=This amount has been abandoned (customer said to be a bad customer) and is considered as an exceptional loss.
    +HelpAbandonOther=This amount has been abandoned since it was an error (wrong customer or invoice replaced by another for example)
     IdSocialContribution=Id de paiement charge fiscale ou sociale
     PaymentId=Id paiement
     PaymentRef=Ref paiement
    @@ -322,21 +324,21 @@ CloneInvoice=Cloner facture
     ConfirmCloneInvoice=Êtes-vous sûr de vouloir cloner cette facture <b>%s</b> ?
     DisabledBecauseReplacedInvoice=Action désactivée car facture remplacée
     DescTaxAndDividendsArea=Cet écran résume la liste de toutes les paiements réalisés pour des dépenses particulières. Seuls les paiements de l'année choisi sont inclus ici.
    -NbOfPayments=Nb de paiements
    +NbOfPayments=No. of payments
     SplitDiscount=Scinder réduction en deux
    -ConfirmSplitDiscount=Êtes-vous sûr de vouloir scinder la réduction de <b>%s</b> %s en 2 réductions plus petites ?
    -TypeAmountOfEachNewDiscount=Saisissez le montant de chacune des deux parts :
    -TotalOfTwoDiscountMustEqualsOriginal=La somme du montant des 2 nouvelles réductions doit être équivalente au montant de la réduction à scinder.
    +ConfirmSplitDiscount=Are you sure you want to split this discount of <b>%s</b> %s into 2 smaller discounts?
    +TypeAmountOfEachNewDiscount=Input amount for each of two parts:
    +TotalOfTwoDiscountMustEqualsOriginal=Total of two new discounts must be equal to original discount amount.
     ConfirmRemoveDiscount=Êtes-vous sûr de vouloir supprimer cette réduction ?
     RelatedBill=Facture associée
     RelatedBills=Factures associées
     RelatedCustomerInvoices=Factures clients liées
     RelatedSupplierInvoices=Factures fournisseurs liées
     LatestRelatedBill=Dernière facture en rapport
    -WarningBillExist=Attention, une ou plusieurs factures existent déjà
    +WarningBillExist=Warning, one or more invoices already exist
     MergingPDFTool=Outil de fusion de PDF
     AmountPaymentDistributedOnInvoice=Montant paiement affecté à la facture
    -PaymentOnDifferentThirdBills=Autoriser le règlement de différents tiers de la même maison-mère
    +PaymentOnDifferentThirdBills=Autoriser le règlement de factures de différents tiers si ils ont la même maison-mère
     PaymentNote=Note du paiement
     ListOfPreviousSituationInvoices=Liste des factures de situation précédentes
     ListOfNextSituationInvoices=Liste des factures de situation suivantes
    @@ -408,19 +410,19 @@ PaymentTypeCHQ=Chèque
     PaymentTypeShortCHQ=Chèque
     PaymentTypeTIP=TIP (Titre interbancaire de paiement)
     PaymentTypeShortTIP=Paiement TIP
    -PaymentTypeVAD=Paiement en ligne
    -PaymentTypeShortVAD=Paiement en ligne
    +PaymentTypeVAD=Online payment
    +PaymentTypeShortVAD=Online payment
     PaymentTypeTRA=Traite
     PaymentTypeShortTRA=Traite
     PaymentTypeFAC=Facteur
     PaymentTypeShortFAC=Facteur
     BankDetails=Coordonnées bancaires
     BankCode=Code banque
    -DeskCode=Code guichet
    +DeskCode=Office code
     BankAccountNumber=Numéro de compte
    -BankAccountNumberKey=Clé
    +BankAccountNumberKey=Check digits
     Residence=Domiciliation
    -IBANNumber=Code IBAN
    +IBANNumber=IBAN complete account number
     IBAN=IBAN
     BIC=BIC/SWIFT
     BICNumber=Code BIC/SWIFT
    @@ -445,7 +447,7 @@ PaymentByTransferOnThisBankAccount=Règlement par virement sur le compte bancair
     VATIsNotUsedForInvoice=* TVA non applicable art-293B du CGI
     LawApplicationPart1=Par application de la loi 80.335 du 12/05/80
     LawApplicationPart2=les marchandises demeurent la propriété du
    -LawApplicationPart3=vendeur jusqu'à complet encaissement de
    +LawApplicationPart3=the seller until full payment of
     LawApplicationPart4=leurs prix.
     LimitedLiabilityCompanyCapital=SARL au Capital de
     UseLine=Appliquer
    @@ -476,19 +478,20 @@ CantRemovePaymentWithOneInvoicePaid=Suppression impossible quand il existe au mo
     ExpectedToPay=Paiement attendu
     CantRemoveConciliatedPayment=Suppression d'un paiement rapproché impossible
     PayedByThisPayment=Règlé par ce paiement
    -ClosePaidInvoicesAutomatically=Classifiez "Payée" toutes les factures standard, d'acompte ou de remplacement entièrement payées.
    +ClosePaidInvoicesAutomatically=Classify "Paid" all standard, down payment or replacement invoices paid entirely.
     ClosePaidCreditNotesAutomatically=Classer automatiquement à "Payé" les factures avoirs entièrement remboursées.
    -ClosePaidContributionsAutomatically=Classer "payée" toutes les dépenses spéciales réglées en totalité.
    -AllCompletelyPayedInvoiceWillBeClosed=Toutes les factures avec un reste à payer nul seront automatiquement fermées au statut "Payé".
    +ClosePaidContributionsAutomatically=Classer "payé" toutes les contributions sociales ou fiscales payées entièrement.
    +AllCompletelyPayedInvoiceWillBeClosed=All invoice with no remainder to pay will be automatically closed with status "Paid".
     ToMakePayment=Payer
     ToMakePaymentBack=Rembourser
     ListOfYourUnpaidInvoices=Liste des factures impayées
     NoteListOfYourUnpaidInvoices=Remarque: Cette liste ne contient que les factures des Tiers pour lesquels vous êtes le commercial affecté.
     RevenueStamp=Timbre fiscal
    -YouMustCreateInvoiceFromThird=Cette option est disponible uniquement lors de la création de la facture depuis l'onglet «client» du tiers
    +YouMustCreateInvoiceFromThird=This option is only available when creating invoices from tab "customer" of third party
     YouMustCreateInvoiceFromSupplierThird=Cette option est disponible uniquement lors de la création d'une facture depuis l'onglet «fournisseur» d'un tiers
     YouMustCreateStandardInvoiceFirstDesc=Pour créer une facture modèle, vous devez d'abord créer une facture standard brouillon et la convertir en modèle.
     PDFCrabeDescription=Modèle de facture PDF complet (modèle recommandé par défaut)
    +PDFSpongeDescription=Invoice PDF template Sponge. A complete invoice template
     PDFCrevetteDescription=Modèle de facture PDF Crevette (modèle complet pour les factures de situation)
     TerreNumRefModelDesc1=Renvoie le numéro sous la forme %syymm-nnnn pour les factures et factures de remplacement, %syymm-nnnn pour les avoirs et %syymm-nnnn pour les acomptes où yy est l'année, mm le mois et nnnn un compteur séquentiel sans rupture et sans remise à 0
     MarsNumRefModelDesc1=Renvoie une numérotation au format %syymm-nnnn pour les factures standards, %syymm-nnnn pour les factures de remplacement, %syymm-nnnn pour les factures d'acompte et %syymm-nnnn pour les factures d'avoir où yy est l'année, mm le mois et nnnn un compteur sans rupture ni retour à zéro.
    @@ -533,7 +536,7 @@ invoiceLineProgressError=L'avancement d'une ligne de facture ne peut pas être s
     updatePriceNextInvoiceErrorUpdateline=Erreur: mise à jour du prix sur la ligne de facture : %s
     ToCreateARecurringInvoice=Pour créer une facture périodique à ce contrat, créez d'abord une facture brouillon puis convertissez la en facture modèle et définissez la fréquence de génération des futures factures.
     ToCreateARecurringInvoiceGene=Pour générer de futures factures régulièrement et manuellement, cliquer sur le menu <strong>%s - %s - %s</strong>.
    -ToCreateARecurringInvoiceGeneAuto=Si vous devez utiliser de telles factures, demandez à votre administrateur d'activer le module <strong>%s</strong>. Notez que les deux méthodes de générations de factures (manuelles et automatiques) peuvent être utilisées simultanément sans risque de création de doublon.
    +ToCreateARecurringInvoiceGeneAuto=Si vous avez besoin que de telles factures soient générées automatiquement, demandez à votre administrateur d'activer et configurer le module <strong>%s</strong>. Notez que les deux méthodes de générations de factures (manuelles et automatiques) peuvent être utilisées en cohabitation sans risque de création de doublon.
     DeleteRepeatableInvoice=Supprimer facture modèle
     ConfirmDeleteRepeatableInvoice=Est-ce votre sûr de vouloir supprimer la facture modèle ?
     CreateOneBillByThird=Créer une facture par tiers (sinon, une facture par commande)
    @@ -546,3 +549,4 @@ AutoFillDateFromShort=Définir la date de début
     AutoFillDateTo=Définir la date de fin de la ligne de service avec la date de la prochaine facture
     AutoFillDateToShort=Définir la date de fin
     MaxNumberOfGenerationReached=Nb maximum de gén. atteint
    +BILL_DELETEInDolibarr=Facture supprimée
    diff --git a/htdocs/langs/fr_FR/blockedlog.lang b/htdocs/langs/fr_FR/blockedlog.lang
    new file mode 100644
    index 00000000000..440f0d0d176
    --- /dev/null
    +++ b/htdocs/langs/fr_FR/blockedlog.lang
    @@ -0,0 +1,53 @@
    +BlockedLog=Unalterable Logs
    +Field=Champ
    +BlockedLogDesc=Ce module suit à la trace quelques événements dans un journal invariable (que vous ne pouvez pas modifier une fois enregistré) dans une chaîne de bloc, en temps réel. Ce module fournit la compatibilité avec les exigences des lois de quelques pays (comme la France avec la Loi de Finance 2016 - Norme NF535)
    +Fingerprints=Événements et empreintes archivés
    +FingerprintsDesc=C'est l'outil pour parcourir ou extraire les logs inaltérables. Les journaux inaltérables sont générés et archivés localement dans une table dédiée, en temps réel lorsque vous enregistrez une action dans dolibarr. Vous pouvez utiliser cet outil pour exporter cette archive et l'enregistrer sur un support externe (certains pays, comme la France, vous demandent de le faire chaque année). Notez qu'il n'y a pas de fonction pour purger ce journal et chaque changement essayé d'être fait directement dans ce journal (par un hacker par exemple) sera rapporté avec une empreinte non valide. Si vous avez vraiment besoin de purger cette table parce que vous avez utilisé votre application à des fins de démonstration/test et que vous voulez nettoyer vos données pour démarrer votre production, vous pouvez demander à votre revendeur ou intégrateur de réinitialiser votre base de données (toutes vos données seront supprimées).\n
    +CompanyInitialKey=Clé initiale de la société (hachage du bloc de genèse)
    +BrowseBlockedLog=Logs inaltérables
    +ShowAllFingerPrintsMightBeTooLong=Afficher tous les journaux archivés (peut être long)
    +ShowAllFingerPrintsErrorsMightBeTooLong=Afficher tous les logs d'archives non valides (peut être long)
    +DownloadBlockChain=Télécharger les empreintes
    +KoCheckFingerprintValidity=Archived log is not valid. It means someone (a hacker?) has modified some data of this archived log after it was recorded, or has erased the previous archived record (check that line with previous # exists).
    +OkCheckFingerprintValidity=Archived log is valid. It means all data on this line were not modified and record follow the previous one.
    +OkCheckFingerprintValidityButChainIsKo=Archived log seems valid compared to previous one but the chain was corrupted previously.
    +AddedByAuthority=Stored into remote authority
    +NotAddedByAuthorityYet=Not yet stored into remote authority
    +ShowDetails=Voir plus de détails
    +logPAYMENT_VARIOUS_CREATE=Payment (not assigned to invoice) created
    +logPAYMENT_VARIOUS_MODIFY=Payment (not assigned to invoice) modified
    +logPAYMENT_VARIOUS_DELETE=Payment (not assigned to invoice) logical deletion
    +logPAYMENT_ADD_TO_BANK=Payment added to bank
    +logPAYMENT_CUSTOMER_CREATE=Customer payment created
    +logPAYMENT_CUSTOMER_DELETE=Customer payment logical deletion
    +logDONATION_PAYMENT_CREATE=Donation payment created
    +logDONATION_PAYMENT_DELETE=Donation payment logical deletion
    +logBILL_PAYED=Customer invoice paid
    +logBILL_UNPAYED=Customer invoice set unpaid
    +logBILL_VALIDATE=Facture client validée
    +logBILL_SENTBYMAIL=Facture client envoyée par mail
    +logBILL_DELETE=Customer invoice logically deleted
    +logMODULE_RESET=Module BlockedLog was disabled
    +logMODULE_SET=Module BlockedLog was enabled
    +logDON_VALIDATE=Don validé
    +logDON_MODIFY=Don modifié
    +logDON_DELETE=Donation logical deletion
    +logMEMBER_SUBSCRIPTION_CREATE=Cotisation adhérent créée
    +logMEMBER_SUBSCRIPTION_MODIFY=Cotisation adhérent modifiée
    +logMEMBER_SUBSCRIPTION_DELETE=Member subscription logical deletion
    +BlockedLogBillDownload=Téléchargement facture client
    +BlockedLogBillPreview=Aperçu facture client
    +BlockedlogInfoDialog=Détail du log
    +ListOfTrackedEvents=Liste des actions suivies
    +Fingerprint=Empreinte
    +DownloadLogCSV=Export archived logs (CSV)
    +logDOC_PREVIEW=Preview of a validated document in order to print or download
    +logDOC_DOWNLOAD=Download of a validated document in order to print or send
    +DataOfArchivedEvent=Full datas of archived event
    +ImpossibleToReloadObject=Original object (type %s, id %s) not linked (see 'Full datas' column to get unalterable saved data)
    +BlockedLogAreRequiredByYourCountryLegislation=Unalterable Logs module may be required by the legislation of your country. Disabling this module may render any future transactions invalid with respect to the law and the use of legal software as they can not be validated by a tax audit.
    +BlockedLogActivatedBecauseRequiredByYourCountryLegislation=Unalterable Logs module was activated because of the legislation of your country. Disabling this module may render any future transactions invalid with respect to the law and the use of legal software as they cannot be validated by a tax audit.
    +BlockedLogDisableNotAllowedForCountry=Liste des pays où l'utilisation de ce module est obligatoire (juste pour éviter de désactiver le module par erreur. Si votre pays est dans cette liste, la désactivation du module n'est pas possible sans la modification préalable de cette liste. Notez également que l'activation/désactivation de ce module garder une trace dans le journal des logs inaltérables).
    +OnlyNonValid=Non-valid
    +TooManyRecordToScanRestrictFilters=Too many records to scan/analyze. Please restrict list with more restrictive filters.
    +RestrictYearToExport=Restrict month / year to export
    diff --git a/htdocs/langs/fr_FR/boxes.lang b/htdocs/langs/fr_FR/boxes.lang
    index 99e058d2fdf..866a75110e0 100644
    --- a/htdocs/langs/fr_FR/boxes.lang
    +++ b/htdocs/langs/fr_FR/boxes.lang
    @@ -26,10 +26,10 @@ BoxTitleLastSuppliers=les %s derniers fournisseurs enregistrés
     BoxTitleLastModifiedSuppliers=Les %s derniers fournisseurs modifiés
     BoxTitleLastModifiedCustomers=Les %s derniers clients modifiés
     BoxTitleLastCustomersOrProspects=Les %s derniers clients ou prospects
    -BoxTitleLastCustomerBills=Les %s dernières factures client
    -BoxTitleLastSupplierBills=Les %s dernières factures fournisseur
    +BoxTitleLastCustomerBills=Les%s dernières factures clients
    +BoxTitleLastSupplierBills=Les %s dernières factures fournisseurs
     BoxTitleLastModifiedProspects=Les %s derniers prospects modifiés
    -BoxTitleLastModifiedMembers=Les %s derniers adhérents
    +BoxTitleLastModifiedMembers=Les %s derniers adhérents modifiés
     BoxTitleLastFicheInter=Les %s dernières interventions modifiées
     BoxTitleOldestUnpaidCustomerBills=Les %s plus anciennes factures clients impayées
     BoxTitleOldestUnpaidSupplierBills=Les %s plus anciennes factures fournisseurs impayées
    diff --git a/htdocs/langs/fr_FR/cashdesk.lang b/htdocs/langs/fr_FR/cashdesk.lang
    index 0227aee95ea..e152f2c4318 100644
    --- a/htdocs/langs/fr_FR/cashdesk.lang
    +++ b/htdocs/langs/fr_FR/cashdesk.lang
    @@ -32,3 +32,12 @@ DeleteArticle=Cliquez pour enlever cet article
     FilterRefOrLabelOrBC=Recherche (Ref/Lib.)
     UserNeedPermissionToEditStockToUsePos=Vous avez demandé de réduire le stock sur création de facture, aussi l'utilisateur qui utilise le Point De Vente doit avoir la permission d'éditer le stock.
     DolibarrReceiptPrinter=Imprimante reçu
    +PointOfSale=Point de Vente
    +CloseBill=Fermer Bill
    +Floors=Étages
    +Floor=Étage
    +AddTable=Ajouter une table
    +Place=Endroit
    +TakeboxNecesary='TakeBOX' Application requise
    +OrderPrinters=Commande imprimantes
    +SearchProduct=Recherche produit
    diff --git a/htdocs/langs/fr_FR/companies.lang b/htdocs/langs/fr_FR/companies.lang
    index 548a7f6e0dd..1016091557d 100644
    --- a/htdocs/langs/fr_FR/companies.lang
    +++ b/htdocs/langs/fr_FR/companies.lang
    @@ -38,9 +38,9 @@ ThirdPartyCustomers=Clients
     ThirdPartyCustomersStats=Clients
     ThirdPartyCustomersWithIdProf12=Clients avec %s ou %s
     ThirdPartySuppliers=Fournisseurs
    -ThirdPartyType=Type du société
    +ThirdPartyType=Type of company
     Individual=Individu privé
    -ToCreateContactWithSameName=Crée automatiquement un contact/adresse, sous le tiers, avec la même information que le tiers. Dans la plupart des cas, même si votre tiers est une personne physique, la création d'un tiers seul suffit.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Maison mère
     Subsidiaries=Filiales
     ReportByMonth=Rapport par mois
    @@ -76,11 +76,11 @@ Town=Ville
     Web=Web
     Poste= Poste
     DefaultLang=Langue par défaut
    -VATIsUsed=Assujetti à la TVA
    -VATIsUsedWhenSelling=Ceci définit si un tiers inclut une taxe de vente ou non lorsqu'il fait une facture à ses propres clients
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Non assujetti à la TVA
     CopyAddressFromSoc=Remplir avec l'adresse du tiers
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Ce tiers n'est ni client ni fournisseur. il n'y a pas d'objet référent.
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Tiers ni client ni fournisseur, pas d'objets référents disponibles
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Tiers ni client ni fournisseur, les réductions ne sont pas disponibles
     PaymentBankAccount=Compte bancaire paiements
     OverAllProposals=Propositions commerciales
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Article
     ProfId3DZ=Numéro d'identification du fournisseur 
     ProfId4DZ=Numéro d'identification du client
    -VATIntra=Numéro de TVA
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Num. TVA
     VATIntraSyntaxIsValid=Syntaxe valide
     VATReturn=Fréquence TVA
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Ce client a une remise par défaut de <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Ce client n'a pas de remise relative par défaut
     HasRelativeDiscountFromSupplier=Vous avez une réduction par défaut de <b> %s%% </b> chez ce fournisseur
     HasNoRelativeDiscountFromSupplier=Vous n'avez pas de remise relative par défaut chez ce fournisseur
    -CompanyHasAbsoluteDiscount=Ce client dispose de crédits disponibles (avoirs ou acomptes) pour un montant de <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=Ce client a une réduction disponible (commercial, acompte) pour <b>%s</b>%s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Ce client a <b>%s</b> %s d'avoirs disponibles
     HasNoAbsoluteDiscountFromSupplier=Vous n'avez aucun crédit de réduction disponible auprès de ce fournisseur
     HasAbsoluteDiscountFromSupplier=Vous avez des crédits disponibles (avoirs ou acomptes) pour <b> %s </b> %s chez ce fournisseur
    @@ -307,18 +307,18 @@ CustomerCode=Code client
     SupplierCode=Code fournisseur
     CustomerCodeShort=Code client
     SupplierCodeShort=Code fournisseur
    -CustomerCodeDesc=Code client unique pour chaque client
    -SupplierCodeDesc=Code fournisseur unique pour chaque fournisseur
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Requis si le tiers est un client ou un prospect
     RequiredIfSupplier=Requis si un tiers est un fournisseur
    -ValidityControledByModule=Validité contrôlée par le module
    -ThisIsModuleRules=Voici les règles de ce module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect à contacter
     CompanyDeleted=La société "%s" a été supprimée de la base.
     ListOfContacts=Liste des contacts
     ListOfContactsAddresses=Liste des contacts/adresses
     ListOfThirdParties=Liste des tiers
    -ShowCompany=Afficher tiers
    +ShowCompany=Show Third Party
     ShowContact=Afficher contact
     ContactsAllShort=Tous (pas de filtre)
     ContactType=Type de contact
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Ce contact n'est contact d'aucune proposition commercial
     NoContactForAnyContract=Ce contact n'est contact d'aucun contrat
     NoContactForAnyInvoice=Ce contact n'est contact d'aucune facture
     NewContact=Nouveau contact
    -NewContactAddress=Nouveau contact/adresse
    +NewContactAddress=New Contact/Address
     MyContacts=Mes contacts
     Capital=Capital
     CapitalOf=Capital de %s
     EditCompany=Modification société
    -ThisUserIsNot=Cet utilisateur n'est ni un prospect, ni un client, ni un fournisseur
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Vérifier
    -VATIntraCheckDesc=Le lien <b>%s</b> permet d'interroger le service européen de contrôle des numéro de TVA intracommunautaire. Un accès à Internet depuis le serveur est requis pour que ce service fonctionne.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Vérifier sur le site de la Commission Européenne
    -VATIntraManualCheck=Vous pouvez aussi vérifier manuellement via le site européen <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Vérifier la TVA intra-communautaire sur le site de la Commission Européenne
    +VATIntraManualCheck=Vous pouvez aussi vérifier manuellement via le site de la commission européenne <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Vérification impossible. Le service de vérification n'est pas fourni par ce pays membre (%s).
    -NorProspectNorCustomer=Ni client, ni prospect
    -JuridicalStatus=Forme juridique
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Effectif
     ProspectLevelShort=Potentiel
     ProspectLevel=Potentiel du prospect
    @@ -387,12 +387,12 @@ ExportCardToFormat=Exporter fiche au format
     ContactNotLinkedToCompany=Contact non lié à un tiers
     DolibarrLogin=Identifiant utilisateur
     NoDolibarrAccess=Pas d'accès utilisateur
    -ExportDataset_company_1=Tiers (sociétés/institutions/particuliers) et attributs
    -ExportDataset_company_2=Contacts (de tiers) et attributs
    -ImportDataset_company_1=Tiers (sociétés/institutions/particuliers) et attributs
    -ImportDataset_company_2=Contacts/Adresses (de tiers ou libre) et attributs
    -ImportDataset_company_3=Coordonnées bancaires des tiers
    -ImportDataset_company_4=Tiers/Commerciaux (Affectation des Commerciaux aux Tiers)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Tiers - Commerciaux (Affectation des Commerciaux aux Tiers)
     PriceLevel=Niveau de prix
     DeliveryAddress=Adresse de livraison
     AddAddress=Créer adresse
    @@ -402,16 +402,16 @@ DeleteFile=Suppression d'un fichier
     ConfirmDeleteFile=Êtes-vous sûr de vouloir supprimer ce fichier ?
     AllocateCommercial=Affecter un commercial
     Organization=Organisme
    -FiscalYearInformation=Information sur l'année fiscale
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Mois de début d'exercice
    -YouMustAssignUserMailFirst=Une adresse e-mail est nécessaire pour l'envoi de notifications à cet utilisateur
    +YouMustAssignUserMailFirst=Vous devez définir un email pour cet utilisateur avant de pouvoir ajouter une notification par courrier électronique.
     YouMustCreateContactFirst=Pour pouvoir ajouter une notifications par mail,vous devez déjà définir des contacts valides pour le tiers  
     ListSuppliersShort=Liste des fournisseurs
    -ListProspectsShort=Liste prospects
    -ListCustomersShort=Liste clients
    -ThirdPartiesArea=Espace tiers et contacts
    -LastModifiedThirdParties=Les %s derniers tiers modifiés
    -UniqueThirdParties=Total de tiers uniques
    +ListProspectsShort=Liste des prospects
    +ListCustomersShort=Liste des clients
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Ouvert
     ActivityCeased=Clos
     ThirdPartyIsClosed=Le tiers est clôturé
    @@ -420,7 +420,7 @@ CurrentOutstandingBill=Montant encours
     OutstandingBill=Montant encours autorisé
     OutstandingBillReached=Montant encours autorisé dépassé
     OrderMinAmount=Montant minimum pour la commande
    -MonkeyNumRefModelDesc=Renvoie le numéro sous la forme %syymm-nnnn pour les codes clients et %syymm-nnnn pour les codes fournisseurs où yy est l'année, mm le mois et nnnn un compteur séquentiel sans rupture et sans remise à 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Code libre sans vérification. Peut être modifié à tout moment.
     ManagingDirectors=Nom du(des) gestionnaire(s) (PDG, directeur, président...)
     MergeOriginThirdparty=Tiers en doublon (le tiers que vous voulez supprimer)
    @@ -431,4 +431,4 @@ SaleRepresentativeLogin=Login du commercial
     SaleRepresentativeFirstname=Prénom du commercial
     SaleRepresentativeLastname=Nom du commercial
     ErrorThirdpartiesMerge=Une erreur est survenue lors de la suppression de ce tiers. Consultez les log. La modification a été annulée.
    -NewCustomerSupplierCodeProposed=Nouveau code client ou fournisseur proposé en cas de doublon de code
    +NewCustomerSupplierCodeProposed=Code client ou fournisseur déjà utilisé, un nouveau code est suggéré
    diff --git a/htdocs/langs/fr_FR/cron.lang b/htdocs/langs/fr_FR/cron.lang
    index 5e50c173fe7..3a78b48e2b6 100644
    --- a/htdocs/langs/fr_FR/cron.lang
    +++ b/htdocs/langs/fr_FR/cron.lang
    @@ -6,13 +6,13 @@ Permission23102 = Créer/Modifier des tâches planifiées
     Permission23103 = Supprimer une tâche planifiée
     Permission23104 = Exécuter une tâche planifiée
     # Admin
    -CronSetup= Page de configuration du module - Gestion des travaux programmés
    +CronSetup=Page de configuration du module - Gestion des travaux programmés
     URLToLaunchCronJobs=Ou pour vérifier ou lancer les travaux planifiés qualifiés
     OrToLaunchASpecificJob=Ou pour vérifier et lancer un travail programmé spécifique
     KeyForCronAccess=Clé de sécurité pour l'URL de lancement des travaux programmés
     FileToLaunchCronJobs=Ligne de commande pour vérifier et lancer les travaux programmés qualifiés
     CronExplainHowToRunUnix=Sur un environnement Unix vous pouvez utiliser l'entrée suivante en crontab pour exécuter la ligne de commande toutes les 5 minutes
    -CronExplainHowToRunWin=Sur un environement Microsoft(tm) Windows vous pouvez utiliser le planificateur de tache pour lancer cette commande toute les 5 minutes.
    +CronExplainHowToRunWin=On Microsoft(tm) Windows environment you can use Scheduled Task tools to run the command line each 5 minutes
     CronMethodDoesNotExists=La classe %s ne contient aucune méthode %s
     CronJobDefDesc=Les travaux planifiés sont définis dans le fichier descripteur de module. Lorsque le module est activé, ils sont chargés et disponibles afin que vous puissiez administrer les travaux à partir du menu des outils d'administration %s.
     CronJobProfiles=Liste des profils de travaux planifiés prédéfinis
    @@ -42,7 +42,7 @@ CronModule=Module
     CronNoJobs=Aucun travail enregistré
     CronPriority=Priorité
     CronLabel=Libellé
    -CronNbRun=Nb. exec.
    +CronNbRun=No. launches
     CronMaxRun=Nb max de lancement
     CronEach=Tous les
     JobFinished=Travail lancé et terminé
    @@ -61,11 +61,11 @@ CronStatusInactiveBtn=Désactiver
     CronTaskInactive=Cette tâche est désactivée
     CronId=Id
     CronClassFile=Nom de fichier intégrant la classe
    -CronModuleHelp=Nom du dossier du module dans Dolibarr (fonctionne aussi avec les modules externes). <BR>Par exemple, pour appeler la méthode d'appel des produits Dolibarr /htdocs/<u>product</u>/class/product.class.php, la valeur du module est <br><i>product</i>.
    -CronClassFileHelp=Le chemin relatif et le nom du fichier à charger (le chemin d'accès est relatif au répertoire racine du serveur Web). <BR> Par exemple, pour appeler la méthode fetch de l'objet Product htdocs/product/class/<u> product.class.php</u>, la valeur du nom de fichier de classe est<br> <i> product/class/product.class.php</i>
    -CronObjectHelp=Le nom de l'objet à charger. <BR> Par exemple pour appeler la méthode de récupération de l'objet Produut Dolibarr /htdocs/product/class/product.class.php, la valeur du nom de fichier de classe est <br> <i> Product </i>
    -CronMethodHelp=La méthode objet à lancer. <BR> Par exemple, pour appeler la méthode fetch de l'objet Dolibarr Product /htdocs/product/class/product.class.php, la valeur pour la méthode est<br><i>fetch</i>
    -CronArgsHelp=Les arguments de la méthode. <BR> Par exemple pour appeler la méthode fetch de l'objet Product de Dolibarr /htdocs/product/class/product.class.php, la valeur des arguments pourrait être<br> <i>0, RefProduit</i>
    +CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module). <BR> For example to call the fetch method of Dolibarr Product object /htdocs/<u>product</u>/class/product.class.php, the value for module is<br><i>product</i>
    +CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory). <BR> For example to call the fetch method of Dolibarr Product object htdocs/product/class/<u>product.class.php</u>, the value for class file name is<br><i>product/class/product.class.php</i>
    +CronObjectHelp=The object name to load. <BR> For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is<br><i>Product</i>
    +CronMethodHelp=The object method to launch. <BR> For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is<br><i>fetch</i>
    +CronArgsHelp=The method arguments. <BR> For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be<br><i>0, ProductRef</i>
     CronCommandHelp=La commande système a exécuter.
     CronCreateJob=Créer un nouveau travail planifié
     CronFrom=A partir du
    @@ -79,5 +79,5 @@ CronCannotLoadObject=Le fichier de classe %s a été chargé, mais l'objet %s n'
     UseMenuModuleToolsToAddCronJobs=Aller à la page "Accueil - Outils administration - Travaux planifiées" pour voir la listes des travaux programmées et les modifier.
     JobDisabled=Travail désactivé
     MakeLocalDatabaseDumpShort=Sauvegarde locale de base
    -MakeLocalDatabaseDump=Créez un fichier dump de base local. Les paramètres sont: compression ('gz' ou 'bz' ou 'none'), type de sauvegarde ('mysql', 'pgsql', 'auto'), 1, 'auto' ou nom du fichier à générer, nb de fichiers de sauvegarde à garder
    +MakeLocalDatabaseDump=Créez un fichier dump de base local. Les paramètres sont: compression ('gz' ou 'bz' ou 'none'), type de sauvegarde ('mysql', 'pgsql', 'auto'), 1, 'auto' ou nom du fichier à générer, nombre de fichiers de sauvegarde à garder
     WarningCronDelayed=Attention, à des fins de performance, quelle que soit la prochaine date d'exécution des travaux activés, vos travaux peuvent être retardés jusqu'à %s heures avant d'être exécutés.
    diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang
    index 02e2a677c8e..2e695768355 100644
    --- a/htdocs/langs/fr_FR/errors.lang
    +++ b/htdocs/langs/fr_FR/errors.lang
    @@ -6,7 +6,7 @@ NoErrorCommitIsDone=Pas d'erreur, on valide
     ErrorButCommitIsDone=Erreurs trouvées mais on valide malgré tout
     ErrorBadEMail=email %s invalide
     ErrorBadUrl=Url %s invalide
    -ErrorBadValueForParamNotAString=Mauvaise valeur de paramètre. Ceci arrive lors d'une tentative de traduction d'une clé non renseigné.
    +ErrorBadValueForParamNotAString=Mauvaise valeur de paramètre. Ceci arrive lors d'une tentative de traduction d'une clé non renseignée.
     ErrorLoginAlreadyExists=L'identifiant %s existe déjà.
     ErrorGroupAlreadyExists=Le groupe %s existe déjà.
     ErrorRecordNotFound=Enregistrement non trouvé.
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=La valeur '%s' a un format de date non reconnu
     ErrorWrongDate=La date est incorrecte
     ErrorFailedToWriteInDir=Impossible d'écrire dans le répertoire %s
     ErrorFoundBadEmailInFile=Syntaxe d'email incorrecte trouvée pour %s lignes dans le fichier (exemple ligne %s avec email=%s)
    -ErrorUserCannotBeDelete=L'utilisateur ne peut pas être supprimé. Peut-être est-il associé à des éléments de Dolibarr.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Des champs obligatoires n'ont pas été renseignés
     ErrorSubjectIsRequired=Le sujet du mail est obligatoire
     ErrorFailedToCreateDir=Echec à la création d'un répertoire. Vérifiez que le user du serveur Web ait bien les droits d'écriture dans les répertoires documents de Dolibarr. Si le paramètre <b>safe_mode</b> a été activé sur ce PHP, vérifiez que les fichiers php dolibarr appartiennent à l'utilisateur du serveur Web.
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Les valeurs de la liste de sélection doivent être re
     ErrorNoValueForCheckBoxType=Les valeurs de la liste de case à cochées doivent être renseignées
     ErrorNoValueForRadioType=Les valeurs de la liste d'options doivent être renseignées
     ErrorBadFormatValueList=Les valeurs de la liste ne peuvent pas avoir plus d'une virgule: <u>%s</u> mais il en faut au moins une: clé, valeur
    -ErrorFieldCanNotContainSpecialCharacters=Le champ <b>%s</b> ne peut contenir de caractères spéciaux.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Le champ <b>%s</b> ne doit pas contenir de caractères spéciaux, ni majuscules et ne peut contenir que des chiffres.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Aucun module de comptabilité activé
     ErrorExportDuplicateProfil=Ce nom de profil existe déjà pour ce lot d'export.
     ErrorLDAPSetupNotComplete=Le matching Dolibarr-LDAP est incomplet.
     ErrorLDAPMakeManualTest=Un fichier .ldif a été généré dans le répertoire %s. Essayez de charger ce fichier manuellement depuis la ligne de commande pour plus de détail sur l'erreur.
    -ErrorCantSaveADoneUserWithZeroPercentage=Impossible de sauver une action à l'état non commencé avec un utilisateur défini comme ayant fait l'action.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=La référence utilisée pour la création existe déjà
     ErrorPleaseTypeBankTransactionReportName=Choisissez le nom du relevé bancaire sur lequel la ligne est rapportées (Format AAAAMM ou AAAAMMJJ)
    -ErrorRecordHasChildren=Impossible de supprimer l'enregistrement car il possède des enregistrements fils.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=L'objet a au moins un enfant de type %s
    -ErrorRecordIsUsedCantDelete=Ne peut effacer l'enregistrement.  Ce dernier est déjà utilisé ou inclut dans un autre élément.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Le javascript ne doit pas être désactivé pour que cette fonctionnalité soit utilisable. Pour activer/désactiver l'utilisation de javascript, allez dans le menu Accueil->Configuration->Affichage.
     ErrorPasswordsMustMatch=Les 2 mots de passe saisis doivent correspondre
    -ErrorContactEMail=Une erreur technique est apparue. Merci de contacter l'administrateur à l'email suivant <b>%s</b> en lui indiquant le code erreur <b>%s</b> dans votre message ou mieux en fournissant une copie d'écran de cette page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Mauvaise valeur pour le champ numéro <b>%s</b> (la valeur '<b>%s</b>' ne respecte pas la règle <b>%s</b>)
     ErrorFieldValueNotIn=Mauvaise valeur pour le champ numéro <b>%s</b> (la valeur '<b>%s</b>' n'est pas une valeur disponible dans le champ <b>%s</b> de la table <b>%s</b>)
     ErrorFieldRefNotIn=Mauvaise valeur pour le champ numéro <b>%s</b> (la valeur '<b>%s</b>' n'est pas une référence existante comme <b>%s</b>)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=L'antivirus n'a pas pu valider ce fichier (il est
     ErrorSpecialCharNotAllowedForField=Les caractères spéciaux ne sont pas admis pour le champ "%s"
     ErrorNumRefModel=Une référence existe en base (%s) et est incompatible avec cette numérotation. Supprimez la ligne ou renommez la référence pour activer ce module.
     ErrorQtyTooLowForThisSupplier=Quantité insuffisante pour ce fournisseur ou aucun tarif défini sur ce produit pour ce fournisseur
    +ErrorOrdersNotCreatedQtyTooLow=Certaines commandes n'ont pas été créées en raison d'une quantité trop faible
     ErrorModuleSetupNotComplete=La configuration des modules semble incomplète. Aller sur la page Accueil - Configuration - Modules pour corriger.
     ErrorBadMask=Erreur sur le masque
     ErrorBadMaskFailedToLocatePosOfSequence=Erreur, masque sans numéro de séquence
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Erreur, mauvais valeur de remise à zéro
     ErrorMaxNumberReachForThisMask=Nombre maximum atteint pour ce masque
     ErrorCounterMustHaveMoreThan3Digits=Le compteur doit avoir au moins 3 positions
     ErrorSelectAtLeastOne=Erreur. Sélectionnez au moins une entrée.
    -ErrorDeleteNotPossibleLineIsConsolidated=Suppression impossible car l'enregistrement porte sur au moins une transaction bancaire rapprochée
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s est attribué à un autre tiers
     ErrorFailedToSendPassword=Échec de l'envoi du mot de passe
     ErrorFailedToLoadRSSFile=Echec de la récupération du flux RSS. Ajoutez la constante MAIN_SIMPLEXMLLOAD_DEBUG si le message d'erreur n'est pas assez explicite.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Le compte utilisateur identifié par <b>%s</b> n'a pu ê
     ErrorLoginHasNoEmail=Cet utilisateur n'a pas d'email. Impossible de continuer.
     ErrorBadValueForCode=Mauvaise valeur saisie pour le code. Réessayez avec une nouvelle valeur...
     ErrorBothFieldCantBeNegative=Les champs %s et %s ne peuvent être tous deux négatifs
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=La quantité d'une ligne ne peut pas être négative dans les factures clients 
     ErrorWebServerUserHasNotPermission=Le compte d'exécution du serveur web <b>%s</b> n'a pas les permissions pour cela
     ErrorNoActivatedBarcode=Aucun type de code-barres activé
    @@ -130,7 +133,7 @@ ErrorFailedToValidatePasswordReset=Echec de la réinitialisation du mot de passe
     ErrorToConnectToMysqlCheckInstance=Echec de la connection au serveur de base de données. Vérifier que votre serveur est bien lancé (par exemple, avec MySQL/MariaDB, vous pouvez le lancer depuis la ligne de commande avec 'sudo service mysql start').
     ErrorFailedToAddContact=Echec à l'ajout du contact
     ErrorDateMustBeBeforeToday=La date ne peut pas être supérieure à aujourd'hui
    -ErrorPaymentModeDefinedToWithoutSetup=Un mode de paiement a été défini de type %s mais la configuration du module Facture n'a pas été complétée pour définir les informations affichées pour ce mode de paiment.
    +ErrorPaymentModeDefinedToWithoutSetup=Un mode de paiement a été défini de type %s mais la configuration du module Facture n'a pas été complétée pour définir les informations affichées pour ce mode de paiement.
     ErrorPHPNeedModule=Erreur, votre PHP doit avoir le module <b>%s</b> installé pour utiliser cette fonctionnalité.
     ErrorOpenIDSetupNotComplete=Vous avez configuré Dolibarr pour accepter l'authentication OpenID, mais l'URL du service OpenID n'est pas défini dans la constante %s
     ErrorWarehouseMustDiffers=Les entrepôts source et destination doivent être différents
    @@ -138,7 +141,7 @@ ErrorBadFormat=Mauvais format
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Erreur, cet adhérent n'ait pas encore lié à un tiers. Lier le tier à un tiers existant ou créer un nouveau tiers avant de créer une adhésion avec facture.
     ErrorThereIsSomeDeliveries=Erreur, il y a des bordereaux de réception liées à ces expéditions. La suppression est refusée.
     ErrorCantDeletePaymentReconciliated=Impossible d'effacer un paiement qui a généré une écriture sur le compte bancaire et qui a été rapprochée.
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Impossible d'effacer un paiement qui porte sur au moins une facture qui est à l'état payée.
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Ne peut assigner la constante '%s'
     ErrorPriceExpression2=Ne peut redéfinir la fonction '%s'
     ErrorPriceExpression3=Variable '%s' non définie dans la définition de fonction
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Nombre incorrect d'arguments (%s donné,%s attendu)
     ErrorPriceExpression8=Operateur '%s' non attendu
     ErrorPriceExpression9=Une erreur inattendue s'est produite
    -ErrorPriceExpression10=Il manque l'opérande à l'opérateur '%s' 
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Attendu '%s'
     ErrorPriceExpression14=Division par zéro
     ErrorPriceExpression17=Variable '%s' non définie
    @@ -171,7 +174,7 @@ ErrorGlobalVariableUpdater4=Le client SOAP a échoué avec l'erreur '%s'
     ErrorGlobalVariableUpdater5=Pas de variable globale
     ErrorFieldMustBeANumeric=Le champ <b>%s</b> doit être un numérique
     ErrorMandatoryParametersNotProvided=Paramètre(s) obligatoire(s) non fournis
    -ErrorOppStatusRequiredIfAmount=Vous avez fixé un montant estimé pour cette opportunité/affaire. Aussi, vous devez également entrer son statut
    +ErrorOppStatusRequiredIfAmount=Vous avez fixé un montant estimé pour cette opportunité. Aussi, vous devez également entrer son statut
     ErrorFailedToLoadModuleDescriptorForXXX=Echec de chagement de la classe descripteur du module %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Mauvaise définition du tableau Menu dans le descripteur de module (mauvaise valeur pour la clé fk_menu)
     ErrorSavingChanges=Une erreur est survenue lors de la sauvegarde des modifications
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=Fichier non trouvé. Peut que la clé de partage
     ErrorProductBarCodeAlreadyExists=Le code-barre du produit %s existe déjà sur une autre référence de produit
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Notez également que l'utilisation d'un produit virtuel pour augmenter ou réduire automatiquement les sous-produits n'est pas possible lorsqu'au moins un sous-produit (ou sous-produit de sous-produits) a besoin d'un numéro de série/lot.
     ErrorDescRequiredForFreeProductLines=La description est obligatoire pour les lignes avec un produit non prédéfini
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=Un mot de passe a été fixé pour cet adhérent. Cependant, aucun compte d'utilisateur n'a été créé. Donc, ce mot de passe est stocké, mais ne peut être utilisé pour accéder à Dolibarr. Il peut être utilisé par un module/interface externe, mais si vous n'avez pas besoin de définir ni login ni mot de passe pour un adhérent, vous pouvez désactiver l'option «Gérer un login pour chaque adhérent" depuis la configuration du module Adhérents. Si vous avez besoin de gérer un login, mais pas de mot de passe, vous pouvez laisser ce champ vide pour éviter cet avertissement. Remarque: L'email peut également être utilisé comme login si l'adhérent est lié à un utilisateur.
    @@ -217,17 +221,17 @@ WarningBookmarkAlreadyExists=Un marque-page avec ce titre ou cette destination (
     WarningPassIsEmpty=Attention, le mot de passe de la base de données Dolibarr est vide. Cela représente une faille de sécurité. Il est recommandé d'ajouter manuellement un mot de passe à la base et de modifier le fichier conf.php pour refléter ce changement.
     WarningConfFileMustBeReadOnly=Attention, votre fichier de configuration (<b>htdocs/conf/conf.php</b>) est accessible en écriture au serveur Web. Ceci représente une faille sérieuse de sécurité. Modifiez les permissions pour qu'il soit en lecture seule pour le compte sous lequel tourne le serveur Web et non lisible pour les autres.<br>Si vous êtes sous Windows sur un disque dur utilisant un formatage FAT, sachez que ce système de fichier ne permet pas de protéger des fichiers et n'offre donc aucune solution pour réduire les risques de manipulation de ce fichier.
     WarningsOnXLines=Alertes sur <b>%s</b> enregistrement(s) source
    -WarningNoDocumentModelActivated=Aucun modèle, pour la génération de document, n'a été activé. Un modèle sera pris par défaut en attendant la correction de configuration du module.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Attention, une fois l'installation terminée, les outils d'installation/migration doivent être désactivés en ajoutant un fichier <b>install.lock</b> dans le répertoire <b>%s</b>. L'absence de ce fichier représente une faille de sécurité.
    -WarningUntilDirRemoved=Les alertes de sécurité sont visibles par les administrateurs uniquement et resteront actives tant que la vulnérabilité sera avérée (ou que la constante MAIN_REMOVE_INSTALL_WARNING aura été définie dans Configuration->Divers)
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Attention, la fermeture se fait même lorsque le montant diffère. N'activez cette fonctionnalité qu'en connaissance de cause.
    -WarningUsingThisBoxSlowDown=Attention, l'utilisation de cette boite provoque de sérieux ralentissement des pages affichant cette boite.
    +WarningUsingThisBoxSlowDown=Attention, l'utilisation de cette boîte provoque de sérieux ralentissements des pages affichant cette boîte.
     WarningClickToDialUserSetupNotComplete=La configuration ClickToDial pour votre compte utilisateur n'est pas complète (voir l'onglet ClickToDial sur votre fiche utilisateur)
    -WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=Fonction désactivé quand l'affichage est en mode optimisé pour les personnes aveugles ou les navigateurs textes.
    +WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=Fonction désactivée quand l'affichage est en mode optimisé pour les personnes aveugles ou les navigateurs textes.
     WarningPaymentDateLowerThanInvoiceDate=La date de paiement (%s) est inférieure à la date de facturation (%s) de la facture %s.
     WarningTooManyDataPleaseUseMoreFilters=Trop de données (plus de %s lignes). Utilisez davantage de filtres ou régler la constante %s pour augmenter la limite à une valeur plus élevée.
     WarningSomeLinesWithNullHourlyRate=Des temps ont été enregistrés par des utilisateurs lorsque leur taux horaire n'était défini. Une valeur de 0 %s a été utilisée, mais cela peut entraîner une mauvaise évaluation du temps passé.
    -WarningYourLoginWasModifiedPleaseLogin=Votre identifiant a été modifié. Par sécurité, vous devrez vous identifiez avec votre nouvel identifiant avant l'action suivante.
    +WarningYourLoginWasModifiedPleaseLogin=Votre identifiant a été modifié. Par sécurité, vous devrez vous identifier avec votre nouvel identifiant avant l'action suivante.
     WarningAnEntryAlreadyExistForTransKey=Une donnée identique existe déjà pour la traduction du code dans cette langue
     WarningNumberOfRecipientIsRestrictedInMassAction=Attention, le nombre de destinataires différents est limité à <b>%s</b> lorsque vous utilisez les actions en masse sur les listes
     WarningDateOfLineMustBeInExpenseReportRange=Attention, la date de la ligne n'est pas dans la plage de la note de frais
    diff --git a/htdocs/langs/fr_FR/help.lang b/htdocs/langs/fr_FR/help.lang
    index 49f7fbe72f9..29bba422142 100644
    --- a/htdocs/langs/fr_FR/help.lang
    +++ b/htdocs/langs/fr_FR/help.lang
    @@ -5,9 +5,9 @@ RemoteControlSupport=Assistance en ligne temps réel
     OtherSupport=Autres type d'assistance
     ToSeeListOfAvailableRessources=Pour contacter/voir les ressources disponibles :
     HelpCenter=Centre d'assistance
    -DolibarrHelpCenter=Centre d'assistance Dolibarr
    -ToGoBackToDolibarr=Sinon cliquez <a href="%s">ici pour utiliser Dolibarr</a>
    -TypeOfSupport=Source de l'assistance
    +DolibarrHelpCenter=Dolibarr Help and Support Center
    +ToGoBackToDolibarr=Otherwise, <a href="%s">click here to continue to use Dolibarr</a>.
    +TypeOfSupport=Type of support
     TypeSupportCommunauty=Communautaire (gratuit)
     TypeSupportCommercial=Commercial
     TypeOfHelp=Type
    @@ -15,12 +15,12 @@ NeedHelpCenter=Besoin d'assistance ou aide ?
     Efficiency=Efficacité
     TypeHelpOnly=Aide uniquement
     TypeHelpDev=Aide+Développement
    -TypeHelpDevForm=Aide+Développement+Formation
    -ToGetHelpGoOnSparkAngels1=Certaines sociétés ou indépendants offrent un service d'assistance très rapide (parfois immédiat) et encore plus efficace grâce à la possibilité de prise de contrôle à distance de votre ordinateur pour mieux diagnostiquer et résoudre vos problèmes. Une telle aide peut être trouvée sur la bourse des accompagnateurs de <b>%s</b>.
    -ToGetHelpGoOnSparkAngels3=Vous pouvez aussi accéder à la <b>liste complète de tous les accompagnants possibles</b>, pour cela cliquez sur le bouton
    -ToGetHelpGoOnSparkAngels2=Parfois, aucun intervenant n'est disponible au moment de votre recherche, aussi pensez à modifier vos critères de recherche en indiquant "Toutes disponibilités". Vous pourrez alors prendre contact en différé.
    -BackToHelpCenter=Sinon, cliquez ici pour <a href="%s">retourner au centre d'assistance</a>.
    -LinkToGoldMember=Vous pouvez appeler immédiatement un des quelques accompagnateurs présélectionnés par Dolibarr pour votre langue (%s) en cliquant son Widget (disponibilité et tarif maximum sont rafraîchis automatiquement):
    +TypeHelpDevForm=Help+Development+Training
    +ToGetHelpGoOnSparkAngels1=Some companies can provide a fast (sometime immediate) and more efficient online support by remote control of your computer. Such help can be found on <b>%s</b> web site:
    +ToGetHelpGoOnSparkAngels3=Vous pouvez aussi accéder à la liste complète de tous les accompagnants possibles, pour cela cliquez sur le bouton
    +ToGetHelpGoOnSparkAngels2=Sometimes, there is no company available when you make your search, so change the filter to look for "all availability". You will be able to send more requests.
    +BackToHelpCenter=Otherwise, <a href="%s">go back to Help center home page</a>.
    +LinkToGoldMember=You can call one of the trainers preselected by Dolibarr for your language (%s) by clicking their Widget (status and maximum price are automatically updated):
     PossibleLanguages=Langues disponibles
    -SubscribeToFoundation=Aidez le projet Dolibarr, adhérez à l'association Dolibarr
    +SubscribeToFoundation=Help the Dolibarr project, subscribe to the foundation
     SeeOfficalSupport=Pour un accompagnement officiel Dolibarr dans votre langue : <br><b><a href="%s" target="_blank">%s</a></b>
    diff --git a/htdocs/langs/fr_FR/holiday.lang b/htdocs/langs/fr_FR/holiday.lang
    index 808c35ce9d0..030ff513622 100644
    --- a/htdocs/langs/fr_FR/holiday.lang
    +++ b/htdocs/langs/fr_FR/holiday.lang
    @@ -4,7 +4,7 @@ Holidays=Congés
     CPTitreMenu=Congés
     MenuReportMonth=État mensuel
     MenuAddCP=Créer demande de congés
    -NotActiveModCP=Vous devez activer le module Congés pour afficher cette page.
    +NotActiveModCP=You must enable the module Leave to view this page.
     AddCP=Créer une demande de congés
     DateDebCP=Date Début
     DateFinCP=Date Fin
    @@ -19,14 +19,14 @@ ListeCP=Liste des demandes de congés
     LeaveId=ID demande de congès
     ReviewedByCP=Sera approuvé par
     UserForApprovalID=ID de l'utilisateur d'approbation
    -UserForApprovalFirstname=Prénom de l'utilisateur d'approbation
    -UserForApprovalLastname=Nom de l'utilisateur d'approbation
    +UserForApprovalFirstname=First name of approval user
    +UserForApprovalLastname=Last name of approval user
     UserForApprovalLogin=Login de l'utilisateur d'approbation
     DescCP=Description
     SendRequestCP=Créer une demande de congés
     DelayToRequestCP=Les demandes de congés doivent être faites au moins <b>%s jour(s)</b> avant la date de ceux-ci.
    -MenuConfCP=Solde des congés
    -SoldeCPUser=Solde de congés: <b>%s jours</b>.
    +MenuConfCP=Balance of leave
    +SoldeCPUser=Leave balance is <b>%s</b> days.
     ErrorEndDateCP=Vous devez choisir une date de fin supérieur à la date de début.
     ErrorSQLCreateCP=Une erreur SQL est survenue durant la création :
     ErrorIDFicheCP=Une erreur est survenue, cette demande de congés n'existe pas.
    @@ -101,10 +101,10 @@ LEAVE_SICK=Congé maladie
     LEAVE_OTHER=Autre congé
     LEAVE_PAID_FR=Congés payés
     ## Configuration du Module ##
    -LastUpdateCP=Dernière mise à jour automatique de l'allocation des congés
    +LastUpdateCP=Latest automatic update of leave allocation
     MonthOfLastMonthlyUpdate=Mois de la dernière mise à jour automatique des attributions de congés
     UpdateConfCPOK=Mise à jour effectuée avec succès.
    -Module27130Name= Gestion des demandes de congés
    +Module27130Name= Demandes de congés
     Module27130Desc= Ce module permet de gérer les demandes, approbations de congés.
     ErrorMailNotSend=Une erreur est survenue lors de l'envoi de l'email :
     NoticePeriod=Délai de prévenance
    @@ -112,7 +112,7 @@ NoticePeriod=Délai de prévenance
     HolidaysToValidate=Valider les demandes de congés
     HolidaysToValidateBody=Veuillez trouver ci-dessous une demande de congés à valider.
     HolidaysToValidateDelay=Cette demande de congés a été effectuée dans un délai de moins de %s jours avant ceux-ci.
    -HolidaysToValidateAlertSolde=L'utilisateur ayant fait cette demande de congés payés n'a pas le solde requis.
    +HolidaysToValidateAlertSolde=The user who made this leave request does have enough available days.
     HolidaysValidated=Validation de la demande de congés
     HolidaysValidatedBody=Votre demande de congés du %s au %s vient d'être approuvée.
     HolidaysRefused=Congés refusés
    @@ -122,3 +122,8 @@ HolidaysCanceledBody=Votre demande de congés du %s au %s a été annulée.
     FollowedByACounter=1: Ce type de congé doit être suivis par un compteur. Le compteur est incrémenté manuellement ou automatiquement et quand une demande de congé est validée, le compteur est décrémenté.<br>0: Non suivi par un compteur.
     NoLeaveWithCounterDefined=Il n'y a pas de type de congés définis qui requiert un suivi par un compteur
     GoIntoDictionaryHolidayTypes=Aller dans <strong>Accueil - Configuration - Dictionnaires - Type de congés</strong> pour configurer les différents types de congés.
    +HolidaySetup=Setup of module Holiday
    +HolidaysNumberingModules=Leave requests numbering models
    +TemplatePDFHolidays=Template for leave requests PDF
    +FreeLegalTextOnHolidays=Free text on PDF
    +WatermarkOnDraftHolidayCards=Watermarks on draft leave requests
    diff --git a/htdocs/langs/fr_FR/install.lang b/htdocs/langs/fr_FR/install.lang
    index b2317d7b20e..7035e0d8ed6 100644
    --- a/htdocs/langs/fr_FR/install.lang
    +++ b/htdocs/langs/fr_FR/install.lang
    @@ -2,37 +2,37 @@
     InstallEasy=Veuillez suivre les étapes une à une.
     MiscellaneousChecks=Vérification des prérequis
     ConfFileExists=Le fichier de configuration <b>%s</b> existe.
    -ConfFileDoesNotExistsAndCouldNotBeCreated=Le fichier de configuration <b>%s</b> n'existe pas et n'a pu être créé !
    +ConfFileDoesNotExistsAndCouldNotBeCreated=Configuration file <b>%s</b> does not exist and could not be created!
     ConfFileCouldBeCreated=Le fichier de configuration <b>%s</b> a pu être créé.
    -ConfFileIsNotWritable=Le fichier <b>%s</b> n'est pas modifiable. Pour une première installation, modifiez ses permissions. Le serveur Web doit avoir le droit d'écrire dans ce fichier le temps de la configuration ("chmod 666" par exemple sur un OS compatible Unix).
    +ConfFileIsNotWritable=Configuration file <b>%s</b> is not writable. Check permissions. For first install, your web server must be able to write into this file during configuration process ("chmod 666" for example on a Unix like OS).
     ConfFileIsWritable=Le fichier <b>%s</b> est modifiable.
     ConfFileMustBeAFileNotADir=Le fichier de configuration <b> %s </b> doit être un fichier, pas un répertoire.
    -ConfFileReload=Rechargement des informations depuis le fichier de configuration.
    +ConfFileReload=Reloading parameters from configuration file.
     PHPSupportSessions=Ce PHP prend en charge les sessions.
     PHPSupportPOSTGETOk=Ce PHP prend bien en charge les variables POST et GET.
    -PHPSupportPOSTGETKo=Il est possible que ce PHP ne prenne pas en charge les variables POST et/ou GET. Vérifier le paramètre <b>variables_order</b> du php.ini.
    -PHPSupportGD=Ce PHP prend en charge les fonctions graphiques GD.
    +PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check the parameter <b>variables_order</b> in php.ini.
    +PHPSupportGD=This PHP supports GD graphical functions.
     PHPSupportCurl=PHP supporte l'extension Curl
    -PHPSupportUTF8=Ce PHP prend en charge les fonctions UTF8.
    +PHPSupportUTF8=This PHP supports UTF8 functions.
     PHPMemoryOK=Votre mémoire maximum de session PHP est définie à <b>%s</b>. Ceci devrait être suffisant.
    -PHPMemoryTooLow=Votre mémoire maximum de session PHP est définie à <b>%s</b> octets. Ceci est trop faible. Il est recommandé de modifier le paramètre <b>memory_limit</b> de votre fichier <b>php.ini</b> à au moins <b>%s</b> octets.
    -Recheck=Cliquez ici pour un test plus probant
    -ErrorPHPDoesNotSupportSessions=Votre installation PHP ne prend pas en charge les sessions. Cette fonctionnalité est requise pour faire fonctionner Dolibarr. Vérifiez votre configuration de PHP.
    -ErrorPHPDoesNotSupportGD=Ce PHP ne prend pas en charge les fonctions graphiques GD. Aucun graphique ne sera disponible.
    +PHPMemoryTooLow=Your PHP max session memory is set to <b>%s</b> bytes. This is too low. Change your <b>php.ini</b> to set <b>memory_limit</b> parameter to at least <b>%s</b> bytes.
    +Recheck=Click here for a more detailed test
    +ErrorPHPDoesNotSupportSessions=Your PHP installation does not support sessions. This feature is required to allow Dolibarr to work. Check your PHP setup and permissions of the sessions directory.
    +ErrorPHPDoesNotSupportGD=Your PHP installation does not support GD graphical functions. No graphs will be available.
     ErrorPHPDoesNotSupportCurl=Votre version de PHP ne supporte pas l'extension Curl
    -ErrorPHPDoesNotSupportUTF8=Ce PHP ne prend pas en charge les fonctions UTF8. Résolvez le problème avant d'installer Dolibarr car il ne pourra pas fonctionner correctement.
    +ErrorPHPDoesNotSupportUTF8=Your PHP installation does not support UTF8 functions. Dolibarr cannot work correctly. Resolve this before installing Dolibarr.
     ErrorDirDoesNotExists=Le répertoire <b>%s</b> n'existe pas ou n'est pas accessible.
    -ErrorGoBackAndCorrectParameters=Revenez en arrière et corrigez les paramètres invalides.
    +ErrorGoBackAndCorrectParameters=Go back and check/correct the parameters.
     ErrorWrongValueForParameter=Vous avez peut-être saisi une mauvaise valeur pour le paramètre '%s'.
     ErrorFailedToCreateDatabase=Échec de la création de la base '%s'.
     ErrorFailedToConnectToDatabase=Échec de connexion à la base '%s'.
     ErrorDatabaseVersionTooLow=Version de base de donnée (%s) trop ancienne. La version %s ou supérieure est requise.
     ErrorPHPVersionTooLow=Version de PHP trop ancienne. La version %s est requise.
    -ErrorConnectedButDatabaseNotFound=Connexion au serveur réussie mais base '%s' introuvable.
    +ErrorConnectedButDatabaseNotFound=Connection to server successful but database '%s' not found.
     ErrorDatabaseAlreadyExists=La base de données '%s' existe déjà.
    -IfDatabaseNotExistsGoBackAndUncheckCreate=Si la base n'existe pas, revenez en arrière et cochez l'option "Créer la base de données".
    +IfDatabaseNotExistsGoBackAndUncheckCreate=If the database does not exist, go back and check option "Create database".
     IfDatabaseExistsGoBackAndCheckCreate=Si la base existe déjà, revenez en arrière et désactiver l'option "Créer la base de données".
    -WarningBrowserTooOld=Version du navigateur trop ancienne. Nous vous recommandons de mettre à jour vers une version récente de Firefox, Chrome ou Opera.
    +WarningBrowserTooOld=Version of browser is too old. Upgrading your browser to a recent version of Firefox, Chrome or Opera is highly recommended.
     PHPVersion=Version de PHP
     License=Licence d'utilisation
     ConfigurationFile=Fichier de configuration
    @@ -45,22 +45,23 @@ DolibarrDatabase=Base de données Dolibarr
     DatabaseType=Type de la base de données
     DriverType=Type du pilote
     Server=Serveur
    -ServerAddressDescription=Nom ou adresse IP du serveur de base de données, généralement 'localhost' quand le serveur est installé sur la même machine que le serveur web
    +ServerAddressDescription=Name or ip address for the database server. Usually 'localhost' when the database server is hosted on the same server as the web server.
     ServerPortDescription=Port du serveur. Ne rien mettre si inconnu.
     DatabaseServer=Serveur de base de données
     DatabaseName=Nom de la base de données
    -DatabasePrefix=Préfixe des tables
    -AdminLogin=Identifiant du propriétaire de la base de données Dolibarr.
    -PasswordAgain=Vérification du mot de passe
    +DatabasePrefix=Database table prefix
    +DatabasePrefixDescription=Database table prefix. If empty, defaults to llx_.
    +AdminLogin=User account for the Dolibarr database owner.
    +PasswordAgain=Retype password confirmation
     AdminPassword=Mot de passe du propriétaire de la base de données Dolibarr.
     CreateDatabase=Créer la base de données
    -CreateUser=Créer le propriétaire ou lui affecter les droits à la base
    +CreateUser=Create user account or grant user account permission on the Dolibarr database
     DatabaseSuperUserAccess=Serveur de base de données - Accès super utilisateur
    -CheckToCreateDatabase=Cochez cette option si la base de données n'existe pas et doit être créée.<br>Dans ce cas, il faut renseigner identifiant et mot de passe du super-utilisateur au bas de cette page.
    -CheckToCreateUser=Case à cocher si le propriétaire de la base de données n'existe pas et doit être créé, ou s'il existe, mais la base de données n'existe pas et les autorisations doivent être accordées<br>. Dans ce cas, vous devez choisir son identifiant et son mot de passe et remplir le mot de passe pour le compte super-utilisateur au bas de cette page. Si cette case n'est pas cochée, la base de données propriétaire et ses mots de passe doivent exister.
    -DatabaseRootLoginDescription=Identifiant de l'utilisateur de la base ayant les droits de création de bases de données ou de comptes pour la base, requis si la base ou son propriétaire n'existent pas déjà et doivent être créés.
    -KeepEmptyIfNoPassword=Laissez vide si l'administrateur n'a pas de mot de passe
    -SaveConfigurationFile=Enregistrement du fichier de configuration
    +CheckToCreateDatabase=Check the box if the database does not exist yet and so must be created.<br>In this case, you must also fill in the user name and password for the superuser account at the bottom of this page.
    +CheckToCreateUser=Check the box if:<br>the database user account does not yet exist and so must be created, or<br>if the user account exists but the database does not exist and permissions must be granted.<br>In this case, you must enter the user account and password and <b>also</b> the superuser account name and password at the bottom of this page. If this box is unchecked, database owner and password must already exist.
    +DatabaseRootLoginDescription=Superuser account name (to create new databases or new users), mandatory if the database or its owner does not already exist.
    +KeepEmptyIfNoPassword=Leave empty if superuser has no password (NOT recommended)
    +SaveConfigurationFile=Saving parameters to
     ServerConnection=Connexion au serveur
     DatabaseCreation=Création de la base de données
     CreateDatabaseObjects=Création des objets de la base
    @@ -71,9 +72,9 @@ CreateOtherKeysForTable=Création des clés étrangères et des index pour la ta
     OtherKeysCreation=Création des clés étrangères et des index
     FunctionsCreation=Création des fonctions
     AdminAccountCreation=Création du compte administrateur
    -PleaseTypePassword=Veuillez saisir un mot de passe, les mots de passe vides ne sont pas acceptés !
    -PleaseTypeALogin=Veuillez saisir un identifiant !
    -PasswordsMismatch=Les mots de passe ne correspondent pas, veuillez réessayer !
    +PleaseTypePassword=Please type a password, empty passwords are not allowed!
    +PleaseTypeALogin=Please type a login!
    +PasswordsMismatch=Passwords differs, please try again!
     SetupEnd=Fin de l'installation
     SystemIsInstalled=Votre système est maintenant installé.
     SystemIsUpgraded=Dolibarr a été mis à jour avec succès.
    @@ -81,65 +82,65 @@ YouNeedToPersonalizeSetup=Vous devez maintenant configurer Dolibarr selon vos be
     AdminLoginCreatedSuccessfuly=Création du compte administrateur Dolibarr '<b>%s</b>' réussie.
     GoToDolibarr=Accéder à Dolibarr
     GoToSetupArea=Accéder à Dolibarr (espace de configuration)
    -MigrationNotFinished=La version de votre base n'est pas encore complètement à niveau, aussi il vous faudra relancer à nouveau une migration.
    +MigrationNotFinished=The database version is not completely up to date: run the upgrade process again.
     GoToUpgradePage=Accéder à la page de migration à nouveau
     WithNoSlashAtTheEnd=Sans le slash "/" à la fin
    -DirectoryRecommendation=Il est recommandé de mettre ce répertoire en dehors du répertoire des pages web.
    +DirectoryRecommendation=It is recommended to use a directory outside of the web pages.
     LoginAlreadyExists=Existe déjà
     DolibarrAdminLogin=Identifiant de l'utilisateur administrateur de Dolibarr
    -AdminLoginAlreadyExists=Compte administrateur Dolibarr '<b>%s</b>' déjà existant. Revenez en arrière si vous voulez en créer un autre.
    +AdminLoginAlreadyExists=Dolibarr administrator account '<b>%s</b>' already exists. Go back if you want to create another one.
     FailedToCreateAdminLogin=Echec de la création du compte administrateur Dolibarr
    -WarningRemoveInstallDir=Attention, pour des raisons de sécurité, afin de bloquer une nouvelle utilisation des outils d'installation/migration, une fois l'installation terminée, il est conseillé de placer dans le répertoire document de Dolibarr un fichier nommé <b>install.lock</b> en lecture seule.
    -FunctionNotAvailableInThisPHP=Non disponible sur ce PHP
    +WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should add a file called <b>install.lock</b> into the Dolibarr document directory in order to prevent the accidental/malicious use of the install tools again.
    +FunctionNotAvailableInThisPHP=Not available in this PHP
     ChoosedMigrateScript=Choix du script de migration
     DataMigration=Migration de la base (données)
     DatabaseMigration=Migration de la base de données (structure + certaines données)
     ProcessMigrateScript=Exécution du script
     ChooseYourSetupMode=Choisissez votre mode d'installation et cliquez sur "Démarrer"…
     FreshInstall=Première installation
    -FreshInstallDesc=Utilisez ce mode si c'est votre première installation. Si ce n'est pas le cas, ce mode peut réparer une installation précédente incomplète, mais si vous voulez juste mettre à jour, choisissez le mode "Mise à jour".
    +FreshInstallDesc=Use this mode if this is your first install. If not, this mode can repair a incomplete previous install. If you want to upgrade your version, choose "Upgrade" mode.
     Upgrade=Mise à jour
     UpgradeDesc=Utilisez ce mode après avoir écrasé les fichiers d'une ancienne installation Dolibarr par ceux d'une version plus récente. Ce choix permet de mettre à jour votre base et vos données pour cette nouvelle version.
     Start=Démarrer
     InstallNotAllowed=Installation non autorisée par les permissions du fichier <b>conf.php</b>
     YouMustCreateWithPermission=Vous devez créer un fichier %s et donner les droits d'écriture dans celui-ci au serveur web durant le processus d'installation.
    -CorrectProblemAndReloadPage=Corrigez le problème et rechargez la page (F5).
    +CorrectProblemAndReloadPage=Please fix the problem and press F5 to reload the page.
     AlreadyDone=Déjà migré
     DatabaseVersion=Version de la base
     ServerVersion=Version du serveur de base de données
     YouMustCreateItAndAllowServerToWrite=Vous devez créer ce dossier et permettre au serveur web d'écrire dans celui-ci.
     DBSortingCollation=Ordre de tri utilisé pour la base de données
    -YouAskDatabaseCreationSoDolibarrNeedToConnect=Vous avez demandé la création de la base de données <b>%s</b>, mais pour cela, Dolibarr doit se connecter sur le serveur <b>%s</b> via le super utilisateur <b>%s</b>.
    -YouAskLoginCreationSoDolibarrNeedToConnect=Vous avez demandé la création de l'identifiant de base de données <b>%s</b>, mais pour cela, Dolibarr doit se connecter sur le serveur <b>%s</b> via le super utilisateur <b>%s</b>.
    -BecauseConnectionFailedParametersMayBeWrong=La connexion ayant échoué, les paramètres du serveur ou du super utilisateur sont peut-être incorrects.
    +YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database <b>%s</b>, but for this, Dolibarr needs to connect to server <b>%s</b> with super user <b>%s</b> permissions.
    +YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user <b>%s</b>, but for this, Dolibarr needs to connect to server <b>%s</b> with super user <b>%s</b> permissions.
    +BecauseConnectionFailedParametersMayBeWrong=The database connection failed: the host or super user parameters must be wrong.
     OrphelinsPaymentsDetectedByMethod=Paiement orphelins détectés par la méthode %s
     RemoveItManuallyAndPressF5ToContinue=Supprimez-le manuellement et actualisez la page pour continuer (F5).
     FieldRenamed=Champ renommé
    -IfLoginDoesNotExistsCheckCreateUser=Si l'identifiant n'existe pas encore, vous devez cocher l'option "Créer l'utilisateur"
    -ErrorConnection=Le serveur "<b>%s</b>", nom de base "<b>%s</b>", identifiant "<b>%s</b>", ou mot de passe de la base de données est peut-être incorrect ou la version du client PHP trop ancienne par rapport à la version de la base de données.
    +IfLoginDoesNotExistsCheckCreateUser=If the user does not exist yet, you must check option "Create user"
    +ErrorConnection=Server "<b>%s</b>", database name "<b>%s</b>", login "<b>%s</b>", or database password may be wrong or the PHP client version may be too old compared to the database version.
     InstallChoiceRecommanded=Choix recommandé pour installer la version <b>%s</b> depuis votre version actuelle <b>%s</b>
     InstallChoiceSuggested=<b>Choix suggéré par l'installeur</b>.
    -MigrateIsDoneStepByStep=La version cible (%s) ayant un écart de plusieurs versions, l'installeur reviendra proposer la migration suivante une fois celle-ci exécutée.
    -CheckThatDatabasenameIsCorrect=Vérifiez que le nom de base "<b>%s</b>" est correct.
    +MigrateIsDoneStepByStep=The targeted version (%s) has a gap of several versions. The install wizard will come back to suggest a further migration once this one is complete.
    +CheckThatDatabasenameIsCorrect=Check that the database name "<b>%s</b>" is correct.
     IfAlreadyExistsCheckOption=Si ce nom est correct et que cette base n'existe pas déjà, vous devez cocher l'option "Créer la base de données".
     OpenBaseDir=Paramètre PHP openbasedir
    -YouAskToCreateDatabaseSoRootRequired=Vous avez coché la case "Créer la base de données". Pour cela, identifiant et mot de passe du super utilisateur (en bas de formulaire) sont obligatoire.
    -YouAskToCreateDatabaseUserSoRootRequired=Vous avez coché la case "Créer l'utilisateur propriétaire" de la base. Pour cela, identifiant et mot de passe du super utilisateur (en bas de formulaire) sont obligatoire.
    -NextStepMightLastALongTime=L'étape en cours peut durer quelques minutes. Merci d'attendre l'affichage complet de la page suivante pour poursuivre.
    +YouAskToCreateDatabaseSoRootRequired=You checked the box "Create database". For this, you need to provide the login/password of superuser (bottom of form).
    +YouAskToCreateDatabaseUserSoRootRequired=You checked the box "Create database owner". For this, you need to provide the login/password of superuser (bottom of form).
    +NextStepMightLastALongTime=The current step may take several minutes. Please wait until the next screen is shown completely before continuing.
     MigrationCustomerOrderShipping=Mise à jour stockage des expéditions des commandes clients
     MigrationShippingDelivery=Mise à jour stockage des expéditions
     MigrationShippingDelivery2=Mise à jour stockage des expéditions 2
     MigrationFinished=Migration terminée
    -LastStepDesc=<strong>Dernière étape</strong>: Définissez ici l'identifiant et le mot de passe du premier utilisateur que vous allez utiliser pour vous connecter à l'application. Ne perdez pas ces identifiants, il s'agit du compte permettant d'administrer les autres.
    +LastStepDesc=<strong>Last step</strong>: Define here the login and password you wish to use to connect to Dolibarr. <b>Do not lose this as it is the master account to administer all other/additional user accounts.</b>
     ActivateModule=Activation du module %s
     ShowEditTechnicalParameters=Cliquer ici pour afficher/éditer les paramètres techniques (mode expert)
    -WarningUpgrade=Attention :\nAvez-vous effectué une sauvegarde de votre base de données en premier ?\nC'est hautement recommandé : par exemple, à cause de nombreaux bugs dans le système de base de données (Par exemple mysql version 5.5.40/41/42/43), certaines données ou tables peuvent être perdues durant le processus, il est donc hautement recommandé d'avoir une sauvegarde complète de votre base de données avant de commencer la migration.\n\nCliquez Ok pour commencer la migration...
    -ErrorDatabaseVersionForbiddenForMigration=La version de votre gestionnaire de base de données est %s. Celle-ci présente un défaut critique entraînant des pertes de données si vous changez la structure de votre base de données tel que requis par le processus de migration. C'est pourquoi la migration vous sera interdite tant que vous n'aurez pas mis à jour votre gestionnaire de base de données vers une version supérieure corrigée (Liste des versions affectées par le défaut : %s).
    +WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process...
    +ErrorDatabaseVersionForbiddenForMigration=La version de votre gestionnaire de base de données est %s. Celle-ci présente un défaut critique entraînant des pertes de données si vous changez la structure de votre base de données tel que requis par le processus de migration. C'est pourquoi la migration vous sera interdite tant que vous n'aurez pas mis à jour votre gestionnaire de base de données vers une version supérieure corrigée (Liste des versions affectées par le défaut: %s).
     KeepDefaultValuesWamp=Si vous utilisez l'installeur automatique DoliWamp, les données présentes ici sont pré-remplies. Ne les modifiez qu'en connaissance de cause.
    -KeepDefaultValuesDeb=Vous utilisez l'assistant d'installation depuis un environnement Linux (Ubuntu, Debian, Fedor...). Les valeurs présentes ici sont pré-remplies. Seul le mot de passe d'accès du propriétaire de la base de données doit être renseigné. Les autres paramètres ne doivent être modifiés qu'en connaissance de cause.
    +KeepDefaultValuesDeb=Vous utilisez l'assistant d'installation depuis un environnement Linux (Ubuntu, Debian, Fedora...). Les valeurs présentes ici sont pré-remplies. Seul le mot de passe d'accès du propriétaire de base de données à créer doit être renseigné. Les autres paramètres ne doivent être modifiés qu'en connaissance de cause.
     KeepDefaultValuesMamp=Vous utilisez l'assistant d'installation DoliMamp. Les valeurs présentes ici sont pré-remplies. Leur modification ne doit être effectuée qu'en connaissance de cause.
     KeepDefaultValuesProxmox=Vous utilisez l'assistant d'installation depuis une application Proxmox. Les valeurs présentes ici sont pré-remplies. Leur modification ne doit être effectuée qu'en connaissance de cause.
    -UpgradeExternalModule=Lancement du processus de mise à jour de modules externes
    +UpgradeExternalModule=Run dedicated upgrade process of external module
     SetAtLeastOneOptionAsUrlParameter=Définissez au moins une option en tant que paramètre dans l'URL. Par exemple: '... repair.php?standard=confirmed'
     NothingToDelete=Rien a supprimer
     NothingToDo=Rien à faire
    @@ -163,9 +164,9 @@ MigrationContractsUpdate=Mise à jour des contrats sans détail (gestion du cont
     MigrationContractsNumberToUpdate=%s contrat(s) a mettre à jour
     MigrationContractsLineCreation=Création ligne contrat pour contrat ref %s
     MigrationContractsNothingToUpdate=Pas ou plus de contrats (liés à un produit) sans ligne de détail à corriger.
    -MigrationContractsFieldDontExist=Le champs fk_facture n'existe plus. Pas d'opération à faire.
    +MigrationContractsFieldDontExist=Field fk_facture does not exist anymore. Nothing to do.
     MigrationContractsEmptyDatesUpdate=Mise à jour des dates de contrats non renseignées
    -MigrationContractsEmptyDatesUpdateSuccess=Mise à jour des dates de contrats non renseignées
    +MigrationContractsEmptyDatesUpdateSuccess=Contract empty date correction done successfully
     MigrationContractsEmptyDatesNothingToUpdate=Pas ou plus de date de contrats à renseigner.
     MigrationContractsEmptyCreationDatesNothingToUpdate=Pas ou plus de date de création à renseigner.
     MigrationContractsInvalidDatesUpdate=Mise à jour dates contrat incorrectes (pour contrats avec détail en service)
    @@ -187,24 +188,24 @@ MigrationDeliveryDetail=Mise à jour bon réception
     MigrationStockDetail=Mise à jour valeur en stock des produits
     MigrationMenusDetail=Mise à jour table des menus dynamiques
     MigrationDeliveryAddress=Mise à jour des adresses de livraison dans les bons d'expédition
    -MigrationProjectTaskActors=Migration de la table llx_projet_task_actors
    +MigrationProjectTaskActors=Data migration for table llx_projet_task_actors
     MigrationProjectUserResp=Migration du champ fk_user_resp de llx_projet vers llx_element_contact
     MigrationProjectTaskTime=Mise à jour du temps consommé en secondes
     MigrationActioncommElement=Mise à jour des données des actions des éléments
     MigrationPaymentMode=Migration des modes de paiement
     MigrationCategorieAssociation=Migration des categories
    -MigrationEvents=Migration des évènements pour ajouter les propriétaires dans la table des utilisateurs assignés
    -MigrationEventsContact=Migration des événements pour ajouter le contact de l'événement dans la table d'affectation
    +MigrationEvents=Migration of events to add event owner into assignment table
    +MigrationEventsContact=Migration of events to add event contact into assignment table
     MigrationRemiseEntity=Mettre à jour le champ "entity" de la table "llx_societe_remise
     MigrationRemiseExceptEntity=Mettre à jour le champ "entity" de la table "llx_societe_remise_except"
     MigrationUserRightsEntity=Mise à jour du champ entity de llx_user_rights
     MigrationUserGroupRightsEntity=Mise à jour du champ entity de llx_usergroup_rights
     MigrationReloadModule=Rechargement du module %s
     MigrationResetBlockedLog=Réinitialiser le module BlockedLog pour l'algorithme v7
    -ShowNotAvailableOptions=Afficher les choix non disponibles
    -HideNotAvailableOptions=Cacher les choix non disponibles
    +ShowNotAvailableOptions=Show unavailable options
    +HideNotAvailableOptions=Hide unavailable options
     ErrorFoundDuringMigration=Une erreur est survenu lors du processus de migration, aussi l'étape suivante ne peut pas être réalisée. Pour ignorer les erreurs, vous pouvez <a href="%s">cliquer ici</a>, mais l'application ou certaines fonctionnalités risquent de présenter des dysfonctionnements jusqu'à la résolution de la ou des erreurs
    -YouTryInstallDisabledByDirLock=L'application essaie de se mettre à jour, mais les pages d'installation / mise à jour ont été désactivées pour des raisons de sécurité (répertoire renommé avec le suffixe .lock). <br>
    -YouTryInstallDisabledByFileLock=L'application essaie de se mettre à jour, mais les pages d'installation / mise à jour ont été désactivées pour des raisons de sécurité (par le fichier de verrouillage <strong> install.lock </strong> dans le répertoire de documents dolibarr). <br>
    +YouTryInstallDisabledByDirLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (directory renamed with .lock suffix).<br>
    +YouTryInstallDisabledByFileLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (by the existence of a lock file <strong>install.lock</strong> in the dolibarr documents directory).<br>
     ClickHereToGoToApp=Cliquez ici pour aller sur votre application
    -ClickOnLinkOrRemoveManualy=Cliquez sur le lien suivant et si vous atteignez toujours cette page, vous devez supprimer manuellement le fichier install.lock dans le répertoire documents
    +ClickOnLinkOrRemoveManualy=Click on the following link. If you always see this same page, you must remove/rename the file install.lock in the documents directory.
    diff --git a/htdocs/langs/fr_FR/interventions.lang b/htdocs/langs/fr_FR/interventions.lang
    index d1f57e2e951..c8cf7732896 100644
    --- a/htdocs/langs/fr_FR/interventions.lang
    +++ b/htdocs/langs/fr_FR/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Fiche intervention
     NewIntervention=Nouvelle intervention
     AddIntervention=Créer intervention
    +ChangeIntoRepeatableIntervention=Convertir en intervention récurrente
     ListOfInterventions=Liste des interventions
     ActionsOnFicheInter=Événements sur l'intervention
     LastInterventions=Les %s dernières interventions
    diff --git a/htdocs/langs/fr_FR/mails.lang b/htdocs/langs/fr_FR/mails.lang
    index 25a82ab2487..4aef2bc0467 100644
    --- a/htdocs/langs/fr_FR/mails.lang
    +++ b/htdocs/langs/fr_FR/mails.lang
    @@ -45,10 +45,10 @@ MailingStatusReadAndUnsubscribe=Lu et désinscrit
     ErrorMailRecipientIsEmpty=L'adresse du destinataire est vide
     WarningNoEMailsAdded=Aucun nouvel email à ajouter à la liste des destinataires.
     ConfirmValidMailing=Confirmez-vous la validation de l'emailing ?
    -ConfirmResetMailing=Attention, en réinitialisant l'emailing <b>%s</b>, vous autorisez son émission en masse une nouvelle fois. Est-ce bien ce que vous voulez faire ?
    -ConfirmDeleteMailing=Confirmez-vous la suppression de l'emailing ?
    -NbOfUniqueEMails=Nombre d'emails uniques
    -NbOfEMails=Nombre d'emails
    +ConfirmResetMailing=Warning, by re-initializing emailing <b>%s</b> , you will allow resending this email in a mass mailing. Are you sure you want to do this?
    +ConfirmDeleteMailing=Are you sure you want to delete this emailing?
    +NbOfUniqueEMails=No. of unique emails
    +NbOfEMails=No. of EMails
     TotalNbOfDistinctRecipients=Nombre de destinataires uniques
     NoTargetYet=Aucun destinataire défini (Aller sur l'onglet Destinataires)
     NoRecipientEmail=Aucun e-mail de destinataire pour %s
    @@ -66,8 +66,8 @@ DateLastSend=Date de la dernière expédition
     DateSending=Date envoi
     SentTo=Envoyés à <b>%s</b>
     MailingStatusRead=Lu
    -YourMailUnsubcribeOK=L'adresse email <b>%s</b> est bien désinscrite de la liste.
    -ActivateCheckReadKey=Clé de sécurité permettant le chiffrement des URL utilisées dans les fonctions d'accusé de lecture et de désinscription
    +YourMailUnsubcribeOK=The email <b>%s</b>  is correctly unsubscribe from mailing list
    +ActivateCheckReadKey=Key used to encrypt URL used for "Read Receipt" and "Unsubscribe" feature
     EMailSentToNRecipients=Email envoyé à %s destinataires.
     EMailSentForNElements=Email envoyé pour %s enregistrements
     XTargetsAdded=<b>%s</b> destinataires ajoutés dans la liste cible
    @@ -109,7 +109,7 @@ MailingNeedCommand2=Vous pouvez toutefois quand même les envoyer par l'interfac
     ConfirmSendingEmailing=Si vous souhaitez envoyer l'e-mailing depuis cet écran, veuillez confirmer son envoi maintenant, depuis votre navigateur.
     LimitSendingEmailing=Remarque: L'envoi d'Emailings à partir de l'interface web se fait en plusieurs fois pour des raisons de sécurité et de timeout, <b>%s</b> bénéficiaires à la fois pour chaque session d'envoi.
     TargetsReset=Vider liste
    -ToClearAllRecipientsClickHere=Pour vider la liste des destinataires, cliquez sur le bouton
    +ToClearAllRecipientsClickHere=Pour vider la liste des destinataires de cet emailing, cliquez sur le bouton
     ToAddRecipientsChooseHere=Pour ajouter des destinataires, choisir dans les listes ci-dessous
     NbOfEMailingsReceived=Emailings de masse reçus
     NbOfEMailingsSend=Emailings de masse envoyés
    @@ -139,7 +139,7 @@ UseFormatFileEmailToTarget=Le fichier d'import doit être au format <strong>emai
     UseFormatInputEmailToTarget=Saisissez une chaîne de caractères au format <strong>email;nom;prénom;autre</strong>
     MailAdvTargetRecipients=Destinataires (sélection avancée)
     AdvTgtTitle=Remplissez les champs de saisie pour pré-sélectionner les tiers ou contacts/adresses cibles
    -AdvTgtSearchTextHelp=Astuces de recherche : <br>- x<b>%%</b> pour rechercher tous les termes commençant par x,<br>- <b>;</b> comme séparateur de valeurs recherchées,<br>- <b>!</b> pour exclure une valeur de la recherche : <br> Exemple : <b>jean;joe;jim%%;!jimo;!jima%</b> affichera tous les résultats <i>jean</i> et <i>joe</i>, ceux commençant par <i>jim</i> en excluant <i>jimo</i> et <i>jima</i>.
    +AdvTgtSearchTextHelp=Utilisez %% comme caractères génériques. Par exemple, pour rechercher tous les éléments tels que <b> jean, joe, jim </b>, vous pouvez saisir <b>j%%</b>, vous pouvez également utiliser ; comme séparateur de valeur et utiliser ! pour exclure cette valeur. Par exemple, <b> jean; joe; jim%%;! jimo;!jima%</b> ciblera tous les jean, joe, commence par jim mais pas jimo et pas tout ce qui commence par jima.
     AdvTgtSearchIntHelp=Utiliser un intervalle pour sélectionner un entier ou décimal
     AdvTgtMinVal=Valeur minimum
     AdvTgtMaxVal=Valeur maximum
    @@ -166,4 +166,4 @@ InGoingEmailSetup=Configuration email entrant
     OutGoingEmailSetupForEmailing=Configuration des e-mail sortant (pour les e-mails de masse)
     DefaultOutgoingEmailSetup=Configuration des emails sortant
     Information=Information
    -ContactsWithThirdpartyFilter=Contacts avec filtre client
    +ContactsWithThirdpartyFilter=Contacts with third party filter
    diff --git a/htdocs/langs/fr_FR/main.lang b/htdocs/langs/fr_FR/main.lang
    index b68102ef90d..d98af2bdd95 100644
    --- a/htdocs/langs/fr_FR/main.lang
    +++ b/htdocs/langs/fr_FR/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Échec de l'envoi de l'email (émetteur=%s, destinataire=%
     ErrorFileNotUploaded=Le fichier n'a pas été transféré. Vérifiez que sa taille ne dépasse pas le maxium autorisé, que l'espace disque est disponible et qu'un fichier du même nom n'existe pas déjà.
     ErrorInternalErrorDetected=Erreur détectée
     ErrorWrongHostParameter=Mauvais paramètre Serveur
    -ErrorYourCountryIsNotDefined=Votre pays n'est pas défini. Corriger en allant dans Accueil-Configuration-Société/Institution-Editer.
    -ErrorRecordIsUsedByChild=Impossible de supprimer cet enregistrement. Ce dernier est utilisé en tant que père par au moins un enregistrement fils.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Valeur incorrecte
     ErrorWrongValueForParameterX=Valeur incorrecte pour le paramètre %s
     ErrorNoRequestInError=Aucune requête en erreur
    -ErrorServiceUnavailableTryLater=Service non disponible actuellement. Réessayer plus tard.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Doublon dans un champ unique
    -ErrorSomeErrorWereFoundRollbackIsDone=Des erreurs ont été trouvées. On rollback les modifications.
    -ErrorConfigParameterNotDefined=Le paramètre <b>%s</b> n'est pas défini dans le fichier de configuration Dolibarr <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Impossible de trouver l'utilisateur <b>%s</b> dans la base Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Erreur, aucun taux tva défini pour le pays '%s'.
     ErrorNoSocialContributionForSellerCountry=Erreur, pas de types de charges sociales/fiscales définies pour le pays '%s'.
     ErrorFailedToSaveFile=Erreur, l'enregistrement du fichier a échoué.
     ErrorCannotAddThisParentWarehouse=Vous essayez d'ajouter un entrepôt parent qui est déjà un enfant de l'entrepôt courant
    -MaxNbOfRecordPerPage=Nombre maximal d'enregistrement par page
    +MaxNbOfRecordPerPage=Nombre max d'enregistrement par page
     NotAuthorized=Vous n'êtes pas autorisé pour cette action.
     SetDate=Définir date
     SelectDate=Sélectionnez une date
    @@ -78,10 +78,10 @@ FileRenamed=Le fichier a été renommé avec succès
     FileGenerated=Le fichier a été généré avec succès
     FileSaved=Fichier enregistré avec succès
     FileUploaded=Le fichier a été transféré avec succès
    -FileTransferComplete=Fichier(s) correctement envoyé(s)
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=Fichier(s) supprimé(s) avec succès
     FileWasNotUploaded=Un fichier a été sélectionné pour attachement mais n'a pas encore été uploadé. Cliquez sur "Joindre ce fichier" pour cela.
    -NbOfEntries=Nb d'entrées
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Consulter l'aide (nécessite un accès internet)
     GoToHelpPage=Consulter l'aide
     RecordSaved=Enregistrement sauvegardé
    @@ -94,7 +94,7 @@ Undefined=Non défini
     PasswordForgotten=Mot de passe oublié ?
     NoAccount=Pas de compte ?
     SeeAbove=Voir ci-dessus
    -HomeArea=Espace accueil
    +HomeArea=Accueil
     LastConnexion=Dernière connexion
     PreviousConnexion=Connexion précédente
     PreviousValue=Valeur précédente
    @@ -142,6 +142,7 @@ Closed=Clôturé
     Closed2=Fermé
     NotClosed=Non fermé
     Enabled=Actif
    +Enable=Activer
     Deprecated=Obsolète
     Disable=Désactiver
     Disabled=Désactivé
    @@ -153,7 +154,7 @@ Update=Modifier
     Close=Clôturer
     CloseBox=Supprimer le widget du tableau de bord
     Confirm=Confirmer
    -ConfirmSendCardByMail=Voulez vous envoyer le contenu de cette fiche par email à l'adresse <b>%s</b> ?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Supprimer
     Remove=Enlever
     Resiliate=Résilier
    @@ -327,7 +328,7 @@ Copy=Copier
     Paste=Coller
     Default=Défaut
     DefaultValue=Valeur par défaut
    -DefaultValues=Valeurs/Filtres/Tri par défaut
    +DefaultValues=Default values/filters/sorting
     Price=Prix
     PriceCurrency=Prix ​​(devise)
     UnitPrice=Prix unitaire
    @@ -347,7 +348,7 @@ AmountTTCShort=Montant TTC
     AmountHT=Montant HT
     AmountTTC=Montant TTC
     AmountVAT=Montant TVA
    -MulticurrencyAlreadyPaid=Déjà payé (devise d'origine)
    +MulticurrencyAlreadyPaid=Déjà payé, devise d'origine
     MulticurrencyRemainderToPay=Reste à payer (devise d'origine)
     MulticurrencyPaymentAmount=Montant du règlement (devise d'origine)
     MulticurrencyAmountHT=Montant HT, devise d'origine
    @@ -428,7 +429,7 @@ ActionNotApplicable=Non applicable
     ActionRunningNotStarted=A réaliser
     ActionRunningShort=En cours
     ActionDoneShort=Terminé
    -ActionUncomplete=Incomplets
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Les %s derniers événements liés
     CompanyFoundation=Société/Organisation
     Accountant=Comptable
    @@ -454,7 +455,7 @@ Duration=Durée
     TotalDuration=Durée totale
     Summary=Résumé
     DolibarrStateBoard=Statistiques de la base
    -DolibarrWorkBoard=Tableau de bord des éléments ouverts
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=Aucun élément ouvert à traiter
     Available=Disponible
     NotYetAvailable=Pas encore disponible
    @@ -468,7 +469,7 @@ and=et
     or=ou
     Other=Autre
     Others=Autres
    -OtherInformations=Autres informations
    +OtherInformations=Autre information
     Quantity=Quantité
     Qty=Qté
     ChangedBy=Modifié par
    @@ -530,18 +531,6 @@ September=septembre
     October=octobre
     November=novembre
     December=décembre
    -JanuaryMin=Jan
    -FebruaryMin=Fév
    -MarchMin=Mars
    -AprilMin=Avr
    -MayMin=Mai
    -JuneMin=Juin
    -JulyMin=Juil
    -AugustMin=Août
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Déc
     Month01=Janvier
     Month02=Février
     Month03=Mars
    @@ -646,6 +635,8 @@ SendMail=Envoyer email
     EMail=Email
     NoEMail=Pas d'email
     Email=Email
    +AlreadyRead=Déjà lu
    +NotRead=Non lu
     NoMobilePhone=Pas de téléphone portable
     Owner=Propriétaire
     FollowingConstantsWillBeSubstituted=Les constantes suivantes seront substituées par leur valeur correspondante.
    @@ -703,7 +694,7 @@ DateOfSignature=Date de signature
     HidePassword=Afficher commande avec mot de passe masqué
     UnHidePassword=Afficher commande réelle avec mot de passe en clair
     Root=Racine
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Ajout nouvelle ligne
    @@ -716,15 +707,15 @@ Merge=Fusionner
     DocumentModelStandardPDF=Modèle PDF standard
     PrintContentArea=Afficher page d'impression de la zone centrale
     MenuManager=Gestionnaire de menu
    -WarningYouAreInMaintenanceMode=Attention, vous êtes en mode maintenance, aussi seul l'utilisateur identifié par <b>%s</b> est autorisé à utiliser l'application en ce moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Erreur système
     CoreErrorMessage=Désolé, une erreur s'est produite. Contacter votre administrateur système pour vérifier les logs ou désactiver l'option $dolibarr_main_prod=1 pour obtenir plus d'information.
     CreditCard=Carte de crédit
     ValidatePayment=Valider ce règlement
     CreditOrDebitCard=Carte de crédit ou débit
     FieldsWithAreMandatory=Les champs marqués par un <b>%s</b> sont obligatoires
    -FieldsWithIsForPublic=Les champs marqués par <b>%s</b> seront affichés sur la liste publique des membres. Si vous ne le souhaitez pas, décochez la case "public".
    -AccordingToGeoIPDatabase=(obtenu par conversion GeoIP)
    +FieldsWithIsForPublic=Les champs marqués par <b>%s</b> seront affichés sur la liste publique des adhérents. Si vous ne le souhaitez pas, décochez la case "public".
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Ligne
     NotSupported=Non pris en charge
     RequiredField=Champ obligatoire
    @@ -732,6 +723,8 @@ Result=Résultat
     ToTest=Tester
     ValidateBefore=La fiche doit être validée pour pouvoir utiliser cette fonction
     Visibility=Visibilité
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privé
     Hidden=Caché
     Resources=Ressources
    @@ -750,6 +743,7 @@ LinkTo=Lier à
     LinkToProposal=Lier à une proposition commerciale
     LinkToOrder=Lier à une commande
     LinkToInvoice=Lier à une facture
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Lier à une commande fournisseur
     LinkToSupplierProposal=Lier à une proposition commerciale fournisseur
     LinkToSupplierInvoice=Lier à une facture fournisseur
    @@ -758,6 +752,7 @@ LinkToIntervention=Lier à une intervention
     CreateDraft=Créer brouillon
     SetToDraft=Retour en brouillon
     ClickToEdit=Cliquer ici pour éditer
    +ClickToRefresh=Cliquez pour rafraîchir
     EditWithEditor=Editer avec CKEditor
     EditWithTextEditor=Éditer avec l'éditeur de texte
     EditHTMLSource=Éditer la source HTML
    @@ -802,7 +797,7 @@ PrintFile=Imprimer fichier %s
     ShowTransaction=Afficher l'écriture sur le compte bancaire
     ShowIntervention=Afficher intervention
     ShowContract=Afficher contrat
    -GoIntoSetupToChangeLogo=Allez dans Accueil - Configuration - Société/institution pour changer le  logo ou aller dans Accueil - Configuration - Affichage pour le cacher.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Refuser
     Denied=Refusé
     ListOf=Liste de %s
    @@ -818,12 +813,12 @@ Sincerely=Sincèrement
     DeleteLine=Effacer ligne
     ConfirmDeleteLine=Êtes-vous sûr de vouloir supprimer cette ligne ?
     NoPDFAvailableForDocGenAmongChecked=Aucun document PDF n'était disponible pour la génération de document parmi les enregistrements vérifiés
    -TooManyRecordForMassAction=Trop d'enregistrements sélectionnés pour l'action de masse. L'action est restreinte à une liste de %s enregistrements
    +TooManyRecordForMassAction=Trop d'enregistrements sélectionnés pour l'action de masse. De telles actions sont restreintes à une liste de %s enregistrements maximum.
     NoRecordSelected=Aucu enregistrement sélectionné
     MassFilesArea=Zone des fichiers générés en masse
     ShowTempMassFilesArea=Afficher la zone des fichiers générés en masse
    -ConfirmMassDeletion=Confirmation de suppression en masse
    -ConfirmMassDeletionQuestion=Êtes-vous sur de vouloir supprimer la(les) %s valeur(s) sélectionnée(s) ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Objets liés
     ClassifyBilled=Classer facturé
     ClassifyUnbilled=Classer non facturé
    @@ -841,7 +836,7 @@ Calendar=Calendrier
     GroupBy=Grouper par...
     ViewFlatList=Voir vue liste
     RemoveString=Supprimer la chaine '%s'
    -SomeTranslationAreUncomplete=Certains languages pourraient n'être que partiellement traduites, ou contenir des erreurs. Si vous en détectez, vous pouvez les corriger en vous enregistrant sur <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Lien de téléchargement direct (public/externe)
     DirectDownloadInternalLink=Lien de téléchargement direct (requiert d'être logué et autorisé)
     Download=Téléchargement
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR et banque
     AutomaticallyCalculated=Calculé automatiquement
     TitleSetToDraft=Retour à l'état de brouillon
    -ConfirmSetToDraft=Etes vous sûr de vouloir revenir à l'état Brouillon ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Id import
     Events=Événements
     EMailTemplates=Modèles des courriels
    -FileNotShared=Fichier non partagé en public
    +FileNotShared=File not shared to external public
     Project=Projet
     Projects=Projets
    +LeadOrProject=Opportunités | Projet
    +LeadsOrProjects=Opportunités | Projets
    +Lead=Opportunité
    +Leads=Opportunités
    +ListOpenLeads=Liste des opportunités ouvertes
    +ListOpenProjects=Liste des projets ouverts
    +NewLeadOrProject=Nouvelle opportunité ou projet
     Rights=Permissions
     LineNb=No ligne
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Lundi
     Tuesday=Mardi
    @@ -935,7 +939,7 @@ CommentAdded=Commentaire ajouté
     CommentDeleted=Commentaire supprimé
     Everybody=Tout le monde
     PayedBy=Payé par
    -PayedTo=Payé à
    +PayedTo=Paid to
     Monthly=Mensuel
     Quarterly=Trimestriel
     Annual=Annuel
    @@ -945,6 +949,7 @@ LocalAndRemote=Local et distant
     KeyboardShortcut=Raccourci clavier
     AssignedTo=Assigné à
     Deletedraft=Supprimer brouillon
    -ConfirmMassDraftDeletion=Confirmation de suppression de brouillon en bloc
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=Fichier partagé via un lien
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=Vous travaillez actuellement dans le mode "bac à sable" de %s
    diff --git a/htdocs/langs/fr_FR/modulebuilder.lang b/htdocs/langs/fr_FR/modulebuilder.lang
    index 3d520889aa7..fd4e66e5ff3 100644
    --- a/htdocs/langs/fr_FR/modulebuilder.lang
    +++ b/htdocs/langs/fr_FR/modulebuilder.lang
    @@ -1,5 +1,5 @@
     # Dolibarr language file - Source file is en_US - loan
    -ModuleBuilderDesc=Cet outil est réservé aux utilisateurs avancés ou développeurs. Il donne accès aux outil de création ou d'édition de modules additionnels (Cliquez <a href="%s" target="_blank">ici</a> pour plus d'information).
    +ModuleBuilderDesc=This tool must be used by only by experienced users or developers. It gives you utilities to build or edit your own module.<br>Documentation for alternative <a href="%s" target="_blank">manual development is here</a>.
     EnterNameOfModuleDesc=Saisissez le nom du module/application à créer, sans espaces. Utilisez les majuscules pour identifier les mots (par exemple : MonModule, BoutiqueECommerce,...)
     EnterNameOfObjectDesc=Entrez le nom de l'objet à créer sans espaces. Utilisez les majuscules pour séparer des mots (par exemple: MyObject, Student, Teacher ...). Le fichier de classe CRUD, mais aussi le fichier API, les pages à afficher / ajouter / éditer / supprimer des objets et des fichiers SQL seront générés.
     ModuleBuilderDesc2=Chemin ou les modules sont générés/modifiés (premier répertoire alternatif défini dans %s):<strong>%s</strong>
    @@ -13,7 +13,7 @@ ModuleInitialized=Module initialisé
     FilesForObjectInitialized=Fichiers pour les nouvel objet '%s' initialisés
     FilesForObjectUpdated=Les fichiers pour l'objet '%s' ont été mis à jour ( fichiers .sql et .class.php )
     ModuleBuilderDescdescription=Entrez ici toutes les informations générales qui décrivent votre module.
    -ModuleBuilderDescspecifications=Vous pouvez entrer ici un long texte pour décrire les caractéristiques de votre module qui ne sont pas déjà structuré dans d'autres onglets. Vous avez donc facilement accès à toutes les règles à développer. De plus, ce contenu de texte sera inclus dans la documentation générée (voir dernier onglet). Vous pouvez utiliser le format Markdown, mais il est recommandé d'utiliser le format Asciidoc (Comparaison entre .md et .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
    +ModuleBuilderDescspecifications=You can enter here a detailed description of the specifications of your module that is not already structured into other tabs. So you have within easy reach all the rules to develop. Also this text content will be included into the generated documentation (see last tab). You can use Markdown format, but it is recommended to use Asciidoc format (comparison between .md and .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown).
     ModuleBuilderDescobjects=Définissez ici les objets que vous souhaitez gérer avec votre module. Une classe CRUD DAO, des fichiers SQL, une page pour lister l'enregistrement des objets, pour créer / modifier / afficher un enregistrement et une API sera générée.
     ModuleBuilderDescmenus=Cet onglet est dédié à la définition des entrées menu fournies par votre module.
     ModuleBuilderDescpermissions=Cet onglet est dédié à la définition des nouvelles permissions dont vous voulez fournir avec votre module.
    @@ -21,12 +21,12 @@ ModuleBuilderDesctriggers=Vue des triggers ajoutés par votre module. Pour inclu
     ModuleBuilderDeschooks=Cet onglet est dédié aux points d'accroche.
     ModuleBuilderDescwidgets=Cet onglet est dédié à la gestion/construction de widgets.
     ModuleBuilderDescbuildpackage=Vous pouvez générer ici un fichier de package "prêt à distribuer" (un fichier .zip normalisé) de votre module et un fichier de documentation "prêt à distribuer". Cliquez simplement sur le bouton pour créer le paquet ou le fichier de documentation.
    -EnterNameOfModuleToDeleteDesc=Vous pouvez supprimer votre module. ATTENTION : tous les fichiers et les données propres au module seront définitivement perdus !
    -EnterNameOfObjectToDeleteDesc=Vous pouvez effacer un objet. ATTENTION : Tous les fichiers reliés à cet objet seront définitivement perdus !
    +EnterNameOfModuleToDeleteDesc=You can delete your module. WARNING: ALL files of module AND structured data and documentation will be deleted!
    +EnterNameOfObjectToDeleteDesc=You can delete an object. WARNING: All files related to object will be deleted!
     DangerZone=Zone de danger
     BuildPackage=Générer package/documentation
     BuildDocumentation=Générez la documentation
    -ModuleIsNotActive=Le module n'est pas encore activé. Aller à %s pour l'activer ou cliquer ici :
    +ModuleIsNotActive=This module is not activated yet. Go to %s to make it live or click here:
     ModuleIsLive=Ce module a été activé. Tout changement sur lui pourrait casser une fonctionnalité actuellement activée.
     DescriptionLong=Description longue
     EditorName=Nom de l'éditeur
    @@ -47,7 +47,7 @@ RegenerateClassAndSql=Effacer et générer à nouveau les fichiers de classe et
     RegenerateMissingFiles=Générer les fichiers manquant
     SpecificationFile=Fichier de description des règles métiers
     LanguageFile=Fichier langue
    -ConfirmDeleteProperty=Êtes-vous sûr de vouloir supprimer la propriété<strong>%s</strong> ? Cela changera le code dans la classe PHP, mais supprimera également la colonne de la définition de table d'objet.
    +ConfirmDeleteProperty=Are you sure you want to delete the property <strong>%s</strong>? This will change code in PHP class but also remove column from table definition of object.
     NotNull=Non NULL
     NotNullDesc=1=Définir le champ en base à NOT NULL. -1=Autoriser les valeurs nulles et forcer la valeur à NULL si vide ('' ou 0).
     SearchAll=Utilisé par la "recherche globale"
    @@ -66,7 +66,7 @@ PageForLib=Fichier pour les librairies PHP
     SqlFileExtraFields=Fichier SQL pour les attributs complémentaires
     SqlFileKey=Fichier Sql pour les clés
     AnObjectAlreadyExistWithThisNameAndDiffCase=Un objet existe déjà avec ce nom dans une casse différente
    -UseAsciiDocFormat=Vous pouvez utiliser le format Markdown, mais il est recommandé d'utiliser le format Asciidoc (Comparaison entre .md et .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
    +UseAsciiDocFormat=You can use Markdown format, but it is recommended to use Asciidoc format (omparison between .md and .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown)
     IsAMeasure=Est une mesure
     DirScanned=Répertoire scanné
     NoTrigger=Pas de trigger
    @@ -78,7 +78,7 @@ SeeExamples=Voir des exemples ici
     EnabledDesc=Condition pour que ce champ soit actif (Exemples: 1 ou $conf->global->MYMODULE_MYOPTION)
     VisibleDesc=Le champ est-il visible ? (Exemples: 0 = Jamais visible, 1 = Visible sur les listes et formulaires de création/mise à jour/visualisation, 2 = Visible uniquement sur la liste, 3 = Visible uniquement sur le formulaire de création/mise à jour/affichage. Utiliser une valeur négative signifie que le champ n'est pas affiché par défaut sur la liste mais peut être sélectionné pour l'affichage)
     IsAMeasureDesc=Peut-on cumuler la valeur du champ pour obtenir un total dans les listes ? (Exemples: 1 ou 0)
    -SearchAllDesc=Le champ doit-il être utilisé pour effectuer une recherche à partir de l'outil de recherche rapide ? (Exemples: 1 ou 0)
    +SearchAllDesc=Is the field used to make a search from the quick search tool? (Examples: 1 or 0)
     SpecDefDesc=Entrez ici toute la documentation que vous souhaitez joindre au module et qui n'a pas encore été définis dans d'autres onglets. Vous pouvez utiliser .md ou, mieux, la syntaxe enrichie .asciidoc.
     LanguageDefDesc=Entrez dans ces fichiers, toutes les clés et la traduction pour chaque fichier de langue.
     MenusDefDesc=Définissez ici les menus fournis par votre module (une fois définis, ils sont visibles dans l'éditeur de menu %s)
    @@ -88,7 +88,7 @@ TriggerDefDesc=Définissez dans le fichier trigger le code que vous souhaitez ex
     SeeIDsInUse=Voir les IDs utilisés dans votre installation
     SeeReservedIDsRangeHere=Voir la plage des ID réservés
     ToolkitForDevelopers=Boîte à outils pour développeurs Dolibarr
    -TryToUseTheModuleBuilder=Si vous avez des connaissances en SQL et PHP, vous pouvez essayer d'utiliser l'assistant de création de module natif. Activez simplement le module et utilisez l'assistant en cliquant sur <span class="fa fa-bug"></span> dans le menu en haut à droite. Attention: Ceci est une fonctionnalité de développeur, une mauvaise utilisation peut casser votre application.
    +TryToUseTheModuleBuilder=If you have knowledge of SQL and PHP, you may use the native module builder wizard.<br>Enable the module <strong>%s</strong> and use the wizard by clicking the <span class="fa fa-bug"></span> on the top right menu.<br>Warning: This is an advanced developer feature, do <b>not</b> experiment on your production site!
     SeeTopRightMenu=Voir<span class="fa fa-bug"></span> à droite de votre barre de menu principal
     AddLanguageFile=Ajouter le fichier de langue
     YouCanUseTranslationKey=Vous pouvez utiliser ici une clé qui est la clé de traduction trouvée dans le fichier de langue (voir l'onglet "Langues")
    @@ -96,6 +96,7 @@ DropTableIfEmpty=(Supprimer la table si vide)
     TableDoesNotExists=La table %s n'existe pas
     TableDropped=La table %s a été supprimée
     InitStructureFromExistingTable=Construire la chaîne du tableau de structure d'une table existante
    -UseAboutPage=Désactiver la page à propos de
    -UseDocFolder=Désactiver le dossier de la documentation
    +UseAboutPage=Disable the about page
    +UseDocFolder=Disable the documentation folder
     UseSpecificReadme=Utiliser un fichier ReadMe spécifique
    +RealPathOfModule=Real path of module
    diff --git a/htdocs/langs/fr_FR/orders.lang b/htdocs/langs/fr_FR/orders.lang
    index ba4ed1d43bf..89a6c7dfebb 100644
    --- a/htdocs/langs/fr_FR/orders.lang
    +++ b/htdocs/langs/fr_FR/orders.lang
    @@ -19,7 +19,7 @@ SuppliersOrdersRunning=Commandes fournisseurs en cours
     CustomerOrder=Commande client
     CustomersOrders=Commandes clients
     CustomersOrdersRunning=Commandes clients en cours
    -CustomersOrdersAndOrdersLines=Commandes clients et ligne de commandes
    +CustomersOrdersAndOrdersLines=Customer orders and order details
     OrdersDeliveredToBill=Commandes clients délivrées à facturer
     OrdersToBill=Commandes clients à délivrer
     OrdersInProcess=Commandes clients en traitement
    @@ -88,7 +88,7 @@ NumberOfOrdersByMonth=Nombre de commandes par mois
     AmountOfOrdersByMonthHT=Montant total de commandes par mois (HT)
     ListOfOrders=Liste des commandes
     CloseOrder=Clôturer commande
    -ConfirmCloseOrder=Êtes-vous sûr de vouloir classer cette commande à Délivrée ? Une fois une commande délivrée, elle peut aussi être passée à facturée.
    +ConfirmCloseOrder=Are you sure you want to set this order to delivered? Once an order is delivered, it can be set to billed.
     ConfirmDeleteOrder=Êtes-vous sûr de vouloir effacer cette commande ?
     ConfirmValidateOrder=Êtes-vous sûr de vouloir valider cette commande sous la référence <b>%s</b> ?
     ConfirmUnvalidateOrder=Êtes-vous sûr de vouloir restaurer la commande <b>%s</b> au statut brouillon ?
    @@ -141,6 +141,7 @@ OrderByWWW=En ligne
     OrderByPhone=Téléphone
     # Documents models
     PDFEinsteinDescription=Modèle de commande complet (logo…)
    +PDFEratostheneDescription=Modèle de commande complet (logo…)
     PDFEdisonDescription=Modèle de commande simple
     PDFProformaDescription=Modèle de facture proforma complet (logo…)
     CreateInvoiceForThisCustomer=Facturer commandes
    diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang
    index 78076213a15..5186a5313fd 100644
    --- a/htdocs/langs/fr_FR/other.lang
    +++ b/htdocs/langs/fr_FR/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Code de sécurité
     NumberingShort=N°
     Tools=Outils
     TMenuTools=Outils
    -ToolsDesc=Cet espace regroupe divers outils non accessibles par les autres entrées du menu. <br><br>La liste de ces outils est accessible depuis le menu sur le côté.. 
    +ToolsDesc=Cet espace regroupe divers outils non accessibles par les autres entrées du menu. <br>Tous ces outils sont accessibles depuis le menu sur le côté.. 
     Birthday=Anniversaire
     BirthdayDate=Date anniversaire
     DateToBirth=Date de naissance
    @@ -23,7 +23,7 @@ MessageForm=Message sur l'écran de paiement en ligne
     MessageOK=Message sur page de retour de paiement validé
     MessageKO=Message sur page de retour de paiement annulé
     ContentOfDirectoryIsNotEmpty=Le contenu de ce répertoire n'est pas vide.
    -DeleteAlsoContentRecursively=Cochez pour supprimer tout le contenu de manière récursive
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Année de la date de facturation
     PreviousYearOfInvoice=Année précédente de la date de facturation
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Année suivante de la date de facturation
     DateNextInvoiceBeforeGen=Date de la prochaine génération (avant génération)
     DateNextInvoiceAfterGen=Date de la prochaine facture (après génération)
     
    -Notify_FICHINTER_ADD_CONTACT=Contact ajouté à l'intervention
    -Notify_FICHINTER_VALIDATE=Validation fiche intervention
    -Notify_FICHINTER_SENTBYMAIL=Envoi fiche d'intervention par email
     Notify_ORDER_VALIDATE=Validation commande client
     Notify_ORDER_SENTBYMAIL=Envoi commande client par email
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Envoi commande fournisseur par email
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Commande fournisseur enregistrée
     Notify_ORDER_SUPPLIER_APPROVE=Commande fournisseur approuvée
     Notify_ORDER_SUPPLIER_REFUSE=Commande fournisseur refusée
     Notify_PROPAL_VALIDATE=Validation proposition commerciale client
    -Notify_PROPAL_CLOSE_SIGNED=Proposition commercial fermée signée
    -Notify_PROPAL_CLOSE_REFUSED=Proposition commerciale fermée refusée
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Envoi proposition commerciale par email
     Notify_WITHDRAW_TRANSMIT=Transmission prélèvement
     Notify_WITHDRAW_CREDIT=Crédit prélèvement
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Tiers créé
     Notify_COMPANY_SENTBYMAIL=Email envoyé depuis la fiche Tiers
     Notify_BILL_VALIDATE=Facture client validée
     Notify_BILL_UNVALIDATE=Dévalidation facture client
    -Notify_BILL_PAYED=Facture client payée
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Annulation facture client
     Notify_BILL_SENTBYMAIL=Envoi facture client par email
     Notify_BILL_SUPPLIER_VALIDATE=Validation facture fournisseur
    -Notify_BILL_SUPPLIER_PAYED=Paiment facture fournisseur
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Envoi facture fournisseur par email
     Notify_BILL_SUPPLIER_CANCELED=Facture fournisseur annulée
     Notify_CONTRACT_VALIDATE=Validation contrat
     Notify_FICHEINTER_VALIDATE=Validation fiche d'intervention
    +Notify_FICHINTER_ADD_CONTACT=Contact ajouté à l'intervention
    +Notify_FICHINTER_SENTBYMAIL=Envoi fiche d'intervention par email
     Notify_SHIPPING_VALIDATE=Validation expédition
     Notify_SHIPPING_SENTBYMAIL=Envoi expédition par email
     Notify_MEMBER_VALIDATE=Validation adhérent
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Création de projet
     Notify_TASK_CREATE=Tâche créée
     Notify_TASK_MODIFY=Tâche modifiée
     Notify_TASK_DELETE=Tâche supprimée
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Voir la configuration du module %s
     NbOfAttachedFiles=Nombre de fichiers/documents liés
     TotalSizeOfAttachedFiles=Taille totale fichiers/documents liés
     MaxSize=Taille maximum
     AttachANewFile=Ajouter un nouveau fichier/document
     LinkedObject=Objet lié
    -NbOfActiveNotifications=Nombre de notifications (nb de destinataires emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__,\nCeci est un mail de test envoyé à __EMAIL__.\nLes deux lignes sont séparées par un saut de ligne.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nCeci est un message de <b>test</b> (le mot test doit être en gras).<br>Les 2 lignes sont séparées par un retour à la ligne.<br><br>__SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nVous trouverez ci-joint la facture __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nNous souhaitons vous prévenir que la facture __REF__ ne semble pas avoir été payée. Revoici donc la facture en pièce jointe, à titre de rappel.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nVeuillez trouver, ci-joint, la proposition commerciale __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nVeuillez trouver, ci-joint, une demande de prix avec la référence __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nVeuillez trouver, ci-joint, la commande __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nVeuillez trouver, ci-joint, notre commande __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nVeuillez trouver, ci-joint, la facture __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nVeuillez trouver, ci-joint, le bon d'expédition __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nVeuillez trouver, ci-joint, la fiche intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=Vous pouvez cliquer sur le lien ci-dessous pour effectuer votre paiement si ce n'est déjà fait.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Vous devez activer ou installer la librairie GD avec votre P
     ProfIdShortDesc=<b>Id prof. %s</b> est une information qui dépend du pays du tiers.<br>Par exemple, pour le pays <b>%s</b>, il s'agit du code <b>%s</b>.
     DolibarrDemo=Démonstration de Dolibarr ERP/CRM
     StatsByNumberOfUnits=Statistiques de quantités de produits/services
    -StatsByNumberOfEntities=Statistiques en nombre d'entités référantes (nb de factures, ou commandes...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Nombre de propositions commerciales
     NumberOfCustomerOrders=Nombre de commandes clients
     NumberOfCustomerInvoices=Nombre de factures clients
    @@ -188,7 +191,7 @@ NumberOfUnitsSupplierInvoices=Quantités présentes dans les factures fournisseu
     EMailTextInterventionAddedContact=Une nouvelle intervention %s vous a été assignée
     EMailTextInterventionValidated=La fiche intervention %s vous concernant a été validée.
     EMailTextInvoiceValidated=La facture %s vous concernant a été validée.
    -EMailTextInvoicePayed=La facture %s a été payée.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=La proposition commerciale %s vous concernant a été validée.
     EMailTextProposalClosedSigned=La proposition %s a été clôturée signée.
     EMailTextOrderValidated=La commande %s vous concernant a été validée.
    @@ -198,6 +201,10 @@ EMailTextOrderApprovedBy=La commande %s a été approuvée par %s.
     EMailTextOrderRefused=La commande %s a été refusée.
     EMailTextOrderRefusedBy=La commande %s a été refusée par %s.
     EMailTextExpeditionValidated=L'expédition %s a été validée.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Lot d'importation (Import key)
     DolibarrNotification=Notification automatique
     ResizeDesc=Entrer la nouvelle largeur <b>OU</b> la nouvelle hauteur. Le ratio d'aspect est conservé lors du redimensionnement…
    @@ -236,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Votre mot de passe doit avoir au moins <strong
     YourPasswordHasBeenReset=Votre mot de passe a été réinitialisé avec succès
     ApplicantIpAddress=Adresse IP du demandeur
     SMSSentTo=SMS envoyé à %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Tiers créé par le collecteur de courrier électronique à partir de l'identifiant de courrier électronique ID %s
    +ContactCreatedByEmailCollector=Contact/adresse créé par le collecteur de courrier électronique à partir de l'identifiant de courrier électronique ID %s
    +ProjectCreatedByEmailCollector=Projet créé par le collecteur de courrier électronique à partir du courrier électronique ID %s
     
     ##### Export #####
     ExportsArea=Espace exports
    diff --git a/htdocs/langs/fr_FR/paybox.lang b/htdocs/langs/fr_FR/paybox.lang
    index d2b313cc81c..44492c64431 100644
    --- a/htdocs/langs/fr_FR/paybox.lang
    +++ b/htdocs/langs/fr_FR/paybox.lang
    @@ -21,7 +21,7 @@ ToOfferALinkForOnlinePaymentOnContractLine=URL offrant une interface de paiement
     ToOfferALinkForOnlinePaymentOnFreeAmount=URL offrant une interface de paiement en ligne %s pour un montant libre
     ToOfferALinkForOnlinePaymentOnMemberSubscription=URL offrant une interface de paiement en ligne %s sur la base d'une cotisation d'adhérent
     YouCanAddTagOnUrl=Vous pouvez de plus ajouter le paramètre URL <b>&tag=<i>value</i></b> à n'importe quelles de ces URL (obligatoire pour le paiement libre uniquement) pour ajouter votre propre "code commentaire" du paiement.
    -SetupPayBoxToHavePaymentCreatedAutomatically=Configurez votre URL PayBox à <b>%s</b> pour avoir le paiement créé automatiquement si validé.
    +SetupPayBoxToHavePaymentCreatedAutomatically=Configurez votre URL PayBox à <b>%s</b> pour avoir le paiement créé automatiquement si validé par Paybox.
     YourPaymentHasBeenRecorded=Cette page confirme que votre paiement a bien été enregistré. Merci.
     YourPaymentHasNotBeenRecorded=Votre paiement n'a PAS été enregistré et la transaction a été annulée. Merci.
     AccountParameter=Paramètres du compte
    diff --git a/htdocs/langs/fr_FR/paypal.lang b/htdocs/langs/fr_FR/paypal.lang
    index 7177b1684fe..2e342fe9e5a 100644
    --- a/htdocs/langs/fr_FR/paypal.lang
    +++ b/htdocs/langs/fr_FR/paypal.lang
    @@ -1,6 +1,6 @@
     # Dolibarr language file - Source file is en_US - paypal
     PaypalSetup=Configuration module PayPal
    -PaypalDesc=Ce module permet d'offrir une page de paiement via le prestataire <a href="http://www.paypal.com" target="_blank">Paypal</a> pour réaliser un paiement quelconque ou un paiement par rapport à un objet Dolibarr (facture, commande…)
    +PaypalDesc=Ce module permet d'offrir aux clients une page de paiement via le prestataire <a href="http://www.paypal.com" target="_blank">Paypal</a>. Ceci peut être utiliser pour réaliser un paiement quelconque ou un paiement par rapport à un objet Dolibarr particulier (facture, commande…)
     PaypalOrCBDoPayment=Payer avec Paypal (Carte de crédit ou Paypal)
     PaypalDoPayment=Payer par PayPal
     PAYPAL_API_SANDBOX=Mode test/bac à sable (sandbox)
    @@ -11,10 +11,9 @@ PAYPAL_SSLVERSION=Curl Version SSL
     PAYPAL_API_INTEGRAL_OR_PAYPALONLY=Proposer le paiement intégral (Carte+Paypal) ou Paypal seul
     PaypalModeIntegral=Intégral
     PaypalModeOnlyPaypal=PayPal seul
    -ONLINE_PAYMENT_CSS_URL=URL optionnelle de la feuille de style CSS sur la page de paiement en ligne
    +ONLINE_PAYMENT_CSS_URL=Optional URL of CSS stylesheet on online payment page
     ThisIsTransactionId=Voici l'identifiant de la transaction: <b>%s</b>
     PAYPAL_ADD_PAYMENT_URL=Ajouter l'URL de paiement Paypal lors de l'envoi d'un document par email
    -YouAreCurrentlyInSandboxMode=Vous travaillez actuellement dans le mode "bac à sable" de %s
     NewOnlinePaymentReceived=Nouveau paiement en ligne reçu
     NewOnlinePaymentFailed=Nouvelle tentative de paiement en ligne échouée
     ONLINE_PAYMENT_SENDEMAIL=Email à prévenir en cas de paiement (succès ou non)
    @@ -28,7 +27,8 @@ ShortErrorMessage=Message d'erreur court
     ErrorCode=Code erreur
     ErrorSeverityCode=Code d'erreur sévérité
     OnlinePaymentSystem=Système de paiement en ligne
    -PaypalLiveEnabled=Paypal live activé (sinon mode test/bac à sable)
    -PaypalImportPayment=Importer paiements Paypal
    +PaypalLiveEnabled=PayPal live enabled (otherwise test/sandbox mode)
    +PaypalImportPayment=Import PayPal payments
     PostActionAfterPayment=Actions complémentaires après paiement
     ARollbackWasPerformedOnPostActions=Une annulation a été effectuée sur toutes les actions Post paiement. Vous devez compléter les actions complémentaires manuellement si elles sont nécessaires.
    +ValidationOfPaymentFailed=Validation of payment has failed
    diff --git a/htdocs/langs/fr_FR/products.lang b/htdocs/langs/fr_FR/products.lang
    index 362f065043a..eacad26cc39 100644
    --- a/htdocs/langs/fr_FR/products.lang
    +++ b/htdocs/langs/fr_FR/products.lang
    @@ -17,12 +17,12 @@ Reference=Référence
     NewProduct=Nouveau produit
     NewService=Nouveau service
     ProductVatMassChange=Changement TVA en masse
    -ProductVatMassChangeDesc=Cette page permet de modifier les taux de TVA définis sur les produits ou services d'une valeur vers une autre. Attention, la modification est réalisée en masse sur toute la base de donnée.
    +ProductVatMassChangeDesc=This page can be used to modify a VAT rate defined on products or services from one value to another. Warning, this change is global/done on all database.
     MassBarcodeInit=Initialisation codes-barre
     MassBarcodeInitDesc=Cette page peut être utilisée pour initialiser un code-barre sur des objets qui ne disposent pas de code-barre défini. Vérifiez avant que l'installation du module code-barres est complète.
     ProductAccountancyBuyCode=Code comptable (achat)
     ProductAccountancySellCode=Code comptable (vente)
    -ProductAccountancySellIntraCode=Code comptable (vente intra-communautaire)
    +ProductAccountancySellIntraCode=Accounting code (sale intra-Community)
     ProductAccountancySellExportCode=Code comptable (vente à l'export)
     ProductOrService=Produit ou Service
     ProductsAndServices=Produits et Services
    @@ -97,8 +97,8 @@ NoteNotVisibleOnBill=Note (non visible sur les factures, propals...)
     ServiceLimitedDuration=Si produit de type service à durée limitée :
     MultiPricesAbility=Plusieurs niveaux de prix par produit/service (chaque client est dans un et un seul niveau)
     MultiPricesNumPrices=Nombre de prix
    -AssociatedProductsAbility=Prise en charge des produits virtuels
    -AssociatedProducts=Produit virtuel
    +AssociatedProductsAbility=Activate virtual products (kits)
    +AssociatedProducts=Virtual products
     AssociatedProductsNumber=Nbre de sous-produits constituant ce produit virtuel
     ParentProductsNumber=Nbre de produits virtuels/packages parent
     ParentProducts=Produits parents
    @@ -134,7 +134,7 @@ PredefinedServicesToSell=Services prédéfinis en vente
     PredefinedProductsAndServicesToSell=Produits/Services prédéfinis en vente
     PredefinedProductsToPurchase=Produits prédéfinis à acheter
     PredefinedServicesToPurchase=Services prédéfinis à acheter
    -PredefinedProductsAndServicesToPurchase=Produits/services prédéfinis à acheter
    +PredefinedProductsAndServicesToPurchase=Predefined products/services to purchase
     NotPredefinedProducts=Pas de produit/service prédéfini
     GenerateThumb=Générer la vignette
     ServiceNb=Service no %s
    @@ -145,7 +145,7 @@ Finished=Produit manufacturé
     RowMaterial=Matière première
     CloneProduct=Cloner produit/service
     ConfirmCloneProduct=Êtes-vous sûr de vouloir cloner le produit ou service <b>%s</b> ?
    -CloneContentProduct=Cloner les informations générales du produit/service
    +CloneContentProduct=Clone all main information of product/service
     ClonePricesProduct=Cloner les prix
     CloneCompositionProduct=Cloner le produits packagés
     CloneCombinationsProduct=Cloner les variantes
    @@ -233,7 +233,7 @@ BarCodeDataForThirdparty=Information de code barre du produit %s :
     ResetBarcodeForAllRecords=Définir la valeur de code-barres pour tous les enregistrements (cela réinitialiser également les valeurs de code-barres déjà défini par des nouvelles)
     PriceByCustomer=Prix différents pour chaque client
     PriceCatalogue=Un seul prix de vente par produit/service
    -PricingRule=Règles pour les prix clients
    +PricingRule=Rules for selling prices
     AddCustomerPrice=Ajouter prix par client
     ForceUpdateChildPriceSoc=Définir le même prix sur les filiales des clients
     PriceByCustomerLog=Historique des prix clients précédents
    @@ -293,7 +293,8 @@ ProductSheet=Fiche produit
     ServiceSheet=Fiche service
     PossibleValues=Valeurs possibles
     GoOnMenuToCreateVairants=Allez sur le menu %s - %s pour ajouter les attributs de variantes (comme les couleurs, tailles, ...)
    -
    +UseProductFournDesc=Use supplier descriptions of products in supplier documents
    +ProductSupplierDescription=Supplier description for the product
     #Attributes
     VariantAttributes=Attributs de variante
     ProductAttributes=Attributs de variantes pour les produits
    @@ -329,6 +330,8 @@ NbOfDifferentValues=Nb de valeurs différentes
     NbProducts=Nb de produits
     ParentProduct=Produit parent
     HideChildProducts=Cacher les variantes de produits
    +ShowChildProducts=Show variant products
    +NoEditVariants=Go to Parent product card and edit variants price impact in the variants tab
     ConfirmCloneProductCombinations=Êtes-vous sur de vouloir copier les variantes du produits vers l'autre  produit parent avec la référence donnée ?
     CloneDestinationReference=Référence du produit cible
     ErrorCopyProductCombinations=Une erreur s'est produite lors de la copie des variantes de produit
    diff --git a/htdocs/langs/fr_FR/projects.lang b/htdocs/langs/fr_FR/projects.lang
    index de8da715e19..c7819e30c83 100644
    --- a/htdocs/langs/fr_FR/projects.lang
    +++ b/htdocs/langs/fr_FR/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Êtes-vous sûr de vouloir supprimer ce projet ?
     ConfirmDeleteATask=Êtes-vous sûr de vouloir supprimer cette tâche ?
     OpenedProjects=Projets ouverts
     OpenedTasks=Tâches ouvertes
    -OpportunitiesStatusForOpenedProjects=Montant des opportunités des projets ouverts par statut
    -OpportunitiesStatusForProjects=Montant des opportunités des projets par statut
    +OpportunitiesStatusForOpenedProjects=Montant des opportunités ouvertes par statut
    +OpportunitiesStatusForProjects=Montant des opportunités par statut
     ShowProject=Afficher projet
     ShowTask=Afficher tâche
     SetProject=Définir projet
     NoProject=Aucun projet défini ou responsable
    -NbOfProjects=Nombre de projets
    -NbOfTasks=Nb de tâches
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Temps consommé
     TimeSpentByYou=Temps consommé par vous
     TimeSpentByUser=Temps consommé par utilisateur
    @@ -86,11 +86,12 @@ ListPredefinedInvoicesAssociatedProject=Liste des modèles de facture client ass
     ListSupplierOrdersAssociatedProject=Liste des commandes fournisseurs associées au projet
     ListSupplierInvoicesAssociatedProject=Liste des factures fournisseurs associées au projet
     ListContractAssociatedProject=Liste des contrats associés au projet
    -ListShippingAssociatedProject=Liste des expéditions associées avec le projet
    +ListShippingAssociatedProject=Liste des expéditions associées au projet
     ListFichinterAssociatedProject=Liste des interventions associées au projet
    -ListExpenseReportsAssociatedProject=Liste des notes de frais associées avec ce projet
    +ListExpenseReportsAssociatedProject=Liste des notes de frais associées au projet
     ListDonationsAssociatedProject=Liste des dons associés au projet
    -ListVariousPaymentsAssociatedProject=Liste des frais divers liés au projet
    +ListVariousPaymentsAssociatedProject=Liste des paiements divers liés au projet
    +ListSalariesAssociatedProject=Liste des paiements de salaires liés au projet
     ListActionsAssociatedProject=Liste des événements associés au projet
     ListTaskTimeUserProject=Liste du temps consommé sur les tâches d'un projet
     ListTaskTimeForTask=Liste du temps consommé sur les tâches
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributeur
     SelectElement=Séléctionnez l'élément
     AddElement=Associer l'élément
     # Documents models
    -DocumentModelBeluga=Modèle de document de rapport pour l'aperçu projet
    -DocumentModelBaleine=Modèles de document de rapport de tâches de projets
    +DocumentModelBeluga=Modèle de document project pour l'aperçu des objets liées
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Charge de travail prévue
     PlannedWorkloadShort=Charge de travail
     ProjectReferers=Objets associés
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projets avec cet utilisateur comme contact
     TasksWithThisUserAsContact=Tâches assignées à cet utilisateur
     ResourceNotAssignedToProject=Non assigné au projet
     ResourceNotAssignedToTheTask=Non assigné à la tache
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Temps consommé par
     TasksAssignedTo=Tâches assignées à
     AssignTaskToMe=M'assigner la tâche
    @@ -189,13 +192,13 @@ AssignTaskToUser=Assigner tâche à %s
     SelectTaskToAssign=Sélectionnez la tâche à assigner
     AssignTask=Assigner
     ProjectOverview=Vue d'ensemble
    -ManageTasks=Utiliser les projets pour suivre les tâches
    +ManageTasks=Utiliser les projets pour suivre les tâches et/ou saisir du temps consommé (feuilles de temps)
     ManageOpportunitiesStatus=Utiliser les projets pour suivre les affaires / opportunités
     ProjectNbProjectByMonth=Nb de projets créés par mois
    -ProjectNbTaskByMonth=Nb de tâches créées par mois
    +ProjectNbTaskByMonth=No. of created tasks by month
     ProjectOppAmountOfProjectsByMonth=Montant des opportunités par mois
     ProjectWeightedOppAmountOfProjectsByMonth=Montant pondéré des opportunités par mois
    -ProjectOpenedProjectByOppStatus=Opportunités/affaires ouvertes par statut
    +ProjectOpenedProjectByOppStatus=Opportunités ouvertes par statut d'opportunité
     ProjectsStatistics=Statistics sur les projets
     TasksStatistics=Statistiques sur le projet/tâche principale
     TaskAssignedToEnterTime=Tâche assignée. La saisie de temps sur cette tâche devrait être possible.
    @@ -204,6 +207,7 @@ YouCanCompleteRef=SI vous souhaitez compléter la référence avec d'autres info
     OpenedProjectsByThirdparties=Projets ouverts par tiers
     OnlyOpportunitiesShort=Opportunités uniquement
     OpenedOpportunitiesShort=Opportunités ouvertes
    +NotOpenedOpportunitiesShort=Pas d'opportunité ouverte
     NotAnOpportunityShort=Non une opportunité
     OpportunityTotalAmount=Montant total des opportunités
     OpportunityPonderatedAmount=Montant pondéré des opportunités
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=Vous n'êtes pas autorisé à fermer le projet
     DontHaveTheValidateStatus=Le projet %s doit être ouvert pour être fermé
     RecordsClosed=%s projet(s) fermé(s)
     SendProjectRef=A propos du projet %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Réf de tâche déjà utilisée, une nouvelle réference de tâche est suggérée
    diff --git a/htdocs/langs/fr_FR/propal.lang b/htdocs/langs/fr_FR/propal.lang
    index a575824fc72..0c9f8d9a9b2 100644
    --- a/htdocs/langs/fr_FR/propal.lang
    +++ b/htdocs/langs/fr_FR/propal.lang
    @@ -33,7 +33,7 @@ PropalStatusSigned=Signée (à facturer)
     PropalStatusNotSigned=Non signée (fermée)
     PropalStatusBilled=Facturée
     PropalStatusDraftShort=Brouillon
    -PropalStatusValidatedShort=Validée (ouverte)
    +PropalStatusValidatedShort=Validated (open)
     PropalStatusClosedShort=Fermée
     PropalStatusSignedShort=Signée
     PropalStatusNotSignedShort=Non signée
    @@ -53,7 +53,7 @@ ErrorPropalNotFound=Propale %s inexistante
     AddToDraftProposals=Ajouter à proposition brouillon
     NoDraftProposals=Pas de propositions brouillons
     CopyPropalFrom=Créer proposition/devis par recopie d'un proposition existante
    -CreateEmptyPropal=Créer proposition/devis vierge
    +CreateEmptyPropal=Créer proposition/devis vierge ou avec la liste des produits/services
     DefaultProposalDurationValidity=Délai de validité par défaut (en jours)
     UseCustomerContactAsPropalRecipientIfExist=Utiliser l'adresse de contact suivi client si définie plutôt que l'adresse du tiers comme destinataire des propositions
     ClonePropal=Cloner proposition commerciale
    @@ -78,6 +78,7 @@ TypeContact_propal_external_CUSTOMER=Contact client suivi proposition
     TypeContact_propal_external_SHIPPING=Contact client pour la livraison
     # Document models
     DocModelAzurDescription=Modèle de proposition commerciale complet (logo…)
    +DocModelCyanDescription=Modèle de proposition commerciale complet (logo…)
     DefaultModelPropalCreate=Modèle par défaut à la création
     DefaultModelPropalToBill=Modèle par défaut lors de la clôture d'une proposition commerciale (à facturer)
     DefaultModelPropalClosed=Modèle par défaut lors de la clôture d'une proposition commerciale (non facturée)
    diff --git a/htdocs/langs/fr_FR/receiptprinter.lang b/htdocs/langs/fr_FR/receiptprinter.lang
    index 7335498a955..0e77bb91371 100644
    --- a/htdocs/langs/fr_FR/receiptprinter.lang
    +++ b/htdocs/langs/fr_FR/receiptprinter.lang
    @@ -17,7 +17,7 @@ CONNECTOR_FILE_PRINT=Imprimante locale
     CONNECTOR_WINDOWS_PRINT=Imprimante Windows local
     CONNECTOR_DUMMY_HELP=Fausse imprimante pour le test, ne fait rien
     CONNECTOR_NETWORK_PRINT_HELP=10.x.x.x:9100
    -CONNECTOR_FILE_PRINT_HELP=/ dev / usb / lp0, / dev / usb / lp1
    +CONNECTOR_FILE_PRINT_HELP=/dev/usb/lp0, /dev/usb/lp1
     CONNECTOR_WINDOWS_PRINT_HELP=LPT1, COM1, smb://FooUser:secret@computername/workgroup/Receipt Printer
     PROFILE_DEFAULT=Profil par défatut
     PROFILE_SIMPLE=Profil standard
    diff --git a/htdocs/langs/fr_FR/users.lang b/htdocs/langs/fr_FR/users.lang
    index e0f461cd196..fa5e772fe7e 100644
    --- a/htdocs/langs/fr_FR/users.lang
    +++ b/htdocs/langs/fr_FR/users.lang
    @@ -6,7 +6,7 @@ Permission=Droit
     Permissions=Droits
     EditPassword=Modifier mot de passe
     SendNewPassword=Régénérer et envoyer mot de passe
    -SendNewPasswordLink=Envoyer le lien pour réinitialiser le mot de passe
    +SendNewPasswordLink=Réinitialiser le mot de passe
     ReinitPassword=Régénérer mot de passe
     PasswordChangedTo=Mot de passe modifié en: %s
     SubjectNewPassword=Votre mot de passe pour %s
    diff --git a/htdocs/langs/fr_FR/website.lang b/htdocs/langs/fr_FR/website.lang
    index 1076726c110..8c34fa07f4c 100644
    --- a/htdocs/langs/fr_FR/website.lang
    +++ b/htdocs/langs/fr_FR/website.lang
    @@ -1,6 +1,6 @@
     # Dolibarr language file - Source file is en_US - website
     Shortname=Code
    -WebsiteSetupDesc=Créer ici autant d'entrée que de nombre différents de sites web que nécessaire.\nEnsuite, aller dans le menu Sites Web pour les éditer.
    +WebsiteSetupDesc=Créez ici les sites Web que vous souhaitez utiliser. Ensuite, allez dans le menu Sites Web pour les éditer.
     DeleteWebsite=Effacer site web
     ConfirmDeleteWebsite=Êtes-vous sûr de vouloir supprimer ce site web. Toutes les pages et le contenu seront également supprimés.
     WEBSITE_TYPE_CONTAINER=Type de page / conteneur
    @@ -18,17 +18,19 @@ HtmlHeaderPage=En-tête HTML (spécifique pour la page uniquement)
     PageNameAliasHelp=Nom ou alias de la page. <br>Cet alias est également utilisé pour forger une URL SEO lorsque le site Web est exécuté à partir d'un hôte virtuel d'un serveur Web (comme Apache, Nginx, ...). Utilisez le bouton "<strong>%s</strong>" pour modifier cet alias.
     EditTheWebSiteForACommonHeader=Remarque: Si vous souhaitez définir un en-tête personnalisé pour toutes les pages, modifiez l'en-tête au niveau du site plutôt qu'au niveau page/conteneur.
     MediaFiles=Répertoire de médias
    -EditCss=Editer  l'en-tête HTML ou Style/CSS
    +EditCss=Modifier les propriétés du site web
     EditMenu=Modifier menu
     EditMedias=Editer médias
    -EditPageMeta=Modifier métadonnées
    +EditPageMeta=Modifier les propriétés de la page/conteneur
    +EditInLine=Edit inline
     AddWebsite=Ajouter site web
     Webpage=Page/contenair Web
    -AddPage=Ajouter une page/contenair
    +AddPage=Ajouter une page/conteneur
     HomePage=Page d'accueil
     PageContainer=Page/conteneur
    -PreviewOfSiteNotYetAvailable=La prévisualisation de votre site web <strong>%s</strong> n'est pas disponible actuellement. Vous devez créer une première page.
    +PreviewOfSiteNotYetAvailable=La prévisualisation de votre site web <strong>%s</strong> n'est pas disponible actuellement. Vous devez d'abord '<strong>Importer un modèle de site web complet</strong>' ou juste '<strong>Ajouter une page/container</strong>.
     RequestedPageHasNoContentYet=La page demandée avec l'id=%s ne présente encore aucun contenu ou le fichier cache .tpl.php a été supprimé. Ajoutez du contenu à la page pour résoudre cela.
    +SiteDeleted=Web site '%s' deleted
     PageContent=Page/Contenair
     PageDeleted=Page/Contenair '%s' du site '%s' supprimée
     PageAdded=Page/Contenair '%s' ajoutée
    @@ -37,8 +39,8 @@ ViewPageInNewTab=Pré-visualiser la page dans un nouvel onglet
     SetAsHomePage=Définir comme page d'accueil
     RealURL=URL réelle
     ViewWebsiteInProduction=Pré-visualiser le site web en utilisant l'URL de la page d'accueil
    -SetHereVirtualHost=Si vous pouvez créer, sur votre serveur web (Apache, Nginx, ...), un hôte virtuel dédié avec PHP activé et un répertoire racine sur <br> <strong> %s </strong><br> , alors entrez ici le nom de cet hôte virtuel que vous avez créé, de sorte que l'aperçu puisse également être fait en utilisant l'accès direct au serveur Web, et non seulement en utilisant le serveur Dolibarr.
    -YouCanAlsoTestWithPHPS=Sur un environnement de développement, vous pouvez préférer tester le site avec le serveur web PHP intégré (PHP 5.5 requis) en exécutant <br><strong> php -S 0.0.0.0:8080 -t %s </strong>
    +SetHereVirtualHost=<u> Utilisation avec Apache/NGinx/...</u> <br> Si vous pouvez créer sur votre serveur Web (Apache, Nginx, ...) un hôte virtuel dédié avec PHP activé et un répertoire racine sur <br> <strong> %s </strong> <br> alors entrez le nom de l'hôte virtuel que vous avez créé afin que l'aperçu puisse également être fait en utilisant cet accès au serveur Web dédié au lieu d'utiliser uniquement le serveur Dolibarr.
    +YouCanAlsoTestWithPHPS=<u>Use with PHP embedded server</u><br>On develop environment, you may prefer to test the site with the PHP embedded web server (PHP 5.5 required) by running<br><strong>php -S 0.0.0.0:8080 -t %s</strong>
     CheckVirtualHostPerms=Vérifiez également que le virtual host a la permission <strong> %s </strong> sur les fichiers dans <strong> %s </strong>
     ReadPerm=Lire
     WritePerm=Écrire
    @@ -46,9 +48,10 @@ PreviewSiteServedByWebServer=<u>Prévisualiser %s dans un nouvel onglet.</u><br>
     PreviewSiteServedByDolibarr=<u>Aperçu %s dans un nouvel onglet.</u><br><br>Le %s sera servi par le serveur Dolibarr donc aucun serveur Web supplémentaire (comme Apache, Nginx, IIS) n'est nécessaire.<br>L'inconvénient est que l'URL des pages ne sont pas sexy et commencent par un chemin de votre Dolibarr.<br>URL servie par Dolibarr:<br><strong>%s</strong><br><br>Pour utiliser votre propre serveur web externe pour servir ce site web, créez un virtual host sur vote serveur web qui pointe sur le répertoire<br><strong>%s</strong><br> ensuite entrez le nom de ce virtual host et cliquer sur le bouton d'affichage de l'aperçu.
     VirtualHostUrlNotDefined=URL du virtual host servit par le serveur web externe non défini
     NoPageYet=Pas de page pour l'instant
    +YouCanCreatePageOrImportTemplate=You can create a new page or import a full website template
     SyntaxHelp=Aide sur quelques astuces spécifiques de syntaxe 
     YouCanEditHtmlSourceckeditor=Vous pouvez éditer le code source en activant l'éditeur HTML avec le bouton "Source".
    -YouCanEditHtmlSource=<br><span class="fa fa-bug"></span>Vous pouvez inclure du code PHP dans le source en utilisant le tags <strong>&lt;?php ?&gt;</strong>. Les variables globales suivantes sont disponibles: $conf, $langs, $db, $mysoc, $user, $website.<br><br><span class="fa fa-bug"></span>Vous pouvez aussi inclure le contenu d'une autre page/containeur avec la syntaxe suivante:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span>Vous pouvez faire une redirection sur une autre Page/Containeur avec la syntax: <br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-download"></span>Pour inclure un <strong>lien pour télécharger</strong> un fichier stocké dans le répertoire documents/ecm (besoin d'être loggué), la syntaxe est:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>Pour un fichier dans documents/mdedias (répertoire ouvert au publique), la syntaxe est:<br><strong>, &lt;a href="/document.php?modulepart=medias&file=[relative_dir]/filename.ext"&gt;.</strong><br>Pour un fichier partagé avec un lien de partage (accès ouvert en utilisant la clé de partage du fichier), la syntaxe est:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span>Pour inclure une <strong>image</strong>stockée dans le répertoire <strong>documents</strong>, utilisez le wrapper <strong>viewimage.php</strong>: Example, pour une image dans documents/medias (accès ouvert), la syntax est:<br><strong>&lt;a href="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
    +YouCanEditHtmlSource=<br><span class="fa fa-bug"></span> You can include PHP code into this source using tags <strong>&lt;?php ?&gt;</strong>. The following global variables are available: $conf, $db, $mysoc, $user, $website, $websitepage, $weblangs.<br><br><span class="fa fa-bug"></span> You can also include content of another Page/Container with the following syntax:<br><strong>&lt;?php includeContainer('alias_of_container_to_include'); ?&gt;</strong><br><br><span class="fa fa-bug"></span> You can make a redirect to another Page/Container with the following syntax (Note: do not output any content before a redirect):<br><strong>&lt;?php redirectToContainer('alias_of_container_to_redirect_to'); ?&gt;</strong><br><br><span class="fa fa-link"></span> To add a link to another page, use the syntax:<br><strong>&lt;a href="alias_of_page_to_link_to.php"&gt;mylink&lt;a&gt;</strong><br><br><span class="fa fa-download"></span> To include a <strong>link to download</strong> a file stored into the <strong>documents</strong> directory, use the <strong>document.php</strong> wrapper:<br>Example, for a file into documents/ecm (need to be logged), syntax is:<br><strong>&lt;a href="/document.php?modulepart=ecm&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file into documents/medias (open directory for public access), syntax is:<br><strong>&lt;a href="/document.php?modulepart=medias&file=[relative_dir/]filename.ext"&gt;</strong><br>For a file shared with a share link (open access using the sharing hash key of file), syntax is:<br><strong>&lt;a href="/document.php?hashp=publicsharekeyoffile"&gt;</strong><br><br><span class="fa fa-picture-o"></span> To include an <strong>image</strong> stored into the <strong>documents</strong> directory, use the <strong>viewimage.php</strong> wrapper:<br>Example, for an image into documents/medias (open directory for public access), syntax is:<br><strong>&lt;img src="/viewimage.php?modulepart=medias&amp;file=[relative_dir/]filename.ext"&gt;</strong><br>
     ClonePage=Cloner la page/contenair
     CloneSite=Cloner le site
     SiteAdded=Site web ajouté
    @@ -58,9 +61,10 @@ LanguageMustNotBeSameThanClonedPage=Vous clonez une page comme traduction. La la
     ParentPageId=Id de la page parent
     WebsiteId=ID site web
     CreateByFetchingExternalPage=Créer une page / un conteneur en récupérant une page à partir d'une URL externe ...
    -OrEnterPageInfoManually=Ou créer une nouvelle page
    +OrEnterPageInfoManually=Or create page from scratch or from a page template...
     FetchAndCreate=Récupérer et Créer
    -ExportSite=Exporter site
    +ExportSite=Export website
    +ImportSite=Importer modèle de site web
     IDOfPage=Id de page
     Banner=Bandeau
     BlogPost=Article de Blog
    @@ -74,7 +78,7 @@ AnotherContainer=Un autre conteneur
     WEBSITE_USE_WEBSITE_ACCOUNTS=Activer la table des comptes du site Web
     WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Activer la table pour stocker les comptes de site Web (login/pass) pour chaque site / tiers
     YouMustDefineTheHomePage=Vous devez d'abord définir la page d'accueil par défaut
    -OnlyEditionOfSourceForGrabbedContentFuture=Note: seule l'édition de source HTML sera possible lorsqu'un contenu de page est initiliasé par aspiration d'une page externe (l'éditeur WYSIWYG ne sera pas disponible)
    +OnlyEditionOfSourceForGrabbedContentFuture=Warning: Creating a web page by importing an external web page is reserved to experienced user. Depending on the complexity of source page, the result of importation may differs once imported from original. Also if the source page use common CSS style or not compatible javascript, it may break the look or features of the Web site editor when working on this page. This method is faster way to have a page but it is recommanded to create your new page from scratch or from a suggested page template.<br>Note also that only edition of HTML source will be possible when a page content has been initialized by grabbing it from an external page ("Online" editor will NOT be available)
     OnlyEditionOfSourceForGrabbedContent=Seule l'édition de source HTML est possible lorsque le contenu a été aspiré depuis un site externe
     GrabImagesInto=Aspirer aussi les images trouvées dans les css et la page.
     ImagesShouldBeSavedInto=Les images doivent être sauvegardées dans le répertoire
    @@ -84,3 +88,8 @@ AliasPageAlreadyExists=L'alias de page <strong> %s </strong> existe déjà
     CorporateHomePage=Page d'accueil Entreprise
     EmptyPage=Page vide
     ExternalURLMustStartWithHttp=l'URL externe doit commencer par http:// ou https://
    +ZipOfWebsitePackageToImport=Fichier zip du package site Web
    +ShowSubcontainers=Show included containers
    +InternalURLOfPage=Internal URL of page
    +ThisPageIsTranslationOf=This page/container is translation of
    +ThisPageHasTranslationPages=This page/container has translation
    diff --git a/htdocs/langs/fr_NC/projects.lang b/htdocs/langs/fr_NC/projects.lang
    index d36e44c7248..6e7cd76333b 100644
    --- a/htdocs/langs/fr_NC/projects.lang
    +++ b/htdocs/langs/fr_NC/projects.lang
    @@ -1,5 +1,4 @@
     # Dolibarr language file - Source file is en_US - projects
     TasksOnOpenedProject=Tâches sur projets ouverts
     NewTimeSpent=Nouveau consommé
    -ListShippingAssociatedProject=Liste des expéditions associées au projet
     TimeAlreadyRecorded=Temps consommé déjà enregistré pour cette tâche/jour et utilisateur %s
    diff --git a/htdocs/langs/he_IL/admin.lang b/htdocs/langs/he_IL/admin.lang
    index f8218cdd733..a7ccbfca978 100644
    --- a/htdocs/langs/he_IL/admin.lang
    +++ b/htdocs/langs/he_IL/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=התפתחות
     VersionUnknown=לא ידוע
     VersionRecommanded=מומלץ
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=הנדלר להציל הפעלות
     SessionSavePath=הפגישה אחסון לוקליזציה
     PurgeSessions=הטיהור של הפעלות
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=שמור המטפל הפגישה מוגדרת ב-PHP שלך לא מאפשרת לרשום את כל המפגשים הפועלות.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=נעל קשרים חדשים
    -ConfirmLockNewSessions=האם אתה בטוח שאתה רוצה להגביל כל קשר חדש Dolibarr לעצמך. <b>%s</b> המשתמש היחיד יוכלו להתחבר אחרי זה.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=הסרת הנעילה חיבור
     YourSession=הפגישה שלך
    -Sessions=משתמשים הפגישה
    +Sessions=Users sessions
     WebUserGroup=שרת אינטרנט המשתמש / קבוצה
    -NoSessionFound=PHP שלך נראה שלא לאפשר לרשימת פגישות פעילים. מדריך להשתמש כדי לשמור פגישות <b>(%s)</b> עשויים להיות מוגנים (למשל, על ידי הרשאות מערכת ההפעלה או על ידי PHP הוראה open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=מאגר המידע charset לאחסון נתונים
     DBSortingCharset=מאגר המידע charset למיין נתונים
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=משתמש חיצוני
     InternalUsers=משתמשים פנימיים
     ExternalUsers=משתמשים חיצוניים
     GUISetup=להציג
    -SetupArea=הגדרת האזור
    +SetupArea=הגדרת
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=טופס לבדוק העלאת קובץ (על פי ההגדרה)
     IfModuleEnabled=הערה: כן, הוא יעיל רק אם <b>%s</b> מודול מופעלת
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=NBR של תווים כדי להפעיל חיפוש: %s
     NotAvailableWhenAjaxDisabled=לא זמין כאשר אייאקס נכים
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=לא זמין תצוגה מקדימה
     ThemeCurrentlyActive=פעיל כרגע הנושא
     CurrentTimeZone=אזור PHP (שרת)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=מרחב
     Table=Table
     Fields=שדות
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=פעיל
     SetupShort=הגדרת
     OtherOptions=אפשרויות אחרות
    -OtherSetup=אחר ההתקנה
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=מפריד עשרוני
     CurrentValueSeparatorThousand=אלף מפריד
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=פרמטר %s
    -LocalisationDolibarrParameters=Localisation פרמטרים
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=אזור זמן PHP שרת
     DaylingSavingTime=שעון קיץ (משתמש)
     CurrentHour=שעה PHP (שרת)
     CurrentSessionTimeOut=ההפעלה הנוכחית פסק זמן
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (שפת הדפדפן)
     FeatureDisabledInDemo=התכונה זמינה ב דמו
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=האלמנטים היחידים של <a href="%s">מודולים המאפשרים</a> מוצגים.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, במקום השוק הרשמי של מודולים Dolibarr ERP / CRM חיצוניות
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=קשר
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=האם כל חנות סיסמאות ברורות במס
     MainDbPasswordFileConfEncrypted=מאגר המידע הסיסמה מוצפן ב conf.php (הופעל מומלץ)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=הגנה על קבצי PDF שנוצרו הופעל (לא מומלץ, שובר את הדור המונית pdf)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=תכונה
     DolibarrLicense=רשיון
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=עבור המשתמש או תיעוד של מפתח (דוק, שאלות ...) <br> תסתכל על ויקי Dolibarr: <br> <a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=אם יש לך שאלות נוספות / עזרה, אתה יכול להשתמש בפורום Dolibarr: <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=שטח זה יכול לעזור לך לקבל תמיכה ועזרה שירות Dolibarr.
    -HelpCenterDesc2=חלק שירות זה זמינים <b>באנגלית בלבד.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=התפריט הנוכחי מטפל
     MeasuringUnit=יחידת מדידה
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS פורט (כברירת מחדל ב php.ini: <b>%s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS מארח (כברירת מחדל ב php.ini: <b>%s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS נמל (לא מוגדר לתוך PHP על מערכות יוניקס כמו)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS מארח (לא מוגדר לתוך PHP על מערכות יוניקס כמו)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= שלח שיטתי מוסתר פחמן עותק של כל הודעות הדוא&quot;ל שנשלחו
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=שיטה להשתמש כדי לשלוח מיילים
    -MAIN_MAIL_SMTPS_ID=SMTP מזהה אם נדרש אימות
    -MAIN_MAIL_SMTPS_PW=SMTP סיסמא אם נדרש אימות
    -MAIN_MAIL_EMAIL_TLS= השתמש ב-TLS (SSL) להצפין
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=הפוך את כל sendings SMS (למטרות בדיקה או הדגמות)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=שיטה להשתמש כדי לשלוח SMS
    -MAIN_MAIL_SMS_FROM=השולח ברירת מחדל מספר הטלפון לשליחת הודעות טקסט
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=תכונה לא זמינה כמו מערכות יוניקס. בדיקת תוכנית sendmail שלך באופן מקומי.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=מודול ההתקנה
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=שלב %s
    -FindPackageFromWebSite=מצא חבילה המספקת התכונה הרצויה (לדוגמה על %s באתר הרשמי של רשת).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr הגרסה הנוכחית
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= עיכוב במטמון בתגובה יצוא שניות (0 או ריק מטמון לא)
     DisableLinkToHelpCenter=הסתרת הקישור <b>&quot;זקוק לעזרה או תמיכה&quot;</b> בעמוד הכניסה
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=אין גלישה אוטומטית, כך שאם הקו הוא מתוך עמוד על מסמכים, כי זמן רב מדי, יש להוסיף את עצמך חוזר המרכבה בתיבת הטקסט.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=מינימום אורך
     LanguageFilesCachedIntoShmopSharedMemory=קבצים. Lang טעון בזיכרון משותף
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=דוגמאות עם ההתקנה הנוכחית פועל
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=רשימה של ספריות ותבניות OpenDocument
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=מספר קבצי תבניות ODT המצויים בספריות אלה
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=דוגמאות תחביר: <br> c: \\ mydir <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> לדעת איך ליצור תבניות ODT המסמכים שלך, לפני אחסונם ספריות אלה, קרא את התיעוד wiki:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=מפתח להשתמש בשירותי אינטרנט (פ
     TestSubmitForm=בדיקת קלט בטופס
     ThisForceAlsoTheme=באמצעות מנהל התפריט ישתמש גם נושא בפני עצמו מה הוא בחירה המשתמש. גם זה מנהל התפריט מיוחדות עבור טלפונים חכמים לא עובד על כל טלפון חכם. שימוש אחר מנהל התפריט אם אתם חווים בעיות שלך.
     ThemeDir=Skins בספרייה
    -ConnectionTimeout=הקשר פסק זמן
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=בתגובה פסק זמן
     SmsTestMessage=מבחן מסר PHONEFROM__ __ ל __ PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=המפתח כתובות מאובטח
    -NoSmsEngine=לא מנהל השולח SMS זמין. מנהל SMS השולח אינם מותקנים כברירת מחדל עם ההפצה (כי הם תלויים בספק חיצוני) אבל אפשר למצוא על http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=אתה יכול להגדיר כל אפשרויות גלובליות הקשורות לדור PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=חוקי לזייף תיבות כתובת
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=פרמטרים כדי להבטיח את כתובות ה
     SecurityTokenIsUnique=השתמש פרמטר ייחודי securekey עבור כל כתובת אתר
     EnterRefToBuildUrl=הזן התייחסות %s אובייקט
     GetSecuredUrl=לקבל את כתובת האתר מחושב
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=סיסמה
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=משתמשים להקות
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=צדדים שלישיים
    +Module1Name=Third Parties
     Module1Desc=חברות ניהול של איש הקשר
     Module2Name=מסחרי
     Module2Desc=מסחרי וניהול
     Module10Name=חשבונאות
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=הצעות
     Module20Desc=ההצעה המסחרית של ההנהלה
     Module22Name=Mass E-דיוור
    @@ -511,13 +517,13 @@ Module52Desc=המניה של וניהול של מוצרים
     Module53Name=שירותים
     Module53Desc=שירות של ניהול
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=ברקודים
     Module55Desc=ברקוד של ההנהלה
     Module56Name=טלפוניה
     Module56Desc=שילוב טלפוניה
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=שילוב של מערכת ClickToDial (כוכבית, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=הוצאות והערות טיולים
     Module75Desc=הוצאות ניהול נסיעות של הערה
     Module80Name=משלוחים
     Module80Desc=משלוחי וניהול הזמנות של משלוח
    -Module85Name=בבנקים ומזומנים
    +Module85Name=Banks and Cash
     Module85Desc=ניהול חשבונות בנק או במזומן
    -Module100Name=באתר חיצוני
    -Module100Desc=כולל כל אתר אינטרנט חיצוני בתפריטים Dolibarr ולצפות בו למסגרת Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=הדוור וללגום
     Module105Desc=הדוור או SPIP ממשק מודול חבר
     Module200Name=LDAP
    -Module200Desc=במדריך LDAP סינכרון
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke אינטגרציה
     Module240Name=נתוני היצוא
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=נתוני היבוא
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=משתמשים
     Module310Desc=קרן וניהול חברי
     Module320Name=עדכוני RSS
     Module320Desc=הוסף עדכון RSS בתוך דפי Dolibarr מסך
    -Module330Name=הסימניות
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=לוח השנה
     Module410Desc=שילוב לוח השנה
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=תרומות
     Module700Desc=התרומה של ההנהלה
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=גמל שלמה
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=עורך WYSIWYG
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=השתמש באינטרנט בשירות Gravatar (www.gravatar.com) להראות תמונה של משתמשים / חברים (נמצא עם מיילים שלהם). צריך גישה לאינטרנט
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind המרות יכולות
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=רב החברה
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=נקודת מכירות
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=נקודת מכירות
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=לקרוא חשבוניות של לקוחות
    @@ -651,9 +661,9 @@ Permission32=צור / לשנות מוצרים
     Permission34=מחק מוצרים
     Permission36=ראה / ניהול מוצרים מוסתרים
     Permission38=ייצוא מוצרים
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=מחק פרויקטים (פרויקט משותף פרויקטים אני לפנות לקבלת)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=לקרוא התערבויות
     Permission62=צור / לשנות התערבויות
    @@ -686,7 +696,7 @@ Permission109=מחק sendings
     Permission111=לקרוא דוחות כספיים
     Permission112=צור / לשנות / למחוק ולהשוות עסקאות
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=ייצוא עסקאות דפי מצב חשבון
     Permission116=העברות בין חשבונות
     Permission117=ניהול בדיקות שיגרו
    @@ -694,15 +704,15 @@ Permission121=לקרוא לצדדים שלישיים הקשורים המשתמש
     Permission122=ליצור / לשנות צדדים שלישיים קשורה המשתמש
     Permission125=מחק צדדים שלישיים הקשורים המשתמש
     Permission126=ייצוא צדדים שלישיים
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=לקרוא ספקי
     Permission147=קרא את סטטיסטיקת
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=הספק הזמנות סגור
     Permission188=ביטול הזמנות ספקים
     Permission192=ליצור קווים
     Permission193=ביטול קווי
    -Permission194=קרא את השורות רוחב פס
    +Permission194=Read the bandwidth lines
     Permission202=יצירת קשרים-ADSL
     Permission203=חיבורי סדר הזמנות
     Permission204=סדר החיבורים
    @@ -750,12 +760,12 @@ Permission244=לראות את תוכן הקטגוריות מוסתרים
     Permission251=קריאה משתמשים אחרים וקבוצות
     PermissionAdvanced251=קריאה משתמשים אחרים
     Permission252=הרשאות קריאה של משתמשים אחרים
    -Permission253=יצירה / שינוי משתמשים אחרים, קבוצות ו permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=יצירה / שינוי משתמשים פנימיים / חיצוניים והרשאות
     Permission254=יצירה / שינוי משתמשים חיצוניים בלבד
     Permission255=שינוי סיסמה משתמשים אחרים
     Permission256=מחיקה או ביטול של משתמשים אחרים
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=לקרוא CA
     Permission272=לקרוא חשבוניות
     Permission273=להוציא חשבוניות
    @@ -765,7 +775,7 @@ Permission283=מחיקת אנשי קשר
     Permission286=ייצוא אנשי קשר
     Permission291=קרא את התעריפים
     Permission292=להגדיר הרשאות על תעריפי את
    -Permission293=שינוי תעריפים ללקוחות
    +Permission293=Modify customers tariffs
     Permission300=לקרוא ברקודים
     Permission301=צור / לשנות הברקודים
     Permission302=מחק את הברקודים
    @@ -787,11 +797,9 @@ Permission401=קרא הנחות
     Permission402=יצירה / שינוי הנחות
     Permission403=אמת הנחות
     Permission404=מחק את הנחות
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=הפעל יבוא המוני של נתונים חיצוניים 
     Permission1321=יצוא חשבוניות הלקוח, תכונות ותשלומים
     Permission1322=Reopen a paid bill
     Permission1421=ייצוא הזמנות של לקוחות ותכונות
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=הסיכוי הפוטנציאלי ברמה
     DictionaryCanton=State/Province
     DictionaryRegion=אזורים
    @@ -894,7 +902,7 @@ DictionaryVAT=שיעורי מע&quot;מ או מכירות שיעורי מס
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=תנאי תשלום
     DictionaryPaymentModes=תשלום מצבי
    -DictionaryTypeContact=צור סוגים
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=נייר פורמטים
    @@ -908,47 +916,47 @@ DictionarySource=מקור הצעות / הזמנות
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=הגדרת הציל
     SetupNotSaved=Setup not saved
     BackToModuleList=חזרה לרשימת מודולים
    -BackToDictionaryList=חזרה לרשימת המילונים
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=מע&quot;מ ניהול
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=כברירת מחדל המע&quot;מ המוצע הוא 0 אשר ניתן להשתמש בהם במקרים כמו עמותות, אנשים ou חברות קטנות.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE ניהול
    -LocalTax1IsUsedDescES= שיעור RE כברירת מחדל בעת יצירת הסיכויים, חשבוניות, הזמנות וכו 'פעל הכלל רגיל פעיל: <br> אם הקונה te אינו נתון מחדש, שוב כברירת מחדל = 0. קץ שלטון. <br> אם הקונה הוא נתון מחדש ואז RE כברירת מחדל. קץ שלטון. <br>
    -LocalTax1IsNotUsedDescES= כברירת מחדל RE המוצע הוא 0. קץ שלטון.
    -LocalTax1IsUsedExampleES= בספרד הם אנשי מקצוע בכפוף לכמה חלקים מסוימים של trap מלכודת הספרדית.
    -LocalTax1IsNotUsedExampleES= בספרד הם מקצועיים בחברות ובכפוף חלקים מסוימים של trap מלכודת הספרדית.
    -LocalTax2ManagementES= IRPF ניהול
    -LocalTax2IsUsedDescES= שיעור RE כברירת מחדל בעת יצירת הסיכויים, חשבוניות, הזמנות וכו 'פעל הכלל רגיל פעיל: <br> אם המוכר אינו נתון IRPF, אז IRPF כברירת מחדל = 0. קץ שלטון. <br> אם המוכר הוא נתון IRPF אז IRPF כברירת מחדל. קץ שלטון. <br>
    -LocalTax2IsNotUsedDescES= כברירת מחדל IRPF המוצע הוא 0. קץ שלטון.
    -LocalTax2IsUsedExampleES= בספרד, פרילנסרים ובעלי מקצוע עצמאיים המספקים שירותים וחברות אשר בחרו במערכת המס של מודולים.
    -LocalTax2IsNotUsedExampleES= בספרד הם BUSSINES לא כפוף למערכת המס של מודולים.
    +LocalTax1ManagementES=RE ניהול
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=כברירת מחדל RE המוצע הוא 0. קץ שלטון.
    +LocalTax1IsUsedExampleES=בספרד הם אנשי מקצוע בכפוף לכמה חלקים מסוימים של trap מלכודת הספרדית.
    +LocalTax1IsNotUsedExampleES=בספרד הם מקצועיים בחברות ובכפוף חלקים מסוימים של trap מלכודת הספרדית.
    +LocalTax2ManagementES=IRPF ניהול
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=כברירת מחדל IRPF המוצע הוא 0. קץ שלטון.
    +LocalTax2IsUsedExampleES=בספרד, פרילנסרים ובעלי מקצוע עצמאיים המספקים שירותים וחברות אשר בחרו במערכת המס של מודולים.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=לייבל שימוש כברירת מחדל אם לא התרגום ניתן למצוא את קוד
     LabelOnDocuments=התווית על מסמכים
    -NbOfDays=נ.ב. הימים
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=בסוף החודש
     CurrentNext=Current/Next
     Offset=לקזז
    @@ -984,7 +993,7 @@ DatabaseUser=מסד הנתונים משתמש
     DatabasePassword=מסד הנתונים הסיסמה
     Tables=לוחות
     TableName=שם טבלה
    -NbOfRecord=נ.ב. הרשומות
    +NbOfRecord=No. of records
     Host=שרת
     DriverType=הנהג סוג
     SummarySystem=מערכת מידע סיכום
    @@ -996,7 +1005,7 @@ Skin=העור נושא
     DefaultSkin=העור סגנון ברירת מחדל
     MaxSizeList=אורך מקסימלי עבור רשימה
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=המסר של היום
     MessageLogin=התחברות הודעה בדף
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=חפש בצורה קבועה בתפריט השמאלי
     DefaultLanguage=ברירת המחדל של השפה להשתמש (קוד שפה)
     EnableMultilangInterface=אפשר ממשק רב לשוני
     EnableShowLogo=הצג את הלוגו בתפריט השמאלי
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=שם
     CompanyAddress=כתובת
     CompanyZip=רוכסן
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=הבעלים של %s חשבון הבנק
     BankModuleNotActive=חשבונות בנק המודול לא מופעל
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=התראות
    -DelaysOfToleranceBeforeWarning=סובלנות עיכובים לפני אזהרה
    -DelaysOfToleranceDesc=מסך זה מאפשר לך להגדיר את העיכובים נסבל לפני התראה מדווח על המסך עם %s picto עבור כל רכיב מאוחר.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=סובלנות עיכוב (בימים) לפני התראה על הצעות לסגור
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=סובלנות עיכוב (בימים) לפני התראה על הצעות לא מחויב
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=עיכוב סובלנות (בימים) לפני התראה על שירותי להפעיל
    -Delays_MAIN_DELAY_RUNNING_SERVICES=עיכוב סובלנות (בימים) לפני התראה על שירותי פג
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=עיכוב סובלנות (בימים) לפני התראה על חשבוניות ספקים שלא שולמו
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=עיכוב Tolerence (בימים) לפני התראה על חשבוניות הלקוח ללא תשלום
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=עיכוב סובלנות (בימים) לפני התראה על פיוס הבנק תלויה ועומדת
    -Delays_MAIN_DELAY_MEMBERS=עיכוב סובלנות (בימים) לפני התראה על דמי חבר מאוחרת
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=עיכוב סובלנות (בימים) לפני התראה על הפקדת המחאות לעשות
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=ערכים אחרים לנהל את התפריט פרמטרים אופציונליים.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=ביקורת אבטחה אירועים
     Audit=ביקורת
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=ניתן להפעיל כאן בכניסה לאירועים Dolibarr
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=מערכת מידע הוא מידע טכני שונות נכנסת למצב קריאה בלבד ונראה לעין עבור מנהלי בלבד.
     SystemAreaForAdminOnly=אזור זה זמין עבור המשתמשים מנהל בלבד. אף אחד הרשאות Dolibarr יכול להפחית את המגבלה.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=אתה יכול לבחור בכל פרמטר הקשור מבט Dolibarr ולהרגיש כאן
     AvailableModules=Available app/modules
     ToActivateModule=כדי להפעיל מודולים, ללכת על שטח ההתקנה (ראשי-> התקנה-> Modules).
     SessionTimeOut=זמן לפגישה
    -SessionExplanation=מספר זה מבטיח הפעלה לא יפוג לפני עיכוב זה. אבל וניהול PHP הפגישה האם לא ערובה הפגישה תמיד לפוג לאחר עיכוב זה: זו מתרחשת כאשר מערכת הפעלה לנקות מטמון פועל. <br> הערה: עם מערכת לא בפרט, תהליך פנימי PHP ינקו כל פגישה על <b>%s /</b> גישה <b>%s</b> אבל רק במהלך גישה על ידי מפגשים אחרים.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=זמין טריגרים
    -TriggersDesc=טריגרים הם קבצים אשר משנים את אופן הפעולה של זרימת עבודה Dolibarr להעתיק פעם לתוך ספריית <b>htdocs / ליבה / טריגרים.</b> הם הבינו פעולות חדשות, המופעלים על אירועים Dolibarr (יצירת חברה חדשה, אימות החשבונית, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=גורמים בקובץ זה אינם זמינים על ידי <b>הסיומת-NoRun</b> בשמם.
     TriggerDisabledAsModuleDisabled=גורמים בקובץ זה אינם זמינים כמו <b>%s</b> מודול אינו זמין.
     TriggerAlwaysActive=גורמים בקובץ זה תמיד פעיל, לא משנה מה הם מודולים Dolibarr מופעל.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=גבולות / הגדרת Precision
    -LimitsDesc=ניתן להגדיר גבולות, precisions ו optimisations המשמשים Dolibarr כאן
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=מקס שברים עשרוניים עבור מחירי יחידה
     MAIN_MAX_DECIMALS_TOT=מקס שברים עשרוניים במחירים הכל
     MAIN_MAX_DECIMALS_SHOWN=שברים עשרוניים מקס במחירים המוצג על המסך (הוסף <b>...</b> לאחר מספר זה אם אתה רוצה לראות <b>...</b> כאשר מספר מקוצר כאשר מוצג על המסך)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=יחידת מחיר נטו של המוצר
     TotalPriceAfterRounding=המחיר הכולל (נטו / מע&quot;מ / מס כולל) לאחר עיגול
     ParameterActiveForNextInputOnly=פרמטר יעיל הקלט הבא רק
     NoEventOrNoAuditSetup=בשום מקרה לא ביטחון נרשמה עד כה. זה יכול להיות נורמלי אם הביקורת לא הופעל &quot;הגדרת - ביטחון - ביקורת&quot; הדף.
    -NoEventFoundWithCriteria=בשום מקרה לא ביטחון כבר מצאו criterias חיפוש כאלה.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=ראה הגדרת sendmail המקומי
     BackupDesc=כדי לבצע גיבוי מלא של Dolibarr, עליך:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=מדריך בארכיון יש לאחסן במקום בטוח.
     BackupDescY=קובץ dump שנוצר יש לאחסן במקום בטוח.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=כדי לשחזר גיבוי Dolibarr, עליך:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= כלל זה הוא נאלץ <b>%s</b> ידי מודול מופעל
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=עליך להפעיל את הפ
     YourPHPDoesNotHaveSSLSupport=פונקציות שאינן זמינות ב-SSL-PHP
     DownloadMoreSkins=עוד סקינים להורדה
     SimpleNumRefModelDesc=להחזיר את מספר הפניה עם פורמט %syymm-nnnn שם yy הוא שנה, מ&quot;מ הוא חודש nnnn הוא רצף ללא חור ועם איפוס לא
    -ShowProfIdInAddress=הצג מזהה בעלי מקצועות חופשיים עם כתובות על מסמכים
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=תרגום חלקי
    -MAIN_DISABLE_METEO=בטל meteo נוף
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=בדוק להיכנס API
    -ProxyDesc=תכונות מסוימות של Dolibarr צריך גישה לאינטרנט כדי לעבוד. הגדרת פרמטרים כאן בשביל זה. אם שרת Dolibarr עומד מאחורי שרת proxy, הפרמטרים האלה אומר Dolibarr כיצד לגשת לאינטרנט דרכו.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=גישה חיצונית
     MAIN_PROXY_USE=השתמש בשרת Proxy (גישה ישירה אחרת לאינטרנט)
     MAIN_PROXY_HOST=שם / כתובת של שרת Proxy
     MAIN_PROXY_PORT=היציאה של שרת ה-Proxy
     MAIN_PROXY_USER=כניסה כדי להשתמש בשרת proxy
     MAIN_PROXY_PASS=סיסמה כדי להשתמש בשרת proxy
    -DefineHereComplementaryAttributes=להגדיר כאן את כל atributes, אינו זמין כבר כברירת מחדל, כי אתה רוצה להיות נתמך על %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=משלימים תכונות
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=אזהרה, על כמה מערכות לינוקס, לשלוח דוא&quot;ל הדוא&quot;ל שלך, הגדרת sendmail ביצוע חובה conatins אפשרות-BA (mail.force_extra_parameters פרמטר לקובץ php.ini שלך). אם מקבלי כמה לא לקבל הודעות דוא&quot;ל, מנסה לערוך פרמטר זה PHP עם mail.force_extra_parameters =-BA).
     PathToDocuments=הדרך מסמכים
     PathDirectory=מדריך
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=חזור הסיסמה שנוצר על פי אלגוריתם Dolibarr פנימי: 8 תווים המכילים מספרים ותווים משותפים באותיות קטנות.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=דוא&quot;ל נדרש ליצור משתמש חדש
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=חברות מודול ההתקנה
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=תבניות מסמכים
    -DocumentModelOdt=צור מסמכים מתבניות OpenDocuments (. ODT קבצים של אופן אופיס, KOffice, TextEdit, ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=סימן מים על מסמך טיוטה
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Professional מזהה ייחודי
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=הקישור ייצוא לפורמט <b>%s</b> זמין בקישור הבא: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=הקישור ייצוא לפורמט <b>%s</b> זמין 
     BillsSetup=חשבוניות ההתקנה מודול
     BillsNumberingModule=חשבוניות ושטרי אשראי המונים מודול
     BillsPDFModules=חשבוניות ומסמכים מודלים
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=כתב זכויות
     CreditNotes=אשראי הערות
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= ניהול התחברות לכל חבר
     AdherentMailRequired=דוא&quot;ל נדרש ליצור חבר חדש
     MemberSendInformationByMailByDefault=תיבת סימון לשלוח אישור בדואר לחברי (אימות או מנוי חדש) מופעלת כברירת מחדל
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=הגדרת LDAP
     LDAPGlobalParameters=גלובל פרמטרים
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=סנכרון ניסוי מוצלח
     LDAPSynchroKO=הסנכרון נכשל במבחן
    -LDAPSynchroKOMayBePermissions=נכשל במבחן הסנכרון. בדוק כי הקשר לשרת מוגדר כהלכה ומאפשרת udpates של LDAP
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP להתחבר ל-LDAP מוצלחים שרת (Server = %s, נמל %s =)
     LDAPTCPConnectKO=TCP להתחבר לשרת LDAP נכשל (שרת = %s, נמל %s =)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=חבר / Authentificate לשרת LDAP נכשל (שרת = %s, פורט = %s, מנהל = %s, סיסמה = %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=שרת LDAP המוגדר עבור גרסה 3
     LDAPSetupForVersion2=שרת LDAP מוגדר לגרסה 2
     LDAPDolibarrMapping=Dolibarr מיפוי
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=התחברות (סמבה, ActiveDirectory)
     LDAPFieldLoginSambaExample=דוגמה: samaccountname
     LDAPFieldFullname=שם פרטי
     LDAPFieldFullnameExample=לדוגמה: cn
    -LDAPFieldPasswordNotCrypted=סיסמה לא crypted
    -LDAPFieldPasswordCrypted=סיסמה crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=דוגמה: userPassword
     LDAPFieldCommonNameExample=לדוגמה: cn
     LDAPFieldName=שם
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=ערכים לדוגמה מיועדים <b>OpenLDAP</b> עם סכימות טעון הבאים: <b>core.schema, cosine.schema, inetorgperson.schema).</b> אם אתה משתמש בערכים thoose ו OpenLDAP, לשנות קובץ <b>slapd.conf</b> LDAP שלך config לקבל את כל סכמות thoose טעון.
     ForANonAnonymousAccess=לתקופה של acces מאומתים (גישה לכתוב למשל)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=מוצרים מודול ההתקנה
     ServiceSetup=מודול שירותי התקנה
     ProductServiceSetup=מוצרים ושירותים ההתקנה מודולים
     NumberOfProductShowInSelect=מספר מקסימלי של מוצרים combos בחר רשימות (0 = ללא הגבלה)
    -ViewProductDescInFormAbility=ויזואליזציה של תיאורי מוצרים בתחום הטפסים (גם בכינויו tooltip קופץ)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=ברקוד מסוג ברירת מחדל עבור מוצרים
     SetDefaultBarcodeTypeThirdParties=ברקוד מסוג ברירת מחדל עבור צדדים שלישיים
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=שליחת ההתקנה מודול
     SendingsReceiptModel=שליחת מודל קבלת
     SendingsNumberingModules=Sendings מספור מודולים
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=מוצרים משלוחים מספור מודול קבלת
    @@ -1515,18 +1528,18 @@ AdvancedEditor=עורך מתקדם
     ActivateFCKeditor=הפעל עורך מתקדם עבור:
     FCKeditorForCompany=WYSIWIG יצירת / מהדורה של תיאור של רכיב הערה (למעט מוצרים / שירותים)
     FCKeditorForProduct=WYSIWIG יצירת / מהדורה של המוצרים / שירות של תיאור הערה
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG יצירת / מהדורה של דברי דואר
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=החיבור הצליח אבל הנתונים לא נראה להיות באתר osCommerce (%s מפתח לא נמצא %s טבלה).
    -OSCommerceTestOk=חיבור &quot;%s של שרת&quot; %s &quot;מסד נתונים עם מוצלחת&quot; %s של המשתמש.
    -OSCommerceTestKo1=חיבור &quot;%s&quot; שרת להצליח אבל &quot;%s&quot; מסד נתונים לא ניתן היה להשיג.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=חיבור &quot;%s של שרת עם&quot; %s &quot;המשתמש נכשל.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=תפריט נמחק
     Menus=תפריטים
    @@ -1548,7 +1561,7 @@ DetailRight=מצב כדי להציג תפריטים אפורים לא מורשי
     DetailLangs=לנג שם הקובץ לתרגום הקוד תווית
     DetailUser=מתמחה / extern / הכל
     Target=Target
    -DetailTarget=יעד קישורים (למעלה _blank פותח חלון חדש)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=רמה (-1: התפריט העליון, 0: תפריט הכותרת,&gt; 0 תפריט ותפריט משנה)
     ModifMenu=תפריט שינוי
     DeleteMenu=מחיקת סעיף מתפריט
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=במע&quot;מ: <br> - על משלוח של סחורות (
     OptionVatDebitOptionDesc=במע&quot;מ: <br> - על משלוח של סחורות (אנו משתמשים תאריך החשבונית) <br> - על החשבונית (חיוב) עבור שירותים
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=על משלוח
     OnPayment=על התשלום
     OnInvoice=בחשבונית
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=אירועים מודול ההתקנה סדר היום
     PasswordTogetVCalExport=מפתח לאשר הקישור יצוא
     PastDelayVCalExport=לא יצא אירוע מבוגרת
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=לחץ כדי לחייג ההתקנה מודול
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=נקודת מכירות
     CashDeskSetup=נקודת ההתקנה מודול מכירות
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=חשבון ברירת מחדל להשתמש כדי לקבל תשלומים במזומן
     CashDeskBankAccountForCheque= חשבון ברירת מחדל להשתמש כדי לקבל תשלומים על ידי סימון
     CashDeskBankAccountForCB= חשבון ברירת מחדל להשתמש כדי לקבל תשלומים במזומן באמצעות כרטיסי אשראי
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=הפוך ההתקנה מודול
    -BookmarkDesc=מודול זה מאפשר לך לנהל את הסימניות. ניתן גם להוסיף קיצורי דרך לכל הדפים Dolibarr או אתרי אינטרנט externale בתפריט השמאלי.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=מספר מרבי של סימניות להראות בתפריט השמאלי
     ##### WebServices #####
     WebServicesSetup=Webservices ההתקנה מודול
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=רב החברה מודול ההתקנה
     ##### Suppliers #####
     SuppliersSetup=מודול הספק ההתקנה
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=מודול פרויקט ההתקנה
     ProjectsModelModule=מסמך דו&quot;ח פרויקט של מודל
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/he_IL/companies.lang b/htdocs/langs/he_IL/companies.lang
    index 36ab3b01faf..bd7bfe36a40 100644
    --- a/htdocs/langs/he_IL/companies.lang
    +++ b/htdocs/langs/he_IL/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=חברה
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=צדדים שלישיים
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=לקוחות פוטנציאלים
     ThirdPartyProspectsStats=לקוחות פוטנציאלים
     ThirdPartyCustomers=לקוחות
     ThirdPartyCustomersStats=לקוחות
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=הצעות
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=סגל
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=רשימת לקוחות פוטנציאלים
    -ListCustomersShort=רשימת לקוחות
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Closed
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/he_IL/errors.lang b/htdocs/langs/he_IL/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/he_IL/errors.lang
    +++ b/htdocs/langs/he_IL/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/he_IL/interventions.lang b/htdocs/langs/he_IL/interventions.lang
    index d05f23637ba..2d46565f3f8 100644
    --- a/htdocs/langs/he_IL/interventions.lang
    +++ b/htdocs/langs/he_IL/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=התערבויות
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/he_IL/main.lang b/htdocs/langs/he_IL/main.lang
    index 2bcda8ba4a5..cae1a09ac08 100644
    --- a/htdocs/langs/he_IL/main.lang
    +++ b/htdocs/langs/he_IL/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=אחר
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=מערכת כלים
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=מחק את השורה
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=פרוייקטים
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=הרשאות
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=התערבויות
     SearchIntoContracts=חוזים
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/he_IL/other.lang b/htdocs/langs/he_IL/other.lang
    index d4db81e5c6b..319799b9c15 100644
    --- a/htdocs/langs/he_IL/other.lang
    +++ b/htdocs/langs/he_IL/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/he_IL/projects.lang b/htdocs/langs/he_IL/projects.lang
    index 7ec44dba97f..66a3928ecfb 100644
    --- a/htdocs/langs/he_IL/projects.lang
    +++ b/htdocs/langs/he_IL/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=הצג משימה
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/hr_HR/admin.lang b/htdocs/langs/hr_HR/admin.lang
    index adc95e137a9..a7493d95e88 100644
    --- a/htdocs/langs/hr_HR/admin.lang
    +++ b/htdocs/langs/hr_HR/admin.lang
    @@ -1,8 +1,8 @@
     # Dolibarr language file - Source file is en_US - admin
     Foundation=Zaklada
    -Version=Verzija
    -Publisher=Publisher
    -VersionProgram=Programska verzija
    +Version=Inačica
    +Publisher=Izdavač
    +VersionProgram=Inačica programa
     VersionLastInstall=Inicijalno instalirana verzija
     VersionLastUpgrade=Zadnja verzija nadogradnje
     VersionExperimental=Eksperimentalno
    @@ -10,9 +10,9 @@ VersionDevelopment=Razvoj
     VersionUnknown=Nepoznato
     VersionRecommanded=Preporučeno
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -20,7 +20,7 @@ LocalSignature=Embedded local signature (less reliable)
     RemoteSignature=Remote distant signature (more reliable)
     FilesMissing=Nedostaju datoteke
     FilesUpdated=Nadograđene datoteke
    -FilesModified=Modified Files
    +FilesModified=Preinačene datoteke
     FilesAdded=Added Files
     FileCheckDolibarr=Check integrity of application files
     AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when application is installed from an official package
    @@ -30,14 +30,14 @@ SessionSaveHandler=Rukovatelj za spremanje sesije
     SessionSavePath=Lokalizacija pohrane sesije
     PurgeSessions=Brisanje sesija
     ConfirmPurgeSessions=Želite li stvarno prekinuti sve sesije? To će odjaviti sve korisnike (osim vas).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Zaključaj nova spajanja
    -ConfirmLockNewSessions=Jeste li sigurni da želite ograničiti svako novo spajanje na Dolibarr za sebe. Samo korisnik <b>%s</b> će biti u mogučnosti da se nakon toga spoji.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Otključaj spajanje
     YourSession=Vaša sesija
    -Sessions=Korisničke sesije
    +Sessions=Users sessions
     WebUserGroup=Web Server korisnik/grupa
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Charset baze za sortiranje podataka
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Vanjski korisnik
     InternalUsers=Interni korisnici
     ExternalUsers=Vanjski korisnici
     GUISetup=Prikaz
    -SetupArea=Sučelje postavki
    +SetupArea=Postavke
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Obrazac za testiranje uploada datoteka (sukladno postavkama)
     IfModuleEnabled=Napomena: DA je efektivno samo ako je modul <b>%s</b> omogućen
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kod ne može sadržavati vrijednost 0
     DisableJavascript=Onemogući JavaScript i AJAX funkcije (Preporučljivo za slijepe osobe ili tekstualne web preglednike)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Br. znakova za aktiviranje pretrage: %s
     NotAvailableWhenAjaxDisabled=Nije dostupno kada je Ajax onemogućen
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Pregled nije dostupan
     ThemeCurrentlyActive=Tema trenutno aktivna
     CurrentTimeZone=Vremenska zona PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Razmak
     Table=Tabela
     Fields=Polja
    @@ -111,14 +111,14 @@ NotConfigured=Modul/Aplikacija nije konfigurirana
     Active=Aktivan
     SetupShort=Postavke
     OtherOptions=Ostale opcije
    -OtherSetup=Ostale postavke
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimalni separator
     CurrentValueSeparatorThousand=Separator tisućica
     Destination=Odredište
     IdModule=ID Modula
     IdPermissions=ID Dozvole
     LanguageBrowserParameter=Parametar %s
    -LocalisationDolibarrParameters=Parametri prijevoda
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Vremenska zona klijenta (korisnik)
     ClientHour=Vrijeme klijent (korisnik)
     OSTZ=Server OS vremenska zona
    @@ -126,8 +126,8 @@ PHPTZ=PHP server vremenska zona
     DaylingSavingTime=Ljetno računanje vremena
     CurrentHour=PHP Vrijeme (server)
     CurrentSessionTimeOut=Trenutno vrijeme isteka sesije
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Dodatak
     Boxes=Dodaci
     MaxNbOfLinesForBoxes=Maksimalni broj linija u dodatku
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Zanemari greške dupliciranih zapisa (INSERT IGNORE)
     AutoDetectLang=Automatski detektiraj (jezik web preglednika)
     FeatureDisabledInDemo=Mogućnost onemogućena u demo verziji
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Prikazani su samo elementi sa  <a href="%s">omogučenih modula</a>
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Možete pronaći više modula za download na vanjskim internet web lokacijama 
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Nađi vanjske aplikacije/module
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Novo
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStorel, ovlaštena trgovina za Dolibarr ERP/CRM dodatne module
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Referentne web lokacije za pronalazak više modula
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Poveznica
     BoxesAvailable=Dostupni dodaci
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Nemojte pohranjivati čitljive lozinke u bazu već pohra
     MainDbPasswordFileConfEncrypted=Lozinka baze enkriptirana u conf.php (Preporučeno aktivirano)
     InstrucToEncodePass=Da biste imali kodiranu lozinku u <b>conf.php</b> datoteci, zamjenite red <br><b>$dolibarr_main_db_pass="...";</b><br>sa<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Da biste imali čitljivu lozinku u <b>conf.php</b> datoteci, zamjenite red <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>sa<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Zaštita generiranih PDF datoteka (NIJE preporučeno aktiviranje, kvari masovno generiranje PDF-ova)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Mogućnost
     DolibarrLicense=Licenca
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=Za korisničku ili razvojnu dokumentciju ( DOC, FAQ...)<br> pogledajte na Dolibarr Wiki-u:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Za sva ostala pitanja/pomoć, obratite se na Dolibarr forumu:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Ovo sučelje vam može pomoći da dobijete pomoć Dolibarr servisa podrške
    -HelpCenterDesc2=Neki dijelovi ovog servisa su dostupni samo na <b>engleskom</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Trenutačni nositelj izbornika
     MeasuringUnit=Mjerna jedinica
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Otkazni rok
     NewByMonth=New by month
     Emails=e-pošta
     EMailsSetup=podešavanje e-pošte
    -EMailsDesc=Ova stranica omogućava vam da pregazite PHP parametre za slanje e-pošte. U većini slučajeva na UNIX/Linux OS, PHP parametri su već postavljeni tako da je ovo podešavanje nepotrebno.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (predefiniran u php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (predefiniran u php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Nije definiran u PHP-u niti na Unix-u)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Nije definiran u PHP-u niti na Unix-u)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Sustavno pošalji skriveno CC sve poslane poruke e-pošte
    -MAIN_DISABLE_ALL_MAILS=Onemogući slanje svih poruka e-poštom (samo za testiranje i demo)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Način slanja e-pošte
    -MAIN_MAIL_SMTPS_ID=SMTP ID potrebna prijava
    -MAIN_MAIL_SMTPS_PW=SMTP Lozinka ako je potrebna prijava
    -MAIN_MAIL_EMAIL_TLS= Koristi TLS (SSL) enkripciju
    -MAIN_MAIL_EMAIL_STARTTLS= Koristi TLS (STARTTLS) enkripciju
    -MAIN_DISABLE_ALL_SMS=Onemogući sva SMS slanja (za testiranje ili demo)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Način slanja SMS-a
    -MAIN_MAIL_SMS_FROM=Zadani broj pošiljatelja za slanje SMS-ova
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Mogućnost nije dostupna na UNIX-u. Testirajte sendmail program lokalno.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Podešavanje modula
     ModulesSetup=Podešavanje modula/aplikacija
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Nemojte koristiti u stvarnom okruženju
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Korak %s
    -FindPackageFromWebSite=Pronađite paket koji pruža željenu mogučnost ( npr. ovlaštena web lokacija %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download paketa (npr. sa ovlaštene web lokacije %s)
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=Za ovaj korak možete učitati .zip datoteku modula ovdje:
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Trenutna verzija Dolibarr-a
     CallUpdatePage=Idite na stranicu koja nadograđuje strukturu baze i podatke: %s
     LastStableVersion=Zadnja stabilna verzija
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Sakrij poveznicu "<b>Trebate li pomoć ili podršku</b>" na stranici prijave
     DisableLinkToHelp=Sakrij poveznicu na online pomoć "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimalna dužina
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Primjeri s trenutno pokrenutim postavkama
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Popis mapa sa OpenDocument predlošcima
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Broj ODT/ODS predložaka pronađenih u mapama
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Primjer:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>Da bi ste saznali kako kreirati ODT predloške dokumenata, prije pohranjivanja istih u navedene mape, pročitajte wiki dokumentaciju na:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Ključ za korištenje web servisa (parametar "dolibarrke
     TestSubmitForm=Unesite obrazac testiranja
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Mapa stilova
    -ConnectionTimeout=Prekid veze
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Odgovor 
     SmsTestMessage=Test poruka od __PHONEFROM__ za __PHONETO__
     ModuleMustBeEnabledFirst=Modul <b>%s</b> mora biti omogućen ako želite koristiti ovu mogučnost.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Pravila za kopiranje adresnih blokova
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Sakrij opis proizvoda na generiranim PDF
     HideRefOnPDF=Sakrij ref. proizvoda na generiranim PDF
     HideDetailsOnPDF=Sakrij stavke detalja proizvoda na generiranim PDF
    @@ -387,9 +391,9 @@ UrlGenerationParameters=Parametri za osiguranje URL-a
     SecurityTokenIsUnique=Koristi jedinstven securekey parametar za svaki URL
     EnterRefToBuildUrl=Unesite referencu za objekt %s
     GetSecuredUrl=Traži izračunan URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    -OldVATRates=Stara PDV stopa
    -NewVATRates=Nova PDV stopa
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
    +OldVATRates=Stara stopa PDV-a
    +NewVATRates=Nova stopa PDV-a
     PriceBaseTypeToChange=Promjeni cijene sa baznom referentnom vrijednosti definiranoj na
     MassConvert=Pokreni masovnu konverziju
     String=String
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Odaberi popis
     ExtrafieldSelectList = Odaberi iz tabele
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Lozinka
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Poveži s objektom
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Postavi kao zadano
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=Vanjski modul - Instaliran u mapi %s
    -BarcodeInitForThirdparties=Masovno postavljanje barkodova za komitente
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Masovno postavljanje ili promjena barkodova usluga i proizvoda
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Inicijalna vrijednost za sljedećih %s praznih podataka
     EraseAllCurrentBarCode=Obriše sve trenutne vrijednosti barkoda
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=Sve barkod vrijednosti su obrisane
    -NoBarcodeNumberingTemplateDefined=Nema predloška označavanja barkodom omogučenog u podešavanju modula.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=Nema više detalja u podnožju dokumenta
     DisplayCompanyInfo=Prikaži adresu tvrtke
     DisplayCompanyManagers=Prikaz upravitelja imenima
     DisplayCompanyInfoAndManagers=Prikaži adresu tvrtke i ime menadžera
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Koristi 3 koraka odobravanja kada je iznos (bez poreza) veći od...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Korisnici i grupe
    +Module0Name=Korisnici & Grupe
     Module0Desc=Upravljanje korisnicima/zaposlenicima i grupama
    -Module1Name=Komitenti
    +Module1Name=Treće osobe
     Module1Desc=Upravljanje tvrtkama i kontaktima (kupci, potencijalni kupci, ...)
    -Module2Name=Komercijala
    +Module2Name=Trgovina
     Module2Desc=Upravljanje komercijalom
     Module10Name=Računovodstvo
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Ponude
     Module20Desc=Upravljanje ponudama
     Module22Name=Masovno slanje e-pošte
    @@ -511,13 +517,13 @@ Module52Desc=Upravljanje zalihama
     Module53Name=Usluge
     Module53Desc=Upravljanje uslugama
     Module54Name=Ugovori/pretplate
    -Module54Desc=Upravljanje ugovorima (usluge ili pretplate)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barkodovi
     Module55Desc=Upravljanje barkodovima
     Module56Name=Telefonija
     Module56Desc=Integracija telefonije
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integracija ClickToDial sistema (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Trošak i putne napomene
     Module75Desc=Upravljanje putnim troškovima i napomenama
     Module80Name=Isporuke
     Module80Desc=Upravljanje isporukama i dostavama narudžbi
    -Module85Name=Banke i gotovina
    +Module85Name=Banks and Cash
     Module85Desc=Upravljanje bankovnim i gotovinskim računima
    -Module100Name=Vanjska lokacija
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman i SPIP
     Module105Desc=Mailman ili SPIP sučelje za modul članova
     Module200Name=LDAP
    -Module200Desc=LDAP sinhronizacija mape
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integracija
     Module240Name=Izvozi podataka
    -Module240Desc=Alat za izvoz Dolibarr podataka (sa asistentom)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Uvoz podataka
    -Module250Desc=Alat za uvoz podataka u Dolibarr (sa asistentom)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Članovi
     Module310Desc=Upravljanje članovima zaklade
     Module320Name=RSS Feed
     Module320Desc=Dodaj RSS feed unutar Dolibar stranica
    -Module330Name=Oznake
    -Module330Desc=Upravljanje oznakama
    -Module400Name=Projekti/Mogućnosti/Vodiči
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Web kalendar
     Module410Desc=Integracija web kalendara
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Kredit
     Module520Desc=Upravljanje kreditima
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donacije
     Module700Desc=Upravljanje donacijama
     Module770Name=Izvještaji troška
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Kategorije
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Dozvoljava uređivanje nekog tekstualnog područja u naprednom editoru (bazirano na CKEditor-u)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dinamičke cijene
     Module2200Desc=Omogući korištenje matematičkih izraza za cijene
     Module2300Name=Planirani poslovi
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Događaji/Raspored
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web servisi (SOAP server)
    @@ -590,17 +596,17 @@ Module2600Desc=Omogući Dolibarr SOAP server pružatelja API servisa
     Module2610Name=API/Webservis (REST server)
     Module2610Desc=Omogući Dolibarr REST server pružajući API servise
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind mogućnosti konverzije
     Module3100Name=Skype
     Module3100Desc=Dodaj Skype gumb na kartice korisnika / komitenta / kontakata / članova
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    -Module4000Name=HRM
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
    +Module4000Name=Djelatnici
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi tvrtka
     Module5000Desc=Dozvoljava upravljanje multi tvrtkama
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Web lokacije
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Upravljanje zahtjevima odlazaka
    -Module20000Desc=Objavi i prati zahtjeve odsutnosti zaposlenika
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Prodajno mjesto 
     Module50100Desc=Modul prodajnog mjesta (POS)
    +Module50150Name=POS
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Računovodstvo (napredno)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Anketa, Upitnik ili Glasanje
    -Module55000Desc=Modul za izradu online anketa, upitnika ili glasovanja (slično kao Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marže
     Module59000Desc=Modul za upravljanje maržama
     Module60000Name=Provizije
     Module60000Desc=Modul za upravljanje provizijama
    -Module62000Name=Incoterm
    -Module62000Desc=Dodaj mogučnosti za upravljanje Incoterm-om
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Sredstva
     Module63000Desc=Upravljanje sredstvima (pisači, vozila, prostorije, ...) koje možete djeliti s događajima
     Permission11=Čitaj račune kupca
    @@ -651,9 +661,9 @@ Permission32=Kreiraj/izmjeni proizvod
     Permission34=Obriši proizvod
     Permission36=Pregled/upravljanje skrivenim proizvodima
     Permission38=izvoz proizvoda
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Obriši projekte (zajednički projekti i moji projekti)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Izvezi projekte
     Permission61=Čitaj intervencije
     Permission62=Kreiraj/promjeni intervencije
    @@ -686,7 +696,7 @@ Permission109=Obriši slanja
     Permission111=Čitanje financijskih računa
     Permission112=Kreiraj/izmjeni/obriši i usporedi transakcije
     Permission113=Podešavanje financijskih računa (kreiranje, upravljanje kategorijama)
    -Permission114=Uskladi transakcije
    +Permission114=Reconcile transactions
     Permission115=Izvoz transakcija i izvodi
     Permission116=Prijenos između računa
     Permission117=Upravljanje otpremom čekova
    @@ -694,15 +704,15 @@ Permission121=Čitaj veze komitenata s korisnicima
     Permission122=Kreiraj/izmjeni komitente povezane s korisnicima
     Permission125=Obriši komitente povezane s korisnicima
     Permission126=Izvezi komitente
    -Permission141=Čitaj sve projekte i zadatke (također privatne koji nisu moji)
    -Permission142=Kreiraj/izmjeni sve projekte i zadatke (također privatne koji nisu moji)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Obriši sve projekte i zadatke (također privatne koji nisu moji)
     Permission146=Čitaj pružatelje
     Permission147=Čitaj statistiku
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Čitaj ugovore/pretplate
     Permission162=Kreiraj/izmjeni ugovore/pretplate
     Permission163=Aktiviraj uslugu/pretplatu ugovora
    @@ -725,7 +735,7 @@ Permission187=Zatvori narudžbu dobavljača
     Permission188=Otkaži narudžbu dobavljača
     Permission192=Kreiraj stavke
     Permission193=Otkaži stavke
    -Permission194=Čitaj protočnost stavaka
    +Permission194=Read the bandwidth lines
     Permission202=Kreiraj ADSL sapajanje
     Permission203=Naruči narudžbe spajanja
     Permission204=Narudžba spajanja
    @@ -750,12 +760,12 @@ Permission244=Vidi sadržaj skrivenih kategorija
     Permission251=Čitaj ostale korisnike i grupe
     PermissionAdvanced251=Čitaj ostale korisnike
     Permission252=Čitaj dozvole ostalih korisnika
    -Permission253=Kreiraj/izmjeni druge korisnike, grupe i dozvole
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Kreiraj/izmjeni interne/vanjske korisnike i dozvole
     Permission254=Kreiraj/izmjeni samo vanjske korisnike
     Permission255=Izmjeni lozinku ostalih korisnika
     Permission256=Obriši ili isključi ostale korisnike
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Čitaj CA
     Permission272=Čitaj račune
     Permission273=Izdaj račun
    @@ -765,7 +775,7 @@ Permission283=Obriši kontakte
     Permission286=Izvezi kontakte
     Permission291=Čitaj tarife
     Permission292=Postavi dozvole na tarifama
    -Permission293=Izmjeni tarife kupaca
    +Permission293=Modify customers tariffs
     Permission300=Čitaj barkodove
     Permission301=Kreiraj/izmjeni barkodove
     Permission302=Obriši barkodove
    @@ -787,11 +797,9 @@ Permission401=Čitaj popuste
     Permission402=Kreiraj/izmjeni popuste
     Permission403=Ovjeri popuste
     Permission404=Obriši popuste
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Obriši plaće
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Izvoz plaća
     Permission520=Čitaj kredite
     Permission522=Kreiraj/izmjeni kredite
    @@ -844,8 +852,8 @@ Permission1251=Pokreni masovni uvoz vanjskih podataka u bazu (učitavanje podata
     Permission1321=Izvezi račune kupaca, atribute i plačanja
     Permission1322=Reopen a paid bill
     Permission1421=Izvezi narudžbe kupaca i atribute
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Obriši zahtjeve odsutnosti
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Čitaj sredstva
     Permission63002=Kreiraj/izmjeni sredstva
     Permission63003=Obriši sredstva
     Permission63004=Poveži sredstava sa događajima agende
    -DictionaryCompanyType=Tipovi komitenata
    -DictionaryCompanyJuridicalType=Zakonski okviri za komitente
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Razina potencijalnog kupca
     DictionaryCanton=Država/provincija
     DictionaryRegion=Regije
    @@ -892,9 +900,9 @@ DictionaryActions=Tipovi događaja agende
     DictionarySocialContributions=Tipovi Društveni ili fiskalnih poreza
     DictionaryVAT=Stope PDV-a ili stope prodajnih poreza
     DictionaryRevenueStamp=Amount of tax stamps
    -DictionaryPaymentConditions=Uvjeti plaćanja
    -DictionaryPaymentModes=Naćini plaćanja
    -DictionaryTypeContact=Tipovi Kontakata/adresa
    +DictionaryPaymentConditions=Rok plaćanja
    +DictionaryPaymentModes=Načini plaćanja
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Formati papira
    @@ -902,53 +910,53 @@ DictionaryFormatCards=Cards formats
     DictionaryFees=Expense report - Types of expense report lines
     DictionarySendingMethods=Metode isporuke
     DictionaryStaff=Zaposlenici
    -DictionaryAvailability=Kašnjenje isporuke
    +DictionaryAvailability=Rok isporuke
     DictionaryOrderMethods=Metode naručivanja
     DictionarySource=Porjeklo ponuda/narudžbi
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Modeli za grafikone računa
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Predlošci e-pošte
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Jedinice
     DictionaryProspectStatus=Status prospekcije
    -DictionaryHolidayTypes=Tipovi odsustva
    -DictionaryOpportunityStatus=Status šanse za projekt/prednost
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Postavi spremljeno
     SetupNotSaved=Setup not saved
     BackToModuleList=Povratak na popis modula
    -BackToDictionaryList=Povratak na popis definicija
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Upravljanje PDV
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Stopa
     LocalTax1IsNotUsed=Nemoj koristit drugi porez
    -LocalTax1IsUsedDesc=Koristi drugi porez (osim PDV)
    -LocalTax1IsNotUsedDesc=Nemoj koristiti drugi tip poreza (osim PDV)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Tip drugog poreza
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Nemoj koristiti treći porez
    -LocalTax2IsUsedDesc=Koristi treći porez (osim PDV)
    -LocalTax2IsNotUsedDesc=Nemoj koristiti treći tip poreza (osim PDV)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Tip trećeg poreza
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= Upravljenje RE
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= Kao zadano preporučeni RE je 0. Kraj prvila.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= Upravljanje IRPF
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= Kao zadano preporučeni IRPF je 0. Kraj prvila.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=Upravljenje RE
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Kao zadano preporučeni RE je 0. Kraj prvila.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=Upravljanje IRPF
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Kao zadano preporučeni IRPF je 0. Kraj prvila.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Izvještaji o lokalnim porezima
     CalcLocaltax1=Prodaja - Nabava
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Prodaja
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Oznake korištene kao zadane ako ne postoji prijevoda za kod
     LabelOnDocuments=Oznake na dokumentima
    -NbOfDays=Br. dana
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Na kraju mjeseca
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,19 +993,19 @@ DatabaseUser=Korisnik baze podataka
     DatabasePassword=Lozinka baze podataka
     Tables=Tabele
     TableName=Naziv tabele
    -NbOfRecord=Br. zapisa
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Tip upr. programa
     SummarySystem=Sažetak informacija o sistemu
     SummaryConst=Popis svih Dolibarr parametara podešavanja
    -MenuCompanySetup=Company/Organization
    +MenuCompanySetup=Tvrtka/Organizacija
     DefaultMenuManager= Upravitelj standardnog izbornika
     DefaultMenuSmartphoneManager=Upravitelj mobilnog izbornika
     Skin=Skin teme
     DefaultSkin=Zadani skin teme
     MaxSizeList=Maks. dužina za popis
     DefaultMaxSizeList=Zadana maks. dužina popisa
    -DefaultMaxSizeShortList=Zadana maks. dužina za kratke popise ( npr. na kartici kupca)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Poruka dana
     MessageLogin=Poruka na stranici za prijavu
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Stalni obrazac za pretraživanje na ljevom izborniku
     DefaultLanguage=Zadani jezik za korištenje (kod jezika)
     EnableMultilangInterface=Omogući višejezično sučelje
     EnableShowLogo=Prikaži logo na ljevom izborniku
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Tvrtka/Organizacija
    +CompanyIds=Company/Organization identities
     CompanyName=Naziv
     CompanyAddress=Adresa
     CompanyZip=PBR
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Vlasnik bankovnog računa %s
     BankModuleNotActive=Modul bankovnih računa nije omogučen
     ShowBugTrackLink=Prikaži poveznicu "<strong>%s</strong>"
     Alerts=Obavijesti
    -DelaysOfToleranceBeforeWarning=Tolerancija kašnjenja prije upozorenja
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolerancija kašnjenja (u danima) prije obavijesti o planiranim događajima (događaji agende) koji nisu još završeni
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolerancija kašnjenja (u danima) prije obavijesti o projektima koji nisu zatvoreni na vrijeme
    -Delays_MAIN_DELAY_TASKS_TODO=Tolerancija kašnjenja (u danima) prije obavijesti o planiranim događajima (projektni zadaci) koji nisu još završeni
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Tolerancija kašnjenja (u danima) prije obavijesti o narudžbama koje nisu još obrađene
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Tolerancija kašnjenja (u danima) prije obavijesti o ponudama za zatvaranje
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Tolerancija kašnjenja (u danima) prije obavijesti o ponudama koje nisu naplačene
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerancija kašnjenja (u danima) prije obavijesti o uslugama za aktivaciju
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerancija kašnjenja (u danima) prije obavijesti o isteklim uslugama
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerancija kašnjenja (u danima) prije obavijesti o neplaćenim računima dobavljača
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerancija kašnjenja (u danima) prije obavijesti o neplaćenim računima kupaca
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerancija kašnjenja (u danima) prije obavijesti o usklađivanju s bankom u tijeku
    -Delays_MAIN_DELAY_MEMBERS=Tolerancija kašnjenja (u danima) prije obavijesti o zakašnjelim članarinama
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerancija kašnjenja (u danima) prije obavijesti za napraviti čekovne pologe
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerancija kašnjenja (u danima) prije obavijesti za odobravanje izvještaja troška
    -SetupDescription1=Sučelje postavki je za inicijalnu podešavanje parametara prije korištenja Dolibarr-a.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Ostale stavke izbornika upravljaju dodatnim parametrima.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Pregled sigurnosnih događaja
     Audit=Revizija
     InfoDolibarr=O Dolibarr instalaciji
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Dostupne aplikacije/moduli
     ToActivateModule=Za aktivaciju modula, idite na podešavanja (Naslovna->Podešavanje->Moduli).
     SessionTimeOut=Istek za sesije
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Unesite sve referentne podatke. Možete postaviti svoje vrijednos
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=Svi ostali sigurnosni parametri su definirani ovdje.
     LimitsSetup=Podešavanje limita/preciznosti
    -LimitsDesc=Ovdje možete podesiti limite, preciznost i optimizaciju korištenu u Dolibarr-u
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Maks. decimala za jediničnu cijenu
     MAIN_MAX_DECIMALS_TOT=Maks. decimala za ukupnu cijenu
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Neto jedinična cijena proizvoda
     TotalPriceAfterRounding=Ukupna cijena (neto/PDV/uklj. porez) nakon zaokruživanja
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Provjerite vaše postavke lokalnog sendmail-a
     BackupDesc=Za kreiranje kompletnog backupa, morate:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Arhivirani direktorij treba biti spremljen na sigurno mjesto.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Za vraćanje backupa morate:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL uvoz
     ForcedToByAModule= Ovo pravilo je forsirano na <b>%s</b> od aktiviranog modula
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL funkcije nisu dostupne u vašem PHP
     DownloadMoreSkins=Više skinova za skinuti
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Prikaži profesionalni ID s adresama na dokumentima
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Parcijalni prijevod
    -MAIN_DISABLE_METEO=Onemogući meteo pregled
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Testiraj prijavu na API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Vanjski pristup
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Dodatni atributi
     ExtraFieldsLines=Dodatni atributi (stavke)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Dodatni atributi (stavke narudžbe)
     ExtraFieldsSupplierInvoicesLines=Dodatni atributi (stavke računa)
    -ExtraFieldsThirdParties=Komplementarni atributi (komitenti)
    -ExtraFieldsContacts=Dodatni atributi (kontakt/adresa)
    +ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Dodatni atributi (član)
     ExtraFieldsMemberType=Dodatni atributi (tip člana)
     ExtraFieldsCustomerInvoices=Dodatni atributi (računi)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=samo alfanumerički i mala slova bez razmaka
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Putanja do dokumenata
     PathDirectory=Mapa
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Postavke prijevoda
     TranslationKeySearch=Pretraži prijevod po ključi ili tekstu
     TranslationOverwriteKey=Prepiši prevedeni tekst
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Prevedeni tekst
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=Novi prevedeni tekst za prikaz
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Morate omogućiti barem 1 modul
    -ClassNotFoundIntoPathWarning=Klasa %s nije pronađena u PHP putanji
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Da u ljeto
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Stanje je trenutno %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Optimizacija pretrage
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Zatraži za preferiranu metodu slanja za komitente.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Izdanje polja %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Uzmi barkod
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Vrati lozinku prema vašoj osobno postavljenoj konfiguraciji.
     SetupPerso=Sukladno vašoj konfiguraciji
     PasswordPatternDesc=Opis uzorka lozinke
    @@ -1195,23 +1205,23 @@ UserMailRequired=E-pošta je obavezna za kreiranje novog korisnika
     HRMSetup=Podešavanje modula HRM
     ##### Company setup #####
     CompanySetup=Podešavanje modula tvrtke
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* po korisniku, jedan po jedan.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* ili podešavanjem globalnih ciljanih adresa e-pošte u postavkama modula.
    -ModelModules=Predlošci dokumenata
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vodeni žig na skici dokumenta
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Pravila za profesionalne ID
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Mora biti jedinstven?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Obavezno za knjiženje računa?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Izvoz poveznice u <b>%s</b> formatu je dostupno na sljedećoj poveznici: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Izvoz poveznice u <b>%s</b> formatu je dostupno na sljede
     BillsSetup=Podešavanje modula računa
     BillsNumberingModule=Način označavanja računa i odobrenja
     BillsPDFModules=Model dokumenata računa
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Odobrenje
     CreditNotes=Odobrenja
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Upravljanje prijavom svakog korisnika
     AdherentMailRequired=E-pošta je potrebna za kreiranje novog člana
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Podešavanje LDAP
     LDAPGlobalParameters=Globalni parametri
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Testiranje LDAP pretraživanja
     LDAPSynchroOK=Testiranje sinhronizacije je uspješno
     LDAPSynchroKO=Neuspješno testiranje sinhronizacije
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP veza na LDAP server uspješna (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP veza na LDAP server neuspješna (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server podešen za verziju 3
     LDAPSetupForVersion2=LDAP server podešen za verziju 2
     LDAPDolibarrMapping=Dolibarr mapiranje
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Prijava (samba, activedirectory)
     LDAPFieldLoginSambaExample=Primjer : samaccountname
     LDAPFieldFullname=Puno ime
     LDAPFieldFullnameExample=Primjer : cn
    -LDAPFieldPasswordNotCrypted=Lozinka nije kriptirana
    -LDAPFieldPasswordCrypted=Lozinka kriptirana
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Primjer : userPassword
     LDAPFieldCommonNameExample=Primjer : cn
     LDAPFieldName=Naziv
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Podešavanje modula proizvoda
     ServiceSetup=Podešavanje modula usluga
     ProductServiceSetup=Podešavanje modula Proizvoda i usluga
     NumberOfProductShowInSelect=Maks. broj proizvoda u odabiru ( 0= bez limita)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Zadani tip barkoda za korištenje kod proizvoda
     SetDefaultBarcodeTypeThirdParties=Zadani tip barkoda za korištenje kod komitenta
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Podešavanje modula slanja
     SendingsReceiptModel=Model primke slanja
     SendingsNumberingModules=Način označavanja slanja
     SendingsAbility=Podrži liste isporuke za dostave kupcima
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Slobodan unos teksta kod isporuka
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Način označavanja primke proizvoda
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Napredni uređivač
     ActivateFCKeditor=Aktiviraj napredni uređivač za: 
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Izbornik obrisan
     Menus=Izbornici
    @@ -1548,7 +1561,7 @@ DetailRight=Uvjet za prikaz neautoroziranih sivih izbornika
     DetailLangs=Jezična datoteka za oznakz koda prijevoda
     DetailUser=Interni / Vanjski / Svi
     Target=Cilj
    -DetailTarget=Cilj za poveznice (_blank otvara u novom prozoru)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Promjena izbornika
     DeleteMenu=Obriši stavku izbornika
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=PDV koji dospjeva: <br>- kod isporuke dobara (koristimo dat
     OptionVatDebitOptionDesc=PDV koji dospjeva: <br>- kod isporuke dobara (koristimo datum računa)<br>-kod računa (zaduženja) za usluge
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Vrijeme PDV obaveze zadano ovisno o odabranim opcijama:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Po isporuci
     OnPayment=Po uplati
     OnInvoice=Po računu
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Konto nabave
     AgendaSetup=Podešavanje modula događaja i agende
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Nemoj izvoziti događaj stariji od
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Postavi automatski ovaj tip događaja u filter pretraživanja na prikazu agende.
    -AGENDA_DEFAULT_FILTER_STATUS=Postavi automatski ovaj status u filter pretraživanja na prikazu agende.
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Koji tab želite da se otvori kod odabira izbornika Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Podešavanje modula ClickToDial
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Koristi samo "tel:" kod telefona
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=POS
     CashDeskSetup=Podešavanja modula POS
    -CashDeskThirdPartyForSell=Predefinirani generčki komitent za prodaju
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Zadani račun za prijem gotovinskih uplata
     CashDeskBankAccountForCheque= Zadani račun za prijem čekovnih uplata
     CashDeskBankAccountForCB= Zadani račun za prijem plačanja kreditnim karticama
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Forsiraj i ograniči skladište za skidanje zaliha
    -StockDecreaseForPointOfSaleDisabled=Skidanje zaliha iz POS-a je onemogućeno
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Skidanje zaliha na POS-u nije kompatibilno s upravljanjem lota
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Podešavanje modula zabilješki
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Podešavanje modula webservisa
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Način označavanja čekovnih primki
     MultiCompanySetup=Više poduzeća module podešavanje
     ##### Suppliers #####
     SuppliersSetup=Podešavanje modula dobavljača
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Način označavanja računa dobavljača
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Podešavanje modula projekata
     ProjectsModelModule=Model dokumenata projektnih izvještaja
     TasksNumberingModules=Način označavanja zadataka
     TaskModelModule=Model dokumenata izvještaja zadataka
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=Popis obavijesti po korisniku *
     ListOfNotificationsPerUserOrContact=Popis obavijesti po korisniku* ili po kontaktu **
     ListOfFixedNotifications=Popis stalnih obavijesti
    -GoOntoUserCardToAddMore=Idite na tab "Obavijesti" korisnika za dodavanje ili micanje obavijesti za korisnike
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Najviše dopušteno
     BackupDumpWizard=Čarobnjak za izradu backup-a baze podataka
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Boja poveznica
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Boja pozadine za parne redove u tablici
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Stopa prodajnog poreza
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Tip predloška
    -TemplateIsVisibleByOwnerOnly=Predložak je vidljiv samo vlasniku
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=Ispravak vremenske zone
    @@ -1735,10 +1749,10 @@ MailToSendInvoice=Računi za kupce
     MailToSendShipment=Isporuke
     MailToSendIntervention=Intervencije
     MailToSendSupplierRequestForQuotation=Quotation request
    -MailToSendSupplierOrder=Purchase orders
    -MailToSendSupplierInvoice=Vendor invoices
    +MailToSendSupplierOrder=Narudžbenice
    +MailToSendSupplierInvoice=Računi dobavljača
     MailToSendContract=Ugovori
    -MailToThirdparty=Komitenti
    +MailToThirdparty=Treće osobe
     MailToMember=Članovi
     MailToUser=Korisnici
     MailToProject=Projects page
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Predlošci za dokumente proizvoda
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=Vidi * napomenu za popis mogućih zamjenskih varijabli
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=Svi izdavači
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Dodaj ostale stranice ili usluge
     AddModels=Dodaj predloške dokumenta ili brojanja
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detekcija nije moguća
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Popis dostupnih APIa
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Odredišna stranica
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/hr_HR/commercial.lang b/htdocs/langs/hr_HR/commercial.lang
    index 92ee79f4b79..476106662da 100644
    --- a/htdocs/langs/hr_HR/commercial.lang
    +++ b/htdocs/langs/hr_HR/commercial.lang
    @@ -1,6 +1,6 @@
     # Dolibarr language file - Source file is en_US - commercial
    -Commercial=Komercijala
    -CommercialArea=Sučelje komercijale
    +Commercial=Trgovina
    +CommercialArea=Sučelje trgovine
     Customer=Kupac
     Customers=Kupci
     Prospect=Potencijalni kupac
    @@ -34,7 +34,7 @@ LastActionsToDo=Najstarijih %s nezavršenih akcija
     DoneAndToDoActions=Završeni i za odraditi 
     DoneActions=Završeni događaji
     ToDoActions=Nedovršeni događaji
    -SendPropalRef=Predaja ponude %s
    +SendPropalRef=Ponuda %s
     SendOrderRef=Predaja narudžbe %s
     StatusNotApplicable=Nije primjenjivo
     StatusActionToDo=Napraviti
    @@ -60,7 +60,7 @@ ActionAC_CLO=Zatvoren
     ActionAC_EMAILING=Masovno slanje e-pošte
     ActionAC_COM=Pošalji narudžbu kupca putem pošte
     ActionAC_SHIP=Pošalji dostavu putem pošte
    -ActionAC_SUP_ORD=Send purchase order by mail
    +ActionAC_SUP_ORD=Pošalji narudžbenicu e-poštom
     ActionAC_SUP_INV=Send vendor invoice by mail
     ActionAC_OTH=Ostalo
     ActionAC_OTH_AUTO=Automatski uneseni događaji
    @@ -72,8 +72,8 @@ StatusProsp=Status potencijalnog kupca
     DraftPropals=Skica ponude
     NoLimit=Bez ograničenja
     ToOfferALinkForOnlineSignature=Link for online signature
    -WelcomeOnOnlineSignaturePage=Welcome on the page to accept commerical proposals from %s
    +WelcomeOnOnlineSignaturePage=Welcome to the page to accept commercial proposals from %s
     ThisScreenAllowsYouToSignDocFrom=This screen allow you to accept and sign, or refuse, a quote/commercial proposal
     ThisIsInformationOnDocumentToSign=This is information on document to accept or refuse
    -SignatureProposalRef=Signature of quote/commerical proposal %s
    +SignatureProposalRef=Signature of quote/commercial proposal %s
     FeatureOnlineSignDisabled=Feature for online signing disabled or document generated before the feature was enabled
    diff --git a/htdocs/langs/hr_HR/companies.lang b/htdocs/langs/hr_HR/companies.lang
    index 41725e3b15d..4043a71cf24 100644
    --- a/htdocs/langs/hr_HR/companies.lang
    +++ b/htdocs/langs/hr_HR/companies.lang
    @@ -1,53 +1,53 @@
     # Dolibarr language file - Source file is en_US - companies
    -ErrorCompanyNameAlreadyExists=Ime poduzeća %s već postoji. Odaberite drugo.
    -ErrorSetACountryFirst=Odaberite prvo državu
    -SelectThirdParty=Odaberi komitenta
    -ConfirmDeleteCompany=Jeste li sigurni da želite obrisati ovu tvrtku i sve vezane informacije za nju?
    +ErrorCompanyNameAlreadyExists=Ime tvrtke %s već postoji. Odaberite drugo.
    +ErrorSetACountryFirst=Prvo odaberite državu
    +SelectThirdParty=Odaberi treću osobu
    +ConfirmDeleteCompany=Jeste li sigurni da želite obrisati ovu tvrtku i sve podatke vezane na nju?
     DeleteContact=Izbriši kontakt/adresu.
    -ConfirmDeleteContact=Jeste li sigurni da želite obrisati ovaj kontakt i sve informacije vezane za njega?
    -MenuNewThirdParty=Novi komitent
    -MenuNewCustomer=Novi kupac
    -MenuNewProspect=Novi potencijalni kupac
    -MenuNewSupplier=New vendor
    -MenuNewPrivateIndividual=Nova privatna osoba
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    -CreateThirdPartyOnly=Kreiraj komitenta
    -CreateThirdPartyAndContact=Create a third party + a child contact
    -ProspectionArea=Sučelje Potencijalnih kupaca
    -IdThirdParty=Komitent ID
    -IdCompany=ID Tvrtke
    -IdContact=Id kontakta
    +ConfirmDeleteContact=Jeste li sigurni da želite obrisati ovaj kontakt i sve podatke vezane na njega?
    +MenuNewThirdParty=Nova Treća Osoba
    +MenuNewCustomer=Novi Kupac
    +MenuNewProspect=Novi mogući kupac
    +MenuNewSupplier=Novi dobavljač
    +MenuNewPrivateIndividual=Nova fizička osoba
    +NewCompany=Nova tvrtka (mogući kupac, dobavljač)
    +NewThirdParty=Nova Treća Osoba (mogući kupac, dobavljač)
    +CreateDolibarrThirdPartySupplier=Izradi treću osobu (dobavljača)
    +CreateThirdPartyOnly=Izradi treću osobu
    +CreateThirdPartyAndContact=Izradi treću osobu i pripadajući kontakt
    +ProspectionArea=Sučelje mogućih kupaca
    +IdThirdParty=Oznaka treće osobe
    +IdCompany=Oznaka tvrtke
    +IdContact=Oznaka kontakta
     Contacts=Kontakti/Adrese
    -ThirdPartyContacts=Kontakti komitenta
    -ThirdPartyContact=Komitent kontakt/adresa
    +ThirdPartyContacts=Kontakti treće osobe
    +ThirdPartyContact=Kontakti/adrese treće osobe
     Company=Tvrtka
     CompanyName=Naziv tvrtke
     AliasNames=Alias (komercijala, zaštitni znak, ...)
    -AliasNameShort=Naziv aliasa
    +AliasNameShort=Alias Name
     Companies=Kompanije
    -CountryIsInEEC=Zemlja je unutar EU
    -ThirdPartyName=Naziv komitenta
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Komitent
    -ThirdParties=Komitenti
    +ThirdParty=Treća osoba
    +ThirdParties=Treće osobe
     ThirdPartyProspects=Potencijalni kupac
     ThirdPartyProspectsStats=Potencijalni kupci
     ThirdPartyCustomers=Kupci
     ThirdPartyCustomersStats=Kupci
     ThirdPartyCustomersWithIdProf12=Kupci sa %s ili %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Tip komitenta
    +ThirdPartyType=Type of company
     Individual=Privatna osoba
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Matična tvrtka
     Subsidiaries=Podružnice
     ReportByMonth=Report by month
     ReportByCustomers=Report by customer
     ReportByQuarter=Izvještaj po stopi
     CivilityCode=Kod uljudnosti
    -RegisteredOffice=Registriran ured
    +RegisteredOffice=Sjedište
     Lastname=Prezime
     Firstname=Ime
     PostOrFunction=Radno mjesto
    @@ -61,7 +61,7 @@ Region-State=Region - State
     Country=Država
     CountryCode=Šifra države
     CountryId=ID države
    -Phone=Telefon:
    +Phone=Telefon
     PhoneShort=Telefon
     Skype=Skype
     Call=Poziv
    @@ -73,14 +73,14 @@ No_Email=Odbija masovno slanje e-pošte
     Fax=Faks
     Zip=Poštanski broj
     Town=Grad
    -Web=Web
    +Web=Mreža
     Poste= Pozicija
    -DefaultLang=Primarni jezik
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Ponude
    @@ -110,12 +110,12 @@ ProfId3Short=Prof. id 3
     ProfId4Short=Prof. id 4
     ProfId5Short=Prof. id 5
     ProfId6Short=Prof. id 6
    -ProfId1=Professional ID 1
    -ProfId2=Professional ID 2
    -ProfId3=Professional ID 3
    -ProfId4=Professional ID 4
    -ProfId5=Professional ID 5
    -ProfId6=Professional ID 6
    +ProfId1=Sjedište banke
    +ProfId2=Tekući račun
    +ProfId3=VAT N°
    +ProfId4=Upis
    +ProfId5=MBS
    +ProfId6=MB
     ProfId1AR=Prof Id 1 (CUIT/CUIL)
     ProfId2AR=Prof Id 2 (Revenu brutes)
     ProfId3AR=-
    @@ -258,8 +258,8 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    -VATIntraShort=Tax ID
    +VATIntra=Sales Tax/VAT ID
    +VATIntraShort=OIB
     VATIntraSyntaxIsValid=Sintaksa je u redu
     VATReturn=VAT return
     ProspectCustomer=Potencijalni / Kupac
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Ovaj kupac ima predefiniran popust od <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Ovaj kupac nema predefiniran relativni popust
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Ovaj kupac još uvijek ima odobrenje za <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,9 +287,9 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Ništa
    -Supplier=Dobavljač
    +Supplier=Vendor
     AddContact=Kreiraj kontakt
    -AddContactAddress=Kreiraj kontakt/adresu
    +AddContactAddress=Izradi kontakt/adresu
     EditContact=Uredi kontakt
     EditContactAddress=Uredi kontakt/adresu
     Contact=Kontakt
    @@ -303,22 +303,22 @@ AddThirdParty=Kreiraj komitenta
     DeleteACompany=Izbriši tvrtku
     PersonalInformations=Osobni podaci
     AccountancyCode=Obračunski račun
    -CustomerCode=Kod kupca
    -SupplierCode=Vendor code
    -CustomerCodeShort=Kod kupca
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Kod kupca, jedinstven za sve kupce
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Oznaka kupca
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Oznaka kupca
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Obavezno ako je komitent kupac ili potencijalni kupac
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Odobravanje kontrolirano modulom
    -ThisIsModuleRules=Ovo su pravila za ovaj modul
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Potencijalni kupac u kontakt
     CompanyDeleted=Tvrtka "%s" izbrisana iz baze.
     ListOfContacts=Popis kontakata/adresa
     ListOfContactsAddresses=Popis kontakata/adresa
    -ListOfThirdParties=Popis komitenata
    -ShowCompany=Show third party
    +ListOfThirdParties=Popis trećih osoba
    +ShowCompany=Show Third Party
     ShowContact=Prikaži kontakt
     ContactsAllShort=Sve(bez filtera)
     ContactType=Tip kontakta
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Ovaj kontakt nije kontakt za bilo koju ponudu
     NoContactForAnyContract=Ovaj kontakt nije kontakt za nikakav ugovor
     NoContactForAnyInvoice=Ovaj kontakt nije kontakt za nikakav račun
     NewContact=Novi kontakt
    -NewContactAddress=Novi kontakt/adresa
    +NewContactAddress=New Contact/Address
     MyContacts=Moji kontakti
     Capital=Kapital
    -CapitalOf=Kapital od %s
    +CapitalOf=Temeljna vrijednost %s
     EditCompany=Uredi tvrtku
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Ček
    -VATIntraCheckDesc=Poveznica <b>%s</b> dozvoljava upit servis za provjeru poreznog broja u EU VIES. Potreban je pristup internetu kako bi ovaj servis radio.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Provjeri OIB na EU VIES
    -VATIntraManualCheck=Također možete provjeriti ručno na stranici <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Provjera nije moguća. Servis za provjeru nije pružena od strane države članice (%s).
    -NorProspectNorCustomer=Niti potencijalni, niti kupac
    -JuridicalStatus=Zakonski okvir
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Zaposlenih
     ProspectLevelShort=Potencijal
     ProspectLevel=Potencijalni kupac
    @@ -387,12 +387,12 @@ ExportCardToFormat=Izvezi karticu u formatu
     ContactNotLinkedToCompany=Kontakt nije povezan ni sa jednim komitentom
     DolibarrLogin=Dolibarr korisničko ime
     NoDolibarrAccess=Nema pristup Dolibarr-u
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Kontakti i svojstva
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Treće osobe (tvrtke/zaklade/fizičke osobe) i njihove osobine
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Treće osobe (tvrtke/zaklade/fizičke osobe) i njihove osobine
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bankovni računi trećih osoba
    +ImportDataset_company_4=Prodajni predstavnici trećih osoba (pridruživanje predstavnika/korisnika tvrtkama)
     PriceLevel=Razina cijene
     DeliveryAddress=Adresa dostave
     AddAddress=Dodaj adresu
    @@ -402,33 +402,33 @@ DeleteFile=Izbriši datoteku
     ConfirmDeleteFile=Jeste li sigurni da želite obrisati ovu datoteku?
     AllocateCommercial=Dodjeljeno prodajnom predstavniku
     Organization=Organizacija
    -FiscalYearInformation=Informacije za fiskalnu godinu
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Početni mjesec fiskalne godine
    -YouMustAssignUserMailFirst=Morate prvo kreirati e-poštu za ovog korisnika kako biste mogli dodati njegove obavijesti putem e-pošte.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Kako biste bili u mogućnosti dodavanja obavijesti e-poštom, prvo morate definirati kontakt s valjanom adresom e-pošte za komitenta
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Lista potencijalnih kupaca
    -ListCustomersShort=Lista kupaca
    -ThirdPartiesArea=Sučelje komitenata i kontakata
    -LastModifiedThirdParties=Zadnjih %s izmjenjenih komitenata
    -UniqueThirdParties=Ukupno jedinstvenih komitenata
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Treće osobe/Kontakti
    +LastModifiedThirdParties=Zadnjih %s izmijenjenih trećih osoba
    +UniqueThirdParties=Ukupno trećih osoba
     InActivity=Otvori
     ActivityCeased=Zatvoren
     ThirdPartyIsClosed=Third party is closed
     ProductsIntoElements=Popis proizvoda/usluga u %s
     CurrentOutstandingBill=Trenutno otvoreni računi
     OutstandingBill=Maksimalno za otvorene račune
    -OutstandingBillReached=Dosegnut maksimum neplačenih računa
    +OutstandingBillReached=Dosegnut maksimum neplaćenih računa
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Ova šifra je besplatne. Ova šifra se može modificirati u bilo koje vrijeme.
     ManagingDirectors=Ime vlasnika(ce) ( CEO, direktor, predsjednik uprave...)
     MergeOriginThirdparty=Dupliciran komitent (komitent koji želite obrisati)
    -MergeThirdparties=Spoji komitente
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    -ThirdpartiesMergeSuccess=Third parties have been merged
    +MergeThirdparties=Združi treće osobe
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
    +ThirdpartiesMergeSuccess=Treće osobe združene
     SaleRepresentativeLogin=Korisničko ime predstavnika
     SaleRepresentativeFirstname=Ime prodajnog predstavnika
     SaleRepresentativeLastname=Prezime prodajnog predstavnika
    -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +ErrorThirdpartiesMerge=Došlo je do greške tijekom brisanja treće osobe. Molim provjerite zapis. Izmjene su povraćene.
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/hr_HR/cron.lang b/htdocs/langs/hr_HR/cron.lang
    index 12342e7a76d..9e8813d0f36 100644
    --- a/htdocs/langs/hr_HR/cron.lang
    +++ b/htdocs/langs/hr_HR/cron.lang
    @@ -6,13 +6,13 @@ Permission23102 = Kreiraj/promjeni planirani posao
     Permission23103 = Obriši planirani posao
     Permission23104 = Pokreni planirani posao
     # Admin
    -CronSetup= Postavljanje upravljanja planiranih poslova
    +CronSetup=Postavljanje upravljanja planiranih poslova
     URLToLaunchCronJobs=URL to check and launch qualified cron jobs
     OrToLaunchASpecificJob=Ili za provjeru i pokretanje specifičnog posla
     KeyForCronAccess=Sigurnosni ključ za URL za pokretanje cron zadataka
     FileToLaunchCronJobs=Command line to check and launch qualified cron jobs
     CronExplainHowToRunUnix=U Unix okolini potrebno je korisititi sljedeći crontab unos za pokretanje komande svakih 5 minuta
    -CronExplainHowToRunWin=Na Microsoft(tm) Windows okolini možete koristiti Scheduled task alate za pokretanje komandi svakih 5 minuta
    +CronExplainHowToRunWin=On Microsoft(tm) Windows environment you can use Scheduled Task tools to run the command line each 5 minutes
     CronMethodDoesNotExists=Klasa %s ne sadrži niti jednu %s metodu
     CronJobDefDesc=Cron job profiles are defined into the module descriptor file. When module is activated, they are loaded and available so you can administer the jobs from the admin tools menu %s.
     CronJobProfiles=List of predefined cron job profiles
    @@ -41,8 +41,8 @@ CronMethod=Metoda
     CronModule=Modul
     CronNoJobs=Nema registriranih poslova
     CronPriority=Prioritet
    -CronLabel=Oznaka
    -CronNbRun=Br. pokretanja
    +CronLabel=Naziv
    +CronNbRun=No. launches
     CronMaxRun=Max number launch
     CronEach=Svakih
     JobFinished=Posao pokrenut i završen
    @@ -61,11 +61,11 @@ CronStatusInactiveBtn=Onemogući
     CronTaskInactive=Ovaj posao je onemogućen
     CronId=ID
     CronClassFile=Filename with class
    -CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module). <BR> For exemple to call the fetch method of Dolibarr Product object /htdocs/<u>product</u>/class/product.class.php, the value for module is<br><i>product</i>
    -CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory). <BR> For exemple to call the fetch method of Dolibarr Product object htdocs/product/class/<u>product.class.php</u>, the value for class file name is<br><i>product/class/product.class.php</i>
    -CronObjectHelp=The object name to load. <BR> For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is<br><i>Product</i>
    -CronMethodHelp=The object method to launch. <BR> For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is<br><i>fetch</i>
    -CronArgsHelp=The method arguments. <BR> For exemple to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be<br><i>0, ProductRef</i>
    +CronModuleHelp=Name of Dolibarr module directory (also work with external Dolibarr module). <BR> For example to call the fetch method of Dolibarr Product object /htdocs/<u>product</u>/class/product.class.php, the value for module is<br><i>product</i>
    +CronClassFileHelp=The relative path and file name to load (path is relative to web server root directory). <BR> For example to call the fetch method of Dolibarr Product object htdocs/product/class/<u>product.class.php</u>, the value for class file name is<br><i>product/class/product.class.php</i>
    +CronObjectHelp=The object name to load. <BR> For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for class file name is<br><i>Product</i>
    +CronMethodHelp=The object method to launch. <BR> For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for method is<br><i>fetch</i>
    +CronArgsHelp=The method arguments. <BR> For example to call the fetch method of Dolibarr Product object /htdocs/product/class/product.class.php, the value for paramters can be<br><i>0, ProductRef</i>
     CronCommandHelp=Sistemska komanda za pokretanje
     CronCreateJob=Kreiraj novi planirani posao
     CronFrom=Od
    @@ -79,5 +79,5 @@ CronCannotLoadObject=Class file %s was loaded, but object %s was not found into
     UseMenuModuleToolsToAddCronJobs=Idite na izbornik "Home - Admin tools - Scheduled jobs" za prikaz i uređivanje planiranih poslova.
     JobDisabled=Posao onemogućen
     MakeLocalDatabaseDumpShort=Lakalni backup baze
    -MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql' or 'pgsql'), 1, 'auto' or filename to build, number of backup files to keep
    +MakeLocalDatabaseDump=Create a local database dump. Parameters are: compression ('gz' or 'bz' or 'none'), backup type ('mysql', 'pgsql', 'auto'), 1, 'auto' or filename to build, number of backup files to keep
     WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run.
    diff --git a/htdocs/langs/hr_HR/errors.lang b/htdocs/langs/hr_HR/errors.lang
    index 695f343ce8f..98b9673e97f 100644
    --- a/htdocs/langs/hr_HR/errors.lang
    +++ b/htdocs/langs/hr_HR/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Računovodstveni modul nije aktiviran
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s je dodjeljen to drugom 
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Korisnički račun <b>%s</b> koji pokreće web server nema dozvolu za pokretanje
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/hr_HR/interventions.lang b/htdocs/langs/hr_HR/interventions.lang
    index 9050f20ad90..7f2c98237b5 100644
    --- a/htdocs/langs/hr_HR/interventions.lang
    +++ b/htdocs/langs/hr_HR/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervencije
     InterventionCard=Kartica intervencije
     NewIntervention=Nova intervencija
     AddIntervention=Kreiraj intervenciju
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Popis intervencija
     ActionsOnFicheInter=Akcije na intervencije
     LastInterventions=Zadnjih %s intervencija
    @@ -24,10 +25,10 @@ NameAndSignatureOfInternalContact=Ime i potpis osobe:
     NameAndSignatureOfExternalContact=Ime i potpis kupca:
     DocumentModelStandard=Standardni model dokumenta za intervencije
     InterventionCardsAndInterventionLines=Intervencije i stavke intervencija
    -InterventionClassifyBilled=Označi "Naplačeno"
    -InterventionClassifyUnBilled=Označi "Nenaplačeno"
    +InterventionClassifyBilled=Označi kao "zaračunato"
    +InterventionClassifyUnBilled=Označi kao "nezaračunato"
     InterventionClassifyDone=Classify "Done"
    -StatusInterInvoiced=Naplačeno
    +StatusInterInvoiced=Zaračunato
     SendInterventionRef=Podnošenje intervencije %s
     SendInterventionByMail=Pošalji intervenciju putem e-pošte
     InterventionCreatedInDolibarr=Intervencija %s kreirana
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Koristi trajanje usluge za intervencije generiran
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistika intervencija
    -NbOfinterventions=Br. kartica intervencija
    -NumberOfInterventionsByMonth=Br. intervencija po mjesecima (datum ovjere)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=ID Intervencije
    diff --git a/htdocs/langs/hr_HR/main.lang b/htdocs/langs/hr_HR/main.lang
    index 4e4383270ac..5a540b38d6f 100644
    --- a/htdocs/langs/hr_HR/main.lang
    +++ b/htdocs/langs/hr_HR/main.lang
    @@ -5,15 +5,15 @@ DIRECTION=ltr
     # stsongstdlight or cid0cs are for simplified Chinese
     # To read Chinese pdf with Linux: sudo apt-get install poppler-data
     FONTFORPDF=helvetica
    -FONTSIZEFORPDF=10
    +FONTSIZEFORPDF=9
     SeparatorDecimal=,
    -SeparatorThousand=None
    -FormatDateShort=%m/%d/%Y
    -FormatDateShortInput=%m/%d/%Y
    -FormatDateShortJava=MM/dd/yyyy
    -FormatDateShortJavaInput=MM/dd/yyyy
    -FormatDateShortJQuery=mm/dd/yy
    -FormatDateShortJQueryInput=mm/dd/yy
    +SeparatorThousand=.
    +FormatDateShort=%d/%m/%Y
    +FormatDateShortInput=%d/%m/%Y
    +FormatDateShortJava=dd/MM/yyyy
    +FormatDateShortJavaInput=dd/MM/yyyy
    +FormatDateShortJQuery=dd/mm/yyyy
    +FormatDateShortJQueryInput=dd/mm/yyyy
     FormatHourShortJQuery=HH:MI
     FormatHourShort=%I:%M %p
     FormatHourShortDuration=%H:%M
    @@ -24,136 +24,137 @@ FormatDateHourSecShort=%m/%d/%Y %I:%M:%S %p
     FormatDateHourTextShort=%b %d, %Y, %I:%M %p
     FormatDateHourText=%B %d, %Y, %I:%M %p
     DatabaseConnection=Veza s bazom podataka
    -NoTemplateDefined=Nema predloška za taj tip elektroničke pošte
    -AvailableVariables=Dostupne zamjenske varijable
    +NoTemplateDefined=Nema predloška za taj tip e-pošte
    +AvailableVariables=Dostupne zamjenske vrijednosti
     NoTranslation=Bez prijevoda
     Translation=Prijevod
    -NoRecordFound=Nema pronađenih bilješki
    -NoRecordDeleted=No record deleted
    +NoRecordFound=Spis nije pronađen
    +NoRecordDeleted=Spis nije izbrisan
     NotEnoughDataYet=Nedovoljno podataka
     NoError=Bez greške
     Error=Greška
     Errors=Greške
    -ErrorFieldRequired=Potrebno je '%s' polje
    +ErrorFieldRequired=Potrebno je polje '%s' 
     ErrorFieldFormat=Neispravna vrijednost u polju '%s'
     ErrorFileDoesNotExists=Datoteka %s ne postoji
    -ErrorFailedToOpenFile=Datoteka %s nije uspješno otvorena
    -ErrorCanNotCreateDir=Nemoguće kreirati mapu %s
    -ErrorCanNotReadDir=Nemogu pročitati mapu %s
    +ErrorFailedToOpenFile=Otvaranje datoteke %s nije uspjelo
    +ErrorCanNotCreateDir=Mapu %s nije moguće izraditi
    +ErrorCanNotReadDir=Mapu %s nije moguće otvoriti
     ErrorConstantNotDefined=Značajka %s nije određena
     ErrorUnknown=Nepoznata greška
     ErrorSQL=Greška na SQL-u
     ErrorLogoFileNotFound=Datoteka s logom '%s' nije pronađena
    -ErrorGoToGlobalSetup=Go to 'Company/Organization' setup to fix this
    +ErrorGoToGlobalSetup=Za popravak ovoga idi na postavke 'Tvrtka/Organizacija'
     ErrorGoToModuleSetup=Idite na postavke modula kako bi ste ovo popravili
     ErrorFailedToSendMail=Elektronska pošta nije poslana (pošiljatelj=%s, primatelj=%s)
     ErrorFileNotUploaded=Datoteka nije učitana. Proverite da veličina ne prelazi dozvoljenu, da imate slobodnog mjesta na disku i da u ovoj mapi nema datoteke sa istim imenom.
     ErrorInternalErrorDetected=Pronađena greška
    -ErrorWrongHostParameter=Krivi parametar host-a
    -ErrorYourCountryIsNotDefined=Zemlja nije definirana. Idite na Naslovnu-Podešavanje-Uređivanje i ispunite ponovo obrazac.
    -ErrorRecordIsUsedByChild=Neuspješno brisanje podatka. Ovaj podatak se koristi.
    -ErrorWrongValue=Neispravna vrijednost
    -ErrorWrongValueForParameterX=Neispravna vrijednost za parametar %s
    +ErrorWrongHostParameter=Kriva značajka poslužitelja
    +ErrorYourCountryIsNotDefined=Vaša zemlja nije upisana. Idite na početnu stranicu->postavke->uredi i ispunite obrazac ponovo. 
    +ErrorRecordIsUsedByChild=Ovaj spis se ne može obrisati. Postoji barem jedan vezani spis.
    +ErrorWrongValue=Pogrešna vrijednost
    +ErrorWrongValueForParameterX=Pogrešna vrijednost za značajku %s
     ErrorNoRequestInError=Nema zahtjeva s greškom
    -ErrorServiceUnavailableTryLater=Servis nije trenutno dostupan. Pokušajte kasnije.
    -ErrorDuplicateField=Dupla vrijednost za jedinstveno polje
    -ErrorSomeErrorWereFoundRollbackIsDone=Pronađene su greške. Vraćamo promjene.
    -ErrorConfigParameterNotDefined=Parametar <b>%s</b> nije definiran u Dolibarr konfiguracijskoj datoteci <b>conf.php</b>.
    -ErrorCantLoadUserFromDolibarrDatabase=Korisnik <b>%s</b> ne postoji u bazi.
    -ErrorNoVATRateDefinedForSellerCountry=Greška, nisu definirane porezne stope za zemlju '%s'.
    -ErrorNoSocialContributionForSellerCountry=Greška, nisu definirani društveni/fiskalni porezi za zemlju '%s'.
    +ErrorServiceUnavailableTryLater=Usluga trenutno nije dostupna. Pokušajte ponovo poslije.
    +ErrorDuplicateField=Dvostruka vrijednost za jedno polje
    +ErrorSomeErrorWereFoundRollbackIsDone=Pronađene su greške. Izmjene povućene.
    +ErrorConfigParameterNotDefined=Značajka <b>%s</b> nije određena u Dolibarr datoteci s postavkama <b>conf.php</b>.
    +ErrorCantLoadUserFromDolibarrDatabase=Korisnik <b>%s</b> ne postoji u bazi Dolibarra
    +ErrorNoVATRateDefinedForSellerCountry=Greška, za zemlju '%s' nisu upisane stope poreza
    +ErrorNoSocialContributionForSellerCountry=Greška, za zemlju '%s' nisu upisani društveni/fiskalni porezi.
     ErrorFailedToSaveFile=Greška, neuspješno snimanje datoteke.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    -NotAuthorized=Niste autorizirani za ovu akciju.
    -SetDate=Postavi datum
    +ErrorCannotAddThisParentWarehouse=Pokušavate izraditi skladište koje je već podskladište postojećeg.
    +MaxNbOfRecordPerPage=Najveći mogući broj bilješki po stranici
    +NotAuthorized=Niste ovlašteni da ovo učinite.
    +SetDate=Upiši datum
     SelectDate=Izaberi datum
    -SeeAlso=Vidi također %s
    +SeeAlso=Također vidi %s
     SeeHere=Vidi ovdje
     ClickHere=Klikni ovdje
    -Here=Here
    +Here=Ovdje
     Apply=Primjeni
    -BackgroundColorByDefault=Zadana boja pozadine
    +BackgroundColorByDefault=Osnovna boja pozadine
     FileRenamed=Ime datoteke uspješno promijenjeno
    -FileGenerated=The file was successfully generated
    -FileSaved=The file was successfully saved
    +FileGenerated=Datoteka je uspješno izrađena
    +FileSaved=Datoteka je uspješno snimljena
     FileUploaded=Datoteka je uspješno učitana
    -FileTransferComplete=File(s) was uploaded successfully
    -FilesDeleted=File(s) successfully deleted
    -FileWasNotUploaded=Datoteka je odabrana za prilogu ali nije još učitana. Klikni na "Priloži datoteku".
    -NbOfEntries=Br. unosa
    -GoToWikiHelpPage=Pročitajte Online pomoć ( potreban pristup Internetu)
    +FileTransferComplete=Datoteka(e) uspješno učitana
    +FilesDeleted=Datoteka(e) je uspješno izbrisana
    +FileWasNotUploaded=Datoteka za prilog je odabrana, ali još nije učitana. Klikni na "Priloži datoteku".
    +NbOfEntries=Broj unosa
    +GoToWikiHelpPage=Pročitajte Online pomoć (potreban pristup Internetu)
     GoToHelpPage=Pročitaj pomoć
     RecordSaved=Podatak spremljen
     RecordDeleted=Podatak obrisan
    -LevelOfFeature=Razina mogučnosti
    -NotDefined=Nije definirano
    -DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to <b>%s</b> in configuration file <b>conf.php</b>.<br>This means that the password database is external to Dolibarr, so changing this field may have no effect.
    +LevelOfFeature=Razina mogućnosti
    +NotDefined=Nije određeno
    +DolibarrInHttpAuthenticationSoPasswordUseless=Način ovjere vjerodostojnosti Dolibarra namješten je na <b>%s</b> u datoteci s postavkama<b>conf.php</b>.<br>To znači da je datoteka sa zaporkama odvojena od Dolibarra pa upisivanje u ovo polje neće imati učinka.
     Administrator=Administrator
    -Undefined=Nedefinirano
    -PasswordForgotten=Zaboravili ste lozinku?
    -NoAccount=No account?
    +Undefined=Neodređeno
    +PasswordForgotten=Zaboravili ste zaporku?
    +NoAccount=Nema računa?
     SeeAbove=Vidi iznad
    -HomeArea=Naslovna
    +HomeArea=Početna stranica
     LastConnexion=Posljednje spajanje
     PreviousConnexion=Prijašnje spajanje
    -PreviousValue=Prijašnja vrijednost
    +PreviousValue=Predhodna vrijednost
     ConnectedOnMultiCompany=Spojeno na okolinu
     ConnectedSince=Spojeno od
    -AuthenticationMode=Autentikacija
    -RequestedUrl=Requested URL
    -DatabaseTypeManager=Tip upravitelja bazom podataka
    -RequestLastAccessInError=Zadnja pogreška pristupa bazi
    -ReturnCodeLastAccessInError=Povratni kod za zadnju grešku pristupa bazi
    -InformationLastAccessInError=Informacije o zadnjoj grešci pristupa bazi
    -DolibarrHasDetectedError=Dolibarr je detektirao tehničku grešku
    -YouCanSetOptionDolibarrMainProdToZero=You can read log file or set option $dolibarr_main_prod to '0' in your config file to get more information.
    -InformationToHelpDiagnose=This information can be useful for diagnostic purposes (you can set option $dolibarr_main_prod to '1' to remove such notices)
    -MoreInformation=Više informacija
    -TechnicalInformation=Tehničke informacije
    -TechnicalID=Tehnički ID
    -NotePublic=Napomena (javna)
    -NotePrivate=Napomena (privatna)
    -PrecisionUnitIsLimitedToXDecimals=Dolibarr je podešen za ograničenje preciznosti jedinične cijene na <b>%s</b> decimala.
    +AuthenticationMode=Oblik ovjere vjerodostojnosti
    +RequestedUrl=Traženi URL
    +DatabaseTypeManager=Vrsta upravitelja bazom podataka
    +RequestLastAccessInError=Zadnja pogreška prilikom pristupa bazi
    +ReturnCodeLastAccessInError=Povratni podatak zadnje greške pristupa bazi
    +InformationLastAccessInError=Podaci o zadnjoj grešci pristupa bazi
    +DolibarrHasDetectedError=Dolibarr je pronašao tehničku grešku
    +YouCanSetOptionDolibarrMainProdToZero=Za više informacija pročitajte datoteku sa zapisima ili namjestite opciju $dolibarr_main_prod na "0" u datoteci s postavkama
    +InformationToHelpDiagnose=Ovaj podatak može biti koristan za traženje kvara (možete namjestiti opciju $dolibarr_main_prod na '1' kako bi isključili takva upozorenja)
    +MoreInformation=Više podataka
    +TechnicalInformation=Tehnički podac
    +TechnicalID=Tehnička iskaznica
    +NotePublic=Bilješka (javna)
    +NotePrivate=Bilješka (unutarnja)
    +PrecisionUnitIsLimitedToXDecimals=Dolibarr je podešen tako da prikazuje jedinične cijene na <b>%s</b> decimala.
     DoTest=Test
     ToFilter=Filter
     NoFilter=Bez filtera
    -WarningYouHaveAtLeastOneTaskLate=Upozorenje, imate najmanje jedan element koji je prekoračio toleranciju kašnjenja.
    +WarningYouHaveAtLeastOneTaskLate=Upozorenje, imate najmanje jednu sastavnicu koja je prekoračila dozvoljeno vrijeme kašnjenja.
     yes=da
     Yes=Da
     no=ne
     No=Ne
     All=Sve
    -Home=Početna
    +Home=Početna stranica
     Help=Pomoć
     OnlineHelp=Online pomoć
     PageWiki=Wiki stranica
     MediaBrowser=Preglednik medija
     Always=Uvijek
     Never=Nikad
    -Under=pod
    -Period=Period
    -PeriodEndDate=Krajnji datum za period
    +Under=ispod
    +Period=Razdoblje
    +PeriodEndDate=Zadnji datum razdoblja
     SelectedPeriod=Odabrano razdoblje
    -PreviousPeriod=Previous period
    -Activate=Aktiviraj
    -Activated=Aktivirano
    +PreviousPeriod=Predhodno razdoblje
    +Activate=Pokreni
    +Activated=Pokreni
     Closed=Zatvoreno
     Closed2=Zatvoreno
    -NotClosed=Not closed
    +NotClosed=Nije zatvoreno
     Enabled=Omogućeno
    -Deprecated=Zastarijelo
    +Enable=Omogući
    +Deprecated=Izgubilo vrijednost
     Disable=Onemogući
     Disabled=Onemogućeno
     Add=Dodaj
    -AddLink=Dodaj vezu
    +AddLink=Dodaj poveznicu
     RemoveLink=Makni poveznicu
     AddToDraft=Dodaj u skice
     Update=Nadogradi
     Close=Zatvori
    -CloseBox=Makni dodatak sa vaše kontrolne ploče
    +CloseBox=Makni prozorčić s početne stranice
     Confirm=Potvrdi
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Jeste li sigurni da želite poslati zadržaj kartice<b>%s</b> e-poštom?
     Delete=Obriši
     Remove=Makni
     Resiliate=Prekini
    @@ -163,17 +164,17 @@ Edit=Uredi
     Validate=Ovjeri
     ValidateAndApprove=Ovjeri i odobri
     ToValidate=Za ovjeru
    -NotValidated=Not validated
    +NotValidated=Nije ovjereno
     Save=Spremi
     SaveAs=Spremi kao
     TestConnection=Provjera veze
     ToClone=Kloniraj
     ConfirmClone=Odaberite podatke koje želite klonirati:
    -NoCloneOptionsSpecified=Nisu definirani podaci za kloniranje.
    +NoCloneOptionsSpecified=Podaci za kloniranje nisu izabrani.
     Of=od
     Go=Idi
     Run=Pokreni
    -CopyOf=Kopija od
    +CopyOf=Preslik od
     Show=Prikaži
     Hide=Sakrij
     ShowCardHere=Prikaži karticu
    @@ -188,92 +189,92 @@ ToLink=Poveznica
     Select=Odaberi
     Choose=Izaberi
     Resize=Promjeni veličinu
    -ResizeOrCrop=Resize or Crop
    +ResizeOrCrop=Izmjena veličine ili obrezivanje
     Recenter=Centriraj
    -Author=Autor
    +Author=Tvorac
     User=Korisnik
     Users=Korisnici
     Group=Grupa
     Groups=Grupe
    -NoUserGroupDefined=Nisu definirane grupe
    -Password=Lozinka
    -PasswordRetype=Ponovo upiši lozinku
    -NoteSomeFeaturesAreDisabled=Dosta mogućnosti/modula je onemogućeno u ovoj demonstraciji.
    +NoUserGroupDefined=Grupa korisnika nije izrađena
    +Password=Zaporka
    +PasswordRetype=Ponovi zaporku
    +NoteSomeFeaturesAreDisabled=Uzmite u obzir da je dosta mogućnosti i modula onemogućeno u ovom izlaganju.
     Name=Ime
     Person=Osoba
    -Parameter=Parametar
    -Parameters=Parametri
    +Parameter=Značajka
    +Parameters=Značajke
     Value=Vrijednost
     PersonalValue=Osobna vrijednost
    -NewObject=New %s
    +NewObject=Novi%s
     NewValue=Nova vrijednost
     CurrentValue=Trenutna vrijednost
    -Code=Kod
    +Code=Oznaka
     Type=Tip
     Language=Jezik
    -MultiLanguage=Višejezičnost
    +MultiLanguage=Višejezični
     Note=Napomena
     Title=Naslov
    -Label=Oznaka
    -RefOrLabel=Ref. ili oznaka
    +Label=Naziv
    +RefOrLabel=Broj ili oznaka
     Info=Dnevnik
     Family=Obitelj
     Description=Opis
     Designation=Opis
     Model=Predložak dokumenta
    -DefaultModel=Default doc template
    +DefaultModel=Osnovni doc predložak
     Action=Događaj
     About=O programu
     Number=Broj
     NumberByMonth=Broj po mjesecima
     AmountByMonth=Iznos po mjesecima
     Numero=Broj
    -Limit=Limit
    -Limits=Limiti
    +Limit=Granična vrijednost
    +Limits=Granične vrijednosti
     Logout=Odjava
    -NoLogoutProcessWithAuthMode=Nema mogučnosti aplikativnog odspajanja s <b>%s</b> načinom autentifikacije.
    +NoLogoutProcessWithAuthMode=S <b>%s</b> načinom provjere vjerodostojnosti nema primjenjive mogućnosti odspajanja
     Connection=Prijava
    -Setup=Podešavanje
    -Alert=Obavijest
    -MenuWarnings=Obavijesti
    +Setup=Postavke
    +Alert=Upozornje
    +MenuWarnings=Upozorenja
     Previous=Prijašnji
     Next=Sljedeći
     Cards=Kartice
     Card=Kartica
     Now=Sad
     HourStart=Početni sat
    -Date=Date
    +Date=Datum
     DateAndHour=Datum i vrijeme
     DateToday=Današnji datum
    -DateReference=Reference datum
    +DateReference=Datum veze
     DateStart=Početni datum
     DateEnd=Završni datum
    -DateCreation=Datum kreiranja
    -DateCreationShort=Datum kreiranja
    +DateCreation=Datum izrada
    +DateCreationShort=Datum izrade
     DateModification=Datum izmjene
    -DateModificationShort=Datum izmj.
    -DateLastModification=Latest modification date
    +DateModificationShort=Datum izmjene
    +DateLastModification=Datum zadnje izmjene
     DateValidation=Datum ovjere
     DateClosing=Datum zatvaranja
    -DateDue=Datum dospjeća
    +DateDue=Datum dospijeća
     DateValue=Datum vrijednosti
     DateValueShort=Datum vrijednosti
    -DateOperation=Operativan datum
    -DateOperationShort=Oper. Datum
    -DateLimit=Datum limita
    +DateOperation=Datum postupka
    +DateOperationShort=Datum postupka
    +DateLimit=Krajnji datum
     DateRequest=Datum zahtjeva
     DateProcess=Datum obrade
    -DateBuild=Datum kreiranja izvještaja
    +DateBuild=Datum izrade izvještaja
     DatePayment=Datum plaćanja
     DateApprove=Datum odobrenja
     DateApprove2=Datum odobrenja (drugo odobrenje)
    -RegistrationDate=Registration date
    -UserCreation=Kreiranje korisnika
    +RegistrationDate=Datum prijave
    +UserCreation=Izrada korisnika
     UserModification=Izmjena korisnika
    -UserValidation=Validation user
    -UserCreationShort=Kreir. korisnika
    -UserModificationShort=izmj. korisnika
    -UserValidationShort=Valid. user
    +UserValidation=Ovjera korisnika
    +UserCreationShort=Izrada korisnika
    +UserModificationShort=Izmjena korisnika
    +UserValidationShort=Ovjereni korisnik
     DurationYear=godina
     DurationMonth=mjesec
     DurationWeek=tjedan
    @@ -303,20 +304,20 @@ Yesterday=Jučer
     Tomorrow=Sutra
     Morning=Ujutro
     Afternoon=Poslije podne
    -Quadri=Quadri
    -MonthOfDay=Mjesec dana
    +Quadri=Četvrtgodišnje
    +MonthOfDay=Jedan mjesec od dana
     HourShort=H
     MinuteShort=mn
     Rate=Stopa
    -CurrencyRate=Stopa konverzije valute
    -UseLocalTax=Porez uključen
    +CurrencyRate=Stopa pretvorbe valute
    +UseLocalTax=Uključi porez
     Bytes=Bytes
     KiloBytes=Kilobytes
     MegaBytes=Megabytes
     GigaBytes=Gigabytes
     TeraBytes=Terabytes
    -UserAuthor=User of creation
    -UserModif=User of last update
    +UserAuthor=Izradio korisnik
    +UserModif=Korisnik na zadnjoj izmjeni
     b=b.
     Kb=Kb
     Mb=Mb
    @@ -327,140 +328,140 @@ Copy=Kopiraj
     Paste=Zalijepi
     Default=Zadano
     DefaultValue=Zadana vrijednost
    -DefaultValues=Default values
    +DefaultValues=Početne vrijednosti/filteri/razvrstavanje
     Price=Cijena
    -PriceCurrency=Price (currency)
    +PriceCurrency=Cijena (u valuti)
     UnitPrice=Jedinična cijena
     UnitPriceHT=Jedinična cijena (neto)
    -UnitPriceHTCurrency=Unit price (net) (currency)
    +UnitPriceHTCurrency=Cijena po komadu (neto)(u valuti)
     UnitPriceTTC=Jedinična cijena
    -PriceU=J.C.
    -PriceUHT=J.C. (neto)
    +PriceU=Jed. cijena
    +PriceUHT=Jed. cijena
     PriceUHTCurrency=J.C. (valuta)
     PriceUTTC=J.C. (s porezom)
     Amount=Iznos
     AmountInvoice=Iznos računa
    -AmountInvoiced=Amount invoiced
    +AmountInvoiced=Zaračunati iznos
     AmountPayment=Iznos plaćanja
     AmountHTShort=Iznos (neto)
     AmountTTCShort=Iznos (s porezom)
    -AmountHT=Iznos (neto od poreza)
    +AmountHT=Iznos (bez poreza)
     AmountTTC=Iznos (s porezom)
     AmountVAT=Iznos poreza
    -MulticurrencyAlreadyPaid=Already payed, original currency
    -MulticurrencyRemainderToPay=Remain to pay, original currency
    -MulticurrencyPaymentAmount=Payment amount, original currency
    -MulticurrencyAmountHT=Iznos (neto od poreza), orginalna valuta
    -MulticurrencyAmountTTC=Iznos (s porezom), orginalna valuta
    -MulticurrencyAmountVAT=Iznos poreza, orginalna valuta
    +MulticurrencyAlreadyPaid=Već plaćeno, u izvornoj valuti
    +MulticurrencyRemainderToPay=Preostalo za platiti, u izvornoj valuti
    +MulticurrencyPaymentAmount=Iznos plaćanja, u izvornoj valuti
    +MulticurrencyAmountHT=Iznos (bez poreza), u izvornoj valuti
    +MulticurrencyAmountTTC=Iznos (s porezom), u izvornoj valuti
    +MulticurrencyAmountVAT=Iznos poreza, u izvornoj valuti
     AmountLT1=Iznos poreza 2
     AmountLT2=Iznos poreza 3
     AmountLT1ES=Iznos RE
     AmountLT2ES=Iznos IRPF
     AmountTotal=Ukupan iznos
     AmountAverage=Prosječan iznos
    -PriceQtyMinHT=Cijena količinska min. (neto od poreza)
    -PriceQtyMinHTCurrency=Price quantity min. (net of tax) (currency)
    +PriceQtyMinHT=Cijena za min. količinu (bez poreza)
    +PriceQtyMinHTCurrency=Cijena za min. količinu (bez poreza)(u valuti)
     Percentage=Postotak
     Total=Ukupno
    -SubTotal=Subtotal
    -TotalHTShort=Ukupno (neto)
    -TotalHTShortCurrency=Ukupno (neto u valuti)
    -TotalTTCShort=Ukupno (s porezom)
    -TotalHT=Ukupno (neto od poreza)
    -TotalHTforthispage=Ukupno (neto od poreza) za ovu stranicu
    -Totalforthispage=Ukupno za ovu stranicu
    -TotalTTC=Ukupno (s porezom)
    -TotalTTCToYourCredit=Ukupno (s porezom) na vaš kredit
    -TotalVAT=Ukupno porez
    -TotalVATIN=Total IGST
    +SubTotal=Sveukupno
    +TotalHTShort=Ukupno (bez poreza)
    +TotalHTShortCurrency=Ukupno (bez poreza u valuti)
    +TotalTTCShort=Ukupno s PDV-om
    +TotalHT=Ukupno bez PDV-a
    +TotalHTforthispage=Ukupno (bez poreza) na ovoj stranici
    +Totalforthispage=Ukupno na ovoj stranici
    +TotalTTC=Ukupno s PDV-om
    +TotalTTCToYourCredit=Ukupno s porezom na vaš račun
    +TotalVAT=Iznos PDV-a
    +TotalVATIN=Ukupno IGST
     TotalLT1=Ukupno porez 2
     TotalLT2=Ukupno porez 3
     TotalLT1ES=Ukupno RE
     TotalLT2ES=Ukupno IRPF
    -TotalLT1IN=Total CGST
    -TotalLT2IN=Total SGST
    -HT=Neto od poreza
    -TTC=Uklj. porez
    -INCVATONLY=Inc. VAT
    -INCT=Inc. all taxes
    -VAT=Prodajni porez
    +TotalLT1IN=Ukupno CGST
    +TotalLT2IN=Ukupno SGST
    +HT=Bez poreza
    +TTC=S porezom
    +INCVATONLY=S PDV-om
    +INCT=Zajedno sa svim porezima
    +VAT=PDV
     VATIN=IGST
    -VATs=Prodajni porezi
    -VATINs=IGST taxes
    -LT1=Sales tax 2
    -LT1Type=Sales tax 2 type
    -LT2=Sales tax 3
    -LT2Type=Sales tax 3 type
    +VATs=Porezi
    +VATINs=IGST porezi
    +LT1=Porez 2
    +LT1Type=Vrsta poreza 2
    +LT2=Porez 3
    +LT2Type=Vrsta poreza 3
     LT1ES=RE
     LT2ES=IRPF
    -LT1IN=CGST
    +LT1IN=CGTS
     LT2IN=SGST
     VATRate=Stopa poreza
    -VATCode=Tax Rate code
    -VATNPR=Tax Rate NPR
    -DefaultTaxRate=Default tax rate
    +VATCode=Oznaka stope poreza
    +VATNPR=Porezna stopa NPR
    +DefaultTaxRate=Osnovna stopa poreza
     Average=Prosjek
     Sum=Zbroj
     Delta=Delta
    -RemainToPay=Remain to pay
    +RemainToPay=Preostalo za platiti
     Module=Modul/Aplikacija
     Modules=Moduli/Aplikacije
     Option=Opcija
     List=Popis
    -FullList=Kompletan popis
    +FullList=Cijeli popis
     Statistics=Statistika
     OtherStatistics=Ostale statistike
    -Status=Status
    -Favorite=Favorit
    +Status=Stanje
    +Favorite=Omiljeno
     ShortInfo=Info.
    -Ref=Ref.
    -ExternalRef=Ref. vanjski
    -RefSupplier=Ref. vendor
    -RefPayment=Ref. plaćanja
    +Ref=Broj
    +ExternalRef=Vanjska oznaka
    +RefSupplier=Oznaka dobavljača
    +RefPayment=Oznaka plaćanja
     CommercialProposalsShort=Ponude
     Comment=Komentar
     Comments=Komentari
    -ActionsToDo=Događaji za napraviti
    -ActionsToDoShort=Za napraviti
    +ActionsToDo=Radnje za obaviti
    +ActionsToDoShort=Za učiniti
     ActionsDoneShort=Učinjeno
     ActionNotApplicable=Nije primjenjivo
     ActionRunningNotStarted=Za početi
    -ActionRunningShort=In progress
    +ActionRunningShort=U postupku
     ActionDoneShort=Završeno
    -ActionUncomplete=Nekompletno
    -LatestLinkedEvents=Latest %s linked events
    -CompanyFoundation=Company/Organization
    -Accountant=Accountant
    -ContactsForCompany=Kontakti komitenta
    -ContactsAddressesForCompany=Kontakti/adrese komitenta
    -AddressesForCompany=Adrese komitenta
    -ActionsOnCompany=Događaji povezani s komitentom
    -ActionsOnMember=Događaji za člana
    -ActionsOnProduct=Events about this product
    +ActionUncomplete=Nepotpuno
    +LatestLinkedEvents=Zadnjih %s povezanih radnji
    +CompanyFoundation=Tvrtka/Organizacija
    +Accountant=Računovođa
    +ContactsForCompany=Kontakti ove treće osobe
    +ContactsAddressesForCompany=Kontakti/adrese ove treće osobe
    +AddressesForCompany=Adrese ove treće osobe
    +ActionsOnCompany=Događaji povezani s ovom trećom osobom
    +ActionsOnMember=Događaji vezani uz ovog člana
    +ActionsOnProduct=Radnje vezane uz ovaj proizvod
     NActionsLate=%s kasni
    -ToDo=Za napraviti
    -Completed=Completed
    -Running=In progress
    -RequestAlreadyDone=Zahtjev je već pohranjen
    +ToDo=Za učiniti
    +Completed=Završeno
    +Running=U postupku
    +RequestAlreadyDone=Zahtjev je već zabilježen
     Filter=Filter
    -FilterOnInto=Kriterij pretraživanja '<strong>%s</strong>' unutar polja %s
    -RemoveFilter=Makni filter
    -ChartGenerated=Grafikon generiran
    -ChartNotGenerated=Grafikon nije generiran
    -GeneratedOn=Napravljeno %s
    -Generate=Generiraj
    +FilterOnInto=Način pretraživanja '<strong>%s</strong>' unutar polja %s
    +RemoveFilter=Ukloni filter
    +ChartGenerated=Grafikon izrađen
    +ChartNotGenerated=Grafikon nije izrađen
    +GeneratedOn=Izrađeno na temelju %s
    +Generate=Izradi
     Duration=Trajanje
     TotalDuration=Ukupno trajanje
     Summary=Sažetak
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    -NoOpenedElementToProcess=No opened element to process
    +DolibarrStateBoard=Statistika baze podataka
    +DolibarrWorkBoard=Stavke na čekanju
    +NoOpenedElementToProcess=Nema otvorenih radnji za provedbu
     Available=Dostupno
     NotYetAvailable=Nije još dostupno
     NotAvailable=Nije dostupno
    -Categories=Kategorije
    -Category=Kategorija
    +Categories=Oznake/skupine
    +Category=Oznaka/skupina
     By=Od
     From=Od
     to=za
    @@ -468,34 +469,34 @@ and=i
     or=ili
     Other=Ostalo
     Others=Ostali
    -OtherInformations=Ostale informacije
    +OtherInformations=Ostali podaci
     Quantity=Količina
    -Qty=Kol.
    -ChangedBy=Promjenio
    +Qty=Količina
    +ChangedBy=Promijenio
     ApprovedBy=Odobrio
     ApprovedBy2=Datum odobrenja (drugo odobrenje)
     Approved=Odobreno
     Refused=Odbijeno
    -ReCalculate=Rekalkuliraj
    -ResultKo=Greška
    -Reporting=Izvještavanje
    -Reportings=Izvještavanje
    +ReCalculate=Preračunaj
    +ResultKo=Neuspjeh
    +Reporting=Izvještaji
    +Reportings=Izvještaji
     Draft=Skica
     Drafts=Skice
     StatusInterInvoiced=
     Validated=Ovjereno
     Opened=Otvori
     New=Novo
    -Discount=Rabat
    +Discount=Popust
     Unknown=Nepoznat
    -General=Generalno
    +General=Opće
     Size=Veličina
    -OriginalSize=Original size
    +OriginalSize=Izvorna veličina
     Received=Primljeno
     Paid=Plaćeno
     Topic=Subjekt
    -ByCompanies=Od komitenata
    -ByUsers=By user
    +ByCompanies=Od treće osobe
    +ByUsers=Korisnik
     Links=Veze
     Link=Veza
     Rejects=Odbijanja
    @@ -504,20 +505,20 @@ NextStep=Sljedeći korak
     Datas=Podatak
     None=Niti jedan
     NoneF=Niti jedan
    -NoneOrSeveral=None or several
    +NoneOrSeveral=Niti jedan od nekoliko
     Late=Kasni
    -LateDesc=Kašnjenje za definiranje ako podatak kasni ili ne ovisno o vašim postavkama. Tražite administratora da promjeni kašnjenje iz izbornika Naslovna - Podešavanje - Obavijesti.
    -NoItemLate=No late item
    +LateDesc=Kasni li dokument ili ne ovisi o vašim postavkama. Izmjene može napraviti vaš administrator u početna stranica->postavke->upozorenja.
    +NoItemLate=Nema zakašnjelih stavaka
     Photo=Slika
     Photos=Slike
     AddPhoto=Dodaj sliku
     DeletePicture=Brisanje slike
     ConfirmDeletePicture=Potvrdi brisanje slike?
     Login=Prijava
    -LoginEmail=Login (email)
    -LoginOrEmail=Login or Email
    +LoginEmail=Korisničko ime (e-pošta)
    +LoginOrEmail=Korisničko ime ili e-pošta
     CurrentLogin=Trenutna prijava
    -EnterLoginDetail=Enter login details
    +EnterLoginDetail=Upiši podatke za prijavu
     January=Siječanj
     February=Veljača
     March=Ožujak
    @@ -530,18 +531,6 @@ September=Rujan
     October=Listopad
     November=Studeni
     December=Prosinac
    -JanuaryMin=Sje
    -FebruaryMin=Velj
    -MarchMin=Ožu
    -AprilMin=Tra
    -MayMin=Svi
    -JuneMin=Lip
    -JulyMin=Srp
    -AugustMin=Kol
    -SeptemberMin=Ruj
    -OctoberMin=Lis
    -NovemberMin=Stu
    -DecemberMin=Pro
     Month01=Siječanj
     Month02=Veljača
     Month03=Ožujak
    @@ -554,7 +543,7 @@ Month09=Rujan
     Month10=Listopad
     Month11=Studeni
     Month12=Prosinac
    -MonthShort01=Sje
    +MonthShort01=Sij
     MonthShort02=Velj
     MonthShort03=Ožu
     MonthShort04=Tra
    @@ -567,24 +556,24 @@ MonthShort10=Lis
     MonthShort11=Stu
     MonthShort12=Pro
     MonthVeryShort01=J
    -MonthVeryShort02=P
    -MonthVeryShort03=P
    +MonthVeryShort02=F
    +MonthVeryShort03=M
     MonthVeryShort04=A
    -MonthVeryShort05=P
    +MonthVeryShort05=M
     MonthVeryShort06=J
     MonthVeryShort07=J
     MonthVeryShort08=A
    -MonthVeryShort09=N
    +MonthVeryShort09=S
     MonthVeryShort10=O
     MonthVeryShort11=N
     MonthVeryShort12=D
     AttachedFiles=Priložene datoteke i dokumenti
    -JoinMainDoc=Join main document
    -DateFormatYYYYMM=YYYY-MM
    -DateFormatYYYYMMDD=YYYY-MM-DD
    -DateFormatYYYYMMDDHHMM=YYYY-MM-DD HH:SS
    +JoinMainDoc=Sjedini glavni dokument
    +DateFormatYYYYMM=MM-YYYY
    +DateFormatYYYYMMDD=DD-MM-YYYY HH:SS
    +DateFormatYYYYMMDDHHMM=DD-MM-YYYY HH:SS
     ReportName=Naziv izvještaja
    -ReportPeriod=Period izvještaja
    +ReportPeriod=Razdoblje izvještaja
     ReportDescription=Opis
     Report=Izvještaj
     Keyword=Ključna riječ
    @@ -595,15 +584,15 @@ Reset=Reset
     File=Datoteka
     Files=Datoteke
     NotAllowed=Nije dozvoljeno
    -ReadPermissionNotAllowed=Dozvola čitanja nije dozvoljena
    -AmountInCurrency=Iznos u %s valuti
    +ReadPermissionNotAllowed=Dozvola za čitanje nije odobrena
    +AmountInCurrency=Valuta: %s
     Example=Primjer
     Examples=Primjeri
     NoExample=Nema primjera
     FindBug=Prijavi problem
    -NbOfThirdParties=Broj komitenta
    +NbOfThirdParties=Broj trećih osoba
     NbOfLines=Broj stavaka
    -NbOfObjects=Broj objekta
    +NbOfObjects=Broj predmeta
     NbOfObjectReferers=Broj povezanih stavaka
     Referers=Povezanih stavaka
     TotalQuantity=Ukupna količina
    @@ -612,9 +601,9 @@ DateFrom=Od %s
     DateUntil=Do %s
     Check=Provjeri
     Uncheck=Odznači
    -Internal=Interno
    +Internal=Unutarnje
     External=Vanjsko
    -Internals=Interno
    +Internals=Unutarnje
     Externals=Vanjsko
     Warning=Upozorenje
     Warnings=Upozorenja
    @@ -622,62 +611,64 @@ BuildDoc=Izradi dokument
     Entity=Okolina
     Entities=Subjekti
     CustomerPreview=Pregled kupca
    -SupplierPreview=Vendor preview
    -ShowCustomerPreview=Prikaži pregled kupca
    -ShowSupplierPreview=Show vendor preview
    -RefCustomer=Ref. kupca
    +SupplierPreview=Prikaz dobavljača
    +ShowCustomerPreview=Prikaži kupca
    +ShowSupplierPreview=Prikaži dobavljača
    +RefCustomer=Oznaka kupca
     Currency=Valuta
    -InfoAdmin=Informacije za administratore
    -Undo=Poništi
    +InfoAdmin=Podaci za administratore
    +Undo=Povrati
     Redo=Povrati
     ExpandAll=Proširi sve
    -UndoExpandAll=Poništi proširenje
    -SeeAll=See all
    +UndoExpandAll=Povrati proširenje
    +SeeAll=Prikaži sve
     Reason=Razlog
    -FeatureNotYetSupported=Mogučnost nije još podržana
    +FeatureNotYetSupported=Mogućnost još nije u upotrebi
     CloseWindow=Zatvori prozor
     Response=Odaziv
     Priority=Prioritet
    -SendByMail=Poslano putem e-pošte
    +SendByMail=Pošalji e-poštom
     MailSentBy=E-poštu poslao
     TextUsedInTheMessageBody=Tijelo e-pošte
    -SendAcknowledgementByMail=Pošalji e-poštu potvrde
    -SendMail=Send email
    +SendAcknowledgementByMail=Pošalji e-poštu s potvrdom primitka
    +SendMail=Pošalji e-poštu
     EMail=E-pošta
     NoEMail=Nema e-pošte
     Email=E-pošta
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Nema mobilnog telefona
     Owner=Vlasnik
    -FollowingConstantsWillBeSubstituted=Sljedeće konstante će biti zamjenjene sa odgovarajućom vrijednošću. 
    +FollowingConstantsWillBeSubstituted=Sljedeće konstante bit će zamjenjene s odgovarajućom vrijednošću. 
     Refresh=Osvježi
     BackToList=Povratak na popis
     GoBack=Idi nazad
    -CanBeModifiedIfOk=Može se mjenjanti ako je valjana
    -CanBeModifiedIfKo=Može se mjenjanti ako nije valjana
    -ValueIsValid=Vrijednost je u redu
    -ValueIsNotValid=Vrijednost nije u redu
    -RecordCreatedSuccessfully=Record created successfully
    -RecordModifiedSuccessfully=Podatak je uspješno izmjenjen
    -RecordsModified=%s zapis je promjenjen
    +CanBeModifiedIfOk=Može se mijenjanti ako je valjana
    +CanBeModifiedIfKo=Može se mijenjanti ako nije valjana
    +ValueIsValid=Vrijednost je valjana
    +ValueIsNotValid=Vrijednost nije valjana
    +RecordCreatedSuccessfully=Spis uspješno izrađen
    +RecordModifiedSuccessfully=Podatak je uspješno izmijenjen
    +RecordsModified=%s zapis je promijenjen
     RecordsDeleted=%s zapis je obrisan
    -AutomaticCode=Automatski kod
    -FeatureDisabled=Mogučnost onemogućena
    -MoveBox=Pomakni dodatak
    +AutomaticCode=Automatski izabran kod
    +FeatureDisabled=Mogućnost isključena
    +MoveBox=Pomakni prozorčić
     Offered=Ponuđeno
    -NotEnoughPermissions=Nemate dozvolu za ovu akciju
    -SessionName=Naziv sesije
    -Method=Metoda
    +NotEnoughPermissions=Nemate dozvolu za ovu radnju
    +SessionName=Naziv sjednice
    +Method=Način
     Receive=Primi
    -CompleteOrNoMoreReceptionExpected=Complete or nothing more expected
    +CompleteOrNoMoreReceptionExpected=Završeno ili bez drugih očekivanja
     ExpectedValue=Očekivana vrijednost
     CurrentValue=Trenutna vrijednost
    -PartialWoman=Parcijalno
    +PartialWoman=Djelomično
     TotalWoman=Ukupno
     NeverReceived=Nikad primljeno
     Canceled=Otkazano
    -YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
    -YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=Možete podesiti zadanu vrijednost koju koristite kada kreirate novi podatak u postavkama modula.
    +YouCanChangeValuesForThisListFromDictionarySetup=Vrijednosti ovog popisa možete izmjeniti u postavkama->rječnici
    +YouCanChangeValuesForThisListFrom=Vrijednosti ovog popisa možete izmjeniti u %s
    +YouCanSetDefaultValueInModuleSetup=Osnovne vrijednosti prilikom izrade novog dokumenta možete izraditi u postavkama sučelja
     Color=Boja
     Documents=Povezane datoteke
     Documents2=Dokumenti
    @@ -687,44 +678,44 @@ MenuECM=Dokumenti
     MenuAWStats=AWStats
     MenuMembers=Članovi
     MenuAgendaGoogle=Google agenda
    -ThisLimitIsDefinedInSetup=Dolibarr limit (Menu home-setup-security): %s Kb, PHP limit: %s Kb
    -NoFileFound=Nema spremljenih datoteka u ovoj mapi
    +ThisLimitIsDefinedInSetup=Granična vrijednost Dolibarra (Mapa početna->postavke->sigurnost): %s Kb, PHP granična vrijednost: %s Kb
    +NoFileFound=U ovoj mapi nema spremljenih datoteka
     CurrentUserLanguage=Trenutni jezik
     CurrentTheme=Trenutna tema
     CurrentMenuManager=Trenutni upravitelj izbornikom
     Browser=Preglednik
    -Layout=Layout
    -Screen=Screen
    +Layout=Izgled
    +Screen=Zaslon
     DisabledModules=Onemogućeni moduli
     For=Za
     ForCustomer=Za kupca
     Signature=Potpis
     DateOfSignature=Datum potpisa
    -HidePassword=Prikaži komandu sa skrivenom lozinkom
    -UnHidePassword=Prikaži stvarnu komandu s čitljivom lozinkom
    -Root=Root
    -Informations=Informacije
    +HidePassword=Prikaži naredbu sa skrivenom zaporkom
    +UnHidePassword=Prikaži stvarnu naredbu s čitljivom zaporkom
    +Root=Početna mapa
    +Informations=Podatak
     Page=Strana
    -Notes=Napomene
    +Notes=Bilješke
     AddNewLine=Dodaj novu stavku
     AddFile=Dodaj datoteku
    -FreeZone=Not a predefined product/service
    -FreeLineOfType=Not a predefined entry of type
    -CloneMainAttributes=Kloniraj objekt s svim glavnim atributima
    +FreeZone=Ovaj proizvod/usluga nije predhodno upisan
    +FreeLineOfType=Ova vrsta nije predhodno upisana
    +CloneMainAttributes=Kloniraj predmet sa svim glavnim svojstvima
     PDFMerge=Spoji PDF
     Merge=Spoji
    -DocumentModelStandardPDF=Standard PDF template
    +DocumentModelStandardPDF=Običan PDF predložak
     PrintContentArea=Prikaži stranicu za ispis
     MenuManager=Upravitelj izbornikom
    -WarningYouAreInMaintenanceMode=Upozorenje, nalazite se u načinu održavanja, tako da samo prijava <b>%s</b> je dozvoljeno za korištenje aplikacije.
    +WarningYouAreInMaintenanceMode=Upozorenje, sustav je na održavanju pa je jedino korisničkom imenu<b>%s</b> dopušteno korištenje programa.
     CoreErrorTitle=Sistemska greška
    -CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
    +CoreErrorMessage=Nažalost došlo je do greške. Kontaktirajte administratora da provjeri zapise ili isključi $dolibarr_main_prod=1 za više informacija.
     CreditCard=Kreditna kartica
     ValidatePayment=Ovjeri plaćanje
    -CreditOrDebitCard=Credit or debit card
    +CreditOrDebitCard=Kreditna ili debitna kartica
     FieldsWithAreMandatory=Polja s <b>%s</b> su obavezna
    -FieldsWithIsForPublic=Polja sa <b>%s</b> su prikazani na javnom popisu članova. Ako to ne želite, odznačite kučicu "javno".
    -AccordingToGeoIPDatabase=(sukladno GeoIP konverziji)
    +FieldsWithIsForPublic=Polja s <b>%s</b> prikazana su javno na popisu članova. Ako to ne želite, uklonite kvačicu iz kvadratića.
    +AccordingToGeoIPDatabase=(prema GeoIP pretvorbi)
     Line=Stavka
     NotSupported=Nije podržano
     RequiredField=Obavezno polje
    @@ -732,6 +723,8 @@ Result=Rezultat
     ToTest=Test
     ValidateBefore=Kartica mora biti ovjerena prije korištenja ove mogućnosti
     Visibility=Vidljivost
    +Totalizable=Sveukupno zbrojivo
    +TotalizableDesc=Ovo polje je sveukupno zbrojivo s popisa.
     Private=Privatno
     Hidden=Skriveno
     Resources=Sredstva
    @@ -742,70 +735,72 @@ After=Nakon
     IPAddress=IP adresa
     Frequency=Učestalost
     IM=Brzo slanje poruka
    -NewAttribute=Novi atribut
    -AttributeCode=Kod atributa
    +NewAttribute=Novo svojstvo
    +AttributeCode=Oznaka svojstva
     URLPhoto=URL slike/loga
    -SetLinkToAnotherThirdParty=Poveži sa drugim komitentom
    -LinkTo=Poveži sa
    -LinkToProposal=Poveži sa ponudom
    +SetLinkToAnotherThirdParty=Poveži s drugom trećom osobom
    +LinkTo=Poveži s
    +LinkToProposal=Poveži s ponudom
     LinkToOrder=Poveži s narudžbom
    -LinkToInvoice=Poveži sa računom
    +LinkToInvoice=Poveži s računom
    +LinkToTemplateInvoice=Poveznica na predložak računa
     LinkToSupplierOrder=Poveži s narudžbom dobavljača
    -LinkToSupplierProposal=Poveži sa ponudom dobavljača
    +LinkToSupplierProposal=Poveži s ponudom dobavljača
     LinkToSupplierInvoice=Poveži s računom dobavljača
    -LinkToContract=Poveži sa ugovorom
    -LinkToIntervention=Poveži sa intervencijom
    -CreateDraft=Kreiraj skicu
    +LinkToContract=Poveži s ugovorom
    +LinkToIntervention=Poveži s zahvatom
    +CreateDraft=Izradi skicu
     SetToDraft=Nazad na skice
     ClickToEdit=Klikni za uređivanje
    -EditWithEditor=Edit with CKEditor
    -EditWithTextEditor=Edit with Text editor
    -EditHTMLSource=Edit HTML Source
    -ObjectDeleted=Objekt %s obrisan
    -ByCountry=Po zemlji
    -ByTown=Po gradu
    -ByDate=Po datumu
    -ByMonthYear=Po mjesecu/godini
    -ByYear=Po godini
    -ByMonth=Po mjesecu
    -ByDay=Po danu
    -BySalesRepresentative=Prodajni predstavnik
    +ClickToRefresh=Click to refresh
    +EditWithEditor=Obradi s CKEditorom
    +EditWithTextEditor=Obradi s programom za obradu teksta
    +EditHTMLSource=Uredi HTML kod
    +ObjectDeleted=Predmet %s obrisan
    +ByCountry=Prema zemlji
    +ByTown=Prema gradu
    +ByDate=Prema datumu
    +ByMonthYear=Prema mjesecu/godini
    +ByYear=Prema godini
    +ByMonth=Prema mjesecu
    +ByDay=Prema danu
    +BySalesRepresentative=Prema prodajnom predstavniku
     LinkedToSpecificUsers=Povezano sa određenim kontaktom korisnika
     NoResults=Nema rezultata
    -AdminTools=Administracijski alati
    +AdminTools=Alati administratora
     SystemTools=Sistemski alati
     ModulesSystemTools=Alati modula
     Test=Test
    -Element=Element
    +Element=Sastavnica
     NoPhotoYet=Još nema dostupnih slika
     Dashboard=Kontrolna ploča
    -MyDashboard=My dashboard
    +MyDashboard=Početna stranica
     Deductible=Povratno
     from=od
    -toward=ispred
    +toward=prema
     Access=Pristup
    -SelectAction=Odaberi akciju
    -SelectTargetUser=Select target user/employee
    +SelectAction=Odaberi radnju
    +SelectTargetUser=Izaberi ciljanog korisnika/zaposlenika
     HelpCopyToClipboard=Koristi Ctrl+C za kopiranje u međuspremnik
     SaveUploadedFileWithMask=Spremite datoteku na server pod imenom  "<strong>%s</strong>" (u protivnom "%s")
    -OriginFileName=Orginalna datoteka
    -SetDemandReason=Postavi izvor
    +OriginFileName=Ime izvorne datoteke
    +SetDemandReason=Odredi izvor
     SetBankAccount=Postavi bankovni račun
     AccountCurrency=Valuta računa
    -ViewPrivateNote=Vidi napomene
    +ViewPrivateNote=Vidi bilješke
     XMoreLines=%s stavaka(e) skriveno
    -ShowMoreLines=Show more/less lines
    +ShowMoreLines=Prikaži više/manje redaka
     PublicUrl=Javni URL
     AddBox=Dodaj blok
    -SelectElementAndClick=Select an element and click %s
    +SelectElementAndClick=Izaberi sastavnicu i klikni %s
     PrintFile=Ispis datoteke %s
    -ShowTransaction=Show entry on bank account
    -ShowIntervention=Prikaži intervenciju
    +ShowTransaction=Prikaži upis na bankovni račun
    +ShowIntervention=Prikaži zahvat
     ShowContract=Prikaži ugovor
    -GoIntoSetupToChangeLogo=Idite na Home - Podešavanje - Tvrtka za promjenu logotipa ili idite na Home - Podešavanje - Prikaz za skrivanje.
    +GoIntoSetupToChangeLogo=Idite na početnu stranicu->tvrtka kako biste izmjenili logo ili na početnu stranicu->postavke->zaslon kako biste ga uklonili
     Deny=Odbij
     Denied=Odbijeno
    -ListOf=List of %s
    +ListOf=Popis od %s
     ListOfTemplates=Popis predložaka
     Gender=Spol
     Genderman=Muško
    @@ -813,64 +808,73 @@ Genderwoman=Žensko
     ViewList=Pregled popisa
     Mandatory=Obavezno
     Hello=Pozdrav
    -GoodBye=GoodBye
    -Sincerely=Srdačno
    +GoodBye=Doviđenja!
    +Sincerely=Srdačan pozdrav!
     DeleteLine=Obriši stavku
    -ConfirmDeleteLine=Jeste li sigurni da želite obrisati tu liniju?
    -NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    -NoRecordSelected=No record selected
    -MassFilesArea=Sučelje za datoteke stvorene masovnom akcijom
    +ConfirmDeleteLine=Jeste li sigurni da želite obrisati ovu stavku?
    +NoPDFAvailableForDocGenAmongChecked=Među spisima nije pronađen ni jedan izrađeni PDF
    +TooManyRecordForMassAction=Odabrano previše podataka za masovnu obradu. Obrada je zabranjena za popis od %s podataka.
    +NoRecordSelected=Ni jedan spis nije izabran
    +MassFilesArea=Sučelje za datoteke izrađene masovnom radnjama
     ShowTempMassFilesArea=Prikaži sučelje datoteka stvorenih masovnom akcijom
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    -RelatedObjects=Povezani objekti
    -ClassifyBilled=Označi kao naplaćena
    -ClassifyUnbilled=Classify unbilled
    +ConfirmMassDeletion=Potvrda brisanja
    +ConfirmMassDeletionQuestion=Jeste li sigurni da želite obrisati %s odabranih spisova?
    +RelatedObjects=Povezani predmeti
    +ClassifyBilled=Označi kao zaračunato
    +ClassifyUnbilled=Označi kao nezaračunato
     Progress=Napredak
     FrontOffice=Front office
     BackOffice=Back office
     View=Vidi
    -Export=Export
    -Exports=Exports
    -ExportFilteredList=Export filtered list
    -ExportList=Export list
    +Export=Izvoz podataka
    +Exports=Izvozi podataka
    +ExportFilteredList=Izvoz pročišćenog popisa
    +ExportList=Spis izvoza
     ExportOptions=Opcije izvoza
     Miscellaneous=Ostalo
     Calendar=Kalendar
    -GroupBy=sortiraj po...
    -ViewFlatList=View flat list
    -RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    -DirectDownloadLink=Direct download link (public/external)
    -DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
    -Download=Download
    -DownloadDocument=Download document
    -ActualizeCurrency=Update currency rate
    +GroupBy=Grupiraj prema...
    +ViewFlatList=Pregledaj popis bez grananja
    +RemoveString=Ukloni redak '%s'
    +SomeTranslationAreUncomplete=Neki od ponuđenih jezika možda su djelomično prevedeni ili sadrže greške. Molim vas pomozite ispraviti vaš jezik prijavom na <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>. Ne budite pizde!
    +DirectDownloadLink=Poveznica za izravno preuzimanje (dostupno javno)
    +DirectDownloadInternalLink=Poveznica za izravno preuzimanje (potrebna prijava i dopuštenje)
    +Download=Preuzimanje
    +DownloadDocument=Preuzimanje dokumenta
    +ActualizeCurrency=Upiši novi tečaj
     Fiscalyear=Fiskalna godina
    -ModuleBuilder=Module Builder
    -SetMultiCurrencyCode=Set currency
    -BulkActions=Bulk actions
    -ClickToShowHelp=Click to show tooltip help
    -WebSite=Website
    -WebSites=Web sites
    -WebSiteAccounts=Web site accounts
    +ModuleBuilder=Graditelj sučelja
    +SetMultiCurrencyCode=Odredi valutu
    +BulkActions=Opsežne radnje
    +ClickToShowHelp=Klikni za prikaz pomoći
    +WebSite=Internet stranica
    +WebSites=Internet stranice
    +WebSiteAccounts=Korisnici Internet stranica
     ExpenseReport=Izvještaj troška
     ExpenseReports=Izvještaji troška
     HR=HR
    -HRAndBank=HR and Bank
    -AutomaticallyCalculated=Automatically calculated
    -TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    -ImportId=Import id
    +HRAndBank=HR i banka
    +AutomaticallyCalculated=Automatski izračunato
    +TitleSetToDraft=Pretvori u skicu
    +ConfirmSetToDraft=Jeste li sigurni da želiti pretvoriti u skicu?
    +ImportId=Oznaka uvoza
     Events=Događaj
     EMailTemplates=Predlošci e-pošte
    -FileNotShared=File not shared to exernal public
    +FileNotShared=Datoteka se ne može dijeliti
     Project=Projekt
     Projects=Projekti
    +LeadOrProject=Plan | Projekt
    +LeadsOrProjects=Planovi | Projekti
    +Lead=Plan
    +Leads=Planovi
    +ListOpenLeads=Popis otvorenih planova
    +ListOpenProjects=Popis otvorenih projekata
    +NewLeadOrProject=Novi plan ili projekt
     Rights=Prava pristupa
    -LineNb=Line no.
    +LineNb=Redak br.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Ponedjeljak
     Tuesday=Utorak
    @@ -901,16 +905,16 @@ ShortFriday=P
     ShortSaturday=S
     ShortSunday=N
     SelectMailModel=Odaberi predložak elektroničke pošte
    -SetRef=Postavi ref.
    -Select2ResultFoundUseArrows=Some results found. Use arrows to select.
    +SetRef=Odredi oznaku
    +Select2ResultFoundUseArrows=Pronađeni neki rezultati. Koristi strelice za izbor.
     Select2NotFound=Ništa nije pronađeno
     Select2Enter=Unos
    -Select2MoreCharacter=ili još znakova
    +Select2MoreCharacter=ili više znakova
     Select2MoreCharacters=ili više znakova
    -Select2MoreCharactersMore=<strong>Search syntax:</strong><br><kbd><strong> |</strong></kbd><kbd> OR</kbd> (a|b)<br><kbd><strong>*</strong></kbd><kbd> Any character</kbd> (a*b)<br><kbd><strong>^</strong></kbd><kbd> Start with</kbd> (^ab)<br><kbd><strong>$</strong></kbd><kbd> End with</kbd> (ab$)<br>
    -Select2LoadingMoreResults=Učitaj više podataka...
    +Select2MoreCharactersMore=<strong>Pravila pretrage:</strong><br><kbd><strong> |</strong></kbd><kbd> ili</kbd> (a|b)<br><kbd><strong>*</strong></kbd><kbd> bilo koji znak</kbd> (a*b)<br><kbd><strong>^</strong></kbd><kbd> koji počinje</kbd> (^ab)<br><kbd><strong>$</strong></kbd><kbd> završava s</kbd> (ab$)<br>
    +Select2LoadingMoreResults=Učitavam više podataka...
     Select2SearchInProgress=Pretraživanje u tijeku...
    -SearchIntoThirdparties=Komitenti
    +SearchIntoThirdparties=Treće osobe
     SearchIntoContacts=Kontakti
     SearchIntoMembers=Članovi
     SearchIntoUsers=Korisnici
    @@ -918,33 +922,34 @@ SearchIntoProductsOrServices=Proizvodi ili usluge
     SearchIntoProjects=Projekti
     SearchIntoTasks=Zadaci
     SearchIntoCustomerInvoices=Računi za kupce
    -SearchIntoSupplierInvoices=Vendor invoices
    +SearchIntoSupplierInvoices=Računi dobavljača
     SearchIntoCustomerOrders=Narudžbe kupaca
    -SearchIntoSupplierOrders=Purchase orders
    +SearchIntoSupplierOrders=Narudžbenice
     SearchIntoCustomerProposals=Ponude kupca
    -SearchIntoSupplierProposals=Vendor proposals
    -SearchIntoInterventions=Intervencije
    +SearchIntoSupplierProposals=Ponude dobavljača
    +SearchIntoInterventions=Zahvati
     SearchIntoContracts=Ugovori
     SearchIntoCustomerShipments=Pošiljke kupcu
    -SearchIntoExpenseReports=Izvještaji troška
    -SearchIntoLeaves=Odsustva
    +SearchIntoExpenseReports=Troškovnici
    +SearchIntoLeaves=Napusti
     CommentLink=Komentari
    -NbComments=Number of comments
    -CommentPage=Comments space
    -CommentAdded=Comment added
    -CommentDeleted=Comment deleted
    +NbComments=Broj komentara
    +CommentPage=Prostor za komentare
    +CommentAdded=Komentar dodan
    +CommentDeleted=Komentar obrisan
     Everybody=Svi
    -PayedBy=Payed by
    -PayedTo=Payed to
    -Monthly=Monthly
    -Quarterly=Quarterly
    -Annual=Annual
    -Local=Local
    -Remote=Remote
    -LocalAndRemote=Local and Remote
    -KeyboardShortcut=Keyboard shortcut
    -AssignedTo=Dodjeljeno korisniku
    -Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    -FileSharedViaALink=File shared via a link
    -
    +PayedBy=Platio
    +PayedTo=Plaćeno
    +Monthly=Mjesečno
    +Quarterly=Četvrtgodišnje
    +Annual=Godišnje
    +Local=Lokalno
    +Remote=Vanjsko
    +LocalAndRemote=Lokalno i vanjsko
    +KeyboardShortcut=Kratica tipkovnice
    +AssignedTo=Dodijeljeno korisniku
    +Deletedraft=Obriši skicu
    +ConfirmMassDraftDeletion=Potvrda masovnog brisanja skica
    +FileSharedViaALink=Datoteka podijeljena putem poveznice
    +SelectAThirdPartyFirst=Prvo izaberite treću osobu...
    +YouAreCurrentlyInSandboxMode=Trenutno ste %s u "sandbox" načinu rada
    diff --git a/htdocs/langs/hr_HR/other.lang b/htdocs/langs/hr_HR/other.lang
    index 40e6d1aaf8f..f463d9f611c 100644
    --- a/htdocs/langs/hr_HR/other.lang
    +++ b/htdocs/langs/hr_HR/other.lang
    @@ -1,9 +1,9 @@
     # Dolibarr language file - Source file is en_US - other
     SecurityCode=Security code
     NumberingShort=N°
    -Tools=Tools
    -TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +Tools=Alati
    +TMenuTools=Alati
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Ponuda poslana poštom
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Komitent kreiran
     Notify_COMPANY_SENTBYMAIL=Pošta poslana s kartice komitenta
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> je podatak ovisan o državi komitenta. <br> Na primjer, za zemlju <b>%s</b>, kod je <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/hr_HR/projects.lang b/htdocs/langs/hr_HR/projects.lang
    index ecfb85b0828..33b2496c8ef 100644
    --- a/htdocs/langs/hr_HR/projects.lang
    +++ b/htdocs/langs/hr_HR/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Otvoreni projekti
     OpenedTasks=Otvoreni zadaci
    -OpportunitiesStatusForOpenedProjects=Mogući iznos otvorenih projekata po statusu
    -OpportunitiesStatusForProjects=Iznos šanse za projekte po statusu
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Prikaži projekt
     ShowTask=Prikaži zadatak
     SetProject=Postavi projekt
     NoProject=Nema definiranih ili vlastih projekata
    -NbOfProjects=Br. projekata
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Vrijeme utrošeno
     TimeSpentByYou=Vaše utrošeno vrijeme
     TimeSpentByUser=Utrošeno vrijeme korisnika
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Idi na popis utrošenog vremena
     GoToListOfTasks=Idi na popis zadataka
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Popis ponuda dodjeljenih projektu
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Popis ugovora povezanih sa projektom
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Popis intervencija povezanih sa projektom
    -ListExpenseReportsAssociatedProject=Popis izvještaja troškova povezanih sa projektom
    -ListDonationsAssociatedProject=Popis donacija povezanih sa projektom
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Popis događaja povezanih sa projektom
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Popis utrošenog vremena po zadacima projekta
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Današnja aktivnost na projektu
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Zadatak %s kreiran
     TaskModifiedInDolibarr=Zadatak %s izmjenjen
     TaskDeletedInDolibarr=Zadatak %s obrisan
    -OpportunityStatus=Status šanse
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Šansa status
    -OpportunityProbability=Vjerojatnost šanse
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Vjer. šanse
    -OpportunityAmount=Iznos šanse
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Šansa iznos
     OpportunityAmountAverageShort=Prosječan iznos šanse
     OpportunityAmountWeigthedShort=Vjerojatan iznos šanse
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Suradnik
     SelectElement=Odaberi element
     AddElement=Poveži s elementom
     # Documents models
    -DocumentModelBeluga=Predložak projekta za pregled povezanih objekata
    -DocumentModelBaleine=Predložak izvještaja za zadatke projekta 
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planirano opterećenje
     PlannedWorkloadShort=Opterećenje
     ProjectReferers=Povezane stavke
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projekti s ovim korisnikom kao kontakt osoba
     TasksWithThisUserAsContact=Zadaci dodjeljeni korisniku
     ResourceNotAssignedToProject=Nije dodjeljen projektu
     ResourceNotAssignedToTheTask=Nije dodjeljen zadatku
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Dodjeli zadatak meni
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Dodjeli
     ProjectOverview=Pregled
    -ManageTasks=Koristi projekte za pračenje zadataka i vremena 
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Koristi projekte za praćenje prednosti/šansi
    -ProjectNbProjectByMonth=Br. kreiranih projektata po mjesecu 
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Iznos šansi po mjesecu
    -ProjectWeightedOppAmountOfProjectsByMonth=Važniji iznosi šansi po mjesecu
    -ProjectOpenedProjectByOppStatus=Otvoreni projekti/prednosti po statusu šanse
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistika po projektima/prednostima
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Zadatak dodjeljen. Unos vremena za zadatak je moguće.
     IdTaskTime=ID vre. zad.
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Samo šanse
    -OpenedOpportunitiesShort=Otvorene šanse
    -NotAnOpportunityShort=Nije šansa
    -OpportunityTotalAmount=Ukupan iznos šansi
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Iznosi šanse po važnosti sa vjerojatnošću
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospekcija
     OppStatusQUAL=Kvalifikacija
     OppStatusPROPO=Ponuda
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/hu_HU/admin.lang b/htdocs/langs/hu_HU/admin.lang
    index 5c73ed294d2..f80784a04db 100644
    --- a/htdocs/langs/hu_HU/admin.lang
    +++ b/htdocs/langs/hu_HU/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Fejlesztői
     VersionUnknown=Ismeretlen
     VersionRecommanded=Ajánlott
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Munkamenet mentésének kezelője
     SessionSavePath=Munkamenetek tárhelye
     PurgeSessions=Munkamenetek beszüntetése
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=A PHP-ben beállított munkamenetmentés-kezelő nem teszi lehetővé az összes aktív munkamenet felsorolását.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Új kapcsolatok letiltása
    -ConfirmLockNewSessions=Biztosan szeretné, hogy az új kapcsolatok csak Önre legyenek korlátozva? Ezentúl csak a  <b>%s</b> felhasználó lesz képes csatlakozni.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Új kapcsolatok engedélyezése
     YourSession=Az Ön munkamenete
    -Sessions=Felhasználók munkamenetei
    +Sessions=Users sessions
     WebUserGroup=Webszerver felhasználója / csoportja
    -NoSessionFound=A PHP úgy tűnik, hogy nem engedi az aktív munkamenetek felsorolását. Lehet, hogy a munkamenetek tárhelyének <b>(%s)</b> hozzáférése korlátozott. (Például az operációs rendszer vagy a PHP open_basedir direktívája által).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Az adatbázis adattárolási karakterkészlete
     DBSortingCharset=Az adatbázis adatrendezési karakterkészlete
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Külső felhasználó
     InternalUsers=Belső felhasználók
     ExternalUsers=Külső felhasználók
     GUISetup=Kijelző
    -SetupArea=Beállítási terület
    +SetupArea=Beállítás
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=A fájlfeltöltés tesztelésének űrlapja (beállítás szerint)
     IfModuleEnabled=Megjegyzés: az 'igen' csak akkor eredményes, ha a <b>%s</b> modul engedélyezve van 
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=A kód nem tartalmazhatja a 0 értéket
     DisableJavascript=A Javascript és Ajax funkciók kikapcsolása. (Látássérültek számára, vagy szöveges böngészők használata esetén ajánlott)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Keresést kiváltó karakterek száma: %s
     NotAvailableWhenAjaxDisabled=Nem érhető el, ha az Ajax le van tiltva
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Előnézet nem elérhető
     ThemeCurrentlyActive=Jelenleg aktív téma
     CurrentTimeZone=A PHP (szerver) időzónája
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Hely
     Table=Táblázat
     Fields=Mezők
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Aktív
     SetupShort=Beállítás
     OtherOptions=Egyéb lehetőségek
    -OtherSetup=Egyéb beállítások
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Tizedes elválasztó
     CurrentValueSeparatorThousand=Ezer elválasztó
     Destination=Úticél
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Paraméter %s
    -LocalisationDolibarrParameters=Lokalizációs paraméterek
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Kliens időzónája (felhasználó)
     ClientHour=Kliens ideje (felhasználó)
     OSTZ=A szerver operációs rendszerének időzónája
    @@ -126,8 +126,8 @@ PHPTZ=A PHP szerver időzónája
     DaylingSavingTime=Nyári időszámítás
     CurrentHour=PHP óra (szerver)
     CurrentSessionTimeOut=Jelenlegi munkamenet elévülési ideje
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgetek
     MaxNbOfLinesForBoxes=A widgetek által elfoglalt sorok száma max.
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Automatikus nyelvfelismerés (a böngésző nyelve)
     FeatureDisabledInDemo=Demó módban kikapcsolva
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=A widgetek olyan elemek melyek segítségével egyes oldalak testreszabhatók. A widget ki/bekapcsolását a cél-oldal kiválasztásával az 'Aktiválás'-ra kattintva érheti el illetve a kukára kattintva kikapcsolhatja.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Csak a <a href="%s"> bekapcsolt modulok</a> elemei jelennek meg.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Az interneten további modulokat találhat...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Új
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, a hivatalos Dolibarr ERP / CRM piactér külső modulok számára
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Referencia oldalak további modulok beszerzéséhez...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Elérhető widgetek
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Ne használjon olvasható jelszavakat az adatbázisban,
     MainDbPasswordFileConfEncrypted=Titkosítsa az adatbázis jelszót a conf.php-ban (ajánlott aktiválni)
     InstrucToEncodePass=A jelszavak titkosításához a <b>conf.php</b>-ben cserélje ki a <br><b>$dolibarr_main_db_pass="...";</b><br>sort erre:<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=A generált pdf fájlok védelme (nem ajánlott aktiválni, mivel a tömeges pdf generálást ellehetetleníti)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Funkció
     DolibarrLicense=Engedély
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=A felhasználó vagy fejlesztői dokumentáció (doc, GYIK ...), <br> vessünk egy pillantást a Dolibarr Wiki: <br> <a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=Ha bármilyen további kérdése / help, akkor használja a fórumot Dolibarr: <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=Ebben a részben a Dolibarral kapcsolatos segítségnyújtási szolgáltatást veheti igénybe.
    -HelpCenterDesc2=A szolgáltatás néhány eleme <b>csak angolul érhető el.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Aktuális menü kezelő
     MeasuringUnit=Mértékegység
     LeftMargin=Bal margó
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS Port (alapértelmezés a php.ini-ben: <b>%s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS Host (alapértelmezés a php.ini-ben: <b>%s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS Port (nem definiált a PHP-ben Unix szerű rendszereken)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Host (nem definiált a PHP-ben Unix szerű rendszereken)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Küldjön szisztematikusan rejtett másolatot az összes elküldött e-mail-ről ide:
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=E-mail küldéséhez használt metódus
    -MAIN_MAIL_SMTPS_ID=SMTP azonosító ha szükséges a hitelesítés
    -MAIN_MAIL_SMTPS_PW=SMTP jelszó ha szükséges a hitelesítés
    -MAIN_MAIL_EMAIL_TLS= Használjon TLS (SSL) titkosítást
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Tiltsa le minden SMS-küldését (hibakeresési vagy demó célokra)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=SMS küldésére használt metódus
    -MAIN_MAIL_SMS_FROM=Alapértelmezett küldő telefonszám az SMS-küldés során
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Felhasználó email címe
     CompanyEmail=Cég email címe
     FeatureNotAvailableOnLinux=A szolgáltatás nem elérhető Unix szerű rendszereken. Teszteld a sendmail programot helyben.
    -SubmitTranslation=Ha a fordítás nem teljes vagy hibákat talál, kijavíthatja a <b>langs/%s</b> könyvtárban található fájlokban és elküldheti a javítást a www.transifex.com/dolibarr-association/dolibarr/ címre
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Modul beállítása
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Ne használd élesben
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=%s lépés
    -FindPackageFromWebSite=Keressen olyan csomag, amely biztosítja a kívánt funkciót (például a hivatalos honlapján %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Csomag letöltése (pl. a havatalos oldalról %s)
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr jelenlegi verziója
     CallUpdatePage=Lépjen az oldalra amiben az adatbázis struktúrát és adatokat frissíti: %s
     LastStableVersion=Utolsó stabil verzió
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Késleltetése caching export válasz másodpercben (0 vagy üres cache nélkül)
     DisableLinkToHelpCenter=Hide link <b>&quot;Segítségre van szüksége, vagy támogatják&quot;</b> a bejelentkezési oldalon
     DisableLinkToHelp=Az online segítség "<b>%s</b>" hivatkozásának elrejtése
    -AddCRIfTooLong=Nincs automatikus tördelés, így ha sor túllép a dokumentumon, mert túl hosszú, akkor meg kell adnia kézzel a szövegdobozban a sortörést.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimális hossz
     LanguageFilesCachedIntoShmopSharedMemory=Fájlok. Lang betöltve megosztott memória
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Példák az aktuális telepítő futtatása
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=OpenDocument sablonok listája könyvtárak
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Azon könyvtárakban talált ODT / ODS sablonok száma
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Példák a szintaxis: <br> c: \\ mydir <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Ha tudod, hogyan kell létrehozni a odt dokumentumsablonok, mielőtt tárolja őket azokra a könyvtárakra, olvasd el a wiki dokumentáció:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=A webes szolgáltatások kulcsa ("dolibarrkey" paraméte
     TestSubmitForm=Bemeneti teszt formájában
     ThisForceAlsoTheme=Ebben a menüben vezetője is használhatja a saját témája, amit a felhasználó választás. Szintén ebben a menüben menedzsere okostelefonokra szakosodott nem működik minden smartphone. Használjon egy másik menü vezető, ha problémákat tapasztal a tiéd.
     ThemeDir=Skins könyvtárba
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Teszt üzenet a __ __ PHONEFROM__ PHONETO__
     ModuleMustBeEnabledFirst=A funkció használatához a(z) <b>%s</b> modul bekapcsolása szükséges.
     SecurityToken=Kulcs a biztonságos URL-ek
    -NoSmsEngine=Nincs SMS küldő menedzser áll. SMS küldő menedzser nem telepített alapértelmezett elosztó (mert attól függ, hogy egy külső szolgáltató), de megtalálható néhány a http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Beállíthatjuk, hogy az egyes globális kapcsolódó beállítások a PDF generáció
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Szabályok kovácsolni címre dobozok
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Termékleírás elrejtése a generált PDF fájlban
     HideRefOnPDF=Termékreferencia elrejtése a generált PDF fájlban
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=URL paraméterek biztosítása
     SecurityTokenIsUnique=Használjunk olyan egyedi securekey paraméter az URL
     EnterRefToBuildUrl=Adja meg az objektum referencia %s
     GetSecuredUrl=Get URL számított
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Régi ÁFA-kulcs
     NewVATRates=Új ÁFA-kulcs
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Kiválasztó lista
     ExtrafieldSelectList = Válassz a táblából
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Jelszó
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Alapértelmezett hivatkozás
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Mutassa a menedzserek nevét
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Mező
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Felhasználók és csoportok
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Harmadik fél
    +Module1Name=Third Parties
     Module1Desc=A vállalatok vezetése és a kapcsolattartó
     Module2Name=Kereskedelmi
     Module2Desc=Kereskedelmi irányítás
     Module10Name=Számvitel
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Javaslatok
     Module20Desc=Üzleti ajánlat vezetése
     Module22Name=Tömeges e-levelek
    @@ -511,13 +517,13 @@ Module52Desc=Készlet kezelése (termékek)
     Module53Name=Szolgáltatások
     Module53Desc=Szolgáltatások kezelése
     Module54Name=Szerződések / Előfizetések
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Vonalkódok
     Module55Desc=Vonalkód kezelés
     Module56Name=Telefon
     Module56Desc=Telefon-integráció
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=Kattintson a híváshoz
     Module58Desc=Integrációja ClickToDial rendszer (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Költségek és kirándulások jegyzetek
     Module75Desc=Költségek és kirándulások vezetésének figyelmét
     Module80Name=Küldemények
     Module80Desc=Szállítása és szállítás érdekében vezetése
    -Module85Name=Bankok és készpénz
    +Module85Name=Banks and Cash
     Module85Desc=Házipénztár és bankszámlák kezelése
    -Module100Name=Külső helyszínen
    -Module100Desc=Tartalmazza a külső weboldal Dolibarr a menük és nézd meg egy Dolibarr keretben
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman és SIP
     Module105Desc=Mailman vagy SPIP interfész modul tagja
     Module200Name=LDAP
    -Module200Desc=LDAP címtár szinkronizálás
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integráció
     Module240Name=Adat export
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Adat import
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Tagok
     Module310Desc=Alapítvány tagjai menedzsment
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed belül Dolibarr képernyőre
    -Module330Name=Könyvjelzők
    -Module330Desc=Könyvjelző kezelés
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=WebCalendar
     Module410Desc=WebCalendar integráció
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Adományok
     Module700Desc=Adomány vezetése
     Module770Name=Költség kimutatások
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Címkék/kategóriák
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG szerkesztő
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dinamikus árak
     Module2200Desc=Matematikai kifejezések engedélyezése az árak meghatározásához
     Module2300Name=Időzített feladatok
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Események/Naptár
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web szolgáltatások (SOAP szerver)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=A Dolibarr REST API szerver engedélyezése
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Használja online szolgáltatást Gravatar (www.gravatar.com), hogy fotó a felhasználók / tagok (találtak a levelek). Szüksége van egy internet-hozzáférési
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP kliens
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP MaxMind konverziók képességek
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Több-cég
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Weboldalak
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Értékesítési
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Értékesítési pont
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margók
     Module59000Desc=Module to manage margins
     Module60000Name=Jutalékok
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Erőforrások
     Module63000Desc=Erőforrások kezelése (nyomtatók, autók, helyiségek ...) melyeket események kapcsán oszthat meg
     Permission11=Olvassa vevői számlák
    @@ -651,9 +661,9 @@ Permission32=Létrehozza / módosítja termékek
     Permission34=Törlés termékek
     Permission36=Lásd / kezelhetik rejtett termékek
     Permission38=Export termékek
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Törlés projektek (közös projekt és a projektek vagyok contact)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Olvassa beavatkozások
     Permission62=Létrehozza / módosítja beavatkozások
    @@ -686,7 +696,7 @@ Permission109=Törlés küldések
     Permission111=Olvassa el a pénzügyi számlák
     Permission112=Létrehozása / módosítása / törlése, és hasonlítsa össze tranzakciók
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export ügyletek és számlakivonatok
     Permission116=Számlák közötti átcsoportosítás
     Permission117=Kezelése ellenőrzések szállítási
    @@ -694,15 +704,15 @@ Permission121=Olvassa harmadik fél kapcsolódó felhasználói
     Permission122=Létrehozza / módosítja harmadik fél kapcsolódó felhasználói
     Permission125=Törlés harmadik fél kapcsolódó felhasználói
     Permission126=Export harmadik fél
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Olvassa szolgáltatók
     Permission147=Olvassa statisztika
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Bezár szállító megrendelések
     Permission188=Mégsem beszállítói megrendelések
     Permission192=Létrehozása vonalak
     Permission193=Mégsem vonalak
    -Permission194=Olvassa el a sávszélesség vonalak
    +Permission194=Read the bandwidth lines
     Permission202=ADSL csatlakozások létrehozása
     Permission203=Rendelés kapcsolatok megrendelések
     Permission204=Rendelés kapcsolatok
    @@ -750,12 +760,12 @@ Permission244=Lásd a rejtett partíció tartalmával kategóriák
     Permission251=Olvassa el más felhasználók és csoportok
     PermissionAdvanced251=Olvassa el a többi felhasználó
     Permission252=Olvassa el a többi felhasználó jogosultságait
    -Permission253=Létrehozza / módosítja más felhasználók, csoportok és permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Létrehozza / módosítja belső / külső felhasználók és jogosultságok
     Permission254=Létrehozása / módosítása csak a külső felhasználók számára
     Permission255=Módosíthat más felhasználó jelszavát
     Permission256=Törlése vagy tiltsa le más felhasználók
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Olvassa CA
     Permission272=Olvassa számlák
     Permission273=Számlák kibocsátása
    @@ -765,7 +775,7 @@ Permission283=Névjegyek törlése
     Permission286=Névjegyek exportálása
     Permission291=Olvassa tarifák
     Permission292=Engedélyek beállítása a tarifák
    -Permission293=Módosítása vevők tarifák
    +Permission293=Modify customers tariffs
     Permission300=Olvassa vonalkódok
     Permission301=Létrehozza / módosítja vonalkódok
     Permission302=Törlés vonalkódok
    @@ -787,11 +797,9 @@ Permission401=Olvassa kedvezmények
     Permission402=Létrehozza / módosítja kedvezmények
     Permission403=Kedvezmények érvényesítése
     Permission404=Törlés kedvezmények
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Fuss tömeges import a külső adatok adatbázisba (adatok terhel
     Permission1321=Export vevői számlák, attribútumok és kifizetések
     Permission1322=Reopen a paid bill
     Permission1421=Export vevői megrendelések és attribútumok
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potenciális szintjétől
     DictionaryCanton=Állam / Tartomány
     DictionaryRegion=Régiók
    @@ -894,7 +902,7 @@ DictionaryVAT=HÉA-kulcsok vagy Értékesítés adókulcsok
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Fizetési feltételek
     DictionaryPaymentModes=Fizetési módok
    -DictionaryTypeContact=Kapcsolat- és címtípusok
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ökoadó (WEEE)
     DictionaryPaperFormat=Papírméretek
    @@ -908,47 +916,47 @@ DictionarySource=Származási javaslatok / megrendelések
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=E-mail sablonok
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Egységek
     DictionaryProspectStatus=Ajánlat állapota
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Beállítás mentett
     SetupNotSaved=Setup not saved
     BackToModuleList=Visszalép a modulok listáját
    -BackToDictionaryList=Visszalép a szótárak listája
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=ÁFA kezelés
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=Alapértelmezésben a tervezett áfa 0, amelyet fel lehet használni olyan esetekre, mint az egyesületek, magánszemélyek ou kis cégek.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Arány
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE menedzsment
    -LocalTax1IsUsedDescES= A RE mértéke alapesetben létrehozásakor kilátások, számlák, megrendelések, stb kövesse a normál aktív szabályt: <br> Ha te vevőnek nincs kitéve a RE, RE alapértelmezésben = 0. Vége a szabály. <br> Ha a vevő van kitéve, akkor a RE RE alapértelmezés szerint. Vége a szabály. <br>
    -LocalTax1IsNotUsedDescES= Alapértelmezésben a javasolt RE 0.. Vége a szabály.
    -LocalTax1IsUsedExampleES= Spanyolországban vannak szakemberek figyelemmel néhány konkrét részeit spanyol IAE.
    -LocalTax1IsNotUsedExampleES= Spanyolországban ezt a szakmai és a társadalmak és bizonyos részei a spanyol IAE.
    -LocalTax2ManagementES= IRPF menedzsment
    -LocalTax2IsUsedDescES= A RE mértéke alapesetben létrehozásakor kilátások, számlák, megrendelések, stb kövesse a normál aktív szabályt: <br> Ha az eladó nem IRPF kitéve, akkor alapértelmezés szerint IRPF = 0. Vége a szabály. <br> Ha az eladó van kitéve, akkor a IRPF IRPF alapértelmezés szerint. Vége a szabály. <br>
    -LocalTax2IsNotUsedDescES= Alapértelmezésben a javasolt IRPF 0. Vége a szabály.
    -LocalTax2IsUsedExampleES= Spanyolországban, szabadúszók és független szakemberek, akik szolgáltatásokat nyújtanak és a vállalatok akik úgy döntöttek, az adórendszer a modulok.
    -LocalTax2IsNotUsedExampleES= Spanyolországban vannak bussines nem adóköteles rendszer modulok.
    +LocalTax1ManagementES=RE menedzsment
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Alapértelmezésben a javasolt RE 0.. Vége a szabály.
    +LocalTax1IsUsedExampleES=Spanyolországban vannak szakemberek figyelemmel néhány konkrét részeit spanyol IAE.
    +LocalTax1IsNotUsedExampleES=Spanyolországban ezt a szakmai és a társadalmak és bizonyos részei a spanyol IAE.
    +LocalTax2ManagementES=IRPF menedzsment
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Alapértelmezésben a javasolt IRPF 0. Vége a szabály.
    +LocalTax2IsUsedExampleES=Spanyolországban, szabadúszók és független szakemberek, akik szolgáltatásokat nyújtanak és a vállalatok akik úgy döntöttek, az adórendszer a modulok.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Eladások
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label az alap, ha nincs fordítás megtalálható a kód
     LabelOnDocuments=Címke dokumentumok
    -NbOfDays=Nb napok
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=A hónap végén
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Adatbázis felhasználói
     DatabasePassword=Adatbázis jelszó
     Tables=Táblázatok
     TableName=Táblanév
    -NbOfRecord=Nb rekordok
    +NbOfRecord=No. of records
     Host=Szerver
     DriverType=Vezető típus
     SummarySystem=Rendszer információk összefoglaló
    @@ -996,7 +1005,7 @@ Skin=Bőr téma
     DefaultSkin=Alapértelmezett skin téma
     MaxSizeList=Maximális hossza lista
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Alapértelmezett maximális karakter-hossz egy rövid listában (pl. vevő adatlapon)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=A nap üzenete
     MessageLogin=Belépés oldalra üzenet
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Állandó keresési űrlapot baloldali menüben
     DefaultLanguage=Alapértelmezett nyelv használatát (nyelv kód)
     EnableMultilangInterface=Engedélyezze a többnyelvű interfész
     EnableShowLogo=Mutasd logo a bal menüben
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Név
     CompanyAddress=Cím
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Tulajdonosa bankszámla %s
     BankModuleNotActive=Bankszámlák modul nincs engedélyezve
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Figyelmeztetések
    -DelaysOfToleranceBeforeWarning=Tolerancia késéssel figyelmeztetés
    -DelaysOfToleranceDesc=Ez a képernyő lehetővé teszi, hogy meghatározza a tolerálható késéssel riasztást jelentett a képernyőn Picto %s minden késedelmes elem.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Késleltetés tolerancia (napokban), mielőtt riasztást javaslatokat, hogy lezárja
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Késleltetés tolerancia (napokban), mielőtt riasztást javaslatok nem kell fizetnie
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerancia késleltetést (nap) előtt figyelmeztető szolgáltatások aktiválásához
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerancia késleltetést (nap) előtt figyelmeztető jelzés hatálya lejárt szolgáltatások
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerancia késleltetést (nap) előtt figyelmeztető jelzés nem fizetett szállító számlák
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence késleltetést (nap) előtt figyelmeztető fizetés nélküli ügyfél számlák
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerancia késleltetést (nap) előtt folyamatban lévő figyelmeztető banki megbékélés
    -Delays_MAIN_DELAY_MEMBERS=Tolerancia késleltetést (nap) előtt figyelmeztető jelzés késedelmes tagdíj
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerancia késedelem (nap) előtt figyelmeztetést ellenőrzések betét csinálni
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tűréshatár értéke (napokban) mielőtt figyelmeztetést küld a kiadási összesítések elfogadtatására
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=További bejegyzések kezelése menüben választható paramétereket.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Biztonsági audit események
     Audit=Könyvvizsgálat
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Itt tud belépni a Dolibarr eseményeire biztonságosa. A rendszerg
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=Rendszer információk különféle műszaki információkat kapunk a csak olvasható módban, és csak rendszergazdák számára látható.
     SystemAreaForAdminOnly=Ez a terület áll rendelkezésre a felhasználók csak rendszergazda. Egyik Dolibarr engedélyek csökkentheti ezt a határt.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Választhat minden paramétert kapcsolatos Dolibarr kinézetét itt
     AvailableModules=Available app/modules
     ToActivateModule=Ha aktiválni modulok, menjen a Setup Terület (Home-> Beállítások-> Modulok).
     SessionTimeOut=A munkamenet lejárt
    -SessionExplanation=Ez a szám garancia arra, hogy session soha nem jár le, mielőtt ez a késlekedés. De a PHP session kezelése nem garantálja, hogy mindig session után lejár ez a késedelem: Ez akkor fordul elő, ha a rendszer tisztítása cache munkamenet fut. <br> Megjegyzés: nem adott rendszer belső folyamat PHP session tiszta minden a <b>%s / %s</b> hozzáférés, de csak a hozzáférést más kapcsolatok által.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Elérhető triggerek
    -TriggersDesc=A triggerek olyan fájlok, amely módosítja a viselkedését Dolibarr munkafolyamat után másolja abba a könyvtárba <b>htdocs / core / ravaszt.</b> Rájöttek, új akciókkal aktiválva Dolibarr események (új cég létrehozása, számla érvényesítését, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggerek ebben a fájlban vannak tiltva a <b>NORUN-utótag</b> a nevükben.
     TriggerDisabledAsModuleDisabled=Triggerek ebben a fájlban vannak tiltva, mint <b>%s</b> modul le van tiltva.
     TriggerAlwaysActive=Triggerek ebben a fájlban mindig aktív, függetlenül az aktivált Dolibarr modulokat.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Korlátok / Precision beállítás
    -LimitsDesc=Megadhatjuk, korlátok, pontosítást és optimalizálás által használt Dolibarr itt
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Az egységár tizedesjegyeinek száma
     MAIN_MAX_DECIMALS_TOT=A végösszeg tizedesjegyeinek száma
     MAIN_MAX_DECIMALS_SHOWN=Max tizedes az árak a képernyőn látható (Új <b>...</b> miután ezt a számot, ha meg akarja nézni <b>...</b> amikor számot csonkolni a képernyőn látható)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Nettó egységár egy termék
     TotalPriceAfterRounding=Teljes ár (nettó / ÁFA / incl adó) után a kerekítés
     ParameterActiveForNextInputOnly=Paraméter hatékony következő bemeneti csak
     NoEventOrNoAuditSetup=Nincs biztonsági esemény lett felvéve még. Ez lehet normális, ha ellenőrzés nincs engedélyezve a &quot;setup - biztonság - audit&quot; oldalon.
    -NoEventFoundWithCriteria=Nincs biztonsági esemény találtak ilyen keresési kritériumot.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Nézze meg a helyi sendmail beállítása
     BackupDesc=Ahhoz, hogy egy teljes biztonsági mentést Dolibarr kell tennie:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archivált könyvtárban kell tárolni biztonságos helyen.
     BackupDescY=A generált dump fájlt kell tárolni biztonságos helyen.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Visszaállításához Dolibarr hát, ha kell:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= Ez a szabály arra kényszerül, hogy <b>%s</b> által aktivált modul
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Kell futtatni ezt a parancsot a
     YourPHPDoesNotHaveSSLSupport=SSL funkció nem áll rendelkezésre a PHP
     DownloadMoreSkins=További bőrök letöltése
     SimpleNumRefModelDesc=Vissza a hivatkozási számot formátumban %syymm-nnnn, ahol yy év, hónap és mm nnnn sorozata nélkül, lyuk, és újraindítás nélkül
    -ShowProfIdInAddress=Mutasd hivatásos id címekkel dokumentumok
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Részleges fordítás
    -MAIN_DISABLE_METEO=Meteo nézet letiltása
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Az API belépéshez teszt
    -ProxyDesc=A Dolibarr egyes funkcióinak működéséhez kell egy internetes kapcsolat. Határozza meg itt paramétereit. Ha a Dolibarr szerver egy proxy szerver mögött van, ezek a paraméterek Dolibarr elmondja, hogyan érhető el interneten keresztül is.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Külső hozzáférés
     MAIN_PROXY_USE=Használjon proxy szerver (egyébként közvetlen internet-hozzáféréssel)
     MAIN_PROXY_HOST=Proxy szerver neve / címe
     MAIN_PROXY_PORT=Proxy szerver port
     MAIN_PROXY_USER=Jelentkezz be, hogy használja a proxy szerver
     MAIN_PROXY_PASS=Jelszó a proxy szerver használata
    -DefineHereComplementaryAttributes=Adjuk meg itt minden atributes, még nem álltak rendelkezésre az alapból, hogy azt szeretné, hogy támogatja %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Kiegészítő tulajdonságok
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Figyelem, egyes Linux rendszereken, hogy küldjön e-mailt az e-mail, sendmail beállítás végrehajtása lehetőséget kell conatins-ba (paraméter mail.force_extra_parameters be a php.ini fájl). Ha néhány címzett nem fogadja az üzeneteket, próbáld meg szerkeszteni ezt a PHP paraméter = mail.force_extra_parameters-ba).
     PathToDocuments=A dokumentumok elérési útvonala
     PathDirectory=Könyvtár
    -SendmailOptionMayHurtBuggedMTA=A "PHP mail direct" metódus választása esetén olyan emailt küldhet a rendszer melyet nem minden levelező szerver tud megfelelően értelmezni. Ennek eredményeképpen néhány címzett nem fog tudni levelet kapni ezeken a levelező platformokon (pl. a francia Orange esetén) A probléma orvoslására a beállításoknál használhatja a MAIN_FIX_FOR_BUGGED_MTA opciót 1-re állítva. Ez azonban más szervereknél jelenthet gondot melyek szigorúan követik az SMTP szabványt. Egy másik ajánlott metódus az "SMTP socket library" kiválasztása, amelynek nincs hátránya.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Legalább egy modult engedélyezni kell
    -ClassNotFoundIntoPathWarning=A(z) %s osztály nem található a PHP útvonalon
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Nyáron
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=A %s meghajtóprogram van használatban, ez a jelenleg elérhető legjobb.
    -YouDoNotUseBestDriver=A %s meghajtóprogram van használatban, de a %s ajánlott.
    -NbOfProductIsLowerThanNoPb=Az adatbázis csak %s terméket / szolgáltatást tartalmaz. Különösebb optimalizálásra nincs szükség.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Keresés optimalizálása
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=A %s webböngészőt használja. Ez a böngésző a biztonság és a teljesítmény szempontjából is megfelel.
    -BrowserIsKO=A %s webböngészőt használja. Ez a böngésző közismerten rossz választás a biztonság, a teljesítmény és a megbízhatóság szempontjából. Javasoljuk, hogy használja a Firefox, Chrome, Opera vagy Safari böngészőket.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug betöltve.
     XCacheInstalled=XCache betöltve.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=%s mező szerkesztése
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Vissza a jelszót generált szerint Belső Dolibarr algoritmus: 8 karakter tartalmazó közös számokat és karaktereket kisbetűvel.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Egy jelszóval tér vissza a személyes beállításoknak megfelelően.
     SetupPerso=A beállításainak megfelelően
     PasswordPatternDesc=A jelszó minta leírása
    @@ -1195,23 +1205,23 @@ UserMailRequired=E-mail létrehozásához szükséges új felhasználó
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Cégek modul beállítása
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Dokumentumok sablonok
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vízjel dokumentum tervezetét
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Professzionális egyedi azonosító
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Az export linket <b>%s</b> formátumban elérhető a következő linkre: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Az export linket <b>%s</b> formátumban elérhető a köv
     BillsSetup=Számlák modul beállítása
     BillsNumberingModule=Számlák és jóváírási számozási modul
     BillsPDFModules=Számla dokumentumok modellek
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Jóváírást
     CreditNotes=Jóváírási
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Készítsen egy Login minden tagja számára
     AdherentMailRequired=E-mail létrehozásához szükséges új tagot
     MemberSendInformationByMailByDefault=Checkbox levelet küldeni visszaigazolást a tagok (jóváhagyás vagy új előfizetés) alapértelmezés szerint be van
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP beállítása
     LDAPGlobalParameters=Globális paraméterek
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=A szinkronizálás sikeres teszt
     LDAPSynchroKO=Nem sikerült a szinkronizálás teszt
    -LDAPSynchroKOMayBePermissions=Sikertelen teszt szinkronizálás. Ellenőrizze, hogy a Connexion szerver helyesen van konfigurálva, és lehetővé teszi az LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP csatlakozni az LDAP szerver sikeres (= %s Server, Port = %s)
     LDAPTCPConnectKO=TCP csatlakozni az LDAP kiszolgáló nem (Server = %s, Port = %s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Csatlakozás / Authentificate az LDAP-kiszolgáló nem (Server = %s, Port = %s, Admin = %s, Password = %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP-kiszolgáló konfigurálva a 3-as verzió
     LDAPSetupForVersion2=LDAP-kiszolgáló konfigurálva a 2-es verziója
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Bejelentkezés (samba, ActiveDirectoryba)
     LDAPFieldLoginSambaExample=Példa: sAMAccountName
     LDAPFieldFullname=Keresztnév
     LDAPFieldFullnameExample=Példa: cn
    -LDAPFieldPasswordNotCrypted=Jelszó nem kódolják
    -LDAPFieldPasswordCrypted=Jelszó kódolják
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Példa: userPassword
     LDAPFieldCommonNameExample=Példa: cn
     LDAPFieldName=Név
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Példaértékek tervezték <b>OpenLDAP</b> az alábbi betöltött sémák: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Ha a thoose értékek és az OpenLDAP, módosíthatja az LDAP konfigurációs file <b>slapd.conf</b> hogy minden thoose sémák betöltve.
     ForANonAnonymousAccess=A hitelesített hozzáférés (egy írási például)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=Ezen az oldalon a teljesítménnyel kapcsolatos tanácsok vagy ellenőrzések találhatók.
    -NotInstalled=Nincs telepítve, tehát nem lassítja le a szervert.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=Statikus erőforrások (css, img, javascript) HTTP gyorsítótára
     FilesOfTypeCached=A HTTP szerver a %s típusú fájlok esetében használja a gyorsítótárat.
     FilesOfTypeNotCached=A HTTP szerver a %s típusú fájlok esetében nem használja a gyorsítótárat.
     FilesOfTypeCompressed=A HTTP szerver a %s típusú fájlokat tömöríti.
     FilesOfTypeNotCompressed=A HTTP szerver a %s típusú fájlokat nem tömöríti.
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=HTTP válaszok tömörítése
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Termékek modul beállítása
     ServiceSetup=Szolgáltatások modul beállítása
     ProductServiceSetup=Termékek és szolgáltatások modulok beállítása
     NumberOfProductShowInSelect=Max. termékek száma a kombók válassza listák (0 = nincs korlát)
    -ViewProductDescInFormAbility=Visualization a termékleírásokat a formanyomtatványok (egyébként a felugró eszköztipp)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Alapértelmezett típusú vonalkód használatát termékek
     SetDefaultBarcodeTypeThirdParties=Alapértelmezett típusú vonalkód használatát harmadik felek számára
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Küldő modul beállítása
     SendingsReceiptModel=Küldése modell átvételét
     SendingsNumberingModules=Küldések számozási modulok
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Termékek szállítások kézhezvételét számozás modul
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Speciális szerkesztő
     ActivateFCKeditor=Aktiválja a fejlett szerkesztő:
     FCKeditorForCompany=WYSIWIG létrehozása / kiadás elem leírása és megjegyzés (kivéve a termékek / szolgáltatások)
     FCKeditorForProduct=WYSIWIG létrehozása / kiadásában termék / szolgáltatás 's leírása és megjegyzés
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG létrehozása / kiadás levelek
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection sikerült, de az adatbázisban nem néz ki, hogy egy OsCommerce adatbázis (Key %s nem található táblázatban %s).
    -OSCommerceTestOk=Csatlakozás a szerverhez &quot;%s&quot; az adatbázis &quot;%s&quot; felhasználói &quot;%s&quot; sikeres.
    -OSCommerceTestKo1=Csatlakozás a szerverhez &quot;%s&quot; sikerül, de adatbázis &quot;%s&quot; nem lehet elérni.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Csatlakozás a szerverhez &quot;%s&quot; felhasználói &quot;%s&quot; sikerült.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menü törölve
     Menus=Menük
    @@ -1548,7 +1561,7 @@ DetailRight=Feltétel megjeleníteni jogosulatlan szürke menük
     DetailLangs=Lang fájl nevét címke kód fordítást
     DetailUser=Intern / Extern / All
     Target=Cél
    -DetailTarget=Cél linkek (_blank tetején megnyílik egy új ablak)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Szint (-1: felső menüben, 0: fejléc menü&gt; 0 menü és almenü)
     ModifMenu=MENÜ
     DeleteMenu=Törlése menüpont
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=ÁFA oka: <br> - Utánvéttel áruk (az általunk használt
     OptionVatDebitOptionDesc=ÁFA oka: <br> - Utánvéttel áruk (az általunk használt számla dátum) <br> - A számla (debit) szolgáltatások
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=A szállítási
     OnPayment=A fizetési
     OnInvoice=A számlát
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Vétel számviteli kódja
     AgendaSetup=Rendezvények és napirend modul beállítási
     PasswordTogetVCalExport=Főbb kiviteli engedélyezésének linket
     PastDelayVCalExport=Ne export esetén, mint a régebbi
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Kattintson a Tárcsázás modul beállítása
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Értékesítési
     CashDeskSetup=Point of Sales Modul telepítés
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Alapértelmezett fiók kezelhető készpénz kifizetések
     CashDeskBankAccountForCheque= Alapértelmezett fiók használata fizetések fogadására csekkel
     CashDeskBankAccountForCB= Alapértelmezett fiók kezelhető készpénz kifizetések hitelkártyák
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Könyvjelző beállítása modul
    -BookmarkDesc=Ez a modul lehetővé teszi a könyvjelzők kezelése. Azt is hozzá parancsikonokat bármely Dolibarr oldalakra vagy externale webhelyeket a bal oldali menüben.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximális száma könyvjelzők mutatni a bal menüben
     ##### WebServices #####
     WebServicesSetup=Webservices modul beállítása
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Több cég setup modul
     ##### Suppliers #####
     SuppliersSetup=Szállító modul beállítása
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Projekt modul beállítása
     ProjectsModelModule=Projektjének dokumentum modellje
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/hu_HU/companies.lang b/htdocs/langs/hu_HU/companies.lang
    index e5b5246d0de..9eb0080e4b8 100644
    --- a/htdocs/langs/hu_HU/companies.lang
    +++ b/htdocs/langs/hu_HU/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Válasszon egy partnert
     ConfirmDeleteCompany=Biztos benne, hogy törli a vállalatot és az összes öröklött információt?
     DeleteContact=Kapcsolat/címek törlése
     ConfirmDeleteContact=Biztosan törölni akarja ezt a kapcsolatot és az összes örökölt információt?
    -MenuNewThirdParty=Új partner
    -MenuNewCustomer=Új vevő
    -MenuNewProspect=Új jelentkező
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Új magánszemély
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Parnter létrehozása (harmadik fél)
     CreateThirdPartyAndContact=Harmadik fél létrehozása + szülő kapcsolat
    @@ -25,22 +25,22 @@ ThirdPartyContact=Paertner Kapcsolat/Cím
     Company=Cég
     CompanyName=Cégnév
     AliasNames=Álnév megnevezése (kereskedelmi, jogvédett, ...)
    -AliasNameShort=Álnév
    +AliasNameShort=Alias Name
     Companies=Cégek
    -CountryIsInEEC=EU tagország
    -ThirdPartyName=Partner neve
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Partner
    -ThirdParties=Partner
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Jelentkezők
     ThirdPartyProspectsStats=Jelentkezők
     ThirdPartyCustomers=Vevők
     ThirdPartyCustomersStats=Vevők
     ThirdPartyCustomersWithIdProf12=Vevők %s vagy %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Partner típusa
    +ThirdPartyType=Type of company
     Individual=Magánszemély
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Anyavállalat
     Subsidiaries=Leányvállalatok
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Irányítószám
     Town=Város
     Web=Web
     Poste= Pozíció
    -DefaultLang=Nyelv alapértelmezés szerint
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Cím kitöltése a harmadik férl címével
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Fizetési bank számla
     OverAllProposals=Javaslatok
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Szintaxis érvényes
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=A vevő alapértelmezett kedvezménye <b>%s%%</b>
     CompanyHasNoRelativeDiscount=A vevő nem rendelkezik relatív kedvezménnyel alapértelmezésben
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Ez a vevő még hitellel rendelkezik <b>%s %s</b>-ig
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Nincs
    -Supplier=Szállító
    +Supplier=Vendor
     AddContact=Kapcsolat létrehozása
     AddContactAddress=Kapcsolat/cím létrehozása
     EditContact=Kapcsoalt szerkesztése
    @@ -303,22 +303,22 @@ AddThirdParty=Parnter létrehozása (harmadik fél)
     DeleteACompany=Cég törlése
     PersonalInformations=Személyes adatok
     AccountancyCode=Accounting account
    -CustomerCode=Vevőkód
    -SupplierCode=Vendor code
    -CustomerCodeShort=Vevőkód
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Vevőkód, egyedi minden vevő számára
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Kötelező, ha a partner vevő vagy jelentkező
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Érvényességi a modulban beállítva
    -ThisIsModuleRules=A modul szabályai
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Jelentkező a kapcsolat felvételre
     CompanyDeleted="%s" cég törölve az adatbázisból.
     ListOfContacts=Névjegyek / címek
    -ListOfContactsAddresses=Kapcsolatok listája
    -ListOfThirdParties=Partnerek listája
    -ShowCompany=Harmadik fél mutatása
    +ListOfContactsAddresses=Névjegyek / címek
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Kapcsolat mutatása
     ContactsAllShort=Minden (nincs szűrő)
     ContactType=Kapcsolat típusa
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Nem kapcsolattartó egyik kereskedelmi javaslatnál sem
     NoContactForAnyContract=Nem kapcsolattartó egyetlen szerződésnél sem
     NoContactForAnyInvoice=Nem kapcsolattartó egyik számlánál sem
     NewContact=Új kapcsolat
    -NewContactAddress=Új kapcsolat/cím
    +NewContactAddress=New Contact/Address
     MyContacts=Kapcsolataim
     Capital=Tőke
     CapitalOf=%s tőkéje
     EditCompany=Cég szerkesztése
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Csekk
    -VATIntraCheckDesc=A link <b>%s</b> lehetővé teszi, hogy kérje az európai adószám ellenőrzését. Internet kapcsolat szükséges.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Ellenőrizze a közösségen belüli ÁFA-t az európai bizottság oldalán.
    -VATIntraManualCheck=Ön is ellenőrizheti manuálisan az EU honlapján <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Ellenőrzés nem lehetséges. A szolgáltatást a tagállam nem teszi lehetővé (%s).
    -NorProspectNorCustomer=Nem jelentkező vagy vevő
    -JuridicalStatus=Legális formátum
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Személyzet
     ProspectLevelShort=Potenciális
     ProspectLevel=Jelentkezői potenciál
    @@ -387,12 +387,12 @@ ExportCardToFormat=Kártya exportálása formázással
     ContactNotLinkedToCompany=Kapcsolat nincs partnerhez csatolva
     DolibarrLogin=Dolibarr bejelentkezés
     NoDolibarrAccess=Nem Dolibarr hozzáférés
    -ExportDataset_company_1=Harmadik fél (cégek / alapítványok / személyek) és tulajdonságai
    -ExportDataset_company_2=Kapcsolatok és tulajdonságai
    -ImportDataset_company_1=Harmadik fél (cégek / alapítványok / személyek) és tulajdonságai
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Árszint
     DeliveryAddress=Szállítási cím
     AddAddress=Cím hozzáadása
    @@ -402,16 +402,16 @@ DeleteFile=Fájl törlése
     ConfirmDeleteFile=Biztosan törölni akarja ezt a fájlt?
     AllocateCommercial=Értékesítési képviselőhöz hozzárendelve
     Organization=Szervezet
    -FiscalYearInformation=Információ a pénzügyi évről
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Pénzügyi év kezdő hónapja
    -YouMustAssignUserMailFirst=E-mail értesítő hozzáadásához először létre kell hozni egy e-mail-t ehhez a felhasználóhoz.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=E-mail értesítő hozzáadásához létre kell hozni egy e-mail kapcsolatot a harmadik félhez.
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Jelenkezők listája
    -ListCustomersShort=Vevők listája
    -ThirdPartiesArea=Partner és a szerződés helye
    -LastModifiedThirdParties=Legutóbb %s változtatott harmadik felet
    -UniqueThirdParties=Összes egyedi parnter
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Nyitott
     ActivityCeased=Lezárt
     ThirdPartyIsClosed=Harmadik fél lezárva
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Jelenlegi kintlévőség
     OutstandingBill=Maximális kintlévőség
     OutstandingBillReached=Max. a kintlévőség elért
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=A kód szabad. Ez a kód bármikor módosítható.
     ManagingDirectors=Vezető(k) neve (ügyvezető, elnök, igazgató)
     MergeOriginThirdparty=Duplikált partner (a partnert törlésre kerül)
     MergeThirdparties=Partnerek egyesítése
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Kereskedelmi képviselő bejelentkezés
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/hu_HU/errors.lang b/htdocs/langs/hu_HU/errors.lang
    index ba547724e50..a9b00ace43b 100644
    --- a/htdocs/langs/hu_HU/errors.lang
    +++ b/htdocs/langs/hu_HU/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=A '%s' értéke nem megfelelő dátum formátum
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Nem sikerült írni a %s könyvtárba
     ErrorFoundBadEmailInFile=Talált rossz e-mail szintaxisa %s sorok fájlt (például az e-mail vonal %s %s =)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Néhány kötelezően kitöltendő mező még üres.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Nem sikerült létrehozni egy könyvtárat. Ellenőrizze, hogy a Web szerver felhasználó engedélyekkel rendelkezik, hogy ültesse át Dolibarr dokumentumok könyvtárba. Ha a paraméter <b>safe_mode</b> engedélyezve van ez a PHP-t, ellenőrizze, hogy Dolibarr PHP fájlok tulajdonosa a webszerver felhasználó (vagy csoport).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=<b>%s</b> mező nem tartalmaz speciális karaktereket.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Nem számviteli modul aktiválódik
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr LDAP-egyezés nem teljes.
     ErrorLDAPMakeManualTest=Egy. LDIF fájlt keletkezett %s könyvtárban. Próbálja meg kézzel betölteni a parancssorból, hogy több információt hibákat.
    -ErrorCantSaveADoneUserWithZeroPercentage=Nem lehet menteni akciót &quot;az alapszabály nem kezdődött el&quot;, ha a területen &quot;történik&quot; is ki van töltve.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref használt létrehozására már létezik.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript nem szabad tiltani, hogy ez a funkció működik. Annak engedélyezése / tiltása Javascript, menj a menü Home-> Beállítások-> Kijelző.
     ErrorPasswordsMustMatch=Mindkét típusú jelszavakat kell egyeznie egymással
    -ErrorContactEMail=Egy technikai hiba történt. Kérjük, lépjen kapcsolatba a következő e-mail rendszergazda <b>%s</b> en biztosítja a hibakódot <b>%s</b> be az üzenetet, vagy még jobb hozzáadásával képernyő ezen oldal másolatát.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Rossz érték mezőszám <b>%s</b> (érték <b>&quot;%s&quot;</b> nem egyezik regex szabály <b>%s)</b>
     ErrorFieldValueNotIn=Rossz érték mezőszám <b>%s</b> (érték <b>&quot;%s&quot;</b> nem érték áll rendelkezésre a területen <b>%s %s</b> táblázat)
     ErrorFieldRefNotIn=Rossz érték mezőszám <b>%s</b> (érték <b>&quot;%s&quot;</b> nem létező <b>%s</b> ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=A víruskereső program nem tudta érvényesíteni
     ErrorSpecialCharNotAllowedForField=Speciális karakterek használata nem engedélyezett területen &quot;%s&quot;
     ErrorNumRefModel=A referencia létezik az adatbázis (%s), és nem kompatibilis ezzel a számozással a szabály. Vegye rekord vagy átnevezték hivatkozással, hogy aktiválja ezt a modult.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Hiba a maszk
     ErrorBadMaskFailedToLocatePosOfSequence=Hiba, maszk sorozatszám nélkül
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Hiba, rossz érték visszaállítása
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Hiba. Válasszon legalább egy bejegyzést.
    -ErrorDeleteNotPossibleLineIsConsolidated=Törlése nem lehetséges, mert rekord kapcsolódik egy bank, amely egyeztetett transation
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s van rendelve egy másik harmadik
     ErrorFailedToSendPassword=Nem sikerült elküldeni a jelszót
     ErrorFailedToLoadRSSFile=Nem kap RSS feed. Próbálja felvenni, ha állandó MAIN_SIMPLEXMLLOAD_DEBUG hibaüzenetek nem nyújt elegendő információt.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Felhasználó bejelentkezési <b>%s</b> nem található.
     ErrorLoginHasNoEmail=Ennek a felhasználónak nincs e-mail címre. Folyamat megszakítva.
     ErrorBadValueForCode=Rossz érték a biztonsági kódot. Próbálja újra, az új érték ...
     ErrorBothFieldCantBeNegative=Fields %s %s és nem lehet egyszerre negatív
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Felhasználói fiók <b>%s</b> végrehajtására használnak web szerver nincs engedélye az adott
     ErrorNoActivatedBarcode=Nem vonalkód típus aktivált
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A könyvjelző ezzel a címmel, vagy ez a cél (URL
     WarningPassIsEmpty=Figyelem, az adatbázis jelszó üres. Ez egy biztonsági lyuk. Meg kell hozzá egy jelszót, hogy az adatbázis és változtassa meg a fájl conf.php ezt tükröznie kell.
     WarningConfFileMustBeReadOnly=Figyelem, a config file <b>(htdocs / conf / conf.php)</b> át lehet írni a webszerver. Ez egy komoly biztonsági rést. Jogosultságát módosítani a fájlt, hogy a csak olvasható módban az operációs rendszer felhasználói által használt webszerver. Ha Windows FAT és az a lemez, akkor tudnia kell, hogy ez a fájl rendszer nem engedi hozzáadni file jogosultságokat, így nem lehet teljesen biztonságos.
     WarningsOnXLines=Figyelmeztetések <b>%s</b> forrás vonalak
    -WarningNoDocumentModelActivated=Nem modell, a dokumentum generáció, be van kapcsolva. A modell kerül választottunk alapértelmezés szerint amíg ellenőrizze a modul beállításait.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=Minden biztonsági figyelmeztetések (látható: admin felhasználó esetén) továbbra is aktív marad, amíg a biztonsági rés van jelen (vagy állandó MAIN_REMOVE_INSTALL_WARNING egészül ki a Setup-> Egyéb beállítás).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/hu_HU/interventions.lang b/htdocs/langs/hu_HU/interventions.lang
    index 642ae9a5828..d6941bac356 100644
    --- a/htdocs/langs/hu_HU/interventions.lang
    +++ b/htdocs/langs/hu_HU/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervenciók
     InterventionCard=Intervenció kártya
     NewIntervention=Új intervenció
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Intervenciók liskáta
     ActionsOnFicheInter=Műveletek az intervenciós
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/hu_HU/main.lang b/htdocs/langs/hu_HU/main.lang
    index 7c8419b5d20..5b66c4bcb82 100644
    --- a/htdocs/langs/hu_HU/main.lang
    +++ b/htdocs/langs/hu_HU/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Nemsikerült elküldeni a levelet (feladó=%s, címzett=%s
     ErrorFileNotUploaded=A Fájl nem lett feltöltve. Ellenőrizd, hogy a méret nem haladja -e meg a maximum méretet, van -e elég szabad hely és hogy a célkönyvtárban nincs -e még egy ugyan ilyen nevü fájl.
     ErrorInternalErrorDetected=Hiba észlelve
     ErrorWrongHostParameter=Rossz hoszt paraméter
    -ErrorYourCountryIsNotDefined=Az ország nincs megadva. Menj a Nyitólapo->Beállítások->Szerkesztés oldalra és add meg újra.
    -ErrorRecordIsUsedByChild=Nem sikerült a rekordot törölni. Ezt a rekordot egy leszármazott rekord használja.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Rossz érték
     ErrorWrongValueForParameterX=%s paraméter rossz értékkel rendelkezik
     ErrorNoRequestInError=Nincs kérés a hibában
    -ErrorServiceUnavailableTryLater=A szolgáltatás jelenleg nem elérhető. Próbálja meg késöbb.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Két példányú érték egyedülálló mezőben
    -ErrorSomeErrorWereFoundRollbackIsDone=Nehány hibát találtunk. Visszafordítjuk a változásokat.
    -ErrorConfigParameterNotDefined=<b>%s</b> paraméter nincs definiálva a Dolibarr configurációs fájlban (<b>conf.php</b>).
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=<b>%s</b> felhasználó nem található a Dolibarr adatbázisban.
     ErrorNoVATRateDefinedForSellerCountry=Hiba '%s' számára nincs Áfa meghatározva.
     ErrorNoSocialContributionForSellerCountry=Hiba, nincsenek meghatározva társadalombiztosítási és adóügyi adattípusok a '%s' ország részére.
     ErrorFailedToSaveFile=Hiba, nem sikerült a fájl mentése.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Nincs jogosultsága ehhez a tevékenységhez
     SetDate=Dátum beállítása
     SelectDate=Válasszon egy dátumot
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=Állomány mentése sikeres
     FileUploaded=A fájl sikeresen fel lett töltve
    -FileTransferComplete=Állomány(ok) feltöltése sikeres
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=Az állomány(ok) törlése megtörtént
     FileWasNotUploaded=Egy fájl ki lett választva csatolásra, de még nincs feltöltve. Kattintson a "Fájl Csatolása" gombra.
    -NbOfEntries=Bejegyzések száma
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Online súgó olvasása (Internet hozzáférés szükséges)
     GoToHelpPage=Segítség olvasása
     RecordSaved=Rekord elmentve
    @@ -142,6 +142,7 @@ Closed=Zárva
     Closed2=Zárva
     NotClosed=Not closed
     Enabled=Bekapcsolt
    +Enable=Engedélyez
     Deprecated=Elavult
     Disable=Letilt
     Disabled=Kikapcsolva
    @@ -153,7 +154,7 @@ Update=Frissítés
     Close=Zár
     CloseBox=A widget eltávolítása a vezérlőpultról
     Confirm=Megerősít
    -ConfirmSendCardByMail=Valóban el akarja küldeni emailben a kártya tartalmát <b>%s</b> részére ?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Törlés
     Remove=Eltávolitás
     Resiliate=Befejezés
    @@ -327,7 +328,7 @@ Copy=Másolás
     Paste=Beillesztés
     Default=Alaptértelmezett
     DefaultValue=Alaptértelmezett érték
    -DefaultValues=Alapértelmezett érték
    +DefaultValues=Default values/filters/sorting
     Price=Ár
     PriceCurrency=Price (currency)
     UnitPrice=Egység ár
    @@ -347,7 +348,7 @@ AmountTTCShort=Mennyiség (bruttó)
     AmountHT=Mennyiség (nettó)
     AmountTTC=Mennyiség (bruttó)
     AmountVAT=ÁFA mennyiség
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Nem alkalmazható
     ActionRunningNotStarted=Nincs elkezdve
     ActionRunningShort=Folyamatban
     ActionDoneShort=Befejezett
    -ActionUncomplete=Befejezetlen
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generálás
     Duration=Időtartam
     TotalDuration=Teljes időtartam
     Summary=Összefoglalás
    -DolibarrStateBoard=Adatbázis statisztikák
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Elérhető
     NotYetAvailable=Még nem elérhető
    @@ -468,7 +469,7 @@ and=és
     or=vagy
     Other=Más
     Others=Mások
    -OtherInformations=Egyéb információk
    +OtherInformations=Other information
     Quantity=Mennyiség
     Qty=Menny.
     ChangedBy=Módosította
    @@ -506,7 +507,7 @@ None=Nincs
     NoneF=Nincs
     NoneOrSeveral=Egyik sem
     Late=Késő
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Kép
     Photos=Képek
    @@ -530,18 +531,6 @@ September=Szeptember
     October=Október
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Ápr
    -MayMin=Máj
    -JuneMin=Jún
    -JulyMin=Júl
    -AugustMin=Aug
    -SeptemberMin=Szept
    -OctoberMin=Okt
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=január
     Month02=február
     Month03=március
    @@ -646,6 +635,8 @@ SendMail=E-mail küldése
     EMail=E-mail
     NoEMail=Nincs email
     Email=E-mail
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Nincs mobilszám
     Owner=Tulajdonos
     FollowingConstantsWillBeSubstituted=Az alábbi konstansok helyettesítve leszenek a hozzájuk tartozó értékekkel.
    @@ -677,7 +668,7 @@ NeverReceived=Soha nem került átvételre
     Canceled=Megszakítva
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Szín
     Documents=Kapcsolt fájlok
     Documents2=Dokumentumok
    @@ -703,7 +694,7 @@ DateOfSignature=Kelt
     HidePassword=Parancs mutatása rejtett jelszóval
     UnHidePassword=Igazi parancs mutatása üres jelszóval
     Root=Gyökér
    -Informations=Információk
    +Informations=Information
     Page=Oldal
     Notes=Megjegyzés
     AddNewLine=Új sor hozzáadása
    @@ -716,15 +707,15 @@ Merge=Összeolvasztás
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menü-menedzser
    -WarningYouAreInMaintenanceMode=Figyelem, karbantartási mód, csak <b>%s</b> jelentkezhet be.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Rendszerhiba
     CoreErrorMessage=Sajnálatos hiba történt. Lépjen kapcsolatba a rendszergazdával a naplófájlok megtekintéséhez vagy állítsa 0-ra a $dolibarr_main_prod=1 paramétert részletesebb információkért !
     CreditCard=Hitelkártya
     ValidatePayment=Jóváhagyott fizetés
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=<b>%s</b>-al jelölt mezők kötelezőek
    -FieldsWithIsForPublic=<b>%s</b>-al jelölt mezők publikusak. Ha ezt nem akarja jelölje be a "Publikus" dobozt.
    -AccordingToGeoIPDatabase=(GeoIP converzió szerint)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Sor
     NotSupported=Nincs támogatva
     RequiredField=Szükséges mező
    @@ -732,6 +723,8 @@ Result=Eredmény
     ToTest=Teszt
     ValidateBefore=A kártyát hitelesíteni kell a szolgáltatás használata elött
     Visibility=Láthatóság
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privát
     Hidden=Rejtett
     Resources=Erőforrás
    @@ -750,6 +743,7 @@ LinkTo=Hivatkozás erre:
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Tervezet készítése
     SetToDraft=Vissza a vázlathoz
     ClickToEdit=Kattintson a szerkesztéshez
    +ClickToRefresh=Click to refresh
     EditWithEditor=Szerkesztés CKEditorral
     EditWithTextEditor=Szerkesztés szövegszerkesztővel
     EditHTMLSource=HTML forrás szerkesztése
    @@ -772,14 +767,14 @@ ByDay=Nappal
     BySalesRepresentative=Az értékesítési képviselő
     LinkedToSpecificUsers=Hozzárendelve egy adott felhasználói kapcsolathoz
     NoResults=Nincs eredmény
    -AdminTools=Adminisztrátori eszközök
    +AdminTools=Admin Tools
     SystemTools=Rendszereszközök
     ModulesSystemTools=Modul eszközök
     Test=Teszt
     Element=Elem
     NoPhotoYet=Nem érhető el még fénykép
     Dashboard=Vezérlőpult
    -MyDashboard=Munkafelület
    +MyDashboard=My Dashboard
     Deductible=Levonható
     from=tól
     toward=felé
    @@ -802,7 +797,7 @@ PrintFile=%s fájl nyomtatása
     ShowTransaction=Show entry on bank account
     ShowIntervention=Mutasd beavatkozás
     ShowContract=Szerződés mutatása
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Elutasít
     Denied=Elutasítva
     ListOf=A következők listája: %s
    @@ -818,12 +813,12 @@ Sincerely=Tisztelettel
     DeleteLine=Sor törlése
     ConfirmDeleteLine=Biztos, hogy törölni akarja ezt a sort ?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Kapcsolódó objektumok
     ClassifyBilled=Minősítse kiszámlázottként
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Naptár
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Link a közvetlen letöltéshez (belépés és jogosultság szükséges)
     Download=Letöltés
    @@ -861,16 +856,25 @@ HR=Személyügy
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatikusan számolva
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import azonosító
     Events=Cselekvések
    -EMailTemplates=E-mail sablonok
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projekt
     Projects=Projektek
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Engedélyek
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Hétfő
     Tuesday=Kedd
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Beavatkozások
     SearchIntoContracts=Szerződések
     SearchIntoCustomerShipments=Vásárlói kiszállítások
     SearchIntoExpenseReports=Költség kimutatások
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Megjegyzéske
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Mindenki
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Hozzárendelve
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/hu_HU/other.lang b/htdocs/langs/hu_HU/other.lang
    index cd36c5dc2d2..3e50aa40bc7 100644
    --- a/htdocs/langs/hu_HU/other.lang
    +++ b/htdocs/langs/hu_HU/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Biztonsági kód
     NumberingShort=N°
     Tools=Eszközök
     TMenuTools=Eszközök
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Születésnap
     BirthdayDate=Birthday date
     DateToBirth=Dátum a születési
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Üzenet érvényesített fizetési vissza oldal
     MessageKO=Üzenet a törölt kifizetési visszatérés oldal
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Beavatkozás validált
    -Notify_FICHINTER_SENTBYMAIL=Beavatkozás küldése e-mailben
     Notify_ORDER_VALIDATE=Ügyfél érdekében érvényesített
     Notify_ORDER_SENTBYMAIL=Ügyfél érdekében postai úton
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Szállító érdekében postai úton
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Szállítói megrendelés rögzítve
     Notify_ORDER_SUPPLIER_APPROVE=Szállító érdekében elfogadott
     Notify_ORDER_SUPPLIER_REFUSE=Szállító érdekében hajlandó
     Notify_PROPAL_VALIDATE=Ügyfél javaslat érvényesített
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Kereskedelmi által küldött javaslatban mail
     Notify_WITHDRAW_TRANSMIT=Átviteli visszavonása
     Notify_WITHDRAW_CREDIT=Hitel visszavonása
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Harmadik fél létre
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Ügyfél számla hitelesített
     Notify_BILL_UNVALIDATE=Vevőszámla nincs érvényesítve
    -Notify_BILL_PAYED=Az ügyfél számlát fizetni
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Az ügyfél számlát törölt
     Notify_BILL_SENTBYMAIL=Az ügyfél számlát postai úton
     Notify_BILL_SUPPLIER_VALIDATE=Szállító számlát érvényesített
    -Notify_BILL_SUPPLIER_PAYED=Szállító számlát fizetni
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Szállító számlát postai úton
     Notify_BILL_SUPPLIER_CANCELED=Szállítói számla visszavonva
     Notify_CONTRACT_VALIDATE=A szerződés a validált
     Notify_FICHEINTER_VALIDATE=Beavatkozás érvényesített
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Beavatkozás küldése e-mailben
     Notify_SHIPPING_VALIDATE=Szállítás validált
     Notify_SHIPPING_SENTBYMAIL=Szállítás postai úton
     Notify_MEMBER_VALIDATE=Tagállamnak jóvá
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Lásd a %s modul beállításait
     NbOfAttachedFiles=Száma csatolt fájlok / dokumentumok
     TotalSizeOfAttachedFiles=Teljes méretű csatolt fájlok / dokumentumok
     MaxSize=Maximális méret
     AttachANewFile=Helyezzen fel egy új file / dokumentum
     LinkedObject=Csatolt objektum
    -NbOfActiveNotifications=Figyelmeztetések száma (nyugtázott emailek száma)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> egy információs függően harmadik fél ország. <br> Például, az ország <b>%s,</b> ez <b>%s</b> kódot.
     DolibarrDemo=Dolibarr ERP / CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=A beavatkozás %s nem érvényesítette.
     EMailTextInvoiceValidated=A számla %s nem érvényesítette.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=A javaslat %s nem érvényesítette.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=A rendelés %s nem érvényesítette.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=A megrendelés %s jóváhagyta %s.
     EMailTextOrderRefused=A megrendelés %s visszautasításra került.
     EMailTextOrderRefusedBy=A megrendelés %s már elutasította %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Behozatal adathalmaz
     DolibarrNotification=Automatikus értesítés
     ResizeDesc=Írja be az új szélesség <b>vagy</b> új magasság. Arányt kell tartani során átméretezés ...
    @@ -204,7 +212,7 @@ NewLength=Új szélesség
     NewHeight=Új magasság
     NewSizeAfterCropping=Új mérete a vágás után
     DefineNewAreaToPick=Adjuk meg az új terület a képre, hogy vegye (bal gombbal a képre, majd húzza addig, amíg el nem éri a szemközti sarokban)
    -CurrentInformationOnImage=Ezt az eszközt úgy tervezték, hogy segítsen átméretezése vagy levágása egy kép. Ez a jelenlegi információk szerkesztett kép
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Kép szerkesztő
     YouReceiveMailBecauseOfNotification=Ez az üzenet, mert az e-mail bővült listájához célokat kell tájékoztatni a különleges események %s %s szoftver.
     YouReceiveMailBecauseOfNotification2=Ez az esemény a következő:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Az export területén
    diff --git a/htdocs/langs/hu_HU/projects.lang b/htdocs/langs/hu_HU/projects.lang
    index 0ee107e086d..a5467f856bb 100644
    --- a/htdocs/langs/hu_HU/projects.lang
    +++ b/htdocs/langs/hu_HU/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Projektek mutatása
     ShowTask=Feladat mutatása
     SetProject=Projekt beállítása
     NoProject=Nincs létrehozott vagy tulajdonolt projekt
    -NbOfProjects=Projektek száma
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Eltöltött idő
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=A projekthez tartozó kereskedelmi ajánlatok listája
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=A projekthez tartozó szerződések listája
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=A projekthez tartozó intervenciók listája
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=A projekthez tartozó cselekvések listája
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Hozzájáruló
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Kapcsolódó elemek
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Javaslat
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/id_ID/admin.lang b/htdocs/langs/id_ID/admin.lang
    index b90beccae1d..93a347fcc61 100644
    --- a/htdocs/langs/id_ID/admin.lang
    +++ b/htdocs/langs/id_ID/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Pengembangan
     VersionUnknown=Asing
     VersionRecommanded=Direkomendasikan
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler untuk menyimpan sesi
     SessionSavePath=Peyimpanan untuk lokalisasi sesi
     PurgeSessions=Hapus beberapa sesi
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Simpan sensi handler PHP yang sudah dikonfigurasi yang tidak di izinkan untuk melihat semua sesi yang sedang berlangsung.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Kunci koneksi - koneksi yang baru terjadi.
    -ConfirmLockNewSessions=Anda yakin untuk membatasi semua koneksi Dolibar yang baru terhubung ke Anda. Kecuali pengguna <b>%s<b> akan tetap bisa kembali melakukan koneksi setelah itu.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Hapus penguncian koneksi.
     YourSession=Sesi Anda
    -Sessions=Sesi Pengguna ( User )
    +Sessions=Users sessions
     WebUserGroup=Server web untuk pengguna ( user ) / grup.
    -NoSessionFound=PHP Anda sepertinya tidak mengizinkan untuk melihat daftar semua sesi yang sedang aktif. Direktori yang biasanya digunakan untuk menyimpan semua sesi (<b>%s</b>) mungkin di proteksi ( Sebagai contoh, yang di izinkan oleh OS atau oleh direktif ( directive ) PHP open_basedir ).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Karakter set atau charset untuk menyimpan data
     DBSortingCharset=Karakter set atau charset didalam Database untuk penyortiran data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Pengguna eksternal
     InternalUsers=Beberapa pengguna internal
     ExternalUsers=Beberapa pengguna eksternal
     GUISetup=Penampakan display
    -SetupArea=Area setup
    +SetupArea=Pengaturan
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Halaman percobaan untuk menunggah / upload file ( berdasarkan konfigurasi setup )
     IfModuleEnabled=Catatan: Ya ini efektif jika hanya module <b>%s</b> di hidupkan
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kode tidak boleh menggandung nilai / value 0
     DisableJavascript=Menonaktifkan JavaScript dan Ajax fungsi (Direkomendasikan untuk orang buta orang atau teks browser)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr karakter untuk memicu pencarian:% s
     NotAvailableWhenAjaxDisabled=Tidak tersedia ketika Ajax dinonaktifkan
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview tidak tersedia
     ThemeCurrentlyActive=Tema yang sedang aktif
     CurrentTimeZone=TimeZone PHP (Server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Ruang
     Table=Tabel
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Aktif
     SetupShort=Pengaturan
     OtherOptions=Pilihan lain
    -OtherSetup=Setup lainnya
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Pemisah desimal
     CurrentValueSeparatorThousand=Ribuan pemisah
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter% s
    -LocalisationDolibarrParameters=Parameter Lokalisasi
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Zona Waktu Klien (Pengguna)
     ClientHour=Jam Klien (Pengguna)
     OSTZ=Zona Waktu System Operasi Server
    @@ -126,8 +126,8 @@ PHPTZ=Zona Waktu Server PHP
     DaylingSavingTime=Menghemat waktu siang hari
     CurrentHour=Jam PHP (Server)
     CurrentSessionTimeOut=Sesi sekarang habis waktu
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Keistimewaan
     DolibarrLicense=Lisensi
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Unit Pengukuran
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Metode Pengiriman EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Metode Pengiriman SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Setup Modul
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Versi Dolibarr saat ini
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Panjang Minimum
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=batas waktu Koneksi
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Batas Waktu Balasan
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Suku VAT lama
     NewVATRates=Suku VAT baru
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Daftar Pilihan
     ExtrafieldSelectList = Pilih dari tabel
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Kata kunci
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Link Standar
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Pengguna & Grup
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Pihak Ketiga
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Komersil
     Module2Desc=Commercial management
     Module10Name=Akunting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposal
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Jasa
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Pengiriman
     Module80Desc=Shipments and delivery order management
    -Module85Name=Bank dan Kas
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=Situs luar
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Ekspor Data
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Impor Data
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Anggota
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Sumbangan
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margin
     Module59000Desc=Module to manage margins
     Module60000Name=Komisi
     Module60000Desc=Module to manage commissions
     Module62000Name=Istilah Ekonomi Internasional
    -Module62000Desc=Tambah fitur untuk mengatur Istilah Ekonomi Internasional
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Membaca Nota Pelanggan
    @@ -651,9 +661,9 @@ Permission32=Membuat/Merubah produk
     Permission34=Menghapus Produk
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfer antar akun
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Membaca Data Pengguna Lain dan Grup
     PermissionAdvanced251=Membaca Data Pengguna Lain
     Permission252=Membaca Izin Pengguna Lain
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Merubah Kata Sandi Pengguna Lain
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Membaca Nota
     Permission273=Mengeluarkan Nota
    @@ -765,7 +775,7 @@ Permission283=Menghapus Kontrak
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Kembali Ke Daftar Modul
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=diakhir bulan
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=Ringkasan Sistem Informasi
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Berita Hari Ini
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Tampilkan Logo dimenu kiri
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Nama
     CompanyAddress=Alamat
     CompanyZip=Kode Pos
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Catatan kredit
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Parameter Global
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Nama
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/id_ID/companies.lang b/htdocs/langs/id_ID/companies.lang
    index 02fe5871d14..861ed12eda0 100644
    --- a/htdocs/langs/id_ID/companies.lang
    +++ b/htdocs/langs/id_ID/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Pilih Pihak Ketiga
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Hapus kontak/alamat
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Pihak Ketiga Baru
    -MenuNewCustomer=Pelanggan Baru
    -MenuNewProspect=Prospek Baru
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Perusahaan
     CompanyName=Nama Perusahaan
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Perusahaan
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Pihak Ketiga
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Posisi
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposal
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Suplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Akun akuntansi
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Ditutup
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/id_ID/errors.lang b/htdocs/langs/id_ID/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/id_ID/errors.lang
    +++ b/htdocs/langs/id_ID/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/id_ID/interventions.lang b/htdocs/langs/id_ID/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/id_ID/interventions.lang
    +++ b/htdocs/langs/id_ID/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/id_ID/main.lang b/htdocs/langs/id_ID/main.lang
    index 56322de0758..54cceebcfef 100644
    --- a/htdocs/langs/id_ID/main.lang
    +++ b/htdocs/langs/id_ID/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Ditutup
     Closed2=Ditutup
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Membarui
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Harga
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Lainnya
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Dibatalkan
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validasi pembayaran
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Baris
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=Alat-alat Sistem
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Kalender
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Acara
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Izin
     LineNb=Line no.
     IncotermLabel=Istilah Ekonomi Internasional
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Cuti
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Ditugaskan untuk
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/id_ID/other.lang b/htdocs/langs/id_ID/other.lang
    index 362a60df54f..962d8984451 100644
    --- a/htdocs/langs/id_ID/other.lang
    +++ b/htdocs/langs/id_ID/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Alat
     TMenuTools=Alat
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/id_ID/projects.lang b/htdocs/langs/id_ID/projects.lang
    index fe1301797ae..93d21cb2958 100644
    --- a/htdocs/langs/id_ID/projects.lang
    +++ b/htdocs/langs/id_ID/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/is_IS/admin.lang b/htdocs/langs/is_IS/admin.lang
    index b24eb9e3cfd..babb269074b 100644
    --- a/htdocs/langs/is_IS/admin.lang
    +++ b/htdocs/langs/is_IS/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Þróun
     VersionUnknown=Óþekkt
     VersionRecommanded=Mælt
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler að vista fundur
     SessionSavePath=Bílskúr fundur localization
     PurgeSessions=Hreinsa skipti
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Vista setu dýraþjálfari stilla í PHP þinn leyfir ekki að skrá allar hlaupandi fundur.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Læsa nýja tengingar
    -ConfirmLockNewSessions=Ertu viss um að þú viljir takmarka allar nýjar Dolibarr tengingu við sjálfan þig. Aðeins <b>notendur %s </b> verður fær um að tengja eftir það.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Fjarlægja tengingu læsa
     YourSession=Tími þinn
    -Sessions=Notendur fundur
    +Sessions=Users sessions
     WebUserGroup=Vefþjóninn notandi / hópur
    -NoSessionFound=Your PHP virðist ekki leyfa að skrá virk fundur. Listinn notað til að spara fundur <b>( %s )</b> gætu verið verndaðar (Til dæmis með því að OS leyfi eða PHP tilskipun open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Gagnasafn msgstr til að geyma gögn
     DBSortingCharset=Gagnasafn msgstr til að flokka gögn
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Ytri notandi
     InternalUsers=Innri notendur
     ExternalUsers=Ytri notendur
     GUISetup=Skoða
    -SetupArea=Skipulag svæðis
    +SetupArea=Skipulag
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form til að prófa skrá hlaða (samkvæmt skipulag)
     IfModuleEnabled=Ath: er já aðeins gild ef <b>einingin %s </b> er virkt
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=NBR af stöfum til að kalla fram leit: %s
     NotAvailableWhenAjaxDisabled=Ekki í boði þegar Ajax fatlaðra
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Forskoðun er ekki í boði
     ThemeCurrentlyActive=Þema virk
     CurrentTimeZone=PHP-miðlara Tímasvæði
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Virk
     SetupShort=Skipulag
     OtherOptions=Aðrir valkostir
    -OtherSetup=Aðrar skipulag
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Tugabrotstákn
     CurrentValueSeparatorThousand=Thousand skiltákn
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Viðfang %s
    -LocalisationDolibarrParameters=Staðsetning stika
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=Time Zone PHP miðlara
     DaylingSavingTime=Sumartíma (notandi)
     CurrentHour=PHP-miðlara klukkustund
     CurrentSessionTimeOut=Núverandi fundur tími
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Finna sjálfkrafa (vafrara tungumál)
     FeatureDisabledInDemo=Lögun fatlaður í kynningu
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Aðeins atriði frá <a href="%s">virkt einingar</a> eru birtar.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, opinber markaður staður fyrir Dolibarr ERP / CRM ytri mát
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Gera ekki geyma skýrar lykilorð í gagnagrunninum en g
     MainDbPasswordFileConfEncrypted=Gagnasafn lykilorð dulkóðuð í conf.php (Virkja mælt með)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Verndun mynda pdf skrá (Virkja EKKI mælt, brýtur massi pdf-kynslóð)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Lögun
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=Notandanafn eða skjölum verktaki '(Doc, FAQs ...), <br> kíkið á Dolibarr Wiki: <br> <a href="%s" target="_blank"><b> %s </b></a>
     ForAnswersSeeForum=Fyrir einhverjar aðrar spurningar / hjálp, getur þú notað Dolibarr spjall: <br> <a href="%s" target="_blank"><b> %s </b></a>
    -HelpCenterDesc1=Þetta svæði getur hjálpað þér að fá stuðning Hjálp þjónusta á Dolibarr.
    -HelpCenterDesc2=Einhver hluti þessarar þjónustu eru í boði á <b>ensku.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Núverandi valmynd dýraþjálfari
     MeasuringUnit=Measuring eining
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS Höfn (Sjálfgefið í <b>php.ini: %s )</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS Host (Sjálfgefið í <b>php.ini: %s )</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS Höfn (skilgreint ekki inn í PHP á Unix eins og kerfi)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Host (skilgreint ekki inn í PHP á Unix eins og kerfi)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Senda kerfisbundið falin kolefnis-afrit af öllum sendi tölvupóst til
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Aðferð til að nota til að senda tölvupóst
    -MAIN_MAIL_SMTPS_ID=SMTP ID ef sannprófun sem krafist
    -MAIN_MAIL_SMTPS_PW=SMTP lykilorð ef sannprófun sem krafist
    -MAIN_MAIL_EMAIL_TLS= Nota TLS (SSL) dulkóða
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Slökkva öll SMS sendings (vegna rannsókna eða kynningum)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Aðferð til að nota til að senda SMS
    -MAIN_MAIL_SMS_FROM=Sjálfgefin sendanda símanúmer fyrir SMS senda
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Lögun er ekki í boði á Unix eins og kerfum. Próf sendmail program staðnum.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module skipulag
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Skref %s
    -FindPackageFromWebSite=Finna pakki sem veitir lögun þú vilt (td á heimasíðu %s ).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr núverandi útgáfa
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Töf á flýtiminni útflutningur svar í sekúndum (0 eða tómt fyrir ekkert skyndiminni)
     DisableLinkToHelpCenter=Fela tengilinn <b>"Vantar þig aðstoð eða stuðning"</b> á innskráningarsíðu
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=Það er engin sjálfvirk umbúðir, þannig að ef lína er út af síðu á skjal vegna þess að of langur, þú verður að bæta þig flutning aftur í reit.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Lágmarks lengd
     LanguageFilesCachedIntoShmopSharedMemory=Skrá. Lang hlaðinn í samnýtt minni
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Dæmi með núverandi hlaupandi skipulag
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Listi yfir OpenDocument sniðmát framkvæmdarstjóra
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Dæmi um setningafræði: <br> c: \\ mydir <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Til að vita hvernig á að búa odt skjalið sniðmát, áður en að geyma þá í þeim möppum, lesa wiki skjöl:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Lykill að nota Web Services (breytu &quot;dolibarrkey&q
     TestSubmitForm=Inntak próf mynd
     ThisForceAlsoTheme=Using this matseðill framkvæmdastjóri mun einnig nota eigið þema hennar hvað er val notanda. Einnig þetta valmynd framkvæmdastjóri sérhæft fyrir smartphones ekki virkar á öllum smartphone. Notaðu annan matseðill framkvæmdastjóri ef þú lendir í vandræðum á prenti.
     ThemeDir=Skinn skrá
    -ConnectionTimeout=Connexion tími
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Svar tími
     SmsTestMessage=Próf skilaboð frá PHONEFROM__ __ í __ PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Lykill að tryggja vefslóðir
    -NoSmsEngine=Nei SMS sendandi framkvæmdastjóri boði. SMS sendandi framkvæmdastjóri er ekki uppsett með dreifingu sjálfgefið (vegna þess að þeir ráðast á ytri birgir) en þú getur fundið nokkur á http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=Skoða sem PDF skjal
    -PDFDesc=Þú getur stillt hvert alþjóðlegt valkosti sem tengjast PDF kynslóð
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Reglur til að ryðja tölu kassa
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Breytur til að tryggja vefslóðir
     SecurityTokenIsUnique=Nota einstakt securekey breytu fyrir hvert slóð
     EnterRefToBuildUrl=Sláðu inn tilvísun til %s mótmæla
     GetSecuredUrl=Fá reiknað slóð
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Lykilorð
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Notendur & hópar
    +Module0Name=Notendur & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Í þriðja aðila
    +Module1Name=Third Parties
     Module1Desc=Fyrirtæki og stjórnun tengiliðs
     Module2Name=Auglýsing
     Module2Desc=Auglýsing stjórnun
     Module10Name=Bókhald
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Tillögur
     Module20Desc=Auglýsing tillögunnar stjórnun
     Module22Name=Mass E-pósti
    @@ -511,13 +517,13 @@ Module52Desc=Kauphöll er stjórnun afurða
     Module53Name=Þjónusta
     Module53Desc=Þjónusta's stjórnun
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Strikamerki er stjórnun
     Module56Name=Símtækni
     Module56Desc=Símtækni sameining
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=ClickToDial sameining
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Útgjöld og ferðir athugasemdir
     Module75Desc=Útgjöld og stjórnun ferðir athugið's
     Module80Name=Sendings
     Module80Desc=Sendings og stjórnun fæðingu þess er
    -Module85Name=Bankar og reiðufé
    +Module85Name=Banks and Cash
     Module85Desc=Stjórnun af banka eða reiðufé reikninga
    -Module100Name=ExternalSite
    -Module100Desc=Hafa ytri vef í Dolibarr matseðlum og skoða það í Dolibarr ramma
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman og SPIP
     Module105Desc=Mailman eða SPIP tengi fyrir einingu aðildarríkja
     Module200Name=LDAP
    -Module200Desc=LDAP skrá samstillingu
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke sameining
     Module240Name=Gögn frá landinu
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Gögn innflutning
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Stofnun meðlimir stjórnun
     Module320Name=RSS Feed
     Module320Desc=Bæta við RSS straum inni Dolibarr skjár síður
    -Module330Name=Bókamerki
    -Module330Desc=Bókamerki stjórnun
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar sameining
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Fjárframlög
     Module700Desc=Framlög í stjórnun
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=Fckeditor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Nota online Gravatar þjónusta (www.gravatar.com) til að sýna mynd af notendum og meðlimum (stofna með tölvupósti þeirra). Vantar internet
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind viðskipti viðbúnað
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-fyrirtæki
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sölu
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Benda á sölu
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Gagnagrunnur
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Lesa reikningum
    @@ -651,9 +661,9 @@ Permission32=Búa til / breyta vörur
     Permission34=Eyða vöru
     Permission36=Sjá / stjórna falinn vörur
     Permission38=Útflutningur vöru
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Eyða verkefni (sameiginleg verkefni og verkefnum sem ég hef samband vegna)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Lesa inngrip
     Permission62=Búa til / breyta inngrip
    @@ -686,7 +696,7 @@ Permission109=Eyða sendings
     Permission111=Lesa fjárhagslega reikninga
     Permission112=Búa til / breyta / eyða og bera saman viðskipti
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Útflutningur fundargerðir og reikningur staðhæfing
     Permission116=Millifærslur milli reikninga
     Permission117=Manage eftirlit dispatching
    @@ -694,15 +704,15 @@ Permission121=Lesa þriðja aðila sem tengist notandi
     Permission122=Búa til / breyta þriðja aðila sem tengist notandi
     Permission125=Eyða þriðja aðila sem tengist notandi
     Permission126=Útflutningur þriðja aðila
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Lesa þjónustuveitenda
     Permission147=Lesa Stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Loka birgir pantanir
     Permission188=Hætta við birgi pantanir
     Permission192=Búa til línur
     Permission193=Hætta við línur
    -Permission194=Lestu bandbreidd línur
    +Permission194=Read the bandwidth lines
     Permission202=Búa til ADSL tengingar
     Permission203=Panta tengingu pantanir
     Permission204=Panta tengingar
    @@ -750,12 +760,12 @@ Permission244=Sjá innihaldi falinn flokkar
     Permission251=Lesa aðra notendur og hópa
     PermissionAdvanced251=Lesa aðra notendur
     Permission252=Búa til / breyta öðrum notendum, hópa og permisssions
    -Permission253=Breyta aðra notendur lykilorð
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Búa til / breyta innri / ytri notendur og leyfi
     Permission254=Eyða eða gera öðrum notendum
     Permission255=Búa til / breyta eigin upplýsingar um notandann sinn
     Permission256=Breyta eigin lykilorð hans
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Lesa CA
     Permission272=Lesa reikningum
     Permission273=Útgáfudagur reikningum
    @@ -765,7 +775,7 @@ Permission283=Eyða tengiliðum
     Permission286=Útflutningur tengiliðir
     Permission291=Lesa gjaldskrá
     Permission292=Setja heimildir um gjaldtöku
    -Permission293=Breyta búninga gjaldskrá
    +Permission293=Modify customers tariffs
     Permission300=Lesa Bar númerin
     Permission301=Búa til / breyta barnum kóðar
     Permission302=Eyða númerin barnum
    @@ -787,11 +797,9 @@ Permission401=Lesa afsláttur
     Permission402=Búa til / breyta afsláttur
     Permission403=Staðfesta afsláttur
     Permission404=Eyða afsláttur
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Setja massa innflutningi af ytri gögn inn í gagnagrunn (gögn 
     Permission1321=Útflutningur viðskiptavina reikninga, eiginleika og greiðslur
     Permission1322=Reopen a paid bill
     Permission1421=Útflutningur viðskiptavina pantanir og eiginleika
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect hugsanleg stig
     DictionaryCanton=Ríki / Hérað
     DictionaryRegion=Svæði
    @@ -894,7 +902,7 @@ DictionaryVAT=VSK Verð
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Greiðsla skilyrði
     DictionaryPaymentModes=Greiðsla stillingar
    -DictionaryTypeContact=Hafðu tegundir
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (raf-og rafeindabúnaðarúrgang)
     DictionaryPaperFormat=Pappír snið
    @@ -908,47 +916,47 @@ DictionarySource=Uppruni tillögur / pantanir
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Einingar
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Skipulag vistuð
     SetupNotSaved=Setup not saved
     BackToModuleList=Til baka í mát lista
    -BackToDictionaryList=Til baka orðabækur lista
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VSK Stjórn
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=Sjálfgefið er fyrirhuguð VSK er 0 sem hægt er að nota til tilvikum eins og samtökum, einstaklingum OU lítil fyrirtæki.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Verð
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Stjórn
    -LocalTax1IsUsedDescES= RE hlutfall sjálfgefið þegar þú býrð til viðskiptavina, reikninga, pantanir o.þ.h. fylgja virku staðall reglu: <br> Ef Te kaupanda er ekki efni til OR OR sjálfgefið = 0. Lok reglu. <br> Ef kaupandi er tekið til OR þá RE sjálfgefið. Lok reglu. <br>
    -LocalTax1IsNotUsedDescES= Sjálfgefið er lagt til OR er 0. Lok reglu.
    -LocalTax1IsUsedExampleES= Á Spáni eru sérfræðingar með fyrirvara um nokkur ákveðna hluta af spænsku IAE.
    -LocalTax1IsNotUsedExampleES= Á Spáni eru faglega og samfélög og háð ákveðnum hlutum Spænska IAE.
    -LocalTax2ManagementES= IRPF Stjórn
    -LocalTax2IsUsedDescES= RE hlutfall sjálfgefið þegar þú býrð til viðskiptavina, reikninga, pantanir o.þ.h. fylgja virku staðall reglu: <br> Ef seljandi er ekki efni til IRPF, þá IRPF sjálfgefið = 0. Lok reglu. <br> Ef seljandi er með við IRPF þá IRPF sjálfgefið. Lok reglu. <br>
    -LocalTax2IsNotUsedDescES= Sjálfgefið er fyrirhuguð IRPF er 0. Lok reglu.
    -LocalTax2IsUsedExampleES= Á Spáni freelancers og sjálfstæða sérfræðinga sem veita þjónustu og fyrirtæki sem hafa valið skatt kerfi eininga.
    -LocalTax2IsNotUsedExampleES= Á Spáni eru bussines ekki skattskyldar kerfi eininga.
    +LocalTax1ManagementES=RE Stjórn
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Sjálfgefið er lagt til OR er 0. Lok reglu.
    +LocalTax1IsUsedExampleES=Á Spáni eru sérfræðingar með fyrirvara um nokkur ákveðna hluta af spænsku IAE.
    +LocalTax1IsNotUsedExampleES=Á Spáni eru faglega og samfélög og háð ákveðnum hlutum Spænska IAE.
    +LocalTax2ManagementES=IRPF Stjórn
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Sjálfgefið er fyrirhuguð IRPF er 0. Lok reglu.
    +LocalTax2IsUsedExampleES=Á Spáni freelancers og sjálfstæða sérfræðinga sem veita þjónustu og fyrirtæki sem hafa valið skatt kerfi eininga.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Velta
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Merki notaður við vanræksla, ef ekki þýðingu er að finna í kóða
     LabelOnDocuments=Merki um skjöl
    -NbOfDays=ATH daga
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Í lok mánaðar
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Gagnasafn notanda
     DatabasePassword=Gagnasafn lykilorð
     Tables=Töflur
     TableName=Tafla nafn
    -NbOfRecord=ATH skráa
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Bílstjóri tegund
     SummarySystem=System Information yfirlit
    @@ -996,7 +1005,7 @@ Skin=Skin þema
     DefaultSkin=Default húð þema
     MaxSizeList=Max lengd fyrir lista
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Skilaboð dagsins
     MessageLogin=Innskráning síðu skilaboð
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Varanleg leita mynd til vinstri valmynd
     DefaultLanguage=Sjálfgefið tungumál til að nota (tungumálið code)
     EnableMultilangInterface=Virkja Fjöltyng tengi
     EnableShowLogo=Sýna merki á vinstri valmynd
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Nafn
     CompanyAddress=Heimilisfang
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Eigandi bankareikning %s
     BankModuleNotActive=Bankareikninga mát ekki virkt
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Umburðarlyndi tafir fyrir viðvörun
    -DelaysOfToleranceDesc=Þessi skjár gerir þér kleift að tilgreina þola tafir áður en viðvörun er greint á skjá með picto %s  fyrir hvern seint í lotukerfinu.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Töf umburðarlyndi (í dögum) áður en viðvörun um tillögur til að loka
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Töf umburðarlyndi (í dögum) áður en viðvörun um tillögur billed ekki
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Umburðarlyndi töf (í dögum) áður en hann hringi á þjónusta að virkja
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Umburðarlyndi töf (í dögum) áður en hann hringi á útrunnið þjónusta
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Umburðarlyndi töf (í dögum) áður en hann hringi á ógreiddum reikningum birgir
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Umburðarlyndi töf (í dögum) áður en hann hringi á ógreiddum reikningum viðskiptavina
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Umburðarlyndi töf (í dögum) áður en viðvörun um yfirvofandi banka sættir
    -Delays_MAIN_DELAY_MEMBERS=Umburðarlyndi töf (í dögum) áður en viðvörun um seinkun Félagsgjaldið
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Umburðarlyndi töf (í dögum) áður en vakandi fyrir eftirlit leggja inn til að gera
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Aðrar færslur matseðill stjórna valfrjálst stika.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Öryggi endurskoðun viðburðir
     Audit=Úttekt
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Þú getur gert hér skráir þig inn Dolibarr öryggi viðburðir.
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=Kerfi upplýsingar er ýmis tæknilegar upplýsingar sem þú færð í lesa aðeins háttur og sýnileg Aðeins kerfisstjórar.
     SystemAreaForAdminOnly=Þetta svæði er í boði fyrir notendur stjórnandi aðeins. Ekkert af Dolibarr leyfi getur dregið þessi mörk.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Þú getur valið hvert stika sem tengist Dolibarr útlit og feel hér
     AvailableModules=Available app/modules
     ToActivateModule=Til að virkja mát, fara á svæðinu skipulag (Home-> Uppsetning-> mát).
     SessionTimeOut=Tími út fyrir setu
    -SessionExplanation=Þessi tala tryggja þessi fundur mun aldrei falla úr gildi áður en þessari töf. En PHP sessoin stjórnun ekki tryggingu þessi fundur alltaf renna út eftir þessari töf: Þetta gerist ef kerfið til að hreinsa skyndiminni fundur er í gangi. <br> Ath: með neitun sérstakur kerfi, innra php ferli mun hreinsa fundur hvert <b>um %s  / %s </b> aðgangur en aðeins á aðgengi við annar fundur.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Laus kallar
    -TriggersDesc=Hrindir af stað eru skrár sem vilja breyta hegðun Dolibarr workflow einu sinni afrita inn í möppuna <b>htdocs / fela / kallar.</b> Þeir framkvæmi nýjar aðgerðir, kveikt á Dolibarr viðburðir (nýtt fyrirtæki sköpun, Reikningar löggilding, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Hrindir af stað í þessari skrá er óvirkur <b>the-NORUN</b> viðskeyti í þeirra nafni.
     TriggerDisabledAsModuleDisabled=Hrindir af stað í þessari skrá eru óvirk sem <b>einingin %s </b> er óvirk.
     TriggerAlwaysActive=Hrindir af stað í þessari skrá eru alltaf virk, hvað sem er virkjaður Dolibarr mát.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Mörk / Precision skipulag
    -LimitsDesc=Þú getur skilgreint takmörk, precisions og optimisations notaður við Dolibarr hér
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max brotum um verð eining
     MAIN_MAX_DECIMALS_TOT=Max brotum fyrir heildar verð
     MAIN_MAX_DECIMALS_SHOWN=Max brotum um verð birtist á skjánum (Bæta við <b>...</b> eftir þetta númer ef þú vilt sjá <b>...</b> þegar tala er minnkaður þegar sýnt á skjá)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Hrein einingaverð vöru
     TotalPriceAfterRounding=Samtals verð (net / VSK / incl skatt) eftir lokið máli mínu
     ParameterActiveForNextInputOnly=Breytu gildi fyrir næsta inntak aðeins
     NoEventOrNoAuditSetup=Nei öryggi atburður hefur verið skráð enn. Þetta getur verið eðlilegt ef endurskoðun hefur ekki verið virkt á "skipulag - öryggi - endurskoðun" síðunni.
    -NoEventFoundWithCriteria=Nei öryggi atburður hefur fundist um slíka viðmiðun leit.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Sjá sveitarfélaga sendmail uppsetningu
     BackupDesc=Til að ljúka öryggisafrit af Dolibarr, verður þú að:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Eldri mappa ætti að vera geymd á öruggum stað.
     BackupDescY=The mynda sorphaugur skrá öxl vera geymd á öruggum stað.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Til að endurvekja a Dolibarr varabúnaður, verður þú að:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= Þessi regla er þvinguð <b>til %s </b> með virkt mát
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Þú verður að keyra þessa s
     YourPHPDoesNotHaveSSLSupport=SSL virka ekki í boði í PHP þinn
     DownloadMoreSkins=Fleiri skinn til að sækja
     SimpleNumRefModelDesc=Return tilvísunarnúmerið með snið %s yymm-NNNN þar YY er ári, mm er mánuður og NNNN er röð án holu og ekki endurstilla
    -ShowProfIdInAddress=Sýna professionnal persónuskilríki með heimilisföng á skjölum
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Algjör þýðing
    -MAIN_DISABLE_METEO=Slökkva meteo mynd
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Próf tenging til API
    -ProxyDesc=Sumar aðgerðir Dolibarr þarft að hafa Internet aðgang til að vinna. Skilgreindu hér breytur fyrir þetta. Ef Dolibarr framreiðslumaður er um sel, þá breytum segir Dolibarr hvernig aðgang að Internetinu í gegnum það.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Ytri aðgangur
     MAIN_PROXY_USE=Nota proxy-miðlara (annars beinan aðgang að internetinu)
     MAIN_PROXY_HOST=Nafn / Heimilisfang proxy-miðlara
     MAIN_PROXY_PORT=Port of proxy-miðlara
     MAIN_PROXY_USER=Innskráning til að nota proxy-miðlara
     MAIN_PROXY_PASS=Lykilorð til að nota proxy-miðlara
    -DefineHereComplementaryAttributes=Skilgreindu hér öll atributes, ekki þegar í boði sjálfgefið, og að þú viljir vera studd %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Fyllingar eiginleika
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Aðvörun, á sumum Linux kerfi, að senda tölvupóst úr bréfinu, sendu mail framkvæmd skipulag verður conatins valkostur-BA (breytu mail.force_extra_parameters í skrá php.ini þinn). Ef viðtakendur eru margir aldrei fá tölvupóst, reyna að breyta þessari PHP breytu með mail.force_extra_parameters =-BA).
     PathToDocuments=Path að skjölum
     PathDirectory=Listinn
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=%s viði útgáfa
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return lykilorð mynda samkvæmt innri Dolibarr reiknirit: 8 stafir sem innihalda hluti tölur og bókstafi í lágstafir.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=Netfang sem þarf til að búa til nýjan notanda
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Stofnanir mát skipulag
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Skjöl sniðmát
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vatnsmerki á drögum að skjali
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Professional Id einstakt
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Óákveðinn greinir í ensku útflutningur hlekkur <b>til %s </b> snið er að finna á eftirfarandi tengil: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Óákveðinn greinir í ensku útflutningur hlekkur <b>ti
     BillsSetup=Kvittanir í mát skipulag
     BillsNumberingModule=Reikninga og lána athugasemdir tala mát
     BillsPDFModules=Invoice skjöl módel
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit athugið
     CreditNotes=Credit athugasemdir
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Stjórna Innskráning fyrir hvern meðlim
     AdherentMailRequired=Netfang sem þarf til að búa til nýja félagi
     MemberSendInformationByMailByDefault=Checkbox að senda póst staðfestingu á meðlimum (löggilding eða nýja áskrift) er sjálfgefið
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Skipulag
     LDAPGlobalParameters=Global breytur
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Samstilling próf vel
     LDAPSynchroKO=Tókst samstillingu próf
    -LDAPSynchroKOMayBePermissions=Tókst samstillingu próf. Athugaðu að connexion á miðlara sé rétt uppsettur og leyfa LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP tengingu við LDAP miðlara árangri (Server = %s , Port = %s )
     LDAPTCPConnectKO=TCP tengingu við LDAP miðlara mistókst (Server = %s , Port = %s )
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Tengja / Authentificate að LDAP miðlara mistókst (Server = %s , Port = %s , Admin = %s , Lykilorð = %s )
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP miðlara stillt fyrir útgáfa 3
     LDAPSetupForVersion2=LDAP miðlara stillt fyrir útgáfa 2
     LDAPDolibarrMapping=Dolibarr Kortlagning
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Tenging (samba, activedirectory)
     LDAPFieldLoginSambaExample=Dæmi: samaccountname
     LDAPFieldFullname=Firstname Nafn
     LDAPFieldFullnameExample=Dæmi: cn
    -LDAPFieldPasswordNotCrypted=Lykilorð crypted ekki
    -LDAPFieldPasswordCrypted=Lykilorð crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Dæmi: userPassword
     LDAPFieldCommonNameExample=Dæmi: cn
     LDAPFieldName=Nafn
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Dæmi gildi eru hannaðar fyrir <b>OpenLDAP</b> með eftirfarandi hlaðinn schemas: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Ef þú notar thoose gildi og OpenLDAP, breyta þínum LDAP config skrá <b>slapd.conf</b> að láta alla thoose schemas hlaðinn.
     ForANonAnonymousAccess=Til að staðfesta aðild (til a skrifa aðgangur til dæmis)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Vörur mát skipulag
     ServiceSetup=Þjónusta mát skipulag
     ProductServiceSetup=Vörur og Þjónusta einingar skipulag
     NumberOfProductShowInSelect=Max fjöldi vara í combos velja lista (0 = ótakmarkað)
    -ViewProductDescInFormAbility=Sjónræn framsetning lýsingar vara í formum (annars eins og tól almenningur)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode tegund til nota fyrir vörur
     SetDefaultBarcodeTypeThirdParties=Default barcode tegund til notkunar fyrir þriðju aðila
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sendi mát skipulag
     SendingsReceiptModel=Sending kvittun líkan
     SendingsNumberingModules=Sendings númera einingar
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Vörur afgreiðsla barst tala mát
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Ítarlegri ritstjóri
     ActivateFCKeditor=Virkja FCKeditor fyrir:
     FCKeditorForCompany=WYSIWIG sköpun / útgáfa af lýsingu companie og athugaðu
     FCKeditorForProduct=s WYSIWIG sköpun / útgáfa af vörum / þjónustu "lýsingu og athugaðu
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG sköpun / útgáfa af póstlista
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Tengsl tekist en gagnasafn lítur ekki að vera osCommerce gagnasafn (Key %s  fannst ekki í töflunni %s ).
    -OSCommerceTestOk=árangursrík Tenging við miðlara ' %s ' á gagnagrunni ' %s ' sem notanda ' %s '.
    -OSCommerceTestKo1=Tenging við miðlara ' %s ' ná árangri en% gagnagrunni 's' ekki næst.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Tenging við miðlara ' %s ' sem notanda ' %s ' mistókst.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Valmynd eytt
     Menus=Matseðlar
    @@ -1548,7 +1561,7 @@ DetailRight=Skilyrði sýna leyfisleysi valmyndir grár
     DetailLangs=Lang skrá nafn merki númer þýðingar
     DetailUser=Nemi / Ytri / Allar
     Target=Markmál
    -DetailTarget=Miða fyrir tengla (_blank efst opna nýjan glugga)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1: aðalvalmynd, 0: haus Valmynd&gt; 0 matseðill og undir valmyndinni)
     ModifMenu=Valmynd breyting
     DeleteMenu=Eyða Valmynd færslu
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VSK er vegna: <br> - Á afhendingu / greiðslum fyrir vöru
     OptionVatDebitOptionDesc=VSK er vegna: <br> - Á afhendingu / greiðslum fyrir vörur <br> - Á nótum (skuldfærslu) fyrir þjónustu
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Á afhendingu
     OnPayment=Um greiðslu
     OnInvoice=Á reikning
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Aðgerðir og dagskrá mát skipulag
     PasswordTogetVCalExport=Lykill að heimila útflutning hlekkur
     PastDelayVCalExport=Ekki flytja atburður eldri en
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Smelltu til að hringja mát skipulag
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sölu
     CashDeskSetup=Point of velta mát skipulag
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Reikning til að nota til að taka á móti peningum greiðslur
     CashDeskBankAccountForCheque= Reikning til að nota til að taka á móti greiðslum með því að stöðva
     CashDeskBankAccountForCB= Reikning til að nota til að taka á móti peningum greiðslur með kreditkortum
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bókamerki mát skipulag
    -BookmarkDesc=Þessi eining leyfir þér að stjórna bókamerki. Þú getur einnig bætt flýtileiðir einhverju Dolibarr síðum eða externale vefsíðum á vinstri valmyndinni.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Hámarksfjöldi bókamerki til að sýna í vinstri valmynd
     ##### WebServices #####
     WebServicesSetup=Webservices mát skipulag
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-fyrirtæki mát skipulag
     ##### Suppliers #####
     SuppliersSetup=Birgir mát skipulag
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project mát skipulag
     ProjectsModelModule=Project Skýrsla skjal líkan
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/is_IS/companies.lang b/htdocs/langs/is_IS/companies.lang
    index ff515adb735..7040b6295b3 100644
    --- a/htdocs/langs/is_IS/companies.lang
    +++ b/htdocs/langs/is_IS/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Veldu þriðja aðila
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Eyða tengilið
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New þriðja aðila
    -MenuNewCustomer=Nýr viðskiptavinur
    -MenuNewProspect=Nýjar horfur
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New Einstaklingur
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Í þriðja aðila samband
     Company=Fyrirtæki
     CompanyName=Nafn fyrirtækis
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Stofnanir
    -CountryIsInEEC=Landið er inni Evrópubandalagið
    -ThirdPartyName=Í þriðja aðila Nafn
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Þriðji aðili
    -ThirdParties=Í þriðja aðila
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Horfur
     ThirdPartyProspectsStats=Horfur
     ThirdPartyCustomers=Viðskiptavinir
     ThirdPartyCustomersStats=Viðskiptavinir
     ThirdPartyCustomersWithIdProf12=Viðskiptavinur með %s  eða %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Í þriðja aðila tegund
    +ThirdPartyType=Type of company
     Individual=Einstaklingur
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Móðurfélag
     Subsidiaries=Dótturfélög
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Staða
    -DefaultLang=Tungumál sjálfgefið
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Tillögur
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Setningafræði er í gildi
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Þessi viðskiptavinur hefur afslátt <b>af %s %%</b>
     CompanyHasNoRelativeDiscount=Þessi viðskiptavinur hefur ekki miðað afsláttur sjálfgefið
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Þessi viðskiptavinur er enn kredit athugasemdum eða fyrri innstæður <b>fyrir %s  %s </b>
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Birgir
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Breyta tengilið / netfang
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Eyða fyrirtæki
     PersonalInformations=Persónuupplýsingar
     AccountancyCode=Accounting account
    -CustomerCode=Viðskiptavinur númer
    -SupplierCode=Vendor code
    -CustomerCodeShort=Viðskiptavinur númer
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Viðskiptavinur númer og einstakt fyrir alla viðskiptavini
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Áskilið ef þriðji aðili sem viðskiptavinur eða horfur
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Gildistími stjórnað af mát
    -ThisIsModuleRules=Þetta er regla fyrir þessa einingu
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect samband
     CompanyDeleted=Fyrirtæki " %s " eytt úr gagnagrunninum.
     ListOfContacts=Listi yfir tengiliði
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=Listi yfir þriðja aðila
    -ShowCompany=Show third party
    +ListOfContactsAddresses=Listi yfir tengiliði
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show samband
     ContactsAllShort=Öll (síu)
     ContactType=Hafðu tegund
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Þessi tengiliður er ekki við tengilið fyrir hvaða a
     NoContactForAnyContract=Þessi tengiliður er ekki við tengilið fyrir samningi
     NoContactForAnyInvoice=Þessi tengiliður er ekki við tengilið fyrir reikning
     NewContact=Nýr tengiliður
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=tengiliðir mínir
     Capital=Capital
     CapitalOf=Capital af %s
     EditCompany=Breyta fyrirtæki
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Athuga
    -VATIntraCheckDesc=<b>Á%</b> tengilinn <b>s</b> leyfir þér að spyrja european VSK afgreiðslumaður þjónustu. Ytri aðgangur frá miðlara er krafist fyrir þessa þjónustu til að vinna.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Athugaðu Intracomunnautary virðisaukaskatt á Framkvæmdastjórn Evrópusambandsins síða
    -VATIntraManualCheck=Þú getur einnig athugað handvirkt af european vef <a href="%s" target="_blank"> %s </a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Athuga ekki hægt. Athugaðu þjónusta er ekki veitt af aðildarríki ( %s ).
    -NorProspectNorCustomer=Né möguleika né viðskiptavinur
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Starfsfólk
     ProspectLevelShort=Möguleiki
     ProspectLevel=Prospect möguleiki
    @@ -387,12 +387,12 @@ ExportCardToFormat=Útflutningur kort til snið
     ContactNotLinkedToCompany=Hafðu tengist ekki til þriðja aðila
     DolibarrLogin=Dolibarr Innskráning
     NoDolibarrAccess=Nei Dolibarr aðgang
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Tengiliðir og eignir
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Verðlag
     DeliveryAddress=Afhending heimilisfang
     AddAddress=Bæta við heimilisfangi
    @@ -402,16 +402,16 @@ DeleteFile=Eyða skrá
     ConfirmDeleteFile=Ertu viss um að þú viljir eyða þessari skrá?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Upplýsingar um fjárhagsársins
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Byrjun mánuði fjárhagsársins
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Listi yfir horfur
    -ListCustomersShort=Listi yfir viðskiptavini
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Samtals einstaka þriðja aðila
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Opnaðu
     ActivityCeased=Lokað
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Viðskiptavinur / birgir númerið er ókeypis. Þessi kóði getur breytt hvenær sem er.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/is_IS/errors.lang b/htdocs/langs/is_IS/errors.lang
    index bb34f5e8452..01e24aa1b81 100644
    --- a/htdocs/langs/is_IS/errors.lang
    +++ b/htdocs/langs/is_IS/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat='Á %s' gildi hefur rangt snið dagsetningar
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Tókst ekki að skrifa í möppunni %s
     ErrorFoundBadEmailInFile=Stofna rangt netfang setningafræði fyrir %s  línur í skrá (td línu %s  með email = %s )
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Sumir Nauðsynlegir reitir voru ekki fylltir.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Ekki tókst að búa til möppu. Athugaðu að vefþjóninn notandi hefur réttindi til að skrifa inn Dolibarr skjöl skrá. Ef viðfang <b>safe_mode</b> er virkt á þessu PHP, athuga hvort Dolibarr PHP skrár á nú á netþjóninn notandi (eða hóp).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=<b>Akur %s </b> verður ekki innihalda sértákn.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Nei bókhalds mát virkja
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP samsvörun er ekki lokið.
     ErrorLDAPMakeManualTest=A. LDIF skrá hefur verið búin til í %s . Prófaðu að hlaða það handvirkt úr stjórn lína að hafa meiri upplýsingar um villur.
    -ErrorCantSaveADoneUserWithZeroPercentage=Get ekki vistað aðgerð með "statut ekki farinn að" ef reitinn "gert með því að" er einnig fyllt.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref notað sköpun er þegar til.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript þarf ekki að vera óvirkur til að hafa þennan möguleika að vinna. Til að virkja / slökkva Javascript, fara í valmynd Heim-> Uppsetning-> Skjár.
     ErrorPasswordsMustMatch=Bæði tegund lykilorð verður að samsvara hvor öðrum
    -ErrorContactEMail=Tæknilegt villa kom upp. Vinsamlegast hafðu samband við kerfisstjóra til að fylgja email <b>%s</b> en veita merkjamál villa <b>%s</b> í skilaboðin, eða jafnvel enn betri með því að bæta skjár afrit af þessari síðu.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong gildi fyrir reitinn <b>númer %s </b> (gildi <b>' %s '</b> er ekki það sama ríkisstjóratíð <b>reglu %s )</b>
     ErrorFieldValueNotIn=Rangt gildi fyrir sviði númer <b>%s ('%s</b> &quot;gildi er ekki gildi í boði í <b>​​%s</b> svið <b>%s</b> borð)
     ErrorFieldRefNotIn=Rangt gildi fyrir sviði númer <b>%s</b> ('á <b>%s</b> &quot;gildi er ekki <b>%s</b> núverandi dómari)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not 'fær til setja í g
     ErrorSpecialCharNotAllowedForField=Sérstafir eru ekki leyfðar í reitinn " %s "
     ErrorNumRefModel=Vísun til staðar í gagnagrunninum ( %s ) og er ekki með þessari tala reglu. Fjarlægja færslu eða endurnefna þær tilvísun til að virkja þessa einingu.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Villa á grímu
     ErrorBadMaskFailedToLocatePosOfSequence=Villa, gríma án fjölda röð
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Villa, slæmt endurstilla gildi
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Villa. Veldu amk eina færslu.
    -ErrorDeleteNotPossibleLineIsConsolidated=Eyða ekki hægt vegna þess að færsla er tengd við banka transation sem er conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s er úthlutað til annars þriðja
     ErrorFailedToSendPassword=Tókst ekki að senda lykilorð
     ErrorFailedToLoadRSSFile=Ekki til að fá RSS straum. Reyndu að bæta stöðugt MAIN_SIMPLEXMLLOAD_DEBUG ef villuskilaboð veitir ekki nægar upplýsingar.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Notandi með <b>notandanafn %s </b> fannst ekki.
     ErrorLoginHasNoEmail=Þessi notandi hefur ekki netfang. Aðferð aflýst.
     ErrorBadValueForCode=Bad gerðir gildi fyrir kóða. Prófaðu aftur með nýtt gildi ...
     ErrorBothFieldCantBeNegative=Fields %s og %s getur ekki verið bæði neikvæð
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Notandi Reikningur <b>%s</b> notað til að framkvæma vefur framreiðslumaður hefur ekki leyfi til að
     ErrorNoActivatedBarcode=Nei barcode gerð virk
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bókamerki með þessum titli eða þessa miða (
     WarningPassIsEmpty=Viðvörun Skráð lykilorð er tóm. Þetta er öryggis gat. Þú ættir að setja inn lykilorð til að gagnasafninu og breyta conf.php þinni til að endurspegla þessa.
     WarningConfFileMustBeReadOnly=Aðvörun, skrá samsk <b>(htdocs / conf / conf.php)</b> er hægt að skrifa of mikið af vefþjóni. Þetta er alvarlegur öryggi gat. Breyta leyfi á skrá til að vera í lesa aðeins ham fyrir stýrikerfi notandi notar netþjóninn. Ef þú notar Windows og FAT snið fyrir diskinn þinn, þú verður að vita að þetta skráarkerfi leyfir ekki að bæta við heimildum á skrá, svo má ekki vera fullkomlega öruggur.
     WarningsOnXLines=Viðvaranir <b>á %s </b> uppspretta línur
    -WarningNoDocumentModelActivated=Engin fyrirmynd fyrir kynslóð skjal hefur verið virkjuð. A líkan vilja vera choosed sjálfgefið þar til þú skoðar einingin uppsetningu þína.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=Öll öryggi viðvaranir (sýnileg notendum admin eingöngu) verða áfram virkur eins lengi og varnarleysi er til staðar (eða þessi fasti MAIN_REMOVE_INSTALL_WARNING er bætt í Uppsetning-> Annað skipulag).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/is_IS/interventions.lang b/htdocs/langs/is_IS/interventions.lang
    index 2e3e8400afe..ed9627091de 100644
    --- a/htdocs/langs/is_IS/interventions.lang
    +++ b/htdocs/langs/is_IS/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Íhlutun
     InterventionCard=Intervention kort
     NewIntervention=Nýrri aðferð
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Listi yfir inngrip
     ActionsOnFicheInter=Aðgerðir á íhlutun
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/is_IS/main.lang b/htdocs/langs/is_IS/main.lang
    index 1068c7078bc..a4fdbbc7073 100644
    --- a/htdocs/langs/is_IS/main.lang
    +++ b/htdocs/langs/is_IS/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Ekki tókst að senda póst (sendandi = %s , símtól = %s
     ErrorFileNotUploaded=Skrá var ekki send inn. Athugaðu að stærð hjartarskinn ekki fara yfir leyfileg mörk, sem laust pláss er í boði á diski og að það er ekki nú þegar skrá með sama nafni í þessari möppu.
     ErrorInternalErrorDetected=Villa fannst
     ErrorWrongHostParameter=Wrong gestgjafi breytu
    -ErrorYourCountryIsNotDefined=landið þitt er ekki skilgreind. Fara á aðalsíðu-skipulag-Breyta og staða aftur the mynd.
    -ErrorRecordIsUsedByChild=Tókst ekki að eyða þessari færslu. Þessi færsla er notaður við að minnsta kosti á færslur barn.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong gildi
     ErrorWrongValueForParameterX=Wrong gildi fyrir% breytu s
     ErrorNoRequestInError=Nei, farið fram á villu
    -ErrorServiceUnavailableTryLater=Þjónusta ekki í boði fyrir stundu. Reyndu aftur síðar.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Tvöfalt gildi í einstakri sviði
    -ErrorSomeErrorWereFoundRollbackIsDone=Villur fundust. Við rollback breytingar.
    -ErrorConfigParameterNotDefined=<b>Viðfang %s </b> er ekki skilgreind innan Dolibarr config skrá <b>conf.php.</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Gat ekki fundið <b>notandann %s </b> í Dolibarr gagnagrunninum.
     ErrorNoVATRateDefinedForSellerCountry=Villa, enginn VSK hlutfall er skilgreind fyrir% landsins.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Villa tókst að vista skrána.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Setja dagsetningu
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Skráin tókst að hlaða inn
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A-skrá er valin fyrir viðhengi en var ekki enn upp. Smelltu á "Hengja skrá" fyrir þessu.
    -NbOfEntries=ATH færslna
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Lestu hjálpina
     RecordSaved=Upptaka vistuð
    @@ -94,7 +94,7 @@ Undefined=Óskilgreint
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=Sjá ofar
    -HomeArea=Home area
    +HomeArea=Forsíða
     LastConnexion=Latest connection
     PreviousConnexion=Fyrri tengingu
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Loka
     Closed2=Loka
     NotClosed=Not closed
     Enabled=Virkt
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Slökkva
     Disabled=Fatlaðir
    @@ -153,7 +154,7 @@ Update=Uppfæra
     Close=Loka
     CloseBox=Remove widget from your dashboard
     Confirm=Staðfesta
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Eyða
     Remove=Fjarlægja
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Afrita
     Paste=Líma
     Default=Default
     DefaultValue=Sjálfgefið gildi
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Verð
     PriceCurrency=Price (currency)
     UnitPrice=Eining verðs
    @@ -347,7 +348,7 @@ AmountTTCShort=Magn (Inc skatt)
     AmountHT=Magn (að frádregnum skatti)
     AmountTTC=Magn (Inc skatt)
     AmountVAT=Upphæð VSK
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Á ekki við
     ActionRunningNotStarted=Ekki byrjað
     ActionRunningShort=In progress
     ActionDoneShort=Lokið
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Mynda
     Duration=Lengd
     TotalDuration=Samtals tímalengd
     Summary=Yfirlit
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Laus
     NotYetAvailable=Ekki enn í boði
    @@ -468,7 +469,7 @@ and=og
     or=eða
     Other=Önnur
     Others=Aðrir
    -OtherInformations=Aðrar upplýsingar
    +OtherInformations=Other information
     Quantity=Magn
     Qty=Magn
     ChangedBy=Breytt af
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Seint
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Mynd augnabliksins
     Photos=Myndir
    @@ -530,18 +531,6 @@ September=September
     October=Október
     November=Nóvember
     December=Desember
    -JanuaryMin=Jan
    -FebruaryMin=Febrúar
    -MarchMin=Mar
    -AprilMin=Apríl
    -MayMin=Maí
    -JuneMin=Júní
    -JulyMin=Júlí
    -AugustMin=Ágúst
    -SeptemberMin=September
    -OctoberMin=Október
    -NovemberMin=Nóvember
    -DecemberMin=Desember
     Month01=Janúar
     Month02=Febrúar
     Month03=mars
    @@ -646,6 +635,8 @@ SendMail=Senda tölvupóst
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Eigandi
     FollowingConstantsWillBeSubstituted=Eftir Fastar verður staðgengill með samsvarandi gildi.
    @@ -677,7 +668,7 @@ NeverReceived=Aldrei fengið
     Canceled=Hætt við
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Litur
     Documents=Hlekkur skrá
     Documents2=Skjöl
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Sýna stjórn með lykilorð falinn
     UnHidePassword=Sýna raunveruleg stjórn með skýrum lykilorð
     Root=Root
    -Informations=Upplýsingar
    +Informations=Information
     Page=Page
     Notes=Skýringar
     AddNewLine=Bæta við nýjum línu
    @@ -716,15 +707,15 @@ Merge=Sameina
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Sýna síðu til að prenta aðalefni area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Aðvörun, ert þú í viðhald háttur, svo að aðeins <b>tenging %s </b> er leyft að nota forritið í augnablikinu.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Kerfi villa
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Kreditkort
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Reitir <b>með %s </b> er nauðsynlegur
    -FieldsWithIsForPublic=Reitir <b>með %s </b> eru birtar á almennings lista yfir meðlimi. Ef þú vilt þetta ekki skaltu athuga hvort "opinberar" reitinn.
    -AccordingToGeoIPDatabase=(Samkvæmt GeoIP ummyndun)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Lína
     NotSupported=Ekki stutt
     RequiredField=Krafist
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Próf
     ValidateBefore=Kort verða að vera staðfestar áður en ég nota þennan eiginleika
     Visibility=Skyggni
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Einkamál
     Hidden=Falinn
     Resources=Gagnagrunnur
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Búa til drög
     SetToDraft=Back to draft
     ClickToEdit=Smelltu til að breyta
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Frá degi
     BySalesRepresentative=Með sölufulltrúa
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tækjum
     ModulesSystemTools=Modules tools
     Test=Próf
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Sýna afskipti
     ShowContract=Sýna samning
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Eyða línu
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Flokka billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Viðburðir
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Verkefni
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Heimildir
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Mánudagur
     Tuesday=Þriðjudagur
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Íhlutun
     SearchIntoContracts=Samningar
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Athugasemdir
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Allir
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Áhrifum á
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/is_IS/other.lang b/htdocs/langs/is_IS/other.lang
    index 2ec6f3b2f92..30a3ab82462 100644
    --- a/htdocs/langs/is_IS/other.lang
    +++ b/htdocs/langs/is_IS/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Öryggisnúmer
     NumberingShort=N°
     Tools=Verkfæri
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Afmæli
     BirthdayDate=Birthday date
     DateToBirth=Dags til fæðingu
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Skilaboð á staðfest greiðslu aftur síðu
     MessageKO=Skilaboð á niður greiðslu aftur síðu
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention staðfestar
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Viðskiptavinur til setja í gildi
     Notify_ORDER_SENTBYMAIL=Viðskiptavinur röð send með pósti
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Birgir röð send með pósti
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Birgir röð samþykkt
     Notify_ORDER_SUPPLIER_REFUSE=Birgir þess neitaði
     Notify_PROPAL_VALIDATE=Viðskiptavinur tillögu staðfestar
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Auglýsing tillögu send með pósti
     Notify_WITHDRAW_TRANSMIT=Gírskipting afturköllun
     Notify_WITHDRAW_CREDIT=Credit afturköllun
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Þriðja aðila til
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Viðskiptavinur Reikningar staðfestar
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Viðskiptavinur Reikningar borgað
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Viðskiptavinur reikning niður
     Notify_BILL_SENTBYMAIL=Viðskiptavinur Reikningar send með pósti
     Notify_BILL_SUPPLIER_VALIDATE=Birgir reikning fullgilt
    -Notify_BILL_SUPPLIER_PAYED=Birgir reikning borgað
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Birgir reikningi send með pósti
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Samningur fullgilt
     Notify_FICHEINTER_VALIDATE=Afskipti fullgilt
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping fullgilt
     Notify_SHIPPING_SENTBYMAIL=Shipping send með pósti
     Notify_MEMBER_VALIDATE=Member fullgilt
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Fjöldi meðfylgjandi skrá / gögn
     TotalSizeOfAttachedFiles=Heildarstærð meðfylgjandi skrá / gögn
     MaxSize=Hámarks stærð
     AttachANewFile=Hengja nýja skrá / skjal
     LinkedObject=Tengd mótmæla
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s </b> er upplýsingamiðstöð ráðast á þriðja aðila land. <br> Til dæmis, þegar <b>landið %s , kóði%</b> það <b>er.</b>
     DolibarrDemo=Dolibarr ERP / CRM kynningu
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Á% afskipti s hefur verið staðfest.
     EMailTextInvoiceValidated=Í% reikningi s hefur verið staðfest.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Á% Tillagan s hefur verið staðfest.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Á %s kyni s hefur verið staðfest.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Á %s kyni s hefur verið samþykkt af %s .
     EMailTextOrderRefused=Á %s kyni s hefur verið hafnað.
     EMailTextOrderRefusedBy=Á %s kyni s hefur verið hafnað af %s .
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Innflutningur gögnum
     DolibarrNotification=Sjálfvirk tilkynning
     ResizeDesc=Sláðu inn nýja breidd <b>EÐA</b> nýja hæð. Hlutfall verður haldið á resizing ...
    @@ -204,7 +212,7 @@ NewLength=New breidd
     NewHeight=Ný hæð
     NewSizeAfterCropping=Ný stærð eftir cropping
     DefineNewAreaToPick=Skilgreina ný svæði á mynd til að velja (vinstri smella á myndina þá draga þar til þú nærð fjær hornið)
    -CurrentInformationOnImage=Upplýsingar um núverandi mynd
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image ritstjóri
     YouReceiveMailBecauseOfNotification=Þú færð þessi skilaboð vegna þess að netfangið þitt hefur verið bætt við lista yfir markmið að fá upplýsingar um sérstaka atburði í %s  hugbúnað af %s .
     YouReceiveMailBecauseOfNotification2=Þessi atburður er eftirfarandi:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Útflutningur area
    diff --git a/htdocs/langs/is_IS/projects.lang b/htdocs/langs/is_IS/projects.lang
    index 5213ae876a6..5aa240aab47 100644
    --- a/htdocs/langs/is_IS/projects.lang
    +++ b/htdocs/langs/is_IS/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Sýna verkefni
     ShowTask=Sýna verkefni
     SetProject=Setja verkefni
     NoProject=Engin verkefni skilgreind eða í eigu
    -NbOfProjects=ATH verkefna
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Tíma sem fer
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Listi yfir auglýsing tillögum í tengslum við verkefnið
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Listi yfir samninga í tengslum við verkefnið
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Listi yfir inngrip í tengslum við verkefnið
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Listi yfir aðgerðir í tengslum við verkefnið
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Framlög
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Tillaga
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/it_IT/admin.lang b/htdocs/langs/it_IT/admin.lang
    index 6467683d164..5953844cb49 100644
    --- a/htdocs/langs/it_IT/admin.lang
    +++ b/htdocs/langs/it_IT/admin.lang
    @@ -9,13 +9,13 @@ VersionExperimental=Sperimentale
     VersionDevelopment=Sviluppo
     VersionUnknown=Sconosciuta
     VersionRecommanded=Raccomandata
    -FileCheck=Controllo di integrità dei file
    -FileCheckDesc=Questo strumento ti consente di verificare l'integrità dei file e la configurazione della tua applicazione, confrontando ogni file con quelli ufficiali. Il valore di alcune impostazioni può anche essere controllato. È possibile utilizzare questo strumento per rilevare se alcuni file sono stati modificati, per esempio, da un hacker.
    +FileCheck=Controllo di integrità files
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=L'integrità dei file è strettamente conforme al riferimento.
    -FileIntegrityIsOkButFilesWereAdded=È stato superato il controllo dell'integrità dei file, tuttavia sono stati aggiunti alcuni nuovi file.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Il controllo dell'integrità dei file è fallito. Alcuni file sono stati modificati, rimossi o aggiunti.
    -GlobalChecksum=Global checksum
    -MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    +GlobalChecksum=Controllo di integrità globale
    +MakeIntegrityAnalysisFrom=Analizza integrità dei files dell'applicazione da
     LocalSignature=Firma locale incorporata (meno affidabile)
     RemoteSignature=Firma remota (più affidabile)
     FilesMissing=File mancanti
    @@ -23,21 +23,21 @@ FilesUpdated=File aggiornati
     FilesModified=Files modificati
     FilesAdded=Files aggiunti
     FileCheckDolibarr=Controlla l'integrità dei file dell'applicazione
    -AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when application is installed from an official package
    -XmlNotFound=Xml Integrity File of application not found
    +AvailableOnlyOnPackagedVersions=Il file locale per il controllo di integrità è disponibile solo quando l'applicazione viene installata da un pacchetto ufficiale
    +XmlNotFound=File xml di controllo integrità non trovato
     SessionId=ID di sessione
     SessionSaveHandler=Handler per il salvataggio dell sessioni
     SessionSavePath=Percorso per il salvataggio delle sessioni
     PurgeSessions=Pulizia delle sessioni
     ConfirmPurgeSessions=Vuoi davvero eliminare tutte le sessioni? Questo causerà la disconnessione di tutti gli utenti (tranne te).
    -NoSessionListWithThisHandler=Il gestore delle sessioni configurato in PHP non consente di elencare tutte le sessioni in esecuzione.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Bloccare le nuove connessioni
    -ConfirmLockNewSessions=Sei sicuro di voler limitare qualsiasi nuova connessione a Dolibarr a te stesso? Solo l'utente <b>%s</b> sarà in grado di connettersi dopo la modifica.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Rimuovere il blocco di connessione
     YourSession=La tua sessione
    -Sessions=Sessione utente
    +Sessions=Users sessions
     WebUserGroup=Utente/gruppo del server web (per esempio www-data)
    -NoSessionFound=Il PHP del server sembra non permettere di elencare le sessioni attive. La directory utilizzata per salvare le sessioni (<b>%s</b>) potrebbe essere protetta (Potrebbe essere fatto con permessi sul filesystem o con la direttiva open_basedir di PHP).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Charset per il salvataggio dei dati nel database
     DBSortingCharset=Charset per l'rodinamento dei dati nel database
     ClientCharset=Client charset
    @@ -49,8 +49,8 @@ InternalUser=Utente interno
     ExternalUser=Utente esterno
     InternalUsers=Utenti interni
     ExternalUsers=Utenti esterni
    -GUISetup=Layout di visualizzazione
    -SetupArea=Sezione impostazioni
    +GUISetup=Aspetto grafico e lingua
    +SetupArea=Impostazioni
     UploadNewTemplate=Carica nuovi modelli
     FormToTestFileUploadForm=Modulo per provare il caricamento file (secondo la configurazione)
     IfModuleEnabled=Nota: funziona solo se il <b>modulo %s</b> è attivo
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Il codice non può contenere il valore 0
     DisableJavascript=Disabilita funzioni JavaScript and Ajax (Raccomandato per persone non vedenti o browser testuali)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=N ° di caratteri per attivare ricerca: %s
     NotAvailableWhenAjaxDisabled=Non disponibile quando Ajax è disabilitato
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Anteprima non disponibile
     ThemeCurrentlyActive=Tema attualmente attivo
     CurrentTimeZone=Fuso orario attuale
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Spazio
     Table=Tabella
     Fields=Campi
    @@ -111,14 +111,14 @@ NotConfigured= Modulo/Applicazione non configurato
     Active=Attivo
     SetupShort=Impostazioni
     OtherOptions=Altre opzioni
    -OtherSetup=Altre impostazioni
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Separatore decimale
     CurrentValueSeparatorThousand=Separatore per le migliaia
     Destination=Destinazione
     IdModule=Modulo ID
     IdPermissions=Permessi ID
     LanguageBrowserParameter=Parametro %s
    -LocalisationDolibarrParameters=Parametri di localizzazione
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Fuso orario client (utente)
     ClientHour=Orario client (utente)
     OSTZ=Fuso orario dell'OS server
    @@ -126,8 +126,8 @@ PHPTZ=Fuso orario server PHP
     DaylingSavingTime=Ora legale (utente)
     CurrentHour=Orario PHP (server)
     CurrentSessionTimeOut=Timeout sessione corrente
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Massimo numero di righe per componente
    @@ -191,29 +191,29 @@ IgnoreDuplicateRecords=Ignora errori per record duplicati (INSERT IGNORE)
     AutoDetectLang=Rileva automaticamente (lingua del browser)
     FeatureDisabledInDemo=Funzione disabilitata in modalità demo
     FeatureAvailableOnlyOnStable=Feature disponibile solo nelle versioni stabili ufficiali
    -BoxesDesc=I Widgets sono componenti che personalizzano le pagine aggiungendo delle informazioni.\nPuoi scegliere se mostrare il widget o meno cliccando 'Attiva' sulla la pagina di destinazione, o cliccando sul cestino per disattivarlo.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Vengono mostrati solo gli elementi relativi ai <a href="%s">moduli attivi</a> .
    -ModulesDesc=I moduli di Dolibarr definiscono quali funzionalità sono abilitate. Alcuni moduli, dopo la loro attivazione, richiedono dei permessi da abilitare agli utenti. Clicca su on/off per l'abilitazione del modulo.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Potete trovare altri moduli da scaricare su siti web esterni...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Trova app/moduli esterni...
     ModulesDevelopYourModule=Sviluppa il tuo modulo/app
    -ModulesDevelopDesc=Puoi sviluppare o trovare un partner che sviluppi il tuo modulo personalizzato
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Nuovo
    -FreeModule=Free
    +FreeModule=Gratuito
     CompatibleUpTo=Compatibile con la versione %s
     NotCompatible=Questo modulo non sembra essere compatibile con la tua versione di Dolibarr %s (Min %s - Max %s).
     CompatibleAfterUpdate=Questo modulo richiede un aggiornamento a Dolibarr %s (Min %s - Max %s).
     SeeInMarkerPlace=See in Market place
     Updated=Aggiornato
    -Nouveauté=Novelty
    +Nouveauté=Novità
     AchatTelechargement=Aquista / Scarica
     GoModuleSetupArea=Per installare un nuovo modulo vai alla sezione moduli <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, il mercato ufficiale dei moduli esterni per Dolibarr ERP/CRM
    -DoliPartnersDesc=Elenco di aziende che forniscono moduli e funzionalità sviluppate su misura (Nota: chiunque sia esperto in programmazione PHP è in grado di fornire un contributo allo sviluppo per un progetto open source)
    -WebSiteDesc=Siti Web in cui è possibile cercare altri moduli ...
    -DevelopYourModuleDesc=Some solutions to develop your own module...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
    +DevelopYourModuleDesc=Spunti per sviluppare il tuo modulo...
     URL=Collegamento
     BoxesAvailable=Widget disponibili
     BoxesActivated=Widget attivi
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Non memorizzare le password in chiaro nel database (racc
     MainDbPasswordFileConfEncrypted=Password del database crittata in conf.php (raccomandato)
     InstrucToEncodePass=Per avere la password codificata sostituisci nel file <b>conf.php</b> , la linea <br><b>$dolibarr_main_db_pass="...";</b><br>con<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Per avere la password decodificata (in chiaro) sostituisci nel file<b>conf.php</b> la linea <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>con<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protezione e crittografia dei PDF generati
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=La protezione di un documento PDF rende possibile la lettura e la stampa con qualsiasi browser; tuttavia modifica e copia non sono più possibili. Si noti che l'utilizzo di questa funzionalità non renderà possibile la stampa unione dei file PDF
     Feature=Caratteristica
     DolibarrLicense=Licenza
    @@ -246,47 +246,51 @@ ExternalResources=Risorse esterne
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=La documentazione per utenti e sviluppatori e le FAQ sono disponibili sul wiki di Dolibarr: <br/>Dai un'occhiata a <a href="%s" target="_blank"><b> %s</b></a>
     ForAnswersSeeForum=Per qualsiasi altro problema/domanda, si può utilizzare il forum di Dolibarr: <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=In quest'area puoi cercare un servizio di supporto su Dolibarr.
    -HelpCenterDesc2=Alcuni di questi servizi sono disponibili <b>solo in inglese</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Attuale gestore menu
     MeasuringUnit=Unità di misura
     LeftMargin=Margine sinistro
     TopMargin=Margine superiore
     PaperSize=Tipo di carta
     Orientation=Orientamento
    -SpaceX=Space X
    -SpaceY=Space Y
    +SpaceX=Spazio X
    +SpaceY=Spazio Y
     FontSize=Dimensione del testo
     Content=Contenuto
     NoticePeriod=Periodo di avviso
     NewByMonth=New by month
     Emails=Email
     EMailsSetup=Impostazioni Email
    -EMailsDesc=Questa pagina ti permette di sovrascrivere i tuoi parametri di PHP per l'invio di email. In molti casi con Unix/Linux OS, le impostazioni di PHP sono corrette e questi parametri inutilizzati.
    -EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=Porta SMTP (Di default in php.ini: <b> %s </b>)
    -MAIN_MAIL_SMTP_SERVER=Host SMTP (Di default in php.ini: <b> %s </b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Porta SMTP (non disponibile in PHP su Linux)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP Host (non disponibile in PHP su Linux)
    -MAIN_MAIL_EMAIL_FROM=Inviante email per email automatiche (di default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Inviare sistematicamente una copia carbone nascosta di tutte le email a
    -MAIN_DISABLE_ALL_MAILS=Disabilita tutti gli invii email (per scopi di test o demo)
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
    +EmailSenderProfiles=Profili mittente email
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Metodo da utilizzare per l'invio di email
    -MAIN_MAIL_SMTPS_ID=Id per l'autenticazione SMTP, se necessario
    -MAIN_MAIL_SMTPS_PW=Password per l'autenticazione SMTP, se necessaria
    -MAIN_MAIL_EMAIL_TLS= Usa cifratura TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS= Usa crittografia TLS (STARTTLS)
    -MAIN_DISABLE_ALL_SMS=Disabilitare tutti gli invii SMS (per scopi di test o demo)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Metodo da utilizzare per inviare SMS
    -MAIN_MAIL_SMS_FROM=Numero del chiamante predefinito per l'invio di SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Email utente
     CompanyEmail=Email società
     FeatureNotAvailableOnLinux=Funzione non disponibile sui sistemi Linux. Viene usato il server di posta installato sul server (es. sendmail).
    -SubmitTranslation=Se la traduzione per questa lingua non è completa o trovi degli errori, puoi correggere i file presenti nella directory <b>langs/%s</b> e pubblicare i file modificati su www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Se la traduzione per questa lingua non è completa o trovi degli errori, puoi correggere i file presenti nella directory <b>langs/%s</b> e pubblicare i file modificati su dolibarr.org/forum oppure, se sei uno sviluppatore, su github.com/Dolibarr/dolibarr
     ModuleSetup=Impostazioni modulo
     ModulesSetup=Impostazione Modulo/Applicazione
    @@ -307,17 +311,17 @@ MenuHandlers=Gestori menu
     MenuAdmin=Editor menu
     DoNotUseInProduction=Da non usare in produzione
     ThisIsProcessToFollow=Il procedimento da seguire è:
    -ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
    +ThisIsAlternativeProcessToFollow=Questa è una impostazione manuale alternativa:
     StepNb=Passo %s
    -FindPackageFromWebSite=Trova un pacchetto che fornisca la funzionalità desiderata (per esempio su %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Scarica il pacchetto (per esempio dal sito ufficiale %s).
    -UnpackPackageInDolibarrRoot=Scompatta il pacchetto sul server nella directory dedicata a Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Installazione del modulo completata. Devi abilitare e configurare il modulo nella tua applicazione dalla pagina di configurazione dei moduli: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=La directory root alternativa non è stata associata ad una directory esistente.<br>
     InfDirAlt=A partire dalla versione 3 è possibile definire una directory root alternativa. Ciò permette di archiviare plugin e template personalizzati nello stesso posto.<br>Basta creare una directory nella root di Dolibarr (per esempio: custom).<br>
     InfDirExample=<br>Poi dichiaralo nel file  <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>. Se queste righe sono commentate con "#", per abilitarle basta rimuovere il carattere "#".
    -YouCanSubmitFile=Per questo passaggio puoi inviare il file .zip del modulo qui:
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Versione attuale di Dolibarr
     CallUpdatePage=Vai alla pagina che aggiorna la struttura del database e dati su %s.
     LastStableVersion=Ultima versione stabile
    @@ -325,7 +329,7 @@ LastActivationDate=Ultima data di attivazione
     LastActivationAuthor=Ultimo
     LastActivationIP=Latest activation IP
     UpdateServerOffline=Update server offline
    -WithCounter=Manage a counter
    +WithCounter=Gestisci un contatore
     GenericMaskCodes=Puoi inserire uno schema di numerazione. In questo schema, possono essere utilizzati i seguenti tag : <br><b> {000000} </b> Corrisponde a un numero che sarà incrementato ad ogni aggiunta di %s. Inserisci il numero di zeri equivalente alla lunghezza desiderata per il contatore. Verranno aggiunti zeri a sinistra fino alla lunghezza impostata per il contatore. <br><b> {000000+000} </b> Come il precedente, ma con un offset corrispondente al numero a destra del segno + che viene applicato al primo inserimento %s. <br> <b> {000000@x} </b> Come sopra, ma il contatore viene reimpostato a zero quando si raggiunge il mese x (x compreso tra 1 e 12). Se viene utilizzata questa opzione e x è maggiore o uguale a 2, diventa obbligatorio inserire anche la sequenza {yy}{mm} o {yyyy}{mm}. <br> <b> {dd} </b> giorno (da 01 a 31). <br> <b> {mm} </b> mese (da 01 a 12). <br> <b> {yy} </b>, <b> {yyyy} </b> o <b> {y}  </b> anno con 2, 4 o 1 cifra.<br>
     GenericMaskCodes2=<b>{cccc}</b>il codice cliente di n caratteri<br><b>{cccc000}</b> il codice cliente di n caratteri è seguito da un contatore dedicato per cliente. Questo contatore dedicato per i clienti è azzerato allo stesso tempo di quello globale.<br><b>{tttt}</b> Il codice di terze parti composto da n caratteri (vedi menu Home - Impostazioni - dizionario - tipi di terze parti). Se aggiungi questa etichetta, il contatore sarà diverso per ogni tipo di terze parti<br>
     GenericMaskCodes3=Tutti gli altri caratteri nello schema rimarranno inalterati. <br> Gli spazi non sono ammessi. <br>
    @@ -347,37 +351,37 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Ritardo per il caching di esportazione (0 o vuoto per disabilitare la cache)
     DisableLinkToHelpCenter=Nascondi link <b>Hai bisogno di aiuto?</b> sulla pagina di accesso
     DisableLinkToHelp=Nascondi link  della guida online "<b>%s</b>"
    -AddCRIfTooLong=La lunghezza delle righe non viene controllata automaticamente. Inserire gli a capo, se necessari.
    -ConfirmPurge=Vuoi davvero eseguire questa cancellazione?<br>Questa operazione eliminerà definitivamente tutti i dati senza possibilità di ripristino (ECM, allegati, ecc ...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Durata minima
     LanguageFilesCachedIntoShmopSharedMemory=File Lang caricati nella memoria cache
     LanguageFile=File di Lingua
    -ExamplesWithCurrentSetup=Esempi di funzionamento secondo la configurazione attuale
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Elenco delle directory dei modelli OpenDocument
     ListOfDirectoriesForModelGenODT=Lista di cartelle contenenti file modello in formato OpenDocument.<br><br>Inserisci qui il percorso completo delle cartelle.<br>Digitare un 'Invio' tra ciascuna cartella.<br>Per aggiungere una cartella del modulo GED, inserire qui <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>I file in quelle cartelle devono terminare con <b>.odt</b> o <b>.ods</b>.
    -NumberOfModelFilesFound=Numero di modelli per documenti ODT/ODS trovati in queste directory
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Esempi di sintassi: <br/> c: dir \\ <br/> /Home/mydir <br/> DOL_DATA_ROOT/ECM/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br/>Per sapere come creare i modelli di documento odt, prima di salvarli in queste directory, leggere la documentazione wiki:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
     FirstnameNamePosition=Posizione del cognome/nome
    -DescWeather=Le seguenti immagini verranno visualizzate sulla dashboard quando il numero di azioni in ritardo raggiungere i seguenti valori:
    +DescWeather=Le seguenti immagini verranno visualizzate sulla panoramica quando il numero di azioni in ritardo raggiunge i seguenti valori:
     KeyForWebServicesAccess=Chiave per l'accesso ai Web Services (parametro &quot;dolibarrkey&quot; in webservices)
     TestSubmitForm=Submit form di test
     ThisForceAlsoTheme=Usando questo il gestore dei menu userà anche il proprio tema indipedentemente dalla scelta dell'utente. Inoltre questo gestore dei menu specializzato per smartphone non funziona su tutti gli smartphone. Se si verificassero problemi, consigliamo di utilizzare un altro gestore dei menu.
     ThemeDir=Directory delle skin
    -ConnectionTimeout=Timeout della connessione
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Timeout della risposta
     SmsTestMessage=Prova messaggio da __PHONEFROM__ a __PHONETO__
     ModuleMustBeEnabledFirst=Il modulo <b>%s</b> deve prima essere attivato per poter accedere a questa funzione.
     SecurityToken=Token di sicurezza
    -NoSmsEngine=Nessun manager mittente SMS disponibili. SMS gestore del mittente non sono installati con la distribuzione di default (perché dipende da un fornitore esterno), ma si possono trovare alcuni su http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Si possono impostare tutte le opzioni globali relative alla generazione di file pdf
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Regole per il forge di caselle di indirizzi
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
    -PDFRulesForSalesTax=Rules for Sales Tax / VAT
    +PDFRulesForSalesTax=Regole per tasse sulla vendita/IVA
     PDFLocaltax=Regole per %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Nascondi le descrizioni dei prodotti nel pdf generato
     HideRefOnPDF=Nascondi il ref. prodotto nei PDF generati
     HideDetailsOnPDF=Nascondi dettagli linee prodotti sui PDF generati
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametri di generazione degli indirizzi
     SecurityTokenIsUnique=Utilizzare un unico parametro securekey per ogni URL
     EnterRefToBuildUrl=Inserisci la reference per l'oggetto %s
     GetSecuredUrl=Prendi URL calcolato
    -ButtonHideUnauthorized=Nascondi pulsanti per azioni non autorizzate anziché mostrare pulsantii disabilitati
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Vecchia aliquota IVA
     NewVATRates=Nuova aliquota IVA
     PriceBaseTypeToChange=Modifica i prezzi con la valuta di base definita.
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Lista di selezione
     ExtrafieldSelectList = Seleziona dalla tabella
     ExtrafieldSeparator=Separatore (non è un campo)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio button (una sola scelta)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Campo calcolato
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=La lista dei parametri deve contenere chiave univoca e valore.<br><br>Per esempio:<br>1, valore1<br>2, valore2<br>3, valore3<br>...
     ExtrafieldParamHelpradio=La lista dei parametri deve contenere chiave univoca e valore.<br><br>Per esempio:<br>1, valore1<br>2, valore2<br>3, valore3<br>...
    @@ -432,60 +436,62 @@ DefaultLink=Link predefinito
     SetAsDefault=Imposta come predefinito
     ValueOverwrittenByUserSetup=Attenzione, questo valore potrebbe essere sovrascritto da un impostazione specifica dell'utente (ogni utente può settare il proprio url clicktodial)
     ExternalModule=Modulo esterno - Installato nella directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Vuoi davvero eliminare tutti i valori attuali dei codici a barre?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Abilita file di cache
     ShowDetailsInPDFPageFoot=Aggiungi ulteriori dettagli a piè di pagina nei files PDF, come l'indirizzo della tua società o i nomi dei managers (per completare id professionali, capitale sociale e numeri di partita IVA).
     NoDetails=Nessun dettaglio nel piè di pagina
     DisplayCompanyInfo=Mostra indirizzo dell'azienda
     DisplayCompanyManagers=Visualizza nomi responsabili
     DisplayCompanyInfoAndManagers=Mostra l'indirizzo dell'azienda ed il nome del manager
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Clicca per mostrare la descrizione
    -DependsOn=A questo modulo serve il modulo
    +DependsOn=This module needs the module(s)
     RequiredBy=Questo modulo è richiesto dal modulo
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Abilita l'utilizzo di valori predefiniti personalizzati
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Campo
     ProductDocumentTemplates=Document templates to generate product document
     FreeLegalTextOnExpenseReports=Testo libero sul report di spesa
    -WatermarkOnDraftExpenseReports=Watermark on draft expense reports
    -AttachMainDocByDefault=Set this to 1 if you want to attach main document to email by default (if applicable)
    +WatermarkOnDraftExpenseReports=Bozze delle note spese filigranate
    +AttachMainDocByDefault=Imposta a 1 se vuoi allegare il documento principale alle email come impostazione predefinita (se applicabile)
     FilesAttachedToEmail=Allega file
     SendEmailsReminders=Invia promemoria agenda via email
     davDescription=Add a component to be a DAV server
    -DAVSetup=Setup of module DAV
    -DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAVSetup=Configurazione del modulo DAV
    +DAV_ALLOW_PUBLIC_DIR=Attiva directory pubblica (directory WebDAV senza login)
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Utenti e gruppi
     Module0Desc=Gestione utenti/impiegati e gruppi
    -Module1Name=Terzi
    +Module1Name=Third Parties
     Module1Desc=Gestione aziende e contatti
     Module2Name=Commerciale
     Module2Desc=Gestione commerciale
     Module10Name=Contabilità
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposte
     Module20Desc=Gestione proposte commerciali
     Module22Name=Posta massiva
    @@ -511,13 +517,13 @@ Module52Desc=Gestione magazzino prodotti
     Module53Name=Servizi
     Module53Desc=Gestione servizi
     Module54Name=Contratti/Abbonamenti
    -Module54Desc=Gestione contratti (servizi o abbonamenti)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Codici a barre
     Module55Desc=Gestione codici a barre
     Module56Name=Telefonia
     Module56Desc=Integrazione telefonia
     Module57Name=Ordini permanenti e domiciliazioni
    -Module57Desc=Gestione degli ordini di pagamento SEPA Direct Debit. Comprende anche la generazione di file SEPA per i paesi europei.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integrazione di un sistema ClickToDial (per esempio Asterisk)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Spese di viaggio e note spese
     Module75Desc=Gestione spese di viaggio e note spese
     Module80Name=Spedizioni
     Module80Desc=Gestione spedizioni e consegne ordini
    -Module85Name=Banche e cassa
    +Module85Name=Banks and Cash
     Module85Desc=Gestione di conti bancari o conti di cassa
    -Module100Name=Sito esterno
    -Module100Desc=Includi un sito esterno nei menu di Dolibarr e visualizzalo in un frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman e SPIP
     Module105Desc=Interfaccia Mailman o SPIP per il modulo membri
     Module200Name=LDAP
    -Module200Desc=Sincronizzazione directory LDAP
    +Module200Desc=LDAP directory synchronization
     Module210Name=Postnuke
     Module210Desc=Integrazione Postnuke
     Module240Name=Esportazione dati
    -Module240Desc=Strumento per esportare i dati di Dolibarr (con assistenti)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Importazione dati
    -Module250Desc=Strumento per importare i dati in Dolibarr (con assistenti)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Membri
     Module310Desc=Gestione membri della fondazione
     Module320Name=Feed RSS
     Module320Desc=Aggiungi feed RSS alle pagine di Dolibarr
    -Module330Name=Segnalibri
    -Module330Desc=Gestione segnalibri
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Calendario web
     Module410Desc=Integrazione calendario web
    -Module500Name=Taxes and Special expenses
    +Module500Name=Tasse e spese speciali
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Pagamento stipendi dipendenti
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Prestito
     Module520Desc=Gestione dei prestiti
     Module600Name=Notifiche di eventi lavorativi
    -Module600Desc=Inviare notifiche EMail (generate da eventi aziendali) ad utenti (impostazione definita per ogni utente) o contatti di terze parti (impostazione definita per ogni terza parte) o a email predefinite
    -Module600Long=Nota che questo modulo è dedicato all'invio di e-mail in tempo reale quando si verifica un evento aziendale dedicato. Se stai cercando una funzione per inviare promemoria via e-mail dei tuoi eventi in agenda, vai alla configurazione del modulo Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Varianti prodotto
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donazioni
     Module700Desc=Gestione donazioni
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tag/categorie
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=FCKeditor
    -Module2000Desc=Permette di utilizzare per alcune aree di testo un edito avanzato (basato su CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Prezzi dinamici
     Module2200Desc=Abilita l'utilizzo di espressioni matematiche per i prezzi
     Module2300Name=Processi pianificati
     Module2300Desc=Gestione delle operazioni pianificate
     Module2400Name=Eventi/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Attiva il server SOAP che fornisce i servizi di API
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Attiva il server REST che fornisce i servizi di API
     Module2660Name=Chiamata WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Usa il servizio online Gravatar (www.gravatar.com) per mostrare le foto degli utenti/membri. Necessita dell'accesso a Internet
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=Client FTP
     Module2900Name=GeoIPMaxmind
     Module2900Desc=Localizzazione degli accessi tramite GeoIP Maxmind
     Module3100Name=Skype
     Module3100Desc=Aggiunge un collegamento a Skype nelle schede di terze parti e contatti
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=Risorse umane
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multiazienda
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Siti web
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Gestione delle richieste di permesso
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Lotti di prodotto
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Modulo per offrire una pagina di pagamento che accetti pagamenti con carte di credito o debito via PayBox. Può essere usato per tutti i pagamenti dei clienti o solo per alcune specifiche tipologie di pagamenti in Dolibarr (fatture, ordini, ...) 
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Punti vendita
     Module50100Desc=Modulo per la creazione di un punto vendita (POS)
    +Module50150Name=Punti vendita
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Modulo per offrire una pagina di pagamento che accetti pagamenti PayPal (carte di credito o credito PayPal). Può essere usato per tutti i pagamenti dei clienti o solo per alcune specifiche tipologie di pagamenti in Dolibarr (fatture, ordini, ...) 
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Stampa diretta (senza aprire i documenti) tramite l'interfaccia CUPS IPP (la stampante deve essere visibile dal server, e il server deve avere CUPS installato).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Sondaggio, Indagine o Votazione
    -Module55000Desc=Modulo per creare sondaggi, indagini o feedback online (Doodle, Studs, Rdvz o simili)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margini
     Module59000Desc=Modulo per gestire margini
     Module60000Name=Commissioni
     Module60000Desc=Modulo per gestire commissioni
    -Module62000Name=Incoterm
    -Module62000Desc=Aggiunge funzioni per la gestione Incoterm
    +Module62000Name=Import-Export
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Risorse
     Module63000Desc=Gestione risorse (stampanti, automobili, locali, ...) e loro utilizzo all'interno degli eventi
     Permission11=Vedere le fatture attive
    @@ -651,9 +661,9 @@ Permission32=Creare/modificare  prodotti
     Permission34=Eliminare prodotti
     Permission36=Vedere/gestire prodotti nascosti
     Permission38=Esportare prodotti
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Creare/modificare i progetti (condivisi e di cui si è contatto). Può anche creare compiti/attività e assegnare risorse a progetti e compiti/attività
    -Permission44=Eliminare progetti
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Esporta progetti
     Permission61=Vedere gli interventi
     Permission62=Creare/modificare gli interventi
    @@ -686,7 +696,7 @@ Permission109=Eliminare spedizioni
     Permission111=Vedere i conti bancari
     Permission112=Creare/modificare/cancellare e confrontare operazioni bancarie
     Permission113=Imposta conti finanziari (crea, gestire le categorie)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Operazioni di esportazione ed estratti conto
     Permission116=Trasferimenti tra conti
     Permission117=Gestire l'invio di assegni
    @@ -694,15 +704,15 @@ Permission121=Vedere soggetti terzi collegati all'utente
     Permission122=Creare/modificare terzi legati all'utente
     Permission125=Eliminare terzi legati all'utente
     Permission126=Esportare terzi
    -Permission141=Legge tutti i progetti e tutti i compiti (anche progetti privati in cui non sono stato insertio come contatto)
    -Permission142=Crea e mofica tutti i progetti e tutti i compiti (anche progetti privati in cui non sono stato insertio come contatto)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Cancella tutti i progetti e tutti i compiti (anche progetti privati in cui non sono stato insertio come contatto)
     Permission146=Vedere provider
     Permission147=Vedere statistiche
     Permission151=Vedere ordini permanenti
     Permission152=Creare/modificare richieste di ordini permanenti
     Permission153=Trasmettere fatture ordini permanenti
    -Permission154=Pagare/rifiutare fatture ordini permanenti
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Leggi contratti / abbonamenti
     Permission162=Crea/modifica contratti/abbonamenti
     Permission163=Attiva un servizio/sottoscrizione di un contratto
    @@ -725,7 +735,7 @@ Permission187=Chiudere fornitore ordini
     Permission188=Annullare ordini fornitore
     Permission192=Creare linee
     Permission193=Eliminare linee
    -Permission194=Leggere banda linee
    +Permission194=Read the bandwidth lines
     Permission202=Creare connessioni ADSL
     Permission203=Ordinare ordini connessioni
     Permission204=Ordinare connessioni
    @@ -750,12 +760,12 @@ Permission244=Vedere contenuto delle categorie nascoste
     Permission251=Vedere altri utenti e gruppi
     PermissionAdvanced251=Vedere altri utenti
     Permission252=Creare/modificare altri utenti e gruppi e propri permessi
    -Permission253=Creare/Modificare altri utenti, gruppi e permessi
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Creare/modificare utenti interni/esterni e permessi
     Permission254=Eliminare o disattivare altri utenti
     Permission255=Cambiare le password di altri utenti
     Permission256=Eliminare o disabilitare altri utenti
    -Permission262=Estendere accesso a tutte le terze parti (non solo quelle legate all'utente). Non ha effetto sugli utenti esterni e sui progetti.
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Vedere CA
     Permission272=Vedere fatture
     Permission273=Emettere fatture
    @@ -765,7 +775,7 @@ Permission283=Eliminare contatti
     Permission286=Esportare contatti
     Permission291=Vedere tariffe
     Permission292=Impostare permessi per le tariffe
    -Permission293=Modificare tariffe clienti
    +Permission293=Modify customers tariffs
     Permission300=Vedere codici a barre
     Permission301=Creare/modificare codici a barre
     Permission302=Eliminare codici a barre
    @@ -787,11 +797,9 @@ Permission401=Vedere sconti
     Permission402=Creare/modificare sconti
     Permission403=Convalidare sconti
     Permission404=Eliminare sconti
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Crea/modifica pagamento stipendi
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Esporta stipendi
     Permission520=Read Loans
     Permission522=Crea/modifica prestiti
    @@ -844,8 +852,8 @@ Permission1251=Eseguire importazioni di massa di dati esterni nel database (data
     Permission1321=Esportare fatture attive, attributi e pagamenti
     Permission1322=Riaprire le fatture pagate
     Permission1421=Esportare ordini cliente e attributi
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Eliminare le richieste di ferie
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Leggi risorse
     Permission63002=Crea/modifica risorse
     Permission63003=Elimina risorsa
     Permission63004=Collega le risorse agli eventi
    -DictionaryCompanyType=Tipi dei soggetti terzi
    -DictionaryCompanyJuridicalType=forma legale dei soggetti terzi
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=Stato/Provincia
     DictionaryRegion=Regioni
    @@ -894,7 +902,7 @@ DictionaryVAT=Aliquote IVA o Tasse di vendita
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Termini di pagamento
     DictionaryPaymentModes=Modalità di pagamento
    -DictionaryTypeContact=Tipi di contatti/indirizzi
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotassa (WEEE)
     DictionaryPaperFormat=Formati di carta
    @@ -908,47 +916,47 @@ DictionarySource=Origine delle proposte/ordini
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Modelli per piano dei conti
     DictionaryAccountancyJournal=Libri contabili
    -DictionaryEMailTemplates=Modelli email
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Unità
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Tipi di ferie
    -DictionaryOpportunityStatus=Stato opportunità per progetto/clienti interessati
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Impostazioni salvate
     SetupNotSaved=Impostazioni non salvate
     BackToModuleList=Torna alla lista moduli
    -BackToDictionaryList=Torna alla lista dei dizionari
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Gestione IVA
    -VATIsUsedDesc=Per impostazione predefinita l'aliquota IVA usata per la creazione di prospetti, fatture, ordini, ecc. segue la regola attiva:<br> - Se il venditore non è un soggetto IVA, l'aliquota IVA è pari a 0.<br> - Se i paesi di vendita e di acquisto coincidono, il valore predefinito dell'aliquota IVA è quello del prodotto nel paese di vendita. <br> - Se il venditore e l'acquirente si trovano entrambi all'interno della Comunità Europea ed i beni consistono in servizi di trasporto (auto, nave, aereo), il valore predefinito dell'aliquota IVA è 0 (L'IVA dovrebbe essere pagata dall'acquirente all'ufficio doganale del suo paese e non al venditore). <br> - Se il venditore e l'acquirente si trovano entrambi all'interno della Comunità Europea e l'acquirente non è una società, l'aliquota IVA predefinita è quella del prodotto venduto. <br> - Se il venditore e l'acquirente si trovano entrambi all'interno della Comunità Europea e l'acquirente è una società, l'aliquota IVA predefinita è 0.<br>In tutti gli altri casi l'aliquota IVA predefinita è 0.
    -VATIsNotUsedDesc=Impostazione predefinita in cui l'aliquota IVA è pari a 0. Adatto a soggetti come associazioni, persone fisiche o piccole imprese con regime semplificato o a forfait.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Tariffa
     LocalTax1IsNotUsed=Non usare seconda tassa
    -LocalTax1IsUsedDesc=Usa il secondo tipo di tassa (altra oltre l'IVA)
    -LocalTax1IsNotUsedDesc=Non usare altro tipo di tassa (altra oltre IVA)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Secondo tipo di tassa
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Non usare terza tassa
    -LocalTax2IsUsedDesc=Usa un terzo tipo di tassa (altra oltre IVA)
    -LocalTax2IsNotUsedDesc=Non usare altro tipo di tassa (altra oltre IVA)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Terzo tipo di tassa
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= Gestione RE
    -LocalTax1IsUsedDescES= Per impostazione predefinita il tasso di RE segue la regola standard dell'attivo standard: <br/> Se il compratore non è sottoposto a RE, RE di default = 0. Fine della regola. <br> Se l'acquirente è soggetto a RE, allore si segue l'impostazione predefinita. Fine della regola. <br/>
    -LocalTax1IsNotUsedDescES= Per default il RE proposto è 0. Fine della regola.
    -LocalTax1IsUsedExampleES= In Spagna sono dei professionisti soggetti ad alcune sezioni specifiche del IAE spagnolo.
    -LocalTax1IsNotUsedExampleES= In Spagna alcune società professionali sono soggette a regimi particolari.
    -LocalTax2ManagementES= Gestione IRPF
    -LocalTax2IsUsedDescES= Il tasso di IRPF per impostazione predefinita segue la regola dell'attivo standard: <br> Se il venditore non è sottoposto a IRPF, allora IRPF di default = 0. Fine della regola. <br> Se il venditore è sottoposto a IRPF, allora si segue l'impostazione IRPF predefinita. Fine della regola. <br>
    -LocalTax2IsNotUsedDescES= Per impostazione predefinita la proposta di IRPF è 0. Fine della regola.
    -LocalTax2IsUsedExampleES= In Spagna, liberi professionisti e freelance che forniscono servizi e le aziende che hanno scelto il regime fiscale modulare.
    -LocalTax2IsNotUsedExampleES= Vale per le imprese spagnole che non hanno optato per il sistema fiscale modulare.
    +LocalTax1ManagementES=Gestione RE
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Per default il RE proposto è 0. Fine della regola.
    +LocalTax1IsUsedExampleES=In Spagna sono dei professionisti soggetti ad alcune sezioni specifiche del IAE spagnolo.
    +LocalTax1IsNotUsedExampleES=In Spagna alcune società professionali sono soggette a regimi particolari.
    +LocalTax2ManagementES=Gestione IRPF
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Per impostazione predefinita la proposta di IRPF è 0. Fine della regola.
    +LocalTax2IsUsedExampleES=In Spagna, liberi professionisti e freelance che forniscono servizi e le aziende che hanno scelto il regime fiscale modulare.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Acquisti-vendite
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Vendite
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Descrizione (utilizzata in tutti i documenti per cui non esiste la traduzione)
     LabelOnDocuments=Descrizione sul documento
    -NbOfDays=Numero di giorni
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Alla fine del mese
     CurrentNext=Corrente/Successivo
     Offset=Scostamento
    @@ -984,7 +993,7 @@ DatabaseUser=Utente database
     DatabasePassword=Database delle password
     Tables=Tabelle
     TableName=Nome della tabella
    -NbOfRecord=Numero di record
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Tipo di driver
     SummarySystem=Informazioni riassuntive sul sistema
    @@ -996,17 +1005,17 @@ Skin=Tema
     DefaultSkin=Skin di default
     MaxSizeList=Lunghezza massima elenchi
     DefaultMaxSizeList=Lunghezza massima predefinita elenchi
    -DefaultMaxSizeShortList=Massima lunghezza di default per le liste brevi (es in scheda cliente)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Messaggio del giorno
     MessageLogin=Messaggio per la pagina di login
     LoginPage=Pagina di login
     BackgroundImageLogin=Immagine di sfondo
     PermanentLeftSearchForm=Modulo di ricerca permanente nel menu di sinistra
    -DefaultLanguage=La lingua da impostare come predefinita (codice lingua)
    +DefaultLanguage=Lingua predefinita (codice lingua)
     EnableMultilangInterface=Attiva l'interfaccia multilingua
     EnableShowLogo=Abilita la visualizzazione del logo
    -CompanyInfo=Informazioni società/organizzazione
    -CompanyIds=Company/organization identities
    +CompanyInfo=Società/Organizzazione
    +CompanyIds=Company/Organization identities
     CompanyName=Nome
     CompanyAddress=Indirizzo
     CompanyZip=CAP
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Titolare del conto bancario %s
     BankModuleNotActive=Modulo conti bancari non attivato
     ShowBugTrackLink=Mostra link "<strong>%s</strong>"
     Alerts=Avvisi e segnalazioni
    -DelaysOfToleranceBeforeWarning=Tolleranza sui ritardi prima di un avvertimento
    -DelaysOfToleranceDesc=Questa schermata consente di definire per ciascun elemento la tolleranza sul ritardo prima che appaia una segnalazione nella casella con l'immagine %s.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolleranza sul ritardo (in giorni) prima di un avvertimento per azioni pianificate non ancora realizzate
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolleranza sul ritardo (in giorni) prima di un avvertimento per progetti non terminati nei tempi previsti
    -Delays_MAIN_DELAY_TASKS_TODO=Tolleranza sul ritardo (in giorni) prima di un avvertimento per attività di progetto pianificate e non ancora completate
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Tolleranza sul ritardo (in giorni) prima di un avvertimento per ordini non ancora lavorati
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Tolleranza sul ritardo (in giorni) prima di un avvertimento per  proposte da chiudere
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Tolleranza sul ritardo (in giorni) prima di un avvertimento per proposte non fatturate
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolleranza sul ritardo (in giorni) prima di un avvertimento per servizi da attivare
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolleranza sul ritardo (in giorni) prima di un avvertimento per  servizi scaduti
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolleranza sul ritardo (in giorni) prima di un avvertimento per fatture dei fornitori non pagate
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolleranza sul ritardo (in giorni) prima di un avvertimento per fatture attive non pagate
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolleranza sul ritardo (in giorni) prima di un avvertimento per movimenti bancari in attesa di riconciliazione
    -Delays_MAIN_DELAY_MEMBERS=Tolleranza sul ritardo (in giorni) prima di un avvertimento per quota di adesione ritardata
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolleranza sul ritardo (in giorni) prima un avvertimento per deposito di assegni da fare
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolleranza (in giorni) prima di avvisare per l'approvazione delle note spese
    -SetupDescription1=La sezione impostazioni consente il setup iniziale di Dolibarr prima del suo utilizzo.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Altre voci di menu consentono la gestione di parametri opzionali.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Eventi di audit di sicurezza
     Audit=Audit
     InfoDolibarr=Informazioni su Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Qui è possibile attivare il registro eventi di sicurezza di Doliba
     AreaForAdminOnly=I parametri di setup possono essere definiti solo da utenti di tipo <b>amministratore</b>.
     SystemInfoDesc=Le informazioni di sistema sono dati tecnici visibili in sola lettura e solo dagli amministratori.
     SystemAreaForAdminOnly=Questa sezione è disponibile solo agli utenti di tipo <b>amministratore</b>. Nessuna delle autorizzazioni disponibili può alterare questo limite.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Qui è possibile scegliere i parametri relativi all'aspetto di Dolibarr
     AvailableModules=Moduli disponibili
     ToActivateModule=Per attivare i moduli, andare nell'area <b>Impostazioni</b> (Home->Impostazioni->Moduli).
     SessionTimeOut=Timeout delle sessioni
    -SessionExplanation=Durata massima di una sessione, prima che venga richiesta una nuova autenticazione. N.B. Non è comunque garantito che la sessione scadrà al termine della durata, questo accade solo se è in esecuzione un sistema di pulizia della cache delle sessioni. <br/> Nota: senza usare sistemi particolari, PHP provvederà alla pulizia della sessione ogni <b>%s/%s</b> accessi circa, ma solo durante l'accesso da altre sessioni.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Trigger disponibili
    -TriggersDesc=I trigger sono file che una volta copiati nella directory <b>htdocs/include/trigger</b> modificano il flusso di lavoro di Dolibarr. Possono permettere nuove azioni, attivando nuovi eventi (creazione di nuova impresa, fattura di convalida, ecc...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=I trigger in questo file sono disattivati dal suffisso <b>-NoRun</b> nel nome.
     TriggerDisabledAsModuleDisabled=I trigger in questo file sono disabilitati perché il modulo <b>%s</b> è disattivato.
     TriggerAlwaysActive=I trigger in questo file sono sempre attivi, indipendentemente da quali moduli siano attivi in Dolibarr.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Inserire tutti i dati di riferimento. È possibile aggiungere i p
     ConstDesc=Questa pagina ti permette di modificare tutti i parametri non disponibili nelle pagine precedenti. Si tratta di parametri riservati per lo sviluppo o la risoluzione dei problemi.
     MiscellaneousDesc=Definire qui tutti gli altri parametri relativi alla sicurezza.
     LimitsSetup=Limiti/impostazioni di precisione
    -LimitsDesc=Da qui è possibile definire i limiti e la precisione utilizzati da Dolibarr.
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Limite massimo di decimali per i prezzi unitari.
     MAIN_MAX_DECIMALS_TOT=Limite massimo di decimali per il totale dei prezzi.
     MAIN_MAX_DECIMALS_SHOWN=Limite massimo dei decimali per i prezzi visualizzati a schermo (Aggiungi <b>...</b> dopo tale numero se vuoi visualizzare tre puntini per indicare il troncamento del numero).
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Prezzo unitario netto di un prodotto
     TotalPriceAfterRounding=Prezzo totale (al netto dell'IVA/IVA inclusa) dopo l'arrotondamento
     ParameterActiveForNextInputOnly=Parametro valido esclusivamente per il prossimo inserimento
     NoEventOrNoAuditSetup=Nessun evento di sicurezza registrato. Questo può essere normale se non la registrazione non è stato attivata in <b>Impostazioni - sicurezza - controllo</b>.
    -NoEventFoundWithCriteria=Nessun evento di sicurezza trovato con i criteri di ricerca impostati.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Controllare le impostazioni locali del server di posta (sendmail)
     BackupDesc=Per effettuare un backup completo di Dolibarr è necessario:
     BackupDesc2=Salvare il contenuto della directory dei documenti (<b>%s</b>) che contiene tutti i file generati e caricati (e che quindi contiene tutti i files dump generati al passo precedente).
    -BackupDesc3=Salva il contenuto del tuo database <b>(%s)</b> in un file dump. È possibile utilizzare il seguente assistente.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=L'archivio delle directory va conservato in un luogo sicuro.
     BackupDescY=Il file generato va conservato in un luogo sicuro.
    -BackupPHPWarning=Il backup non può essere garantito con questo metodo. Preferito quello precedente
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Per ripristinare un backup Dolibarr, è necessario:
    -RestoreDesc2=Ripristinare da un file di archivio (zip file, ad esempio) della cartella Documenti per estrarre la lista dei file nella cartella documenti nella nuova installazione di Dolibarr o in questa cartella di documenti <b>(%s).</b>
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=Importa MySQL
     ForcedToByAModule= Questa regola è impsotata su <b>%s</b> da un modulo attivo
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=È necessario eseguire questo c
     YourPHPDoesNotHaveSSLSupport=Il PHP del server non supporta SSL
     DownloadMoreSkins=Scarica altre skin
     SimpleNumRefModelDesc=Restituisce un numero di riferimento nel formato %syymm-nnnn dove yy è l'anno, mm è il mese e nnnn è una sequenza progressiva che non ritorna a 0.
    -ShowProfIdInAddress=Nei documenti mostra identità professionale completa di indirizzi
    -ShowVATIntaInAddress=Nascondi il num IVA Intra con indirizzo sui documenti
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Traduzione incompleta
    -MAIN_DISABLE_METEO=Disabilita visualizzazione meteo
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Modalità percentuale
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Clicca per usare %s
     TestLoginToAPI=Test login per API
    -ProxyDesc=Dolibarr deve disporre di un accesso a Internet per alcune funzi. Definire qui i parametri per permettere a Dolibarr l'accesso ad internet attraverso un server proxy.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Accesso esterno
     MAIN_PROXY_USE=Utilizza un server proxy (invece dell'accesso diretto a internet)
     MAIN_PROXY_HOST=Nome/indirizzo del server proxy
     MAIN_PROXY_PORT=Porta del server proxy
     MAIN_PROXY_USER=Login per usare il server proxy
     MAIN_PROXY_PASS=Password per utilizzare il server proxy
    -DefineHereComplementaryAttributes=Definire qui tutti gli attributi non predefiniti che vuoi supportati da %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Campi extra
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Attributi complementari (terze parti)
    -ExtraFieldsContacts=Attributi Complementari (contatti/indirizzi)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Attributi Complementari (membri)
     ExtraFieldsMemberType=Attributi Complementari (tipo di membro)
     ExtraFieldsCustomerInvoices=Attributi aggiuntivi (fatture)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Attenzione: su alcuni sistemi Linux, per poter inviare email, la configurazione di sendmail deve contenere l'opzione -ba (il parametro mail.force_extra_parameters nel file php.ini). Se alcuni destinatari non ricevono messaggi di posta elettronica, provate a modificare questo parametro con mail.force_extra_parameters =-BA).
     PathToDocuments=Percorso documenti
     PathDirectory=Percorso directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Configurazione della traduzione
     TranslationKeySearch=Cerca una chiave o una stringa di testo
     TranslationOverwriteKey=Sovrascrivi una stringa di testo
     TranslationDesc=La scelta della lingua visualizzata su schermo può essere modificata:<br>*Globalmente dal menu <strong>Home - Impostazioni - Layout di visualizzazione</strong><br>*Per utente: Usa <strong>Impostazioni interfaccia utente</strong> della Scheda utente (cliccare l'icona di login in alto sullo schermo).
     TranslationOverwriteDesc=Puoi anche effettuare l'override delle stringhe di testo utilizzando la tabella seguente. Seleziona la tua lingua nel box "%s", inserisci la chiave della stringa da tradurre nel campo "%s" e la tua traduzione nel campo "%s".
    -TranslationOverwriteDesc2=Puoi utilizzare il tab di ricerca per individuare la chiave della stringa di tuo interesse
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Stringa di testo
     CurrentTranslationString=Stringa di testo corrente
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=Nuova stringa di testo da utilizzare
     OriginalValueWas=La traduzione originale è stata sovrascritta. Il testo originale era:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Applicazioni/moduli attivi: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Devi abilitare almeno un modulo
    -ClassNotFoundIntoPathWarning=La classe %s non è stata trovata al percorso PHP indicato
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Si in estate
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Sessioni salvate con criptazione tramite Suhosin
     ConditionIsCurrently=La condizione corrente è %s
    -YouUseBestDriver=Usi già il miglior driver attualmente disponibile: %s
    -YouDoNotUseBestDriver=Attualmente usi il driver %s , ma il driver raccomandato è il %s
    -NbOfProductIsLowerThanNoPb=Hai solo %s prodotti/servizi nel database. Non è richiesta alcuna ottimizzazione.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Ottimizzazione della ricerca
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=Stai utilizzando il browser %s. Questo browser è ok per sicurezza è performance.
    -BrowserIsKO=Stai utilizzando il browser web %s. Questo browser è noto per essere una cattiva scelta per sicurezza, performance e stabilità. Ti raccomandiamo di usare Chrome, Firefox, Opera o Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug caricato
     XCacheInstalled=XCache attivato
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Per esempio: +2 (compilare solo se ci sono problemi di scostamento del fuso orario)
     GetBarCode=Ottieni codice a barre
     ##### Module password generation
     PasswordGenerationStandard=Genera una password in base all'algoritmo interno di  Dolibarr: 8 caratteri comprensivi di numeri e lettere minuscole.
    -PasswordGenerationNone=Non suggerire password generate. La password deve essere digitata manualmente.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=Secondo la tua configurazione
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=È obbligatorio inserire un indirzzo email per creare un nuovo
     HRMSetup=Impostazioni modulo risorse umane
     ##### Company setup #####
     CompanySetup=Impostazioni modulo aziende
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per utente, un utente alla volta.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Modelli per i documenti
    -DocumentModelOdt=Generare documenti da modelli OpenDocuments (file .ODT o .ODS per OpenOffice, KOffice, TextEdit, ecc...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Filigrana sulle bozze
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Unicità dell'identità
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Deve essere unico?
    -MustBeMandatory=Obbligatorio per creare il soggetto terzo?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Obbligatorio per convalidare le fatture?
     TechnicalServicesProvided=Servizi tecnici forniti
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Un link per esportare <b>%s</b> è disponibile al seguente link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Un link per esportare <b>%s</b> è disponibile al seguent
     BillsSetup=Impostazioni modulo fatture
     BillsNumberingModule=Numerazione modulo fatture e note di credito
     BillsPDFModules=Modelli fattura in pdf
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Nota di credito
     CreditNotes=Note di credito
    @@ -1250,7 +1261,7 @@ WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Ask for Warehouse Source for order
     BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Ask for bank account destination of purchase order
     ##### Orders #####
     OrdersSetup=Configurazione della gestione ordini
    -OrdersNumberingModules=Modelli di numerazione degli ordini
    +OrdersNumberingModules=Modelli di numerazione ordini
     OrdersModelModule=Modelli per ordini in pdf
     FreeLegalTextOnOrders=Testo libero sugli ordini
     WatermarkOnDraftOrders=Bozze degli ordini filigranate (nessuna filigrana se vuoto)
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Gestire un account di accesso per ogni membro
     AdherentMailRequired=Email obbligatoria per creare un nuovo membro
     MemberSendInformationByMailByDefault=Checkbox per inviare una mail di conferma per i membri (è attiva per impostazione predefinita)
     VisitorCanChooseItsPaymentMode=Il visitatore può scegliere tra le modalità di pagamento disponibili
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Impostazioni del protocollo LDAP
     LDAPGlobalParameters=Parametri globali
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test della ricerca LDAP
     LDAPSynchroOK=Test sincronizzazione OK
     LDAPSynchroKO=Test sincronizzazione fallito
    -LDAPSynchroKOMayBePermissions=Sincronizzazione di prova non riuscita. Controllare che la connessione al server sia configurata correttamente e permetta gli aggiornamenti LDAP
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=Connessione TCP al server LDAP Ok (Server=%s, Port=%s)
     LDAPTCPConnectKO=Connessione TCP al server LDAP non riuscita (Server=%s, Port=%s)
    -LDAPBindOK=Connessione/Autenticazione sul server LDAP completata con successo (Server=%s, Porta=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connessione/Autenticazione sul server LDAP non riuscita (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=Server LDAP configurato per la versione 3
     LDAPSetupForVersion2=Server LDAP configurato per la versione 2
     LDAPDolibarrMapping=Mappatura Dolibarr
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, ActiveDirectory)
     LDAPFieldLoginSambaExample=Esempio: samAccountName
     LDAPFieldFullname=Cognome Nome
     LDAPFieldFullnameExample=Esempio: cn
    -LDAPFieldPasswordNotCrypted=Password in chiaro
    -LDAPFieldPasswordCrypted=Password criptata
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Esempio: userpassword
     LDAPFieldCommonNameExample=Esempio: cn
     LDAPFieldName=Nome
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=I valori di esempio sono progettati per <b>OpenLDAP</b> con i seguenti schemi di carico: <b>core.schema, cosine.schema, inetorgperson.schema</b>). Se si utilizzano tali schemi in OpenLDAP, modificare il file di configurazione <b>slapd.conf</b> per caricare tutti tali schemi.
     ForANonAnonymousAccess=Per un accesso autenticato (per esempio un accesso in scrittura)
     PerfDolibarr=Report di setup/ottimizzazione della performance
    -YouMayFindPerfAdviceHere=Troverai su questa pagina alcune informazioni o avvisi relative alla performance.
    -NotInstalled=Non installato, il tuo server non è rallentato per questo.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Cache applicativa
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Il modulo memcached, dedicato all'utilizzo del server memcached, è stato attivato.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=Cache HTTP per le risorse statiche (css, img, javascript)
     FilesOfTypeCached=I file di tipo %s vengono serviti dalla cache del server HTTP
     FilesOfTypeNotCached=I file di tipo %s non vengono serviti dalla cache del server HTTP
     FilesOfTypeCompressed=I file di tipo %s vengono compressi dal server HTTP
     FilesOfTypeNotCompressed=I file di tipo %s non vengono compressi dal server HTTP
     CacheByServer=Cache per server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache per browser
     CompressionOfResources=Compressione delle risposte HTTP
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Con i browser attuali l'individuazione automatica non è possibile
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Filtri di ricerca predefiniti
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Impostazioni modulo prodotti
     ServiceSetup=Impostazioni modulo servizi
     ProductServiceSetup=Impostazioni moduli prodotti e servizi
     NumberOfProductShowInSelect=Numero massimo di prodotti per le liste nelle combo di selezione  (0=nessun limite)
    -ViewProductDescInFormAbility=Visualizzare la descrizione dei prodotti nei form (altrimenti appariranno come tooltip popup)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualizzazione delle descrizioni dei prodotti nella lingua del contatto
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Tipo di codici a barre predefinito da utilizzare per i prodotti
     SetDefaultBarcodeTypeThirdParties=Tipo di codici a barre predefinito da utilizzare per terze parti
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Impostazione del modulo di consegna
     SendingsReceiptModel=Modello di ricevuta consegna (D.D.T.)
     SendingsNumberingModules=Moduli per la numerazione delle spedizioni
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Testo libero per le spedizioni
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Numerazione dei moduli di consegna prodotti
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Editor avanzato
     ActivateFCKeditor=Attiva editor avanzato per:
     FCKeditorForCompany=Editor WYSIWIG per le società
     FCKeditorForProduct=Editor WYSIWIG per i prodotti/servizi
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= Editor WYSIWIG per le email
     FCKeditorForUserSignature=WYSIWIG creazione/modifica della firma utente
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=la connessione al server riuscita, ma il database è errato.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
     OSCommerceTestOk=Connessione al server ' %s' sul database' %s' con l'utente ' %s' riuscita.
    -OSCommerceTestKo1=Connessione al server ' %s' riuscita, ma il database' %s' non è raggiungibile.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connessione al server ' %s' con l'utente' %s' fallita.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu soppresso
     Menus=Menu
    @@ -1548,7 +1561,7 @@ DetailRight=Visualizza il menu come non attivo (grigio)
     DetailLangs=Nome del file .lang contenente la traduzione del codice dell'etichetta
     DetailUser=Interno / esterno / Tutti
     Target=Destinatario
    -DetailTarget=Target del link (_blank, in una nuova finestra, ecc...)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Livello (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Modifica Menu
     DeleteMenu=Elimina voce menu
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=L'IVA è dovuta:<br/> - sulla consegna/pagamento per i beni
     OptionVatDebitOptionDesc=L'IVA è dovuta:<br/> - alla consegna/pagamento per i beni<br/>- alla fatturazione (a debito) per i servizi
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Alla consegna
     OnPayment=Al pagamento
     OnInvoice=Alla fatturazione
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Codice contabilità acquisti
     AgendaSetup=Impostazioni modulo agenda
     PasswordTogetVCalExport=Chiave per autorizzare l'esportazione di link
     PastDelayVCalExport=Non esportare evento più vecchio di
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Attiva i suoni per le notifiche
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Impostazioni modulo ClickToDial (telefonate con un clic)
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=Questo modulo aggiunge un'icona accanto ai numeri telefonici dei contatti.<br/> Cliccando sull'icona si attiva il collegamento al server che effettuerà le chiamate telefoniche.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Peri numeri di telefono basta usare un link di tipo "tel:"
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Punto vendita
     CashDeskSetup=Impostazioni modulo punto vendita
    -CashDeskThirdPartyForSell=Soggetto terzo predefinito per le vendite
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Conto bancario da utilizzare per pagamenti in contanti
     CashDeskBankAccountForCheque= Conto bancario da utilizzare per pagamenti con assegno
     CashDeskBankAccountForCB= Conto bancario da utilizzare per pagamenti con carta di credito
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Impostazioni modulo segnalibri
    -BookmarkDesc=Questo modulo consente di gestire i segnalibri web. È possibile aggiungere collegamenti a pagine Dolibarr o a qualsiasi altro sito web esterno al menu di sinistra.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Numero massimo dei segnalibri da mostrare nel menu di sinistra
     ##### WebServices #####
     WebServicesSetup=Impostazioni modulo webservices
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Impostazioni modulo multiazienda
     ##### Suppliers #####
     SuppliersSetup=Impostazioni modulo fornitori
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Modello per la numerazione delle fatture fornitore
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Impostazioni modulo progetti
     ProjectsModelModule=Modelli dei rapporti dei progetti
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Periodi di esercizio fiscale
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=Lista notifiche per utente
     ListOfNotificationsPerUserOrContact=Lista di notifiche per utente o per contatto
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Soglia
     BackupDumpWizard=Procedura guidata per creare file di backup del database (dump)
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Evidenzia le righe delle tabelle passandoci sopra con il mouse
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Colore del testo del titolo della pagina
     LinkColor=Colore dei link
     PressF5AfterChangingThis=Premi CTRL + F5 sulla tastiera o cancella la cache del browser per rendere effettiva la modifica di questo parametro
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Periodo minimo di avviso (le richieste di ferie/permesso dovranno essere effettuate prima di questo periodo)
     NbAddedAutomatically=Numero di giorni aggiunti ai contatori di utenti (automaticamente) ogni mese
     EnterAnyCode=Questo campo contiene un riferimento per identificare la linea. Inserisci qualsiasi valore di tua scelta, ma senza caratteri speciali.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=Il colore RGB è nel formato HEX, es:FF0000
     PositionIntoComboList=Posizione di questo modello nella menu a tendina
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=L'elemento a cui è abbinato questo modello
     TypeOfTemplate=Tipo di modello
    -TemplateIsVisibleByOwnerOnly=Template visibile solo al proprietario
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visibile ovunque
     VisibleNowhere=Invisibile
     FixTZ=Correzione del fuso orario
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=Stai usando l'ultima versione stabile
     TitleExampleForMajorRelease=Esempio di messaggio che puoi usare per annunciare questa major release (sentiti libero di usarlo sui tuoi siti web)
     TitleExampleForMaintenanceRelease=Esempio di messaggio che puoi usare per annunciare questa versione di manutenzione (sentiti libero di usarla sui tuoi siti web)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Modelli per documenti prodotto
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=Guarda ChangeLog file (in inglese)
     AllPublishers=Tutti gli editori
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Aggiungi altre pagine o servizi
     AddModels=aggiungi template per documenti o per numerazione
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Rilevamento impossibile
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Lista delle API disponibili
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Il modulo è stato attivato. Le autorizzazioni per i moduli attivati ​​sono state fornite solo agli utenti amministratori. Potrebbe essere necessario concedere le autorizzazioni ad altri utenti o gruppi manualmente, se necessario.
    -UserHasNoPermissions=Questo utente non ha alcun permesso impostato
    -TypeCdr=Utilizzare "Nessuno" se la data del termine di pagamento è la data della fattura più un delta in giorni (delta è il campo "Nb di giorni") <br> Utilizzare "Alla fine del mese", se, dopo il delta, la data deve essere aumentata per raggiungere la fine del mese (+ un "Offset" facoltativo in giorni) <br> Utilizzare "Corrente / Avanti" per impostare la data del termine di pagamento come il primo giorno del mese (N è memorizzato nel campo "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Valuta di riferimento della compagnia (vai nella configurazione della compagnia per cambiarla)
    -WarningNoteModuleInvoiceForFrenchLaw=Questo modulo %s è conforme alle leggi francesi (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=Questo modulo %s è conforme alle leggi francesi (Loi Finance 2016) poichè il modulo Registri non reversibili viene attivato automaticamente.
    -WarningInstallationMayBecomeNotCompliantWithLaw=hai cercato di installare un modulo %s esterno. L'attivazione di un modulo esterno significa che si ha fiducia nell'editore del modulo e si è sicuri che questo modulo non altera in modo negativo il comportamento dell'applicazione e sia conforme alle leggi del proprio paese (%s). Se il modulo presenta una funzione illegale, diventi responsabile per l'uso di un software illegale.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Margine sinistro sul PDF
     MAIN_PDF_MARGIN_RIGHT=Margine destro sul PDF
     MAIN_PDF_MARGIN_TOP=Margine superiore sul PDF
     MAIN_PDF_MARGIN_BOTTOM=Margine inferiore su PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Immettere la regola di calcolo se il campo precedente era impostato su Sì (ad esempio 'CODEGRP1 + CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Sono state trovate diverse varianti linguistiche
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Rimuovi caratteri speciali
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=Contatto GDPR
    -GDPRContactDesc=Se memorizzi dati relativi a società / cittadini europei, puoi memorizzare qui il contatto responsabile del trattamento dei dati personali/sensibili
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configurazione del modulo Risorse
     UseSearchToSelectResource=Utilizza il form di ricerca per scegliere una risorsa (invece della lista a tendina)
     DisabledResourceLinkUser=Disattiva funzionalità per collegare una risorsa agli utenti
     DisabledResourceLinkContact=Disattiva funzionalità per collegare una risorsa ai contatti
     ConfirmUnactivation=Conferma reset del modulo
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/it_IT/companies.lang b/htdocs/langs/it_IT/companies.lang
    index f8205d187de..beea7bbd0da 100644
    --- a/htdocs/langs/it_IT/companies.lang
    +++ b/htdocs/langs/it_IT/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Seleziona un soggetto terzo
     ConfirmDeleteCompany=Vuoi davvero cancellare questa società e tutte le informazioni relative?
     DeleteContact=Elimina un contatto/indirizzo
     ConfirmDeleteContact=Vuoi davvero eliminare questo contatto e tutte le informazioni connesse?
    -MenuNewThirdParty=Nuovo soggetto terzo
    -MenuNewCustomer=Nuovo cliente
    -MenuNewProspect=Nuovo cliente potenziale
    -MenuNewSupplier=Nuovo fornitore
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Nuovo privato
     NewCompany=Nuova società (cliente, cliente potenziale, fornitore) 
    -NewThirdParty=Nuovo soggetto terzo (cliente, cliente potenziale, fornitore) 
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Crea una terza parte (fornitore)
     CreateThirdPartyOnly=Crea soggetto terzo
     CreateThirdPartyAndContact=Crea un soggetto terzo + un contatto
    @@ -25,22 +25,22 @@ ThirdPartyContact=Contatto soggetto terzo
     Company=Società
     CompanyName=Ragione Sociale
     AliasNames=Pseudonimo (commerciale, marchio, ...)
    -AliasNameShort=Pseudonimo
    +AliasNameShort=Alias Name
     Companies=Società
    -CountryIsInEEC=Paese appartenente alla Comunità Economica Europea
    -ThirdPartyName=Nome soggetto terzo
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Posta elettronica soggetto terzo
    -ThirdParty=Soggetto terzo
    -ThirdParties=Soggetti terzi
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Clienti potenziali
     ThirdPartyProspectsStats=Clienti potenziali
     ThirdPartyCustomers=Clienti
     ThirdPartyCustomersStats=Clienti
     ThirdPartyCustomersWithIdProf12=Clienti con %s o %s
     ThirdPartySuppliers=Fornitori
    -ThirdPartyType=Tipo di soggetto terzo
    +ThirdPartyType=Type of company
     Individual=Privato
    -ToCreateContactWithSameName=Sarà creato automaticamente un contatto/indirizzo con le stesse informazione del soggetto terzo. Nella maggior parte dei casi, anche se il soggetto terzo è una persona fisica, creare solo la terza parte è sufficiente.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Società madre
     Subsidiaries=Controllate
     ReportByMonth=Rapporto per mese
    @@ -75,12 +75,12 @@ Zip=CAP
     Town=Città
     Web=Sito web
     Poste= Posizione
    -DefaultLang=Lingua predefinita
    -VATIsUsed=L'imposta sulle vendite viene utilizzata
    -VATIsUsedWhenSelling=Definisce se questa terza parte include una tassa di vendita o meno quando emette una fattura ai propri clienti
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=L'imposta sulle vendite non viene utilizzata
     CopyAddressFromSoc=Compila l'indirizzo con l'indirizzo del soggetto terzo
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Terza parte né cliente né fornitore, nessun oggetto di riferimento disponibile
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Terza parte né cliente né fornitore, sconti non disponibili
     PaymentBankAccount=Conto bancario usato per il pagamento:
     OverAllProposals=Proposte
    @@ -258,8 +258,8 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=ID imposta sulle vendite
    -VATIntraShort=ID imposta
    +VATIntra=Sales Tax/VAT ID
    +VATIntraShort=P.IVA
     VATIntraSyntaxIsValid=La sintassi è valida
     VATReturn=Rimborso IVA
     ProspectCustomer=Cliente/Cliente potenziale
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Il cliente ha uno sconto del <b> %s%% </b>
     CompanyHasNoRelativeDiscount=Il cliente non ha alcuno sconto relativo impostato
     HasRelativeDiscountFromSupplier=Hai uno sconto predefinito di <b>%s%%</b> da questo fornitore
     HasNoRelativeDiscountFromSupplier=Non hai uno sconto relativo predefinito da questo fornitore
    -CompanyHasAbsoluteDiscount=Questo cliente ha degli sconti disponibili (note di crediti o anticipi) per un totale di <b>%s</b>%s
    -CompanyHasDownPaymentOrCommercialDiscount=Questo cliente ha uno sconto disponibile (commerciale, nota d'accredito) per <b>%s</b>%s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Il cliente ha ancora note di credito per <b> %s %s </b>
     HasNoAbsoluteDiscountFromSupplier=Non hai crediti di sconto disponibili da questo fornitore
     HasAbsoluteDiscountFromSupplier=Hai sconti disponibili (note di credito o acconti) per <b>%s</b> %s da questo fornitore
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Sconti assoluti per il cliente (concesso da te)
     SupplierAbsoluteDiscountAllUsers=Sconti globali fornitore (inseriti da tutti gli utenti)
     SupplierAbsoluteDiscountMy=Sconti globali fornitore (inseriti da me stesso)
     DiscountNone=Nessuno
    -Supplier=Fornitore
    +Supplier=Vendor
     AddContact=Crea contatto
     AddContactAddress=Crea contatto/indirizzo
     EditContact=Modifica contatto/indirizzo
    @@ -303,22 +303,22 @@ AddThirdParty=Crea soggetto terzo
     DeleteACompany=Elimina una società
     PersonalInformations=Dati personali
     AccountancyCode=Account di contabilità
    -CustomerCode=Codice cliente
    -SupplierCode=Codice fornitore
    -CustomerCodeShort=Codice cliente
    -SupplierCodeShort=Codice fornitore
    -CustomerCodeDesc=Codice cliente, univoco
    -SupplierCodeDesc=Codice fornitore, unico per tutti i fornitori
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Obbligatorio se il soggetto terzo è un cliente o un cliente potenziale
     RequiredIfSupplier=Obbligatorio se il soggetto terzo è un fornitore 
    -ValidityControledByModule=Validità controllata dal modulo
    -ThisIsModuleRules=Regole per questo modulo
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Cliente potenziale da contattare
     CompanyDeleted=Società %s cancellata dal database.
     ListOfContacts=Elenco dei contatti
    -ListOfContactsAddresses=Elenco di contatti/indirizzi
    -ListOfThirdParties=Elenco dei soggetti terzi
    -ShowCompany=Mostra soggetto terzo
    +ListOfContactsAddresses=Elenco dei contatti
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Mostra contatti
     ContactsAllShort=Tutti (Nessun filtro)
     ContactType=Tipo di contatto
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Questo contatto non è il contatto di nessuna proposta c
     NoContactForAnyContract=Questo contatto non è il contatto di nessun contratto
     NoContactForAnyInvoice=Questo contatto non è il contatto di nessuna fattura
     NewContact=Nuovo contatto
    -NewContactAddress=Nuovo contatto/indirizzo
    +NewContactAddress=New Contact/Address
     MyContacts=I miei contatti
     Capital=Capitale
     CapitalOf=Capitale di %s
     EditCompany=Modifica società
    -ThisUserIsNot=Questo utente non è un cliente , né un cliente potenziale, né un fornitore 
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Controllo partita IVA
    -VATIntraCheckDesc=Il link <b>%s</b> permette di controllare la partita IVA tramite un servizio esterno. È necessario che il server possa accedere ad internet.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Controllo partita IVA sul sito della Commissione Europea
    -VATIntraManualCheck=È possibile controllareguire il controllo manualmente attraverso <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Non è possibile effettuare il controllo. Servizio non previsto per lo stato membro ( %s).
    -NorProspectNorCustomer=Né cliente, né cliente potenziale
    -JuridicalStatus=Stato giuridico
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Personale
     ProspectLevelShort=Cl. Pot.
     ProspectLevel=Liv. cliente potenziale
    @@ -387,12 +387,12 @@ ExportCardToFormat=Esportazione scheda nel formato
     ContactNotLinkedToCompany=Contatto non collegato ad alcuna società
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=Senza accesso a Dolibarr
    -ExportDataset_company_1=Terze parti (Aziende/fondazioni/persone fisiche) e proprietà
    -ExportDataset_company_2=Contatti e attributi
    -ImportDataset_company_1=Terze parti (Aziende/fondazioni/persone fisiche) e proprietà
    -ImportDataset_company_2=Contatti/indirizzi (di terze parti o meno) e attributi
    -ImportDataset_company_3=Conti bancari di terzi
    -ImportDataset_company_4=Terze parti/Rappresentanti di vendita (Assegna utenti rappresentanti di vendita alle aziende)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Livello dei prezzi
     DeliveryAddress=Indirizzo di consegna
     AddAddress=Aggiungi un indirizzo
    @@ -402,17 +402,17 @@ DeleteFile=Cancella il file
     ConfirmDeleteFile=Vuoi davvero cancellare questo file?
     AllocateCommercial=Assegna un commerciale
     Organization=Organizzazione
    -FiscalYearInformation=Informazioni sull'anno fiscale
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Il mese di inizio dell'anno fiscale
    -YouMustAssignUserMailFirst=E' necessario creare una email per questo utente per poter mandargli una notifica via email
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Per poter inviare notifiche via email, è necessario definire almeno un contatto con una email valida all'interno del soggetto terzo
    -ListSuppliersShort=Elenco fornitori
    -ListProspectsShort=Elenco clienti potenziali
    -ListCustomersShort=Elenco clienti
    -ThirdPartiesArea=Area soggetti terzi e contatti
    -LastModifiedThirdParties=Ultimi %s soggetti terzi modificati
    -UniqueThirdParties=Totale soggetti terzi
    -InActivity=Aperto
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
    +InActivity=In attività
     ActivityCeased=Cessata attività
     ThirdPartyIsClosed=Chiuso
     ProductsIntoElements=Elenco dei prodotti/servizi in %s
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Fatture scadute
     OutstandingBill=Max. fattura in sospeso
     OutstandingBillReached=Raggiunto il massimo numero di fatture scadute
     OrderMinAmount=Quantità minima per l'ordine
    -MonkeyNumRefModelDesc=Restituisce un numero con formato %syymm-nnnn per codice cliente e %syymm-nnnn per il fornitore, in cui yy è  l'anno, mm è il mese e nnnn è una sequenza progressiva che non ritorna a 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Codice cliente/fornitore libero. Questo codice può essere modificato in qualsiasi momento.
     ManagingDirectors=Nome Manager(s) (CEO, direttore, presidente...)
     MergeOriginThirdparty=Duplica soggetto terzo (soggetto terzo che stai eliminando)
     MergeThirdparties=Unisci soggetti terzi
    -ConfirmMergeThirdparties=Sei sicuro che vuoi fondere questo soggetto terzo in quello corrente? Tutti gli oggetti linkati (fatture, ordini, ...) saranno spostati al soggetto terzo corrente, poi il precedente verrà eliminato.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Terze parti sono state unite
     SaleRepresentativeLogin=Login del rappresentante commerciale
     SaleRepresentativeFirstname=Nome del commerciale
     SaleRepresentativeLastname=Cognome del commerciale
     ErrorThirdpartiesMerge=Si è verificato un errore durante l'eliminazione di terze parti. Si prega di controllare il registro. Le modifiche sono state ripristinate.
    -NewCustomerSupplierCodeProposed=Il nuovo codice cliente o codice fornitore suggerito è duplicato.
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/it_IT/errors.lang b/htdocs/langs/it_IT/errors.lang
    index e25d60983e4..a797c43891d 100644
    --- a/htdocs/langs/it_IT/errors.lang
    +++ b/htdocs/langs/it_IT/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Il valore '%s' ha un formato della data sbagliato
     ErrorWrongDate=La data non è corretta!
     ErrorFailedToWriteInDir=Impossibile scrivere nella directory %s
     ErrorFoundBadEmailInFile=Sintassi email errata nelle righe %s del file (ad esempio alla riga %s con email = %s)
    -ErrorUserCannotBeDelete=L'utenza non può essere eliminata. Potrebbe essere collegata a qualche oggetto Dolibarr.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Mancano alcuni campi obbligatori.
     ErrorSubjectIsRequired=Il titolo della email è obbligatorio
     ErrorFailedToCreateDir=Impossibile creare la directory. Verifica che l'utente del server Web abbia i permessi per scrivere nella directory Dolibarr. Se il parametro <b>safe_mode</b> è abilitato in PHP, verifica che i file php di Dolibarr appartengano all'utente o al gruppo del server web (per esempio www-data).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Per favore immetti un valore per la lista di selezione
     ErrorNoValueForCheckBoxType=Per favore immetti un valore per la lista di controllo
     ErrorNoValueForRadioType=Per favore immetti un valore per la lista radio
     ErrorBadFormatValueList=La lista può includere una o più virgole: <u>%s</u>, ma deve essercene almeno una: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Il campo <b>%s</b> non può contenere caratteri speciali.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Modulo contabilità disattivato
     ErrorExportDuplicateProfil=Questo nome profilo già esiste per questo set di esportazione
     ErrorLDAPSetupNotComplete=La configurazione per l'uso di LDAP è incompleta
     ErrorLDAPMakeManualTest=È stato generato un file Ldif nella directory %s. Prova a caricarlo dalla riga di comando per avere maggiori informazioni sugli errori.
    -ErrorCantSaveADoneUserWithZeroPercentage=Impossibile salvare un'azione con "stato non iniziato" se il campo "da fare" non è vuoto.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Il riferimento utilizzato esiste già.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Impossibile eliminare il dato. E' già in uso o incluso in altro oggetto.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Per questa funzionalità Javascript deve essere attivo. Per abilitare/disabilitare Javascript, vai su <b>Home - Impostazioni - Schermo</b>
     ErrorPasswordsMustMatch=Le due password digitate devono essere identiche
    -ErrorContactEMail=Si è verificato un errore tecnico. Si prega di contattare l'amministratore all'indirizzo <b>%s</b> <b>%s</b> indicando il codice di errore nel messaggio, o, meglio ancora, allegando uno screenshot della schermata attuale.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Valore errato nel campo numero <b>%s</b> (il valore <b>'%s'</b>non corrisponde alla regex <b>%s</b>)
     ErrorFieldValueNotIn=Valore errato nel campo numero <b>%s</b>(il valore <b>%s</b> non è un valore disponibile nel campo<b>%s</b> campo della tabella <b>%s</b>)
     ErrorFieldRefNotIn=Valore errato nel campo numero <b>%s</b> (il valore <b>%s</b>non è un riferimento <b>%s</b> esistente)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Il programma antivirus non è stato in grado di co
     ErrorSpecialCharNotAllowedForField=I caratteri speciali non sono ammessi per il campo "%s"
     ErrorNumRefModel=Esiste un riferimento nel database (%s) e non è compatibile con questa regola di numerazione. Rimuovere o rinominare il record per attivare questo modulo.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Errore sulla maschera
     ErrorBadMaskFailedToLocatePosOfSequence=Errore, maschera senza numero di sequenza
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Errore, valore di reset non valido
     ErrorMaxNumberReachForThisMask=Numero massimo raggiunto per questa maschera
     ErrorCounterMustHaveMoreThan3Digits=Il contatore deve avere più di 3 cifre
     ErrorSelectAtLeastOne=Errore. Selezionare almeno una voce.
    -ErrorDeleteNotPossibleLineIsConsolidated=Impossibile cancellare il record perché è collegato ad una transazione bancaria conciliata
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s è già assegnato
     ErrorFailedToSendPassword=Impossibile inviare la password
     ErrorFailedToLoadRSSFile=Impossibile ottenere feed RSS. Se i messaggi di errore non forniscono informazioni sufficienti, prova ad ativare il debug con MAIN_SIMPLEXMLLOAD_DEBUG.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Utente con accesso <b>%s</b> inesistente
     ErrorLoginHasNoEmail=Questo utente non ha alcun indirizzo email. Processo interrotto.
     ErrorBadValueForCode=Valore del codice errato. Riprova con un nuovo valore...
     ErrorBothFieldCantBeNegative=I campi %s e %s non possono essere entrambi negativi
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=La quantità di ciascuna riga della fattura cliente non può essere negativa
     ErrorWebServerUserHasNotPermission=L'account utente <b>%s</b> utilizzato per eseguire il server web non ha i permessi necessari
     ErrorNoActivatedBarcode=Nessun tipo di codice a barre attivato
    @@ -138,7 +141,7 @@ ErrorBadFormat=Formato non valido!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Errore, ci sono alcune consegne collegate a questa spedizione. Cancellazione rifiutata.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Impossibile cancellare un pagamento condiviso con almeno una fattura con lo stato Pagato
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Impossibile assegnare la costante '%s'
     ErrorPriceExpression2=Impossibile ridefinire la funzione integrata '%s'
     ErrorPriceExpression3=Variabile non definita '%s' nella definizione della funzione
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Valore imprevisto '%s'
     ErrorPriceExpression6=Numero errato di argomenti (inserito %s ,atteso %s)
     ErrorPriceExpression8=Operatore imprevisto '%s'
     ErrorPriceExpression9=Si è verificato un errore imprevisto
    -ErrorPriceExpression10=Operatore '%s' senza operando
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Atteso '%s'
     ErrorPriceExpression14=Divisione per zero
     ErrorPriceExpression17=Variabile non definita '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=Nessuna variabile globale selezionata
     ErrorFieldMustBeANumeric=Il campo <b>%s</b> deve essere un valore numerico
     ErrorMandatoryParametersNotProvided=Parametri obbligatori non definiti
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=Si è verificato un errore nel salvataggio delle modifiche
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=Il file deve essere nel formato %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Un segnalibro per questo link (URL) o con lo stesso
     WarningPassIsEmpty=Attenzione, il database è accessibile senza password. Questa è una grave falla di sicurezza! Si dovrebbe aggiungere una password per il database e cambiare il file <b>conf.php</b> di conseguenza.
     WarningConfFileMustBeReadOnly=Attenzione, il file di configurazione <b>htdocs/conf/conf.php</b> è scrivibile dal server web. Questa è una grave falla di sicurezza! Impostare il file in sola lettura per l'utente utilizzato dal server web. Se si utilizza Windows e il formato FAT per il disco, dovete sapere che tale filesystem non consente la gestione delle autorizzazioni sui file, quindi non può essere completamente sicuro.
     WarningsOnXLines=Warning su <b>%s</b> righe del sorgente
    -WarningNoDocumentModelActivated=Nessun modello per la generazione di documenti attivato. Finché non si verifica la configurazione del modulo, verrà usato un modello predefinito.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Attenzione, una volta finito il setup, devi disabilitare gli strumenti install/nigrate aggiungendo un file  <b>install.lock</b> nella directory <b>%s</b>. La mancanza del file è un buco nella sicurezza.
    -WarningUntilDirRemoved=Questo avviso sarà visualizzato fino a quando questa directory è presente (disponibile solo per gli utenti admin).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Attenzione, la chiusura è effettiva anche se il numero degli elementi non coincide fra inizio e fine. Abilitare questa opzione con cautela.
     WarningUsingThisBoxSlowDown=Attenzione: l'uso di questo box rallenterà pesantemente tutte le pagine che lo visualizzano
     WarningClickToDialUserSetupNotComplete=Le impostazioni di informazione del ClickToDial per il tuo utente non sono complete (vedi la scheda ClickToDial sulla tua scheda utente)
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=La tua login è stata modificata. Per ragioni di sicurezza dove accedere con la nuova login prima di eseguire una nuova azione.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/it_IT/interventions.lang b/htdocs/langs/it_IT/interventions.lang
    index 5a0d1e5f3c3..02a39340c76 100644
    --- a/htdocs/langs/it_IT/interventions.lang
    +++ b/htdocs/langs/it_IT/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventi
     InterventionCard=Scheda intervento
     NewIntervention=Nuovo intervento
     AddIntervention=Crea intervento
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Elenco degli interventi
     ActionsOnFicheInter=Azioni di intervento
     LastInterventions=Ultimi %s interventi
    @@ -50,12 +51,12 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistiche degli interventi
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=ID intervento
    -InterRef=Intervention ref.
    +InterRef=Rif. intervento
     InterDateCreation=Data di creazione intervento
     InterDuration=Durata intervento
     InterStatus=Stato dell'intervento
    diff --git a/htdocs/langs/it_IT/main.lang b/htdocs/langs/it_IT/main.lang
    index 29dc26e1dd5..5b4ba9db65b 100644
    --- a/htdocs/langs/it_IT/main.lang
    +++ b/htdocs/langs/it_IT/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Impossibile inviare l'email (mittente=%s, destinatario=%s)
     ErrorFileNotUploaded=Upload fallito. Controllare che la dimensione del file non superi il numero massimo consentito, che lo spazio libero su disco sia sufficiente e che non esista già un file con lo stesso nome nella directory.
     ErrorInternalErrorDetected=Errore rilevato
     ErrorWrongHostParameter=Parametro host errato
    -ErrorYourCountryIsNotDefined=Non è stato definito il paese. Modifica nuovamente il modulo.
    -ErrorRecordIsUsedByChild=Impossibile cancellare il record perché da esso dipendono altri record.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Valore sbagliato
     ErrorWrongValueForParameterX=Valore non corretto per il parametro %s
     ErrorNoRequestInError=Nessuna richiesta in errore
    -ErrorServiceUnavailableTryLater=Servizio momentaneamente non disponibile. Riprova più tardi.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Valore duplicato in un campo a chiave univoca
    -ErrorSomeErrorWereFoundRollbackIsDone=Si sono verificati degli errori. Effettuato rollback modifiche.
    -ErrorConfigParameterNotDefined=Il parametro <b>%s</b> non è stato definito nel file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Impossibile trovare l'utente <b>%s</b> nel database dell'applicazione.
     ErrorNoVATRateDefinedForSellerCountry=Errore, non sono state definite le aliquote IVA per: <b>%s</b>.
     ErrorNoSocialContributionForSellerCountry=Errore, non sono stati definiti i tipi di contributi per: '%s'.
     ErrorFailedToSaveFile=Errore, file non salvato.
    -ErrorCannotAddThisParentWarehouse=Stai tentando di aggiungere un magazzino principale che è già figlio di quello corrente
    -MaxNbOfRecordPerPage=Numero massimo di record per pagina
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Non sei autorizzato.
     SetDate=Imposta data
     SelectDate=Seleziona una data
    @@ -78,10 +78,10 @@ FileRenamed=Il file è stato rinominato con successo
     FileGenerated=Il file è stato generato con successo
     FileSaved=Il file è stato salvato con successo
     FileUploaded=Il file è stato caricato con successo
    -FileTransferComplete=I File sono stati caricati correttamente
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File cancellati con successo
     FileWasNotUploaded=Il file selezionato per l'upload non è stato ancora caricato. Clicca su <b>Allega file</b> per farlo
    -NbOfEntries=Numero di voci
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Leggi l'aiuto online (è richiesto un collegamento internet)
     GoToHelpPage=Vai alla pagina di aiuto
     RecordSaved=Record salvato
    @@ -94,7 +94,7 @@ Undefined=Indefinito
     PasswordForgotten=Password dimenticata?
     NoAccount=No account?
     SeeAbove=Vedi sopra
    -HomeArea=Area home
    +HomeArea=Home
     LastConnexion=Ultima connessione
     PreviousConnexion=Connessione precedente
     PreviousValue=Valore precedente
    @@ -142,6 +142,7 @@ Closed=Chiuso
     Closed2=Chiuso
     NotClosed=Non chiuso
     Enabled=Attivo
    +Enable=Abilita
     Deprecated=Deprecato
     Disable=Disattivare
     Disabled=Disabilitato
    @@ -151,9 +152,9 @@ RemoveLink=Rimuovere collegamento
     AddToDraft=Aggiungi alla bozza
     Update=Aggiornamento
     Close=Chiudi
    -CloseBox=Rimuovi il widget dal pannello principale
    +CloseBox=Rimuovi widget dalla panoramica
     Confirm=Conferma
    -ConfirmSendCardByMail=Vuoi davvero inviare il contenuto di questa scheda per posta a <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Elimina
     Remove=Rimuovi
     Resiliate=Termina
    @@ -327,7 +328,7 @@ Copy=Copia
     Paste=Incolla
     Default=Predefinito
     DefaultValue=Valore predefinito
    -DefaultValues=Valori predefiniti
    +DefaultValues=Default values/filters/sorting
     Price=Prezzo
     PriceCurrency=Prezzo (valuta)
     UnitPrice=Prezzo unitario
    @@ -347,7 +348,7 @@ AmountTTCShort=Importo (IVA inc.)
     AmountHT=Importo (al netto delle imposte)
     AmountTTC=Importo (IVA inclusa)
     AmountVAT=Importo IVA
    -MulticurrencyAlreadyPaid=Già pagato, valuta originaria
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Rimanente da pagare, valuta originaria
     MulticurrencyPaymentAmount=Importo del pagamento, valuta originaria
     MulticurrencyAmountHT=Importo (al netto delle imposte), valuta originaria
    @@ -403,7 +404,7 @@ DefaultTaxRate=Valore base tassa
     Average=Media
     Sum=Somma
     Delta=Delta
    -RemainToPay=Remain to pay
    +RemainToPay=Rimanente da pagare
     Module=Moduli/Applicazioni
     Modules=Moduli/Applicazioni
     Option=Opzione
    @@ -416,7 +417,7 @@ Favorite=Preferito
     ShortInfo=Info.
     Ref=Rif.
     ExternalRef=Rif. esterno
    -RefSupplier=Ref. vendor
    +RefSupplier=Rif. venditore
     RefPayment=Rif. pagamento
     CommercialProposalsShort=Preventivi/Proposte commerciali
     Comment=Commento
    @@ -428,7 +429,7 @@ ActionNotApplicable=Non applicabile
     ActionRunningNotStarted=Non avviato
     ActionRunningShort=Avviato
     ActionDoneShort=Fatto
    -ActionUncomplete=Incompleto
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Ultimi %s eventi collegati
     CompanyFoundation=Azienda/Organizzazione
     Accountant=Contabile
    @@ -453,8 +454,8 @@ Generate=Genera
     Duration=Durata
     TotalDuration=Durata totale
     Summary=Riepilogo
    -DolibarrStateBoard=Statistiche Database
    -DolibarrWorkBoard=Dashboard degli elementi aperti
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=Nessun elemento aperto da elaborare
     Available=Disponibile
     NotYetAvailable=Non ancora disponibile
    @@ -495,7 +496,7 @@ Received=Ricevuto
     Paid=Pagato
     Topic=Oggetto
     ByCompanies=Per impresa
    -ByUsers=By user
    +ByUsers=Per utente
     Links=Link
     Link=Link
     Rejects=Respinge
    @@ -506,8 +507,8 @@ None=Nessuno
     NoneF=Nessuno
     NoneOrSeveral=Nessuno o più
     Late=Tardi
    -LateDesc=Il ritardo di un'azione viene definito nel setup. Chiedi al tuo amministratore di modificarlo dal menu Home - Setup - Alerts.
    -NoItemLate=No late item
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
    +NoItemLate=Nessun elemento in ritardo
     Photo=Immagine
     Photos=Immagini
     AddPhoto=Aggiungi immagine
    @@ -530,18 +531,6 @@ September=Settembre
     October=Ottobre
     November=Novembre
     December=Dicembre
    -JanuaryMin=Gen
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=Mag
    -JuneMin=Giu
    -JulyMin=Lug
    -AugustMin=Ago
    -SeptemberMin=Set
    -OctoberMin=Ott
    -NovemberMin=Nov
    -DecemberMin=Dic
     Month01=gennaio
     Month02=febbraio
     Month03=marzo
    @@ -622,9 +611,9 @@ BuildDoc=Genera Doc
     Entity=Entità
     Entities=Entità
     CustomerPreview=Anteprima cliente
    -SupplierPreview=Vendor preview
    +SupplierPreview=Anteprima venditore
     ShowCustomerPreview=Visualizza anteprima cliente
    -ShowSupplierPreview=Show vendor preview
    +ShowSupplierPreview=Mostra anteprima venditore
     RefCustomer=Rif. cliente
     Currency=Valuta
     InfoAdmin=Informazioni per gli amministratori
    @@ -646,6 +635,8 @@ SendMail=Invia una email
     EMail=E-mail
     NoEMail=Nessuna email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Nessun cellulare
     Owner=Proprietario
     FollowingConstantsWillBeSubstituted=Le seguenti costanti saranno sostitute con i valori corrispondenti
    @@ -677,7 +668,7 @@ NeverReceived=Mai ricevuto
     Canceled=Annullato
     YouCanChangeValuesForThisListFromDictionarySetup=Puoi cambiare i valori di questa lista dal menù Impostazioni - Dizionari
     YouCanChangeValuesForThisListFrom=Puoi cambiare i valori di questa lista dal menu %s
    -YouCanSetDefaultValueInModuleSetup=Puoi definire il valore predefinito durante la creazione di un nuovo record nella configurazione del modulo
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Colore
     Documents=Documenti
     Documents2=Documenti
    @@ -716,15 +707,15 @@ Merge=Unisci
     DocumentModelStandardPDF=Tema PDF Standard
     PrintContentArea=Mostra una pagina per stampare l'area principale
     MenuManager=Gestore dei menu
    -WarningYouAreInMaintenanceMode=Attenzione, si è in modalità manutenzione. Solo <b>%s</b> ha il permesso di usare l'applicazione.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Errore di sistema
     CoreErrorMessage=Si è verificato un errore. Controllare i log o contattare l'amministratore di sistema.
     CreditCard=Carta di credito
     ValidatePayment=Convalidare questo pagamento?
     CreditOrDebitCard=Carta di credito o debito 
     FieldsWithAreMandatory=I campi con <b>%s</b> sono obbligatori
    -FieldsWithIsForPublic=I campi con <b>%s</b> vengono mostrati nell'elenco pubblico dei membri. Per evitarlo, deseleziona la casella <b>pubblica.</b>
    -AccordingToGeoIPDatabase=(Secondo la conversione GeoIP)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Riga
     NotSupported=Non supportato
     RequiredField=Campi obbligatori
    @@ -732,6 +723,8 @@ Result=Risultato
     ToTest=Provare
     ValidateBefore=Convalidare la scheda prima di utilizzare questa funzione
     Visibility=Visibilità
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privato
     Hidden=Nascosto
     Resources=Risorse
    @@ -750,6 +743,7 @@ LinkTo=Collega a...
     LinkToProposal=Collega a proposta
     LinkToOrder=Collega a ordine
     LinkToInvoice=Collega a fattura attiva
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Collega a ordine fornitore
     LinkToSupplierProposal=Collega a porposta fornitore
     LinkToSupplierInvoice=Collega a fattura passiva
    @@ -758,6 +752,7 @@ LinkToIntervention=Collega a intervento
     CreateDraft=Crea bozza
     SetToDraft=Ritorna a bozza
     ClickToEdit=Clicca per modificare
    +ClickToRefresh=Click to refresh
     EditWithEditor=Modifica con CKEditor
     EditWithTextEditor=Modifica con editor di testo
     EditHTMLSource=Modifica codice HTML
    @@ -772,14 +767,14 @@ ByDay=Per giorno
     BySalesRepresentative=Per venditore
     LinkedToSpecificUsers=Con collegamento ad un utente specifico
     NoResults=Nessun risultato
    -AdminTools=Strumenti di amministrazione
    +AdminTools=Admin Tools
     SystemTools=Strumenti di sistema
     ModulesSystemTools=Strumenti moduli
     Test=Test
     Element=Elemento
     NoPhotoYet=Nessuna immagine disponibile
    -Dashboard=Dashboard
    -MyDashboard=Pannello principale
    +Dashboard=Panoramica
    +MyDashboard=My Dashboard
     Deductible=Deducibile
     from=da
     toward=verso
    @@ -802,7 +797,7 @@ PrintFile=Stampa il file %s
     ShowTransaction=Mostra entrate conto bancario
     ShowIntervention=Mostra intervento
     ShowContract=Visualizza contratto
    -GoIntoSetupToChangeLogo=Vai in Home -> Impostazioni -> Società per cambiare il logo o  in Home - Setup -> display per nasconderlo.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Rifiuta
     Denied=Rifiutata
     ListOf=Lista di %s
    @@ -818,12 +813,12 @@ Sincerely=Cordialmente
     DeleteLine=Elimina riga
     ConfirmDeleteLine=Vuoi davvero eliminare questa riga?
     NoPDFAvailableForDocGenAmongChecked=Non è possibile generare il documento PDF dai record selezionati
    -TooManyRecordForMassAction=Troppi record selezionati per l'azione di massa. L'azione è limitata a un elenco di %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=Nessun record selezionato
     MassFilesArea=File creati da azioni di massa
     ShowTempMassFilesArea=Mostra i file creati da azioni di massa
    -ConfirmMassDeletion=Conferma eliminazione di massa
    -ConfirmMassDeletionQuestion=Sei sicuro di voler cancellare il record selezionato %s?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Oggetti correlati
     ClassifyBilled=Classificare  fatturata
     ClassifyUnbilled=Classifica non pagata
    @@ -841,7 +836,7 @@ Calendar=Calendario
     GroupBy=Raggruppa per...
     ViewFlatList=Vedi lista semplice
     RemoveString=Rimuovi la stringa '%s'
    -SomeTranslationAreUncomplete=Alcune lingue potrebbero essere parzialmente tradotte o contenere errori. Se ne rilevi, puoi correggere i file di lingua registrati su <a href="https://transifex.com/projects/p/dolibarr/" target="_blank"> https://transifex.com/projects/p/ Dolibarr / </a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Link diretto per il download (pubblico/esterno)
     DirectDownloadInternalLink=Link per il download diretto (richiede accesso e permessi validi)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR e Banca
     AutomaticallyCalculated=Calcolato automaticamente
     TitleSetToDraft=Torna a Bozza
    -ConfirmSetToDraft=Sei sicuro che vuoi tornare allo stato di Bozza?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=ID di importazione
     Events=Eventi
    -EMailTemplates=Modelli email
    -FileNotShared=File non condiviso pubblicamente
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Progetto
     Projects=Progetti
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Autorizzazioni
     LineNb=Linea n°
     IncotermLabel=Import-Export
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Lunedì
     Tuesday=Martedì
    @@ -922,20 +926,20 @@ SearchIntoSupplierInvoices=Fatture fornitore
     SearchIntoCustomerOrders=Ordini dei clienti
     SearchIntoSupplierOrders=Ordini d'acquisto
     SearchIntoCustomerProposals=Proposte del cliente
    -SearchIntoSupplierProposals=Vendor proposals
    +SearchIntoSupplierProposals=Proposta venditore
     SearchIntoInterventions=Interventi
     SearchIntoContracts=Contratti
     SearchIntoCustomerShipments=Spedizioni cliente
     SearchIntoExpenseReports=Nota spese
    -SearchIntoLeaves=Assenze
    +SearchIntoLeaves=Leave
     CommentLink=Commenti
     NbComments=Numero dei commenti
     CommentPage=Spazio per i commenti
     CommentAdded=Commento aggiunto
     CommentDeleted=Commento cancellato
     Everybody=Progetto condiviso
    -PayedBy=Pagato da
    -PayedTo=Pagato a
    +PayedBy=Pagata da
    +PayedTo=Paid to
     Monthly=Mensilmente
     Quarterly=Trimestralmente
     Annual=Annuale
    @@ -944,7 +948,8 @@ Remote=Remoto
     LocalAndRemote=Locale e Remoto
     KeyboardShortcut=Tasto scelta rapida
     AssignedTo=Azione assegnata a
    -Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +Deletedraft=Elimina bozza
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File condiviso con un link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/it_IT/other.lang b/htdocs/langs/it_IT/other.lang
    index 026866ee399..ffaec5cbf22 100644
    --- a/htdocs/langs/it_IT/other.lang
    +++ b/htdocs/langs/it_IT/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Codice di sicurezza
     NumberingShort=N°
     Tools=Strumenti
     TMenuTools=Strumenti
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Compleanno
     BirthdayDate=Data di nascita
     DateToBirth=Data di nascita
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Messaggio sulla pagina di pagamento convalidato
     MessageKO=Messaggio sulla pagina di pagamento annullato
     ContentOfDirectoryIsNotEmpty=La directory non è vuota.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Contatto aggiunto all'intervento
    -Notify_FICHINTER_VALIDATE=Intervento convalidato
    -Notify_FICHINTER_SENTBYMAIL=Intervento inviato per posta
     Notify_ORDER_VALIDATE=Ordine cliente convalidato
     Notify_ORDER_SENTBYMAIL=Ordine cliente inviato per email
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Ordine fornitore inviato per email
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Ordine fornitore registrato
     Notify_ORDER_SUPPLIER_APPROVE=Ordine fornitore approvato
     Notify_ORDER_SUPPLIER_REFUSE=Ordine fornitore rifiutato
     Notify_PROPAL_VALIDATE=proposta convalidata
    -Notify_PROPAL_CLOSE_SIGNED=Proposta del cliente chiusa come firmata
    -Notify_PROPAL_CLOSE_REFUSED=Proposta del cliente chiusa come rifiutata
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Proposta inviata per email
     Notify_WITHDRAW_TRANSMIT=Invia prelievo
     Notify_WITHDRAW_CREDIT=Accredita prelievo
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Creato soggetto terzo
     Notify_COMPANY_SENTBYMAIL=Email inviate dalla scheda soggetti terzi
     Notify_BILL_VALIDATE=Convalida fattura attiva
     Notify_BILL_UNVALIDATE=Ricevuta cliente non convalidata
    -Notify_BILL_PAYED=Fattura attiva pagata
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Fattura attiva annullata
     Notify_BILL_SENTBYMAIL=Fattura attiva inviata per email
     Notify_BILL_SUPPLIER_VALIDATE=Fattura fornitore convalidata
    -Notify_BILL_SUPPLIER_PAYED=Fattura fornitore pagata
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Fattura fornitore inviata per email
     Notify_BILL_SUPPLIER_CANCELED=Fattura fornitore cancellata
     Notify_CONTRACT_VALIDATE=Contratto convalidato
     Notify_FICHEINTER_VALIDATE=Intervento convalidato
    +Notify_FICHINTER_ADD_CONTACT=Contatto aggiunto all'intervento
    +Notify_FICHINTER_SENTBYMAIL=Intervento inviato per posta
     Notify_SHIPPING_VALIDATE=Spedizione convalidata
     Notify_SHIPPING_SENTBYMAIL=Spedizione inviata per email
     Notify_MEMBER_VALIDATE=Membro convalidato
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Creazione del progetto
     Notify_TASK_CREATE=Attività creata
     Notify_TASK_MODIFY=Attività modificata
     Notify_TASK_DELETE=Attività cancellata
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Vedi la configurazione del modulo %s
     NbOfAttachedFiles=Numero di file/documenti allegati
     TotalSizeOfAttachedFiles=Dimensione totale dei file/documenti allegati
     MaxSize=La dimensione massima è
     AttachANewFile=Allega un nuovo file/documento
     LinkedObject=Oggetto collegato
    -NbOfActiveNotifications=Numero di notifiche (num. di email da ricevere)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Per usare questa opzione bisogna installare o abilitare la l
     ProfIdShortDesc=<b>Prof ID %s</b> è un dato dipendente dal paese terzo.<br/> Ad esempio, per il <b>paese %s,</b> è il <b>codice %s.</b>
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Numero di preventivi
     NumberOfCustomerOrders=Numero di ordini cliente
     NumberOfCustomerInvoices=Numero di ordini fornitore
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=Ti è stato assegnato un nuovo intervento %s.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Intervento %s convalidato
     EMailTextInvoiceValidated=Fattura %s convalidata
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Proposta %s convalidata.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Ordine %s convalidato.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Ordine %s approvato da %s
     EMailTextOrderRefused=Ordine %s rifiutato
     EMailTextOrderRefusedBy=Ordine %s rifiutato da %s
     EMailTextExpeditionValidated=La spedizione %s è stata convalidata.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Set dati importazione
     DolibarrNotification=Notifica automatica
     ResizeDesc=Ridimesiona con larghezza <b>o</b> altezza nuove. Il ridimensionamento è proporzionale, il rapporto tra le due dimenzioni verrà mantenuto.
    @@ -204,7 +212,7 @@ NewLength=Nuovo larghezza
     NewHeight=Nuova altezza
     NewSizeAfterCropping=Nuovo formato dopo il ritaglio
     DefineNewAreaToPick=Definisci una nuova area della foto da scegliere (clicca sull'immagine e trascina fino a raggiungere l'angolo opposto)
    -CurrentInformationOnImage=Strumento progettato per ridimensionare o tagliare un'immagine. Informazioni sull'immagine attualmente modificata
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Editor per le immagini
     YouReceiveMailBecauseOfNotification=Ricevi messaggio perché il tuo indirizzo email è compreso nella lista dei riceventi per informazioni su eventi particolari in un software di %s %s.
     YouReceiveMailBecauseOfNotification2=L'evento è il seguente:
    @@ -219,7 +227,7 @@ FileIsTooBig=File troppo grande
     PleaseBePatient=Attendere, prego...
     NewPassword=Nuova password
     ResetPassword=Reset password
    -RequestToResetPasswordReceived=A request to change your password has been received.
    +RequestToResetPasswordReceived=E' stata ricevuta una rischiesta di modifica della tua password
     NewKeyIs=Queste sono le tue nuove credenziali di accesso
     NewKeyWillBe=Le tue nuove credenziali per loggare al software sono
     ClickHereToGoTo=Clicca qui per andare a %s
    @@ -227,14 +235,18 @@ YouMustClickToChange=Devi cliccare sul seguente link per validare il cambio dell
     ForgetIfNothing=Se non hai richiesto questo cambio, lascia perdere questa mail. Le tue credenziali sono mantenute al sicuro.
     IfAmountHigherThan=Se l'importo è superiore a <strong>%s</strong>
     SourcesRepository=Repository for sources
    -Chart=Chart
    -PassEncoding=Password encoding
    -PermissionsAdd=Permissions added
    -PermissionsDelete=Permissions removed
    -YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</strong> chars
    +Chart=Grafico
    +PassEncoding=Codifica Password
    +PermissionsAdd=Permessi aggiunti
    +PermissionsDelete=Permessi rimossi
    +YourPasswordMustHaveAtLeastXChars=La tua password deve contenere almeno %scaratteri
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Area esportazioni
    @@ -249,4 +261,4 @@ WEBSITE_PAGEURL=Indirizzo URL della pagina
     WEBSITE_TITLE=Titolo
     WEBSITE_DESCRIPTION=Descrizione
     WEBSITE_KEYWORDS=Parole chiave
    -LinesToImport=Lines to import
    +LinesToImport=Righe da importare
    diff --git a/htdocs/langs/it_IT/projects.lang b/htdocs/langs/it_IT/projects.lang
    index 4493a76c07e..107a9ba7ce1 100644
    --- a/htdocs/langs/it_IT/projects.lang
    +++ b/htdocs/langs/it_IT/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Vuoi davvero eliminare il progetto?
     ConfirmDeleteATask=Vuoi davvero eliminare questo compito?
     OpenedProjects=Progetti aperti
     OpenedTasks=Attività aperte
    -OpportunitiesStatusForOpenedProjects=Numero di opportunità di progetti aperti per stato
    -OpportunitiesStatusForProjects=Importo delle vendite potenziali per stato nei progetti
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Visualizza progetto
     ShowTask=Visualizza compito
     SetProject=Imposta progetto
     NoProject=Nessun progetto definito o assegnato
    -NbOfProjects=Num. di progetti
    -NbOfTasks=Nr di attività
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Tempo lavorato
     TimeSpentByYou=Tempo impiegato da te
     TimeSpentByUser=Tempo impiegato dall'utente
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Vai all'elenco del tempo impiegato
     GoToListOfTasks=Vai all'elenco dei compiti
     GoToGanttView=Go to Gantt view
     GanttView=Vista Gantt
    -ListProposalsAssociatedProject=Elenco delle proposte commerciali associate al progetto
    -ListOrdersAssociatedProject=Elenco degli ordini clienti associati al progetto
    -ListInvoicesAssociatedProject=Elenco delle fatture attive associate al progetto
    -ListPredefinedInvoicesAssociatedProject=Elenco dei modelli di fattura associati al progetto
    -ListSupplierOrdersAssociatedProject=Elenco degli ordini fornitori associati al progetto
    -ListSupplierInvoicesAssociatedProject=Elenco delle fatture passive associate al progetto
    -ListContractAssociatedProject=Elenco dei contratti associati al progetto
    -ListShippingAssociatedProject=Elenco delle spedizioni collegate al progetto
    -ListFichinterAssociatedProject=Elenco degli interventi associati al progetto
    -ListExpenseReportsAssociatedProject=Elenco delle note spese associate con il progetto
    -ListDonationsAssociatedProject=Elenco delle donazioni associate al progetto
    -ListVariousPaymentsAssociatedProject=Pagamenti vari associati al progetto
    -ListActionsAssociatedProject=Elenco delle azioni associate al progetto
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Tempo impiegato in compiti del progetto
     ListTaskTimeForTask=Tempo impiegato per l'attività
     ActivityOnProjectToday=Operatività sul progetto oggi
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Progetto %s modificato
     TaskCreatedInDolibarr=Attività %s creata
     TaskModifiedInDolibarr=Attività %s modificata
     TaskDeletedInDolibarr=Attività %s cancellata
    -OpportunityStatus=Stato Opportunità
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. stato
    -OpportunityProbability=Probabilità oppotunità
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Probabilità vendita
    -OpportunityAmount=Ammontare opportunità
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. quantità
     OpportunityAmountAverageShort=Importo medio vendita
     OpportunityAmountWeigthedShort=Importo pesato vendita
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributore
     SelectElement=Seleziona elemento
     AddElement=Link all'elemento
     # Documents models
    -DocumentModelBeluga=Modello di progetto per la panoramica sugli oggetti collegati
    -DocumentModelBaleine=Modello per il report di un progetto completo
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Carico di lavoro previsto
     PlannedWorkloadShort=Carico di lavoro
     ProjectReferers=Elementi correlati
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Progetti con questo utente come contatto
     TasksWithThisUserAsContact=Compiti assegnati a questo utente
     ResourceNotAssignedToProject=Non assegnato al progetto
     ResourceNotAssignedToTheTask=Risorsa non assegnata all'attività
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Tempo impiegato da
     TasksAssignedTo=Attività assegnata a
     AssignTaskToMe=Assegnare un compito a me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assegnata attività a %s
     SelectTaskToAssign=Seleziona attività da a assegnare...
     AssignTask=Assegnare
     ProjectOverview=Panoramica
    -ManageTasks=Utilizzare i progetti per seguire compiti e tempo
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Utilizzare i progetti per seguire clienti interessati/opportunità
    -ProjectNbProjectByMonth=Num. di progetti creati per mese
    -ProjectNbTaskByMonth=Nr di attività create per mese
    -ProjectOppAmountOfProjectsByMonth=Quantità di opportunità per mese
    -ProjectWeightedOppAmountOfProjectsByMonth=Quantità ponderata di opportunità per mese
    -ProjectOpenedProjectByOppStatus=Apri progetto /clienti interessati per stato opportunità
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Le statistiche relative a progetti/clienti interessati
     TasksStatistics=Statistiche su attività di progetto/clienti interessati
     TaskAssignedToEnterTime=Compito assegnato. Inserire i tempi per questo compito dovrebbe esserre possibile.
     IdTaskTime=Tempo compito id
     YouCanCompleteRef=Se vuoi aggiungere informazioni al riferimento (per agevolare la ricerca tramite filtri), è opportuno separarle con un carattere "-" in modo che la numerazione automatica continui a funzionare correttamente per i progetti successivi (es: %s-ABC). Puoi aggiungere all'etichetta anche altre chiavi di ricerca.
     OpenedProjectsByThirdparties=Progetti aperti di soggetti terzi
    -OnlyOpportunitiesShort=Solo vendite potenziali
    -OpenedOpportunitiesShort=Opportunità aperte
    -NotAnOpportunityShort=Nessuna vendita potenziale
    -OpportunityTotalAmount=Opportunità importo totale
    -OpportunityPonderatedAmount=Opportunità importo ponderato
    -OpportunityPonderatedAmountDesc=Importo vendite potenziali pesato con la probabilità
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Potenziale
     OppStatusQUAL=Qualificazione
     OppStatusPROPO=Proposta
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=Non hai i permessi per chiudere il progetto %s
     DontHaveTheValidateStatus=Il progetto %s deve essere aperto per essere chiuso
     RecordsClosed=%s progetti chiusi
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/ja_JP/admin.lang b/htdocs/langs/ja_JP/admin.lang
    index 3e6a49634f8..2a67fe4277f 100644
    --- a/htdocs/langs/ja_JP/admin.lang
    +++ b/htdocs/langs/ja_JP/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=開発
     VersionUnknown=未知の
     VersionRecommanded=推奨される
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=セッションを保存するためのハンドラ
     SessionSavePath=ストレージ·セッションのローカライズ
     PurgeSessions=セッションのパージ
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=あなたのPHPで構成されたセッション保存ハンドラを実行中のすべてのセッションを一覧表示することはできません。
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=新しい接続をロックする
    -ConfirmLockNewSessions=あなた自身に新しいDolibarr接続を制限してもよろしいですか。ユーザー<b>%s</b>だけでは、後に接続することができます。
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=接続ロックを解除する
     YourSession=セッション
    -Sessions=ユーザーセッション
    +Sessions=Users sessions
     WebUserGroup=Webサーバのユーザ/グループ
    -NoSessionFound=あなたのPHPには、アクティブなセッションを表示するには許可しないように思われる。セッション<b>(%s)を</b>保存するために使用されるディレクトリ(たとえば、OSの権限により、もしくはPHPディレクティブopen_basedirをすることによって)保護される可能性があります。
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=データを格納するデータベース·キャラクタ·セット
     DBSortingCharset=データをソートするには、データベース·キャラクタ·セット
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=外部ユーザー
     InternalUsers=内部ユーザー
     ExternalUsers=外部ユーザー
     GUISetup=表示
    -SetupArea=セットアップのエリア
    +SetupArea=セットアップ
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=ファイルのアップロードをテストするために形成します(設定に応じて)
     IfModuleEnabled=注:[はい]は、モジュールの<b>%sが</b>有効<b>になっ</b>ている場合にのみ有効です
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=検索を開始する文字のNBR:%s
     NotAvailableWhenAjaxDisabled=Ajaxが無効になったときには使用できません
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=プレビューは利用できません
     ThemeCurrentlyActive=現在アクティブなテーマ
     CurrentTimeZone=TimeZoneはPHP(サーバー)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=スペース
     Table=Table
     Fields=フィールズ
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=アクティブ
     SetupShort=セットアップ
     OtherOptions=その他のオプション
    -OtherSetup=その他のセットアップ
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=小数点の記号
     CurrentValueSeparatorThousand=桁区切り記号
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=パラメータ%s
    -LocalisationDolibarrParameters=ローカリゼーションのパラメータ
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=タイムゾーンは、PHPサーバー
     DaylingSavingTime=夏時間(ユーザー)
     CurrentHour=時間PHP(サーバー)
     CurrentSessionTimeOut=現在のセッションのタイムアウト
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=自動検出(ブラウザの言語)
     FeatureDisabledInDemo=デモで機能を無効にする
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=から要素のみ<a href="%s">対応のモジュールが</a>表示されます。
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=新しい
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore、Dolibarr ERP / CRM外部モジュールのための公式の市場の場所
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=リンク
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=行うにはデータベースに格納しない明確
     MainDbPasswordFileConfEncrypted=conf.phpで暗号化されたデータベース·パスワード(活性化推奨)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=生成されたPDFファイル(推奨しない活性化、大量のPDF生成を壊す)の保護
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=機能
     DolibarrLicense=ライセンス
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=ユーザーまたは開発者のドキュメント(DOC、よくある質問(FAQ)...)のために、 <br> Dolibarr Wikiで見てみましょう。 <br> <a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=他の質問/ヘルプについては、Dolibarrフォーラムを使用することができます。 <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=この領域には、Dolibarrのヘルプサポートサービスを取得することができます。
    -HelpCenterDesc2=このサービスの一部が<b>英語のみ</b>でご利用いただけます。
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=現在のメニューハンドラ
     MeasuringUnit=測定ユニット
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPSポート(php.iniのデフォルト<b>:%s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPSホスト(php.iniのデフォルト<b>:%s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPSポート(システムのようにUnix上でPHPに定義されていません)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPSホスト(システムのようにUnix上でPHPに定義されていません)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= 体系的にすべての送信メールの隠されたカーボンコピーを送信
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=電子メールを送信するために使用する方法
    -MAIN_MAIL_SMTPS_ID=認証が必要な場合は、SMTPには、ID
    -MAIN_MAIL_SMTPS_PW=認証が必要な場合は、SMTPパスワード
    -MAIN_MAIL_EMAIL_TLS= TLS(SSL)暗号を使用して、
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=すべてのSMS sendings(テストの目的やデモのために)無効にする
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=SMSを送信するために使用する方法
    -MAIN_MAIL_SMS_FROM=SMSを送信するためのデフォルトの送信者の電話番号
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=システムと同様にUnix上では使用できませんが備わっています。ローカルでsendmailプログラムをテストします。
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=モジュールのセットアップ
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=ステップ%s
    -FindPackageFromWebSite=(公式ウェブサイト%sの例の場合)必要な機能を提供するパッケージを検索します。
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr現在のバージョン
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= 秒単位で輸出応答をキャッシュするための遅延(0またはキャッシュなしの空の)
     DisableLinkToHelpCenter=ログインページのリンク&quot; <b>ヘルプやサポートが必要</b> &quot; <b>を</b>隠す
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=の自動折り返しは長すぎるので、あなた自身のtextareaに改行を追加しなければならない行は、ドキュメント上のページ外にあるので、もし、ありません。
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=最小長
     LanguageFilesCachedIntoShmopSharedMemory=ファイルlangは、共有メモリにロードされ
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=現在実行中のセットアップでの例
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=OpenDocumentをテンプレートディレクトリのリスト
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=構文の例: <br> C:\\ mydirに<br> / home / mydirの<br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>あなたのODTドキュメントテンプレートを作成する方法を知って、それらのディレクトリに格納する前に、ウィキのドキュメントをお読みください。
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Webサービス(webservicesのパラメータ &quot;do
     TestSubmitForm=入力テストフォーム
     ThisForceAlsoTheme=このメニューマネージャを使用すると、ユーザーの選択肢が何であれ、独自のテーマを使用します。また、スマートフォンに特化したこのメニューマネージャは、すべてのスマートフォン上で動作していません。あなたはあなたに問題が発生した場合は別のメニューマネージャを使用します。
     ThemeDir=スキンディレクトリ
    -ConnectionTimeout=コネクションタイムアウト
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=応答タイムアウト
     SmsTestMessage=_人のPHONEFROM__から__までのテストメッセージPHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=セキュリティで保護されたURLへの鍵
    -NoSmsEngine=いいえ、SMS送信者のマネージャーはご利用いただけません。 SMSセンダマネージャは、デフォルトのディストリビューションでインストールされていない(彼らは外部のサプライヤーに依存しているため)しかし、あなたはhttp://www.dolistore.comにいくつかを見つけることができます
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=あなたは、PDFの生成に関連する各グローバルオプションを設定することができます
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=アドレスボックスを築くためのルール
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=URLを確保するためのパラメータ
     SecurityTokenIsUnique=各URLごとに一意securekeyパラメータを使用して、
     EnterRefToBuildUrl=オブジェクト%sの参照を入力します。
     GetSecuredUrl=計算されたURLを取得する
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=パスワード
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=フィールド
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=ユーザーとグループ
     Module0Desc=Users / Employees and Groups management
    -Module1Name=サードパーティ
    +Module1Name=Third Parties
     Module1Desc=会社と連絡先の管理
     Module2Name=コマーシャル
     Module2Desc=商業管理
     Module10Name=会計
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=提案
     Module20Desc=商業的な提案の管理
     Module22Name=大量の電子郵便
    @@ -511,13 +517,13 @@ Module52Desc=製品の在庫の管理
     Module53Name=サービス
     Module53Desc=サービスの管理
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=バーコード
     Module55Desc=バーコードの管理
     Module56Name=テレフォニー
     Module56Desc=テレフォニー統合
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=ClickToDialシステムの統合(アスタリスク、...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=費用と旅行ノート
     Module75Desc=費用と出張·ノートの管理
     Module80Name=出荷
     Module80Desc=出荷および配信のための管理
    -Module85Name=銀行や現金
    +Module85Name=Banks and Cash
     Module85Desc=銀行や現金アカウントの管理
    -Module100Name=外部のサイト
    -Module100Desc=Dolibarrメニューに任意の外部のWebサイトが含まれており、Dolibarrフレームにそれを表示する
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailmanとすする
     Module105Desc=メンバーモジュールのための郵便配達またはSPIPインタフェース
     Module200Name=LDAP
    -Module200Desc=LDAPディレクトリの同期化
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke統合
     Module240Name=データのエクスポート
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=データのインポート
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=メンバー
     Module310Desc=財団のメンバーの管理
     Module320Name=RSSフィード
     Module320Desc=Dolibarr画面のページ内でRSSフィードを追加
    -Module330Name=ブックマーク
    -Module330Desc=ブックマークの管理
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=のwebcalendar
     Module410Desc=のwebcalendar統合
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=寄付
     Module700Desc=寄付金の管理
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=カマキリ
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYGエディタ
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=グラバター
    -Module2700Desc=ユーザー/メンバーの写真を(それらのメールに見られる)を表示するオンライングラバターサービス(www.gravatar.com)を使用します。インターネットへのアクセスを必要とする
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=のGeoIP Maxmindの変換機能
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=マルチ会社
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=切符売り場
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=売上高のポイント
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=売上高のポイント
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=ペイパル
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=インコターム
    -Module62000Desc=インコタームを管理する機能を追加
    +Module62000Name=インコタームズ
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=資源
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=顧客の請求書をお読みください
    @@ -651,9 +661,9 @@ Permission32=製品を作成/変更
     Permission34=製品を削除します。
     Permission36=隠された製品を参照してください/管理
     Permission38=輸出製品
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=(私が連絡している共有プロジェクトとプロジェクト)のプロジェクトを削除します。
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=介入を読む
     Permission62=介入を作成/変更
    @@ -686,7 +696,7 @@ Permission109=sendingsを削除します。
     Permission111=金融勘定を読む
     Permission112=作成/変更/削除して取引を比較する
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=輸出取引と口座のステートメント
     Permission116=アカウント間の転送
     Permission117=派遣のチェックを管理する
    @@ -694,15 +704,15 @@ Permission121=ユーザーにリンクされている第三者を読む
     Permission122=ユーザーにリンクされている第三者が作成/変更
     Permission125=ユーザーにリンクされている第三者を削除します。
     Permission126=第三者をエクスポートします。
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=プロバイダを読む
     Permission147=統計を読む
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=閉じるサプライヤーの受注
     Permission188=サプライヤの注文を取り消す
     Permission192=線を作成する
     Permission193=線をキャンセルする
    -Permission194=帯域幅のラインを読む
    +Permission194=Read the bandwidth lines
     Permission202=ADSL接続を作成する
     Permission203=順序接続順序
     Permission204=順序接続
    @@ -750,12 +760,12 @@ Permission244=隠されたカテゴリの内容を参照してください。
     Permission251=他のユーザーおよびグループを読む
     PermissionAdvanced251=他のユーザーを読む
     Permission252=他のユーザーの読み取り権限を
    -Permission253=他のユーザー、グループ、およびpermisssionsを作成/変更
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=内部/外部ユーザーおよびアクセス許可を作成/変更
     Permission254=変更の作成/外部ユーザーのみ
     Permission255=他のユーザーのパスワードを変更する
     Permission256=他のユーザーを削除するか、または無効にする
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=CAを読む
     Permission272=請求書をお読みください
     Permission273=問題の請求書
    @@ -765,7 +775,7 @@ Permission283=連絡先を削除
     Permission286=連絡先のエクスポート
     Permission291=関税を読む
     Permission292=関税のアクセス許可を設定する
    -Permission293=のcostumers関税を変更する
    +Permission293=Modify customers tariffs
     Permission300=バーコードを読み取る
     Permission301=バーコードを作成/変更
     Permission302=バーコードを削除します。
    @@ -787,11 +797,9 @@ Permission401=割引を読む
     Permission402=割引を作成/変更
     Permission403=割引を検証する
     Permission404=割引を削除します。
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=データベース(データロード)に外部データの
     Permission1321=顧客の請求書、属性、および支払いをエクスポートする
     Permission1322=Reopen a paid bill
     Permission1421=顧客の注文と属性をエクスポートします。
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=見通しの潜在的なレベル
     DictionaryCanton=州/地方
     DictionaryRegion=地域
    @@ -894,7 +902,7 @@ DictionaryVAT=VATレートまたは販売税率
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=支払条件
     DictionaryPaymentModes=支払いモード
    -DictionaryTypeContact=種類をお問い合わせ
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax(WEEE)
     DictionaryPaperFormat=紙の形式
    @@ -908,47 +916,47 @@ DictionarySource=提案/受注の起源
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=ユニット
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=セットアップは、保存された
     SetupNotSaved=Setup not saved
     BackToModuleList=モジュールリストに戻る
    -BackToDictionaryList=辞書リストに戻る
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=付加価値税管理
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=デフォルトでは、提案されたVATが0団体のような場合に使用することができますされ、個人が小さな会社をOU。
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=率
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE管理
    -LocalTax1IsUsedDescES= 見通し、請求書を作成し、デフォルトではRE率、受注などのアクティブな標準ルールに従います。 <br> TEの買い手が、REに供されていない場合、デフォルト= 0で再。ルールの終わり。 <br>買い手は、その後、デフォルトではREを、REに供されます。ルールの終わり。 <br>
    -LocalTax1IsNotUsedDescES= デフォルトでは、提案されたREは0です。ルールの終わり。
    -LocalTax1IsUsedExampleES= スペインでは、彼らはスペイン語IAEのいくつかの特定のセクションの対象に専門家です。
    -LocalTax1IsNotUsedExampleES= スペインでは、彼らは専門家と社会とスペインIAEの特定のセクションにあります。
    -LocalTax2ManagementES= IRPF管理
    -LocalTax2IsUsedDescES= 見通し、請求書を作成し、デフォルトではRE率、受注などのアクティブな標準ルールに従います。 <br>売り手は、デフォルト= 0でその後IRPF、IRPFにさらされていない場合。ルールの終わり。 <br>売主は、デフォルトではその後IRPFをIRPFに供されます。ルールの終わり。 <br>
    -LocalTax2IsNotUsedDescES= デフォルトでは、提案されたIRPFは0です。ルールの終わり。
    -LocalTax2IsUsedExampleES= スペインでは、フリーランサーとサービスモジュールの税制を選択した企業に提供する独立した専門家。
    -LocalTax2IsNotUsedExampleES= スペインでは彼らは、モジュールの税制の対象になりませんbussinesがあります。
    +LocalTax1ManagementES=RE管理
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=デフォルトでは、提案されたREは0です。ルールの終わり。
    +LocalTax1IsUsedExampleES=スペインでは、彼らはスペイン語IAEのいくつかの特定のセクションの対象に専門家です。
    +LocalTax1IsNotUsedExampleES=スペインでは、彼らは専門家と社会とスペインIAEの特定のセクションにあります。
    +LocalTax2ManagementES=IRPF管理
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=デフォルトでは、提案されたIRPFは0です。ルールの終わり。
    +LocalTax2IsUsedExampleES=スペインでは、フリーランサーとサービスモジュールの税制を選択した企業に提供する独立した専門家。
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=販売
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=ない翻訳がコードに見つからない場合、デフォルトで使用されるラベル
     LabelOnDocuments=ドキュメントのラベル
    -NbOfDays=日のNb
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=今月末に
     CurrentNext=Current/Next
     Offset=オフセット
    @@ -984,7 +993,7 @@ DatabaseUser=データベース·ユーザーの
     DatabasePassword=データベースのパスワード
     Tables=テーブル
     TableName=テーブル名
    -NbOfRecord=記録のNb
    +NbOfRecord=No. of records
     Host=サーバ
     DriverType=ドライバの種類
     SummarySystem=システム情報の概要
    @@ -996,7 +1005,7 @@ Skin=皮膚のテーマ
     DefaultSkin=デフォルトのスキンテーマ
     MaxSizeList=リストの最大長
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=その日のメッセージ
     MessageLogin=ログインページのメッセージ
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=左側のメニューの恒久的な検索フォーム
     DefaultLanguage=使用する既定の言語(言語コード)
     EnableMultilangInterface=多言語のインターフェイスをイネーブルにします。
     EnableShowLogo=左メニューのロゴを表示する
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=名
     CompanyAddress=アドレス
     CompanyZip=ZIP
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=銀行口座の%sの所有者
     BankModuleNotActive=銀行が有効になっていないモジュールを占めて
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=アラート
    -DelaysOfToleranceBeforeWarning=許容遅延の前に警告
    -DelaysOfToleranceDesc=アラートは、各年代後半要素のピクトの%sと画面上に報告される前に、この画面では、許容遅延を定義することができます。
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=閉じるには、提案について警告する前に許容差(日数)を遅らせる
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=請求しない提案について警告する前に許容差(日数)を遅らせる
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=アクティブにするサービスのアラートの前に許容遅延時間(日数)
    -Delays_MAIN_DELAY_RUNNING_SERVICES=期限切れのサービスに関するアラートの前に許容遅延時間(日数)
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=未払いの仕入先請求書の警告の前に許容遅延時間(日数)
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=未払いのクライアントの請求書のアラートの前にTolerence遅延(日数)
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=保留中の銀行の和解に警告する前に、許容遅延時間(日数)
    -Delays_MAIN_DELAY_MEMBERS=遅延会費のアラートの前に許容遅延時間(日数)
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=行うためのチェック預金のアラートの前に許容遅延時間(日数)
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=他のメニューエントリは、オプションのパラメータを管理することができます。
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=セキュリティ監査イベント
     Audit=監査
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=ここDolibarrセキュリティイベントのロギングを有
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=システム情報では、読み取り専用モードでのみ管理者の目に見える得るその他の技術情報です。
     SystemAreaForAdminOnly=この領域は、管理者ユーザーのために利用可能です。 Dolibarr権限のいずれも、この制限を減らすことはできません。
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=あなたがDolibarrの外観に関連する各パラメータを選択し、ここで感じることができる
     AvailableModules=Available app/modules
     ToActivateModule=モジュールを有効にするには、設定エリア(ホーム - &gt;セットアップ - &gt;モジュール)に行く。
     SessionTimeOut=セッションのタイムアウト
    -SessionExplanation=この番号は、セッションはこの遅延の前に期限切れにならないことを保証します。しかし、PHPのセッション管理は、保証は、そのセッションは、常にこの遅延後に有効期限はありません:キャッシュセッションをきれいにするシステムが稼動している場合に発生します。 <br>注:不特定のシステムで、PHPの内部プロセスは<b>%s / %s</b>アクセスについてだけ、他のセッションで行われたアクセス時にす ​​べてのセッションをクリーンアップします。
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=使用可能なトリガ
    -TriggersDesc=トリガーは、一度ディレクトリ<b>の</b> htdocs <b>/コア/トリガ</b>にコピーDolibarrワークフローの動作を変更するファイルです。彼らはDolibarrイベント(新会社の作成、請求書の検証、...)上でアクティブに、新しいアクションを実現しました。
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=このファイル内のトリガはその名前に<b>-NORUN</b>サフィックスは無効になっています。
     TriggerDisabledAsModuleDisabled=モジュール<b>%sが</b>無効<b>になっ</b>ているとして、このファイル内のトリガーが無効になっています。
     TriggerAlwaysActive=このファイル内のトリガーがアクティブにDolibarrモジュールであれ、常にアクティブです。
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=制限/精密セットアップ
    -LimitsDesc=ここDolibarrで使用される限界、精度と最適化を定義することができます。
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=ユニット価格の最大小数点以下
     MAIN_MAX_DECIMALS_TOT=合計価格の最大小数点以下
     MAIN_MAX_DECIMALS_SHOWN=画面に表示されている価格の最大10進数(追加<b>...</b>この番号の後にあなたが見たい場合は<b>...</b>数値が切り捨てられたときに画面に表示されている場合)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=製品の売上単価
     TotalPriceAfterRounding=丸め後の総価格(純/ VAT /税込)
     ParameterActiveForNextInputOnly=次の入力のための効果的なパラメータのみ
     NoEventOrNoAuditSetup=は、セキュリティイベントがまだ記録されていません。監査が有効になっていない場合、これは正常であることができる &quot;設定 - セキュリティ - 監査&quot;ページを参照してください。
    -NoEventFoundWithCriteria=は、セキュリティイベントは、このような検索のcriterias見つかりませんされています。
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=ローカルのsendmailの設定を参照してください。
     BackupDesc=Dolibarrの完全なバックアップを作成するには、以下を行う必要があります。
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=アーカイブディレクトリは安全な場所に格納する必要があります。
     BackupDescY=生成されたダンプ·ファイルは安全な場所に格納する必要があります。
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Dolibarrのバックアップを復元するには、以下を行う必要があります。
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= このルールがアクティブ化モジュールによって<b>%s</b>に強制されます。
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=あなたは、ユーザ<b>%s
     YourPHPDoesNotHaveSSLSupport=あなたのPHPでのSSLの機能は使用できません
     DownloadMoreSkins=ダウンロードするには多くのスキン
     SimpleNumRefModelDesc=形式yyは年である%syymm-NNNNの参照番号を返し、mmは月とnnnnは穴がなく、リセットなしのシーケンスです。
    -ShowProfIdInAddress=ドキュメント上のアドレスとのprofesionnals IDを表示
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=部分的な翻訳
    -MAIN_DISABLE_METEO=メテオビューを無効にします。
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=APIへのログインをテストします。
    -ProxyDesc=Dolibarrの一部の機能が動作するようにインターネットアクセスを持っている必要があります。このためにここでパラメータを定義します。 Dolibarrサーバーがプロキシサーバーの背後にある場合、これらのパラメータは、それを介してインターネットにアクセスする方法をDolibarr指示します。
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=外部からのアクセス
     MAIN_PROXY_USE=プロキシサーバ(それ以外の場合、インターネットへの直接アクセス)を使用して、
     MAIN_PROXY_HOST=プロキシサーバーの名前/アドレス
     MAIN_PROXY_PORT=プロキシサーバーのポート
     MAIN_PROXY_USER=プロキシサーバーを使用するには、ログインしてください
     MAIN_PROXY_PASS=プロキシサーバーを使用するためのパスワード
    -DefineHereComplementaryAttributes=デフォルトでは既に利用できない、ここですべての属性を定義して、あなたは%sのためにサポートさせたい。
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=補完的な属性
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=警告は、一部のLinuxシステムでは、電子メールから電子メールを送信するためには、sendmailの実行セットアップする必要があります含むオプション-BA(パラメータmail.force_extra_parameters php.iniファイルに)。一部の受信者がメールを受信しない場合は、mail.force_extra_parameters =-BA)と、このPHPパラメータを編集してみてください。
     PathToDocuments=ドキュメントへのパス
     PathDirectory=ディレクトリ
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=フィールド%sのエディション
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=小文字で共有数字と文字を含む8文字:内部Dolibarrアルゴリズムに従って生成されたパスワードを返します。
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=新しいユーザーを作成するために必要な電子メ
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=企業のモジュールのセットアップ
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=ドキュメントテンプレート
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=ドラフト文書に透かし
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=ユニークなイドプロ
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=<b>%s</b>形式にエクスポートするリンクは以下のリンクで入手可能です:%s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=<b>%s</b>形式にエクスポートするリンクは以
     BillsSetup=請求書モジュールのセットアップ
     BillsNumberingModule=モジュールの番号請求書とクレジットメモ
     BillsPDFModules=請求書ドキュメントモデル
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=クレジットメモ
     CreditNotes=クレジットメモ
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= 各メンバーのログインを管理する
     AdherentMailRequired=新しいメンバーを作成するために必要な電子メール
     MemberSendInformationByMailByDefault=メンバー(検証や新しいサブスクリプション)にメールの確認を送信するチェックボックスはデフォルトでオンになっています
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAPの設定
     LDAPGlobalParameters=グローバルパラメータ
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=同期テストに成功
     LDAPSynchroKO=失敗した同期のテスト
    -LDAPSynchroKOMayBePermissions=同期テストに失敗しました。サーバへのコネクションが正しく設定されていることを確認し、LDAP udpatesすることができます
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCPは、LDAPサーバに成功(SERVER = %s、ポート= %s)に接続
     LDAPTCPConnectKO=TCPは、LDAPサーバへの接続(SERVER = %s、ポート= %s)に失敗しました
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=LDAPサーバへのAuthentificate /接続(SERVER = %s、ポート= %sは、Admin = %s、パスワード= %s)に失敗しました
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=バージョン3用に設定されたLDAPサーバ
     LDAPSetupForVersion2=バージョン2用に設定されたLDAPサーバ
     LDAPDolibarrMapping=Dolibarrマッピング
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=ログイン(サンバ、ActiveDirectoryを)
     LDAPFieldLoginSambaExample=例:sAMAccountNameが
     LDAPFieldFullname=ファーストネーム
     LDAPFieldFullnameExample=例:cn
    -LDAPFieldPasswordNotCrypted=パスワードは暗号化されません
    -LDAPFieldPasswordCrypted=パスワードは暗号化され
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=例:userPasswordを
     LDAPFieldCommonNameExample=例:cn
     LDAPFieldName=名
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=値の例は、次のロードされたスキーマを持つ<b>OpenLDAPの</b>ために設計されています<b>。core.schema、cosine.schema、inetorgperson.schema)。</b>あなたがthoose値とOpenLDAPを使用する場合は、すべてのthooseスキーマが読み込まれているように、LDAP設定<b>ファイル</b> slapd.conf <b>を</b>変更<b>します</b> 。
     ForANonAnonymousAccess=認証されたアクセスも(たとえば、書き込みアクセス用)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=製品モジュールのセットアップ
     ServiceSetup=サービスモジュールのセットアップ
     ProductServiceSetup=製品とサービスモジュールのセットアップ
     NumberOfProductShowInSelect=コンボselectリスト内の製品の最大数(0 =制限なし)
    -ViewProductDescInFormAbility=フォーム内の​​製品の説明の可視化(それ以外のポップアップツールチップなど)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=製品に使用するデフォルトのバーコードの種類
     SetDefaultBarcodeTypeThirdParties=第三者のために使用するデフォルトのバーコードの種類
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=送信モジュールのセットアップ
     SendingsReceiptModel=領収書のモデルを送信する
     SendingsNumberingModules=モジュールの番号Sendings
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=製品の納入領収書ナンバリングモジュール
    @@ -1515,18 +1528,18 @@ AdvancedEditor=高度なエディタ
     ActivateFCKeditor=のための高度なエディタをアクティブにします。
     FCKeditorForCompany=要素の説明と注意事項のWYSIWIGエディタの作成/版(製品/サービスを除く)
     FCKeditorForProduct=製品/サービスの説明と注意事項のWYSIWIGエディタの作成/版
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= 郵送のWYSIWIGエディタの作成/版
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=接続に成功しましたが、データベースは、osCommerceのデータベース(キー%sがテーブル%sに見つからない)になるようには見えません。
    -OSCommerceTestOk=ユーザー '%s'成功したデータベース &quot;%s&quot;のサーバ &quot;%s&quot;への接続を確立します。
    -OSCommerceTestKo1=サーバー '%s'への接続が成功しますが、データベース '%s'は到達できませんでした。
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=ユーザー '%s'でサーバー '%s'への接続に失敗しました。
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=メニューを削除
     Menus=メニュー
    @@ -1548,7 +1561,7 @@ DetailRight=不正な灰色のメニューを表示するための条件
     DetailLangs=ラベルのコード変換のためにラングのファイル名
     DetailUser=インターン/エキスターン/すべて
     Target=ターゲット
    -DetailTarget=リンクのターゲット(_blankトップ新しいウィンドウが開きます)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=レベル(-1:トップメニュー、0:ヘッダメニュー、&gt; 0でメニューやサブメニュー)
     ModifMenu=メニューの変更
     DeleteMenu=メニューエントリを削除する
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=付加価値税(VAT)が原因です。 <br> - 貨物の
     OptionVatDebitOptionDesc=付加価値税(VAT)が原因です。 <br> - 貨物の配達に(我々は請求書の日付を使用します) <br> - サービスの請求書(デビット)の
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=着払い
     OnPayment=支払いに
     OnInvoice=請求書
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=イベントと議題モジュールのセットアップ
     PasswordTogetVCalExport=エクスポートのリンクを許可するキー
     PastDelayVCalExport=より古いイベントはエクスポートされません
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=モジュールのセットアップをダイヤルする]をクリックします
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=売上高のポイント
     CashDeskSetup=販売モジュールのセットアップのポイント
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=現金支払いを受け取るために使用するデフォルトのアカウント
     CashDeskBankAccountForCheque= 小切手による支払いを受け取るために使用するデフォルトのアカウント
     CashDeskBankAccountForCB= クレジットカードでの現金支払いを受け取るために使用するデフォルトのアカウント
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=モジュールのセットアップをブックマーク
    -BookmarkDesc=このモジュールは、ブックマークを管理することができます。また、あなたの左のメニュー上の任意のDolibarrページまたはexternale Webサイトへのショートカットを追加することができます。
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=左側のメニューに表示するブックマークの最大数
     ##### WebServices #####
     WebServicesSetup=ウェブサービスモジュールのセットアップ
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=マルチ会社のモジュールのセットアップ
     ##### Suppliers #####
     SuppliersSetup=サプライヤーモジュールのセットアップ
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=プロジェクトモジュールのセットアップ
     ProjectsModelModule=プロジェクトの報告書ドキュメントモデル
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/ja_JP/companies.lang b/htdocs/langs/ja_JP/companies.lang
    index 6b94eba25d0..86f2f491d03 100644
    --- a/htdocs/langs/ja_JP/companies.lang
    +++ b/htdocs/langs/ja_JP/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=サードパーティを選択します。
     ConfirmDeleteCompany=この会社と継承されたすべての情報を削除してもよろしいですか?
     DeleteContact=連絡先を削除
     ConfirmDeleteContact=この連絡先と継承されたすべての情報を削除してもよろしいですか?
    -MenuNewThirdParty=新しいサードパーティ
    -MenuNewCustomer=新しい顧客
    -MenuNewProspect=新しい見通し
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=新しい民間の個々の
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=サードパーティの連絡先
     Company=会社
     CompanyName=会社名
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=企業
    -CountryIsInEEC=国が欧州経済共同体の内部にある
    -ThirdPartyName=サードパーティの名前
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=第三者
    -ThirdParties=サードパーティ
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=見込み
     ThirdPartyProspectsStats=見込み
     ThirdPartyCustomers=お客さま
     ThirdPartyCustomersStats=お客さま
     ThirdPartyCustomersWithIdProf12=%s %sまたはお持ちのお客様
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=サードパーティ製のタイプ
    +ThirdPartyType=Type of company
     Individual=私人
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=親会社
     Subsidiaries=子会社
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=郵便番号
     Town=シティ
     Web=ウェブ
     Poste= 位置
    -DefaultLang=デフォルトでは、言語
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=提案
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=構文は有効です。
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=この顧客は<b>%sの%%</b>デフォルトの割引
     CompanyHasNoRelativeDiscount=この顧客は、デフォルトではなく相対的な割引がありません
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=この顧客はまだ<b>%s %s</b>のためにクレジットノートを持っている
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=なし
    -Supplier=サプライヤー
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=コンタクト/アドレスを編集
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=会社を削除します。
     PersonalInformations=個人データ
     AccountancyCode=Accounting account
    -CustomerCode=顧客コード
    -SupplierCode=Vendor code
    -CustomerCodeShort=顧客コード
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=すべての顧客固有の顧客コード、
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=第三者が顧客または見込み客である場合は必須
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=モジュールによって制御の妥当性
    -ThisIsModuleRules=これは、このモジュールのためのルールです。
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=連絡する見通し
     CompanyDeleted=データベースから削除された会社 &quot;%s&quot;。
     ListOfContacts=連絡先/アドレスのリスト
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=第三者のリスト
    -ShowCompany=Show third party
    +ListOfContactsAddresses=連絡先/アドレスのリスト
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=連絡先を表示する
     ContactsAllShort=すべて(フィルタなし)
     ContactType=コンタクトタイプ
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=この連絡先は、任意の商業的な提案のた
     NoContactForAnyContract=この接触は、いかなる契約の連絡はありません
     NoContactForAnyInvoice=この連絡先は、任意の請求書の連絡はありません
     NewContact=新しい連絡先/アドレス
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=私の連絡先
     Capital=資本
     CapitalOf=%sの首都
     EditCompany=会社を編集します。
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=チェック
    -VATIntraCheckDesc=リンク<b>%sは、</b>欧州のVATチェッカーサービスを要求することができます。サーバーから外部インターネットへのアクセスが動作するように、このサービスが必要となります。
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=欧州委員会のサイトでIntracomunnautary VATをチェックする
    -VATIntraManualCheck=また、ヨーロッパのウェブサイトから手動でチェックすることができます<a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=ことはできませんを確認してください。サービスは加盟国(%s)によって提供されていません確認してください。
    -NorProspectNorCustomer=また見通し、また、顧客
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=スタッフ
     ProspectLevelShort=潜在的な
     ProspectLevel=見通しの可能性
    @@ -387,12 +387,12 @@ ExportCardToFormat=形式にカードをエクスポートする
     ContactNotLinkedToCompany=第三者にリンクされて接触しない
     DolibarrLogin=Dolibarrログイン
     NoDolibarrAccess=いいえDolibarrアクセス​​できない
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=連絡先とプロパティ
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=価格水準
     DeliveryAddress=配信アドレス
     AddAddress=アドレスを追加します。
    @@ -402,16 +402,16 @@ DeleteFile=ファイルを削除します。
     ConfirmDeleteFile=あなたがこのファイルを削除してもよろしいですか?
     AllocateCommercial=Assigned to sales representative
     Organization=組織
    -FiscalYearInformation=会計年度に関する情報
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=会計年度の開始月
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=見込み客リスト
    -ListCustomersShort=顧客リスト
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=ユニークな第三者の合計
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=開く
     ActivityCeased=閉じた
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=顧客/サプライヤーコードは無料です。このコードは、いつでも変更することができます。
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/ja_JP/errors.lang b/htdocs/langs/ja_JP/errors.lang
    index d80faa8f618..f8ac676de7e 100644
    --- a/htdocs/langs/ja_JP/errors.lang
    +++ b/htdocs/langs/ja_JP/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=値 '%s'に間違った日付の形式になっています
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=ディレクトリ%sの書き込みに失敗しました
     ErrorFoundBadEmailInFile=ファイル内の%s線の発見誤った電子メールのシンタックス(電子メール= %sを使用したサンプルライン%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=いくつかの必須フィールドが満たされていませんでした。
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=ディレクトリの作成に失敗しました。そのWebサーバのユーザがDolibarrのドキュメントディレクトリに書き込む権限を持って確認してください。パラメータの<b>safe_modeが</b>このPHPが有効になっている場合、Dolibarr PHPファイルは、Webサーバーのユーザー(またはグループ)に所有していることを確認してください。
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=フィールド<b>%sは、</b>特殊文字が含まれてはいけません。
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=全く会計モジュールが活性化しない
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAPのマッチングは完全ではありません。
     ErrorLDAPMakeManualTest=。ldifファイルは、ディレクトリ%sで生成されました。エラーの詳細情報を持つようにコマンドラインから手動でそれをロードしようとする。
    -ErrorCantSaveADoneUserWithZeroPercentage=&quot;で行われた&quot;フィールドも満たされている場合は、 &quot;statutが起動していない&quot;とアクションを保存することはできません。
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=作成に使用refは、すでに存在しています。
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascriptがこの機能が動作しているために無効にすることはできません。 Javascriptを有効/無効にするには、メニューHome  - &gt;セットアップ - &gt;ディスプレイに移動します。
     ErrorPasswordsMustMatch=両方入力したパスワードは、互いに一致している必要があります
    -ErrorContactEMail=技術的なエラーが発生しました。 、次の電子メール<b>%s</b>に管理者に連絡してenはエラーコードメッセージで<b>%s、</b>またはこのページの画面コピーを追加することにより、さらに優れたを提供してください。
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=フィールド番号<b>%s</b>の間違った値(値<b>'%s'は</b>正規表現のルール<b>%s</b>一致<b>し</b>ません)
     ErrorFieldValueNotIn=フィールド番号<b>%s</b>の間違った値(値<b>'%s'は、</b>テーブルの<b>%s</b>のフィールド<b>%s</b>に使用可能な値ではありません)
     ErrorFieldRefNotIn=フィールド番号<b>%s</b>のために間違った値(値<b>&quot;%s&quot;は%s</b>既存のREFではありません)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=ウイルス対策プログラムがファイル
     ErrorSpecialCharNotAllowedForField=特殊文字は、フィールド &quot;%s&quot;に許可されていません
     ErrorNumRefModel=参照は、データベース(%s)に存在し、この番号規則と互換性がありません。レコードを削除するか、このモジュールを有効にするために参照を変更しました。
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=マスク上でのエラー
     ErrorBadMaskFailedToLocatePosOfSequence=シーケンス番号のないエラー、マスク
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=エラー、不正なリセット値
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=エラーが発生しました。少なくとも一つのエントリを選択します。
    -ErrorDeleteNotPossibleLineIsConsolidated=レコードがconciliatedされている銀行のトランザクションのにリンクされているのでできませ​​ん削除
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%sは別の第三者に割り当てられています
     ErrorFailedToSendPassword=パスワードの送信に失敗しました
     ErrorFailedToLoadRSSFile=RSSフィードの取得に失敗した。エラーメッセージが十分な情報を提供していない場合は定数MAIN_SIMPLEXMLLOAD_DEBUGを追加しようとする。
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=ログイン<b>%s</b>を持つユーザーを見つけ
     ErrorLoginHasNoEmail=このユーザーは電子メールアドレスを持っていません。プロセスが中止されました。
     ErrorBadValueForCode=セキュリティコードの値が正しくありません。新しい値で再試行してください...
     ErrorBothFieldCantBeNegative=フィールド%s %sとは負の両方にすることはできません
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Webサーバを実行するユーザーアカウントを使用<b>%s</b>そのための権限を持っていない
     ErrorNoActivatedBarcode=活性化バーコード·タイプません
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=この職種またはこのターゲットを使用
     WarningPassIsEmpty=警告は、データベースのパスワードは空です。これはセキュリティホールです。あなたのデータベースにパスワードを追加し、これを反映するようにconf.phpファイルを変更する必要があります。
     WarningConfFileMustBeReadOnly=警告は、設定ファイルは<b>(htdocsに/ confに/ conf.php)</b>のWebサーバーによって上書きすることができます。これは重大なセキュリティホールです。 Webサーバーで使用されるオペレーティング·システム·ユーザーのために読み取り専用モードになるようにファイルのパーミッションを変更します。あなたのディスクにWindowsとFATフォーマットを使用すると、このファイルシステムはファイルのパーミッションを追加することはできません知っている必要があり、ので、完全に安全ではないcan。
     WarningsOnXLines=<b>%s</b>ソース行に関する警告
    -WarningNoDocumentModelActivated=ドキュメント生成のためのモデルは、活性化されていません。あなたのモジュールのセットアップを確認するまでモデルは、デフォルトで選びましたされます。
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=すべてのセキュリティ警告は、(のみの管理者ユーザでは表示)の脆弱性が存在する(またはその定数MAIN_REMOVE_INSTALL_WARNINGがセットアップ] - &gt; [その他の設定に追加される)である限り、アクティブのままです。
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/ja_JP/interventions.lang b/htdocs/langs/ja_JP/interventions.lang
    index 65e674d5fb4..d31a3c24ca3 100644
    --- a/htdocs/langs/ja_JP/interventions.lang
    +++ b/htdocs/langs/ja_JP/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=介入
     InterventionCard=介入のカード
     NewIntervention=新しい介入
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=介入のリスト
     ActionsOnFicheInter=介入のアクション
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/ja_JP/main.lang b/htdocs/langs/ja_JP/main.lang
    index b0d3491c446..b77a12131d5 100644
    --- a/htdocs/langs/ja_JP/main.lang
    +++ b/htdocs/langs/ja_JP/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=(送信者= %s、受信機= %s)メールの送信に
     ErrorFileNotUploaded=ファイルがアップロードされていませんでした。最大許容超えないようにサイズを確認し、その空き領域がディスク上で使用可能であり、すでにこのディレクトリ内の同じ名前のファイルが存在しないことに注意してください。
     ErrorInternalErrorDetected=エラーが検出され
     ErrorWrongHostParameter=間違ったホストのパラメータ
    -ErrorYourCountryIsNotDefined=あなたの国が定義されていません。ホーム - セットアップ -  [編集]に移動し、再度フォームを投稿してください。
    -ErrorRecordIsUsedByChild=このレコードの削除に失敗しました。このレコードは、少なくとも一つの子レコードに使用されます。
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=間違った値
     ErrorWrongValueForParameterX=パラメータ%sのために間違った値
     ErrorNoRequestInError=エラーには要求しない
    -ErrorServiceUnavailableTryLater=一瞬のためにサービスを利用できません。後でもう一度やり直してください。
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=ユニークなフィールドの値が重複しています
    -ErrorSomeErrorWereFoundRollbackIsDone=いくつかのエラーが検出されました。我々は、ロールバックの変更。
    -ErrorConfigParameterNotDefined=パラメータ<b>%sは</b> Dolibarr configファイル<b>conf.php</b>内で定義されていません。
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Dolibarrデータベース内のユーザーの<b>%sを</b>見つけることができませんでした。
     ErrorNoVATRateDefinedForSellerCountry=エラー、国%s 'に対して定義されていないのVAT率。
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=エラーは、ファイルを保存に失敗しました。
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=日付を設定する
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=ファイルが正常にアップロードされました
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=ファイルが添付ファイルが選択されているが、まだアップロードされませんでした。このために &quot;添付ファイル&quot;をクリックしてください。
    -NbOfEntries=エントリのNb
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=助けを読む
     RecordSaved=レコードが保存された
    @@ -94,7 +94,7 @@ Undefined=未定義
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=上記参照
    -HomeArea=ホームエリア
    +HomeArea=ホーム
     LastConnexion=Latest connection
     PreviousConnexion=以前の接続
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=閉じた
     Closed2=閉じた
     NotClosed=Not closed
     Enabled=使用可能
    +Enable=Enable
     Deprecated=Deprecated
     Disable=無効にする
     Disabled=無効にする
    @@ -153,7 +154,7 @@ Update=更新
     Close=閉じる
     CloseBox=Remove widget from your dashboard
     Confirm=確認する
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=削除する
     Remove=削除する
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=コピー
     Paste=貼り付ける
     Default=デフォルト
     DefaultValue=デフォルト値
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=価格
     PriceCurrency=Price (currency)
     UnitPrice=単価
    @@ -347,7 +348,7 @@ AmountTTCShort=金額(税込)
     AmountHT=額(税引後)
     AmountTTC=金額(税込)
     AmountVAT=金額税
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=適用されない
     ActionRunningNotStarted=開始するには
     ActionRunningShort=In progress
     ActionDoneShort=完成した
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=生成する
     Duration=持続
     TotalDuration=全持続時間
     Summary=要約
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=利用できる
     NotYetAvailable=まだ利用できません
    @@ -468,7 +469,7 @@ and=と
     or=または
     Other=その他
     Others=他人
    -OtherInformations=その他の情報
    +OtherInformations=Other information
     Quantity=量
     Qty=個数
     ChangedBy=によって変更され
    @@ -506,7 +507,7 @@ None=なし
     NoneF=なし
     NoneOrSeveral=None or several
     Late=遅い
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=画像
     Photos=写真
    @@ -530,18 +531,6 @@ September=9月
     October=10月
     November=11月
     December=12月
    -JanuaryMin=月
    -FebruaryMin=2月
    -MarchMin=マー
    -AprilMin=4月
    -MayMin=5月
    -JuneMin=6月
    -JulyMin=7月
    -AugustMin=8月
    -SeptemberMin=9月
    -OctoberMin=10月
    -NovemberMin=11月
    -DecemberMin=12月
     Month01=1月
     Month02=2月
     Month03=3月
    @@ -646,6 +635,8 @@ SendMail=メールを送る
     EMail=E-mail
     NoEMail=まだメールしない
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=所有者
     FollowingConstantsWillBeSubstituted=以下の定数は、対応する値を持つ代替となります。
    @@ -677,7 +668,7 @@ NeverReceived=受信しませんでした
     Canceled=キャンセル
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=カラー
     Documents=リンクされたファイル
     Documents2=ドキュメント
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=隠されたパスワードを使用してコマンドを表示する
     UnHidePassword=明確なパスワードを使用して実際のコマンドを表示する
     Root=ルート
    -Informations=情報
    +Informations=Information
     Page=ページ
     Notes=注釈
     AddNewLine=新しい行を追加します。
    @@ -716,15 +707,15 @@ Merge=マージ
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=メインのコンテンツ領域を印刷するページを表示
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=警告は、あなたがメンテナンスモードになっているので、唯一のログイン<b>%sは、</b>現時点ではアプリケーションの使用を許可されている。
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=システムエラー
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=クレジットカード
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=<b>%s</b>のフィールドは必須です
    -FieldsWithIsForPublic=<b>%s</b>のフィールドは、メンバーの公開リストに表示されます。あなたがこれをしたくない場合は、 &quot;public&quot;チェックボックスをオフを確認してください。
    -AccordingToGeoIPDatabase=(のGeoIP変換器のに従って)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=ライン
     NotSupported=サポートされていません
     RequiredField=必須フィールド
    @@ -732,6 +723,8 @@ Result=結果
     ToTest=テスト
     ValidateBefore=カードがこの機能を使用する前に検証する必要があります
     Visibility=可視性
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=プライベート
     Hidden=隠された
     Resources=資源
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=ドラフトを作成します。
     SetToDraft=Back to draft
     ClickToEdit=クリックして編集
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=日ごとに
     BySalesRepresentative=営業担当者によって
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=システムツール
     ModulesSystemTools=Modules tools
     Test=テスト
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=介入を示す
     ShowContract=契約を表示する
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=行を削除します
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=請求分類
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=カレンダー
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=イベント
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=プロジェクト
     Projects=プロジェクト
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=パーミッション
     LineNb=Line no.
     IncotermLabel=インコタームズ
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=月曜日
     Tuesday=火曜日
    @@ -927,15 +931,15 @@ SearchIntoInterventions=介入
     SearchIntoContracts=契約
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=コメント
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=皆
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=影響を受ける
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/ja_JP/other.lang b/htdocs/langs/ja_JP/other.lang
    index 28a28316adb..0e38e37a3c5 100644
    --- a/htdocs/langs/ja_JP/other.lang
    +++ b/htdocs/langs/ja_JP/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=セキュリティコード
     NumberingShort=N°
     Tools=ツール
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=誕生日
     BirthdayDate=Birthday date
     DateToBirth=誕生日
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=検証済みペイメントの戻りページでメッセージ
     MessageKO=キャンセル支払い戻りページでメッセージ
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=介入は、検証
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=検証済みの顧客の注文
     Notify_ORDER_SENTBYMAIL=Envío pedido POR電子メール
     Notify_ORDER_SUPPLIER_SENTBYMAIL=メールでの送信サプライヤー順
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=サプライヤーの順序は、承認さ
     Notify_ORDER_SUPPLIER_REFUSE=サプライヤーのオーダーが拒否されました
     Notify_PROPAL_VALIDATE=検証済みの顧客の提案
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=電子メールによって送信された商業提案
     Notify_WITHDRAW_TRANSMIT=伝送撤退
     Notify_WITHDRAW_CREDIT=クレジット撤退
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=第三者が作成した
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=顧客への請求書が検証さ
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=顧客への請求はpayed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=顧客への請求書が取り消さ
     Notify_BILL_SENTBYMAIL=メールで送信された顧客への請求書
     Notify_BILL_SUPPLIER_VALIDATE=サプライヤの請求書が検証さ
    -Notify_BILL_SUPPLIER_PAYED=サプライヤの請求書はpayed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=メールで送られたサプライヤーの請求書
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=検証済みの契約
     Notify_FICHEINTER_VALIDATE=介入検証
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=送料は、検証
     Notify_SHIPPING_SENTBYMAIL=電子メールによって送信された商品
     Notify_MEMBER_VALIDATE=メンバー検証
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=添付ファイル/文書の数
     TotalSizeOfAttachedFiles=添付ファイル/文書の合計サイズ
     MaxSize=最大サイズ
     AttachANewFile=新しいファイル/文書を添付する
     LinkedObject=リンクされたオブジェクト
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>教授イド%sは、</b>サードパーティの国に応じて情報です。 <br>たとえば、国<b>%s</b>のために、それはコード<b>%s</b>です。
     DolibarrDemo=Dolibarr ERP / CRMデモ
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=介入%sが検証されています。
     EMailTextInvoiceValidated=請求書%sが検証されています。
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=提案%sが検証されています。
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=注文%sが検証されています。
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=注文%sは%sによって承認されている。
     EMailTextOrderRefused=注文%sは拒否されました。
     EMailTextOrderRefusedBy=注文%sは%sによって拒否されました。
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=輸入データセット
     DolibarrNotification=自動通知
     ResizeDesc=新しい幅<b>または</b>新しい高さを入力します。比率は、サイズ変更時に保持されます...
    @@ -204,7 +212,7 @@ NewLength=新しい幅
     NewHeight=新しい高さ
     NewSizeAfterCropping=トリミング後の新しいサイズ
     DefineNewAreaToPick=(あなたが反対側の角に達するまで、イメージ上で左クリックをドラッグ)選択するには、画像を新たな領域を定義します。
    -CurrentInformationOnImage=このツールは、画像をサイズ変更またはトリミングするのに役立つように設計されています。これは、現在の編集された画像上での情報です。
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=イメージエディタ
     YouReceiveMailBecauseOfNotification=あなたのメールアドレスは%sの%sソフトウェアに特定のイベントを通知されるターゲットのリストに追加されているため、このメッセージが表示されます。
     YouReceiveMailBecauseOfNotification2=このイベントは次のとおりです。
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=輸出地域
    diff --git a/htdocs/langs/ja_JP/projects.lang b/htdocs/langs/ja_JP/projects.lang
    index 309e9b25e6a..c0a5d1d2686 100644
    --- a/htdocs/langs/ja_JP/projects.lang
    +++ b/htdocs/langs/ja_JP/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=プロジェクトを表示する
     ShowTask=タスクを表示する
     SetProject=プロジェクトを設定します。
     NoProject=はプロジェクトが定義されていませんまたは所有している
    -NbOfProjects=プロジェクトのNb
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=に費や​​された時間は
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=プロジェクトに関連付けられている商用の提案のリスト
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=プロジェクトに関連付けられている契約のリスト
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=プロジェクトに関連付けられている介入のリスト
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=プロジェクトに関連付けられているイベントのリスト
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=貢献者
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=提案
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/ka_GE/admin.lang b/htdocs/langs/ka_GE/admin.lang
    index d7042e784dc..08508d4e6e8 100644
    --- a/htdocs/langs/ka_GE/admin.lang
    +++ b/htdocs/langs/ka_GE/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=Unknown
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/ka_GE/companies.lang b/htdocs/langs/ka_GE/companies.lang
    index b3e1e7b6c86..e5de5614886 100644
    --- a/htdocs/langs/ka_GE/companies.lang
    +++ b/htdocs/langs/ka_GE/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Company
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Closed
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/ka_GE/errors.lang b/htdocs/langs/ka_GE/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/ka_GE/errors.lang
    +++ b/htdocs/langs/ka_GE/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/ka_GE/interventions.lang b/htdocs/langs/ka_GE/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/ka_GE/interventions.lang
    +++ b/htdocs/langs/ka_GE/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/ka_GE/main.lang b/htdocs/langs/ka_GE/main.lang
    index 5d400fafa87..100a249f418 100644
    --- a/htdocs/langs/ka_GE/main.lang
    +++ b/htdocs/langs/ka_GE/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Other
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/ka_GE/other.lang b/htdocs/langs/ka_GE/other.lang
    index 8ef8cc30090..e8cd9b78d2f 100644
    --- a/htdocs/langs/ka_GE/other.lang
    +++ b/htdocs/langs/ka_GE/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/ka_GE/projects.lang b/htdocs/langs/ka_GE/projects.lang
    index e04f28689a1..aadd8b446df 100644
    --- a/htdocs/langs/ka_GE/projects.lang
    +++ b/htdocs/langs/ka_GE/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/km_KH/main.lang b/htdocs/langs/km_KH/main.lang
    index a953187190b..7877dfc26e7 100644
    --- a/htdocs/langs/km_KH/main.lang
    +++ b/htdocs/langs/km_KH/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Other
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=ផ្ទៃតាប្លូរបស់ខ្ញុំ
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/kn_IN/admin.lang b/htdocs/langs/kn_IN/admin.lang
    index 8d5283db076..7614e914567 100644
    --- a/htdocs/langs/kn_IN/admin.lang
    +++ b/htdocs/langs/kn_IN/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=ತಿಳಿದಿಲ್ಲ
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=ಮೂರನೇ ಪಕ್ಷಗಳು
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=ಸ್ಕೈಪ್
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=ರಾಜ್ಯ / ಪ್ರಾಂತ್ಯ
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=ಹೆಸರು
     CompanyAddress=ವಿಳಾಸ
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=ಹೆಸರು
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/kn_IN/companies.lang b/htdocs/langs/kn_IN/companies.lang
    index 1f9681254aa..3ab73f45a1a 100644
    --- a/htdocs/langs/kn_IN/companies.lang
    +++ b/htdocs/langs/kn_IN/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=ಮೂರನೇ ವ್ಯಕ್ತಿಯನ್ನು ಆಯ
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=ಸಂಪರ್ಕ / ವಿಳಾಸವೊಂದನ್ನು ಅಳಿಸಿ.
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=ಹೊಸ ತೃತೀಯ ಪಕ್ಷ
    -MenuNewCustomer=ಹೊಸ ಗ್ರಾಹಕ
    -MenuNewProspect=ಹೊಸ ನಿರೀಕ್ಷಿತರು
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=ಹೊಸ ಖಾಸಗಿ ವ್ಯಕ್ತಿ
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=ತೃತೀಯ ಸಂಪರ್ಕ / ವಿಳಾಸ
     Company=ಸಂಸ್ಥೆ
     CompanyName=ಸಂಸ್ಥೆಯ ಹೆಸರು
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=ಕಂಪನಿಗಳು
    -CountryIsInEEC=ದೇಶವು ಯುರೋಪಿಯನ್ ಎಕನಾಮಿಕ್ ಕಮ್ಯುನಿಟಿಯಲ್ಲಿದೆ
    -ThirdPartyName=ಮೂರನೇ ಪಾರ್ಟಿ ಹೆಸರು
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=ಮೂರನೇ ಪಾರ್ಟಿ
    -ThirdParties=ಮೂರನೇ ಪಕ್ಷಗಳು
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=ನಿರೀಕ್ಷಿತರು
     ThirdPartyProspectsStats=ನಿರೀಕ್ಷಿತರು
     ThirdPartyCustomers=ಗ್ರಾಹಕರು
     ThirdPartyCustomersStats=ಗ್ರಾಹಕರು
     ThirdPartyCustomersWithIdProf12=%s ಅಥವಾ %s ಇರುವ ಗ್ರಾಹಕರು
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=ತೃತೀಯ ಮಾದರಿ
    +ThirdPartyType=Type of company
     Individual=ಖಾಸಗಿ ವ್ಯಕ್ತಿ
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=ಪೋಷಕ ಸಂಸ್ಥೆ
     Subsidiaries=ಅಂಗಸಂಸ್ಥೆಗಳು
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=ಪಿನ್ ಕೋಡ್
     Town=ನಗರ
     Web=ವೆಬ್
     Poste= ಸ್ಥಾನ
    -DefaultLang=ಪೂರ್ವನಿಯೋಜಿತವಾದ ಭಾಷೆ
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=ಸಿಂಟ್ಯಾಕ್ಸ್ ಸರಿಯಿದ್ದಂತಿದೆ
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=ಈ ಗ್ರಾಹಕರಿಗೆ <b>%s%%</b> ರಿ
     CompanyHasNoRelativeDiscount=ಈ ಗ್ರಾಹಕರಿಗೆ ಯಾವುದೇ ಸಾಪೇಕ್ಷ ರಿಯಾಯಿತಿ ಪೂರ್ವನಿಯೋಜಿತವಾಗಿಲ್ಲ
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=ಈ ಗ್ರಾಹಕ ಇನ್ನೂ <b>%s</b>%sರಷ್ಟಕ್ಕೆ ಸಾಲದ ಟಿಪ್ಪಣಿಯನ್ನು ಹೊಂದಿದ್ದಾರೆ.
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=ಯಾವುದೂ ಇಲ್ಲ
    -Supplier=ಪೂರೈಕೆದಾರ
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=ಸಂಪರ್ಕವನ್ನು ತಿದ್ದಿ
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=ಸಂಸ್ಥೆಯೊಂದನ್ನು ತೆಗೆದುಹಾಕಿ
     PersonalInformations=ವೈಯಕ್ತಿಕ ದತ್ತಾಂಶ
     AccountancyCode=Accounting account
    -CustomerCode=ಗ್ರಾಹಕ ಕೋಡ್
    -SupplierCode=Vendor code
    -CustomerCodeShort=ಗ್ರಾಹಕ ಕೋಡ್
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=ಗ್ರಾಹಕ ಕೋಡ್, ಎಲ್ಲಾ ಗ್ರಾಹಕರಿಗೂ ಅನನ್ಯ
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=ತೃತೀಯ ಪಾರ್ಟಿಯು ಗ್ರಾಹಕ ಅಥವಾ ನಿರೀಕ್ಷಿತರಾಗಿದ್ದ ವೇಳೆ ಅಗತ್ಯ
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=ವಾಯಿದೆ ನಿಯಂತ್ರಿತ ಘಟಕ
    -ThisIsModuleRules=ಈ ಘಟಕಕ್ಕೆ ಅನ್ವಯವಾಗುವ ನೇಮಗಳು
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact='ನಿರೀಕ್ಷಿತ'ದಿಂದ 'ಸಂಪರ್ಕ'ಕ್ಕೆ
     CompanyDeleted="%s" ಸಂಸ್ಥೆಯನ್ನು ಡೇಟಾಬೇಸ್-ನಿಂದ ತೆಗೆಯಲಾಗಿದೆ.
     ListOfContacts=ಸಂಪರ್ಕಗಳ / ವಿಳಾಸಗಳ ಪಟ್ಟಿ
     ListOfContactsAddresses=ಸಂಪರ್ಕಗಳ / ವಿಳಾಸಗಳ ಪಟ್ಟಿ
    -ListOfThirdParties=ಮೂರನೇ ಪಕ್ಷಗಳ ಪಟ್ಟಿ
    -ShowCompany=Show third party
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=ಸಂಪರ್ಕವನ್ನು ತೋರಿಸಿ
     ContactsAllShort=ಎಲ್ಲಾ (ಸೋಸಿಲ್ಲದ)
     ContactType=ಸಂಪರ್ಕದ ಮಾದರಿ
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=ಈ ಸಂಪರ್ಕ ಯಾವುದೇ ವಾಣ
     NoContactForAnyContract=ಈ ಸಂಪರ್ಕ ಯಾವುದೇ ಗುತ್ತಿಗೆಯಗಾಗಿ ಅಲ್ಲ.
     NoContactForAnyInvoice=ಈ ಸಂಪರ್ಕ ಯಾವುದೇ ಸರಕುಪಟ್ಟಿಗಾಗಿ ಅಲ್ಲ.
     NewContact=ಹೊಸ ಸಂಪರ್ಕ
    -NewContactAddress=ಹೊಸ ಸಂಪರ್ಕ / ವಿಳಾಸ
    +NewContactAddress=New Contact/Address
     MyContacts=ನನ್ನ ಸಂಪರ್ಕಗಳು
     Capital=ರಾಜಧಾನಿ
     CapitalOf=%s ಕ್ಯಾಪಿಟಲ್
     EditCompany=ಸಂಸ್ಥೆಯನ್ನು ತಿದ್ದಿ
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=ಪರಿಶೀಲಿಸಿ
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=ನಿರೆಕ್ಷಿತರೂ ಅಲ್ಲ, ಗ್ರಾಹಕರೂ ಅಲ್ಲ.
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=ನೌಕರರು
     ProspectLevelShort=ಸಂಭವನೀಯ
     ProspectLevel=ಸಂಭಾವ್ಯ ನಿರೀಕ್ಷಿತರು
    @@ -387,12 +387,12 @@ ExportCardToFormat=ಕಾರ್ಡನ್ನು ಸ್ವರೂಪಕ್ಕೆ 
     ContactNotLinkedToCompany=ಸಂಪರ್ಕವು ಯಾವುದೇ ಮೂರನೇ ಪಾರ್ಟಿಗೆ ಕೂಡಿಸಲ್ಪಟ್ಟಿಲ್ಲ.
     DolibarrLogin=ಲಾಗಿನ್ ಆಗಿ
     NoDolibarrAccess=ಪ್ರವೇಶವಿಲ್ಲ
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=ಸಂಪರ್ಕಗಳು ಮತ್ತು ವಿವರಗಳು
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=ಬೆಲೆ ಮಟ್ಟ
     DeliveryAddress=ತಲುಪಿಸುವ ವಿಳಾಸ
     AddAddress=ವಿಳಾಸ ಸೇರಿಸಿ
    @@ -402,16 +402,16 @@ DeleteFile=ಫೈಲ್ ತೆಗೆಯಿರಿ
     ConfirmDeleteFile=ನೀವು ಈ ಫೈಲ್ಅನ್ನು ಖಂಡಿತವಾಗಿಯೂ ಶಾಶ್ವವವಾಗಿ ತೆಗೆದುಹಾಕಲು ಬಯಸುತ್ತೀರಾ?
     AllocateCommercial=Assigned to sales representative
     Organization=ಸಂಘಟನೆ
    -FiscalYearInformation=ಹಣಕಾಸಿನ ವರ್ಷದ ಮಾಹಿತಿ
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=ಆರ್ಥಿಕ ವರ್ಷಾರಂಭದ ತಿಂಗಳು
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=ನಿರೀಕ್ಷಿತರ ಪಟ್ಟಿ
    -ListCustomersShort=ಗ್ರಾಹಕರ ಪಟ್ಟಿ
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=ಒಟ್ಟು ಅನನ್ಯ ಮೂರನೇ ಪಾರ್ಟಿಗಳು
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=ತೆರೆಯಲಾಗಿದೆ
     ActivityCeased=ಮುಚ್ಚಲಾಗಿದೆ
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=ಪ್ರಸ್ತುತ ಬಾಕಿ ಉಳಿದಿರ
     OutstandingBill=ಗರಿಷ್ಟ ಬಾಕಿ ಉಳಿದಿರುವ ಬಿಲ್ ಮೊತ್ತ
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=ಕೋಡ್ ಉಚಿತ. ಈ ಕೋಡ್ ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಮಾರ್ಪಡಿಸಬಹುದಾಗಿದೆ.
     ManagingDirectors=ಮ್ಯಾನೇಜರ್ (ಗಳು) ಹೆಸರು (ಸಿಇಒ, ನಿರ್ದೇಶಕ, ಅಧ್ಯಕ್ಷ ...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/kn_IN/errors.lang b/htdocs/langs/kn_IN/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/kn_IN/errors.lang
    +++ b/htdocs/langs/kn_IN/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/kn_IN/interventions.lang b/htdocs/langs/kn_IN/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/kn_IN/interventions.lang
    +++ b/htdocs/langs/kn_IN/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/kn_IN/main.lang b/htdocs/langs/kn_IN/main.lang
    index 645a6cc0c80..e1165452ff3 100644
    --- a/htdocs/langs/kn_IN/main.lang
    +++ b/htdocs/langs/kn_IN/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=ಮುಚ್ಚಲಾಗಿದೆ
     Closed2=ಮುಚ್ಚಲಾಗಿದೆ
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=ಇತರ
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=ಯಾವುದೂ ಇಲ್ಲ
     NoneF=ಯಾವುದೂ ಇಲ್ಲ
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=ಕಾಣುವಂತಿರುವಿಕೆ
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=ಖಾಸಗಿ
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/kn_IN/other.lang b/htdocs/langs/kn_IN/other.lang
    index aef1b316de5..ba9958da1e5 100644
    --- a/htdocs/langs/kn_IN/other.lang
    +++ b/htdocs/langs/kn_IN/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/kn_IN/projects.lang b/htdocs/langs/kn_IN/projects.lang
    index e04f28689a1..aadd8b446df 100644
    --- a/htdocs/langs/kn_IN/projects.lang
    +++ b/htdocs/langs/kn_IN/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/ko_KR/admin.lang b/htdocs/langs/ko_KR/admin.lang
    index e384bc964de..68b7f3d0f6c 100644
    --- a/htdocs/langs/ko_KR/admin.lang
    +++ b/htdocs/langs/ko_KR/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=개발
     VersionUnknown=알 수 없음
     VersionRecommanded=권장
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=세션저장구동기
     SessionSavePath=저장세션로컬라이제이션
     PurgeSessions=세션제거
     ConfirmPurgeSessions=모든 세션을 제거하겠습니까? (당신을 제외한) 모든 다른 사용자의 연결이 중단됩니다. 
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=외부사용자
     InternalUsers=내부사용자\n
     ExternalUsers=외부사용자
     GUISetup=화면
    -SetupArea=설정지역
    +SetupArea=설정
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=파일업로드테스트용 양식
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=공간
     Table=테이블
     Fields=필드
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=설정
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=신규
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=링크
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=암호
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=제 3 자
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=상업용
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=제안
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=회원
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=경비 보고서
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=분류/범주
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=자원
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=시 /도
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=율
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=이름
     CompanyAddress=주소
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=알리미
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=이름
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/ko_KR/companies.lang b/htdocs/langs/ko_KR/companies.lang
    index 7cfa1fda455..4c814a49ea5 100644
    --- a/htdocs/langs/ko_KR/companies.lang
    +++ b/htdocs/langs/ko_KR/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=협력업체 선택
     ConfirmDeleteCompany=이 회사와 관련된 모든 정보를 삭제 하시겠습니까?
     DeleteContact=연락처 / 주소 삭제
     ConfirmDeleteContact=이 연락처와 관련된 모든 정보를 삭제 하시겠습니까?
    -MenuNewThirdParty=신규 협력업체
    -MenuNewCustomer=신규 고객
    -MenuNewProspect=신규 잠재고객
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=신규 개인
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=협력업체 생성
     CreateThirdPartyAndContact=협력업체 + 신생 연락처 만들기
    @@ -25,22 +25,22 @@ ThirdPartyContact=협력업체 연락처 / 주소
     Company=회사
     CompanyName=회사 이름
     AliasNames=별칭 (상업용, 상표권 ...)
    -AliasNameShort=별칭 이름
    +AliasNameShort=Alias Name
     Companies=회사
    -CountryIsInEEC=유럽 경제 공동체 내부에 있는 국가
    -ThirdPartyName=협력업체 이름
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=협력업체
    -ThirdParties=협력업체
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=잠재고객
     ThirdPartyProspectsStats=잠재고객
     ThirdPartyCustomers=고객
     ThirdPartyCustomersStats=고객
     ThirdPartyCustomersWithIdProf12=%s 또는 %s이 있는 고객
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=협력업체 유형
    +ThirdPartyType=Type of company
     Individual=개인
    -ToCreateContactWithSameName=협력업체와 동일한 정보로 연락처 / 주소를 자동으로 생성합니다. 대부분의 경우, 협력업체가 물리적인 사람 일지라도 협력업체를 독립적으로 생성 가능합니다.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=모회사
     Subsidiaries=자회사
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=우편 번호
     Town=시
     Web=웹
     Poste= 직위
    -DefaultLang=기본 언어
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=주소를 협력업체 주소로 입력하십시오.
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=지불 은행 계좌
     OverAllProposals=제안
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=유효한 구문입니다.
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=이 고객은 기본 할인인이 <b>%s%%</b> 입니
     CompanyHasNoRelativeDiscount=이 고객은 기본적으로 상대적 할인이 없습니다.
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=이 고객은 <b>%s</b> %s 의 할인 가능한(크레딧 노트 또는 계약금)이 있습니다.
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=이 고객은  <b>%s</b> %s 의 상대적 할인이 있습니다.
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=없음
    -Supplier=공급자
    +Supplier=Vendor
     AddContact=연락처 생성
     AddContactAddress=연락처 / 주소 생성
     EditContact=연락처 편집
    @@ -303,22 +303,22 @@ AddThirdParty=협력업체 생성
     DeleteACompany=회사 삭제
     PersonalInformations=개인 정보
     AccountancyCode=회계 계정
    -CustomerCode=고객 코드
    -SupplierCode=Vendor code
    -CustomerCodeShort=고객 코드
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=모든 고객 내 고유의 고객 코드
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=협력업체가 고객 또는 잠재 고객 인 경우 필요
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=모듈별로 유효성 제어
    -ThisIsModuleRules=이 모듈에 대한 규칙입니다.
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=잠재거래처 연락처
     CompanyDeleted=회사 "%s"이 (가) 데이터베이스에서 삭제되었습니다.
     ListOfContacts=연락처 / 주소 목록
    -ListOfContactsAddresses=연락처 / 주소 목록
    -ListOfThirdParties=협력업체 목록
    -ShowCompany=협력업체 표시
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=연락처 표시
     ContactsAllShort=모두 (필터 없음)
     ContactType=연락처 유형
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=이 연락처는 상업적 제안에 대한 연락처가
     NoContactForAnyContract=이 연락처는 어떤 계약의 연락처도 아닙니다.
     NoContactForAnyInvoice=이 연락처는 송장의 연락처가 아닙니다.
     NewContact=신규 연락처
    -NewContactAddress=신규 연락처 / 주소
    +NewContactAddress=New Contact/Address
     MyContacts=내 연락처
     Capital=자본
     CapitalOf=자본금 %s
     EditCompany=회사 편집
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=검사
    -VATIntraCheckDesc=링크 <b>%s</b> 는 유럽 VAT 검사 서비스에 문의할 수 있습니다. 이 서비스가 작동하려면 서버에서 외부 인터넷에 접속해야 합니다.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=유럽 ​​의회 사이트에서 사내 부가 가치세를 확인하십시오
    -VATIntraManualCheck=유럽 ​​웹 사이트 <a href="%s" target="_blank"> %s </a>에서 수동으로 확인할 수도 있습니다.
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=확인할 수 없습니다. 수표 서비스는 회원 국가에서 제공하지 않습니다 (%s).
    -NorProspectNorCustomer=잠재 고객이나 고객이 아닙니다.
    -JuridicalStatus=법적인 형식
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=직원
     ProspectLevelShort=가능성
     ProspectLevel=미래 잠재고객
    @@ -387,12 +387,12 @@ ExportCardToFormat=포맷으로 카드 내보내기
     ContactNotLinkedToCompany=협력업체와 연결되지 않은 연락처
     DolibarrLogin=Dolibarr 로그인
     NoDolibarrAccess=Dolibarr 접속 불가
    -ExportDataset_company_1=협력업체 (회사 / 재단 / 물리적 사람) 및 부동산
    -ExportDataset_company_2=연락처 및 속성
    -ImportDataset_company_1=협력업체 (회사 / 재단 / 물리적 사람) 및 부동산
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=가격 수준
     DeliveryAddress=배달 주소
     AddAddress=주소 추가
    @@ -402,16 +402,16 @@ DeleteFile=파일 삭제
     ConfirmDeleteFile=이 파일을 정말로 삭제 하시겠습니까?
     AllocateCommercial=영업 담당자에게 할당 됨
     Organization=조직
    -FiscalYearInformation=회계 연도에 대한 정보
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=회계 연도의 시작 달
    -YouMustAssignUserMailFirst=이 사용자에 대한 전자 메일을 먼저 만들어야 전자 메일 알림을 추가 할 수 있습니다.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=전자 메일 알림을 추가하려면 먼저 협력업체에 유효한 전자 메일이있는 연락처를 정의해야합니다
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=잠재 고객 목록
    -ListCustomersShort=고객 명단
    -ThirdPartiesArea=협력업체 및 연락처
    -LastModifiedThirdParties=최근 %s 수정 된 협력업체
    -UniqueThirdParties=각 협력업체 합계
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=열기
     ActivityCeased=닫음
     ThirdPartyIsClosed=협력업체 폐쇄 됨
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=현재 미결제 금액
     OutstandingBill=미결 한도
     OutstandingBillReached=미결 한도 금액 도달
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=코드는 무료입니다. 이 코드는 언제든지 수정할 수 있습니다.
     ManagingDirectors=관리자 이름 (CEO, 이사, 사장 ...)
     MergeOriginThirdparty=중복 된 협력업체 (삭제하려는 협력업체)
     MergeThirdparties=협력업체 병합
    -ConfirmMergeThirdparties=이 협력업체를 현재의 협력업체의 하나로 병합 하시겠습니까? 모든 링크 된 오브젝트 (송장, 주문 ...)는 현재 협력업체로 이동 한 후 협력업체가 삭제됩니다.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=영업 담당자 로그인
     SaleRepresentativeFirstname=영업 담당자의 이름
     SaleRepresentativeLastname=영업 대표자 성
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/ko_KR/errors.lang b/htdocs/langs/ko_KR/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/ko_KR/errors.lang
    +++ b/htdocs/langs/ko_KR/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/ko_KR/interventions.lang b/htdocs/langs/ko_KR/interventions.lang
    index b446460d449..4e8c7975bdf 100644
    --- a/htdocs/langs/ko_KR/interventions.lang
    +++ b/htdocs/langs/ko_KR/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=중재
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/ko_KR/main.lang b/htdocs/langs/ko_KR/main.lang
    index 8f4c9c66cda..08503bb515d 100644
    --- a/htdocs/langs/ko_KR/main.lang
    +++ b/htdocs/langs/ko_KR/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=메일을 보내는 데 실패했습니다 (전송인=%s,
     ErrorFileNotUploaded=파일을 업로드할 수 없습니다. 파일 크기가 최대 허용량을 초과하지 않고, 디스크 내 충분한 저장 공간이 남아 있으며 또한 디렉토리에 같은 이름의 파일이 없는지를 확인하세요.
     ErrorInternalErrorDetected=오류 발견됨
     ErrorWrongHostParameter=잘못된 호스트 매개변수
    -ErrorYourCountryIsNotDefined=정의된 국가가 없습니다. 홈-설정-편집으로 가서 양식을 다시 게시하세요.
    -ErrorRecordIsUsedByChild=레코드를 삭제할 수 없습니다. 적어도 하나의 자식 레코드가 사용하고 있습니다.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=잘못된 값
     ErrorWrongValueForParameterX=%s 매개변수의 잘못된 값
     ErrorNoRequestInError=오류 요청이 없음
    -ErrorServiceUnavailableTryLater=현재 서비스를 이용할 수 없습니다. 나중에 시도하세요.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=고유한 필드에 중복된 값
    -ErrorSomeErrorWereFoundRollbackIsDone=오류가 있습니다. 변경을 하지 않습니다.
    -ErrorConfigParameterNotDefined=<b>%s</b> 매개변수를 Dolibarr 설정 파일 <b>conf.php</b> 내에서 지정할 수 없습니다.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Dolibarr 데이타베이스에서 <b>%s</b>유저를 찾을 수 없습니다.
     ErrorNoVATRateDefinedForSellerCountry=오류, '%s' 국가의 부가세율이 정의되지 않았습니다.
     ErrorNoSocialContributionForSellerCountry=오류, 국가 '%s'에 대해 정의 된 사회 / 재정 세금 유형이 없습니다.
     ErrorFailedToSaveFile=오류, 파일을 저장할 수 없습니다.
    -ErrorCannotAddThisParentWarehouse=이미 현재 사용중인 상위 창고를 추가하려고합니다.
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=귀하는 할 수있는 권한이 없습니다.
     SetDate=날짜 설정
     SelectDate=날짜 선택
    @@ -78,10 +78,10 @@ FileRenamed=파일 이름이 재명명 되었습니다.
     FileGenerated=파일이 성공적으로 생성되었습니다.
     FileSaved=파일이 성공적으로 저장되었습니다.
     FileUploaded=파일이 성공적으로 업로드 되었습니다.
    -FileTransferComplete=파일을 성공적으로 업로드했습니다.
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=파일이 성공적으로 삭제되었습니다.
     FileWasNotUploaded=첨부할 파일을 선택했지만 바로 업로드할 수는 없습니다. 업로드하려면 "파일 첨부"를 클릭하십시오.
    -NbOfEntries=엔트리 수
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=온라인 도움말 읽기 (인터넷 액세스 필요)
     GoToHelpPage=도움말 읽기
     RecordSaved=저장 레코드
    @@ -94,7 +94,7 @@ Undefined=정의되지 않음
     PasswordForgotten=암호를 잊어 버리셨습니까?
     NoAccount=No account?
     SeeAbove=상위 보기
    -HomeArea=홈 영역
    +HomeArea=홈
     LastConnexion=최근 연결
     PreviousConnexion=이전 연결
     PreviousValue=이전 값
    @@ -142,6 +142,7 @@ Closed=닫혔음
     Closed2=닫혔음
     NotClosed=마감되지 않음
     Enabled=사용
    +Enable=Enable
     Deprecated=사용 금지
     Disable=사용 안함
     Disabled=불용 상태
    @@ -153,7 +154,7 @@ Update=갱신
     Close=닫기
     CloseBox=대시 보드에서 위젯 제거
     Confirm=확인
    -ConfirmSendCardByMail=이 카드 내용을 정말로 <b>%s</b>이메일로 보내시겠습니까? 
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=삭제
     Remove=제거
     Resiliate=끝내기
    @@ -327,7 +328,7 @@ Copy=복사
     Paste=붙여넣기
     Default=생략시
     DefaultValue=생략값
    -DefaultValues=기본값
    +DefaultValues=Default values/filters/sorting
     Price=가격
     PriceCurrency=Price (currency)
     UnitPrice=단가
    @@ -347,7 +348,7 @@ AmountTTCShort=금액 (세금 포함)
     AmountHT=금액 (세금 별도)
     AmountTTC=금액 (세금 포함)
     AmountVAT=세액
    -MulticurrencyAlreadyPaid=이미 지불 된 원래 통화
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=원래 통화로 지불해야합니다.
     MulticurrencyPaymentAmount=지불 금액, 원래 통화
     MulticurrencyAmountHT=금액 (세금 별도), 원화
    @@ -428,7 +429,7 @@ ActionNotApplicable=해당 사항 없음
     ActionRunningNotStarted=착수 함
     ActionRunningShort=진행 중
     ActionDoneShort=끝 마침
    -ActionUncomplete=완료되지 않음
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=작성
     Duration=기간
     TotalDuration=총기간
     Summary=요약
    -DolibarrStateBoard=데이터베이스 통계
    -DolibarrWorkBoard=미결 항목 대시 보드
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=처리 할 열 요소가 없습니다.
     Available=가능
     NotYetAvailable=아직 가능 못함
    @@ -468,7 +469,7 @@ and=그리고
     or=또는
     Other=기타
     Others=기타
    -OtherInformations=기타 정보
    +OtherInformations=Other information
     Quantity=수량
     Qty=수량
     ChangedBy=변경자
    @@ -506,7 +507,7 @@ None=없음
     NoneF=없음
     NoneOrSeveral=없음 또는 여러 개
     Late=늦은
    -LateDesc=레코드가 늦었는지 아닌지를 정의하는 지연은 설정에 따라 다릅니다. 관리자에게 홈 - 셋업 - 경고 메뉴에서 지연을 변경하도록 요청하십시오.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=사진
     Photos=사진
    @@ -530,18 +531,6 @@ September=9월
     October=10월
     November=11월
     December=12 월
    -JanuaryMin=1월
    -FebruaryMin=2월
    -MarchMin=3월
    -AprilMin=4월
    -MayMin=5월
    -JuneMin=6월
    -JulyMin=7월
    -AugustMin=8월
    -SeptemberMin=9월
    -OctoberMin=10월
    -NovemberMin=11월
    -DecemberMin=12월
     Month01=1월
     Month02=2월
     Month03=3월
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=이메일
     NoEMail=이메일 없음
     Email=이메일
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=휴대 전화 없음
     Owner=소유자
     FollowingConstantsWillBeSubstituted=다음 상수는 해당 값으로 바뀝니다.
    @@ -677,7 +668,7 @@ NeverReceived=수령 못함
     Canceled=취소 됨
     YouCanChangeValuesForThisListFromDictionarySetup=이 목록의 값은 설정 - 딕셔너리 메뉴에서 변경할 수 있습니다
     YouCanChangeValuesForThisListFrom=메뉴에서이 목록의 값을 변경할 수 있습니다 %s
    -YouCanSetDefaultValueInModuleSetup=모듈 설정으로 새 레코드를 만들 때 사용되는 기본값을 설정할 수 있습니다
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=색상
     Documents=링크 된 파일
     Documents2=문서
    @@ -703,7 +694,7 @@ DateOfSignature=서명 날짜
     HidePassword=암호가 숨겨진 명령 표시
     UnHidePassword=명확한 암호로 실제 명령 표시
     Root=루트
    -Informations=정보
    +Informations=Information
     Page=페이지
     Notes=노트
     AddNewLine=새 줄 추가
    @@ -716,15 +707,15 @@ Merge=병합
     DocumentModelStandardPDF=표준 PDF 템플릿
     PrintContentArea=주요 컨텐츠 영역 인쇄 페이지 표시
     MenuManager=메뉴 관리자
    -WarningYouAreInMaintenanceMode=경고, 지금 유지 보수 모드이므로 로그인 시 <b>%s</b> 적용업무를 사용 할 때만 허용됩니다.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=시스템 오류
     CoreErrorMessage=죄송합니다. 오류가 발생했습니다. 자세한 정보를 얻으려면 시스템 관리자에게 로그를 확인하거나 $ dolibarr_main_prod = 1을 비활성화하십시오.
     CreditCard=신용 카드
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=<b>%s</b> 이 있는 필드는 반드시 입력해야 합니다.
    -FieldsWithIsForPublic=<b>%s</b> 이 (가) 있는 입력란은 공개 회원 목록에 표시됩니다. 이 기능을 사용하지 않으려면 "공용"상자를 선택하십시오.
    -AccordingToGeoIPDatabase=(GeoIP 변환에 따름)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=라인
     NotSupported=지원되지 않음
     RequiredField=필수 입력란
    @@ -732,6 +723,8 @@ Result=결과
     ToTest=테스트
     ValidateBefore=이 기능을 사용하려면 먼저 카드 유효성을 검사해야합니다.
     Visibility=시각성
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=사설
     Hidden=히든
     Resources=자원
    @@ -750,6 +743,7 @@ LinkTo=다음으로 연결
     LinkToProposal=제안서 링크
     LinkToOrder=주문 링크
     LinkToInvoice=송장 링크
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=공급자 주문 링크
     LinkToSupplierProposal=공급 업체 제안 링크
     LinkToSupplierInvoice=공급 업체 송장 링크
    @@ -758,6 +752,7 @@ LinkToIntervention=중재에 연결
     CreateDraft=초안 작성
     SetToDraft=초안으로 돌아 가기
     ClickToEdit=편집하려면 클릭하십시오.
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=일별
     BySalesRepresentative=영업 담당자 별
     LinkedToSpecificUsers=특정 사용자 연락처에 연결됨
     NoResults=결과 없음
    -AdminTools=관리자 도구
    +AdminTools=Admin Tools
     SystemTools=시스템 도구
     ModulesSystemTools=모듈 도구
     Test=테스트
     Element=요소
     NoPhotoYet=아직 사용할 수있는 사진이 없습니다.
     Dashboard=대시보드
    -MyDashboard=내 대시 보드
    +MyDashboard=My Dashboard
     Deductible=공제액
     from=부터
     toward=...쪽으로
    @@ -802,7 +797,7 @@ PrintFile=인쇄 파일 %s
     ShowTransaction=은행 계좌의 항목 표시
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=로고를 변경하거나 표시를 숨길려면 홈 - 설정 - 회사로 갑니다.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=기각
     Denied=기각됨
     ListOf=%s 목록
    @@ -818,12 +813,12 @@ Sincerely=친애하는
     DeleteLine=행 삭제
     ConfirmDeleteLine=이 행을 삭제 하시겠습니까?
     NoPDFAvailableForDocGenAmongChecked=확인 된 레코드 중 문서 생성에 사용할 수있는 PDF가 없습니다.
    -TooManyRecordForMassAction=대량 작업을 위해 선택된 레코드가 너무 많습니다. 작업은 %s 레코드 목록으로 제한됩니다.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=선택한 레코드가 없습니다.
     MassFilesArea=대량 작업으로 만들어진 파일 영역
     ShowTempMassFilesArea=대량 작업으로 작성된 파일의 영역 표시
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=관련 개체
     ClassifyBilled=청구서 분류
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=달력
     GroupBy=그룹화 ...
     ViewFlatList=평면 목록보기
     RemoveString='%s'문자열을 제거하십시오.
    -SomeTranslationAreUncomplete=일부 언어는 부분적으로 번역되거나 오류가있을 수 있습니다. 일부 파일을 발견하면 <a href="https://transifex.com/projects/p/dolibarr/" target="_blank"> https://transifex.com/projects/p/에 등록하는 언어 파일을 수정할 수 있습니다. dolibarr / </a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=다운로드
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR 및 은행
     AutomaticallyCalculated=자동 계산 됨
     TitleSetToDraft=초안으로 돌아 가기
    -ConfirmSetToDraft=초안 상태로 돌아가시겠습니까?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=이벤트
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=프로젝트
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=월요일
     Tuesday=화요일
    @@ -927,15 +931,15 @@ SearchIntoInterventions=중재
     SearchIntoContracts=계약서
     SearchIntoCustomerShipments=고객 출하
     SearchIntoExpenseReports=경비 보고서
    -SearchIntoLeaves=떠나기
    +SearchIntoLeaves=Leave
     CommentLink=주석
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/ko_KR/other.lang b/htdocs/langs/ko_KR/other.lang
    index 03852604b66..4c7b15096e1 100644
    --- a/htdocs/langs/ko_KR/other.lang
    +++ b/htdocs/langs/ko_KR/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/ko_KR/projects.lang b/htdocs/langs/ko_KR/projects.lang
    index 14371222e90..53fa214f0b8 100644
    --- a/htdocs/langs/ko_KR/projects.lang
    +++ b/htdocs/langs/ko_KR/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=관련 항목
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/lo_LA/admin.lang b/htdocs/langs/lo_LA/admin.lang
    index e64fb7c41b5..a9672281edb 100644
    --- a/htdocs/langs/lo_LA/admin.lang
    +++ b/htdocs/langs/lo_LA/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=Unknown
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=ບັນ​ຊີ
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=ຊື່
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=​ໂຕ​ຕັ້ງ​ຄ່າ​ທັງ​ໝົດ
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=ຊື່
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/lo_LA/companies.lang b/htdocs/langs/lo_LA/companies.lang
    index b22eadb4aae..7f552e8ccdd 100644
    --- a/htdocs/langs/lo_LA/companies.lang
    +++ b/htdocs/langs/lo_LA/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Company
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Closed
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/lo_LA/errors.lang b/htdocs/langs/lo_LA/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/lo_LA/errors.lang
    +++ b/htdocs/langs/lo_LA/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/lo_LA/interventions.lang b/htdocs/langs/lo_LA/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/lo_LA/interventions.lang
    +++ b/htdocs/langs/lo_LA/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/lo_LA/main.lang b/htdocs/langs/lo_LA/main.lang
    index f456d3566c1..6a538fa0b5a 100644
    --- a/htdocs/langs/lo_LA/main.lang
    +++ b/htdocs/langs/lo_LA/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=ປິດການນຳໃຊ້
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=ປັບປຸງ
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=ລຶບ
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Other
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=ການອະນຸຍາດ
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/lo_LA/other.lang b/htdocs/langs/lo_LA/other.lang
    index a37d0058334..9530df0a502 100644
    --- a/htdocs/langs/lo_LA/other.lang
    +++ b/htdocs/langs/lo_LA/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=ເຄື່ອງມື
     TMenuTools=ເຄື່ອງມື
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/lo_LA/projects.lang b/htdocs/langs/lo_LA/projects.lang
    index c1e25abe41f..42e374dacf6 100644
    --- a/htdocs/langs/lo_LA/projects.lang
    +++ b/htdocs/langs/lo_LA/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/lt_LT/admin.lang b/htdocs/langs/lt_LT/admin.lang
    index 8ad0f313fae..10a2c81b6b5 100644
    --- a/htdocs/langs/lt_LT/admin.lang
    +++ b/htdocs/langs/lt_LT/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Plėtojimas
     VersionUnknown=Nežinomas
     VersionRecommanded=Rekomenduojamas
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Vedlys, sesijai išsaugoti
     SessionSavePath=Talpinimo sesijos lokalizavimas
     PurgeSessions=Sesijų išvalymas
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Sesijų išsaugojimo manipuliatoriaus PHP nustatymai neleidžia sudaryti visų vykdomų sesijų sąrašo.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Užrakinti naujus prisijungimus
    -ConfirmLockNewSessions=Ar tikrai norite apriboti bet kokius naujus Dolibarr prisijungimus prie programos. Atlikus pakeitimus tik vartotojas <b>%s</b> turės galimybę prisijungti.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Pašalinti prisijungimų užraktą
     YourSession=Jūsų sesija
    -Sessions=Naudotojo sesija
    +Sessions=Users sessions
     WebUserGroup=Tinklo serverio naudotojas/grupė
    -NoSessionFound=Regis jūsų PHP neleidžia sudaryti aktyvių sesijų sąrašo. Katalogas naudojamas sesijų išsaugojimui (<b>%s</b>) gali būti apsaugotas (Pavyzdžiui su OS leidimais arba PHP direktyva open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Duomenų bazės simbolių rinkinys duomenų talpinimui
     DBSortingCharset=Duomenų bazės simbolių rinkinys duomenų rūšiavimui
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Išorinis naudotojas
     InternalUsers=Vidiniai naudotojai
     ExternalUsers=Išoriniai naudotojai
     GUISetup=Atvaizdavimas
    -SetupArea=Paruošimo sritis
    +SetupArea=Nustatymai
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Failo-testo įkėlimo forma (pagal nustatymus)
     IfModuleEnabled=Pastaba: Patvirtinimas yra efektyvus tik, kai modulis <b>%s</b> yra aktyvus
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kode negali būti vertės 0
     DisableJavascript=Išjungti JavaScript ir Ajax funkcijas (Rekomenduojama aklam žmogui ar teksto naršyklėms)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Paieškai paleisti reikalingas simbolių skaičius: %s
     NotAvailableWhenAjaxDisabled=Neprieinamas, Ajax esant išjungtam
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Apžiūra negalima
     ThemeCurrentlyActive=Tema yra veikli
     CurrentTimeZone=Laiko juostos PHP (serveris)
     MySQLTimeZone=TimeZone MySQL (duomenų bazės)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Erdvė
     Table=Lentelė
     Fields=Laukai
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Aktyvus
     SetupShort=Nustatymai
     OtherOptions=Kitos parinktys
    -OtherSetup=Kiti nustatymai
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Dešimtainis skyriklis
     CurrentValueSeparatorThousand=Tūkstančių skyriklis
     Destination=Paskirties vieta
     IdModule=Modulio ID
     IdPermissions=Leidimų ID
     LanguageBrowserParameter=Parametro %-as
    -LocalisationDolibarrParameters=Vietos parametrai
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Kliento Laiko Juosta (vartotojas)
     ClientHour=Kliento laikas (vartotojas)
     OSTZ=Serverio OS laiko zona
    @@ -126,8 +126,8 @@ PHPTZ=PHP serverio Laiko Juosta
     DaylingSavingTime=Vasaros laikas
     CurrentHour=PHP serverio laikas 
     CurrentSessionTimeOut=Einamosios sesijos pertrauka
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Automatinis aptikimas (naršyklės kalba)
     FeatureDisabledInDemo=Funkcija išjungta demo versijoje
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Rodomi tik elementai iš <a href="%s">leidžiami moduliai</a>.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Naujas
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, oficiali Dolibarr ERP / CRM išorinių modulių parduotuvė
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Nuoroda
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Nesaugokite aiškių slaptažodžių duomenų bazėje, l
     MainDbPasswordFileConfEncrypted=Duomenų bazės slaptažodis užšifruotas conf.php (Activated recomended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Generuojamų PDF failų apsauga (Activated NOT recomended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Savybė
     DolibarrLicense=Licencija
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=Vartotojo arba kūrėjo dokumentacijos (doc, DUK ...) <br> ieškoti Dolibarr Wiki: <br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Dėl kitų klausimų/pagalbos galite kreiptis į Dolibarr forumą: <br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Ši sritis gali padėti jums gauti Dolibarr Help žinyno palaikymo paslaugą
    -HelpCenterDesc2=Dalis šios paslaugos prieinama <b>tik anglų kalba.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Dabartinis meniu prižiūrėtojas
     MeasuringUnit=Matavimo vienetas
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/MTPS jungtis (port) (pagal nutylėjimą php.ini: <b>%s)</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS host (pagal nutylėjimą php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS jungtis (port) (neapibrėžtas PHP Unix tipo sistemose)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS host (neapibrėžtas PHP Unix tipo sistemose)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Sistemingai siųsti visų išsiųstų laiškų paslėptas kopijas BCC į 
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=El. pašto siuntimui naudoti metodą
    -MAIN_MAIL_SMTPS_ID=SMTP ID, jei reikalingas autentiškumo patvirtinimas
    -MAIN_MAIL_SMTPS_PW=SMTP slaptažodis, jei reikalingas autentiškumo patvirtinimas
    -MAIN_MAIL_EMAIL_TLS= Užšifravimui naudoti TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Išjungti visus SMS siuntimus (bandymo ar demo tikslais)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=SMS siuntimui naudoti metodą
    -MAIN_MAIL_SMS_FROM=SMS siuntimui naudojamas siuntėjo telefono numeris pagal nutylėjimą
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Funkcija negalima Unix tipo sistemose. Patikrinti el. pašto siuntimo vietinę programą.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Modulio nuostatos
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Nenaudoti gamyboje
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Žingsnis %s
    -FindPackageFromWebSite=Ieškoti paketo, kuris suteikia norimą funkciją (pavyzdžiui oficialioje interneto svetainėje %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr dabartinė versija
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Tarpinės atminties (cache) eksporto reakcijos vėlinimas sekundėmis (0 arba tuščia, kai nėra tarpinės atminties)
     DisableLinkToHelpCenter=Paslėpti nuorodą "<b>"Reikia pagalbos ar techninio palaikymo</b>" prisijungimo prie Dolibarr puslapyje
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=Nėra automatinio eilutės perkėlimo. Todėl jei eilutė netelpa puslapyje, turite pridėti tekste perkėlimo simbolį.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimalus ilgis
     LanguageFilesCachedIntoShmopSharedMemory=Failai .lang pakrauti į bendro naudojimo atmintį
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Pavyzdžiai su dabartiniais nustatymais
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=OpenDocument šablonų katalogų sąrašas
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=ODT/ODS šablonų failų rastų šiuose kataloguose skaičius
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Pavyzdys: <br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>Norėdami sužinoti, kaip sukurti savo odt dokumentų šablonus, prieš išsaugant juos šiuose kataloguose, paskaityti Wiki dokumentus:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Pagrindiniai Web Services raktai (parameter "dolibarrkey
     TestSubmitForm=Įvedimo testo forma
     ThisForceAlsoTheme=Naudojant šį meniu valdiklį taip pat naudokite temą pagal savo pasirinkimą. Taip pat šis meniu valdiklis specializuotas išmaniesiems telefonams veikia ne su visais telefonais. Naudokite kitą meniu valdiklį, jei turite problemų su šiuo.
     ThemeDir=Vaizdinių stilių (skins) katalogas
    -ConnectionTimeout=Sujungimo pauzė
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Reakcijos pauzė
     SmsTestMessage=Testinė žinutė iš __PHONEFROM__ į __ PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=URL apsaugos raktai
    -NoSmsEngine=SMS siuntėjo vadovas neprieinamas. SMS siuntėjo vadovas nėra įdiegtas pagal nutylėjimą (nes jie priklauso nuo išorinio tiekėjo), bet jūs galite jį rasti %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Galite nustatyti kiekvieną bendrą opciją, susijusią su PDF generavimu
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Adresų dėžutės sudarymo taisyklės
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Generuojamuose PDF paslėpti produktų aprašymus
     HideRefOnPDF=Generuojamuose PDF paslėpti produktų referencijas
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=URL apsaugos parametrai
     SecurityTokenIsUnique=Kiekvienam URL naudokite unikalų apsaugos rakto parametrą
     EnterRefToBuildUrl=Įveskite nuorodą objektui %s
     GetSecuredUrl=Gauti apskaičiuotą URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Senas PVM tarifas
     NewVATRates=Naujas PVM tarifas
     PriceBaseTypeToChange=Modifikuoti kainas su apibrėžta bazinės vertės nuoroda
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Pasirinkti sąrašą
     ExtrafieldSelectList = Pasirinkite iš lentelės
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Slaptažodis
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Nuoroda į objektą,
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Nustatytoji nuoroda
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Įspėjimas, ši reikšmė gali būti perrašyta pagal vartotojo specifines nuostatas (kiekvienas vartotojas gali nustatyti savo clicktodial URL)
     ExternalModule=Išorinis modulis - Įdiegtas kataloge %s
    -BarcodeInitForThirdparties=Masinis brūkšniniųkodų paleidimas trečiosioms šalims
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Masiniss brūkšninių kodų paleidimas arba atstatymas produktams ar paslaugoms
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Pažymėti vertę kitiems %s tuštiems įrašams
     EraseAllCurrentBarCode=Ištrinti visas esamas brūkšninių kodų reikšmes
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=Visos brūkšninių kodų vertės buvo ištrintos
    -NoBarcodeNumberingTemplateDefined=Brūkšninių kodų numeracijos šablonas nėra įjungtas  brūkšninio kodo modulio konfigūracijoje.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Laukas
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Vartotojai ir grupės
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Trečiosios šalys
    +Module1Name=Third Parties
     Module1Desc=Įmonių ir kontaktų valdymas (klientų, perspektyvų...)
     Module2Name=Prekybos
     Module2Desc=Komercinis valdymas
     Module10Name=Apskaita
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Pasiūlymai
     Module20Desc=Komercinių pasiūlymų valdymas
     Module22Name=Masiniai el. laiškai
    @@ -511,13 +517,13 @@ Module52Desc=Atsargų valdymas (produktai)
     Module53Name=Paslaugos
     Module53Desc=Paslaugų valdymas
     Module54Name=Sutartys / Abonentai
    -Module54Desc=Sutarčių valdymas (servisas arba periodinis abonementas)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Brūkšniniai kodai
     Module55Desc=Brūkšninių kodų valdymas
     Module56Name=Telefonija
     Module56Desc=Telefonijos integracija
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=ClickToDial sistemos integracija (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Išlaidos ir praradimai
     Module75Desc=Išlaidų ir praradimų valdymas
     Module80Name=Gabenimai
     Module80Desc=Gabenimų ir pristatymo užsakymų valdymas
    -Module85Name=Bankai ir pinigai
    +Module85Name=Banks and Cash
     Module85Desc=Banko ar pinigų sąskaitų valdymas
    -Module100Name=Išorinė svetainė
    -Module100Desc=Šis modulis įtraukia išorinę svetainę ar puslapį į Dolibarr meniu ir parodo jį Dolibarr aplinkoje
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Paštininkas ir SPIP
     Module105Desc=Paštininko arba SPIP sąsaja narių moduliui
     Module200Name=LDAP
    -Module200Desc=LDAP katalogų sinchronizavimas
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integracija
     Module240Name=Duomenų eksportas
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Duomenų importas
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Nariai
     Module310Desc=Organizacijos narių valdymas
     Module320Name=RSS mechanizmas
     Module320Desc=Pridėti RSS mechanizmą Dolibarr ekrano puslapių viduje
    -Module330Name=Žymekliai
    -Module330Desc=Žymeklių valdymas
    -Module400Name=Projektai / Galimybės / Iniciatyvos
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Web kalendorius
     Module410Desc=Web kalendoriaus integracija
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Paskola
     Module520Desc=Paskolų valdymas
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Parama
     Module700Desc=Paramos valdymas
     Module770Name=Išlaidų ataskaitos
    -Module770Desc=Valdymo ir pretenzijų išlaidų ataskaitos (transportas, maistas, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Masinis pašto dokumentų generavimas
     Module1780Name=Žymės / Kategorijos
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG redaktorius
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dinaminės kainos
     Module2200Desc=Nustatyti matematinių išraiškų naudojimą kainose
     Module2300Name=Suplanuoti darbai
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Nustatyti Dolibarr interneto paslaugų klientą (Gali būti naudojamas perkelti Duomenis / Prašymus į išorės serverius. Tiekėjo užsakymai palaikomi tik šiuo metu)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Naudokite Gravatar interneto paslaugą (www.gravatar.com) kad parodyti nuotrauką vartotojams/nariams (surandami prie jų laiškų). Reikalinga interneto prieiga.
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP klientas
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP MaxMind konvertavimo galimybes
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=Žmogiškųjų išteklių valdymas (HRM)
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi įmonė
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leidimų valdymas
    -Module20000Desc=Darbuotojų leidimai
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Partija ar serijos numeris, produktų galiojimo ar pardavimo terminų valdymas
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Pardavimų taškas
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Pardavimo punktas
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=PayPal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Apskaita (Išankstinė)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Paraštės
     Module59000Desc=Paraščių valdymo modulis
     Module60000Name=Komisiniai
     Module60000Desc=Komisinių valdymo modulis
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Ištekliai
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Skaityti klientų sąskaitas
    @@ -651,9 +661,9 @@ Permission32=Sukurti/pakeisti produktus
     Permission34=Ištrinti produktus
     Permission36=Žiūrėti/tvarkyti paslėptus produktus
     Permission38=Eksportuoti produktus
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Ištrinti projektus (bendrus projektus ir projektus, apie kuriuos kalbama)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Skaityti intervencijas
     Permission62=Sukurti/keisti intervencijas
    @@ -686,7 +696,7 @@ Permission109=Ištrinti siuntinius
     Permission111=Skaityti finansines ataskaitas
     Permission112=Sukurti/keisti/trinti ir palyginti sandorius/transakcijas
     Permission113=Finansinių sąskaitų nustatymas (sukurti, valdyti kategorijas)
    -Permission114=Operacijų suderinimas
    +Permission114=Reconcile transactions
     Permission115=Eksportuoti sandorius/transakcijas ir sąskaitos išrašus
     Permission116=Pervedimai tarp sąskaitų
     Permission117=Valdyti čekių atlikimą/įvykdymą
    @@ -694,15 +704,15 @@ Permission121=Skaityti trečiąsias šalis, susijusias su vartotoju
     Permission122=Sukurti/pakeisti trečiąsias šalis, susijusias su vartotoju
     Permission125=Ištrinti trečiąsias šalis, susijusias su vartotoju
     Permission126=Eksportuoti trečiąsias šalis
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Skaityti teikėjus
     Permission147=Skaityti statistinius duomenis
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Skaityti sutartis / pasirašymus
     Permission162=Sukurti / keisti sutartis / pasirašymus
     Permission163=Aktyvuoti sutarties aptarnavimą / pasirašymą
    @@ -725,7 +735,7 @@ Permission187=Uždaryti tiekėjo užsakymus
     Permission188=Nutraukti tiekėjo užsakymus
     Permission192=Sukurti rūšis/serijas
     Permission193=Nutraukti rūšis/serijas
    -Permission194=Skaityti resursų rūšis/serijas
    +Permission194=Read the bandwidth lines
     Permission202=Sukurti ADSL ryšius
     Permission203=Tvarkyti ryšių užsakymus
     Permission204=Tvarkyti ryšius
    @@ -750,12 +760,12 @@ Permission244=Pamatyti paslėptų kategorijų turinį
     Permission251=Skaityti kitus vartotojus ir grupes
     PermissionAdvanced251=Skaityti kitus vartotojus
     Permission252=Skaityti kitų vartotojų leidimus
    -Permission253=Sukurti/pakeisti kitus vartotojus, grupes ir leidimus
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Sukurti/keisti vidaus/išorės vartotojus ir leidimus
     Permission254=Sukurti/keisti tik išorės vartotojus
     Permission255=Keisti kitų vartotojų slaptažodžius
     Permission256=Ištrinti ar išjungti kitus vartotojus
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Skaityti CA
     Permission272=Skaityti sąskaitas faktūras
     Permission273=Išrašyti sąskaitas faktūras
    @@ -765,7 +775,7 @@ Permission283=Trinti adresatus
     Permission286=Eksportuoti adresatus
     Permission291=Skaityti tarifus
     Permission292=Nustatyti leidimus tarifams
    -Permission293=Keisti klientų tarifus
    +Permission293=Modify customers tariffs
     Permission300=Skaityti brūkšninius kodus
     Permission301=Sukurti/keisti brūkšninius kodus
     Permission302=Ištrinti brūkšninius kodus
    @@ -787,11 +797,9 @@ Permission401=Skaityti nuolaidas
     Permission402=Sukurti/keisti nuolaidas
     Permission403=Patvirtinti nuolaidas
     Permission404=Ištrinti nuolaidas
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Ištrinti atlyginimus
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Eksportuoti atlyginimus
     Permission520=Skaityti Paskolas
     Permission522=Sukurti / redaguoti paskolas
    @@ -844,8 +852,8 @@ Permission1251=Pradėti masinį išorinių duomenų importą į duomenų bazę (
     Permission1321=Eksportuoti klientų sąskaitas-faktūras, atributus ir mokėjimus
     Permission1322=Reopen a paid bill
     Permission1421=Eksportuoti klientų užsakymus ir atributus
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Perspektyvinio plano potencialo lygis
     DictionaryCanton=Valstybė/Regionas
     DictionaryRegion=Regionai
    @@ -894,7 +902,7 @@ DictionaryVAT=PVM tarifai ar Pardavimo mokesčio tarifai
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Apmokėjimo terminai
     DictionaryPaymentModes=Apmokėjimo būdai
    -DictionaryTypeContact=Adresatų/Adresų tipai
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Eco-Tax (WEEE)
     DictionaryPaperFormat=Popieriaus formatai
    @@ -908,47 +916,47 @@ DictionarySource=Pasiūlymų/užsakymų kilmė
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Sąskaitų plano modeliai
     DictionaryAccountancyJournal=Apskaitos žurnalai
    -DictionaryEMailTemplates=El.pašto pranešimų šablonai
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Vienetai
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Nustatymai išsaugoti
     SetupNotSaved=Setup not saved
     BackToModuleList=Atgal į modulių sąrašą
    -BackToDictionaryList=Atgal į žodynų sąrašą
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=PVM valdymas
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=Pagal nutylėjimą siūloma PVM yra 0, kuris gali būti naudojamas kai kuriais atvejais, pvz.: asociacijoms, fiziniams asmenims ar mažoms įmonėms.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Norma
     LocalTax1IsNotUsed=Nenaudokite antro mokesčio
    -LocalTax1IsUsedDesc=Naudokite antro tipo mokesčių (išskyrus PVM)
    -LocalTax1IsNotUsedDesc=Nenaudokite kito tipo mokesčių (išskyrus PVM)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Antro tipo mokestis
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Nenaudokite trečio mokesčio
    -LocalTax2IsUsedDesc=Naudokite trečio tipo mokestį (išskyrus PVM)
    -LocalTax2IsNotUsedDesc=Nenaudokite kitokio tipo mokesčių (išskyrus PVM)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Trečio tipo mokestis
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE valdymas
    -LocalTax1IsUsedDescES= RE norma pagal nutylėjimą, kuriant planus, sąskaitas-faktūras, užsakymus ir kt., pagal aktyvią standartinę taisyklę:<br>Jei  pirkėjas nėra RE mokėtojas, tai pagal nutylėjimą RE = 0. Taisyklės pabaiga.<br>Jei pirkėjas yra RE mokėtojas, tada RE taikoma pagal nutylėjimą. Taisyklės pabaiga.<br>
    -LocalTax1IsNotUsedDescES= Pagal nutylėjimą siūloma RE = 0. Taisyklės pabaiga.
    -LocalTax1IsUsedExampleES= Ispanijoje profesionalams taikomi Ispanijos IAE tam tikri spec. skyriai.
    -LocalTax1IsNotUsedExampleES= Ispanijoje profesionalams ir bendruomenėms taikomi Ispanijos IAE tam tikri spec. skyriai.
    -LocalTax2ManagementES= IRPF valdymas
    -LocalTax2IsUsedDescES= RE tarifas pagal nutylėjimą, kuriant planus, sąskaitas-faktūras, užsakymus ir kt., pagal aktyvią standartinę taisyklę:<br>Jei pardavėjui nėra taikomas IRPF, tada pagal nutylėjimą IRPF = 0. Taisyklės pabaiga.<br>Jeigu pardavėjui taikomas IRPF, tada IRPF tarifas nustatytas pagal nutylėjimą. Taisyklės pabaiga.<br>
    -LocalTax2IsNotUsedDescES= Pagal nutylėjimą siūloma IRPF yra 0. Taisyklės pabaiga.
    -LocalTax2IsUsedExampleES= Ispanijoje, laisvai samdomi ir nepriklausomi specialistai, kurie teikia paslaugas ir įmonės, kurios pasirinko modulių mokesčių sistemą.
    -LocalTax2IsNotUsedExampleES= Ispanijoje jie yra verslas, kuriam netaikoma modulių mokesčių sistema.
    +LocalTax1ManagementES=RE valdymas
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Pagal nutylėjimą siūloma RE = 0. Taisyklės pabaiga.
    +LocalTax1IsUsedExampleES=Ispanijoje profesionalams taikomi Ispanijos IAE tam tikri spec. skyriai.
    +LocalTax1IsNotUsedExampleES=Ispanijoje profesionalams ir bendruomenėms taikomi Ispanijos IAE tam tikri spec. skyriai.
    +LocalTax2ManagementES=IRPF valdymas
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Pagal nutylėjimą siūloma IRPF yra 0. Taisyklės pabaiga.
    +LocalTax2IsUsedExampleES=Ispanijoje, laisvai samdomi ir nepriklausomi specialistai, kurie teikia paslaugas ir įmonės, kurios pasirinko modulių mokesčių sistemą.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Ataskaitos apie vietinius mokesčius
     CalcLocaltax1=Pardavimai - Pirkimai
     CalcLocaltax1Desc=Vietinių mokesčių ataskaitos apskaičiuojamas kaip skirtumas tarp pardavimo vietinių mokesčių ir pirkimo vietinių mokesčių
    @@ -958,7 +966,8 @@ CalcLocaltax3=Pardavimai
     CalcLocaltax3Desc=Vietinių mokesčių ataskaitos yra pardavimo vietinių mokesčių suma iš viso
     LabelUsedByDefault=Etiketė naudojamas pagal nutylėjimą, jei kodui nerandamas vertimas
     LabelOnDocuments=Dokumentų etiketė
    -NbOfDays=Dienų skaičius
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Mėnesio pabaigoje
     CurrentNext=Current/Next
     Offset=Nuokrypis
    @@ -984,7 +993,7 @@ DatabaseUser=Duomenų bazės vartotojas
     DatabasePassword=Duomenų bazės slaptažodis
     Tables=Lentelės
     TableName=Lentelės pavadinimas
    -NbOfRecord=Įrašų skaičius
    +NbOfRecord=No. of records
     Host=Serveris
     DriverType=Tvarkyklės (driver) tipas
     SummarySystem=Sistemos informacijos santrauka
    @@ -996,7 +1005,7 @@ Skin=Grafinio vaizdo (skin) tema
     DefaultSkin=Grafinio vaizdo (skin) tema pagal nutylėjimą
     MaxSizeList=Maksimalus sąrašo ilgis
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Dienos pranešimas
     MessageLogin=Prisijungimo prie sistemos ekrano pranešimas
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Nuolatinė paieškos forma kairiajame meniu
     DefaultLanguage=Naudojama kalba pagal nutylėjimą (kalbos kodas)
     EnableMultilangInterface=Įjungti daugiakalbę sąsają
     EnableShowLogo=Rodyti logotipą kairiajame meniu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Pavadinimas/Vardas
     CompanyAddress=Adresas
     CompanyZip=Pašto kodas
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Banko sąskaitos %s savininkas
     BankModuleNotActive=Banko sąskaitos modulis neįjungtas
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Įspėjimai
    -DelaysOfToleranceBeforeWarning=Vėlavimų prieš įspėjimą tolerancija
    -DelaysOfToleranceDesc=Šis ekranas leidžia jums nustatyti toleruojamas vėlavimų prieš perspėjimus, pranešamus ekrane su piktograma %s, ribas kiekvienam vėluojamam elementui.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Vėlavimo tolerancija (dienų) prieš perspėjimą dėl pasiūlymų uždaryti
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Vėlavimo tolerancija (dienų) prieš perspėjimą dėl nepateiktų pasiūlymų
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Vėlavimo tolerancija (dienų) prieš perspėjimą dėl aktyvinamų paslaugų
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Vėlavimo tolerancija (dienų) prieš perspėjimą dėl pasibaigusių paslaugų
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Vėlavimo tolerancija (dienų) prieš perspėjimą dėl nesumokėtų tiekėjo sąskaitų-faktūrų
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Vėlavimo tolerancija (dienų) prieš perspėjimą dėl nesumokėtų kliento sąskaitų-faktūrų
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Vėlavimo tolerancija (dienų) prieš perspėjimą dėl banko laukiamo suderinimo
    -Delays_MAIN_DELAY_MEMBERS=Vėlavimo tolerancija (dienų) prieš perspėjimą dėl uždelsto narystės mokesčio
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Vėlavimo tolerancija (dienų) prieš perspėjimą dėl čekių depozito įvykdymo
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Kiti meniu įrašai valdo laisvai pasirenkamus (optional) parametrus.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Saugumo audito įvykiai
     Audit=Auditas
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Čia galite leisti prisijungimą prie Dolibarr saugumo įvykių. Ad
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=Sistemos informacija yra įvairi techninė informacija, kurią gausite tik skaitymo režimu, ir bus matoma tik sistemos administratoriams.
     SystemAreaForAdminOnly=Ši sritis yra skirta tik administratoriams. Nė vienas iš Dolibarr leidimų negali sumažinti šio apribojimo.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Čia galite rinktis ir keisti kiekvieną parametrą, susijusį su Dolibarr grafiniu vaizdu.
     AvailableModules=Available app/modules
     ToActivateModule=Norint įjungti modulius, reikia eiti į Nuostatų meniu (Pagrindinis-> Nuostatos-> Moduliai).
     SessionTimeOut=Sesijos laikas pasibaigė
    -SessionExplanation=Šis skaičius garantuoja, kad sesija niekada nesibaigs prieš šį vėlavimą, jeigu sesijos valymas atliktas Vidinio PHP sesijos valytojo (ir nieko daugiau). Vidinis PHP sesijos valytojas negarantuoja, kad sesija pasibaigs tik po šio vėlavimo. Ji baigsis po šio vėlavimo ir kai sesijos valymas vyko, todėl kiekvienos <b>%s/%s</b> prieigos, bet tik sesijų metu. <br> Pastaba: kai kuriuose serveriuose su išoriniais sesijos valymo mechanizmais (cron, Debian, Ubuntu ...) seansai gali būti nutraukti praėjus nustatytam pagal nutylėjimą <strong>session.gc_maxlifetime</strong> laikotarpiui, nesvarbu, kokia čia įrašyta reikšmė.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Galimi trigeriai
    -TriggersDesc=Trigeriai yra failai, kurie pakeičia Dolibarr elgesį, kai tik nukopijuojami į katalogą<b>htdocs/core/triggers</b>. Jie nustato naujus veiksmus, suaktyvintus Dolibarr įvykiuose (kuriant naują įmonę, pripažįstant sąskaitą-faktūrą, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Trigeriai šiame faile yra išjungti, panaudojant priesagą <b>-NORUN</b> jų pavadinimuose.
     TriggerDisabledAsModuleDisabled=Trigeriai šiame faile yra išjungti, nes modulis <b>%s</b> yra išjungtas.
     TriggerAlwaysActive=Trigeriai šiame faile yra visada aktyvūs, kokie bebūtų aktyvuoti Dolibarr moduliai.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Apribojimų/Tikslumo nustatymai
    -LimitsDesc=Čia galite nustatyti apribojimus, tikslumą ir optimizacijos priemones, naudojamas Dolibarr.
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Vieneto kainos maksimalus ženklų po kablelio skaičius
     MAIN_MAX_DECIMALS_TOT=Visos kainos maksimalus ženklų po kablelio skaičius
     MAIN_MAX_DECIMALS_SHOWN=Ekrane rodomų kainų maksimalus ženklų po kablelioskaičius (Pridėti <b>...</b> po šio numerio, jei norite pamatyti <b>...</b> kada ekrane rodomas skaičius yra sutrumpinamas)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Produkto grynoji vieneto kaina
     TotalPriceAfterRounding=Bendra kaina (grynoji kaina/PVM/su PVM) po apvalinimo
     ParameterActiveForNextInputOnly=Parametras veiksmingas tik kitam duomenų įvedimui
     NoEventOrNoAuditSetup=Dar nėra užfiksuotų saugumo įvykių. Tai yra normalu, jei auditas nebuvo įjungtas "Nuostatos - Saugumas - Auditas" puslapyje.
    -NoEventFoundWithCriteria=Saugumo įvykių pagal užduotus paieškos kriterijus nerasta.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Žiūrėti į vietinio el. pašto konfigūraciją
     BackupDesc=Norint padaryti pilną atsarginę Dolibarr kopiją, reikia:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Suarchyvuotas katalogas turi būti laikomas saugioje vietoje.
     BackupDescY=Sukurtas sandėlio failas turi būti laikomas saugioje vietoje.
    -BackupPHPWarning=Atsarginės kopijos sukūrimas negarantuojamas naudojant šį metodą. Teikite pirmenybę ankstesniam metodui.
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Norėdami atkurti Dolibarr iš atsarginės kopijos, turite:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL duomenų importas
     ForcedToByAModule= Ši taisyklė yra priverstinė <b>%s</b> pagal aktyvuotą modulį
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Jūs turite paleisti šią koma
     YourPHPDoesNotHaveSSLSupport=SSL funkcijos negalimos Jūsų PHP
     DownloadMoreSkins=Parsisiųsti daugiau grafinių vaizdų (skins)
     SimpleNumRefModelDesc=Grąžina nuorodos numerį, kurio formatas %syymm-nnnn, kur yy yra metai, mm mėnuo ir nnnn yra seka, be tarpų ir be apnulinimo.
    -ShowProfIdInAddress=Rodyti profesionalius ID su adresais ant dokumentų
    -ShowVATIntaInAddress=Paslėpti PVM Intra num su adresais ant dokumentų
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Dalinis vertimas
    -MAIN_DISABLE_METEO=Išjungti meteo vaizdus
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Bandyti prisijungti prie API
    -ProxyDesc=Kai kurios Dolibarr funkcijos darbe reikalauja interneto prieigos. Čia nustatykite parametrus. Jei Dolibarr serveris yra už proxy serverio, šie parametrai nurodo Dolibarr, kaip pasiekti internetą.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Išorinė prieiga
     MAIN_PROXY_USE=Naudoti proxy serverį (kitu atveju tiesioginę interneto prieigą)
     MAIN_PROXY_HOST=Proxy serverio pavadinimas/adresas
     MAIN_PROXY_PORT=Proxy serverio prievadas (port)
     MAIN_PROXY_USER=Prisijungti proxy serverio naudojimui
     MAIN_PROXY_PASS=Proxy serverio slaptažodis
    -DefineHereComplementaryAttributes=Čia nustatykite visus atributus, ne tik jau nustatytus pagal nutylėjimą, bet ir tuos, kuriuos Jūs norite, kad būtų palaikomi %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Papildomi požymiai
     ExtraFieldsLines=Papildomi atributai (linijos)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Papildomos savybės (užsakymo eilutės)
     ExtraFieldsSupplierInvoicesLines=Papildomos savybės (sąskaitos-faktūros eilutės)
     ExtraFieldsThirdParties=Papildomi požymiai (trečiosios šalys)
    -ExtraFieldsContacts=Papildomi požymiai (kontaktas/adresas)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Papildomi požymiai (narys)
     ExtraFieldsMemberType=Papildomi požymiai (nario tipas)
     ExtraFieldsCustomerInvoices=Papildomi atributai (sąskaitos-faktūros)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=Tik raidiniai-skaitmeniniai simboliai, mažosio
     SendmailOptionNotComplete=ĮSPĖJIMAS, kai kuriose Linux sistemose, norint siųsti el. laiškus iš savo pašto, vykdymo nuostatose turi būti opcija -ba (parametras mail.force_extra_parameters į savo php.ini failą). Jei kai kurie gavėjai niekada negauna el. laiškų, pabandykite redaguoti šį PHP parametrą su mail.force_extra_parameters = -ba).
     PathToDocuments=Kelias prie dokumentų
     PathDirectory=Katalogas
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Jūs turite įjungti bent 1 modulį
    -ClassNotFoundIntoPathWarning=Klasė %s nerasta į PHP kelią
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Taip vasarą
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Sesijų saugykla užšifruota Suhosin
     ConditionIsCurrently=Dabartinė būklė yra %s
    -YouUseBestDriver=Jūs naudojate tvarkyklę %s, kuri yra geriausia tvarkyklė prieinama šiuo metu.
    -YouDoNotUseBestDriver=Jūs naudojate diską %s, bet rekomenduojama tvarkyklė (driver) %s.
    -NbOfProductIsLowerThanNoPb=Turite tik %s produktus/paslaugas duomenų bazėje. Tam nereikia jokio ypatingo optimizavimo.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Paieškos optimizavimas
    -YouHaveXProductUseSearchOptim=Jūs turite %s produktą duomenų bazėje. Jums reikia pridėti konstantą PRODUCT_DONOTSEARCH_ANYWHERE prie 1 į Pagrindinis-Nustatymai-Kiti. Jūs apribojate paiešką eilutės pradžia ir nustatote galimybę duomenų bazėjė naudoti indeksą ir jūs turėtumėte gauti greitesnius atsakymus į paieškos užklausas.
    -BrowserIsOK=Jūs naudojate interneto naršyklę %s. Ši naršyklė yra gera saugumo ir charakteristikų požiūriu.
    -BrowserIsKO=Jūs naudojate interneto naršyklę %s. Ši naršyklė yra žinoma, kaip blogas pasirinkimas saugumo, charakteristikų ir patikimumo požiūriu. Mes recommanduojame Jums Firefox, Chrome, Opera ar Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug yraužkrautas.
     XCacheInstalled=Xcache yra įkelta.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Lauko %s redagavimas
     FillThisOnlyIfRequired=Pavyzdys: +2 (pildyti tik tuomet, jei laiko juostos nuokrypio problemos yra žymios)
     GetBarCode=Gauti brūkšninį kodą
     ##### Module password generation
     PasswordGenerationStandard=Grąžinti pagal vidinį Dolibarr algoritmą sugeneruotą slaptažodį: 8 simbolių, kuriuose yra bendri skaičiai ir mažosios raidės.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=Naujo vartotojo sukūrimui reikalingas el. paštas
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Įmonių modulio nuostatos
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Dokumentų šablonai
    -DocumentModelOdt=Sukurti dokumentus pagal OpenDocuments šablonus (.ODT arba .OAM failus OpenOffice, KOffice, TextEdit, ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vandens ženklas ant dokumento projekto
     JSOnPaimentBill=Aktyvuoti automatinio mokėjimo eilučių užpildymo mokėjimo formoje funkciją
    -CompanyIdProfChecker=Profesionalių IDS taisyklės
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Eksporto nuorodą į <b>%s</b> formatą galima rasti šiuo adresu: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Eksporto nuorodą į <b>%s</b> formatą galima rasti šiu
     BillsSetup=Sąskaitos-faktūros modulio nuostatos
     BillsNumberingModule=Sąskaitų-faktūrų ir kredito avizų numeravimo modulis
     BillsPDFModules=Sąskaitų-faktūrų dokumentų moduliai
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Kreditinė sąskaita-faktūra
     CreditNotes=Kreditinės sąskaitos-faktūros
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Valdyti kiekvieno nario Prisijungimą
     AdherentMailRequired=El. paštui reikia sukurti naują narį
     MemberSendInformationByMailByDefault=Patvirtinimas paukščiuku žymimame langelyje pašto siuntimui nariams (patvirtinimas arba nauja įmoka) yra pagal nutylėjimą
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP nuostatos
     LDAPGlobalParameters=Bendrieji parametrai
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Bandyti LDAP paiešką
     LDAPSynchroOK=Sinchronizacijos bandymas sėkmingas
     LDAPSynchroKO=Sinchronizacijos bandymas nepavyko
    -LDAPSynchroKOMayBePermissions=Sinchronizacijos bandymas nepavyko. Patikrinkite, ar prisijungimas prie serverio yra tinkamai sukonfigūruotas ir ar leidžiami LDAP atnaujinimai
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP prisijungimas prie LDAP serverio sėkmingas (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP prisijungimas prie LDAP serverio nepavyko (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Prisijungimas/Patvirtinimas prie LDAP serverio nepavyko (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP serveris sukonfigūruotas versijai 3
     LDAPSetupForVersion2=LDAP serveris sukonfigūruotas versijai 2
     LDAPDolibarrMapping=Dolibarr atvaizdavimas
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Prisijungti (samba, activedirectory)
     LDAPFieldLoginSambaExample=Pavyzdys: samaccountname
     LDAPFieldFullname=Pilnas pavadinimas/vardas
     LDAPFieldFullnameExample=Pavyzdys: cn
    -LDAPFieldPasswordNotCrypted=Slaptažodis nešifruotas
    -LDAPFieldPasswordCrypted=Slaptažodis šifruotas
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Pavyzdys: userPassword
     LDAPFieldCommonNameExample=Pavyzdys: cn
     LDAPFieldName=Pavadinimas/vardas
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Pavyzdinės reikšmės yra skirtos <b>OpenLDAP</b> su šiomis įkeltomis schemomis: <b>core.schema, cosine.schema, inetorgperson.schema</b>). Jei naudojate tas reikšmes ir OpenLDAP, pakeiskite Jūsų LDAP konfigūracijos failą <b>slapd.conf</b> kad būtų visos šios schemos įkeltos.
     ForANonAnonymousAccess=Prieigai su patvirtinimu (pvz.: su įrašymo galimybe)
     PerfDolibarr=Charakteristikos nustatymo/optimizavimo ataskaita
    -YouMayFindPerfAdviceHere=Šiame puslapyje rasite kelis patikrinimus ar patarimus, susijusius su charakteristikomis.
    -NotInstalled=Nėra įdiegtas, todėl Jūsų serverio šitas neapkrauna ir nelėtina.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Taikomoji sparčioji tarpinė atmintis
     MemcachedNotAvailable=Taikomosios sparčiosios tarpinės atminties nerasta. Jūs galite padidinti efektyvumą įdiegdami atminties serverį Memcached ir įgalindami modulį naudoti šį atminties serverį.<br>Daugiau informacijos rasite čia <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Atkreipkite dėmesį, kad daugumas interneto talpinimo paslaugų teikėjų neteikia šitokių atminties serverių.
     MemcachedModuleAvailableButNotSetup=Modulis memcached taikomąjai atmintinei (cache) rastas, bet modulio nustatymai nėra baigti.
     MemcachedAvailableAndSetup=Modulis memcached, skirti naudoti memcached server yra įjungtas.
     OPCodeCache=OPCode sparčioji tarpinė atmintis (cache)
    -NoOPCodeCacheFound=OPCode sparčioji tarpinė atmintis nerasta. Galbūt, Jūs naudojate kitą OPCode atmintį nei XCache ar eAccelerator (gerai), o galbūt, Jūs neturite OPCode atminties (labai blogai).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP sparčioji tarpinė atmintis statiniams ištekliams (css, img, javascript)
     FilesOfTypeCached=%s tipo failai yra laikomi HTTP serverio tarpinėje sparčiojoje atmintyje
     FilesOfTypeNotCached=%s tipo failais nėra laikomi HTTP serverio tarpinėje sparčiojoje atmintyje
     FilesOfTypeCompressed=%s tipo failai yra suspausti HTTP serveryje
     FilesOfTypeNotCompressed=%s tipo failai nėra suspausti HTTP serveryje
     CacheByServer=Laikoma serverio atmintyje
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Laikoma naršyklės atmintyje
     CompressionOfResources=HTTP atsakymų suspaudimas
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Toks automatinis aptikimas negalimas su naudojama naršykle
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Produktų modulio nuostatos
     ServiceSetup=Paslaugų modulio nuostatos
     ProductServiceSetup=Produktų ir paslaugų modulių nuostatos
     NumberOfProductShowInSelect=Maksimalus produktų skaičius grupiniuose pasirinkimo sąrašuose (0=neribojama)
    -ViewProductDescInFormAbility=Produktų aprašymų vizualizavimas formose (kitu būdu per "iššokantį" langą)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Brūkšninio kodo tipas produktams pagal nutylėjimą
     SetDefaultBarcodeTypeThirdParties=Brūkšninio kodo tipas trečiosioms šalims pagal nutylėjimą
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Siuntimo modulio nuostatos
     SendingsReceiptModel=Įplaukų siuntimo modelis
     SendingsNumberingModules=Siuntinių numeravimo modulis
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Laisvas tekstas siuntų dokumentuose
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Produktų pristatymo kvitų numeravimo modulis
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Išplėstinis redaktorius
     ActivateFCKeditor=Įjungti išplėstinį redaktorių:
     FCKeditorForCompany=Elementų aprašymo ir pastabų WYSIWIG kūrimas/redagavimas (išskyrus produktus/paslaugas)
     FCKeditorForProduct=Produktų/paslaugų aprašymų ir pastabų WYSIWIG kūrimas/redagavimas
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG kūrimas/redagavimas masiniams e-laiškams (Tools-> eMailing)
     FCKeditorForUserSignature=Vartotojo parašo WYSIWIG kūrimas/redagavimas
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Sujungimas pavyko, bet duomenų bazė neatrodo esanti OSCommerce duomenų baze (Key%s nerastas table%s).
    -OSCommerceTestOk=Prisijungimas prie serverio '%s' duomenų bazėje "%s" su vartotoju '%s' sėkmingas.
    -OSCommerceTestKo1=Prisijungimas prie serverio '%s' pavyko, bet duomenų bazė "%s" nepasiekiama.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Prisijungimas prie serverio '%s' su vartotoju '%s' nepavyko.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Meniu ištrintas
     Menus=Meniu
    @@ -1548,7 +1561,7 @@ DetailRight=Sąlyga parodyti neleidžiamus pilkus meniu punktus
     DetailLangs=Lang failo pavadinimas etiketės kodo vertimui
     DetailUser=Vidinis / Išorinis / Visi
     Target=Duomenų adresatas
    -DetailTarget=Ryšių užduotis (_tuščias viršus atidaro naują langą)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Lygis (-1:viršutinis meniu, 0:antraštės meniu, >0 meniu ir submeniu)
     ModifMenu=Meniu keitimas
     DeleteMenu=Ištrinti meniu įrašą
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=PVM atsiranda:<br>- prekėms - nuo pristatymo (mes naudojam
     OptionVatDebitOptionDesc=PVM atsiranda: <br> - prekėms - nuo pristatymo (mes naudojame sąskaito-faktūros datą) <br> - paslaugoms - nuo sąskaitos-fakrtūros datos
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Laikas PVM išieškojimui pagal nutylėjimą pagal pasirinktą variantą:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Pristatymo metu
     OnPayment=Apmokėjimo metu
     OnInvoice=Sąskaitos-faktūros pateikimo metu
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Pirkimo sąskaita. Kodas
     AgendaSetup=Įvykių ir operacijų modulio nustatymas
     PasswordTogetVCalExport=Eksporto sąsajos leidimo mygtukas
     PastDelayVCalExport=Neeksportuoti įvykių senesnių nei
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Nustatyti automatiškai šio įvykio tipą paieškos filtrui darbotvarkėje
    -AGENDA_DEFAULT_FILTER_STATUS=Nustatyti automatiškai šio įvykio būklę paieškos filtrui darbotvarkėje
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Kurią kortelę norite atidaryti pagal nutylėjimą renkantis meniu Darbotvarkė
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial modulio nuostatos
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Pardavimų taškas
     CashDeskSetup=Pardavimų taško modulio nustatymas
    -CashDeskThirdPartyForSell=Bendras pagal nutylėjimą trečiajai šaliai naudoti pardavimams
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Sąskaita grynųjų pinigų įmokoms pagal nutylėjimą
     CashDeskBankAccountForCheque= Sąskaita čekių įmokoms pagal nutylėjimą
     CashDeskBankAccountForCB= Sąskaita įmokoms kreditinėmis kortelėmis pagal nutylėjimą
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Sulaikyti ir apriboti sandėlio naudojimą atsargų sumažėjimui
    -StockDecreaseForPointOfSaleDisabled=Atsargų sumažėjimas Pardavimo taške (Point of Sale) išjungtas
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Atsargų sumažėjimas POS nesuderinamas su partijos valdymu
    -CashDeskYouDidNotDisableStockDecease=Jūs neišjungiate atsargų sumažėjimo parduodami Pardavimo taške (Point of Sale). Taigi reikalingas sandėlis.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Žymeklių modulio nustatymas
    -BookmarkDesc=Šis modulis leidžia valdyti žymeklius. Taip pat galite pridėti trumpąsias nuorodas į bet kurį Dolibarr puslapį ar išorinį web tinklalapį Jūsų kairiajame meniu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maksimalus žymeklių skaičius rodomas kairiajame meniu
     ##### WebServices #####
     WebServicesSetup=Webservices modulio nustatymas
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-įmonės modulio nustatymas
     ##### Suppliers #####
     SuppliersSetup=Tiekėjo modulio nustatymas
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Tiekėjo sąskaitų-faktūrų numeracijos modeliai
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Projekto modulio nustatymas
     ProjectsModelModule=Projekto ataskaitų dokumento modelis
     TasksNumberingModules=Užduočių numeracijos modulis
     TaskModelModule=Užduočių ataskaitų dokumento modelis
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=Fiksuotų pranešimų sąrašas
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Slenkstis
     BackupDumpWizard=Duomenų bazės atsarginės kopijos failo kūrimo vedlys
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=Nustatyti TimeZone
    @@ -1731,7 +1745,7 @@ CurrentChecksum=Current Checksum
     ForcedConstants=Required constant values
     MailToSendProposal=Customer proposals
     MailToSendOrder=Customer orders
    -MailToSendInvoice=Customer invoices
    +MailToSendInvoice=Klientų sąskaitos faktūros
     MailToSendShipment=Pakrovimai
     MailToSendIntervention=Intervencijos
     MailToSendSupplierRequestForQuotation=Quotation request
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/lt_LT/companies.lang b/htdocs/langs/lt_LT/companies.lang
    index 3859d7b410b..fc35fa66904 100644
    --- a/htdocs/langs/lt_LT/companies.lang
    +++ b/htdocs/langs/lt_LT/companies.lang
    @@ -5,16 +5,16 @@ SelectThirdParty=Pasirinkite trečiają šalį
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Ištrinti adresatą/adresą
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Nauja trečioji šalis
    -MenuNewCustomer=Naujas klientas
    -MenuNewProspect=Naujas planas
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Naujas privatus asmuo
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
    +CreateDolibarrThirdPartySupplier=Sukurkite trečią šalį (pardavėją)
     CreateThirdPartyOnly=Sukurti trečią šalį
    -CreateThirdPartyAndContact=Create a third party + a child contact
    +CreateThirdPartyAndContact=Sukurti trečią šalį + kontaktas
     ProspectionArea=Numatoma sritis
     IdThirdParty=Trečiosios šalies ID
     IdCompany=Įmonės ID
    @@ -25,22 +25,22 @@ ThirdPartyContact=Trečiosios šalies kontaktas/adresas
     Company=Įmonė
     CompanyName=Įmonės pavadinimas
     AliasNames=Pseudonimo pavadinimas (komercinis, prekės ženklas, ...)
    -AliasNameShort=Pseudonimas
    +AliasNameShort=Alias Name
     Companies=Įmonės
    -CountryIsInEEC=Šalis yra Europos Ekonominėje Bendrijoje
    -ThirdPartyName=Trečiosios šalies pavadinimas
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Trečioji šalis
    -ThirdParties=Trečiosios šalys
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Planai
     ThirdPartyProspectsStats=Planai
     ThirdPartyCustomers=Klientai
     ThirdPartyCustomersStats=Klientai
     ThirdPartyCustomersWithIdProf12=Klientai su %s arba %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Trečioji šalis tipas
    +ThirdPartyType=Type of company
     Individual=Privatus asmuo
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Motininė įmonė
     Subsidiaries=Dukterinės įmonės
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Pašto kodas
     Town=Miestas
     Web=WEB
     Poste= Pozicija
    -DefaultLang=Kalba pagal nutylėjimą
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    -VATIsNotUsed=Sales tax is not used
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
    +VATIsNotUsed=PVM nenaudojamas
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Pasiūlymai
    @@ -104,7 +104,7 @@ CustomerCodeModel=Kliento kodo modelis
     SupplierCodeModel=Vendor code model
     Gencod=Brūkšninis kodas
     ##### Professional ID #####
    -ProfId1Short=Prof ID 1
    +ProfId1Short=Juridinis kodas
     ProfId2Short=Prof ID 2
     ProfId3Short=Prof ID 3
     ProfId4Short=Prof ID 4
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Sintaksė galioja
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Šis klientas turi nuolaidą pagal nutylėjimą <b>%s
     CompanyHasNoRelativeDiscount=Šis klientas neturi santykinės nuolaidos pagal nutylėjimą
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Šis klientas dar turi kreditinių sąskaitų <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Nė vienas
    -Supplier=Tiekėjas
    +Supplier=Vendor
     AddContact=Sukurti kontaktą
     AddContactAddress=Sukurti kontaktą / adresą
     EditContact=Redaguoti adresatą
    @@ -303,22 +303,22 @@ AddThirdParty=Sukurti trečią šalį
     DeleteACompany=Ištrinti įmonę
     PersonalInformations=Asmeniniai duomenys
     AccountancyCode=Apskaitos sąskaita
    -CustomerCode=Kliento kodas
    -SupplierCode=Vendor code
    -CustomerCodeShort=Kliento kodas
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Kliento kodas, unikalus kiekvienam klientui
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Būtina, jei trečioji šalis yra klientas arba kandidatas
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Galiojimas kontroliuojamas modulio
    -ThisIsModuleRules=Šio modulio taisyklės
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Numatomas klientas susisiekti
     CompanyDeleted=Įmonė "%s" ištrinta iš duomenų bazės.
     ListOfContacts=Kontaktų/adresų sąrašas
     ListOfContactsAddresses=Kontaktų/adresų sąrašas
    -ListOfThirdParties=Trečiųjų šalių sąrašas
    -ShowCompany=Show third party
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Rodyti kontaktus
     ContactsAllShort=Visi (nėra filtro)
     ContactType=Kontakto tipas
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Šis kontaktas nėra kontaktas bet kuriam komerciniam pa
     NoContactForAnyContract=Šis kontaktas nėra kontaktas bet kuriai sutarčiai
     NoContactForAnyInvoice=Šis kontaktas nėra kontaktas bet kuriai sąskaitai-faktūrai
     NewContact=Naujas kontaktas
    -NewContactAddress=Naujas kontaktas/adresas
    +NewContactAddress=New Contact/Address
     MyContacts=Mano kontaktai
     Capital=Kapitalas
     CapitalOf=Kapitalas %s
     EditCompany=Redaguoti įmonę
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Patikrinti
    -VATIntraCheckDesc=Nuoroda <b>%s</b> leidžia paklausti Europos PVM tikrinimo paslaugas. Išorinė interneto prieiga iš serverio yra būtina.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Patikrinkite PVM Europos komisijos svetainėje
    -VATIntraManualCheck=Taip pat galite patikrinti rankiniu būdu Europos interneto svetainėje <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Tikrinimas negalimas. Tikrinimo paslauga nėra teikiama valstybės narės (%s).
    -NorProspectNorCustomer=Nei klientas, nei numatomas klientas
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Personalas
     ProspectLevelShort=Potencialas
     ProspectLevel=Numatomų klientų potencialas
    @@ -387,12 +387,12 @@ ExportCardToFormat=Formuoti eksporto kortelę
     ContactNotLinkedToCompany=Kontaktas nėra susijęs su jokia trečiąja šalimi
     DolibarrLogin=Dolibarr prisijungimas
     NoDolibarrAccess=Nėra Dolibarr prieigos
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Kontaktai ir rekvizitai
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Kainos lygis
     DeliveryAddress=Pristatymo adresas
     AddAddress=Pridėti adresą
    @@ -402,16 +402,16 @@ DeleteFile=Ištrinti failą
     ConfirmDeleteFile=Ar tikrai norite ištrinti šį failą ?
     AllocateCommercial=Assigned to sales representative
     Organization=Organizacija
    -FiscalYearInformation=Informacija apie finansinius metus
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Finansinių metų pirmas mėnuo
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Numatomų klientų sąrašas
    -ListCustomersShort=Klientų sąrašas
    -ThirdPartiesArea=Trečių šalių ir kontaktų sritis
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Viso unikalių trečiųjų šalių
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Atidaryta
     ActivityCeased=Uždarytas
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Dabartinė neapmokėta sąskaita-faktūra
     OutstandingBill=Neapmokėtų sąskaitų-faktūrų maksimumas
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Kodas yra nemokamas. Šis kodas gali būti modifikuotas bet kada.
     ManagingDirectors=Vadovo (-ų) pareigos (Vykdantysis direktorius (CEO), direktorius, prezidentas ...)
     MergeOriginThirdparty=Dubliuoti trečiąją šalį (trečiąją šalį, kurią norite ištrinti)
     MergeThirdparties=Sujungti trečiąsias šalis
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/lt_LT/errors.lang b/htdocs/langs/lt_LT/errors.lang
    index b6277a20632..a7c97b68da0 100644
    --- a/htdocs/langs/lt_LT/errors.lang
    +++ b/htdocs/langs/lt_LT/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Reikšmė '%s' turi neteisingą datos formatą
     ErrorWrongDate=Data yra neteisinga !
     ErrorFailedToWriteInDir=Nepavyko įrašyti į katalogą %s
     ErrorFoundBadEmailInFile=Rasta neteisinga elektroninio pašto sintaksė failo eilutėje %s (eilutės pavyzdys %s su e-paštas=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Kai kurie privalomi laukai nėra užpildyti.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Nepavyko sukurti aplanko. Įsitikinkite, kad web serverio vartotojas turi teisę rašyti į Dolibarr dokumentų aplanką. Jei parametras <b>safe_mode</b> yra įjungtas šio PHP, patikrinkite, ar Dolibarr PHP failai priklauso web serverio vartotojui (ar jų grupei).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Prašome užpildyti reikšmę pasirinkitam sąrašui
     ErrorNoValueForCheckBoxType=Prašome užpildyti reikšmę žymės laukelių sąrašui
     ErrorNoValueForRadioType=Prašome užpildyti reikšmę žymių (radio) sąrašui
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Laukelyje <b>%s</b> neturi būti specialiųjų simbolių
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Nėra aktyvaus apskaitos modulio
     ErrorExportDuplicateProfil=Profilio vardas jau egzistuoja šiam eksporto rinkiniui
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP derinimas nėra pilnas
     ErrorLDAPMakeManualTest=.ldif failas buvo sukurtas aplanke: %s. Pabandykite įkelti jį rankiniu būdu per komandinę eilutę, kad gauti daugiau informacijos apie klaidas
    -ErrorCantSaveADoneUserWithZeroPercentage=Negalima išsaugoti veiksmo su "Būklė nepradėta", jei laukelis "atliktas" taip pat užpildytas.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Nuoroda, naudojama sukūrimui, jau egzistuoja.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Nepavyko ištrinti įrašo. Jis jau naudojamas arba įtrauktas į kitą objektą.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=JavaScript turi būti neišjungtas, kad ši funkcija veiktų. Norėdami įjungti/išjungti JavaScript, eikite į meniu Pagrindinis-> Nustatymai->Ekranas.
     ErrorPasswordsMustMatch=Abu įvesti slaptažodžiai turi sutapti tarpusavyje
    -ErrorContactEMail=Įvyko techninė klaida. Kreipkitės į administratorių e-paštu <b>%s</b> ir pateikite klaidos kodą <b>%s</b> savo laiške, arba dar geriau, pridėkite šio puslapio ekrano kopiją.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Neteisinga laukelio numerio reikšmė <b>%s</b> (reikšmė '<b>%s</b>' neatitinka reguliarios išraiškos (regex) taisyklės <b>%s</b>)
     ErrorFieldValueNotIn=Neteisinga reikšmė laukelio numeriui <b>%s</b> (reikšmė '<b>%s</b>' nėra reikšmė galima laukeliui <b>%s</b> lentelėje <b>%s</b>
     ErrorFieldRefNotIn=Neteisinga reikšmė laukelio numeriui <b>%s</b> (reikšmė '<b>%s</b>' yra ne <b>%s</b> egzistuojanti nuoroda)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Antivirusinė programa negali patvirtinti failo (f
     ErrorSpecialCharNotAllowedForField=Specialūs simboliai neleidžiami laukelyje "%s"
     ErrorNumRefModel=Nuoroda yra į duomenų bazę (%s) ir yra nesuderinama su šiomis numeravimo tasyklėmis. Pašalinkite įrašą arba pervadinkite nuorodą, kad aktyvuoti šį modulį.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Maskavimo (mask) klaida
     ErrorBadMaskFailedToLocatePosOfSequence=Klaida, maskavimas be eilės numeris
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Klaida, bloga perkrovimo reikšmė
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Klaida. Pasirinkite bent vieną įrašą.
    -ErrorDeleteNotPossibleLineIsConsolidated=Ištrinti neįmanoma, nes įrašas yra susijęs su banko operacija, kuri suderinta
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s priskiriamas kitai trečiąjai šaliai
     ErrorFailedToSendPassword=Nepavyko išsiųsti slaptažodžio
     ErrorFailedToLoadRSSFile=Nepavyksta gauti RSS feed. Pabandykite pridėti konstantą MAIN_SIMPLEXMLLOAD_DEBUG, jei klaidų pranešimai nesuteikia pakankamai informacijos.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Vartotojas su prisijungimu <b>%s</b> nerastas
     ErrorLoginHasNoEmail=Šis vartotojas neturi e-pašto adreso. Procesas nutrauktas.
     ErrorBadValueForCode=Netinkama saugumo kodo reikšmė. Pabandykite dar kartą su nauja reikšme ...
     ErrorBothFieldCantBeNegative=Laukai %s ir %s negali būti abu neigiami
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Vartotojo sąskaita <b>%s</b> naudojama web serverio vykdymui neturi leidimo tam.
     ErrorNoActivatedBarcode=Nėra įjungta brūkšninio kodo tipo
    @@ -138,7 +141,7 @@ ErrorBadFormat=Blogas formatas !
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Žymeklis tokiu pavadinimu ar šis tikslas (URL) ja
     WarningPassIsEmpty=Perspėjimas, duomenų bazės slaptažodis yra tuščias. Tai saugumo skylė. Jūs turite pridėti slaptažodį į savo duomenų bazę ir pakeisti savo conf.php failą to atspindėjimui.
     WarningConfFileMustBeReadOnly=Įspėjimas, Jūsų config failas (<b>htdocs/conf/conf.php</b>) gali būti perrašytas į web serverį. Tai rimta saugumo skylė. Pakeisti teises failui, kad būtų tik skaitymo režimas operacinės sistemos vartotojui naudojamam web serverio. Jei naudojate Windows ir FAT disko formatą, Jūs turite žinoti, kad ši failų sistema neleidžia pridėti teisių į failą, todėl negali būti visiškai saugi.
     WarningsOnXLines=Įspėjimai <b>%s</b> šaltinio įraše (-uose)
    -WarningNoDocumentModelActivated=Nėra įjungto modelio dokumentų generavimui. Bus pasirinktas modelis pagal nutylėjimą iki tol, kol patikrinsite modulio nustatymus.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Įspėjimas. Kai nustatymai yra baigti, Jūs turite išjungti įdiegimo/perkėlimo įrankius pridedant failą <b>install.lock</b> į aplanką <b>%s</b>. Šito failo nebuvimas yra saugumo skylė.
    -WarningUntilDirRemoved=Visi saugumo įspėjimai (matomi tik adminams) išliks aktyvūs tol, kol bus galimas pažeidžiamumas (arba konstanta MAIN_REMOVE_INSTALL_WARNING bus pridėta į Nustatymai-> Kiti).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Perspėjimas. Uždarymas padarytas, net jei suma skiriasi šaltinio ir tikslo elementuose. Įjunkite šią funkciją atsargiai.
     WarningUsingThisBoxSlowDown=Įspėjimas. Naudojant šią dėžutę sulėtėja visi puslapiai, rodantys šią dėžutę.
     WarningClickToDialUserSetupNotComplete=Nustatymo ClickToDial informacija savo vartotojui nėra išsamūs (žr. skirtuką ClickToDial savo vartotojo kortelėje).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/lt_LT/interventions.lang b/htdocs/langs/lt_LT/interventions.lang
    index 8059e2a5fc3..cbfb08fbb55 100644
    --- a/htdocs/langs/lt_LT/interventions.lang
    +++ b/htdocs/langs/lt_LT/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervencijos
     InterventionCard=Intervencijos kortelė
     NewIntervention=Nauja intervencija
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Intervencijų sąrašas
     ActionsOnFicheInter=Intervencijos veiksmai
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/lt_LT/main.lang b/htdocs/langs/lt_LT/main.lang
    index c26d400de10..afef8b4e05c 100644
    --- a/htdocs/langs/lt_LT/main.lang
    +++ b/htdocs/langs/lt_LT/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Nepavyko išsiųsti laiško (siuntėjas=%s, gavėjas=%s)
     ErrorFileNotUploaded=Failas nebuvo įkeltas. Patikrinkite, ar jo dydis neviršija leistino, ar yra laisvos vietos diske ir ar jau nėra failo su tokiu pačiu pavadinimu šiame kataloge.
     ErrorInternalErrorDetected=Aptikta klaida
     ErrorWrongHostParameter=Neteisingas talpinimo parametras
    -ErrorYourCountryIsNotDefined=Jūsų šalis nėra apibrėžta. Eiti į Pagrindinis-Nustatymai-Redaguoti ir vėl užpildyti formą.
    -ErrorRecordIsUsedByChild=Nepavyko ištrinti šio įrašo. Šis įrašas yra naudojamas bent vieno iš jaunesnių įrašų.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Neteisinga reikšmė
     ErrorWrongValueForParameterX=Neteisinga parametro %s reikšmė
     ErrorNoRequestInError=Nėra užklausos dėl klaidos
    -ErrorServiceUnavailableTryLater=Paslauga neteikiama šiuo metu. Bandykite dar kartą vėliau.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Dubliuojanti reikšmė unikaliame lauke
    -ErrorSomeErrorWereFoundRollbackIsDone=Rastos kai kurios klaidos. Pakeitimai atšaukti.
    -ErrorConfigParameterNotDefined=Parametras <b>%s</b> nėra apibrėžta Dolibarr konfigūracijos faile <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Nepavyko rasti vartotojo <b>%s</b> Dolibarr duomenų bazėje.
     ErrorNoVATRateDefinedForSellerCountry=Klaida, nėra apibrėžtų PVM tarifų šaliai '%s'.
     ErrorNoSocialContributionForSellerCountry=Klaida, socialiniai / fiskaliniai mokesčiai neapibrėžti šaliai '%s'.
     ErrorFailedToSaveFile=Klaida, nepavyko išsaugoti failo.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Nustatyti datą
     SelectDate=Pasirinkti datą
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Failas buvo sėkmingai įkeltas
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Failas prikabinimui pasirinktas, bet dar nebuvo įkeltas. Paspauskite tam "Pridėti failą".
    -NbOfEntries=Įrašų skaičius
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Skaityti pagalbą
     RecordSaved=Įrašas išsaugotas
    @@ -94,7 +94,7 @@ Undefined=Neapibrėžtas
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=Žiūrėti aukščiau
    -HomeArea=Pagrindinė sritis
    +HomeArea=Pagrindinis
     LastConnexion=Latest connection
     PreviousConnexion=Ankstesnis prisijungimas
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Uždarytas
     Closed2=Uždarytas
     NotClosed=Not closed
     Enabled=Įjungta
    +Enable=Įjungti
     Deprecated=Užprotestuotas
     Disable=Išjungti
     Disabled=Išjungtas
    @@ -153,7 +154,7 @@ Update=Atnaujinimas
     Close=Uždaryti
     CloseBox=Remove widget from your dashboard
     Confirm=Patvirtinti
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Ištrinti
     Remove=Pašalinti
     Resiliate=Terminate
    @@ -327,27 +328,27 @@ Copy=Kopijuoti
     Paste=Įklijuoti
     Default=Pagal nutylėjimą
     DefaultValue=Reikšmė pagal nutylėjimą
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Kaina
     PriceCurrency=Price (currency)
     UnitPrice=Vieneto kaina
     UnitPriceHT=Vieneto kaina (grynoji)
     UnitPriceHTCurrency=Unit price (net) (currency)
     UnitPriceTTC=Vieneto kaina
    -PriceU=U.P.
    -PriceUHT=U.P. (grynasis)
    +PriceU=Kaina vnt.
    +PriceUHT=Vnt. kaina (be PVM)
     PriceUHTCurrency=U.P (currency)
    -PriceUTTC=U.P. (įsk. mokesčius)
    +PriceUTTC=Vnt. kaina (su PVM)
     Amount=Suma
     AmountInvoice=Sąskaitos-faktūros suma
     AmountInvoiced=Amount invoiced
     AmountPayment=Mokėjimo suma
     AmountHTShort=Suma (grynoji)
    -AmountTTCShort=Suma (įskaitant mokesčius)
    -AmountHT=Suma (atskaičius mokesčius)
    -AmountTTC=Suma (įskaitant mokesčius)
    +AmountTTCShort=Suma (su PVM)
    +AmountHT=Suma (be PVM)
    +AmountTTC=Suma (su PVM)
     AmountVAT=Mokesčių suma
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -366,13 +367,13 @@ Total=Visas
     SubTotal=Tarpinė suma
     TotalHTShort=Iš viso (grynasis)
     TotalHTShortCurrency=Total (net in currency)
    -TotalTTCShort=Iš viso (įskaitant mokesčius)
    -TotalHT=Iš viso (atskaičius mokesčius)
    -TotalHTforthispage=Iš viso (atskaičius mokesčius) šiam puslapiui
    +TotalTTCShort=Iš viso (su PVM)
    +TotalHT=Iš viso (be PVM)
    +TotalHTforthispage=Iš viso (be PVM) šiam puslapiui
     Totalforthispage=Total for this page
    -TotalTTC=Iš viso (įskaitant mokesčius)
    -TotalTTCToYourCredit=Iš viso (įskaitant mokesčius) prie Jūsų kredito
    -TotalVAT=Iš viso mokesčių
    +TotalTTC=Iš viso (su PVM)
    +TotalTTCToYourCredit=Iš viso (su PVM) prie Jūsų kredito
    +TotalVAT=Iš viso PVM
     TotalVATIN=Total IGST
     TotalLT1=Iš viso mokesčių 2
     TotalLT2=Iš viso mokesčių 3
    @@ -380,11 +381,11 @@ TotalLT1ES=Iš viso RE
     TotalLT2ES=Iš viso IRPF
     TotalLT1IN=Total CGST
     TotalLT2IN=Total SGST
    -HT=Atskaityta mokesčių
    -TTC=Įtraukta mokesčių
    -INCVATONLY=Inc. VAT
    +HT=Atskaityta mokesčiai
    +TTC=Įtraukta mokesčiai
    +INCVATONLY=Su PVM
     INCT=Inc. all taxes
    -VAT=Pardavimo mokestis
    +VAT=PVM
     VATIN=IGST
     VATs=Pardavimų mokesčiai
     VATINs=IGST taxes
    @@ -428,7 +429,7 @@ ActionNotApplicable=Netaikomas
     ActionRunningNotStarted=Pradėti
     ActionRunningShort=In progress
     ActionDoneShort=Baigtas
    -ActionUncomplete=Nepilnas
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generuoti
     Duration=Trukmė
     TotalDuration=Bendra trukmė
     Summary=Suvestinė
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Prieinamas
     NotYetAvailable=Dar nėra prieinamas
    @@ -506,7 +507,7 @@ None=Nė vienas
     NoneF=Nė vienas
     NoneOrSeveral=None or several
     Late=Vėlai
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Nuotrauka
     Photos=Nuotraukos
    @@ -530,18 +531,6 @@ September=Rugsėjis
     October=Spalis
     November=Lapkritis
     December=Gruodis
    -JanuaryMin=Sau
    -FebruaryMin=Vas
    -MarchMin=Kov
    -AprilMin=Bal
    -MayMin=Geg
    -JuneMin=Bir
    -JulyMin=Lie
    -AugustMin=Rgp
    -SeptemberMin=Rgs
    -OctoberMin=Spa
    -NovemberMin=Lap
    -DecemberMin=Grd
     Month01=Sausis
     Month02=Vasaris
     Month03=Kovas
    @@ -646,6 +635,8 @@ SendMail=Siųsti e-laišką
     EMail=E-mail
     NoEMail=E-laiškų nėra
     Email=El. paštas
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Nėra mobilaus telefono
     Owner=Savininkas
     FollowingConstantsWillBeSubstituted=Šios konstantos bus pakeistos atitinkamomis reikšmėmis
    @@ -677,7 +668,7 @@ NeverReceived=Niekada negautas
     Canceled=Atšauktas
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Spalva
     Documents=Susieti failai
     Documents2=Dokumentai
    @@ -716,15 +707,15 @@ Merge=Sujungti
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Rodyti puslapio pagrindinio turinio sritį spausdinimui
     MenuManager=Meniu vadovas
    -WarningYouAreInMaintenanceMode=Perspėjimas. Jūs esate serviso režime, todėl tik prisijungimas <b>%s</b> leidžiamas naudotis programa einamu momentu.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Sistemos klaida
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Kreditinė kortelė
     ValidatePayment=Mokėjimą pripažinti galiojančiu
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Laukai su <b>%s</b> yra privalomi
    -FieldsWithIsForPublic=Laukai su <b>%s</b> yra rodomi viešame narių sąraše. Jei šito nenorite, išjunkite "public" langelį.
    -AccordingToGeoIPDatabase=(Pagal GeoIP konversiją)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Eilutė
     NotSupported=Nepalaikoma
     RequiredField=Reikalingas laukas
    @@ -732,6 +723,8 @@ Result=Rezultatas
     ToTest=Bandymas
     ValidateBefore=Kortelė turi būti patvirtinta prieš naudojant šią funkciją
     Visibility=Matomumas
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privatus
     Hidden=Paslėptas
     Resources=Ištekliai
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Sukurti projektą
     SetToDraft=Atgal į projektą
     ClickToEdit=Spausk redaguoti
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Pagal dieną
     BySalesRepresentative=Pagal pardavimo atstovą
     LinkedToSpecificUsers=Susieta su tam tikro vartotojo adresatu
     NoResults=Nėra rezultatų
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=Sistemos įrankiai
     ModulesSystemTools=Modulių įrankiai
     Test=Bandymas
     Element=Elementas
     NoPhotoYet=Galimų nuotraukų dar nėra
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Atimamas
     from=nuo
     toward=būsimas
    @@ -802,7 +797,7 @@ PrintFile=Spausdinti failą %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Rodyti intervenciją
     ShowContract=Rodyti sutartį
    -GoIntoSetupToChangeLogo=Eiti į Pradžia - Nustatymai - Bendrovė, kad pakeisti logotipą arba eikite į Pradžia - Nustatymai - Ekranas, kad paslėpti.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Atmesti
     Denied=Atmestas
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Ištrinti eilutę
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Klasifikuoti su pateiktomis sąskaitomis-faktūromis
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Kalendorius
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Įvykiai
    -EMailTemplates=El.pašto pranešimų šablonai
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projektas
     Projects=Projektai
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Leidimai
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Pirmadienis
     Tuesday=Antradienis
    @@ -917,7 +921,7 @@ SearchIntoUsers=Vartotojai
     SearchIntoProductsOrServices=Products or services
     SearchIntoProjects=Projektai
     SearchIntoTasks=Uždaviniai
    -SearchIntoCustomerInvoices=Customer invoices
    +SearchIntoCustomerInvoices=Klientų sąskaitos faktūros
     SearchIntoSupplierInvoices=Vendor invoices
     SearchIntoCustomerOrders=Customer orders
     SearchIntoSupplierOrders=Purchase orders
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Intervencijos
     SearchIntoContracts=Sutartys
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Išlaidų ataskaitos
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Komentarai
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Visi
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Apmokėtas kieno
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Priskirtas
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/lt_LT/other.lang b/htdocs/langs/lt_LT/other.lang
    index 27b3d17dd53..d4c291a466e 100644
    --- a/htdocs/langs/lt_LT/other.lang
    +++ b/htdocs/langs/lt_LT/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Saugos kodas
     NumberingShort=N°
     Tools=Įrankiai
     TMenuTools=Įrankiai
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Gimimo diena
     BirthdayDate=Birthday date
     DateToBirth=Gimimo data
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Pranešimas patvirtinto mokėjimo grąžinimo puslapyje
     MessageKO=Pranešimas atšaukto mokėjimo grąžinimo puslapyje
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervencija patvirtinta
    -Notify_FICHINTER_SENTBYMAIL=Intervencija nusiųsta paštu
     Notify_ORDER_VALIDATE=Kliento užsakymas patvirtintas
     Notify_ORDER_SENTBYMAIL=Kliento užsakymas nusiųstas paštu
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Tiekėjo užsakymas išsiųstas paštu
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Tiekėjo užsakymas patvirtintas
     Notify_ORDER_SUPPLIER_REFUSE=Tiekėjo užsakymas atmestas
     Notify_PROPAL_VALIDATE=Kliento pasiūlymas patvirtintas
    -Notify_PROPAL_CLOSE_SIGNED=Kliento pasiūlymas uždarytas pasirašytas
    -Notify_PROPAL_CLOSE_REFUSED=Kliento pasiūlymas uždarytas po pasirašymo
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Komercinis pasiūlymas nusiųstas paštu
     Notify_WITHDRAW_TRANSMIT=Perdavimo atsiėmimas
     Notify_WITHDRAW_CREDIT=Kredito atšaukimas
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Trečioji šalis sukūrta
     Notify_COMPANY_SENTBYMAIL=Laiškai, siunčiami iš trečiosios šalies kortelės
     Notify_BILL_VALIDATE=Kliento sąskaita-faktūra patvirtinta
     Notify_BILL_UNVALIDATE=Kliento sąskaita-faktūra nepatvirtinta
    -Notify_BILL_PAYED=Kliento sąskaita-faktūra apmokėta
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Kliento sąskaita-faktūra atšaukta
     Notify_BILL_SENTBYMAIL=Kliento sąskaita-faktūra išsiųsta paštu
     Notify_BILL_SUPPLIER_VALIDATE=Tiekėjo sąskaita-faktūra patvirtinta
    -Notify_BILL_SUPPLIER_PAYED=Tiekėjo sąskaita-faktūra apmokėta
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Tiekėjo sąskaita-faktūra išsiųsta paštu
     Notify_BILL_SUPPLIER_CANCELED=Tiekėjo sąskaita-faktūra atšaukta
     Notify_CONTRACT_VALIDATE=Sutartis patvirtinta
     Notify_FICHEINTER_VALIDATE=Intervencija patvirtinta
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervencija nusiųsta paštu
     Notify_SHIPPING_VALIDATE=Pakrovimas patvirtintas
     Notify_SHIPPING_SENTBYMAIL=Pakrovimas (važtaraštis) išsiųstas paštu
     Notify_MEMBER_VALIDATE=Narys patvirtintas
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Projekto kūrimas
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Prikabintų failų/dokumentų skaičius
     TotalSizeOfAttachedFiles=Iš viso prikabintų failų/dokumentų dydis
     MaxSize=Maksimalus dydis
     AttachANewFile=Pridėti naują failą/dokumentą
     LinkedObject=Susietas objektas
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof ID%s</b> yra informacija, priklausoma nuo trečiosios šalies dalyvio šalies.<br>Pavyzdžiui, šaliai <b>%s</b>, jo kodas <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Intervencija %s buvo patvirtinta
     EMailTextInvoiceValidated=Sąskaita-faktūra %s buvo patvirtinta
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Pasiūlymas %s patvirtintas
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Užsakymas %s pripažintas galiojančiu
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Užsakymas %s buvo patvirtintas %s
     EMailTextOrderRefused=Užsakymas %s atmestas
     EMailTextOrderRefusedBy=Užsakymas %s atmestas %s
     EMailTextExpeditionValidated=Gabenimas %s pripažintas galiojančiu
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importavimo duomenų rinkinys
     DolibarrNotification=Automatinis pranešimas
     ResizeDesc=Įveskite naują plotį <b>arba</b> naują aukštį. Santykis bus išlaikomas keičiant dydį ...
    @@ -204,7 +212,7 @@ NewLength=Naujas plotis
     NewHeight=Naujas aukštis
     NewSizeAfterCropping=Naujas dydis po apkarpymo
     DefineNewAreaToPick=Pažymėti naują sritį ant paveikslėlio (paspauskite kairį pelės mygtuką ant nuotraukos, tada vilkite, kol pasieksite priešingą kampą)
    -CurrentInformationOnImage=Šis įrankis buvo sukurtas siekiant padėti keisti arba apkarpyti paveikslėlį. Tai informacija apie dabartinį redaguotą paveikslėlį.
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Paveikslėlio redaktorius
     YouReceiveMailBecauseOfNotification=Jūs gavote šį pranešimą, nes Jūsų e-pašto adresas įtrauktas į objektų, kurie turi būti informuoti apie kai kuriuos įvykius %s programose %s, sąrašą.
     YouReceiveMailBecauseOfNotification2=Šis įvykis yra sekantis:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Eksporto sritis
    diff --git a/htdocs/langs/lt_LT/projects.lang b/htdocs/langs/lt_LT/projects.lang
    index 39b55732516..f648ed87870 100644
    --- a/htdocs/langs/lt_LT/projects.lang
    +++ b/htdocs/langs/lt_LT/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Rodyti projektą
     ShowTask=Rodyti užduotį
     SetProject=Nustatykite projektą
     NoProject=Nėra apibrėžto ar turimo projekto
    -NbOfProjects=Projektų skaičius
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Praleistas laikas
     TimeSpentByYou=Jūsų sugaištas laikas
     TimeSpentByUser=Vartotojo sugaištas laikas
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Komercinių pasiūlymų, susijusių su projektu, sąrašas
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Sudarytų sutarčių, susijusių su projektu, sąrašas
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Intervencijų, susijusių su projektu, sąrašas
    -ListExpenseReportsAssociatedProject=Išlaidų, susijusių su projektu, ataskaitų sąrašas.
    -ListDonationsAssociatedProject=Paaukotų lėšų, susijusių su projektu, sąrašas.
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Įvykių, susijusių su projektu, sąrašas
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Projekto užduotims sunaudoto laiko sąrašas.
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Užduotis %s sukurta
     TaskModifiedInDolibarr=Užduotis %s modifikuota
     TaskDeletedInDolibarr=Užduotis %s ištrinta
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Straipsnio autorius
     SelectElement=Pasirinkti elementą
     AddElement=Susieti su elementu
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planuojamas darbo krūvis
     PlannedWorkloadShort=Darbo krūvis
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projektai su šiuo vartotoju kaip kontaktu.
     TasksWithThisUserAsContact=Užduotys, priskirtos šiam vartotojui
     ResourceNotAssignedToProject=Nepriskirtas projektui
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Pasiūlymas
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/lv_LV/accountancy.lang b/htdocs/langs/lv_LV/accountancy.lang
    index 69d3bb0df97..6b0eecc8e7c 100644
    --- a/htdocs/langs/lv_LV/accountancy.lang
    +++ b/htdocs/langs/lv_LV/accountancy.lang
    @@ -2,7 +2,7 @@
     Accounting=Grāmatvedība
     ACCOUNTING_EXPORT_SEPARATORCSV=Eksportējamā faila kolonnu atdalītājs
     ACCOUNTING_EXPORT_DATE=Eksportējamā faila datuma formāts
    -ACCOUNTING_EXPORT_PIECE=Export the number of piece
    +ACCOUNTING_EXPORT_PIECE=Eksportēt vienību skaitu
     ACCOUNTING_EXPORT_GLOBAL_ACCOUNT=Eksports ar globālo kontu
     ACCOUNTING_EXPORT_LABEL=Eksportēt etiķeti
     ACCOUNTING_EXPORT_AMOUNT=Eksporta summa
    @@ -38,6 +38,10 @@ GroupIsEmptyCheckSetup=Grupa ir tukša, pārbaudiet personalizētās grāmatved
     DetailByAccount=Parādīt detalizētu informāciju par kontu
     AccountWithNonZeroValues=Konti, kuriem nav nulles vērtības
     ListOfAccounts=Kontu saraksts
    +CountriesInEEC=Valstis EEK
    +CountriesNotInEEC=Valstis, kas nav EEK valstīs
    +CountriesInEECExceptMe=Valstis EEK, izņemot %s
    +CountriesExceptMe=Visas valstis, izņemot %s
     
     MainAccountForCustomersNotDefined=Galvenais grāmatvedības konts klientiem, kas nav definēti iestatījumos
     MainAccountForSuppliersNotDefined=Galvenais grāmatvedības konts piegādātājiem, kas nav definēti iestatījumos
    @@ -135,7 +139,7 @@ BANK_DISABLE_DIRECT_INPUT=Atspējot tiešu darījumu reģistrāciju bankas kont
     ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Iespējot eksporta projektu žurnālā
     
     ACCOUNTING_SELL_JOURNAL=Pārdošanas žurnāls
    -ACCOUNTING_PURCHASE_JOURNAL=Purchase journal
    +ACCOUNTING_PURCHASE_JOURNAL=Pirkuma žurnāls
     ACCOUNTING_MISCELLANEOUS_JOURNAL=Miscellaneous journal
     ACCOUNTING_EXPENSEREPORT_JOURNAL=Expense report journal
     ACCOUNTING_SOCIAL_JOURNAL=Sociālais žurnāls
    @@ -156,15 +160,16 @@ Docref=Atsauce
     LabelAccount=Konta nosaukums
     LabelOperation=Etiķetes darbība
     Sens=Sens
    +LetteringCode=Burtu kods
     Codejournal=Žurnāls
     NumPiece=Gabala numurs
     TransactionNumShort=Num. darījums
    -AccountingCategory=Personalized groups
    +AccountingCategory=Personalizētas grupas
     GroupByAccountAccounting=Grupēt pēc grāmatvedības konta
     AccountingAccountGroupsDesc=Šeit jūs varat definēt dažas grāmatvedības kontu grupas. Tie tiks izmantoti personificētiem grāmatvedības pārskatiem.
     ByAccounts=Pēc kontiem
     ByPredefinedAccountGroups=Iepriekš definētās grupas
    -ByPersonalizedAccountGroups=Personificētās grupas
    +ByPersonalizedAccountGroups=Personalizētās grupas
     ByYear=Pēc gada
     NotMatch=Nav iestatīts
     DeleteMvt=Delete Ledger lines
    @@ -204,7 +209,7 @@ TotalVente=Total turnover before tax
     TotalMarge=Total sales margin
     
     DescVentilCustomer=Aplūkojiet šeit klienta rēķina līniju sarakstu, kas saistītas (vai nav) ar produktu grāmatvedības kontu
    -DescVentilMore=Vairumā gadījumu, ja jūs izmantojat iepriekš definētus produktus vai pakalpojumus, un produkta / pakalpojuma kartē norādiet konta numuru, programma varēs veikt visu saistību starp jūsu rēķina līnijām un jūsu kontu plāna grāmatvedības kontu, tikai vienu klikšķi, izmantojot pogu <strong> "%s" </ strong>. Ja konts nav iestatīts uz produktu / pakalpojumu kartēm vai ja jums joprojām ir dažas rindiņas, kurām nav saistības nevienā kontā, izvēlnē "<strong> %s </ strong>" būs jāveic manuāla piesaistīšana.
    +DescVentilMore=Vairumā gadījumu, ja jūs izmantojat iepriekš definētus produktus vai pakalpojumus, un produkta / pakalpojuma kartē norādiet konta numuru, programma varēs veikt visu saistību starp jūsu rēķina līnijām un jūsu kontu plāna grāmatvedības kontu, tikai vienu klikšķi, izmantojot pogu <strong> "%s" </ strong>. Ja konts nav iestatīts uz produktu / pakalpojumu kartēm vai ja jums joprojām ir dažas līnijas, kurām nav saistības ar kontu, izvēlnē "<strong> %s </ strong>" būs jāveic manuāla piesaistīšana.
     DescVentilDoneCustomer=Konsultējieties šeit ar rindu rēķinu klientu sarakstu un to produktu uzskaites kontu
     DescVentilTodoCustomer=Piesaistiet rēķina līnijas, kas vēl nav saistītas ar produkta grāmatvedības kontu
     ChangeAccount=Izmainiet produktu / pakalpojumu grāmatvedības kontu izvēlētajām līnijām ar šādu grāmatvedības kontu:
    @@ -221,6 +226,7 @@ AutomaticBindingDone=Automātiska piesaistīšana pabeigta
     
     ErrorAccountancyCodeIsAlreadyUse=Error, you cannot delete this accounting account because it is used
     MvtNotCorrectlyBalanced=Kustība nav pareizi sabalansēta. Debit = %s | Kredīts = %s
    +Balancing=Līdzsvarošana
     FicheVentilation=Iesiešanas kartiņa
     GeneralLedgerIsWritten=Darījumi ir rakstīti grāmatvedībā
     GeneralLedgerSomeRecordWasNotRecorded=Daži darījumi nevarēja tikt publicēti žurnālā. Ja nav citas kļūdas ziņojuma, iespējams, ka tie jau tika publicēti.
    @@ -232,7 +238,7 @@ NotYetAccounted=Vēl nav uzskaitīti virsgrāmatā
     
     ## Admin
     ApplyMassCategories=Pielietot masu sadaļas
    -AddAccountFromBookKeepingWithNoCategories=Pieejamais aprēķins vēl nav personalizētajā grupā
    +AddAccountFromBookKeepingWithNoCategories=Pieejamais konts, kas vēl nav personalizētajā grupā
     CategoryDeleted=Grāmatvedības konta kategorija ir noņemta
     AccountingJournals=Grāmatvedības žurnāli
     AccountingJournal=Grāmatvedības žurnāls
    @@ -247,7 +253,7 @@ AccountingJournalType5=Izdevumu pārskats
     AccountingJournalType8=Inventārs
     AccountingJournalType9=Ir jauns
     ErrorAccountingJournalIsAlreadyUse=Šis žurnāls jau ir izmantots
    -AccountingAccountForSalesTaxAreDefinedInto=Piezīme. Pārdošanas nodokļa grāmatvedības konts ir norādīts izvēlnē <b> %s </ b> - <b> %s </ b>.
    +AccountingAccountForSalesTaxAreDefinedInto=Piezīme. Pārdošanas nodokļa grāmatvedības konts ir norādīts izvēlnē <b> %s </b>- <b> %s </b>.
     
     ## Export
     ExportDraftJournal=Eksporta žurnāla projekts
    @@ -262,7 +268,8 @@ Modelcsv_quadratus=Export towards Quadratus QuadraCompta
     Modelcsv_ebp=Eksports uz EBP
     Modelcsv_cogilog=Eksportēt uz Cogilog
     Modelcsv_agiris=Eksports uz Agirisu
    -Modelcsv_configurable=Eksportēt konfigurējams
    +Modelcsv_configurable=Eksportēt CSV konfigurējamu
    +Modelcsv_FEC=Eksporta FEC (L47 A pants) (pārbaude)
     ChartofaccountsId=Kontu konts. Id
     
     ## Tools - Init accounting account on product / service
    @@ -289,18 +296,18 @@ Formula=Formula
     ## Error
     SomeMandatoryStepsOfSetupWereNotDone=Daži obligāti uzstādīšanas soļi nav pabeigti, lūdzu, aizpildiet tos
     ErrorNoAccountingCategoryForThisCountry=No accounting account group available for country %s (See Home - Setup - Dictionaries)
    -ErrorInvoiceContainsLinesNotYetBounded=Jūs mēģināt žurnalizēt dažas rindiņas <strong> %s </ strong>, bet citas rindas vēl nav saistītas ar grāmatvedības kontu. Visu rēķinu līniju žurnālu publicēšana par šo rēķinu tiek noraidīta.
    +ErrorInvoiceContainsLinesNotYetBounded=Jūs mēģināt žurnalizēt dažas rindiņas <strong> %s </strong>, bet citas rindas vēl nav saistītas ar grāmatvedības kontu. Visu rēķinu līniju žurnālu publicēšana par šo rēķinu tiek noraidīta.
     ErrorInvoiceContainsLinesNotYetBoundedShort=Dažas rēķina rindiņas nav saistītas ar grāmatvedības kontu.
     ExportNotSupported=Izveidotais eksporta formāts šajā lapā netiek atbalstīts
    -BookeppingLineAlreayExists=Jau esošas līnijas grāmatvedībā
    +BookeppingLineAlreayExists=Rindas, kas jau pastāv grāmatvedībā
     NoJournalDefined=Nav definēts žurnāls
     Binded=Līnijas saistītas
     ToBind=Rindiņas saistīt
    -UseMenuToSetBindindManualy=Autodekcija nav iespējama, izmantojiet izvēlni <a href="%s"> %s </a>, lai padarītu saistošu manuāli
    +UseMenuToSetBindindManualy=Līnijas, kas vēl nav saistītas, izmantojiet izvēlni <a href="%s"> %s </a>, lai padarītu saistošu manuāli
     
     ## Import
     ImportAccountingEntries=Grāmatvedības ieraksti
     
    -WarningReportNotReliable=Brīdinājums, šis pārskats nav balstīts uz grāmatvedi, tāpēc grāmatvedībā nav modificēta darījuma modificēšana. Ja žurnāls ir atjaunināts, grāmatvedības skats ir precīzāks.
    +WarningReportNotReliable=Brīdinājums. Šis pārskats nav balstīts uz grāmatvedi, tādēļ tajā nav darījumu, kas Manuāli ir manuāli modificēts. Ja žurnāls ir atjaunināts, grāmatvedības skats ir precīzāks.
     ExpenseReportJournal=Izdevumu atskaites žurnāls
     InventoryJournal=Inventāra žurnāls
    diff --git a/htdocs/langs/lv_LV/admin.lang b/htdocs/langs/lv_LV/admin.lang
    index de9d9d1b455..4e68130e2d4 100644
    --- a/htdocs/langs/lv_LV/admin.lang
    +++ b/htdocs/langs/lv_LV/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Attīstība
     VersionUnknown=Nezināms
     VersionRecommanded=Ieteicams
     FileCheck=Failu veseluma pārbaudītājs
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=Šis rīks ļauj pārbaudīt failu integritāti un jūsu lietojumprogrammas iestatījumus, salīdzinot katru failu ar oficiālo. Var pārbaudīt arī dažu iestatīšanas konstantes vērtību. Varat izmantot šo rīku, lai noteiktu, vai, piemēram, hacker ir modificējis dažus failus.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Failu integritātes pārbaude ir pagājusi, taču ir pievienoti daži jauni faili.
     FileIntegritySomeFilesWereRemovedOrModified=Failu integritātes pārbaude neizdevās. Daži faili tika mainīti, noņemti vai pievienoti.
     GlobalChecksum=Globālā kontrolsumma
     MakeIntegrityAnalysisFrom=Veiciet lietojumprogrammu failu integritātes analīzi no
    @@ -30,14 +30,14 @@ SessionSaveHandler=Pārdevējs, lai saglabātu sesijas
     SessionSavePath=Uzglabāšanas sesijas lokalizācija
     PurgeSessions=Iztīrīt sesijas
     ConfirmPurgeSessions=Vai jūs tiešām vēlaties iztīrītu visas sesijas? Tas atvienos katru lietotāju (izņemot sevi).
    -NoSessionListWithThisHandler=Saglabāt sesija apdarinātājs konfigurēts jūsu PHP neļauj uzskaitīt visas darbojošās sesijas.
    +NoSessionListWithThisHandler=Saglabāt sesijas apstrādātāju, kas konfigurēts jūsu PHP, neļauj uzskaitīt visas darbojas sesijas.
     LockNewSessions=Bloķēt jaunas sesijas
    -ConfirmLockNewSessions=Vai jūs tiešām vēlaties, ierobežot jebkuru jaunu Dolibarr savienojumu. Pēc tam varēs pieslēgties tikai lietotājs<b>%s</b>.
    +ConfirmLockNewSessions=Vai tiešām vēlaties ierobežot jebkuru jaunu Dolibarr savienojumu ar sevi? Pēc tam varēs izveidot savienojumu tikai lietotājs <b> %s </b>.
     UnlockNewSessions=Noņemt savienojuma bloķēšanu
     YourSession=Jūsu sesija
    -Sessions=Lietotāju sesija
    +Sessions=Lietotāju sesijas
     WebUserGroup=Web servera lietotājs/grupa
    -NoSessionFound=Jūsu PHP, šķiet, neļauj uzskaitīt aktīvās sesijas. Katalogs, ko izmanto sesiju saglabāšanai (<b>%s</b>), var būt aizsargāts (piemēram, ar OS atļaujām vai PHP direktīvu open_basedir).
    +NoSessionFound=Šķiet, ka jūsu PHP nepieļauj aktīvo sesiju uzskaitījumu. Sarakstu (<b> %s </b>) saglabātais katalogs var tikt aizsargāts (piemēram, ar OS atļaujām vai PHP direktīvu open_basedir).
     DBStoringCharset=Datu bāzes kodējuma datu uzglabāšanai
     DBSortingCharset=Datu bāzes rakstzīmju kopa, lai kārtotu datus
     ClientCharset=Klienta kodējums
    @@ -65,11 +65,11 @@ DictionarySetup=Vārdnīcas iestatījumi
     Dictionary=Vārdnīcas
     ErrorReservedTypeSystemSystemAuto=Vērtību "sistēma" un "systemauto" veida tiek aizsargātas. Jūs varat izmantot "lietotājs", kā vērtība, lai pievienotu savu ierakstu
     ErrorCodeCantContainZero=Kods nevar saturēt 0 vērtību
    -DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
    +DisableJavascript=Atspējot JavaScript un Ajax funkcijas (ieteicams neredzīgām personām vai teksta pārlūkiem)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Pagaidiet, kamēr nospiediet taustiņu, pirms ievietojat trešo pušu kombinēto sarakstu saturu (tas var palielināt veiktspēju, ja jums ir liels skaits trešo daļu, bet tas ir mazāk ērts).
    -DelaiedFullListToSelectContact=Pagaidiet, kamēr nospiedat taustiņu, pirms ievietojat kontaktpersonu saraksta saturu (tas var palielināt veiktspēju, ja jums ir liels skaits kontaktu, bet tas ir mazāk ērti).
    +DelaiedFullListToSelectCompany=Pagaidiet, kamēr tiek nospiests taustiņš, pirms ievietojat trešo pušu saraksta saturu. <br> Tas var palielināt veiktspēju, ja jums ir liels skaits trešo personu, taču tas ir mazāk ērti.
    +DelaiedFullListToSelectContact=Pagaidiet, līdz tiek nospiests taustiņš, pirms ievietojat kontaktpersonu saraksta saturu. <br> Tas var palielināt veiktspēju, ja jums ir liels kontaktpersonu skaits, bet tas ir mazāk ērti).
     NumberOfKeyToSearch=Rakstzīmju skaits, lai iedarbinātu meklēšanu: %s
     NotAvailableWhenAjaxDisabled=Nav pieejama, kad Ajax ir bloķēts
     AllowToSelectProjectFromOtherCompany=Trešās puses dokumentā var izvēlēties projektu, kas ir saistīts ar citu trešo personu
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Priekšskatījums nav pieejams
     ThemeCurrentlyActive=aktīvā tēma
     CurrentTimeZone=Laika josla PHP (servera)
     MySQLTimeZone=Laika zona MySql (datubāze)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Datus uzglabā un nodod atpakaļ datubāzes serverim tā, it kā tie tiktu turēti kā iesniegtā virkne. Laika josla ir spēkā tikai tad, ja tiek izmantota funkcija UNIX_TIMESTAMP (kuru nedrīkst izmantot Dolibarr, tāpēc datubāzei TZ nedrīkst būt nekādas ietekmes, pat ja tas ir mainīts pēc datu ievadīšanas).
     Space=Telpa
     Table=Tabula
     Fields=Lauki
    @@ -91,7 +91,7 @@ NextValueForInvoices=Nākošā vērtība (rēķini)
     NextValueForCreditNotes=Nākošā vērtība (kredīta piezīmes)
     NextValueForDeposit=Nākamā vērtība (pirmā iemaksa)
     NextValueForReplacements=Tālāk vērtība (nomaiņa)
    -MustBeLowerThanPHPLimit=Piezīme: jūsu PHP ierobežo katra failu augšupielādes lielumu, lai <b>%s</b> %s, neatkarīgi no šī parametra vērtība ir
    +MustBeLowerThanPHPLimit=Piezīme: jūsu PHP ierobežo katra failu augšupielādes lielumu <b>%s</b> %s, neatkarīgi no šī parametra vērtība ir
     NoMaxSizeByPHPLimit=Piezīme: Nav limits tiek noteikts jūsu PHP konfigurācijā
     MaxSizeForUploadedFiles=Maksimālais augšupielādējamo failu izmērs (0 nepieļaut failu augšupielādi)
     UseCaptchaCode=Izmantot grafisko kodu (CAPTCHA) pieteikšanās lapā
    @@ -126,8 +126,8 @@ PHPTZ=PHP servera Laika zona
     DaylingSavingTime=Vasaras laiks
     CurrentHour=PHP laiks (servera)
     CurrentSessionTimeOut=Pašreizējais sesijas taimauts
    -YouCanEditPHPTZ=Lai iestatītu citu PHP laika joslu (nav nepieciešams), varat mēģināt pievienot failu .htaccess ar tādu līniju kā "SetEnv TZ Europe / Paris"
    -HoursOnThisPageAreOnServerTZ=Brīdinājums, pretēji citiem ekrāniem, šīs lapas stundas neatrodas jūsu vietējā laika joslā, bet gan servera laika joslai.
    +YouCanEditPHPTZ=Lai iestatītu citu PHP laika joslu (nav nepieciešams), varat mēģināt pievienot .htaccess failu ar tādu līniju kā "SetEnv TZ Europe / Paris"
    +HoursOnThisPageAreOnServerTZ=Brīdinājums, pretēji citiem ekrāniem, šīs lapas stundas neatrodas jūsu vietējā laika joslā, bet servera laika joslā.
     Box=Logrīks
     Boxes=Logrīki
     MaxNbOfLinesForBoxes=Maksimālais logrīku līniju skaits
    @@ -144,14 +144,14 @@ SystemToolsArea=Sistēmas rīku iestatīšana
     SystemToolsAreaDesc=Šī sadaļa piedāvā administrēšanas funkcijas. Lietojiet izvēlni, lai izvēlētos funkciju kuru Jūs meklējat.
     Purge=Tīrīt
     PurgeAreaDesc=This page allows you to delete all files generated or stored by Dolibarr (temporary files or all files in <b>%s</b> directory). Using this feature is not necessary. It is provided as a workaround for users whose Dolibarr is hosted by a provider that does not offer permissions to delete files generated by the web server.
    -PurgeDeleteLogFile=Dzēsiet žurnāla failus, tostarp <b> %s </ b>, kas definēti Syslog modulim (nav datu pazaudēšanas riska).
    -PurgeDeleteTemporaryFiles=Delete all temporary files (no risk of losing data)
    +PurgeDeleteLogFile=Dzēsiet žurnāla failus, tostarp <b> %s </b>, kas definēti Syslog modulim (nav datu pazaudēšanas riska).
    +PurgeDeleteTemporaryFiles=Dzēst visus pagaidu failus (nav datu pazaudēšanas riska)
     PurgeDeleteTemporaryFilesShort=Dzēst pagaidu failus
     PurgeDeleteAllFilesInDocumentsDir=Dzēst visus failus direktorijā <b>%s</b>. Pagaidu failus un arī datu bāzes rezerves dumpus, pievienotie faili pievienoti elementiem (trešās personas, rēķini, ...) un augšupielādēta ECM modulī tiks dzēsti.
     PurgeRunNow=Tīrīt tagad
     PurgeNothingToDelete=Nav mapes vai failu, kurus jādzēš.
     PurgeNDirectoriesDeleted=<b>%s</b> faili vai direktorijas dzēsti.
    -PurgeNDirectoriesFailed=Neizdevās izdzēst failus vai direktorijas <b> %s </ b>.
    +PurgeNDirectoriesFailed=Neizdevās izdzēst failus vai direktorijas <b>%s</b>.
     PurgeAuditEvents=Tīrīt visus drošības ierakstus
     ConfirmPurgeAuditEvents=Vai jūs tiešām vēlaties, lai iztīrīt visus drošības notikumus? Visi drošības žurnāli tiks dzēsti, nekādi citi dati netiks dzēsti.
     GenerateBackup=Izveidot rezerves kopiju
    @@ -186,33 +186,33 @@ NameColumn=Nosaukums kolonnas
     ExtendedInsert=Pagarināts INSERT
     NoLockBeforeInsert=Nav atslēga komandas ap INSERT
     DelayedInsert=Kavējas ieliktnis
    -EncodeBinariesInHexa=Šifrēt bināro datu heksadecimālo
    +EncodeBinariesInHexa=Šifrēt bināros datus heksadecimālajos
     IgnoreDuplicateRecords=Ignorēt dubulto ierakstu kļūdas (INSERT IGNORE)
     AutoDetectLang=Automātiski noteikt (pārlūka valoda)
     FeatureDisabledInDemo=Iespēja bloķēta demo versijā
     FeatureAvailableOnlyOnStable=Funkcija ir pieejama tikai oficiālajā stabilā versijā
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Logrīki ir sastāvdaļas, kas parāda informāciju, kuru varat pievienot, lai personalizētu dažas lapas. Varat izvēlēties starp widget parādīšanu, izvēloties mērķa lapu un noklikšķinot uz Aktivizēt, vai noklikšķinot uz atkritnes, lai to atspējotu.
     OnlyActiveElementsAreShown=Tikai elementus no <a href="%s">iespējotu moduļi</a> tiek parādīts.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    -ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=Ja to ļauj atļaujas jūsu failu sistēmā, varat izmantot šo rīku, lai izvietotu ārēju moduli. Tad modulis būs redzams cilnē <strong> %s </ strong>.
    +ModulesDesc=Moduļi / lietojumprogrammas nosaka, kādas funkcijas ir pieejamas programmatūrā. Daži moduļi pieprasa atļauju lietotājiem pēc moduļa aktivizēšanas. Noklikšķiniet uz ieslēgšanas / izslēgšanas pogas, lai iespējotu / atspējotu moduli / programmu.
    +ModulesMarketPlaceDesc=Jūs varat atrast vairāk moduļu, lai lejupielādētu ārējās tīmekļa vietnēs internetā ...
    +ModulesDeployDesc=Ja atļaujas jūsu failu sistēmā to atļauj, varat izmantot šo rīku, lai izvietotu ārēju moduli. Tad modulis būs redzams cilnē <strong> %s </ strong>.
     ModulesMarketPlaces=Atrastt ārējo lietotni / moduļus
     ModulesDevelopYourModule=Izstrādājiet savu lietotni / moduļus
    -ModulesDevelopDesc=Jūs varat attīstīt vai atrast partneri, kas izstrādās jums, jūsu personalizēto moduli
    -DOLISTOREdescriptionLong=Tā vietā, lai pārlūkotu <a href="https://www.dolistore.com"> www.dolistore.com </a> tīmekļa vietni, lai atrastu ārēju moduli, varat izmantot šo iegulto rīku, kas veic meklēšanu ārējā tirgus vieta jums (var būt lēns, nepieciešams interneta pieslēgums) ...
    +ModulesDevelopDesc=Varat arī izveidot savu moduli vai atrast partneri, lai to izveidotu jums.
    +DOLISTOREdescriptionLong=Tā vietā, lai pārlūkotu <a href="https://www.dolistore.com"> www.dolistore.com </a> tīmekļa vietni, lai atrastu ārēju moduli, varat izmantot šo iegulto rīku, kas veiks meklēšanu vietnē ārējā tirgus vieta jums (var būt lēns, nepieciešams interneta pieslēgums) ...
     NewModule=Jauns
     FreeModule=Bezmaksas
     CompatibleUpTo=Savietojams ar versiju %s
     NotCompatible=Šis modulis, šķiet, nav savietojams ar jūsu Dolibarr %s (Min %s - Max %s).
    -CompatibleAfterUpdate=Šis modulis prasa atjaunināt Dolibarr %s (Min %s - Max %s).
    +CompatibleAfterUpdate=Šis modulis prasa atjaunināt Dolibarr %s (Min %s - Maks %s).
     SeeInMarkerPlace=Skatiet Marketplace
     Updated=Atjaunots
     Nouveauté=Jaunums
     AchatTelechargement=Pirkt / lejupielādēt
     GoModuleSetupArea=Lai izvietotu / instalētu jaunu moduli, dodieties uz moduļa iestatīšanas apgabalu vietnē <a href="%s"> %s </a>.
     DoliStoreDesc=DoliStore ir oficiālā mājaslapa Dolibarr ERP / CRM papildus moduļiem
    -DoliPartnersDesc=Saraksts ar uzņēmumiem, kas piedāvā pielāgotus izstrādātus moduļus vai funkcijas (Piezīme: ikviens, kas pieredzējis PHP programmēšanu, var nodrošināt pielāgotu izstrādi atklātā pirmkoda projektam)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=Uzņēmumi, kas piedāvā pielāgotus izstrādātus moduļus vai funkcijas. <br> Piezīme: tā kā Dolibarr ir atvērtā koda programma, <i> ikviens </ i>, kurš ir pieredzējis PHP programmēšanā, var izveidot moduli.
    +WebSiteDesc=Ārējās vietnes vairākiem papildinājumiem (bez kodols) moduļiem ...
     DevelopYourModuleDesc=Daži risinājumi, lai izstrādātu savu moduli ...
     URL=Saite
     BoxesAvailable=Pieejamie logrīki
    @@ -227,9 +227,9 @@ Security=Drošība
     Passwords=Paroles
     DoNotStoreClearPassword=Neglabāt nešifrētas paroles datubāzē bet izmantot šifrētas (aktivizācija ieteicama)
     MainDbPasswordFileConfEncrypted=Datubāzes paroli šifrēti conf.php (aktivēt ieteicams)
    -InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
    +InstrucToEncodePass=Lai paroli šifrētu <b> conf.php </b> failā, nomainiet rindiņu <br><b> $ dolibarr_main_db_pass = "..."; </b>  <br>ar<br><b> $ dolibarr_main_db_pass = "crypted: %s"; </b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Ģenerēto PDF failu aizsardzība (aktivizēta NAV ieteicama, masveida pdf veidošanai)
    +ProtectAndEncryptPdfFiles=Radīto PDF failu aizsardzība NAV ieteicama (pārtraukumi masas PDF paaudzes)
     ProtectAndEncryptPdfFilesDesc=Aizsardzība PDF dokumentu saglabā to pieejamu lasīt un izdrukāt ar jebkuru PDF pārlūkprogrammu. Tomēr, rediģēšana un kopēšana nav iespējams vairs. Ņemiet vērā, ka, izmantojot šo funkciju veidojot kopējos apvienotos pdf nedarbojas (piemēram, neapmaksātiem rēķiniem). 
     Feature=Iespēja
     DolibarrLicense=Licence
    @@ -240,14 +240,14 @@ OfficialWiki=Dolibarr Wiki dokumentācija
     OfficialDemo=Dolibarr tiešsaistes demo
     OfficialMarketPlace=Oficiālais tirgus vieta ārējiem moduļiem/papildinājumiem
     OfficialWebHostingService=Referenced web hosting services (Cloud hosting)
    -ReferencedPreferredPartners=Preferred Partners
    +ReferencedPreferredPartners=Ieteicamie partneri
     OtherResources=Citi resursi
     ExternalResources=Ārējie resursi
     SocialNetworks=Sociālie tīkli
     ForDocumentationSeeWiki=Par lietotāju vai attīstītājs dokumentācijas (Doc, FAQ ...), <br> ieskatieties uz Dolibarr Wiki: <br> <a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=Attiecībā uz jebkuru citu jautājumu / palīdzēt, jūs varat izmantot Dolibarr forumu: <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=Šī sadaļa var palīdzēt jums, lai saņemtu palīdzības dienesta atbalstu Dolibarr programmai.
    -HelpCenterDesc2=Daži no šo pakalpojumu daļa ir pieejama <b>tikai angļu valodā.</b>
    +HelpCenterDesc1=Šeit ir daži resursi, lai iegūtu Dolibarr palīdzību un atbalstu.
    +HelpCenterDesc2=Daži no šiem resursiem ir pieejami tikai <b> angliski </b>.
     CurrentMenuHandler=Pašreizējais izvēlnes apstrādātājs
     MeasuringUnit=Mērvienības
     LeftMargin=Kreisā robeža
    @@ -262,31 +262,35 @@ NoticePeriod=Paziņojuma periods
     NewByMonth=Jauns pa mēnešiem
     Emails=E-pasti
     EMailsSetup=E-pastu iestatīšana
    -EMailsDesc=Šī lapa ļauj jums pārrakstīt jūsu PHP parametrus e-pasta nosūtīšanai. Vairumā gadījumu uz Unix / Linux OS, jūsu PHP iestatīšana ir pareiza, un šie parametri ir bezjēdzīgi.
    +EMailsDesc=Šī lapa ļauj jums ignorēt jūsu noklusējuma PHP parametrus e-pasta sūtīšanai. Vairumā gadījumu uz Unix / Linux OS, PHP iestatīšana ir pareiza, un šie parametri nav vajadzīgi.
     EmailSenderProfiles=E-pasta sūtītāju profili
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS Ports (Pēc noklusējuma php.ini: <b>%s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS serveris (Pēc noklusējuma php.ini: <b>%s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS Port (Nav noteikts uz PHP uz Unix, piemēram, sistēmas)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Host (Nav noteikts uz PHP uz Unix, piemēram, sistēmas)
    -MAIN_MAIL_EMAIL_FROM=Sūtītāja e-pasta ziņojums automātiskajiem e-pasta ziņojumiem (pēc noklusējuma lietotnē php.ini: <b> %s </ b>)
    -MAIN_MAIL_ERRORS_TO=Eemails, ko izmanto kļūdas gadījumā, atgriež e-pastus (laukos 'Kļūdas-To' e-pasta vēstulēs)
    -MAIN_MAIL_AUTOCOPY_TO= Nosūtīt sistemātiski visu nosūtīto e-pastu slēptu kopiju uz
    -MAIN_DISABLE_ALL_MAILS=Atspējot visus e-pasta sūtījumus (testēšanas nolūkos vai demos)
    +MAIN_MAIL_SMTP_PORT=SMTP / SMTPS ports (noklusējuma vērtība php.ini: <b> %s </b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS Host (noklusējuma vērtība php.ini: <b> %s </b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS ports (nav definēts PHP uz Unix līdzīgām sistēmām)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS resursdators (nav definēts PHP uz Unix līdzīgām sistēmām)
    +MAIN_MAIL_EMAIL_FROM=Sūtītāja e-pasta ziņojums automātiskajiem e-pasta ziņojumiem (noklusējuma vērtība php.ini: <b> %s </b>)
    +MAIN_MAIL_ERRORS_TO=E-pasts, ko izmanto, lai kļūtu, atgriež e-pastus (laukos 'Kļūdas-To' e-pasta ziņojumos)
    +MAIN_MAIL_AUTOCOPY_TO= Kopija (Bcc) visi nosūtītie e-pasta ziņojumi uz
    +MAIN_DISABLE_ALL_MAILS=Atspējot visu e-pasta sūtīšanu (izmēģinājuma nolūkos vai demonstrācijās)
     MAIN_MAIL_FORCE_SENDTO=Nosūtiet visus e-pastus (nevis reāliem saņēmējiem, lai veiktu pārbaudes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Pievienojiet darbinieku lietotājus ar e-pasta adresi atļauto sarakstos
    -MAIN_MAIL_SENDMODE=Metode ko izmantot sūtot e-pastus
    -MAIN_MAIL_SMTPS_ID=SMTP ID ja autentificēšana nepieciešama
    -MAIN_MAIL_SMTPS_PW=SMTP parole ja autentificēšanās nepieciešama
    -MAIN_MAIL_EMAIL_TLS= Izmantot TLS (SSL) šifrēšanu
    -MAIN_MAIL_EMAIL_STARTTLS= Izmantot TLS (SSL) šifrēšanu
    -MAIN_DISABLE_ALL_SMS=Atslēgt visas SMS sūtīšanas (izmēģinājuma nolūkā vai demo)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Pievienojiet darbinieka lietotājus ar e-pasta adresi atļauto adresātu sarakstā
    +MAIN_MAIL_SENDMODE=E-pasta sūtīšanas veids
    +MAIN_MAIL_SMTPS_ID=SMTP ID (ja servera nosūtīšanai nepieciešama autentifikācija)
    +MAIN_MAIL_SMTPS_PW=SMTP parole (ja servera nosūtīšanai nepieciešama autentificēšana)
    +MAIN_MAIL_EMAIL_TLS=Izmantot TLS (SSL) šifrēšanu
    +MAIN_MAIL_EMAIL_STARTTLS=Izmantojiet TLS (STARTTLS) šifrēšanu
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Izmantojiet DKIM, lai ģenerētu e-pasta parakstu
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=E-pasta domēns lietošanai ar DKIM
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=DKIM selektora nosaukums
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Privāta atslēga DKIM parakstīšanai
    +MAIN_DISABLE_ALL_SMS=Atspējot visas īsziņu sūtīšanas (testa nolūkos vai demos)
     MAIN_SMS_SENDMODE=Izmantojamā metode SMS sūtīšanai
    -MAIN_MAIL_SMS_FROM=Noklusētais sūtītāja tālruņa numurs SMS sūtīšanai
    -MAIN_MAIL_DEFAULT_FROMTYPE=Nosūtītāja e-pasts pēc noklusējuma manuālai sūtīšanai (lietotāja e-pasts vai uzņēmuma e-pasts)
    +MAIN_MAIL_SMS_FROM=Noklusētais sūtītāja tālruņa numurs SMS nosūtīšanai
    +MAIN_MAIL_DEFAULT_FROMTYPE=Noklusējuma sūtītāja e-pasta ziņojums manuālai sūtīšanai (lietotāja e-pasts vai uzņēmuma e-pasts)
     UserEmail=Lietotāja e-pasts
     CompanyEmail=Uzņēmuma e-pasts
     FeatureNotAvailableOnLinux=Iezīme nav pieejams Unix, piemēram, sistēmas. Pārbaudi savu sendmail programmai vietas.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=Ja šīs valodas tulkojums nav pabeigts vai jūs atradāt kļūdas, varat to labot, rediģējot failus katalogā <b> langs / %s </b> un iesniedziet izmaiņas vietnē www.transifex.com/dolibarr-association/dolibarr/.
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Moduļa iestatīšana
     ModulesSetup=Moduļu/Aplikāciju iestatīšana
    @@ -309,17 +313,17 @@ DoNotUseInProduction=Neizmantot produkcijā
     ThisIsProcessToFollow=Šie ir soļi, kas jāipilda:
     ThisIsAlternativeProcessToFollow=Tas ir alternatīvs iestatījums, lai apstrādātu manuāli:
     StepNb=Solis %s
    -FindPackageFromWebSite=Atrast paku, kas nodrošina iespēju,  kura jums ir nepieciešama (piemēram oficiālajā tīmekļa vietnē %s).
    +FindPackageFromWebSite=Atrodiet paketi, kurā ir norādītas vēlamās funkcijas (piemēram, oficiālajā tīmekļa vietnē %s).
     DownloadPackageFromWebSite=Lejupielādēt arhīvu (piem. no oficialās mājas lapas %s).
    -UnpackPackageInDolibarrRoot=Atarhivēt paku Dolibarr servera direktorijā, kas paredzēta Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=Lai izvietotu / instalētu ārēju moduli, izpakojiet iepakotos failus serveru direktorijā, kas ir saistīts ar moduļiem: <b> %s </ b>
    -SetupIsReadyForUse=Moduļa izvietošana ir pabeigta. Tomēr jums ir jāiespējo un jāiestata modulis jūsu programmā, dodoties uz lapu, lai mainītu moduļu iestatījumus: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Ielieciet / noņemiet iepakotos failus servera direktorijā, kas veltīts Dolibarr: <b> %s </b>
    +UnpackPackageInModulesRoot=Lai izvietotu / instalētu ārējo moduli, izpakotu / izjauktu iepakotos failus ārējo moduļu servera direktorijā: <br> <b> %s </ b>
    +SetupIsReadyForUse=Moduļa izvietošana ir pabeigta. Tomēr savā pieteikumā ir jāiespējo un jāiestata modulis, dodoties uz lapu iestatīšanas moduļiem: <a href="%s"> %s </a>.
     NotExistsDirect=Alternatīva saknes direktorijs nav definēta.<br>
     InfDirAlt=Kopš 3 versijas, ir iespējams noteikt alternatīvu sakne directory.Tas ļauj jums saglabāt, tajā pašā vietā, papildinājumus un pielāgotas veidnes.<br> Jums tikai jāizveido direktoriju Dolibarr saknē (piemēram: custom).<br>
    -InfDirExample=<br> Pēc tam paziņojiet to failā <strong> conf.php </ strong> <br> $ dolibarr_main_url_root_alt = "/ custom" <br> <br> dolibarr_main_document_root_alt = '/ path / of / dolibarr / htdocs / custom' <br> Ja šīm rindiņām tiek komentētas ar "#", lai tās iespējotu, vienkārši izmainiet, noņemot "#" rakstzīmi.
    -YouCanSubmitFile=Šajā solī jūs varat iesniegt moduļu paketes zip failu šeit:
    +InfDirExample=<br> Pēc tam ierakstiet to failā <strong>conf.php </strong><br>$ dolibarr_main_url_root_alt = "/custom" <br>$dolibarr_main_document_root_alt = '/path/of/dolibarr/htdocs/ custom' <br> Ja šīm rindiņas ir komentētas ar "#", lai tās iespējotu, vienkārši noņemiet "#" simbolu.
    +YouCanSubmitFile=Varat arī augšupielādēt moduļa .zip failu paketi:
     CurrentVersion=Dolibarr pašreizējā versija
    -CallUpdatePage=Go to the page that updates the database structure and data: %s.
    +CallUpdatePage=Pārejiet uz lapu, kura atjaunina datu bāzes struktūru un datus: %s.
     LastStableVersion=Jaunākā stabilā versija
     LastActivationDate=Jaunākais aktivizācijas datums
     LastActivationAuthor=Jaunākais aktivizētāja autors
    @@ -329,7 +333,7 @@ WithCounter=Pārvaldīt skaitītāju
     GenericMaskCodes=Jūs varat ievadīt jebkuru numerācijas masku. Šajā maska, šādus tagus var izmantot: <br> <b>{000000}</b> atbilst skaitam, kas tiks palielināts par katru %s. Ievadīt tik daudz nullēm, kā vajadzīgajā garumā letes. Skaitītājs tiks pabeigts ar nullēm no kreisās puses, lai būtu tik daudz nullēm kā masku. <br> <b>{000000 000}</b> tāds pats kā iepriekšējais, bet kompensēt atbilst noteiktam skaitam pa labi uz + zīmi tiek piemērots, sākot ar pirmo %s. <br> <b>{000000 @ x}</b> tāds pats kā iepriekšējais, bet skaitītājs tiek atiestatīts uz nulli, kad mēnesī x ir sasniegts (x no 1 līdz 12, 0 vai izmantot agri no finanšu gada mēnešiem, kas noteiktas konfigurācijas, 99 vai atiestatīt uz nulli katru mēnesi ). Ja šis variants tiek izmantots, un x ir 2 vai vairāk, tad secība {gggg} {mm} vai {GGGG} {mm} ir arī nepieciešama. <br> <b>{Dd}</b> diena (no 01 līdz 31). <br> <b>{Mm}</b> mēnesi (no 01 līdz 12). <br> <b>{Yy}, {GGGG}</b> vai <b>{y}</b> gadu vairāk nekā 2, 4 vai 1 numuri. <br>
     GenericMaskCodes2=<b>{cccc}</b> the client code on n characters<br><b>{cccc000}</b> the client code on n characters is followed by a counter dedicated for customer. This counter dedicated to customer is reset at same time than global counter.<br><b>{tttt}</b> The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.<br>
     GenericMaskCodes3=Visas citas rakstzīmes masku paliks neskartas.<br>Atstarpes nav atļautas.<br>
    -GenericMaskCodes4a=<u>Example on the 99th %s of the third party TheCompany, with date 2007-01-31:</u><br>
    +GenericMaskCodes4a=<u> Piemērs 99. %s no trešās personas TheCompany, ar datumu 2007-01-31: </u><br>
     GenericMaskCodes4b=<u>Piemērs trešā persona veidota 2007-03-01:</u><br>
     GenericMaskCodes4c=<u>Piemērs produkts veidots 2007-03-01:</u><br>
     GenericMaskCodes5=<b>ABC{yy}{mm}-{000000}</b> will give <b>ABC0701-000099</b><br><b>{0000+100@1}-ZZZ/{dd}/XXX</b> will give <b>0199-ZZZ/31/XXX</b><br><b>IN{yy}{mm}-{0000}-{t}</b> will give <b>IN0701-0099-A</b> if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI'
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Apskatiet wiki lapu, lai uzzinātu visu dalībnieku un to orga
     UseACacheDelay= Kavēšanās caching eksporta atbildes sekundēs (0 vai tukšs bez cache)
     DisableLinkToHelpCenter=Paslēpt saites <b>"vajadzīga palīdzība vai atbalsts"</b> pieteikšanās lapā
     DisableLinkToHelp=Noslēpt saiti uz tiešsaistes palīdzību "<b>%s</b>"
    -AddCRIfTooLong=Nav automātiska iesaiņošanas, tādēļ, ja līnija ir no lapas uz dokumentiem, jo ​​pārāk ilgi, jums ir pievienot sev pārvadāšanas atdevi textarea.
    -ConfirmPurge=Vai jūs tiešām vēlaties, lai izpildītu šo attīrīta? <br> Tas izdzēsīs noteikti visus savus datu failus ar nekādi atjaunot to (ECM failus, pievienotos failus ...).
    +AddCRIfTooLong=Nav automātiskas teksta ietīšanas, pārāk garš teksts netiks parādīts dokumentos. Ja nepieciešams, lūdzu, pievienojiet teksta laukā tekstu.
    +ConfirmPurge=Vai tiešām vēlaties izpildīt šo tīrīšanu? <br> Tas neatgriezeniski izdzēsīs visus jūsu datu failus, tos nevarēs atjaunot (ECM faili, pievienoti faili ...).
     MinLength=Minimālais garums
     LanguageFilesCachedIntoShmopSharedMemory=Faili .lang ielādēti kopējā atmiņā
     LanguageFile=Valodas fails
    -ExamplesWithCurrentSetup=Piemēri ar pašreizējiem iestatījumiem
    +ExamplesWithCurrentSetup=Piemēri ar pašreizējo konfigurāciju
     ListOfDirectories=Saraksts OpenDocument veidnes katalogi
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Skaits ODT / ODS veidnes failiem atrast šajās katalogi
    +NumberOfModelFilesFound=ODT / ODS veidņu failu skaits, kas atrodams šajos katalogos
     ExampleOfDirectoriesForModelGen=Piemēri sintaksi: <br> c: \\ mydir <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Lai uzzinātu, kā izveidot savu odt dokumentu veidnes, pirms uzglabājot tos šajos katalogi, lasīt wiki dokumentus:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Galvenais, lai izmantotu Web Services (parametrs "doliba
     TestSubmitForm=Ievades testa forma
     ThisForceAlsoTheme=Izmantojot šo izvēlni vadītājs būs arī izmantot savu tēmu kāds ir lietotāja izvēles. Arī šī izvēlne vadītājs specializējies smartphones nav strādā uz visām viedtālrunis. Izmantot citu izvēlnes pārvaldnieku, ja jums rodas problēmas jums.
     ThemeDir=Izskata katalogs
    -ConnectionTimeout=Savienojuma taimauts
    +ConnectionTimeout=Savienojuma beigu laiks
     ResponseTimeout=Atbildes taimauts
     SmsTestMessage=Testa ziņojums no __ PHONEFROM__ to __ PHONETO__
     ModuleMustBeEnabledFirst=Modulim <b>%s</b> jābūt aktivizētam vispirms, ja jūs vēlaties izmantot šo funkciju.
     SecurityToken=Atslēga uz drošu saiti
    -NoSmsEngine=Nav SMS sūtītšanas iespēja pieejama. SMS sūtīšanas iespēja nav uzstādītas ar noklusējuma instalāciju (tāpēc, ka tas ir atkarīgs no ārēja piegādātāja), bet jūs varat atrast dažas sms sūtīšanas iespējas %s
    +NoSmsEngine=Nav pieejams SMS sūtītāju pārvaldnieks. SMS sūtītāju pārvaldnieks nav instalēts ar noklusējuma izplatīšanu, jo tas ir atkarīgs no ārējā piegādātāja, taču jūs varat atrast kādu no %s
     PDF=PDF
    -PDFDesc=Jūs varat iestatīt katru pasaules iespējas, kas saistītas ar PDF paaudzes
    +PDFDesc=Varat iestatīt katru globālo opciju, kas saistīta ar PDF ģenerēšanu
     PDFAddressForging=Noteikumi veidojot adreses lauku
     HideAnyVATInformationOnPDF=Slēpt visu ar pārdošanas nodokli / PVN saistīto informāciju par radīto PDF failu
     PDFRulesForSalesTax=Pārdošanas nodokļa / PVN noteikumi
     PDFLocaltax=Noteikumi par %s
    -HideLocalTaxOnPDF=Slēpt %s likmi pdf kolonnas nodokļu pārdošanas
    +HideLocalTaxOnPDF=Slēpt %s likmi pdf kolonnas nodokļu pārdošanā
     HideDescOnPDF=Slēpt produktu aprakstu radītos PDF
     HideRefOnPDF=Slēpt produktu ref. izveidotajos PDF
     HideDetailsOnPDF=Slēpt produktu līnijas detaļas izveidotajos PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametri, lai nodrošinātu drošas saites
     SecurityTokenIsUnique=Izmantojiet unikālu securekey parametrs katram URL
     EnterRefToBuildUrl=Ievadiet atsauci objektam %s
     GetSecuredUrl=Saņemt aprēķināto URL
    -ButtonHideUnauthorized=Slēpt pogas, kas nav pieejamas nevis rādīt tās pelēcīgas
    +ButtonHideUnauthorized=Slēpt pogas ne-admin lietotājiem, lai veiktu nesankcionētas darbības, nevis parādīt pelēkās pogas, kas ir atspējotas
     OldVATRates=Vecā PVN likme
     NewVATRates=Jaunā PVN likme
     PriceBaseTypeToChange=Pārveidot par cenām ar bāzes atsauces vērtību, kas definēta tālāk
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Izvēlēties sarakstu
     ExtrafieldSelectList = Izvēlieties kādu no tabulas
     ExtrafieldSeparator=Atdalītājs (nevis lauks)
     ExtrafieldPassword=Parole
    -ExtrafieldRadio=Radio pogas (tikai izvēlei)
    +ExtrafieldRadio=Radio pogas (tikai viena izvēle)
     ExtrafieldCheckBox=Izvēles rūtiņas
     ExtrafieldCheckBoxFromList=Izvēles rūtiņas no tabulas
     ExtrafieldLink=Saite uz objektu
     ComputedFormula=Aprēķinātais lauks
     ComputedFormulaDesc=Šeit varat ievadīt formulu, izmantojot citas objekta īpašības vai jebkuru PHP kodēšanu, lai iegūtu dinamisku aprēķinātu vērtību. Varat izmantot visas PHP saderīgās formulas, tostarp "?" nosacījumu operators un pēc globāla objekta: <strong> $ db, $ conf, $ langs, $ mysoc, $ user, $ object </ strong>. <br> <strong> BRĪDINĀJUMS </ strong>: tikai dažas $ objekts var būt pieejams. Ja jums ir vajadzīgas īpašības, kas nav ielādētas, vienkārši iegūstiet sev objektu savā formulā kā otrajā piemērā. <br> Izmantojot aprēķināto lauku, jūs nevarat ievadīt sev jebkādu vērtību no saskarnes. Arī tad, ja ir sintakses kļūda, formula var atgriezties neko. <br> <br> Formulas piemērs: <br> $ object-> id <10? ($ object-> id / 2, 2): ($ object-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2) <br> <br> Piemērs, lai atkārtoti ielādētu objektu <br> (($ reloadedobj = jauns Societe ($ db)) && ($ reloadedobj-> fetch ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj- rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1' <br> <br> Cits piemērs formulas, lai piespiestu objekta un tā vecāka objekta slodzi: <br> (($ reloadedobj = jauns uzdevums ($ db)) && ($ reloadedobj-> fetch ($ object-> id)> 0) && ($ secondloadedobj = jauns projekts ($ db)) && ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project )> 0))? $ secondloadedobj-> ref: 'Vecāks projekts nav atrasts'
    -ExtrafieldParamHelpPassword=Saglabājiet šo lauku tukša nozīmē, ka vērtība tiks saglabāta bez šifrēšanas (laukam jābūt tikai paslēptai ar zvaigznīti uz ekrāna). <br> Uzstādīt šeit vērtību "auto", lai izmantotu noklusējuma šifrēšanas kārtulu, lai saglabātu paroli datubāzē (pēc tam vērtība lasīt būs hash only, nekādā veidā noturēt sākotnējo vērtību)
    +ExtrafieldParamHelpPassword=Atstājot šo lauku tukšu, tas nozīmē, ka šī vērtība tiks saglabāta bez šifrēšanas (laukam jābūt paslēptai tikai ar zvaigznīti uz ekrāna). <br> Iestatiet 'auto', lai izmantotu noklusējuma šifrēšanas kārtulu, lai saglabātu paroli datubāzē (pēc tam vērtība lasīt būs ashh tikai, nav iespējams izgūt sākotnējo vērtību)
     ExtrafieldParamHelpselect=Vērtību sarakstam jābūt līnijām ar formāta atslēgu, vērtību (ja taustiņš nevar būt "0") <br> <br> piemēram: <br> 1, vērtība 1 <br> 2, vērtība 2 <br> kods3, vērtība3 < br> ... <br> <br> Lai sarakstu izveidotu atkarībā no cita papildinoša atribūtu saraksta: <br> 1, value1 | options_ <i> parent_list_code </ i>: parent_key <br> 2, value2 | options_ <i> parent_list_code </ i>: parent_key <br> <br> Lai saraksts būtu atkarīgs no cita saraksta: <br> 1, value1 | <i> parent_list_code </ i>: parent_key <br> 2, value2 | <i> parent_list_code </ i>: parent_key
     ExtrafieldParamHelpcheckbox=Vērtību sarakstam jābūt līnijām ar formāta atslēgu, vērtību (ja taustiņš nevar būt "0") <br> <br> piemēram: <br> 1, vērtība 1 <br> 2, vērtība 2 <br> 3, vērtība 3 < br> ...
     ExtrafieldParamHelpradio=Vērtību sarakstam jābūt līnijām ar formāta atslēgu, vērtību (ja taustiņš nevar būt "0") <br> <br> piemēram: <br> 1, vērtība 1 <br> 2, vērtība 2 <br> 3, vērtība 3 < br> ...
    @@ -432,39 +436,39 @@ DefaultLink=Noklusējuma saite
     SetAsDefault=Iestatīt kā noklusējumu
     ValueOverwrittenByUserSetup=Uzmanību, šī vērtība var pārrakstīt ar lietotāja konkrētu uzstādīšanas (katrs lietotājs var iestatīt savu clicktodial URL)
     ExternalModule=Ārējais modulis - Instalēts direktorijā %s
    -BarcodeInitForThirdparties=Masveida svītrkoda izveidošana trešajām personām
    +BarcodeInitForthird-parties=Masveida svītru kodu init trešajām personām
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
    -CurrentlyNWithoutBarCode=Pašlaik jums ir <strong> %s </ strong> ieraksts <strong> %s </ strong> %s bez marķējuma definēšanas.
    -InitEmptyBarCode=Init value for next %s empty records
    +CurrentlyNWithoutBarCode=Pašlaik jums ir <strong> %s </strong> ieraksts <strong> %s </strong> %s bez definēta svītrukoda.
    +InitEmptyBarCode=Sākotnējā vērtība nākamajiem %s tukšajiem ierakstiem
     EraseAllCurrentBarCode=Dzēst visas svītrkodu vērtības
     ConfirmEraseAllCurrentBarCode=Vai tiešām vēlaties dzēst visas svītrkodu vērtības ?
     AllBarcodeReset=Visas svītrkodu vērtības dzēstas
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=Svītrkoda moduļa iestatījumos nav iespējota neviena svītrkoda šablona.
     EnableFileCache=Iespējot faila kešu
     ShowDetailsInPDFPageFoot=Pievienojiet detalizētu informāciju PDF failu kājenē, piemēram, uzņēmuma adresi vai vadītāju vārdus (lai aizpildītu profesionālos identifikācijas datus, uzņēmuma kapitālu un PVN numuru).
    -NoDetails=Neviena detalizētā informācija nav iekļauta kājenē
    +NoDetails=Nav vairāk informācijas kājenē
     DisplayCompanyInfo=Rādīt uzņēmuma adresi
     DisplayCompanyManagers=Rādīt menedžeru vārdus
     DisplayCompanyInfoAndManagers=Rādīt uzņēmuma adresi un menedžeru vārdus
    -EnableAndSetupModuleCron=Ja vēlaties, lai šī atkārtotā rēķina izsūtīšana notiek automātiski, modulis * %s * ir jāaktivizē un jāuzstāda pareizi. Pretējā gadījumā rēķinu ģenerēšana no šī veidnes jāveic manuāli ar pogu * Izveidot *. Ņemiet vērā, ka pat tad, ja esat iespējojis automātisko ģenerēšanu, joprojām varat droši uzsākt manuālo ģenerēšanu. Dublikātu ģenerēšana par to pašu periodu nav iespējama.
    -ModuleCompanyCodeCustomerAquarium=%s, kam seko trešās puses klienta kods klienta grāmatvedības kodam
    -ModuleCompanyCodeSupplierAquarium=%s, kam seko trešās puses piegādātāja kods piegādātāja grāmatvedības kodam
    +EnableAndSetupModuleCron=Ja vēlaties, lai šis atkārtotās rēķins tiktu ģenerēts automātiski, modulis * %s * ir jāaktivizē un jāuzstāda pareizi. Pretējā gadījumā rēķinu ģenerēšana no šī veidnes jāveic manuāli, izmantojot pogu * Izveidot *. Ņemiet vērā, ka pat tad, ja esat iespējojis automātisko ģenerēšanu, joprojām varat droši uzsākt manuālo ģenerēšanu. Dublikātu ģenerēšana tajā pašā laika posmā nav iespējama.
    +ModuleCompanyCodeCustomerAquarium=%s, kam seko klienta kods klienta grāmatvedības kodam
    +ModuleCompanyCodeSupplierAquarium=%s, kam seko piegādātāja kods piegādātāja grāmatvedības kodam
     ModuleCompanyCodePanicum=Atgriezt tukšu grāmatvedības kodu.
     ModuleCompanyCodeDigitaria=Grāmatvedības kods ir atkarīgs no trešās puses koda. Kods sastāv no rakstzīmes "C" pirmajā pozīcijā, kam seko trešās puses pirmās 5 rakstzīmes.
     Use3StepsApproval=Pēc noklusējuma ir jābūt veidotam un apstiprinātam Pirkšanas pasūtījumam no 2 dažādiem lietotājiem (viens solis / lietotājs, lai izveidotu un viens solis / lietotājs apstiprinātu. Ņemiet vērā, ka, ja lietotājam ir gan atļauja izveidot un apstiprināt, viens solis / lietotājs būs pietiekams) . Ar šo opciju varat prasīt trešās pakāpes / lietotāja apstiprinājumu, ja summa ir lielāka par īpašo vērtību (tādēļ būs nepieciešami 3 soļi: 1 = validācija, 2 = pirmais apstiprinājums un 3 = otrais apstiprinājums, ja summa ir pietiekama). <br> Iestatiet, ka tas ir tukšs, ja pietiek vienam apstiprinājumam (2 pakāpieniem), ja tam vienmēr ir nepieciešams otrais apstiprinājums (3 pakāpieni).
     UseDoubleApproval=Izmantojiet 3 pakāpju apstiprinājumu, ja summa (bez nodokļiem) ir augstāka par ...
    -WarningPHPMail=BRĪDINĀJUMS: bieži vien labāk ir iestatīt izejošos e-pastus, lai izmantotu sava pakalpojumu sniedzēja e-pasta serveri, nevis noklusējuma iestatījumus. Daži e-pasta pakalpojumu sniedzēji (piemēram, Yahoo) neļauj sūtīt e-pastu no cita servera nekā viņu pašu serveris. Jūsu pašreizējā iestatīšana izmanto lietojumprogrammas serveri, lai nosūtītu e-pastu, nevis jūsu e-pasta pakalpojumu sniedzēja serveri, tādēļ daži saņēmēji (tie, kuri ir saderīgi ar ierobežojošo DMARC protokolu), jautās savam e-pasta pakalpojumu sniedzējam, ja viņi var pieņemt jūsu e-pastu un dažus e-pasta pakalpojumu sniedzējus (piemēram, Yahoo) var atbildēt "nē", jo serveris nav to serveris, tāpēc maz no jūsu nosūtītajiem e-pasta ziņojumiem var tikt pieņemti (uzmanīgi arī pie e-pasta pakalpojumu sniedzēja, kas sūta kvotu). <br> Ja jūsu e-pasta pakalpojumu sniedzējs (piemēram, Yahoo) ir šis ierobežojums, jums ir jāmaina e-pasta iestatīšana, lai izvēlētos citu metodi "SMTP serveris" un ievadiet SMTP serveri un akreditācijas datus, ko sniedz jūsu e-pasta pakalpojumu sniedzējs (lūdziet savam e-pasta pakalpojumu sniedzējam iegūt jūsu kontam SMTP akreditācijas datus).
    +WarningPHPMail=BRĪDINĀJUMS: bieži vien labāk ir iestatīt izejošos e-pastus, lai izmantotu sava pakalpojumu sniedzēja e-pasta serveri, nevis noklusējuma iestatījumus. Daži e-pasta pakalpojumu sniedzēji (piemēram, Yahoo) neļauj sūtīt e-pastu no cita servera, nevis no sava servera. Jūsu pašreizējā iestatīšana izmanto lietojumprogrammas serveri, lai nosūtītu e-pastu, nevis jūsu e-pasta pakalpojumu sniedzēja serveri, tādēļ daži adresāti (tie, kas ir saderīgi ar ierobežojošo DMARC protokolu), jautās savam e-pasta pakalpojumu sniedzējam, ja viņi var pieņemt jūsu e-pastu un dažus e-pasta pakalpojumu sniedzējus (piemēram, Yahoo) var atbildēt "nē", jo serveris nav viņu, tāpēc maz no jūsu nosūtītajiem e-pasta ziņojumiem var tikt pieņemti (uzmanieties arī no jūsu e-pasta pakalpojumu sniedzēja sūtīšanas kvotas). <br> Ja jūsu e-pasta pakalpojumu sniedzējs (piemēram, Yahoo) šis ierobežojums, jums ir jāmaina e-pasta iestatīšana, lai izvēlētos citu metodi "SMTP serveris" un ievadiet SMTP serveri un akreditācijas datus, ko sniedz jūsu e-pasta pakalpojumu sniedzējs (jautājiet savam e-pasta pakalpojumu sniedzējam, lai saņemtu sava konta SMTP akreditācijas datus).
     WarningPHPMail2=Ja jūsu e-pasta SMTP pakalpojumu sniedzējam ir jāierobežo e-pasta klients uz dažām IP adresēm (ļoti reti), tas ir jūsu ERP CRM lietojumprogrammas e-pasta lietotāja aģenta (MUA) IP adrese: <strong> %s </strong>.
     ClickToShowDescription=Noklikšķiniet, lai parādītu aprakstu
     DependsOn=Šim modulim nepieciešams modulis (-i)
    -RequiredBy=Šo moduli pieprasa modulis (-i)
    -TheKeyIsTheNameOfHtmlField=Šis ir HTML lauka nosaukums. Tam vajadzīgas tehniskas zināšanas, lai lasītu HTML lapas saturu, lai iegūtu lauka atslēgas nosaukumu.
    -PageUrlForDefaultValues=Šeit jāievada relatīvā lapas URL. Ja URL tiek iekļauti parametri, noklusējuma vērtības būs efektīvas, ja visi parametri ir vienādi. Piemēri:
    +RequiredBy=Šis modulis nepieciešams modulim (-ļiem)
    +TheKeyIsTheNameOfHtmlField=Šis ir HTML lauka nosaukums. Lai izlasītu HTML lapas saturu, ir nepieciešamas tehniskās zināšanas, lai iegūtu lauka atslēgas nosaukumu.
    +PageUrlForDefaultValues=Jums jāievada relatīvā lapas URL. Ja URL tiek iekļauti parametri, noklusējuma vērtības būs efektīvas, ja visi parametri ir vienādi. Piemēri:
     PageUrlForDefaultValuesCreate=<br> Veidā, lai izveidotu jaunu trešo personu, tas ir <strong> %s </ strong> <br> <br> Ja vēlaties tikai noklusējuma vērtību, ja url ir kāds parametrs, varat izmantot <strong> %s </ strong>
    -PageUrlForDefaultValuesList=<br> Lapai, kas ir trešo pušu saraksts, tā ir <strong> %s </ strong> <br> <br> Ja vēlaties tikai noklusējuma vērtību, ja url ir kāds parametrs, varat izmantot <strong> %s </ strong>
    +PageUrlForDefaultValuesList=<br> Lapai, kas ir trešo pušu saraksts, tā ir <strong> %s </strong> <br>  Ja vēlaties tikai noklusējuma vērtību, ja url ir kāds parametrs, varat izmantot <strong> %s </strong>
     EnableDefaultValues=Iespējot personalizēto noklusēto vērtību izmantošanu
     EnableOverwriteTranslation=Iespējot pārrakstīto tulkojumu izmantošanu
    -GoIntoTranslationMenuToChangeThis=Taustiņam ir atrasts tulkojums ar šo kodu, tāpēc, lai mainītu šo vērtību, jums ir jāreģistrē fom Home-Setup-translation.
    +GoIntoTranslationMenuToChangeThis=Taustiņam ir atrasts tulkojums ar šo kodu. Lai mainītu šo vērtību, jums ir jārediģē no Home-Setup-translation.
     WarningSettingSortOrder=Brīdinājums, noklusējuma rūtiņu secības iestatīšana var radīt tehnisku kļūdu, apmeklējot saraksta lapu, ja lauks nav nezināma lauka. Ja rodas šāda kļūda, atgriezieties šajā lapā, lai noņemtu noklusējuma kārtošanas secību un atjaunotu noklusējuma darbību.
     Field=Lauks
     ProductDocumentTemplates=Dokumentu veidnes produkta dokumenta ģenerēšanai
    @@ -476,16 +480,18 @@ SendEmailsReminders=Sūtīt darba kārtībā atgādinājumus pa e-pastu
     davDescription=Pievienojiet komponents DAV serverim
     DAVSetup=DAV moduļa uzstādīšana
     DAV_ALLOW_PUBLIC_DIR=Iespējot publisko direktoriju (WebDav direktoriju bez nepieciešamības pieslēgties)
    -DAV_ALLOW_PUBLIC_DIRTooltip=Publiskais WebDav direktorijs ir WebDAV katalogs, kurā ikviens var piekļūt (lasīšanas un rakstīšanas režīmā), bez nepieciešamības / izmantot esošu lietotāja vārdu / paroli.
    +DAV_ALLOW_PUBLIC_DIRTooltip=Publiskā direktorija WebDav ir WebDAV katalogs, kuru ikvienam var piekļūt (lasīšanas un rakstīšanas režīmā), bez nepieciešamības / izmantot pašreizējo lietotāja vārdu / paroli.
    +DAV_ALLOW_ECM_DIR=Iespējot DMS / ECM moduļa saknes direktoriju (nepieciešams pieslēgums)
    +DAV_ALLOW_ECM_DIRTooltip=Saknes direktorija, kurā visi faili tiek manuāli augšupielādēti, izmantojot DMS / ECM moduli. Tāpat kā tīmekļa saskarnes funkcijai, lai piekļūtu tai, jums būs nepieciešama derīga ieeja / parole ar piešķirtajām atļaujām.
     # Modules
     Module0Name=Lietotāji un grupas
     Module0Desc=Lietotāju / Darbinieku un Grupu vadība
    -Module1Name=Trešās personas
    +Module1Name=Trešās puses
     Module1Desc=Uzņēmumu un kontaktinformācijas vadība (klientu, perspektīvu ...)
     Module2Name=Tirdzniecība
     Module2Desc=Komerciālā pārvaldība
     Module10Name=Grāmatvedība
    -Module10Desc=Vienkārši grāmatvedības pārskati (žurnāli, apgrozījums), pamatojoties uz datubāzes saturu. Neizmanto virsgrāmatu galdiņu.
    +Module10Desc=Vienkāršie grāmatvedības pārskati (žurnāli, apgrozījums), pamatojoties uz datubāzes saturu. Neizmanto virsgrāmatu galdiņu.
     Module20Name=Priekšlikumi
     Module20Desc=Komerc priekšlikumu vadība
     Module22Name=Masveida e-pasta sūtījumi
    @@ -511,13 +517,13 @@ Module52Desc=Krājumu pārvaldīšana (produkti)
     Module53Name=Pakalpojumi
     Module53Desc=Pakalpojumu vadība
     Module54Name=Līgumi / Abonementi
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Līgumu (pakalpojumu vai regulāru abonēšanas) vadība
     Module55Name=Svītrkodi
     Module55Desc=Svītrkodu vadība
     Module56Name=Telefonija
     Module56Desc=Telefonijas integrācija
    -Module57Name=Direct bank payment orders
    -Module57Desc=Standing orders and withdrawal management. Also includes generation of SEPA file for european countries.
    +Module57Name=Tiešie bankas maksājuma uzdevumi
    +Module57Desc=Tiešā debeta maksājuma uzdevumu pārvaldīšana. Tas ietver SEPA datnes izveidi Eiropas valstīm.
     Module58Name=NospiedLaiSavienotos
     Module58Desc=Integrācija ar ClickToDial sistēmas (zvaigznīte, ...)
     Module59Name=Bookmark4u
    @@ -528,10 +534,10 @@ Module75Name=Izdevumi un ceļojumu piezīmes
     Module75Desc=Izdevumi un ceļojumu piezīmju vadība
     Module80Name=Sūtījumi
     Module80Desc=Sūtījumu un piegādes rīkojumu vadība
    -Module85Name=Bankas un nauda
    +Module85Name=Bankas un skaidra nauda
     Module85Desc=Banku vai naudas kontu administrēšana
     Module100Name=Ārējā vietne
    -Module100Desc=Šis modulis ietver ārējo tīmekļa vietni vai lapu par Dolibarr izvēlnēm un apskatīt to uz Dolibarr rāmī
    +Module100Desc=Dolibarr izvēlnēs pievienojiet ārējās vietnes saiti, lai to skatītu Dolibarr rāmī
     Module105Name=Pastnieks un SPIP
     Module105Desc=Pastnieks vai SPIP saskarne loceklis moduli
     Module200Name=LDAP
    @@ -539,50 +545,50 @@ Module200Desc=LDAP direktoriju sinhronizācija
     Module210Name=PostNuke
     Module210Desc=PostNuke integrācija
     Module240Name=Datu eksports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Dolibarr datu eksportēšanas rīks (ar palīdzību)
     Module250Name=Datu imports
    -Module250Desc=Tool to import data in Dolibarr (with assistants)
    +Module250Desc=Instruments datu importēšanai Dolibarr (ar palīdzību)
     Module310Name=Dalībnieki
     Module310Desc=Fonda biedru vadība
     Module320Name=RSS barotne
     Module320Desc=Pievienot RSS plūsmu Dolibarr lapās
    -Module330Name=Grāmatzīmes
    -Module330Desc=Grāmatzīmju vadība
    -Module400Name=Projekti/Iespējas/Leads
    -Module400Desc=Projektu vadīšana, iespējas / vadība un / vai uzdevumi. Jūs varat arī piešķirt projektam jebkuru elementu (rēķins, pasūtījums, priekšlikums, iejaukšanās, ...) un iegūt projekta skatījumā šķērsvirzienu.
    +Module330Name=Grāmatzīmes un saīsnes
    +Module330Desc=Veidojiet īsceļus, vienmēr pieejamus, iekšējām vai ārējām lapām, kurām bieži piekļūstat
    +Module400Name=Projekti vai potenciālie pirkumi
    +Module400Desc=Projektu vadība, vadītāji / iespējas un / vai uzdevumi. Jūs varat arī piešķirt projektam jebkuru elementu (rēķins, pasūtījums, priekšlikums, iejaukšanās, ...) un iegūt projekta skatījumā šķērsvirzienu.
     Module410Name=Vebkalendārs
     Module410Desc=Web kalendāra integrācija
     Module500Name=Nodokļi un īpašie izdevumi
     Module500Desc=Citu izdevumu vadīšana (pārdošanas nodokļi, sociālie vai fiskālie nodokļi, dividendes, ...)
     Module510Name=Darbinieku algu izmaksa
    -Module510Desc=Ierakstiet un izpildiet savu darbinieku algu
    +Module510Desc=Ierakstiet un izsekojiet darbinieku maksājumus
     Module520Name=Aizdevums
    -Module520Desc=Management of loans
    +Module520Desc=Aizdevumu vadība
     Module600Name=Paziņojumi par biznesa pasākumiem
    -Module600Desc=Sūtīt paziņojumus par e-pastu (ko ieslēdz daži biznesa notikumi) lietotājiem (katram lietotājam iestatīta iestatīšana), trešo pušu kontaktpersonām (iestatīšana, kas noteikta katrā trešajā pusē) vai fiksētiem e-pasta ziņojumiem
    -Module600Long=Ņemiet vērā, ka šis modulis ir paredzēts, lai nosūtītu reāllaika e-pastus, kad notiek īpašs biznesa notikums. Ja jūs meklējat funkciju, lai nosūtītu atgādinājumus pa e-pastu no dienas kārtības notikumiem, dodieties uz moduļa darba kārtības iestatīšanu.
    +Module600Desc=Sūtiet e-pasta paziņojumus, ko aktivizē uzņēmējdarbības notikums, lietotājiem (katram lietotājam iestatīta iestatīšana), trešo pušu kontakti (iestatījums, kas noteikts katrā trešā puse) vai definētiem e-pasta ziņojumiem
    +Module600Long=Ņemiet vērā, ka šis modulis sūta e-pastus reāllaikā, kad rodas īpašs biznesa notikums. Ja jūs meklējat funkciju, lai nosūtītu e-pasta atgādinājumus par darba kārtības pasākumiem, dodieties uz moduļa darba kārtības iestatīšanu.
     Module610Name=Produkta varianti
    -Module610Desc=Ļauj izveidot produktu variantu, pamatojoties uz atribūtiem (krāsa, izmērs, ...)
    +Module610Desc=Produkta variantu veidošana (krāsa, izmērs utt.)
     Module700Name=Ziedojumi
     Module700Desc=Ziedojumu pārvaldība
     Module770Name=Izdevumu atskaites
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Izmaksu pārskatu pārvaldīšana un pieprasīšana (transportēšana, ēdināšana, ...)
     Module1120Name=Pārdevēja komerciāls piedāvājums
     Module1120Desc=Pieprasiet pārdevēju komerciālo priekšlikumu un cenas
     Module1200Name=Mantis
     Module1200Desc=Mantis integrācija
    -Module1520Name=Document Generation
    +Module1520Name=Dokumentu veidošana
     Module1520Desc=Mass mail document generation
    -Module1780Name=Tags/Categories
    +Module1780Name=Atslēgvārdi / sadaļas
     Module1780Desc=Izveidojiet tagus / kategoriju (produktus, klientus, pārdevējus, kontaktpersonas vai dalībniekus)
     Module2000Name=WYSIWYG redaktors
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Ļauj teksta laukus rediģēt, izmantojot CKEditor
     Module2200Name=Dinamiskas cenas
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Plānotie darbi
     Module2300Desc=Plānotais darbavietu vadība (alias cron vai chrono galds)
     Module2400Name=Pasākumi / darba kārtība
    -Module2400Desc=Izpildiet gatavotos un gaidītos notikumus. Ļaujiet lietojumprogrammām reģistrēt automātiskus notikumus izsekošanas nolūkos vai ierakstīt manuālus notikumus vai sarunas. Tas ir galvenais svarīgais modulis labam klientam vai piegādātāju saistību pārvaldībai.
    +Module2400Desc=Izsekot notikumus. Ļaujiet Dolibarr reģistrēt automātiskus notikumus izsekošanas nolūkos vai reģistrēt manuālus notikumus vai sanāksmes. Tas ir galvenais labais Klientu vai piegādātāju saistību pārvaldības modulis.
     Module2500Name=DMS / ECM
     Module2500Desc=Dokumentu vadības sistēma / elektroniskā satura vadība. Jūsu radīto vai saglabāto dokumentu automātiska organizēšana. Kopīgojiet tos pēc vajadzības.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,46 +596,50 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Dolibarr tīmekļa pakalpojumu klienta iespējošana (var tikt izmantota, lai nosūtītu datus / pieprasījumus ārējiem serveriem. Pašlaik tiek atbalstīti tikai piegādātāja pasūtījumi.)
     Module2700Name=Gravatar
    -Module2700Desc=Izmantot tiešsaistes Gravatar pakalpojumu (www.gravatar.com), lai parādītu fotogrāfijas lietotāju / dalībnieku (atrasts ar saviem e-pastiem). Nepieciešams interneta piekļuves
    +Module2700Desc=Izmantojiet Gravatar tiešsaistes pakalpojumu (www.gravatar.com), lai parādītu lietotāju / dalībnieku fotoattēlu (atrodams ar viņu e-pastu). Nepieciešama piekļuve internetam
     Module2800Desc=FTP klients
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP MaxMind pārveidošanu iespējas
     Module3100Name=Skaips
     Module3100Desc=Add a Skype button into card of users / third parties / contacts / members
     Module3200Name=Nemainīgi arhīvi
    -Module3200Desc=Aktivizējiet dažu biznesa notikumu žurnālu nemainīgā žurnālā. Notikumi tiek arhivēti reāllaikā. Žurnāls ir tabula ar ķēdes notikumiem, kurus var lasīt un eksportēt. Šis modulis dažās valstīs var būt obligāts.
    +Module3200Desc=Iespējojiet nemainīgu biznesa notikumu žurnālu. Notikumi tiek arhivēti reāllaikā. Žurnāls ir tikai lasāmu tabulu ķēdes notikumus, kurus var eksportēt. Šis modulis dažās valstīs var būt obligāts.
     Module4000Name=HRM
     Module4000Desc=Cilvēkresursu vadība (departamenta vadība, darbinieku līgumi un jūtas)
     Module5000Name=Multi-kompānija
     Module5000Desc=Ļauj jums pārvaldīt vairākus uzņēmumus
     Module6000Name=Darba plūsma
    -Module6000Desc=Workflow management (automatic creation of object and/or automatic status change)
    +Module6000Desc=Darbplūsmas vadība (automātiska objekta izveide un / vai automātiska statusa maiņa)
     Module10000Name=Mājas lapas
     Module10000Desc=Izveidojiet publiskās vietnes ar WYSIWG redaktoru. Vienkārši uzstādiet savu tīmekļa serveri (Apache, Nginx, ...), lai norādītu uz īpašo Dolibarr direktoriju, lai to tiešsaistē varētu izmantot internetā ar savu domēna vārdu.
    -Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Name=Atvaļinājuma pieprasījumu pārvaldība
    +Module20000Desc=Atzīt un izsekot darbiniekiem atstāt pieprasījumus
     Module39000Name=Produktu partijas
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Daudzvalūtu
    +Module40000Desc=Izmantojiet alternatīvas valūtas cenās un dokumentos
     Module50000Name=Paybox
    -Module50000Desc=Modulis, lai piedāvātu tiešsaistes maksājuma lapu, kurā tiek pieņemti maksājumi ar kredītkarti / debetkarti, izmantojot PayBox. To var izmantot, lai jūsu klienti varētu veikt bezmaksas maksājumus vai maksājumus konkrētā Dolibarr objektā (rēķins, pasūtījums, ...)
    +Module50000Desc=Piedāvājiet klientiem PayBox tiešsaistes maksājumu lapu (kredītkartes / debetkartes). To var izmantot, lai jūsu klienti varētu veikt bezmaksas maksājumus vai maksājumus konkrētā Dolibarr objektā (rēķins, pasūtījums, ...)
     Module50100Name=Tirdzniecības punkts
    -Module50100Desc=Point of sales module (POS).
    +Module50100Desc=Pārdošanas moduļa vietne (POS).
    +Module50150Name=Tirdzniecības punkts
    +Module50150Desc=Tirdzniecības vietas modulis (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Modulis, lai piedāvātu tiešsaistes maksājuma lapu, kurā tiek pieņemti maksājumi, izmantojot PayPal (kredītkarte vai PayPal kredīts). To var izmantot, lai jūsu klienti varētu veikt bezmaksas maksājumus vai maksājumus konkrētā Dolibarr objektā (rēķins, pasūtījums, ...)
    +Module50200Desc=Piedāvājiet klientiem PayPal tiešsaistes maksājumu lapu (PayPal kontu vai kredītkartes / debetkartes). To var izmantot, lai jūsu klienti varētu veikt bezmaksas maksājumus vai maksājumus konkrētā Dolibarr objektā (rēķins, pasūtījums, ...)
     Module50400Name=Accounting (advanced)
     Module50400Desc=Grāmatvedības vadība (divkāršie ieraksti, atbalsta vispārējās un papildu grāmatiņas). Eksportēt virsgrāmatu vairākos citos grāmatvedības programmatūras formātos.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Tiešā druka (neatverot dokumentus), izmantojot Cups IPP saskarni (printerim jābūt redzamam no servera, un CUPS ir jāinstalē serverī).
     Module55000Name=Aptauja vai balsojums
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Modulis, lai izveidotu tiešsaistes aptaujas, aptaujas vai balsis (piemēram, Doodle, Studs, Rdvz, ...)
     Module59000Name=Malas
     Module59000Desc=Moduli, lai pārvaldītu peļņu
     Module60000Name=Komisijas
     Module60000Desc=Modulis lai pārvaldītu komisijas
     Module62000Name=Inkoterms
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Desc=Pievienojiet funkcijas, lai pārvaldītu Incoterms
     Module63000Name=Resursi
     Module63000Desc=Pārvaldīt resursus (printerus, automašīnas, istabu, ...), pēc tam varat dalīties ar notikumiem
     Permission11=Lasīt klientu rēķinus
    @@ -651,9 +661,9 @@ Permission32=Izveidot / mainīt produktus
     Permission34=Dzēst produktus
     Permission36=Skatīt/vadīt slēptos produktus
     Permission38=Eksportēt produktus
    -Permission41=Lasīt projektus un uzdevumus (kopējais projekts un projekti, ar kuriem esmu kontaktējies). Var arī ievadīt patērēto laiku man piešķirtajiem uzdevumiem (laika kontrolsaraksts)
    -Permission42=Izveidot / modificēt projektus (kopējais projekts un projekti, ar kuriem esmu kontaktējies). Var arī izveidot uzdevumus un piešķirt lietotājus projektam un uzdevumiem
    -Permission44=Dzēst projektus (dalīta projekts un projektu es esmu kontaktpersonai)
    +Permission41=Lasīt projektus un uzdevumus (kopīgs projekts un projekti, par kuriem es kontaktēju). Var arī ievadīt patērēto laiku man vai manai hierarhijai par piešķirtajiem uzdevumiem (laika kontrolsaraksts)
    +Permission42=Izveidojiet / modificējiet projektus (kopīgu projektu un projektus, par kuriem esmu kontaktējies). Var arī izveidot uzdevumus un piešķirt lietotājus projektam un uzdevumiem
    +Permission44=Dzēsiet projektus (kopīgots projekts un projekti, par kuriem es kontaktēju)
     Permission45=Eksportēt projektus
     Permission61=Lasīt intervences
     Permission62=Izveidot / mainīt intervences
    @@ -662,7 +672,7 @@ Permission67=Eksporta iejaukšanās
     Permission71=Lasīt dalībniekus
     Permission72=Izveidot/mainīt dalībniekus
     Permission74=Dzēst dalībniekus
    -Permission75=Setup types of membership
    +Permission75=Uzstādīt dalības veidus
     Permission76=Datu eksports
     Permission78=Lasīt abonementus
     Permission79=Izveidot/mainīt abonementus
    @@ -686,7 +696,7 @@ Permission109=Dzēst sūtījumus
     Permission111=Lasīt finanšu kontus
     Permission112=Izveidot/labot/dzēst un salīdzināt darījumus
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Vienkāršojiet darījumus
     Permission115=Eksportēt darījumus un kontu izrakstus
     Permission116=Pārvietot starp kontiem
     Permission117=Pārvaldīt pārbaudes dispečervadības
    @@ -694,22 +704,22 @@ Permission121=Skatīt trešās personas, kas saistītas ar lietotāju
     Permission122=Izveidot/labot trešās personas, kas saistītas ar lietotāju
     Permission125=Dzēst trešās personas, kas saistītas ar lietotāju
     Permission126=Eksportēt trešās puses
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Lasiet visus projektus un uzdevumus (arī privātos projektus, par kuriem es neesmu kontakts)
    +Permission142=Izveidojiet / modificējiet visus projektus un uzdevumus (arī privātos projektus, par kuriem es neesmu kontakts)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Lasīt pakalpojumu sniedzējus
     Permission147=Lasīt statistiku
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Ierakstiet kredītus / noraidiet tiešā debeta maksājuma uzdevumus
     Permission161=Apskatīt līgumus/subscriptions
     Permission162=Izveidot/labot līgumus/subscriptions
     Permission163=Activate a service/subscription of a contract
     Permission164=Disable a service/subscription of a contract
     Permission165=Dzēst līgumus/subscriptions
     Permission167=Eksportēt līgumus
    -Permission171=Read trips and expenses (yours and your subordinates)
    +Permission171=Lasīt ceļojumus un izdevumus (jūsu un jūsu padotajiem)
     Permission172=Izveidot/labot ceļojumu un izdevumus
     Permission173=Dzēst ceļojumus un izdevumus
     Permission174=Read all trips and expenses
    @@ -719,13 +729,13 @@ Permission181=Lasīt piegādātāju pasūtījumus
     Permission182=Izveidot/mainīt piegādātāju pasūtījumus
     Permission183=Apstiprināt piegādātāju pasūtījumus
     Permission184=Apstiprināt piegādātāja pasūtījumus
    -Permission185=Order or cancel supplier orders
    +Permission185=Pasūtiet vai atceliet piegādātāja pasūtījumus
     Permission186=Saņemt piegādātāju pasūtījumus
     Permission187=Aizvērt piegādātāja pasūtījumus
     Permission188=Atcelt piegādātāja pasūtījumus
     Permission192=Izveidot līnijas
     Permission193=Atcelt līnijas
    -Permission194=Lasīt joslas platums līnijām
    +Permission194=Lasīt joslas platuma līnijas
     Permission202=Izveidot ADSL savienojumu
     Permission203=Pasūtīt savienojumi pasūtījumi
     Permission204=Pasūtīt savienojumi
    @@ -750,12 +760,12 @@ Permission244=Skatīt saturu slēptām sadaļām
     Permission251=Lasīt citus lietotājus un grupas
     PermissionAdvanced251=Lasīt citus lietotājus
     Permission252=Lasīt atļaujas citiem lietotājiem
    -Permission253=Izveidot/mainīt citus lietotājus, grupas un tiesības
    +Permission253=Izveidojiet / modificējiet citus lietotājus, grupas un atļaujas
     PermissionAdvanced253=Izveidot/mainīt iekšējoss/ārējos lietotājus un atļaujas
     Permission254=Izveidot/mainīt ārējos lietotājus tikai
     Permission255=Mainīt citu lietotāju paroli
     Permission256=Izdzēst vai bloķēt citus lietotājus
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Paplašināt piekļuvi visām trešajām pusēm (ne tikai trešajām personām, kuras lietotājs ir pārdošanas pārstāvis). <br> Nav spēkā ārējiem lietotājiem (vienmēr vienīgi par sevi, par priekšlikumiem, rīkojumiem, rēķiniem, līgumiem uc) <br>projektiem (tikai noteikumi par projektu atļaujām, redzamību un uzdevumiem).
     Permission271=Lasīt CA
     Permission272=Lasīt rēķinus
     Permission273=Izrakstīt rēķinus
    @@ -765,7 +775,7 @@ Permission283=Dzēst kontaktus
     Permission286=Eksportēt kontaktus
     Permission291=Skatīt tarifus
     Permission292=Kas atļaujas par tarifiem
    -Permission293=Labot klientu tarifus
    +Permission293=Mainīt klientu tarifus
     Permission300=Lasīt svītrkodus
     Permission301=Izveidot / mainīt svītrkodus
     Permission302=Dzēst svītrkodus
    @@ -787,17 +797,15 @@ Permission401=Lasīt atlaides
     Permission402=Izveidot/mainīt atlaides
     Permission403=Apstiprināt atlaides
     Permission404=Dzēst atlaides
    -Permission501=Lasīt darba ņēmēju līgumus / algas
    -Permission502=Izveidot / mainīt darbinieku līgumus / algas
    -Permission511=Lasīt algu izmaksu
    -Permission512=Izveidojiet / labojiet algu izmaksu
    -Permission514=Dzēst algas
    +Permission511=Lasīt algu maksājumus
    +Permission512=Izveidojiet / modificējiet algu maksājumus
    +Permission514=Dzēst algu maksājumus
     Permission517=Eksportēt algas
    -Permission520=Read Loans
    -Permission522=Create/modify loans
    -Permission524=Delete loans
    -Permission525=Access loan calculator
    -Permission527=Export loans
    +Permission520=Lasīt aizdevumus
    +Permission522=Izveidot / labot aizdevumus
    +Permission524=Dzēst aizdevumus
    +Permission525=Piekļuves kredīta kalkulators
    +Permission527=Eksportēt kredītus
     Permission531=Lasīt pakalpojumus
     Permission532=Izveidot/mainīt pakalpojumus
     Permission534=Dzēst pakalpojumus
    @@ -808,11 +816,11 @@ Permission702=Izveidot/mainīt ziedojumus
     Permission703=Dzēst ziedojumus
     Permission771=Read expense reports (yours and your subordinates)
     Permission772=Create/modify expense reports
    -Permission773=Delete expense reports
    +Permission773=Dzēst izdevumu pārskatus
     Permission774=Read all expense reports (even for user not subordinates)
    -Permission775=Approve expense reports
    -Permission776=Pay expense reports
    -Permission779=Export expense reports
    +Permission775=Apstiprināt izdevumu pārskatus
    +Permission776=Apmaksāt izdevumu pārskatus
    +Permission779=Eksportēt izdevumu atskaites
     Permission1001=Lasīt krājumus
     Permission1002=Izveidot/labot noliktavas
     Permission1003=Dzēst noliktavas
    @@ -844,8 +852,8 @@ Permission1251=Palaist masveida importu ārējiem datiem datu bāzē (datu ielā
     Permission1321=Eksporta klientu rēķinus, atribūti un maksājumus
     Permission1322=Atkārtoti atvērt samaksāto rēķinu
     Permission1421=Eksportēt klientu pasūtījumus un atribūtus
    -Permission20001=Lasīt atvaļinājuma pieprasījumus (jūsu lapas un viens no jūsu padotajiem)
    -Permission20002=Izveidojiet / mainiet savus atvaļinājuma pieprasījumus (jūsu lapas un jūsu padotajiem)
    +Permission20001=Lasīt atvaļinājuma pieprasījumus (jūsu atvaļinājums un jūsu padoto atvaļinājums)
    +Permission20002=Izveidojiet / mainiet savus atvaļinājuma pieprasījumus (jūsu atvaļinājums un jūsu padotajiem atvaļinājums)
     Permission20003=Dzēst atvaļinājumu pieprasījumus
     Permission20004=Lasīt visus atvaļinājuma pieprasījumus (pat lietotājs nav pakļauts)
     Permission20005=Izveidot / mainīt atvaļinājumu pieprasījumus visiem (pat lietotājam nav padotajiem)
    @@ -880,8 +888,8 @@ Permission63001=Lasīt resursus
     Permission63002=Izveidot/labot resursus
     Permission63003=Dzēst resursus
     Permission63004=Saistīt resursus ar darba kārtības pasākumiem
    -DictionaryCompanyType=Trešo personu veidi
    -DictionaryCompanyJuridicalType=Juridiskais veids trešajām personām
    +DictionaryCompanyType=Trešo pušu veidi
    +DictionaryCompanyJuridicalType=Trešo pušu juridiskās formas
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=Valsts / province
     DictionaryRegion=Reģions
    @@ -894,7 +902,7 @@ DictionaryVAT=PVN likmes vai pārdošanas procentu likmes
     DictionaryRevenueStamp=Nodokļu zīmogu daudzums
     DictionaryPaymentConditions=Apmaksas noteikumi
     DictionaryPaymentModes=Maksājumu veidi
    -DictionaryTypeContact=Kontaktu/Adrešu veidi
    +DictionaryTypeContact=Kontaktpersonas adreses veidi
     DictionaryTypeOfContainer=Vietnes lapu / konteineru veids
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Papīra formāts
    @@ -908,11 +916,11 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalizētas grupas ziņojumiem
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Grāmatvedības žurnāli
    -DictionaryEMailTemplates=E-pastu paraugi
    +DictionaryEMailTemplates=E-pasta veidnes
     DictionaryUnits=Vienības
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Lapu veidi
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Atvaļinājumu veidi
    +DictionaryOpportunityStatus=Vadošais statuss projektu / vadībai
     DictionaryExpenseTaxCat=Izdevumu pārskats - transporta kategorijas
     DictionaryExpenseTaxRange=Izdevumu pārskats - diapazons pēc transporta kategorijas
     SetupSaved=Iestatījumi saglabāti
    @@ -920,45 +928,46 @@ SetupNotSaved=Iestatīšana nav saglabāta
     BackToModuleList=Atpakaļ uz moduļu sarakstu
     BackToDictionaryList=Atpakaļ uz vārdnīcu sarakstu
     TypeOfRevenueStamp=Nodokļu zīmoga veids
    -VATManagement=PVN Vadība
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold. End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=Pēc noklusējuma piedāvātais PVN ir 0, ko var izmantot gadījumos, piemēram, asociācijās, idnividuālie komersanti.
    -VATIsUsedExampleFR=Francijā tas nozīmē uzņēmumus vai organizācijas, kurām ir reāla fiskālā sistēma (Vienkāršota īsta vai normāla reālā). Sistēma, kurā deklarē PVN.
    -VATIsNotUsedExampleFR=Francijā tas nozīmē asociācijas, kas nav deklarētas kā PVN, vai uzņēmumi, organizācijas vai brīvās profesijas, kas izvēlējušās mikrouzņēmumu fiskālo sistēmu (PVN franšīzes veidā) un maksā franšīzes PVN bez PVN deklarācijas. Šī izvēle rēķinos parādīs atsauci "CGI Neto PVN - art-293B".
    +VATManagement=Pārdošanas nodokļa vadība
    +VATIsUsedDesc=Pēc noklusējuma, veidojot izredzes, rēķinus, pasūtījumus utt., Pārdošanas nodokļa likme atbilst aktīvajam standarta noteikumam: <br> Ja pārdevējam nav jāmaksā pārdošanas nodoklis, tad Pārdošanas nodokļa noklusējums ir 0. Beigu punkts. <br> Ja (pārdevēja valsts = pircēja valsts), tad Pārdošanas nodoklis pēc noklusējuma ir vienāds ar Pārdošanas nodokli produkta pārdevējam valstī. Noteikuma beigas. <br> Ja pārdevējs un pircējs ir gan Eiropas Kopienā, gan preces ir ar transportu saistītas preces (pārvadājumi, nosūtīšana, aviokompānija), noklusējuma Pārdošanas nodoklis ir 0. Šis noteikums ir atkarīgs no pārdevēja valsts - lūdzu konsultējieties ar savu grāmatvedi. Pircējs maksā pārdošanas nodokli savā muitas iestādē savā valstī, nevis pārdevējam. Noteikuma beigas. <br> Ja pārdevējs un pircējs ir gan Eiropas Kopienā, gan pircējs nav uzņēmums (ar reģistrētu Kopienas iekšzemes pārdošanas nodokļa numuru), tad Pārdošanas nodoklis, neievērojot Pārdevēja valsts Pārdošanas nodokli . Noteikuma beigas. <br> Ja pārdevējs un pircējs ir gan Eiropas Kopienā, gan pircējs ir uzņēmums (ar reģistrētu Kopienas iekšējo pārdošanas nodokļa numuru), tad Pārdošanas nodoklis ir 0 pēc noklusējuma. Noteikuma beigas. <br> Jebkurā gadījumā ierosinātā noklusējuma vērtība ir Pārdošanas nodoklis = 0. Noteikuma beigas.
    +VATIsNotUsedDesc=Pēc noklusējuma ierosinātais pārdošanas nodoklis ir 0, ko var izmantot tādām lietām kā asociācijas, privātpersonas vai mazie uzņēmumi.
    +VATIsUsedExampleFR=Francijā tas nozīmē uzņēmumus vai organizācijas, kurām ir reāla fiskālā sistēma (Vienkāršota īsta vai normāla reālā). Sistēma, kurā tiek deklarēts pārdošanas nodoklis.
    +VATIsNotUsedExampleFR=Francijā tas nozīmē asociācijas, kas nav deklarētas par pārdošanas nodokli, vai uzņēmumi, organizācijas vai brīvās profesijas, kuras ir izvēlējušās mikrouzņēmumu fiskālo sistēmu (pārdošanas nodoklis franšīzē) un samaksājis franšīzes pārdošanas nodokli bez pārdošanas deklarācijas. Šī izvēle rēķinos parādīs atsauci "Nav piemērojams pārdošanas nodoklis - CGI art-293B".
     ##### Local Taxes #####
     LTRate=Likme
     LocalTax1IsNotUsed=Nelietot otru nodokli
    -LocalTax1IsUsedDesc=Izmantot otru nodokļu veidu (ne PVN)
    -LocalTax1IsNotUsedDesc=Neizmantojiet citu nodokļa veidu (ne PVN)
    +LocalTax1IsUsedDesc=Izmantojiet otra veida nodokļus (izņemot pirmo)
    +LocalTax1IsNotUsedDesc=Neizmantojiet cita veida nodokļus (izņemot pirmo)
     LocalTax1Management=Otrs nodokļa veids
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Nelietot trešo nodokli
    -LocalTax2IsUsedDesc=Izmantojiet trešā veida nodokli (nav PVN)
    -LocalTax2IsNotUsedDesc=Neizmantojiet cita veida nodokļiem (izņemot PVN)
    +LocalTax2IsUsedDesc=Izmantojiet trešā veida nodokļus (izņemot pirmo)
    +LocalTax2IsNotUsedDesc=Neizmantojiet cita veida nodokļus (izņemot pirmo)
     LocalTax2Management=Trešais nodokļa veids
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE vadība
    -LocalTax1IsUsedDescES= RE līmenis pēc noklusējuma, veidojot izredzes, rēķini, rīkojumi uc sekot aktīvo standarta noteikums: <br> Ja te pircējs nav pakļauts RE, RE pēc noklusējuma = 0. Beigas varu. <br> Ja pircējs ir pakļauts RE tad RE pēc noklusējuma. Beigas varu. <br>
    -LocalTax1IsNotUsedDescES= Pēc noklusējuma ierosinātā RE ir 0. Beigas varu.
    -LocalTax1IsUsedExampleES= Spānijā tie ir profesionāļi, ņemot vērā dažas īpašas sadaļām Spānijas IAE.
    -LocalTax1IsNotUsedExampleES= Spānijā tie ir profesionāli un sabiedrībām un saskaņā ar dažiem sadaļām Spānijas IAE.
    -LocalTax2ManagementES= IRPF vadība
    -LocalTax2IsUsedDescES= RE līmenis pēc noklusējuma, veidojot izredzes, rēķini, rīkojumi uc sekot aktīvo standarta noteikums: <br> Ja pārdevējs nav pakļauta IRPF, tad IRPF pēc noklusējuma = 0. Beigas varu. <br> Ja pārdevējs ir pakļauta IRPF tad IRPF pēc noklusējuma. Beigas varu. <br>
    -LocalTax2IsNotUsedDescES= Pēc noklusējuma ierosinātā IRPF ir 0. Beigas varu.
    -LocalTax2IsUsedExampleES= Spānijā, ārštata un neatkarīgi profesionāļi, kas sniedz pakalpojumus un uzņēmumiem, kuri ir izvēlējušies nodokļu sistēmu moduļus.
    -LocalTax2IsNotUsedExampleES= Spānijā tie Bussines neattiecas uz nodokļu sistēmas moduļiem.
    -CalcLocaltax=Reports on local taxes
    -CalcLocaltax1=Sales - Purchases
    +LocalTax1ManagementES=RE vadība
    +LocalTax1IsUsedDescES=RE-likme pēc noklusējuma, veidojot izredzes, rēķinus, pasūtījumus utt, atbilst aktīvajam standarta noteikumam: <br> Ja pircējs nav pakļauts RE, RE pēc noklusējuma = 0. Noteikuma beigas. <br> Ja pircējs tiek pakļauts RE, tad RE pēc noklusējuma. Noteikuma beigas. <br>
    +LocalTax1IsNotUsedDescES=Pēc noklusējuma ierosinātā RE ir 0. Beigas varu.
    +LocalTax1IsUsedExampleES=Spānijā tie ir profesionāļi, ņemot vērā dažas īpašas sadaļām Spānijas IAE.
    +LocalTax1IsNotUsedExampleES=Spānijā tie ir profesionāli un sabiedrībām un saskaņā ar dažiem sadaļām Spānijas IAE.
    +LocalTax2ManagementES=IRPF vadība
    +LocalTax2IsUsedDescES=IRPF likme pēc noklusējuma, veidojot izredzes, rēķinus, pasūtījumus utt, atbilst aktīvajam standarta noteikumam: <br> Ja pārdevējs nav pakļauts IRPF, tad IRPF pēc noklusējuma = 0. Noteikuma beigas. <br> Ja pārdevējs ir pakļauts IRPF, tad IRPF pēc noklusējuma. Noteikuma beigas. <br>
    +LocalTax2IsNotUsedDescES=Pēc noklusējuma ierosinātā IRPF ir 0. Beigas varu.
    +LocalTax2IsUsedExampleES=Spānijā, ārštata un neatkarīgi profesionāļi, kas sniedz pakalpojumus un uzņēmumiem, kuri ir izvēlējušies nodokļu sistēmu moduļus.
    +LocalTax2IsNotUsedExampleES=Spānijā šie uzņēmumi nav pakļauti moduļu nodokļu sistēmai.
    +CalcLocaltax=Ziņojumi par vietējiem nodokļiem
    +CalcLocaltax1=Pārdošana - pirkumi
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    -CalcLocaltax2=Purchases
    +CalcLocaltax2=Pirkumi
     CalcLocaltax2Desc=Local Taxes reports are the total of localtaxes purchases
     CalcLocaltax3=Pārdošanas
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label izmantots pēc noklusējuma, ja nav tulkojuma var atrast kodu
     LabelOnDocuments=Dokumentu marķējums
    -NbOfDays=dienu sk
    +LabelOrTranslationKey=Uzlīme vai tulkošanas taustiņš
    +NbOfDays=Dienu skaits
     AtEndOfMonth=mēneša beigās
     CurrentNext=Pašreizējais / nākamais
     Offset=Kompensācija
    @@ -996,16 +1005,16 @@ Skin=Izskats
     DefaultSkin=Noklusētais izskats
     MaxSizeList=Maksimālais saraksta garums
     DefaultMaxSizeList=Noklusētais maksimālais sarakstu garums
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Īsu saraksta noklusējuma maksimālais garums (t.i., klienta kartē)
     MessageOfDay=Dienas ziņa
     MessageLogin=Iežurnalēšanās lapas paziņojums
     LoginPage=Pieteikšanās lapa
     BackgroundImageLogin=Fona attēls
     PermanentLeftSearchForm=Pastāvīgā meklēšanas forma kreisajā izvēlnē
    -DefaultLanguage=Noklusējuma izmantošanas valoda (valodas kods)
    +DefaultLanguage=Noklusējuma izmantojamā valoda (valodas kods)
     EnableMultilangInterface=Iespējot daudzvalodu interfeisu
     EnableShowLogo=Rādīt logotipu kreisajā izvēlnē
    -CompanyInfo=Uzņēmuma / organizācijas informācija
    +CompanyInfo=Uzņēmums / organizācija
     CompanyIds=Uzņēmuma / organizācijas identitāte
     CompanyName=Nosaukums
     CompanyAddress=Adrese
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Bankas konta īpašnieks %s
     BankModuleNotActive=Bankas kontu modulis nav ieslēgts
     ShowBugTrackLink=Rādīt saiti "<strong> %s </strong>"
     Alerts=Brīdinājumi
    -DelaysOfToleranceBeforeWarning=Pielaide kavēšanās pirms brīdinājums
    -DelaysOfToleranceDesc=Šis ekrāns ļauj definēt nepanesamas kavēšanos, pirms brīdinājums tiek ziņots uz ekrāna ar Piktogramma %s par katru nokavēto elementam.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (dienās) pirms brīdinājuma par projektu, kas nav slēgts laikā
    -Delays_MAIN_DELAY_TASKS_TODO=Kavējuma atlikšana (dienās) pirms brīdinājuma par plānotajiem uzdevumiem (projekta uzdevumi) vēl nav pabeigta
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Kavēšanās pielaide (dienās) pirms brīdinājums par priekšlikumiem, lai aizvērtu
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Kavēšanās pielaide (dienās) pirms brīdinājumu par priekšlikumiem nav jāmaksā
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance kavēšanās (dienās) pirms brīdinājumu par pakalpojumiem, lai aktivizētu
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance kavēšanās (dienās) pirms brīdinājumu par beidzies pakalpojumiem
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance kavēšanās (dienās) pirms brīdinājumu par nesamaksāto piegādātāja rēķiniem
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Neiecietības kavēšanās (dienās) pirms brīdinājumu par neapmaksātiem klientu rēķiniem
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance kavēšanās (dienās) pirms brīdinājumu par kamēr banku samierināšanās
    -Delays_MAIN_DELAY_MEMBERS=Tolerance kavēšanās (dienās) pirms brīdinājumu par novēlotu dalības maksa
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance kavēšanās (dienās) pirms brīdinājumu par pārbaudēm, depozītu darīt
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=Divas obligātās iestatīšanas darbības ir šādas darbības (divi pirmie ieraksti kreisajā iestatīšanas izvēlnē):
    -SetupDescription3=Iestatījumi izvēlnē <a href="%s"> %s -> %s </a>. Šis solis ir nepieciešams, jo tas nosaka datus, kas tiek izmantoti Dolibarr ekrānos, lai pielāgotu programmatūras noklusējuma darbību (piemēram, attiecībā uz valsti saistītām funkcijām).
    -SetupDescription4=Iestatījumi izvēlnē <a href="%s"> %s -> %s </a>. Šis solis ir nepieciešams, jo Dolibarr ERP / CRM ir vairāku moduļu / lietojumprogrammu kopums, kas ir vairāk vai mazāk neatkarīgi. Jaunas iespējas tiek pievienotas izvēlnēm katram aktivētajam modulim.
    -SetupDescription5=Citas izvēlnes ieraksti pārvaldīt izvēles parametrus.
    +DelaysOfToleranceBeforeWarning=Kavēšanās pirms brīdinājuma brīdinājuma parādīšanas
    +DelaysOfToleranceDesc=Šis ekrāns ļauj definēt kavēšanos, pirms brīdinājums tiek parādīts ekrānā ar ikonu %s katram vēlīnam elementam.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Kavēšanās (dienās) pirms brīdinājuma par plānotajiem pasākumiem (darba kārtības notikumi) vēl nav pabeigta
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Kavēšanās (dienās) pirms brīdinājuma par projektu, kas nav slēgts laikā
    +Delays_MAIN_DELAY_TASKS_TODO=Kavēšanās (dienās) pirms brīdinājuma par plānotajiem uzdevumiem (projekta uzdevumi) vēl nav pabeigta
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Kavējums (dienās) pirms brīdinājuma par pasūtījumiem, kas vēl nav apstrādāti
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Vēl aizkavēšanās (dienās) pirms brīdinājuma par pirkuma pasūtījumiem, kas vēl nav apstrādāti
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Aizkavēšanās (dienās) pirms brīdinājuma par priekšlikumiem slēgt
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Aizkavēšanās (dienās) pirms brīdinājuma par priekšlikumiem, par kuriem nav iekasēta samaksa
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Kavēšanās (dienās) pirms brīdinājuma par aktivizētajiem pakalpojumiem
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Kavējums (dienās) pirms brīdinājuma par pakalpojumiem, kuru termiņš ir beidzies
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (dienās) pirms brīdinājuma par neapmaksātiem piegādātāja rēķiniem
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Kavējums (dienās) pirms brīdinājuma par neapmaksātiem klienta rēķiniem
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (dienās) pirms brīdinājuma par notiekošo bankas saskaņošanu
    +Delays_MAIN_DELAY_MEMBERS=Kavēšanās (dienās) pirms brīdinājuma par atlikto dalības maksu
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (dienās) pirms brīdinājuma par čeka depozītu darīt
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Aizkavēšanās (dienās) pirms brīdinājuma par izdevumu pārskatu apstiprināšanu
    +SetupDescription1=Pirms sākat lietot Dolibarr, jānosaka daži sākotnējie parametri un moduļi ir iespējoti / konfigurēti.
    +SetupDescription2=Obligātie iestatīšanas soļi ir 2 pirmie soļi iestatīšanas izvēlnē, proti:
    +SetupDescription3=<a href="%s"> %s -> %s </a> <br> Galvenie parametri, kurus izmanto, lai pielāgotu Dolibarr noklusējuma darbību (piemēram, attiecībā uz valstīm saistītām funkcijām).
    +SetupDescription4=<a href="%s"> %s -> %s </a> <br> Dolibarr ERP / CRM ir vairāku moduļu / lietojumprogrammu kolekcija, kas ir vairāk vai mazāk neatkarīgas. Jūsu vajadzībām atbilstošie moduļi ir jāaktivizē un jākonfigurē. Jaunas preces / iespējas tiek pievienotas izvēlnēm, aktivizējot moduli.
    +SetupDescription5=Citu iestatījumu izvēlnes ieraksti nodrošina papildu parametrus.
     LogEvents=Drošības audita notikumi
     Audit=Audits
     InfoDolibarr=Par Dolibarr
    @@ -1057,19 +1066,19 @@ BrowserOS=Pārlūkprogrammas OS
     ListOfSecurityEvents=Saraksts ar Dolibarr drošības pasākumiem
     SecurityEventsPurged=Drošības pasākumi dzēsti
     LogEventDesc=Jūs varat ļaut šeit reģistrēšanu Dolibarr drošības notikumiem. Administratori tad var redzēt tās saturu, izmantojot izvēlnes <b>Sistēmas rīki - revīzijas.</b> Uzmanību, šī funkcija var patērēt lielu daudzumu datu bāzē.
    -AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
    +AreaForAdminOnly=Iestatīšanas parametrus var iestatīt tikai <b> administratora lietotāji </b>.
     SystemInfoDesc=Sistēmas informācija ir dažādi tehniskā informācija jums tikai lasīšanas režīmā un redzama tikai administratoriem.
     SystemAreaForAdminOnly=Šī joma ir pieejama administratora lietotājiem. Neviens no Dolibarr atļauju var samazināt šo robežu.
    -CompanyFundationDesc=Šajā lapā rediģējiet visu zināmo informāciju par uzņēmumu vai fondu, kas jums jāpārvalda (šim nolūkam noklikšķiniet uz pogas "%s" vai "%s" lapas apakšdaļā).
    -AccountantDesc=Šajā lapā rediģējiet visu zināmo informāciju par savu grāmatvedi / grāmatvedi
    +CompanyFundationDesc=Rediģējiet uzņēmuma / organizācijas informāciju. Noklikšķiniet uz pogas "%s" vai "%s" lapas apakšdaļā.
    +AccountantDesc=Rediģējiet informāciju par savu grāmatvedi / grāmatvedi
     AccountantFileNumber=Faila numurs
    -DisplayDesc=Jūs varat izvēlēties katru parametru, kas saistīts ar Dolibarr izskatu un justies šeit
    +DisplayDesc=Jūs varat izvēlēties katru parametru, kas saistīts ar Dolibarr izskatu 
     AvailableModules=Pieejamās progrmma / moduļi
    -ToActivateModule=Lai aktivizētu moduļus, dodieties uz iestatīšanas zonas (Home->Setup->Moduļi).
    +ToActivateModule=Lai aktivizētu moduļus, dodieties uz iestatīšanas apgabalu (Sākums-> Iestatīšana-> Moduļi).
     SessionTimeOut=Sesijas pārtraukums
    -SessionExplanation=Šis numurs garantiju, ka sesija nekad beidzas pirms šī kavēšanās, ja sesija tīrītājs tiek darīts ar Iekšējā PHP sesijas tīrāku (un nekas cits). Iekšējā PHP sesijas tīrītājs nav garantija, ka sesija beigsies tikai pēc šīs kavēšanās. Tas beigsies, pēc šī kavēšanās, un, kad sesija tīrītājs ir ilga, tāpēc ik <b>%s / %s</b> piekļuves, bet tikai laikā piekļūt dokumentiem, ko citās sēdēs. <br> Piezīme: par dažiem ar ārēju sesijas tīrīšanas mehānisma (cron zem Debian, Ubuntu ...) serveriem, sesijas var tikt iznīcināti pēc posmā, kas noteikts pēc noklusējuma <strong>session.gc_maxlifetime,</strong> vienalga kāds vērtību ieraksta šeit.
    +SessionExplanation=Šis numurs garantē, ka sesija nekad nebeigsies pirms šīs kavēšanās, ja sesiju tīrāku veic iekšējā PHP sesiju tīrītājs (un nekas cits). Iekšējais PHP sesiju tīrītājs negarantē, ka sesija beigsies pēc šīs kavēšanās. Pēc šīs kavēšanās un sesijas tīrītāja palaišanas termiņš beigsies, līdz ar to katrs <b> %s / %s </ b> piekļūst, bet tikai piekļuves laikā, ko veic citas sesijas (ja vērtība ir 0, tas nozīmē, ka ir pabeigta sesija piezīme: dažos serveros ar ārējo sesiju tīrīšanas mehānismu (cron zem debian, ubuntu ...) sesijas var iznīcināt pēc laika, kuru nosaka ārējs iestatījums neatkarīgi no tā, kāds Šeit ievadītā vērtība ir.
     TriggersAvailable=Pieejamie aktivizētāji
    -TriggersDesc=Palaide ir faili, kas mainīs uz Dolibarr darbplūsmas uzvedību, kad nokopēto uz direktoriju <b>htdocs / core / izraisa.</b> Viņi saprata, jaunas darbības, aktivizēta Dolibarr notikumiem (jauns uzņēmums radīšana, rēķinu apstiprināšanu, ...).
    +TriggersDesc=Trigeri ir faili, kas modificēs Dolibarr darbplūsmas darbību pēc tam, kad būs nokopēti direktorijā <b> htdocs / core / triggers</b>. Viņi realizē jaunas darbības, kas aktivizētas Dolibarr notikumos (jauna uzņēmuma izveide, rēķinu apstiprināšana, ...).
     TriggerDisabledByName=Trigeri Šajā failā ir invalīdi <b>ar-NORUN</b> piedēkli savu vārdu.
     TriggerDisabledAsModuleDisabled=Trigeri Šajā failā ir invalīdi, kā modulis <b>%s</b> ir atspējots.
     TriggerAlwaysActive=Trigeri Šajā failā ir aktīva vienmēr, neatkarīgi ir aktivizēts Dolibarr moduļiem.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Ievietojiet visus atsauces datus. Varat pievienot savas vērtība
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Ierobežojumi / Precision iestatīšanas
    -LimitsDesc=Jūs varat noteikt limitus, precizējumus un optimizācijas, kas izmantotas ar Dolibarr šeit
    +LimitsDesc=Šeit jūs varat noteikt ierobežojumus, precizitātes un optimizāciju, ko Dolibarr izmanto
     MAIN_MAX_DECIMALS_UNIT=Maksimālais ciparu skaits aiz komata cenām
     MAIN_MAX_DECIMALS_TOT=Maksimālās decimāldaļas kopējai cenai
     MAIN_MAX_DECIMALS_SHOWN=Max aiz komata par cenām parādīta ekrānā (Add <b>...</b> pēc šo numuru, ja jūs vēlaties redzēt <b>...</b> kad numurs tiek apcirsti, kad redzams uz ekrāna)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Neto vienības produkta cena
     TotalPriceAfterRounding=Kopējā cena (neto/pvn/ar nodokli) pēc noapaļošanas
     ParameterActiveForNextInputOnly=Parametrs stājas spēkā no nākamās ievades
     NoEventOrNoAuditSetup=Nav drošības pasākumi ierakstīti vēl. Tas var būt normāli, ja audits nav iespējots "Iestatījumi - drošība - audtits" lapā.
    -NoEventFoundWithCriteria=Nav drošības pasākums ir atzīts par šādiem meklēšanas kritērijiem ir.
    +NoEventFoundWithCriteria=Šim meklēšanas kritērijam nav atrasts neviens drošības notikums.
     SeeLocalSendMailSetup=Skatiet sendmail iestatījumus
     BackupDesc=Lai izveidotu pilnu Dolibarr rezerves kopiju jums ir:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Saglabājiet datubāzes saturu (<b>%s</b>) noņemšanas failā. Šim nolūkam varat izmantot palīgu.
     BackupDescX=Arhivēto katalogs jāglabā drošā vietā.
     BackupDescY=Radītais dump fails jāglabā drošā vietā.
    -BackupPHPWarning=Rezerves nevar būt guaranted ar šo metodi. Dod iepriekšējo
    +BackupPHPWarning=Ar šo metodi nevar veikt rezerves kopijas. Ieteicams iepriekšējais.
     RestoreDesc=Lai atjaunotu Dolibarr rezeves kopiju jums ir:
    -RestoreDesc2=Atjaunot dokumentu direktorijas arhīva failu (piemēram zip fails), lai iegūtu failu struktūru jaunās Dolibarr instalācijas vai pašreizējā dokumentu direktorijā (<b>%s</b>).
    +RestoreDesc2=Atjaunojiet arhīvu failu (piemēram, zip fails) dokumentu direktorijā, lai iegūtu failu koku jaunā Dolibarr instalācijas dokumentu direktorijā vai šajā pašreizējā dokumentu direktorijā (<b> %s </b>).
     RestoreDesc3=Atjaunot datus no rezerves kopijas faila, datu bāzē jaunā Dolibarr instalācijā vai datu bāzē pašreizējajai instalācijai (<b>%s</b>). Brīdinājums, kad atjaunošana ir pabeigta, jums ir jāizmanto lietotāja vārds / parole, kas bija tad, kad tika veikta rezerves kopija, lai pieslēgtos atkal. Lai atjaunotu rezerves kopiju datubāzei esošajā instalācijā, jūs varat sekot šim palīgam.
     RestoreMySQL=MySQL imports
     ForcedToByAModule= Šis noteikums ir spiests <b>%s</b> ar aktivēto modulis
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Jums ir palaist šo komandu no
     YourPHPDoesNotHaveSSLSupport=SSL funkcijas, kas nav pieejama jūsu PHP
     DownloadMoreSkins=Vairāki izskati lejupielādei
     SimpleNumRefModelDesc=Atgriež atsauces numuru formātā %syymm-NNNN kur yy ir gads, MM ir mēnesis, un nnnn ir secība bez cauruma un bez reset
    -ShowProfIdInAddress=Rādīt professionnal id ar adresēm par dokumentu
    -ShowVATIntaInAddress=Slēpt PVN maksātāja numuru un adreses uz dokumentiem
    +ShowProfIdInAddress=Parādiet profesionālu ID ar adresēm uz dokumentiem
    +ShowVATIntaInAddress=Slēpt Kopienas iekšzemes PVN numuru ar adresēm dokumentos
     TranslationUncomplete=Daļējs tulkojums
    -MAIN_DISABLE_METEO=Atslēgt Meteo skatu
    +MAIN_DISABLE_METEO=Atspējot meteoroloģisko skatu
     MeteoStdMod=Standarta režīms
     MeteoStdModEnabled=Standarta režīms ir aktivizēts
     MeteoPercentageMod=Procentuālais režīms
     MeteoPercentageModEnabled=Procentuālais režīms ir aktivizēts
     MeteoUseMod=Noklikšķiniet, lai izmantotu %s
     TestLoginToAPI=Tests pieteikties API
    -ProxyDesc=Dažas Dolibarr funkcijas ir nepieciešama piekļuve internetam, lai strādātu. Noteikt šeit parametrus par to. Ja Dolibarr serveris ir aiz proxy serveri, šie parametri stāsta Dolibarr, kā piekļūt internetam, izmantojot to.
    +ProxyDesc=Dažām Dolibarr funkcijām ir nepieciešama piekļuve internetam. Šeit definējiet šeit parametrus. Ja Dolibarr serveris atrodas proxy serverī, šie parametri parāda Dolibarr, kā ar to piekļūt internetam.
     ExternalAccess=Ārējā piekļuve
     MAIN_PROXY_USE=Izmantot starpniekserveri (savādāk tieša piekļuve internetam)
     MAIN_PROXY_HOST=Nosaukums / adrese proxy serverim
     MAIN_PROXY_PORT=Proxy servera ports
     MAIN_PROXY_USER=Pieslēdzies, lai izmantotu starpniekserveri
     MAIN_PROXY_PASS=Parole, lai izmantotu starpniekserveri
    -DefineHereComplementaryAttributes=Definēt šeit visi atribūti, jau nav pieejama pēc noklusējuma, un, ka jūs vēlaties būt atbalstīta %s.
    -ExtraFields=Papildbarība atribūti
    +DefineHereComplementaryAttributes=Noteikt visus atribūtus, kas vēl nav pieejami pēc noklusējuma, un šeit vēlaties atbalstīt %s.
    +ExtraFields=Papildus atribūti
     ExtraFieldsLines=Papildinošas atribūti (līnijas)
     ExtraFieldsLinesRec=Papildu atribūti (veidņu rēķinu līnijas)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Papildinošas atribūti (thirdparty)
    -ExtraFieldsContacts=Papildinošas atribūti (kontaktpersona / adrese)
    +ExtraFieldsContacts=Papildu atribūti (kontaktadrese)
     ExtraFieldsMember=Papildinošas atribūti (biedrs)
     ExtraFieldsMemberType=Papildinošas atribūti (biedrs tipa)
     ExtraFieldsCustomerInvoices=Papildinošas atribūti (rēķini)
    @@ -1141,48 +1150,49 @@ ExtraFieldsSupplierOrders=Papildinošas atribūti (rīkojumi)
     ExtraFieldsSupplierInvoices=Papildinošas atribūti (rēķini)
     ExtraFieldsProject=Papildinošas atribūti (projekti)
     ExtraFieldsProjectTask=Papildinošas atribūti (uzdevumi)
    -ExtraFieldHasWrongValue=Attribute %s has a wrong value.
    +ExtraFieldHasWrongValue=Parametram %s ir nepareiza vērtība.
     AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters without space
     SendmailOptionNotComplete=Brīdinājums, par dažiem Linux sistēmām, lai nosūtītu e-pastu no jūsu e-pastu, sendmail izpilde uzstādīšana ir iekļauti variants-ba (parametrs mail.force_extra_parameters savā php.ini failā). Ja daži saņēmēji nekad saņemt e-pastus, mēģina labot šo PHP parametru ar mail.force_extra_parameters =-BA).
     PathToDocuments=Ceļš līdz dokumentiem
     PathDirectory=Katalogs
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Funkcija sūtīt vēstules, izmantojot metodi "PHP mail direct", ģenerēs pasta ziņojumu, kuru daži saņēmēji pasta serveri var nepareizi parsēt. Rezultāts ir tāds, ka atsevišķas vēstules nevar lasīt cilvēki, kurus ved uz šīm bugged platformām. Tas attiecas uz dažiem interneta pakalpojumu sniedzējiem (piem., Orange Francijā). Šī nav problēma ar Dolibarr vai PHP, bet ar saņēmēja pasta serveri. Tomēr, lai izvairītos no tā, var pievienot opciju MAIN_FIX_FOR_BUGGED_MTA līdz 1 iestatījumos - Citi, lai modificētu Dolibarr. Tomēr jums var rasties problēmas ar citiem serveriem, kas stingri izmanto SMTP standartu. Cits risinājums (ieteicams) ir izmantot metodi "SMTP ligzdu bibliotēka", kurai nav trūkumu.
     TranslationSetup=Tulkojumu konfigurēšana
     TranslationKeySearch=Meklēt tulkošanas atslēgu vai virkni
     TranslationOverwriteKey=Pārrakstīt rakstīšanas virkni
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=Jūs varat arī ignorēt virknes, kas aizpilda nākamo tabulu. Izvēlieties savu valodu no %s nolaižamās izvēlnes, ievietojiet tulkošanas taustiņu virkni uz "%s" un jauno tulkojumu uz "%s"
    -TranslationOverwriteDesc2=Varat izmantot citu cilni, lai palīdzētu jums zināt tulkošanas atslēgu, kuru vēlaties izmantot
    +TranslationOverwriteDesc2=Varat izmantot citu cilni, lai uzzinātu, kuru tulkošanas atslēgu izmantot
     TranslationString=Tulkošanas virkne
     CurrentTranslationString=Pašreizējā tulkošanas virkne
     WarningAtLeastKeyOrTranslationRequired=Vismaz atslēgas vai tulkošanas virknei ir nepieciešams meklēšanas kritērijs
     NewTranslationStringToShow=Jauna tulkošanas virkne, lai parādītu
     OriginalValueWas=Oriģinālais tulkojums ir pārrakstīts. Sākotnējā vērtība bija: <br> <br> %s
    -TransKeyWithoutOriginalValue=Jūs piespiedāt jaunu tulkojumu tulkošanas taustiņam "<strong> %s </ strong>", kas nevienā valodas failā nepastāv
    +TransKeyWithoutOriginalValue=Jūs piespiedāt jaunu tulkojumu tulkošanas taustiņam "<strong> %s</strong>", kas nav nevienā valodas failā
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Jums ir jābūt ieslēgtam vismaz 1 modulim
    -ClassNotFoundIntoPathWarning=Klase %s nav atrasta PHP norādītajā ceļā
    +ClassNotFoundIntoPathWarning=Klase %s nav atrodama PHP ceļā
     YesInSummer=Jā vasarā
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Piezīme. Ārējiem lietotājiem (neatkarīgi no šādu lietotāju atļaujām) tiek atvērti tikai turpmāk minētie moduļi un tikai tad, ja tiek piešķirtas atļaujas:
     SuhosinSessionEncrypt=Sesija uzglabāšana šifrēta ar Suhosin
     ConditionIsCurrently=Stāvoklis šobrīd ir %s
    -YouUseBestDriver=Jūs varat izmantot vadītāja %s, kas ir labākais draiveris, kas pieejams šobrīd.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=Tev ir tikai %s produktus / pakalpojumus Into datu bāze. Tas nav nepieciešams kādu konkrētu optimizāciju.
    +YouUseBestDriver=Jūs izmantojat draiveri %s, kas pašlaik ir labākais draiveris.
    +YouDoNotUseBestDriver=Jūs izmantojat draiveri %s, bet ieteicams ir %s.
    +NbOfProductIsLowerThanNoPb=Jums ir tikai %s produkti/pakalpojumi datu bāzē. Tai nav nepieciešama īpaša optimizācija.
     SearchOptim=Meklēšanas optimizācija
    -YouHaveXProductUseSearchOptim=Jums ir %s ražojumu par datu bāzē. Jums vajadzētu pievienot pastāvīgu PRODUCT_DONOTSEARCH_ANYWHERE uz 1 par Home-Setup-citādi, jūs ierobežot meklēšanu uz sākuma stīgām padarot iespējams datubāzē izmantot indeksu, un jums vajadzētu saņemt tūlītēju atbildi.
    -BrowserIsOK=Jūs izmantojat interneta pārlūka %s. Šī pārlūkprogramma ir ok drošību un veiktspēju.
    -BrowserIsKO=Jūs izmantojat interneta pārlūka %s. Šī pārlūkprogramma ir zināms, ka slikta izvēle drošību, veiktspēju un uzticamību. Mēs recommand jums izmantot Firefox, Chrome, Opera vai Safari.
    +YouHaveXProductUseSearchOptim=Jūs esat %s produktu datu bāzē. Jums vajadzētu pievienot pastāvīgo PRODUCT_DONOTSEARCH_ANYWHERE uz 1 vietne Home-Setup-Other. Ierobežojiet meklēšanu ar virkņu sākumu, kas ļauj datubāzei izmantot indeksus, un jums vajadzētu saņemt tūlītēju atbildi.
    +BrowserIsOK=Jūs izmantojat tīmekļa pārlūku %s. Šī pārlūkprogramma ir droša un droša.
    +BrowserIsKO=Jūs izmantojat tīmekļa pārlūku %s. Šī pārlūka informācija ir slikta izvēle drošībai, veiktspējai un uzticamībai. Mēs iesakām izmantot Firefox, Chrome, Opera vai Safari.
     XDebugInstalled=XDebug ir ielādēts
    -XCacheInstalled=XCache ir piekrauts.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +XCacheInstalled=XCache ir ielādēts.
    +AddRefInList=Displejs Klienta / Piegādātāja ref. info saraksts (atlasiet sarakstu vai izvēles rūtiņu) un lielākā daļa hipersaišu. <br> Trešās personas parādīsies ar nosaukumu "CC12345 - SC45678 - The Big Company corp". "Big Company corp" vietā.
    +AddAdressInList=Parādiet Klienta / Piegādes adreses informācijas sarakstu (atlasiet sarakstu vai izvēles rūtiņu) <br> Trešās personas parādīsies ar nosaukumu "The Big Company corp" vietā ar nosaukumu "The Big Company corp. - 21 jump street 123456 Big city - USA".
    +AskForPreferredShippingMethod=Pieprasiet vēlamo piegādes metodi trešajām pusēm.
     FieldEdition=Izdevums lauka %s
     FillThisOnlyIfRequired=Piemērs: +2 (aizpildiet tikai, ja sastopaties ar problēmām)
     GetBarCode=Iegūt svītrukodu
     ##### Module password generation
     PasswordGenerationStandard=Atgriešanās paroli radīts saskaņā ar iekšējo Dolibarr algoritmu: 8 rakstzīmēm, kas satur kopīgos ciparus un rakstzīmes mazie burti.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Neiesakām ģenerētu paroli. Parole jāieraksta manuāli.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,30 +1205,31 @@ UserMailRequired=E-pasts nepieciešams, lai izveidotu jaunu lietotāju
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Uzņēmuma moduļa uzstādīšana
    -CompanyCodeChecker=Trešo personu kodu ģenerēšanas un pārbaudes modulis (klients vai pārdevējs)
    -AccountCodeManager=Grāmatvedības kodu ģenerēšanas modulis (klients vai pārdevējs)
    +CompanyCodeChecker=Iespējas, lai automātiski izveidotu klienta / pārdevēja kodus
    +AccountCodeManager=Iespējas automātiski ģenerēt klienta / pārdevēja grāmatvedības kodus
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* vienam lietotājam, vienam lietotājam laikā.
     NotificationsDescContact=* uz trešo pušu kontaktpersonām (klientiem vai pārdevējiem), vienu kontaktu laikā.
     NotificationsDescGlobal=* vai iestatot globālos mērķa e-pastus moduļa iestatīšanas lapā.
     ModelModules=Dokumentu veidnes
    -DocumentModelOdt=Izveidot dokumentus no OpenDocument veidnes (. ODT vai. ODS failus OpenOffice, KOffice, TextEdit, ...)
    +DocumentModelOdt=Izveidojiet dokumentus no OpenDocument veidnes (.ODT / .ODS faili no LibreOffice, OpenOffice, KOffice, TextEdit, ...)
     WatermarkOnDraft=Ūdenszīme dokumenta projektā
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Noteikumi par profesionālo IDS
    +CompanyIdProfChecker=Noteikumi par profesionāliem ID
     MustBeUnique=Jābūt unikālam?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Obligāts, lai izveidotu trešās puses (ja ir definēts PVN numurs vai uzņēmuma veids)?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Tehniskie pakalpojumi
     #####DAV #####
    -WebDAVSetupDesc=Šīs ir saites, lai piekļūtu WebDAV direktorijai. Tas satur "publisku" direktoriju, kas pieejams jebkuram lietotājam, kurš zina URL (ja ir atļauta publiskā direktorija piekļuve) un "privātai" direktorijai, kurai ir nepieciešams esošs pieteikšanās konts / parole, lai piekļūtu.
    -WebDavServer=Root URL of %s server : %s
    +WebDAVSetupDesc=Šīs ir saites, lai piekļūtu WebDAV direktorijai. Tas satur "publisku" direktoriju, kas pieejams jebkuram lietotājam, kurš zina URL (ja ir atļauta publiskā direktorija piekļuve) un "privātai" direktorijai, kurai ir nepieciešams esošais pieteikšanās konts / parole.
    +WebDavServer=%sServera:%s saknes adrese
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Eksporta saite uz <b>%s</b> formātā ir pieejams šādā tīmekļa vietnē: %s
     ##### Invoices #####
     BillsSetup=Rēķinu moduļa uzstādīšana
     BillsNumberingModule=Rēķinu un kredītu piezīmes numerācijas modelis
     BillsPDFModules=Rēķina dokumentu modeļi
    +BillsPDFModulesAccordindToInvoiceType=Rēķinu dokumentu modeļi atbilstoši rēķina veidam
     PaymentsPDFModules=Maksājumu dokumentu paraugi
     CreditNote=Kredīta piezīme
     CreditNotes=Kredīta piezīmes
    @@ -1228,7 +1239,7 @@ SuggestPaymentByRIBOnAccount=Ieteikt maksājumus, ko izņemt no konta
     SuggestPaymentByChequeToAddress=Ieteikt maksājumu ar čeku, lai
     FreeLegalTextOnInvoices=Brīvs teksts uz rēķiniem
     WatermarkOnDraftInvoices=Ūdenszīme uz sagataves rēķiniem (nav ja tukšs)
    -PaymentsNumberingModule=Payments numbering model
    +PaymentsNumberingModule=Maksājumu numerācijas modelis
     SuppliersPayment=Piegādātāju maksājumi
     SupplierPaymentSetup=Piegādātāju maksājumu iestatīšana
     ##### Proposals #####
    @@ -1245,7 +1256,7 @@ SupplierProposalPDFModules=Cenas pieprasa pārdevējiem dokumentu modeļus
     FreeLegalTextOnSupplierProposal=Brīvs teksts cenu pieprasījumu pārdevējiem
     WatermarkOnDraftSupplierProposal=Ūdenszīme par cenu cenu pieprasījumu pārdevējiem (neviens nav tukšs)
     BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=Ask for bank account destination of price request
    -WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Ask for Warehouse Source for order
    +WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Pieprasīt noliktavas avotu pasūtīšanai
     ##### Suppliers Orders #####
     BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Pieprasiet bankas konta galamērķi pirkuma pasūtījumā
     ##### Orders #####
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Pārvaldīt Pieteikšanos katram dalībniekam
     AdherentMailRequired=E-Mail nepieciešams, lai izveidotu jaunu locekli
     MemberSendInformationByMailByDefault=Rūtiņu, lai nosūtītu pasta apstiprinājums locekļiem (validāciju vai jauns abonements) ir ieslēgts pēc noklusējuma
     VisitorCanChooseItsPaymentMode=Apmeklētājs var izvēlēties pieejamos maksājumu veidus
    +MEMBER_REMINDER_EMAIL=Iespējot automātisku atgādinājumu  <b>pa e-pastu </b> no abonementiem ar beigu datumu. Piezīme: modulis <strong> %s </strong> ir jāaktivizē un pareizi iestatīts, lai saņemtu atgādinājumu.
     ##### LDAP setup #####
     LDAPSetup=LDAP iestatījumi
     LDAPGlobalParameters=Globālie parametri
    @@ -1325,7 +1337,7 @@ LDAPMemberDnExample=Complete DN (ex: ou = biedri, dc = piemēram, dc = com)
     LDAPMemberObjectClassList=Saraksts objektklasi
     LDAPMemberObjectClassListExample=Saraksts objektklasi definējot ierakstu atribūtiem (ex: top, inetOrgPerson vai augšas, lietotājs Active Directory)
     LDAPMemberTypeDn=Dolibarr biedru veidi DN
    -LDAPMemberTypepDnExample=Pabeigt DN (ex: ou = dalībnieku tipi, dc = piemērs, dc = com)
    +LDAPMemberTypepDnExample=Pabeigt DN (piem: ou = dalībnieku tipi, dc = piemērs, dc = com)
     LDAPMemberTypeObjectClassList=Saraksts objektklasi
     LDAPMemberTypeObjectClassListExample=Saraksts objektklasi definējot ierakstu atribūtiem (ex: top, groupOfUniqueNames)
     LDAPUserObjectClassList=Saraksts objektklasi
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Testa dalībnieka tipa sinhronizācija
     LDAPTestSearch= Testēt LDAP meklēšanu
     LDAPSynchroOK=Sinhronizācijas tests veiksmīgi pabeigts
     LDAPSynchroKO=Neizdevās sinhronizācijas pārbaude
    -LDAPSynchroKOMayBePermissions=Neizdevās sinhronizācijas pārbaude. Pārbaudiet, vai saistība ar serveri ir pareizi konfigurēts un ļauj LDAP udpates
    +LDAPSynchroKOMayBePermissions=Neizdevās sinhronizācijas tests. Pārbaudiet, vai savienojums ar serveri ir pareizi konfigurēts un atļauj LDAP atjauninājumus
     LDAPTCPConnectOK=TCP savienojumu ar LDAP servera veiksmīgiem (Server = %s, Port = %s)
     LDAPTCPConnectKO=TCP savienojumu ar LDAP serveri neizdevās (Server = %s, Port = %s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Savienot / Authentificate ar LDAP serveri neizdevās (Server = %s, Port = %s, Admin = %s, Password = %s)
    +LDAPBindOK=Veiksmīgi pievienojiet / autentificējiet LDAP serveri (Server = %s, Port = %s, Admin = %s, Parole = %s)
    +LDAPBindKO=Nepieslēgties / autentificēt LDAP serverī (serveris = %s, ports = %s, Admin = %s, parole = %s)
     LDAPSetupForVersion3=LDAP serveris konfigurēts 3 versijai
     LDAPSetupForVersion2=LDAP serveris konfigurēta 2 versijai
     LDAPDolibarrMapping=Dolibarr kartēšana
    @@ -1387,8 +1399,8 @@ LDAPFieldTownExample=Piemērs: l
     LDAPFieldCountry=Valsts
     LDAPFieldDescription=Apraksts
     LDAPFieldDescriptionExample=Piemērs: apraksts
    -LDAPFieldNotePublic=Public Note
    -LDAPFieldNotePublicExample=Example : publicnote
    +LDAPFieldNotePublic=Publiskā piezīme
    +LDAPFieldNotePublicExample=Piemērs: publiskā piezīme
     LDAPFieldGroupMembers= Grupas dalībnieki
     LDAPFieldGroupMembersExample= Piemērs: uniqueMember
     LDAPFieldBirthdate=Dzimšanas diena
    @@ -1409,46 +1421,47 @@ LDAPDescMembersTypes=Šī lapa ļauj definēt LDAP atribūtu nosaukumu LDAP kok
     LDAPDescValues=Piemērs vērtības ir paredzētas <b>OpenLDAP</b> ar šādām ielādes shēmu: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Ja jūs izmantojat thoose vērtības un OpenLDAP, mainīt savu LDAP config failu <b>slapd.conf</b> lai visi thoose shēmas ielādēta.
     ForANonAnonymousAccess=Par apstiprinātu piekļuvi (par rakstīšanas piekļuvi piemēram)
     PerfDolibarr=Performance uzstādīšana / optimizēt ziņojums
    -YouMayFindPerfAdviceHere=Jūs atradīsiet šajā lapā dažas pārbaudes, vai padomus, kas saistīti ar sniegumu.
    -NotInstalled=Nav uzstādīta, lai jūsu serveris nav palēnināt ar šo.
    +YouMayFindPerfAdviceHere=Šajā lapā ir sniegtas dažas pārbaudes vai ieteikumi saistībā ar veiktspēju.
    +NotInstalled=Nav uzstādīts, tāpēc jūsu serveris netiek palēnināts ar to.
     ApplicativeCache=Applicative kešatmiņa
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=Opcode cache
    -NoOPCodeCacheFound=Nav opcode cache atrasts. Var būt jūs izmantojat citu opcode cache nekā XCache vai eAccelerator (labi), var būt jums nav opcode cache (ļoti slikti).
    +NoOPCodeCacheFound=Nav atrasta OPCode kešatmiņa. Varbūt jūs izmantojat OPCode kešatmiņu, kas nav XCache vai eAccelerator (labi), vai varbūt jums nav OPCode kešatmiņas (ļoti slikta).
     HTTPCacheStaticResources=HTTP kešatmiņu statisko resursu (CSS, img, javascript)
     FilesOfTypeCached=Faili tipa %s ir kešatmiņā ar HTTP serveri
     FilesOfTypeNotCached=Faili tipa %s nav kešatmiņā ar HTTP serveri
     FilesOfTypeCompressed=Faili Tipa %s tiek saspiesti ar HTTP serveri
     FilesOfTypeNotCompressed=Faili Tipa %s nav saspiesti ar HTTP serveri
    -CacheByServer=Cache serverim
    +CacheByServer=Servera kešatmiņa
     CacheByServerDesc=Piemēram, izmantojot Apache direktīvu "ExpiresByType image / gif A2592000"
    -CacheByClient=Cache pārlūks
    +CacheByClient=Pārlūka kešatmiņa
     CompressionOfResources=Kompresijas HTTP atbildes
     CompressionOfResourcesDesc=Piemēram, izmantojot Apache direktīvu "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=Jūs varat definēt / piespiest šeit noklusējuma vērtību, kuru vēlaties iegūt, kad izveidojat jaunu ierakstu un / vai noņemat filtrus vai kārtotu kārtību, kad jūsu saraksts ieraksts.
    -DefaultCreateForm=Noklusējuma vērtības (veidlapās, kas jāizveido)
    +DefaultValuesDesc=Šeit jūs varat definēt / izpildīt noklusējuma vērtību, kuru vēlaties izveidot, kad izveidojat jaunu ierakstu un / vai noklusējuma filtrus, vai kārtot kārtību, kad jūsu saraksts ieraksta.
    +DefaultCreateForm=Noklusējuma vērtības (veidot veidlapās)
     DefaultSearchFilters=Noklusējuma meklēšanas filtri
     DefaultSortOrder=Noklusējuma kārtošanas kārtība
     DefaultFocus=Noklusējuma fokusa lauki
    +DefaultMandatory=Obligātie veidlapu lauki
     ##### Products #####
     ProductSetup=Produktu moduļa uzstādīšana
     ServiceSetup=Pakalpojumu moduļa uzstādīšana
     ProductServiceSetup=Produktu un pakalpojumu moduļu uzstādīšana
     NumberOfProductShowInSelect=Maksimālais skaits produktu kombinācijas izvēlētos sarakstus (0 = nav ierobežojumu)
    -ViewProductDescInFormAbility=Vizualizācija produktu aprakstiem formām (citādi kā popup Tooltip)
    +ViewProductDescInFormAbility=Parādīt produkta aprakstus veidlapās (citādi kā uznirstošo rīku padomu)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Displeja produktu apraksti trešās puses valodā
    +UseSearchToSelectProductTooltip=Arī tad, ja jums ir liels produktu skaits (> 100 000), varat palielināt ātrumu, iestatot iestatījumu -> Cits iestatījumu konstante PRODUCT_DONOTSEARCH_ANYWHERE uz 1. Tad meklēšana būs tikai virknes sākums.
    +UseSearchToSelectProduct=Pagaidiet, kamēr nospiedīsiet taustiņu, pirms ievietojat produktu kombinēto sarakstu saturu (tas var palielināt veiktspēju, ja jums ir daudz produktu, taču tas ir mazāk ērts).
     SetDefaultBarcodeTypeProducts=Noklusējuma svītrkoda veids izmantojams produktiem
     SetDefaultBarcodeTypeThirdParties=Svītrkodu veids pēc noklusējuma trešām personām
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
     ProductCodeChecker= Modulis produkta koda paaudzes un pārbaudes (produkts vai pakalpojums)
     ProductOtherConf= Produktu / pakalpojumu konfigurācija
    -IsNotADir=is not a directory!
    +IsNotADir=nav direktorija!
     ##### Syslog #####
     SyslogSetup=Logfailu moduļa iestatījumi
     SyslogOutput=Logfailu  izvade
    @@ -1459,7 +1472,7 @@ YouCanUseDOL_DATA_ROOT=Jūs varat izmantot DOL_DATA_ROOT / dolibarr.log uz log f
     ErrorUnknownSyslogConstant=Constant %s nav zināms Syslog konstante
     OnlyWindowsLOG_USER=Windows atbalsta tikai LOG_USER
     CompressSyslogs=Atkļūdošanas žurnāla failu saspiešana un dublēšana (ko ģenerē modulis Log par atkļūdošanu)
    -SyslogFileNumberOfSaves=Log backups
    +SyslogFileNumberOfSaves=Žurnālfailu rezerves kopijas
     ConfigureCleaningCronjobToSetFrequencyOfSaves=Konfigurējiet regulāro darbu tīrīšanu, lai iestatītu žurnāla dublēšanas biežumu
     ##### Donations #####
     DonationsSetup=Ziedojumu moduļa uzstādīšana
    @@ -1470,7 +1483,7 @@ PaperFormatModule=Drukāšanas formāta modulis
     BarcodeEncodeModule=Svītrkodu kodēšanas veids
     CodeBarGenerator=Svītrkodu ģenerators
     ChooseABarCode=Nav noteikts ģenerators
    -FormatNotSupportedByGenerator=Format not supported by this generator
    +FormatNotSupportedByGenerator=Šis ģenerators neatbalsta šo formātu
     BarcodeDescEAN8=Svītrkods EAN8 veids
     BarcodeDescEAN13=Svītrkods EAN13 veida
     BarcodeDescUPC=Svītrkoda veids UPC
    @@ -1499,11 +1512,11 @@ NotificationSetup=EMail notification module setup
     NotificationEMailFrom=Nosūtītāja e-pasts (No) uz e-pastu nosūtīti paziņojumi
     FixedEmailTarget=Fixed email target
     ##### Sendings #####
    -SendingsSetup=Nosūtot modulis iestatīšanu
    +SendingsSetup=Nosūtīšanas moduļa iestatīšana
     SendingsReceiptModel=Nosūtot saņemšanas modeli
     SendingsNumberingModules=Sendings numerācijas moduļus
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=Lielākajā daļā gadījumu piegādes lapas tiek izmantotas gan kā klientu pasūtījumu lapas (nosūtāmo produktu saraksts), gan arī klienta saņemtas un parakstītas lapas. Tādējādi produktu piegādes kvīts ir dublēta funkcija un reti tiek aktivizēta.
     FreeLegalTextOnShippings=Brīvais teksts piegādēs
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Produkti piegādes kvīts numerācija modulis
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Uzlabotais redaktors
     ActivateFCKeditor=Aktivizēt uzlabotos redaktoru:
     FCKeditorForCompany=WYSIWYG izveidi / izdevums no elementiem apraksta un piezīmi (izņemot produktu / pakalpojumu)
     FCKeditorForProduct=WYSIWYG radīšana / izdevums produktu / pakalpojumu apraksts un atzīmēt
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>\n
    +FCKeditorForProductDetails=WYSIWIG produktu izveides / izlaiduma detalizētu informāciju par visām vienībām (priekšlikumi, pasūtījumi, rēķini utt.). <font class="warning"> Brīdinājums: šīs opcijas izmantošana šajā gadījumā nav nopietni ieteicama, jo, veidojot PDF failus, tas var radīt problēmas ar īpašām rakstzīmēm un lapu formatējumu. </font>
     FCKeditorForMailing= WYSIWYG izveide/ izdevums masveida emailings (Tools-> e-pastu)
     FCKeditorForUserSignature=WYSIWYG izveide/labošana lietotāja paraksta
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Savienojums izdevās, bet datu bāzē neizskatās būt OsCommerce datubāzi (Pamatrādītāji %s nav atrasts galda %s).
    -OSCommerceTestOk=Savienojums ar serveri '%s' par datu bāzē '%s' ar lietotāja '%s' sekmīgi pabeigta.
    -OSCommerceTestKo1=Savienojums ar serveri '%s' izdoties, bet datubāze '%s' nevar sasniegt.
    -OSCommerceTestKo2=Savienojums ar serveri '%s' ar lietotāja '%s' neizdevās.
    +OSCommerceErrorConnectOkButWrongDatabase=Savienojums ir sekmīgs, bet datu bāze, šķiet, nav OSCommerce datubāze (atslēga %s nav atrodama %s tabulā).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Pieslēgšana serverim '%s' izdevās, taču datubāzi '%s' nevarēja sasniegt.
    +OSCommerceTestKo2=Savienojums ar serveri '%s' ar lietotāju '%s' neizdevās.
     ##### Stock #####
     StockSetup=Krājumu moduļa iestatīšana
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=Ja jūs izmantojat Punkta pārdošanas moduli (POS), ko nodrošina pēc noklusējuma vai ārējais modulis, šo POS uzstādīšanu var ignorēt jūsu POS modulis. Lielākā daļa POS moduļu ir izveidoti pēc noklusējuma, lai nekavējoties izveidotu rēķinu un samazinātu krājumu neatkarīgi no iespējām šeit. Tātad, ja jums ir vai nav krājumu samazināšanās, reģistrējoties pārdošanai no jūsu POS, pārbaudiet arī POS moduļa iestatījumus.
     ##### Menu #####
     MenuDeleted=Izvēlne dzēsta
     Menus=Izvēlnes
    @@ -1548,22 +1561,22 @@ DetailRight=Nosacījums, lai parādītu neatļautu pelēks izvēlnes
     DetailLangs=Lang faila nosaukumu etiķetes kodu tulkošanai
     DetailUser=Iekšējie / Ārējie / Visi
     Target=Mērķis
    -DetailTarget=Mērķis saitēm (_blank top atvērts jauns logs)
    +DetailTarget=Mērķauditorijas saites (_blank augšā atver jaunu logu)
     DetailLevel=Līmenis (-1: top menu, 0: header menu >0 izvēlne un apakšizvēlne)
     ModifMenu=Izvēlnes maiņa
     DeleteMenu=Dzēst izvēlnes ierakstu
    -ConfirmDeleteMenu=Are you sure you want to delete menu entry <b>%s</b>?
    +ConfirmDeleteMenu=Vai tiešām vēlaties dzēst ierakstu <b> %s </b>?
     FailedToInitializeMenu=Failed to initialize menu
     ##### Tax #####
     TaxSetup=Taxes, social or fiscal taxes and dividends module setup
     OptionVatMode=PVN jāmaksā
     OptionVATDefault=Standarta bāze
    -OptionVATDebitOption=Accrual basis
    +OptionVATDebitOption=Uzkrājumu princips
     OptionVatDefaultDesc=PVN ir jāmaksā: <br> - Piegādes laikā precēm (mēs izmantojam rēķina datumu) <br> - Par maksājumiem par pakalpojumiem
     OptionVatDebitOptionDesc=PVN ir jāmaksā: <br> - Piegādes laikā precēm (mēs izmantojam rēķina datumu) <br> - Par rēķinu (debets) attiecībā uz pakalpojumiem
     OptionPaymentForProductAndServices=Naudas bāze produktiem un pakalpojumiem
     OptionPaymentForProductAndServicesDesc=PVN ir jāmaksā: <br> - par samaksu par precēm <br> - par maksājumiem par pakalpojumiem
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=PVN piemērošanas laiks pēc noklusējuma saskaņā ar izvēlēto iespēju:
     OnDelivery=Piegādes brīdī
     OnPayment=Par samaksu
     OnInvoice=Uz rēķina
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Iegādes konta. kods
     AgendaSetup=Notikumi un kārtības modulis uzstādīšana
     PasswordTogetVCalExport=Galvenais atļaut eksporta saiti
     PastDelayVCalExport=Neeksportē notikums, kuri vecāki par
    -AGENDA_USE_EVENT_TYPE=Izmantojiet notikumu tipus (tiek pārvaldīta izvēlnē Iestatīšana -> Vārdnīcas -> Darba kārtības notikumu veids).
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Izmantojiet notikumu tipus (tiek pārvaldīti izvēlnē Iestatīšana -> Vārdnīcas -> Darba kārtības notikumu veids).
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Veidojot notikuma veidlapu, automātiski iestatiet šo noklusējuma vērtību
    +AGENDA_DEFAULT_FILTER_TYPE=Šādu pasākumu automātiski iestatīt darba kārtības skatā meklēšanas filtūrā
    +AGENDA_DEFAULT_FILTER_STATUS=Automātiski iestatīt šo statusu notikumu skatīšanai darba filtru meklēšanas filtūrā
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
    -AGENDA_REMINDER_EMAIL=Iespējot notikumu atgādinājumu <b> pa e-pastu </ b> (atgādinājums par iespēju / kavēšanos var definēt katrā notikumā). Piezīme: modulis <strong> %s </ strong> ir jāaktivizē un pareizi iestatīts, lai atgādinājums tiktu nosūtīts pareizā frekvencē.
    -AGENDA_REMINDER_BROWSER=Iespējot notikumu atgādinājumu <b> lietotāju pārlūkā </ b> (kad tiek sasniegts notikuma datums, katrs lietotājs to var noraidīt no pārlūka apstiprinājuma jautājuma)
    +AGENDA_REMINDER_EMAIL=Iespējot notikumu atgādinājumu <b> pa e-pastu </b> (atgādinājums par iespēju / kavēšanos var definēt katrā notikumā). Piezīme: modulis <strong> %s </strong> ir jāaktivizē un pareizi jāiestata, lai atgādinājums tiktu nosūtīts pareizā laikā.
    +AGENDA_REMINDER_BROWSER=Iespējot notikuma atgādinājumu <b>lietotāja pārlūkā</b> (kad ir sasniegts notikuma datums, katrs lietotājs to var noraidīt no pārlūka apstiprinājuma jautājuma)
     AGENDA_REMINDER_BROWSER_SOUND=Iespējot skaņas paziņojumu
     AGENDA_SHOW_LINKED_OBJECT=Parādīt saistīto objektu darba kārtībā
     ##### Clicktodial #####
     ClickToDialSetup=Klikšķiniet lai  Dial moduļa uzstādīšanas
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=Šis modulis ļauj tālruņu numurus noklikšķināt. Klikšķis uz šīs ikonas tiks izsaukts, lai jūsu tālruņa zvanu veiktu tālruņa numurs. To var izmantot, lai zvanītu uz Dolibarr zvanu centra sistēmu, kas, piemēram, var izsaukt tālruņa numuru SIP sistēmā.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Izmantojiet šo metodi, ja jūsu lietotājiem ir programmatūras tālrunis vai programmatūras interfeiss, kas uzstādīts uz tā paša datora kā pārlūks, un tiek izsaukts, kad jūs noklikšķināt uz savas pārlūkprogrammas saites, kas sākas ar "tel:". Ja jums ir nepieciešams pilnīgs servera risinājums (nav nepieciešama lokālā programmatūras instalēšana), jums tas jādara, lai tas būtu "nē" un aizpildītu nākamo lauku.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Tirdzniecības punkts
     CashDeskSetup=Pārdošanas punktu moduļa iestatīšana
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Noklusējuma vispārējā trešā puse, ko izmanto pārdošanai
     CashDeskBankAccountForSell=Noklusējuma konts, lai izmantotu, lai saņemtu naudas maksājumus
     CashDeskBankAccountForCheque= Noklusējuma konts, lai izmantotu, lai saņemtu maksājumus ar čeku
     CashDeskBankAccountForCB= Noklusējuma konts, lai izmantotu, lai saņemtu maksājumus ar kredītkarti
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Atspējot krājumu samazinājumu, kad pārdošana tiek veikta no tirdzniecības vietas (ja "nē", krājumu samazinājums tiek veikts par katru pārdošanu, kas veikta no POS, neatkarīgi no moduļa nolikumā norādītās iespējas).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Krājumu samazinājums no tirdzniecības vietām invalīdiem
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=Veicot pārdošanu no pārdošanas vietām, jūs neesat atspējojis krājumu samazināšanos. Tādēļ ir vajadzīga noliktava.
     ##### Bookmark #####
     BookmarkSetup=Grāmatzīmju moduļa iestatīšana
    -BookmarkDesc=Šis modulis ļauj pārvaldīt grāmatzīmes. Jūs varat arī pievienot īsceļus uz jebkuru Dolibarr lapām vai externale tīmekļa vietnes uz jūsu kreisajā izvēlnē.
    +BookmarkDesc=Šis modulis ļauj pārvaldīt grāmatzīmes. Jūs varat pievienot īsceļus jebkurai Dolibarr lapai vai ārējām tīmekļa vietnēm kreisajā izvēlnē.
     NbOfBoomarkToShow=Maksimālais skaits, grāmatzīmes, lai parādītu kreisajā izvēlnē
     ##### WebServices #####
     WebServicesSetup=Veikalu modulis uzstādīšana
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-kompānija modulis iestatīšana
     ##### Suppliers #####
     SuppliersSetup=Piegādātāja moduļa iestatījumi
    -SuppliersCommandModel=Pilnīga prchase pasūtījuma veidne (logotips ...)
    +SuppliersCommandModel=Pilnīga pirkuma pasūtījuma veidne (logotips ...)
     SuppliersInvoiceModel=Pabeigt pārdevēja rēķina veidni (logotips ...)
     SuppliersInvoiceNumberingModel=Piegādātāju rēķinu numerācijas modeļus
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1652,9 +1665,9 @@ TestGeoIPResult=Tests pārveides IP -> valsts
     ProjectsNumberingModules=Projektu numerācijas modulis
     ProjectsSetup=Projekta moduļa iestatījumi
     ProjectsModelModule=Projekta ziņojumi dokumenta paraugs
    -TasksNumberingModules=Uzdevumi numerācijas modulis
    +TasksNumberingModules=Uzdevumu numerācijas modulis
     TaskModelModule=Uzdevumi ziņojumi dokumenta paraugs
    -UseSearchToSelectProject=Pagaidiet, kamēr nospiediet taustiņu, pirms ievietojat projekta kombinēto sarakstu saturu (tas var palielināt veiktspēju, ja jums ir liels projektu skaits, bet tas ir mazāk ērti).
    +UseSearchToSelectProject=Pagaidiet, līdz tiek nospiests taustiņš pirms satura pievienošanas saraksta Kombinācija sarakstā. <br> Tas var uzlabot veiktspēju, ja jums ir liels projektu skaits, bet tas ir mazāk ērti.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Pārskata periodi
    @@ -1688,8 +1701,8 @@ ListOfNotificationsPerUser=Paziņojumu saraksts katram lietotājam *
     ListOfNotificationsPerUserOrContact=Paziņojumu saraksts katram lietotājam * vai katram kontaktam **
     ListOfFixedNotifications=List of fixed notifications
     GoOntoUserCardToAddMore=Atveriet lietotāja cilni "Paziņojumi", lai pievienotu vai noņemtu paziņojumus lietotājiem
    -GoOntoContactCardToAddMore=Atveriet trešās personas cilni "Paziņojumi", lai pievienotu vai noņemtu paziņojumus par kontaktpersonām / adresēm
    -Threshold=Threshold
    +GoOntoContactCardToAddMore=Atveriet trešās personas cilni "Paziņojumi", lai pievienotu vai noņemtu paziņojumus par kontaktpersonu adresēm
    +Threshold=Slieksnis
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
     SomethingMakeInstallFromWebNotPossible2=For this reason, process to upgrade described here is only manual steps a privileged user can do.
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Lai instalētu vai izveidotu ārēju moduli no lietojumprogrammas, moduļa faili jāiegādājas direktorijā <strong> %s </ strong>. Lai šo direktoriju apstrādātu Dolibarr, jums ir jāiestata <strong> conf / conf.php </ strong>, lai pievienotu 2 direktīvu līnijas: <br> <strong> $ dolibarr_main_url_root_alt = "/ custom"; </ strong> < br> <strong> $ dolibarr_main_document_root_alt = '%s / custom'; </ strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Atzīmējiet līnijas krāsu, kad tā ir atzīmēta (atstājiet tukšu, lai izceltu)
     TextTitleColor=Lapas nosaukuma teksta krāsa
     LinkColor=Linku krāsa
     PressF5AfterChangingThis=Nospiediet CTRL + F5 uz tastatūras vai dzēsiet pārlūkprogrammas kešatmiņu pēc šīs vērtības mainīšanas, lai tā būtu efektīva
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Ievadiet šeit starp aplikācijām, baitu skaitļu sarakstu, kas attēlo valūtas simbolu. Piemēram: attiecībā uz $ ievadiet [36] - Brazīlijas reālajam R $ [82,36] - par € ievadiet [8364]
     ColorFormat=RGB krāsa ir HEX formātā, piemēram: FF0000
     PositionIntoComboList=Position of line into combo lists
    -SellTaxRate=Sale tax rate
    +SellTaxRate=Pārdošanas nodokļa likme
     RecuperableOnly=Jā par PVN "Neuztverams, bet atgūstams", kas paredzēts dažai Francijas valstij. Uzturiet vērtību "Nē" visos citos gadījumos.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=Veidojot vadību, jūs definēsiet paredzēto projekta / svina apjomu. Saskaņā ar svina statusu šo summu var reizināt ar šo likmi, lai novērtētu globālo summu, ko var radīt visas jūsu iespējas. Vērtība ir procenti (no 0 līdz 100).
     TemplateForElement=This template record is dedicated to which element
    -TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TypeOfTemplate=Veidne
    +TemplateIsVisibleByOwnerOnly=Veidne ir redzama tikai īpašniekam
     VisibleEverywhere=Redzams visur
     VisibleNowhere=Redzams nekur
     FixTZ=Laika zonas labojums
    @@ -1733,24 +1747,24 @@ MailToSendProposal=Klienta piedāvājumi
     MailToSendOrder=Klienta pasūtījumi
     MailToSendInvoice=Klienta rēķini
     MailToSendShipment=Sūtījumi
    -MailToSendIntervention=Interventions
    +MailToSendIntervention=Intervences
     MailToSendSupplierRequestForQuotation=Cenas pieprasījums
     MailToSendSupplierOrder=Pirkuma pasūtījumi
     MailToSendSupplierInvoice=Piegādātāja rēķini
     MailToSendContract=Līgumi
    -MailToThirdparty=Trešās personas
    +MailToThirdparty=Trešās puses
     MailToMember=Dalībnieki
     MailToUser=Lietotāji
     MailToProject=Projektu lapa
    -ByDefaultInList=Show by default on list view
    +ByDefaultInList=Rādīt pēc noklusējuma saraksta skatā
     YouUseLastStableVersion=Jūs izmantojat pēdējo stabilo versiju
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s ir pieejams. Versija %s ir liela versija ar daudzām jaunām funkcijām gan lietotājiem, gan izstrādātājiem. Jūs varat to lejupielādēt no https://www.dolibarr.org portāla lejupielādes apgabala (apakšdirektorijā Stable versijas). Lai iegūtu pilnīgu izmaiņu sarakstu, varat izlasīt <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a>.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s ir pieejams. Versija %s ir uzturēšanas versija, tāpēc tajā ir tikai kļūdu labojumi. Mēs iesakām ikvienam, kurš izmanto vecāku versiju, jaunināt uz šo. Tā kā jebkurā tehniskās apkopes izlaidumā šajā versijā nav nevienas jaunas funkcijas vai datu struktūras izmaiņas. Jūs varat to lejupielādēt no https://www.dolibarr.org portāla lejupielādes apgabala (apakšdirektorijā Stable versijas). Lai iegūtu pilnīgu izmaiņu sarakstu, varat izlasīt <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a>.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s ir pieejams. Versija %s ir uzturēšanas versija, tāpēc tajā ir tikai kļūdu labojumi. Mēs iesakām ikvienam, kurš izmanto vecāku versiju, jaunināt uz šo. Tā kā jebkurā tehniskās apkopes izlaidumā šajā versijā nav jaunu funkciju vai datu struktūras izmaiņu. Jūs varat to lejupielādēt no https://www.dolibarr.org portāla lejupielādes apgabala (apakšdirektorijā Stable versijas). Lai iegūtu pilnīgu izmaiņu sarakstu, varat izlasīt <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a>.
    +MultiPriceRuleDesc=Ja ir ieslēgta opcija "Vairāki cenu līmeņi uz produktu / pakalpojumu", katram produktam varat noteikt atšķirīgas cenas (vienu cenu līmenī). Lai ietaupītu laiku, šeit jūs varat ievadīt kārtulu, lai katram līmenim aprēķinātu cenu saskaņā ar pirmā līmeņa cenu, tāpēc katram produktam būs jāievada tikai pirmā līmeņa cena. Šī lapa ir šeit, lai ietaupītu laiku un varētu būt noderīga tikai tad, ja jūsu cenas katram līmenim ir salīdzinātas ar pirmo līmeni. Jūs varat ignorēt šo lapu vairumā gadījumu.
     ModelModulesProduct=Veidlapas produktu dokumentos
    -ToGenerateCodeDefineAutomaticRuleFirst=Lai varētu automātiski ģenerēt kodus, vispirms ir jāiestata pārvaldnieks, lai automātiski noteiktu svītrkoda numuru.
    +ToGenerateCodeDefineAutomaticRuleFirst=Lai varētu automātiski ģenerēt kodus, vispirms ir jānosaka pārvaldnieks, lai automātiski noteiktu svītrkoda numuru.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=Skatīt ChangeLog failu (tikai angļu valodā)
     AllPublishers=Visi izdevēji
    @@ -1762,42 +1776,73 @@ AddData=Pievienojiet objektus vai vārdnīcu datus
     AddBoxes=Pievienot logrīkus
     AddSheduledJobs=Pievienot plānotos darbus
     AddHooks=Add hooks
    -AddTriggers=Add triggers
    +AddTriggers=Pievienot aktivizētājus
     AddMenus=Pievienot izvēlnes
     AddPermissions=Pievienot atļaujas
    -AddExportProfiles=Add export profiles
    +AddExportProfiles=Pievienot eksportēšanas profilus
     AddImportProfiles=Add import profiles
     AddOtherPagesOrServices=Pievienot citas lapas vai pakalpojumus
     AddModels=Pievienojiet dokumentu vai numerācijas veidnes
     AddSubstitutions=Pievienot atslēgu aizvietojumus
     DetectionNotPossible=Atklāšana nav iespējama
    -UrlToGetKeyToUseAPIs=Url, lai saņemtu token lai izmantotu API (pēc tam, kad ir saņemts tokens, tas tiek saglabāts datu bāzes lietotāju tabulā, un tas jānorāda katrā API zvanā)
    +UrlToGetKeyToUseAPIs=URL, lai saņemtu token lai izmantotu API (pēc tam, kad ir saņemts tokens, tas tiek saglabāts datu bāzes lietotāju tabulā, un tas jānorāda katrā API zvanā)
     ListOfAvailableAPIs=Pieejamo API saraksts
    -activateModuleDependNotSatisfied=Modulis "%s" ir atkarīgs no trūkstošā moduļa "%s", tāpēc modulis "%1$s" var nedarboties. Lūdzu, instalējiet moduli "%2$s" vai deaktivizējiet moduli "%1$s", ja vēlaties būt drošs no pārsteiguma
    -CommandIsNotInsideAllowedCommands=Komanda, kuru mēģināt palaist, nav iekļauta atļauto komandu sarakstā, kas definēts parametrā <strong> $ dolibarr_main_restrict_os_commands </ strong> <strong> conf.php </ strong> failā.
    +activateModuleDependNotSatisfied=Modulis "%s" ir atkarīgs no moduļa "%s", tas trūkst, tāpēc modulis "%1$s" var nedarboties pareizi. Lūdzu, instalējiet moduli "%2$s" vai deaktivizējiet moduli "%1$s", ja vēlaties būt drošs no pārsteiguma
    +CommandIsNotInsideAllowedCommands=Komandu, kuru mēģināt palaist, nav atļauto komandu sarakstā, kas definēts <strong> $ dolibarr_main_restrict_os_commands </ strong> failā <strong> conf.php </ strong>.
     LandingPage=Galvenā lapa
    -SamePriceAlsoForSharedCompanies=Ja izmantojat vairāku kompāniju moduli, izvēloties "Vienotā cena", cena būs vienāda visiem uzņēmumiem, ja produkti tiek koplietoti vidēs
    +SamePriceAlsoForSharedCompanies=Ja jūs izmantojat daudzuzņēmumu moduli, ar izvēli "Vienotā cena", cena būs vienāda visām kompānijām, ja produkti tiek sadalīti starp vidēm
     ModuleEnabledAdminMustCheckRights=Modulis ir aktivizēts. Atļaujas aktivizētajam modulim (-iem) tika piešķirtas tikai administratoru lietotājiem. Nepieciešamības gadījumā Jums vajadzēs piešķirt tiesības citiem lietotājiem vai grupām manuāli.
    -UserHasNoPermissions=Šis lietotājs nav definējis atļauju
    -TypeCdr=Izmantojiet "Nav", ja maksājuma termiņa datums ir rēķina datums plus delta dienās (delta ir lauks "Nb dienas") <br> Lietojiet "mēneša beigās", ja pēc delta, datums ir jāpalielina lai sasniegtu mēneša beigas (+ izvēles "nobīde" dienās) <br> Izmantojiet "Pašreizējais / Nākamais", lai maksājuma termiņš būtu mēneša pirmais N (N tiek saglabāts laukā "Nb of dienas").
    +UserHasNoPermissions=Šis lietotājs nav definējis atļaujas
    +TypeCdr=Izmantojiet "Nav", ja maksājuma termiņa datums ir rēķina datums plus delta dienās (delta ir lauks "%s") <br> Lietojiet "mēneša beigās", ja pēc delta, datums ir jāpalielina, lai sasniegtu mēneša beigas (+ izvēles "%s" dienās) <br> Izmantojiet "Pašreizējais / Nākamais", lai maksājuma termiņš būtu mēneša pirmajā N mēnesī pēc delta (delta ir lauks "%s", N tiek saglabāts laukā "%s")
     BaseCurrency=Uzņēmuma atsauces valūta (iestatiet uzņēmuma iestatījumus, lai mainītu šo)
    -WarningNoteModuleInvoiceForFrenchLaw=Šis modulis %s atbilst Francijas tiesību aktiem (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=Šis modulis %s atbilst krievu likumiem (Loi Finance 2016), jo modulis Non Reversible Logs tiek automātiski aktivizēts.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Jūs mēģināt instalēt moduli %s, kas ir ārējs modulis. Ārējā moduļa aktivizēšana nozīmē, ka jūs uzticaties moduļa izdevējai, un esat pārliecināts, ka šis modulis negatīvi nemaina jūsu lietojumprogrammas darbību un atbilst jūsu valsts tiesību aktiem (%s). Ja modulis nodrošina ne juridisku funkciju, jūs kļūstat atbildīgs par nevalstiskās programmatūras izmantošanu.
    +WarningNoteModuleInvoiceForFrenchLaw=Šis modulis %s atbilst Francijas likumiem (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=Šis modulis %s atbilst Francijas likumiem (Loi Finance 2016), jo automātiski tiek aktivizēts modulis Non Reversible Logs.
    +WarningInstallationMayBecomeNotCompliantWithLaw=Jūs mēģināt instalēt moduli %s, kas ir ārējs modulis. Ārējā moduļa aktivizēšana nozīmē, ka jūs uzticaties šī moduļa izdevējam un vai esat pārliecināts, ka šis modulis nelabvēlīgi neietekmē jūsu lietojumprogrammas darbību un atbilst jūsu valsts tiesību aktiem (%s). Ja modulis ievieš nelegālu funkciju, jūs kļūstat atbildīgs par nelikumīgas programmatūras lietošanu.
     MAIN_PDF_MARGIN_LEFT=Kreisā puse PDF failā
     MAIN_PDF_MARGIN_RIGHT=Labā puse PDF failā
     MAIN_PDF_MARGIN_TOP=Galvene PDF failā
     MAIN_PDF_MARGIN_BOTTOM=Kājene PDF failā
    +NothingToSetup=Šajā modulī nav īpašu iestatījumu.
     SetToYesIfGroupIsComputationOfOtherGroups=Iestatiet to uz "jā", ja šī grupa ir citu grupu aprēķins
    -EnterCalculationRuleIfPreviousFieldIsYes=Ievadiet kalkulācijas kārtulu, ja iepriekšējais laukums ir iestatīts uz Jā (Piemēram, 'CODEGRP1 + CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Ievadiet aprēķina kārtulu, ja iepriekšējais lauks ir iestatīts uz Jā (Piemēram, 'CODEGRP1 + CODEGRP2')
     SeveralLangugeVariatFound=Atrasti vairāki valodu varianti
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Noņemt īpašās rakstzīmes
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filtrs tīrajai vērtībai (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR kontakts
    -GDPRContactDesc=Ja jūs glabājat datus par Eiropas uzņēmumiem / pilsoni, šeit varat saglabāt kontaktpersonu, kas ir atbildīgs par vispārējo datu aizsardzības regulu
    +GDPRContact=Datu aizsardzības inspektors (DPO, datu konfidencialitāte vai GDPR kontakts)
    +GDPRContactDesc=Ja jūs glabājat datus par Eiropas uzņēmumiem / pilsoni, varat saglabāt kontaktpersonu, kas ir atbildīgs par vispārējo datu aizsardzības regulu šeit
    +HelpOnTooltip=Palīdzības teksts tiek parādīts rīka padomā
    +HelpOnTooltipDesc=Šeit ievietojiet tekstu vai tulkošanas taustiņu, lai teksts tiktu rādīts rīka padomē, kad šis lauks parādās formā
    +YouCanDeleteFileOnServerWith=Šo failu varat izdzēst serverī, izmantojot komandrindu:<br>%s
    +ChartLoaded=Konta diagramma ielādēta
    +SocialNetworkSetup=Moduļa Sociālo tīklu iestatīšana
    +EnableFeatureFor=Iespējot funkcijas <strong> %s </strong>
    +VATIsUsedIsOff=Piezīme. Iespēja izmantot pārdošanas nodokli vai PVN izvēlnē %s - %s ir iestatīts uz <strong> Izslēgts</strong>, tādēļ pārdošanas nodoklis vai izmantotā PVN vienmēr būs 0 pārdošanai.
    +SwapSenderAndRecipientOnPDF=Pārsūtīt sūtītāja un adresāta adresi PDF formātā
    +FeatureSupportedOnTextFieldsOnly=Brīdinājums, funkcija tiek atbalstīta tikai teksta laukos
    +EmailCollector=E-pasta savācējs
    +EmailCollectorDescription=Pievienojiet plānoto darbu un iestatīšanas lapu, lai regulāri skenētu e-pasta kastes (izmantojot IMAP protokolu) un reģistrētu jūsu pieteikumā saņemtos e-pastus īstajā vietā un / vai izveidotu automātisku ierakstu (piemēram, potenciālie klienti).
    +NewEmailCollector=Jauns e-pasta savācējs
    +EMailHost=E-pasta IMAP serveris
    +MailboxSourceDirectory=Pastkastes avota katalogs
    +MailboxTargetDirectory=Pastkastes mērķa direktorija
    +EmailcollectorOperations=Darbi, ko veic savācējs
    +CollectNow=Savākt tagad
    +DateLastResult=Pēdējās vākšanas datums
    +LastResult=Pēdējais rezultāts
    +EmailCollectorConfirmCollectTitle=E-pasts apkopo apstiprinājumu
    +EmailCollectorConfirmCollect=Vai jūs vēlaties palaist kolekcijas kolekcionāru tagad?
    +NoNewEmailToProcess=Nav apstrādāts jauns e-pasts (atbilstošie filtri)
    +NothingProcessed=Nekas nav paveikts
    +XEmailsDoneYActionsDone=%s analizētie e-pasta ziņojumi, %s e-pasta ziņojumi, kas veiksmīgi apstrādāti (par %s ierakstu / veiktajām darbībām) kolekcionārs
    +RecordEvent=Ierakstīt notikumu
    +CreateLeadAndThirdParty=Izveidojiet svinu (un, ja nepieciešams, trešo pusi)
    +CodeLastResult=Pēdējā vākšanas rezultāta kods
    +NbOfEmailsInInbox=E-pasta numurs avota direktorijā
     ##### Resource ####
     ResourceSetup=Konfigurācijas moduļa resurss
     UseSearchToSelectResource=Izmantojiet meklēšanas formu, lai izvēlētos resursu (nevis nolaižamo sarakstu).
     DisabledResourceLinkUser=Atspējot funkciju, lai resursus saistītu ar lietotājiem
     DisabledResourceLinkContact=Atspējot funkciju, lai resursu saistītu ar kontaktpersonām
     ConfirmUnactivation=Apstipriniet moduļa atiestatīšanu
    +OnMobileOnly=Tikai mazam ekrānam (viedtālrunim)
    +DisableProspectCustomerType=Atspējojiet "Prospect + Customer" trešās puses veidu (tādēļ trešai personai jābūt Prospect vai Klientam, bet nevar būt abas)
    diff --git a/htdocs/langs/lv_LV/agenda.lang b/htdocs/langs/lv_LV/agenda.lang
    index e40f2206320..2b18ae1ecfc 100644
    --- a/htdocs/langs/lv_LV/agenda.lang
    +++ b/htdocs/langs/lv_LV/agenda.lang
    @@ -31,18 +31,19 @@ ViewWeek=Nedēļas skats
     ViewPerUser=Katra lietotāja skats
     ViewPerType=Viena veida skats
     AutoActions= Automātiskā aizpildīšana
    -AgendaAutoActionDesc= Define here events for which you want Dolibarr to create automatically an event in agenda. If nothing is checked, only manual actions will be included in logged and visible into agenda. Automatic tracking of business actions done on objects (validation, status change) will not be saved.
    -AgendaSetupOtherDesc= Šī lapa sniedz iespējas, lai ļautu eksportēt savu Dolibarr notikumiem uz ārēju kalendāru (Thunderbird, Google Calendar, ...)
    +AgendaAutoActionDesc= Šeit jūs varat definēt notikumus, kurus Dolibarr vēlaties automātiski izveidot programmā. Ja nekas nav atzīmēts, logos tiks iekļautas tikai rokasgrāmatas un parādīsies programmā. Automātiska biznesa darbību veikšana objektos (validācija, statusa maiņa) netiks saglabāta.
    +AgendaSetupOtherDesc= Šajā lapā ir iespējas, kā atļaut eksportēt jūsu Dolibarr notikumus ārējā kalendārā (pērkona negaiss, kalendārs google ...)
     AgendaExtSitesDesc=Šī lapa ļauj atzīt ārējos avotus kalendārus, lai redzētu savus notikumus uz Dolibarr kārtībā.
     ActionsEvents=Pasākumi, par kuriem Dolibarr radīs prasību kārtībā automātiski
    -EventRemindersByEmailNotEnabled=Pasākumu atgādinājumus pa e-pastu netika aktivizēts Agenda moduļa iestatījumos.
    +EventRemindersByEmailNotEnabled=Pasākumu atgādinājumi pa e-pastu netika iespējoti %s moduļa iestatījumos.
     ##### Agenda event labels #####
     NewCompanyToDolibarr=Trešā puse izveidota %s
     ContractValidatedInDolibarr=Līgumi %s apstiprināti
    +CONTRACT_DELETEInDolibarr=Līgums %s svītrots
     PropalClosedSignedInDolibarr=Piedāvājumi %s parakstīti
     PropalClosedRefusedInDolibarr=Piedāvājums %s atteikts
     PropalValidatedInDolibarr=Priekšlikums %s apstiprināts
    -PropalClassifiedBilledInDolibarr=Proposal %s classified billed
    +PropalClassifiedBilledInDolibarr=Priekšlikums %s klasificēts samaksāts
     InvoiceValidatedInDolibarr=Rēķins %s apstiprināts
     InvoiceValidatedInDolibarrFromPos=Invoice %s validated from POS
     InvoiceBackToDraftInDolibarr=Rēķins %s doties atpakaļ uz melnrakstu
    @@ -54,8 +55,8 @@ MemberModifiedInDolibarr=Dalībnieks %s labots
     MemberResiliatedInDolibarr=Dalībnieks %s ir izbeigts
     MemberDeletedInDolibarr=Dalībnieks %s dzēsts
     MemberSubscriptionAddedInDolibarr=Abonements %s dalībniekam %s pievienots
    -MemberSubscriptionModifiedInDolibarr=Abonements %s biedram %s ir modificēts
    -MemberSubscriptionDeletedInDolibarr=Abonements %s biedram %s svītrots
    +MemberSubscriptionModifiedInDolibarr=Abonements %s biedram %s ir labots
    +MemberSubscriptionDeletedInDolibarr=Abonements %s dalībniekam %s dzēsts
     ShipmentValidatedInDolibarr=Sūtījums %s apstiprināts
     ShipmentClassifyClosedInDolibarr=Sūtījums %s, kas klasificēts kā rēķins
     ShipmentUnClassifyCloseddInDolibarr=Sūtījums %s klasificēts atkārtoti atvērts
    @@ -74,7 +75,7 @@ OrderSentByEMail=Klienta pasūtījums %s nosūtīts pa e-pastu
     InvoiceSentByEMail=Klienta rēķins %s nosūtīts pa e-pastu
     SupplierOrderSentByEMail=Piegādātāja pasūtījums %s nosūtīts pa e-pastu
     SupplierInvoiceSentByEMail=Piegādātāja rēķins %s nosūtīts pa e-pastu
    -ShippingSentByEMail=Shipment %s sent by EMail
    +ShippingSentByEMail=Sūtījums %s nosūtīts pa e-pastu
     ShippingValidated= Sūtījums %s apstiprināts
     InterventionSentByEMail=Intervention %s sent by EMail
     ProposalDeleted=Piedāvājums dzēsts
    @@ -83,10 +84,10 @@ InvoiceDeleted=Rēķins dzēsts
     PRODUCT_CREATEInDolibarr=Produkts %s ir izveidots
     PRODUCT_MODIFYInDolibarr=Produkts %s ir labots
     PRODUCT_DELETEInDolibarr=Produkts %s dzēsts
    -EXPENSE_REPORT_CREATEInDolibarr=Izdevēja ziņojums %s izveidots
    +EXPENSE_REPORT_CREATEInDolibarr=Izdevumu pārskats %s izveidots
     EXPENSE_REPORT_VALIDATEInDolibarr=Izdevumu pārskats %s ir apstiprināts
     EXPENSE_REPORT_APPROVEInDolibarr=Izdevumu pārskats %s ir apstiprināts
    -EXPENSE_REPORT_DELETEInDolibarr=Izdevumu pārskats %s svītrots
    +EXPENSE_REPORT_DELETEInDolibarr=Izdevumu pārskats %s dzēsts
     EXPENSE_REPORT_REFUSEDInDolibarr=Izdevumu pārskats %s noraidītie
     PROJECT_CREATEInDolibarr=Projekts %s izveidots
     PROJECT_MODIFYInDolibarr=Projekts %s ir labots
    @@ -97,10 +98,10 @@ DateActionStart=Sākuma datums
     DateActionEnd=Beigu datums
     AgendaUrlOptions1=Jūs varat pievienot arī šādus parametrus, lai filtrētu produkciju:
     AgendaUrlOptions3=<b>logina=%s</b> to restrict output to actions owned by a user <b>%s</b>.
    -AgendaUrlOptionsNotAdmin=<b> logina =! %s </ b>, lai ierobežotu izvadi uz darbībām, kas nav lietotāja īpašumā <b> %s </ b>.
    +AgendaUrlOptionsNotAdmin=<b>logina =! %s</b>, lai ierobežotu izvadi darbībām, kas nav lietotāja īpašumā <b>%s</b>.
     AgendaUrlOptions4=<b>logint=%s</b> to restrict output to actions assigned to user <b>%s</b> (owner and others).
     AgendaUrlOptionsProject=<b> project = __ PROJECT_ID __ </ b>, lai ierobežotu izlaidi darbībām, kas saistītas ar projektu <b> __ PROJECT_ID __ </ b>.
    -AgendaUrlOptionsNotAutoEvent=<b> notactiontype = systemauto </ b>, lai izslēgtu automātisku notikumu.
    +AgendaUrlOptionsNotAutoEvent=<b> notactiontype = systemauto </b>, lai izslēgtu automātiskus notikumus.
     AgendaShowBirthdayEvents=Rādīt kontaktu dzimšanas dienas
     AgendaHideBirthdayEvents=Slēpt kontaktu dzimšanas dienas
     Busy=Aizņemts
    @@ -110,7 +111,7 @@ DefaultWorkingHours=Noklusējuma darba stundas dienā (Piemēram: 9-18)
     # External Sites ical
     ExportCal=Eksportēt kalendāru
     ExtSites=Importēt ārējos kalendārus
    -ExtSitesEnableThisTool=Show external calendars (defined into global setup) into agenda. Does not affect external calendars defined by users.
    +ExtSitesEnableThisTool=Rādiet ārējos kalendārus (definēti vispārējā iestatījumā) programmā. Neietekmē lietotāja definētie ārējie kalendāri.
     ExtSitesNbOfAgenda=Kalendāru skaits
     AgendaExtNb=Kalendāra Nr. %s
     ExtSiteUrlAgenda=URL, lai piekļūtu. ICal failam
    diff --git a/htdocs/langs/lv_LV/banks.lang b/htdocs/langs/lv_LV/banks.lang
    index f9eb621f7c2..060daf141f6 100644
    --- a/htdocs/langs/lv_LV/banks.lang
    +++ b/htdocs/langs/lv_LV/banks.lang
    @@ -7,7 +7,7 @@ BankName=Bankas nosaukums
     FinancialAccount=Konts
     BankAccount=Bankas konts
     BankAccounts=Banku konti
    -BankAccountsAndGateways=Bankas konti | Vārti
    +BankAccountsAndGateways=Banka|Vārtejas
     ShowAccount=Rādīt kontu
     AccountRef=Finanšu konta ref
     AccountLabel=Finanšu konts nosaukums
    @@ -35,7 +35,7 @@ SwiftValid=BIC / SWIFT derīgs
     SwiftVNotalid=BIC/SWIFT nav derīgs
     IbanValid=Derīgs BAN
     IbanNotValid=BAN nav derīgs
    -StandingOrders=Direct Debit orders
    +StandingOrders=Tiešā debeta pasūtījumi
     StandingOrder=Tiešā debeta rīkojums
     AccountStatement=Konta izraksts
     AccountStatementShort=Paziņojums
    @@ -46,7 +46,7 @@ BankAccountDomiciliation=Konta adrese
     BankAccountCountry=Konta valsts
     BankAccountOwner=Konta īpašnieka vārds
     BankAccountOwnerAddress=Konta īpašnieka adrese
    -RIBControlError=Integritātes pārbaude vērtību neizdodas. Tas nozīmē, ka informācija par šo konta numuru, nav pilnīga vai nepareizi (pārbaudiet valsti, numuri un IBAN).
    +RIBControlError=Vērtību integritātes pārbaude neizdodas. Tas nozīmē, ka informācija par šī konta numuru ir nepilnīga vai nepareiza (pārbaudiet valsti, ciparus un IBAN).
     CreateAccount=Izveidot kontu
     NewBankAccount=Jauns konts
     NewFinancialAccount=Jauns finanšu konts
    @@ -76,6 +76,7 @@ TransactionsToConciliate=Entries to reconcile
     Conciliable=Var saskaņot
     Conciliate=Samierināt
     Conciliation=Samierināšanās
    +SaveStatementOnly=Saglabāt tikai paziņojumu
     ReconciliationLate=Saskaņošana ir novēlota
     IncludeClosedAccount=Iekļaut slēgtos kontus
     OnlyOpenedAccount=Tikai atvērtie konti
    @@ -91,9 +92,9 @@ LineRecord=Darījums
     AddBankRecord=Pievienot ierakstu
     AddBankRecordLong=Pievienot ierakstu manuāli
     Conciliated=Saskaņots
    -ConciliatedBy=Jāsaskaņo ar
    +ConciliatedBy=Saskaņots ar
     DateConciliating=Izvērtējiet datumu
    -BankLineConciliated=Entry reconciled
    +BankLineConciliated=Ieraksts ir saskaņots
     Reconciled=Saskaņots
     NotReconciled=Nesaskaņot
     CustomerInvoicePayment=Klienta maksājums
    @@ -104,19 +105,19 @@ SocialContributionPayment=Social/fiscal tax payment
     BankTransfer=Bankas pārskaitījums
     BankTransfers=Bankas pārskaitījumi
     MenuBankInternalTransfer=Iekšējā pārsūtīšana
    -TransferDesc=Transfer from one account to another one, Dolibarr will write two record (a debit in source account and a credit in target account. The same amount (except sign), label and date will be used for this transaction)
    +TransferDesc=Pārejot no viena konta uz otru, Dolibarr uzraksta divus ierakstus (debeta avota kontā un kredīta mērķa kontā). Šim darījumam tiks izmantota tāda pati summa (izņemot zīmi), etiķeti un datumu)
     TransferFrom=No
     TransferTo=Kam
     TransferFromToDone=No <b>%s</b> nodošana <b>%s</b> par <b>%s</b> %s ir ierakstīta.
     CheckTransmitter=Raidītājs
    -ValidateCheckReceipt=Validate this check receipt?
    -ConfirmValidateCheckReceipt=Are you sure you want to validate this check receipt, no change will be possible once this is done?
    +ValidateCheckReceipt=Vai apstiprināt šo čeku?
    +ConfirmValidateCheckReceipt=Vai tiešām vēlaties apstiprināt šo čeka kvīti, ja vien tas nenotiks, izmaiņas nebūs iespējamas?
     DeleteCheckReceipt=Dzēst šo čeku?
     ConfirmDeleteCheckReceipt=Vai tiešām vēlaties dzēst šo čeka kvīti?
     BankChecks=Bankas čeki
    -BankChecksToReceipt=Checks awaiting deposit
    +BankChecksToReceipt=Pārbaudes, kas gaida noguldījumu
     ShowCheckReceipt=Rādīt pārbaude depozīta saņemšanu
    -NumberOfCheques=Pārbaužu skaits
    +NumberOfCheques=Čeku skaits
     DeleteTransaction=Dzēst ierakstu
     ConfirmDeleteTransaction=Vai tiešām vēlaties dzēst šo ierakstu?
     ThisWillAlsoDeleteBankRecord=Tas arī izdzēš izveidotos bankas darījumus
    @@ -135,8 +136,8 @@ BankTransactionLine=Bankas darījums
     AllAccounts=Visi bankas un naudas konti
     BackToAccount=Atpakaļ uz kontu
     ShowAllAccounts=Parādīt visiem kontiem
    -FutureTransaction=Darījumi ar Futur. Nav veids, kā samierināt.
    -SelectChequeTransactionAndGenerate=Izvēlieties / filtru pārbaudes, lai iekļautu uz pārbaudes depozīta saņemšanas un noklikšķiniet uz &quot;Izveidot&quot;.
    +FutureTransaction=Darījums nākotnē. Nav iespējams samierināties.
    +SelectChequeTransactionAndGenerate=Atlasiet / filtru pārbaudes, lai iekļautu čeku depozīta kvīti, un noklikšķiniet uz "Izveidot".
     InputReceiptNumber=Choose the bank statement related with the conciliation. Use a sortable numeric value: YYYYMM or YYYYMMDD
     EventualyAddCategory=Galu galā, norādiet kategoriju, kurā klasificēt ierakstus
     ToConciliate=Saskaņot?
    @@ -147,13 +148,13 @@ LabelRIB=BAN Label
     NoBANRecord=No BAN record
     DeleteARib=Delete BAN record
     ConfirmDeleteRib=Are you sure you want to delete this BAN record ?
    -RejectCheck=Check returned
    +RejectCheck=Čeks atgriezts
     ConfirmRejectCheck=Vai tiešām vēlaties atzīmēt šo pārbaudi kā noraidītu?
     RejectCheckDate=Date the check was returned
     CheckRejected=Check returned
     CheckRejectedAndInvoicesReopened=Check returned and invoices reopened
     BankAccountModelModule=Dokumentu veidnes banku kontiem
    -DocumentModelSepaMandate=SEPA mandāta veidne. Lietošanai eiropas valstīs tikai EEK.
    +DocumentModelSepaMandate=SEPA mandāta veidne. Noderīga Eiropas valstīm tikai EEK.
     DocumentModelBan=Veidne, lai izdrukātu lapu ar BAN informāciju.
     NewVariousPayment=Jauni dažādi maksājumi
     VariousPayment=Dažādi maksājumi
    @@ -162,4 +163,4 @@ ShowVariousPayment=Parādīt dažādus maksājumus
     AddVariousPayment=Pievienot dažādus maksājumus
     SEPAMandate=SEPA mandāts
     YourSEPAMandate=Jūsu SEPA mandāts
    -FindYourSEPAMandate=Tas ir jūsu SEPA mandāts, lai pilnvarotu mūsu uzņēmumu veikt tiešā debeta pasūtījumu savai bankai. Pateicamies, ka tas ir parakstīts (parakstītā dokumenta skenēšana) vai nosūtīts pa pastu uz adresi
    +FindYourSEPAMandate=Tas ir jūsu SEPA mandāts, lai pilnvarotu mūsu uzņēmumu veikt tiešā debeta pasūtījumu savai bankai. Atgriezt to parakstu (skenēt parakstīto dokumentu) vai nosūtīt pa pastu uz
    diff --git a/htdocs/langs/lv_LV/bills.lang b/htdocs/langs/lv_LV/bills.lang
    index e9bbe02852a..ed92ad9f0db 100644
    --- a/htdocs/langs/lv_LV/bills.lang
    +++ b/htdocs/langs/lv_LV/bills.lang
    @@ -11,7 +11,7 @@ BillsSuppliersUnpaidForCompany=Neapmaksātie piegādātāja -u rēķini %s
     BillsLate=Kavētie maksājumi
     BillsStatistics=Klientu rēķinu statistika
     BillsStatisticsSuppliers=Piegādātāju rēķinu statistika
    -DisabledBecauseDispatchedInBookkeeping=Disabled because invoice was dispatched into bookkeeping
    +DisabledBecauseDispatchedInBookkeeping=Atspējots, jo rēķins tika nosūtīts uzskaites veikšanai
     DisabledBecauseNotLastInvoice=Disabled because invoice is not erasable. Some invoices were recorded after this one and it will create holes in the counter.
     DisabledBecauseNotErasable=Bloķēts, jo nedrīkst dzēst
     InvoiceStandard=Standarta rēķins
    @@ -25,15 +25,15 @@ InvoiceProFormaAsk=Proforma rēķins
     InvoiceProFormaDesc=<b>Formāta rēķins</b> ir attēls patiesu rēķina, bet nav nekādas grāmatvedības uzskaites vērtības.
     InvoiceReplacement=Nomaiņas rēķins
     InvoiceReplacementAsk=Nomaiņa rēķins par rēķinu
    -InvoiceReplacementDesc=<b>Replacement invoice</b> is used to cancel and replace completely an invoice with no payment already received.<br><br>Note: Only invoices with no payment on it can be replaced. If the invoice you replace is not yet closed, it will be automatically closed to 'abandoned'.
    +InvoiceReplacementDesc=<b> Nomaiņa rēķins </ b> tiek izmantots, lai atceltu un pilnībā nomainītu rēķinu bez jau saņemta maksājuma. <br> <br> Piezīme. Var nomainīt tikai rēķinus bez maksājuma. Ja rēķins, kuru nomaināt, vēl nav aizvērts, tas tiks automātiski slēgts, lai "pamestu".
     InvoiceAvoir=Kredīta piezīme
     InvoiceAvoirAsk=Kredīta piezīme, lai koriģētu rēķinu
    -InvoiceAvoirDesc=<b>Kredīts piezīme</b> ir negatīvs rēķins izmantot, lai atrisinātu to, ka rēķins ir summa, kas atšķiras par summu, patiesībā maksā (jo klients maksā pārāk daudz kļūdas dēļ, vai arī nav samaksāta pilnībā, jo viņš atgriezās dažus produktus, piemēram).
    +InvoiceAvoirDesc=<b> kredītrēķins</b>  ir negatīvs faktūrrēķins, ko izmanto, lai labotu faktu, ka rēķinā ir summa, kas atšķiras no faktiski samaksātās summas (piemēram, klients ir kļūdaini samaksājis pārāk lielu summu vai pilnībā nemaksā, jo viņš atgriezīsies produkti).
     invoiceAvoirWithLines=Create Credit Note with lines from the origin invoice
     invoiceAvoirWithPaymentRestAmount=Create Credit Note with remaining unpaid of origin invoice
     invoiceAvoirLineWithPaymentRestAmount=Kredīta piezīme par atlikušo neapmaksāto summu
     ReplaceInvoice=Aizstāt rēķinu %s
    -ReplacementInvoice=Nomaiņa rēķins
    +ReplacementInvoice=Nomaiņas rēķins
     ReplacedByInvoice=Aizstāts ar rēķinu %s
     ReplacementByInvoice=Aizstāts ar rēķinu
     CorrectInvoice=Labot rēķinu %s
    @@ -66,12 +66,12 @@ paymentInInvoiceCurrency=rēķinu valūtā
     PaidBack=Atmaksāts atpakaļ
     DeletePayment=Izdzēst maksājumu
     ConfirmDeletePayment=Vai tiešām vēlaties dzēst šo maksājumu?
    -ConfirmConvertToReduc=Do you want to convert this %s into an absolute discount ?<br>The amount will so be saved among all discounts and could be used as a discount for a current or a future invoice for this customer.
    -ConfirmConvertToReducSupplier=Vai jūs vēlaties pārvērst šo %s par absolūtu atlaidi? <br> Šī summa tiks saglabāta starp visām atlaidēm un varētu tikt izmantota kā atlaide pašreizējam vai nākamajam rēķinam šim piegādātājam.
    +ConfirmConvertToReduc=Vai jūs vēlaties pārvērst šo %s par absolūtu atlaidi? <br> Summa tiks saglabāta starp visām atlaidēm, un to varēs izmantot kā atlaidi pašreizējam vai turpmākam rēķinam šim klientam.
    +ConfirmConvertToReducSupplier=Vai jūs vēlaties pārvērst šo %s par absolūtu atlaidi? <br> Summa tiks saglabāta starp visām atlaidēm, un to varēs izmantot kā atlaidi pašreizējam vai turpmākam rēķinam šim piegādātājam.
     SupplierPayments=Piegādātāju maksājumi
     ReceivedPayments=Saņemtie maksājumi
     ReceivedCustomersPayments=Maksājumi, kas saņemti no klientiem
    -PayedSuppliersPayments=Payments payed to suppliers
    +PayedSuppliersPayments=Piegādātājiem maksātie maksājumi
     ReceivedCustomersPaymentsToValid=Saņemtās klientiem maksājumu apstiprināšanai,
     PaymentsReportsForYear=Maksājumu atskaites par %s
     PaymentsReports=Maksājumu atskaites
    @@ -91,8 +91,8 @@ PaymentConditionsShort=Apmaksas noteikumi
     PaymentAmount=Maksājuma summa
     ValidatePayment=Apstiprināt maksājumu
     PaymentHigherThanReminderToPay=Maksājumu augstāka nekā atgādinājums par samaksu
    -HelpPaymentHigherThanReminderToPay=Uzmanība, maksājuma summu, no vienas vai vairākām rēķinus, ir lielāks nekā pārējās maksāt. <br> Labot savu ierakstu, citādi apstiprināt un domāt par izveidot kredīta piezīmi par pārsnieguma saņem par katru pārmaksāto rēķiniem.
    -HelpPaymentHigherThanReminderToPaySupplier=Uzmanību, vienas vai vairāku rēķinu maksājuma summa ir augstāka nekā pārējā summa, kas jāmaksā. <br> Rediģējiet savu ierakstu, citādi apstipriniet un domājiet par kredīta paziņojuma izveidi par pārsniegto samaksu par katru pārmaksāto rēķinu.
    +HelpPaymentHigherThanReminderToPay=Uzmanību! Viena vai vairāku rēķinu maksājuma summa ir lielāka par nesamaksāto summu. <br> Rediģējiet savu ierakstu, citādi apstipriniet un apsveriet iespēju izveidot kredītzīmi par pārsniegto saņemto summu par katru pārmaksāto rēķinu.
    +HelpPaymentHigherThanReminderToPaySupplier=Uzmanību! Viena vai vairāku rēķinu maksājuma summa ir lielāka par nesamaksāto summu. <br> Rediģējiet savu ierakstu, citādi apstipriniet un apsveriet iespēju izveidot kredītzīmi par pārsniegto samaksu par katru pārmaksāto rēķinu.
     ClassifyPaid=Klasificēt "Apmaksāts"
     ClassifyPaidPartially=Klasificēt 'Apmaksāts daļēji'
     ClassifyCanceled=Klasificēt &quot;Abandoned&quot;
    @@ -131,7 +131,8 @@ BillStatusClosedUnpaid=Slēgts (nav apmaksāts)
     BillStatusClosedPaidPartially=Samaksāts (daļēji)
     BillShortStatusDraft=Melnraksts
     BillShortStatusPaid=Apmaksāts
    -BillShortStatusPaidBackOrConverted=Refund or converted
    +BillShortStatusPaidBackOrConverted=Atmaksāts vai konvertēts
    +Refunded=Atmaksāts
     BillShortStatusConverted=Apmaksāts
     BillShortStatusCanceled=Pamesti
     BillShortStatusValidated=Pārbaudīts
    @@ -141,16 +142,16 @@ BillShortStatusNotRefunded=Neatmaksā
     BillShortStatusClosedUnpaid=Slēgts
     BillShortStatusClosedPaidPartially=Samaksāts (daļēji)
     PaymentStatusToValidShort=Jāpārbauda
    -ErrorVATIntraNotConfigured=Intracommunautary PVN numurs vēl nav noteikta
    +ErrorVATIntraNotConfigured=Kopienas iekšējais PVN maksāšanas numurs vēl nav noteikts
     ErrorNoPaiementModeConfigured=Nav noklusējuma maksājumu režīms noteikts. Iet uz rēķinu modulis uzstādīšanas noteikt šo.
     ErrorCreateBankAccount=Izveidojiet bankas kontu, tad iet uz Setup paneli Rēķins moduli, lai noteiktu maksājumu veidiem
     ErrorBillNotFound=Rēķins %s neeksistē
    -ErrorInvoiceAlreadyReplaced=Kļūdas, jūs mēģināt apstiprināt rēķinu, lai aizstātu rēķinu %s. Bet tas viens jau ir aizstāts ar rēķinu %s.
    +ErrorInvoiceAlreadyReplaced=Kļūda, mēģinājāt apstiprināt rēķinu, lai aizstātu rēķinu %s. Bet šis jau ir aizstāts ar rēķinu %s.
     ErrorDiscountAlreadyUsed=Kļūda, atlaide jau tiek pielietota
     ErrorInvoiceAvoirMustBeNegative=Kļūda, pareizs rēķins, jābūt ar negatīvu summu
     ErrorInvoiceOfThisTypeMustBePositive=Kļūda, šim rēķina veidam ir jābūt ar pozitīvu summu
     ErrorCantCancelIfReplacementInvoiceNotValidated=Kļūda, nevar atcelt rēķinu, kas ir aizstāts ar citu rēķina, kas vēl ir projekta stadijā
    -ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Šī daļa jau ir izmantota, tāpēc noņemt atlaides seriju.
    +ErrorThisPartOrAnotherIsAlreadyUsedSoDiscountSerieCantBeRemoved=Šī daļa jau ir izmantota, tāpēc atlaides sērijas nevar noņemt.
     BillFrom=No
     BillTo=Kam
     ActionsOnBill=Pasākumi attiecībā uz rēķinu
    @@ -163,14 +164,14 @@ LastBills=Pēdējie %s rēķini
     LatestTemplateInvoices=Jaunākie %s veidņu rēķini
     LatestCustomerTemplateInvoices=Jaunākie %s klientu veidņu rēķini
     LatestSupplierTemplateInvoices=Jaunākie %s piegādātāju veidņu rēķini
    -LastCustomersBills=Latest %s customer invoices
    -LastSuppliersBills=Latest %s supplier invoices
    +LastCustomersBills=Jaunākie %s klientu rēķini
    +LastSuppliersBills=Jaunākie %s piegādātāja rēķini
     AllBills=Visi rēķini
     AllCustomerTemplateInvoices=Visi veidņu rēķini
     OtherBills=Citi rēķini
     DraftBills=Rēķinu sagatave
    -CustomersDraftInvoices=Customer draft invoices
    -SuppliersDraftInvoices=Supplier draft invoices
    +CustomersDraftInvoices=Klienta rēķinu sagataves
    +SuppliersDraftInvoices=Piegādātāja rēķinu sagataves
     Unpaid=Nesamaksāts
     ConfirmDeleteBill=Vai tiešām vēlaties dzēst šo rēķinu?
     ConfirmValidateBill=Vai jūs tiešām vēlaties apstiprināt šo rēķinu ar atsauci <b>%s</b>?
    @@ -179,20 +180,20 @@ ConfirmClassifyPaidBill=Vai esat pārliecināts, ka vēlaties mainīt rēķina <
     ConfirmCancelBill=Vai esat pārliecināts, ka vēlaties atcelt rēķinu <b>%s</b> ?
     ConfirmCancelBillQuestion=Kāpēc jūs vēlaties, lai klasificētu šo rēķinu 'pamests'?
     ConfirmClassifyPaidPartially=Vai esat pārliecināts, ka vēlaties mainīt rēķina <b>%s,</b> statusu uz samaksāts?
    -ConfirmClassifyPaidPartiallyQuestion=Šis rēķins nav samaksāts pilnībā. Kādi ir iemesli, lai aizvērtu šo rēķinu?
    -ConfirmClassifyPaidPartiallyReasonAvoir=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I regularise the VAT with a credit note.
    -ConfirmClassifyPaidPartiallyReasonDiscount=Atlikušais neapmaksātais <b> (%s %s) </ b> ir piešķirta atlaide, jo maksājums tika veikts pirms termiņa.
    +ConfirmClassifyPaidPartiallyQuestion=Šis rēķins nav pilnībā samaksāts. Kāds ir iemesls, kāpēc jūs slēdzat šo rēķinu?
    +ConfirmClassifyPaidPartiallyReasonAvoir=Atlikušais neapmaksātais <b> (%s %s) </b> ir piešķirta atlaide, jo maksājums tika veikts pirms termiņa. Es regulē PVN ar kredītzīmi.
    +ConfirmClassifyPaidPartiallyReasonDiscount=Atlikušais neapmaksātais <b> (%s %s) </b> ir piešķirta atlaide, jo maksājums tika veikts pirms termiņa.
     ConfirmClassifyPaidPartiallyReasonDiscountNoVat=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I accept to lose the VAT on this discount.
     ConfirmClassifyPaidPartiallyReasonDiscountVat=Remaining unpaid <b>(%s %s)</b> is a discount granted because payment was made before term. I recover the VAT on this discount without a credit note.
     ConfirmClassifyPaidPartiallyReasonBadCustomer=Slikts klients
     ConfirmClassifyPaidPartiallyReasonProductReturned=Produkti daļēji atgriezti
     ConfirmClassifyPaidPartiallyReasonOther=Summa pamesti cita iemesla dēļ
    -ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=Šī izvēle ir iespējama, ja jūsu rēķins ir nodrošinātas ar piemērotu komentāru. (Piemērs «tikai nodoklis, kas atbilst cenai, kas ir faktiski samaksāta dod tiesības atskaitīt»)
    -ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=Dažās valstīs, šī izvēle varētu būt iespējama tikai tad, ja rēķins ir pareizo noti.
    +ConfirmClassifyPaidPartiallyReasonDiscountNoVatDesc=Šī izvēle ir iespējama, ja jūsu rēķinā tiek piedāvāti piemēroti komentāri. (Piemērs "Tikai nodoklis, kas atbilst faktiski samaksātajai cenai, dod tiesības uz atskaitījumu")
    +ConfirmClassifyPaidPartiallyReasonDiscountVatDesc=Dažās valstīs šī izvēle var būt iespējama tikai tad, ja jūsu rēķins satur pareizas piezīmes.
     ConfirmClassifyPaidPartiallyReasonAvoirDesc=Izmantojiet šo izvēli, ja visi citi neapmierina
    -ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=<b>Slikts klients</b> ir klients, kas atsakās samaksāt savu parādu.
    +ConfirmClassifyPaidPartiallyReasonBadCustomerDesc=<b> sliktais pircējs</b>  ir klients, kurš atsakās maksāt parādu.
     ConfirmClassifyPaidPartiallyReasonProductReturnedDesc=Šo izvēli izmanto, ja samaksa nav bijusi pilnīga, jo daži no produktiem, tika atgriezti
    -ConfirmClassifyPaidPartiallyReasonOtherDesc=Izmantot šo izvēli, ja visi citi nav piemēroti, piemēram, šādos apstākļos: <br> - Maksājums nav pabeigta, jo daži produkti tika nosūtīti atpakaļ <br> - Pieprasītā summa ir pārāk svarīgs, jo atlaide bija aizmirsts <br> Visos gadījumos, summa pār-apgalvots, ir jākoriģē uzskaites sistēmā, izveidojot kredītu piezīmi.
    +ConfirmClassifyPaidPartiallyReasonOtherDesc=Izmantojiet šo izvēli, ja visi citi nav piemēroti, piemēram, šādā situācijā: <br> - maksājums nav pabeigts, jo daži produkti tika nosūtīti atpakaļ <br> - pieprasītā summa ir pārāk svarīga, jo atlaide tika aizmirsta <br> visos gadījumos summa Pārmērīgi liels pieprasījums ir jālabo grāmatvedības sistēmā, izveidojot kredītzīmi.
     ConfirmClassifyAbandonReasonOther=Cits
     ConfirmClassifyAbandonReasonOtherDesc=Šī izvēle tiek izmantota visos citos gadījumos. Piemēram, tāpēc, ka jūs plānojat, lai izveidotu aizstāt rēķinu.
     ConfirmCustomerPayment=Vai jūs apstiprināt šo maksājuma ievadi, <b>%s</b> %s?
    @@ -201,8 +202,9 @@ ConfirmValidatePayment=Vai jūs tiešām vēlaties apstiprināt šo maksājumu?
     ValidateBill=Apstiprināt rēķinu
     UnvalidateBill=Nepārbaudīts rēķins
     NumberOfBills=Rēķinu skaits
    -NumberOfBillsByMonth=Rēķinu skaits pa mēnešiem
    +NumberOfBillsByMonth=Rēķinu skaits mēnesī
     AmountOfBills=Rēķinu summa
    +AmountOfBillsHT=Rēķinu summa (bez nodokļiem)
     AmountOfBillsByMonthHT=Summa rēķini mēnesī (neto pēc nodokļiem)
     ShowSocialContribution=Show social/fiscal tax
     ShowBill=Rādīt rēķinu
    @@ -220,15 +222,15 @@ RemainderToPay=Neapmaksāts
     RemainderToTake=Atlikusī summa, kas jāsaņem
     RemainderToPayBack=Remaining amount to refund
     Rest=Gaida
    -AmountExpected=Pieprasīto summu
    -ExcessReceived=Excess saņemti
    +AmountExpected=Pieprasītā summa
    +ExcessReceived=Saņemts pārpalikums
     ExcessPaid=Pārmaksātā summa
     EscompteOffered=Piedāvāta atlaide (maksājums pirms termiņa)
     EscompteOfferedShort=Atlaide
     SendBillRef=Submission of invoice %s
     SendReminderBillRef=Submission of invoice %s (reminder)
    -StandingOrders=Direct debit orders
    -StandingOrder=Direct debit order
    +StandingOrders=Tiešā debeta pasūtījumi
    +StandingOrder=Tiešā debeta pasūtījums
     NoDraftBills=Nav rēķinu sagataves
     NoOtherDraftBills=Nekādi citi projekti rēķini
     NoDraftInvoices=Nav projektu rēķini
    @@ -260,9 +262,9 @@ Repeatables=Sagataves
     ChangeIntoRepeatableInvoice=Pārveidot par parauga rēķinu
     CreateRepeatableInvoice=Izveidot rēķina paraugu
     CreateFromRepeatableInvoice=Izveidot no parauga rēķina
    -CustomersInvoicesAndInvoiceLines=Klientu rēķinus un rēķinu s līnijas
    +CustomersInvoicesAndInvoiceLines=Klientu rēķini un rēķina dati
     CustomersInvoicesAndPayments=Klientu rēķini un maksājumi
    -ExportDataset_invoice_1=Klientu rēķinu sarakstu un rēķins ir līnijas
    +ExportDataset_invoice_1=Klientu rēķini un rēķina dati
     ExportDataset_invoice_2=Klientu rēķiniem un maksājumiem
     ProformaBill=Proforma Bils:
     Reduction=Atlaide
    @@ -282,9 +284,9 @@ RelativeDiscount=Relatīva atlaide
     GlobalDiscount=Globālā atlaide
     CreditNote=Kredīta piezīme
     CreditNotes=Kredīta piezīmes
    -CreditNotesOrExcessReceived=Credit notes or excess received
    -Deposit=Down payment
    -Deposits=Down payments
    +CreditNotesOrExcessReceived=Kredītkritumi vai saņemtie pārsniegumi
    +Deposit=Sākuma maksājums
    +Deposits=Sākuma maksājumi
     DiscountFromCreditNote=Atlaide no kredīta piezīmes %s
     DiscountFromDeposit=Down payments from invoice %s
     DiscountFromExcessReceived=Maksājumi, kas pārsniedz rēķinu %s
    @@ -302,12 +304,12 @@ DiscountAlreadyCounted=Atlaides vai kredīti, kas jau ir iztērēti
     CustomerDiscounts=Klientu atlaides
     SupplierDiscounts=Pārdevēja atlaides
     BillAddress=Rēķina adrese
    -HelpEscompte=Šī atlaide ir piešķirta klientam, jo ​​tas maksājumu veica pirms termiņa.
    -HelpAbandonBadCustomer=Šī summa ir pamests (klients teica, ka slikts klients), un tiek uzskatīts par ārkārtēju zaudēt.
    -HelpAbandonOther=Šī summa ir atteikusies, jo tā bija kļūda (nepareizs klients vai rēķins aizstāt ar citiem, piemēram)
    +HelpEscompte=Šī atlaide ir atlaide, kas piešķirta klientam, jo ​​maksājums tika veikts pirms termiņa.
    +HelpAbandonBadCustomer=Šī summa ir atteikta (klients uzskata par sliktu klientu), un tiek uzskatīts par ārkārtas zaudējumiem.
    +HelpAbandonOther=Šī summa ir pārtraukta, jo tā bija kļūda (piemēram, nepareizs klients vai rēķins).
     IdSocialContribution=Social/fiscal tax payment id
     PaymentId=Maksājuma id
    -PaymentRef=Maksājumu ref.
    +PaymentRef=Maksājuma ref.
     InvoiceId=Rēķina id
     InvoiceRef=Rēķina ref.
     InvoiceDateCreation=Rēķina izveides datums
    @@ -321,22 +323,22 @@ InvoiceNotChecked=Nav izvēlēts rēķins
     CloneInvoice=Klonēt rēķinu
     ConfirmCloneInvoice=Vai tiešām vēlaties klonēt šo rēķinu <b>%s</b>?
     DisabledBecauseReplacedInvoice=Darbība atspējots, jo rēķins ir aizstāts
    -DescTaxAndDividendsArea=This area presents a summary of all payments made for special expenses. Only record with payment during the fixed year are included here.
    +DescTaxAndDividendsArea=This area presents a summary of all payments made for special expenses. Only records with payment during the fixed year are included here.
     NbOfPayments=Maksājumu skaits
     SplitDiscount=Sadalīt atlaidi divās
    -ConfirmSplitDiscount=Are you sure you want to split this discount of <b>%s</b> %s into 2 lower discounts?
    -TypeAmountOfEachNewDiscount=Ievadiet summu par katru no divām daļām:
    -TotalOfTwoDiscountMustEqualsOriginal=Divām jaunajām atlaidēm jābūt vienādam ar sākotnējo atlaižu summu.
    +ConfirmSplitDiscount=Vai tiešām vēlaties sadalīt šo <b> %s </ b> %s atlaidi 2 mazākām atlaidēm?
    +TypeAmountOfEachNewDiscount=Ievades daudzums katrā no divām daļām:
    +TotalOfTwoDiscountMustEqualsOriginal=Kopā divām jaunām atlaidēm jābūt vienādām ar sākotnējo diskonta summu.
     ConfirmRemoveDiscount=Are you sure you want to remove this discount?
     RelatedBill=Saistītais rēķins
     RelatedBills=Saistītie rēķini
    -RelatedCustomerInvoices=Related customer invoices
    -RelatedSupplierInvoices=Related supplier invoices
    +RelatedCustomerInvoices=Saistītie klientu rēķini
    +RelatedSupplierInvoices=Saistītie piegādātāju rēķini
     LatestRelatedBill=Jaunākais sasitītais rēķins
    -WarningBillExist=Uzmanību, viens vai vairāki rēķini jau eksistē
    -MergingPDFTool=Merging PDF tool
    +WarningBillExist=Brīdinājums, jau ir viens vai vairāki rēķini
    +MergingPDFTool=Apvienot PDF rīks
     AmountPaymentDistributedOnInvoice=Maksājuma summa ir sadalīta rēķinā
    -PaymentOnDifferentThirdBills=Atļaut maksājumus dažādiem trešo valstu rēķiniem, bet tas pats mātes uzņēmums
    +PaymentOnDifferentThirdBills=Atļaut maksājumus dažādām trešo personu parādzīmēm, bet vienai mātes sabiedrībai
     PaymentNote=Maksājuma piezīmes
     ListOfPreviousSituationInvoices=Iepriekšējo situāciju rēķinu saraksts
     ListOfNextSituationInvoices=Nākamo situāciju rēķinu saraksts
    @@ -344,7 +346,7 @@ ListOfSituationInvoices=Rēķinu par situāciju saraksts
     CurrentSituationTotal=Kopējā pašreizējā situācija
     DisabledBecauseNotEnouthCreditNote=Lai noņemtu situācijas rēķinu no cikla, šajā rēķina kredītzīmju kopsummā jāaptver šis kopējais rēķins
     RemoveSituationFromCycle=Noņemiet šo rēķinu no cikla
    -ConfirmRemoveSituationFromCycle=Noņemiet šo rēķinu %s no cikla?
    +ConfirmRemoveSituationFromCycle=Noņemt šo rēķinu %s no cikla?
     ConfirmOuting=Apstipriniet atpūtu
     FrequencyPer_d=Katras %s dienas
     FrequencyPer_m=Katrus %s mēnešus
    @@ -394,7 +396,7 @@ PaymentConditionShort14DENDMONTH=Mēneša 14 dienas
     PaymentCondition14DENDMONTH=14 dienu laikā pēc mēneša beigām
     FixAmount=Noteikt daudzumu
     VarAmount=Mainīgais apjoms (%% tot.)
    -VarAmountOneLine=Variable amount (%% tot.) - 1 line with label '%s'
    +VarAmountOneLine=Mainīgā summa (%% kopā) - 1 rinda ar etiķeti '%s'
     # PaymentType
     PaymentTypeVIR=Bankas pārskaitījums
     PaymentTypeShortVIR=Bankas pārskaitījums
    @@ -416,11 +418,11 @@ PaymentTypeFAC=Faktors
     PaymentTypeShortFAC=Faktors
     BankDetails=Bankas rekvizīti
     BankCode=Bankas kods
    -DeskCode=Galda kods
    +DeskCode=Biroja kods
     BankAccountNumber=Konta numurs
    -BankAccountNumberKey=Taustiņš
    -Residence=Direct debit
    -IBANNumber=IBAN numurs
    +BankAccountNumberKey=Pārbaudiet ciparus
    +Residence=Tiešais debets
    +IBANNumber=IBAN pilnīgs konta numurs
     IBAN=IBAN
     BIC=BIC/SWIFT
     BICNumber=BIC / SWIFT numurs
    @@ -445,7 +447,7 @@ PaymentByTransferOnThisBankAccount=Apmaksa ar pārskaitījumu uz šādu bankas k
     VATIsNotUsedForInvoice=* Nav piemērojams PVN art-293B ar CGI
     LawApplicationPart1=Piemērojot likuma 80,335 no 12/05/80
     LawApplicationPart2=preces paliek īpašumā
    -LawApplicationPart3=pārdevējs kamēr pilnīga Čeka
    +LawApplicationPart3=pārdevējs, kamēr nav pilnībā samaksāts
     LawApplicationPart4=viņu cena.
     LimitedLiabilityCompanyCapital=SARL ar galvaspilsētu
     UseLine=Pielietot
    @@ -454,7 +456,7 @@ UseCredit=Izmantot kredītu
     UseCreditNoteInInvoicePayment=Samazināt summu ko maksā ar šo kredītu
     MenuChequeDeposits=Pārbauda noguldījumus
     MenuCheques=Pārbaudes
    -MenuChequesReceipts=Pārbaudes ieņēmumi
    +MenuChequesReceipts=Čeka kvītis
     NewChequeDeposit=Jauns noguldījums
     ChequesReceipts=Pārbaudes ieņēmumi
     ChequesArea=Pārbaudes noguldījumi zona
    @@ -476,19 +478,20 @@ CantRemovePaymentWithOneInvoicePaid=Nevar dzēst maksājumu, jo eksistē kaut vi
     ExpectedToPay=Gaidāmais maksājums
     CantRemoveConciliatedPayment=Nevar noņemt saskaņoto maksājumu
     PayedByThisPayment=Samaksāts ar šo maksājumu
    -ClosePaidInvoicesAutomatically=Classify "Paid" all standard, down payment or replacement invoices entirely paid.
    +ClosePaidInvoicesAutomatically=Klasificējiet "Apmaksā" visus standartus, iemaksājamos maksājumus vai nomainītos rēķinus, kas pilnībā samaksāti.
     ClosePaidCreditNotesAutomatically=Classify "Paid" all credit notes entirely paid back.
     ClosePaidContributionsAutomatically=Klasificējiet "Apmaksā" visas sociālās vai fiskālās iemaksas, kas pilnībā samaksātas.
    -AllCompletelyPayedInvoiceWillBeClosed=Visi rēķini, kas ir apmaksāti pilnībā automātiski tiks aizvērti ar statusu "Samaksāts".
    +AllCompletelyPayedInvoiceWillBeClosed=Viss rēķins bez atlikuma maksājuma tiks automātiski slēgts ar statusu "Apmaksāts".
     ToMakePayment=Maksāt
     ToMakePaymentBack=Atmaksāt
     ListOfYourUnpaidInvoices=Saraksts ar neapmaksātiem rēķiniem
     NoteListOfYourUnpaidInvoices=Piezīme: Šis saraksts satur tikai rēķinus par trešo pušu Jums ir saistīti ar kā pārdošanas pārstāvis.
     RevenueStamp=Ieņēmumi zīmogs
    -YouMustCreateInvoiceFromThird=This option is only available when creating invoice from tab "customer" of third par
    -YouMustCreateInvoiceFromSupplierThird=Šī opcija ir pieejama tikai, veidojot rēķinu no trešās puses cilnes "piegādātājs"
    +YouMustCreateInvoiceFromThird=Šī opcija ir pieejama tikai tad, ja izveidojat rēķinus no trešās puses cilnes "klients"
    +YouMustCreateInvoiceFromSupplierThird=Šī opcija ir pieejama tikai, veidojot rēķinus no trešās puses cilnes "piegādātājs"
     YouMustCreateStandardInvoiceFirstDesc=Vispirms vispirms jāizveido standarta rēķins un jāpārveido tas par "veidni", lai izveidotu jaunu veidnes rēķinu
     PDFCrabeDescription=Rēķina PDF  paraugs. Pilnākais rēķina paraugs (vēlamais paraugs)
    +PDFSpongeDescription=Rēķina PDF veidne Sponge. Pilnīga rēķina veidne
     PDFCrevetteDescription=Rēķina PDF veidne Crevette. Pabeigta rēķina veidne situāciju rēķiniem
     TerreNumRefModelDesc1=Return number with format %syymm-nnnn for standard invoices and %syymm-nnnn for credit notes where yy is year, mm is month and nnnn is a sequence with no break and no return to 0
     MarsNumRefModelDesc1=Atgriež numuru ar formātu %syymm-nnnn par standarta rēķiniem, %syymm-nnnn par nomainītajiem rēķiniem, %syymm-nnnn par norēķinu rēķiniem un %syymm-nnnn par kredītzīmēm, kur yy ir gads, mm ir mēnesis, un nnnn ir secība bez pārtraukuma un nē atgriezties pie 0
    @@ -533,7 +536,7 @@ invoiceLineProgressError=Rēķina līnijas progress nedrīkst būt lielāks vai
     updatePriceNextInvoiceErrorUpdateline=Kļūda: atjauniniet cenu rēķina līnijā: %s
     ToCreateARecurringInvoice=To create a recurring invoice for this contract, first create this draft invoice, then convert it into an invoice template and define the frequency for generation of future invoices.
     ToCreateARecurringInvoiceGene=To generate future invoices regularly and manually, just go on menu <strong>%s - %s - %s</strong>.
    -ToCreateARecurringInvoiceGeneAuto=If you need to have such invoices generated automatically, ask you administrator to enable and setup module <strong>%s</strong>. Note that both method (manual and automatic) can be used together with no risk of duplication.
    +ToCreateARecurringInvoiceGeneAuto=Ja jums automātiski jārada šādi rēķini, jautājiet administratoram, lai iespējotu un iestatītu moduli <strong> %s </ strong>. Ievērojiet, ka abas metodes (manuālas un automātiskas) var izmantot kopā ar dublēšanas risku.
     DeleteRepeatableInvoice=Dzēst veidnes rēķinu
     ConfirmDeleteRepeatableInvoice=Vai tiešām vēlaties izdzēst veidnes rēķinu?
     CreateOneBillByThird=Izveidojiet vienu rēķinu par trešo pusi (citādi, vienu rēķinu par pasūtījumu)
    @@ -546,3 +549,4 @@ AutoFillDateFromShort=Iestatīt sākuma datumu
     AutoFillDateTo=Iestatīt pakalpojuma līnijas beigu datumu ar nākamo rēķina datumu
     AutoFillDateToShort=Iestatīt beigu datumu
     MaxNumberOfGenerationReached=Maksimālais gen. sasniedza
    +BILL_DELETEInDolibarr=Rēķins dzēsts
    diff --git a/htdocs/langs/lv_LV/boxes.lang b/htdocs/langs/lv_LV/boxes.lang
    index 3edd2658315..dad8e61d81a 100644
    --- a/htdocs/langs/lv_LV/boxes.lang
    +++ b/htdocs/langs/lv_LV/boxes.lang
    @@ -8,7 +8,7 @@ BoxLastSupplierBills=Jaunākie piegādātāja rēķini
     BoxLastCustomerBills=Pēdējie klientu rēķini
     BoxOldestUnpaidCustomerBills=Vecākie neapmaksātie klientu rēķini
     BoxOldestUnpaidSupplierBills=Vecākie neapmaksāti piegādātāja rēķini
    -BoxLastProposals=Latest commercial proposals
    +BoxLastProposals=Jaunākie komerciālie piedāvājumi
     BoxLastProspects=Jaunākās labotās perspektīvas
     BoxLastCustomers=Jaunākie labotie klienti
     BoxLastSuppliers=Jaunākie modificētie piegādātāji
    @@ -20,22 +20,22 @@ BoxLastMembers=Jaunākie dalībnieki
     BoxFicheInter=Jaunākās intervences
     BoxCurrentAccounts=Atvērto kontu atlikums
     BoxTitleLastRssInfos=Jaunākās %s ziņas no %s
    -BoxTitleLastProducts=Jaunākie %s labotie produkti / pakalpojumi
    -BoxTitleProductsAlertStock=Produktu un krājumu brīdinājumi
    +BoxTitleLastProducts=Produkti / Pakalpojumi: jaunākais %s modificēts
    +BoxTitleProductsAlertStock=Produkti: akciju brīdinājums
     BoxTitleLastSuppliers=Jaunākie %s reģistrēti piegādātāji
    -BoxTitleLastModifiedSuppliers=Jaunākie %s labotie piegādātāji
    +BoxTitleLastModifiedSuppliers=Jaunākie %s labotie pārdevēji
     BoxTitleLastModifiedCustomers=Jaunākie %s labotie klienti
     BoxTitleLastCustomersOrProspects=Latest %s customers or prospects
    -BoxTitleLastCustomerBills=Jaunākie %s klientu rēķini
    -BoxTitleLastSupplierBills=Jaunākie %s piegādātāja rēķini
    +BoxTitleLastCustomerBills=Jaunākie %s labotie klientu rēķini
    +BoxTitleLastSupplierBills=Jaunākie %s pārveidotie pārdevēji rēķini
     BoxTitleLastModifiedProspects=Jaunākās %s labotās izredzes
    -BoxTitleLastModifiedMembers=Jaunākie %s dalībnieki
    +BoxTitleLastModifiedMembers=Jaunākie %s labotie dalībnieki
     BoxTitleLastFicheInter=Jaunākās %s izmaiņas iejaukšanās
    -BoxTitleOldestUnpaidCustomerBills=Vecākie %s neapmaksātie klientu rēķini
    -BoxTitleOldestUnpaidSupplierBills=Vecākie %s neapmaksātie piegādātāju rēķini
    -BoxTitleCurrentAccounts=Atvērto kontu atlikumi
    -BoxTitleLastModifiedContacts=Jaunākie %s labotie kontakti / adreses
    -BoxMyLastBookmarks=Manas jaunākās %s grāmatzīmes
    +BoxTitleOldestUnpaidCustomerBills=Klientu rēķini: vecākie %s neapmaksāti
    +BoxTitleOldestUnpaidSupplierBills=Piegādes rēķini: vecākie %s neapmaksāti
    +BoxTitleCurrentAccounts=Atvērtie konti: atlikumi
    +BoxTitleLastModifiedContacts=Kontakti / adreses: jaunākais %s modificēts
    +BoxMyLastBookmarks=Grāmatzīmes: jaunākās %s modificētas
     BoxOldestExpiredServices=Vecākais aktīvais beidzies pakalpojums
     BoxLastExpiredServices=Jaunākie %s vecākie kontakti ar aktīviem derīguma termiņa beigām
     BoxTitleLastActionsToDo=Jaunākās %s darbības, ko darīt
    @@ -45,7 +45,7 @@ BoxTitleLastModifiedExpenses=Jaunākie %s modificētie izdevumu pārskati
     BoxGlobalActivity=Global darbība (pavadzīmes, priekšlikumi, rīkojumi)
     BoxGoodCustomers=Labi klienti
     BoxTitleGoodCustomers=%s Labi klienti
    -FailedToRefreshDataInfoNotUpToDate=Failed to refresh RSS flux. Latest successfull refresh date: %s
    +FailedToRefreshDataInfoNotUpToDate=Neizdevās atsvaidzināt RSS plūsmu. Pēdējoreiz veiksmīgi atsvaidzināšanas datums: %s
     LastRefreshDate=Jaunākais atsvaidzināšanas datums
     NoRecordedBookmarks=Nav definētas grāmatzīmes.
     ClickToAdd=Klikšķiniet šeit, lai pievienotu.
    @@ -70,12 +70,12 @@ BoxSuppliersInvoicesPerMonth=Piegādātāja rēķini mēnesī
     BoxCustomersOrdersPerMonth=Klientu pasūtījumi mēnesī
     BoxSuppliersOrdersPerMonth=Piegādātāju pasūtījumi mēnesī
     BoxProposalsPerMonth=Priekšlikumi pa mēnešiem
    -NoTooLowStockProducts=Nav produktu ar zemu krājumu brīdinājumu
    -BoxProductDistribution=Produkti / Pakalpojumi izplatīšana
    -BoxProductDistributionFor=Izplatīšana %s par %s
    -BoxTitleLastModifiedSupplierBills=Jaunākie %s labotie piegādātāja rēķini
    -BoxTitleLatestModifiedSupplierOrders=Jaunākie %s labotie piegādātāja pasūtījumi
    -BoxTitleLastModifiedCustomerBills=Jaunākie %s modificētie klientu rēķini
    +NoTooLowStockProducts=Neviens produkts nav zemākais krājuma ierobežojums
    +BoxProductDistribution=Produktu/pakalpojumu izplatīšana
    +BoxProductDistributionFor=Izplatīšana %s ar %s
    +BoxTitleLastModifiedSupplierBills=Jaunākie %s pārveidotie pārdevēji rēķini
    +BoxTitleLatestModifiedSupplierOrders=Pēdējie %s modificēti pirkuma pasūtījumi
    +BoxTitleLastModifiedCustomerBills=Jaunākie %s labotie klientu rēķini
     BoxTitleLastModifiedCustomerOrders=Jaunākie %s labotie klientu pasūtījumi
     BoxTitleLastModifiedPropals=Pēdējie %s labotie priekšlikumi
     ForCustomersInvoices=Klientu rēķini
    diff --git a/htdocs/langs/lv_LV/cashdesk.lang b/htdocs/langs/lv_LV/cashdesk.lang
    index fe486073f3d..dc7c0a877c6 100644
    --- a/htdocs/langs/lv_LV/cashdesk.lang
    +++ b/htdocs/langs/lv_LV/cashdesk.lang
    @@ -22,13 +22,22 @@ NoArticle=Nav preču
     Identification=Identifikācija
     Article=Raksts
     Difference=Atšķirība
    -TotalTicket=Kopējā biļete
    +TotalTicket=Pieteikumi pavisam
     NoVAT=Nav PVN šo pārdošanu
    -Change=Excess saņemti
    -BankToPay=Account for payment
    +Change=Saņemts pārpalikums
    +BankToPay=Konts maksājumam
     ShowCompany=Rādīt uzņēmumu
     ShowStock=Rādīt noliktavu
     DeleteArticle=Klikšķiniet, lai izņemtu šo rakstu
     FilterRefOrLabelOrBC=Meklēšana (Ref/Nosaukums)
    -UserNeedPermissionToEditStockToUsePos=Jūs vēlaties samazināt krājumus rēķinu izveides brīdī. Lietotājs, kas izmanto POS nepieciešama atļauja rediģēt krājumus.
    -DolibarrReceiptPrinter=Dolibarr Receipt Printer
    +UserNeedPermissionToEditStockToUsePos=Jūs lūdzat samazināt krājumus rēķina izveidē, tāpēc lietotājam, kurš izmanto POS, ir jābūt atļaujai rediģēt krājumus.
    +DolibarrReceiptPrinter=Dolibarr čeku printeris
    +PointOfSale=Tirdzniecības punkts
    +CloseBill=Aizvērt rēķinu
    +Floors=Stāvi
    +Floor=Stāvs
    +AddTable=Pievienot tabulu
    +Place=Vieta
    +TakeboxNecesary=Nepieciešams lietot "TakeBOX"
    +OrderPrinters=Pasūtīt printerus
    +SearchProduct=Meklēt produktu
    diff --git a/htdocs/langs/lv_LV/categories.lang b/htdocs/langs/lv_LV/categories.lang
    index 914b413fb8f..78bb10fd7da 100644
    --- a/htdocs/langs/lv_LV/categories.lang
    +++ b/htdocs/langs/lv_LV/categories.lang
    @@ -13,10 +13,11 @@ ProductsCategoriesArea=Preču/Pakalpojumu etiķešu /sadaļa
     SuppliersCategoriesArea=Suppliers tags/categories area
     CustomersCategoriesArea=Customers tags/categories area
     MembersCategoriesArea=Members tags/categories area
    -ContactsCategoriesArea=Contacts tags/categories area
    -AccountsCategoriesArea=Accounts tags/categories area
    -ProjectsCategoriesArea=Projects tags/categories area
    -SubCats=Sub-categories
    +ContactsCategoriesArea=Kontaktu tagi / sadaļu apgabals
    +AccountsCategoriesArea=Kontu atzīmes / kategoriju apgabals
    +ProjectsCategoriesArea=Projektu tagi / kategoriju apgabals
    +UsersCategoriesArea=Lietotāju tagu / kategoriju apgabals
    +SubCats=Apakšsadaļas
     CatList=List of tags/categories
     NewCategory=Jauna etiķete/sadaļa
     ModifCat=Labot etiķeti/sadaļu
    @@ -26,7 +27,7 @@ CreateThisCat=Izveidot šo etiķeti/sadaļu
     NoSubCat=Nav apakšsadaļas.
     SubCatOf=Apakšsadaļa
     FoundCats=Atrastas etiķetes/sadaļas
    -ImpossibleAddCat=Impossible to add the tag/category %s
    +ImpossibleAddCat=Nevar pievienot tagu / sadaļu %s
     WasAddedSuccessfully=<b>%s</b> tika veiksmīgi pievienots.
     ObjectAlreadyLinkedToCategory=Element is already linked to this tag/category.
     ProductIsInCategories=Product/service is linked to following tags/categories
    @@ -38,9 +39,9 @@ ProductHasNoCategory=Šī prece/pakalpijums nav nevienā sadaļā
     CompanyHasNoCategory=This third party is not in any tags/categories
     MemberHasNoCategory=This member is not in any tags/categories
     ContactHasNoCategory=This contact is not in any tags/categories
    -ProjectHasNoCategory=This project is not in any tags/categories
    +ProjectHasNoCategory=Šis projekts nav nevienā tagā / kategorijā
     ClassifyInCategory=Add to tag/category
    -NotCategorized=Without tag/category
    +NotCategorized=Bez taga / sadaļas
     CategoryExistsAtSameLevel=Šī sadaļa jau pastāv ar šo ref
     ContentsVisibleByAllShort=Saturs redzams visiem
     ContentsNotVisibleByAllShort=Saturu visi neredz
    @@ -49,17 +50,18 @@ ConfirmDeleteCategory=Are you sure you want to delete this tag/category?
     NoCategoriesDefined=No tag/category defined
     SuppliersCategoryShort=Suppliers tag/category
     CustomersCategoryShort=Customers tag/category
    -ProductsCategoryShort=Products tag/category
    +ProductsCategoryShort=Produktu tag / sadaļa
     MembersCategoryShort=Members tag/category
     SuppliersCategoriesShort=Suppliers tags/categories
     CustomersCategoriesShort=Customers tags/categories
    -ProspectsCategoriesShort=Prospects tags/categories
    -CustomersProspectsCategoriesShort=Custo / prosp. sadaļas
    -ProductsCategoriesShort=Products tags/categories
    -MembersCategoriesShort=Members tags/categories
    +ProspectsCategoriesShort=Izredzes tagi / kategorijas
    +CustomersProspectsCategoriesShort=Cust /.Prosp. tagi / kategorijas
    +ProductsCategoriesShort=Produktu tagi / sadaļas
    +MembersCategoriesShort=Lietotāju tagi / sadaļas
     ContactCategoriesShort=Contacts tags/categories
    -AccountsCategoriesShort=Accounts tags/categories
    -ProjectsCategoriesShort=Projects tags/categories
    +AccountsCategoriesShort=Kontu atzīmes / sadaļas
    +ProjectsCategoriesShort=Projektu tagi / sadaļas
    +UsersCategoriesShort=Lietotāju atzīmes / kategorijas
     ThisCategoryHasNoProduct=Šī sadaļā nav produktu.
     ThisCategoryHasNoSupplier=Šajā sadaļā nav neviena piegādātāja.
     ThisCategoryHasNoCustomer=Šī sadaļa nesatur klientu.
    @@ -73,10 +75,10 @@ CatCusList=List of customer/prospect tags/categories
     CatProdList=List of products tags/categories
     CatMemberList=List of members tags/categories
     CatContactList=List of contact tags/categories
    -CatSupLinks=Links between suppliers and tags/categories
    +CatSupLinks=Saites starp piegādātājiem un tagiem / sadaļām
     CatCusLinks=Links between customers/prospects and tags/categories
     CatProdLinks=Links between products/services and tags/categories
    -CatProJectLinks=Links between projects and tags/categories
    +CatProJectLinks=Saiknes starp projektiem un tagiem / kategorijām
     DeleteFromCat=Remove from tags/category
     ExtraFieldsCategories=Complementary attributes
     CategoriesSetup=Tags/categories setup
    @@ -85,4 +87,4 @@ CategorieRecursivHelp=If activated, product will also linked to parent category
     AddProductServiceIntoCategory=Add the following product/service
     ShowCategory=Show tag/category
     ByDefaultInList=By default in list
    -ChooseCategory=Choose category
    +ChooseCategory=Izvēlies sadaļu
    diff --git a/htdocs/langs/lv_LV/commercial.lang b/htdocs/langs/lv_LV/commercial.lang
    index b51572cb047..a2c44e89d28 100644
    --- a/htdocs/langs/lv_LV/commercial.lang
    +++ b/htdocs/langs/lv_LV/commercial.lang
    @@ -29,7 +29,7 @@ ShowCustomer=Rādīt klientu
     ShowProspect=Parādīt perspektīvu
     ListOfProspects=Perspektīvu saraksts
     ListOfCustomers=Klientu saraksts
    -LastDoneTasks=Latest %s completed actions
    +LastDoneTasks=Jaunākās %s pabeigtās darbības
     LastActionsToDo=Vecākās %s nepabeigtās darbības
     DoneAndToDoActions=Pabeigts un Lai to izdarītu notikumus
     DoneActions=Īstenotie pasākumi
    @@ -40,7 +40,7 @@ StatusNotApplicable=Nav piemērojams
     StatusActionToDo=Jāizdara
     StatusActionDone=Pabeigts
     StatusActionInProcess=Procesā
    -TasksHistoryForThisContact=Pasākumi šo kontaktu
    +TasksHistoryForThisContact=Notikumi šim kontaktam
     LastProspectDoNotContact=Nesazināties
     LastProspectNeverContacted=Nekad neesam sazinājušies
     LastProspectToContact=Jāsazinās
    @@ -72,8 +72,8 @@ StatusProsp=Prospekta statuss
     DraftPropals=Izstrādā komerciālos priekšlikumus
     NoLimit=Nav ierobežojuma
     ToOfferALinkForOnlineSignature=Saite uz tiešsaistes parakstu
    -WelcomeOnOnlineSignaturePage=Laipni lūdzam lapā, lai pieņemtu %s komerciālos piedāvājumus
    +WelcomeOnOnlineSignaturePage=Laipni lūdzam lapā, lai pieņemtu komerciālos piedāvājumus no %s
     ThisScreenAllowsYouToSignDocFrom=Šis ekrāns ļauj pieņemt un parakstīt vai noraidīt citātu / komerciālu piedāvājumu
    -ThisIsInformationOnDocumentToSign=Šī ir informācija par dokumentu, kas pieņemams vai noraidīts
    -SignatureProposalRef=Citāts / komerciālā piedāvājuma paraksts %s
    +ThisIsInformationOnDocumentToSign=Šī ir informācija par dokumentu, kas pieņemams vai noraidāms
    +SignatureProposalRef=Cenas / komerciālā piedāvājuma parakstīšana %s
     FeatureOnlineSignDisabled=Pirms funkcija tika aktivizēta, funkcija tiešsaistes parakstīšanai ir atspējota vai dokuments ir izveidots
    diff --git a/htdocs/langs/lv_LV/companies.lang b/htdocs/langs/lv_LV/companies.lang
    index 0f5b3264b9e..f3876cf001e 100644
    --- a/htdocs/langs/lv_LV/companies.lang
    +++ b/htdocs/langs/lv_LV/companies.lang
    @@ -7,14 +7,14 @@ DeleteContact=Izdzēst kontaktu / adresi
     ConfirmDeleteContact=Vai tiešām vēlaties dzēst šo kontaktu un visu informāciju par šo kontaktu?
     MenuNewThirdParty=Jauna trešā persona
     MenuNewCustomer=Jauns klients
    -MenuNewProspect=Jauna perspektīva
    -MenuNewSupplier=New vendor
    +MenuNewProspect=Jauns prospekts
    +MenuNewSupplier=Jauns pārdevējs
     MenuNewPrivateIndividual=Jauna privātpersona
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewThirdParty=Jauna trešā persona (izredzes, klients, pārdevējs)
    +CreateDolibarrThirdPartySupplier=Izveidot trešo pusi (pārdevējs)
     CreateThirdPartyOnly=Izveidot trešo personu
    -CreateThirdPartyAndContact=Create a third party + a child contact
    +CreateThirdPartyAndContact=Izveidojiet trešo personu + bērnu kontaktu
     ProspectionArea=Apzināšanas lauks
     IdThirdParty=Trešās personas Id
     IdCompany=Uzņēmuma Id
    @@ -25,26 +25,26 @@ ThirdPartyContact=Trešās puses kontakts / adrese
     Company=Uzņēmums
     CompanyName=Uzņēmuma nosaukums
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias ​​vārds
     Companies=Uzņēmumi
    -CountryIsInEEC=Valsts ir Eiropas Ekonomikas kopienas dalībvalsts
    +CountryIsInEEC=Valsts atrodas Eiropas Ekonomikas kopienā
     ThirdPartyName=Trešās puses nosaukums
     ThirdPartyEmail=Trešās puses e-pasts
     ThirdParty=Trešā puse
    -ThirdParties=Trešās personas
    +ThirdParties=Trešās puses
     ThirdPartyProspects=Perspektīvas
     ThirdPartyProspectsStats=Perspektīvas
     ThirdPartyCustomers=Klienti
     ThirdPartyCustomersStats=Klienti
     ThirdPartyCustomersWithIdProf12=Klienti ar %s vai %s
    -ThirdPartySuppliers=Vendors
    -ThirdPartyType=Trešās puses tips
    +ThirdPartySuppliers=Pārdevēji
    +ThirdPartyType=Uzņēmuma veids
     Individual=Privātpersona
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Izveidos Trešo personu un saistītu Kontaktpersonu / Adrese ar tādu pašu informāciju kā Trešā Puse. Lielākajā daļā gadījumu, pat ja jūsu trešā persona ir fiziska persona, pietiek ar tikai trešās puses izveidi.
     ParentCompany=Mātes uzņēmums
     Subsidiaries=Filiāles
    -ReportByMonth=Report by month
    -ReportByCustomers=Report by customer
    +ReportByMonth=Atskaite par mēnesi
    +ReportByCustomers=Klienta ziņojums
     ReportByQuarter=Kursa/ reitinga ziņojums
     CivilityCode=Pieklājība kods
     RegisteredOffice=Juridiskā adrese
    @@ -52,12 +52,12 @@ Lastname=Uzvārds
     Firstname=Vārds
     PostOrFunction=Ieņemamais amats
     UserTitle=Virsraksts
    -NatureOfThirdParty=Nature of Third party
    +NatureOfThirdParty=Trešo personu būtība
     Address=Adrese
     State=Valsts / province
    -StateShort=State
    +StateShort=Valsts
     Region=Rajons
    -Region-State=Region - State
    +Region-State=Reģions - valsts
     Country=Valsts
     CountryCode=Valsts kods
     CountryId=Valsts id
    @@ -75,17 +75,17 @@ Zip=Pasta indekss
     Town=Pilsēta
     Web=Mājaslapa
     Poste= Pozīcija
    -DefaultLang=Valoda pēc noklusējuma
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    -VATIsNotUsed=Sales tax is not used
    +DefaultLang=Valodas noklusējums
    +VATIsUsed=Izmantotais pārdošanas nodoklis
    +VATIsUsedWhenSelling=Tas nosaka, vai šī trešā persona iekļauj pārdošanas nodokli vai ne, kad rēķins tiek nosūtīts saviem klientiem
    +VATIsNotUsed=Pārdošanas nodoklis netiek izmantots
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
    -PaymentBankAccount=Payment bank account
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Trešā persona, ne klients, ne pārdevējs, nav pieejami atsauces objekti
    +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Trešās puses, ne klients, ne piegādātājs, atlaides nav pieejamas
    +PaymentBankAccount=Maksājumu bankas konts
     OverAllProposals=Priekšlikumi
     OverAllOrders=Pasūtījumi
    -OverAllInvoices=Pavadzīmes
    +OverAllInvoices=Rēķini
     OverAllSupplierProposals=Cenas pieprasījumi
     ##### Local Taxes #####
     LocalTax1IsUsed=Pielietot otru nodokli
    @@ -99,9 +99,9 @@ LocalTax2ES=INFP
     TypeLocaltax1ES=RE Type
     TypeLocaltax2ES=IRPF Type
     WrongCustomerCode=Klienta kods nederīgs
    -WrongSupplierCode=Vendor code invalid
    +WrongSupplierCode=Pārdevēja kods nav derīgs
     CustomerCodeModel=Klienta koda modelis
    -SupplierCodeModel=Vendor code model
    +SupplierCodeModel=Pārdevēja koda modelis
     Gencod=Svītrkods
     ##### Professional ID #####
     ProfId1Short=Prof. id 1
    @@ -242,7 +242,7 @@ ProfId3TN=Prof Id 3 (Douane kods)
     ProfId4TN=Prof Id 4 (BAN)
     ProfId5TN=-
     ProfId6TN=-
    -ProfId1US=Prof Id (FEIN)
    +ProfId1US=Prof. Id (FEIN)
     ProfId2US=-
     ProfId3US=-
     ProfId4US=-
    @@ -258,36 +258,36 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    -VATIntraShort=Tax ID
    +VATIntra=Pārdošanas nodoklis / PVN ID
    +VATIntraShort=Nodokļu ID
     VATIntraSyntaxIsValid=Sintakse ir pareiza
    -VATReturn=VAT return
    -ProspectCustomer=Prospect / Klients
    +VATReturn=PVN atgriezšana
    +ProspectCustomer=Perspektīva/Klients
     Prospect=Perspektīva
     CustomerCard=Klienta kartiņa
     Customer=Klients
     CustomerRelativeDiscount=Relatīvā klienta atlaide
    -SupplierRelativeDiscount=Relative vendor discount
    +SupplierRelativeDiscount=Relatīvā pārdevēju atlaide
     CustomerRelativeDiscountShort=Relatīvā atlaide
     CustomerAbsoluteDiscountShort=Absolūtā atlaide
     CompanyHasRelativeDiscount=Šim klientam ir pastāvīgā atlaide <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Šim klientam nav relatīvā atlaide pēc noklusējuma
    -HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
    -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +HasRelativeDiscountFromSupplier=Jums ir šī piegādātāja noklusējuma atlaide <b>%s%%</b>
    +HasNoRelativeDiscountFromSupplier=Jums nav noklusējuma relatīvās atlaides no šī piegādātāja
    +CompanyHasAbsoluteDiscount=Šim klientam ir pieejamas atlaides (kredītpiezīmes vai maksājumi) par <b>%s</b>%s
    +CompanyHasDownPaymentOrCommercialDiscount=Šim klientam ir pieejamas atlaides (komerciālie, iemaksātie maksājumi) par <b>%s</b> %s
     CompanyHasCreditNote=Šim klientam joprojām ir kredīta piezīmes <b>%s</b> %s
    -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
    -HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    -HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for <b>%s</b> %s from this supplier
    -HasCreditNoteFromSupplier=You have credit notes for <b>%s</b> %s from this supplier
    +HasNoAbsoluteDiscountFromSupplier=Jums nav atlaides kredītu no šī piegādātāja
    +HasAbsoluteDiscountFromSupplier=Jums ir pieejamas atlaides (kredītzīmes vai norēķinu maksājumi) par <b>%s</b> %s no šī piegādātāja
    +HasDownPaymentOrCommercialDiscountFromSupplier=Jums ir pieejamas atlaides (komerciālie, iemaksātie) par <b>%s</b> %s no šī piegādātāja
    +HasCreditNoteFromSupplier=Šim piegādātājam ir kredītzīmes par <b> %s </b> %s
     CompanyHasNoAbsoluteDiscount=Šim klientam nav  pieejams atlaižu kredīts
    -CustomerAbsoluteDiscountAllUsers=Absolute customer discounts (granted by all users)
    -CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +CustomerAbsoluteDiscountAllUsers=Absolūtās klientu atlaides (ko piešķir visi lietotāji)
    +CustomerAbsoluteDiscountMy=Absolūtās klientu atlaides (ko piešķir pats)
    +SupplierAbsoluteDiscountAllUsers=Absolūtā pārdevēju atlaides (ievada visi lietotāji)
    +SupplierAbsoluteDiscountMy=Absolūtā pārdevēja atlaides (ievadījis pats)
     DiscountNone=Nav
    -Supplier=Piegādātājs
    +Supplier=Pārdevējs
     AddContact=Izveidot kontaktu
     AddContactAddress=Izveidot kontaktu/adresi
     EditContact=Labot kontaktu
    @@ -302,23 +302,23 @@ DefaultContact=Noklsētais kontakts / adrese
     AddThirdParty=Izveidot trešo personu
     DeleteACompany=Dzēst uzņēmumu
     PersonalInformations=Personas dati
    -AccountancyCode=Accounting account
    +AccountancyCode=Grāmatvedības konts
     CustomerCode=Klienta kods
    -SupplierCode=Vendor code
    +SupplierCode=Pārdevēja kods
     CustomerCodeShort=Klienta kods
    -SupplierCodeShort=Vendor code
    +SupplierCodeShort=Pārdevēja kods
     CustomerCodeDesc=Klienta kods, unikāls visiem klientiem
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +SupplierCodeDesc=Pārdevēja kods, unikāls visiem pārdevējiem
     RequiredIfCustomer=Nepieciešams, ja trešā puse ir klients vai perspektīva
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Derīguma vadību kontrolēta ar moduli
    -ThisIsModuleRules=Šie noteikumi šim modulim
    +RequiredIfSupplier=Nepieciešams, ja trešā puse ir pārdevējs
    +ValidityControledByModule=Derīguma termiņš, ko kontrolē modulis
    +ThisIsModuleRules=Noteikumi par šo moduli
     ProspectToContact=Perspektīva ar ko sazināties
     CompanyDeleted=Kompānija "%s" dzēsta no datubāzes.
     ListOfContacts=Kontaktu / adrešu saraksts
     ListOfContactsAddresses=Kontaktu / adrešu saraksts
     ListOfThirdParties=Trešo personu saraksts
    -ShowCompany=Rādīt trešās personas
    +ShowCompany=Rādīt trešo personu
     ShowContact=Rādīt kontaktu
     ContactsAllShort=Visi (Bez filtra)
     ContactType=Kontakta veids
    @@ -328,25 +328,25 @@ ContactForProposals=Piedāvājumu  kontakti
     ContactForContracts=Līgumu kontakti
     ContactForInvoices=Rēķinu kontakti
     NoContactForAnyOrder=Šis kontakts ir ne kontaktu, lai jebkurā secībā
    -NoContactForAnyOrderOrShipments=This contact is not a contact for any order or shipment
    +NoContactForAnyOrderOrShipments=Šis kontakts nav kontakts jebkuram pasūtījumam vai sūtījumam
     NoContactForAnyProposal=Šis kontakts ir ne kontaktu par jebkuru komerciālu priekšlikumu
     NoContactForAnyContract=Šis kontakts nav neviena līguma kontaktpersona
     NoContactForAnyInvoice=Šis kontakts nav neviena rēķina kontaktpersona
     NewContact=Jauns kontakts
    -NewContactAddress=Jauna kontakta / adrese
    +NewContactAddress=Jauns kontakts / adrese
     MyContacts=Mani kontakti
     Capital=Kapitāls
     CapitalOf=Capital %s
     EditCompany=Labot uzņēmumu
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=Šis lietotājs nav izredzes, klients vai pārdevējs
     VATIntraCheck=Pārbaudīt
    -VATIntraCheckDesc=Saite <b>%s</b> ļauj lūgt Eiropas PVN pārbaudītājs pakalpojumu. Ārējo interneta pieslēgums no servera ir nepieciešams šo pakalpojumu, lai strādātu.
    +VATIntraCheckDesc=Saikne <b> %s </b> izmanto Eiropas PVN pārbaudītāja pakalpojumu (VIES). Lai šis pakalpojums darbotos, ir nepieciešama ārēja piekļuve internetam no servera.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Pārbaudiet Intracomunnautary PVN par Eiropas komisijā vietas
    -VATIntraManualCheck=Jūs varat pārbaudīt manuāli eiropas mājas lapā <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Pārbaudiet Kopienas iekšējo PVN Eiropas Komisijas tīmekļa vietnē
    +VATIntraManualCheck=Jūs varat manuāli pārbaudīt arī Eiropas Komisijas vietnē <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Pārbaude nav iespējams. Pārbaudes pakalpojums netiek nodrošināts no dalībvalsts (%s).
    -NorProspectNorCustomer=Tāpat arī izredzes, ne klientu
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Nav perspektīva, vai klients
    +JuridicalStatus=Juridiskās personas veids
     Staff=Personāls
     ProspectLevelShort=Potenciāls
     ProspectLevel=Prospect potenciālu
    @@ -373,7 +373,7 @@ TE_PRIVATE=Privātpersona
     TE_OTHER=Cits
     StatusProspect-1=Nesazināties
     StatusProspect0=Nekad neesam saznājušies
    -StatusProspect1=To be contacted
    +StatusProspect1=Sazināsimies
     StatusProspect2=Sazināšanās procesā
     StatusProspect3=Sazinājušies esam
     ChangeDoNotContact=Mainīt statusu uz 'Nesazināties'
    @@ -387,48 +387,48 @@ ExportCardToFormat=Eksporta karti formātā
     ContactNotLinkedToCompany=Kontakts nav saistīts ar trešajām personām
     DolibarrLogin=Dolibarr pieteikšanās
     NoDolibarrAccess=Nav Dolibarr piekļuve
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and proper
    -ExportDataset_company_2=Kontakti un rekvizīti
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and proper
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Trešās puses (uzņēmumi / fondi / fiziskie cilvēki) un to īpašības
    +ExportDataset_company_2=Kontakti un to īpašības
    +ImportDataset_company_1=Trešās puses (uzņēmumi / fondi / fiziskie cilvēki) un to īpašības
    +ImportDataset_company_2=Kontakti / adreses un atribūti
    +ImportDataset_company_3=Trešo personu bankas konti
    +ImportDataset_company_4=Trešās puses - tirdzniecības pārstāvji (piešķir pārdošanas pārstāvjiem / lietotājiem uzņēmumos)
     PriceLevel=Cenu līmenis
     DeliveryAddress=Piegādes adrese
     AddAddress=Pievienot adresi
    -SupplierCategory=Vendor category
    +SupplierCategory=Pārdevēja sadaļa
     JuridicalStatus200=Neatkarīgs
     DeleteFile=Izdzēst failu
     ConfirmDeleteFile=Vai jūs tiešām vēlaties izdzēst šo failu?
     AllocateCommercial=Assigned to sales representative
     Organization=Organizācija
    -FiscalYearInformation=Informācija par fiskālo gadu
    +FiscalYearInformation=Fiskālais gads
     FiscalMonthStart=Fiskālā gada pirmais mēnesis
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=Lai varētu pievienot e-pasta paziņojumu, šim lietotājam ir jāizveido e-pasts.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Saraksts perspektīvas
    +ListSuppliersShort=Pārdevēju saraksts
    +ListProspectsShort=Perspektīvu saraksts
     ListCustomersShort=Klientu saraksts
    -ThirdPartiesArea=Trešās personas u kontaktu sadaļa
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Kopējās unikālās trešās personas
    +ThirdPartiesArea=Trešās puses/Kontakti
    +LastModifiedThirdParties=Pēdējais %s modificēts trešās puses
    +UniqueThirdParties=Trešo personu kopskaits
     InActivity=Atvērts
     ActivityCeased=Slēgts
    -ThirdPartyIsClosed=Third party is closed
    +ThirdPartyIsClosed=Trešā persona ir slēgta
     ProductsIntoElements=List of products/services into %s
     CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Maks. par izcilu rēķinu
    -OutstandingBillReached=Max. for outstanding bill reached
    -OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +OutstandingBillReached=Maks. par izcilu rēķinu
    +OrderMinAmount=Minimālā summa pasūtījumam
    +MonkeyNumRefModelDesc=Atgrieziet numuru ar kodu %syymm-nnnn klienta kodam un %syymm-nnnn par pārdevēja kodu, kur yy ir gads, mm ir mēnesis, un nnnn ir secība bez pārtraukuma un nav atgriezties pie 0.
     LeopardNumRefModelDesc=Kods ir bez maksas. Šo kodu var mainīt jebkurā laikā.
     ManagingDirectors=Menedžera(u) vārds (CEO, direktors, prezidents...) 
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    -ThirdpartiesMergeSuccess=Third parties have been merged
    +ConfirmMergeThirdparties=Vai tiešām vēlaties apvienot šo trešo personu ar pašreizējo? Visi saistītie objekti (rēķini, pasūtījumi, ...) tiks pārvietoti uz pašreizējo trešo pusi, tad trešā puse tiks dzēsta.
    +ThirdpartiesMergeSuccess=Trešās puses ir apvienotas
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=Tirdzniecības pārstāvja vārds
     SaleRepresentativeLastname=Tirdzniecības pārstāvja uzvārds
    -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +ErrorThirdpartiesMerge=Pašalot trešās puses, radās kļūda. Lūdzu, pārbaudiet žurnālu. Izmaiņas ir atgrieztas.
    +NewCustomerSupplierCodeProposed=Iepriekš izmantots klienta vai pārdevēja kods, tiek ieteikts jauns kods
    diff --git a/htdocs/langs/lv_LV/compta.lang b/htdocs/langs/lv_LV/compta.lang
    index 840a653e48f..c91f3956449 100644
    --- a/htdocs/langs/lv_LV/compta.lang
    +++ b/htdocs/langs/lv_LV/compta.lang
    @@ -20,7 +20,7 @@ Outcome=Izdevumi
     MenuReportInOut=Ienākumi / izdevumi
     ReportInOut=Ienākumu un izdevumu bilance
     ReportTurnover=Apgrozījums ir izrakstīts rēķinā
    -ReportTurnoverCollected=Turnover collected
    +ReportTurnoverCollected=Savākto apgrozījumu
     PaymentsNotLinkedToInvoice=Maksājumi, kas nav saistīti ar kādu rēķinu, tāpēc nav saistīts ar trešajām personām
     PaymentsNotLinkedToUser=Maksājumi, kas nav saistīti ar jebkuru lietotāju
     Profit=Peļņa
    @@ -78,7 +78,7 @@ MenuNewSocialContribution=New social/fiscal tax
     NewSocialContribution=New social/fiscal tax
     AddSocialContribution=Pievienot sociālo / fiskālo nodokli
     ContributionsToPay=Social/fiscal taxes to pay
    -AccountancyTreasuryArea=Billing and payment area
    +AccountancyTreasuryArea=Norēķinu un maksājumu zona
     NewPayment=Jauns maksājums
     Payments=Maksājumi
     PaymentCustomerInvoice=Klienta rēķina apmaksa
    @@ -86,7 +86,7 @@ PaymentSupplierInvoice=Piegādātāja rēķina maksājums
     PaymentSocialContribution=Social/fiscal tax payment
     PaymentVat=PVN maksājumi
     ListPayment=Maksājumu saraksts
    -ListOfCustomerPayments=Saraksts klientu maksājumu
    +ListOfCustomerPayments=Klientu maksājumu  saraksts
     ListOfSupplierPayments=Pārdevēja maksājumu saraksts
     DateStartPeriod=Sākuma datums periodam
     DateEndPeriod=Datums un periods
    @@ -114,7 +114,7 @@ TotalToPay=Summa
     BalanceVisibilityDependsOnSortAndFilters=Bilance ir redzama šajā sarakstā tikai tad, ja tabula ir sakārtota uz augšu %s un tiek filtrēta 1 bankas kontam.
     CustomerAccountancyCode=Klienta grāmatvedības kods
     SupplierAccountancyCode=Pārdevēja grāmatvedības kods
    -CustomerAccountancyCodeShort=Cust. account. code
    +CustomerAccountancyCodeShort=Klienta. konta. kods
     SupplierAccountancyCodeShort=Sup. account. code
     AccountNumber=Konta numurs
     NewAccountingAccount=Jauns konts
    @@ -126,23 +126,23 @@ ByThirdParties=Trešās personas
     ByUserAuthorOfInvoice=Ar rēķinu autors
     CheckReceipt=Čeka depozīts
     CheckReceiptShort=Pārbaudīt depozītu
    -LastCheckReceiptShort=Jaunākie %s čeku čeki
    +LastCheckReceiptShort=Jaunākie %s čeki
     NewCheckReceipt=Jauna atlaide
     NewCheckDeposit=Jauns pārbaude depozīts
     NewCheckDepositOn=Izveidot kvīti par depozīta kontā: %s
     NoWaitingChecks=No checks awaiting deposit.
     DateChequeReceived=Pārbaudiet uzņemšanas datumu
    -NbOfCheques=Nb Pārbaužu
    +NbOfCheques=Pārbaužu skaits
     PaySocialContribution=Pay a social/fiscal tax
     ConfirmPaySocialContribution=Are you sure you want to classify this social or fiscal tax as paid?
    -DeleteSocialContribution=Delete a social or fiscal tax payment
    -ConfirmDeleteSocialContribution=Are you sure you want to delete this social/fiscal tax payment?
    +DeleteSocialContribution=Dzēst sociālo vai fiskālo nodokļu maksājumu
    +ConfirmDeleteSocialContribution=Vai tiešām vēlaties dzēst šo sociālo / fiskālo nodokļu maksājumu?
     ExportDataset_tax_1=Social and fiscal taxes and payments
     CalcModeVATDebt=Mode <b>%sVAT par saistību accounting%s.</b>
     CalcModeVATEngagement=Mode <b>%sVAT par ienākumu-expense%sS.</b>
     CalcModeDebt=Zināma reģistrēto rēķinu analīze, pat ja tie vēl nav uzskaitīti virsgrāmatā.
     CalcModeEngagement=Zināma reģistrēto maksājumu analīze, pat ja tie vēl nav uzskaitīti Ledger.
    -CalcModeBookkeeping=Grāmatvedības tabulas tabulā <b> dati tiek analizēti </ b>
    +CalcModeBookkeeping=Grāmatvedības grāmatiņas žurnālā publicēto datu analīze.
     CalcModeLT1= Mode <b>%sRE on customer invoices - suppliers invoices%s</b>
     CalcModeLT1Debt=Mode <b>%sRE on customer invoices%s</b>
     CalcModeLT1Rec= Mode <b>%sRE on suppliers invoices%s</b>
    @@ -152,10 +152,10 @@ CalcModeLT2Rec= Mode <b>%sIRPF on suppliers invoices%s</b>
     AnnualSummaryDueDebtMode=Līdzsvars ienākumiem un izdevumiem, gada kopsavilkums
     AnnualSummaryInputOutputMode=Līdzsvars ienākumiem un izdevumiem, gada kopsavilkums
     AnnualByCompanies=Ieņēmumu un izdevumu līdzsvars pēc iepriekš definētām kontu grupām
    -AnnualByCompaniesDueDebtMode=Ieņēmumu un izdevumu bilance, detalizēti pēc iepriekš definētām grupām, režīms <b> %sClaims-Debts%s </ b> norādīja <b> Saistību grāmatvedība </ b>.
    -AnnualByCompaniesInputOutputMode=Ieņēmumu un izdevumu līdzsvars, detalizēti pēc iepriekš definētām grupām, režīms <b> %sIncomes-Expenses%s </ b> norādīja <b> naudas līdzekļu uzskaiti </ b>.
    -SeeReportInInputOutputMode=See %sanalysis of payments%s for a calculation on actual payments made even if they are not yet accounted in Ledger.
    -SeeReportInDueDebtMode=See %sanalysis of invoices%s for a calculation based on known recorded invoices even if they are not yet accounted in Ledger.
    +AnnualByCompaniesDueDebtMode=Ieņēmumu un izdevumu bilance, detalizēti pēc iepriekš definētām grupām, režīms <b> %sClaims-Debts%s </b> norādīja <b> Saistību grāmatvedība </b>.
    +AnnualByCompaniesInputOutputMode=Ieņēmumu un izdevumu līdzsvars, detalizēti pēc iepriekš definētām grupām, režīms <b> %sIncomes-Expenses%s </b> norādīja <b> naudas līdzekļu uzskaiti </b>.
    +SeeReportInInputOutputMode=Skatīt %s maksājumu analīzi %s, lai aprēķinātu veiktos faktiskos maksājumus, pat ja tie vēl nav uzskaitīti Virsgrāmatā.
    +SeeReportInDueDebtMode=Skatīt %srēķinu analīzi %s, lai aprēķiniem izmantotu zināmos reģistrētos rēķinus, pat ja tie vēl nav uzskaitīti Virsgrāmatā.
     SeeReportInBookkeepingMode=Lai skatītu <b> Grāmatvedības grāmatvedības tabulu </ b>, skatiet <b> %sBookBooking report%s </ b>
     RulesAmountWithTaxIncluded=- Uzrādītas summas ir ar visiem ieskaitot nodokļus
     RulesResultDue=- It includes outstanding invoices, expenses, VAT, donations whether they are paid or not. Is also includes paid salaries.<br>- It is based on the validation date of invoices and VAT and on the due date for expenses. For salaries defined with Salary module, the value date of payment is used.
    @@ -165,9 +165,9 @@ RulesCAIn=- Tas ietver visas efektīvus maksājumus rēķiniem, kas saņemti no
     RulesCATotalSaleJournal=Tas ietver visas kredītlīnijas no pārdošanas žurnāla.
     RulesAmountOnInOutBookkeepingRecord=Tas ietver jūsu Ledger ierakstu ar grāmatvedības kontiem, kuriem ir grupa "IZDEVUMS" vai "IENĀKUMS"
     RulesResultBookkeepingPredefined=Tas ietver jūsu Ledger ierakstu ar grāmatvedības kontiem, kuriem ir grupa "IZDEVUMS" vai "IENĀKUMS"
    -RulesResultBookkeepingPersonalized=Tas rāda jūsu grāmatvedībā ierakstu ar grāmatvedības kontiem <b> grupējot pēc personalizētām grupām </ b>
    +RulesResultBookkeepingPersonalized=Tas rāda jūsu grāmatvedībā ierakstu ar grāmatvedības kontiem <b>grupējot pēc personalizētām grupām</b>
     SeePageForSetup=Lai iestatītu, skatiet sadaļu <a href="%s"> %s </a>
    -DepositsAreNotIncluded=- Down payment invoices are nor included
    +DepositsAreNotIncluded=- Sākuma rēķini nav iekļauti
     DepositsAreIncluded=- Down payment invoices are included
     LT1ReportByCustomers=Trešo personu nodokļu pārskats 2
     LT2ReportByCustomers=Ziņojiet par trešās personas nodokli 3
    @@ -229,11 +229,11 @@ ACCOUNTING_VAT_SOLD_ACCOUNT=Grāmatvedības konts pēc noklusējuma par PVN pār
     ACCOUNTING_VAT_BUY_ACCOUNT=Grāmatvedības konts pēc noklusējuma par PVN pirkumiem (tiek izmantots, ja nav definēts, izmantojot PVN vārdnīcas iestatījumus).
     ACCOUNTING_VAT_PAY_ACCOUNT=Grāmatvedības konts pēc noklusējuma PVN maksāšanai
     ACCOUNTING_ACCOUNT_CUSTOMER=Grāmatvedības konts, kas tiek izmantots klientu trešajām pusēm
    -ACCOUNTING_ACCOUNT_CUSTOMER_Desc=Īpašais grāmatvedības konts, kas noteikts trešās personas kartē, tiks izmantots tikai pakārtotā izsaukšanai. Šis viens tiks izmantots General Ledger un kā noklusējuma vērtība Subledged grāmatvedībai, ja trešās puses īpašais klientu piesaistīšanas konts nav definēts.
    +ACCOUNTING_ACCOUNT_CUSTOMER_Desc=Īpašais grāmatvedības konts, kas noteikts trešās personas kartē, tiks izmantots tikai pakārtotajam grāmatvedim. Šis tiek izmantots General Ledger un noklusējuma vērtība Subledged grāmatvedībai, ja trešās personas īpašais klientu grāmatvedības konts nav definēts.
     ACCOUNTING_ACCOUNT_SUPPLIER=Pārdevēja trešo personu grāmatvedības konts
    -ACCOUNTING_ACCOUNT_SUPPLIER_Desc=Īpašais grāmatvedības konts, kas noteikts trešās personas kartē, tiks izmantots tikai pakārtotā izsaukšanai. Šis tiek izmantots General Ledger un noklusējuma vērtība Subledged grāmatvedībai, ja trešās puses īpašā piegādātāja konts nav definēts.
    +ACCOUNTING_ACCOUNT_SUPPLIER_Desc=Īpašais grāmatvedības konts, kas noteikts trešās personas kartē, tiks izmantots tikai pakārtotajam grāmatvedim. Šis tiek izmantots General Ledger un noklusējuma vērtība Subledged grāmatvedībai, ja trešās personas īpašais piegādātāja grāmatvedības konts nav definēts.
     CloneTax=Clone a social/fiscal tax
    -ConfirmCloneTax=Confirm the clone of a social/fiscal tax payment
    +ConfirmCloneTax=Apstipriniet sociālā / fiskālā nodokļa klonu
     CloneTaxForNextMonth=Klonēt nākošam mēnesim
     SimpleReport=Vienkāršs pārskats
     AddExtraReport=Papildu pārskati (pievienojiet ārvalstu un valsts klientu pārskatu)
    diff --git a/htdocs/langs/lv_LV/contracts.lang b/htdocs/langs/lv_LV/contracts.lang
    index e86eef5e821..4af65af6d71 100644
    --- a/htdocs/langs/lv_LV/contracts.lang
    +++ b/htdocs/langs/lv_LV/contracts.lang
    @@ -40,7 +40,7 @@ ConfirmCloseContract=This will close all services (active or not). Are you sure
     ConfirmCloseService=Vai jūs tiešām vēlaties aizvērt šo pakalpojumu ar datumu <b>%s</b> ?
     ValidateAContract=Apstiprināt līgumu
     ActivateService=Aktivizēt pakalpojumu
    -ConfirmActivateService=Are you sure you want to activate this service with date <b>%s</b>?
    +ConfirmActivateService=Vai tiešām vēlaties aktivizēt šo pakalpojumu sākot ar datumu <b> %s </b>?
     RefContract=Līguma atsauce
     DateContract=Līguma datums
     DateServiceActivate=Pakalpojuma aktivizēšanas datums
    @@ -52,7 +52,7 @@ ListOfRunningServices=Saraksts ar aktīvajiem pakalpojumiem
     NotActivatedServices=Neaktīvais pakalpojumi (starp apstiprinātiem līgumiem)
     BoardNotActivatedServices=Pakalpojumi aktivizēt starp apstiprinātiem līgumiem
     LastContracts=Jaunākie %s līgumi
    -LastModifiedServices=Pēdējais %s labotais pakalpojums
    +LastModifiedServices=Jaunākais %s labotais pakalpojums
     ContractStartDate=Sākuma datums
     ContractEndDate=Beigu datums
     DateStartPlanned=Plānotais sākuma datums
    @@ -67,7 +67,7 @@ CloseService=Aizvērt pakalpojumu
     BoardRunningServices=Beigušies darbojošies pakalpojumi
     ServiceStatus=Pakalpojuma statuss
     DraftContracts=Projektu līgumi
    -CloseRefusedBecauseOneServiceActive=Līgumu nevar tikt slēgts kā tur ir vismaz viens atvērts pakalpojums uz to
    +CloseRefusedBecauseOneServiceActive=Līgumu nevar slēgt, jo tajā ir vismaz viens atvērts pakalpojums
     ActivateAllContracts=Aktivizējiet visas līguma līnijas
     CloseAllContracts=Aizveriet visus līguma līnijas
     DeleteContractLine=Izdzēst līgumu līniju
    @@ -82,13 +82,14 @@ ListOfServicesToExpireWithDuration=Pakalpojumu sarakstu beidzas %s dienās
     ListOfServicesToExpireWithDurationNeg=Saraksts pakalpojumu beidzies no vairāk nekā %s dienas
     ListOfServicesToExpire=Saraksts pakalpojumu beigsies
     NoteListOfYourExpiredServices=Šajā sarakstā ir tikai pakalpojumu līgumi par trešo pušu jums ir saistītas kā pārdošanas pārstāvis.
    -StandardContractsTemplate=Standard contracts template
    -ContactNameAndSignature=For %s, name and signature:
    +StandardContractsTemplate=Standarta līgumu paraugs
    +ContactNameAndSignature=Kam %s vārds un paraksts:
     OnlyLinesWithTypeServiceAreUsed=Only lines with type "Service" will be cloned.
     CloneContract=Klonēt līgumu
     ConfirmCloneContract=Vai tiešām vēlaties klonēt līgumu <b> %s </b>?
     LowerDateEndPlannedShort=Aktīvo pakalpojumu beigu datums
     SendContractRef=Informācija par līgumu __REF__
    +OtherContracts=Citi līgumi
     ##### Types de contacts #####
     TypeContact_contrat_internal_SALESREPSIGN=Tirdzniecības pārstāvis, parakstot līgumu,
     TypeContact_contrat_internal_SALESREPFOLL=Tirdzniecības pārstāvis, turpinot darboties līgums
    diff --git a/htdocs/langs/lv_LV/cron.lang b/htdocs/langs/lv_LV/cron.lang
    index 37095d3cb99..b00387d2649 100644
    --- a/htdocs/langs/lv_LV/cron.lang
    +++ b/htdocs/langs/lv_LV/cron.lang
    @@ -4,22 +4,22 @@
     Permission23101 = Lasīt Plānotos darbus
     Permission23102 = Izveidot / atjaunāt plānoto darbu
     Permission23103 = Dzēst plānoto darbu
    -Permission23104 = Execute Scheduled job
    +Permission23104 = Izpildīt plānoto darbu
     # Admin
    -CronSetup=Plānotais darbu vadības iestatīšana
    +CronSetup=Plānoto darbu iestatīšana
     URLToLaunchCronJobs=URL to check and launch qualified cron jobs
     OrToLaunchASpecificJob=Or to check and launch a specific job
     KeyForCronAccess=Drošības atslēga URL uzsākt cron darbavietas
     FileToLaunchCronJobs=Command line to check and launch qualified cron jobs
     CronExplainHowToRunUnix=On Unix environment you should use the following crontab entry to run the command line each 5 minutes
    -CronExplainHowToRunWin=On Microsoft(tm) Windows environement you can use Scheduled task tools to run the command line each 5 minutes
    +CronExplainHowToRunWin=Microsoft (tm) Windows vidē jūs varat izmantot Scheduled Task rīkus, lai palaistu komandrindu ik pēc 5 minūtēm
     CronMethodDoesNotExists=Class %s does not contains any method %s
     CronJobDefDesc=Cron darba profili ir definēti moduļa deskriptora failā. Kad modulis ir aktivizēts, tie ir ielādēti un pieejami, lai jūs varētu administrēt darbus no admin instrumentu izvēlnes %s.
     CronJobProfiles=Iepriekš noteiktu cron darba profilu saraksts
     # Menu
     EnabledAndDisabled=Iespējots un atspējots
     # Page list
    -CronLastOutput=Latest run output
    +CronLastOutput=Jaunāko darbību izvade
     CronLastResult=Jaunākais rezultātu kods
     CronCommand=Komanda
     CronList=Plānoti darbi
    @@ -42,13 +42,13 @@ CronModule=Modulis
     CronNoJobs=Nav reģistrētu darbu
     CronPriority=Prioritāte
     CronLabel=Nosaukums
    -CronNbRun=Nb. sākt
    +CronNbRun=Palaizšanas skaits
     CronMaxRun=Maksimālais numura izsaukšana
     CronEach=Katru
     JobFinished=Darbs uzsākts un pabeigts
     #Page card
     CronAdd= Pievienot darbu
    -CronEvery=Execute job each
    +CronEvery=Izpildīt katru darbu
     CronObject=Instances / Object, lai radītu
     CronArgs=Parametri
     CronSaveSucess=Veiksmīgi saglabāts
    @@ -61,23 +61,23 @@ CronStatusInactiveBtn=Izslēgt
     CronTaskInactive=Šis darbs ir izslēgts
     CronId=Id
     CronClassFile=Filename with class
    -CronModuleHelp=Dolibarr moduļu direktorijas nosaukums (arī darbojas ar ārēju Dolibarr moduli). <BR> Piemēram, lai izsauktu Dolibarr produkta objekta /htdocs/<uproduct</u>/class/product.class.php iegūšanas metodi, moduļa vērtība ir <br> <i> produkts </ i>
    +CronModuleHelp=Dolibarr moduļu direktorijas nosaukums (arī darbojas ar ārēju Dolibarr moduli). <BR> Piemēram, lai izsauktu Dolibarr produkta objekta /htdocs/<uproduct</u>/class/product.class.php iegūšanas metodi, moduļa vērtība ir <br> <i> produkts </i>
     CronClassFileHelp=Relatīvais ceļš un faila nosaukums ielādei (ceļš ir salīdzinājumā ar tīmekļa servera saknes direktoriju). <BR> Piemēram, lai izsauktu Dolibarr produkta objekta htdocs / product / class / <u> product.class.php </ u> iegūšanas metodi, klases faila nosaukuma vērtība ir <br> <i> produkts / klase / product.class.php </ i>
    -CronObjectHelp=Objekta nosaukums ielādei. <BR> Piemēram, lai izsauktu Dolibarr Produkta objekta /htdocs/product/class/product.class.php iegūšanas metodi, klases faila nosaukuma vērtība ir <br> <i> Produkts </ i>
    -CronMethodHelp=Objekta metode, lai palaistu. <BR> Piemēram, lai izsauktu Dolibarr produkta objekta /htdocs/product/class/product.class.php ielādes metodi, metode ir vērtība <br> <i> atnest </ i>
    -CronArgsHelp=Metodes argumenti. <BR> Piemēram, lai izsauktu Dolibarr Produkta objekta /htdocs/product/class/product.class.php iegūšanas metodi, paramērķu vērtība var būt <br> <i> 0, ProductRef </ i>
    -CronCommandHelp=Sistēma komandrindas izpildīt.
    -CronCreateJob=Create new Scheduled Job
    +CronObjectHelp=Objekta nosaukums ielādei. <BR> Piemēram, lai izsauktu Dolibarr Produkta objekta /htdocs/product/class/product.class.php ielādes metodi, klases faila nosaukuma vērtība ir <br> <i> Produkts </ i>
    +CronMethodHelp=Objekta metode, lai palaistu. <BR> Piemēram, lai izsauktu Dolibarr Produkta objekta /htdocs/product/class/product.class.php iegūšanas metodi, metodes vērtība ir <br> <i> atnest </ i>
    +CronArgsHelp=Metodes argumenti. <BR> Piemēram, lai izsauktu Dolibarr produkta objekta /htdocs/product/class/product.class.php ielādes metodi, paramērķu vērtība var būt <br> <i> 0, ProductRef </ i>
    +CronCommandHelp=Sistēma komandrindā izpildīt.
    +CronCreateJob=Izveidot jaunu plānoto darbu
     CronFrom=No
     # Info
     # Common
     CronType=Darba veids
     CronType_method=PHP klases zvana metode
    -CronType_command=Shell komandu
    +CronType_command=Shell komanda
     CronCannotLoadClass=Nevar ielādēt klases failu %s (izmantot klasi %s)
     CronCannotLoadObject=Klases fails %s tika ielādēts, bet objekts %s tajā netika atrasts
     UseMenuModuleToolsToAddCronJobs=Lai skatītu un rediģētu ieplānotās darbavietas, dodieties uz izvēlni "Sākums - Administratora rīki - Plānotās darbavietas".
     JobDisabled=Darbs ir atspējots
     MakeLocalDatabaseDumpShort=Local database backup
    -MakeLocalDatabaseDump=Izveidojiet vietējo datubāzes dump. Parametri ir: kompresija ("gz" vai "bz" vai "neviens"), dublējuma tips ("mysql" vai "pgsql"), 1, "auto" vai faila nosaukums,
    +MakeLocalDatabaseDump=Izveidojiet vietējo datubāzes dump. Parametri ir: kompresija ("gz" vai "bz" vai "neviens"), dublēšanas veids ("mysql", "pgsql", "auto"), 1, "auto" vai faila nosaukums,
     WarningCronDelayed=Attention, for performance purpose, whatever is next date of execution of enabled jobs, your jobs may be delayed to a maximum of %s hours, before being run.
    diff --git a/htdocs/langs/lv_LV/deliveries.lang b/htdocs/langs/lv_LV/deliveries.lang
    index 0f91ffe7cb4..4eb77826a49 100644
    --- a/htdocs/langs/lv_LV/deliveries.lang
    +++ b/htdocs/langs/lv_LV/deliveries.lang
    @@ -1,16 +1,16 @@
     # Dolibarr language file - Source file is en_US - deliveries
     Delivery=Piegāde
    -DeliveryRef=Ref Delivery
    -DeliveryCard=Receipt card
    +DeliveryRef=Art piegādei
    +DeliveryCard=Čeka kartiņa
     DeliveryOrder=Piegādes pasūtījums
     DeliveryDate=Piegādes datums
    -CreateDeliveryOrder=Generate delivery receipt
    -DeliveryStateSaved=Delivery state saved
    +CreateDeliveryOrder=Izveidot piegādes kvīti
    +DeliveryStateSaved=Piegādes stāvoklis saglabāts
     SetDeliveryDate=Uzstādīt piegādes datumu
    -ValidateDeliveryReceipt=Apstiprināt piegādes saņemšanu
    -ValidateDeliveryReceiptConfirm=Are you sure you want to validate this delivery receipt?
    +ValidateDeliveryReceipt=Pārbaudiet piegādes kvīti
    +ValidateDeliveryReceiptConfirm=Vai tiešām vēlaties apstiprināt piegādes kvīti?
     DeleteDeliveryReceipt=Dzēst piegādes saņemšanu
    -DeleteDeliveryReceiptConfirm=Are you sure you want to delete delivery receipt <b>%s</b>?
    +DeleteDeliveryReceiptConfirm=Vai tiešām vēlaties dzēst piegādes kvīti <b> %s </b>?
     DeliveryMethod=Piegādes metode
     TrackingNumber=Sekošanas numurs
     DeliveryNotValidated=Piegāde nav apstiprināta
    @@ -19,12 +19,13 @@ StatusDeliveryDraft=Melnraksts
     StatusDeliveryValidated=Saņemts
     # merou PDF model
     NameAndSignature=Vārds, uzvārds un paraksts:
    -ToAndDate=To___________________________________ uz ____ / _____ / __________
    -GoodStatusDeclaration=Ir saņēmuši preces iepriekš labā stāvoklī,
    +ToAndDate=Kam___________________________________ uz ____ / _____ / __________
    +GoodStatusDeclaration=Ir saņēmuši iepriekš minētās preces labā stāvoklī,
     Deliverer=Piegādātājs:
     Sender=Nosūtītājs
     Recipient=Saņēmējs
     ErrorStockIsNotEnough=Nav pietiekami daudz krājumu
     Shippable=Shippable
    -NonShippable=Not Shippable
    -ShowReceiving=Show delivery receipt
    +NonShippable=Nav nosūtāms
    +ShowReceiving=Rādīt piegādes kvīti
    +NonExistentOrder=Pasūtījums neeksistē
    diff --git a/htdocs/langs/lv_LV/ecm.lang b/htdocs/langs/lv_LV/ecm.lang
    index c09eddc5c70..6b2738a77de 100644
    --- a/htdocs/langs/lv_LV/ecm.lang
    +++ b/htdocs/langs/lv_LV/ecm.lang
    @@ -1,5 +1,5 @@
     # Dolibarr language file - Source file is en_US - ecm
    -ECMNbOfDocs=Dokumentu skaits sadaļā
    +ECMNbOfDocs=Dokumentu skaits katalogā
     ECMSection=Katalogs
     ECMSectionManual=Manuālā sadaļa
     ECMSectionAuto=Automātiskā sadaļa
    @@ -44,7 +44,7 @@ CannotRemoveDirectoryContainsFiles=Dzēšana nav iespējama, jo tajā ir daži f
     ECMFileManager=Failu pārvaldnieks
     ECMSelectASection=Izvēlieties direktoriju kokā ...
     DirNotSynchronizedSyncFirst=Šķiet, ka šis direktorijs ir izveidots vai modificēts ārpus ECM moduļa. Vispirms noklikšķiniet uz pogas "Resync", lai sinhronizētu disku un datu bāzi, lai iegūtu saturu šajā direktorijā.
    -ReSyncListOfDir=Resync katalogu saraksts
    +ReSyncListOfDir=Pārsinhronizēt sadaļu sarakstu
     HashOfFileContent=Faila satura pārslēgs
     NoDirectoriesFound=Nav atrastas direktorijas
     FileNotYetIndexedInDatabase=Fails vēl nav indeksēts datu bāzē (mēģiniet to atkārtoti augšupielādēt).
    diff --git a/htdocs/langs/lv_LV/errors.lang b/htdocs/langs/lv_LV/errors.lang
    index c641357abf7..c7552c4c0db 100644
    --- a/htdocs/langs/lv_LV/errors.lang
    +++ b/htdocs/langs/lv_LV/errors.lang
    @@ -11,7 +11,7 @@ ErrorLoginAlreadyExists=Lietotājs %s jau pastāv.
     ErrorGroupAlreadyExists=Grupa %s jau pastāv.
     ErrorRecordNotFound=Ierakstīt nav atrasts.
     ErrorFailToCopyFile=Neizdevās nokopēt failu '<b>%s</b>' uz '<b>%s</b>'.
    -ErrorFailToCopyDir=Failed to copy directory '<b>%s</b>' into '<b>%s</b>'.
    +ErrorFailToCopyDir=Neizdevās kopēt direktoriju '<b>%s</b>' uz ' <b>%s</b>'.
     ErrorFailToRenameFile=Neizdevās pārdēvēt failu '<b>%s</b>' uz '<b>%s</b>'.
     ErrorFailToDeleteFile=Neizdevās izdzēst failu '<b>%s</b>'.
     ErrorFailToCreateFile=Neizdevās izveidot failu '<b>%s</b>'.
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Vērtībai '%s' ir nepareizs datuma formāts
     ErrorWrongDate=Datums nav pareizs
     ErrorFailedToWriteInDir=Neizdevās ierakstīt direktorijā %s
     ErrorFoundBadEmailInFile=Atrasts nepareiza e-pasta sintakse %s līnijām failā (piemērs line %s ar e-pasta = %s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=Lietotāju nevar izdzēst. Varbūt tas ir saistīts ar Dolibarr vienībām.
     ErrorFieldsRequired=Daži nepieciešamie lauki netika aizpildīti.
     ErrorSubjectIsRequired=E-pasta tēma ir nepieciešama
     ErrorFailedToCreateDir=Neizdevās izveidot direktoriju. Pārbaudiet, vai Web servera lietotājam ir tiesības rakstīt uz Dolibarr dokumentus direktorijā. Ja parametrs <b>safe_mode</b> ir iespējots uz šo PHP, pārbaudiet, Dolibarr php faili pieder web servera lietotājam (vai grupa).
    @@ -65,29 +65,31 @@ ErrorNoValueForSelectType=Lūdzu izvēlieties vērtību no saraksta
     ErrorNoValueForCheckBoxType=Lūdzu, aizpildiet vērtību rūtiņu sarakstā
     ErrorNoValueForRadioType=Lūdzu, aizpildiet vērtību radio pogu sarakstā
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Lauks <b>%s</b> nedrīkst saturēt speciālos simbolus.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=Laukā <b> %s </b> nedrīkst būt īpašas rakstzīmes.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=Laukā <b> %s </b> nedrīkst būt speciālās rakstzīmes vai lielformāta rakstzīmes, un tajos nedrīkst būt tikai cipari.
    +ErrorFieldMustHaveXChar=Laukā <b>%s</b>jābūt vismaz %s rakstzīmēm.
     ErrorNoAccountancyModuleLoaded=Nav grāmatvedības modulis aktivizēts
     ErrorExportDuplicateProfil=Šāds profila nosaukums jau eksistē šim eksportam.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP saskaņošana nav pilnīga.
     ErrorLDAPMakeManualTest=. LDIF fails ir radīts direktorija %s. Mēģināt ielādēt manuāli no komandrindas, lai būtu vairāk informācijas par kļūdām.
    -ErrorCantSaveADoneUserWithZeroPercentage=Nevar saglabāt prasību ar &quot;statut nav uzsākta&quot;, ja lauks &quot;izdarīt&quot;, ir arī piepildīta.
    +ErrorCantSaveADoneUserWithZeroPercentage=Nevar saglabāt darbību ar statusu, kas nav startēts, ja arī aizpildīts lauks "done by".
     ErrorRefAlreadyExists=Ref izmantot izveidot jau pastāv.
     ErrorPleaseTypeBankTransactionReportName=Lūdzu, ievadiet bankas izraksta nosaukumu, kurā ieraksts jāpaziņo (formāts GGGGMM vai GGGGMMDD).
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Neizdevās dzēst ierakstu, jo tajā ir daži bērnu ieraksti.
     ErrorRecordHasAtLeastOneChildOfType=Objektam ir vismaz viens bērns no tipa %s
    -ErrorRecordIsUsedCantDelete=Nevar izdzēst ierakstu. Tas ir pievienots citam objektam.
    +ErrorRecordIsUsedCantDelete=Nevar izdzēst ierakstu. Tas jau ir izmantots vai iekļauts citā objektā.
     ErrorModuleRequireJavascript=Javascript nedrīkst tikt izslēgti, ka šī funkcija strādā. Lai aktivizētu / deaktivizētu Javascript, dodieties uz izvēlni Home-&gt; Setup-&gt; Display.
     ErrorPasswordsMustMatch=Abām ievadītām parolēm jāsakrīt
    -ErrorContactEMail=Tehniska kļūda. Lūdzu, sazinieties ar administratoru pa sekojošu e-pastu <b>%s</b>, lai iesniegtu kļūdas kodu <b>%s</b> jūsu ziņojumā, vai labāk, pievienojot šīs lapas ekrāna.
    +ErrorContactEMail=Radās tehniska kļūda. Lūdzu, sazinieties ar administratoru uz šādu e-pastu <b> %s </b> un savā ziņojumā uzrakstiet kļūdas kodu <b> %s </b> vai pievienojiet šīs lapas ekrāna kopiju.
     ErrorWrongValueForField=Nepareiza vērtība lauka numuru <b>%s</b> (vērtība '<b>%s</b>' nesakrīt regex noteikums <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Nepareiza vērtība lauka numuru <b>%s</b> (vērtība <b>&quot;%s&quot;</b> nav <b>%s</b> esošo ref)
     ErrorsOnXLines=Kļūdas <b>%s</b> avota ierakstu (-s)
    -ErrorFileIsInfectedWithAVirus=Antivīrusu programma nevarēja apstiprināt failu (fails varētu būt inficēti ar vīrusu)
    -ErrorSpecialCharNotAllowedForField=Speciālās rakstzīmes nav atļautas lauka &quot;%s&quot;
    +ErrorFileIsInfectedWithAVirus=Antivīrusu programma nevarēja pārbaudīt failu (fails varētu būt inficēts ar vīrusu)
    +ErrorSpecialCharNotAllowedForField=Speciālās rakstzīmes nav atļautas laukam "%s"
     ErrorNumRefModel=Norāde pastāv to datubāzē (%s), un tas nav saderīgs ar šo numerācijas noteikuma. Noņemt ierakstu vai pārdēvēts atsauci, lai aktivizētu šo moduli.
     ErrorQtyTooLowForThisSupplier=Šim pārdevējam pārāk zems daudzums vai šī produkta piegādātājam nav noteikta cena
    +ErrorOrdersNotCreatedQtyTooLow=Daži pasūtījumi nav izveidoti jo pārāk mazs daudzums
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complet
     ErrorBadMask=Kļūda masku
     ErrorBadMaskFailedToLocatePosOfSequence=Kļūda, maska ​​bez kārtas numuru
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Kļūdas, slikta reset vērtība
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Kļūda. Izvēlieties vismaz vienu ierakstu.
    -ErrorDeleteNotPossibleLineIsConsolidated=Izdzēst nav iespējams, jo ieraksts ir saistīts ar bankas darījumu summa, kas tiek conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Dzēšana nav iespējama, jo ieraksts ir saistīts ar bankas darījumu, kas ir saskaņots
     ErrorProdIdAlreadyExist=%s piešķirta citai trešajai
     ErrorFailedToSendPassword=Neizdevās nosūtīt paroli
     ErrorFailedToLoadRSSFile=Nespēj iegūt RSS barotni. Centieties, lai pievienotu pastāvīgu MAIN_SIMPLEXMLLOAD_DEBUG ja kļūdu ziņojumi nesniedz pietiekamu informāciju.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Lietotāju ar pieteikšanos <b>%s</b> nevar atrast.
     ErrorLoginHasNoEmail=Šim lietotājam nav e-pasta adrese. Process atcelts.
     ErrorBadValueForCode=Nepareiza drošības koda vērtība. Mēģiniet vēlreiz ar jauno vērtību ...
     ErrorBothFieldCantBeNegative=Lauki %s un %s nevar būt abi negatīvi
    +ErrorFieldCantBeNegativeOnInvoice=Laukā <strong> %s </strong>šāda veida rēķins nevar būt negatīvs. Ja vēlaties pievienot atlaides līniju, vispirms izveidojiet atlaidi ar saiti %s ekrānā un izmantojiet to rēķinā. Varat arī lūgt administratoram iestatīt iespēju FACTURE_ENABLE_NEGATIVE_LINES līdz 1, lai atjaunotu veco uzvedību.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Lietotāja konts <b>%s</b> izmantot, lai veiktu web serveri nav atļauja, kas
     ErrorNoActivatedBarcode=Nav svītrkodu veids aktivizēts
    @@ -138,7 +141,7 @@ ErrorBadFormat=Nepareizs formāts
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Kļūda, šis dalībnieks vēl nav saistīts ar kādu trešo pusi. Saistiet esošās trešās personas biedru vai izveidojiet jaunu trešo pusi, pirms izveidojat abonementu ar rēķinu.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Nevar izdzēst maksājumu, kas ir izveidojis bankas ierakstu, kas tika saskaņots
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Nevar izdzēst maksājumu, kas kopīgs ar vismaz vienu rēķinu ar statusu Apmaksāts
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,12 +150,12 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operatoram '%s' nav operandes
     ErrorPriceExpression11=Expecting '%s'
    -ErrorPriceExpression14=Division by zero
    +ErrorPriceExpression14=Dalīts ar nulli
     ErrorPriceExpression17=Nedefinēta vērtība '%s'
    -ErrorPriceExpression19=Expression not found
    -ErrorPriceExpression20=Empty expression
    +ErrorPriceExpression19=Izteiksme nav atrasta
    +ErrorPriceExpression20=Tukša izteiksme
     ErrorPriceExpression21=Nav rezultāta '%s'
     ErrorPriceExpression22=Negatīvs rezultāts '%s'
     ErrorPriceExpression23=Nezināms vai nenoteikts mainīgais "%s" %s
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=Jūs iestatāt paredzēto summu šim svinam / svinam. Tāpēc jums ir jāievada arī tā statuss
     ErrorFailedToLoadModuleDescriptorForXXX=Neizdevās ielādēt moduļa deskriptoru klasi %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=Kļūda saglabājot izmaiņas
    +ErrorSavingChanges=Saglabājot izmaiņas, radās kļūda
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Šī piegādātāja valsts nav definēta. Vispirms labojiet to.
    @@ -203,11 +206,12 @@ ErrorObjectMustHaveStatusDraftToBeValidated=Objektam %s ir jābūt statusam "Dra
     ErrorObjectMustHaveLinesToBeValidated=Objektam %s jābūt apstiprināmām līnijām.
     ErrorOnlyInvoiceValidatedCanBeSentInMassAction=Izmantojot masu pasākumu "Sūtīt pa e-pastu", var nosūtīt tikai apstiprinātos rēķinus.
     ErrorChooseBetweenFreeEntryOrPredefinedProduct=Jums ir jāizvēlas, vai raksts ir iepriekš definēts produkts
    -ErrorDiscountLargerThanRemainToPaySplitItBefore=Atlaide, kuru mēģināt piemērot, ir lielāka par atlikušo samaksu. Pirms divas mazākas atlaides sadaliet atlaidi.
    +ErrorDiscountLargerThanRemainToPaySplitItBefore=Atlaide, kuru mēģināt piemērot, ir lielāka par atlikušo samaksu. Sadaliet atlaidi 2 mazākās atlaidēs pirms tam.
     ErrorFileNotFoundWithSharedLink=Fails netika atrasts. Var mainīt koplietošanas atslēgu vai nesen izņemt failu.
     ErrorProductBarCodeAlreadyExists=Produkta svītrkoda %s jau pastāv citā produkta atsaucei.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Ņemiet vērā arī, ka virtuālā produkta izmantošana, lai automātiski palielinātu vai samazinātu subproduktus, nav iespējama, ja vismaz vienam produktam (vai blakusproduktam) ir nepieciešams sērijas / partijas numurs.
     ErrorDescRequiredForFreeProductLines=Apraksts ir obligāts līnijām ar bezmaksas produktu
    +ErrorAPageWithThisNameOrAliasAlreadyExists=Lapā / konteinerā <strong> %s </strong>ir tāds pats nosaukums vai alternatīvs aizstājvārds, kuru izmantojat
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Ar šo nosaukumu, vai šī mērķa grāmatzīmes (U
     WarningPassIsEmpty=Brīdinājums, datu bāzes parole ir tukša. Tas ir drošības caurums. Jums vajadzētu pievienot paroli, lai jūsu datu bāzi un mainīt savu conf.php failu, lai atspoguļotu šo.
     WarningConfFileMustBeReadOnly=Uzmanību, jūsu config failu <b>(htdocs / conf / conf.php)</b> var pārrakstīt ar web serveri. Tas ir nopietns drošības caurums. Mainīt atļaujas faila būt tikai lasīšanas pēc operētājsistēmas lietotāja režīmu, ko izmanto tīmekļa serveri. Ja jūs izmantojat Windows un FAT formātu, lai jūsu diska, jums ir jāzina, ka šī failu sistēma neļauj pievienot atļaujas par failu, tāpēc nevar būt pilnīgi droša.
     WarningsOnXLines=Brīdinājumi par <b>%s</b> avota ierakstu(-iem)
    -WarningNoDocumentModelActivated=Nē modelis, dokumentu paaudzes ir aktivizēts. Modelis tiks choosed pēc noklusējuma, kamēr jūs pārbaudīt savu modulis iestatīšanu.
    +WarningNoDocumentModelActivated=Neviens modelis dokumentu ģenerēšanai nav aktivizēts. Modeli izvēlēsies pēc noklusējuma, līdz jūs pārbaudīsit sava moduļa iestatījumus.
     WarningLockFileDoesNotExists=Brīdinājums, kad uzstādīšana ir pabeigta, jums ir atslēgt instalēt / migrē instrumentus, pievienojot failu <b>install.lock</b> uz uzziņu <b>%s.</b> Trūkst šo failu, ir drošības caurums.
    -WarningUntilDirRemoved=Visi drošības brīdinājumi (redzami admin lietotājiem) paliks aktīvs tik ilgi, kamēr neaizsargātība ir klāt (vai ka pastāvīga MAIN_REMOVE_INSTALL_WARNING pievieno Setup-&gt; Citi uzstādīšanas).
    +WarningUntilDirRemoved=Visi drošības brīdinājumi (redzami tikai administratora lietotājiem) paliks aktīvi, kamēr būs ievainojamība (vai pastāvīgā MAIN_REMOVE_INSTALL_WARNING tiek pievienota iestatījumam-> Citi iestatījumi).
     WarningCloseAlways=Brīdinājums, aizvēršanas tiek darīts, pat ja summa atšķiras no avota un mērķa elementi. Aktivizēt šo funkciju piesardzīgi.
     WarningUsingThisBoxSlowDown=Uzmanību, izmantojot šo lodziņu palēnināt nopietni visas lapas, kas parāda lodziņu.
     WarningClickToDialUserSetupNotComplete=Iestatīšana ClickToDial informāciju par jūsu lietotāja nav pilnīga (skat. tab ClickToDial uz jūsu lietotāja kartes).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Daži lietotāji dažreiz ierakstīja, bet viņu stundas likme netika definēta. Tika izmantota vērtība 0 %s stundā, taču tas var novest pie nepareiza pavadītā laika vērtējuma.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=Šīs valodas tulkošanas taustiņam jau ir ieraksts
    -WarningNumberOfRecipientIsRestrictedInMassAction=Brīdinot, dažādu saņēmēju skaits ir ierobežots līdz <b> %s </ b>, ja tiek izmantota lielākā daļa darbību sarakstos
    +WarningNumberOfRecipientIsRestrictedInMassAction=Brīdinājums, ja izmantojat masveida darbību sarakstos, saņēmēju skaits ir ierobežots <b>%s</b>
     WarningDateOfLineMustBeInExpenseReportRange=Brīdinājums, rindas datums nav izdevumu pārskata diapazonā
    diff --git a/htdocs/langs/lv_LV/exports.lang b/htdocs/langs/lv_LV/exports.lang
    index fd40a128e1c..043b2ee0583 100644
    --- a/htdocs/langs/lv_LV/exports.lang
    +++ b/htdocs/langs/lv_LV/exports.lang
    @@ -1,42 +1,42 @@
     # Dolibarr language file - Source file is en_US - exports
    -ExportsArea=Eksporta zona
    -ImportArea=Importa zona
    -NewExport=Jauns eksporta
    +ExportsArea=Eksports
    +ImportArea=Imports
    +NewExport=Jauns eksports
     NewImport=Jauns imports
     ExportableDatas=Eksportējamo datu kopa
     ImportableDatas=Importējamo datu kopa
     SelectExportDataSet=Izvēlieties datu kopumu, kuru vēlaties eksportēt ...
     SelectImportDataSet=Izvēlieties datu kopumu, kuru vēlaties importēt ...
    -SelectExportFields=Izvēlieties laukus, kurus vēlaties eksportēt, vai izvēlieties sākotnēji definētu eksporta profilu
    -SelectImportFields=Choose source file fields you want to import and their target field in database by moving them up and down with anchor %s, or select a predefined import profile:
    +SelectExportFields=Izvēlieties laukus, kurus vēlaties eksportēt, vai izvēlieties iepriekš definētu eksporta profilu
    +SelectImportFields=Izvēlieties avota failu laukus, kurus vēlaties importēt, un to mērķa lauku datu bāzē, pārvietojot tos uz augšu un uz leju ar enkura %s vai izvēlieties iepriekš definētu importa profilu:
     NotImportedFields=Jomas avota failā nav importēti
    -SaveExportModel=Saglabāt šo eksporta profilu, ja jūs plānojat atkārtoti izmantot to vēlāk ...
    -SaveImportModel=Saglabāt šo importa profilu, ja jūs plānojat atkārtoti izmantot to vēlāk ...
    +SaveExportModel=Saglabājiet atlases kā eksporta profilu / veidni (atkārtotai izmantošanai).
    +SaveImportModel=Saglabājiet šo importa profilu (lai to atkārtoti izmantotu) ...
     ExportModelName=Eksportēšanas profila nosaukums
    -ExportModelSaved=Eksporta profils saglabāts ar nosaukumu <b>%s</b>.
    +ExportModelSaved=Eksporta profils tiek saglabāts kā <b> %s </b>.
     ExportableFields=Eksportējami lauki
     ExportedFields=Eksportēti lauki
     ImportModelName=Importēšanas profila nosaukums
    -ImportModelSaved=Importēšanas profils saglabāts ar nosaukumu <b>%s</b>.
    -DatasetToExport=Datu kopa eksportēt
    -DatasetToImport=Importēt failu datu kopas
    +ImportModelSaved=Importa profils tiek saglabāts kā <b> %s </b>.
    +DatasetToExport=Datu kopas eksports
    +DatasetToImport=Importēt failu datu kopā
     ChooseFieldsOrdersAndTitle=Izvēlieties lauku secību ...
     FieldsTitle=Lauku nosaukums
     FieldTitle=Lauka nosaukums
    -NowClickToGenerateToBuildExportFile=Tagad izvēlieties faila formātu Combo lodziņā un noklikšķiniet uz &quot;Izveidot&quot;, lai izveidotu eksporta failu ...
    +NowClickToGenerateToBuildExportFile=Tagad atlasiet faila formātu kombinētajā lodziņā un noklikšķiniet uz Izveidot, lai izveidotu eksporta failu ...
     AvailableFormats=Pieejamie formāti
     LibraryShort=Bibliotēka
     Step=Solis
    -FormatedImport=Importēšanas palīgs
    -FormatedImportDesc1=This area allows to import personalized data, using an assistant to help you in process without technical knowledge.
    -FormatedImportDesc2=First step is to choose a king of data you want to load, then file to load, then to choose which fields you want to load.
    -FormatedExport=Eksportēšanas palīgs
    -FormatedExportDesc1=This area allows to export personalized data, using an assistant to help you in process without technical knowledge.
    -FormatedExportDesc2=First step is to choose a predefined dataset, then to choose which fields you want in your result files, and which order.
    -FormatedExportDesc3=When data to export are selected, you can define output file format you want to export your data to.
    +FormatedImport=Importa palīgs
    +FormatedImportDesc1=Šis modulis ļauj atjaunināt esošos datus vai pievienot jaunus objektus datu bāzē no faila bez tehniskām zināšanām, izmantojot palīgu.
    +FormatedImportDesc2=Pirmais solis ir izvēlēties datu veidu, kuru vēlaties importēt, pēc tam avota faila formātu, pēc tam laukus, kurus vēlaties importēt.
    +FormatedExport=Eksporta palīgs
    +FormatedExportDesc1=Šie rīki ļauj personalizētus datus eksportēt, izmantojot palīgu, lai palīdzētu jums šajā procesā, nepieprasot tehniskās zināšanas.
    +FormatedExportDesc2=Pirmais solis ir izvēlēties iepriekš noteiktu datu kopu, pēc tam - kādus laukus vēlaties eksportēt un kādā kārtībā.
    +FormatedExportDesc3=Kad tiek atlasīti dati eksportēšanai, varat izvēlēties izejas faila formātu.
     Sheet=Lapa
     NoImportableData=Nav importēt datus (ne modulis ar definīcijām, kas ļauj datu importu)
    -FileSuccessfullyBuilt=File generated
    +FileSuccessfullyBuilt=Izveidots fails
     SQLUsedForExport=SQL Pieprasījums izmanto, lai veidotu eksporta failu
     LineId=Līnijas id
     LineLabel=Label of line
    @@ -50,12 +50,12 @@ LineTotalVAT=PVN summu, par līnijas
     TypeOfLineServiceOrProduct=Veids (0=produkts, 1=pakalpojums)
     FileWithDataToImport=Fails ar datiem, lai importētu
     FileToImport=Avota failu, lai importētu
    -FileMustHaveOneOfFollowingFormat=Failu, lai importētu ir jābūt vienam no šāda formāta
    -DownloadEmptyExample=Lejupielādēt piemēru tukšā avota faila
    -ChooseFormatOfFileToImport=Izvēlieties faila formātu, lai izmantotu kā importa faila formātā, noklikšķinot uz Piktogramma %s, lai to izvēlētos ...
    -ChooseFileToImport=Augšupielādēt failu, tad noklikšķiniet uz Piktogramma %s, lai izvēlētos failu kā avota importa faila ...
    +FileMustHaveOneOfFollowingFormat=Importa failam ir jābūt šādam formātam
    +DownloadEmptyExample=Lejupielādēt veidlapas failu ar lauka satura informāciju (* ir obligāti aizpildāmie lauki)
    +ChooseFormatOfFileToImport=Izvēlieties faila formātu, ko izmantot kā importa faila formātu, noklikšķinot uz %s ikonas, lai to atlasītu ...
    +ChooseFileToImport=Augšupielādējiet failu, pēc tam noklikšķiniet uz %s ikonas, lai atlasītu failu kā avota importa failu ...
     SourceFileFormat=Avota faila formāts
    -FieldsInSourceFile=Lauki avota failā
    +FieldsInSourceFile=Lauki sākotnējā failā
     FieldsInTargetDatabase=Mērķa lauki Dolibarr datu bāzē (treknrakstā = obligāti)
     Field=Lauks
     NoFields=Nav lauki
    @@ -63,63 +63,63 @@ MoveField=Pārvietot lauka kolonnas numurs %s
     ExampleOfImportFile=Importa_faila_piemers
     SaveImportProfile=Saglabāt šo importa profilu
     ErrorImportDuplicateProfil=Neizdevās saglabāt šo importa profilu ar šo nosaukumu. Līdzšinējais profils jau pastāv ar šo nosaukumu.
    -TablesTarget=Mērķtiecīga galdi
    +TablesTarget=Mērķtiecīgas tabulas
     FieldsTarget=Mērķtiecīga lauki
     FieldTarget=Mērķtiecīga lauks
    -FieldSource=Avots lauks
    +FieldSource=Avota lauks
     NbOfSourceLines=Līniju skaits avota failā
    -NowClickToTestTheImport=Pārbaudiet importa rādītājus esat definējis. Ja tie ir pareizi, noklikšķiniet uz pogas <b>&quot;%s&quot;,</b> lai palaistu simulāciju importa process (dati tiks mainīti jūsu datu bāzē, tas ir tikai simulācija uz brīdi) ...
    -RunSimulateImportFile=Uzsākt importa simulāciju
    +NowClickToTestTheImport=Pārbaudiet iestatīto importēšanas iestatījumu (pārbaudiet, vai jums ir jāizslēdz galvenes līnijas vai arī tās tiks atzīmētas kā kļūdas nākamajā simulācijā). <br> Noklikšķiniet uz pogas <b> %s </ b>, lai veiktu čeku no faila struktūras / satura un imitē importa procesu. <br> <b> Jūsu datubāzē dati netiks mainīti </ b>.
    +RunSimulateImportFile=Palaist importa simulāciju
     FieldNeedSource=Šim laukam nepieciešami dati no avota faila
     SomeMandatoryFieldHaveNoSource=Daži obligātie lauki nav avotu, no datu faila
     InformationOnSourceFile=Informācija avota failā
     InformationOnTargetTables=Informācija par mērķa laukiem
     SelectAtLeastOneField=Pārslēgt vismaz vienu avota lauku slejā jomās eksportēt
     SelectFormat=Izvēlieties šo importa failu formātu
    -RunImportFile=Uzsākt faila importu
    -NowClickToRunTheImport=Pārbaudiet rezultātu importa simulāciju. Ja viss ir ok, sākt galīgo importu.
    -DataLoadedWithId=All data will be loaded with the following import id: <b>%s</b>
    -ErrorMissingMandatoryValue=Obligātie dati ir tukši avota failu laukā <b>%s.</b>
    -TooMuchErrors=Joprojām <b>%s</b> citu avotu līnijas ar kļūdām, taču izlaide ir bijusi ierobežota.
    -TooMuchWarnings=Joprojām <b>%s</b> citu avotu līnijas ar brīdinājumiem, taču izlaide ir bijusi ierobežota.
    -EmptyLine=Tukšas līnijas (tiks izmesti)
    -CorrectErrorBeforeRunningImport=Vispirms ir labot visas kļūdas, pirms braukšanas galīgo ievešanu.
    +RunImportFile=Importēt datus
    +NowClickToRunTheImport=Pārbaudiet importa simulācijas rezultātus. Labojiet kļūdas un atkārtojiet testu. <br> Kad simulācijā nav kļūdu, jūs varat turpināt importēt datus datu bāzē.
    +DataLoadedWithId=Visi dati tiks ielādēti ar šādu importa ID: <b> %s </b>, lai iespējotu meklēšanu šajā datu kopā, ja nākotnē atklāsiet problēmas.
    +ErrorMissingMandatoryValue=Obligātie dati avota failā ir tukši laukā <b> %s </b>.
    +TooMuchErrors=Vēl ir <b> %s </b> citas avota līnijas ar kļūdām, taču izlaide ir ierobežota.
    +TooMuchWarnings=Vēl ir <b> %s </b> citas avota līnijas ar brīdinājumiem, bet izlaide ir ierobežota.
    +EmptyLine=Tukšas līnijas (tiks izmestas)
    +CorrectErrorBeforeRunningImport=Jums <b> ir </b> jāizlabo visas kļūdas <b> pirms </b> varat veikt importu.
     FileWasImported=Fails tika importēts ar numuru <b>%s.</b>
    -YouCanUseImportIdToFindRecord=You can find all imported record in your database by filtering on field <b>import_key='%s'</b>.
    +YouCanUseImportIdToFindRecord=Jūs varat atrast visus importētos ierakstus savā datubāzē, filtrējot laukā <b> import_key = '%s' </b>.
     NbOfLinesOK=Skaits līniju bez kļūdām un bez brīdinājumiem: <b>%s.</b>
     NbOfLinesImported=Skaits līniju veiksmīgi importēto: <b>%s.</b>
     DataComeFromNoWhere=Vērtību, lai ievietotu nāk no nekur avota failā.
     DataComeFromFileFieldNb=Vērtību, lai ievietotu nāk no lauka skaits <b>%s,</b> kas avota failā.
    -DataComeFromIdFoundFromRef=Vērtība, kas nāk no lauka numurs <b>%s</b> no avota fails tiks izmantoti, lai atrastu ID mātes objekta izmantot (Tātad Objet <b>%s,</b> kas ir ref. No avota failā ir pastāv uz Dolibarr).
    -DataComeFromIdFoundFromCodeId=Code that comes from field number <b>%s</b> of source file will be used to find id of parent object to use (So the code from source file must exists into dictionary <b>%s</b>). Note that if you know id, you can also use it into source file instead of code. Import should work in both cases.
    +DataComeFromIdFoundFromRef=Sākotnējā faila lauka skaitļa <b> %s </b> vērtība tiks izmantota, lai atrastu izmantotā vecā objekta ID (tādēļ objekts <b> %s </b>, kuram ir atsauces no avota faila jābūt datu bāzē).
    +DataComeFromIdFoundFromCodeId=Avota faila lauka skaitļa kods <b> %s </b> tiks izmantots, lai atrastu izmantojamā vecāka objekta ID (tādēļ vārdnīcas kodam jābūt eksemplāram <b> %s </b> ) Ņemiet vērā, ka, ja jūs zināt id, varat to izmantot arī avota failā, nevis kodu. Importam jādarbojas abos gadījumos.
     DataIsInsertedInto=Dati, kas nāk no avota fails tiks ievietota pēc lauka:
    -DataIDSourceIsInsertedInto=Mātes objekta atrasts izmantojot datus avota failā id, tiks ievietota pēc lauka:
    +DataIDSourceIsInsertedInto=Mātes objekta ID tika atrasts, izmantojot avota faila datus, tiks ievietots šādā laukā:
     DataCodeIDSourceIsInsertedInto=Mātes līnijas atrasts no koda id, tiks ievietota šādā jomā:
     SourceRequired=Datu vērtība ir obligāta
     SourceExample=Piemērs par iespējamo datu vērtības
     ExampleAnyRefFoundIntoElement=Jebkura atsauce atrasts elementu <b>%s</b>
     ExampleAnyCodeOrIdFoundIntoDictionary=Any code (or id) found into dictionary <b>%s</b>
    -CSVFormatDesc=<b>Ar komatu atdalītu vērtību</b> failu formāts (. Csv). <br> Tas ir teksta faila formāts, kur lauki ir atdalīti ar atdalītāju [%s]. Ja atdalītājs atrodas iekšpusē lauka saturu, lauks tiek noapaļota ar apaļo raksturs [%s]. Escape raksturs izvairīties apaļas raksturs ir [%s].
    -Excel95FormatDesc=<b>Excel</b> faila formāts (.xls)<br>Tas ir Excel 95 formāts (BIFF5).
    -Excel2007FormatDesc=<b>Excel</b> faila formāts (.xlsx) <br>Tas ir Excel 2007 formāts (SpreadsheetML).
    +CSVFormatDesc=<b> Kumijas atdalītas vērtības </ b> faila formāts (.csv). <br> Šis ir teksta faila formāts, kurā lauki atdala ar atdalītāju [%s]. Ja lauka saturā atrodas atdalītājs, lauku noapaļo apaļa formā [%s]. Escape raksturs, lai izvairītos no apaļa raksturs ir [%s].
    +Excel95FormatDesc=<b> Excel </ b> faila formāts (.xls) <br> Šis ir iekšējais Excel 95 formāts (BIFF5).
    +Excel2007FormatDesc=<b> Excel </ b> faila formāts (.xlsx) <br> Šis ir vietējais Excel 2007 formāts (SpreadsheetML).
     TsvFormatDesc=<b>Tab atdalītu vērtību</b> failu formāts (. TSV) <br> Tas ir teksta faila formāts, kur lauki ir atdalīti ar tabulācijas [Tab].
     ExportFieldAutomaticallyAdded=Field <b>%s</b> was automatically added. It will avoid you to have similar lines to be treated as duplicate record (with this field added, all lines will own their own id and will differ).
    -CsvOptions=Csv opcijas
    -Separator=Atdalītājs
    -Enclosure=Iežogojums
    +CsvOptions=CSV formāta opcijas
    +Separator=Lauka atdalītājs
    +Enclosure=Virknes atdalītājs
     SpecialCode=Speciāls kods
     ExportStringFilter=%% allows replacing one or more characters in the text
     ExportDateFilter=YYYY, YYYYMM, YYYYMMDD : filters by one year/month/day<br>YYYY+YYYY, YYYYMM+YYYYMM, YYYYMMDD+YYYYMMDD : filters over a range of years/months/days<br> > YYYY, > YYYYMM, > YYYYMMDD : filters on all following years/months/days<br> < YYYY, < YYYYMM, < YYYYMMDD : filters on all previous years/months/days
    -ExportNumericFilter=NNNNN filters by one value<br>NNNNN+NNNNN filters over a range of values<br>< NNNNN filters by lower values<br>> NNNNN filters by higher values
    -ImportFromLine=Import starting from line number
    +ExportNumericFilter=NNNNN filtrē ar vienu vērtību <br> NNNNN + NNNNN filtrus vērtību diapazonā <br> <NNNNN filtri ar zemākām vērtībām <br >> NNNNN filtri ar lielākām vērtībām
    +ImportFromLine=Importēt, sākot ar līnijas numuru
     EndAtLineNb=End at line number
    -ImportFromToLine=Import line numbers (from - to)
    +ImportFromToLine=Ierobežojuma diapazons (no - līdz), piem. izlaist galvenes līniju
     SetThisValueTo2ToExcludeFirstLine=For example, set this value to 3 to exclude the 2 first lines
    -KeepEmptyToGoToEndOfFile=Keep this field empty to go up to the end of file
    -SelectPrimaryColumnsForUpdateAttempt=Select column(s) to use as primary key for update attempt
    -UpdateNotYetSupportedForThisImport=Update is not supported for this type of import (only insert)
    -NoUpdateAttempt=No update attempt was performed, only insert
    -ImportDataset_user_1=Users (employees or not) and properties
    +KeepEmptyToGoToEndOfFile=Saglabājiet šo lauku tukšu, lai pārietu uz faila beigām
    +SelectPrimaryColumnsForUpdateAttempt=Atlasiet kolonnu (-es), kuru izmantojat kā primāro atslēgu atjaunināšanas mēģinājumam
    +UpdateNotYetSupportedForThisImport=Šī veida importa atjaunināšana nav atbalstīta (tikai ievietot).
    +NoUpdateAttempt=Netika veikts atjaunināšanas mēģinājums, tikai ievietojiet
    +ImportDataset_user_1=Lietotāji (darbinieki vai ne) un īpašumi
     ComputedField=Aprēķinātais lauks
     ## filters
     SelectFilterFields=Ja jūs vēlaties filtrēt dažas vērtības, vienkārši ievadi vērtības šeit.
    @@ -127,7 +127,7 @@ FilteredFields=Filtrētie lauki
     FilteredFieldsValues=Cenas filtru
     FormatControlRule=Format control rule
     ## imports updates
    -KeysToUseForUpdates=Key to use for updating data
    -NbInsert=Number of inserted lines: %s
    -NbUpdate=Number of updated lines: %s
    -MultipleRecordFoundWithTheseFilters=Multiple records have been found with these filters: %s
    +KeysToUseForUpdates=Atslēga (sleja), ko izmantot esošo datu <b> atjaunināšanai </ b>
    +NbInsert=Ievietoto līniju skaits: %s
    +NbUpdate=Atjaunināto līniju skaits: %s
    +MultipleRecordFoundWithTheseFilters=Ar šiem filtriem tika atrasti vairāki ieraksti: %s
    diff --git a/htdocs/langs/lv_LV/help.lang b/htdocs/langs/lv_LV/help.lang
    index 3d9f84dc171..20741bcd99e 100644
    --- a/htdocs/langs/lv_LV/help.lang
    +++ b/htdocs/langs/lv_LV/help.lang
    @@ -6,21 +6,21 @@ OtherSupport=Cits atbalsts
     ToSeeListOfAvailableRessources=Lai sazinātos / skatītu pieejamos resursus:
     HelpCenter=Palīdzības centrs
     DolibarrHelpCenter=Dolibarr palīdzības un atbalsta centrs
    -ToGoBackToDolibarr=Pretējā gadījumā, klikšķiniet <a href="%s">šeit, lai izmantotu Dolibarr</a>
    -TypeOfSupport=Atbalsta avots
    +ToGoBackToDolibarr=Pretējā gadījumā <a href="%s"> noklikšķiniet šeit, lai turpinātu Dolibarr lietošanu </a>.
    +TypeOfSupport=Atbalsta veids
     TypeSupportCommunauty=Kopiena (bezmaksas)
     TypeSupportCommercial=Komerciāli
     TypeOfHelp=Veids
    -NeedHelpCenter=Need help or support?
    +NeedHelpCenter=Jums vajadzīga palīdzība vai atbalsts?
     Efficiency=Efektivitāte
     TypeHelpOnly=Tikai palīdzība
     TypeHelpDev=Palīdzība + uzlabošana
    -TypeHelpDevForm=Palīdzība + uzlabošana + veidošana
    -ToGetHelpGoOnSparkAngels1=Daži uzņēmumi var nodrošināt ātru (dažkārt tūlītēju) un efektīvāku tiešsaistes atbalstu, veicot kontroli pār datoru. Šādus palīgus var atrast <b>%s</b> tīmekļa vietnē:
    -ToGetHelpGoOnSparkAngels3=Jūs varat arī doties uz sarakstu ar visiem pieejamajiem treneri Dolibarr, šajā klikšķi uz pogas
    -ToGetHelpGoOnSparkAngels2=Dažreiz nav uzņēmums pieejams brīdī, kad jūs veicat meklēšanu, tāpēc mainiet filtru, lai meklētu "visas pieejamības". Jums būs iespēja sūtīt vairāk pieprasījumu.
    -BackToHelpCenter=Pretējā gadījumā, klikšķiniet šeit, lai dotos <a href="%s">atpakaļ uz palīdzības centra mājas lapu</a> .
    -LinkToGoldMember=Jūs varat zvanīt vienu no autobusa izraudzītās Dolibarr jūsu valodā (%s), noklikšķinot uz savu logrīku (statuss un maksimālo cenu tiek atjauninātas automātiski):
    +TypeHelpDevForm=Palīdzība + attīstība + apmācība
    +ToGetHelpGoOnSparkAngels1=Daži uzņēmumi var nodrošināt ātru (dažreiz tūlītēju) un efektīvāku tiešsaistes atbalstu, izmantojot tālvadības pulti ar datoru. Šāda palīdzība ir atrodama <b> %s </b> tīmekļa vietnē:
    +ToGetHelpGoOnSparkAngels3=Jūs varat arī doties uz visu pieejamo Dolibarr trenažieru sarakstu, lai noklikšķinātu uz pogas
    +ToGetHelpGoOnSparkAngels2=Dažreiz, veicot meklēšanu, uzņēmums nav pieejams, tāpēc mainiet filtru, lai meklētu "visu pieejamību". Jūs varēsiet nosūtīt vairāk pieprasījumu.
    +BackToHelpCenter=Pretējā gadījumā <a href="%s"> atveriet palīdzības centra sākumlapu </a>.
    +LinkToGoldMember=Jūs varat piezvanīt uz vienu no Dolibarr izvēlētām instruktoru valodām (%s), noklikšķinot uz tās logrīka (statuss un maksimālā cena tiek automātiski atjaunināta):
     PossibleLanguages=Atbalstītās valodas
    -SubscribeToFoundation=Palīdzi Dolibarr projektam, piesakies fondam
    +SubscribeToFoundation=Palīdziet Dolibarr projektam, abonējiet fondu
     SeeOfficalSupport=Oficiālaiā Dolibarr palīdzība jūsu valodā: <br><b><a href="%s" target="_blank">%s</a></b>
    diff --git a/htdocs/langs/lv_LV/holiday.lang b/htdocs/langs/lv_LV/holiday.lang
    index 61b1aba0acf..d04757371c2 100644
    --- a/htdocs/langs/lv_LV/holiday.lang
    +++ b/htdocs/langs/lv_LV/holiday.lang
    @@ -1,10 +1,10 @@
     # Dolibarr language file - Source file is en_US - holiday
     HRM=CRV
    -Holidays=Brīvdienas
    -CPTitreMenu=Brīvdienas
    +Holidays=Atstājiet
    +CPTitreMenu=Atstājiet
     MenuReportMonth=Ikmēneša paziņojums
     MenuAddCP=Jauns atvaļinājuma pieprasījums
    -NotActiveModCP=You must enable the module Leaves to view this page.
    +NotActiveModCP=Jums ir jāiespējo modulis Atvaļinājumi, lai apskatītu šo lapu.
     AddCP=Izveidot atvaļinājuma pieprasījumu
     DateDebCP=Sākuma datums
     DateFinCP=Beigu datums
    @@ -15,7 +15,7 @@ ApprovedCP=Apstiprināts
     CancelCP=Atcelts
     RefuseCP=Atteikts
     ValidatorCP=Asistents
    -ListeCP=Atvaļinājumu saraksts
    +ListeCP=Atvaļinājuma saraksts
     LeaveId=Atvaļinājuma ID
     ReviewedByCP=To apstiprinās
     UserForApprovalID=Lietotājs apstiprinājuma ID
    @@ -25,8 +25,8 @@ UserForApprovalLogin=Apstiprinājuma lietotāja pieteikšanās
     DescCP=Apraksts
     SendRequestCP=Izveidot atvaļinājuma pieprasījumu
     DelayToRequestCP=Leave requests must be made at least <b>%s day(s)</b> before them.
    -MenuConfCP=Balance of leaves
    -SoldeCPUser=Atvaļinājums ir <b> %s </b> dienas.
    +MenuConfCP=Atvaļinājuma atlikums
    +SoldeCPUser=Atvaļinājumu līdzsvars ir <b> %s </b> dienas.
     ErrorEndDateCP=Jums ir jāizvēlas beigu datumu lielāks par sākuma datums.
     ErrorSQLCreateCP=SQL kļūda izveides laikā:
     ErrorIDFicheCP=An error has occurred, the leave request does not exist.
    @@ -51,7 +51,7 @@ StatutCP=Statuss
     TitleDeleteCP=Dzēst atvaļinājuma pieprasījumu
     ConfirmDeleteCP=Confirm the deletion of this leave request?
     ErrorCantDeleteCP=Error you don't have the right to delete this leave request.
    -CantCreateCP=You don't have the right to make leave requests.
    +CantCreateCP=Jums nav tiesību veikt atvaļinājumu pieprasījumus.
     InvalidValidatorCP=You must choose an approbator to your leave request.
     NoDateDebut=Jums ir jāizvēlas sākuma datums.
     NoDateFin=Jums ir jāizvēlas beigu datums.
    @@ -60,7 +60,7 @@ TitleValidCP=Apstipriniet atvaļinājuma pieprasījumu
     ConfirmValidCP=Vai tiešām vēlaties apstiprināt atvaļinājuma pieprasījumu?
     DateValidCP=Datums apstiprināts
     TitleToValidCP=Nosūtīt atvaļinājuma pieprasījumu
    -ConfirmToValidCP=Are you sure you want to send the leave request?
    +ConfirmToValidCP=Vai tiešām vēlaties nosūtīt atvaļinājuma pieprasījumu?
     TitleRefuseCP=Atteikties no atvaļinājuma pieprasījuma
     ConfirmRefuseCP=Vai tiešām vēlaties atteikt atvaļinājuma pieprasījumu?
     NoMotifRefuseCP=Jums ir jāizvēlas iemesls kāpēc atteikt pieprasījums.
    @@ -85,7 +85,7 @@ NewSoldeCP=Jana Bilance
     alreadyCPexist=A leave request has already been done on this period.
     FirstDayOfHoliday=Pirmā atvaļinājuma diena
     LastDayOfHoliday=Pēdēja atvaļinājuma diena
    -BoxTitleLastLeaveRequests=Latest %s modified leave requests
    +BoxTitleLastLeaveRequests=Jaunākie %s labotie atvaļinājumu pieprasījumi
     HolidaysMonthlyUpdate=Ikmēneša atjauninājums
     ManualUpdate=Manuāla aktualizēšana
     HolidaysCancelation=Atvaļinājuma pieprasījuma atcelšana
    @@ -101,8 +101,8 @@ LEAVE_SICK=Slimības lapa
     LEAVE_OTHER=Cits atvaļinājums
     LEAVE_PAID_FR=Apmaksāts atvaļinājums
     ## Configuration du Module ##
    -LastUpdateCP=Latest automatic update of leaves allocation
    -MonthOfLastMonthlyUpdate=Month of latest automatic update of leaves allocation
    +LastUpdateCP=Jaunākais automātiska atvaļinājuma piešķiršanas atjaunināšana
    +MonthOfLastMonthlyUpdate=Pēdējā automātiskā atvaļinājuma piešķiršanas mēneša pēdējā mēneša laikā
     UpdateConfCPOK=Veiksmīgi atjaunināta.
     Module27130Name= Management of leave requests
     Module27130Desc= Atvaļinājumu pieprasījumu vadīšana
    @@ -112,13 +112,18 @@ NoticePeriod=Paziņojuma periods
     HolidaysToValidate=Validate leave requests
     HolidaysToValidateBody=Zemāk ir atvaļinājuma pieprasījums kuru jāapstiprina
     HolidaysToValidateDelay=This leave request will take place within a period of less than %s days.
    -HolidaysToValidateAlertSolde=The user who made this leave reques do not have enough available days.
    +HolidaysToValidateAlertSolde=Lietotājam, kurš ir iesniedzis šo atvaļinājuma pieprasījumu, ir pietiekami daudz pieejamo dienu.
     HolidaysValidated=Apstiprinātie atvaļinājumu pieprasījumi
    -HolidaysValidatedBody=Your leave request for %s to %s has been validated.
    +HolidaysValidatedBody=Jūsu atvaļinājuma pieprasījums no %s līdz %s ir ticis apstiprināts.
     HolidaysRefused=Pieprasījums noraidīts
    -HolidaysRefusedBody=Your leave request for %s to %s has been denied for the following reason :
    -HolidaysCanceled=Canceled leaved request
    -HolidaysCanceledBody=Your leave request for %s to %s has been canceled.
    +HolidaysRefusedBody=Jūsu atvaļinājuma pieprasījums %s līdz %s tika noraidīts šāda iemesla dēļ:
    +HolidaysCanceled=Atcelts atvaļinājuma pieprasījums
    +HolidaysCanceledBody=Jūsu atvaļinājuma pieprasījums no %s līdz %s ir atcelts.
     FollowedByACounter=1: Šāda veida atvaļinājumam jāievēro skaitītājs. Skaitījtājs tiek palielināts manuāli vai automātiski, un, ja atvaļinājuma pieprasījums ir apstiprināts, skaitītājs tiek samazināts. <br> 0: neseko skaitītājs.
     NoLeaveWithCounterDefined=There is no leave types defined that need to be followed by a counter
    -GoIntoDictionaryHolidayTypes=Go into <strong>Home - Setup - Dictionaries - Type of leaves</strong> to setup the different types of leaves.
    +GoIntoDictionaryHolidayTypes=Iet uz <strong> Sākums - Iestatīšana - Vārdnīcas - Atvaļinājuma veids </ strong>, lai iestatītu dažādu veidu lapas.
    +HolidaySetup=Moduļa brīvdienas uzstādīšana
    +HolidaysNumberingModules=Atstājiet pieprasījumu numerācijas modeļus
    +TemplatePDFHolidays=Veidne atvaļinājumu pieprasīšanai PDF
    +FreeLegalTextOnHolidays=Brīvs teksts PDF
    +WatermarkOnDraftHolidayCards=Ūdenszīmes uz izbraukšanas pieprasījumiem
    diff --git a/htdocs/langs/lv_LV/hrm.lang b/htdocs/langs/lv_LV/hrm.lang
    index 7e5dc4f2ccb..4c2f10e6664 100644
    --- a/htdocs/langs/lv_LV/hrm.lang
    +++ b/htdocs/langs/lv_LV/hrm.lang
    @@ -1,13 +1,13 @@
     # Dolibarr language file - en_US - hrm
     # Admin
    -HRM_EMAIL_EXTERNAL_SERVICE=Email to prevent HRM external service
    -Establishments=Establishments
    -Establishment=Establishment
    -NewEstablishment=New establishment
    -DeleteEstablishment=Delete establishment
    -ConfirmDeleteEstablishment=Are-you sure to delete this establishment?
    -OpenEtablishment=Open establishment
    -CloseEtablishment=Close establishment
    +HRM_EMAIL_EXTERNAL_SERVICE=E-pasts, lai novērstu HRM ārējo pakalpojumu
    +Establishments=Iestādes
    +Establishment=Izveide
    +NewEstablishment=Jauns uzņēmums
    +DeleteEstablishment=Dzēst uzņēmumu
    +ConfirmDeleteEstablishment=Vai tiešām vēlaties dzēst šo uzņēmumu?
    +OpenEtablishment=Atvērts uzņēmums
    +CloseEtablishment=Aizvērt uzņēmumu
     # Dictionary
     DictionaryDepartment=HRM - Department list
     DictionaryFunction=HRM - Function list
    diff --git a/htdocs/langs/lv_LV/install.lang b/htdocs/langs/lv_LV/install.lang
    index 23a8e5d909f..b96eb26e8ee 100644
    --- a/htdocs/langs/lv_LV/install.lang
    +++ b/htdocs/langs/lv_LV/install.lang
    @@ -2,37 +2,37 @@
     InstallEasy=Sekojiet instrukcijām soli pa solim.
     MiscellaneousChecks=Priekšnoteikumu pārbaude
     ConfFileExists=Konfigurācijas fails <b>%s</b> eksistē.
    -ConfFileDoesNotExistsAndCouldNotBeCreated=Konfigurācijas fails <b>%s</b> nav un nevar tikt izveidots!
    +ConfFileDoesNotExistsAndCouldNotBeCreated=Konfigurācijas fails <b> %s </b> nepastāv un to nevarēja izveidot!
     ConfFileCouldBeCreated=Konfigurācijas failu <b>%s</b> var izveidot.
    -ConfFileIsNotWritable=Konfigurācijas failam <b>%s</b> nav rakstīšanas tiesības. Pārbaudiet atļaujas. Par pirmo instalēt, jūsu tīmekļa serveris ir jāpiešķir, lai varētu rakstīt šajā failā laikā konfigurācijas process ("chmod 666", piemēram, uz kā OS UNIX).
    +ConfFileIsNotWritable=Konfigurācijas fails <b> %s </ b> nav rakstāms. Pārbaudīt atļaujas. Pirmajai instalēšanai jūsu tīmekļa serverim jāspēj rakstīt šajā failā konfigurācijas procesa laikā ("chmod 666", piemēram, operētājsistēmā Unix, piemēram).
     ConfFileIsWritable=Konfigurācijas failā <b>%s</b> var ierakstīt.
     ConfFileMustBeAFileNotADir=Configuration file <b>%s</b> must be a file, not a directory.
    -ConfFileReload=Pārlādē visu informāciju no konfigurācijas faila.
    +ConfFileReload=Pārsūtot parametrus no konfigurācijas faila.
     PHPSupportSessions=PHP atbalsta sesijas.
     PHPSupportPOSTGETOk=PHP atbalsta mainīgos POST un GET.
    -PHPSupportPOSTGETKo=Iespējams, ka jūsu PHP neatbalsta mainīgos POST un / vai GET. Pārbaudiet parametrus <b>variables_order</b> failā php.ini.
    -PHPSupportGD=PHP atbalsta GD grafiskās funkcijas.
    -PHPSupportCurl=Šis PHP atbalsts Curl.
    -PHPSupportUTF8=PHP atbalsta UTF8 funkcijas.
    +PHPSupportPOSTGETKo=Iespējams, ka jūsu PHP iestatīšana neatbalsta mainīgos POST un / vai GET. Pārbaudiet parametru <b> variables_order </ b> php.ini.
    +PHPSupportGD=Šis PHP atbalsta GD grafiskās funkcijas.
    +PHPSupportCurl=Šis PHP atbalsta Curl.
    +PHPSupportUTF8=Šis PHP atbalsta UTF8 funkcijas.
     PHPMemoryOK=Jūsu PHP maksimālā sesijas atmiņa ir iestatīts uz <b>%s.</b> Tas ir pietiekami.
    -PHPMemoryTooLow=Jūsu PHP max sesijas atmiņa ir iestatīts uz <b>%s</b> baitu. Tas būtu pārāk mazs. Mainiet savu <b>php.ini</b> lai uzstādītu <b>memory_limit</b> parametrs vismaz <b>%s</b> baitos.
    -Recheck=Klikšķiniet šeit, lai vairāk izceltu testu
    -ErrorPHPDoesNotSupportSessions=PHP instalācija neatbalsta sesijas. Šī funkcija ir nepieciešama lai Dolibarr strādātu. Pārbaudiet savus PHP iestatījumus.
    -ErrorPHPDoesNotSupportGD=PHP instalācija neatbalsta grafisko funkciju GD. Nebūs pieejami grafiki.
    +PHPMemoryTooLow=Jūsu PHP max sesijas atmiņa ir iestatīta uz <b> %s </ b> baitiem. Tas ir pārāk zems. Mainiet <b> php.ini </ b>, lai iestatītu <b> memory_limit </ b> parametru vismaz <b> %s </ b> baitiem.
    +Recheck=Noklikšķiniet šeit, lai iegūtu sīkāku pārbaudi
    +ErrorPHPDoesNotSupportSessions=Jūsu PHP instalācija neatbalsta sesijas. Šī funkcija ir nepieciešama, lai Dolibarr darbotos. Pārbaudiet sesiju direktorijas PHP iestatījumus un atļaujas.
    +ErrorPHPDoesNotSupportGD=Jūsu PHP instalācija neatbalsta GD grafiskās funkcijas. Nav neviena grafika.
     ErrorPHPDoesNotSupportCurl=Jūsu PHP instalācija neatbalsta Curl.
    -ErrorPHPDoesNotSupportUTF8=PHP instalācija neatbalsta UTF8 funkciju. Dolibarr nevar strādāt pareizi. Atrisiniet šo pirms instalējat Dolibarr.
    +ErrorPHPDoesNotSupportUTF8=Jūsu PHP instalācija neatbalsta UTF8 funkcijas. Dolibarr nevar darboties pareizi. Atrisiniet to pirms Dolibarr instalēšanas.
     ErrorDirDoesNotExists=Katalogs %s neeksistē.
    -ErrorGoBackAndCorrectParameters=Atgriezieties un labojiet nepareizos parametrus.
    +ErrorGoBackAndCorrectParameters=Atgriezieties un pārbaudiet / labojiet parametrus.
     ErrorWrongValueForParameter=Iespējams, esat ievadījis nepareizu vērtību parametrā '%s'.
     ErrorFailedToCreateDatabase=Neizdevās izveidot datubāzi '%s'.
     ErrorFailedToConnectToDatabase=Neizdevās izveidot savienojumu ar datu bāzi '%s'.
     ErrorDatabaseVersionTooLow=Datu bāzes versija (%s) pārāk veca. Versija %s vai augstāka ir nepieciešama.
     ErrorPHPVersionTooLow=PHP versija ir pārāk veca. Versija %s ir nepieciešama.
    -ErrorConnectedButDatabaseNotFound=Savienojums ar serveri sekmīgi pabeigts, bet datubāze '%s' nav atrasta.
    +ErrorConnectedButDatabaseNotFound=Savienojums ar serveri ir veiksmīgs, bet datubāze '%s' nav atrasta.
     ErrorDatabaseAlreadyExists=Datubāze '%s' jau eksistē.
    -IfDatabaseNotExistsGoBackAndUncheckCreate=Ja datu bāzē neeksistē, dodieties atpakaļ un pārbaudiet opciju "Izveidot datu bāzi".
    +IfDatabaseNotExistsGoBackAndUncheckCreate=Ja datubāze nepastāv, atveriet un atzīmējiet opciju "Izveidot datubāzi".
     IfDatabaseExistsGoBackAndCheckCreate=Ja datu bāze jau pastāv, dodieties atpakaļ un izņemiet ķeksi "Izveidot datu bāzi".
    -WarningBrowserTooOld=Pārāk vecs pārlūkprogrammas versija. Pārlūkprogrammu Firefox, Chrome vai Opera jaunāko versiju uzstādīšana  ir ļoti ieteicama.
    +WarningBrowserTooOld=Pārlūkprogrammas versija ir pārāk veca. Ir ļoti ieteicams jaunināt pārlūku uz jaunāko Firefox, Chrome vai Opera versiju.
     PHPVersion=PHP versija
     License=Izmantojot licenci
     ConfigurationFile=Konfigurācijas fails
    @@ -45,22 +45,23 @@ DolibarrDatabase=Dolibarr datubāze
     DatabaseType=Datubāzes tips
     DriverType=Draivera veids
     Server=Serveris
    -ServerAddressDescription=Nosaukums vai IP adrese datu bāzes serverim - parasti 'localhost', ja datu bāzes serveris ir izvietots uz tā paša servera uz kura atrodas web serveris
    +ServerAddressDescription=Datu bāzes servera nosaukums vai ip adrese. Parasti "localhost", ja datu bāzes serveris ir izvietots tajā pašā serverī kā tīmekļa serveris.
     ServerPortDescription=Datu bāzes servera ports. Atstājiet tukšu, ja nav zināms.
     DatabaseServer=Datubāzes serveris
     DatabaseName=Datubāzes nosaukums
    -DatabasePrefix=Datubāzes tabulu prefikss
    -AdminLogin=Dolibarr datu bāzes īpašnieka lietotājvārds
    -PasswordAgain=Atkārtot paroli otrreiz
    +DatabasePrefix=Datubāzes galda prefikss
    +DatabasePrefixDescription=Datubāzes galda prefikss. Ja tukšs, noklusējums ir llx_.
    +AdminLogin=Dolibarr datu bāzes īpašnieka lietotāja konts.
    +PasswordAgain=Atkārtot paroles apstiprināšanu
     AdminPassword=Parole Dolibarr datu bāzes īpašniekam.
     CreateDatabase=Izveidot datubāzi
    -CreateUser=Izveidojiet īpašnieku vai piešķiriet viņam atļauju datu bāzē
    +CreateUser=Izveidojiet lietotāja kontu vai piešķiriet lietotāja konta atļauju Dolibarr datubāzē
     DatabaseSuperUserAccess=Datu bāzes serveris - superlietotājs piekļuve
    -CheckToCreateDatabase=Ieķeksējiet, ja datu bāze neeksistē, un tā ir jāizveido. <br> Tādā gadījumā, jums ir jāaizpilda pieteikšanās / paroli SuperUser kontā šīs lapas apakšā.
    -CheckToCreateUser=Atzīmējiet izvēles rūtiņu, ja datubāzes īpašnieks neeksistē un tas ir jāizveido vai ja tas ir pieejams, bet datu bāze neeksistē un atļaujas ir jāpiešķir. <br> Šajā gadījumā jums ir jāizvēlas tā lietotājvārds un parole, kā arī jāaizpilda lietotājvārds / parole Lietotāja kontu šīs lapas apakšdaļā. Ja šī rūtiņa nav atzīmēta, jābūt īpašnieka datu bāzei un tās parolēm.
    -DatabaseRootLoginDescription=Lietotāja vārds, kas var izveidot datubāzes vai jaunos lietotājus. Obligāti jāaizpilda, ja datubāze vai tās īpašnieks jau neeksistē.
    -KeepEmptyIfNoPassword=Atstājiet tukšu, ja lietotājam nav vajadzīga parole (izvairieties no bezparoles lietotāja vārda)
    -SaveConfigurationFile=Saglabā vērtības
    +CheckToCreateDatabase=Atzīmējiet izvēles rūtiņu, ja datubāze vēl neeksistē, un tā ir jāizveido. <br> Šajā gadījumā arī šīs lapas apakšdaļā ir jāaizpilda lietotāja konta lietotājvārds un parole.
    +CheckToCreateUser=Atzīmējiet izvēles rūtiņu, ja: <br> datu bāzes lietotāja kontā vēl nav, un tā ir jāveido vai arī, ja lietotāja konts pastāv, bet datubāze nepastāv un atļaujas ir jāpiešķir. <br> Šajā gadījumā jums jāievada lietotāja konts un parole, kā arī <b> arī </ b> administratora konta nosaukums un parole šīs lapas apakšdaļā. Ja šī rūtiņa nav atzīmēta, datu bāzes īpašniekam un parolei jau ir jābūt.
    +DatabaseRootLoginDescription=Superuser konta nosaukums (lai izveidotu jaunas datubāzes vai jaunus lietotājus), obligāti, ja datubāze vai tā īpašnieks vēl nav izveidota.
    +KeepEmptyIfNoPassword=Atstājiet tukšu, ja lietotājam nav paroles (neiesaka)
    +SaveConfigurationFile=Saglabāt parametrus
     ServerConnection=Servera savienojums
     DatabaseCreation=Datubāzes izveidošana
     CreateDatabaseObjects=Datu bāzes objektu izveide
    @@ -71,8 +72,8 @@ CreateOtherKeysForTable=Izveidot ārvalstu atslēgas un indeksi attiecībā uz g
     OtherKeysCreation=Atslēgu un indeksu veidošana
     FunctionsCreation=Funkciju izveide
     AdminAccountCreation=Administratora pieteikšanās izveide
    -PleaseTypePassword=Lūdzu, ievadiet paroli, tukšas paroles ir aizliegtas!
    -PleaseTypeALogin=Lūdzu ierakstiet lietotāja vārdu!
    +PleaseTypePassword=Lūdzu, ierakstiet paroli, tukšas paroles nav atļautas!
    +PleaseTypeALogin=Lūdzu, ierakstiet pieteikšanos!
     PasswordsMismatch=Paroles atšķiras, lūdzu, mēģiniet vēlreiz!
     SetupEnd=Beigas iestatīšanas
     SystemIsInstalled=Instalācija ir pabeigta.
    @@ -81,65 +82,65 @@ YouNeedToPersonalizeSetup=Jums ir jākonfigurēt Dolibarr, lai atbilstu Jūsu va
     AdminLoginCreatedSuccessfuly=Dolibarr administrator login '<b>%s</b>' created successfully.
     GoToDolibarr=Iet uz Dolibarr
     GoToSetupArea=Iet uz Dolibarr (iestatīšanas apgabalu)
    -MigrationNotFinished=Jūsu datu bāzes versija nav pilnībā atjaunināta, tāpēc jums ir par jaunu jāpalaiž atjaunināšanas process.
    +MigrationNotFinished=Datubāzes versija nav pilnībā atjaunināta: atkal palaidiet jaunināšanas procesu.
     GoToUpgradePage=Iet uz atjaunošanas lapu atkal
     WithNoSlashAtTheEnd=Bez slīpsvītras "/" beigās
    -DirectoryRecommendation=Ieteicams izmantot mapi ārpus mājas lapas failu direktorijas.
    +DirectoryRecommendation=Ieteicams izmantot direktoriju ārpus tīmekļa lapām.
     LoginAlreadyExists=Jau eksistē
     DolibarrAdminLogin=Dolibarr administratora lietotāja vārds
    -AdminLoginAlreadyExists=Dolibarr administratora konts '<b>%s</b>' jau eksistē. Dodieties atpakaļ, ja jūs vēlaties izveidot vēl vienu kontu.
    +AdminLoginAlreadyExists=Dolibarr administratora konts '<b> %s </ b>' jau pastāv. Atgriezieties, ja vēlaties izveidot vēl vienu.
     FailedToCreateAdminLogin=Neizdevās izveidot Dolibarr administratora kontu.
    -WarningRemoveInstallDir=Brīdinājums, drošības apsvērumu dēļ pēc instalēšanas vai atjaunināšanas beigām, lai izvairītos no instalēšanas rīku atkārtotas izmantošanas, Jums jāpievieno failu ar nosaukumu <b>install.lock</b> Dolibarr dokumentu direktorijā, lai novērstu ļaunprātīgu instalācijas izmantošanu.
    -FunctionNotAvailableInThisPHP=Nav pieejams šajā PHP versijā
    +WarningRemoveInstallDir=Drošības apsvērumu dēļ, instalēšanas vai jaunināšanas pabeigšanas brīdī drošības nolūkos Dolibarr dokumentu direktorijā jāievieto fails <b> install.lock </ b>, lai novērstu nejaušu / ļaunprātīgu instalēšanas rīku lietošanu.
    +FunctionNotAvailableInThisPHP=Nav pieejams šajā PHP
     ChoosedMigrateScript=Izvēlieties migrācijas skriptu
     DataMigration=Datubāzes migrācijas (dati)
     DatabaseMigration=Datubāzes migrācija (struktūra + daži dati)
     ProcessMigrateScript=Skripts darbojas
     ChooseYourSetupMode=Izvēlies savu instalācijas režīmu un noklikšķiniet uz "Sākt" ...
     FreshInstall=Svaiga instalēšana
    -FreshInstallDesc=Izmantojiet šo režīmu, ja pirmo reizi instalējat. Ja nē, šis režīms var izlabot nepilnīgu iepriekšējo instalāciju. Ja jūs vēlaties atjaunot versiju, izvēlieties "Atjaunošanas" režīmu.
    +FreshInstallDesc=Izmantojiet šo režīmu, ja šī ir jūsu pirmā instalācija. Ja nē, šis režīms var novērst nepilnīgu iepriekšējo instalēšanu. Ja vēlaties atjaunināt savu versiju, izvēlieties "Upgrade" režīmu.
     Upgrade=Atjaunot
     UpgradeDesc=Izmantojiet šo režīmu, ja vēlaties atjaunot veco Dolibarr versiju uz jaunāku. Šis process atjauno datu bāzi un failus.
     Start=Sākt
     InstallNotAllowed=Instalēšana nav atļauta ar <b>conf.php</b> tiesībām
     YouMustCreateWithPermission=Jums ir jāizveido fails %s un jāpiešķir rakstīšanas atļaujas tam, lai web serveris instalēšanas laikā varētu to izmantot.
    -CorrectProblemAndReloadPage=Lūdzu atrisiniet problēmu un nospiediet F5, lai pārlādētu lapu.
    +CorrectProblemAndReloadPage=Lūdzu, novērsiet problēmu un nospiediet F5, lai pārlādētu lapu.
     AlreadyDone=Jau pārvietoti
     DatabaseVersion=Datubāzes versija
     ServerVersion=Datubāzes servera versija
     YouMustCreateItAndAllowServerToWrite=Jums ir jāizveido šo direktoriju un jāļauj web serverim tajā rakstīt.
     DBSortingCollation=Rakstzīmju šķirošanas secība
    -YouAskDatabaseCreationSoDolibarrNeedToConnect=Jūs lūdzat, lai izveidotu datu bāzi <b>%s,</b> bet par to, Dolibarr ir nepieciešams, lai izveidotu savienojumu ar serveri <b>%s</b> ar super lietotāja <b>%s</b> atļaujas.
    -YouAskLoginCreationSoDolibarrNeedToConnect=Jūs lūdzat, lai izveidotu datu bāzi pieteikšanās <b>%s,</b> bet par to, Dolibarr ir nepieciešams, lai izveidotu savienojumu ar serveri <b>%s</b> ar super lietotāja <b>%s</b> atļaujas.
    -BecauseConnectionFailedParametersMayBeWrong=Kā savienojums neizdevās, uzņēmēja vai super lietotāju parametri ir nepareizi.
    +YouAskDatabaseCreationSoDolibarrNeedToConnect=Jūs izvēlējāties izveidot datubāzi <b> %s </ b>, bet šim nolūkam Dolibarr ir nepieciešams savienojums ar serveri <b> %s </ b> ar super lietotāju <b> %s </ b> atļaujām.
    +YouAskLoginCreationSoDolibarrNeedToConnect=Jūs izvēlējāties izveidot datubāzes lietotāju <b> %s </ b>, bet šim nolūkam Dolibarr ir nepieciešams savienojums ar serveri <b> %s </ b> ar super lietotāju <b> %s </ b> atļaujām.
    +BecauseConnectionFailedParametersMayBeWrong=Datubāzes savienojums neizdevās: uzņēmēja vai super lietotāja parametriem jābūt nepareiziem.
     OrphelinsPaymentsDetectedByMethod=Bāreņi maksājums atklāj metode %s
     RemoveItManuallyAndPressF5ToContinue=Noņemiet to manuāli un nospiediet F5, lai turpinātu.
     FieldRenamed=Lauks pārdēvēts
    -IfLoginDoesNotExistsCheckCreateUser=Ja lietotājs neeksistē, jums ir jāizvēlas opciju "Izveidot lietotāju"
    -ErrorConnection=Server "<b>%s</b>", datu bāzes nosaukums "<b>%s</b>" login "<b>%s</b>", vai datu bāzes parole var būt nepareizi vai PHP klienta versijas var būt pārāk vecs, salīdzinot ar bāzes versiju.
    +IfLoginDoesNotExistsCheckCreateUser=Ja lietotājs vēl neeksistē, jums jāpārbauda opcija "Izveidot lietotāju"
    +ErrorConnection=Serveris "<b> %s </ b>", datubāzes nosaukums "<b> %s </ b>", login "<b> %s </ b>" vai datu bāzes parole var būt nepareiza vai arī PHP klienta versija salīdzinot ar datubāzes versiju.
     InstallChoiceRecommanded=Ieteicams izvēlēties, lai instalētu versiju <b>%s</b> no jūsu pašreizējā versijā <b>%s</b>
     InstallChoiceSuggested=<b>Instalācijas sistēmas izvēle.</b>
    -MigrateIsDoneStepByStep=Mērķtiecīga versija (%s) ir plaisa vairākas versijas, tāpēc instalēt vednis nāks atpakaļ ieteikt nākamo migrāciju, kad tas viens būs pabeigts.
    -CheckThatDatabasenameIsCorrect=Pārbaudiet, ka datubāzes nosaukums <b>"%s"</b> ir pareizs.
    +MigrateIsDoneStepByStep=Mērķa versijai (%s) ir vairākas versijas. Instalēšanas vednis atgriezīsies, lai ierosinātu turpmāku migrāciju, kad tas būs pabeigts.
    +CheckThatDatabasenameIsCorrect=Pārbaudiet, vai datubāzes nosaukums "<b> %s </b>" ir pareizs.
     IfAlreadyExistsCheckOption=Ja šis vārds ir pareizs un ka datu bāze neeksistē vēl, jums ir pārbaudīt opciju "Izveidot datu bāzi".
     OpenBaseDir=PHP openbasedir parametrs
    -YouAskToCreateDatabaseSoRootRequired=Jūs pārbauda kaste "Izveidot datu bāzi". Lai to izdarītu, jums ir nepieciešams, lai nodrošinātu login / paroles no superlietotājs (apakšējā formas).
    -YouAskToCreateDatabaseUserSoRootRequired=Jūs pārbauda kaste "Izveidot datu bāzes lietotāju". Lai to izdarītu, jums ir nepieciešams, lai nodrošinātu login / paroles no superlietotājs (apakšējā formas).
    -NextStepMightLastALongTime=Pašreizējā posms var ilgt vairākas minūtes. Lūdzu uzgaidiet, kamēr nākamais ekrāns tiek parādīts, lai varētu turpināt.
    +YouAskToCreateDatabaseSoRootRequired=Jūs atzīmējāt lodziņu "Izveidot datu bāzi". Lai to izdarītu, jums ir jāuzrāda administratora lietotājvārds / parole (veidlapas apakšdaļa).
    +YouAskToCreateDatabaseUserSoRootRequired=Jūs atzīmējāt lodziņu "Izveidot datu bāzes īpašnieku". Lai to izdarītu, jums ir jāuzrāda administratora lietotājvārds / parole (veidlapas apakšdaļa).
    +NextStepMightLastALongTime=Pašreizējais solis var aizņemt vairākas minūtes. Lūdzu, uzgaidiet, līdz nākamais ekrāns tiek parādīts pilnīgi pirms turpināšanas.
     MigrationCustomerOrderShipping=Migrēt piegāde par klientu pasūtījumu uzglabāšanai
     MigrationShippingDelivery=Upgrade uzglabāšanu kuģniecības
     MigrationShippingDelivery2=Upgrade uzglabāšanu 2 kuģniecības
     MigrationFinished=Migrācija pabeigta
    -LastStepDesc=<strong>Pēdējais solis:</strong> Norādīt pieteikšanās lietotāja vārdu un paroli, kuru Jūs plānojat izmantot, lai izveidotu savienojumu ar programmu. Nepalaidiet garām šo, jo šis konts varēs administrēt visus pārējos.
    +LastStepDesc=<strong> Pēdējais solis </ strong>: šeit norādiet pieteikšanos un paroli, kuru vēlaties izmantot, lai izveidotu savienojumu ar Dolibarr. <b> Nepalaidiet to, jo tas ir galvenais konts, lai pārvaldītu visus pārējos / papildu lietotāju kontus. </ b>
     ActivateModule=Aktivizēt moduli %s
     ShowEditTechnicalParameters=Noklikšķiniet šeit, lai parādītu / rediģēt papildu parametrus (ekspertu režīmā)
    -WarningUpgrade=Brīdinājums:\nVai vispirms izmantojāt datu bāzi?\nTas ir ļoti ieteicams: piemēram, datu bāzu sistēmu (piemēram, mysql versijas 5.5.40 / 41/42/43) dēļ dažu datu vai tabulu dēļ var tikt zaudēti daži dati vai tabulas, tādēļ ir ļoti ieteicams izveidot pabeigtu datu bāzē pirms migrācijas sākšanas.\n\nNoklikšķiniet uz OK, lai sāktu migrācijas procesu ...
    -ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug making data loss if you make structure change on your database, like it is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a higher fixed version (list of known bugged version: %s)
    -KeepDefaultValuesWamp=Jūs izmantojat Dolibarr iestatīšanas vedni no DoliWamp, tāpēc vērtības šeit jau ir optimizētas. Mainiet tikai tad, ja jūs zināt, ko darāt.
    -KeepDefaultValuesDeb=Jūs izmantojat Dolibarr iestatīšanas vedni no Linux paketi (Ubuntu, Debian, Fedora ...), tāpēc vērtības ierosinātās šeit jau ir optimizēta. Tikai datu bāzes īpašnieks, lai izveidotu paroli jāpabeidz. Mainītu citus parametrus tikai tad, ja jūs zināt, ko jūs darāt.
    -KeepDefaultValuesMamp=Jūs izmantojat Dolibarr iestatīšanas vedni no DoliMamp, tāpēc vērtības ierosinātās šeit jau ir optimizēta. Mainīt tikai tad, ja jūs zināt, ko jūs darāt.
    -KeepDefaultValuesProxmox=Jūs izmantojat Dolibarr iestatīšanas vedni no Proxmox virtuālās ierīces, tāpēc vērtības ierosinātās šeit jau ir optimizēta. Mainīt tikai tad, ja jūs zināt, ko jūs darāt.
    -UpgradeExternalModule=Izpildiet īpašu ārējo moduļu jaunināšanas procesu
    +WarningUpgrade=Brīdinājums:\nVai vispirms izmantojāt datu bāzi?\nTas ir ļoti ieteicams. Šajā procesā var būt iespējama datu zudums (piemēram, kļūdas mysql versijā 5.5.40 / 41/42/43), tāpēc pirms migrēšanas sākuma ir svarīgi veikt pilnīgu datplūsmas noņemšanu.\n\nNoklikšķiniet uz OK, lai sāktu migrācijas procesu ...
    +ErrorDatabaseVersionForbiddenForMigration=Jūsu datubāzes versija ir %s. Tam ir kritiska kļūda, kas var radīt datu zudumu, ja veicat strukturālas izmaiņas jūsu datubāzē, piemēram, kā to pieprasa migrācijas process. Viņa iemesla dēļ migrācija netiks atļauta, kamēr jūs jaunināt savu datubāzi uz slāņa (ielīmētas) versiju (zināmu buggy versiju saraksts: %s)
    +KeepDefaultValuesWamp=Jūs izmantojāt Dolibarr iestatīšanas vedni no DoliWamp, tādēļ šeit piedāvātās vērtības jau ir optimizētas. Mainiet tos tikai tad, ja zināt, ko jūs darāt.
    +KeepDefaultValuesDeb=Jūs izmantojāt Dolibarr iestatīšanas vedni no Linux paketes (Ubuntu, Debian, Fedora ...), tāpēc šeit piedāvātās vērtības jau ir optimizētas. Jāievada tikai datu bāzes īpašnieka izveidotā parole. Mainiet citus parametrus tikai tad, ja zināt, ko jūs darāt.
    +KeepDefaultValuesMamp=Jūs izmantojāt Dolibarr iestatīšanas vedni no DoliMamp, tāpēc šeit piedāvātās vērtības jau ir optimizētas. Mainiet tos tikai tad, ja zināt, ko jūs darāt.
    +KeepDefaultValuesProxmox=Jūs izmantojāt Dolbyarr iestatīšanas vedni no Proxmox virtuālās ierīces, tāpēc šeit piedāvātās vērtības jau ir optimizētas. Mainiet tos tikai tad, ja zināt, ko jūs darāt.
    +UpgradeExternalModule=Darbiniet ārējo moduļa ārējo jaunināšanas procesu
     SetAtLeastOneOptionAsUrlParameter=Iestatiet vismaz vienu opciju kā parametru URL. Piemēram: "... repair.php? Standard = apstiprināts"
     NothingToDelete=Nav ko tīrīt / dzēst
     NothingToDo=Nav ko darīt
    @@ -153,7 +154,7 @@ MigrationInvoice=Klienta rēķinu datu migrācija
     MigrationContract=Datu migrācija līgumiem
     MigrationSuccessfullUpdate=Atjaunošana veiksmīga
     MigrationUpdateFailed=Neizdevās atjaunināšanas process
    -MigrationRelationshipTables=Datu migrācija uz attiecībām tabulām (%s)
    +MigrationRelationshipTables=Datu migrācija uz attiecīgām tabulām (%s)
     MigrationPaymentsUpdate=Maksājumu datu korekcija
     MigrationPaymentsNumberToUpdate=%s maksājums (-iem), lai atjauninātu
     MigrationProcessPaymentUpdate=Atjaunināt maksājumu(-us) %s
    @@ -162,15 +163,15 @@ MigrationPaymentsNothingUpdatable=Ne vairāk maksājumus, kas var tikt izlabotas
     MigrationContractsUpdate=Līgumu datu korekcija
     MigrationContractsNumberToUpdate=%s līgumu (-iem), lai atjauninātu
     MigrationContractsLineCreation=Izveidot līgumu līniju līguma ref %s
    -MigrationContractsNothingToUpdate=Nav daudz lietas, kas darīt
    -MigrationContractsFieldDontExist=Lauks fk_facture neeksistē vairs. Nav nekas ko darīt.
    +MigrationContractsNothingToUpdate=Nav daudz lietu ko darīt
    +MigrationContractsFieldDontExist=Lauks fk_facture vairs nepastāv. Nav ko darīt.
     MigrationContractsEmptyDatesUpdate=Līgums tukšs datums korekcija
    -MigrationContractsEmptyDatesUpdateSuccess=Contract emtpy date correction done successfully
    +MigrationContractsEmptyDatesUpdateSuccess=Veicot veiksmīgu līguma tukšu datuma korekciju
     MigrationContractsEmptyDatesNothingToUpdate=Nav līguma tukša diena, lai labotu
     MigrationContractsEmptyCreationDatesNothingToUpdate=Nav līguma izveides datums, lai labotu
     MigrationContractsInvalidDatesUpdate=Bad valutēšanas datums līgums korekcija
     MigrationContractsInvalidDateFix=Pareizs līgums %s (līguma datumu = %s, sākot izsniegšanas datumu min = %s)
    -MigrationContractsInvalidDatesNumber=%s līgumi modificēts
    +MigrationContractsInvalidDatesNumber=%s līgumi laboti
     MigrationContractsInvalidDatesNothingToUpdate=Nē dienu ar sliktu vērtību, lai labotu
     MigrationContractsIncoherentCreationDateUpdate=Bad vērtība līguma izveides datums korekcija
     MigrationContractsIncoherentCreationDateUpdateSuccess=Bad value contract creation date correction done successfully
    @@ -187,24 +188,24 @@ MigrationDeliveryDetail=Piegādes atjaunināšana
     MigrationStockDetail=Atjaunināt noliktavas produktu vērtību
     MigrationMenusDetail=Atjaunināt dinamisks izvēlnes tabulas
     MigrationDeliveryAddress=Atjaunināt piegādes adresi sūtījumiem
    -MigrationProjectTaskActors=Datu migrācija uz llx_projet_task_actors galda
    +MigrationProjectTaskActors=Datu migrācija tabulai llx_projet_task_actors
     MigrationProjectUserResp=Datu migrācija jomā fk_user_resp no llx_projet lai llx_element_contact
     MigrationProjectTaskTime=Atjaunināšanas laiks sekundēs
     MigrationActioncommElement=Atjaunināt informāciju par pasākumiem
     MigrationPaymentMode=Datu migrācija uz maksājumu režīmā
     MigrationCategorieAssociation=Kategoriju migrācija
    -MigrationEvents=Migration of events to add event owner into assignement table
    -MigrationEventsContact=Notikumu migrēšana, lai pievienotu notikuma kontaktu nodalīšanas tabulā
    +MigrationEvents=Notikumu migrācija, lai notikuma īpašnieku pievienotu uzdevumu tabulai
    +MigrationEventsContact=Notikumu migrācija, lai notikuma kontaktu pievienotu uzdevumu tabulai
     MigrationRemiseEntity=Atjauniniet llx_societe_remise objekta lauka vērtību
     MigrationRemiseExceptEntity=Atjauniniet llx_societe_remise_except objekta lauka vērtību
     MigrationUserRightsEntity=Atjauniniet llx_user_rights objekta lauka vērtību
     MigrationUserGroupRightsEntity=Atjauniniet llx_usergroup_rights objekta lauka vērtību
     MigrationReloadModule=Reload module %s
     MigrationResetBlockedLog=Atjaunot moduli BlockedLog par v7 algoritmu
    -ShowNotAvailableOptions=Rādīt nepieejamās iespējas
    +ShowNotAvailableOptions=Parādīt nepieejamās iespējas
     HideNotAvailableOptions=Slēpt nepieejamās iespējas
    -ErrorFoundDuringMigration=Migrēšanas procesa laikā tika ziņots par kļūdu, tāpēc nākamais solis nav pieejams. Lai ignorētu kļūdas, varat <a href="%s"> noklikšķināt šeit </a>, taču lietojumprogramma vai dažas funkcijas, iespējams, nedarbosies pareizi, līdz tās nav fiksētas.
    -YouTryInstallDisabledByDirLock=Lietojumprogramma mēģina uzlabot versiju, bet instalēšanas / jaunināšanas lapas ir atspējotas drošības apsvērumu dēļ (katalogs tiek pārdēvēts ar .lock sufiksu). <br>
    -YouTryInstallDisabledByFileLock=Lietojumprogramma mēģina uzlabot versiju, bet lapu instalēšana / pilnveidošana lapas drošības apsvērumu dēļ ir atspējotas (ar bloķēšanas failu <strong> install.lock </ strong> iekļauta Dolibarr dokumentu direktorijā). <br>
    +ErrorFoundDuringMigration=Migrēšanas laikā tika ziņots par kļūdu (-ēm), tāpēc nākamais solis nav pieejams. Lai ignorētu kļūdas, varat <a href="%s"> noklikšķināt šeit </a>, bet lietojumprogramma vai dažas funkcijas var nedarboties pareizi, līdz kļūdas nav atrisinātas.
    +YouTryInstallDisabledByDirLock=Pieteikums mēģināja pašupjaunināt, bet instalēšanas / jaunināšanas lapas tika atspējotas drošībai (direktorija nosaukums tika pārdēvēts ar .lock sufiksu). <br>
    +YouTryInstallDisabledByFileLock=Lietojumprogramma mēģināja pašatjaunināties, bet instalēšanas/atjaunināšanas lapas tika bloķētas drošībai (ar bloķēšanas failu <strong>install.lock</strong> Dolibarr dokumentu direktorijā). <br>
     ClickHereToGoToApp=Noklikšķiniet šeit, lai pārietu uz savu pieteikumu
    -ClickOnLinkOrRemoveManualy=Noklikšķiniet uz šādas saites un, ja jūs vienmēr sasniedzat šo lapu, jums manuāli jāinstalē faila installock
    +ClickOnLinkOrRemoveManualy=Noklikšķiniet uz šīs saites. Ja jūs vienmēr redzat šo pašu lapu, dokumenta direktorijā ir jāizņem / jānomaina faila instal.lock.
    diff --git a/htdocs/langs/lv_LV/interventions.lang b/htdocs/langs/lv_LV/interventions.lang
    index aa12224039b..c550389bf18 100644
    --- a/htdocs/langs/lv_LV/interventions.lang
    +++ b/htdocs/langs/lv_LV/interventions.lang
    @@ -3,29 +3,30 @@ Intervention=Iejaukšanās
     Interventions=Iejaukšanās
     InterventionCard=Iejaukšanās kartiņa
     NewIntervention=Jauna iejaukšanās
    -AddIntervention=Create intervention
    +AddIntervention=Izveidojiet iejaukšanos
    +ChangeIntoRepeatableIntervention=Mainīt uz atkārtotu iejaukšanos
     ListOfInterventions=Iejaukšanās saraksts
     ActionsOnFicheInter=Pasākumi attiecībā uz intervenci
    -LastInterventions=Latest %s interventions
    +LastInterventions=Jaunākās %s iejaukšanās
     AllInterventions=Visas iejaukšanās
     CreateDraftIntervention=Izveidot projektu
     InterventionContact=Intervences kontakts
    -DeleteIntervention=Dzēst iejaukšanās
    +DeleteIntervention=Dzēst iejaukšanos
     ValidateIntervention=Apstiprināt iejaukšanās
     ModifyIntervention=Modificēt iejaukšanās
     DeleteInterventionLine=Dzēst intervences līnija
     CloneIntervention=Klonēt iejaukšanās
    -ConfirmDeleteIntervention=Are you sure you want to delete this intervention?
    -ConfirmValidateIntervention=Are you sure you want to validate this intervention under name <b>%s</b>?
    -ConfirmModifyIntervention=Are you sure you want to modify this intervention?
    -ConfirmDeleteInterventionLine=Are you sure you want to delete this intervention line?
    +ConfirmDeleteIntervention=Vai tiešām vēlaties izdzēst šo iejaukšanos?
    +ConfirmValidateIntervention=Vai tiešām vēlaties apstiprināt šo iejaukšanos ar nosaukumu <b> %s </b>?
    +ConfirmModifyIntervention=Vai tiešām vēlaties mainīt šo notikumu?
    +ConfirmDeleteInterventionLine=Vai tiešām vēlaties dzēst šo intervences līniju?
     ConfirmCloneIntervention=Vai tiešām vēlaties klonēt šo iejaukšanos?
    -NameAndSignatureOfInternalContact=Vārds, uzvārds un paraksts iejaukties:
    +NameAndSignatureOfInternalContact=Vārds, uzvārds un intervētāja paraksts:
     NameAndSignatureOfExternalContact=Vārds un klienta paraksts:
     DocumentModelStandard=Standarta dokumenta paraugs intervencēm
     InterventionCardsAndInterventionLines=Iejaukšanās un līnijas intervenču
     InterventionClassifyBilled=Classify "Billed"
    -InterventionClassifyUnBilled=Classify "Unbilled"
    +InterventionClassifyUnBilled=Klasificēt "neapmaksātas"
     InterventionClassifyDone=Klasificēt "Pabeigts"
     StatusInterInvoiced=Jāmaksā
     SendInterventionRef=Submission of intervention %s
    @@ -40,19 +41,19 @@ InterventionDeletedInDolibarr=Intervention %s deleted
     InterventionsArea=Interventions area
     DraftFichinter=Draft interventions
     LastModifiedInterventions=Latest %s modified interventions
    -FichinterToProcess=Interventions to process
    +FichinterToProcess=Intervences process
     ##### Types de contacts #####
     TypeContact_fichinter_external_CUSTOMER=Šādi-up klientu kontaktu
     # Modele numérotation
    -PrintProductsOnFichinter=Print also lines of type "product" (not only services) on intervention card
    +PrintProductsOnFichinter=Drukājiet arī intervences kartē norādītās "produkta" (ne tikai pakalpojumu) līnijas
     PrintProductsOnFichinterDetails=interventions generated from orders
    -UseServicesDurationOnFichinter=Use services duration for interventions generated from orders
    -UseDurationOnFichinter=Hides the duration field for intervention records
    -UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
    -InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    -AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
    +UseServicesDurationOnFichinter=Izmantojiet pasūtījumu veikšanai paredzēto iejaukšanās pakalpojumu ilgumu
    +UseDurationOnFichinter=Paslēpj intervences ierakstu ilguma lauku
    +UseDateWithoutHourOnFichinter=Noslēpt stundas un minūtes no datuma lauka iejaukšanās ierakstos
    +InterventionStatistics=Intervences statistika
    +NbOfinterventions=Intervences karšu skaits
    +NumberOfInterventionsByMonth=Intervences karšu skaits pēc mēneša (validācijas datums)
    +AmountOfInteventionNotIncludedByDefault=Ienākuma summa pēc noklusējuma netiek iekļauta peļņā (vairumā gadījumu laika kontrolsaraksts tiek izmantots, lai uzskaitītu pavadīto laiku). Lai tos iekļautu, pievienojiet opciju PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT uz 1 sākuma iestatīšanas pogu.
     ##### Exports #####
     InterId=Intervention id
     InterRef=Intervention ref.
    diff --git a/htdocs/langs/lv_LV/languages.lang b/htdocs/langs/lv_LV/languages.lang
    index 86c165da601..3859203526a 100644
    --- a/htdocs/langs/lv_LV/languages.lang
    +++ b/htdocs/langs/lv_LV/languages.lang
    @@ -58,7 +58,7 @@ Language_ka_GE=Gruzīnu valoda
     Language_km_KH=Khmeru
     Language_kn_IN=Kannada
     Language_ko_KR=Korejiešu
    -Language_lo_LA=Lao
    +Language_lo_LA=Laosa
     Language_lt_LT=Lietuviešu
     Language_lv_LV=Latviešu
     Language_mk_MK=Maķedoniešu
    @@ -86,3 +86,4 @@ Language_uz_UZ=Uzbeku
     Language_vi_VN=Vjetnamiešu
     Language_zh_CN=Ķīniešu
     Language_zh_TW=Ķīniešu (tradicionālā)
    +Language_bh_MY=Malajiešu valoda
    diff --git a/htdocs/langs/lv_LV/loan.lang b/htdocs/langs/lv_LV/loan.lang
    index a1b5567aef5..d06df8df3c6 100644
    --- a/htdocs/langs/lv_LV/loan.lang
    +++ b/htdocs/langs/lv_LV/loan.lang
    @@ -9,7 +9,7 @@ ShowLoanPayment=Rādīt aizdevuma maksājumu
     LoanCapital=Kapitāls
     Insurance=Apdrošināšana
     Interest=Interese
    -Nbterms=Number of terms
    +Nbterms=Noteikumu skaits
     Term=Termiņš
     LoanAccountancyCapitalCode=Accounting account capital
     LoanAccountancyInsuranceCode=Accounting account insurance
    @@ -17,7 +17,7 @@ LoanAccountancyInterestCode=Accounting account interest
     ConfirmDeleteLoan=Apstipriniet aizdevuma dzēšanu
     LoanDeleted=Aizdevums veiksmīgi dzēsts
     ConfirmPayLoan=Confirm classify paid this loan
    -LoanPaid=Loan Paid
    +LoanPaid=Aizdevums ir apmaksāts
     ListLoanAssociatedProject=Ar projektu saistīto aizdevumu saraksts
     AddLoan=Izveidot aizdevumu
     FinancialCommitment=Finanšu saistības
    diff --git a/htdocs/langs/lv_LV/mails.lang b/htdocs/langs/lv_LV/mails.lang
    index 824007ba978..59b3427b224 100644
    --- a/htdocs/langs/lv_LV/mails.lang
    +++ b/htdocs/langs/lv_LV/mails.lang
    @@ -14,7 +14,7 @@ MailTo=Saņēmējs (-i)
     MailToUsers=Lietotājam (-iem)
     MailCC=Kopēt
     MailToCCUsers=Kopēt lietotājiem (-iem)
    -MailCCC=Kešatmiņā kopija uz
    +MailCCC=Kešatmiņas kopija
     MailTopic=E-pasta tēma
     MailText=Ziņa
     MailFile=Pievienotie faili
    @@ -22,7 +22,7 @@ MailMessage=E-pasta saturs
     ShowEMailing=Rādīt e-pastus
     ListOfEMailings=E-pastu saraksts
     NewMailing=Jauna e-pasta vēstuļu sūtīšana
    -EditMailing=Labot pasta vēstuļu sūtīšanas
    +EditMailing=Labot pasta vēstuļu sūtīšanu
     ResetMailing=Vēlreiz nosūtīt e-pastu
     DeleteMailing=Dzēst pasta vēstuļu sūtīšanas
     DeleteAMailing=Dzēšana pasta vēstuļu sūtīšanas
    @@ -45,10 +45,10 @@ MailingStatusReadAndUnsubscribe=Lasīt un atrakstīties
     ErrorMailRecipientIsEmpty=E-pasta adresāts ir tukšs
     WarningNoEMailsAdded=Nav jaunu e-pastu, lai pievienotu adresātu sarakstā.
     ConfirmValidMailing=Are you sure you want to validate this emailing?
    -ConfirmResetMailing=Warning, by reinitializing emailing <b>%s</b>, you allow to make a mass sending of this email another time. Are you sure you this is what you want to do?
    -ConfirmDeleteMailing=Are you sure you want to delete this emailling?
    -NbOfUniqueEMails=Nb unikālu e-pastiem
    -NbOfEMails=Nb no e-pastiem
    +ConfirmResetMailing=Brīdinājums, atkārtoti inicializējot e-pasta ziņojumu ar <b> %s </b>, jūs atļausiet vēlreiz nosūtīt šo e-pastu masu saziņā. Vai tiešām vēlaties to izdarīt?
    +ConfirmDeleteMailing=Vai tiešām vēlaties dzēst šo e-pasta ziņojumu?
    +NbOfUniqueEMails=Unikālo e-pasta ziņojumu skaits
    +NbOfEMails=E-pasta ziņojumu skaits
     TotalNbOfDistinctRecipients=Skaits atsevišķu saņēmēju
     NoTargetYet=Nav saņēmēji vēl nav noteiktas (Iet uz TAB &quot;saņēmēji&quot;)
     NoRecipientEmail=Neviens saņēmējs e-pasts %s
    @@ -66,20 +66,20 @@ DateLastSend=Jaunākās nosūtīšanas datums
     DateSending=Sūtīšanas datums
     SentTo=Nosūtīts <b>%s</b>
     MailingStatusRead=Lasīt
    -YourMailUnsubcribeOK=E-pasts <b>%s</b> ir veiksmīgi izņemts no adresātu saraksta
    -ActivateCheckReadKey=Key used to encrypt URL used for "Read Receipt" and "Unsubcribe" feature
    +YourMailUnsubcribeOK=E-pasta adrese <b> %s </b> ir pareizi dzēsta no adresātu saraksta
    +ActivateCheckReadKey=Atslēgvārds, ko izmanto, lai šifrētu URL, kas izmantots funkcijai "Lasīt saņemšanu" un "Atteikties no abonēšanas"
     EMailSentToNRecipients=E-pastu nosūtīja %s saņēmējiem.
     EMailSentForNElements=E-pasts tiek nosūtīts par %s elementiem.
     XTargetsAdded=<b>%s</b> recipients added into target list
    -OnlyPDFattachmentSupported=Ja PDF faili jau tika izveidoti, lai nosūtītos objektus, tie tiks pievienoti e-pastam. Ja nē, neviens e-pasts netiks nosūtīts (turklāt ņemiet vērā, ka šajā versijā masveida sūtīšanai tiek atbalstīti tikai pdf dokumenti).
    +OnlyPDFattachmentSupported=Ja PDF faili jau tika izveidoti, lai nosūtītos objektus, tie tiks pievienoti e-pastam. Ja nē, neviens e-pasts netiks nosūtīts (arī ņemiet vērā, ka šajā versijā tiek atbalstīti tikai pdf dokumenti).
     AllRecipientSelected=Izvēlētie %s ieraksta saņēmēji (ja viņu e-pasts ir zināms).
     GroupEmails=Grupas e-pasti
     OneEmailPerRecipient=Viens e-pasts katram adresātam (pēc noklusējuma viens e-pasts uz vienu atlasīto ierakstu)
     WarningIfYouCheckOneRecipientPerEmail=Brīdinājums. Ja atzīmēsit šo izvēles rūtiņu, tas nozīmē, ka tiks nosūtīts tikai viens e-pasta ziņojums, izvēloties vairākus atšķirīgus ierakstus, tādēļ, ja jūsu ziņojumā ir iekļauti aizstājējumultiņi, kas attiecas uz ieraksta datiem, tos nevar aizstāt.
     ResultOfMailSending=Result of mass EMail sending
    -NbSelected=Nb selected
    -NbIgnored=Nb ignored
    -NbSent=Nb sent
    +NbSelected=Nē atlasīts
    +NbIgnored=Nē ignorēts
    +NbSent=Nosūtīts
     SentXXXmessages=%s ziņa (s) nosūtīta.
     ConfirmUnvalidateEmailing=Vai tiešām vēlaties mainīt e-pastu <b> %s </b> uz melnraksta statusu?
     MailingModuleDescContactsWithThirdpartyFilter=Sazinieties ar klientu filtriem
    @@ -98,7 +98,7 @@ RecipientSelectionModules=Definētie pieprasījumi saņēmēja izvēles
     MailSelectedRecipients=Atlasītie saņēmēji
     MailingArea=Emailings platība
     LastMailings=Jaunākie %s e-pasta ziņojumi
    -TargetsStatistics=Mērķi statistika
    +TargetsStatistics=Mērķu statistika
     NbOfCompaniesContacts=Unikālie kontakti/adreses
     MailNoChangePossible=Saņēmējiem par apstiprinātus pasta vēstuļu sūtīšanas nevar mainīt
     SearchAMailing=Meklēt e-pastu
    @@ -106,7 +106,7 @@ SendMailing=Nosūtīt e-pastu
     SentBy=Nosūtīja
     MailingNeedCommand=Sending an emailing can be performed from command line. Ask your server administrator to launch the following command to send the emailing to all recipients:
     MailingNeedCommand2=Taču jūs varat sūtīt tos tiešsaistē, pievienojot parametru MAILING_LIMIT_SENDBYWEB ar vērtību max skaitu e-pasta Jūs vēlaties nosūtīt pa sesiju. Lai to izdarītu, dodieties uz Home - Setup - pārējie.
    -ConfirmSendingEmailing=If you want to send emailing directly from this screen, please confirm you are sure you want to send emailing now from your browser ?
    +ConfirmSendingEmailing=Ja vēlaties nosūtīt e-pastu tieši no šī ekrāna, lūdzu, apstipriniet, ka esat pārliecināts, ka vēlaties nosūtīt e-pasta ziņojumus tūlīt no savas pārlūkprogrammas?
     LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, <b>%s</b> recipients at a time for each sending session.
     TargetsReset=Nodzēst sarakstu
     ToClearAllRecipientsClickHere=Klikšķiniet šeit, lai notīrītu adresātu sarakstu par šo pasta vēstuļu sūtīšanas
    @@ -139,7 +139,7 @@ UseFormatFileEmailToTarget=Importētajam failam jābūt formatētam <strong> e-p
     UseFormatInputEmailToTarget=Ievadiet virkni ar formātu <strong> e-pasts; vārds; uzvārds; cits </ strong>
     MailAdvTargetRecipients=Saņēmēji (papildu izvēle)
     AdvTgtTitle=Aizpildiet ievades laukus, lai iepriekš atlasītu mērķauditoriju trešajām personām vai kontaktpersonām / adresēm
    -AdvTgtSearchTextHelp=Izmantojiet %% kā burvju karakuģus. Piemēram, lai atrastu visu objektu, piemēram, <b> jean, joe, jim </ b>, jūs varat ievadīt <b> j%% </ b>, kuru varat arī izmantot; kā atdalītājs par vērtību, un izmantot! izņemot šo vērtību. Piemēram, <b> jean; joe; jim%%; jimo;! Jima% </ b> tiks atlasīti visi žanri, joe, sākas ar jim, bet ne jimo, nevis ikviens sākums ar jima
    +AdvTgtSearchTextHelp=Izmantojiet %% kā aizstājējzīmes. Piemēram, lai atrastu visu objektu, piemēram, <b> jean, joe, jim </ b>, jūs varat ievadīt <b> j%% </ b>, kuru varat arī izmantot; kā atdalītājs par vērtību, un izmantot! izņemot šo vērtību. Piemēram, <b> jean; joe; jim%%;! Jimo;! Jima% </ b> tiks mērķētas uz visiem jean, joe, sākt ar jim, bet ne jimo, un ne visu, kas sākas ar jima
     AdvTgtSearchIntHelp=Izmantojiet intervālu, lai izvēlētos int vai float vērtību
     AdvTgtMinVal=Minimālā vērtība
     AdvTgtMaxVal=Maksimālā vērtība
    @@ -166,4 +166,4 @@ InGoingEmailSetup=Ienākošā e-pasta iestatīšana
     OutGoingEmailSetupForEmailing=Izejošā e-pasta iestatīšana (masveida e-pasta sūtīšanai)
     DefaultOutgoingEmailSetup=Noklusējuma izejošā e-pasta iestatīšana
     Information=Informācija
    -ContactsWithThirdpartyFilter=Kontakti avec filtre klients
    +ContactsWithThirdpartyFilter=Kontakti ar trešās puses filtru
    diff --git a/htdocs/langs/lv_LV/main.lang b/htdocs/langs/lv_LV/main.lang
    index 29826e30dad..73a7604e18c 100644
    --- a/htdocs/langs/lv_LV/main.lang
    +++ b/htdocs/langs/lv_LV/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Neizdevās nosūtīt pastu (sūtītājs = %s, saņēmējs
     ErrorFileNotUploaded=Fails netika augšupielādēts. Pārbaudiet vai izmērs nepārsniedz maksimāli pieļaujamo un, ka brīvas vietas ir pieejama uz diska, un nav jau failu ar tādu pašu nosaukumu šajā direktorijā.
     ErrorInternalErrorDetected=Atklāta kļūda
     ErrorWrongHostParameter=Nepareizs servera parametrs
    -ErrorYourCountryIsNotDefined=Jūsu valsts nav definēta. Ejiet uz Sākums-Iestatījumi-Labot un tad mēģiniet vēlreiz aizpildīt formu.
    -ErrorRecordIsUsedByChild=Neizdevās dzēst šo ierakstu. Šis ieraksts tiek izmantots vismaz viena bērna ierakstuam.
    +ErrorYourCountryIsNotDefined=Jūsu valsts nav definēta. Atveriet Home-Setup-Edit un pēc tam ievietojiet veidlapu.
    +ErrorRecordIsUsedByChild=Neizdevās izdzēst šo ierakstu. Šo ierakstu izmanto vismaz viens bērna ieraksts.
     ErrorWrongValue=Nepareizs vērtība
     ErrorWrongValueForParameterX=Nepareiza vērtība parametram %s
     ErrorNoRequestInError=Nav pieprasījums kļūdā
    -ErrorServiceUnavailableTryLater=Pakalpojums nav pieejams uz šo brīdi. Mēģiniet vēlreiz vēlāk.
    +ErrorServiceUnavailableTryLater=Pakalpojums pašlaik nav pieejams. Pamēģini vēlreiz vēlāk.
     ErrorDuplicateField=Dubulta vērtība unikālā laukā
    -ErrorSomeErrorWereFoundRollbackIsDone=Dažas kļūdas tika atrastas. Mēs atgriezām atpakaļ visu izejas pozīcijā.
    -ErrorConfigParameterNotDefined=Parametrs <b>%s</b> nav definētas Dolibarr konfigurācijas failā <b>conf.php.</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Tika atklātas dažas kļūdas. Izmaiņas ir atgrieztas atpakaļ.
    +ErrorConfigParameterNotDefined=Parametrs <b> %s </b> Dolibarr konfigurācijas failā <b> conf.php </b> nav definēts.
     ErrorCantLoadUserFromDolibarrDatabase=Neizdevās atrast lietotāju <b>%s</b> Dolibarr datu bāzē.
     ErrorNoVATRateDefinedForSellerCountry=Kļūda, PVN likme nav definēta sekojošai valstij '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Kļūda, neizdevās saglabāt failu.
     ErrorCannotAddThisParentWarehouse=Jūs mēģināt pievienot vecāku noliktavu, kas jau ir pašreizējā bērns
    -MaxNbOfRecordPerPage=Maksimālais ierakstu skaits lapā
    +MaxNbOfRecordPerPage=Maksimālais ierakstu skaits vienā lapā
     NotAuthorized=Jums nav tiesību, lai veiktu šo darbību.
     SetDate=Iestatīt datumu
     SelectDate=Izvēlēties datumu
    @@ -78,10 +78,10 @@ FileRenamed=Fails tika veiksmīgi pārdēvēts
     FileGenerated=Fails tika veiksmīgi ģenerēts
     FileSaved=Fails tika veiksmīgi saglabāts
     FileUploaded=Fails veiksmīgi augšupielādēts
    -FileTransferComplete=Fails(i) tika augšupielādēts veiksmīgi
    +FileTransferComplete=Fails(i) tika veiksmīgi augšupielādēti
     FilesDeleted=Fails (-i) ir veiksmīgi dzēsti
     FileWasNotUploaded=Fails ir izvēlēts pielikumam,  bet vēl nav augšupielādēti. Noklikšķiniet uz &quot;Pievienot failu&quot;, lai to pievienotu.
    -NbOfEntries=Ierakstu sk
    +NbOfEntries=Ierakstu skaits
     GoToWikiHelpPage=Lasīt tiešsaistes palīdzību (nepieciešams interneta piekļuve)
     GoToHelpPage=Lasīt palīdzību
     RecordSaved=Ieraksts saglabāts
    @@ -94,8 +94,8 @@ Undefined=Nav definēts
     PasswordForgotten=Aizmirsāt paroli?
     NoAccount=Nav konts?
     SeeAbove=Skatīt iepriekš
    -HomeArea=Mājas sadaļa
    -LastConnexion=Latest connection
    +HomeArea=Mājās
    +LastConnexion=Jaunākais savienojums
     PreviousConnexion=Iepriekšējā pieslēgšanās
     PreviousValue=Iepriekšējā vērtība
     ConnectedOnMultiCompany=Pieslēgts videi
    @@ -103,7 +103,7 @@ ConnectedSince=Pievienots kopš
     AuthenticationMode=Autentifikācija režīms
     RequestedUrl=Pieprasīts URL
     DatabaseTypeManager=Datu bāzes menedžeris
    -RequestLastAccessInError=Latest database access request error
    +RequestLastAccessInError=Jaunākās datubāzes piekļuves pieprasījuma kļūdas
     ReturnCodeLastAccessInError=Return code for latest database access request error
     InformationLastAccessInError=Information for latest database access request error
     DolibarrHasDetectedError=Dolibarr ir atklājis tehnisku kļūdu
    @@ -142,6 +142,7 @@ Closed=Slēgts
     Closed2=Slēgts
     NotClosed=Nav slēgts
     Enabled=Atvienots
    +Enable=Ieslēgt
     Deprecated=Novecojusi
     Disable=Atslēgt
     Disabled=Atslēgts
    @@ -153,7 +154,7 @@ Update=Atjaunot
     Close=Aizvērt
     CloseBox=Noņemiet logrīku no sava informācijas paneļa
     Confirm=Apstiprināt
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Vai tiešām vēlaties nosūtīt šīs kartes saturu pa pastu uz <b> %s </b>?
     Delete=Izdzēst
     Remove=Noņemt
     Resiliate=Pārtraukt
    @@ -161,7 +162,7 @@ Cancel=Atcelt
     Modify=Modificēt
     Edit=Rediģēt
     Validate=Pārbaudīt
    -ValidateAndApprove=Validate and Approve
    +ValidateAndApprove=Pārbaudiet un apstipriniet
     ToValidate=Jāpārbauda
     NotValidated=Nav apstiprināts
     Save=Saglabāt
    @@ -181,8 +182,8 @@ Search=Meklēšana
     SearchOf=Meklēšana
     Valid=Derīgs
     Approve=Apstiprināt
    -Disapprove=Disapprove
    -ReOpen=Atvērt par jaunu
    +Disapprove=Noraidīt
    +ReOpen=Atvērt pa jaunu
     Upload=Augšupielādēt failu
     ToLink=Saite
     Select=Atlasīt
    @@ -220,7 +221,7 @@ Info=Pieteikties
     Family=Ģimene
     Description=Apraksts
     Designation=Apraksts
    -Model=Doc template
    +Model=Doc veidne
     DefaultModel=Default doc template
     Action=Notikums
     About=Par
    @@ -252,7 +253,7 @@ DateCreation=Izveidošanas datums
     DateCreationShort=Izv. datums
     DateModification=Labošanas datums
     DateModificationShort=Modif. datums
    -DateLastModification=Latest modification date
    +DateLastModification=Jaunākais labošanas datums
     DateValidation=Apstiprināšanas datums
     DateClosing=Beigu datums
     DateDue=Izpildes datums
    @@ -327,7 +328,7 @@ Copy=Kopēt
     Paste=Ielīmēt
     Default=Noklusējums
     DefaultValue=Noklusējuma vērtība
    -DefaultValues=Noklusējuma vērtības
    +DefaultValues=Noklusētās vērtības / filtri / šķirošana
     Price=Cena
     PriceCurrency=Cena (valūta)
     UnitPrice=Vienības cena
    @@ -347,7 +348,7 @@ AmountTTCShort=Summa (ar PVN)
     AmountHT=Daudzums (neto pēc nodokļiem)
     AmountTTC=Summa (ar PVN)
     AmountVAT=Nodokļa summa
    -MulticurrencyAlreadyPaid=Jau samaksāta, oriģināla valūta
    +MulticurrencyAlreadyPaid=Jau samaksāta sākotnējā valūta
     MulticurrencyRemainderToPay=Atlikums, kas jāsamaksā oriģinālā valūtā
     MulticurrencyPaymentAmount=Maksājuma summa, oriģinālajā valūtā
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -386,7 +387,7 @@ INCVATONLY=ar PVN
     INCT=Inc visiem nodokļiem
     VAT=PVN
     VATIN=IGST
    -VATs=Sales taxes
    +VATs=Pārdošanas nodokļi
     VATINs=IGST nodokļi
     LT1=Pārdošanas nodoklis 2
     LT1Type=Pārdošanas nodoklis 2 tips
    @@ -403,7 +404,7 @@ DefaultTaxRate=Noklusētā nodokļa likme
     Average=Vidējais
     Sum=Summa
     Delta=Delta
    -RemainToPay=Paliek maksāt
    +RemainToPay=Vēl jāsamaksā
     Module=Module/Application
     Modules=Moduļi/lietojumprogrammas
     Option=Iespējas
    @@ -429,7 +430,7 @@ ActionRunningNotStarted=Jāsāk
     ActionRunningShort=Procesā
     ActionDoneShort=Pabeigts
     ActionUncomplete=Nepabeigts
    -LatestLinkedEvents=Jaunākie %s saistīti notikumi
    +LatestLinkedEvents=Jaunākie %s saistītie notikumi
     CompanyFoundation=Uzņēmums / organizācija
     Accountant=Grāmatvedis
     ContactsForCompany=Šīs trešās personas kontakti
    @@ -437,14 +438,14 @@ ContactsAddressesForCompany=Kontakti / adreses par šīs trešās personas
     AddressesForCompany=Šīs trešās puses adreses
     ActionsOnCompany=Pasākumi par šīs trešās personas
     ActionsOnMember=Pasākumi par šo locekli
    -ActionsOnProduct=Notikumi par šo produktu
    +ActionsOnProduct=Notikumi ar šo produktu
     NActionsLate=%s vēlu
     ToDo=Jāizdara
     Completed=Pabeigts
     Running=Procesā
     RequestAlreadyDone=Request already recorded
     Filter=Filtrs
    -FilterOnInto=Search criteria '<strong>%s</strong>' into fields %s
    +FilterOnInto=Meklēšanas kritēriji '<strong> %s</strong>' laukos %s
     RemoveFilter=Noņemt filtru
     ChartGenerated=Grafiks izveidots
     ChartNotGenerated=Diagramma nav izveidota
    @@ -453,14 +454,14 @@ Generate=Izveidot
     Duration=Ilgums
     TotalDuration=Kopējais pasākuma ilgums
     Summary=Kopsavilkums
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Datu bāzes statistika
    +DolibarrWorkBoard=Gaidoši vienumi
     NoOpenedElementToProcess=Nav atvērts elements apstrādāt
     Available=Pieejams
     NotYetAvailable=Nav vēl pieejams
     NotAvailable=Nav pieejams
    -Categories=Tags/categories
    -Category=Tag/category
    +Categories=Atslēgvārdi / sadaļas
    +Category=Atslēgvārds / sadaļa
     By=Līdz
     From=No
     to=līdz
    @@ -468,23 +469,23 @@ and=un
     or=vai
     Other=Cits
     Others=Citi
    -OtherInformations=Citas informācija
    +OtherInformations=Cita informācija
     Quantity=Daudzums
     Qty=Daudz
     ChangedBy=Labojis
    -ApprovedBy=Approved by
    +ApprovedBy=Apstiprināja
     ApprovedBy2=Approved by (second approval)
     Approved=Apstiprināts
     Refused=Atteikts
     ReCalculate=Pārrēķināt
     ResultKo=Neveiksme
    -Reporting=Pārskata
    +Reporting=Pārskati
     Reportings=Pārskati
     Draft=Melnraksts
     Drafts=Melnraksti
     StatusInterInvoiced=
     Validated=Apstiprināts
    -Opened=Atvērts
    +Opened=Atvērt
     New=Jauns
     Discount=Atlaide
     Unknown=Nezināms
    @@ -506,8 +507,8 @@ None=Nav
     NoneF=Nav
     NoneOrSeveral=Neviens vai vairāki
     Late=Vēlu
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    -NoItemLate=No late item
    +LateDesc=Kavējums, lai noteiktu, vai ieraksts ir novēlots vai nav, ir atkarīgs no jūsu iestatīšanas. Uzdod administratoram mainīt kavēšanos no izvēlnes Home - Setup - Alerts.
    +NoItemLate=Nav vēlu priekšmetu
     Photo=Attēls
     Photos=Attēli
     AddPhoto=Pievienot attēlu
    @@ -530,18 +531,6 @@ September=Septembris
     October=Oktobris
     November=Novembris
     December=Decembris
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=Mai
    -JuneMin=Jūn
    -JulyMin=Jūl
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Okt
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=Janvāris
     Month02=Februāris
     Month03=Marts
    @@ -567,14 +556,14 @@ MonthShort10=Okt
     MonthShort11=Nov
     MonthShort12=Dec
     MonthVeryShort01=J
    -MonthVeryShort02=P
    -MonthVeryShort03=P
    +MonthVeryShort02=Feb
    +MonthVeryShort03=Mar
     MonthVeryShort04=A
    -MonthVeryShort05=P
    -MonthVeryShort06=J
    -MonthVeryShort07=J
    -MonthVeryShort08=A
    -MonthVeryShort09=Sv
    +MonthVeryShort05=Mai
    +MonthVeryShort06=Jūn
    +MonthVeryShort07=Jūl
    +MonthVeryShort08=Aug
    +MonthVeryShort09=Sep
     MonthVeryShort10=O
     MonthVeryShort11=N
     MonthVeryShort12=D
    @@ -611,7 +600,7 @@ DateFromTo=No %s līdz %s
     DateFrom=No %s
     DateUntil=Līdz %s
     Check=Pārbaudīt
    -Uncheck=Uncheck
    +Uncheck=Noņemt atzīmi
     Internal=Iekšējs
     External=Ārējs
     Internals=Iekšējs
    @@ -640,12 +629,14 @@ Response=Atbilde
     Priority=Prioritāte
     SendByMail=Sūtīt pa e-pastu
     MailSentBy=Nosūtīts e-pasts ar
    -TextUsedInTheMessageBody=E-pasts ķermeņa
    +TextUsedInTheMessageBody=E-pasta ķermenis
     SendAcknowledgementByMail=Sūtīt apstiprinājuma e-pastu
     SendMail=Sūtīt e-pastu
     EMail=E-pasts
     NoEMail=Nav e-pasta
     Email=E-pasts
    +AlreadyRead=Jau izlasīts
    +NotRead=Nav lasīts
     NoMobilePhone=Nav mob. tel.
     Owner=Īpašnieks
     FollowingConstantsWillBeSubstituted=Šādas konstantes tiks aizstāts ar atbilstošo vērtību.
    @@ -682,7 +673,7 @@ Color=Krāsa
     Documents=Piesaistītie faili
     Documents2=Dokumenti
     UploadDisabled=Augšupielāde bloķēta
    -MenuAccountancy=Accounting
    +MenuAccountancy=Grāmatvedība
     MenuECM=Dokumenti
     MenuAWStats=AWStats
     MenuMembers=Dalībnieki
    @@ -716,15 +707,15 @@ Merge=Apvienot
     DocumentModelStandardPDF=Standarta PDF veidne
     PrintContentArea=Rādīt lapu drukāt galveno satura jomā
     MenuManager=Izvēlnes iestatīšana
    -WarningYouAreInMaintenanceMode=Uzmanību, jūs esat uzturēšanas režīmā, t.i. tikai pieteikšanās <b>%s</b> ir atļauts lietot programmu.
    +WarningYouAreInMaintenanceMode=Brīdinājums! Jūs esat uzturēšanas režīmā, tāpēc šajā laikā ir atļauts izmantot tikai pieteikumu <b> %s </ b>.
     CoreErrorTitle=Sistēmas kļūda
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Kredītkarte
     ValidatePayment=Apstiprināt maksājumu
     CreditOrDebitCard=Kredīta vai debetkarte
     FieldsWithAreMandatory=Lauki ar <b>%s</b> ir obligāti aizpildāmi
    -FieldsWithIsForPublic=Lauki ar <b>%s</b> parāda sabiedrības locekļu sarakstu. Ja jūs nevēlaties to, tad izņemiet ķeksi pie &quot;sabiedrības&quot; lodziņa.
    -AccordingToGeoIPDatabase=(Saskaņā ar GeoIP)
    +FieldsWithIsForPublic=Lauki ar <b> %s </ b> ir redzami dalībnieku publiskajā sarakstā. Ja jūs to nevēlaties, noņemiet atzīmi no lauka "public".
    +AccordingToGeoIPDatabase=(saskaņā ar GeoIP konvertēšanu)
     Line=Līnija
     NotSupported=Netiek atbalstīts
     RequiredField=Obligāti aizpildāms lauks
    @@ -732,6 +723,8 @@ Result=Rezultāts
     ToTest=Pārbaude
     ValidateBefore=Kartiņa ir jāapstiprina, pirms lietojat šo funkciju
     Visibility=Redzamība
    +Totalizable=Kopējais skaits
    +TotalizableDesc=Šis lauks ir totalizable sarakstā
     Private=Privāts
     Hidden=Slēpts
     Resources=Resursi
    @@ -750,6 +743,7 @@ LinkTo=Saite uz
     LinkToProposal=Saite uz priekšlikumu
     LinkToOrder=Link to order
     LinkToInvoice=Saite uz rēķinu
    +LinkToTemplateInvoice=Saite uz veidnes rēķinu
     LinkToSupplierOrder=Saite uz piegādātāja pasūtījumu
     LinkToSupplierProposal=Saite uz piegādātāja piedāvājumu
     LinkToSupplierInvoice=Saite uz piegādātāja rēķinu
    @@ -758,6 +752,7 @@ LinkToIntervention=Saikne ar intervenci
     CreateDraft=Izveidot melnrakstu
     SetToDraft=Atpakaļ uz melnrakstu
     ClickToEdit=Klikšķiniet, lai rediģētu
    +ClickToRefresh=Noklikšķiniet, lai atsvaidzinātu
     EditWithEditor=Rediģēt ar CKEditor
     EditWithTextEditor=Rediģēt ar teksta redaktoru
     EditHTMLSource=Rediģēt HTML avotu
    @@ -772,14 +767,14 @@ ByDay=Pēc dienas
     BySalesRepresentative=Pēc tirdzniecības pārstāvja
     LinkedToSpecificUsers=Saistītas ar noteiktu lietotāja kontaktu
     NoResults=Nav rezultātu
    -AdminTools=Administratora rīki
    +AdminTools=Admin Tools
     SystemTools=Sistēmas rīki
     ModulesSystemTools=Moduļi instrumenti
     Test=Pārbaude
     Element=Elements
     NoPhotoYet=Nav bildes
     Dashboard=Informācijas panelis
    -MyDashboard=Informācijas panelis
    +MyDashboard=Mans informācijas panelis
     Deductible=Pašrisks
     from=no
     toward=uz
    @@ -802,34 +797,34 @@ PrintFile=Drukāt failu %s
     ShowTransaction=Rādīt ierakstu bankas kontā
     ShowIntervention=Rādīt iejaukšanās
     ShowContract=Rādīt līgumu
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    -Deny=Deny
    -Denied=Denied
    +GoIntoSetupToChangeLogo=Iet uz mājas lapu - Uzstādīšana - Uzņēmums mainīs logotipu vai dodieties uz mājām - Iestatīšana - Displejs, lai paslēptu.
    +Deny=Aizliegt
    +Denied=Aizliegts
     ListOf=%s saraksts
    -ListOfTemplates=List of templates
    +ListOfTemplates=Saraksts ar veidnēm
     Gender=Dzimums
     Genderman=Vīrietis
     Genderwoman=Sieviete
     ViewList=List view
     Mandatory=Mandatory
    -Hello=Hello
    +Hello=Labdien
     GoodBye=Uz redzēšanos
    -Sincerely=Sincerely
    +Sincerely=Ar cieņu
     DeleteLine=Delete line
     ConfirmDeleteLine=Vai Jūs tiešām vēlaties izdzēst šo līniju?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Pārāk daudzi ieraksti atlasīti masveida rīcībai. Darbība ir ierobežota ar %s ierakstu sarakstu.
     NoRecordSelected=Nav atlasīts neviens ieraksts
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Lielapjoma dzēšanas apstiprinājums
    -ConfirmMassDeletionQuestion=Vai tiešām vēlaties dzēst izvēlēto ierakstu %s?
    +ConfirmMassDeletion=Masveida dzēšanas apstiprinājums
    +ConfirmMassDeletionQuestion=Vai tiešām vēlaties dzēst atlasīto ierakstu %s?
     RelatedObjects=Saistītie objekti
     ClassifyBilled=Klasificēt apmaksāts
     ClassifyUnbilled=Klasificēt neapmaksāts
     Progress=Progress
     FrontOffice=birojs
    -BackOffice=Back office
    +BackOffice=Birojs
     View=Izskats
     Export=Eksportēt
     Exports=Eksports
    @@ -841,7 +836,7 @@ Calendar=Kalendārs
     GroupBy=Kārtot pēc...
     ViewFlatList=Skatīt plakanu sarakstu
     RemoveString=Noņemt virkni '%s'
    -SomeTranslationAreUncomplete=Dažas valodas var būt daļēji tulkotas vai tām var būt kļūdas. Ja konstatējat dažus, varat iestatīt valodas failus, reģistrējoties <a href="https://transifex.com/projects/p/dolibarr/" target="_blank"> https://transifex.com/projects/p/ dolibarr / </a>.
    +SomeTranslationAreUncomplete=Dažas piedāvātās valodas var būt tikai daļēji tulkotas vai var saturēt kļūdas. Lūdzu, palīdziet labot savu valodu, reģistrējoties <a href="https://transifex.com/projects/p/dolibarr/" target="_blank"> https://transifex.com/projects/p/dolibarr/ < / a>, lai pievienotu savus uzlabojumus.
     DirectDownloadLink=Tiešā lejupielādes saite (publiska / ārēja)
     DirectDownloadInternalLink=Tiešā lejupielādes saite (ir jāreģistrē un tai ir nepieciešamas atļaujas).
     Download=Lejupielādēt
    @@ -863,14 +858,23 @@ AutomaticallyCalculated=Automātiski aprēķināts
     TitleSetToDraft=Atgriezties uz melnrakstu
     ConfirmSetToDraft=Vai tiešām vēlaties atgriezties pie melnrakstu statusa?
     ImportId=Importēt ID
    -Events=Pasākumi
    -EMailTemplates=E-pastu paraugi
    -FileNotShared=Fails nav koplietots ar exernal sabiedrību
    +Events=Notikumi
    +EMailTemplates=E-pasta veidnes
    +FileNotShared=Fails nav kopīgots ārējai publikai
     Project=Projekts
     Projects=Projekti
    +LeadOrProject=Svins | Projekts
    +LeadsOrProjects=Sasaistes | Projekti
    +Lead=Svins
    +Leads=Sasaistes
    +ListOpenLeads=Sarakstu atklātie vadītāji
    +ListOpenProjects=Atvērto projektu saraksts
    +NewLeadOrProject=Jauns svins vai projekts
     Rights=Atļaujas
     LineNb=Rinda Nr.
     IncotermLabel=Inkoterms
    +TabLetteringCustomer=Klientu apzīmējumi
    +TabLetteringSupplier=Piegādātāja burts
     # Week day
     Monday=Pirmdiena
     Tuesday=Otrdiena
    @@ -905,8 +909,8 @@ SetRef=Set ref
     Select2ResultFoundUseArrows=Daži rezultāti ir atrasti. Izmantojiet bultiņas, lai izvēlētos.
     Select2NotFound=Rezultāti nav atrasti
     Select2Enter=Ieiet
    -Select2MoreCharacter=vai vairāk rakstzīmes
    -Select2MoreCharacters=vai vairāk simbolus
    +Select2MoreCharacter=vai vairāk zīmes
    +Select2MoreCharacters=vai vairāk simbolu
     Select2MoreCharactersMore=<strong> Meklēšanas sintakse: </ strong> </ kbd> <strong> * </ strong> </ kbd> <kbd> Jebkurš raksturs </ kbd> (a * b) <br> <kbd> <strong> ^ </ strong> </ kbd> <kbd> Sāciet ar </ kbd> (^ ab) <br> <kbd> <strong> $ </ strong> </ kbd> <kbd> Beigt ar </ kbd> (ab $) <br>
     Select2LoadingMoreResults=Ielādē vairāk rezultātus...
     Select2SearchInProgress=Meklēšana procesā...
    @@ -927,24 +931,25 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Līgumi
     SearchIntoCustomerShipments=Klientu sūtījumi
     SearchIntoExpenseReports=Izdevumu atskaites
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Atstājiet
     CommentLink=Komentāri
     NbComments=Komentāru skaits
     CommentPage=Komentāru telpa
     CommentAdded=Komentārs pievienots
     CommentDeleted=Komentārs dzēsts
    -Everybody=Visi
    -PayedBy=Samaksājis
    -PayedTo=Samaksāts
    +Everybody=Ikviens
    +PayedBy=Apmaksājis
    +PayedTo=Apmaksāts
     Monthly=Katru mēnesi
     Quarterly=Ceturksnis
    -Annual=Gada
    +Annual=Ikgadējais
     Local=Vietējais
     Remote=Attālinātais
    -LocalAndRemote=Vietējais un attālais
    +LocalAndRemote=Vietējais un attālinātais
     KeyboardShortcut=Tastatūras saīsne
     AssignedTo=Piešķirts
     Deletedraft=Dzēst melnrakstu
    -ConfirmMassDraftDeletion=Melnraksta dzēšanas apstiprinājuma projekts
    +ConfirmMassDraftDeletion=Projekta masveida dzēšanas apstiprinājums
     FileSharedViaALink=Fails koplietots, izmantojot saiti
    -
    +SelectAThirdPartyFirst=Vispirms izvēlieties trešo pusi ...
    +YouAreCurrentlyInSandboxMode=Pašlaik esat %s "smilšu kastes" režīmā
    diff --git a/htdocs/langs/lv_LV/members.lang b/htdocs/langs/lv_LV/members.lang
    index 34105afcc03..af0be78dc28 100644
    --- a/htdocs/langs/lv_LV/members.lang
    +++ b/htdocs/langs/lv_LV/members.lang
    @@ -50,12 +50,12 @@ MemberStatusPaidShort=Aktuāls
     MemberStatusResiliated=Apturēts dalībnieks
     MemberStatusResiliatedShort=Izbeigta
     MembersStatusToValid=Projektu dalībnieki
    -MembersStatusResiliated=Terminated members
    +MembersStatusResiliated=Izbeigti dalībnieki
     NewCotisation=Jauns ieguldījums
     PaymentSubscription=Jauns ieguldījums maksājums
     SubscriptionEndDate=Abonēšanas beigu datums
    -MembersTypeSetup=Dalībnieki tipa iestatīšana
    -MemberTypeModified=Dalībnieka tips ir modificēts
    +MembersTypeSetup=Dalībnieku veida iestatīšana
    +MemberTypeModified=Dalībnieka veids ir labots
     DeleteAMemberType=Dzēst biedra veidu
     ConfirmDeleteMemberType=Vai tiešām vēlaties dzēst šo dalībnieka veidu?
     MemberTypeDeleted=Dalībnieka veids dzēsts
    @@ -66,21 +66,21 @@ Subscription=Abonēšana
     Subscriptions=Abonementi
     SubscriptionLate=Vēlu
     SubscriptionNotReceived=Abonēšana nekad nav saņēmusi
    -ListOfSubscriptions=Saraksts abonementu
    +ListOfSubscriptions=Abonementu saraksts
     SendCardByMail=Nosūtīt kartiņu pa e-pastu
     AddMember=Izveidot biedru
     NoTypeDefinedGoToSetup=Neviens dalībnieka veids nav definēts. Iet uz izvēlnes "Dalībnieku veidi"
     NewMemberType=Jauns dalībnieka veids
     WelcomeEMail=Sveiciena e-pasts
    -SubscriptionRequired=Abonēšanas nepieciešams
    +SubscriptionRequired=Abonēšana nepieciešama
     DeleteType=Dzēst
     VoteAllowed=Balsot atļauts
     Physical=Fizisks
     Moral=Morāls
     MorPhy=Morālā/Fiziskā
     Reenable=Reenable
    -ResiliateMember=Terminate a member
    -ConfirmResiliateMember=Are you sure you want to terminate this member?
    +ResiliateMember=Izslēgt dalībnieku
    +ConfirmResiliateMember=Vai tiešām vēlaties pārtraukt šo dalībnieku?
     DeleteMember=Dzēst dalībnieku
     ConfirmDeleteMember=Are you sure you want to delete this member (Deleting a member will delete all his subscriptions)?
     DeleteSubscription=Dzēst abonementu
    @@ -88,7 +88,7 @@ ConfirmDeleteSubscription=Are you sure you want to delete this subscription?
     Filehtpasswd=Htpasswd fails
     ValidateMember=Apstiprināt dalībnieku
     ConfirmValidateMember=Are you sure you want to validate this member?
    -FollowingLinksArePublic=Šādas saites ir atvērtas lapas, kas nav aizsargāti ar kādu Dolibarr atļauju. Tie nav formated lapas, sniedz kā piemērs, lai parādītu, kā uzskaitīt biedrus datu bāzi.
    +FollowingLinksArePublic=Šīs saites ir atvērtas lapas, kuras nav aizsargātas ar Dolibarr atļaujām. Tās nav formatētas lapas, kas tiek piedāvātas kā piemērs, lai parādītu, kā sarakstu dalībnieku datu bāzi.
     PublicMemberList=Sabiedrības Biedru saraksts
     BlankSubscriptionForm=Publiska pašapkalpošanās veidlapa
     BlankSubscriptionFormDesc=Dolibarr var nodrošināt jums publisku URL / tīmekļa vietni, lai ļautu ārējiem apmeklētājiem lūgt parakstīties uz fondu. Ja ir iespējots tiešsaistes maksājumu modulis, maksājuma veidlapa var tikt automātiski nodrošināta.
    @@ -108,10 +108,10 @@ AddSubscription=Izveidot abonementu
     ShowSubscription=Rādīt abonementu
     # Label of email templates
     SendingAnEMailToMember=Sūtīt informācijas e-pastu dalībniekam
    -SendingEmailOnAutoSubscription=E-pasta sūtīšana uz automātisko reģistrāciju
    -SendingEmailOnMemberValidation=E-pasta sūtīšana uz jauno dalībnieku apstiprināšanu
    +SendingEmailOnAutoSubscription=E-pasta sūtīšana automātiskajai reģistrācijai
    +SendingEmailOnMemberValidation=E-pasta sūtīšana jauno dalībnieku apstiprināšana
     SendingEmailOnNewSubscription=E-pasta sūtīšana uz jaunu abonementu
    -SendingReminderForExpiredSubscription=Atgādinājuma nosūtīšana uz abonementu beigu datumu
    +SendingReminderForExpiredSubscription=Atgādinājuma nosūtīšana par abonementu beigu datumu
     SendingEmailOnCancelation=E-pasta sūtīšana par atcelšanu
     # Topic of email templates
     YourMembershipRequestWasReceived=Jūsu dalība tika saņemta.
    @@ -124,7 +124,7 @@ CardContent=Saturu jūsu dalības kartes
     ThisIsContentOfYourMembershipRequestWasReceived=Mēs vēlamies jūs informēt, ka jūsu dalības pieprasījums ir saņemts. <br> <br>
     ThisIsContentOfYourMembershipWasValidated=Mēs vēlamies jūs informēt, ka jūsu dalība tika apstiprināta ar šādu informāciju: <br> <br>
     ThisIsContentOfYourSubscriptionWasRecorded=Mēs vēlamies jūs informēt, ka jūsu jaunais abonements tika reģistrēts. <br> <br>
    -ThisIsContentOfSubscriptionReminderEmail=Mēs vēlamies jūs paziņot, ka jūsu abonēšanas termiņš beigsies. Mēs ceram, ka jūs varat to atjaunot. <br> <br>
    +ThisIsContentOfSubscriptionReminderEmail=Mēs vēlamies jūs informēt, ka jūsu abonēšanas termiņš beigsies vai jau ir beidzies (__MEMBER_LAST_SUBSCRIPTION_DATE_END__). Mēs ceram, ka jūs varat to atjaunot. <br> <br>
     ThisIsContentOfYourCard=Tas ir atgādinājums par informāciju, kuru mēs saņemam par jums. Jūtieties brīvi sazināties ar mums, ja kaut kas izskatās nepareizi. <br> <br>
     DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Priekšmets e-pastu saņēma, ja auto-uzrakstu viesis
     DescADHERENT_AUTOREGISTER_NOTIF_MAIL=E-pasts saņemta gadījumā auto-uzrakstu viesis
    @@ -142,8 +142,8 @@ DescADHERENT_CARD_TEXT=Teksts drukāts uz biedru kartes (izlīdzinājums pa krei
     DescADHERENT_CARD_TEXT_RIGHT=Teksts drukāts uz biedru kartes (izlīdzinājums pa labi)
     DescADHERENT_CARD_FOOTER_TEXT=Teksts uzdrukāts uz biedru kartes apakšā
     ShowTypeCard=Rādīt veidu "%s"
    -HTPasswordExport=htpassword faila paaudze
    -NoThirdPartyAssociatedToMember=Neviena trešā puse saistīta ar šo locekli
    +HTPasswordExport=htpassword faila izveide
    +NoThirdPartyAssociatedToMember=Neviena trešā puse nav saistīta ar šo dalībnieku
     MembersAndSubscriptions= Dalībnieki un Abonementi
     MoreActions=Papildu darbības ar ierakstu
     MoreActionsOnSubscription=Papildina rīcību, kas ierosināta pēc noklusējuma, ierakstot abonementu
    @@ -157,7 +157,7 @@ DocForOneMemberCards=Izveidot vizītkartes kādā konkrētā dalībnieka
     DocForLabels=Izveidot adrešu lapas
     SubscriptionPayment=Abonēšanas maksa
     LastSubscriptionDate=Jaunākais piereģistrēšanās datums
    -LastSubscriptionAmount=Latest subscription amount
    +LastSubscriptionAmount=Jaunākās abonēšanas summa
     MembersStatisticsByCountries=Dalībnieku statistika pa valstīm
     MembersStatisticsByState=Dalībnieku statistika pēc štatiem/provincēm
     MembersStatisticsByTown=Dalībnieku statistika pa pilsētām
    @@ -167,7 +167,7 @@ NoValidatedMemberYet=Nav apstiprinātas locekļi atrasti
     MembersByCountryDesc=Šis ekrāns parādīs statistiku par biedriem pa valstīm. Grafiskais tomēr ir atkarīga Google tiešsaistes grafiku pakalpojums un ir pieejama tikai tad, ja interneta pieslēgums darbojas.
     MembersByStateDesc=Šis ekrāns parādīs statistiku par dalībniekiem, valsts / provinces / Canton.
     MembersByTownDesc=Šis ekrāns parādīs statistiku par biedriem ar pilsētu.
    -MembersStatisticsDesc=Izvēlieties statistiku vēlaties izlasīt ...
    +MembersStatisticsDesc=Izvēlieties statistiku kuru vēlaties izlasīt ...
     MenuMembersStats=Statistika
     LastMemberDate=Pēdējā biedra datums
     LatestSubscriptionDate=Jaunākais piereģistrēšanās datums
    @@ -188,11 +188,10 @@ MembersByNature=This screen show you statistics on members by nature.
     MembersByRegion=This screen show you statistics on members by region.
     VATToUseForSubscriptions=PVN likme izmantot abonementu
     NoVatOnSubscription=Nav TVA par abonēšanu
    -MEMBER_PAYONLINE_SENDEMAIL=Email to use for email warning when Dolibarr receive a confirmation of a validated payment for a subscription (Example: paymentdone@example.com)
     ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Product used for subscription line into invoice: %s
     NameOrCompany=Vārds vai uzņēmums
     SubscriptionRecorded=Abonements ir ierakstīts
     NoEmailSentToMember=Biedram nav nosūtīts neviens e-pasts
     EmailSentToMember=E-pasts tiek nosūtīts dalībniekam %s
     SendReminderForExpiredSubscriptionTitle=Nosūtiet atgādinājumu pa e-pastu, kad esat beidzis abonementu
    -SendReminderForExpiredSubscription=Nosūtiet atgādinājumu pa e-pastu dalībniekiem, kad abonements beigsies (parametrs ir dienu skaits pirms abonēšanas beigām, lai nosūtītu atgādinājumu).
    +SendReminderForExpiredSubscription=Sūtīt atgādinājumu pa e-pastu dalībniekiem, kad abonements beigsies (parametrs ir dienu skaits pirms abonementa beigām, lai nosūtītu atgādinājumu. Tas var būt dienu saraksts, kas atdalīti ar semikolu, piemēram, '10; 5; 0; -5 ")
    diff --git a/htdocs/langs/lv_LV/modulebuilder.lang b/htdocs/langs/lv_LV/modulebuilder.lang
    index a70b03d2c69..e871645b281 100644
    --- a/htdocs/langs/lv_LV/modulebuilder.lang
    +++ b/htdocs/langs/lv_LV/modulebuilder.lang
    @@ -1,19 +1,19 @@
     # Dolibarr language file - Source file is en_US - loan
    -ModuleBuilderDesc=Šie rīki ir jāizmanto pieredzējušiem lietotājiem vai izstrādātājiem. Tas dod jums programmu, lai izveidotu vai rediģētu savu moduli (dokumentācija alternatīvu <a href="%s" target="_blank"> manuālajai izstrādei ir pieejama šeit </a>).
    +ModuleBuilderDesc=Šo rīku drīkst izmantot tikai pieredzējuši lietotāji vai izstrādātāji. Tas dod jums utilītus, lai izveidotu vai rediģētu savu moduli. <br> Dokumentācija alternatīvai <a href="%s" target="_blank"> manuālajai izstrādei ir pieejama šeit </a>.
     EnterNameOfModuleDesc=Enter name of the module/application to create with no spaces. Use uppercase to separate words (For example: MyModule, EcommerceForShop, SyncWithMySystem...)
     EnterNameOfObjectDesc=Enter name of the object to create with no spaces. Use uppercase to separate words (For example: MyObject, Student, Teacher...). The CRUD class file, but also API file, pages to list/add/edit/delete object and SQL files will be generated.
     ModuleBuilderDesc2=Path where modules are generated/edited (first alternative directory defined into %s): <strong>%s</strong>
    -ModuleBuilderDesc3=Generated/editable modules found: <strong>%s</strong>
    -ModuleBuilderDesc4=A module is detected as 'editable' when the file <strong>%s</strong> exists in root of module directory
    +ModuleBuilderDesc3=Atrastie / rediģējamie moduļi: <strong> %s </strong>
    +ModuleBuilderDesc4=Modulis identificēts kā "rediģējams", kad moduļa saknes direktorijā  atrodas fails <strong> %s </strong>
     NewModule=Jauns modulis
     NewObject=Jauns objekts
     ModuleKey=Moduļa atslēga
     ObjectKey=Objekta atslēga
     ModuleInitialized=Modulis inicializēts
     FilesForObjectInitialized=Files for new object '%s' initialized
    -FilesForObjectUpdated=Files for object '%s' updated (.sql files and .class.php file)
    +FilesForObjectUpdated=Atjaunots objektu '%s' faili (.sql faili un .class.php fails)
     ModuleBuilderDescdescription=Enter here all general information that describe your module.
    -ModuleBuilderDescspecifications=Šeit varat ievadīt garu tekstu, lai aprakstītu moduļa specifikācijas, kas vēl nav strukturētas citās cilnēs. Tātad jums ir viegli sasniegt visus noteikumus, kas jāattīsta. Arī šis teksta saturs tiks iekļauts ģenerētajā dokumentācijā (skatiet pēdējo rindkopu). Jūs varat izmantot Markdown formātu, bet tiek ieteikts izmantot Asciidoc formātu (salīdzinājums starp .md un .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown).
    +ModuleBuilderDescspecifications=Jūs varat ievadīt šeit detalizētu aprakstu par jūsu moduļa specifikācijām, kas vēl nav strukturētas citās cilnēs. Tātad jums ir viegli sasniegt visus noteikumus, kas jāattīsta. Arī šis teksta saturs tiks iekļauts ģenerētajā dokumentācijā (skatiet pēdējo cilni). Jūs varat izmantot Markdown formātu, taču ieteicams izmantot Asciidoc formātu (salīdzinājums starp .md un .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown).
     ModuleBuilderDescobjects=Šeit definējiet objektus, kurus vēlaties pārvaldīt, izmantojot moduli. Tiks izveidots CRUD DAO klase, SQL faili, objektu ierakstu saraksta lapa, lai izveidotu / rediģētu / skatītu ierakstu un API.
     ModuleBuilderDescmenus=Šī cilne ir paredzēta, lai definētu izvēlnes ierakstus, ko nodrošina jūsu modulis.
     ModuleBuilderDescpermissions=Šī cilne ir paredzēta, lai definētu jaunās atļaujas, kuras vēlaties nodrošināt ar savu moduli.
    @@ -21,12 +21,12 @@ ModuleBuilderDesctriggers=Tas ir moduļa sniegto aktivitāšu skatījums. Lai ie
     ModuleBuilderDeschooks=Šī cilne ir paredzēta āķiem.
     ModuleBuilderDescwidgets=Šī cilne ir paredzēta, lai pārvaldītu/veidotu logrīkus.
     ModuleBuilderDescbuildpackage=Jūs varat ģenerēt šeit moduļa "gatavs izplatīšanai" pakotnes failu (standartizētu .zip failu) un dokumentācijas failu "gatavs izplatīšanai". Vienkārši noklikšķiniet uz pogas, lai izveidotu paketi vai dokumentācijas failu.
    -EnterNameOfModuleToDeleteDesc=Varat izdzēst savu moduli. BRĪDINĀJUMS: visi moduļa faili, kā arī strukturētie dati un dokumentācija noteikti tiks zaudēti!
    -EnterNameOfObjectToDeleteDesc=Jūs varat izdzēst objektu. BRĪDINĀJUMS: visi faili, kas saistīti ar objektu, tiks noteikti zaudēti!
    +EnterNameOfModuleToDeleteDesc=Varat izdzēst savu moduli. BRĪDINĀJUMS: visi moduļa un strukturēto datu un dokumentācijas faili tiks dzēsti!
    +EnterNameOfObjectToDeleteDesc=Jūs varat izdzēst objektu. BRĪDINĀJUMS: visi ar objektu saistītie faili tiks dzēsti!
     DangerZone=Bīstamā zona
     BuildPackage=Veidojiet paketi / dokumentāciju
     BuildDocumentation=Izveidot dokumentāciju
    -ModuleIsNotActive=Šis modulis vēl nav aktivizēts. Iet uz %s, lai to veiktu, vai arī noklikšķiniet šeit:
    +ModuleIsNotActive=Šis modulis vēl nav aktivizēts. Lai to veiktu, spiediet uz %s vai noklikšķiniet šeit:
     ModuleIsLive=Šis modulis ir aktivizēts. Jebkuras izmaiņas tajā var pārtraukt pašreizējo aktīvo funkciju.
     DescriptionLong=Apraksts
     EditorName=Redaktora vārds
    @@ -47,7 +47,7 @@ RegenerateClassAndSql=Dzēst un atjaunot klases un sql failus
     RegenerateMissingFiles=Izveidot trūkstošos failus
     SpecificationFile=Fails ar uzņēmējdarbības noteikumiem
     LanguageFile=Valoda
    -ConfirmDeleteProperty=Vai tiešām vēlaties dzēst īpašumu <strong> %s </ strong>? Tas mainīs kodu PHP klasē, bet no tabulas definīcijas no kolonnas noņems arī objektu.
    +ConfirmDeleteProperty=Vai tiešām vēlaties dzēst īpašumu <strong> %s </strong>? Tas mainīs kodu PHP klasē, un no tabulas definīcijas kolonnas noņems arī objektu.
     NotNull=Nav NULL
     NotNullDesc=1 = Iestatiet datubāzi NOT NULL. -1 = Atļaut nulles vērtības un spēka vērtību NULL, ja tukšs ('' vai 0).
     SearchAll=Lietots, lai "meklētu visu"
    @@ -66,7 +66,7 @@ PageForLib=PHP bibliotēku fails
     SqlFileExtraFields=Sql fails papildu atribūtiem
     SqlFileKey=Sql failu atslēgas
     AnObjectAlreadyExistWithThisNameAndDiffCase=Priekšmets jau pastāv ar šo vārdu un citu lietu
    -UseAsciiDocFormat=Jūs varat izmantot Markdown formātu, bet tiek ieteikts izmantot Asciidoc formātu (salīdzinājums starp .md un .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown).
    +UseAsciiDocFormat=Jūs varat izmantot Markdown formātu, taču ieteicams izmantot Asciidoc formātu (salīdzinājums starp .md un .asciidoc: http://asciidoctor.org/docs/user-manual/#compared-to-markdown).
     IsAMeasure=Vai pasākums
     DirScanned=Direktorija skenēta
     NoTrigger=Nav sprūda
    @@ -74,7 +74,7 @@ NoWidget=Nav logrīku
     GoToApiExplorer=Iet uz API pētnieku
     ListOfMenusEntries=Izvēlnes ierakstu saraksts
     ListOfPermissionsDefined=Noteikto atļauju saraksts
    -SeeExamples=See examples here
    +SeeExamples=Skatiet piemērus šeit
     EnabledDesc=Nosacījums, lai šis lauks būtu aktīvs (piemēri: 1 vai $ conf-> globāla-> MYMODULE_MYOPTION)
     VisibleDesc=Vai lauks ir redzams? (Piemēri: 0 = Nekad nav redzams, 1 = Redzams sarakstā un izveido / atjaunina / skata veidlapas, 2 = Redzams tikai sarakstā, 3 = Redzams tikai veidojot / atjauninot / skata formu. saraksta noklusējums, bet to var atlasīt skatīšanai)
     IsAMeasureDesc=Vai lauka vērtību var uzkrāties, lai kopsumma tiktu iekļauta sarakstā? (Piemēri: 1 vai 0)
    @@ -83,19 +83,20 @@ SpecDefDesc=Ievadiet šeit visu dokumentāciju, ko vēlaties iesniegt ar savu mo
     LanguageDefDesc=Ievadiet šos failus, visu valodas faila atslēgu un tulkojumu.
     MenusDefDesc=Šeit definējiet izvēlnes, ko nodrošina jūsu modulis (pēc definīcijas tie ir redzami izvēlnes redaktorā %s)
     PermissionsDefDesc=Šeit definējiet jaunās atļaujas, kuras nodrošina jūsu modulis (pēc definīcijas tie ir redzami noklusējuma atļaujas iestatījumam %s)
    -HooksDefDesc=Modu deskriptorā <b> module_parts ['āķi'] </ b> definējiet āķu kontekstu, kuru vēlaties pārvaldīt (konteksta sarakstu var atrast, veicot meklēšanu ar <b> initHooks (</ b> b> "galvenajā kodā). <br> Rediģējiet āķa failu, lai pievienotu savu āķa funkciju kodu (kontaktu funkcijas var atrast, veicot meklēšanu ar kodu <b> executeHooks </ b> ').
    +HooksDefDesc=Modu deskriptorā <b> module_parts ['āķi'] </b>definējiet āķu kontekstu, kuru vēlaties pārvaldīt (konteksta sarakstu var atrast, veicot meklēšanu ar <b> initHooks (</b>'galvenajā kodā). <br> Rediģējiet āķa failu, lai pievienotu savu āķa funkciju kodu (kontaktu funkcijas var atrast, veicot meklēšanu ar kodu <b> executeHooks </b> ').
     TriggerDefDesc=Sprūda failā definējiet kodu, kuru vēlaties izpildīt katram notikušajam notikumam.
     SeeIDsInUse=Skatiet jūsu instalācijā izmantotos ID
     SeeReservedIDsRangeHere=Skatiet rezervēto ID diapazonu
     ToolkitForDevelopers=Dolibarr izstrādātāju rīks
    -TryToUseTheModuleBuilder=Ja jums ir zināšanas SQL un PHP, varat mēģināt izmantot vietējo moduļu veidotāja vedni. Vienkārši aktivizējiet moduli un izmantojiet vedni, noklikšķinot uz <span class = "fa fa-bug"> </ span> augšējā labajā izvēlnē. Brīdinājums: šī ir izstrādātāja funkcija, jo slikta lietošana var pārtraukt jūsu lietojumprogrammas darbību.
    +TryToUseTheModuleBuilder=Ja jums ir zināšanas par SQL un PHP, jūs varat izmantot native moduļa veidotāja vedni. <br> Ieslēdziet moduli <strong> %s </strong> un izmantojiet vedni, noklikšķinot uz <span class="fa fa-bug"></span> augšējā labajā izvēlnē. <br> Brīdinājums: šī ir uzlabotas izstrādātāja funkcija, <b> ne </b> eksperimentējiet savā ražotnē!
     SeeTopRightMenu=Augšējā labajā izvēlnē skatiet <span class="fa fa-bug"></span>
     AddLanguageFile=Pievienot valodas failu
     YouCanUseTranslationKey=Šeit varat izmantot atslēgu, kas ir tulkošanas atslēga, kas tiek atrasta valodas failā (sk. Cilni "Valodas").
     DropTableIfEmpty=(Dzēst tabulu, ja tukša)
    -TableDoesNotExists=Tabula %s nepastāv
    +TableDoesNotExists=Tabula %s neeksistē
     TableDropped=Tabula %s dzēsta
     InitStructureFromExistingTable=Veidojiet esošās tabulas struktūras masīva virkni
    -UseAboutPage=Disallow the about page
    -UseDocFolder=Disallow the documentation folder
    -UseSpecificReadme=Use a specific ReadMe
    +UseAboutPage=Atspējot par lapu
    +UseDocFolder=Atspējot dokumentācijas mapi
    +UseSpecificReadme=Izmantot īpašu IzlasiMani
    +RealPathOfModule=Reālais moduļa ceļš
    diff --git a/htdocs/langs/lv_LV/multicurrency.lang b/htdocs/langs/lv_LV/multicurrency.lang
    index 563a180c762..b205cfcb83b 100644
    --- a/htdocs/langs/lv_LV/multicurrency.lang
    +++ b/htdocs/langs/lv_LV/multicurrency.lang
    @@ -4,17 +4,17 @@ ErrorAddRateFail=Pievienotās likmes kļūda
     ErrorAddCurrencyFail=Pievienotajā valūtā radusies kļūda
     ErrorDeleteCurrencyFail=Kļūda dzēšot
     multicurrency_syncronize_error=Sinhronizācijas kļūda: %s
    -MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=Use date of document to find currency rate, instead of using latest known rate
    -multicurrency_useOriginTx=When an object is created from another, keep the original rate of source object (otherwise use the latest known rate)
    +MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE=Izmantojiet dokumenta datumu, lai atrastu valūtas kursu, nevis izmantojiet jaunāko zināmo kursu
    +multicurrency_useOriginTx=Ja objekts tiek izveidots no cita, saglabājiet sākotnējo likmi no avota objekta (citādi izmantojiet jaunāko zināmo likmi)
     CurrencyLayerAccount=CurrencyLayer API
    -CurrencyLayerAccount_help_to_synchronize=You sould create an account on their website to use this functionnality<br>Get your <b>API key</b><br />If you use a free account you can't change the <b>currency source</b> (USD by default)<br />But if your main currency isn't USD you can use the <b>alternate currency source</b> to force you main currency<br /><br />You are limited at 1000 synchronizations per month
    +CurrencyLayerAccount_help_to_synchronize=Lai izmantotu šo funkciju, jums ir jāizveido konts savā tīmekļa vietnē. <br> Saņemiet <b> API atslēgu </ b>. <br> Ja izmantojat bezmaksas kontu, nevarat mainīt <b> valūtas avotu </ b> b> (pēc noklusējuma USD). <br> Ja jūsu galvenā valūta nav ASV dolārs, varat izmantot <b> alternatīvo valūtas avotu </ b>, lai piespiestu jūsu galveno valūtu. <br> <br> Jums ir ierobežota līdz 1000 sinhronizācijām mēnesī.
     multicurrency_appId=API atslēga
     multicurrency_appCurrencySource=Valūtas avots
     multicurrency_alternateCurrencySource=Alternatīvs valūtas avots
     CurrenciesUsed=Izmantotās valūtas
    -CurrenciesUsed_help_to_add=Add the differents currencies and rates you need to use on you <b>proposals</b>, <b>orders</b>, etc.
    +CurrenciesUsed_help_to_add=Pievienojiet dažādas valūtas un likmes, kas jāizmanto <b> priekšlikumiem</b>, <b> pasūtījumiem</b> utt.
     rate=likme
    -MulticurrencyReceived=Received, original currency
    -MulticurrencyRemainderToTake=Atlikušā summa, oriģinālā valūtā
    +MulticurrencyReceived=Saņemta oriģinālā valūta
    +MulticurrencyRemainderToTake=Atlikušā summa, oriģināla valūta
     MulticurrencyPaymentAmount=Maksājuma summa, oriģinālajā valūtā
    -AmountToOthercurrency=Amount To (in currency of receiving account)
    +AmountToOthercurrency=Summa līdz (konta saņemšanas valūtā)
    diff --git a/htdocs/langs/lv_LV/other.lang b/htdocs/langs/lv_LV/other.lang
    index c03dc12a691..936a94c5805 100644
    --- a/htdocs/langs/lv_LV/other.lang
    +++ b/htdocs/langs/lv_LV/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Drošības kods
     NumberingShort=N°
     Tools=Darbarīki
     TMenuTools=Rīki
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=Visi instrumenti, kas nav iekļauti citos izvēlnes ierakstos, tiek sagrupēti šeit. <br> Visiem rīkiem var piekļūt, izmantojot kreiso izvēlni.
     Birthday=Dzimšanas diena
     BirthdayDate=Dzimšanas diena
     DateToBirth=Dzimšanas datums
    @@ -11,7 +11,7 @@ BirthdayAlertOn=dzimšanas dienas brīdinājums aktīvs
     BirthdayAlertOff=dzimšanas dienas brīdinājums neaktīvs
     TransKey=Translation of the key TransKey
     MonthOfInvoice=Rēķina datuma mēnesis (no 1-12)
    -TextMonthOfInvoice=Month (text) of invoice date
    +TextMonthOfInvoice=Rēķina datuma mēnesis (teksts)
     PreviousMonthOfInvoice=Rēķina datuma iepriekšējais mēnesis (no 1-12)
     TextPreviousMonthOfInvoice=Previous month (text) of invoice date
     NextMonthOfInvoice=Pēc mēneša (no 1-12) rēķina datums
    @@ -23,17 +23,14 @@ MessageForm=Ziņa par tiešsaistes maksājuma veidlapu
     MessageOK=Ziņu kopā ar apstiprinātu maksājuma atgriešanās lapā
     MessageKO=Ziņa par atcelto maksājumu atgriešanās lapā
     ContentOfDirectoryIsNotEmpty=Šīs direktorijas saturs nav tukšs.
    -DeleteAlsoContentRecursively=Pārbaudiet, lai izdzēstu visu rekursīvu saturu
    +DeleteAlsoContentRecursively=Pārbaudiet, lai rekursīvi izdzēstu visu saturu
     
     YearOfInvoice=Rēķina datums
     PreviousYearOfInvoice=Iepriekšējā rēķina datuma gads
     NextYearOfInvoice=Pēc gada rēķina datuma
    -DateNextInvoiceBeforeGen=Nākamā rēķina datums (pirms paaudzes)
    +DateNextInvoiceBeforeGen=Nākamā rēķina datums (pirms izveidošanas)
     DateNextInvoiceAfterGen=Nākamā rēķina datums (pēc paaudzes)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervences apstiprināts
    -Notify_FICHINTER_SENTBYMAIL=Intervences nosūtīt pa pastu
     Notify_ORDER_VALIDATE=Klienta pasūtījums apstiprināts
     Notify_ORDER_SENTBYMAIL=Klienta rīkojumam, kas nosūtīts pa pastu
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Piegādātājs rīkojumam, kas nosūtīts pa pastu
    @@ -41,25 +38,27 @@ Notify_ORDER_SUPPLIER_VALIDATE=Piegādātāja pasūtījums reģistrēts
     Notify_ORDER_SUPPLIER_APPROVE=Piegādātājs, lai apstiprinātu
     Notify_ORDER_SUPPLIER_REFUSE=Piegādātājs lai atteicās
     Notify_PROPAL_VALIDATE=Klientu priekšlikums apstiprināts
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Klienta piedāvājums ir noslēgts parakstīts
    +Notify_PROPAL_CLOSE_REFUSED=Klienta iesniegtais piedāvājums ir noraidīts
     Notify_PROPAL_SENTBYMAIL=Commercial priekšlikums nosūtīts pa pastu
     Notify_WITHDRAW_TRANSMIT=Pārraides atsaukšana
     Notify_WITHDRAW_CREDIT=Kredīta izņemšana
     Notify_WITHDRAW_EMIT=Veikt atcelšanu
     Notify_COMPANY_CREATE=Trešās puse izveidota
    -Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
    +Notify_COMPANY_SENTBYMAIL=Pasta sūtīšana no trešās puses kartiņas
     Notify_BILL_VALIDATE=Klienta rēķins apstiprināts
     Notify_BILL_UNVALIDATE=Klienta rēķins neapstiprināts
    -Notify_BILL_PAYED=Klienta rēķins samaksāts
    +Notify_BILL_PAYED=Klienta rēķins ir samaksāts
     Notify_BILL_CANCEL=Klienta rēķins atcelts
     Notify_BILL_SENTBYMAIL=Klienta rēķins nosūtīts pa pastu
     Notify_BILL_SUPPLIER_VALIDATE=Piegādātāja rēķins apstiprināts
    -Notify_BILL_SUPPLIER_PAYED=Piegādātāja rēķins jāapmaksā
    +Notify_BILL_SUPPLIER_PAYED=Piegādātāja rēķins ir samaksāts
     Notify_BILL_SUPPLIER_SENTBYMAIL=Piegādātāja rēķins nosūtīts pa pastu
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Līgums ir apstiprināts
     Notify_FICHEINTER_VALIDATE=Intervences apstiprināts
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervences nosūtīt pa pastu
     Notify_SHIPPING_VALIDATE=Piegāde apstiprināta
     Notify_SHIPPING_SENTBYMAIL=Piegāde nosūtīta pa pastu
     Notify_MEMBER_VALIDATE=Dalībnieks apstiprināts
    @@ -71,29 +70,33 @@ Notify_PROJECT_CREATE=Projekts izveidots
     Notify_TASK_CREATE=Uzdevums izveidots
     Notify_TASK_MODIFY=Uzdevums labots
     Notify_TASK_DELETE=Uzdevums dzēsts
    +Notify_EXPENSE_REPORT_VALIDATE=Izdevumu pārskats apstiprināts (nepieciešams apstiprinājums)
    +Notify_EXPENSE_REPORT_APPROVE=Izdevumu pārskats ir apstiprināts
    +Notify_HOLIDAY_VALIDATE=Atteikt pieprasījumu apstiprināt (nepieciešams apstiprinājums)
    +Notify_HOLIDAY_APPROVE=Atvaļinājuma pieprasījums apstiprināts
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Skaits pievienotos failus / dokumentus
     TotalSizeOfAttachedFiles=Kopējais apjoms pievienotos failus / dokumentus
     MaxSize=Maksimālais izmērs
     AttachANewFile=Pievienot jaunu failu / dokumentu
     LinkedObject=Saistītais objekts
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    -PredefinedMailTest=__(Sveiki)__\nŠis ir testa pasts, kas nosūtīts uz __EMAIL__.\nAbas līnijas ir atdalītas ar vagona atgriešanu.\n\n__USER_SIGNATURE__
    -PredefinedMailTestHtml=__(Sveiki)__\nŠis ir <b> testa </ ​​b> pasts (vārda pārbaude ir treknrakstā). <br> Divas rindas atdala ar rāmja atgriešanu. <br> <br> __USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Sveiki)__\n\nŠeit jūs atradīsiet komerciālu priekšlikumu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Sveiki)__\n\nŠeit jūs atradīsiet cenu pieprasījumu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Sveiki)__\n\nJūs atradīsit šeit pasūtījumu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Sveiki)__\n\nJūs atradīsiet šeit mūsu pasūtījumu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Sveiki)__\n\nŠeit jūs atradīsiet rēķinu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Sveiki)__\n\nŠeit jūs atradīsit piegādi __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Sveiki)__\n\nŠeit jūs atradīsiet intervenci __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +NbOfActiveNotifications=Paziņojumu skaits (saņēmēju e-pasta ziņojumu skaits)
    +PredefinedMailTest=__(Labdien)__\nŠis ir testa pasts, kas nosūtīts uz __EMAIL__.\nAbas līnijas ir atdalītas.\n\n__USER_SIGNATURE__
    +PredefinedMailTestHtml=__(Labdien)__\nŠis ir <b> testa </b>pasts (vārds testa ir jābūt treknrakstā). <br> Divas rindas atdala ar rāmi. <br> <br> __USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Labdien)__\n\nLūdzu, pievienojiet rēķinu __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Labdien)__\n\nMēs vēlamies jūs brīdināt, ka rēķins __REF__, šķiet, nav samaksāts. Rēķins ir pievienots kā atgādinājums.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Labdien)__\n\nLūdzu, pievienojiet komerciālu priekšlikumu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Labdien,)__\n\nLūdzu, pievienojiet cenu pieprasījumu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Labdien)__\n\nLūdzu, pievienojiet pasūtījumu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Labdien)__\n\nLūdzu, pievienojiet mūsu pasūtījumu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Labdien)__\n\nLūdzu, pievienojiet rēķinu __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Labdien)__\n\nLūdzu, pievienojiet piegādi __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Labdien)__\n\nLūdzu, pievienojiet intervenci __REF__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Sveiki)__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentUser=__(Sveiki)__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    -DemoDesc=Dolibarr is a compact ERP/CRM supporting several business modules. A demo showcasing all modules makes no sense as this scenario never occurs (several hundred available). So, several demo profiles are available.
    -ChooseYourDemoProfil=Choose the demo profile that best suits your needs...
    +PredefinedMailContentUser=__(Labdien,)__\n\n\n__ (Ar cieņu) __\n\n__USER_SIGNATURE__
    +PredefinedMailContentLink=Jūs varat noklikšķināt uz zemāk esošās saites, lai veiktu maksājumu, ja tas vēl nav izdarīts.\n\n%s\n\n
    +DemoDesc=Dolibarr ir kompakts ERP / CRM, kas atbalsta vairākus biznesa moduļus. Demonstrācija, kas demonstrē visus moduļus, nav jēga, jo šis scenārijs nekad nenotiek (pieejami vairāki simti). Tātad, ir pieejami vairāki demo profili.
    +ChooseYourDemoProfil=Izvēlies demo profilu, kas vislabāk atbilst jūsu vajadzībām ...
     ChooseYourDemoProfilMore=... vai izveidojiet savu profilu <br> (manuālā moduļa izvēle)
     DemoFundation=Pārvaldīt locekļus nodibinājumam
     DemoFundation2=Pārvaldīt dalībniekus un bankas kontu nodibinājumam
    @@ -164,15 +167,15 @@ SizeUnitmm=mm
     SizeUnitinch=colla
     SizeUnitfoot=pēda
     SizeUnitpoint=punkts
    -BugTracker=Bug tracker
    +BugTracker=Kļūdu meklētājs
     SendNewPasswordDesc=Šī veidlapa ļauj pieprasīt jaunu paroli. Tas tiks nosūtīts uz jūsu e-pasta adresi. <br> Mainīšana stāsies spēkā pēc tam, kad noklikšķināsit uz e-pasta ziņojuma apstiprinājuma saites. <br> Pārbaudiet savu iesūtni.
     BackToLoginPage=Atpakaļ uz autorizācijas lapu
     AuthenticationDoesNotAllowSendNewPassword=Autentifikācijas režīms ir <b>%s.</b> <br> Šajā režīmā, Dolibarr nevar zināt, ne nomainīt savu paroli. <br> Sazinieties ar sistēmas administratoru, ja jūs vēlaties mainīt savu paroli.
    -EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use this option.
    +EnableGDLibraryDesc=Instalējiet vai iespējojiet GD bibliotēku savā PHP instalācijā, lai izmantotu šo opciju.
     ProfIdShortDesc=<b>Prof ID %s</b> ir informācija, atkarībā no trešās puses valstīm. <br> Piemēram, attiecībā uz valstu <b>%s,</b> tas ir kods <b>%s.</b>
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Pārskatu subjektu skaita statistika (rēķina numurs vai pasūtījums ...)
     NumberOfProposals=Priekšlikumu skaits
     NumberOfCustomerOrders=Klientu pasūtījumu skaits
     NumberOfCustomerInvoices=Klientu rēķinu skaits
    @@ -185,11 +188,12 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Vienību skaits pēc piegādātāju priekšlikumiem
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=Jums ir piešķirta jauna iejaukšanās %s.
     EMailTextInterventionValidated=Iejaukšanās %s ir apstiprināta.
     EMailTextInvoiceValidated=Rēķins %s ir apstiprināts.
    +EMailTextInvoicePayed=Rēķins %s ir samaksāts.
     EMailTextProposalValidated=Priekšlikums %s ir apstiprināts.
    -EMailTextProposalClosedSigned=Priekšlikums %s ir slēgts parakstīts.
    +EMailTextProposalClosedSigned=Priekšlikums %s ir slēgts, parakstīts.
     EMailTextOrderValidated=Pasūtījums %s ir apstiprināts.
     EMailTextOrderApproved=Pasūtījums %s ir apstiprināts.
     EMailTextOrderValidatedBy=The order %s has been recorded by %s.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Pasūtījumu %s ir apstiprinājis %s.
     EMailTextOrderRefused=Pasūtījums %s ir noraidīts.
     EMailTextOrderRefusedBy=Pasūtījums %s ir noraidījis %s.
     EMailTextExpeditionValidated=Kuģniecības %s ir apstiprināta.
    +EMailTextExpenseReportValidated=Izdevumu pārskats %s ir ticis apstiprināts.
    +EMailTextExpenseReportApproved=Izdevumu pārskats %s ir apstiprināts.
    +EMailTextHolidayValidated=Atvaļinājuma pieprasījums %s ir ticis apstiprināts.
    +EMailTextHolidayApproved=Atvaļinājuma pieprasījums %s ir apstiprināts.
     ImportedWithSet=Ievešanas datu kopu
     DolibarrNotification=Automātiska paziņošana
     ResizeDesc=Ievadiet jaunu platumu <b>vai</b> jaunu augstumu. Attiecība būs jātur laikā izmēru maiņas ...
    @@ -204,7 +212,7 @@ NewLength=Jauns platums
     NewHeight=Jauns augstums
     NewSizeAfterCropping=Jauns izmērs pēc apgriešanas
     DefineNewAreaToPick=Definēt jaunu apgabalu uz attēla, lai uzņemt (pa kreisi noklikšķiniet uz attēla, pēc tam velciet, līdz jūs sasniegsiet pretējo stūri)
    -CurrentInformationOnImage=Šis rīks ir izstrādāts, lai palīdzētu jums, lai mainītu vai apgrieztu attēlu. Šī ir informācija par pašreizējo edited attēlu
    +CurrentInformationOnImage=Šis rīks tika izveidots, lai palīdzētu jums mainīt attēla izmērus vai apgriezt tos. Šī ir informācija par pašreizējo rediģēto attēlu
     ImageEditor=Attēlu redaktors
     YouReceiveMailBecauseOfNotification=Jūs saņemat šo ziņojumu, jo jūsu e-pasts ir pievienota saraksta mērķiem ir informēt par konkrētiem notikumiem uz %s programmatūru %s.
     YouReceiveMailBecauseOfNotification2=Šis notikums ir šādi:
    @@ -225,16 +233,20 @@ NewKeyWillBe=Jūsu jaunais galvenais, lai pieteiktos uz programmatūru, būs
     ClickHereToGoTo=Klikšķiniet šeit, lai dotos uz %s
     YouMustClickToChange=Jums ir Taču vispirms noklikšķiniet uz šīs saites, lai apstiprinātu šo paroles maiņa
     ForgetIfNothing=Ja Jums nav lūgt šīs izmaiņas, vienkārši aizmirst šo e-pastu. Jūsu akreditācijas dati tiek glabāti drošībā.
    -IfAmountHigherThan=If amount higher than <strong>%s</strong>
    +IfAmountHigherThan=Ja summa pārsniedz  <strong>%s </strong>
     SourcesRepository=Repository for sources
     Chart=Diagramma
     PassEncoding=Paroles kodēšana
     PermissionsAdd=Pievienotas atļaujas
     PermissionsDelete=Atļaujas noņemtas
    -YourPasswordMustHaveAtLeastXChars=Jūsu parolei ir jābūt vismaz <strong> %s </ strong> simboliem
    +YourPasswordMustHaveAtLeastXChars=Jūsu parolei ir jāsatur vismaz <strong>%s</strong> simbolus
     YourPasswordHasBeenReset=Jūsu parole ir veiksmīgi atiestatīta
     ApplicantIpAddress=Pieteikuma iesniedzēja IP adrese
     SMSSentTo=SMS nosūtīta uz %s
    +MissingIds=Trūkst ID
    +ThirdPartyCreatedByEmailCollector=Trešā puses, kuru izveidojis e-pasta savācējs no e-pasta ID %s
    +ContactCreatedByEmailCollector=Kontakti/adrese, kuru izveidojis e-pasta savācējs no e-pasta ID %s
    +ProjectCreatedByEmailCollector=Projekts, ko izveidojis e-pasta savācējs no e-pasta ID %s
     
     ##### Export #####
     ExportsArea=Eksportēšanas sadaļa
    @@ -249,4 +261,4 @@ WEBSITE_PAGEURL=Lapas URL
     WEBSITE_TITLE=Virsraksts
     WEBSITE_DESCRIPTION=Apraksts
     WEBSITE_KEYWORDS=Atslēgas vārdi
    -LinesToImport=Importa līnijas
    +LinesToImport=Importējamās līnijas
    diff --git a/htdocs/langs/lv_LV/products.lang b/htdocs/langs/lv_LV/products.lang
    index 5e9201c2f68..2c6bce79846 100644
    --- a/htdocs/langs/lv_LV/products.lang
    +++ b/htdocs/langs/lv_LV/products.lang
    @@ -1,8 +1,8 @@
     # Dolibarr language file - Source file is en_US - products
     ProductRef=Produkta ref.
     ProductLabel=Produkta marķējums
    -ProductLabelTranslated=Translated product label
    -ProductDescriptionTranslated=Translated product description
    +ProductLabelTranslated=Tulkots produkta nosaukums
    +ProductDescriptionTranslated=Tulkotā produkta apraksts
     ProductNoteTranslated=Tulkota produkta piezīme
     ProductServiceCard=Produktu / Pakalpojumu kartiņa
     TMenuProducts=Produkti
    @@ -17,7 +17,7 @@ Reference=Atsauce
     NewProduct=Jauns produkts
     NewService=Jauns pakalpojums
     ProductVatMassChange=Masveida PVN maiņa
    -ProductVatMassChangeDesc=This page can be used to modify a VAT rate defined on products or services from a value to another. Warning, this change is done on all database.
    +ProductVatMassChangeDesc=Šo lapu var izmantot, lai mainītu PVN likmi, kas definēta produktiem vai pakalpojumiem, no vienas vērtības uz otru. Brīdinājums, šīs izmaiņas ir globālas / pabeigtas visās datubāzēs.
     MassBarcodeInit=Masveida svītru kodu izveidošana
     MassBarcodeInitDesc=This page can be used to initialize a barcode on objects that does not have barcode defined. Check before that setup of module barcode is complete.
     ProductAccountancyBuyCode=Grāmatvedības kods (iegāde)
    @@ -38,7 +38,7 @@ ServicesNotOnSell=Pakalpojumi, kas nav paredzēti pārdošanai un nav paredzēti
     ServicesOnSellAndOnBuy=Services for sale and for purchase
     LastModifiedProductsAndServices=Jaunākie %s labotie produkti / pakalpojumi
     LastRecordedProducts=Jaunākie ieraksti %s
    -LastRecordedServices=Latest %s recorded services
    +LastRecordedServices=Jaunākie %s reģistrētie pakalpojumi
     CardProduct0=Produkta kartiņa
     CardProduct1=Pakalpojuma karte
     Stock=Krājums
    @@ -97,12 +97,12 @@ NoteNotVisibleOnBill=Piezīme (nav redzama rēķinos, priekšlikumos ...)
     ServiceLimitedDuration=Ja produkts ir pakalpojums ir ierobežots darbības laiks:
     MultiPricesAbility=Several segment of prices per product/service (each customer is in one segment)
     MultiPricesNumPrices=Cenu skaits
    -AssociatedProductsAbility=Activate the feature to manage virtual products
    -AssociatedProducts=Virtuāls produkts
    +AssociatedProductsAbility=Aktivizēt virtuālos produktus (komplektus)
    +AssociatedProducts=Virtuālie produkti
     AssociatedProductsNumber=Produktu skaits kas veido šo virtuālo produktu
     ParentProductsNumber=Number of parent packaging product
     ParentProducts=Mātes produkti
    -IfZeroItIsNotAVirtualProduct=Ja 0, šis produkts ir ne virtuālā produkts
    +IfZeroItIsNotAVirtualProduct=Ja 0, šis produkts nav virtuāls produkts
     IfZeroItIsNotUsedByVirtualProduct=Ja 0, šis produkts netiek izmantots ar jebkuru virtuālo produkta
     KeywordFilter=Atslēgvārda filtru
     CategoryFilter=Sadaļu filtrs
    @@ -129,12 +129,12 @@ VATRateForSupplierProduct=PVN likme (šim piegādātājam / produktam)
     DiscountQtyMin=Noklusējuma apjoma atlaide
     NoPriceDefinedForThisSupplier=Nav cena /gab definēti šim piegādātājam/precei
     NoSupplierPriceDefinedForThisProduct=Nav piegādātāja cena/gab definēti šim produktam
    -PredefinedProductsToSell=Predefined products to sell
    -PredefinedServicesToSell=Predefined services to sell
    -PredefinedProductsAndServicesToSell=Predefined products/services to sell
    -PredefinedProductsToPurchase=Predefined product to purchase
    -PredefinedServicesToPurchase=Predefined services to purchase
    -PredefinedProductsAndServicesToPurchase=Predefined products/services to puchase
    +PredefinedProductsToSell=Iepriekš definēti produkti, kurus pārdot
    +PredefinedServicesToSell=Iepriekš definēti pakalpojumi, kurus pārdot
    +PredefinedProductsAndServicesToSell=Iepriekš definēti produkti/pakalpojumi, kurus pārdot
    +PredefinedProductsToPurchase=Iepriekš noteikts produkts, lai to iegādātos
    +PredefinedServicesToPurchase=Iepriekš noteikti pakalpojumi, lai iegādātos
    +PredefinedProductsAndServicesToPurchase=Iepriekš iegādātie produkti/pakalpojumi
     NotPredefinedProducts=Nav iepriekš definēti produkti / pakalpojumi
     GenerateThumb=Izveidot īkšķi
     ServiceNb=Pakalpojums # %s
    @@ -145,7 +145,7 @@ Finished=Ražota prece
     RowMaterial=Izejviela
     CloneProduct=Klonēt produktu vai pakalpojumu
     ConfirmCloneProduct=Vai jūs tiešām vēlaties klonēt šo produktu vai pakalpojumu <b>%s?</b>
    -CloneContentProduct=Klons visus galvenos informations par produktu / pakalpojumu
    +CloneContentProduct=Clone visu galveno informāciju par produktu / pakalpojumu
     ClonePricesProduct=Klonēt cenas
     CloneCompositionProduct=Clone packaged product/service
     CloneCombinationsProduct=Klonu produktu varianti
    @@ -159,7 +159,7 @@ SuppliersPricesOfProductsOrServices=Supplier prices (of products or services)
     CustomCode=Muita / Prece / HS kods
     CountryOrigin=Izcelsmes valsts
     Nature=Daba
    -ShortLabel=Short label
    +ShortLabel=Īsais nosaukums
     Unit=Vienība
     p=u.
     set=set
    @@ -202,7 +202,7 @@ PriceByQuantity=Different prices by quantity
     DisablePriceByQty=Atspējot cenas pēc daudzuma
     PriceByQuantityRange=Daudzuma diapazons
     MultipriceRules=Cenu segmenta noteikumi
    -UseMultipriceRules=Izmantojiet cenu segmenta noteikumus (definēti produkta moduļa iestatījumos), lai automātiski aprēķinātu visu pārējo segmentu cenas saskaņā ar pirmo segmentu
    +UseMultipriceRules=Izmantojiet cenu segmenta noteikumus (definēti produktu moduļa iestatījumos), lai automātiski aprēķinātu visu pārējo segmentu cenas saskaņā ar pirmo segmentu
     PercentVariationOver=%% variation over %s
     PercentDiscountOver=%% discount over %s
     KeepEmptyForAutoCalculation=Saglabājiet tukšu, lai tas tiktu automātiski aprēķināts pēc svara vai produktu daudzuma
    @@ -233,13 +233,13 @@ BarCodeDataForThirdparty=Svītrkoda informācija trešajām personām %s :
     ResetBarcodeForAllRecords=Norādiet visu ierakstu svītrkodu vērtību (tas arī atjaunos svītrkoda vērtību, kas jau ir definēta ar jaunām vērtībām).
     PriceByCustomer=Dažādas cenas katram klientam
     PriceCatalogue=A single sell price per product/service
    -PricingRule=Cenu veidošanas noteikumi
    -AddCustomerPrice=Add price by customer
    +PricingRule=Noteikumi par pārdošanas cenām
    +AddCustomerPrice=Pievienot cenu katram klientam
     ForceUpdateChildPriceSoc=Set same price on customer subsidiaries
     PriceByCustomerLog=Log of previous customer prices
     MinimumPriceLimit=Minimum price can't be lower then %s
     MinimumRecommendedPrice=Minimālā rekomendējamā cena : %s
    -PriceExpressionEditor=Price expression editor
    +PriceExpressionEditor=Cenas izteiksmes redaktors
     PriceExpressionSelected=Selected price expression
     PriceExpressionEditorHelp1="price = 2 + 2" or "2 + 2" for setting the price. Use ; to separate expressions
     PriceExpressionEditorHelp2=You can access ExtraFields with variables like <b>#extrafield_myextrafieldkey#</b> and global variables with <b>#global_mycode#</b>
    @@ -252,9 +252,9 @@ DefaultPrice=Noklusējuma cena
     ComposedProductIncDecStock=Increase/Decrease stock on parent change
     ComposedProduct=Apakš produkts
     MinSupplierPrice=Minimālā iepirkuma cena
    -MinCustomerPrice=Minimum selling price
    +MinCustomerPrice=Minimālā pārdošanas cena
     DynamicPriceConfiguration=Dynamic price configuration
    -DynamicPriceDesc=On product card, with this module enabled, you should be able to set mathematic functions to calculate Customer or Supplier prices. Such function can use all mathematic operators, some constants and variables. You can set here the variables you want to be able to use and if the variable need an automatic update, the external URL to use to ask Dolibarr to update automaticaly the value.
    +DynamicPriceDesc=Produkta kartē, izmantojot šo moduli, jums ir jāspēj iestatīt matemātiskās funkcijas, lai aprēķinātu Klienta vai Piegādes cenas. Šāda funkcija var izmantot visus matemātiskos operatorus, dažas konstantes un mainīgos lielumus. Jūs varat iestatīt šeit mainīgos, kurus vēlaties izmantot, un ja mainīgajam ir nepieciešams automātisks atjauninājums, ārējais URL, ko izmantot, lai lūgtu Dolibarr automātiski atjaunināt vērtību.
     AddVariable=Pievienot mainīgo
     AddUpdater=Pievienot Atjaunotāju
     GlobalVariables=Global variables
    @@ -278,13 +278,13 @@ DefaultUnitToShow=Vienība
     NbOfQtyInProposals=Daudzums priekšlikumos
     ClinkOnALinkOfColumn=Click on a link of column %s to get a detailed view...
     ProductsOrServicesTranslations=Produktu vai pakalpojumu tulkošana
    -TranslatedLabel=Translated label
    +TranslatedLabel=Tulkota etiķete
     TranslatedDescription=Translated description
    -TranslatedNote=Translated notes
    -ProductWeight=Weight for 1 product
    -ProductVolume=Volume for 1 product
    +TranslatedNote=Tulkotās piezīmes
    +ProductWeight=Svars 1 precei
    +ProductVolume=Apjoms 1 precei
     WeightUnits=Svara vienība
    -VolumeUnits=Volume unit
    +VolumeUnits=Apjoma mērvienība
     SizeUnits=Izmēra vienība
     DeleteProductBuyPrice=Dzēst pirkšanas cenu
     ConfirmDeleteProductBuyPrice=Vai tiešām vēlaties dzēst pirkšanas cenu?
    @@ -293,7 +293,8 @@ ProductSheet=Produkta lapa
     ServiceSheet=Servisa lapa
     PossibleValues=Iespējamās vērtības
     GoOnMenuToCreateVairants=Iet uz izvēlni %s - %s, lai sagatavotu atribūtu variantus (piemēram, krāsas, izmērs, ...)
    -
    +UseProductFournDesc=Izmantojiet piegādātāju produktu aprakstus piegādātāju dokumentos
    +ProductSupplierDescription=Piegādātāja apraksts par produktu
     #Attributes
     VariantAttributes=Variantu atribūti
     ProductAttributes=Variantu atribūti produktiem
    @@ -301,7 +302,7 @@ ProductAttributeName=Variants atribūts %s
     ProductAttribute=Variants atribūts
     ProductAttributeDeleteDialog=Vai tiešām vēlaties dzēst šo atribūtu? Visas vērtības tiks dzēstas
     ProductAttributeValueDeleteDialog=Vai tiešām vēlaties izdzēst vērtību "%s" ar atsauci "%s" šim atribūtam?
    -ProductCombinationDeleteDialog=Vai tiešām vēlaties izdzēst produkta variantu "<strong> %s </ strong>"?
    +ProductCombinationDeleteDialog=Vai tiešām vēlaties izdzēst produkta variantu "<strong> %s </strong>"?
     ProductCombinationAlreadyUsed=Dzēšot variantu, radās kļūda. Lūdzu, pārbaudiet, vai tas netiek izmantots nevienā objektā
     ProductCombinations=Varianti
     PropagateVariant=Pavairot variantus
    @@ -315,7 +316,7 @@ SelectCombination=Izvēlieties kombināciju
     ProductCombinationGenerator=Variantu ģenerators
     Features=Iespējas
     PriceImpact=Cenu ietekme
    -WeightImpact=Svars ietekmē
    +WeightImpact=Svara ietekme
     NewProductAttribute=Jauns atribūts
     NewProductAttributeValue=Jauna atribūta vērtība
     ErrorCreatingProductAttributeValue=Veidojot atribūta vērtību, radās kļūda. Tas varētu būt tādēļ, ka ar šo atsauci jau ir esoša vērtība
    @@ -325,10 +326,12 @@ DoNotRemovePreviousCombinations=Nedzēst iepriekšējos variantus
     UsePercentageVariations=Izmantojiet procentuālās svārstības
     PercentageVariation=Procentu variācijas
     ErrorDeletingGeneratedProducts=Mēģinot izdzēst esošos produktu variantus, radās kļūda
    -NbOfDifferentValues=Sk dažādu vērtību
    -NbProducts=Produktu sk.
    +NbOfDifferentValues=Dažādu vērtību skaits
    +NbProducts=Produktu skaits
     ParentProduct=Mātes produkts
     HideChildProducts=Paslēpt dažādus produktus
    +ShowChildProducts=Rādīt dažādus produktus
    +NoEditVariants=Atveriet cilni varianti Mātes produktu kartes un rediģējiet variantu cenu ietekmi
     ConfirmCloneProductCombinations=Vai vēlaties kopēt visus produkta variantus uz citu vecāku produktu ar norādīto atsauci?
     CloneDestinationReference=Galamērķa produkta atsauce
     ErrorCopyProductCombinations=Atsiuninot produkta variantus, radās kļūda
    diff --git a/htdocs/langs/lv_LV/projects.lang b/htdocs/langs/lv_LV/projects.lang
    index b81f2d75a38..6125a2800db 100644
    --- a/htdocs/langs/lv_LV/projects.lang
    +++ b/htdocs/langs/lv_LV/projects.lang
    @@ -24,7 +24,7 @@ TasksDesc=Šo viedokli iepazīstina visus projektus un uzdevumus (jūsu lietotā
     AllTaskVisibleButEditIfYouAreAssigned=Visi uzdevumi kvalificētiem projektiem ir redzami, taču jūs varat ievadīt laiku tikai tam uzdevumam, kas piešķirts izvēlētajam lietotājam. Piešķirt uzdevumu, ja uz to ir jāievada laiks.
     OnlyYourTaskAreVisible=Ir redzami tikai jums uzdotie uzdevumi. Piešķiriet uzdevumu sev, ja tas nav redzams, un tam ir jāievada laiks.
     ImportDatasetTasks=Projektu uzdevumi
    -ProjectCategories=Projekta tagi / kategorijas
    +ProjectCategories=Projekta tagi / sadaļas
     NewProject=Jauns projekts
     AddProject=Izveidot projektu
     DeleteAProject=Dzēst projektu
    @@ -33,25 +33,25 @@ ConfirmDeleteAProject=Vai tiešām vēlaties dzēst šo projektu?
     ConfirmDeleteATask=Vai tiešām vēlaties dzēst šo uzdevumu?
     OpenedProjects=Atvērtie projekti
     OpenedTasks=Atvērtie uzdevumi
    -OpportunitiesStatusForOpenedProjects=Atvērto projektu iespējas pēc statusa
    -OpportunitiesStatusForProjects=Iespēju skaits pēc projektu statusa
    +OpportunitiesStatusForOpenedProjects=Sasaistīto projektu skaits pēc statusa
    +OpportunitiesStatusForProjects=Sasniedz projektu skaitu pēc statusa
     ShowProject=Rādīt projektu
     ShowTask=Rādīt uzdevumu
     SetProject=Izvēlēties projektu
     NoProject=Neviens projekts nosaka, vai īpašumā
    -NbOfProjects=Nb projektu
    -NbOfTasks=Uzdevumu sk.
    +NbOfProjects=Projektu skaits
    +NbOfTasks=Uzdevumu skaits
     TimeSpent=Laiks, kas pavadīts
     TimeSpentByYou=Jūsu patērētais laiks
     TimeSpentByUser=Lietotāja patērētais laiks
     TimesSpent=Laiks, kas patērēts
     RefTask=Ref. uzdevums
    -LabelTask=Label uzdevums
    +LabelTask=Uzlīmes uzdevums
     TaskTimeSpent=Pavadītais laiks veicot uzdevumus
     TaskTimeUser=Lietotājs
     TaskTimeNote=Piezīme
     TaskTimeDate=Datums
    -TasksOnOpenedProject=Tasks on open projects
    +TasksOnOpenedProject=Uzdevumi atvērtajiem projektiem
     WorkloadNotDefined=Darba slodze nav definēta
     NewTimeSpent=Laiks, kas patērēts
     MyTimeSpent=Mans pavadīts laiks
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Doties uz uzdevumu sarakstu
     GoToGanttView=Doties uz Ganta skatu
     GanttView=Ganta skats
    -ListProposalsAssociatedProject=Saraksts tirdzniecības priekšlikumiem saistībā ar projektu
    -ListOrdersAssociatedProject=Saraksts ar klienta pasūtījumiem saistīts ar projektu
    -ListInvoicesAssociatedProject=Saraksts ar klienta rēķiniem, kas piesaistīti projektam
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Līgumu sarakstu kas saistīti ar projektu
    +ListProposalsAssociatedProject=Ar projektu saistīto komerciālo priekšlikumu saraksts
    +ListOrdersAssociatedProject=Projekta klientu pasūtījumu saraksts
    +ListInvoicesAssociatedProject=Saraksts ar klienta rēķiniem, kas saistīti ar projektu
    +ListPredefinedInvoicesAssociatedProject=Saraksts ar klienta veidnes rēķiniem, kas saistīti ar projektu
    +ListSupplierOrdersAssociatedProject=Piegādes pasūtījumu saraksts, kas saistīti ar projektu
    +ListSupplierInvoicesAssociatedProject=Saraksts ar piegādes rēķiniem, kas saistīti ar projektu
    +ListContractAssociatedProject=Ar projektu saistīto līgumu saraksts
     ListShippingAssociatedProject=Sūtījumu saraksts, kas saistīts ar projektu
    -ListFichinterAssociatedProject=Saraksts iejaukšanās saistīts ar projektu
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=Dažādu ar projektu saistīto maksājumu saraksts
    -ListActionsAssociatedProject=Saraksts ar notikumiem, kas saistīti ar projektu
    +ListFichinterAssociatedProject=Ar projektu saistīto pasākumu saraksts
    +ListExpenseReportsAssociatedProject=Ar projektu saistīto izdevumu pārskatu saraksts
    +ListDonationsAssociatedProject=Ar projektu saistīto ziedojumu saraksts
    +ListVariousPaymentsAssociatedProject=Dažādi ar projektu saistītie maksājumi
    +ListSalariesAssociatedProject=Projekta algu maksājumu saraksts
    +ListActionsAssociatedProject=Ar projektu saistīto notikumu saraksts
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=Uzdevumā patērētā laika saraksts
     ActivityOnProjectToday=Activity on project today
    @@ -103,7 +104,7 @@ ChildOfProjectTask=Bērna projekta / uzdevuma
     ChildOfTask=Apakš uzdevums
     TaskHasChild=Uzdevumam ir bērns
     NotOwnerOfProject=Ne īpašnieks šo privātam projektam
    -AffectedTo=Piešķirtas
    +AffectedTo=Piešķirts
     CantRemoveProject=Šo projektu nevar noņemt, jo tam ir atsauce ar kādu citu objektu (rēķinu, rīkojumus vai cits). Skatīt atsauču sadaļa.
     ValidateProject=Apstiprināt Projet
     ConfirmValidateProject=Vai jūs tiešām vēlaties apstiprināt šo projektu?
    @@ -117,7 +118,7 @@ TaskContact=Uzdevumu kontakti
     ActionsOnProject=Pasākumi par projektu
     YouAreNotContactOfProject=Jūs neesat kontakpersona šim privātam projektam
     UserIsNotContactOfProject=Lietotājs nav šī privātā projekta kontaktpersona
    -DeleteATimeSpent=Dzēst pavadīts laiks
    +DeleteATimeSpent=Dzēst patērēto laiku
     ConfirmDeleteATimeSpent=Are you sure you want to delete this time spent?
     DoNotShowMyTasksOnly=See also tasks not assigned to me
     ShowMyTasksOnly=Skatīt tikai uzdevumus, kas piešķirti man
    @@ -125,7 +126,7 @@ TaskRessourceLinks=Kontaktpersonu uzdevums
     ProjectsDedicatedToThisThirdParty=Projekti, kas veltīta šai trešajai personai
     NoTasks=Neviens uzdevumi šajā projektā
     LinkedToAnotherCompany=Saistīts ar citām trešajām personām
    -TaskIsNotAssignedToUser=Uzdevums nav piešķirts lietotājam. Izmantojiet pogu "<strong> %s </ strong>", lai tagad uzdevumu piešķirtu.
    +TaskIsNotAssignedToUser=Uzdevums nav piešķirts lietotājam. Izmantojiet pogu "<strong>%s</strong>", lai uzdevumu piešķirtu.
     ErrorTimeSpentIsEmpty=Pavadīts laiks ir tukšs
     ThisWillAlsoRemoveTasks=Šī darbība arī izdzēst visus uzdevumus projekta <b>(%s</b> uzdevumi brīdī) un visu laiku ieguldījumiem pavadīts.
     IfNeedToUseOhterObjectKeepEmpty=Ja daži objekti (rēķinu, pasūtījumu, ...), kas pieder citai trešai personai, ir saistītas ar projektu, lai izveidotu, saglabāt šo tukšo, lai būtu projektam, multi trešajām personām.
    @@ -136,8 +137,8 @@ CloneNotes=Klonēt piezīmes
     CloneProjectFiles=Klons projekts pievienojās failus
     CloneTaskFiles=Klons uzdevums (-i) pievienotie failus (ja uzdevums (-i) klonēt)
     CloneMoveDate=Vai tagad atjaunināt projektu / uzdevumus?
    -ConfirmCloneProject=Are you sure to clone this project?
    -ProjectReportDate=Change task dates according to new project start date
    +ConfirmCloneProject=Vai tiešām vēlaties klonēt šo projektu?
    +ProjectReportDate=Mainīt uzdevumu datumus saskaņā ar jauno projekta sākuma datumu
     ErrorShiftTaskDate=Nav iespējams novirzīt uzdevumu datumu saskaņā ar jaunu projektu uzsākšanas datuma
     ProjectsAndTasksLines=Projekti un uzdevumi
     ProjectCreatedInDolibarr=Projekts %s izveidots
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Projekts %s ir labots
     TaskCreatedInDolibarr=Uzdevums %s izveidots
     TaskModifiedInDolibarr=Uzdevums %s labots
     TaskDeletedInDolibarr=Uzdevums %s dzēsts
    -OpportunityStatus=Iespēju statuss
    +OpportunityStatus=Svina statuss
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Iespējas varbūtība
    +OpportunityProbability=Svina varbūtība
     OpportunityProbabilityShort=Opp probab
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Svina daudzums
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Vidējā opcija summa
     OpportunityAmountWeigthedShort=Svērtā opcija summa
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Ieguldītājs
     SelectElement=Izvēlieties elementu
     AddElement=Saite uz elementu
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Saistīto objektu kopsavilkuma projekta dokumenta veidne
    +DocumentModelBaleine=Projekta dokumenta veidne uzdevumiem
    +DocumentModelTimeSpent=Projekta pārskata veidne par pavadīto laiku
     PlannedWorkload=Plānotais darba apjoms
     PlannedWorkloadShort=Darba slodze
     ProjectReferers=Saistītās vienības
    @@ -182,49 +184,53 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Uzdevumam nav piešķirts
    +NoUserAssignedToTheProject=Neviens lietotājs nav piešķirts šim projektam
     TimeSpentBy=Pavadītais laiks
     TasksAssignedTo=Uzdevumi, kas piešķirti
     AssignTaskToMe=Assign task to me
     AssignTaskToUser=Piešķirt uzdevumu %s
     SelectTaskToAssign=Atlasiet uzdevumu, lai piešķirtu ...
    -AssignTask=Assign
    -ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +AssignTask=Piešķirt
    +ProjectOverview=Pārskats
    +ManageTasks=Izmantojiet projektus, lai veiktu uzdevumus un / vai ziņotu par pavadīto laiku (laika kontrolsaraksts)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb izveidoto darbu pēc mēneša
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Atklāts projekts / vadība ar iespēju statusu
    +ProjectNbProjectByMonth=Izveidoto projektu skaits pēc mēneša
    +ProjectNbTaskByMonth=Izveidoto darbu skaits pa mēnešiem
    +ProjectOppAmountOfProjectsByMonth=Izložu skaits pēc mēnešiem
    +ProjectWeightedOppAmountOfProjectsByMonth=Vidējā svērto klientu skaits pēc mēneša
    +ProjectOpenedProjectByOppStatus=Atklāts projekts / vadošais statuss
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistika par projektu / vadošajiem uzdevumiem
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=Ja vēlaties pabeigt ref ar kādu informāciju (lai to izmantotu kā meklēšanas filtrus), to ieteicams pievienot rakstzīmi, lai to nošķirtu, tāpēc automātiska numerācija joprojām darbosies nākamajiem projektiem. Piemēram %s-ABC. Varat arī ieteicams pievienot meklēšanas atslēgas etiķetē. Bet labākā prakse var būt pievienot īpašu jomu, ko sauc arī par papildinošiem atribūtiem.
     OpenedProjectsByThirdparties=Atvērt trešo pušu projektus
    -OnlyOpportunitiesShort=Tikai iespējas
    -OpenedOpportunitiesShort=Atvērtās iespējas
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Iespēju summa, kas svērta ar varbūtību
    +OnlyOpportunitiesShort=Tikai ved
    +OpenedOpportunitiesShort=Atveriet vadus
    +NotOpenedOpportunitiesShort=Nav atvērti vadi
    +NotAnOpportunityShort=Nav vads
    +OpportunityTotalAmount=Kopējais potenciālo klientu skaits
    +OpportunityPonderatedAmount=Vērtētā potenciālā pirkuma summa
    +OpportunityPonderatedAmountDesc=Sasaistīto summu svēršana ar varbūtību
     OppStatusPROSP=Prospection
     OppStatusQUAL=Kvalifikācija
     OppStatusPROPO=Priekšlikums
    -OppStatusNEGO=Negociation
    +OppStatusNEGO=Pārrunas
     OppStatusPENDING=Gaida
     OppStatusWON=Uzvarēja
     OppStatusLOST=Zaudēja
     Budget=Budžets
    -AllowToLinkFromOtherCompany=Atļaut saistīt projektu ar citu uzņēmumu <br> <br> <u> Atbalstītās vērtības: </ u> <br> - Uzglabāt tukšs: var saistīt jebkuru uzņēmuma projektu (noklusējums) <br> - "visi": var saiti jebkurš projekts, pat citu uzņēmumu projekts <br> - Trešās puses identifikācijas numurs, kas atdalīts ar komatu: var sasaistīt visus šo trešās puses projektu (Piemērs: 123,4795,53) <br>
    +AllowToLinkFromOtherCompany=Atļaut saistīt projektu ar citu uzņēmumu <br> <br> <u> Atbalstītās vērtības: </u><br> - Uzglabāt tukšs: var saistīt jebkuru uzņēmuma projektu (noklusējums) <br> - "visi": var saiti jebkurš projekts, pat citu uzņēmumu projekts <br> - Trešās puses identifikācijas numurs, kas atdalīts ar komatu: var sasaistīt visus šo trešās puses projektu (Piemērs: 123,4795,53) <br>
     LatestProjects=Pēdējie %s projekti
    -LatestModifiedProjects=Jaunākie %s modificētie projekti
    +LatestModifiedProjects=Jaunākie %s labotie projekti
     OtherFilteredTasks=Citi filtrētie uzdevumi
     NoAssignedTasks=Nav piešķirtu uzdevumu (piešķiriet projektu / uzdevumus pašreizējam lietotājam no augšējā atlases lodziņa, lai tajā ievadītu laiku)
     # Comments trans
     AllowCommentOnTask=Atļaut lietotāju komentārus par uzdevumiem
     AllowCommentOnProject=Atļaut lietotājam komentēt projektus
     DontHavePermissionForCloseProject=Jums nav tiesību aizvērt projektu %s
    -DontHaveTheValidateStatus=Projektam %s jābūt atvērtai slēgšanai
    -RecordsClosed=%s projekts (-i) ir slēgts
    +DontHaveTheValidateStatus=Projektam %s jābūt atvērtam slēgšanai
    +RecordsClosed=%s projekts (-i) slēgts
     SendProjectRef=Informācijas projekts %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Jāizveido modulis "Darbinieku algu izmaksa", lai definētu darbinieka stundas likmi, lai iztērētos laiku novērtētu
    +NewTaskRefSuggested=Uzdevuma ref jau izmanto, jauna uzdevuma ref ir vēlama
    diff --git a/htdocs/langs/lv_LV/propal.lang b/htdocs/langs/lv_LV/propal.lang
    index 7c532ebc615..a8a6b9a2638 100644
    --- a/htdocs/langs/lv_LV/propal.lang
    +++ b/htdocs/langs/lv_LV/propal.lang
    @@ -29,11 +29,11 @@ PropalsDraft=Sagatave
     PropalsOpened=Atvērts
     PropalStatusDraft=Sagatave (ir jāapstiprina)
     PropalStatusValidated=Apstiprināts (priekšlikums ir atvērts)
    -PropalStatusSigned=Parakstīts (vajadzības rēķinu)
    +PropalStatusSigned=Parakstīts (vajadzīgs rēķins)
     PropalStatusNotSigned=Nav parakstīts (slēgts)
     PropalStatusBilled=Jāmaksā
     PropalStatusDraftShort=Melnraksts
    -PropalStatusValidatedShort=Apstiprināts
    +PropalStatusValidatedShort=Apstiprināts (atvērt)
     PropalStatusClosedShort=Slēgts
     PropalStatusSignedShort=Parakstīts
     PropalStatusNotSignedShort=Nav parakstīts
    @@ -44,16 +44,16 @@ ListOfProposals=Saraksts tirdzniecības priekšlikumiem
     ActionsOnPropal=Pasākumi attiecībā uz priekšlikumu
     RefProposal=Commercial priekšlikums ref
     SendPropalByMail=Nosūtīt komerciālo priekšlikumu pa pastu
    -DatePropal=Datums, kad priekšlikumu
    +DatePropal=Priekšlikuma datums
     DateEndPropal=Derīguma beigu datums
     ValidityDuration=Derīguma termiņš
     CloseAs=Iestatīt statusu uz
     SetAcceptedRefused=Iestatījums ir pieņemts / noraidīts
    -ErrorPropalNotFound=Propal %s nav atrasts
    +ErrorPropalNotFound=Piedāvājums %s nav atrasts
     AddToDraftProposals=Pievienot pie priekšlikuma projektā
     NoDraftProposals=Nav sagatavot priekšlikumus
     CopyPropalFrom=Izveidot komerciālo priekšlikumu, kopējot esošo priekšlikumu
    -CreateEmptyPropal=Izveidojiet tukšu komerciālu priekšlikumi Jaunava vai no saraksta produktu / pakalpojumu
    +CreateEmptyPropal=Izveidojiet tukšus komerciālus priekšlikumus vai produktu / pakalpojumu sarakstu
     DefaultProposalDurationValidity=Default komerciālā priekšlikumu derīguma termiņš (dienās)
     UseCustomerContactAsPropalRecipientIfExist=Izmantojiet klientu kontaktu adresi, ja noteikta nevis trešās puses adresi priekšlikumu saņēmēja adresi
     ClonePropal=Klonēt tirdzniecības priekšlikumu
    @@ -78,6 +78,7 @@ TypeContact_propal_external_CUSTOMER=Klientu kontaktu turpinot darboties priekš
     TypeContact_propal_external_SHIPPING=Klienta kontaktpersona piegādei
     # Document models
     DocModelAzurDescription=Pilnīgs priekšlikums modelis (logo. ..)
    +DocModelCyanDescription=Pilnīgs priekšlikums modelis (logo. ..)
     DefaultModelPropalCreate=Default modeļa izveide
     DefaultModelPropalToBill=Noklusējuma veidne aizverot uzņēmējdarbības priekšlikumu (tiks izrakstīts rēķins)
     DefaultModelPropalClosed=Noklusējuma veidne aizverot uzņēmējdarbības priekšlikumu (unbilled)
    diff --git a/htdocs/langs/lv_LV/resource.lang b/htdocs/langs/lv_LV/resource.lang
    index f230757fff1..f28b4ca5b0f 100644
    --- a/htdocs/langs/lv_LV/resource.lang
    +++ b/htdocs/langs/lv_LV/resource.lang
    @@ -5,7 +5,7 @@ DeleteResource=Dzēst resursu
     ConfirmDeleteResourceElement=Apstiprināt resursu dzēšanu šim elementam
     NoResourceInDatabase=Nav datubāzē resursu
     NoResourceLinked=Nav saistītu resursu
    -
    +ActionsOnResource=Notikumi šim resursam
     ResourcePageIndex=Resursu saraksts
     ResourceSingular=Resursi
     ResourceCard=Resursu karte
    @@ -30,7 +30,7 @@ DictionaryResourceType=Resursa veids
     
     SelectResource=Izvēlēties resursu
     
    -IdResource=Id resource
    +IdResource=Id resurss
     AssetNumber=Sērijas numurs
    -ResourceTypeCode=Resource type code
    +ResourceTypeCode=Resursa veida kods
     ImportDataset_resource_1=Resursi
    diff --git a/htdocs/langs/lv_LV/salaries.lang b/htdocs/langs/lv_LV/salaries.lang
    index 6e3e9361975..970a5f58edf 100644
    --- a/htdocs/langs/lv_LV/salaries.lang
    +++ b/htdocs/langs/lv_LV/salaries.lang
    @@ -1,18 +1,19 @@
     # Dolibarr language file - Source file is en_US - salaries
     SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Accounting account used for user third parties
    -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=The dedicated accounting account defined on user card will be used for Subledger accouting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated user accouting account on user is not defined.
    +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=Lietotāja kartē norādītais grāmatvedības konts tiks izmantots tikai pakārtotajam grāmatvedim. Šis viens tiks izmantots General Ledger un noklusējuma vērtība Subledged grāmatvedībai, ja lietotāja definēts lietotāju grāmatvedības konts nav definēts.
     SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Accounting account by default for wage payments
     Salary=Alga
     Salaries=Algas
     NewSalaryPayment=Jauna algas izmaksa
    +AddSalaryPayment=Pievienot algas maksājumu
     SalaryPayment=Algas maksājums
     SalariesPayments=Algu maksājumi
     ShowSalaryPayment=Rādīt algu maksājumus
     THM=Vidējā stundas cena
     TJM=Vidējā dienas likme
    -CurrentSalary=Current salary
    +CurrentSalary=Pašreizējā alga
     THMDescription=This value may be used to calculate cost of time consumed on a project entered by users if module project is used
     TJMDescription=This value is currently as information only and is not used for any calculation
    -LastSalaries=Latest %s salary payments
    -AllSalaries=All salary payments
    -SalariesStatistics=Statistiques salaires
    +LastSalaries=Jaunākie %s algu maksājumi
    +AllSalaries=Visi algu maksājumi
    +SalariesStatistics=Algas statistika
    diff --git a/htdocs/langs/lv_LV/sendings.lang b/htdocs/langs/lv_LV/sendings.lang
    index 48e35449a3e..b237cbd833f 100644
    --- a/htdocs/langs/lv_LV/sendings.lang
    +++ b/htdocs/langs/lv_LV/sendings.lang
    @@ -52,11 +52,11 @@ ActionsOnShipping=Notikumi sūtījumu
     LinkToTrackYourPackage=Saite uz izsekot savu paketi
     ShipmentCreationIsDoneFromOrder=Izveidot jaunu sūtījumu var no pasūtījuma kartiņas.
     ShipmentLine=Sūtījumu līnija
    -ProductQtyInCustomersOrdersRunning=Product quantity into open customer orders
    -ProductQtyInSuppliersOrdersRunning=Product quantity into open purchase orders
    +ProductQtyInCustomersOrdersRunning=Produkta daudzums atvērtā klienta pasūtījumā
    +ProductQtyInSuppliersOrdersRunning=Produktu daudzums atvērtajos pirkuma pasūtījumos
     ProductQtyInShipmentAlreadySent=Produkta daudzums, kuri sakārtoti pēc piegādātāja pasūtīšanas
     ProductQtyInSuppliersShipmentAlreadyRecevied=Produkta daudzums jau ir saņemts no atvērta piegādātāja pasūtījuma
    -NoProductToShipFoundIntoStock=No product to ship found into warehouse <b>%s</b>. Correct stock or go back to choose another warehouse.
    +NoProductToShipFoundIntoStock=Noliktavā nav atrasts neviens produkts, kas paredzēts piegādei <b> %s </ b>. Pareizu krājumu vai doties atpakaļ, lai izvēlētos citu noliktavu.
     WeightVolShort=Svars / tilp.
     ValidateOrderFirstBeforeShipment=You must first validate the order before being able to make shipments.
     
    @@ -69,4 +69,4 @@ SumOfProductWeights=Summēt produkta svaru
     
     # warehouse details
     DetailWarehouseNumber= Noliktavas detaļas
    -DetailWarehouseFormat= W:%s (Qty : %d)
    +DetailWarehouseFormat= W:%s (Daudz. : %d)
    diff --git a/htdocs/langs/lv_LV/sms.lang b/htdocs/langs/lv_LV/sms.lang
    index 8eef978866d..2840fa6cdf7 100644
    --- a/htdocs/langs/lv_LV/sms.lang
    +++ b/htdocs/langs/lv_LV/sms.lang
    @@ -1,7 +1,7 @@
     # Dolibarr language file - Source file is en_US - sms
     Sms=Sms
    -SmsSetup=Sms iestatīšana
    -SmsDesc=Šī lapa ļauj definēt Globālās SMS iespējas
    +SmsSetup=SMS iestatīšana
    +SmsDesc=Šī lapa ļauj definēt globālās opcijas īsziņu funkcijās
     SmsCard=SMS karte
     AllSms=Visas SMS kampaņas
     SmsTargets=Mērķi
    @@ -13,20 +13,20 @@ SmsTo=Mērķis
     SmsTopic=SMS Tēma
     SmsText=Ziņa
     SmsMessage=SMS ziņojums
    -ShowSms=Rādīt Sms
    -ListOfSms=SMS ampaņu saraksts
    +ShowSms=Parādīt īsziņu
    +ListOfSms=Īsziņu saraksta kampaņas
     NewSms=Jauna SMS kampaņa
    -EditSms=Labot Sms
    +EditSms=Rediģēt īsziņu
     ResetSms=Jauna sūtīšana
    -DeleteSms=Dzēst Sms kampaņu
    -DeleteASms=Noņemt Sms kampaņu
    -PreviewSms=Apskatīt Sms
    -PrepareSms=Sagatavot sms
    -CreateSms=Izveidot SMS
    -SmsResult=SMS sutīšanas rezultāts
    -TestSms=Testa Sms
    -ValidSms=Apstiprināt Sms
    -ApproveSms=Apstiprināt Sms
    +DeleteSms=Dzēst SMS kampaņu
    +DeleteASms=Noņemt SMS kampaņu
    +PreviewSms=Priekšskats SMS
    +PrepareSms=Sagatavot SMS
    +CreateSms=Izveidot īsziņu
    +SmsResult=SMS nosūtīšanas rezultāts
    +TestSms=Izmēģiniet SMS
    +ValidSms=Apstipriniet SMS
    +ApproveSms=Apstiprināt SMS
     SmsStatusDraft=Melnraksts
     SmsStatusValidated=Pārbaudīts
     SmsStatusApproved=Apstiprināts
    @@ -35,17 +35,17 @@ SmsStatusSentPartialy=Nosūtīts daļēji
     SmsStatusSentCompletely=Nosūtīta pilnīgi
     SmsStatusError=Kļūda
     SmsStatusNotSent=Nav nosūtīts
    -SmsSuccessfulySent=Sms pareizi nosūtīti (no %s līdz %s)
    +SmsSuccessfulySent=SMS pareizi nosūtīta (no %s līdz %s)
     ErrorSmsRecipientIsEmpty=Numurs nav norādīts
     WarningNoSmsAdded=Nav jaunu tālruņa numuru, lai pievienotu mērķa sarakstam
    -ConfirmValidSms=Do you confirm validation of this campain?
    -NbOfUniqueSms=Nb DOF unikālo tālruņa numuriem
    -NbOfSms=Nbre no fona numuru
    +ConfirmValidSms=Vai apstiprināt šīs kampaņas apstiprināšanu?
    +NbOfUniqueSms=Unikālo tālruņu numuru skaits
    +NbOfSms=Tālruņu numuru skaits
     ThisIsATestMessage=Šī ir testa ziņa
     SendSms=Sūtīt SMS
     SmsInfoCharRemain=Atlikušo rakstzīmju skaits
    -SmsInfoNumero= (Formāts starptautiskais t.i.: 37128701761)
    +SmsInfoNumero= (starptautiskais formāts, t.i.: +33899701761)
     DelayBeforeSending=Aizture pirms nosūtīšanas (minūtēs)
    -SmsNoPossibleSenderFound=No sender available. Check setup of your SMS provider.
    +SmsNoPossibleSenderFound=Nav neviena sūtītāja. Pārbaudiet sava SMS pakalpojumu sniedzēja iestatījumus.
     SmsNoPossibleRecipientFound=Nav mērķa pieejams. Pārbaudiet iestatījumus jūsu SMS pakalpojumu sniedzēja.
    -DisableStopIfSupported=Disable STOP message (if supported)
    +DisableStopIfSupported=Atspējot STOP ziņojumu (ja tas ir atbalstīts)
    diff --git a/htdocs/langs/lv_LV/stocks.lang b/htdocs/langs/lv_LV/stocks.lang
    index cf87f02b0ee..be1eb641c81 100644
    --- a/htdocs/langs/lv_LV/stocks.lang
    +++ b/htdocs/langs/lv_LV/stocks.lang
    @@ -17,7 +17,7 @@ CancelSending=Atcelt sūtīšanu
     DeleteSending=Dzēst nosūtot
     Stock=Krājums
     Stocks=Krājumi
    -StocksByLotSerial=Stocks by lot/serial
    +StocksByLotSerial=Krājumi pēc partijas/sērijas
     LotSerial=Daudz / sērijas nr
     LotSerialList=Partijas saraksts / sērijas nr
     Movements=Kustības
    @@ -44,7 +44,6 @@ TransferStock=Pārvietot krājumus
     MassStockTransferShort=Masveida krājumu pārvietošana
     StockMovement=Krājumu pārvietošana
     StockMovements=Krājumu pārvietošanas
    -LabelMovement=Kustību nosaukums
     NumberOfUnit=Vienību skaits
     UnitPurchaseValue=Vienības iepirkuma cena
     StockTooLow=Krājumi pārāk maz
    @@ -55,20 +54,20 @@ PMPValueShort=VSC
     EnhancedValueOfWarehouses=Noliktavas vērtība
     UserWarehouseAutoCreate=Lietotāja noliktavas izveide, izveidojot lietotāju
     AllowAddLimitStockByWarehouse=Ļauj pievienot ierobežojumu un vēlamo krājumu uz pāris (produkts, noliktava), nevis uz produktu
    -IndependantSubProductStock=Product stock and subproduct stock are independant
    +IndependantSubProductStock=Produktu krājumi un blakusprodukti ir neatkarīgi
     QtyDispatched=Nosūtītais daudzums
     QtyDispatchedShort=Daudz. nosūtīts
     QtyToDispatchShort=Daudzums nosūtīšanai
     OrderDispatch=Posteņu ieņēmumi
    -RuleForStockManagementDecrease=Rule for automatic stock management decrease (manual decrease is always possible, even if an automatic decrease rule is activated)
    -RuleForStockManagementIncrease=Rule for automatic stock management increase (manual increase is always possible, even if an automatic increase rule is activated)
    -DeStockOnBill=Samazināt nekustamā krājumi uz klientu rēķinu / kredīta piezīmes apstiprināšanu
    -DeStockOnValidateOrder=Samazināt nekustamā krājumus klientu pasūtījumus apstiprināšanu
    +RuleForStockManagementDecrease=Lai automātiski samazinātu krājumu samazinājumu, izvēlieties noteikumu (manuāla samazināšana vienmēr ir iespējama, pat ja ir aktivizēts automātiskais samazināšanas noteikums).
    +RuleForStockManagementIncrease=Izvēlieties noteikumu automātiskai krājumu palielināšanai (manuāla palielināšana vienmēr ir iespējama, pat ja ir aktivizēts automātiskais pieauguma noteikums).
    +DeStockOnBill=Samaziniet reālos krājumus klienta rēķina / kredītzīmes atzīmēšanā
    +DeStockOnValidateOrder=Samazināt reālos krājumus klienta pasūtījuma validācijā
     DeStockOnShipment=Samazināt reālos krājumus piegādes apstiprinājuma gadījumā
     DeStockOnShipmentOnClosing=Samazināt reālās krājumus kuģošanas klasifikācijā
    -ReStockOnBill=Palielināt nekustamā krājumus piegādātāju rēķinu / kredīta piezīmes apstiprināšanu
    -ReStockOnValidateOrder=Increase real stocks on purchase orders approbation
    -ReStockOnDispatchOrder=Increase real stocks on manual dispatching into warehouses, after supplier order receipt of goods
    +ReStockOnBill=Palieliniet reālo krājumus, pārbaudot piegādātāja rēķinu / kredītzīmi
    +ReStockOnValidateOrder=Palieliniet reālo krājumu pirkšanas pasūtījuma apstiprinājumā
    +ReStockOnDispatchOrder=Palielināt reālo krājumus, manuāli nosūtīt uz noliktavu pēc piegādātāja pasūtījuma preču saņemšanas
     OrderStatusNotReadyToDispatch=Lai vēl nav vai vairs statusu, kas ļauj sūtījumiem produktu krājumu noliktavās.
     StockDiffPhysicTeoric=Explanation for difference between physical and virtual stock
     NoPredefinedProductToDispatch=Nav iepriekš produktu šo objektu. Līdz ar to nav nosūtot noliktavā ir nepieciešama.
    @@ -130,10 +129,11 @@ RecordMovement=Ierakstīt pārvietošanu
     ReceivingForSameOrder=Receipts for this order
     StockMovementRecorded=Krājumu pārvietošana saglabāta
     RuleForStockAvailability=Noteikumi krājumu nepieciešamībai
    -StockMustBeEnoughForInvoice=Krājumu līmenim ir jābūt pietiekamam, lai produktu / pakalpojumu pievienotu rēķinam (pārbaudīt tiek veikta, izmantojot esošo reālo krājumus, pievienojot rindu rēķinā neatkarīgi no tā, vai ir spēkā automātiskas krājumu izmaiņas)
    -StockMustBeEnoughForOrder=Krājumu līmenim ir jābūt pietiekamam, lai produktu / pakalpojumu pasūtītam pēc pasūtījuma (pārbaude tiek veikta, izmantojot esošo reālo krājumus, pievienojot rindu kārtībā neatkarīgi no tā, kāds ir noteikums par automātisko krājumu maiņu)
    -StockMustBeEnoughForShipment= Krājumu līmenim ir jābūt pietiekamam, lai produktam / pakalpojumam pievienotu sūtījumu (pārbaude tiek veikta, izmantojot pašreizējo reālo krājumu, pievienojot līniju sūtījumā neatkarīgi no tā, vai ir spēkā automātiskas krājumu izmaiņas)
    -MovementLabel=Label of movement
    +StockMustBeEnoughForInvoice=Krājumu līmenim ir jābūt pietiekamam, lai produktu / pakalpojumu pievienotu rēķinam (pārbaudiet, vai pašreizējā reālā krājumā tiek pievienota rinda rēķinā neatkarīgi no automātiskās krājumu maiņas noteikuma)
    +StockMustBeEnoughForOrder=Krājuma līmenim ir jābūt pietiekamam, lai produktu / pakalpojumu pasūtītam pēc pasūtījuma (pārbaudiet, vai pašreizējā reālā krājumā tiek pievienota rinda, lai kāds būtu noteikums automātiskai krājumu maiņai).
    +StockMustBeEnoughForShipment= Krājumu līmenim ir jābūt pietiekamam, lai produktu / pakalpojumu nosūtītu sūtījumam (pārbaudiet pašreizējo reālo krājumu, pievienojot līniju sūtījumā neatkarīgi no automātiskās krājumu maiņas)
    +MovementLabel=Kustības marķējums
    +TypeMovement=Kustības veids
     DateMovement=Pārvietošanas datums
     InventoryCode=Movement or inventory code
     IsInPackage=Contained into package
    @@ -172,7 +172,7 @@ inventoryDraft=Darbojas
     inventorySelectWarehouse=Noliktavas izvēle
     inventoryConfirmCreate=Izveidot
     inventoryOfWarehouse=Noliktavas inventārs : %s
    -inventoryErrorQtyAdd=Kļūda: viens daudzums ir leaser nekā nulle
    +inventoryErrorQtyAdd=Kļūda: viens daudzums ir mazāks par nulli
     inventoryMvtStock=Pēc inventāra
     inventoryWarningProductAlreadyExists=Šis produkts jau ir iekļauts sarakstā
     SelectCategory=Sadaļu filtrs
    @@ -198,9 +198,13 @@ FlushInventory=Ielieciet inventāru
     ConfirmFlushInventory=Vai jūs apstiprināt šo darbību?
     InventoryFlushed=Inventory flushed
     ExitEditMode=Iziet no labošanas
    -inventoryDeleteLine=Delete line
    +inventoryDeleteLine=Dzēst rindu
     RegulateStock=Regulēt krājumus
     ListInventory=Saraksts
    -StockSupportServices=Stock management support services
    +StockSupportServices=Stock management atbalsta Pakalpojumi
     StockSupportServicesDesc=Pēc noklusējuma varat iegādāties tikai produktu ar veidu "produkts". Ja ieslēgts un ja moduļa pakalpojums ir ieslēgts, varat arī nolikt produktu ar tipu "pakalpojums"
     ReceiveProducts=Saņemt priekšmetus
    +StockIncreaseAfterCorrectTransfer=Palielināt ar korekciju/pārvietošanu
    +StockDecreaseAfterCorrectTransfer=Samazināt pēc korekcijas/pārsvietošanas
    +StockIncrease=Krājumu pieaugums
    +StockDecrease=Krājumu samazinājums
    diff --git a/htdocs/langs/lv_LV/stripe.lang b/htdocs/langs/lv_LV/stripe.lang
    index 51b07f02695..057df9d4b6b 100644
    --- a/htdocs/langs/lv_LV/stripe.lang
    +++ b/htdocs/langs/lv_LV/stripe.lang
    @@ -61,3 +61,4 @@ ConfirmDeleteCard=Vai tiešām vēlaties izdzēst šo kredītkarti vai debetkart
     CreateCustomerOnStripe=Izveidojiet klientu joslā
     CreateCardOnStripe=Izveidojiet karti joslā
     ShowInStripe=Rādīt joslā
    +StripeUserAccountForActions=Lietotāja konts, lai izmantotu dažu e-pasta paziņojumu par joslu notikumiem (Stripe payouts)
    diff --git a/htdocs/langs/lv_LV/supplier_proposal.lang b/htdocs/langs/lv_LV/supplier_proposal.lang
    index 3019228e921..0fca24979fb 100644
    --- a/htdocs/langs/lv_LV/supplier_proposal.lang
    +++ b/htdocs/langs/lv_LV/supplier_proposal.lang
    @@ -40,7 +40,7 @@ ConfirmReOpenAsk=Vai tiešām vēlaties atvērt cenu pieprasījumu <b> %s</b>?
     SendAskByMail=Sūtīt cenas pieprasījumu pa pastu
     SendAskRef=Sūta cenas pieprasījumu %s
     SupplierProposalCard=Pieprasīt karti
    -ConfirmDeleteAsk=Vai tiešām vēlaties dzēst šo cenu pieprasījumu <b> %s </ b>?
    +ConfirmDeleteAsk=Vai tiešām vēlaties dzēst šo cenu pieprasījumu <b> %s</b>?
     ActionsOnSupplierProposal=Pasākumi pēc cenas pieprasījuma
     DocModelAuroreDescription=A complete request model (logo...)
     CommercialAsk=Cenas pieprasījums
    diff --git a/htdocs/langs/lv_LV/trips.lang b/htdocs/langs/lv_LV/trips.lang
    index 471d8f1ebe3..2b2d23aebcc 100644
    --- a/htdocs/langs/lv_LV/trips.lang
    +++ b/htdocs/langs/lv_LV/trips.lang
    @@ -19,7 +19,7 @@ ConfirmDeleteTrip=Vai tiešām vēlaties dzēst šo izdevumu atskaiti ?
     ListTripsAndExpenses=Izdevumu pārskatu saraksts
     ListToApprove=Gaida apstiprinājumu
     ExpensesArea=Izdevumu pārskatu sadaļa
    -ClassifyRefunded=Classify 'Refunded'
    +ClassifyRefunded=Klasificēt "atmaksāts"
     ExpenseReportWaitingForApproval=A new expense report has been submitted for approval
     ExpenseReportWaitingForApprovalMessage=Ir iesniegts jauns izdevumu pārskats un tas gaida apstiprināšanu. <br> - Lietotājs: %s <br> - Periods: %s <br> Uzklikšķināt šeit, lai apstiprinātu: %s
     ExpenseReportWaitingForReApproval=Izdevumu pārskats ir iesniegts atkārtotai apstiprināšanai
    @@ -102,7 +102,7 @@ NOT_AUTHOR=You are not the author of this expense report. Operation cancelled.
     ConfirmRefuseTrip=Vai jūs tiešām vēlaties bloķēt šo izdevumu pārskatu?
     ValideTrip=Apstiprināt izdevumu pārskatu
     ConfirmValideTrip=Vai tiešām vēlaties apstiprināt šo izdevumu atskaiti?
    -PaidTrip=Pay an expense report
    +PaidTrip=Izmaksu pārskats
     ConfirmPaidTrip=Vai tiešām vēlaties mainīt šī izdevumu pārskata statusu uz "Apmaksātais"?
     ConfirmCancelTrip=Vai tiešām vēlaties atcelt šo izdevumu pārskatu?
     BrouillonnerTrip=Move back expense report to status "Draft"
    @@ -117,7 +117,7 @@ CloneExpenseReport=Klonēt izdevumu pārskatu
     ConfirmCloneExpenseReport=Vai tiešām vēlaties klonēt šo izdevumu pārskatu?
     ExpenseReportsIk=Izdevumu pārskats, kurā ir indekss
     ExpenseReportsRules=Izdevumu pārskatu noteikumi
    -ExpenseReportIkDesc=Varat mainīt kilometru izdevumu aprēķinu pa kategorijām un diapazoniem, kurus tie iepriekš ir definējuši. <b> d </ b> ir attālums kilometros
    +ExpenseReportIkDesc=Varat mainīt kilometru izdevumu aprēķinu pa kategorijām un diapazoniem, kurus tie iepriekš ir definējuši. <b> d </b> ir attālums kilometros
     ExpenseReportRulesDesc=Jūs varat izveidot vai atjaunināt visus aprēķina noteikumus. Šī daļa tiks izmantota, ja lietotājs izveidos jaunu izdevumu pārskatu
     expenseReportOffset=Kompensācija
     expenseReportCoef=Koeficents
    @@ -129,7 +129,7 @@ expenseReportCatDisabled=Kategorija ir atspējota - skatiet c_exp_tax_cat vārdn
     expenseReportRangeDisabled=Diapazons ir atspējots - skatiet c_exp_tax_range dictionay
     expenseReportPrintExample=kompensēt + (d x coef) = %s
     ExpenseReportApplyTo=Pielietot
    -ExpenseReportDomain=Domēns jāpiemēro
    +ExpenseReportDomain=Domēns kam jāpiemēro
     ExpenseReportLimitOn=Ierobežot
     ExpenseReportDateStart=Sākuma datums
     ExpenseReportDateEnd=Beigu datums
    diff --git a/htdocs/langs/lv_LV/users.lang b/htdocs/langs/lv_LV/users.lang
    index 440a74419c4..21a1f778e62 100644
    --- a/htdocs/langs/lv_LV/users.lang
    +++ b/htdocs/langs/lv_LV/users.lang
    @@ -35,7 +35,7 @@ SuperAdministrator=Super administrators
     SuperAdministratorDesc=Galvenais administrators
     AdministratorDesc=Administrators
     DefaultRights=Noklusējuma atļaujas
    -DefaultRightsDesc=Definēt šeit <u>noklusējuma</u> atļaujas, kas automātiski tiek piešķirtas uz <u>Jaunizveidotās</u> lietotājs (Doties uz lietotāja kartes, lai mainītu atļaujas esošās lietotājs).
    +DefaultRightsDesc=Definējiet šeit <u> noklusējuma </u> atļaujas, kuras automātiski piešķir jaunam </ u> lietotājam (dodieties uz lietotāja karti, lai mainītu esoša lietotāja atļauju).
     DolibarrUsers=Dolibarr lietotājiem
     LastName=Uzvārds
     FirstName=Vārds
    @@ -66,7 +66,7 @@ CreateDolibarrThirdParty=Izveidot trešo pusi
     LoginAccountDisableInDolibarr=Konts bloķēts Dolibarr.
     UsePersonalValue=Izmantot personisko vērtību
     InternalUser=Iekšējais lietotājs
    -ExportDataset_user_1=Dolibarr lietotāji un īpašības
    +ExportDataset_user_1=Lietotāji un to īpašības
     DomainUser=Domēna lietotājs %s
     Reactivate=Aktivizēt
     CreateInternalUserDesc=Šī veidlapa ļauj izveidot uzņēmuma / organizācijas iekšējo lietotāju. Lai izveidotu ārēju lietotāju (klientu, piegādātāju, ...), izmantojiet pogu "Izveidot Dolibarr lietotāju" no trešās personas kontakta kartītes.
    @@ -83,7 +83,7 @@ UserDisabled=Lietotājs %s bloķēts
     UserEnabled=Lietotājs %s aktivizēts
     UserDeleted=Lietotājs %s noņemts
     NewGroupCreated=Grupa %s izveidota
    -GroupModified=Group %s modified
    +GroupModified=Grupa %s ir labota
     GroupDeleted=Grupa %s noņemta
     ConfirmCreateContact=Vai Jūs tiešām vēlaties izveidot Dolibarr kontu šim kontaktam?
     ConfirmCreateLogin=Vai jūs tiešām vēlaties izveidot Dolibarr kontu šim lietotājam?
    @@ -92,8 +92,8 @@ LoginToCreate=Pieslēdzies, lai izveidotu
     NameToCreate=Nosaukums trešās puses, lai radītu
     YourRole=Jūsu lomas
     YourQuotaOfUsersIsReached=Jūsu aktīvo lietotāju limits ir sasniegts!
    -NbOfUsers=Lietotāju sk
    -NbOfPermissions=Nb atļauju
    +NbOfUsers=Lietotāju skaits
    +NbOfPermissions=Atļauju skaits
     DontDowngradeSuperAdmin=Tikai superadmins var pazemināt superadminu
     HierarchicalResponsible=Uzraugs
     HierarchicView=Hierarhiska view
    @@ -108,3 +108,4 @@ UserAccountancyCode=Lietotāja grāmatvedības kods
     UserLogoff=Lietotājs atslēdzies
     UserLogged=Lietotājs pieteicies
     DateEmployment=Darba uzsākšanas datums
    +DateEmploymentEnd=Nodarbinātības beigu datums
    diff --git a/htdocs/langs/lv_LV/website.lang b/htdocs/langs/lv_LV/website.lang
    index 02ba0404abf..58c2756da4c 100644
    --- a/htdocs/langs/lv_LV/website.lang
    +++ b/htdocs/langs/lv_LV/website.lang
    @@ -1,8 +1,8 @@
     # Dolibarr language file - Source file is en_US - website
     Shortname=Kods
    -WebsiteSetupDesc=Create here as much entry as number of different websites you need. Then go into menu Websites to edit them.
    +WebsiteSetupDesc=Izveidojiet šeit vietnes, kuras vēlaties izmantot. Pēc tam dodieties uz izvēlņu vietnes, lai tās rediģētu.
     DeleteWebsite=Dzēst mājaslapu
    -ConfirmDeleteWebsite=Vai tiešām vēlaties dzēst šo tīmekļa vietni. Visas tās lapas un saturs tiks dzēstas.
    +ConfirmDeleteWebsite=Vai tiešām vēlaties dzēst šo vietni? Visas tās lapas un saturs tiks noņemtas.
     WEBSITE_TYPE_CONTAINER=Lapas / konteinera veids
     WEBSITE_PAGE_EXAMPLE=Tīmekļa lapa, ko izmantot kā piemēru
     WEBSITE_PAGENAME=Lapas nosaukums / pseidonīms
    @@ -18,17 +18,19 @@ HtmlHeaderPage=HTML virsraksts (tikai šai lapai)
     PageNameAliasHelp=Lapas nosaukums vai pseidonīms. <br> Šis aizstājvārds tiek izmantots arī, lai izveidotu SEO vietrādi, ja vietne tiek izmantota no Web servera virtuālās saimniekdatora (piemēram, Apacke, Nginx, ...). Izmantojiet pogu "<strong> %s </strong>, lai rediģētu šo aizstājvārdu.
     EditTheWebSiteForACommonHeader=Piezīme: ja vēlaties norādīt personalizētu galveni visām lapām, rediģējiet virsrakstu vietnes līmenī, nevis lapā / konteinerā.
     MediaFiles=Mediju bibliotēka
    -EditCss=Rediģēt stilu / CSS vai HTML virsrakstu
    +EditCss=Rediģēt vietnes rekvizīt
     EditMenu=Labot izvēlni
     EditMedias=Rediģēt medijus
    -EditPageMeta=Rediģēt meta
    +EditPageMeta=Rediģējiet lapas / konteinera īpašības
    +EditInLine=Rediģēt inline
     AddWebsite=Pievienot vietni
     Webpage=Web lapa / konteiners
     AddPage=Pievienot lapu / konteineru
     HomePage=Mājas lapa
     PageContainer=Lapa / konteiners
    -PreviewOfSiteNotYetAvailable=Jūsu tīmekļa vietnes priekšskatījums <strong> %s</strong>vēl nav pieejams. Vispirms jāpievieno lapa.
    +PreviewOfSiteNotYetAvailable=Jūsu vietnes <strong> %s </ strong> priekšskatījums vēl nav pieejams. Vispirms jums ir jāievieto <strong> Importēt pilnu vietnes veidni </ strong> vai vienkārši <strong> Pievienot lapu / konteineru </ strong> ".
     RequestedPageHasNoContentYet=Pieprasītā lapa ar id %s vēl nav ievietota, vai kešatmiņas fails .tpl.php tika noņemts. Rediģējiet lapas saturu, lai to atrisinātu.
    +SiteDeleted=Tīmekļa vietne '%s' dzēsta
     PageContent=Lapa / Konteiners
     PageDeleted=Lapa / Saturs %s "%s" ir izdzēsts
     PageAdded=Lapa / Konteiners '%s' ir pievienota
    @@ -37,18 +39,19 @@ ViewPageInNewTab=Skatīt lapu jaunā cilnē
     SetAsHomePage=Iestatīt kā mājas lapu
     RealURL=Reāls URL
     ViewWebsiteInProduction=Apskatīt vietni, izmantojot mājas URL
    -SetHereVirtualHost=Ja varat savā tīmekļa serverī (Apache, Nginx, ...) izveidot īpašu virtuālo saimniekdatoru ar iespējotu PHP un Saknes direktoriju vietnē <strong> %s </ strong> <br>, tad ievadiet šeit virtuālo jūsu izveidotā saimniekdatora nosaukumu, tāpēc priekšskatījumu var veikt arī, izmantojot šo īpašo tīmekļa servera piekļuvi, nevis tikai Dolibarr servera izmantošanu.
    -YouCanAlsoTestWithPHPS=Izstrādājot vidi, jūs varat izvēlēties testēt vietni ar PHP iegulto tīmekļa serveri (nepieciešams PHP 5.5), palaižot <strong> php -S 0.0.0.0:8080 -t %s </ strong>
    -CheckVirtualHostPerms=Pārbaudiet arī to, vai virtuālajam uzņēmējam ir atļauja <strong> %s </ strong> failiem vietnē <strong> %s </ strong>
    +SetHereVirtualHost=<u> Izmantojiet ar Apache / NGinx /...</ u> <br> Ja jūs savā tīmekļa serverī (Apache, Nginx, ...) izveidojat speciālu virtuālo serveri ar iespējotu PHP un saknes direktoriju <br> <strong> %s </ strong> <br> pēc tam ievadiet šeit izveidoto virtuālo saimniekdatora nosaukumu, tāpēc priekšskatījumu var veikt arī, izmantojot šo īpašo tīmekļa servera piekļuvi, nevis tikai Dolibarr servera lietošanu.
    +YouCanAlsoTestWithPHPS=<u> Izmantojiet ar PHP serveri. </u> <br> Izstrādājot vidi, jūs varat izvēlēties testēt vietni ar PHP tīmekļa serveri (nepieciešams PHP 5.5), palaižot <br><strong> php -S 0.0. 0.0 8080-t %s</strong>
    +CheckVirtualHostPerms=Pārbaudiet arī to, vai virtuālajam serverim ir atļauja <strong>%s</strong> failiem vietnē <br><strong>%s</strong>
     ReadPerm=Lasīt
     WritePerm=Rakstīt
     PreviewSiteServedByWebServer=<u>Preview %s in a new tab.</u><br><br>The %s will be served by an external web server (like Apache, Nginx, IIS). You must install and setup this server before to point to directory:<br><strong>%s</strong><br>URL served by external server:<br><strong>%s</strong>
     PreviewSiteServedByDolibarr=<u> Priekšskatīt %s jaunā cilnē. </ u> <br> <br> Dolibarr serveris izsniegs %s, tāpēc tam nevajadzēs instalēt papildu tīmekļa serveri (piemēram, Apache, Nginx, IIS). < br> Nelabvēlīgi ir tas, ka lapu URL nav lietotājam draudzīgs un sākas ar jūsu Dolibarr ceļu. <br> URL, ko izsniedz Dolibarr: <br> <strong> %s </ strong> <br> <br> Lai izmantotu savu ārējais tīmekļa serveris, kas kalpo šai vietnei, izveido virtuālo saimniekdatoru savā tīmekļa serverī, kas norādīts direktorijā <br> <strong> %s </ strong> <br>, pēc tam ievadiet šī virtuālā servera nosaukumu un noklikšķiniet uz citas priekšskatījuma pogas .
     VirtualHostUrlNotDefined=Virtuālā resursdatora adrese, kuru apkalpo ārējs tīmekļa serveris, nav definēts
     NoPageYet=Vēl nav nevienas lapas
    +YouCanCreatePageOrImportTemplate=Jūs varat izveidot jaunu lapu vai importēt pilnu vietnes veidni
     SyntaxHelp=Palīdzība par konkrētiem sintakses padomiem
     YouCanEditHtmlSourceckeditor=Jūs varat rediģēt HTML avota kodu, izmantojot redaktorā pogu "Avots".
    -YouCanEditHtmlSource=<br> <span class = "fa fa-bug"> </ span> Jūs varat iekļaut PHP kodu šajā avotā, izmantojot tagus <strong> &lt;? php? &gt; </ strong>. Pieejami šādi globālie mainīgie: $ conf, $ langs, $ db, $ mysoc, $ user, $ website. <br> <br> <span class = "fa fa-bug"> </ span> Jūs varat arī iekļaut cita lapas / konteinera saturs ar šādu sintaksi: <br> <strong> &lt;? php includeContainer ('alias_of_container_to_include'); ? &gt; </ strong> <br> <br> <span class = "fa fa-bug"> </ span> Jūs varat veikt novirzīšanu uz citu lapu / konteineru ar šādu sintaksi: <br> <strong> &lt;? php redirectToContainer ('alias_ofcontainer_to_redirect_to'); ? &gt; </ strong> <br> <br> <span class = "fa fa-download"> </ span> Lai iekļautu <strong> saiti, lai lejupielādētu </ strong> failu, kas saglabāts <strong> dokumentos < / strong> direktorijā izmantojiet iesaiņojuma <strong> document.php </ strong> mapi: <br> Piemērs failam dokumentos / ecm (jāreģistrē) sintakse ir: <br> <strong> &lt;a href = "/document.php?modulepart=ecm&file=[relative_dir/]filename.ext" &gt; </ strong> <br> Ja failā ir dokumenti / mediji (atvērtā direktorijā publiskai piekļuvei), sintakse ir: <br> <strong> &lt;a href = "/ document.php? modulepart = media_file =" [relative_dir /] filename.ext "&gt; </ strong> <br> par failu, kas koplietots ar koplietošanas saiti (atvērtā piekļuve, izmantojot faila koplietošanas hash atslēgu), sintakse ir: <br> <strong> &lt;a href = "/ document.php? hashp = publicsharekeyoffile" &gt; </ strong> <br> <br> <span class = "fa fa-picture-o"> </ span> Lai ietver <strong> attēlu </ strong>, kas tiek glabāts direktorijā <strong> documents </ strong>, izmantojiet apvalku <strong> viewimage.php </ strong>: <br> piemēram, attēlam uz dokumentiem / medijiem (atvērtā piekļuve) sintakse ir: <br> <strong> &lt;a href = "/ viewimage.php? modulepart = medias&amp;file = [relative_dir /] filename.ext" &gt; </ strong> <br>
    +YouCanEditHtmlSource=<br> <span class = "fa fa-bug"> </ span> Jūs varat iekļaut PHP kodu šajā avotā, izmantojot tagus <strong> &lt;? php? &gt; </ strong>. Pieejami šādi globālie mainīgie: $ conf, $ db, $ mysoc, $ user, $ website, $ websitepage, $ weblangs. <br> <br> <span class = "fa fa-bug"> </ span> Jūs var iekļaut arī citu lapas / konteinera saturu ar šādu sintaksi: <br> <strong> &lt;? php includeContainer ('alias_of_container_to_include'); ? &gt; </ strong> <br> <br> <span class = "fa fa-bug"> </ span> Jūs varat veikt novirzīšanu uz citu lapu / konteineru ar šādu sintaksi (Piezīme: novirzīšana): <br> <strong> &lt;? php redirectToContainer ('alias_ofcontainer_to_redirect_to'); ? &gt; </ strong> <br> <br> <span class = "fa fa-link"> </ span> Lai pievienotu saiti uz citu lapu, izmantojiet sintaksi: <br> <strong> &lt;a href = "alias_of_page_to_link_to .php "&gt;mylink&lt;a&gt; </ strong> <br> <br> <span class =" fa fa-download "> </ span> Lai iekļautu <strong> saiti, lai lejupielādētu </ strong> failu, kas saglabāts <strong> dokumentiem </ strong>, izmantojiet iesaiņojuma <strong> document.php </ strong> mapi: <br> Piemēram, failam dokumentos / ecm (jāreģistrē) sintakse ir: <br> <strong> &lt;a href = "/ document.php? modulepart = ecm & file = [relative_dir /] filename.ext" &gt; </ strong> <br> Ja failā ir dokumenti / mediji (atvērtā direktorijā publiskai piekļuvei), sintakse ir: <br> < strong> &lt;a href = "/ document.php? modulepart = media & file =" [relative_dir /] filename.ext "&gt; </ strong> <br> par failu, kas koplietots ar koplietošanas saiti (atvērtā piekļuve, izmantojot faila koplietošanas hash atslēgu) , sintakse ir: <br> <strong> &lt;a href = "/ document.php? hashp = publicsharekeyoffile" &gt; </ strong> <br> <br> <span clas s = "fa fa-picture-o"> </ span> Lai iekļautu <strong> attēlu </ strong>, kas saglabāts direktorijā <strong> documents </ strong>, izmantojiet <strong> viewimage.php </ strong > iesaiņojums: <br> Piemērs, lai attēls būtu pieejams dokumentos / plašsaziņas līdzekļos (atvērtā direktorijā publiskai piekļuvei), sintakse ir: <br> <strong> &lt;img src = "/ viewimage.php? modulepart = medias&amp;file = [relative_dir /] filename .ext "&gt; </ strong> <br>
     ClonePage=Klonēt lapu / konteineru
     CloneSite=Klonēt vietni
     SiteAdded=Pievienota vietne
    @@ -58,29 +61,35 @@ LanguageMustNotBeSameThanClonedPage=Jūs klons lapas kā tulkojumu. Jaunās lapa
     ParentPageId=Vecāku lapas ID
     WebsiteId=Vietnes ID
     CreateByFetchingExternalPage=Izveidojiet lapu / konteineru, ielādējot lapu no ārējā URL ...
    -OrEnterPageInfoManually=Vai arī izveidojiet tukšu lapu no sākuma ...
    +OrEnterPageInfoManually=Vai arī izveidojiet lapu no jauna vai no lapas veidnes ...
     FetchAndCreate=Ielādēt un izveidot
    -ExportSite=Eksporta vietne
    +ExportSite=Eksportēt vietni
    +ImportSite=Importēt vietnes veidni
     IDOfPage=Lapas ID
     Banner=Baneris
     BlogPost=Emuāra ziņa
     WebsiteAccount=Vietnes konts
     WebsiteAccounts=Vietnes konti
     AddWebsiteAccount=Izveidot mājas lapas kontu
    -BackToListOfThirdParty=Atpakaļ uz trešo personu sarakstu
    +BackToListOfThirdParty=Atpakaļ uz trešo pušu sarakstu
     DisableSiteFirst=Vispirms atspējojiet vietni
     MyContainerTitle=Manas tīmekļa vietnes virsraksts
     AnotherContainer=Vēl viens konteiners
     WEBSITE_USE_WEBSITE_ACCOUNTS=Iespējot tīmekļa vietnes kontu tabulu
     WEBSITE_USE_WEBSITE_ACCOUNTSTooltip=Iespējojiet tabulu, lai saglabātu tīmekļa vietnes kontus (login / pass) katram vietnei / trešās puses kontam
     YouMustDefineTheHomePage=Vispirms ir jādefinē noklusējuma sākumlapa
    -OnlyEditionOfSourceForGrabbedContentFuture=Piezīme. Tikai HTML avota izdevums būs iespējams, ja lapas saturs tiks sākts, satverot to no ārējās lapas (WYSIWYG redaktors nebūs pieejams).
    +OnlyEditionOfSourceForGrabbedContentFuture=Brīdinājums: tīmekļa lapas izveide, importējot ārēju tīmekļa lapu, ir rezervēta pieredzējušam lietotājam. Atkarībā no avota lapas sarežģītības, importēšanas rezultāts var atšķirties, kad tas tiek importēts no oriģināla. Arī tad, ja avota lapā tiek izmantots visbiežāk izmantotais CSS stils vai nesaderīgs javascript, tad, strādājot šajā lapā, tas var pārtraukt tīmekļa vietnes redaktora izskatu vai funkcijas. Šī metode ir ātrāks veids, kā izveidot lapu, bet tā tiek ieteikta, lai izveidotu savu jauno lapu no jauna vai no ieteiktās lapas veidnes. <br> Jāņem vērā arī tas, ka tikai HTML avota izdevums būs pieejams tikai tad, ja lapas saturs ir inicializēts, satverot tas no ārējās lapas ("Online" redaktors NĒ būs pieejams)
     OnlyEditionOfSourceForGrabbedContent=Tikai HTML avota izdevums ir pieejams, ja saturs tiek satverts no ārējas vietnes
     GrabImagesInto=Grab arī attēlus, kas atrodami CSS un lapā.
     ImagesShouldBeSavedInto=Attēli jāuzglabā mapē
     WebsiteRootOfImages=Mājaslapu attēlu sakņu direktorija
     SubdirOfPage=Apakškatalogs, kas veltīts lapai
    -AliasPageAlreadyExists=Aliases lapa <strong> %s </ strong> jau pastāv
    +AliasPageAlreadyExists=Aliases lapa <strong>%s</strong> jau pastāv
     CorporateHomePage=Korporatīvā mājas lapa
     EmptyPage=Tukša lapa
     ExternalURLMustStartWithHttp=Ārējam URL ir jāsākas ar http: // vai https: //
    +ZipOfWebsitePackageToImport=Zip faila vietnes pakotne
    +ShowSubcontainers=Rādīt iekļautos konteinerus
    +InternalURLOfPage=Lapas iekšējais URL
    +ThisPageIsTranslationOf=Šī lapa / konteiners ir tulkojums
    +ThisPageHasTranslationPages=Šajā lapā / konteinerā ir tulkojums
    diff --git a/htdocs/langs/lv_LV/withdrawals.lang b/htdocs/langs/lv_LV/withdrawals.lang
    index a192c075732..7d71634041f 100644
    --- a/htdocs/langs/lv_LV/withdrawals.lang
    +++ b/htdocs/langs/lv_LV/withdrawals.lang
    @@ -1,7 +1,7 @@
     # Dolibarr language file - Source file is en_US - withdrawals
     CustomersStandingOrdersArea=Tiešā debeta maksājumu pasūtījumu sadaļa
     SuppliersStandingOrdersArea=Tiešo kredīta maksājumu uzdevumu apgabals
    -StandingOrdersPayment=Direct debit payment orders
    +StandingOrdersPayment=Tiešā debeta maksājuma uzdevumi
     StandingOrderPayment=Tiešā debeta maksājuma uzdevums
     NewStandingOrder=Jauns tiešā debeta pasūtījums
     StandingOrderToProcess=Jāapstrādā
    @@ -12,11 +12,11 @@ WithdrawalsLines=Direct debit order lines
     RequestStandingOrderToTreat=Request for direct debit payment order to process
     RequestStandingOrderTreated=Request for direct debit payment order processed
     NotPossibleForThisStatusOfWithdrawReceiptORLine=Not yet possible. Withdraw status must be set to 'credited' before declaring reject on specific lines.
    -NbOfInvoiceToWithdraw=Nb. of qualified invoice with waiting direct debit order
    -NbOfInvoiceToWithdrawWithInfo=Nb. of customer invoice with direct debit payment orders having defined bank account information
    +NbOfInvoiceToWithdraw=Kvalificēta rēķina Nr. Ar gaidīšanas tiešā debeta rīkojumu
    +NbOfInvoiceToWithdrawWithInfo=Klienta rēķina numurs ar tiešā debeta maksājuma uzdevumu, kurā ir norādīta informācija par bankas kontu
     InvoiceWaitingWithdraw=Invoice waiting for direct debit
     AmountToWithdraw=Summa atsaukt
    -WithdrawsRefused=Direct debit refused
    +WithdrawsRefused=Tiešais debets noraidīts
     NoInvoiceToWithdraw=Netika gaidīts neviens klienta rēķins ar atvērtiem tiešā debeta pieprasījumiem. Rēķina kartē dodieties uz cilni "%s", lai iesniegtu pieprasījumu.
     ResponsibleUser=Atbildīgais lietotājs
     WithdrawalsSetup=Tiešā debeta maksājuma iestatīšana
    @@ -26,8 +26,8 @@ LastWithdrawalReceipt=Jaunākie %s tiešā debeta ieņēmumi
     MakeWithdrawRequest=Izveidojiet tiešā debeta maksājumu pieprasījumu
     WithdrawRequestsDone=%s reģistrēti tiešā debeta maksājumu pieprasījumi
     ThirdPartyBankCode=Trešās puses bankas kods
    -NoInvoiceCouldBeWithdrawed=Nav veiksmīgi izņemts rēķins. Pārbaudiet, vai rēķini ir uz uzņēmumiem ar derīgu noklusējuma BAN un ka BAN ir RUM ar režīmu <strong> %s </ strong>.
    -ClassCredited=Klasificēt kredītus
    +NoInvoiceCouldBeWithdrawed=Netika veiksmīgi norakstīts rēķins. Pārbaudiet, vai rēķini ir norādīti uzĦēmumiem ar derīgu IBAN un IBAN ir UMR (unikālas pilnvaras atsauce) ar režīmu <strong> %s </strong>.
    +ClassCredited=Klasificēt kreditēts
     ClassCreditedConfirm=Vai tiešām vēlaties klasificēt šo atsaukuma kvīti kā kredītu jūsu bankas kontā?
     TransData=Darījuma datums
     TransMetod=Darījuma veids
    diff --git a/htdocs/langs/mk_MK/admin.lang b/htdocs/langs/mk_MK/admin.lang
    index 26e1fdc3347..83a7073148c 100644
    --- a/htdocs/langs/mk_MK/admin.lang
    +++ b/htdocs/langs/mk_MK/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=Unknown
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/mk_MK/companies.lang b/htdocs/langs/mk_MK/companies.lang
    index b3e1e7b6c86..e5de5614886 100644
    --- a/htdocs/langs/mk_MK/companies.lang
    +++ b/htdocs/langs/mk_MK/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Company
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Closed
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/mk_MK/errors.lang b/htdocs/langs/mk_MK/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/mk_MK/errors.lang
    +++ b/htdocs/langs/mk_MK/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/mk_MK/interventions.lang b/htdocs/langs/mk_MK/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/mk_MK/interventions.lang
    +++ b/htdocs/langs/mk_MK/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/mk_MK/main.lang b/htdocs/langs/mk_MK/main.lang
    index f4e70a13aa4..9dda1818253 100644
    --- a/htdocs/langs/mk_MK/main.lang
    +++ b/htdocs/langs/mk_MK/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Other
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/mk_MK/other.lang b/htdocs/langs/mk_MK/other.lang
    index 8ef8cc30090..e8cd9b78d2f 100644
    --- a/htdocs/langs/mk_MK/other.lang
    +++ b/htdocs/langs/mk_MK/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/mk_MK/projects.lang b/htdocs/langs/mk_MK/projects.lang
    index e04f28689a1..aadd8b446df 100644
    --- a/htdocs/langs/mk_MK/projects.lang
    +++ b/htdocs/langs/mk_MK/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/mn_MN/admin.lang b/htdocs/langs/mn_MN/admin.lang
    index d7042e784dc..08508d4e6e8 100644
    --- a/htdocs/langs/mn_MN/admin.lang
    +++ b/htdocs/langs/mn_MN/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=Unknown
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/mn_MN/companies.lang b/htdocs/langs/mn_MN/companies.lang
    index b3e1e7b6c86..e5de5614886 100644
    --- a/htdocs/langs/mn_MN/companies.lang
    +++ b/htdocs/langs/mn_MN/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Company
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Closed
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/mn_MN/errors.lang b/htdocs/langs/mn_MN/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/mn_MN/errors.lang
    +++ b/htdocs/langs/mn_MN/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/mn_MN/interventions.lang b/htdocs/langs/mn_MN/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/mn_MN/interventions.lang
    +++ b/htdocs/langs/mn_MN/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/mn_MN/main.lang b/htdocs/langs/mn_MN/main.lang
    index ea2e4bee29c..50b93cb6048 100644
    --- a/htdocs/langs/mn_MN/main.lang
    +++ b/htdocs/langs/mn_MN/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Other
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/mn_MN/other.lang b/htdocs/langs/mn_MN/other.lang
    index 8ef8cc30090..e8cd9b78d2f 100644
    --- a/htdocs/langs/mn_MN/other.lang
    +++ b/htdocs/langs/mn_MN/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/mn_MN/projects.lang b/htdocs/langs/mn_MN/projects.lang
    index e04f28689a1..aadd8b446df 100644
    --- a/htdocs/langs/mn_MN/projects.lang
    +++ b/htdocs/langs/mn_MN/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/nb_NO/admin.lang b/htdocs/langs/nb_NO/admin.lang
    index ce81665069d..bf3a34128a9 100644
    --- a/htdocs/langs/nb_NO/admin.lang
    +++ b/htdocs/langs/nb_NO/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Utviklingsversjon
     VersionUnknown=Ukjent
     VersionRecommanded=Anbefalt
     FileCheck=Filintegritetssjekker
    -FileCheckDesc=Dette verktøyet lar deg sjekke integriteten av filer og oppsett av programmet ved å sammenligne hver fil med de offisielle. Verdien av noen konstanter kan også sjekkes. Du kan bruke dette verktøyet til å oppdage om noen filer ble endret av f.eks hackere
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Filintegriteter er strengt dannet med referansen.
    -FileIntegrityIsOkButFilesWereAdded=Fil-integritetssjekk ble godkjent, men noen nye filer ble lagt til.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Filintegritetssjekk mislyktes. Noen filer ble endret, fjernet eller lagt til.
     GlobalChecksum=Global sjekksum
     MakeIntegrityAnalysisFrom=Opprett integritetsanalyse av applikasjonsfiler fra
    @@ -30,14 +30,14 @@ SessionSaveHandler=Håndterer for å lagre sesjoner
     SessionSavePath=Sted for lagring av økt 
     PurgeSessions=Utrenskning av øktene
     ConfirmPurgeSessions=Vil du virkelig rense alle økter? Dette vil frakoble alle brukere (bortsett fra deg selv).
    -NoSessionListWithThisHandler=Øktlagrings-behandleren i PHP tillater ikke å vise alle kjørende økter.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lås nye tilkoblinger
    -ConfirmLockNewSessions=Er du sikker på at du vil begrense eventuelle nye Dolibarr tilkoblinger til deg selv?. Bare brukeren <b>%s</b> vil kunne koble til etter det.
    +ConfirmLockNewSessions=Er du sikker på at du vil begrense en ny Dolibarr-forbindelse til deg selv? Kun brukeren <b> %s </b> vil kunne koble til etter det.
     UnlockNewSessions=Fjern forbindelseslås
     YourSession=Din økt
    -Sessions=Brukerøkter
    +Sessions=Brukers økter
     WebUserGroup=Webserver bruker/gruppe
    -NoSessionFound=Din PHP synes å ikke tillate å liste aktive økter. Mappen brukt til å lagre økter <b>(%s)</b> kan være beskyttet (for eksempel etter OS tillatelser eller PHP direktiv open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Databasetegnsett for lagring av data
     DBSortingCharset=Databasetegnsett for sortering av data
     ClientCharset=Klien karaktersett
    @@ -50,7 +50,7 @@ ExternalUser=Ekstern bruker
     InternalUsers=Interne brukere
     ExternalUsers=Eksterne brukere
     GUISetup=Visning
    -SetupArea=Oppsettsområde
    +SetupArea=Oppsett
     UploadNewTemplate=Last opp ny mal(er)
     FormToTestFileUploadForm=Skjema for å teste opplasting (i henhold til oppsett)
     IfModuleEnabled=Merk: Ja er bare effektiv hvis modulen <b>%s</b> er aktivert
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Koden kan ikke inneholde verdien 0
     DisableJavascript=Deaktiver JavaScript og Ajax funksjoner (Anbefalt for tekstbaserte nettlesere og blinde)
     UseSearchToSelectCompanyTooltip=Hvis du har et stort antall tredjeparter (> 100 000), kan du øke hastigheten ved å sette konstant COMPANY_DONOTSEARCH_ANYWHERE til 1 i Oppsett-> Annet. Søket vil da være begrenset til starten av strengen.
     UseSearchToSelectContactTooltip=Hvis du har et stort antall tredjeparter (> 100 000), kan du øke hastigheten ved å sette konstant CONTACT_DONOTSEARCH_ANYWHERE til 1 i Oppsett-> Annet. Søket vil da være begrenset til starten av strengen.
    -DelaiedFullListToSelectCompany=Vent med å trykke på en tast før innholdet av tredjepart-kombinasjonslisten er lastet (Dette kan øke ytelsen hvis du har mange tredjeparter)
    -DelaiedFullListToSelectContact=Vent med å trykke på en tast før innholdet av kontakt-kombinasjonslisten er lastet (Dette kan øke ytelsen hvis du har mange kontakter)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Antall tegn for å starte søk: %s
     NotAvailableWhenAjaxDisabled=Ikke tilgjengelig når Ajax er slått av
     AllowToSelectProjectFromOtherCompany=På elementer av en tredjepart, kan du velge et prosjekt knyttet til en annen tredjepart
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Forhåndsvisning ikke tilgjengelig
     ThemeCurrentlyActive=Gjeldende tema
     CurrentTimeZone=Tidssone for PHP (server)
     MySQLTimeZone=Tidssone MySql (database)
    -TZHasNoEffect=Datoer lagres og returneres av databaseserver som innsendt streng. Tidssonen har kun effekt ved bruk av UNIX_TIMESTAMP funksjon (som ikke bør brukes av Dolibarr, slik database TZ ikke skal ha noen effekt, selv om den ble endret etter at data ble lagt inn).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Mellomrom
     Table=Tabell
     Fields=Felt
    @@ -111,14 +111,14 @@ NotConfigured=Modul/applikasjon ikke konfigurert
     Active=Aktiv
     SetupShort=Oppsett
     OtherOptions=Andre innstillinger
    -OtherSetup=Andre innstillinger
    +OtherSetup=Annet oppsett
     CurrentValueSeparatorDecimal=Desimaltegn
     CurrentValueSeparatorThousand=Tusenskille
     Destination=Mål
     IdModule=Modul ID
     IdPermissions=Rettigheter ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Språkparametere for Dolibarr
    +LocalisationDolibarrParameters=Lokaliseringsparametere
     ClientTZ=Tidssone (bruker)
     ClientHour=Klienttid (bruker)
     OSTZ=Server OS Tidssone
    @@ -126,8 +126,8 @@ PHPTZ=Tidssone PHP-server
     DaylingSavingTime=Sommertid
     CurrentHour=PHP tid (server)
     CurrentSessionTimeOut=Gjeldende økt-timeout
    -YouCanEditPHPTZ=For å angi en annen PHP tidssone (ikke nødvendig), kan du prøve å legge til en fil .htaccess med en linje som denne "SetEnv TZ Europe/Oslo"
    -HoursOnThisPageAreOnServerTZ=Advarsel, i motsetning til andre skjermer, er timer på denne siden ikke i din lokale tidssone, men i tidssonen til serveren.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgeter
     MaxNbOfLinesForBoxes=Maks. antall linjer for widgeter
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignorer feil ved postduplisering (INSERT IGNORE)
     AutoDetectLang=Auto-oppdag (nettleserspråk)
     FeatureDisabledInDemo=Funksjonen er slått av i demo
     FeatureAvailableOnlyOnStable=Egenskapen er kun tilgjengelig på offisielle, stabile versjoner
    -BoxesDesc=Widgeter er komponenter som viser litt informasjon som du kan legge til for å tilpasse enkelte sider. Du kan velge mellom å vise widgeten eller ikke ved å velge målside og klikke på 'Aktiver', eller ved å klikke på søppelkassen for å deaktivere den.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Bare elementer fra <a href="%s">aktiverte moduler</a> vises.
    -ModulesDesc=Dolibarr-moduler definerer hvilken applikasjon/funksjon som er aktivert i programvaren. Enkelte applikasjoner/moduler krever tillatelser du må gi til brukere, etter at du har aktivert dem. Klikk på knappen på/av for å aktivere en modul/applikasjon.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Du kan finne flere moduler for nedlasting på eksterne nettsteder.
    -ModulesDeployDesc=Hvis tillatelser for filsystemet tillater det, kan du bruke dette verktøyet til å distribuere en ekstern modul. Modulen vil da være synlig under fanen <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Finn eksterne apper/moduler
     ModulesDevelopYourModule=Utvikle dine egen apper/moduler
    -ModulesDevelopDesc=Du kan utvikle eller finne en partner for å utvikle din personlige modul,
    -DOLISTOREdescriptionLong=I stedet for å slå på <a href="https://www.dolistore.com"> www.dolistore.com </a> nettstedet for å finne en ekstern modul, kan du bruke dette innebygde verktøyet til å utføre søkingen på eksternt marked for deg (kan være tregt, trenger Internett-tilgang) ...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Ny
     FreeModule=Gratis
     CompatibleUpTo=Kompatibel med versjon %s
    @@ -211,8 +211,8 @@ Nouveauté=Nyhet
     AchatTelechargement=Kjøp/Last ned
     GoModuleSetupArea=For å distribuere/installere en ny modul, gå til området for Moduloppsett på <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, den offisielle markedsplassen for eksterne moduler til Dolibarr ERP/CRM 
    -DoliPartnersDesc=Liste over selskaper som tilbyr spesialtilpassede moduler og funksjoner (Merk: Erfarne PHP-programmerere kan gi tilpasset utvikling for åpen kildekode)
    -WebSiteDesc=Referansesider for å finne flere moduler.
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Noen løsninger for å utvikle din egen modul...
     URL=Lenke
     BoxesAvailable=Tilgjengelige widgeter
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Lagrer passord i krypert form og ikke i klartekst (Aktiv
     MainDbPasswordFileConfEncrypted=Databasepassord kryptert i conf.php (Aktivering anbefales)
     InstrucToEncodePass=For å kryptere passordet i <b>conf.php</b> , bytt ut linjen <br><b>$dolibarr_main_db_pass="...";</b><br>med<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=For passord i klartekst(helst ikke) i <b>conf.php</b> , bytt ut linjen <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>med<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Beskytt genererte pdf-filer (anbefales ikke, fjerner mulighet for massegenerering av PDF'er)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Beskyttelse av et PDF-dokument gjør det tilgjengelig for å lese og skrive det ut med hvilken som helst PDF-leser. Det er imidlertid ikke mulig å redigere og kopiere. Legg merke til at bruk av denne funksjonen gjør det mulig å bygge en globalt sammensatt PDF-fil som ikke fungerer.
     Feature=Funksjon
     DolibarrLicense=Lisens
    @@ -246,8 +246,8 @@ ExternalResources=Eksterne ressurser
     SocialNetworks=Sosiale nettverk
     ForDocumentationSeeWiki=For bruker- eller utviklerdokumentasjon (Doc, FAQs ...), <br> ta en titt på Dolibarr Wiki: <br> <a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=For andre spørsmål/hjelp, kan du bruke Dolibarr forumet: <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=Dette området kan hjelpe deg å få support-tjeneste med Dolibarr.
    -HelpCenterDesc2=Enkelte deler av denne tjenesten er <b>kun</b> tilgjengelig på <b>engelsk.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Gjeldende menyen behandler
     MeasuringUnit=Måleenhet
     LeftMargin=Venstremarg
    @@ -262,31 +262,35 @@ NoticePeriod=Oppsigelsestid
     NewByMonth=Ny etter måned
     Emails=Epost
     EMailsSetup=Oppsett av e-post
    -EMailsDesc=Denne siden lar deg overskrive PHP-parametrene for sending av e-post. I de fleste tilfeller på Unix/Linux OS er PHP-oppsettet ditt riktig og disse parameterne er ubrukelige.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=E-postsender-profiler
    -MAIN_MAIL_SMTP_PORT=SMTP-port (Standard i php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP-server (Standard i php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP-port (Settes ikke i PHP på Unix/Linux)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP-server (Settes ikke i PHP på Unix/Linux)
    -MAIN_MAIL_EMAIL_FROM=Avsender-e-post for automatiske e-poster (Som standard i php.ini: <b> %s</b>)
    -MAIN_MAIL_ERRORS_TO=Epost brukt til returnerte epostmeldinger (felt 'Feil-til' i e-postmeldinger sendt)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematisk en skjult karbon-kopi av alle sendte e-post til
    -MAIN_DISABLE_ALL_MAILS=Deaktiver alle e-postmeldinger (for testformål eller demoer)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send alle e-post til (i stedet for ekte mottakere, til testformål)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Legg til ansatte brukere med epost i tillatt mottaker-liste
    -MAIN_MAIL_SENDMODE=Metode for å sende e-post
    -MAIN_MAIL_SMTPS_ID=SMTP-ID hvis godkjenning kreves
    -MAIN_MAIL_SMTPS_PW=SMTP-passord hvis godkjenning kreves
    -MAIN_MAIL_EMAIL_TLS= Bruk TLS (SSL) kryptering
    -MAIN_MAIL_EMAIL_STARTTLS= Bruk TLS (STARTTL) kryptering
    -MAIN_DISABLE_ALL_SMS=Deaktiver alle SMS sendings (for testformål eller demoer)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Metode for å sende SMS
    -MAIN_MAIL_SMS_FROM=Standard avsender telefonnummer for sending av SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Standard sender e-post som for manuelle sendinger (bruker e-post eller firmanavn)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Bruker-epost
     CompanyEmail=Firma-epost
     FeatureNotAvailableOnLinux=Funksjonen er ikke tilgjengelig på Unix/Linux. Test sendmail lokalt.
    -SubmitTranslation=Hvis oversettelsen for dette språket ikke er fullstendig eller du finner feil, kan du rette opp dette ved å redigere filene i katalogen <b>langs/%s</b> og sende endrede filer til www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Hvis oversettelse for dette språket ikke er fullstendig eller du finner feil, kan du korrigere dette ved å redigere filer i katalogen <b>langs/%s</b> og sende endrede filer på dolibarr.org/forum eller for utviklere på github.com/Dolibarr/dolibarr.
     ModuleSetup=Modulinnstillinger
     ModulesSetup=Moduler/Applikasjonsoppsett
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Ikke bruk i produksjon
     ThisIsProcessToFollow=Disse skrittene må gjennomføres:
     ThisIsAlternativeProcessToFollow=Dette er et alternativt oppsett for manuell behandling:
     StepNb=Trinn %s
    -FindPackageFromWebSite=Finn en pakke som inneholder funksjonen du vil bruke (for eksempel på nettsider %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Last ned pakke (for eksempel fra den offisielle websiden %s).
    -UnpackPackageInDolibarrRoot=Pakk ut filene til serverkatalogen til Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=For å distribuere/installere en ekstern modul, pakk ut filene i servermappen dedikert for moduler: <b>%s</b>
    -SetupIsReadyForUse=Moduldistribusjon er ferdig. Du må imidlertid aktivere og sette opp modulen i programmet ved å gå til siden: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=Alternativ rotkatalog er ikke definert til en eksisterende katalog.<br>
     InfDirAlt=Fra versjon 3 er det mulig å definere en alternativ rotkatalog. Dette gjør det mulig å lagre plug-ins og egendefinerte maler.<br>Opprett en katalog i roten til Dolibarr (f.eks min katalog).<br>
     InfDirExample=<br> Deklarer det i filen <strong>conf.php</strong> <br> $ dolibarr_main_url_root_alt='/custom' <br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/tilpasset' <br> Hvis disse linjene er kommentert med "#", er det bare å fjerne tegnet "#" for å aktivere linjene.
    -YouCanSubmitFile=For dette trinnet kan du sende inn .zip-filen til modulpakken her:
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Gjeldende versjon av Dolibarr 
     CallUpdatePage=Gå til siden som oppdaterer data og databasestruktur: %s.
     LastStableVersion=Siste stabile versjon
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Ta en titt på wikisiden for en fullstendig liste over alle de
     UseACacheDelay= Forsinkelse for cache eksport respons i sekunder (0 eller tom for ingen cache)
     DisableLinkToHelpCenter=Skjul linken <b>"Trenger du hjelp eller støtte"</b> på innloggingssiden
     DisableLinkToHelp=Skjul lenke til online hjelp "<b>%s</b>"
    -AddCRIfTooLong=Det er ingen automatisk linjeskift, så hvis linjene er for lange og når ut av siden på dokumenter, må du legge til vognreturer i tekstfeltet.
    -ConfirmPurge=Er du sikker på at du vil kjøre denne rensingen?<br> Det vil føre til at alle datafiler blir slettet, uten at du kan hente dem tilbake (ECM-filer, vedlegg...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum lengde
     LanguageFilesCachedIntoShmopSharedMemory=Filer .lang lastet i delt minne
     LanguageFile=Språkfil
    -ExamplesWithCurrentSetup=Eksempler med gjeldende oppsett
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Liste over OpenDocument-mapper med maler
     ListOfDirectoriesForModelGenODT=Liste over kataloger som inneholder mal-filer med Opendocument format.<br><br>Sett inn hele banen til kataloger her.<br>Legg til et linjeskift mellom hver katalog.<br>For å legge til en katalog av GED modulen, legg til <b>DOL_DATA_ROOT/ECM/dittkatalognavn her</b>. <br><br>Filer i disse katalogene må slutte med <b>.odt</b> eller <b>.ods</b>.
    -NumberOfModelFilesFound=Antall ODT / ODS maler filer som finnes i disse mappene
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Eksempler på syntaks:<br>c:\\mydir<br>/Home/mydir<br>DOL_DATA_ROOT/ECM/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>For å lære hvordan du oppretter ODT dokumentmaler, og før du lagrer dem, les wiki-dokumentasjon:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Nøkkel til bruk Web Services (parameter "dolibarrkey" i
     TestSubmitForm=Utfylling testskjema
     ThisForceAlsoTheme=Når denne menyen er i bruk vil den velge tema uansett hva brukeren har valgt. Denne menyen er spesialisert for smarttelefoner, men fungerer ikke på alle smarttelefoner. Bruk en annen meny manager hvis du opplever problemer.
     ThemeDir=Skins-mappe
    -ConnectionTimeout=Tidsavbrudd for tilkobling
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Respons tidsavbrudd
     SmsTestMessage=Test melding fra __ PHONEFROM__ til __ PHONETO__
     ModuleMustBeEnabledFirst=Modulen <b>%s</b> må aktiveres før du kan bruke denne egenskapen.
     SecurityToken=Nøkkel til sikre nettadresser
    -NoSmsEngine=Ingen SMS avsender tilgjengelig. SMS håndterer er ikke installert med standardinstallasjon (fordi de er avhengig av en ekstern leverandør), men du kan finne noen på %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Du kan angi globale alternativer relatert til PDF-generering
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Regler for å lage adressebokser
     HideAnyVATInformationOnPDF=Skjul all informasjon relatert til Salgsskatt/MVA på generert PDF
     PDFRulesForSalesTax=Regler for salgsskatt/mva
     PDFLocaltax=Regler for %s
    -HideLocalTaxOnPDF=Skjul %s rente i pdf kolonne 
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Skjul varebeskrivelse på generert PDF
     HideRefOnPDF=Skjul varereferanse på generert PDF
     HideDetailsOnPDF=Skjul linjer med varedetaljer på genererte PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametre for å sikre nettadresser
     SecurityTokenIsUnique=Bruk en unik securekey parameter for hver webadresse
     EnterRefToBuildUrl=Oppgi referanse for objekt %s
     GetSecuredUrl=Få beregnet URL
    -ButtonHideUnauthorized=Skjul knapper for brukere uten administratorrettigheter i stedet for å vise dem som grå
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Gammel MVA-sats
     NewVATRates=Ny MVA-sats
     PriceBaseTypeToChange=Endre på prisene med base referanseverdi definert på
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Velg liste
     ExtrafieldSelectList = Velg fra tabell
     ExtrafieldSeparator=Separator (ikke et felt)
     ExtrafieldPassword=Passord
    -ExtrafieldRadio=Radioknapper (kun på valg)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Sjekkbokser
     ExtrafieldCheckBoxFromList=Avkrysningsbokser fra tabell
     ExtrafieldLink=Lenke til et objekt
     ComputedFormula=Beregnet felt
     ComputedFormulaDesc=Her kan du skrive inn en formel ved hjelp av andre objektegenskaper eller PHP-koding for å få en dynamisk beregningnet verdi. Du kan bruke PHP-kompatible formler, inkludert "?" operator og følgende globale objekt: <strong> $db, $conf, $langs, $mysoc, $user, $objekt </strong>. <br><br><Strong> ADVARSEL </strong>: Kanskje bare noen egenskaper på $objekt er tilgjengelig. Hvis du trenger egenskaper som ikke er lastet, kan du bare hente objektet i formelen din som i det andre eksempelet. <br> Ved å bruke et beregnet felt betyr det at du ikke selv kan angi noen verdi fra grensesnittet. Også, hvis det er en syntaksfeil, kan det hende formelen ikke returnerer noe. <br> <br> Eksempel på formel: <br> $objekt->id<10? round ($object->id / 2, 2) : ($object-> id + 2 *$user->id) * (int) substr($mysoc->zip, 1, 2) <br> <br> Eksempel på å ny innlasting av objekt <br> (($reloadedobj = new Societe ($db)) && ($reloadedobj->fetch($obj-> id? $ obj-> id: ($obj-> rowid? $obj-> rowid: $object-> id))> 0))? $reloadedobj-> array_options ['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1' <br> <br> Annet eksempel på formel for å tvinge lasting av objekt og dets overordnede objekt: <br> (($reloadedobj = Ny oppgave ($db)) && ($reloadedobj->fetch($objekt->id)> 0) && ($secondloadedobj = nytt prosjekt ($db)) && ($secondloadedobj->fetch($reloadedobj-> fk_project )> 0))? $secondloadedobj-> ref: 'Foreldreprosjekt ikke funnet'
    -ExtrafieldParamHelpPassword=Hold dette feltet tomt betyr at verdien vil bli lagret uten kryptering (feltet må bare skjules med stjerne på skjermen). <br> Her angir du verdien 'auto' for å bruke standard krypteringsregel for å lagre passordet i databasen (da vil lest verdi kun være hash-innholdet og ingen måte å lese den opprinnelige verdien)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=Liste over verdier må være linjer med formatet nøkkel,verdi (hvor nøkkelen ikke kan være '0')<br><br>for eksempel:<br>1,verdi1<br>2,verdi2<br>kode3,verdi3<br>...<br><br>For å få listen avhengig av en annen komplementær attributtliste:<br>1,verdi1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>: parent_key<br><br>For å få listen avhengig av en annen liste:<br>1,verdi1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code </i>: parent_key
     ExtrafieldParamHelpcheckbox=Liste over verdier må være linjer med formatet nøkkel,verdi (hvor nøkkelen ikke kan være '0')<br><br>for eksempel:<br>1,verdi1 <br>2,verdi2<br>3,verdi3<br> ...
     ExtrafieldParamHelpradio=Liste over verdier må være linjer med formatet nøkkel,verdi (hvor nøkkelen ikke kan være '0')<br><br>for eksempel:<br>1,verdi1 <br>2,verdi2<br>3,verdi3<br> ...
    @@ -432,39 +436,39 @@ DefaultLink=Standard kobling
     SetAsDefault=Sett som standard
     ValueOverwrittenByUserSetup=Advarsel, denne verdien kan bli overskrevet av brukerspesifikke oppsett (hver bruker kan sette sitt eget clicktodial url)
     ExternalModule=Ekstern modul - Installert i katalog %s
    -BarcodeInitForThirdparties=Masseinitiering av strekkoder for tredjeparter
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Masseinitiering eller sletting av strekkoder for varer og tjenester
     CurrentlyNWithoutBarCode=For øyeblikket har du <strong>%s</strong> poster på <strong>%s</strong> %s uten strekkode.
     InitEmptyBarCode=Startverdi for neste %s tomme post
     EraseAllCurrentBarCode=Slett alle gjeldende strekkode-verdier
     ConfirmEraseAllCurrentBarCode=Er du sikker på at du vil slette alle nåværende strekkodeverdier?
     AllBarcodeReset=Alle strekkode-verdier er blitt slettet
    -NoBarcodeNumberingTemplateDefined=Ingen mal for strekkodenummerering er aktivert strekkodemodulen
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Aktiver fil-cache
     ShowDetailsInPDFPageFoot=Legg til flere detaljer i bunnteksten av PDF-filer, som din firmaadresse eller leder (for å komplettere profesjonelle IDer, selskapskapital og MVA-nummer).
     NoDetails=Ingen flere detaljer i bunntekst
     DisplayCompanyInfo=Vis firmaadresse
     DisplayCompanyManagers=Vis ledernavn
     DisplayCompanyInfoAndManagers=Vis firmaadresser og ledernavn
    -EnableAndSetupModuleCron=Hvis du ønsker at gjentakende fakturaer skal genereres automatisk, må modulen *%s* være aktivert og riktig konfigurert. Ellers må generering av fakturaer gjøres manuelt fra denne malen med knapp *Lag*. Merk at selv om du har aktivert automatisk generering, kan du likevel trygt starte manuell generasjon. Generering av duplikater for samme periode er ikke mulig.
    -ModuleCompanyCodeCustomerAquarium=%s etterfulgt av tredjeparts kundekode for en kunderegnskapskode
    -ModuleCompanyCodeSupplierAquarium=%s etterfulgt av tredjepart leverandørkode for en leverandør-regnskapskode
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Returner en tom regnskapskode.
     ModuleCompanyCodeDigitaria=Regnskapskode avhenger av tredjepartskode. Koden består av tegnet "C" i den første stillingen etterfulgt av de første 5 tegnene til tredjepartskoden.
     Use3StepsApproval=Som standard må innkjøpsordrer opprettes og godkjennes av 2 forskjellige brukere (ett trinn/bruker for å opprette og ett trinn/bruker for å godkjenne. Merk at hvis brukeren har både tillatelse til å opprette og godkjenne, vil ett trinn/ bruker vil være nok). Du kan bruke dette alternativet for å innføre et tredje trinn/bruker godkjenning, hvis beløpet er høyere enn en spesifisert verdi (så vil 3 trinn være nødvendig: 1=validering, 2=første godkjenning og 3=andre godkjenning dersom beløpet er høyt nok). <br> Sett denne tom en godkjenning (2 trinn) er nok, sett den til en svært lav verdi (0,1) hvis det alltid kreves en andre godkjenning (3 trinn).
     UseDoubleApproval=Bruk 3-trinns godkjennelse når beløpet (eks. MVA) er høyere enn...
    -WarningPHPMail=ADVARSEL: Det er ofte bedre å sette utgående eposter til å bruke epostserveren til leverandøren din i stedet for standardoppsettet. Noen epostleverandører (som Yahoo) tillater ikke at du sender en epost fra en annen server enn deres egen server. Ditt nåværende oppsett bruker serveren i programmet til å sende epost og ikke serveren til epostleverandøren din, så noen mottakere (den som er kompatibel med den restriktive DMARC-protokollen), vil spørre epostleverandøren din om de kan godta eposten din og noen epostleverandører (som Yahoo) kan svare "nei" fordi serveren ikke er en deres servere, så få av dine sendte e-poster kan ikke aksepteres (vær også oppmerksom på epostleverandørens sendekvote). <br> Hvis din epostleverandør (som Yahoo) har denne begrensningen, må du endre epostoppsett til å velge den andre metoden "SMTP-server" og angi SMTP-serveren og legitimasjonene som tilbys av epostleverandøren din (spør epostleverandøren din for å få SMTP-legitimasjon for kontoen din).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=Hvis din epost-SMTP-leverandør må begrense epostklienten til noen IP-adresser (svært sjelden), er dette IP-adressen til epost-brukeragenten (MUA) for ERP CRM-programmet: <strong> %s </strong>.
     ClickToShowDescription=Klikk for å vise beskrivelse
    -DependsOn=Denne modulen trenger modulen(ene)
    +DependsOn=This module needs the module(s)
     RequiredBy=Denne modulen er påkrevd av modul(ene)
    -TheKeyIsTheNameOfHtmlField=Dette er navnet på HTML-feltet. Dette må ha tekniske egenskaper for å lese innholdet på HTML-siden for å få nøkkelnavnet til et felt.
    -PageUrlForDefaultValues=Du må skrive inn den relative nettadressen til siden. Hvis du inkluderer parametere i URL, vil standardverdiene være effektive hvis alle parametere er satt til samme verdi. Eksempler:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br> For skjema for å lage en ny tredjepart, er det <strong> %s</strong>, <br> Hvis du bare vil ha standardverdi hvis url har noen parameter, kan du bruke <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br> For side som viser tredjeparter, er det <strong>%s</strong>,<br>Hvis du bare vil ha standardverdi hvis url har noen parametre, kan du bruke<strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Aktiver bruk av personlige standardverdier
    -EnableOverwriteTranslation=Aktiver bruk av overskrivende oversettelse
    -GoIntoTranslationMenuToChangeThis=En oversettelse har blitt funnet for nøkkelen med denne koden, så for å endre denne verdien må du redigere den fra Home-Setup-Oversettelse.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Advarsel, å angi en standard sorteringsrekkefølge kan føre til en teknisk feil når du går på listesiden dersom feltet er et ukjent felt. Hvis du opplever en slik feil, kan du komme tilbake til denne siden for å fjerne standard sorteringsrekkefølge og gjenopprette standardoppførsel.
     Field=Felt
     ProductDocumentTemplates=Dokumentmaler for å generere produktdokument
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agendapåminnelser via e-post
     davDescription=Legg til en komponent for å være en DAV-server
     DAVSetup=Oppsett av DAV-modulen
     DAV_ALLOW_PUBLIC_DIR=Aktiver den offentlige katalogen (WebDav-katalog uten innlogging kreves)
    -DAV_ALLOW_PUBLIC_DIRTooltip=WebDavs offentlige katalog er en WebDAV-katalog som alle kan få tilgang til (i lese- og skrivemodus), uten å måtte ha/bruke en eksisterende påloggings-/passordkonto.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Brukere & grupper
    +Module0Name=Brukere og grupper
     Module0Desc=Håndtering av Brukere/Ansatte og Grupper
    -Module1Name=Tredjeparter
    +Module1Name=Third Parties
     Module1Desc=Behandling av bedrifter og kontaktpersoner
     Module2Name=Handel
     Module2Desc=Behandling av handelsfunksjoner
     Module10Name=Regnskap
    -Module10Desc=Enkle regnskapsrapporter (tidsskrifter, omsetning) basert på databaseinnhold. Bruker ikke en hovedbok.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Tilbud
     Module20Desc=Behandling av tilbud
     Module22Name=E-postutsendelser
    @@ -511,13 +517,13 @@ Module52Desc=Behandling av lagerbeholdning
     Module53Name=Tjenester
     Module53Desc=Behandling av tjenester
     Module54Name=Kontrakter/abonnement
    -Module54Desc=Administrasjon av  kontrakter (tjenester og abonnementer)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Strekkoder
     Module55Desc=Behandling av strekkoder
     Module56Name=Telefoni
     Module56Desc=Telefoniintegrasjon
     Module57Name=Direktedebet betalingsordre
    -Module57Desc=Håndtering av direktedebet betalingsordre. Inkluderer generering av SEPA-fil for europeiske land
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=ClickToDial integrasjon
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Reisekostnader og notater
     Module75Desc=Behandling av reisekostnader og notater
     Module80Name=Forsendelser
     Module80Desc=Behandlinger av forsendelser og leveringsordre
    -Module85Name=Banker og kontanter
    +Module85Name=Banks and Cash
     Module85Desc=Behandling av bank- og kassekonti
    -Module100Name=Ekstern side
    -Module100Desc=Ta med en ekstern nettside inn i Dolibarr menyen og se den inn i en ramme i Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman og SPIP
     Module105Desc=Mailman- eller SPIP-grensesnitt for medlemsmodulen
     Module200Name=LDAP
    -Module200Desc=LDAP mappesynkronisering
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integrasjon
     Module240Name=Dataeksport
    -Module240Desc=Verktøy for å eksportere Dolibarr-data (med assistent)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Dataimport
    -Module250Desc=Verktøy for å importere data til Dolibarr (med assistent)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Medlemmer
     Module310Desc=Behandling av organisasjonsmedlemmer
     Module320Name=RSS nyhetsstrøm
     Module320Desc=Legg til RSS nyhetsstrøm på Dolibarrsider
    -Module330Name=Bookmerker
    -Module330Desc=Bokmerkebehandling
    -Module400Name=Prosjekter/Muligheter
    -Module400Desc=Håndtering av prosjekter, muligheter og/eller oppgaver. Du kan også tildele et element (faktura, rekkefølge, forslag, intervensjon, ...) til et prosjekt og få en tverrgående visning fra prosjektvisningen.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webkalender
     Module410Desc=Integrasjon med webkalender
     Module500Name=Skatter og spesialutgifter
     Module500Desc=Håndtering av andre utgifter (salgsskatt, sosiale eller skattemessige skatter, utbytte, ...)
     Module510Name=Betaling av lønn til ansatte
    -Module510Desc=Legg inn og følg betalingen av ansattes lønn
    +Module510Desc=Record and track employee payments
     Module520Name=Lån
     Module520Desc=Administrering av lån
     Module600Name=Varsler om forretningshendelser
    -Module600Desc=Send e-postvarsler (utløst av enkelte forretningshendelser) til brukere (definert for hver bruker), til tredjeparts kontakter (definert for hver tredjepart) eller til faste e-poster
    -Module600Long=Merk at denne modulen er dedikert til å sende sanntids e-post når en dedikert forretningshendelse oppstår. Hvis du leter etter en funksjon for å sende påminnelser via e-post til agendahendelsene dine, går du inn i oppsettet av modulen Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Varevarianter
    -Module610Desc=Tillater opprettelse av varevariant basert på attributter (farge, størrelse, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donasjoner
     Module700Desc=Behandling av donasjoner
     Module770Name=Utgiftsrapporter
    -Module770Desc=Håndtering av utgiftsrapporter (reise, diett, mm)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Leverandørtilbud
     Module1120Desc=Be om leverandørtilbud og priser
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Masse-epost dokumentgenerering
     Module1780Name=Merker/kategorier
     Module1780Desc=Opprett etikett/kategori (varer, kunder, leverandører, kontakter eller medlemmer)
     Module2000Name=WYSIWYG Editor
    -Module2000Desc=Tillater å endre tekstområder med en avansert editor (Basert på CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamiske priser
     Module2200Desc=Aktiver mulighet for matematiske utrykk for å beregne priser
     Module2300Name=Planlagte jobber
     Module2300Desc=Planlagt jobbadministrasjon (alias cron- eller chronotabell)
     Module2400Name=Hendelser/Agenda
    -Module2400Desc=Følg ferdige og kommende hendelser. La applikasjonen logge hendelser automatisk for sporing eller registrer hendelser eller møter manuelt. Dette er den viktigste viktige modulen for en god kunde- eller leverandørforholdsstyring.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Dokumenthåndteringssystem / Elektronisk innholdshåndtering. Automatisk organisering av dine genererte eller lagrede dokumenter. Del dem når du trenger det.
     Module2600Name=API/Web tjenseter(SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Aktiver Dolibarrs SOAP-server for å kunne bruke API-tjenester
     Module2610Name=API/Web tjenester (REST server)
     Module2610Desc=Aktiver Dolibarrs REST-server for å kunne bruke API-tjenester
     Module2660Name=Kall webtjenester (SOAP klient)
    -Module2660Desc=Aktiver Dolibarrs webtjenesteklient (Kan brukes til push data/forespørsler mot eksterne servere. Kun støtte for leverandørordre foreløpig)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Bruk elektronisk Gravatar-tjeneste (www.gravatar.com) for å vise bilde av brukere/medlemmer (funnet med e-post). Du trenger internett-tilgang
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP-klient
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind konverteringsegenskaper
     Module3100Name=Skype
     Module3100Desc=Legg til en Skype-knapp i brukere/tredjeparter/kontakter/medlemskort
     Module3200Name=Uforanderlige arkiver
    -Module3200Desc=Aktiver logg av enkelte forretningsarrangementer i en uforanderlig logg. Hendelser arkiveres i sanntid. Loggen er en tabell med kjedede hendelser som kan leses og eksporteres. Denne modulen kan være obligatorisk for enkelte land.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=HRM (håndtering av avdeling, arbeidskontrakter og personell)
     Module5000Name=Multi-selskap
    @@ -609,27 +615,31 @@ Module6000Desc=Arbeidsflytbehandling (automatisk opprettelse av objekt og/eller
     Module10000Name=Websider
     Module10000Desc=Opprett offentlige nettsteder med en WYSIWG-editor. Bare sett opp webserveren din (Apache, Nginx, ...) for å peke mot den dedikerte Dolibarr-katalogen for å få den online på Internett med ditt eget domenenavn.
     Module20000Name=Administrasjon av ferieforespørsler
    -Module20000Desc=Oppfølging av ansattes ferieforespørsler
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Varelotter
     Module39000Desc=Oppsett av lot eller serienummer, best før og siste forbruksdag på varer
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Modul for å tilby en online betalingsside som godtar betalinger med kreditt-/debetkort via PayBox. Dette kan brukes til å la kundene utføre gratis betalinger eller for betaling på et bestemt Dolibarr-objekt (faktura, bestilling, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Kassaapparat
     Module50100Desc=Salgssted-modul (POS).
    +Module50150Name=Kassaapparat
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Modul for å tilby en online betalingsside som godtar betaling ved hjelp av PayPal (kredittkort eller PayPal-kreditt). Dette kan brukes til å la kundene utføre gratis betalinger eller for betaling på et bestemt Dolibarr-objekt (faktura, bestilling, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Regnskap (avansert)
    -Module50400Desc=Regnskapsadministrasjon (dobbeltoppføringer, generell støtte og ekstra regnskapsbøker). Eksporter hovedboken til flere formater.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direkteutskrift (uten å åpne dokumentet)ved hjelp av CUPS IPP inteface (Skriveren må være synlig for serveren, og CUPS må være installert på serveren)
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Meningsmåling, undersøkelse eller avstemming
    -Module55000Desc=Modul for å lage meningsmåling, undersøkelse eller avstemming ( som Doodle, Studs, Rdvz, m.m)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marginer
     Module59000Desc=Modul for å administrere marginer
     Module60000Name=Provisjoner
     Module60000Desc=Modul for å administrere provisjoner
    -Module62000Name=Incoterm
    -Module62000Desc=Legg til egenskaper for å administrere Incoterm
    +Module62000Name=Incotermer
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Ressurser
     Module63000Desc=Håndter ressurser (skrivere, biler, rom,..). Etterpå kan du legge dem til hendelser
     Permission11=Vis kundefakturaer
    @@ -651,9 +661,9 @@ Permission32=Opprett/endre varer
     Permission34=Slett varer
     Permission36=Se/administrer skjulte varer
     Permission38=Eksporter varer
    -Permission41=Les prosjekter og oppgaver (delt prosjekt og prosjekter jeg er kontakt for). Kan også skrive inn tidsforbruk for meg eller mitt hierarki, på tildelte oppgaver (Tidsskjema)
    -Permission42=Opprett/endre prosjekter (delte prosjekter og de jeg er kontakt for). Kan også opprette oppgaver og tildele prosjekter og oppgaver til brukere.
    -Permission44=Slett prosjekter (delte og mine egne)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Eksporter prosjekter
     Permission61=Vis intervensjoner
     Permission62=Opprett/endre intervensjoner
    @@ -686,7 +696,7 @@ Permission109=Slett forsendelser
     Permission111=Vis kontoutdrag
     Permission112=Opprett/endre/slett og sammenligne transaksjoner
     Permission113=Oppsett av finanskontoer (Opprett, håndter kategorier)
    -Permission114=Avstemming av transaksjoner
    +Permission114=Reconcile transactions
     Permission115=Eksportere transaksjoner og kontoutdrag
     Permission116=Overføringer mellom konti
     Permission117=Håndtere sjekkutsteding
    @@ -694,15 +704,15 @@ Permission121=Les tredjeparter lenket til bruker
     Permission122=Opprett/endre tredjeparter lenket til bruker
     Permission125=Slett tredjeparter lenket til bruker
     Permission126=Eksportere tredjeparter
    -Permission141=Les alle prosjekter og oppgaver (også prosjekter jeg ikke er kontakt for)
    -Permission142=Opprett/endre alle prosjekter og oppgaver (også prosjekter jeg ikke er kontakt for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Slett alle prosjekter og oppgaver (også prosjekter jeg ikke er kontakt for)
     Permission146=Les tilbydere
     Permission147=Les statistikk
     Permission151=Les direktedebet betalingsordre
     Permission152=Opprett/endre direktedebet betalingsordre
     Permission153=Send/overfør direktedebet betalingsordre
    -Permission154=Registrer kredit/avvisninger av direktedebet betalingsordre
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Les kontrakter/abonnementer
     Permission162=Opprett/endre kontrakter/abonnementer
     Permission163=Aktiver en tjeneste/abonnement i en kontrakt
    @@ -725,7 +735,7 @@ Permission187=Lukke leverandørordre
     Permission188=Avbryt leverandørordre
     Permission192=Lag linjer
     Permission193=Avbryt linjer
    -Permission194=Les båndbreddelinjene
    +Permission194=Read the bandwidth lines
     Permission202=Oppret  ADSL-tilkoblinger
     Permission203=Bestill tilkoblinger
     Permission204=Bestill tilkoblinger
    @@ -750,12 +760,12 @@ Permission244=Se innholdet i skjulte kategorier
     Permission251=Vis andre brukere og grupper
     PermissionAdvanced251=Vis andre brukere
     Permission252=Lage/endre andre brukere, grupper og deres rettigheter
    -Permission253=Endre andre brukeres passord
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Opprett/endre interne/eksterne brukere og tillatelser
     Permission254=Slette eller deaktivere andre brukere
     Permission255=Opprett/endre egen brukerinformasjon
     Permission256=Slett eller deaktiver andre brukere
    -Permission262=Utvid tilgangen til alle tredjeparter (ikke bare tredjeparter der brukeren er en salgsrepresentant).<br>Virker ikke på eksterne brukere (alltid begrenset til egne tilbud, ordre, fakturaer, kontrakter mm).<br>Virker ikke på prosjekter (kun regler for prosjekttillatelser, synlighet og tildeling gjelder).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Vis CA
     Permission272=Vis fakturaer
     Permission273=Opprett fakturaer
    @@ -765,7 +775,7 @@ Permission283=Slett kontaktpersoner
     Permission286=Eksportere kontakter
     Permission291=Vis tariffer
     Permission292=Angi tillatelser på tariffer
    -Permission293=Endre kundetariffer
    +Permission293=Modify customers tariffs
     Permission300=Les strekkoder
     Permission301=Opprett/endre strekkoder
     Permission302=Slett strekkoder
    @@ -787,11 +797,9 @@ Permission401=Vis rabatter
     Permission402=Opprett/endre rabatter
     Permission403=Valider rabatter
     Permission404=Slett rabatter
    -Permission501=Les arbeidskontrakter/lønn
    -Permission502=Opprett/endre arbeidskontrakter/lønn
    -Permission511=Les lønnsutbetalinger
    -Permission512=Opprett/endre betaling av lønn
    -Permission514=Slett lønn
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Eksporter lønn
     Permission520=Les lån
     Permission522=Opprett/endre lån
    @@ -844,8 +852,8 @@ Permission1251=Kjør masseimport av eksterne data til database (datalast)
     Permission1321=Eksportere kundefakturaer, attributter og betalinger
     Permission1322=Gjenåpne en betalt regning
     Permission1421=Eksport kundeordre og attributter
    -Permission20001=Les ferieforespørsler (dine ferier og underordnedes)
    -Permission20002=Opprett / modifiser dine ferieforespørsler (dine ferier og dine underordnedes)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Slett ferieforespørsler
     Permission20004=Les alle permisjonsforespørsler (selv om bruker ikke er underordnet)
     Permission20005=Opprett/endre permisjonsforespørsler for alle (selv om bruker ikke er underordnet)
    @@ -880,8 +888,8 @@ Permission63001=Les ressurser
     Permission63002=Opprett/endre ressurser
     Permission63003=Slett ressurser
     Permission63004=Koble ressurser til agendahendelser
    -DictionaryCompanyType=Type tredjeparter
    -DictionaryCompanyJuridicalType=Juridisk status for tredjeparter
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospektpotensiale
     DictionaryCanton=Stat/provins
     DictionaryRegion=Region
    @@ -894,7 +902,7 @@ DictionaryVAT=MVA satser
     DictionaryRevenueStamp=Beløp for skattestempel
     DictionaryPaymentConditions=Betalingsbetingelser
     DictionaryPaymentModes=Betalingsmåter
    -DictionaryTypeContact=Kontakt/adressetyper
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type nettsider/containere
     DictionaryEcotaxe=Miljøgebyr (WEEE)
     DictionaryPaperFormat=Papirformater
    @@ -908,47 +916,47 @@ DictionarySource=Tilbud/ordre-opprinnelse
     DictionaryAccountancyCategory=Personlige grupper for rapporter
     DictionaryAccountancysystem=Diagram-modeller for kontoer
     DictionaryAccountancyJournal=Regnskapsjournaler
    -DictionaryEMailTemplates=E-postmaler
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Enheter
     DictionaryProspectStatus=Prospektstatus
    -DictionaryHolidayTypes=Ferietyper
    -DictionaryOpportunityStatus=Mulighet-status for prosjekt
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Utgiftsrapport - Transportkategorier
     DictionaryExpenseTaxRange=Utgiftsrapport - Rangert etter transportkategori
     SetupSaved=Innstillinger lagret
     SetupNotSaved=Oppsettet er ikke lagret
     BackToModuleList=Tilbake til moduloversikt
    -BackToDictionaryList=Tilbake til ordliste
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type skattestempel
    -VATManagement=MVA-håndtering
    -VATIsUsedDesc=Som standard når du oppretter muligheter, fakturaer, bestillinger osv, følger MVA-satsen aktivt standard regel:<br> Dersom selgeren ikke utsettes for MVA, settes MVA til 0. Slutt på regelen <br> Hvis (selgerland = kjøperland), settes merverdiavgift som standard lik MVA for produktet i selgerandet. Slutt på regelen. <br> Hvis både selger og kjøper er i EU og varene er transportprodukter (bil, båt, fly), er standard MVA 0 (MVA skal betales til tollen i sitt land og ikke til selger). Slutt på regelen. <br> Hvis både selgeren og kjøperen er i EU og kjøper er ikke et selskap, settes MVA til MVA på produktet som selges. Slutt på regelen. <br> Hvis både selgeren og kjøperen er i EU og kjøper er et selskap, settes MVA til 0 som standard. Slutt på regelen. <br> I alle andre tilfeller er standard MVA=0. Slutt på regelen.
    -VATIsNotUsedDesc=Som standard er den foreslåtte MVA 0 som kan brukes for tilfeller som foreninger, enkeltpersoner og små selskaper.
    -VATIsUsedExampleFR=I Frankrike betyr det at bedrifter eller organisasjoner har et reelt finanssystem (forenklet reell eller normal reell). Et system hvor mva er deklarert.
    -VATIsNotUsedExampleFR=I Frankrike betyr det foreninger som ikke er mva-registrert, eller selskaper, organisasjoner eller liberale yrker som har valgt micro-entreprise skattesystemet (mva i franchise) og betalt en franchise-mva uten mva-angivelse. Dette valget vil vise referansen "Ikke aktuell for MVA - art-293B av CGI" på fakturaer.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Ikke bruk andre skatter
    -LocalTax1IsUsedDesc=Bruk en annen type skatt (annet enn MVA)
    -LocalTax1IsNotUsedDesc=Ikke bruk annen type skatt (annet enn MVA)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Andre type skatt
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Ikke bruk tredje skatt
    -LocalTax2IsUsedDesc=Bruk en tredje type skatt (annet enn MVA)
    -LocalTax2IsNotUsedDesc=Ikke bruk annen type skatt (annet enn MVA)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Tredje type skatt
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Håndtering
    -LocalTax1IsUsedDescES= Standard RE-rate når du oppretter prospekter, fakturaer, ordre etc følger den aktive standardregelen: <br> Hvis kjøperen ikke utsettes for RE, er RE-standard = 0. Slutt på regelen. <br> Hvis kjøperen blir utsatt for RE, deretter RE som standard. Slutt på regelen. <br>
    -LocalTax1IsNotUsedDescES= Som standard er den foreslåtte RE er 0. Slutt på regelen.
    -LocalTax1IsUsedExampleES= I Spania er de profesjonelle underlagt noen spesifikke deler av den spanske IAE.
    -LocalTax1IsNotUsedExampleES= I Spania er de profesjonelle og samfunn, og på visse deler av den spanske IAE.
    -LocalTax2ManagementES= IRPF oppsett
    -LocalTax2IsUsedDescES= Standard RE-sats når du oppretter prospekter, fakturaer, ordre etc følger den aktive standardregelen: <br> Dersom selgeren ikke utsettes for IRPF, så er IRPF som standard = 0. Slutt på regelen. <br> Hvis selgeren er utsatt for IRPF, så er IRPF som standard. Slutt på regelen. <br>
    -LocalTax2IsNotUsedDescES= Som standard er den foreslåtte IRPF er 0. Slutt på regelen.
    -LocalTax2IsUsedExampleES= I Spania, for frilansere og selvstendige som leverer tjenester, og bedrifter som har valgt moduler for skattesystem.
    -LocalTax2IsNotUsedExampleES= I Spania er de bedrifter som ikke er ikke skattepliktige
    +LocalTax1ManagementES=RE Håndtering
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Som standard er den foreslåtte RE er 0. Slutt på regelen.
    +LocalTax1IsUsedExampleES=I Spania er de profesjonelle underlagt noen spesifikke deler av den spanske IAE.
    +LocalTax1IsNotUsedExampleES=I Spania er de profesjonelle og samfunn, og på visse deler av den spanske IAE.
    +LocalTax2ManagementES=IRPF oppsett
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Som standard er den foreslåtte IRPF er 0. Slutt på regelen.
    +LocalTax2IsUsedExampleES=I Spania, for frilansere og selvstendige som leverer tjenester, og bedrifter som har valgt moduler for skattesystem.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Rapport over lokale avgifter 
     CalcLocaltax1=Salg - Innkjøp
     CalcLocaltax1Desc=Lokale skatter-rapporter kalkuleres med forskjellen mellom kjøp og salg
    @@ -958,7 +966,8 @@ CalcLocaltax3=Salg
     CalcLocaltax3Desc=Lokale skatter-rapportene viser totalt salg
     LabelUsedByDefault=Etiketten som brukes som standard hvis ingen oversettelse kan bli funnet for kode
     LabelOnDocuments=Etiketten på dokumenter
    -NbOfDays=Antall dager
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Ved månedsslutt
     CurrentNext=Nåværende/Neste
     Offset=Forskyvning
    @@ -984,7 +993,7 @@ DatabaseUser=Database bruker
     DatabasePassword=Database passord
     Tables=Tabeller
     TableName=Tabellnavn
    -NbOfRecord=Antall poster
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=Systeminformasjon - oppsummering
    @@ -996,7 +1005,7 @@ Skin=Tema
     DefaultSkin=Standard tema
     MaxSizeList=Makslengde på lister
     DefaultMaxSizeList=Standard maks.lengde for lister
    -DefaultMaxSizeShortList=Standard maxlengde for korte lister (f.eks på kundekort)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Dagens melding
     MessageLogin=Meldingstekst på innloggingsbildet
     LoginPage=Innloggingsside
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent søkeskjema i venstre meny
     DefaultLanguage=Ønsket standardspråk (språkkode)
     EnableMultilangInterface=Aktiver flerspråklig grensesnitt
     EnableShowLogo=Vis logo i venstre meny
    -CompanyInfo=Firma-/organisasjonsinformasjon
    -CompanyIds=Firma-/organisasjonsidentiteter
    +CompanyInfo=Firma/organisasjon
    +CompanyIds=Company/Organization identities
     CompanyName=Navn
     CompanyAddress=Adresse
     CompanyZip=Postnummer
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Eier av bankkonto  %s
     BankModuleNotActive=Bankkontomodul ikke slått på
     ShowBugTrackLink=Vis lenken "<strong>%s</strong>"
     Alerts=Varsler
    -DelaysOfToleranceBeforeWarning=Forsinkelsestoleranse før varsling
    -DelaysOfToleranceDesc=Denne siden lar deg angi antall 'toleransedager' du ønsker før en forsinkelse skal varsles på skjermen med ikonet %s for hvert forsinkede element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Forsinkelsestoleranse (i dager) før varsel om planlagte hendelser (agendahendelser) som ikke er fullført 
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Forsinkelsestoleranse (i dager) før varsel om prosjekter som ikke er lukket i tide
    -Delays_MAIN_DELAY_TASKS_TODO=Forsinkelsestoleranse (i dager) før varsel om planlagte oppgaver (prosjektoppgaver) som ikke er fullført
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Forsinkelsestoleranse (i dager) før varsel om ordre som ikke er fullført
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Forsinketoleranse (i dager) før varsel om at innkjøpsordre ikke er behandlet ennå
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Forsinkelsestoleranse (i dager) før varsel om tilbud som ikke er lukket
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Forsinkelsestoleranse (i dager) før varsel om tilbud som ikke er fakturert
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Forsinkelsestoleranse (i dager) før varsel om tjenester som ikke er aktivert
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Forsinkelsestoleranse (i dager) før varsel om utløpte tjenester
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Forsinkelsestoleranse (i dager) før varsel om ubetalte leverandørfakturaer
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Forsinkelsestoleranse (i dager) før varsel om ubetalte kundefakturaer
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Forsinkelsestoleranse (i dager) før varsel om forfalt bankavstemming
    -Delays_MAIN_DELAY_MEMBERS=Forsinkelsestoleranse (i dager) før varsel om forsinket medlemskontingent
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Forsinkelsestoleranse (i dager) før varsel om sjekker som må settes inn i bank
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tillatt forsinkelse (i dager) før varsel om at utgiftsrapport skal godkjennes
    -SetupDescription1=Oppsettområdet er for førstegangsparametre før du begynner å bruke Dolibarr.
    -SetupDescription2=De to obligatoriske oppsettstrinnene er følgende (de to første oppføringene i den venstre oppsettmenyen):
    -SetupDescription3=Innstillinger i menyen <a href="%s"> %s -> %s </a>. Dette trinnet er nødvendig fordi det definerer data som brukes på Dolibarr-sider for å tilpasse standardoppførelsen til programvaren (for landrelaterte funksjoner for eksempel).
    -SetupDescription4=Innstillinger i menyen <a href="%s"> %s -> %s </a>. Dette trinnet er nødvendig fordi Dolibarr ERP / CRM er en samling av flere moduler / applikasjoner, alle mer eller mindre uavhengige. Nye funksjoner legges til menyer for hver modul du aktiverer.
    -SetupDescription5=Administrere andre menyoppføringers valgfrie parametre.
    +DelaysOfToleranceBeforeWarning=Forsinkelser før du viser en varsel
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Hendelser relatert til sikkerhet
     Audit=Revisjon
     InfoDolibarr=Om Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Her kan du slå på loggen for sikkerhetshendelser i Dolibarr. Admi
     AreaForAdminOnly=Oppsettparametere kan bare angis av <b> administratorbrukere </b>.
     SystemInfoDesc=Systeminformasjon er diverse teknisk informasjon som kun vises i skrivebeskyttet modus, og som kun er synlig for administratorer.
     SystemAreaForAdminOnly=Dette området er bare tilgjengelig for administratorer. Ingen av tillatelsene i Dolibarr kan senke denne grensen.
    -CompanyFundationDesc=På denne siden redigeres alle kjente opplysninger fra firmaet du administrerer (For dette, klikk på "%s" eller "%s" knappen nederst på siden)
    -AccountantDesc=På denne siden redigeres alle kjente opplysninger om din regnskapsfører/bokholder
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=Filnummer
     DisplayDesc=Her kan du velge innstillinger som styrer Dolibarrs utseende og virkemåte
     AvailableModules=Tilgjengelige apper/moduler
     ToActivateModule=Gå til innstillinger for å aktivere moduler.
     SessionTimeOut=Tidsgrense for økter
    -SessionExplanation=Dette tallet garanterer at økten aldri utløper før denne forsinkelsen, hvis økten kjøres med intern PHP-session cleaner (og ingenting annet). Intern PHP session cleaner garanterer ikke at økten utløper like etter denne forsinkelsen. Det utløper etter denne forsinkelsen, og når session cleaner er ferdig,  hver <b>%s/%s</b> tilgang, men bare under tilgang fra andre økter <br>. Merk: på noen servere med en ekstern session cleaner(cron under debian, ubuntu ...), øktene kan bli ødelagt etter en periode definert av standard <strong> session.gc_maxlifetime </strong>, uansett verdien som er angitt her.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Tilgjengelige utløsere
    -TriggersDesc=Utløsere (triggers) er filer som vil påvirke Dolibarrs virkemåte og arbeidsflyt når de kopieres inn i mappen <b>htdocs/core/triggers</b>. De aktiverer nye handlinger, aktivert av Dolibarrhendelser (ny tredjepart, opprette faktura ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Utløserne i denne filen er slått av med endelsen <b>-NORUN</b> i navnet.
     TriggerDisabledAsModuleDisabled=Utløserne i denne filen er slått av ettersom modulen <b>%s</b> er slått av.
     TriggerAlwaysActive=Utløserne i denne filen er alltid slått på, uansett hvilke moduler som er slått på.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Sett alle referansedata. Du kan legge til dine verdier som standa
     ConstDesc=Denne siden lar deg redigere alle andre parametere som ikke finnes på foregående sidene. Disse er stort sett forbeholdt parametere for utviklere eller avansert feilsøking. For en liste over alternativer <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">klikk her</a>.
     MiscellaneousDesc=Alle andre sikkerhetsrelaterte parametre er definert her.
     LimitsSetup=Grenser/presisjon
    -LimitsDesc=Her angir du grenser og presisjon som skal brukes i programmet
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Desimaler i enhetspriser
     MAIN_MAX_DECIMALS_TOT=Desimaler i totalpriser
     MAIN_MAX_DECIMALS_SHOWN=Desimaler for priser når de vises på skjerm  (Legg til <b>...</b> etter dette tallet dersom du ønsker å se <b>...</b> når et tall er forkortet i skjermvisning)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Netto enhetspris på en vare
     TotalPriceAfterRounding=Total pris (netto / moms / inkl. moms) etter avrunding
     ParameterActiveForNextInputOnly=Innstillingene gjelder først fra neste inntasting
     NoEventOrNoAuditSetup=Ingen sikkerhetsinnstillinger er registrert ennå. Dette kan være normalt hvis revisjon ikke er slått på  ("innstillinger - sikkerhet - revisjon").
    -NoEventFoundWithCriteria=Ingen søketreff i sikkerhetshendelser.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Se lokalt sendmail-oppsett
     BackupDesc=For å lage en komplett sikkerhetskopi av Dolibarr, må du:
     BackupDesc2=Lagre innhold av dokumentmappen (<b>%s</b>) som inneholder alle opplastede og genererte filer (Slik at den inkluderer alle dumpfiler som er generert på trinn 1).
    -BackupDesc3=Lagre innholdet i databasen (<b>%s</b>) i en dump-fil. For å gjøre dette, kan du bruke følgende assistent:
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Arkiverte mapper bør oppbevares på et trygt sted.
     BackupDescY=Den genererte dumpfilen bør oppbevares på et trygt sted.
    -BackupPHPWarning=Backup kan ikke garanteres med denne metoden. Foretrekker forrige
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Hvis du vil gjenopprette en Dolibarr sikkerhetskopi , må du:
    -RestoreDesc2=Gjenopprett arkivfil (zip-fil for eksempel) av dokumentmappe for å hente ut filer til en ny Dolibarr-installasjon eller inn i gjeldende mappe (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Gjenopprett data fra en backup-fil til databasen i den nye Dolibarr-installasjon eller til databasen av gjeldende installasjon (<b>%s</b>). Advarsel! Når gjenopprettingen er ferdig, må du bruke et brukernavn/passord, som fantes da sikkerhetskopien ble laget, for å koble til igjen. For å gjenopprette en sikkerhetskopiert database til gjeldende installasjon, kan du følge denne assistenten:
     RestoreMySQL=MySQL import
     ForcedToByAModule= Denne regelen er tvunget til å <b>%s</b> av en aktivert modul
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Du må kjøre denne kommandoen
     YourPHPDoesNotHaveSSLSupport=SSL funksjoner ikke tilgjengelige i din PHP
     DownloadMoreSkins=Flere skins å laste ned
     SimpleNumRefModelDesc=Returner referansenummeret med format %syymm-nnnn der åå er år, er mm måned og nnnn er en sekvens uten hull og uten tilbakestilling
    -ShowProfIdInAddress=Vis Profesjonell ID med adresser på dokumenter
    -ShowVATIntaInAddress=Skjul MVA Intra num med adresser på dokumenter
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Delvis oversettelse
    -MAIN_DISABLE_METEO=Deaktiver Meteo visning
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standardmodus
     MeteoStdModEnabled=Standard modus aktivert
     MeteoPercentageMod=Prosentmodus
     MeteoPercentageModEnabled=Prosentmodus aktivert
     MeteoUseMod=Klikk for å bruke %s
     TestLoginToAPI=Test-innlogging til API
    -ProxyDesc=Enkelte funksjoner i Dolibarr må ha en Internett-tilgang for å fungere. Definer parametere for dette her. Hvis Dolibarr-serveren er bak en proxy-server, forteller disse parametrene Dolibarr hvordan få tilgang til Internett gjennom den.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Ekstern tilgang
     MAIN_PROXY_USE=Bruk en proxy-server (ellers direkte tilgang til internett)
     MAIN_PROXY_HOST=Navn/adresse til proxy-server
     MAIN_PROXY_PORT=Proxy server port
     MAIN_PROXY_USER=Logg-inn for å bruke proxy-server
     MAIN_PROXY_PASS=Passord for å bruke proxy-server
    -DefineHereComplementaryAttributes=Her defineres alle attributter som ikke allerede er tilgjengelig som standard, og at du ønsker å få støtte for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Komplementære attributter
     ExtraFieldsLines=Utfyllende attributter (linjer)
     ExtraFieldsLinesRec=Komplementære attributter (fakturalinjermaler )
     ExtraFieldsSupplierOrdersLines=Komplementære attributter (ordrelinjer)
     ExtraFieldsSupplierInvoicesLines=Komplementære attributter (fakturalinjer)
     ExtraFieldsThirdParties=Komplementære attributter (tredjepart)
    -ExtraFieldsContacts=Komplementære attributter (kontakt/adresse)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Komplementære attributter (medlem)
     ExtraFieldsMemberType=Komplementære attributter (medlem type)
     ExtraFieldsCustomerInvoices=Tilleggsattributter (faktura)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=kun alfanumeriske tegn og små bokstaver uten m
     SendmailOptionNotComplete=Advarsel, på noen Linux-systemer, for å sende fra din e-post, må oppsettet av sendmail-kjøring inneholde opsjon -ba (parameter mail.force_extra_parameters i din php.ini fil). Hvis noen mottakere aldri mottar e-post, kan du prøve å redigere PHP parameter med mail.force_extra_parameters = -ba).
     PathToDocuments=Bane til dokumenter
     PathDirectory=Mappe
    -SendmailOptionMayHurtBuggedMTA=Funksjonen for å sende e-post ved hjelp av metoden "PHP mail direct" vil generere en melding som kanskje ikke oversatt riktig av enkelte e-postservere. Resultatet er at enkelte e-poster ikke kan leses av personer som mottar e-post gjennom disse serverene (f.eks Orange i Frankrike). Dette er ikke et Dolibarr-problem i, heller ikke PHP, men på mottakende e-postserver. Du kan imidlertid legge til alternativet MAIN_FIX_FOR_BUGGED_MTA til 1 i oppsettet, heller enn å endre Dolibarr for å unngå dette. Du kan oppleve problemer med andre servere som følger SMTP-standarden nøyaktig. Den andre løsningen (anbefales) er å bruke metoden "SMTP socket library" som ikke har noen ulemper.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Oppsett av oversettelse
     TranslationKeySearch=Søk etter oversettelsesnøkkel eller -streng
     TranslationOverwriteKey=Overskriv oversettelse
     TranslationDesc=Slik angir du det viste applikasjonsspråket: <br> * Systemwide: Meny <strong> Hjem - Oppsett - Skjerm </strong> <br> * Per bruker: Bruk <strong> Brukeroppsettoppsett </strong> -fanen på brukerkortet ( klikk på brukernavnet øverst på skjermen).
     TranslationOverwriteDesc=Du kan også overstyre strenger ved å fylle ut tabellen nedenfor. Velg språk fra "%s" nedtrekkslisten, sett inn oversettelsesstrengen i "%s" og din nye oversettelse i "%s"
    -TranslationOverwriteDesc2=Du kan bruke den andre fanen for å finne rett oversettelsesnøkkel
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Oversettelsesstreng
     CurrentTranslationString=Gjeldende oversettelsesstreng
     WarningAtLeastKeyOrTranslationRequired=Et søkekriterie er nødvendig for nøkkel eller oversettelsesstreng
     NewTranslationStringToShow=Ny oversettelsesstreng som skal vises
     OriginalValueWas=Den originale oversettelsen er overskrevet. Original verdi var:<br><br>%s
    -TransKeyWithoutOriginalValue=Du tvang en ny oversettelse for oversettelsesnøkkelen '<strong> %s</strong>' som ikke finnes i noen språkfiler
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Aktiverte applikasjoner/moduler: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Du må minst aktivere en modul
    -ClassNotFoundIntoPathWarning=Klasse %s ikke funnet i PHP banen
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Ja i sommer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Merk, bare følgende moduler blir åpnet for eksterne brukere (uansett tidligere tillatelser gitt disse brukerene) og bare hvis tillatelser ble gitt:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session lagring kryptert av Suhosin
     ConditionIsCurrently=Tilstand er for øyeblikket %s
    -YouUseBestDriver=Du bruker driveren %s, som er den beste tilgjengelige for øyeblikket.
    -YouDoNotUseBestDriver=Du bruker driveren %s. Driver %s anbefales.
    -NbOfProductIsLowerThanNoPb=Du har bare %s varer/tjenester i database. Ingen optimalisering er påkrevet
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Forbedre søket
    -YouHaveXProductUseSearchOptim=Du har %s varer i databasen. Du bør legge til konstanten PRODUCT_DONOTSEARCH_ANYWHERE til 1 i Hjem-Oppsett-Annet for å begrense søket til begynnelsen av strenger. Dette gjør det mulig for databasen å bruke indeksen og du bør få en raskere respons.
    -BrowserIsOK=Du bruker nettleseren %s. Denne nettleseren er ok for sikkerhet og ytelse.
    -BrowserIsKO=Du bruker nettleseren %s. Denne nettleseren er kjent for å være et dårlig valg for sikkerhet, ytelse og pålitelighet. Vi anbefaler deg å bruke Firefox, Chrome, Opera eller Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug er lastet
     XCacheInstalled=XCache er lastet
    -AddRefInList=Vis kunde/leverandør-ref i liste (velg liste eller kombinasjonsboks), og det meste av hyperkobling. Tredjepart vil vises med navnet "CC12345 - SC45678 - Digert selskap", i stedet for "Digert selskap".
    -AskForPreferredShippingMethod=Spør etter foretrukket sendingsmetode for tredjeparter
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Endre felt %s
     FillThisOnlyIfRequired=Eksempel: +2 (brukes kun hvis du opplever problemer med tidssone offset)
     GetBarCode=Hent strekkode
     ##### Module password generation
     PasswordGenerationStandard=Gir et automatisk laget passord med 8 tegn (bokstaver og tall) i små bokstaver.
    -PasswordGenerationNone=Ikke foreslå å generere passord. Passord må legges inn manuelt.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Returner et passord i følge din personlige konfigurasjon
     SetupPerso=I følge din konfigurasjon
     PasswordPatternDesc=Beskrivelse av passordmønster
    @@ -1195,23 +1205,23 @@ UserMailRequired=E-postadresse kreves for å opprette en ny bruker
     HRMSetup=Oppsett av HRM-modul
     ##### Company setup #####
     CompanySetup=Firmamodul
    -CompanyCodeChecker=Modul for tredjeparts kodegenerering og -kontroll (kunde eller leverandør)
    -AccountCodeManager=Modul for generering av regnskapskoder (kunde eller leverandør)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=Funksjonen E-postvarslinger lar deg automatisk sende stille e-poster for noen Dolibarrhendelser. Mål for meldinger kan defineres:
     NotificationsDescUser=* pr. bruker, en bruker om gangen
     NotificationsDescContact=* Per tredjeparts kontakter (kunder eller leverandører), en kontakt til tiden.
     NotificationsDescGlobal=* eller ved å sette global mål-e-post i modulen Oppsett
    -ModelModules=Dokumentmaler
    -DocumentModelOdt=Generer dokumenter fra OpenDocument-maler (.ODT eller .ODS fra OpenOffice, KOffice, TextEdit, mm)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vannmerke på utkast
     JSOnPaimentBill=Aktiver egenskap for å autoutfylle betalingslinjer i betalingsskjema
    -CompanyIdProfChecker=Regler for profesjonell ID
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Må være unik?
    -MustBeMandatory=Obligatorisk å opprette tredjeparter?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Obligatorisk å validere fakturaer?
     TechnicalServicesProvided=Tekniske tjenester som tilbys
     #####DAV #####
    -WebDAVSetupDesc=Dette er koblingene for å få tilgang til WebDAV-katalogen. Den inneholder en "offentlig" mappe, åpen for enhver bruker som kjenner nettadressen (hvis tilgang til offentlig mappe er tillatt), og en "privat" mappe som trenger en eksisterende påloggningskonto/passord for å få tilgang.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Rot-URL til %s server: %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=En eksportlenke til <b>%s</b> formatet er tilgjengelig på følgende lenke: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=En eksportlenke til <b>%s</b> formatet er tilgjengelig p
     BillsSetup=Innstillinger for fakturamodul
     BillsNumberingModule=Nummereringsmodul for fakturaer og kreditnotaer
     BillsPDFModules=Fakturamaler
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Betalingsdokumentmodeller
     CreditNote=Kreditnota
     CreditNotes=Kreditnotaer
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Opprett innlogging for hvert medlem
     AdherentMailRequired=E-post kreves for å lage et nytt medlem
     MemberSendInformationByMailByDefault=Valg for å sende e-postbekreftelse til medlemmer (validering eller nytt abonnement) er krysset av som standard
     VisitorCanChooseItsPaymentMode=Besøkende kan velge blant tilgjengelige betalingsmåter
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Globale parametre
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test synkronisering av medlemstype
     LDAPTestSearch= Test et LDAP søk
     LDAPSynchroOK=Vellykket synkroniseringstest
     LDAPSynchroKO=Sykroniseringstesten feilet
    -LDAPSynchroKOMayBePermissions=Synkroniseringstest feilet. Sjekk at tilkobling til server er riktig konfigurert og tillater LDAP oppdateringer
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP tilkobling til LDAP server vellykket (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP tilkobling til LDAP server feilet (Server=%s, Port=%s)
    -LDAPBindOK=Tilkobling/Autentisering til LDAP server var vellykket (Server=%s, Port=%s, Admin=%s, Passord=%s)
    -LDAPBindKO=Tilkobling/Autentisering til LDAP server feilet (Server=%s, Port=%s, Admin=%s, Passord=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server konfigurert for versjon 3
     LDAPSetupForVersion2=LDAP server konfigurert for versjon 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Eksempel : samaccountname
     LDAPFieldFullname=Fullt navn
     LDAPFieldFullnameExample=Eksempel : cn
    -LDAPFieldPasswordNotCrypted=Passord ikke kryptert
    -LDAPFieldPasswordCrypted=Passord kryptert
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Eksempel: brukerPassord
     LDAPFieldCommonNameExample=Eksempel: cn
     LDAPFieldName=Navn
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=Denne siden lar deg definere LDAP attributtnavn i LDAP-tre
     LDAPDescValues=Eksempelverdier er designet for <b>OpenLDAP</b> med følgende lastede skjemaer: <b> core.schema, cosine.schema, inetorgperson.schema</b>). Hvis du bruker disse verdiene og OpenLDAP, endre LDAP configfilen <b> slapd.conf </b> for å ha alle disse skjemaene lastet.
     ForANonAnonymousAccess=For autentisert tilgang (f.eks skrivetilgang)
     PerfDolibarr=Ytelse oppsett/optimaliseringsrapport
    -YouMayFindPerfAdviceHere=På denne siden vil du finne noen sjekkpunkt og råd relatert til ytelse
    -NotInstalled=Ikke installert, så serveren taper ikke ytelse pga. denne.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applikasjons-cache
     MemcachedNotAvailable=Ingen applikativ cache funnet. Du kan forbedre ytelsen ved å installere en cache-server Memcached og en modul som kan bruke denne cache-serveren. <br> Mer informasjon her <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Merk: Mange webhosting-leverandører har ikke en slik cache-server.
     MemcachedModuleAvailableButNotSetup=Modulen memcache er funnet, men oppsett er ikke komplett
     MemcachedAvailableAndSetup=Modulen memcache er aktivert
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=Ingen OPCode cache funnet. Kan være du bruker en annen OPCode-cache enn XCache eller eAccelerator (bra). Det kan også være at du ikke har OPCode-cache (svært dårlig).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for statiske ressurser (css, img, javascript)
     FilesOfTypeCached=Filtypene %s er cachet av HTTP-server
     FilesOfTypeNotCached=Filtypene %s er ikke cachet av HTTP-server
     FilesOfTypeCompressed=Filtypene %s er undertrykket av HTTP-server
     FilesOfTypeNotCompressed=Filtypene %s er ikke undertrykket av HTTP-server
     CacheByServer=Server-cache
    -CacheByServerDesc=For eksempel ved å bruk Apache-direktivet "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Nettleser-cache
     CompressionOfResources=Undertrykkelse av HTTP-respons
    -CompressionOfResourcesDesc=For eksempel ved bruk av Apache-direktivet "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=En slik automatisk deteksjon er ikke mulig med nåværende nettlesere
    -DefaultValuesDesc=Her kan du definere/tvinge standardverdien du vil ha når du oppretter en ny post, og/eller standardfiltre eller sorteringsrekkefølge når du lister poster.
    -DefaultCreateForm=Standardverdier (ved opprettelse av skjema)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Standard søkefiltre
     DefaultSortOrder=Standard sorteringsorden
     DefaultFocus=Standard fokusfelt
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Innstillinger for varemodul
     ServiceSetup=Oppsett av tjenester-modulen
     ProductServiceSetup=Oppsett av varer- og tjenester-modulen
     NumberOfProductShowInSelect=Maks. antall varer i utvalgslister (0=ingen grenser)
    -ViewProductDescInFormAbility=Visualisering av varebeskrivelser i skjemaer (ellers som oppsprett-tips)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=I "Vedlagte filer"-fanen i "Varer og tjenester" kan du aktivere en opsjon for å flette PDF-varedokument til tilbud PDF-azur hvis varen/tjenesten er i tilbudet
    -ViewProductDescInThirdpartyLanguageAbility=Visualisering av varebeskrivelser i tredjepartens språk
    -UseSearchToSelectProductTooltip=Hvis du har mange varer (>100 000), kan du øke hastigeten ved å sette konstanten PRODUCT_DONOTSEARCH_ANYWHERE til 1 i Oppsett->Annet. Søket vil da begrenses til starten av søkestrengen
    -UseSearchToSelectProduct=Vent med å trykke på en tast før innholdet av vare-kombinasjonslisten er lastet (Dette kan øke ytelsen hvis du har mange varer)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Standard strekkodetype for varer
     SetDefaultBarcodeTypeThirdParties=Standard strekkodetype for tredjeparter
     UseUnits=Definer måleenhet for kvantitet ved opprettelse av ordre, tilbud eller faktura
    @@ -1503,7 +1516,7 @@ SendingsSetup=Oppsett av forsendelsesmodulen
     SendingsReceiptModel=Modell for forsendelseskvitteringer
     SendingsNumberingModules=Nummereringsmodell for for sendelser
     SendingsAbility=Støtt forsendelsesskjemaer for kundeleveranser
    -NoNeedForDeliveryReceipts=I de fleste tilfeller er forsendelsesskjemaer bruket både som skjema for kundeleveranser (liste over varer som skal sendes) og skjema som er mottatt og signert av kunden. Så produktleveranse-kvitteringer er en duplisert funksjon og er sjelden aktivert.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Fritekst på leveringer
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Nummereringsmodul for vareleveringskvitteringer
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Avansert editor
     ActivateFCKeditor=Aktiver avansert editor for:
     FCKeditorForCompany=WYSIWIG opprettelse/endring av elementbeskrivelse og notater (untatt varer og tjenester)
     FCKeditorForProduct=WYSIWIG opprettelse/endring av vare-/tjenestebeskrivelse og notater
    -FCKeditorForProductDetails=WYSIWIG opprettelse/endring av varedetaljer for alle enheter (tilbud, ordre, fakturaer, osv ...). <font class="warning"> Advarsel! Bruk av dette alternativet er i dette tilfellet ikke anbefalt, da det kan skape problemer med spesialkarakterer og sideformatering ved opprettelse av PDF-filer.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG opprettelse/endring av masse-e-postutsendelser (Verktøy->E-post)
     FCKeditorForUserSignature=WYSIWIG-opprettelse av signatur
     FCKeditorForMail=WYSIWIG opprettelse/redigering for all post (unntatt Verktøy ->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Tilkoblingen var vellykket men databasen ser ikke ut til å være en OSCommerce database (Nøkkel %s ikke funnet i tabell %s).
    -OSCommerceTestOk=Tilkobling til server '%s' for database '%s' med bruker '%s' var vellykket.
    -OSCommerceTestKo1=Tilkobling til server '%s' var vellykket, men databasen '%s' kunne ikke nåes.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Tilkobling til serveren '%s' sin database '%s' med bruker '%s' var vellykket.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Tilkobling til server '%s' med bruker '%s' feilet.
     ##### Stock #####
     StockSetup=Oppsett av lagermodul
    -IfYouUsePointOfSaleCheckModule=Hvis du bruker en Point-of-Sale-modul (standard POS-modul eller en annen ekstern modul), kan dette oppsettet bli ignorert av din Point-Of-Sale modul. De fleste POS-moduler er designet for øyeblikkelig å lage faktura og redusere lager som standard, uansett hva som settes her. Så husk å sjekke hvordan POS-modulen er satt opp.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menyen er slettet
     Menus=Menyer
    @@ -1548,7 +1561,7 @@ DetailRight=Tilstand for å vise uautoriserte grå menyer
     DetailLangs=Språkfil-navn for etikettkode-oversettelse
     DetailUser=Intern/Ekstern/Alle
     Target=Mål
    -DetailTarget=Mål for lenker (blank topp åpner et nytt vindu)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Nivå (-1:toppmeny, 0:headermeny, >0 meny og undermeny)
     ModifMenu=Menyendring
     DeleteMenu=Slett menyoppføring
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=Mva skal beregnes:<br>- ved levering av varer<br>- ved leve
     OptionVatDebitOptionDesc=MVA skal beregnes: :<br>- ved levering av varer<br>- ved fakturering av tjenester
     OptionPaymentForProductAndServices=Kontantgrunnlag for varer og tjenester
     OptionPaymentForProductAndServicesDesc=MVA forfaller: <br> - ved betaling for varer <br> - på betalinger for tjenester
    -SummaryOfVatExigibilityUsedByDefault=Tidspunkt for MVA-innbetaling som standard i henhold til valgt alternativ:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Ved levering
     OnPayment=Vedbetaling
     OnInvoice=Ved faktura
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Kontokode for innkjøp
     AgendaSetup=Innstillinger for modulen hendelser og agenda
     PasswordTogetVCalExport=Nøkkel for å autorisere eksportlenke
     PastDelayVCalExport=Ikke eksporter hendelser eldre enn
    -AGENDA_USE_EVENT_TYPE=Bruk hendelsestyper (administrert i menyoppsett -> Ordbøker -> Type agendahendelser)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Sett denne standardverdien automatisk for hendelsestype ved opprettels av hendelses-skjema
    -AGENDA_DEFAULT_FILTER_TYPE=Sett denne hendelsestypen automatisk i søkefilteret til Agenda-visning
    -AGENDA_DEFAULT_FILTER_STATUS=Sett denne statustypen automatisk i søkefilteret til Agenda-visning
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Hvilken fane vil åpne som standard når du velger Agenda-menyen?
     AGENDA_REMINDER_EMAIL=Aktiver hendelsespåminnelse <b> via e-post </b> (påminnelsesalternativ/forsinkelse kan defineres for hver hendelse). Merk: Modul <strong> %s</strong> må være aktivert og riktig satt opp for å få påminnelse sendt med riktig frekvens.
    -AGENDA_REMINDER_BROWSER=Aktiver hendelsespåminnelse <b> i brukerens nettleser </b> (når hendelsesdatoen er nådd, kan hver bruker nekte dette fra spørsmålet om nettleserbekreftelse)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Aktiver lydvarsler
     AGENDA_SHOW_LINKED_OBJECT=Vis koblet objekt i agendavisning
     ##### Clicktodial #####
     ClickToDialSetup='Click To Dial' modul
     ClickToDialUrlDesc=Url som kalles når man klikker på telefonpiktogrammet. I URL kan du bruke koder <br> <b> __ PHONETO __ </b> som blir erstattet med telefonnummeret til personen som skal ringes <br> <b> __ PHONEFROM __ </b> som blir erstattet med telefonnummeret til den som ringer(din) <br> <b> __ LOGIN __ </b> som vil bli erstattet med clicktodial login (definert på brukerkort) <br> <b> __ PASS __ </b> som vil bli erstattet med clicktodial passord (definert på brukerkort).
    -ClickToDialDesc=Denne modulen gjør telefonnumre klikkbare. Ved å klikke på dette ikonet vil telefonen din ringe opp nummeret.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Bruk kun en lenke "tlf:" for telefonnumre
    -ClickToDialUseTelLinkDesc=Bruk denne metoden hvis brukerne har en softphone eller et programvaregrensesnitt installert på samme datamaskin som nettleseren, og kalles når du klikker på en link i nettleseren din som starter med "tel:". Hvis du trenger en full server-løsning (uten behov for lokal installasjon av programvare), må du sette denne på "Nei" og fylle neste felt.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Kassaapparat
     CashDeskSetup=Innstillinger for modulen kassaapparat
    -CashDeskThirdPartyForSell=Standard generisk tredjepart for salg
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Kassekonto som skal brukes til kontantsalg
     CashDeskBankAccountForCheque= Konto som skal brukes til å motta utbetalinger via sjekk
     CashDeskBankAccountForCB= Konto som skal brukes til å motta kontant betaling med kredittkort
    -CashDeskDoNotDecreaseStock=Deaktiver lagerreduksjon fra Poin-of-Sale (hvis "nei", vil lagerreduksjon bli utført for hvert salg utført fra POS, uansett hva som er innstilt i Lager-modulen).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Tving/begrens lager til å bruke varereduksjon ved salg
    -StockDecreaseForPointOfSaleDisabled=Lagerreduksjon fra Point-of-Sale deaktivert
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Varereduksjon i POS er ikke kompatibel med lot-håndtering
    -CashDeskYouDidNotDisableStockDecease=Lagerreduksjon ble ikke utført ved salg fra Point-of-Sale. Velg et lager
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Oppsett av bokmerkemodulen
    -BookmarkDesc=Med denne modulen kan du administrere bokmerker. Du kan også legge til snarveier til noen Dolibarr-sider eller eksterne nettsteder i venstre meny.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maksimalt antall bokmerker som skal vises i venstre meny
     ##### WebServices #####
     WebServicesSetup=Oppsett av webservices-modul
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Nummereringsmodul for sjekk-kvitteringer
     MultiCompanySetup=Oppsett av multi-selskap-modulen
     ##### Suppliers #####
     SuppliersSetup=Oppsett av  leverandørmodulen
    -SuppliersCommandModel=Komplett mal for innkjøpsordre (logo ...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Komplett mal for leverandørfaktura (logo ...)
     SuppliersInvoiceNumberingModel=Nummereringsmodel for leverandørfakturaer
     IfSetToYesDontForgetPermission=Hvis ja, ikke glem å gi tillatelser til grupper eller brukere tillatt for 2. godkjenning
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Oppsett av  Prosjektmodulen
     ProjectsModelModule=Dokumentmodell for prosjektrapporter
     TasksNumberingModules=Modul for oppgavenummerering
     TaskModelModule=Dokumentmal for oppgaverapporter
    -UseSearchToSelectProject=Vent med å trykke på en tast når du laster inn innholdet i prosjekt-kombinasjonslisten (Dette kan øke ytelsen hvis du har et stort antall prosjekter, men det er mindre praktisk)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Regnskapsperioder
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Du kan finne alternativer
     ListOfNotificationsPerUser=Liste over varslinger pr. bruker*
     ListOfNotificationsPerUserOrContact=Liste over varslinger pr. bruker* eller pr. kontakt**
     ListOfFixedNotifications=Liste over faste varslinger
    -GoOntoUserCardToAddMore=Gå til fanen "Varslinger" hos en bruker for å legge til eller fjerne en varsling
    -GoOntoContactCardToAddMore=Gå til fanen "Notefikasjoner" hos en tredjepart for å legge til notifikasjoner for kontakter/adresser
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Terskel
     BackupDumpWizard=Veiviser for å bygge database-backup dumpfil
     SomethingMakeInstallFromWebNotPossible=Installasjon av ekstern modul er ikke mulig fra webgrensesnittet på grunn av:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Administrator har deaktivert mulighete
     ConfFileMustContainCustom=Ved installering eller bygging av en ekstern modul fra programmet må modulfilene lagres i katalogen <strong> %s</strong>. Hvis du vil ha denne katalogen behandlet av Dolibarr, må du sette opp <strong> conf/conf.php</strong> for å legge til 2 direktivlinjer: <br><strong> $dolibarr_main_url_root_alt = '/custom'; </strong><br><strong> $dolibarr_main_document_root_alt = '%s/custom'; </strong>
     HighlightLinesOnMouseHover=Fremhev tabellinjer når musen flyttes over
     HighlightLinesColor=Uthev fargen på linjen når musen føres over (holdes tom for ingen uthevning)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Tekstfarge på sidetittel
     LinkColor=Farge på lenker
     PressF5AfterChangingThis=Trykk CTRL+F5 på tastaturet eller tøm nettlesercache når du har endret denne verdien for å få den til å fungere effektivt
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Bakgrunnsfarge for partalls-tabellinjer
     MinimumNoticePeriod=Frist for beskjed (Feriesøknaden må sendes inn før denne fristen)
     NbAddedAutomatically=Antall dager pr. måned som blir lagt til av brukerenes tellere(automatisk)
     EnterAnyCode=Dette feltet inneholder en referanse til identifikasjon av linje. Bruk kun verdier uten spesialkarakterer
    -UnicodeCurrency=Her legger du inn en liste med Ascii-verdier, som representerer et valutasymbol. For eksempel: $ = [36], Brasilsk real R$ = [82,36], € = [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=RGB-fargen er i HEX-format, for eksempel: FF0000
     PositionIntoComboList=Plassering av linje i kombinasjonslister
     SellTaxRate=Salgs-skattesats
     RecuperableOnly=Ja for MVA"Ikke oppfattet, men gjenopprettelig" dedikert til noen steder i Frankrike. Hold verdien til "Nei" i alle andre tilfeller.
     UrlTrackingDesc=Hvis leverandøren eller transporttjenesten tilbyr en side eller et nettsted for å sjekke status på din forsendelse, kan du skrive det her. Du kan bruke tasten {TRACKID} for å sette inn sporingnummer på webstedet.
    -OpportunityPercent=Når du oppretter en mulighet, vil du estimere et visst beløp for prosjekt. Ifølge status på muligheter, kan dette beløpet multipliseres med denne raten for å finne global verdi alle dine muligheter kan generere. Verdien er en prosentverdi (mellom 0 og 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=Mal dedikert til element
     TypeOfTemplate=Mal-type
    -TemplateIsVisibleByOwnerOnly=Mal er kun synlig for eier
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Synlig overalt
     VisibleNowhere=Ikke synlig noen steder
     FixTZ=Tidssone offset
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=Du bruker siste stabile versjon
     TitleExampleForMajorRelease=Eksempel på melding du kan bruke for å annonsere større oppdateringer (du kan bruke denne på dine websider)
     TitleExampleForMaintenanceRelease=Eksempel på beskjed du kan bruke for å annonsere denne vedlikeholdsversjonen (du kan bruke den på dine websider)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s er tilgjengelig. Versjon %s er en stor utgivelse med en rekke nye funksjoner for både brukere og utviklere. Du kan laste ned fra nedlastingsområdet https://www.dolibarr.org portal (underkatalog Stabile versjoner). Du kan lese <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">Endringslogg</a> for en komplett liste over endringer.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s er tilgjengelig. Versjon %s er en vedlikeholdsversjon, så den inneholder bare reparasjoner av bugs. Vi anbefaler alle å bruke en eldre versjon for å oppgradere til denne. Som enhver vedlikeholdsutgivelse, er det ingen nye funksjoner, eller datastruktur-endringer i denne versjonen. Du kan laste ned fra nedlastingsområdet https://www.dolibarr.org portal (underkatalog Stabile versjoner). Du kan lese <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">Endringslogg</a> for en komplett liste over endringer.
    -MultiPriceRuleDesc=Når alternativet "Flere prisnivået per vare/tjeneste" er på, kan du definere forskjellige priser (ett pr prisnivå) for hvert produkt. For å spare tid, kan du lage en regel som gir pris for hvert nivå autokalkulert i forhold til prisen på første nivå, slik at du bar legger inn en pris for hvert produkt. Denne siden er laget for å spare tid og kan være nyttig hvis prisene for hvert nivå står i forhold til første nivå. Du kan ignorere denne siden i de fleste tilfeller.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Maler for produkt-dokumenter
    -ToGenerateCodeDefineAutomaticRuleFirst=For å være i stand til å generere automatiske koder, må du først definere program for å automatisk definere strekkodenummer.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=Relaterte gjentakende fakturaer
     SeeChangeLog=Se Endringslogg-fil (kun på engelsk)
     AllPublishers=Alle utgivere
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Legg til andre sider eller tjenester
     AddModels=Legg til dokument eller nummereringsmaler
     AddSubstitutions=Legg til tast-erstatninger
     DetectionNotPossible=Detektering ikke mulig
    -UrlToGetKeyToUseAPIs=Url til API-nøkkel (når nøkkel er mottatt blir den lagret på databasebruker-tabell og må brukes for hvert API-kall)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Liste over tilgjengelige API'er
    -activateModuleDependNotSatisfied=Modul "%s" avhenger av modulen "%s", som mangler, slik at modulen "%1$s" kanskje ikke virker korrekt. Installer modulen "%2$s" eller deaktiver modulen "%1$s" hvis du vil unngå ubehagelige overraskelser
    -CommandIsNotInsideAllowedCommands=Kommandoen du prøver å kjøre er ikke i listen over tillatte kommandoer definert i parameter <strong>$dolibarr_main_restrict_os_commands</strong> i <strong>conf.php</strong> filen.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landingsside
    -SamePriceAlsoForSharedCompanies=Hvis du bruker en multiselskapsmodul, og har valgt "En pris", vil prisen være den samme for alle selskaper om varene er delt mellom miljøer
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Modulen er aktivert. Tillatelser for aktiverte module(r) ble kun gitt til admin-brukere. Du må kanskje gi tillatelser til andre brukere eller grupper manuelt om nødvendig.
    -UserHasNoPermissions=Denne brukeren har ingen tillatelser
    -TypeCdr=Bruk "Ingen" hvis dato for betalingsfrist er fakturadato pluss en delta i dager (delta er feltet "Antall dager")<br>Bruk "På slutten av måneden", dersom det etter delta, at dato må økes for å komme til slutten av måneden (+ en valgfri "Offset" i dager)<br>Bruk "Nåværene/Neste" for å få betalingsdato til å være den første N-te i måneden (N lagres i feltet "Antall dager")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Referansevaluta for selskapet (gå inn i oppsett av firma for å endre dette)
    -WarningNoteModuleInvoiceForFrenchLaw=Denne modulen %s er i samsvar med franske lover (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=Denne modulen %s er i samsvar med franske lover (Loi Finance 2016) fordi modulen Ikke reversible logger er automatisk aktivert.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Du prøver å installere modulen %s som er en ekstern modul. Aktivering av en ekstern modul betyr at du stoler på utgiveren av modulen, og at du er sikker på at denne modulen ikke endrer oppførselen til applikasjonen din negativt, og er i overensstemmelse med lovene i ditt land (%s). Hvis modulen gir en ulovlig funksjon, blir du ansvarlig for bruken av en ulovlig programvare.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Venstremarg på PDF
     MAIN_PDF_MARGIN_RIGHT=Høyremarg på PDF
     MAIN_PDF_MARGIN_TOP=Toppmarg på PDF
     MAIN_PDF_MARGIN_BOTTOM=Bunnmarg på PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Sett til ja hvis denne gruppen er en beregning av andre grupper
    -EnterCalculationRuleIfPreviousFieldIsYes=Oppgi beregningsregel hvis tidligere felt ble satt til Ja (for eksempel 'CODEGRP1 + CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Flere språkvarianter funnet
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Fjern spesialtegn
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter til ren verdi (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR-kontakt
    -GDPRContactDesc=Hvis du lagrer data om europeiske firmaer/borgere, kan du lagre den kontakten som er ansvarlig for GDPR - General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Oppsett av Ressursmodulen
     UseSearchToSelectResource=Bruk et søkeskjema for å velge en ressurs (i stedet for en nedtrekksliste).
     DisabledResourceLinkUser=Deaktiver funksjonen for å koble en ressurs til brukere
     DisabledResourceLinkContact=Deaktiver funksjonen for å koble en ressurs til kontakter
     ConfirmUnactivation=Bekreft nullstilling av modul
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/nb_NO/companies.lang b/htdocs/langs/nb_NO/companies.lang
    index 70f1dd4f3fb..38e954866dc 100644
    --- a/htdocs/langs/nb_NO/companies.lang
    +++ b/htdocs/langs/nb_NO/companies.lang
    @@ -5,14 +5,14 @@ SelectThirdParty=Velg en tredjepart
     ConfirmDeleteCompany=Er du sikker på at du vil slette dette firmaet og all tilhørende informasjon?
     DeleteContact=Slett kontaktperson
     ConfirmDeleteContact=Er du sikker på at du vil slette denne kontakten og all tilhørende informasjon?
    -MenuNewThirdParty=Ny tredjepart
    -MenuNewCustomer=Ny kunde
    -MenuNewProspect=Nytt prospekt
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Ny privatperson
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewCompany=Nytt selskap (prospekt, kunde, leverandør)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
    +CreateDolibarrThirdPartySupplier=Opprett en tredjepart (leverandør)
     CreateThirdPartyOnly=Opprett tredjepart
     CreateThirdPartyAndContact=Opprett en tredjepart med underkontakt
     ProspectionArea=Prospektområde
    @@ -25,25 +25,25 @@ ThirdPartyContact=Tredjepartskontakt
     Company=Bedrift
     CompanyName=Firmanavn
     AliasNames=Alias (kommersielt, trademark,...)
    -AliasNameShort=Alias
    +AliasNameShort=Alias ​​Navn
     Companies=Bedrifter
    -CountryIsInEEC=Landet er en del av det europeiske økonomiske fellesskap
    -ThirdPartyName=Tredjepart navn
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Tredjeparts e-post
    -ThirdParty=Tredjepart
    -ThirdParties=Tredjeparter
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospekter
     ThirdPartyProspectsStats=Prospekter
     ThirdPartyCustomers=Kunder
     ThirdPartyCustomersStats=Kunder
     ThirdPartyCustomersWithIdProf12=Kunder med %s eller %s
    -ThirdPartySuppliers=Vendors
    -ThirdPartyType=Type tredjepart
    +ThirdPartySuppliers=Leverandører
    +ThirdPartyType=Type of company
     Individual=Privatperson
    -ToCreateContactWithSameName=Vil opprette en kontakt/adresse med samme informasjon som tredjeparten, under tredjeparten, automatisk. I de fleste tilfeller, selv om tredjeparten er en privatperson, vil det være nok å opprette en tredjepart
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Morselskap
     Subsidiaries=Datterselskaper
    -ReportByMonth=Report by month
    +ReportByMonth=Rapporter etter måned
     ReportByCustomers=Rapporter etter kunde
     ReportByQuarter=Rapporter pr sats
     CivilityCode=Civility code (ikke i Norge)
    @@ -75,13 +75,13 @@ Zip=Postnummer
     Town=Poststed
     Web=Web
     Poste= Posisjon
    -DefaultLang=Standardspråk
    -VATIsUsed=Salgsavgift er brukt
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Salgsavgift er ikke brukt
     CopyAddressFromSoc=Fyll inn adressen med tredjepartsadressen
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
    +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Tredjeparts verken kunde eller leverandør. Rabatter er ikke tilgjengelige
     PaymentBankAccount=Bankkonto betaling
     OverAllProposals=Tilbud
     OverAllOrders=Ordre
    @@ -99,9 +99,9 @@ LocalTax2ES=IRPF
     TypeLocaltax1ES=RE Type
     TypeLocaltax2ES=IRPF Type
     WrongCustomerCode=Ugyldig kundekode
    -WrongSupplierCode=Vendor code invalid
    +WrongSupplierCode=Leverandørkode ugyldig
     CustomerCodeModel=Mal kundekode
    -SupplierCodeModel=Vendor code model
    +SupplierCodeModel=Leverandørkode modell
     Gencod=Strekkode
     ##### Professional ID #####
     ProfId1Short=Prof. id 1
    @@ -258,36 +258,36 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Salgsavgift-ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Avgifts-ID
     VATIntraSyntaxIsValid=Gyldig syntaks
    -VATReturn=VAT return
    +VATReturn=MVA-retur
     ProspectCustomer=Prospekt/Kunde
     Prospect=Prospekt
     CustomerCard=Kundekort
     Customer=Kunde
     CustomerRelativeDiscount=Relativ kunderabatt
    -SupplierRelativeDiscount=Relative vendor discount
    +SupplierRelativeDiscount=Relativ leverandørrabatt
     CustomerRelativeDiscountShort=Relativ rabatt
     CustomerAbsoluteDiscountShort=Absolutt rabatt
     CompanyHasRelativeDiscount=Denne kunden har en rabatt på <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Denne kunden har ingen relative rabatter angitt
    -HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
    +HasRelativeDiscountFromSupplier=Du har en standardrabatt på <b> %s%% </b> fra denne leverandøren
     HasNoRelativeDiscountFromSupplier=Du har ingen standard relativ rabatt fra denne leverandøren
    -CompanyHasAbsoluteDiscount=Denne kunden har tilgjengelige prisavslag (kreditnotaer eller tidligere innbetalinger) for <b>%s</b>%s
    -CompanyHasDownPaymentOrCommercialDiscount=Denne kunden har rabatt tilgjengelig (tilbud, nedbetalinger) for <b>%s</b>%s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Denne kunden har fortsatt kreditnotaer for <b>%s %s</b>
    -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
    -HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    -HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for <b>%s</b> %s from this supplier
    -HasCreditNoteFromSupplier=You have credit notes for <b>%s</b> %s from this supplier
    +HasNoAbsoluteDiscountFromSupplier=Du har ingen rabatt tilgjengelig fra denne leverandøren
    +HasAbsoluteDiscountFromSupplier=Du har rabatter tilgjengelig (studiepoeng eller nedbetalinger) for <b> %s </b> %s fra denne leverandøren
    +HasDownPaymentOrCommercialDiscountFromSupplier=Du har rabatter tilgjengelig (kommersielle, nedbetalinger) for <b> %s </b> %s fra denne leverandøren
    +HasCreditNoteFromSupplier=Du har kreditnotater for <b> %s </b> %s fra denne leverandøren
     CompanyHasNoAbsoluteDiscount=Denne kunden har ingen rabatt tilgjengelig
     CustomerAbsoluteDiscountAllUsers=Absolutte kunderabatter (gitt av alle brukere)
     CustomerAbsoluteDiscountMy=Absolutte kunderabatter (gitt av deg selv)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +SupplierAbsoluteDiscountAllUsers=Absolutte leverandørrabatter (oppgitt av alle brukere)
    +SupplierAbsoluteDiscountMy=Absolutt leverandørrabatter (oppgitt av deg selv)
     DiscountNone=Ingen
    -Supplier=Leverandør
    +Supplier=Vendor
     AddContact=Opprett kontakt
     AddContactAddress=Opprett kontakt/adresse
     EditContact=Endre kontakt
    @@ -303,22 +303,22 @@ AddThirdParty=Opprett tredjepart
     DeleteACompany=Slett et firma
     PersonalInformations=Personlig informasjon
     AccountancyCode=Regnskapskonto
    -CustomerCode=Kundekode
    -SupplierCode=Vendor code
    -CustomerCodeShort=Kundekode
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Kundekode, unik for alle kunder
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Påkrevet hvis tredjeparten er kunde eller prospekt
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Gyldighet kontrollert av modulen
    -ThisIsModuleRules=Dette er reglene for denne modulen
    +RequiredIfSupplier=Påkrevd hvis tredjepart er en leverandør
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospekt til kontakt
     CompanyDeleted=Firma "%s" er slettet fra databasen.
     ListOfContacts=Oversikt over kontaktpersoner
    -ListOfContactsAddresses=Liste over kontakter / adresser
    -ListOfThirdParties=Oversikt over tredjeparter
    -ShowCompany=Vis tredjepart
    +ListOfContactsAddresses=Oversikt over kontaktpersoner
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Vis kontaktperson
     ContactsAllShort=Alle (ingen filter)
     ContactType=Kontaktperson type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Kontaktpersonen er ikke tilknyttet noen tilbud
     NoContactForAnyContract=Kontaktpersonen er ikke tilknyttet noen kontrakt
     NoContactForAnyInvoice=Kontaktpersonen er ikke tilknyttet noen faktura
     NewContact=Ny kontaktperson
    -NewContactAddress=Ny kontakt/adresse
    +NewContactAddress=New Contact/Address
     MyContacts=Mine kontaktpersoner
     Capital=Aksjekapital
     CapitalOf=Aksjekapital på %s
     EditCompany=Rediger firma
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Sjekk
    -VATIntraCheckDesc=Lenken <b>%s</b> slår opp i den europeiske kontrolltjenesten for MVA (gjelder ikke norske foretak). Serveren må ha ekstern internettilgang for at denne funksjonen skal virke.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Slå opp i Intracomunnautary VAT på EU-kommisjonens nettsted
    -VATIntraManualCheck=Du kan også sjekke manuelt på <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Sjekk er ikke tilgjengelig. Tjenesten er ikke tilgjengelig for landet (%s).
    -NorProspectNorCustomer=Hverken prospekt eller kunde
    -JuridicalStatus=Juridisk status
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Ansatte
     ProspectLevelShort=Potensiell
     ProspectLevel=Prospektpotensiale
    @@ -387,31 +387,31 @@ ExportCardToFormat=Eksporter kort til format
     ContactNotLinkedToCompany=Kontaktpersonen er ikke lenket til noen tredjepart
     DolibarrLogin=Dolibarr innlogging
     NoDolibarrAccess=Ingen tilgang til Dolibarr
    -ExportDataset_company_1=Tredjeparter (Firmaer, organisasjoner, personer) og egenskaper
    -ExportDataset_company_2=Kontaktpersoner og egenskaper
    -ImportDataset_company_1=Tredjeparter (Firmaer, organisasjoner, personer) og egenskaper
    -ImportDataset_company_2=Kontakter/adresser (til tredjeparter eller ikke) og attributter
    -ImportDataset_company_3=Tredjeparters bankkontoer 
    -ImportDataset_company_4=Tredjeparter/Salgsrepresentanter (Tilordne salgsrepresentanters brukere til bedrifter)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Prisnivå
     DeliveryAddress=Leveringsadresse
     AddAddress=Legg til adresse
    -SupplierCategory=Vendor category
    +SupplierCategory=Leverandør kategori
     JuridicalStatus200=Uavhengig
     DeleteFile=Slett fil
     ConfirmDeleteFile=Er du sikker på at du vil slette denne filen?
     AllocateCommercial=Tildelt salgsrepresentant
     Organization=Organisasjon
    -FiscalYearInformation=Informasjon om regnskapsåret
    +FiscalYearInformation=Regnskapsår
     FiscalMonthStart=Første måned i regnskapsåret
    -YouMustAssignUserMailFirst=Du må opprette e-postadresse for denne brukeren først for være i stand til å legge til e-postvarslinger for ham.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=For å kunne legge til e-postvarsler, må du først definere kontakter med gyldige e-postadresser hos tredjepart
    -ListSuppliersShort=List of vendors
    +ListSuppliersShort=Liste over leverandører
     ListProspectsShort=Liste over prospekter
     ListCustomersShort=Liste over kunder
    -ThirdPartiesArea=Tredjepart og kontaktområde
    +ThirdPartiesArea=Tredjeparter / Kontakter
     LastModifiedThirdParties=Siste %s endrede tredjeparter
    -UniqueThirdParties=Totalt antall unike tredjeparter
    +UniqueThirdParties=Totalt antall tredjeparter
     InActivity=Åpent
     ActivityCeased=Stengt
     ThirdPartyIsClosed=Tredjepart er stengt
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Gjeldende utestående regning
     OutstandingBill=Max. utestående beløp
     OutstandingBillReached=Maksimun utestående beløp nådd
     OrderMinAmount=Minimumsbeløp for bestilling
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Fri kode. Denne koden kan endres når som helst.
     ManagingDirectors=(E) navn (CEO, direktør, president ...)
     MergeOriginThirdparty=Dupliser tredjepart (tredjepart du vil slette)
     MergeThirdparties=Flett tredjeparter
    -ConfirmMergeThirdparties=Er du sikker på at du vil slå sammen denne tredjeparten med den nåværende? Alle koblede objekter (fakturaer, ordre, ...) blir flyttet til nåværende tredjepart, og tredjeparten blir slettet.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Tredjeparter har blitt flettet
     SaleRepresentativeLogin=Innlogging for salgsrepresentant
     SaleRepresentativeFirstname=Selgers fornavn
     SaleRepresentativeLastname=Selgers etternavn
     ErrorThirdpartiesMerge=Det oppsto en feil ved sletting av tredjepart. Vennligst sjekk loggen. Endringer er blitt tilbakestilt.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/nb_NO/errors.lang b/htdocs/langs/nb_NO/errors.lang
    index 9ccb0276763..3515e5734ae 100644
    --- a/htdocs/langs/nb_NO/errors.lang
    +++ b/htdocs/langs/nb_NO/errors.lang
    @@ -32,9 +32,9 @@ ErrorBarCodeRequired=Strekkode påkrevet
     ErrorCustomerCodeAlreadyUsed=Kundekoden er allerede benyttet
     ErrorBarCodeAlreadyUsed=Strekkode allerede brukt
     ErrorPrefixRequired=Prefiks påkrevet
    -ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
    -ErrorSupplierCodeRequired=Vendor code required
    -ErrorSupplierCodeAlreadyUsed=Vendor code already used
    +ErrorBadSupplierCodeSyntax=Feil syntaks for leverandørkode
    +ErrorSupplierCodeRequired=Leverandørkode kreves
    +ErrorSupplierCodeAlreadyUsed=Leverandørkode allerede brukt
     ErrorBadParameters=Ugyldige parametere
     ErrorBadValueForParameter=Feil verdi '%s' for parameter '%s'
     ErrorBadImageFormat=Bildeformatet støttes ikke (Din PHP støtter ikke konvertering av dette formatet)
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Verdien '%s' har feil datoformat
     ErrorWrongDate=Dato er feil!
     ErrorFailedToWriteInDir=Kan ikke skrive til mappen %s
     ErrorFoundBadEmailInFile=Feil e-postsyntaks for %s linjer i filen (for eksempel linje %s med e-post=%s)
    -ErrorUserCannotBeDelete=Bruker kan ikke slettes. Kan være knyttet til Dolibarr-enheter.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Noen påkrevde felt er ikke fylt ut.
     ErrorSubjectIsRequired=Epost-emnet er påkrevd
     ErrorFailedToCreateDir=Kunne ikke opprette mappen. Kontroller at webserverbrukeren har skriverettigheter i dokumentmappen i Dolibarr. Hvis <b>safe_mode</b> er akivert i PHP, sjekk at webserveren eier eller er med i gruppen(eller bruker) for Dolibarr php-filer.
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Sett inn verdi for å velge liste
     ErrorNoValueForCheckBoxType=Sett inn verdi for å velge avkrysningsboks-liste
     ErrorNoValueForRadioType=Sett i verdi for radioknapp-liste
     ErrorBadFormatValueList=Listeverdien kan ikke ha mer enn ett komma: <u>%s</u>, men må ha minst ett: nøkkel,verdi
    -ErrorFieldCanNotContainSpecialCharacters=Feltet <b>%s</b> kan ikke inneholde spesialtegn.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Feltet <b>%s</b> må ikke inneholde spesialkarakterer, ikke store bokstaver og ikke bare tall
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Ingen regnskapsmodul aktivert
     ErrorExportDuplicateProfil=Profilnavnet til dette eksport-oppsettet finnes allerede
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP oppsett er ikke komplett.
     ErrorLDAPMakeManualTest=En .ldif fil er opprettet i mappen %s. Prøv å lese den manuelt for å se mer informasjon om feil.
    -ErrorCantSaveADoneUserWithZeroPercentage=Kan ikke lagre en handling med "status ikke startet" hvis feltet "gjort av" også er utfylt.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref bruket til oppretting finnes allerede.
     ErrorPleaseTypeBankTransactionReportName=Vennligst skriv inn kontoutskriftsnavnet der oppføringen skal rapporteres (Format YYYYMM eller YYYYMMDD)
    -ErrorRecordHasChildren=Kunne ikke slette posten da den har koblinger.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Objektet har minst under-objekt av typen %s
    -ErrorRecordIsUsedCantDelete=Kan ikke slette posten. Den er allerede brukt eller inkludert i et annet objekt
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript må være aktivert for å kunne bruke denne funksjonen. For å aktivere/deaktivere Javascript, gå til menyen Hjem-> Oppsett-> Visning.
     ErrorPasswordsMustMatch=Passordene må samsvare med hverandre
    -ErrorContactEMail=En teknisk feil oppsto. Vennligst kontakt administrator på e-post <b>%s</b> og oppgi feilkoden <b>%s</b> i meldingen, eller enda bedre, ved å legge til en skjermdump av denne siden.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Feil verdi for feltnummeret <b>%s</b> (verdien <b>«%s"</b> samsvarer ikke med regex regel <b>%s)</b>
     ErrorFieldValueNotIn=Feil verdi for feltnummer <b>%s</b> (verdi '<b>%s</b>' er ikke tillatt i feltet <b>%s</b> i tabell <b>%s</b>)
     ErrorFieldRefNotIn=Feil verdi for feltnummer <b>%s</b> (verdien '<b>%s</b>' er ikke en <b>%s</b> eksisterende ref)
    @@ -87,7 +88,8 @@ ErrorsOnXLines=Feil på <b>%s</b> kildelinje(r)
     ErrorFileIsInfectedWithAVirus=Antivirus-programmet var ikke i stand til å validere filen (filen kan være infisert av et virus)
     ErrorSpecialCharNotAllowedForField=Spesialtegn er ikke tillatt for feltet "%s"
     ErrorNumRefModel=En referanse finnes i databasen (%s), og er ikke kompatibel med denne nummereringsregelen. Fjern posten eller omdøp referansen for å aktivere denne modulen.
    -ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorQtyTooLowForThisSupplier=Mengde for lavt for denne leverandøren eller ingen pris angitt på dette produktet for denne leverandøren
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Oppsett av modulen ser ikke ut til å være komplett. Gå til Hjem - Oppsett - Moduler for å fullføre.
     ErrorBadMask=Feil på maske
     ErrorBadMaskFailedToLocatePosOfSequence=Feil! Maske uten sekvensnummer
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Feil, ikke korrekt tilbakestillingsverdi
     ErrorMaxNumberReachForThisMask=Maksimum nummer nådd for denne masken
     ErrorCounterMustHaveMoreThan3Digits=Teller må ha mer enn 3 siffer
     ErrorSelectAtLeastOne=Feil! Velg minst én oppføring.
    -ErrorDeleteNotPossibleLineIsConsolidated=Sletting ikke mulig fordi posten er knyttet til en banktransaksjonen som er avstemt
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s er tilordnet en annen tredjepart
     ErrorFailedToSendPassword=Klarte ikke å sende passord
     ErrorFailedToLoadRSSFile=Klarer ikke hente RSS-feed. Prøv å legge konstant MAIN_SIMPLEXMLLOAD_DEBUG hvis feilmeldinger ikke gir nok informasjon.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Bruker med loginn <b>%s</b> kunne ikke bli funnet.
     ErrorLoginHasNoEmail=Denne brukeren har ingen e-postadresse. Prosess avbrutt.
     ErrorBadValueForCode=Feil verdi for sikkerhetskode. Prøv igjen med ny verdi ...
     ErrorBothFieldCantBeNegative=Feltene %s og %s kan ikke begge være negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Kvantum på linjer i kundefakturaer kan ikke være negativ
     ErrorWebServerUserHasNotPermission=Brukerkonto <b>%s</b> som brukes til å kjøre web-server har ikke tillatelse til det
     ErrorNoActivatedBarcode=Ingen strekkodetype aktivert
    @@ -138,7 +141,7 @@ ErrorBadFormat=Feil format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Feil, dette medlemmet er ennå ikke knyttet til noen tredjepart. Koble medlemmet til en eksisterende tredjepart eller opprett en ny tredjepart før du oppretter abonnement med faktura.
     ErrorThereIsSomeDeliveries=Feil! Det er noen leveringer knyttet til denne forsendelsen. Sletting nektet
     ErrorCantDeletePaymentReconciliated=Kan ikke slette en betaling etter at det er blitt generert en bankoppføring som er blitt avstemt
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Kan ikke slette en betaling delt med minst en faktura med status Betalt
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Kan ikke tildele til konstant '%s'
     ErrorPriceExpression2=Kan ikke omdefinere innebygd funksjon '%s'
     ErrorPriceExpression3=Udefinert variabel '%s' i funksjon
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Uventet '%s'
     ErrorPriceExpression6=Feil antall argumenter (%s er gitt, %s er forventet)
     ErrorPriceExpression8=Uventet operator '%s'
     ErrorPriceExpression9=En uventet feil oppsto
    -ErrorPriceExpression10=Operator '%s' mangler operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Forventet '%s'
     ErrorPriceExpression14=Delt på null
     ErrorPriceExpression17=Udefinert variabel '%s'
    @@ -171,13 +174,13 @@ ErrorGlobalVariableUpdater4=SOAP klienten feilet med meldingen '%s'
     ErrorGlobalVariableUpdater5=Ingen global variabel valgt
     ErrorFieldMustBeANumeric=Feltet <b>%s</b> må være en numerisk verdi
     ErrorMandatoryParametersNotProvided=Obligatorisk(e) parametre ikke angitt
    -ErrorOppStatusRequiredIfAmount=Sett inn et estimert beløp for denne muligheten. Status må også settes
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Kunne ikke laste moduldeskriptorklassen for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=En feil oppsto under lagring av endringer
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Lager er obligatorisk for å kunne levere
     ErrorFileMustHaveFormat=Filen må ha formatet %s
    -ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    +ErrorSupplierCountryIsNotDefined=Land for denne leverandøren er ikke definert. Rett dette først.
     ErrorsThirdpartyMerge=Klarte ikke å flette de to postene. Forespørsel ble avbrutt.
     ErrorStockIsNotEnoughToAddProductOnOrder=Lagernivå er for lavt for å legge %s til i en ny ordre
     ErrorStockIsNotEnoughToAddProductOnInvoice=Lagernivå er for lavt for å legge %s til i en ny faktura
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=Filen ble ikke funnet. Kanskje delingsnøkkelen
     ErrorProductBarCodeAlreadyExists=Vare-strekkoden %s finnes allerede i en annen produktreferanse.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Vær også oppmerksom på at bruk av virtuelle varer som har automatisk økning/reduksjon av undervarer, ikke er mulig når minst en undervare (eller undervare av undervarer) trenger et serienummer/lotnummer.
     ErrorDescRequiredForFreeProductLines=Beskrivelse er obligatorisk for linjer med gratis vare
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=Et passord ble satt for dette medlemmet, men ingen brukerkonto ble opprettet. Det fører til at passordet ikke kan benyttes for å logge inn på Dolibarr. Det kan brukes av en ekstern modul/grensesnitt, men hvis du ikke trenger å definere noen innlogging eller passord for et medlem, kan du deaktivere alternativet "opprett en pålogging for hvert medlem" fra medlemsmodul-oppsettet. Hvis du trenger å administrere en pålogging, men ikke trenger noe passord, kan du holde dette feltet tomt for å unngå denne advarselen. Merk: E-post kan også brukes som en pålogging dersom medlemmet er knyttet til en bruker.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Et bokmerke med denne tittelen eller denne URL'en e
     WarningPassIsEmpty=Advarsel: databasepassordet er tomt. Dette er en sikkerhetsrisiko. Du bør passordbeskytte databasen og endre filen conf.php
     WarningConfFileMustBeReadOnly=Advarsel, config-filen din <b>(htdocs / conf / conf.php)</b> kan overskrives av webserveren. Dette er et alvorlig sikkerhetshull. Endre tillatelser på filen til skrivebeskyttet modus for operativsystem-brukeren brukt av web-server. Hvis du bruker Windows og FAT format for disken din, må du vite at dette filsystemet ikke tillater å legge til tillatelser på filen, så du kan ikke være helt sikker.
     WarningsOnXLines=Advarsler på <b>%s</b> kildelinje(r)
    -WarningNoDocumentModelActivated=Ingen modell, for dokumentgenerrering, er blitt aktivert. En modell vil bli valgt som standard til du kontrollerer moduloppsettet.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=ADVARSEL! Når setup er ferdig, må du deaktivere installasjon/migrasjons-verktøy ved å legge til filen <b>install.lock</b> i mappen <b>%s</b>. Uten denne filen er sikkerheten kraftig redusert
    -WarningUntilDirRemoved=Alle sikkerhetsadvarsler (synlige for admin-brukere) vil være aktiv så lenge sårbarhet er tilstede (eller at konstant MAIN_REMOVE_INSTALL_WARNING legges i Oppset-> Andre innstillinger).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Advarsel! Avsluttes selv om beløpet er forskjellig mellom kilde- og målelementer. Aktiver denne funksjonen med forsiktighet.
     WarningUsingThisBoxSlowDown=Advarsel! Ved å bruke denne boksen vil du gjøre alle sider som bruker den, tregere.
     WarningClickToDialUserSetupNotComplete=Oppsett av KlikkForÅRinge informasjon for din bruker er ikke komplett (Se fanen KlikkForÅRinge på ditt bruker-kort)
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=For mange data (mer enn %s linjer). Bruk
     WarningSomeLinesWithNullHourlyRate=Noen tider ble registrert av noen brukere mens deres timepris ikke var definert. En verdi på 0 %s pr. time ble brukt, men dette kan føre til feil verdivurdering av tidsbruk.
     WarningYourLoginWasModifiedPleaseLogin=Din innlogging er blitt endret. Av sikkerhetsgrunner må du logge inn på nytt før du kan gjøre noe.
     WarningAnEntryAlreadyExistForTransKey=En oppføring eksisterer allerede for oversettelsesnøkkel for dette språket
    -WarningNumberOfRecipientIsRestrictedInMassAction=Advarsel, antall forskjellige mottakere er begrenset til <b> %s</b> når du bruker bulkhandlinger på lister
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Advarsel, datoen for linjen ligger utenfor tiden til utgiftsrapporten
    diff --git a/htdocs/langs/nb_NO/interventions.lang b/htdocs/langs/nb_NO/interventions.lang
    index 09ef216fcdc..fa1566dac40 100644
    --- a/htdocs/langs/nb_NO/interventions.lang
    +++ b/htdocs/langs/nb_NO/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervensjoner
     InterventionCard=Intervensjonskort
     NewIntervention=Ny intervensjon
     AddIntervention=Opprett intervensjon
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Oversikt over intervensjoner
     ActionsOnFicheInter=Handlinger ved intervensjon
     LastInterventions=Siste %s intervensjoner
    @@ -51,7 +52,7 @@ UseDurationOnFichinter=Skjuler varighet-feltet for intervensjonsposter
     UseDateWithoutHourOnFichinter=Skjuler timer- og minutt-feltene for intervensjonsposter
     InterventionStatistics=Statistikk over intervensjoner
     NbOfinterventions=Antall intervensjonskort
    -NumberOfInterventionsByMonth=Antall intervensjonskort etter måned (validasjonsdato)
    +NumberOfInterventionsByMonth=Antall intervensjonskort etter måned (dato for validering)
     AmountOfInteventionNotIncludedByDefault=Beløp fra intervensjoner er ikke inkludert som standard i overskudd (i de fleste tilfeller er tidsplaner brukt til å regne tid brukt). Legg til alternativ PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT til 1 i hjem-oppsett-andre for å inkludere dem.
     ##### Exports #####
     InterId=Intervensjons-ID
    diff --git a/htdocs/langs/nb_NO/main.lang b/htdocs/langs/nb_NO/main.lang
    index 1bf0bb77cbc..13f3c8ce16a 100644
    --- a/htdocs/langs/nb_NO/main.lang
    +++ b/htdocs/langs/nb_NO/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Klarte ikke å sende epost (avsender=%s, mottager=%s)
     ErrorFileNotUploaded=Filen ble ikke lastet oppp. Sjekk at den ikke er større en maksimumsgrensen, at det er plass igjen på disken og at det ikke ligger en fil med samme navn i katalogen.
     ErrorInternalErrorDetected=Feil oppdaget 
     ErrorWrongHostParameter=Feil vertsparameter
    -ErrorYourCountryIsNotDefined=Landet ditt er ikke definert. Gå til Hjem-Innstillinger-Rediger og fyll ut skjemaet igjen.
    -ErrorRecordIsUsedByChild=Kan ikke slette posten. Posten refereres til av minst en annen post.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Feil verdi
     ErrorWrongValueForParameterX=Feil verdi for parameter %s
     ErrorNoRequestInError=Ingen forepørsel i feil
    -ErrorServiceUnavailableTryLater=Tjenesten er utilgjengelig for øyeblikket. Prøv igjen senere.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplikate verdier i unik felttype
    -ErrorSomeErrorWereFoundRollbackIsDone=Det ble oppdaget feil. Endringer rulles tilbake.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> er ikke definert i konfigurasjonsfil <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Fant ikke brukeren <b>%s</b> i databasen.
     ErrorNoVATRateDefinedForSellerCountry=Feil: Det er ikke definert noen MVA-satser for landet '%s'.
     ErrorNoSocialContributionForSellerCountry=Feil! Ingen skatter og avgifter definert for landet '%s'
     ErrorFailedToSaveFile=Feil: Klarte ikke å lagre filen.
    -ErrorCannotAddThisParentWarehouse=Du prøver å legge til en forelder-lager som allerede er et barn av nåværende
    -MaxNbOfRecordPerPage=Maks antall poster per side
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Du er ikke autorisert for å gjøre dette.
     SetDate=Still dato
     SelectDate=Velg en dato
    @@ -78,10 +78,10 @@ FileRenamed=Filen har fått nytt navn
     FileGenerated=Filen ble opprettet
     FileSaved=Filen ble lagret
     FileUploaded=Opplastningen var vellykket
    -FileTransferComplete=Fil(er) ble lastet opp
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=Fil(er) slettet
     FileWasNotUploaded=En fil er valgt som vedlegg, men er ennå ikke lastet opp. Klikk på "Legg ved fil" for dette.
    -NbOfEntries=Antall oppføringer
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Les online-hjelp (Du må være tilknyttet internett)
     GoToHelpPage=Les hjelp
     RecordSaved=Posten er lagret
    @@ -94,7 +94,7 @@ Undefined=Udefinert
     PasswordForgotten=Glemt passordet?
     NoAccount=Ingen konto?
     SeeAbove=Se ovenfor
    -HomeArea=Hjemmeområde
    +HomeArea=Hjem
     LastConnexion=Siste forbindelse
     PreviousConnexion=Forrige tilkobling
     PreviousValue=Forrige verdi
    @@ -142,6 +142,7 @@ Closed=Lukket
     Closed2=Lukket
     NotClosed=Ikke lukket
     Enabled=Slått på
    +Enable=Aktiver
     Deprecated=Utdatert
     Disable=Slå av
     Disabled=Slått av
    @@ -153,7 +154,7 @@ Update=Oppdater
     Close=Lukk
     CloseBox=Fjern widget fra kontrollpanelet
     Confirm=Bekreft
    -ConfirmSendCardByMail=Vil du virkelig sende innholdet av dette kortet med epost til <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Slett
     Remove=Fjern
     Resiliate=Terminer
    @@ -327,7 +328,7 @@ Copy=Kopier
     Paste=Lim inn
     Default=Standard
     DefaultValue=Standardverdi
    -DefaultValues=Standardverdier
    +DefaultValues=Default values/filters/sorting
     Price=Pris
     PriceCurrency=Pris (valuta)
     UnitPrice=Enhetspris
    @@ -347,7 +348,7 @@ AmountTTCShort=Beløp (inkl. MVA)
     AmountHT=Beløp (eksl. MVA)
     AmountTTC=Beløp (inkl. MVA)
     AmountVAT=MVA beløp
    -MulticurrencyAlreadyPaid=Allerede betalt, original valuta
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Gjenstår å betale, original valuta
     MulticurrencyPaymentAmount=Beløp, original valuta
     MulticurrencyAmountHT=Beløp (eks. MVA), original valuta
    @@ -428,7 +429,7 @@ ActionNotApplicable=Ikke aktuelt
     ActionRunningNotStarted=Ikke startet
     ActionRunningShort=Pågår
     ActionDoneShort=Fullført
    -ActionUncomplete=Ikke komplett
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Siste %s koblede hendelser
     CompanyFoundation=Firma/organisasjon
     Accountant=Regnskapsfører
    @@ -453,8 +454,8 @@ Generate=Generer
     Duration=Varighet
     TotalDuration=Total varighet
     Summary=Oppsummering
    -DolibarrStateBoard=Databasestatistikk
    -DolibarrWorkBoard=Kontrollpanel for åpne elementer
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=Ingen åpne elementer å behandle
     Available=Tilgjengelig
     NotYetAvailable=Ikke tilgjengelig ennå
    @@ -506,7 +507,7 @@ None=Ingen
     NoneF=Ingen
     NoneOrSeveral=Ingen eller flere
     Late=Forsinket
    -LateDesc=Forsinkelse for å bestemme om en post er forsinket eller ikke bestemmes i oppsettet. Kontakt Admin for å endre dette i Hjem - Oppsett - Varslinger.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=Ingen forsinket enhet
     Photo=Bilde
     Photos=Bilder
    @@ -530,18 +531,6 @@ September=September
     October=Oktober
     November=November
     December=Desember
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=Mai
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Okt
    -NovemberMin=Nov
    -DecemberMin=Des
     Month01=januar
     Month02=februar
     Month03=mars
    @@ -646,6 +635,8 @@ SendMail=Send e-post
     EMail=E-post
     NoEMail=Ingen e-post
     Email=E-post
    +AlreadyRead=Alreay read
    +NotRead=Ikke lest
     NoMobilePhone=Ingen mobiltelefon
     Owner=Eier
     FollowingConstantsWillBeSubstituted=Følgende konstanter vil bli erstattet med korresponderende verdi.
    @@ -677,7 +668,7 @@ NeverReceived=Aldri mottatt
     Canceled=Kansellert
     YouCanChangeValuesForThisListFromDictionarySetup=Du kan endre verdier for denne listen fra menyen Oppsett - Ordbøker
     YouCanChangeValuesForThisListFrom=Du kan endre verdier for denne listen fra menyen %s
    -YouCanSetDefaultValueInModuleSetup=Du kan sette standardverdi for nye poster i Oppsett-modulen
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Farge
     Documents=Tilknyttede filer
     Documents2=Dokumenter
    @@ -716,15 +707,15 @@ Merge=Flett
     DocumentModelStandardPDF=Standard PDF-mal
     PrintContentArea=Vis nettstedet for å skrive ut innholdet på hovedområdet
     MenuManager=Menymanager
    -WarningYouAreInMaintenanceMode=Advarsel, du er i vedlikeholds-modus, så bare <b>%s</b> har lov til å bruke programmet for øyeblikket.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Systemfeil
     CoreErrorMessage=Beklager, en feil oppsto. Kontakt din systemadministrator for å sjekke loggene eller deaktiver $dolibarr_main_prod=1 for mer informasjon
     CreditCard=Kredittkort
     ValidatePayment=Godkjenn betaling
     CreditOrDebitCard=Kreditt- eller debetkort
     FieldsWithAreMandatory=Felt med <b>%s</b> er obligatoriske
    -FieldsWithIsForPublic=Felt med <b>%s</b> er vist på den offentlige listen over medlemmene. Hvis du ikke ønsker dette, fjern merket "offentlig".
    -AccordingToGeoIPDatabase=(Ifølge GeoIP konvertering)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Linje
     NotSupported=Støttes ikke
     RequiredField=Obligatorisk felt
    @@ -732,6 +723,8 @@ Result=Resultater
     ToTest=Test
     ValidateBefore=Kortet må valideres før du bruker denne funksjonen
     Visibility=Synlighet
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privat
     Hidden=Skjult
     Resources=Ressurser
    @@ -750,6 +743,7 @@ LinkTo=Lenke til
     LinkToProposal=Lenke til tilbud
     LinkToOrder=Lenke til ordre
     LinkToInvoice=Lenke til faktura
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Lenke til leverandørordre
     LinkToSupplierProposal=Lenke til leverandørtilbud
     LinkToSupplierInvoice=Lenke til leverandørfaktura
    @@ -758,6 +752,7 @@ LinkToIntervention=Lenke til intervensjon
     CreateDraft=Lag utkast
     SetToDraft=Tilbake til kladd
     ClickToEdit=Klikk for å redigere
    +ClickToRefresh=Click to refresh
     EditWithEditor=Rediger med CKEditor
     EditWithTextEditor=Rediger med tekstbehandler
     EditHTMLSource=Rediger HTML-kilde
    @@ -772,14 +767,14 @@ ByDay=Etter dag
     BySalesRepresentative=Etter salgsrepresentant
     LinkedToSpecificUsers=Knyttet til en bestemt brukerkontakt
     NoResults=Ingen resultater
    -AdminTools=Administrative verktøy
    +AdminTools=Admin Tools
     SystemTools=Systemverktøy
     ModulesSystemTools=Modulverktøy
     Test=Test
     Element=Element
     NoPhotoYet=Ingen bilder tilgjengelig ennå
     Dashboard=Kontrollpanel
    -MyDashboard=Mitt kontrollpanel
    +MyDashboard=My Dashboard
     Deductible=Egenandel
     from=fra
     toward=mot
    @@ -802,7 +797,7 @@ PrintFile=Skriv fil %s
     ShowTransaction=Vis oppføring på bankkonto
     ShowIntervention=Vis intervensjon
     ShowContract=Vis kontrakt
    -GoIntoSetupToChangeLogo=Gå til Hjem - Oppsett - Firma for å skifte logo eller Hjem - Oppsett -  Display for å skjule.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Avvis
     Denied=Avvist
     ListOf=Liste over %s
    @@ -818,12 +813,12 @@ Sincerely=Med vennlig hilsen
     DeleteLine=Slett linje
     ConfirmDeleteLine=Er du sikker på at du vil slette denne linjen?
     NoPDFAvailableForDocGenAmongChecked=Ingen PDF var tilgjengelig for dokumentgenerering blant kontrollerte poster
    -TooManyRecordForMassAction=For mange poster valgt for massehandling. Handlingen er begrenset til en liste på%s poster.
    +TooManyRecordForMassAction=For mange poster valgt for masseutførelse. Maksimum %s poster er tillatt.
     NoRecordSelected=Ingen poster valgt
     MassFilesArea= Filområde bygget av massehandlinger
     ShowTempMassFilesArea=Vis filområde bygget av massehandlinger
    -ConfirmMassDeletion=Bekreftelse av massesletting
    -ConfirmMassDeletionQuestion=Er du sikker på at du vil slette den %s valgte posten?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Relaterte objekter
     ClassifyBilled=Klassifisert fakturert
     ClassifyUnbilled=Klassifiser ufakturert
    @@ -841,7 +836,7 @@ Calendar=Kalender
     GroupBy=Grupper etter...
     ViewFlatList=Vis liste
     RemoveString=Fjern strengen '%s'
    -SomeTranslationAreUncomplete=Noen språk kan delvis oversettes eller kan inneholde feil. Hvis du oppdager feil, kan du fikse språkfiler ved å registrere deg på <a href="https://transifex.com/projects/p/dolibarr/" target="_blank"> https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direkte nedlastingslink (offentlig/ekstern)
     DirectDownloadInternalLink=Direkte nedlastingslink (må være logget på og trenger tillatelser)
     Download=Last ned
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR og Bank
     AutomaticallyCalculated=Automatisk beregnet
     TitleSetToDraft=Gå tilbake til utkast
    -ConfirmSetToDraft=Er du sikker på at du vil gå tilbake til utkaststatus?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import ID
     Events=Hendelser
    -EMailTemplates=E-postmaler
    -FileNotShared=Filen er ikke delt eksternt
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Prosjekt
     Projects=Prosjekter
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Rettigheter
     LineNb=Linje nr.
     IncotermLabel=Incotermer
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Mandag
     Tuesday=Tirsdag
    @@ -927,7 +931,7 @@ SearchIntoInterventions=Intervensjoner
     SearchIntoContracts=Kontrakter
     SearchIntoCustomerShipments=Kundeforsendelser
     SearchIntoExpenseReports=Utgiftsrapporter
    -SearchIntoLeaves=Ferier
    +SearchIntoLeaves=Leave
     CommentLink=Kommentarer
     NbComments=Antall kommentarer
     CommentPage=Kommentarfelt
    @@ -935,7 +939,7 @@ CommentAdded=Kommentar lagt til
     CommentDeleted=Kommentar slettet
     Everybody=Alle
     PayedBy=Betalt av
    -PayedTo=Betalt til
    +PayedTo=Paid to
     Monthly=Månedlig
     Quarterly=Kvartalsvis
     Annual=Årlig
    @@ -945,6 +949,7 @@ LocalAndRemote=Lokal og ekstern
     KeyboardShortcut=Tastatursnarvei
     AssignedTo=Tildelt
     Deletedraft=Slett utkast
    -ConfirmMassDraftDeletion=Bekreft massesletting av utkast
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=Fil delt via en lenke
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=Du er for øyeblikket i %s "sandbox" -modus
    diff --git a/htdocs/langs/nb_NO/other.lang b/htdocs/langs/nb_NO/other.lang
    index 845c757bd0a..8089a1d8672 100644
    --- a/htdocs/langs/nb_NO/other.lang
    +++ b/htdocs/langs/nb_NO/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Sikkerhetskode
     NumberingShort=Nr
     Tools=Verktøy
     TMenuTools=Verktøy
    -ToolsDesc=Alle diverse-verktøy som ikke er inkludert i andre menyoppføringer, samles her. <br> <br> Alle verktøyene kan nås i venstre meny.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Fødselsdag
     BirthdayDate=Fødselsdag
     DateToBirth=Fødselsdag
    @@ -23,7 +23,7 @@ MessageForm=Melding på elektronisk betalingsformular
     MessageOK=Returside for melding om validert betaling
     MessageKO=Returside for melding om avbrutt betaling
     ContentOfDirectoryIsNotEmpty=Denne katalogen er ikke tom.
    -DeleteAlsoContentRecursively=Kryss av for å slette alt innhold rekursivt
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=År av fakturadato
     PreviousYearOfInvoice=Forrige års fakturadato
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Følgende år av fakturadato
     DateNextInvoiceBeforeGen=Dato for neste faktura (før generering)
     DateNextInvoiceAfterGen=Dato for neste faktura (etter generering)
     
    -Notify_FICHINTER_ADD_CONTACT=Kontakt lagt til intervensjon
    -Notify_FICHINTER_VALIDATE=Intervensjon validert
    -Notify_FICHINTER_SENTBYMAIL=Intervensjon sendt med post
     Notify_ORDER_VALIDATE=Kundeordre validert
     Notify_ORDER_SENTBYMAIL=Kundeordre sendt i posten
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Leverandørordre sendt med post
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Leverandørordre opptatt
     Notify_ORDER_SUPPLIER_APPROVE=Leverandørordre godkjent
     Notify_ORDER_SUPPLIER_REFUSE=Leverandørordre avvist
     Notify_PROPAL_VALIDATE=Kundentilbud validert
    -Notify_PROPAL_CLOSE_SIGNED=Lukket tilbud signert
    -Notify_PROPAL_CLOSE_REFUSED=Lukket tilbud avvist
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Tilbud sendt med post
     Notify_WITHDRAW_TRANSMIT=Overføring avbrudt
     Notify_WITHDRAW_CREDIT=Kreditt tilbaketrekning
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Tredjepart opprettet
     Notify_COMPANY_SENTBYMAIL=E-poster sendt fra tredjeparts-kort
     Notify_BILL_VALIDATE=Kundefaktura validert
     Notify_BILL_UNVALIDATE=Validering fjernet på kundefaktura
    -Notify_BILL_PAYED=Kundefaktura betalt
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Kundefaktura kansellert
     Notify_BILL_SENTBYMAIL=Kundefaktura sendt i posten
     Notify_BILL_SUPPLIER_VALIDATE=Leverandørfaktura validert
    -Notify_BILL_SUPPLIER_PAYED=Leverandørfaktura betalt
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Leverandørfaktura sendt i posten
     Notify_BILL_SUPPLIER_CANCELED=Leverandørfaktura kansellert
     Notify_CONTRACT_VALIDATE=Kontrakt validert
     Notify_FICHEINTER_VALIDATE=Intervensjon validert
    +Notify_FICHINTER_ADD_CONTACT=Kontakt lagt til intervensjon
    +Notify_FICHINTER_SENTBYMAIL=Intervensjon sendt med post
     Notify_SHIPPING_VALIDATE=Leveranse validert
     Notify_SHIPPING_SENTBYMAIL=Leveranse sendt i posten
     Notify_MEMBER_VALIDATE=Medlem validert
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Opprettelse av prosjekt
     Notify_TASK_CREATE=Oppgave opprettet
     Notify_TASK_MODIFY=Oppgave endret
     Notify_TASK_DELETE=Oppgave slettet
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Se oppsett av modul %s
     NbOfAttachedFiles=Antall vedlagte filer/dokumenter
     TotalSizeOfAttachedFiles=Total størrelse på vedlagte filer/dokumenter
     MaxSize=Maksimal størrelse
     AttachANewFile=Legg ved ny fil/dokument
     LinkedObject=Lenkede objekter
    -NbOfActiveNotifications=Antall notifikasjoner (antall e-postmottakere)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hei)__\nDette er en testmelding sendt til __EMAIL__.\nDe to linjene er skilt fra hverandre med et linjeskift.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hei)__\nDette er en <b> test </b> e-post (ordtesten må være i fet skrift). De to linjene skilles med et linjeskift.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hei)__\n\nVedlagt følger faktura __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Med vennlig hilsen)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hei)__\n\nVi kan ikke se at fakturaen __REF__ er betalt. Vedlagt følger fakturaen igjen, som en påminnelse.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Med vennlig hilsen)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hei)__\n\nVedlagt tilbud __REF__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hei)__\n\nVedlagt tilbud som avtalt __REF__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hei)__\n\nVedlagt ordre __REF__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hei)__\n\nVedlagt vår bestilling __REF__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hei)__\n\nVedlagt faktura __REF__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hei)__\n\nVedlagt finner du forsendelsesinfo __REF__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hei)__\n\nVedlagt intervensjon __REF__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hei)__\n\n\n__(Vennlig hilsen)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=Du kan klikke på linken under for å utføre betalingen din, hvis det ikke allerede er gjort.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Installer eller aktiver GD-bibliotek i din PHP-installasjon
     ProfIdShortDesc=<b>Prof-ID %s</b> er avhengig av tredjepartens land.<br>For eksempel er det for <b>%s</b>, koden <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistikk over summen av produkter/tjenester
    -StatsByNumberOfEntities=Statistikk i antall henvisende enheter (antall fakturaer, eller ordre...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Antall tilbud
     NumberOfCustomerOrders=Antall kundeordre
     NumberOfCustomerInvoices=Antall kundefakturaer
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Antall enheter i kundefakturaer
     NumberOfUnitsSupplierProposals=Antall enheter i leverandørtilbud
     NumberOfUnitsSupplierOrders=Antall enheter på leverandørordre
     NumberOfUnitsSupplierInvoices=Antall enheter i leverandørfakturaer
    -EMailTextInterventionAddedContact=En ny intervensjon %s er blitt tildelt deg.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Intervensjonen %s har blitt validert.
     EMailTextInvoiceValidated=Fakturaen %s har blitt validert.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Tilbudet %s har blitt validert.
     EMailTextProposalClosedSigned=Forslaget %s er lukket signert.
     EMailTextOrderValidated=Ordren %s har blitt validert.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Ordren %s er godkjent av %s.
     EMailTextOrderRefused=Ordren %s har blitt avvist.
     EMailTextOrderRefusedBy=Ordren %s har blitt avvist av %s.
     EMailTextExpeditionValidated=Leveransen %s er blitt validert
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Datasett for import
     DolibarrNotification=Automatisk varsling
     ResizeDesc=Skriv inn ny bredde <b>eller</b> ny høyde. BxH forhold vil bli beholdt .
    @@ -204,7 +212,7 @@ NewLength=Ny bredde
     NewHeight=Ny høyde
     NewSizeAfterCropping=Ny størrelse etter beskjæring
     DefineNewAreaToPick=Definer nytt område på bildet for å hente (venstreklikk på bildet og dra til du kommer til motsatt hjørne)
    -CurrentInformationOnImage=Informasjon om gjeldende bilde
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Billedbehandler
     YouReceiveMailBecauseOfNotification=Du mottar denne meldingen fordi din e-post har blitt lagt til listen over mål for å bli informert om spesielle hendelser i %s programvare av %s.
     YouReceiveMailBecauseOfNotification2=Denne hendelsen er følgende:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Passordet ditt må ha minst <strong> %s </stro
     YourPasswordHasBeenReset=Ditt passord er tilbakestilt
     ApplicantIpAddress=IP-adresse til søkeren
     SMSSentTo=SMS sendt til %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Eksportområde
    diff --git a/htdocs/langs/nb_NO/projects.lang b/htdocs/langs/nb_NO/projects.lang
    index f67184f793c..259045027e5 100644
    --- a/htdocs/langs/nb_NO/projects.lang
    +++ b/htdocs/langs/nb_NO/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Er du sikker på at du vil slette dette prosjektet?
     ConfirmDeleteATask=Er du sikker på at du vil slette denne oppgaven?
     OpenedProjects=Åpne prosjekter
     OpenedTasks=Åpne oppgaver
    -OpportunitiesStatusForOpenedProjects=Mulighet-beløp på åpne prosjekter etter status
    -OpportunitiesStatusForProjects=Mulighet - beløp på prosjekter etter status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Vis prosjekt
     ShowTask=Vis oppgave
     SetProject=Sett prosjekt
     NoProject=Ingen prosjekter definert
    -NbOfProjects=Antall prosjekter
    -NbOfTasks=Antall oppgaver
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Tid brukt
     TimeSpentByYou=Tid bruk av deg
     TimeSpentByUser=Tid brukt av bruker
    @@ -77,21 +77,22 @@ Time=Tid
     ListOfTasks=Oppgaveliste
     GoToListOfTimeConsumed=Gå til liste for tidsbruk
     GoToListOfTasks=Gå til oppgaveliste
    -GoToGanttView=Go to Gantt view
    +GoToGanttView=Gå til Gantt-visning
     GanttView=Gantt visning
    -ListProposalsAssociatedProject=Oversikt over tilbud relatert til dette prosjektet
    -ListOrdersAssociatedProject=Liste over kundeordre tilknyttet prosjektet
    -ListInvoicesAssociatedProject=Liste over kundefakturaer tilknyttet prosjektet
    -ListPredefinedInvoicesAssociatedProject=Liste over kundefaktura-maler tilknyttet prosjektet
    -ListSupplierOrdersAssociatedProject=Liste over leverandørordre tilknyttet prosjektet
    -ListSupplierInvoicesAssociatedProject=Liste over leverandørfakturaer tilknyttet prosjektet
    -ListContractAssociatedProject=Liste over kontrakter knyttet til prosjektet
    -ListShippingAssociatedProject=Liste over forsendelser som er knyttet til prosjektet
    -ListFichinterAssociatedProject=Liste over intervensjoner knyttet til prosjektet
    -ListExpenseReportsAssociatedProject=Liste over utgiftsrapporter tilknyttet prosjektet
    -ListDonationsAssociatedProject=Liste over donasjoner tilknyttet prosjektet
    -ListVariousPaymentsAssociatedProject=Liste over diverse betalinger knyttet til prosjektet
    -ListActionsAssociatedProject=Liste over hendelser knyttet til prosjektet
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Liste over tidsbruk på oppgaver i prosjektet
     ListTaskTimeForTask=Liste over tid forbruket på oppgaven
     ActivityOnProjectToday=Prosjektaktivitet i dag
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Prosjekt %s er endret
     TaskCreatedInDolibarr=Oppgave %s opprettet
     TaskModifiedInDolibarr=Oppgave %s endret
     TaskDeletedInDolibarr=Oppgave %s slettet
    -OpportunityStatus=Mulighet-status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Tilbudsstatus
    -OpportunityProbability=Mulighet - sannsynlighet
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Mulig.sans.
    -OpportunityAmount=Mulighet beløp
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Tilbudsbeløp
     OpportunityAmountAverageShort=Gj.snitt tilbudsbeløp
     OpportunityAmountWeigthedShort=Vektet tilbudsbeløp
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Bidragsyter
     SelectElement=Velg element
     AddElement=Lenke til element
     # Documents models
    -DocumentModelBeluga=Oversikt over prosjektmaler for lenkede objekter
    -DocumentModelBaleine=Prosjekt-rapportmal for oppgaver
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planlagt arbeidsmengde
     PlannedWorkloadShort=Arbeidsmengde
     ProjectReferers=Relaterte elementer
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Prosjekter med denne brukeren som kontakt
     TasksWithThisUserAsContact=Oppgaver tildelt denne brukeren
     ResourceNotAssignedToProject=Ikke tildelt til prosjekt
     ResourceNotAssignedToTheTask=Ikke tildelt oppgaven
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Tid brukt av
     TasksAssignedTo=Oppgaver tildelt
     AssignTaskToMe=Tildel oppgaven til meg
    @@ -189,25 +192,26 @@ AssignTaskToUser=Tildel oppgave til %s
     SelectTaskToAssign=Velg oppgave å tildele...
     AssignTask=Tildel
     ProjectOverview=Oversikt
    -ManageTasks=Bruk prosjekter for å følge oppgaver og tidsbruk
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Bruk prosjekter for å følge muligheter
    -ProjectNbProjectByMonth=Antall prosjekter opprettet etter måned
    -ProjectNbTaskByMonth=Antall opprettede oppgaver etter måned
    -ProjectOppAmountOfProjectsByMonth=Tilbudsbeløp etter måned
    -ProjectWeightedOppAmountOfProjectsByMonth=Gjennomsnittsbeløp på muligheter etter måned
    -ProjectOpenedProjectByOppStatus=Åpne prosjekter etter mulighet-status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistikk over muligheter
     TasksStatistics=Statistikk over prosjekter/hovedoppgaver
     TaskAssignedToEnterTime=Oppgave tildelt. Tidsbruk kan legges til
     IdTaskTime=Oppgave-tid ID
     YouCanCompleteRef=Hvis du ønsker å tilføre referansen med litt informasjon (for å bruke det som søkefiltre ), er det anbefalt å legge til et - tegn for å skille den, så den automatiske nummereringen fortsatt fungerer korrekt for neste prosjekt. For eksempel %s-ABC. Du kan også foretrekke å legge søkenøkler til etiketten. Men beste praksis kan være å legge et dedikert felt, også kalt komplementære egenskaper.
     OpenedProjectsByThirdparties=Åpne prosjekter etter tredjeparter
    -OnlyOpportunitiesShort=Kun muligheter
    -OpenedOpportunitiesShort=Åpne muligheter
    -NotAnOpportunityShort=Ikke en mulighet
    -OpportunityTotalAmount=Totalbeløp på muligheter
    -OpportunityPonderatedAmount=Gjennomsnittsbeløp på muligheter
    -OpportunityPonderatedAmountDesc=Muligheter - beløp vektet med sannsynlighet
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Utforskning
     OppStatusQUAL=Kvalifikasjon
     OppStatusPROPO=Tilbud
    @@ -227,4 +231,6 @@ AllowCommentOnProject=Tillat brukerkommentarer på prosjekter
     DontHavePermissionForCloseProject=Du har ikke tillatelse til å lukke prosjektet %s
     DontHaveTheValidateStatus=Prosjektet %s må være åpent for å kunne lukkes
     RecordsClosed=%s prosjekt(er) lukket
    -SendProjectRef=Information project %s
    +SendProjectRef=Informasjon prosjekt %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/nl_BE/admin.lang b/htdocs/langs/nl_BE/admin.lang
    index e4ea06291c4..2c87937cd25 100644
    --- a/htdocs/langs/nl_BE/admin.lang
    +++ b/htdocs/langs/nl_BE/admin.lang
    @@ -23,16 +23,13 @@ ImportMySqlDesc=Voor de invoer van een backupbestand, voert u het mysql-commando
     CommandsToDisableForeignKeysForImportWarning=Verplicht als je je sql neerslag later wil gebruiken
     ExportStructure=Struktuur
     NameColumn=Kollomennaam
    -BoxesDesc=Widgets ( grafisch object of element) zijn componenten om specifieke informatie toe te voegen om bepaalde pagina's te personaliseren. Je hebt de keuze om al dan niet de widget te laten zien door de doelpagina te selecteren en te klikken op 'Activeren', of te klikken op het vuilbakje om het uit te schakelen.
     ModulesMarketPlaceDesc=Je kan meer modules vinden door te zoeken op andere externe websites, waar je ze kan downloaden
     ModulesMarketPlaces=Zoek externe app / modules
     DoliStoreDesc=DoliStore, de officiële markt voor externe Dolibarr ERP / CRM modules
    -WebSiteDesc=Linken naar websites om naar extra modules te zoeken 
     BoxesActivated=Geactiveerde widgets
     ProtectAndEncryptPdfFilesDesc=Een beveiligd PDF document kan gelezen en afgedrukt worden met elke PDF browser of lezer. Echter, bewerken en kopiëren van gegevens in een beveiligd document is niet meer mogelijk. Door het gebruik van deze functionaliteit, is het niet mogelijk om een globaal samengevoegd PDF document te maken van meerdere beveiligde PDF documenten.
     MeasuringUnit=Maateenheid
     EMailsSetup=Email instellingen
    -SubmitTranslation=Indien de vertaling voor deze taal niet compleet is of fouten bevat in de vertaling, dan kan u die verbeteren door de bestanden in de folder <b>langs/%s</b> aan te passen en uw aanpassingen in te dienen bij www.transifex.com/dolibarr-association/dolibarr/ of via op het forum van Dolibarr : www.dolibarr.org
     SubmitTranslationENUS=Als de vertaling voor deze taal niet volledig is of een fout bevat, dan kunt u dit corrigeren door het bewuste taalbestand in de map <b>Langs/%s</b> te wijzigen en de wijzigingen op het Dolibarr forum te delen met anderen: www.dolibarr.org.
     ModulesSetup=Instellingen voor Modules / Applicaties
     ModuleFamilyProducts=Producten Beheer (PB)
    @@ -43,7 +40,6 @@ LibraryToBuildPDF=Bibliotheek om PDF bestanden te genereren.
     Module1780Name=Labels/Categorien
     Permission1004=Bekijk voorraadmutaties
     Permission1005=Creëren / wijzigen voorraadmutaties
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
     SalariesSetup=Setup van module salarissen
     MailToSendProposal=Klant voorstellen
     MailToSendOrder=Klant bestellingen
    diff --git a/htdocs/langs/nl_BE/agenda.lang b/htdocs/langs/nl_BE/agenda.lang
    index 099cda7490d..df9b1d2a2cf 100644
    --- a/htdocs/langs/nl_BE/agenda.lang
    +++ b/htdocs/langs/nl_BE/agenda.lang
    @@ -8,9 +8,7 @@ NewCompanyToDolibarr=Derde %s aangemaakt
     ContractValidatedInDolibarr=Contract %s goedgekeurd
     MemberModifiedInDolibarr=Lid %s werd aangepast
     MemberResiliatedInDolibarr=Lid %s verwijderd
    -MemberSubscriptionAddedInDolibarr=Abonnement %s voor lid %s toegevoegd
     MemberSubscriptionModifiedInDolibarr=Abonnement %s voor lid %s aangepast
    -MemberSubscriptionDeletedInDolibarr=Abonnement %s voor lid %s verwijderd
     ShipmentValidatedInDolibarr=Shipment %s goedgekeurd
     ShipmentClassifyClosedInDolibarr=Verzending %s werd geclassificeerd als gefactureerd
     ShipmentUnClassifyCloseddInDolibarr=Verzending %s werd geclassificieerd als opnieuw geopend
    @@ -30,5 +28,4 @@ AgendaUrlOptionsProject=<b>project=__PROJECT_ID__</b> om de uitvoer te beperken
     AgendaUrlOptionsNotAutoEvent=<b>notactiontype=systemauto</b> om automatische gebeurtenis uit te sluiten.
     AgendaShowBirthdayEvents=Toon verjaardagen van contacten
     AgendaHideBirthdayEvents=Verberg verjaardagen van contacten
    -AgendaExtNb=Kalender nr. %s
     ConfirmCloneEvent=Weet u zeker als u event <b>%s</b> wilt klonen?
    diff --git a/htdocs/langs/nl_BE/companies.lang b/htdocs/langs/nl_BE/companies.lang
    index 2c4af927a47..68a7895274a 100644
    --- a/htdocs/langs/nl_BE/companies.lang
    +++ b/htdocs/langs/nl_BE/companies.lang
    @@ -1,7 +1,6 @@
     # Dolibarr language file - Source file is en_US - companies
     ConfirmDeleteCompany=Weet u zeker dat u dit bedrijf en alle geërfde gegevens wilt verwijderen?
     ConfirmDeleteContact=Weet u zeker dat u deze contactpersoon en alle geërfde gegevens wilt verwijderen ?
    -ToCreateContactWithSameName=Maakt automatisch een contact/adres met dezelfde informatie als de derde onder de derde. In de meeste gevallen is het voldoende om een derde partij aan te maken.
     RegisteredOffice=Maarschappelijke zetel
     StateShort=Staat
     PhoneShort=Telefoonnummer
    @@ -23,10 +22,8 @@ ProfId3MX=Prof Id 3 (Professioneel Charter)
     ProfId2PT=Prof. id 2 (INSZ-nummer)
     ProfId3PT=Prof. Id 3 (Commerciële fiche aantal)
     ProfId2TN=Prof. id 2 (Fiscale inschrijving)
    -CompanyHasAbsoluteDiscount=Deze afnemer heeft nog een kortingstegoed van <b> %s %s</b>
     CompanyHasCreditNote=Deze afnemer heeft nog creditnota's of eerdere stortingen voor <b> %s %s</b>
    -FromContactName=Naam:
    -CustomerCodeShort=Klant code
    +RequiredIfCustomer=Vereist als Klant een afnemer of prospect is
     ContactForOrders=Contactpersoon opdrachten
     ContactForOrdersOrShipments=Contactpersoon voor orders of zendingen
     ContactForProposals=Contactpersoon offertes
    @@ -37,17 +34,13 @@ ContactOthers=Ander
     StatusProspect1=Contact opnemen
     StatusProspect2=Contact lopende
     ChangeToContact=Status veranderen naar 'Contact opnemen'
    -ExportDataset_company_1=Derde partijen (Bedrijf/stichting/fysieke personen) en eigenschappen
    -ImportDataset_company_1=Derde partijen (Bedrijven/stichtingen/fysieke mensen) en eigenschappen
     AllocateCommercial=Toegewezen aan de verkoopsverantwoordelijke
     YouMustCreateContactFirst=U dient voor de Klant eerst contactpersonen met een e-mailadres in te stellen, voordat u kennisgevingen per e-mail kunt sturen.
    -LastModifiedThirdParties=Laatste %s bewerkte derde partijen
     ThirdPartyIsClosed=Derde partij is gesloten
     ProductsIntoElements=Lijst van producten/diensten in %s
     OutstandingBillReached=Maximum bereikt voor openstaande rekening
     MergeOriginThirdparty=Kopieer derde partij (derde partij die je wil verwijderen)
     MergeThirdparties=Voeg derde partijen samen
    -ConfirmMergeThirdparties=Bent u zeker dat u deze derde partij wil samenvoegen met de huidige? Alle gekoppelde objecten (facturen, orders, ...) worden verplaatst naar de huidige derde partij zodat u de gedupliceerde kan verwijderen.
     SaleRepresentativeLogin=Login van de verkoopsverantwoordelijke
     SaleRepresentativeFirstname=Voornaam van de verkoopsverantwoordelijke
     SaleRepresentativeLastname=Familienaam van de verkoopsverantwoordelijke
    diff --git a/htdocs/langs/nl_BE/errors.lang b/htdocs/langs/nl_BE/errors.lang
    index 0530bb76d67..dbfa039f8a4 100644
    --- a/htdocs/langs/nl_BE/errors.lang
    +++ b/htdocs/langs/nl_BE/errors.lang
    @@ -1,6 +1,5 @@
     # Dolibarr language file - Source file is en_US - errors
     ErrorBadFormatValueList=De waarde uit de lijst kan niet meer dan 1 komma bevatten :  <u>%s</u>, maar op zijn minst een : key,value
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Verkeerde Definition Of Menu Array in de Module Descriptor (verkeerde waarde voor referentie fk_menu)
    -ErrorSavingChanges=Er is een fout opgetreden tijdens het wegschrijven van de veranderingen
     WarningPasswordSetWithNoAccount=Een paswoord is aanwezig voor deze gebruiker. Alhoewel, geen gebruikers account werd aangemaakt. Dus dit paswoord is bewaard maar kan niet gebruikt worden om in te loggen in Dolibarr. Het kan zij dat het gebruikt wordt door een externe module/interface maar indien je het niet nodig acht om een login noch paswoord te definiëren voor een gebruiker,  kan je de optie "Manage a login for each member" deactiveren van de Member module setup. Indien je een login dient te begeren maar zonder paswoord, dan kun je dit veld leeg laten om deze waarschuwing te vermijden. Nota: Email kan ook gebruikt worden als login indien het lid gekoppeld is aan een gebruiker.
     WarningTooManyDataPleaseUseMoreFilters=Te veel gegevens (meer dan %s lijnen). Gebruik meer filters of zet deze constante %s op een hogere limiet.
    diff --git a/htdocs/langs/nl_BE/hrm.lang b/htdocs/langs/nl_BE/hrm.lang
    index db7fdd34570..15edcc42c1e 100644
    --- a/htdocs/langs/nl_BE/hrm.lang
    +++ b/htdocs/langs/nl_BE/hrm.lang
    @@ -7,4 +7,3 @@ DeleteEstablishment=Verwijderen inrichting
     OpenEtablishment=Open inrichting
     CloseEtablishment=Sluit inrichting
     DictionaryDepartment=HRM - afdelingen lijst
    -DictionaryFunction=HRM - Functielijst
    diff --git a/htdocs/langs/nl_BE/interventions.lang b/htdocs/langs/nl_BE/interventions.lang
    index 2251b0d6e6d..937ada94ffc 100644
    --- a/htdocs/langs/nl_BE/interventions.lang
    +++ b/htdocs/langs/nl_BE/interventions.lang
    @@ -3,10 +3,7 @@ InterventionsArea=Interventieruimte
     DraftFichinter=Concept interventie
     LastModifiedInterventions=Laatste %s gemodificeerde interventies
     InterventionStatistics=Statistieken van de interventies
    -NbOfinterventions=Nr van de interventiekaarten
    -NumberOfInterventionsByMonth=Nr van de interventiekaarten per maand (datum van goedkeuring)
     InterId=Interventie id
    -InterRef=Interventie ref.
     InterDateCreation=Datum aanmaak interventie
     InterDuration=Duur interventie
     InterStatus=Status interventie
    diff --git a/htdocs/langs/nl_BE/main.lang b/htdocs/langs/nl_BE/main.lang
    index a0479f97a11..1fc7725e51b 100644
    --- a/htdocs/langs/nl_BE/main.lang
    +++ b/htdocs/langs/nl_BE/main.lang
    @@ -22,7 +22,6 @@ FormatDateHourText=%d %B %Y %H:%M
     NoRecordFound=Geen record gevonden
     ErrorFileNotUploaded=Bestand is niet geüpload. Controleer of de grootte niet meer is dan maximaal toegestaan, of er vrije ruimte beschikbaar is op de schijf en of er niet al een bestand met dezelfde naam in deze map bestaat.
     ErrorWrongHostParameter=Verkeerde host instelling
    -ErrorRecordIsUsedByChild=Tabelregel verwijderen mislukt. Deze tabelregel wordt gebruikt door ten minste een onderliggend tabelregel.
     NotAuthorized=U bent niet toegelaten om dat te doen.
     FileWasNotUploaded=Een bestand is geselecteerd als bijlage, maar is nog niet geupload. Klik hiervoor op "Bevestig dit bestand".
     GoToHelpPage=Contacteer helpdesk
    @@ -39,7 +38,6 @@ Running=Bezig
     Categories=Tags / categorieën
     Category=Tag / categorie
     ApprovedBy2=Goedgekeurd door (tweede goedkeuring)
    -YouCanSetDefaultValueInModuleSetup=Je kan de standaard waarde gebruiken wanneer je een nieuw record plaatst in de module setup
     SetLinkToAnotherThirdParty=Link naar een derde partij
     SelectAction=Selecteer actie
     Deny=Weigeren
    @@ -48,7 +46,6 @@ Sincerely=Met vriendelijke groeten
     DeleteLine=Verwijder lijn
     ClassifyBilled=Wijzig Status naar "gefactureerd"
     Exports=Exporten
    -WebSite=Website
     ExpenseReports=Uitgaven rapporten
     Select2NotFound=Geen resultaten gevonden
     Select2LoadingMoreResults=Laden van meer resultaten...
    diff --git a/htdocs/langs/nl_BE/projects.lang b/htdocs/langs/nl_BE/projects.lang
    index 31acdc03ff4..a6538578348 100644
    --- a/htdocs/langs/nl_BE/projects.lang
    +++ b/htdocs/langs/nl_BE/projects.lang
    @@ -1,6 +1,4 @@
     # Dolibarr language file - Source file is en_US - projects
     ProjectsArea=Project Omgeving
     OpenedProjects=Open projecten
    -OpenedTasks=Open taken
    -ListOrdersAssociatedProject=Lijst van klantbestellingen die aan dit project gekoppeld zijn
     ProjectModifiedInDolibarr=Project %s gewijzigd
    diff --git a/htdocs/langs/nl_BE/sendings.lang b/htdocs/langs/nl_BE/sendings.lang
    index eda1298723c..2a89eff75d3 100644
    --- a/htdocs/langs/nl_BE/sendings.lang
    +++ b/htdocs/langs/nl_BE/sendings.lang
    @@ -9,7 +9,6 @@ ConfirmDeleteSending=Weet u zeker dat u deze verzending wilt verwijderen?
     ConfirmValidateSending=Weet u zeker dat u deze verzending met referentie <b>%s</b> wilt valideren?
     DateDeliveryPlanned=Verwachte leveringsdatum
     RefDeliveryReceipt=Referentie ontvangstbevestiging
    -StatusReceipt=Status ontvangstbevestiging
     ActionsOnShipping=Events i.v.m. verzending
     ProductQtyInSuppliersShipmentAlreadyRecevied=Ontvangen hoeveelheid producten uit geopende leveranciersbestelling
     NoProductToShipFoundIntoStock=Geen product om te verzenden gevonden in magazijn <b>%s</b>. Werk stock bij of ga terug en kies een ander magazijn.
    diff --git a/htdocs/langs/nl_NL/accountancy.lang b/htdocs/langs/nl_NL/accountancy.lang
    index c603eeadb92..7a6404ca69f 100644
    --- a/htdocs/langs/nl_NL/accountancy.lang
    +++ b/htdocs/langs/nl_NL/accountancy.lang
    @@ -36,15 +36,19 @@ AlreadyInGeneralLedger=Reeds doorgeboekt
     NotYetInGeneralLedger=Nog niet doorgeboekt
     GroupIsEmptyCheckSetup=Groep is leeg. Controleer instellingen bij gepersonaliseerde rekeninggroep
     DetailByAccount=Details grootboekrekening
    -AccountWithNonZeroValues=Grootboekrekeningen met boekingen
    +AccountWithNonZeroValues=Grootboekrekeningen met niet-nulwaarden
     ListOfAccounts=Overzicht grootboekrekeningen
    +CountriesInEEC=Landen in de EEG
    +CountriesNotInEEC=Landen niet in EEG
    +CountriesInEECExceptMe=Landen in de EEG behalve %s
    +CountriesExceptMe=Alle landen behalve %s
     
     MainAccountForCustomersNotDefined=De standaard grootboekrekening voor klanten is niet vastgelegd bij de instellingen
    -MainAccountForSuppliersNotDefined=Main accounting account for vendors not defined in setup
    +MainAccountForSuppliersNotDefined=Hoofdrekening voor leveranciers die niet zijn gedefinieerd in de configuratie
     MainAccountForUsersNotDefined=De standaard grootboekrekening voor gebruikers is niet vastgelegd bij de instellingen
     MainAccountForVatPaymentNotDefined=Standaard grootboekrekening voor betaalde BTW is niet vastgelegd bij instellingen
     
    -AccountancyArea=Accounting area
    +AccountancyArea=Boekhouding
     AccountancyAreaDescIntro=Het gebruiken van de boekhoudmodule gaat met verschillende stappen
     AccountancyAreaDescActionOnce=De volgende werkzaamheden worden maar één keer uitgevoerd of jaarlijks
     AccountancyAreaDescActionOnceBis=De volgende stappen kunnen in de toekomst een tijdsbesparing opleveren bij het aanmaken van journaalposten (bij het schrijven van de journaalposten in de boekhouding)
    @@ -55,10 +59,10 @@ AccountancyAreaDescChartModel=STAP %s: Maak rekeningschema aan vanuit menu %s
     AccountancyAreaDescChart=STAP %s: Aanmaken of controleren van het rekeningschema menu %s
     
     AccountancyAreaDescVat=STAP %s: Vastleggen grootboekrekeningen voor BTW registratie. Gebruik hiervoor menukeuze %s. 
    -AccountancyAreaDescDefault=STEP %s: Define default accounting accounts. For this, use the menu entry %s.
    +AccountancyAreaDescDefault=STAP %s: standaard grootboekrekeningen vastleggen. Gebruik hiervoor het menu-item %s.
     AccountancyAreaDescExpenseReport=STAP %s: Vastleggen grootboekrekeningen voor elke soort kostenoverzicht. Gebruik hiervoor menukeuze %s.
     AccountancyAreaDescSal=STAP %s: Vastleggen grootboekrekeningen voor salarisbetalingen. Gebruik hiervoor menukeuze %s.
    -AccountancyAreaDescContrib=STAP %s: Vastleggen grootboekrekeningen bij overige kosten (diverse belastingen). Gebruik hiervoor menukeuze %s;
    +AccountancyAreaDescContrib=STAP %s: Definieer standaard grootboekrekeningen voor speciale uitgaven (diverse belastingen). Gebruik hiervoor het menu-item %s.
     AccountancyAreaDescDonation=STAP %s : Vastleggen grootboekrekeningen voor donaties. Gebruik hiervoor menukeuze %s.
     AccountancyAreaDescMisc=STAP %s: Vastleggen standaard grootboekrekeningen voor overige transacties. Gebruik hiervoor menukeuze %s.
     AccountancyAreaDescLoan=STAP %s: Vastleggen grootboekrekeningen voor salarisbetalingen. Gebruik hiervoor menukeuze %s.
    @@ -91,7 +95,7 @@ MenuProductsAccounts=Grootboekrekeningen producten
     ProductsBinding=Grootboekrekeningen producten
     Ventilation=Koppelen aan grootboekrekening
     CustomersVentilation=Koppeling verkoopfacturen klant
    -SuppliersVentilation=Vendor invoice binding
    +SuppliersVentilation=Koppeling factuur leverancier
     ExpenseReportsVentilation=Declaraties koppelen aan rekening
     CreateMvts=Nieuwe boeking
     UpdateMvts=Aanpassing boeking
    @@ -123,23 +127,23 @@ XLineSuccessfullyBinded=%s producten/diensten met succes gekoppeld aan een groot
     XLineFailedToBeBinded=%s producten/diensten zijn niet gekoppeld aan een grootboekrekening
     
     ACCOUNTING_LIMIT_LIST_VENTILATION=Aantal verbonden elementen per pagina (voorstel: max. 50)
    -ACCOUNTING_LIST_SORT_VENTILATION_TODO=Begin the sorting of the page "Binding to do" by the most recent elements
    -ACCOUNTING_LIST_SORT_VENTILATION_DONE=Begin the sorting of the page "Binding done" by the most recent elements
    +ACCOUNTING_LIST_SORT_VENTILATION_TODO=Begin met het sorteren van de pagina "Koppelingen uit te voeren" door de meest recente elementen
    +ACCOUNTING_LIST_SORT_VENTILATION_DONE=Begin met het sorteren van de pagina "Koppelen voltooid" door de meest recente elementen
     
    -ACCOUNTING_LENGTH_DESCRIPTION=Truncate product & services description in listings after x chars (Best = 50)
    -ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Truncate product & services account description form in listings after x chars (Best = 50)
    +ACCOUNTING_LENGTH_DESCRIPTION=Afkorting van product- en servicebeschrijving in lijsten na x aantal tekens (Best = 50)
    +ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Afkorting van omschrijving product- en services-rekeningen, afbreken in vermeldingen na x tekens (Beste = 50)
     ACCOUNTING_LENGTH_GACCOUNT=Lengte grootboekrekeningnummer (indien lengte op 6 is gezet, zal rekeningnummer 706 op het scherm worden weergegeven als 706000)
    -ACCOUNTING_LENGTH_AACCOUNT=Length of the third party accounting accounts (If you set value to 6 here, the account '401' will appear like '401000' on screen)
    +ACCOUNTING_LENGTH_AACCOUNT=Lengte van de grootboekrekeningen van derden (als u hier waarde 6 instelt, verschijnt rekening '401' op het scherm als '401000')
     ACCOUNTING_MANAGE_ZERO=Sta toe om het aantal nullen aan het einde van een account te beheren. Dit is nodig in sommige landen (zoals Zwitserland). Bij optie uit (standaard), kunt u de volgende 2 parameters instellen om te vragen of de applicatie virtuele nul toevoegt.
     BANK_DISABLE_DIRECT_INPUT=Rechtstreeks boeken van transactie in bankboek uitzetten
    -ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Enable draft export on journal
    +ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Schakel concept export van het journaal in
     
     ACCOUNTING_SELL_JOURNAL=Verkoopboek
     ACCOUNTING_PURCHASE_JOURNAL=Inkoopboek
     ACCOUNTING_MISCELLANEOUS_JOURNAL=Miscellaneous journal
     ACCOUNTING_EXPENSEREPORT_JOURNAL=Expense report journal
     ACCOUNTING_SOCIAL_JOURNAL=Social journal
    -ACCOUNTING_HAS_NEW_JOURNAL=Has new Journal
    +ACCOUNTING_HAS_NEW_JOURNAL=Nieuw Has Journaal
     
     ACCOUNTING_ACCOUNT_TRANSFER_CASH=Grootboekrekening kruisposten
     ACCOUNTING_ACCOUNT_SUSPENSE=Grootboekrekening kruisposten (dagboeken)
    @@ -154,14 +158,15 @@ Doctype=Type of document
     Docdate=Date
     Docref=Reference
     LabelAccount=Label account
    -LabelOperation=Label operation
    +LabelOperation=Werking label
     Sens=Sens
    +LetteringCode=Belettering code
     Codejournal=Journaal
     NumPiece=Boekingstuk
     TransactionNumShort=Transactienummer
     AccountingCategory=Gepersonaliseerde groepen
     GroupByAccountAccounting=Groeperen per grootboekrekening
    -AccountingAccountGroupsDesc=You can define here some groups of accounting account. They will be used for personalized accounting reports.
    +AccountingAccountGroupsDesc=Hier kunt u enkele grootboekrekening-groepen definiëren. Deze worden gebruikt voor gepersonaliseerde boekhoudrapporten.
     ByAccounts=Op grootboekrekening
     ByPredefinedAccountGroups=Op voorgedefinieerde groepen
     ByPersonalizedAccountGroups=Op gepersonaliseerde groepen
    @@ -170,12 +175,12 @@ NotMatch=Niet ingesteld
     DeleteMvt=Verwijder boekingsregels
     DelYear=Te verwijderen jaar
     DelJournal=Te verwijderen journaal
    -ConfirmDeleteMvt=This will delete all lines of the Ledger for year and/or from a specific journal. At least one criteria is required.
    +ConfirmDeleteMvt=Hiermee worden alle regels van het grootboek voor het jaar en / of uit een specifiek journaal verwijderd. Er is minimaal één criterium vereist.
     ConfirmDeleteMvtPartial=Dit zal de boeking verwijderen uit de boekhouding (tevens ook alle regels die met deze boeking verbonden zijn)
     FinanceJournal=Finance journal
     ExpenseReportsJournal=Overzicht resultaatrekening
     DescFinanceJournal=Finance journal including all the types of payments by bank account
    -DescJournalOnlyBindedVisible=This is a view of record that are bound to an accounting account and can be recorded into the Ledger.
    +DescJournalOnlyBindedVisible=Dit is een recordweergave die is gekoppeld aan een grootboekrekening en die kan worden vastgelegd in het grootboek.
     VATAccountNotDefined=BTW rekeningen niet gedefinieerd
     ThirdpartyAccountNotDefined=Grootboekrekening van relatie niet gedefinieerd
     ProductAccountNotDefined=Grootboekrekening producten niet gedefinieerd
    @@ -189,38 +194,39 @@ ListeMvts=Omzet
     ErrorDebitCredit=Debet en Credit mogen niet gelijktijdig worden opgegeven.
     AddCompteFromBK=Grootboekrekeningen aan groep toevoegen
     ReportThirdParty=Relatie grootboeknummers
    -DescThirdPartyReport=Consult here the list of the third party customers and vendors and their accounting accounts
    +DescThirdPartyReport=Raadpleeg hier de lijst met externe klanten en leveranciers en hun financiële administratie
     ListAccounts=List of the accounting accounts
     UnknownAccountForThirdparty=Onbekende relatie grootboekrekening. Gebruikt wordt %s
     UnknownAccountForThirdpartyBlocking=Blokkeringsfout. Onbekende relatierekening. 
    -UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Unknown third party account and waiting account not defined. Blocking error
    -PaymentsNotLinkedToProduct=Payment not linked to any product / service
    +UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Onbekend grootboekrekening van relatie en tussenrekening niet gedefinieerd. Blokkeringsfout
    +PaymentsNotLinkedToProduct=Betaling niet gekoppeld aan een product / dienst
     
     Pcgtype=Rekening hoofdgroep
     Pcgsubtype=Rekening subgroep
    -PcgtypeDesc=Group and subgroup of account are used as predefined 'filter' and 'grouping' criterias for some accounting reports. For example, 'INCOME' or 'EXPENSE' are used as groups for accounting accounts of products to build the expense/income report.
    +PcgtypeDesc=Groep en subgroep van accounts worden gebruikt als vooraf gedefinieerde criteria voor 'filter' en 'groepering' voor sommige boekhoudrapporten. 'INCOME' of 'EXPENSE' worden bijvoorbeeld gebruikt als groepen voor accountingrekeningen van producten om het declaratie- / inkomstenrapport samen te stellen.
     
     TotalVente=Total turnover before tax
     TotalMarge=Total sales margin
     
    -DescVentilCustomer=Consult here the list of customer invoice lines bound (or not) to a product accounting account
    -DescVentilMore=In most cases, if you use predefined products or services and you set the account number on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button <strong>"%s"</strong>. If account was not set on product/service cards or if you still has some lines not bound to any account, you will have to make a manual binding from the menu "<strong>%s</strong>".
    -DescVentilDoneCustomer=Consult here the list of the lines of invoices customers and their product accounting account
    +DescVentilCustomer=Raadpleeg hier de lijst met klant factuurregels die (al dan niet) zijn gekoppeld aan een grootboekrekening vaneen product
    +DescVentilMore=In de meeste gevallen, als u vooraf gedefinieerde producten of diensten gebruikt en u het rekeningnummer instelt op de product- / servicekaart, kan de toepassing alle koppelingen tussen uw factuurregels en de boekhoudrekening van uw rekeningschema maken, met één druk op de knop <strong>"%s"</strong>. Als er geen rekenig is ingesteld op de product- / servicekaarten of als u nog enkele regels hebt die niet aan een rekening zijn gekoppeld, moet u een handmatige koppeling maken via het menu "<strong>%s</strong>".
    +DescVentilDoneCustomer=Bekijk hier de lijst met factuurregels en hun grootboekrekening
     DescVentilTodoCustomer=Koppel factuurregels welke nog niet verbonden zijn met een product grootboekrekening
    -ChangeAccount=Change the product/service accounting account for selected lines with the following accounting account:
    +ChangeAccount=Wijzig de product/dienst grootboekrekening voor geselecteerde regels met de volgende grootboekrekening:
     Vide=-
    -DescVentilSupplier=Consult here the list of vendor invoice lines bound or not yet bound to a product accounting account
    -DescVentilDoneSupplier=Consult here the list of the lines of invoices vendors and their accounting account
    +DescVentilSupplier=Raadpleeg hier de lijst met leveranciersfactuurregels die al dan niet gebonden zijn aan een productaccount
    +DescVentilDoneSupplier=Raadpleeg hier de lijst met de regels met leveranciers van facturen en hun grootboekrekening
     DescVentilTodoExpenseReport=Koppel kosten-boekregels aan grootboekrekeningen welke nog niet zijn vastgelegd
     DescVentilExpenseReport=Hier kunt u de lijst raadplegen van kostenregels om te koppelen aan een grootboekrekening (of niet).
    -DescVentilExpenseReportMore=Als er bij de instellingen bij de kostenposten een grootboekrekening is toegekend, zal het programma deze met een enkele muisklik <strong>"%s"</strong> kunnen koppelen. Als dit niet is gebeurt en u moet regels koppelen, dan zal dit handmatig moeten gebeuren via menu "<strong>%s</strong>".
    +DescVentilExpenseReportMore=Als u een account instelt op het type onkostendeclaratieregels, kan de toepassing alle bindingen maken tussen uw declaratieregels en de boekhoudrekening van uw rekeningschema, met één klik met de knop <strong> "%s" </ strong>. Als het account niet is ingesteld op het tarievenwoordenboek of als u nog steeds regels hebt die niet aan een account zijn gekoppeld, moet u een manuele binding maken via het menu "<strong> %s </ strong>".
     DescVentilDoneExpenseReport=Hier kunt u de lijst raadplegen van kostenregels met hun tegenrekening
     
     ValidateHistory=Automatisch boeken
     AutomaticBindingDone=Automatisch koppelen voltooid
     
     ErrorAccountancyCodeIsAlreadyUse=Error, you cannot delete this accounting account because it is used
    -MvtNotCorrectlyBalanced=Movement not correctly balanced. Debit = %s | Credit = %s
    +MvtNotCorrectlyBalanced=Boeking is niet in balans. Debet = %s | Credit = %s
    +Balancing=Balancen
     FicheVentilation=Koppelen card
     GeneralLedgerIsWritten=Grootboek transacties
     GeneralLedgerSomeRecordWasNotRecorded=Sommige transacties konden niet worden doorgeboekt. Als er geen andere foutmelding is, komt dit waarschijnlijk omdat ze reeds zijn doorgeboekt.
    @@ -231,9 +237,9 @@ Accounted=Geboekt in grootboek
     NotYetAccounted=Nog niet doorgeboekt in boekhouding
     
     ## Admin
    -ApplyMassCategories=Apply mass categories
    -AddAccountFromBookKeepingWithNoCategories=Available acccount not yet in a personalized group
    -CategoryDeleted=Category for the accounting account has been removed
    +ApplyMassCategories=Categorieën  a-mass toepassen
    +AddAccountFromBookKeepingWithNoCategories=Beschikbaar account nog niet in een gepersonaliseerde groep
    +CategoryDeleted=Categorie van deze grootboekrekening is verwijderd
     AccountingJournals=Dagboeken
     AccountingJournal=Dagboek
     NewAccountingJournal=Nieuw dagboek
    @@ -259,15 +265,16 @@ Modelcsv_COALA=Exporteren naar Sage Coala
     Modelcsv_bob50=Exporteren naar Sage BOB 50
     Modelcsv_ciel=Exporteren naar Sage Ciel Compta of Compta Evolution
     Modelcsv_quadratus=Exporteren naar Quadratus QuadraCompta
    -Modelcsv_ebp=Export towards EBP
    -Modelcsv_cogilog=Export towards Cogilog
    +Modelcsv_ebp=Exporteer naar EBP
    +Modelcsv_cogilog=Exporteer naar Cogilog
     Modelcsv_agiris=Exporteren naar Agiris
    -Modelcsv_configurable=Export Configurable
    +Modelcsv_configurable=Configureerbare CSV export
    +Modelcsv_FEC=FEC exporteren (artikel L47 A) (test)
     ChartofaccountsId=Rekeningschema Id
     
     ## Tools - Init accounting account on product / service
     InitAccountancy=Instellen boekhouding
    -InitAccountancyDesc=This page can be used to initialize an accounting account on products and services that does not have accounting account defined for sales and purchases.
    +InitAccountancyDesc=Deze pagina kan worden gebruikt om een ​​grootboekrekening toe te wijzen aan producten en services waarvoor geen grootboekrekening is gedefinieerd voor verkopen en aankopen.
     DefaultBindingDesc=Hier kunt u een standaard grootboekrekening koppelen aan salaris betalingen, donaties, belastingen en BTW, wanneer deze nog niet apart zijn ingesteld.
     Options=Opties
     OptionModeProductSell=Instellingen verkopen
    @@ -279,7 +286,7 @@ CleanHistory=Verwijder alle koppelingen van gekozen boekjaar,
     PredefinedGroups=Voorgedefinieerde groepen
     WithoutValidAccount=Zonder geldig toegewezen grootboekrekening
     WithValidAccount=Met geldig toegewezen grootboekrekening
    -ValueNotIntoChartOfAccount=This value of accounting account does not exist into chart of account
    +ValueNotIntoChartOfAccount=Deze grootboekrekening is niet aanwezig in het rekeningschema
     
     ## Dictionary
     Range=Grootboeknummer van/tot
    @@ -288,19 +295,19 @@ Formula=Formule
     
     ## Error
     SomeMandatoryStepsOfSetupWereNotDone=Sommige verplichte stappen zijn nog niet volledig uitgevoerd. Maak deze alsnog.
    -ErrorNoAccountingCategoryForThisCountry=No accounting account group available for country %s (See Home - Setup - Dictionaries)
    +ErrorNoAccountingCategoryForThisCountry=Geen rekeningschema beschikbaar voor land %s (zie Home - Setup - Woordenboeken)
     ErrorInvoiceContainsLinesNotYetBounded=U probeert regels van factuur <strong>%s</strong> door te boeken, maar er zijn regels die nog niet verbonden zijn aan een grootboekrekening. Het doorboeken is daarom geannuleerd.
    -ErrorInvoiceContainsLinesNotYetBoundedShort=Some lines on invoice are not bound to accounting account.
    -ExportNotSupported=The export format setuped is not supported into this page
    -BookeppingLineAlreayExists=Regels al aanwezig in de boekhouding
    +ErrorInvoiceContainsLinesNotYetBoundedShort=Sommige regels op de factuur zijn niet gekoppeld aan een grootboekrekening.
    +ExportNotSupported=Het ingestelde exportformaat wordt niet ondersteund op deze pagina
    +BookeppingLineAlreayExists=Reeds doorgeboekte regels
     NoJournalDefined=Geen dagboek ingesteld
     Binded=Geboekte regels
     ToBind=Te boeken regels
    -UseMenuToSetBindindManualy=Autodetectie niet mogelijk., gebruik menukeuze <a href="%s">%s</a> om koppeling handmatig te maken.
    +UseMenuToSetBindindManualy=Regels die nog niet zijn gebonden, gebruik het menu <a href="%s"> %s </a> om de binding handmatig te maken
     
     ## Import
    -ImportAccountingEntries=Accounting entries
    +ImportAccountingEntries=Boekingen
     
    -WarningReportNotReliable=Pas op. Dit overzicht is niet afkomstig vanuit de boekhouding. Hierdoor bevat deze geen modificaties verricht in de boekhouding. Als het doorboeken up-to-date is, geeft de boekhouding een beter overzicht.
    -ExpenseReportJournal=Expense Report Journal
    -InventoryJournal=Inventory Journal
    +WarningReportNotReliable=Waarschuwing, dit rapport is niet gebaseerd op het grootboek, dus bevat het niet de transactie die handmatig in het grootboek is gewijzigd. Als uw journalisatie up-to-date is, is de weergave van de boekhouding nauwkeuriger.
    +ExpenseReportJournal=Kostenoverzicht
    +InventoryJournal=Inventarisatie
    diff --git a/htdocs/langs/nl_NL/admin.lang b/htdocs/langs/nl_NL/admin.lang
    index bbc98d46a1b..15e3b0e97e2 100644
    --- a/htdocs/langs/nl_NL/admin.lang
    +++ b/htdocs/langs/nl_NL/admin.lang
    @@ -9,35 +9,35 @@ VersionExperimental=Experimenteel
     VersionDevelopment=Ontwikkeling
     VersionUnknown=Onbekend
     VersionRecommanded=Aanbevolen
    -FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    -FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    -FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
    -GlobalChecksum=Global checksum
    +FileCheck=Bestanden integriteits controle
    +FileCheckDesc=Met deze tool kunt u de integriteit van bestanden en instellingen van uw toepassing controleren, waarbij elk bestand wordt vergelijkt met de officiële bestanden. De waarde van sommige setup-constanten kan ook worden gecontroleerd. U kunt deze tool gebruiken om te detecteren of sommige bestanden zijn gewijzigd door bijvoorbeeld een hacker.
    +FileIntegrityIsStrictlyConformedWithReference=Bestandsintegriteit is strikt conform de referentie.
    +FileIntegrityIsOkButFilesWereAdded=Er heeft controle plaatsgevonden van de bestandsintegriteit, maar er zijn enkele nieuwe bestanden toegevoegd.
    +FileIntegritySomeFilesWereRemovedOrModified=Controle op integriteit van de bestanden is mislukt. Sommige bestanden zijn gewijzigd, verwijderd of toegevoegd.
    +GlobalChecksum=Globaal controlegetal
     MakeIntegrityAnalysisFrom=Maak integriteitsanalyse van toepassingsbestanden van
    -LocalSignature=Embedded local signature (less reliable)
    -RemoteSignature=Remote distant signature (more reliable)
    +LocalSignature=Ingebedde lokale handtekening (minder betrouwbaar)
    +RemoteSignature=Remote handtekening (betrouwbaarder)
     FilesMissing=Ontbrekende bestanden
     FilesUpdated=Bijgewerkte bestanden
    -FilesModified=Modified Files
    +FilesModified=Bijgewerkte bestanden
     FilesAdded=Toegevoegde bestanden
    -FileCheckDolibarr=Check integrity of application files
    -AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when application is installed from an official package
    -XmlNotFound=Xml Integrity File of application not found
    +FileCheckDolibarr=Controleer de integriteit van applicatiebestanden
    +AvailableOnlyOnPackagedVersions=Het lokale bestand voor integriteitscontrole is alleen beschikbaar als de toepassing is geïnstalleerd vanuit een officieel pakket
    +XmlNotFound=Xml-integriteitsbestand van de toepassing is niet gevonden
     SessionId=Sessie-ID
     SessionSaveHandler=Wijze van sessieopslag
     SessionSavePath=Sessie opslaglocatie
     PurgeSessions=Verwijderen van sessies
     ConfirmPurgeSessions=Wilt u werkelijk alle sessies sluiten? Dit zal elke gebruikerssessie afbreken (behalve die van uzelf).
    -NoSessionListWithThisHandler=De waarde van 'save session handler' ingesteld in uw PHP instellingen staat het niet toe een lijst van alle lopende sessies weer te geven.
    +NoSessionListWithThisHandler=Save session handler geconfigureerd in uw PHP staat niet toe dat alle lopende sessies worden vermeld.
     LockNewSessions=Blokkeer nieuwe sessies
    -ConfirmLockNewSessions=Weet u zeker dat u alle sessies wilt beperken tot uzelf? Alleen de gebruiker <b>%s</b> kan dan nog met Dolibarr verbinden.
    +ConfirmLockNewSessions=Weet je zeker dat je elke nieuwe Dolibarr-verbinding wilt beperken tot jezelf? Alleen gebruiker <b>%s</b> kan daarna verbinding maken.
     UnlockNewSessions=Verwijder sessieblokkering
     YourSession=Uw sessie
    -Sessions=Gebruikers-sessies
    +Sessions=Gebruikerssessies
     WebUserGroup=Webserver gebruiker / groep
    -NoSessionFound=Uw PHP installatie lijkt het niet toe te staan een lijst van actieve sessies weer te geven. De map waarin sessies worden opgeslagen (<b>%s</b>) zou afgeschermd kunnen zijn (bijvoorbeeld, door OS rechten of via de PHP instelling open_basedir).
    +NoSessionFound=Je PHP lijkt geen lijst met actieve sessies toe te staan. De map die wordt gebruikt om sessies op te slaan (<b>%s</b>) kan mogelijk worden beveiligd (bijvoorbeeld door OS-machtigingen of door PHP-instructie open_basedir).
     DBStoringCharset=Database karakterset voor het opslaan van gegevens
     DBSortingCharset=Database karakterset voor het sorteren van gegevens
     ClientCharset=Cliënt tekenset
    @@ -50,14 +50,14 @@ ExternalUser=Externe gebruiker
     InternalUsers=Interne gebruikers
     ExternalUsers=Externe gebruikers
     GUISetup=Scherm
    -SetupArea=Instellingenoverzicht
    +SetupArea=Instellingen
     UploadNewTemplate=Nieuwe template(s) uploaden
     FormToTestFileUploadForm=Formulier waarmee bestandsupload kan worden getest (afhankelijk van de gekozen opties)
     IfModuleEnabled=Opmerking: Ja, is alleen effectief als module <b>%s</b> is geactiveerd
     RemoveLock=Verwijder, als het bestaat, het bestand <b>%s</b> om gebruik te kunnen maken van de updatetool.
     RestoreLock=Voorzie het bestand <b>%s</b> van 'alleen-bekijken' rechten om updaten te voorkomen.
     SecuritySetup=Beveiligingsinstellingen
    -SecurityFilesDesc=Define here options related to security about uploading files.
    +SecurityFilesDesc=Definieer hier de opties met betrekking tot beveiliging bij het uploaden van bestanden.
     ErrorModuleRequirePHPVersion=Fout, deze module vereist PHP versie %s of hoger.
     ErrorModuleRequireDolibarrVersion=Fout, deze module vereist Dolibarr versie %s of hoger.
     ErrorDecimalLargerThanAreForbidden=Fout, een nauwkeurigheid van meer dan <b>%s</b> wordt niet ondersteund.
    @@ -66,21 +66,21 @@ Dictionary=Woordenboeken
     ErrorReservedTypeSystemSystemAuto=De waarde 'system' en 'systemauto' als type zijn voorbehouden voor het systeem.  Je kan 'user' als waarde gebruiken om je eigen gegevens-record toe te voegen.
     ErrorCodeCantContainZero=Code mag geen 0 bevatten
     DisableJavascript=JavaScript en Ajax functies uitzetten (Aanbevolen voor blinden of tekst browsers)
    -UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +UseSearchToSelectCompanyTooltip=Ook als u een groot aantal relaties (> 100 000) heeft, kunt u de snelheid verhogen door in de Setup-> Overig constant COMPANY_DONOTSEARCH_ANYWHERE op 1 te zetten. Zoeken wordt dan beperkt tot het begin van de reeks.
    +UseSearchToSelectContactTooltip=Ook als u een groot aantal relaties (> 100 000) heeft, kunt u de snelheid verhogen door constante CONTACT_DONOTSEARCH_ANYWHERE in Setup -> Overig op 1 te zetten. Zoeken wordt dan beperkt tot het begin van de reeks.
    +DelaiedFullListToSelectCompany=Wacht tot een toets wordt ingedrukt voordat inhoud van de keuzelijst met relaties wordt geladen.<br>Dit kan de prestaties verbeteren als u een groot aantal relaties hebt, maar dit is minder handig.
    +DelaiedFullListToSelectContact=Wacht tot een toets wordt ingedrukt voordat inhoud van Contact combo-lijst wordt geladen. <br> Dit kan de prestaties verbeteren als je een groot aantal contacten hebt, maar het is minder handig)
     NumberOfKeyToSearch=Aantal karakters om een zoekopdracht te initiëren: %s
     NotAvailableWhenAjaxDisabled=Niet beschikbaar wanneer AJAX functionaliteit uitgeschakeld is
    -AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    +AllowToSelectProjectFromOtherCompany=Bij een document van een relatiej, kan een project worden gekozen dat is gekoppeld aan een relatie
     JavascriptDisabled=JavaScript uitgeschakeld
     UsePreviewTabs=Gebruik voorbeelweergavetabbladen
     ShowPreview=Toon voorbeelweergave
     PreviewNotAvailable=Voorbeeldweergave niet beschikbaar
     ThemeCurrentlyActive=Huidige thema
     CurrentTimeZone=Huidige Tijdszone
    -MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +MySQLTimeZone=Tijdzone(database)
    +TZHasNoEffect=Datums worden opgeslagen en geretourneerd door de databaseserver alsof ze werden bewaard als ingeleverde reeks. De tijdzone heeft alleen effect wanneer de UNIX_TIMESTAMP-functie wordt gebruikt (die niet door Dolibarr zou moeten worden gebruikt, dus database-TZ zou geen effect moeten hebben, zelfs als deze werd gewijzigd nadat gegevens waren ingevoerd).
     Space=Ruimte
     Table=Tabel
     Fields=Velden
    @@ -111,7 +111,7 @@ NotConfigured=Module/applicatie niet geconfigureerd
     Active=Actief
     SetupShort=Instellingen
     OtherOptions=Overige opties
    -OtherSetup=Overige instellingen
    +OtherSetup=Andere instellingen
     CurrentValueSeparatorDecimal=Decimaal scheidingsteken
     CurrentValueSeparatorThousand=Duizend scheidingsteken
     Destination=Bestemming
    @@ -126,8 +126,8 @@ PHPTZ=Tijdzone binnen de PHP server
     DaylingSavingTime=Zomertijd (gebruiker)
     CurrentHour=Huidige tijd op server
     CurrentSessionTimeOut=Huidige sessie timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=Om een ​​andere PHP-tijdzone in te stellen (niet verplicht), kunt u proberen een .htaccess-bestand toe te voegen met de volgende regel: "SetEnv TZ Europe / Paris"
    +HoursOnThisPageAreOnServerTZ=Waarschuwing, in tegenstelling tot andere schermen, bevinden de uren op deze pagina zich niet in uw lokale tijdzone, maar in de tijdzone van de server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Maximaal aantal regels voor widgets
    @@ -135,7 +135,7 @@ AllWidgetsWereEnabled=Alle beschikbare widgets zijn geactiveerd
     PositionByDefault=Standaard volgorde
     Position=Positie
     MenusDesc=Menu-managers bepalen de inhoud van de twee menubalken in (horizontaal en verticaal).
    -MenusEditorDesc=Met behulp van de menu-editor kunt u gepersonaliseerde items in menu's instellen. Gebruik deze functionaliteit zorgvuldig om te vermijden dat Dolibarr instabiel wordt en menu-items permanent onbereikbaar worden.<br>Sommige modules voegen items toe in de menu's (in de meeste gevallen in het menu <b>Alle</b>). Als u sommige van deze items abusievelijk verwijderd, dan kunt u ze herstellen door de module eerst uit te schakelen en daarna opnieuw in te schakelen. 
    +MenusEditorDesc=Met behulp van de menu-editor kunt u gepersonaliseerde items in menu's instellen. Gebruik deze functionaliteit zorgvuldig om te vermijden dat Dolibarr instabiel wordt en menu-items permanent onbereikbaar worden.<br>Sommige modules voegen items toe in de menu's (in de meeste gevallen in het menu <b>Alle</b>). Als u sommige van deze items abusievelijk verwijderd, dan kunt u ze herstellen door de module eerst uit te schakelen en daarna opnieuw in te schakelen.
     MenuForUsers=Gebruikersmenu
     LangFile=.lang bestand
     System=Systeem
    @@ -151,7 +151,7 @@ PurgeDeleteAllFilesInDocumentsDir=Verwijder alle bestanden in de map <b>%s.</b>.
     PurgeRunNow=Nu opschonen
     PurgeNothingToDelete=Geen directory of bestanden om te verwijderen.
     PurgeNDirectoriesDeleted=<b>%s</b> bestanden of mappen verwijderd.
    -PurgeNDirectoriesFailed=Failed to delete <b>%s</b> files or directories.
    +PurgeNDirectoriesFailed=Kan <b>%s</b>bestanden of mappen niet verwijderen.
     PurgeAuditEvents=Verwijder alle beveiligingsgerelateerde gebeurtenissen
     ConfirmPurgeAuditEvents=Weet u zeker dat u alle beveiligingsgerelateerde gebeurtenissen wilt verwijderen? Alle beveiligingsgerelateerde logbestanden zullen worden verwijderd. Er zullen geen andere gegevens worden verwijderd.
     GenerateBackup=Genereer backup
    @@ -190,29 +190,29 @@ EncodeBinariesInHexa=Codeer binaire data in hexadecimalen
     IgnoreDuplicateRecords=Negeer fouten van dubbele tabelregels (INSERT negeren)
     AutoDetectLang=Automatisch detecteren (taal van de browser)
     FeatureDisabledInDemo=Functionaliteit uitgeschakeld in de demonstratie
    -FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Vakken zijn delen op het scherm die bepaalde informatie tonen op geselecteerde pagina's. U kunt een vak in- of uitschakelen door de doelpagina te selecteren en op "activeren" te klikken of door op de prullenbak te klikken om het vak uit te schakelen.
    +FeatureAvailableOnlyOnStable=Functie alleen beschikbaar bij officiële stabiele versies
    +BoxesDesc=Widgets zijn componenten die informatie tonen die u kunt toevoegen om sommige pagina's te personaliseren. U kunt kiezen of u de widget wilt weergeven of niet door de doelpagina te selecteren en op 'Activeren' te klikken of door op de prullenbak te klikken om deze uit te schakelen.
     OnlyActiveElementsAreShown=Alleen elementen van ingeschakelde <a href="%s">modules</a> worden getoond.
    -ModulesDesc=Dolibarr modules bepalen welke functionaliteit is ingeschakeld in de software. Voor enkele applicatiemodules is het noodzakelijk, zodra de module is ingeschakeld, rechten te verlenen aan de gebruikers. Klik op de knop uit / aan in de kolom "Status" om een module / functionaliteit in of uit te schakelen.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=U kunt meer modules downloaden van externe websites op het internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Vind externe apps of modules
     ModulesDevelopYourModule=Ontwikkel uw eigen app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Nieuw
     FreeModule=Gratis
     CompatibleUpTo=Compatibel met versie %s
    -NotCompatible=This module does not seem compatible with your Dolibarr %s (Min %s - Max %s).
    -CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s).
    -SeeInMarkerPlace=See in Market place
    +NotCompatible=Deze module lijkt niet compatibel met uw Dolibarr %s (Min %s - Max %s).
    +CompatibleAfterUpdate=Deze module vereist een update van uw Dolibarr %s (Min %s - Max %s).
    +SeeInMarkerPlace=Zie op de Marktplaats
     Updated=Bijgewerkt
    -Nouveauté=Novelty
    +Nouveauté=Nieuwigheid
     AchatTelechargement=Kopen/Downloaden
    -GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
    +GoModuleSetupArea=Om een nieuwe module te activeren of te installeren, ga naar module setup <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, de officiële markt voor externe Dolibarr ERP / CRM modules.
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Websiteaanbieders waarop u naar meer modules kunt zoeken
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=Externe websites voor meer add-on (niet-core) modules ...
     DevelopYourModuleDesc=Enkele oplossingen om uw eigen module te ontwikkelen ...
     URL=Link
     BoxesAvailable=Beschikbare widgets
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Geen onversleutelde wachtwoorden opslaan in de database,
     MainDbPasswordFileConfEncrypted=Databasewachtwoord versleuteld opslaan in conf.php (Activering aanbevolen)
     InstrucToEncodePass=Om je paswoord versleuteld (gecodeerd) te krijgen in dit bestand <b>conf.php</b> , vervang de regel <br><b>$dolibarr_main_db_pass="...";</b><br>door<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Om je paswoord gedecodeerd te verkrijgen in dit bestand <b>conf.php</b>,  vervang de regel <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>door<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Bescherming van gecreëerde PDF files. (Activering NIET aanbevolen, omdat dit de aanmaak van meerdere bestanden onmogelijk maakt)
    +ProtectAndEncryptPdfFiles=Bescherming van gegenereerde PDF-bestanden NIET aanbevolen (breekt massale PDF-generatie)
     ProtectAndEncryptPdfFilesDesc=Bescherming van PDF files, deze kunnen nog gelezen en afgedrukt worden met behulp van een PDF-lezer. Echter, het bewerken en kopiëren is niet meer mogelijk. Let op dat door het gebruik van deze functionaliteit, de bouw van een globale samengevoegde PDF niet werkt zoals bij onbetaalde facturen.
     Feature=Functionaliteit
     DolibarrLicense=Licentie
    @@ -246,8 +246,8 @@ ExternalResources=Externe bronnen
     SocialNetworks=Sociale netwerken
     ForDocumentationSeeWiki=Documentatie voor gebruikers of ontwikkelaars kunt u inzien door <br>te kijken op de Dolibarr Wiki-pagina's:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Voor alle andere vragen / hulp, kunt u gebruik maken van het Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Dit scherm kan u helpen om ondersteuning voor Dolibarr te krijgen.
    -HelpCenterDesc2=Kies de ondersteuning die overeenkomt met uw behoeften door te klikken op de betreffende link (Sommige van deze diensten zijn alleen beschikbaar in het <b>Engels</b>).
    +HelpCenterDesc1=Hier enkele bronnen voor hulp en ondersteuning met Dolibarr.
    +HelpCenterDesc2=Enkele bronnen zijn alleen beschikbaar in het <b>Engels</b>.
     CurrentMenuHandler=Huidige menuverwerker
     MeasuringUnit=Meeteenheid
     LeftMargin=Linker marge
    @@ -258,36 +258,40 @@ SpaceX=Ruimte X
     SpaceY=Ruimte Y
     FontSize=Formaat lettertype
     Content=Inhoud
    -NoticePeriod=Notice period
    +NoticePeriod=Opzegtermijn
     NewByMonth=Nieuw per maand
     Emails=E-mails
     EMailsSetup=E-mail instellingen
    -EMailsDesc=Met behulp van deze pagina kunt u PHP instellingen om e-mails te verzenden overschrijven. Op Unix / Linux besturingssystemen zijn deze in de meeste gevallen goed ingesteld en zijn deze instellingen nutteloos.
    +EMailsDesc=Op deze pagina kunt u uw standaard PHP-parameters voor e-mailverzending negeren. In de meeste gevallen op Unix / Linux OS is de PHP-instelling correct en zijn deze parameters niet nodig.
     EmailSenderProfiles=Verzender e-mails profielen
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS-poort (standaard in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS Host (standaard in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS-poort (niet gedefinieerd in PHP op Unix-achtige systemen)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS-host (Niet gedefinieerd in PHP op Unix-achtige systemen)
    -MAIN_MAIL_EMAIL_FROM=E-mail afzender voor automatische e-mails (Standaard in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Stuur systematisch een verborgen zogenoemde 'Carbon-Copy' van alle verzonden e-mails naar
    -MAIN_DISABLE_ALL_MAILS=Schakel het versturen van alle e-mails uit (voor testdoeleinden of demonstraties)
    -MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Te gebruiken methode om e-mails te verzenden
    -MAIN_MAIL_SMTPS_ID=SMTP-gebruikersnaam indien verificatie vereist
    -MAIN_MAIL_SMTPS_PW=SMTP-wachtwoord indien verificatie vereist
    -MAIN_MAIL_EMAIL_TLS= Gebruik TLS (SSL) encryptie
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Schakel alle SMS verzendingen (voor test doeleinden of demo)
    +MAIN_MAIL_SMTP_PORT=SMTP / SMTPS-poort (standaardwaarde in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS-host (standaardwaarde in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS-poort (niet gedefinieerd in PHP op Unix-achtige systemen)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (niet gedefinieerd in PHP op Unix-achtige systemen)
    +MAIN_MAIL_EMAIL_FROM=E-mail afzender voor automatische e-mails (standaardwaarde in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=E-mailadres voor gebruikt foute e-mails (velden 'Fout-Aan' in verzonden e-mails)
    +MAIN_MAIL_AUTOCOPY_TO= Kopieer (Bcc) alle verzonden e-mails naar
    +MAIN_DISABLE_ALL_MAILS=Schakel alle e-mailverzending uit (voor testdoeleinden of demo's)
    +MAIN_MAIL_FORCE_SENDTO=Stuur alle e-mails naar (in plaats van echte ontvangers, voor testdoeleinden)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=E-mail verzendmethode
    +MAIN_MAIL_SMTPS_ID=SMTP ID (als het verzenden vanaf de server authenticatie vereist)
    +MAIN_MAIL_SMTPS_PW=SMTP-wachtwoord (als het verzenden vanaf de server authenticatie vereist)
    +MAIN_MAIL_EMAIL_TLS=Gebruik TLS (SSL) encryptie
    +MAIN_MAIL_EMAIL_STARTTLS=Gebruik TLS (STARTTLS) -codering
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Schakel alle sms-verzending uit (voor testdoeleinden of demo's)
     MAIN_SMS_SENDMODE=Methode te gebruiken om SMS te verzenden
    -MAIN_MAIL_SMS_FROM=Standaard afzender telefoonnummer voor Sms versturen
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Standaard afzender telefoonnummer voor SMS-verzending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Standaard afzender e-mail voor handmatig verzenden (e-mailadres gebruiker of bedrijfs e-mail)
     UserEmail=E-mailadres gebruiker
     CompanyEmail=E-mailadres bedrijf
     FeatureNotAvailableOnLinux=Functionaliteit niet beschikbaar op Unix-achtige systemen. Test uw lokale 'sendmail' programma.
    -SubmitTranslation=Indien de vertaling voor deze taal nog niet volledig is of je vindt fouten, dan kan je dit verbeteren door de bestanden te editeren in de volgende directory <b>langs/%s</b> en stuur uw wijzigingen door naar www.transifex.com/dolibarr-association/dolibarr/
    -SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslationENUS=Als vertaling voor deze taal niet compleet is of als u fouten aantreft, kunt u dit corrigeren door bestanden in map <b>langs / %s</b> te bewerken en gewijzigde bestanden in te dienen op dolibarr.org/forum of voor ontwikkelaars op github.com/Dolibarr/dolibarr.
     ModuleSetup=Module-instellingen
     ModulesSetup=Instellingen van modules & applicatie
     ModuleFamilyBase=Systeem
    @@ -307,17 +311,17 @@ MenuHandlers=Menuverwerkers
     MenuAdmin=Menu wijzigen
     DoNotUseInProduction=Niet in productie gebruiken
     ThisIsProcessToFollow=Dit zijn de stappen om te verwerken:
    -ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
    +ThisIsAlternativeProcessToFollow=Dit is een alternatieve setup om handmatig te verwerken:
     StepNb=Stap %s
    -FindPackageFromWebSite=Vind een pakket die u de functionaliteit geeft die u wilt (bijvoorbeeld op de officiële website van %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download het pakket (voorbeeld vanaf de officiële web site %s).
    -UnpackPackageInDolibarrRoot=Pak bestand uit op de Dolibarr server directory toegewezen aan de externe modules: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module geïnstalleerd. U moet deze nog wel activeren en instellen: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Pak de uitgepakte bestanden uit of pak deze uit in de servermap welke is toegewezen aan Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=De alternatieve hoofdmap is niet gedefinieerd in een bestaande map.<br>
     InfDirAlt=Vanaf versie 3 is het mogelijk om een alternatieve root directory te definiëren.  Dit stelt je in staat om op dezelfde plaats zowel plug-ins als eigen templates te bewaren. <br>Maak gewoon een directory op het niveau van de root van Dolibarr (bv met de naam: aanpassing).<br>
     InfDirExample=<br>Leg dit vast in het bestand <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>Als deze lijnen zijn inactief gemaakt met een "#" teken, verwijder dit teken dan om ze te activeren.
    -YouCanSubmitFile=Voor deze stap kunt u een .zip bestand of module pakket hier verzenden :
    +YouCanSubmitFile=Als alternatief kunt u de module als .zip-bestandspakket uploaden:
     CurrentVersion=Huidige versie van Dolibarr
     CallUpdatePage=Ga naar de pagina die de databasestructuur en gegevens bijwerkt: %s.
     LastStableVersion=Laatste stabiele versie
    @@ -325,7 +329,7 @@ LastActivationDate=Laatste activeringsdatum
     LastActivationAuthor=Laatste activeringsauteur
     LastActivationIP=Laatste activerings-IP
     UpdateServerOffline=Updateserver offline
    -WithCounter=Manage a counter
    +WithCounter=Beheer een teller
     GenericMaskCodes=U kunt elk gewenst maskernummer invoeren. In dit masker, kunnen de volgende tags worden gebruikt:<br><b>{000000}</b> correspondeert met een nummer welke vermeerderd zal worden op elke %s. Voer zoveel nullen in als de gewenste lengte van de teller. De teller wordt aangevuld met nullen vanaf links zodat er zoveel nullen zijn als in het masker.<br><b>{000000+000}</b> hetzelfde als voorgaand maar een offset corresponderend met het nummer aan de rechterkant van het + teken is toegevoegd startend op de eerste %s. <br><b>{000000@x}</b> hetzelfde als voorgaande maar de teller wordt gereset naar nul, wanneer maand x is bereikt (x tussen 1 en 12). Als deze optie is gebruikt en x is 2 of hoger, dan is de volgorde {yy}{mm} of {yyyy}{mm} ook vereist. <br><b>{dd}</b> dag (01 t/m 31).<br><b>{mm}</b> maand (01 t/m 12).<br><b>{yy}</b>, <b>{yyyy}</b> of <b>{y}</b> jaat over 2, 4 of 1 nummer(s). <br>
     GenericMaskCodes2=<b>{cccc}</b>de clientcode op n tekens<br> <b>{cccc000}</b> de cliëntcode op n tekens wordt gevolgd door een teller die is toegewezen aan de klant. Deze teller voor de klant wordt op hetzelfde moment gereset als de globale teller.<br><b> {tttt}</b> De code van het type van derden op n tekens (zie menu Home - Setup - Woordenboek - Soorten derden) . Als u deze label toevoegt, is de teller anders voor elk type derde partij.<br>
     GenericMaskCodes3=Alle andere karakters in het masker zullen intact blijven.<br>Spaties zijn niet toegestaan.<br>
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Ga naar de wiki-pagina voor een opsomming van alle acteurs en
     UseACacheDelay= Ingestelde vertraging voor de cacheexport in secondes (0 of leeg voor geen cache)
     DisableLinkToHelpCenter=Verberg de link "<b>ondersteuning of hulp nodig</b>" op de inlogpagina
     DisableLinkToHelp=Verberg de link naar online hulp "<b>%s</b>"
    -AddCRIfTooLong=Er zijn geen automatische regeleinden, dus als uw tekst in de documenten te lang is, moet u zelf regeleinden in de teksteditor invoeren.
    -ConfirmPurge=Weet u zeker dat u ALLES wilt verwijderen? <br> Dit zal alle bestanden definitief verwijderen zonder de mogelijkheid deze terug te halen (ECM bestanden, gekoppelde bestanden....).
    +AddCRIfTooLong=Er is geen automatische tekstterugloop, tekst die te lang is, wordt niet weergegeven in documenten. Voeg zo nodig carriage returns toe in het tekstgebied.
    +ConfirmPurge=Weet u zeker dat u deze zuivering wilt uitvoeren? <br> Hiermee worden al uw gegevensbestanden permanent verwijderd zonder dat ze worden teruggezet (ECM-bestanden, bijgevoegde bestanden ...).
     MinLength=Minimale lengte
     LanguageFilesCachedIntoShmopSharedMemory=Bestanden .lang in het gedeelde geheugen
     LanguageFile=Taalbestand
    -ExamplesWithCurrentSetup=Voorbeelden met de huidige actieve configuratie
    +ExamplesWithCurrentSetup=Voorbeelden met huidige configuratie
     ListOfDirectories=Lijst van OpenDocument sjablonenmappen
     ListOfDirectoriesForModelGenODT=Lijst van de directorie's die de templates bevatten in OpenDocument formaat.<br><br>Plaats hier het volledige pad van de directorie.<br>Voeg een nieuwe lijn tussen elke directorie.<br>Om een directorie van de GED module bij te voegen, voeg hier <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b> toe.<br><br>Bestanden in deze directorie's moeten eindigen op <b>.odt</b> of <b>.ods</b>.
    -NumberOfModelFilesFound=Aantal ODT/ODS templates gevonden in deze mappen
    +NumberOfModelFilesFound=Aantal  gevonden ODT/ODS-sjabloonbestanden
     ExampleOfDirectoriesForModelGen=Voorbeelden van de syntaxis: <br>c:\\mijndir<br>/home/mijndir<br>DOL_DATA_ROOT/ECM/ecmdir
     FollowingSubstitutionKeysCanBeUsed=Door het plaatsen van de volgende velden in het sjabloon krijgt u een vervanging met de aangepaste waarde bij het genereren van het document:
     FullListOnOnlineDocumentation=De complete lijst met beschikbare velden is te vinden in de gebruikersdocumentatie op de Wiki van Dolibar: http://wiki.dolibarr.org.
    @@ -365,36 +369,36 @@ KeyForWebServicesAccess=Sleutel om webdiensten te gebruiken (waarde "dolibarrkey
     TestSubmitForm=Invoer testformulier
     ThisForceAlsoTheme=Met behulp van dit menu manager zal ook gebruik maken van een eigen thema wat er keuze van de gebruiker. Ook dit menu manager gespecialiseerd smartphones niet werkt op alle smartphone. Gebruik een ander menu manager als u problemen ondervindt op het jouwe.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion time-out
    +ConnectionTimeout=Time-out  verbinding
     ResponseTimeout=Time-out antwoord
     SmsTestMessage=Testbericht van __PHONEFROM__ naar __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> moet eerst worden ingeschakeld als je deze functie wilt gebruiken.
     SecurityToken=Sleutel tot URL beveiligen
    -NoSmsEngine=Geen SMS afzender manager beschikbaar. SMS afzender manager zijn niet geïnstalleerd met de standaard distributie (omdat ze afhankelijk is van een externe leverancier), maar u kunt vinden op een aantal http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=U kunt elke globale opties met betrekking tot de PDF-generatie
    +PDFDesc=U kunt elke algemene optie met betrekking tot de PDF-generatie instellen
     PDFAddressForging=Regels aan te pakken dozen te smeden
    -HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
    -PDFRulesForSalesTax=Rules for Sales Tax / VAT
    -PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideAnyVATInformationOnPDF=Alle informatie met betrekking tot omzet-belasting / btw op gegenereerde PDF verbergen
    +PDFRulesForSalesTax=Regels voor omzet-belasting/btw
    +PDFLocaltax=Regels voor %s
    +HideLocalTaxOnPDF=Verberg %s-tarief in pdf-kolom BTW
     HideDescOnPDF=Verberg productbeschrijving op gemaakte PDF
     HideRefOnPDF=Verberg productreferentie op gemaakte PDF
     HideDetailsOnPDF=Laat productdetails niet zien in PDF
    -PlaceCustomerAddressToIsoLocation=Use french standard position (La Poste) for customer address position
    +PlaceCustomerAddressToIsoLocation=Gebruik de Franse standaardpositie (La Poste) als positie van het klant-adres
     Library=Bibliotheek
     UrlGenerationParameters=Parameters om URL beveiligen
     SecurityTokenIsUnique=Gebruik een unieke securekey parameter voor elke URL
     EnterRefToBuildUrl=Geef referentie voor object %s
     GetSecuredUrl=Get berekend URL
    -ButtonHideUnauthorized=Verberg knoppen i.p.v. ontoegankelijk maken voor niet beheerders.
    +ButtonHideUnauthorized=Verberg de knoppen voor niet-beheerders bij ongeoorloofde acties in plaats van grijs gekleurde, uitgeschakelde knoppen
     OldVATRates=Oud BTW tarief
     NewVATRates=Nieuw BTW tarief
     PriceBaseTypeToChange=Wijzig op prijzen waarop een base reference waarde gedefiniëerd is
     MassConvert=Start algemene omzetting
     String=String
     TextLong=Lange tekst
    -HtmlText=Html text
    +HtmlText=HTML-tekst
     Int=Integer
     Float=Float
     DateAndTime=Datum en uur
    @@ -408,19 +412,19 @@ ExtrafieldSelect = Keuze lijst
     ExtrafieldSelectList = Kies uit tabel
     ExtrafieldSeparator=Scheidingsteken (geen veld)
     ExtrafieldPassword=Wachtwoord
    -ExtrafieldRadio=Radio buttons (alleen keuze)
    +ExtrafieldRadio=Radio buttons (slechts één keuze)
     ExtrafieldCheckBox=Checkboxen
     ExtrafieldCheckBoxFromList=Checkboxen uit tabel
     ExtrafieldLink=Link naar een object
     ComputedFormula=Berekend veld
    -ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ComputedFormulaDesc=U kunt hier een formule invoeren met andere eigenschappen van het object of een willekeurige PHP-codering om een ​​dynamische berekende waarde te krijgen. U kunt alle PHP-compatibele formules gebruiken, inclusief de "?" voorwaardeoperator en volgend globaal object: <strong>$ db, $ conf, $ langs, $ mysoc, $ user, $ object</strong>. <br> <strong> WAARSCHUWING </strong>: slechts enkele eigenschappen van $ object mogelijk beschikbaar. Als u eigenschappen nodig hebt die niet zijn geladen, haalt u het object eenvoudig in uw formule op, zoals in het tweede voorbeeld. <br> Het gebruik van een berekend veld betekent dat u geen waarde uit de interface kunt invoeren. Ook als er een syntaxisfout is, kan de formule niets retourneren. <br><br> Voorbeeld van formule:<br>$ object-> id <10? round ($ object-> id / 2, 2): ($ object-> id + 2 * $ user-> id) * (int) substr ($ mysoc-> zip, 1, 2) <br><br> Voorbeeld om object opnieuw te laden <br> (($ reloadedobj = nieuwe Societe ($ db)) && ($ reloadedobj-> fetch ($ obj-> id? $ Obj-> id: ($ obj-> rowid? $ Obj-> rowid: $ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5: '-1' <br> <br> Ander voorbeeld van formule om load van object en zijn bovenliggende object te forceren: <br> (($ reloadedobj = nieuwe taak ($ ​​db)) && ($ reloadedobj-> fetch ($ object-> id)> 0) && ($ secondloadedobj = nieuw project ($ db)) && ($ secondloadedobj-> fetch ($ reloadedobj-> fk_project )> 0))? $ secondloadedobj-> ref: 'Ouderproject niet gevonden'
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=Lijst met waarden moet regels zijn met een indelingssleutel, waarde (waarbij de sleutel niet '0' kan zijn) <br> <br> bijvoorbeeld: <br> 1, waarde1 <br>2, waarde2 <br>code3, waarde3 <br> ...  <br> <br>Om de lijst te laten afhangen van een andere aanvullende attributenlijst:  <br>1, value1 | options_ <i> parent_list_code</i>: parent_key  <br>2, value2 | options_ <i> parent_list_code </i>: parent_key  <br> <br>Om de lijst afhankelijk te maken van een andere lijst: <br> 1, value1 |<i> parent_list_code </i>: parent_key <br> 2, value2 | <i> parent_list_code</i>: parent_key
     ExtrafieldParamHelpcheckbox=Lijst van parameters moet telkens bestaan uit sleutel,waarde (waarbij de sleutel geen '0' kan zijn)<br><br>bv:<br>1,waarde<br>2,waarde2<br>3,waarde3<br>...
     ExtrafieldParamHelpradio=Lijst van parameters moet telkens bestaan uit sleutel,waarde<br><br>bv:<br>1,waarde<br>2,waarde2<br>3,waarde3<br>...
     ExtrafieldParamHelpsellist=Lijst met waarden komt uit een tabel <br> Syntaxis: table_name: label_field: id_field :: filter <br> Voorbeeld: c_typent: libelle: id :: filter <br> <br> - idfilter is noodzakelijkerwijs een primaire int-sleutel <br> - filter kan een eenvoudige test zijn (bv. actief = 1) om alleen actieve waarde weer te geven <br> U kunt ook $ ID $ in filter gebruiken dat is het huidige id van huidig ​​object <br> Om een ​​SELECT in filter te doen, gebruik $ SEL $ <br> als u op extra velden wilt filteren, gebruikt u de syntaxis extra.fieldcode = ... (waarbij veldcode de code van extrafield is) <br> <br> Om de lijst afhankelijk te maken van een andere aanvullende attributenlijst: <br> c_typent: libelle: id: options_ <i> parent_list_code</i>| parent_column: filter  <br> <br>Om de lijst te laten afhangen van een andere lijst: <br>c_typent: libelle: id: <i> parent_list_code</i> | parent_column: filter
    -ExtrafieldParamHelpchkbxlst=List of values comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntax  extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list :<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
    -ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax : ObjectName:Classpath<br>Examples :<br>Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php
    +ExtrafieldParamHelpchkbxlst=Lijst met waarden komt uit een tabel<br>Syntaxis: table_name: label_field: id_field :: filter<br>Voorbeeld: c_typent: libelle: id :: filter<br><br>filter kan ook een eenvoudige test zijn (bv. Actief = 1 ) om alleen de actieve waarde weer te geven<br>U kunt ook $ID$ in het filter gebruiken, dat de huidige id van het huidige object is<br> Als u een SELECT in filter wilt gebruiken, gebruikt u $SEL$ <br>Als u op extra velden wilt filteren syntaxis extra.fieldcode = ... (waarbij veldcode de code van extrafield is)<br><br>Om de lijst afhankelijk te maken van een andere aanvullende attributenlijst <br>:c_typent: libelle: id: options_<i>parent_list_code</i>| parent_column: filter<br><br>Om de lijst afhankelijk te laten zijn van een andere lijst:<br>c_typent: libelle: id:<i>parent_list_code</i> | parent_column: filter
    +ExtrafieldParamHelplink=Parameters moeten zijn ObjectName: Classpath<br>Syntax: ObjectName: Classpath<br>Voorbeelden:<br>Societe: societe / class / societe.class.php <br>Contact: contact / class / contact.class.php
     LibraryToBuildPDF=Gebruikte library voor generen PDF
     LocalTaxDesc=Sommige landen gebruiken 2 of 3 belastingen op iedere factuurregel. Als dit het geval is, kies type voor tweede en derde belasting en het tarief. Mogelijke typen zijn: <br>1 : Locale belasting van toepassing op producten en diensten zonder btw (btw wordt niet toegepast op locale belasting)<br>2 : Locale belasting van toepassing op producten en diensten voor btw (btw wordt berekend op bedrag + locale belasting )<br>3 : Locale belasting van toepassing op producten zonder btw  (btw wordt niet toegepast op locale belasting)<br>4 : Locale belasting van toepassing op producten voor btw (btw wordt berekend op bedrag + locale belasting)<br>5 : Locale belasting van toepassing op diensten zonder btw  (btw wordt niet toegepast op locale belasting)<br>6 :  Locale belasting van toepassing op diensten voor btw  (btw wordt berekend op bedrag + locale belasting )
     SMS=SMS
    @@ -432,60 +436,62 @@ DefaultLink=Standaard link
     SetAsDefault=Gebruik standaard
     ValueOverwrittenByUserSetup=Waarschuwing, deze waarde kan worden overschreven door de gebruiker specifieke setup (elke gebruiker kan zijn eigen ClickToDial url ingestellen)
     ExternalModule=Externe module - geïnstalleerd in map %s
    -BarcodeInitForThirdparties=Mass barcode initialisatie voor relaties
    +BarcodeInitForthird-parties=Massa streepjescode initialisatie relaties
     BarcodeInitForProductsOrServices=Mass barcode init of reset voor producten of diensten
    -CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
    +CurrentlyNWithoutBarCode=Momenteel hebt u een <strong>%s</strong> record op <strong>%s</strong>%s zonder gedefinieerde streepjescode.
     InitEmptyBarCode=Init waarde voor de volgende %s lege records
     EraseAllCurrentBarCode=Wis alle huidige barcode waarden
    -ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
    +ConfirmEraseAllCurrentBarCode=Weet u zeker dat u alle huidige streepjescode-waarden wilt wissen?
     AllBarcodeReset=Alle barcode waarden zijn verwijderd
    -NoBarcodeNumberingTemplateDefined=Geen barcode nummering sjabloon ingeschakeld in barcode module setup.
    +NoBarcodeNumberingTemplateDefined=Er is geen barcode nummeringssjabloon ingeschakeld in de instellingen van de barcodemodule.
     EnableFileCache=Gebruik cache voor bestanden
    -ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
    +ShowDetailsInPDFPageFoot=Voeg meer details toe aan het PDF-voetbestand, zoals uw bedrijfsadres of beheerdersnamen (om professionele id's, bedrijfskapitaal en btw-nummer in te vullen).
     NoDetails=Niet meer details in footer
     DisplayCompanyInfo=Geen adresgegevens bedrijf weer
    -DisplayCompanyManagers=Display manager names
    +DisplayCompanyManagers=Toon namen managers
     DisplayCompanyInfoAndManagers=Geef adresgegevens en namen manager weer
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    -ModuleCompanyCodePanicum=Return an empty accounting code.
    -ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
    -Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
    -UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    -WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s gevolgd door klantcode voor een klantaccountingcode
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
    +ModuleCompanyCodePanicum=Retourneer een lege accountingcode.
    +ModuleCompanyCodeDigitaria=Boekhoudcode is afhankelijk van de code van derden. De code bestaat uit het teken "C" in de eerste positie gevolgd door de eerste 5 tekens van de code van derden.
    +Use3StepsApproval=Bestellingen moeten standaard worden gemaakt en goedgekeurd door 2 verschillende gebruikers (één stap / gebruiker om te maken en één stap / gebruiker goed te keuren. Merk op dat als gebruiker zowel toestemming heeft om te maken en goed te keuren, één stap / gebruiker volstaat) . U kunt met deze optie vragen om een ​​derde stap / gebruikersgoedkeuring in te voeren, als het bedrag hoger is dan een speciale waarde (dus 3 stappen zijn nodig: 1 = validatie, 2 = eerste keer goedkeuren en 3 = tweede keer goedkeuren als het bedrag voldoende is). <br> Stel deze optie in op leeg als één goedkeuring (2 stappen) voldoende is, stel deze in op een zeer lage waarde (0,1) als een tweede goedkeuring (3 stappen) altijd vereist is.
    +UseDoubleApproval=Gebruik een goedkeuring in 3 stappen als het bedrag (zonder belasting) hoger is dan ...
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
    +WarningPHPMail2=Als uw e-mail SMTP-provider de e-mailclient moet beperken tot bepaalde IP-adressen (zeer zeldzaam), is dit het IP-adres van de mail user agent (MUA) voor uw ERP CRM-toepassing: <strong>%s</strong>.
     ClickToShowDescription=Klik voor omschrijving
    -DependsOn=Deze module heeft de volgende module(s) nodig
    +DependsOn=Deze module heeft de module(s) nodig
     RequiredBy=Deze module is vereist bij module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=U moet hier de relatieve URL van de pagina invoeren. Als u parameters opneemt in URL, zijn de standaardwaarden effectief als alle parameters op dezelfde waarde zijn ingesteld. Voorbeelden:
    -PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +PageUrlForDefaultValuesCreate=<br> Voor het formulier om een ​​nieuwe relatie te maken, is dit <strong> %s </strong>. <br> Als u alleen de standaardwaarde wilt als url een bepaalde parameter heeft, kunt u<strong>%s</strong>gebruiken
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Schakel het gebruik van gepersonaliseerde standaardwaarden in
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    -WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
    +EnableOverwriteTranslation=Schakel het gebruik van de overschreven vertaling in
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
    +WarningSettingSortOrder=Pas op. Het instellen van een standaardsorteervolgorde kan resulteren in een technische fout wanneer u op de lijstpagina gaat als veld een onbekend veld is. Als u een dergelijke fout ondervindt, gaat u terug naar deze pagina om de standaard sorteervolgorde te verwijderen en het standaardgedrag te herstellen.
     Field=veld
    -ProductDocumentTemplates=Document templates to generate product document
    -FreeLegalTextOnExpenseReports=Free legal text on expense reports
    -WatermarkOnDraftExpenseReports=Watermark on draft expense reports
    +ProductDocumentTemplates=Documentsjablonen om een ​​productdocument te genereren
    +FreeLegalTextOnExpenseReports=Gratis juridische tekst over onkostendeclaraties
    +WatermarkOnDraftExpenseReports=Watermerk op ontwerp onkostendeclaraties
     AttachMainDocByDefault=Zet dit op 1 als u het hoofddocument als standaard aan e-mail wilt toevoegen (indien van toepassing)
     FilesAttachedToEmail=Voeg een bestand toe
     SendEmailsReminders=Stuur agendaherinneringen per e-mail
    -davDescription=Add a component to be a DAV server
    -DAVSetup=Setup of module DAV
    -DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +davDescription=Voeg een component toe als DAV-server
    +DAVSetup=Installatie van DAV module
    +DAV_ALLOW_PUBLIC_DIR=Activeer de openbare map (WebDav-map zonder dat inloggen vereist is)
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Gebruikers & groepen
     Module0Desc=Groepenbeheer gebruikers/werknemers
    -Module1Name=Beheer derde partijen
    +Module1Name=Relaties
     Module1Desc=Beheer van derde partijen (klanten, leveranciers en contactpersonen). Ook kunt u hier sjabloondocumenten uploaden.
     Module2Name=Commercieel
     Module2Desc=Commercieel beheer
     Module10Name=Boekhouding
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Zakelijke voorstellen / Offertes
     Module20Desc=Beheer van offertes
     Module22Name=EMailings
    @@ -497,7 +503,7 @@ Module25Desc=Beheer van de bestellingen door klanten
     Module30Name=Facturen
     Module30Desc=Factuur- en creditnotabeheer voor klanten. Factuurbeheer voor leveranciers
     Module40Name=Leveranciers
    -Module40Desc=Suppliers and purchase management (purchase orders and billing)
    +Module40Desc=Leveranciers- en inkoopbeheer (inkooporders en facturering)
     Module42Name=Debug logs
     Module42Desc=Mogelijkheden voor een log (file,syslog, ...). Deze log-files zijn voor technische/debug ondersteuning.
     Module49Name=Editors
    @@ -511,13 +517,13 @@ Module52Desc=Productenvoorraadbeheer
     Module53Name=Diensten
     Module53Desc=Dienstenbeheer
     Module54Name=Contracten/Abonnementen
    -Module54Desc=Contractmanagement (diensten of herhalende abonnementen)
    +Module54Desc=Beheer van contracten (diensten of terugkerende abonnementen)
     Module55Name=Streepjescodes
     Module55Desc=Streepjescodesbeheer
     Module56Name=Telefonie
     Module56Desc=Telefoniebeheer
     Module57Name=Incasso-opdrachten
    -Module57Desc=Beheer van Incasso opdrachten. Inclusief het aanmaken van een SEPA bestand zoals gebruikt in Europese landen.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integratie van een 'ClickToDial' systeem (Asterisk, etc)
     Module59Name=Bookmark4u
    @@ -528,78 +534,78 @@ Module75Name=Reisnotities en -kosten
     Module75Desc=Beheer van reisnotities en -kosten
     Module80Name=Verzendingen
     Module80Desc=Beheer afnemersverzending en -ontvangst
    -Module85Name=Bank en Contant
    +Module85Name=Kas en bank
     Module85Desc=Beheer van bank- en / of kasrekeningen
     Module100Name=Externe site
    -Module100Desc=Voeg een externe website in het Dolibarr menu toe en bekijk deze in een frame
    +Module100Desc=Voeg externe websitelink toe aan Dolibarr-menu's om het in een Dolibarr-frame te bekijken
     Module105Name=Mailman en SPIP
     Module105Desc=Mailman of SPIP-interface voor leden-module
     Module200Name=LDAP
    -Module200Desc=LDAP mappen synchronisatie
    +Module200Desc=LDAP-directorysynchronisatie
     Module210Name=PostNuke
     Module210Desc='PostNuke'-integratie
     Module240Name=Uitvoer gegevens (exporteren)
    -Module240Desc=Gereedschap om Dolibarr data te exporteren (met hulp)
    +Module240Desc=Hulpmiddel om Dolibarr-gegevens te exporteren (met assistentie)
     Module250Name=Invoer gegevens (importeren)
    -Module250Desc=Gereedschap om Dolibarr data te importeren (met hulp)
    +Module250Desc=Hulpmiddel om gegevens in Dolibarr te importeren (met assistentie)
     Module310Name=Leden
     Module310Desc=Ledenbeheer (van een vereniging)
     Module320Name=RSS-feeds
     Module320Desc=Voeg een RSS feed toe in de informatieschermen van Dolibarr
    -Module330Name=Weblinks (Favouriete internetpagina's in het menu weergeven)
    -Module330Desc=Internetfavorietenbeheer
    -Module400Name=Projecten/Kansen/Leads
    -Module400Desc=Beheer van projecten, kansen / leads en / of taken. U kunt ook elk element (factuur, bestelling, voorstel, interventie, ...) toewijzen aan een project en een transversaal beeld krijgen van de projectweergave.
    +Module330Name=Bladwijzers en snelkoppelingen
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projecten of leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webkalender
     Module410Desc=Integratie van een webkalender
    -Module500Name=Taxes and Special expenses
    -Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
    -Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module500Name=Belastingen en speciale uitgaven
    +Module500Desc=Beheer van andere uitgaven (verkoopbelastingen, sociale of fiscale belastingen, dividenden, ...)
    +Module510Name=Betaling van werknemerslonen
    +Module510Desc=Record and track employee payments
     Module520Name=Lening
     Module520Desc=Het beheer van de leningen
     Module600Name=Notificaties van bedrijfs-evenementen
    -Module600Desc=Stuur e-mailmeldingen (geactiveerd door sommige zakelijke evenementen) naar gebruikers (instelling gedefinieerd op elke gebruiker), naar externe contactpersonen (set-up gedefinieerd op elke externe partij) of naar vaste e-mails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    -Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
    +Module610Name=Productvarianten
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Giften
     Module700Desc=Donatiebeheer
    -Module770Name=Onkostennota's 
    -Module770Desc=Management en vordering onkostennota's (vervoer, maaltijden, ...)
    -Module1120Name=Vendor commercial proposal
    -Module1120Desc=Request vendor commercial proposal and prices
    +Module770Name=Onkostennota's
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
    +Module1120Name=Commercieel voorstel van de leverancier
    +Module1120Desc=Vraag commercieel voorstel en prijzen aan
     Module1200Name=Mantis
     Module1200Desc=Mantis integratie
     Module1520Name=Documenten genereren
     Module1520Desc=Massa mail document generen
     Module1780Name=Kenmerk/Categorieën
    -Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
    +Module1780Desc=Aanmaken tags/categorie (producten, klanten, leveranciers, contacten of leden)
     Module2000Name=Fckeditor
    -Module2000Desc=Toestaan aanpassen tekst met behulp de uitgebreide editor( Gebaseerd op de CKEditor)
    +Module2000Desc=Toestaan ​​dat tekstvelden worden bewerkt met behulp van CKEditor
     Module2200Name=Dynamische prijzen
     Module2200Desc=Het gebruik van wiskundige uitdrukkingen voor prijzen mogelijk te maken
     Module2300Name=Geplande taken
     Module2300Desc=Taakplanning (ook wel cron of chrono tabel)
     Module2400Name=Gebeurtenissen/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Geautomatiseerde organisatie van gemaakte en opgeslagen documenten. Deel deze indien gewenst.
     Module2600Name=API/Web services (SOAP server)
     Module2600Desc=Schakel de Dolibarr SOAP server in die API services aanbiedt
    -Module2610Name=API/Web services (REST server)
    +Module2610Name=API / webservices (REST-server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Schakel de Dolibarr webservices client aan (Kan worden gebruikt om gegevens en / of aanvragen duwen naar externe servers. Leverancier bestellingen alleen ondersteund voor het moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Gebruik de online dienst 'Gravatar' (www.gravatar.com) voor het posten van afbeeldingen van gebruikers / leden (gevonden door hun e-mails). Internet toegang vereist.
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=Capaciteitconversie GeoIP Maxmind
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-bedrijf
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Beheer van verlofverzoeken
    -Module20000Desc=Bevestig en volg verlofverzoeken van medewerkers
    +Module20000Desc=Aanmaken en volgen verlofaanvragen
     Module39000Name=Products lots
     Module39000Desc=Lot of serienummer, vervaldatum en de uiterste verkoopdatum beheer van producten
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module om een ​​online betaalpagina aan te bieden die betalingen met een creditcard / betaalpas accepteert via PayBox. Dit kan worden gebruikt om uw klanten toe te staan ​​om gratis betalingen te doen of om een ​​betaling uit te voeren voor een bepaald Dolibarr-object (factuur, bestelling, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Verkooppunt
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Punt van de omzet
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module om een ​​online betalingspagina aan te bieden die betalingen met PayPal accepteert (creditcard of PayPal-tegoed). Dit kan worden gebruikt om uw klanten toe te staan ​​om gratis betalingen te doen of om een ​​betaling uit te voeren voor een bepaald Dolibarr-object (factuur, bestelling, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Boekhouding
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (zonder het openen van de documenten) met behulp van Cups IPP-interface (Printer moet zichtbaar zijn vanaf de server zijn, en CUPS moet geinstalleerd zijn op de server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Onderzoek of Stemmen
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marges
     Module59000Desc=Module om de marges te beheren
     Module60000Name=Commissies
     Module60000Desc=Module om commissies te beheren
    -Module62000Name=Incoterm
    -Module62000Desc=Onderdelen toevoegen voor Incoterms
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Bronnen
     Module63000Desc=Bronnen beheren (printers, auto's kamers, ...) zodat u deze kunt delen met evenementen
     Permission11=Bekijk afnemersfacturen
    @@ -651,9 +661,9 @@ Permission32=Creëer / wijzig producten / diensten
     Permission34=Verwijderen producten / diensten
     Permission36=Exporteer producten / diensten
     Permission38=Export producten
    -Permission41=Inlezen projecten en taken (gedeeld project en project waarbij ik decontactpersoon ben). Kan ook de gebruikte tijd invoeren op toegewezen taken (rooster).
    -Permission42=Maak / wijzig projecten (gedeeld project en projecten waarvan ik contactpersoon ben). Kan ook taken aanmaken en gebruikers toewijzen aan deze projecten en taken
    -Permission44=Verwijder projecten (Gedeelde projecten en projecten waarvoor ik de contactpersoon ben)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Projecten verwijderen (gedeeld project en projecten waar ik contact mee heb)
     Permission45=Exporteer projecten
     Permission61=Bekijk interventies
     Permission62=Creëer / wijzig interventies
    @@ -686,7 +696,7 @@ Permission109=Verwijder verzendingen
     Permission111=Bekijk de financiële rekeningen
     Permission112=Creëer / wijzig / verwijder en vergelijk transacties
     Permission113=Stel financiële rekeningen in (creëer, beheer, categoriseer)
    -Permission114=Afstemming overboekingen
    +Permission114=Consolideer transacties
     Permission115=Exporteer transacties en rekeningafschriften
     Permission116=Overschrijvingen tussen rekeningen
     Permission117=Beheer cheques verzending
    @@ -694,15 +704,15 @@ Permission121=Bekijk derde partijen gelinkt aan de gebruiker
     Permission122=Creëer / wijzig derden gelinkt aan gebruiker
     Permission125=Verwijderen van derden gelinkt aan gebruiker
     Permission126=Exporteer derden
    -Permission141=Lees alle projecten en taken (ook private projecten waar ik niet de contactpersoon ben)
    -Permission142=Aanmaak/wijzig alle projecten en taken (ook private projecten waar ik niet de contactpersoon ben)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Verwijder alle projecten en taken (ook de private projecten waarvoor ik geen contactpersoon ben)
     Permission146=Bekijk leveranciers
     Permission147=Bekijk statistieken
     Permission151=Inlezen incasso-opdracht
     Permission152=Aanmaken/aanpassen incasso-opdracht
     Permission153=Versturen/verzenden incasso-opdrachten
    -Permission154=Overzicht crediteringen/afkeuringen incasso opdrachten
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Lees contracten/abonnementen
     Permission162=Creëren/aanpassen contracten/abonnementen
     Permission163=Een dienst/abonnement van een contract activeren
    @@ -725,7 +735,7 @@ Permission187=Sluiten leverancieropdrachten
     Permission188=Annuleren leverancieropdrachten
     Permission192=Regels aanmaken
     Permission193=Regels beëindigen
    -Permission194=Consult marge regels
    +Permission194=Read the bandwidth lines
     Permission202=Creëer DSL-aansluitingen
     Permission203=links inzien
     Permission204=Creëer links
    @@ -750,12 +760,12 @@ Permission244=Zie de inhoud van de verborgen categorieën
     Permission251=Bekijk de andere gebruikers en groepen
     PermissionAdvanced251=Lees andere gebruikers
     Permission252=Creëren / wijzigen van andere gebruikers, groepen en rechten
    -Permission253=Wijzigen van andere gebruikers wachtwoord
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Creëer / wijzig de rechten van internet / externe gebruikers
     Permission254=Verwijderen of uitschakelen van andere gebruikers
     Permission255=Creëren / wijzigen eigen gebruikersgegevens
     Permission256=Wijzigen eigen wachtwoord
    -Permission262=Verleng de toegang tot alle relaties (niet alleen relaties waarvan de gebruiker een verkoopvertegenwoordiger is). <br> Niet effectief voor externe gebruikers (altijd beperkt tot offertes, bestellingen, facturen, contracten, enz.). <br>Niet effectief voor projecten (alleen regels over projectrechten, zichtbaarheid en toewijzing zijn van belang).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Lees CA
     Permission272=Facturen inzien
     Permission273=Facturen uitgeven
    @@ -765,7 +775,7 @@ Permission283=Contactpersonen verwijderen
     Permission286=Contactpersonen Exporteren
     Permission291=Tarieven inzien
     Permission292=Stel rechten voor tarieven in
    -Permission293=Wijzig afnemerstarieven
    +Permission293=Modify customers tariffs
     Permission300=Bekijk streepjescodes
     Permission301=Creëren / wijzigen streepjescodes
     Permission302=Verwijderen streepjescodes
    @@ -787,11 +797,9 @@ Permission401=Bekijk kortingen
     Permission402=Creëren / wijzigen kortingen
     Permission403=Kortingen valideren
     Permission404=Kortingen verwijderen
    -Permission501=Lees werknemerscontracten/salarissen
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Betaling van salarissen
    -Permission512=Create/modify payment of salaries
    -Permission514=Verwijder salarissen
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salarissen
     Permission520=Lees Leningen
     Permission522=Creëer/wijzigen leningen
    @@ -807,12 +815,12 @@ Permission701=Bekijk donaties
     Permission702=Creëren / wijzigen donaties
     Permission703=Verwijderen donaties
     Permission771=Declaraties (eigen en ondergeschikten)
    -Permission772=Creëer / wijzigen onkostennota's 
    -Permission773=Verwijderen onkostennota's 
    +Permission772=Creëer / wijzigen onkostennota's
    +Permission773=Verwijderen onkostennota's
     Permission774=Lees alle onkostennota's (ook voor de gebruiker niet ondergeschikten)
    -Permission775=Goedkeuren onkostennota's 
    -Permission776=Betalen onkostennota's 
    -Permission779=Export onkostennota's 
    +Permission775=Goedkeuren onkostennota's
    +Permission776=Betalen onkostennota's
    +Permission779=Export onkostennota's
     Permission1001=Bekijk voorraden
     Permission1002=Toevoegen/wijzigen van een magazijn
     Permission1003=Verwijder magazijnen
    @@ -844,8 +852,8 @@ Permission1251=Voer massale invoer van externe gegevens in de database uit (data
     Permission1321=Exporteer afnemersfacturen, attributen en betalingen
     Permission1322=Open een betaalde factuur
     Permission1421=Exporteer afnemersfacturen en attributen
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Verlofaanvragen verwijderen
     Permission20004=Alle verlofaanvragen (zelfs van gebruiker, niet ondergeschikten)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Bronnen lezen
     Permission63002=Create/modify resources
     Permission63003=Verwijder resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Relatiesoort
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potentiële niveau
     DictionaryCanton=Provincie
     DictionaryRegion=Regio
    @@ -894,7 +902,7 @@ DictionaryVAT=BTW-tarieven of Verkoop Tax tarieven
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Betalingsvoorwaarden
     DictionaryPaymentModes=Betaalwijzen
    -DictionaryTypeContact=Contact / Adres soorten
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Papierformaten
    @@ -908,47 +916,47 @@ DictionarySource=Oorsprong van offertes / bestellingen
     DictionaryAccountancyCategory=Gepersonaliseerde groepen voor rapporten
     DictionaryAccountancysystem=Modellen voor rekeningschema
     DictionaryAccountancyJournal=Daboeken
    -DictionaryEMailTemplates=Email documentensjablonen
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Eenheden
     DictionaryProspectStatus=Status prospect
    -DictionaryHolidayTypes=Soort vergoeding
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Onkostenoverzicht - bereik per transportcategorie
     SetupSaved=Instellingen opgeslagen
     SetupNotSaved=Installatie niet opgeslagen
     BackToModuleList=Terug naar moduleoverzicht
    -BackToDictionaryList=Terug naar de woordenboeken lijst
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=BTW-beheer
    -VATIsUsedDesc=Het standaard BTW-tarief bij het aanmaken van prospecten, facturen, orders etc volgt de actieve standaard regel:<br>Als de verkoper onderworpen is aan BTW, dan wordt BTW standaard op 0 gezet. Einde van de regel.<br>Als het 'land van de verkoper' = 'het land van de koper' dan wordt de BTW standaard ingesteld op de BTW van het product in het verkopende land. Einde van de regel.<br>Als verkoper en koper zich in de Europese Gemeenschap bevinden en het betreft een nieuw vervoersmiddel (auto, boot, vliegtuig), dan wordt de BTW standaard ingesteld op 0 (De BTW moet worden betaald door koper in het grenskantoor van zijn land en niet door de verkoper). Einde van de regel.<br>Als verkoper en koper zich in de Europese Unie bevinden en de koper is een persoon of bedrijf zonder BTW-registratienummer = BTW-standaard van het verkochte product. Einde van de regel.<br>Als verkoper en koper zich in de Europese Gemeenschap bevinden en de koper geen bedrijf is, dan wordt de BTW standaard ingesteld op de BTW van het verkochte product. Einde van de regel<br><br>In alle andere gevallen wordt de BTW standaard ingesteld op 0. Einde van de regel.<br>
    -VATIsNotUsedDesc=Standaard is de voorgestelde BTW 0. Dit kan gebruikt worden in situaties zoals verenigingen, particulieren of kleine bedrijven.
    -VATIsUsedExampleFR=In Frankrijk betekent dit dat bedrijven of organisaties een echt fiscaal systeem hebben (Vereenvoudigd echt of normaal echt). Een systeem waarin btw wordt aangegeven.
    -VATIsNotUsedExampleFR=In Frankrijk betekent dit verenigingen zonder BTW-aangifte of bedrijven, organisaties of vrije beroepen die voor het fiscale systeem voor micro-ondernemingen (btw in franchise) hebben gekozen en een franchisebetaling zonder BTW-aangifte hebben betaald. Deze keuze zal de referentie "Niet van toepassing zijnde BTW - art-293B van CGI" op facturen weergeven.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Tarief
     LocalTax1IsNotUsed=Gebruik geen tweede belasting
    -LocalTax1IsUsedDesc=Gebruik een tweede type van belasting (met uitzondering van de BTW)
    -LocalTax1IsNotUsedDesc=Gebruik geen ander type van belasting (andere dan BTW)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Tweede soort belasting
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Derde belasting niet gebruiken
    -LocalTax2IsUsedDesc=Gebruik een derde type van belasting (met uitzondering van de BTW)
    -LocalTax2IsNotUsedDesc=Gebruik geen ander type van belasting (andere dan BTW)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Derde type belasting
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= Gestion RE
    -LocalTax1IsUsedDescES= Het RE tarief volgt standaard de actieve standaardregel (bij het maken van prospecten, facturen, opdrachten etc)<br> Als de koper niet is onderworpen aan RE, wordt de RE standaard standaard ingesteld op 0. Einde van de regel.<br>Indien de koper wordt onderworpen aan dan de RE dan standaard RE. Einde van de regel.<br>
    -LocalTax1IsNotUsedDescES= Standaard is de voorgestelde RE 0. Einde van de regel.
    -LocalTax1IsUsedExampleES= In Spanje zijn zij professionals die onderworpen zijn aan enkele specifieke secties van het Spaanse IAE.
    -LocalTax1IsNotUsedExampleES= In Spanje zijn zij professionals en verenigingen die onderworpen zijn aan bepaalde secties van het Spaanse IAE.
    -LocalTax2ManagementES= IRPF beheer
    -LocalTax2IsUsedDescES= Het standaard RE tarief bij het aanmaken van prospecten, facturen, opdrachten, etc volgt de actieve standaardregel:<br>Wanneer de verkoper niet onderworpen is aan de IRPF, dan wordt IRPF ingesteld op o. Einde van de regel.<br>Wanneer de verkoper onderworpen is aan de IRPF, dan wordt standaard de IRPF insgesteld. Einde van regel.<br>
    -LocalTax2IsNotUsedDescES= Standaard is de voorgestelde IRPF 0. Einde van de regel.
    -LocalTax2IsUsedExampleES= In Spanje, freelancers en onafhankelijke professionals die diensten aanbieden alsmede bedrijven die voor het belastingsysteem van modules hebben gekozen.
    -LocalTax2IsNotUsedExampleES= In Spanje zijn zij bedrijven die niet onderworpen zijn aan het belastingsysteem van modules.
    +LocalTax1ManagementES=Gestion RE
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Standaard is de voorgestelde RE 0. Einde van de regel.
    +LocalTax1IsUsedExampleES=In Spanje zijn zij professionals die onderworpen zijn aan enkele specifieke secties van het Spaanse IAE.
    +LocalTax1IsNotUsedExampleES=In Spanje zijn zij professionals en verenigingen die onderworpen zijn aan bepaalde secties van het Spaanse IAE.
    +LocalTax2ManagementES=IRPF beheer
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Standaard is de voorgestelde IRPF 0. Einde van de regel.
    +LocalTax2IsUsedExampleES=In Spanje, freelancers en onafhankelijke professionals die diensten aanbieden alsmede bedrijven die voor het belastingsysteem van modules hebben gekozen.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Rapporten over lokale belastingen
     CalcLocaltax1=Verkopen - Aankopen
     CalcLocaltax1Desc=Lokale belastings rapporten worden berekend met het verschil tussen verkopen en aankopen
    @@ -958,6 +966,7 @@ CalcLocaltax3=Verkopen
     CalcLocaltax3Desc=Lokale Belastingen rapporten zijn het totaal van belastingen verkoop
     LabelUsedByDefault=Standaard te gebruiken label indien er geen vertaling kan worden gevonden voor de code
     LabelOnDocuments=Etiket op documenten
    +LabelOrTranslationKey=Label or translation key
     NbOfDays=Aantal dagen
     AtEndOfMonth=Aan het einde van de maand
     CurrentNext=Huidige/volgende
    @@ -984,7 +993,7 @@ DatabaseUser=Databasegebruikersnaam
     DatabasePassword=Databasewachwoord
     Tables=Tabellen
     TableName=Tabelnaam
    -NbOfRecord=Aantal tabelregels
    +NbOfRecord=Aantal records
     Host=Server
     DriverType=Drivertype
     SummarySystem=Samenvatting van systeeminformatie
    @@ -996,7 +1005,7 @@ Skin=Uiterlijksthema
     DefaultSkin=Standaard uiterlijksthema
     MaxSizeList=Maximale lijstlengte
     DefaultMaxSizeList=Standaard maximum lengte voor lijsten
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Bericht van de dag
     MessageLogin=Bericht op inlogpagina
     LoginPage=Inlogpagina
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent zoekformulier in linker menu
     DefaultLanguage=Standaard te gebruiken taal (taal-code)
     EnableMultilangInterface=Inschakelen meertalige interface
     EnableShowLogo=Toon logo in het linker menu
    -CompanyInfo=Informatie bedrijf/organisatie
    -CompanyIds=Informatie bedrijf/organisatie
    +CompanyInfo=Bedrijf/Organisatie
    +CompanyIds=Bedrijfs-/organisatie-identiteiten
     CompanyName=Naam
     CompanyAddress=Adres
     CompanyZip=Postcode
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Eigenaar van bankrekening %s
     BankModuleNotActive=Bankrekeningen module niet ingeschakeld
     ShowBugTrackLink=Toon de link "<strong>%s</strong>"
     Alerts=Kennisgevingen
    -DelaysOfToleranceBeforeWarning=Getolereerde vertraging voor kennisgeving
    -DelaysOfToleranceDesc=In dit scherm kunt u de getolereerde vertraging voordat een kennisgeving wordt gemeld op het scherm met een icoontje %s voor elk te laat element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Getolereerde vertraging (in dagen) voor geplande evenementen (agenda) nog niet voltooid
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Vertragingstolerantie (in dagen) vóór melding bij project niet tijdig afgesloten
    -Delays_MAIN_DELAY_TASKS_TODO=Getolereerde vertraging (in dagen) voor geplande taken (project-taken) nog niet voltooid
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Getolereerde vertraging (in dagen) voor een kennisgeving, op nog niet uitgevoerde orders.
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Getolereerde vertraging (in dagen) voor een kennisgeving, op af te sluiten offertes word getoond
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Getolereerde vertraging (in dagen) voor een kennisgeving, op niet-gefactureerde offertes word getoond
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Getolereerde vertraging (in dagen) voor een kennisgeving, op te activeren diensten word getoond
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Getolereerde vertraging (in dagen) voor een kennisgeving, op afgelopen diensten word getoond
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Getolereerde vertraging (in dagen) voor een kennisgeving, op een onbetaalde leveranciersfactuur word getoond
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Getolereerde vertraging (in dagen) voor een kennisgeving, op een onbetaalde afnemersfactuur word getoond
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Getolereerde vertraging (in dagen) voor een kennisgeving, op bank conciliatie word getoond
    -Delays_MAIN_DELAY_MEMBERS=Getolereerde vertraging (in dagen) voor een kennisgeving, op niet betaalde contributie word getoond
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Getolereerde vertraging (in dagen) voor de kennisgeving voor nog te doen cheques aanbetaling
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=Bij Instellingen kunt u de onderdelen instellen voordat u begint Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Andere menu-items beheren / optionele instellingen.
    +DelaysOfToleranceBeforeWarning=Vertragingen voor het weergeven van een waarschuwing
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Vertraging (in dagen) vóór waarschuwing betreft het te sluiten van voorstellen
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Veiligheidsauditgebeurtenissen
     Audit=Audit
     InfoDolibarr=Over Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Hier kunt u de de gewenste veiligheidslogs in- of uitschakelen. Beh
     AreaForAdminOnly=Setup functies kunnen alleen door <b>Administrator gebruikers</b> worden ingesteld
     SystemInfoDesc=Systeeminformatie is technische informatie welke u in alleen-lezen modus krijgt en alleen door beheerders is in te zien.
     SystemAreaForAdminOnly=Dit scherm is alleen beschikbaar voor de beheerders. Andere Dolibarr gebruikers kunnen hier niets wijzigen.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=U kunt hier instellingen doen die het uiterlijk van Dolibarr instellen
     AvailableModules=Beschikbare app/modules
     ToActivateModule=Om modules te activeren, ga naar Home->Instellingen->Modules.
     SessionTimeOut=Time-out van de sessie
    -SessionExplanation=De hier ingestelde waarde garandeert dat de sessie nooit zal verlopen voordat deze periode is verlopen, maar niet dat de sessie wel verloopt na deze vertraging, omdat sessies worden worden verwijderd wanneer het systeem zelf een opschoning begint.<br>Opmerking: bij geen specifiek systeem, zal PHP elke sessie wissen rond <b>%s/%s</b> toegang, maar alleen tijdens de toegang van andere sessies.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Beschikbare initiatoren (triggers)
    -TriggersDesc=Initiatoren zijn bestanden die het gedrag van de 'workflow' van Dolibarr zullen beïnvloeden vanaf het moment dat zij zijn gekopieerd naar de map <b>htdocs/core/triggers.</b>Zij initiëren nieuwe acties, geactiveerd door Dolibarr gebeurtenissen (de creatie van nieuwe bedrijven, factuur validatie, etc).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Initiatoren in dit bestand zijn uitgeschakeld door het <b>NoRun</b> achtervoegsel in hun naam.
     TriggerDisabledAsModuleDisabled=Initiatoren in dit bestand zijn uitgeschakeld als module <b>%s</b> is uitgeschakeld.
     TriggerAlwaysActive=Initiatoren in dit bestand zijn altijd actief, ongeacht de geactiveerde modules in Dolibarr.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Voer alle referentiegegevens in. U kunt uw waarden toevoegen aan
     ConstDesc=Op deze pagina kunt u alle andere parameters bewerken die niet beschikbaar zijn op de vorige pagina's. Dit zijn meestal gereserveerde parameters voor ontwikkelaars of geavanceerde probleemoplossing. Voor een lijst met opties <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">kijk hier</a>,
     MiscellaneousDesc=Overige beveiliging gerelateerde instellingen worden hier vastgelegd.
     LimitsSetup=Limieten- en precisieinstellingen
    -LimitsDesc=U kunt hier limieten en preciseringen die Dolibarr gebruikt instellen
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Maximaal aantal decimalen voor eenheidsprijzen
     MAIN_MAX_DECIMALS_TOT=Maximaal aantal decimalen voor de totale prijs
     MAIN_MAX_DECIMALS_SHOWN=Maximaal aantal decimalen voor de prijzen weergegeven op het scherm (Voeg <b>...</b> toe na dit nummer als u <b>...</b> wilt zien als het nummer wordt afgekapt op het scherm)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Prijs per eenheid van een product
     TotalPriceAfterRounding=Totale prijs inclusief na afronding
     ParameterActiveForNextInputOnly=De instelling word pas actief voor de volgende invoer
     NoEventOrNoAuditSetup=Geen geregistreerde auditgebeurtenis. Dit is normaal als de audit nog niet is ingeschakeld in "Home->Instellingen->Beveiliging->Audit".
    -NoEventFoundWithCriteria=Geen beveiligingsgebeurtenis gevonden met deze zoek criteria.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Controleer de instellingen van uw lokale "sendmail"-programma
     BackupDesc=Om een complete backup van Dolibarr te maken, dient u:
     BackupDesc2=Bewaren van bestanden in de documenten directorie (<b>%s</b>) dat alle opgeladen en gegenereerde bestanden bevat. (Het bevat ook alle bestanden gegenereerd bij stap 1).
    -BackupDesc3=- Bewaar de inhoud van uw database in een dump bestand. Om dit te doen, kunt u gebruik maken van de volgende assistent.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Gearchiveerde map-bestand moet op een veilige plaats worden opgeslagen.
     BackupDescY=De gemaakte dump bestand moet op een veilige plaats worden opgeslagen.
    -BackupPHPWarning=Backup niet gegarandeerd met deze methode. Gebruik beter de vorige
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Om een Dolibarr backup terug te zetten, dient u:
    -RestoreDesc2=- Herstel archiefbestand (zip bestand bijvoorbeeld) van de oude documentenmap in de documentenmap van de nieuwe Dolibarr installatie of in huidige documentenmap (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=- Herstel de gegevens van een backup dumpbestand, in de database van de nieuwe Dolibarr installatie of in de database van de huidige installatie. Waarschuwing, zodra een herstel is gedaan, zult u de gebruikersnaam en wachtwoord die bestonden toen de backup werd gemaakt, moeten gebruiken. Om een backupdatabase in de huidige installatie te herstellen, kunt u de assistent (wizard) volgen.
     RestoreMySQL=MySQL import
     ForcedToByAModule= Geforceerd tot <b>%s</b> door een geactiveerde module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=U dient dit commando vanaf de o
     YourPHPDoesNotHaveSSLSupport=SSL functies niet beschikbaar in uw PHP installatie
     DownloadMoreSkins=Meer uiterlijkthema's om te downloaden
     SimpleNumRefModelDesc=Geeft het referentienummer terug in het formaat %sjjmm-nnnn waar jj jaar is, mm de maand en nnnn een opeenvolgende aaneengesloten reeks en zonder vervangende 0
    -ShowProfIdInAddress=Toon in het adresgedeelte van documenten het 'professioneel ID'
    -ShowVATIntaInAddress=Verberg BTW Intra num met adressen op documenten
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Onvolledige vertaling
    -MAIN_DISABLE_METEO=Schakel "Meteo"-weergave uit
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standaard mode
     MeteoStdModEnabled=Standaard mode geactiveerd
     MeteoPercentageMod=Percentage modus
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test inloggen op API
    -ProxyDesc=Sommige functies van Dolibarr moet een toegang tot internet aan het werk te hebben. Definieer hier parameters voor deze. Als de Dolibarr server zich achter een Proxy server, deze parameters vertelt Dolibarr hoe toegang tot internet via het.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Externe toegang
     MAIN_PROXY_USE=Gebruik een proxy server (anders directe toegang tot internet)
     MAIN_PROXY_HOST=Naam / adres van de proxy server
     MAIN_PROXY_PORT=Poort van de proxy server
     MAIN_PROXY_USER=Inloggen op de proxyserver te gebruiken
     MAIN_PROXY_PASS=Wachtwoord voor de proxy-server te gebruiken
    -DefineHereComplementaryAttributes=Definieer hier alle attributen, niet reeds standaard beschikbaar, en dat je wilt worden ondersteund voor %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Aanvullende attributen
     ExtraFieldsLines=Aanvullende kenmerken (lijnen)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementaire attributen (orderregels)
     ExtraFieldsSupplierInvoicesLines=Complementaire attributen (factuurregels)
     ExtraFieldsThirdParties=Aanvullende kenmerken (relaties)
    -ExtraFieldsContacts=Aanvullende kenmerken (contact / adres)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Aanvullende kenmerken (lid)
     ExtraFieldsMemberType=Aanvullende kenmerken (soort lid)
     ExtraFieldsCustomerInvoices=Aanvullende kenmerken (facturen)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=alleen alfanumerieke tekens en kleine letters z
     SendmailOptionNotComplete=Waarschuwing, op sommige Linux-systemen, e-mail verzenden vanaf uw e-mail, sendmail uitvoering setup moet conatins optie-ba (parameter mail.force_extra_parameters in uw php.ini-bestand). Als sommige ontvangers nooit e-mails ontvangen, probeer dit PHP parameter bewerken met mail.force_extra_parameters =-ba).
     PathToDocuments=Pad naar documenten
     PathDirectory=Map
    -SendmailOptionMayHurtBuggedMTA=Feature om e-mails met behulp van methode "PHP mail direct" te sturen zal een e-mailbericht dat niet goed zou kunnen worden ontleed door sommige het ontvangen van e-mailservers. Resultaat is dat sommige mails niet kunnen worden gelezen door mensen gehost door thoose afgeluisterd platforms. Het is het geval voor sommige Internet providers (Ex: Orange in Frankrijk). Dit is geen probleem in Dolibarr noch in PHP, maar op het ontvangen van e-mailserver. U kunt de optie MAIN_FIX_FOR_BUGGED_MTA echter toe te voegen aan 1 in setup - andere om Dolibarr wijzigen om dit te voorkomen. Echter, kunnen er problemen met andere servers dat opzicht strikt de SMTP-standaard. De andere oplossing (aanbevolen) is het gebruik van de methode "SMTP-socket bibliotheek" dat er geen nadelen heeft.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Vertaal instellingen
     TranslationKeySearch=Zoek een vertaalsleutel of tekenreeks
     TranslationOverwriteKey=Vertaling vervangen
     TranslationDesc=De weergegeven taal voor de toepassing instellen:<br>* Voor gehele systeem: menu <strong>Startpagina - instellen - Weergeven</strong><br> * Per gebruiker: gebruik het tabblad <strong>Weergave gebruiker instellen</strong>op gebruikerskaart ( klik op gebruikersnaam bovenaan het scherm).
     TranslationOverwriteDesc=U kunt ook de teksten aanpassen door de volgende tabel in te vullen. Kies uw taal uit keuzelijst "%s", plaats de tekenreeks van de vertaling in "%s" en uw nieuwe vertaling in "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Vertaal regel
     CurrentTranslationString=Huidige vertaling
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=Weergeven nieuwe vertaal string
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Geactiveerde applicaties/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Je moet minstens 1 module aktiveren
    -ClassNotFoundIntoPathWarning=Classe %s niet gevonden in PHP pad
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Ja in de zomer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Let op, alleen de volgende modules worden geopend voor externe gebruikers (ongeacht hun rechten) en alleen als machtigingen zijn verleend:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Sessie opslag geencrypteerd door Suhosin
     ConditionIsCurrently=Voorwaarde is momenteel %s
    -YouUseBestDriver=U gebruikt driver %s die momenteel meest geschikt is.
    -YouDoNotUseBestDriver=U gebruikt driver %s, maar driver %s is aangeraden
    -NbOfProductIsLowerThanNoPb=U hebt enkel %s producten/diensten in de database. Er is geen optimalisatie nodig.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Zoekmachine optimalisatie
    -YouHaveXProductUseSearchOptim=U hebt %s producten in de database. U kan best de constante PRODUCT_DONOTSEARCH_ANYWHERE op 1 zetten in Home-instellingen-andere, u beperkt het zoeken tot begin van strings, waardoor de database een index kan gebruiken en een onmiddelijk resultaat geeft.
    -BrowserIsOK=U gebruikt de webbrowser %s. Deze browser is in orde voor beveiliging en prestaties.
    -BrowserIsKO=U gebruikt de webbrowser %s. Deze browser is een slechte keuze voor veiligheid, prestaties en betrouwbaarheid. Wij raden u aan Firefox, Chrome, Opera of Safari gebruiken.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=Xdebug is geladen.
     XCacheInstalled=Xcache is geladen.
    -AddRefInList=Weergave klant / leverancier ref in lijst (lijst of combobox) en de meeste van hyperlink. Relaties verschijnen met de naam "CC12345 - SC45678 - Het groot bedrijf coorp", in plaats van "Het groot bedrijf coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Wijziging van het veld %s
     FillThisOnlyIfRequired=Voorbeeld: +2 (alleen invullen als tijdzone offset problemen worden ervaren)
     GetBarCode=Haal barcode
     ##### Module password generation
     PasswordGenerationStandard=Geeft een wachtwoord terug dat gegenereerd is volgens het interne Dolibarr algoritme: 8 karakters met gedeelde nummers en tekens in kleine letters.
    -PasswordGenerationNone=Stel geen automatisch gegenereerd wachtwoord voor. Wachtwoord moet manueel ingetoetst worden.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=Volgens uw configuratie
     PasswordPatternDesc=Omschrijving wachtwoord patroon
    @@ -1195,23 +1205,23 @@ UserMailRequired=E-mail verplicht om een nieuwe gebruiker creëren
     HRMSetup=Instellingen HRM module
     ##### Company setup #####
     CompanySetup=Derde partijenmoduleinstellingen
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=E-mailmeldingen stelt u in staat om automatische e-mail te verzenden voor sommige Dolibarr onderdelen. Doelen van meldingen kunnen worden gedefinieerd:
     NotificationsDescUser=*per gebruiker, één tegelijk.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documentensjablonen
    -DocumentModelOdt=Genereer documenten uit OpenDocuments sjablonen (. ODT of. ODS-bestanden voor OpenOffice, KOffice, TextEdit, ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermerk op conceptdocumenten
     JSOnPaimentBill=Activeert functie om de betalingslijnen op betalingsformulieren automatisch aan te vullen
    -CompanyIdProfChecker=Professionele Id unieke
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Moet het uniek zijn?
    -MustBeMandatory=Verplichting voor aanmaken derde partij?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Verplichting om facturen te valideren?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Een exportlink naar het <b>%s</b> formaat is beschikbaar onder de volgende link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Een exportlink naar het <b>%s</b> formaat is beschikbaar
     BillsSetup=Facturenmodule instellen
     BillsNumberingModule=Nummeringsmodule voor facturen en creditnota's
     BillsPDFModules=Factuur documentsjablonen
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Modellen betaal documenten
     CreditNote=Creditnota
     CreditNotes=Creditnota's
    @@ -1230,7 +1241,7 @@ FreeLegalTextOnInvoices=Vrije tekst op facturen
     WatermarkOnDraftInvoices=Watermerk op ontwerp-facturen (geen indien leeg)
     PaymentsNumberingModule=Payments numbering model
     SuppliersPayment=Leveranciersbetalingen
    -SupplierPaymentSetup=Instellingen leveranciers betalingen 
    +SupplierPaymentSetup=Instellingen leveranciers betalingen
     ##### Proposals #####
     PropalSetup=Offertemoduleinstellingen
     ProposalsNumberingModules=Offertenummeringmodules
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Beheren van een login voor elk lid
     AdherentMailRequired=E-mail is vereist om een nieuw lid te creeren
     MemberSendInformationByMailByDefault=Vinkvakje om een bevestigingse-mail te sturen naar leden (validatie van nieuwe abonnementen). Staat standaard aan.
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP-instellingen
     LDAPGlobalParameters=Globale instellingen
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test type lid synchronisatie
     LDAPTestSearch= Test een LDAP-zoekopdracht
     LDAPSynchroOK=Synchronisatietest succesvol
     LDAPSynchroKO=Synchronisatietest mislukt
    -LDAPSynchroKOMayBePermissions=Synchronisatie test mislukt. Controleer of de verbinding met de server correct is ingesteld en LDAP udpates toestaat.
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP verbinding met de LDAP-server succesvol (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP verbinding met de LDAP-server mislukt (Server=%s, Port=%s)
    -LDAPBindOK=Verbinden en autorisatie met LDAP server geslaagd (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Verbinden en autoriseren met LDAP server mislukt (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP-server ingesteld voor versie 3
     LDAPSetupForVersion2=LDAP-server ingesteld voor versie 2
     LDAPDolibarrMapping=Dolibarr-mapping (in kaart brengen)
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Gebruikersnaam (samba, activedirectory)
     LDAPFieldLoginSambaExample=Voorbeeld: sAMAccountName
     LDAPFieldFullname=Voornaam Achternaam
     LDAPFieldFullnameExample=Voorbeeld: cn
    -LDAPFieldPasswordNotCrypted=Wachtwoord niet versleuteld
    -LDAPFieldPasswordCrypted=Wachtwoord versleuteld
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Voorbeeld: userPassword
     LDAPFieldCommonNameExample=Voorbeeld: cn
     LDAPFieldName=Naam
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=Op deze pagina kunt u de LDAP kenmerknaam in de LDAP struct
     LDAPDescValues=Voorbeeldwaarden zijn ingesteld voor <b>OpenLDAP</b> geladen met de volgende schema's: TODO {VAR INSTELLEN?)<b>core.schema, cosine.schema, inetorgperson.schema</b>). Als udie waarden gebruikt en OpenLDAP, wijzigen dan uw LDAP 'config'-bestand <b>slapd.conf</b> om alle die schema's te laden.
     ForANonAnonymousAccess=Voor een geautoriseerde verbinding (bijvoorbeeld om over schrijfrechten te beschikken)
     PerfDolibarr=Prestaties setup / optimaliseren rapport
    -YouMayFindPerfAdviceHere=U vindt op deze pagina een aantal controles of adviezen met betrekking tot de prestaties.
    -NotInstalled=Niet geïnstalleerd, zodat uw server niet vertraagt
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicatieve cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    -HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
    +HTTPCacheStaticResources=HTTP-cache voor statische bronnen (css, img, javascript)
     FilesOfTypeCached=Bestandtype %s wordt gecached door de HTTP server
     FilesOfTypeNotCached=Bestanden van het type %s, worden niet bewaard door de HTTP server
     FilesOfTypeCompressed=Bestanden van het type %s , worden gecomprimeerd door de HTTP server
     FilesOfTypeNotCompressed=Bestanden van het type %s , worden niet gecomprimeerd door de HTTP server
     CacheByServer=Cache via server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache via browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Automatische detectie niet mogelijk
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Standaardwaarden (voor nieuwe formulieren)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Standaard zoekfilters
     DefaultSortOrder=Standaard order-sortering
     DefaultFocus=Standaard velden voor focus
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Productenmoduleinstellingen
     ServiceSetup=Services module setup
     ProductServiceSetup=Producten en Diensten modules setup
     NumberOfProductShowInSelect=Maximaal aantal producten in 'combo-lijsten' (0 = onbeperkt)
    -ViewProductDescInFormAbility=Visualisatie van de productomschrijvingen in de formulieren (anders getoond als popup-tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualisatie van productomschrijvingen in andere taal
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Systeem begint te zoeken uit de combolijst op het moment dat u een toets indrukt (dit kan de prestaties aanzienlijk verhogen bij het zoeken in een groot aantal artikelen, maar als minder gebruiksvriendelijk worden ervaren)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Standaard streepjescodetype voor produkten
     SetDefaultBarcodeTypeThirdParties=Standaard streepjescodetype voor derde partijen
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1459,8 +1472,8 @@ YouCanUseDOL_DATA_ROOT=U kunt DOL_DATA_ROOT/dolibarr.log gebruiken voor een logb
     ErrorUnknownSyslogConstant=Constante %s is geen bekende 'syslog' constante
     OnlyWindowsLOG_USER=Windows only supports LOG_USER
     CompressSyslogs=Compression and backup of debug log files (generated by module Log for debug)
    -SyslogFileNumberOfSaves=Log backups
    -ConfigureCleaningCronjobToSetFrequencyOfSaves=Configure cleaning scheduled job to set log backup frequency
    +SyslogFileNumberOfSaves=Log back-ups
    +ConfigureCleaningCronjobToSetFrequencyOfSaves=Configureer de geplande taak opschonen om de frequentie van de logboekback-up in te stellen
     ##### Donations #####
     DonationsSetup=Donatiemoduleinstellingen
     DonationsReceiptModel=Sjabloon van donatie-ontvangst
    @@ -1477,8 +1490,8 @@ BarcodeDescUPC=Streepjescodetype UPC
     BarcodeDescISBN=Streepjescodetype ISBN
     BarcodeDescC39=Streepjescodetype C39
     BarcodeDescC128=Streepjescodetype C128
    -BarcodeDescDATAMATRIX=Barcode of type Datamatrix
    -BarcodeDescQRCODE=Barcode of type QR code
    +BarcodeDescDATAMATRIX=Streepjescode van het type Datamatrix
    +BarcodeDescQRCODE=Streepjescode van type QR-code
     GenbarcodeLocation=Opdrachtregelprogramma voor streepjescodegeneratie (gebruikt door interne generator voor sommige barcode types). Moet compatible zijn met "genbarcode". <br>vb: /usr/local/bin/genbarcode
     BarcodeInternalEngine=Internal engine
     BarCodeNumberManager=Beheerder om automatisch barcode nummers te bepalen.
    @@ -1493,7 +1506,7 @@ RSSUrlExample=Een interessante RSS-feed
     MailingSetup=EMailingmoduleinstellingen
     MailingEMailFrom=E-mailafzender (Van) voor e-mails die verstuurd worden door de EMailingmodule
     MailingEMailError=Retoure-mailadres (Errors-to) voor e-mails met fouten
    -MailingDelay=Seconds to wait after sending next message
    +MailingDelay=Seconden te wachten na het verzenden van het volgende bericht
     ##### Notification #####
     NotificationSetup=Moduleinstellingen voor kennisgeving door e-mail
     NotificationEMailFrom=E-mailafzender (van) voor e-mails die verstuurd worden voor kennisgevingen
    @@ -1503,7 +1516,7 @@ SendingsSetup=Verzendingsmoduleinstellingen
     SendingsReceiptModel=Verzendontvangstsjabloon
     SendingsNumberingModules=Verzendingen nummering modules
     SendingsAbility=Ondersteun verzendingsbrieven voor afnemersleveringen
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Vrije tekst op verzendingen
     ##### Deliveries #####
     DeliveryOrderNumberingModules=ontvangstbevestigingennummeringsmodule
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Geavanceerde editor
     ActivateFCKeditor=Activeer FCKeditor voor:
     FCKeditorForCompany=WYSIWIG creatie / bewerking van bedrijfsomschrijving en notities
     FCKeditorForProduct=WYSIWIG creatie / bewerking van product- / dienstomschrijving en notities
    -FCKeditorForProductDetails=WYSIWIG creatie / bewerking van produktdetailregels voor alle entiteiten (Offertes, opdrachten, facturen, etc)<br><font class="warning">Waarschuwing: Gebruik van deze optie, voor dit doeleinde, wordt sterk afgeraden, omdat het problemen kan geven met speciale karakters en de paginaopmaak wanneer er PDF bestanden worden gegenereerd van deze gegevens.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creatie / bewerking van mailings
     FCKeditorForUserSignature=WYSIWIG creatie /aanpassing van ondertekening
     FCKeditorForMail=WYSIWIG creatie / bewerking voor alle e-mail (behalve Gereedschap-> E-mailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Verbinding geslaagd, maar de database lijkt geen OSCommerce database te zijn (Sleutel %s niet gevonden in tabel %s).
    -OSCommerceTestOk=Verbinding met de server '%s' en database '%s' met gebruiker '%s' succesvol.
    -OSCommerceTestKo1=Verbinding met de server '%s' gelukt maar de database '%s' kon niet worden bereikt.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Verbinding met server '%s' op de database '%s' met gebruiker '%s' succesvol.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Verbinding met server '%s' met gebruiker '%s' mislukt.
     ##### Stock #####
    -StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=Als u de verkooppunt module (de standaard POS module of een andere externe module) gebruikt, kan deze setup worden genegeerd door uw verkooppunt  module. De meeste verkooppunt modules zijn ontworpen om onmiddellijk een factuur te creëren en het standaard verlagen van voorraad. Dus, als je ja of nee een voorraad daling nodig hebt om bij het registreren van een verkoop op uw verkooppunt, controleer ook uw POS-module instellingen.
    +StockSetup=Voorraad-module instellen
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu verwijderd
     Menus=Menu's
    @@ -1548,7 +1561,7 @@ DetailRight=Voorwaarde om onbevoegde grijze menu's weer te geven
     DetailLangs=.lang bestandsnaam voor labelcodevertaling
     DetailUser=Intern / Extern / Alle
     Target=Doel
    -DetailTarget=Doel van links (_blank opent een nieuw venster)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Niveau (-1: menu bovenaan, 0: header menu, >0 menu en submenu)
     ModifMenu=Menu-item wijzigen
     DeleteMenu=Menu-item verwijderen
    @@ -1561,9 +1574,9 @@ OptionVATDefault=Standaard basis
     OptionVATDebitOption=Transactiebasis
     OptionVatDefaultDesc=BTW is verplicht:<br>- op levering / betalingen van goederen (wij gebruiken de factuurdatum)<br>- op betalingen van diensten
     OptionVatDebitOptionDesc=BTW is verplicht:<br>- op levering / betalingen van goederen<br>- op factuur (debet) voor diensten
    -OptionPaymentForProductAndServices=Cash basis for products and services
    +OptionPaymentForProductAndServices=Kasbasis voor producten en diensten
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Tijd van BTW opeisbaarheid standaard volgens gekozen optie:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Bij levering
     OnPayment=Bij betaling
     OnInvoice=Op factuur
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Boekhoudkundige leverancierscode
     AgendaSetup=Acties- en agendamoduleinstellingen
     PasswordTogetVCalExport=autorisatiecode van de exportlink
     PastDelayVCalExport=Exporteer geen gebeurtenissen ouder dan
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Stel automatisch dit soort evenementen in zoekfilter van agendaweergave
    -AGENDA_DEFAULT_FILTER_STATUS=Stel automatisch deze status voor evenementen in zoekfilter van agendaweergave
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Welk tabblad wilt u standaard openen bij het selecteren van menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    -AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
    -AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER_SOUND=Schakel geluidsmelding in
    +AGENDA_SHOW_LINKED_OBJECT=Gekoppeld object weergeven in agendaweergave
     ##### Clicktodial #####
     ClickToDialSetup='Click-To-Dial' moduleinstellingen
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Gebruik alleen de link "tel:" bij telefoonnummers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Verkooppunten
     CashDeskSetup=Verkooppuntenmoduleinstellingen
    -CashDeskThirdPartyForSell=Algemene Klant te gebruiken bij verkopen
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Te gebruiken rekening voor ontvangst van contacte betalingen
     CashDeskBankAccountForCheque= Te gebruiken rekening voor ontvangst van betalingen per cheque
     CashDeskBankAccountForCB= Te gebruiken rekening voor ontvangst van betalingen per CreditCard
    -CashDeskDoNotDecreaseStock=Uitschakelen voorraad daling bij een verkoop via verkooppunt (indien "Nee", stock daling wordt gedaan voor elke verkoope gedaan via POS, wat er ook in de opties ingesteld staat in de module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Kies magazijn te gebruiken voor voorraad daling
    -StockDecreaseForPointOfSaleDisabled=Stock daling van verkooppunt uitgeschakeld
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=De stock afname van POS is niet compatibel met lot/serienummer beheer
    -CashDeskYouDidNotDisableStockDecease=Je hebt  voorraad daling bij het maken van een verkoop via verkooppunt niet uitgeschakeld. Dus een magazijn is vereist.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Weblinkmoduleinstellingen
    -BookmarkDesc=Deze module maakt het u mogelijk 'weblinks' te beheren. U kunt ook verwijzingen naar elke Dolibarr pagina of externe website in uw linker menu zetten.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximaal aantal 'weblinks' die in het linker menu getoond worden
     ##### WebServices #####
     WebServicesSetup=Webdienstenmoduleinstellingen
    @@ -1617,12 +1630,12 @@ WebServicesDesc=Door het inschakelen van deze module, word Dolibarr een webdiens
     WSDLCanBeDownloadedHere='WSDL descriptor'-bestanden van de aangeboden diensten kunnen hier gedownload worden
     EndPointIs=SOAP-clients moeten hun verzoeken verzenden naar het Dolibarr-eindpunt dat beschikbaar is op URL
     ##### API ####
    -ApiSetup=API module setup
    +ApiSetup=API-module instellen
     ApiDesc=By enabling this module, Dolibarr become a REST server to provide miscellaneous web services.
     ApiProductionMode=Enable production mode (this will activate use of a cache for services management)
    -ApiExporerIs=You can explore and test the APIs at URL
    +ApiExporerIs=U kunt de API's op URL verkennen en testen
     OnlyActiveElementsAreExposed=Only elements from enabled modules are exposed
    -ApiKey=Key for API
    +ApiKey=Sleutel voor API
     WarningAPIExplorerDisabled=The API explorer has been disabled. API explorer is not required to provide API services. It is a tool for developer to find/test REST APIs. If you need this tool, go into setup of module API REST to activate it.
     ##### Bank #####
     BankSetupModule=Bankmoduleinstellingen
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-Bedrijfmoduleinstellingen
     ##### Suppliers #####
     SuppliersSetup=Leveranciersmoduleinstellingen
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Leveranciersfacturen nummering modellen
     IfSetToYesDontForgetPermission=Indien ingesteld op ja, vergeet dan niet om machtigingen te verlenen aan groepen of gebruikers ​​voor het toestaan van de tweede goedkeuring
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Projectenmoduleinstellingen
     ProjectsModelModule=Projectenrapportagedocumentsjabloon
     TasksNumberingModules=Taken nummering module
     TaskModelModule=Taken rapporten documentmodel
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Boekingsperioden
    @@ -1679,90 +1692,91 @@ TypePaymentDesc=0:Customer payment type, 1:Vendor payment type, 2:Both customers
     IncludePath=Include path (gedefinieerd in de variabele %s)
     ExpenseReportsSetup=Setup van module onkostennota's
     TemplatePDFExpenseReports=Document sjablonen om onkostennota's document te genereren
    -ExpenseReportsIkSetup=Setup of module Expense Reports - Milles index
    +ExpenseReportsIkSetup=Setup van module onkostendeclaraties - Milles index
     ExpenseReportsRulesSetup=Opzetten van module onkostendeclaraties - regels
    -ExpenseReportNumberingModules=Expense reports numbering module
    +ExpenseReportNumberingModules=Onkostenrapportage nummeringsmodule
     NoModueToManageStockIncrease=Geen module in staat om automatische voorraad toename beheren is geactiveerd. Stock verhoging zal worden gedaan via handmatige invoer.
     YouMayFindNotificationsFeaturesIntoModuleNotification=U kunt opties voor e-mailberichten door het inschakelen en configureren van de module "Meldingen " te vinden.
     ListOfNotificationsPerUser=Lijst van meldingen per gebruiker*
    -ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
    +ListOfNotificationsPerUserOrContact=Lijst met meldingen per gebruiker * of per contact **
     ListOfFixedNotifications=Lijst met vaste meldingen
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Drempel
     BackupDumpWizard=Wizard om database backup dump bestand op te bouwen
     SomethingMakeInstallFromWebNotPossible=Installatie van externe module is niet mogelijk via de webinterface om de volgende reden:
     SomethingMakeInstallFromWebNotPossible2=Om deze reden, is het upgrade process hier beschreven alleen in handmatige stappen door een bevoorrechte gebruiker te doen.
     InstallModuleFromWebHasBeenDisabledByFile=Installeren van externe module van toepassing is uitgeschakeld door uw beheerder. Je moet hem vragen om het bestand <strong>%s</strong>  te verwijderen om deze functie mogelijk te maken.
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
    -HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
    -HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    -TextTitleColor=Text color of Page title
    +HighlightLinesOnMouseHover=Markeer tabellijnen wanneer u er met de muis overheen gaat
    +HighlightLinesColor=Markeer de kleur van de lijn wanneer u er met de muis overheengaat (blijf anders leeg)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
    +TextTitleColor=Tekstkleur van paginatitel
     LinkColor=Link-kleur
    -PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    -NotSupportedByAllThemes=Will works with core themes, may not be supported by external themes
    -BackgroundColor=Background color
    -TopMenuBackgroundColor=Background color for Top menu
    +PressF5AfterChangingThis=Druk op CTRL + F5 op het toetsenbord of wis de cache van uw browser nadat u deze waarde hebt gewijzigd om deze effectief te maken
    +NotSupportedByAllThemes=Werkt met kernthema's, mogelijk niet ondersteund door externe thema's
    +BackgroundColor=Achtergrond kleur
    +TopMenuBackgroundColor=Achtergrondkleur voor hoofdmenu
     TopMenuDisableImages=Verberg afbeeldingen in Top menu
    -LeftMenuBackgroundColor=Background color for Left menu
    -BackgroundTableTitleColor=Background color for Table title line
    -BackgroundTableTitleTextColor=Text color for Table title line
    -BackgroundTableLineOddColor=Background color for odd table lines
    -BackgroundTableLineEvenColor=Background color for even table lines
    -MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
    -NbAddedAutomatically=Number of days added to counters of users (automatically) each month
    +LeftMenuBackgroundColor=Achtergrondkleur voor linkermenu
    +BackgroundTableTitleColor=Achtergrondkleur voor tabeltitelregel
    +BackgroundTableTitleTextColor=Tekstkleur voor tabeltitelregel
    +BackgroundTableLineOddColor=Achtergrondkleur voor oneven tabellijnen
    +BackgroundTableLineEvenColor=Achtergrondkleur voor gelijkmatige tabellijnen
    +MinimumNoticePeriod=Minimale opzegtermijn (uw verlofaanvraag moet vóór deze vertraging worden gedaan)
    +NbAddedAutomatically=Aantal dagen toegevoegd aan tellers van gebruikers (automatisch) elke maand
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    -ColorFormat=The RGB color is in HEX format, eg: FF0000
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +ColorFormat=De RGB-kleur heeft het HEX-formaat, bijvoorbeeld: FF0000
     PositionIntoComboList=Positie van regel in combolijst
     SellTaxRate=BTW tarief
    -RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
    +RecuperableOnly=Ja voor BTW  "Niet waargemaakt maar herstelbaar", bestemd voor een deelstaat in Frankrijk. Houd in alle andere gevallen de waarde "Nee" aan.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    -TemplateForElement=This template record is dedicated to which element
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +TemplateForElement=Deze sjabloonrecord is gewijd aan welk element
     TypeOfTemplate=Template soort
    -TemplateIsVisibleByOwnerOnly=Template alleen zichtbaar voor eigenaar
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Overal zichtbaar
    -VisibleNowhere=Visible nowhere
    +VisibleNowhere=Nergens zichtbaar
     FixTZ=TimeZone fix
     FillFixTZOnlyIfRequired=Voorbeeld: +2 (alleen invullen bij problemen)
     ExpectedChecksum=Verwachte checksum
     CurrentChecksum=Huidige controlesom
    -ForcedConstants=Required constant values
    +ForcedConstants=Vereiste constante waarden
     MailToSendProposal=Klantenoffertes
     MailToSendOrder=Klantenbestelling
     MailToSendInvoice=Klantenfactuur
     MailToSendShipment=Verzendingen
     MailToSendIntervention=Interventies
    -MailToSendSupplierRequestForQuotation=Quotation request
    -MailToSendSupplierOrder=Purchase orders
    -MailToSendSupplierInvoice=Vendor invoices
    +MailToSendSupplierRequestForQuotation=Offerte aanvraag
    +MailToSendSupplierOrder=Inkooporders
    +MailToSendSupplierInvoice=Facturen van leveranciers
     MailToSendContract=Contracten
     MailToThirdparty=Klant
     MailToMember=Leden
     MailToUser=Gebruikers
    -MailToProject=Projects page
    +MailToProject=Projecten pagina
     ByDefaultInList=Standaard weergeven in de lijstweergave
     YouUseLastStableVersion=U gebruikt de nieuwste stabiele versie
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Sjablonen voor productdocumenten
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    -SeeSubstitutionVars=See * note for list of possible substitution variables
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
    +SeeSubstitutionVars=Zie * opmerking voor een lijst met mogelijke substitutievariabelen
     SeeChangeLog=Zie ChangeLog bestand (alleen in het Engels)
     AllPublishers=Alle uitgevers
     UnknownPublishers=Onbekende uitgevers
     AddRemoveTabs=Verwijder of voeg tabs toe
    -AddDataTables=Add object tables
    +AddDataTables=Objecttabellen toevoegen
     AddDictionaries=Voeg woordenboeken toe
    -AddData=Add objects or dictionaries data
    -AddBoxes=Add widgets
    -AddSheduledJobs=Add scheduled jobs
    -AddHooks=Add hooks
    -AddTriggers=Add triggers
    +AddData=Objecten of woordenboekgegevens toevoegen
    +AddBoxes=Voeg widgets toe
    +AddSheduledJobs=Voeg geplande taken toe
    +AddHooks=Voeg haken toe
    +AddTriggers=Voeg triggers toe
     AddMenus=Voeg menu's toe
     AddPermissions=Voeg rechten toe
     AddExportProfiles=Voeg exporteer-profiel toe
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Voeg andere pagina's of diensten toe
     AddModels=Voeg document of genummerde templates toe
     AddSubstitutions=Voeg vervangende toetscombinaties toe
     DetectionNotPossible=Detectie is niet mogelijk
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Lijst beschikbare APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Startpagina
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    -ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=Deze gebruiker heeft geen toestemming gedefinieerd
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    -BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
    +ModuleEnabledAdminMustCheckRights=Module is geactiveerd. Machtigingen voor geactiveerde module (s) werden alleen aan beheerders gegeven. Mogelijk moet u, indien nodig, handmatig rechten verlenen aan andere gebruikers of groepen.
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
    +BaseCurrency=Referentievaluta van het bedrijf (ga naar de setup van het bedrijf om dit te wijzigen)
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Linker marge op PDF
     MAIN_PDF_MARGIN_RIGHT=Rechter marge op PDF
     MAIN_PDF_MARGIN_TOP=Bovenmarge op PDF
    -MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    -SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    -SeveralLangugeVariatFound=Several language variants found
    +MAIN_PDF_MARGIN_BOTTOM=Onder-marge op PDF
    +NothingToSetup=There is no specific setup to do for this module.
    +SetToYesIfGroupIsComputationOfOtherGroups=Stel dit in op Ja als deze groep een berekening van andere groepen is
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +SeveralLangugeVariatFound=Verschillende taalvarianten gevonden
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Verwijder speciale tekens
    -COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=AVG contactpersoon
    -GDPRContactDesc=Als u gegevens over Europese bedrijven / burgers opslaat, kunt u hier de contactpersoon opslaan welke verantwoordelijk is voor de Algemene Verordening Gegevensbescherming
    +COMPANY_AQUARIUM_CLEAN_REGEX=Regex-filter om waarde te reinigen (COMPANY_AQUARIUM_CLEAN_REGEX)
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
    -ResourceSetup=Configuration du module Resource
    -UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
    -DisabledResourceLinkUser=Disable feature to link a resource to users
    -DisabledResourceLinkContact=Disable feature to link a resource to contacts
    -ConfirmUnactivation=Confirm module reset
    +ResourceSetup=Resource Module configureren
    +UseSearchToSelectResource=Gebruik een zoekformulier om een ​​resource te kiezen (in plaats van een vervolgkeuzelijst).
    +DisabledResourceLinkUser=Schakel functie uit om een ​​bron te koppelen aan gebruikers
    +DisabledResourceLinkContact=Schakel functie uit om een ​​bron te koppelen aan contacten
    +ConfirmUnactivation=Bevestig de module-reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/nl_NL/agenda.lang b/htdocs/langs/nl_NL/agenda.lang
    index d7dc3c5e1cb..9d39904b900 100644
    --- a/htdocs/langs/nl_NL/agenda.lang
    +++ b/htdocs/langs/nl_NL/agenda.lang
    @@ -31,14 +31,15 @@ ViewWeek=Weekweergave
     ViewPerUser=Per gebruiker weergave
     ViewPerType=Weergave per type
     AutoActions= Automatisch invullen van de agenda
    -AgendaAutoActionDesc= Definieer hier een gebeurtenis waar Dolibarr deze automatisch in de agenda plaatst. Als niets is aangevinkt worden alleen handmatige acties zichtbaar in de agenda. Automatisch volgen van acties gedaan op objecten (zoals valideren, status wijzigingen) worden niet opgeslagen.
    -AgendaSetupOtherDesc= Op deze pagina kunt u andere instellingen van de agendamodule instellen.
    +AgendaAutoActionDesc= Hier kunt u gebeurtenissen definiëren die Dolibarr automatisch in Agenda moet maken. Als niets wordt gecontroleerd, worden alleen handmatige acties opgenomen in logboeken en weergegeven in Agenda. Automatisch bijgehouden zakelijke acties die worden uitgevoerd op objecten (validatie, statuswijziging), worden niet opgeslagen.
    +AgendaSetupOtherDesc= Deze pagina biedt opties om export van uw Dolibarr-evenementen naar een externe agenda (thunderbird, google calendar, ...) mogelijk te maken
     AgendaExtSitesDesc=Op deze pagina kunt configureren externe agenda.
     ActionsEvents=Gebeurtenissen waarvoor Dolibarr automatisch een item zal maken in de agenda
    -EventRemindersByEmailNotEnabled=Herinneringen via e-mail van agenda afspraken is niet aangezet in de module set-up van het Agenda onderdeel.
    +EventRemindersByEmailNotEnabled=Gebeurtenisherinneringen per e-mail zijn niet ingeschakeld in %s-module setup.
     ##### Agenda event labels #####
    -NewCompanyToDolibarr=Derde partij %s aangemaakt
    +NewCompanyToDolibarr=Relatie %s aangemaakt
     ContractValidatedInDolibarr=Contract %s gevalideerd
    +CONTRACT_DELETEInDolibarr=Contract %s verwijderd
     PropalClosedSignedInDolibarr=Voorstel %s getekend
     PropalClosedRefusedInDolibarr=Voorstel %s afgewezen
     PropalValidatedInDolibarr=Voorstel %s gevalideerd
    @@ -53,9 +54,9 @@ MemberValidatedInDolibarr=Lid %s gevalideerd
     MemberModifiedInDolibarr=Lid %s gewijzigd
     MemberResiliatedInDolibarr=Lidmaatschap %s beëindigd
     MemberDeletedInDolibarr=Lid %s verwijderd
    -MemberSubscriptionAddedInDolibarr=Subscription %s for member %s added
    -MemberSubscriptionModifiedInDolibarr=Subscription %s for member %s modified
    -MemberSubscriptionDeletedInDolibarr=Subscription %s for member %s deleted
    +MemberSubscriptionAddedInDolibarr=Abonnement %s voor lid %s toegevoegd
    +MemberSubscriptionModifiedInDolibarr=Abonnement %s voor lid %s gewijzigd
    +MemberSubscriptionDeletedInDolibarr=Abonnement %s voor lid %s verwijderd
     ShipmentValidatedInDolibarr=Verzending %s gevalideerd
     ShipmentClassifyClosedInDolibarr=Verzending %s geclassificeerd als gefactureerd
     ShipmentUnClassifyCloseddInDolibarr=Verzending %s geclassificeerd als heropend
    @@ -97,10 +98,10 @@ DateActionStart=Startdatum
     DateActionEnd=Einddatum
     AgendaUrlOptions1=U kunt ook de volgende parameters gebruiken om te filteren:
     AgendaUrlOptions3=<b>login=%s</b> om uitvoer van acties gedaan door gebruiker <b>%s</b> te beperken.
    -AgendaUrlOptionsNotAdmin=<b>logina=!%s</b> to restrict output to actions not owned by user <b>%s</b>.
    -AgendaUrlOptions4=<b>logint=%s</b> to restrict output to actions assigned to user <b>%s</b> (owner and others).
    -AgendaUrlOptionsProject=<b>project=__PROJECT_ID__</b> to restrict output to actions linked to project <b>__PROJECT_ID__</b>.
    -AgendaUrlOptionsNotAutoEvent=<b>notactiontype=systemauto</b> to exclude automatic event.
    +AgendaUrlOptionsNotAdmin=<b>login=%s</b> om uitvoer van acties die niet zijn toegewezen aan gebruiker <b>%s</b> te beperken.
    +AgendaUrlOptions4=<b> logint = %s </b>om de uitvoer te beperken tot acties die zijn toegewezen aan gebruiker <b> %s </b>(eigenaar en anderen).
    +AgendaUrlOptionsProject=<b>project=PROJECT_ID</b> om uitvoer van acties gekoppeld aan project<b>PROJECT_ID</b> te beperken.
    +AgendaUrlOptionsNotAutoEvent=<b>notactiontype=systemauto</b> om automatische gebeurtenissen uit te sluiten.
     AgendaShowBirthdayEvents=Verjaardagen van contacten weergeven
     AgendaHideBirthdayEvents=Verjaardagen van contacten verbergen
     Busy=Bezig
    @@ -110,9 +111,9 @@ DefaultWorkingHours=Default werkuren in dag (Voorbeeld: 9-18)
     # External Sites ical
     ExportCal=Export kalender
     ExtSites=Externe agenda
    -ExtSitesEnableThisTool=Toon externe kalenders (gedefinieerd in de globale setup) in de agenda. Heeft geen invloed op de externe agenda's gedefinieerd door gebruikers.
    +ExtSitesEnableThisTool=Toon externe agenda's (gedefinieerd in algemene setup) in Agenda. Heeft geen invloed op externe agenda's die door gebruikers zijn gedefinieerd.
     ExtSitesNbOfAgenda=Aantal kalenders
    -AgendaExtNb=Calendar no. %s
    +AgendaExtNb=Kalender nr. %s
     ExtSiteUrlAgenda=URL aan. Ical bestand te openen
     ExtSiteNoLabel=Geen omschrijving
     VisibleTimeRange=Zichtbare werktijd
    diff --git a/htdocs/langs/nl_NL/banks.lang b/htdocs/langs/nl_NL/banks.lang
    index 1b0ba8e8be4..63f8bea5ec0 100644
    --- a/htdocs/langs/nl_NL/banks.lang
    +++ b/htdocs/langs/nl_NL/banks.lang
    @@ -7,7 +7,7 @@ BankName=Banknaam
     FinancialAccount=Rekening
     BankAccount=Bankrekening
     BankAccounts=Bankrekeningen
    -BankAccountsAndGateways=Bank accounts | Gateways
    +BankAccountsAndGateways=Bank | Gateways
     ShowAccount=Toon rekening
     AccountRef=Financiële rekening referentie
     AccountLabel=Financiële rekening label
    @@ -46,7 +46,7 @@ BankAccountDomiciliation=Adres rekeninghouder
     BankAccountCountry=Land van rekening
     BankAccountOwner=Naam rekeninghouder
     BankAccountOwnerAddress=Adres rekeninghouder
    -RIBControlError=Integriteitscontrole mislukt. Dit betekend dat de informatie van deze bankrekening onvolledig of onjuist is (controleer het land, de nummers en de IBAN code).
    +RIBControlError=Integrity check of values fails. This means the information for this account number is incomplete or incorrect (check country, numbers and IBAN).
     CreateAccount=Creëer rekening
     NewBankAccount=Nieuwe rekening
     NewFinancialAccount=Nieuwe financiële rekening
    @@ -76,6 +76,7 @@ TransactionsToConciliate=Items af te stemmen
     Conciliable=Kunnen worden afgestemd
     Conciliate=Afstemmen
     Conciliation=Afstemming
    +SaveStatementOnly=Save statement only
     ReconciliationLate=Reconciliation late
     IncludeClosedAccount=Inclusief opgeheven rekeningen
     OnlyOpenedAccount=Alleen open accounts
    @@ -103,8 +104,8 @@ WithdrawalPayment=Intrekking betaling
     SocialContributionPayment=Sociale/fiscale belastingbetaling
     BankTransfer=Bankoverboeking
     BankTransfers=Bankoverboeking
    -MenuBankInternalTransfer=Internal transfer
    -TransferDesc=Transfer from one account to another one, Dolibarr will write two record (a debit in source account and a credit in target account. The same amount (except sign), label and date will be used for this transaction)
    +MenuBankInternalTransfer=Interne overboeking
    +TransferDesc=Transfer from one account to another one, Dolibarr will write two records (a debit in source account and a credit in target account). The same amount (except sign), label and date will be used for this transaction)
     TransferFrom=Van
     TransferTo=Aan
     TransferFromToDone=Een overboeking van <b>%s</b> naar <b>%s</b> van <b>%s</b> is geregistreerd.
    @@ -116,7 +117,7 @@ ConfirmDeleteCheckReceipt=Weet u zeker dat u deze betaling via cheque wilt verwi
     BankChecks=Bankcheque
     BankChecksToReceipt=Cheques in afwachting van storting
     ShowCheckReceipt=Toon controleren stortingsbewijs
    -NumberOfCheques=Aantal cheques
    +NumberOfCheques=No. of check
     DeleteTransaction=Ingave verwijderen
     ConfirmDeleteTransaction=Weet u zeker dat u deze boeking wilt verwijderen?
     ThisWillAlsoDeleteBankRecord=Hiermee wordt ook de boeking in de bank verwijderd
    @@ -135,8 +136,8 @@ BankTransactionLine=Bankmutatie
     AllAccounts=All bank and cash accounts
     BackToAccount=Terug naar rekening
     ShowAllAccounts=Toon alle rekeningen
    -FutureTransaction=Overboeking in de toekomst. Geen manier mogelijk om af te stemmen
    -SelectChequeTransactionAndGenerate=Select / filter controleert op te nemen in het controleren stortingsbewijs en op &quot;Create&quot; klikken.
    +FutureTransaction=Transaction in future. No way to reconcile.
    +SelectChequeTransactionAndGenerate=Select/filter checks to include in the check deposit receipt and click on "Create".
     InputReceiptNumber=Kies het bankafschrift in verband met de bemiddeling. Gebruik een sorteerbaar numerieke waarde: YYYYMM of YYYYMMDD
     EventualyAddCategory=Tenslotte een categorie opgeven waarin de gegevens bewaard kunnen worden
     ToConciliate=Afstemmen?
    @@ -146,20 +147,20 @@ AllRIB=Alle BAN
     LabelRIB=BAN label
     NoBANRecord=Geen BAN gegeven
     DeleteARib=Verwijderen BAN gegeven
    -ConfirmDeleteRib=Are you sure you want to delete this BAN record?
    +ConfirmDeleteRib=Weet u zeker dat u dit BAN-record wilt verwijderen?
     RejectCheck=Teruggekeerde cheque
    -ConfirmRejectCheck=Are you sure you want to mark this check as rejected?
    +ConfirmRejectCheck=Weet u zeker dat u deze controle wilt markeren als afgewezen?
     RejectCheckDate=Teruggave datum cheque
     CheckRejected=Teruggekeerde cheque
     CheckRejectedAndInvoicesReopened=Cheque teruggekeerd en facturen heropend
     BankAccountModelModule=Document templates for bank accounts
    -DocumentModelSepaMandate=Template of SEPA mandate. Usefull for european countries in EEC only.
    +DocumentModelSepaMandate=Template of SEPA mandate. Useful for European countries in EEC only.
     DocumentModelBan=Template to print a page with BAN information.
     NewVariousPayment=Nieuwe diverse betalingen
     VariousPayment=Diverse betalingen
     VariousPayments=Diverse betalingen
     ShowVariousPayment=Toon diverse betalingen
     AddVariousPayment=Voeg verschillende betalingen toe
    -SEPAMandate=SEPA mandate
    -YourSEPAMandate=Your SEPA mandate
    -FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Thanks to return it signed (scan of the signed document) or sent it by mail to
    +SEPAMandate=SEPA-mandaat
    +YourSEPAMandate=Uw SEPA-mandaat
    +FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Return it signed (scan of the signed document) or send it by mail to
    diff --git a/htdocs/langs/nl_NL/companies.lang b/htdocs/langs/nl_NL/companies.lang
    index f2c3db9a184..8727ab821bf 100644
    --- a/htdocs/langs/nl_NL/companies.lang
    +++ b/htdocs/langs/nl_NL/companies.lang
    @@ -5,14 +5,14 @@ SelectThirdParty=Selecteer een derde
     ConfirmDeleteCompany=Weet u zeker dat u dit bedrijf en alle overgenomen informatie wilt verwijderen?
     DeleteContact=Contactpersoon verwijderen
     ConfirmDeleteContact=Weet u zeker dat u deze contactpersoon en alle overgenomen informatie wilt verwijderen?
    -MenuNewThirdParty=Nieuwe Klant
    -MenuNewCustomer=Nieuwe afnemer
    -MenuNewProspect=Nieuw prospect
    +MenuNewThirdParty=Nieuwe relatie
    +MenuNewCustomer=Nieuwe klant
    +MenuNewProspect=Nieuwe prospect
     MenuNewSupplier=Nieuwe leverancier
     MenuNewPrivateIndividual=Nieuwe particulier
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewCompany=Nieuwe onderneming (prospect, klant, leverancier)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
    +CreateDolibarrThirdPartySupplier=Aanmaken relatie (leverancier)
     CreateThirdPartyOnly=Nieuwe relatie
     CreateThirdPartyAndContact=Creëer nieuwe klant + nieuw contact
     ProspectionArea=Prospectenoverzicht
    @@ -25,25 +25,25 @@ ThirdPartyContact=Contactpersoon van Klant
     Company=Bedrijf
     CompanyName=Bedrijfsnaam
     AliasNames=Alias naam (commercieel, handelsmerk, ...)
    -AliasNameShort=Alias naam
    +AliasNameShort=Alias Name
     Companies=Bedrijven
    -CountryIsInEEC=Lidstaat van de Europese Unie
    -ThirdPartyName=Naam van Klant
    -ThirdPartyEmail=Third party email
    -ThirdParty=Klant
    -ThirdParties=Klant
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Naam relatie
    +ThirdPartyEmail=E-mailadres relatie
    +ThirdParty=Relatie
    +ThirdParties=Relaties
     ThirdPartyProspects=Prospecten
     ThirdPartyProspectsStats=Prospecten
     ThirdPartyCustomers=Afnemers
     ThirdPartyCustomersStats=Klanten
     ThirdPartyCustomersWithIdProf12=Afnemers met %s of %s
    -ThirdPartySuppliers=Vendors
    -ThirdPartyType=Type Klant
    +ThirdPartySuppliers=Leveranciers
    +ThirdPartyType=Type of company
     Individual=Particulier
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Moedermaatschappij
     Subsidiaries=Dochterondernemingen
    -ReportByMonth=Report by month
    +ReportByMonth=Rapportage per maand
     ReportByCustomers=Overzicht op klant
     ReportByQuarter=Rapportage naar kwartaal
     CivilityCode=Aanspreekvorm
    @@ -52,12 +52,12 @@ Lastname=Achternaam
     Firstname=Voornaam
     PostOrFunction=Functie
     UserTitle=Titel
    -NatureOfThirdParty=Nature of Third party
    +NatureOfThirdParty=Aard van relatie
     Address=Adres
     State=Provincie
     StateShort=Provincie
     Region=Regio
    -Region-State=Region - State
    +Region-State=Regio - Staat
     Country=Land
     CountryCode=Landcode
     CountryId=Land-ID
    @@ -76,12 +76,12 @@ Town=Plaats
     Web=Internetadres
     Poste= Functie
     DefaultLang=Standaard taal
    -VATIsUsed=BTW wordt gebruikt
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +VATIsUsed=Gebruikte BTW
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=BTW wordt niet gebruikt
     CopyAddressFromSoc=Vul het adres in van een relatie
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
    +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Relatie is geen klant of leverancier. Kortingen zijn niet mogelijk.
     PaymentBankAccount=Bank voor te ontvangen betaling
     OverAllProposals=Zakelijke voorstellen / Offertes
     OverAllOrders=Orders
    @@ -99,9 +99,9 @@ LocalTax2ES=IRPF
     TypeLocaltax1ES=RE Type
     TypeLocaltax2ES=IRPF Type
     WrongCustomerCode=Ongeldige afnemerscode
    -WrongSupplierCode=Vendor code invalid
    +WrongSupplierCode=Ongeldige leveranciercode
     CustomerCodeModel=Afnemersmodel
    -SupplierCodeModel=Vendor code model
    +SupplierCodeModel=Leveranciercode model
     Gencod=Streepjescode
     ##### Professional ID #####
     ProfId1Short=Prof id 1
    @@ -200,7 +200,7 @@ ProfId3IN=Prof Id 3
     ProfId4IN=Prof Id 4
     ProfId5IN=Prof-id 5
     ProfId6IN=-
    -ProfId1LU=Id. prof. 1 (R.C.S. Luxembourg)
    +ProfId1LU=Id. prof. 1 (R.C.S. Luxemburg)
     ProfId2LU=Id. prof. 2 (Business permit)
     ProfId3LU=-
     ProfId4LU=-
    @@ -261,33 +261,33 @@ ProfId4DZ=NIS
     VATIntra=BTW-nummer
     VATIntraShort=BTW nr
     VATIntraSyntaxIsValid=Syntax is geldig
    -VATReturn=VAT return
    +VATReturn=BTW retour
     ProspectCustomer=Prospect / afnemer
     Prospect=Prospect
     CustomerCard=Afnemerskaart
     Customer=Afnemer
     CustomerRelativeDiscount=Kortingspercentage
    -SupplierRelativeDiscount=Relative vendor discount
    +SupplierRelativeDiscount=Kortingspercentage leverancier
     CustomerRelativeDiscountShort=Kortingspercentage
     CustomerAbsoluteDiscountShort=Kortingsbedrag
     CompanyHasRelativeDiscount=Voor deze afnemer geldt een kortingspercentage van <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Voor deze afnemer geldt geen kortingspercentage
    -HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
    -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +HasRelativeDiscountFromSupplier=U heeft een standaard korting van <b>%s%%</b> bij deze leverancier
    +HasNoRelativeDiscountFromSupplier=U heeft geen standaard korting bij deze leverancier
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Deze afnemer heeft nog creditnota's of eerder stortingen voor <b> %s %s</b>
    -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
    -HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    -HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for <b>%s</b> %s from this supplier
    -HasCreditNoteFromSupplier=You have credit notes for <b>%s</b> %s from this supplier
    +HasNoAbsoluteDiscountFromSupplier=Er is geen korting korting beschikbaar van deze leverancier
    +HasAbsoluteDiscountFromSupplier=Er zijn kortingen beschikbaar (credit-facturen of aanbetalingen) van <b>%s</b> %s bij deze leverancier
    +HasDownPaymentOrCommercialDiscountFromSupplier=Er zijn kortingen beschikbaar (commercieel, aanbetalingen) van <b>%s</b> %s bij deze leverancier
    +HasCreditNoteFromSupplier=Er zijn credit-facturen van <b>%s</b> %s bij deze leverancier
     CompanyHasNoAbsoluteDiscount=Voor deze afnemer is geen kortingsbedrag ingesteld
     CustomerAbsoluteDiscountAllUsers=Vastgelegde klant kortingen (toegekend door alle gebruikers)
     CustomerAbsoluteDiscountMy=Vastgelegde klant kortingen (toegekend door uzelf)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +SupplierAbsoluteDiscountAllUsers=Vastgelegde leverancier kortingen (toegekend door alle gebruikers)
    +SupplierAbsoluteDiscountMy=Vastgelegde klant kortingen (toegekend door uzelf)
     DiscountNone=Geen
    -Supplier=Leverancier
    +Supplier=Verkoper
     AddContact=Nieuwe contactpersoon
     AddContactAddress=Nieuw contact/adres
     EditContact=Bewerk contact / adres
    @@ -295,7 +295,7 @@ EditContactAddress=Wijzig contact/adres
     Contact=Contactpersoon
     ContactId=ID contactpersoon
     ContactsAddresses=Contacpersonen / adressen
    -FromContactName=Name:
    +FromContactName=Naam:
     NoContactDefinedForThirdParty=Geen contact opgegeven voor deze derde partij
     NoContactDefined=Geen contactpersoon ingesteld voor deze Klant
     DefaultContact=Standaard contactpersoon
    @@ -303,50 +303,50 @@ AddThirdParty=Nieuwe relatie
     DeleteACompany=Bedrijf verwijderen
     PersonalInformations=Persoonlijke gegevens
     AccountancyCode=Accounting account
    -CustomerCode=Afnemerscode
    -SupplierCode=Vendor code
    -CustomerCodeShort=Klantcode
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Afnemerscode, uniek voor alle afnemers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    -RequiredIfCustomer=Vereist als Klant een afnemer of prospect is
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Geldigheid gecontroleerd door module
    -ThisIsModuleRules=Dit zijn de regels voor deze module
    +CustomerCode=Klant-code
    +SupplierCode=Leverancier-code
    +CustomerCodeShort=Klantencode
    +SupplierCodeShort=Leverancier-code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
    +RequiredIfCustomer=Vereist als relatie een afnemer of prospect is
    +RequiredIfSupplier=Vereist als relatie een leverancier is
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect om contact mee op te nemen
     CompanyDeleted=Bedrijf '%s' verwijderd uit de database.
     ListOfContacts=Contactpersonen- / adressenlijst
    -ListOfContactsAddresses=Lijst van contacten/adressen
    -ListOfThirdParties=Lijst van derde partijen
    -ShowCompany=Toon relatie
    +ListOfContactsAddresses=Contactpersonen- / adressenlijst
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Toon contactpersoon
     ContactsAllShort=Alle (Geen filter)
     ContactType=Type contactpersoon
     ContactForOrders=Opdrachtencontactpersoon
    -ContactForOrdersOrShipments=Order's or shipment's contact
    +ContactForOrdersOrShipments=Contactpersoon bij order of verzending
     ContactForProposals=Offertecontactpersoon
     ContactForContracts=Contractencontactpersoon
     ContactForInvoices=Facturencontactpersoon
     NoContactForAnyOrder=Deze contactpersoon is geen contactpersoon voor enige opdracht
    -NoContactForAnyOrderOrShipments=This contact is not a contact for any order or shipment
    +NoContactForAnyOrderOrShipments=Deze contactpersoon is geen contactpersoon voor enige order of verzending.
     NoContactForAnyProposal=Deze contactpersoon is geen contactpersoon voor enige offerte
     NoContactForAnyContract=Deze contactpersoon is geen contactpersoon voor enig contract
     NoContactForAnyInvoice=Deze contactpersoon is geen contactpersoon voor enige factuur
     NewContact=Nieuwe contactpersoon
    -NewContactAddress=Nieuw contact/adres
    +NewContactAddress=New Contact/Address
     MyContacts=Mijn contacten
     Capital=Kapitaal
     CapitalOf=Kapitaal van %s
     EditCompany=Bedrijf bewerken
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Controleren
    -VATIntraCheckDesc=De link <b>%s</b> maakt het mogelijk om de Europese BTW-controledienst te raadplegen. Voor deze dienst is een externe internettoegang vanaf de webserver vereist.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Controleer de Intracommunautaire BTW op de website van de Europese Commissie
    -VATIntraManualCheck=U kunt ook handmatig controleren via de Europese website <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Controle niet mogelijk. Controleerdienst wordt niet verleend door lidstaat (%s).
    -NorProspectNorCustomer=Noch prospect, noch afnemer
    -JuridicalStatus=Juridische status
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Personeel
     ProspectLevelShort=Potentieel
     ProspectLevel=Prospectpotentieel
    @@ -387,48 +387,48 @@ ExportCardToFormat=Export details naar formaat
     ContactNotLinkedToCompany=Contact niet gekoppeld aan enige Klant
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=Geen Dolibarr toegang
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contactpersonen en eigenschappen
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bankrekeningen van relaties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Prijsniveau
     DeliveryAddress=Afleveradres
     AddAddress=Adres toevoegen
    -SupplierCategory=Vendor category
    +SupplierCategory=Categorie leverancier
     JuridicalStatus200=Onafhankelijk
     DeleteFile=Bestand verwijderen
     ConfirmDeleteFile=Weet u zeker dat u dit bestand wilt verwijderen?
     AllocateCommercial=Toegekend aan vertegenwoordiger
     Organization=Organisatie
    -FiscalYearInformation=Informatie over het fiscale jaar
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Startmaand van het fiscale jaar
    -YouMustAssignUserMailFirst=U moet eerst een e-mail voor deze gebruiker maken om e-mailmeldingen voor hem te kunnen toevoegen.
    -YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=Leverancierslijst
    -ListProspectsShort=Prospectenoverzicht
    -ListCustomersShort=Afnemersoverzicht
    -ThirdPartiesArea=Relaties en contactpersonen
    -LastModifiedThirdParties=Laatste %s gewijzigde relaties
    -UniqueThirdParties=Totaal aantal unieke derde partijen
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
    +YouMustCreateContactFirst=U moet eerst een e-mail voor deze contactpersoon aanmaken om e-mail meldingen voor deze te kunnen toevoegen.
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Gesloten
    -ThirdPartyIsClosed=Third party is closed
    +ThirdPartyIsClosed=Relatie is gesloten
     ProductsIntoElements=Lijst producten/diensten in %s
     CurrentOutstandingBill=Huidige openstaande rekening
     OutstandingBill=Max. voor openstaande rekening
    -OutstandingBillReached=Max. for outstanding bill reached
    -OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +OutstandingBillReached=Max. krediet voor openstaande facturen is bereikt
    +OrderMinAmount=Minimum orderbedrag
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Afnemers- / leverancierscode is vrij. Deze code kan te allen tijde worden gewijzigd.
     ManagingDirectors=Manager(s) Naam (CEO, directeur, voorzitter ...)
     MergeOriginThirdparty=Dupliceren third party (third party die u wilt verwijderen)
     MergeThirdparties=Samenvoegen third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    -ThirdpartiesMergeSuccess=Third parties have been merged
    -SaleRepresentativeLogin=Login of sales representative
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
    +ThirdpartiesMergeSuccess=Relaties zijn samengevoegd
    +SaleRepresentativeLogin=Login vertegenwoordiger
     SaleRepresentativeFirstname=Vertegenwoordiger voornaam
     SaleRepresentativeLastname=Vertegenwoordiger achternaam
    -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +ErrorThirdpartiesMerge=Er is een fout opgetreden bij het verwijderen van de relatie. Controleer het log. Wijzigingen zijn ongedaan gemaakt.
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/nl_NL/compta.lang b/htdocs/langs/nl_NL/compta.lang
    index 5f8ccfea251..06f6b05dc04 100644
    --- a/htdocs/langs/nl_NL/compta.lang
    +++ b/htdocs/langs/nl_NL/compta.lang
    @@ -19,13 +19,13 @@ Income=Inkomsten
     Outcome=Kosten
     MenuReportInOut=Opbrengsten / kosten
     ReportInOut=Saldo van baten en lasten
    -ReportTurnover=Turnover invoiced
    -ReportTurnoverCollected=Turnover collected
    +ReportTurnover=Omzet gefactureerd
    +ReportTurnoverCollected=Omzet verzameld
     PaymentsNotLinkedToInvoice=Betalingen niet gekoppeld aan een factuur, dus niet gekoppeld aan een derde partij
     PaymentsNotLinkedToUser=Betalingen niet gekoppeld aan een gebruiker
     Profit=Winst
     AccountingResult=Boekhoudkundig resultaat
    -BalanceBefore=Balance (before)
    +BalanceBefore=Saldo (vóór)
     Balance=Saldo
     Debit=Debet
     Credit=Credit
    @@ -35,33 +35,33 @@ AmountHTVATRealPaid=Netto betaald
     VATToPay=Belasting op verkopen
     VATReceived=Ontvangen Omzet-belasting
     VATToCollect=Belasting aankopen
    -VATSummary=Tax monthly
    +VATSummary=BTW maandelijks
     VATBalance=Saldo belasting
     VATPaid=Betaalde belasting
    -LT1Summary=Tax 2 summary
    -LT2Summary=Tax 3 summary
    +LT1Summary=Belasting 2 samenvatting
    +LT2Summary=Belasting 3 samenvatting
     LT1SummaryES=RE Balance
     LT2SummaryES=IRPF Balance
    -LT1SummaryIN=CGST Balance
    -LT2SummaryIN=SGST Balance
    -LT1Paid=Tax 2 paid
    -LT2Paid=Tax 3 paid
    +LT1SummaryIN=CGST-saldo
    +LT2SummaryIN=SGST-saldo
    +LT1Paid=Belasting 2 betaald
    +LT2Paid=Belasting 3 betaald
     LT1PaidES=RE Betaald
     LT2PaidES=IRPF Betaalde
    -LT1PaidIN=CGST Paid
    -LT2PaidIN=SGST Paid
    -LT1Customer=Tax 2 sales
    -LT1Supplier=Tax 2 purchases
    +LT1PaidIN=CGST betaald
    +LT2PaidIN=SGST betaald
    +LT1Customer=Belasting 2 verkopen
    +LT1Supplier=Belasting 2 aankopen
     LT1CustomerES=RE verkoop
     LT1SupplierES=RE aankopen
    -LT1CustomerIN=CGST sales
    -LT1SupplierIN=CGST purchases
    -LT2Customer=Tax 3 sales
    -LT2Supplier=Tax 3 purchases
    +LT1CustomerIN=CGST verkoop
    +LT1SupplierIN=CGST-aankopen
    +LT2Customer=Belasting 3 verkoop
    +LT2Supplier=Belasting 3 aankopen
     LT2CustomerES=IRPF verkoop
     LT2SupplierES=IRPF aankopen
    -LT2CustomerIN=SGST sales
    -LT2SupplierIN=SGST purchases
    +LT2CustomerIN=SGST-verkoop
    +LT2SupplierIN=SGST-aankopen
     VATCollected=Geïnde  BTW
     ToPay=Te betalen
     SpecialExpensesArea=Ruimte voor alle bijzondere betalingen
    @@ -69,25 +69,25 @@ SocialContribution=Sociale of fiscale heffingen/belasting
     SocialContributions=Sociale of fiscale heffingen/belastingen
     SocialContributionsDeductibles=Aftrekbare sociale/fiscale lasten/belastingen
     SocialContributionsNondeductibles=Niet aftrekbare sociale/fiscale lasten/belastingen
    -LabelContrib=Label contribution
    -TypeContrib=Type contribution
    +LabelContrib=Labelbijdrage
    +TypeContrib=Type bijdrage
     MenuSpecialExpenses=Speciale uitgaven
     MenuTaxAndDividends=Belastingen en dividenden
     MenuSocialContributions=Sociale/fiscale heffingen/belastingen
     MenuNewSocialContribution=Nw soc./fiscale h/b.
     NewSocialContribution=Nw soc./fiscale h/b.
    -AddSocialContribution=Add social/fiscal tax
    +AddSocialContribution=Voeg sociale/fiscale belasting toe
     ContributionsToPay=Sociale- en fiscale lasten om te betalen
    -AccountancyTreasuryArea=Billing and payment area
    +AccountancyTreasuryArea=Factuur- en betalingsgebied
     NewPayment=Nieuwe betaling
     Payments=Betalingen
     PaymentCustomerInvoice=Afnemersfactuur betaling
    -PaymentSupplierInvoice=Vendor invoice payment
    +PaymentSupplierInvoice=Leverancier factuur-betaling
     PaymentSocialContribution=Sociale/fiscale belastingbetaling
     PaymentVat=BTW betaling
     ListPayment=Betalingenlijst
     ListOfCustomerPayments=Afnemersbetalingenlijst
    -ListOfSupplierPayments=List of vendor payments
    +ListOfSupplierPayments=Lijst met leveranciersbetalingen
     DateStartPeriod=Startdatum periode
     DateEndPeriod=Einddatum periode
     newLT1Payment=New tax 2 payment
    @@ -118,9 +118,9 @@ CustomerAccountancyCodeShort=Klant account. code
     SupplierAccountancyCodeShort=Lev. account. code
     AccountNumber=Rekeningnummer
     NewAccountingAccount=Nieuwe rekening
    -Turnover=Turnover invoiced
    -TurnoverCollected=Turnover collected
    -SalesTurnoverMinimum=Minimum turnover
    +Turnover=Omzet gefactureerd
    +TurnoverCollected=Omzet verzameld
    +SalesTurnoverMinimum=Minimum omzet
     ByExpenseIncome=By expenses & incomes
     ByThirdParties=Door derde partijen
     ByUserAuthorOfInvoice=Op factuurauteur
    @@ -132,7 +132,7 @@ NewCheckDeposit=Nieuwe chequestorting
     NewCheckDepositOn=Creeer een kwitantie voor de storting op rekening: %s
     NoWaitingChecks=Geen cheques om af te storten.
     DateChequeReceived=Ontvangstdatum cheque
    -NbOfCheques=Aantal cheques
    +NbOfCheques=No. of checks
     PaySocialContribution=Betaal een sociale/fiscale vordering
     ConfirmPaySocialContribution=Are you sure you want to classify this social or fiscal tax as paid?
     DeleteSocialContribution=Verwijder een sociale/fiscale betaling
    @@ -142,7 +142,7 @@ CalcModeVATDebt=Mode <b>%sBTW op verbintenissenboekhouding %s.</b>
     CalcModeVATEngagement=Mode <b>%sBTW op de inkomens-uitgaven %s.</b>
     CalcModeDebt=Analysis of known recorded invoices even if they are not yet accounted in ledger.
     CalcModeEngagement=Analysis of known recorded payments, even if they are not yet accounted in Ledger.
    -CalcModeBookkeeping=Analyse van <b>boekingen in het grootboek</b>
    +CalcModeBookkeeping=Analysis of data journalized in Bookkeeping Ledger table.
     CalcModeLT1= <b>Modus %s RE op klant- leveranciers facturen %s</b>
     CalcModeLT1Debt=Mode <b>%sRE on customer invoices%s</b>
     CalcModeLT1Rec= Mode <b>%sRE on suppliers invoices%s</b>
    @@ -167,7 +167,7 @@ RulesAmountOnInOutBookkeepingRecord=It includes record in your Ledger with accou
     RulesResultBookkeepingPredefined=It includes record in your Ledger with accounting accounts that has the group "EXPENSE" or "INCOME"
     RulesResultBookkeepingPersonalized=It show record in your Ledger with accounting accounts <b>grouped by personalized groups</b>
     SeePageForSetup=See menu <a href="%s">%s</a> for setup
    -DepositsAreNotIncluded=- Facturen met vooruitbetaling zijn niet inbegrepen
    +DepositsAreNotIncluded=- Down payment invoices are not included
     DepositsAreIncluded=- Facturen met vooruitbetaling zijn inbegrepen
     LT1ReportByCustomers=Report tax 2 by third party
     LT2ReportByCustomers=Report tax 3 by third party
    @@ -225,18 +225,18 @@ TurnoverPerProductInCommitmentAccountingNotRelevant=The report of Turnover colle
     TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=The report of Turnover collected per sale tax rate is not available. This report is only available for turnover invoiced.
     CalculationMode=Berekeningswijze
     AccountancyJournal=Accounting code journal
    -ACCOUNTING_VAT_SOLD_ACCOUNT=Accounting account by default for VAT on sales (used if not defined on VAT dictionary setup)
    +ACCOUNTING_VAT_SOLD_ACCOUNT=Grootboekrekening BTW
     ACCOUNTING_VAT_BUY_ACCOUNT=Accounting account by default for VAT on purchases (used if not defined on VAT dictionary setup)
     ACCOUNTING_VAT_PAY_ACCOUNT=Standaard grootboekrekening BTW af te dragen
    -ACCOUNTING_ACCOUNT_CUSTOMER=Accounting account used for customer third parties
    -ACCOUNTING_ACCOUNT_CUSTOMER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accouting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated customer accouting account on third party is not defined.
    -ACCOUNTING_ACCOUNT_SUPPLIER=Accounting account used for vendor third parties
    -ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accouting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated supplier accouting account on third party is not defined.
    +ACCOUNTING_ACCOUNT_CUSTOMER=Grootboekrekening debiteuren
    +ACCOUNTING_ACCOUNT_CUSTOMER_Desc=De speciale account die is gedefinieerd op de kaart van ralatie, wordt alleen gebruikt voor de Subledger-accounting. Deze wordt gebruikt voor grootboek en als standaardwaarde voor Subledger-boekhouding als er geen specifieke klantaccount voor derden is gedefinieerd.
    +ACCOUNTING_ACCOUNT_SUPPLIER=Grootboekrekening crediteuren
    +ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated supplier accounting account on third party is not defined.
     CloneTax=Clone a social/fiscal tax
    -ConfirmCloneTax=Confirm the clone of a social/fiscal tax payment
    +ConfirmCloneTax=Confirm the clone of a social/fiscal tax
     CloneTaxForNextMonth=Kloon het voor volgende maand
     SimpleReport=Simple report
    -AddExtraReport=Extra reports (add foreign and national customer report)
    +AddExtraReport=Extra rapportages (voeg een rapport van binnen- en buitenlandse relaties toe)
     OtherCountriesCustomersReport=Foreign customers report
     BasedOnTwoFirstLettersOfVATNumberBeingDifferentFromYourCompanyCountry=Based on the two first letters of the VAT number being different from your own company's country code
     SameCountryCustomersWithVAT=National customers report
    @@ -248,12 +248,12 @@ ErrorBankAccountNotFound=Error: Bank account not found
     FiscalPeriod=Boekingsperiode
     ListSocialContributionAssociatedProject=List of social contributions associated with the project
     DeleteFromCat=Remove from accounting group
    -AccountingAffectation=Accounting assignement
    +AccountingAffectation=Accounting assignment
     LastDayTaxIsRelatedTo=Last day of period the tax is related to
     VATDue=Sale tax claimed
     ClaimedForThisPeriod=Claimed for the period
     PaidDuringThisPeriod=Paid during this period
     ByVatRate=By sale tax rate
    -TurnoverbyVatrate=Turnover invoiced by sale tax rate
    +TurnoverbyVatrate=Omzet gefactureerd op omzetbelasting-tarief
     TurnoverCollectedbyVatrate=Turnover collected by sale tax rate
     PurchasebyVatrate=Purchase by sale tax rate
    diff --git a/htdocs/langs/nl_NL/dict.lang b/htdocs/langs/nl_NL/dict.lang
    index 20238fb1493..52142faf94e 100644
    --- a/htdocs/langs/nl_NL/dict.lang
    +++ b/htdocs/langs/nl_NL/dict.lang
    @@ -116,7 +116,7 @@ CountryHM=Heard Island en McDonald
     CountryVA=Heilige Stoel (Vaticaanstad)
     CountryHN=Honduras
     CountryHK=Hong Kong
    -CountryIS=Icelande
    +CountryIS=IJsland
     CountryIN=India
     CountryID=Indonesië
     CountryIR=Iran
    @@ -131,7 +131,7 @@ CountryKI=Kiribati
     CountryKP=Noord-Korea
     CountryKR=Zuid-Korea
     CountryKW=Koeweit
    -CountryKG=Kyrghyztan
    +CountryKG=Kirgizië
     CountryLA=Laotiaans
     CountryLV=Letland
     CountryLB=Libanon
    @@ -160,7 +160,7 @@ CountryMD=Moldavië
     CountryMN=Mongolië
     CountryMS=Montserrat
     CountryMZ=Mozambique
    -CountryMM=Birmania (Myanmar)
    +CountryMM=Myanmar (Birma)
     CountryNA=Namibië
     CountryNR=Nauru
     CountryNP=Nepal
    @@ -223,7 +223,7 @@ CountryTO=Tonga
     CountryTT=Trinidad en Tobago
     CountryTR=Turkije
     CountryTM=Turkmenistan
    -CountryTC=Turken en Cailos Eilanden
    +CountryTC=Turks- en Caicoseilanden
     CountryTV=Tuvalu
     CountryUG=Oeganda
     CountryUA=Oekraïne
    @@ -295,7 +295,7 @@ CurrencyCentINR=paisa
     CurrencyCentSingINR=paise
     CurrencyThousandthSingTND=duizend
     #### Input reasons #####
    -DemandReasonTypeSRC_INTE=Internet
    +DemandReasonTypeSRC_INTE=Internetaaa
     DemandReasonTypeSRC_CAMP_MAIL=Mailing campagne
     DemandReasonTypeSRC_CAMP_EMAIL=E-mailen campagne
     DemandReasonTypeSRC_CAMP_PHO=Telefoon campagne
    @@ -328,7 +328,7 @@ PaperFormatCAP5=Grootte Canada P5
     PaperFormatCAP6=Grootte Canada P6
     #### Expense report categories ####
     ExpAutoCat=Auto
    -ExpCycloCat=Moped
    +ExpCycloCat=Bromfiets
     ExpMotoCat=Motorfiets
     ExpAuto3CV=3 CV
     ExpAuto4CV=4 CV
    @@ -341,17 +341,17 @@ ExpAuto10CV=10 CV
     ExpAuto11CV=11 CV
     ExpAuto12CV=12 CV
     ExpAuto3PCV=3 CV en meer
    -ExpAuto4PCV=4 CV and more
    -ExpAuto5PCV=5 CV and more
    -ExpAuto6PCV=6 CV and more
    -ExpAuto7PCV=7 CV and more
    -ExpAuto8PCV=8 CV and more
    +ExpAuto4PCV=4 CV en meer
    +ExpAuto5PCV=5 CV en meer
    +ExpAuto6PCV=6 CV en meer
    +ExpAuto7PCV=7 CV en meer
    +ExpAuto8PCV=8 CV en meer
     ExpAuto9PCV=9 CV en meer
    -ExpAuto10PCV=10 CV and more
    +ExpAuto10PCV=10 CV en meer
     ExpAuto11PCV=11 CV en meer
     ExpAuto12PCV=12 CV en meer
    -ExpAuto13PCV=13 CV and more
    -ExpCyclo=Capacity lower to 50cm3
    +ExpAuto13PCV=13 CV en meer
    +ExpCyclo=Capaciteit minder dan 50cm3
     ExpMoto12CV=Motorfiets 1 of 2 CV
     ExpMoto345CV=Motorfiets 3, 4 of 5 CV
    -ExpMoto5PCV=Motorbike 5 CV and more
    +ExpMoto5PCV=Motor 5 CV en meer
    diff --git a/htdocs/langs/nl_NL/ecm.lang b/htdocs/langs/nl_NL/ecm.lang
    index b2ce45ee11e..11cf18b992b 100644
    --- a/htdocs/langs/nl_NL/ecm.lang
    +++ b/htdocs/langs/nl_NL/ecm.lang
    @@ -1,5 +1,5 @@
     # Dolibarr language file - Source file is en_US - ecm
    -ECMNbOfDocs=Aantal documenten in de map
    +ECMNbOfDocs=Aantal documenten in map
     ECMSection=Bedrijvengids
     ECMSectionManual=Handmatige map
     ECMSectionAuto=Automatisch map
    @@ -14,11 +14,11 @@ ECMNbOfFilesInDir=Aantal bestanden in de map
     ECMNbOfSubDir=Aantal onderliggende mappen
     ECMNbOfFilesInSubDir=Aantal bestanden in submappen
     ECMCreationUser=Ontwerper
    -ECMArea=DMS/ECM area
    -ECMAreaDesc=The DMS/ECM (Document Management System / Electronic Content Management) area allows you to save, share and search quickly all kind of documents in Dolibarr.
    +ECMArea=DMS/ECM omgeving
    +ECMAreaDesc=In het gebied DMS / ECM (Document Management System / Electronic Content Management) kunt u alle soorten documenten in Dolibarr snel opslaan, delen en zoeken.
     ECMAreaDesc2=* Automatische mappen zijn automatisch gevuld bij het toevoegen, vanaf een kaart van een element. <br> * Handmatige mappen kunnen worden gebruikt voor het opslaan van documenten die niet gekoppeld zijn aan een bepaald element.
     ECMSectionWasRemoved=Map <b>%s</b> is verwijderd.
    -ECMSectionWasCreated=Directory <b>%s</b> has been created.
    +ECMSectionWasCreated=Directory <b>%s</b> is gemaakt.
     ECMSearchByKeywords=Zoeken op trefwoorden
     ECMSearchByEntity=Zoek op object
     ECMSectionOfDocuments=Mappen van documenten
    @@ -39,13 +39,12 @@ ShowECMSection=Toon map
     DeleteSection=Verwijder map
     ConfirmDeleteSection=Can you confirm you want to delete the directory <b>%s</b>?
     ECMDirectoryForFiles=Relatieve map voor bestanden
    -CannotRemoveDirectoryContainsFilesOrDirs=Removal not possible because it contains some files or sub-directories
    -CannotRemoveDirectoryContainsFiles=Removal not possible because it contains some files
    +CannotRemoveDirectoryContainsFilesOrDirs=Verwijderen is niet mogelijk omdat het enkele bestanden of submappen bevat
    +CannotRemoveDirectoryContainsFiles=Verwijderen is niet mogelijk omdat het enkele bestanden bevat
     ECMFileManager=Bestandsbeheer
     ECMSelectASection=Selecteer een map in de boomstructuur ...
     DirNotSynchronizedSyncFirst=This directory seems to be created or modified outside ECM module. You must click on "Resync" button first to synchronize disk and database to get content of this directory.
    -ReSyncListOfDir=Resync list of directories
    -HashOfFileContent=Hash of file content
    +ReSyncListOfDir=Hersynchroniseer de lijst met mappen
    +HashOfFileContent=Hash van bestandsinhoud
    +NoDirectoriesFound=Geen mappen gevonden
     FileNotYetIndexedInDatabase=Bestand nog niet geïndexeerd in database (probeer deze opnieuw te uploaden)
    -FileSharedViaALink=File shared via a link
    -NoDirectoriesFound=No directories found
    diff --git a/htdocs/langs/nl_NL/errors.lang b/htdocs/langs/nl_NL/errors.lang
    index 3462750b63b..afb87a728e0 100644
    --- a/htdocs/langs/nl_NL/errors.lang
    +++ b/htdocs/langs/nl_NL/errors.lang
    @@ -6,7 +6,7 @@ NoErrorCommitIsDone=Geen fout, wij bevestigen
     ErrorButCommitIsDone=Fouten gevonden maar we valideren toch
     ErrorBadEMail=Ongeldige e-mail %s
     ErrorBadUrl=Ongeldige Url %s
    -ErrorBadValueForParamNotAString=Bad value for your parameter. It appends generally when translation is missing.
    +ErrorBadValueForParamNotAString=Slechte parameterwaarde. Wordt over het algemeen gegenereerd als de vertaling ontbreekt.
     ErrorLoginAlreadyExists=Inlog %s bestaat reeds.
     ErrorGroupAlreadyExists=Groep %s bestaat reeds.
     ErrorRecordNotFound=Tabelregel niet gevonden.
    @@ -32,17 +32,17 @@ ErrorBarCodeRequired=Bar code nodig
     ErrorCustomerCodeAlreadyUsed=Afnemerscode al gebruikt
     ErrorBarCodeAlreadyUsed=Bar code al gebruikt
     ErrorPrefixRequired=Voorvoegsel vereist
    -ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
    -ErrorSupplierCodeRequired=Vendor code required
    +ErrorBadSupplierCodeSyntax=Slechte syntaxis voor leverancierscode
    +ErrorSupplierCodeRequired=Vendor code vereist
     ErrorSupplierCodeAlreadyUsed=Vendor code already used
     ErrorBadParameters=Verkeerde parameters
    -ErrorBadValueForParameter=Wrong value '%s' for parameter '%s'
    +ErrorBadValueForParameter=Verkeerde waarde '%s' voor parameter '%s'
     ErrorBadImageFormat=Image file has not a supported format (Your PHP does not support functions to convert images of this format)
     ErrorBadDateFormat=Waarde %s heeft verkeerde datum formaat
     ErrorWrongDate=Datum is niet correct!
     ErrorFailedToWriteInDir=Schrijven in de map %s mislukt
     ErrorFoundBadEmailInFile=Onjuist e-mail syntax gevonden voor %s regels in het bestand (bijvoorbeeld regel %s met email=%s)
    -ErrorUserCannotBeDelete=Gebruiker kan niet worden verwijderd. Mogelijk is het geassocieerd met andere Dolibarr-onderdelen.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Enkele verplichte velden zijn niet ingevuld.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Creëren van een map mislukt. Controleer of de Webservergebruiker toestemming heeft om te schrijven in Dolibarr documentenmap. Wanneer de parameter <b>safe_mode</b> is ingeschakeld in PHP, controleer dan dat de Dolibarr php bestanden eigendom zijn van de de webserve gebruiker (of groep).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Vul waarde in voor selectielijst
     ErrorNoValueForCheckBoxType=Vul waarde in voor checkbox lijst
     ErrorNoValueForRadioType=Vul waarde in voor knoppen lijst
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Veld <b>%s</b> mag geen speciale tekens bevat.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Geen boekhoudingsmodule geactiveerd
     ErrorExportDuplicateProfil=Deze profile naam bestaat al voor deze export set.
     ErrorLDAPSetupNotComplete=De Dolibarr-LDAP installatie is niet compleet.
     ErrorLDAPMakeManualTest=Een .ldif bestand is gegenereerd in de map %s. Probeer het handmatig te laden vanuit een opdrachtregel om meer informatie over fouten te verkrijgen.
    -ErrorCantSaveADoneUserWithZeroPercentage=Kan een actie met de status "Nog niet gestart" niet opslaan als het veld "door" niet ook gevuld is.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=De referentie gebruikt voor het maken bestaat al
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Kan record niet verwijderen omdat er onderliggende data aanwezig is.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Kan record niet verwijderen. Het wordt al gebruikt of opgenomen in een ander object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript dient niet uitgeschakeld te zijn voor deze functionaliteit. Om Javascript aan of uit te zetten gaat u naar het menu Home->instellingen->Scherm
     ErrorPasswordsMustMatch=De twee ingevoerde wachtwoorden komen niet overeen.
    -ErrorContactEMail=Er is een technische fout opgetreden. Neemt u alstublieft contact op met de beheerder via het e-mailadres <b>%s</b> en vermeld de volgende foutcode <b>%s</b> in uw bericht, of nog beter voeg een schermafbeelding van de pagina toe.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Foutiefe waarde voor het veld nummer <b>%s</b> (waarde <b>%s</b> voldoet niet aan de reguliere expressieregel <b>%s</b>)
     ErrorFieldValueNotIn=Verkeerde waarde voor het veld nummer <b>%s</b> (Waarde '<b>%s</b>' is geen waarde beschikbaar in het veld <b>%s</b> van de tabel <b>%s</b>)
     ErrorFieldRefNotIn=Verkeerde waarde voor veldnummer <b>%s</b> (waarde <b>'%s'</b> is geen <b>%s</b> bestaande ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Het antivirusprogramma kon dit bestand niet valide
     ErrorSpecialCharNotAllowedForField=Speciale tekens zijn niet toegestaan in het veld " %s"
     ErrorNumRefModel=Er bestaat een verwijzing in de database (%s) en deze is niet compatibel met deze nummeringsregel. Verwijder de tabelregel of hernoem de verwijzing om deze module te activeren.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Het instellen van de module lijkt onvolledig. Ga naar Home - Setup - Modules om te voltooien.
     ErrorBadMask=Fout bij het masker
     ErrorBadMaskFailedToLocatePosOfSequence=Fout, masker zonder het volgnummer
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Fout, slechte resetwaarde
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Teller moet uit meer dan 3 cijfers bestaan
     ErrorSelectAtLeastOne=Fout. Kies ten minste een item.
    -ErrorDeleteNotPossibleLineIsConsolidated=Verwijderen niet mogelijk, omdat record is gekoppeld aan een bank transation dat is verzoend
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is toegewezen aan een derde
     ErrorFailedToSendPassword=Mislukt om het wachtwoord te sturen
     ErrorFailedToLoadRSSFile=Niet in slaagt om RSS feed. Probeer een constante MAIN_SIMPLEXMLLOAD_DEBUG toe te voegen als foutmeldingen niet voldoende informatie.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Gebruiker met gebruikersnaam <b>%s</b> kon niet worden g
     ErrorLoginHasNoEmail=Deze gebruiker heeft geen e-mail adres. Proces afgebroken.
     ErrorBadValueForCode=Onjuist waardetypen voor code. Probeer het opnieuw met een nieuwe waarde
     ErrorBothFieldCantBeNegative=Velden %s %s en kan niet beide negatief
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> gebruikt om web-server uit te voeren heeft geen toestemming voor die
     ErrorNoActivatedBarcode=Geen geactiveerde barcode soort
    @@ -138,7 +141,7 @@ ErrorBadFormat=Verkeerd formaat!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Fout, er sommige leveringen gekoppeld met deze verzending. Schrapping geweigerd.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=Geen globale variabele geselecteerd
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,18 +211,19 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
    -WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    +WarningPasswordSetWithNoAccount=Er is een wachtwoord ingesteld voor dit lid. Er is echter geen gebruikersaccount gemaakt. Dus dit wachtwoord is opgeslagen maar kan niet worden gebruikt om in te loggen bij Dolibarr. Het kan worden gebruikt door een externe module / interface, maar als u geen gebruikersnaam of wachtwoord voor een lid hoeft aan te maken, kunt u de optie "Beheer een login voor elk lid" in de module-setup van Member uitschakelen. Als u een login moet beheren maar geen wachtwoord nodig heeft, kunt u dit veld leeg houden om deze waarschuwing te voorkomen. Opmerking: e-mail kan ook worden gebruikt als login als het lid aan een gebruiker is gekoppeld.
     WarningMandatorySetupNotComplete=Verplichte setup parameters zijn nog niet gedefinieerd
     WarningSafeModeOnCheckExecDir=Waarschuwing, de instelling <b>safe_mode</b> van PHP staat aan daarom moet het commando opgeslagen worden in een map die gedeclareerd is door de PHP instelling <b>safe_mode_exec_dir.</b>
     WarningBookmarkAlreadyExists=Een weblink met deze titel of dit doel (URL) bestaat al.
     WarningPassIsEmpty=Waarschuwing, het databasewachtwoord is leeg. Dit is een lek in de beveiliging. U dient een wachtwoord aan uw database toe te voegen en deze wijziging in uw conf.php te verwerken.
     WarningConfFileMustBeReadOnly=Pas op, uw configuratiebestand (</b>htdocs/conf/conf.php</b>) is schrijfbaar voor de webserver. Dit vormt een ernstig veiligheidslek. Wijzig de rechten naar alleen-lezen voor de account van de webserver. Als u Windows draait op een harde schijf met een FAT-formaat, dient u zich ervan bewust te zijn dat dit bestandssysteem geen rechten van bestanden kan toevoegen en daarom niet compleet veilig kan zijn.
     WarningsOnXLines=Waarschuwing op bronregels <b>%s</b>
    -WarningNoDocumentModelActivated=Er is geen model geactiveerd voor het maken van documenten. Er wordt een standaard model gekozen totdat u uw module instellingen heeft gecontroleerd / aangepast.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Waarschuwing, zodra de installatie voltooid is, moet u de installatie / migratie tools uitschakelen door het toevoegen van een bestand <b>install.lock</b> in <b>map %s.</b> Ontbreekt dit bestand dan is een beveiligings issue.
    -WarningUntilDirRemoved=Alle beveiligingswaarschuwingen (alleen zichtbaar voor de beheerders) zullen actief blijven zolang de kwetsbaarheden nog bestaan. (of totdat de contante MAIN_REMOVE_INSTALL_WARNING wordt toegevoegd aan Home->Instellingen->Overige).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/nl_NL/hrm.lang b/htdocs/langs/nl_NL/hrm.lang
    index 5c831ef537a..6ff5f7b1d5d 100644
    --- a/htdocs/langs/nl_NL/hrm.lang
    +++ b/htdocs/langs/nl_NL/hrm.lang
    @@ -1,16 +1,16 @@
     # Dolibarr language file - en_US - hrm
     # Admin
    -HRM_EMAIL_EXTERNAL_SERVICE=Email to prevent HRM external service
    -Establishments=Establishments
    -Establishment=Establishment
    -NewEstablishment=New establishment
    -DeleteEstablishment=Delete establishment
    -ConfirmDeleteEstablishment=Are-you sure to delete this establishment?
    -OpenEtablishment=Open establishment
    -CloseEtablishment=Close establishment
    +HRM_EMAIL_EXTERNAL_SERVICE=E-mail om externe HRM services te verhinderen.
    +Establishments=Bedrijven
    +Establishment=Bedrijf
    +NewEstablishment=Nieuw bedrijf
    +DeleteEstablishment=Verwijder bedrijf
    +ConfirmDeleteEstablishment=Weet u zeker dat u deze vestiging wilt verwijderen?
    +OpenEtablishment=Open bedrijf
    +CloseEtablishment=Sluit bedrijf
     # Dictionary
     DictionaryDepartment=HRM - Afdelingslijst
    -DictionaryFunction=HRM - Function list
    +DictionaryFunction=HRM - Functielijst
     # Module
     Employees=Werknemers
     Employee=Werknemer
    diff --git a/htdocs/langs/nl_NL/interventions.lang b/htdocs/langs/nl_NL/interventions.lang
    index 8466a404a27..e71a7f08a52 100644
    --- a/htdocs/langs/nl_NL/interventions.lang
    +++ b/htdocs/langs/nl_NL/interventions.lang
    @@ -4,9 +4,10 @@ Interventions=Interventies
     InterventionCard=Interventiedetails
     NewIntervention=Nieuwe interventie
     AddIntervention=Nieuwe interventie
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Interventielijst
     ActionsOnFicheInter=Acties bij interventie
    -LastInterventions=Latest %s interventions
    +LastInterventions=Laatste %s interventies
     AllInterventions=Alle interventies
     CreateDraftIntervention=Creëer conceptinterventie
     InterventionContact=Interventiecontactpersoon
    @@ -14,19 +15,19 @@ DeleteIntervention=Interventie verwijderen
     ValidateIntervention=Inteverntie valideren
     ModifyIntervention=Interventie aanpassen
     DeleteInterventionLine=Interventieregel verwijderen
    -CloneIntervention=Clone intervention
    -ConfirmDeleteIntervention=Are you sure you want to delete this intervention?
    -ConfirmValidateIntervention=Are you sure you want to validate this intervention under name <b>%s</b>?
    -ConfirmModifyIntervention=Are you sure you want to modify this intervention?
    -ConfirmDeleteInterventionLine=Are you sure you want to delete this intervention line?
    -ConfirmCloneIntervention=Are you sure you want to clone this intervention?
    +CloneIntervention=Kloon interventie
    +ConfirmDeleteIntervention=Weet u zeker dat u deze interventie wilt verwijderen?
    +ConfirmValidateIntervention=Weet u zeker dat u deze interventie wilt valideren onder naam <b>%s</b>?
    +ConfirmModifyIntervention=Weet u zeker dat u deze interventie wilt wijzigen?
    +ConfirmDeleteInterventionLine=Weet u zeker dat u deze interventieregel wilt verwijderen?
    +ConfirmCloneIntervention=Weet je zeker dat je deze interventie wilt klonen?
     NameAndSignatureOfInternalContact=Naam en handtekening van de uitvoerder:
     NameAndSignatureOfExternalContact=Naam en handtekening van de afnemer:
     DocumentModelStandard=Standaard modeldocument voor interventies
     InterventionCardsAndInterventionLines=Inteventiebladen en -regels
     InterventionClassifyBilled=Classificeer "gefactureerd"
     InterventionClassifyUnBilled=Classificeer "Nog niet gefactureerd"
    -InterventionClassifyDone=Classify "Done"
    +InterventionClassifyDone=Classificeer "Klaar"
     StatusInterInvoiced=Gefactureerd
     SendInterventionRef=Indiening van de interventie %s
     SendInterventionByMail=Stuur intervemtie per e-mail
    @@ -37,30 +38,30 @@ InterventionClassifiedBilledInDolibarr=Interventie %s als gefactureerd geclassif
     InterventionClassifiedUnbilledInDolibarr=Interventie %s als nog niet gefactureerd geclassificeerd
     InterventionSentByEMail=Interventie %s per e-mail verstuurd
     InterventionDeletedInDolibarr=Interventie %s verwijderd
    -InterventionsArea=Interventions area
    -DraftFichinter=Draft interventions
    -LastModifiedInterventions=Latest %s modified interventions
    -FichinterToProcess=Interventions to process
    +InterventionsArea=Interventies onderdeel
    +DraftFichinter=Concept-interventies
    +LastModifiedInterventions=Laatste %s aangepaste interventies
    +FichinterToProcess=Interventies om te verwerken
     ##### Types de contacts #####
     TypeContact_fichinter_external_CUSTOMER=Nabehandeling afnemerscontact
     # Modele numérotation
    -PrintProductsOnFichinter=Print also lines of type "product" (not only services) on intervention card
    +PrintProductsOnFichinter=Print ook regels van het type "product" (niet alleen diensten) op de interventiekaart
     PrintProductsOnFichinterDetails=Interventies gegenereerd op basis van bestellingen
    -UseServicesDurationOnFichinter=Use services duration for interventions generated from orders
    -UseDurationOnFichinter=Hides the duration field for intervention records
    -UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
    -InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    -AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
    +UseServicesDurationOnFichinter=Gebruik de duur van de services voor interventies die zijn gegenereerd op basis van bestellingen
    +UseDurationOnFichinter=Verbergt het duurveld voor interventierecords
    +UseDateWithoutHourOnFichinter=Verbergt uren en minuten uit het datumveld voor interventierecords
    +InterventionStatistics=Interventie statistieken
    +NbOfinterventions=Aantal interventiekaarten
    +NumberOfInterventionsByMonth=Aantal interventiekaarten per maand (datum van validatie)
    +AmountOfInteventionNotIncludedByDefault=Het bedrag voor interventie is niet standaard opgenomen in de winst (in de meeste gevallen worden de urenstaten gebruikt om de bestede tijd te tellen). Voeg optie PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT toe aan 1 in home-setup-diversen om ze op te nemen.
     ##### Exports #####
    -InterId=Intervention id
    -InterRef=Intervention ref.
    -InterDateCreation=Date creation intervention
    -InterDuration=Duration intervention
    -InterStatus=Status intervention
    -InterNote=Note intervention
    -InterLineId=Line id intervention
    -InterLineDate=Line date intervention
    -InterLineDuration=Line duration intervention
    -InterLineDesc=Line description intervention
    +InterId=Interventie-ID
    +InterRef=Interventie ref.
    +InterDateCreation=Aanmaakdatum interventie
    +InterDuration=Interventieduur
    +InterStatus=Interventiestatus
    +InterNote=Opmerking interventie
    +InterLineId=Regel ID-interventie
    +InterLineDate=Datum regel interventie
    +InterLineDuration=Duur regel interventie
    +InterLineDesc=Opmerking regel interventie
    diff --git a/htdocs/langs/nl_NL/languages.lang b/htdocs/langs/nl_NL/languages.lang
    index f63777e45ee..45075761bf1 100644
    --- a/htdocs/langs/nl_NL/languages.lang
    +++ b/htdocs/langs/nl_NL/languages.lang
    @@ -1,6 +1,6 @@
     # Dolibarr language file - Source file is en_US - languages
     Language_ar_AR=Arabisch
    -Language_ar_EG=Arabic (Egypt)
    +Language_ar_EG=Arabisch (Egyptisch)
     Language_ar_SA=Arabisch
     Language_bn_BD=Bengaals
     Language_bg_BG=Bulgaarse
    @@ -13,7 +13,7 @@ Language_de_DE=Duits
     Language_de_AT=Duits (Oostenrijk)
     Language_de_CH=Duits (Zwitserland)
     Language_el_GR=Grieks
    -Language_el_CY=Greek (Cyprus)
    +Language_el_CY=Grieks (Cyprus)
     Language_en_AU=Engels (Australië)
     Language_en_CA=Engels (Canada)
     Language_en_GB=Engels (Groot Brittannië)
    @@ -24,23 +24,23 @@ Language_en_US=Engels (Verenigde Staten)
     Language_en_ZA=Engels (Zuid-Afrika)
     Language_es_ES=Spaans
     Language_es_AR=Spaans (Argentinië)
    -Language_es_BO=Spanish (Bolivia)
    +Language_es_BO=Spaans (Bolivia)
     Language_es_CL=Spaans (Chili)
     Language_es_CO=Spaans (Colombia)
     Language_es_DO=Spaans (Dominicaanse Republiek)
    -Language_es_EC=Spanish (Ecuador)
    +Language_es_EC=Spaans (Ecuador)
     Language_es_HN=Spaans (Honduras)
     Language_es_MX=Spaans (Mexico)
    -Language_es_PA=Spanish (Panama)
    +Language_es_PA=Spaans (Panama)
     Language_es_PY=Spaans (Paraguay)
     Language_es_PE=Spaans (Peru)
     Language_es_PR=Spaans (Puerto Rico)
    -Language_es_UY=Spanish (Uruguay)
    -Language_es_VE=Spanish (Venezuela)
    +Language_es_UY=Spaans (Uruguay)
    +Language_es_VE=Spaans (Venezuela)
     Language_et_EE=Estlands
     Language_eu_ES=Bask
     Language_fa_IR=Perzisch
    -Language_fi_FI=Finnish
    +Language_fi_FI=Voltooi
     Language_fr_BE=Frans (België)
     Language_fr_CA=Frans (Canada)
     Language_fr_CH=Frans (Zwitserland)
    @@ -62,7 +62,7 @@ Language_lo_LA=Laotiaans
     Language_lt_LT=Litouws
     Language_lv_LV=Lets
     Language_mk_MK=Macedonisch
    -Language_mn_MN=Mongolian
    +Language_mn_MN=Mongools
     Language_nb_NO=Noors (Bokmål)
     Language_nl_BE=Nederlands (België)
     Language_nl_NL=Nederlands (Nederland)
    @@ -78,7 +78,7 @@ Language_sv_SV=Zweeds
     Language_sv_SE=Zweeds
     Language_sq_AL=Albanees
     Language_sk_SK=Slovakian
    -Language_sr_RS=Serbian
    +Language_sr_RS=Servisch
     Language_sw_SW=Kiswahili
     Language_th_TH=Thai
     Language_uk_UA=Oekraïens
    @@ -86,3 +86,4 @@ Language_uz_UZ=Oezbeeks
     Language_vi_VN=Vietnamees
     Language_zh_CN=Chinees
     Language_zh_TW=Chinees (traditioneel)
    +Language_bh_MY=Maleis-
    diff --git a/htdocs/langs/nl_NL/ldap.lang b/htdocs/langs/nl_NL/ldap.lang
    index 1057185d34b..b72b2e0cc7d 100644
    --- a/htdocs/langs/nl_NL/ldap.lang
    +++ b/htdocs/langs/nl_NL/ldap.lang
    @@ -24,4 +24,4 @@ MemberTypeSynchronized=Soort lidmaatschap gesynchroniseerd
     ContactSynchronized=Contact gesynchroniseerd
     ForceSynchronize=Forceer synchronisatie Dolibarr -> LDAP
     ErrorFailedToReadLDAP=Kon niet lezen uit de LDAP-database. Controleer de instellingen van de LDAP module en database toegankelijkheid.
    -PasswordOfUserInLDAP=Password of user in LDAP
    +PasswordOfUserInLDAP=Wachtwoord van gebruiker in LDAP
    diff --git a/htdocs/langs/nl_NL/main.lang b/htdocs/langs/nl_NL/main.lang
    index 28639d67dad..f1d59268b82 100644
    --- a/htdocs/langs/nl_NL/main.lang
    +++ b/htdocs/langs/nl_NL/main.lang
    @@ -24,8 +24,8 @@ FormatDateHourSecShort=%d/%m/%Y %I:%M:%S %p
     FormatDateHourTextShort=%d %b %Y %H:%M
     FormatDateHourText=%d %B %Y %H:%M
     DatabaseConnection=Databaseverbinding
    -NoTemplateDefined=No template available for this email type
    -AvailableVariables=Available substitution variables
    +NoTemplateDefined=Geen sjabloon beschikbaar voor dit e-mailtype
    +AvailableVariables=Beschikbare substitutievariabelen
     NoTranslation=Geen vertaling
     Translation=Vertaling
     NoRecordFound=Geen item gevonden
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Mail versturen mislukt (afzender=%s, ontvanger=%s)
     ErrorFileNotUploaded=Bestand is niet geüploadet. Controleer of de grootte niet meer is dan maximaal toegestaan, of er vrije ruimte beschikbaar is op de schijf en of er niet al een bestand met dezelfde naam in deze map bestaat.
     ErrorInternalErrorDetected=Fout ontdekt
     ErrorWrongHostParameter=Verkeerde host-instelling
    -ErrorYourCountryIsNotDefined=Uw land is niet gedefinieerd. Corrigeer in Home->Instellingen-Bewerk en verstuur het formulier opnieuw.
    -ErrorRecordIsUsedByChild=Item verwijderen mislukt. Dit item wordt gebruikt door ten minste één onderliggend item.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Verkeerde waarde
     ErrorWrongValueForParameterX=Verkeerde waarde voor de parameter %s
     ErrorNoRequestInError=Geen verzoek mislukt
    -ErrorServiceUnavailableTryLater=Service op dit moment niet beschikbaar. Probeer het later opnieuw.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Dubbele waarde in een uniek veld
    -ErrorSomeErrorWereFoundRollbackIsDone=Fouten gevonden. Wij draaien de veranderingen terug.
    -ErrorConfigParameterNotDefined=<b>Parameter %s</b> is niet gedefinieerd binnen Dolibarr configuratiebestand <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Kan <b>gebruiker %s</b> niet in de Dolibarr database vinden.
     ErrorNoVATRateDefinedForSellerCountry=Fout, geen BTW-tarieven voor land '%s'.
     ErrorNoSocialContributionForSellerCountry=Fout, geen sociale/fiscale belastingtypen gedefinieerd voor land '%s'.
     ErrorFailedToSaveFile=Fout, bestand opslaan mislukt.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=U bent hiervoor niet bevoegd.
     SetDate=Stel datum in
     SelectDate=Selecteer een datum
    @@ -74,25 +74,25 @@ ClickHere=Klik hier
     Here=Hier
     Apply=Toepassen
     BackgroundColorByDefault=Standaard achtergrondkleur
    -FileRenamed=The file was successfully renamed
    +FileRenamed=Het bestand is met succes hernoemd
     FileGenerated=Het bestand is succesvol aangemaakt
     FileSaved=Het bestand is succesvol opgeslagen
     FileUploaded=Het bestand is geüpload
    -FileTransferComplete=Bestand(en) succesvol geupload
    -FilesDeleted=File(s) successfully deleted
    +FileTransferComplete=File(s) uploaded successfully
    +FilesDeleted=Bestand (en) succesvol verwijderd
     FileWasNotUploaded=Een bestand is geselecteerd als bijlage, maar is nog niet geüploadet. Klik hiervoor op "Bevestig dit bestand".
    -NbOfEntries=Aantal invoeringen
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Lees de online hulptekst (internettoegang vereist)
     GoToHelpPage=Lees de hulptekst
     RecordSaved=Item opgeslagen
     RecordDeleted=Item verwijderd
     LevelOfFeature=Niveau van de functionaliteiten
     NotDefined=Niet gedefinieerd
    -DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to <b>%s</b> in configuration file <b>conf.php</b>.<br>This means that the password database is external to Dolibarr, so changing this field may have no effect.
    +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr Authenticatie modus is ingesteld op <b>%s</b> in configuratiebestand <b>conf.php</b>. <br>Dit betekent dat de wachtwoorddatabase extern is van Dolibarr. Dit veld wijzigen heeft mogelijk geen effect .
     Administrator=Beheerder
     Undefined=Ongedefineerd
     PasswordForgotten=Wachtwoord vergeten?
    -NoAccount=No account?
    +NoAccount=Geen account?
     SeeAbove=Zie hierboven
     HomeArea=Home
     LastConnexion=Laatste connectie
    @@ -107,8 +107,8 @@ RequestLastAccessInError=Database fout bij laatste verzoek
     ReturnCodeLastAccessInError=Retourcode voor de meest recente fout bij het toegangsverzoek voor de database
     InformationLastAccessInError=Informatie voor de meest recente database-toegangsverzoekfout
     DolibarrHasDetectedError=Dolibarr heeft een technische fout gedetecteerd
    -YouCanSetOptionDolibarrMainProdToZero=You can read log file or set option $dolibarr_main_prod to '0' in your config file to get more information.
    -InformationToHelpDiagnose=This information can be useful for diagnostic purposes (you can set option $dolibarr_main_prod to '1' to remove such notices)
    +YouCanSetOptionDolibarrMainProdToZero=U kunt het logbestand lezen of de optie $dolibarr_main_prod instellen op '0' in uw configuratiebestand voor meer informatie.
    +InformationToHelpDiagnose=Deze informatie kan nuttig zijn voor diagnostische doeleinden (u kunt optie $dolibarr_main_prod instellen op '1' om dergelijke kennisgevingen te verwijderen)
     MoreInformation=Meer informatie
     TechnicalInformation=Technische gegevens
     TechnicalID=Technische ID
    @@ -128,32 +128,33 @@ Home=Home
     Help=Help
     OnlineHelp=Online hulp
     PageWiki=Wiki Pagina
    -MediaBrowser=Media browser
    +MediaBrowser=Mediabrowser
     Always=Altijd
     Never=Nooit
     Under=onder
     Period=Looptijd
     PeriodEndDate=Einddatum looptijd
    -SelectedPeriod=Selected period
    -PreviousPeriod=Previous period
    +SelectedPeriod=Geselecteerde periode
    +PreviousPeriod=Vorige periode
     Activate=Activeren
     Activated=Geactiveerd
     Closed=Gesloten
     Closed2=Gesloten
     NotClosed=Niet gesloten
     Enabled=Ingeschakeld
    +Enable=Activeren
     Deprecated=Deprecated
     Disable=Uitschakelen
     Disabled=Uitgeschakeld
     Add=Toevoegen
     AddLink=Link toevoegen
     RemoveLink=Verwijder link
    -AddToDraft=Add to draft
    +AddToDraft=Toevoegen aan concept
     Update=Update
     Close=Sluiten
    -CloseBox=Remove widget from your dashboard
    +CloseBox=Verwijder widget van uw dashboard
     Confirm=Bevestig
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Wissen
     Remove=Verwijderen
     Resiliate=Afbreken
    @@ -188,7 +189,7 @@ ToLink=Link
     Select=Selecteer
     Choose=Kies
     Resize=Schalen
    -ResizeOrCrop=Resize or Crop
    +ResizeOrCrop=Formaat wijzigen of bijsnijden
     Recenter=Hercentreer
     Author=Auteur
     User=Gebruiker
    @@ -267,13 +268,13 @@ DateBuild=Datum van rapportgeneratie
     DatePayment=Datum van betaling
     DateApprove=Goedkeurings datum
     DateApprove2=Datum akkoord (tweede)
    -RegistrationDate=Registration date
    +RegistrationDate=Registratie datum
     UserCreation=Aanmaken gebruiker
     UserModification=Wijzigen gebruiker
    -UserValidation=Validation user
    +UserValidation=Validatie gebruiker
     UserCreationShort=Gebruiker aanmaken
     UserModificationShort=Gebruiker wijzigen
    -UserValidationShort=Valid. user
    +UserValidationShort=Geldige gebruiker
     DurationYear=jaar
     DurationMonth=maand
     DurationWeek=week
    @@ -315,8 +316,8 @@ KiloBytes=KiloBytes
     MegaBytes=MegaBytes
     GigaBytes=GigaBytes
     TeraBytes=Terabytes
    -UserAuthor=User of creation
    -UserModif=User of last update
    +UserAuthor=Gebruiker van creatie
    +UserModif=Gebruiker van de laatste update
     b=b
     Kb=Kb
     Mb=Mb
    @@ -327,12 +328,12 @@ Copy=Kopiëren
     Paste=Plakken
     Default=Standaard
     DefaultValue=Standaardwaarde
    -DefaultValues=Standaard waarden
    +DefaultValues=Default values/filters/sorting
     Price=Prijs
    -PriceCurrency=Price (currency)
    +PriceCurrency=Prijs (valuta)
     UnitPrice=Eenheidsprijs
     UnitPriceHT=Eenheidsprijs (netto)
    -UnitPriceHTCurrency=Unit price (net) (currency)
    +UnitPriceHTCurrency=Eenheidsprijs (netto) (valuta)
     UnitPriceTTC=Eenheidsprijs (bruto)
     PriceU=E.P.
     PriceUHT=EP (netto)
    @@ -340,16 +341,16 @@ PriceUHTCurrency=Valuta
     PriceUTTC=U.P. (inc. belasting)
     Amount=Hoeveelheid
     AmountInvoice=Factuurbedrag
    -AmountInvoiced=Amount invoiced
    +AmountInvoiced=Gefactureerd bedrag
     AmountPayment=Betalingsbedrag
     AmountHTShort=Bedrag ex. BTW
     AmountTTCShort=Bedrag met BTW
     AmountHT=Bedrag (exclusief BTW)
     AmountTTC=Bedrag (incl. BTW)
     AmountVAT=Bedrag BTW
    -MulticurrencyAlreadyPaid=Reeds betaald, originele valuta
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Rest openstaand, originele valuta
    -MulticurrencyPaymentAmount=Payment amount, original currency
    +MulticurrencyPaymentAmount=Betalingsbedrag, originele valuta
     MulticurrencyAmountHT=Nettobedrag, oorspronkelijke valuta
     MulticurrencyAmountTTC=Bedrag (incl. BTW), oorspronkelijke valuta
     MulticurrencyAmountVAT=BTW bedrag, oorspronkelijke valuta
    @@ -360,7 +361,7 @@ AmountLT2ES=Bedrag IRPF
     AmountTotal=Totaal bedrag
     AmountAverage=Gemiddeld bedrag
     PriceQtyMinHT=Prijs hoeveelheid min. (exclusief BTW)
    -PriceQtyMinHTCurrency=Price quantity min. (net of tax) (currency)
    +PriceQtyMinHTCurrency=Prijs hoeveelheid min. (na aftrek van btw) (valuta)
     Percentage=Percentage
     Total=Totaal
     SubTotal=Subtotaal
    @@ -373,39 +374,39 @@ Totalforthispage=Totaal voor deze pagina
     TotalTTC=Totaal (incl. BTW)
     TotalTTCToYourCredit=Totaal (incl. BTW) op uw krediet
     TotalVAT=Totaal BTW
    -TotalVATIN=Total IGST
    +TotalVATIN=Totale IGST
     TotalLT1=Totaal tax 2
     TotalLT2=Totaal tax 3
     TotalLT1ES=Totaal RE
     TotalLT2ES=Totaal IRPF
    -TotalLT1IN=Total CGST
    -TotalLT2IN=Total SGST
    +TotalLT1IN=Totaal CGST
    +TotalLT2IN=Totaal SGST
     HT=Exclusief BTW
     TTC=Inclusief BTW
    -INCVATONLY=Inc. VAT
    +INCVATONLY=Incl. BTW
     INCT=Incl. alle belastingen
     VAT=BTW
     VATIN=IGST
     VATs=BTW
    -VATINs=IGST taxes
    -LT1=Sales tax 2
    -LT1Type=Sales tax 2 type
    -LT2=Sales tax 3
    -LT2Type=Sales tax 3 type
    +VATINs=IGST belastingen
    +LT1=Omzetbelasting 2
    +LT1Type=BTW type 2
    +LT2=Omzetbelasting 3
    +LT2Type=BTW type 3
     LT1ES=RE
     LT2ES=IRPF
     LT1IN=CGST
     LT2IN=SGST
     VATRate=BTW-tarief
    -VATCode=Tax Rate code
    -VATNPR=Tax Rate NPR
    +VATCode=Belastingtariefcode
    +VATNPR=NPR belastingtarief
     DefaultTaxRate=BTW tarief
     Average=Gemiddeld
     Sum=Som
     Delta=Variantie
    -RemainToPay=Remain to pay
    +RemainToPay=Restant te betalen
     Module=Module/Applicatie
    -Modules=Modules/Applications
    +Modules=Modules / Applicaties
     Option=Optie
     List=Lijstoverzicht
     FullList=Volledig overzicht
    @@ -416,7 +417,7 @@ Favorite=Favoriet
     ShortInfo=Info.
     Ref=Referentie
     ExternalRef=Ref. extern
    -RefSupplier=Ref. vendor
    +RefSupplier=Ref. verkoper
     RefPayment=Betalingskenmerk
     CommercialProposalsShort=Offertes
     Comment=Opmerking
    @@ -428,7 +429,7 @@ ActionNotApplicable=Niet van toepassing
     ActionRunningNotStarted=Niet gestart
     ActionRunningShort=Reeds bezig
     ActionDoneShort=Uitgevoerd
    -ActionUncomplete=Onvolledig
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Laatste %s gekoppelde evenementen
     CompanyFoundation=Bedrijf/Organisatie
     Accountant=Accountant
    @@ -437,10 +438,10 @@ ContactsAddressesForCompany=Contacten / adressen voor deze relatie
     AddressesForCompany=Adressen voor deze relatie
     ActionsOnCompany=Acties voor bedrijf
     ActionsOnMember=Events over dit lid
    -ActionsOnProduct=Events about this product
    +ActionsOnProduct=Evenementen in dit product
     NActionsLate=%s is laat
     ToDo=Te doen
    -Completed=Completed
    +Completed=Voltooid
     Running=Reeds bezig
     RequestAlreadyDone=Aanvraag reeds opgenomen
     Filter=Filter
    @@ -453,9 +454,9 @@ Generate=Genereer
     Duration=Duur
     TotalDuration=Totale duur
     Summary=Samenvatting
    -DolibarrStateBoard=Database statistieken
    -DolibarrWorkBoard=In behandeling
    -NoOpenedElementToProcess=No opened element to process
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
    +NoOpenedElementToProcess=Geen geopend element om te verwerken
     Available=Beschikbaar
     NotYetAvailable=Nog niet beschikbaar
     NotAvailable=Niet beschikbaar
    @@ -490,12 +491,12 @@ Discount=Korting
     Unknown=Onbekend
     General=Algemeen
     Size=Grootte
    -OriginalSize=Original size
    +OriginalSize=Originele grootte
     Received=Ontvangen
     Paid=Betaald
     Topic=Onderwerp
     ByCompanies=Door bedrijven
    -ByUsers=By user
    +ByUsers=Door gebruiker
     Links=Links
     Link=Link
     Rejects=Verworpen
    @@ -504,20 +505,20 @@ NextStep=Volgende stap
     Datas=Gegevens
     None=Geen
     NoneF=Geen
    -NoneOrSeveral=None or several
    +NoneOrSeveral=Geen of meerdere
     Late=Vertraagd
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    -NoItemLate=No late item
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
    +NoItemLate=Geen laat item
     Photo=Afbeelding
     Photos=Afbeeldingen
     AddPhoto=Afbeelding toevoegen
     DeletePicture=Afbeelding verwijderen
     ConfirmDeletePicture=Bevestig verwijderen afbeelding
     Login=Login
    -LoginEmail=Login (email)
    -LoginOrEmail=Login or Email
    +LoginEmail=Login (e-mail)
    +LoginOrEmail=Inlog of e-mail
     CurrentLogin=Huidige login
    -EnterLoginDetail=Enter login details
    +EnterLoginDetail=Voer inloggegevens in
     January=Januari
     February=Februari
     March=Maart
    @@ -530,18 +531,6 @@ September=September
     October=Oktober
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Februari
    -MarchMin=Mar
    -AprilMin=April
    -MayMin=Kunnen
    -JuneMin=Juni
    -JulyMin=Juli
    -AugustMin=Augustus
    -SeptemberMin=September
    -OctoberMin=Oktober
    -NovemberMin=November
    -DecemberMin=December
     Month01=januari
     Month02=februari
     Month03=maart
    @@ -579,7 +568,7 @@ MonthVeryShort10=O
     MonthVeryShort11=N
     MonthVeryShort12=D
     AttachedFiles=Bijgevoegde bestanden en documenten
    -JoinMainDoc=Join main document
    +JoinMainDoc=Word hoofddocument
     DateFormatYYYYMM=JJJJ-MM
     DateFormatYYYYMMDD=JJJJ-MM-DD
     DateFormatYYYYMMDDHHMM=JJJJ-MM-DD HH: SS
    @@ -622,9 +611,9 @@ BuildDoc=Genereer Document
     Entity=Entiteit
     Entities=Entiteiten
     CustomerPreview=Afnemersvoorbeeldweergave
    -SupplierPreview=Vendor preview
    +SupplierPreview=Voorbeeld van leverancier
     ShowCustomerPreview=Toon afnemersvoorbeeldweergave
    -ShowSupplierPreview=Show vendor preview
    +ShowSupplierPreview=Laat voorbeeld leverancier zien
     RefCustomer=Referentie afnemer
     Currency=Valuta
     InfoAdmin=Informatie voor beheerders
    @@ -632,7 +621,7 @@ Undo=Ongedaan maken
     Redo=Opnieuw
     ExpandAll=Alles uitklappen
     UndoExpandAll=Ongedaan maken alles uitklappen
    -SeeAll=See all
    +SeeAll=Alles zien
     Reason=Reden
     FeatureNotYetSupported=Functie nog niet ondersteund
     CloseWindow=Sluit venster
    @@ -646,6 +635,8 @@ SendMail=Verzend e-mail
     EMail=E-mail
     NoEMail=Geen e-mail
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Niet gelezen
     NoMobilePhone=Geen mobiele telefoon
     Owner=Eigenaar
     FollowingConstantsWillBeSubstituted=De volgende constanten worden vervangen met de overeenkomstige waarde.
    @@ -668,8 +659,8 @@ NotEnoughPermissions=U heeft geen toestemming voor deze actie
     SessionName=Sessienaam
     Method=Methode
     Receive=Ontvangen
    -CompleteOrNoMoreReceptionExpected=Complete or nothing more expected
    -ExpectedValue=Expected Value
    +CompleteOrNoMoreReceptionExpected=Voltooid of niets meer verwacht
    +ExpectedValue=Verwachte waarde
     CurrentValue=Huidige waarde
     PartialWoman=Gedeeltelijke
     TotalWoman=Totaal
    @@ -677,7 +668,7 @@ NeverReceived=Nooit ontvangen
     Canceled=Geannuleerd
     YouCanChangeValuesForThisListFromDictionarySetup=U kunt waarden voor deze lijst wijzigen via menu-instellingen - woordenboek
     YouCanChangeValuesForThisListFrom=U kunt de waarden van dit menu aanpassen via %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Kleur
     Documents=Gekoppelde bestanden
     Documents2=Documenten
    @@ -708,23 +699,23 @@ Page=Pagina
     Notes=Notitie
     AddNewLine=Voeg nieuwe regel toe
     AddFile=Voeg bestand toe
    -FreeZone=Not a predefined product/service
    -FreeLineOfType=Not a predefined entry of type
    +FreeZone=Geen vooraf gedefinieerde product/dienst
    +FreeLineOfType=Geen vooraf gedefinieerde invoer van het type
     CloneMainAttributes=Kloon het object met de belangrijkste kenmerken
     PDFMerge=Voeg PDF samen
     Merge=Samenvoegen
     DocumentModelStandardPDF=Standaard PDF sjabloon
     PrintContentArea=Toon printervriendelijke pagina
     MenuManager=Standaard menuverwerker
    -WarningYouAreInMaintenanceMode=Let op, u bevind zich in de onderhoudmodus, dus alleen de login <b>%s</b> is gemachtigd om de applicatie op dit moment te gebruiken.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Systeemfout
    -CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
    +CoreErrorMessage=Sorry, er is een fout opgetreden. Neem contact op met uw systeembeheerder om de logboeken te controleren of $dolibarr_main_prod = 1 uit te schakelen voor meer informatie.
     CreditCard=CreditCard
     ValidatePayment=Valideer deze betaling
    -CreditOrDebitCard=Credit or debit card
    +CreditOrDebitCard=Creditcard of bankpas
     FieldsWithAreMandatory=Velden met een <b>%s</b> zijn verplicht
    -FieldsWithIsForPublic=Velden gemarkeerd door <b>%s</b> zullen worden geplaatst op de openbare lijst van de leden. Indien u dat niet wenst, schakelt u de toegang "publiek" uit.
    -AccordingToGeoIPDatabase=(verkregen door conversie GeoIP)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Regel
     NotSupported=Niet ondersteund
     RequiredField=Verplicht veld
    @@ -732,6 +723,8 @@ Result=Resultaat
     ToTest=Testen
     ValidateBefore=Het geheel moet worden gevalideerd om deze functie te kunnen gebruiken
     Visibility=Zichtbaarheid
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privé
     Hidden=Verborgen
     Resources=Middelen
    @@ -750,17 +743,19 @@ LinkTo=Link naar
     LinkToProposal=Link naar offerte
     LinkToOrder=gekoppeld aan bestelling
     LinkToInvoice=Link naar factuur
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link naar order leverancier
     LinkToSupplierProposal=Link naar offerte leverancier
     LinkToSupplierInvoice=Link naar factuur leverancier
     LinkToContract=Link naar contract
    -LinkToIntervention=Link to intervention
    +LinkToIntervention=Link naar interventie
     CreateDraft=Maak een ontwerp
     SetToDraft=Terug naar ontwerp
     ClickToEdit=Klik om te bewerken
    -EditWithEditor=Edit with CKEditor
    -EditWithTextEditor=Edit with Text editor
    -EditHTMLSource=Edit HTML Source
    +ClickToRefresh=Click to refresh
    +EditWithEditor=Bewerken met CKEditor
    +EditWithTextEditor=Bewerken met teksteditor
    +EditHTMLSource=Bewerk de HTML-bron
     ObjectDeleted=Object %s verwijderd
     ByCountry=Per land
     ByTown=Door de stad
    @@ -772,14 +767,14 @@ ByDay=Per dag
     BySalesRepresentative=Door vertegenwoordiger
     LinkedToSpecificUsers=Gekoppeld aan een bepaalde gebruiker contact
     NoResults=Geen resultaten
    -AdminTools=Systeemwerkset
    +AdminTools=Admin Tools
     SystemTools=Systeem tools
     ModulesSystemTools=Modules gereedschappen
     Test=Test
     Element=Element
     NoPhotoYet=Nog geen fotos beschikbaar
     Dashboard=Dashboard
    -MyDashboard=Mijn dashboard
    +MyDashboard=My Dashboard
     Deductible=Aftrekbaar
     from=van
     toward=richting
    @@ -794,15 +789,15 @@ SetBankAccount=Definieer Bank Rekening
     AccountCurrency=Rekening Valuta
     ViewPrivateNote=Notities bekijken
     XMoreLines=%s regel(s) verborgen
    -ShowMoreLines=Show more/less lines
    +ShowMoreLines=Laat meer/minder regels zien
     PublicUrl=Openbare URL
     AddBox=Box toevoegen
    -SelectElementAndClick=Select an element and click %s
    +SelectElementAndClick=Selecteer een element en klik op %s
     PrintFile=Bestand afdrukken %s
     ShowTransaction=Toon bankmutatie
     ShowIntervention=Tonen tussenkomst
     ShowContract=Toon contract
    -GoIntoSetupToChangeLogo=Ga naar Home - Setup - Bedrijf om logo te wijzigen of ga naar Home - Instellingen - Scherm om te verbergen.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Wijgeren
     Denied=Gewijgerd
     ListOf=Lijst van %s
    @@ -813,20 +808,20 @@ Genderwoman=Vrouw
     ViewList=Bekijk lijst
     Mandatory=Verplicht
     Hello=Hallo
    -GoodBye=GoodBye
    +GoodBye=Tot ziens
     Sincerely=Oprecht
     DeleteLine=Verwijderen regel
     ConfirmDeleteLine=Weet u zeker dat u deze regel wilt verwijderen?
     NoPDFAvailableForDocGenAmongChecked=Er was geen PDF beschikbaar voor het genereren van documenten bij gecontroleerde records
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=Geen record geselecteerd
    -MassFilesArea=Area for files built by mass actions
    -ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    -RelatedObjects=Related Objects
    +MassFilesArea=Omgeving voor bestanden die zijn gebouwd met massa-acties
    +ShowTempMassFilesArea=Toon gebied van bestanden gebouwd door massale acties
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
    +RelatedObjects=Gerelateerde objecten
     ClassifyBilled=Classificeer als gefactureerd
    -ClassifyUnbilled=Classify unbilled
    +ClassifyUnbilled=Classificeer ongevuld
     Progress=Voortgang
     FrontOffice=Front office
     BackOffice=Back office
    @@ -841,36 +836,45 @@ Calendar=Kalender
     GroupBy=Sorteer op
     ViewFlatList=Weergeven als lijst
     RemoveString='%s' string verwijderen
    -SomeTranslationAreUncomplete=Sommige talen zijn mogelijk gedeeltelijk vertaald of bevatten fouten. Als u dit ziet kunt u taalbestanden repareren door u zich registreren op <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/ Dolibarr /</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Directe download link (openbaar/extern)
    -DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
    +DirectDownloadInternalLink=Directe downloadlink (moet worden gelogd en heeft machtigingen nodig)
     Download=Downloaden
     DownloadDocument=Download document
     ActualizeCurrency=Bijwerken valutakoers
     Fiscalyear=Boekjaar
     ModuleBuilder=Module ontwerper
     SetMultiCurrencyCode=Kies valuta
    -BulkActions=Bulk actions
    -ClickToShowHelp=Click to show tooltip help
    -WebSite=Web site
    -WebSites=Web sites
    -WebSiteAccounts=Web site accounts
    -ExpenseReport=Expense report
    +BulkActions=Bulkacties
    +ClickToShowHelp=Klik om tooltip-help weer te geven
    +WebSite=Website
    +WebSites=Websites
    +WebSiteAccounts=Websiteaccounts
    +ExpenseReport=Rapportage kosten
     ExpenseReports=Onkostennota's 
     HR=HR
     HRAndBank=HR en Bank
     AutomaticallyCalculated=Automatisch berekend
    -TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    -ImportId=Import id
    +TitleSetToDraft=Ga terug naar concept
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
    +ImportId=ID importeren
     Events=Gebeurtenissen
    -EMailTemplates=Email documentensjablonen
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projecten
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Rechten
    -LineNb=Line no.
    +LineNb=Regelnr.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Maandag
     Tuesday=Dinsdag
    @@ -902,12 +906,12 @@ ShortSaturday=Za
     ShortSunday=Zo
     SelectMailModel=Selecteer een e-mail template
     SetRef=Stel ref in
    -Select2ResultFoundUseArrows=Some results found. Use arrows to select.
    +Select2ResultFoundUseArrows=Resultaten gevonden. Gebruik de pijlen om te selecteren.
     Select2NotFound=Geen resultaat gevonden
     Select2Enter=Enter
    -Select2MoreCharacter=or more character
    +Select2MoreCharacter=of meerdere karakters
     Select2MoreCharacters=of meer karakters
    -Select2MoreCharactersMore=<strong>Search syntax:</strong><br><kbd><strong> |</strong></kbd><kbd> OR</kbd> (a|b)<br><kbd><strong>*</strong></kbd><kbd> Any character</kbd> (a*b)<br><kbd><strong>^</strong></kbd><kbd> Start with</kbd> (^ab)<br><kbd><strong>$</strong></kbd><kbd> End with</kbd> (ab$)<br>
    +Select2MoreCharactersMore=<strong>Zoek syntax:</strong><br><kbd><strong>|</strong></kbd><kbd>OF</kbd>(a|b)<br><kbd> <strong>*</strong></kbd><kbd>Elk teken</kbd> (a * b)<br><kbd><strong>^</strong></kbd><kbd>Beginnen met</kbd>(^ab)<br><kbd><strong>$</strong></kbd><kbd> Einde met</kbd>(ab$)<br>
     Select2LoadingMoreResults=Laad meer resultaten...
     Select2SearchInProgress=Zoeken...
     SearchIntoThirdparties=Klant
    @@ -918,33 +922,34 @@ SearchIntoProductsOrServices=Diensten of Producten
     SearchIntoProjects=Projecten
     SearchIntoTasks=Taken
     SearchIntoCustomerInvoices=Klantenfactuur
    -SearchIntoSupplierInvoices=Vendor invoices
    +SearchIntoSupplierInvoices=Facturen van leveranciers
     SearchIntoCustomerOrders=Klantenbestelling
    -SearchIntoSupplierOrders=Purchase orders
    +SearchIntoSupplierOrders=Inkooporders
     SearchIntoCustomerProposals=Klantenoffertes
    -SearchIntoSupplierProposals=Vendor proposals
    +SearchIntoSupplierProposals=Leveranciersvoorstellen
     SearchIntoInterventions=Interventies
     SearchIntoContracts=Contracten
     SearchIntoCustomerShipments=Klantzendingen
     SearchIntoExpenseReports=Onkostennota's 
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Opmerkingen
    -NbComments=Number of comments
    -CommentPage=Comments space
    -CommentAdded=Comment added
    -CommentDeleted=Comment deleted
    +NbComments=Aantal reacties
    +CommentPage=Reacties ruimte
    +CommentAdded=Reactie toegevoegd
    +CommentDeleted=Reactie verwijderd
     Everybody=Iedereen
    -PayedBy=Payed by
    -PayedTo=Payed to
    -Monthly=Monthly
    -Quarterly=Quarterly
    -Annual=Annual
    -Local=Local
    -Remote=Remote
    -LocalAndRemote=Local and Remote
    -KeyboardShortcut=Keyboard shortcut
    +PayedBy=Betaald door
    +PayedTo=Paid to
    +Monthly=Maandelijks
    +Quarterly=Per kwartaal
    +Annual=Jaarlijks
    +Local=lokaal
    +Remote=Op afstand
    +LocalAndRemote=Lokaal en op afstand
    +KeyboardShortcut=Sneltoets
     AssignedTo=Geaffecteerden
    -Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    -FileSharedViaALink=File shared via a link
    -
    +Deletedraft=Concept verwijderen
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
    +FileSharedViaALink=Bestand gedeeld via een link
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=U bent momenteel in de %s "sandbox" -modus
    diff --git a/htdocs/langs/nl_NL/margins.lang b/htdocs/langs/nl_NL/margins.lang
    index 3ebafd0a4d7..cb25c70eb60 100644
    --- a/htdocs/langs/nl_NL/margins.lang
    +++ b/htdocs/langs/nl_NL/margins.lang
    @@ -21,17 +21,17 @@ ProductService=Trainning of Dienst
     AllProducts=Alle Trainingen en Diensten
     ChooseProduct/Service=Kies Training of Dienst
     ForceBuyingPriceIfNull=Forceren inkoop/kostprijs naar verkoopprijs als dit niet is gedefinieerd
    -ForceBuyingPriceIfNullDetails=If buying/cost price not defined, and this option "ON", margin will be zero on line (buying/cost price = selling price), otherwise ("OFF"), marge will be equal to suggested default.
    +ForceBuyingPriceIfNullDetails=Als inkoop / kostprijs niet is gedefinieerd en deze optie staat op "AAN", zal de marge nul zijn (inkoop / kostprijs = verkoopprijs). Indien ("UIT"), zal marge gelijk zijn aan de voorgestelde standaard.
     MARGIN_METHODE_FOR_DISCOUNT=Marge methode voor globale discounts
     UseDiscountAsProduct=Als een training
     UseDiscountAsService=Als een dienst
     UseDiscountOnTotal=Op subtotaal
     MARGIN_METHODE_FOR_DISCOUNT_DETAILS=Definieert als een globale discount wordt behandelt als een training, een dienst, of alleen een subtotaal voor marge berekening.
     MARGIN_TYPE=Inkoop/kostprijs voorgesteld al standaard bij margeberekening
    -MargeType1=Margin on Best vendor price
    +MargeType1=Marge op de beste verkoopprijs
     MargeType2=Marge op gewogen inkoopprijs (GIP)
     MargeType3=Marge inkoopprijs
    -MarginTypeDesc=* Margin on best buying price = Selling price - Best vendor price defined on product card<br>* Margin on Weighted Average Price (WAP) = Selling price - Product Weighted Average Price (WAP) or best supplier price if WAP not yet defined<br>* Margin on Cost price = Selling price - Cost price defined on product card or WAP if cost price not defined, or best supplier price if WAP not yet defined
    +MarginTypeDesc=* Marge op beste aankoopprijs = verkoopprijs - beste leveranciersprijs gedefinieerd op productkaart <br> * Marge op gewogen gemiddelde prijs (GGP) = verkoopprijs - product gewogen gemiddelde prijs (GGP) of beste leverancier prijs als GGP nog niet is gedefinieerd <br> * Marge op kostprijs = Verkoopprijs - Kostprijs gedefinieerd op productkaart of GGP als kostprijs niet is gedefinieerd, of beste leverancier prijs als GGP nog niet is gedefinieerd
     CostPrice=Kostprijs
     UnitCharges=Unit toeslag
     Charges=Toeslag
    @@ -41,4 +41,4 @@ rateMustBeNumeric=Tarief moet een numerieke waarde zijn
     markRateShouldBeLesserThan100=Markeer tarief moet lager zijn dan 100 zijn
     ShowMarginInfos=Toon marge info
     CheckMargins=Marge details
    -MarginPerSaleRepresentativeWarning=The report of margin per user use the link between third parties and sale representatives to calculate the margin of each sale representative. Because some thirdparties may not have any ddiated sale representative and some thirdparties may be linked to several, some amounts may not be included into this report (if there is no sale representative) and some may appear on different lines (for each sale representative).
    +MarginPerSaleRepresentativeWarning=Het rapport van marge per gebruiker gebruikt de koppeling tussen derden en verkoopvertegenwoordigers om de marge van elke verkoopvertegenwoordiger te berekenen. Omdat sommige derde partijen mogelijk geen speciale verkoopvertegenwoordiger hebben en sommige derde partijen mogelijk aan meerdere zijn gekoppeld, zijn sommige bedragen mogelijk niet opgenomen in dit rapport (als er geen verkoopvertegenwoordiger is) en sommige kunnen op verschillende regels worden weergegeven (voor elke verkoopvertegenwoordiger) .
    diff --git a/htdocs/langs/nl_NL/oauth.lang b/htdocs/langs/nl_NL/oauth.lang
    index cafca379f6f..309f306e77f 100644
    --- a/htdocs/langs/nl_NL/oauth.lang
    +++ b/htdocs/langs/nl_NL/oauth.lang
    @@ -1,30 +1,30 @@
     # Dolibarr language file - Source file is en_US - oauth
    -ConfigOAuth=Oauth Configuration
    +ConfigOAuth=Oauth configuratie
     OAuthServices=OAuth services
    -ManualTokenGeneration=Manual token generation
    +ManualTokenGeneration=Handmatig aanmaken token
     TokenManager=Token manager
    -IsTokenGenerated=Is token generated ?
    -NoAccessToken=No access token saved into local database
    -HasAccessToken=A token was generated and saved into local database
    -NewTokenStored=Token received and saved
    -ToCheckDeleteTokenOnProvider=Click here to check/delete authorization saved by %s OAuth provider
    -TokenDeleted=Token deleted
    -RequestAccess=Click here to request/renew access and receive a new token to save
    -DeleteAccess=Click here to delete token
    -UseTheFollowingUrlAsRedirectURI=Use the following URL as the Redirect URI when creating your credential on your OAuth provider:
    -ListOfSupportedOauthProviders=Enter here credential provided by your OAuth2 provider. Only supported OAuth2 providers are visible here. This setup may be used by other modules that need OAuth2 authentication.
    -OAuthSetupForLogin=Page to generate an OAuth token
    -SeePreviousTab=See previous tab
    -OAuthIDSecret=OAuth ID and Secret
    -TOKEN_REFRESH=Token Refresh Present
    -TOKEN_EXPIRED=Token expired
    -TOKEN_EXPIRE_AT=Token expire at
    -TOKEN_DELETE=Delete saved token
    +IsTokenGenerated=Is token aangemaakt?
    +NoAccessToken=Token voor toegang is niet opgeslagen in locale database
    +HasAccessToken=Token is gegenereerd en opgeslagen in locale database
    +NewTokenStored=Token ontvangen en opgeslagen
    +ToCheckDeleteTokenOnProvider=Klik hier om de autorisatie te controleren/verwijderen die is opgeslagen door%sOAuth-provider
    +TokenDeleted=Token verwijderd
    +RequestAccess=Klik hier voor her-opvragen/vernieuwen van toegang en ontvang een nieuw token te bewaren.
    +DeleteAccess=Klik hier om token te verwijderen
    +UseTheFollowingUrlAsRedirectURI=Gebruik de volgende URL als omleidings-URI bij het maken van uw referentie op uw OAuth-provider:
    +ListOfSupportedOauthProviders=Voer hier de inloggegevens in die zijn verstrekt door uw OAuth2-provider. Alleen ondersteunde OAuth2-providers zijn hier zichtbaar. Deze setup kan worden gebruikt door andere modules die OAuth2-authenticatie nodig hebben.
    +OAuthSetupForLogin=Pagina om Oauth token te genereren
    +SeePreviousTab=Zie vorige tab
    +OAuthIDSecret=OAuth ID en Secret
    +TOKEN_REFRESH=Token Vernieuw aanwezig
    +TOKEN_EXPIRED=Token verlopen
    +TOKEN_EXPIRE_AT=Token verloopt op
    +TOKEN_DELETE=Verwijder opgeslagen token
     OAUTH_GOOGLE_NAME=Oauth Google service
     OAUTH_GOOGLE_ID=Oauth Google Id
     OAUTH_GOOGLE_SECRET=Oauth Google Secret
    -OAUTH_GOOGLE_DESC=Go on <a class="notasortlink" href="https://console.developers.google.com/" target="_blank">this page</a> then "Credentials" to create Oauth credentials
    +OAUTH_GOOGLE_DESC=Ga op <a class="notasortlink" href="https://console.developers.google.com/" target="_blank"> deze pagina </a> en vervolgens 'Credentials' om Oauth-inloggegevens te maken
     OAUTH_GITHUB_NAME=Oauth GitHub service
     OAUTH_GITHUB_ID=Oauth GitHub Id
     OAUTH_GITHUB_SECRET=Oauth GitHub Secret
    -OAUTH_GITHUB_DESC=Go on <a class="notasortlink" href="https://github.com/settings/developers" target="_blank">this page</a> then "Register a new application" to create Oauth credentials
    +OAUTH_GITHUB_DESC=Ga op <a class="notasortlink" href="https://github.com/settings/developers" target="_blank"> deze pagina </a> en vervolgens "Registreer een nieuwe applicatie" om Oauth-inloggegevens te maken
    diff --git a/htdocs/langs/nl_NL/other.lang b/htdocs/langs/nl_NL/other.lang
    index 4b5fab799ac..3538c25c87e 100644
    --- a/htdocs/langs/nl_NL/other.lang
    +++ b/htdocs/langs/nl_NL/other.lang
    @@ -3,13 +3,13 @@ SecurityCode=Beveiligingscode
     NumberingShort=N °
     Tools=Gereedschap
     TMenuTools=Gereedschap
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Verjaardag
     BirthdayDate=Geboorte datum
     DateToBirth=Geboortedatum
     BirthdayAlertOn=Verjaardagskennisgeving actief
     BirthdayAlertOff=Verjaardagskennisgeving inactief
    -TransKey=Translation of the key TransKey
    +TransKey=Vertaling van de sleutel TransKey
     MonthOfInvoice=Maand (nummer 1-12) van factuurdatum
     TextMonthOfInvoice=Maand (tekst) van factuurdatum
     PreviousMonthOfInvoice=Vorige maand (nummer 1-12) van factuurdatum
    @@ -18,31 +18,28 @@ NextMonthOfInvoice=Volgende maand (nummer 1-12) van factuurdatum
     TextNextMonthOfInvoice=Volgende maand (tekst) van factuurdatum
     ZipFileGeneratedInto=ZIP bestand aangemaakt in <b>%s</b>.
     DocFileGeneratedInto=Doc-bestand aangemaakt in <b>%s</b>.
    -JumpToLogin=Disconnected. Go to login page...
    -MessageForm=Message on online payment form
    +JumpToLogin=Verbinding verbroken. Ga naar het loginscherm...
    +MessageForm=Bericht op online betalingsformulier
     MessageOK=Bericht opde  bevestigingspagina van een gevalideerde betaling
     MessageKO=Bericht op de bevestigingspagina van een geannuleerde betaling
    -ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +ContentOfDirectoryIsNotEmpty=De inhoud van deze map is niet leeg.
    +DeleteAlsoContentRecursively=Vink aan om alle inhoud recursief te verwijderen
     
     YearOfInvoice=Jaar van factuurdatum
     PreviousYearOfInvoice=Voorgaand jaar van factuurdatum
     NextYearOfInvoice=Volgend jaar van factuurdatum
    -DateNextInvoiceBeforeGen=Date of next invoice (before generation)
    -DateNextInvoiceAfterGen=Date of next invoice (after generation)
    +DateNextInvoiceBeforeGen=Datum volgende factuur (vóór productie)
    +DateNextInvoiceAfterGen=Datum van de volgende factuur (na genereren)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Interventie gevalideerd
    -Notify_FICHINTER_SENTBYMAIL=Interventie via mail verzonden
     Notify_ORDER_VALIDATE=Bestelling van de klant gevalideerd
     Notify_ORDER_SENTBYMAIL=Bestelling van de klant per e-mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Leverancier bestellen per e-mail
    -Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
    +Notify_ORDER_SUPPLIER_VALIDATE=Leverancier bestelling opgeslagen
     Notify_ORDER_SUPPLIER_APPROVE=Leverancier te zijn goedgekeurd
     Notify_ORDER_SUPPLIER_REFUSE=Leverancier bestellen geweigerd
     Notify_PROPAL_VALIDATE=Klant voorstel gevalideerd
    -Notify_PROPAL_CLOSE_SIGNED=Klant offerte gesloten en ondertekend
    -Notify_PROPAL_CLOSE_REFUSED=Klant offerte gesloten en geweigerd
    +Notify_PROPAL_CLOSE_SIGNED=Klant voorstel ondertekend afgesloten
    +Notify_PROPAL_CLOSE_REFUSED=Klant voorstel afwezen afgesloten
     Notify_PROPAL_SENTBYMAIL=Commercieel voorstel per e-mail
     Notify_WITHDRAW_TRANSMIT=Transmissie terugtrekking
     Notify_WITHDRAW_CREDIT=Credit terugtrekking
    @@ -60,6 +57,8 @@ Notify_BILL_SUPPLIER_SENTBYMAIL=Leverancier verzonden factuur per post
     Notify_BILL_SUPPLIER_CANCELED=Leverancier factuur geannuleerd
     Notify_CONTRACT_VALIDATE=Contract gevalideerd
     Notify_FICHEINTER_VALIDATE=Interventie gevalideerd
    +Notify_FICHINTER_ADD_CONTACT=Contact toegevoegd aan Intervention
    +Notify_FICHINTER_SENTBYMAIL=Interventie via mail verzonden
     Notify_SHIPPING_VALIDATE=Verzenden gevalideerd
     Notify_SHIPPING_SENTBYMAIL=Verzenden per e-mail
     Notify_MEMBER_VALIDATE=Lid gevalideerd
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Creatie project
     Notify_TASK_CREATE=Taak gemaakt
     Notify_TASK_MODIFY=Taak gewijzigd
     Notify_TASK_DELETE=Taak verwijderd
    +Notify_EXPENSE_REPORT_VALIDATE=Onkosten rapport gevalideerd (goedkeuring vereist)
    +Notify_EXPENSE_REPORT_APPROVE=Onkosten rapport goedgekeurd
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Aantal bijgevoegde bestanden / documenten
     TotalSizeOfAttachedFiles=Totale omvang van de bijgevoegde bestanden / documenten
     MaxSize=Maximale grootte
     AttachANewFile=Voeg een nieuw bestand / document bij
     LinkedObject=Gekoppeld object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Geachte)__\n\nU ontvangt hierbij order  __REF__\n\n\n__(Hoogachtend)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -105,11 +108,11 @@ CreatedBy=Gecreëerd door %s
     ModifiedBy=Gewijzigd door %s
     ValidatedBy=Gevalideerd door %s
     ClosedBy=Gesloten door %s
    -CreatedById=User id who created
    +CreatedById=Aangemaakt door gebruiker ID
     ModifiedById=Gebruikers-ID van diegene die de laatste wijziging heeft aangebracht
    -ValidatedById=User id who validated
    -CanceledById=User id who canceled
    -ClosedById=User id who closed
    +ValidatedById=Gevalideerd door gebruiker ID
    +CanceledById=Afgebroken door gebruiker ID
    +ClosedById=Gesloten door gebruiker ID
     CreatedByLogin=User login who created
     ModifiedByLogin=Gebruikerslogin van diegene die de laatste wijziging heeft aangebracht
     ValidatedByLogin=User login who validated
    @@ -118,7 +121,7 @@ ClosedByLogin=User login who closed
     FileWasRemoved=Bestand %s is verwijderd
     DirWasRemoved=Map %s is verwijderd
     FeatureNotYetAvailable=Onderdeel nog niet beschikbaar in huidige versie
    -FeaturesSupported=Supported features
    +FeaturesSupported=Ondersteunde functies
     Width=Breedte
     Height=Hoogte
     Depth=Diepte
    @@ -129,7 +132,7 @@ Right=Rechts
     CalculatedWeight=Berekend gewicht
     CalculatedVolume=Berekend volume
     Weight=Gewicht
    -WeightUnitton=tonne
    +WeightUnitton=ton
     WeightUnitkg=kg
     WeightUnitg=g
     WeightUnitmg=mg
    @@ -168,26 +171,27 @@ BugTracker=Bug tracker
     SendNewPasswordDesc=This form allows you to request a new password. It will be sent to your email address.<br>Change will become effective once you click on the confirmation link in the email.<br>Check your inbox.
     BackToLoginPage=Terug naar de inlogpagina
     AuthenticationDoesNotAllowSendNewPassword=Authenticatiemodus is <b>%s</b>.<br>In deze modus kan Dolibarr uw wachtwoord niet weten of wijzigen.<br>Neem contact op met uw systeembeheerder als u uw wachtwoord  wilt wijzigen.
    -EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use this option.
    +EnableGDLibraryDesc=Installeer of schakel GD-bibliotheek op uw PHP-installatie in om deze optie te gebruiken.
     ProfIdShortDesc=Prof. id <b>%s</b> is een gegeven afhankelijk van het land.<br>Voor land <b>%s</b>, is de code bijvoorbeeld <b>%s</b>.
     DolibarrDemo=Dolibarr ERP / CRM demonstratie
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    -NumberOfProposals=Number of proposals
    -NumberOfCustomerOrders=Number of customer orders
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
    +NumberOfProposals=Aantal voorstellen
    +NumberOfCustomerOrders=Aantal klantenorders
     NumberOfCustomerInvoices=Aantal klant facturen
    -NumberOfSupplierProposals=Number of supplier proposals
    -NumberOfSupplierOrders=Number of supplier orders
    -NumberOfSupplierInvoices=Number of supplier invoices
    -NumberOfUnitsProposals=Number of units on proposals
    -NumberOfUnitsCustomerOrders=Number of units on customer orders
    +NumberOfSupplierProposals=Aantal voorstellen van leveranciers
    +NumberOfSupplierOrders=Aantal leverancierorders
    +NumberOfSupplierInvoices=Aantal leverancier facturen
    +NumberOfUnitsProposals=Aantal eenheden in voorstel
    +NumberOfUnitsCustomerOrders=Aantal eenheden in klant orders
     NumberOfUnitsCustomerInvoices=Aantal eenheden op klant facturen
    -NumberOfUnitsSupplierProposals=Number of units on supplier proposals
    -NumberOfUnitsSupplierOrders=Number of units on supplier orders
    -NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +NumberOfUnitsSupplierProposals=Aantal eenheden in leverancier voorstellen
    +NumberOfUnitsSupplierOrders=Aantal eenheden in leverancier orders
    +NumberOfUnitsSupplierInvoices=Aantal eenheden van leverancier facturen
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=De interventie %s is gevalideerd
     EMailTextInvoiceValidated=De factuur %s is gevalideerd
    +EMailTextInvoicePayed=Factuur %s is betaald.
     EMailTextProposalValidated=De offerte %s is gevalideerd.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=De opdracht %s is gevalideerd.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=De order %s is goedgekeuerd door %s.
     EMailTextOrderRefused=De order %s is geweigerd.
     EMailTextOrderRefusedBy=De order %s is geweigerd door %s.
     EMailTextExpeditionValidated=De verzending %s is gevalideerd.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Invoer dataset
     DolibarrNotification=Automatische kennisgeving
     ResizeDesc=Voer een nieuwe breedte <b>of</b> nieuwe hoogte in. Verhoudingen zullen intact blijven tijdens het schalen
    @@ -204,7 +212,7 @@ NewLength=Nieuwe breedte
     NewHeight=Nieuwe hoogte
     NewSizeAfterCropping=Nieuwe grootte na bijsnijden
     DefineNewAreaToPick=Selecteer nieuwe gebied van de afbeelding om te gebruiken (klik links op de afbeelding en sleep totdat u bij de tegenoverliggende hoek bent aangekomen)
    -CurrentInformationOnImage=Deze tool is ontworpen om u te helpen bij het schalen van een afbeelding. Dit is informatie over de afbeelding die bewerkt wordt
    +CurrentInformationOnImage=Deze tool is ontworpen om u te helpen bij het verkleinen of bijsnijden van een afbeelding. Dit is de informatie over de huidige bewerkte afbeelding
     ImageEditor=Beeldbewerkingsprogramma
     YouReceiveMailBecauseOfNotification=U ontvangt dit bericht omdat uw e-mail is opgenomen in een lijst van geaddresseerden die geïnformeerd dienen te worden over bepaalde gebeurtenissen in de software van %s %s.
     YouReceiveMailBecauseOfNotification2=Deze gebeurtenis is de volgende:
    @@ -217,8 +225,8 @@ StartUpload=Start uploaden
     CancelUpload=Uploaden annuleren
     FileIsTooBig=Bestanden is te groot
     PleaseBePatient=Even geduld a.u.b.
    -NewPassword=New password
    -ResetPassword=Reset password
    +NewPassword=Nieuw wachtwoord
    +ResetPassword=Wachtwoord opnieuw instellen
     RequestToResetPasswordReceived=A request to change your password has been received.
     NewKeyIs=Dit is uw nieuwe sleutel om in te loggen
     NewKeyWillBe=Uw nieuwe sleutel in te loggen zal zijn
    @@ -227,26 +235,30 @@ YouMustClickToChange=Je moet echter wel eerst klikken op de volgende link om de
     ForgetIfNothing=Als u deze wijziging niet heeft aangevraagd, negeer deze e-mail. Uw referenties blijven veilig bewaard.
     IfAmountHigherThan=If amount higher than <strong>%s</strong>
     SourcesRepository=Repository for sources
    -Chart=Chart
    -PassEncoding=Password encoding
    -PermissionsAdd=Permissions added
    -PermissionsDelete=Permissions removed
    -YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</strong> chars
    -YourPasswordHasBeenReset=Your password has been reset successfully
    -ApplicantIpAddress=IP address of applicant
    -SMSSentTo=SMS sent to %s
    +Chart=Tabel
    +PassEncoding=Wachtwoord codering
    +PermissionsAdd=Rechten toegevoegd
    +PermissionsDelete=Rechten verwijderd
    +YourPasswordMustHaveAtLeastXChars=Uw wachtwoord moet minimaal <strong>%s</strong> karakters bevatten
    +YourPasswordHasBeenReset=Uw wachtwoord is met succes gereset
    +ApplicantIpAddress=IP-adres van aanvrager
    +SMSSentTo=SMS verzonden naar %s
    +MissingIds=Missende ID's
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Uitvoeroverzicht
     AvailableFormats=Beschikbare formaten
     LibraryUsed=Gebruikte bibliotheek
    -LibraryVersion=Library version
    +LibraryVersion=Bibliotheek versie
     ExportableDatas=Exporteerbare gegevens
     NoExportableData=Geen exporteerbare gegevens (geen modules met exporteerbare gegevens geladen, of niet genoeg rechten)
     ##### External sites #####
    -WebsiteSetup=Setup of module website
    -WEBSITE_PAGEURL=URL of page
    +WebsiteSetup=Installatie van module website
    +WEBSITE_PAGEURL=URL van pagina
     WEBSITE_TITLE=Titel
     WEBSITE_DESCRIPTION=Omschrijving
    -WEBSITE_KEYWORDS=Keywords
    +WEBSITE_KEYWORDS=Sleutelwoorden
     LinesToImport=Regels om te importeren
    diff --git a/htdocs/langs/nl_NL/paybox.lang b/htdocs/langs/nl_NL/paybox.lang
    index 01c1584c7d7..489158a2dda 100644
    --- a/htdocs/langs/nl_NL/paybox.lang
    +++ b/htdocs/langs/nl_NL/paybox.lang
    @@ -3,14 +3,14 @@ PayBoxSetup=PayBox module instellen
     PayBoxDesc=Deze module bied pagina's om betalingen via <a href="http://www.paybox.com" target="_blank">Paybox</a> mogelijk te maken door afnemers. Dit kan gebruikt worden voor een vrije betaling (donatie) of voor een specifiek Dolibarr object (factuur, order, etc)
     FollowingUrlAreAvailableToMakePayments=De volgende URL's zijn beschikbaar om een pagina te bieden aan afnemers voor het doen van een betaling van Dolibarr objecten
     PaymentForm=Betalingsformulier
    -WelcomeOnPaymentPage=Welkom bij onze online betalingsdienst
    +WelcomeOnPaymentPage=Welkom bij onze online betaaldienst
     ThisScreenAllowsYouToPay=Dit scherm staat u toe om een online betaling te doen aan %s
     ThisIsInformationOnPayment=Informatie over de nog uit te voeren betalingen
     ToComplete=Nog te doen
     YourEMail=E-mail om betalingsbevestiging te ontvangen
     Creditor=Crediteur
     PaymentCode=Betalingscode
    -PayBoxDoPayment=Pay with Credit or Debit Card (Paybox)
    +PayBoxDoPayment=Betalen met prepaid creditcard (Paybox)
     ToPay=Doe een betaling
     YouWillBeRedirectedOnPayBox=U wordt doorverwezen naar een beveiligde Paybox pagina om uw credit card informatie in te voeren
     Continue=Volgende
    @@ -21,18 +21,18 @@ ToOfferALinkForOnlinePaymentOnContractLine=URL om een %s online betalingsgebruik
     ToOfferALinkForOnlinePaymentOnFreeAmount=URL om een %s online betalingsgebruikersinterface aan te bieden voor een donatie
     ToOfferALinkForOnlinePaymentOnMemberSubscription=URL om een %s online betalingsgebruikersinterface aan te bieden voor een ledenabonnement
     YouCanAddTagOnUrl=U kunt ook een URL (GET) parameter <b>&tag=<i>waarde</i></b> toevoegen aan elk van deze URL's (enkel nodig voor een donatie) om deze van uw eigen betalingscommentaar te voorzien
    -SetupPayBoxToHavePaymentCreatedAutomatically=Stel uw PayBox met url <b>%s</b> in om een betaling automatisch te maken zodra de betalings is gevallideerd door paybox.
    +SetupPayBoxToHavePaymentCreatedAutomatically=Stel uw Paybox in met url <b> %s </b> om de betaling automatisch te laten aanmaken na validatie door Paybox.
     YourPaymentHasBeenRecorded=Deze pagina bevestigd dat uw betaling succesvol in geregistreerd. Dank u.
    -YourPaymentHasNotBeenRecorded=Uw betaling is niet geregistreerd en de transactie is geannuleerd. Dank u.
    +YourPaymentHasNotBeenRecorded=Uw betaling is NIET geboekt en de transactie is geannuleerd. Dankuwel.
     AccountParameter=Accountwaarden
     UsageParameter=Met gebruik van de waarden
     InformationToFindParameters=Hulp om uw %s accountinformatie te vinden
     PAYBOX_CGI_URL_V2=URL van de Paybox CGI module voor betalingen
     VendorName=Verkopersnaam
     CSSUrlForPaymentForm=URL van het CSS-stijlbestand voor het betalingsformulier
    -NewPayboxPaymentReceived=New Paybox payment received
    -NewPayboxPaymentFailed=New Paybox payment tried but failed
    -PAYBOX_PAYONLINE_SENDEMAIL=EMail to warn after a payment (success or failed)
    -PAYBOX_PBX_SITE=Value for PBX SITE
    -PAYBOX_PBX_RANG=Value for PBX Rang
    -PAYBOX_PBX_IDENTIFIANT=Value for PBX ID
    +NewPayboxPaymentReceived=Betaling met Paybox ontvangen
    +NewPayboxPaymentFailed=Poging te betalen met Paybox mislukt
    +PAYBOX_PAYONLINE_SENDEMAIL=E-mail na betaling (geslaagd of mislukt)
    +PAYBOX_PBX_SITE=Waarde PBX SITE
    +PAYBOX_PBX_RANG=Waarde PBX Rang
    +PAYBOX_PBX_IDENTIFIANT=Waarde PBX ID
    diff --git a/htdocs/langs/nl_NL/printing.lang b/htdocs/langs/nl_NL/printing.lang
    index f62c1a6a01e..123e3fbf68a 100644
    --- a/htdocs/langs/nl_NL/printing.lang
    +++ b/htdocs/langs/nl_NL/printing.lang
    @@ -2,38 +2,38 @@
     Module64000Name=Direct afdrukken
     Module64000Desc=Direct afdruksysteem inschakelen
     PrintingSetup=Installatie van Direct Printing System
    -PrintingDesc=This module adds a Print button to send documents directly to a printer (without opening document into an application) with various module.
    +PrintingDesc=Deze module voegt een afdrukknop toe aan verschillende modules zodat documenten rechtstreeks naar een printer kunnen worden afgedrukt zonder dat het document in een andere toepassing hoeft te worden geopend.
     MenuDirectPrinting=Directe print opdrachten
     DirectPrint=Direct afdrukken
    -PrintingDriverDesc=Configuration variables for printing driver.
    +PrintingDriverDesc=Configuratievariabelen voor printerdriver.
     ListDrivers=Lijst met stuurprogramma's
     PrintTestDesc=Lijst met printers.
    -FileWasSentToPrinter=File %s was sent to printer
    -ViaModule=via the module
    -NoActivePrintingModuleFound=No active driver to print document. Check setup of module %s.
    -PleaseSelectaDriverfromList=Please select a driver from list.
    -PleaseConfigureDriverfromList=Please configure the selected driver from list.
    -SetupDriver=Driver setup
    -TargetedPrinter=Targeted printer
    -UserConf=Setup per user
    +FileWasSentToPrinter=Bestand %s is naar de printer verzonden
    +ViaModule=via de module
    +NoActivePrintingModuleFound=Geen actieve driver om document af te drukken. Controleer de instellingen van module %s.
    +PleaseSelectaDriverfromList=Selecteer een stuurprogramma uit de lijst.
    +PleaseConfigureDriverfromList=Configureer het geselecteerde stuurprogramma in de lijst.
    +SetupDriver=Stuurprogramma instellen
    +TargetedPrinter=Gekozen printer
    +UserConf=Instellen per gebruiker
     PRINTGCP_INFO=Google OAuth API setup
     PRINTGCP_AUTHLINK=Authenticatie
     PRINTGCP_TOKEN_ACCESS=Google Cloud Print OAuth-token
    -PrintGCPDesc=This driver allow to send documents directly to a printer with Google Cloud Print.
    +PrintGCPDesc=Met dit stuurprogramma kunt u documenten rechtstreeks naar een printer verzenden met Google Cloudprinter.
     GCP_Name=Achternaam
    -GCP_displayName=Display Name
    -GCP_Id=Printer Id
    -GCP_OwnerName=Owner Name
    +GCP_displayName=Weergavenaam
    +GCP_Id=Printer-ID
    +GCP_OwnerName=Naam eigenaar
     GCP_State=Printerstatus
    -GCP_connectionStatus=Online State
    +GCP_connectionStatus=Online status
     GCP_Type=Printer Type
    -PrintIPPDesc=This driver allow to send documents directly to a printer. It requires a Linux system with CUPS installed.
    -PRINTIPP_HOST=Print server
    +PrintIPPDesc=Met dit stuurprogramma kunnen documenten rechtstreeks naar een printer worden verzonden. Het vereist een Linux-systeem waarop CUPS is geïnstalleerd.
    +PRINTIPP_HOST=Printserver
     PRINTIPP_PORT=Poort
     PRINTIPP_USER=Login
     PRINTIPP_PASSWORD=Wachtwoord
    -NoDefaultPrinterDefined=No default printer defined
    -DefaultPrinter=Default printer
    +NoDefaultPrinterDefined=Geen standaardprinter gedefinieerd
    +DefaultPrinter=Standaard printer
     Printer=Printer
     IPP_Uri=Printer Uri
     IPP_Name=Printernaam
    @@ -45,10 +45,10 @@ IPP_Color=Kleur
     IPP_Device=Apparaat
     IPP_Media=Printer media
     IPP_Supported=Soort media
    -DirectPrintingJobsDesc=This page lists printing jobs found for available printers.
    -GoogleAuthNotConfigured=Google OAuth setup not done. Enable module OAuth and set a Google ID/Secret.
    -GoogleAuthConfigured=Google OAuth credentials were found into setup of module OAuth.
    -PrintingDriverDescprintgcp=Configuration variables for printing driver Google Cloud Print.
    -PrintingDriverDescprintipp=Configuration variables for printing driver Cups.
    -PrintTestDescprintgcp=List of Printers for Google Cloud Print.
    -PrintTestDescprintipp=List of Printers for Cups.
    +DirectPrintingJobsDesc=Deze pagina geeft een overzicht van de afdruktaken die voor beschikbare printers zijn gevonden.
    +GoogleAuthNotConfigured=Google OAuth-installatie niet voltooid. Schakel OAuth-module in en stel een Google ID / geheim in.
    +GoogleAuthConfigured=OAuth-referenties van Google zijn gevonden bij het instellen van de module OAuth.
    +PrintingDriverDescprintgcp=Configuratievariabelen voor het afdrukken van stuurprogramma Google Cloudprinter.
    +PrintingDriverDescprintipp=Configuratievariabelen voor het afdrukken van Driver Cups.
    +PrintTestDescprintgcp=Lijst met printers voor Google Cloudprinter.
    +PrintTestDescprintipp=Lijst met printers voor Cups.
    diff --git a/htdocs/langs/nl_NL/productbatch.lang b/htdocs/langs/nl_NL/productbatch.lang
    index 392837c87bf..3c77db06fef 100644
    --- a/htdocs/langs/nl_NL/productbatch.lang
    +++ b/htdocs/langs/nl_NL/productbatch.lang
    @@ -16,7 +16,7 @@ printEatby=Verval: %s
     printSellby=Verkoop: %s
     printQty=Aantal: %d
     AddDispatchBatchLine=Voeg een regel toe voor houdbaarheids ontvangst
    -WhenProductBatchModuleOnOptionAreForced=When module Lot/Serial is on, automatic stock decrease  is forced to 'Decrease real stocks on shipping validation' and automatic increase mode is forced to 'Increase real stocks on manual dispatching into warehouses' and can't be edited. Other options can be defined as you want.
    +WhenProductBatchModuleOnOptionAreForced=Wanneer module Lot / Serie is ingeschakeld, wordt de automatische voorraadafname gedwongen om 'werkelijke voorraad bij de verzendvalidatie te verlagen' en wordt de automatische toenamemodus gedwongen om 'Verhoog voorraad bij handmatig verzenden naar magazijnen ' te verhogen en kan deze niet worden bewerkt. Andere opties kunnen worden gedefinieerd zoals u dat wilt.
     ProductDoesNotUseBatchSerial=Dit product maakt geen gebruik van lot/serial nummer
     ProductLotSetup=Module instellingen voor lot/serial
     ShowCurrentStockOfLot=Toon huidige voorraad voor product/lot paar
    diff --git a/htdocs/langs/nl_NL/projects.lang b/htdocs/langs/nl_NL/projects.lang
    index d6259b07337..37063ab4235 100644
    --- a/htdocs/langs/nl_NL/projects.lang
    +++ b/htdocs/langs/nl_NL/projects.lang
    @@ -7,10 +7,10 @@ ProjectsArea=Project omgeving
     ProjectStatus=Project status
     SharedProject=Iedereen
     PrivateProject=Projectcontacten
    -ProjectsImContactFor=Projects I'm explicitely a contact of
    -AllAllowedProjects=All project I can read (mine + public)
    +ProjectsImContactFor=Projecten waar ik expliciet een contactpersoon van ben
    +AllAllowedProjects=Alle projecten die ik kan lezen (mine + public)
     AllProjects=Alle projecten
    -MyProjectsDesc=This view is limited to projects you are a contact for
    +MyProjectsDesc=Deze weergave is beperkt tot projecten waarvan u een contactpersoon bent
     ProjectsPublicDesc=Deze weergave toont alle projecten waarvoor u gerechtigd bent deze in te zien.
     TasksOnProjectsPublicDesc=Dit overzicht laat alle taken zien van projecten waarvoor u gemachtigd bent.
     ProjectsPublicTaskDesc=Deze weergave toont alle projecten en taken die je mag lezen.
    @@ -32,15 +32,15 @@ DeleteATask=Taak verwijderen
     ConfirmDeleteAProject=Weet u zeker dat u dit project wilt verwijderen?
     ConfirmDeleteATask=Weet u zeker dat u deze taak wilt verwijderen?
     OpenedProjects=Projecten in bewerking
    -OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Kansen bij projecten in bewerking per status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpenedTasks=Open taken
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Toon project
     ShowTask=Toon taak
     SetProject=Stel project in
     NoProject=Geen enkel project gedefinieerd of in eigendom
    -NbOfProjects=Aantal projecten
    -NbOfTasks=Aantal taken
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Bestede tijd
     TimeSpentByYou=Uw tijdsbesteding
     TimeSpentByUser=Gebruikers tijdsbesteding
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Lijst van aan het project verbonden offertes
    -ListOrdersAssociatedProject=Lijst met relaties gekoppeld aan dit project
    -ListInvoicesAssociatedProject=Lijst met facturen gekoppeld aan dit project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Lijst van aan het project verbonden contracten
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Lijst van aan het project verbonden interventies
    -ListExpenseReportsAssociatedProject=Lijst van onkostennota's in verband met het project
    -ListDonationsAssociatedProject=Lijst van donaties in verband met het project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Lijst van aan het project verbonden acties
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s aangepast
     TaskCreatedInDolibarr=Taak %s gecreëerd
     TaskModifiedInDolibarr=Taak %s gewijzigd
     TaskDeletedInDolibarr=Taak %s verwijderd
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. bedrag
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Inzender
     SelectElement=Kies een element
     AddElement=Koppeling naar element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Geplande workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Gerelateerde items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Taken toegekend aan gebruiker
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Taken toegekend aan
     AssignTaskToMe=Taak aan mij toewijzen
    @@ -189,25 +192,26 @@ AssignTaskToUser=Ken taak toe aan %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Toewijzen
     ProjectOverview=Overzicht
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Aantal nieuwe projecten per maand
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Aantal kansen per maand
    -ProjectWeightedOppAmountOfProjectsByMonth=Gewogen aantal kansen per maand
    -ProjectOpenedProjectByOppStatus=Open project/lead op status van kans
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Projecten/leads statistieken
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Projecten in bewerking bij relaties
    -OnlyOpportunitiesShort=Alleen kansen
    -OpenedOpportunitiesShort=Open kansen
    -NotAnOpportunityShort=Geen kans
    -OpportunityTotalAmount=Totaalbedrag aan kansen
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospectie
     OppStatusQUAL=Kwalificatie
     OppStatusPROPO=Offerte
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/nl_NL/propal.lang b/htdocs/langs/nl_NL/propal.lang
    index 2cba7222128..fc3b8010737 100644
    --- a/htdocs/langs/nl_NL/propal.lang
    +++ b/htdocs/langs/nl_NL/propal.lang
    @@ -33,7 +33,7 @@ PropalStatusSigned=Ondertekend (te factureren)
     PropalStatusNotSigned=Niet ondertekend (gesloten)
     PropalStatusBilled=Gefactureerd
     PropalStatusDraftShort=Concept
    -PropalStatusValidatedShort=Gevalideerd
    +PropalStatusValidatedShort=Gevalideerd (open)
     PropalStatusClosedShort=Gesloten
     PropalStatusSignedShort=Ondertekend
     PropalStatusNotSignedShort=Niet ondertekend
    @@ -53,7 +53,7 @@ ErrorPropalNotFound=Offerte %s niet gevonden
     AddToDraftProposals=Toevoegen aan ontwerp offerte
     NoDraftProposals=Geen ontwerpoffertes
     CopyPropalFrom=Maak offerte door het kopiëren van een bestaande offerte
    -CreateEmptyPropal=Creëer een lege offerte of uit de lijst van producten / diensten
    +CreateEmptyPropal=Maak een leeg commercieel voorstel of uit een lijst met producten / services
     DefaultProposalDurationValidity=Standaardgeldigheid offerte (in dagen)
     UseCustomerContactAsPropalRecipientIfExist=Gebruik,  indien ingesteld, het afnemerscontactadres als offerteontvangstadres in plaats van het adres van de Klant
     ClonePropal=Kloon offerte
    @@ -75,9 +75,10 @@ AvailabilityTypeAV_1M=1 maand
     TypeContact_propal_internal_SALESREPFOLL=Vertegenwoordiger die de follow-up van de offerte doet
     TypeContact_propal_external_BILLING=Afnemersfactuurcontactpersoon
     TypeContact_propal_external_CUSTOMER=Afnemerscontactpersoon follow-up voorstel
    -TypeContact_propal_external_SHIPPING=Customer contact for delivery
    +TypeContact_propal_external_SHIPPING=Klant contact voor levering
     # Document models
     DocModelAzurDescription=Een compleet offertemodel (logo, etc)
    +DocModelCyanDescription=Een compleet offertemodel (logo, etc)
     DefaultModelPropalCreate=Standaard model aanmaken
     DefaultModelPropalToBill=Standaard sjabloon bij het sluiten van een zakelijk voorstel (te factureren)
     DefaultModelPropalClosed=Standaard sjabloon bij het sluiten van een zakelijk voorstel (nog te factureren)
    diff --git a/htdocs/langs/nl_NL/resource.lang b/htdocs/langs/nl_NL/resource.lang
    index 5eefd6441e4..effac7469e0 100644
    --- a/htdocs/langs/nl_NL/resource.lang
    +++ b/htdocs/langs/nl_NL/resource.lang
    @@ -5,7 +5,7 @@ DeleteResource=Verwijder resource
     ConfirmDeleteResourceElement=Bevestig het verwijderen van de resource voor dit element
     NoResourceInDatabase=Geen resource in de database
     NoResourceLinked=Geen gelinkte resource
    -
    +ActionsOnResource=Gebeurtenissen over deze bron
     ResourcePageIndex=Resource lijst
     ResourceSingular=Resource
     ResourceCard=Resource kaart
    diff --git a/htdocs/langs/nl_NL/salaries.lang b/htdocs/langs/nl_NL/salaries.lang
    index 77c714ed739..c543aeb94a9 100644
    --- a/htdocs/langs/nl_NL/salaries.lang
    +++ b/htdocs/langs/nl_NL/salaries.lang
    @@ -1,10 +1,11 @@
     # Dolibarr language file - Source file is en_US - salaries
     SALARIES_ACCOUNTING_ACCOUNT_PAYMENT=Grootboekrekening voor medewerker derde partij
    -SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=De toegewezen grootboekrekening welke is vastgelegd bij de medewerker, zal alleen gebruikt in de sub-boekhouding. Deze grootboekrekening zal worden gebruikt in de -boekhouding indien de toegewezen gebruikers grootboekrekening bij de medewerker niet is gedefinieerd.
    +SALARIES_ACCOUNTING_ACCOUNT_PAYMENT_Desc=De specifieke account die op de gebruikerskaart is gedefinieerd, wordt alleen voor de boekhouding van subgrootboek gebruikt. Deze wordt gebruikt voor grootboek en als standaardwaarde voor subgrootboek-boekhouding als specifieke gebruikersaccount voor de account op gebruiker niet is gedefinieerd.
     SALARIES_ACCOUNTING_ACCOUNT_CHARGE=Standaard grootboekrekening voor salaris betalingen
     Salary=Salaris
     Salaries=Salarissen
     NewSalaryPayment=Nieuwe salarisbetaling
    +AddSalaryPayment=Salarisbetaling toevoegen
     SalaryPayment=Salarisbetaling
     SalariesPayments=Salarissen betalingen
     ShowSalaryPayment=Toon salarisbetaling
    @@ -15,4 +16,4 @@ THMDescription=Deze waarde kan worden gebruikt om de kosten te berekenen van de
     TJMDescription=Deze waarde is momenteel alleen voor informatie en wordt niet gebruikt in een berekening
     LastSalaries=Laatste %s salaris betalingen
     AllSalaries=Alle salarisbetalingen
    -SalariesStatistics=Statistiques salaires
    +SalariesStatistics=Salarisstatistieken
    diff --git a/htdocs/langs/nl_NL/sendings.lang b/htdocs/langs/nl_NL/sendings.lang
    index b0bf8416a45..b1f26e0fd36 100644
    --- a/htdocs/langs/nl_NL/sendings.lang
    +++ b/htdocs/langs/nl_NL/sendings.lang
    @@ -6,7 +6,7 @@ AllSendings=Alle zendingen
     Shipment=Verzending
     Shipments=Verzendingen
     ShowSending=Toon zendingen
    -Receivings=Delivery Receipts
    +Receivings=Ontvangstbevestigingen
     SendingsArea=Zendingenoverzicht
     ListOfSendings=Verzendlijst
     SendingMethod=Verzendwijze
    @@ -19,14 +19,14 @@ NewSending=Nieuwe verzending
     CreateShipment=Creëer verzending
     QtyShipped=Aantal verzonden
     QtyShippedShort=Stk verz.
    -QtyPreparedOrShipped=Qty prepared or shipped
    +QtyPreparedOrShipped=Aantal bereid of verzonden
     QtyToShip=Aantal te verzenden
     QtyReceived=Aantal ontvangen
    -QtyInOtherShipments=Qty in other shipments
    +QtyInOtherShipments=Aantal in andere zendingen
     KeepToShip=Resterend te verzenden
    -KeepToShipShort=Remain
    +KeepToShipShort=Rest
     OtherSendingsForSameOrder=Andere verzendingen voor deze opdracht
    -SendingsAndReceivingForSameOrder=Shipments and receipts for this order
    +SendingsAndReceivingForSameOrder=Verzendingen en ontvangsten voor deze bestelling
     SendingsToValidate=Te valideren verzendingen
     StatusSendingCanceled=Geannuleerd
     StatusSendingDraft=Concept
    @@ -43,8 +43,8 @@ DocumentModelMerou=Merou A5 model
     WarningNoQtyLeftToSend=Waarschuwing, geen producten die op verzending wachten.
     StatsOnShipmentsOnlyValidated=Statistiek op verzendingen die bevestigd zijn.  Datum is de datum van bevestiging van de verzending (geplande leverdatum is niet altijd bekend).
     DateDeliveryPlanned=Verwachte leverdatum
    -RefDeliveryReceipt=Ref delivery receipt
    -StatusReceipt=Status delivery receipt
    +RefDeliveryReceipt=Ref-ontvangstbewijs
    +StatusReceipt=Status ontvangstbevestiging
     DateReceived=Datum leveringsonvangst
     SendShippingByEMail=Stuur verzending per e-mail
     SendShippingRef=Indiening van de zending %s
    @@ -52,13 +52,13 @@ ActionsOnShipping=Acions op verzendkosten
     LinkToTrackYourPackage=Link naar uw pakket
     ShipmentCreationIsDoneFromOrder=Op dit moment, is oprichting van een nieuwe zending gedaan van de volgorde kaart.
     ShipmentLine=Verzendingslijn
    -ProductQtyInCustomersOrdersRunning=Product quantity into open customer orders
    -ProductQtyInSuppliersOrdersRunning=Product quantity into open purchase orders
    -ProductQtyInShipmentAlreadySent=Product quantity from open customer order already sent
    -ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from open supplier order already received
    -NoProductToShipFoundIntoStock=No product to ship found into warehouse <b>%s</b>. Correct stock or go back to choose another warehouse.
    -WeightVolShort=Weight/Vol.
    -ValidateOrderFirstBeforeShipment=You must first validate the order before being able to make shipments.
    +ProductQtyInCustomersOrdersRunning=Hoeveelheid producten in openstaande klant bestellingen
    +ProductQtyInSuppliersOrdersRunning=Productaantallen in openstaande bestellingen bij leveranciers
    +ProductQtyInShipmentAlreadySent=Hoeveelheid producten van openstaande klant bestelling is al verzonden
    +ProductQtyInSuppliersShipmentAlreadyRecevied=Hoeveelheid producten van openstaande leverancier bestelling reeds ontvangen 
    +NoProductToShipFoundIntoStock=Geen product te verzenden in het magazijn <b> %s </b>. Corrigeer voorraad of teruggaan om een ​​ander magazijn te kiezen.
    +WeightVolShort=Gewicht / Vol.
    +ValidateOrderFirstBeforeShipment=U moet eerst de bestelling valideren voordat u zendingen kunt maken.
     
     # Sending methods
     # ModelDocument
    diff --git a/htdocs/langs/nl_NL/stripe.lang b/htdocs/langs/nl_NL/stripe.lang
    index 7a54b571d6a..faa46c90ac3 100644
    --- a/htdocs/langs/nl_NL/stripe.lang
    +++ b/htdocs/langs/nl_NL/stripe.lang
    @@ -1,18 +1,18 @@
     # Dolibarr language file - Source file is en_US - stripe
     StripeSetup=Stripe-module instellen
    -StripeDesc=Module to offer an online payment page accepting payments with Credit/Debit card via <a href="http://www.stripe.com" target="_blank">Stripe</a>. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +StripeDesc=Module om een ​​online betalingspagina aan te bieden die betalingen met een creditcard / betaalpas accepteert via <a href="http://www.stripe.com" target="_blank">Stripe</a>. Hiermee kunnen uw klanten gratis betalen of betalen voor een bepaald Dolibarr-object (factuur, bestelling, ...)
     StripeOrCBDoPayment=Betaal met creditcard of Stripe
     FollowingUrlAreAvailableToMakePayments=De volgende URL's zijn beschikbaar om een pagina te bieden aan afnemers voor het doen van een betaling van Dolibarr objecten
     PaymentForm=Betalingsformulier
    -WelcomeOnPaymentPage=Welkom bij onze online betalingsdienst
    +WelcomeOnPaymentPage=Welkom bij onze online betaaldienst
     ThisScreenAllowsYouToPay=Dit scherm staat u toe om een online betaling te doen aan %s
     ThisIsInformationOnPayment=Informatie over de nog uit te voeren betalingen
     ToComplete=Nog te doen
     YourEMail=E-mail om betalingsbevestiging te ontvangen
    -STRIPE_PAYONLINE_SENDEMAIL=EMail to warn after a payment (success or not)
    +STRIPE_PAYONLINE_SENDEMAIL=E-mail om te waarschuwen na een betaling (gelukt of niet)
     Creditor=Crediteur
     PaymentCode=Betalingscode
    -StripeDoPayment=Pay with Credit or Debit Card (Stripe)
    +StripeDoPayment=Betaal met creditcard of betaalkaart (Stripe)
     YouWillBeRedirectedOnStripe=You will be redirected on secured Stripe page to input you credit card information
     Continue=Volgende
     ToOfferALinkForOnlinePayment=URL voor %s betaling
    @@ -30,12 +30,12 @@ STRIPE_CGI_URL_V2=Url of Stripe CGI module for payment
     VendorName=Verkopersnaam
     CSSUrlForPaymentForm=URL van het CSS-stijlbestand voor het betalingsformulier
     NewStripePaymentReceived=New Stripe payment received
    -NewStripePaymentFailed=New Stripe payment tried but failed
    -STRIPE_TEST_SECRET_KEY=Secret test key
    -STRIPE_TEST_PUBLISHABLE_KEY=Publishable test key
    +NewStripePaymentFailed=Nieuwe Stripe-betaling geprobeerd, maar mislukt
    +STRIPE_TEST_SECRET_KEY=Geheime testsleutel
    +STRIPE_TEST_PUBLISHABLE_KEY=Publiceerbare testsleutel
     STRIPE_TEST_WEBHOOK_KEY=Webhook test key
    -STRIPE_LIVE_SECRET_KEY=Secret live key
    -STRIPE_LIVE_PUBLISHABLE_KEY=Publishable live key
    +STRIPE_LIVE_SECRET_KEY=Geheime livesleutel
    +STRIPE_LIVE_PUBLISHABLE_KEY=Publiceerbare live sleutel
     STRIPE_LIVE_WEBHOOK_KEY=Webhook live key
     ONLINE_PAYMENT_WAREHOUSE=Stock to use for stock decrease when online payment is done<br>(TODO When option to decrease stock is done on an action on invoice and the online payment generate itself the invoice ?)
     StripeLiveEnabled=Stripe live enabled (otherwise test/sandbox mode)
    @@ -61,3 +61,4 @@ ConfirmDeleteCard=Are you sure you want to delete this Credit or Debit card?
     CreateCustomerOnStripe=Create customer on Stripe
     CreateCardOnStripe=Create card on Stripe
     ShowInStripe=Show in Stripe
    +StripeUserAccountForActions=User account to use for some emails notification of Stripe events (Stripe payouts)
    diff --git a/htdocs/langs/nl_NL/users.lang b/htdocs/langs/nl_NL/users.lang
    index e18e9e0d758..be991462be7 100644
    --- a/htdocs/langs/nl_NL/users.lang
    +++ b/htdocs/langs/nl_NL/users.lang
    @@ -35,7 +35,7 @@ SuperAdministrator=Super administrator
     SuperAdministratorDesc=Super administrateur heeft volledige rechten
     AdministratorDesc=Administrator
     DefaultRights=Standaardrechten
    -DefaultRightsDesc=Stel hier de standaardrechten in die automatisch toegekend worden aan nieuwe gebruiker.
    +DefaultRightsDesc=Define here <u>default</u> permissions that are automatically granted to a <u>new created</u> user (Go to user card to change permission of an existing user).
     DolibarrUsers=Dolibarr gebruikers
     LastName=Achternaam
     FirstName=Voornaam
    @@ -66,7 +66,7 @@ CreateDolibarrThirdParty=Creëer nieuwe klant
     LoginAccountDisableInDolibarr=Account uitgeschakeld in Dolibarr.
     UsePersonalValue=Gebruik persoonlijke waarde
     InternalUser=Interne gebruiker
    -ExportDataset_user_1=Dolibarr's gebruikers en eigenschappen
    +ExportDataset_user_1=Gebruikers en hun eigenschappen
     DomainUser=Domeingebruikersaccount %s
     Reactivate=Reactiveren
     CreateInternalUserDesc=This form allows you to create an user internal to your company/organization. To create an external user (customer, supplier, ...), use the button 'Create Dolibarr user' from third party's contact card.
    @@ -92,7 +92,7 @@ LoginToCreate=Te creëren gebruikersnaam
     NameToCreate=Naam van derden maken
     YourRole=Uw rollen
     YourQuotaOfUsersIsReached=Uw quotum van actieve gebruikers is bereikt!
    -NbOfUsers=Nb van gebruikers
    +NbOfUsers=Aantal gebruikers
     NbOfPermissions=Aantal rechten
     DontDowngradeSuperAdmin=Alleen een superadmin kan downgrade een superadmin
     HierarchicalResponsible=Opzichter
    @@ -108,3 +108,4 @@ UserAccountancyCode=Gebruiker accounting code
     UserLogoff=Gebruiker uitgelogd
     UserLogged=Gebruiker gelogd
     DateEmployment=Datum van indiensttreding
    +DateEmploymentEnd=Einddatum van de tewerkstelling
    diff --git a/htdocs/langs/pl_PL/admin.lang b/htdocs/langs/pl_PL/admin.lang
    index 3150854cbac..70b6f079a2f 100644
    --- a/htdocs/langs/pl_PL/admin.lang
    +++ b/htdocs/langs/pl_PL/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Rozwój
     VersionUnknown=Nieznany
     VersionRecommanded=Zalecana
     FileCheck=Sprawdzanie integralności plików
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Integralność plików jest ściśle zgodna z referencją.
    -FileIntegrityIsOkButFilesWereAdded=Sprawdzenie integralności plików przebiegło pomyślnie, ale dodano nowe pliki.
    +FileIntegrityIsOkButFilesWereAdded=Sprawdzenie integralności plików przebiegło pomyślnie, aczkolwiek jakieś nowe pliki zostały dodane.
     FileIntegritySomeFilesWereRemovedOrModified=Sprawdzenie integralności plików zakończylo się niepowodzeniem. Niektóre pliki zostaly zmodyfikowane, usunięte lub dodane.
     GlobalChecksum=Globalna suma kontrolna
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Asystent zapisu sesji
     SessionSavePath=Lokalizacja sesji danych
     PurgeSessions=Czyszczenie sesji
     ConfirmPurgeSessions=Czy na pewno chcesz usunąć wszystkie sesje? Spowoduje to odłączenie każdego użytkownika (oprócz ciebie).
    -NoSessionListWithThisHandler=Asystent zapisu sesji skonfigurowany w PHP nie zezwala na wyświetlenie wszystkich aktywnych sesji.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Zablokuj nowe połączenia
    -ConfirmLockNewSessions=Czy na pewno chcesz ograniczyć wszelkie nowe połączenie Dolibarr do siebie. Tylko <b>%s</b> użytkownik będzie mógł się połączyć po tym.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Usuwanie blokady połączeń
     YourSession=Twoja sesja
    -Sessions=Sesja użytkowników
    +Sessions=Users sessions
     WebUserGroup=Serwer sieci Web użytkownik / grupa
    -NoSessionFound=PHP wydaje się nie dopuścić do listy aktywnych sesji. Katalog używany do zapisywania sesji <b>(%s)</b> mogą być chronione (np. przez uprawnienia OS dyrektywy open_basedir lub PHP).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Kodowanie bazy danych do przechowywania danych
     DBSortingCharset=Kodowanie bazy danych by sortować dane
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Zewnętrzny użytkownik
     InternalUsers=Wewnętrzni użytkownicy
     ExternalUsers=Zewnetrzni użytkownicy
     GUISetup=Wyświetlanie
    -SetupArea=Dział konfiguracji
    +SetupArea=Konfiguracja
     UploadNewTemplate=Załaduj nowy szablon(y)
     FormToTestFileUploadForm=Formularz do wysyłania pliku testowego (według konfiguracji)
     IfModuleEnabled=Uwaga: tak jest skuteczne tylko wtedy, gdy <b>moduł %s</b> jest aktywny
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kod nie może zawierać wartości "0"
     DisableJavascript=Wyłącz funkcje JavaScript i Ajax (rekomendowane dla osób niewidomych oraz przeglądarek tekstowych)
     UseSearchToSelectCompanyTooltip=Także jeśli masz dużą liczbę osób trzecich (> 100 000), można zwiększyć prędkość przez ustawienie stałej COMPANY_DONOTSEARCH_ANYWHERE do 1 w Setup-> Inne. Szukaj zostaną ograniczone do początku łańcucha.
     UseSearchToSelectContactTooltip=Także jeśli masz dużą liczbę osób trzecich (> 100 000), można zwiększyć prędkość przez ustawienie stałej CONTACT_DONOTSEARCH_ANYWHERE do 1 w Setup-> Inne. Szukaj zostaną ograniczone do początku łańcucha.
    -DelaiedFullListToSelectCompany=Poczekaj  na kliknięcia na przycisk przed załadowaniem zawartości do listy kontrahentów (opcja może zwiększyć wydajność jeżeli masz dużą ilość kontrahentów, ale zmniejszy wygodę użytkowania)
    -DelaiedFullListToSelectContact=Poczekaj  na kliknięcia na przycisk przed załadowaniem zawartości do listy kontaktów (opcja może zwiększyć wydajność jeżeli masz dużą ilość kontrahentów, ale zmniejszy wygodę użytkowania)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Liczba znaków do wyszukiwania: %s
     NotAvailableWhenAjaxDisabled=Niedostępne kiedy Ajax nie działa
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Podgląd niedostępny
     ThemeCurrentlyActive=Temat obecnie aktywny
     CurrentTimeZone=Strefa czasowa PHP (server)
     MySQLTimeZone=Strefa czasowa MySQL (baza danych)
    -TZHasNoEffect=Daty są przechowywane i zwrócone przez serwer bazy danych, jak gdyby były przechowywane jako zgłosił ciąg. Strefa czasowa ma wpływ tylko wtedy, gdy przy użyciu funkcji UNIX_TIMESTAMP (które nie powinny być używane przez Dolibarr, więc TZ bazy danych nie powinny mieć wpływu, nawet jeśli zmienił się po dane zostały wprowadzone).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Przestrzeń
     Table=Tabela
     Fields=Pola
    @@ -111,14 +111,14 @@ NotConfigured=Moduł/Aplikacja nie skonfigurowana
     Active=Aktywne
     SetupShort=Konfiguracja
     OtherOptions=Inne opcje
    -OtherSetup=Inne konfiguracje
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Separator dziesiętny
     CurrentValueSeparatorThousand=Separator tysięczny
     Destination=Miejsce przeznaczenia
     IdModule=Identyfikator modułu
     IdPermissions=ID uprawnień
     LanguageBrowserParameter=Parametr %s
    -LocalisationDolibarrParameters=Parametry lokalizacji
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Strefa Czasowa Klienta (użytkownik)
     ClientHour=Czas klienta (użytkownik)
     OSTZ=Strefa czasowa Serwera OS
    @@ -126,8 +126,8 @@ PHPTZ=Strefa czasowa serwera PHP
     DaylingSavingTime=Czas letni (użytkownik)
     CurrentHour=Aktualna godzina
     CurrentSessionTimeOut=Obecna sesja wygasła
    -YouCanEditPHPTZ=Aby ustawić inną strefę czasową PHP (nie wymagane) spróbuj dodać plik .htaccess z wpisem takim jak "SetEnv TZ Europe/Warszawa"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widżet
     Boxes=Widżety
     MaxNbOfLinesForBoxes=Maks. ilość linii dla widgetów
    @@ -191,28 +191,28 @@ IgnoreDuplicateRecords=Ignoruj błędy zduplikowanych rekordów (INSERT IGNORE)
     AutoDetectLang=Autodetekcja (język przeglądarki)
     FeatureDisabledInDemo=Funkcja niedostępna w wersji demo
     FeatureAvailableOnlyOnStable=Funkcjonalność dostępna tylko w oficjalnej stabilnej wersji
    -BoxesDesc=Widgety są komponentami pokazującymi pewne informacje, które możesz dodać w celu spersonalizowania niektórych stron. Możesz wybrać pomiędzy pokazaniem wigetu lub nie poprzez wybranie docelowej strony i kliknięcie "Aktywacja", lub poprzez kliknięcie na kosz w celu wyłączenia go.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Tylko elementy z <a href="%s">aktywnych modułów</a> są widoczne.
    -ModulesDesc=Moduły Dolibarr definiują, która aplikacja / funkcja jest włączona w oprogramowaniu. Niektóre aplikacje / moduły wymagają uprawnień, które musisz przyznać użytkownikom po ich aktywacji. Kliknij przycisk ON/OFF, aby włączyć moduł/aplikację.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Możesz znaleźć więcej modułów do pobrania na zewnętrznych stronach internetowych...
    -ModulesDeployDesc=Jeżeli uprawnienia do twojego systemu plików pozwolą, możesz użyć tego narzędzia do wdrożenia zewnętrznego modułu. Moduł wówczas będzie widoczny w zakładce <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Znajdź dodatkowe aplikacje / moduły
     ModulesDevelopYourModule=Stwórz własną aplikację/moduły
    -ModulesDevelopDesc=Możesz opracować lub znaleźć partnera, który opracuje dla Ciebie twój spersonalizowany moduł
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Nowy
     FreeModule=Darmowe
     CompatibleUpTo=Kompatybilne z wersją %s
     NotCompatible=ten moduł nie jest kompatybilny z twoją wersją Dolibarr %s (Min %s - Max %s).
     CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s).
     SeeInMarkerPlace=See in Market place
    -Updated=Updated
    +Updated=Zaktualizowane
     Nouveauté=Nowość
     AchatTelechargement=Kup / Pobierz
     GoModuleSetupArea=Aby udostępnić/zainstalowac nowy moduł, przejdź do ustawień Modułu <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, oficjalny kanał dystrybucji zewnętrznych modułów Dolibarr ERP / CRM
    -DoliPartnersDesc=Lista firm dostarczających niestandardowe moduły lub funkcje (Uwaga: każdy doświadczony w programowaniu PHP może udostępnić niestandardowy opracowanie dla projektu open source)
    -WebSiteDesc=Powiązane strony z modułami...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Łącze
     BoxesAvailable=Dostępne widgety
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Nie przechowuj w bazie danych niezakodowanych haseł. Pr
     MainDbPasswordFileConfEncrypted=Hasło bazy danych zakodowane w conf.php
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Ochrona generowanych plików PDF (Aktywowany nie jest zalecany, przerwa masowe generowanie plików pdf)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Ochrona dokumentu PDF umożliwia jego odczyt i druk w dowolnej przeglądarce PDF. Jednak edytowanie i kopiowanie nie jest już możliwe. Zauważ, że korzystanie z tej funkcji sprawia, że tworzenie globalnie połączonych plików PDF nie działa.
     Feature=Funkcja
     DolibarrLicense=Licencja
    @@ -246,8 +246,8 @@ ExternalResources=Zasoby zewnętrzne
     SocialNetworks=Sieci społecznościowe
     ForDocumentationSeeWiki=Aby zapoznać się z dokumentacją użytkownika lub dewelopera (Doc, FAQ ...), <br> zajrzyj do Dolibarr Wiki: <br> <a href="%s" target="_blank"><b> %s</b></a>
     ForAnswersSeeForum=Aby znaleźć odpowiedzi na pytania / uzyskać dodatkową pomoc, możesz skorzystać z  forum Dolibarr : <br> <a href="%s" target="_blank"><b> %s</b></a>
    -HelpCenterDesc1=Obszar ten może pomóc w uzyskaniu wsparcia dla usługi Dolibarr.
    -HelpCenterDesc2=Niektóre elementy tej usługi są dostępne <b>tylko</b> w języku <b>angielskim.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Aktualne menu obsługi
     MeasuringUnit=Jednostki pomiarowe
     LeftMargin=Lewy margines
    @@ -262,31 +262,35 @@ NoticePeriod=Okres wypowiedzenia
     NewByMonth=New by month
     Emails=Wiadomości email
     EMailsSetup=Ustawienia wiadomości email
    -EMailsDesc=Ta strona pozwala na nadpisanie parametrów PHP dla wysyłki wiadomości email. W większości przypadków w systemach Unix/Linux, twoje ustawienia PHP są poprawne i te parametry są bezużyteczne.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=Port SMTP (domyślnie w <b>php.ini: %s)</b>
    -MAIN_MAIL_SMTP_SERVER=Host SMTP (domyślnie w <b>php.ini: %s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Port SMTP (Nie zdefiniowany w PHP dla systemów z rodziny Unix)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Host SMTP (Nie zdefiniowany w PHP dla systemów z rodziny Unix)
    -MAIN_MAIL_EMAIL_FROM=E-mail wysyłający do automatycznych wiadomości e-mail (domyślnie w php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Wysyłaj systematycznie ukryte kopie wszystkich wysłanych e-maili do
    -MAIN_DISABLE_ALL_MAILS=Wyłącz wszystkie wysyłki wiadomości (dla testu ustawień lub trybu demo)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Kopiuj (Cc) wszystkie wysłane emaile do
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Metoda używana do wysłania E-maili
    -MAIN_MAIL_SMTPS_ID=Identyfikator SMTP, jeżeli wymaga uwierzytelniania
    -MAIN_MAIL_SMTPS_PW=Hasło SMTP , jeżeli wymagane uwierzytelniania
    -MAIN_MAIL_EMAIL_TLS= Użyj szyfrowania TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS= Użyj szyfrowania TLS (STARTTLS)
    -MAIN_DISABLE_ALL_SMS=Wyłącz wysyłanie wszystkich SMS (do celów badawczych lub testowych)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Metoda służy do wysyłania wiadomości SMS
    -MAIN_MAIL_SMS_FROM=Nadawca domyślny numer telefonu wysyłaniu SMS-ów
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Adres email użytkownika
     CompanyEmail=Adres email firmy
     FeatureNotAvailableOnLinux=Cechy te nie są dostępne w systemach Unix, takich jak. Przetestuj swój program sendmail lokalnie.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Moduł konfiguracji
     ModulesSetup=Ustawienia Modułów/Aplikacji
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Nie używaj w produkcji
     ThisIsProcessToFollow=To jest krok do procesu:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Krok %s
    -FindPackageFromWebSite=Odnajdź pakiet, który zapewnia wybraną przez Ciebię funkcję (np. na oficjalnej stronie internetowej %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Rozpakuj spakowane pliki do katalogu serwera przeznaczonego na Dollibar:<b>%s</b>
    -UnpackPackageInModulesRoot=Aby udostępnić/zainstalować dodatkowy moduł, rozpakuj pliki na serwerze do katalogu dedycowanego modułom: <b>%s</b>.
    -SetupIsReadyForUse=Wdrażanie modułu zostało zakończone. Musisz jednak włączyć i skonfigurować moduł w aplikacji, przechodząc na stronę do konfiguracji modułów: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=Alternatywny katalog główny nie jest zdefiniowany w istniejącym katalogu.<br>
     InfDirAlt=Od wersji 3 możliwe jest zdefiniowanie alternatywnego katalogu głównego. Pozwala to na przechowywanie w dedykowanym katalogu wtyczek oraz niestandardowych szablonów. <br>Wystarczy utworzyć katalog w lokalizacji plików Dolibarr (na przykład: niestandardowe).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Aktualna wersja Dolibarr
     CallUpdatePage=Przejdź na stronę, która pomoże w zaktualizować strukturę bazy danych i dane: %s.
     LastStableVersion=Ostatnia stabilna wersja
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Opóźnienie dla buforowania odpowiedzi eksportu w sekundach (0 lub puste pole oznacza brak buforowania)
     DisableLinkToHelpCenter=Ukryj link <b>"Potrzebujesz pomocy lub wsparcia"</b> na stronie logowania
     DisableLinkToHelp=Ukryj link <b>" %s Pomoc online"</b> w lewym menu
    -AddCRIfTooLong=Brak automatycznego zawijania. Jeśli linia znajduje się poza dokumentem, należy dodać znak powrotu w polu tekstowym.
    -ConfirmPurge=Czy na pewno chcesz wykonać to czyszczenie? <br> Usunie to ostatecznie wszystkie pliki z danymi danych bez możliwości ich przywrócenia (pliki ECM, załączone pliki...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimalna długość
     LanguageFilesCachedIntoShmopSharedMemory=Pliki. Lang załadowane do pamięci współdzielonej
     LanguageFile=Plik języka
    -ExamplesWithCurrentSetup=Przykłady z obecnie działającą konfiguracją
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Lista katalogów szablonów OpenDocument
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Liczba plików szablonów ODT/ODS znalezionych we wskazanych katalogach
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Przykłady składni: <br> c: \\ mydir <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Aby dowiedzieć się jak stworzyć szablony dokumentów odt, przed zapisaniem ich w katalogach, zapoznaj się z dokumentacją wiki:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Kluczem do korzystania z usług internetowych (parametr
     TestSubmitForm=Formularz testowy wprowadzania
     ThisForceAlsoTheme=Za pomocą tego menedżera menu będzie wykorzystywać własne temat cokolwiek jest wybór użytkownika. Również w tym kierownik menu specjalizuje dla smartfonów nie działa na wszystkich smartphone. Użyj innego menedżera menu, jeśli masz problemy na Ciebie.
     ThemeDir=Katalog Skórek
    -ConnectionTimeout=Przekroczony czas połączenia
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Przekroczony czas odpowiedzi
     SmsTestMessage=Wiadomość testowa z PHONEFROM__ __ do __ PHONETO__
     ModuleMustBeEnabledFirst=<b>%s</b> moduł musi być włączony przed użyciem tej funkcji.
     SecurityToken=Klucz do bezpiecznego URL
    -NoSmsEngine=Brak menedżera SMSów nadawczych. Menedżer SMSów nadawczych nie jest instalowany z domyślną dystrybucją (dystrybucje zależne są od dostawcy zewnętrznego). Menedżera można znaleźć pod adresem http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Można ustawić każdą opcję globalną związaną z generowaniem PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Zasady złączania pól adresowych
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Zasady dla %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Ukryj opis produktów w wygenerowanych plikach PDF
     HideRefOnPDF=Ukryj numer referencyjny produktów w generowanych plikach PDF
     HideDetailsOnPDF=Ukryj linię z szczegółami produktu w generowanym pliku PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametry do zabezpiecznie adresu URL
     SecurityTokenIsUnique=Użyj unikalnego klucza zabezpieczeń dla każdego adresu
     EnterRefToBuildUrl=Wprowadź odwołanie do obiektu %s
     GetSecuredUrl=Pobierz obliczony adres URL
    -ButtonHideUnauthorized=Ukryj przyciski dla użytkowników nie będących administratorami zamiast pokazywać szare wyłączone przyciski
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Poprzednia stawka VAT
     NewVATRates=Nowa stawka VAT
     PriceBaseTypeToChange=Zmiana dla cen opartych na wartości referencyjnej ustalonej na
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Wybierz listę
     ExtrafieldSelectList = Wybierz z tabeli
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Hasło
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Pola wyboru
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link do obiektu
     ComputedFormula=Obliczone pole
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=Lista wartości musi być zapisana w liniach w formacie klucz,wartość (gdzie klucz nie może być '0')<br><br>Na przykład:<br>1,wartosc12,<br>wartosc2<br>3,wartosc3<br>...
     ExtrafieldParamHelpradio=Lista wartości musi być zapisana w liniach w formacie klucz,wartość (gdzie klucz nie może być '0')<br><br>Na przykład:<br>1,wartosc1<br>2,wartosc2<br>3,wartosc3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Domyślny link
     SetAsDefault=Ustaw jako domyślny
     ValueOverwrittenByUserSetup=Uwaga, ta wartość może być zastąpiona przez specyficzną konfiguracją użytkownika (każdy użytkownik może ustawić własny clicktodial url)
     ExternalModule=Moduł zewnętrzny - Zainstalowane w katalogu% s
    -BarcodeInitForThirdparties=Masowa inicjalizacja kodów kreskowych dla kontrahentów
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Masowe generowanie kodów lub reset kodów kreskowych dla usług i produktów
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Generuj wartość dla kolejnych %s pustych wpisów
     EraseAllCurrentBarCode=Usuń wszystkie aktualne kody kreskowe
     ConfirmEraseAllCurrentBarCode=Jesteś pewien, że chcesz usunąć wszystkie aktualne wartości kodów kreskowych?
     AllBarcodeReset=Wszystkie wartości kodów kreskowych zostały usunięte
    -NoBarcodeNumberingTemplateDefined=Nie szablonu numeracji kodów kreskowych włączona w konfiguracji modułu kodów kreskowych.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Włącz cache plików
     ShowDetailsInPDFPageFoot=Dodaj więcej szczegółów w stopce dokumentów PDF takich jak adres twojej firmy lub dane menadżerów (w celu dodatnia numeru REGON, kapitału zakładowego i numeru NIP)
     NoDetails=No more details in footer
     DisplayCompanyInfo=Wyświetl adres firmy
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Wyświetl adres firmy i dane menadżerów
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Zwróć pusty kod księgowy
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Kliknij aby zobaczyć opis
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=Ten moduł wymagany jest przez moduł(y)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Pole
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Użytkownicy i grupy
     Module0Desc=Zarządzanie Użytkownikami/Pracownikami i Grupami
    -Module1Name=Kontrahenci
    +Module1Name=Third Parties
     Module1Desc=Zarządzanie firmami oraz kontaktami (klienci, prospekty...)
     Module2Name=Reklama
     Module2Desc=Zarządzanie reklamą
     Module10Name=Księgowość
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Propozycje
     Module20Desc=Zarządzanie propozycjami reklam
     Module22Name=Masowe wysyłanie E-maili
    @@ -511,13 +517,13 @@ Module52Desc=Zarządzanie zapasami (produkty)
     Module53Name=Usługi
     Module53Desc=Zarządzanie usługami
     Module54Name=Kontrakty/Subskrypcje
    -Module54Desc=Zarządzanie umowami (usług lub subskrypcji)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Kody kreskowe
     Module55Desc=Kody kreskowe zarządzania
     Module56Name=Telefonia
     Module56Desc=Integracja telefonii
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integracja systemu ClickToDial (Asterisk,...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Koszty wyjazdów i notatki
     Module75Desc=Zarządzanie kosztami wyjazdów oraz notatkami
     Module80Name=Wysyłki
     Module80Desc=Zarządzanie wysyłkami oraz kolejnością zamówień
    -Module85Name=Banki oraz gotówka
    +Module85Name=Banks and Cash
     Module85Desc=Zarządzanie kontami bankowymi lub gotówkowymi
    -Module100Name=Strona zewnętrzna
    -Module100Desc=Moduł ten umieszcza zewnętrzną stronę internetową w menu Dolibarr i wyświetla ją w ramce Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman i SPIP
     Module105Desc=Interfejs Mailman lub SPIP dla członka modułu
     Module200Name=LDAP
    -Module200Desc=Synchronizacji katalogu LDAP
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=Integracja PostNuke
     Module240Name=Eksport danych
    -Module240Desc=Narzędzie do eksportu danych w Dolibarr (z asystentami)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Import danych
    -Module250Desc=Narzędzie do importu danych w Dolibarr (z asystentami)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Członkowie
     Module310Desc=Zarządzanie członkami fundacji
     Module320Name=RSS Feed
     Module320Desc=Dodaj kanał RSS Dolibarr wewnątrz stron
    -Module330Name=Zakładki
    -Module330Desc=Zarządzanie zakładkami
    -Module400Name=Projekty / Możliwości / Wskazówki
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Integracja Webcalendar
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Pożyczka
     Module520Desc=Zarządzanie kredytów
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Darowizny
     Module700Desc=Zarządzanie darowiznami
     Module770Name=Expense reports
    -Module770Desc=Zarządzanie i roszczenia raporty wydatków (transport, posiłek, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Dokument poczty masowej generacji
     Module1780Name=Tagi / Kategorie
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=Edytor WYSIWYG
    -Module2000Desc=Pozwól na edycję niektórych pól tekstowych z użyciem zaawansowanego edytora (bazującego na CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamiczne Ceny
     Module2200Desc=Włącz użycie wyrażeń matematycznych dla cen
     Module2300Name=Zaplanowane zadania
     Module2300Desc=Zarządzanie zaplanowanymi zadaniami (jak cron lub chrono table)
     Module2400Name=Wydarzenia/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=SZD / ZZE
     Module2500Desc=System Zarządzania Dokumentami / Zarządzanie Zawartością Elektroniczną. Automatyczna organizacja twoich wygenerowanych lub składowanych dokumentów. Udostępniaj je kiedy chcesz.
     Module2600Name=API services (Web services SOAP)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API services (Web services REST)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Połączeń WebServices (klient SOAP)
    -Module2660Desc=Włącz Dolibarr serwisów internetowych klienta (może być używany do pchania danych / wnioski o dopuszczenie do zewnętrznych serwerów. Zamówień Dostawca obsługiwane tylko na chwilę)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Użyj usług online Gravatar  (www.gravatar.com), aby pokazać zdjęcia użytkowników / członków (dopasowanych na podstawie e-maili). Wymagany jest dostęp do Internetu
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=Możliwości konwersji GeoIP Maxmind
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HR
     Module4000Desc=Zarządzanie zasobami ludzkimi (zarządzanie departamentami, umowami pracowników,...)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Strony internetowe
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Zarządzanie "Pozostaw Żądanie"
    -Module20000Desc=Zadeklaruj oraz nadzoruj wnioski pracowników dotyczące wyjść z pracy
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Partia lub numer seryjny, zarządzanie według daty ważności lub daty sprzedaży produktów
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Moduł oferujący stronę płatności online akceptujący płatności za pośrednictwem kart debetowych/kredytowych poprzez PayBox. Może zostać użyty do zapewnienia twoim klientom możliwości darmowych płatności za konkretne dokumenty Dolibarr (faktury, zamówienia, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Punkt sprzedaży
     Module50100Desc=Punkty sprzedaży (POS)
    +Module50150Name=Punktów sprzedaży
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Moduł oferujący stronę płatności online akceptujący płatności za pośrednictwem PayPal (karty kredytowe lub środki PayPal). Może zostać użyty do zapewnienia twoim klientom możliwości darmowych płatności za konkretne dokumenty Dolibarr (faktury, zamówienia, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Rachunkowość (zaawansowane)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Druk bezpośredni (bez otwierania dokumentów) za pomocą interfejsu Puchary IPP (drukarki muszą być widoczne z serwera, a CUPS musi być installé na serwerze).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marże
     Module59000Desc=Moduł do zarządzania marżami
     Module60000Name=Prowizje
     Module60000Desc=Moduł do zarządzania prowizjami
    -Module62000Name=Międzynarodowe Reguły Handlu
    -Module62000Desc=Dodaj funkcje do zarządzania Międzynarodowymi Regułami Handlu
    +Module62000Name=Formuły handlowe
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Zasoby
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Czytaj faktur klientów
    @@ -651,9 +661,9 @@ Permission32=Tworzenie / modyfikacja produktów
     Permission34=Usuwanie produktów
     Permission36=Podejrzyj / zarządzaj ukrytymi produktami
     Permission38=Eksport produktów
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Twórz/modyfikuj projekty (projekty udostępnione i projekty dla których jestem kontaktem). Można tworzyć zadania i przypisywać  użytkowników to projektów i zadań
    -Permission44=Usuwanie projektów (projekty współdzielone oraz projekty, w których biorę udział)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Eksportuj projekty
     Permission61=Czytaj interwencje
     Permission62=Tworzenie / modyfikacja interwencji
    @@ -686,7 +696,7 @@ Permission109=Usuń wysyłki
     Permission111=Czytaj raporty finansowe
     Permission112=Tworzenie / modyfikacja / usuwanie oraz porównywanie transakcji
     Permission113=Konfiguracja sprawozdań finansowych (tworzenie, zarządzanie kategoriami)
    -Permission114=Skonsoliduj transakcje
    +Permission114=Reconcile transactions
     Permission115=Eksport transakcji oraz oświadczeń obrachunkowych
     Permission116=Przelewy pomiędzy rachunkami
     Permission117=Zarządzanie wysyłką czeków
    @@ -694,15 +704,15 @@ Permission121=Przeglądaj kontrahentów związanych z użytkownikiem
     Permission122=Tworzenie / modyfikacja stron trzecich związanych z użytkownikiem
     Permission125=Usuń kontrahentów związanych z użytkownikiem z użytkownikiem
     Permission126=Eksport stron trzecich
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Czytaj dostawców
     Permission147=Czytaj statystyki
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Czytaj umowy / subskrypcje
     Permission162=Tworzenie / modyfikacja umowy / subskrypcji
     Permission163=Aktywacja usługi / subskrypcji umowy
    @@ -725,7 +735,7 @@ Permission187=Zamknij zamówienie dostawcy
     Permission188=Anuluj zamówienie dostawcy
     Permission192=Tworzenie linii
     Permission193=Zlikwiduj linię
    -Permission194=Czytaj przepustowość linii
    +Permission194=Read the bandwidth lines
     Permission202=Tworzenie połączenia ADSL
     Permission203=Zamów połączenie zamówień
     Permission204=Zamów połączenia
    @@ -750,12 +760,12 @@ Permission244=Zobacz zawartość ukrytych kategorii
     Permission251=Czytaj innych użytkowników i grupy
     PermissionAdvanced251=Czytaj innych użytkowników
     Permission252=Czytaj uprawnienia innych użytkowników
    -Permission253=Tworzenie / modyfikacja innych użytkowników, grup i uprawnień
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Tworzenie / modyfikacja wewnętrznych / zewnętrznych użytkowników i uprawnień
     Permission254=Tworzenie / modyfikacja jedynie zewnętrznych użytkowników
     Permission255=Modyfikacja haseł innych użytkowników
     Permission256=Usuń lub dezaktywuj innych użytkowników
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Czytaj CA
     Permission272=Czytaj faktury
     Permission273=Wystawienie faktur
    @@ -765,7 +775,7 @@ Permission283=Usuwanie kontaktów
     Permission286=Eksport kontaktów
     Permission291=Czytaj taryfy
     Permission292=Ustaw uprawnienia dotyczące taryf
    -Permission293=Modyfikuj taryfy klientów
    +Permission293=Modify customers tariffs
     Permission300=Odczyt kodów kreskowych
     Permission301=Tworzenie / modyfikacja kodów kreskowych
     Permission302=Usuwanie kodów kreskowych
    @@ -787,11 +797,9 @@ Permission401=Odczytaj zniżki
     Permission402=Tworzenie / modyfikacja zniżek
     Permission403=Walidacja zniżek
     Permission404=Usuwanie zniżek
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Utwórz/Modyfikuj płatność wynagrodzenia
    -Permission514=Usuń pensje
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Wynagrodzenia eksport
     Permission520=Czytaj Kredyty
     Permission522=Tworzenie / modyfikacja kredytów
    @@ -844,8 +852,8 @@ Permission1251=Uruchom masowy import danych zewnętrznych do bazy danych (wgrywa
     Permission1321=Eksport faktur klienta, atrybutów oraz płatności
     Permission1322=Reopen a paid bill
     Permission1421=Eksport zamówień oraz atrybutów klienta
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Czytaj zasoby
     Permission63002=Utwórz/modyfikuj zasoby
     Permission63003=Usuń zasoby
     Permission63004=Dołącz zasoby do zdarzeń w agendzie
    -DictionaryCompanyType=Typy kontrahentów
    -DictionaryCompanyJuridicalType=Formy prawne kontrahentów
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Potencjalny poziom możliwości
     DictionaryCanton=Stany/Kantony
     DictionaryRegion=Regiony
    @@ -894,7 +902,7 @@ DictionaryVAT=Stawki VAT lub stawki podatku od sprzedaży
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Warunki płatności
     DictionaryPaymentModes=Tryby płatności
    -DictionaryTypeContact=Typy kontaktu/adresu
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Podatku ekologicznego (WEEE)
     DictionaryPaperFormat=Formaty papieru
    @@ -908,47 +916,47 @@ DictionarySource=Pochodzenie wniosków / zleceń
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Modele dla planu kont
     DictionaryAccountancyJournal=Dzienniki księgowe
    -DictionaryEMailTemplates=Szablony wiadomości e-mail
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Status możliwości
    -DictionaryHolidayTypes=Rodzaje urlopów
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Konfiguracja zapisana
     SetupNotSaved=Ustawienia nie zapisane
     BackToModuleList=Powrót do listy modułów
    -BackToDictionaryList=Powrót do listy słowników
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Zarządzanie VAT
    -VATIsUsedDesc=Domyślnie kiedy tworzysz perspektywy, faktury, zamówienia itd. stawka VAT pobiera z aktywnej reguły standardowej:<br>Jeżeli sprzedawca nie jest płatnikiem VAT, wówczas stawka VAT domyślnie jest równa 0. Koniec reguły.<br>Jeżeli kraj sprzedaży jest taki sam jak kraj zakupu, wówczas stawka VAT jest równa stawce VAT na produkt w kraju sprzedaży. Koniec reguły.<br>Jeżeli sprzedawca i kupujący należą do Unii Europejskiej i dobra są środkami transportu (samochody, statki, samoloty...), domyślna stawka VAT wynosi 0% (VAT powinien być zapłacony przez kupującego w jego kraju w odpowiednim urzędzie skarbowym). Koniec reguły.<br>Jeżeli sprzedawca i kupujący należą do Unii Europejskiej i kupujący jest osobą prywatną, wówczas stawka VAT jest równa stawce obowiązującej w kraju sprzedaży.Koniec reguły.<br>Jeżeli sprzedawca i kupujący należą do Unii Europejskiej i kupujący jest firmą, wówczas stawka VAT jest równa 0%. Koniec reguły.<br>W każdym innym przypadku domyślna stawka VAT jest równa 0%. Koniec reguły.
    -VATIsNotUsedDesc=Domyślnie proponowany VAT wynosi 0. Może być wykorzystany w przypadku takich stowarzyszeń, osób fizycznych lub małych firm.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Stawka
     LocalTax1IsNotUsed=Nie należy używać drugiego podatku
    -LocalTax1IsUsedDesc=Użyj drugi typ podatku (innego niż VAT)
    -LocalTax1IsNotUsedDesc=Nie należy używać innego rodzaju podatków (innych niż VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Drugi rodzaj podatku
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Nie używaj trzeciego podatku
    -LocalTax2IsUsedDesc=Użyj trzeciego rodzaju podatku (innego niż VAT)
    -LocalTax2IsNotUsedDesc=Nie należy używać innego rodzaju podatków (innych niż VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Trzeci rodzaj podatku
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= RE stawki domyślnie podczas tworzenia perspektyw, faktury, zamówienia itp. postępuj zgodnie z aktywnych zasadę: <br> Jeśli te kupujący nie podlega RE, RE domyślnie = 0. Koniec panowania. <br> Jeśli kupujący jest poddawany RE następnie RE domyślnie. Koniec panowania. <br>
    -LocalTax1IsNotUsedDescES= Domyślnie proponowany RE wynosi 0. Koniec zasady.
    -LocalTax1IsUsedExampleES= W Hiszpanii są specjaliści z zastrzeżeniem niektórych szczególnych grup hiszpański IAE.
    -LocalTax1IsNotUsedExampleES= W Hiszpanii są zawodowej i społecznej oraz z zastrzeżeniem pewnych odcinkach hiszpański IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= RE stawki domyślnie podczas tworzenia perspektyw, faktury, zamówienia itp. postępuj zgodnie z aktywnych zasadę: <br> Jeśli sprzedający nie jest poddawany IRPF, a następnie IRPF domyślnie = 0. Koniec panowania. <br> Jeżeli sprzedający jest poddawany IRPF następnie IRPF domyślnie. Koniec panowania. <br>
    -LocalTax2IsNotUsedDescES= Domyślnie proponowany IRPF wynosi 0. Koniec zasady.
    -LocalTax2IsUsedExampleES= W Hiszpanii, freelancerów i przedstawicieli wolnych zawodów, którzy świadczą usługi i przedsiębiorstwa, którzy wybrali system podatkowy modułów.
    -LocalTax2IsNotUsedExampleES= W Hiszpanii nie są one przedmiotem Bussines modułów systemu podatkowego.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Domyślnie proponowany RE wynosi 0. Koniec zasady.
    +LocalTax1IsUsedExampleES=W Hiszpanii są specjaliści z zastrzeżeniem niektórych szczególnych grup hiszpański IAE.
    +LocalTax1IsNotUsedExampleES=W Hiszpanii są zawodowej i społecznej oraz z zastrzeżeniem pewnych odcinkach hiszpański IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Domyślnie proponowany IRPF wynosi 0. Koniec zasady.
    +LocalTax2IsUsedExampleES=W Hiszpanii, freelancerów i przedstawicieli wolnych zawodów, którzy świadczą usługi i przedsiębiorstwa, którzy wybrali system podatkowy modułów.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Raporty odnośnie podatków lokalnych
     CalcLocaltax1=Sprzedaż - Zakupy
     CalcLocaltax1Desc=Lokalne raporty Podatki są obliczane z różnicy między sprzedażą localtaxes i localtaxes zakupów
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sprzedaż
     CalcLocaltax3Desc=Lokalne raporty Podatki są za łączną sprzedaży localtaxes
     LabelUsedByDefault=Wytwórnia używany domyślnie, jeśli nie można znaleźć tłumaczenie dla kodu
     LabelOnDocuments=Etykieta na dokumenty
    -NbOfDays=Nb dni
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Na koniec miesiąca
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Użytkownik bazy danych
     DatabasePassword=Hasło bazy danych
     Tables=Tabele
     TableName=Nazwa tabeli
    -NbOfRecord=Liczna rekordów
    +NbOfRecord=No. of records
     Host=Serwer
     DriverType=Typ sterownika
     SummarySystem=Podsumowanie informacji systemowych
    @@ -996,7 +1005,7 @@ Skin=Skórka
     DefaultSkin=Domyślna skórka
     MaxSizeList=Maksymalna długość listy
     DefaultMaxSizeList=Domyślna maksymalna długość listy
    -DefaultMaxSizeShortList=Domyślna maksymalna długość dla krótkiej listy (przykłado na karcie klienta)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Wiadomość dnia
     MessageLogin=Wiadomość strona logowania
     LoginPage=Strona logowania
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Stały formularz wyszukiwania w lewym menu
     DefaultLanguage=Domyślny język do użytku (kod języka)
     EnableMultilangInterface=Włącz wielojęzyczny interfejs
     EnableShowLogo=Pokaż logo w menu po lewej stronie
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Firma/Organizacja
    +CompanyIds=Company/Organization identities
     CompanyName=Nazwa firmy
     CompanyAddress=Adres
     CompanyZip=Kod pocztowy
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Właściciel konta bankowego %s
     BankModuleNotActive=Moduł Rachunków bankowych jest nie aktywny
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alarmy
    -DelaysOfToleranceBeforeWarning=Tolerancja opóźnień przed ostrzeżeniem
    -DelaysOfToleranceDesc=Ten ekran pozwala na określenie dopuszczalnego opóźnienia przed uruchomieniem alarmu na ekranie z pictogramami %s dla każdego opóźnionego elementu.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Dopuszczalne opóźnienie (w dniach) przed alarmem o niezakończonych zaplanowanych wydarzeniach (wydarzeniach a agendzie)
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Dopuszczalne opóźnienie (w dniach) przed alarmem o nieprzetworzonych zamówieniach
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Opóźnienie tolerancji (w dniach) przed wpisu w sprawie propozycji, aby zamknąć
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Opóźnienie tolerancji (w dniach) przed wpisu na temat propozycji nie rozliczone
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerancja opóźnienia (liczba dni) przed wpisu na usługi, aby uaktywnić
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerancja opóźnienie (w dniach) upłynął przed wpisu na usługi
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerancja opóźnienia (liczba dni) przed wpisu na dostawcę niezapłaconych faktur
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Opóźnienie (w dniach) przed alertem o niezapłaconych fakturach
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerancja opóźnienia (liczba dni) przed wpisu w oczekiwaniu banku pojednania
    -Delays_MAIN_DELAY_MEMBERS=Tolerancja opóźnienie (w dniach) przed wpisu na opóźnione składki członkowskiej
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerancja opóźnienia (liczba dni) przed wpisu do deponowania czeków do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Opóźnienie tolerancji (w dniach) przed wpisu do zestawienia wydatków do zatwierdzenia
    -SetupDescription1=Obszar ustawień jest przeznaczony dla ustawienia startowych parametrów zanim zaczniesz używać Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Inne pozycje menu zarządzają opcjonalnymi parametrami.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Zdarzenia audytu bezpieczeństwa
     Audit=Audyt
     InfoDolibarr=O Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Można włączyć dziennik Dolibarr bezpieczeństwa imprez tutaj. A
     AreaForAdminOnly=Parametry mogą być ustawiane tylko przez <b>użytkowników z prawami administratora</b>.
     SystemInfoDesc=System informacji jest różne informacje techniczne można uzyskać w trybie tylko do odczytu i widoczne tylko dla administratorów.
     SystemAreaForAdminOnly=Obszar ten jest dostępny tylko dla użytkowników na prawach administratora. Żadne z uprawnień Dolibarr nie zniesie tego ograniczenia.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Tutaj możesz ustawić każdy z parametrów związanych z wyglądem i zachowaniem Dolibarr
     AvailableModules=Dostępne aplikacje / moduły
     ToActivateModule=Aby uaktywnić modules, przejdź na konfigurację Powierzchnia.
     SessionTimeOut=Limit czasu dla sesji
    -SessionExplanation=Numer ten gwarantuje, że sesja nigdy nie wygaśnie przed upływem tego opóźnienia. Ale PHP sessoin zarządzania nie zawsze gwarantują, że sesja wygasa po tym terminie: Ten problem występuje, jeśli system do czyszczenia Wikisłowniku sesji jest uruchomiony. <br> Uwaga: nie szczególności systemu wewnętrznej PHP będzie czyste sesji każdy <b>temat %s / %s</b> dostępu, ale tylko podczas dostępu przez innych sesji.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Dostępne wyzwala
    -TriggersDesc=Wyzwalacze są pliki, które będą modyfikować zachowania Dolibarr pracy po skopiowaniu do katalogu <b>htdocs / includes / wyzwala.</b> One zrealizowane nowych działań, uaktywnionego Dolibarr na imprezy (utworzenie nowej spółki, zatwierdzania faktur, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Wyzwalacze w tym pliku są wyłączone przez <b>NORUN-suffix</b> w ich imieniu.
     TriggerDisabledAsModuleDisabled=Wyzwalacze w tym pliku są wyłączone jako <b>modułu %s</b> została wyłączona.
     TriggerAlwaysActive=Wyzwalacze w tym pliku są zawsze aktywne, niezależnie są aktywowane Dolibarr modułów.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Wprowadź wszystkie potrzebne dane. Wartości można dodać do us
     ConstDesc=Ta strona pozwoli ci na edycję wszystkich innych parametrów nie dostępnych na poprzednich stronach. Są to głównie parametry zastrzeżone dla programistów lub zaawansowanych użytkowników. Aby uzyskać listę opcji <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">kliknij tutaj</a>.
     MiscellaneousDesc=Inne powiązane parametry bezpieczeństwa są zdefiniowane tutaj
     LimitsSetup=Ograniczenia / Precision konfiguracji
    -LimitsDesc=Można określić limity, doprecyzowanie i optymalizacje stosowane przez Dolibarr tutaj
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max dziesiętnych na ceny jednostkowe
     MAIN_MAX_DECIMALS_TOT=Max dziesiętnych dla całkowitej ceny
     MAIN_MAX_DECIMALS_SHOWN=Max dziesiętnych ceny wyświetlane na ekranie (Dodaj <b>...</b> po ten numer, jeśli chcesz zobaczyć <b>...</b> kiedy liczba jest obcięty przy wyświetlane na ekranie)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Cena netto jednostki produktu
     TotalPriceAfterRounding=Łączna cena (netto / VAT / wraz z podatku) po zaokrągleniu
     ParameterActiveForNextInputOnly=Parametr skuteczne wejście tylko dla najbliższych
     NoEventOrNoAuditSetup=Nr bezpieczeństwa zdarzenie zostało jeszcze zarejestrowane. To może być normalne, jeśli kontrola nie została włączona w "setup - bezpieczeństwo - audytu" strony.
    -NoEventFoundWithCriteria=Nr bezpieczeństwa zdarzenie zostało znalezionych dla takich kryteriów wyszukiwania.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Zobacz lokalnej konfiguracji sendmaila
     BackupDesc=Aby wykonać pełną kopię zapasową Dolibarr, musisz:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Zapisz zawartość Twojej bazy danych (<b>%s</b>) do kopi zapasowej. Aby tego dokonać, możesz użyć asystenta.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Zarchiwizowane katalogu należy przechowywać w bezpiecznym miejscu.
     BackupDescY=Wygenerowany plik zrzutu powinny być przechowywane w bezpiecznym miejscu.
    -BackupPHPWarning=Kopia zapasowa nie może być gwarantowana przy użyciu tej metody. Wolę poprzedni
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Aby przywrócić Dolibarr zapasowej, należy:
    -RestoreDesc2=Przywróć pliki archiwalny (np. ZIP) katalogu dokumentów, aby wyodrębnić drzewa plików w katalogu dokumentów do nowej instalacji Dolibarr lub do bieżącego katalogu dokumentów <b>( %s).</b>
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Przywróć dane z pliku kopii zapasowej, do bazy danych nowej instalacji Dolibarr lub do bazy danych tej bieżącej instalacji (<b>%s</b>). Uwaga, gdy przywracanie zostanie zakończone, należy użyć loginu i hasła, które istniały, gdy kopia zapasowa została utworzona, aby połączyć się ponownie. Aby przywrócić kopię zapasową bazy danych do bieżącej instalacji, można użyć tego asystenta.
     RestoreMySQL=Import MySQL
     ForcedToByAModule= Ta zasada jest zmuszona <b>do %s</b> przez aktywowany modułu
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Należy uruchomić to polecenie
     YourPHPDoesNotHaveSSLSupport=funkcji SSL nie są dostępne w PHP
     DownloadMoreSkins=Więcej skórek do pobrania
     SimpleNumRefModelDesc=Zwraca numer w farmacie %syymm nnnn, gdzie yy to rok, mm to miesiąc i nnnn jest ciągiem cyfr bez przerwania i bez możliwości resetu do wartości początkowej
    -ShowProfIdInAddress=Pokaż zawodami identyfikator z adresów na dokumentach
    -ShowVATIntaInAddress=Ukryj VAT Intra num z adresów na dokumenty
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Częściowe tłumaczenie
    -MAIN_DISABLE_METEO=Wyłącz widok pictogramów meteo
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Przetestuj się zalogować do interfejsu API
    -ProxyDesc=Niektóre funkcje Dolibarr muszą mieć dostęp do Internetu. Tutaj możesz określić parametry tego dostępu. Jeśli serwer Dolibarr jest za serwerem proxy, te parametry określą jak uzyskać dostęp do Internetu za jego pośrednictwem.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Zewnętrzny dostęp
     MAIN_PROXY_USE=Użyj serwera proxy (inaczej bezpośredni dostęp do internetu)
     MAIN_PROXY_HOST=Imię i nazwisko / adres serwera proxy
     MAIN_PROXY_PORT=Port serwera proxy
     MAIN_PROXY_USER=Zaloguj się, aby korzystać z serwera proxy
     MAIN_PROXY_PASS=Hasło do korzystania z serwera proxy
    -DefineHereComplementaryAttributes=Określ tutaj wszystkie atrybuty, niedostępne jako domyślne, które mają być obsługiwane dla  %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Uzupełniające atrybuty
     ExtraFieldsLines=Atrybuty uzupełniające (linie)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=(Linie uzupełniające atrybuty order)
     ExtraFieldsSupplierInvoicesLines=Atrybuty uzupełniające (linie na fakturze)
     ExtraFieldsThirdParties=Atrybuty uzupełniające (thirdparty)
    -ExtraFieldsContacts=Atrybuty uzupełniające (kontakt / adres)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Atrybuty uzupełniające (członek)
     ExtraFieldsMemberType=Atrybuty uzupełniające (typ członkiem)
     ExtraFieldsCustomerInvoices=Atrybuty uzupełniające (faktury)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=tylko alphanumericals i małe litery bez przest
     SendmailOptionNotComplete=Uwaga, w niektórych systemach Linux, aby wysłać e-mail z poczty elektronicznej, konfiguracja wykonanie sendmail musi conatins opcja-ba (mail.force_extra_parameters parametr w pliku php.ini). Jeśli nigdy niektórzy odbiorcy otrzymywać e-maile, spróbuj edytować ten parametr PHP z mail.force_extra_parameters =-ba).
     PathToDocuments=Ścieżka do dokumentów
     PathDirectory=Katalog
    -SendmailOptionMayHurtBuggedMTA=Funkcja wysłać maile za pomocą metody "PHP poczty bezpośredniej" wygeneruje wiadomości, że może nie być prawidłowo przeanalizowany przez niektórych otrzymujących serwerów pocztowych. Powoduje to, że niektóre maile nie mogą być odczytywane przez ludzi obsługiwanych przez te platformy podsłuchu. To przypadku niektórych dostawców internetowych (Ex: Pomarańczowy we Francji). To nie jest problem w Dolibarr, ani w PHP, ale na otrzymywanie serwera poczty. Możesz jednak dodać opcję MAIN_FIX_FOR_BUGGED_MTA do 1 w konfiguracji - inne zmodyfikować Dolibarr, aby tego uniknąć. Jednakże, mogą wystąpić problemy z innymi serwerami, które przestrzegają ściśle standardu SMTP. Inne rozwiązanie (zalecane) jest użycie metody "gniazdo SMTP biblioteki", który nie ma wad.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Ustawienia tłumaczenia
     TranslationKeySearch=Szukaj klucza lub ciągu tłumaczenia
     TranslationOverwriteKey=Nadpisz tłumaczony ciąg
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Tłumaczony ciąg
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Aktywowane aplikacje/moduły: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Musisz przynajmniej umożliwić 1 moduł
    -ClassNotFoundIntoPathWarning=Klasa% s nie znaleziono na drodze PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Tak w lecie
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Przechowywania sesji szyfrowane Suhosin
     ConditionIsCurrently=Stan jest obecnie% s
    -YouUseBestDriver=Za pomocą sterownika% s, który jest najlepszym kierowcą dostępne obecnie.
    -YouDoNotUseBestDriver=Używać dysku% s% s, ale kierowca jest zalecane.
    -NbOfProductIsLowerThanNoPb=Masz tylko% s produktów / usług do bazy danych. W ten sposób nie wymaga żadnej szczególnej optymalizacji.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Pozycjonowanie
    -YouHaveXProductUseSearchOptim=Masz% s produktu w bazie danych. Należy dodać stałą PRODUCT_DONOTSEARCH_ANYWHERE do 1 w Home-Setup-Inne, można ograniczyć wyszukiwanie do początku ciągów składających możliwe dla bazy danych do wykorzystania indeksu i powinieneś otrzymać natychmiastową odpowiedź.
    -BrowserIsOK=Używasz przeglądarki internetowej% s. Ta przeglądarka jest ok dla bezpieczeństwa i wydajności.
    -BrowserIsKO=Używasz przeglądarki internetowej% s. Ta przeglądarka jest znany zły wybór dla bezpieczeństwa, wydajności i niezawodności. Mamy polecam do korzystania z przeglądarki Firefox, Chrome, Opera lub Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug jest załadowany.
     XCacheInstalled=XCache jest załadowany.
    -AddRefInList=Wyświetlacz klienta / ref dostawcą na liście (wybierz listy lub combobox) i większość z hiperłącza. Osób trzecich pojawia się nazwa "CC12345 - SC45678 - duży coorp firmy", zamiast "The big coorp firmy".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edycja pola% s
     FillThisOnlyIfRequired=Przykład: +2 (wypełnić tylko w przypadku strefy czasowej w stosunku problemy są doświadczeni)
     GetBarCode=Pobierz kod kreskowy
     ##### Module password generation
     PasswordGenerationStandard=Wróć hasło generowane zgodnie z wewnętrznym Dolibarr algorytmu: 8 znaków zawierających cyfry i znaki udostępniony w małe.
    -PasswordGenerationNone=Nie zgłosił żadnych wygenerowane hasło. Hasło należy wpisać ręcznie.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Powrót hasło zależności osobiście określonej konfiguracji.
     SetupPerso=Zgodnie z twoją konfiguracją
     PasswordPatternDesc=Opis wzoru hasła
    @@ -1195,23 +1205,23 @@ UserMailRequired=Email wymagane, aby utworzyć nowego użytkownika
     HRMSetup=Ustawianie modułu HR
     ##### Company setup #####
     CompanySetup=Firmy konfiguracji modułu
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=Powiadomienia email pozwalają na wysyłanie automatycznych wiadomości email w tle dla pewnym zdarzeń w aplikacji Dolibarr. Odbiorca powiadomień może być zdefiniowany:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Szablony dokumentów
    -DocumentModelOdt=Generowanie dokumentów z szablonów (.odt OpenDocuments lub ods pliki dla OpenOffice, KOffice, TextEdit, ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Znak wodny w sprawie projektu dokumentu
     JSOnPaimentBill=Aktywuj funkcję automatyczne wypełnianie linii płatności w formie płatności
    -CompanyIdProfChecker=Profesjonalny Identyfikator unikalny
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Musi być unikatowy?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Wywóz <b>link %s</b> format jest dostępny na poniższy link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Wywóz <b>link %s</b> format jest dostępny na poniższy
     BillsSetup=Konfiguracja modułu faktur
     BillsNumberingModule=Faktur i not kredytowych numeracji modułu
     BillsPDFModules=Faktura dokumentów modele
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Nota kredytowa
     CreditNotes=Not kredytowych
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Zarządzanie logowania dla każdego członka
     AdherentMailRequired=Email wymagane, aby utworzyć nowy członek
     MemberSendInformationByMailByDefault=Checkbox wysłać mail z potwierdzeniem do członków jest domyślnie
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Konfiguracja LDAP
     LDAPGlobalParameters=Parametry globalne
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Testowanie wyszukiwania LDAP
     LDAPSynchroOK=Synchronizacja udany test
     LDAPSynchroKO=Niepowodzenie testu synchronizacji
    -LDAPSynchroKOMayBePermissions=Niepowodzenie testu synchronizacji. Upewnij się, że połączenie z serwerem jest poprawnie skonfigurowane i pozwala na aktualizacje LDAP
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=TCP podłączyć do serwera LDAP powiodło się (Server= %s, port= %s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=TCP podłączyć do serwera LDAP nie powiodło się (Server= %s, port= %s)
    -LDAPBindOK=Połącz / Authentificate na serwerze LDAP sukces (Server =% s, port =% s, Admin =% s, hasło =% s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=Kontakt / Authentificate do serwera LDAP nie powiodło się (Server= %s, port= %s, %s= Administrator, Password= %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=Serwer LDAP skonfigurowany dla wersji 3
     LDAPSetupForVersion2=Serwer LDAP skonfigurowany dla wersji 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Przykład: sAMAccountName
     LDAPFieldFullname=Imię i nazwisko
     LDAPFieldFullnameExample=Przykład: cn
    -LDAPFieldPasswordNotCrypted=Hasło nie zaszyfrowane
    -LDAPFieldPasswordCrypted=Zaszyfrowane hasło
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Przykład: userPassword
     LDAPFieldCommonNameExample=Przykład: cn
     LDAPFieldName=Nazwa
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Przykład wartości są dla <b>OpenLDAP</b> ładowane z następujących schematów: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Jeśli używasz thoose wartości i OpenLDAP, zmodyfikować plik konfiguracyjny LDAP <b>slapd.conf</b> do wszystkich thoose schemas załadowany.
     ForANonAnonymousAccess=Dla uwierzytelniane dostęp (do zapisu na przykład)
     PerfDolibarr=Konfiguracja Wyniki / optymalizacja raport
    -YouMayFindPerfAdviceHere=Znajdziesz na tej stronie kilka czeków lub porad związanych z realizacją.
    -NotInstalled=Nie jest zainstalowany, więc serwer nie jest wolniejsze od tego.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Aplikacyjnych cache
     MemcachedNotAvailable=Nie znaleziono cache aplikacyjnych. Możesz zwiększyć wydajność poprzez zainstalowanie serwera cache i Memcached moduł w stanie korzystać z tego serwera cache. <br> Więcej informacji tutaj <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a> . <br> Należy pamiętać, że wiele hosting provider nie zapewnia takiego serwera cache.
     MemcachedModuleAvailableButNotSetup=Moduł memcached dla aplikacyjnej cache znaleźć, ale konfiguracja modułu nie jest kompletna.
     MemcachedAvailableAndSetup=Moduł memcached dedykowane obsłudze serwer memcached jest włączony.
     OPCodeCache=OPCODE cache
    -NoOPCodeCacheFound=Nie znaleziono OpCode cache. Może użyć innego cache OPCODE niż XCache lub eAccelerator (dobry), może nie masz OPCODE cache (bardzo źle).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=Cache HTTP do zasobów statycznych (css, img, JavaScript)
     FilesOfTypeCached=Pliki typu %s są buforowane przez serwer HTTP
     FilesOfTypeNotCached=Pliki typu %s nie są buforowane przez serwer HTTP
     FilesOfTypeCompressed=Pliki typu %s są kompresowane przez serwer HTTP
     FilesOfTypeNotCompressed=Pliki typu %s nie są kompresowane przez serwer HTTP
     CacheByServer=Cache przez serwer
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache przez przeglądarkę
     CompressionOfResources=Kompresja odpowiedzi HTTP
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Taka automatyczna detekcja nie jest możliwe przy obecnych przeglądarek
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Domyślna kolejność sortowania
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Produkty konfiguracji modułu
     ServiceSetup=Konfiguracja modułu Usługi
     ProductServiceSetup=Produkty i usługi moduły konfiguracyjne
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=Maksymalna liczba produktów combo wybrać list (0= bez limitu)
    -ViewProductDescInFormAbility=Wizualizacja opisy produktów w formach (inaczej jak popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Także jeśli masz dużą ilość produktu (> 100 000), można zwiększyć prędkość przez ustawienie stałej PRODUCT_DONOTSEARCH_ANYWHERE do 1 w Setup-> Inne. Szukaj zostaną ograniczone do początku łańcucha.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Domyślny kod kreskowy typu użyć do produktów
     SetDefaultBarcodeTypeThirdParties=Domyślny typ kodu kreskowego używanego dla kontahentów
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Konfiguracja modułu wysyłek
     SendingsReceiptModel=Wysyłanie otrzymania modelu
     SendingsNumberingModules=Sendings numerowania modułów
     SendingsAbility=Obsługuj arkusze wysyłkowe dla dostaw do klientów
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Dowolny tekst sprawie przemieszczania
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Produkty dostaw otrzymania numeracji modułu
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Zaawansowany edytor
     ActivateFCKeditor=Uaktywnij FCKeditor za:
     FCKeditorForCompany=WYSIWIG tworzenie / edycja spółek opis i notatki
     FCKeditorForProduct=WYSIWIG tworzenie / edycja produktów / usług "opis i notatki
    -FCKeditorForProductDetails=WYSIWIG tworzenie / edycja produktów szczegóły linii dla wszystkich podmiotów (wnioski, zamówienia, faktury, itp ...). <font class="warning">Ostrzeżenie: Użycie tej opcji w tym przypadku nie jest zalecane, ponieważ może poważnie to spowodować problemy z znaków specjalnych i strona formatowania, gdy buduje PDF pliki.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG tworzenie / edycja wiadomości
     FCKeditorForUserSignature=WYSIWIG tworzenie / edycja podpisu użytkownika
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Połączenie udało, ale baza danych nie patrzy się osCommerce danych (klucz %s nie został znaleziony w tabeli %s).
    -OSCommerceTestOk=Połączenie do serwera ' %s' z bazą danych " %s" z użytkownikiem '%s' powiodło się.
    -OSCommerceTestKo1=Pomyślnie połączono się z serwerem '%s', ale baza danych '%s' jest niedostępna.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Połączenie do serwera '% s' w bazie danych '% s' z użytkownika '% s' sukces.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Połączenie do serwera '%s' z użytkownikiem '%s' nie powiodło się.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=W przypadku korzystania z modułu Point of Sale (moduł POS dostarczony domyślnie lub inny moduł zewnętrzny), ta konfiguracja może być ignorowana przez twój moduł POS. Większość modułów POS jest zaprojektowana, aby wystawiać natychmiast fakturę i obniżać zapas domyślnie, czyli podobnie jak poniższe opcje. Tak więc, jeśli chcesz lub nie, aby twój moduł POS obsłużył zmniejszanie zapasu na magazynie podczas rejestrowania sprzedaży, sprawdź konfigurację twojego modułu POS.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu skreślony
     Menus=Menu
    @@ -1548,7 +1561,7 @@ DetailRight=Warunek, aby wyświetlić menu nieautoryzowanych szary
     DetailLangs=Lang nazwy etykiety kodów
     DetailUser=Intern / Pomocy Wszystkie
     Target=Cel
    -DetailTarget=Target dla linków (_blank górę otworzyć nowe okno)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Poziom (-1: top menu 0: nagłówek menu&gt; 0 menu i podmenu)
     ModifMenu=Menu zmiany
     DeleteMenu=Usuń element menu
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT jest należny: <br> - W dniu dostawy / płatności za t
     OptionVatDebitOptionDesc=VAT jest należny: <br> - W dniu dostawy / płatności za towary <br> - Na fakturze (obciążenie) na usługi
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Czas VAT exigibility domyślnie wg wybranej opcji:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Na dostawy
     OnPayment=W sprawie wypłaty
     OnInvoice=Na fakturze
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Kup konto. kod
     AgendaSetup=Działania i porządku konfiguracji modułu
     PasswordTogetVCalExport=Klucz do wywozu zezwolić na link
     PastDelayVCalExport=Nie starsze niż eksport przypadku
    -AGENDA_USE_EVENT_TYPE=Użyj typów zdarzeń (zarządzanie w menu Konfiguracja -> Słowniki -> Typ zdarzeń w agendzie)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Ustaw automatycznie tego typu imprezy w filtrze wyszukiwania widzenia porządku obrad
    -AGENDA_DEFAULT_FILTER_STATUS=Ustaw automatycznie tego stanu dla wydarzeń w filtrze wyszukiwania widzenia porządku obrad
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Która karta chcesz otworzyć domyślnie po wybraniu menu Agendę
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Kliknij, aby Dial konfiguracji modułu
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=Moduł ten pozwala dodać ikonę po numer telefonu Dolibarr kontakty. Kliknięcie na tę ikonę, będzie połączenie z serveur z danego adresu URL można zdefiniować poniżej. Może to być wykorzystane, aby połączyć się z Call Center z systemu Dolibarr, że mogą dzwonić na numer telefonu SIP system przykład.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Używaj tylko łącza "tel:" na numery telefonów
    -ClickToDialUseTelLinkDesc=Użyj tej metody, jeśli użytkownicy mają softphone lub interfejs oprogramowania zainstalowanego na tym samym komputerze, niż przeglądarce i nazywa się po kliknięciu na link w przeglądarce, które zaczynają się od "tel:". Jeśli potrzebujesz pełne rozwiązanie serwera (bez potrzeby instalacji oprogramowania lokalnego), należy ustawić na "Nie" i wypełnić następne pole.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Punktów sprzedaży
     CashDeskSetup=Kasa konfiguracji modułu
    -CashDeskThirdPartyForSell=Domyślnie ogólny osób trzecich do korzystania z Sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Środki pieniężne na rachunku do korzystania sprzedaje
     CashDeskBankAccountForCheque= Chcesz używać do otrzymywania płatności w formie czeku
     CashDeskBankAccountForCB= Chcesz używać do przyjmowania płatności gotówkowych za pomocą kart kredytowych
    -CashDeskDoNotDecreaseStock=Wyłącz spadek akcji, gdy sprzedaż odbywa się z punktów sprzedaży (jeśli "nie", spadek zapasów odbywa się dla każdego sprzedają zrobić z POS, co jest rozwiązaniem określonym w module magazynie).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Życie i ograniczyć magazyn użyć do spadku magazynie
    -StockDecreaseForPointOfSaleDisabled=Spadek Zdjęcie z punktach sprzedaży wyłączony
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Zmniejszenie liczby zapasów w POS nie jest kompatybilne z systemem zarządzania partiami
    -CashDeskYouDidNotDisableStockDecease=Nie wyłączono spadek akcji podczas dokonywania sprzedaży od punktu sprzedaży. Więc jest wymagane magazynu.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Zakładka konfiguracji modułu
    -BookmarkDesc=Moduł ten umożliwia zarządzanie zakładkami. Możesz także dodać skróty do jakichkolwiek Dolibarr strony lub stron internetowych externale po lewej stronie menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maksymalna liczba zakładek, aby pokazać, w lewym menu
     ##### WebServices #####
     WebServicesSetup=WebServices konfiguracji modułu
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Firma Multi-Moduł konfiguracji
     ##### Suppliers #####
     SuppliersSetup=Dostawca konfiguracji modułu
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Modele numeracji faktur dostawcy
     IfSetToYesDontForgetPermission=Jeśli jest ustawiona na yes, nie zapomnij, aby zapewnić uprawnień do grup lub użytkowników dopuszczonych do drugiego zatwierdzenia
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Projekt instalacji modułu
     ProjectsModelModule=Wzór dokumentu projektu sprawozdania
     TasksNumberingModules=Zadania numeracji modułu
     TaskModelModule=Zadania raporty modelu dokumentu
    -UseSearchToSelectProject=Czekaj na wciśnięcie klawisza przed załadowaniem zawartości listy (To może zwiększyć wydajność jeżeli masz dużą ilość projektów, ale zmniejszy wygodę użytkowania)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Okresy rozliczeniowe
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Możesz znaleźć opcje po
     ListOfNotificationsPerUser=Lista powiadomień na użytkownika*
     ListOfNotificationsPerUserOrContact=Lista powiadomień na użytkownika* lub na kontakt**
     ListOfFixedNotifications=Lista stałych powiadomień
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Próg
     BackupDumpWizard=Konfigurator wykonywania kopii zapasowej bazy danych
     SomethingMakeInstallFromWebNotPossible=Instalacja zewnętrznych modułów za pomocą interfejsu sieciowego nie jest możliwa z powodu następujących przyczyn:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Instalacja zewnętrznych modułów z p
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Kolor podświetlenia linii przy najechaniu na nią myszą (pozostaw puste jeżeli ma nie być podświetlona)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Kolor odnośników
     PressF5AfterChangingThis=Naciśnij CTRL+F5 na klawiaturze aby wyczyścić cache w przeglądarce po zmianie tej wartości, aby zobaczyć efekt tej zmiany
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Kolor tła dla równomiernych lini tabeli
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Widoczne wszędzie
     VisibleNowhere=Visible nowhere
     FixTZ=Strefa czasowa fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=Używasz ostatniej stabilnej wersji
     TitleExampleForMajorRelease=Przykład wiadomości można użyć, aby ogłosić to główne wydanie (prosimy używać go na swoich stronach internetowych)
     TitleExampleForMaintenanceRelease=Przykład wiadomości można użyć, aby ogłosić wydanie konserwacji (prosimy używać go na swoich stronach internetowych)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s jest dostępny. Wersja %s  jest głównym wydaniem z dużą ilością nowych funkcji dla użytkowników i deweloperów. Możesz ją pobrać na stronie https://www.dolibarr.org (podkatalog Wersje stabilne). Pełna lista zmian dostępna jest w <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a>.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s jest dostępny. Wersja %s jest wydaniem poprawkowym, więc zawiera tylko poprawki naprawiające błędy. Zalecamy wszystkim użycie starszej wersji do aktualizacji do tej wersji. Jak w każdej wersji poprawkowej, nie ma tutaj nowych funkcjonalności, zmian w strukturze danych w porównaniu do aktualnej wersji. Możesz ją pobrać na stronie https://www.dolibarr.org (podkatalog Wersje stabilne). Pełna lista zmian dostępna jest w <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a>.
    -MultiPriceRuleDesc=Gdy opcja "Kilka poziom cen na produkt / usługę" jest włączone, można zdefiniować różne ceny (jeden na poziomie cen) dla każdego produktu. Aby zaoszczędzić czas, można wprowadzić tutaj rządzić mieć cenę każdego poziomu autocalculated według ceny pierwszym poziomie, więc trzeba będzie wprowadzić tylko cenę za pierwszego poziomu na każdym produkcie. Ta strona jest tutaj, aby zaoszczędzić czas i może być przydatne tylko wtedy, jeśli ceny każdego poziomó są w stosunku do pierwszego poziomu. Można zignorować tę stronę w większości przypadków.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Szablon dokumentu produktu
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=Wszyscy wydawcy
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Wykrycie niemożliwe
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Lista dostępnych API
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=Ten użytkownik nie ma zdefiniowanych uprawnień
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/pl_PL/companies.lang b/htdocs/langs/pl_PL/companies.lang
    index bde9269a0e3..1bf1fad19d4 100644
    --- a/htdocs/langs/pl_PL/companies.lang
    +++ b/htdocs/langs/pl_PL/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Wybierz kontrahenta
     ConfirmDeleteCompany=Czy jesteś pewien, ze chcesz usunąć tą firmę i wszystkie zawarte informacje?
     DeleteContact=Usuń kontakt/adres
     ConfirmDeleteContact=Czy jesteś pewien, ze chcesz usunąć ten kontakt i wszystkie zawarte informacje?
    -MenuNewThirdParty=Nowy kontrahent
    -MenuNewCustomer=Nowy klient
    -MenuNewProspect=Nowy potencjalny klient
    -MenuNewSupplier=Nowy dostawca
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Nowa osoba prywatna
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Stwórz kontrahenta (dostawcę)
     CreateThirdPartyOnly=Utwórz kontrahenta
     CreateThirdPartyAndContact=Utwórz kontrahenta i potomny kontakt
    @@ -25,22 +25,22 @@ ThirdPartyContact=Kontakty/adresy kontrahenta
     Company=Firma
     CompanyName=Nazwa firmy
     AliasNames=Alias (handlowy, znak firmowy, ...)
    -AliasNameShort=Alias
    +AliasNameShort=Alias Name
     Companies=Firmy
    -CountryIsInEEC=Kraj należy do Europejskiej Strefy Ekonomicznej
    -ThirdPartyName=Nazwa kontrahenta
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Email kontrahenta
    -ThirdParty=Kontrahent
    -ThirdParties=Kontrahenci
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Potencjalni klienci
     ThirdPartyProspectsStats=Potencjalni klienci
     ThirdPartyCustomers=Klienci
     ThirdPartyCustomersStats=Klienci
     ThirdPartyCustomersWithIdProf12=Klienci z %s lub %s
     ThirdPartySuppliers=Dostawcy
    -ThirdPartyType=Typ kontrahenta
    +ThirdPartyType=Type of company
     Individual=Osoba prywatna
    -ToCreateContactWithSameName=Utworzy automatycznie kontakt/adres z takimi samymi informacjami jak dane kontrahenta. Najczęściej jeżeli twój kontrahent jest osobą fizyczną, wystarczy utworzenie samego kontrahenta.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Firma macierzysta
     Subsidiaries=Oddziały
     ReportByMonth=Raport za miesiąc
    @@ -75,12 +75,12 @@ Zip=Kod pocztowy
     Town=Miasto
     Web=Strona www
     Poste= Stanowisko
    -DefaultLang=Domyślny język
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    -VATIsNotUsed=Sales tax is not used
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
    +VATIsNotUsed=Nie jest płatnikiem VAT
     CopyAddressFromSoc=Uzupełnij adres danymi kontrahenta
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Konto bankowe dla płatności
     OverAllProposals=Propozycje
    @@ -258,10 +258,10 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Składnia jest poprawna
    -VATReturn=VAT return
    +VATReturn=Zwrot VAT
     ProspectCustomer=Perspektywa/Klient
     Prospect=Perspektywa
     CustomerCard=Karta Klienta
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Ten klient ma standardowy rabat <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Ten klient domyślnie nie posiada względnego rabatu
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=Ten klient ma dostępny rabat (kredyty lub zaliczki) dla <b>%s</b>%s
    -CompanyHasDownPaymentOrCommercialDiscount=Ten klient ma dostępny rabat (komercyjny, zaliczki) dla <b>%s</b>%s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Ten klient nadal posiada noty kredytowe dla <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Żaden
    -Supplier=Dostawca
    +Supplier=Vendor
     AddContact=Stwórz konktakt
     AddContactAddress=Stwórz kontakt/adres
     EditContact=Edytuj kontakt
    @@ -303,22 +303,22 @@ AddThirdParty=Dodaj kontrahenta
     DeleteACompany=Usuń firmę
     PersonalInformations=Prywatne dane osobowe
     AccountancyCode=Konto księgowe
    -CustomerCode=Kod Klienta
    -SupplierCode=Kod dostawcy
    -CustomerCodeShort=Kod klienta
    -SupplierCodeShort=Kod dostawcy
    -CustomerCodeDesc=Kod Klienta, unikatowy dla wszystkich klientów
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Wymagane, jeżeli Kontrahent jest klientem lub potencjalnym klientem
     RequiredIfSupplier=Wymagane jeżeli kontrahent jest dostawcą
    -ValidityControledByModule=Ważność kontrolowana przez moduł
    -ThisIsModuleRules=To są zasady tego modułu
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Potencjalny Klient do kontaktu
     CompanyDeleted=Firma " %s" usunięta z bazy danych.
     ListOfContacts=Lista kontaktów/adresów
     ListOfContactsAddresses=Lista kontaktów/adresów
    -ListOfThirdParties=Lista kontrahentów
    -ShowCompany=Pokaż kontrahentów
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Pokaż kontakt
     ContactsAllShort=Wszystkie (bez filtra)
     ContactType=Typ kontaktu
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Ten kontakt nie jest kontaktem dla żadnej oferty handlo
     NoContactForAnyContract=Ten kontakt nie jest kontaktem dla żadnego kontraktu
     NoContactForAnyInvoice=Ten kontakt nie jest kontaktem dla żadnej faktury
     NewContact=Nowy kontakt
    -NewContactAddress=Nowy kontakt / adres
    +NewContactAddress=New Contact/Address
     MyContacts=Moje kontakty
     Capital=Kapitał
     CapitalOf=Kapitał %s
     EditCompany=Edycja firmy
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Sprawdź
    -VATIntraCheckDesc=Kliknij tutaj <b>%s</b> aby sprawdzić NIP Klienta w serwisie Europejskiej Komisji VAT. Wymagany jest dostęp do internetu.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do?locale=pl
    -VATIntraCheckableOnEUSite=Sprawdź NIP Klienta w serwisie Europejskiej Komisji VAT
    -VATIntraManualCheck=Możesz również sprawdzić ręcznie wchodząc na stonie Europejskiej Komisji VAT <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Brak możliwości sprawdzenia. Usługa nie jest dostarczana dla wybranego regionu (%s).
    -NorProspectNorCustomer=Ani perspektywa, ani klient
    -JuridicalStatus=Forma prawna
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Personel
     ProspectLevelShort=Potencjał
     ProspectLevel=Potencjał potencjalnego klienta
    @@ -387,12 +387,12 @@ ExportCardToFormat=Eksport karty do formatu
     ContactNotLinkedToCompany=Kontakt nie połączony z żadnym kontrahentem
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=Brak dostępu do Dolibarr
    -ExportDataset_company_1=Kontrahenci (Firmy/Fundacje/Osoby fizyczne) i ich ustawienia
    -ExportDataset_company_2=Kontakty i właściwości
    -ImportDataset_company_1=Kontrahenci (Firmy/Fundacje/Osoby fizyczne) i ich ustawienia
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Konta bankowe kontrahentów
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Poziom cen
     DeliveryAddress=Adres dostawy
     AddAddress=Dodaj adres
    @@ -402,16 +402,16 @@ DeleteFile=Usuń plik
     ConfirmDeleteFile=Czy na pewno chcesz usunąć ten plik?
     AllocateCommercial=Przypisać do przedstawiciela
     Organization=Organizacja
    -FiscalYearInformation=Informacje dotyczące roku podatkowego
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Pierwszy miesiąc roku podatkowego
    -YouMustAssignUserMailFirst=Musisz w pierwszej kolejności dodać adres email dla tego użytkownika aby udostępnić powiadomienia email dla niego.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Żeby dodać powiadomienia email, najpierw musisz określić kontakty z ważnymi adresami email dla kontrahentów
    -ListSuppliersShort=Lista dostawców
    -ListProspectsShort=Lista potencjalnych klientów
    -ListCustomersShort=Lista klientów
    -ThirdPartiesArea=Zamówienie i konktakt 
    -LastModifiedThirdParties=Ostatnich %s modyfikowanych kontrahentów
    -UniqueThirdParties=Łącznie unikatowych kontrahentów
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Otwarte
     ActivityCeased=Zamknięte
     ThirdPartyIsClosed=Kontrahent jest zamknięty
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Biężący, niezapłacony rachunek
     OutstandingBill=Maksymalna kwota niezapłaconego rachunku
     OutstandingBillReached=Maksymalna kwota dla niespłaconych rachunków osiągnięta
     OrderMinAmount=Minimalna kwota dla zamówienia
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Dowolny kod Klienta / Dostawcy. Ten kod może być modyfikowany w dowolnym momencie.
     ManagingDirectors=Funkcja(e) managera (prezes, dyrektor generalny...)
     MergeOriginThirdparty=Duplikuj kontrahenta (kontrahenta, którego chcesz usunąć)
     MergeThirdparties=Scal kontrahentów
    -ConfirmMergeThirdparties=Jesteś pewien, że chcesz połączyć tego kontrahenta z obecny? Wszystkie połączone dokumenty (faktury, zamówienia, ...) zostaną przeniesione do obecnego kontrahenta, a wtedy ten kontrahent zostanie usunety.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login przedstawiciela handlowego
     SaleRepresentativeFirstname=Imię przedstawiciela handlowego
     SaleRepresentativeLastname=Nazwisko przedstawiciela handlowego
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/pl_PL/errors.lang b/htdocs/langs/pl_PL/errors.lang
    index ce6a8de3891..7d0d726e9ef 100644
    --- a/htdocs/langs/pl_PL/errors.lang
    +++ b/htdocs/langs/pl_PL/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Wartość '%s' ma zły format daty
     ErrorWrongDate=Data nie jest poprawna!
     ErrorFailedToWriteInDir=Nie można zapisać w katalogu %s
     ErrorFoundBadEmailInFile=Znaleziono nieprawidłową składnię adresu email dla %s linii w pliku (przykładowo linia %s z adresem email %s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Niektóre pola wymagane nie były uzupełnione.
     ErrorSubjectIsRequired=Temat wiadomości jest wymagany
     ErrorFailedToCreateDir=Nie można utworzyć katalogu. Sprawdź, czy serwer WWW użytkownik ma uprawnienia do zapisu do katalogu dokumentów Dolibarr. Jeśli parametr <b>safe_mode</b> jest włączona w tym PHP, czy posiada Dolibarr php pliki do serwera internetowego użytkownika (lub grupy).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Proszę wypełnić wartości dla listy wyboru
     ErrorNoValueForCheckBoxType=Proszę wypełnić wartości dla listy checkbox
     ErrorNoValueForRadioType=Proszę wypełnić wartość liście radiowej
     ErrorBadFormatValueList=Wartość na tej liście nie może mieć więcej niż jeden <u>przecinek: %s,</u> ale wymagany jest przynajmniej jeden: klucz, wartość
    -ErrorFieldCanNotContainSpecialCharacters=<b>Pole %s</b> nie zawiera znaki specjalne.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=<b>Pole% s nie</b> może zawierać znaków specjalnych, ani wielkich liter i nie może zawierać tylko liczby.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Nie aktywowano modułu księgowości
     ErrorExportDuplicateProfil=Ta nazwa profil już istnieje dla tego zestawu eksportu.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP dopasowywania nie jest kompletna.
     ErrorLDAPMakeManualTest=A. LDIF plik został wygenerowany w katalogu %s. Spróbuj załadować go ręcznie z wiersza polecenia, aby mieć więcej informacji na temat błędów.
    -ErrorCantSaveADoneUserWithZeroPercentage=Nie można zapisać działania z "Statut nie rozpocznie", jeśli pole "wykonana przez" jest wypełniona.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Numer identyfikacyjny używany do tworzenia już istnieje.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Nie udało się usunąć rekordu, ponieważ ma on pewne potomstwo.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Nie można usunąc wpisu. Jest on już używany lub dołączony do innego obiektu.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=JavaScript nie może być wyłączony aby korzystać z tej funkcji. Aby włączyć/wyłączyć Javascript, przejdź do menu Start->Ustawienia->Ekran.
     ErrorPasswordsMustMatch=Zarówno wpisane hasło musi się zgadzać się
    -ErrorContactEMail=Błąd techniczny. Proszę skontaktować się z administratorem, pod adresem email <b>%s</b> podając kod błędu <b>%s</b> w wiadomości, lub lepiej - zrzut ekranu.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Nieprawidłowa wartość dla <b>%s</b> numer pola (wartość <b>&quot;%s&quot;</b> nie pasuje regex <b>%s</b> zasady)
     ErrorFieldValueNotIn=Błędna wartość numeru <b>pola% s (wartości '%</b> s' nie jest wartością pola dostępne w <b>tabeli% s% s)</b>
     ErrorFieldRefNotIn=Nieprawidłowa wartość dla <b>%s</b> liczba pól (wartość <b>'%s</b> &quot;nie jest <b>%s</b> istniejących ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Program antywirusowy nie był w stanie potwierdzi
     ErrorSpecialCharNotAllowedForField=Znaki specjalne nie są dozwolone dla pola "%s"
     ErrorNumRefModel=Odniesienia nie istnieje w bazie danych (%s) i nie jest zgodna z tą zasadą numeracji. Zmiana nazwy lub usuwanie zapisu w odniesieniu do aktywacji tego modułu.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Ustawienia modułu wyglądają na niekompletne. Idź do Strona główna - Konfiguracja - Moduły aby ukończyć.
     ErrorBadMask=Błąd w masce wprowadzania
     ErrorBadMaskFailedToLocatePosOfSequence=Błąd, maska ​​bez kolejnego numeru
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Błąd, zła wartość zresetowane
     ErrorMaxNumberReachForThisMask=Maksymalna liczba zasięg dla tej maski
     ErrorCounterMustHaveMoreThan3Digits=Licznik musi mieć więcej niż 3 cyfry
     ErrorSelectAtLeastOne=Błąd. Wybierz co najmniej jeden wpis.
    -ErrorDeleteNotPossibleLineIsConsolidated=Usunięcie nie możliwe, ponieważ wpis jest związany z transakcją bankową, która była konsyliowana
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s jest przypisany do innego państwa
     ErrorFailedToSendPassword=Nie można wysłać hasła
     ErrorFailedToLoadRSSFile=Nie dostać kanału RSS. Spróbuj dodać stałą MAIN_SIMPLEXMLLOAD_DEBUG czy komunikaty o błędach nie zawiera wystarczających informacji.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Użytkownik <b>%s</b> nie został znaleziony.
     ErrorLoginHasNoEmail=Ten użytkownik nie ma adresu e-mail. Proces przerwany.
     ErrorBadValueForCode=Zła wartość kody zabezpieczeń. Wprowadź nową wartość...
     ErrorBothFieldCantBeNegative=Pola %s i %s nie może być zarówno negatywny
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Ilość linii do faktur dla klientów nie może być ujemna
     ErrorWebServerUserHasNotPermission=Konto użytkownika <b>%s</b> wykorzystywane do wykonywania serwer WWW nie ma zgody na który
     ErrorNoActivatedBarcode=Nie Typ aktywny kodów kreskowych
    @@ -138,7 +141,7 @@ ErrorBadFormat=Zły format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Błąd, występuje kilka dostaw związanych z tą przesyłką. Usunięcie odrzucone.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Nie można usunąć płatności udostępnionej przez co najmniej jednego stanu zapłaci faktury z
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Nie można przypisać do stałej '% s'
     ErrorPriceExpression2=Nie można przedefiniować wbudowanej funkcji "%s"
     ErrorPriceExpression3=Niezdefiniowana zmienna '% s' w definicji funkcji
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Nieoczekiwany '%s'
     ErrorPriceExpression6=Błędna liczba argumentów (%s podano, %s oczekiwany)
     ErrorPriceExpression8=Nieoczekiwany operator '%s'
     ErrorPriceExpression9=Wystąpił nieoczekiwany błąd
    -ErrorPriceExpression10=Iperator '% s' nie ma argumentu
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Spodziewając '% s'
     ErrorPriceExpression14=Dzielenie przez zero
     ErrorPriceExpression17=Niezdefiniowana zmienna '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=Klient SOAP nie powiodło się z powodu błędu '% s
     ErrorGlobalVariableUpdater5=Nie wybrano zmiennej globalnej
     ErrorFieldMustBeANumeric=Pole <b>%s</b> musi mieć wartość numeryczną
     ErrorMandatoryParametersNotProvided=Obowiązkowe parametr (y) nie przewidziane
    -ErrorOppStatusRequiredIfAmount=Możesz ustawić szacunkową kwotę za możliwość / ołowiu. Więc należy także wprowadzić swój status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad definicja tablicy w menu modułu deskryptora (zły stosunek jakości do kluczowego fk_menu)
    -ErrorSavingChanges=Wystąpił błąd podczas zapisywania zmian
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=Flik musi mieć format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=Hasło zostało ustawione dla tego użytkownika. Jednakże nie Konto użytkownika zostało utworzone. Więc to hasło jest przechowywane, ale nie mogą być używane do logowania do Dolibarr. Może być stosowany przez zewnętrzny moduł / interfejsu, ale jeśli nie trzeba definiować dowolną logowania ani hasła do członka, można wyłączyć opcję "Zarządzaj login dla każdego członka" od konfiguracji modułu użytkownika. Jeśli potrzebujesz zarządzać logowanie, ale nie wymagają hasła, możesz zachować to pole puste, aby uniknąć tego ostrzeżenia. Uwaga: E może być również stosowany jako login, jeśli element jest połączony do użytkownika.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Zakładka z tego tytułu lub ten cel (URL) już ist
     WarningPassIsEmpty=Ostrzeżenie, hasło do bazy danych jest puste. Jest to luka w zabezpieczeniach. Powinieneś dodać hasło do bazy danych i zmienić wpis w pliku conf.php aby zmiany przyniosły efekt.
     WarningConfFileMustBeReadOnly=Uwaga, plik konfiguracyjny <b>(htdocs / conf / conf.php)</b> mogą być zastąpione przez serwer internetowy. Jest to poważna luka w zabezpieczeniach. Modyfikowanie uprawnień na wniosek jest w trybie tylko do odczytu dla użytkownika system operacyjny używany przez serwer sieci Web. Jeśli używasz systemu Windows i format FAT na dysku, musisz wiedzieć, że ten system plików nie pozwala na dodawanie uprawnień do pliku, więc nie może być całkowicie bezpieczne.
     WarningsOnXLines=Ostrzeżeń na linii źródło <b>%s</b>
    -WarningNoDocumentModelActivated=Nie modelu do generowania dokumentu, został aktywowany. Model będzie wybraną domyślnie dopóki nie zajrzysz do modułu konfiguracji.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Uwaga, po zakończeniu instalacji, musisz wyłączyć narzędzia instalacji/migracji poprzez dodanie pliku <b>install.lock</b> do katalogu <b>%s</b>. Brak tego pliku jest luką w zabezpieczeniach.
    -WarningUntilDirRemoved=Wszystkie ostrzeżenia na temat bezpieczeństwa (widoczne tylko dla użytkowników z uprawnieniami Administratora) pozostaną aktywne tak długo jak luka w zabezpieczeniach istnieje (lub stała MAIN_REMOVE_INSTALL_WARNING zostanie dodana w menu Konfiguracja -> Inne konfiguracje).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Ostrzeżenie, zamykanie odbywa się nawet wtedy, gdy kwota zależy od elementów źródłowych i docelowych. Włącz tę funkcję, z zachowaniem ostrożności.
     WarningUsingThisBoxSlowDown=Ostrzeżenie, za pomocą tego pola spowolnić poważnie do wszystkich stron zawierających pola.
     WarningClickToDialUserSetupNotComplete=Konfiguracja ClickToDial informacji dla użytkownika nie są kompletne (patrz zakładka ClickToDial na kartę użytkownika).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Zbyt wiele danych (więcej niż% s linii)
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Twój login został zmodyfikowany. Z powodów bezpieczeństwa musisz zalogować się z użyciem nowego loginy przed kolejną czynnością.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/pl_PL/interventions.lang b/htdocs/langs/pl_PL/interventions.lang
    index d1dc89bbd87..a239355b677 100644
    --- a/htdocs/langs/pl_PL/interventions.lang
    +++ b/htdocs/langs/pl_PL/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interwencje
     InterventionCard=Karta interwencji
     NewIntervention=Nowa interwencja
     AddIntervention=Tworzenie interwencji
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Wykaz interwencji
     ActionsOnFicheInter=Działania w zakresie interwencji
     LastInterventions=Ostatnie %s interwencje
    @@ -47,12 +48,12 @@ TypeContact_fichinter_external_CUSTOMER=W ślad za kontakt z klientem
     PrintProductsOnFichinter=Wydrukuj również linie typu "produkt" (nie tylko usługi) na karcie interwencji
     PrintProductsOnFichinterDetails=Interwencje generowane z zamówień
     UseServicesDurationOnFichinter=Użyj czasu trwania usług dla interwencji generowanych przez zamówienia
    -UseDurationOnFichinter=Hides the duration field for intervention records
    -UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
    +UseDurationOnFichinter=Ukrywa pole trwania dla rekordów interwencji
    +UseDateWithoutHourOnFichinter=Ukrywa godziny i minuty z pola dat dla rekordów interwencji
     InterventionStatistics=Statystyki interwencji
    -NbOfinterventions=Liczba kart interwencji
    -NumberOfInterventionsByMonth=Liczba kart interwencji w miesiącu (data potwierdzenia) 
    -AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
    +NbOfinterventions=Ilość kart interwencji
    +NumberOfInterventionsByMonth=Ilość kart interwencji w miesiącu (data potwierdzenia)
    +AmountOfInteventionNotIncludedByDefault=Ilość interwencji nie jest domyślnie uwzględniana w zysku (w większości przypadków do obliczania czasu wykorzystano karty czasu pracy). Ustaw opcję PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT na 1 w konfiguracji domowej - inne, aby je uwzględnić.
     ##### Exports #####
     InterId=ID interwencji
     InterRef=Numer referencyjny interwencji
    diff --git a/htdocs/langs/pl_PL/main.lang b/htdocs/langs/pl_PL/main.lang
    index 68817aaf670..6de29454e6b 100644
    --- a/htdocs/langs/pl_PL/main.lang
    +++ b/htdocs/langs/pl_PL/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Próba wysłania maila nie udana (nadawca=%s, odbiorca=%s)
     ErrorFileNotUploaded=Plik nie został załadowany. Sprawdź, czy rozmiar nie przekracza maksymalnej dopuszczalnej wagi, lub czy wolne miejsce jest dostępne na dysku. Sprawdz czy nie ma już pliku o takiej samej nazwie w tym katalogu.
     ErrorInternalErrorDetected=Wykryto błąd
     ErrorWrongHostParameter=Niewłaściwy parametr hosta
    -ErrorYourCountryIsNotDefined=Twój kraj nie został zdefiniowany. Przejdź do Start-setup-Edycja i wypełnij poprawnie  formularz.
    -ErrorRecordIsUsedByChild=Nie można usunąć rekordu. Ten zapis jest używany przez co najmniej jeden pokrewny rekord.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Błędna wartość
     ErrorWrongValueForParameterX=Nieprawidłowa wartość dla parametru %s
     ErrorNoRequestInError=Nie wykryto żadneog błednego zapytania.
    -ErrorServiceUnavailableTryLater=Usługa nie jest dostępna w tej chwili. Spróbuj ponownie później.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Zduplikuj niepowtarzalną wartość w polu
    -ErrorSomeErrorWereFoundRollbackIsDone=Znaleziono błedy. Cofam zmiany
    -ErrorConfigParameterNotDefined=<b>Parametr %s</b> nie jest zdefiniowany wewnątrz pliku konfiguracyjnego <b>conf.php.</b> Dollibara
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Nie można znaleźć <b>użytkownika %s</b> Dolibarra w bazie danych.
     ErrorNoVATRateDefinedForSellerCountry=Błąd, nie określono stawki VAT dla kraju " %s".
     ErrorNoSocialContributionForSellerCountry=Błąd, brak określonej stopy podatkowej dla kraju '%s'.
     ErrorFailedToSaveFile=Błąd, nie udało się zapisać pliku.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Maksymalna ilość wpisów na stronę
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Nie masz autoryzacji aby to zrobić
     SetDate=Ustaw datę
     SelectDate=Wybierz datę
    @@ -78,10 +78,10 @@ FileRenamed=Nazwa pliku została pomyślnie zmieniona
     FileGenerated=Plik został wygenerowany pomyślnie
     FileSaved=Plik został zapisany pomyślnie
     FileUploaded=Plik został pomyślnie przesłany
    -FileTransferComplete=Plik(i) załadowane pomyślnie
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=Plik(i) usunięte pomyślnie
     FileWasNotUploaded=Wybrano pliku do zamontowaia, ale jeszcze nie wysłano. W tym celu wybierz opcję "dołącz plik".
    -NbOfEntries=Liczba wejść
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Przeczytaj pomoc online (wymaga połączenia z internetem)
     GoToHelpPage=Przeczytaj pomoc
     RecordSaved=Rekord zapisany
    @@ -92,9 +92,9 @@ DolibarrInHttpAuthenticationSoPasswordUseless=Tryb uwierzytelniania Dolibarr jes
     Administrator=Administrator
     Undefined=Niezdefiniowano
     PasswordForgotten=Zapomniałeś hasła?
    -NoAccount=No account?
    +NoAccount=Brak konta?
     SeeAbove=Patrz wyżej
    -HomeArea=Strona Startowa
    +HomeArea=STRONA GŁÓWNA
     LastConnexion=Ostatnie logowanie
     PreviousConnexion=Poprzednie połączenia
     PreviousValue=Poprzednia wartość
    @@ -142,6 +142,7 @@ Closed=Zamknięte
     Closed2=Zamknięte
     NotClosed=Nie zamknięte
     Enabled=Dostępne
    +Enable=Włączone
     Deprecated=Nieaktualne
     Disable=Niedostępne
     Disabled=Niedostępne/Wyłączone
    @@ -153,7 +154,7 @@ Update=Uaktualnić
     Close=Zamknij
     CloseBox=Usuń widget ze swojej tablicy
     Confirm=Potwierdź
    -ConfirmSendCardByMail=Czy na pewno chcesz wysłać treść tej karty pocztą do <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Skasować
     Remove=Usunąć
     Resiliate=Zakończ
    @@ -327,12 +328,12 @@ Copy=Kopiowanie
     Paste=Wklej
     Default=Domyślny
     DefaultValue=Wartość domyślna
    -DefaultValues=Domyślne wartości
    +DefaultValues=Default values/filters/sorting
     Price=Cena
     PriceCurrency=Cena (waluta)
     UnitPrice=Cena jednostkowa
     UnitPriceHT=Cena jednostkowa (netto)
    -UnitPriceHTCurrency=Unit price (net) (currency)
    +UnitPriceHTCurrency=Cena jednostkowa (netto) (waluta)
     UnitPriceTTC=Cena jednostkowa
     PriceU=cen/szt.
     PriceUHT=cen/szt (netto)
    @@ -340,14 +341,14 @@ PriceUHTCurrency=cen/szt (w walucie)
     PriceUTTC=Podatek należny/naliczony
     Amount=Ilość
     AmountInvoice=Kwota faktury
    -AmountInvoiced=Amount invoiced
    +AmountInvoiced=Kwota zafakturowana
     AmountPayment=Kwota płatności
     AmountHTShort=Kwota (netto)
     AmountTTCShort=Kwota (zawierająca VAT)
     AmountHT=Kwota (netto bez podatku)
     AmountTTC=Kwota (zawierająca VAT)
     AmountVAT=Kwota podatku VAT
    -MulticurrencyAlreadyPaid=Zapłacono, oryginalna waluta
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Pozostało do zapłaty, oryginalna waluta
     MulticurrencyPaymentAmount=Kwota płatności, oryginalna waluta
     MulticurrencyAmountHT=Kwota (bez VAT), oryginalna waluta
    @@ -416,7 +417,7 @@ Favorite=Ulubiony
     ShortInfo=Info.
     Ref=Nr ref.
     ExternalRef=Ref. zewnętrzny
    -RefSupplier=Ref. vendor
    +RefSupplier=Symbol dostawcy
     RefPayment=Nr ref. płatności
     CommercialProposalsShort=Oferty komercyjne
     Comment=Komentarz
    @@ -428,7 +429,7 @@ ActionNotApplicable=Nie dotyczy
     ActionRunningNotStarted=By rozpocząć
     ActionRunningShort=W trakcie
     ActionDoneShort=Zakończone
    -ActionUncomplete=Niekompletne
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Firma/Organizacja
     Accountant=Księgowa
    @@ -453,8 +454,8 @@ Generate=Wygeneruj
     Duration=Czas trwania
     TotalDuration=Łączny czas trwania
     Summary=Podsumowanie
    -DolibarrStateBoard=Statystyki bazy danych
    -DolibarrWorkBoard=Otwórz listę elementów
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=Brak otwartego elementu do przetwarzania
     Available=Dostępny
     NotYetAvailable=Nie są jeszcze dostępne
    @@ -506,7 +507,7 @@ None=Żaden
     NoneF=Żaden
     NoneOrSeveral=Brak lub kilka
     Late=Późno
    -LateDesc=Opóźnienie w celu określenia, czy rekord jest opóźniony, czy nie zależy od konfiguracji. Poproś swojego administratora o zmianę opóźnienia z menu Strona główna - Konfiguracja - Alerty.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Obraz
     Photos=Obrazy
    @@ -530,18 +531,6 @@ September=Wrzesień
     October=Październik
     November=Listopad
     December=Grudzień
    -JanuaryMin=Sty
    -FebruaryMin=Lut
    -MarchMin=Mar
    -AprilMin=Kwi
    -MayMin=Maj
    -JuneMin=Cze
    -JulyMin=Lip
    -AugustMin=Sier
    -SeptemberMin=Wrz
    -OctoberMin=Paź
    -NovemberMin=Lis
    -DecemberMin=Gru
     Month01=styczeń
     Month02=luty
     Month03=marzec
    @@ -646,6 +635,8 @@ SendMail=Wyślij wiadomość email
     EMail=E-mail
     NoEMail=Brak e-mail
     Email=Adres e-mail
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Brak telefonu komórkowego
     Owner=Właściciel
     FollowingConstantsWillBeSubstituted=Kolejna zawartość będzie zastąpiona wartością z korespondencji.
    @@ -677,7 +668,7 @@ NeverReceived=Nigdy nie otrzymała
     Canceled=Anulowany
     YouCanChangeValuesForThisListFromDictionarySetup=Wartości dla tej listy można zmieniać w menu Konfiguracja - Słowniki
     YouCanChangeValuesForThisListFrom=Możesz zmienić wartości dla tej listy z menu %s
    -YouCanSetDefaultValueInModuleSetup=Możesz ustawić domyślną wartość używaną podczas tworzenia nowego rekordu w konfiguracji modułu
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Kolor
     Documents=Związanych plików
     Documents2=Dokumenty
    @@ -703,7 +694,7 @@ DateOfSignature=Data podpisu
     HidePassword=Pokaż polecenie z ukrytym hasłem
     UnHidePassword=Pokaż prawdziwe polecenie z otwartym hasłem
     Root=Root
    -Informations=Informacje
    +Informations=Informacja
     Page=Strona
     Notes=Uwagi
     AddNewLine=Dodaj nowy wiersz
    @@ -716,15 +707,15 @@ Merge=Scalanie/ dzielenie
     DocumentModelStandardPDF=Standardowy szablon PDF
     PrintContentArea=Pokaż stronę do wydruku głównej treści
     MenuManager=Menu menager
    -WarningYouAreInMaintenanceMode=Uwaga, jesteś w trybie konserwacji, więc tylko zalogowani <b>%s</b> mogą używać aplikacji w danym momencie.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Błąd systemu
     CoreErrorMessage=Przepraszamy, napotkano błąd. Skontaktuj się z administratorem w celu sprawdzenia logów lub wyłącz $dolibarr_main_prod=1 aby uzyskać więcej informacji.
     CreditCard=Karta kredytowa
     ValidatePayment=Weryfikacja płatności
     CreditOrDebitCard=Karta debetowa lub kredytowa
     FieldsWithAreMandatory=Pola <b>%s</b>  są obowiązkowe
    -FieldsWithIsForPublic=Pola <b>%s</b> są wyświetlane na publiczną listę członków. Jeśli nie chcesz, odznacz opcję "publiczny".
    -AccordingToGeoIPDatabase=(Zgodnie z konwersji GeoIP)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Linia
     NotSupported=Nie są obsługiwane
     RequiredField=Pole wymagane
    @@ -732,6 +723,8 @@ Result=Wynik
     ToTest=Test
     ValidateBefore=Karty muszą być zatwierdzone przed użyciem tej funkcji
     Visibility=Widoczność
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Prywatny
     Hidden=Ukryty
     Resources=Zasoby
    @@ -750,6 +743,7 @@ LinkTo=Link do
     LinkToProposal=Link do oferty
     LinkToOrder=Link do zamówienia
     LinkToInvoice=Link do faktury
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link do zamówienia dostawcy
     LinkToSupplierProposal=Link do oferty dostawcy
     LinkToSupplierInvoice=Link do faktury dostawcy
    @@ -758,6 +752,7 @@ LinkToIntervention=Link do interwencji
     CreateDraft=Utwórz Szic
     SetToDraft=Wróć do szkicu
     ClickToEdit=Kliknij by edytować
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edytuj w edytorze tekstowym
     EditHTMLSource=Edytuj źródło HTML
    @@ -772,7 +767,7 @@ ByDay=Według dnia
     BySalesRepresentative=Według przedstawiciela handlowego
     LinkedToSpecificUsers=Podpięty do kontaktu współużytkownika
     NoResults=Brak wyników
    -AdminTools=Narzędzia administracyjne
    +AdminTools=Admin Tools
     SystemTools=Narzędzia systemowe
     ModulesSystemTools=Narzędzia modułów
     Test=Test
    @@ -802,7 +797,7 @@ PrintFile=Wydrukuj plik %s
     ShowTransaction=Pokaż wpisy na koncie bankowym
     ShowIntervention=Pokaż interwencję
     ShowContract=Pokaż umowę
    -GoIntoSetupToChangeLogo=Wejdź w Strona główna - Ustawienia- Firma by zmienić logo lub przejdź do Strona główna- Ustawienia - Wyświetl do ukrycia.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Zabraniać
     Denied=Zabroniony
     ListOf=Lista %s
    @@ -818,12 +813,12 @@ Sincerely=Z poważaniem
     DeleteLine=Usuń linię
     ConfirmDeleteLine=Czy jesteś pewien, że chcesz usunąć tą linię?
     NoPDFAvailableForDocGenAmongChecked=Na potrzeby generowania dokumentów nie było dostępnych plików PDF
    -TooManyRecordForMassAction=Zbyt wiele rekordów wybranych do masowej akcji. Czynność jest ograniczona do listy %s rekordów
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=Nie wybrano wpisu
     MassFilesArea=Obszar plików zbudowanych masowo
     ShowTempMassFilesArea=Wyświetl obszar plików zbudowanych masowo
    -ConfirmMassDeletion=Zbiorcze potwierdzenie usunięcia
    -ConfirmMassDeletionQuestion=Jesteś pewnien, że chcesz usunąć %s zaznaczonych rekodów?
    +ConfirmMassDeletion=Masowe usuwanie konformacji
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Powiązane obiekty
     ClassifyBilled=Oznacz jako zafakturowana
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Kalendarz
     GroupBy=Grupuj według
     ViewFlatList=Zobacz płaską listę
     RemoveString=Usuń ciąg '%s'
    -SomeTranslationAreUncomplete=Co poniektóre języki mogą być częściowo przetłumaczone bądź mogą zawierać błędy. Jeśli zauważysz błędy w tłumaczeniu, możesz je naprawić rejestrując się na <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Bezpośredni link do pobierania (publiczny / zewnętrzny)
     DirectDownloadInternalLink=Bezpośredni link do pobrania (musisz się zalogować i potrzebujesz uprawnień)
     Download=Pobierz
    @@ -861,16 +856,25 @@ HR=Dział personalny
     HRAndBank=HR i Bank
     AutomaticallyCalculated=Automatycznie przeliczone
     TitleSetToDraft=Powróć do wersji roboczej
    -ConfirmSetToDraft=Jesteś pewien, że chcesz powrócić do wersji roboczej?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=ID importu
     Events=Wydarzenia
    -EMailTemplates=Szablony wiadomości e-mail
    -FileNotShared=Plik nie jest udostępniany na zewnątrz
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projekt
     Projects=Projekty
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Uprawnienia
     LineNb=Linia nr
     IncotermLabel=Formuły handlowe
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Poniedziałek
     Tuesday=Wtorek
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interwencje
     SearchIntoContracts=Kontrakty
     SearchIntoCustomerShipments=Wysyłki klienta
     SearchIntoExpenseReports=Zestawienia wydatków
    -SearchIntoLeaves=Urlopy
    +SearchIntoLeaves=Leave
     CommentLink=Komentarze
     NbComments=Ilość komentarzy
     CommentPage=Miejsce na komentarze
     CommentAdded=Komentarz dodany
     CommentDeleted=Komentarz usunięty
     Everybody=Wszyscy
    -PayedBy=Opłacone przez
    -PayedTo=Opłacone do
    +PayedBy=Płacone przez
    +PayedTo=Paid to
     Monthly=Miesięcznie
     Quarterly=Kwartalnie
     Annual=Rocznie
    @@ -945,6 +949,7 @@ LocalAndRemote=Lokalnie i zdalnie
     KeyboardShortcut=Skróty klawiaturowe
     AssignedTo=Przypisany do
     Deletedraft=Usuń szkic
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=Aktualnie korzystasz z trybu "sandbox" %s
    diff --git a/htdocs/langs/pl_PL/other.lang b/htdocs/langs/pl_PL/other.lang
    index 0865c2532da..fcaa9192429 100644
    --- a/htdocs/langs/pl_PL/other.lang
    +++ b/htdocs/langs/pl_PL/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Kod zabezpieczający
     NumberingShort=N°
     Tools=Narzędzia
     TMenuTools=Narzędzia
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Urodziny
     BirthdayDate=Data urodzin
     DateToBirth=Data urodzenia
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Wiadomość dla zatwierdzonych stron. Powrót do płatności
     MessageKO=Wiadomość dla odwołanych stron. Powrót do płatności
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Data kolejnej faktury (przed wygenerowaniem)
     DateNextInvoiceAfterGen=Data następnej faktury (po wygenerowaniu)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Interwencja zatwierdzona
    -Notify_FICHINTER_SENTBYMAIL=Interwencja wysłana za pośrednictwem wiadomości email
     Notify_ORDER_VALIDATE=Zamówienie klienta potwierdzone
     Notify_ORDER_SENTBYMAIL=Zamówienie klienta wysyłane za pośrednictwem wiadomości email
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Zamówienie dostawcy wysłane za pośrednictwem wiadomości email
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Zamówienie dostawcy zarejestrowane
     Notify_ORDER_SUPPLIER_APPROVE=Zamówienie dostawcy zaakceptowane
     Notify_ORDER_SUPPLIER_REFUSE=Zamówienie dostawcy odrzucone
     Notify_PROPAL_VALIDATE=Oferta klienta potwierdzona
    -Notify_PROPAL_CLOSE_SIGNED=Zamknięte podpisane PROPAL klienta
    -Notify_PROPAL_CLOSE_REFUSED=PROPAL klienta zamknięte odmówił
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Propozycja handlowa wysłana za pośrednictwem wiadomości email
     Notify_WITHDRAW_TRANSMIT=Wycofanie transmisji
     Notify_WITHDRAW_CREDIT=Wycofanie kredyt
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Kontrahent utworzony
     Notify_COMPANY_SENTBYMAIL=Maile wysyłane z karty przez osoby trzecie
     Notify_BILL_VALIDATE=Faktura klienta zatwierdzona
     Notify_BILL_UNVALIDATE=Faktura klienta nie- zwalidowane
    -Notify_BILL_PAYED=Faktura klienta zapłacona
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Faktura klienta anulowana
     Notify_BILL_SENTBYMAIL=Faktura klienta wysyłana za pośrednictwem wiadomości email
     Notify_BILL_SUPPLIER_VALIDATE=Faktura dostawcy zatwierdzona
    -Notify_BILL_SUPPLIER_PAYED=Faktura dostawcy zapłacona
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Faktura dostawcy wysłana za pośrednictwem wiadomości email
     Notify_BILL_SUPPLIER_CANCELED=Dostawca anulowania faktury
     Notify_CONTRACT_VALIDATE=Umowa zatwierdzona
     Notify_FICHEINTER_VALIDATE=Interwencja zatwierdzona
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Interwencja wysłana za pośrednictwem wiadomości email
     Notify_SHIPPING_VALIDATE=Wysyłka zatwierdzona
     Notify_SHIPPING_SENTBYMAIL=Wysyłka wysłane pocztą
     Notify_MEMBER_VALIDATE=Członek zatwierdzony
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Stworzenie projektu
     Notify_TASK_CREATE=Zadanie utworzone
     Notify_TASK_MODIFY=Zadanie zmodyfikowane
     Notify_TASK_DELETE=Zadanie usunięte
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Zobacz konfigurację modułu% s
     NbOfAttachedFiles=Liczba załączonych plików / dokumentów
     TotalSizeOfAttachedFiles=Całkowita wielkość załączonych plików / dokumentów
     MaxSize=Maksymalny rozmiar
     AttachANewFile=Załącz nowy plik / dokument
     LinkedObject=Związany obiektu
    -NbOfActiveNotifications=Liczba zgłoszeń (nb e-maili odbiorców)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof ID %s</b> jest informacji w zależności od trzeciej kraju. <br> Na przykład, dla <b>kraju, %s,</b> jest to <b>kod %s.</b>
     DolibarrDemo=Demo Dolibarr ERP/CRM
     StatsByNumberOfUnits=Statystyki dla sum ilości produktów / usług
    -StatsByNumberOfEntities=Statystyki w ilość powiązanych wpisów (ilość faktur, zamówień...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Ilość zamówień klientów
     NumberOfCustomerInvoices=Ilość faktur klientów
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=Nowa interwencja %s została przypisana do ciebie.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Interwencja %s zatwierdzona
     EMailTextInvoiceValidated=Faktura %s została zatwierdzona
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Forslaget %s har blitt validert.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Zamówienie %s zostało zatwierdzone
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Zamówienie %s zostało zaakceptowane przez %s.
     EMailTextOrderRefused=Zamówienie %s zostało odrzucone.
     EMailTextOrderRefusedBy=Zamówienie %s zostało odrzucone przez %s.
     EMailTextExpeditionValidated=Wysyłka %s została zatwierdzone.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Przywóz zestaw danych
     DolibarrNotification=Automatyczne powiadomienie
     ResizeDesc=Skriv inn ny <b>bredde</b> eller ny høyde. Forhold vil bli holdt under resizing ...
    @@ -204,7 +212,7 @@ NewLength=Nowa szerokość
     NewHeight=Nowa waga
     NewSizeAfterCropping=Nowy rozmiar po przycięciu
     DefineNewAreaToPick=Definer nytt område på bildet for å plukke (venstre klikk på bildet og dra til du kommer til motsatt hjørne)
    -CurrentInformationOnImage=To narzędzie zostało zaprojektowane aby pomóc ci w zmianie wielkości lub przycięciu obrazu.
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Edytor obrazów
     YouReceiveMailBecauseOfNotification=Du mottar denne meldingen fordi din e-post har blitt lagt til listen over mål for å bli informert om spesielle hendelser i %s programvare av %s.
     YouReceiveMailBecauseOfNotification2=Denne hendelsen er følgende:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Twoje hasło musi składać się z <strong>%s<
     YourPasswordHasBeenReset=Twoje hasło zostało zresetowane pomyślnie
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Wywóz obszarze
    diff --git a/htdocs/langs/pl_PL/projects.lang b/htdocs/langs/pl_PL/projects.lang
    index 2d656d757e8..1c85219e122 100644
    --- a/htdocs/langs/pl_PL/projects.lang
    +++ b/htdocs/langs/pl_PL/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Czy usunąć ten projekt?
     ConfirmDeleteATask=Czy usunąć to zadanie?
     OpenedProjects=Otwarte projekty
     OpenedTasks=Otwarte zadania
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Pokaż projekt
     ShowTask=Pokaż zadanie
     SetProject=Ustaw projekt
     NoProject=Żadny projekt niezdefiniowany lub nie jest twoją własnością
    -NbOfProjects=Liczba projektów
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Czas spędzony
     TimeSpentByYou=Czas spędzony przez Ciebie
     TimeSpentByUser=Czas spędzony przez użytkownika
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Idź do listy zadań
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Lista ofert handlowcych związanych z projektem
    -ListOrdersAssociatedProject=Lista zamówień klientów powiązanych z projektem
    -ListInvoicesAssociatedProject=Lista faktur klientów powiązanych z projektem
    -ListPredefinedInvoicesAssociatedProject=Lista szablonów faktur klientów powiązanych z projektem
    -ListSupplierOrdersAssociatedProject=Lista zamówień dostawców powiązanych z projektem
    -ListSupplierInvoicesAssociatedProject=Lista faktur dostawców powiązanych z projektem
    -ListContractAssociatedProject=Wykaz umów związanych z projektem
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Wykaz interwencji związanych z projektem
    -ListExpenseReportsAssociatedProject=Lista raportów o wydatkach związanych z projektem
    -ListDonationsAssociatedProject=Lista dotacji związanych z projektem
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Wykaz działań związanych z projektem
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Lista czasu poświęconego na zadania w projekcie
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Dzisiejsza aktywnośc w projekcie
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Projekt %s zmodyfikowany
     TaskCreatedInDolibarr=Zadanie %s utworzono
     TaskModifiedInDolibarr=Zadań %s zmodyfikowano
     TaskDeletedInDolibarr=Zadań %s usunięto
    -OpportunityStatus=Stan okazja
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Kwota okazja
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. ilość
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Współpracownik
     SelectElement=Wybierz element
     AddElement=Link do elementu
     # Documents models
    -DocumentModelBeluga=Szablon projektu na przegląd połączonych obiektów
    -DocumentModelBaleine=Szablon projektu raportu dla zadań
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planowany nakład pracy
     PlannedWorkloadShort=Nakład pracy
     ProjectReferers=Powiązane elementy
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projekty z tym użytkownika jako kontakt
     TasksWithThisUserAsContact=Zadania dopisane do tego użytkownika
     ResourceNotAssignedToProject=Nie przypisane do projektu
     ResourceNotAssignedToTheTask=Nie dopisane do zadania
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Przypisz zadanie do mnie
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Przydzielać
     ProjectOverview=Przegląd
    -ManageTasks=Użyj projektów do śledzenia zadań i czasu
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Użyj projekty śledzić pozostawienie danych kontaktowych / opportinuties
    -ProjectNbProjectByMonth=Liczba stworzynych projektów w miesiącu
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Ilość możliwości w danym miesiącu
    -ProjectWeightedOppAmountOfProjectsByMonth=Ważona ilość szans na miesiąc
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statystyki dotyczące projektów / przewodów
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Zadanie przypisanie. Wprowadzenie czasu na zadanie powinno być możliwe.
     IdTaskTime=Id razem zadaniem
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Szanse Całkowita ilość
    -OpportunityPonderatedAmount=Ilość możliwości ważone
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Poszukiwania
     OppStatusQUAL=Kwalifikacja
     OppStatusPROPO=Wniosek
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/pt_BR/admin.lang b/htdocs/langs/pt_BR/admin.lang
    index 393dc1328a1..5dc6f379ef4 100644
    --- a/htdocs/langs/pt_BR/admin.lang
    +++ b/htdocs/langs/pt_BR/admin.lang
    @@ -7,9 +7,7 @@ VersionDevelopment=Versão de Desenvolvimento
     VersionUnknown=Versão Desconhecida
     VersionRecommanded=Versão Recomendada
     FileCheck=Verificador da integridade dos arquivos
    -FileCheckDesc=Esta ferramenta lhe permite verificar a integridade dos arquivos e da configuração do seu aplicativo, comparando cada arquivo com os oficiais. Os valores de algumas constantes da configuração também podem ser verificados. Você pode usar esta ferramenta para detetar se alguns arquivos foram modificados por um 'hacker', por exemplo.
     FileIntegrityIsStrictlyConformedWithReference=A integridade dos arquivos está estritamente de acordo com a referência.
    -FileIntegrityIsOkButFilesWereAdded=A verificação da integridade dos arquivos passou, entretanto alguns novos arquivos foram adicionados.
     FileIntegritySomeFilesWereRemovedOrModified=A verificação da integridade dos arquivos falhou. Alguns arquivos foram modificados, removidos ou adicionados.
     GlobalChecksum=Verificação global
     MakeIntegrityAnalysisFrom=Realizar a análise da integridade dos arquivos do aplicativo em
    @@ -27,14 +25,10 @@ SessionSaveHandler=Manipulador para salvar sessão
     SessionSavePath=Caminho para salvar sessão
     PurgeSessions=Purgar Sessão
     ConfirmPurgeSessions=Você tem certeza que quer remover toas as sessões? Isto ira desconectar todos os usuários (exceto você)
    -NoSessionListWithThisHandler=Salvar manipulador de sessão configurado no PHP não permite listar todas as sessões em execução.
     LockNewSessions=Bloquear Novas Sessões
    -ConfirmLockNewSessions=Restringir qualquer nova conexão Dolibarr para si mesmo. (Apenas usuário <b>%s</b> será capaz de se conectar depois)
     UnlockNewSessions=Remover Bloqueio de Conexão
     YourSession=Sua Sessão
    -Sessions=Sessões de Usuários
     WebUserGroup=Servidor Web para usuário/grupo
    -NoSessionFound=Seu PHP parece não permitir listar as sessões ativas. Diretório usado para salvar sessões (<b>%s</ b>) pode ser protegido (por exemplo, pelas permissões do sistema operacional ou por diretiva PHP "open_basedir").
     DBStoringCharset=Charset base de dados para armazenamento de dados (Database charset to store data)
     DBSortingCharset=Charset base de dados para classificar os dados (Database charset to sort data)
     ClientCharset=Conjunto de clientes
    @@ -46,7 +40,6 @@ InternalUser=Usuário Interno
     ExternalUser=Usuário Externo
     InternalUsers=Usuários Internos
     ExternalUsers=Usuários Externos
    -SetupArea=Configurações da Área
     UploadNewTemplate=Carregar novo(s) tema(s)
     FormToTestFileUploadForm=Formulário para teste de upload de arquivo
     IfModuleEnabled=OBS: Sim só é eficaz se o módulo <b>%s</b> estiver ativado
    @@ -63,8 +56,6 @@ ErrorCodeCantContainZero=A variável não pode conter valor "0" (zero)
     DisableJavascript=Desativar as funções Javascript e Ajax
     UseSearchToSelectCompanyTooltip=Além disso, se você tem um grande número de terceiros (> 100 000), você pode aumentar a velocidade, definindo COMPANY_DONOTSEARCH_ANYWHERE constante a 1 em Setup-> Outro. Busca, então, ser limitada até o início da string.
     UseSearchToSelectContactTooltip=Além disso, se você tem um grande número de terceiros (> 100 000), você pode aumentar a velocidade, definindo CONTACT_DONOTSEARCH_ANYWHERE constante a 1 em Setup-> Outro. Busca, então, ser limitada até o início da string.
    -DelaiedFullListToSelectCompany=Aguarda você pressionar uma tecla antes de carregar o conteúdo de uma lista de combos de terceiros (isto pode melhorar o desempenho se você tiver um grande número de terceiros, mas é menos conveniente)
    -DelaiedFullListToSelectContact=Aguarda você pressionar uma tecla antes de carregar o conteúdo de uma lista de combos de contatos (isto pode melhorar o desempenho se você tiver um grande número de contatos, mas é menos conveniente)
     NumberOfKeyToSearch='Nbr' dos caracteres para 'trigger search': %s
     NotAvailableWhenAjaxDisabled=Indisponível quando o Ajax esta desativado
     AllowToSelectProjectFromOtherCompany=No documento de um terceiro, pode-se escolher um projeto conectado a outro terceiro
    @@ -74,7 +65,6 @@ PreviewNotAvailable=Previsão Indisponível
     ThemeCurrentlyActive=Tema Ativo
     CurrentTimeZone=Timezone PHP (do servidor apache)
     MySQLTimeZone=Timezone Mysql (do servidor sql)
    -TZHasNoEffect=A data é armazenada e retornada pelo servidor sql se eles manterem a string apresentada. A timezone é resultado somente se for usado a função UNIX_TIMESTAMP (Não deve ser usada pelo Dolibarr, se não a database TZ não terá efeito, mesmo se tivesse trocada depois da data ter entrado).
     NextValue=Próximo Valor
     NextValueForInvoices=Próximo Valor (Faturas)
     NextValueForCreditNotes=Próximo Valor (Notas de Crédito)
    @@ -98,20 +88,16 @@ DetailPosition=Define as posições do menu em ordem numérica
     NotConfigured=Módulo/Aplicativo não configurado
     SetupShort=Conf.
     OtherOptions=Outras Opções
    -OtherSetup=Outras Configurações
     CurrentValueSeparatorThousand=Separador de milhar
     IdModule=Módulo ID
     IdPermissions=Permissão ID
     LanguageBrowserParameter=Parâmetro de Linguagem %s
    -LocalisationDolibarrParameters=Parâmetros de Localização
     ClientTZ=Fuso Horário do cliente (usuário)
     ClientHour=Horário do Cliente (usuário)
     OSTZ=Fuso Horário do OS do Servidor
     PHPTZ=Fuso Horário do servidor PHP
     CurrentHour=Horário PHP (servidor)
     CurrentSessionTimeOut=A sessão expirou
    -YouCanEditPHPTZ=Para definir um fuso horário diferente no PHP (não exigido), você pode tentar adicionar um arquivo .htaccess com uma linha como esta : "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Atenção, ao contrário de outras telas, o horário nesta página não está no seu fuso horário local, mas no fuso horário do servidor.
     MaxNbOfLinesForBoxes=Número máximo de linahs para os widgets
     AllWidgetsWereEnabled=Todos as ferramentas disponíveis estão habilitadas
     PositionByDefault=Posição Padrão(default)
    @@ -165,23 +151,16 @@ IgnoreDuplicateRecords=Ignorar erros de registro duplicado (INSERT IGNORE)
     AutoDetectLang=Autodetecção de idioma pelo navegador
     FeatureDisabledInDemo=Algumas funções desabilitada no Demo
     FeatureAvailableOnlyOnStable=Funcionalidade somente disponível em versões estáveis oficiais
    -BoxesDesc=Os widgets são componentes que exibem alguma informação que você pode adicionar para personalizar algumas páginas. Você pode escolher entre a exibição ou não do widget pela seleção da página de destino e clicando em "Ativar", ou clicando na lixeira para desabilitá-lo.
     OnlyActiveElementsAreShown=Somente elementos de <a href="%s">módulos ativos</a> são mostrado.
    -ModulesDesc=Os módulos do Dolibarr definem qual aplicativo/função está habilitado no programa. Alguns aplicativos/módulos requerem permissões que você deve garantir aos usuários, após ativá-los. Clique no botão on/off para habilitar um módulo/aplicativo.
     ModulesMarketPlaceDesc=Você pode encontrar mais módulos para download em sites externos na Internet ...
    -ModulesDeployDesc=Se as permissões no seu sistema de arquivos permitirem isso, você pode usar esta ferramenta para lançar um módulo externo. O módulo será então visível na aba <strong>%s</strong>.
     ModulesMarketPlaces=Encontrar app/módulos externos
     ModulesDevelopYourModule=Desenvolver seus próprios app/módulos
    -ModulesDevelopDesc=Você pode desenvolver ou encontrar um parceiro que faça isso, o seu módulo personalizado
    -DOLISTOREdescriptionLong=Ao invés de trocar para o website em <a href="https://www.dolistore.com">www.dolistore.com</a> para encontrar um módulo externo, você pode usar esta ferramenta integrada que realizará a busca na loja virtual externa pra você (pode ser lento, precisa de um acesso à Internet)...
     FreeModule=Grátis
     NotCompatible=Este módulo não parece ser compatível com o seu Dolibarr %s (Mín %s - Máx %s).
     CompatibleAfterUpdate=Este módulo exige uma atualização do seu Dolibarr %s (Mín %s - Máx %s).
     SeeInMarkerPlace=Ver na Loja Virtual
     GoModuleSetupArea=Para lançar/instalar um novo módulo, vá para a área de configuração do Módulo em <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, o site oficial para baixar módulos externos.
    -DoliPartnersDesc=Lista das empresas que realizam o serviço de desenvolvimento de módulos ou funcionalidades personalizadas (Nota: qualquer pessoa com experiência na programação em PHP pode realizar o desenvolvimento personalizado para um projeto com código fonte aberto)
    -WebSiteDesc=Sites de referência para encontrar mais módulos ...
     DevelopYourModuleDesc=Algumas soluções para o desenvolvimento do seu próprio módulo...
     URL=Site
     BoxesAvailable=Widgets disponíveis
    @@ -196,7 +175,6 @@ DoNotStoreClearPassword=Não armazenar senhas em branco no banco de dados, somen
     MainDbPasswordFileConfEncrypted=Criptografar senha do banco de dados no arquivo conf.php
     InstrucToEncodePass=Para ter a senha codificada no arquivo <b>conf.php</b>, substitua a linha <br><b>$dolibarr_main_db_pass="..."</b><br>por<br><b>$dolibarr_main_db_pass="crypted:%s"</b>
     InstrucToClearPass=Para ter a senha não codificada(limpa) no arquivo <b>conf.php</b>, substitua a linha <br><b>$dolibarr_main_db_pass="crypted:..."</b><br>por<br><b>$dolibarr_main_db_pass="%s"</b>
    -ProtectAndEncryptPdfFiles=Criptografar a geração de arquivos em PDF (NÃO RECOMENDADO, póis pode deixar instável a geração de PDFs massivos)
     ProtectAndEncryptPdfFilesDesc=Proteção de um documento PDF mantém ele disponível para ler e imprimir com qualquer navegador PDF. No entanto, edição e cópia não é possível. Observe que a utilização deste recurso faz com que a construção de um PDF global mesclado não funcione.
     Feature=Destaque
     Developpers=Desenvolvedores/Contribuidores
    @@ -210,35 +188,16 @@ ReferencedPreferredPartners=Parceiro preferido
     SocialNetworks=Redes Sociais
     ForDocumentationSeeWiki=Documentos para usuários e desenvolvedores (Doc, FAQs...), <br>de uma olhada no Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Para outras questões/ajudas, você pode usar o forum do Dolibar:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Essa área pode ajudar você a conseguir serviço de suporte no Dolibarr.
    -HelpCenterDesc2=Uma parte desse serviço está disponivel em <b>inglês</b>.
     CurrentMenuHandler=Gestor atual de menu
     MeasuringUnit=Unidade de medida
     FontSize=Tamanho da fonte
     Emails=E-mails
     EMailsSetup=Configuração dos e-mails
    -EMailsDesc=Esta página permite que você sobrescreva os seus parâmetros PHP para o envio de e-mails. Na maioria dos casos no SO Unix/Linux, a sua configuração do PHP está correta e estes parâmetros são inúteis.
     EmailSenderProfiles=Perfis dos e-mails de envio
    -MAIN_MAIL_SMTP_PORT=Porta SMTP/SMTPS (Como padrão em php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=Servidor SMTP/SMTPS (Como padrão em php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Porta SMTP/SMTPS (Não definido no PHP nos sistemas tipo Unix)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Servidor SMTP/SMTPS (Não definido no PHP nos sistemas tipo Unix)
    -MAIN_MAIL_EMAIL_FROM=E-mail de envio para os e-mails automáticos (Como padrão no php.ini: <b>%s</b>)
    -MAIN_MAIL_AUTOCOPY_TO=Enviar sistematicamente uma cópia carbono oculta de todos os e-mails enviados para
    -MAIN_DISABLE_ALL_MAILS=Desabilitar todos os envios de e-mail (com o objetivo de teste ou demonstração)
     MAIN_MAIL_FORCE_SENDTO=Envie todos os e-mails para (em vez de destinatários reais, para fins de teste)
    -MAIN_MAIL_SENDMODE=Método usado para o envio de E-Mails
    -MAIN_MAIL_SMTPS_ID=ID SMTP se a autentificação é exigida
    -MAIN_MAIL_SMTPS_PW=Senha SMTP se a autenticação é exigida
    -MAIN_MAIL_EMAIL_TLS=Usar criptografia TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS=Use criptografia TLS (STARTTLS)
    -MAIN_DISABLE_ALL_SMS=Desabilitar todos envios de SMS (Para testes ou demo)
     MAIN_SMS_SENDMODE=Método usado para enviar SMS
    -MAIN_MAIL_SMS_FROM=Número de telefone padrão para o envio de SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=E-mail de envio padrão para envios manuais (E-mail do usuário ou e-mail da Companhia)
     UserEmail=E-mail do usuário
     FeatureNotAvailableOnLinux=Função não disponível para sistemas tipo Unix. Teste de envio local.
    -SubmitTranslation=Se a tradução deste idioma não estiver completa ou se encontrar erros, você poderá corrigir editando os arquivos no diretório <b>langs/%s</b> e submeter sua alteração em www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Se a tradução para este idioma não está completa ou você encontrar erros, você pode corrigir pela edição dos arquivos no diretório <b>langs/%s</b> e enviar os arquivos modificados para dolibarr.org/forum ou para os desenvolvedores em github.com/Dolibarr/dolibarr.
     ModuleSetup=Conf. do módulo
     ModulesSetup=Configuração de Módulos/Aplicativos
    @@ -255,15 +214,10 @@ MenuHandlers=Gestor de Menus
     MenuAdmin=Editor menus
     DoNotUseInProduction=Não utilizar em produção
     ThisIsProcessToFollow=Estas são as etapas para o processo:
    -FindPackageFromWebSite=Achar um pacote que possue as funções desejadas (por exemplo no site oficial %s).
     DownloadPackageFromWebSite=Baixar pacote.
    -UnpackPackageInDolibarrRoot=Descompacte os arquivos no diretório do servidor dedicado ao Dolibarr:<b>%s</b>
    -UnpackPackageInModulesRoot=Para lançar/instalar um módulo externo, descomprima os arquivos compactados em um diretório no servidor dedicado aos módulos : <b>%s</b>
    -SetupIsReadyForUse=A implantação do módulo está concluída. No entanto, você deve habilitar e configurar o módulo em sua aplicatição, indo na página para configurar os módulos: <a href="%s">%s</a>.
     NotExistsDirect=O diretório root alternativo não está definido para um diretório existente.<br>
     InfDirAlt=Desde a versão 3, é possível definir um diretório-root alternativo. Isso permite que você armazene, em um diretório dedicado, plug-ins e modelos personalizados. <br> Basta criar um diretório na raiz de Dolibarr (por exemplo:custom).<br>
     InfDirExample=<br>Então declare no arquivo <strong>conf.php</strong><br>$dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br> Se estas linhas estão comentadas com "#", para serem habilitadas, apenas remova o caractere "#".
    -YouCanSubmitFile=Para esta etapa, você pode enviar o arquivo .zip do pacote do módulo para cá :
     CallUpdatePage=Vá para a página que atualiza a estrutura de banco de dados e os dados:% s.
     LastActivationAuthor=Último autor da ativação
     LastActivationIP=Último IP de ativação
    @@ -289,14 +243,10 @@ UMaskExplanation=Esses parâmetros permitem você definir permissões por defaul
     UseACacheDelay=Atraso para exportação de cache em segundos (0 ou vazio para sem cache)
     DisableLinkToHelpCenter=Esconder link "<b>Precisa de ajuda ou suporte</b>" na página de login
     DisableLinkToHelp=Ocultar link para ajuda online "<b>%s</b>"
    -AddCRIfTooLong=Não possui nenhum empacotamento automático, então se a linha sair da página do documento é porque é muito comprida, você precisa adicionar você mesmo um retorno de transporte(carriage) na área de texto.
    -ConfirmPurge=Você tem certeza que deseja executar esta limpeza?<br>Isto excluirá definitivamente todos os arquivos de dados sem qualquer chance de restaurá-los (arquivos ECM, arquivos anexos...).
     LanguageFilesCachedIntoShmopSharedMemory=Os arquivos .lang foram carregados na memória compartilhada
     LanguageFile=Arquivo de idioma
    -ExamplesWithCurrentSetup=Exemplos com atuais configurações que estão rodando
     ListOfDirectories=Lista de diretórios com templates de documentos abertos(.odt)
     ListOfDirectoriesForModelGenODT=A lista de diretórios contém modelos de arquivos no formato OpenDocument.<br><br>Insira aqui o caminho dos diretórios.<br>Adicione uma quebra de linha entre cada diretório.<br>Para adicionar um diretório do módulo GED, adicione aqui <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Os arquivos  nestes diretórios devem terminar com <b>.odt</b> ou <b>.ods</b>.
    -NumberOfModelFilesFound=Número de arquivos de temas ODT/ODS encontrados nestes diretórios
     ExampleOfDirectoriesForModelGen=Exemplo de sintaxe:<br>c:\\meudir<br>/home/meudir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>Para saber como criar seus temas de documento em ODT, antes de armazená-los nesses diretórios, leia a documentação wiki:
     FirstnameNamePosition=Posição do Nome/Sobrenome
    @@ -305,15 +255,13 @@ KeyForWebServicesAccess=Chave para usar o Serviços Web (parâmetro "dolibarrkey
     TestSubmitForm=Teste de entrada de formulário
     ThisForceAlsoTheme=Usando esse gerenciador de menus e também usando seu próprio tema qualquer que seja a sua escolha. Além disso se o gerenciador de menus especializado em smartphone não funcionar em todos os smartphones. Use outro gerenciador de menus se tiver problemas com o seu.
     ThemeDir=Diretório de Layouts
    -ConnectionTimeout=Tempo de conexão esgotado
     ResponseTimeout=Tempo de resposta esgotado
     SmsTestMessage=Mensagem Teste de __PHONEFROM__ para __PHONETO__
     ModuleMustBeEnabledFirst=O módulo <b>%s</b> deve estar primeiramente habilitado se você precisa desta funcionalidade.
     SecurityToken=Chave para proteção das URLs
    -NoSmsEngine=Sem gestor de envido de SMS disponível. Por default o gestor de envio de SMS não vêm instalado (porque depende de um fornecedor externo) mas você pode achar um em %s
    -PDFDesc=Você pode configurar cada opção global relacionada com geração de PDF
     PDFAddressForging=Regras para forjar caixas de endereços
    -HideLocalTaxOnPDF=Ocultar %s taxa na coluna de taxa de venda no PDF
    +HideAnyVATInformationOnPDF=Ocultar informações de ICMS no PDF
    +PDFRulesForSalesTax=Regras para ICMS
     HideDescOnPDF=Esconder todas as descrições de produto na geração de PDF
     HideRefOnPDF=Esconder ref. dos produtos na geração de PDF
     HideDetailsOnPDF=Esconder a linha de detalhes dos produtos na geração de PDF
    @@ -322,7 +270,6 @@ UrlGenerationParameters=Parâmetros para URLs de segurança
     SecurityTokenIsUnique=Usar um único parâmetro na chave de segurança para cada URL
     EnterRefToBuildUrl=Entre com a referência do objeto %s
     GetSecuredUrl=Conseguir URL calculada
    -ButtonHideUnauthorized=Esconder botões não autorizados ao invés de mostra-los cinza e desabilitados
     OldVATRates=Taxa de ICMS antiga
     NewVATRates=Taxa de ICMS nova
     PriceBaseTypeToChange=Modificar os preços com base no valor de referência defino em
    @@ -336,7 +283,6 @@ ExtrafieldMail =E-mail
     ExtrafieldUrl =URL
     ExtrafieldSelect =Selecionar lista
     ExtrafieldPassword=Senha
    -ExtrafieldRadio=Botões de seleção única (apenas na escolha)
     ExtrafieldCheckBox=Caixas de seleção
     ExtrafieldCheckBoxFromList=Caixas de seleção da tabela
     ExtrafieldLink=Link para um objeto
    @@ -358,40 +304,31 @@ DefaultLink=Link padrão
     SetAsDefault=Definir como padrão
     ValueOverwrittenByUserSetup=Aviso, esse valor pode ser substituido pela configuração especifícada pelo usuário (cada usuário pode ter seu propria URL CliqueParaDiscar)
     ExternalModule=Módulo externo - Instalado no diretório
    -BarcodeInitForThirdparties=Inicialização de código de barras em massa para clientes
     BarcodeInitForProductsOrServices=Inicialização de código de barras em massa ou redefinir de produtos ou serviços
     CurrentlyNWithoutBarCode=Atualmente, você tem <strong>%s</strong> registro(s) no <strong>%s</strong> %s sem um código de barras definido.
     InitEmptyBarCode=Valor Init para o próximo registros vazios
     EraseAllCurrentBarCode=Apague todos os valores de código de barras atuais
     ConfirmEraseAllCurrentBarCode=Você tem certeza que deseja apagar todos os valores atuais do código de barras?
     AllBarcodeReset=Todos os valores de código de barras foram removidas
    -NoBarcodeNumberingTemplateDefined=Nenhum modelo de numeração de código de barras habilitado para configuração do módulo de código de barras.
     EnableFileCache=Ativar cache de arquivos
     ShowDetailsInPDFPageFoot=Adicionar mais detalhes no rodapé dos arquivos PDF, tais como o endereço da empresa, ou os nomes dos gerentes (para completar as IDs profissionais, capital da empresa e o número VAT).
     DisplayCompanyInfo=Exibir endereço da empresa
     DisplayCompanyManagers=Exibir nomes dos gerentes
     DisplayCompanyInfoAndManagers=Exibir o endereço da empresa e os nomes dos gerentes
    -EnableAndSetupModuleCron=Se você deseja ter esta fatura recorrente sendo gerada automaticamente, o módulo *%s* deve estar habilitado e corretamente configurado. Do contrário, a geração de faturas deve ser feita manualmente a partir deste tema com o botão "Criar". Note que mesmo se você habilitar a geração automática, poderás ainda realizar a geração manual com segurança. A geração duplicada para um mesmo período não é possível.
     ModuleCompanyCodePanicum=Retornar um código contábil vazio
     ModuleCompanyCodeDigitaria=O código contábil depende de um código de terceiros. O código é composto pelo caractere "C" na primeira posição seguido pelos primeiros 5 caracteres do código de terceiros.
     Use3StepsApproval=Por padrão, os Pedidos de Compra necessitam ser criados e aprovados por 2 usuários diferentes (uma etapa para a criação e a outra etapa para a aprovação. Note que se o usuário possui ambas permissões para criar e aprovar, uma única etapa por usuário será suficiente). Você pode pedir, com esta opção, para introduzir uma terceira etapa para aprovação por outro usuário, se o montante for superior a um determinado valor (assim 3 etapas serão necessárias : 1=validação, 2=primeira aprovação e 3=segunda aprovação se o montante for suficiente). <br>Defina como vazio se uma aprovação (2 etapas) é suficiente, defina com um valor muito baixo (0.1) se uma segunda aprovação (3 etapas) é sempre exigida.
     UseDoubleApproval=Usar uma aprovação de 3 etapas quando o valor (sem taxa) é maior do que ...
     ClickToShowDescription=Clique para exibir a descrição
    -DependsOn=Este módulo precisa de módulo(s)
     RequiredBy=Este módulo é exigido por módulo(s)
    -TheKeyIsTheNameOfHtmlField=Este é o nome do campo HTML. Ele precisa ter conhecimentos técnicos para ler o conteúdo da página HTML para obter o nome da chave de um campo.
    -PageUrlForDefaultValues=Você deve inserir aqui a URL relativa da sua página. Se você incluir parâmetros na URL, os valores padrão serão efetivos se todos os parâmetros são definidos no mesmo valor. Exemplos :
     PageUrlForDefaultValuesCreate=<br>Para o formulário que cria um novo terceiro, isto é <strong>%s</strong>,<br>Se você deseja apenas o valor padrão se a URL tem algum parâmetro, você pode usar <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>Para a página que relaciona os terceiros, isto é <strong>%s</strong>,<br>Se você deseja apenas o valor padrão se a URL tem algum parâmetro, você pode usar <strong>%s</strong>
     EnableDefaultValues=Habilita o uso de valores padrão personalizados
    -EnableOverwriteTranslation=Habilita o uso da tradução substituída
    -GoIntoTranslationMenuToChangeThis=A tradução foi encontrada para a chave com este código, desta forma, para mudar esse valor, você deve editá-la em Início - Configurações - Tradução.
     WarningSettingSortOrder=Atenção, a configuração de um ordenamento padrão par os pedidos pode resultar em um erro técnico quando indo para a página da lista, se o campo é um campo desconhecido. Se você se depara com tal erro, volte para esta página para remover o ordenamento padrão dos pedidos e restaure o comportamento padrão.
     ProductDocumentTemplates=Temas de documentos para a geração do documento do produto
     WatermarkOnDraftExpenseReports=Marca d'água nos relatórios de despesas
     AttachMainDocByDefault=Defina isto como 1 se você deseja anexar o documento principal por e-mail como padrão (se aplicável)
     FilesAttachedToEmail=Anexar arquivo
    -Module0Name=Usuários e grupos
    +Module0Name=Usuários e Grupos
     Module0Desc=Gerenciamento de Usuários / Funcionários e Grupos
     Module1Desc=Gerenciamento de empresas e contatos (clientes, prospecção, etc.)
     Module2Desc=Gestor Comercial
    @@ -412,13 +349,11 @@ Module52Name=Estoques
     Module52Desc=Gestor de Estoques (produtos)
     Module53Desc=Gestor de Serviços
     Module54Name=Contratos/Assinaturas
    -Module54Desc=Gestor de Contratos (serviços e assinaturas recorrentes)
     Module55Name=Códigos de Barra
     Module55Desc=Gestor de Códigos de Barra
     Module56Name=Telefonia
     Module56Desc=Integração Telefônica
     Module57Name=Ordens de pagamento bancárias diretas
    -Module57Desc=Gerenciamento dos pedidos de pagamento com Débito Direto. Isto inclui a geração do arquivo SEPA para os países europeus.
     Module58Name=CliqueParaDiscarl
     Module58Desc=Integração do Sistema CliqueParaDiscar (Asterisk, etc.)
     Module59Desc=Adicione uma função para gerar uma conta Bookmark4u de uma conta Dolibarr
    @@ -427,40 +362,24 @@ Module75Name=Despesas e Notas de Viagem
     Module75Desc=Gestor de Despesas e Notas de Viagem. Administração das notas de despesas e deslocamentos
     Module80Name=Fretes
     Module80Desc=Gestor de Fretes e Carregamentos
    -Module85Name=Bancos e Caixas
     Module85Desc=Gestor de Bancos e Caixas
    -Module100Name=Site Externo
    -Module100Desc=Incluir seu site no menu superior do Dolibarr
     Module105Name=Carteiro e SPIP
     Module105Desc=Carteiro ou Interface SPIP para Módulo MembroMailman or SPIP interface for member module
    -Module200Desc=Diretório de sincronização do LDAP
     Module240Name=Exportações de Dados
    -Module240Desc=Ferramenta para exportar dados do Dolibarr (com assistentes)
     Module250Name=Importação de Dados
    -Module250Desc=Ferramenta para importar dados para o Dolibarr (com assistentes)
     Module310Desc=Gestor de Associação de Membros
     Module320Desc=Adiciona um RSS feed dentro das páginas de tela do Dolibarr
    -Module330Name=Marcadores de Página
    -Module330Desc=Gerenciamento de agendamentos
    -Module400Name=Projetos
    -Module400Desc=Gestão de projetos, oportunidades / espera e / ou tarefas. Você também pode atribuir qualquer elemento (fatura, ordem, proposta, intermediação, ...) a um projeto e obter uma visão panorâmica do projeto.
     Module410Desc=Integração do Webcalendar
     Module510Name=Pagamento dos salários dos funcionários
    -Module510Desc=Registrar e acompanhar o pagamento dos salários do seu empregado
     Module520Desc=Gestão dos empréstimos
     Module600Name=Notificações sobre eventos de negócio
    -Module600Desc=Enviar notificações por EMail (disparadas por alguns eventos de negócio) para usuários (configuração definida em cada usuário), para contatos de terceiros (configuração definida em cada terceiro) ou para emails fixos
    -Module600Long=Note que este módulo é dedicado a enviar e-mails em tempo real quando um evento de negócio dedicado ocorre. Se você está buscando uma função para enviar avisos por e-mail sobre os eventos da sua agenda, vá para a configuração do módulo Agenda.
     Module610Name=Variáveis de produtos
    -Module610Desc=Permite a criação de variável de produtos com base em atributos (cor, tamanho, ...)
     Module700Name=Doações
     Module700Desc=Gestor de Doações
    -Module770Desc=Gestão e reivindicação de relatórios de despesas (transporte, refeição, ...)
     Module1200Desc=Integração Mantis
     Module1520Name=Geração de Documentos
     Module1520Desc=Geração de documentos via e-mail em massa
     Module1780Name=Categorias
    -Module2000Desc=Permitir editar alguma área do texto usando um editor avançado (Baseado no CKEditor)
     Module2200Desc=Habilitar o uso de expressões matemáticas para os preços
     Module2300Desc=Gerenciamento dos trabalhos agendados (alias cron ou tabela chrono)
     Module2400Name=Eventos / Agenda
    @@ -470,11 +389,8 @@ Module2600Name=Serviços API/Web (Servidor SOAP)
     Module2600Desc=Ativa o servidor de serviços web do Dolibarr
     Module2610Desc=Permitir que o servidor prestação de serviços de API REST do Dolibarr
     Module2660Name=Chamar ServiçosWeb (cliente SOAP)
    -Module2660Desc=Habilitar o webservices do Dolibarr (pode ser usado para empurrar de dados / pedidos de servidores externos. Ordens Fornecedor suporte apenas para o momento)
    -Module2700Desc=Usar serviço online do Gravatar (www.gravatar.com) para mostrar foto de usuários/membros (achado pelos emails deles). Precisa de acesso a internet
     Module2900Desc=Capacidade de conversão com o GeoIP Maxmind
     Module3100Desc=Adicionar um botão Skype nos cartões dos usuários / terceiros / contatos membros
    -Module3200Desc=Ative gerador de log de alguns eventos comerciais em um registro inalterável. Os eventos são arquivados em tempo real. O gerador de log é uma tabela de eventos encadeados que podem ser lidos e exportados somente. Este módulo pode ser obrigatório para alguns países.
     Module4000Name=RH
     Module4000Desc=Gerenciamento de recursos humanos (gerenciamento do departamento, contratos dos funcionários e benefícios)
     Module5000Name=Multi-Empresas
    @@ -482,19 +398,14 @@ Module5000Desc=Permite gerenciar várias empresas
     Module6000Name=Fluxo de Trabalho
     Module10000Desc=Crie sites públicos com um editor WYSIWYG. Basta configurar seu servidor web (Apache, Nginx, ...) para apontar para o diretório dedicado ao Dolibarr para tê-lo online na Internet com seu próprio nome de domínio.
     Module20000Name=Gerenciamento de folgas e férias
    -Module20000Desc=Autorizar e acompanhar solicitações de licença de funcionários
     Module39000Desc=Lote ou número de serie, para compra e venda administrado produtos
    -Module50000Desc=Módulo para oferecer uma página de pagamento on-line aceitando pagamentos com cartão de crédito / débito via PayBox. Isso pode ser usado para permitir que seus clientes façam pagamentos gratuitos ou para um pagamento em um determinado objeto Dolibarr (fatura, pedido, ...)
     Module50100Name=Ponto de Vendas
     Module50100Desc=Módulo ponto de vendas (PDV)
    -Module50200Desc=Módulo para oferecer uma página de pagamento on-line aceitando pagamentos usando o PayPal (cartão de crédito ou crédito PayPal). Isso pode ser usado para permitir que seus clientes façam pagamentos gratuitos ou para um pagamento em um determinado objeto Dolibarr (fatura, pedido, ...)
    +Module50150Name=Ponto de Vendas
     Module54000Name=ImprimirIPP
    -Module54000Desc=Imprima via Cups IPP
     Module55000Name=Pesquisa Aberta
    -Module55000Desc=Módulo que integra pesquisa (tipo: Doodle, Studs, Rdvz, ...)
     Module59000Desc=Módulo para gerenciar margens
     Module60000Desc=Módulo para gerenciar comissão
    -Module62000Desc=Adicionar recursos para gerenciar Incoterm
     Module63000Desc=Gerenciar recursos (impressoras, carros, salas, etc.) que você pode compartilhar em eventos.
     Permission11=Ler Faturas de Clientes
     Permission12=Criar/Modificar Faturas de Clientes
    @@ -515,9 +426,6 @@ Permission32=Criar/Modificar Produtos
     Permission34=Deletar Produtos
     Permission36=Ver/Gerenciar Produtos Ocultos
     Permission38=Exportar Produtos
    -Permission41=Leia projetos e tarefas (projeto compartilhado e projetos para os quais eu sou um contato). Também pode inserir o tempo consumido, para mim ou minha hierarquia, nas tarefas atribuídas (Folha de horários)
    -Permission42=Criar / modificar projetos (projeto compartilhado e projetos para os quais eu sou um contato). Também pode criar tarefas e atribuir usuários a projetos e tarefas
    -Permission44=Deletar Projetos (Projetos Compartilhados e Projetos que eu contratei para)
     Permission61=Ler Intervenções
     Permission62=Criar/Modificar Intervenções
     Permission64=Deletar Intervenções
    @@ -548,7 +456,6 @@ Permission109=Deletar Envios
     Permission111=Ler Contas Financeiras
     Permission112=Criar/Modificar/Deletar e Comparar Transações
     Permission113=Configurar Contas Financeiras (criar, gerenciar categorias)
    -Permission114=Consolidar Transações
     Permission115=Exportar Transações e Extratos Bancários
     Permission116=Transferência entre Contas
     Permission117=Gerenciar Envios de Cheques
    @@ -556,15 +463,12 @@ Permission121=Ler Terceiros Vinculado ao Usuário
     Permission122=Criar/Modificar Terceiros
     Permission125=Deletar Terceiros
     Permission126=Exportar Terceiros
    -Permission141=Ler Projetos (Projetos Compartilhados e Projetos que eu contratei para)
    -Permission142=Criar/Modificar Projetos (Projetos Compartilhados e Projetos que eu contratei para)
     Permission144=Deletar Projetos (Projetos Compartilhados e Projetos que eu contratei para)
     Permission146=Ler Provedores
     Permission147=Ler Estatísticas
     Permission151=Ler pedidos com pagamento por débito direto
     Permission152=Criar/Modificar pedidos com pagamento por débito direto
     Permission153=Enviar/Transmitir pedidos com pagamento por débito direto
    -Permission154=Registro de Créditos/Recusas de pedidos com pagamento por débito direto
     Permission161=Ler Contratos
     Permission162=Criar/Modificar Contratos
     Permission163=Ativar Serviço de um Contrato
    @@ -586,7 +490,6 @@ Permission187=Fechar Pedidos para Fornecedores
     Permission188=Cancelar Pedidos para Fornecedores
     Permission192=Criar Linhas
     Permission193=Cancelar Linhas
    -Permission194=Ler as Linhas de Bandwith
     Permission202=Criar Conexões ADSL
     Permission203=Pedir Pedidos de Conexões
     Permission204=Pedir Conexões
    @@ -611,12 +514,10 @@ Permission244=Visualisar o Conteúdo de Categorias Ocultas
     Permission251=Ler Outros Usuários e Grupos
     PermissionAdvanced251=Ler Outros Usuários
     Permission252=Ler Permissões de Outros Usuários
    -Permission253=Criar/Modificar Outros Usuários, Grupos e Permissões
     PermissionAdvanced253=Criar/Modificar Usuários internos/externos e suas Permissões
     Permission254=Criar/Modificar Usuários Externos
     Permission255=Modificar Senha de Outros Usuários
     Permission256=Deletar ou Desativar Outros Usuários
    -Permission262=Estender o acesso a todos os terceiros (não apenas os terceiros para os quais o usuário é um representante de venda).<br> Não é efetivo para usuários externos (sempre limitados a si próprios para propostas, pedidos, faturas, contratos, etc.).<br> Não é efetivo para Projetos (apenas regras sobre permissões do projeto, visibilidade e questões de atribuição).
     Permission271=Ler CA
     Permission272=Ler Faturas
     Permission273=Emitir Fatura
    @@ -626,7 +527,6 @@ Permission283=Deletar Contatos
     Permission286=Exportar Contatos
     Permission291=Ler Tarifas
     Permission292=Definir Permissões das Tarifas
    -Permission293=Modificar Tarifas de Clientes
     Permission300=Ler Código de Barras
     Permission301=Criar/Modificar Códigos de Barras
     Permission302=Deletar Código de Barras
    @@ -648,11 +548,6 @@ Permission401=Ler Descontos
     Permission402=Criar/Modificar Descontos
     Permission403=Validar Descontos
     Permission404=Excluir Descontos
    -Permission501=Ler os contratos/salários dos funcionários
    -Permission502=Criar/Modificar os contratos/salários dos funcionários
    -Permission511=Ler o pagamento dos salários
    -Permission512=Criar/Modificar o pagamento dos salários
    -Permission514=Excluir salários
     Permission517=Salários de exportação
     Permission520=Leia Empréstimos
     Permission522=Criar / modificar empréstimos
    @@ -735,7 +630,6 @@ Permission63001=Ler recursos
     Permission63002=Criar/Modificar recursos
     Permission63003=Excluir recursos
     Permission63004=Conectar os recursos aos eventos da agenda
    -DictionaryCompanyJuridicalType=Formas legais dos terceiros
     DictionaryProspectLevel=Nível potencial Prospect
     DictionaryCanton=Estado/Província
     DictionaryRegion=Regiões
    @@ -743,7 +637,6 @@ DictionaryActions=Tipos de eventos na agenda
     DictionarySocialContributions=Tipos de encargos sociais e fiscais
     DictionaryVAT=Taxas de VAT ou imposto sobre vendas de moeda
     DictionaryPaymentModes=Modos de pagamento
    -DictionaryTypeContact=Tipos Contato / Endereço
     DictionaryEcotaxe=Ecotaxa (REEE)
     DictionaryPaperFormat=Formatos de papel
     DictionaryFormatCards=Formatos dos cartões
    @@ -755,33 +648,19 @@ DictionarySource=Origem das propostas / ordens
     DictionaryAccountancyCategory=Grupos personalizados para relatórios
     DictionaryAccountancysystem=Modelos para o plano de contas
     DictionaryAccountancyJournal=Relatórios da contabilidade
    -DictionaryEMailTemplates=Modelos de E-mails
     DictionaryProspectStatus=Status de Prospecção
    -DictionaryHolidayTypes=Tipos de licenças
    -DictionaryOpportunityStatus=Status oportunidade para projeto / lead
     SetupSaved=Configurações Salvas
     SetupNotSaved=Configuração não salva
    -BackToDictionaryList=Voltar para a lista de dicionários
    -VATManagement=Gestor de ICMS
    -VATIsUsedDesc=Como padrão, quando da criação de orçamentos, faturas, pedidos, etc. a taxa do ICMS acompanha a regra padrão ativa:<br>se o vendedor não estiver sujeito ao ICMS, então o padrão do ICMS é 0. Fim da regra.<br>Se o (país da venda= país da compra), então o ICMS por padrão é igual ao ICMS do produto no país da venda. Fim da regra. <br>Se o vendedor e o comprador estão na Comunidade Europeia e os produtos são meios de transporte (carro, navio, avião), o VAT padrão é 0 (O VAT deverá ser pago pelo comprador à receita federal do seu país e não ao vendedor). Fim da regra.<br>Se o vendedor e o comprador estão na Comunidade Europeia e o comprador não é uma pessoa jurídica, então o VAT por padrão é o VAT do produto vendido. Fim da regra.<br>Se o vendedor e o comprador estão na Comunidade Europeia e o comprador é uma pessoa jurídica, então o VAT é 0 por padrão . Fim da regra.<br>Em qualquer outro caso o padrão proposto é ICMS=0. Fim da regra.
    -VATIsNotUsedDesc=Por padrão o ICMS sugerido é 0, o que pode ser usado em casos tipo associações, pessoas ou pequenas empresas.
     LTRate=Rata
     LocalTax1IsNotUsed=Não utilizar segundo imposto
    -LocalTax1IsUsedDesc=Utilizar um segundo tipo de imposto (outro que não seja ICMS)
    -LocalTax1IsNotUsedDesc=Não utilizar outro tipo de imposto (outro que não seja ICMS)
     LocalTax2IsNotUsed=Não utilizar terceiro imposto
    -LocalTax2IsUsedDesc=Utilizar um terceiro tipo de imposto (outro que não seja ICMS)
    -LocalTax2IsNotUsedDesc=Não utilizar outro tipo de imposto (outro que não seja ICMS)
     LocalTax1ManagementES=Gestor RE
    -LocalTax1IsUsedDescES=A taxa RE padrão, quando criando orçamentos, faturas, pedidos, etc., segue a regra padrão ativa:<br>Se o comprador não estiver sujeito à RE, a RE por padrão=0. Fim da regra.<br>Se o comprador for sujeito à RE, então será aplicada a RE padrão. Fim da regra.<br>
     LocalTax1IsNotUsedDescES=A RE padrão proposta é 0. Fim da regra.
     LocalTax1IsUsedExampleES=Na Espanha eles são profissionais sujeito a alguma seção especifica da IAE espanhola.
     LocalTax1IsNotUsedExampleES=Na Espanha eles são proficionais e sócios e sujeito a uma certa seção da IAE espanhola.
     LocalTax2ManagementES=Gestor IRPF
    -LocalTax2IsUsedDescES=A taxa RE padrão, quando criando orçamentos, faturas, pedidos, etc., acompanha a regra padrão ativa:<br>Se o vendedor não estiver sujeito ao IRPF, então o IRPF por padrão=0. Fim da regra.<br>Se o vendedor estiver sujeito ao IRPF, então aplica-se o IRPF padrão. Fim da regra.<br>
     LocalTax2IsNotUsedDescES=Por padrão, o iRPF sugerido é 0. Fim da regra.
     LocalTax2IsUsedExampleES=Na Espanha, freelancers e profissionais independentes que oferecem serviços e empresas que tenham escolhidos o módulo de sistema de imposto.
    -LocalTax2IsNotUsedExampleES=Na Espanha eles são negócios não sujeito ao módulo de sistema de imposto.
     CalcLocaltax=Relatórios sobre os impostos locais
     CalcLocaltax1Desc=Relatorios de taxas locais são calculados pela differença entre taxas locais de venda e taxas locais de compra
     CalcLocaltax2Desc=Relatorio de taxas locais e o total de taxas locais nas compras
    @@ -789,7 +668,6 @@ CalcLocaltax3=De vendas
     CalcLocaltax3Desc=Relatorio de taxas locais e o total de taxas locais de vendas
     LabelUsedByDefault=Etiqueta usado por default se nenhuma tradução não for encontrado para o código =/
     LabelOnDocuments=Etiqueta nos documentos
    -NbOfDays=Nº de dias
     CurrentNext=Atual/Próxima
     Offset=Compensar
     Upgrade=Atualizar
    @@ -806,7 +684,6 @@ DatabasePort=Porta do Banco de Dados
     DatabaseUser=Usuário do Banco de Dados
     DatabasePassword=Senha do Banco de Dados
     TableName=Nome da Tabela
    -NbOfRecord=Núm de gravações
     DriverType=Tipo de Driver
     SummarySystem=Resumo de informações do sistema
     SummaryConst=Lista de todos os parâmetros de configurações do Dolibarr
    @@ -816,7 +693,6 @@ Skin=Tema Visual
     DefaultSkin=Tema visual default
     MaxSizeList=Comprimento máximo de lista
     DefaultMaxSizeList=Comprimento máximo padrão para listas
    -DefaultMaxSizeShortList=Comprimento máximo padrão para as listas curtas (p. ex. no cartão do cliente)
     MessageOfDay=Mensagem do dia
     MessageLogin=Mensagem da página de login
     LoginPage=Página de login
    @@ -831,24 +707,6 @@ CompanyTown=Município
     NoActiveBankAccountDefined=Nenhuma conta bancária ativa está definida
     BankModuleNotActive=O módulo de contas bancárias não está habilitado
     ShowBugTrackLink=Mostrar link "<strong>%s</strong>"
    -DelaysOfToleranceBeforeWarning=Prazos de tolerância antes do aviso
    -DelaysOfToleranceDesc=Esta janela permite definir os prazos de tolerância antes que o aviso é reportado na tela com o símbolo %s, sobre cada elemento em atraso.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Prazo de tolerância (em dias) antes do alerta sobre eventos planejados (eventos da agenda) ainda não concluídos
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Prazo de tolerância (em dias) antes do alerta sobre projetos não concluídos a tempo
    -Delays_MAIN_DELAY_TASKS_TODO=Prazo de tolerância (em dias) antes do alerta sobre as tarefas planejadas (tarefas de projeto) ainda não concluídas
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Prazo de tolerância (em dias) antes do alerta sobre pedidos ainda não processados
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Prazo de tolerância (em dias) antes do aviso nos orçamentos que não foram fechados
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Prazo de tolerância (em dias) antes do aviso nos orçamentos não faturadas
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Prazo de tolerância (em dias) antes do aviso nos serviços para ativar
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Prazo de tolerância (em dias) antes do aviso nos serviços expirados
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Prazo de tolerância (em dias) antes do aviso para faturas de fornecedores não paga
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Prazo de tolerância (em dias) antes do aviso para faturas de clientes não paga
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Prazo de tolerância (em dias) antes do aviso para reconciliação pendente no banco
    -Delays_MAIN_DELAY_MEMBERS=Prazo de tolerância (em dias) antes do aviso do atraso da taxa de afiliação
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Prazo de tolerância (em dias) antes do aviso de fazer depósitos de cheques
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Prazo de tolerância (em dias) antes do alerta para aprovação do relatório de despesas
    -SetupDescription1=A área de configuração é para a definição dos parâmetros iniciais antes de se usar o Dolibarr.
    -SetupDescription5=Outros menu precisa entrar com parâmetros opcionais do gestor.
     LogEvents=Auditoría de segurança dos eventos
     Audit=Auditoría
     InfoOS=Sobre o SO
    @@ -865,9 +723,7 @@ DisplayDesc=Você pode escolher cada parâmetro relacionado com a aparência do
     AvailableModules=App/Módulos disponíveis
     ToActivateModule=Para ativar os módulos, vá à área de configuração (Home->Configuração->Módulo).
     SessionTimeOut=Expiro tempo de sessão
    -SessionExplanation=Esse número garante que a sessão nunca irá expirar antes desse tempo de atraso, se o <b>session cleaner</b> for feito pelo <b>Internal PHP session cleaner</b> (e nada mais). O <b>Internal PHP session cleaner</b> não garante que irá expirar nesse tempo de atraso. Ele vai expirar, depois desse tempo de atraso, e quando o <b>session cleaner</b> está na RAM, então cada <b>%s/%s</b> acesso, mas somente durante o acesso feito pelos outros usuários.<br> Nota: em alguns servidores com mecanismo de "external session cleaning" (cron no Debian, Ubuntu ...), a sessão pode ser perdida depois desse periodo definido por default <strong>session.gc_maxlifetime</strong>, não importando importando o valor entrado aqui.
     TriggersAvailable=Triggers disponível
    -TriggersDesc=Triggers são arquivos que modificam o comportamento do Dolibarr <b>fluxo de trabalho</b> uma vez copiado dentro do diretório <b>htdocs/core/triggers</b>. Eles realizam novas ações, ativado em eventos do Dolibarr (criar nova empresa, validação de fatura, ...).
     TriggerDisabledByName=Triggers neste arquivo estão desativados pelo sufixo <b>-NORUN</b> em seu nome.
     TriggerDisabledAsModuleDisabled=Triggers neste arquivo está desabilitado assim como o módulo <b>%s</b> está desabilitado.
     TriggerAlwaysActive=Triggers neste arquivo está sempre ativo, não importando os módulos ativos no Dolibarr.
    @@ -877,7 +733,6 @@ DictionaryDesc=Inserir todos os dados de referência. Você pode adicionar seus
     ConstDesc=Esta página permite editar todos os outros parâmetros não disponíveis nas páginas anteriores. Estes são principalmente parâmetros reservados para desenvolvedores ou solução de problemas avançada. Para uma lista de opções <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">verifique aqui</a>.
     MiscellaneousDesc=Todos os outros parâmetros relacionados com a segurança são definidos aqui.
     LimitsSetup=Configurações de Limites/Precisões
    -LimitsDesc=Você pode definir limites, precisões e otimizações utilizadas pelo Dolibarr aqui
     MAIN_MAX_DECIMALS_UNIT=Máxima casas decimais para preços unitários
     MAIN_MAX_DECIMALS_TOT=Máxima casas decimais para preços totais
     MAIN_MAX_DECIMALS_SHOWN=Máxima casas decimais para preços mostrado na tela (adicionar <b>...</b> depois desse número se você deseja ver <b>...</b> quando um número é truncado quando mostrado na tela)
    @@ -886,16 +741,12 @@ UnitPriceOfProduct=Unidade líquida do preço do produto
     TotalPriceAfterRounding=Preço Total (Líquido,ICMS,taxa local) depois do arredontamento
     ParameterActiveForNextInputOnly=Parâmetro efetivo somente para a próxima entrada
     NoEventOrNoAuditSetup=Nenhum evento de segurança foi gravado ainda. Isso pode ser normal de o auditar não foi ativado na página "Conf. - Segurança - Auditar"
    -NoEventFoundWithCriteria=Nenhum evento de segurança foi achado pelos critérios de pesquisa.
     SeeLocalSendMailSetup=Ver sua configuração local de envio de correspondência
     BackupDesc=Para fazer um backup completo do Dolibarr, você deve:
     BackupDesc2=* Salvar os documentos do diretório (<b>%s</b>) que contém todos os arquivos uploaded e arquivos gerados (Você pode criar um arquivo zipado por exemplo).
    -BackupDesc3=* Salvar o banco de dados em um arquivo de despejo. Para isso, você pode seguir o assistente.
     BackupDescX=O diretório do arquivo deverá ser armazenado em um local seguro.
     BackupDescY=O arquivo de despeja gerado deverá ser armazenado em um local seguro.
    -BackupPHPWarning=O backup não pode ser garantido por esse método. Prefira o anterior
     RestoreDesc=Para restaurar o backup Dolibarr, você deve:
    -RestoreDesc2=* Restaurar o arquivo de backup (zipado) no diretório dos documentos, para extrair a arvore de arquivos no diretório do documento da nova instalação do Dolibarr ou dentro do atual diretório dos documentos (<b>%s</b>).
     RestoreDesc3=* Restaurar os dados de backup do arquivo de despejo, para dentro do banco de dados da nova instalação do Dolibarr ou para dentro da atual instalação. Aviso, uma vez a restauração completa, você deve usar o login/senha, que existia quando o backup foi feito, para conectar denovo. Para restaurar o backup do banco de dados para dentro da atual instalação, você pode seguir esse assistente.
     RestoreMySQL=Importar MySQL
     ForcedToByAModule=Essa Regra é forçada para <b>%s</b> by um módulo ativado
    @@ -905,24 +756,18 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Você deve rodar esse comando n
     YourPHPDoesNotHaveSSLSupport=Função SSL functions não está disponível no seu PHP
     DownloadMoreSkins=Mais skins para baixar
     SimpleNumRefModelDesc=Retorna o número de referênciaReturns com o formato %syymm-nnnn onde yy é o ano, mm é o mês é nnnn é a sequencia sem buraco e sem reset
    -ShowProfIdInAddress=Mostrar id proficional com endereço no documento
    -ShowVATIntaInAddress=Esconder ICMS dentro num com endereços no documento
    -MAIN_DISABLE_METEO=Desativar visualização meteo
     MeteoStdModEnabled=Modo padrão habilitado
     MeteoPercentageMod=Modo porcentagem
     MeteoPercentageModEnabled=Modo de porcentagem habilitado
     TestLoginToAPI=Teste de login para API
    -ProxyDesc=Algumas funções do Dolibarr precisam ter acesso a internet para funcionar. Defina esses parâmetros aqui. se o servidor Dolibarr esta atrás de um servidor de proxy, esses parâmetros falam pro Dolibarr como acessar a internet através disso.
     MAIN_PROXY_USE=Use um servidor de proxy (caso contrário acesso direto a internet)
     MAIN_PROXY_HOST=Nome/Endereço do servidor de proxy
     MAIN_PROXY_PORT=Porta do servidor de proxy
     MAIN_PROXY_USER=Login para usar no servidor de proxy
     MAIN_PROXY_PASS=Senha para usar no servidor de proxy
    -DefineHereComplementaryAttributes=Defina aqui todos os atributos, não disponível por default, e que você quer que seja suportado por %s.
     ExtraFieldsLinesRec=Atributos complementares (linhas dos temas das faturas)
     ExtraFieldsSupplierOrdersLines=Atributos complementares (linhas de encomenda)
     ExtraFieldsThirdParties=Atributos complementares (terceiros)
    -ExtraFieldsContacts=Atributos complementares (contato/endereço)
     ExtraFieldsMember=Atributos complementares (membros)
     ExtraFieldsCustomerInvoicesRec=Atributos complementares (temas das faturas)
     ExtraFieldsSupplierOrders=Atributos complementares (pedidos)
    @@ -930,38 +775,25 @@ ExtraFieldHasWrongValue=Atributo %s tem um valor errado.
     AlphaNumOnlyLowerCharsAndNoSpace=apenas alfanumérico e minúsculas, sem espaço
     SendmailOptionNotComplete=Aviso, em alguns sistemas Linux, para enviar email para seu email, sendmail executa a configuração que deve conter opção -ba (parâmetro mail.force_extra_parameters dentro do seu arquivo php.ini). Se algum destinatário não receber emails, tente editar esse parâmetro PHP com mail.force_extra_parameters = -ba).
     PathToDocuments=Caminho para documentos
    -SendmailOptionMayHurtBuggedMTA=Função para envios de correspondência usando o método "PHP mail direct" irá gerar uma mensagem na correspondência que pode não estar corretamente analisada por algum servidor de recepção de correspondência. Resultando que essa correspondência não pode ser lida pela pessoa hostiada por essa plataforma bugada. É caso de alguns provedores de internet (Ex: Orange na França). Isso não é um problema para o Dolibarr nem dentro PHP mas para servidor receptor de correspondência. Você pode contudo adicionar a opção MAIN_FIX_FOR_BUGGED_MTA para 1 dentro da configuração, outra modificação do Dolibarr para evitar isso. Contudo você pode sofrer problemas com outros servidores que respeitão estritamente os padrões SMTP. A outra solução (RECOMENDADA) é usar o método "SMTP socket library" que não tem desvantagens.
     TranslationKeySearch=Buscar uma chave ou variável de tradução
     TranslationOverwriteKey=Sobrescrever uma variável de tradução
     TranslationDesc=Como definir o idioma do aplicativo exibido: <br> * Systemwide: menu <strong> Início - Configuração - Exibição </strong> <br> * Por usuário: use a guia <strong> Configuração da tela do usuário </strong> no cartão do usuário ( clique no nome de usuário na parte superior da tela).
     TranslationOverwriteDesc=Você também pode sobrescrever as variáveis preenchendo a tabela a seguir. Escolha o seu idioma a partir do "%s" dropdown, insira a variável com a chave da transação em "%s" e a sua nova tradução em "%s"
    -TranslationOverwriteDesc2=Você pode usar a outra aba para lhe ajudar a conhecer a chave de tradução a ser empregada
     TranslationString=Variável de tradução
     CurrentTranslationString=Variável de tradução atual
     WarningAtLeastKeyOrTranslationRequired=Pelo menos um critério de busca é exigido para a chave ou variável de tradução.
     NewTranslationStringToShow=Nova variável de tradução a ser exibida
     OriginalValueWas=A tradução original foi sobrescrita. O valor original era:<br><br>%s
    -TransKeyWithoutOriginalValue=Você forçou uma nova tradução para a chave de tradução '<strong>%s</strong>' que não existe em qualquer um dos arquivos de idioma
     TotalNumberOfActivatedModules=Aplicação / módulos ativados: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Você pelo menos deve ativar 1 módulo
    -ClassNotFoundIntoPathWarning=Classe %s não achado dentro o caminho PHP
     YesInSummer=Sim em verão
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, apenas os seguintes módulos são abertos para usuários externos (seja qual for a permissão de tais usuários) e somente se as permissões fossem concedidas:
     SuhosinSessionEncrypt=Sessão armazenada criptografada pelo Suhosin
     ConditionIsCurrently=Condição é atualmente %s
    -YouUseBestDriver=Você usa o driver %s que é o melhor driver disponível atualmente.
    -YouDoNotUseBestDriver=Você usa o driver %s mas o driver %s é o mais recomendado.
    -NbOfProductIsLowerThanNoPb=Você tem somente %s produtos/serviços no seu banco de dados. Isso não requer qualquer particular otimização.
     SearchOptim=Procurar Otimização
    -YouHaveXProductUseSearchOptim=Você tem %s produtos dentro do banco de dados. Você deveria adicionar a constante PRODUCT_DONOTSEARCH_ANYWHERE para 1 em Home->Configuração->Outros, seu limite para a procura começar na strings fazendo possível para o banco de dados usar o index e você deveria receber uma resposta imediata.
    -BrowserIsOK=Você está usando o navegador %s. Esse navegador está OK com a segurança e performa.
    -BrowserIsKO=Você está usando o navegador %s. Esse navegador é uma péssima escolha para segurança, performa e confiabilidade. Nós recomendandos usar Firefox, Chrome, Opera ou Safari.
     XDebugInstalled=XDebug é carregado.
     XCacheInstalled=XCache é carregado.
    -AddRefInList=Aparência cliente/fornecedor ref dentro da lista (escolha a lista ou combobox) e mais o hyperlink. Terceiros serão exibidos co o nome "CC12345 - SC45678 - A grande corporação", ao invés de "A grande corporação".
     FillThisOnlyIfRequired=Exemplo: +2 (Preencha somente se compensar o problema do timezone é experiente)
     PasswordGenerationStandard=Retorna uma senha gerara de acordo com o algorítimo interno do Dolibarr: 8 caracteres contendo números e letras em letras minusculas.
    -PasswordGenerationNone=Não sugerimos qualquer senha gerada. A senha deve ser inserida manualmente.
     PasswordGenerationPerso=Retornar uma senha de acordo com a configuração definida para a sua personalidade.
     PasswordPatternDesc=Descrição do padrão de senha
     RuleForGeneratedPasswords=Regra para sugerir uma senha gerada ou validação de senha
    @@ -973,12 +805,8 @@ CompanySetup=Configurações de módulo das empresas
     NotificationsDesc=A funcionalidade de notificações por e-mail lhe permite enviar silenciosamente e-mail automático para alguns eventos do Dolibarr. Os destinatários das notificações podem ser definidos:
     NotificationsDescUser=* por usuários, um usuário de cada vez.
     NotificationsDescGlobal=* ou pela definição de um destinatário global para os e-mails na página de configuração do módulo.
    -ModelModules=Temas de documentos
    -DocumentModelOdt=Gerar documentos dos templates livres (Arquivos .ODT ou .ODS do libreoffice, KOffice, TextEdit, ...)
     WatermarkOnDraft=Marca d'água no documento de rascuno
     JSOnPaimentBill=Ative a função de preenchimento automático de linhas no formulário de pagamento
    -CompanyIdProfChecker=Regras no Ids profissional
    -MustBeMandatory=Obrigatória a criação de terceiros?
     MustBeInvoiceMandatory=Obrigatória a validação de faturas?
     WebCalUrlForVCalExport=Uma exportação de link para o formato <b>%s</b> está disponível no seguinte link: %s
     BillsSetup=Configurações do módulo de faturas
    @@ -1071,19 +899,14 @@ LDAPTestSynchroMemberType=Teste da sincronização dos tipos de membro
     LDAPTestSearch=Teste de pesquisa LDAP
     LDAPSynchroOK=Teste de sincronização foi um sucesso
     LDAPSynchroKO=Teste de sincronização falhou
    -LDAPSynchroKOMayBePermissions=Teste de sincronização falhou. Verifique se a conexão do servidor está corretamente configurada e que permita atualizações LDAP
     LDAPTCPConnectOK=Conexão TCP para o servidor LDAP foi um sucesso (Servidor=%s, Porta=%s)
     LDAPTCPConnectKO=Conexão TCP para o servidor LDAP falhou (Servidor=%s, Porta=%s)
    -LDAPBindOK=Conexão/Autenticação do servidor LDAP foi um sucesso (Servidor=%s, Porta=%s, Admin=%s, Senha=%s)
    -LDAPBindKO=Conexão/Autenticação do servidor LDAP falhou (Servidor=%s, Porta=%s, Admin=%s, Senha=%s)
     LDAPSetupForVersion3=Servidor LDAP configurado para versão 3
     LDAPSetupForVersion2=Servidor LDAP configurado para versão 2
     LDAPFieldLoginExample=Exemplo : uid
     LDAPFilterConnectionExample=Exemplo : &(objectClass=inetOrgPerson)
     LDAPFieldLoginSambaExample=Exemplo : ananomedaconta
     LDAPFieldFullnameExample=Exemplo : cn
    -LDAPFieldPasswordNotCrypted=Senha não criptografada
    -LDAPFieldPasswordCrypted=Senha criptografada
     LDAPFieldPasswordExample=Exemplo : SenhaUsuário
     LDAPFieldCommonNameExample=Exemplo : cn
     LDAPFieldNameExample=Exemplo : sn
    @@ -1121,22 +944,17 @@ LDAPDescMembersTypes=Esta página permite que você defina os atributos do nome
     LDAPDescValues=Exemplos de valores são projetados pelo <b>OpenLDAP</b> seguido dos temas carregados: <b>core.schema, cosine.schema, inetorgperson.schema</b>). Se você usa esses valores e OpenLDAP, modifique seu arquivo de configurações LDAP <b>slapd.conf</b> para ter todos esses temas carregados.
     ForANonAnonymousAccess=Para um acesso autenticado (para um acesso de escrita por exemplo)
     PerfDolibarr=Configurações/otimizações de relatório de performance
    -YouMayFindPerfAdviceHere=Você achará nesta página alguns checks ou conselhos relatados sobre a performance.
    -NotInstalled=Não instalado, então seu servidor não está lento por causa disso.
     ApplicativeCache=cache de aplicativo
     MemcachedNotAvailable=Nenhum cache de aplicativo foi encontrado. Você pode aumentar a performance instalando um servidor de cache Memcached e o módulo será capaz de usar esse servidor de cache. Mais informações aqui http://wiki.dolibarr.org/index.php/Module_MemCached_EN. Note que vários provedores de host web não dispõem de tal servidor de cache.
     MemcachedModuleAvailableButNotSetup=Módulo de aceleração da memória cache está ativado mas a configuração não está completa
     MemcachedAvailableAndSetup=Módulo de aceleração da memória cache está ativado e a configuração está completa
     OPCodeCache=cache OPCode
    -NoOPCodeCacheFound=Nenhum cache OPCode foi achado. Pode ser que você use outro cache OPCode do que XCache ou eAccelerator (bom), pode ser que você não tenha cache OPCode (muito mau).
     FilesOfTypeCached=Arquivos do tipo %s estão no cache pelo servidor HTTP
     FilesOfTypeNotCached=Arquivos do tipo %s não estão no cache pelo servidor HTTP
     FilesOfTypeCompressed=Arquivos do tipo %s estão comprimidos pelo servidor HTTP
     FilesOfTypeNotCompressed=Arquivos do tipo %s não estão comprimidos pelo servidor HTTP
    -CacheByServerDesc=Por exemplo, usando a diretiva Apache "ExpiresByType image/gif A2592000"
     CompressionOfResources=Comprimir as respostas HTTP
     TestNotPossibleWithCurrentBrowsers=Não é possível detecção automática
    -DefaultValuesDesc=Você pode definir/forçar aqui o valor padrão que desejas obter quando crias um novo registro, e/ou os filtros padrão ou a ordem dos pedidos quando você lista um registro.
     DefaultSearchFilters=Filtros de busca padrão
     DefaultSortOrder=Ordem padrão dos pedidos
     DefaultFocus=Campos de foco padrão
    @@ -1144,11 +962,7 @@ ProductSetup=Configurações do módulo dos produtos
     ServiceSetup=Configurações do módulo de serviços
     ProductServiceSetup=Configurações dos módulos de produtos e serviços
     NumberOfProductShowInSelect=Max número de produtos na lista selecionada (0=sem limite)
    -ViewProductDescInFormAbility=Visualização das descrições do produto nos formulários (caso contrário como popup tooltip)
     MergePropalProductCard=Ativar na aba Arquivos Anexos ao produto/serviço uma opção para mesclar o documento PDF do produto à proposta PDF se o produto/serviço estiver na proposta
    -ViewProductDescInThirdpartyLanguageAbility=Visualização das descrições dos produtos no idioma do terceiro
    -UseSearchToSelectProductTooltip=Além disso, se você tem um grande número de produtos (> 100 000), você pode aumentar a velocidade, definindo PRODUCT_DONOTSEARCH_ANYWHERE constante a 1 em Setup Outro. Busca, então, ser limitada até o início da string.
    -UseSearchToSelectProduct=Aguarda você pressionar uma tecla antes de carregar o conteúdo de uma lista de produtos combo (isto pode melhorar o desempenho se você tiver um grande número de produtos, mas é menos conveniente)
     SetDefaultBarcodeTypeProducts=Tipo de código de barras default para usar nós produtos
     SetDefaultBarcodeTypeThirdParties=Tipo de código de barras default para usar nós terceiros
     UseUnits=Definir uma unidade de medida para a Quantidade durante a edição das linhas do pedido, proposta ou fatura
    @@ -1194,7 +1008,6 @@ SendingsSetup=Configurações do módulo de envios
     SendingsReceiptModel=Modelo de recibo do envio
     SendingsNumberingModules=Módulos de númeração de envios
     SendingsAbility=Suporte para folhas de envios, para entregas de cliente
    -NoNeedForDeliveryReceipts=Na maioria dos casos, as planilhas de envio são usadas como planilhas para as entregas do cliente (lista de produtos para envio) e planilhas que são recebidas e assinadas pelo cliente. Dessa forma os recibos das entregas são uma função duplicada e é raramente ativada.
     FreeLegalTextOnShippings=Texto livre para envios
     DeliveryOrderNumberingModules=Módulo de numeração de recibos de produtos entregues
     DeliveryOrderModel=Modelo de recibo de produtos entregues
    @@ -1203,15 +1016,11 @@ FreeLegalTextOnDeliveryReceipts=Texto livre em recibos de entregas
     ActivateFCKeditor=Editor avançado ativo por:
     FCKeditorForCompany=Criação/edição do WYSIWIG nas descrições de elementos e nota (exceto produtos/serviços)
     FCKeditorForProduct=Criação/edição do WYSIWIG nas descrições de  produtos/serviços e nota
    -FCKeditorForProductDetails=Criação/edição do WYSIWIG nas linhas dos detalhes de produtos de todas entidades (orçamentos, pedidos, faturas, etc...). <font class="warning">Aviso: Usando essa opção nesse caso é extremamente NÃO recomendado, podendo causar problemas com caracteres especiais e no formato da página na construção do arquivo PDF.</font>
     FCKeditorForMailing=Criação/edição do WYSIWIG nos E-Mails massivos (ferramentas->emailing)
     FCKeditorForUserSignature=criação/edição do WYSIWIG nas assinaturas de usuários
     FCKeditorForMail=Criação/Edição WYSIWIG para todos os e-mails (exceto Ferramentas->eMailing)
    -OSCommerceErrorConnectOkButWrongDatabase=Conexão foi um sucesso mas o banco de dados não enxerga o banco de dados do OSCommerce (chave %s não achada na tabela %s).
    -OSCommerceTestOk=Conexão ao servidor '%s' no banco de dados '%s' com o usuário '%s' foi um sucesso.
    -OSCommerceTestKo1=Conexão ao servidor '%s' foi um sucesso mas o banco de dados '%s' não foi alcançado.
    +OSCommerceTestOk=Conexão para o servidor '%s' no banco de dados '%s' com o usuário '%s' foi bem sucedida.
     OSCommerceTestKo2=Conexão ao servidor '%s' com o usuário '%s' falhou.
    -IfYouUsePointOfSaleCheckModule=Se você usar um módulo Ponto de Venda (POS módulo fornecido por padrão ou outro módulo externo), esta configuração pode ser ignorado pelo seu modulo ponto de Venda. A maioria modulo ponto de Vendas são projetados para criar imediatamente uma fatura e diminuir estoque por padrão tudo o que são opções aqui. Então, se você precisa ou não ter uma diminuição de ações quando registrar uma venda a partir do seu ponto de venda, verifique também a configuração do seu módulo POS.
     MenuDeleted=Menu Deletado
     NotTopTreeMenuPersonalized=Menus personalizados não conectados à uma entrada do menu superior
     NewMenu=Novo Menu
    @@ -1226,7 +1035,6 @@ DetailUrl=URL onde o menu envia para você (URL absoluta ou link externo com htt
     DetailEnabled=Condição para mostra ou não entrar
     DetailRight=Condição para mostrar menus não autorizados em cinza
     DetailLangs=Nomes de arquivos lang para código de etiqueta da tradução
    -DetailTarget=Alvos por links (_blank topo abre uma nova janela)
     DetailLevel=Nível (-1:menu superior, 0:menu do cabeçario, >0 menu e sub-menu)
     ModifMenu=Modificar menu
     DeleteMenu=Deletar entrada do menu
    @@ -1237,7 +1045,6 @@ OptionVatMode=Imposto ICMS
     OptionVATDebitOption=Base em Acréscimo
     OptionVatDefaultDesc=ICMS é um imposto:<br>- Nas entregas dos bens (Nós usamos a data da fatura)<br>- Nos pagamentos dos serviços
     OptionVatDebitOptionDesc=ICMS é um imposto:<br>- Nas entregas dos bens (Nós usamos a data da fatura)<br>- Na emissão da fatura do serviço
    -SummaryOfVatExigibilityUsedByDefault=O tempo do ICMS exige por default as seguintes opções a serem escolhidas:
     SupposedToBePaymentDate=Data usada no pagamento
     SupposedToBeInvoiceDate=Data usada na fatura
     Buy=Compra
    @@ -1249,32 +1056,20 @@ AccountancyCodeBuy=Código de contas de compras
     AgendaSetup=Configurações do módulo de eventos e agenda
     PasswordTogetVCalExport=Chave para autorizar exportação do link
     PastDelayVCalExport=Não exportar eventos antigos de
    -AGENDA_USE_EVENT_TYPE=Usar os tipos de eventos (gerenciado no menu Configurações -> Dicionários -> Tipos de eventos da agenda)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Definido automaticamente esse valor padrão para o tipo de evento em evento criar formulário
    -AGENDA_DEFAULT_FILTER_TYPE=Use automaticamente este tipo de evento no filtro de busca da agenda
    -AGENDA_DEFAULT_FILTER_STATUS=Use automaticamente este estado no filtro das buscas da agenda
     AGENDA_DEFAULT_VIEW=Qual aba voçê quer abrir por padrão quando o menu Agenda e selecionado
     AGENDA_REMINDER_EMAIL=Ativar lembrete de evento <b> por emails </b> (A opção de lembrar / atraso pode ser definida em cada evento). Nota: Módulo <strong> 1 %s </strong> deve ser habilitado e configurado corretamente para que o lembrete seja enviado na freqüência correta.
    -AGENDA_REMINDER_BROWSER=Ativar lembrete de envento <b> no navegador de usuários </b> (quando a data do evento é atingida, cada usuário pode recusar isso a partir da pergunta de confirmação do navegador)
     AGENDA_REMINDER_BROWSER_SOUND=Habilitar a notificação sonora
     AGENDA_SHOW_LINKED_OBJECT=Exibir objeto conectado na visualização da agenda
     ClickToDialSetup=Configurações do módulo clique para discar
     ClickToDialUrlDesc=URL chamada quando clica-se no ícone do telefone.  Na URL, você pode usar as tags<br><b>__PHONETO__</b> que será substituída pelo número do telefone da pessoa a chamar<br><b>__PHONEFROM__</b> que será substituída pelo telefone da pessoa que está chamando (o seu)<br><b>__LOGIN__</b> que será substituída pelo login clicktodial (definido no cartão do usuário)<br><b>__PASS__</b> que será substituída pela senha clicktodial (definida no cartão do usuário).
    -ClickToDialDesc=Esto modo permite tornar os números telefônicos em link. Um clique neste ícone fará com que o seu telefone ligue para o número exibido. Isto pode ser usado para ligar para um sistema de Call Center do Dolibarr, o qual poderá ligar para um número em um sistema SIP, por exemplo.
     ClickToDialUseTelLink=Use apenas o link "tel." para os números de telefone
    -ClickToDialUseTelLinkDesc=Use este método se os seus usuários possuírem um softphone ou uma interface de programa instalada no mesmo computador do navegador, e usado para ligar quando você clica em um link no seu navegador que inicia com "tel.". Se você precisar de uma solução de um servidor completo (sem a necessidade de instalação de um programa local), você deve definir isto para "Não" e preencher o próximo campo.
     CashDeskSetup=Configurações do módulo do ponto de vendas
    -CashDeskThirdPartyForSell=Terceiro genérico para usar nas vendas
     CashDeskBankAccountForSell=Conta default para usar nos pagamentos em dinheiro
     CashDeskBankAccountForCheque=Conta default para usar nos pagamentos em cheque
     CashDeskBankAccountForCB=Conta default para usar nos pagamentos em cartão de crédito
    -CashDeskDoNotDecreaseStock=Desativar diminuição de ações quando uma venda é feita a partir de ponto de venda (se "não", diminuição de ações é feito para cada vendem feito a partir de POS, o que for opção definida no módulo de estoque).
     CashDeskIdWareHouse=Depósito para usar nas vendas
    -StockDecreaseForPointOfSaleDisabled=Diminuição do estoque pelo PDV desativado
     StockDecreaseForPointOfSaleDisabledbyBatch=Diminuir estoque no Ponto De Vendas não é compativel com o gerenciamento do lote
    -CashDeskYouDidNotDisableStockDecease=Você não desabilitou a redução do estoque quando realizando uma venda a partir do Ponto de Venda. Por isso um armazém é exigido.
     BookmarkSetup=Configurações do módulo de marcadores
    -BookmarkDesc=Esse módulo permite você gerenciar marcadores. Você pode também adicionar atalhos para qualquer página do Dolibarr ou sites externos no seu menu esquerdo.
     NbOfBoomarkToShow=Número máximo de marcadores para mostrar no menu esquerdo
     WebServicesSetup=Configurações do módulo de serviço de web
     WebServicesDesc=Ativando esse módulo, Dolibarr se torna um servidor de serviços web e fornece vários serviços web.
    @@ -1309,7 +1104,6 @@ ProjectsSetup=Configurações do módulo de projetos
     ProjectsModelModule=Modelo de documento de relatório de projeto
     TasksNumberingModules=Modelo de numeração de tarefas
     TaskModelModule=Modelo de numeração de relatório de tarefas
    -UseSearchToSelectProject=Aguardar você pressionar uma tecla antes de carregar o conteúdo da lista de projetos combinados (Isto pode aumentar a performance se você possui um grande número de projetos, mas isto não é tão conveniente)
     NewFiscalYear=Novo período de contabilidade
     OpenFiscalYear=Período da contabilidade em aberto
     CloseFiscalYear=Período da contabilidade fechada
    @@ -1333,8 +1127,6 @@ NoModueToManageStockIncrease=Nenhum módulo disponível foi ativado para gerenci
     YouMayFindNotificationsFeaturesIntoModuleNotification=Você pode encontrar opções para notificações por email por habilitar e configurar o módulo "Notificação".
     ListOfNotificationsPerUser=Lista de notificações por usuário*
     ListOfNotificationsPerUserOrContact=Lista de notificações por usuário* ou por contato**
    -GoOntoUserCardToAddMore=Ir para a aba "Notificações" de um usuário para adicionar ou remover as notificações para os usuários
    -GoOntoContactCardToAddMore=Ir para a aba "Notificações" de um terceiro para adicionar ou remover as notificações para contatos/endereços
     BackupDumpWizard=Assistente para construir arquivo de despejo de backup do banco de dados
     SomethingMakeInstallFromWebNotPossible=A instalação do módulo externo não é possível a partir da interface web pelo seguinte motivo:
     SomethingMakeInstallFromWebNotPossible2=Por esta razão, o processo de atualização descrito aqui é apenas manual de passos que um usuário privilegiado pode fazer.
    @@ -1354,15 +1146,12 @@ BackgroundTableLineEvenColor=Cor do fundo, mesmo para linhas de tabela
     MinimumNoticePeriod=O período mínimo de observação (O seu pedido de licença deve ser feito antes de esse atraso)
     NbAddedAutomatically=Número de dias adicionados para contadores de usuários (automaticamente) a cada mês
     EnterAnyCode=Este campo contém uma referência para identificar uma linha. Digite qualquer valor de sua escolha, mas sem caracteres especiais.
    -UnicodeCurrency=Insira aqui entre colchetes, o número em bytes que representam o símbolo da moeda. Por exemplo: para $, inserir [36] - para real brasileiro R$ [82,36] - para €, inserir [8364]
     ColorFormat=A cor RGB está no formato HEX, ex.: FF0000
     PositionIntoComboList=Posição de linha em listas de combinação
     SellTaxRate=Taxa de imposto sobre venda
     RecuperableOnly=Sim para VAT "Não Percebido, mas Recuperável" dedicado a alguns estados na França. Mantenha o valor como "Não" em todos os outros casos.
     UrlTrackingDesc=Se o prestador do serviço de transporte oferece uma página ou um site na web para verificação da situação do seu envio, você pode inserir seu endereço aqui. Você pode usar a chave {TRACKID} nos parâmetros da URL de forma que o sistema a substitua com o valor do número de rastreamento que o usuário inseriu no cartão de envio.
    -OpportunityPercent=Quando você cria uma oportunidade, você definiu um valor estimado para o projeto. De acordo com a situação da oportunidade, este valor pode ser multiplicado por esta taxa para avaliação do valor global que todas as suas oportunidades podem gerar. O valor é uma porcentagem (entre 0 e 100).
     TemplateForElement=O registro deste tema é dedicado a qual elemento
    -TemplateIsVisibleByOwnerOnly=Template é visível somente pelo proprietário
     VisibleEverywhere=Visível em qualquer lugar
     VisibleNowhere=Agora visível
     FixTZ=Consertar TimeZone
    @@ -1378,10 +1167,7 @@ YouUseLastStableVersion=Você utiliza a última versão estável
     TitleExampleForMajorRelease=Exemplo de mensagem que você pode usar para anunciar esta importante versão (sinta-se à vontade para usar isso nos seus websites)
     TitleExampleForMaintenanceRelease=Exemplo de mensagem que você pode usar para anunciar esta versão de manutenção (sinta-se à vontade para usar isso nos seus websites)
     ExampleOfNewsMessageForMajorRelease=O ERP e CRM Dolibarr %s está disponível. A versão %s é um lançamento principal com diversas novas funções para os usuários e desenvolvedores. Você pode baixá-la a partir da área de download do portal https://www.dolibarr.org (sub-diretório Versões estáveis). Você pode ler o <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> com a lista completa de mudanças.
    -ExampleOfNewsMessageForMaintenanceRelease=O ERP e CRM Dolibarr %s está disponível. A versão %s é uma versão de manutenção, assim ela contém somente correção de bugs. Nós recomendamos que qualquer um use uma versão mais antiga para então atualizá-la. Como qualquer versão de manutenção, nenhuma nova função, nem uma mudança na estrutura dos dados está presente. Você pode baixá-la a partir da área de download no portal https://www.dolibarr.org (no sub-diretório de Versões estáveis). Você pode ler o arquivo <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> com a relação completa de mudanças.
    -MultiPriceRuleDesc=Quando a opção "Diversos níveis de preço por produto/serviço" estiver habilitada, você pode definir diferentes preços (um por nível de preço) para cada produto. Para ganhar tempo, você pode inserir aqui a regra para ter um preço para cada nível sendo calculada automaticamente de acordo com o preço do primeiro nível, desta forma você precisará apenas inserir o preço do primeiro nível para cada produto. Está página existe apenas para lhe ajudar a ganhar tempo e pode ser útil somente se os seus preços para cada nível estão relacionados ao primeiro nível. Você pode ignorar esta página na maioria das vezes.
     ModelModulesProduct=Temas para os documentos do produto
    -ToGenerateCodeDefineAutomaticRuleFirst=Para estar apto a gerar códigos automaticamente, você deve definir primeiro um gerente para definir automaticamente o número do código de barras.
     SeeSubstitutionVars=Veja * nota para a lista das possíveis variáveis de substituição
     SeeChangeLog=Ver o arquivo ChangeLog (somente em inglês)
     AllPublishers=Todos os que publicam
    @@ -1394,19 +1180,10 @@ AddHooks=Adicionar ganchos
     AddTriggers=Adicionar disparadores
     AddModels=Adicionar temas de documentos ou de numeração
     DetectionNotPossible=Não foi possível a detecção
    -UrlToGetKeyToUseAPIs=URL para obtenção do token para usar a API (uma vez que o token tenha sido recebido, ele é salvo na tabela do usuário no banco de dados e deve ser inserido em cada chamada de API)
     ListOfAvailableAPIs=Lista de API's disponíveis
    -activateModuleDependNotSatisfied=O módulo "%s" depende do módulo "%s" que está faltando, assim o módulo "%1$s" pode não funcionar corretamente. Favor instalar o módulo "%2$s" ou desabilitar o módulo "%1$s" se você deseja estar livre de qualquer surpresa.
    -CommandIsNotInsideAllowedCommands=O comando que você tenta executar não está na lista de comandos permitidos definidos no parâmetro <strong>$dolibarr_main_restrict_os_commands</strong> no arquivo <strong>conf.php</strong>.
     LandingPage=Página de destino
    -SamePriceAlsoForSharedCompanies=Se você usa um módulo de múltiplas empresas, com a escolha de "Preço único", o preço será também o mesmo para todas as empresas se os produtos são compartilhados entre os ambientes.
     ModuleEnabledAdminMustCheckRights=O módulo foi ativado. As permissões para módulo(s) ativado foram fornecidas apenas aos usuários de administração. Talvez seja necessário conceder permissões para outros usuários ou grupos manualmente, se necessário.
    -UserHasNoPermissions=Este usuário não possui permissões definidas
    -TypeCdr=Use "Nenhum" se a data do prazo de pagamento da fatura mais um delta em dias (delta é o campo "Nº de dias")<br>Use "No fim do mês", se, após o delta, a data deve ser aumentada para alcançar o fim do mês (+ um "Prazo" opcional em dias)<br>Use "Atual/Próximo" para ter a data do prazo de pagamento sendo o primeiro Nº do mês (N é armazenado no campo "Nº de dias")
     BaseCurrency=Moeda de referência da companhia (ir para a configuração da companhia para alterá-la)
    -WarningNoteModuleInvoiceForFrenchLaw=Este módulo %s é compatível com as leis francesas (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=Este módulo %s está em conformidade com as leis francesas (Loi Finance 2016), pois o módulo Registros Não Reversíveis é ativado automaticamente.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Você tenta instalar o módulo %s que é um módulo externo. A ativação de um módulo externo significa que você confia em quem o desenvolveu e que você tem certeza que este módulo não altera negativamente o comportamento do aplicativo e que está em conformidade com as leis do seu país (%s). Se o módulo traz uma função ilegal, você se torna responsável pelo uso de um programa não legal.
     MAIN_PDF_MARGIN_LEFT=Margem esquerda no PDF
     MAIN_PDF_MARGIN_RIGHT=Margem direita no PDF
     MAIN_PDF_MARGIN_TOP=Margem superior no PDF
    diff --git a/htdocs/langs/pt_BR/companies.lang b/htdocs/langs/pt_BR/companies.lang
    index b7a44346b8d..da0e207997a 100644
    --- a/htdocs/langs/pt_BR/companies.lang
    +++ b/htdocs/langs/pt_BR/companies.lang
    @@ -4,9 +4,6 @@ ErrorSetACountryFirst=Defina o país primeiro
     ConfirmDeleteCompany=Você tem certeza que deseja excluir esta empresa e toda a informação associada?
     DeleteContact=Excluir um contato/endereço
     ConfirmDeleteContact=Você tem certeza que deseja excluir este contato e toda a informação associada?
    -MenuNewThirdParty=Novo terceiro
    -MenuNewCustomer=Novo cliente
    -MenuNewProspect=Novo prospecto de cliente
     MenuNewPrivateIndividual=Novo particular
     CreateThirdPartyOnly=Adicionar terceiro
     CreateThirdPartyAndContact=Criar um terceiro + um contato interno
    @@ -18,16 +15,11 @@ Contacts=Contatos/Endereços
     ThirdPartyContacts=Contato de terceiros
     ThirdPartyContact=Contato/endereço de terceiro
     AliasNames=Nome de fantasia (nome comercial, marca registrada etc.)
    -AliasNameShort=Nome de fantasia
    -CountryIsInEEC=O país integra a Comunidade Econômica Europeia
    -ThirdPartyName=Nome do terceiro
     ThirdPartyEmail=Email de terceiros
     ThirdPartyProspects=Prospectos de cliente
     ThirdPartyProspectsStats=Prospectos de cliente
     ThirdPartyCustomersWithIdProf12=Clientes com %s ou %s
    -ThirdPartyType=Tipo de terceiro
     Individual=Pessoa física
    -ToCreateContactWithSameName=Um contato/endereço será criado automaticamente com a mesma informação do terceiro. Na maioria dos casos, mesmo que o terceiro seja uma pessoa física, a criação de um único terceiro é suficiente.
     ParentCompany=Matriz
     Subsidiaries=Filiais
     ReportByQuarter=Relatório pela taxa
    @@ -51,7 +43,9 @@ No_Email=Recusar e-mails em massa
     Zip=CEP
     Town=Município
     Web=Website
    -DefaultLang=Idioma ordinário
    +DefaultLang=Padrão de idioma
    +VATIsUsed=Imposto sobre vendas usado
    +VATIsNotUsed=O imposto sobre vendas não é usado
     CopyAddressFromSoc=Preencher o endereço com os dados do terceiro
     PaymentBankAccount=Pagamento conta bancária
     OverAllOrders=Pedidos
    @@ -111,11 +105,8 @@ ProspectCustomer=Possível cliente / Cliente
     Prospect=Prospecto de cliente
     CustomerRelativeDiscount=Desconto relativo do cliente
     CustomerRelativeDiscountShort=Desconto relativo
    -CustomerAbsoluteDiscountShort=Desconto fixo
     CompanyHasRelativeDiscount=Esse cliente tem um desconto padrão de <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Esse cliente não tem desconto relativo por padrão
    -CompanyHasAbsoluteDiscount=Este cliente possui desconto disponível (notas de créditos ou adiantamentos) para <b> %s </b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=Este cliente possui desconto disponível (comercial, adiantamentos) para <b> %s </b> %s
     CompanyHasCreditNote=Esse cliente ainda tem notas de crédito por <b>%s</b> %s
     CompanyHasNoAbsoluteDiscount=Esse cliente não tem desconto de crédito disponível
     DiscountNone=Nenhum
    @@ -132,17 +123,11 @@ DefaultContact=Contato/endereço padrão
     AddThirdParty=Adicionar terceiro
     DeleteACompany=Excluir empresa
     PersonalInformations=Dados pessoais
    -CustomerCode=Código de cliente
    -CustomerCodeShort=Código de cliente
    -CustomerCodeDesc=Código de cliente, único para todos os clientes
     RequiredIfCustomer=Necessário se o terceiro for um cliente ou um possível cliente
    -ValidityControledByModule=Validação controlada pelo módulo
    -ThisIsModuleRules=Esta é a regra é para esse módulo
     ProspectToContact=Prospecto de cliente a contactar
     CompanyDeleted=A empresa "%s" foi excluída do banco de dados.
     ListOfContacts=Lista de contatos/endereços
    -ListOfContactsAddresses=Lista de Contatos/Endereços
    -ListOfThirdParties=Lista de terceiros
    +ListOfContactsAddresses=Lista de contatos/endereços
     ShowContact=Mostrar contato
     ContactType=Tipo de contato
     ContactForOrders=Contato de pedidos
    @@ -156,16 +141,11 @@ NoContactForAnyProposal=Esse contato não é de nenhum orçamento
     NoContactForAnyContract=Esse contato não é de nenhum contrato
     NoContactForAnyInvoice=Esse contato não é de nenhuma fatura
     NewContact=Novo contato
    -NewContactAddress=Novo contato/endereço
    +NewContactAddress=Novo contato / endereço
     MyContacts=Meus contatos
     CapitalOf=Capital de %s
     EditCompany=Editar empresa
    -VATIntraCheckDesc=Esse link <b>%s</b> permite perguntar ao serviço de verificação da VAT europeia. Acesso externo a internet é necessário para o serviço.
    -VATIntraCheckableOnEUSite=Verificar taxa VAT no site da comissão europeia
    -VATIntraManualCheck=Você pode também verificar manualmente no site europeu <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Verificação não é possível. Verifique o serviço não é necessário por um membro de estado (%s).
    -NorProspectNorCustomer=Nem prospecto de cliente, nem cliente
    -JuridicalStatus=Natureza jurídica
     Staff=Número de funcionários
     ProspectLevelShort=Pos. Cli.
     ProspectLevel=Possível cliente
    @@ -193,9 +173,6 @@ ChangeContactDone=Trocar status para 'Contato feito'
     ProspectsByStatus=Prospectos por status
     ContactNotLinkedToCompany=Contato não esta vinculado a nenhum terceiro
     NoDolibarrAccess=Sem acesso ao Dolibarr
    -ExportDataset_company_1=Terceiros (Empresas / Fundações / Pessoas físicas) e propriedades
    -ExportDataset_company_2=Contatos e propriedades
    -ImportDataset_company_1=Terceiros (Empresas / Fundações / Pessoas físicas) e propriedades.
     PriceLevel=Faixa de preço
     DeliveryAddress=Endereço de entrega
     AddAddress=Adicionar endereço
    @@ -203,13 +180,10 @@ DeleteFile=Excluir arquivo
     ConfirmDeleteFile=Você tem certeza que deseja deletar esse arquivo?
     AllocateCommercial=Designado para representante comercial
     Organization=Organização
    -FiscalYearInformation=Informações do ano fiscal
    +FiscalYearInformation=Ano fiscal
     FiscalMonthStart=Primeiro mês do ano fiscal
    -YouMustAssignUserMailFirst=Você deve criar um e-mail para este usuário para poder adicionar as notificações por e-mail para ele.
     YouMustCreateContactFirst=Para estar apto a adicionar notificações por e-mail, você deve primeiramente definir contatos com e-mails válidos para o terceiro
    -ListProspectsShort=Lista de prospectos de cliente
    -ThirdPartiesArea=Área de terceiros
    -UniqueThirdParties=Total de terceiros
    +ListCustomersShort=Lista de Clientes
     ActivityCeased=Inativo
     ThirdPartyIsClosed=O terceiro está fechado
     ProductsIntoElements=Lista de produtos/serviços em %s
    @@ -220,6 +194,5 @@ LeopardNumRefModelDesc=O código é livre. Esse código pode ser modificado a qu
     ManagingDirectors=Nome do Representante(CEO,Diretor,Presidente...)
     MergeOriginThirdparty=Duplicar terceiros (terceiros que deseja excluir)
     MergeThirdparties=Mesclar terceiros
    -ConfirmMergeThirdparties=Tem certeza de que deseja juntar esse terceiro no atual? Todos os objetos vinculados (faturas, pedidos, ...) serão movidos para o terceiro atual, então a terceira parte será excluída.
     SaleRepresentativeLogin=Login para o representante de vendas
     SaleRepresentativeLastname=Sobrenome do representante de vendas
    diff --git a/htdocs/langs/pt_BR/errors.lang b/htdocs/langs/pt_BR/errors.lang
    index f2dd85d0117..7b00b4ae4f3 100644
    --- a/htdocs/langs/pt_BR/errors.lang
    +++ b/htdocs/langs/pt_BR/errors.lang
    @@ -29,8 +29,8 @@ ErrorBadDateFormat=O valor '%s' tem o formato de data errada
     ErrorWrongDate=A data não está correta!
     ErrorFailedToWriteInDir=Houve uma falha ao escrever no diretório %s
     ErrorFoundBadEmailInFile=Encontrada sintaxis incorreta em email em %s linhas em Arquivo (Exemplo linha %s com email
    -ErrorUserCannotBeDelete=O usuário não pode ser eliminado. Talvez esteja associado a entidades do Dolibarr.
     ErrorFieldsRequired=Alguns campos obrigatórios não foram preenchidos.
    +ErrorSubjectIsRequired=O tópico do email é obrigatório
     ErrorFailedToCreateDir=Error na creação de uma carpeta. Compruebe que 0 usuario del servidor Web tiene derechos de escritura en las carpetas de documentos de Dolibarr. Si 0  parámetro <b>safe_mode</b> está ativo en este PHP, Compruebe que los archivos php dolibarr pertencen ao usuario del servidor Web.
     ErrorNoMailDefinedForThisUser=Nenhum e-mail definido para este usuário
     ErrorFeatureNeedJavascript=Esta funcionalidade requer que o javascript seja ativado para funcionar. Altere isto em Configuração >> Aparência.
    @@ -51,19 +51,14 @@ ErrorNoValueForSelectType=Por favor, escolha uma opção da lista
     ErrorNoValueForCheckBoxType=Por favor, marque uma opção da lista
     ErrorNoValueForRadioType=Por favor, selecione uma opção da lista
     ErrorBadFormatValueList=O valor da lista não pode ter mais de uma vírgula: <u>%s</u>, mas precisa de ao menos uma: chave,valor
    -ErrorFieldCanNotContainSpecialCharacters=O campo <b>%s</b> não deve conter caracteres especiais.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=O campo <b>%s</b> não aceita caracteres especiais, nem letras maiúsculas e não pode conter números apenas.
     ErrorNoAccountancyModuleLoaded=Módulo de Contabilidade não ativado
     ErrorExportDuplicateProfil=Este nome de perfil já existe para este lote de exportação.
     ErrorLDAPSetupNotComplete=A correspondência Dolibarr-LDAP não está completa.
     ErrorLDAPMakeManualTest=foi criado unn Arquivo .ldif na pasta %s. Trate de gastor manualmente este Arquivo a partir da linha de comandos para Obter mais detalles acerca do error.
    -ErrorCantSaveADoneUserWithZeroPercentage=Não é possível salvar uma ação com status "sem começar" se o campo "feito por" estiver preenchido.
    +ErrorCantSaveADoneUserWithZeroPercentage=Não é possível salvar uma ação com "status não iniciado" se o campo "concluído por" também estiver preenchido.
     ErrorRefAlreadyExists=A ref. utilizada para a criação já existe.
    -ErrorRecordHasChildren=Falha na exclusão do registro, uma vez que ele possui dependentes.
    -ErrorRecordIsUsedCantDelete=Não é possível excluir o registro. Ele já é usado por ou integra outro objeto.
     ErrorModuleRequireJavascript=Javascript não deve ser desativado para ter esse recurso funcionando. Para ativar / desativar o Javascript, vá ao menu Home-> Configuração-> Display.
     ErrorPasswordsMustMatch=Deve existir correspondência entre as senhas digitadas
    -ErrorContactEMail=Ocorreu um erro técnico. Por favor, contate o administrador no seguinte e-mail <b>%s</b> e forneça o seguinte código de erro <b>%s</b> em sua mensagem. Ou, se possível, adicione uma foto da tela - print screen.
     ErrorWrongValueForField=Valor errado para o número do <b>campo% s</b> (valor <b>'% s'</b> não corresponde <b>regra% s)</b>
     ErrorFieldValueNotIn=Valor errado para o número de campo <b>%s</b> (valor '<b>%s</b>' não é um valor disponível no campo <b>%s</b> da tabela <b>%s</b>)
     ErrorFieldRefNotIn=Valor errado para o número do <b>campo% s</b> (valor <b>'% s'</b> não é <b>um% s</b> ref existente)
    @@ -76,7 +71,7 @@ ErrorBadMaskFailedToLocatePosOfSequence=Erro, máscara sem número de sequência
     ErrorBadMaskBadRazMonth=Erro, valor de redefinição ruim
     ErrorMaxNumberReachForThisMask=Número máximo de alcance para essa máscara
     ErrorCounterMustHaveMoreThan3Digits=Contador deve ter mais de 3 dígitos
    -ErrorDeleteNotPossibleLineIsConsolidated=Não e possívelexcluir porque registro está ligada a uma transação bancária que está conciliada
    +ErrorDeleteNotPossibleLineIsConsolidated=Excluir não é possível porque o registro está vinculado a uma transação bancária conciliada
     ErrorProdIdAlreadyExist=%s é atribuído a outro terço
     ErrorFailedToSendPassword=Houve uma falha no envio da senha
     ErrorForbidden=Acesso negado. <br> Você tenta acessar a uma página, área ou característica de um módulo desativado ou sem estar em uma sessão autenticada ou que não é permitido para o usuário.
    @@ -84,6 +79,7 @@ ErrorForbidden2=Os permissões para este usuário podem ser designados por o adm
     ErrorForbidden3=Dolibarr não parece funcionar em uma Sessão autentificada. Consulte a documentação de Instalação de Dolibarr para saber cómo administrar as autenticaciones (htaccess, mod_auth u outro...).
     ErrorNoImagickReadimage=a função imagick_readimage não está presente nesta Instalação de PHP. a resenha não está pois disponível. Os administradores podem desativar esta separador ao menu configuração - visualização.
     ErrorRecordAlreadyExists=O registro já existe
    +ErrorLabelAlreadyExists=Esta etiqueta já existe
     ErrorCantReadFile=Houve uma falha ao ler o arquivo '%s'
     ErrorCantReadDir=Houve uma falha ao ler o diretório '%s'
     ErrorBadLoginPassword=Identificadores de usuário o senha incorretos
    @@ -99,6 +95,7 @@ ErrorWebServerUserHasNotPermission=A conta de usuário <b>%s</b> usada para exec
     ErrorNoActivatedBarcode=Nenhum tipo de código de barras foi ativado
     ErrUnzipFails=Houve uma falha ao descompactar %s com ZipArchive
     ErrorFileMustBeADolibarrPackage=O arquivo %s deve ser um pacote zipado do Dolibarr
    +ErrorModuleFileRequired=Você deve selecionar um arquivo de pacote do módulo Dolibarr
     ErrorPhpCurlNotInstalled=O PHP CURL não está instalado, isto é essencial para conversar com Paypal
     ErrorFailedToAddToMailmanList=Falha ao adicionar registro% s para% s Mailman lista ou base SPIP
     ErrorFailedToRemoveToMailmanList=Falha ao remover registro% s para% s Mailman lista ou base SPIP
    @@ -113,7 +110,6 @@ ErrorWarehouseMustDiffers=A conta origem e destino devem ser diferentes
     ErrorBadFormat=Formato ruim!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Erro, este membro não está ainda conectado a qualquer terceiro. Conectar o membro a um terceiro existente ou criar um novo terceiro antes de criar uma assinatura com fatura.
     ErrorThereIsSomeDeliveries=Erro, há algumas entregas ligados a este envio. Supressão recusou.
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Não e possivel cancelar o pagamento condiviso para pelo menos uma fatura com estado Pago
     ErrorPriceExpression1=Não é possível atribuir a constante %s'
     ErrorPriceExpression2=Não é possível redefinir a função built-in '%s'
     ErrorPriceExpression3=variavel não definida '%s' na definição de função
    @@ -122,7 +118,6 @@ ErrorPriceExpression5=Inesperado '%s'
     ErrorPriceExpression6=Número errado de argumentos (fornecidos %s, esperados %s)
     ErrorPriceExpression8=Operador Inesperado '%s'
     ErrorPriceExpression9=Ocorreu um erro inesperado
    -ErrorPriceExpression10=Iperator '%s' não tem operando
     ErrorPriceExpression11=Esperando '%s'
     ErrorPriceExpression14=Divisão por zero
     ErrorPriceExpression17=Variável não definida '%s'
    @@ -143,13 +138,16 @@ ErrorGlobalVariableUpdater4=Cliente SOAP falhou com o erro '%s'
     ErrorGlobalVariableUpdater5=Nenhuma variável global selecionado
     ErrorFieldMustBeANumeric=O campo <b>%s</b> deve ser um valor numérico
     ErrorMandatoryParametersNotProvided=Parâmetro (s) de preenchimento obrigatório não fornecidas
    -ErrorOppStatusRequiredIfAmount=Você define um montante estimado para esta oportunidade/vantagem. Assim, você também deve inserir seu estado
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Má definição da matriz Menu No Módulo Descritor (mau valor para fk_menu chave)
     ErrorSavingChanges=Ocorreu um erro ao salvar as alterações
     ErrorWarehouseRequiredIntoShipmentLine=É exigido um armazém na linha para a remessa
     ErrorFileMustHaveFormat=O arquivo deve ter o formato %s
     ErrorsThirdpartyMerge=Falha em mesclar os dois registros. Solicitação cancelada.
     ErrorModuleNotFound=O arquivo do módulo não foi encontrado.
    +ErrorTaskAlreadyAssigned=Tarefa já atribuída ao usuário
    +ErrorNoWarehouseDefined=Erro, nenhum armazém definido.
    +ErrorTooManyErrorsProcessStopped=Muitos erros. Processo foi parado.
    +ErrorOnlyInvoiceValidatedCanBeSentInMassAction=Somente faturas validadas podem ser enviadas usando a ação em massa "Enviar por e-mail".
     WarningPasswordSetWithNoAccount=A senha foi definida para esse membro. No entanto, nenhuma conta de usuário foi criada. Portanto, esta senha é armazenada, mas não pode ser usado para acessar Dolibarr. Ele pode ser usado por um módulo / interface externa, mas se você não precisa definir qualquer login nem palavra-passe para um membro, você pode desabilitar a opção "Gerenciar um login para cada membro" da configuração do módulo-Membro. Se você precisa para gerenciar um login, mas não precisa de qualquer senha, você pode manter este campo em branco para evitar este aviso. Nota: E-mail pode também ser utilizado como uma entre o membro se está ligado a um utilizador.
     WarningMandatorySetupNotComplete=Há parâmetros de configuração obrigatórios ainda não definidos
     WarningSafeModeOnCheckExecDir=Atenção, a opção PHP <b>safe_mode</b> está em modo de comando devem ser armazenados dentro de um diretório declarado pelo php parâmetro <b>safe_mode_exec_dir.</b>
    @@ -157,9 +155,7 @@ WarningBookmarkAlreadyExists=já existe um marcador com este título o esta URL.
     WarningPassIsEmpty=Atenção: a senha da base de dados está vazia. Esto é buraco na segurança. deve agregar uma senha e a sua base de dados e alterar a sua Arquivo conf.php para reflejar esto.
     WarningConfFileMustBeReadOnly=Atenção, o seu arquivo de configuração <b>(htdocs / conf / conf.php)</b> pode ser substituído pelo servidor web. Esta é uma falha de segurança grave. Modificar permissões em arquivos para estar no modo de somente leitura para usuário do sistema operacional utilizado pelo servidor web. Se você usa o formato Windows e FAT para o seu disco, você deve saber que este sistema de arquivos não permite adicionar permissões em arquivos, por isso não pode ser completamente seguro.
     WarningsOnXLines=Advertências sobre registro de <b>origem% s</b> (s)
    -WarningNoDocumentModelActivated=Não existe um modelo, para a geração de documentos, foi ativado. A modelo será escolhida por padrão até que você verifique a sua configuração do módulo.
     WarningLockFileDoesNotExists=Atenção, uma vez que a instalação estiver concluída, você deve desabilitar a instalação / migrar ferramentas, adicionando um <b>install.lock</b> arquivo no <b>diretório% s.</b> Faltando este arquivo é uma falha de segurança.
    -WarningUntilDirRemoved=Esta alerta seguirá ativa mientras a pasta exista (alerta visivel para Os Usuários admin somente).
     WarningCloseAlways=Atenção, o fechamento é feito mesmo se o valor difere entre elementos de origem e de destino. Ative esse recurso com cautela.
     WarningUsingThisBoxSlowDown=Atenção, utilizando esta caixa de abrandar a sério todas as páginas que mostram a caixa.
     WarningClickToDialUserSetupNotComplete=Configuração de informações ClickToDial para o usuário não são completas (ver guia ClickToDial no seu cartão de usuário).
    @@ -168,3 +164,4 @@ WarningPaymentDateLowerThanInvoiceDate=A data de pagamento (%s) é anterior a da
     WarningTooManyDataPleaseUseMoreFilters=Dados em demasia (mais de %s linhas). Por favor, utilize mais filtros ou defina a constante %s para um limite maior.
     WarningSomeLinesWithNullHourlyRate=Algumas vezes foram registrados por alguns usuários enquanto sua taxa por hora não foi definida. Um valor de 0 %s por hora foi usado, mas isto pode resultar em uma valoração errada do tempo gasto.
     WarningYourLoginWasModifiedPleaseLogin=O seu login foi modificado. Por questões de segurança, você terá de autenticar-se com o seu novo login antes da próxima ação.
    +WarningDateOfLineMustBeInExpenseReportRange=Atenção, a data da linha não está no intervalo do relatório de despesas
    diff --git a/htdocs/langs/pt_BR/help.lang b/htdocs/langs/pt_BR/help.lang
    index 8f53e3087e9..d5a3bb13944 100644
    --- a/htdocs/langs/pt_BR/help.lang
    +++ b/htdocs/langs/pt_BR/help.lang
    @@ -13,9 +13,6 @@ Efficiency=eficiência
     TypeHelpOnly=Somente ajuda
     TypeHelpDev=Ajuda+Desenvolvimento
     TypeHelpDevForm=Ajuda+Desenvolvimento+Formação
    -ToGetHelpGoOnSparkAngels1=Algumas empresas podem prover um suporte online rápido (às vezes imediato) e mais eficiente ao assumirem o controle de seu computador. Tais ajudantes podem ser encontrados na página <b>%s</b>:
    -ToGetHelpGoOnSparkAngels3=Você também pode acessar a lista de todos os treinadores disponíveis para o Dolibarr, para isto clique no botão
    -ToGetHelpGoOnSparkAngels2=Às vezes, não há nenhuma empresa disponível no momento de fazer sua pesquisa, por isso acho que para mudar o filtro para procurar "tudo disponibilidade". Você será capaz de enviar mais pedidos.
     BackToHelpCenter=Caso contrário, clique aqui para ir para trás para ajudar a home page .
     LinkToGoldMember=Você pode ligar para um dos técnicos pré-selecionada por Dolibarr para o seu idioma, clicando em seu Widget (status e preço máximo são atualizados automaticamente):
     PossibleLanguages=Os idiomas suportados
    diff --git a/htdocs/langs/pt_BR/interventions.lang b/htdocs/langs/pt_BR/interventions.lang
    index dafe7ffb001..4125e31db0d 100644
    --- a/htdocs/langs/pt_BR/interventions.lang
    +++ b/htdocs/langs/pt_BR/interventions.lang
    @@ -1,8 +1,10 @@
     # Dolibarr language file - Source file is en_US - interventions
     InterventionCard=Ficha de Intervenção
    +NewIntervention=Nova Intervenção
     AddIntervention=Criar Intervenção
     ActionsOnFicheInter=Açoes na intervençao
     InterventionContact=Contato Intervenção
    +ValidateIntervention=Confirmar Intervenção
     ModifyIntervention=Modificar intervençao
     ConfirmDeleteIntervention=Você tem certeza que deseja excluir esta intervenção?
     ConfirmValidateIntervention=Você tem certeza que deseja validar esta intervenção sob o nome <b>%s</b>?
    @@ -29,8 +31,6 @@ UseServicesDurationOnFichinter=duração de uso de serviços para intervenções
     UseDurationOnFichinter=Esconde o campo de duração para os registros de intermediações
     UseDateWithoutHourOnFichinter=Oculta horas e minutos fora do campo de data para registros de intermediação
     InterventionStatistics=Estatística de intervenções
    -NbOfinterventions=Nº de fichas de intervenção
    -NumberOfInterventionsByMonth=Nº de fichas de intervenção por mês (data de validação)
     AmountOfInteventionNotIncludedByDefault=A quantidade de intervenção não é incluída por padrão no lucro (na maioria dos casos, as planilhas de tempo são usadas para contar o tempo gasto). Adicione a opção PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT para 1 em home-setup-other para incluí-los.
     InterId=ID de intervenção
     InterRef=Intervenção ref.
    diff --git a/htdocs/langs/pt_BR/main.lang b/htdocs/langs/pt_BR/main.lang
    index 68f99b64b5e..f1bbc1a1ac8 100644
    --- a/htdocs/langs/pt_BR/main.lang
    +++ b/htdocs/langs/pt_BR/main.lang
    @@ -20,6 +20,7 @@ FormatDateHourSecShort=%d/%m/%Y %I:%M:%S %p
     FormatDateHourTextShort=%d %b, %Y, %I:%M %p
     FormatDateHourText=%d %B, %Y, %I:%M %p
     DatabaseConnection=Login à Base de Dados
    +NoTemplateDefined=Nenhum modelo disponível para este tipo de email
     NoRecordFound=Nenhum registro encontrado
     NoRecordDeleted=Nenhum registro foi deletado
     NotEnoughDataYet=Sem dados suficientes
    @@ -33,13 +34,9 @@ ErrorLogoFileNotFound=O arquivo logo '%s' não se encontra
     ErrorGoToGlobalSetup=Vai ao 'Empresa/Oragnisacao' configuracao para resolver isto
     ErrorFailedToSendMail=Erro ao envio do e-mail (emissor
     ErrorFileNotUploaded=O arquivo não foi possível transferir
    -ErrorYourCountryIsNotDefined=O seu país não está definido. corrija indo a Configuração-Geral-Editar
    -ErrorRecordIsUsedByChild=Impossível de suprimir este registo. Esta sendo utilizado como pai pelo menos em um registo filho.
    +ErrorWrongHostParameter=Parâmetro Servidor inválido
     ErrorWrongValue=Valor incorreto
     ErrorWrongValueForParameterX=Valor incorreto para o parâmetro %s
    -ErrorServiceUnavailableTryLater=Serviço não disponível no momento. Tente novamente mais tarde.
    -ErrorSomeErrorWereFoundRollbackIsDone=Foram encontrados alguns erros. Alterações revertidas.
    -ErrorConfigParameterNotDefined=O parâmetro <b>%s</b> não está definido ao arquivo de configuração Dolibarr <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Impossível encontrar o usuário <b>%s</b> na base de dados do Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Erro, nenhum tipo de ICMS definido para o país '%s'.
     ErrorNoSocialContributionForSellerCountry=Erro, nenhum tipo de imposto social / fiscal definidos para o país '%s'.
    @@ -52,9 +49,9 @@ ClickHere=Clickque aqui
     BackgroundColorByDefault=Cor do fundo padrão
     FileRenamed=O arquivo foi renomeado com sucesso
     FileGenerated=O arquivo foi gerado com sucesso
    +FileSaved=O arquivo foi salvo com sucesso
     FileUploaded=O arquivo foi carregado com sucesso
     FileWasNotUploaded=O arquivo foi selecionado, mas nao foi ainda enviado. Clique no "Anexar arquivo" para proceder.
    -NbOfEntries=Nr. de entradas
     GoToWikiHelpPage=Ler a ajuda online (necessário acesso a Internet)
     GoToHelpPage=Consulte a ajuda (pode necessitar de acesso à internet)
     RecordDeleted=Registro apagado
    @@ -62,6 +59,7 @@ LevelOfFeature=Nível de funções
     DolibarrInHttpAuthenticationSoPasswordUseless=Modo de autenticação do Dolibarr está definido como <b>%s</b> no arquivo de configuração<b>conf.php</b>.<br>Isso significa que o banco de dados das senhas é externo ao Dolibarr, assim mudar este campo, pode não ter efeito.
     PasswordForgotten=Esqueceu a senha?
     SeeAbove=Mencionar anteriormente
    +HomeArea=Inicio
     LastConnexion=Ultima conexao
     PreviousConnexion=último login
     ConnectedOnMultiCompany=Conectado no ambiente
    @@ -75,6 +73,7 @@ PrecisionUnitIsLimitedToXDecimals=Dolibarr está configurado para limitar a prec
     NoFilter=Nenhum filtro
     WarningYouHaveAtLeastOneTaskLate=Atenção, tem um elemento a menos que passou a data de tolerância.
     no=não
    +Home=Inicio
     OnlineHelp=Ajuda online
     PageWiki=Pagina wiki
     MediaBrowser=Navegador de mídia
    @@ -90,7 +89,6 @@ AddLink=Adicionar link
     RemoveLink=Remover o link
     Update=Modificar
     CloseBox=Remover o widget do seu painel de controle
    -ConfirmSendCardByMail=Você realmente quer enviar o conteúdo deste cartão por e-mail para  <b>%s</b>?
     Remove=Retirar
     Resiliate=Concluir
     Validate=Confirmar
    @@ -117,6 +115,7 @@ CurrentValue=Valor atual
     MultiLanguage=Multi Idioma
     RefOrLabel=Ref. da etiqueta
     Model=Template doc
    +DefaultModel=Modelo de documento padrão
     Action=Ação
     About=Acerca de
     NumberByMonth=Numero por mes
    @@ -129,6 +128,7 @@ DateEnd=Data de término
     DateCreationShort=Data Criação
     DateModification=Data Modificação
     DateModificationShort=Data Modif.
    +DateLastModification=Última data de modificação
     DateValidation=Data Validação
     DateDue=Data Vencimento
     DateValue=Data Valor
    @@ -138,6 +138,7 @@ DateOperationShort=Data Op.
     DateLimit=Data Límite
     DateRequest=Data Consulta
     DateProcess=Data Processo
    +RegistrationDate=Data de registro
     UserCreation=Criado por
     UserModification=Alterado por
     UserValidation=Usuario validado
    @@ -206,7 +207,6 @@ Comments=Comentarios
     ActionsToDo=Ações a realizar
     ActionNotApplicable=Não aplicavel
     ActionRunningNotStarted=A Iniciar
    -ActionUncomplete=Imcompleto
     ContactsForCompany=Contatos desta empresa
     ContactsAddressesForCompany=Contatos/Endereços do Cliente ou Fornecedor
     AddressesForCompany=Endereços para este terceiro
    @@ -224,20 +224,14 @@ NotAvailable=Não disponível
     Categories=Tags / categorias
     Category=Tag / categoria
     to=para
    +OtherInformations=Outra informação
     ApprovedBy2=Aprovado pelo (segunda aprovação)
    -LateDesc=O atraso na definição se o registro é tardio ou não, depende da sua configuração. Peça ao seu Administrador para alterar o atraso no menu Início - Configuração - Alertas.
    +ByUsers=Pelo usuário
     DeletePicture=Apagar foto
     ConfirmDeletePicture=Confirmar eliminação de fotografias
     LoginEmail=Usuario (email)
     LoginOrEmail=Usuraio ou Email
     CurrentLogin=Login atual
    -FebruaryMin=Fev
    -AprilMin=Abr
    -MayMin=Mai
    -AugustMin=Ago
    -SeptemberMin=Set
    -OctoberMin=Out
    -DecemberMin=Dez
     MonthShort02=Fev
     MonthShort04=Abr
     MonthShort05=Mai
    @@ -278,9 +272,8 @@ MoveBox=Widget de movimento
     NotEnoughPermissions=Não tem permissões para esta ação
     Receive=Recepção
     CompleteOrNoMoreReceptionExpected=Completo nada mais a fazer
    -YouCanSetDefaultValueInModuleSetup=Você pode definir o valor padrão usado quando da criação de um novo registro na configuração do módulo
     UploadDisabled=Carregamento Desativada
    -CurrentUserLanguage=Idioma atual
    +ThisLimitIsDefinedInSetup=Límite Dolibarr (menu inicio-configuração-segurança): %s Kb, PHP limit: %s Kb
     CurrentTheme=Tema atual
     CurrentMenuManager=Administração do menu atual
     DisabledModules=Módulos desativados
    @@ -292,12 +285,9 @@ PDFMerge=Fusão de PDF
     Merge=Fusão
     PrintContentArea=Mostrar pagina a se imprimir na area principal
     MenuManager=Administração do menu
    -WarningYouAreInMaintenanceMode=Atenção, voce esta no modo de manutenção, somente o login <b>%s</b> tem permissões para uso da aplicação no momento.
     CreditCard=Cartão de credito
     CreditOrDebitCard=Cartao de credito ou debito
     FieldsWithAreMandatory=Campos com <b>%s</b> são obrigatorios
    -FieldsWithIsForPublic=Campos com <b>%s</b> são mostrados na lista publica de membros. Se não deseja isto, deselecione a caixa "publico".
    -AccordingToGeoIPDatabase=(conforme a convenção GeoIP)
     NotSupported=Não suportado
     RequiredField=Campo obrigatorio
     ValidateBefore=Precisa de um cartão valido antes de usar esta função
    @@ -327,7 +317,7 @@ ByMonth=Por mes
     ByDay=Por día
     BySalesRepresentative=Por vendedor representante
     LinkedToSpecificUsers=Conectado com um contato particular do usuario
    -AdminTools=Ferram. admin.
    +AdminTools=Ferramentas de administração
     ModulesSystemTools=Ferramentas de modulos
     NoPhotoYet=Sem fotos disponiveis no momento
     Dashboard=Painel de Controle
    @@ -346,7 +336,6 @@ PublicUrl=URL pública
     AddBox=Adicionar caixa
     PrintFile=Imprimir arquivo %s
     ShowIntervention=Mostrar intervençao
    -GoIntoSetupToChangeLogo=Vá para casa - Configuração - Empresa de mudar logotipo ou ir para casa - Setup - Display para esconder.
     Denied=Negado
     Gender=Gênero
     ViewList=Exibição de lista
    @@ -355,8 +344,6 @@ DeleteLine=Apagar linha
     ConfirmDeleteLine=Você tem certeza que deseja excluir esta linha?
     MassFilesArea=Área para os arquivos gerados pelas ações em massa
     ShowTempMassFilesArea=Exibir área dos arquivos gerados pelas ações em massa
    -ConfirmMassDeletion=Confirmar deleite em massa
    -ConfirmMassDeletionQuestion=Voce tem certeza que quer apagar o %s registro selecionado ?
     RelatedObjects=Objetos Relacionados
     ClassifyBilled=Classificar Faturado
     ClassifyUnbilled=Classificar nao faturado
    @@ -373,7 +360,6 @@ Fiscalyear=Ano fiscal
     WebSite=Web Site
     WebSites=Sites web
     WebSiteAccounts=Contas do site
    -EMailTemplates=Modelos de E-mails
     Saturday=Sabado
     SaturdayMin=Sab
     SetRef=Escolher referência
    @@ -390,4 +376,4 @@ SearchIntoCustomerShipments=Remessas do cliente
     CommentLink=Comentarios
     CommentPage=Espaço para comentarios
     Everybody=A todos
    -PayedBy=Pago de
    +PayedBy=Pago por
    diff --git a/htdocs/langs/pt_BR/members.lang b/htdocs/langs/pt_BR/members.lang
    index 8c6f4f2bd83..c75a753181a 100644
    --- a/htdocs/langs/pt_BR/members.lang
    +++ b/htdocs/langs/pt_BR/members.lang
    @@ -97,5 +97,4 @@ MembersByNature=Esta tela mostrará estatísticas por natureza de usuários.
     MembersByRegion=Esta tela mostrará estatísticas sobre usuários por região.
     VATToUseForSubscriptions=Taxa de VAT para utilizar as assinaturas
     NoVatOnSubscription=Não TVA para assinaturas
    -MEMBER_PAYONLINE_SENDEMAIL=E-mail para usar para alerta e-mail quando Dolibarr receber uma confirmação de um pagamento validado por uma assinatura (Exemplo: paymentdone@example.com)
     ADHERENT_PRODUCT_ID_FOR_SUBSCRIPTIONS=Produto utilizado para a linha de assinatura em nota fiscal: %s
    diff --git a/htdocs/langs/pt_BR/other.lang b/htdocs/langs/pt_BR/other.lang
    index 25a7ab19281..ef616aa7c2c 100644
    --- a/htdocs/langs/pt_BR/other.lang
    +++ b/htdocs/langs/pt_BR/other.lang
    @@ -6,9 +6,6 @@ BirthdayAlertOn=Alerta de aniversário ativo
     BirthdayAlertOff=Alerta de aniversário desativado
     MessageOK=Mensagem na pagina do pagamento validada
     MessageKO=Mensagem na página de retorno de pagamento cancelado
    -Notify_FICHINTER_ADD_CONTACT=Contato adicionado à intervenção
    -Notify_FICHINTER_VALIDATE=Intervenção confirmada
    -Notify_FICHINTER_SENTBYMAIL=Intervenção enviada por e-mail
     Notify_ORDER_VALIDATE=Pedido de cliente confirmado
     Notify_ORDER_SENTBYMAIL=Pedido cliente enviado por e-mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Pedido fornecedor enviado por e-mail
    @@ -16,8 +13,6 @@ Notify_ORDER_SUPPLIER_VALIDATE=Ordem fornecedor registrado
     Notify_ORDER_SUPPLIER_APPROVE=Pedido a fornecedor aprovado
     Notify_ORDER_SUPPLIER_REFUSE=Pedido a fornecedor recusado
     Notify_PROPAL_VALIDATE=Proposta cliente validada
    -Notify_PROPAL_CLOSE_SIGNED=Propal Cliente fechado assinado
    -Notify_PROPAL_CLOSE_REFUSED=Propal Cliente fechado recusou
     Notify_PROPAL_SENTBYMAIL=Proposta comercial enviada por e-mail
     Notify_WITHDRAW_TRANSMIT=Revogação de transmissão
     Notify_WITHDRAW_CREDIT=Revogação de credito
    @@ -25,14 +20,14 @@ Notify_WITHDRAW_EMIT=Revogação de performance
     Notify_COMPANY_SENTBYMAIL=E-mails enviados a partir do cartão de terceiros
     Notify_BILL_VALIDATE=Fatura de cliente confirmada
     Notify_BILL_UNVALIDATE=Fatura de cliente anulada
    -Notify_BILL_PAYED=Fatura cliente paga
     Notify_BILL_CANCEL=Fatura cliente cancelada
     Notify_BILL_SENTBYMAIL=Fatura cliente enviada por e-mail
     Notify_BILL_SUPPLIER_VALIDATE=Fatura fornecedor validada
    -Notify_BILL_SUPPLIER_PAYED=Fatura fornecedor paga
     Notify_BILL_SUPPLIER_SENTBYMAIL=Fatura fornecedor enviada por e-mail
     Notify_BILL_SUPPLIER_CANCELED=Fornecedor fatura cancelada
     Notify_FICHEINTER_VALIDATE=Intervenção validada
    +Notify_FICHINTER_ADD_CONTACT=Contato adicionado à intervenção
    +Notify_FICHINTER_SENTBYMAIL=Intervenção enviada por e-mail
     Notify_SHIPPING_VALIDATE=Envio validado
     Notify_SHIPPING_SENTBYMAIL=Envio enviado por e-mail
     Notify_MEMBER_SUBSCRIPTION=Membro inscrito
    @@ -46,7 +41,6 @@ NbOfAttachedFiles=Número Arquivos/Documentos Anexos
     TotalSizeOfAttachedFiles=Tamanho Total dos Arquivos/Documentos Anexos
     AttachANewFile=Adicionar Novo Arquivo/Documento
     LinkedObject=Arquivo Anexo
    -NbOfActiveNotifications=Número de notificações (nb de e-mails de destinatários)
     DemoDesc=Dolibarr e um ERP/CRM compacto, o qual suporta varios modulos para negocios. Uma demo mostrando todos os modulos nao faz sentido pois este cenario nunca occore (mais de cem modulos disponiveis). Portanto varios perfis de demo estao a disposicao.
     ChooseYourDemoProfil=Escolha o perfil de demonstração que melhor se enquadra nas suas necessidades...
     DemoFundation=Administração de Membros de uma associação
    @@ -80,7 +74,6 @@ AuthenticationDoesNotAllowSendNewPassword=o modo de autentificação de Dolibarr
     EnableGDLibraryDesc=Instale ou ative a biblioteca GD da sua instalação PHP para usar esta opção.
     ProfIdShortDesc=<b>Prof Id %s</b> é uma informação dePendente do país do Fornecedor.<br>Por Exemplo, para o país  <b>%s</b>, é o código <b>%s</b>.
     StatsByNumberOfUnits=Estatisticas para soma das quantidades nos produtos/servicos
    -StatsByNumberOfEntities=Estatisticas numerais das entidades (nr. de faturas, pedidos)
     NumberOfProposals=Numero de propostas
     NumberOfCustomerOrders=Numero de pedidos de clientes
     NumberOfCustomerInvoices=Numero de faturas de clientes
    @@ -91,7 +84,6 @@ NumberOfUnitsCustomerOrders=Numero de unidades nos pedidos dos clientes
     NumberOfUnitsCustomerInvoices=Numero de unidades nas faturas dos clientes
     NumberOfUnitsSupplierOrders=Numero de unidades nos pedidos dos fornecedores
     NumberOfUnitsSupplierInvoices=Numero de unidades nas faturas dos fornecedores
    -EMailTextInterventionAddedContact=Uma nova intervenção %s foi atribuída a você.
     EMailTextInterventionValidated=A intervenção %s foi validada
     EMailTextProposalValidated=A proposta %s foi validada.
     EMailTextOrderValidated=O pedido %s foi validado.
    @@ -102,7 +94,6 @@ ResizeDesc=Insira a nova largura <b>OU</b> o novo peso. A proporção sera manti
     NewHeight=Nova altrua
     NewSizeAfterCropping=Nova dimensao depois do recorte
     DefineNewAreaToPick=Definir nova area na imagem para escolher ( click esquerdo na imagem e depois arastar ate o canto oposto)
    -CurrentInformationOnImage=Esta ferramenta foi desenvolvida para ajuda-lo a redimensionar ou recortar uma imagem. Estas são as informações na imagem editada no momento
     ImageEditor=Editor de imagems
     YouReceiveMailBecauseOfNotification=Voce recebeu esta mensagem porque o seu endereco de e-mail foi adicionado a lista de alvos a ser informados de algums eventos no %s software de %s.
     YouReceiveMailBecauseOfNotification2=Este evento e o seguinte:
    diff --git a/htdocs/langs/pt_BR/paypal.lang b/htdocs/langs/pt_BR/paypal.lang
    index 59af70c7c2e..72be5cc803c 100644
    --- a/htdocs/langs/pt_BR/paypal.lang
    +++ b/htdocs/langs/pt_BR/paypal.lang
    @@ -14,7 +14,6 @@ PaypalModeOnlyPaypal=PayPal apenas
     ONLINE_PAYMENT_CSS_URL=URL opcional de CSS na página de pagamento
     ThisIsTransactionId=Eis o id da transação: <b>%s</b>
     PAYPAL_ADD_PAYMENT_URL=Adicionar URL do pagamento Paypal quando se envia o documento por e-mail
    -YouAreCurrentlyInSandboxMode=No momento você está no %s modo "caixa de areia"
     NewOnlinePaymentFailed=Foi tentado novo pagamento online, mas sem hêxito
     ONLINE_PAYMENT_SENDEMAIL=Endereço e-mail para aviso apos o pagamento (positivo ou nao)
     ReturnURLAfterPayment=Retornar ao URL após o pagamento
    diff --git a/htdocs/langs/pt_BR/projects.lang b/htdocs/langs/pt_BR/projects.lang
    index 3f1f3882f44..a80abe54d73 100644
    --- a/htdocs/langs/pt_BR/projects.lang
    +++ b/htdocs/langs/pt_BR/projects.lang
    @@ -14,7 +14,6 @@ OnlyOpenedProject=Só os projetos abertos são visíveis (projetos em fase de pr
     ClosedProjectsAreHidden=Projetos encerrados não são visíveis.
     TasksPublicDesc=Essa exibição apresenta todos os projetos e tarefas que você tem permissão para ler.
     TasksDesc=Essa exibição apresenta todos os projetos e tarefas (suas permissões de usuário concede-lhe ver tudo).
    -NewProject=Novo projeto
     AddProject=Criar projeto
     DeleteAProject=Excluir um projeto
     DeleteATask=Excluir uma tarefa
    @@ -22,12 +21,9 @@ ConfirmDeleteAProject=Você tem certeza que deseja excluir este projeto?
     ConfirmDeleteATask=Você tem certeza que deseja excluir esta tarefa?
     OpenedProjects=Projetos em andamento
     OpenedTasks=Tarefas em andamento
    -OpportunitiesStatusForOpenedProjects=Montante de oportunidades de projetos abertos de acordo com a situação
    -OpportunitiesStatusForProjects=Montante de oportunidades dos projetos pela situação
     ShowProject=Mostrar projeto
     ShowTask=Mostrar tarefa
     NoProject=Nenhum Projeto Definido
    -NbOfProjects=Nº de projetos
     TimeSpent=Dispêndio de tempo
     TimeSpentByUser=Tempo gasto por usuário
     TimesSpent=Dispêndio de tempo
    @@ -37,7 +33,6 @@ TaskTimeUser=Usuário
     NewTimeSpent=Dispêndio de tempo
     MyTimeSpent=Meu dispêndio de tempo
     TaskDateEnd=Data final da tarefa
    -NewTask=Nova tarefa
     AddTask=Criar tarefa
     Activities=Tarefas/atividades
     MyActivities=Minhas Tarefas/Atividades
    @@ -45,13 +40,6 @@ MyProjectsArea=Minha Área de projetos
     ProgressDeclared=o progresso declarado
     ProgressCalculated=calculado do progresso
     GoToListOfTimeConsumed=Ir para a lista de dispêndios de tempo
    -ListOrdersAssociatedProject=Lista de pedidos do cliente associados ao projeto
    -ListInvoicesAssociatedProject=Lista de faturas do cliente associadas ao projeto
    -ListPredefinedInvoicesAssociatedProject=Lista de temas das faturas associadas ao projeto
    -ListSupplierOrdersAssociatedProject=Lista de pedidos do fornecedor associados ao projeto
    -ListSupplierInvoicesAssociatedProject=Lista de faturas do fornecedor associadas ao projeto
    -ListExpenseReportsAssociatedProject=Lista de relatórios de despesas associadas ao projeto
    -ListDonationsAssociatedProject=Lista de doações associados ao projeto
     ListTaskTimeUserProject=Lista de tempo consumido nas tarefas de projecto
     ActivityOnProjectToday=Atividade no projeto hoje
     ActivityOnProjectYesterday=Atividade de ontem no projeto
    @@ -91,7 +79,6 @@ TaskModifiedInDolibarr=Tarefa %s alterada
     TaskDeletedInDolibarr=Tarefa %s excluída
     OpportunityStatusShort=Est. da oprtnd.
     OpportunityProbabilityShort=Prob. oport.
    -OpportunityAmount=Montante de oportunidades
     OpportunityAmountShort=Montante de oport.
     OpportunityAmountAverageShort=Montante médio de oport.
     OpportunityAmountWeigthedShort=Montante de oport. ponderadas
    @@ -102,8 +89,6 @@ TypeContact_project_task_internal_TASKEXECUTIVE=Tarefa executada
     TypeContact_project_task_external_TASKEXECUTIVE=Tarefa executada
     SelectElement=Selecionar componente
     AddElement=Link para componente
    -DocumentModelBeluga=Modelo de projeto para visão geral objetos ligados
    -DocumentModelBaleine=Modelo de relatório do Projeto para tarefas
     PlannedWorkload=carga horária planejada
     PlannedWorkloadShort=Carga de trabalho
     ProjectMustBeValidatedFirst=O projeto tem que primeiramente ser validado
    @@ -116,20 +101,11 @@ ResourceNotAssignedToProject=Não atribuído ao projeto
     ResourceNotAssignedToTheTask=Não atribuído à tarefa
     AssignTaskToMe=Atribuir tarefa para mim
     ProjectOverview=Visão geral
    -ManageTasks=Use projetos para acompanhar tarefas e tempo
     ManageOpportunitiesStatus=Use projetos para acompanhar leads / opportinuties
    -ProjectNbProjectByMonth=N ° de projetos criados por mês
    -ProjectOppAmountOfProjectsByMonth=Montante de oportunidades no mês
    -ProjectWeightedOppAmountOfProjectsByMonth=Montante de oportunidades ponderadas no mês
    -ProjectOpenedProjectByOppStatus=Projeto/Guia aberto pela situação da oportunidade
     ProjectsStatistics=As estatísticas sobre projetos / leads
     TaskAssignedToEnterTime=Tarefa atribuída. Entrando tempo nesta tarefa deve ser possível.
     IdTaskTime=Horário do ID da tarefa
     YouCanCompleteRef=Se você deseja completar a referência com alguma informação (para usar como filtro de busca), recomenda-se a adição do carácter "-" para separação, desta forma a numeração automática ainda funcionará corretamente para os próximos projetos. Por exemplo: %s-ABC. Você também pode preferir adicionar chaves de busca no rótulo. Mas a melhor prática pode ser adicionar um campo dedicado, também chamado de atributos complementares.
    -OnlyOpportunitiesShort=Somente oportunidades
    -OpenedOpportunitiesShort=Oportunidades em andamento
    -OpportunityTotalAmount=Montante total de oportunidades
    -OpportunityPonderatedAmount=Montante de oportunidades ponderadas
    -OpportunityPonderatedAmountDesc=Montante de oportunidades ponderadas com probalidade
     OppStatusPROSP=Prospecção
    +OppStatusPROPO=Proposta
     OppStatusWON=Ganhou
    diff --git a/htdocs/langs/pt_BR/stocks.lang b/htdocs/langs/pt_BR/stocks.lang
    index 136d2694779..b0ffdcb91e1 100644
    --- a/htdocs/langs/pt_BR/stocks.lang
    +++ b/htdocs/langs/pt_BR/stocks.lang
    @@ -24,7 +24,6 @@ TransferStock=Tranferencia de Estoque
     MassStockTransferShort=Transferência de estoque em massa
     StockMovement=Movimento de estoque
     StockMovements=Movimentações de estoque
    -LabelMovement=Rótulo para a movimentação
     UnitPurchaseValue=Preço unitário de compra
     StockTooLow=Estoque muito baixo
     EnhancedValueOfWarehouses=Valor de estoques
    diff --git a/htdocs/langs/pt_PT/admin.lang b/htdocs/langs/pt_PT/admin.lang
    index 0bd9d6a3970..6bf96e95f1d 100644
    --- a/htdocs/langs/pt_PT/admin.lang
    +++ b/htdocs/langs/pt_PT/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Desenvolvimento
     VersionUnknown=Desconhecida
     VersionRecommanded=Recomendada
     FileCheck=Verificador da integridade dos ficheiros
    -FileCheckDesc=Esta ferramenta permite que você verifique a integridade dos arquivos e a configuração do seu aplicativo, comparando cada arquivo com o oficial. O valor de algumas constantes de configuração também pode ser verificado. Você pode usar essa ferramenta para detectar se alguns arquivos foram modificados por um hacker, por exemplo.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=A integridade dos ficheiros é ajustada rigorosamente conforme a referência.
    -FileIntegrityIsOkButFilesWereAdded=A verificação da integridade dos arquivos passou, no entanto, alguns arquivos novos foram adicionados.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=A verificação da integridade dos ficheiros falhou. Alguns ficheiros foram modificados, removidos ou adicionados.
     GlobalChecksum=Checksum global
     MakeIntegrityAnalysisFrom=Fazer a análise de integridade dos ficheiros de aplicativos a partir de
    @@ -30,32 +30,32 @@ SessionSaveHandler=Utilizador para guardar as sessões
     SessionSavePath=Localização de armazenamento da sessão
     PurgeSessions=Limpeza das sessões
     ConfirmPurgeSessions=Deseja mesmo limpar todas as sessões? Isto irá desassociar todos os utilizadores (exceto você).
    -NoSessionListWithThisHandler=O utilizador para guardar a sessão configurado no seu PHP não permite listar todas as sessões em execução.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Bloquear novas ligações
    -ConfirmLockNewSessions=Tem a certeza que pretende restringir qualquer nova conexão Dolibarr para si? Depois disso, só o utilizador <b>%s</b> poderá ligar.
    -UnlockNewSessions=Remover bloqueio de conexão
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
    +UnlockNewSessions=Remover bloqueio de ligação
     YourSession=A sua sessão
    -Sessions=Sessão de utilizadores
    +Sessions=Sessões dos utilizadores
     WebUserGroup=Utilizador/grupo do servidor da Web
    -NoSessionFound=O seu PHP parece não permitir a listagem das sessões ativas. A diretoria utilizada para guardar as sessões <b>(%s)</b> poderá estar protegida (por exemplo, pelas permissões do SO ou pela diretiva open_basedir PHP ).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Conjunto de carateres  da base de dados para guardar os dados
     DBSortingCharset=Conjunto de carateres da base de dados para ordenar os dados
     ClientCharset=Jogo de caráter Cliente
     ClientSortingCharset=Colação de clientes
     WarningModuleNotActive=O módulo <b>%s</b> deve estar ativado
    -WarningOnlyPermissionOfActivatedModules=Só são mostradas aqui as permissões relacionadas com os módulos ativados. Pode ativar outros módulos em Início->Configuração->Módulos.
    +WarningOnlyPermissionOfActivatedModules=Só são mostradas aqui as permissões relacionadas com os módulos ativados. Pode ativar outros módulos na página de Início-> Configuração-> Módulos.
     DolibarrSetup=Instalar ou atualizar o Dolibarr
     InternalUser=Utilizador interno
     ExternalUser=Utilizador externo
     InternalUsers=Utilizadores internos
     ExternalUsers=Utilizadores externos
     GUISetup=Aparência
    -SetupArea=Área de configuração
    +SetupArea=Configuração
     UploadNewTemplate=Carregar novo(s) modelo(s)
     FormToTestFileUploadForm=Formulário para testar o envio de ficheiro (de acordo com a configuração)
    -IfModuleEnabled=Nota: sim, só é eficaz se <b>módulo %s</b> estiver ativado
    -RemoveLock=Se este existir, remova o ficheiro <b>%s</b> para permitir a utilização da ferramenta de atualização.
    -RestoreLock=Restaure o ficheiro <b>%s</b>, apenas com permissão de só de leitura, para desativar qualquer utilização da ferramenta de atualização.
    +IfModuleEnabled=Nota: sim, só é eficaz se o <b>módulo %s</b> estiver ativado
    +RemoveLock=Remova o ficheiro <b>%s</b> se este existir, para permitir a utilização da ferramenta de atualização.
    +RestoreLock=Restaure o ficheiro <b>%s</b>, apenas com permissão 'só de leitura', para desativar qualquer utilização da ferramenta de atualização.
     SecuritySetup=Configuração de segurança
     SecurityFilesDesc=Defina aqui opções relacionadas com a segurança de ficheiros carregados.
     ErrorModuleRequirePHPVersion=Erro, este módulo requer a versão %s ou superior do PHP
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=O código não pode conter o valor 0
     DisableJavascript=Desativar as funções de Javascript e Ajax (Recomendado para pessoas invisuais ou navegadores de texto)
     UseSearchToSelectCompanyTooltip=Se tiver um grande número de terceiros (> 100 000), pode aumentar a velocidade, configurando a constante COMPANY_DONOTSEARCH_ANYWHERE para 1 em Configuração->Outros. A procura depois será limitada para o início da sequência de carateres.
     UseSearchToSelectContactTooltip=Se você tiver grande número de contactos (> 100 000), você pode aumentar a velocidade, definindo a constante CONTACT_DONOTSEARCH_ANYWHERE para 1 em Configuração -> Outros. A pesquisa será então limitada ao início da sequência de caracteres.
    -DelaiedFullListToSelectCompany=Esperar até que introduza valores no campo antes de carregar a lista de terceiros (isto pode aumentar a performance se você tiver um elevado número de terceiros, mas é menos conveniente)
    -DelaiedFullListToSelectContact=Esperar até que introduza valores no campo antes de carregar a lista de contactos (isto pode aumentar a performance se você tiver um elevado número de contactos, mas é menos conveniente)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Número de carateres para acionar a procura: %s
     NotAvailableWhenAjaxDisabled=Não está disponível quando o Ajax está desativado
     AllowToSelectProjectFromOtherCompany=No documento de um terceiro, pode escolher um projeto associado a outro terceiro
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Pré-visualização não disponível
     ThemeCurrentlyActive=Tema atualmente ativo
     CurrentTimeZone=Zona Horária PHP (servidor)
     MySQLTimeZone=Fuso Horário MySQL (base de dados)
    -TZHasNoEffect=As datas são armazenadas e retornadas pela base de dados como se elas fossem submetidas como sequência de caracteres. O fuso horário tem efeito somente ao usar a função UNIX_TIMESTAMP (que não deve ser usada pelo Dolibarr, portanto a base de dados TZ não deve ter nenhum efeito, mesmo se alterado depois da submissão de dados).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Área
     Table=Tabela
     Fields=Campos
    @@ -111,7 +111,7 @@ NotConfigured=Módulo/Aplicação não configurados
     Active=Ativo
     SetupShort=Config.
     OtherOptions=Outras opções
    -OtherSetup=Outras configurações
    +OtherSetup=Outra Configuração
     CurrentValueSeparatorDecimal=Separador decimal
     CurrentValueSeparatorThousand=Separador dos milhares
     Destination=Destino
    @@ -126,8 +126,8 @@ PHPTZ=Fuso Horário do servidor do PHP
     DaylingSavingTime=Horário de verão
     CurrentHour=Hora do PHP (servidor)
     CurrentSessionTimeOut=Sessão atual expirou
    -YouCanEditPHPTZ=Para definir um fuso horário diferente do PHP (não é necessário), você pode tentar adicionar um ficheiro .htaccess contendo uma linha como esta "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Aviso, ao contrário de outras ecrans, as horas nesta página não estão no seu fuso horário local, mas para o fuso horário do servidor.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Número máximo de linhas para os widgets
    @@ -188,18 +188,18 @@ NoLockBeforeInsert=Nenhum comando de bloqueio em torno de Inserção
     DelayedInsert=Adições com atraso
     EncodeBinariesInHexa=Codificar os campos binários em hexadecimal
     IgnoreDuplicateRecords=Ignorar erros de registos duplicados (INSERT IGNORE)
    -AutoDetectLang=Autodeteção (navegador)
    +AutoDetectLang=Detetar Automático (idioma do navegador)
     FeatureDisabledInDemo=Opção desativada em demo
     FeatureAvailableOnlyOnStable=Funcionalidade apenas disponível em versões estáveis ​​oficiais
    -BoxesDesc=Widgets são componentes que mostram alguma informação, os quais pode adicionar a algumas páginas. Pode escolher entre mostrar a widget ou não selecionando a página alvo e clicar em 'Ativar', ou clicando no caixote do lixo para a desativar.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Só são mostrados os elementos de <a href="%s">módulos ativos</a>.
    -ModulesDesc=Os módulos Dolibarr definem as funcionalidades que estão ativas no programa. Alguns módulos requerem permissões de utilizadores, depois de serem ativados. Clique no botão on/off para ativar o módulo/funcionalidade.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Pode encontrar mais módulos para descarregar noutros sites da internet...
    -ModulesDeployDesc=Se as permissões no seu sistema de ficheiros o permitir, você pode usar esta ferramenta para implementar um módulo externo. O módulo será então visível no separador <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Procurar aplicações/módulos externos
     ModulesDevelopYourModule=Desenvolva as suas próprias aplicações/módulos
    -ModulesDevelopDesc=Pode desenvolver ou encontrar um parceiro para desenvolver por você, o seu módulo personalizado
    -DOLISTOREdescriptionLong=Em vez de ligar o site <a href="https://www.dolistore.com">www.dolistore.com</a> para encontrar um módulo externo, você pode usar esta ferramenta incorporada que tornará a procura no mercado externo para você (pode ser lento, precisa de um acesso à internet) ...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Novo
     FreeModule=Livre
     CompatibleUpTo=Compatível com a versão %s
    @@ -211,8 +211,8 @@ Nouveauté=Novidade
     AchatTelechargement=Comprar / Download
     GoModuleSetupArea=Para implementar/instalar um novo módulo, vá para a área de configuração do Módulo em <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, o mercado oficial para módulos externos Dolibarr ERP/CRM
    -DoliPartnersDesc=Lista de empresas que desenvolvem módulos ou funcionalidades personalizadas (Nota: qualquer pessoa com experiência em programação PHP pode proporcionar o desenvolvimento personalizado para um projeto open source)
    -WebSiteDesc=Indique sites de referência para encontrar mais módulos...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Algumas soluções para desenvolver seu próprio módulo ...
     URL=Hiperligação
     BoxesAvailable=Aplicativos disponíveis
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Não guardar as palavras-passe na base de dados, mas gua
     MainDbPasswordFileConfEncrypted=Palavra-passe da base de dados encriptada no ficheiro conf.php (recomendado: Ativada)
     InstrucToEncodePass=Para que a palavra passe seja codificada no ficheiro <b>conf.php</b>, substitua a linha <br><b>$dolibarr_main_db_pass="...";</b><br>por<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Para que a palavra passe seja descodificada no ficheiro <b>conf.php</b>, substitua a linha <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>por<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protecção e encriptação dos ficheiros PDF criados (recomendado: Desativado, pode provocar problemas na produção de PDFs)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=A proteção de um documento PDF faz com que este esteja disponível para ler e imprimir a partir de qualquer navegador. No entanto, a edição e cópia do documento deixam de ser possíveis. Nota: ao usar esta funcionalidade deixa de ser possível juntar documentos PDFs singulares num único documento PDF global.
     Feature=Funcionalidade
     DolibarrLicense=Licença
    @@ -239,15 +239,15 @@ OfficialWebSiteLocal=Website local (%s)
     OfficialWiki=Documentação Dolibarr na Wiki
     OfficialDemo=Demo online Dolibarr
     OfficialMarketPlace=Mercado externo oficial para os módulos/addons
    -OfficialWebHostingService=Serviços web hosting referenciados (hospedagem na nuvem)
    +OfficialWebHostingService=Serviços de hospedagem na Web referenciados (hospedagem na Nuvem)
     ReferencedPreferredPartners=Parceiros preferidos
     OtherResources=Outros recursos
     ExternalResources=Recursos externos
     SocialNetworks=Redes sociais
     ForDocumentationSeeWiki=Para a documentação de utilizador, programador ou Perguntas Frequentes (FAQ), consulte o wiki do Dolibarr<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Para outras questões, como efectuar as consultas, pode utilizar o forum do Dolibarr:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Esta área permite ajudá-lo a obter um serviço de suporte para o Dolibarr.
    -HelpCenterDesc2=Alguns destes serviços só estão disponíveis em <b>inglês</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Gestor de menu atual
     MeasuringUnit=Unidade de medição
     LeftMargin=Margem esquerda
    @@ -262,32 +262,36 @@ NoticePeriod=Período de aviso
     NewByMonth=Novo por mês
     Emails=Emails
     EMailsSetup=Configuração de emails
    -EMailsDesc=Esta página permite substituir os parâmetros PHP relacionados com o envio de emails. Na maioria dos casos em sistemas operativos Unix/Linux, a configuração PHP está correta e estes parâmetros são inúteis.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Perfis do remetente de e-mails
     MAIN_MAIL_SMTP_PORT=Porta de SMTP/SMTPS (Por predefinição no php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=Servidor SMTP/SMTPS (Por predefinição no php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=Porta do servidor SMTP (Não definido em PHP em sistemas de tipo Unix)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Servidor SMTP/SMTPS (Não definido em PHP em sistemas de tipo Unix)
    -MAIN_MAIL_EMAIL_FROM=Email do emissor para envios email automáticos (Por defeito em php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Remetente de email usado para emails enviados que retornaram erro
    -MAIN_MAIL_AUTOCOPY_TO= Enviar sistematicamente uma cópia carbono de todos os emails enviados para
    -MAIN_DISABLE_ALL_MAILS=Desativar globalmente todo o envio de emails (para fins de teste ou demonstrações)
    +MAIN_MAIL_SMTP_SERVER=Hospedeiro de SMTP/SMTPS (Por predefinição no php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=Hospedeiro de SMTP/SMTPS (Não definido no PHP nos sistemas de tipo Unix)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Enviar todos os e-mails para (em vez de enviar para destinatários reais, para fins de teste)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Adicionar funcionários utilizadores com e-mail à lista de destinatários permitidos
    -MAIN_MAIL_SENDMODE=Método de envio de emails
    -MAIN_MAIL_SMTPS_ID=ID SMTP, se necessário a autenticação
    -MAIN_MAIL_SMTPS_PW=Palavra-passe de SMTP, se necessário a autenticação
    -MAIN_MAIL_EMAIL_TLS= Utilizar criptografia TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS= Utilizar encriptação TLS (STARTTLS)
    -MAIN_DISABLE_ALL_SMS=Desative todos os envios de SMS (para fins de teste ou demonstrações)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Método a usar para enviar SMS
    -MAIN_MAIL_SMS_FROM=Número de telefone predefinido do remetente para envio de SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Email do remetente por predefinição para os envios manuais (E-mail do Utilizador ou da Empresa)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Email do utilizador
     CompanyEmail=E-mail da empresa
     FeatureNotAvailableOnLinux=Funcionalidade não disponivel em sistemas  Unix. Teste parâmetros sendmail localmente.
    -SubmitTranslation=Se a tradução para esta lingua não estiver completa ou se encontrar erros, pode corrigi-los editando os ficheiros no diretório <b>langs/%s</b> e submetendo-os em www.transifex.com/dolibarr-association/dolibarr/
    -SubmitTranslationENUS=Se a tradução para este idioma não estiver completa ou você encontrar erros, você pode corrigir isso editando arquivos em idiomas de diretório <b>langs/ %s </b>e enviar arquivos modificados em dolibarr.org/forum ou para desenvolvedores em github.com/Dolibarr/dolibarr.
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslationENUS=Se a tradução para este idioma não estiver completa ou se encontrar erros, pode corrigi-los editando os ficheiros na diretoria <b>langs/ %s</b> e submeta os ficheiros modificados em dolibarr.org/forum ou para os programadores em github.com/Dolibarr/dolibarr.
     ModuleSetup=Configuração do módulo
     ModulesSetup=Módulos/Aplicação - Configuração
     ModuleFamilyBase=Sistema
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Não utilizar em ambiente de produção
     ThisIsProcessToFollow=Estes são os passos a processar:
     ThisIsAlternativeProcessToFollow=Esta é uma configuração alternativa para processar manualmente:
     StepNb=Passo %s
    -FindPackageFromWebSite=Encontre um pacote que fornece a funcionalidade desejada (por exemplo, na página oficial %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Descarregue o pacote (por exemplo, da página oficial %s).
    -UnpackPackageInDolibarrRoot=Descompactar os ficheiros para a raiz da instalação Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=Para implantar / instalar um módulo externo, descompacte os arquivos empacotados no diretório do servidor dedicado aos módulos:<b>%s</b>
    -SetupIsReadyForUse=A instalação do módulo terminou. No entanto você deve ativar e configurar o módulo na sua aplicação, indo à página de configuração de módulos: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=O diretório raiz alternativo não está definido para um diretório existente.<br>
     InfDirAlt=Desde a versão 3 do Dolibarr que é possível definir um diretório raiz alternativo. Isto permite que você consiga armazenar plug-ins e templates, num diretório dedicado.<br>Para tal basta criar um dirétorio na raiz do Dolibarr (ex: dedicado). <br>
     InfDirExample=<br>Depois declare-o no ficheiro <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>Se estas linhas estiverem comentadas com um "#", descomente-as removendo o caracter "#".
    -YouCanSubmitFile=Para esta etapa, você pode submeter aqui o ficheiro .zip do pacote do módulo:
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Versão atual do Dolibarr
     CallUpdatePage=Vá à página que atualiza a estrutura e dados da base de dados: %s.
     LastStableVersion=Última versão estável
    @@ -327,7 +331,7 @@ LastActivationIP=Último IP ativo
     UpdateServerOffline=Atualizar servidor offline
     WithCounter=Gerir um contador
     GenericMaskCodes=Pode introduzir qualquer máscara numérica. Nesta máscara, pode utilizar as seguintes etiquetas: <br><b>{000000}</b> corresponde a um número que se incrementa em cada um de %s. Introduza um número de zeros idêntico ao comprimento do número que deseja mostrar. O contador completar-se-á a partir de zeros pela esquerda de forma a ter tantos zeros como a máscara. <br><b>{000000+000}</b> igual ao anterior, com uma compensação em algarismos correspondente ao número à direita do sinal + que é aplicada a partir do primeiro %s. <br><b>{000000@x}</b> igual ao anterior, mas o contador volta a zero quando se chega ao mês x (x entre 1 e 12, 0 para usar o primeiros meses do mês fiscal definido na sua configuração, 99 para voltar a zero todos os meses). Se esta opção se utiliza e x é igual ou superior a 2, então a sequência {yy}{mm} ou {yyyy}{mm} também é necessária. <br><b>{dd}</b> días (01 a 31). <br><b>{mm}</b> mês (01 a 12). <br><b>{yy}</b>, <b>{yyyy}</b> ou <b>{y}</b> ano formatado em 2, 4 ou 1 algarismos.<br>
    -GenericMaskCodes2=<b>{cccc}</b> o código do cliente em N caracteres<br><b>{cccc000}</b> o código de cliente em N caracteres, seguido de um contador dedicado ao cliente. Este contador é reiniciado ao mesmo tempo que o contador global.<br><b>{tttt}</b> O código do tipo de terceiro em N caracteres (ver dicionário->Tipos de terceiros).<br>
    +GenericMaskCodes2=<b>{cccc}</b> o código do cliente em N carateres<br><b>{cccc000}</b> o código de cliente em N carateres, seguido de um contador dedicado para o cliente. Este contador é reiniciado ao mesmo tempo que o contador global.<br><b>{tttt}</b> O código do tipo de terceiro em N carateres (consulte o menu Início->Configuração->Dicionário->Tipos de terceiros). Se adicionou esta etiqueta, o contador será diferente para cada tipo de terceiro.<br>
     GenericMaskCodes3=Quaisquer outros caracteres na máscara não sofrerão alterações.<br>Não são permitidos espaços.<br>
     GenericMaskCodes4a=<u>Exemplo no 99º %s de terceiro 'A Empresa', com a data 31-01-2007:</u><br>
     GenericMaskCodes4b=<u>Exemplo sobre um terceiro criado a 31-03-2007:</u><br>
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Consulte a página wiki para obter uma lista completa de todos
     UseACacheDelay= Atraso, em segundos, para o caching de exportação (0 ou em branco para não criar cache)
     DisableLinkToHelpCenter=Ocultar hiperligação <b>"Precisa de ajuda ou apoio"</b> na página de inicio de sessão
     DisableLinkToHelp=Ocultar a hiperligação para a ajuda on-line "<b>%s</b>"
    -AddCRIfTooLong=Não há envolvimento automático, por isso, se estiver fora de linha da página de documentos, por ser demasiado longo, deve adicionar um parágrafo, "Enter", na área de texto.
    -ConfirmPurge=De certeza que quer executar esta limpeza?<br>Isto eliminará definitivamente todos os seus ficheiros de dados sem forma de os recuperar (ficheiros GCE, ficheiros anexados)
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Comprimento mínimo
     LanguageFilesCachedIntoShmopSharedMemory=Ficheiros .lang carregados na memória partilhada
     LanguageFile=Ficheiro de idioma
    -ExamplesWithCurrentSetup=Exemplos com a configuração atual
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Lista de diretórios com modelos OpenDocument
     ListOfDirectoriesForModelGenODT=Lista de diretórios que contêm ficheiros template com formato OpenDocument.<br><br>Digite aqui o caminho completo dos diretórios.<br>Adicione um "Enter" entre cada diratório.<br>Para adicionar um diretório do módulo GCE, adicione aqui <b>DOL_DATA_ROOT/ecm/seudiretorio</b>.<br><br>Ficheiros nesses diretórios têm de acabar com <b>.odt</b> ou <b>.ods</b>.
    -NumberOfModelFilesFound=Número de ficheiros de modelos ODT/ODS encontrados nesses diretórios
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Exemplos de sintaxe: <br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>Para saber como criar os seus modelos de documentos ODT, antes de armazená-los nestes diretórios, leia a documentação no wiki:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Chave para usar Web Services (parâmetro "dolibarrkey" n
     TestSubmitForm=Formulário de teste de introdução
     ThisForceAlsoTheme=Ao utilizar este gestor de menu também vai utilizar o seu tema, independentemente da escolha do utilizador. Para além disso, este gestor de menu especializado em smartphones não funciona em todos os smartphones. Utilize outro gestor de menu se você tiver problemas.
     ThemeDir=Diretório de temas
    -ConnectionTimeout=Tempo limite de conexão
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Tempo limite de resposta
     SmsTestMessage=Mensagem teste de __PHONEFROM__ para __PHONETO__
     ModuleMustBeEnabledFirst=Se precisa desta função, o módulo <b>%s</b> deve ser ativado antes.
     SecurityToken=A chave para URLs seguras
    -NoSmsEngine=Nenhum mecanismo de envio de SMS disponível. Mecanismos de SMS, não são instalados juntamente com a distribuição (porque depende de um fornecedor externo), mas você pode encontrar alguns em %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Você pode definir cada uma das opções globais relacionadas com a criação de PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Regras para criar caixas de endereço
     HideAnyVATInformationOnPDF=Ocultar todas as informações relacionadas com Imposto sobre Vendas / IVA em PDFs gerados
     PDFRulesForSalesTax=Regras para Imposto sobre Vendas / IVA
     PDFLocaltax=Regras para %s
    -HideLocalTaxOnPDF=Ocultar taxa %s na coluna de impostos do PDF
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Ocultar a descrição dos produtos no PDF gerado
     HideRefOnPDF=Ocultar a referência dos produtos no PDF gerado
     HideDetailsOnPDF=Esconder linhas de detalhes do produto no PDF gerado
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parâmetros para tornar URLs seguros
     SecurityTokenIsUnique=Use um parâmetro securekey único para cada URL
     EnterRefToBuildUrl=Digite a referência para o objeto %s
     GetSecuredUrl=Obter URL seguro
    -ButtonHideUnauthorized=Esconder botões de ações não autorizados a utilizadores não administradores, em vez de mostrá-los com cor cinza e desativados.
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Taxa de IVA antiga
     NewVATRates=Nova taxa de IVA
     PriceBaseTypeToChange=Modificar nos preços com valor de referência base definido em
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Lista de selecção
     ExtrafieldSelectList = Selecionar da tabela
     ExtrafieldSeparator=Separador (não um campo)
     ExtrafieldPassword=Palavra Passe
    -ExtrafieldRadio=Radio buttons (apenas em escolha múltipla)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Caixas de marcação
     ExtrafieldCheckBoxFromList=Caixas de marcação da tabela
     ExtrafieldLink=Vincular a um objeto
     ComputedFormula=Campo calculado
     ComputedFormulaDesc=Você pode inserir aqui uma fórmula usando outras propriedades do objeto ou qualquer codificação PHP para obter um valor calculado dinâmico. Você pode usar todas as fórmulas compatíveis com PHP, incluindo o "?" operador de condição e seguinte objeto global: <strong>$db, $conf, $langs, $mysoc, $user, $object.</strong><br><strong>AVISO</strong>: Somente algumas propriedades de $object podem estar disponíveis. Se você precisa de propriedades não carregadas, basta buscar o objeto na sua fórmula, como no segundo exemplo. <br>Usando um campo calculado significa que você não pode entrar qualquer valor da interface. Além disso, se houver um erro de sintaxe, a fórmula pode retornar nada.<br><br> Exemplo de fórmula: <br>$object-> id <10? round ($object-> id / 2, 2): ($object-> id + 2 * $user-> id) * (int) substr($mysoc-> zip, 1, 2) <br><br>Exemplo para recarregar o objeto <br>(($reloadedobj = new Societe ($db)) && ($reloadedobj->fetch($obj-> id? $obj-> id: ($obj-> rowid? $obj->rowid: $object->id)) > 0)) ? $reloadedobj->array_options ['options_extrafieldkey'] * $reloadedobj->capital / 5: '-1'<br><br>Outro exemplo de fórmula para forçar a carga do objeto e seu objeto pai:<br> (($reloadedobj = new Task ($db)) && ($reloadedobj->fetch ($object-> id)> 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj-> fetch($reloadedobj->fk_project)> 0)) ? $secondloadedobj->ref: 'Projeto pai não encontrado'
    -ExtrafieldParamHelpPassword=Manter este campo vazio significa que o valor será armazenado sem ser encriptado (campo deve ser escondido apenas com estrela na tela). <br> Defina aqui o valor 'auto' para usar a regra de encriptação predefinida ao registar palavras-passe na base de dados (o valor lido será o apenas hash, não há maneira de recuperar o valor original)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=A lista de parâmetros tem seguir o seguinte esquema chave,valor (no qual a chave não pode ser '0')<br><br> por exemplo: <br>1,value1<br>2,value2<br>3,value3<br>...<br><br>Para que a lista dependa noutra lista de atributos complementares:<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>Para que a lista dependa doutra lista:<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=A lista de valores tem de seguir o seguinte esquema chave,valor (onde a chave não pode ser '0')<br><br> por exemplo:<br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=A lista de valores tem de seguir o seguinte esquema chave,valor (onde a chave não pode ser '0')<br><br> por exemplo:<br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Hiperligação predefinida
     SetAsDefault=Definir como predefinição
     ValueOverwrittenByUserSetup=Aviso: Este valor pode ter sido modificado pela configuração específica de um utilizador (cada utilizador pode definir o seu próprio link ClickToDial)
     ExternalModule=Módulo externo - Instalado no diretório %s
    -BarcodeInitForThirdparties=Inicialização em massa de códigos de barras para terceiros
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Inicialização ou reposição de códigos de barras em massa para produtos ou serviços
     CurrentlyNWithoutBarCode=Atualmente, você tem o registo <strong>%s</strong> em <strong>%s</strong> %s sem o código de barras definido.
     InitEmptyBarCode=Inicializar o valor para os próximos %s registos vazios
     EraseAllCurrentBarCode=Apagar todos os códigos de barras atuais
     ConfirmEraseAllCurrentBarCode=Tem certeza de que deseja apagar todos os códigos de barras atuais?
     AllBarcodeReset=Todos os códigos de barras foram removidos
    -NoBarcodeNumberingTemplateDefined=Nenhum modelo de numeração de códigos de barras ativo na configuração do módulo "Código de barras".
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Ativar cache de ficheiros
     ShowDetailsInPDFPageFoot=Adicionar mais detalhes no rodapé dos ficheiros PDF, como a morada da sua empresa, ou nomes de gerente (para completar IDs profissionais, capital da empresa e número de IVA).
     NoDetails=Sem mais detalhes no rodapé
     DisplayCompanyInfo=Exibir morada da empresa
     DisplayCompanyManagers=Mostrar nomes dos gestores
     DisplayCompanyInfoAndManagers=Exibir a morada da empresa e menus de gestor
    -EnableAndSetupModuleCron=Se você deseja que esta fatura periódica seja gerada automaticamente, o módulo *1 %s* deve ser habilitado e configurado corretamente. Caso contrário, a geração de faturas deve ser feita manualmente a partir deste modelo com o botão * Criar *. Observe que, mesmo que você tenha ativado a geração automática, você ainda pode iniciar com segurança a geração manual. A geração de duplicatas para o mesmo período não é possível.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Retornar um código de contabilidade vazio.
     ModuleCompanyCodeDigitaria=O código de contabilidade depende do código de terceiros. O código é composto pelo caractere "C" na primeira posição seguida pelos primeiros 5 caracteres do código de terceiros.
    -Use3StepsApproval=Por padrão, as ordens de compra precisam ser criadas e aprovadas por 2 usuários diferentes (um passo / usuário para criar e um passo / usuário para aprovar. Note que, se o usuário tiver permissão para criar e aprovar, um passo / usuário será suficiente) . Você pode solicitar esta opção para introduzir uma terceira etapa / aprovação do usuário, se o valor for superior a um valor dedicado (então serão necessárias 3 etapas: 1 = validação, 2 = primeira aprovação e 3 = segunda aprovação se a quantidade for suficiente). 1 <br>Defina isto como vazio se uma aprovação (2 etapas) for suficiente, ajuste-o para um valor muito baixo (0,1) se uma segunda aprovação (3 etapas) for sempre necessária.
    +Use3StepsApproval=Por padrão, as ordens de compra precisam ser criadas e aprovadas por 2 utilisadores diferentes (um passo / utilisador para criar e um passo / utilisador para aprovar. Note que, se o utilisador tiver permissão para criar e aprovar, um passo / utilisador será suficiente) . Você pode solicitar esta opção para introduzir uma terceira etapa / aprovação do utilisador, se o valor for superior a um valor dedicado (então serão necessárias 3 etapas: 1 = validação, 2 = primeira aprovação e 3 = segunda aprovação se a quantidade for suficiente). 1 <br>Defina isto como vazio se uma aprovação (2 etapas) for suficiente, ajuste-o para um valor muito baixo (0,1) se uma segunda aprovação (3 etapas) for sempre necessária.
     UseDoubleApproval=Utilizar uma aprovação de 3 etapas quando o valor (sem impostos) for superior a...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    -WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
    +WarningPHPMail2=Se o seu serviço de e-mail SMTP restringir o cliente de e-mail a alguns endereços IP (muito raro), utilize o seguinte endereço IP da sua instalação ERP CRM Dolibarr: <strong>%s</strong>.
     ClickToShowDescription=Clique para mostrar a descrição
    -DependsOn=Este módulo depende do(s) módulo(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=Este módulo é necessário para o(s) módulo(s)
    -TheKeyIsTheNameOfHtmlField=Este é o nome do campo HTML. Esta necessidade de ter conhecimentos técnicos para ler o conteúdo da página HTML para obter o nome-chave de um campo.
    -PageUrlForDefaultValues=Você deve inserir aqui a URL relativa da página. Se você incluir parâmetros em URL, os valores padrão serão efetivos se todos os parâmetros estiverem configurados para o mesmo valor. Exemplos:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>Para que o formulário crie um novo treceiro, é<strong>%s</strong>,<br> se você quiser o valor padrão somente se url tiver algum parâmetro, você pode usar<strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>Para a página que lista terceiros, é<strong>%s</strong>, <br>se você quiser o valor padrão somente se url tiver algum parâmetro, você pode usar<strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Permitir o uso de valores predefinidos personalizados
    -EnableOverwriteTranslation=Permitir o uso da tradução substituída
    -GoIntoTranslationMenuToChangeThis=Uma tradução foi encontrada para a chave com este código, então, para alterar esse valor, você deve editá-lo para a tradução do Home-Setup.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Aviso, definir uma ordem de classificação padrão pode resultar em um erro técnico ao entrar na página da lista se o campo for um campo desconhecido. Se você tiver um erro desse tipo, volte para esta página para remover a ordem de classificação padrão e restaurar o comportamento padrão.
     Field=Campo
     ProductDocumentTemplates=Modelos de documento para gerar documento do produto
    @@ -476,16 +480,18 @@ SendEmailsReminders=Envie lembretes da agenda por e-mails
     davDescription=Adicionar um componente para ser um servidor DAV
     DAVSetup=Configuração do módulo DAV
     DAV_ALLOW_PUBLIC_DIR=Ativar o diretório público (diretório WebDav sem necessidade de iniciar sessão)
    -DAV_ALLOW_PUBLIC_DIRTooltip=O diretório público WebDav é um diretório ao qual todos podem aceder (no modo de leitura e escrita), sem necessidade de ter/usar uma conta de login/senha existente.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Utilizadores e grupos
    +Module0Name=Utilizadores e Grupos
     Module0Desc=Gestão de Utilizadores / Funcionários e Grupos
     Module1Name=Terceiros
     Module1Desc=Gestão de terceiros (empresas, particulares) e contactos
     Module2Name=Comercial
     Module2Desc=Gestão comercial
     Module10Name=Contabilidade
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Orçamentos
     Module20Desc=Gestão de orçamentos
     Module22Name=Emails em massa
    @@ -511,13 +517,13 @@ Module52Desc=Gestão de stocks (produtos)
     Module53Name=Serviços
     Module53Desc=Gestão de serviços
     Module54Name=Contractos/Subscrições
    -Module54Desc=Gestão de contractos (serviços ou subscrições periódicas)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Códigos de barras
     Module55Desc=Gestão dos códigos de barras
     Module56Name=Central telefónica
     Module56Desc=Gestão de central telefónica
     Module57Name=Ordens de pagamento por débito direto
    -Module57Desc=Gestão de ordens de pagamento por débito direto. Inclui a produção de ficheiros SEPA para países europeus.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integração com um sistema ClickToDial (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Notas de despesas e deslocações
     Module75Desc=Gestão das notas de despesas e deslocações
     Module80Name=Expedições
     Module80Desc=Gestão de expedições e notas de encomenda
    -Module85Name=Bancos e caixas
    +Module85Name=Bancos e Caixa
     Module85Desc=Gestão das contas financeiras ou contas bancárias (prazo ou efetivo)
    -Module100Name=Página externa
    -Module100Desc=Incluir página externa no menu e visualizá-la a partir do Dolibarr
    +Module100Name=Site Externo
    +Module100Desc=Adicionar uma hiperligação do site da Web externo nos menus do Dolibarr para a ver na estrutura do Dolibarr
     Module105Name=Mailman e SPIP
     Module105Desc=Interface Mailman ou SPIP para módulo membro
     Module200Name=LDAP
    -Module200Desc=Sincronização de diretórios com LDAP
    +Module200Desc=Sincronização da diretoria LDAP
     Module210Name=PostNuke
     Module210Desc=Integração com PostNuke
     Module240Name=Exportações de dados
    -Module240Desc=Ferramenta para exportação dos dados do Dolibarr
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Importação de dados
    -Module250Desc=Ferramenta para importação dos dados do Dolibarr
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Membros
     Module310Desc=Gestão de membros de uma fundação
     Module320Name=Feed RSS
     Module320Desc=Adicionar feed RSS às páginas Dolibarr
    -Module330Name=Marcadores
    -Module330Desc=Gestão de marcadores
    -Module400Name=Projetos/Oportunidades/Leads
    -Module400Desc=Gestão de projetos, oportunidades e/ou tarefas. Também pode atribuir qualquer elemento (fatura, encomenda, orçamento, intervenção, ...) a um projeto e obter uma visão transversal do projeto.
    +Module330Name=Marcadores e atalhos
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Integração com Webcalendar
     Module500Name=Impostos e Despesas especiais
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Pagamento dos salários dos empregados
    -Module510Desc=Registe e dê seguimento aos pagamentos dos salários dos seus funcionários
    +Module510Desc=Record and track employee payments
     Module520Name=Empréstimo
     Module520Desc=Gestão de empréstimos
     Module600Name=Notificações sobre eventos comerciais
    -Module600Desc=Envio de Email de notificação (desactiva para alguns eventos de negocio) para utilisadores (na configuração define-se cada usuário), para os contactos dos terceiros (na configuração define-se os terceiros) ou os emails defenidos.
    -Module600Long=Observe que este módulo é dedicado a enviar emails em tempo real quando ocorre um evento comercial dedicado. Se você está procurando um recurso para enviar lembretes por e-mail de seus eventos da agenda, entre na configuração do módulo Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Variantes de produtos
    -Module610Desc=Permite a criação de variante de produtos com base em atributos (cor, tamanho, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donativos
     Module700Desc=Gestão de donativos
     Module770Name=Relatórios de despesas
    -Module770Desc=Gestão e reivindicação de relatórios de despesas (deslocação, refeição, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Orçamentos de fornecedor
     Module1120Desc=Solicitar orçamento e preços do fornecedor
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Produção do documento da emails em massa
     Module1780Name=Etiquetas/Categorias
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=Editor WYSIWYG
    -Module2000Desc=Permitir a edição de texto utilizando um editor avançado (baseado no CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Preços dinâmicos
     Module2200Desc=Permitir a utilização de expressões matemáticas para os preços
     Module2300Name=Tarefas agendadas
     Module2300Desc=Gestão de trabalhos agendados (alias cron ou tabela chrono)
     Module2400Name=Eventos/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=SGD / GEC
     Module2500Desc=Sistema de Gestão de Documentos / Gestão de Conteúdo Eletrónico. Organização automática dos seus documentos gerados ou armazenados. Compartilhe-os quando precisar.
     Module2600Name=Serviços API/Web (servidor SOAP)
    @@ -590,16 +596,16 @@ Module2600Desc=Ativar o servidor SOAP do Dolibarr, fornecendo serviços API
     Module2610Name=Serviços API/Web (servidor REST)
     Module2610Desc=Ativar os serviços API do servidor REST do Dolibarr
     Module2660Name=Serviços Web de chamada (cliente SOAP)
    -Module2660Desc=Ativar o cliente de serviços web Dolibarr (pode ser usado para enviar dados/pedidos a servidores externos. Suporta apenas encomendas a fornecedores de momento)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Usar o serviço online Gravatar (www.gravatar.com) para mostrar as fotos dos utilizadores/membros (que encontrar nos seus e-mails). Necessita de um acesso à Internet
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=Cliente FTP
     Module2900Name=GeoIPMaxmind
     Module2900Desc=Capacidades de conversões GeoIP Maxmind
     Module3100Name=Skype
    -Module3100Desc=Adicionar um botão Skype nas fichas dos usuários/terceiros/contactos/membros
    +Module3100Desc=Adicionar um botão Skype nas fichas dos utilisador/terceiros/contactos/membros
     Module3200Name=Arquivos inalteráveis
    -Module3200Desc=Ativar o registo de alguns eventos em registos inalteráveis. Os eventos são arquivados em tempo real. O registo é uma tabela de eventos encadeados que podem ser lidos somente e exportados. Este módulo pode ser obrigatório para alguns países.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=GRH
     Module4000Desc=Gestão de recursos humanos (gestão de departamento e contratos de funcionários)
     Module5000Name=Multiempresa
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Sites da Web
     Module10000Desc=Crie sites públicos com um editor WYSIWYG. Basta configurar seu servidor web (Apache, Nginx, ...) para apontar para o diretório Dolibarr dedicado para tê-lo online na Internet com seu próprio nome de domínio.
     Module20000Name=Gestão de pedidos de licença
    -Module20000Desc=Declarar e seguir os pedidos de licença dos funcionários
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Lotes de produtos
     Module39000Desc=Gestão de produtos por lotes ou números de série
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Modulo que permite pagina online de pagamento com cartões de crédito/débito via PayBox. Pode ser utilisado para permitir ao cliente para fazer pagamentos libre ou pagamentos ligados a objetos do Dolibarr (faturas, encomendas, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Ponto de vendas
     Module50100Desc=Modúlo de ponto de vendas (POS).
    +Module50150Name=Ponto de vendas
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Modulo que permite pagina online de pagamento aceitando pagamentos utilisando PayPal (cartões de crédito ou crédito PayPal). Pode ser utilisado para permitir ao cliente para fazer pagamentos libre ou pagamentos ligados a objetos do Dolibarr (faturas, encomendas, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Contabilidade (avançada)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=impressão direta (sem abrir os documentos) usando a interface Cups IPP (A impressora deve ser visível a partir do servidor, e o CUPS deve estar instalado no servidor).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Votação ou Questionário
    -Module55000Desc=Módulo para fazer votações ou questionários online (como Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margens
     Module59000Desc=Módulo para gerir margens
     Module60000Name=Comissões
     Module60000Desc=Módulo para gerir comissões
    -Module62000Name=Incoterm
    -Module62000Desc=Adione funções para gerir Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Recursos
     Module63000Desc=Gerir recursos (impressoras, carros, ...) que pode partilhar em eventos
     Permission11=Consultar faturas a clientes
    @@ -651,9 +661,9 @@ Permission32=Criar/Modificar produtos
     Permission34=Eliminar produtos
     Permission36=Ver/Gerir produtos ocultos
     Permission38=Exportar produtos
    -Permission41=Consultar projetos e tarefas (projetos partilhados e projetos nos quais sou contacto). Permite também introduzir tempo consumido em tarefas atribuídas (folha de tempo)
    -Permission42=Criar/modificar projetos (projetos partilhados e projetos nos quais sou contacto). Permite também criar tarefas e atribuir utilizadores a projetos e tarefas
    -Permission44=Eliminar projectos (projetos partilhados e projetos dos quais sou contacto)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Exportar projetos
     Permission61=Consultar intervenções
     Permission62=Criar/Modificar intervenções
    @@ -686,7 +696,7 @@ Permission109=Eliminar envios
     Permission111=Consultar contas financeiras (contas bancárias, caixas)
     Permission112=Criar/modificar/eliminar e comparar trasações
     Permission113=Configurar as contas ficnanceiras (criar, gerir categorias)
    -Permission114=Reconciliar transações
    +Permission114=Reconcile transactions
     Permission115=Exportar transacções e extractos
     Permission116=Transferências entre contas
     Permission117=Gerir envio de cheques
    @@ -694,15 +704,15 @@ Permission121=Consultar terceiros associados ao utilizador
     Permission122=Criar/modificar terceiros associados ao utilizador
     Permission125=Eliminar terceiros associados ao utilizador
     Permission126=Exportar terceiros
    -Permission141=Ler todos os projetos e tarefas (também os projetos privados para os quais não sou contatado)
    -Permission142=Criar/modificar todos os projetos e tarefas (também os projetos privados para os quais não sou contactado)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Eliminar todos os projetos e tarefas (também os projetos privados para os quais não sou contactado)
     Permission146=Consultar fornecedores de rede
     Permission147=Consultar estados
     Permission151=Consultar ordens de pagamento por débito direto
     Permission152=Criar/modificar ordens de pagamento por débito direto
     Permission153=Enviar/transimitir ordens de pagamento por débito direto
    -Permission154=Registar Créditos/Rejeições de ordens de pagamento por débito direto
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Consultar contratos/subscrições
     Permission162=Criar/modificar contratos/subscrições
     Permission163=Ativar um serviço/subscrição de um contrato
    @@ -725,7 +735,7 @@ Permission187=Fechar encomendas a fornecedores
     Permission188=Cancelar encomendas a fornecedores
     Permission192=Criar linhas de rede
     Permission193=Cancelar linhas de rede
    -Permission194=Consultar linhas de largura de banda
    +Permission194=Ler as linhas de largura de banda
     Permission202=Criar ligações ADSL
     Permission203=Encomendar encomendas de ligações
     Permission204=Encomendar ligações
    @@ -755,7 +765,7 @@ PermissionAdvanced253=Criar/modificar utilizadores internos/externos e permissõ
     Permission254=Criar/modificar apenas utilizadores externos
     Permission255=Modificar a palavra-passe de outros utilizadores
     Permission256=Eliminar ou desativar outros utilizadores
    -Permission262=Estender o acesso para todos os terceiros (e não apenas aos terceiros que o utilizador é representante de vendas).<br>Não eficiente para os utilizadores externos (sempre limitados aos orçamentos, encomendas, faturas, contratos, etc., dos mesmos)<br>Não eficiente para os projetos (apenas regras nas permissões do projeto, visibilidade e atribuição de assuntos).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Consultar CA
     Permission272=Consultar faturas
     Permission273=Emitir fatura
    @@ -765,7 +775,7 @@ Permission283=Eliminar contactos
     Permission286=Exportar contactos
     Permission291=Consultar tarifas
     Permission292=Definir permissões das tarifas
    -Permission293=Modificar tarifas de clientes
    +Permission293=Modify customers tariffs
     Permission300=Consultar códigos de barra
     Permission301=Criar/modificar códigos de barra
     Permission302=Eliminar código de barras
    @@ -787,11 +797,9 @@ Permission401=Consultar descontos
     Permission402=Criar/modificar descontos
     Permission403=Validar descontos
     Permission404=Eliminar descontos
    -Permission501=Consultar salários/contratos dos funcionários
    -Permission502=Criar/modificar salários/contratos dos funcionários
    -Permission511=Consultar pagamentos de salários
    -Permission512=Criar/modificar pagamentos de salários
    -Permission514=Apagar salários
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Exportar salários
     Permission520=Consultar empréstimos
     Permission522=Criar/modificar empréstimos
    @@ -844,8 +852,8 @@ Permission1251=Executar importações em massa de dados externos para a bases de
     Permission1321=Exportar faturas, atributos e cobranças de clientes
     Permission1322=Reabrir uma fatura paga
     Permission1421=Exportar faturas e atributos de clientes
    -Permission20001=Consultar pedidos de licença (seus e dos seus subordinados)
    -Permission20002=Criar/modificar pedidos de licença (seus e dos seus subordinados)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Eliminar pedidos de licença
     Permission20004=Consultar todos os pedidos de licença (incluindo os dos utilizadores não são seus subordinados)
     Permission20005=Criar/modificar pedidos de licença de todos (incluindo os dos utilizadores não são seus subordinados)
    @@ -880,8 +888,8 @@ Permission63001=Consultar recursos
     Permission63002=Criar/modificar recursos
     Permission63003=Eliminar recursos
     Permission63004=Associar recursos a eventos da agenda
    -DictionaryCompanyType=Tipos de terceiros
    -DictionaryCompanyJuridicalType=Formulários legais de terceiros
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Nível de potencial da prospeção
     DictionaryCanton=Concelho
     DictionaryRegion=Distritos
    @@ -894,7 +902,7 @@ DictionaryVAT=Taxa de IVA
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Condições de pagamento
     DictionaryPaymentModes=Métodos de pagamento
    -DictionaryTypeContact=Tipos de contacto/endereço
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Tipo de páginas/conteúdos do site
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Formatos de Papel
    @@ -908,47 +916,47 @@ DictionarySource=Origem dos orçamentos/encomendas
     DictionaryAccountancyCategory=Grupos personalizados para os relatórios
     DictionaryAccountancysystem=Modelos para o gráfíco de contas
     DictionaryAccountancyJournal=Diários contabilisticos
    -DictionaryEMailTemplates=Modelos de emails
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Unidades
     DictionaryProspectStatus=Estado da prospeção
    -DictionaryHolidayTypes=Tipos de licença
    -DictionaryOpportunityStatus=Estado da oportunidade para o projeto/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Relatório de despesas - categorias de transporte
     DictionaryExpenseTaxRange=Relatório de despesas - Escala por categoria de transporte
     SetupSaved=Configuração guardada
     SetupNotSaved=A configuração não foi guardada
     BackToModuleList=Voltar à lista de módulos
    -BackToDictionaryList=Voltar à lista de dicionários
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Gestão de IVA
    -VATIsUsedDesc=Por defeito, quando prospeções; faturas; encomendas; etc. são criadas, a taxa de IVA segue a seguinte regra:<br>Se o vendedor não estiver sujeito a IVA, então este é igual a 0. Fim da regra.<br>Se o país de venda for igual ao país de compra, então o valor do IVA passa a ser o aplicado no país de venda. Fim da regra.<br>Se o vendedor e o comprador fizerem parte da União Europeia e os bens forem produtos de transporte (carro, navio, avião), o IVA é 0 (o IVA deverá ser pago pelo comprador à alfândega do seu país, e não ao vendedor). Fim da regra.<br>Se o vendedor e o comprador fizerem parte da União Europeia e o comprador não for uma empresa, então o IVA é igual ao IVA aplicado no produto vendido. Fim da regra.<br>Se o vendedor e o comprador fizerem parte da União Europeia e o comprador for uma empresa, então o IVA é igual a 0. Fim da regra.<br>Noutros casos o IVA por defeito é igual a 0. Fim da regra.
    -VATIsNotUsedDesc=O tipo de IVA proposto por defeito é 0, este pode ser usado em casos como associações, indivíduos ou pequenas empresas.
    -VATIsUsedExampleFR=Em França, trata-se de empresas ou organizações que possuem um sistema fiscal real (real simplificado ou real normal). Um sistema no qual se declara o IVA.
    -VATIsNotUsedExampleFR=Em França, trata-se de associações isentas de IVA, ou, empresas, organizações ou profissões liberais que escolheram o regime fiscal de módulos (IVA em franquia) e pagaram um IVA em franquia sem fazer declarações de IVA. Esta escolha faz com apareça a anotação "IVA não aplicável" nas faturas.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Taxa
     LocalTax1IsNotUsed=Não utilizar um segundo imposto
    -LocalTax1IsUsedDesc=Utilizar um segundo tipo de imposto (para além do IVA)
    -LocalTax1IsNotUsedDesc=Não utilizar outro tipo de imposto (para além do IVA)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Segundo tipo de imposto
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Não utilizar um terceiro imposto
    -LocalTax2IsUsedDesc=Utilizar um terceiro tipo de imposto (a parte do IVA)
    -LocalTax2IsNotUsedDesc=Não utilizar outro tipo de imposto (para além do IVA)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Terceiro tipo de imposto
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Gestão
    -LocalTax1IsUsedDescES= A taxa de RE por padrão, quando as perspectivas de criação, faturas, pedidos, etc,  seguir a regra activa padrão: <br> Se o comprador não está sujeita a RE por defeito
    -LocalTax1IsNotUsedDescES= Por padrão, o RE proposto é 0. Fim da regra.
    -LocalTax1IsUsedExampleES= Em Espanha, eles são profissionais sujeitos a algumas secções específicas do IAE Espanhol.
    -LocalTax1IsNotUsedExampleES= Em Espanha por exemplo, eles são profissionais e sociedades, sujeitos a certas secções do IAE Espanhol.
    -LocalTax2ManagementES= Gestão de Imposto sobre o Rendimento das Pessoas Singulares (IRS)
    -LocalTax2IsUsedDescES= A taxa de RE por padrão, quando as perspectivas de criação, faturas, pedidos, etc seguir a regra activa padrão: <br> Se o vendedor não está sujeito ao IRPF, IRPF, seguida, por defeito
    -LocalTax2IsNotUsedDescES= Por defeito, o IRS proposto é 0. Fim da regra.
    -LocalTax2IsUsedExampleES= Em Espanha, os freelancers e profissionais liberais que prestam serviços e empresas que escolheram o regime fiscal dos módulos.
    -LocalTax2IsNotUsedExampleES= Em Espanha, eles são negócios que não estão sujeitos ao regime fiscal de módulos.
    +LocalTax1ManagementES=RE Gestão
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Por padrão, o RE proposto é 0. Fim da regra.
    +LocalTax1IsUsedExampleES=Em Espanha, eles são profissionais sujeitos a algumas secções específicas do IAE Espanhol.
    +LocalTax1IsNotUsedExampleES=Em Espanha por exemplo, eles são profissionais e sociedades, sujeitos a certas secções do IAE Espanhol.
    +LocalTax2ManagementES=Gestão de Imposto sobre o Rendimento das Pessoas Singulares (IRS)
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Por defeito, o IRS proposto é 0. Fim da regra.
    +LocalTax2IsUsedExampleES=Em Espanha, os freelancers e profissionais liberais que prestam serviços e empresas que escolheram o regime fiscal dos módulos.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Relatórios sobre impostos locais
     CalcLocaltax1=Vendas - Compras
     CalcLocaltax1Desc=Os relatórios de impostos locais são calculados através da diferença entre as vendas de impostos locais e as compras de impostos locais
    @@ -958,7 +966,8 @@ CalcLocaltax3=Vendas
     CalcLocaltax3Desc=Os relatórios de impostos locais são o total de vendas de impostos locais
     LabelUsedByDefault=Etiqueta que será utilizada por defeito se não for encontrada tradução para este código
     LabelOnDocuments=Etiqueta sobre documentos
    -NbOfDays=Nº de Dias
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=N.º de dias
     AtEndOfMonth=No fim de mês
     CurrentNext=Atual/Seguinte
     Offset=Desvio
    @@ -977,14 +986,14 @@ PhpWebLink=Ligação Web-PHP
     Browser=Navegador
     Server=Servidor
     Database=Base de dados
    -DatabaseServer=Servidor da base de dados
    +DatabaseServer=Hospedeiro da base de dados
     DatabaseName=Nome da base de dados
     DatabasePort=Porta da base de dados
     DatabaseUser=Utilizador da base de dados
     DatabasePassword=Palavra-passe da base de dados
     Tables=Tabelas
     TableName=Nome da tabela
    -NbOfRecord=Nº de registos
    +NbOfRecord=N.ª de registos
     Host=Servidor
     DriverType=Tipo de driver
     SummarySystem=Resumo da informação do sistema
    @@ -996,7 +1005,7 @@ Skin=Tema
     DefaultSkin=Tema predefinido
     MaxSizeList=Tamanho máximo da lista
     DefaultMaxSizeList=Tamanho máximo predefinido para listas
    -DefaultMaxSizeShortList=Tamanho máximo predefinido para listas curtas (por exemplo, listas na ficha de cliente)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Mensagem do día
     MessageLogin=Mensagem da página de inicio de sessão
     LoginPage=Página de inicio de sessão
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Zona de pesquisa permanente no menu esquerdo
     DefaultLanguage=Idioma por defeito a utilizar (código idioma)
     EnableMultilangInterface=Ativar interface multi-idioma
     EnableShowLogo=Mostrar o logótipo no menu esquerdo
    -CompanyInfo=Informação da empresa/organização
    -CompanyIds=Identidades da empresa/organização
    +CompanyInfo=Empresa/Organização
    +CompanyIds=Identidades da Empresa/Organização
     CompanyName=Nome/Razão social
     CompanyAddress=Morada
     CompanyZip=Código Postal
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Titular da conta bancária %s
     BankModuleNotActive=O módulo de contas bancarias não se encontra ativado
     ShowBugTrackLink=Mostrar hiperligação "<strong>%s</strong>"
     Alerts=Alertas
    -DelaysOfToleranceBeforeWarning=Prazos de tolerância antes de notificação
    -DelaysOfToleranceDesc=Esta janela permite configurar os prazos de tolerância antes da emissão de um alerta no ecrã, com o símbolo %s, sobre cada elemento em atraso.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Tolerância de atraso (em dias) antes da emissão de um alerta para eventos planeados (eventos da agenda) que não estejam terminados
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Tolerância de atraso (em dias) antes da emissão de um alerta para projetos não fechados dentro da data limite
    -Delays_MAIN_DELAY_TASKS_TODO=Tolerância de atraso (em dias) antes da emissão de alertas para tarefas planeadas (tarefas de projeto) ainda não concluídas
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Tolerância de atraso (em dias) antes da emissão de um alerta para encomendas de cleintes não processadas
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Tolerância de atraso (em dias) antes de alertar nos orçamentos a fechar
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Tolerância de atraso (em dias) antes de alertar nos orçamentos não faturados
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerância de atraso (em dias) antes da emissão de um alerta para serviços por ativar
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerância de atraso (em dias) antes da emissão de um alerta para serviços expirados
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerância de atraso (em dias) antes da emissão de um alerta para faturas de fornecedores por pagar
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerância de atraso (em dias) antes da emissão de um alerta para faturas a clientes por pagar
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerância de atraso (em dias) antes da emissão de um alerta para reconcilizações bancárias pendentes
    -Delays_MAIN_DELAY_MEMBERS=Tolerância de atraso (em dias) antes da emissão de um alerta para atrasos de pagamentos para taxas de associação
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerância de atraso (em dias) antes da emissão de um alerta para depósitos em cheques, por efetuar
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Atraso de tolerância (em dias) antes da emissão de um alerta para relatórios de despesas por aprovar
    -SetupDescription1=A área de configuração é para parâmetros de configuração iniciais, antes do primeiro uso do Dolibarr
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Outros itens do menu, gerir parâmetros opcionais.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Eventos de auditoria da segurança
     Audit=Auditoria
     InfoDolibarr=Sobre o Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Pode ativar o registo de eventos de segurança Dolibarr aqui. Os ad
     AreaForAdminOnly=Os parâmetros de configuração só podem ser definidos pelos <b>utilizadores administradores</b>.
     SystemInfoDesc=Esta informação do sistema é uma informação técnica acessível só para leitura dos administradores.
     SystemAreaForAdminOnly=Esta área só é acessível aos utilizadores administradores. Nenhuma permissão do Dolibarr permite reduzir esta limitação.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edite, nesta página, todas as informações conhecidas relacionadas com o seu contabilista
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Pode encontrar aqui todos os parâmetros relacionados com a aparência do Dolibarr
     AvailableModules=Aplicações/módulos disponíveis
    -ToActivateModule=Para ativar módulos, aceder à área de configuração (Configuração->Módulos).
    +ToActivateModule=Para ativar os módulos, vá para a Área (Início->Configuração->Módulos).
     SessionTimeOut=Tempo limite para a sessão
    -SessionExplanation=Este valor assegura que o período de sessões não expirará antes deste momento, se a limpeza de sessão for efetuada internamente pelo PHP (e nada mais). A limpeza de sessões interna do PHP não garante que a sessão expire logo a seguir ao atraso definido. A sessão irá expirar, após o atraso aqui definido, e quando a limpeza de sessão ocorrer, normalmente após cada <b>%s/%s</b> acessos feitos para além deste.<br>Nota: em alguns servidores que possuem mecanismos de limpeza de sessão (cron), as sessões expirarão após o perído predefinido <strong>session.gc_maxlifetime</strong>, independentemente do valor aqui introduzido.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Acionadores disponíveis
    -TriggersDesc=Os acionadores são ficheiros que irão modificar o comportamento do fluxo de trabalho do Dolibarr, assim que estes forem copiados para i diretório <b>htdocs/core/triggers</b>. Estes realizam novas ações, ativadas sobre eventos do Dolibarr (criação de novos terceiros, validação de faturas, etc.).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Os acionadores neste ficheiro estão desativados pelo sufixo <b>-NORUN</b> presente no nome.
     TriggerDisabledAsModuleDisabled=Os acionadores neste ficheiro estão desativados porque o módulo <b>%s</b> está desativado.
     TriggerAlwaysActive=Os acionadores neste ficheiro estão sempre ativos, independentemente de quais são os módulos ativados.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insira todos os dados de referência. Você pode adicionar os seu
     ConstDesc=Esta página permite que modifique todos os outros parâmetros não disponíveis nas páginas anteriores. Estes são na sua maioria parâmetros reservados para programadores ou solução avançada de problemas. Para uma lista de opções <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">consulte aqui</a>.
     MiscellaneousDesc=Aqui são definidos todos os outros parâmetros relacionados com segurança.
     LimitsSetup=Configuração de limites/precisão
    -LimitsDesc=Pode definir aqui os limites, precisão e otimizações utilizados pelo Dolibarr
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Número de casas decimais máximo para os preços unitários
     MAIN_MAX_DECIMALS_TOT=Número de casas decimais máximo para os preços totais
     MAIN_MAX_DECIMALS_SHOWN=Número de casas decimais máximo para os valores mostrados na janela (Colocar <b>...</b> depois do número de casas decimais máximo quando o número for truncado)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Preço unitário líquido de um produto
     TotalPriceAfterRounding=Preço total (líquido/IVA/inclui impostos) após arredondamento
     ParameterActiveForNextInputOnly=Parâmetro efetivo somente para as próximas sessões
     NoEventOrNoAuditSetup=Ainda não foram registados eventos de segurança. Isto é comum no caso de "Auditoria" não estar ativa na página "Configuração->Segurança->Auditoria".
    -NoEventFoundWithCriteria=Não foram encontrados eventos de segurança para os critérios de pesquisa introduzidos.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Verifique a configuração local de sendmail
     BackupDesc=Para realizar uma cópia de segurança completa do Dolibarr, deve:
     BackupDesc2=Guarde o conteúdo do diretório de documentos (<b>%s</b>) que contém todos ficheiros carregados e gerados (de forma a que inclua todos os ficheiros dump gerados no passo 1).
    -BackupDesc3=Guarde o conteúdo da sua base de dados (<b>%s</b>) num ficheiro dump. Para isso, pode usar o assistente seguinte.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=O diretório arquivado deverá ser guardado num local seguro.
     BackupDescY=A cópia de segurança gerada deve ser armazenada num local seguro.
    -BackupPHPWarning=O backup não pode ser garantido com este método. Utilize o anterior
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Para restaurar uma cópia de segurança do Dolibarr, você deve:
    -RestoreDesc2=Restaurar o ficheiro de arquivo (ficheiro .zip por exemplo) do diretório de documentos para extrair árvore de ficheiros no diretório de documentos de uma nova instalação Dolibarr ou no atual diretório de documentos (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restaurar os dados, a partir de um ficheiro dump backup, na base de dados da nova instalação Dolibarr ou na base de dados da instalação atual (<b>%s</b>). Aviso: uma vez que a restauração esteja concluída, você deve usar um login/palavra passe, que existia quando o backup foi feito, para iniciar a sessão novamente. Para restaurar um backup da base de dados para a instalação atual, pode seguir este assistente.
     RestoreMySQL=Importação MySQL
     ForcedToByAModule= Esta regra é forçada a <b>a %s</b>, por um módulo ativo
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Deve executar este comando a pa
     YourPHPDoesNotHaveSSLSupport=Funções SSL não estão disponíveis no seu PHP
     DownloadMoreSkins=Mais temas para descarregar
     SimpleNumRefModelDesc=Retorna o número de referência, com o formato %syymm-nnnn, onde "yy" é o ano, "mm" é o mês e "nnnn" é uma sequência.
    -ShowProfIdInAddress=Mostrar ID professionnal com endereços em documentos
    -ShowVATIntaInAddress=Ocultar o número IVA Intra-Comunitário com endereços em documentos
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Tradução parcial
    -MAIN_DISABLE_METEO=Desativar vista de meteorologia
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Modo padrão
     MeteoStdModEnabled=Modo padrão ativado
     MeteoPercentageMod=Modo percentagem
     MeteoPercentageModEnabled=Modo percentagem ativado
     MeteoUseMod=Clique para usar %s
     TestLoginToAPI=Teste o login à API
    -ProxyDesc=Algumas características do Dolibarr precisam de acesso à Internet para funcionar. Defina aqui os parâmetros necessários para tal. Se o servidor Dolibarr estiver atrás de um servidor Proxy, esses parâmetros informam o Dolibarr como aceder à internet através dele.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Acesso externo
     MAIN_PROXY_USE=Utilizar um servidor proxy (se não, o acesso à internet é direto)
     MAIN_PROXY_HOST=Nome/Endereço de servidor proxy
     MAIN_PROXY_PORT=Porta do servidor proxy
     MAIN_PROXY_USER=Inicie a sessão para usar o servidor proxy
     MAIN_PROXY_PASS=Palavra-passe para utilizar o servidor proxy
    -DefineHereComplementaryAttributes=Defina aqui todos os atributos complementares, que não estejam disponíveis por defeito, e que deseja que seja suportado por %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Atributos complementares
     ExtraFieldsLines=Atributos complementares (linhas)
     ExtraFieldsLinesRec=Atributos complementares (linhas de faturas de modelos)
     ExtraFieldsSupplierOrdersLines=Atributos complementares (linhas da encomenda)
     ExtraFieldsSupplierInvoicesLines=Atributos complementares (linhas da fatura)
     ExtraFieldsThirdParties=Atributos complementares (terceiro)
    -ExtraFieldsContacts=Atributos complementares (contacto/morada)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Atributos complementares (membro)
     ExtraFieldsMemberType=Atributos complementares (tipo de membro)
     ExtraFieldsCustomerInvoices=Atributos complementares (faturas)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=somente caracteres alfanuméricos e minúsculas
     SendmailOptionNotComplete=Aviso, em alguns sistemas Linux, para enviar emails, a configuração sendmail deve conter a opção -ba (o parâmetro mail.force_extra_parameters no seu ficheiro php.ini). Se alguns destinatários não receberem e-mails, tente editar este parâmetro PHP com mail.force_extra_parameters = -ba
     PathToDocuments=Caminhos de acesso a documentos
     PathDirectory=Diretório
    -SendmailOptionMayHurtBuggedMTA=Funcionalidade para enviar e-mails usando o método "PHP mail direct" irá gerar uma mensagem de correio que poderá não ser lida corretamente por alguns servidores de e-mail. O resultado será que alguns e-mails não poderão ser lidos por utilizadores que usem essas plataformas com problemas. Isto é o caso de alguns fornecedores de Internet (Ex: MEO em Portugal). Este problema não está relacionado com o Dolibarr nem o PHP, mas sim com o servidor de correio que recebe os e-mails. No entanto, você pode adicionar a opção MAIN_FIX_FOR_BUGGED_MTA a 1 na configuração de forma contornar esta questão. No entanto, você pode ter problemas com outros servidores que respeitam estritamente o padrão SMTP. A outra solução (recomendada) é usar o método "SMTP socket library" que não traz desvantagens.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Configuração da tradução
     TranslationKeySearch=Procurar uma chave ou texto de tradução
     TranslationOverwriteKey=Modificar o texto de uma tradução
    -TranslationDesc=Como seleccionar os idiomas do aplicativo exibidos : <br>* Sistema amplo : menu <strong>Inicio - Configuração - Display </strong><br>*Por  usuário: use o <strong>usuário configuração display </strong>guia da ficha usuário (clic no nome do usuário no cima do écran).
    -TranslationOverwriteDesc=Você pode substituir as traduções na seguinte tabela. Escolha o seu idioma na caixa de seleção "%s", insira a chave tradução rm "%s" e sua nova tradução em "%s"
    -TranslationOverwriteDesc2=Você pode utilizar o outro separador para ajudá-lo a saber a chave de tradução que tem de usar
    +TranslationDesc=Como definir o idioma da aplicação exibido : <br>* Sistema amplo : menu <strong>Inicio->Configuração->Exibir </strong><br>*Por  utilizador: utilize o separador <strong>Configuração do ecrã do utilizador</strong>da ficha do utilizador (clique no nome do utilizador no topo do ecrã).
    +TranslationOverwriteDesc=Pode substituir as entradas na seguinte tabela. Escolha o seu idioma no menu suspenso "%s", insira a chave da tradução em "%s" e a sua nova tradução em "%s"
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Texto de tradução
     CurrentTranslationString=Texto de tradução atual
     WarningAtLeastKeyOrTranslationRequired=É necessário pelo menos um critério de pesquisa para a chave ou texto de tradução
     NewTranslationStringToShow=Novo texto de tradução a exibir
     OriginalValueWas=A tradução original foi alterada. O valor original era: <br><br>%s
    -TransKeyWithoutOriginalValue=Você forçou uma nova tradução para a chave de tradução '<strong>%s</strong>' que não existe em nenhum arquivo de idioma
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Aplicação/módulos ativados: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Deve ativar, pelo menos, 1 módulo
    -ClassNotFoundIntoPathWarning=A classe %s não foi encontrada no caminho PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Sim no verão
    -OnlyFollowingModulesAreOpenedToExternalUsers=Nota: apenas os seguintes módulos é que estão disponíveis a utilizadores externos (independentemente das permissões definidas para tais utilizadores) e somente se as permissões foram concedidas:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Sessão de armazenamento encriptada por Suhosin
     ConditionIsCurrently=A condição está atualmente %s
    -YouUseBestDriver=Você está a utilizar a driver %s, sendo esta a melhor driver disponível atualmente.
    -YouDoNotUseBestDriver=Você está a utilizar a driver %s, mas a driver %s é recomendada.
    -NbOfProductIsLowerThanNoPb=Você apenas possui %s  produtos/serviços na base de dados. Assim sendo não é necessário qualquer tipo de otimização.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Optimização da pesquisa
    -YouHaveXProductUseSearchOptim=Você possui %s produtos na base de dados. Deve adicionar a constante PRODUCT_DONOTSEARCH_ANYWHERE a 1 em Início->Configuração->Outros, assim limita a pesquisa ao início de sequências de caracteres tornando possível para a base de dados usar índices e você deve obter uma resposta imediata.
    -BrowserIsOK=Você está utilizar o navegador %s. Este navegador não tem quaisquer problemas relacionados com segurança e desempenho.
    -BrowserIsKO=Você está utilizar o navegador %s. Este navegador é conhecido por ter problemas a nível de segurança e desempenho. Recomendamos que utilize o Firefox, Chrome, Opera ou o Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug está carregado.
     XCacheInstalled=XCache está carregada.
    -AddRefInList=Exibir a referência do cliente/fornecedor na lista (lista de seleção) e na maioria das hiperligações. Os terceiros aparecerão com o nome "CC12345 - SC45678 - A grande empresa", em vez de apenas "A grande empresa".
    -AskForPreferredShippingMethod=Perguntar pelo Método de Envio preferido para Terceiros
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edição do campo %s
     FillThisOnlyIfRequired=Exemplo: +2 (para preencher apenas se existir problemas de desvios de fuso horário)
     GetBarCode=Obter código de barras
     ##### Module password generation
     PasswordGenerationStandard=Devolve uma palavra-passe gerada pelo algoritmo interno Dolibarr: 8 caracteres no mínimo, contendo números e letras minúsculas.
    -PasswordGenerationNone=Não sugerir qualquer palavra-passe gerada. A palavra-passe deve ser introduzida manualmente.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Retornar uma palavra-passe que esteja de acordo com sua configuração definida.
     SetupPerso=De acordo com a sua configuração
     PasswordPatternDesc=Descrição do padrão da palavra-passe
    @@ -1195,23 +1205,23 @@ UserMailRequired=O email é obrigatório para poder criar um novo utilizador
     HRMSetup=Configuração do módulo "GRH"
     ##### Company setup #####
     CompanySetup=Configuração do módulo "Empresas"
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=O funcionalidade "Notificações por email" permite que você envie mensagens automáticas para alguns eventos Dolibarr. Os destinatários das notificações podem ser definidos:
     NotificationsDescUser=* por utilizador, um utilizador de cada vez
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* ou definindo o recipiente de emails global no página de configuração do módulo
    -ModelModules=Documentos modelos
    -DocumentModelOdt=Crie documentos a partir dos modelos OpenDocuments (ficheiros .ODT ou .ODS para o KOffice, OpenOffice, TextEdit,...)
    +ModelModules=Modelos de Documento
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Marca d'água no documento rascunho
     JSOnPaimentBill=Ative a funcionalidade para preencher automaticamente as linhas de pagamento no formulário de pagamento
    -CompanyIdProfChecker=Regras sobre IDs profissionais
    +CompanyIdProfChecker=Regras para as Id. Profissionais
     MustBeUnique=Deve ser único?
    -MustBeMandatory=Obrigatório para criar terceiros?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Obrigatório para validar faturas?
     TechnicalServicesProvided=Serviços técnicos fornecidos
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Uma hiperligação de exportação para o formato <b>%s</b> está disponivel na seguinte hiperligação: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Uma hiperligação de exportação para o formato <b>%s</
     BillsSetup=Configuração do módulo "Faturas"
     BillsNumberingModule=Módulo de numeração de faturas e entregas
     BillsPDFModules=Modelo de documentos de faturas
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Modelos de documentos de pagamento
     CreditNote=Nota de crédito
     CreditNotes=Notas de crédito
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Gerir um login para cada membro
     AdherentMailRequired=O email é obrigatório para criar um novo membro
     MemberSendInformationByMailByDefault=Selecione para enviar email de confirmação aos membros (validação ou nova subscrição), está ativada por defeito
     VisitorCanChooseItsPaymentMode=O visitante pode escolher entre os modos de pagamento disponíveis
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Configuração do módulo "LDAP"
     LDAPGlobalParameters=Parâmetros globais
    @@ -1308,7 +1320,7 @@ LDAPUserDn=DN dos utilizadores
     LDAPUserDnExample=DN completo (ex: ou=users,dc=example,dc=com)
     LDAPGroupDn=DN dos grupos
     LDAPGroupDnExample=DN completo (ex: ou=groups,dc=example,dc=com)
    -LDAPServerExample=Endereço do servidor (ex: localhost, 192.168.0.2, ldaps://ldap.example.com/)
    +LDAPServerExample=Endereço do servidor (por exemplo: hospedeiro local, 192.168.0.2, ldaps://ldap.example.com/)
     LDAPServerDnExample=DN completo (ex: dc=example,dc=com)
     LDAPDnSynchroActive=Sincronização de utilizadores e grupos
     LDAPDnSynchroActiveExample=Sincronização LDAP para Dolibarr ou Dolibarr para LDAP
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Sincronização do tipo de membro do teste
     LDAPTestSearch= Testar pesquisa LDAP
     LDAPSynchroOK=Teste de sincronização realizado com sucesso
     LDAPSynchroKO=O teste de sincronização falhou
    -LDAPSynchroKOMayBePermissions=O teste de sincronização falhou. Verifique se a conexão ao servidor está corretamente configurada e que permite atualizações LDAP
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=Conexão TCP ao servidor LDAP efetuada com sucesso (Servidor=%s, Porta=%s)
     LDAPTCPConnectKO=Falha de conexão TCP ao servidor LDAP (Servidor=%s, Porta=%s)
    -LDAPBindOK=Conexão/Autenticação ao servidor LDAP efetuada com êxito (Servidor=%s, Porta=%s, Admin=%s, Palavra passe=%s)
    -LDAPBindKO=A conexão/autenticação ao servidor LDAP falhou (Servidor=%s, Porta=%s, Administrador=%s, Palavra-passe=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=Servidor LDAP configurado para a versão 3
     LDAPSetupForVersion2=Servidor LDAP configurado para a versão 2
     LDAPDolibarrMapping=Mapeamento Dolibarr
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Nome de utilizador (samba, activedirectory)
     LDAPFieldLoginSambaExample=Exemplo: sambaccountname
     LDAPFieldFullname=Nome completo
     LDAPFieldFullnameExample=Exemplo: cn
    -LDAPFieldPasswordNotCrypted=Palavra-passe não encriptada
    -LDAPFieldPasswordCrypted=Palavra-passe encriptada
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Exemplo: userPassword
     LDAPFieldCommonNameExample=Exemplo: cn
     LDAPFieldName=Nome
    @@ -1399,7 +1411,7 @@ LDAPFieldSidExample=Exemplo : objectsid
     LDAPFieldEndLastSubscription=Data de fim da subscrição
     LDAPFieldTitle=Cargo
     LDAPFieldTitleExample=Exemplo: title
    -LDAPSetupNotComplete=Configuração LDAP incompleta
    +LDAPSetupNotComplete=Configuração LDAP incompleta (va a outro separador)
     LDAPNoUserOrPasswordProvidedAccessIsReadOnly=Não foi indicado o administrador ou palavra-passe. Os acessos LDAP serão anónimos e no modo só de leitura.
     LDAPDescContact=Esta página permite definir o nome dos atributos da árvore LDAP para cada contacto registado no Dolibarr.
     LDAPDescUsers=Esta página permite definir o nome dos atributos da árvore LDAP para cada utilizador registado no Dolibarr.
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=Esta página permite que você defina o nome dos atributos
     LDAPDescValues=Os valores de exemplo foram construídos para o <b>OpenLDAP</b> com os seguintes esquemas carregados: <b>core.schema, cosine.schema, inetorgperson.schema</b>. Se você utiliza esses valores e o OpenLDAP, então modifique o seu ficheiro de configuração LDAP, <b>slapd.conf</b>, para carregar todos esses esquemas.
     ForANonAnonymousAccess=Para um acesso autentificado
     PerfDolibarr=Relatório de configuração/otimização de desempenho
    -YouMayFindPerfAdviceHere=Nesta página encontrará algumas dicas relacionadas com desempenho.
    -NotInstalled=Não instalado, o servidor não está mais lento por isso.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Cache de aplicativo
    -MemcachedNotAvailable=Não foi encontrada cache de aplicativo. Você pode melhorar o desempenho através da instalação de um servidor de cache Memcached e um módulo capaz de utilizar este servidor de cache.<br>Mais informações em  <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note que muitos fornecedores de hospedagem web não fornece tais servidores de cache.
    +MemcachedNotAvailable=Não foi encontrada nenhuma cache da aplicação. Pode melhorar o desempenho, instalando um servidor de cache "Memcached" e um módulo que possa utilizar este servidor de cache.<br>Mais informação em  <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note que muitos provedores de hospedagem da Web não fornecem tais servidores de cache.
     MemcachedModuleAvailableButNotSetup=Encontrado módulo memcached para cache de aplicativo, mas a configuração deste não está completa.
     MemcachedAvailableAndSetup=O módulo memcached dedicado está ativo.
     OPCodeCache=Cache OPCode
    -NoOPCodeCacheFound=Nenhuma cache OPCode encontrada. Pode ser que você utilize outro tipo de cache OPCode sem ser XCache ou eAccelerator, pode ser que você não tenha cache OPCode.
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=Cache HTTP para recursos estáticos (css, img, javascript)
     FilesOfTypeCached=Ficheiros do tipo %s são guardados na cache do servidor HTTP
     FilesOfTypeNotCached=Ficheiros do tipo %s não são guardados na cache do servidor HTTP
     FilesOfTypeCompressed=Ficheiros do tipo %s são comprimidos pelo servidor HTTP
     FilesOfTypeNotCompressed=Ficheiros do tipo %s não são comprimidos pelo servidor HTTP
     CacheByServer=Cache pelo servidor
    -CacheByServerDesc=Por exemplo, usando a diretiva Apache "ExpiresByType image / gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache pelo navegador
     CompressionOfResources=Compressão das respostas HTTP
    -CompressionOfResourcesDesc=Por exemplo, usando a diretiva Apache "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=A detecção automática não é possível com os navegadores atuais
    -DefaultValuesDesc=Você pode definir / forçar aqui o valor padrão que deseja obter quando criar um novo registro e / ou defautar filtros ou ordem de classificação quando o registro da lista.
    -DefaultCreateForm=Valores padrão (nos formulários a serem criados)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Filtros de pesquisa predefinidos
     DefaultSortOrder=Pedidos de classificação padrão
     DefaultFocus=Campos de foco predefinidos
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Configuração do módulo "Produtos"
     ServiceSetup=Configuração do módulo "Serviços"
     ProductServiceSetup=Configuração do módulo "Produtos e Serviços"
     NumberOfProductShowInSelect=Nº máximo de produtos apresentados em listas (0=sem limite)
    -ViewProductDescInFormAbility=Visualização das descrições dos produtos nos formulários (de outra forma serão apresentados em popups)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Ative no separador "Ficheiros Anexados" do produto/serviço uma opção para unir o documento em PDF ao orçamento em PDF, se o produto/serviço estiver no orçamento
    -ViewProductDescInThirdpartyLanguageAbility=Visualização das descrições de produtos na língua do terceiro
    -UseSearchToSelectProductTooltip=Se você tiver grande número de produtos (> 100 000), você pode aumentar a velocidade, definindo a constante PRODUCT_DONOTSEARCH_ANYWHERE para 1 em Configuração -> Outros. A pesquisa será então limitada ao início da sequência de caracteres.
    -UseSearchToSelectProduct=Aguardar até que seja preenchido parte do campo antes de carregar o conteúdo da lista de produtos (isto pode aumentar o desempenho se você tiver um grande número de produtos, mas é menos conveniente)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Tipo de código de barras predefinido para produtos
     SetDefaultBarcodeTypeThirdParties=Tipo de código de barras predefinido para terceiros
     UseUnits=Defina uma unidade de medida para a "Quantidade" durante a edição das linhas de uma encomenda, orçamento ou fatura
    @@ -1503,7 +1516,7 @@ SendingsSetup=Configuração do módulo "Envios"
     SendingsReceiptModel=Modelo do recibo de expedição
     SendingsNumberingModules=Envios módulos numerados
     SendingsAbility=Suporte para guias de transporte para entregas a clientes
    -NoNeedForDeliveryReceipts=Na maioria dos casos, as guias de transporte são usadas tanto como folhas para entregas do cliente (lista de produtos para enviar), como folhas que são recebidas e assinadas pelo cliente. Deste modo, os recibos de entregas de produtos são uma funcionalidade duplicada e raramente é ativada.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Texto livre nas expedições
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Módulo de numeração de notas de entrega de produtos
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Editor avançado
     ActivateFCKeditor=Ativar editor avançado para:
     FCKeditorForCompany=Criação/Edição WYSIWIG da descrição e notas de elementos (exceto produtos/services)
     FCKeditorForProduct=Criação/Edição WYSIWIG da descrição e notas dos produtos/serviços
    -FCKeditorForProductDetails=Edição/criação WYSIWIG das linhas dos detalhes dos produtos para todas as entidades (orçamentos, encomendas, faturas, etc.). <font class="warning">Aviso: utilizar esta opção para este caso não é muito recomendado, porque esta pode criar problemas com os carateres especiais e a formatação da página quando criar ficheiros em PDF.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= Criação/Edição WYSIWIG para emails em massa (Ferramentas->eMailing)
     FCKeditorForUserSignature=Criação/Edição WYSIWIG da assinatura do utilizador
     FCKeditorForMail=Criação/Edição WYSIWIG para todo o correio (exceto Ferramentas->eMailling)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=A conexão foi estabelecida, mas a base de dados não parece ser de OSCommerce (A chave %s não foi encontrada na tabela %s).
    -OSCommerceTestOk=A conexão ao servidor '%s', à base de dados '%s' através do utilizador '%s' foi efetuada com sucesso.
    -OSCommerceTestKo1=A conexão ao servidor '%s' foi efetuada com sucesso, no entanto não foi possível comunicar com a base de dados '%s'.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=A conexão ao servidor '%s' através do utilizador '%s'  não foi possível.
     ##### Stock #####
     StockSetup=Configuração do módulo Stock
    -IfYouUsePointOfSaleCheckModule=Se você utiliza um módulo de Ponto de Venda (o módulo POS/PDV fornecido por defeito ou outro módulo externo), esta configuração pode ser ignorada pelo seu módulo de Ponto de Venda. A maioria dos módulos de pontos de venda são desenhados para criar imediatamente uma fatura e diminuir o stock por defeito, qualquer que seja a opção aqui. Se você precisar ou não ter uma diminuição de stock ao registar uma venda no seu ponto de venda, verifique também a configuração do seu módulo POS/PDV.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu eliminado
     Menus=Menus
    @@ -1542,13 +1555,13 @@ DetailMenuHandler=Gestor de menus onde será exibido o novo menu
     DetailMenuModule=Nome do módulo, no caso da entrada do menu ser resultante de um módulo
     DetailType=Tipo de menu (superior ou esquerdo)
     DetailTitre=Etiqueta do menu ou código da etiqueta para tradução
    -DetailUrl=URL da página para a qual o menu aponta (URL absoluto or hiperligação externa com http://)
    +DetailUrl=URL da página para a qual o menu aponta (Hiperligação do URL fixa ou hiperligação externa com http://)
     DetailEnabled=Condição para mostrar, ou não, a entrada
     DetailRight=Condição para mostrar menus cinza não autorizados
     DetailLangs=Nome do ficheiro. lang para a tradução de códigos de etiquetas
     DetailUser=Interno / Externo / Todos
     Target=Alvo
    -DetailTarget=Alvo para hiperligações (_blank para abrir numa nova janela)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Nivel (-1:menu superior, 0:principal, >0 menu e submenu)
     ModifMenu=Modificação do menu
     DeleteMenu=Eliminar entrada de menu
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=O IVA é aplicado:<br>- ao envio dos bens (é utilizada a d
     OptionVatDebitOptionDesc=O IVA é aplicado:<br>- ao envio dos bens (é utilizada a data da fatura)<br>- sobre a faturação (débito) dos serviços
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=IVA é devido: <br> - em pagamento de mercadorias <br>- em pagamentos de serviços
    -SummaryOfVatExigibilityUsedByDefault=Tempo de exigibilidade do IVA prédefinido, de acordo com a opção escolhida:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Na entrega
     OnPayment=No pagamento
     OnInvoice=Na fatura
    @@ -1572,7 +1585,7 @@ SupposedToBeInvoiceDate=Data da fatura usada
     Buy=Comprar
     Sell=Vender
     InvoiceDateUsed=Data da fatura usada
    -YourCompanyDoesNotUseVAT=Sua empresa foi configurada para não usar o IVA (Home - Configuração - Empresa/Organização), pelo que não há opções relacionadas com o IVA a configurar.
    +YourCompanyDoesNotUseVAT=A sua empresa foi definida para não utilizar IVA (Início->Configuração->Empresa/Organização), assim, não há opções relacionadas com o IVA para configurar.
     AccountancyCode=Código de Contabilidade
     AccountancyCodeSell=Código de contabilidade de vendas
     AccountancyCodeBuy=Código de contabilidade de compras
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Código de contabilidade de compras
     AgendaSetup=Configuração do módulo "Eventos e agenda"
     PasswordTogetVCalExport=Chave de autorização para exportação do link vcal.
     PastDelayVCalExport=Não exportar evento com mais de
    -AGENDA_USE_EVENT_TYPE=Usar tipos de eventos (gerido através do menu Configuração -> Dicionário -> Tipo de eventos da agenda)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Definir este valor automaticamente como o valor predefinido para o campo tipo de evento, no formulário de criação de evento
    -AGENDA_DEFAULT_FILTER_TYPE=Definir automaticamente este tipo de evento no filtro de pesquisa da vista agenda
    -AGENDA_DEFAULT_FILTER_STATUS=Definido automaticamente este estado para eventos no filtro de pesquisa da vista agenda
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Qual é o separador que você deseja abrir por defeito quando seleciona o menu "Agenda"
     AGENDA_REMINDER_EMAIL=Ativar lembrete de eventos <b>por e-mails</b> (lembrar opção / atraso pode ser definido em cada evento). Nota: O módulo <strong>%s</strong>deve estar habilitado e configurado corretamente para que o lembrete seja enviado na freqüência correta.
    -AGENDA_REMINDER_BROWSER=Ativar lembrete de eventos <b>no navegador de usuários</b> (quando a data do evento é atingida, cada usuário pode recusar isso a partir da pergunta de confirmação do navegador)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Ativar notificação sonora
     AGENDA_SHOW_LINKED_OBJECT=Mostrar o objeto associado na vista de agenda
     ##### Clicktodial #####
     ClickToDialSetup=Configuração do módulo "Click To Dial"
     ClickToDialUrlDesc=Uma chamada é efetuada quando o icon é clicado. No URL pode usar as tags:<br><b>__PHONETO__</b> que será substituída pelo número do destinatário<br><b>__PHONEFROM__</b> que será substituída pelo número do remetente<br><b>__LOGIN__</b> que será substituída pelo nome de utilizador da sua conta ClickToDial (definido no seu cartão de utilizador)<br><b>__PASS__</b>  que será substituída pela palavra-passe da sua conta ClickToDial (definida no seu cartão de utilizador).
    -ClickToDialDesc=Este módulo torna os números de telefone clicáveis. Um clique neste ícone fará com que o seu telefone ligue para o número de telefone. Isto pode ser usado para chamar um sistema de call-center a partir do Dolibarr que por sua vez pode ligar ao número de telefone num sistema SIP, por exemplo.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Usar apenas um link "tel:" em números de telefone
    -ClickToDialUseTelLinkDesc=Utilize este método se os seus utilizadores possuem um telemóvel ou uma interface de software, instalado no mesmo computador que o navegador, que permita efetuar uma chamada quando links que começam com "tel:" são clicados. Se você precisa de uma solução de servidor (sem necessidade de instalação de software local), você deve definir este como "Não" e preencher o próximo campo.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Pontos de vendas
     CashDeskSetup=Configuração do módulo "Ponto de vendas"
    -CashDeskThirdPartyForSell=Terceiro genérico a usar para as vendas
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Conta a ser usada para receber pagamentos em dinheiro
     CashDeskBankAccountForCheque= Conta a ser usada para receber pagamentos através de cheques
     CashDeskBankAccountForCB= Conta a ser usada para receber pagamentos por cartões de crédito
    -CashDeskDoNotDecreaseStock=Decréscimo de stock quando é efetuada uma venda a partir do Ponto de Venda desativado  (se "não", o decréscimo do stock e feito após cada venda, para qualquer opção definida no módulo "Stock")
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Forçar e restringir o armazém a usar para o decréscimo de stock
    -StockDecreaseForPointOfSaleDisabled=Decréscimo de stock a partir do Ponto de Venda desativado
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Decréscimo de stock a partir do Ponto de Venda não é compatível com a gestão de lotes
    -CashDeskYouDidNotDisableStockDecease=Não desativou o decréscimo de stock para quando é efetuada uma venda a partir do Ponto de Venda, como tal é necessário ter um armazém definido.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Configuração do módulo "Marcadores"
    -BookmarkDesc=Este módulo permite gerir os marcadores. Também permite adicionar qualquer página do Dolibarr ou links externos ao menu de acesso rápido na esquerda.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Número máximo de marcadores a mostrar no menu esquerdo
     ##### WebServices #####
     WebServicesSetup=Configuração do módulo "Webservices"
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Módulo de numeração para recibos de pagamento e
     MultiCompanySetup=Configuração do módulo "Multi-empresa"
     ##### Suppliers #####
     SuppliersSetup=Configuração do módulo "Fornecedor"
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Modelos de numeração de faturas de fornecedores
     IfSetToYesDontForgetPermission=Se definido a "sim", não se esqueça de atribuir permissões a utilizadores ou grupos de utilizadores que possam efetuar a segunda aprovação
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Configuração do módulo "Projetos"
     ProjectsModelModule=Modelo de documento para relatórios de projeto
     TasksNumberingModules=Módulo de numeração de tarefas
     TaskModelModule=Modelo de documento dos relatórios de tarefasl
    -UseSearchToSelectProject=Espere antes de presar a chave que carregue o conteúdo da lista de combinação de projetos (Isso pode aumentar o desempenho se você tiver um grande número de projetos, mas é menos conveniente)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Períodos de contabilidade
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Poderá encontrar as opç
     ListOfNotificationsPerUser=Lista de notificações por utilizador*
     ListOfNotificationsPerUserOrContact=Lista de notificações por utilizador* ou por contact**
     ListOfFixedNotifications=Lista de notificações fixas
    -GoOntoUserCardToAddMore=Vá ao separador "Notificações" de um utilizador para adicionar ou remover notificações
    -GoOntoContactCardToAddMore=Vá ao separador "Notificações" de um terceiro para adicionar ou remover as notificações de contactos/endereços
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Limite
     BackupDumpWizard=Assistente para construir o ficheiro dump de backup da base de dados
     SomethingMakeInstallFromWebNotPossible=Instalação do módulo externo não é possível a partir da interface web pelo seguinte motivo:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Instalação de um módulo externo da
     ConfFileMustContainCustom=Instalar ou construir um módulo externo do aplicativo precisa salvar os arquivos do módulo no diretório. <strong>%s</strong>Para que este diretório seja processado pelo Dolibarr, você deve configurar seu <strong>conf/conf.php</strong> para adicionar as 2 linhas diretivas:<br><strong> $dolibarr_main_url_root_alt ='/ custom';</strong><br><strong> $dolibarr_main_document_root_alt='%s/ custom';</strong>
     HighlightLinesOnMouseHover=Realçar as linhas da tabela quando o rato passar sobre elas
     HighlightLinesColor=Realçar a cor da linha quando o rato passa por cima (manter vazio para não realçar)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Cor dos links
     PressF5AfterChangingThis=Pressione CTRL+F5 no teclado ou limpe a cache do navegador depois de mudar este valor de forma a gravar as alterações
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Cor de fundo para linhas pares da tabela
     MinimumNoticePeriod=Período mínimo de notificação (o seu pedido de licença deve ser feito antes deste período)
     NbAddedAutomatically=Número de dias adicionados ao contadores dos utilizadores (automaticamente) cada mês
     EnterAnyCode=Este campo contém uma referência para identificar a linha. Digite qualquer valor sem caracteres especiais.
    -UnicodeCurrency=Digite aqui entre parêntesis retos, a lista  de bytes que representam o símbolo da moeda. Por exemplo: para o dólar americano $, digite [36] - para o real braisleiro, R$ [82,36] - para o euro €, digite [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=As cores RGB está no formato HEX, por exemplo: FF0000
     PositionIntoComboList=Posição da linha nas listas de seleção
     SellTaxRate=Taxa de imposto de venda
     RecuperableOnly=Sim para IVA "Não Percebido, mas Recuperável" dedicado a algum regiões ultramarinas da França. Mantenha o valor de "Não" em todos os outros casos.\n\n
     UrlTrackingDesc=Se a transportadora oferecer uma página da Internet para verificar o estado da sua encomenda, pode introduzi-lo aqui. Você pode usar a chave {TRACKID} nos  parâmetros do URL para que o sistema possa substituí-lo na ficha de expedição.
    -OpportunityPercent=Quando você cria uma oportunidade, você vai definir um valor estimado de projeto/lead. De acordo com o estado da oportunidade, este montante poderá ser multiplicado por esta taxa para avaliar o montante global que todas as suas oportunidades pode gerar. O valor é percentual (entre 0 e 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=Este registo modelo é dedicado a qual elemento
     TypeOfTemplate=Tipo de modelo
    -TemplateIsVisibleByOwnerOnly=Modelo é visível apenas pelo dono
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visível em todo lado
     VisibleNowhere=Visível em nenhum lado
     FixTZ=Corrigir Fuso Horário
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=Você possui a última versão estável
     TitleExampleForMajorRelease=Exemplo de mensagem que você pode usar para anunciar esta versão principal (sinta-se livre para usá-la nas suas páginas da Internet)
     TitleExampleForMaintenanceRelease=Exemplo de mensagem que você pode usar para anunciar esta versão de manutenção (sinta-se livre para usá-la nas suas páginas da Internet)
     ExampleOfNewsMessageForMajorRelease=O Dolibarr ERP e CRM %s está disponível. A versão %s é um grande lançamento com várias funcionalidades novas. Você pode transferi-lo a partir da área de downloads do portal https://www.dolibarr.org (subdiretório: versões estáveis). Você pode ler o <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> para consultar a lista completa de alterações.
    -ExampleOfNewsMessageForMaintenanceRelease=O Dolibarr ERP e CRM %s está disponível. A versão %s é uma versão de manutenção, por isso contém apenas correções de bugs. Recomendamos que atualize para este. Como com qualquer versão de manutenção, não há novas funcionalidades, nem foi mudada a estrutura de dados presente nesta versão. Você pode transferi-lo a partir da área de downloads da página https://www.dolibarr.org (subdiretório: versões estáveis). Você pode consultar <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> para a lista completa de alterações.
    -MultiPriceRuleDesc=Quando a opção "Vários níveis de preços por produto / serviço" está ativada, você pode definir diferentes preços (um por nível de preço) para cada produto. Para economizar tempo, você pode inserir aqui uma regra para que o preço de cada nível seja calculado automaticamente de acordo com o preço do primeiro nível, então você terá que inserir apenas o preço do primeiro nível em cada produto. Esta página está aqui para poupar tempo e pode ser útil somente se seus preços para cada nível forem relativos ao primeiro nível. Você pode ignorar esta página na maioria dos casos.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Modelos para documentos de produto
    -ToGenerateCodeDefineAutomaticRuleFirst=Para ser possível criar códigos automaticamente, você deve primeiro definir um gestor para auto definir o número de código de barras.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=Veja a nota * para uma lista de possíveis variáveis ​​de substituição
     SeeChangeLog=Consulte o arquivo ChangeLog (somente em inglês)
     AllPublishers=Todos os editores
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Adicionar outras páginas ou serviços
     AddModels=Adicionar modelos de documento ou numeração
     AddSubstitutions=Adicionar substituições de chaves
     DetectionNotPossible=Deteção não é possível
    -UrlToGetKeyToUseAPIs=Url para obter token para usar API (uma vez que o token foi recebido é salvo na tabela de usuário do banco de dados e deve ser fornecido em cada chamada de API)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Lista de APIs disponíveis
    -activateModuleDependNotSatisfied=O módulo "%s" depende do módulo "%s" que está em falta, então o módulo "%1$s" poderá não funcionar corretamente. Instale o módulo "%2$s" ou desabilite o módulo "%1$s"
    -CommandIsNotInsideAllowedCommands=O comando que você tenta executar não está dentro da lista de comandos permitidos definidos no parâmetro <strong>$dolibarr_main_restrict_os_commands</strong> no arquivo <strong>conf.php</strong>.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Página Inicial
    -SamePriceAlsoForSharedCompanies=Se utiliza a opção multi-empresa, com a escolha de "Preço único", o preço será igual em todas as empresas, se o produto for partilhado entre as empresas
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=O módulo foi ativado. As permissões para o(s) módulo(s) ativado(s) foram adicionadas apenas aos utilizadores administradores. Talvez seja necessário conceder permissões para outros utilizadores ou grupos manualmente.
    -UserHasNoPermissions=Este utilizador não tem permissões definidas
    -TypeCdr=Use "Nenhum" se a data do prazo de pagamento for a data da fatura mais um delta em dias (o delta é o campo "Nb de dias") <br>Use "No final do mês", se, após o delta, a data deve ser aumentada para alcançar o fim de mês (+ opcional "Offset" em dias)<br> Use "Current / Next" para que a data do prazo de pagamento seja o primeiro Nth do mês (N é armazenado no campo "Nb de dias")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Moeda de referência da empresa (vá à configuração da empresa para alterar)
    -WarningNoteModuleInvoiceForFrenchLaw=Este módulo %s está de acordo com as leis francesas (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=Este módulo %s está de acordo com as leis francesas (Loi Finance 2016) porque o módulo Registos Não Reversíveis é ativado automaticamente.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Você tenta instalar o módulo %sque é um módulo externo. A ativação de um módulo externo significa que você confia na editora do módulo e tem certeza de que este módulo não altera negativamente o comportamento do seu aplicativo e está em conformidade com as leis do seu país (%s). Se o módulo traz uma característica não legal, você se torna responsável pelo uso de um software não legal.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Margem esquerda do PDF
     MAIN_PDF_MARGIN_RIGHT=Margem direita do PDF
     MAIN_PDF_MARGIN_TOP=Margem superior do PDF
     MAIN_PDF_MARGIN_BOTTOM=Margem inferior do PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Defina isto como "sim" se este grupo for uma computação de outros grupos
    -EnterCalculationRuleIfPreviousFieldIsYes=Insira a regra de cálculo no caso do campo anterior ter sido definido como "Sim" (por exemplo, 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Várias variantes de idiomas encontradas
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuração do módulo Recursos
     UseSearchToSelectResource=Utilizar um formulário de pesquisa para escolher um recurso (em vez de uma lista)
     DisabledResourceLinkUser=Desativar funcionalidade que permite vincular um recurso aos utilizadores
     DisabledResourceLinkContact=Desativar funcionalidade que permite vincular um recurso aos contactos
     ConfirmUnactivation=Confirmar restauração do módulo
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/pt_PT/companies.lang b/htdocs/langs/pt_PT/companies.lang
    index 9c812c24e54..431010fdfd1 100644
    --- a/htdocs/langs/pt_PT/companies.lang
    +++ b/htdocs/langs/pt_PT/companies.lang
    @@ -8,10 +8,10 @@ ConfirmDeleteContact=Deseja eliminar este contacto e toda a sua informação?
     MenuNewThirdParty=Novo Terceiro
     MenuNewCustomer=Novo Cliente
     MenuNewProspect=Novo Potencial Cliente
    -MenuNewSupplier=Novo fornecedor
    +MenuNewSupplier=Novo Fornecedor
     MenuNewPrivateIndividual=Novo Particular
    -NewCompany=Nova empresa (cliente potencial, cliente, fornecedor)
    -NewThirdParty=Novo terceiro (prospeto, cliente, fornecedor)
    +NewCompany=Nova empresa (potencial cliente, cliente, fornecedor)
    +NewThirdParty=Novo Terceiro (potencial cliente, cliente, fornecedor)
     CreateDolibarrThirdPartySupplier=Criar um terceiro (fornecedor)
     CreateThirdPartyOnly=Criar terceiro
     CreateThirdPartyAndContact=Criar um terceiro e um dos seus contactos
    @@ -25,10 +25,10 @@ ThirdPartyContact=Contacto de Terceiro
     Company=Empresa
     CompanyName=Razão social
     AliasNames=Pseudónimo (comercial, marca registada, ...)
    -AliasNameShort=Pseudónimo
    +AliasNameShort=Alias Name
     Companies=Empresas
    -CountryIsInEEC=País da Comunidade Económica Europeia
    -ThirdPartyName=Nome de terceiros
    +CountryIsInEEC=País faz parte da Comunidade Económica Europeia
    +ThirdPartyName=Nome do Terceiro
     ThirdPartyEmail=Email do terceiro
     ThirdParty=Terceiro
     ThirdParties=Terceiros
    @@ -38,9 +38,9 @@ ThirdPartyCustomers=Clientes
     ThirdPartyCustomersStats=Clientes
     ThirdPartyCustomersWithIdProf12=Clientes com %s ó %s
     ThirdPartySuppliers=Fornecedores
    -ThirdPartyType=Tipo de Terceiro
    +ThirdPartyType=Type of company
     Individual=Particular
    -ToCreateContactWithSameName=Isto irá criar automaticamente um contacto/morada com a mesma informação do terceiro. Na maioria dos casos, mesmo que o terceiro seja uma pessoa física, criar um terceiro apenas é suficiente.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Empresa-mãe
     Subsidiaries=Subsidiárias
     ReportByMonth=Relatório por mês
    @@ -50,7 +50,7 @@ CivilityCode=Código cortesía
     RegisteredOffice=Domicilio social
     Lastname=Apelidos
     Firstname=Primeiro Nome
    -PostOrFunction=Posto de trabalho
    +PostOrFunction=Posição da tarefa
     UserTitle=Título
     NatureOfThirdParty=Natureza do terceiro
     Address=Direcção
    @@ -75,12 +75,12 @@ Zip=Código postal
     Town=Localidade
     Web=Web
     Poste= Posição
    -DefaultLang=Língua por omissão
    -VATIsUsed=Sujeito a IVA
    -VATIsUsedWhenSelling=Isto define se este terceiro inclui um imposto sobre vendas, ou não, quando faz uma fatura para seus próprios clientes
    +DefaultLang=Idioma predefinido
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Não sujeito a IVA
     CopyAddressFromSoc=Preencha a morada com a morada do terceiro
    -ThirdpartyNotCustomerNotSupplierSoNoRef=O terceiro não é cliente nem fornecedor, não contém qualquer objeto de referência
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=O terceiro não é cliente nem fornecedor, descontos não estão disponíveis
     PaymentBankAccount=Conta bancária de pagamentos
     OverAllProposals=Orçamentos
    @@ -99,7 +99,7 @@ LocalTax2ES=IRPF
     TypeLocaltax1ES=Tipo RE
     TypeLocaltax2ES=Tipo IRPF
     WrongCustomerCode=Código cliente incorrecto
    -WrongSupplierCode=Código do fornecedor inválido
    +WrongSupplierCode=Código de fornecedor inválido
     CustomerCodeModel=Modelo de código cliente
     SupplierCodeModel=Modelo de código de fornecedor
     Gencod=Código de barras
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Número de identificação para efeitos de IVA (VIES)
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Número de identificação para efeitos de IVA
     VATIntraSyntaxIsValid=Sintaxe Válida
     VATReturn=Retorno do IVA
    @@ -269,23 +269,23 @@ Customer=Cliente
     CustomerRelativeDiscount=Desconto Cliente Relativo
     SupplierRelativeDiscount=Desconto relativo do fornecedor
     CustomerRelativeDiscountShort=Desconto Relativo
    -CustomerAbsoluteDiscountShort=Desconto Fixo
    +CustomerAbsoluteDiscountShort=Desconto fixo
     CompanyHasRelativeDiscount=Este cliente tem um desconto por defeito de <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Este cliente não tem descontos relativos por defeito
     HasRelativeDiscountFromSupplier=Você tem um desconto predefinido de <b> %s%%</b> deste fornecedor
     HasNoRelativeDiscountFromSupplier=Você não tem desconto relativo predefinido deste fornecedor
    -CompanyHasAbsoluteDiscount=Este cliente ainda tem créditos de desconto ou depósitos para <b>%s </b>%s
    -CompanyHasDownPaymentOrCommercialDiscount=Este cliente tem descontos disponíveis (comercial, pronto pagamento) para <b>%s</b>%s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Este cliente ainda tem notas de crédito para <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=Você não tem desconto ou nota de crédito disponível neste fornecedor
     HasAbsoluteDiscountFromSupplier=Você tem descontos disponíveis (notas de créditos ou adiantamentos) para <b>%s</b> %s deste fornecedor
     HasDownPaymentOrCommercialDiscountFromSupplier=Você tem descontos disponíveis (comerciais, adiantamentos) para <b>%s</b> %s deste fornecedor
     HasCreditNoteFromSupplier=Você tem notas de crédito para <b>%s</b> %s deste fornecedor
     CompanyHasNoAbsoluteDiscount=Este cliente não tem mas descontos fixos disponiveis
    -CustomerAbsoluteDiscountAllUsers=Descontos absolutos de clientes (concedidos por todos os utilizadores)
    -CustomerAbsoluteDiscountMy=Descontos absolutos de clientes (concedidos por si)
    -SupplierAbsoluteDiscountAllUsers=Descontos absolutos do fornecedor (introduzidos por todos os utilizadores)
    -SupplierAbsoluteDiscountMy=Descontos absolutos de fornecedores (introduzidos por si)
    +CustomerAbsoluteDiscountAllUsers=Descontos de cliente fixos (concedidos por todos os utilizadores)
    +CustomerAbsoluteDiscountMy=Descontos de cliente fixos (concedidos por si)
    +SupplierAbsoluteDiscountAllUsers=Descontos de fornecedor fixos (inseridos por todos os utilizadores)
    +SupplierAbsoluteDiscountMy=Descontos de fornecedor fixos (inseridos por si)
     DiscountNone=Nenhuma
     Supplier=Fornecedor
     AddContact=Criar contacto
    @@ -303,22 +303,22 @@ AddThirdParty=Criar terceiro
     DeleteACompany=Eliminar uma Empresa
     PersonalInformations=Informação Pessoal
     AccountancyCode=Conta contabilistica
    -CustomerCode=Código Cliente
    -SupplierCode=Código do fornecedor
    -CustomerCodeShort=Código Cliente
    -SupplierCodeShort=Código do fornecedor
    -CustomerCodeDesc=Código único cliente para cada cliente
    -SupplierCodeDesc=Código do fornecedor, exclusivo para todos os fornecedores
    +CustomerCode=Customer Code
    +SupplierCode=Código de Fornecedor
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Código de Fornecedor
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Código de Fornecedor, exclusivo para todos os fornecedores
     RequiredIfCustomer=Requerida se o Terceiro for Cliente ou Cliente Potencial
     RequiredIfSupplier=Obrigatório se os terceiros forem fornecedores
    -ValidityControledByModule=Validação Controlada pelo Módulo
    -ThisIsModuleRules=Esta é a regra para este módulo
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Cliente Potencial a Contactar
     CompanyDeleted=A Empresa "%s" foi Eliminada
     ListOfContacts=Lista de Contactos
    -ListOfContactsAddresses=Lista de contactos/endereços
    -ListOfThirdParties=Lista de Terceiros
    -ShowCompany=Mostrar terceiros
    +ListOfContactsAddresses=Lista de Contactos
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Mostrar Contacto
     ContactsAllShort=Todos (sem filtro)
     ContactType=Tipo de Contacto
    @@ -332,21 +332,21 @@ NoContactForAnyOrderOrShipments=Este contacto não é um contacto para qualquer
     NoContactForAnyProposal=Este contacto não é um contacto para qualquer orçamento
     NoContactForAnyContract=Este contacto não é contacto de nenhum contrato
     NoContactForAnyInvoice=Este contacto não é contacto de nenhuma fatura
    -NewContact=Novo Contacto
    -NewContactAddress=Novo Contato/Morada
    +NewContact=Novo contacto
    +NewContactAddress=Novo Contacto/Morada
     MyContacts=Os Meus Contactos
     Capital=Capital
     CapitalOf=Capital Social de %s
     EditCompany=Modificar Empresa
    -ThisUserIsNot=Este utilizador não é um cliente potencial, cliente ou fornecedor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Verificar
    -VATIntraCheckDesc=o link <b>%s</b> permite consultar à serviço europeu de control de números de IVA intracomunitario. Requer acesso á internet para que o serviço funcione
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Verificar na web da Comissão Europeia
    -VATIntraManualCheck=Pode também realizar uma verificação manual na web europea <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Verificação Impossivel. O serviço de verificação não é prestado pelo país membro (%s).
    -NorProspectNorCustomer=Nem Cliente, Nem Cliente Potencial
    -JuridicalStatus=Forma jurídica
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Empregados
     ProspectLevelShort=Cli. Potenc.
     ProspectLevel=Cliente Potencial
    @@ -387,12 +387,12 @@ ExportCardToFormat=Exportar ficha para o formato
     ContactNotLinkedToCompany=Contacto não vinculado a um Terceiro
     DolibarrLogin=Dolibarr - Iniciar Sessão
     NoDolibarrAccess=Sem Acesso
    -ExportDataset_company_1=Terceiros (empresas/fundações/pessoas físicas) e propriedades
    -ExportDataset_company_2=Contactos de Terceiro e Atributos
    -ImportDataset_company_1=Terceiros (empresas/fundações/pessoas físicas) e propriedades
    -ImportDataset_company_2=Contactos/Endereços (de terceiros ou não) e atributos
    -ImportDataset_company_3=Contas bancárias de terceiros
    -ImportDataset_company_4=Terceiros/Representantes de vendas (atribuir utilizadores representantes de vendas a terceiros)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Nível de preços
     DeliveryAddress=Direcção de Envío
     AddAddress=Adicionar Direcção
    @@ -402,16 +402,16 @@ DeleteFile=Eliminar ficheiro
     ConfirmDeleteFile=Tem a certeza que quer eliminar este ficheiro?
     AllocateCommercial=Atribuído a representante de vendas
     Organization=Organismo
    -FiscalYearInformation=Informação do Ano Fiscal
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Mês de Inicio do Exercício
    -YouMustAssignUserMailFirst=Você deve adicionar um e-mail a este utilizador de forma a permitir que este receba notificações por e-mail.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Para adicionar a funcionalidade de notificações por e-mail, você deve definir contactos com e-mails válidos para o terceiro.
    -ListSuppliersShort=Lista de fornecedores
    -ListProspectsShort=Lista das perspectivas
    -ListCustomersShort=Lista de clientes
    -ThirdPartiesArea=Área de Terceiros e Contactos
    -LastModifiedThirdParties=Últimos %s terceiros modificados
    -UniqueThirdParties=Total de originais terceiros
    +ListSuppliersShort=Lista de Fornecedores
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Aberto
     ActivityCeased=Fechado
     ThirdPartyIsClosed=O terceiro encontra-se fechado
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Risco alcançado
     OutstandingBill=Montante máximo para faturas pendentes
     OutstandingBillReached=Montante máximo para faturas pendente foi alcançado
     OrderMinAmount=Quantidade mínima para encomenda
    -MonkeyNumRefModelDesc=Devolve um número com formato %syymm-nnnn para os códigos clientes e %syymm-nnnn para os códigos de fornecedores, onde yy representa o ano, mm o mês e nnnn um contador sequencial que não quebra e não regressa a 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Código de cliente/fornecedor livre sem verificação. pode ser modificado em qualquer momento.
     ManagingDirectors=Nome Diretor(es) (DE, diretor, presidente ...)
     MergeOriginThirdparty=Terceiro duplicado (terceiro que deseja eliminar)
     MergeThirdparties=Gerir terceiros
    -ConfirmMergeThirdparties=Tem a certeza que pretende fundir este terceiro com o atual? Todos os objetos ligados a este serão movidos para o terceiro atual e depois o anterior será eliminado.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Os terceiros foram fundidos
     SaleRepresentativeLogin=Nome de utilizador do representante de vendas
     SaleRepresentativeFirstname=Primeiro nome do representante de vendas
     SaleRepresentativeLastname=Último nome do representante de vendas
     ErrorThirdpartiesMerge=Houve um erro ao eliminar os terceiros. Por favor, verifique o registo. As alterações foram revertidas.
    -NewCustomerSupplierCodeProposed=O código do cliente ou fornecedor sugerido encontra-se duplicado
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/pt_PT/errors.lang b/htdocs/langs/pt_PT/errors.lang
    index 0c6d157d662..d7d5889b447 100644
    --- a/htdocs/langs/pt_PT/errors.lang
    +++ b/htdocs/langs/pt_PT/errors.lang
    @@ -33,8 +33,8 @@ ErrorCustomerCodeAlreadyUsed=Código de cliente já utilizado
     ErrorBarCodeAlreadyUsed=Código de barras em utilização
     ErrorPrefixRequired=Prefixo obrigatório
     ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
    -ErrorSupplierCodeRequired=Código de fornecedor obrigatório
    -ErrorSupplierCodeAlreadyUsed=Vendor code already used
    +ErrorSupplierCodeRequired=Obrigatório código de fornecedor
    +ErrorSupplierCodeAlreadyUsed=Código de fornecedor já utilizado
     ErrorBadParameters=Parâmetros incorrectos
     ErrorBadValueForParameter=Valor errado '%s' para o parâmetro '%s'
     ErrorBadImageFormat=Image file has not a supported format (Your PHP does not support functions to convert images of this format)
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=&quot;%s&quot; Valor tem formato de data errado
     ErrorWrongDate=A data não está correcta!
     ErrorFailedToWriteInDir=Impossivel escrever na pasta %s
     ErrorFoundBadEmailInFile=Encontrada sintaxis incorrecta em email em %s linhas em Ficheiro (Exemplo linha %s com email=%s)
    -ErrorUserCannotBeDelete=O utilizador não pode ser eliminado. Pode estar associado a entidades do Dolibarr.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Não se indicaram alguns campos obrigatórios
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Erro na criação de uma pasta. Verifique se o usuário do servidor Web tem acesso de escrita aos documentos Dolibarr. Se o parâmetro <b> safe_mode </ b> está ativo no PHP, Verifique se os arquivos php do Dolibarr são da propriedade do usuário do servidor web.
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Por favor, preencha o valor para lista de selecção
     ErrorNoValueForCheckBoxType=Preencha o valor da lista da caixa de seleção
     ErrorNoValueForRadioType=Por favor, preencha o valor da lista
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=O campo <b>%s</b> não deve conter carácteres especiais
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Módulo de Contabilidade não activado
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=A configuração Dolibarr-LDAP é incompleta.
     ErrorLDAPMakeManualTest=Foi criado um Ficheiro .ldif na pasta %s. Trate de gerir manualmente este Ficheiro desde a linha de comandos para Obter mais detalhes acerca do erro.
    -ErrorCantSaveADoneUserWithZeroPercentage=Você não pode mudar uma ação de estado, se um usuário começou a realizante ação.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=A referencia utilizada para a criação já existe
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Falha ao eliminar o registo, pois tem alguns elementos associados.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=O objeto tem pelo menos um elemento do tipo %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    -ErrorModuleRequireJavascript=Javascript não deve ser desativado para que este recurso de trabalho. Para ativar / desativar o JavaScript, vá ao menu Home -> Configuração -> Mostrar.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
    +ErrorModuleRequireJavascript=Javascript não deve estar desativado para que esta funcionalidade funcione. Para ativar/desativar o JavaScript, vá para o menu Início->Configuração->Exibir.
     ErrorPasswordsMustMatch=Ambas as senhas digitadas devem corresponder entre si
    -ErrorContactEMail=Um erro técnico ocorreu. Por favor, contacte o administrador para seguir <b>%s</b> e-mail em fornecer os <b>%s</b> código de erro na sua mensagem, ou melhor ainda pela adição de uma cópia de tela da página.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Valor errado para o número <b>%s</b> campo (valor <b>&quot;%s&quot;</b> não coincide com <b>%s</b> regra regex)
     ErrorFieldValueNotIn=Valor errado para <b>%s</b> campo de número <b>(&quot;%s&quot;</b> de valor não é um valor disponível em <b>%s %s</b> campo de tabela)
     ErrorFieldRefNotIn=Valor errado para <b>%s</b> número de campo <b>(&quot;%s&quot;</b> valor não é um ref <b>%s</b> existente)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=O programa antivírus não foi capaz de validar o
     ErrorSpecialCharNotAllowedForField=Os caracteres especiais não são permitidos para o campo &quot;%s&quot;
     ErrorNumRefModel=Existe uma referência em banco de dados (%s) e não é compatível com esta regra de numeração. Remover registro ou renomeado de referência para ativar este módulo.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Erro na máscara
     ErrorBadMaskFailedToLocatePosOfSequence=Máscara de erro, sem número de seqüência
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Erro, o valor de reset ruim
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Erro. Selecione pelo menos uma entrada.
    -ErrorDeleteNotPossibleLineIsConsolidated=Excluir registro não é possível porque está ligado a uma transacção bancária conciliada
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s é atribuído a um terço
     ErrorFailedToSendPassword=Erro ao enviar a palavra-passe
     ErrorFailedToLoadRSSFile=Falha ao obter feed RSS. Tente adicionar MAIN_SIMPLEXMLLOAD_DEBUG constante se as mensagens de erro não fornecer informações suficientes.
    @@ -113,8 +115,9 @@ ErrorFailedToRunExternalCommand=Erro ao tentar o comando externo. verifique que
     ErrorFailedToChangePassword=Erro na modificação da palavra-passe
     ErrorLoginDoesNotExists=a conta de utilizador de <b>%s</b> não foi encontrado.
     ErrorLoginHasNoEmail=Este utilizador não tem e-mail. impossivel continuar.
    -ErrorBadValueForCode=Valor incorrecto para o código. volte a \ttentar com um Novo valor...
    +ErrorBadValueForCode=Valor incorreto para o código de segurança. Tente novamente com um novo valor...
     ErrorBothFieldCantBeNegative=Campos %s %s e não pode ser tanto negativo
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Conta de usuário utilizada para executar <b>%s</b> servidor web não tem permissão para que
     ErrorNoActivatedBarcode=Nenhum tipo de código de barras ativado
    @@ -138,7 +141,7 @@ ErrorBadFormat=Formato incorrecto!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,13 +174,13 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=Definiu um valor estimado para esta oportunidado/lead. Também deve inserir o seu estado
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
    -ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    +ErrorSupplierCountryIsNotDefined=O país para este fornecedor não está definido. Corrija isto primeiro.
     ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled.
     ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order.
     ErrorStockIsNotEnoughToAddProductOnInvoice=Stock is not enough for product %s to add it into a new invoice.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=Ficheiro não encontrado. É possível que a cha
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Já existe um marcador com este título o esta URL.
     WarningPassIsEmpty=Atenção:A palavra-passe da base de dados está vazia. ISto é um buraco na segurança. deve agregar uma palavra-passe á sua base de dados e alterar o seu Ficheiro conf.php para reflectir isto.
     WarningConfFileMustBeReadOnly=Atenção, seu arquivo de configuração <b>(htdocs / conf / conf.php)</b> pode ser substituído pelo servidor web. Esta é uma falha de segurança grave. Modificar permissões no arquivo a ser em modo de leitura apenas para usuário do sistema operacional usado pelo servidor web. Se você usa Windows e no formato FAT para o seu disco, você deve saber que este sistema de arquivos não permite adicionar permissões em arquivo, por isso não pode ser completamente seguro.
     WarningsOnXLines=<b>%s</b> em linhas de código Avisos
    -WarningNoDocumentModelActivated=Não existe um modelo para geração de documentos, foi ativado. A modelo será escolhida por padrão até que você verifique a configuração do módulo.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=Esta alerta seguirá activa mientras a pasta exista (alerta visivel para Os Utilizadores admin somente).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=A configuração das informações ClickToDial do seu utilizador não está completa (consulte o separador ClickToDial no sua ficha de utilizador).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=O seu login foi modificado. Por motivos de segurança, você terá que iniciar a sessão com seu novo login antes da próxima ação.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Aviso, o número de destinatários diferentes é limitado a <b> %s </b> ao usar as ações em massa em listas
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/pt_PT/interventions.lang b/htdocs/langs/pt_PT/interventions.lang
    index 895d64743bc..413d4dba8c6 100644
    --- a/htdocs/langs/pt_PT/interventions.lang
    +++ b/htdocs/langs/pt_PT/interventions.lang
    @@ -2,8 +2,9 @@
     Intervention=Intervenção
     Interventions=Intervenções
     InterventionCard=Ficha de intervenção
    -NewIntervention=Nova Intervenção
    +NewIntervention=Nova intervenção
     AddIntervention=Criar intervenção
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Lista de Intervenções
     ActionsOnFicheInter=Ações de intervenção
     LastInterventions=Últimas %s intervenções 
    @@ -50,9 +51,9 @@ UseServicesDurationOnFichinter=Utilizar a duração do serviço para as interven
     UseDurationOnFichinter=Oculta o campo de duração dos registos das intervenções
     UseDateWithoutHourOnFichinter=Oculta as horas e minutos campo de data dos registos das intervenções
     InterventionStatistics=Estatísticas das intervenções
    -NbOfinterventions=Número de fichas de intervenção
    -NumberOfInterventionsByMonth=Número de fcihas de intervenção por mês (data de validação)
    -AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
    +AmountOfInteventionNotIncludedByDefault=O montante da intervenção não é incluído, por defeito, no lucro (na maioria dos casos, os quadros de horários são usados ​​para contar o tempo gasto). Adicione a opção PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT com o valor 1 em Inicio->Configurações->Outras configurações para incluí-los.
     ##### Exports #####
     InterId=ID da intervenção
     InterRef=Ref. da intervenção
    diff --git a/htdocs/langs/pt_PT/main.lang b/htdocs/langs/pt_PT/main.lang
    index 5158a301118..d7a8f171d78 100644
    --- a/htdocs/langs/pt_PT/main.lang
    +++ b/htdocs/langs/pt_PT/main.lang
    @@ -49,22 +49,22 @@ ErrorGoToModuleSetup=Ir á configuração do módulo para corrigir
     ErrorFailedToSendMail=Erro ao envio do e-mail (emissor=%s, destinatário=%s)
     ErrorFileNotUploaded=Não foi possivel transferir o ficheiro
     ErrorInternalErrorDetected=Erro detectado
    -ErrorWrongHostParameter=Parâmetro Servidor inválido
    -ErrorYourCountryIsNotDefined=O seu país não está definido. Corrija em Configuração-Geral-Editar
    -ErrorRecordIsUsedByChild=Não foi possível eliminar este registo. Esta ser utilizado como pai pelo menos num registo filho.
    +ErrorWrongHostParameter=Parâmetro do hospedeiro inválido
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Valor incorrecto
     ErrorWrongValueForParameterX=Valor incorrecto do parâmetro %s
     ErrorNoRequestInError=Nenhuma petição em erro
    -ErrorServiceUnavailableTryLater=Serviço não disponivel actualmente. Volte a execução mais tarde.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicado num campo único
    -ErrorSomeErrorWereFoundRollbackIsDone=Encontraram-se alguns erros. Modificações desfeitas.
    -ErrorConfigParameterNotDefined=O parâmetro <b>%s</b> não está definido ao fichero de configuração Dolibarr <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Impossivel encontrar o utilizador <b>%s</b> na base de dados do Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Erro, nenhum tipo de IVA definido para o país '%s'.
     ErrorNoSocialContributionForSellerCountry=Erro, nenhum tipo de contribuição social definida para o país %s.
     ErrorFailedToSaveFile=Erro, o registo do ficheiro falhou.
    -ErrorCannotAddThisParentWarehouse=Está a tentar adicionar um armazém pai que já é filho do armazém atual
    -MaxNbOfRecordPerPage=Número máximo de registos por página
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Não tem permissão para efetuar essa operação
     SetDate=Definir data
     SelectDate=Seleccionar uma data
    @@ -78,10 +78,10 @@ FileRenamed=O ficheiro foi renomeado com sucesso
     FileGenerated=O ficheiro foi gerado com sucesso
     FileSaved=O ficheiro foi guardado com sucesso
     FileUploaded=O ficheiro foi enviado com sucesso
    -FileTransferComplete=Ficheiros foram carregados com sucesso
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=Ficheiros eliminados com sucesso
     FileWasNotUploaded=Um ficheiro foi seleccionada para ser anexado, mas ainda não foi carregado. Clique em 'Adicionar este Ficheiro' para anexar.
    -NbOfEntries=Nº de entradas
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Consultar ajuda online (necessita de acesso à Internet)
     GoToHelpPage=Ir para páginas de ajuda
     RecordSaved=Registo Guardado
    @@ -94,7 +94,7 @@ Undefined=Não Definido
     PasswordForgotten=Esqueceu-se da sua palavra-passe?
     NoAccount=Não possui conta?
     SeeAbove=Ver acima
    -HomeArea=Área Principal
    +HomeArea=Início
     LastConnexion=Ultima conexão
     PreviousConnexion=Conexão anterior
     PreviousValue=Valor anterior
    @@ -124,7 +124,7 @@ Yes=Sim
     no=Não
     No=Não
     All=Tudo
    -Home=Inicio
    +Home=Início
     Help=Ajuda
     OnlineHelp=Ajuda On-line
     PageWiki=Página Wiki
    @@ -142,6 +142,7 @@ Closed=Fechado
     Closed2=Fechado
     NotClosed=Não fechado
     Enabled=Activado
    +Enable=Ativar
     Deprecated=Obsoleto
     Disable=Desactivar
     Disabled=Desactivado
    @@ -153,7 +154,7 @@ Update=Atualizar
     Close=Fechar
     CloseBox=Remover widget do painel
     Confirm=Confirmar
    -ConfirmSendCardByMail=Deseja enviar o conteúdo desta ficha por email para <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Eliminar
     Remove=Remover
     Resiliate=Cancelar
    @@ -327,7 +328,7 @@ Copy=Copiar
     Paste=Colar
     Default=Predefinição
     DefaultValue=Valor Predefinido
    -DefaultValues=Valores predefinidos
    +DefaultValues=Default values/filters/sorting
     Price=Preço
     PriceCurrency=Preço (moeda)
     UnitPrice=Preço Unitário
    @@ -347,7 +348,7 @@ AmountTTCShort=Montante (IVA inc.)
     AmountHT=Montante (sem IVA)
     AmountTTC=Montante (IVA inc.)
     AmountVAT=Montante do IVA
    -MulticurrencyAlreadyPaid=Montante pago, moeda original
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Montante por pagar, moeda original
     MulticurrencyPaymentAmount=Montante do pagamento, moeda original
     MulticurrencyAmountHT=Montante (sem IVA), moeda original
    @@ -428,7 +429,7 @@ ActionNotApplicable=Não aplicável
     ActionRunningNotStarted=Não Iniciado
     ActionRunningShort=Em progresso
     ActionDoneShort=Terminado
    -ActionUncomplete=Incompleta
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Os últimos %s eventos relacionados
     CompanyFoundation=Empresa/Organização
     Accountant=Contabilista
    @@ -453,8 +454,8 @@ Generate=Gerar
     Duration=Duração
     TotalDuration=Duração total
     Summary=Resumo
    -DolibarrStateBoard=Estatísticas da base-de-dados
    -DolibarrWorkBoard=Abrir painel de itens
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=Nenhum elemento aberto para processar
     Available=Disponível
     NotYetAvailable=Ainda não disponivel
    @@ -468,7 +469,7 @@ and=e
     or=ou
     Other=Outro
     Others=Outros
    -OtherInformations=Outras Informações
    +OtherInformations=Other information
     Quantity=quantidade
     Qty=Quant.
     ChangedBy=Modificado por
    @@ -506,7 +507,7 @@ None=Nenhum
     NoneF=Nenhuma
     NoneOrSeveral=Nenhum ou vários
     Late=Atraso
    -LateDesc=O tempo de atraso predefinido que define se um determinado registo está atrasado ou não depende da configuração do sistema. Peça ao seu administrador do sistema para alterar o tempo de atraso predefinido.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Foto
     Photos=Fotos
    @@ -530,18 +531,6 @@ September=Setembro
     October=Outubro
     November=Novembro
     December=Dezembro
    -JanuaryMin=Janeiro
    -FebruaryMin=Fevereiro
    -MarchMin=Mar
    -AprilMin=Abril
    -MayMin=Maio
    -JuneMin=Junho
    -JulyMin=Julho
    -AugustMin=Agosto
    -SeptemberMin=Setembro
    -OctoberMin=Outubro
    -NovemberMin=Novembro
    -DecemberMin=Dezembro
     Month01=Janeiro
     Month02=Fevereiro
     Month03=Março
    @@ -646,6 +635,8 @@ SendMail=Enviar e-mail
     EMail=E-mail
     NoEMail=Sem e-mail
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Sem telefone móvel
     Owner=Proprietário
     FollowingConstantsWillBeSubstituted=As seguintes constantes serão substituidas pelo seu valor correspondente.
    @@ -677,7 +668,7 @@ NeverReceived=Nunca Recebido
     Canceled=Cancelado
     YouCanChangeValuesForThisListFromDictionarySetup=Pode alterar estes valores para esta lista a partir do menu Configuração -> Dicionários
     YouCanChangeValuesForThisListFrom=Pode alterar os valores desta lista a partir do menu %s
    -YouCanSetDefaultValueInModuleSetup=Você pode predefinir o valou a usar na criação de um novo registo na configuração de módulos.
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Cor
     Documents=Documentos
     Documents2=Documentos
    @@ -687,9 +678,9 @@ MenuECM=Documentos
     MenuAWStats=Estatisticas
     MenuMembers=Membros
     MenuAgendaGoogle=Agenda Google
    -ThisLimitIsDefinedInSetup=Límite Dolibarr (menu inicio-configuração-segurança): %s Kb, PHP limit: %s Kb
    +ThisLimitIsDefinedInSetup=Límite Dolibarr (Menu inicio->configuração->segurança): %s Kb, PHP limit: %s Kb
     NoFileFound=Não existem documentos guardados nesta pasta
    -CurrentUserLanguage=Idioma Actual
    +CurrentUserLanguage=Idioma atual
     CurrentTheme=Tema Actual
     CurrentMenuManager=Gestor de menu atual
     Browser=Browser
    @@ -716,15 +707,15 @@ Merge=Junção
     DocumentModelStandardPDF=Modelo PDF padrão
     PrintContentArea=Visualizar página para impressão área de conteúdo principal
     MenuManager=Gestão do menu
    -WarningYouAreInMaintenanceMode=Atenção, você está em um modo de manutenção, tão somente <b>%s</b> login é permitido o uso de aplicativos no momento.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Erro de sistema
     CoreErrorMessage=Ocorreu um erro. Contacte o seu administrador do sistema de forma a que este proceda à análise do relatórios ou desative a opção $dolibarr_main_prod=1 para obter mais informação.
     CreditCard=Cartão de crédito
     ValidatePayment=Validar pagamento
     CreditOrDebitCard=Cartão de crédito ou débito
     FieldsWithAreMandatory=Os campos com <b>%s</b> são obrigatórios
    -FieldsWithIsForPublic=Os campos com <b>%s</b> são mostrados na lista pública dos membros. Se você não quer isso, verificar o &quot;caixa&quot; do público.
    -AccordingToGeoIPDatabase=(De acordo com GeoIP conversão)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Linha
     NotSupported=Não é suportado
     RequiredField=Campo obrigatório
    @@ -732,6 +723,8 @@ Result=Resultado
     ToTest=Teste
     ValidateBefore=O cartão deve ser validado antes de usar esta funcionalidade
     Visibility=Visibilidade
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privado
     Hidden=Oculto
     Resources=Recursos
    @@ -750,6 +743,7 @@ LinkTo=Associar a
     LinkToProposal=Associar ao orçamento
     LinkToOrder=Hiperligação para encomendar
     LinkToInvoice=Associar a fatura
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Associar a encomenda ao fornecedor
     LinkToSupplierProposal=Associar ao orçamento de fornecedor
     LinkToSupplierInvoice=Associar a fatura do fornecedor
    @@ -758,6 +752,7 @@ LinkToIntervention=Associar a intervenção
     CreateDraft=Criar Rascunho
     SetToDraft=Voltar para o rascunho
     ClickToEdit=Clique para editar
    +ClickToRefresh=Click to refresh
     EditWithEditor=Editar com CKEditor
     EditWithTextEditor=Editar com editor de texto
     EditHTMLSource=Editar código-fonte HTML
    @@ -772,14 +767,14 @@ ByDay=Por dia
     BySalesRepresentative=Por representante de vendas
     LinkedToSpecificUsers=Associado ao contacto de um utilizador
     NoResults=Sem resultados
    -AdminTools=Ferramentas de administrador
    +AdminTools=Admin Tools
     SystemTools=Ferramentas do sistema
     ModulesSystemTools=Módulos de ferramentas
     Test=Teste
     Element=Elemento
     NoPhotoYet=Sem imagem disponível ainda
     Dashboard=Painel
    -MyDashboard=O meu painel
    +MyDashboard=My Dashboard
     Deductible=Dedutível
     from=Emissor
     toward=relativamente a
    @@ -802,7 +797,7 @@ PrintFile=Imprimir Ficheiro %s
     ShowTransaction=Mostrar transação
     ShowIntervention=Mostrar intervenção
     ShowContract=Mostrar contrato
    -GoIntoSetupToChangeLogo=Vá Início - Configurar - Empresa para alterar o logótipo ou vá a Início - Configurar - Exibir para ocultar.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Negar
     Denied=Negada
     ListOf=Lista de %s
    @@ -818,12 +813,12 @@ Sincerely=Atenciosamente
     DeleteLine=Apagar a linha
     ConfirmDeleteLine=Tem a certeza que deseja eliminar esta linha?
     NoPDFAvailableForDocGenAmongChecked=Não existia documento PDF disponível para a geração de documentos entre os registos assinalados
    -TooManyRecordForMassAction=Foram selecionados demasiados registos para a ação em massa. Esta ação está restringida a um número máximo de %s registos.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=Nenhum registo selecionado
     MassFilesArea=Área para os ficheiros criados através de ações em massa
     ShowTempMassFilesArea=Mostrar área para os ficheiros criados através de ações em massa
    -ConfirmMassDeletion=Confirmação de eliminação em massa
    -ConfirmMassDeletionQuestion=Tem certeza de que deseja eliminar o registo %s selecionado ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Objetos relacionados
     ClassifyBilled=Classificar como faturado
     ClassifyUnbilled=Classificar como não faturado
    @@ -841,7 +836,7 @@ Calendar=Calendario
     GroupBy=Agrupar por...
     ViewFlatList=Vista de lista
     RemoveString=Remover texto '%s'
    -SomeTranslationAreUncomplete=Algumas línguas podem estar apenas parcialmente traduzidas ou podem conter erros. Se detetar erros de tradução, pode ajudar na melhoria da tradução registando-se em <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Link de download direto (público/externo)
     DirectDownloadInternalLink=Link de download direto (precisa de ter sessão iniciada e precisa de permissões)
     Download=Download
    @@ -861,16 +856,25 @@ HR=RH
     HRAndBank=RH e Banco
     AutomaticallyCalculated=Calculado automaticamente
     TitleSetToDraft=Repôr para rascunho
    -ConfirmSetToDraft=Tem a certeza que pretende repôr para o estado de Rascunho?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=ID de importação
     Events=Eventos
    -EMailTemplates=Modelos de emails
    -FileNotShared=Ficheiro não partilhado
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projeto
     Projects=Projetos
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissões
     LineNb=Linha número
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Segunda-feira
     Tuesday=Terça-feira
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Intervenções
     SearchIntoContracts=contractos
     SearchIntoCustomerShipments=Expedições do cliente
     SearchIntoExpenseReports=Relatórios de despesas
    -SearchIntoLeaves=Licenças
    +SearchIntoLeaves=Leave
     CommentLink=Comentários
     NbComments=Número de comentários
     CommentPage=Espaço de comentários
     CommentAdded=Comentário adicionado
     CommentDeleted=Comentário eliminado
     Everybody=Todos
    -PayedBy=Pago por
    -PayedTo=Pago a
    +PayedBy=Paga por
    +PayedTo=Paid to
     Monthly=Mensal
     Quarterly=Trimestral
     Annual=Anual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local e Remoto
     KeyboardShortcut=Atalho de teclado
     AssignedTo=Atribuído a
     Deletedraft=Eliminar rascunho
    -ConfirmMassDraftDeletion=Confirmação da eliminação de rascunhos em massa
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=Ficheiro partilhado via link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=Você está atualmente no modo %s "sandbox"
    diff --git a/htdocs/langs/pt_PT/other.lang b/htdocs/langs/pt_PT/other.lang
    index 8aa53591b5b..19e25095a6c 100644
    --- a/htdocs/langs/pt_PT/other.lang
    +++ b/htdocs/langs/pt_PT/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Código de segurança
     NumberingShort=N°
     Tools=Utilidades
     TMenuTools=Ferramentas
    -ToolsDesc=Todas as ferramentas não incluídas noutras entradas do menu são colocadas aqui. <br><br> Todas as ferramentas podem ser alcançadas no menu à esquerda.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Aniversario
     BirthdayDate=Data de nascimento
     DateToBirth=Data de Nascimento
    @@ -23,7 +23,7 @@ MessageForm=Mensagem no formulário de pagamento online
     MessageOK=Mensagem na página validado o pagamento de retorno
     MessageKO=Mensagem na página de pagamento cancelado retorno
     ContentOfDirectoryIsNotEmpty=O diretório não está vazio.
    -DeleteAlsoContentRecursively=Selecione para eliminar todo o conteúdo recursivamente
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Ano da data da fatura
     PreviousYearOfInvoice=Ano anterior à data da fatura
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Ano seguinte à data da fatura
     DateNextInvoiceBeforeGen=Data da próxima fatura (antes da geração)
     DateNextInvoiceAfterGen=Data da próxima fatura (após geração)
     
    -Notify_FICHINTER_ADD_CONTACT=Adicionado contato à intervenção
    -Notify_FICHINTER_VALIDATE=Intervenção validada
    -Notify_FICHINTER_SENTBYMAIL=Intervenções enviadas por correio
     Notify_ORDER_VALIDATE=Pedido do cliente validado
     Notify_ORDER_SENTBYMAIL=Pedido do cliente enviado pelo correio
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Para fornecedor enviada por correio
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Encomenda a fornecedor registada
     Notify_ORDER_SUPPLIER_APPROVE=Fornecedor fim aprovado
     Notify_ORDER_SUPPLIER_REFUSE=Fornecedor fim recusado
     Notify_PROPAL_VALIDATE=Orçamento validado
    -Notify_PROPAL_CLOSE_SIGNED=Orçamento para cliente fechado, assinado
    -Notify_PROPAL_CLOSE_REFUSED=Orçamento para cliente fechado, recusado
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Orçamento enviado por correio
     Notify_WITHDRAW_TRANSMIT=Retirada de transmissão
     Notify_WITHDRAW_CREDIT=Retirada de crédito
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Terceiro criado
     Notify_COMPANY_SENTBYMAIL=Emails enviadas a partir da ficha de terceiros
     Notify_BILL_VALIDATE=Fatura do cliente validada
     Notify_BILL_UNVALIDATE=Fatura do cliente não validada
    -Notify_BILL_PAYED=Fatura a cliente paga
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Fatura do cliente cancelada
     Notify_BILL_SENTBYMAIL=Fatura do cliente enviada pelo correio
     Notify_BILL_SUPPLIER_VALIDATE=Fatura do fornecedor validado
    -Notify_BILL_SUPPLIER_PAYED=Fatura do fornecedor paga
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Fatura do fornecedor enviada por correio
     Notify_BILL_SUPPLIER_CANCELED=Fatura do fornecedor cancelada
     Notify_CONTRACT_VALIDATE=Contrato validado
     Notify_FICHEINTER_VALIDATE=Intervenção validado
    +Notify_FICHINTER_ADD_CONTACT=Adicionado contato à intervenção
    +Notify_FICHINTER_SENTBYMAIL=Intervenções enviadas por correio
     Notify_SHIPPING_VALIDATE=Transporte validado
     Notify_SHIPPING_SENTBYMAIL=Envio por correio
     Notify_MEMBER_VALIDATE=Membro validado
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Criação do projeto
     Notify_TASK_CREATE=Tarefa criada
     Notify_TASK_MODIFY=Tarefa modificada
     Notify_TASK_DELETE=Tarefa eliminada
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Veja a configuração do módulo %s
     NbOfAttachedFiles=Número Ficheiros/Documentos anexos
     TotalSizeOfAttachedFiles=Tamanho Total dos Ficheiros/Documentos anexos
     MaxSize=Tamanho Máximo
    -AttachANewFile=Adicionar Novo Ficheiro/documento
    +AttachANewFile=Adicionar um novo documento/ficheiro
     LinkedObject=Objecto adjudicado
    -NbOfActiveNotifications=Número de notificações
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Exmos. Srs.,)__\n\nIrá encontrar aqui o orçamento __REF__\n\n\n__(Com os melhores cumprimentos,)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -165,14 +168,14 @@ SizeUnitinch=polegada
     SizeUnitfoot=pé
     SizeUnitpoint=ponto
     BugTracker=Incidencias
    -SendNewPasswordDesc=Este formulário permite que você solicite uma nova palavra-passe. Esta solicitação será enviada para seu endereço de e-mail.<br>A alteração entrará em vigor quando você clicar no link de confirmação no e-mail.<br>Verifique sua caixa de entrada.
    +SendNewPasswordDesc=Este formulário permite-lhe solicitar uma nova palavra-passe. Esta será enviada para o seu endereço de e-mail.<br>A alteração será aplicada quando clicar na hiperligação de confirmação na mensagem.<br>Verifique a sua caixa de entrada.
     BackToLoginPage=Voltar à página de iniciar a sessão
     AuthenticationDoesNotAllowSendNewPassword=o modo de autenticação de Dolibarr está configurado como "<b>%s</b>".<br>em este modo Dolibarr não pode conocer ni modificar a sua palavra-passe<br>Contacte com a sua administrador para conocer as modalidades de alterar.
     EnableGDLibraryDesc=Instale ou ative a biblioteca GD na instalação do PHP para usar esta opção.
     ProfIdShortDesc=<b>ID Prof. %s</b> é uma informação dependente do país do Terceiro.<br>Por Exemplo, para o país  <b>%s</b>, é o código <b>%s</b>.
     DolibarrDemo=Demo de Dolibarr ERP/CRM
     StatsByNumberOfUnits=Estatísticas para o somatório da quantidade de produtos/serviços
    -StatsByNumberOfEntities=Estatísticas em número de entidades referentes (número de fatura, ou ordem...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Número de orçamentos
     NumberOfCustomerOrders=Número de encomendas de clientes
     NumberOfCustomerInvoices=Número de faturas a clientes
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Número de unidades em faturas a clientes
     NumberOfUnitsSupplierProposals=Número de unidades nos orçamentos de fornecedor
     NumberOfUnitsSupplierOrders=Número de unidades em encomendas a fornecedores
     NumberOfUnitsSupplierInvoices=Número de unidades nas faturas de fornecedores
    -EMailTextInterventionAddedContact=Foi atribuída uma nova intervenção, %s, a si.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Intervenção %s validados
     EMailTextInvoiceValidated=A fatura %s foi validada.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=O orçamento %s foi validado.
     EMailTextProposalClosedSigned=O orçamento %s foi fechado e assinado.
     EMailTextOrderValidated=O %s pedido foi validado.
    @@ -197,14 +201,18 @@ EMailTextOrderApprovedBy=Pedido %s Aprovado por %s
     EMailTextOrderRefused=Pedido %s Reprovado
     EMailTextOrderRefusedBy=Pedido %s Reprovado por %s
     EMailTextExpeditionValidated=O envio %s foi validado.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importação conjunto de dados
     DolibarrNotification=Notificação automática
    -ResizeDesc=Digite a nova largura <b>ou</b> altura nova. Razão será mantida durante o redimensionamento ...
    +ResizeDesc=Insira a nova largura <b>OU</b> altura. A proporção será mantida durante o redimensionamento...
     NewLength=Nova largura
     NewHeight=Nova altura
    -NewSizeAfterCropping=Novo tamanho após a corte
    -DefineNewAreaToPick=Definir nova área na imagem para escolher (clique na imagem à esquerda, em seguida, arraste até chegar ao canto oposto)
    -CurrentInformationOnImage=Esta ferramenta foi projetada para ajudá-lo a redimensionar ou recortar uma imagem. Esta é informação sobre a imagem editada atual
    +NewSizeAfterCropping=Novo tamanho depois de recortar
    +DefineNewAreaToPick=Definir nova área na imagem para escolher (clique esquerdo na imagem e depois arraste até chegar ao canto oposto)
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=editor de imagem
     YouReceiveMailBecauseOfNotification=Você recebe essa mensagem porque seu e-mail foi adicionado à lista de metas a serem informados de eventos particulares no software %s %s de.
     YouReceiveMailBecauseOfNotification2=Este evento é o seguinte:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=A sua palavra-passe deve ter pelo menos estes
     YourPasswordHasBeenReset=A sua palavra-passe foi reposta com sucesso
     ApplicantIpAddress=Endereço IP do requerente
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Área de Exportações
    diff --git a/htdocs/langs/pt_PT/projects.lang b/htdocs/langs/pt_PT/projects.lang
    index 6030196741d..a7b4655ac3e 100644
    --- a/htdocs/langs/pt_PT/projects.lang
    +++ b/htdocs/langs/pt_PT/projects.lang
    @@ -8,7 +8,7 @@ ProjectStatus=Estado do projeto
     SharedProject=Toda a Gente
     PrivateProject=Contactos do Projeto
     ProjectsImContactFor=Projetos nos quais sou um contacto
    -AllAllowedProjects=All project I can read (mine + public)
    +AllAllowedProjects=Todos os projetos que eu posso ler (meus + público)
     AllProjects=Todos os Projetos
     MyProjectsDesc=This view is limited to projects you are a contact for
     ProjectsPublicDesc=Esta visualização apresenta todos os projetos que está autorizado a ler.
    @@ -24,8 +24,8 @@ TasksDesc=Esta visualização apresenta todos os projetos e tarefas (as suas per
     AllTaskVisibleButEditIfYouAreAssigned=All tasks for qualified projects are visible, but you can enter time only for task assigned to selected user. Assign task if you need to enter time on it.
     OnlyYourTaskAreVisible=Only tasks assigned to you are visible. Assign task to yourself if it is not visible and you need to enter time on it.
     ImportDatasetTasks=Tarefas dos projetos
    -ProjectCategories=Project tags/categories
    -NewProject=Novo Projeto
    +ProjectCategories=Etiquetas/categorias de projeto
    +NewProject=Novo projeto
     AddProject=Criar Projeto
     DeleteAProject=Apagar um Projeto
     DeleteATask=Apagar uma Tarefa
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Tem certeza de que deseja eliminar este projeto?
     ConfirmDeleteATask=Tem certeza de que deseja eliminar esta tarefa?
     OpenedProjects=Projetos abertos
     OpenedTasks=Abrir tarefas
    -OpportunitiesStatusForOpenedProjects=Quantia das oportunidades de projetos abertos, por estado
    -OpportunitiesStatusForProjects=Quantia das oportunidades de projetos, por estado
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Mostrar Projeto
     ShowTask=Ver tarefa
     SetProject=Definir Projeto
     NoProject=Nenhum projeto definido ou possuído
    -NbOfProjects=Nr. de Projetos
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Tempo Dispendido
     TimeSpentByYou=Tempo gasto por você
     TimeSpentByUser=Tempo gasto pelo utilizador
    @@ -61,7 +61,7 @@ Task=Tarefa
     TaskDateStart=Data de início da tarefa
     TaskDateEnd=Data do fim da tarefa
     TaskDescription=Descrição da tarefa
    -NewTask=Nova Tarefa
    +NewTask=Nova tarefa
     AddTask=Criar Tarefa
     AddTimeSpent=Create time spent
     AddHereTimeSpentForDay=Add here time spent for this day/task
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Ir para a lista de tarefas
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Lista de orçamentos associados com o projeto
    -ListOrdersAssociatedProject=Lista de encomendas de clientes associadas ao projeto
    -ListInvoicesAssociatedProject=Lista de faturas a clientes associadas ao projeto
    -ListPredefinedInvoicesAssociatedProject=Lista de faturas modelo de clientes associadas ao projeto
    -ListSupplierOrdersAssociatedProject=Lista de notas de encomenda de fornecedores associadas ao projeto
    -ListSupplierInvoicesAssociatedProject=Lista de faturas de fornecedores associadas ao projeto
    -ListContractAssociatedProject=Lista de Contratos Associados ao Projeto
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Lista de intervenções associadas ao projeto
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Lista de eventos associados ao projeto
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -138,7 +139,7 @@ CloneTaskFiles=Clone task(s) joined files (if task(s) cloned)
     CloneMoveDate=Atualizar as datas dos projetos/tarefas a partir de agora?
     ConfirmCloneProject=Tem a certeza de que deseja clonar este projeto?
     ProjectReportDate=Alterar as datas das tarefas de acordo com a nova data de início do projeto
    -ErrorShiftTaskDate=Impossible to shift task date according to new project start date
    +ErrorShiftTaskDate=Impossível deslocar a data da tarefa de acordo com a data de início do novo projeto
     ProjectsAndTasksLines=Projetos e tarefas
     ProjectCreatedInDolibarr=Projeto %s criado
     ProjectValidatedInDolibarr=Projeto %s validado
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Projeto %s, modificado
     TaskCreatedInDolibarr=%s tarefas criadas
     TaskModifiedInDolibarr=%s tarefas modificadas
     TaskDeletedInDolibarr=%s tarefas apagadas
    -OpportunityStatus=Estado da oportunidade
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Estado da Opu.
    -OpportunityProbability=Probabilidade da oportunidade
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Montante da oportunidade
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Colaborador
     SelectElement=Selecionar elemento
     AddElement=Ligar ao elemento
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Carga de trabalho prevista
     PlannedWorkloadShort=Workload
     ProjectReferers=Itens relacionados
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projetos com este utilizador como contacto
     TasksWithThisUserAsContact=Tarefas atribuídas a este utilizador
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Atribuir 
     ProjectOverview=Resumo
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Usar projetos para seguir leads/oportunidades
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Projeto/lead aberto, por estado de oportunidade
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Projetos abertos, por terceiros
    -OnlyOpportunitiesShort=Apenas oportunidades
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Não é uma oportunidade
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospeção
     OppStatusQUAL=Qualificação
     OppStatusPROPO=Orçamento
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=O projeto %s deve estar ativo para ser desativado
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/ro_RO/admin.lang b/htdocs/langs/ro_RO/admin.lang
    index fd9c282f388..586b425787c 100644
    --- a/htdocs/langs/ro_RO/admin.lang
    +++ b/htdocs/langs/ro_RO/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Dezvoltare
     VersionUnknown=Necunoscut
     VersionRecommanded=Recomandat
     FileCheck=Cercetarea integrității fișierelor
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler pentru a salva sesiunile
     SessionSavePath=Storage sesiune localizare
     PurgeSessions=Goleşte sesiunile
     ConfirmPurgeSessions=Chiar vrei să ștergi toate sesiunile? Acest lucru va deconecta fiecare utilizator (cu excepția dvs.).
    -NoSessionListWithThisHandler=Salvaţi sesiunea de manipulare configurat în PHP nu vă permite pentru a lista toate sesiunile de rulare.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Blocare  conexiuni noi
    -ConfirmLockNewSessions=Sunteţi sigur că doriţi să restricţionaţi oricare noău conexiune Dolibarr pentru tine. Numai utilizatorul <b>%s</b> va fi capabil să se conecteze după aceea.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Înlăturaţi blocarea  conexiunii
     YourSession=Sesiuniea dvs
    -Sessions=Sesiune utilizatori
    +Sessions=Users sessions
     WebUserGroup=Web Server utilizator / grup
    -NoSessionFound=PHP pare a nu permite  listarea sesiunilor active. Directorul folosit pentru salvarea sesiunilor <b>(%s)</b> ar putea fi protejat (De exemplu, de permisiunile SO sau de directiva PHP  open_basedir ).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Set caractere  al bazei de date pentru  stocarea datelor
     DBSortingCharset=Set caractereal bazei de date pentru sortarea datelor
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Utilizator extern
     InternalUsers=Utilizatori interni
     ExternalUsers=Utilizatori externi
     GUISetup=Afişare
    -SetupArea=CONFIGURARE
    +SetupArea=Setări
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Formular pentru testarear încărcării de  fişiere (în funcţie de configurare)
     IfModuleEnabled=Notă: Da este folositor numai dacă modul  <b>%s</b> este activat
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Codul nu poate conţine valoarea 0
     DisableJavascript=Dezactivează funcţiile JavaScript si Ajax (Recomandat pentru persoanele oarbe sau browserele text )
     UseSearchToSelectCompanyTooltip= De asemenea, dacă aveți un număr mare de terţi (> 100 000), puteți crește viteza prin setarea constantei COMPANY_DONOTSEARCH_ANYWHERE la 1 la Setup->Other. Căutarea va fi limitată la începutul șirului.
     UseSearchToSelectContactTooltip=De asemenea, dacă aveți un număr mare de terţi (> 100 000), puteți crește viteza prin setarea constantei COMPANY_DONOTSEARCH_ANYWHERE la 1 la Setup->Other. Căutarea va fi limitată la începutul șirului.
    -DelaiedFullListToSelectCompany=Așteptați să apăsați o cheie înainte de a încărca conținutul listei combo a terților (Aceasta poate crește performanța dacă aveți un număr mare de terțe părți, dar este mai puțin convenabil)
    -DelaiedFullListToSelectContact=Așteptați să apăsați o cheie înainte de a încărca conținutul listei combo de contacte (Aceasta poate crește performanța dacă aveți un număr mare de contacte, dar este mai puțin convenabil)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nr caractere pentru a declanşa căutare: %s
     NotAvailableWhenAjaxDisabled=Nu este disponibil, atunci când Ajax cu handicap
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview nu este disponibil
     ThemeCurrentlyActive=Tema activă în prezent
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Datele sunt stocate și returnate de către serverul de baze de date ca și în cazul în care au fost păstrate ca șiruri transmise. Timezone are efect numai atunci când se utilizează funcția UNIX_TIMESTAMP (care nu ar trebui să fie utilizate de către Dolibarr, astfel TZ al bazei de date ar trebui să aibă nici un efect, chiar dacă sa schimbat după ce a fost introduse date).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Spaţiu
     Table=Tabel
     Fields=Câmpuri
    @@ -111,14 +111,14 @@ NotConfigured=Modulul / aplicația nu a fost configurată
     Active=Activ
     SetupShort=Setări
     OtherOptions=Alte opţiuni
    -OtherSetup=Alte Setări
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Separator zecimal
     CurrentValueSeparatorThousand=Separator mii
     Destination=Destinaţii
     IdModule=ID Modul
     IdPermissions=ID Permisiuni
     LanguageBrowserParameter=Parametru %s
    -LocalisationDolibarrParameters=Parametrii Localizare
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Time Zone client (utilizator)
     ClientHour=Client Time(utilizator)
     OSTZ=Time Zone Server OS
    @@ -126,8 +126,8 @@ PHPTZ=Time Zone Server PHP
     DaylingSavingTime=Ora de vară (utilizator)
     CurrentHour=Timp  PHP (server)
     CurrentSessionTimeOut=Sesiunea curentă timeout
    -YouCanEditPHPTZ=Pentru a seta un alt fus orar PHP (nu este necesar), puteți încerca să adăugați un fișier .htaccess cu o linie precum "SetEnv TZ Europe / Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgeturi
     MaxNbOfLinesForBoxes=Număr maxim de linii pentru widgeturi
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignorați erorile de înregistrare duplicat (INSERT IGNOR
     AutoDetectLang=Autodetect (browser limbă)
     FeatureDisabledInDemo=Funcţonalitate dezactivată în demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgeturile sunt componente care prezintă unele informații pe care le puteți adăuga pentru a personaliza unele pagini. Aveți posibilitatea să alegeți între afișarea widget-ului sau nu, selectând pagina țintă și făcând clic pe "Activare" sau făcând clic pe coșul de gunoi pentru a-l dezactiva.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Numai elementele din <a href="%s"> module activate </a> sunt afişate.
    -ModulesDesc=Modulele Dolibarr definesc ce aplicație / caracteristică este activată în software. Unele aplicații / module necesită permisiuni pe care trebuie să le acordați utilizatorilor, după activarea acestora. Faceți clic pe butonul On / Off pentru a activa un modul / aplicație.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Puteți descărca mai multe module de pe site-uri externe de pe Internet ...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Găsiți aplicația / modulele externe
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Nou
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, market place oficial  pentru  module externe Dolibarr ERP / CRM
    -DoliPartnersDesc=Lista companiilor care oferă module sau caracteristici dezvoltate personalizate (Notă: oricine are experiență în programarea PHP poate oferi dezvoltare personalizată pentru un proiect open source)
    -WebSiteDesc=Site-uri web de referință pentru a găsi mai multe module ...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgeturi disponibile
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Nu stoca parole în mod clar în baza de date
     MainDbPasswordFileConfEncrypted=Baza de date parola criptat în conf.php
     InstrucToEncodePass=Pentru a fi parola codificată în dosarul <b>conf.php</b>, înlocuiţi linia  <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Pentru a avea o parolă decodificată în fișierul <b> conf.php </b>, înlocuiți linia <br> <b> $dolibarr_main_db_pass = "cripted:..."; </b> <br> cu <br> <b> $ dolibarr_main_db_pass = "%s"; </br>
    -ProtectAndEncryptPdfFiles=Protecţie a generat pdf (nu recommandd, pauzele de masă PDF Generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protecția unui document PDF îi permite să fie citit și imprimat cu orice browser PDF. Cu toate acestea, editarea și copierea nu mai sunt posibile. Rețineți că utilizarea acestei funcții face  nefunctională construirea unui fișier PDF global .
     Feature=Funcţionalitate
     DolibarrLicense=Licenţa
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=Pentru utilizator sau developer documentaţia (doc, FAQs ...), <br> aruncăm o privire la Dolibarr Wiki: <br> <a href="%s" target="_blank"><b> %s</b></a>
     ForAnswersSeeForum=Pentru orice alte întrebări / ajutor, se poate utiliza Dolibarr forum: <br> <a href="%s" target="_blank"><b> %s</b></a>
    -HelpCenterDesc1=Această zonă vă poate ajuta să obţineţi un suport de Ajutor de servicii pe Dolibarr.
    -HelpCenterDesc2=Unii o parte din acest serviciu sunt disponibile <b>numai</b> în limba <b>engleză.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Gestionarul meniu curent
     MeasuringUnit=Unitate de măsură
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Perioadă notita
     NewByMonth=New by month
     Emails=E-mailuri
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP Port (în mod implicit în <b>php.ini: %s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP-gazdă (în mod implicit în <b>php.ini: %s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP Port (Nu este definită în PHP pe Unix, cum ar fi sisteme)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP-gazdă (Nu este definită în PHP pe Unix, cum ar fi sisteme)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Trimite un mod sistematic ascunse carbon copie a tuturor e-mailuri trimise la
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Metoda de a folosi pentru a trimite email-uri
    -MAIN_MAIL_SMTPS_ID=SMTP ID-ul de autentificare necesare în cazul în
    -MAIN_MAIL_SMTPS_PW=SMTP parola, dacă se cere autentificare
    -MAIN_MAIL_EMAIL_TLS= Utilizaţi  criptare TLS (SSL)
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Dezactivaţi toate trimiteri SMS (în scopuri de testare sau demo-uri)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Metoda de  utilizare  pentru  trimiterea SMS-urilor
    -MAIN_MAIL_SMS_FROM=Numărul de telefon expeditor implicit   pentru trimiterea de SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Caracteristicã nu sunt disponibile pe Unix, cum ar fi sisteme. Testaţi-vă sendmail program la nivel local.
    -SubmitTranslation=Dacă traducerea este incompletă sau găsiți erori, puteți corecta prin editarea fișierului în directorul <b>langs/%s</b> și trimite schimbările la www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Configurare Modul
     ModulesSetup=Configurare Module / Aplicație
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Nu utilizaţi în producţie
     ThisIsProcessToFollow=Acestia sunt pasii proiectului:
     ThisIsAlternativeProcessToFollow=Aceasta este o configurare alternativă de procesare manuală:
     StepNb=Pasul %s
    -FindPackageFromWebSite=Găsiţi un pachet care ofera facilitate dorit (de exemplu, pe site-ul web %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Descărcați pachetul (de exemplu de pe site-ul web oficial %s).
    -UnpackPackageInDolibarrRoot=Despachetați fișierele arhivate în directorul server dedicat Dolibarr: <b> %s </b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Implementarea modulului a fost terminată. Cu toate acestea, trebuie să activați și să configurați modulul în aplicație, accesând pagina pentru configurarea modulelor: <a href="%s"> %s </a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=Directorul rădăcină alternativ nu este atribuit unui director existent. <br>
     InfDirAlt=De la versiunea 3, este posibil să se definească un director rădăcină alternativ. Acest lucru vă permite să stocați, într-un director dedicat, plug-in-uri și șabloane personalizate. <br> Doar creați un director in rădăcina Dolibarr (de exemplu: personalizat).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr versiunea curentă
     CallUpdatePage=Accesați pagina care actualizează structura și datele bazei de date: %s.
     LastStableVersion=Ultima versiune stabilă
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Întârziere pentru caching de export de răspuns în câteva secunde (0 sau gol pentru nici un cache)
     DisableLinkToHelpCenter=Ascundere link-ul <b>"Aveţi nevoie de ajutor sau sprijin"</b> de la pagina de login
     DisableLinkToHelp=Ascunde link-ul Ajutor Online "<b>%s</b>"
    -AddCRIfTooLong=Nu exista un ambalaj, aşa că, dacă este linia de documente pe pagină, pentru că prea mult timp, trebuie să adăugaţi-vă revine transportului în textarea.
    -ConfirmPurge=Sigur doriți să executați această curatare? <br> Aceasta va șterge definitiv toate fișierele de date, fără a le putea restabili (fișiere ECM, fișiere atașate ...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Lungimea minimă
     LanguageFilesCachedIntoShmopSharedMemory=Fişierele  .lang încărcate în memorie partajata
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Exemple cu care rulează curent setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Lista de directoare OpenDocument template-uri
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Numărul de şabloane fişiere ODT/ODS   găsite în acele directoare
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Exemple de sintaxa: <br> c: mydir \\ <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Pentru a şti cum să vă creaţi şabloane DOCX, ODT documente, înainte de a le stoca în aceste directoare, citiţi documentaţia wiki:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Pentru a utiliza Web Services (parametru &quot;dolibarrk
     TestSubmitForm=Intrare test de formă
     ThisForceAlsoTheme=Folosind acest meniu managerul va folosi, de asemenea, propria temă tot ce este alegerea de către utilizator. De asemenea, acest manager de meniu specializat pentru smartphone-uri nu functioneaza pe toate smartphone-uri. Utilizaţi un alt manager de meniu, dacă aveţi probleme pe a ta.
     ThemeDir=Director Teme
    -ConnectionTimeout=Conexiune timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Răspuns timeout
     SmsTestMessage=Mesaj de test de la PHONEFROM__ __ la __ PHONETO__
     ModuleMustBeEnabledFirst=Modulul <b> %s</b> trebuie să fie activat daca aveti nevoie de aceasta functie
     SecurityToken=Cheia pentru URL-uri sigure
    -NoSmsEngine=Nu expeditor SMS Manager disponibile. SMS expeditor manager nu sunt instalate implicit cu distribuţia (deoarece depinde de un furnizor extern), dar puteţi găsi unele pe http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Puteţi seta opţiunile de fiecare globale referitoare la generarea PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Reguli de creare a casetelor adresa
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Ascunde descrierea produselor pe PDF ul generat
     HideRefOnPDF=Ascunde ref. produs pe PDF ul generat
     HideDetailsOnPDF=Ascunde detaliile liniilor de produs în PDF-ul generat
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametrii pentru a asigura URL-uri
     SecurityTokenIsUnique=Utilizaţi un unic parametru securekey pentru fiecare URL
     EnterRefToBuildUrl=Introduceţi de referinţă pentru %s obiect
     GetSecuredUrl=Obţineţi URL-ul calculat
    -ButtonHideUnauthorized=Ascundeți butoanele pentru utilizatorii care nu sunt administratori pentru acțiuni neautorizate, în loc să apară butoane dezactivate în culoarea gri.
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Vechea rată TVA
     NewVATRates=Noua rată TVA
     PriceBaseTypeToChange=Modifică la prețuri cu valoarea de referință de bază definit pe
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select Listă
     ExtrafieldSelectList = Select din tabel
     ExtrafieldSeparator=Separator (nu un câmp)
     ExtrafieldPassword=Parolă
    -ExtrafieldRadio=Butoane radio (numai la alegere)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Casetele de selectare
     ExtrafieldCheckBoxFromList=Căsuțele de selectare din tabel
     ExtrafieldLink=Link către un obiect
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Link implicit
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Atenție, această valoare poate fi suprascrisă de setările specifice utilizatorului (fiecare utilizator poate seta propriul url clicktodial)
     ExternalModule=Modul extern - instalat în directorul %s
    -BarcodeInitForThirdparties=Init cod de bare în  masă pentru terţi
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Init sau reset cod de bare în  masă pentru produse şi servicii
     CurrentlyNWithoutBarCode=În prezent, aveti <strong> %s </strong>inregistrari pe <strong> %s</strong> %s fără cod de bare definit.
     InitEmptyBarCode=Valoare inițializare pentru următoarele %s înregistrări goale
     EraseAllCurrentBarCode=Ștergeți toate valorile curente de coduri de bare 
     ConfirmEraseAllCurrentBarCode=Sigur doriți să ștergeți toate valorile actuale ale codurilor de bare?
     AllBarcodeReset=Toate valorile codurilor de bare au fost eliminate
    -NoBarcodeNumberingTemplateDefined=Niciun model numeric de cod de bare disponibil in configurarea modulului cod de bare
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Afiseaza adresa societatii
     DisplayCompanyManagers=Afiseaza nume manager
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Câmp
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Utilizatori & grupuri
    +Module0Name=Utilizatorii & Grupuri
     Module0Desc=Managementul Utilizatorilor/Angajaților și Grupurilor
    -Module1Name=Terţi
    +Module1Name=Third Parties
     Module1Desc=Managementul terţilor (societăţi, particulari) şi contactelor
     Module2Name=Comercial
     Module2Desc=Management Comercial
     Module10Name=Contabilitate
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Oferte
     Module20Desc=Managementul Ofertelor Comerciale
     Module22Name=Emailing
    @@ -511,13 +517,13 @@ Module52Desc=Managementul Stocurilor (produse)
     Module53Name=Servicii
     Module53Desc=Managementul Serviciilor
     Module54Name=Contracte / Abonamente
    -Module54Desc=Managementul contractelor (servicii sau abonamente periodice)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Coduri de bare
     Module55Desc=Coduri de bare "de gestionare a
     Module56Name=Telefonie
     Module56Desc=Telefonie integrare
     Module57Name=Ordine de plată bancare directe
    -Module57Desc=Managementul ordinelor de plată prin debit direct. Acesta include generarea de fișiere SEPA pentru țările europene.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=ClickToDial integrare
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Ordine de deplasare şi Note de Cheltuieli
     Module75Desc=Managementul Ordinele de deplasare şi Notelor de Cheltuieli
     Module80Name=Livrări
     Module80Desc=Managementul Livrărilor şi a Recepţiilor
    -Module85Name=Banca si Casa
    +Module85Name=Banks and Cash
     Module85Desc=Managementul conturilor bancare şi in numerar
    -Module100Name=Site Extern
    -Module100Desc=Includeţi orice site web externe Dolibarr în meniuri şi vizualiza într-o ramă Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman şi SIP
     Module105Desc=Interfaţă Mailman sau SPIP pentru modul membru
     Module200Name=LDAP
    -Module200Desc=LDAP directorul de sincronizare
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integrare
     Module240Name=Exportul de date
    -Module240Desc=Instrument pentru a exporta date Dolibarr (cu asistenți)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Date importurile
    -Module250Desc=Instrument pentru a importa date în Dolibarr (cu asistenți)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Membri
     Module310Desc=Fundatia membri de management
     Module320Name=Feed RSS
     Module320Desc=Adauga RSS feed interiorul Dolibarr ecran pagini
    -Module330Name=Marcaje
    -Module330Desc=Management bookmark-uri
    -Module400Name=Proiecte / Oportunitati  / Prospecți
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integrare
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Plata salariilor angajaților
    -Module510Desc=Înregistrați și urmați plata salariilor angajaților dvs.
    +Module510Desc=Record and track employee payments
     Module520Name=Credit
     Module520Desc=Gestionarea creditelor
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donatii
     Module700Desc=MAnagementul Donaţiilor
     Module770Name=Rapoarte Cheltuieli
    -Module770Desc=Managementul rapoartelor de cheltuieli (transport, masă, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Generarea de documente de poștă electronică in masa
     Module1780Name=Tag-uri / Categorii
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=Fckeditor
    -Module2000Desc=Permite modificarea unor zone din text folosind un editor avansat (Bazat pe CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Preţuri dinamice
     Module2200Desc=Activați utilizarea expresii matematice pentru prețuri
     Module2300Name=Joburi programate
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Evenimente / Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Activați serviciile serverului Dolibarr SOAP care furnizează se
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Activați Servicii web a clientului Dolibarr  (Poate fi folosit pentru a da date / cererile de servere externe. Doar Comenzi Furnizor sunt acceptate  pentru moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Folosiţi serviciul online Gravatar (www.gravatar.com) pentru a arăta fotografie de utilizatori / membri (găsit cu mesajele de poştă electronică). Aveţi nevoie de un acces la internet
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP conversii Maxmind capacităţile
     Module3100Name=Skype
     Module3100Desc=Adăugați un buton Skype la utilizatori / terțe parti / contacte / membri
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-societate
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Managementul cererilor de concedii
    -Module20000Desc=Declară şi urmăreşte cererile de concedii ale angajaţilor
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lotul sau numărul de serie, consumul de date manuale și vânzări pe produse
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Punct de Vanzare
     Module50100Desc=Modulul Punct de vânzări (POS)
    +Module50150Name=Punct de vânzări
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=PayPal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Contabilitate (avansat)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=Print lP IPrinter
    -Module54000Desc=Imprimare directă (fără a deschide documentele) folosind interfața CUPS IPP (imprimanta trebuie să fie vizibilă de pe server și CUPS trebuie să fie instalat pe server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Sondaj, supraveghere sau vot
    -Module55000Desc=Modulul pentru a face sondaje online, supravegheri sau voturi (cum ar fi Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marje
     Module59000Desc=Modul management marje
     Module60000Name=Comisioane
     Module60000Desc=Modul management comisioane
     Module62000Name=Incoterm
    -Module62000Desc=Adaugă functionalitati  pentru  gestionarea  Incoterm
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resurse
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Citeşte facturi
    @@ -651,9 +661,9 @@ Permission32=Creare / Modificare produse / servicii
     Permission34=Ştergere produse / servicii
     Permission36=Exportul de produse / servicii
     Permission38=Exportul de produse
    -Permission41=Citeste proiectele și sarcinile (proiect comun și proiecte pentru care eu sunt persoana de contact). Se poate intoduce, de asemenea, timpul consumat cu sarcinile atribuite (Timesheet), pentru mine sau pentru ierarhia mea, 
    -Permission42=Creați / modificați proiecte (proiecte și proiecte comune pentru care sunt persoana de contact). De asemenea, se pot crea sarcini și atribui proiecte și sarcini utilizatorilor.
    -Permission44=Ştergere proiecte
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export proiecte
     Permission61=Citeşte intervenţii
     Permission62=Creare / Modificare intervenţii
    @@ -686,7 +696,7 @@ Permission109=Ştergere sendings
     Permission111=Citeşte conturile financiare
     Permission112=Crea / modifica / delete şi compara tranzacţiile
     Permission113=Configurare conturi financiare( creare, gestionare categorii)
    -Permission114=Tranzactii Reconciliate
    +Permission114=Reconcile transactions
     Permission115=Tranzacţii de export şi în declaraţiile
     Permission116=Transferuri între conturile
     Permission117=Gestionare cecuri de expediţie
    @@ -694,15 +704,15 @@ Permission121=Citiţi cu terţe părţi legate de utilizator
     Permission122=Creare / Modificare terţe părţi legate de utilizator
     Permission125=Ştergere terţe părţi legate de utilizator
     Permission126=Export terţi
    -Permission141=Citește toate proiectele și sarcinile (inclusiv proiectele private pentru care nu sunt persoană de contact)
    -Permission142=Creați/modificați toate proiectele și sarcinile (inclusiv proiectele private pentru care nu sunt persoană de contact)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Şterge toate proiectele și sarcinile (inclusiv proiectele private pentru care nu sunt persoană de contact)
     Permission146=Citiţi cu furnizorii
     Permission147=Citeşte stats
     Permission151=Citiți comenzile de plată prin debitare directă
     Permission152=Creați/modificați un ordin de plată prin debit direct
     Permission153=Trimite/transmite ordine de plată prin debit direct
    -Permission154=Inregistreaza creditarea / respingerea ordinelor de plată prin debitare directă
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Citește contracte / abonamente
     Permission162=Creare / modificare contracte / abonamente
     Permission163=Activează un serviciu / abonament al unui contract
    @@ -725,7 +735,7 @@ Permission187=Inchide furnizor ordinelor
     Permission188=Anulare furnizor ordinelor
     Permission192=Creaţi linii
     Permission193=Anulare linii
    -Permission194=Citiţi cu latimea de banda de linii
    +Permission194=Read the bandwidth lines
     Permission202=Creaţi conexiuni ADSL
     Permission203=Ordinul de conexiuni ordinelor
     Permission204=Ordinul de conexiuni
    @@ -750,12 +760,12 @@ Permission244=A se vedea conţinutul ascunse categorii
     Permission251=Citiţi cu alţi utilizatori şi grupuri
     PermissionAdvanced251=Citeste alţi utilizatori
     Permission252=Creare / Modificare altor utilizatori, grupuri şi a ta permisssions
    -Permission253=Modificare de alţi utilizatori parola
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Crearea / modificarea utilizatorii interni / externi şi permisiuni
     Permission254=Ştergere sau dezactiva alţi utilizatori
     Permission255=Creaţi / modifica propriile informaţii de utilizator
     Permission256=Modificare propria parolă
    -Permission262=Extindeți accesul la toate părțile terțe (nu numai terțelor părți al căror utilizator este un reprezentant de vânzari). <br> Nu este utilizabil pentru utilizatorii externi (doar pentru uz intern, pentru propuneri, ordine, facturi, contracte etc.). <br> Nu este utilizabil pentru proiecte (doar reguli privind permisiunile de proiect, aspecte de vizibilitate și de atribuire).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Citeşte CA
     Permission272=Citeşte facturi
     Permission273=Problema facturilor
    @@ -765,7 +775,7 @@ Permission283=Ştergere contacte
     Permission286=Exportaţi contacte
     Permission291=Citeşte tarife
     Permission292=Setaţi permisiunile cu privire la tarifele de
    -Permission293=Modificare clienti tarife
    +Permission293=Modify customers tariffs
     Permission300=Citiţi cu coduri de bare
     Permission301=Creare / Modificare coduri de bare
     Permission302=Ştergere coduri de bare
    @@ -787,11 +797,9 @@ Permission401=Citiţi cu reduceri
     Permission402=Creare / Modificare reduceri
     Permission403=Validate reduceri
     Permission404=Ştergere reduceri
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Şterge salarii
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salarii
     Permission520=Citeşte credite
     Permission522=Creare/modificare credite
    @@ -844,8 +852,8 @@ Permission1251=Run masa importurile de date externe în baza de date (date de sa
     Permission1321=Export client facturi, atribute şi plăţile
     Permission1322=Reopen a paid bill
     Permission1421=Export client ordinele şi atribute
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Şterge cererile de concediu
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Tipuri terţi
    -DictionaryCompanyJuridicalType=Forme Legale Terti
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Nivel potenţial Prospect
     DictionaryCanton=Regiune / Judeţ
     DictionaryRegion=Regiuni
    @@ -894,7 +902,7 @@ DictionaryVAT=Cote TVA sau Cote Taxe Vanzări
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Conditiile de plata
     DictionaryPaymentModes=Moduri plată
    -DictionaryTypeContact=Tipuri Contact/adresă
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (DEEE)
     DictionaryPaperFormat=Formate hârtie
    @@ -908,47 +916,47 @@ DictionarySource=Originea ofertei  / comenzi
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Model pentru plan de conturi
     DictionaryAccountancyJournal=Jurnalele contabile
    -DictionaryEMailTemplates=Șabloane e-mailuri 
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Unităţi
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Tipuri concedii
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup salvate
     SetupNotSaved=Setup not saved
     BackToModuleList=Inapoi la lista de module
    -BackToDictionaryList=Inapoi la lista de dicţionare
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=TVA-ul de management
    -VATIsUsedDesc=În mod implicit, când se creează perspective, facturi, comenzi etc., rata TVA respectă regula standard activă: <br> Dacă vânzătorul nu este supus TVA, valoarea TVA este implicit 0. Sfârșitul regulii. <br> Dacă (țara de vânzare = tara de cumpărare), atunci TVA-ul este implicit egal cu TVA-ul produsului în țara de vânzare. Sfârșitul regulii. <br> Dacă vânzătorul și cumpărătorul sunt ambele în Comunitatea Europeană, iar bunurile sunt produse de transport (mașină, navă, avion), TVA-ul implicit este 0 (TVA trebuie plătit de cumpărător la vama țării sale și nu la vânzător). Sfârșitul regulii. <br> Dacă vânzătorul și cumpărătorul sunt ambele în Comunitatea Europeană, iar cumpărătorul nu este o companie, atunci TVA-ul este implicit TVA-ul produsului vândut. Sfârșitul regulii. <br> Dacă vânzătorul și cumpărătorul sunt ambii în Comunitatea Europeană, iar cumpărătorul este o companie, atunci TVA este 0 în mod prestabilit. Sfârșitul regulii. <br> În orice alt caz, valoarea implicită propusă este TVA = 0. Sfârșitul regulii.
    -VATIsNotUsedDesc=În mod implicit propuse de TVA este 0, care poate fi utilizat pentru cazuri ca asociaţiile, persoane fizice ou firme mici.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rată
     LocalTax1IsNotUsed=Nu utilizează taxa secundă
    -LocalTax1IsUsedDesc=Utilizează un al doilea tip de taxă ( altul decât TVA )
    -LocalTax1IsNotUsedDesc=Nu utilizează un al tip de taxă ( altul decât TVA )
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Tip secund taxă
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Nu utilizează taxa treia
    -LocalTax2IsUsedDesc=Utilizează un al treilea tip de taxă ( altul decât TVA )
    -LocalTax2IsNotUsedDesc=Nu utilizează un al tip de taxă ( altul decât TVA )
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Tipul trei al taxei
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= Rata de RE, în mod implicit atunci când perspectivele crearea, facturi, comenzi etc urmeze regula activă standard: <br> Dacă te cumpărător nu este supus la RE, RE implicit = 0. Sfârşitul regulă. <br> În cazul în care cumpărătorul este supus la RE apoi RE în mod implicit. Sfârşitul regulă. <br>
    -LocalTax1IsNotUsedDescES= În mod implicit RE propus este 0. Sfârşitul regulă.
    -LocalTax1IsUsedExampleES= În Spania sunt profesionisti supuse unor secţiuni specifice ale IAE spaniole.
    -LocalTax1IsNotUsedExampleES= În Spania sunt profesionişti şi societăţile şi sub rezerva la anumite secţiuni ale IAE spaniole.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= Rata de RE, în mod implicit atunci când perspectivele crearea, facturi, comenzi etc urmeze regula activă standard: <br> În cazul în care vânzătorul nu este supus IRPF, apoi IRPF implicit = 0. Sfârşitul regulă. <br> În cazul în care vânzătorul este supus IRPF apoi IRPF în mod implicit. Sfârşitul regulă. <br>
    -LocalTax2IsNotUsedDescES= În mod implicit propus IRPF este 0. Sfârşitul regulă.
    -LocalTax2IsUsedExampleES= În Spania, liber profesionişti şi specialişti independenţi, care presta servicii şi companiile care au ales sistemul de impozitare de module.
    -LocalTax2IsNotUsedExampleES= În Spania nu sunt afaceri care fac obiectul sistemului de impozitare de module.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=În mod implicit RE propus este 0. Sfârşitul regulă.
    +LocalTax1IsUsedExampleES=În Spania sunt profesionisti supuse unor secţiuni specifice ale IAE spaniole.
    +LocalTax1IsNotUsedExampleES=În Spania sunt profesionişti şi societăţile şi sub rezerva la anumite secţiuni ale IAE spaniole.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=În mod implicit propus IRPF este 0. Sfârşitul regulă.
    +LocalTax2IsUsedExampleES=În Spania, liber profesionişti şi specialişti independenţi, care presta servicii şi companiile care au ales sistemul de impozitare de module.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Rapoarte pe taxe locale
     CalcLocaltax1=Vânzări - Cumpârări
     CalcLocaltax1Desc=Rapoarte Taxe Locale este calcult ca diferenţă dintre taxele locale de vanzare şi taxele locale de cumparare
    @@ -958,7 +966,8 @@ CalcLocaltax3=Vânzări
     CalcLocaltax3Desc=Rapoarte Taxe Locale este totalul taxelor locale de vanzare
     LabelUsedByDefault=Eticheta utilizat în mod implicit în cazul în care nu poate fi găsit de traducere pentru codul
     LabelOnDocuments=Eticheta de pe documente
    -NbOfDays=Nr zile
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=La sfârşitul lunii
     CurrentNext=Current/Next
     Offset=Decalaj
    @@ -984,7 +993,7 @@ DatabaseUser=Baza de date de utilizator
     DatabasePassword=Baza de date parola
     Tables=Tabele
     TableName=Nume Tabel
    -NbOfRecord=Nr  înregistrări
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver de tip
     SummarySystem=Sistemul de informaţii rezumat
    @@ -996,7 +1005,7 @@ Skin=Tema vizuală
     DefaultSkin=Tema vizuală Implicită
     MaxSizeList=Lungime  max pentru lista
     DefaultMaxSizeList=Lungime max implicită pentru lista
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Mesajul zilei
     MessageLogin=Mesaj pagina login
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Formular de căutare permanent in meniu din  stânga
     DefaultLanguage=Limba folosita  implicit (cod limba)
     EnableMultilangInterface=Activaţi multilingv interfaţă
     EnableShowLogo=Afişare logo în meniul stânga
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Nume
     CompanyAddress=Adresă
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Titular de cont bancar %s
     BankModuleNotActive=Conturi bancare de module nu a permis
     ShowBugTrackLink=Arată link-ul "<strong>%s</strong>"
     Alerts=Alerte
    -DelaysOfToleranceBeforeWarning=Toleranta întârzieri înainte de avertisment
    -DelaysOfToleranceDesc=Acest ecran vă permite să definiţi de tolerat întârzieri înainte de o alertă este raportat de pe ecran cu picto %s târziu, pentru fiecare element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Întârziere acceptată (în zile) înainte de a alerta cu privire la evenimentele planificate (evenimentele de pe ordinea de zi) care nu au fost finalizate încă
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Întârziere acceptată (în zile) înainte de a alerta cu privire la comenzile care nu au fost procesate încă
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Întârziere toleranță (în zile) înainte de alertă cu privire la propunerile de a închide
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Toleranţă întârziere (în zile) înainte de alertă cu privire la propuneri nu facturat
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Toleranta întârziere (în zile) înainte de alertă cu privire la servicii, pentru a activa
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Toleranta întârziere (în zile) înainte de alertă cu privire la serviciile expirat
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Toleranta întârziere (în zile) înainte de alertă cu privire la facturile neachitate furnizorului
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Toleranta întârziere (în zile) înainte de alertă cu privire la facturile neachitate de client
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Toleranta întârziere (în zile) înainte de alertă în aşteptarea de pe banca de reconciliere
    -Delays_MAIN_DELAY_MEMBERS=Toleranta întârziere (în zile) înainte de alertă privind taxa de membru întârziat
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Toleranta întârziere (în zile) înainte de alertă pentru cecuri de depozit pentru a face
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=\nZona de configurare este pentru parametrii de configurare inițiali înainte de a începe să se utilizeze Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Alte meniul intrări gestiona parametri opţionali.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Audit de securitate evenimente
     Audit=Audit
     InfoDolibarr=Despre Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Puteţi activa jurnalul de evenimente de securitate Dolibarr aici.
     AreaForAdminOnly=Parametrii de configurare pot fi setați numai de <b> utilizatorii administratori </b>.
     SystemInfoDesc=Sistemul de informare este diverse informaţii tehnice ai citit doar în modul şi vizibil doar pentru administratori.
     SystemAreaForAdminOnly=Această zonă este disponibil numai pentru utilizatorii de administrator. Nici una din Dolibarr permisiunile pot reduce această limită.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Puteţi alege fiecare parametru legate de Dolibarr aspect aici
     AvailableModules=Available app/modules
     ToActivateModule=Pentru a activa modulele, du-te la zona de configurare.
     SessionTimeOut=Time out pentru sesiune
    -SessionExplanation=Acest număr de sesiune se va garanta că nu expiră înainte de această întârziere. Dar PHP sessoin de management nu garanţie că întotdeauna sesiune expira după această întârziere: Acest lucru se produce în cazul în care un sistem pentru a curăţa cache-ul de sesiune se execută. <br> Notă: cu nici un sistem special, interne PHP proces va curat la fiecare sesiune <b>despre %s / %s</b> de acces, dar numai în timpul acces făcute de alte sesiuni.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Disponibil declanşează
    -TriggersDesc=Declanşările sunt fişiere care vor modifica comportamentul Dolibarr flux de lucru, o dată copiată în directorul <b>htdocs / includes / declanşează.</b> Ei realizate de noi acţiuni, pe activat Dolibarr evenimente (crearea de noi societăţi, factura de validare, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Declanşările în acest dosar sunt dezactivate <b>de-NoRun</b> sufix în numele lor.
     TriggerDisabledAsModuleDisabled=Declanşările în acest dosar sunt dezactivate ca <b>modul %s</b> este dezactivat.
     TriggerAlwaysActive=Declanşările în acest dosar sunt întotdeauna activ, ce sunt activate Dolibarr module.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Introduceți toate datele de referință. Puteți adăuga valoril
     ConstDesc=Această pagină vă permite să editați toți ceilalți parametri care nu sunt disponibili în paginile anterioare. Acestia sunt în principal parametrii rezervați pentru dezvoltatori sau soluții avansate de depanare. Pentru o listă de opțiuni <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site-deschide într-o fereastră nouă" target="_blank"> verificați aici </a>.
     MiscellaneousDesc=Toți ceilalți parametri legați de securitate sunt definiți aici.
     LimitsSetup=Limitele / Precizie
    -LimitsDesc=Puteţi defini limitele, preciziile şi optimizarile utilizate de către Dolibarr aici
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Zecimale max pentru preturi unitare
     MAIN_MAX_DECIMALS_TOT=Zecimale max pentru preturi totale
     MAIN_MAX_DECIMALS_SHOWN=Zecimale max pentru  preţurile afişate pe ecran (Adăugaţi <b>...</b> după acest număr, dacă doriţi să vezi <b>...</b> când numărul este trunchiat atunci când sunt afişate pe ecran)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=preţul unitar net al unui produs
     TotalPriceAfterRounding=Pret total (net / TVA / inclusiv fiscale) după rotunjirea
     ParameterActiveForNextInputOnly=Parametru de eficient pentru următoarea intrare numai
     NoEventOrNoAuditSetup=Nici un eveniment de securitate a fost înregistrată încă. Acest lucru poate fi normală de audit, dacă nu a fost activată la "setup - securitate - audit" paginii.
    -NoEventFoundWithCriteria=Nici un eveniment de securitate a fost găsit pentru o astfel de criterii de căutare.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Vedeţi-vă locale sendmail setup
     BackupDesc=Pentru a face o copie de siguranţă completă de Dolibarr, trebuie să:
     BackupDesc2=Salvați conținutul directorului de documente (<b> %s</b>) care conține toate fișierele încărcate și generate (Deci include toate fișierele dump generate la pasul 1).
    -BackupDesc3=Salvați conținutul bazei dvs. de date (<b> %s</b>) într-un fișier dump. Pentru aceasta, puteți utiliza următorul asistent.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Arhivat directorul trebuie să fie depozitate într-un loc sigur.
     BackupDescY=Generate de fişier de imagine memorie trebuie să fie depozitate într-un loc sigur.
    -BackupPHPWarning=Backupul nu poate fi garantat cu această metodă. Preferă una precedent
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Pentru a restabili o Dolibarr de rezervă, trebuie să:
    -RestoreDesc2=Restaurați fișierul arhivă (de exemplu fișierul zip) din directorul de documente pentru a extrage arborele fișierelor in directorul de documente al unei noi instalări Dolibarr sau în acest director curent de documente (<b> %s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restaurați datele, dintr-un fișier de memorie de rezervă, în baza de date a noii instalări Dolibarr sau în baza de date a instalării curente (<b> %s</b>). Avertisment, odată ce restaurarea este terminată, trebuie să utilizați o autentificare/parolă, care a existat atunci când a fost efectuată copia de rezervă, pentru a vă conecta din nou. Pentru a restaura o bază de date de rezervă în această instalare curentă, puteți urmari acest asistent.
     RestoreMySQL=MySQL import
     ForcedToByAModule= Această regulă este obligat <b>la %s</b> către un activat modulul
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Trebuie să rulaţi această co
     YourPHPDoesNotHaveSSLSupport=SSL funcţii nu sunt disponibile în PHP dvs.
     DownloadMoreSkins=Mai multe teme de  descărcat
     SimpleNumRefModelDesc=Întoarce numărul de referinţă cu formatul %syymm-NNNN unde YY este anul, MM este luna şi NNNN este o secvenţă, fără gaură şi fără a nu putea suporta
    -ShowProfIdInAddress=Arată id professionnal cu adrese pe documente
    -ShowVATIntaInAddress=Ascunde  codul TVA Intra  cu adresa pe documente
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Parţială traducere
    -MAIN_DISABLE_METEO=Dezactivează meteo vedere
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Testaţi logati pentru a API
    -ProxyDesc=Unele caracteristici ale Dolibarr trebuie să aibă acces la Internet pentru a lucra. Definirea aici parametrii pentru aceasta. Dacă serverul Dolibarr se află în spatele unui server proxy, acei parametri Dolibarr spune cum de a accesa Internetul prin ea.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Extern de acces
     MAIN_PROXY_USE=Utilizaţi un server proxy (acces direct la internet altfel)
     MAIN_PROXY_HOST=Numele / adresa de server proxy
     MAIN_PROXY_PORT=Portul de server proxy
     MAIN_PROXY_USER=Autentifica-te pentru a utiliza server proxy
     MAIN_PROXY_PASS=Parolă pentru a utiliza server proxy
    -DefineHereComplementaryAttributes=Definiţi aici toate atributele, care nu sunt deja disponibile în mod implicit, şi că doriţi să fie sprijinite pentru %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Atribute complementare
     ExtraFieldsLines=Atribute complementare (linii)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Atribute complementare (linii de comandă)
     ExtraFieldsSupplierInvoicesLines=Atribute complementare (linii de facturare)
     ExtraFieldsThirdParties=Atribute complementare ( terţi)
    -ExtraFieldsContacts=Atribute complementare (contact/addresă )
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Atribute complementare (membri)
     ExtraFieldsMemberType=Atribute complementare (tip membri)
     ExtraFieldsCustomerInvoices=Atribute complementare (facturi)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=numai caractere minuscule,  alfanumerice fără
     SendmailOptionNotComplete=Atenţie, pe unele sisteme Linux, pentru a trimite e-mail de la e-mail, sendmail configurare execuţie trebuie să conatins optiunea-ba (mail.force_extra_parameters parametri în fişierul php.ini). Dacă nu unor destinatari a primi e-mailuri, încercaţi să editaţi acest parametru PHP cu mail.force_extra_parameters =-BA).
     PathToDocuments=Cale de acces documente
     PathDirectory=Director
    -SendmailOptionMayHurtBuggedMTA=Functionalitate pentru a trimite mesaje utilizând metoda "mail PHP direct" va genera un mesaj e-mail care nu s-ar putea să fie corect interpretat de către unele servere de e-mail . Rezultatul este că unele mail-uri nu pot fi citite de unele persoane . Este cazul unor furnizori de Internet (Ex: Orange în Franţa). Aceasta nu este o problemă în Dolibarr nici în PHP, dar primesc pe serverul de poştă electronică. Puteţi adăuga toate acestea, opţiunea MAIN_FIX_FOR_BUGGED_MTA la 1 în configurare - pentru a modifica alte Dolibarr pentru a evita acest lucru. Cu toate acestea, este posibil să aveţi probleme cu alte servere care sens strict standard SMTP. Altă soluţie (recommanded) este de a utiliza metoda "SMTP socket bibliotecă", care nu are dezavantaje.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Configurarea traducerii
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Aplicație / module activate: <b> %s </b> / <b> %s </b>
     YouMustEnableOneModule=Trebuie activat cel puţin 1 modul
    -ClassNotFoundIntoPathWarning=Clasa %s negăsită în calea PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Da în vară
    -OnlyFollowingModulesAreOpenedToExternalUsers=Rețineți, numai următoarele module sunt deschise utilizatorilor externi (indiferent de permisiunea unor astfel de utilizatori) și numai dacă au fost acordate permisiuni:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Stocarea sesiune criptată prin Suhosin
     ConditionIsCurrently=Condiția este momentan %s
    -YouUseBestDriver=Utilizaţi driverul %s care este cel mai bun driver disponibil acum.
    -YouDoNotUseBestDriver=Utilizaţi driverul %s dar driverul %s este recomandat.
    -NbOfProductIsLowerThanNoPb=Aveți doar % s produse / servicii în baza de date. Aceasta nu necesită  nicio optimizare specială.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Optimizare căutare
    -YouHaveXProductUseSearchOptim=Aveți  % s produse în baza de date. Ar trebui să adăugați   constanta PRODUCT_DONOTSEARCH_ANYWHERE la 1 în Acasă-Setup-Altele, să limitați căutarea la începutul siruri de caractere ţi a face posibil ca baza de date să utilizeze indexul și să obțineți un răspuns imediat.
    -BrowserIsOK=Folosiţi navigatorul web %s. Acest navigator este ok pentru performanţă şi securitate.
    -BrowserIsKO=Folosiţi  browser-ul % s. Acest browser-ul pare a fi o alegere proasta pentru securitate, performanță și fiabilitate. Noi recomandam sa folositi Firefox, Chrome, Opera sau Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug este încărcat.
     XCacheInstalled=XCache este încărcată.
    -AddRefInList=Afișează ref client / furnizor în lista (listă select sau combobox) și mai multe hyperlinkuri. Terții vor apare cu numele "CC12345 - SC45678 - The big company coorp", în loc de "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Editarea  campului %s
     FillThisOnlyIfRequired=Exemplu: +2 (completați numai dacă problemele decalajjului fusului orar sunt cunoscute)
     GetBarCode=Dă codbare
     ##### Module password generation
     PasswordGenerationStandard=Întoarceţi-vă o parolă generate în funcţie de interne Dolibarr algoritmul: 8 caractere care conţin numere în comun şi în caractere minuscule.
    -PasswordGenerationNone=Nu sugera nici o parolă generată . Parola trebuie să fie introdusă manual.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail necesare pentru a crea un utilizator nou
     HRMSetup=Configurare Modul HRM
     ##### Company setup #####
     CompanySetup=Setări Modul Terţi
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=Funcția notificări prin e-mail permite trimiterea de email-uri automate pentru anumite evenimente Dolibarr. Recipienții notificărilor pot fi definiți.
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documente şabloane
    -DocumentModelOdt=Generare din modelele OpenDocument (Fichier .ODT ou .ODS OpenOffice, KOffice, TextEdit…)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark pe schiţa de document
     JSOnPaimentBill=Activaţi funcţia de autocompletare a liniilor de plata pe formularul de plată
    -CompanyIdProfChecker=Professional ID unic
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Trebuie sa fie unic?
    -MustBeMandatory=Este obligatorie crearea unor terțe părți?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Este obligatorie validarea facturilor?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=O export se leagă de <b>format %s</b> este disponibil la următoarea adresă: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=O export se leagă de <b>format %s</b> este disponibil la
     BillsSetup=Facturi modul de configurare
     BillsNumberingModule=Facturi şi note de credit, modul de numerotare
     BillsPDFModules=Factura modele de documente
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Nota de credit
     CreditNotes=Credit note
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Gestiona un Autentificare pentru fiecare membru
     AdherentMailRequired=EMail necesare pentru a crea un nou membru
     MemberSendInformationByMailByDefault=Validare pentru a trimite mail de confirmare a membrilor este în mod implicit
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parametrii
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test căutare LDAP
     LDAPSynchroOK=Sincronizare încercare reuşită
     LDAPSynchroKO=Eşuare încercare de sincronizare
    -LDAPSynchroKOMayBePermissions=Eşuare încercare de sincronizare. Verificaţi dacă conexiune la serverul este configurat corect şi permite LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=TCP se conecteze la serverul LDAP de succes (Server= %s, port= %s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=TCP se conecteze la serverul LDAP a eşuat (Server= %s, port= %s)
    -LDAPBindOK=Conectare/Autentificare la  serverul LDAP cu succes (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=Conectare / Authentificate la serverul LDAP a eşuat (Server= %s, port= %s, %s= admin, parola= %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configurat pentru versiunea 3
     LDAPSetupForVersion2=LDAP server configurat pentru versiunea 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Exemplu: samaccountname
     LDAPFieldFullname=Prenume Nume
     LDAPFieldFullnameExample=Exemplu: NC
    -LDAPFieldPasswordNotCrypted=Parola nu Crypted
    -LDAPFieldPasswordCrypted=Parola Crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Exemplu: userPassword
     LDAPFieldCommonNameExample=Exemplu: NC
     LDAPFieldName=Nume
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Exemplu de valori sunt proiectate pentru <b>OpenLDAP</b> încărcate cu următoarele scheme: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Dacă utilizaţi thoose valori şi OpenLDAP, vă modifica LDAP fişier de configurare <b>slapd.conf</b> de a avea toate thoose scheme încărcate.
     ForANonAnonymousAccess=Pentru un acces autentificat (pentru o scriere de exemplu)
     PerfDolibarr=Raport performanţă setări/optimizări
    -YouMayFindPerfAdviceHere=Veți găsi pe această pagină unele verificări sau sfaturi privind performanţa.
    -NotInstalled=Neinstalat,  astfel serverul dvs nu este încetinit de acesta.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Cache aplicativ
     MemcachedNotAvailable=Niciun cache aplicatie găsit. Puteți îmbunătăți performanța prin instalarea unui server de cache memcached și un modul capabil de a utiliza acest server cache. <br>Mai multe informatii aici <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.\n<br>Rețineți că o mulțime de furnizor de web hosting nu oferă astfel de server de cache.
     MemcachedModuleAvailableButNotSetup=Modulul memcahed pentru aplicarea cache este găsit dar nu este configurat complet
     MemcachedAvailableAndSetup=Modulul Memcached  pentru a utiliza serverul memcached este activat.
     OPCodeCache=Cache OPCode
    -NoOPCodeCacheFound=Niciun cache Opcode găsit. Puteţi să folosiți un alt cache Opcode decât XCache sau eAccelerator (bun), poate nu ai cache Opcode (foarte rău).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache pentru resursele statice (CSS, img, javascript)
     FilesOfTypeCached=Fișierele de tip %s sunt puse în cache de serverul HTTP
     FilesOfTypeNotCached=Fișierele de tip %s nu sunt puse în cache de serverul HTTP
     FilesOfTypeCompressed=Fișierele de tip %s sunt comprimate de serverul HTTP
     FilesOfTypeNotCompressed=Fișierele de tip %s nu sunt comprimate de serverul HTTP
     CacheByServer=Cache pe server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache pe browser
     CompressionOfResources=Compresie a răspunsului HTTP
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=O astfel de detectare automată nu este posibilă cu browserele curente
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Produse modul de configurare
     ServiceSetup=Servicii de modul de configurare
     ProductServiceSetup=Produse şi Servicii de module de configurare
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=Max număr de produse din combos selectaţi liste (0= nici o limită)
    -ViewProductDescInFormAbility=Vizualizare descrierile de produs, în forme (de altfel ca popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Vizualizarea descrierii produsului in limba terței părți.
    -UseSearchToSelectProductTooltip=De asemenea, dacă aveți un număr mare produse (> 100 000), puteți crește viteza prin setarea constantei COMPANY_DONOTSEARCH_ANYWHERE la 1 la Setup->Other. Căutarea va fi limitată la începutul șirului.
    -UseSearchToSelectProduct=Așteptați să apăsați o cheie înainte de a încărca conținutul listei combo de produse (aceasta poate crește performanța dacă aveți un număr mare de produse, dar este mai puțin convenabil)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Implicit tip de cod de bare de a utiliza pentru produse
     SetDefaultBarcodeTypeThirdParties=Implicit tip de cod de bare de a utiliza pentru terţi
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Trimiterea de modul de configurare
     SendingsReceiptModel=Trimiterea primirea model
     SendingsNumberingModules=Trimiteri de numerotare module
     SendingsAbility=Foi de transport suport pentru livrările către clienți.
    -NoNeedForDeliveryReceipts=În majoritatea cazurilor, foile de expediere sunt utilizate atât ca foi pentru livrările clienților (lista de produse care trebuie trimise), cât și pentru foile care sunt primite și semnate de către client. Prin urmare, chitanțele livrărilor de produse reprezintă o caracteristică dublă și sunt rareori activate.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Text liber pe livrari
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Produse livrările primirea modul de numerotare
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Editor avansat
     ActivateFCKeditor=Activaţi FCKeditor pentru:
     FCKeditorForCompany=WYSIWIG crearea / editie a companiilor şi de note descriere
     FCKeditorForProduct=WYSIWIG crearea / editie a produselor / serviciilor "descrierea şi nota
    -FCKeditorForProductDetails=WYSIWIG creare / editare detalii linii de produse pentru toate entităţile (propuneri, comenzilor, facturilor, etc ..) <font class="warning"> Atenţie: Folosind această opţiune nu este recommanda deoarece astfel  pot apare  probleme la caracterele speciale şi paginare atunci când se creaza fişiere PDF.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG crearea / ediţie de mailing
     FCKeditorForUserSignature=Creare/editare WYSIWIG  a semnăturii utilizatorilor
     FCKeditorForMail=Crearea / editarea WYSIWIG pentru toate e-mailurile (cu excepția Tools-> eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Conexiunii la baza de date a reusit, dar nu arata a fi o bază de date OSCommerce (cheie %s nu a fost găsit în tabelul %s).
    -OSCommerceTestOk=Conectarea la server ' %s' pe bază de date " %s" cu utilizatorul " %s" de succes.
    -OSCommerceTestKo1=Conectarea la server ' %s' reuseste, dar baza de date " %s" nu a putut fi atins.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Conectarea la server ' %s' pe bază de date " %s" cu utilizatorul " %s" cu succes.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Conectarea la server ' %s' cu utilizatorul " %s" nu a reuşit.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=Dacă utilizați unmodul punct de vânzare  (modulul POS furnizat în mod implicit sau un alt modul extern), acest setup poate fi ignorat de către modul punctul de vânzare . Cele mai multe module de puncte  de vânzări sunt concepute pentru a crea imediat o factură și reduce stocul implicit indiferent de ce optiune  aveţi aici. Deci, dacă aveți nevoie sau nu de a avea o scădere de stoc la înregistrarea unei vinzări din punctul dvs. de vânzare, verificați de asemenea modulul POS configurat.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Meniu eliminat
     Menus=Meniuri
    @@ -1548,7 +1561,7 @@ DetailRight=Conditia pentru a afişa neautorizate gri meniuri
     DetailLangs=Lang de nume de fişier pentru eticheta cod de traducere
     DetailUser=Intern / Extern / Toate
     Target=Ţintă
    -DetailTarget=Ţintă pentru link-uri (_blank top deschide o fereastră nouă)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Nivel (-1: meniul de sus, 0: antet meniu,&gt; 0 meniu şi submeniu)
     ModifMenu=Schimbare Meniu
     DeleteMenu=Ştergere intrare în meniu
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=TVA este datorată: <br> - La livrare / plăţile pentru m
     OptionVatDebitOptionDesc=TVA este datorată: <br> - La livrare / plăţile pentru mărfurile <br> - Pe factura (de debit) pentru serviciile
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Momentul implicit  TVA-ului exigibil pentru opțiunea selectată:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Pe  livrare
     OnPayment=Pe  plată
     OnInvoice=Pe factura
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Cont cumpărare. cod
     AgendaSetup=Acţiuni de ordine de zi şi de modul de configurare
     PasswordTogetVCalExport=Cheia de a autoriza export link
     PastDelayVCalExport=Nu de export eveniment mai în vârstă decât
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Setați automat acest tip de eveniment în filtrul de căutare al vederii agenda
    -AGENDA_DEFAULT_FILTER_STATUS=Setați automat acest statut în filtrul de căutare al vederii agenda
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Care tab doriţi să deschideţi când selectaţi meniul Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click pentru a Dial modul setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=Acest modul permite efectuarea de clicuri pentru numere de telefon. Dacă faceți clic pe această pictogramă, telefonul dvs. va apela numărul de telefon. Acest lucru poate fi folosit pentru a apela un sistem de call center de la Dolibarr care poate apela numărul de telefon dintr-un sistem SIP, de exemplu.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Punctul de vânzare
     CashDeskSetup=Casierie modul de configurare
    -CashDeskThirdPartyForSell=Terț generic implicit utilizat pentru vânzări
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Case de cont pentru a utiliza pentru vinde
     CashDeskBankAccountForCheque= Cont pentru a utiliza pentru a primi plăţi prin cec
     CashDeskBankAccountForCB= Cont pentru a folosi pentru a primi plăţi în numerar de carduri de credit
    -CashDeskDoNotDecreaseStock=Dezactivați scăderea stocului atunci când o vânzare se face de la punctul de vânzare (dacă "nu", scaderea stocului se face pentru fiecare vânzare făcută din POS, indiferent de opțiunea stabilită în modulul Stoc).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Forţează și limitează depozitul să folosească scăderea stocului
    -StockDecreaseForPointOfSaleDisabled=Scădere stoc de la Point of Sale dezactivat
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Scăderea stocului în POS nu este compatibilă cu gestionarea lotului
    -CashDeskYouDidNotDisableStockDecease=Nu ai dezactivați scăderea de stocului atunci când se face o vinzare de la Point Of Sale. Astfel, este necesar un depozit.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark modul de configurare
    -BookmarkDesc=Acest modul vă permite să gestionaţi marcaje. De asemenea, puteţi adăuga comenzi rapide pentru orice Dolibarr pagini sau site-uri web externale pe partea stanga de meniu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Numărul maxim de marcaje în stânga pentru a afişa meniul
     ##### WebServices #####
     WebServicesSetup=WebServices modul de configurare
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-societate modul setup
     ##### Suppliers #####
     SuppliersSetup=Furnizorul modul de configurare
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Modele numerotaţie al facturilor furnizori
     IfSetToYesDontForgetPermission=Dacă este setat la da, nu uitați să furnizați permisiuni grupurilor sau utilizatorilor cărora li se permite a doua aprobare
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Proiect modul de configurare
     ProjectsModelModule=Proiectul de raport document model
     TasksNumberingModules=Model de numerotaţie al taskurilor
     TaskModelModule=Modele  de document de rapoarte taskuri
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Puteți găsi opțiuni pen
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=Lista notificărilor fixe
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Mergeți în fila "Notificări" a unei terțe părți pentru a adăuga sau elimina notificări pentru contacte / adrese
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Prag
     BackupDumpWizard=Expertul pentru a crea un fișier de bază de date de rezervă pentru baza de date
     SomethingMakeInstallFromWebNotPossible=Instalarea modulului extern nu este posibilă din interfața web din următorul motiv:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Culoare link-uri
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Tip Model
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=Fixează TimeZone
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/ro_RO/companies.lang b/htdocs/langs/ro_RO/companies.lang
    index 8b410df73da..f46276875e8 100644
    --- a/htdocs/langs/ro_RO/companies.lang
    +++ b/htdocs/langs/ro_RO/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Selectaţi un terţ
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Şterge un contact
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Terţ nou
    -MenuNewCustomer=Client nou
    -MenuNewProspect=Prospect nou
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Particular nou
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Creare terţ
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Contact Terţ
     Company=Societate
     CompanyName=Nume  societate
     AliasNames=Alias nume (comercial, marca inregistrata, ...)
    -AliasNameShort=Nume Alias
    +AliasNameShort=Alias Name
     Companies=Societăţi
    -CountryIsInEEC=Ţara este în interiorul Comunităţii Economice Europene
    -ThirdPartyName=Nume Terţ
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Terţ
    -ThirdParties=Terţi
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospecte
     ThirdPartyProspectsStats=Prospecte
     ThirdPartyCustomers=Clienţi
     ThirdPartyCustomersStats=Clienţi
     ThirdPartyCustomersWithIdProf12=Clienţii cu %s sau %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Tip de terţi
    +ThirdPartyType=Type of company
     Individual=Persoană privată
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Societatea-mamă
     Subsidiaries=Filiale
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Cod postal
     Town=Oraş
     Web=Web
     Poste= Poziţie
    -DefaultLang=Limba implicită
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Oferte
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Sintaxa este validă
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Acest client are un discount <b>de %s%%</b>
     CompanyHasNoRelativeDiscount=Acest client nu are nici un discount în mod implicit
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Acest client are încă note de credit pentru <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Niciunul
    -Supplier=Furnizor
    +Supplier=Vendor
     AddContact=Creare contact
     AddContactAddress=Creare contact/adresă
     EditContact=Editare contact
    @@ -303,22 +303,22 @@ AddThirdParty=Creare terţ
     DeleteACompany=Şterge o societate
     PersonalInformations=Informaţii personale
     AccountancyCode=Cont contabil
    -CustomerCode=Cod Client
    -SupplierCode=Vendor code
    -CustomerCodeShort=Cod Client
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Cod Client,  unic pentru toţi clienţii
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Obligatoriu, dacă un terţ este un client sau prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Valabilitatea controlate de modulul
    -ThisIsModuleRules=Aici sunt regulile pentru acest modul
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect de contact
     CompanyDeleted=Societatea " %s" a fost ştearsă din baza de date.
     ListOfContacts=Lista Contacte
    -ListOfContactsAddresses=Lista  contacte
    -ListOfThirdParties=Lista  terţi
    -ShowCompany=Show third party
    +ListOfContactsAddresses=Lista Contacte
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Afişeză contact
     ContactsAllShort=Toate (fără filtru)
     ContactType=Tip Contact
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Acest contact nu este contact pentru nicio ofertă comer
     NoContactForAnyContract=Acest contact nu este  contact pentru nici un contract
     NoContactForAnyInvoice=Acest contact nu este  contact pentru nici o factură
     NewContact=Contact nou
    -NewContactAddress=Contact nou
    +NewContactAddress=New Contact/Address
     MyContacts=Contactele mele
     Capital=Capital
     CapitalOf=Capital de % s
     EditCompany=Modifică societate
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Verifică
    -VATIntraCheckDesc=Linkul  <b>%s</b>permite solicitarea verificării TVA european . Este necesar  acces la internet  pentru  ca acest  serviciu să funcționeze.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Verificaţi codul de TVA Intracomunitar de pe site-ul Comisiei Europene
    -VATIntraManualCheck=De asemenea, puteți verifica manual de la  site-ul European <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Verificare imposibilă. Verificaţi dacă serviciu nu este furnizat de către statul membru ( %s).
    -NorProspectNorCustomer=Nici prospect, nici client
    -JuridicalStatus=Forma juridică
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Efectiv
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potenţial
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export fişă în format
     ContactNotLinkedToCompany=Contact nelegat la un terţ
     DolibarrLogin=Identificator utilizator
     NoDolibarrAccess=Niciun acces utilizator
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacte şi atribute
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Nivel de Pret
     DeliveryAddress=Adresă de livrare
     AddAddress=Adaugă adresă
    @@ -402,16 +402,16 @@ DeleteFile=Şterge fişier
     ConfirmDeleteFile=Sigur  doriţi să ştergeţi acest fişier?
     AllocateCommercial=Asociat la reprezentant vânzări
     Organization=Organizaţia
    -FiscalYearInformation=Informaţii pe anul fiscal
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Luna de început a anului fiscal
    -YouMustAssignUserMailFirst=Mai întâi trebuie creată o adresa de email pentru acest utilizator pentru a putea adaugă notificări pe email pentru el
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Pentru a putea adaugă notificări pe email, este necesară definirea unor contacte pentru terţi cu adresa de email validă
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Lista  prospecte
    -ListCustomersShort=Lista  clienţi
    -ThirdPartiesArea=Terţi şi Contacte
    -LastModifiedThirdParties=Ultimii %s parteneri  modificați
    -UniqueThirdParties=Total terţi unici
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Deschis
     ActivityCeased=Închis
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Facturi in suspensie curente
     OutstandingBill=Max. limită credit
     OutstandingBillReached=Limită credit depăsită 
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Codul este liber fîrî verificare. Acest cod poate fi modificat în orice moment.
     ManagingDirectors=Nume Manager(i) nume (CEO, director, preşedinte...)
     MergeOriginThirdparty=Duplica terț (terț dorit să-l ștergeți)
     MergeThirdparties=Imbina terti
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Autentificare reprezentant vânzări
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/ro_RO/errors.lang b/htdocs/langs/ro_RO/errors.lang
    index 7951579ab35..ff9165fb26e 100644
    --- a/htdocs/langs/ro_RO/errors.lang
    +++ b/htdocs/langs/ro_RO/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=&quot;%s&quot; Valoarea are formatul de dată greşit
     ErrorWrongDate=Data nu este corecta!
     ErrorFailedToWriteInDir=Nu a reuşit să scrie în directorul %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=Found incorecte de email sintaxă pentru %s linii în fişier (de exemplu linia de e-mail cu %s= %s)
    -ErrorUserCannotBeDelete=Utilizatorul nu poate fi şters. Poate fi asociat la o entitate Dolibarr.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Unele campuri obligatorii nu au fost ocupate.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Nu a reuşit să creeze un director. Verificaţi ca server Web utilizator are permisiuni pentru a scrie în directorul de Dolibarr documente. Dacă <b>safe_mode</b> parametru este activat pe această PHP, Dolibarr verifica faptul că fişierele PHP detine la server web utilizator (sau grup).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Completaţi valorile pentru lista de selecţie
     ErrorNoValueForCheckBoxType=Completaţi valorile pentru lista checkbox
     ErrorNoValueForRadioType=Completaţi valorile pentru lista radio
     ErrorBadFormatValueList=Valorile din lista nu pot avea mai mult de o virgulă: <u>%s</u>, dar trebuie să aibă cel puțin o: cheie, valoare
    -ErrorFieldCanNotContainSpecialCharacters=<b>Câmp %s</b> trebuie să nu conţine caractere speciale.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Câmpul <b>%s</b> nu trebuie să conțină caractere speciale, nici litere mari și nu poate conține doar cifre.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Modul de contabilitate neactivat 
     ErrorExportDuplicateProfil=Acest profil nume există deja pentru acest set de export.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP de potrivire nu este completă.
     ErrorLDAPMakeManualTest=A. Ldif fişier a fost generat în directorul %s. Încercaţi să încărcaţi manual de la linia de comandă pentru a avea mai multe informatii cu privire la erori.
    -ErrorCantSaveADoneUserWithZeroPercentage=Nu se poate salva o acţiune cu "statut nu a început" în cazul în domeniu "realizat de către" este, de asemenea, completat.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref utilizate pentru crearea există deja.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Nu se ppate sterge inregistrarea. Este inca utilizata sau inclusa intr-un alt obiect
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript nu trebuie să fie dezactivate pentru a avea această facilitate de lucru. Pentru a activa / dezactiva Javascript, du-te la meniul Home-> Configurare-> Display.
     ErrorPasswordsMustMatch=Ambele parolele tastate trebuie să se potrivească reciproc
    -ErrorContactEMail=O eroare de tehnică avut loc. Vă rugăm, contactaţi administratorul de a urma <b>%s</b> de e-mail ro oferi <b>%s</b> cod de eroare în mesajul Dvs., sau chiar mai bine prin adăugarea o copie ecran a acestei pagini.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Valoarea greşit pentru <b>%s</b> numărul de câmp (valoarea <b>"%s"</b> nu se potriveste cu regula <b>%s</b> regex)
     ErrorFieldValueNotIn=Valoare greşită pentru câmpul numărul <b>%s</b> (valoarea '<b>%s</b>' nu este disponibilă in câmpul <b>%s</b> din tabela <b>%s</b>)
     ErrorFieldRefNotIn=Valoare greşită pentru <b>%s</b> numărul de câmp <b>(&quot;%s&quot;</b> valoarea nu este o ref <b>%s</b> existente)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Programul antivirus nu a validet fisierul (fisieru
     ErrorSpecialCharNotAllowedForField=Caractere speciale nu sunt permise pentru domeniul "%s"
     ErrorNumRefModel=O referire există în baza de date (%s) şi nu este compatibilă cu această regulă de numerotare. înregistra Remove sau redenumite de referinţă pentru a activa acest modul.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Configurarea modulului pare a nu fi completă. Mergeți la Setup - Module pentru a finaliza.
     ErrorBadMask=Eroare pe masca
     ErrorBadMaskFailedToLocatePosOfSequence=Eroare, fără a masca numărul de ordine
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Eroare, Bad resetare valoarea
     ErrorMaxNumberReachForThisMask=Numar max atins pentru aceasta masca
     ErrorCounterMustHaveMoreThan3Digits=Contorul trebuie sa aiba mai mult de 3 cifre
     ErrorSelectAtLeastOne=Eroare. Selectaţi cel puţin o intrare.
    -ErrorDeleteNotPossibleLineIsConsolidated=Ştergerea nu este posibilă, deoarece înregistrarea este legată de tranzacţie  bancară, care a fost decontată
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s se atribuie o altă treime
     ErrorFailedToSendPassword=Nu a reuşit să trimită parola
     ErrorFailedToLoadRSSFile=Nu pentru a obţine RSS feed. Încercaţi să adăugaţi MAIN_SIMPLEXMLLOAD_DEBUG constantă în cazul în care mesajele de eroare nu furnizează suficiente informaţii.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User login <b>cu %s</b> nu a putut fi găsit.
     ErrorLoginHasNoEmail=Acest utilizator nu are nici o adresa de e-mail. Procesul de anulată.
     ErrorBadValueForCode=Bad valoare tipuri de cod. Încercaţi din nou cu o nouă valoare ...
     ErrorBothFieldCantBeNegative=%s Domenii şi %s nu poate fi atât negativ
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Cantitatea pentru linia unei facturi client nu poate fi negativa.
     ErrorWebServerUserHasNotPermission=Contul de utilizator <b>%s</b> folosite pentru a executa serverul de web nu are permisiunea, pentru că
     ErrorNoActivatedBarcode=Niciun tip de coduri de bare activat
    @@ -138,7 +141,7 @@ ErrorBadFormat=Format gresit!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Eroare, există unele livrări legate de acest transport. Ștergere refuzată.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Nu se poate șterge o plată partajată de cel puțin un factură cu statutul platită
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Nu se poate atribui la constanta '%s'
     ErrorPriceExpression2=Nu se poate redefini  funcția built-in  '%s'
     ErrorPriceExpression3=Variabila nedefinita '%s'  în definiția funcției
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Neașteptat '%s'
     ErrorPriceExpression6=Număr greșit de argumente (%s dat, %s așteptat)
     ErrorPriceExpression8=Operator neașteptat '%s'
     ErrorPriceExpression9=A apărut o eroare neașteptată
    -ErrorPriceExpression10=Iperator '%s' lipsă operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Asteptam '%s'
     ErrorPriceExpression14=Împărţirea la zero,
     ErrorPriceExpression17=Variabila  '%s' nedefinită
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=Client SOAP esuat cu eroarea '%s'
     ErrorGlobalVariableUpdater5=Nicio varialbila globala selectata
     ErrorFieldMustBeANumeric=Campul <b>%s</b> trebuie sa fie  o valoare numerica
     ErrorMandatoryParametersNotProvided= Parametrii obligatorii nu au fost furnizați 
    -ErrorOppStatusRequiredIfAmount=Stabiliți o sumă estimată pentru această oportunitate / lead. Astfel, trebuie să introduceți, de asemenea, stadiul său.
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Definire greșită pentru Menu Array in descriptorul modulului (valoare greșită pentru cheia fk_menu)
    -ErrorSavingChanges=A apărut o eroare la salvarea modificărilor
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Depozitul este obligatoriu pe linie pentru livrare
     ErrorFileMustHaveFormat=Fisierul trebuie sa aiba format '%s'
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount= O parolă a fost trimisă către acest membru. Cu toate acestea, nu a fost creat nici un cont de utilizator. Astfel, această parolă este stocată, dar nu poate fi utilizată pentru autentificare. Poate fi utilizată de către un modul / interfată externă, dar dacă nu aveți nevoie să definiți un utilizator sau o parolă pentru un membru, puteți dezactiva opțiunea "Gestionați o conectare pentru fiecare membru" din modul de configurare membri. În cazul în care aveți nevoie să gestionați un utilizator, dar nu este nevoie de parolă, aveți posibilitatea să păstrați acest câmp gol pentru a evita acest avertisment. Notă: Adresa de e-mail poate fi utilizată ca utilizator la autentificare, în cazul în care membrul este legat de un utilizator. 
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Un marcaj cu acest titlu sau acest obiectiv (URL) e
     WarningPassIsEmpty=Atenţie, parola baza de date este gol. Aceasta este o gaura de securitate. Ar trebui să adăugaţi o parolă pentru a vă baza de date şi să vă schimbaţi conf.php fişier, pentru a reflecta acest lucru.
     WarningConfFileMustBeReadOnly=Atenţie, fişierul de configurare dvs. <b>(htdocs / conf / conf.php)</b> poate fi suprascrise de către serverul de web. Aceasta este o gaura de securitate grave. Modificare permisiuni pe fişier pentru a fi citit în modul doar pentru utilizatorul sistemului de operare folosit de server Web. Dacă utilizaţi Windows şi formatul FAT pentru discul dvs., vă trebuie să ştiţi că acest sistem de fişier nu se permite to adăuga permisiuni la dosar, deci nu poate fi complet safe.
     WarningsOnXLines=Avertismentele privind sursa <b>%s</b> linii
    -WarningNoDocumentModelActivated=Nici un model, pentru generarea de document, a fost activat. Un model va fi ales în mod implicit, până când a verifica configurarea modulului.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Atenţie, odată terminată instalarea, trebui să dezactivaţi  instrumentele instalare/migrare prin adăugarea unui fișier<b>install.lock</b> în directorul <b> %s </ b>. Absența acestui fișier este o breşă de securitate.
    -WarningUntilDirRemoved=Acest avertisment va rămâne activ, atât timp cât acest director este prezent (afişat numai la admin utilizatori).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Atenţie, închiderea are loc chiar dacă suma diferă. Nu activati aceasta funcţionalitate decât  în cunoaștinţă de cauză.
     WarningUsingThisBoxSlowDown=Atenție, folosind această casetă încetiniţi serios toate paginile ce arată caseta.
     WarningClickToDialUserSetupNotComplete=Setările informațiilor ClickToDial pentru userul dvs. nu sunt complete (vezi tabul ClickToDial pe fişal dvs. de utilizator).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters= Prea multe date (mai mult de %s linii).
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Utilizatorul-ul a fost modificat. Din motive de securitate, va trebui să vă conectați cu noul dvs. utilizator înainte de următoarea acțiune.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/ro_RO/interventions.lang b/htdocs/langs/ro_RO/interventions.lang
    index d2239d760e9..c8c9ebd5eb8 100644
    --- a/htdocs/langs/ro_RO/interventions.lang
    +++ b/htdocs/langs/ro_RO/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervenţii
     InterventionCard=Fişă intervenţie
     NewIntervention=Intervenţie nouă
     AddIntervention=Crează intervenţie
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Lista  intervenţii
     ActionsOnFicheInter=Acţiuni privind intervenţia
     LastInterventions=Ultimele %s intervenţii
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Utilizați durata serviciilor pentru intervenții
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistici intervenţii
    -NbOfinterventions=Numar Fişe intervenţie
    -NumberOfInterventionsByMonth=Numarul Fişelor intervenţie pe luna(data validare)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Id Intervenţie
    diff --git a/htdocs/langs/ro_RO/main.lang b/htdocs/langs/ro_RO/main.lang
    index 686707a81ca..99e1fa9fd0b 100644
    --- a/htdocs/langs/ro_RO/main.lang
    +++ b/htdocs/langs/ro_RO/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Nu se poate  trimite e-mail (expeditor=% s,  destinatar =%
     ErrorFileNotUploaded=Fișierul nu a fost încărcat. Verificați ca dimensiunea să nu depășească maximul permis, că spațiu pe disc este disponibil  și că nu există deja un fișier cu același nume, în acest director.
     ErrorInternalErrorDetected=Eroare detectată
     ErrorWrongHostParameter=Parametru Server greșit
    -ErrorYourCountryIsNotDefined=Țara dvs nu este definită. Cotrectaţi mergînd la Home- Setări Societate/Fundaţie - Edit.
    -ErrorRecordIsUsedByChild=Eşec la ștergerea aceastei înregistrări. Această înregistrare este utilizată de cel puțin o înregistrarei copil.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Valoarea  incorectă
     ErrorWrongValueForParameterX=Valoarea  incorectă pentru parametrul% s
     ErrorNoRequestInError=Nicio cerere în eroare
    -ErrorServiceUnavailableTryLater=Serviciul indisponibil pentru moment. Încercaţi din nou mai târziu.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Valoare duplicat într-un câmp unic
    -ErrorSomeErrorWereFoundRollbackIsDone=Câteva erori găsite . Vom reveni asupra modificarilor
    -ErrorConfigParameterNotDefined=Parametrul <b> %s</b> nu este definit în  fişierul de configurare  Dolibarr<b>conf.php.</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Utilizatorul<b>%s</b>  negăsit  în baza de date Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Eroare,  nici o cota de TVA definită pentru  ţara '% s'.
     ErrorNoSocialContributionForSellerCountry=Eroare, niciun tip taxa sociala /fiscala definit pentru ţara '%s'.
     ErrorFailedToSaveFile=Eroare,  salvarea fişierului eşuată.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Dvs nu aveti dreptusa faceti aceasta.
     SetDate=setează data
     SelectDate=selectează data
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Fişierul a fost încărcat cu succes
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Un fișier este selectat pentru atașament, dar nu a fost încă încărcat. Clic pe "Ataşează fișier" pentru aceasta.
    -NbOfEntries=Nr intrări
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Citeşte ajutorul online (Acces la Internet necesar)
     GoToHelpPage=Citeşte  Ajutorul
     RecordSaved=Înregistrare salvată
    @@ -142,6 +142,7 @@ Closed=Închide
     Closed2=Închis
     NotClosed=Not closed
     Enabled=Activat
    +Enable=Activare
     Deprecated=Depreciat
     Disable=Dezactivează
     Disabled=Dezactivat
    @@ -153,7 +154,7 @@ Update=Modifică
     Close=Închide
     CloseBox=Remove widget from your dashboard
     Confirm=Confirmă
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Şterge
     Remove=Elimină
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copiază
     Paste=Lipeşte
     Default=Implicit
     DefaultValue=Valoare implicită
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Preţ
     PriceCurrency=Price (currency)
     UnitPrice=Preţ unitar
    @@ -347,7 +348,7 @@ AmountTTCShort=Valoare (inc. taxe)
     AmountHT=Valoare (net)
     AmountTTC=Valoare (inc. taxe)
     AmountVAT=Valoare  TVA
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Valoare (net), moneda originala
    @@ -428,7 +429,7 @@ ActionNotApplicable=Nu se aplică
     ActionRunningNotStarted=De realizat
     ActionRunningShort=In progress
     ActionDoneShort=Terminat
    -ActionUncomplete=Incomplet
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generează
     Duration=Durata
     TotalDuration=Durată totală
     Summary=Sumar
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Disponibil
     NotYetAvailable=Nedisponibil încă
    @@ -468,7 +469,7 @@ and=şi
     or=sau
     Other=Alt
     Others=Altele
    -OtherInformations=Alte informatii
    +OtherInformations=Alte informații
     Quantity=Cantitate
     Qty=Cant
     ChangedBy=Modificat de
    @@ -506,7 +507,7 @@ None=Niciunul
     NoneF=Niciunul
     NoneOrSeveral=None or several
     Late=Întârziat
    -LateDesc=Durata care defineşte dacă o înregistrare este întârziată depinde de configurare. Contactaţi administratorul pentru a schimbă durata din Acasă - Setări - Alerte.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Foto
     Photos=Fotografii
    @@ -530,18 +531,6 @@ September=Septembrie
     October=Octombrie
     November=Noiembrie
     December=Decembrie
    -JanuaryMin=Ian
    -FebruaryMin=Febr
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=Mai
    -JuneMin=Iun
    -JulyMin=Iul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Noi
    -DecemberMin=Dec
     Month01=ianuarie
     Month02=februarie
     Month03=martie
    @@ -646,6 +635,8 @@ SendMail=Trimite un email
     EMail=E-mail
     NoEMail=Niciun email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Fără număr mobil
     Owner=Proprietar
     FollowingConstantsWillBeSubstituted=Următoarele constante vor fi înlocuite cu valoarea corespunzătoare.
    @@ -677,7 +668,7 @@ NeverReceived=Niciodată primit
     Canceled=Anulată
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=Valoarea implicită pentru o nouă înregistrare se poate defini în configirarea modulului
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Culoare
     Documents=Fişiere ataşate
     Documents2=Documente
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Afișare comanda cu parola ascunsă
     UnHidePassword=Afișare comanda reală cu parola în clar
     Root=Rădăcină
    -Informations=Informatii
    +Informations=Informatie
     Page=Pagină
     Notes=Note
     AddNewLine=Adaugă linie nouă
    @@ -716,15 +707,15 @@ Merge=Îmbină
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Afişaţi pagina pentru imprimat în zona conţinutului principal
     MenuManager=Manager Meniu
    -WarningYouAreInMaintenanceMode=Atenție, vă aflați în modul de întreținere, astfel încât numai <b>%s</b> este permis să utilizeze aplicația în acest moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Eroare de sistem
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Card de credit
     ValidatePayment=Validează plata
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Campurile marcate cu <b>%s</b> sunt obligatorii
    -FieldsWithIsForPublic=Câmpurile  cu <b>%s</b> vor fi  afișate pe lista publică de membri. Dacă nu doriți acest lucru, debifaţi căsuţa "public".
    -AccordingToGeoIPDatabase=(Conform conversiei GeoIP)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Linie
     NotSupported=Nesuportat
     RequiredField=Câmp obligatoriu
    @@ -732,6 +723,8 @@ Result=Rezultat
     ToTest=Testează
     ValidateBefore=Fişa trebuie  validată înainte de a utiliza această funcţionalitate
     Visibility=Vizibilitate
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privată
     Hidden=Ascunsă
     Resources=Resurse
    @@ -750,6 +743,7 @@ LinkTo=Link la
     LinkToProposal=Link la propunere
     LinkToOrder=Link către comandă
     LinkToInvoice=Link la factura
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link către comandă furnizaor
     LinkToSupplierProposal=Link catre propunere furnizor
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Creareză schiţă
     SetToDraft=Inapoi la schiţă
     ClickToEdit=Clic pentru a edita
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Pe zi
     BySalesRepresentative=Pe  reprezentant de vânzări
     LinkedToSpecificUsers=Link către un contact utilizator particular
     NoResults=Niciun Rezultat
    -AdminTools=Instrumente Administrare
    +AdminTools=Admin Tools
     SystemTools=Instrumente Sistem
     ModulesSystemTools=Module Instrumente
     Test=Test
     Element=Element
     NoPhotoYet=Nicio imagine disponibilă
     Dashboard=Tablou de bord
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductibile
     from=de la
     toward=spre
    @@ -802,7 +797,7 @@ PrintFile=Printeaza Fisierul %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Afişează  intervenţie
     ShowContract=Afişează contract
    -GoIntoSetupToChangeLogo=Mergi la  Home - Setup - Company pentru a schimba logo - ul sau mergi la  Home - Setup - Display pentru a ascunde.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Respinge
     Denied=Respins
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Cu sinceritate
     DeleteLine=Şterge linie
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Zona pentru fişiere generate prin acţiuni în masă
     ShowTempMassFilesArea=Afişează zona pentru fişiere generate prin acţiuni în masă
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Obiecte asociate
     ClassifyBilled=Clasează facturată
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Evenimente
    -EMailTemplates=Șabloane e-mailuri 
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Proiect
     Projects=Proiecte
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permisiuni
     LineNb=Line no.
     IncotermLabel=Incoterm
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Luni
     Tuesday=Marţi
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Intervenţii
     SearchIntoContracts=Contracte
     SearchIntoCustomerShipments=Livrări Client
     SearchIntoExpenseReports=Rapoarte Cheltuieli
    -SearchIntoLeaves=Concedii
    +SearchIntoLeaves=Leave
     CommentLink=Comentarii
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Toată lumea
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Plătite de 
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Atribuit lui
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/ro_RO/other.lang b/htdocs/langs/ro_RO/other.lang
    index fb3cb243174..6f6f2127856 100644
    --- a/htdocs/langs/ro_RO/other.lang
    +++ b/htdocs/langs/ro_RO/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Cod de securitate
     NumberingShort=N°
     Tools=Instrumente
     TMenuTools=Instrumente
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Zi de naştere
     BirthdayDate=Data naştere
     DateToBirth=Data naşterii
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Mesaj de pe pagina de întoarcere a platii validate
     MessageKO=Mesaj de pe pagina anulat schimbul de plată
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Adaugat contact la Interventie
    -Notify_FICHINTER_VALIDATE=Validate intervenţie
    -Notify_FICHINTER_SENTBYMAIL=Intervenţie trimisă prin mail
     Notify_ORDER_VALIDATE=Comandă client validată
     Notify_ORDER_SENTBYMAIL=Comanda clientului trimise prin poştă
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Pentru furnizorul trimis prin e-mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Comandă Furnizor inregistrata
     Notify_ORDER_SUPPLIER_APPROVE=Furnizor pentru a aprobat
     Notify_ORDER_SUPPLIER_REFUSE=Furnizor pentru a refuzat
     Notify_PROPAL_VALIDATE=Ofertă client validată
    -Notify_PROPAL_CLOSE_SIGNED=Propunere client semnată inchisă
    -Notify_PROPAL_CLOSE_REFUSED=Propunere client refuzată inchisă
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Ofertă comercială  trimisă prin mail
     Notify_WITHDRAW_TRANSMIT=Transmitere de retragere
     Notify_WITHDRAW_CREDIT=Credit de retragere
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Terţ a creat
     Notify_COMPANY_SENTBYMAIL=Emailuri trimise din cardul terţului
     Notify_BILL_VALIDATE=Factura client validată
     Notify_BILL_UNVALIDATE=Factura client nevalidată
    -Notify_BILL_PAYED=Factura platita clienţilor
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Factura client anulat
     Notify_BILL_SENTBYMAIL=Factura client trimis prin e-mail
     Notify_BILL_SUPPLIER_VALIDATE=Factura furnizorului validate
    -Notify_BILL_SUPPLIER_PAYED=Factura platita cu furnizorul
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Factura Furnizor trimise prin poştă
     Notify_BILL_SUPPLIER_CANCELED=Factură Furnizor anulată
     Notify_CONTRACT_VALIDATE=Contract validate
     Notify_FICHEINTER_VALIDATE=De intervenţie validate
    +Notify_FICHINTER_ADD_CONTACT=Adaugat contact la Interventie
    +Notify_FICHINTER_SENTBYMAIL=Intervenţie trimisă prin mail
     Notify_SHIPPING_VALIDATE=Transport validate
     Notify_SHIPPING_SENTBYMAIL=Transport trimise prin poştă
     Notify_MEMBER_VALIDATE=Membru validate
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Creare proiect
     Notify_TASK_CREATE=Task creat
     Notify_TASK_MODIFY=Task modificat
     Notify_TASK_DELETE=Task sters
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Vezi setare modul %s
     NbOfAttachedFiles=Numărul de ataşat fişiere / documente
     TotalSizeOfAttachedFiles=Total marimea ataşat fişiere / documente
     MaxSize=Mărimea maximă a
     AttachANewFile=Ataşaţi un fişier nou / document
     LinkedObject=Legate de obiectul
    -NbOfActiveNotifications=Numărul de notificări (Nr de e-mailuri beneficiare)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id-ul %s</b> este una de informaţii în funcţie de ţară terţă parte. <br> De exemplu, pentru <b>ţara %s,</b> este <b>codul %s.</b>
     DolibarrDemo=Demo Dolibarr ERP / CRM
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=O noua interventie %s ti- a fost atribuita 
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Intervenţia %s validată
     EMailTextInvoiceValidated=Factura %s validată
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Oferta %s a fost validată.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Comanda %s a fost validată
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Comanda %s aprobată de către %s
     EMailTextOrderRefused=Comanda %s a fost refuzată
     EMailTextOrderRefusedBy=Comanda %s a fost refuzată de către %s
     EMailTextExpeditionValidated=Livrarea %s a fost validată.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Import de date
     DolibarrNotification=Notificare Automată
     ResizeDesc=Introduceţi lăţimea noi <b>sau</b> înălţimea noi. Raportul va fi păstrat în timpul redimensionare ...
    @@ -204,7 +212,7 @@ NewLength=Lăţime nouă
     NewHeight=Înălţime nouă
     NewSizeAfterCropping=noi dimensiuni după recoltare
     DefineNewAreaToPick=Definiţi zona noi pe imagine pentru a alege (click stanga pe imagine, apoi glisaţi până când ajunge la coltul opus)
    -CurrentInformationOnImage=Informatii privind imaginea curentă
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Editor de imagine
     YouReceiveMailBecauseOfNotification=Veţi primi acest mesaj deoarece adresa dvs. de email a fost adăugat la lista de obiective care urmează să fie informat cu privire la evenimentele special în software-ul de %s %s.
     YouReceiveMailBecauseOfNotification2=Acest eveniment este următoarea:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Export
    diff --git a/htdocs/langs/ro_RO/projects.lang b/htdocs/langs/ro_RO/projects.lang
    index 3ad5c5507b6..cb3ce2e9bb8 100644
    --- a/htdocs/langs/ro_RO/projects.lang
    +++ b/htdocs/langs/ro_RO/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Afişează proiect
     ShowTask=Arată sarcină
     SetProject=Setare proiect
     NoProject=Niciun proiect definit sau responsabil
    -NbOfProjects=Nr proiecte
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Timp comsumat
     TimeSpentByYou=Timpul consumat  da tine
     TimeSpentByUser=Timp consumat pe utilizator
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Lista oferte comerciale asociate la proiect
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Lista contracte  asociate  la  proiect
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Lista intervenţii  asociate  la  proiectului
    -ListExpenseReportsAssociatedProject=Lista rapoartelor cheltuieli  asociate proiectului
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Lista evenimentelor  asociate la proiectului
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Proiect %s modificat
     TaskCreatedInDolibarr=Task %s creat
     TaskModifiedInDolibarr=Task %s modificat
     TaskDeletedInDolibarr=Task %s sters
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Selectați elementul
     AddElement=Link către element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Volum de lucru Planificat
     PlannedWorkloadShort=Volum de muncă
     ProjectReferers=Obiecte asociate
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospect
     OppStatusQUAL=Calificare
     OppStatusPROPO=Ofertă 
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/ru_RU/admin.lang b/htdocs/langs/ru_RU/admin.lang
    index 785272e6df3..2a3b9967574 100644
    --- a/htdocs/langs/ru_RU/admin.lang
    +++ b/htdocs/langs/ru_RU/admin.lang
    @@ -4,15 +4,15 @@ Version=Версия
     Publisher=Издатель
     VersionProgram=Версия программы
     VersionLastInstall=Начальная версия установки
    -VersionLastUpgrade=Последнее обновление версии
    +VersionLastUpgrade=Обновление до последней версии
     VersionExperimental=Экспериментальная
     VersionDevelopment=Разработка
     VersionUnknown=Неизвестно
     VersionRecommanded=Рекомендуемые
     FileCheck=Проверка целостности файлов
    -FileCheckDesc=Этот инструмент позволяет проверять целостность файлов и настройку вашего приложения, сравнивая каждый файл с официальными. Можно также проверить значение некоторых установочных констант. Вы можете использовать этот инструмент, чтобы определить, были ли некоторые файлы изменены хакером, например.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Целостность файлов строго соответствует ссылке.
    -FileIntegrityIsOkButFilesWereAdded=Проверка целостности файлов прошла, однако некоторые новые файлы были добавлены.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Ошибка проверки целостности файлов. Некоторые файлы были изменены, удалены или добавлены.
     GlobalChecksum=Глобальная контрольная сумма
     MakeIntegrityAnalysisFrom=Сделайте анализ целостности файлов приложений
    @@ -30,14 +30,14 @@ SessionSaveHandler=Обработчик для сохранения сессий
     SessionSavePath=Хранение локализации сессий
     PurgeSessions=Очистка сессий
     ConfirmPurgeSessions=Вы хотите завершить все сессии? Это действие отключит всех пользователей (кроме вас).
    -NoSessionListWithThisHandler=Обработчик сохранения сессий, настроенный в вашем PHP, не позволяет получать список всех открытых сессий.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Заблокировать новые подключения
    -ConfirmLockNewSessions=Вы уверены, что хотите ограничить любые новые подключения Dolibarr к себе? Только пользователь <b>%s</b>  будет иметь возможность подключиться после этого.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Удалить блокировку подключений
     YourSession=Ваша сессия
    -Sessions=Сессия пользователя
    +Sessions=Users sessions
     WebUserGroup=Пользователь / группа Web-сервера
    -NoSessionFound=Ваш PHP, кажется, не позволяет вывести список активных сессий. Возможно, директория, используемаяя для сохранения сессий <b>(%s)</b> защищена (например, правами в ОС или директивой PHP open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Кодировка базы данных для хранения данных
     DBSortingCharset=Кодировка базы данных для сортировки данных
     ClientCharset=Клиентская кодировка
    @@ -50,7 +50,7 @@ ExternalUser=Внешний пользователь
     InternalUsers=Внутренние пользователи
     ExternalUsers=Внешние пользователи
     GUISetup=Внешний вид
    -SetupArea=Раздел настроек
    +SetupArea=Настройка
     UploadNewTemplate=Загрузить новый шаблон (ы)
     FormToTestFileUploadForm=Форма для проверки загрузки файлов (в зависимости от настройки)
     IfModuleEnabled=Примечание: "Да" влияет только тогда, когда модуль <b>%s</b> включен
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Код не может содержать значен
     DisableJavascript=Отключить JavaScript и Ajax (Рекомендуется если пользователи пользуются текстовыми браузерами)
     UseSearchToSelectCompanyTooltip=Кроме того, если у вас есть большое количество третьих лиц (> 100 000), вы можете увеличить скорость, установив постоянную COMPANY_DONOTSEARCH_ANYWHERE на 1 в Setup-> Other. Затем поиск будет ограничен началом строки.
     UseSearchToSelectContactTooltip=Кроме того, если у вас есть большое количество третьих лиц (> 100 000), вы можете увеличить скорость, установив постоянную связь CONTACT_DONOTSEARCH_ANYWHERE в 1 в Setup-> Other. Затем поиск будет ограничен началом строки.
    -DelaiedFullListToSelectCompany=Подождите, пока вы нажмете клавишу перед загрузкой содержимого списка со списком сторонних партнеров (это может повысить производительность, если у вас есть большое количество третьих сторон, но это менее удобно)
    -DelaiedFullListToSelectContact=Подождите, пока вы нажмете клавишу до загрузки содержимого списка контактов (это может повысить производительность, если у вас большое количество контактов, но это менее удобно)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Кол-во символов для запуска поиска: %s
     NotAvailableWhenAjaxDisabled=Недоступно при отключенном Ajax
     AllowToSelectProjectFromOtherCompany=В документе третьей стороны можно выбрать проект, связанный с другой третьей стороной
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Предварительный просмотр не дос
     ThemeCurrentlyActive=Текущая тема
     CurrentTimeZone=Текущий часовой пояс в настройках PHP
     MySQLTimeZone=Часовой пояс БД (MySQL)
    -TZHasNoEffect=Даты сохраняются и возвращаются сервером базы данных, как если бы они хранились в виде строки. Временной зонд имеет эффект только при использовании UNIX_TIMESTAMP (который не должен использоваться Dolibarr, поэтому база данных TZ не должна иметь эффекта, даже если она была изменена после ввода данных).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Пробел
     Table=Таблица
     Fields=Поля
    @@ -111,14 +111,14 @@ NotConfigured=Модуль/Приложение не настроен
     Active=Активная
     SetupShort=Настройка
     OtherOptions=Другие настройки
    -OtherSetup=Другие настройки
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Десятичный разделитель
     CurrentValueSeparatorThousand=Разделитель разрядов
     Destination=Назначение
     IdModule=ID модуля
     IdPermissions=ID прав доступа
     LanguageBrowserParameter=Параметр %s
    -LocalisationDolibarrParameters=Параметры локализации
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Часовой пояс пользователя
     ClientHour=Время клиента (пользователя)
     OSTZ=Часовой пояс сервера
    @@ -126,8 +126,8 @@ PHPTZ=Часовой пояс PHP сервера
     DaylingSavingTime=Летнее время
     CurrentHour=Время PHP (на PHP-сервере)
     CurrentSessionTimeOut=Тайм-аут текущей сессии
    -YouCanEditPHPTZ=Чтобы установить другой часовой пояс PHP (не требуется), вы можете попробовать добавить файл .htaccess с помощью строки «SetEnv TZ Europe/Paris»,
    -HoursOnThisPageAreOnServerTZ=Предупреждение, в отличие от других экранов, часы на этой странице не находятся в вашем локальном часовом поясе, а в часовом поясе сервера.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Виджет
     Boxes=Виджеты
     MaxNbOfLinesForBoxes=Максимальное количество строк для виджетов
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords= Игнорировать ошибки дублирующ
     AutoDetectLang=Автоопределение (язык браузера)
     FeatureDisabledInDemo=Функция отключена в демо -
     FeatureAvailableOnlyOnStable=Функция доступна только в официальных стабильных версиях
    -BoxesDesc=Виджеты компонентов отображают такую же информацию которую вы можете добавить к персонализированным страницам. Вы можете выбрать между показом виджета или не выбирая целевую страницу нажать "Активировать", или выбрать корзину для отключения.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Показаны только элементы из <a href="%s">включенных модулей</a>
    -ModulesDesc=Модули Dolibar определяют какие возможности будут включены в приложении. Некоторые приложения/модули требуют разрешения которые вы должны предоставить пользователям, после их активации. Нажмите на кнопку on/off для включения или отключения модулей.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=В интернете вы можете найти больше модулей для загрузки...
    -ModulesDeployDesc=Если разрешения для вашей файловой системы позволяют это, вы можете использовать этот инструмент для развертывания внешнего модуля. Затем модуль будет виден на вкладке<strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Поиск внешних приложений/модулей
     ModulesDevelopYourModule=Разработка собственного приложения/модулей
    -ModulesDevelopDesc=Вы можете разработать или найти партнера для разработки, ваш персонализированный модуль
    -DOLISTOREdescriptionLong=Вместо того, чтобы переходить на веб-сайт <a href="https://www.dolistore.com">www.dolistore.com</a>, чтобы найти внешний модуль, вы можете использовать этот встроенный инструмент, который сделает ваше путешествие на внешнем рынке (может быть медленным, нужен доступ в Интернет) ...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Новый
     FreeModule=Свободно
     CompatibleUpTo=Совместимость с версией %s
    @@ -211,8 +211,8 @@ Nouveauté=Новое
     AchatTelechargement=Купить/Скачать
     GoModuleSetupArea=Чтобы развернуть/установить новый модуль, перейдите в область настройки модуля с <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, официальный магазин внешних модулей Dolibarr ERP / CRM
    -DoliPartnersDesc=Список компаний, предоставляющих индивидуально разработанные модули или функции (Примечание: любой, кто имеет опыт программирования на PHP, может предоставить пользовательскую разработку для проекта с открытым исходным кодом)
    -WebSiteDesc=Ссылки на веб-сайты, чтобы найти больше модулей...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Некоторые решения для разработки собственного модуля ...
     URL=Ссылка
     BoxesAvailable=Доступные виджеты
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Не хранить пароли в открытом в
     MainDbPasswordFileConfEncrypted=Зашифровать пароль к базе в conf.php (Рекомендуется)
     InstrucToEncodePass=Чтобы поместить зашифрованный пароль в <b>conf.php</b> файл, замените строку <br><b>$dolibarr_main_db_pass ="..."</b><br>на<br><b>$dolibarr_main_db_pass"=crypted:%s"</b>
     InstrucToClearPass=Чтобы поместить не зашифрованный пароль в <b>conf.php</b> файл, замените строку <br><b>$dolibarr_main_db_pass="crypted:..."</b><br>на<br><b>$dolibarr_main_db_pass="%s"</b>
    -ProtectAndEncryptPdfFiles=Защита создаваемых PDF файлов (НЕ РЕКОМЕНДУЕТСЯ при массовом создании PDF)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Защита документов PDF допускает чтение и распечатку любым приложением просмотра файлов PDF. Однако редактирование и копирование не возможно. Использование этой возможности не позволит глобальное объединение файлов PDF.
     Feature=Возможность
     DolibarrLicense=Лицензия
    @@ -246,8 +246,8 @@ ExternalResources=Внешние ресурсы
     SocialNetworks=Социальные сети
     ForDocumentationSeeWiki=Для получения документации пользователя или разработчика (документация, часто задаваемые вопросы...),<br> посетите Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Для любых других вопросов / помощи, вы можете использовать форум Dolibarr:<br><b><a href="%s" target="_blank">%s</b></a>
    -HelpCenterDesc1=Этот раздел может помочь вам получить помощь службы поддержки по Dolibarr.
    -HelpCenterDesc2=Некоторые части этого сервиса доступны <b>только на английском языке.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Обработчик текущего меню
     MeasuringUnit=Единица измерения
     LeftMargin=Левое поле
    @@ -262,31 +262,35 @@ NoticePeriod=Период уведомления
     NewByMonth=Новые по месяцам
     Emails=Электронная почта
     EMailsSetup=Настройка электронной почты
    -EMailsDesc=Эта страница позволяет вам переписывать PHP параметры для отправки писем. В большинстве случаев в операционных системах Unix/Linux настройки PHP корректны и менять их не нужно.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Профили отправителей электронной почты
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS порт (По умолчанию в php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS сервер (по умолчанию в php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Порт (Не определен в PHP на Unix-подобных системах)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS сервер (Не определен в PHP на Unix-подобных системах)
    -MAIN_MAIL_EMAIL_FROM=Отправитель писем для автоматических рассылок (В php.ini указан: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=E-mail используется для отправки сообщений об ошибках (поля «Errors-To» в отправленных сообщениях)
    -MAIN_MAIL_AUTOCOPY_TO= Скрыто отправлять копии всех отправляемых писем на 
    -MAIN_DISABLE_ALL_MAILS=Отключить отправку всех писем (для тестирования или демонстраций)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Отправляйте все электронные письма (вместо реальных получателей, для целей тестирования)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Добавить пользователей сотрудников с электронной почтой в список разрешенных судебных органов
    -MAIN_MAIL_SENDMODE=Метод, используемый для отправки электронной почты
    -MAIN_MAIL_SMTPS_ID=SMTP ID, если требуется проверка подлинности
    -MAIN_MAIL_SMTPS_PW=SMTP пароль, если требуется проверка подлинности
    -MAIN_MAIL_EMAIL_TLS= Использовать TLS (SSL) шифрование
    -MAIN_MAIL_EMAIL_STARTTLS= Использовать шифрование TLS (STARTTLS)
    -MAIN_DISABLE_ALL_SMS=Отключить отправку всех SMS (для тестирования или демонстрации)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Метод, используемый для передачи SMS
    -MAIN_MAIL_SMS_FROM=Номер отправителя для отправки SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Письмо отправителя по умолчанию для отправки вручную (электронная почта пользователя или электронная почта компании)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Электронная почта пользователя
     CompanyEmail=Электронная почта компании
     FeatureNotAvailableOnLinux=Функция недоступна на Unix подобных систем. Проверьте вашу программу для отправки почты локально.
    -SubmitTranslation=Если перевод на этот язык не завершен или вы нашли ошибки, вы можете исправить их отредактировав файлы в папке <b>langs/%s</b> и отправив внесенные изменения на www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Если перевод для этого языка не завершен или вы обнаружите ошибки, вы можете исправить это, отредактировав файлы в каталог <b>langs/%s</b> и отправив измененные файлы на dolibarr.org/forum или для разработчиков на github.com/Dolibarr/dolibarr.
     ModuleSetup=Настройка модуля
     ModulesSetup=Настройка Модулей/Приложений
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Не используйте в производстве
     ThisIsProcessToFollow=Это шаги для процесса:
     ThisIsAlternativeProcessToFollow=Это альтернативная настройка для обработки вручную:
     StepNb=Шаг %s
    -FindPackageFromWebSite=Поиск пакета, который обеспечивает функции которые вы хотите (например, на официальном веб-сайте %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Загрузка пакета (например, на официальном веб-сайте %s).
    -UnpackPackageInDolibarrRoot=Распаковка файлов пакета на сервере Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=Чтобы развернуть/установить внешний модуль, распакуйте упакованные файлы в каталог сервера, предназначенный для модулей: <b>%s</b>
    -SetupIsReadyForUse=Развертывание модуля завершено. Теперь необходимо включить и настроить модуль в вашей программе на странице настройки модуля: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=Альтернативная корневая директория не задана.<br>
     InfDirAlt=Начиная с 3-ей версии, можно определить альтернативный корневой каталог. Это позволяет вам хранить в специальном каталоге, плагины и настраиваемые шаблоны. <br> Просто создайте каталог в корне Dolibarr (например: custom). <br>
     InfDirExample=<br>Затем объявите его в файле <strong>conf.php</strong><br> $dolibarr_main_url_root_alt = '/custom'<br> $dolibarr_main_document_root_alt ='/path/of/dolibarr/htdocs/custom'<br>Если эти строки комментируются с помощью ''#", чтобы включить их, просто раскомментируйте, удалив символ "#''.
    -YouCanSubmitFile=На этом шаге вы можете отправить .zip-файл пакета модулей здесь:
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Текущая версия Dolibarr
     CallUpdatePage=Перейдите на страницу, где вы сможете обновить структуру базы данных и данные: %s.
     LastStableVersion=Последняя стабильная версия
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Взгляните на страницу вики для по
     UseACacheDelay= Задержка для кэширования при экспорте в секундах (0 или пусто для отключения кэширования)
     DisableLinkToHelpCenter=Скрыть ссылку <b>"нужна помощь или поддержка"</b> на странице авторизации
     DisableLinkToHelp=Скрыть ссылку интернет-справки "<b>%s</b>"
    -AddCRIfTooLong=Автоматические переносы отсутствуют, по этому если строка в документе слишком длинная, вы должны самостоятельно выполнить перевод строки в текстовом поле.
    -ConfirmPurge=Вы уверены что хотите выполнить эту очистку?<br> Это действие удалит все ваши файлы с данными без возможности восстановления (ECM файлы, прикрепленные файлы...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Минимальная длина
     LanguageFilesCachedIntoShmopSharedMemory=Файлы .lang, загружены в общую памяти
     LanguageFile=Языковой файл
    -ExamplesWithCurrentSetup=Примеры с текущими настройками
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Список каталогов с шаблонами OpenDocument
     ListOfDirectoriesForModelGenODT=Список каталогов содержащих файлы шаблонов в форматеOpenDocument. <br><br>Укажите здесь полный пусть к каталогу.<br>Каждый каталог с новой строки.<br>Для добавления каталога GED-модулей, добавьте здесь <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Файлы в этих каталогах должны заканчиваться символами <b>.odt</b> или <b>.ods</b>.
    -NumberOfModelFilesFound=Количество шаблонов в форматах ODT/ODS, найденных в этих папках
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Примеры синтаксиса: <br> C: \\ MYDIR <br> / home / mydir <br> DOL_DATA_ROOT / ecm / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Прежде чем сохранить шаблоны в этих каталогах прочитайте документацию на Wiki чтобы узнать, как создать свой шаблоны ODT документов:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Ключ к использованию веб-служб
     TestSubmitForm=Форма тестового ввода
     ThisForceAlsoTheme=Используя этот менеджер меню будет использоваться тема выбранная пользователем. Также этот менеджер меню для смартфонах работает не на всех смартфонах. Используйте другой менеджер меню если у вас возникли проблемы.
     ThemeDir=Каталог тем оформления
    -ConnectionTimeout=Время ожидания подключения
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Время ожидания ответа
     SmsTestMessage=Пробное сообщение от __PHONEFROM__ к ​​__PHONETO__
     ModuleMustBeEnabledFirst=Для использования этой функции необходимо сначала включить модуль <b>%s</b>
     SecurityToken=Ключ для шифрования URL-адресов
    -NoSmsEngine=Нет доступного менеджера SMS-рассылки. По умолчанию менеджер SMS-рассылки не установливаются (потому что они зависят от внешних поставщиков), но вы можете найти его на %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Вы можете настроить каждую глобальную опции для создания PDF-файлов
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Правила придумывания почтовых ящиков
     HideAnyVATInformationOnPDF=Скрыть всю информацию, связанную с налогом с продаж/НДС в сгенерированном PDF-файле
     PDFRulesForSalesTax=Правила для налога с продаж/НДС
     PDFLocaltax=Правила для %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Скрывать описания продуктов в создаваемых PDF-файлах
     HideRefOnPDF=Скрывать артикул товара в создаваемых PDF-файлах
     HideDetailsOnPDF=Скрывать строки с деталями продукции в создаваемых PDF-файлах
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Параметры безопасных URL`ов
     SecurityTokenIsUnique=Использовать уникальный параметр securekey для каждого URL
     EnterRefToBuildUrl=Введите ссылку на объект %s
     GetSecuredUrl=Получить рассчитанный URL
    -ButtonHideUnauthorized=Скрыть кнопки у пользователей не являющихся администраторами вместо отображения их в отключенном виде
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Предыдущее значение НДС
     NewVATRates=Новое значение НДС
     PriceBaseTypeToChange=Изменять базовые цены на определенную величину
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Выбрать из списка
     ExtrafieldSelectList = Выбрать из таблицы
     ExtrafieldSeparator=Разделитель (не поле)
     ExtrafieldPassword=Пароль
    -ExtrafieldRadio=Радио-кнопка (только по выбору)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Флажок
     ExtrafieldCheckBoxFromList=Флажки из таблицы
     ExtrafieldLink=Ссылка на объект
     ComputedFormula=Вычисленное поле
     ComputedFormulaDesc=Вы можете ввести здесь формулу, используя другие свойства объекта или любое PHP-кодирование, чтобы получить динамическое вычисленное значение. Вы можете использовать любые совместимые с PHP формулы, включая «?» оператор условия и следующий глобальный объект: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>Предупреждение</strong>: Доступны только некоторые свойства объекта $. Если вам нужны не загруженные свойства, просто введите себе объект в формулу, как во втором примере. <br>Использование вычисленного поля означает, что вы не можете вводить себе какое-либо значение из интерфейса. Кроме того, если есть синтаксическая ошибка, формула может ничего не возвращать.<br><br> Пример формулы: <br>$object-> id <10? round ($object-> id/2, 2): ($object-> id + 2 * $user-> id) * (int) substr ($mysoc-> zip, 1, 2) <br><br> Пример для перезагрузки объектаe<br> (( $reloadedobj = new Societe ($db)) && ($reloadedobj-> fetch ($obj-> id? $obj-> id: ($obj-> rowid? $obj-> rowid: $object-> id)) > 0))? $reloadedobj-> array_options ['options_extrafieldkey'] * $reloadedobj-> capital/5: '-1' <br><br>Другой пример формулы для принудительной загрузки объекта и его родительского объекта: <br> (($reloadedobj = new Task ($db)) && ($reloadedobj-> fetch ($object-> id)> 0) && ($secondloadedobj = new Project ($db)) && ($secondloadedobj-> fetch ($reloadedobj-> fk_project)> 0))? $secondloadedobj-> ref: «Родительский проект не найден»
    -ExtrafieldParamHelpPassword=Сохраните это поле пустым, значение будет сохранено без шифрования (поле должно быть скрыто только со звездой на экране) .<br>Установите здесь значение «авто», чтобы использовать правило шифрования по умолчанию для сохранения пароля в базу данных (тогда значение read будет хешем, нет способа вернуть первоначальное значение)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=Список значений должен быть строками с ключом формата, значением (где ключ не может быть «0») <br><br>, например: <br>1, значение1<br>2, значение2<br>code3, значение3<br> ... <br><br> Для того, чтобы список был в зависимости от другого списка дополнительных атрибутов: <br>1 , value1 | options_<i>parent_list_code</i>: parent_key<br>2, value2 | options_<i>parent_list_code</i>: parent_key <br><br> Для того, чтобы список был в зависимости от другого списка: <br>1, value1 | <i>parent_list_code</i>: parent_key<br>2, value2| <i>parent_list_code</i>: parent_key
     ExtrafieldParamHelpcheckbox=Список значений должен быть строками с ключом формата, значением (где ключ не может быть «0») <br><br>, например: <br>1, значение1<br>2, значение2<br>3, значение3<br> ...
     ExtrafieldParamHelpradio=Список значений должен быть строками с ключом формата, значением (где ключ не может быть «0») <br><br>, например: <br>1, значение1<br>2, значение2<br>3, значение3<br> ...
    @@ -432,39 +436,39 @@ DefaultLink=Ссылка по умолчанию
     SetAsDefault=Установить по умолчанию
     ValueOverwrittenByUserSetup=Предупреждение: это значение может быть перезаписано в настройках пользователя (каждый пользователь может задать свои настройки ссылки ClickToDial)
     ExternalModule=Внешний модуль - установлен в директорию %s
    -BarcodeInitForThirdparties=Массовое создание штрих-кодов для Контрагентов
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Массовое создание или удаление штрих-кода для Товаров или Услуг
     CurrentlyNWithoutBarCode=В настоящее время у вас есть <strong>%s</strong>запись на <strong>%s</strong>%s без определенного штрих-кода.
     InitEmptyBarCode=Начальное значения для следующих %s пустых записей
     EraseAllCurrentBarCode=Стереть все текущие значения штрих-кодов
     ConfirmEraseAllCurrentBarCode=Вы действительно хотите удалить все текущие значения штрих-кода?
     AllBarcodeReset=Все значения штрих-кодов были удалены
    -NoBarcodeNumberingTemplateDefined=В модуле формирования штрих-кодов не определен шаблон нумерации
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Включить кеш файлов
     ShowDetailsInPDFPageFoot=Добавьте более подробную информацию в нижний колонтитул PDF-файлов, например, адрес вашей компании или имена менеджеров (для заполнения профессиональных идентификаторов, капитала компании и номера НДС).
     NoDetails=Нет подробностей в нижнем колонтитуле
     DisplayCompanyInfo=Показать адрес компании
     DisplayCompanyManagers=Отображать имена менеджеров
     DisplayCompanyInfoAndManagers=Отображать имена адресов и менеджеров компаний
    -EnableAndSetupModuleCron=Если вы хотите, чтобы этот повторяющийся счет был создан автоматически, модуль *%s* должен быть включен и правильно настроен. В противном случае генерация счетов-фактур должна быть произведена вручную из этого шаблона с помощью кнопки * Создать *. Обратите внимание, что даже если вы включили автоматическую генерацию, вы можете безопасно запустить ручную генерацию. Генерация дубликатов за тот же период невозможна.
    -ModuleCompanyCodeCustomerAquarium=%s с последующим сторонним кодом клиента для кода учета клиентов
    -ModuleCompanyCodeSupplierAquarium=%s а затем код поставщика третьей стороны для кода учета поставщика
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Верните пустой учетный код.
     ModuleCompanyCodeDigitaria=Код учета зависит от стороннего кода. Код состоит из символа «C» в первой позиции, за которым следуют первые 5 символов кода третьей стороны.
     Use3StepsApproval=По умолчанию заказы на поставку должны быть созданы и одобрены двумя разными пользователями (один шаг/пользователь для создания и один шаг/пользователь для одобрения. Обратите внимание, что если у пользователя есть как разрешение на создание и утверждение, достаточно одного шага/пользователя) , Вы можете задать эту опцию, чтобы ввести утверждение третьего шага/пользователя, если сумма превышает выделенное значение (так что потребуется 3 шага: 1 = валидация, 2 = первое утверждение и 3 = второе одобрение, если суммы достаточно). <br>Установите это для пустого, если достаточно одного утверждения (2 шага), установите его на очень низкое значение (0,1), если требуется второе утверждение (3 шага).
     UseDoubleApproval=Используйте одобрение на 3 шага, когда сумма (без налога) выше ...
    -WarningPHPMail= ПРЕДУПРЕЖДЕНИЕ. Часто лучше настроить исходящие письма на использование сервера электронной почты вашего провайдера вместо настройки по умолчанию. Некоторые поставщики электронной почты (например, Yahoo) не позволяют отправлять электронную почту с другого сервера, кроме своего собственного сервера. Ваша текущая настройка использует сервер приложения для отправки электронной почты, а не сервера вашего почтового провайдера, поэтому некоторые получатели (тот, который совместим с ограничительным протоколом DMARC), спросят у вашего поставщика электронной почты, могут ли они принять вашу электронную почту и некоторых поставщиков электронной почты (например, Yahoo) могут отвечать «нет», потому что сервер не является их сервером, поэтому некоторые из ваших отправленных писем не могут быть приняты (обратите внимание также на отправку квоты поставщика электронной почты) .<br>Если ваш поставщик электронной почты (например, Yahoo) это ограничение, вы должны изменить настройку электронной почты, чтобы выбрать другой метод «SMTP-сервер», и введите SMTP-сервер и учетные данные, предоставленные вашим провайдером электронной почты (попросите своего поставщика EMail получить учетные данные SMTP для вашей учетной записи).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=Если вашему SMTP-провайдеру электронной почты необходимо ограничить почтовый клиент некоторыми IP-адресами (это очень редко), это IP-адрес почтового пользователя (MUA) для вашего приложения ERP CRM: <strong>%s</strong>.
     ClickToShowDescription=Нажмите, чтобы посмотреть описание
    -DependsOn=Этот модуль нуждается в модуле (модулях)
    +DependsOn=This module needs the module(s)
     RequiredBy=Этому модулю требуется модуль (модулями)
    -TheKeyIsTheNameOfHtmlField=Это имя поля HTML. Для этого нужно иметь технические знания для чтения содержимого страницы HTML, чтобы получить ключевое имя поля.
    -PageUrlForDefaultValues=Вы должны указать здесь относительный URL страницы. Если вы укажете параметры в URL-адресе, значения по умолчанию будут эффективны, если все параметры будут одинаковыми. Примеры:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br> Для формы, чтобы создать новую третью сторону, она <strong> %s </strong>, <br> Если вы хотите значение по умолчанию, только если url имеет некоторый параметр, вы можете использовать <strong> %s </strong>
    -PageUrlForDefaultValuesList=<br>Для страниц, которые перечисляют третьи стороны, это <strong>%s</strong>,<br>Если вы хотите значение по умолчанию, только если url имеет некоторый параметр, вы можете использовать <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Включить использование персонализированных значений по умолчанию
    -EnableOverwriteTranslation=Включить использование переписанного перевода
    -GoIntoTranslationMenuToChangeThis=Для ключа с этим кодом был найден перевод, поэтому, чтобы изменить это значение, вы должны отредактировать его из Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Предупреждение, установка порядка сортировки по умолчанию может привести к технической ошибке при переходе на страницу списка, если поле является неизвестным. Если у вас возникла такая ошибка, вернитесь на эту страницу, чтобы удалить порядок сортировки по умолчанию и восстановить поведение по умолчанию.
     Field=Поле
     ProductDocumentTemplates=Шаблоны документов для создания документа продукта
    @@ -476,16 +480,18 @@ SendEmailsReminders=Отправить напоминания по электр
     davDescription=Добавить компонент в качестве сервера DAV
     DAVSetup=Настройка модуля DAV
     DAV_ALLOW_PUBLIC_DIR=Включить общий каталог (каталог WebDav без необходимости входа)
    -DAV_ALLOW_PUBLIC_DIRTooltip=Общий каталог WebDav - это каталог WebDAV, к которому каждый может иметь доступ (в режиме чтения и записи), без необходимости использовать/использовать существующую учетную запись для входа/пароля.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Пользователи и группы
    +Module0Name=Пользователи и Группы
     Module0Desc=Управление Пользователями / Сотрудниками и Группами
    -Module1Name=Контрагенты
    +Module1Name=Third Parties
     Module1Desc=Компании и управление контактами (клиенты, перспективы...)
     Module2Name=Коммерческие
     Module2Desc=Коммерческое управление
     Module10Name=Бухгалтерия
    -Module10Desc=Простые бухгалтерские отчеты (журналы, оборот) на основе содержимого базы данных. Не использует таблицу регистров.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Предложения
     Module20Desc=Управление коммерческими предложеними
     Module22Name=Почтовые рассылки
    @@ -511,13 +517,13 @@ Module52Desc=Управление акциями (продукция)
     Module53Name=Услуги
     Module53Desc=Управление услугами
     Module54Name=Контакты/Подписки
    -Module54Desc=Управление договорами (услугами или связанными подписками)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Штрих-коды
     Module55Desc=Управление штрих-кодами
     Module56Name=Телефония
     Module56Desc=Интеграция телефонии
     Module57Name=Прямые банковские поручения
    -Module57Desc=Управление прямыми дебиторскими платежными поручениями. Включая создание SEPA-файлов для европейских стран.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Интеграция с системами НажатьДляЗвонка (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Транспортные расходы
     Module75Desc=Управление транспортными расходами
     Module80Name=Отгрузки
     Module80Desc=Управление отгрузкой и доставкой заказов
    -Module85Name=Банки и наличные
    +Module85Name=Banks and Cash
     Module85Desc=Управление банковскими счетами или наличными
    -Module100Name=Внешний сайт
    -Module100Desc=Этот модуль добавляет внешний сайт или страницу в меню Dolibarr и отображает его небольшом окне
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman и SPIP
     Module105Desc=Модуль интерфейса для рассылок Mailman или SPIP
     Module200Name=LDAP
    -Module200Desc=Синхронизация каталогов LDAP
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=Интергация с PostNuke
     Module240Name=Экспорт данных
    -Module240Desc=Инструмент для экспорта данных Dolibarr  (с ассистентами)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Импорт данных
    -Module250Desc=Инструмент для импорта данных Dolibarr  (с ассистентами)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Участники
     Module310Desc=Управление участниками фонда
     Module320Name=RSS-канал
     Module320Desc=Добавление RSS-каналов на страницах Dolibarr
    -Module330Name=Закладки
    -Module330Desc=Управление закладками
    -Module400Name=Проекты/Возможности/Потенциальные клиенты
    -Module400Desc=Управление проектами, возможностями/выводами и/или задачами. Вы также можете назначить любой элемент (счет-фактура, заказ, предложение, вмешательство и т. д.) в проект и получить трансверсальный вид из представления проекта.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Веб-календарь
     Module410Desc=Интеграция веб-календаря
     Module500Name=Налоги и специальные расходы
     Module500Desc=Управление другими расходами (налоги на продажу, социальные или налоговые налоги, дивиденды, ...)
     Module510Name=Выплата заработной платы работникам
    -Module510Desc=Записывайте и следите за выплатой заработной платы сотрудникам
    +Module510Desc=Record and track employee payments
     Module520Name=Ссуда
     Module520Desc=Управление ссудами
     Module600Name=Уведомления о деловых событиях
    -Module600Desc=Отправлять сообщения электронной почты (инициированные некоторыми бизнес-событиями) пользователям (настройка, определенная для каждого пользователя), контактам сторонних разработчиков (настройка, определенная для каждой третьей стороны) или фиксированным электронным письмам
    -Module600Long=Обратите внимание, что этот модуль предназначен для отправки электронных писем в режиме реального времени, когда происходит определенное деловое событие. Если вы ищете функцию отправки напоминаний по электронной почте о своих событиях в повестке дня, зайдите в настройку модуля Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Варианты продукта
    -Module610Desc=Позволяет создавать варианты продуктов на основе атрибутов (цвет, размер, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Пожертвования
     Module700Desc=Управление пожертвованиями
     Module770Name=Отчёты о затратах
    -Module770Desc=Управление и утверждение отчётов о затратах (на транспорт, еду)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Коммерческое предложение продавца
     Module1120Desc=Запросить коммерческое предложение и цены продавца
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Генерация массового сообщения
     Module1780Name=Теги/Категории
     Module1780Desc=Создание тегов/категорий (продуктов, клиентов, поставщиков, контактов или членов)
     Module2000Name=Текстовый редактор WYSIWYG
    -Module2000Desc=Позволяет редаткировать некоторые текстовые области использую расширенный редактор (основанный на CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Динамическое ценообразование
     Module2200Desc=Разрешить использовать математические операции для цен
     Module2300Name=Запланированные задания
     Module2300Desc=Запланированное управление заданиями (псевдоним cron или chrono table)
     Module2400Name=События/Повестка дня
    -Module2400Desc=Следуйте за сделанными и предстоящими событиями. Пусть приложение регистрирует автоматические события для отслеживания или записывает ручные события или rendez-vous. Это основной важный модуль для хорошего управления взаимоотношениями с клиентами или поставщиками.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Система управления документами / Управление электронным контентом. Автоматическая организация ваших сгенерированных или сохраненных документов. Поделитесь им, когда вам нужно.
     Module2600Name=API/Веб-службы (SOAP-сервер)
    @@ -590,16 +596,16 @@ Module2600Desc=Включение Dolibarr SOAP сервера предоста
     Module2610Name= API/веб-службы (сервер REST)
     Module2610Desc=Включить сервер REST для Dolibarr, предоставляющий услуги API
     Module2660Name=Вызовите WebServices (клиент SOAP)
    -Module2660Desc=Включите клиент веб-сервисов Dolibarr (можно использовать для передачи данных/запросов на внешние серверы. Заказы поставщиков поддерживаются только на данный момент)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Всемирно распознаваемый аватар
    -Module2700Desc=Использование интернет-сервиса Gravatar (www.gravatar.com), для отображения фото пользователей / участников (связанных с их электронной почтой). Необходим доступ в Интернет
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP-клиент
     Module2900Name=GeoIPMaxmind
     Module2900Desc=Подключение к службе GeoIP MaxMind для преобразования IP-адреса в название страны
     Module3100Name=Skype
     Module3100Desc=Добавить кнопку Skype в карты пользователей/третьих лиц/контактов/членов
     Module3200Name=Неограниченные архивы
    -Module3200Desc=Активировать журнал некоторых бизнес-событий в неизменный журнал. События архивируются в режиме реального времени. Журнал представляет собой таблицу цепочечных событий, которые могут быть прочитаны и экспортированы. Этот модуль может быть обязательным для некоторых стран.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=Менеджер отдела кадров
     Module4000Desc=Управление персоналом (управление отделом, контракты и чувства сотрудников)
     Module5000Name=Группы компаний
    @@ -609,27 +615,31 @@ Module6000Desc=Управление рабочим процессом (авто
     Module10000Name=Веб-сайты
     Module10000Desc=Создавайте публичные сайты с помощью редактора WYSIWG. Просто настройте свой веб-сервер (Apache, Nginx, ...), чтобы указать на выделенный каталог Dolibarr, чтобы он был онлайн в Интернете с вашим собственным доменным именем.
     Module20000Name=Заявления на отпуск
    -Module20000Desc=Управление заявлениями на отпуск и соблюдение графика отпусков работниками
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Ассортимент продукции
     Module39000Desc=Лот или серийный номер, управление питанием и продажами по продуктам
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Модуль, предлагающий страницу онлайн-оплаты, принимающую платежи с помощью кредитной/дебетовой карты через PayBox. Это можно использовать, чтобы позволить вашим клиентам делать бесплатные платежи или оплату на определенном объекте Dolibarr (счет-фактура, заказ, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Точка продаж
     Module50100Desc=Модуль точки продаж (POS).
    +Module50150Name=Точка продаж
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Модуль, чтобы предлагать страницу онлайн-платежей, принимающую платежи с использованием PayPal (кредитная карта или кредит PayPal). Это можно использовать, чтобы позволить вашим клиентам делать бесплатные платежи или оплату на определенном объекте Dolibarr (счет-фактура, заказ, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Учет (продвинутый)
    -Module50400Desc=Управление учетными записями (двойные записи, общие и вспомогательные регистры). Экспортируйте книгу в несколько других форматов программного обеспечения бухгалтерского учета.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=Модуль PrintIPP
    -Module54000Desc=Прямая печать (без открытия документа) использует интерфейс Cups IPP  (Принтер должен быть доступен с сервера, и система печати CUPS  должна быть установлена на сервере). 
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Голосование, обзор или голосование
    -Module55000Desc=Модуль для онлайн-опросов, опросов или голосов (например, Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Наценки
     Module59000Desc=Модуль управления наценками
     Module60000Name=Комиссии
     Module60000Desc=Модуль управления комиссиями
     Module62000Name=Обязанности по доставке товаров
    -Module62000Desc=Добавить функции для управления обязанностями по доставке товаров
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Ресурсы
     Module63000Desc=Управляйте ресурсами (принтеры, автомобили, комнаты, ...), затем вы можете делиться событиями
     Permission11=Просмотр счетов-фактур клиентов
    @@ -651,9 +661,9 @@ Permission32=Создание / изменение продукции / услу
     Permission34=Удаленные продукция / услуги
     Permission36=Просмотр / управление скрытой продукцией / услугами
     Permission38=Экспорт продукции
    -Permission41=Прочитайте проекты и задачи (общий проект и проекты, к которым я обращаюсь). Можно также ввести время, затраченное на меня или мою иерархию, на назначенные задачи (расписание)
    -Permission42=Создание / изменение проектов и задач (общие и мои проекты). Можно так же создать задачи и назначить пользователей для выполнения проекта и задач
    -Permission44=Удаление проектов (общих и моих проектов)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Экспорт проектов
     Permission61=Смотреть мероприятия
     Permission62=Создание / измение мероприятий
    @@ -686,7 +696,7 @@ Permission109=Удалить отправки
     Permission111=Читать финансовую отчетность
     Permission112=Создать / изменить / удалить и сравнить сделоки
     Permission113=Настройка финансовых учётных записей (создание, изменение категорий)
    -Permission114=Согласовать транзакции
    +Permission114=Reconcile transactions
     Permission115=Экспорт операций и выписок со счета
     Permission116=Перераспределение средств между счетами
     Permission117=Управление диспетчеризацией чеков
    @@ -694,15 +704,15 @@ Permission121=Просмотр контрагентов, связанных с 
     Permission122=Создать / изменить контрагентов, связанных с пользователем
     Permission125=Удалить контрагентов, связанных с пользователем
     Permission126=Экспорт контрагентов
    -Permission141=Просмотр всех проектов и задач (так же частные проекты в которых я не контактное лицо)
    -Permission142=Создать / изменить все проекты и задачи (так же частные проекты в которых я не контактное лицо)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Удалить все проекты и задачи (так же частные проекты в которых я не контактное лицо)
     Permission146=Посмотреть провайдеров
     Permission147=Посмотреть статистику
     Permission151=Посмотреть заказанные прямые дебетные платежи
     Permission152=Создать / изменить заказанные прямые дебетные платежи
     Permission153=Отправка / Передача заказанных прямых дебетовых платежей
    -Permission154=Запись Кредитных / Отклоненных прямых дебетовых платежей
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Посмотреть котракты/подписки
     Permission162=Создать/изменить котракты/подписки
     Permission163=Активировать услугу/подписку в контракте
    @@ -725,7 +735,7 @@ Permission187=Закрыть заказы поставщика
     Permission188=Отмена заказов поставщику
     Permission192=Создать строки
     Permission193=Отмена строк
    -Permission194=Посмотреть пропускную способность линий
    +Permission194=Read the bandwidth lines
     Permission202=Создать ADSL соединения
     Permission203=Заказ соединения заказов
     Permission204=Заказ подключений
    @@ -750,12 +760,12 @@ Permission244=Посмотреть содержание скрытых кате
     Permission251=Посмотреть других пользователей и группы
     PermissionAdvanced251=Посмотреть других пользователей
     Permission252=Посмотреть права доступа других пользователей
    -Permission253=Создание / Изменение других пользователей, групп и прав доступа
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Создать / изменить внутренних / внешних пользователей и права доступа
     Permission254=Создать / изменить только внешних пользователей
     Permission255=Изменить пароли других пользователей
     Permission256=Удалить или отключить других пользователей
    -Permission262=Расширенный доступ ко всем контрагентам (не только контрагентов пользователей являющихся торговыми представителями).<br> Не эффективно для внешних пользователей (всегда ограниченные только предложениями, заказами, счетами-фактурами, контрактами и т.д.).<br>Не эффективно для проектов (только правила разрешений проекта, видимости и распределение вопросов).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Читать CA
     Permission272=Читать счета
     Permission273=Выпуск счетов
    @@ -765,7 +775,7 @@ Permission283=Удалить контакты
     Permission286=Экспортировать контакты
     Permission291=Читать тарифы
     Permission292=Установка разрешений на тарифы
    -Permission293=Изменение тарифов клиентам
    +Permission293=Modify customers tariffs
     Permission300=Читать штрих-коды
     Permission301=Создать / изменить штрих-коды
     Permission302=Удалить штрих-коды
    @@ -787,11 +797,9 @@ Permission401=Читать скидки
     Permission402=Создать / изменить скидки
     Permission403=Проверить скидки
     Permission404=Удалить скидки
    -Permission501=Читать контракты/зарплаты сотрудников
    -Permission502=Создание/изменение контрактов/зарплат сотрудников
    -Permission511=Прочитать выплату зарплат
    -Permission512=Создание/изменение выплаты заработной платы
    -Permission514=Удалить зарплаты
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Экспорт зарплат
     Permission520=Открыть ссуды
     Permission522=Создать/изменить ссуды
    @@ -844,8 +852,8 @@ Permission1251=Запуск массового импорта внешних д
     Permission1321=Экспорт клиентом счета-фактуры, качества и платежей
     Permission1322=Повторно открыть оплаченный счет
     Permission1421=Экспорт заказов и атрибуты
    -Permission20001=Прочитайте запросы на отпуск (ваши отпуска и один из ваших подчиненных)
    -Permission20002=Создавайте/изменяйте ваши запросы на отпуск (ваши листья и один из ваших подчиненных)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Удалить заявления на отпуск
     Permission20004=Читайте все запросы на отпуск (даже пользователь не подчиняется)
     Permission20005=Создавать/изменять запросы на отпуск для всех (даже для пользователей, не подчиненных)
    @@ -880,8 +888,8 @@ Permission63001=Чтение ресурсов
     Permission63002=Создание/изменение ресурсов
     Permission63003=Удалить ресурсы
     Permission63004=Свяжите ресурсы с повесткой дня
    -DictionaryCompanyType= Тип компании
    -DictionaryCompanyJuridicalType= Организационно-правовая форма
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Потенциальный уровень предполагаемого клиента
     DictionaryCanton=Штат/Провинция
     DictionaryRegion=Регионы
    @@ -894,7 +902,7 @@ DictionaryVAT=Значения НДС или налога с продаж
     DictionaryRevenueStamp=Количество налоговых марок
     DictionaryPaymentConditions=Условия оплаты
     DictionaryPaymentModes=Режимы оплаты
    -DictionaryTypeContact=Типы Контактов/Адресов
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Тип страниц/контейнеров
     DictionaryEcotaxe=Экологический налог Ecotax (WEEE)
     DictionaryPaperFormat=Форматы бумаги
    @@ -908,47 +916,47 @@ DictionarySource=Происхождение Коммерческих предл
     DictionaryAccountancyCategory=Персонализированные группы для отчетов
     DictionaryAccountancysystem=Модели для диаграммы счетов
     DictionaryAccountancyJournal=Бухгалтерские журналы
    -DictionaryEMailTemplates=Шаблоны электронных писем
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Единицы
     DictionaryProspectStatus=Статус контакта
    -DictionaryHolidayTypes=Типы отпусков
    -DictionaryOpportunityStatus=Статус предполагаемого проекта
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Отчет о расходах - Категории транспорта
     DictionaryExpenseTaxRange=Отчет о расходах - Диапазон по транспортной категории
     SetupSaved=Настройки сохранены
     SetupNotSaved=Установки не сохранены
     BackToModuleList=Вернуться к списку модулей
    -BackToDictionaryList=Назад к списку словарей
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Тип налоговой печати
    -VATManagement=НДС менеджмент
    -VATIsUsedDesc=По умолчанию при создании потенциальных клиентов, счетов-фактур, заказов и т. Д. Ставка НДС соответствует действующему стандарту: <br> Если продавец не облагается НДС, то НДС по умолчанию равен 0. Конец правила. <br>Если (страна продажи = страна покупки), тогда НДС по умолчанию равен НДС продукта в стране продажи. Конец правила.  <br>Если продавец и покупатель находятся в Европейском Сообществе, а товары - это транспортные продукты (автомобиль, судно, самолет), то НДС по умолчанию равен 0 (НДС должен быть оплачен покупателем в обычном офисе его страны, а не продавец). Конец правила.  <br>Если продавец и покупатель находятся в Европейском сообществе, а покупатель не является компанией, тогда НДС по умолчанию соответствует НДС проданного продукта. Конец правила.  <br>Если продавец и покупатель находятся в Европейском Сообществе, а покупатель - компания, то по умолчанию НДС равен 0. Конец правила. <br>В любом случае предложенный дефолт равен VAT = 0. Конец правила.
    -VATIsNotUsedDesc=По умолчанию, предлагаемый НДС 0, которая может быть использована как для дела ассоциаций, отдельных лиц или небольших компаний.
    -VATIsUsedExampleFR=Во Франции это означает, что компании или организации имеют реальную финансовую систему (упрощенную реальную или нормальную реальность). Система, в которой объявляется НДС.
    -VATIsNotUsedExampleFR=Во Франции это означает ассоциации, которые не декларируются НДС, или компании, организации или либеральные профессии, которые выбрали фискальную систему микропредприятия (НДС в франшизе) и заплатили налог на франшизу без декларации НДС. Этот выбор отобразит ссылку «Не применимый НДС - art-293B CGI» на счета-фактуры.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Ставка
     LocalTax1IsNotUsed=Не использовать второй налог
    -LocalTax1IsUsedDesc=Использовать второй тип налога (отличный от НДС)
    -LocalTax1IsNotUsedDesc=Не использовать другой тип налога (отличный от НДС)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Второй тип налога
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Не использовать третий налог
    -LocalTax2IsUsedDesc=Использовать третий тип налога (отличный от НДС)
    -LocalTax2IsNotUsedDesc=Не использовать другой тип налога (отличный от НДС)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Третий тип налога
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE управления
    -LocalTax1IsUsedDescES= RE ставка по умолчанию при создании потенциального клиента, счета, заказы и т.д. последующей стандартных правил: <br> Если те покупатель не подвергается RE, RE по умолчанию = 0. Конец правления. <br> Если покупатель подвергается RE затем RE по умолчанию. Конец правления. <br>
    -LocalTax1IsNotUsedDescES= По умолчанию предлагается RE 0. Конец правления.
    -LocalTax1IsUsedExampleES= В Испании они являются профессионалами с учетом некоторых конкретных разделов испанский ИАЭ.
    -LocalTax1IsNotUsedExampleES= В Испании они являются профессиональными и общества и при условии соблюдения определенных слоев испанского ИАЭ.
    -LocalTax2ManagementES= IRPF управления
    -LocalTax2IsUsedDescES= RE ставка по умолчанию при создании потенциального клиента, счета, заказы и т.д. последующей стандартных правил: <br> Если продавец не подвергается IRPF, то IRPF по умолчанию = 0. Конец правления. <br> Если продавец подвергается IRPF то IRPF по умолчанию. Конец правления. <br>
    -LocalTax2IsNotUsedDescES= По умолчанию предлагается IRPF 0. Конец правления.
    -LocalTax2IsUsedExampleES= В Испании, фрилансеры и независимые специалисты, которые оказывают услуги и компаний, которые выбрали налоговой системы модулей.
    -LocalTax2IsNotUsedExampleES= В Испании они бизнес не облагается налогом на системе модулей.
    +LocalTax1ManagementES=RE управления
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=По умолчанию предлагается RE 0. Конец правления.
    +LocalTax1IsUsedExampleES=В Испании они являются профессионалами с учетом некоторых конкретных разделов испанский ИАЭ.
    +LocalTax1IsNotUsedExampleES=В Испании они являются профессиональными и общества и при условии соблюдения определенных слоев испанского ИАЭ.
    +LocalTax2ManagementES=IRPF управления
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=По умолчанию предлагается IRPF 0. Конец правления.
    +LocalTax2IsUsedExampleES=В Испании, фрилансеры и независимые специалисты, которые оказывают услуги и компаний, которые выбрали налоговой системы модулей.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Отчеты о местных налогах
     CalcLocaltax1=Продажи-Покупки
     CalcLocaltax1Desc=Отчёты о местных налогах  - это разница между  местными налогами с продаж и покупок
    @@ -958,7 +966,8 @@ CalcLocaltax3=Продажи
     CalcLocaltax3Desc=Отчёты о местных налогах  - это итог местных налогов с продаж
     LabelUsedByDefault=Метки, используемые по умолчанию, если нет перевода можно найти код
     LabelOnDocuments=Этикетка на документах
    -NbOfDays=Кол-во дней
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=На конец месяца
     CurrentNext=Текущая/Следующая
     Offset=Сдвиг
    @@ -984,7 +993,7 @@ DatabaseUser=Пользователь базы данных
     DatabasePassword=Пароль базы данных
     Tables=Таблицы
     TableName=Наименование таблицы
    -NbOfRecord=Кол-во записей
    +NbOfRecord=No. of records
     Host=Сервер
     DriverType=Тип драйвера
     SummarySystem=Обзор системной информации
    @@ -996,7 +1005,7 @@ Skin=Тема оформления
     DefaultSkin=Тема по умолчанию
     MaxSizeList=Максимальная длина списка
     DefaultMaxSizeList=Максимальная длина по умолчанию для списков
    -DefaultMaxSizeShortList=Максимальная длина по умолчанию для коротких списков (то есть в карточке клиента)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Сообщение дня
     MessageLogin=Сообщение на странице входа
     LoginPage=Страница авторизации
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Постоянный поиск формы на лево
     DefaultLanguage=Язык по умолчанию (код языка)
     EnableMultilangInterface=Включить многоязычный интерфейс
     EnableShowLogo=Показать логотип на левом меню
    -CompanyInfo=Информация о компании/организации
    -CompanyIds=Идентификационные данные компаний/организаций
    +CompanyInfo=Компания/Организация
    +CompanyIds=Company/Organization identities
     CompanyName=Имя
     CompanyAddress=Адрес
     CompanyZip=Индекс
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Владелец банковского счета %s
     BankModuleNotActive=Модуль Банковских счетов не активирован
     ShowBugTrackLink=Показать ссылку "<strong>%s</strong>"
     Alerts=Предупреждения
    -DelaysOfToleranceBeforeWarning=Терпимость задержки перед предупреждение
    -DelaysOfToleranceDesc=Этот экран позволяет вам определить мириться с задержками до готовности сообщения на экране при picto %s в конце каждого элемента.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Толерантность задержки (в днях) до предупреждения о запланированных событиях (событиях повестки дня) еще не завершена
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Толерантность задержки (в днях) до предупреждения о незавершенном проекте
    -Delays_MAIN_DELAY_TASKS_TODO=Допуск задержки (в днях) до предупреждения о запланированных задачах (задачах проекта) еще не завершен
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Допуск задержки (в днях) до того, как предупреждение о заказах еще не обработано
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Допуск задержки (в днях) до того, как предупреждение о заказах на поставку еще не обработано
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Задержка толерантности (в днях) до оповещения о предложениях, чтобы закрыть
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Задержка толерантности (в днях) до оповещения о предложениях не будет взиматься
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Терпимость задержки (в днях) до готовности на услуги для активации
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Терпимость задержки (в днях) до оповещения о истек услуги
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Терпимость задержки (в днях) до готовности на неоплачиваемую поставщиком счета-фактуры
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Терпимость задержки (в днях) до готовности на неоплачиваемую клиентом счета-фактуры
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Терпимость задержки (в днях) до оповещения о текущих банковских счетов
    -Delays_MAIN_DELAY_MEMBERS=Толерантность задержки (в днях) до оповещения по отсроченным членский взнос
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Терпимость задержки (в днях) до полной готовности к чеки сделать депозит
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Задержка допуска (в днях) перед предупреждением для отчетов о расходах для утверждения
    -SetupDescription1=Зона настройки предназначена для первоначальных параметров настройки перед началом использования Dolibarr.
    -SetupDescription2=Два обязательных этапа установки следующие шаги (две первые записи в левом меню настройки):
    -SetupDescription3=Настройки в меню <a href="%s">%s->%s</a>. Этот шаг требуется, поскольку он определяет данные, используемые на экранах Dolibarr, для настройки поведения программного обеспечения по умолчанию (например, для связанных с страной функций).
    -SetupDescription4=Настройки в меню <a href="%s">%s ->%s</a>. Этот шаг необходим, поскольку Dolibarr ERP/CRM представляет собой набор из нескольких модулей/приложений, все более или менее независимых. Новые функции добавляются в меню для каждого модуля, который вы активируете.
    -SetupDescription5=Другие пункты меню управления необязательных параметров.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Безопасность ревизии события
     Audit=Аудит
     InfoDolibarr=О Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Вы можете включить в журнале событий
     AreaForAdminOnly=Параметры настройки могут быть установлены только <b> пользователем администратора </b>.
     SystemInfoDesc=Система информации разного техническую информацию Вы получите в режиме только для чтения и видимые только для администраторов.
     SystemAreaForAdminOnly=Эта область доступна для пользователей только администратором. Ни одно из разрешений Dolibarr может снизить этот предел.
    -CompanyFundationDesc=Измените на этой странице всю известную информацию о компании или фонде, которую вам нужно управлять (для этого нажмите кнопку «%s» или «%s» внизу страницы)
    -AccountantDesc=Изменить на этой странице всю известную информацию о вашем бухгалтере/бухгалтере
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=Номер файла
     DisplayDesc=Вы можете выбрать каждого параметра, связанных с Dolibarr выглядеть и чувствовать себя здесь
     AvailableModules=Доступное приложение/модули
     ToActivateModule=Чтобы активировать модуль, перейдите на настройку зоны.
     SessionTimeOut=Тайм-аут для сессии
    -SessionExplanation=Это гарантия того, что число сессии никогда не истечет до этой задержки. Но PHP sessoin управления не гарантирует, что сессия всегда заканчивается по истечении этой задержки: Это происходит, если система для очистки кэша сессии запущен. <br> Примечание: без каких-либо конкретной системы, внутренние PHP процесс чистой сессия каждые <b>примерно %s /% с</b> доступом, но только во время доступа, сделанные другими сессиями.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Доступные триггеры
    -TriggersDesc=Триггеры представляют собой файлы, которые изменяют поведение Dolibarr рабочий раз скопировать в директорию <b>htdocs / входит / триггеров.</b> Они реализованы новые действия, активированные на Dolibarr событий (создание новой компании, проверка счетов-фактур, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Триггеры этого файла отключено <b>NORUN-суффикс</b> в названии.
     TriggerDisabledAsModuleDisabled=Триггеры в этом файле будут отключены как <b>модуль %s</b> отключен.
     TriggerAlwaysActive=Триггеры в этом файле, всегда активны, независимо являются активированный Dolibarr модули.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Вставьте все справочные данные. Вы 
     ConstDesc=Эта страница позволяет редактировать все другие параметры, недоступные на предыдущих страницах. Это в основном зарезервированные параметры для разработчиков или расширенные способы устранения неполадок. Список опций <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=Все остальные параметры, связанные с безопасностью, определены здесь.
     LimitsSetup=Пределы / Точная настройка
    -LimitsDesc=Вы можете определить лимиты, уточнения и optimisations используемой Dolibarr здесь
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Макс десятичных цен за единицу
     MAIN_MAX_DECIMALS_TOT=Макс десятичных общей цены
     MAIN_MAX_DECIMALS_SHOWN=Макс десятичных цен отображается на экране (Добавить <b>...</b> После этого, если вы хотите посмотреть <b>...</b> когда число усекается когда отображаются на экране)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Чистая цена единицы продукта
     TotalPriceAfterRounding=Общая стоимость (нетто / НДС / включая налоги) после округления
     ParameterActiveForNextInputOnly=Параметр эффективным для следующего ввода только
     NoEventOrNoAuditSetup=Нет безопасности событие было зафиксировано еще. Это может быть нормально, если проверка не была включена в "Настройка - Безопасность - аудит" страница.
    -NoEventFoundWithCriteria=Нет событий безопасности была обнаружена в таких поисковых критериев.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=См. вашей локальной настройки Sendmail
     BackupDesc=Чтобы сделать полную резервную копию Dolibarr, Вам необходимо:
     BackupDesc2=Сохраните каталог содержимого документов (<b>%s</b>), который содержит все загруженные и сгенерированные файлы (поэтому он включает все файлы дампа, сгенерированные на шаге 1).
    -BackupDesc3=Сохраняет содержание вашей базы данных  (<b>%s</b>)  в файл. Для этого используйте следующей мастер.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Архивированный каталог должны храниться в безопасном месте.
     BackupDescY=Генерируемый файла дампа следует хранить в надежном месте.
    -BackupPHPWarning=Использование этого метода не гарантирует создание резервной копии. Предыдущий метод предпочтительнее.
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Для восстановления резервной Dolibarr, Вам необходимо:
    -RestoreDesc2=Восстановите файл архива (например, zip-файл) каталога документов, чтобы извлечь дерево файлов в каталог документов новой установки Dolibarr или в эту текущую документацию directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Восстановите данные из резервного файла дампа в базу данных новой установки Dolibarr или в базу данных этой текущей установки (<b>%s</b>). Предупреждение. После завершения восстановления вы должны использовать логин/пароль, существовавшие при создании резервной копии, для повторного подключения. Чтобы восстановить резервную базу данных в этой текущей установке, вы можете следовать за этим помощником.
     RestoreMySQL=Иvпорт MySQL
     ForcedToByAModule= Это правило <b>вынуждены %s</b> на активированный модуль
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Вы должны запуст
     YourPHPDoesNotHaveSSLSupport=SSL функций, не доступных в PHP
     DownloadMoreSkins=Дополнительные шкуры для загрузки
     SimpleNumRefModelDesc=Вернуться номер с форматом %syymm-NNNN, где YY это год, месяц мм и NNNN последовательность без отверстия и без сброса
    -ShowProfIdInAddress=Показать профессионала идентификатор с адресами на документах
    -ShowVATIntaInAddress=Скрыть НДС Int num с адресами на документы
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Частичный перевод
    -MAIN_DISABLE_METEO=Отключить метео зрения
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Стандартный режим
     MeteoStdModEnabled=Стандартный режим включен
     MeteoPercentageMod=Процентный режим
     MeteoPercentageModEnabled=Включен режим процента
     MeteoUseMod=Нажмите, чтобы использовать%s
     TestLoginToAPI=Испытание Войти в API
    -ProxyDesc=Некоторые особенности Dolibarr необходимо иметь доступ в Интернет для работы. Определить параметры здесь для этого. Если сервер Dolibarr находится за прокси-сервера, эти параметры рассказывает Dolibarr как получить доступ к интернет через него.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Внешний доступ
     MAIN_PROXY_USE=Использовать прокси-сервер (в противном случае прямого доступа к интернету)
     MAIN_PROXY_HOST=Имя / Адрес прокси-сервера
     MAIN_PROXY_PORT=Порт прокси-сервера
     MAIN_PROXY_USER=Войти, чтобы использовать прокси-сервер
     MAIN_PROXY_PASS=Пароль для использования прокси-сервера
    -DefineHereComplementaryAttributes=Определить здесь все атрибуты, а не уже доступны по умолчанию, и что вы хотите быть поддерживается %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Дополнительные атрибуты
     ExtraFieldsLines=Дополнительные атрибуты (строки)
     ExtraFieldsLinesRec=Дополнительные атрибуты (шаблоны счетов-фактур)
     ExtraFieldsSupplierOrdersLines=Дополнительные атбрибуты (строки заказа)
     ExtraFieldsSupplierInvoicesLines=Дополнительные атрибуты (строки счёта)
     ExtraFieldsThirdParties=Дополнительные атрибуты (контрагенты)
    -ExtraFieldsContacts=Дополнительные атрибуты (контакт/адрес)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Дополнительные атрибуты (Участник)
     ExtraFieldsMemberType=Дополнительные атрибуты (тип Участника)
     ExtraFieldsCustomerInvoices=Дополнительные атрибуты (Счета-Фактуры)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=только латинские строчны
     SendmailOptionNotComplete=Предупреждение, на некоторых системах Linux, для отправки электронной почты из электронной почты, Sendmail выполнения установки должны conatins опцию-ба (параметр mail.force_extra_parameters в файле php.ini). Если некоторые получатели не получают электронные письма, попытке изменить этот параметр с PHP mail.force_extra_parameters =-ба).
     PathToDocuments=Путь к документам
     PathDirectory=Каталог
    -SendmailOptionMayHurtBuggedMTA=Функция отправки писем с использованием метода «PHP mail direct» будет генерировать почтовое сообщение, которое может быть неправильно проанализировано некоторыми почтовыми серверами. Результатом является то, что некоторые письма не могут быть прочитаны людьми, размещенными на этих прослушиваемых платформах. Это случай для некоторых интернет-провайдеров (например: Orange во Франции). Это не проблема в Dolibarr и PHP, а на получение почтового сервера. Однако вы можете добавить опцию MAIN_FIX_FOR_BUGGED_MTA в 1 - setup - другое для модификации Dolibarr, чтобы этого избежать. Однако у вас могут возникнуть проблемы с другими серверами, которые строго соблюдают стандарт SMTP. Другое решение (рекомендуется) - использовать метод «Библиотека сокетов SMTP», который не имеет недостатков.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Настройка перевода
     TranslationKeySearch=Поиск ключа перевода или строки
     TranslationOverwriteKey=Перезаписать строку перевода
     TranslationDesc=Как установить отображаемый язык приложения: <br> * Systemwide: menu <strong>Home - Setup - Display</strong><br> * На пользователя: используйте вкладку <strong> дисплея дисплея </strong>User на карточке пользователя (нажмите на имя пользователя в верхней части экрана).
     TranslationOverwriteDesc=Вы также можете переопределить строки, заполняющие следующую таблицу. Выберите свой язык из раскрывающегося списка «%s», вставьте строку перевода в «%s» и ваш новый перевод в «%s»
    -TranslationOverwriteDesc2=Вы можете использовать другую вкладку, чтобы помочь вам узнать, какой ключ перевода использовать
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Строка перевода
     CurrentTranslationString=Текущая строка перевода
     WarningAtLeastKeyOrTranslationRequired=Критерии поиска требуются, по крайней мере, для строки ключа или перевода
     NewTranslationStringToShow=Новая строка перевода для показа
     OriginalValueWas=Исходный перевод перезаписан. Исходное значение: <br><br>%s
    -TransKeyWithoutOriginalValue=Вы заставили новый перевод для ключа перевода '<strong>%s</strong>' который не существует в каких-либо языковых файлах
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Активированное приложение/модули: <b>%s</b>/<b>%s</b>
     YouMustEnableOneModule=Вы должны включить минимум 1 модуль
    -ClassNotFoundIntoPathWarning=Класс %s не найден по PHP пути
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Да летом
    -OnlyFollowingModulesAreOpenedToExternalUsers=Примечание. Для внешних пользователей открыты только следующие модули (независимо от разрешения таких пользователей), и только если были предоставлены разрешения:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Хранилище сессий шифровано системой SUHOSIN
     ConditionIsCurrently=Текущее состояние %s
    -YouUseBestDriver=Вы используете драйвер %s, который на текущий момент является самым подходящим
    -YouDoNotUseBestDriver=Вы используете устройство %s, но драйвер этого устройства %s не рекомендуется ипользовать. 
    -NbOfProductIsLowerThanNoPb=У вас только %s Товаров/Услуг в базе данных. Это не требует никакой оптимизации.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Поисковая оптимизация
    -YouHaveXProductUseSearchOptim=У вас есть продукт %s в базе данных. Вы должны добавить константу PRODUCT_DONOTSEARCH_ANYWHERE в 1 в Home-Setup-Other, вы ограничиваете поиск начальными строками, чтобы база данных могла использовать индекс, и вы должны получить немедленный ответ.
    -BrowserIsOK=Вы используете браузер %s. Это хороший выбор с точки зрения производительности и безопасности.
    -BrowserIsKO=Вы используете веб-браузер %s. Этот браузер, как известно, является плохим выбором для обеспечения безопасности, производительности и надежности. Мы рекомендуем вам использовать Firefox, Chrome, Opera или Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug загружен.
     XCacheInstalled=XCache загружен.
    -AddRefInList=Отображение клиента/поставщика ref в списке (выберите список или combobox) и большую часть гиперссылки. Третьи стороны появятся с именем «CC12345 - SC45678 - Крупная компания coorp», а не «Крупная компания coorp».
    -AskForPreferredShippingMethod=Попросите предпочтительный метод отправки для третьих сторон.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Редакция поля %s
     FillThisOnlyIfRequired=Например, +2 (заполняйте это поле только тогда, когда ваш часовой пояс отличается от того, который используется на сервере)
     GetBarCode=Получить штрих-код
     ##### Module password generation
     PasswordGenerationStandard=Возврат пароля, полученных в соответствии с внутренними Dolibarr алгоритма: 8 символов, содержащих общие цифры и символы в нижнем регистре.
    -PasswordGenerationNone=Не предлагайте никаких сгенерированных паролей. Пароль должен быть введен вручную.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Верните пароль в соответствии с вашей личной конфигурацией.
     SetupPerso=Согласно вашей конфигурации
     PasswordPatternDesc=Описание шаблона паролей
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail, необходимые для создания ново
     HRMSetup=Настройка модуля HRM
     ##### Company setup #####
     CompanySetup=Предприятия модуль настройки
    -CompanyCodeChecker=Модуль для генерации и проверки кода сторонних производителей (клиент или поставщик)
    -AccountCodeManager=Модуль для формирования кода учета (клиент или поставщик)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=Функция уведомлений электронной почты позволяет вам тихо отправлять автоматическую почту для некоторых событий Dolibarr. Цели уведомлений могут быть определены:
     NotificationsDescUser=* для пользователей, по одному пользователю.
     NotificationsDescContact=* для сторонних контактов (клиентов или поставщиков), по одному контакту.
     NotificationsDescGlobal=* или путем установки глобальных целевых сообщений электронной почты на странице настройки модуля.
    -ModelModules=Документы шаблоны
    -DocumentModelOdt=Создавать документы из шаблонов форматов OpenDocuments (.ODT or .ODS файлы для OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark по проекту документа
     JSOnPaimentBill=Активировать фунцию автозаполнения строк платежа в платёжной форме
    -CompanyIdProfChecker=Профессиональные Id уникальным
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Должно быть уникальным?
    -MustBeMandatory=Обязательно создавать третьи лица?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Обязательно проверять счета-фактуры?
     TechnicalServicesProvided=Предоставляемые технические услуги
     #####DAV #####
    -WebDAVSetupDesc=Это ссылки для доступа к каталогу WebDAV. Он содержит открытый доступ к любому пользователю, который знает URL (если разрешен доступ к общедоступной директории) и «частный» каталог, для которого требуется существующая учетная запись/пароль для входа.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Корневой URL-адрес сервера %s: %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Экспорт ссылка <b>на %s</b> формате доступна на следующую ссылку: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Экспорт ссылка <b>на %s</b> формате
     BillsSetup=Счета модуль настройки
     BillsNumberingModule=Счета и кредитных нот нумерации модуль
     BillsPDFModules=Счет документы моделей
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Модели платежных документов
     CreditNote=Кредитное авизо
     CreditNotes=Кредитные авизо
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Управление логином для каждого
     AdherentMailRequired=Электронная почта необходимая для создания нового пользователя
     MemberSendInformationByMailByDefault=Чекбокс отправить по почте подтверждение членов по умолчанию
     VisitorCanChooseItsPaymentMode=Посетитель может выбрать один из доступных режимов оплаты
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Установка LDAP
     LDAPGlobalParameters=Глобальные параметры
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Тестирование синхронизации т
     LDAPTestSearch= Тестировать поиск LDAP 
     LDAPSynchroOK=Синхронизация успешные испытания
     LDAPSynchroKO=Сбой синхронизации тест
    -LDAPSynchroKOMayBePermissions=Сбой синхронизации испытания. Убедитесь, что соединение с сервером правильно настроен, и позволяет LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=TCP соединение с сервером LDAP успешного (Server= %s, Порт= %s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=TCP соединение с сервером LDAP Failed (Server= %s, Порт= %s)
    -LDAPBindOK=Соединение и авторизация с сервером  LDAP прошла успешно (Сервер=%s, Порт=%s, Администратор=%s, Пароль=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=Подключение / Authentificate для LDAP-сервера Ошибка (Server= %s, Порт= %s, Admin= %s, Пароль= %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP-сервер настроен для версии 3
     LDAPSetupForVersion2=LDAP-сервер настроен для версии 2
     LDAPDolibarrMapping=Dolibarr Картирование
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Логин (самба, activedirectory)
     LDAPFieldLoginSambaExample=Пример: samaccountname
     LDAPFieldFullname=Фамилия Имя
     LDAPFieldFullnameExample=Пример: CN
    -LDAPFieldPasswordNotCrypted=Не тайный пароль
    -LDAPFieldPasswordCrypted=Тайный пароль
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Пример: userPassword
     LDAPFieldCommonNameExample=Пример: CN
     LDAPFieldName=Имя
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=На этой странице вы можете опред
     LDAPDescValues=Пример значения для <b>OpenLDAP</b> с загружены следующие схемы: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Если вы используете thoose ценности и OpenLDAP, модифицировать LDAP конфигурационный файл <b>slapd.conf,</b> чтобы все thoose схемы загрузки.
     ForANonAnonymousAccess=Для аутентифицированных доступа (для записи, например)
     PerfDolibarr=Настройки производительности/отчёты о оптимизации
    -YouMayFindPerfAdviceHere=На этой странице вы найдете некоторые заметки и советы по улучшению производительности.
    -NotInstalled=Не установлено, так что ваш сервер не может "тормозить" из-за этого.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Прикладной кеш
     MemcachedNotAvailable=Не найдено аддитивного кэша. Вы можете повысить производительность, установив кэш-сервер Memcached и модуль, способный использовать этот сервер кеша. <br>Более подробная информация здесь. <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http: //wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>. Заметьте, что многие веб-хостинг-провайдеры не предоставляют такой сервер кеша.
     MemcachedModuleAvailableButNotSetup=Модуль memcached для прикладного кэша найден, но настройка модуля не завершена.
     MemcachedAvailableAndSetup=Включен модуль memcached, предназначенный для использования сервера memcached.
     OPCodeCache=Кэш OPCode
    -NoOPCodeCacheFound=Кэш OPCode не найден. Возможно, вы используете другой кеш (XCache или eAccelerator хорошее решение), может вы не используете кеш OPCode вовсе (это плохое решение).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=Кеш HTTP  для статичных ресурсов (файлы стилей, изображений, скриптов)
     FilesOfTypeCached=Файлы типа  %s кешируются HTTP  сервером
     FilesOfTypeNotCached=Файлы типа  %s не кешируются HTTP  сервером
     FilesOfTypeCompressed=Файлы типа  %s  сжимаются HTTP  сервером
     FilesOfTypeNotCompressed=Файлы типа  %s  сжимаются не HTTP  сервером
     CacheByServer=Кэшируется сервером
    -CacheByServerDesc=Например, с помощью директивы Apache «ExpiresByType image/gif A2592000»
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Кэшируется браузером
     CompressionOfResources=Сжатие HTTP заголовков
    -CompressionOfResourcesDesc=Например, с помощью директивы Apache «AddOutputFilterByType DEFLATE»
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Такое автоматическое обнаружение невозможно с текущими браузерами
    -DefaultValuesDesc=Вы можете определить/принудительно ввести значение по умолчанию, которое вы хотите получить, когда создаете новую запись, и/или defaut фильтры или порядок сортировки, когда ваша запись списка.
    -DefaultCreateForm=Значения по умолчанию (для форм для создания)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Фильтры поиска по умолчанию
     DefaultSortOrder=Заказы сортировки по умолчанию
     DefaultFocus=Поля фокусировки по умолчанию
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Продукты модуль настройки
     ServiceSetup=Услуги установки модуля
     ProductServiceSetup=Продукты и услуги установки модулей
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=Максимальное количество товаров в комбинации выберите списки (0= без ограничений)
    -ViewProductDescInFormAbility=Визуализация продукта описания в форме (иначе как всплывающие подсказки)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Активировать в продукте/услуге Вложенные файлы вставить опцию объединить PDF-документ продукта в предложение PDF azur, если продукт/услуга находится в предложении
    -ViewProductDescInThirdpartyLanguageAbility=Визуализация описаний продуктов на стороннем языке
    -UseSearchToSelectProductTooltip=Также, если у вас есть большое количество продуктов (> 100 000), вы можете увеличить скорость, установив постоянную PRODUCT_DONOTSEARCH_ANYWHERE на 1 в Setup-> Other. Затем поиск будет ограничен началом строки.
    -UseSearchToSelectProduct=Подождите, пока вы нажмете клавишу перед загрузкой содержимого списка товаров (это может повысить производительность, если у вас большое количество продуктов, но это менее удобно)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Стандартный вид штрих-кода, используемого для продуктов
     SetDefaultBarcodeTypeThirdParties=Стандартный вид штрих-кода, используемого для третьих сторон
     UseUnits=Определите единицу измерения для количества во время заказа, предложения или строки счетов-фактур
    @@ -1503,7 +1516,7 @@ SendingsSetup=Отправка модуля настройки
     SendingsReceiptModel=Отправка получения модели
     SendingsNumberingModules=Отправки нумерации модулей
     SendingsAbility=Поддержка листов доставки для доставки клиентов
    -NoNeedForDeliveryReceipts=В большинстве случаев транспортные листы используются как в качестве листов для доставки клиентов (список отправляемых товаров), так и листы, которые получены и подписаны клиентом. Таким образом, квитанции о доставке товаров являются дублированными и редко активируются.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Дополнительный текст для поставок
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Продукция Поставки получения нумерации модуль
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Расширенный редактор
     ActivateFCKeditor=Включить FCKeditor для:
     FCKeditorForCompany=WYSIWIG создание / издание компаний описание и сведения
     FCKeditorForProduct=WYSIWIG создания / выпуска продукции / услуг описание и сведения
    -FCKeditorForProductDetails=WYSIWIG создание/издание продуктов детализирует линии для всех объектов (предложения, заказы, счета-фактуры и т.д.). <font class="warning"> Предупреждение. Использование этой опции для этого случая серьезно не рекомендуется, так как это может создавать проблемы со специальными символами и формированием страницы при создании файлов PDF</font>.
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG создание / издание рассылок
     FCKeditorForUserSignature=Редактор WYSIWIG  для создания/изменения подписи пользователя
     FCKeditorForMail=WYSIWIG создание/издание для всей почты (кроме Tools-> eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Подключение удалось, но база данных не будет смотреть на OSCommerce данных (Ключевые% не найдено в таблице %s).
    -OSCommerceTestOk=Соединение с сервером ' %s' на базе ' %s' пользователя ' %s' успешно.
    -OSCommerceTestKo1=Соединение с сервером ' %s' успешными, но база данных ' %s' не может быть достигнута.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Соединение с сервером '%s' к БД '%s' с именем пользователя '%s' выполнено успешно.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Соединение с сервером ' %s' пользователя ' %s' провалилась.
     ##### Stock #####
     StockSetup=Настройка модуля запаса
    -IfYouUsePointOfSaleCheckModule=Если вы используете модуль точки продажи (POS-модуль, предоставленный по умолчанию или другой внешний модуль), эта настройка может быть проигнорирована модулем Point Sale. Большинство модулей модулей продаж предназначены для немедленного создания счета-фактуры и уменьшения запасов по умолчанию, независимо от того, какие здесь варианты. Таким образом, если вам нужно или не иметь снижение запасов при регистрации на продажу с вашего пункта продажи, проверьте также, что ваш POS-модуль настроен.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Удаленное Меню 
     Menus=Меню
    @@ -1548,7 +1561,7 @@ DetailRight=Условие для отображения несанкциони
     DetailLangs=Ланг имя ярлыка код перевода
     DetailUser=Стажер / Extern / Все
     Target=Цель
    -DetailTarget=Целевой показатель по ссылке (_blank началу открыть новое окно)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Уровень (-1: верхнее меню, 0: заголовок меню&gt; 0 меню и подменю)
     ModifMenu=Меню изменения
     DeleteMenu=Удалить меню
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=НДС из-за: <br> - По доставке / оплат
     OptionVatDebitOptionDesc=НДС из-за: <br> - По доставке / оплате товаров <br> - На счета (дебетовой) на услуги
     OptionPaymentForProductAndServices=Кассовая система для продуктов и услуг
     OptionPaymentForProductAndServicesDesc=НДС должен быть: <br> - на оплату товаров<br> - на оплату услуг
    -SummaryOfVatExigibilityUsedByDefault=Срок действия НДС по умолчанию в соответствии с выбранным вариантом:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=О доставке
     OnPayment=Об оплате
     OnInvoice=В счете-фактуре
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Бух. код покупок
     AgendaSetup=Акции и повестки модуль настройки
     PasswordTogetVCalExport=Ключевые разрешить экспорт ссылке
     PastDelayVCalExport=Не экспортировать события старше
    -AGENDA_USE_EVENT_TYPE=Использование типов событий (управляемых в меню Настройка -> Словари -> Тип событий повестки дня)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Автоматически устанавливать это значение по умолчанию для типа события в форме создания события
    -AGENDA_DEFAULT_FILTER_TYPE=Устанавливать автоматически этот тип события в фильтр поиска для просмотра повестки дня
    -AGENDA_DEFAULT_FILTER_STATUS=Устанавливать автоматически этот статус события в фильтр поиска для просмотра повестки дня
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Какую вкладку вы хотите открывать по умолчанию, когда выбираете из меню Повестку дня
     AGENDA_REMINDER_EMAIL=Включить напоминание о событиях <b>по электронной почте</b> (напоминание опции/задержки можно определить для каждого события). Примечание. Модуль <strong>%s</strong> должен быть включен и правильно настроен для отправки напоминания с правильной частотой.
    -AGENDA_REMINDER_BROWSER=Включить напоминание о событиях <b> в браузере пользователя</b> (когда дата события достигнута, каждый пользователь может отказаться от этого из вопроса подтверждения браузера)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Включить звуковое оповещение
     AGENDA_SHOW_LINKED_OBJECT=Показывать связанный объект в представлении повестки дня
     ##### Clicktodial #####
     ClickToDialSetup=Нажмите для набора модуля настройки
     ClickToDialUrlDesc=Url звонившего, когда клик по пиктограмме телефона сделан. В URL-адресе вы можете использовать теги<br><b>__PHONETO__</b>, которые будут заменены на номер телефона человека для вызова<br><b>__PHONEFROM__</b>, который будет заменен номером телефона вызывающего абонента (вашего) <br><b>__LOGIN__</b>, который будет заменен на clicktodial login (определенном на карточке пользователя) <br><b>__PASS__</b>, который будет заменен кликтодиальным паролем (определяется на карточке пользователя).
    -ClickToDialDesc=Этот модуль позволяет сделать номера телефонов доступными. Щелчок по этому значку вызовет телефонный звонок для вашего телефона. Это можно использовать для вызова системы центра обработки вызовов от Dolibarr, которая может звонить по номеру телефона в системе SIP, например.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Используйте только ссылку «tel:» на номера телефонов
    -ClickToDialUseTelLinkDesc=Используйте этот метод, если у ваших пользователей есть программный телефон или программный интерфейс, установленный на одном компьютере, чем браузер, и вызывается при нажатии на ссылку в вашем браузере, которая начинается с «tel:». Если вам требуется полное серверное решение (нет необходимости в установке локального программного обеспечения), вы должны установить это значение «Нет» и заполнить следующее поле.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Точка продаж
     CashDeskSetup=Кассовое модуль настройки
    -CashDeskThirdPartyForSell=Общий контрагент, используемый для продаж 
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Денежные счета, используемого для продает
     CashDeskBankAccountForCheque= Счет будет использоваться для получения выплат чеком
     CashDeskBankAccountForCB= Учетной записи для использования на получение денежных выплат по кредитным картам
    -CashDeskDoNotDecreaseStock=Отключить уменьшение запасов при продаже с точки продажи (если «нет», уменьшение запасов производится для каждой продажи, сделанной с POS, независимо от того, какая опция включена в запас модуля).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Ускорить и ограничить склад для уменьшения запасов
    -StockDecreaseForPointOfSaleDisabled=Снижение запасов от пункта продажи отключено
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Снижение запасов в POS несовместимо с управлением партиями
    -CashDeskYouDidNotDisableStockDecease=Вы не отключили снижение акций при совершении сделки с Point Of Sale. Поэтому необходим склад.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Закладка Настройка модуля
    -BookmarkDesc=Этот модуль позволяет управлять закладками. Вы также можете добавить ярлыки для любых Dolibarr страниц или externale веб-сайтов на левом меню.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Максимальное количество закладок, отображаемых в меню слева
     ##### WebServices #####
     WebServicesSetup=Webservices модуль настройки
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Проверить модуль нумерации
     MultiCompanySetup=Компания Multi-модуль настройки
     ##### Suppliers #####
     SuppliersSetup=Поставщик модуля установки
    -SuppliersCommandModel=Полный шаблон заказа покупки (логотип ...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Полный шаблон счета-фактуры поставщика (логотип ...)
     SuppliersInvoiceNumberingModel=Способ нумерации счетов-фактур Поставщика
     IfSetToYesDontForgetPermission=Если установлено "Да", не забудьте дать доступ группам или пользователям, разрешённым для повторного утверждения
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Проект модуля установки
     ProjectsModelModule=доклад документ проекта модели
     TasksNumberingModules=Модуль нумерации Задач
     TaskModelModule=Документы с отчетами о задачах
    -UseSearchToSelectProject=Подождите, пока вы нажмете клавишу перед загрузкой содержимого списка проектов (это может повысить производительность, если у вас большое количество проектов, но это менее удобно)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Сроки учета
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Вы можете найт
     ListOfNotificationsPerUser=Список уведомлений на пользователя *
     ListOfNotificationsPerUserOrContact=Список уведомлений на пользователя * или на контакт **
     ListOfFixedNotifications=Список основных уведомлений
    -GoOntoUserCardToAddMore=Перейдите на вкладку «Уведомления» пользователя, чтобы добавлять или удалять уведомления для пользователей.
    -GoOntoContactCardToAddMore=Перейдите на вкладку «Уведомления» третьей стороны, чтобы добавлять или удалять уведомления для контактов/адресов
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Порог
     BackupDumpWizard=Мастер создания резервной копии базы данных
     SomethingMakeInstallFromWebNotPossible=Установка внешних модулей через веб-интерфейс не возможна по следующей причине:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Установка внешних мо
     ConfFileMustContainCustom=Для установки или создания внешнего модуля из приложения необходимо сохранить файлы модулей в каталог <strong>%s</strong>. Чтобы этот каталог обрабатывался Dolibarr, вы должны настроить <strong>conf/conf.php</strong>, чтобы добавить 2 директивные строки: <br><strong> $dolibarr_main_url_root_alt = '/custom'; </strong><br><strong> $dolibarr_main_document_root_alt = '%s/custom'; </strong>
     HighlightLinesOnMouseHover=Выделите строки таблицы при перемещении мыши
     HighlightLinesColor=Выделите цвет линии при прохождении мыши (держите пустым без подсветки)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Цвет текста заголовка страницы
     LinkColor=Цвет ссылок
     PressF5AfterChangingThis=Нажмите CTRL + F5 на клавиатуре или очистите кеш браузера после изменения этого значения, чтобы оно было эффективным
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Цвет фона для четных строк т
     MinimumNoticePeriod=Минимальный период уведомления (ваш запрос на отпуск должен быть выполнен до этой задержки)
     NbAddedAutomatically=Количество дней, добавленных в счетчики пользователей (автоматически) каждый месяц
     EnterAnyCode=Это поле содержит ссылку для идентификации строки. Введите любое значение по вашему выбору, но без специальных символов.
    -UnicodeCurrency=Введите здесь между фигурными скобками, список байтов, обозначающих символ валюты. Например: для $ введите [36] - для бразильского реального R$ [82,36] - для €, введите [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=Цвет RGB находится в формате HEX, например: FF0000
     PositionIntoComboList=Позиция строки в комбинированных списках
     SellTaxRate=Ставка налога на продажу
     RecuperableOnly=Да для НДС «Не воспринимается, а восстанавливается», предназначенный для некоторых государств во Франции. Сохраняйте значение «Нет» во всех других случаях.
     UrlTrackingDesc=Если поставщик или транспортная служба предлагают страницу или веб-сайт для проверки статуса вашего груза, вы можете ввести его здесь. Вы можете использовать ключ {TRACKID} в параметрах URL, чтобы система заменила его на значение идентификационного номера пользователя, введенного в карточку отправки.
    -OpportunityPercent=Когда вы создадите возможность, вы определите предполагаемый объем проекта/свинца. Согласно статусу возможности, эта сумма может быть умножена по этой ставке для оценки глобальной суммы, которую могут создать все ваши возможности. Значение - процент (от 0 до 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=Эта запись шаблона посвящена тому, какой элемент
     TypeOfTemplate=Тип шаблона
    -TemplateIsVisibleByOwnerOnly=Шаблон виден только владельцем
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Видимый везде
     VisibleNowhere=Невидимый нигде
     FixTZ=Исправление часового пояса
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=Вы используете последнюю стаб
     TitleExampleForMajorRelease=Пример сообщения, которое вы можете использовать для анонса этого основного выпуска (не стесняйтесь использовать его на своих веб-сайтах)
     TitleExampleForMaintenanceRelease=Пример сообщения, которое вы можете использовать для объявления этой версии обслуживания (не стесняйтесь использовать ее на своих веб-сайтах)
     ExampleOfNewsMessageForMajorRelease=Доступен Dolibarr ERP & CRM %s. Версия %s - это крупный выпуск с множеством новых функций для пользователей и разработчиков. Вы можете загрузить его из области загрузки портала https://www.dolibarr.org (подкаталог «Стабильные версии»). Вы можете прочитать <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> полный список изменений.
    -ExampleOfNewsMessageForMaintenanceRelease=Доступен Dolibarr ERP & CRM %s. Версия %s - это версия обслуживания, поэтому она содержит только исправления ошибок. Мы рекомендуем всем, кто использует более старую версию, обновиться до этого. Как любая версия обслуживания, в эту версию нет новых функций или изменений структуры данных. Вы можете загрузить его из области загрузки портала https://www.dolibarr.org (подкаталог «Стабильные версии»). Вы можете прочитать <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> полный список изменений.
    -MultiPriceRuleDesc=Когда опция «Несколько уровней цен на продукт/услугу» включена, вы можете определить разные цены (по одному на уровень цены) для каждого продукта. Чтобы сэкономить ваше время, вы можете ввести здесь правило, чтобы цена для каждого уровня была рассчитана по цене первого уровня, поэтому вам нужно будет ввести только цену за первый уровень для каждого продукта. Эта страница предназначена для того, чтобы сэкономить ваше время и может быть полезной только в том случае, если ваши цены на каждую левую сторону относительно первого уровня. Вы можете игнорировать эту страницу в большинстве случаев.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Шаблоны для документов продуктов
    -ToGenerateCodeDefineAutomaticRuleFirst=Чтобы иметь возможность генерировать автоматически коды, вы должны сначала определить менеджера для автоматического определения номера штрих-кода.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=См. * Примечание для списка возможных переменных замещения
     SeeChangeLog=См. Файл ChangeLog (только на английском языке)
     AllPublishers=Все издатели
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Добавить другие страницы или у
     AddModels=Добавление шаблонов документов или нумерации
     AddSubstitutions=Добавить замены клавиш
     DetectionNotPossible=Обнаружение невозможно
    -UrlToGetKeyToUseAPIs=Url для получения токена для использования API (после того, как маркер получен, он сохраняется в таблице пользователя базы данных и должен предоставляться при каждом вызове API)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Список доступных API
    -activateModuleDependNotSatisfied=Модуль «%s» не зависит от модуля «%s», который отсутствует, поэтому модуль «%1$s» может не работать. Пожалуйста, установите модуль «%2$s» или отключите модуль «%1$s», если вы хотите быть в безопасности от каких-либо сюрпризов
    -CommandIsNotInsideAllowedCommands=Команда, которую вы пытаетесь запустить, не входит в список разрешенных команд, определенных в параметре <strong>$dolibarr_main_restrict_os_commands</strong> в файл <strong> conf.php </strong>.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Целевая страница
    -SamePriceAlsoForSharedCompanies=Если вы используете многокомпонентный модуль с выбором «Единая цена», цена будет одинаковой для всех компаний, если продукты распределяются между средами
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Модуль активирован. Разрешения для активированного модуля (модулей) были предоставлены только администраторам. Возможно, вам потребуется предоставить разрешения другим пользователям или группам вручную, если это необходимо.
    -UserHasNoPermissions=Этот пользователь не имеет определенного разрешения
    -TypeCdr=Используйте «Нет», если датой платежа является дата счета-фактуры плюс дельта в днях (delta - поле «Nb дней»). Используйте «В конце месяца», если после дельта дата должна быть увеличена для достижения конца месяца (+ опционально «Смещение» в днях) <br> Использовать «Текущий/Следующий», чтобы дата платежа была первой N-й месяц (N хранится в поле «Nb дней»)
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Справочная валюта компании (перейдите в настройку компании, чтобы изменить это)
    -WarningNoteModuleInvoiceForFrenchLaw=Этот модуль %s соответствует французским законам (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=Этот модуль %s соответствует французским законам (Loi Finance 2016), поскольку модуль Non Reversible Logs автоматически активируется.
    -WarningInstallationMayBecomeNotCompliantWithLaw=Вы пытаетесь установить модуль %s, являющийся внешним модулем. Активация внешнего модуля означает, что вы доверяете издателю модуля, и вы уверены, что этот модуль не изменяет негативное поведение вашего приложения и соответствует законам вашей страны (%s). Если модуль приносит неправомерную функцию, вы становитесь ответственным за использование нелегального программного обеспечения.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Левый отступ в PDF
     MAIN_PDF_MARGIN_RIGHT=Правый отступ PDF
     MAIN_PDF_MARGIN_TOP=Верхний отступ PDF
     MAIN_PDF_MARGIN_BOTTOM=Нижний отступ PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Установите для этого значение yes, если эта группа является вычислением других групп
    -EnterCalculationRuleIfPreviousFieldIsYes=Введите правило расчета, если для предыдущего поля установлено значение Да (например, «CODEGRP1 + CODEGRP2»)
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Было найдено несколько вариантов языка
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Удаление специальных символов
     COMPANY_AQUARIUM_CLEAN_REGEX=Фильтр регулярных выражений для очистки значения (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=Контактная информация
    -GDPRContactDesc=Если вы храните данные о европейских компаниях/гражданах, вы можете сохранить здесь контакт, который несет ответственность за правило общей защиты данных
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Конфигурация ресурса модуля
     UseSearchToSelectResource=Используйте форму поиска, чтобы выбрать ресурс (а не раскрывающийся список).
     DisabledResourceLinkUser=Отключить функцию привязки ресурса к пользователям
     DisabledResourceLinkContact=Отключить функцию привязки ресурса к контактам
     ConfirmUnactivation=Подтвердите сброс модуля
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/ru_RU/companies.lang b/htdocs/langs/ru_RU/companies.lang
    index 61dd1940e14..34e8e3093b5 100644
    --- a/htdocs/langs/ru_RU/companies.lang
    +++ b/htdocs/langs/ru_RU/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Выберите контрагента
     ConfirmDeleteCompany=Вы хотите удалить компанию и всю связанную с ней информацию?
     DeleteContact=Удалить контакт
     ConfirmDeleteContact=Удалить этот контакт и всю связанную с ним информацию?
    -MenuNewThirdParty=Новый контрагент
    -MenuNewCustomer=Новый покупатель
    -MenuNewProspect=Новый потенциальный клиент
    -MenuNewSupplier=Новый поставщик
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Новое физическое лицо
     NewCompany=Новая компания (перспектива, клиент, поставщик)
    -NewThirdParty=Новая сторонняя сторона (перспектива, клиент, поставщик)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Создайте стороннего поставщика (поставщика)
     CreateThirdPartyOnly=Создать контрагента
     CreateThirdPartyAndContact=Создать контрагента и связанный контакт
    @@ -25,22 +25,22 @@ ThirdPartyContact=Контакт контрагента
     Company=Компания
     CompanyName=Название компании
     AliasNames=Название псевдонима (коммерческий, торговая марка, ...)
    -AliasNameShort=Название псевдонима
    +AliasNameShort=Alias Name
     Companies=Компании
    -CountryIsInEEC=Страна входит в состав Европейского экономического сообщества
    -ThirdPartyName=Наименование контрагента
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Email третьей стороны
    -ThirdParty=Контрагент
    -ThirdParties=Контрагенты
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Потенциальные клиенты
     ThirdPartyProspectsStats=Потенциальные клиенты
     ThirdPartyCustomers=Покупатели
     ThirdPartyCustomersStats=Заказчики
     ThirdPartyCustomersWithIdProf12=Покупатели с %s или %s
     ThirdPartySuppliers=Вендоры
    -ThirdPartyType=Тип контрагента
    +ThirdPartyType=Type of company
     Individual=Физическое лицо
    -ToCreateContactWithSameName=Будет автоматически создан контакт/адрес с той информацией которая связывает контрагента с контрагентом. В большинстве случаев, даже если контрагент является физическим лицом, достаточно создать одного контрагента.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Материнская компания
     Subsidiaries=Филиалы
     ReportByMonth=Отчет за месяц
    @@ -75,12 +75,12 @@ Zip=Почтовый индекс
     Town=Город
     Web=Web
     Poste= Должность
    -DefaultLang=Язык по умолчанию
    -VATIsUsed=Налог с продаж
    -VATIsUsedWhenSelling=Это определяет, включает ли эта третья сторона налог на продажу или нет, когда он делает счет-фактуру своим клиентам
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Налог с продаж не используется
     CopyAddressFromSoc=Заполнить адрес из адреса контрагента
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Третья сторона ни клиент, ни поставщик, отсутствуют доступные ссылочные объекты
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Третья сторона ни клиент, ни поставщик, скидки не доступны
     PaymentBankAccount=Банковские реквизиты
     OverAllProposals=Предложения
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Код налога с продаж
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=ID налога
     VATIntraSyntaxIsValid=Синтаксис корректен
     VATReturn=Возврат НДС
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Этот покупатель имеет скидку
     CompanyHasNoRelativeDiscount=Этот клиент не имеет относительной скидки по умолчанию
     HasRelativeDiscountFromSupplier=У вас есть скидка по умолчанию <b> %s%% </b> от этого поставщика
     HasNoRelativeDiscountFromSupplier=У вас нет скидки по умолчанию от этого поставщика
    -CompanyHasAbsoluteDiscount=Этому клиенту доступна скидка (кредитный лимит или авансовый платеж) за <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=Этот клиент имеет скидку (коммерческие, авансовые платежи) для<b> %s </b>%s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Этот клиент все еще имеет кредитный лимит или авансовый платеж за <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=У вас нет скидки на кредит от этого поставщика
     HasAbsoluteDiscountFromSupplier=У вас есть скидки (кредиты или авансовые платежи) за <b> %s </b>%s от этого поставщика
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Абсолютные скидки клиентов (
     SupplierAbsoluteDiscountAllUsers=Абсолютные скидки продавца (введенные всеми пользователями)
     SupplierAbsoluteDiscountMy=Абсолютные скидки продавца (введены самим)
     DiscountNone=Нет
    -Supplier=Поставщик
    +Supplier=Vendor
     AddContact=Создать контакт
     AddContactAddress=Создать контакт/адрес
     EditContact=Изменить контакт / адреса
    @@ -303,22 +303,22 @@ AddThirdParty=Создать контрагента
     DeleteACompany=Удалить компанию
     PersonalInformations=Личные данные
     AccountancyCode=Бухгалтерский счёт
    -CustomerCode=Код Покупателя
    -SupplierCode=Артикул
    -CustomerCodeShort=Код Покупателя
    -SupplierCodeShort=Артикул
    -CustomerCodeDesc=Код покупателя, уникальный для каждого покупателя
    -SupplierCodeDesc=Код поставщика, уникальный для всех поставщиков
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Требуется, если контрагент является покупателем или потенциальным клиентом
     RequiredIfSupplier=Требуется, если сторонняя сторона является поставщиком
    -ValidityControledByModule=Действительность контролируется модулем
    -ThisIsModuleRules=Это правила для данного модуля
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Потенциальный клиент для связи
     CompanyDeleted=Компания " %s" удалена из базы данных.
     ListOfContacts=Список контактов/адресов
     ListOfContactsAddresses=Список контактов/адресов
    -ListOfThirdParties=Список контрагентов
    -ShowCompany=Показать контрагента
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Показать контакт
     ContactsAllShort=Все (без фильтра)
     ContactType=Вид контакт
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Этот контакт не является конта
     NoContactForAnyContract=Этот контакт не является контактом договора
     NoContactForAnyInvoice=Этот контакт не является контактом счета-фактуры
     NewContact=Новый контакт/адрес
    -NewContactAddress=Новый контакт/адрес
    +NewContactAddress=New Contact/Address
     MyContacts=Мои контакты
     Capital=Капитал
     CapitalOf=Столица %s
     EditCompany=Изменить компанию
    -ThisUserIsNot=Этот пользователь не является перспективой, клиентом и поставщиком
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Проверить
    -VATIntraCheckDesc=Эта ссылка <b>%s</b> позволяет направлять запросы к Европейской службе проверки НДС. Для работы этой службы необходим внешний доступ в Интернет с сервера Dolibarr.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Проверка НДС на сайте Европейской комиссии
    -VATIntraManualCheck=Вы также можете проверить его вручную а сайте европейской комиссии <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Проверка невозможна. Сервис проверки не предоставляется государством-членом ЕС (%s).
    -NorProspectNorCustomer=Ни потенциальный клиент, ни покупатель
    -JuridicalStatus=Организационно-правовая форма
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Персонал
     ProspectLevelShort=Потенциальный
     ProspectLevel=Потенциальный клиент
    @@ -387,12 +387,12 @@ ExportCardToFormat=Экспорт карточки в формате
     ContactNotLinkedToCompany=Контакт не связан с каким-либо контрагентом
     DolibarrLogin=Имя пользователя Dolibarr
     NoDolibarrAccess=Нет доступа к Dolibarr
    -ExportDataset_company_1=Контрагенты (компании, фонды, физические лица) и свойства
    -ExportDataset_company_2=Контакты и свойства
    -ImportDataset_company_1=Контрагенты (компании, фонды, физические лица) и свойства
    -ImportDataset_company_2=Контакты/Адреса (третьих сторон или нет) и атрибуты
    -ImportDataset_company_3=Банковские счета третьих лиц
    -ImportDataset_company_4=Третьи стороны/Представители по продажам (Назначение представителей торговых представителей для компаний)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Уровень цен
     DeliveryAddress=Адрес доставки
     AddAddress=Добавить адрес
    @@ -402,16 +402,16 @@ DeleteFile=Удалить файл
     ConfirmDeleteFile=Вы уверены, что хотите удалить этот файл?
     AllocateCommercial=Назначить торгового представителя
     Organization=Организация
    -FiscalYearInformation=Информация о финансовом годе
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Первый месяц финансового года
    -YouMustAssignUserMailFirst=Вы должны создать электронную почту для этого пользователя, тогда вы сможете отправлять ему почтовые уведомления.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Для добавления электронных уведомлений вы должны сначала указать действующий email контрагента 
    -ListSuppliersShort=Список поставщиков
    -ListProspectsShort=Список потенц. клиентов
    -ListCustomersShort=Список покупателей
    -ThirdPartiesArea=Область контрагентов и контактов
    -LastModifiedThirdParties=Недавно изменено %s контрагентов
    -UniqueThirdParties=Всего уникальных контрагентов
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Открытые
     ActivityCeased=Закрыто
     ThirdPartyIsClosed=Закрывшиеся контрагенты
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Валюта неуплаченного счёта
     OutstandingBill=Максимальный неуплаченный счёт
     OutstandingBillReached=Достигнут максимум не оплаченных счетов
     OrderMinAmount=Минимальная сумма заказа
    -MonkeyNumRefModelDesc=Возвращаемое число с форматом %syymm-nnnn для кода клиента и %syymm-nnnn для кода поставщика, где yy - год, мм - месяц, а nnnn - последовательность без перерыва и не возвращается к 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Код покупателю/поставщику не присваивается. Он может быть изменен в любое время.
     ManagingDirectors=Имя управляющего или управляющих (Коммерческого директора, директора, президента...)
     MergeOriginThirdparty=Копия контрагента (контрагент которого вы хотите удалить)
     MergeThirdparties=Объединить контрагентов
    -ConfirmMergeThirdparties=Вы хотите объединить этого контрагента с текущим? Все связанные объекты (счета, заказы, ...) будут перемещены к текущему контрагенту, затем контрагент будет удален.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Третьи стороны были объединены
     SaleRepresentativeLogin=Логин торгового представителя
     SaleRepresentativeFirstname=Имя торгового представителя
     SaleRepresentativeLastname=Фамилия торгового представителя
     ErrorThirdpartiesMerge=При удалении третьих сторон произошла ошибка. Проверьте журнал. Изменения были отменены.
    -NewCustomerSupplierCodeProposed=Новый код клиента или поставщика, предлагаемый для дублирования кода
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/ru_RU/errors.lang b/htdocs/langs/ru_RU/errors.lang
    index 542595d812b..8410bb51245 100644
    --- a/htdocs/langs/ru_RU/errors.lang
    +++ b/htdocs/langs/ru_RU/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat= Значение '%s' имеет неверный форма
     ErrorWrongDate=Дата некорректна!
     ErrorFailedToWriteInDir=Не удалось записать в директорию %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=Найдено неверный электронный синтаксис% с линии в файл (например, строка %s с электронной почтой= %s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Некоторые обязательные поля не были заполнены.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Не удалось создать каталог. Убедитесь, что веб-сервер пользователь имеет разрешения на запись в каталог Dolibarr документы. Если параметр <b>safe_mode</b> включен по этому PHP, проверьте, что Dolibarr PHP файлы принадлежат к веб-серверу пользователей (или группы).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Пожалуйста, заполните значен
     ErrorNoValueForCheckBoxType=Пожалуйста, заполните значение для списка флажков
     ErrorNoValueForRadioType=Пожалуйста, заполните  значени для списка переключателей
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=<b>Поле %s</b> не содержит специальных символов.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Нет бухгалтерского модуля активируется
     ErrorExportDuplicateProfil=Имя этого профиля уже сущесвует для этого набора для экспорта.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP соответствия не является полной.
     ErrorLDAPMakeManualTest=. LDIF файл был создан в директории %s. Попробуйте загрузить его вручную из командной строки, чтобы иметь больше информации об ошибках.
    -ErrorCantSaveADoneUserWithZeroPercentage=Не удается сохранить действие с "Статут не началась", если поле "проделанной" также заполнены.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ссылки, используемые для создания, уже существует.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Нельзя удалить запись. Она уже используется или включена в другой объект.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript не должна быть отключена, чтобы эта функция работает. Чтобы включить / отключить Javascript, перейдите в меню Главная-> Настройка-> Экран.
     ErrorPasswordsMustMatch=Оба введенных пароля должны совпадать друг с другом
    -ErrorContactEMail=Техническая ошибка. Пожалуйста, обратитесь к администратору следующую электронную почту <b>%s</b> ан обеспечить <b>%s</b> код ошибки в ваше сообщение, или даже лучше, добавив экран копию этой страницы.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Неверное значение для области количество <b>%s</b> (значение <b>%s</b> &quot;не соответствует регулярное <b>%s</b> правило)
     ErrorFieldValueNotIn=Неверное значение для <b>%s</b> номер поля <b>%s</b> значение не является значением доступны в поле <b>%s</b> таблицы <b>%s)</b>
     ErrorFieldRefNotIn=Неверное значение для <b>%s</b> номер поля <b>(«%s&quot;</b> значение не является <b>%s</b> существующих ссылка)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Антивирусная программа не 
     ErrorSpecialCharNotAllowedForField=Специальные символы не допускаются для поля &quot;%s&quot;
     ErrorNumRefModel=Ссылка есть в базе данных (%s) и не совместимы с данным правилом нумерации. Удаление записей или переименован ссылкой для активации этого модуля.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Ошибка на маску
     ErrorBadMaskFailedToLocatePosOfSequence=Ошибка, маска без порядкового номера
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Ошибка, плохое значение сброса
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Счётчик должен иметь более 3 цифр
     ErrorSelectAtLeastOne=Ошибка. Выберите хотя бы одну запись.
    -ErrorDeleteNotPossibleLineIsConsolidated=Удаление невозможно, потому что запись связана с банком transation, который согласован
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s назначается еще одна треть
     ErrorFailedToSendPassword=Не удалось отправить пароль
     ErrorFailedToLoadRSSFile=Не в состоянии получить RSS-канал. Попробуйте добавить постоянные MAIN_SIMPLEXMLLOAD_DEBUG если сообщения об ошибках не предоставляет достаточно информации.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Пользователь с <b>логином %s</b> н
     ErrorLoginHasNoEmail=Этот пользователь не имеет адреса электронной почты. Процесс прерван.
     ErrorBadValueForCode=Плохо значения типов кода. Попробуйте еще раз с новой стоимости ...
     ErrorBothFieldCantBeNegative=Поля %s и %s не может быть и отрицательным
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Количество строк в счетах клиента не может быть отрицательным
     ErrorWebServerUserHasNotPermission=Учетная запись пользователя <b>%s</b> используется для выполнения веб-сервер не имеет разрешения для этого
     ErrorNoActivatedBarcode=Нет штрих-кодов типа активированного
    @@ -138,7 +141,7 @@ ErrorBadFormat=Неправильный формат!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Не удается удалить платёж, поскольку есть по крайней мере один счет со статусом 'оплачен'
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Невозможно назначить константой '%s'
     ErrorPriceExpression2=Невозможно задать заново встроенную функцию  '%s'
     ErrorPriceExpression3=Необъявленная переменная  '%s' в задании функции
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Непредвиденный '%s'
     ErrorPriceExpression6=Неверное количество аргументов  (%s задано, %s ожидалось)
     ErrorPriceExpression8=Непредвиденные оператор '%s'
     ErrorPriceExpression9=Произошла неожиданная ошибка
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Деление на ноль
     ErrorPriceExpression17=Необъявленная переменная  '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=Ошибка SOAP-клиента '%s'
     ErrorGlobalVariableUpdater5=Не выбрана глобальная переменная
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Закладка этого титула или э
     WarningPassIsEmpty=Внимание, базы данных пароль пуст. Это дыра в безопасности. Вы должны добавить пароль к вашей базе данных и изменить свой conf.php файл, чтобы отразить это.
     WarningConfFileMustBeReadOnly=Внимание, ваш конфигурационный файл <b>(htdocs / CONF / conf.php)</b> может быть переписан на веб-сервере. Это серьезная дыра в безопасности. Изменение разрешений на файл находится в режиме только для чтения для операционной системы пользователя используется веб-сервер. Если вы используете Windows FAT и формат для Вашего диска, вы должны знать, что эта файловая система не позволяет добавить разрешения на файл, поэтому не может быть полностью безопасным.
     WarningsOnXLines=Предупреждения об источнике <b>%s</b> линий
    -WarningNoDocumentModelActivated=Ни одна из моделей, для генерации документов, была активирована. Модель будет выбранные по умолчанию, пока вы не проверить ваш модуль установки.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Передупреждение. Как только установка завершена, вы должны отключить возможности установки/переноса. Это возможно сделать, добавив файл <b>install.lock</b> в каталог <b>%s</b>. Если вы не сделаете это, это будет являться брешью в безопасности. 
    -WarningUntilDirRemoved=Это предупреждение остается активным до тех пор, пока эта директория присутствует (отображается только для администратора пользователей).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/ru_RU/interventions.lang b/htdocs/langs/ru_RU/interventions.lang
    index 676ce8b749e..23b53b0c202 100644
    --- a/htdocs/langs/ru_RU/interventions.lang
    +++ b/htdocs/langs/ru_RU/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Мероприятия
     InterventionCard=Карточка посредничества
     NewIntervention=Новое посредничество
     AddIntervention=СОздать посредничество
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Перечень мероприятий
     ActionsOnFicheInter=Действия над посредничеством
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/ru_RU/main.lang b/htdocs/langs/ru_RU/main.lang
    index 2b97df402fb..98245cb1ebf 100644
    --- a/htdocs/langs/ru_RU/main.lang
    +++ b/htdocs/langs/ru_RU/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Не удалось отправить почту (отп
     ErrorFileNotUploaded=Файл не был загружен. Убедитесь, что его размер не превышает максимально допустимое значение, свободное место имеется на диске, и файл с таким же именем не существует в этом каталоге.
     ErrorInternalErrorDetected=Обнаружена ошибка
     ErrorWrongHostParameter=Неверный параметр хоста
    -ErrorYourCountryIsNotDefined=Ваша страна не определена. Перейдите Главная-Настройки-Редактировать и снова отправьте форму.
    -ErrorRecordIsUsedByChild=Не удалось удалить эту запись. Эта запись используется, по крайней мере, одной дочерней записью.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Неправильное значение
     ErrorWrongValueForParameterX=Неправильное значение параметра %s
     ErrorNoRequestInError=В ошибке нет никаких запросов
    -ErrorServiceUnavailableTryLater=Служба не доступна на данный момент. Попробуйте еще раз позже.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Повторяющееся значение в уникальном поле
    -ErrorSomeErrorWereFoundRollbackIsDone=Были обнаружены некоторые ошибки. Изменения отменены.
    -ErrorConfigParameterNotDefined=Параметр <b>%s</b> не определен внутри конфигурационного файла Dolibarr <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Не удалось найти пользователя <b>%s</b> в базе данных Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Ошибка, ставки НДС не установлены для страны '%s'.
     ErrorNoSocialContributionForSellerCountry=Ошибка, не определен тип социальных/налоговых взносов для страны %s.
     ErrorFailedToSaveFile=Ошибка, не удалось сохранить файл.
    -ErrorCannotAddThisParentWarehouse=Вы пытаетесь добавить родительский склад который является дочерним
    -MaxNbOfRecordPerPage=Максимальное количество записей на страницу
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Вы не авторизованы чтобы сделать это.
     SetDate=Установить дату
     SelectDate=Выбрать дату
    @@ -78,10 +78,10 @@ FileRenamed=Файл успешно переименован
     FileGenerated=Файл успешно создан
     FileSaved=Файл сохранен
     FileUploaded=Файл успешно загружен
    -FileTransferComplete=Файл(ы) успешно загружены
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=Файл(ы) успешно удалены
     FileWasNotUploaded=Файл выбран как вложение, но пока не загружен. Для этого нажмите "Вложить файл".
    -NbOfEntries=Кол-во записей
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Читать интернет-справку (необходим доступ к Интернету)
     GoToHelpPage=Читать помощь
     RecordSaved=Запись сохранена
    @@ -94,7 +94,7 @@ Undefined=Неопределено
     PasswordForgotten=Забыли пароль?
     NoAccount=Нет аккаунта?
     SeeAbove=См. выше
    -HomeArea=Начальная область
    +HomeArea=Главная
     LastConnexion=Последнее подключение
     PreviousConnexion=Предыдущий вход
     PreviousValue=Предыдущее значение
    @@ -142,6 +142,7 @@ Closed=Закрыто
     Closed2=Закрыто
     NotClosed=Не закрыто
     Enabled=Включено
    +Enable=Включено
     Deprecated=Устарело
     Disable=Выключить
     Disabled=Выключено
    @@ -153,7 +154,7 @@ Update=Обновить
     Close=Закрыть
     CloseBox=Удалить виджет с главного экрана
     Confirm=Подтвердить
    -ConfirmSendCardByMail=Отправить эту карточку на <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Удалить
     Remove=Удалить
     Resiliate=Завершить
    @@ -327,7 +328,7 @@ Copy=Копировать
     Paste=Вставить
     Default=По умолчанию
     DefaultValue=Значение по умолчанию
    -DefaultValues=Стандартное значение
    +DefaultValues=Default values/filters/sorting
     Price=Цена
     PriceCurrency=Цена (валюта)
     UnitPrice=Цена за единицу
    @@ -347,7 +348,7 @@ AmountTTCShort=Сумма (вкл-я налог)
     AmountHT=Сумма (без налога)
     AmountTTC=Сумма (вкл-я налог)
     AmountVAT=Сумма НДС
    -MulticurrencyAlreadyPaid=Уже оплачено, в исходной валюте
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Осталось оплатить, в оригинальной валюте
     MulticurrencyPaymentAmount=Сумма платежа, в оригинальной валюте
     MulticurrencyAmountHT=Сумма (нетто), в исходной валюте
    @@ -428,7 +429,7 @@ ActionNotApplicable=Не применяется
     ActionRunningNotStarted=Не начато
     ActionRunningShort=Выполняется
     ActionDoneShort=Завершено
    -ActionUncomplete=Не завершено
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Последние связанные события %s
     CompanyFoundation=Компания / организация
     Accountant=Бухгалтер
    @@ -453,8 +454,8 @@ Generate=Создать
     Duration=Продолжительность
     TotalDuration=Общая продолжительность
     Summary=Общее
    -DolibarrStateBoard=Статистика базы данных
    -DolibarrWorkBoard=Открытые элементы основной страницы
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=Нет открытого элемента для обработки
     Available=Доступно
     NotYetAvailable=Пока не доступно
    @@ -468,7 +469,7 @@ and=и
     or=или
     Other=Другой
     Others=Другие
    -OtherInformations=Другая информация
    +OtherInformations=Other information
     Quantity=Количество
     Qty=Кол-во
     ChangedBy=Изменен
    @@ -506,7 +507,7 @@ None=Никакой
     NoneF=Никакой
     NoneOrSeveral=Нет или несколько
     Late=Поздно
    -LateDesc=Появится ваша запись с задержкой или без задержки определяется в настройках. Попросите вашего администратора изменить задержку из меню Главная - Настройка - Предупреждения
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=Нет позднего пункта
     Photo=Изображение
     Photos=Изображения
    @@ -530,18 +531,6 @@ September=Сентябрь
     October=Октябрь
     November=Ноябрь
     December=Декабрь
    -JanuaryMin=Янв
    -FebruaryMin=Фев
    -MarchMin=Мар
    -AprilMin=Апр
    -MayMin=Май
    -JuneMin=Июн
    -JulyMin=Июл
    -AugustMin=Авг
    -SeptemberMin=Сен
    -OctoberMin=Окт
    -NovemberMin=Ноя
    -DecemberMin=Дек
     Month01=январь
     Month02=февраль
     Month03=март
    @@ -646,6 +635,8 @@ SendMail=Отправить письмо
     EMail=Электронная почта
     NoEMail=Нет Email
     Email=Адрес электронной почты
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Нет мобильного телефона
     Owner=Владелец
     FollowingConstantsWillBeSubstituted=Следующие константы будут подменять соответствующие значения.
    @@ -677,7 +668,7 @@ NeverReceived=Никогда не получено
     Canceled=Отменено
     YouCanChangeValuesForThisListFromDictionarySetup=Можно изменить содержание этого списка в Главная - Настройка - Словари
     YouCanChangeValuesForThisListFrom=Можно изменить значения этого списка из меню %s
    -YouCanSetDefaultValueInModuleSetup=Вы можете настроить значение по-умолчанию используемое при создании новой записи в модуле Настройка
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Цвет
     Documents=Связанные файлы
     Documents2=Документы
    @@ -716,15 +707,15 @@ Merge=Слияние
     DocumentModelStandardPDF=Стандартные PDF-шаблоны
     PrintContentArea=Показать страницу для печати области основного содержимого
     MenuManager=Менеджер меню
    -WarningYouAreInMaintenanceMode=Внимание, вы находитесь в режиме обслуживания, так что только пользователю <b>%s</b> разрешено использовать приложение в данный момент.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Системная ошибка
     CoreErrorMessage=Извините, произошла ошибка. Для получения большей информации свяжитесь с системным администратором для проверки технических событий или отключения $dolibarr_main_prod=1.
     CreditCard=Кредитная карта
     ValidatePayment=Подтвердть платёж
     CreditOrDebitCard=Кредитная или дебетовая карта
     FieldsWithAreMandatory=Поля с <b>%s</b> являются обязательными
    -FieldsWithIsForPublic=Поля с <b>%s</b> показаны для публичного списка членов. Если вы не хотите этого, проверить поле "публичный".
    -AccordingToGeoIPDatabase=(в соответствии с преобразованием GeoIP)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Строка
     NotSupported=Не поддерживается
     RequiredField=Обязательное поле
    @@ -732,6 +723,8 @@ Result=Результат
     ToTest=Тест
     ValidateBefore=Карточка должна быть проверена, прежде чем использовать эту функцию
     Visibility=Видимость
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Частный
     Hidden=Скрытый
     Resources=Ресурсы
    @@ -750,6 +743,7 @@ LinkTo=Ссылка к
     LinkToProposal=Ссылка для предложения
     LinkToOrder=Ссылка для заказа
     LinkToInvoice=Ссылка для счета
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Ссылка для заказа поставщику
     LinkToSupplierProposal=Ссылка для предложения поставщику
     LinkToSupplierInvoice=Ссылка для счета поставщику
    @@ -758,6 +752,7 @@ LinkToIntervention=Ссылка на мероприятие
     CreateDraft=Создать проект
     SetToDraft=Назад к черновику
     ClickToEdit=Нажмите, чтобы изменить
    +ClickToRefresh=Click to refresh
     EditWithEditor=Изменить с помощью CKEditor
     EditWithTextEditor=Редактировать с помощью текстового редактора
     EditHTMLSource=Редактировать HTML-источник
    @@ -772,14 +767,14 @@ ByDay=Днем
     BySalesRepresentative=По торговым представителем
     LinkedToSpecificUsers=Связан с особым контактом пользователя
     NoResults=Нет результатов
    -AdminTools=Инструменты администратора
    +AdminTools=Admin Tools
     SystemTools=Системные инструменты
     ModulesSystemTools=Настройки модулей
     Test=Тест
     Element=Элемент
     NoPhotoYet=Пока недо доступных изображений
     Dashboard=Начальная страница
    -MyDashboard=Моя главная страница
    +MyDashboard=My Dashboard
     Deductible=Подлежащий вычету
     from=от
     toward=к
    @@ -802,7 +797,7 @@ PrintFile=Печать файл %s
     ShowTransaction=Показать транзакцию на банковском счете
     ShowIntervention=Показать посредничества
     ShowContract=Показать договор
    -GoIntoSetupToChangeLogo=Используйте Главная-Настройки-Компании для изменения логотипа или  Главная-Настройки-Отображение для того, чтобы его скрыть.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Запретить
     Denied=Запрещено
     ListOf=Список %s
    @@ -818,12 +813,12 @@ Sincerely=С уважением,
     DeleteLine=Удалить строки
     ConfirmDeleteLine=Вы точно хотите удалить эту строку?
     NoPDFAvailableForDocGenAmongChecked=PDF не доступен для документов созданных из выбранных записей
    -TooManyRecordForMassAction=Выбранно слишком много записей для группового действия. Это действие запрещено для списка состоящего из %s записей.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=Нет выделенных записей
     MassFilesArea=Пространство для массовых действий с файлами
     ShowTempMassFilesArea=Показать область для массовых действий с файлами
    -ConfirmMassDeletion=Массовое подтверждение удаления
    -ConfirmMassDeletionQuestion=Вы уверены, что хотите удалить выбранную запись %s?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Связанные объекты
     ClassifyBilled=Классифицировать счета
     ClassifyUnbilled=Классифицировать невыполненные
    @@ -841,7 +836,7 @@ Calendar=Календарь
     GroupBy=Группировка по...
     ViewFlatList=Вид плоским списком
     RemoveString=Удалить строку '%s'
    -SomeTranslationAreUncomplete=Переводы на некоторые языки могут быть выполнены частично или с ошибками. Если вы обнаружите ошибки в переводе, вы можете исправить файлы переводов зарегистрировавшись по ссылке <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Прямая ссылка для скачивания (общедоступная/внешняя)
     DirectDownloadInternalLink=Прямая ссылка для скачивания (требуется регистрация и необходимые разрешения)
     Download=Загрузка
    @@ -861,16 +856,25 @@ HR=Кадры
     HRAndBank=Кадры и Банк
     AutomaticallyCalculated=Автоматический подсчет
     TitleSetToDraft=Вернуться к черновику
    -ConfirmSetToDraft=Вы уверены что хотите вернуть  статус Черновик?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Импорт идентификатора
     Events=События
    -EMailTemplates=Шаблоны электронных писем
    -FileNotShared=Файл, не доступный для обычного пользователя
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Проект
     Projects=Проекты
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Права доступа
     LineNb=Номер строки
     IncotermLabel=Обязанности по доставке товаров
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Понедельник
     Tuesday=Вторник
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Мероприятия
     SearchIntoContracts=Договоры
     SearchIntoCustomerShipments=Отгрузки клиентам
     SearchIntoExpenseReports=Отчёты о затратах
    -SearchIntoLeaves=Отпуска
    +SearchIntoLeaves=Leave
     CommentLink=Комментарии
     NbComments=Количество комментариев
     CommentPage=Комментарии
     CommentAdded=Комментарий добавлен
     CommentDeleted=Комментарий удален
     Everybody=Общий проект
    -PayedBy=Оплачивается
    -PayedTo=Оплачивать
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=ежемесячно
     Quarterly=Ежеквартальный
     Annual=годовой
    @@ -945,6 +949,7 @@ LocalAndRemote=Локальные и удаленные
     KeyboardShortcut=Сочетание клавиш
     AssignedTo=Ответств.
     Deletedraft=Удалить проект
    -ConfirmMassDraftDeletion=Подтверждение удаления проекта
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=Файл, общий доступ по ссылке
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/ru_RU/other.lang b/htdocs/langs/ru_RU/other.lang
    index b71ac8ed0d0..4152e657dab 100644
    --- a/htdocs/langs/ru_RU/other.lang
    +++ b/htdocs/langs/ru_RU/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Защитный код
     NumberingShort=N°
     Tools=Инструменты
     TMenuTools=Инструменты
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=День рождения
     BirthdayDate=Birthday date
     DateToBirth=Дата рождения
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Сообщение на странице проверки возвращение оплаты
     MessageKO=Сообщение на странице отменен возврат оплаты
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Посредничество подтверждено
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Kundeordre validert
     Notify_ORDER_SENTBYMAIL=Покупатель делает заказ по почте
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Поставщик поручение, отправленные по почте
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Поставщик утвердил порядок
     Notify_ORDER_SUPPLIER_REFUSE=Поставщик порядке отказалась
     Notify_PROPAL_VALIDATE=Kunden forslaget validert
    -Notify_PROPAL_CLOSE_SIGNED=Предложение клиента подписано
    -Notify_PROPAL_CLOSE_REFUSED=Предложение клиента отклонено
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Коммерческое предложение по почте
     Notify_WITHDRAW_TRANSMIT=Передача вывода
     Notify_WITHDRAW_CREDIT=Кредитный выход
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Третья партия, созданная
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Проверка векселя
     Notify_BILL_UNVALIDATE=Счёт клиента не подтверждён
    -Notify_BILL_PAYED=Клиенту счет оплачен
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Счёт клиента отменён
     Notify_BILL_SENTBYMAIL=Клиенту счет-фактура высылается по почте
     Notify_BILL_SUPPLIER_VALIDATE=Поставщик проверки счета
    -Notify_BILL_SUPPLIER_PAYED= Счёт поставщика оплачен
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Поставщиком счета по почте
     Notify_BILL_SUPPLIER_CANCELED=Счёт поставщика отменён
     Notify_CONTRACT_VALIDATE=Договор проверку
     Notify_FICHEINTER_VALIDATE=Посредничество проверено.
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Доставка проверку
     Notify_SHIPPING_SENTBYMAIL=Доставка по почте
     Notify_MEMBER_VALIDATE=Член проверки
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Создание проекта
     Notify_TASK_CREATE=Задача создана
     Notify_TASK_MODIFY=Задача изменена
     Notify_TASK_DELETE=Задача удалена
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Посмотреть настройку модуля  %s
     NbOfAttachedFiles=Количество прикрепленных файлов / документов
     TotalSizeOfAttachedFiles=Общий размер присоединенных файлов / документы
     MaxSize=Максимальный размер
     AttachANewFile=Присоединить новый файл / документ
     LinkedObject=Связанные объект
    -NbOfActiveNotifications=Количество адресов (количество адресов электронной почты получателей)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Проф Id %s</b> является информация в зависимости от сторонних страны. <br> Например, для страны <b>с%,</b> то <b>с кодом%.</b>
     DolibarrDemo=Dolibarr ERP / CRM демо
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Посредничество %s проверено.
     EMailTextInvoiceValidated=Счет %s проверены
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Forslaget %s har blitt validert.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Ordren %s har blitt validert.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Приказ %s одобрен %s
     EMailTextOrderRefused=Приказ %s отказала
     EMailTextOrderRefusedBy=Приказ %s отказано %s
     EMailTextExpeditionValidated=Отправка %s подтверждена
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Импорт данных
     DolibarrNotification=Автоматические уведомления
     ResizeDesc=Skriv inn ny <b>bredde</b> eller ny høyde. Forhold vil bli holdt under resizing ...
    @@ -204,7 +212,7 @@ NewLength=Ny bredde
     NewHeight=Ny høyde
     NewSizeAfterCropping=Ny størrelse etter beskjæring
     DefineNewAreaToPick=Definer nytt område på bildet for å plukke (venstre klikk på bildet og dra til du kommer til motsatt hjørne)
    -CurrentInformationOnImage=Informasjon om gjeldende bilde
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Редактор изображений
     YouReceiveMailBecauseOfNotification=Du mottar denne meldingen fordi din e-post har blitt lagt til listen over mål for å bli informert om spesielle hendelser i %s programvare av %s.
     YouReceiveMailBecauseOfNotification2=Denne hendelsen er følgende:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Экспорт области
    diff --git a/htdocs/langs/ru_RU/projects.lang b/htdocs/langs/ru_RU/projects.lang
    index c68bef10d51..30ed942bfaf 100644
    --- a/htdocs/langs/ru_RU/projects.lang
    +++ b/htdocs/langs/ru_RU/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Показать проекта
     ShowTask=Показать задачу
     SetProject=Комплекс проектов
     NoProject=Нет проекта определена
    -NbOfProjects=Nb проектов
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Время, затраченное
     TimeSpentByYou=Затраченное мной время
     TimeSpentByUser=Затраченное пользователем время
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Списки коммерческих предложений, связанных с проектом
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Перечень договоров, связанных с проектом
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Список мероприятий, связанных с проектом
    -ListExpenseReportsAssociatedProject=Список отчётов о затратах, связанных с проектом
    -ListDonationsAssociatedProject=Список пожертвований, связанных с проектом
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Список мероприятий, связанных с проектом
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Проект %s изменен
     TaskCreatedInDolibarr=Задача %s создана
     TaskModifiedInDolibarr=Задача %s изменена
     TaskDeletedInDolibarr=Задача %s удалена
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Содействующий
     SelectElement=Выберите элемент
     AddElement=Ссылка на элемент
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Запланированная нагрузка
     PlannedWorkloadShort=Рабочая нагрузка
     ProjectReferers=Связанные элементы
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Предложение
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/ru_UA/other.lang b/htdocs/langs/ru_UA/other.lang
    index 7cb48758942..52e21065166 100644
    --- a/htdocs/langs/ru_UA/other.lang
    +++ b/htdocs/langs/ru_UA/other.lang
    @@ -2,7 +2,6 @@
     DateToBirth=Дата до рождения
     BirthdayAlertOn=День рождения оповещения активных
     BirthdayAlertOff=День рождения оповещения неактивные
    -Notify_FICHINTER_VALIDATE=Вмешательство проверку
     Notify_BILL_PAYED=Клиенту счет-фактура оплачен
     Notify_MEMBER_VALIDATE=Член проверку
     Notify_MEMBER_SUBSCRIPTION=Член подписался
    diff --git a/htdocs/langs/sk_SK/admin.lang b/htdocs/langs/sk_SK/admin.lang
    index aa9e2f735e2..17bc8dfbc10 100644
    --- a/htdocs/langs/sk_SK/admin.lang
    +++ b/htdocs/langs/sk_SK/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Vývojárska
     VersionUnknown=Neznáma
     VersionRecommanded=Odporúčaná
     FileCheck=Kontrola integrity súborov
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler pre uloženie sedenia
     SessionSavePath=Adresár pre ukladanie relácií
     PurgeSessions=Purge relácií
     ConfirmPurgeSessions=Určite chcete vyčistit pripojenia ? Táto akcia odhlási každého uživateľa ( okrem vás )
    -NoSessionListWithThisHandler=Uložiť relácie handler nakonfigurované PHP neumožňuje uviesť všetky spustené relácie.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Zakázať nové pripojenia
    -ConfirmLockNewSessions=Ste si istí, že chcete obmedziť akékoľvek nové Dolibarr spojenie na seba. Iba užívateľské <b>%s</b> budú môcť pripojiť po tom.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Povoliť nové pripojenia
     YourSession=Vaša relácia
    -Sessions=Relácie užívateľov
    +Sessions=Users sessions
     WebUserGroup=Webový server užívateľ / skupina
    -NoSessionFound=Vaše PHP Zdá sa, že nedovolí, aby zoznam aktívnych relácií. Adresár slúži na uloženie sedenie <b>(%s)</b> môžu byť chránené (napr. tým, že oprávnenie OS alebo PHP open_basedir smernice).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Znaková sada dát uložených v databáze
     DBSortingCharset=Znaková sada databázy pre radenie dát
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Externý užívateľ
     InternalUsers=Interní používatelia
     ExternalUsers=Externí používatelia
     GUISetup=Zobraziť
    -SetupArea=Nastavenie plochy
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Formulár pre testovanie nahrávania súborov (podľa nastavenia)
     IfModuleEnabled=Poznámka: áno je účinné len vtedy, ak je modul <b>%s</b> zapnutý
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kód môže obsahovať hodnotu 0
     DisableJavascript=Vypnúť JavaScript a funkcie Ajax (Odporúča sa pre nevidiace osoby alebo pri textových prehliadačoch)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Predradníka znaky na spustenie hľadania: %s
     NotAvailableWhenAjaxDisabled=Nie je k dispozícii pri Ajax vypnutej
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Náhľad nie je k dispozícii
     ThemeCurrentlyActive=Téma aktívnej
     CurrentTimeZone=Časové pásmo PHP (server)
     MySQLTimeZone=TimeZone MySql (databáza)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Miesto
     Table=Tabuľka
     Fields=Pole
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Aktívne
     SetupShort=Setup
     OtherOptions=Ďalšie možnosti
    -OtherSetup=Ďalšie nastavenia
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Desatinný oddeľovač
     CurrentValueSeparatorThousand=Oddeľovač tisícov
     Destination=Destinácia
     IdModule=ID Modulu
     IdPermissions=ID Povolení
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Parametre lokalizácie
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Časová zóna klienta (používateľ)
     ClientHour=Čas klienta (používateľa)
     OSTZ=Čas servera
    @@ -126,8 +126,8 @@ PHPTZ=PHP servera Časová zóna
     DaylingSavingTime=Letný čas
     CurrentHour=PHP Čas (server)
     CurrentSessionTimeOut=Časový limit súčasnej relácie
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Panel
     Boxes=Panely
     MaxNbOfLinesForBoxes=Maximálny počet panelov
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignorovať chyby duplicitného záznamu
     AutoDetectLang=Autodetekcia (jazyk prehliadača)
     FeatureDisabledInDemo=Funkcia zakázaný v demo
     FeatureAvailableOnlyOnStable=Táto možnosť je dostupná iba v oficiálnej stabilnej verzií
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Iba prvky z <a href="%s">povolených modulov</a> sú uvedené.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Viac modulov na stiahnutie môžete nájst na internete
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Nový
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, oficiálny trh pre Dolibarr ERP / CRM externých modulov
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Referenčná stránka pre nájdenie viacero modulov
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Odkaz
     BoxesAvailable=Dostupné doplnky
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do žiadny obchod jasná heslá v databáze, ale iba ši
     MainDbPasswordFileConfEncrypted=Databáza heslo zašifrované v conf.php (Activated odporúčané)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Ochrana generovaných súborov PDF (aktivuje sa neodporúča, rozbije hromadné generovanie PDF)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Rys
     DolibarrLicense=Licencia
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=Pre používateľov alebo vývojárov dokumentácie (doc, FAQs ...) <br> pozrite sa na Dolibarr Wiki: <br> <a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=V prípade akýchkoľvek ďalších otázok / help, môžete použiť fórum Dolibarr: <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=Táto oblasť vám môže pomôcť získať pomocníka služby podpory na Dolibarr.
    -HelpCenterDesc2=Niektoré časti tejto služby sú k dispozícii <b>len</b> v <b>angličtine.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Aktuálna ponuka handler
     MeasuringUnit=Meracie prístroje
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS Port (V predvolenom nastavení v php.ini: <b>%s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS Host (V predvolenom nastavení v php.ini: <b>%s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS Port (Nie je definovaná v PHP na Unixe, ako napr systémy)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS Host (Nie je definovaná v PHP na Unixe, ako napr systémy)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Poslať systematicky skrytú uhlík-kópie všetkých odoslaných e-mailov
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Použitá metóda pri odosielaní e-mailov
    -MAIN_MAIL_SMTPS_ID=SMTP ID ak sa vyžaduje overenie
    -MAIN_MAIL_SMTPS_PW=Heslo SMTP Ak sa vyžaduje overenie
    -MAIN_MAIL_EMAIL_TLS= Použiť TLS (SSL) šifrovanie
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Zakázať všetky SMS sendings (len na skúšobné účely alebo ukážky)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Použitá metóda pri odosielaní SMS
    -MAIN_MAIL_SMS_FROM=Predvolené odosielateľa telefónne číslo pre posielanie SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Funkcia nie je k dispozícii pre Unix, ako napr systémy. Otestujte si svoje sendmail programu na mieste.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Nastavenie modulu
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Nepoužívajte vo výrobe
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Krok %s
    -FindPackageFromWebSite=Nájsť balíčka, ktorý obsahuje funkciu, ktorú chcete (napr. na oficiálnych webových stránkach %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Stiahnúť  balíček ( napr. z oficiálnej stránky %s ).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr aktuálna verzia
     CallUpdatePage=Choďte na stránku úpravý databázobej štruktúry a dát. %s
     LastStableVersion= Najnovšia stabilná verzia
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Oneskorenie pre ukladanie do medzipamäte export reakcie v sekundách (0 alebo prázdne bez vyrovnávacej pamäte)
     DisableLinkToHelpCenter=Skryť odkaz <b>&quot;Potrebujete pomoc či podporu&quot;</b> na prihlasovacej stránke
     DisableLinkToHelp=Skryť odkaz na online pomoc "<b>%s</b>"
    -AddCRIfTooLong=Neexistuje žiadny automatický balení, takže ak linka je mimo stránky na dokumentoch, pretože príliš dlho, musíte pridať sami návrat vozíka do textového poľa.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimálna dĺžka
     LanguageFilesCachedIntoShmopSharedMemory=Súbory. Lang vložený do zdieľanej pamäte
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Príklady s aktuálnym systémom nastavenia
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Zoznam OpenDocument šablóny zoznamov
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Počet ODT / ODS šablóny súborov nájdete v týchto adresároch
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Príklady syntaxe: <br> c: \\ mydir <br> / Home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Ak chcete vedieť, ako vytvoriť svoje ODT šablóny dokumentov pred ich uložením do týchto adresárov, prečítajte si wiki dokumentácie:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Kľúč na použitie Web Services (parameter &quot;dolib
     TestSubmitForm=Vstup Testovacie formulár
     ThisForceAlsoTheme=Pomocou tohto menu správca bude tiež používať svoje vlastné tému, čo je podľa voľby užívateľa. Aj v tomto menu správcu špecializuje na chytré telefóny nie je funguje na všetkých smartphonu. Použite menu inú správcu, ak máte problémy na vás.
     ThemeDir=Skins adresár
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Reakcia timeout
     SmsTestMessage=Skúšobná správa od __ PHONEFROM__ do __ PHONETO__
     ModuleMustBeEnabledFirst=Modul  <b>%s</b> musí byť aktívny ak potrebujete túto možnosť
     SecurityToken=Kľúč k zabezpečenej URL
    -NoSmsEngine=Nie odosielateľ SMS manažér k dispozícii. SMS odosielateľa manažér nie sú nainštalované s predvolené rozloženie (pretože závisí na externom dodávateľom), ale môžete nájsť niektoré z %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Môžete nastaviť každý globálne možnosti týkajúce sa generovanie PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Pravidlá sa budujú adresy boxy
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Skryť opis výrobkov z vytvoreného PDF
     HideRefOnPDF=Skryť produkty čj. na vytvorené PDF
     HideDetailsOnPDF=Skryť detaily produktu v generovanóm PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametre na zabezpečenie URL
     SecurityTokenIsUnique=Používame unikátny securekey parameter pre každú adresu URL
     EnterRefToBuildUrl=Zadajte odkaz na objekt %s
     GetSecuredUrl=Získajte vypočítanú URL
    -ButtonHideUnauthorized=Skryť tlačítka pre non admin užívateľov kôli neoprávneným akciám namiesto zobrazenia sivých tlačidiel
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Staré Sadzba DPH
     NewVATRates=Nová sadzba DPH
     PriceBaseTypeToChange=Zmeniť na cenách s hodnotou základného odkazu uvedeného na
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Vyberte zoznam
     ExtrafieldSelectList = Vyberte z tabuľky
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Heslo
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Odkaz na objekt
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Východiskový odkaz
     SetAsDefault=Nastaviť ako predvolené
     ValueOverwrittenByUserSetup=Pozor, táto hodnota môže byť prepísaná užívateľom špecifické nastavenia (každý užívateľ môže nastaviť vlastné clicktodial url)
     ExternalModule=Externý modul - inštalovaný do adresára %s
    -BarcodeInitForThirdparties=Masové načítanie čiarových kódov pre tretie osoby
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Masové načítanie čiarových kódov alebo reset pre produkty alebo služby
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Načítať hodnotu pre %s prázdne hodnoty
     EraseAllCurrentBarCode=Zmazať aktuálne hodnoty čiarových kódov
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=Hodnoty čiarových kódov boli zmazané
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=Žiadne ďalšie detaily v pätičke
     DisplayCompanyInfo=Zobraziť adresu spoločnosti
     DisplayCompanyManagers=Zobraziť mená manažérov
     DisplayCompanyInfoAndManagers=Zobraziť adresu spoločnosti a mená manažérov
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Použiť 3 krokové povolenie ked cena ( bez DPH ) je väčšia ako...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Pole
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Používatelia a skupiny
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Tretie strany
    +Module1Name=Third Parties
     Module1Desc=Firmy a správu kontaktov (zákazníci, vyhliadky ...)
     Module2Name=Obchodné
     Module2Desc=Obchodné riadenie
     Module10Name=Účtovníctvo
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Návrhy
     Module20Desc=Komerčné návrh riadenia
     Module22Name=Mass E-mailing
    @@ -511,13 +517,13 @@ Module52Desc=Skladové hospodárstvo (výrobky)
     Module53Name=Služby
     Module53Desc=Správa služieb
     Module54Name=Zmluvy / Predplatné
    -Module54Desc=Správa zmlúv (služieb alebo opakjúcich sa predplatení)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Čiarové kódy
     Module55Desc=Barcode riadenie
     Module56Name=Telefónia
     Module56Desc=Telefónia integrácia
     Module57Name=Objednávky platené bankovým prevodom
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integrácia ClickToDial systému (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Nákladové a výlet poznámky
     Module75Desc=Náklady a výlet poznámky riadenie
     Module80Name=Zásielky
     Module80Desc=Preprava a dodanie účelom riadenia
    -Module85Name=Banky a peňažné
    +Module85Name=Banks and Cash
     Module85Desc=Riadenie bankových účtoch alebo v hotovosti
    -Module100Name=Externé stránky
    -Module100Desc=Tento modul je externé webové stránky alebo stránku do menu Dolibarr a zobraziť ju do rámu Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Poštár a SPIP
     Module105Desc=Poštár alebo SPIP rozhranie pre členské modul
     Module200Name=LDAP
    -Module200Desc=LDAP synchronizácia adresárov
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integrácia
     Module240Name=Exporty dát
    -Module240Desc=Nástroje pre export  Dolibarr dát ( s asistentom )
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Import dát
    -Module250Desc=Nástroje pre import Dolibarr dát ( s asistentom )
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Členovia
     Module310Desc=Nadácia členovia vedenia
     Module320Name=RSS Feed
     Module320Desc=Pridať RSS kanál vnútri obrazoviek Dolibarr
    -Module330Name=Záložky
    -Module330Desc=Správca záložiek
    -Module400Name=Projekty/Príležitosti/Vyhliadky
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=WebCalendar
     Module410Desc=WebCalendar integrácia
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Pôžička
     Module520Desc=Správca pôžičiek
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Dary
     Module700Desc=Darovanie riadenie
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Masové emailové generovanie dokumentov
     Module1780Name=Štítky / Kategórie
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Povoliť úpravu niektorého textu použitím rozšíreného oditora ( Založené na CKEditor )
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamická cena
     Module2200Desc=Zapnúť používanie matematických výrazov pre ceny
     Module2300Name=Naplánované úlohy
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Webové služby ( SOAP server )
    @@ -590,16 +596,16 @@ Module2600Desc=Spustiť Dolibarr SOAP server ponukajúci služby API
     Module2610Name=API/Web služby  ( REST server )
     Module2610Desc=Zapnúť Dolibarr REST server ponúkajúci API službu
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Pomocou on-line služby (Gravatar www.gravatar.com) ukázať fotku užívateľov / členov (nájdený s ich e-maily). Potrebujete prístup k internetu
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP klient
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP MaxMind konverzie možnosti
     Module3100Name=Skype
     Module3100Desc=Pridať Skype tlačidlo na úžívateľskú kartu používateľa / tretej osoby / kontaktu
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-spoločnosť
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Web stránky
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Opustiť správcu požiadaviek
    -Module20000Desc=Deklarovať a sledovať zamestnanci opustí požiadavky
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Bod predaja
     Module50100Desc=Modul predajné miesta ( POS )
    +Module50150Name=Bod predaja
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Učtovníctvo (pokročilé)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Anketa, Dotazník, Hlasovanie
    -Module55000Desc=Modul pre vytváranie online dotazníkov a hlasovaní ( ako : Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Okraje
     Module59000Desc=Modul pre správu marže
     Module60000Name=Provízie
     Module60000Desc=Modul pre správu provízie
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Zdroje
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Prečítajte si zákazníkov faktúry
    @@ -651,9 +661,9 @@ Permission32=Vytvoriť / upraviť produktov
     Permission34=Odstrániť produkty
     Permission36=Pozri / správa skryté produkty
     Permission38=Export produktov
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Odstrániť projektov (spoločné projekty, projekt a ja som kontakt pre)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Prečítajte intervencie
     Permission62=Vytvoriť / upraviť zásahy
    @@ -686,7 +696,7 @@ Permission109=Odstrániť sendings
     Permission111=Prečítajte finančných účtov
     Permission112=Vytvoriť / upraviť / zmazať a porovnať transakcie
     Permission113=Nastavenie finančných účtov (vytvárať, spravovať kategórie)
    -Permission114=Reconciliate transakcie
    +Permission114=Reconcile transactions
     Permission115=Vývozných transakcií, a výpisy z účtov
     Permission116=Prevody medzi účtami
     Permission117=Spravovanie kontroly dispečingu
    @@ -694,15 +704,15 @@ Permission121=Prečítajte tretej strany v súvislosti s užívateľmi
     Permission122=Vytvoriť / modifikovať tretie strany spojené s používateľmi
     Permission125=Odstránenie tretej strany v súvislosti s užívateľmi
     Permission126=Export tretej strany
    -Permission141=Čítať projekty a úlohy ( taktiež súkromné projekty pre ktoré niesom kontakt )
    -Permission142=Vytvoriť/Upraviť projekty a úlohy ( taktiež súkromné projekty pre ktoré nie som kontakt )
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Zmazať projekty a úlohy ( taktiež súkromné projekty pre ktoré nie som kontakt )
     Permission146=Prečítajte si poskytovatelia
     Permission147=Prečítajte si štatistiky
     Permission151=Read direct debit payment orders
     Permission152=Vytvoriť/Upraviť inkaso objednávku
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Prečítajte si zákazky / predplatné
     Permission162=Vytvoriť / upraviť zákazky / predplatné
     Permission163=Aktivovať službu / predplatné zmluvy
    @@ -725,7 +735,7 @@ Permission187=Zavrieť dodávateľské objednávky
     Permission188=Zrušiť dodávateľských objednávok
     Permission192=Vytvorte linky
     Permission193=Zrušiť linky
    -Permission194=Prečítajte si šírku pásma, linky
    +Permission194=Read the bandwidth lines
     Permission202=Vytvorte prípojok ADSL
     Permission203=Objednať pripojenia objednávky
     Permission204=Objednať spoje
    @@ -750,12 +760,12 @@ Permission244=Pozri obsah skrytých kategórií
     Permission251=Prečítajte si ďalšie užívateľa a skupiny
     PermissionAdvanced251=Prečítajte si ďalšie užívateľa
     Permission252=Prečítajte preukazy ostatných užívateľov
    -Permission253=Vytvoriť / upraviť ďalších používateľov, skupiny a permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Vytvoriť / upraviť interné / externé užívateľa a oprávnenia
     Permission254=Vytvoriť / upraviť externí používatelia iba
     Permission255=Upraviť ostatným používateľom heslo
     Permission256=Odstrániť alebo zakázať ostatným užívateľom
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Prečítajte CA
     Permission272=Prečítajte si faktúry
     Permission273=Vydanie faktúry
    @@ -765,7 +775,7 @@ Permission283=Odstránenie kontaktov
     Permission286=Export kontaktov
     Permission291=Prečítajte tarify
     Permission292=Nastavenie povolení na sadzby
    -Permission293=Upraviť zákazníkmi tarify
    +Permission293=Modify customers tariffs
     Permission300=Prečítajte čiarových kódov
     Permission301=Vytvoriť / upraviť čiarových kódov
     Permission302=Odstrániť čiarových kódov
    @@ -787,11 +797,9 @@ Permission401=Prečítajte zľavy
     Permission402=Vytvoriť / upraviť zľavy
     Permission403=Overiť zľavy
     Permission404=Odstrániť zľavy
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Zmazať platy
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Exportovať platy
     Permission520=Čítať pôžičky
     Permission522=Vytvoriť/Upraviť pôžičky
    @@ -844,8 +852,8 @@ Permission1251=Spustiť Hmotné dovozy externých dát do databázy (načítanie
     Permission1321=Export zákazníkov faktúry, atribúty a platby
     Permission1322=Znova otvoriť zaplatený účet
     Permission1421=Export objednávok zákazníkov a atribúty
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Čítať zdroje
     Permission63002=Vytvoriť/Upraviť zdroje
     Permission63003=Zmazať zdroje
     Permission63004=Pripnúť zdroje k udalosti agendy
    -DictionaryCompanyType=Typy tretích osôb
    -DictionaryCompanyJuridicalType=Právne formy tretích osôb
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Úroveň možnej vyhlidky
     DictionaryCanton=Kraj
     DictionaryRegion=Okres
    @@ -894,7 +902,7 @@ DictionaryVAT=Sadzby DPH alebo Sociálnej dane
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Podmienky platby
     DictionaryPaymentModes=Metódy platby
    -DictionaryTypeContact=Kontakt/Adresa
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ekologická daň
     DictionaryPaperFormat=Papierový formát
    @@ -908,47 +916,47 @@ DictionarySource=Pôvod ponuky / objednávky
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Modely účtovných osnov
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Šablóny emailov
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Jednotky
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Status príležitosti pre projekt/vedenie
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Nastavenie uložené
     SetupNotSaved=Setup not saved
     BackToModuleList=Späť na zoznam modulov
    -BackToDictionaryList=Napäť do zoznamu slovníkov
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=DPH riadenia
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=V predvolenom nastavení je navrhovaná DPH 0, ktorý možno použiť v prípadoch, ako je združenie jednotlivcov ou malých podnikov.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Nepoužívajte druhá daň
    -LocalTax1IsUsedDesc=Použite druhý typ dane (okrem DPH)
    -LocalTax1IsNotUsedDesc=Nepoužívajte iný typ dane (okrem DPH)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Druhý typ dane
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Nepoužívajte tretí daň
    -LocalTax2IsUsedDesc=Použite tretí typ dane (okrem DPH)
    -LocalTax2IsNotUsedDesc=Nepoužívajte iný typ dane (okrem DPH)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Tretí druh dane
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE riadenie
    -LocalTax1IsUsedDescES= RE sadzba v predvolenom nastavení pri vytváraní vyhliadky, faktúry, objednávky atď sledovať aktívny štandardné pravidlo: <br> Ak te Kupujúci nie je vystavený RE, RE štandardne = 0. Koniec vlády. <br> Pokiaľ kupujúci vystavený RE RE potom v predvolenom nastavení. Koniec vlády. <br>
    -LocalTax1IsNotUsedDescES= V predvolenom nastavení je navrhovaná RE je 0. Koniec vlády.
    -LocalTax1IsUsedExampleES= V Španielsku sú profesionáli s výhradou niektorých špecifických častí španielskeho IAE.
    -LocalTax1IsNotUsedExampleES= V Španielsku sú profesionálne a spoločnosti a za určitých častí španielskeho IAE.
    -LocalTax2ManagementES= IRPF riadenie
    -LocalTax2IsUsedDescES= RE sadzba v predvolenom nastavení pri vytváraní vyhliadky, faktúry, objednávky atď sledovať aktívny štandardné pravidlo: <br> Ak predávajúci nie je vystavený IRPF, potom IRPF štandardne = 0. Koniec vlády. <br> Ak je predávajúci vystavený IRPF potom IRPF v predvolenom nastavení. Koniec vlády. <br>
    -LocalTax2IsNotUsedDescES= V predvolenom nastavení je navrhovaná IRPF je 0. Koniec vlády.
    -LocalTax2IsUsedExampleES= V Španielsku, na voľnej nohe a nezávislí odborníci, ktorí poskytujú služby a firmy, ktorí sa rozhodli daňového systému modulov.
    -LocalTax2IsNotUsedExampleES= V Španielsku sú bussines, ktoré nie sú predmetom daňového systému modulov.
    +LocalTax1ManagementES=RE riadenie
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=V predvolenom nastavení je navrhovaná RE je 0. Koniec vlády.
    +LocalTax1IsUsedExampleES=V Španielsku sú profesionáli s výhradou niektorých špecifických častí španielskeho IAE.
    +LocalTax1IsNotUsedExampleES=V Španielsku sú profesionálne a spoločnosti a za určitých častí španielskeho IAE.
    +LocalTax2ManagementES=IRPF riadenie
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=V predvolenom nastavení je navrhovaná IRPF je 0. Koniec vlády.
    +LocalTax2IsUsedExampleES=V Španielsku, na voľnej nohe a nezávislí odborníci, ktorí poskytujú služby a firmy, ktorí sa rozhodli daňového systému modulov.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Vypisy lokálnej dane
     CalcLocaltax1=Predaj - Platba
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Predaje
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label používa v predvolenom nastavení, pokiaľ nie je preklad možno nájsť kód
     LabelOnDocuments=Štítok na dokumenty
    -NbOfDays=Nb dní
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Na konci mesiaca
     CurrentNext=Aktuálny/Nasledujúci
     Offset=Ofset
    @@ -984,7 +993,7 @@ DatabaseUser=Databáza užívateľ
     DatabasePassword=Databáza heslo
     Tables=Tabuľky
     TableName=Názov tabuľky
    -NbOfRecord=Nb záznamov
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Typ ovládača
     SummarySystem=Systém súhrn informácií
    @@ -996,7 +1005,7 @@ Skin=Skin téma
     DefaultSkin=Default skin téma
     MaxSizeList=Maximálna dĺžka zoznamu
     DefaultMaxSizeList=Základná max. dĺžka zoznamu
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Správa dňa
     MessageLogin=Prihlasovacia stránka správu
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanentný vyhľadávací formulár na ľavom menu
     DefaultLanguage=Predvolený jazyk používať (kód jazyka)
     EnableMultilangInterface=Povoliť viacjazyčné rozhranie
     EnableShowLogo=Zobraziť logo na ľavom menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Názov
     CompanyAddress=Adresa
     CompanyZip=Zips
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Majiteľ %s bankových účtov
     BankModuleNotActive=Účty v bankách modul nie je povolený,
     ShowBugTrackLink=Zobraziť odkaz "<strong>%s</strong>"
     Alerts=Upozornenie
    -DelaysOfToleranceBeforeWarning=Tolerancia oneskorenie pred varovanie
    -DelaysOfToleranceDesc=Táto obrazovka umožňuje definovať tolerovať oneskorenie pred upozornenie je hlásený na obrazovke s %s Piktogram pre každý neskoré prvok.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Oneskorenie tolerancie (v dňoch) pred záznam o návrhoch zavrite
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Oneskorenie tolerancie (v dňoch) pred záznam o návrhoch účtované
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerancia oneskorenie (v dňoch) pred záznam o službách aktivovať
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerancia oneskorenie (v dňoch) pred záznam o prejdených služieb
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerancia oneskorenie (v dňoch) pred záznam o neuhradených dodávateľských faktúr
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Toleranciu oneskorenie (v dňoch) pred záznam o nezaplatených faktúr zákazníka
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerancia oneskorenie (v dňoch) pred prebiehajúcom zázname o bankovom zmierenie
    -Delays_MAIN_DELAY_MEMBERS=Tolerancia oneskorenie (v dňoch) pred záznam o meškaní členského poplatku
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerancia oneskorenie (v dňoch) pred pohotovosti pre kontrolu vklad robiť
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=Oblasť nastavení je pre základné nastavenia pre začatím používania Dolubarru
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Ostatné položky menu spravovať voliteľné parametre.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Udalosti bezpečnostný audit
     Audit=Audit
     InfoDolibarr=O Dolibarre
    @@ -1060,16 +1069,16 @@ LogEventDesc=Môžete povoliť tu zapisovanie udalostí Dolibarr zabezpečenia.
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=Systémové informácie je rôzne technické informácie získate v režime iba pre čítanie a viditeľné len pre správcov.
     SystemAreaForAdminOnly=Táto oblasť je k dispozícii pre správcu užívateľa. Žiadny z Dolibarr oprávnenia môže znížiť tento limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Môžete si vybrať každý parameter týkajúce sa vzhľadu Dolibarr a cítiť sa tu
     AvailableModules=Available app/modules
     ToActivateModule=Pre aktiváciu modulov, prejdite na nastavenie priestoru (Domov-&gt; Nastavenie-&gt; Modules).
     SessionTimeOut=Time out na zasadnutí
    -SessionExplanation=Toto číslo zaručené, že relácia nikdy nevyprší pred týmto oneskorením, ak relácia čistič sa vykonáva vnútorné čistenie relácie PHP (a nič iné). Vnútorné PHP zasadnutie čistejšie nie je zárukou, že relácie vyprší práve po tejto doby. Jeho platnosť skončí po tom, čo toto oneskorenie, a keď relácie čistič bežal, takže každý <b>%s / %s</b> prístup, ale iba v prípade prístupu zo strany iných reláciách. <br> Poznámka: na niektorých serveroch s vonkajším mechanizmom relácie čistenie (cron pod Debian, Ubuntu ...), môže byť zničená relácie po dobu definovanú predvolenú <strong>session.gc_maxlifetime,</strong> bez ohľadu na to, čo je zadaná hodnota.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Dostupné spúšťače
    -TriggersDesc=Triggery sú súbory, ktoré sa zmení správanie Dolibarr workflow raz skopírovaný do adresára <b>htdocs / jadro / spúšťače.</b> Uvedomili si nové akcie, aktívny na akciách Dolibarr (nová spoločnosť stvorenia, faktúra validácia, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Trigger v tomto súbore sú <b>zakázané-NoRun</b> prípona vo svojom názve.
     TriggerDisabledAsModuleDisabled=Trigger v tomto súbore sú zakázané ako modul <b>%s</b> je zakázané.
     TriggerAlwaysActive=Trigger v tomto súbore sú vždy aktívne, či už sú aktivované Dolibarr moduly.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Vložte referenčné data. Môžete pridať vaše hodnoty ako zá
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=Ostatné bezpečnostné parametre sú definované tu.
     LimitsSetup=Limity / Presné nastavenie
    -LimitsDesc=Môžete definovať limity, upresnenie a optimalizácia používané Dolibarr tu
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max desatinná pre jednotkových cien
     MAIN_MAX_DECIMALS_TOT=Max desatinné miesta pre celkovej ceny
     MAIN_MAX_DECIMALS_SHOWN=Max desatinná pre ceny zobrazené na obrazovke (Pridať <b>...</b> po tejto rady, ak chcete vidieť <b>...</b> keď je číslo skrátená pri zobrazení na obrazovke)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Čistá jednotková cena produktu
     TotalPriceAfterRounding=Celková cena (bez DPH / s DPH / s DPH) po zaokrúhlení
     ParameterActiveForNextInputOnly=Parameter efektívne pre ďalší vstup iba
     NoEventOrNoAuditSetup=Žiadna udalosť zabezpečenia bol zaznamenaný ešte. To môže byť normálne, ak audit nebol povolený &quot;Nastavenie - Zabezpečenie - auditu&quot; stránky.
    -NoEventFoundWithCriteria=Žiadna udalosť zabezpečenia bol nájdený na týchto vyhľadávacích kritériami.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Pozrite sa na miestne sendmail nastavenie
     BackupDesc=Ak chcete vykonať kompletnú zálohu Dolibarr, musíte:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Uložiť obsah databázy <b>(%s)</b> do súboru. Môžete k  tomu použiť nasledujúceho asistenta.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archívne adresár by mal byť skladovaný na bezpečnom mieste.
     BackupDescY=Vygenerovaný súbor výpisu by sa mal skladovať na bezpečnom mieste.
    -BackupPHPWarning=Záloha nemôže byť garantované s touto metódou. Preferujem predchádzajúce
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Ak chcete obnoviť zálohu Dolibarr, musíte:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= Toto pravidlo je nútený <b>%s</b> aktivovaným modulom
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Je nutné spustiť tento príka
     YourPHPDoesNotHaveSSLSupport=SSL funkcia nie je k dispozícii vo vašom PHP
     DownloadMoreSkins=Ďalšie skiny k stiahnutiu
     SimpleNumRefModelDesc=Vracia referenčné číslo vo formáte nnnn-%syymm kde yy je rok, MM je mesiac a nnnn je sekvencia bez otvoru a bez resetu
    -ShowProfIdInAddress=Zobraziť professionnal id s adresami na dokumenty
    -ShowVATIntaInAddress=Skryť DPH Intra num s adresami na dokumentoch
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Čiastočný preklad
    -MAIN_DISABLE_METEO=Zakázať meteo názor
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Otestujte prihlásiť do API
    -ProxyDesc=Niektoré funkcie Dolibarr musia mať prístup na internet k práci. Definujte tu parametre pre toto. Ak je server Dolibarr je za proxy serverom, tieto parametre Dolibarr hovorí, ako sa k internetu cez neho.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Externý prístup
     MAIN_PROXY_USE=Použitie proxy servera (inak priamy prístup k internetu)
     MAIN_PROXY_HOST=Meno / Adresa proxy servera
     MAIN_PROXY_PORT=Port proxy servera
     MAIN_PROXY_USER=Prihlásiť sa použiť proxy server
     MAIN_PROXY_PASS=Heslo používať proxy server
    -DefineHereComplementaryAttributes=Definujte tu všetky atribúty, ktoré ešte nie sú k dispozícii v predvolenom nastavení, a že chcete byť podporované %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Doplnkové atribúty
     ExtraFieldsLines=Doplnkové atribúty (linky)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Doplnkové hodnoty ( riadky objednávky ) 
     ExtraFieldsSupplierInvoicesLines=Doplnkové hodnoty ( riadky faktúry ) 
     ExtraFieldsThirdParties=Doplnkové atribúty (thirdparty)
    -ExtraFieldsContacts=Doplnkové atribúty (kontakt / adresa)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Doplnkové atribúty (člen)
     ExtraFieldsMemberType=Doplnkové atribúty (člen typ)
     ExtraFieldsCustomerInvoices=Doplnkové atribúty (faktúry)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=iba alfanumerické a malé znaky bez medzier
     SendmailOptionNotComplete=Upozornenie na niektorých operačných systémoch Linux, posielať e-maily z vášho e-mailu, musíte sendmail prevedenie inštalácie obsahuje voľbu-BA (parameter mail.force_extra_parameters do súboru php.ini). Ak niektorí príjemcovia nikdy prijímať e-maily, skúste upraviť tento parameter spoločne s PHP mail.force_extra_parameters =-BA).
     PathToDocuments=Cesta k dokumentom
     PathDirectory=Adresár
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Nastavenie prekladu
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Preprísať prekladový reľazec
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Prekladový reťazec
     CurrentTranslationString=Aktuálny prekladovy reťazec
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=Novy prekladový reťazec na zobrzenie
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Musíte povoliť aspoň jeden modul
    -ClassNotFoundIntoPathWarning=Trieda %s nenašli cestu do PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Áno v lete
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Úložisko relácie šifrovaná Suhosin
     ConditionIsCurrently=Podmienkou je v súčasnej dobe %s
    -YouUseBestDriver=Pomocou ovládača %s, že je najlepší vodič súčasnej dobe k dispozícii.
    -YouDoNotUseBestDriver=Používate jednotku %s ale odporúčaná jednotka je %s
    -NbOfProductIsLowerThanNoPb=Máte len %s produktov / služieb do databázy. To však nie je nutné žiadne špeciálne optimalizácie.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Optimalizácia pre vyhľadávače
    -YouHaveXProductUseSearchOptim=Máte %s produkt do databázy. Mali by ste pridať konštantný PRODUCT_DONOTSEARCH_ANYWHERE do 1 do Home-Nastavenie-Ostatné, môžete obmedziť vyhľadávanie na začiatku reťazca, ktoré umožňujú pre databázy používať index, a vy by ste mali dostať okamžitú odpoveď.
    -BrowserIsOK=Používate %s webovom prehliadači. Tento prehliadač je v poriadku pre bezpečnosť a výkon.
    -BrowserIsKO=Používate %s webovom prehliadači. Tento prehliadač je známe, že zlá voľba pre bezpečnosť, výkon a spoľahlivosť. Sme Odporúčam vám používať Firefox, Chrome, Operu alebo Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug je načítaný
     XCacheInstalled=XCache načítaný.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Vydanie poľných %s
     FillThisOnlyIfRequired=Príklad: +2 ( vyplňte iba ak sú predpokladané problémy s časovým posunom )
     GetBarCode=Získať čiarový kód
     ##### Module password generation
     PasswordGenerationStandard=Späť heslo generované podľa interného algoritmu Dolibarr: 8 znakov obsahujúci zdieľanej čísla a znaky malými písmenami.
    -PasswordGenerationNone=Heslo musí byť vložené manuálne
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail nutné vytvoriť nového užívateľa
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Firmy modul nastavenia
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Dokumenty šablóny
    -DocumentModelOdt=Generovanie dokumentov z OpenDocuments šablón (. ODT alebo ODS. Súbory OpenOffice, KOffice, TextEdit, ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vodoznak na návrhu dokumentu
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Pravidlá pre profesionálne IDs
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Export odkaz na <b>%s</b> formáte je k dispozícii na nasledujúcom odkaze: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Export odkaz na <b>%s</b> formáte je k dispozícii na na
     BillsSetup=Faktúry modul nastavenia
     BillsNumberingModule=Faktúry a dobropisy číslovanie modelu
     BillsPDFModules=Fakturačné doklady modely
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Dobropis
     CreditNotes=Dobropisy
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Spravovanie Prihlásenie pre každého člena
     AdherentMailRequired=EMail nutné vytvoriť nového člena
     MemberSendInformationByMailByDefault=Zaškrtávacie políčko poslať mailom potvrdenie členom (validácia alebo nové predplatné) je v predvolenom nastavení
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Nastavenie LDAP
     LDAPGlobalParameters=Globálne parametre
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Testovanie vyhľadávanie LDAP
     LDAPSynchroOK=Synchronizácia skúška úspešná
     LDAPSynchroKO=Nepodarilo synchronizácia testu
    -LDAPSynchroKOMayBePermissions=Nepodarilo synchronizácia test. Skontrolujte, či je prípojka na server je správne nakonfigurovaný a umožňuje LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP pripojenie k LDAP servera (Server úspešných = %s, %s port =)
     LDAPTCPConnectKO=TCP pripojenie k LDAP serveru zlyhalo (Server = %s, Port = %s)
    -LDAPBindOK=Pripojenie / autentikácia k LDAP serveru úspešný (Server =%s, Port =%s Admin =%s, Password =%s)
    -LDAPBindKO=Pripojiť / Authentificate k LDAP serveru zlyhalo (Server = %s, Port = %s, Admin = %s, Password = %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server je nakonfigurovaný pre verziu 3
     LDAPSetupForVersion2=LDAP server je nakonfigurovaný pre verziu 2
     LDAPDolibarrMapping=Dolibarr mapovanie
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Prihlásenie (samba, ActiveDirectory)
     LDAPFieldLoginSambaExample=Príklad: sAMAccountName
     LDAPFieldFullname=Celé meno
     LDAPFieldFullnameExample=Príklad: cn
    -LDAPFieldPasswordNotCrypted=Heslo nie je šifrovaných
    -LDAPFieldPasswordCrypted=Heslo šifrovaných
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Príklad: userPassword
     LDAPFieldCommonNameExample=Príklad: cn
     LDAPFieldName=Názov
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Ukážkové hodnoty sú určené pre <b>OpenLDAP</b> s nasledujúcimi načítaných schém: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Ak používate thoose hodnoty a OpenLDAP, upravovať vaše LDAP konfiguračný súbor <b>slapd.conf</b> mať všetky thoose schémy načítať.
     ForANonAnonymousAccess=Pre overený prístup (pre prístup pre zápis napríklad)
     PerfDolibarr=Výkon Nastavenie / optimalizácia správa
    -YouMayFindPerfAdviceHere=Nájdete na tejto stránke nejaké kontroly alebo rád týkajúcich sa výkonnosti.
    -NotInstalled=Nie, takľe nie je váš server spomaliť tým.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Aplikačných medzipamäte
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCODE medzipamäte
    -NoOPCodeCacheFound=Žiadne OPCODE nájdená keš. Môže byť použiť ďalšie OPCODE pamäť než XCache alebo eAccelerator (dobré), môže byť, že nemáte OPCODE cache (veľmi zle).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache pre statické zdroje (css, img, javascript)
     FilesOfTypeCached=Súbory typu %s sú ukladané do vyrovnávacej pamäte servera HTTP
     FilesOfTypeNotCached=Súbory typu %s nie sú ukladané do medzipamäte servera HTTP
     FilesOfTypeCompressed=Súbory typu %s sú skomprimované servera HTTP
     FilesOfTypeNotCompressed=Súbory typu %s nekomprimuje servera HTTP
     CacheByServer=Cache serverom
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache v prehliadači
     CompressionOfResources=Kompresia odpovedí HTTP
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=So súčasnými prehliadačmi taká automatická detekcia nie je možná 
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Produkty modul nastavenia
     ServiceSetup=Služby modul nastavenia
     ProductServiceSetup=Produkty a služby moduly nastavenie
     NumberOfProductShowInSelect=Maximálny počet výrobkov v kombá vyberte zoznamy (0 = bez obmedzenia)
    -ViewProductDescInFormAbility=Vizualizácia popisy produktov vo formách (inak ako vyskakovacie bubline)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Predvolený typ čiarového kódu použiť pre produkty
     SetDefaultBarcodeTypeThirdParties=Predvolený typ čiarového kódu použiť k tretím osobám
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Odoslanie Nastavenie modulu
     SendingsReceiptModel=Odoslanie potvrdenky modelu
     SendingsNumberingModules=Sendings číslovanie moduly
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Pozámka pre doručovateľa
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Produkty dodávky príjem číslovanie modul
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Rozšírené editor
     ActivateFCKeditor=Aktivácia pokročilé editor pre:
     FCKeditorForCompany=WYSIWIG vytvorenie / edícii prvkami opisu a poznámku (s výnimkou výrobkov / služieb)
     FCKeditorForProduct=WYSIWIG vytvorenie / edícia produktov / služieb popis a poznámky
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG vytvorenie / edícia pre hromadné eMailings (Nástroje-&gt; e-mailom)
     FCKeditorForUserSignature=WYSIWIG vytvorenie / edícia užívateľského podpisu
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Pripojenie úspešné, ale databáza nevyzerá, že databáza Oscommerce (Kľúčové %s nenašli v tabuľke %s).
    -OSCommerceTestOk=Pripojenie k serveru &quot;%s&quot; na databázu &quot;%s&quot; s úspešní užívateľ &quot;%s.
    -OSCommerceTestKo1=Pripojenie k &quot;%s&quot; servera úspešná, ale databáza &quot;%s&quot; by nebolo možné dosiahnuť.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Pripojenie k serveru "%s" na databázu '%s' s užívateľom "%s" úspešný.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Pripojenie k serveru &quot;%s&quot; s užívateľom &quot;%s 'zlyhalo.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu zmazaný
     Menus=Ponuky
    @@ -1548,7 +1561,7 @@ DetailRight=Podmienka pre zobrazenie neoprávneným sivé menu
     DetailLangs=Lang názov súboru pre preklad kódu štítok
     DetailUser=Interná / Externá / All
     Target=Cieľ
    -DetailTarget=Cieľ pre odkazy (_blank hore otvorí nové okno)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Úroveň (-1: hlavné menu, 0: header menu&gt; 0 Menu a submenu)
     ModifMenu=Menu zmena
     DeleteMenu=Zmazať položku ponuky
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=DPH je splatná: <br> - Na dobierku za tovar (používame d
     OptionVatDebitOptionDesc=DPH je splatná: <br> - Na dobierku za tovar (používame dátumu vystavenia faktúry) <br> - Na faktúru (debetné) na služby
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Na dobierku
     OnPayment=Na zaplatenie
     OnInvoice=Na faktúre
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Nákup účet. kód
     AgendaSetup=Akcie a agenda Nastavenie modulu
     PasswordTogetVCalExport=Kľúč povoliť export odkaz
     PastDelayVCalExport=Neexportovať udalosti staršie ako
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Kliknite pre Dial Nastavenie modulu
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Bod predaja
     CashDeskSetup=Mieste predaja modulu nastavenie
    -CashDeskThirdPartyForSell=Základná tretia osoba pre predaj
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Predvolený účet použiť na príjem platieb v hotovosti
     CashDeskBankAccountForCheque= Predvolený účet použiť pre príjem platieb šekom
     CashDeskBankAccountForCB= Predvolený účet použiť pre príjem platieb prostredníctvom kreditnej karty
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Odpočítavanie skladu z miesta predaja vypnuté
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Záložka Nastavenie modulu
    -BookmarkDesc=Tento modul umožňuje spravovať záložky. Môžete tiež pridať skratky pre všetky Dolibarr stránky alebo external webových stránok na vašom ľavom menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximálny počet záložiek zobrazí v ľavom menu
     ##### WebServices #####
     WebServicesSetup=Webservices modul nastavenia
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Spoločnosť Multi-modul nastavenia
     ##### Suppliers #####
     SuppliersSetup=Dodávateľ modul nastavenia
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Dodávateľských faktúr číslovanie modelov
     IfSetToYesDontForgetPermission=Ak nastavené ANO, nezabudnite poskytnúť povolenia pre skupiny alebo užívateľov oprávnených pre povoľovanie 2. stupňa
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Projekt modul nastavenia
     ProjectsModelModule=Projekt správy Vzor dokladu
     TasksNumberingModules=Úlohy číslovanie modul
     TaskModelModule=Úlohy správy Vzor dokladu
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Možnosti pre E-Mailové u
     ListOfNotificationsPerUser=Zoznam upozornení podľa užívateľa
     ListOfNotificationsPerUserOrContact=Zoznam upozornení podľa užívateľa alebo podľa zmluvy
     ListOfFixedNotifications=Zoznam fixnych upozornení
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Maximálna hodnota
     BackupDumpWizard=Pomocník pre databázovú zálohu
     SomethingMakeInstallFromWebNotPossible=Inštalácia externého modulu z webu nie je možná kôli : 
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Zvýrazniť riadok pre prechode kurzora
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Farba pozadia pre párne riadky tabuľky
     MinimumNoticePeriod=Minimálny oznamovací čas ( Vaša požiadávka musi byť zaznamenaná pred týmto časom )
     NbAddedAutomatically=Počet dní pridaných do počítadla užívateľov ( automaticky ) každý mesiac
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Hodnota dane z predaja
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Typ šablôny
    -TemplateIsVisibleByOwnerOnly=Šablóna je viditelná iba pre majiteľa
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=Oprava časovej zóny
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=Všeci prispievatelia
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Pridať iné stránky alebo služby
     AddModels=Pritaď dokument alebo číselnú šablónu
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Zmazanie nie je možné
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Zoznam dostupných API
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=Užívateľ nemá definované povolenia
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/sk_SK/companies.lang b/htdocs/langs/sk_SK/companies.lang
    index 6302122117e..20d9488886a 100644
    --- a/htdocs/langs/sk_SK/companies.lang
    +++ b/htdocs/langs/sk_SK/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Vyberte tretiu stranu
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Odstránenie kontaktu / adresa
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Nový treťou stranou
    -MenuNewCustomer=Nový zákazník
    -MenuNewProspect=Nová Vyhliadka
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Nová súkromná osoba
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Vytvoriť tretiu stranu
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Treťou stranou kontakt / adresa
     Company=Spoločnosť
     CompanyName=Názov spoločnosti
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Firmy
    -CountryIsInEEC=Krajina je v rámci Európskeho hospodárskeho spoločenstva
    -ThirdPartyName=Tretia strana názov
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Treťou stranou
    -ThirdParties=Tretie strany
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Vyhliadky
     ThirdPartyProspectsStats=Vyhliadky
     ThirdPartyCustomers=Zákazníci
     ThirdPartyCustomersStats=Zákazníci
     ThirdPartyCustomersWithIdProf12=Zákazníci s %s alebo %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Tretí typ vyhľadávajúci večierky
    +ThirdPartyType=Type of company
     Individual=Súkromná osoba
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Materská spoločnosť
     Subsidiaries=Dcérske spoločnosti
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Poštové smerovacie číslo
     Town=Mesto
     Web=Web
     Poste= Pozícia
    -DefaultLang=Predvolený jazyk
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Návrhy
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax je platná
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Tento zákazník má predvolenú zľavu <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Tento zákazník nemá relatívnej zľavu v predvolenom nastavení
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Tento zákazník má stále dobropisy pre <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Nikto
    -Supplier=Dodávateľ
    +Supplier=Vendor
     AddContact=Vytvoriť kontakt
     AddContactAddress=Vytvoriť kontakt/adresu
     EditContact=Upraviť kontakt
    @@ -303,22 +303,22 @@ AddThirdParty=Vytvoriť tretiu stranu
     DeleteACompany=Odstránenie spoločnosť
     PersonalInformations=Osobné údaje
     AccountancyCode=Accounting account
    -CustomerCode=Zákaznícky kód
    -SupplierCode=Vendor code
    -CustomerCodeShort=Zákaznícky kód
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Zákaznícky kód, jedinečný pre všetkých zákazníkov
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Požadované, ak tretia osoba zákazníka alebo perspektíva
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Platnosť riadený modulom
    -ThisIsModuleRules=Jedná sa pravidlá pre tento modul
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect kontaktovať
     CompanyDeleted=Spoločnosť &quot;%s&quot; vymazaný z databázy.
     ListOfContacts=Zoznam kontaktov adries /
     ListOfContactsAddresses=Zoznam kontaktov adries /
    -ListOfThirdParties=Zoznam tretích strán
    -ShowCompany=Show third party
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Zobraziť kontakt
     ContactsAllShort=Všetko (Bez filtra)
     ContactType=Kontaktujte typ
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Tento kontakt nie je kontaktnou osobou pre akékoľvek k
     NoContactForAnyContract=Tento kontakt nie je kontakt u každej zákazky
     NoContactForAnyInvoice=Tento kontakt nie je kontakt pre každé faktúre
     NewContact=Nový kontakt
    -NewContactAddress=Nový kontakt / adresa
    +NewContactAddress=New Contact/Address
     MyContacts=Moje kontakty
     Capital=Kapitál
     CapitalOf=Hlavné mesto %s
     EditCompany=Upraviť spoločnosť
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Kontrola
    -VATIntraCheckDesc=Odkaz <b>%s</b> umožňuje požiadať Európsku DPH checker služby. Externý prístup k internetu zo servera je nutné pre túto službu do práce.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Skontrolujte Intracomunnautary DPH na stránke Európskej komisie
    -VATIntraManualCheck=Môžete sa tiež pozrieť ručne z európskych webových stránok <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Skontrolujte, nie je možné. Skontrolujte, služba nie je poskytovaná členským štátom (%s).
    -NorProspectNorCustomer=Ani vyhliadky, ani zákazník
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Zamestnanci
     ProspectLevelShort=Potenciál
     ProspectLevel=Prospect potenciál
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export do formátu karty
     ContactNotLinkedToCompany=Kontaktu, ktorý nie je spojený s akoukoľvek treťou stranou
     DolibarrLogin=Dolibarr prihlásenie
     NoDolibarrAccess=Žiadny prístup Dolibarr
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Kontakty a vlastnosti
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Cenová hladina
     DeliveryAddress=Dodacia adresa
     AddAddress=Pridať adresu
    @@ -402,16 +402,16 @@ DeleteFile=Zmazať súbor
     ConfirmDeleteFile=Ste si istí, že chcete zmazať tento súbor?
     AllocateCommercial=Assigned to sales representative
     Organization=Organizácia
    -FiscalYearInformation=Informácie o fiškálny rok
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Počiatočný mesiac fiškálneho roka
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Zoznam vyhliadky
    -ListCustomersShort=Zoznam zákazníkov
    -ThirdPartiesArea=Oblasť tretích strán a kontaktov
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Celkom jedinečné tretích strán
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Otvorení
     ActivityCeased=Zatvorené
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. za vynikajúce účet
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Kód je zadarmo. Tento kód je možné kedykoľvek zmeniť.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/sk_SK/errors.lang b/htdocs/langs/sk_SK/errors.lang
    index 21305653a83..15596697da4 100644
    --- a/htdocs/langs/sk_SK/errors.lang
    +++ b/htdocs/langs/sk_SK/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Hodnota &quot;%s&quot; má nesprávny formát dátumu
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Nepodarilo sa zapísať do adresára %s
     ErrorFoundBadEmailInFile=Našiel nesprávne email syntaxe %s riadkov v súbore (%s príklad súlade s emailom = %s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Niektoré požadované pole sa nevypĺňa.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Nepodarilo sa vytvoriť adresár. Uistite sa, že webový server má užívateľ oprávnenie na zápis do adresára dokumentov Dolibarr. Ak je parameter <b>safe_mode</b> je povolené na tomto PHP, skontrolujte, či Dolibarr php súbory, vlastné pre užívateľa webového servera (alebo skupina).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Vyplňte, prosím, hodnotu zoznamu vyberte
     ErrorNoValueForCheckBoxType=Vyplňte, prosím, hodnotu checkbox zoznamu
     ErrorNoValueForRadioType=Prosím vyplňte hodnotu pre rozhlasové zoznamu
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Terénne <b>%s</b> nesmie obsahuje špeciálne znaky.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Nie účtovníctva modul aktivovaný
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP zhoda nie je úplná.
     ErrorLDAPMakeManualTest=. LDIF súbor bol vytvorený v adresári %s. Skúste načítať ručne z príkazového riadku získať viac informácií o chybách.
    -ErrorCantSaveADoneUserWithZeroPercentage=Nemožno uložiť akciu s &quot;Štatút nezačal&quot;, ak pole &quot;vykonáva&quot; je tiež vyplnená.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref používa pre tvorbu už existuje.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript musí byť vypnutá, že táto funkcia pracovať. Ak chcete povoliť / zakázať Javascript, prejdite do ponuky Home-&gt; Nastavenie-&gt; Zobrazenie.
     ErrorPasswordsMustMatch=Obaja napísaný hesla sa musia zhodovať sa navzájom
    -ErrorContactEMail=Technické chybe. Prosím, obráťte sa na správcu, aby e-mailovú <b>%s</b> en poskytovať <b>%s</b> kód chyby v správe, alebo ešte lepšie pridaním obrazovky kópiu tejto stránky.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Chybná hodnota <b>%s</b> číslo poľa (hodnota <b>&quot;%s</b> 'nezodpovedá regex pravidiel <b>%s)</b>
     ErrorFieldValueNotIn=Chybná hodnota <b>%s</b> číslo poľa (hodnota <b>&quot;%s</b> 'nie je dostupná hodnota do poľa <b>%s</b> stolových <b>%s)</b>
     ErrorFieldRefNotIn=Chybná hodnota <b>%s</b> číslo poľa (hodnota <b>&quot;%s&quot;</b> nie je <b>%s</b> existujúce ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Antivírusový program nebol schopný overiť súb
     ErrorSpecialCharNotAllowedForField=Špeciálne znaky nie sú povolené pre pole &quot;%s&quot;
     ErrorNumRefModel=Existuje odkaz do databázy (%s) a nie je kompatibilný s týmto pravidlom číslovania. Odobrať záznam alebo premenovať odkaz na aktiváciu tohto modulu.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Chyba na masku
     ErrorBadMaskFailedToLocatePosOfSequence=Chyba maska ​​bez poradovým číslom
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Chyba, zlá hodnota po resete
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Chyba. Vyberte aspoň jednu položku.
    -ErrorDeleteNotPossibleLineIsConsolidated=Odstránenie nie je možné, pretože záznam je spojená s bankovým transakčného ktorý zmieril
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s je priradený do inej tretej
     ErrorFailedToSendPassword=Nepodarilo sa odoslať heslo
     ErrorFailedToLoadRSSFile=Nedokáže dostať RSS feed. Skúste pridať konštantný MAIN_SIMPLEXMLLOAD_DEBUG prípade chybových hlásení neposkytuje dostatok informácií.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Užívateľ s prihlásením <b>%s</b> nebol nájdený.
     ErrorLoginHasNoEmail=Tento užívateľ nemá žiadnu e-mailovú adresu. Proces prerušená.
     ErrorBadValueForCode=Bad hodnota bezpečnostného kódu. Skúste to znova s ​​novou hodnotou ...
     ErrorBothFieldCantBeNegative=Polia %s a %s nemôžu byť negatívna
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Užívateľský účet <b>%s</b> použiť na spustenie webový server nemá oprávnenie pre ktoré
     ErrorNoActivatedBarcode=Žiaden čiarový kód aktivovaný typ
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Záložka s týmto názvom, alebo tento cieľ (URL)
     WarningPassIsEmpty=Pozor, databáza je heslo prázdne. Toto je bezpečnostná diera. Mali by ste pridať heslo do databázy a zmeniť svoj conf.php súboru v tomto zmysle.
     WarningConfFileMustBeReadOnly=Pozor, môže váš konfiguračný súbor <b>(htdocs / conf / conf.php)</b> musia byť prepísané webovom serveri. To je vážna bezpečnostná diera. Zmeniť oprávnenia k súboru, ktorý chcete v režime len pre čítanie pre užívateľov operačného systému používaného webového servera. Ak používate systém Windows a FAT formát disku, musíte vedieť, že je súborový systém neumožňuje pridať práva na súbore, takže nemôže byť úplne bezpečný.
     WarningsOnXLines=Upozornenie na <b>%s</b> zdrojovom zázname (s)
    -WarningNoDocumentModelActivated=Žiadny model, pre generovanie dokumentov, bol aktivovaný. Bude model zvolil ako predvolené, kým skontrolovať nastavenie modulu.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Pozor, po dokončení nastavenia, musíte zakázať inštaláciu / sťahovať nástroja pridaním súboru do adresára <b>install.lock %s.</b> Chýbajúce tento obrázok je bezpečnostná diera.
    -WarningUntilDirRemoved=Všetky bezpečnostné pokyny (viditeľné admin užívateľa) zostane aktívny tak dlho, až kým chyba je prítomná (alebo konštantné MAIN_REMOVE_INSTALL_WARNING sa pridá Nastavenie-&gt; Ostatné nastavenia).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Pozor, zatváranie sa vykonáva, aj keď suma líši zdrojových a cieľových prvkov. Povoľte túto funkciu so zvýšenou opatrnosťou.
     WarningUsingThisBoxSlowDown=Upozornenie Pri použití tohto políčka spomaliť vážne všetky stránky zobrazujúce krabici.
     WarningClickToDialUserSetupNotComplete=Nastavenie ClickToDial informácií pre užívateľa si nie sú kompletné (pozri tab ClickToDial na vaše užívateľské karty).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/sk_SK/interventions.lang b/htdocs/langs/sk_SK/interventions.lang
    index 168adfbc098..35854a9f18e 100644
    --- a/htdocs/langs/sk_SK/interventions.lang
    +++ b/htdocs/langs/sk_SK/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Zásahy
     InterventionCard=Karta zásahu
     NewIntervention=Nový zásah
     AddIntervention=Vytvoriť zásah
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Zoznam zásahov
     ActionsOnFicheInter=Akcie zamerané na zásah
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/sk_SK/main.lang b/htdocs/langs/sk_SK/main.lang
    index 93bae8c4512..1dd2df23631 100644
    --- a/htdocs/langs/sk_SK/main.lang
    +++ b/htdocs/langs/sk_SK/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Nepodarilo sa odoslať poštu (vysielač, prijímač = %s
     ErrorFileNotUploaded=Súbor nebol nahraný. Skontrolujte, či veľkosť nepresahuje maximálnu povolenú, že voľné miesto na disku a že už nie je súbor s rovnakým názvom v tomto adresári.
     ErrorInternalErrorDetected=Bola zistená chyba
     ErrorWrongHostParameter=Zle hostiteľ parametrov
    -ErrorYourCountryIsNotDefined=Vaša krajina nie je definovaná. Prejsť na Home-Nastavenie-Úpravy a post znovu formulár.
    -ErrorRecordIsUsedByChild=Nepodarilo sa zmazať tento záznam. Tento záznam sa používa aspoň jedno dieťa záznamov.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Chybná hodnota
     ErrorWrongValueForParameterX=Chybná hodnota parametra %s
     ErrorNoRequestInError=Žiadna požiadavka omylom
    -ErrorServiceUnavailableTryLater=Služba nie je k dispozícii pre túto chvíľu. Skúste to znova neskôr.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicitné hodnota v jedinečnej poľa
    -ErrorSomeErrorWereFoundRollbackIsDone=Niektoré boli nájdené chyby. My rollback zmien.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> nie je definovaná v súbore config Dolibarr <b>conf.php.</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Nepodarilo sa nájsť užívateľa <b>%s</b> v databáze Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Chyba, žiadne sadzby DPH stanovenej pre krajinu &quot;%s&quot;.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Chyba sa nepodarilo uložiť súbor.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Nastaviť dátum
     SelectDate=Vybrať dátum
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Súbor sa úspešne nahral
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Súbor vybraný pre pripojenie, ale ešte nebol nahraný. Kliknite na &quot;Priložiť súbor&quot; za to.
    -NbOfEntries=Nb záznamov
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Prečítajte si pomáhať
     RecordSaved=Záznam uložený
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=Pozri vyššie
    -HomeArea=Hlavná oblasť
    +HomeArea=Domáce
     LastConnexion=Latest connection
     PreviousConnexion=Predchádzajúca pripojenie
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Zatvorené
     Closed2=Zatvorené
     NotClosed=Not closed
     Enabled=Povolené
    +Enable=Umožniť
     Deprecated=Zastaralá
     Disable=Zakázať
     Disabled=Invalidný
    @@ -153,7 +154,7 @@ Update=Aktualizovať
     Close=Zavrieť
     CloseBox=Remove widget from your dashboard
     Confirm=Potvrdiť
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Vymazať
     Remove=Odstrániť
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Kopírovať
     Paste=Pasta
     Default=Štandardné
     DefaultValue=Východisková hodnota
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Cena
     PriceCurrency=Price (currency)
     UnitPrice=Jednotková cena
    @@ -347,7 +348,7 @@ AmountTTCShort=Čiastka (s DPH)
     AmountHT=Suma (bez DPH)
     AmountTTC=Čiastka (s DPH)
     AmountVAT=Čiastka dane
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Nevzťahuje sa
     ActionRunningNotStarted=Ak chcete začať
     ActionRunningShort=In progress
     ActionDoneShort=Hotový
    -ActionUncomplete=Neúplné
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generovať
     Duration=Trvanie
     TotalDuration=Celkové trvanie
     Summary=Zhrnutie
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Dostupný
     NotYetAvailable=Zatiaľ nie je k dispozícii
    @@ -468,7 +469,7 @@ and=a
     or=alebo
     Other=Ostatné
     Others=Ostatné
    -OtherInformations=Ostatné informácie
    +OtherInformations=Other information
     Quantity=Množstvo
     Qty=Množstvo
     ChangedBy=Zmenil
    @@ -506,7 +507,7 @@ None=Nikto
     NoneF=Nikto
     NoneOrSeveral=None or several
     Late=Neskoro
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Obrázok
     Photos=Obrázky
    @@ -530,18 +531,6 @@ September=Septembra
     October=Október
     November=November
     December=December
    -JanuaryMin=Január
    -FebruaryMin=Február
    -MarchMin=Mar
    -AprilMin=Apríla
    -MayMin=Máj
    -JuneMin=Júna
    -JulyMin=Júla
    -AugustMin=Augusta
    -SeptemberMin=Septembra
    -OctoberMin=Október
    -NovemberMin=November
    -DecemberMin=Decembra
     Month01=január
     Month02=február
     Month03=pochod
    @@ -646,6 +635,8 @@ SendMail=Odoslať e-mail
     EMail=E-mail
     NoEMail=Žiadny e-mail
     Email=E-mail
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Žiadny mobil
     Owner=Majiteľ
     FollowingConstantsWillBeSubstituted=Nasledujúci konštanty bude nahradený zodpovedajúcou hodnotou.
    @@ -677,7 +668,7 @@ NeverReceived=Nikdy nedostal
     Canceled=Zrušený
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Farba
     Documents=Pripojené súbory
     Documents2=Dokumenty
    @@ -716,15 +707,15 @@ Merge=Spojiť
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Zobraziť stránku pre tlač hlavnú obsahovú časť
     MenuManager=Menu manažér
    -WarningYouAreInMaintenanceMode=Pozor, ste v režime údržby, tak len prihlásení <b>%s</b> je dovolené používať aplikácie v túto chvíľu.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Systémová chyba
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Kreditná karta
     ValidatePayment=Overenie platby
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Polia označené * sú povinné <b>%s</b>
    -FieldsWithIsForPublic=Polia s <b>%s</b> sú uvedené na verejnom zozname členov. Ak nechcete, aby to, zaškrtnúť &quot;verejný&quot; box.
    -AccordingToGeoIPDatabase=(Podľa prepočet GeoIP)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Linka
     NotSupported=Nie je podporované
     RequiredField=Povinné polia
    @@ -732,6 +723,8 @@ Result=Výsledok
     ToTest=Test
     ValidateBefore=Karta musí byť overená pred použitím tejto funkcie
     Visibility=Viditeľnosť
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Súkromný
     Hidden=Skrytý
     Resources=Zdroje
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Vytvorte návrh
     SetToDraft=Späť na návrh
     ClickToEdit=Kliknutím možno upraviť
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Vo dne
     BySalesRepresentative=Do obchodného zástupcu
     LinkedToSpecificUsers=V súvislosti s konkrétnym kontakte s užívateľom
     NoResults=Žiadne výsledky
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=Systémové nástroje
     ModulesSystemTools=Moduly náradie
     Test=Test
     Element=Prvok
     NoPhotoYet=Žiadne fotografie zatiaľ k dispozícii
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Spoluúčasť
     from=z
     toward=k
    @@ -802,7 +797,7 @@ PrintFile=Vytlačiť súbor %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Zobraziť zásah
     ShowContract=Zobraziť zmluvy
    -GoIntoSetupToChangeLogo=Choďte na Domov - Nastavenie - Spoločnosť pre zmenu loga, alebo na Domov - Nastavenie - Zobrazenie pre skrytie loga.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Odstránenie riadka
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Klasifikovať účtované
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Kalendár
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Udalosti
    -EMailTemplates=Šablóny emailov
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projekt
     Projects=Projekty
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Oprávnenia
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Pondelok
     Tuesday=Utorok
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Zásahy
     SearchIntoContracts=Zmluvy
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Komentáre
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Všetci
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Priradené
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/sk_SK/other.lang b/htdocs/langs/sk_SK/other.lang
    index 09710bcfc4d..ced342507f8 100644
    --- a/htdocs/langs/sk_SK/other.lang
    +++ b/htdocs/langs/sk_SK/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Bezpečnostný kód
     NumberingShort=N°
     Tools=Nástroje
     TMenuTools=Nástroje
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Narodeniny
     BirthdayDate=Birthday date
     DateToBirth=Dátum narodenia
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Správa o overených strane platobnej návrate
     MessageKO=Správa o zrušení strane platobnej návrate
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervencie overená
    -Notify_FICHINTER_SENTBYMAIL=Intervencie poštou
     Notify_ORDER_VALIDATE=Zákazníka overená
     Notify_ORDER_SENTBYMAIL=Zákazníka zasielaný poštou
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Dodávateľ odoslaná poštou
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Dodávateľská objednávka zaznamenaná
     Notify_ORDER_SUPPLIER_APPROVE=Dodávateľ aby schválila
     Notify_ORDER_SUPPLIER_REFUSE=Dodávateľ aby odmietol
     Notify_PROPAL_VALIDATE=Zákazník návrh overená
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Komerčné návrh zaslať poštou
     Notify_WITHDRAW_TRANSMIT=Prevodovka stiahnutiu
     Notify_WITHDRAW_CREDIT=Kreditné stiahnutiu
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Tretia strana vytvorená
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Zákazník faktúra overená
     Notify_BILL_UNVALIDATE=Zákazník faktúra unvalidated
    -Notify_BILL_PAYED=Zákazník platí faktúry
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Zákazník faktúra zrušená
     Notify_BILL_SENTBYMAIL=Zákazník faktúra zaslaná poštou
     Notify_BILL_SUPPLIER_VALIDATE=Dodávateľ faktúru overená
    -Notify_BILL_SUPPLIER_PAYED=Dodávateľ faktúru platí
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Dodávateľ faktúru poštou
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Zmluva overená
     Notify_FICHEINTER_VALIDATE=Intervencie overená
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervencie poštou
     Notify_SHIPPING_VALIDATE=Poštovné overená
     Notify_SHIPPING_SENTBYMAIL=Doručenie poštou
     Notify_MEMBER_VALIDATE=Člen overená
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Počet pripojených súborov / dokumentov
     TotalSizeOfAttachedFiles=Celková veľkosť pripojených súborov / dokumentov
     MaxSize=Maximálny rozmer
     AttachANewFile=Pripojte nový súbor / dokument
     LinkedObject=Prepojený objekt
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> je informácia v závislosti na tretích strán krajiny. <br> Napríklad pre krajiny <b>%s,</b> je to kód <b>%s.</b>
     DolibarrDemo=Dolibarr ERP / CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Zásah %s bol overený.
     EMailTextInvoiceValidated=Faktúra %s bol overený.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Návrh %s bol overený.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Aby %s bol overený.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Aby %s bol schválený %s.
     EMailTextOrderRefused=Aby %s bola zamietnutá.
     EMailTextOrderRefusedBy=Aby %s bolo odmietnuté podľa %s.
     EMailTextExpeditionValidated=Prepravné %s bol overený.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Dovoz súbor dát
     DolibarrNotification=Automatické upozornenie
     ResizeDesc=Zadajte novú šírku <b>alebo</b> výšku novej. Pomer budú uchovávané pri zmene veľkosti ...
    @@ -204,7 +212,7 @@ NewLength=Nová šírka
     NewHeight=Nová výška
     NewSizeAfterCropping=Nová veľkosť po oreze
     DefineNewAreaToPick=Definovať novú oblasť na obrázok pre jeho vyzdvihnutie (ľavým tlačidlom myši na obrázok a potom ťahajte, kým sa nedostanete na protiľahlej roh)
    -CurrentInformationOnImage=Tento nástroj bol navrhnutý tak, aby vám pomôže zmeniť veľkosť alebo orezať obrázok. To je informácia o aktuálnom editovaného obrázku
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Editor obrázkov
     YouReceiveMailBecauseOfNotification=Táto správa sa zobrazí, pretože Váš e-mail bol pridaný na zoznam cieľov, ktoré majú byť o jednotlivých akciách na %s %s softvéru.
     YouReceiveMailBecauseOfNotification2=Táto akcia je nasledovné:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Vývoz plocha
    diff --git a/htdocs/langs/sk_SK/projects.lang b/htdocs/langs/sk_SK/projects.lang
    index b8a08f20a35..1808a80e71b 100644
    --- a/htdocs/langs/sk_SK/projects.lang
    +++ b/htdocs/langs/sk_SK/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Zobraziť projektu
     ShowTask=Zobraziť úloha
     SetProject=Nastavenie projektu
     NoProject=Žiadny projekt definovaný alebo vlastné
    -NbOfProjects=Nb projektov
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Čas strávený
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Zoznam obchodných návrhov spojených s projektom
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Zoznam zákaziek súvisiacich s projektom
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Zoznam výkonov spojených s projektom
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Zoznam udalostí spojených s projektom
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Prispievateľ
     SelectElement=Vyberte prvok
     AddElement=Odkaz na elementu
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Plánované zaťaženie
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Návrh
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/sl_SI/admin.lang b/htdocs/langs/sl_SI/admin.lang
    index 76304e5c2c0..75b115cfd1d 100644
    --- a/htdocs/langs/sl_SI/admin.lang
    +++ b/htdocs/langs/sl_SI/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Razvojna
     VersionUnknown=Neznana
     VersionRecommanded=Priporočena
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Rutina za shranjevanje seje
     SessionSavePath=Lokalizacija shranjevanja seje
     PurgeSessions=Odstranitev sej
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Shranitev rutine za shranjevanje seje v vašem PHP ne omogoča prikaza seznama vseh sej, ki se izvajajo.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Zaklepanje novih povezav
    -ConfirmLockNewSessions=Ali zares želite omejiti vse nove Dolibarr povezave samo nase. Samo uporabnik <b>%s</b> se bo potem lahko priklopil.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Odstrani blokado povezovanja
     YourSession=Vaša seja
    -Sessions=Seje uporabnikov
    +Sessions=Users sessions
     WebUserGroup=Spletni strežnik uporabnik / skupina
    -NoSessionFound=Kaže, da vaš PHP ne dovoli prikaza seznama aktivnih sej. Mapa (<b>%s</b>), ki se uporablja za shranjevanje sej, je morda zaščitena (Na primer z OS dovoljenji ali z PHP direktivo open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Nabor znakov v bazi podatkov za shranjevanje podatkov
     DBSortingCharset=Nabor znakov v bazi podatkov za sortiranje podatkov
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Zunanji uporabnik
     InternalUsers=Interni uporabniki
     ExternalUsers=Zunanji uporabniki
     GUISetup=Prikaz
    -SetupArea=Področje nastavitev
    +SetupArea=Nastavitve
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Testiranje »upload-a« (v skladu z nastavitvami)
     IfModuleEnabled=Opomba: 'Da' velja samo, če je omogočen modul <b>%s</b>
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Koda ne sme vsebovati vrednosti 0
     DisableJavascript=Onemogoči JavaScript in Ajax funkcije (priporočeno za slepe osebe ali tekstualne brskalnike)
     UseSearchToSelectCompanyTooltip=Če je partnerjev zelo veliko (> 100 000), lahko hitrost povišate z nastavitvijo konstante SOCIETE_DONOTSEARCH_ANYWHERE na 1 v Nastavitve->Ostale nastavitve. Iskanje bo s tem omejeno na začetek niza.
     UseSearchToSelectContactTooltip=Če je partnerjev zelo veliko (> 100 000), lahko hitrost povišate z nastavitvijo konstante SOCIETE_DONOTSEARCH_ANYWHERE na 1 v Nastavitve->Ostale nastavitve. Iskanje bo s tem omejeno na začetek niza.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Število znakov za sproženje iskanja: %s ViewFullDateActions=Prikaži celotne datume aktivnosti na tretjem listu
     NotAvailableWhenAjaxDisabled=Ni na voljo, če je Ajax onemogočen
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Predogled ni na voljo
     ThemeCurrentlyActive=Trenutno aktivna tema
     CurrentTimeZone=Časovni pas PHP strežnika
     MySQLTimeZone=Časovni pas MySql (baze podatkov)
    -TZHasNoEffect=Podatkovni strežnik shranjuje in prikazuje podatke, kot da bi bili shranjeni v predloženih nizih. Časovna cona učinkuje samo, če uporabljate funkcijo UNIX_TIMESTAMP (te Dolibarr ne sme uporabljati, zato TZ baza ne bi smela imeti nmobenega učinka, tudi če se spremeni po vnosu podatkov).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Presledek
     Table=Tabela
     Fields=Polja
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Aktiven
     SetupShort=Nastavitve
     OtherOptions=Ostale opcije
    -OtherSetup=Ostale nastavitve
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimalno ločilo
     CurrentValueSeparatorThousand=Ločilo tisočic
     Destination=Destinacija
     IdModule=ID modula
     IdPermissions=ID dovoljenj
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Lokalizacijski parameteri
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Časovni pas klienta (uporabnika)
     ClientHour=Ura klienta (uporabnika)
     OSTZ=Časovni pas OS strežnika
    @@ -126,8 +126,8 @@ PHPTZ=Časovni pas PHP strežnika
     DaylingSavingTime=Poletni/zimski čas (uporabnik)
     CurrentHour=Ura PHP strežnika
     CurrentSessionTimeOut=Časovna omejitev trenutne seje
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Samozaznava (jezik iskalnika)
     FeatureDisabledInDemo=Funkcija onemogočena v demo različici
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Prikazani so samo elementi <a href="%s">omogočenih modulov </a>.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Nov
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, uradna tržnica za Dolibarr ERP/CRM zunanje module
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Ne shranjujte v bazi podatkov celih gesel, temveč samo
     MainDbPasswordFileConfEncrypted=Šifrirana baza podatkov v conf.php (priporočena aktivacija)
     InstrucToEncodePass=Za kodiranje gesla v datoteki <b>conf.php</b>, zamenjajte vrstico <br><b>$dolibarr_main_db_pass="...";</b><br>z<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=Za dekodiranje gesla (izbris) v datoteki <b>conf.php</b>, zamenjajte vrstico <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>z<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Zaščita generiranih pdf datotek (aktivacija ni priporočena, prekinjeno masovno generiranje pdf)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Funkcija
     DolibarrLicense=Licenca
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=Glede dokumentacije za uporabnike in razvojnike (Doc, FAQ...),<br>poglejte na Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Za vsa ostala vprašanja/pomoč lahko uporabite Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=To področje vam omogoča dostop do storitve »Dolibarr Help Support«.
    -HelpCenterDesc2=Nekateri deli te storitve so na voljo <b>samo v angleščini</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Trenutna rutina za meni
     MeasuringUnit=Merilna enota
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Čas za odobritev
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS vrata (Privzeto v php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS gostitelj (Privzeto v php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS vrata (Ni definiran v PHP na Unix ali podobnih sistemih)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS gostitelj (Ni definiran v PHP na Unix ali podobnih sistemih)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Sistematično pošilljanje skritih kopij (cc) vseh poslanih emailov za
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Načini za pošiljanje e-pošte
    -MAIN_MAIL_SMTPS_ID=SMTP ID, če je zahtevano preverjanje pristnosti
    -MAIN_MAIL_SMTPS_PW=SMTP geslo, če je zahtevano preverjanje pristnosti
    -MAIN_MAIL_EMAIL_TLS= Uporabi TLS (SSL) šifriranje
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Onemogoči vsa pošiljanja SMS (za namen testiranja ali demonstracij)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Uporabljen način pošiljanja SMS
    -MAIN_MAIL_SMS_FROM=Privzeta pošiljateljeva telefonska številka za pošiljanje SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Funkcija ni na voljo pri Unix sistemih. Preverite program za pošiljanje pošte lokalno.
    -SubmitTranslation=Če prevod v ta jezik ni narejen v celoti ali če ste v prevodu našli napake, lahko popravite datoteke v mapi <b>langs/%s</b> in pošljete vaše spremembe na www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Nastavitve modula
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Ne uporabljajte v proizvodnji
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Korak %s
    -FindPackageFromWebSite=Poiščite paket, ki omogoča funkcijo, ki jo želite (na primer na spletni strani %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Prenesite paket (na primer z uradne spletne strani %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Trenutna različica Dolibarr
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Zakasnitev predpomnilnika za izvozni odziv v sekundah (0 ali prazno pomeni, da ni predpomnilnika)
     DisableLinkToHelpCenter=Skrij link "<b>Potrebujete pomoč ali podporo</b>" na prijavni strani
     DisableLinkToHelp=Skrij povezavo do on-line pomoči "<b>%s</b>"
    -AddCRIfTooLong=Ni avtomatskega prelamljanja besedila, zato morate v predolgo vrstico, ki sega preko robu strani, vstaviti znak za novo vrstico.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimalna dolžina
     LanguageFilesCachedIntoShmopSharedMemory=Datoteke .lang naložene v spomin v skupni rabi
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Primeri pri trenutno veljavnih nastavitvah
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Seznam map z OpenDocument predlogami
     ListOfDirectoriesForModelGenODT=Seznam map, ki vsebujejo predloge v OpenDocument formatu.<br><br>Tukaj navedite celotno pot do mape.<br>Med mapami vstavite CR.<br>Mapo GED modula dodajte tukaj <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Datoteke v tej mapi morajo imeti končnico <b>.odt</b> ali <b>.ods</b>.
    -NumberOfModelFilesFound=Število ODT/ODS predlog v teh mapah
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Primeri sintakse:<br>c:\\mydir<br>/home/mydir <br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=Z dodatkom takih oznak v predlogo, boste ob kreiranju dokumenta dobili personalizirane vrednosti:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Ključi za uporabo Web storitev (parameter "dolibarrkey"
     TestSubmitForm=Vnos testnega obrazca
     ThisForceAlsoTheme=S tem upravljalnikom menija bo uporabljena tudi lastna tema po izboru uporabnika. Prav tako ta upravljalnik menijev, specializiran za pametne telefone, ne deluje na vseh pametnih telefonih. Če imate težave z vašim upravljalnikom menijev, uporabite drugega.
     ThemeDir=Mapa s preoblekami
    -ConnectionTimeout=Časovna omejitev povezave
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Časovna omejitev odziva
     SmsTestMessage=Testno sporočilo od __PHONEFROM__ za __PHONETO__
     ModuleMustBeEnabledFirst=Če potrebujete to funkcijo, morate najprej omogočiti Modul <b>%s</b>.
     SecurityToken=Ključ za šifriranje url
    -NoSmsEngine=Na voljo ni nobenega upravljalnika SMS pošiljanja. Upravljalniki SMS pošiljanja niso nameščeni z običajno distribucijo (ker so odvisni od zunanjih dobaviteljev), vendar nekatere lahko najdete na http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Nastavite lahko vsak globalne možnosti, povezanih z PDF generacije
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Pravila oblikovati naslov polja
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Skrij opis proizvoda v ustvarjenem PDF
     HideRefOnPDF=Skrij reference proizvoda v ustvarjenem PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametri za zagotovitev URL
     SecurityTokenIsUnique=Uporabite edinstven parameter securekey za vsako URL
     EnterRefToBuildUrl=Vnesite sklic za predmet %s
     GetSecuredUrl=Get izračuna URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Stara stopnja DDV
     NewVATRates=Nova stopnja DDV
     PriceBaseTypeToChange=Sprememba cen z definirano osnovno referenčno vrednostjo
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Izberi seznam
     ExtrafieldSelectList = Izberi iz tabele
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Geslo
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Poveži z objektom
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Privzeta povezava
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Pozor, ta vrednost bo morda prepisana s specifično nastavitvijo uporabnika (vsak uporabnik lahko nastavi lastno povezavo za klic s klikom)
     ExternalModule=Zunanji modul - nameščen v mapo %s
    -BarcodeInitForThirdparties=Vzpostavitev masovne črtne kode za partnerje
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Vzpostavitev ali resetiranje masovne črtne kode za proizvode in storitve
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Začetna vrednost za naslednjih %s praznih zapisov
     EraseAllCurrentBarCode=Zbrišite vse trenutne vrednosti črtnih kod
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=Vse vrednosti črtnih kod so bile odstranjene
    -NoBarcodeNumberingTemplateDefined=Nobena številčna predloga črtne kode ni omogočena v mudulu za nastavitev črtnih kod.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Polje
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Uporabniki & skupine
    +Module0Name=Uporabniki & Skupine
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Partnerji
    +Module1Name=Third Parties
     Module1Desc=Upravljanje podjetij in kontaktov
     Module2Name=Komerciala
     Module2Desc=Upravljanje komerciale
     Module10Name=Računovodstvo
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Ponudbe
     Module20Desc=Upravljanje komercialnih ponudb
     Module22Name=Masovno E-pošiljanje
    @@ -511,13 +517,13 @@ Module52Desc=Upravljanje zalog proizvodov
     Module53Name=Storitve
     Module53Desc=Upravljanje storitev
     Module54Name=Pogodbe/naročnine
    -Module54Desc=Upravljanje pogodb (storitev ali ponavljajočih naročnin)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Črtne kode
     Module55Desc=Upravljanje črtnih kod
     Module56Name=Telefonija
     Module56Desc=Integracija telefonije
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=Klic s klikom
     Module58Desc=Integracija klica s klikom
     Module59Name=Vaš zaznamek
    @@ -528,45 +534,45 @@ Module75Name=Stroški in potni nalogi
     Module75Desc=Upravljanje stroškov in potnih nalogov
     Module80Name=Pošiljanja
     Module80Desc=Upravljanje pošiljanja in dobavnic
    -Module85Name=Banka in gotovina
    +Module85Name=Banks and Cash
     Module85Desc=Upravljanje bančnih in gotovinskih računov
    -Module100Name=Zunanja stran
    -Module100Desc=Vključi vsako zunanjo spletno stran v Dolibarr meni in jo prikaži v Dolibarr okvirju
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman in SPIP
     Module105Desc=Mailman ali SPIP vmesnik za modul člana
     Module200Name=LDAP
    -Module200Desc=Sinhronizacija LDAP mape
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=Integracija PostNuke
     Module240Name=Izvoz podatkov
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Uvoz podatkov
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Člani
     Module310Desc=Upravljanje članov ustanove
     Module320Name=Vir RSS
     Module320Desc=Dodajanje vira RSS na prikazane Dolibarr strani
    -Module330Name=Zaznamki
    -Module330Desc=Urejanje zaznamkov
    -Module400Name=Projekti/priložnosti/možnosti
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Internetni koledar
     Module410Desc=Integracija internetnega koledarja
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Posojilo
     Module520Desc=Upravljanje posojil
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donacije
     Module700Desc=Upravljanje donacij
     Module770Name=Stroškovno poročilo
    -Module770Desc=Poročilo upravljanja in stroškov povračil (prevoz, hrana, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Generiranje dokumenta za masovno pošto
     Module1780Name=Značke/kategorije
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=Fck urejevalnik
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dinamične cene
     Module2200Desc=Omogoči uporabo matematičnih formul za izračun cen
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Omogoči strtežnik Dolibarr SOAP, ki zagotavlja API storitve
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Omogoči strtežnik Dolibarr REST, ki zagotavlja API storitve
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Vključitev Dolibarr klienta za mrežni servis (lahko se uporablja za potisk podatkov/zahtev na zunanji strežnik. Zaenkrat so podprta samo naročila pri dobaviteljih)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Uporaba online Gravatar storitev (www.gravatar.com) za prikaz fotografij uporabnikov/članov (na osnovi njihovih emailov). Potreben je internetni dostop
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=Možnost konverzije GeoIP Maxmind
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Skupine podjetij
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Upravljanje zahtevkov za dopust
    -Module20000Desc=Določitev in sledenje zahtevkov za dopustov zaposlenih
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot ali serijska številka, upravljana po datumu prevzema in datumu prodaje
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Prodajalne
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Prodajna mesta
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Računovodstvo (napredno)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=Tiskanje IPP
    -Module54000Desc=Direktno tiskanje (brez odpiranja dokumenta) z uporabo Cups IPP vmesnika (tiskalnik mora biti viden na strežniku in nameščen mora biti CUPS ).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Izberi, oceni ali glasuj
    -Module55000Desc=Modul za izdelavo online izbora, ocenjevanja ali glasovanja (kot Doodle, Studz, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marže
     Module59000Desc=Modul za upravljanje z maržami
     Module60000Name=Provizije
     Module60000Desc=Modul za upravljanje s provizijami
    -Module62000Name=Mednarodni poslovni izraz
    -Module62000Desc=Mednarodnemu poslovnemu izrazu dodaj lastnost
    +Module62000Name=Mednarodni Poslovni Izrazi
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Viri
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Branje računov
    @@ -651,9 +661,9 @@ Permission32=Kreiranje/spreminjanje proizvodov
     Permission34=Brisanje proizvodov
     Permission36=Pregled/upravljanje skritih proizvodov
     Permission38=Izvoz proizvodov
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Brisanje projektov
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Branje intervencij
     Permission62=Kreiranje/spreminjanje intervencij
    @@ -686,7 +696,7 @@ Permission109=Brisanje pošiljk
     Permission111=Branje finančnih postavk
     Permission112=Kreiranje/spreminjanje/brisanje in primerjava transakcij
     Permission113=Nastavitve finančnih kontov (kreiranje, upravljanje kategorij)
    -Permission114=Pobotanje transkacij
    +Permission114=Reconcile transactions
     Permission115=Izvoz transakcij in računovodskih izkazov
     Permission116=Transfer med računi
     Permission117=Upravljanje pošiljanja čekov
    @@ -694,15 +704,15 @@ Permission121=Branje partnerjev, vezanih na uporabnika
     Permission122=Kreiranje/spreminjanje partnerjev, vezanih na uporabnika
     Permission125=Brisanje partnerjev, vezanih na uporabnika
     Permission126=Izvoz partnerjev
    -Permission141=Beri vse projekte in naloge (tudi zasebne, za katere jaz nisem kontaktna oseba)
    -Permission142=Ustvari/spremeni vse projekte in naloge (tudi zasebne, za katere jaz nisem kontaktna oseba)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Izbriši vse projekte in naloge (tudi zasebne, za katere jaz nisem kontaktna oseba)
     Permission146=Brisanje ponudnikov
     Permission147=Branje statistike
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Branje pogodb/naročnin
     Permission162=Kreiranje/spreminjanje pogodb/naročnin
     Permission163=Aktiviranje pogodbene storitve/naročnine
    @@ -725,7 +735,7 @@ Permission187=Zaključek naročil pri dobaviteljih
     Permission188=Preklic naročil pri dobaviteljih
     Permission192=Kreiranje vrstic
     Permission193=Preklic vrstic
    -Permission194=Branje vrstic pasovne širine
    +Permission194=Read the bandwidth lines
     Permission202=Kreiranje ADSL povezav
     Permission203=Naročanje povezovalnih naročil
     Permission204=Naročanje povezav
    @@ -750,12 +760,12 @@ Permission244=Ogled vsebine skritih kategorij
     Permission251=Branje ostalih uporabnikov ali skupin
     PermissionAdvanced251=Branje ostalih uporabnikov
     Permission252=Kreiranje/spreminjanje ostalih uporabnikov, skupin in dovoljenj
    -Permission253=Spreminjanje gesel ostalih uporabnikov
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Kreiranje/spreminjanje notranjih/zunanjih uporabnikov in dovoljenj
     Permission254=Brisanje ali onemogočenje ostalih uporabnikov
     Permission255=Kreiranje/spreminjanje lastnih uporabniških informacij
     Permission256=Spreminjanje lastnega gesla
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Branje CA
     Permission272=Branje računov
     Permission273=Izdaja računov
    @@ -765,7 +775,7 @@ Permission283=Brisanje kontaktov
     Permission286=Izvoz kontaktov
     Permission291=Branje tarif
     Permission292=Nastavitev dovoljenj za tarife
    -Permission293=Spreminjanje tarif kupcev
    +Permission293=Modify customers tariffs
     Permission300=Branje črtnih kod
     Permission301=Kreiranje/spreminjanje črtnih kod
     Permission302=Brisanje črtnih kod
    @@ -787,11 +797,9 @@ Permission401=Branje popustov
     Permission402=Kreiranje/spreminjanje popustov
     Permission403=Potrjevanje popustov
     Permission404=Brisanje popustov
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Izbris plač
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Izvoz plač
     Permission520=Branje posojil
     Permission522=Kreiranje/spreminjanje posojil
    @@ -844,8 +852,8 @@ Permission1251=Izvajanje masovnega izvoza zunanjih podatkov v bazo podatkov (nal
     Permission1321=Izvoz računov za kupce, atributov in plačil
     Permission1322=Reopen a paid bill
     Permission1421=Izvoz naročil kupcev in atributov
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Brisanje zahtevkov za dopust
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Nivo potenciala možne stranke
     DictionaryCanton=Dežela/Provinca
     DictionaryRegion=Regije
    @@ -894,7 +902,7 @@ DictionaryVAT=Stopnje DDV ali davkov
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Pogoji plačil
     DictionaryPaymentModes=Načini plačil
    -DictionaryTypeContact=Tipi kontaktov/naslovov
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ekološka taksa (WEEE)
     DictionaryPaperFormat=Formati papirja
    @@ -908,47 +916,47 @@ DictionarySource=Izvor ponudb/naročil
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Modeli kontnih planov
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Predloge za elektronsko pošto
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Enote
     DictionaryProspectStatus=Status možnih strank
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Status priložnosti za projekt/možnost
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Nastavitve shranjene
     SetupNotSaved=Setup not saved
     BackToModuleList=Nazaj na seznam modulov
    -BackToDictionaryList=Nazaj na seznam slovarjev
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Upravljanje DDV
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=Privzeta predlagana stopnja DDV je 0, kar se lahko uporabi za primere kot so združenja, posamezniki ali majhna podjetja.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Stopnja
     LocalTax1IsNotUsed=Ne uporabi drugega davka
    -LocalTax1IsUsedDesc=Uporabi drugo vrsto davka (poleg DDV)
    -LocalTax1IsNotUsedDesc=Ne uporabi drugih vrst davka (poleg DDV)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Druga vrsta davka
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Ne uporabi tretjega davka
    -LocalTax2IsUsedDesc=Uporabi tretjo vrsto davka (poleg DDV)
    -LocalTax2IsNotUsedDesc=Ne uporabi drugih vrst davka (poleg DDV)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Tretja vrsta davka
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= RE obrestno mero za zamudne pri ustvarjanju možnosti, izdajanje računov, naročila itd sledijo aktivni standard pravilo: <br> Če se te kupec ne veljajo RE, RE privzeto = 0. Konec pravila. <br> Če je kupec opravi potem RE RE privzeto. Konec pravila. <br>
    -LocalTax1IsNotUsedDescES= Privzeto predlagani RE je 0. Konec pravila.
    -LocalTax1IsUsedExampleES= V Španiji so strokovnjaki, z nekaterimi posebnimi deli španskega IAE.
    -LocalTax1IsNotUsedExampleES= V Španiji so strokovno in družb in ob upoštevanju nekaterih odsekih španske IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= RE obrestno mero za zamudne pri ustvarjanju možnosti, izdajanje računov, naročila itd sledijo aktivni standard pravilo: <br> Če prodajalec ne veljajo IRPF, potem IRPF privzeto = 0. Konec pravila. <br> Če je prodajalec opravi IRPF nato IRPF privzeto. Konec pravila. <br>
    -LocalTax2IsNotUsedDescES= Privzeto predlagani IRPF je 0. Konec pravila.
    -LocalTax2IsUsedExampleES= V Španiji, samostojnimi in neodvisni strokovnjaki, ki opravljajo storitve in podjetja, ki so se odločili davčni sistem modulov.
    -LocalTax2IsNotUsedExampleES= V Španiji so poslovne niso predmet davčnega sistema modulov.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Privzeto predlagani RE je 0. Konec pravila.
    +LocalTax1IsUsedExampleES=V Španiji so strokovnjaki, z nekaterimi posebnimi deli španskega IAE.
    +LocalTax1IsNotUsedExampleES=V Španiji so strokovno in družb in ob upoštevanju nekaterih odsekih španske IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Privzeto predlagani IRPF je 0. Konec pravila.
    +LocalTax2IsUsedExampleES=V Španiji, samostojnimi in neodvisni strokovnjaki, ki opravljajo storitve in podjetja, ki so se odločili davčni sistem modulov.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Poročila o lokalnih davkih
     CalcLocaltax1=Prodaja - Nabava
     CalcLocaltax1Desc=Poročila o lokalnih davkih so izračunana kot razlika med nabavnimi in prodajnimi davki
    @@ -958,7 +966,8 @@ CalcLocaltax3=Prodaja
     CalcLocaltax3Desc=Poročila o lokalnih davkih so seštevek prodajnih davkov
     LabelUsedByDefault=Privzet naziv, če za kodo ne obstaja prevod
     LabelOnDocuments=Naslov na dokumentu
    -NbOfDays=Število dni
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Na koncu meseca
     CurrentNext=Current/Next
     Offset=Odmik
    @@ -984,7 +993,7 @@ DatabaseUser=Uporabnik baze podatkov
     DatabasePassword=Geslo za bazo podatkov
     Tables=Tabele
     TableName=Ime tabele
    -NbOfRecord=Število zapisov
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Tip gonilnika
     SummarySystem=Povzetek sistemskih informacij
    @@ -996,7 +1005,7 @@ Skin=Tema preobleke
     DefaultSkin=Privzeta tema preobleke
     MaxSizeList=Največja dolžina seznama
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Sporočilo dneva
     MessageLogin=Sporočilo na prijavni strani
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Stalno polje za iskanje na levem meniju
     DefaultLanguage=Privzet jezik uporabe (koda jezika)
     EnableMultilangInterface=Omogočen večjezični vmesnik
     EnableShowLogo=Prikaži logo na levem meniju
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Ime podjetja
     CompanyAddress=Naslov
     CompanyZip=Poštna številka
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Lastnik bančnega računa %s
     BankModuleNotActive=Modul za bančne račune ni omogočen
     ShowBugTrackLink=Prikaži povezavo "<strong>%s</strong>"
     Alerts=Opozorila
    -DelaysOfToleranceBeforeWarning=Toleranca zakasnitve pred opozorilom
    -DelaysOfToleranceDesc=Ta zaslon omogoča definicijo tolerance zakasnitve preden se opozorilo prikaže na zaslonu v obliki piktograma %s za vsak zakasnjen element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Toleranca zakasnitve (v dnevih) pred opozorilom na ponudbe, ki jih je treba zaključiti
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Toleranca zakasnitve (v dnevih) pred opozorilom na nefakturirane ponudbe
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Toleranca zakasnitve (v dnevih) pred opozorilom na storitve, ki jih je potrebno aktivirati
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Toleranca zakasnitve (v dnevih) pred opozorilom na potečeno storitev
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Toleranca zakasnitve (v dnevih) pred opozorilom na neplačane račune dobavitelju
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Toleranca zakasnitve (v dnevih) pred opozorilom na neplačane račune kupcev
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Toleranca zakasnitve (v dnevih) pred opozorilom na čakajočo uskladitev z banko
    -Delays_MAIN_DELAY_MEMBERS=Toleranca zakasnitve (v dnevih) pred opozorilom na zakasnitev plačila članarine
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Toleranca zakasnitve (v dnevih) pred opozorilom na potrebo po deponiranju čeka
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Ostale postavke na meniju so namenjene upravljanju opcijskih parametrov.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Dogodki v zvezi z nadzorovanjem varnosti
     Audit=Nadzor
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Tukaj lahko omogočite beleženje dnevnika Dolibarr varnostnih dogo
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=Sistemske informacije so raznovrstne tehnične informacije, ki so na voljo samo v bralnem načinu in jih vidi samo administrator.
     SystemAreaForAdminOnly=To področje je na voljo samo administratorju. Nobeno od Dolibarr dovoljenj ne more spremeniti teh omejitev.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Tukaj lahko izberete parametre, ki določajo videz in vtis aplikacije Dolibarr
     AvailableModules=Available app/modules
     ToActivateModule=Za aktivacijo modula, pojdite na področje nastavitev (Domov->Nastavitve->Moduli).
     SessionTimeOut=Potečen čas seje
    -SessionExplanation=Ta številka zagotavlja, da seja nikoli ne bo potekla pred to zakasnitvijo. Vendar pa upravljanje PHP sej ne zagotavlja, da bo seja potekla po tej zakasnitvi: To se pojavi, če je zagnan sistem za čiščenje predpomnilnika sej.<br>Opomba: Brez posebej določenega sistema bo interni PHP proces pobrisal seje približno na vsakih <b>%s/%s</b> dostopov, vendar le, med dostopanjem drugih sej.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Možni prožilci
    -TriggersDesc=Prožilci so datoteke, ki spremenijo obnašanje aplikacije Dolibarr ko so skopirani v mapo <b>htdocs/includes/triggers</b>. Zaznajo nove aktivnosti, Ki so bile aktivirane z Dolibarr dogodki (kreiranje novega podjetja, potrjevanje računa, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Prožilci v tej datoteki so onemogočeni s predpono <b>-NORUN</b> v njihovem imenu.
     TriggerDisabledAsModuleDisabled=Prožilci v tej datoteki so onemogočeni, ker je onemogočen modul <b>%s</b> .
     TriggerAlwaysActive=Prožilci v tej datoteki so aktivni vedno, ne glede na aktiven Dolibarr module.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Nastavitve omejitev/natančnosti
    -LimitsDesc=Tukaj lahko definirate omejitve, natančnost in optimizacije, ki jih uporablja Dolibarr
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Največje število decimalk za ceno enote
     MAIN_MAX_DECIMALS_TOT=Največje število decimalk za končno ceno
     MAIN_MAX_DECIMALS_SHOWN=Največje število decimalk za ceno, ki so vidne na zaslonu (Dodajte <b>...</b> za to številko, če želite videti <b>...</b>, kadar je številka skrajšana za prikaz na zaslonu)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Neto cena enote proizvoda
     TotalPriceAfterRounding=Skupna cena z davkom po zaokrožitvi
     ParameterActiveForNextInputOnly=Parameter bo veljal šele pri naslednjem vnosu.
     NoEventOrNoAuditSetup=Do sedaj še ni bil zabeležen noben varnostno problematičen dogodek. To je lahko normalno, če ni vklopljen nadzor na strani "Nastavitve - Varnost - nadzor".
    -NoEventFoundWithCriteria=Noben varnostni dogodek ne obstaja glede na podane kriterije iskanja.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Glejte lokalne nastavitve za pošiljanje pošte
     BackupDesc=Za izdelavo celotne Dolibarr varnostne kopije (backup), morate:
     BackupDesc2=Shrani vsebino mape z dokumenti (<b>%s</b>), ki vsebuje vse naložene in generirane datoteke (torej vključuje vse odložene datoteke, generirane v koraku 1).
    -BackupDesc3=Shranite vsebino vaše baze podatkov (<b>%s</b>) v izpisno datoteko. Za izvedbo lahko sledite tem napotkom.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Arhivsko mapo morate shraniti na varno mesto.
     BackupDescY=Generirano dump datoteko morate shraniti na varno mesto.
    -BackupPHPWarning=Varnostno kopiranje s to metodo ni zagotovljeno. Raje uporabite prejšnjo
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Za obnovitev Dolibarr varnostne kopije, morate:
    -RestoreDesc2=Arhivsko datoteko mape z dokumenti (na primer zip datoteko) razpakirajte kot drevesno strukturo map in datotek v novo Dolibarr instalacijo ali v trenutno mapo z dokumenti (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Obnovite podatke iz arhivske dump datoteke v bazo podatkov nove Dolibarr instalacije ali v bazo podatkov trenutne instalacije (<b>%s</b>). Pozor, ko je obnova končana, morate za ponovno prijavo uporabiti uporabniško ime/geslo, kakršno je veljalo v trenutku izdelave varnostne kopije. Za obnovitev varnostne kopije baze v trenutno instalacijo, lahko sledite tem napotkom.
     RestoreMySQL=Uvoz MySQL
     ForcedToByAModule= To pravilo je postavljeno v <b>%s</b> z aktivnim modulom
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Ta ukaz morate pognati iz ukazn
     YourPHPDoesNotHaveSSLSupport=SSL funkcije niso na voljo v vašem PHP
     DownloadMoreSkins=Prenos dodatnih preoblek
     SimpleNumRefModelDesc=Prikaže referenčno številko v formatu %syymm-nnnn pri čemer je YY leto, mm mesec in nnnn je zaporedje brez presledkov in brez resetiranja
    -ShowProfIdInAddress=Prikaži profesionalni ID z naslovi na dokumentih
    -ShowVATIntaInAddress=Skrij interno DDV številko pri naslovu na dokumentu
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Delni prevod
    -MAIN_DISABLE_METEO=Onemogočen vremenski prikaz
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Testna prijava na API
    -ProxyDesc=Nekatere Dolibarr funkcije za svoje delovanje potrebujejo internetni dostop. Tu lahko definirate ustrezne parametre. Če je Dolibarr strežnik za Proxy strežnikom, ti parametri povedo, kako naj Dolibarr dostopa skozenj.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Zunanji dostop
     MAIN_PROXY_USE=Uporabi proxy strežnik (drugače je dostop do interneta direkten)
     MAIN_PROXY_HOST=Ime/naslov proxy strežnika
     MAIN_PROXY_PORT=Vrata proxy strežnika
     MAIN_PROXY_USER=Uporabniško ime za uporabo proxy strežnika
     MAIN_PROXY_PASS=Geslo za uporabo proxy strežnika
    -DefineHereComplementaryAttributes=Tukaj doloćite vse atribute, ki niso na voljo kot privzeti, vendar želite da so podprti za %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Koplementarni atributi
     ExtraFieldsLines=Koplementarni atributi (postavke)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Koplementarni atributi (vrstice naročila)
     ExtraFieldsSupplierInvoicesLines=Koplementarni atributi (vrstice računi)
     ExtraFieldsThirdParties=Koplementarni atributi (partner)
    -ExtraFieldsContacts=Koplementarni atributi (kontakt/naslov)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Koplementarni atributi (član)
     ExtraFieldsMemberType=Koplementarni atributi (tip člana)
     ExtraFieldsCustomerInvoices=Koplementarni atributi (računi)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=samo alfanumerični znaki in male črke brez pr
     SendmailOptionNotComplete=Pozor, na nekaterih Linux sistemih mora za pošiljanje pošte z vašega naslova nastavitev vsebovati opcijo -ba (parameter mail.force_extra_parameters v vaši datoteki php.ini). Če nekateri prejemniki nikoli ne dobijo pošte, poskusite popraviti PHP parameter z mail.force_extra_parameters = -ba).
     PathToDocuments=Pot do dokumentov
     PathDirectory=Mapa
    -SendmailOptionMayHurtBuggedMTA=Funkcija za pošiljanje pošte z uporabo metode "PHP mail DIRECT" bo ustvarila poštno sporočilo, ki ga morda nekateri poštni strežniki ne bodo pravilno razčlenili. Posledica tega je, da nekatere pošte ne bodo mogli brati uporabniki, ki gostujejo na takih platformah. To veljalo za nekaj internetnih ponudnikov (npr.: Orange v Franciji). Problem ni v Dolibarr niti v PHP, ampak v sprejemanju poštnega strežnika. Lahko pa v nastavitvah dodate opcijo MAIN_FIX_FOR_BUGGED_MTA kot 1. v setup, da bi se temu izognili brez modifikacije Dolibarr. Vendar pa lahko pride do težav z drugimi strežniki, ki strogo spoštujejo SMTP standard. Druga rešitev (priporočena) je uporaba metode "SMTP socket knjižnice", ki nima teh slabosti.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Omogočiti morate vsaj 1 modul
    -ClassNotFoundIntoPathWarning=Ratzred %s ni najedn na poti PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Da poleti
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Shranjevanje seje kriptirano s Suhosin
     ConditionIsCurrently=Trenutni pogoj je %s
    -YouUseBestDriver=Uporabljate gonilnik %s , ki je najboljši trenutno na voljo
    -YouDoNotUseBestDriver=Uporabljate gonilnik %s, vendar je priporočen gonilnik %s.
    -NbOfProductIsLowerThanNoPb=V bazi je samo %s proizvodov/storitev. Zato ni potrebna posebna optimizacija.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Iskanje optimizacijo
    -YouHaveXProductUseSearchOptim=V baziiomate %s proizvodov. V meni Domov-Nastavitve-Ostalo morate dodati konstanto PRODUCT_DONOTSEARCH_ANYWHERE = 1 , s čimer omejite iskanje na začetek niza, kar omogoča bazi uporabo indeksov in s tem hitrejši odziv.
    -BrowserIsOK=Uporabljate spletni brskalnik %s. Ta brskalnik je ustrezen tako glede varnosti, kot glede zmogljivosti.
    -BrowserIsKO=Uporabljate spletni brskalnik %s. Ta brskalnik je slaba izbira glede varnosti, zmogljivosti in zanesljivosti. Priporočamo uporabo Firefox, Chrome, Opera ali Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=Naložen je XDebug
     XCacheInstalled=Naložen je XCache.
    -AddRefInList=Prikaz referenčnega seznama kupcev/dobaviteljev (izberite seznam ali combobox) in večine hiper povezav. Partnerji bodo prikazani z imenom "CC12345 - SC45678 - The big company coorp", namesto kot "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=%s premenjenih polj
     FillThisOnlyIfRequired=Primer: +2 (uporabite samo, če se pojavijo težave s časovno cono)
     GetBarCode=Pridobi črtno kodo
     ##### Module password generation
     PasswordGenerationStandard=Predlaga geslo, generirano glede na interni Dolibarr algoritem: 8 mest, ki vsebujejo različne številke in male črke.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=Za kreiranje novega uporabnika je zahtevan EMail naslov
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Modul za nastavitve podjetij
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Predloge dokumentov
    -DocumentModelOdt=Ustvari dokumente iz predlog OpenDocuments (.ODT ali .ODS datoteke v programih OpenOffice, KOffice, TextEdit ,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vodni žig na osnutku dokumenta
     JSOnPaimentBill=Aktivacija funkcije za avtomatsko izpolnitev plačilnih vrstic na obrazcu za plačilo
    -CompanyIdProfChecker=Strokovno Id edinstven
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Izvozna povezava na <b>%s</b> format je na voljo na naslednji povezavi: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Izvozna povezava na <b>%s</b> format je na voljo na nasle
     BillsSetup=Nastavitve modula za račune
     BillsNumberingModule=Modul za številčenje računov in dobropisov
     BillsPDFModules=Modeli obrazcev računov
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Dobropis
     CreditNotes=Dobropisi
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Urejanje uporabniških imen za vse člane
     AdherentMailRequired=Za kreiranje novega člana je obvezen E-Mail
     MemberSendInformationByMailByDefault=Kontrolno polje za pošiljanje potrdil članom po pošti (potrditev ali nova naročnina) je privzeto označeno
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Nastavitve LDAP
     LDAPGlobalParameters=Globalni parametri
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test LDAP iskanja
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Test sinhronizacije ni uspel. Preveri, če je povezava s strežnikom pravilno konfigurirana in dovoljuje LDAP posodobitve
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Povezava/avtentifikacija LDAP strežnika uspešna (Strežnik=%s, Vrata=%s, Admin=%s, Geslo=%s)
    -LDAPBindKO=Povezava/avtentifikacija z LDAP strežnikom ni uspela (Strežni=%s, Vrata=%s, Admin=%s, Geslo=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Firstname Name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated acces (for a write access for example)
     PerfDolibarr=Nastavitev zmogljivosti/optimizacija poročila
    -YouMayFindPerfAdviceHere=Na tej strani najdete nekaj kontrol ali nasvetov, povezanih z zmogljivostjo.
    -NotInstalled=Ni nameščeno, zato to ni vzrok počasnosti strežnika
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Aplikativni predpomnilnik
     MemcachedNotAvailable=Ni najden aplikativni predpomnilnik. Zmogljivost lahko izboljšate z namestitvijo predpomnilniškega strežnika Memcached in modula, ki zna uporabljati ta predpomnilniški strežnik.<br>Več informacij najdete tukaj <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Vedite, da veliko gostiteljev spletnih strani ne zagotavlja takega predpomnilniškega strežnika..
     MemcachedModuleAvailableButNotSetup=Najden je predpomnilniški modul za aplikativni predpomnilnik, vendar nastavitev modula ni zaključena.
     MemcachedAvailableAndSetup=Vklopljen je predpomnilniški modul za predpomnilniški strežnik.
     OPCodeCache=OPCode predpomnilnik
    -NoOPCodeCacheFound=Ni najden OPCode predpomnilnik. Morda uporabljate drugačen OPCode predpomnilnik, kot sta XCache ali eAccelerator (v redu), morda pa nimate OPCode predpomnilnika (zelo slabo).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP predpomnilnik za statične vire (css, img, javascript)
     FilesOfTypeCached=Datoteke tipa %s so shranjene v predpomnilniku HTTP strežnika
     FilesOfTypeNotCached=Datoteke tipa %s niso shranjene v predpomnilniku HTTP strežnika
     FilesOfTypeCompressed=Datoteke tipa %s so komprimirane v HTTP strežniku
     FilesOfTypeNotCompressed=Datoteke tipa %s niso komprimirane v HTTP strežniku
     CacheByServer=Predpomnilnik v strežniku
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Predpomnilnik v brskalniku
     CompressionOfResources=Kompresija HTTP odgovorov
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Taka avtomatska zaznava ni možna v trenutnem brskalniku
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Nastavitve modula za proizvode
     ServiceSetup=Storitve modul nastavitev
     ProductServiceSetup=Izdelki in storitve moduli za nastavitev
     NumberOfProductShowInSelect=Največje število proizvodov na kombiniranih seznamih(0=brez omejitev)
    -ViewProductDescInFormAbility=Ponazoritev opisa proizvoda na obrazcu (kot pojavni opis)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Aktivacija opcije za združevanje PDF dokumenta proizvoda in PDF ponudbe azur v zavihku priložene datoteke proizvod/storitev, če je proizvod/storitev v ponudbi
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Če je število proizvodov zelo veliko (> 100 000), lahko povečate hitrost z nastavitvijo konstante PRODUCT_DONOTSEARCH_ANYWHERE na vrednost 1 v Nastavitve->Ostale nastavitve. S tem bo iskanje omejeno na začetek niza.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Privzet tip črtne kode za proizvode
     SetDefaultBarcodeTypeThirdParties=Privzet tip črtne kode za partnerje
     UseUnits=Določi mersko enoto za količino pri urejanju vrstic naročila, ponudbe ali računa
    @@ -1503,7 +1516,7 @@ SendingsSetup=Nastavitev modula za pošiljanje
     SendingsReceiptModel=Obrazci odpremnic
     SendingsNumberingModules=Moduli za številčenje pošiljk
     SendingsAbility=Podpora poslanih dokumentov za dobavo kupcem
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Prosti tekst na pošiljkah
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Modul za številčenje dobavnic
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Napredni urejevalnik
     ActivateFCKeditor=Aktiviranje FCKeditor za:
     FCKeditorForCompany=WYSIWIG kreiranje/urejanje opisa podjetij in opomb
     FCKeditorForProduct=WYSIWIG kreiranje/urejanje opisa proizvodov/storitev in opomb
    -FCKeditorForProductDetails=WYSIWIG kreiranje/urejanje vrstic za podrobnosti za vse entitete (ponudbe, naročila, računi, itd...). <font class="warning">Opozorilo: Uporaba te opcije resnično ni priporočljiva, ker lahko povzroči težave s posebnimi znaki in formatiranjem strani PDF datotek.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG kreiranje/urejanje pošte
     FCKeditorForUserSignature=WYSIWIG kreiranje/urejanje podpisa uporabnika
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Povezava je uspela, vendar baza podatkov ne izgleda kot OSCommerce baza podatkov (Ključ %s ni bil najden v tabeli %s).
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
     OSCommerceTestOk=Povezava s strežnikom '%s' na bazo podatkov '%s' uporabnika '%s' je bila uspešna.
    -OSCommerceTestKo1=Povezava s strežnikom '%s' je bila uspešna, vendar baza podatkov '%s' ni dosegljiva.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Povezava s strežnikom '%s' uporabnika '%s' ni uspela.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=Če uporabljate prodajni modul (privzeti POS modul ali drug zunanji modul), bo vaš Point Of Sale modul morda ignoriral to nastavitev. Večina prodajnih modulov privzeto takoj ustvari račun in zmanjša zalogo ne glede na opcijo, ki je tukaj izbrana. Če torej želite ali ne želite zmanjšati zalogo ob prodaji preko prodajnega modula, preverite tudi nastavitve vašega prodajnega modula.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Izbrisan meni
     Menus=Meniji
    @@ -1548,7 +1561,7 @@ DetailRight=Pogoj za prikaz neavtoriziranih zatemnitev menija
     DetailLangs=Ime jezikovne datoteke za prevod nazivnih kot
     DetailUser=Interni / zunanji / vsi
     Target=Za
    -DetailTarget=Cilj za link (_prazen vrh odpre novo okno)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Nivo (-1:zgornji meni, 0:meni v glavi, >0 meni in podmeni)
     ModifMenu=Sprememba menija
     DeleteMenu=Izbris menijskega vnosa
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=DDV zapade:<br>- ob dobavi/plačilu blaga<br>- ob plačilu
     OptionVatDebitOptionDesc=DDV zapade:<br>- ob dobavi/plačilu blaga<br>- ob računu (zapadlosti) za storitev
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Privzeta zapadlost DDV glede na izbrano opcijo:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Ob dobavi
     OnPayment=Ob plačilu
     OnInvoice=Ob izdaji računa
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Računovodska koda nabave
     AgendaSetup=Nastavitev modula za aktivnosti in dnevni red
     PasswordTogetVCalExport=Ključ za avtorizacijo izvoznega linka
     PastDelayVCalExport=Ne izvažaj dogodekov, starejših od
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Avtomatsko nastavi ta tip aktivnosti v iskalni filter v pogledu dnevnega reda
    -AGENDA_DEFAULT_FILTER_STATUS=Avtomatsko nastavi ta status aktivnosti v iskalni filter v pogledu dnevnega reda
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Kateri zavihek naj se privzeto odpre ko izberete meni Dnevni red
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Nastavitve modula za klicanje s klikom
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Prodajalna
     CashDeskSetup=Nastavitev modula za prodajalno
    -CashDeskThirdPartyForSell=Privzet generični partner, ki se uporabi za prodajo
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Račun, ki se uporabi za prejem gotovinskih plačil
     CashDeskBankAccountForCheque= Račun, ki se uporabi za prejem plačil s čeki
     CashDeskBankAccountForCB= Račun, ki se uporabi za prejem plačil s kreditnimi karticami
    -CashDeskDoNotDecreaseStock=Onemogoči zmanjšanje zaloge pri prodaji preko POS (če označite "ne", se zaloga zmanjša za vsako prodajo iz POS, ne glede na nastavljeno opcijo v modulu Zaloge).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Prisilite ali blokirajte skladišče, uporabljeno za zmanjšanje zalog
    -StockDecreaseForPointOfSaleDisabled=Onemogočeno zmanjševanje zaloge s prodajnega mesta POS
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Zmanjšanje zaloge v POS ni kompatibilno z upravljanjem lotov
    -CashDeskYouDidNotDisableStockDecease=Niste omogočili zmanjšanje zaloge ob prodaji na prodajnem mestu POS. Potrebno je skladišče.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Nastavitev modula za zaznamke
    -BookmarkDesc=Ta modul omogoča upravljanje z zaznamki. Lahko tudi dodate bližnjice na katerokoli Dolibarr stran ali zunanjo web stran na vašem levem meniju.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Največje število zaznamkov za prikaz v levem meniju
     ##### WebServices #####
     WebServicesSetup=Nastavitev modula za spletne storitve
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Nastavitev modula za več podjetij
     ##### Suppliers #####
     SuppliersSetup=Nastavitev modula za dobavitelje
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Modeli številčenja računov dobaviteljev
     IfSetToYesDontForgetPermission=Če je nastavljeno na "da", ne pozabite zagotoviti dovoljenj skupinam ali uporabnikom za drugo odobritev
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Nastavitve modula za projekte
     ProjectsModelModule=Vzorec dokumenta poročila o projektih
     TasksNumberingModules=Moduli za številčenje nalog
     TaskModelModule=Modeli obrazcev poročil o nalogah
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Opcijo za EMail obvestila
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=Seznam fiksnih obvestil
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Prag
     BackupDumpWizard=Čarovnik za ustvarjanje datoteke z varnostnimi kopijami podatkovnih baz
     SomethingMakeInstallFromWebNotPossible=Instalacija eksternega modula s spletnega vmesnika ni možna zaradi naslednjega razloga:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Instalacijo zunanjega modula iz aplika
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Osvetli vrstice tabele, preko katerih je šla miška
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Barva ozadja za sode vrstice tabele
     MinimumNoticePeriod=Minimalni rok za obvestilo (Vaš zahtevek za odsotnost mora biti podan pred tem rokom)
     NbAddedAutomatically=Število dodanih dni pri števcu uporabnikov (avtomatsko) vsak mesec
     EnterAnyCode=To polje vsebuje referenco identifikacijske vrstice. Vnesite poljubno vrednost, vendar brez posebnih znakov.
    -UnicodeCurrency=Med oklepaja vnesite seznam bitnih števil, ki določajo valutni simbol. Na primer: za $, vnesite [36] - za brazilski real R$ [82,36] - za €, vnesite [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Položaj vrstice v kombiniranih seznamih
     SellTaxRate=Stopnja prodajnega davka
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=Če prevoznik ponuja povezavo ali spletno stran za kontrolo statusa vaše pošiljke, lahko vstopite tukaj. Lahko uporabite kodo {TRACKID} v URL parametrih, tako da jo bo sistem nadomestil s sledilno številko, ki jo uporabnik vnese v kartico pošiljke.
    -OpportunityPercent=Ko kreirate priložnost, določite oceno vrednosti projekta/možnosti. Glede na status priložnosti lahko to vrednost pomnožite s to stopnjo za oceno globalne vrednosti vaših priložnosti. Vrednost je procent (med 0 in 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=Ta podatek v predlogi je namenjen kateremu elementu
     TypeOfTemplate=Vrsta predloge
    -TemplateIsVisibleByOwnerOnly=Predloga je vidna samo lastniku
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=Fiksiranje časovne cone
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/sl_SI/companies.lang b/htdocs/langs/sl_SI/companies.lang
    index a8670fb6d16..5cab879e6fa 100644
    --- a/htdocs/langs/sl_SI/companies.lang
    +++ b/htdocs/langs/sl_SI/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Izberite partnerja
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Izbrišite kontakt
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Nov partner
    -MenuNewCustomer=Nov kupec
    -MenuNewProspect=Nova možna stranka
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Nov posameznik
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Ustvari partnerja
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Kontakt pri partnerju
     Company=Podjetje
     CompanyName=Ime podjetja
     AliasNames=Drugo ime (komercialno, blagovna znamka, ...)
    -AliasNameShort=Drugo ime
    +AliasNameShort=Alias Name
     Companies=Podjetja
    -CountryIsInEEC=Država je članica Evropske Unije
    -ThirdPartyName=Ime partnerja
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Partnerji
    -ThirdParties=Partnerji
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Možne stranke
     ThirdPartyProspectsStats=Možne stranke
     ThirdPartyCustomers=Kupci
     ThirdPartyCustomersStats=Kupci
     ThirdPartyCustomersWithIdProf12=Kupci z %s ali %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Vrsta partnerja
    +ThirdPartyType=Type of company
     Individual=Posameznik
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Lastniško podjetje
     Subsidiaries=Podružnice
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Poštna številka
     Town=Mesto
     Web=Spletna stran
     Poste= Položaj
    -DefaultLang=Privzet jezik
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Ponudbe
    @@ -258,7 +258,7 @@ ProfId1DZ==
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Ime zavezanca veljavno
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Temu kupcu pripada popust v višini <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Ta kupec nima odobrenega relativnega popusta
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Ta kupec ima dobropis ali depozit v višini <b>%s %s</b>
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Brez popusta
    -Supplier=Dobavitelj
    +Supplier=Vendor
     AddContact=Ustvari kntakt
     AddContactAddress=Ustvari naslov
     EditContact=Uredi osebo / naslov
    @@ -303,22 +303,22 @@ AddThirdParty=Ustvari partnerja
     DeleteACompany=Izbriši podjetje
     PersonalInformations=Osebni podatki
     AccountancyCode=Računovodstvo račun
    -CustomerCode=Koda kupca
    -SupplierCode=Vendor code
    -CustomerCodeShort=Koda kupca
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Edinstvena koda kupca
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Obvezno, če je partner kupec ali možna stranka
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Kontrola veljavnosti z modulom
    -ThisIsModuleRules=To so pravila za ta modul
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Možna stranka v kontakt
     CompanyDeleted=Podjetje "%s" izbrisano iz baze.
     ListOfContacts=Seznam kontaktov
    -ListOfContactsAddresses=Seznam kontaktov/naslovov
    -ListOfThirdParties=Seznam partnerjev
    -ShowCompany=Show third party
    +ListOfContactsAddresses=Seznam kontaktov
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Pokaži kontakt
     ContactsAllShort=Vsi (brez filtra)
     ContactType=Vrsta kontakta
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Ta kontakt ni pravi za komercialne ponudbe
     NoContactForAnyContract=Ta kontakt ni pravi za pogodbe
     NoContactForAnyInvoice=Ta kontakt ni pravi za račune
     NewContact=Nov kontakt
    -NewContactAddress=Nov kontakt/naslov
    +NewContactAddress=New Contact/Address
     MyContacts=Moji kontakti
     Capital=Kapital
     CapitalOf=Kapital %s
     EditCompany=Uredi podjetje
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Kontrola
    -VATIntraCheckDesc=Povezava <b>%s</b> omogoča poizvedbo v evropskem sistemu za kontrolo DDV številk. Za delovanje te storitve mora imeti strežnik zunanji internetni dostop.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Kontrola davčne številke na strani Evropske komisije
    -VATIntraManualCheck=Preverite lahko tudi ročno na Evropski internetni strani <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Kontrola ni možna. Država članica ne zagotavlja storitve poizvedbe (%s).
    -NorProspectNorCustomer=Niti možna stranka, niti kupec
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Osebje
     ProspectLevelShort=Potencial
     ProspectLevel=Potencial možne stranke
    @@ -387,12 +387,12 @@ ExportCardToFormat=Izvoz podatkov v formatu
     ContactNotLinkedToCompany=Kontakt ni povezan z nobenim partnerjem
     DolibarrLogin=Uporabniško ime za Dolibarr
     NoDolibarrAccess=Nima dostopa v Dolibarr
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Kontakti in lastništvo
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Cenovni nivo
     DeliveryAddress=Naslov za dostavo
     AddAddress=Dodaj naslov
    @@ -402,16 +402,16 @@ DeleteFile=Izbriši datoteko
     ConfirmDeleteFile=Ali zares želite izbrisati to datoteko?
     AllocateCommercial=Assigned to sales representative
     Organization=Organizacija
    -FiscalYearInformation=Informacije o fiskalnem letu
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Začetni mesec fiskalnega leta
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Seznam možnih strank
    -ListCustomersShort=Seznam kupcev
    -ThirdPartiesArea=Področje partnerjev in kontaktov
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Skupno število partnerjev
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Odprt
     ActivityCeased=Neaktiven
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Trenutni neplačan račun
     OutstandingBill=Max. za neplačan račun
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Koda kupca / dobavitelja po želji. Lahko jo kadarkoli spremenite.
     ManagingDirectors=Ime direktorja(ev) (CEO, direktor, predsednik...)
     MergeOriginThirdparty=Podvojen partner (partner, ki ga želite zbrisati)
     MergeThirdparties=Združi partnerje
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/sl_SI/errors.lang b/htdocs/langs/sl_SI/errors.lang
    index 106c288072c..c2ce303e2ee 100644
    --- a/htdocs/langs/sl_SI/errors.lang
    +++ b/htdocs/langs/sl_SI/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Vrednost '%s &quot;je napačen zapis datuma
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Napaka pri pisanju v mapo %s
     ErrorFoundBadEmailInFile=Napačna email sintaksa v vrstici %s v datoteki (naprimer vrstica %s z emailom=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Nekatera zahtevana polja niso izpolnjena.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Kreiranje mape ni uspelo. Preverite, če ima uporabnik internetne strani dovoljenje za pisanje v mapo z Dolibarr dokumenti. Če je parameter <b>safe_mode</b> v tem PHP omogočen, preverite če je lastnik Dolibarr php datotek uporabnik web strežnika (ali skupina).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Polje <b>%s</b> ne sme vsebovati posebnih znakov.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Ni aktiviran računovodski modul
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP združevanje ni popolno.
     ErrorLDAPMakeManualTest=Datoteka .ldif je bila ustvarjena v mapi %s. Poskusite jo naložiti ročno preko ukazne vrstice, da bi dobili več podatkov o napaki.
    -ErrorCantSaveADoneUserWithZeroPercentage=Ni možno shraniti aktivnosti "statut not started" če je tudi polje "done by" izpolnjeno.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Referenca, uporabljena za kreiranje, že obstaja.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript ne sme biti izklopljen, če želite da ta funkcija deluje. Javascript vklopite/izklopite v meniju Domov->Nastavitve->Prikaz.
     ErrorPasswordsMustMatch=Obe vneseni gesli se morata ujemati
    -ErrorContactEMail=Prišlo je do tehnične napake. Prosimo, obrnite se na administratorja na naslednji Email <b>%s</b> in mu sporočite kodo napake <b>%s</b>, Še bolje pa je, če priložite kopijo strani z napako.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Napačna vrednost v polju številka <b>%s</b> (vrednost '<b>%s</b>' ne ustreza pravilu <b>%s</b>)
     ErrorFieldValueNotIn=Napačna vrednost v polju številka<b>%s</b> (vrednost '<b>%s</b>' ni vrednost, ki je na voljo v polju <b>%s</b> tabele <b>%s</b>)
     ErrorFieldRefNotIn=Napačna vrednost za <b>%s</b> številka polja (Vrednost <b>'%s</b> &quot;ni <b>%s</b> obstoječe ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Antivirusni program ni mogel potrditi datoteke (da
     ErrorSpecialCharNotAllowedForField=Posebni znaki niso dovoljeni v polju "%s"
     ErrorNumRefModel=V bazi podatkov obstaja referenca (%s), ki ni kompatibilna s tem pravilom za številčenje. Odstranite zapis ali preimenujte referenco za aktivacijo tega modula.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Napaka na maski
     ErrorBadMaskFailedToLocatePosOfSequence=Napaka, maska je brez zaporedne številke
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Napaka, napačna resetirana vrednost
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Napaka. Izberite vsaj en vnos.
    -ErrorDeleteNotPossibleLineIsConsolidated=Brisanje ni možno, ker je zapis vezan na posredovano bančno transakcijo
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s je dodeljen v drugo tretjo
     ErrorFailedToSendPassword=Ni bilo mogoče poslati gesla
     ErrorFailedToLoadRSSFile=Ne Knjiga. Poskusite dodati stalno MAIN_SIMPLEXMLLOAD_DEBUG sporočila o napakah, če ne zagotavlja dovolj informacij.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Uporabnik s prijavo <b>%s</b> ni bilo mogoče najti.
     ErrorLoginHasNoEmail=Ta uporabnik nima e-poštni naslov. Obdelati prekinjena.
     ErrorBadValueForCode=Slaba vrednost za varnostno kodo. Poskusite znova z novo vrednost ...
     ErrorBothFieldCantBeNegative=Polja %s in %s ne more biti tako negativna
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Uporabniški račun <b>%s</b> uporablja za izvedbo spletni strežnik nima dovoljenja za to
     ErrorNoActivatedBarcode=Noben tip črtne kode ni aktiviran
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Zaznamek s tem imenom ali tem ciljem (URL) že obst
     WarningPassIsEmpty=Pozor, geslo za bazo podatkov je prazno. To lahko pomeni varnostno luknjo. Zato morate dodati geslo v vašo bazo podatkov in spremeniti datoteko conf.php.
     WarningConfFileMustBeReadOnly=Pozor, vašo konfiguracijsko datoteko (<b>htdocs/conf/conf.php</b>) lahko prepiše web strežnik. To je resna varnostna luknja. Spremenite dovoljenja datoteke, da bo za uporabnika web strežnika možno samo branje. Če uporabljate Windows in FAT format diska, morate vedeti, da ta datotečni sistem ne omogoča dodajanja dovoljenj datotekam, zato ne more biti povsem varen.
     WarningsOnXLines=Opozorilo na <b>%s</b> vrstice izvorne kode
    -WarningNoDocumentModelActivated=Noben model za ustvarjanje dokumentov ni aktiviran. Dokler ne preverite nastavitve modula, bo uporabljen privzet model.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=Vsi varnostni opozorila (vidna le uporabniki admin) ostane aktiven, dokler je prisotna ranljivost (ali stalno MAIN_REMOVE_INSTALL_WARNING se doda v Setup-> druge nastavitve).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/sl_SI/interventions.lang b/htdocs/langs/sl_SI/interventions.lang
    index 4ba92fc20da..b84f1fbf63d 100644
    --- a/htdocs/langs/sl_SI/interventions.lang
    +++ b/htdocs/langs/sl_SI/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervencije
     InterventionCard=Kartica intervencije
     NewIntervention=Nova intervencija
     AddIntervention=Dodaj intervencijo
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Seznam intervencij
     ActionsOnFicheInter=Aktivnost na intervenciji
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/sl_SI/main.lang b/htdocs/langs/sl_SI/main.lang
    index 2096075a64e..cc17ea4654f 100644
    --- a/htdocs/langs/sl_SI/main.lang
    +++ b/htdocs/langs/sl_SI/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Napaka pri pošiljanju E-maila (pošiljatelj=%s, prejemnik
     ErrorFileNotUploaded=Datoteka ni bila naložena. Preverite, če velikost ne presega omejitve, če je na disku dovolj prostora ali če datoteka z istim imenom že obstaja v tej mapi.
     ErrorInternalErrorDetected=Zaznana napaka
     ErrorWrongHostParameter=Napačen parameter gostitelja
    -ErrorYourCountryIsNotDefined=Vaša država ni definirana. Pojdite na Domov-Nastavitve-Urejanje in ponovno pošljite obrazec.
    -ErrorRecordIsUsedByChild=Brisanje zapisa ni uspelo. Ta zapis uporablja vsaj en odvisni zapis.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Napačna vrednost
     ErrorWrongValueForParameterX=Napačna vrednost parametra %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Storitev trenutno ni na voljo. Ponovno poskusite kasneje.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Podvojena vrednost v enoličnem polju
    -ErrorSomeErrorWereFoundRollbackIsDone=Najdenih je bilo nekaj napak. Spremembe so razveljavljene.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> ni definiran v Dolibarr konfiguracijski datoteki <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Napaka pri iskanju uporabnika <b>%s</b> v Dolibarr bazi podatkov.
     ErrorNoVATRateDefinedForSellerCountry=Napaka, za državo '%s' niso definirane davčna stopnje.
     ErrorNoSocialContributionForSellerCountry=Napaka, za državo '%s' niso definirane stopnje socialnega/fiskalnega davka.
     ErrorFailedToSaveFile=Napaka, datoteka ni bila shranjena.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Nimate dovoljenja za to.
     SetDate=Nastavi datum
     SelectDate=Izberi datum
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Datoteka je bila uspešno naložena
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Izbrana je bila datoteka za prilogo, vendar še ni dodana. Kliknite na "Pripni datoteko".
    -NbOfEntries=Število vpisov
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Preberite pomoč
     RecordSaved=Zapis je shranjen
    @@ -94,7 +94,7 @@ Undefined=Nedefinirano
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=Glejte zgoraj
    -HomeArea=Domače področje
    +HomeArea=Domov
     LastConnexion=Latest connection
     PreviousConnexion=Prejšnja prijava
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Zaključen
     Closed2=Zaključen
     NotClosed=Not closed
     Enabled=Omogočen
    +Enable=Omogočeno
     Deprecated=Nasprotovanje
     Disable=Onemogoči
     Disabled=Onemogočen
    @@ -153,7 +154,7 @@ Update=Posodobi
     Close=Zapri
     CloseBox=Remove widget from your dashboard
     Confirm=Potrdi
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Briši
     Remove=Odstrani
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Kopiraj
     Paste=Prilepi
     Default=Privzeto
     DefaultValue=Privzeta vrednost
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Cena
     PriceCurrency=Price (currency)
     UnitPrice=Cena enote
    @@ -347,7 +348,7 @@ AmountTTCShort=Znesek (z DDV)
     AmountHT=Znesek (neto)
     AmountTTC=Znesek (z DDV)
     AmountVAT=Znesek DDV
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Ni na voljo
     ActionRunningNotStarted=Nezačete
     ActionRunningShort=In progress
     ActionDoneShort=Končane
    -ActionUncomplete=Nepopolno
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Ustvari
     Duration=Trajanje
     TotalDuration=Skupno trajanje
     Summary=Povzetek
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Na voljo
     NotYetAvailable=Še ni na voljo
    @@ -468,7 +469,7 @@ and=in
     or=ali
     Other=ostalo
     Others=Ostali
    -OtherInformations=Ostale informacije
    +OtherInformations=Other information
     Quantity=Količina
     Qty=Kol.
     ChangedBy=Spremenil
    @@ -506,7 +507,7 @@ None=Nič
     NoneF=Nič
     NoneOrSeveral=None or several
     Late=Prekoračeno
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Slika
     Photos=Slike
    @@ -530,18 +531,6 @@ September=September
     October=Oktober
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=Maj
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Okt
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=januar
     Month02=februar
     Month03=marec
    @@ -646,6 +635,8 @@ SendMail=Pošlji e-pošto
     EMail=E-pošta
     NoEMail=Ni email-a
     Email=E-pošta
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Ni mobilnega telefona
     Owner=Lastnik
     FollowingConstantsWillBeSubstituted=Naslednje konstante bodo zamenjane z ustrezno vrednostjo.
    @@ -677,7 +668,7 @@ NeverReceived=Nikoli prejeto
     Canceled=Preklicano
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Barva
     Documents=Povezane datoteke
     Documents2=Dokumenti
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Prikaži komande s skritim geslom
     UnHidePassword=Prikaži resnične komande z vidnim geslom
     Root=Koren
    -Informations=Informacije
    +Informations=Informacija
     Page=Stran
     Notes=Opombe
     AddNewLine=Dodaj novo vrstico
    @@ -716,15 +707,15 @@ Merge=Spoji
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Prikaži stran za izpis področja z osnovno vsebino
     MenuManager=Upravljalnik menija
    -WarningYouAreInMaintenanceMode=Pozor, ste v vzdrževalnem načinu, zato je trenutno samo prijavljenemu <b>%s</b> dovoljena uporaba aplikacije.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Sistemska napaka
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Kreditna kartica
     ValidatePayment=Potrdi plačilo
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Polja z <b>%s</b> so obvezna
    -FieldsWithIsForPublic=Polja z <b>%s</b> so prikazana na javnem seznamu članov. Če tega ne želite, označite okvir "public".
    -AccordingToGeoIPDatabase=(V skladu s  GeoIP pretvorbo)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Vrstica
     NotSupported=Ni podprto
     RequiredField=Zahtevano polje
    @@ -732,6 +723,8 @@ Result=Rezultat
     ToTest=Test
     ValidateBefore=Pred uporabo te funkcije mora biti kartica potrjena
     Visibility=Vidnost
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privatno
     Hidden=Skrito
     Resources=Viri
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Povezava do naročila
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Ustvarite osnutek
     SetToDraft=Nazaj na osnutek
     ClickToEdit=Kliknite za urejanje
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Po dnevih
     BySalesRepresentative=Z prodajni predstavnik
     LinkedToSpecificUsers=Povezano z določenim kontaktom uporabnika
     NoResults=Ni rezultata
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=Sistemska orodja
     ModulesSystemTools=Orodja za module
     Test=Test
     Element=Element
     NoPhotoYet=Slik še ni na voljo
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Odbiten
     from=od
     toward=proti
    @@ -802,7 +797,7 @@ PrintFile=Natisni datoteko %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Prikaži intervencijo
     ShowContract=Prikaži pogodbo
    -GoIntoSetupToChangeLogo=Pojdite na Domov - Nastavitve - Podjetje za spremembo logotipa oz. na Domov - Nastavitve - Prikaz za njegovo skritje.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Zavrni
     Denied=Zavrnjen
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=S spoštovanjem
     DeleteLine=Izbriši vrstico
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Klasificiraj kot fakturirano
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Koledar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Dogodki
    -EMailTemplates=Predloge za elektronsko pošto
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projekt
     Projects=Projekti
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Dovoljenja
     LineNb=Line no.
     IncotermLabel=Mednarodni Poslovni Izrazi
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Ponedeljek
     Tuesday=Torek
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Intervencije
     SearchIntoContracts=Pogodbe
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Stroškovna poročila
    -SearchIntoLeaves=Dopusti
    +SearchIntoLeaves=Leave
     CommentLink=Komentarji
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Projekti v skupni rabi
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Se nanaša na
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/sl_SI/other.lang b/htdocs/langs/sl_SI/other.lang
    index 10def3b52ed..8c568fd362c 100644
    --- a/htdocs/langs/sl_SI/other.lang
    +++ b/htdocs/langs/sl_SI/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Varnostna koda
     NumberingShort=N°
     Tools=Orodja
     TMenuTools=Orodja
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Rojstni dan
     BirthdayDate=Birthday date
     DateToBirth=Datum rojstva
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Sporočilo na strani za potrditev plačila
     MessageKO=Sporočilo na strani za preklic plačila
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Potrjena intervencija
    -Notify_FICHINTER_SENTBYMAIL=Intervencija poslana po EMailu
     Notify_ORDER_VALIDATE=Potrjeno naročilo kupca
     Notify_ORDER_SENTBYMAIL=Naročilo po e-pošti
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Naročilo pri dobavitelju poslano po pošti
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Naročilo pri dobavitelju je shranjeno
     Notify_ORDER_SUPPLIER_APPROVE=Odobreno naročilo pri dobavitelju
     Notify_ORDER_SUPPLIER_REFUSE=Zavrnjeno naročilo pri dobavitelju
     Notify_PROPAL_VALIDATE=Potrjena ponudba kupcu
    -Notify_PROPAL_CLOSE_SIGNED=Ponudba kupcu zaključena s podpisom
    -Notify_PROPAL_CLOSE_REFUSED=Ponudba kupcu zaključena z zavrnitvijo
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Komercialna ponudba poslana po e-pošti
     Notify_WITHDRAW_TRANSMIT=Nakazilo prenosa
     Notify_WITHDRAW_CREDIT=Nakazilo kredita
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Ustvarjen partner
     Notify_COMPANY_SENTBYMAIL=Pošta poslana s kartice partnerja
     Notify_BILL_VALIDATE=Potrjen račun
     Notify_BILL_UNVALIDATE=Račun za kupca ni potrjen
    -Notify_BILL_PAYED=Plačan račun kupca
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Preklican račun kupca
     Notify_BILL_SENTBYMAIL=Račun poslan po e-pošti
     Notify_BILL_SUPPLIER_VALIDATE=Potrjen račun dobavitelja
    -Notify_BILL_SUPPLIER_PAYED=Plačan račun dobavitelja
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Račun dobavitelja poslan po pošti
     Notify_BILL_SUPPLIER_CANCELED=Preklican račun dobavitelja
     Notify_CONTRACT_VALIDATE=Potrjena pogodba
     Notify_FICHEINTER_VALIDATE=Potrjena intervencija
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervencija poslana po EMailu
     Notify_SHIPPING_VALIDATE=Potrjena odprema
     Notify_SHIPPING_SENTBYMAIL=Pošiljka poslana po pošti
     Notify_MEMBER_VALIDATE=Potrjeno članstvo
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Ustvarjanje projekta
     Notify_TASK_CREATE=Ustvarjena naloga
     Notify_TASK_MODIFY=Spremenjena naloga
     Notify_TASK_DELETE=Izbrisana naloga
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Glejte nastavitev modula %s
     NbOfAttachedFiles=Število pripetih datotek/dokumentov
     TotalSizeOfAttachedFiles=Skupna velikost pripetih datotek/dokumentov
     MaxSize=Največja velikost
     AttachANewFile=Pripni novo datoteko/dokument
     LinkedObject=Povezani objekti
    -NbOfActiveNotifications=Število obvestil (število emailov prejemnika)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> je informacija, odvisna od države partnerja.<br>Na primer za državo <b>%s</b>, je koda <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Potrjena intervencija %s
     EMailTextInvoiceValidated=Potrjen račun %s
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Potrjena ponudba %s
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Potrjeno naročilo %s
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Naročilo %s odobril %s
     EMailTextOrderRefused=Zavrnjeno naročilo %s
     EMailTextOrderRefusedBy=Naročilo %s zavrnil %s
     EMailTextExpeditionValidated=Odprema %s je bila potrjena
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Nabor podatkov za uvoz
     DolibarrNotification=Avtomatsko obvestilo
     ResizeDesc=Vnesite novo širino <b>ALI</b> novo višino. Razmerje se bo med spreminjanjem velikosti ohranilo...
    @@ -204,7 +212,7 @@ NewLength=Nova širina
     NewHeight=Nova višina
     NewSizeAfterCropping=Nova velikost po obrezovanju
     DefineNewAreaToPick=Določitev novega območja na sliki za pobiranje (levi klik na sliko in vleka kurzorja do nasprotnega vogala)
    -CurrentInformationOnImage=To orodje je namenjeno spreminjanju velikosti ali obrezovanju slike. To je informacija o trenutni sliki
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Obdelovalnik slik
     YouReceiveMailBecauseOfNotification=To sporočilo ste prejeli, ker je bil vaš email dodan na seznam interesentov za določene dogodke v program %s od %s.
     YouReceiveMailBecauseOfNotification2=Ta dogodek je naslednji:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Področje izvoza
    diff --git a/htdocs/langs/sl_SI/projects.lang b/htdocs/langs/sl_SI/projects.lang
    index ae4e29c5d25..6ffd6e33875 100644
    --- a/htdocs/langs/sl_SI/projects.lang
    +++ b/htdocs/langs/sl_SI/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Prikaži projekt
     ShowTask=Prikaži naloge
     SetProject=Nastavi projekt
     NoProject=Nimate definiranega ali lastnega projekta
    -NbOfProjects=Število projektov
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Porabljen čas
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Seznam komercialnih ponudb, povezanih s projektom
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Seznam pogodb, povezanih s projektom
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Seznam intervencij, povezanih s projektom
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Seznam aktivnosti, povezanih s projektom
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Sodelavec
     SelectElement=Izberi element
     AddElement=Povezava do elementa
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planirana delovna obremenitev
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Ponudba
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/sq_AL/admin.lang b/htdocs/langs/sq_AL/admin.lang
    index 8ab02d9028d..224091ca45b 100644
    --- a/htdocs/langs/sq_AL/admin.lang
    +++ b/htdocs/langs/sq_AL/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=Unknown
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=spastro lidhjet
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Sesioni juaj
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Përdorues i jashtëm
     InternalUsers=Përdorues të brendshëm
     ExternalUsers=Përdorues të jashtëm
     GUISetup=Shfaq
    -SetupArea=Setup area
    +SetupArea=Konfiguro
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=E padisponueshme ku Ajax është i çaktivizuar
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Tabelë
     Fields=Fushat
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Aktiv
     SetupShort=Konfiguro
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parametër %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Brezi orar (pёrdorues)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=I lire
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Bli / Shkarko
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Konfigurimi i email
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Pёrdor TLS(SSL) enkripto
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Konfigurimi i modulit
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Versioni aktual i Dolibarr
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Versioni i fundit stabёl
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Gjatёsia minimale
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Fjalëkalimi
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barkod
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=Sinkronizimi LDAP
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=Integrimi PostNuke
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Dhurimet
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=Editor WYSIWYG
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=Klient FTP
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Krijo Linja
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Lexo CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=Shteti/Provinca
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Serveri
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Adresa
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/sq_AL/companies.lang b/htdocs/langs/sq_AL/companies.lang
    index 943f8dc2a0f..175f44342f2 100644
    --- a/htdocs/langs/sq_AL/companies.lang
    +++ b/htdocs/langs/sq_AL/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Fshij një kontakt/adresë
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=Klient i ri
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Kompani
     CompanyName=Emri i kompanisë
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Kompanitë
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Klientёt
     ThirdPartyCustomersStats=Klientёt
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Kodi postar
     Town=Qyteti
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Fshij kompani
     PersonalInformations=Të dhëna personale
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Shto adresë
    @@ -402,16 +402,16 @@ DeleteFile=Fshi skedar
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Hapur
     ActivityCeased=Mbyllur
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/sq_AL/errors.lang b/htdocs/langs/sq_AL/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/sq_AL/errors.lang
    +++ b/htdocs/langs/sq_AL/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/sq_AL/interventions.lang b/htdocs/langs/sq_AL/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/sq_AL/interventions.lang
    +++ b/htdocs/langs/sq_AL/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/sq_AL/main.lang b/htdocs/langs/sq_AL/main.lang
    index d7796471922..9086d38afd4 100644
    --- a/htdocs/langs/sq_AL/main.lang
    +++ b/htdocs/langs/sq_AL/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Mbyllur
     Closed2=Mbyllur
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Aktivizo
     Deprecated=Deprecated
     Disable=Çaktivizo
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Mbyll
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Fshi
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Tjetër
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Anulluar
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Lejet
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/sq_AL/other.lang b/htdocs/langs/sq_AL/other.lang
    index e8480a82dcb..b4cf6248d99 100644
    --- a/htdocs/langs/sq_AL/other.lang
    +++ b/htdocs/langs/sq_AL/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/sq_AL/projects.lang b/htdocs/langs/sq_AL/projects.lang
    index 9eded2361e9..35f8d333985 100644
    --- a/htdocs/langs/sq_AL/projects.lang
    +++ b/htdocs/langs/sq_AL/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/sr_RS/admin.lang b/htdocs/langs/sr_RS/admin.lang
    index 60c96840a90..2286b838d91 100644
    --- a/htdocs/langs/sr_RS/admin.lang
    +++ b/htdocs/langs/sr_RS/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Razvoj
     VersionUnknown=Nepoznato
     VersionRecommanded=Preporučeno
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Rukovalac čuvanja sesije
     SessionSavePath=Lokalizacija smeštanja sesije
     PurgeSessions=Čišćenje sesije
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Zaključaj nove konekcije
    -ConfirmLockNewSessions=Da li stvarno želiš da ograničiš sva nove Dolibarr povezivanja na sebe. Samo korisnici sa <b>%s</b>  će moći da se povežu nakon toga.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Ukloni 
     YourSession=Vaša sesija
    -Sessions=Korisnička sesija
    +Sessions=Users sessions
     WebUserGroup=Web server korisnik/grupa
    -NoSessionFound=Vaš PHP ne dozvoljava izlistavanje aktivnih sesija. Direktorijum korišćen za čuvanje sesija (<b>%s</b>) je možda zaštićen (Npr., po dozvolama OS-a ili po PHP direktivi open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Podešavanja
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Novo
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Rok za obaveštenje
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=Ukoliko prevod za ovaj jezik nije kompletan ili ukoliko pronađete greške, možete ga ispraviti izmenom fajlova u folderu <b>langs/%s</b> i da prosledite promene na www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Ukoliko prevod ovog jezika nije kompletan ili ukoliko pronađete greške, možete ih ispraviti editom fajlova u folderu <b>langs/%s</b> i proslediti izmene na dolibarr.org/forum ili na github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Sakrijte link za online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=Lista foldera sa templejtima u OpenDocument formatu.<br><br>Staviti apsolutnu putanju foldera.<br>Svaki folder u listi mora biti na novoj liniji.<br>Da biste dodali folder GED modulu, ubacite ga ovde <b>DOL_DATA_ROOT/ecm/ime_vaseg_foldera</b>.<br><br>Fajlovi u tim folderima moraju imati ekstenziju <b>.odt</b> ili <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Modul <b>%s</b> mora biti aktiviran da biste koristili ovu funkcionalnost.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Polje
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Korisnici & Grupe
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Uređivanje markera
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Planirane operacije
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Poziv WebServices (SOAP client)
    -Module2660Desc=Aktiviraj Dolibarr webservice klijent (može se koristiti da bi se podaci/zahtevi slali ka eksternim serverima. Za sada su podržane samo porudžbine dobavljača)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Maloprodaje
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Anketa ili Glasanje
    -Module55000Desc=Modul za online ankete ili glasanja (kao Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Dodavanje funkcionalnosti za upravljanje Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resursi
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Obriši zahteve za odsustvo
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=Država/Provincija
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max dužina za liste
    -DefaultMaxSizeShortList=Default max dužina kratkih lista (npr u kartici klijenta)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Prag tolerancije (u danima) pre pojavljivanja upozorenja za odobrenje troškova
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Sačuvaj sadržaj foldera (<b>%s</b>) koji sadrži sve uploadovane i generisane fajlove (tako da sadrži sve dump fajlove generisane u koraku 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Ne predlaži generisanje lozinki. Lozinke moraju biti unete ručno.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Povrati lozinku po konfiguraciji koju ste definisali.
     SetupPerso=Prema Vašoj konfiguraciji
     PasswordPatternDesc=Opis patterna lozinke
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=Podešavanja HRM modula
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Definiši jedinicu merenja za Količinu prilikom generisanja porudžbina, ponuda ili faktura
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Podrška za listove isporuke za isporuke klijentima.
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Automatski podesi ovu default vrednost za tip događaja prilikom kreiranja događaja
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=Ovaj modul omogućava klik na brojeve telefona. Klik na ovu ikonu će izvršiti poziv sa Vašeg telefona na odgovarajući broj. Ova funkcionalnost se može koristiti ukoliko se Dolibarr poveže sa call center sistemom koji može pozvati telefonski broj sa SIP sistema.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Samo koristi link "tel:" na telefonskim brojevima
    -ClickToDialUseTelLinkDesc=Koristi ovu metodu ako korisnici imaju softphone ili softverski interfejs instaliran na istom računaru gde je i browser - biće pozvana kada kliknete na link u browseru koji počinje sa "tel:". Ukoliko Vam je potrebno celokupno server rešenje (bez instalacije softvera), ovde ostavie "Ne" i popunite sledeće polje.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Boja kojom će linija biti označena kada se mišem pređe preko nje (ostavite prazno kako linija ne bi bila označena)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Boja linkova
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=Ukoliko transporter nudi web stranu za konsultovanje statusa isporuke, možete je uneti ovde. Možete koristiti reč {TRACKID} u parametrima URL-a kako bi ga sistem zamenio vrednošću broja isporuke koji će korisnik uneti u karticu isporuke.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Primer poruke koju možete koristiti da biste najavili novu verziju (možete je koristiti na Vašim sajtovima)
     TitleExampleForMaintenanceRelease=Primer poruke koju možete koristiti da biste najavili novu ispravku (možete je koristiti na Vašim sajtovima)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=Kada je uključena opcija "Više nivoa cene za proizvod/uslugu", možete definisati različite cene za svaki proizvod (po jednu za svaki nivo cene). Da biste uštedeli vreme, ovde možete uneti pravilo za automatsko računanje cene na svim nivoima na osnovu cene koju unesete za prvi nivo. Ova strana ima za cilj da uštedi Vaše vreme i može biti korisna samo ukoliko su cene za svaki od nivoa u funkciji s prvim nivoom cene. U većini slučajeva možete ignorisati ovu stranu.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/sr_RS/companies.lang b/htdocs/langs/sr_RS/companies.lang
    index dc043bc5ae4..e95eb7d0d9c 100644
    --- a/htdocs/langs/sr_RS/companies.lang
    +++ b/htdocs/langs/sr_RS/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Izaberi subjekat
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Obriši kontakt/adresu
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Novi subjekt
    -MenuNewCustomer=Novi klijent
    -MenuNewProspect=Novi kandidat
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Novo fizičko lice
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Kreiraj subjekt
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Kontakt/adresa subjekta
     Company=Kompanija
     CompanyName=Ime kompanije
     AliasNames=Alias (komercijalni)
    -AliasNameShort=Alias
    +AliasNameShort=Alias Name
     Companies=Kompanije
    -CountryIsInEEC=Zemlja je unutar EU
    -ThirdPartyName=Ime subjekta
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Subjekt
    -ThirdParties=Subjekti
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Kandidati
     ThirdPartyProspectsStats=Kandidati
     ThirdPartyCustomers=Klijenti
     ThirdPartyCustomersStats=Klijenti
     ThirdPartyCustomersWithIdProf12=Klijenti sa %s ili %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Tip subjekta
    +ThirdPartyType=Type of company
     Individual=Fizičko lice
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Osnovna kompanija
     Subsidiaries=SubsidiariesPoslovnice
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Poštanski broj
     Town=Grad
     Web=Web
     Poste= Pozicija
    -DefaultLang=Jezik po default-u
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Ponude
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Sintaksa je ispravna
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Klijent ima default popust od <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Klijent nema default relativni popust
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Nema
    -Supplier=Dobavljač
    +Supplier=Vendor
     AddContact=kreiraj kontakt
     AddContactAddress=Kreiraj kontakt/adresuz
     EditContact=Izmeni kontakt
    @@ -303,22 +303,22 @@ AddThirdParty=Kreiraj subjekt
     DeleteACompany=Obriši kompaniju
     PersonalInformations=Lični podaci
     AccountancyCode=Računovodstveni nalog
    -CustomerCode=Kod klijenta
    -SupplierCode=Vendor code
    -CustomerCodeShort=Kod klijenta
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Kod klijenta, jedinstven za sve klijente
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Obavezno ako je subjekt klijent ili kandidat
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Ispravnost je kontrolisana u modulu
    -ThisIsModuleRules=Ovo su pravila za ovaj modul
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Kandidat za kontaktiranje
     CompanyDeleted=Kompanija "%s" je obrisana iz baze.
     ListOfContacts=Lista kontakta/adresa
     ListOfContactsAddresses=Lista kontakta/adresa
    -ListOfThirdParties=Lista subjekata
    -ShowCompany=Show third party
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Prikaži kontakt
     ContactsAllShort=Sve (Bez filtera)
     ContactType=Tip kontakta
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Ovaj kontakt nije ni u jednoj ponudi
     NoContactForAnyContract=Ovaj kontakt nije ni u jednom ugovoru
     NoContactForAnyInvoice=Ovaj kontakt nije ni u jednom računu
     NewContact=Novi kontakt
    -NewContactAddress=Novi kontakt/adresa
    +NewContactAddress=New Contact/Address
     MyContacts=Moji kontakti
     Capital=Kapital
     CapitalOf=Kapital od %s
     EditCompany=Izmeni kompaniju
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Proveri
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Proveri Intracomunnautary VAT na sajtu Europske komisije
    -VATIntraManualCheck=Možete i ručno proveriti na evropskom web sajtu <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Provera nije moguća. Servis nije dostupan za datu državu (%s).
    -NorProspectNorCustomer=Nije kandidat ni klijent
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Zaposleni
     ProspectLevelShort=Potencijal
     ProspectLevel=Potencijal kandidata
    @@ -387,12 +387,12 @@ ExportCardToFormat=Izvozna kartica za formatiranje
     ContactNotLinkedToCompany=Kontakt nije povezan ni sa jednim subjektom
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=Nemoguć pristup Dolibarr-u
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Kontakti i podešavanja
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Nivo cene
     DeliveryAddress=Adresa dostave
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Obriši fajl
     ConfirmDeleteFile=Da li ste sigurni da želite da obrišete fajl?
     AllocateCommercial=Assigned to sales representative
     Organization=Organizacija
    -FiscalYearInformation=Informacije o fiskalnoj godini
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Prvi mesec fiskalne godine
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Lista kandidata
    -ListCustomersShort=Lista klijenata
    -ThirdPartiesArea=Subjekti i obast kontakta
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Ukupno jedinstvenih subjekata
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Otvoreno
     ActivityCeased=Zatvoreno
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Ime menadžera (CEO, direktor, predsednik...)
     MergeOriginThirdparty=Duplirani subjekt (subjekt kojeg želite obrisati)
     MergeThirdparties=Spoji subjekte
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/sr_RS/errors.lang b/htdocs/langs/sr_RS/errors.lang
    index 6d5b40cf554..6cd41acbd9d 100644
    --- a/htdocs/langs/sr_RS/errors.lang
    +++ b/htdocs/langs/sr_RS/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Vrednost "%s" ima pogrešan format datma
     ErrorWrongDate=Datum nije ispravan!
     ErrorFailedToWriteInDir=Greška prilikom pisanja u folder %s
     ErrorFoundBadEmailInFile=Pronađeni su mailovi sa pogrešnom sintaksom za %s linija u fajlu (primer linija %s sa mailom %s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Neka obavezna polja nisu popunjena
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Greška prilikom kreacije foldera. Proverite da li Web server nalog ima prava da piše u Dolibarr documents folderu. Ako je parametar <b>safe_mode</b> aktivan u PHP-u, proverite da li Dolibarr php fajlovi pripadaju korisniku (ili grupi) Web server naloga.
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Molimo izaberite vrednost u select listi
     ErrorNoValueForCheckBoxType=Molimo izaberite vrednost u checkbox listi
     ErrorNoValueForRadioType=Molimo izaberite vrednost u radio listi
     ErrorBadFormatValueList=Vrednost u listi ne može imati više od jednog zareza: <u>%s</u>, ali je potreban makar jedan: ključ,vrednost
    -ErrorFieldCanNotContainSpecialCharacters=Polje <b>%s</b> ne sme sadržati specijalne karaktere.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Polje <b>%s</b> ne sme sadržati specijalne karaktere, velika slova i ne sme se sastojati samo od brojeva.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Modul računovodstvo nije aktiviran
     ErrorExportDuplicateProfil=Ovo ime profila već postoji za ovaj export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching nije završen.
     ErrorLDAPMakeManualTest=.ldif fajl je generisan u folderu %s. Pokušajte da ga učitate ručno iz komandne linije da biste imali više informacija o greškama.
    -ErrorCantSaveADoneUserWithZeroPercentage=Nemoguće saluvati akciju sa statusom "nije započet" ukoliko je polje "izvršio" popunjeno.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref korišćena za kreaciju već postoji.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Nemoguće obrisati liniju jer je već u upotrebi ili korišćena u drugom objektu.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Da bi ova funkcionalnost bila dostupna, Javascript mora biti aktiviran. Da biste uključili/isključili javascript, otvorite Home->Podešavanja->Prikaz.
     ErrorPasswordsMustMatch=Unete lozinke se moraju podudarati
    -ErrorContactEMail=Došlo je do tehničke greške. Molimo kontaktirajte administratora mailom <b>%s</b> i navedite grešku <b>%s</b> u poruci, ili pošaljite screenshot ove strane.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Pogrešna vrednost za polje broj <b>%s</b> (vrednost "<b>%s</b>" ne odgovara regex pravilu <b>%s</b>)
     ErrorFieldValueNotIn=Pogrešna vrednost za polje broj <b>%s</b> (vrednost "<b>%s</b>" nije dostupna za polje <b>%s</b> u tabeli <b>%s</b>)
     ErrorFieldRefNotIn=Pogrešna vrednost za polje broj <b>%s</b> (vrednost "<b>%s</b>" nije <b>%s</b> postoječi ref.)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Antivirus nije mogao da potvrdi fajl (moguće je d
     ErrorSpecialCharNotAllowedForField=Specijalni karakteri nisu dozvoljeni u polju "%s"
     ErrorNumRefModel=U bazi postoji referenca (%s) koja nije kompatibilna sa ovim pravilom. Uklonite taj red ili preimenujte referencu kako biste aktivirali ovaj modul.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Greška za masku
     ErrorBadMaskFailedToLocatePosOfSequence=Greška, maska bez broja sekvence
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Greška, pogrešna reset vrednost
     ErrorMaxNumberReachForThisMask=Maksimalan broj dostignut za ovu masku
     ErrorCounterMustHaveMoreThan3Digits=Brojač mora imati više od 3 cifre
     ErrorSelectAtLeastOne=Greška. Izaberite bar jednu vrednost.
    -ErrorDeleteNotPossibleLineIsConsolidated=Brisanje je nemoguće jer je red vezan za proknjiženu bankarsku transakciju.
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s je dodeljena drugom subjektu
     ErrorFailedToSendPassword=Greška prilikom slanja lozinke
     ErrorFailedToLoadRSSFile=Greška prilikom čitanja RSS-a. Pokušajte da dodate konstantu MAIN_SIMPLEXMLLOAD_DEBUG ukoliko nemate dovoljno podataka za analizu greške.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Korisnik <b>%s</b> nije pronađen.
     ErrorLoginHasNoEmail=Korisnik nema mail adresu. Operacija otkazana.
     ErrorBadValueForCode=Pogrešna vrednost za sigurnosni kod. Pokušajte ponovo sa novom vrednošću...
     ErrorBothFieldCantBeNegative=Oba polja ne mogu oba biti negativna: %s i %s
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Količina za liniju na fakturi klijenta ne može biti negativna.
     ErrorWebServerUserHasNotPermission=Korisnik <b>%s</b> nema prava za izvršavanje na web serveru
     ErrorNoActivatedBarcode=Barcode tip nije aktiviran
    @@ -138,7 +141,7 @@ ErrorBadFormat=Pogrešan format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Greška, postoje objekti vezani za ovu isporuku. Brisanje je odbijeno.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Nemoguće obrisati uplatu koja je vezana za bar jednu fakturu sa statusom Plaćeno
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Nemoguće dodeliti konstanti "%s"
     ErrorPriceExpression2=Nemoguće redefinisati built-in funkciju "%s"
     ErrorPriceExpression3=Nedefinisana promenljiva "%s" u definiciji funkcije
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Neočekivani "%s"
     ErrorPriceExpression6=Pogrešan broj parametara (zadato %s, očekivano %s)
     ErrorPriceExpression8=Neočekivani operator "%s"
     ErrorPriceExpression9=Došlo je do neočekivane greške
    -ErrorPriceExpression10=Operator "%s" očekuje operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Očekivano "%s"
     ErrorPriceExpression14=Deljenje nulom
     ErrorPriceExpression17=Nedefinisana promenljiva "%s"
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=Greška u SOAP klijentu "%s"
     ErrorGlobalVariableUpdater5=Nema selektovane globalne promenljive
     ErrorFieldMustBeANumeric=Polje <b>%s</b> mora biti numeričko
     ErrorMandatoryParametersNotProvided=Obavezni parametar(i) nije dat
    -ErrorOppStatusRequiredIfAmount=Podesili ste procenjeni iznos za ovu priliku, tako da morate uneti i status.
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Pogrešna definicija Menu Array u Module Descriptoru (pogrešna vrednost za fk_menu)
    -ErrorSavingChanges=Došlo je do greške prilikom čuvanja promena.
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Magacin je neophodan na liniji do isporuke
     ErrorFileMustHaveFormat=Mora imati format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=Lozinka je podešena za ovog člana, ali korisnik nije kreiran. To znači da je lozinka sačuvana, ali se član ne može ulogovati na Dolibarr. Informaciju može koristiti neka eksterna komponenta, ali ako nemate potrebe da definišete korisnika/lozinku za članove, možete deaktivirati opciju "Upravljanje lozinkama za svakog člana" u podešavanjima modula Članovi. Ukoliko morate da kreirate login, ali Vam nije potrebna lozinka, ostavite ovo polje prazno da se ovo upozorenje ne bi prikazivalo. Napomena: email može biti korišćen kao login ako je član povezan sa korisnikom.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Oznaka sa ovim naslovom ili ovim URL-om već postoj
     WarningPassIsEmpty=Upozorenje, lozinka baze je prazna. Ovo je sigurnosni propust. Trebalo bi da dodate lozinku Vašoj bazi i da izmenite fajl config.php u skladu s tim.
     WarningConfFileMustBeReadOnly=Upozorenje, Vaš konfiguracioni fajl <b>htdocs/conf/conf.php</b> može biti izmenjen od strane web servera. Ovo je ozbiljan sigurnosni propust. Izmenite prava na ovom fajlu kako bi web server mogao samo da ga čita. Ukoliko koristite Windows i FAT format za Vaš disk, morate znati da ovaj sistem ne podržava upravljanje pravima i ne može biti pouzdan.
     WarningsOnXLines=Upozorenja na <b>%s</b> izvornih linija.
    -WarningNoDocumentModelActivated=Nema aktivnog modela za generisanje dokumenata. Možete izabrati model po defaultu dok ne izmenite podešavanja modula.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Upozorenje, kada je podešavanje završeno, morate deaktivirati alate za instalaciju/migraciju tako što ćete dodati fajl <b>install.lock</b> u folder <b>%s</b>. Nedostatak ovog fajla je sigurnosni propust.
    -WarningUntilDirRemoved=Sva sigurnosna upozorenja (vidljiva samo od strane administratora) će ostati aktivna sve dok postoji problem (ili ukoliko postavite konstantu MAIN_REMOVE_INSTALL_WARNING u meniju Podešavanja->Druga podešavanja).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Upozorenje, zatvaranje će biti izvršeno čak i kada se iznos izvornih i ciljnih elemenata razlikuje. Budite pažljivi ako aktivirate ovu opciju.
     WarningUsingThisBoxSlowDown=Upozorenje, aktiviranje ove opcije će značajno usporiti prikaz svih strana koje prikazuju informaciju.
     WarningClickToDialUserSetupNotComplete=Podešavanja ClickToDial informacija za Vašeg korisnika nisu završena (pogledajte tab ClickToDial na kartici korisnika)
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Previše podataka (preko %s linija). Moli
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Vaša prijava je promenjena. Iz sigurnosnih razloga se morate ponovo ulogovati.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/sr_RS/interventions.lang b/htdocs/langs/sr_RS/interventions.lang
    index e5aeaf037d1..0a733c1b1fe 100644
    --- a/htdocs/langs/sr_RS/interventions.lang
    +++ b/htdocs/langs/sr_RS/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Intervencije
     InterventionCard=Kartica intervencije
     NewIntervention=Nova intervencija
     AddIntervention=Kreiraj intervenciju
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Lista intervencija
     ActionsOnFicheInter=Akcije intervencije
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistika intervencija
    -NbOfinterventions=Broj kartica intervencije
    -NumberOfInterventionsByMonth=Broj kartica intervencije na mesečnom nivou (datum potvrde)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Id intervencije
    diff --git a/htdocs/langs/sr_RS/main.lang b/htdocs/langs/sr_RS/main.lang
    index 32e890e7cdb..b7ec39628fb 100644
    --- a/htdocs/langs/sr_RS/main.lang
    +++ b/htdocs/langs/sr_RS/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Greška u slanju mail-a (pošiljalac=%s, primalac=%s)
     ErrorFileNotUploaded=Fajl nije uploadovan. Proverite da li je fajl preveliki, da li ima dovoljno prostora na disku i da li postoji fajl sa istim imenom u ovom folderu.
     ErrorInternalErrorDetected=Detektovana je greška
     ErrorWrongHostParameter=Pogrešan host parametar
    -ErrorYourCountryIsNotDefined=Vaša zemlja nije definisana. Idite na Početna-Podešavanja-Izmene i ponovo popunite formu
    -ErrorRecordIsUsedByChild=Greška prilikom brisanja linije. Ovu liniju koristi jedan ili više drugih redova. 
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Pogrešna vrednost
     ErrorWrongValueForParameterX=Pogrešna vrednost za parametar %s
     ErrorNoRequestInError=Nema upita sa greškom
    -ErrorServiceUnavailableTryLater=Servis trenutno nije dostupan. Pokušajte ponovo.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Dupla vrednost u jedinstvenom polju
    -ErrorSomeErrorWereFoundRollbackIsDone=Detektovane su greške. Poništavamo sve promene.
    -ErrorConfigParameterNotDefined=Parametar <b>%s</b> nije definisan u Dolibarr config fajlu <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Korisnik <b>%s</b> nije pronađen u Dolibarr bazi.
     ErrorNoVATRateDefinedForSellerCountry=Greška, PDV stopa nije definisana za zemlju "%s".
     ErrorNoSocialContributionForSellerCountry=Greška, nema poreskih stopa definisanih za zemlju "%s".
     ErrorFailedToSaveFile=Greška, nemoguće sačuvati fajl.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=Nemate prava za tu akciju.
     SetDate=Postavi datum
     SelectDate=Izaberi datum
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Fajl je uspešno uploadovan
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Fajl je selektiran za prilog, ali još uvek nije uploadovan. Klikni na "Priloži fajl".
    -NbOfEntries=Br linija
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Pročitajte pomoć
     RecordSaved=Linija sačuvana
    @@ -94,7 +94,7 @@ Undefined=Nedefinisano
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=Pogledajte iznad
    -HomeArea=Oblast Home
    +HomeArea=Početna
     LastConnexion=Latest connection
     PreviousConnexion=Prethodna konekcija
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Zatvoreno
     Closed2=Zatvoreno
     NotClosed=Not closed
     Enabled=Uključeno
    +Enable=Aktiviraj
     Deprecated=Prevaziđeno
     Disable=Isključite
     Disabled=Isključeno
    @@ -153,7 +154,7 @@ Update=Ažuriraj
     Close=Zatvori
     CloseBox=Remove widget from your dashboard
     Confirm=Potvrdi
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Obriši
     Remove=Ukloni
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Kopiraj
     Paste=Zalepi
     Default=Default
     DefaultValue=Default vrednost
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Cena
     PriceCurrency=Price (currency)
     UnitPrice=Jedinična cena
    @@ -347,7 +348,7 @@ AmountTTCShort=Iznos (bruto)
     AmountHT=Iznos (neto)
     AmountTTC=Iznos (bruto)
     AmountVAT=Iznos poreza
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Iznos (osnovica), originalna valuta
    @@ -428,7 +429,7 @@ ActionNotApplicable=Nije primenjivo
     ActionRunningNotStarted=Započeti
     ActionRunningShort=In progress
     ActionDoneShort=Završeno
    -ActionUncomplete=nepotpuno
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Gereriši
     Duration=Trajanje
     TotalDuration=Ukupno trajanje
     Summary=Rezime
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Dostupno
     NotYetAvailable=Još uvek nedostupno
    @@ -468,7 +469,7 @@ and=i
     or=ili
     Other=Drugo
     Others=Drugi
    -OtherInformations=Druge informacije
    +OtherInformations=Other information
     Quantity=Količina
     Qty=Kol.
     ChangedBy=Izmenio
    @@ -506,7 +507,7 @@ None=Ništa
     NoneF=Ništa
     NoneOrSeveral=None or several
     Late=Kasni
    -LateDesc=Odloži definisanje da li je zapis zakasneo ili ne zavisi od vašeg podešenja. Zamolite Vašeg administratora da promeni odlaganje u Naslovna-Podešenja-Upozorenja
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Slika
     Photos=Slike
    @@ -530,18 +531,6 @@ September=Septembar
     October=Oktobar
     November=Novembar
     December=Decembar
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=Maj
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Avg
    -SeptemberMin=Sep
    -OctoberMin=Okt
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=Januar
     Month02=Februar
     Month03=Mart
    @@ -646,6 +635,8 @@ SendMail=Pošalji email
     EMail=E-mail
     NoEMail=Nema maila
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Nema mobilnog telefona
     Owner=Vlasnik
     FollowingConstantsWillBeSubstituted=Sledeće konstante će biti zamenjene odgovarajućim vrednostima.
    @@ -677,7 +668,7 @@ NeverReceived=Nije primljena
     Canceled=Otkazano
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=Možete postaviti podrazumevane vrednosti pri kreiranju novog zapisa u modul podešavanja
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Boja
     Documents=Povezani fajlovi
     Documents2=Dokumenti
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Prikaži komandu sa sakrivenom lozinkom
     UnHidePassword=Prikaži realnu komandu sa vidljivom lozinkom
     Root=Root
    -Informations=Informacije
    +Informations=Informacija
     Page=Strana
     Notes=Beleške
     AddNewLine=Dodaj liniju
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Prikaži stranu za štampanje glavnog sadržaja
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Upozorenje, trenutno ste u modu održavanja, samo korisnik <b>%s</b> može trenutno koristiti aplikaciju.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Sistemska greška
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Kreditna kartica
     ValidatePayment=Potvrdi plaćanje
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Polja sa <b>%s</b> su obavezna
    -FieldsWithIsForPublic=Polja sa <b>%s</b> su prikazana na javnim listama članova. Ukoliko to ne želite, odčekirajte opciju "javno".
    -AccordingToGeoIPDatabase=(po GeoIP konvenciji)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Linija
     NotSupported=Nije podržano
     RequiredField=Obavezno polje
    @@ -732,6 +723,8 @@ Result=Rezultat
     ToTest=Test
     ValidateBefore=Kartica mora biti potvrđena pre korišćenja ove funkcionalnosti
     Visibility=Vidljivost
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privatno
     Hidden=Skriveno
     Resources=Resursi
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link ka narudžbini
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Napravi draft
     SetToDraft=Nazad u draft
     ClickToEdit=Klikni za edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Po danu
     BySalesRepresentative=Po agentu prodaje
     LinkedToSpecificUsers=Povezano sa kontaktom korisnika
     NoResults=Nema rezultata
    -AdminTools=Administratorski alati
    +AdminTools=Admin Tools
     SystemTools=Sistemski alati
     ModulesSystemTools=Alati modua
     Test=Test
     Element=Element
     NoPhotoYet=Još nema slika
     Dashboard=Kontrolna tabla
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Može se odbiti
     from=od
     toward=ka
    @@ -802,7 +797,7 @@ PrintFile=Štampaj fajl %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Prikaži intervenciju
     ShowContract=Pokaži ugovor
    -GoIntoSetupToChangeLogo=Otvori Home - Podešavanja - Kompanija da biste izmenili logo ili Home - Setup - Prikaz da biste ga sakrili.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Odbij
     Denied=Odbijeno
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Srdačan pozdrav
     DeleteLine=Obriši red
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Zona za dokumenta kreirana masovnim akcijama
     ShowTempMassFilesArea=Prikaži zonu za dokumenta kreirana masovnim akcijama
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Označi kao naplaćenu
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Kalendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Događaj
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projekat
     Projects=Projekti
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Prava
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Ponedeljak
     Tuesday=Utorak
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Intervencije
     SearchIntoContracts=Ugovori
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Troškovi
    -SearchIntoLeaves=Odsustva
    +SearchIntoLeaves=Leave
     CommentLink=Komentari
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Svi
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Platio
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Dodeljeno
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/sr_RS/other.lang b/htdocs/langs/sr_RS/other.lang
    index 283cd24c7ac..994cdcf91f7 100644
    --- a/htdocs/langs/sr_RS/other.lang
    +++ b/htdocs/langs/sr_RS/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Bezbednosni kod
     NumberingShort=N°
     Tools=Alati
     TMenuTools=Alati
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Datum rođenja
     BirthdayDate=Birthday date
     DateToBirth=Datum rođenja
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Poruka na strani potvrđene uplate
     MessageKO=Poruka na strani otkazane uplate
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Dodat kontakt Intervenciji
    -Notify_FICHINTER_VALIDATE=Intervencija je potvrđena
    -Notify_FICHINTER_SENTBYMAIL=Intervencija je poslata mail-om
     Notify_ORDER_VALIDATE=Narudžbina klijenta je potvrđena
     Notify_ORDER_SENTBYMAIL=Narudžbina klijenta poslata mailom
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Narudžbina dobavljača je poslata mailom
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Narudžbina dobavljača je snimljena
     Notify_ORDER_SUPPLIER_APPROVE=Narudžbina dobavljača je odobrena
     Notify_ORDER_SUPPLIER_REFUSE=Narudžbina dobavljača je odbijena
     Notify_PROPAL_VALIDATE=Komercijalna ponuda je potvrđena
    -Notify_PROPAL_CLOSE_SIGNED=Komercijalna ponuda je zatvorena i potpisana
    -Notify_PROPAL_CLOSE_REFUSED=Komercijalna ponuda je zatvorena i odbijena
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Komercijalna ponuda poslata mailom
     Notify_WITHDRAW_TRANSMIT=Podizanje transfera
     Notify_WITHDRAW_CREDIT=Kreditno podizanje
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Subjekt kreiran
     Notify_COMPANY_SENTBYMAIL=Mailovi poslati sa kartice subjekta
     Notify_BILL_VALIDATE=Račun klijenta je potvrđen
     Notify_BILL_UNVALIDATE=Potvrda računa klijenta je otkazana
    -Notify_BILL_PAYED=Račun klijenta je plaćen
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Račun klijenta je otkazan
     Notify_BILL_SENTBYMAIL=Račun klijenta je poslat mailom
     Notify_BILL_SUPPLIER_VALIDATE=Račun dobavljača je potvrđen
    -Notify_BILL_SUPPLIER_PAYED=Račun dobavljača je plaćen
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Račun dobavljača je poslat mailom
     Notify_BILL_SUPPLIER_CANCELED=Račun dobavljača otkazan
     Notify_CONTRACT_VALIDATE=Ugovor je potvrđen
     Notify_FICHEINTER_VALIDATE=Intervencija je potvrđena
    +Notify_FICHINTER_ADD_CONTACT=Dodat kontakt Intervenciji
    +Notify_FICHINTER_SENTBYMAIL=Intervencija je poslata mail-om
     Notify_SHIPPING_VALIDATE=Isporuka je potvrđena
     Notify_SHIPPING_SENTBYMAIL=Isporuka je poslata mailom
     Notify_MEMBER_VALIDATE=Član je potvrđen
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Kreacija projekta
     Notify_TASK_CREATE=Zaduženje kreirano
     Notify_TASK_MODIFY=Zaduženje izmenjeno
     Notify_TASK_DELETE=Zaduženje obrisano
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=Vidi podešavanja modula %s
     NbOfAttachedFiles=Broj fajlova/dokumenata u prilogu
     TotalSizeOfAttachedFiles=Ukupna veličina priloženih fajlova/dokumenata
     MaxSize=Maksimalna veličina
     AttachANewFile=Priloži novi fajl/dokument
     LinkedObject=Povezan objekat
    -NbOfActiveNotifications=Broj obaveštenja (br. primalaca mailova)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> je infomacija koja zavisi od zemlje subjekta.<br>Na primer, za zemlju <b>%s</b>, to je kod <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=Nova intervencija %s je dodeljena Vama.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Intervencija %s je potvrđena.
     EMailTextInvoiceValidated=Račun %s je potvrđen.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Ponuda %s je potvrđena.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Narudžbina %s je potvrđena.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Narudžbina %s je odobrena od strane %s.
     EMailTextOrderRefused=Narudžbina %s je odbijena.
     EMailTextOrderRefusedBy=Narudžbina %s je odbijena od strane %s.
     EMailTextExpeditionValidated=Isporuka %s je potvrđena.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Podaci za import
     DolibarrNotification=Automatsko obaveštenje
     ResizeDesc=Unesite novu širinu <b>ILI</b> novu visinu. Proporcija će biti održana prilikom promene veličine...
    @@ -204,7 +212,7 @@ NewLength=Nova širina
     NewHeight=Nova visina
     NewSizeAfterCropping=Nova veličina nakon sečenja
     DefineNewAreaToPick=Definiši novu oblast na slici za izbor (kliknite levim klikom na sliku i prevucite kursor do suprotnog ugla)
    -CurrentInformationOnImage=Ovaj alat važ omogućava da izmenite veličinu ili da isečete sliku. Ovo su informacije o slici koju trenutno gledate.
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Editor slika
     YouReceiveMailBecauseOfNotification=Dobili ste ovu poruku jer je Vaš mail dodat u listu za informisanje o određenim događajima u %s softveru od %s.
     YouReceiveMailBecauseOfNotification2=Ovaj događaj je sledeće:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Oblast exporta
    diff --git a/htdocs/langs/sr_RS/projects.lang b/htdocs/langs/sr_RS/projects.lang
    index 5dfbd336f27..815c76e60ab 100644
    --- a/htdocs/langs/sr_RS/projects.lang
    +++ b/htdocs/langs/sr_RS/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Količina prilika projekata na osnovu statusa
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Prikaži projekat
     ShowTask=Prikaži zadatak
     SetProject=Postavi projekat
     NoProject=Nema definisanih ni pripadajućih projekata
    -NbOfProjects=Br projekata
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Provedeno vreme
     TimeSpentByYou=Vreme koje ste Vi proveli
     TimeSpentByUser=Vreme koje je korisnik proveo
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Idi na listu utrošenog vremena
     GoToListOfTasks=Idi na listu zadataka
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Lista komercijalnih ponuda vezanih za projekat
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Lista ugovora vezanih za projekat
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Lista intervencija vezanih za projekat
    -ListExpenseReportsAssociatedProject=Lista troškova povezanih sa ovim projektom
    -ListDonationsAssociatedProject=Lista donacija vezanih za ovaj projekat
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Lista događaja vezanih za projekat
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Lista utrošenog vremena na zadacima ovog projekta
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Aktivnost na projektu danas
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Zadatak %s je kreiran
     TaskModifiedInDolibarr=Zadatak %s je izmenjen
     TaskDeletedInDolibarr=Zadatak %s je obrisan
    -OpportunityStatus=Status prilike
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Status prilike
    -OpportunityProbability=Verovatnoća prilike
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Verv. pril.
    -OpportunityAmount=Iznos prilike
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Iznos prilike
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Saradnik
     SelectElement=Selektiraj element
     AddElement=Link ka elementu
     # Documents models
    -DocumentModelBeluga=Templejt projekta sa povezanim objektima
    -DocumentModelBaleine=Templejt izveštavanja projekta za zadatke
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planirano utrošeno vreme
     PlannedWorkloadShort=Utrošeno vreme
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projekti sa ovim korisnikom u kontaktima
     TasksWithThisUserAsContact=Zadaci ovog korisnika
     ResourceNotAssignedToProject=Nije dodeljen projektu
     ResourceNotAssignedToTheTask=Nije dodeljen zadatku
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Dodeli zadatak meni
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Dodeli
     ProjectOverview=Pregled
    -ManageTasks=Koristi projekte za praćenje zadataka i vremena
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Koristi projekte za praćenje prilika
    -ProjectNbProjectByMonth=Br kreiranih projekata po mesecu
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Iznos prilika po mesecu
    -ProjectWeightedOppAmountOfProjectsByMonth=Prosečni iznos prilika po mesecu
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistike na projektima/lead-ovima
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Zadatak je dodeljen. Unos vremena za ovaj zadatak je omogućen.
     IdTaskTime=Id vremena zadatka
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Samo šanse
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Nije šansa
    -OpportunityTotalAmount=Ukupan iznos prilika
    -OpportunityPonderatedAmount=Prosečni iznos prilika
    -OpportunityPonderatedAmountDesc=Količina prilika na osnovu verovatnoće
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospekcija
     OppStatusQUAL=Kvalifikacija
     OppStatusPROPO=Ponuda
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/sv_SE/admin.lang b/htdocs/langs/sv_SE/admin.lang
    index 12181099f4a..cd54c6e65ff 100644
    --- a/htdocs/langs/sv_SE/admin.lang
    +++ b/htdocs/langs/sv_SE/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Utveckling
     VersionUnknown=Okänd
     VersionRecommanded=Rekommenderad
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler för att spara sessioner
     SessionSavePath=Lagring session lokalisering
     PurgeSessions=Utrensning av sessioner
     ConfirmPurgeSessions=Vill du verkligen tömma alla sessioner? Detta kommer logga ut alla användare (förutom dig själv).
    -NoSessionListWithThisHandler=Spara session hanterare konfigureras i din PHP inte är möjligt att lista all löpande sessioner.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lås nya förbindelser
    -ConfirmLockNewSessions=Är du säker på att du vill begränsa alla nya Dolibarr anknytning till dig själv. Endast användare <b>%s</b> kommer att kunna ansluta efter det.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Ta bort lås för anslutning
     YourSession=Din session
    -Sessions=Användare session
    +Sessions=Users sessions
     WebUserGroup=Webbserver användare / grupp
    -NoSessionFound=Din PHP verkar inte tillåta att lista aktiva sessioner. Directory används för att spara sessioner <b>(%s)</b> kan skyddas (till exempel genom OS behörigheter eller PHP-direktivet open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Databas charset för att lagra data
     DBSortingCharset=Databas charset att sortera data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Extern användare
     InternalUsers=Interna användare
     ExternalUsers=Externa användare
     GUISetup=Visa
    -SetupArea=Setup område
    +SetupArea=Inställning
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Formulär för att testa filuppladdning (enligt inställningar)
     IfModuleEnabled=Anm: ja effektivt endast om modul <b>%s</b> är aktiverat
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kod får inte innehålla värdet 0
     DisableJavascript=Inaktivera JavaScript och Ajax-funktioner (rekommenderas för blinda personer eller textbaserade webbläsare)
     UseSearchToSelectCompanyTooltip=Även om du har ett stort antal tredje parter (> 100 000), kan du öka hastigheten genom att sätta konstant COMPANY_DONOTSEARCH_ANYWHERE till 1 i Setup-> Övrigt. Sökningen kommer då att begränsas till start av strängen.
     UseSearchToSelectContactTooltip=Även om du har ett stort antal tredje parter (> 100 000), kan du öka hastigheten genom att sätta konstant CONTACT_DONOTSEARCH_ANYWHERE till 1 i Setup-> Övrigt. Sökningen kommer då att begränsas till start av strängen.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=NBR tecken för att utlösa Sök: %s
     NotAvailableWhenAjaxDisabled=Inte tillgänglig när Ajax funktionshindrade
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Förhandsgranska inte tillgänglig
     ThemeCurrentlyActive=Tema för tillfället
     CurrentTimeZone=PHP server tidszon
     MySQLTimeZone=Timezone MySql (databas)
    -TZHasNoEffect=Datum lagras och returneras av databasserver som om de hålls som LAGTS sträng. Den tidszon har effekt endast vid användning UNIX_TIMESTAMP funktion (som inte bör användas av Dolibarr, så databas TZ ska ha någon effekt, även om det ändras efter uppgifterna angavs).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Tabell
     Fields=Fält
    @@ -111,14 +111,14 @@ NotConfigured=Modul/Applikation är inte konfigurerad
     Active=Aktiv
     SetupShort=Inställning
     OtherOptions=Andra alternativ
    -OtherSetup=Andra inställningar
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimaltecken
     CurrentValueSeparatorThousand=Tusentalsavgränsare
     Destination=Destination
     IdModule=Modul ID
     IdPermissions=Behörighet ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Lokalisering parametrar
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Kund tidzon (användare)
     ClientHour=Kund tid (användare)
     OSTZ=Server OS tidszon
    @@ -126,8 +126,8 @@ PHPTZ=Tidszon PHP server
     DaylingSavingTime=Sommartid (användare)
     CurrentHour=PHP Tid (server)
     CurrentSessionTimeOut=Aktuell session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max antal rader för widget
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetektera (webbläsare språk)
     FeatureDisabledInDemo=Funktion avstängd i demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Endast delar av <a href="%s">aktiverade moduler</a> visas.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Ny
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, den officiella marknadsplatsen för Dolibarr ERP / CRM externa moduler
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Länk
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Har ingen butik tydlig lösenord i databasen, men endast
     MainDbPasswordFileConfEncrypted=Databas lösenord krypterat i conf.php (Aktiverad rekommenderas)
     InstrucToEncodePass=Att ha lösenord kodad i <b>conf.php</b> filen, ersätt raden <br> <b>$ Dolibarr_main_db_pass = "...";</b> <br> av <br> <b>$ Dolibarr_main_db_pass = "krypterad:%s";</b>
     InstrucToClearPass=Att ha lösenord avkodas (klar) i <b>conf.php</b> filen, ersätt raden <br> <b>$ Dolibarr_main_db_pass = "krypterat: ...";</b> <br> av <br> <b>$ Dolibarr_main_db_pass = "%s";</b>
    -ProtectAndEncryptPdfFiles=Skydd av genererade pdf-filer (Aktiverad rekommenderas inte, raster massa pdf generationen)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Huvudnummer
     DolibarrLicense=Licens
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=För användarens eller utvecklarens dokumentation (Doc, FAQs ...), <br> ta en titt på Dolibarr Wiki: <br> <a href="%s" target="_blank"><b>%s</b></a>
     ForAnswersSeeForum=För alla andra frågor / hjälp, kan du använda Dolibarr forumet: <br> <a href="%s" target="_blank"><b>%s</b></a>
    -HelpCenterDesc1=Detta område kan hjälpa dig att få en tjänst Hjälp stöd på Dolibarr.
    -HelpCenterDesc2=Någon del av denna tjänst finns <b>bara</b> på <b>engelska.</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Aktuell meny handler
     MeasuringUnit=Mätenhet
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Uppsägningstid
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPs Port (som standard i php.ini: <b>%s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPs Host (som standard i php.ini: <b>%s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPs Port (Ej definierad i PHP på Unix-liknande system)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPs Host (Ej definierad i PHP på Unix-liknande system)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Skicka systematiskt en dold kol-kopia av alla skickade email till
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Metod för att skicka e-post
    -MAIN_MAIL_SMTPS_ID=SMTP-ID om autentisering krävs
    -MAIN_MAIL_SMTPS_PW=SMTP-lösenord om autentisering krävs
    -MAIN_MAIL_EMAIL_TLS= Använd TLS (SSL) krypterar
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Inaktivera alla SMS sändningarna (för teständamål eller demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Metod som ska användas för att skicka SMS
    -MAIN_MAIL_SMS_FROM=Standard avsändaren telefonnummer för SMS-sändning
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Funktionen inte finns på Unix-liknande system. Testa din sendmail program lokalt.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Modul setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Använd inte i poroduktion
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Steg %s
    -FindPackageFromWebSite=Hitta ett paket som ger funktionen du vill ha (till exempel om %s webbplats).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Hämta paket (till exempel från officiella hemsida%s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr nuvarande version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Fördröjning för caching export svar i sekunder (0 eller tomt för ingen cache)
     DisableLinkToHelpCenter=Dölj länken <b>&quot;Behöver du hjälp eller stöd&quot;</b> på inloggningssidan
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=Det finns ingen automatisk förpackning, så om linjen är ur sida på handlingar eftersom alltför länge, måste du lägga dig själv vagnretur i textområdet.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minsta längd
     LanguageFilesCachedIntoShmopSharedMemory=Filer. Lang lastas i det delade minnet
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Exempel med gällande kör installationsprogrammet
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=Förteckning över OpenDocument mallar kataloger
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Antal ODT / ODS mallar funna i dessa kataloger
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Exempel på syntax: <br> C: \\ Mydir <br> / Home / Mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> Att veta hur du skapar dina odT dokumentmallar, innan du förvarar dem i dessa kataloger, läs wiki dokumentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=För att kunna använda Web Services (parameter &quot;do
     TestSubmitForm=Ingång Testformuläret
     ThisForceAlsoTheme=Med denna meny manager kommer också att använda sitt eget tema vad som är valfrihet för användaren. Även denna meny manager specialiserat för smartphones inte fungerar på alla smartphone. Använd en annan meny chef om du får problem på din.
     ThemeDir=Skins katalogen
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Respons tidsutlösning
     SmsTestMessage=Testmeddelande från __ PHONEFROM__ till __ PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Nyckeln till säkra webbadresser
    -NoSmsEngine=Ingen SMS-avsändare Manager, som finns. SMS-avsändare chef inte installeras med standard utgåvan (eftersom de är beroende av en extern leverantör) men du kan hitta några på http://www.dolistore.com
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Du kan ställa in varje globala alternativ för PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Regler för att förfalska adress lådor
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Dölj produktbeskrivningar i genererad PDF
     HideRefOnPDF=Visa ej produkt ref. i genererad PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parametrar för att säkra webbadresser
     SecurityTokenIsUnique=Använd en unik securekey parameter för varje webbadress
     EnterRefToBuildUrl=Ange referens för objekt %s
     GetSecuredUrl=Få beräknat URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Gammal momssats
     NewVATRates=Ny momssats
     PriceBaseTypeToChange=Ändra om priser med bas referensvärde som definieras på
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Välj lista
     ExtrafieldSelectList = Välj från tabell
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Lösenord
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Länk till ett objekt
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Standardlänk
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Varning, kan detta värde skrivas över av användarspecifik installation (varje användare kan ställa in sin egen clicktodial url)
     ExternalModule=Extern modul - Installerad i katalogen %s
    -BarcodeInitForThirdparties=Mäss streckkod init för thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass streckkod init eller återställning efter produkter eller tjänster
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init värde för nästa% s tomma poster
     EraseAllCurrentBarCode=Radera alla nuvarande streckkoder
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=Alla värden för streckkod har raderats
    -NoBarcodeNumberingTemplateDefined=Ingen numrering streckkod mall aktiverat i streckkodsmodul setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Fält
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=Användare & grupper
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Tredje part
    +Module1Name=Third Parties
     Module1Desc=Företag och kontakt ledning
     Module2Name=Kommersiella
     Module2Desc=Kommersiell förvaltning
     Module10Name=Bokföring
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Förslag
     Module20Desc=Hantering av affärsförslag
     Module22Name=Massutskick av e-utskick
    @@ -511,13 +517,13 @@ Module52Desc=Lager hantering av produkter
     Module53Name=Tjänster
     Module53Desc=Service ledning
     Module54Name=Avtal / Prenumerationer
    -Module54Desc=Förvaltning av kontrakt (tjänster eller reccuring abonnemang)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Streckkoder
     Module55Desc=Barcode ledning
     Module56Name=Telefoni
     Module56Desc=Telefoni integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integrering av ett ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Kostnader och resor anteckningar
     Module75Desc=Kostnader och resor notera ledning
     Module80Name=Transporter
     Module80Desc=Transporter och leverans för ledning
    -Module85Name=Banker och kontanter
    +Module85Name=Banks and Cash
     Module85Desc=Förvaltning av bank eller kontanter konton
    -Module100Name=ExternalSite
    -Module100Desc=Några externa webbplats i Dolibarr menyer och visa det i en Dolibarr ram
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman och Sip
     Module105Desc=Mailman eller SPIP gränssnitt för medlemmar modulen
     Module200Name=LDAP
    -Module200Desc=LDAP katalog synkronisering
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data export
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data import
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Medlemmar
     Module310Desc=Foundation i ledningen
     Module320Name=RSS-flöde
     Module320Desc=Lägg till RSS feed inne Dolibarr skärm sidor
    -Module330Name=Bokmärken
    -Module330Desc=Förvaltning av bokmärken förvaltning
    -Module400Name=Projekt / Möjligheter / Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=WebCalendar
     Module410Desc=WebCalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Lån
     Module520Desc=Förvaltning av lån
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donationer
     Module700Desc=Donation ledning
     Module770Name=Räkningar
    -Module770Desc=Förvaltnings- och anspråk räkningar (transport, måltid, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass post dokumentgenerering
     Module1780Name=Taggar/Kategorier
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=FCKeditor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamiska priser
     Module2200Desc=Aktivera användningen av matematiska uttryck för priser
     Module2300Name=Schemalagda jobb
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Aktivera Dolibarr SOAP server tillhandahåller API-tjänster
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Aktivera Dolibarr REST servern tillhandahåller API-tjänster
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Använder online Gravatar tjänst (www.gravatar.com) för att visa foto av användare / medlemmar (hittade med sin e-post). Behöver en internet
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP-klient
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind omvandlingar kapacitet
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-bolag
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Lämna Framställningar förvaltning
    -Module20000Desc=Deklarera och följ de anställda lämnar förfrågningar
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Varu eller serienummer, äter av och bäst före-datum ledningen på produkter
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=Paybox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Redovisning (avancerad)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direktutskrift (utan att öppna dokumenten) använder Cups IPP-gränssnitt (skrivare måste vara synlig från servern, och CUPS måste vara installerad på servern).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Marginaler
     Module59000Desc=Modul för att hantera marginaler
     Module60000Name=Provision
     Module60000Desc=Modul för att hantera uppdrag
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resurser
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Läs fakturor
    @@ -651,9 +661,9 @@ Permission32=Skapa / modifiera produkter
     Permission34=Ta bort produkter
     Permission36=Se / hantera dold produkter
     Permission38=EXPORTVARA
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Ta bort projekt (gemensamma projekt och projekt som jag är kontaktperson för)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Läs insatser
     Permission62=Skapa / ändra inlägg
    @@ -686,7 +696,7 @@ Permission109=Ta bort sendings
     Permission111=Läs finansiella räkenskaper
     Permission112=Skapa / ändra / radera och jämför transaktioner
     Permission113=Ställ upp finansiella konton (skapa, handha kategorier)
    -Permission114=Avstämning av transaktioner
    +Permission114=Reconcile transactions
     Permission115=Exporttransaktioner och kontoutdrag
     Permission116=Överföringar mellan konton
     Permission117=Hantera kontroller avsändning
    @@ -694,15 +704,15 @@ Permission121=Läs tredje part kopplad till användaren
     Permission122=Skapa / ändra tredje part kopplad till användaren
     Permission125=Radera tredje part kopplad till användaren
     Permission126=Export tredje part
    -Permission141=Läsa alla projekt och uppgifter (även privata projekt jag är inte kontakta för)
    -Permission142=Skapa / ändra alla projekt och uppgifter (även privata projekt jag är inte kontakta för)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Ta bort alla projekt och uppgifter (även privata projekt jag är inte kontakta för)
     Permission146=Läs leverantörer
     Permission147=Läs statistik
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Läs kontrakt / abonnemang
     Permission162=Skapa / ändra avtal / abonnemang
     Permission163=Aktivera en tjänst / teckning av ett kontrakt
    @@ -725,7 +735,7 @@ Permission187=Stäng leverantör order
     Permission188=Avbryt leverantör order
     Permission192=Skapa linjer
     Permission193=Avbryt linjer
    -Permission194=Läs bandbredd linjer
    +Permission194=Read the bandwidth lines
     Permission202=Skapa ADSL-anslutning
     Permission203=Beställ anslutningar order
     Permission204=Beställ anslutningar
    @@ -750,12 +760,12 @@ Permission244=Se innehållet i de dolda kategorier
     Permission251=Läs andra användare och grupper
     PermissionAdvanced251=Läs andra användare
     Permission252=Skapa / ändra andra användare, grupper och permisssions
    -Permission253=Ändra andra användare lösenord
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Skapa / ändra interna / externa användare och behörigheter
     Permission254=Ta bort eller inaktivera andra användare
     Permission255=Skapa / ändra sin egen användarinformation
     Permission256=Ändra sina egna lösenord
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Läs CA
     Permission272=Läs fakturor
     Permission273=Utfärda fakturor
    @@ -765,7 +775,7 @@ Permission283=Radera kontakter
     Permission286=Exportera kontakter
     Permission291=Läs taxor
     Permission292=Ange behörigheter på den taxor
    -Permission293=Ändra kunder taxor
    +Permission293=Modify customers tariffs
     Permission300=Läs streckkoder
     Permission301=Skapa / modifiera streckkoder
     Permission302=Ta bort streckkoder
    @@ -787,11 +797,9 @@ Permission401=Läs rabatter
     Permission402=Skapa / ändra rabatter
     Permission403=Validate rabatter
     Permission404=Ta bort rabatter
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Radera löner
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export löner
     Permission520=Läs Lån
     Permission522=Skapa / ändra lån
    @@ -844,8 +852,8 @@ Permission1251=Kör massiv import av externa data till databasen (data last)
     Permission1321=Export kundfakturor, attribut och betalningar
     Permission1322=Reopen a paid bill
     Permission1421=Export kundorder och attribut
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Radera ledighets förfrågningar
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potentiella nivå
     DictionaryCanton=Delstat / provins
     DictionaryRegion=Regioner
    @@ -894,7 +902,7 @@ DictionaryVAT=Moms Priser och Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Betalningsvillkor
     DictionaryPaymentModes=Betalningssätten
    -DictionaryTypeContact=Kontakt / adresstyper
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Miljöskatt (WEEE)
     DictionaryPaperFormat=Pappersformat
    @@ -908,47 +916,47 @@ DictionarySource=Ursprung av affärsförslag / beställning
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Modeller för kontoplan
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=E-postmeddelanden mallar
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Enheter
     DictionaryProspectStatus=Prospektering Status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Möjlighet status för projektet / bly
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup sparas
     SetupNotSaved=Setup not saved
     BackToModuleList=Tillbaka till moduler lista
    -BackToDictionaryList=Tillbaka till ordlistan
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Moms Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=Som standard föreslås moms 0 som kan användas för de fall som föreningar, privatpersoner ou små företag.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Betyg
     LocalTax1IsNotUsed=Använd inte andra skatte
    -LocalTax1IsUsedDesc=Använd en annan typ av skatt (exklusive moms)
    -LocalTax1IsNotUsedDesc=Använd inte andra typer av skatt (exklusive moms)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Andra typen av skatt
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Använd inte tredje skatt
    -LocalTax2IsUsedDesc=Använd en tredje typ av skatt (exklusive moms)
    -LocalTax2IsNotUsedDesc=Använd inte andra typer av skatt (exklusive moms)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Tredje typen av skatt
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Förvaltning
    -LocalTax1IsUsedDescES= RE räntesats som standard när du skapar framtidsutsikter, fakturor, order etc följa aktiva standard regeln: <br> Om te köparen inte utsätts för RE, RE som standard = 0. Slut på regeln. <br> Om köparen utsätts för RE sedan RE som standard. Slut på regeln. <br>
    -LocalTax1IsNotUsedDescES= Som standard föreslås RE är 0. Slut på regeln.
    -LocalTax1IsUsedExampleES= I Spanien är proffs förbehåll för vissa särskilda delar av den spanska IAE.
    -LocalTax1IsNotUsedExampleES= I Spanien de är professionella och samhällen och på vissa delar av den spanska IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= RE räntesats som standard när du skapar framtidsutsikter, fakturor, order etc följa aktiva standard regeln: <br> Om säljaren inte utsätts för IRPF, sedan IRPF som standard = 0. Slut på regeln. <br> Om säljaren är utsatt för IRPF sedan IRPF som standard. Slut på regeln. <br>
    -LocalTax2IsNotUsedDescES= Som standard föreslås IRPF är 0. Slut på regeln.
    -LocalTax2IsUsedExampleES= I Spanien, frilansare och oberoende yrkesutövare som tillhandahåller tjänster och företag som har valt skattesystemet i moduler.
    -LocalTax2IsNotUsedExampleES= I Spanien de bussines inte omfattas av skattesystemet i moduler.
    +LocalTax1ManagementES=RE Förvaltning
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Som standard föreslås RE är 0. Slut på regeln.
    +LocalTax1IsUsedExampleES=I Spanien är proffs förbehåll för vissa särskilda delar av den spanska IAE.
    +LocalTax1IsNotUsedExampleES=I Spanien de är professionella och samhällen och på vissa delar av den spanska IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Som standard föreslås IRPF är 0. Slut på regeln.
    +LocalTax2IsUsedExampleES=I Spanien, frilansare och oberoende yrkesutövare som tillhandahåller tjänster och företag som har valt skattesystemet i moduler.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Rapporter om lokala skatter
     CalcLocaltax1=Försäljning - Inköp
     CalcLocaltax1Desc=Lokala skatter rapporter beräknas med skillnaden mellan localtaxes försäljning och localtaxes inköp
    @@ -958,7 +966,8 @@ CalcLocaltax3=Försäljning
     CalcLocaltax3Desc=Lokala skatter rapporter är summan av localtaxes försäljning
     LabelUsedByDefault=Etikett som används som standard om ingen översättning kan hittas för kod
     LabelOnDocuments=Etikett på dokument
    -NbOfDays=Nb dagar
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=I slutet av månaden
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Databas användare
     DatabasePassword=Databas lösenord
     Tables=Tabeller
     TableName=Tabell namn
    -NbOfRecord=Nb av register
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver typ
     SummarySystem=Systeminformation sammandrag
    @@ -996,7 +1005,7 @@ Skin=Hud tema
     DefaultSkin=Standard hud tema
     MaxSizeList=Max längd för lista
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Dagens meddelande
     MessageLogin=Inloggningssidan meddelande
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent sökformuläret på menyn till vänster
     DefaultLanguage=Default språk att använda (språkkod)
     EnableMultilangInterface=Aktivera flerspråkigt gränssnitt
     EnableShowLogo=Visa logotypen på vänstra menyn
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Namn
     CompanyAddress=Adress
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Ägare till %s bankkonto
     BankModuleNotActive=Bankkonton modulen inte aktiverad
     ShowBugTrackLink=Visa länken <strong>"%s"</strong>
     Alerts=Varningar
    -DelaysOfToleranceBeforeWarning=Tolerans förseningar innan varning
    -DelaysOfToleranceDesc=Den här skärmen kan du definiera den tillåtna dröjsmål innan en registrering rapporteras på skärmen med Picto %s för varje försenad element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Fördröjning tolerans (i dagar) före registrering om förslag att stänga
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Fördröjning tolerans (i dagar) före registrering om förslag faktureras inte
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerans fördröjning (i dagar) före registrering om tjänster för att aktivera
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerans fördröjning (i dagar) före registrering om passerat tjänster
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerans fördröjning (i dagar) före registrering om obetalda leverantörsfakturor
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerans fördröjning (i dagar) före registrering om obetalda klient fakturor
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerans fördröjning (i dagar) före registrering om väntan bankavstämning
    -Delays_MAIN_DELAY_MEMBERS=Tolerans fördröjning (i dagar) före registrering om försenad medlemsavgift
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerans fördröjning (i dagar) före registrering om kontroller insättning för att göra
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Andra menyalternativ hantera valfria parametrar.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Säkerhetsgranskning evenemang
     Audit=Revision
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=Du kan aktivera här loggning för Dolibarr säkerhet händelser. A
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information diverse teknisk information får du i skrivskyddad läge och synlig för administratörer bara.
     SystemAreaForAdminOnly=Detta område är tillgänglig för administratören användare. Ingen av de Dolibarr behörigheter kan minska denna gräns.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Du kan välja varje parameter i samband med Dolibarr utseendet här
     AvailableModules=Available app/modules
     ToActivateModule=För att aktivera moduler, gå på Setup-menyn (Hem-> Inställningar-> Modules).
     SessionTimeOut=Time out för session
    -SessionExplanation=Detta antal garantier för att mötet kommer aldrig ut före denna försening. Men PHP sessoin förvaltningen garanterar inte att session alltid löper ut efter denna fördröjning: Detta sker om ett system för att rensa cache session är igång. <br> Obs: utan särskilt system, interna PHP process kommer att rensa möte vart om <b>%s / %s</b> tillgång men endast vid tillträde från andra sessioner.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Tillgängliga triggers
    -TriggersDesc=Triggers är filer som kommer att ändra beteende Dolibarr arbetsflöde när kopieras till katalogen <b>htdocs / includes / triggers.</b> De insåg nya åtgärder, som aktiveras om Dolibarr händelser (nya bolaget skapande, faktura validering, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers i denna fil är inaktiverade <b>av-NORUN</b> suffixet i deras namn.
     TriggerDisabledAsModuleDisabled=Triggers i denna fil är funktionshindrade modul <b>%s</b> är inaktiverad.
     TriggerAlwaysActive=Triggers i denna fil är alltid aktiva, oavsett är det aktiverade Dolibarr moduler.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Gränser / Precision setup
    -LimitsDesc=Du kan definiera gränser, preciseringar och optimeringar som används av Dolibarr här
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimaler för priserna per enhet
     MAIN_MAX_DECIMALS_TOT=Max decimaler för total priser
     MAIN_MAX_DECIMALS_SHOWN=Max decimaler för priser som visas på skärmen (Lägg <b>...</b> efter detta nummer om du vill se <b>...</b> när numret är avkortas vid visas på skärmen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net priset per enhet för en produkt
     TotalPriceAfterRounding=Total kostnad (netto / behållare / inkl moms) efter avrundning
     ParameterActiveForNextInputOnly=Parameter effektiv för nästa inmatning
     NoEventOrNoAuditSetup=Ingen säkerhet händelsen har registrerats ännu. Detta kan vara normalt om revisionen inte har aktiverats på &quot;setup - säkerhet - revision&quot; sidan.
    -NoEventFoundWithCriteria=Ingen säkerhet händelse har konstaterats för sådan sökning sökkriterier.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Se din lokala sendmail setup
     BackupDesc=För att göra en fullständig säkerhetskopia av Dolibarr måste du:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Spara innehållet i din databas <b>(%s)</b> i en dumpfilen. För detta kan du använda följande assistent.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Arkiverade katalogen bör förvaras på ett säkert ställe.
     BackupDescY=Den genererade dumpfilen bör förvaras på ett säkert ställe.
    -BackupPHPWarning=Backup kan inte guaranted med denna metod. Föredrar tidigare ett
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Om du vill återställa en Dolibarr säkerhetskopia måste du:
    -RestoreDesc2=Återställa arkivfil (zip-fil till exempel) av dokumentkatalog för att extrahera träd filer i dokumentkatalog av en ny Dolibarr anläggning eller i den nuvarande dokument directoy <b>(%s).</b>
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Återställa data från en backup dumpfilen, i databasen av den nya Dolibarr installationen eller i databasen av den nuvarande anläggningen <b>(%s).</b> Varning, när återställningen är klar, måste du använda en användarnamn / lösenord, som fanns när säkerhetskopian gjordes, för att ansluta igen. Om du vill återställa en backup databas i detta aktuella installationen, kan du följa den här assistent.
     RestoreMySQL=MySQL import
     ForcedToByAModule= Denna regel tvingas <b>%s</b> av en aktiverad modul
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Du måste köra det här komman
     YourPHPDoesNotHaveSSLSupport=SSL-funktioner inte är tillgängliga i din PHP
     DownloadMoreSkins=Mer skinn att ladda ner
     SimpleNumRefModelDesc=Returnera referensnummer format %syymm-nnnn där YY är år, mm månaden och nnnn är en sekvens utan hål och utan återställning
    -ShowProfIdInAddress=Visa branschorganisationer id med adresser på dokument
    -ShowVATIntaInAddress=Dölj moms Intra num med adresser på dokument
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partiell översättning
    -MAIN_DISABLE_METEO=Inaktivera meteo vy
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Testa logga in API
    -ProxyDesc=Vissa funktioner i Dolibarr måste ha en Internet-tillgång till arbete. Definiera här parametrar för detta. Om Dolibarr servern finns bakom en proxyserver, berättar dessa parametrar Dolibarr hur man kommer åt Internet via den.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Extern åtkomst
     MAIN_PROXY_USE=Använd en proxyserver (annars direkt tillgång till Internet)
     MAIN_PROXY_HOST=Namn / adress proxyserver
     MAIN_PROXY_PORT=Port of proxyserver
     MAIN_PROXY_USER=Logga in för att använda proxyservern
     MAIN_PROXY_PASS=Lösenord för att använda proxyservern
    -DefineHereComplementaryAttributes=Här definierar du alla atributes inte redan finns tillgänglig som standard, och att du vill bli stöd för %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Komplementära egenskaper
     ExtraFieldsLines=Kompletterande attribut (rader)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Kompletterande attribut (orderrader)
     ExtraFieldsSupplierInvoicesLines=Kompletterande attribut (faktura linjer)
     ExtraFieldsThirdParties=Kompletterande attribut (tredjeparts)
    -ExtraFieldsContacts=Kompletterande attribut (kontaktperson / adress)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Kompletterande attribut (medlem)
     ExtraFieldsMemberType=Kompletterande attribut (ledamot typ)
     ExtraFieldsCustomerInvoices=Kompletterande attribut (fakturor)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=endast gemena alfanumeriska tecken utan mellans
     SendmailOptionNotComplete=Varning, på vissa Linux-system, för att skicka e-post från e-post, sendmail utförande inställning måste conatins Alternativ-ba (parameter mail.force_extra_parameters i din php.ini-fil). Om vissa mottagare inte emot e-post, försök att redigera den här PHP parameter med mail.force_extra_parameters =-BA).
     PathToDocuments=Sökväg till handlingar
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Funktion för att skicka e-post med hjälp av metoden "PHP mail direct" genererar ett e-postmeddelande som kanske inte tolkas korrekt av vissa e-postservrar. Resultatet är att viss epost inte kan läsas av användare som hostas på sådana system som tolkar fel. Det är fallet för vissa internetleverantörer (t.ex. Orange i Frankrike). Detta är inte ett Dolibarr- eller PHP-problem men fel på inkommande e-post server. Du kan sätta MAIN_FIX_FOR_BUGGED_MTA till 1 i "Setup - andra" för att Dolibarr ska undvika detta. Du kan dock uppleva problem med andra servrar som strikt följer SMTP standard. Den andra lösningen (Rekomenderad) är att använda metoden "SMTP socket library" som inte har några nackdelar.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Minst 1 modul måste aktiveras
    -ClassNotFoundIntoPathWarning=Klass %s inte funnen i PHP-sökvägen
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Ja, under sommaren
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session lagring krypteras av Suhosin
     ConditionIsCurrently=Condition är för närvarande% s
    -YouUseBestDriver=Du använder drivrutinen %s som är bäst drivrutin tillgänglig för tillfället.
    -YouDoNotUseBestDriver=Du använder enhet %s men förar %s rekommenderas.
    -NbOfProductIsLowerThanNoPb=Du har bara %s produkter / tjänster i databasen. Detta innebär inte behövs någon särskild optimering.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Sökoptimering
    -YouHaveXProductUseSearchOptim=Du har %s produkter i databasen. Du bör lägga den ständiga PRODUCT_DONOTSEARCH_ANYWHERE till 1 till Home-Setup-Övrigt begränsar du sökningen till början av strängar som gör möjligt för databasen att använda index och du bör få ett omedelbart svar.
    -BrowserIsOK=Du använder webbläsaren %s. Denna webbläsare är ok för säkerhet och prestanda.
    -BrowserIsKO=Du använder webbläsaren %s. Denna webbläsare är känt för att vara ett dåligt val för säkerhet, prestanda och tillförlitlighet. Vi rekommendera att du använder Firefox, Chrome, Opera eller Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=Xdebug är laddad.
     XCacheInstalled=Xcache är laddad.
    -AddRefInList=Visa kund- / leverantörreferens i lista (välj lista eller combobox) och del av hyperlink. Tredjepart visas med namn "CC12345 - SC45678 - Stor AB" istället för "Stor AB".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition av fält %s
     FillThisOnlyIfRequired=Exempel: +2 (fyll endast om tidszon offset problem är erfarna)
     GetBarCode=Få streckkod
     ##### Module password generation
     PasswordGenerationStandard=Återgå ett lösenord som genererats enligt interna Dolibarr algoritm: 8 tecken som innehåller delade siffror och tecken med gemener.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=E krävs för att skapa en ny användare
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Företag modul setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Dokument mallar
    -DocumentModelOdt=Generera dokument från OpenDocuments mallar (.odt eller .ods filer för Openoffice, KOffice, Textedit, ...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Vattenstämpel utkast
     JSOnPaimentBill=Aktivera funktionen för att fylla automatiskt betalningslinjer på inbetalningskort
    -CompanyIdProfChecker=Professionell Id unik
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=En export länk till <b>%s</b> format finns på följande länk: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=En export länk till <b>%s</b> format finns på följande
     BillsSetup=Fakturor modul setup
     BillsNumberingModule=Fakturor och kreditnotor numrering modul
     BillsPDFModules=Faktura dokument modeller
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Kreditnota
     CreditNotes=Kreditnotor
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Hantera en inloggning för varje medlem
     AdherentMailRequired=E krävs för att skapa en ny medlem
     MemberSendInformationByMailByDefault=Kryssruta för att skicka e-post bekräftelse till medlemmar (validering eller nya abonnemang) är aktiverat som standard
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP-inställningar
     LDAPGlobalParameters=Globala parametrar
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Testa en LDAP-sökning
     LDAPSynchroOK=Synkronisering test framgångsrika
     LDAPSynchroKO=Misslyckades synkronisering test
    -LDAPSynchroKOMayBePermissions=Misslyckades synkronisering test. Kontrollera att connexion att servern är korrekt konfigurerad och tillåter LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP ansluta till LDAP-servern framgångsrika (Server = %s, Port = %s)
     LDAPTCPConnectKO=TCP ansluta till LDAP-servern misslyckades (Server = %s, Port = %s)
    -LDAPBindOK=Anslut / Authentificate till LDAP-servern framgångsrik (Server =%s, Port =%s, Admin =%s, Lösenord = %s)
    -LDAPBindKO=Anslut / Authentificate till LDAP-servern misslyckades (Server = %s, Port = %s, Admin = %s, Lösenord = %s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP-server konfigurerad för version 3
     LDAPSetupForVersion2=LDAP-server konfigurerad för version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Logga in (samba, ActiveDirectory)
     LDAPFieldLoginSambaExample=Exempel: samaccountname
     LDAPFieldFullname=Förnamn Namn
     LDAPFieldFullnameExample=Exempel: cn
    -LDAPFieldPasswordNotCrypted=Lösenord krypterat inte
    -LDAPFieldPasswordCrypted=Lösenord krypterade
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Exempel: userPassword
     LDAPFieldCommonNameExample=Exempel: cn
     LDAPFieldName=Namn
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Exempel på värden är avsedda för <b>OpenLDAP</b> med följande laddade scheman: <b>core.schema, cosine.schema, inetorgperson.schema).</b> Om du använder thoose värderingar och OpenLDAP, ändra LDAP-fil <b>slapd.conf</b> config att ha alla thoose scheman laddad.
     ForANonAnonymousAccess=För en bestyrkt tillbehör (för en skrivåtkomst till exempel)
     PerfDolibarr=Prestanda inställningar / optimering rapport
    -YouMayFindPerfAdviceHere=Du kommer att hitta på den här sidan vissa kontroller eller råd relaterade till prestanda.
    -NotInstalled=Inte installerat, så din server inte sakta ner av detta.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applikativ cache
     MemcachedNotAvailable=Ingen applikativ cache hittades. Du kan förbättra prestanda genom att installera en cache-server Memcached och en modul kunna använda denna cache-server. <br> Mer information här <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a> . <br> Observera att en hel del webbhotell leverantör inte lämnar sådana cache-server.
     MemcachedModuleAvailableButNotSetup=Modul memcached för applikativ cache hittades men installationen av modulen är inte fullständig.
     MemcachedAvailableAndSetup=Modul memcached tillägnad använda memcached server är aktiverad.
     OPCodeCache=OPCODE cache
    -NoOPCodeCacheFound=Ingen opkod cache hittades. Får du använda en annan opcode cache än xcache eller eAccelerator (bra), kanske du inte har opkod cache (mycket dåligt).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP-cache för statiska resurser (css, img, javascript)
     FilesOfTypeCached=Filer av typen %s cachelagras av HTTP-server
     FilesOfTypeNotCached=Filer av typen %s är inte cachas av HTTP-server
     FilesOfTypeCompressed=Filer av typen %s komprimeras med HTTP-server
     FilesOfTypeNotCompressed=Filer av typen %s är inte komprimerade av HTTP-server
     CacheByServer=Cache med server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache med browser
     CompressionOfResources=Komprimering av HTTP-svar
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=En sådan automatisk detektering är inte möjligt med nuvarande webbläsare
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Produkter modul setup
     ServiceSetup=Tjänster modul konfiguration
     ProductServiceSetup=Produkter och tjänster moduler setup
     NumberOfProductShowInSelect=Max antal produkter i combos välj listor (0 = ingen gräns)
    -ViewProductDescInFormAbility=Visualisering av produktbeskrivning i formulären (i övrigt enligt popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Aktivera i produkt / tjänst Bifogade fliken Filer en möjlighet att slå samman produkt PDF-dokument till förslag PDF azur om produkten / tjänsten är på förslaget
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Även om du har ett stort antal produkter (> 100 000), kan du öka hastigheten genom att sätta konstant PRODUCT_DONOTSEARCH_ANYWHERE till 1 i Setup-> Övrigt. Sökningen kommer då att begränsas till start av strängen.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Standard streckkod som ska användas för produkter
     SetDefaultBarcodeTypeThirdParties=Standard streckkod som ska användas för tredje part
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sända modul setup
     SendingsReceiptModel=Att skicka kvitto modell
     SendingsNumberingModules=Sänts numrering moduler
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Fritext på fraktsedlar
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Produkter leveranser kvitto numrering modul
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Avancerad redaktör
     ActivateFCKeditor=Aktivera FCKeditor för:
     FCKeditorForCompany=WYSIWYG skapande / upplaga av Companie beskrivning och notera
     FCKeditorForProduct=WYSIWYG skapande / upplaga av produkter / tjänster: s beskrivning och anteckning
    -FCKeditorForProductDetails=WYSIWYG skapande / redigering av artikeldetaljrader för alla enheter (offertar, order, fakturor mm).  <font class="warning">Varning: Användning av detta alternativ är inte rekommenderat då det kan leda till problem med speciella tecken och sidformatering vid framställning av PDF-filer.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWYG skapande / utgåva av försändelser
     FCKeditorForUserSignature=WYSIWYG skapande / upplaga av signatur
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Anslutning lyckats men databasen ser inte ut att vara en OSCommerce databas (Key %s som inte finns i tabellen %s).
    -OSCommerceTestOk=Anslutning till servern &quot;%s&quot; på databas %s &quot;med användare&quot; %s framgångsrika.
    -OSCommerceTestKo1=Anslutning till servern &quot;%s&quot; lyckas, men databas %s &quot;kunde inte nås.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Anslutning till servern "% s" på databasen "% s" med användare "% s framgångsrika.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Anslutning till servern &quot;%s&quot; med användare &quot;%s&quot; misslyckades.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=Om du använder en Point of Sale-modul (POS modul som standard eller annan extern modul), kan denna inställning ignoreras av din Point Of Sale modul. De flesta point of sales moduler är utformade för att skapa omedelbart en faktura och minska lager som standard oavsett är alternativ här. Så, om du behöver eller inte ha ett bestånd minskar när du registrerar en sälja från din Point of Sale, kolla även din POS-modul inrättas.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Meny utgår
     Menus=Menyer
    @@ -1548,7 +1561,7 @@ DetailRight=Villkor för att visa obehörig grå menyer
     DetailLangs=Lang filnamn för märkningen kodnyckel
     DetailUser=Intern / Extern / Alla
     Target=Målet
    -DetailTarget=Mål för länkar (_blank överst öppna ett nytt fönster)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Nivå (-1: toppmenyn 0: header-menyn&gt; 0 menyn och undermeny)
     ModifMenu=Meny förändring
     DeleteMenu=Ta bort menyalternativet
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=Mervärdesskatt skall betalas: <br> - Om leverans / betalni
     OptionVatDebitOptionDesc=Mervärdesskatt skall betalas: <br> - Om leverans / betalning för varor <br> - På fakturan (debet) för tjänster
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Tid för moms exigibility standard enligt vald alternativ:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Vid leverans
     OnPayment=Mot betalning
     OnInvoice=På faktura
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Köpa konto. kod
     AgendaSetup=Åtgärder och dagordning modul setup
     PasswordTogetVCalExport=Viktiga att tillåta export länk
     PastDelayVCalExport=Inte exporterar fall äldre än
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Ställs in automatiskt denna typ av händelse till sökfilter av dagordning view
    -AGENDA_DEFAULT_FILTER_STATUS=Ställs in automatiskt denna status för evenemang till sökfilter av dagordning view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Vilken flik vill du öppna som standard vid val av meny Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Klicka för att Dial modul setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales modul setup
    -CashDeskThirdPartyForSell=Standard generiska tredje part att använda för Sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Konto som ska användas för att ta emot kontant betalning
     CashDeskBankAccountForCheque= Konto som ska användas för att ta emot betalningar med check
     CashDeskBankAccountForCB= Konto som ska användas för att ta emot kontant betalning med kreditkort
    -CashDeskDoNotDecreaseStock=Inaktivera lager minskar när en försäljning sker från Point of Sale (om "nej", stock minskning görs för varje säljer görs från POS, vad är alternativet inställt i modul Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Tvinga och begränsa lager att använda för aktie minskning
    -StockDecreaseForPointOfSaleDisabled=Stock minskning från Point of Sale inaktiv
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock minskning av POS är inte kompatibelt med mycket hantering
    -CashDeskYouDidNotDisableStockDecease=Du har inte inaktivera lager minskning när du gör en sälja från Point of Sale. Så ett lager krävs.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bokmärk modul setup
    -BookmarkDesc=Den här modulen kan du hantera bokmärken. Du kan också lägga genvägar till alla Dolibarr sidor eller externale webbplatser på din vänstra menyn.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximalt antal bokmärken som visas i vänstermenyn
     ##### WebServices #####
     WebServicesSetup=WebServices modul setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-bolag modul setup
     ##### Suppliers #####
     SuppliersSetup=Leverantör modul setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Leverantörsfakturor numrerings modeller
     IfSetToYesDontForgetPermission=Om satt till ja, glöm inte att ge behörighet till grupper eller användare som tillåts för den andra godkännande
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Projekt modul setup
     ProjectsModelModule=S rapport dokument modell
     TasksNumberingModules=Uppgifter nummermodulen
     TaskModelModule=Uppgifter rapporter dokumentmodell
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Du kan hitta alternativ f
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=Lista över fasta anmälningar
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Tröskelvärde
     BackupDumpWizard=Guiden för att bygga databas backup dumpfilen
     SomethingMakeInstallFromWebNotPossible=Installation av extern modul är inte möjligt från webbgränssnittet av följande skäl:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Installation av extern modul från ans
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Markera tabelllinjer när musen flytta passerar över
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Bakgrundsfärg för ännu bords linjer
     MinimumNoticePeriod=Minsta varseltid (Din ledighet begäran måste göras innan denna försening)
     NbAddedAutomatically=Antal dagar som läggs till räknare av användare (automatiskt) varje månad
     EnterAnyCode=Detta fält innehåller en hänvisning till identifiera linje. Ange något värde i ditt val, men utan specialtecken.
    -UnicodeCurrency=Ange här mellan hängslen, lista över bytenummer som representerar valutasymbolen. För exemple: för $ anger [36] - för brazil real R $ [82,36] - för €, ange [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line i kombinationslistor
     SellTaxRate=Försäljning skattesats
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=När du skapar en möjlighet, kommer du har definierat en uppskattad mängd projekt / bly. Enligt status möjligheter, kan detta belopp multiplicated av denna kurs att utvärdera totala beloppet alla dina möjligheter kan generera. Värdet är procent (mellan 0 och 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=Denna mall rekord är tillägnad vilket element
     TypeOfTemplate=Typ av mall
    -TemplateIsVisibleByOwnerOnly=Mall syns av ägaren endast
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=Timezone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/sv_SE/companies.lang b/htdocs/langs/sv_SE/companies.lang
    index 3360604cebf..2a0ee1467df 100644
    --- a/htdocs/langs/sv_SE/companies.lang
    +++ b/htdocs/langs/sv_SE/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Välj en tredje part
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Radera en kontakt
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Ny tredje part
    -MenuNewCustomer=Ny kund
    -MenuNewProspect=Ny möjlig kund
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Nya privatperson
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Skapa tredje part
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Tredje part kontakt/adress
     Company=Företag
     CompanyName=Företagets namn
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Företag
    -CountryIsInEEC=Landet är inom Europeiska ekonomiska gemenskapen
    -ThirdPartyName=Tredje parts namn
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Tredje part
    -ThirdParties=Tredje part
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Möjliga kunder
     ThirdPartyProspectsStats=Möjliga kunder
     ThirdPartyCustomers=Kunder
     ThirdPartyCustomersStats=Kunder
     ThirdPartyCustomersWithIdProf12=Kunder med %s eller %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Tredje part typ
    +ThirdPartyType=Type of company
     Individual=Privatperson
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Moderbolaget
     Subsidiaries=Dotterbolag
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Postnummer
     Town=Stad
     Web=Webb
     Poste= Position
    -DefaultLang=Språk som standard
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Förslag
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntaxen är giltigt
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Denna kund har en rabatt på <b>%s%%</b>
     CompanyHasNoRelativeDiscount=Denna kund har ingen relativ rabatt som standard
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Denna kund har fortfarande kreditnotor för <b>%s %s</b>
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Ingen
    -Supplier=Leverantör
    +Supplier=Vendor
     AddContact=Skapa kontakt
     AddContactAddress=Skapa kontakt / adress
     EditContact=Redigera kontakt / adress
    @@ -303,22 +303,22 @@ AddThirdParty=Skapa tredje part
     DeleteACompany=Ta bort ett företag
     PersonalInformations=Personuppgifter
     AccountancyCode=Redovisningskonto
    -CustomerCode=Kundnummer
    -SupplierCode=Vendor code
    -CustomerCodeShort=Kundnummer
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Kundnummer, unik för varje kund
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Krävs om tredje part är en kund eller möjlig kund
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Giltigheten kontrolleras av modul
    -ThisIsModuleRules=Detta är reglerna för denna modul
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Möjlig kund att kontakta
     CompanyDeleted=Företaget "%s" raderad från databasen.
     ListOfContacts=Lista med kontakter / adresser
     ListOfContactsAddresses=Lista med kontakter / adresser
    -ListOfThirdParties=Förteckning över tredje part
    -ShowCompany=Show third party
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Visa kontakt
     ContactsAllShort=Alla (inget filter)
     ContactType=Kontakttyp
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Denna kontakt är inte kontakt i någon kommersiell offe
     NoContactForAnyContract=Denna kontakt är inte kontakt för något kontrakt
     NoContactForAnyInvoice=Denna kontakt är inte kontakt för någon faktura
     NewContact=Ny kontakt
    -NewContactAddress=Ny kontakt / adress
    +NewContactAddress=New Contact/Address
     MyContacts=Mina kontakter
     Capital=Kapital
     CapitalOf=Kapital %s
     EditCompany=Redigera företag
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Kontrollera
    -VATIntraCheckDesc=Länken <b>%s</b> gör det möjligt att söka Europeiska moms tjänsten. Tillgång till internet från servern krävs för att denna tjänst ska fungera.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Kontrollera moms inom gemenskapen på EU-kommissionens webbplats
    -VATIntraManualCheck=Du kan också kontrollera manuellt från europeiska webbplatsen <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Kontroll inte möjlig. Kontrollera om tjänsten tillhandahålls av medlemsstaten (%s).
    -NorProspectNorCustomer=Varken möjlig kund eller kund
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Personal
     ProspectLevelShort=Potentiella
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export-kort för att formatera
     ContactNotLinkedToCompany=Kontakt ej länkad till någon tredje part
     DolibarrLogin=Dolibarr inloggning
     NoDolibarrAccess=Dolibarr ej nåbar
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Kontakter och egenskaper
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Prisnivå
     DeliveryAddress=Leveransadress
     AddAddress=Lägg till adress
    @@ -402,16 +402,16 @@ DeleteFile=Ta bort fil
     ConfirmDeleteFile=Är du säker på att du vill ta bort denna fil?
     AllocateCommercial=Assigned to sales representative
     Organization=Organisation
    -FiscalYearInformation=Information om räkenskapsåret
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Första månad av verksamhetsåret
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Lista över möjliga kunder
    -ListCustomersShort=Lista över kunder
    -ThirdPartiesArea=Tredje part och kontaktyta
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Totalt unika tredje part
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Öppen
     ActivityCeased=Stängt
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Obetalda fakturor
     OutstandingBill=Max för obetald faktura
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Kund / leverantör-nummer är ledig. Denna kod kan ändras när som helst.
     ManagingDirectors=Företagledares namn (vd, direktör, ordförande ...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/sv_SE/errors.lang b/htdocs/langs/sv_SE/errors.lang
    index d41fdfe2cd4..f8d0a502321 100644
    --- a/htdocs/langs/sv_SE/errors.lang
    +++ b/htdocs/langs/sv_SE/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Värde &quot;%s&quot; har fel datumformat
     ErrorWrongDate=Datum är inte korrekt!
     ErrorFailedToWriteInDir=Misslyckades med att skriva i katalogen %s
     ErrorFoundBadEmailInFile=Hittade felaktig e-syntax för %s rader i filen (t.ex. linje %s med email = %s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Vissa obligatoriska fält inte fylls.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Misslyckades med att skapa en katalog. Kontrollera att webbservern användaren har rättigheter att skriva till Dolibarr dokument katalogen. Om parametern <b>safe_mode</b> är aktiv på PHP, kontrollera att Dolibarr php-filer äger till webbserver användare (eller grupp).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Vänligen fyll i värde för utvald lista
     ErrorNoValueForCheckBoxType=Vänligen fyll i värde för krysslista
     ErrorNoValueForRadioType=Vänligen fyll i värde för radiolista
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Fält <b>%s</b> inte innehåller specialtecken.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Ingen bokföring modul aktiverad
     ErrorExportDuplicateProfil=Detta profilnamn finns redan för denna export.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matchning inte är fullständig.
     ErrorLDAPMakeManualTest=A. LDIF filen har genererats i katalogen %s. Försök att läsa in den manuellt från kommandoraden för att få mer information om fel.
    -ErrorCantSaveADoneUserWithZeroPercentage=Kan inte spara en åtgärd med &quot;inte Statut startade&quot; om fältet &quot;görs av&quot; är också fylld.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref används för att skapa finns redan.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Kan inte ta bort posten. Den används redan eller ingå i annat föremål.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript måste inte avaktiveras att ha denna funktion fungerar. Aktivera / inaktivera Javascript, gå till menyn Hem-> Inställningar-> Display.
     ErrorPasswordsMustMatch=Båda skrivit lösenord måste matcha varandra
    -ErrorContactEMail=Ett tekniskt fel uppstod. Vänligen kontakta administratören att följa <b>e-%s</b> en ge <b>%s</b> felkod i ditt meddelande, eller ännu bättre genom att lägga till en skärm kopia av denna sida.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Felaktigt värde för antalet <b>%s</b> området (värde <b>&quot;%s&quot;</b> inte matchar regex regel <b>%s)</b>
     ErrorFieldValueNotIn=Fel värde för <b>%s</b> fältnummer (värde <b>&quot;%s&quot;</b> är inte ett värde tillgängligt i fält <b>%s</b> av tabell <b>%s)</b>
     ErrorFieldRefNotIn=Fel värde för <b>%s</b> fältnummer (värde <b>&quot;%s&quot;</b> är inte ett <b>%s</b> befintlig ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Antivirusprogrammet inte har kunnat validera (fil
     ErrorSpecialCharNotAllowedForField=Speciella tecken är inte tillåtna för användning i fält &quot;%s&quot;
     ErrorNumRefModel=En hänvisning finns i databasen (%s) och är inte förenligt med denna numrering regel. Ta bort post eller bytt namn hänvisning till aktivera den här modulen.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Fel på masken
     ErrorBadMaskFailedToLocatePosOfSequence=Fel, mask utan löpnummer
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Fel, dåligt återställningsvärde
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Välj minst en post.
    -ErrorDeleteNotPossibleLineIsConsolidated=Bort icke möjlig, eftersom post är kopplad till en bank Kontoinformation som blidkades
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s tilldelas ett annat tredje
     ErrorFailedToSendPassword=Misslyckades med att skicka lösenord
     ErrorFailedToLoadRSSFile=Inte få RSS-flöde. Försök att lägga konstant MAIN_SIMPLEXMLLOAD_DEBUG Om felmeddelanden inte ger tillräckligt med information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Användaren med inloggning <b>%s</b> kunde inte hittas.
     ErrorLoginHasNoEmail=Denna användare har inga e-postadress. Process avbruten.
     ErrorBadValueForCode=Dåligt värde typer för kod. Försök igen med ett nytt värde ...
     ErrorBothFieldCantBeNegative=Fält %s och %s kan inte vara både negativt
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Kvantitet för linje i kundfakturor kan inte vara negativt
     ErrorWebServerUserHasNotPermission=Användarkonto <b>%s</b> användas för att exekvera webbserver har ingen behörighet för den
     ErrorNoActivatedBarcode=Ingen streckkod typ aktiveras
    @@ -138,7 +141,7 @@ ErrorBadFormat=Dåligt format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Fel, det finns några leveranser kopplade till denna sändning. Radering vägrade.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Kan inte ta bort en betalning som delas av minst en faktura med status betalt
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Kan inte tilldela till konstant '%s'
     ErrorPriceExpression2=Kan inte omdefiniera inbyggd funktion %s
     ErrorPriceExpression3=Odefinierad variabel '%s' i funktionsdefinition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Oväntad '%s'
     ErrorPriceExpression6=Fel antal argument (%s givet, %s förväntades)
     ErrorPriceExpression8=Oväntad operatör '%s'
     ErrorPriceExpression9=Ett oväntat fel uppstod
    -ErrorPriceExpression10=Iperator %s saknar operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Förväntar '%s'
     ErrorPriceExpression14=Division med noll
     ErrorPriceExpression17=Odefinierad variabel '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Ett bokmärke med denna avdelning eller detta mål
     WarningPassIsEmpty=Varning, är databasen lösenord tom. Detta är ett säkerhetshål. Du bör lägga till ett lösenord till din databas och ändra din conf.php fil som återspeglar detta.
     WarningConfFileMustBeReadOnly=Varning, konfigurationsfilen <b>(htdocs / conf / conf.php)</b> kan din skrivas över av den webbserver. Detta är ett allvarligt säkerhetshål. Ändra behörigheter på fil för att vara i skrivskyddat läge för operativsystem som användare som används av webbservern. Om du använder Windows och FAT format för din disk, måste du veta att det här filsystemet inte är möjligt att lägga till behörigheter för filen, så kan inte vara helt säker.
     WarningsOnXLines=Varningar om <b>%s</b> källrader
    -WarningNoDocumentModelActivated=Ingen modell för handling generation, har aktiverats. En modell kommer att valde som standard tills du kontrollera din modul konfiguration.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Varning, när installationen är klar måste du inaktivera installera / migrera verktyg genom att lägga till en fil <b>install.lock</b> i <b>katalogen %s.</b> Saknas denna fil så är det ett säkerhetshål.
    -WarningUntilDirRemoved=Alla säkerhetsvarningar (synlig av admin-användare) förblir aktiv så länge sårbarheten är närvarande (eller att konstant MAIN_REMOVE_INSTALL_WARNING läggs i Start-> Other Setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Varning, är stängning göras även om beloppet varierar mellan källa och mål element. Aktivera den här funktionen med försiktighet.
     WarningUsingThisBoxSlowDown=Varning, använder denna ruta bromsa allvarligt alla sidor som visar lådan.
     WarningClickToDialUserSetupNotComplete=Inställning av ClickToDial informationen för ditt användarkonto är inte fullständiga (se fliken ClickToDial på din användarkortet).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/sv_SE/interventions.lang b/htdocs/langs/sv_SE/interventions.lang
    index 75c0a003350..d174906e064 100644
    --- a/htdocs/langs/sv_SE/interventions.lang
    +++ b/htdocs/langs/sv_SE/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Insatser
     InterventionCard=Intervention kort
     NewIntervention=Nya insatser
     AddIntervention=Skapa ingripande
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Förteckning över åtgärder
     ActionsOnFicheInter=Åtgärder för ingripande
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/sv_SE/main.lang b/htdocs/langs/sv_SE/main.lang
    index 9dd3c43bb9f..21a26dc7b3f 100644
    --- a/htdocs/langs/sv_SE/main.lang
    +++ b/htdocs/langs/sv_SE/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Det gick inte att skicka e-post (avsändare = %s, mottagar
     ErrorFileNotUploaded=Filen har inte laddats upp. Kontrollera att storleken inte överskrider högsta tillåtna, att det finns plats på disken och att det inte redan finns en fil med samma namn i den här katalogen.
     ErrorInternalErrorDetected=Fel upptäckt
     ErrorWrongHostParameter=Fel värdparameter
    -ErrorYourCountryIsNotDefined=Ert land är inte definierat. Gå till Hem-Setup-Edit och post igen formuläret.
    -ErrorRecordIsUsedByChild=Misslyckades att ta bort denna post. Denna post används av minst en barn-post.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Fel värde
     ErrorWrongValueForParameterX=Felaktigt värde för parametern %s
     ErrorNoRequestInError=Ingen begäran av misstag
    -ErrorServiceUnavailableTryLater=Tjänsten är inte tillgänglig för tillfället. Försök igen senare.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Dublett-värde i ett unikt fält
    -ErrorSomeErrorWereFoundRollbackIsDone=Fel hittades. Vi återställer förändringarna.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> är inte definierad i Dolibarr konfigurationsfil <b>conf.php.</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Det gick inte att hitta användare <b>%s</b> i Dolibarr databas.
     ErrorNoVATRateDefinedForSellerCountry=Fel, ingen moms har definierats för landet '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Fel, kunde inte spara filen.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Ställ in datum
     SelectDate=Välj datum
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Filen har laddats upp
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=En fil är vald att bifogas, men har ännu inte laddats upp. Klicka på 'Bifoga fil' för detta.
    -NbOfEntries=Antal värden
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Läs hjälpen
     RecordSaved=Post sparades
    @@ -94,7 +94,7 @@ Undefined=Odefinierad
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=Se ovan
    -HomeArea=Hem område
    +HomeArea=Hem
     LastConnexion=Latest connection
     PreviousConnexion=Tidigare anslutning
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Stängt
     Closed2=Stängt
     NotClosed=Not closed
     Enabled=Aktiverat
    +Enable=Aktivera
     Deprecated=Föråldrad
     Disable=Inaktivera
     Disabled=Inaktiverad
    @@ -153,7 +154,7 @@ Update=Uppdatera
     Close=Stäng
     CloseBox=Remove widget from your dashboard
     Confirm=Bekräfta
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Ta bort
     Remove=Ta bort
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Kopiera
     Paste=Klistra in
     Default=Standard
     DefaultValue=Standardvärde
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Pris
     PriceCurrency=Price (currency)
     UnitPrice=Pris per enhet
    @@ -347,7 +348,7 @@ AmountTTCShort=Belopp (inkl. moms)
     AmountHT=Belopp (netto efter skatt)
     AmountTTC=Belopp (inkl. moms)
     AmountVAT=Belopp moms
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Ej tillämpligt
     ActionRunningNotStarted=Inte påbörjats
     ActionRunningShort=In progress
     ActionDoneShort=Färdiga
    -ActionUncomplete=Icke klar
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generera
     Duration=Längd
     TotalDuration=Total längd
     Summary=Sammanfattning
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Tillgängliga
     NotYetAvailable=Ännu inte tillgängligt
    @@ -468,7 +469,7 @@ and=och
     or=eller
     Other=Andra
     Others=Övrigt
    -OtherInformations=Övriga upplysningar
    +OtherInformations=Other information
     Quantity=Kvantitet
     Qty=Antal
     ChangedBy=Ändrad av
    @@ -506,7 +507,7 @@ None=Ingen
     NoneF=Ingen
     NoneOrSeveral=None or several
     Late=Sent
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Bild
     Photos=Bilder
    @@ -530,18 +531,6 @@ September=September
     October=Oktober
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=Maj
    -JuneMin=Jun
    -JulyMin=Juli
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Okt
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=Januari
     Month02=Februari
     Month03=Mars
    @@ -646,6 +635,8 @@ SendMail=Skicka e-post
     EMail=E-mail
     NoEMail=Ingen e-post
     Email=epost
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=Ingen mobiltelefon
     Owner=Ägare
     FollowingConstantsWillBeSubstituted=Följande konstanter kommer att ersätta med motsvarande värde.
    @@ -677,7 +668,7 @@ NeverReceived=Aldrig fick
     Canceled=Annullerad
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Färg
     Documents=Länkade filer
     Documents2=Dokument
    @@ -716,15 +707,15 @@ Merge=Sammanfoga
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Visa sidan för att skriva ut huvudinnehållet
     MenuManager=Menyhanteraren
    -WarningYouAreInMaintenanceMode=Varning, du är i en underhållsmode, så bara login <b>%s</b> får använda tillämpningen för tillfället.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Systemfel
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Kreditkort
     ValidatePayment=Bekräfta betalning
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fält med <b>%s</b> är obligatoriska
    -FieldsWithIsForPublic=Fält med <b>%s</b> visas på offentlig lista över medlemmar. Om du inte vill det, avmarkera "offentlig".
    -AccordingToGeoIPDatabase=(Enligt GeoIP omvandling)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Stöds inte
     RequiredField=Obligatoriskt fält
    @@ -732,6 +723,8 @@ Result=Resultat
     ToTest=Test
     ValidateBefore=Kortet måste valideras innan du använder den här funktionen
     Visibility=Synlighet
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Privat
     Hidden=Dolda
     Resources=Resurser
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Länk för att beställa
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Skapa utkast
     SetToDraft=Tillbaka till utkast
     ClickToEdit=Klicka för att redigera
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Per dag
     BySalesRepresentative=Genom säljare
     LinkedToSpecificUsers=Länkad till särskild användarekontakt
     NoResults=Inga resultat
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=Systemverktyg
     ModulesSystemTools=Modulverktyg
     Test=Test
     Element=Element
     NoPhotoYet=Inga bilder tillgängliga
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Avdragsgill
     from=från
     toward=mot
    @@ -802,7 +797,7 @@ PrintFile=Skriv ut fil %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Visar ingripande
     ShowContract=Visa kontrakt
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Radera rad
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Klassificera billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Kalender
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Evenemang
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Projekt
     Projects=Projekt
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Behörigheter
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Måndag
     Tuesday=Tisdag
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Insatser
     SearchIntoContracts=Kontrakt
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Räkningar
    -SearchIntoLeaves=Löv
    +SearchIntoLeaves=Leave
     CommentLink=Kommentarer
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Alla
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Påverkas i
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=Fil delad via länk
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/sv_SE/other.lang b/htdocs/langs/sv_SE/other.lang
    index ba1c762581c..a751e08a1d2 100644
    --- a/htdocs/langs/sv_SE/other.lang
    +++ b/htdocs/langs/sv_SE/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Säkerhetskod
     NumberingShort=N°
     Tools=Verktyg
     TMenuTools=Verktyg
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Födelsedag
     BirthdayDate=Birthday date
     DateToBirth=Födelsedatum
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Meddelande på validerade betalning återvänder sida
     MessageKO=Meddelande om avbokning betalning återvänder sida
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validerade
    -Notify_FICHINTER_SENTBYMAIL=Ingripande skickas per post
     Notify_ORDER_VALIDATE=Kundorder validerade
     Notify_ORDER_SENTBYMAIL=Kundorder skickas per post
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Leverantör beställning skickas per post
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Leverantör för godkänd
     Notify_ORDER_SUPPLIER_REFUSE=Leverantör för vägrat
     Notify_PROPAL_VALIDATE=Kunden förslag validerade
    -Notify_PROPAL_CLOSE_SIGNED=Kunden propal stängd tecknat
    -Notify_PROPAL_CLOSE_REFUSED=Kunden propal stängd vägrade
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Kommersiell förslag skickas per post
     Notify_WITHDRAW_TRANSMIT=Överföring tillbakadragande
     Notify_WITHDRAW_CREDIT=Credit tillbakadragande
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Tredje part som skapats
     Notify_COMPANY_SENTBYMAIL=Post som skickas från tredjepartskort
     Notify_BILL_VALIDATE=Kundfaktura validerade
     Notify_BILL_UNVALIDATE=Kundfakturan Fraktpris saknas
    -Notify_BILL_PAYED=Kundfaktura betalade
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Kundfaktura avbryts
     Notify_BILL_SENTBYMAIL=Kundfaktura skickas per post
     Notify_BILL_SUPPLIER_VALIDATE=Leverantörsfaktura validerade
    -Notify_BILL_SUPPLIER_PAYED=Leverantörsfaktura betalas
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Leverantör faktura skickas per post
     Notify_BILL_SUPPLIER_CANCELED=Leverantör faktura annulleras
     Notify_CONTRACT_VALIDATE=Kontrakt validerade
     Notify_FICHEINTER_VALIDATE=Intervention validerade
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Ingripande skickas per post
     Notify_SHIPPING_VALIDATE=Frakt validerade
     Notify_SHIPPING_SENTBYMAIL=Leverans skickas per post
     Notify_MEMBER_VALIDATE=Medlem validerade
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Projekt skapande
     Notify_TASK_CREATE=Task skapade
     Notify_TASK_MODIFY=Task modifierad
     Notify_TASK_DELETE=Uppgift utgår
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Antal bifogade filer / dokument
     TotalSizeOfAttachedFiles=Total storlek på bifogade filer / dokument
     MaxSize=Maximal storlek
     AttachANewFile=Bifoga en ny fil / dokument
     LinkedObject=Länkat objekt
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> är en information är beroende av tredje part land. <br> Till exempel för landets <b>%s,</b> det är kod <b>%s.</b>
     DolibarrDemo=Dolibarr ERP / CRM-demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Interventionen %s har validerats.
     EMailTextInvoiceValidated=Fakturan %s har validerats.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Förslaget %s har validerats.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Ordern %s har validerats.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Ordern %s har godkänts av %s.
     EMailTextOrderRefused=Ordern %s har avslagits.
     EMailTextOrderRefusedBy=Ordern %s har avslagits %s.
     EMailTextExpeditionValidated=Leveransen %s har validerats.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Import dataunderlaget
     DolibarrNotification=Automatisk anmälan
     ResizeDesc=Ange nya <b>bredd</b> eller ny höjd. Förhållandet kommer att hållas under storleksändring ...
    @@ -204,7 +212,7 @@ NewLength=Ny bredd
     NewHeight=Ny höjd
     NewSizeAfterCropping=Ny storlek efter beskärning
     DefineNewAreaToPick=Definiera nya området på bilden för att plocka (till vänster klicka på bilden och dra tills du kommer till motsatt hörn)
    -CurrentInformationOnImage=Detta verktyg har utformats för att hjälpa dig att ändra storlek på eller beskära en bild. Detta är informationer om aktuella redigerade bilden
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Bildredigerare
     YouReceiveMailBecauseOfNotification=Du får detta meddelande eftersom din e-post har lagts till i förteckningen över de mål som skall informeras om särskilda händelser i %s programvara %s.
     YouReceiveMailBecauseOfNotification2=Denna händelse är följande:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Export område
    diff --git a/htdocs/langs/sv_SE/projects.lang b/htdocs/langs/sv_SE/projects.lang
    index a148b37b8ec..c6c08153f1a 100644
    --- a/htdocs/langs/sv_SE/projects.lang
    +++ b/htdocs/langs/sv_SE/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Visa projekt
     ShowTask=Visa uppgift
     SetProject=Ställ projekt
     NoProject=Inget projekt definieras eller ägs
    -NbOfProjects=Nb av projekt
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Tid som tillbringas
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Förteckning över de kommersiella förslag i samband med projektet
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Förteckning över avtal i samband med projektet
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Lista över åtgärder i samband med projektet
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Förteckning över åtgärder i samband med projektet
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Uppgift %s skapad
     TaskModifiedInDolibarr=Uppgift %s modifierade
     TaskDeletedInDolibarr=Uppgift %s raderad
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Bidragsgivare
     SelectElement=Välj elementet
     AddElement=Länk till inslag
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planerad arbetsbelastning
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Förslag
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/sw_SW/admin.lang b/htdocs/langs/sw_SW/admin.lang
    index d7042e784dc..08508d4e6e8 100644
    --- a/htdocs/langs/sw_SW/admin.lang
    +++ b/htdocs/langs/sw_SW/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=Unknown
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/sw_SW/companies.lang b/htdocs/langs/sw_SW/companies.lang
    index b3e1e7b6c86..e5de5614886 100644
    --- a/htdocs/langs/sw_SW/companies.lang
    +++ b/htdocs/langs/sw_SW/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Company
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Closed
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/sw_SW/errors.lang b/htdocs/langs/sw_SW/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/sw_SW/errors.lang
    +++ b/htdocs/langs/sw_SW/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/sw_SW/interventions.lang b/htdocs/langs/sw_SW/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/sw_SW/interventions.lang
    +++ b/htdocs/langs/sw_SW/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/sw_SW/main.lang b/htdocs/langs/sw_SW/main.lang
    index 5d400fafa87..100a249f418 100644
    --- a/htdocs/langs/sw_SW/main.lang
    +++ b/htdocs/langs/sw_SW/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Other
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/sw_SW/other.lang b/htdocs/langs/sw_SW/other.lang
    index 8ef8cc30090..e8cd9b78d2f 100644
    --- a/htdocs/langs/sw_SW/other.lang
    +++ b/htdocs/langs/sw_SW/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/sw_SW/projects.lang b/htdocs/langs/sw_SW/projects.lang
    index e04f28689a1..aadd8b446df 100644
    --- a/htdocs/langs/sw_SW/projects.lang
    +++ b/htdocs/langs/sw_SW/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/th_TH/admin.lang b/htdocs/langs/th_TH/admin.lang
    index 1b3c4fcb25f..6145570691a 100644
    --- a/htdocs/langs/th_TH/admin.lang
    +++ b/htdocs/langs/th_TH/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=พัฒนาการ
     VersionUnknown=ไม่ทราบ
     VersionRecommanded=แนะนำ
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=จัดการที่จะบันทึกการ
     SessionSavePath=การจัดเก็บข้อมูลการแปลเซสชั่น
     PurgeSessions=ล้างของการประชุม
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=จัดการประหยัดเซสชั่นการกำหนดค่าใน PHP ของคุณไม่อนุญาตให้มีการแสดงรายการทั้งหมดประชุมทำงาน
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=ล็อคการเชื่อมต่อใหม่
    -ConfirmLockNewSessions=คุณแน่ใจหรือว่าต้องการ จำกัด การเชื่อมต่อ Dolibarr ใหม่ ๆ ให้กับตัวเอง <b>ผู้ใช้% s</b> เท่านั้นที่จะสามารถเชื่อมต่อหลังจากนั้น
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=ถอดตัวล็อคเชื่อมต่อ
     YourSession=เซสชั่นของคุณ
    -Sessions=เซสชั่นผู้ใช้
    +Sessions=Users sessions
     WebUserGroup=ผู้ใช้เว็บเซิร์ฟเวอร์ / กลุ่ม
    -NoSessionFound=PHP ของคุณดูเหมือนว่าจะไม่อนุญาตให้มีการแสดงรายการการประชุมที่ใช้งาน ไดเรกทอรีที่ใช้ในการบันทึกการประชุม <b>(% s)</b> อาจได้รับการคุ้มครอง (ตัวอย่างเช่นโดยการใช้สิทธิ์ OS หรือ PHP สั่ง open_basedir)
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=ฐานข้อมูล charset ในการเก็บข้อมูล
     DBSortingCharset=ฐานข้อมูล charset ในการจัดเรียงข้อมูล
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=ผู้ใช้ภายนอก
     InternalUsers=ผู้ใช้ภายใน
     ExternalUsers=ผู้ใช้ภายนอก
     GUISetup=แสดง
    -SetupArea=พื้นที่ติดตั้ง
    +SetupArea=การติดตั้ง
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=แบบทดสอบการอัปโหลดไฟล์ (ตามการตั้งค่า)
     IfModuleEnabled=หมายเหตุ: <b>ใช่จะมีผลเฉพาะถ้าโมดูล% s</b> ถูกเปิดใช้งาน
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=รหัสไม่สามารถมีค่า
     DisableJavascript=ปิดการใช้งาน JavaScript และฟังก์ชั่นอาแจ็กซ์ (แนะนำสำหรับคนตาบอดหรือเบราว์เซอร์ข้อความ)
     UseSearchToSelectCompanyTooltip=นอกจากนี้ถ้าคุณมีจำนวนมากของบุคคลที่สาม (> 100 000) คุณสามารถเพิ่มความเร็วโดยการตั้งค่า COMPANY_DONOTSEARCH_ANYWHERE คงเป็น 1 ใน Setup-> อื่น ๆ ค้นหาแล้วจะถูก จำกัด ในการเริ่มต้นของสตริง
     UseSearchToSelectContactTooltip=นอกจากนี้ถ้าคุณมีจำนวนมากของบุคคลที่สาม (> 100 000) คุณสามารถเพิ่มความเร็วโดยการตั้งค่า CONTACT_DONOTSEARCH_ANYWHERE คงเป็น 1 ใน Setup-> อื่น ๆ ค้นหาแล้วจะถูก จำกัด ในการเริ่มต้นของสตริง
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr ของตัวละครที่จะเรียกการค้นหา:% s
     NotAvailableWhenAjaxDisabled=ไม่สามารถใช้ได้เมื่ออาแจ็กซ์ปิดการใช้งาน
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=ตัวอย่างที่ไม่สามารถ
     ThemeCurrentlyActive=รูปแบบที่ใช้งานอยู่ในปัจจุบัน
     CurrentTimeZone=เขต PHP (เซิร์ฟเวอร์)
     MySQLTimeZone=เขตฐาน (ฐานข้อมูล)
    -TZHasNoEffect=วันที่มีการจัดเก็บและส่งกลับโดยเซิร์ฟเวอร์ฐานข้อมูลราวกับว่าพวกเขาจะถูกเก็บไว้เป็นสตริงยื่น เขตมีผลเฉพาะเมื่อใช้ฟังก์ชั่น UNIX_TIMESTAMP (ที่ไม่ควรนำมาใช้โดย Dolibarr ดังนั้นฐานข้อมูล TZ ควรจะมีไม่มีผลกระทบแม้ว่าการเปลี่ยนแปลงหลังจากถูกป้อนข้อมูล)
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=ช่องว่าง
     Table=ตาราง
     Fields=ทุ่ง
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=กระตือรือร้น
     SetupShort=การติดตั้ง
     OtherOptions=ตัวเลือกอื่น ๆ
    -OtherSetup=ตั้งค่าอื่น ๆ
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=คั่นทศนิยม
     CurrentValueSeparatorThousand=พันคั่น
     Destination=ปลายทาง
     IdModule=โมดูล ID
     IdPermissions=ID สิทธิ์
     LanguageBrowserParameter=s พารามิเตอร์%
    -LocalisationDolibarrParameters=พารามิเตอร์ภาษาท้องถิ่น
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=โซนเวลาไคลเอ็นต์ (ผู้ใช้)
     ClientHour=เวลาไคลเอ็นต์ (ผู้ใช้)
     OSTZ=ระบบปฏิบัติการเซิร์ฟเวอร์โซนเวลา
    @@ -126,8 +126,8 @@ PHPTZ=PHP เซิร์ฟเวอร์โซนเวลา
     DaylingSavingTime=ปรับเวลาตามฤดูกาล
     CurrentHour=PHP เวลา (เซิร์ฟเวอร์)
     CurrentSessionTimeOut=หมดเวลาการใช้งานปัจจุบัน
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (ภาษาเบราว์เซอร์)
     FeatureDisabledInDemo=ปิดใช้งานคุณลักษณะในการสาธิต
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=องค์ประกอบเฉพาะจาก <a href="%s">โมดูลที่เปิดใช้งาน</a> จะแสดง
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=ใหม่
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore สถานที่อย่างเป็นทางการสำหรับตลาด Dolibarr ERP / CRM โมดูลภายนอก
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=ลิงค์
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=จะไม่จัดเก็บรหัสผ่
     MainDbPasswordFileConfEncrypted=รหัสผ่านฐานข้อมูลการเข้ารหัสใน conf.php (เปิดใช้แนะนำ)
     InstrucToEncodePass=จะมีรหัสผ่านที่เข้ารหัสเป็นไฟล์ <b>conf.php</b> เปลี่ยนสาย <br> <b>$ dolibarr_main_db_pass = "... ";</b> <br> โดย <br> <b>$ dolibarr_main_db_pass = "crypted:% s";</b>
     InstrucToClearPass=จะมีรหัสผ่านถอดรหัส (ชัดเจน) เป็นไฟล์ <b>conf.php</b> เปลี่ยนสาย <br> <b>$ dolibarr_main_db_pass = "crypted ... ";</b> <br> โดย <br> <b>$ dolibarr_main_db_pass = "% s";</b>
    -ProtectAndEncryptPdfFiles=การคุ้มครองของไฟล์ PDF ที่สร้าง (เปิดใช้งานไม่แนะนำแบ่งไฟล์ PDF รุ่นมวล)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=ลักษณะ
     DolibarrLicense=อนุญาต
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=สำหรับผู้ใช้หรือเอกสารพัฒนา (หมอคำถามที่พบบ่อย ... ), <br> ดูที่วิกิพีเดีย Dolibarr: <br> <a href="%s" target="_blank"><b>% s</b></a>
     ForAnswersSeeForum=สำหรับคำถามใด ๆ / ความช่วยเหลือคุณสามารถใช้ฟอรั่ม Dolibarr: <br> <a href="%s" target="_blank"><b>% s</b></a>
    -HelpCenterDesc1=พื้นที่บริเวณนี้จะสามารถช่วยให้คุณได้รับบริการสนับสนุนช่วยเหลือใน Dolibarr
    -HelpCenterDesc2=<b>เป็นส่วนหนึ่งของบริการนี้บางส่วนที่มีอยู่ในภาษาอังกฤษเท่านั้น</b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=จัดการเมนูปัจจุบัน
     MeasuringUnit=หน่วยการวัด
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=ระยะเวลาการแจ้งให้ทราบ
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS พอร์ต (โดยค่าเริ่มต้นใน <b>php.ini:% s)</b>
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS โฮสต์ (โดยค่าเริ่มต้นใน <b>php.ini:% s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS พอร์ต (ไม่กำหนดเข้า PHP บนระบบปฏิบัติการยูนิกซ์เช่นระบบ)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS โฮสต์ (ไม่กำหนดเข้า PHP บนระบบปฏิบัติการยูนิกซ์เช่นระบบ)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= ส่งระบบคาร์บอนสำเนาซ่อนของอีเมลที่ส่งไปทั้งหมด
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=วิธีการที่จะใช้ในการส่งอีเมล
    -MAIN_MAIL_SMTPS_ID=ID SMTP หากตร​​วจสอบที่จำเป็น
    -MAIN_MAIL_SMTPS_PW=รหัสผ่าน SMTP หากตร​​วจสอบที่จำเป็น
    -MAIN_MAIL_EMAIL_TLS= ใช้ TLS (SSL) เข้ารหัส
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=ปิดการใช้งานตอบรับ SMS ทั้งหมด (สำหรับวัตถุประสงค์ในการทดสอบหรือการสาธิต)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=วิธีการที่จะใช้ในการส่ง SMS
    -MAIN_MAIL_SMS_FROM=เริ่มต้นหมายเลขโทรศัพท์ของผู้ส่งสำหรับการส่ง SMS
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=คุณลักษณะที่ไม่สามารถใช้ได้บน Unix เหมือนระบบ ทดสอบโปรแกรม sendmail ในประเทศของคุณ
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=การติดตั้งโมดูล
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=อย่าใช้ในการผลิต
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=ขั้นตอนที่% s
    -FindPackageFromWebSite=หาแพคเกจที่มีคุณลักษณะที่คุณต้องการ (ตัวอย่างเช่นในเว็บไซต์อย่างเป็นทางการของ% s)
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=แพคเกจการดาวน์โหลด (เช่นจากเว็บไซต์อย่างเป็นทางการ% s)
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=รุ่นปัจจุบัน Dolibarr
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= สำหรับการตอบสนองที่ล่าช้าในการส่งออกในไม่กี่วินาทีแคช (0 หรือที่ว่างเปล่าสำหรับแคชไม่ได้)
     DisableLinkToHelpCenter=ซ่อนลิงค์ <b>"ต้องการความช่วยเหลือหรือการสนับสนุน"</b> ในหน้าเข้าสู่ระบบ
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=ไม่มีการตัดอัตโนมัติดังนั้นหากสายจะออกจากหน้าเอกสารที่ยาวเกินไปเพราะคุณต้องเพิ่มผลตอบแทนการขนส่งด้วยตัวคุณเองใน textarea
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=ระยะเวลาขั้นต่ำ
     LanguageFilesCachedIntoShmopSharedMemory=ไฟล์ .lang โหลดในหน่วยความจำที่ใช้ร่วมกัน
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=ตัวอย่างกับการตั้งค่าการทำงานในปัจจุบัน
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=รายการ OpenDocument ไดเรกทอรีแม่
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=จำนวน ODT / ODS ไฟล์แม่แบบที่พบในไดเรกทอรีเหล่านั้น
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=ตัวอย่างของไวยากรณ์: <br> C: \\ mydir <br> / home / mydir <br> DOL_DATA_ROOT / ECM / ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br> หากต้องการทราบวิธีการสร้างเอกสารของคุณ ODT แม่ก่อนที่จะเก็บไว้ในไดเรกทอรีเหล่านั้นอ่านเอกสารวิกิพีเดีย:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=กุญแจสำคัญในการใช้
     TestSubmitForm=รูปแบบการทดสอบการป้อนข้อมูล
     ThisForceAlsoTheme=การใช้ตัวจัดการเมนูนี้จะใช้รูปแบบของตัวเองสิ่งที่เป็นทางเลือกของผู้ใช้ นอกจากนี้ผู้จัดการเมนูนี้พิเศษสำหรับมาร์ทโฟนไม่ได้งานมาร์ทโฟนทั้งหมด ใช้จัดการเมนูอื่นหากคุณพบปัญหากับคุณ
     ThemeDir=ไดเรกทอรีกิน
    -ConnectionTimeout=Connexion หมดเวลา
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=หมดเวลาการตอบสนอง
     SmsTestMessage=ข้อความทดสอบจาก __PHONEFROM__ เพื่อ __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=กุญแจสำคัญในการรักษาความปลอดภัย URL ที่
    -NoSmsEngine=ไม่มีผู้จัดการผู้ส่ง SMS ที่มีอยู่ ผู้จัดการผู้ส่ง SMS ไม่ได้ติดตั้งที่มีการกระจายค่าเริ่มต้น (เพราะพวกเขาขึ้นอยู่กับผู้จัดจำหน่ายภายนอก) แต่คุณสามารถหาบางอย่างเกี่ยวกับ% s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=รูปแบบไฟล์ PDF
    -PDFDesc=คุณสามารถตั้งค่าตัวเลือกในแต่ละระดับโลกที่เกี่ยวข้องกับการสร้างรูปแบบไฟล์ PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=กฎการปลอมกล่องที่อยู่
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=ซ่อนรายละเอียดผลิตภัณฑ์ที่เกี่ยวกับการสร้างรูปแบบไฟล์ PDF
     HideRefOnPDF=ซ่อนอ้างอิงผลิตภัณฑ์ ในการสร้างรูปแบบไฟล์ PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=พารามิเตอร์ URL ที่การ
     SecurityTokenIsUnique=ใช้พารามิเตอร์ SecureKey ไม่ซ้ำกันสำหรับแต่ละ URL
     EnterRefToBuildUrl=ป้อนการอ้างอิงสำหรับวัตถุ% s
     GetSecuredUrl=รับ URL คำนวณ
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=อัตราภาษีมูลค่าเพิ่มเก่า
     NewVATRates=ใหม่อัตราภาษีมูลค่าเพิ่ม
     PriceBaseTypeToChange=การปรับเปลี่ยนราคาค่าอ้างอิงกับฐานที่กำหนดไว้ใน
    @@ -408,13 +412,13 @@ ExtrafieldSelect = เลือกรายการ
     ExtrafieldSelectList = เลือกจากตาราง
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=รหัสผ่าน
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=เชื่อมโยงไปยังวัตถุ
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=เริ่มต้นการเชื่อมโยง
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=คำเตือนค่านี้อาจถูกเขียนทับโดยการตั้งค่าของผู้ใช้เฉพาะ (ผู้ใช้แต่ละคนสามารถตั้งค่า URL clicktodial ของตัวเอง)
     ExternalModule=โมดูลภายนอก - ติดตั้งลงในไดเรกทอรี% s
    -BarcodeInitForThirdparties=init บาร์โค้ดมวลสำหรับ thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=init บาร์โค้ดมวลหรือตั้งค่าสำหรับผลิตภัณฑ์หรือบริการ
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=ค่า init สำหรับถัด% ระเบียนที่ว่างเปล่า
     EraseAllCurrentBarCode=ลบทุกค่าบาร์โค้ดปัจจุบัน
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=ทั้งหมดค่าบาร์โค้ดได้ถูกลบออก
    -NoBarcodeNumberingTemplateDefined=ไม่มีแม่แบบบาร์โค้ดเลขที่เปิดใช้งานลงในการติดตั้งโมดูลบาร์โค้ด
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=สนาม
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=และกลุ่มผู้ใช้
    +Module0Name=ผู้ใช้และกลุ่ม
     Module0Desc=Users / Employees and Groups management
    -Module1Name=บุคคลที่สาม
    +Module1Name=Third Parties
     Module1Desc=บริษัท และการจัดการรายชื่อผู้ติดต่อ (ลูกค้ากลุ่มเป้าหมาย ... )\n
     Module2Name=เชิงพาณิชย์
     Module2Desc=การจัดการเชิงพาณิชย์
     Module10Name=การบัญชี
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=ข้อเสนอ
     Module20Desc=การจัดการข้อเสนอในเชิงพาณิชย์
     Module22Name=E-จดหมายจำนวนมาก
    @@ -511,13 +517,13 @@ Module52Desc=การบริหารจัดการสต็อก (ส
     Module53Name=บริการ
     Module53Desc=การจัดการบริการ
     Module54Name=สัญญา / สมัครสมาชิก
    -Module54Desc=การบริหารจัดการของสัญญา (บริการหรือการสมัครสมาชิก reccuring)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=บาร์โค้ด
     Module55Desc=การจัดการบาร์โค้ด
     Module56Name=โทรศัพท์
     Module56Desc=รวมโทรศัพท์
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=บูรณาการของระบบ ClickToDial (ดอกจัน, ... )
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=ค่าใช้จ่ายและบันทึกการ
     Module75Desc=ค่าใช้จ่ายและการจัดการบันทึกการเดินทาง
     Module80Name=การจัดส่ง
     Module80Desc=การจัดส่งและการจัดการการสั่งซื้อการจัดส่ง
    -Module85Name=ธนาคารและเงินสด
    +Module85Name=Banks and Cash
     Module85Desc=การบริหารจัดการของธนาคารหรือบัญชีเงินสด
    -Module100Name=เว็บไซต์ภายนอก
    -Module100Desc=โมดูลนี้จะรวมถึงเว็บไซต์ภายนอกหรือหน้าในเมนู Dolibarr และดูเป็นกรอบ Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=บุรุษไปรษณีย์และหลักสูตรนานาชาติ
     Module105Desc=บุรุษไปรษณีย์หรือหลักสูตรนานาชาติอินเตอร์เฟซสำหรับโมดูลสมาชิก
     Module200Name=LDAP
    -Module200Desc=ประสานไดเรกทอรี LDAP
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=บูรณาการ PostNuke
     Module240Name=ข้อมูลการส่งออก
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=การนำเข้าข้อมูล
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=สมาชิก
     Module310Desc=มูลนิธิการจัดการสมาชิก
     Module320Name=RSS Feed
     Module320Desc=เพิ่มฟีด RSS ภายใน Dolibarr หน้าจอ
    -Module330Name=ที่คั่นหน้า
    -Module330Desc=การจัดการที่คั่นหน้า
    -Module400Name=โครงการ / โอกาส / นำ
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=บูรณาการ Webcalendar
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=เงินกู้
     Module520Desc=การบริหารจัดการของเงินให้สินเชื่อ
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=การบริจาค
     Module700Desc=การจัดการการบริจาค
     Module770Name=รายงานค่าใช้จ่าย
    -Module770Desc=การบริหารจัดการและการเรียกร้องรายงานค่าใช้จ่าย (การขนส่ง, อาหาร, ... )
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=ตั๊กแตนตำข้าว
    @@ -576,13 +582,13 @@ Module1520Desc=สร้างเอกสารอีเมล์จำนว
     Module1780Name=แท็ก / หมวดหมู่
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=แก้ไขแบบ WYSIWYG
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=ราคาแบบไดนามิก
     Module2200Desc=เปิดใช้งานการใช้งานของการแสดงออกทางคณิตศาสตร์สำหรับราคา
     Module2300Name=งานที่กำหนดเวลาไว้
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=เปิดใช้งานเซิร์ฟเวอร์ S
     Module2610Name=API/Web services (REST server)
     Module2610Desc=เปิดใช้งานเซิร์ฟเวอร์ Dolibarr REST API ให้บริการ
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=เปิดใช้งานเว็บ Dolibarr บริการลูกค้า (สามารถใช้ในการผลักดันข้อมูล / การร้องขอไปยังเซิร์ฟเวอร์ภายนอก. คำสั่งผู้สนับสนุนเฉพาะสำหรับช่วงเวลา)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=ใช้บริการ Gravatar ออนไลน์ (www.gravatar.com) เพื่อแสดงภาพของผู้ใช้ / สมาชิก (พบกับอีเมลของพวกเขา) ต้องเชื่อมต่ออินเทอร์เน็ต
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=ไคลเอนต์ FTP
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind ความสามารถในการแปลง
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=ระบบบริหารจัดการทรัพยากรบุคคล
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=หลาย บริษัท
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=ขอออกจากการบริหารจัดการ
    -Module20000Desc=ประกาศและติดตามพนักงานใบร้องขอ
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=จำนวนมากหรือหมายเลขกินโดยและขายโดยการจัดการวันที่เกี่ยวกับผลิตภัณฑ์
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=จุดขาย
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=จุดขาย
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=บัญชี (ขั้นสูง)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=พิมพ์โดยตรง (โดยไม่ต้องเปิดเอกสาร) โดยใช้อินเตอร์เฟซถ้วยไอพีพี (เครื่องพิมพ์จะต้องมองเห็นจากเซิร์ฟเวอร์และ CUPS จะต้อง installe บนเซิร์ฟเวอร์)
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=อัตรากำไรขั้นต้น
     Module59000Desc=โมดูลการจัดการอัตรากำไรขั้นต้น
     Module60000Name=คณะกรรมการ
     Module60000Desc=โมดูลการจัดการค่าคอมมิชชั่น
    -Module62000Name=Incoterm
    -Module62000Desc=เพิ่มคุณสมบัติในการจัดการ Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=ทรัพยากร
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=อ่านใบแจ้งหนี้ของลูกค้า
    @@ -651,9 +661,9 @@ Permission32=สร้าง / แก้ไขผลิตภัณฑ์
     Permission34=ลบผลิตภัณฑ์
     Permission36=ดู / จัดการผลิตภัณฑ์ที่ซ่อน
     Permission38=สินค้าส่งออก
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=ลบโครงการ (โครงการและโครงการที่ใช้ร่วมกันฉันติดต่อ)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=อ่านการแทรกแซง
     Permission62=สร้าง / แก้ไขการแทรกแซง
    @@ -686,7 +696,7 @@ Permission109=ลบตอบรับ
     Permission111=อ่านบัญชีการเงิน
     Permission112=สร้าง / แก้ไข / ลบและเปรียบเทียบการทำธุรกรรม
     Permission113=การตั้งค่าบัญชีการเงิน (สร้างจัดการหมวดหมู่)
    -Permission114=Reconciliate การทำธุรกรรม
    +Permission114=Reconcile transactions
     Permission115=การทำธุรกรรมการส่งออกและงบบัญชี
     Permission116=โอนเงินระหว่างบัญชี
     Permission117=จัดการฝึกอบรมการตรวจสอบ
    @@ -694,15 +704,15 @@ Permission121=อ่านบุคคลที่สามที่เชื่
     Permission122=สร้าง / แก้ไขบุคคลที่สามที่เชื่อมโยงไปยังผู้ใช้
     Permission125=ลบบุคคลที่สามที่เชื่อมโยงไปยังผู้ใช้
     Permission126=บุคคลที่สามส่งออก
    -Permission141=อ่านทุกโครงการและงาน (ยังเป็นโครงการส่วนตัวฉันไม่ได้ติดต่อเพื่อขอ)
    -Permission142=สร้าง / แก้ไขทุกโครงการและงาน (ยังเป็นโครงการส่วนตัวฉันไม่ได้ติดต่อเพื่อขอ)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=ลบทุกโครงการและงาน (ยังเป็นโครงการส่วนตัวฉันไม่ได้ติดต่อเพื่อขอ)
     Permission146=อ่านให้บริการ
     Permission147=อ่านสถิติ
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=อ่านสัญญา / สมัครสมาชิก
     Permission162=สร้าง / แก้ไขสัญญา / สมัครสมาชิก
     Permission163=เปิดใช้งานบริการ / สมัครสมาชิกของสัญญา
    @@ -725,7 +735,7 @@ Permission187=คำสั่งซัพพลายเออร์ปิด
     Permission188=ยกเลิกคำสั่งผู้จัดจำหน่าย
     Permission192=สร้างเส้น
     Permission193=ยกเลิกสาย
    -Permission194=อ่านเส้นแบนด์วิดธ์
    +Permission194=Read the bandwidth lines
     Permission202=สร้างการเชื่อมต่อ ADSL
     Permission203=การเชื่อมต่อการสั่งซื้อสั่งซื้อสินค้า
     Permission204=การเชื่อมต่อการสั่งซื้อ
    @@ -750,12 +760,12 @@ Permission244=ดูเนื้อหาของหมวดหมู่ที
     Permission251=อ่านผู้ใช้และกลุ่มอื่น ๆ
     PermissionAdvanced251=อ่านผู้ใช้อื่น ๆ
     Permission252=อ่านสิทธิ์ของผู้อื่น
    -Permission253=สร้าง / แก้ไขผู้ใช้อื่น ๆ กลุ่มและ permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=สร้าง / แก้ไขผู้ใช้ภายใน / ภายนอกและการอนุญาต
     Permission254=สร้าง / แก้ไขผู้ใช้ภายนอกเท่านั้น
     Permission255=แก้ไขรหัสผ่านผู้ใช้อื่น ๆ
     Permission256=ลบหรือปิดการใช้งานผู้ใช้อื่น ๆ
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=อ่าน CA
     Permission272=อ่านใบแจ้งหนี้
     Permission273=ใบแจ้งหนี้ฉบับ
    @@ -765,7 +775,7 @@ Permission283=ลบรายชื่อ
     Permission286=รายชื่อที่ส่งออก
     Permission291=อ่านภาษี
     Permission292=กำหนดสิทธิในการเก็บภาษีศุลกากร
    -Permission293=การปรับเปลี่ยนอัตราภาษีศุลกากรซอ
    +Permission293=Modify customers tariffs
     Permission300=อ่านบาร์โค้ด
     Permission301=สร้าง / แก้ไขบาร์โค้ด
     Permission302=ลบบาร์โค้ด
    @@ -787,11 +797,9 @@ Permission401=อ่านส่วนลด
     Permission402=สร้าง / แก้ไขส่วนลด
     Permission403=ตรวจสอบส่วนลด
     Permission404=ลบส่วนลด
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=ลบเงินเดือน
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=เงินเดือนส่งออก
     Permission520=อ่านสินเชื่อ
     Permission522=สร้าง / แก้ไขการให้กู้ยืมเงิน
    @@ -844,8 +852,8 @@ Permission1251=เรียกมวลของการนำเข้าข
     Permission1321=ส่งออกใบแจ้งหนี้ของลูกค้าคุณลักษณะและการชำระเงิน
     Permission1322=Reopen a paid bill
     Permission1421=ส่งออกสั่งซื้อของลูกค้าและคุณลักษณะ
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=ลบออกจากการร้องขอ
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=ระดับศักยภาพ Prospect
     DictionaryCanton=รัฐ / จังหวัด
     DictionaryRegion=ภูมิภาค
    @@ -894,7 +902,7 @@ DictionaryVAT=ภาษีมูลค่าเพิ่มราคาหรื
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=เงื่อนไขการชำระเงิน
     DictionaryPaymentModes=โหมดการชำระเงิน
    -DictionaryTypeContact=ติดต่อเรา / ที่อยู่ประเภท
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=รูปแบบกระดาษ
    @@ -908,47 +916,47 @@ DictionarySource=แหล่งที่มาของข้อเสนอ /
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=รุ่นสำหรับผังบัญชี
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=แม่แบบอีเมล
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=หน่วย
     DictionaryProspectStatus=สถานะ prospection
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=สถานะการเปิดโอกาสให้โครงการ / นำ
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=การตั้งค่าที่บันทึกไว้
     SetupNotSaved=Setup not saved
     BackToModuleList=กลับไปยังรายการโมดูล
    -BackToDictionaryList=กลับไปยังรายการพจนานุกรม
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=การบริหารจัดการภาษีมูลค่าเพิ่ม
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=โดยเริ่มต้นภาษีมูลค่าเพิ่มเสนอเป็น 0 ซึ่งสามารถนำมาใช้สำหรับกรณีเช่นสมาคมบุคคลอู บริษัท ขนาดเล็ก
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=ประเมิน
     LocalTax1IsNotUsed=อย่าใช้ภาษีที่สอง
    -LocalTax1IsUsedDesc=ใช้ประเภทที่สองของภาษี (นอกเหนือจากภาษีมูลค่าเพิ่ม)
    -LocalTax1IsNotUsedDesc=อย่าใช้ชนิดอื่น ๆ ของภาษี (นอกเหนือจากภาษีมูลค่าเพิ่ม)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=ประเภทที่สองของภาษี
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=อย่าใช้ภาษีที่สาม
    -LocalTax2IsUsedDesc=ใช้ชนิดที่สามของภาษี (นอกเหนือจากภาษีมูลค่าเพิ่ม)
    -LocalTax2IsNotUsedDesc=อย่าใช้ชนิดอื่น ๆ ของภาษี (นอกเหนือจากภาษีมูลค่าเพิ่ม)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=ชนิดที่สามของภาษี
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= การบริหารจัดการเรื่อง
    -LocalTax1IsUsedDescES= อัตรา RE โดยค่าเริ่มต้นเมื่อมีการสร้างโอกาสในใบแจ้งหนี้การสั่งซื้อ ฯลฯ ตามกฎมาตรฐานที่ใช้งาน: <br> ถ้าผู้ซื้อเต้ไม่ได้อยู่ภายใต้การ RE, RE โดยค่าเริ่มต้น = 0 ในตอนท้ายของการปกครอง <br> ถ้าผู้ซื้ออยู่ภายใต้การ RE RE แล้วโดยปริยาย ในตอนท้ายของการปกครอง <br>
    -LocalTax1IsNotUsedDescES= โดยค่าเริ่มต้นเรื่องที่นำเสนอเป็น 0 ในตอนท้ายของการปกครอง
    -LocalTax1IsUsedExampleES= ในประเทศสเปนพวกเขาเป็นมืออาชีพภายใต้บางส่วนที่เฉพาะเจาะจงของสเปน IAE
    -LocalTax1IsNotUsedExampleES= ในประเทศสเปนพวกเขาเป็นมืออาชีพและสังคมและอาจมีบางส่วนของสเปน IAE
    -LocalTax2ManagementES= การบริหารจัดการ IRPF
    -LocalTax2IsUsedDescES= อัตรา RE โดยค่าเริ่มต้นเมื่อมีการสร้างโอกาสในใบแจ้งหนี้การสั่งซื้อ ฯลฯ ตามกฎมาตรฐานที่ใช้งาน: <br> หากผู้ขายไม่ได้อยู่ภายใต้การ IRPF แล้ว IRPF โดยค่าเริ่มต้น = 0 ในตอนท้ายของการปกครอง <br> หากผู้ขายได้อยู่ภายใต้การ IRPF แล้ว IRPF โดยค่าเริ่มต้น ในตอนท้ายของการปกครอง <br>
    -LocalTax2IsNotUsedDescES= โดยค่าเริ่มต้น IRPF เสนอคือ 0 สิ้นสุดของการปกครอง
    -LocalTax2IsUsedExampleES= ในสเปนมือปืนรับจ้างและอาชีพอิสระที่ให้บริการและ บริษัท ที่ได้รับเลือกให้ระบบภาษีของโมดูล
    -LocalTax2IsNotUsedExampleES= ในประเทศสเปนพวกเขาจะ bussines ไม่อยู่ภายใต้ระบบภาษีของโมดูล
    +LocalTax1ManagementES=การบริหารจัดการเรื่อง
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=โดยค่าเริ่มต้นเรื่องที่นำเสนอเป็น 0 ในตอนท้ายของการปกครอง
    +LocalTax1IsUsedExampleES=ในประเทศสเปนพวกเขาเป็นมืออาชีพภายใต้บางส่วนที่เฉพาะเจาะจงของสเปน IAE
    +LocalTax1IsNotUsedExampleES=ในประเทศสเปนพวกเขาเป็นมืออาชีพและสังคมและอาจมีบางส่วนของสเปน IAE
    +LocalTax2ManagementES=การบริหารจัดการ IRPF
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=โดยค่าเริ่มต้น IRPF เสนอคือ 0 สิ้นสุดของการปกครอง
    +LocalTax2IsUsedExampleES=ในสเปนมือปืนรับจ้างและอาชีพอิสระที่ให้บริการและ บริษัท ที่ได้รับเลือกให้ระบบภาษีของโมดูล
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=รายงานเกี่ยวกับภาษีท้องถิ่น
     CalcLocaltax1=ขาย - ซื้อ
     CalcLocaltax1Desc=รายงานภาษีท้องถิ่นที่มีการคำนวณมีความแตกต่างระหว่างการขายและการซื้อ localtaxes localtaxes
    @@ -958,7 +966,8 @@ CalcLocaltax3=ขาย
     CalcLocaltax3Desc=รายงานภาษีท้องถิ่นรวมของยอดขาย localtaxes
     LabelUsedByDefault=ฉลากใช้โดยเริ่มต้นถ้าแปลไม่สามารถพบได้สำหรับรหัส
     LabelOnDocuments=ป้ายเกี่ยวกับเอกสาร
    -NbOfDays=nb วัน
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=ในตอนท้ายของเดือน
     CurrentNext=Current/Next
     Offset=สาขา
    @@ -984,7 +993,7 @@ DatabaseUser=ผู้ใช้ฐานข้อมูล
     DatabasePassword=รหัสผ่านฐานข้อมูล
     Tables=ตาราง
     TableName=ชื่อตาราง
    -NbOfRecord=nb ของระเบียน
    +NbOfRecord=No. of records
     Host=เซิร์ฟเวอร์
     DriverType=ชนิดตัวขับ
     SummarySystem=สรุปข้อมูลระบบ
    @@ -996,7 +1005,7 @@ Skin=ธีมผิว
     DefaultSkin=ธีมเริ่มต้นผิว
     MaxSizeList=ความยาวสูงสุดสำหรับรายชื่อ
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=ข้อความของวัน
     MessageLogin=ข้อความหน้าเข้าสู่ระบบ
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=แบบฟอร์มการค้นหาถา
     DefaultLanguage=ภาษาเริ่มต้นที่จะใช้ (รหัสภาษา)
     EnableMultilangInterface=เปิดใช้งานอินเตอร์เฟซที่พูดได้หลายภาษา
     EnableShowLogo=โลโก้แสดงบนเมนูด้านซ้าย
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=ชื่อ
     CompanyAddress=ที่อยู่
     CompanyZip=ไปรษณีย์
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=เจ้าของบัญชีธนาคารขอ
     BankModuleNotActive=โมดูลบัญชีธนาคารไม่ได้เปิดใช้
     ShowBugTrackLink=แสดงการเชื่อมโยง <strong>"% s"</strong>
     Alerts=การแจ้งเตือน
    -DelaysOfToleranceBeforeWarning=ความล่าช้าความอดทนก่อนที่จะเตือน
    -DelaysOfToleranceDesc=หน้าจอนี้จะช่วยให้คุณสามารถกำหนดความล่าช้าทนแจ้งเตือนก่อนที่จะมีรายงานบนหน้าจอด้วย s picto% สำหรับแต่ละองค์ประกอบปลาย
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=ความอดทนล่าช้า (ในวัน) ก่อนที่จะแจ้งเตือนเกี่ยวกับข้อเสนอที่จะปิด
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=ความอดทนล่าช้า (ในวัน) ก่อนที่จะแจ้งเตือนเกี่ยวกับข้อเสนอการเรียกเก็บเงินไม่ได้
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=ความล่าช้าความอดทน (ในวัน) ก่อนที่จะแจ้งเตือนในการให้บริการเพื่อเปิดใช้งาน
    -Delays_MAIN_DELAY_RUNNING_SERVICES=ความล่าช้าความอดทน (ในวัน) ก่อนที่จะแจ้งเตือนเกี่ยวกับการบริการที่หมดอายุ
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=ความล่าช้าความอดทน (ในวัน) ก่อนที่จะแจ้งเตือนในใบแจ้งหนี้ที่ค้างชำระผู้จัดจำหน่าย
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=ความล่าช้าอดทน (ในวัน) ก่อนที่จะแจ้งเตือนในใบแจ้งหนี้ลูกค้าที่ค้างชำระ
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=ความล่าช้าความอดทน (ในวัน) ก่อนที่จะแจ้งเตือนเกี่ยวกับการตรวจสอบธนาคารอยู่ระหว่างดำเนินการ
    -Delays_MAIN_DELAY_MEMBERS=ความล่าช้าความอดทน (ในวัน) ก่อนที่จะแจ้งเตือนเกี่ยวกับค่าสมาชิกล่าช้า
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=ความล่าช้าความอดทน (ในวัน) ก่อนที่จะแจ้งเตือนสำหรับการฝากเงินการตรวจสอบที่จะทำ
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=รายการเมนูอื่น ๆ จัดการพารามิเตอร์ที่ไม่จำเป็น
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=ตรวจสอบเหตุการณ์การรักษาความปลอดภัย
     Audit=การตรวจสอบบัญชี
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=คุณสามารถเปิดใช้การเข้
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=ข้อมูลระบบข้อมูลทางด้านเทคนิคอื่น ๆ ที่คุณได้รับในโหมดอ่านอย่างเดียวและมองเห็นสำหรับผู้ดูแลระบบเท่านั้น
     SystemAreaForAdminOnly=บริเวณนี้เป็นที่ใช้ได้สำหรับผู้ใช้ผู้ดูแลระบบเท่านั้น ไม่มีสิทธิ์ Dolibarr สามารถลดขีด จำกัด นี้
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=คุณสามารถเลือกแต่ละพารามิเตอร์ที่เกี่ยวข้องกับ Dolibarr มองและความรู้สึกที่นี่
     AvailableModules=Available app/modules
     ToActivateModule=เพื่อเปิดใช้งานโมดูลไปในพื้นที่การติดตั้ง (หน้าแรก> Setup-> โมดูล)
     SessionTimeOut=หมดเวลาสำหรับเซสชั่น
    -SessionExplanation=รับประกันหมายเลขนี้ที่เซสชั่นจะไม่มีวันหมดอายุก่อนที่จะล่าช้านี้ถ้าทำความสะอาดเซสชั่นจะกระทำโดยการทำความสะอาดภายใน PHP เซสชั่น (และไม่มีอะไรอื่น) PHP เซสชั่นทำความสะอาดภายในไม่รับประกันว่าเซสชั่นจะหมดอายุหลังจากที่ล่าช้านี้ <b>มันจะหมดอายุหลังจากที่ล่าช้านี้และเมื่อทำความสะอาดเซสชั่นที่มีการวิ่งเพื่อให้ทุก% s /% s</b> เข้าถึง แต่เฉพาะในช่วงการเข้าถึงที่ทำโดยการประชุมอื่น ๆ <br> หมายเหตุ: บนเซิร์ฟเวอร์บางคนที่มีกลไกการทำความสะอาดเซสชั่นภายนอก (cron ภายใต้เดเบียน, อูบุนตู ... ), การประชุมสามารถถูกทำลายหลังจากระยะเวลาที่กำหนดโดย <strong>session.gc_maxlifetime</strong> เริ่มต้นไม่ว่าสิ่งที่มีค่าเข้ามาที่นี่
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=มีจำหน่ายทริกเกอร์
    -TriggersDesc=ทริกเกอร์เป็นไฟล์ที่จะปรับเปลี่ยนพฤติกรรมของ Dolibarr เวิร์กโฟลว์เคยถูกคัดลอกลงใน <b>htdocs</b> ไดเรกทอรี <b>/ core / ทริกเกอร์</b> พวกเขาตระหนักถึงการกระทำใหม่เปิดใช้งานเกี่ยวกับเหตุการณ์ Dolibarr (การสร้าง บริษัท ใหม่การตรวจสอบใบแจ้งหนี้, ... )
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=ทริกเกอร์ในแฟ้มนี้มีการปิดใช้งานโดยต่อท้าย <b>-NORUN</b> ในชื่อของพวกเขา
     TriggerDisabledAsModuleDisabled=<b>ทริกเกอร์ในแฟ้มนี้ถูกปิดใช้งานเป็นของโมดูล%</b> ถูกปิดใช้งาน
     TriggerAlwaysActive=ทริกเกอร์ในแฟ้มนี้มีการใช้งานอยู่เสมอสิ่งที่มีการเปิดใช้งานโมดูล Dolibarr
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=ข้อ จำกัด / การตั้งค่าความแม่นยำ
    -LimitsDesc=คุณสามารถกำหนดวงเงินแม่นยำและ optimisations ใช้โดย Dolibarr ที่นี่
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=ทศนิยมซ์ราคาต่อหน่วย
     MAIN_MAX_DECIMALS_TOT=ทศนิยมแม็กซ์ราคารวม
     MAIN_MAX_DECIMALS_SHOWN=แม็กซ์ทศนิยมสำหรับราคาที่แสดงบนหน้าจอ (เพิ่ม <b>...</b> หลังจากนี้ถ้าคุณต้องการที่จะเห็น <b>...</b> เมื่อจำนวนถูกตัดทอนเมื่อแสดงบนหน้าจอ)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=ราคาต่อหน่วยสุทธิของ
     TotalPriceAfterRounding=ราคารวม (บาท / ถัง / รวมภาษี) หลังจากการปัดเศษ
     ParameterActiveForNextInputOnly=พารามิเตอร์ที่มีประสิทธิภาพสำหรับการป้อนข้อมูลต่อไปเท่านั้น
     NoEventOrNoAuditSetup=เหตุการณ์การรักษาความปลอดภัยที่ไม่ได้รับการบันทึกไว้ยัง นี้จะมีการตรวจสอบตามปกติถ้าไม่ได้รับการเปิดใช้งานบน "การตั้งค่า - การรักษาความปลอดภัย - การตรวจสอบหน้า"
    -NoEventFoundWithCriteria=เหตุการณ์การรักษาความปลอดภัยที่ไม่ได้พบเกณฑ์การค้นหาดังกล่าว
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=ดูการตั้งค่าของคุณ sendmail ท้องถิ่น
     BackupDesc=เพื่อให้การสำรองข้อมูลที่สมบูรณ์ของ Dolibarr คุณต้อง:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=บันทึกเนื้อหาของฐานข้อมูลของคุณ <b>(% s)</b> ลงในแฟ้มการถ่ายโอนข้อมูล สำหรับนี้คุณสามารถใช้ผู้ช่วยต่อไปนี้
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=ไดเรกทอรีเก็บควรเก็บไว้ในสถานที่ที่ปลอดภัย
     BackupDescY=สร้างแฟ้มการถ่ายโอนควรเก็บไว้ในสถานที่ที่ปลอดภัย
    -BackupPHPWarning=การสำรองข้อมูลไม่สามารถ guaranted ด้วยวิธีนี้ ชอบก่อนหน้านี้
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=ในการเรียกคืนการสำรองข้อมูล Dolibarr คุณต้อง:
    -RestoreDesc2=เรียกคืนไฟล์ที่เก็บถาวร (zip ไฟล์ตัวอย่าง) ของไดเรกทอรีเอกสารที่จะดึงต้นไม้ของไฟล์ในไดเรกทอรีเอกสารของการติดตั้งใหม่หรือ Dolibarr ลงในเอกสารปัจจุบันนี้ Directoy <b>(% s)</b>
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=เรียกคืนข้อมูลจากแฟ้มการถ่ายโอนข้อมูลการสำรองข้อมูลลงในฐานข้อมูลของการติดตั้ง Dolibarr ใหม่หรือลงในฐานข้อมูลของการติดตั้งปัจจุบันนี้ <b>(% s)</b> คำเตือนเมื่อคืนเสร็จแล้วคุณต้องใช้เข้าสู่ระบบ / รหัสผ่านที่มีอยู่เมื่อการสำรองข้อมูลที่ถูกสร้างขึ้นเพื่อเชื่อมต่ออีกครั้ง เพื่อเรียกคืนฐานข้อมูลสำรองลงในนี้ติดตั้งปัจจุบันคุณสามารถทำตามนี้ช่วย
     RestoreMySQL=นำเข้า MySQL
     ForcedToByAModule= <b>กฎนี้ถูกบังคับให้% โดยการเปิดใช้งานโมดูล</b>
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=<b>คุณต้องเร
     YourPHPDoesNotHaveSSLSupport=ฟังก์ชั่น SSL ไม่สามารถใช้ได้ใน PHP ของคุณ
     DownloadMoreSkins=กินมากขึ้นในการดาวน์โหลด
     SimpleNumRefModelDesc=ส่งกลับจำนวนการอ้างอิงที่มีรูปแบบ% syymm-nnnn ที่ yy เป็นปีเป็นเดือนมิลลิเมตรและ nnnn เป็นลำดับโดยไม่ต้องหลุมและมีการตั้งค่าไม่มี
    -ShowProfIdInAddress=แสดงรหัสวิชาชีพที่มีที่อยู่ในเอกสาร
    -ShowVATIntaInAddress=ซ่อน NUM ภาษีมูลค่าเพิ่มภายในที่มีที่อยู่ในเอกสาร
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=แปลบางส่วน
    -MAIN_DISABLE_METEO=ปิดการใช้งานมุมมอง Meteo
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=เข้าสู่ระบบทดสอบ API
    -ProxyDesc=คุณลักษณะบางอย่างของ Dolibarr จำเป็นต้องมีการเข้าถึงอินเทอร์เน็ตที่ทำงาน กำหนดค่าพารามิเตอร์ที่นี่สำหรับเรื่องนี้ ถ้าเซิร์ฟเวอร์ Dolibarr อยู่เบื้องหลังเซิร์ฟเวอร์พร็อกซีพารามิเตอร์เหล่านั้นบอก Dolibarr วิธีการเข้าถึงอินเทอร์เน็ตผ่านมัน
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=การเข้าถึงจากภายนอก
     MAIN_PROXY_USE=ใช้พร็อกซีเซิร์ฟเวอร์ (เข้าถึงโดยตรงกับอินเทอร์เน็ตเป็นอย่างอื่น)
     MAIN_PROXY_HOST=ชื่อ / ที่อยู่ของเซิร์ฟเวอร์พร็อกซี่
     MAIN_PROXY_PORT=ท่าเรือร็อกซี่เซิร์ฟเวอร์
     MAIN_PROXY_USER=เข้าสู่ระบบที่จะใช้พร็อกซีเซิร์ฟเวอร์
     MAIN_PROXY_PASS=รหัสผ่านที่จะใช้พร็อกซีเซิร์ฟเวอร์
    -DefineHereComplementaryAttributes=กำหนดคุณลักษณะที่นี่ทั้งหมดไม่ได้อยู่แล้วโดยเริ่มต้นและที่คุณต้องการที่จะได้รับการสนับสนุนสำหรับ% s
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=คุณลักษณะที่สมบูรณ์
     ExtraFieldsLines=คุณลักษณะเสริม (เส้น)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=คุณลักษณะเสริม (เส้นตามลำดับ)
     ExtraFieldsSupplierInvoicesLines=คุณลักษณะเสริม (เส้นใบแจ้งหนี้)
     ExtraFieldsThirdParties=คุณลักษณะเสริม (thirdparty)
    -ExtraFieldsContacts=คุณลักษณะเสริม (ติดต่อ / ที่อยู่)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=คุณลักษณะเสริม (สมาชิก)
     ExtraFieldsMemberType=คุณลักษณะเสริม (ประเภทสมาชิก)
     ExtraFieldsCustomerInvoices=คุณลักษณะเสริม (ใบแจ้งหนี้)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=alphanumericals เท่านั้นแล
     SendmailOptionNotComplete=คำเตือนในบางระบบลินุกซ์ที่จะส่งอีเมลจากอีเมลของคุณตั้งค่าการดำเนินการต้องมี sendmail -ba ตัวเลือก (mail.force_extra_parameters พารามิเตอร์ลงในไฟล์ php.ini ของคุณ) หากผู้รับบางคนไม่เคยได้รับอีเมลพยายามที่จะแก้ไขพารามิเตอร์ PHP นี้กับ mail.force_extra_parameters = -ba)
     PathToDocuments=เส้นทางไปยังเอกสาร
     PathDirectory=สารบบ
    -SendmailOptionMayHurtBuggedMTA=คุณสมบัติที่จะส่งอีเมลโดยใช้วิธีการ "PHP mail โดยตรง" จะสร้างข้อความอีเมลที่อาจจะไม่ได้แยกวิเคราะห์ได้อย่างถูกต้องโดยบางส่วนที่ได้รับเมลเซิร์ฟเวอร์ ผลที่ได้คืออีเมลบางอย่างไม่สามารถอ่านได้โดยคนที่เป็นเจ้าภาพโดยแพลตฟอร์มร้องเหล่านั้น เป็นกรณีสำหรับบางผู้ให้บริการอินเทอร์เน็ต (Ex: ออเรนจ์ในประเทศฝรั่งเศส) ซึ่งไม่เป็นปัญหาเข้า Dolibarr หรือเข้า PHP แต่บนเซิร์ฟเวอร์อีเมลที่ได้รับ แต่คุณสามารถเพิ่มตัวเลือก MAIN_FIX_FOR_BUGGED_MTA 1 เข้าสู่การตั้งค่า - อื่น ๆ ที่จะปรับเปลี่ยน Dolibarr หลีกเลี่ยงปัญหานี้ แต่คุณอาจพบปัญหากับเซิร์ฟเวอร์อื่น ๆ ที่เคารพอย่างเคร่งครัดมาตรฐาน SMTP วิธีการแก้ปัญหาอื่น ๆ (แนะนำ) คือการใช้วิธีการ "ห้องสมุด SMTP ซ็อกเก็ต" ที่มีข้อเสียไม่มี
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=คุณต้องเปิดการใช้งานอย่างน้อย 1 โมดูล
    -ClassNotFoundIntoPathWarning=คลาส% s ไม่พบเ​​ข้ามาในเส้นทาง PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=ใช่ในช่วงฤดู​​ร้อน
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=เซสชั่นการจัดเก็บข้อมูลที่มีการเข้ารหัสโดย Suhosin
     ConditionIsCurrently=สภาพปัจจุบันคือ% s
    -YouUseBestDriver=คุณสามารถใช้โปรแกรมควบคุม% s ที่เป็นคนขับรถที่ดีที่สุดที่มีอยู่ในปัจจุบัน
    -YouDoNotUseBestDriver=คุณสามารถใช้ไดรฟ์% s แต่คนขับ% s จะแนะนำ
    -NbOfProductIsLowerThanNoPb=คุณมีเพียง% s ผลิตภัณฑ์ / บริการลงในฐานข้อมูล นี้ไม่จำเป็นต้องมีการเพิ่มประสิทธิภาพใด ๆ โดยเฉพาะอย่างยิ่ง
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=ค้นหาการเพิ่มประสิทธิภาพ
    -YouHaveXProductUseSearchOptim=คุณมีผลิตภัณฑ์% s ลงในฐานข้อมูล คุณควรเพิ่ม PRODUCT_DONOTSEARCH_ANYWHERE คงที่ 1 เข้าไปในบ้านติดตั้งแบบอื่น ๆ , คุณ จำกัด การค้นหาเพื่อจุดเริ่มต้นของสายทำให้เป็นไปได้สำหรับฐานข้อมูลเพื่อใช้ดัชนีและคุณควรจะได้รับการตอบสนองทันที
    -BrowserIsOK=คุณกำลังใช้เบราว์เซอร์% s เบราว์เซอร์นี้เป็น ok สำหรับการรักษาความปลอดภัยและประสิทธิภาพการทำงาน
    -BrowserIsKO=คุณกำลังใช้เบราว์เซอร์% s เบราว์เซอร์นี้เป็นที่รู้จักกันจะเป็นทางเลือกที่ดีสำหรับการรักษาความปลอดภัยประสิทธิภาพและความน่าเชื่อถือ เรา recommand คุณใช้ Firefox, Chrome, Opera หรือ Safari
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug โหลด
     XCacheInstalled=XCache โหลด
    -AddRefInList=ลูกค้าแสดง / ผู้จัดจำหน่ายอ้างอิงในรายการ (เลือกรายการหรือ ComboBox) และส่วนใหญ่เชื่อมโยงหลายมิติ บุคคลที่สามจะปรากฏขึ้นพร้อมกับชื่อ "CC12345 - SC45678 - บริษัท ขนาดใหญ่ coorp" แทนที่จะเป็น "บริษัท ขนาดใหญ่ coorp"
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=ฉบับของสนาม% s
     FillThisOnlyIfRequired=ตัวอย่าง: 2 (กรอกข้อมูลเฉพาะในกรณีที่เขตเวลาชดเชยปัญหาที่มีประสบการณ์)
     GetBarCode=รับบาร์โค้ด
     ##### Module password generation
     PasswordGenerationStandard=กลับสร้างรหัสผ่านตามขั้นตอนวิธี Dolibarr ภายใน: 8 ตัวอักษรที่ใช้ร่วมกันที่มีตัวเลขและตัวอักษรตัวพิมพ์เล็ก
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=อีเมลที่จำเป็นในการสร
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=บริษัท ติดตั้งโมดูล
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=แม่แบบเอกสาร
    -DocumentModelOdt=เอกสารที่สร้างจากแม่แบบ OpenDocuments (.odt หรือไฟล์ .ods สำหรับ OpenOffice, KOffice, TextEdit, ... )
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=ลายน้ำในเอกสารร่าง
     JSOnPaimentBill=เปิดใช้งานคุณลักษณะในการป้อนอัตโนมัติสายการชำระเงินในรูปแบบการชำระเงิน
    -CompanyIdProfChecker=หลักเกณฑ์ในการมืออาชีพหมายเลข
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=<b>การเชื่อมโยงการส่งออกไปยังรูปแบบ% s</b> สามารถดูได้ที่ลิงค์ต่อไปนี้:% s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=<b>การเชื่อมโยงการส่ง
     BillsSetup=ใบแจ้งหนี้การติดตั้งโมดูล
     BillsNumberingModule=ใบแจ้งหนี้และบันทึกหมายเลขบัตรเครดิตรูปแบบ
     BillsPDFModules=รูปแบบเอกสารใบแจ้งหนี้
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=ใบลดหนี้
     CreditNotes=บันทึกเครดิต
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= เข้าสู่ระบบการจัดกา
     AdherentMailRequired=อีเมลจำเป็นในการสร้างสมาชิกใหม่
     MemberSendInformationByMailByDefault=ช่องทำเครื่องหมายยืนยันที่จะส่งอีเมลไปยังสมาชิก (การตรวจสอบหรือการสมัครสมาชิกใหม่) เป็นตามค่าเริ่มต้น
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=ติดตั้ง LDAP
     LDAPGlobalParameters=พารามิเตอร์ทั่วโลก
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= ทดสอบค้นหา LDAP
     LDAPSynchroOK=การประสานข้อมูลการทดสอบที่ประสบความสำเร็จ
     LDAPSynchroKO=การทดสอบการประสานล้มเหลว
    -LDAPSynchroKOMayBePermissions=การทดสอบการประสานล้มเหลว ตรวจสอบการเชื่อมโยงไปยังเซิร์ฟเวอร์ที่มีการกำหนดค่าได้อย่างถูกต้องและช่วยให้ udpates LDAP
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP เชื่อมต่อกับเซิร์ฟเวอร์ LDAP ที่ประสบความสำเร็จ (เซิร์ฟเวอร์ =% s พอร์ต =% s)
     LDAPTCPConnectKO=TCP เชื่อมต่อกับเซิร์ฟเวอร์ LDAP ล้มเหลว (เซิร์ฟเวอร์ =% s พอร์ต =% s)
    -LDAPBindOK=เชื่อมต่อ / Authentificate ไปยังเซิร์ฟเวอร์ LDAP ที่ประสบความสำเร็จ (เซิร์ฟเวอร์ =% s พอร์ต =% s, Admin =% s, รหัสผ่าน =% s)
    -LDAPBindKO=เชื่อมต่อ / Authentificate ไปยังเซิร์ฟเวอร์ LDAP ล้มเหลว (เซิร์ฟเวอร์ =% s พอร์ต =% s, Admin =% s, รหัสผ่าน =% s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=การกำหนดค่าเซิร์ฟเวอร์ LDAP สำหรับรุ่นที่ 3
     LDAPSetupForVersion2=เซิร์ฟเวอร์ LDAP การกำหนดค่าสำหรับรุ่นที่ 2
     LDAPDolibarrMapping=Dolibarr แมป
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=เข้าสู่ระบบ (samba, ActiveDirectory)
     LDAPFieldLoginSambaExample=ตัวอย่าง: samAccountName
     LDAPFieldFullname=ชื่อเต็ม
     LDAPFieldFullnameExample=ตัวอย่าง: CN
    -LDAPFieldPasswordNotCrypted=รหัสผ่านไม่ crypted
    -LDAPFieldPasswordCrypted=รหัสผ่าน crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=ตัวอย่าง: userpassword
     LDAPFieldCommonNameExample=ตัวอย่าง: CN
     LDAPFieldName=ชื่อ
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=ค่าตัวอย่างได้รับการออกแบบสำหรับ <b>OpenLDAP</b> กับแบบแผนโหลดต่อไปนี้: <b>core.schema, cosine.schema, inetorgperson.schema)</b> ถ้าคุณใช้ค่า thoose และ OpenLDAP แก้ไขไฟล์ config LDAP ของคุณ <b>slapd.conf</b> จะมีแบบแผน thoose ทั้งหมดที่โหลด
     ForANonAnonymousAccess=สำหรับการเข้าถึงรับรองความถูกต้อง (สำหรับการเข้าถึงการเขียนตัวอย่าง)
     PerfDolibarr=ผลการดำเนินงานการติดตั้ง / รายงานการเพิ่มประสิทธิภาพ
    -YouMayFindPerfAdviceHere=คุณจะพบในหน้านี้การตรวจสอบบางส่วนหรือคำแนะนำที่เกี่ยวข้องกับประสิทธิภาพ
    -NotInstalled=ไม่ได้ติดตั้งเพื่อให้เซิร์ฟเวอร์ของคุณไม่ได้ชะลอตัวลงนี้
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=แคชปรับใช้
     MemcachedNotAvailable=ไม่มีแคช applicative พบ คุณสามารถเพิ่มประสิทธิภาพการทำงานโดยการติดตั้งเซิร์ฟเวอร์แคช Memcached โมดูลและสามารถที่จะใช้เซิร์ฟเวอร์แคชนี้ <br> ข้อมูลเพิ่มเติมที่นี่ <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a> <br> โปรดทราบว่าจำนวนมากของผู้ให้บริการเว็บโฮสติ้งไม่ได้ให้เซิร์ฟเวอร์แคชดังกล่าว
     MemcachedModuleAvailableButNotSetup=โมดูล memcached สำหรับแคช applicative พบ แต่การตั้งค่าของโมดูลยังไม่สมบูรณ์
     MemcachedAvailableAndSetup=โมดูล memcached ทุ่มเทให้กับการใช้เซิร์ฟเวอร์ memcached ถูกเปิดใช้งาน
     OPCodeCache=แคช opcode
    -NoOPCodeCacheFound=ไม่มีแคช opcode พบ คุณอาจจะใช้แคช opcode อีกกว่า XCache หรือ eAccelerator (ดี) อาจจะเป็นคุณไม่ได้มีแคช opcode (ดีมาก)
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=แคช HTTP สำหรับทรัพยากรแบบคงที่ (CSS, img, JavaScript)
     FilesOfTypeCached=แฟ้ม s พิมพ์% จะถูกเก็บไว้โดยเซิร์ฟเวอร์ HTTP
     FilesOfTypeNotCached=แฟ้ม s พิมพ์% ไม่ได้เก็บไว้โดยเซิร์ฟเวอร์ HTTP
     FilesOfTypeCompressed=ไฟล์ประเภท% s จะถูกบีบอัดโดยเซิร์ฟเวอร์ HTTP
     FilesOfTypeNotCompressed=แฟ้ม s พิมพ์% ไม่ได้บีบอัดโดยเซิร์ฟเวอร์ HTTP
     CacheByServer=แคชโดยเซิร์ฟเวอร์
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=แคชเบราว์เซอร์
     CompressionOfResources=การบีบอัดของการตอบสนอง HTTP
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=ดังกล่าวตรวจสอบโดยอัตโนมัติเป็นไปไม่ได้กับเบราว์เซอร์ในปัจจุบัน
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=ผลิตภัณฑ์การติดตั้งโมดูล
     ServiceSetup=บริการติดตั้งโมดูล
     ProductServiceSetup=ผลิตภัณฑ์และบริการการติดตั้งโมดูล
     NumberOfProductShowInSelect=จำนวนสูงสุดของผลิตภัณฑ์ในคอมโบเลือกรายการ (0 = ไม่ จำกัด )
    -ViewProductDescInFormAbility=การแสดงของคำอธิบายผลิตภัณฑ์ในรูปแบบ (คำแนะนำเป็นอย่างอื่นเป็นป๊อปอัพ)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=เปิดใช้งานในผลิตภัณฑ์ / บริการที่แนบมาไฟล์ที่แท็บตัวเลือกที่จะผสานเอกสาร PDF สินค้ากับข้อเสนอในรูปแบบ PDF azur หากผลิตภัณฑ์ / บริการที่อยู่ในข้อเสนอ
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=นอกจากนี้ถ้าคุณมีจำนวนมากของผลิตภัณฑ์ (> 100 000) คุณสามารถเพิ่มความเร็วโดยการตั้งค่า PRODUCT_DONOTSEARCH_ANYWHERE คงเป็น 1 ใน Setup-> อื่น ๆ ค้นหาแล้วจะถูก จำกัด ในการเริ่มต้นของสตริง
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=ประเภทบาร์โค้ดเริ่มต้นที่จะใช้สำหรับผลิตภัณฑ์
     SetDefaultBarcodeTypeThirdParties=ประเภทบาร์โค้ดเริ่มต้นที่จะใช้สำหรับบุคคลที่สาม
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=ส่งติดตั้งโมดูล
     SendingsReceiptModel=รูปแบบการส่งใบเสร็จรับเงิน
     SendingsNumberingModules=sendings โมดูลจำนวน
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=ข้อความฟรีในการจัดส่ง
     ##### Deliveries #####
     DeliveryOrderNumberingModules=สินค้าที่ได้รับการส่งมอบโมดูลหมายเลข
    @@ -1515,18 +1528,18 @@ AdvancedEditor=ตกแต่ง
     ActivateFCKeditor=เปิดใช้งานขั้นสูงสำหรับบรรณาธิการ:
     FCKeditorForCompany=WYSIWIG สร้าง / ฉบับคำอธิบายองค์ประกอบและทราบ (ยกเว้นผลิตภัณฑ์ / บริการ)
     FCKeditorForProduct=สร้าง WYSIWIG / รุ่นของผลิตภัณฑ์ / คำอธิบายการบริการและการบันทึก
    -FCKeditorForProductDetails=WYSIWIG สร้าง / รุ่นของผลิตภัณฑ์เส้นรายละเอียดสำหรับทุกหน่วยงาน (ข้อเสนอการสั่งซื้อใบแจ้งหนี้ ฯลฯ ... ) <font class="warning">คำเตือน:. ใช้ตัวเลือกนี้สำหรับกรณีนี้อย่างจริงจังไม่แนะนำเท่าที่จะสามารถสร้างปัญหาที่มีตัวอักษรพิเศษและหน้า formating เมื่อมีการสร้างรูปแบบไฟล์ PDF ไฟล์</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= สร้าง WYSIWIG / รุ่นสำหรับ eMailings มวล (Tools-> ส่งอีเมล)
     FCKeditorForUserSignature=สร้าง WYSIWIG / ฉบับลายเซ็นของผู้ใช้
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=ประสบความสำเร็จในการเชื่อมต่อฐานข้อมูล แต่ไม่ได้ดูจะเป็นฐานข้อมูล OSCommerce (% s สำคัญไม่พบในตาราง% s)
    -OSCommerceTestOk=เชื่อมต่อกับเซิร์ฟเวอร์ '% s' ในฐานข้อมูล '% s' กับผู้ใช้ '% s' ประสบความสำเร็จ
    -OSCommerceTestKo1=เชื่อมต่อกับเซิร์ฟเวอร์ '% s' ประสบความสำเร็จ แต่ฐานข้อมูล '% s' ไม่สามารถเข้าถึงได้
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=เชื่อมต่อกับเซิร์ฟเวอร์ '% s' ในฐานข้อมูล '% s' กับผู้ใช้ '% s' ที่ประสบความสำเร็จ
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=เชื่อมต่อกับเซิร์ฟเวอร์ '% s' กับผู้ใช้ '% s' ล้มเหลว
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=ถ้าคุณใช้โมดูลจุดขาย (POS ให้โมดูลโดยค่าเริ่มต้นหรือโมดูลภายนอกอื่น) การตั้งค่านี้อาจได้รับการปฏิเสธโดยจุดขายของโมดูล จุดส่วนใหญ่ของโมดูลการขายได้รับการออกแบบเพื่อสร้างทันทีใบแจ้งหนี้และลดหุ้นโดยเริ่มต้นสิ่งที่เป็นตัวเลือกที่นี่ ดังนั้นถ้าคุณต้องการหรือไม่ที่จะมีการลดลงของหุ้นเมื่อลงทะเบียนขายจากจุดขายของคุณให้ตรวจสอบยังโมดูล POS ของคุณตั้งค่า
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=เมนูลบ
     Menus=เมนู
    @@ -1548,7 +1561,7 @@ DetailRight=สภาพที่จะแสดงเมนูสีเทา
     DetailLangs=ชื่อไฟล์ Lang สำหรับการแปลรหัสฉลาก
     DetailUser=ฝึกงาน / Extern / ทั้งหมด
     Target=เป้า
    -DetailTarget=เป้าหมายสำหรับการเชื่อมโยง (_ blank ด้านบนเปิดหน้าต่างใหม่)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=ระดับ (-1: เมนูด้านบน 0: เมนูส่วนหัว> 0 เมนูและเมนูย่อย)
     ModifMenu=เมนูการเปลี่ยนแปลง
     DeleteMenu=ลบรายการเมนู
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=ภาษีมูลค่าเพิ่มเนื่
     OptionVatDebitOptionDesc=ภาษีมูลค่าเพิ่มเนื่องจาก: <br> - ในการจัดส่งสินค้า (วันที่เราใช้ใบแจ้งหนี้) <br> - ในใบแจ้งหนี้ (เดบิต) สำหรับการให้บริการ
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=เวลาภาษีมูลค่าเพิ่ม exigibility โดยค่าเริ่มต้นเป็นไปตามตัวเลือกที่เลือก:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=ในการจัดส่ง
     OnPayment=ในการชำระเงิน
     OnInvoice=ในใบแจ้งหนี้
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=บัญชีซื้อ รหัส
     AgendaSetup=กิจกรรมและวาระการติดตั้งโมดูล
     PasswordTogetVCalExport=กุญแจสำคัญในการอนุญาตการเชื่อมโยงการส่งออก
     PastDelayVCalExport=อย่าส่งออกเหตุการณ์ที่มีอายุมากกว่า
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=ตั้งค่าโดยอัตโนมัติประเภทของเหตุการณ์นี้ในการกรองการค้นหาในมุมมองของวาระการประชุม
    -AGENDA_DEFAULT_FILTER_STATUS=ตั้งค่าโดยอัตโนมัติสถานะสำหรับการจัดกิจกรรมนี้ในการกรองการค้นหาในมุมมองของวาระการประชุม
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=ซึ่งแท็บที่คุณต้องการที่จะเปิดตามค่าเริ่มต้นเมื่อมีการเลือกวาระที่เมนู
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=คลิกเพื่อกดติดตั้งโมดูล
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=จุดขาย
     CashDeskSetup=จุดขายการติดตั้งโมดูล
    -CashDeskThirdPartyForSell=เริ่มต้นของบุคคลที่สามทั่วไปจะใช้สำหรับการขาย
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=บัญชีเริ่มต้นที่จะใช้ในการรับชำระเงินด้วยเงินสด
     CashDeskBankAccountForCheque= บัญชีเริ่มต้นที่จะใช้ในการรับชำระเงินด้วยเช็ค
     CashDeskBankAccountForCB= บัญชีเริ่มต้นที่จะใช้ในการรับชำระเงินด้วยบัตรเครดิต
    -CashDeskDoNotDecreaseStock=ปิดการใช้งานลดลงหุ้นเมื่อขายจะทำจากจุดขาย (ถ้ามี "ไม่" การลดลงของหุ้นที่จะทำสำหรับแต่ละขาย POS ทำได้จากสิ่งที่เป็นตัวเลือกที่ตั้งในสต็อกโมดูล)
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=และ จำกัด การบังคับคลังสินค้าที่จะใช้สำหรับการลดลงของหุ้น
    -StockDecreaseForPointOfSaleDisabled=หุ้นลดลงจากจุดขายปิดการใช้งาน
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=การลดลงของหุ้นใน POS เข้ากันไม่ได้กับการจัดการจำนวนมาก
    -CashDeskYouDidNotDisableStockDecease=คุณไม่ได้ปิดการใช้งานลดลงหุ้นเมื่อมีการขายจากจุดขายของ ดังนั้นคลังสินค้าจะต้อง
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark ติดตั้งโมดูล
    -BookmarkDesc=โมดูลนี้จะช่วยให้คุณสามารถจัดการบุ๊คมาร์ค นอกจากนี้คุณยังสามารถเพิ่มทางลัดไปยังหน้าเว็บใด ๆ Dolibarr หรือเว็บไซต์ externale บนเมนูด้านซ้ายของคุณ
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=จำนวนสูงสุดของบุ๊คมาร์คที่จะแสดงในเมนูด้านซ้าย
     ##### WebServices #####
     WebServicesSetup=webservices ติดตั้งโมดูล
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=หลาย บริษัท ติดตั้งโมดูล
     ##### Suppliers #####
     SuppliersSetup=ผู้ผลิตติดตั้งโมดูล
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=ผู้ผลิตใบแจ้งหนี้เลขรุ่น
     IfSetToYesDontForgetPermission=หากการตั้งค่าใช่ไม่ลืมที่จะให้สิทธิ์กับกลุ่มหรือผู้ใช้ที่ได้รับอนุญาตให้ได้รับการอนุมัติที่สอง
    @@ -1654,7 +1667,7 @@ ProjectsSetup=โครงการติดตั้งโมดูล
     ProjectsModelModule=โครงการรายงานรูปแบบเอกสาร
     TasksNumberingModules=งานจำนวนโมดูล
     TaskModelModule=รายงานงานรูปแบบเอกสาร
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=คุณอาจพบ
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=รายการของการแจ้งเตือนคงที่
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=ธรณีประตู
     BackupDumpWizard=ตัวช่วยสร้างการสร้างแฟ้มการถ่ายโอนการสำรองฐานข้อมูล
     SomethingMakeInstallFromWebNotPossible=การติดตั้งโมดูลภายนอกเป็นไปไม่ได้จากอินเตอร์เฟซเว็บด้วยเหตุผลต่อไปนี้:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=ติดตั้งโมดูล
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=เน้นเส้นตารางเมื่อเลื่อนเมาส์ผ่านไป
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=สีพื้นหลังสำหรับแ
     MinimumNoticePeriod=ระยะเวลาการแจ้งให้ทราบล่วงหน้าขั้นต่ำ (ตามคำขอลาของคุณจะต้องทำก่อนการหน่วงเวลานี้)
     NbAddedAutomatically=จำนวนวันที่เพิ่มเข้าไปในเคาน์เตอร์ของผู้ใช้ (โดยอัตโนมัติ) ในแต่ละเดือน
     EnterAnyCode=ฟิลด์นี้มีการอ้างอิงในการระบุสาย ป้อนค่าที่คุณเลือกได้ แต่ไม่มีตัวอักษรพิเศษ
    -UnicodeCurrency=ป้อนที่นี่ระหว่างวงเล็บรายการจำนวนไบต์ที่เป็นตัวแทนของสัญลักษณ์สกุลเงิน สำหรับ exemple: ราคา $ ป้อน [36] - ราคา $ บราซิลจริง R [82,36] - สำหรับ€ป้อน [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=ตำแหน่งของเส้นเป็นรายการคำสั่งผสม
     SellTaxRate=อัตราภาษีการขาย
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=เมื่อคุณสร้างโอกาสที่คุณจะกำหนดจำนวนเงินประมาณของโครงการ / นำ ตามสถานะของโอกาสที่เงินจำนวนนี้อาจจะ multiplicated โดยอัตรานี้ในการประเมินปริมาณทั่วโลกโอกาสของคุณอาจสร้าง ค่าร้อยละ (ระหว่าง 0 และ 100)
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=บันทึกแม่แบบนี้มีความมุ่งมั่นที่องค์ประกอบ
     TypeOfTemplate=ประเภทของแม่แบบ
    -TemplateIsVisibleByOwnerOnly=แม่แบบสามารถมองเห็นได้โดยเจ้าของเท่านั้น
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=แก้ไขเขตเวลา
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/th_TH/companies.lang b/htdocs/langs/th_TH/companies.lang
    index df60e37a159..9e4f333cedb 100644
    --- a/htdocs/langs/th_TH/companies.lang
    +++ b/htdocs/langs/th_TH/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=เลือกบุคคลที่สาม
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=ลบรายชื่อ / ที่อยู่
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=บุคคลที่สามใหม่
    -MenuNewCustomer=ลูกค้าใหม่
    -MenuNewProspect=โอกาสใหม่
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=ใหม่เอกชน
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=สร้างของบุคคลที่สาม
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=ติดต่อบุคคลที่สาม / ที
     Company=บริษัท
     CompanyName=ชื่อ บริษัท
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=บริษัท
    -CountryIsInEEC=ประเทศที่อยู่ภายในประชาคมเศรษฐกิจยุโรป
    -ThirdPartyName=ชื่อของบุคคลที่สาม
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=บุคคลที่สาม
    -ThirdParties=บุคคลที่สาม
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=ลูกค้าเป้าหมาย
     ThirdPartyProspectsStats=ลูกค้าเป้าหมาย
     ThirdPartyCustomers=ลูกค้า
     ThirdPartyCustomersStats=ลูกค้า
     ThirdPartyCustomersWithIdProf12=ลูกค้าที่มี% s% s หรือ
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=ประเภทของบุคคลที่สาม
    +ThirdPartyType=Type of company
     Individual=เอกชน
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=บริษัท แม่
     Subsidiaries=บริษัท ย่อย
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=รหัสไปรษณีย์
     Town=เมือง
     Web=เว็บ
     Poste= ตำแหน่ง
    -DefaultLang=ภาษาโดยปริยาย
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=ข้อเสนอ
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=ไวยากรณ์ที่ถูกต้อง
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=<b>ลูกค้ารายนี้มีส่
     CompanyHasNoRelativeDiscount=ลูกค้ารายนี้ไม่เคยมีใครส่วนลดญาติโดยค่าเริ่มต้น
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=<b>ลูกค้ารายนี้ยังคงมีการบันทึกเครดิตสำหรับ% s%</b> s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=ไม่
    -Supplier=ผู้ผลิต
    +Supplier=Vendor
     AddContact=สร้างรายชื่อผู้ติดต่อ
     AddContactAddress=สร้างการติดต่อ / ที่อยู่
     EditContact=ติดต่อแก้ไข
    @@ -303,22 +303,22 @@ AddThirdParty=สร้างของบุคคลที่สาม
     DeleteACompany=ลบ บริษัท
     PersonalInformations=ข้อมูลส่วนบุคคล
     AccountancyCode=บัญชีการบัญชี
    -CustomerCode=รหัสลูกค้า
    -SupplierCode=Vendor code
    -CustomerCodeShort=รหัสลูกค้า
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=รหัสลูกค้าไม่ซ้ำกันสำหรับลูกค้าทุกท่าน
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=จำเป็นต้องใช้ถ้าบุคคลที่สามเป็นลูกค้าหรือโอกาส
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=ตั้งแต่วันที่ควบคุมโดยโมดูล
    -ThisIsModuleRules=นี่คือกฎระเบียบสำหรับโมดูลนี้
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect ที่จะติดต่อ
     CompanyDeleted=บริษัท "% s" ลบออกจากฐานข้อมูล
     ListOfContacts=รายชื่อผู้ติดต่อ / ที่อยู่
    -ListOfContactsAddresses=รายชื่อผู้ติดต่อ / adresses
    -ListOfThirdParties=รายชื่อของบุคคลที่สาม
    -ShowCompany=Show third party
    +ListOfContactsAddresses=รายชื่อผู้ติดต่อ / ที่อยู่
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=แสดงรายชื่อผู้ติดต่อ
     ContactsAllShort=ทั้งหมด (ไม่กรอง)
     ContactType=ประเภทติดต่อ
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=ติดต่อนี้ไม่ได้ติด
     NoContactForAnyContract=การติดต่อที่ไม่สามารถติดต่อสำหรับการทำสัญญาใด ๆ
     NoContactForAnyInvoice=ติดต่อนี้ไม่ได้ติดต่อสำหรับใบแจ้งหนี้ใด ๆ
     NewContact=รายชื่อใหม่
    -NewContactAddress=ติดต่อใหม่ / ที่อยู่
    +NewContactAddress=New Contact/Address
     MyContacts=รายชื่อของฉัน
     Capital=เมืองหลวง
     CapitalOf=เมืองหลวงของ% s
     EditCompany=แก้ไข บริษัท
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=ตรวจสอบ
    -VATIntraCheckDesc=<b>การเชื่อมโยง% s</b> ช่วยให้การขอให้ตรวจสอบการให้บริการภาษีมูลค่าเพิ่มยุโรป อินเทอร์เน็ตจากเซิร์ฟเวอร์ภายนอกเป็นสิ่งจำเป็นสำหรับบริการนี​​้ในการทำงาน
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=ตรวจสอบ Intracomunnautary ภาษีมูลค่าเพิ่มในเว็บไซต์ของคณะกรรมการยุโรป
    -VATIntraManualCheck=นอกจากนี้คุณยังสามารถตรวจสอบด้วยตนเองจากเว็บไซต์ยุโรป <a href="%s" target="_blank">% s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=ตรวจสอบไม่ได้ บริการตรวจสอบไม่ได้ให้โดยรัฐสมาชิก (% s)
    -NorProspectNorCustomer=หรือโอกาสหรือลูกค้า
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=บุคลากร
     ProspectLevelShort=ที่อาจเกิดขึ้น
     ProspectLevel=Prospect ที่มีศักยภาพ
    @@ -387,12 +387,12 @@ ExportCardToFormat=การ์ดส่งออกไปยังรูปแ
     ContactNotLinkedToCompany=ติดต่อไม่ได้เชื่อมโยงกับบุคคลที่สาม
     DolibarrLogin=เข้าสู่ระบบ Dolibarr
     NoDolibarrAccess=ไม่สามารถเข้าถึง Dolibarr
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=รายชื่อและคุณสมบัติ
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=ระดับราคา
     DeliveryAddress=ที่อยู่จัดส่ง
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=ลบไฟล์
     ConfirmDeleteFile=คุณแน่ใจว่าคุณต้องการที่จะลบไฟล์นี้หรือไม่?
     AllocateCommercial=Assigned to sales representative
     Organization=องค์กร
    -FiscalYearInformation=ข้อมูลเกี่ยวกับปีงบประมาณ
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=เริ่มต้นเดือนของปีงบประมาณ
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=รายชื่อลูกค้าเป้าหมาย
    -ListCustomersShort=รายชื่อของลูกค้า
    -ThirdPartiesArea=บุคคลที่สามและพื้นที่ติดต่อ
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=รวมของบุคคลที่สามที่ไม่ซ้ำกัน
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=เปิด
     ActivityCeased=ปิด
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=การเรียกเก็บเงินในป
     OutstandingBill=แม็กซ์ สำหรับการเรียกเก็บเงินที่โดดเด่น
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=รหัสที่เป็นอิสระ รหัสนี้สามารถแก้ไขได้ในเวลาใดก็ได้
     ManagingDirectors=ผู้จัดการ (s) ชื่อ (ซีอีโอผู้อำนวยการประธาน ... )
     MergeOriginThirdparty=ซ้ำของบุคคลที่สาม (บุคคลที่สามต้องการลบ)
     MergeThirdparties=ผสานบุคคลที่สาม
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/th_TH/errors.lang b/htdocs/langs/th_TH/errors.lang
    index 3a60f60475c..423374a7636 100644
    --- a/htdocs/langs/th_TH/errors.lang
    +++ b/htdocs/langs/th_TH/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=ค่า '% s' มีรูปแบบวันที่ไ
     ErrorWrongDate=วันที่ไม่ถูกต้อง!
     ErrorFailedToWriteInDir=ไม่สามารถเขียนในไดเรกทอรี% s
     ErrorFoundBadEmailInFile=พบไวยากรณ์อีเมลไม่ถูกต้องสำหรับ% s บรรทัดในไฟล์ (เช่นสาย% s ด้วยอีเมล =% s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=ฟิลด์ที่จำเป็นบางคนไม่เต็ม
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=ล้มเหลวในการสร้างไดเรกทอรี ตรวจสอบการใช้เว็บเซิร์ฟเวอร์ที่มีสิทธิ์ในการเขียนลงในไดเรกทอรีเอกสาร Dolibarr หาก <b>safe_mode</b> พารามิเตอร์เปิดใช้งานบน PHP นี้ตรวจสอบว่า php ไฟล์ Dolibarr เป็นเจ้าของให้กับผู้ใช้เว็บเซิร์ฟเวอร์ (หรือกลุ่ม)
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=กรุณากรอกค่าส​​ำหร
     ErrorNoValueForCheckBoxType=กรุณากรอกค่าส​​ำหรับรายการช่อง
     ErrorNoValueForRadioType=กรุณากรอกค่าส​​ำหรับรายการวิทยุ
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=<b>s สนาม%</b> ไม่ต้องมีอักขระพิเศษ
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=ไม่มีการเปิดใช้งานโมดูลบัญชี
     ErrorExportDuplicateProfil=ชื่อโปรไฟล์นี้มีอยู่แล้วสำหรับการตั้งค่าการส่งออกนี้
     ErrorLDAPSetupNotComplete=การจับคู่ Dolibarr-LDAP ไม่สมบูรณ์
     ErrorLDAPMakeManualTest=ไฟล์ .ldif ได้รับการสร้างขึ้นในไดเรกทอรี% s พยายามที่จะโหลดได้ด้วยตนเองจากบรรทัดคำสั่งที่จะมีข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด
    -ErrorCantSaveADoneUserWithZeroPercentage=ไม่สามารถบันทึกการดำเนินการกับ "statut ไม่ได้เริ่ม" ถ้าเขต "ทำโดย" นอกจากนี้ยังเต็มไป
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref ใช้สำหรับการสร้างที่มีอยู่แล้ว
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=ไม่สามารถลบบันทึก มันถูกใช้ไปแล้วหรือรวมอยู่ในวัตถุอื่น
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=จาวาสคริปต์จะต้องไม่ถูกปิดการใช้งานจะมีคุณสมบัติการทำงานนี้ เพื่อเปิด / ปิดการใช้งานจาวาสคริไปที่เมนูหน้าแรก> Setup-> จอแสดงผล
     ErrorPasswordsMustMatch=ทั้งสองพิมพ์รหัสผ่านจะต้องตรงกับแต่ละอื่น ๆ
    -ErrorContactEMail=ข้อผิดพลาดทางเทคนิคที่เกิดขึ้น กรุณาติดต่อผู้ดูแลระบบเพื่อต่อไปนี้อีเมล <b>en% s ให้รหัสข้อผิดพลาด% s</b> ในข้อความของคุณหรือดียิ่งขึ้นโดยการเพิ่มสำเนาหน้าจอของหน้านี้
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=<b>ค่าที่ไม่ถูกต้องสำหรับจำนวนสนาม% s</b> (ค่า <b>'% s' ไม่ตรงกับกฎ% s</b> regex)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=<b>ค่าที่ไม่ถูกต้องสำหรับจำนวนสนาม% s</b> (ค่า <b>'% s' ไม่ได้อ้างอิง% s</b> ที่มีอยู่)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=โปรแกรมป้องกันไว
     ErrorSpecialCharNotAllowedForField=อักขระพิเศษไม่ได้รับอนุญาตสำหรับเขตข้อมูล "% s"
     ErrorNumRefModel=การอ้างอิงที่มีอยู่ในฐานข้อมูล (% s) และไม่ได้เข้ากันได้กับกฎหมายเลขนี้ ลบบันทึกการอ้างอิงหรือเปลี่ยนชื่อเพื่อเปิดใช้งานโมดูลนี้
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=ข้อผิดพลาดในหน้ากาก
     ErrorBadMaskFailedToLocatePosOfSequence=ข้อผิดพลาดหน้ากากไม่มีหมายเลขลำดับ
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=ข้อผิดพลาดค่าการตั
     ErrorMaxNumberReachForThisMask=เข้าถึงจำนวนซ์หน้ากากนี้
     ErrorCounterMustHaveMoreThan3Digits=เคาน์เตอร์จะต้องมีมากกว่า 3 หลัก
     ErrorSelectAtLeastOne=ความผิดพลาด เลือกอย่างน้อยหนึ่งรายการ
    -ErrorDeleteNotPossibleLineIsConsolidated=ลบไปไม่ได้เพราะการบันทึกจะเชื่อมโยงกับรายการระหว่างกันของธนาคารที่ conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=% s ได้รับมอบหมายให้สามอีก
     ErrorFailedToSendPassword=ล้มเหลวในการส่งรหัสผ่าน
     ErrorFailedToLoadRSSFile=ล้มเหลวที่จะได้รับฟีด RSS พยายามที่จะเพิ่ม MAIN_SIMPLEXMLLOAD_DEBUG คงถ้าข้อความผิดพลาดที่ไม่ได้ให้ข้อมูลที่เพียงพอ
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=ผู้ใช้ที่มี <b>s%</b> เข้า
     ErrorLoginHasNoEmail=ผู้ใช้นี้ไม่มีที่อยู่อีเมล ขั้นตอนการยกเลิก
     ErrorBadValueForCode=ค่าร้ายสำหรับรหัสรักษาความปลอดภัย ลองอีกครั้งด้วยค่าใหม่ ...
     ErrorBothFieldCantBeNegative=ทุ่ง% s% และไม่สามารถเป็นได้ทั้งในเชิงลบ
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=จำนวนบรรทัดลงในใบแจ้งหนี้ของลูกค้าที่ไม่สามารถเป็นเชิงลบ
     ErrorWebServerUserHasNotPermission=<b>บัญชีผู้ใช้% s</b> ใช้ในการดำเนินการเว็บเซิร์ฟเวอร์มีสิทธิ์ในการที่ไม่มี
     ErrorNoActivatedBarcode=ประเภทไม่มีการเปิดใช้งานบาร์โค้ด
    @@ -138,7 +141,7 @@ ErrorBadFormat=รูปแบบที่ไม่ดี!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=ข้อผิดพลาดที่มีการส่งมอบบางอย่างที่เชื่อมโยงกับการจัดส่งนี้ ลบปฏิเสธ
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=ไม่สามารถลบการชำระเงินที่ใช้ร่วมกันอย่างน้อยหนึ่งใบแจ้งหนี้ที่มีสถานะ payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=ไม่สามารถกำหนดให้คงที่ '% s'
     ErrorPriceExpression2=ไม่สามารถกำหนดฟังก์ชั่น '% s'
     ErrorPriceExpression3=ตัวแปรที่ไม่ได้กำหนด '% s' ในความหมายฟังก์ชั่น
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=ที่ไม่คาดคิด '% s'
     ErrorPriceExpression6=จำนวนที่ไม่ถูกต้องของการขัดแย้ง (% s ได้รับคาดว่า% s)
     ErrorPriceExpression8=ผู้ประกอบการที่ไม่คาดคิด '% s'
     ErrorPriceExpression9=ข้อผิดพลาดที่ไม่คาดคิดเกิดขึ้น
    -ErrorPriceExpression10=Iperator '% s' ขาดตัวถูกดำเนินการ
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=คาดหวังว่า '% s'
     ErrorPriceExpression14=หารด้วยศูนย์
     ErrorPriceExpression17=ไม่ได้กำหนดตัวแปร '% s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=ลูกค้า SOAP ล​​้มเหลว
     ErrorGlobalVariableUpdater5=ไม่มีตัวแปรทั่วโลกที่เลือก
     ErrorFieldMustBeANumeric=<b>s สนาม%</b> จะต้องเป็นค่าตัวเลข
     ErrorMandatoryParametersNotProvided=พารามิเตอร์บังคับ (s) ไม่ได้ให้
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=บุ๊คมาร์คที่มีชื่
     WarningPassIsEmpty=คำเตือนรหัสผ่านฐานข้อมูลเป็นที่ว่างเปล่า นี่คือหลุมการรักษาความปลอดภัย คุณควรเพิ่มรหัสผ่านไปยังฐานข้อมูลของคุณและเปลี่ยนไฟล์ conf.php ของคุณเพื่อสะท้อนถึงนี้
     WarningConfFileMustBeReadOnly=เตือนไฟล์ config ของคุณ <b>(htdocs / conf / conf.php)</b> สามารถเขียนทับโดยเว็บเซิร์ฟเวอร์ นี่คือหลุมด้านความปลอดภัยร้ายแรง ปรับเปลี่ยนสิทธิ์ในแฟ้มที่จะอยู่ในโหมดอ่านอย่างเดียวสำหรับผู้ใช้ระบบปฏิบัติการที่ใช้โดยเว็บเซิร์ฟเวอร์ หากคุณใช้รูปแบบ Windows และ FAT ดิสก์ของคุณคุณจะต้องรู้ว่าระบบไฟล์นี้จะไม่อนุญาตให้มีการเพิ่มสิทธิ์ในแฟ้มจึงไม่สามารถมีความปลอดภัยอย่างสมบูรณ์
     WarningsOnXLines=<b>คำเตือนในการบันทึกแหล่ง% s</b> (s)
    -WarningNoDocumentModelActivated=รูปแบบไม่มีสำหรับการสร้างเอกสารได้รับการเปิดใช้งาน รูปแบบจะถูกเลือกโดยค่าเริ่มต้นจนกว่าคุณจะตรวจสอบการติดตั้งโมดูลของคุณ
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=คำเตือนเมื่อการติดตั้งเสร็จแล้วคุณจะต้องปิดการใช้งานติดตั้ง / ย้ายเครื่องมือโดยการเพิ่ม <b>install.lock ไฟล์ลงในไดเรกทอรี%</b> s หายไปไฟล์นี้เป็นหลุมรักษาความปลอดภัย
    -WarningUntilDirRemoved=ทุกคำเตือนความปลอดภัย (มองเห็นได้โดยผู้ใช้ผู้ดูแลระบบเท่านั้น) จะยังคงใช้งานเป็นเวลานานเป็นช่องโหว่ที่เป็นปัจจุบัน (หรือที่ MAIN_REMOVE_INSTALL_WARNING คงที่เพิ่มเข้ามาใน Setup-> ตั้งค่าอื่น ๆ )
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=คำเตือนปิดจะทำแม้ว่าจำนวนเงินที่แตกต่างกันระหว่างแหล่งที่มาและองค์ประกอบเป้าหมาย เปิดใช้งานคุณลักษณะนี้ด้วยความระมัดระวัง
     WarningUsingThisBoxSlowDown=คำเตือนการใช้ช่องนี้ชะลอตัวลงอย่างจริงจังทุกหน้าแสดงกล่อง
     WarningClickToDialUserSetupNotComplete=การตั้งค่าข้อมูล ClickToDial สำหรับผู้ใช้ของคุณจะไม่สมบูรณ์ (ดู ClickToDial แท็บลงบนบัตรผู้ใช้ของคุณ)
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/th_TH/interventions.lang b/htdocs/langs/th_TH/interventions.lang
    index 90bb6de5e0e..9bf586e4e24 100644
    --- a/htdocs/langs/th_TH/interventions.lang
    +++ b/htdocs/langs/th_TH/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=การแทรกแซง
     InterventionCard=บัตรแทรกแซง
     NewIntervention=การแทรกแซงใหม่
     AddIntervention=การแทรกแซงสร้าง
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=รายชื่อของการแทรกแซง
     ActionsOnFicheInter=การดำเนินการเกี่ยวกับการแทรกแซง
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/th_TH/main.lang b/htdocs/langs/th_TH/main.lang
    index 21a7296109a..60638ebcb67 100644
    --- a/htdocs/langs/th_TH/main.lang
    +++ b/htdocs/langs/th_TH/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=ล้มเหลวในการส่งอีเม
     ErrorFileNotUploaded=ไฟล์ที่อัปโหลดไม่ได้ ตรวจสอบขนาดที่ไม่เกินสูงสุดที่อนุญาตที่พื้นที่ว่างที่มีอยู่บนดิสก์และนั่นก็คือไม่ได้อยู่แล้วไฟล์ที่มีชื่อเดียวกันในไดเรกทอรีนี้
     ErrorInternalErrorDetected=ข้อผิดพลาดที่ตรวจพบ
     ErrorWrongHostParameter=โฮสต์พารามิเตอร์ที่ไม่ถูกต้อง
    -ErrorYourCountryIsNotDefined=ประเทศของคุณจะไม่ได้กำหนดไว้ ไปที่บ้านติดตั้ง-แก้ไขและโพสต์รูปแบบอีกครั้ง
    -ErrorRecordIsUsedByChild=ไม่สามารถลบบันทึกนี้ บันทึกนี้ถูกนำมาใช้อย่างน้อยหนึ่งบันทึกเด็ก
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=ค่าที่ไม่ถูกต้อง
     ErrorWrongValueForParameterX=ค่าที่ไม่ถูกต้องสำหรับพารามิเตอร์% s
     ErrorNoRequestInError=คำขอในไม่มีข้อผิดพลาด
    -ErrorServiceUnavailableTryLater=ไม่มีบริการสำหรับช่วงเวลาที่ ลองใหม่อีกครั้ง
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=ค่าที่ซ้ำกันในสนามที่ไม่ซ้ำกัน
    -ErrorSomeErrorWereFoundRollbackIsDone=ข้อผิดพลาดบางคนพบว่า เราย้อนกลับการเปลี่ยนแปลง
    -ErrorConfigParameterNotDefined=<b>พารามิเตอร์% s</b> ไม่ได้กำหนดไว้ภายในไฟล์ config Dolibarr <b>conf.php</b>
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=<b>ไม่พบผู้ใช้% s</b> ในฐานข้อมูล Dolibarr
     ErrorNoVATRateDefinedForSellerCountry=ข้อผิดพลาดอัตราภาษีมูลค่าเพิ่มไม่มีกำหนดสำหรับประเทศ '% s'
     ErrorNoSocialContributionForSellerCountry=ข้อผิดพลาดที่ไม่มีทางสังคม / ประเภทภาษีทางการคลังที่กำหนดไว้สำหรับประเทศ '% s'
     ErrorFailedToSaveFile=ข้อผิดพลาดล้มเหลวที่จะบันทึกไฟล์
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=วันที่ตั้ง
     SelectDate=เลือกวันที่
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=ไฟล์อัพโหลดประสบความสำเร็จ
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=ไฟล์ที่ถูกเลือกสำหรับสิ่งที่แนบมา แต่ยังไม่ได้อัปโหลดยัง คลิกที่ "แนบไฟล์" สำหรับเรื่องนี้
    -NbOfEntries=nb ของรายการ
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=อ่านความช่วยเหลือออนไลน์ (อินเทอร์เน็ตจำเป็น)
     GoToHelpPage=อ่านความช่วยเหลือ
     RecordSaved=บันทึกที่บันทึกไว้
    @@ -94,7 +94,7 @@ Undefined=ตะคุ่ม
     PasswordForgotten=ลืมรหัสผ่าน?
     NoAccount=No account?
     SeeAbove=ดูข้างต้น
    -HomeArea=พื้นที่หน้าแรก
    +HomeArea=หน้าแรก
     LastConnexion=การเชื่อมต่อล่าสุด
     PreviousConnexion=การเชื่อมต่อก่อนหน้า
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=ปิด
     Closed2=ปิด
     NotClosed=Not closed
     Enabled=ที่เปิดใช้งาน
    +Enable=เปิดใช้งาน
     Deprecated=เลิกใช้
     Disable=ปิดการใช้งาน
     Disabled=พิการ
    @@ -153,7 +154,7 @@ Update=ปรับปรุง
     Close=ใกล้
     CloseBox=Remove widget from your dashboard
     Confirm=ยืนยัน
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=ลบ
     Remove=เอาออก
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=สำเนา
     Paste=แปะ
     Default=ผิดนัด
     DefaultValue=ค่ามาตรฐาน
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=ราคา
     PriceCurrency=Price (currency)
     UnitPrice=ราคาต่อหน่วย
    @@ -347,7 +348,7 @@ AmountTTCShort=จํานวนเงิน (รวมภาษี).
     AmountHT=จำนวนเงิน (สุทธิจากภาษี)
     AmountTTC=จํานวนเงิน (รวมภาษี).
     AmountVAT=จํานวนเงินภาษี
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=ไม่สามารถใช้งาน
     ActionRunningNotStarted=ในการเริ่มต้น
     ActionRunningShort=In progress
     ActionDoneShort=เสร็จสิ้น
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=ผลิต
     Duration=ระยะเวลา
     TotalDuration=ระยะเวลารวม
     Summary=ย่อ
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=มีจำหน่าย
     NotYetAvailable=ยังไม่สามารถใช้ได้
    @@ -468,7 +469,7 @@ and=และ
     or=หรือ
     Other=อื่น ๆ
     Others=คนอื่น ๆ
    -OtherInformations=ข้อมูลอื่น ๆ
    +OtherInformations=Other information
     Quantity=ปริมาณ
     Qty=จำนวน
     ChangedBy=เปลี่ยนแปลงได้โดย
    @@ -506,7 +507,7 @@ None=ไม่
     NoneF=ไม่
     NoneOrSeveral=None or several
     Late=สาย
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=ภาพ
     Photos=รูปภาพ
    @@ -530,18 +531,6 @@ September=กันยายน
     October=ตุลาคม
     November=พฤศจิกายน
     December=ธันวาคม
    -JanuaryMin=ม.ค.
    -FebruaryMin=กุมภาพันธ์
    -MarchMin=ทำลาย
    -AprilMin=เมษายน
    -MayMin=พฤษภาคม
    -JuneMin=มิถุนายน
    -JulyMin=กรกฎาคม
    -AugustMin=สิงหาคม
    -SeptemberMin=กันยายน
    -OctoberMin=ตุลาคม
    -NovemberMin=พฤศจิกายน
    -DecemberMin=ธันวาคม
     Month01=มกราคม
     Month02=กุมภาพันธ์
     Month03=มีนาคม
    @@ -646,6 +635,8 @@ SendMail=ส่งอีเมล
     EMail=E-mail
     NoEMail=ไม่มีอีเมล
     Email=อีเมล์
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=ไม่มีโทรศัพท์มือถือ
     Owner=เจ้าของ
     FollowingConstantsWillBeSubstituted=ค่าคงที่ต่อไปนี้จะถูกแทนที่ด้วยค่าที่สอดคล้องกัน
    @@ -677,7 +668,7 @@ NeverReceived=ไม่เคยได้รับ
     Canceled=ยกเลิก
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=สี
     Documents=แฟ้มที่เชื่อมโยง
     Documents2=เอกสาร
    @@ -716,15 +707,15 @@ Merge=ผสาน
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=หน้าแสดงพื้นที่ในการพิมพ์เนื้อหาหลัก
     MenuManager=ผู้จัดการเมนู
    -WarningYouAreInMaintenanceMode=<b>คำเตือนคุณอยู่ในโหมดการบำรุงรักษาดังนั้นเพียง% s</b> เข้าสู่ระบบได้รับอนุญาตให้ใช้โปรแกรมในขณะนี้
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=ผิดพลาดของระบบ
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=เครดิตการ์ด
     ValidatePayment=ตรวจสอบการชำระเงิน
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=<b>เขตข้อมูลที่มี% s</b> มีผลบังคับใช้
    -FieldsWithIsForPublic=<b>เขตข้อมูลที่มี% s</b> จะปรากฏอยู่ในรายชื่อของประชาชนสมาชิก ถ้าคุณไม่อยากให้เรื่องนี้, ตรวจสอบการปิดกล่อง "สาธารณะ"
    -AccordingToGeoIPDatabase=(ตาม GeoIP แปลง)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=สาย
     NotSupported=ไม่สนับสนุน
     RequiredField=ฟิลด์ที่จำเป็น
    @@ -732,6 +723,8 @@ Result=ผล
     ToTest=ทดสอบ
     ValidateBefore=บัตรจะต้องถูกตรวจสอบก่อนที่จะใช้คุณลักษณะนี้
     Visibility=ความชัดเจน
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=ส่วนตัว
     Hidden=ซ่อนเร้น
     Resources=ทรัพยากร
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=เชื่อมโยงการสั่งซื้อ
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=สร้างร่าง
     SetToDraft=กลับไปร่าง
     ClickToEdit=คลิกเพื่อแก้ไข
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=โดยวันที่
     BySalesRepresentative=โดยตัวแทนฝ่ายขาย
     LinkedToSpecificUsers=เชื่อมโยงกับการติดต่อผู้ใช้โดยเฉพาะอย่างยิ่ง
     NoResults=ไม่มีผลลัพธ์
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=เครื่องมือของระบบ
     ModulesSystemTools=เครื่องมือโมดูล
     Test=ทดสอบ
     Element=ธาตุ
     NoPhotoYet=ภาพที่ยังไม่มี
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=หัก
     from=จาก
     toward=ไปทาง
    @@ -802,7 +797,7 @@ PrintFile=พิมพ์ไฟล์% s
     ShowTransaction=Show entry on bank account
     ShowIntervention=การแทรกแซงการแสดง
     ShowContract=แสดงสัญญา
    -GoIntoSetupToChangeLogo=ไปลงในหน้าหลัก - การติดตั้ง - บริษัท ที่จะเปลี่ยนโลโก้หรือไปลงในหน้าแรก - การติดตั้ง - จอแสดงผลที่จะซ่อน
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=ปฏิเสธ
     Denied=ปฏิเสธ
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=ลบบรรทัด
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=แบ่งประเภทเรียกเก็บเงิน
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=ปฏิทิน
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=เหตุการณ์ที่เกิดขึ้น
    -EMailTemplates=แม่แบบอีเมล
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=โครงการ
     Projects=โครงการ
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=สิทธิ์
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=วันจันทร์
     Tuesday=วันอังคาร
    @@ -927,15 +931,15 @@ SearchIntoInterventions=การแทรกแซง
     SearchIntoContracts=สัญญา
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=รายงานค่าใช้จ่าย
    -SearchIntoLeaves=ใบลา
    +SearchIntoLeaves=Leave
     CommentLink=ความคิดเห็น
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=ทุกคน
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=จ่ายโดย
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=ได้รับมอบหมายให้
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/th_TH/other.lang b/htdocs/langs/th_TH/other.lang
    index 35a970cbca0..899dfc0c067 100644
    --- a/htdocs/langs/th_TH/other.lang
    +++ b/htdocs/langs/th_TH/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=รหัสรักษาความปลอดภัย
     NumberingShort=N°
     Tools=เครื่องมือ
     TMenuTools=เครื่องมือ
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=วันเกิด
     BirthdayDate=Birthday date
     DateToBirth=วันเกิด
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=ข้อความในหน้ากลับมาตรวจสอบการชำระเงิน
     MessageKO=ข้อความในหน้าผลตอบแทนการชำระเงินยกเลิก
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=การแทรกแซงการตรวจสอบ
    -Notify_FICHINTER_SENTBYMAIL=การแทรกแซงส่งทางไปรษณีย์
     Notify_ORDER_VALIDATE=การตรวจสอบการสั่งซื้อของลูกค้า
     Notify_ORDER_SENTBYMAIL=สั่งซื้อของลูกค้าส่งทางไปรษณีย์
     Notify_ORDER_SUPPLIER_SENTBYMAIL=เพื่อที่ผู้ผลิตส่งทางไปรษณีย์
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=เพื่อที่ผู้ผลิตบ
     Notify_ORDER_SUPPLIER_APPROVE=เพื่อที่ผู้ผลิตได้รับการอนุมัติ
     Notify_ORDER_SUPPLIER_REFUSE=เพื่อที่ผู้ผลิตไม่ยอม
     Notify_PROPAL_VALIDATE=ข้อเสนอของลูกค้าผ่านการตรวจสอบ
    -Notify_PROPAL_CLOSE_SIGNED=propal ลูกค้าปิดลงนาม
    -Notify_PROPAL_CLOSE_REFUSED=propal ลูกค้าไม่ยอมปิด
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=ข้อเสนอเชิงพาณิชย์ส่งทางไปรษณีย์
     Notify_WITHDRAW_TRANSMIT=ถอนการส่ง
     Notify_WITHDRAW_CREDIT=ถอนเครดิต
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=บุคคลที่สามสร้าง
     Notify_COMPANY_SENTBYMAIL=อีเมลที่ส่งจากบัตรของบุคคลที่สาม
     Notify_BILL_VALIDATE=ตรวจสอบใบแจ้งหนี้ของลูกค้า
     Notify_BILL_UNVALIDATE=ใบแจ้งหนี้ของลูกค้า unvalidated
    -Notify_BILL_PAYED=ใบแจ้งหนี้ของลูกค้า payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=ยกเลิกใบแจ้งหนี้ของลูกค้า
     Notify_BILL_SENTBYMAIL=ใบแจ้งหนี้ของลูกค้าส่งทางไปรษณีย์
     Notify_BILL_SUPPLIER_VALIDATE=ผู้ผลิตตรวจสอบใบแจ้งหนี้
    -Notify_BILL_SUPPLIER_PAYED=ใบแจ้งหนี้ผู้ผลิต payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=ใบแจ้งหนี้ที่ผู้ผลิตส่งทางไปรษณีย์
     Notify_BILL_SUPPLIER_CANCELED=ผู้ผลิตยกเลิกใบแจ้งหนี้
     Notify_CONTRACT_VALIDATE=การตรวจสอบสัญญา
     Notify_FICHEINTER_VALIDATE=การแทรกแซงการตรวจสอบ
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=การแทรกแซงส่งทางไปรษณีย์
     Notify_SHIPPING_VALIDATE=การจัดส่งสินค้าผ่านการตรวจสอบ
     Notify_SHIPPING_SENTBYMAIL=การจัดส่งสินค้าส่งทางไปรษณีย์
     Notify_MEMBER_VALIDATE=สมาชิกผ่านการตรวจสอบ
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=การสร้างโครงการ
     Notify_TASK_CREATE=งานที่สร้างขึ้น
     Notify_TASK_MODIFY=งานการแก้ไข
     Notify_TASK_DELETE=งานที่ถูกลบ
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=ดูการตั้งค่าของโมดูล% s
     NbOfAttachedFiles=จำนวนแนบไฟล์ / เอกสาร
     TotalSizeOfAttachedFiles=ขนาดของไฟล์ที่แนบมา / เอกสาร
     MaxSize=ขนาดสูงสุด
     AttachANewFile=แนบไฟล์ใหม่ / เอกสาร
     LinkedObject=วัตถุที่เชื่อมโยง
    -NbOfActiveNotifications=จำนวนการแจ้งเตือน (nb ของอีเมลผู้รับ)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>ศ Id% s</b> ข้อมูลขึ้นอยู่กับประเทศของบุคคลที่สาม <br> <b>ตัวอย่างเช่นสำหรับประเทศ% s ก็รหัส%</b> s
     DolibarrDemo=Dolibarr ERP / CRM สาธิต
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=การแทรกแซง% s ได้รับการตรวจสอบ
     EMailTextInvoiceValidated=ใบแจ้งหนี้% s ได้รับการตรวจสอบ
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=ข้อเสนอของ% s ได้รับการตรวจสอบ
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=% s เพื่อได้รับการตรวจสอบ
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=เพื่อ% s ได้รับการอนุ
     EMailTextOrderRefused=% s เพื่อได้รับการปฏิเสธ
     EMailTextOrderRefusedBy=เพื่อ% s ได้รับการปฏิเสธโดย% s
     EMailTextExpeditionValidated=จัดส่ง% s ได้รับการตรวจสอบ
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=การนำเข้าข้อมูลที่ตั้ง
     DolibarrNotification=การแจ้งเตือนอัตโนมัติ
     ResizeDesc=<b>ป้อนความกว้างใหม่หรือสูงใหม่</b> อัตราส่วนจะถูกเก็บไว้ในช่วงการปรับขนาด ...
    @@ -204,7 +212,7 @@ NewLength=ความกว้างของใหม่
     NewHeight=ความสูงใหม่
     NewSizeAfterCropping=ขนาดใหม่หลังจากการปลูกพืช
     DefineNewAreaToPick=กำหนดพื้นที่ใหม่ที่ภาพเพื่อเลือก (ซ้ายคลิกที่ภาพแล้วลากจนกว่าจะถึงมุมตรงข้าม)
    -CurrentInformationOnImage=เครื่องมือนี้ถูกออกแบบมาเพื่อช่วยให้คุณสามารถปรับขนาดหรือตัดภาพ นี้เป็นข้อมูลเกี่ยวกับการแก้ไขภาพปัจจุบัน
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=โปรแกรมแก้ไขภาพ
     YouReceiveMailBecauseOfNotification=คุณได้รับข้อความนี้เนื่องจากอีเมลของคุณได้รับการเพิ่มรายชื่อของเป้าหมายที่จะได้รับทราบถึงเหตุการณ์ที่เกิดขึ้นโดยเฉพาะอย่างยิ่งเข้าไปในซอฟต์แวร์% ของ% s
     YouReceiveMailBecauseOfNotification2=เหตุการณ์นี้เป็นดังต่อไปนี้:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=พื้นที่การส่งออก
    diff --git a/htdocs/langs/th_TH/projects.lang b/htdocs/langs/th_TH/projects.lang
    index d5546ceb21c..feb3391e6de 100644
    --- a/htdocs/langs/th_TH/projects.lang
    +++ b/htdocs/langs/th_TH/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=แสดงโครงการ
     ShowTask=แสดงงาน
     SetProject=โครงการตั้ง
     NoProject=ไม่มีโครงการที่กำหนดไว้หรือเป็นเจ้าของ
    -NbOfProjects=nb ของโครงการ
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=เวลาที่ใช้
     TimeSpentByYou=เวลาที่ใช้โดยคุณ
     TimeSpentByUser=เวลาที่ใช้โดยผู้ใช้
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=รายชื่อของข้อเสนอในเชิงพาณิชย์ที่เกี่ยวข้องกับโครงการ
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=รายการของสัญญาที่เกี่ยวข้องกับโครงการ
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=รายชื่อของการแทรกแซงที่เกี่ยวข้องกับโครงการ
    -ListExpenseReportsAssociatedProject=รายชื่อของรายงานค่าใช้จ่ายที่เกี่ยวข้องกับการโครงการ
    -ListDonationsAssociatedProject=รายชื่อของการบริจาคที่เกี่ยวข้องกับการโครงการ
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=รายการของเหตุการณ์ที่เกี่ยวข้องกับโครงการ
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=รายชื่อของเวลาที่ใช้ในงานของโครงการ
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=กิจกรรมในโครงการในวันนี้
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=งาน% s สร้าง
     TaskModifiedInDolibarr=งาน% s การแก้ไข
     TaskDeletedInDolibarr=งาน% s ลบ
    -OpportunityStatus=สถานะโอกาส
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=จำนวนเงินที่มีโอกาส
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=ผู้สนับสนุ
     SelectElement=องค์ประกอบที่เลือก
     AddElement=เชื่อมโยงไปยังองค์ประกอบ
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=ภาระงานที่วางแผนไว้
     PlannedWorkloadShort=จำนวนงาน
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=โครงการที่มีผู้ใ
     TasksWithThisUserAsContact=Tasks ได้รับมอบหมายให้ผู้ใช้รายนี้
     ResourceNotAssignedToProject=ไม่ได้กำหนดโครงการ
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=มอบหมายงานให้ฉัน
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=กำหนด
     ProjectOverview=ภาพรวม
    -ManageTasks=ใช้โครงการที่จะปฏิบัติตามงานและเวลา
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=ใช้โครงการที่จะนำไปสู่​​การปฏิบัติตาม / opportinuties
    -ProjectNbProjectByMonth=nb ของโครงการที่สร้างขึ้นโดย
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=สถิติในโครงการ / โอกาสในการขาย
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=งานที่ได้รับมอบหมาย เข้าครั้งในงานนี้จะเป็นไปได้
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=ข้อเสนอ
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/tr_TR/admin.lang b/htdocs/langs/tr_TR/admin.lang
    index fdb0612b29d..e013bed99bd 100644
    --- a/htdocs/langs/tr_TR/admin.lang
    +++ b/htdocs/langs/tr_TR/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Geliştirme
     VersionUnknown=Bilinmeyen
     VersionRecommanded=Önerilen
     FileCheck=Dosya bütünlüğü denetleyicisi
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Genel sağlama toplamı
     MakeIntegrityAnalysisFrom=Uygulama dosyalarının bütünlük analizini yapın
    @@ -30,14 +30,14 @@ SessionSaveHandler=Oturum kayıt yürütücüsü
     SessionSavePath=Kayıt oturumu konumlandırma
     PurgeSessions=Oturum Temizleme
     ConfirmPurgeSessions=Tüm oturumları gerçekten temizlemek istiyor musunuz? Bu işlem (kendiniz hariç), tüm kullanıcıların bağlantılarını kesecektir.
    -NoSessionListWithThisHandler=PHP nizde yapılandırılmış olan oturum kayıt işlemcisi çalışmakta olan tüm oturumların listelenmesine izin vermiyor.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Yeni bağlantıları kilitle
    -ConfirmLockNewSessions=Herhangi bir yeni Dolibarr bağlantısını yalnız kendinizle kısıtlamak istediğinizden emin misiniz? Bundan sonra yalnızca <b>%s</b> kullanıcısı bağlanabilecektir.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Bağlantı kilidini kaldır
     YourSession=Oturumunuz
    -Sessions=Kullanıcı oturumu
    +Sessions=Kullanıcılar oturumları
     WebUserGroup=Web sunucusu kullanıcısı/grubu
    -NoSessionFound=PHP niz etkin oturumların listelenmesine izin vermiyor gibi görünüyor. Oturumları kaydetmek için kullanılan (<b>%s</b>) dizini korumalı olabilir (Örneğin, işletim sistemi izinleri ve PHP yönergesi open_basedir tarafından korunuyor olabilir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Veri kaydı için veritabanı karakter seti
     DBSortingCharset=Veri sıralamak için veritabanı karakter seti
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Dış kullanıcı
     InternalUsers=İç kullanıcılar
     ExternalUsers=Dış kullanıcılar
     GUISetup=Ekran
    -SetupArea=Ayarlar alanı
    +SetupArea=Ayarlar
     UploadNewTemplate=Yeni şablon(lar) yükleyin
     FormToTestFileUploadForm=Dosya yükleme deneme formu (ayarlara göre)
     IfModuleEnabled=Not: yalnızca <b>%s</b> modülü etkinleştirildiğinde evet etkilidir.
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Kod 0 değerini içeremez
     DisableJavascript=Javascript ve Ajax fonksiyonlarını engelle (Görme engelli kişiler ve metin tarayıcılar için önerilir)
     UseSearchToSelectCompanyTooltip=Ayrıca çok fazla sayıda üçüncü partiniz varsa (>100 000), Kurulum->Diğer den COMPANY_DONOTSEARCH_ANYWHERE değişmezini 1 e ayarlayarak hızı arttırabilirsiniz. Sonra arama dizenin başlamasıyla sınırlı olacaktır.
     UseSearchToSelectContactTooltip=Ayrıca çok fazla sayıda üçüncü partiniz varsa (>100 000), Kurulum->Diğer den CONTACT_DONOTSEARCH_ANYWHERE değişmezini 1 e ayarlayarak hızı arttırabilirsiniz. Sonra arama dizenin başlamasıyla sınırlı olacaktır.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Aramayı başlatacak karakter sayısı: %s
     NotAvailableWhenAjaxDisabled=Ajax devre dışı olduğunda kullanılamaz
     AllowToSelectProjectFromOtherCompany=Bir üçüncü parti belgesinde, başka bir üçüncü partiye bağlantılı bir proje seçilebilir
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Önizleme yok
     ThemeCurrentlyActive=Geçerli etkin tema
     CurrentTimeZone=PHP Saat Dilimi (sunucu)
     MySQLTimeZone=ZamanDilimi MySql (veritabanı)
    -TZHasNoEffect=Tarihler, sanki gönderilen dizeler olarak tutulmuş gibi veritabanı sunucusu tarafından saklanır ve çağrılır. Zaman dilimi yalnızca UNIX_TIMESTAMP işlevi kullanılırken etkilenir (bu Dolibarr tarafından kullanılmamalıdır, böylece ZD veritabanının hiçbir etkisi olmaz, veri girildikten sonra değiştirilse bile)
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Boşluk
     Table=Tablo
     Fields=Alanlar
    @@ -111,7 +111,7 @@ NotConfigured=Modül/Uygulama yapılandırılmadı
     Active=Etkin
     SetupShort=Ayarlar
     OtherOptions=Diğer seçenekler
    -OtherSetup=Diğer ayarlar
    +OtherSetup=Diğer Ayarlar
     CurrentValueSeparatorDecimal=Ondalık ayırıcı
     CurrentValueSeparatorThousand=Binlik ayırıcı
     Destination=Hedef
    @@ -126,8 +126,8 @@ PHPTZ=PHP Saat Dilimi (sunucu)
     DaylingSavingTime=Yaz saati uygulaması
     CurrentHour=PHP saati (sunucu)
     CurrentSessionTimeOut=Geçerli oturumun zaman aşımı
    -YouCanEditPHPTZ=Farklı bir PHP zaman dilimi ayarlamak için (gerekli değil), "SetEnv TZ Europe/Istanbul" şeklinde satıra sahip bir .htaccess dosyası eklemeyi deneyebilirsiniz
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Uyarı: Diğer ekranların aksine bu sayfadaki saatler yerel saat diliminizde değil, sunucunun saat dilimindedir.
     Box=Ekran etiketi
     Boxes=Ekran Etiketleri
     MaxNbOfLinesForBoxes=Ekran etiketleri için ençok satır sayısı
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Çifte kayıt hatalarını gözardı et (GÖZARDI ET EKLE
     AutoDetectLang=Otoalgıla (tarayıcı dili)
     FeatureDisabledInDemo=Özellik demoda devre dışıdır
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Ekran etiketleri, sayfaları kişiselleştirmek için ekleyeceğiniz bazı bilgiler gösteren ekran araçlarıdır. Bu ekran etiketlerini gösterip göstermemeyi seçebilirsiniz ya da hedef sayfayı seçip 'Etkinleştir'e tıklayabilir ya da engellemek için çöp kutusuna tıklayabilirsiniz.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Yalnızca <ahref="modules.php">etkinleştirilmiş modüllerin</a> öğeleri gösterilmiştir.
    -ModulesDesc=Dolibarr modülleri, yazılımda hangi uygulamanın/özelliğin etkinleştirildiğini tanımlar. Bazı uygulamalar/modüller onları etkinleştirdikten sonra kullanıcılara vermeniz gereken izinleri gerektirir. Bir modülü/uygulamayı etkinleştirmek için aç/kapat butonuna tıklayın.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Internette dış web sitelerinde indirmek için daha çok modül bulabilirsiniz...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Dış uygulama/modül bul
     ModulesDevelopYourModule=Kendi uygulamanızı/modüllerinizi geliştirin
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Yeni
     FreeModule=Free
     CompatibleUpTo=%ssürümü ile uyumlu 
    @@ -209,10 +209,10 @@ SeeInMarkerPlace=See in Market place
     Updated=Güncellendi
     Nouveauté=Novelty
     AchatTelechargement=Satın Al / Yükle
    -GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
    +GoModuleSetupArea=Yeni bir  modül almak/yüklemek için, <a href="%s">%s</a> Modül ayar alanına gidin.
     DoliStoreDesc=DoliStore, Dolibarr ERP/CRM dış modülleri için resmi pazar yeri
    -DoliPartnersDesc=İstek üzerine modül ve özellik geliştiren firmaların listesi. (Not: Açık kaynak kullanan PHP bilen herhangi bir firma size özel geliştirme hizmetleri sağlayabilir)
    -WebSiteDesc=Daha çok modül bulabileceğiniz referans web siteleri...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Kendi modülünüzü geliştirmek için bazı çözümler...
     URL=Bağlantı
     BoxesAvailable=Mevcut ekran etiketleri
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Parolaları veritabanında saklamayın silin, yalnızca
     MainDbPasswordFileConfEncrypted=Veritabanı parolaları conf.php de şifrelendirilmiştir. (Etkinleştirme önerilir)
     InstrucToEncodePass=Parolayı <b>conf.php</b> dosyasına kodlamak için <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b> satırını değiştirin
     InstrucToClearPass=Parolayı <b>conf.php</b> dosyasına kodlamak (temiz) için <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b> satırını değiştirin
    -ProtectAndEncryptPdfFiles=Oluşturulan pdf dosyalarının korunması (Etkinleştirme önerilmez) toplu pdf oluşumunu bozar
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Bir PDF belgesinin korunması dosyanın herhangi bir PDF tarayıcısında okunmasını ve yazdırılmasını sağlar. Bundan düzenleme ve kopyalama yapmak olanaksızdır. Bu özelliği kulanmanın çalışmayan genel kümülatif pdf oluşturduğuna dikkat edin.
     Feature=Özellik
     DolibarrLicense=Lisans
    @@ -246,8 +246,8 @@ ExternalResources=Dış kaynaklar
     SocialNetworks=Sosyal Ağlar
     ForDocumentationSeeWiki=Kullanıcıların ve geliştiricilerin belgeleri (Doc, FAQs…), <br>Dolibarr Wiki ye bir göz atın:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=Herhangi bir başka soru/yardım için Dolibarr forumunu kullanabilirsiniz:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=Bu alan Dolibarr’dan Yardım destek hizmeti almanıza olanak sağlar.
    -HelpCenterDesc2=Bu servisin bir kısmı <b>yalnızca İngilizcedir<b>
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Geçerli menü işlemcisi
     MeasuringUnit=Ölçü birimi
     LeftMargin=Sol kenar boşluğu
    @@ -262,37 +262,41 @@ NoticePeriod=Bildirim dönemi
     NewByMonth=New by month
     Emails=E-postalar
     EMailsSetup=E-posta kurulumları
    -EMailsDesc=Bu sayfa, e-mail gönderimleri için PHP parametrelerinizin üzerine yazmanıza izin verir. Unix/Linux İşletim Sistemlerindeki çoğu durumda, PHP kurulumunuz doğrudur ve bu parametreler işe yaramaz.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Sunucu (php.ini de varsayılan: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=Php.ini SMTP / SMTPS Host <b>(Varsayılan:% s)</b>
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Unix gibi sistemlerde PHP ye tanıtılmamıştır)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Sunucu (Unix gibi sistemlerde PHP ye tanıtılmamıştır)
    -MAIN_MAIL_EMAIL_FROM=Otomatik e-mailler için gönderen E-posta adresi (php.ini dosyasında varsayılan: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Gönderilen bütün epostaların bir gizli karbon-kopyasını sistemli olarak gönder
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Tüm e-mailleri şu adreslere gönder (gerçek alıcıların yerine, test amaçlı)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=E-posta göndermek için kullanılan yöntem
    -MAIN_MAIL_SMTPS_ID=Doğrulama gerektirdiğinde SMTP Kimliği
    -MAIN_MAIL_SMTPS_PW=Doğrulama gerektirdiğinde SMTP Parolası
    -MAIN_MAIL_EMAIL_TLS= TLS (SSL) şifreleme kullanın
    -MAIN_MAIL_EMAIL_STARTTLS= TLS (STARTTLS) şifreleme kullan
    -MAIN_DISABLE_ALL_SMS=Bütün SMS gönderimlerini devre dışı bırak (test ya da demo amaçlı)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=E-posta gönderme yöntemi
    +MAIN_MAIL_SMTPS_ID=SMTP ID (gönderme sunucusu kimlik doğrulama gerektiriyorsa)
    +MAIN_MAIL_SMTPS_PW=SMTP Şifresi (gönderme sunucusu kimlik doğrulama gerektiriyorsa)
    +MAIN_MAIL_EMAIL_TLS=TLS (SSL) şifreleme kullan
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Tüm SMS gönderimlerini devre dışı bırak (test ya da demo amaçlı)
     MAIN_SMS_SENDMODE=SMS göndermek için kullanılacak yöntem
     MAIN_MAIL_SMS_FROM=SMS gönderimi için varsayılan gönderici telefon numarası
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=Kullanıcı email adresi
     CompanyEmail=Firma email adresi
     FeatureNotAvailableOnLinux=Unix gibi sistemlerde bu özellik yoktur.
    -SubmitTranslation=Bu dil için çeviri tamamlanmamışsa ya da hatalar buluyorsanız, bunları <b>langs/%s</b> dizininde düzeltebilir ve değişikliklerinizi www.transifex.com/dolibarr-association/dolibarr/ a gönderebilirsiniz.
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=Bu dil için çeviri tamamlanmamışsa ya da hatalar buluyorsanız, bunları <b>langs/%s</b> dizininde düzeltebilir ve değişikliklerinizi dolibarr.org/forum adresine veya geliştiriciler için github.com/Dolibarr/dolibarr adresine gönderebilirsiniz.
     ModuleSetup=Modül kurulumu
     ModulesSetup=Modül/Uygulama kurulumu
     ModuleFamilyBase=Sistem
     ModuleFamilyCrm=Müşteri İlişkileri Yönetimi (CRM)
    -ModuleFamilySrm=Vendor Relation Management (VRM)
    +ModuleFamilySrm=Tedarikçi İlişkileri Yönetimi (VRM)
     ModuleFamilyProducts=Ürün Yönetimi (ÜY)
     ModuleFamilyHr=İnsan Kaynakları Yönetimi (İK)
     ModuleFamilyProjects=Projeler/Ortak çalışma
    @@ -306,18 +310,18 @@ ModuleFamilyInterface=Dış sistemli arayüzler
     MenuHandlers=Menü işlemcileri
     MenuAdmin=Menü düzenleyici
     DoNotUseInProduction=Üretimde kullanmayın
    -ThisIsProcessToFollow=İşlem adımlarıdır:
    +ThisIsProcessToFollow=İşlem adımlar şunlardır:
     ThisIsAlternativeProcessToFollow=Bu, elle işlem uygulamak için alternatif bir kurulumdur:
     StepNb=Adım %s
    -FindPackageFromWebSite=İstediğiniz özelliği sağlayan bir paket bulun (örneğin; resmi web sitesinden %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Paketi indir (örneğin resmi web sitesinden %s).
    -UnpackPackageInDolibarrRoot=Paket dosyalarını Dolibarr'da dış modüllere ayrılmış sunucu dizini içine ayıkla: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Modül yerleşimi tamamlandı. Bununla birlikte, modül ayarları sayfasına giderek modülleri uygulamanızda etkinleştirmeli ve kurmalısınız: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=Alternatif kök dizin varolan bir dizine tanımlanmamış.<br>
     InfDirAlt=Sürüm 3 ten beri bir alternatif kök dizin tanımlanabiliyor. Bu sizin ayrılmış bir dizine, eklentiler ve özel şablonlar depolamanızı sağlar.<br>Yalnızca Dolibarr kökünde bir dizin oluşturun (örn. özel).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=Bu adım için, modül paketinin .zip dosyasını buraya gönderebilirsiniz:
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr geçerli sürümü
     CallUpdatePage=Veritabanı yapısını ve verileri güncelleyen sayfaya git: %s.
     LastStableVersion=Son kararlı sürüm
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Saniye olarak önbellek aktarması tepki gecikmesi (hiç önbellek yoksa 0 ya da boş)
     DisableLinkToHelpCenter=oturum açma sayfasında "<b>Yardım ya da destek gerekli</b>" bağlantısını gizle
     DisableLinkToHelp=Çevrimiçi yardım bağlantısını gizle "<b>%s</b>"
    -AddCRIfTooLong=Otomatik kaydırma yoktur, yani belge üzerinde çok uzun olmasından dolayı satır sayfa sınırı dışına çıkmışsa metin alanında kendiniz satırbaşı yapmalısınız.
    -ConfirmPurge=Bu temizleme işlemini çalıştırmak istediğinizden emin misiniz?<br>Bu işlem tüm veri dosyalarınızı bir daha geri alınamayacak şekilde tamamen silecektir (ECM dosyaları, ekli dosyalar…).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Enaz uzunluk
     LanguageFilesCachedIntoShmopSharedMemory=.lang dosyaları paylaşılan hafızaya yüklendi.
     LanguageFile=Dil dosyası
    -ExamplesWithCurrentSetup=Geçerli çalışan ayarlama örnekleri
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=OpenDocument (AçıkBelge) temaları dizin listesi
     ListOfDirectoriesForModelGenODT=OpenDocument biçimli şablon dosyalarını içeren dizinler listesi.<br><br>Buraya tam yol dizinlerini koyun.<br>Her dizin arasına satır başı ekleyin.<br>GED modülü dizinini eklemek için buraya ekleyin<b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>O dizinlerdeki dosyaların bitiş şekli böyle omalıdır <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=O dizinlerde bulunan ODT/ODS şablon dosyası sayısı
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Sözdizimi örnekleri:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>Odt belge şablonlarının nasıl oluşturulacağını öğrenmek için o dizinlere kaydetmeden önce, wiki belgelerini okuyun:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Web Hizmetleri kullanmak için anahtar (webhizmetlerinde
     TestSubmitForm=Test formu girişi
     ThisForceAlsoTheme=Bu menü yöneticisi kullanıcı seçimi ne olursa olsun yine de kendi temasını kullanacaktır. Ayrıca bu menü yöneticisi akıllı telefonlar üzerinde çalışmayan akıllı telefonlar için özelleştirilmiştir. Kendinizinkinde bir sorun yaşarsanız başka bir menü yöneticisi kullanın.
     ThemeDir=Kaplama dizini
    -ConnectionTimeout=Bağlantı zaman aşımı
    +ConnectionTimeout=Bağlantı zamanaşımı
     ResponseTimeout=Tepki zaman aşımı
     SmsTestMessage=__ARAYANTEL__ den __ARANANTEL__ e test mesajı
     ModuleMustBeEnabledFirst=Bu özelliğe gereksinim duyarsanız öne <b>%s</b> modülünü etkinleştirmelisiniz.
     SecurityToken=URL leri güvenli kılmak için anahtar
    -NoSmsEngine=SMS gönderen yöneticisi yoktur. SMS gönderen yöneticisi varsayılan dağıtım ile kurulmamış (çünkü dış bir tedarikçiye bağlıdır) fakat http://www.dolistore.com adresinde bazılarını bulabilirsiniz
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=PDF oluşturma ile ilgili her genel seçeneği ayarlayabilirsiniz.
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Adres kutusu şekillendirme kuralları
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=%siçin kurallar 
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Oluşturulan PDF de ürün açıklamasını gizle
     HideRefOnPDF=Oluşturulan PDF te ürün ref. ini gizle
     HideDetailsOnPDF=Oluşturulan PDF te ürün satır ayrıntılarını gizle
    @@ -387,7 +391,7 @@ UrlGenerationParameters=URL güvenliği için parametreler
     SecurityTokenIsUnique=Her URL için benzersiz bir güvenlik anahtarı kullan
     EnterRefToBuildUrl=Nesen %s için hata referansı
     GetSecuredUrl=Hesaplanan URL al
    -ButtonHideUnauthorized=Yetkisiz eylemler için yönetici olmayanlara engelli düğmeleri gri renkte göstermek yerine onları gizleyin
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Eski KDV oranı
     NewVATRates=Yeni KDV oranı
     PriceBaseTypeToChange=Buna göre tanımlanan temel referans değerli fiyatları değiştir
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Liste seç
     ExtrafieldSelectList = Tablodan seç
     ExtrafieldSeparator=Ayırıcı (bir alan değil)
     ExtrafieldPassword=Parola
    -ExtrafieldRadio=Radyo düğmeleri (sadece seçime bağlı)
    +ExtrafieldRadio=Radyo düğmeleri (sadece bir seçenek)
     ExtrafieldCheckBox=Onay kutuları
     ExtrafieldCheckBoxFromList=Tablodan onay kutuları
     ExtrafieldLink=Bir nesneye bağlantı
     ComputedFormula=Hesaplanmış alan
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Varsayılan bağlantı
     SetAsDefault=Varsayılan olarak ayarla
     ValueOverwrittenByUserSetup=Uyarı, bu değer kullanıcıya özel kurulum ile üzerine yazılabilir (her kullanıcı kendine ait clicktodial url ayarlayabilir)
     ExternalModule=Dış modül - %s dizinine kurulmuştur
    -BarcodeInitForThirdparties=Üçüncü taraflar için toplu barkod başlatma
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Ürünler ve hizmetler için toplu barkod başlatma ve sıfırlama
     CurrentlyNWithoutBarCode=Şu anda, bazı <strong>%s</strong> kayıtlarınızda <strong>%s</strong> %s tanımlı barkod bulunmamaktadır.
     InitEmptyBarCode=Sonraki %s boş kayıt için ilk değer
     EraseAllCurrentBarCode=Geçerli bütün barkod değerlerini sil
     ConfirmEraseAllCurrentBarCode=Geçerli bütün barkod değerlerini silmek istediğinizden emin misiniz?
     AllBarcodeReset=Tüm barkod değerleri silinmiştir
    -NoBarcodeNumberingTemplateDefined=Barkod modülü ayarlarında hiç bir barkod numaralandırma şablonu etkinleştirilmemiştir.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Dosya önbelliğini etkinleştir
     ShowDetailsInPDFPageFoot=PDF dosyalarının sayfa altlığına daha çok ayrıntı ekle, firma adresiniz, yönetici isimleri gibi (meslek numara bilgileri, sermaye Vergi numarasıyla tamamlayabilirsiniz).
     NoDetails=Sayfa altığında daha fazla bilgi yok
     DisplayCompanyInfo=Firma adresini göster
     DisplayCompanyManagers=Yönetici isimlerini göster
     DisplayCompanyInfoAndManagers=Firma adresini ve yönetici isimlerini göster
    -EnableAndSetupModuleCron=Eğer bu yinelenen faturanın otomatik olarak oluşturulmasını istiyorsanız, *%s* modülü etkinleştirilmeli ve doğru olarak ayarlanmış olmalı. Aksi durumda, faturaların oluşturulması *Oluştur* düğmesi ile bu şablondan elle yapılmalıdır. Otomatik oluşturmayı etkinleştirmiş olsanız bile yine elle oluşturmayı güvenli bir şekilde yapabilirsiniz. Aynı sırada kopya oluşturma mümkün olmaz.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=Varsayılan olarak, Satın Alma Siparişlerinin 2 farklı kullanıcı tarafından oluşturulması ve onaylanması gerekir (bir adım/kullanıcı oluşturacak ve bir adım/kullanıcı onaylayacak. Kullanıcının hem oluşturma hem de onaylama izni varsa, bir adım/kullanıcı yeterli olacaktır). Miktar belirli bir değerin üzerindeyse bu seçenekle üçüncü bir adım/kullanıcı onayı vermeyi isteyebilirsiniz (böylece 3 adım zorunlu olacaktır: 1=doğrulama, 2=ilk onay ve 3=miktar yeterli ise ikinci onay).<br>Tek onay (2 adım) yeterli ise bunu boş olarak ayarlayın, ikinci bir onay (3 adım) her zaman gerekiyorsa çok düşük bir değere ayarlayın (0.1).
     UseDoubleApproval=Tutar (vergi öncesi) bu tutardan yüksekse 3 aşamalı bir onaylama kullanın...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Açıklamayı görmek için tıkla
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=Bu modül, modül (ler) için zorunludur
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Kişiselleştirilmiş varsayılan değerlerin kullanımını etkinleştir
    -EnableOverwriteTranslation=Üzerine yazma çeviri kullanımını etkinleştir
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Alan
     ProductDocumentTemplates=Ürün belgesi oluşturmak için belge şablonları
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Kullanıcılar & gruplar
    +Module0Name=Kullanıcılar ve Gruplar
     Module0Desc=Kullanıcı / Çalışan ve Grup Yönetimi
    -Module1Name=Üçüncü partiler
    +Module1Name=Üçüncü Partiler
     Module1Desc=Firma ve kişi yönetimi (müşteriler, adaylar…)
     Module2Name=Ticaret
     Module2Desc=Ticaret yönetimi
     Module10Name=Muhasebe
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Teklifler
     Module20Desc=Teklif yönetimi
     Module22Name=Toplu E-postalar
    @@ -497,7 +503,7 @@ Module25Desc=Müşteri siparişleri yönetimi
     Module30Name=Faturalar
     Module30Desc=Müşteri faturaları ve iade faturaları yönetimi. Tedarikçi fatura yönetimi
     Module40Name=Tedarikçiler
    -Module40Desc=Suppliers and purchase management (purchase orders and billing)
    +Module40Desc=Tedarikçi ve satın alma yönetimi (satın alma siparişleri ve faturalandırma)
     Module42Name=Debug Logs
     Module42Desc=Logging facilities (file, syslog, ...). Such logs are for technical/debug purposes.
     Module49Name=Düzenleyiciler
    @@ -511,13 +517,13 @@ Module52Desc=Stok yönetimi (ürünler)
     Module53Name=Hizmetler
     Module53Desc=Hizmet yönetimi
     Module54Name=Sözleşmeler/Abonelikler
    -Module54Desc=Sözleşmelerin yönetimi (hizmetler ya da yinelenen abonelikler)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barkodlar
     Module55Desc=Barkod yönetimi
     Module56Name=Telefon
     Module56Desc=Telefon entegrasyonu
     Module57Name=Banka ödeme talimatları
    -Module57Desc=Ödeme talimatları ve para çekme yönetimi. Aynı zamanda Avrupa ülkeleri için SEPA belgelerinin oluşturulmasını içerir.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=TıklaAra
     Module58Desc=TıklaAra entegrasyonu
     Module59Name=Bookmark4u
    @@ -528,10 +534,10 @@ Module75Name=Giderler ve gezi harcamaları
     Module75Desc=Gider ve gezi harcamaları yönetimi
     Module80Name=Sevkiyatlar
     Module80Desc=Sevkiyat ve sipariş teslimatı yönetimi
    -Module85Name=Bankalar ve kasa
    +Module85Name=Bankalar ve Kasa
     Module85Desc=Banka veya kasa yönetimi
    -Module100Name=Dış site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=Dış Site
    +Module100Desc=Dolibarr çerçevesinde görüntülemek için Dolibarr menülerine dış web site bağlantısı ekle
     Module105Name=Mailman and SPIP
     Module105Desc=Üyelik modülü için Mailman or SPIP arayüzü
     Module200Name=LDAP
    @@ -539,50 +545,50 @@ Module200Desc=LDAP dizin senkronizasyonu
     Module210Name=PostNuke
     Module210Desc=PostNuke entegrasyonu
     Module240Name=Veri dışaaktarma
    -Module240Desc=Dolibarr verilerini dışaaktarma aracı (yardımcılı)
    +Module240Desc=Dolibarr verilerini dışa aktarma aracı (yardım ile)
     Module250Name=Veri içeaktarımı
    -Module250Desc=Dolibarr verilerini içeaktarma aracı (yardımcılı)
    +Module250Desc=Dolibarr'a veri aktarma aracı (yardım ile)
     Module310Name=Üyeler
     Module310Desc=Dernek üyeleri yönetimi
     Module320Name=RSS Besleme
     Module320Desc=Dolibarr ekran sayfaları içine RSS ekle
    -Module330Name=Yerimleri
    -Module330Desc=Yerimi yönetimi
    -Module400Name=Projeler/Fırsatlar/Adaylar
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Yer imleri ve kısayollar
    +Module330Desc=Sıklıkla gittiğiniz dahili veya harici sayfalara kısayollar oluşturun, her zaman erişilebilir hale getirin
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Web Takvimi
     Module410Desc=WebT akvimi entegrasyonu
    -Module500Name=Taxes and Special expenses
    +Module500Name=Vergiler ve Özel Harcamalar
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Çalışan ücretlerinin ödenmesi
    -Module510Desc=Çalışan ücretlerinizi kaydedin ve takip edin
    +Module510Desc=Record and track employee payments
     Module520Name=Borç
     Module520Desc=Borçların yönetimi
     Module600Name=İş etkinliklerine ilişkin bildirimler
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Ürün Değişkenleri
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Bağışlar
     Module700Desc=Bağış yönetimi
     Module770Name=Gider raporları
    -Module770Desc=Yönetim ve şikayet gider raporları )nakliye, yemek, ...)
    -Module1120Name=Vendor commercial proposal
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
    +Module1120Name=Tedarikçi faturaları
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
     Module1200Desc=Mantis entegrasyonu
     Module1520Name=Belge Oluşturma
     Module1520Desc=Toplu posta belgesi oluşturma
     Module1780Name=Etiketler/Kategoriler
    -Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
    +Module1780Desc=Etiket/kategori oluştur (ürünler, müşteriler, tedarikçiler, kişiler ve üyeler)
     Module2000Name=FCKdüzenleyici (FCKeditor)
    -Module2000Desc=Bazı metin alanlarının gelişmiş düzenleyici kullanarak düzenlenmesini sağlar (CKEditor Temelli)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dinamik Fiyatlar
     Module2200Desc=Fiyatlar için matematik ifadelerin kullanımını etkinleştir
     Module2300Name=Planlı işler
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Etkinlik / Ajanda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web hizmetleri (SOAP sunucusu)
    @@ -590,16 +596,16 @@ Module2600Desc=API hizmetlerini sağlayan Dolibarr SOAP sunucusunu etkinleştir
     Module2610Name=API/Web hizmetleri (REST sunucusu)
     Module2610Desc=API hizmetlerini sağlayan Dolibarr REST sunucusunu etkinleştir
     Module2660Name=Çağrı WebHizmetleri (SOAP istemcisi)
    -Module2660Desc=Dolibarr web hizmetleri istemcisini etkinleştir (Dış sunuculara veri/istek iteklemek için kullanılabilir. Tedarikçi siparişleri yalnızca anında desteklenir)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Kullanıcıların/Üyelerin resimlerini (epostalarında bulunan) göstermek için çevrimiçi Gravatar hizmetini kullanın (www.gravatar.com). İnternet erişimi gerektirir.
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP İstemcisi
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind dönüştürme becerileri
     Module3100Name=Skype
     Module3100Desc=Kullanıcı / üçüncü parti / kişi / üye kartlarına bir Skype düğmesi ekle
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=IK
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Çoklu-firma
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websiteleri
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=İzin İstekleri yönetimi
    -Module20000Desc=Çalışanların izin isteklerini bildirin ve izleyin
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Ürünlerde ürün ya da seri numarası, son tüketme ve son satma tarihi yönetimi
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Satış Noktaları
     Module50100Desc=Satış noktası  modülü (POS)
    +Module50150Name=Satış Noktası
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Muhasebe (gelişmiş)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=IPP Yazdır
    -Module54000Desc=Cups IPP aryüzü kullanılarak doğrudan yazdırma (belgeler açılmadan)  (Yazıcı sunucudan görülmeli ve sunucuda CUPS kurulu olmalı)
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Anket, Araştırma ya da Oylama
    -Module55000Desc=Çevrimiçi anket, araştırma ya da oylama yapmak için modül (Doodle, Studs, Rdvz, gibi)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Kar Oranları
     Module59000Desc=Kar Oranı yönetimi modülü
     Module60000Name=Komisyonlar
     Module60000Desc=Komisyon yönetimi modülü
    -Module62000Name=Uluslararası ticari terimleri
    -Module62000Desc=Uluslararası ticari terimleri yönetmek için özellik ekle
    +Module62000Name=Uluslararası Ticaret Terimleri
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Kaynaklar
     Module63000Desc=Kaynakları yönetin (yazıcılar, arabalar, odalar, ...) böylece etkinliklerde paylaşabilirsiniz
     Permission11=Müşteri faturalarını oku
    @@ -651,9 +661,9 @@ Permission32=Ürün oluştur/düzenle
     Permission34=Ürün sil
     Permission36=Gizli ürünleri gör/yönet
     Permission38=Ürün dışaaktar
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Proje sil (paylaşılan projeler ve ilgilisi olduğum projeler)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Projeleri dışaaktar
     Permission61=Müdahale oku
     Permission62=Müdahale oluştur/düzenle
    @@ -686,7 +696,7 @@ Permission109=Gönderilenleri sil
     Permission111=Finansal tabloları oku
     Permission112=İşlem oluştur/düzenle/sil ve karşılaştır
     Permission113=Mali hesapları ayarla (kategoriler oluştur, yönet)
    -Permission114=İşlem uzlaştır
    +Permission114=Uzlaştırma işlemleri
     Permission115=İşlemleri ve hesap tablolarını dışaaktar
     Permission116=Hesaplar arasında aktarım
     Permission117=Çek dağıtımlarını yönet
    @@ -694,15 +704,15 @@ Permission121=Kullanıcıya bağlı üçüncü partileri oku
     Permission122=Kullanıcıya bağlı üçüncü parti oluştur/değiştir
     Permission125=Kullanıcıya bağlı üçüncü partileri sil
     Permission126=Üçüncü partileri dışaaktar
    -Permission141=Bütün proje ve görevleri oku (aynı zamanda ilgilisi olmadığım özel projeleri de)
    -Permission142=Bütün proje ve görevleri oluştur/düzenle (aynı zamanda ilgilisi olmadığım özel projeleri de)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Bütün proje ve görevleri sil (aynı zamanda ilgilisi olmadığım özel projeleri de)
     Permission146=Sağlayıcıları oku
     Permission147=İstatistikleri oku
     Permission151=Ödeme talimatlarını oku
     Permission152=Ödeme talimatı isteği oluştur/değiştir
     Permission153=Ödeme talimatı emirleri gönder/ilet 
    -Permission154=Alacaklandırılan/Reddedilen ödeme talimatlarını kaydet
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Sözleşme/abonelik oku
     Permission162=Sözleşme/abonelik oluştur/değiştir
     Permission163=Bir sözleşmeye ait bir hizmet/abonelik etkinleştir
    @@ -725,7 +735,7 @@ Permission187=Tedarikçi siparişi kapat
     Permission188=Tedarikçi siparişi iptal et
     Permission192=Satır oluştur
     Permission193=Satır iptal et
    -Permission194=Bant genişliği satırı oku
    +Permission194=Bant genişliği satırlarını okuyun
     Permission202=ADSL bağlantısı oluştur
     Permission203=Bağlantılı aiparişleri sipariş et
     Permission204=Sipariş bağlantıları
    @@ -750,12 +760,12 @@ Permission244=Gizli kategorilerin içeriğine bak
     Permission251=Diğer kullanıcıları ve grupları oku
     PermissionAdvanced251=Diğer kullanıcıları oku
     Permission252=Diğer kullanıcıların izinlerini oku
    -Permission253=Diğer kullanıcıları, grupları ve izinleri oluştur/değiştir
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=İç/dış kullanıcı ve izinlerini oluştur/değiştir
     Permission254=Yalnızca dış kullanıcıları oluştur/değiştir
     Permission255=Diğer kullanıcıların şifrelerini değiştir
     Permission256=Diğer kullanıcıları sil ya da engelle
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=CA oku
     Permission272=Fatura oku
     Permission273=Fatura dağıt
    @@ -765,7 +775,7 @@ Permission283=Kişi sil
     Permission286=Kişi dışaaktar
     Permission291=Tarife oku
     Permission292=Tarife izinlerini kur
    -Permission293=Müşteri tarifelerini değiştirmek
    +Permission293=Modify customers tariffs
     Permission300=Bar kod oku
     Permission301=Bar kod oluştur/değiştir
     Permission302=Bar kod sil
    @@ -787,11 +797,9 @@ Permission401=İndirim oku
     Permission402=İndirim oluştur/değiştir
     Permission403=İndirim doğrula
     Permission404=İndirim sil
    -Permission501=Çalışan sözleşmelerini/maaşlarını okuyun
    -Permission502=Çalışan sözleşmelerini/maaşlarını oluşturun/değiştirin
    -Permission511=Maaş ödemelerini okuyun
    -Permission512=Maaş ödemelerini oluşturun/değiştirin
    -Permission514=Ücretleri sil
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Ücretleri çıkart
     Permission520=Borçları oku
     Permission522=Borç oluştur/değiştir
    @@ -844,8 +852,8 @@ Permission1251=Dış verilerin veritabanına toplu olarak alınmasını çalış
     Permission1321=Müşteri faturalarını, özniteliklerin ve ödemelerini dışaaktar
     Permission1322=Reopen a paid bill
     Permission1421=Müşteri siparişleri ve özniteliklerini dışaaktar
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=İzin isteği sil
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Kaynak oku
     Permission63002=Kaynak oluştur/düzenle
     Permission63003=Kaynak sil
     Permission63004=Gündem etkinliklerine kaynak bağlantıla
    -DictionaryCompanyType=Üçüncü taraf türleri
    -DictionaryCompanyJuridicalType=Üçüncü taraf yasal formları
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Aday potansiyel düzeyi
     DictionaryCanton=Eyalet/İl
     DictionaryRegion=Bölgeler
    @@ -894,7 +902,7 @@ DictionaryVAT=KDV Oranları veya Satış Vergisi Oranları
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Ödeme koşulları
     DictionaryPaymentModes=Ödeme türleri
    -DictionaryTypeContact=Kişi/Adres türleri
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Kağıt biçimleri
    @@ -908,47 +916,47 @@ DictionarySource=Teklifin/siparişin kökeni
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Hesap planı modelleri
     DictionaryAccountancyJournal=Muhasebe günlükleri
    -DictionaryEMailTemplates=Eposta şablonları
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Birimler
     DictionaryProspectStatus=Aday durumu
    -DictionaryHolidayTypes=izin türleri
    -DictionaryOpportunityStatus=Proje/aday için fırsat durumu
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Kurulum kaydedildi
     SetupNotSaved=Kurulum kaydedilmedi
     BackToModuleList=Modül listesine geri git
    -BackToDictionaryList=Sözlük listesine dön
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=KDV Yönetimi
    -VATIsUsedDesc=Adaylar, faturalar, siparişler, v.b oluşturulurrken KDV oranı varsayılan olarak etkin standart kuralı izler:<br>Eğer satıcı KDV ne tabii değilse varsayılan KDV 0 olur, kural sonu.<br>Eğer (satıcı ülkesi=alıcı ülkesi)yse, varsayılan KDV satıcı ülkesindeki ürünün KDV dir. Kural sonu.<br>Eğer satıcı ve alıcı Avrupa Birliğindeyse ve mallar taşıma ürünleriyse (araba, gemi, uçak) varsayılan KDV 0 dır (KDV alıcı tarafından kendi ülkesindeki gümrüğe ödenir, satıcıya değil). Kural sonu.<br>Eğer satıcı ve alıcı Avrupa Birliğinde ise ve alıcı bir firma değilse, varsayılan KDV satılan ürünün KDV dir. Kural sonu.<br>Eğer satıcı ve alıcı Avrupa Birliğindeyse ve alıcı bir firmaysa varsayılan KDV 0 dır. Kural sonu.<br>Yoksa önerilen KDV=0 dır. Kural sonu.
    -VATIsNotUsedDesc=Dernekler, şahıslar ve küçük firmalar durumunda varsayılan olarak kullanılması önerilen KDV 0 dır.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Oran
     LocalTax1IsNotUsed=İkinci vergiyi kullanma
    -LocalTax1IsUsedDesc=İkinci bir vergi türü kullan (KDV den başka)
    -LocalTax1IsNotUsedDesc=Başka vergi türü kullanma (KDV den başka)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=İkinci vergi türü
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Üçüncü vergi türü
    -LocalTax2IsUsedDesc=Üçüncü bir vergi türü kullan (KDV den başka)
    -LocalTax2IsNotUsedDesc=Başka vergi türü kullanma (KDV den başka)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Üçüncü vergi türü
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Yönetimi
    -LocalTax1IsUsedDescES= Aday, fatura, sipariş, v.s. oluştururken varsayılan RE oranı etkin standart kuralı kullanır:<br>Eğer alıcı RE ye tabi değilse, varsayılan RE = 0. Kural sonu.<br>Eğer alıcı RE ye tabiyse RE varsayılan değerdir. Kural sonu.<br>
    -LocalTax1IsNotUsedDescES= Varsayılan olarak önerilen RE 0 dır. Kural sonu.
    -LocalTax1IsUsedExampleES= İspanya’da İspanyol IAE nin bazı özel bölümlerine tabi profesyoneller vardır.
    -LocalTax1IsNotUsedExampleES= İspanya’da onlar uzman ile derneklerdir ve İspanyol IAE nin belirli bölümlerine tabiidir.
    -LocalTax2ManagementES= IRPF Yönetimi
    -LocalTax2IsUsedDescES= Adayları, faturaları, siparişleri, v.s. oluştururken kullanılan öntanımlı RE oranı geçerli standart kurala uyar: <br>Eğer satıcı IRPF ye tabii değilse, IRPF varsayılan=0. Kural sonu.<br>Eğer satıcı IRPF ye tabiiyse IRPF varsayılandır.<br>
    -LocalTax2IsNotUsedDescES= Varsayılan olarak önerilen IRPF 0. Kural sonu.
    -LocalTax2IsUsedExampleES= İspanya'da, hizmet işleri yapan serbest meslek sahipleri ve bağımsız uzmanlar ile bu vergi sistemini seçen firmalardır.
    -LocalTax2IsNotUsedExampleES= İspanya’da vergi sistemine tabi olmayan işler.
    +LocalTax1ManagementES=RE Yönetimi
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=Varsayılan olarak önerilen RE 0 dır. Kural sonu.
    +LocalTax1IsUsedExampleES=İspanya’da İspanyol IAE nin bazı özel bölümlerine tabi profesyoneller vardır.
    +LocalTax1IsNotUsedExampleES=İspanya’da onlar uzman ile derneklerdir ve İspanyol IAE nin belirli bölümlerine tabiidir.
    +LocalTax2ManagementES=IRPF Yönetimi
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=Varsayılan olarak önerilen IRPF 0. Kural sonu.
    +LocalTax2IsUsedExampleES=İspanya'da, hizmet işleri yapan serbest meslek sahipleri ve bağımsız uzmanlar ile bu vergi sistemini seçen firmalardır.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Yerel vergi raporları
     CalcLocaltax1=Satışlar - Alışlar
     CalcLocaltax1Desc=Yerel Vergi raporları, yerel satış vergileri ile yerel alış vergileri farkı olarak hesaplanır
    @@ -958,14 +966,15 @@ CalcLocaltax3=Satışlar
     CalcLocaltax3Desc=Yerel Vergi raporları satışların yerel vergileri toplamıdır
     LabelUsedByDefault=Hiçbir çeviri kodu bulunmuyorsa varsayılan olarak kullanılan etiket
     LabelOnDocuments=Belgeler üzerindeki etiket
    -NbOfDays=Gün Sayısı
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Ay sonunda
     CurrentNext=Güncel/Sonraki
     Offset=Sapma
     AlwaysActive=Her zaman etkin
     Upgrade=Yükselt
     MenuUpgrade=Yükseltme / Genişletme
    -AddExtensionThemeModuleOrOther=Deploy/install external app/module
    +AddExtensionThemeModuleOrOther=Harici uygulama/modül alma/yükleme
     WebServer=Web sunucusu
     DocumentRootServer=Web sunucusu kök dizini
     DataRootServer=Veri dizini dosyaları
    @@ -984,7 +993,7 @@ DatabaseUser=Veritabanı kullanıcı
     DatabasePassword=Veritabanı parolası
     Tables=Tablolar
     TableName=Tablo adı
    -NbOfRecord=Kayıt sayısı
    +NbOfRecord=No. of records
     Host=Sunucu
     DriverType=Sürücü türü
     SummarySystem=Sistem bilgileri özeti
    @@ -996,7 +1005,7 @@ Skin=Dış görünüm teması
     DefaultSkin=Varsayılan dış görünüm teması
     MaxSizeList=Listenin ençok uzunluğu
     DefaultMaxSizeList=Liste için varsayılan ençok uzunluk
    -DefaultMaxSizeShortList=Kısa liste için ençok uzunluk (örn müşteri kartında)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Günün mesajı
     MessageLogin=Oturum açma sayfası mesajı
     LoginPage=Oturum açma sayfası
    @@ -1005,7 +1014,7 @@ PermanentLeftSearchForm=Sol menüdeki sabit arama formu
     DefaultLanguage=Kullanılan varsayılan dil (dil kodu)
     EnableMultilangInterface=Çoklu dil arayüzünü etkinleştir
     EnableShowLogo=Logoyu sol menüde göster
    -CompanyInfo=Şirket/Kuruluş bilgileri
    +CompanyInfo=Şirket/Kuruluş
     CompanyIds=Şirket/Kuruluş kimlikleri
     CompanyName=Adı
     CompanyAddress=Adresi
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Banka hesabı sahibi %s
     BankModuleNotActive=Banka hesapları modülü etkin değil
     ShowBugTrackLink=Bu bağlantıyı göster "<strong>%s</strong>"
     Alerts=Uyarılar
    -DelaysOfToleranceBeforeWarning=Uyarı öncesi süre toleransları
    -DelaysOfToleranceDesc=Bu ekran, ekranda %s resmi ile bir uyarı bildirilmeden önce tolere edilebilecek süreleri tanımlamanızı sağlar.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Planlanan etkinliklerdeki (gündem etkinliklerindeki) bekleme süresi (gün olarak) henüz tamamlanmadı
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Zamanında kapatılmamış projeler için uyarı öncesi bekleme süresi (gün olarak).
    -Delays_MAIN_DELAY_TASKS_TODO=Planlanan görevlerdeki (proje görevlerindeki) bekleme süresi (gün olarak) henüz tamamlanmadı
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Siparişler üzerindeki uyarı öncesi bekleme süresi (gün olarak) henüz işlenmedi
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Henüz kapatılmamış teklifler öncesi uyarı yapılmadan önceki süre toleransı (gün olarak).
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Henüz faturalandırılmamış teklifler öncesi uyarı yapılmadan önceki süre toleransı (gün olarak).
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Etkinleştirilecek hizmetler için uyarı öncesi gecikme toleransı (gün olarak).
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Süresi dolan hizmetler için uyarı öncesi süre toleransı (gün olarak).
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Ödenmemiş tedarikçi faturaları uyarısı öncesi süre toleransı (gün olarak)
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Ödenmemiş müşteri faturaları uyarısı öncesi süre toleransı (gün olarak)
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Bekleyen banka uzlaşmaları uyarısı öncesi süre toleransı (gün olarak)
    -Delays_MAIN_DELAY_MEMBERS=Gecikmiş üyelik ücreti uyarısı öncesi süre toleransı (gün olarak)
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Çek ödemesi uyarısı öncesi süre tolerans (gün olarak)
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Gider raporlarının onaylanmasından önceki uyarı için bekleme süresi (gün)
    -SetupDescription1=Ayarlar alanı, Dolibarr'ı kullanmaya başlamadan önceki ilk parametre ayarları içindir.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Diğer menü girişleri ile isteğe bağlı parametreleri yönetebilirsiniz.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Henüz işlenmemiş satın alma siparişleri için uyarı öncesi gecikme toleransı (gün olarak)
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Güvenlik denetimi etkinlikleri
     Audit=Denetim
     InfoDolibarr=Dolibarr Bilgileri
    @@ -1060,16 +1069,16 @@ LogEventDesc=Burada Dolibarr güvenlik etkinlikleri için günlük etkinleştire
     AreaForAdminOnly=Kurulum parametreleri sadece <b>yönetici olan kullanıcılar</b> tarafından ayarlanabilir.
     SystemInfoDesc=Sistem bilgileri sadece okuma modunda ve yöneticiler için görüntülenen çeşitli teknik bilgilerdir.
     SystemAreaForAdminOnly=Bu alan yalnız yönetici kullanıcılar için kullanılabilir. Hiçbir Dolibarr izini bu sınırı azaltamaz.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Dolibarr ile ilgili her bir parametreyi seçebilirsiniz
     AvailableModules=Mevcut uygulama/modüller
     ToActivateModule=Modülleri etkinleştirmek için, ayarlar alanına gidin (Giriş->Ayarlar>Modüller).
     SessionTimeOut=Oturum için zaman aşımı
    -SessionExplanation=Bu sayı oturumun bu gecikmeden önce asla sona ermeyeceğini garanti eder. Ama PHP oturum yönetimi, oturumun her zaman bu gecikmeden sonra sona ereceğini garanti etmez: Bu önbellek temizleme oturumu çalışıyor ise meydana gelir.<br>Not: hiçbir belirli sistem ile iç PHP süreci her <b>%s</b> erişiminde oturumu temizlemeyecektir ancak erişim diğer oturumlar tarafından yapılan yapılırsa temizlenir.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Mevcut tetikleyiciler
    -TriggersDesc=Tetikleyiciler <b>htdocs/core/triggers</b> dizinine kopyalandığında Dolibarr’ın iş akışının davranışlarını değiştirecek dosyalardır. Dolibarr etkinliklerinde etkinleştirilen (yeni firma oluşturma, fatura doğrulaması,…) yeni eylemleri gerçekleştirir.
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Bu dosyadaki tetikleyiciler adlarındaki <b>-NORUN</b> soneki tarafından devre dışı bırakılır.
     TriggerDisabledAsModuleDisabled=Bu dosyadaki tetikleyiciler <b>%s</b> modülü devre dışı bırakıldığında devre dışı kalır.
     TriggerAlwaysActive=Bu dosyadaki tetikleyiciler, etkin Dolibarr modülleri ne olursa olsun her zaman etkindir.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Bütün referans verisini ekleyin. Değerlerinizi varsayılana ek
     ConstDesc=Bu sayfa, önceki sayfalarda bulunmayan diğer tüm parametreleri düzenlemenizi sağlar. Bunlar çoğunlukla geliştiriciler veya gelişmiş sorun giderme için ayrılmış parametrelerdir. Seçeneklerin bir listesi için <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">buraya bakın</a>.
     MiscellaneousDesc=Burada güvenlik ile ilgili diğer tüm parametreler tanımlanır.
     LimitsSetup=Sınırlar/Doğruluk kurulumu
    -LimitsDesc=Burada Dolibarr’ın kullanımı için sınırlar, hassasiyet ve optimizasyon tanımlayabilirsiniz
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Birim fiyatlar için ençok ondalık
     MAIN_MAX_DECIMALS_TOT=Toplam fiyatlar için ençok ondalık
     MAIN_MAX_DECIMALS_SHOWN=Fiyatlar için ençok ondalık ekranda görüntülenir (isterseniz bu sayıdan sonra görmek istediğiniz kırpılmış <b>...</b> ekleyin)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Bir ürünün net birim fiyatı
     TotalPriceAfterRounding=Yuvarlama sonrası toplam fiyat (net/KDV/vergi dahil)
     ParameterActiveForNextInputOnly=Yalnız sonraki giriş için etkili Parametre
     NoEventOrNoAuditSetup=Hiçbir güvenlik etkinliği henüz kaydedilmedi. Eğer “kurulum - güvenlik – denetim” sayfasında denetim etkinleştirilmemiş ise bu normal olabilir.
    -NoEventFoundWithCriteria=Bu arama kriteri için herhangi bir güvenlik etkinliği bulunamadı.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Yerel postagönder kurulumunuza bakın
     BackupDesc=Tam bir Dolibarr yedeklemesi için şunları yapmalısınız:
     BackupDesc2=Bütün yüklenen ve oluşturulan dosyaları içeren belge dizini (<b>%s</b>) içeriğini kaydedin (1. Adımda oluşturulan tüm döküm dosyalarını içerir).
    -BackupDesc3=Veritabanınızın içeriğini (<b>%s</b>) bir döküm dosyasına kaydedin. Bunun için, aşağıdaki yardımcıyı kullanabilirsiniz.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Arşivlenmiş dizin güvenli bir yerde korunmalıdır.
     BackupDescY=Üretilen bilgi döküm dosyası güvenli bir yerde korunmalıdır.
    -BackupPHPWarning=Bu yöntemle yedekleme garanti edilmez. Öncekini yeğleyin
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Bir Dolibarr yedeklemesini geri yüklemek için şunları yapmalısınız:
    -RestoreDesc2=Belgeler dizinindeki dosya ağacını ayıklamak için arşiv dosyasını (örneğin zip dosyası) yeni bir Dolibarr kurulumu belge dizinine ya da bu mevcut belge dizinine ayıklayın (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Veriyi bir yedekleme döküm dosyasından, yeni Dolibarr kurulumu veritabanına ya da geçerli kurulumun veritabanına geri yükleyin (<b>%s</b>). Uyarı, geri yükleme tamamlandıktan sonra yeniden bağlanabilmek için yedekleme yapıldığı sırada varolan bir kullanıcı adı/parolası kullanmalısınız. Bu geçerli kuruluma yedekleme veritabanını geri yüklemek için aşağıdaki yardımcıyı kullanabilirsiniz.
     RestoreMySQL=MySQL içeaktar
     ForcedToByAModule= Bu kural bir aktif modül tarafından <b>s</b> ye zorlanır
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=Bu komutu <b>%s</b> kullanıcı
     YourPHPDoesNotHaveSSLSupport=SSL fonksiyonları PHP nizde mevcut değildir
     DownloadMoreSkins=Daha fazla kaplama indirin
     SimpleNumRefModelDesc=Referans sayısını %syymm-nnnn biçimi ile girin; yy yıl mm ay ve nnnn deliksiz ve sıfırlanamayan bir dizidir
    -ShowProfIdInAddress=Belgelerde uzmanlık kimliğini adresleri ile birlikte göster
    -ShowVATIntaInAddress=Belgelerde adresli KDV Intra numaralarını gizle
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Kısmi çeviri
    -MAIN_DISABLE_METEO=Meteo görünümünü engelle
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standart mod
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Yüzde modu etkin
     MeteoUseMod=Click to use %s
     TestLoginToAPI=API  oturum açma denemesi
    -ProxyDesc=Dolibarr’ın bazı özelliklerinin çalışması için internet erişimi olması gerekir. Bunun için burada parametreleri tanımlayın. Dolibarr sunucusu bir proxy sunucu arkasında ise, bu parametreler üzerinden Internet erişiminin nasıl olacağını Dolibarr’a söyler.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Dış erişim
     MAIN_PROXY_USE=Bir proxy sunucusu kullan (aksi takdirde internete doğrudan erişin)
     MAIN_PROXY_HOST=Proxy sunucusu Adı/Adresi
     MAIN_PROXY_PORT=Proxy sunucusu portu
     MAIN_PROXY_USER=Proxy sunucusunu kulanmak için oturum açma
     MAIN_PROXY_PASS=Proxy sunucusunu kullanacak parola
    -DefineHereComplementaryAttributes=Burada bütün öznitelikleri tanımlayın, yalnızca mevcut varsayılanları değil desteklenmenizi istediğiniz %s leri de.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Tamamlayıcı öznitelikler
     ExtraFieldsLines=Tamamlayıcı öznitelikler (satırlar)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Tamamlayıcı öznitelikler (sipariş satırları)
     ExtraFieldsSupplierInvoicesLines=Tamamlayıcı öznitelikler (fatura satırları)
     ExtraFieldsThirdParties=Ek öznitelikler (üçüncü taraf)
    -ExtraFieldsContacts=Ek öznitelikler (kişi/adres)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Tamamlayıcı öznitelikler (üye)
     ExtraFieldsMemberType=Tamamlayıcı öznitelikler (üye türü)
     ExtraFieldsCustomerInvoices=Tamamlayıcı öznitelikler (faturalar)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=yalnızca boşluksuz olarak alfasayısal ve kü
     SendmailOptionNotComplete=Uyarı, bazı Linux sistemlerinde, epostanızdan eposta göndermek için eposta gönderme uygulaması kurulumu –ba seçeneğini içermelidir (php.ini dosyanızın içine parameter mail.force_extra_parameters). Eğer bazı alıcılar hiç eposta alamazsa, bu PHP parametresini mail.force_extra_parameters = -ba ile düzenleyin.
     PathToDocuments=Belgelerin yolu
     PathDirectory=Dizin
    -SendmailOptionMayHurtBuggedMTA="PHP doğrudan posta" yöntemini kullanarak postalar gönderme özelliği bazı posta alıcısı sunucuları tarafından doğru olarak çözümlenemeyen bir posta iletisi oluşturur. Sonuç ise bazı postaların hatalı platformlar tarafından barındırılan kişiler tarafından okunamaz olmasıdır. Bu durum bazı İnternet sağlayıcılarına özgüdür (Örn: Fransa’daki Orange gibi). Bu Dolibarr ya da PHP için bir sorun değildir ama alıcı posta sunucusu için sorundur. Ancak Dolibarr’ı bundan korumak için Kurulum->Diğer de MAIN_FIX_FOR_BUGGED_MTA yı 1 yapma seçeneğini ekleyebilirsiniz. Ancak SMTP standartlarına sıkıca uyan diğer servislerde sorunla karşılaşabilirsiniz. Diğer bir çözüm (önerilen) ise hiçbir sakıncası olmayan "SMTP soket kütüphanesi" ni kullanmaktır.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Çeviri ayarları
     TranslationKeySearch=Çeviri anahtarı veya dizesi ara
     TranslationOverwriteKey=Çeviri dizesinin üzerine yaz
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=Ayrıca aşağıdaki tabloyu doldurarak dizeleri geçersiz kılabilirsiniz. Dilinizi "%s" açılır tablosundan seçin, anahtar dizeyi "%s" içine ekleyin ve yeni çevirinizi de "%s" içine ekleyin.
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Çeviri dizesi
     CurrentTranslationString=Geçerli çeviri dizesi
     WarningAtLeastKeyOrTranslationRequired=En azından anahtar veya çeviri dizesi için bir arama kriteri gereklidir
     NewTranslationStringToShow=Gösterilecek yeni çeviri dizesi
     OriginalValueWas=Orijinal çevirinin üzerine yazılır. Orijinal değerler şu şekildeydi: <br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Etkinleştirilmiş uygulama/modüller: <b>%s</b>/<b>%s</b>
     YouMustEnableOneModule=Enaz 1 modül etkinleştirmelisiniz
    -ClassNotFoundIntoPathWarning=Sınıf %s PHP youlnda bulunamadı
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yazın evet
    -OnlyFollowingModulesAreOpenedToExternalUsers=Not, izinler verildiği takdirde yalnızca aşağıdaki modüller dış kullanıcılara açıktır (bu tür kullanıcıların izinleri ne olursa olsun):
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Oturum depolaması Suhosin tarafından şifrelendi
     ConditionIsCurrently=Koşul şu anda %s durumunda
    -YouUseBestDriver=Kullandığınız sürücü %s şu anda en iyi sürücüdür.
    -YouDoNotUseBestDriver=Kullandığınız %s sürücüsüdür, %s sürücüsü önerilir.
    -NbOfProductIsLowerThanNoPb=Veritabanında yalnızca %s ürün/hizmet var. Bu, herhangi bir optimizasyon gerektirmez.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Optimizasyon ara
    -YouHaveXProductUseSearchOptim=Veritabanında %s ürün var. Giriş-Ayarlar-Diğer den PRODUCT_DONOTSEARCH_ANYWHERE değişmezini 1 olarak eklemelisiniz. Veritabanının dizin kullanmasını sağlamak için aramayı dizelerin başlangıcıyla sınırlandırır ve hemen yanıt alırsınız.
    -BrowserIsOK=%s web tarayıcısını kullanıyorsunuz. Bu tarayıcı güvenlik ve performans için uygundur.
    -BrowserIsKO=%s web tarayıcısını kullanıyorsunuz. Bu tarayıcı güvenlik, performans ve güvenirlik için kötü bir seçimdir. Firefox, Chrome, Opera veya Safari kullanmanızı öneririz.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug yüklüdür.
     XCacheInstalled=XDebug yüklüdür.
    -AddRefInList=Listede müşteri/tedarikçi ref (liste ya da açılır liste seç) ve köprülerin çoğunu göster. Üçüncü partiler "Büyük firma" yerine "CC12345 - SC45678 - Büyük firma" adıyla görüntülenecektir.
    -AskForPreferredShippingMethod=Üçüncü Partiler için yeğlenen Gönderme Yöntemini isteyin.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=%s Alanının düzenlenmesi
     FillThisOnlyIfRequired=Örnek: +2 (saat dilimi farkını yalnız zaman farkı sorunları yaşıyorsanız kullanın)
     GetBarCode=Barkovizyon al
     ##### Module password generation
     PasswordGenerationStandard=Dolibarr iç algoritmasına göre bir şifre girin: 8 karakterli sayı ve küçük harf içeren.
    -PasswordGenerationNone=Oluşturulmuş hiçbir parola önermeyin. Parola el ile yazılmalıdır.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Kişisel tanımlanmış yapılandırmanıza göre bir parola girin.
     SetupPerso=Yapılandırmanıza göre
     PasswordPatternDesc=Parola modeli açıklaması
    @@ -1195,23 +1205,23 @@ UserMailRequired=Yeni bir kullanıcı oluşturmak için gerekli EPosta
     HRMSetup=İK modülü ayarları
     ##### Company setup #####
     CompanySetup=Firmalar modülü kurulumu
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Müşteri/Tedarikçi kodlarının otomatik üretimi için seçenekler
    +AccountCodeManager=Müşteri/Tedarikçi muhasebe kodlarının otomatik üretimi için seçenekler
     NotificationsDesc=Eposta özelliği, bazı Dolibarr etkinlikleri için sessiz ve otomatik olarak posta göndermenizi sağlar. Bildirim hedefleri şu şekilde tanımlanabilir:
     NotificationsDescUser=* kullanıcı başına, her seferinde bir kullanıcı.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* veya modül ayarları sayfasında genel hedef epostaları ayarlanarak.
    -ModelModules=Belge şablonları
    -DocumentModelOdt=OpenDocuments şablonlarından belgeler oluşturun (OpenOffice, KOffice, TextEdit .ODT veya .ODS dosyaları)
    +ModelModules=Belge Şablonları
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Taslak belge üzerinde filigran
     JSOnPaimentBill=Ödeme formunda ödeme satırlarını otomatik doldurma özelliğini etkinleştir
    -CompanyIdProfChecker=Uzman Kimliği kuralları
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Eşsiz olmalıdır?
    -MustBeMandatory=Üçüncü tarafları oluşturmak zorunludur?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Faturaları doğrulamak zorunludur ?
     TechnicalServicesProvided=Sağlanan teknik hizmetler
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=<b>%s</b> biçimine göndermek için gerekli bağlantıyı aşağıdaki bağlantıdan bulabilirsiniz:%s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=<b>%s</b> biçimine göndermek için gerekli bağlantıy
     BillsSetup=Faturalar modülünün kurulumu
     BillsNumberingModule=Fatura ve iade faturaları numaralandırma modülü
     BillsPDFModules=Fatura belgesi modelleri
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Ödeme belge modelleri
     CreditNote=İade faturası
     CreditNotes=İade faturaları
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Her üye için bir Kullanıcı adı yürütün
     AdherentMailRequired=Yeni üye oluşturmak için E-posta gereklidir
     MemberSendInformationByMailByDefault=Üyelere onay epostası (doğrulama ya da yeni abonelik) göndermek için onay kutusu varsayılan olarak açıktır
     VisitorCanChooseItsPaymentMode=Ziyaretçi mevcut ödeme modlarından birini seçebilir
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Kurulumu
     LDAPGlobalParameters=Genel parametreler
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= LDAP arama testi
     LDAPSynchroOK=Senkronizasyon testi başarılı
     LDAPSynchroKO=Başarısız senkronizasyon testi
    -LDAPSynchroKOMayBePermissions=Başarısız senkronizasyon testi. Bu sunucuya bağlantının düzgün yapılandırılmış olduğunu ve LDAP güncellemesi sağladığını kontrol edin
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=LDAP sunucusu için TCP bağlantı başarılı (Sunucu =%s, Port =%s)
     LDAPTCPConnectKO=LDAP sunucusuna TCP bağlantısı başarısız (Server =%s başarısız, Port =% s)
    -LDAPBindOK=LDAP sunucusuna bağlantı/kimlik doğrulama başarılı (Server=%s, Port=%s, Yönetici=%s, Parola=%s)
    -LDAPBindKO=LDAP sunucusuna bağlantı/kimlik doğrulama başarısız (Server=%s, Port=%s, Yönetici=%s, Parola=%s
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP sunucusu sürüm 3 için yapılandırılmış
     LDAPSetupForVersion2=LDAP sunucusu sürüm 2 için yapılandırılmış
     LDAPDolibarrMapping=Dolibarr Eşleme
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Oturum aç (samba, activedirectory)
     LDAPFieldLoginSambaExample=Örnek: sAMAccountName
     LDAPFieldFullname=İlk Adı
     LDAPFieldFullnameExample=Örnek: cn
    -LDAPFieldPasswordNotCrypted=Parola şifrelendirilmemiş
    -LDAPFieldPasswordCrypted=Parola şifrelendirilmiş
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Örnek: kullanıcıParolası
     LDAPFieldCommonNameExample=Örnek: cn
     LDAPFieldName=Adı
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Örnek değerler aşağıdaki yüklü şemalarla <b> OpenLDAP </ b> için tasarlanmıştır: <b> core.schema, cosine.schema, inetorgperson.schema </ b>). Eğer o değerleri ve OpenLDAP kullanıyorsanız, LDAP yapılandırma dosyasını <b> slapd.conf </ b> tüm o yüklü şemaları alacak şekilde değiştirmelisiniz.
     ForANonAnonymousAccess=Bir kimlik doğrulamalı giriş için (örneğin bir yazma girişi)
     PerfDolibarr=Performans ayar/optimizasyon raporu
    -YouMayFindPerfAdviceHere=Bu sayfada bazı denetimler veya performans ile ilgili tavsiyeler bulacaksınız.
    -NotInstalled=Yüklü değil, yani sunucu bundan dolayı yavaş değil.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=\t\nUygulamalı önbellek
     MemcachedNotAvailable=Uygulanabilir önbellek bulunamadı. Performansı Memcached önbellek sunucusu ve bu önbellek sunucusunu kullanabilecek bir modül kurarak arttırabilirsiniz.<br>Daha fazla bilgiyi buradan <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>bulabilirsiniz. Bu tür önbellek sunucusunu çok fazla web barındırıcısının sağlamadığını unutmayın.
     MemcachedModuleAvailableButNotSetup=Uygulamalı önbellek için memcached modülü bulundu ama modülün kurulumu tamamlanmamış.
     MemcachedAvailableAndSetup=Memcached modülü etkinleştirilmiş memcached sunucusunu kullanmak içindir.
     OPCodeCache=OPCode önbelleği
    -NoOPCodeCacheFound=OPCode önbelleği bulunamadı. Belki XCache den başka bir OPCode önbelleği kullanabilirsiniz veya eAccelerator (iyi), belki de OPCode önbelleğiniz yoktur (çok kötü).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=Statik kaynaklar (css, img, javascript) için HTTP önbelleği
     FilesOfTypeCached=%s türündeki dosyalar HTTP sunucusu tarafından önbelleğe alınır
     FilesOfTypeNotCached=%s türündeki dosyalar HTTP sunucusu tarafından önbelleğe alınmaz
     FilesOfTypeCompressed=%s türündeki dosyalar HTTP sunucusu tarafından sıkıştırılır
     FilesOfTypeNotCompressed=%s türündeki dosyalar HTTP sunucusu tarafından sıkıştırılmaz
     CacheByServer=Sunucu önbelleği
    -CacheByServerDesc=Örneğin "ExpiresByType image/gif A2592000" Apache yönergesini kullanarak
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Tarayıcı önbelleği
     CompressionOfResources=HTTP yanıtlarının sıkıştırılması
    -CompressionOfResourcesDesc=Örneğin "AddOutputFilterByType DEFLATE" Apache yönergesini kullanarak
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Böyle bir otomatik algılama mevcut tarayıcılar için olası değildir
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Varsayılan arama filtreleri
     DefaultSortOrder=Varsayılan sıralama düzenleri
     DefaultFocus=Varsayılan odak alanları
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Ürünler modülü kurulumu
     ServiceSetup=Hizmetler modülü kurulumu
     ProductServiceSetup=Ürünler ve Hizmetler modüllerinin kurulumu
     NumberOfProductShowInSelect=Açılır seçim (combo) listelerindeki ençok ürün sayısı (0 = sınır yok)
    -ViewProductDescInFormAbility=Formlarda ürün tanımlarının görselleştirilmesi (aksi durumda açılır araç ipucu olarak)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Eğer ürün/hizmet teklifte varsa Ekli Dosyalar sekmesinde ürün/hizmet seçeneğini etkinleştirin, böylece ürün PDF belgesini PDF azur teklifine birleştirirsiniz
    -ViewProductDescInThirdpartyLanguageAbility=Ürün açıklamalarının üçüncü taraf dilinde gösterilmesi
    -UseSearchToSelectProductTooltip=Ayrıca çok fazla sayıda ürününüz varsa (>100 000), Kurulum->Diğer den PRODUCT_DONOTSEARCH_ANYWHERE değişmezini 1 e ayarlayarak hızı arttırabilirsiniz. Sonra arama dizenin başlamasıyla sınırlı olacaktır.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Ürünler için kullanılacak varsayılan barkod türü
     SetDefaultBarcodeTypeThirdParties=Üçüncü partiler için kullanılacak varsayılan barkod tipi
     UseUnits=Sipariş, teklif ya da fatura satırlarının yazımı sırasında kullanmak üzere Miktar için bir ölçü birimi tanımlayın
    @@ -1503,7 +1516,7 @@ SendingsSetup=Gönderme modülü kurulumu
     SendingsReceiptModel=Makbuz gönderme modeli
     SendingsNumberingModules=Gönderi numaralandırma modülü
     SendingsAbility=Müşteri teslimatlarında sevkiyat tablolarını destekler
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Sevkiyatlarda serbest metin
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Ürün teslimat fişlerinde numaralandırma modülü
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Gelişmiş editör
     ActivateFCKeditor=Gelişmiş düzenleyiciyi şunun için etkinleştir:
     FCKeditorForCompany=Öğe açıklamaları ve notları için WYSIWIG oluşturma/düzenleme (ürünler/hizmetler hariç)
     FCKeditorForProduct=Ürünlerin/hizmetlerin açıklamaları ve notlar için WYSIWIG oluşturma/düzenleme
    -FCKeditorForProductDetails=Bütün öğelerde(teklifler, siparişler, faturalar, v.s...) ürünlerin ayrıntı satırları için WYSIWIG oluşturma/düzenleme. <font class="warning">Uyarı: Bu durum için bu seçeneğin kullanılması, özel karakterlerin kullanımında ve PDF dosyalarının oluşturulmasında sorunlar yaratacağı için ciddi olarak önerilmez.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= Postaları WYSIWIG olarak oluşturma/düzenleme
     FCKeditorForUserSignature=Kullanıcı imzasının WYSIWIG olarak oluşturulması/düzenlenmesi
     FCKeditorForMail=Tüm postaların WYSIWIG olarak oluşturması/düzenlenmesi (Araçlar->ePostlama hariç)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Bağlantı başarılı ama veritabanı bir OSCommerce veritabanı olarak görünmüyor. (Anahtar %s tablo %s te bulunamadı)
    -OSCommerceTestOk='%s' Sunucusuna '%s' veritabanında kullanıcı '% s' ile bağlantı başarılı.
    -OSCommerceTestKo1='%s' Sunucusuna bağlantı başarılı ancak veritabanı '% s' e ulaşılamadı.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk='%s' sunucusuna '%s' veritabanında kullanıcı '%s' ile bağlantı başarılı.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=’%s’ Sunucusuna ‘%s’ kullanıcısı ile bağlantı başarısız oldu.
     ##### Stock #####
    -StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=Eğer bir Satış Noktası modülü kullanıyorsanız (varsayılan olarak sağlanan ya da başka bir dış POS modülü), bu ayarlar Satış Noktası modülünüz tarafından gözardı edilebilir. Buradaki seçenekler ne olursa olsun çoğu satış notası modülü ön tanımlı olarak anında fatura oluşturacak ve stok eksiltecek şeklide tasarlanmıştır. Yani, Satış Noktanızdan bir satış kaydederken stok eksiltme gereksiniminiz varsa da yoksa da, aynı zamanda POS modülünüzün ayarlarını da denetleyin.
    +StockSetup=Stok modülü kurulumu
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menü silindi
     Menus=Menüler
    @@ -1548,7 +1561,7 @@ DetailRight=Yetkisiz gri menüleri gösterme koşulu
     DetailLangs=Etiket kodu çevirisi için Lang dosya adı
     DetailUser=İç/dış/tümü
     Target=Hedef
    -DetailTarget=Bağlantılar için hedef (_blank üst yeni bir pencere açmak için)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Düzey (-1: Üst menü, 0: başlık menüsü, >0 menü ve alt menü)
     ModifMenu=Menü değiştir
     DeleteMenu=Menü girişi sil
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=KDV nedeniyle: <br> - malların tesliminde ( fatura tarihin
     OptionVatDebitOptionDesc=KDV nedeniyle: <br> - malların tesliminde ( fatura tarihini kullanırız) <br> - hizmet faturalarında (borç)
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Seçilen seçeneğe göre KDV uygunluk süresi:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Teslimatta
     OnPayment=Ödemede
     OnInvoice=Faturada
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Alış hesap. kodu
     AgendaSetup=Etkinlik ve gündem modülü kurulumu
     PasswordTogetVCalExport=Dışaaktarma bağlantısı yetki anahtarı
     PastDelayVCalExport=Bundan daha büyük etkinliği dışaaktarma
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Etkinlik oluşturma formundaki etkinlik türü için bu varsayılan değeri otomatik olarak ayarla
    -AGENDA_DEFAULT_FILTER_TYPE=Gündem görünümü arama süzgeçinde, etkinlikler için otomatik olarak bu etkinlik türünü ayarlar
    -AGENDA_DEFAULT_FILTER_STATUS=Gündem görünümü arama süzgeçinde, etkinlikler için otomatik olarak bu durum türünü ayarlar
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Gündem menüsünü seçtiğinizde varsayılan olarak hangi sekmenin açılmasını istiyorsunuz
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Sesli bildirimi etkinleştir
     AGENDA_SHOW_LINKED_OBJECT=Bağlantılı nesneyi gündem görünümünde göster
     ##### Clicktodial #####
     ClickToDialSetup=TıklaAra modülü kurulumu
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=Bu modül telefon numaralarının tıklanabilmesini sağlar. Bu simgeye tıklanma telefonunuz ile bu telefonun aranmasını sağlar. Bu işlem Dolibarr'dan bir çağrı merkezini aramak için kullanılır, örneğin SIP sisteminde bir telefon numarasının aranması.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Telefon numaraları üzerinde yalnızca bir "tel:" linki kullan
    -ClickToDialUseTelLinkDesc=Eğer kullanıcılarınız bir softphone ya da web tarayıcıdan farklı olarak aynı bilgisayarda kurulu bir arayüz kullanıyorsa ve web tarayıcınızda "tel:" ile başlayan bir köprü tıklandığında aranıyorsa bu yöntemi kullanın. Tam bir sunucu çözümüne gereksiniminiz varsa (yerel yazılım kurulumu gereksinimi olmadan) bunu "HAYIR" olarak ayarlayın ve sonraki alanı doldurun.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Satış Noktası
     CashDeskSetup=Satış Noktası kurulum modülü
    -CashDeskThirdPartyForSell=Satışlar için kullanılacak varsayılan genel üçüncü parti
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Nakit ödemeleri almak için kullanılan varsayılan hesap
     CashDeskBankAccountForCheque= Ödemeleri çek ile almak için kullanılan varsayılan hesap
     CashDeskBankAccountForCB= Nakit ödemeleri kredi kartıyla almak için kullanılan varsayılan hesap
    -CashDeskDoNotDecreaseStock=Satış Noktasından bir satış yapıldığında stok azaltılmasını engelle ("hayır"sa POS tan yapılan her satışta stok eksiltilmesi yapılır, Stok modülündeki seçenek ayarı ne olursa olsun).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Depoyu stok azaltmada kullanmak için zorla ve sınırla
    -StockDecreaseForPointOfSaleDisabled=Satış Noktasından stok eksiltme engelli
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=POS taki stok eksiltmesi parti yönetimi ile uyumlu değildir.
    -CashDeskYouDidNotDisableStockDecease=Satış Noktasından satış yapılırken stok eksiltilmesini engellemediniz. Bu durumda depo gereklidir.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Yerimi modülü kurulumu
    -BookmarkDesc=Bu modül yerimlerini yönetmenize olanak sağlar. Ayrıca, soldaki menüden herhangi Dolibarr sayfaları veya dış web siteleri için kısayollar ekleyebilirsiniz.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Sol menüde gösterilecek ençok yerimi sayısı
     ##### WebServices #####
     WebServicesSetup=WebHizmetleri modülü kurulumu
    @@ -1637,8 +1650,8 @@ ChequeReceiptsNumberingModule=Çek Makbuzu Numaralandırma modülü
     MultiCompanySetup=Çoklu şirket modülü kurulumu
     ##### Suppliers #####
     SuppliersSetup=Tedarikçi modülü kurulumu
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    -SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
    +SuppliersInvoiceModel=Tedarikçi faturasının eksiksiz şablonu (logo...)
     SuppliersInvoiceNumberingModel=Tedarikçi faturaları numaralandırma modelleri
     IfSetToYesDontForgetPermission=Evet olarak ayarlıysa, ikinci onayı sağlayacak grup ve kullanıcılara izin sağlamayı unutmayın
     ##### GeoIPMaxmind #####
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Proje modülü kurulumu
     ProjectsModelModule=Proje raporu belge modeli
     TasksNumberingModules=Görev numaralandırma modülü
     TaskModelModule=Görev raporu belge modeli
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Muhasebe dönemleri
    @@ -1675,7 +1688,7 @@ NoAmbiCaracAutoGeneration=Otomatik oluşturma için belirsiz karakter ("1","l","
     SalariesSetup=Ücretler Modülü Ayarları
     SortOrder=Sıralama düzeni
     Format=Biçim
    -TypePaymentDesc=0:Customer payment type, 1:Vendor payment type, 2:Both customers and vendors payment type
    +TypePaymentDesc=0:Müşteri ödeme türü, 1:Tedarikçi ödeme türü, 2:Hem müşteri hem de tedarikçi ödeme türü
     IncludePath=Yolu içerir (%s değişlende tanımlanır)
     ExpenseReportsSetup=Gider Raporları modülü Ayarları
     TemplatePDFExpenseReports=Gider raporu belgesi oluşturmak için belge şablonları
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification="Bildirimler" modülünü
     ListOfNotificationsPerUser=Kullanıcı başına bildirimler listesi*
     ListOfNotificationsPerUserOrContact=Kullanıcı başına veya kişi başına bildirimler listesi**
     ListOfFixedNotifications=Sabit bildirimler listesi
    -GoOntoUserCardToAddMore=Kullanıcılardan bildirimleri kaldırmak veya eklemek için kullanıcının "Bildirimler" sekmesine git
    -GoOntoContactCardToAddMore=Kişilerden/adreslerden bildirimleri eklemek ya da kaldırmak için üçüncü taraf kişileri "Bildirimler" sekmesine git
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Sınır
     BackupDumpWizard=Veritabanı yedekleme döküm dosyası oluşturma sihirbazı
     SomethingMakeInstallFromWebNotPossible=Web arayüzünden dış modül kurulumu aşağıdaki nedenden ötürü olanaksızdır:
    @@ -1697,7 +1710,8 @@ InstallModuleFromWebHasBeenDisabledByFile=Dış modülün uygulama içerisinden
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Tablo satırlarını fare üzerine geldiğinde vurgula
     HighlightLinesColor=Fare üzerinden geçerken satır rengini vurgula (vurgulanmaması için boş bırakın)
    -TextTitleColor=Text color of Page title
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
    +TextTitleColor=Sayfa başlığının metin rengi
     LinkColor=Bağlantıların rengi
     PressF5AfterChangingThis=Bu değeri değiştirdikten sonra geçerli olabilmesi için klavyede CTRL+F5 tuşlarına basın veya tarayıcınızın önbelleğini temizleyin
     NotSupportedByAllThemes=Yalnızca çekirdek temaları ile çalışır ancak dış temalar tarafından desteklenmez
    @@ -1706,22 +1720,22 @@ TopMenuBackgroundColor=Üst menü için arka plan rengi
     TopMenuDisableImages=Üst menüdeki görüntüleri gizle
     LeftMenuBackgroundColor=Sol menü için arka plan rengi
     BackgroundTableTitleColor=Tablo satırı başlığı için arka plan rengi
    -BackgroundTableTitleTextColor=Text color for Table title line
    +BackgroundTableTitleTextColor=Tablo satırı başlığı için metin rengi
     BackgroundTableLineOddColor=Tabloda tek satırlar için arka plan rengi
     BackgroundTableLineEvenColor=Tabloda çift satırlar için arka plan rengi
     MinimumNoticePeriod=Enaz bildirim süresi (İzin isteğiniz bu süreden önce yapılmalı)
     NbAddedAutomatically=Her ay (otomatik olarak) bu kullanıcının sayacına eklenen gün sayısı 
     EnterAnyCode=Bu alan satırın tanınması için bir referans içerir. Özel karakterler hariç seçeceğiniz herhangi bir değeri girebilirsiniz.
    -UnicodeCurrency=Burada ayraçlar arasına para birimi simgesini belirten bayt sayısını girin. Örneğin: $ için [36] - Brezilya Real'i için [82,36] - € için [8364] girin
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=RGB rengi HEX formatındadır, örn: FF0000
     PositionIntoComboList=Satırın kombo listesindeki konumu
     SellTaxRate=Satış vergisi oranı
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=Eğer taşıma sağlayıcı ya da taşımacı size sevkiyatınızın durumunu denetlemek için bir web sayfası ya da sitesi önerirse, bunu burada girebilirsiniz. {TRACKID} anahtarını URL parametrelerinde kullanarak kullanıcı tarafından sevkiyat kartına girilen izleme numarası değeriyle değiştirebilirsiniz.
    -OpportunityPercent=Bir fırsat oluşturduğunuzda, tahmini bir proje/aday tutarı gireceksiniz. Fırsatın durumuna göre, oluşturulacak bütün fırsatların genel tutarını hesaplamak için bu tutar bu oran ile çarpılabilir. Değer yüzde cinsindedir (0 ile 100 arasında)
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=Bu şablon kaydının ayrıldığı öğe
     TypeOfTemplate=Şablon türü
    -TemplateIsVisibleByOwnerOnly=Şablon yalnızca kullanıcı tarafından görünür
    +TemplateIsVisibleByOwnerOnly=Şablon yalnızca sahibi tarafından görülebilir
     VisibleEverywhere=Heryerde görünür
     VisibleNowhere=Hiçbir yerde görünür değil
     FixTZ=Saat Dilimi Farkı
    @@ -1735,24 +1749,24 @@ MailToSendInvoice=Müşteri faturaları
     MailToSendShipment=Sevkiyatlar
     MailToSendIntervention=Müdahaleler
     MailToSendSupplierRequestForQuotation=Quotation request
    -MailToSendSupplierOrder=Purchase orders
    -MailToSendSupplierInvoice=Vendor invoices
    +MailToSendSupplierOrder=Satın alma siparişleri
    +MailToSendSupplierInvoice=Tedarikçi faturaları
     MailToSendContract=Sözleşmeler
     MailToThirdparty=Üçüncü partiler
     MailToMember=Üyeler
     MailToUser=Kullanıcılar
    -MailToProject=Projects page
    +MailToProject=Projeler sayfası
     ByDefaultInList=Liste görünümünde varsayılana göre göster
     YouUseLastStableVersion=En son kararlı sürümü kullanıyorsunuz
     TitleExampleForMajorRelease=Bu ana sürümü duyurmak için kullanabileceğiniz mesaj örneği (web sitenizde rahatça kullanabilirsiniz)
     TitleExampleForMaintenanceRelease=Bu bakım sürümü duyurmak için kullanabileceğiniz mesaj örneği (web sitenizde rahatça kullanabilirsiniz)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc="Her ürün/hizmet için çok seviyeli fiyat" açık ise her ürün için farklı fiyatlar (her fiyat seviyesi için bir) tanımlayabilirsiniz. Zaman kazanmak için, burada, temel fiyata göre her seviye için kendiliğinden hesaplama yapılması için kural girebilirisiniz. Bu sayfa zaman kazanmanız için vardır ve yalnzca diğer fiyat seviyeleri temel fiyata bağlı ise kullanışlıdır. Çoğu durumda bu sayfayı gözardı edebilirsiniz.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Ürün belgeleri için şablonlar
    -ToGenerateCodeDefineAutomaticRuleFirst=Otomatik kodlar oluşturabilmek için önce otomatik olarak barkod numarası tanımlayacak bir yönetici tanımlamalısınız.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=Olası yedek değişkenlerin lstesi için * notuna bakın
    -SeeChangeLog=See ChangeLog file (english only)
    +SeeChangeLog=ChangeLog dosyasına bakın (sadece ingilizce)
     AllPublishers=Bütün yayıncılar
     UnknownPublishers=Bilinmeyen yayıncılar
     AddRemoveTabs=Sekme ekle ya da sil
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Başka sayfa ya da hizmet ekle
     AddModels=belge ya da numaralandırma şablonu ekle
     AddSubstitutions=Yedek anahtar ekle
     DetectionNotPossible=Algılama olası değil
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=Mevcut API listesi
    -activateModuleDependNotSatisfied="%s" Modülü eksik olan "%s" modülüne bağlıdır, yani "%1$s" düzgün çalışmayabilir. Lütfen  "%2$s" modülünü kurun ya da herhangi bir sürprizle karşılaşmamak için  "%1$s" modülünü devre dışı bırakın.
    -CommandIsNotInsideAllowedCommands=Çalıştırmaya çalıştığınız komut, <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> parametre dosyası içindeki izin verilen komutlar olarak tanımlanan listede yoktur.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Açılış sayfası
    -SamePriceAlsoForSharedCompanies=Çok firmalı modülü kullanıyorsanız, eğer ürünler ortamlar arasında paylaşılıyorsa "Tek fiyat" seçeneği ile fiyat aynı zamanda tüm firmalar için aynı olur
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=Kullanıcının tanımlanmış izni yok
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=Bu kullanıcının tanımlanmış bir izni yok
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Şirketin referans para birimi (bunu değiştirmek için şirketin kurulumuna gidin)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=Bu modul %s Fransız yasalarına uygun (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=PDF'deki sol boşluk
     MAIN_PDF_MARGIN_RIGHT=PDF'deki sağ boşluk
     MAIN_PDF_MARGIN_TOP=PDF'deki üst boşluk
     MAIN_PDF_MARGIN_BOTTOM=PDF'deki alt kenar boşluğu
    -SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    -SeveralLangugeVariatFound=Several language variants found
    -COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
    +NothingToSetup=Bu modül için yapılacak özel bir kurulum yok
    +SetToYesIfGroupIsComputationOfOtherGroups=Eğer bu grup diğer grupların bir hesaplaması ise bunu evet olarak ayarlayın
    +EnterCalculationRuleIfPreviousFieldIsYes=Önceki alan Evet olarak ayarlanmışsa hesaplama kuralı girin (Örneğin 'CODEGRP1+CODEGRP2')
    +SeveralLangugeVariatFound=Birçok dil varyantı bulundu
    +COMPANY_AQUARIUM_REMOVE_SPECIAL=Özel karakterleri kaldır
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Araç ipucunda gösterilecek yardım metni
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Sosyal Ağlar modülünün kurulumu
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
    -ConfirmUnactivation=Confirm module reset
    +ConfirmUnactivation=Modül sıfırlamayı onayla
    +OnMobileOnly=Sadece küçük ekranda (akıllı telefon)
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/tr_TR/banks.lang b/htdocs/langs/tr_TR/banks.lang
    index d92b96bae51..9a70999c6d6 100644
    --- a/htdocs/langs/tr_TR/banks.lang
    +++ b/htdocs/langs/tr_TR/banks.lang
    @@ -1,13 +1,13 @@
     # Dolibarr language file - Source file is en_US - banks
     Bank=Banka
    -MenuBankCash=Bank | Cash
    -MenuVariousPayment=Miscellaneous payments
    -MenuNewVariousPayment=New Miscellaneous payment
    +MenuBankCash=Banka | Kasa
    +MenuVariousPayment=Çeşitli ödemeler
    +MenuNewVariousPayment=Yeni Çeşitli ödeme
     BankName=Banka adı
     FinancialAccount=Hesap
     BankAccount=Banka hesabı
     BankAccounts=Banka hesapları
    -BankAccountsAndGateways=Banka hesapları | Ağ geçitleri
    +BankAccountsAndGateways=Banka | Ağ Geçitleri
     ShowAccount=Hesabı Göster
     AccountRef=Ticari hesap ref
     AccountLabel=Ticari hesap adı
    @@ -31,11 +31,11 @@ Reconciliation=Uzlaşma
     RIB=Banka Hesap Numarası
     IBAN=IBAN numarası
     BIC=BIC/SWIFT numarası
    -SwiftValid=BIC/SWIFT valid
    -SwiftVNotalid=BIC/SWIFT not valid
    -IbanValid=BAN valid
    -IbanNotValid=BAN not valid
    -StandingOrders=Direct Debit orders
    +SwiftValid=BIC/SWIFT geçerli
    +SwiftVNotalid=BIC/SWIFT geçerli değil
    +IbanValid=BAN geçerli
    +IbanNotValid=BAN geçerli değil
    +StandingOrders=Otomatik Ödeme talimatları
     StandingOrder=Otomatik ödeme talimatı
     AccountStatement=Hesap özeti
     AccountStatementShort=Özet
    @@ -46,7 +46,7 @@ BankAccountDomiciliation=Hesap adresi
     BankAccountCountry=Hesap ülkesi
     BankAccountOwner=Hesap sahibi adı
     BankAccountOwnerAddress=Hesap sahibi adresi
    -RIBControlError=Değerlerin bütünlük denetimi başarısız. Bu demektir ki; bu hesap numarasına ait bilgiler tam değil ya da yanlıştır (ülkeyi, numaraları ve IBAN’ı kontrol edin).
    +RIBControlError=Değerlerin bütünlük kontrolü başarısız. Bu da, bu hesap numarasının bilgilerinin eksik veya yanlış olduğu anlamına gelir (ülke, numaralar ve IBAN kontrol edin).
     CreateAccount=Hesap oluştur
     NewBankAccount=Yeni hesap
     NewFinancialAccount=Yeni ticari hesap
    @@ -60,42 +60,43 @@ BankType2=Kasa hesabı
     AccountsArea=Hesaplar alanı
     AccountCard=Hesap kartı
     DeleteAccount=Hesap sil
    -ConfirmDeleteAccount=Are you sure you want to delete this account?
    +ConfirmDeleteAccount=Bu hesabı silmek istediğinizden emin misiniz?
     Account=Hesap
    -BankTransactionByCategories=Bank entries by categories
    -BankTransactionForCategory=Bank entries for category <b>%s</b>
    +BankTransactionByCategories=Kategorilere göre banka kayıtları
    +BankTransactionForCategory=<b>%s</b> kategorisi için banka kayıtları
     RemoveFromRubrique=Kategori bağlantısını kaldır
    -RemoveFromRubriqueConfirm=Are you sure you want to remove link between the entry and the category?
    -ListBankTransactions=List of bank entries
    +RemoveFromRubriqueConfirm=Giriş ve kategori arasındaki bağlantıyı kaldırmak istediğinizden emin misiniz?
    +ListBankTransactions=Banka kayıtlarının listesi
     IdTransaction=İşlem Kimliği
    -BankTransactions=Bank entries
    -BankTransaction=Bank entry
    -ListTransactions=List entries
    -ListTransactionsByCategory=List entries/category
    -TransactionsToConciliate=Entries to reconcile
    +BankTransactions=Banka kayıtları
    +BankTransaction=Banka girişi
    +ListTransactions=Kayıtları listele
    +ListTransactionsByCategory=Kayıtları/Kategorileri listele
    +TransactionsToConciliate=Uzlaştırılacak girişler
     Conciliable=Uzlaştırılabilir
     Conciliate=Uzlaştır
     Conciliation=Uzlaşma
    -ReconciliationLate=Reconciliation late
    +SaveStatementOnly=Yalnızca bildirimi kaydet
    +ReconciliationLate=Uzlaştırma gecikmiş
     IncludeClosedAccount=Kapalı hesapları içer
     OnlyOpenedAccount=Yalnızca açık hesaplar
     AccountToCredit=Alacak hesabı
     AccountToDebit=Borç hesabı
     DisableConciliation=Bu hesap için uzlaşma özelliğini engelle
     ConciliationDisabled=Uzlaşma özelliği engelli
    -LinkedToAConciliatedTransaction=Linked to a conciliated entry
    +LinkedToAConciliatedTransaction=Uzlaştırılmış bir girişe bağlı
     StatusAccountOpened=Açık
     StatusAccountClosed=Kapalı
     AccountIdShort=Numarası
     LineRecord=İşlem
    -AddBankRecord=Add entry
    -AddBankRecordLong=Add entry manually
    -Conciliated=Reconciled
    +AddBankRecord=Giriş ekle
    +AddBankRecordLong=El ile giriş ekle
    +Conciliated=Uzlaştırıldı
     ConciliatedBy=Uzlaştıran
     DateConciliating=Uzlaştırma tarihi
    -BankLineConciliated=Entry reconciled
    -Reconciled=Reconciled
    -NotReconciled=Not reconciled
    +BankLineConciliated=Giriş uzlaştırıldı
    +Reconciled=Uzlaştırıldı
    +NotReconciled=Uzlaştırılmadı
     CustomerInvoicePayment=Müşteri ödemesi
     SupplierInvoicePayment=Tedarikçi ödemesi
     SubscriptionPayment=Abonelik ödemesi
    @@ -104,26 +105,26 @@ SocialContributionPayment=Sosyal/mali vergi ödemesi
     BankTransfer=Banka havalesi
     BankTransfers=Banka havaleleri
     MenuBankInternalTransfer=İç aktarım
    -TransferDesc=Transfer from one account to another one, Dolibarr will write two record (a debit in source account and a credit in target account. The same amount (except sign), label and date will be used for this transaction)
    +TransferDesc=Bir hesaptan başka bir hesaba transfer sırasında Dolibarr iki kayıt yazacaktır (kaynak hesaba borç ve hedef hesaba kredi). Bu işlem için aynı tutar (işaret hariç), etiket ve tarih kullanılacaktır.
     TransferFrom=Kimden
     TransferTo=Kime
     TransferFromToDone=<b>%s</b> den <b>%s</b> nin <b>%s</b> %s ne bir transfer kaydedildi.
     CheckTransmitter=Gönderen
    -ValidateCheckReceipt=Validate this check receipt?
    -ConfirmValidateCheckReceipt=Are you sure you want to validate this check receipt, no change will be possible once this is done?
    -DeleteCheckReceipt=Delete this check receipt?
    -ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt?
    +ValidateCheckReceipt=Bu çek makbuzu doğrulansın mı?
    +ConfirmValidateCheckReceipt=Bu çek makbuzunu doğrulamak istediğinizden emin misiniz? Bu işlem onayından sonra değişiklik yapılamaz.
    +DeleteCheckReceipt=Bu çek makbuzu silinsin mi?
    +ConfirmDeleteCheckReceipt=Bu çek makbuzunu silmek istediğinizden emin misiniz?
     BankChecks=Banka çekleri
     BankChecksToReceipt=Ödeme için bekleyen çekler
     ShowCheckReceipt=Çek tahsilat makbuzunu göster
     NumberOfCheques=Çek sayısı
    -DeleteTransaction=Delete entry
    -ConfirmDeleteTransaction=Are you sure you want to delete this entry?
    -ThisWillAlsoDeleteBankRecord=This will also delete generated bank entry
    +DeleteTransaction=Girişi sil
    +ConfirmDeleteTransaction=Bu girişi silmek istediğinizden emin misiniz?
    +ThisWillAlsoDeleteBankRecord=Bu, oluşturulan banka girişini de silecektir
     BankMovements=Hareketler
    -PlannedTransactions=Planned entries
    +PlannedTransactions=Planlanmış girişler
     Graph=Grafikler
    -ExportDataset_banque_1=Bank entries and account statement
    +ExportDataset_banque_1=Banka kayıtları ve hesap ekstresi
     ExportDataset_banque_2=Banka cüzdanı
     TransactionOnTheOtherAccount=Diğer hesaptaki işlemler
     PaymentNumberUpdateSucceeded=Ödeme numarası güncellemesi başarılı
    @@ -131,35 +132,35 @@ PaymentNumberUpdateFailed=Ödeme numarası güncellenemedi
     PaymentDateUpdateSucceeded=Ödeme tarihi güncellemesi başarılı
     PaymentDateUpdateFailed=Ödeme tarihi güncellenemedi
     Transactions=İşlemler
    -BankTransactionLine=Bank entry
    -AllAccounts=All bank and cash accounts
    +BankTransactionLine=Banka girişi
    +AllAccounts=Tüm banka ve kasa hesapları
     BackToAccount=Hesaba geri dön
     ShowAllAccounts=Tüm hesaplar için göster
     FutureTransaction=Gelecekteki işlem. Hiçbir şekilde uzlaştırılamaz.
    -SelectChequeTransactionAndGenerate=Çek tahsilat makbuzunun içereceği çekleri seç/süz ve “Oluştur” a tıkla.
    +SelectChequeTransactionAndGenerate=Çek mevduat makbuzuna dahil etmek için çekleri seç/filtrele ve "Oluştur" butonuna tıkla.
     InputReceiptNumber=Uzlaştırma ile ilişkili banka hesap özetini seç. Sıralanabilir bir sayısal değer kullan: YYYYMM ya da YYYYMMDD
     EventualyAddCategory=Sonunda, kayıtları sınıflandırmak için bir kategori belirtin
    -ToConciliate=To reconcile?
    +ToConciliate=Uzlaştırılsın mı?
     ThenCheckLinesAndConciliate=Sonra, banka hesap özetindeki kalemleri işaretleyin ve tıklayın
     DefaultRIB=Varsayılan BAN
     AllRIB=Tüm BAN
     LabelRIB=BAN Etiketi
     NoBANRecord=BAN kaydı yok
     DeleteARib=BAN kaydını sil
    -ConfirmDeleteRib=Are you sure you want to delete this BAN record?
    +ConfirmDeleteRib=Bu BAN kaydını silmek istediğinizden emin misiniz?
     RejectCheck=Çek döndü
    -ConfirmRejectCheck=Are you sure you want to mark this check as rejected?
    +ConfirmRejectCheck=Bu çeki reddedildi olarak işaretlemek istediğinizden emin misiniz?
     RejectCheckDate=Dönen çekin tarihi
     CheckRejected=Çek döndü
     CheckRejectedAndInvoicesReopened=Çek döndü ve fatura yeniden açık yapıldı
     BankAccountModelModule=Banka hesapları için belge şablonları
    -DocumentModelSepaMandate=Template of SEPA mandate. Usefull for european countries in EEC only.
    -DocumentModelBan=Template to print a page with BAN information.
    -NewVariousPayment=New miscellaneous payments
    -VariousPayment=Miscellaneous payments
    -VariousPayments=Miscellaneous payments
    -ShowVariousPayment=Show miscellaneous payments
    -AddVariousPayment=Add miscellaneous payments
    +DocumentModelSepaMandate=Template of SEPA mandate. Useful for European countries in EEC only.
    +DocumentModelBan=BAN bilgisini içeren bir sayfayı yazdırmak için şablon
    +NewVariousPayment=Yeni çeşitli ödemeler
    +VariousPayment=Çeşitli ödemeler
    +VariousPayments=Çeşitli ödemeler
    +ShowVariousPayment=Çeşitli ödemeleri göster
    +AddVariousPayment=Çeşitli ödemeler ekle
     SEPAMandate=SEPA mandate
     YourSEPAMandate=Your SEPA mandate
    -FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Thanks to return it signed (scan of the signed document) or sent it by mail to
    +FindYourSEPAMandate=This is your SEPA mandate to authorize our company to make direct debit order to your bank. Return it signed (scan of the signed document) or send it by mail to
    diff --git a/htdocs/langs/tr_TR/companies.lang b/htdocs/langs/tr_TR/companies.lang
    index bddbac42fa0..ac09214a547 100644
    --- a/htdocs/langs/tr_TR/companies.lang
    +++ b/htdocs/langs/tr_TR/companies.lang
    @@ -5,14 +5,14 @@ SelectThirdParty=Bir üçüncü parti seç
     ConfirmDeleteCompany=Bu firmayı ve devralınan tüm bilgilerini silmek istediğinizden emin misiniz?
     DeleteContact=Bir kişi/adres sil
     ConfirmDeleteContact=Bu kişiyi ve devralınan tüm bilgilerini silmek istediğinizden emin misiniz?
    -MenuNewThirdParty=Yeni üçüncü parti
    -MenuNewCustomer=Yeni müşteri
    -MenuNewProspect=Yeni aday
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=Yeni Üçüncü Parti
    +MenuNewCustomer=Yeni Müşteri
    +MenuNewProspect=Yeni Aday
    +MenuNewSupplier=Yeni Tedarikçi
     MenuNewPrivateIndividual=Yeni özel şahıs
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewCompany=Yeni firma (aday, müşteri, tedarikçi)
    +NewThirdParty=Yeni Üçüncü Parti (aday, müşteri, tedarikçi)
    +CreateDolibarrThirdPartySupplier=Bir üçüncü parti oluştur (tedarikçi)
     CreateThirdPartyOnly=Üçüncü parti oluştur
     CreateThirdPartyAndContact=Bir üçüncü parti + bağlantılı kişi oluşturun
     ProspectionArea=Aday alanı
    @@ -25,26 +25,26 @@ ThirdPartyContact=Üçüncü parti kişisi/adresi
     Company=Firma
     CompanyName=Firma adı
     AliasNames=Rumuz (ticari isim, marka ismi, ...)
    -AliasNameShort=Rumuz
    +AliasNameShort=Alias Name
     Companies=Firmalar
     CountryIsInEEC=Ülke, Avrupa Ekonomik Topluluğu içindedir
    -ThirdPartyName=Üçüncü parti adı
    +ThirdPartyName=Üçüncü Parti Adı
     ThirdPartyEmail=Üçüncü parti e-postası
    -ThirdParty=Üçüncü parti
    -ThirdParties=Üçüncü partiler
    +ThirdParty=Üçüncü Parti
    +ThirdParties=Üçüncü Partiler
     ThirdPartyProspects=Adaylar
     ThirdPartyProspectsStats=Adaylar
     ThirdPartyCustomers=Müşteriler
     ThirdPartyCustomersStats=Müşteriler
     ThirdPartyCustomersWithIdProf12=Müşteriler %s veya %s ile
    -ThirdPartySuppliers=Vendors
    -ThirdPartyType=Üçüncü parti türü
    +ThirdPartySuppliers=Tedarikçiler
    +ThirdPartyType=Şirket türü
     Individual=Özel şahıs
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Ana firma
     Subsidiaries=Bağlı firmalar
     ReportByMonth=Aya göre rapor
    -ReportByCustomers=Report by customer
    +ReportByCustomers=Müşteriye göre rapor
     ReportByQuarter=Orana göre rapor
     CivilityCode=Hitap kodu
     RegisteredOffice=Kayıtlı Ofisi
    @@ -75,12 +75,12 @@ Zip=Posta Kodu
     Town=İlçesi
     Web=Web
     Poste= Durumu
    -DefaultLang=Varsayılan dili
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    -VATIsNotUsed=Sales tax is not used
    +DefaultLang=Language default
    +VATIsUsed=KDV kullanılır
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
    +VATIsNotUsed=KDV kullanılmaz
     CopyAddressFromSoc=Adresi üçüncü parti adresiyle doldurun
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Ödeme banka hesabı
     OverAllProposals=Teklifler
    @@ -99,9 +99,9 @@ LocalTax2ES=IRPF
     TypeLocaltax1ES=RE Türü
     TypeLocaltax2ES=IRPF Türü
     WrongCustomerCode=Müşteri kodu geçersiz
    -WrongSupplierCode=Vendor code invalid
    +WrongSupplierCode=Tedarikçi kodu geçersiz
     CustomerCodeModel=Müşteri kodu modeli
    -SupplierCodeModel=Vendor code model
    +SupplierCodeModel=Tedarikçi kodu modeli
     Gencod=Barkod
     ##### Professional ID #####
     ProfId1Short=Prof id1
    @@ -258,8 +258,8 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    -VATIntraShort=Tax ID
    +VATIntra=Vergi Numarası
    +VATIntraShort=Vergi Numarası
     VATIntraSyntaxIsValid=Sözdizimi geçerli
     VATReturn=KDV iadesi
     ProspectCustomer=Aday/Müşteri
    @@ -267,25 +267,25 @@ Prospect=Aday
     CustomerCard=Müşteri Kartı
     Customer=Müşteri
     CustomerRelativeDiscount=Göreceli müşteri indirimi
    -SupplierRelativeDiscount=Relative vendor discount
    +SupplierRelativeDiscount=Göreceli tedarikçi indirimi
     CustomerRelativeDiscountShort=Göreceli indirim
     CustomerAbsoluteDiscountShort=Mutlak indirim
     CompanyHasRelativeDiscount=Bu müşterinin varsayılan bir <b>%s%%</b> indirimi var
     CompanyHasNoRelativeDiscount=Bu müşterinin varsayılan hiçbir göreceli indirimi yok
     HasRelativeDiscountFromSupplier=Bu tedarikçiden varsayılan olarak <b>%s%%</b> indiriminiz var
     HasNoRelativeDiscountFromSupplier=Bu tedarikçiden varsayılan göreceli indiriminiz yok 
    -CompanyHasAbsoluteDiscount=Bu müşterinin <b>%s</b>%s için mevcut indirimi var (kredi notları veya peşinat)
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=Bu müşteri <b>%s</b>%s için indirimlere sahip (kredi notları veya peşinatlar)
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Bu müşterinin hala <b>%s</b> %s için iade faturaları var
     HasNoAbsoluteDiscountFromSupplier=Bu tedarikçiden indirim krediniz yok 
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
     HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for <b>%s</b> %s from this supplier
     HasCreditNoteFromSupplier=You have credit notes for <b>%s</b> %s from this supplier
     CompanyHasNoAbsoluteDiscount=Bu müşterinin hiçbir indirim alacağı yoktur
    -CustomerAbsoluteDiscountAllUsers=Absolute customer discounts (granted by all users)
    -CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +CustomerAbsoluteDiscountAllUsers=Mutlak müşteri indirimleri (tüm kullanıcılar tarafından verilen)
    +CustomerAbsoluteDiscountMy=Mutlak müşteri indirimleri (sizin tarafınızdan verilen)
    +SupplierAbsoluteDiscountAllUsers=Mutlak satıcı indirimleri (tüm kullanıcıları tarafından girilen)
    +SupplierAbsoluteDiscountMy=Mutlak satıcı indirimleri (tarafınızdan girilen)
     DiscountNone=Hiçbiri
     Supplier=Tedarikçi
     AddContact=Kişi oluştur
    @@ -303,22 +303,22 @@ AddThirdParty=Üçüncü parti oluştur
     DeleteACompany=Firma sil
     PersonalInformations=Kişisel bilgiler
     AccountancyCode=Muhasebe hesabı
    -CustomerCode=Müşteri kodu
    -SupplierCode=Vendor code
    -CustomerCodeShort=Müşteri kodu
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Tüm müşteriler için müşteri kodu benzersiz olmalı
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Müşteri Kodu
    +SupplierCode=Tedarikçi Kodu
    +CustomerCodeShort=Müşteri Kodu
    +SupplierCodeShort=Tedarikçi Kodu
    +CustomerCodeDesc=Müşteri Kodu, tüm müşteriler için benzersiz
    +SupplierCodeDesc=Tedarikçi Kodu, tüm tedarikçiler için benzersiz
     RequiredIfCustomer=Eğer üçüncü parti bir müşteri ya da aday ise gereklidir
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Doğrulama modülü tarafından denetlenir
    -ThisIsModuleRules=Bu kural bu modül içindir
    +RequiredIfSupplier=Eğer üçünü parti tedarikçi ise gereklidir
    +ValidityControledByModule=Modül tarafından kontrol edilen geçerlilik
    +ThisIsModuleRules=Bu modül için kurallar
     ProspectToContact=İletişime geçilecek aday
     CompanyDeleted="%s" Firması veritabanından silindi.
     ListOfContacts=Kişi/adres listesi
    -ListOfContactsAddresses=Kişiler/adresler listesi
    -ListOfThirdParties=Üçüncü partiler listesi
    -ShowCompany=Üçüncü partiyi göster
    +ListOfContactsAddresses=Kişi/adres listesi
    +ListOfThirdParties=Üçüncü Partilerin Listesi
    +ShowCompany=Üçüncü Partiyi Göster
     ShowContact=Kişi göster
     ContactsAllShort=Hepsi (süzmeden)
     ContactType=Kişi tipi
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Bu kişi herhangi bir teklifin yetkilisi değildir
     NoContactForAnyContract=Bu kişi herhangi bir sözleşmenin yetkilisi değildir
     NoContactForAnyInvoice=Bu kişi herhangi bir faturanın yetkilisi değildir
     NewContact=Yeni kişi
    -NewContactAddress=Yeni kişi/adres
    +NewContactAddress=Yeni Kişi/Adres
     MyContacts=Kişilerim
     Capital=Sermaye
     CapitalOf=Sermaye %s
     EditCompany=Firma düzenle
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=Bu kullanıcı bir  aday, müşteri veya tedarikçi değildir
     VATIntraCheck=Denetle
    -VATIntraCheckDesc=<b>%s</b> bağlantısı avrupa KDV denetimi hizmetinin istenmesini sağlar. Bu hizmeti çalıştırmak için sunucudan bir dış internet erişimi gerektirir.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Avrupa Komisyonu sitesinden topluluk içi KDV ni kontrol edin
    -VATIntraManualCheck=Avrupa web sitesi <a href="%s" target="_blank">%s</a> adresinden el ile de kontrol edebilirsiniz
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Denetlemiyor. Denetim hizmeti üye ülke (%s) tarafından sağlanmıyor.
    -NorProspectNorCustomer=Ne aday ne de müşteri
    -JuridicalStatus=Yasal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Tüzel Kişilik Türü
     Staff=Kadro
     ProspectLevelShort=Potansiyel
     ProspectLevel=Potansiyel aday
    @@ -387,31 +387,31 @@ ExportCardToFormat=Biçimlenip dışaaktarılacak kart
     ContactNotLinkedToCompany=Kişi herhangi bir üçüncü partiye bağlı değil
     DolibarrLogin=Dolibarr kullanıcı adı
     NoDolibarrAccess=Dolibarr erişimi yok
    -ExportDataset_company_1=Üçüncü partiler (Şirketler/Dernekler/Şahıslar) ve özellikleri
    +ExportDataset_company_1=Üçüncü Partiler (şirketler/dernekler/şahıslar) ve özellikleri
     ExportDataset_company_2=Kişiler ve özellikleri
    -ImportDataset_company_1=Üçüncü partiler (Şirketler/Vakıflar/Fiziki şahıslar) ve özellikleri
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ImportDataset_company_1=Üçüncü Partiler (şirketler/dernekler/şahıslar) ve özellikleri
    +ImportDataset_company_2=Kişiler/Adresler ve özellikleri
    +ImportDataset_company_3=Üçüncü Partilerin Banka hesapları
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Fiyat düzeyi
     DeliveryAddress=Teslimat adresi
     AddAddress=Adres ekle
    -SupplierCategory=Vendor category
    +SupplierCategory=Tedarikçi kategorisi
     JuridicalStatus200=Bağımsız
     DeleteFile=Dosya sil
     ConfirmDeleteFile=Bu dosyayı silmek istediğinizden emin misiniz?
     AllocateCommercial=Satış temsilcisine atanmış
     Organization=Kuruluş
    -FiscalYearInformation=Mali yıla ait bilgi
    +FiscalYearInformation=Mali Yıl
     FiscalMonthStart=Mali yılın başlangıç ayı
    -YouMustAssignUserMailFirst=Bu kişiye eposta bildirimleri ekleyebilmek için önce bu kişiye e-posta oluşturmalısınız.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=Eposta bildirimleri ekleyebilmek için önce geçerli epostası olan üçüncü taraf kişisi oluşturmanız gerekir.
    -ListSuppliersShort=List of vendors
    +ListSuppliersShort=Tedarikçi Listesi
     ListProspectsShort=Aday Listesi
    -ListCustomersShort=Müşteri listesi
    -ThirdPartiesArea=Üçüncü partiler kişi alanı
    -LastModifiedThirdParties=Değiştirilen son %s üçüncü parti
    -UniqueThirdParties=Toplam benzersiz üçüncü parti
    +ListCustomersShort=Müşteri Listesi
    +ThirdPartiesArea=Üçüncü Partiler/Kişiler
    +LastModifiedThirdParties=Değiştirilen son %s Üçüncü Parti
    +UniqueThirdParties=Üçüncü Partilerin Toplamı
     InActivity=Açık
     ActivityCeased=Kapalı
     ThirdPartyIsClosed=Üçüncü taraf kapalı
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Geçerli bekleyen fatura
     OutstandingBill=Ödenmemiş fatura için ençok tutar
     OutstandingBillReached=Ödenmemiş fatura için ulaşılan ençok tutar
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Müşteri/tedarikçi kodu serbesttir. Bu kod herhangi bir zamanda değiştirilebilir.
     ManagingDirectors=Yönetici(lerin) adı (CEO, müdür, başkan...)
     MergeOriginThirdparty=Çifte üçüncü parti (silmek istediğiniz üçüncü parti)
     MergeThirdparties=Üçüncü partileri birleştir
    -ConfirmMergeThirdparties=Bu üçüncü tarafı mevcut olanla birleştirmek istediğinize emin misiniz? Tüm bağlı nesneler (faturalar, siparişler, ...) mevcut üçüncü tarafa taşınacak, sonra üçüncü taraf silinecek.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Satış temsilcisinin kullanıcı adı
     SaleRepresentativeFirstname=Satış temsilcisinin adı
     SaleRepresentativeLastname=Satış temsilcisinin soyadı
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/tr_TR/compta.lang b/htdocs/langs/tr_TR/compta.lang
    index 61bd992c206..a51822148ab 100644
    --- a/htdocs/langs/tr_TR/compta.lang
    +++ b/htdocs/langs/tr_TR/compta.lang
    @@ -13,12 +13,12 @@ LTReportBuildWithOptionDefinedInModule=Burada gösterilen tutarlar Firma ayarlar
     Param=Ayarlar
     RemainingAmountPayment=Kalan ödeme tutarı:
     Account=Hesap
    -Accountparent=Parent account
    -Accountsparent=Parent accounts
    +Accountparent=Ana hesap
    +Accountsparent=Ana hesaplar
     Income=Gelir
     Outcome=Gider
     MenuReportInOut=Gelir/Gider
    -ReportInOut=Balance of income and expenses
    +ReportInOut=Gelir ve Gider dengesi
     ReportTurnover=Turnover invoiced
     ReportTurnoverCollected=Turnover collected
     PaymentsNotLinkedToInvoice=Herhangi bir faturaya bağlı olmayan ödemeler, herhangi bir üçüncü partiye de bağlı değildir
    @@ -33,19 +33,19 @@ Piece=Muhasebe Belg.
     AmountHTVATRealReceived=Net alınan
     AmountHTVATRealPaid=Net ödenen
     VATToPay=Tax sales
    -VATReceived=Tax received
    +VATReceived=Alınan vergi
     VATToCollect=Tax purchases
    -VATSummary=Tax monthly
    +VATSummary=Aylık vergi
     VATBalance=Tax Balance
    -VATPaid=Tax paid
    +VATPaid=Ödenen vergi
     LT1Summary=Tax 2 summary
     LT2Summary=Tax 3 summary
     LT1SummaryES=RE Bakiye
     LT2SummaryES=IRPF bakiyesi
     LT1SummaryIN=CGST Balance
     LT2SummaryIN=SGST Balance
    -LT1Paid=Tax 2 paid
    -LT2Paid=Tax 3 paid
    +LT1Paid=Ödenen vergi 2
    +LT2Paid=Ödenen vergi 3
     LT1PaidES=RE Ödenen
     LT2PaidES=IRPF ödenmiş
     LT1PaidIN=CGST Paid
    @@ -76,18 +76,18 @@ MenuTaxAndDividends=Vergiler ve kar payları
     MenuSocialContributions=Sosyal/mali vergiler
     MenuNewSocialContribution=Yeni sosyal/mali
     NewSocialContribution=Yeni sosyal/mali vergi
    -AddSocialContribution=Add social/fiscal tax
    +AddSocialContribution=Sosyal/mali vergi ekle
     ContributionsToPay=Ödenecek sosyal/mali vergiler
     AccountancyTreasuryArea=Billing and payment area
     NewPayment=Yeni ödeme
     Payments=Ödemeler
     PaymentCustomerInvoice=Müşteri fatura ödemesi
    -PaymentSupplierInvoice=Vendor invoice payment
    +PaymentSupplierInvoice=Tedarikçi faturası ödemesi
     PaymentSocialContribution=Sosyal/mali vergi ödemesi
     PaymentVat=KDV ödeme
     ListPayment=Ödemeler listesi
     ListOfCustomerPayments=Müşteri ödemeleri listesi
    -ListOfSupplierPayments=List of vendor payments
    +ListOfSupplierPayments=Tedarikçi ödemelerinin listesi
     DateStartPeriod=Başlangıç dönemi tarihi
     DateEndPeriod=Bitiş dönemi tarihi
     newLT1Payment=Yeni vergi 2 ödemesi
    @@ -113,14 +113,14 @@ ShowVatPayment=KDV ödemesi göster
     TotalToPay=Ödenecek toplam
     BalanceVisibilityDependsOnSortAndFilters=Balance is visible in this list only if table is sorted ascending on %s and filtered for 1 bank account
     CustomerAccountancyCode=Customer accounting code
    -SupplierAccountancyCode=Vendor accounting code
    +SupplierAccountancyCode=Tedarikçi muhasebe kodu
     CustomerAccountancyCodeShort=Müşt. hesap kodu
     SupplierAccountancyCodeShort=Ted. hesap kodu
     AccountNumber=Hesap numarası
     NewAccountingAccount=Yeni hesap
     Turnover=Turnover invoiced
     TurnoverCollected=Turnover collected
    -SalesTurnoverMinimum=Minimum turnover
    +SalesTurnoverMinimum=Minimum ciro
     ByExpenseIncome=Giderler ve gelirlere göre
     ByThirdParties=Üçüncü partiye göre
     ByUserAuthorOfInvoice=Faturayı yazana göre
    @@ -132,7 +132,7 @@ NewCheckDeposit=Yeni çek hesabı
     NewCheckDepositOn=Bu hesap için makbuz oluştur: %s
     NoWaitingChecks=Para yatırılmayı bekleyen çek yok.
     DateChequeReceived=Çek giriş tarihi
    -NbOfCheques=Çek sayısı
    +NbOfCheques=No. of checks
     PaySocialContribution=Bir sosyal/mali vergi öde
     ConfirmPaySocialContribution=Bu sosyal ya da mali vergiyi ödendi olarak sınıflandırmak istediğinizden emin misiniz?
     DeleteSocialContribution=Bir sosyal ya da mali vergi ödemesi sil
    @@ -142,7 +142,7 @@ CalcModeVATDebt=Mod <b>%sKDV, taahhüt hesabı%s için</b>.
     CalcModeVATEngagement=Mod <b>%sKDV, gelirler-giderler%s için</b>.
     CalcModeDebt=Analysis of known recorded invoices even if they are not yet accounted in ledger.
     CalcModeEngagement=Analysis of known recorded payments, even if they are not yet accounted in Ledger.
    -CalcModeBookkeeping=Analysis of <b>data journalized in Bookkeeping Ledger table</b>
    +CalcModeBookkeeping=Analysis of data journalized in Bookkeeping Ledger table.
     CalcModeLT1= Müşteri faturaları için mod <b>%sRE tedrikçi faturaları için mod %s</b>
     CalcModeLT1Debt=Biçim durumu<b>%sRE, bu müşteri faturası için%s</b>
     CalcModeLT1Rec= Biçim durumu<b>%sRE, bu tedarikçi faturası için%s</b>
    @@ -167,19 +167,19 @@ RulesAmountOnInOutBookkeepingRecord=It includes record in your Ledger with accou
     RulesResultBookkeepingPredefined=It includes record in your Ledger with accounting accounts that has the group "EXPENSE" or "INCOME"
     RulesResultBookkeepingPersonalized=It show record in your Ledger with accounting accounts <b>grouped by personalized groups</b>
     SeePageForSetup=See menu <a href="%s">%s</a> for setup
    -DepositsAreNotIncluded=- Down payment invoices are nor included
    +DepositsAreNotIncluded=- Down payment invoices are not included
     DepositsAreIncluded=- Down payment invoices are included
     LT1ReportByCustomers=Report tax 2 by third party
     LT2ReportByCustomers=Report tax 3 by third party
     LT1ReportByCustomersES=RE Üçüncü partiye göre rapor
     LT2ReportByCustomersES=Üçüncü parti IRPF Raporu
    -VATReport=Sale tax report
    +VATReport=Satış vergisi raporu
     VATReportByPeriods=Döneme göre satış vergisi raporu
    -VATReportByRates=Sale tax report by rates
    -VATReportByThirdParties=Sale tax report by third parties
    -VATReportByCustomers=Sale tax report by customer
    +VATReportByRates=Oranlara göre satış vergisi raporu
    +VATReportByThirdParties=Üçüncü taraflara göre satış vergisi raporu
    +VATReportByCustomers=Müşteriye göre satış vergisi raporu
     VATReportByCustomersInInputOutputMode=Müşteriye göre alınan ve ödenen KDV raporu
    -VATReportByQuartersInInputOutputMode=Report by Sale tax rate of the tax collected and paid
    +VATReportByQuartersInInputOutputMode=Tahsil edilen ve ödenen verginin satış vergisi oranına göre rapor
     LT1ReportByQuarters=Report tax 2 by rate
     LT2ReportByQuarters=Report tax 3 by rate
     LT1ReportByQuartersES=RE Orana göre rapor
    @@ -189,7 +189,7 @@ SeeVATReportInDueDebtMode=Akış seçenekli bir hesaplama için <b>%sKDV akış
     RulesVATInServices=- Hizmetler için, rapor ödeme tarihine dayalı olarak gerçekte alınan ya da verilen KDV düzenlemelerini içerir.
     RulesVATInProducts=- For material assets, the report includes the VAT received or issued on the basis of the date of payment.
     RulesVATDueServices=- Hizmetler için, ödenmiş ya da ödenmemiş fatura tarihini baz alan rapor fatura KDV lerini içerir.
    -RulesVATDueProducts=- For material assets, the report includes the VAT invoices, based on the invoice date.
    +RulesVATDueProducts=- Maddi varlıklar için, rapor fatura tarihine dayalı olarak KDV faturalarını içerir.
     OptionVatInfoModuleComptabilite=Not: maddi varlıklar için, daha adil olması açısından teslim tarihi kullanılmalı.
     ThisIsAnEstimatedValue=This is a preview, based on business events and not from the final ledger table, so final results may differ from this preview values
     PercentOfInvoice=%%/fatura
    @@ -224,16 +224,16 @@ CalculationRuleDescSupplier=Aynı hesaplama kuralını uygulamak ve tedarikçini
     TurnoverPerProductInCommitmentAccountingNotRelevant=The report of Turnover collected per product is not available. This report is only available for turnover invoiced.
     TurnoverPerSaleTaxRateInCommitmentAccountingNotRelevant=The report of Turnover collected per sale tax rate is not available. This report is only available for turnover invoiced.
     CalculationMode=Hesaplama modu
    -AccountancyJournal=Accounting code journal
    +AccountancyJournal=Muhasebe kodu günlüğü
     ACCOUNTING_VAT_SOLD_ACCOUNT=Accounting account by default for VAT on sales (used if not defined on VAT dictionary setup)
     ACCOUNTING_VAT_BUY_ACCOUNT=Accounting account by default for VAT on purchases (used if not defined on VAT dictionary setup)
     ACCOUNTING_VAT_PAY_ACCOUNT=Accounting account by default for paying VAT
     ACCOUNTING_ACCOUNT_CUSTOMER=Accounting account used for customer third parties
    -ACCOUNTING_ACCOUNT_CUSTOMER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accouting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated customer accouting account on third party is not defined.
    -ACCOUNTING_ACCOUNT_SUPPLIER=Accounting account used for vendor third parties
    -ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accouting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated supplier accouting account on third party is not defined.
    +ACCOUNTING_ACCOUNT_CUSTOMER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated customer accounting account on third party is not defined.
    +ACCOUNTING_ACCOUNT_SUPPLIER=Tedarikçi üçüncü partileri için kullanılan muhasebe hesabı
    +ACCOUNTING_ACCOUNT_SUPPLIER_Desc=The dedicated accounting account defined on third party card will be used for Subledger accounting only. This one will be used for General Ledger and as default value of Subledger accounting if dedicated supplier accounting account on third party is not defined.
     CloneTax=Sosyal/mali vergi kopyala
    -ConfirmCloneTax=Sosyal/mali vergi ödemesi kopyalamasını onayla
    +ConfirmCloneTax=Confirm the clone of a social/fiscal tax
     CloneTaxForNextMonth=Sonraki aya kopyala
     SimpleReport=Basit rapor
     AddExtraReport=Extra reports (add foreign and national customer report)
    @@ -248,7 +248,7 @@ ErrorBankAccountNotFound=Hata: Banka hesabı bulunamadı
     FiscalPeriod=Muhasebe dönemi
     ListSocialContributionAssociatedProject=List of social contributions associated with the project
     DeleteFromCat=Remove from accounting group
    -AccountingAffectation=Accounting assignement
    +AccountingAffectation=Accounting assignment
     LastDayTaxIsRelatedTo=Last day of period the tax is related to
     VATDue=Sale tax claimed
     ClaimedForThisPeriod=Claimed for the period
    diff --git a/htdocs/langs/tr_TR/contracts.lang b/htdocs/langs/tr_TR/contracts.lang
    index 17ac0c9c888..2333741bf65 100644
    --- a/htdocs/langs/tr_TR/contracts.lang
    +++ b/htdocs/langs/tr_TR/contracts.lang
    @@ -31,11 +31,11 @@ NewContract=Yeni sözleşme
     NewContractSubscription=Yeni sözleşme/üyelik
     AddContract=Sözleşme oluştur
     DeleteAContract=Bir sözleşme sil
    -ActivateAllOnContract=Activate all services
    +ActivateAllOnContract=Tüm hizmetleri etkinleştir
     CloseAContract=Bir sözleşme kapat
     ConfirmDeleteAContract=Bu sözleşmeyi ve tüm hizmetlerini silmek istediğinizden emin misiniz?
     ConfirmValidateContract=Bu sözleşmeyi <b>%s</b> adıyla doğrulamak istediğinizden emin misiniz?
    -ConfirmActivateAllOnContract=This will open all services (not yet active). Are you sure you want to open all services?
    +ConfirmActivateAllOnContract=Bu, tüm hizmetleri açacaktır (henüz aktif olmayan). Tüm hizmetleri açmak istediğinizden emin misiniz?
     ConfirmCloseContract=Bu tüm hizmetleri kapatacaktır (aktif veya değil). Bu sözleşmeyi kapatmak istediğinizden emin misiniz?
     ConfirmCloseService=Bu hizmeti <b>%s</b> tarihli olarak kapatmak istediğinizden emin misiniz?
     ValidateAContract=Bir sözleşme doğrula
    @@ -67,8 +67,8 @@ CloseService=Hizmet kapat
     BoardRunningServices=Süresi dolmuş yürürlükteki hizmetler
     ServiceStatus=Hizmet durumu
     DraftContracts=Taslak sözleşmeler
    -CloseRefusedBecauseOneServiceActive=En az bir açık hizmeti olduğundan dolayı sözleşme kapatılamıyor
    -ActivateAllContracts=Activate all contract lines
    +CloseRefusedBecauseOneServiceActive=Sözleşme üzerinde en az  bir hizmet bulunduğu için kapatılamıyor
    +ActivateAllContracts=Tüm sözleşme satırlarını etkinleştir
     CloseAllContracts=Bütün sözleşme kalemlerini kapat
     DeleteContractLine=Bir sözleşme kalemi sil
     ConfirmDeleteContractLine=Bu sözleşme satırını silmek istediğinizden emin misiniz?
    @@ -87,8 +87,9 @@ ContactNameAndSignature=%s için, ad ve imza
     OnlyLinesWithTypeServiceAreUsed=Yalnızca "Hizmet" türündeki satırlar klonlanacaktır.
     CloneContract=Sözleşmeyi kopyala
     ConfirmCloneContract=<b>%s</b> sözleşmesini kopyalamak istediğinizden emin misiniz?
    -LowerDateEndPlannedShort=Lower planned end date of active services
    -SendContractRef=Contract information __REF__
    +LowerDateEndPlannedShort=Aktif hizmetlerin planlı alt bitiş tarihi
    +SendContractRef=Sözleşme bilgileri __REF__
    +OtherContracts=Diğer sözleşmeler
     ##### Types de contacts #####
     TypeContact_contrat_internal_SALESREPSIGN=Sözleşmeyi imzalalayacak satış temsilcisi
     TypeContact_contrat_internal_SALESREPFOLL=Sözleşmeyi izleyecek satış temsilcisi
    diff --git a/htdocs/langs/tr_TR/errors.lang b/htdocs/langs/tr_TR/errors.lang
    index 0022570ca0b..41f33967317 100644
    --- a/htdocs/langs/tr_TR/errors.lang
    +++ b/htdocs/langs/tr_TR/errors.lang
    @@ -32,9 +32,9 @@ ErrorBarCodeRequired=Bar kod gerekli
     ErrorCustomerCodeAlreadyUsed=Müşteri kodu zaten kullanılmış
     ErrorBarCodeAlreadyUsed=Bar kod zaten kullanıldı
     ErrorPrefixRequired=Önek gerekli
    -ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
    -ErrorSupplierCodeRequired=Vendor code required
    -ErrorSupplierCodeAlreadyUsed=Vendor code already used
    +ErrorBadSupplierCodeSyntax=Tedarikçi kodu için yanlış sözdizimi
    +ErrorSupplierCodeRequired=Tedarikçi kodu gereklidir
    +ErrorSupplierCodeAlreadyUsed=Tedarikçi kodu zaten kullanılmaktadır
     ErrorBadParameters=Hatalı parametreler
     ErrorBadValueForParameter=Yanlış değer '%s', parametre '%s' için
     ErrorBadImageFormat=Resim dosyası desteklenen biçimde değil (PHP niz bu biçimdeki resimlerin dönüştürülme işlevini desteklemez)
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=%s değeri yanlış tarih biçiminde
     ErrorWrongDate=Tarih doğru değil!
     ErrorFailedToWriteInDir=%s dizinine yazılamadı
     ErrorFoundBadEmailInFile=Dosyada %s satır hatalı e-posta sözdizimi bulundu (örneğin eposta=%s teki satır %s)
    -ErrorUserCannotBeDelete=Kullanıcı silinemez. Belki Dolibarr öğeleri ile ilişkili olabilir.
    +ErrorUserCannotBeDelete=Kullanıcı silinemiyor. Dolibarr varlıklarıyla ilişkili olabilir.
     ErrorFieldsRequired=Bazı gerekli alanlar doldurulmamış.
     ErrorSubjectIsRequired=E-posta konusu zorunludur
     ErrorFailedToCreateDir=Dizin oluşturulamadı. Web sunucusu kullanıcısının Dolibarr belgeleri dizinine yazma izinlerini denetleyin. Eğer bu parametre <b>guvenli_mod</b> bu PHP üzerinde etkinleştirilmişse, Dolibarr php dosyalarının web sunucusu kullanıcısına (ya da grubuna) sahip olduğunu denetleyin.
    @@ -66,20 +66,21 @@ ErrorNoValueForCheckBoxType=Lütfen onay kutusu listesi için değer girin
     ErrorNoValueForRadioType=Lütfen onay düğmesi için değer girin
     ErrorBadFormatValueList=Liste değerinde birden çok virgül bulunmaz: <u>%s</u>, ancak enaz bir: anahtar, değer gerekir
     ErrorFieldCanNotContainSpecialCharacters=<b>%s</b> alanı özel karakterler içermemelidir.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=<b>%s</b> Alanı özel karakter ve büyük harf içermemeli yalnızca sayı içermelidir.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Etkinleştirilmiş muhasebe modülü yok
     ErrorExportDuplicateProfil=Bu profil adı bu dışaaktarma seti için zaten var.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP eşleşmesi tamamlanmamış.
     ErrorLDAPMakeManualTest=A. Ldif dosyası %s dizininde oluşturuldu. Hatalar hakkında daha fazla bilgi almak için komut satırından elle yüklemeyi deneyin.
    -ErrorCantSaveADoneUserWithZeroPercentage="Başlamış durumdaki" bir eylem, "yapan" alanı dolu olsa bile kaydedilemez.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Oluşturulması için kullanılan referans zaten var.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Bazı alt kayıtları olduğundan kayıt silinemedi.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Kayıt silinemiyor. Zaten kullanılıyor veya başka bir nesne tarafından içeriliyor.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Bu özelliğin çalışması için Javascript engellenmiş olmamalıdır. Etkinleştirmek/engellemek için Giriş->Kurulum->Ekran menüsüne gidin.
     ErrorPasswordsMustMatch=Her iki yazdığınız şifrenin birbiriyle eşleşmesi gerekir
    -ErrorContactEMail=Teknik bir hata oluştu. Lütfen, aşağıdaki <b>%s</b> Eposta ile yöneticiye danışın, mesajınızda <b>%s</b> hata kodunu belirtin ve hatta bir ekran görünümünü de eklerseniz daha iyi olur.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=<b>%s</b> alan numarası için yanlış değer ('<b>%s</b>' değeri '<b>%s</b>' regex kuralı ile uyuşmuyor)
     ErrorFieldValueNotIn=<b>%s</b> alan numarası için yanlış değer ('<b>%s</b>' değeri '<b>%s</b>' tablosundaki '<b>%s</b>' alanına uygun bir değer değildir)
     ErrorFieldRefNotIn=Alan numarası <b>%s</b> için yanlış değer (değer <b>'%s'</b> bir <b>%s</b> ref mevcut değildir)
    @@ -87,7 +88,8 @@ ErrorsOnXLines=<b>%</b> kaynak satırlarındaki hatalar
     ErrorFileIsInfectedWithAVirus=Virüs koruma programı dosyayı doğrulayamıyor (dosyaya bir virüs bulaşmış olabilir)
     ErrorSpecialCharNotAllowedForField=%s alanında özel karakterlere izin verilmez
     ErrorNumRefModel=Veritabanına (%s) bir başvuru var ve bu numaralandırma kuralı ile uyumlu değildir. Kaydı kaldırın ya da bu modülü etkinleştirmek için başvurunun adını değiştirin.
    -ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorQtyTooLowForThisSupplier=Bu tedarikçi için miktar çok düşük veya bu ürüne bu tedarikçi için bir fiyat tanımlanmamış
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Modül ayarı tamamlanmamış gibi görünüyor. Tamamlamak için Giriş - Ayarlar - Modüller menüsüne git.
     ErrorBadMask=Maskede hata
     ErrorBadMaskFailedToLocatePosOfSequence=Hata, sıra numarasız  maske
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Hata, kötü sıfırlama değeri
     ErrorMaxNumberReachForThisMask=Bu maskedeki ençok sayı
     ErrorCounterMustHaveMoreThan3Digits=Sayaçta 3 ten fazla basamak olmalı
     ErrorSelectAtLeastOne=Hata. En az bir giriş seçin.
    -ErrorDeleteNotPossibleLineIsConsolidated=Kaydın silinmesi mümkün değildir çünkü kayıt uzlaştırılmış bir banka işlemiyle bağlantılıdır
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s diğer bir üçüncüye görevlendirilmiş
     ErrorFailedToSendPassword=Parola gönderilemedi
     ErrorFailedToLoadRSSFile=RSS beslemesi alınamıyor. Eğer hata mesajları yeterli bilgi sağlamıyorsa MAIN_SIMPLEXMLLOAD_DEBUG değişmezini eklemeyi deneyin.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=<b>%s</b> kullanıcı adlı kullanıcı bulunamadı.
     ErrorLoginHasNoEmail=Bu kullanıcının e-posta adresi yoktur. İşlem iptal edildi.
     ErrorBadValueForCode=Güvenlik kodu için hatalı değer. Yeni değer ile tekrar deneyin...
     ErrorBothFieldCantBeNegative=%s ve %s alanlarının ikisi birden eksi olamaz
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Müşteri faturasındaki kalem miktarı eksi olamaz
     ErrorWebServerUserHasNotPermission=Web sunucusunu çalıştırmak için kullanılan <b>%s</b> kullanıcı hesabnın bunun için izni yok
     ErrorNoActivatedBarcode=Etkinleştirilmiş barkod türü yok
    @@ -138,7 +141,7 @@ ErrorBadFormat=Hatalı biçim!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Hata, bu üye henüz henüz hiç bir üçüncü tarafa bağlantılanmamış. Üyeyi mevcut olan bir üçüncü tarafa bağlantılayın veya bu faturayla yeni bir abonelik oluşturmadan önce yeni bir üçüncü taraf oluşturun.
     ErrorThereIsSomeDeliveries=Hata, bu sevkiyata bağlı bazı teslimatlar var. Silme işlemi reddedildi.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Ödendi durumunda olan en az bir faturayla paylaşılan bir ödeme silinemez
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1='%s' Değişkenine atama yapılamıyor
     ErrorPriceExpression2='%s' Dahili işlevi yeniden tanımlanamıyor
     ErrorPriceExpression3=İşlev tanımındaki '%s' değişkeni tanımlanmamış
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Beklenmeyen '%s'
     ErrorPriceExpression6=Hatalı argüman sayısı (verilen %s, beklenen %s)
     ErrorPriceExpression8=Beklenmeyen işlemci '%s'
     ErrorPriceExpression9=Beklenmeyen bir hata oldu
    -ErrorPriceExpression10='%s' İşlemcisinin işleneni yok
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Beklenen '%s'
     ErrorPriceExpression14=Sıfıra bölünme
     ErrorPriceExpression17=Beklenmeyen değişken '%s'
    @@ -171,13 +174,13 @@ ErrorGlobalVariableUpdater4=SOAP istemcisinde '%s' hatası
     ErrorGlobalVariableUpdater5=Seçilmiş genel değişken yok
     ErrorFieldMustBeANumeric=<b>%s</b> alanı sayısal bir değer olmalıdır
     ErrorMandatoryParametersNotProvided=Zorunlu parametre(ler) girilmemiş
    -ErrorOppStatusRequiredIfAmount=Bu fırsat/aday için tahmini bir tutar ayarladınız. Durumunu da girmelisiniz
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Modül Tanımlayıcıda hatalı Menu Dizisi tanımı (fk_menu anahtarı için hatalı değer)
    -ErrorSavingChanges=Değişiklikler kaydedilirken bir hata oluştu
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Depo gemi hattı üzerinde gerekli
     ErrorFileMustHaveFormat=Dosya %s biçiminde olmalıdır
    -ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    +ErrorSupplierCountryIsNotDefined=Bu tedarikçi için bir ülke tanımlı değil. Önce bunu düzeltin.
     ErrorsThirdpartyMerge=İki kaydın birleştirilmesinde hata. İstek iptal edildi.
     ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order.
     ErrorStockIsNotEnoughToAddProductOnInvoice=Stock is not enough for product %s to add it into a new invoice.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=Bu üye için bir parola ayarlıdır. Ancak, hiçbir kullanıcı hesabı oluşturulmamıştır. Yani bu şifre saklanır ama Dolibarr'a giriş için kullanılamaz. Dış bir modül/arayüz tarafından kullanılıyor olabilir, ama bir üye için ne bir kullanıcı adı ne de parola tanımlamanız gerekmiyorsa "Her üye için bir kullanıcı adı yönet" seçeneğini devre dışı bırakabilirsiniz. Bir kullanıcı adı yönetmeniz gerekiyorsa ama herhangi bir parolaya gereksinim duymuyorsanız bu uyarıyı engellemek için bu alanı boş bırakabilirsiniz. Not: Eğer bir üye bir kullanıcıya bağlıysa kullanıcı adı olarak eposta adresi de kullanılabilir.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Bu konulu ya da bu hedefli (URL) bir yerimi zaten v
     WarningPassIsEmpty=Uyarı, veritabanı parolası boş. Bu bir güvenlik açığıdır. Veritabanına bir parola eklemelesiniz ve bu yansıtmak için conf.php dosyanızı değiştirin.
     WarningConfFileMustBeReadOnly=Uyarı, web sunucusu tarafından yapılandırma dosyanızın (<b>htdocs/conf/conf.php</b>)  üzerine üzerine yazılabilir.Bu ciddi bir güvenlik açığıdır. Web sunucusun kullandığı sistem kullanıcısının çalışması için dosyadaki izinleri sadece okumaya değiştirin. Windows ve disk için FAT biçimini kullanıyorsanız, bu dosya sisteminin dosya izinleri eklemek izin vermediğini bilmelisiniz, bu nedenle tamamen güvenli olamaz.
     WarningsOnXLines=<b>%s</b> kaynak satırlarındaki uyarılar
    -WarningNoDocumentModelActivated=Hiçbir model, belge üretimi için aktive edilmemiştir. Modül kurulumunuzu kontrol edene kadar bir model varsayılan olarak seçilecektir.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Uyarı, kurulum bir kez tamalanırsa,  <b>install.lock</b> dosyasını <b>%s</b> dizinine ekleyerek kur/taşıma aracını devre dışı bırakmalısınız. Bu dosyanın olmaması ciddi bir güvenlik açığıdır.
    -WarningUntilDirRemoved=Tüm güvenlik uyarıları (sadece admin kullanıcıları tarafından görülebilir) savunmasızlık olduğu sürece etkin olur (ya da MAIN_REMOVE_INSTALL_WARNING değişmezi Kurulum->Diğer menüsünde kuruluma eklenir).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Uyarı, kaynak ve hedef öğeleri arasında tutar farklı da olsa kapanış yapılır. Bu özelliği dikkatlice etkinleştirin.
     WarningUsingThisBoxSlowDown=Uyarı, bu kutuyu kullanmak kutuyu gösteren tüm sayfaları ciddi olarak yavaşlatır.
     WarningClickToDialUserSetupNotComplete=Kullanıcınızın ClickToDial bilgileri ayarı tamamlanmamış (kullanıcı kartınızdaki ClickToDial tabına bakın)
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Çok fazla veri (%s değerinden fazla sat
     WarningSomeLinesWithNullHourlyRate=Saatlik ücretleri tanımlanmadığında bazen bazı kullanıcılar tarafından kayıt edilir. Saat başına 0 %s değeri kullanılmıştır ancak harcanan sürenin yanlış değerlendirilmesine neden olabilir.
     WarningYourLoginWasModifiedPleaseLogin=Kullanıcı adınız değiştirilmiştir. Güvenlik nedeniyle sonraki eyleminiz için yeni kullanıcı adınızla giriş yapmalısınız.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/tr_TR/install.lang b/htdocs/langs/tr_TR/install.lang
    index 1e2f10367b4..2816c0c2da7 100644
    --- a/htdocs/langs/tr_TR/install.lang
    +++ b/htdocs/langs/tr_TR/install.lang
    @@ -2,37 +2,37 @@
     InstallEasy=Sadece adım adım yönergeleri izleyin.
     MiscellaneousChecks=Önkoşulların onayı
     ConfFileExists=Yapılandırma dosyası <b>%s</b> var.
    -ConfFileDoesNotExistsAndCouldNotBeCreated=Yapılandırma dosyası <b>%s</b> yoktur ve oluşturulamıyor!
    +ConfFileDoesNotExistsAndCouldNotBeCreated=Configuration file <b>%s</b> does not exist and could not be created!
     ConfFileCouldBeCreated=Yapılandırma dosyası <b>%s</b> oluşturulabilir.
    -ConfFileIsNotWritable=Yapılandırma dosyası <b>%s</b> yazılabilir değil. Yetkileri kontrol edin. İlk yüklemede web sunucusuna yapılandırma işlemi sırasında bu dosyaya yazabilme hakkının verilmiş olması gerekir ( "örneğin, chmod 666, bir Unix işletim sistemindeki gibi).
    +ConfFileIsNotWritable=Configuration file <b>%s</b> is not writable. Check permissions. For first install, your web server must be able to write into this file during configuration process ("chmod 666" for example on a Unix like OS).
     ConfFileIsWritable=Yapılandırma dosyası <b>%s</b>  yazılabilir.
     ConfFileMustBeAFileNotADir=Configuration file <b>%s</b> must be a file, not a directory.
    -ConfFileReload=Bütün bilgileri yapılandırma dosyasından geri yükle.
    +ConfFileReload=Reloading parameters from configuration file.
     PHPSupportSessions=Bu PHP oturumları destekliyor.
     PHPSupportPOSTGETOk=Bu PHP GÖNDER ve AL değişkenlerini destekliyor.
    -PHPSupportPOSTGETKo=Bu PHP kurulumunun GÖNDER ve AL  değişkenlerini desteklememesi mümkündür. Php.ini içindeki <b>variables_order</b> parametresini kontrol edin.
    -PHPSupportGD=Bu PHP GD grafik işlevlerini destekliyor.
    -PHPSupportCurl=Bu PHP Curl. destekliyor.
    -PHPSupportUTF8=Bu PHP UTF8 işlevlerini destekliyor.
    +PHPSupportPOSTGETKo=It's possible your PHP setup does not support variables POST and/or GET. Check the parameter <b>variables_order</b> in php.ini.
    +PHPSupportGD=This PHP supports GD graphical functions.
    +PHPSupportCurl=This PHP supports Curl.
    +PHPSupportUTF8=Bu PHP, UTF8 işlevlerini destekliyor.
     PHPMemoryOK=PHP nizin ençok oturum belleği <b>%s</b> olarak ayarlanmış. Bu yeterli olacaktır.
    -PHPMemoryTooLow=PHP nizin ençok oturum belleği <b>%s</b> bayt olarak ayarlanmış. Bu çok düşük olabilir. <b>php.ini</b> dosyanızdaki <b>memory_limit</b> parametresi ayarını enaz <b>%s</b> bayt olacak şekilde değiştirin.
    -Recheck=Daha belirleyici bir test için burayı tıklayın
    -ErrorPHPDoesNotSupportSessions=PHP kurulumunuz oturumları desteklemiyor. Bu özellik Dolibarr 'ın çalışması için gereklidir. PHP kurulumunuzu kontrol edin.
    -ErrorPHPDoesNotSupportGD=PHP kurulumunuz GD grafik işlevini desteklemiyor. Hiçbir grafik görüntülenemeyecektir.
    +PHPMemoryTooLow=Your PHP max session memory is set to <b>%s</b> bytes. This is too low. Change your <b>php.ini</b> to set <b>memory_limit</b> parameter to at least <b>%s</b> bytes.
    +Recheck=Daha detaylı bir test için buraya tıklayın
    +ErrorPHPDoesNotSupportSessions=Your PHP installation does not support sessions. This feature is required to allow Dolibarr to work. Check your PHP setup and permissions of the sessions directory.
    +ErrorPHPDoesNotSupportGD=PHP kurulumunuz GD grafiksel fonksiyonları desteklemiyor. Hiçbir grafik mevcut olmayacak.
     ErrorPHPDoesNotSupportCurl=PHP kurulumunuz Curl. desteklemiyor
     ErrorPHPDoesNotSupportUTF8=PHP kurulumunuz UTF8 işlevlerini desteklemiyor. Dolibarr düzgün çalışamaz. Dolibarr'ı yüklemeden önce bunu çözün.
     ErrorDirDoesNotExists=%s Dizini yoktur.
    -ErrorGoBackAndCorrectParameters=Geri gidin ve yanlış parametreleri düzeltin.
    +ErrorGoBackAndCorrectParameters=Geri gidin ve parametreleri kontrol edin/düzeltin.
     ErrorWrongValueForParameter=Parametresi '%s' için yanlış değer yazmış olabilirsiniz'.
     ErrorFailedToCreateDatabase=Veritabanı '%s' oluşturulamadı.
     ErrorFailedToConnectToDatabase=Veritabanı '%s' e bağlanılamadı.
     ErrorDatabaseVersionTooLow=Veritabanı sürümü (%s) çok eski. Sürüm %s ya da daha yükseği gerekir.
     ErrorPHPVersionTooLow=PHP sürümü çok eski. %s Sürümü gereklidir.
    -ErrorConnectedButDatabaseNotFound=Sunucu bağlantısı başarılı ancak veritabanı '%s' bulunamadı.
    +ErrorConnectedButDatabaseNotFound=Sunucuya bağlantı başarılı fakat '%s' veritabanı bulunamadı.
     ErrorDatabaseAlreadyExists=Veritabanı '%s' zaten var.
    -IfDatabaseNotExistsGoBackAndUncheckCreate=Eğer veritabanı yoksa, geri gidin ve "Veritabanı oluştur" seçeneğini işaretleyin.
    +IfDatabaseNotExistsGoBackAndUncheckCreate=Veritabanı mevcut değilse geri gidin ve "Veritabanı oluştur" seçeneğini kontrol edin.
     IfDatabaseExistsGoBackAndCheckCreate=Eğer veritabanı zaten mevcutsa, geri gidin ve "Veritabanı oluştur" seçeneğindeki işareti kaldırın.
    -WarningBrowserTooOld=Çok eski bir web tarayıcısı. Web tarayıcınızı Firefox, Chrome yada Opera 'nın enson sürümüne yükseltmeniz son derece önerilir.
    +WarningBrowserTooOld=Tarayıcı sürümü çok eski. Tarayıcınızı Firefox, Chrome veya Opera'nın en son sürümlerine güncellemeniz önemle tavsiye edilir.
     PHPVersion=PHP Sürümü
     License=Lisans kullanımı
     ConfigurationFile=Yapılandırma dosyası
    @@ -45,22 +45,23 @@ DolibarrDatabase=Dolibarr Veritabanı
     DatabaseType=Veritabanı türü
     DriverType=Sürücü türü
     Server=Sunucu
    -ServerAddressDescription=Veritabanı sunucusunun adı ya da ip’ si, veritabanı sunucusunun, web tarayıcısı ile aynı sunucuda barındırıldığı durumlarda genellikle 'localhost' olur
    +ServerAddressDescription=Name or ip address for the database server. Usually 'localhost' when the database server is hosted on the same server as the web server.
     ServerPortDescription=Veritabanı sunucusu bağlantı noktası. Eğer bilinmiyorsa boş tutun.
     DatabaseServer=Veritabanı sunucusu
     DatabaseName=Veritabanı adı
    -DatabasePrefix=Veritabanı tablo öneki
    -AdminLogin=Dolibarr veritabanı kullanıcı adı.
    -PasswordAgain=Parolayı ikinci kez yeniden yaz
    +DatabasePrefix=Veritabanı tablosu öneki
    +DatabasePrefixDescription=Database table prefix. If empty, defaults to llx_.
    +AdminLogin=Dolibarr veritabanı sahibi için kullanıcı hesabı
    +PasswordAgain=Parola onayını tekrar girin
     AdminPassword=Dolibarr veritabanı sahibi parolası.
     CreateDatabase=Veritabanı oluştur
    -CreateUser=Sahip oluşturun ve veritabanında ona izin verin
    +CreateUser=Create user account or grant user account permission on the Dolibarr database
     DatabaseSuperUserAccess=Veritabanı sunucusu - süperkullanıcı erişimi
    -CheckToCreateDatabase=Eğer veritabanı yoksa ve oluşturulması gerekiyorsa kutuyu işaretleyin.<br>Bu durumda, bu sayfanın altına süperkullanıcı hesabı için kullanıcı adı/parola girmelisiniz.
    -CheckToCreateUser=Check box if database owner does not exist and must be created, or if it exists but database does not exists and permissions must be granted.<br>In this case, you must choose its login and password and also fill the login/password for the superuser account at the bottom of this page. If this box is unchecked, owner database and its passwords must exists.
    -DatabaseRootLoginDescription=Yeni veritabanı ve yeni kullanıcı oluşturabilecek kullanıcı girişi, veritabanınız ve veritabanı girişiniz zaten varsa gereksizdir (sanki bir web sağlayıcı tarafından barındırılıyor gibi).
    -KeepEmptyIfNoPassword=Eğer kullanıcının herhangi bir parolası yoksa boş bırakın (bundan kaçının)
    -SaveConfigurationFile=Değerleri saklayın
    +CheckToCreateDatabase=Check the box if the database does not exist yet and so must be created.<br>In this case, you must also fill in the user name and password for the superuser account at the bottom of this page.
    +CheckToCreateUser=Check the box if:<br>the database user account does not yet exist and so must be created, or<br>if the user account exists but the database does not exist and permissions must be granted.<br>In this case, you must enter the user account and password and <b>also</b> the superuser account name and password at the bottom of this page. If this box is unchecked, database owner and password must already exist.
    +DatabaseRootLoginDescription=Superuser account name (to create new databases or new users), mandatory if the database or its owner does not already exist.
    +KeepEmptyIfNoPassword=Leave empty if superuser has no password (NOT recommended)
    +SaveConfigurationFile=Saving parameters to
     ServerConnection=Sunucu bağlantısı
     DatabaseCreation=Veritabanı oluşturma
     CreateDatabaseObjects=Veritabanı nesneleri oluşturma
    @@ -71,9 +72,9 @@ CreateOtherKeysForTable=Yabancı tuşları ve tablo için dizin oluşturma %s
     OtherKeysCreation=Yabancı tuşları ve indeksleri oluşturma
     FunctionsCreation=İşlevler oluşturma
     AdminAccountCreation=Yönetici girişi oluşturma
    -PleaseTypePassword=Lütfen bir parola yazın, boş parolaya izin verilmez!
    -PleaseTypeALogin=Lütfen bir kullanıcı adı yazın!
    -PasswordsMismatch=Parolalar farklıdır, lütfen yeniden deneyin!
    +PleaseTypePassword=Please type a password, empty passwords are not allowed!
    +PleaseTypeALogin=Please type a login!
    +PasswordsMismatch=Şifreler farklıdır, lütfen tekrar deneyin!
     SetupEnd=Kurulum sonu
     SystemIsInstalled=Bu kurulum tamamlandı.
     SystemIsUpgraded=Dolibarr başarıyla yükseltildi.
    @@ -81,65 +82,65 @@ YouNeedToPersonalizeSetup=İhtiyaçlarınıza uygun olarak Dolibarr'ı yapıland
     AdminLoginCreatedSuccessfuly=Dolibarr yönetici girişi '<b>%s</b>' başarıyla oluşturuldu.
     GoToDolibarr=Dolibarr'a git
     GoToSetupArea=Dolibarr'a git (ayarlar alanı)
    -MigrationNotFinished=Veritabanı sürümü tamamen güncel değildir, bu nedenle yükseltme işlemini yeniden çalıştırmanız gerekir.
    +MigrationNotFinished=The database version is not completely up to date: run the upgrade process again.
     GoToUpgradePage=Yükseltme sayfasına yeniden git
     WithNoSlashAtTheEnd=Sonunda taksim olmadan "/"
    -DirectoryRecommendation=Web sayfalarınızın dizininin dışında bir dizin kullanmanız önerilir.
    +DirectoryRecommendation=It is recommended to use a directory outside of the web pages.
     LoginAlreadyExists=Zaten var
     DolibarrAdminLogin=Dolibarr yönetici girişi
    -AdminLoginAlreadyExists=Dolibarr yönetici hesabı '<b>%s</b>' zaten var. Yeni bir tane oluşturmak istiyorsanız geri gidin.
    +AdminLoginAlreadyExists=Dolibarr administrator account '<b>%s</b>' already exists. Go back if you want to create another one.
     FailedToCreateAdminLogin=Dolibarr yönetici hesabı oluşturulmasında hata.
    -WarningRemoveInstallDir=Uyarı, güvenlik nedeniyle, kurulum veya yükseltme tamamlandığında, araçların yeniden kurulumunu önlemek için  <b>install.lock</b> adlı bir dosyayı kötü amaçlı kullanımları önlemek için Dolibarr belge dizinine eklemelisiniz.
    -FunctionNotAvailableInThisPHP=Bu PHP de geçerli değil
    +WarningRemoveInstallDir=Warning, for security reasons, once the install or upgrade is complete, you should add a file called <b>install.lock</b> into the Dolibarr document directory in order to prevent the accidental/malicious use of the install tools again.
    +FunctionNotAvailableInThisPHP=Bu PHP'de mevcut değil
     ChoosedMigrateScript=Komut dizisi taşıma seç
    -DataMigration=Database migration (data)
    -DatabaseMigration=Database migration (structure + some data)
    +DataMigration=Veritabanı taşıma (veri)
    +DatabaseMigration=Veritabanı taşıma (yapı + bazı veriler)
     ProcessMigrateScript=Komut dizisi işleme
     ChooseYourSetupMode=Kurulum biçimini seçin ve "Başlat" ı tıklayın...
     FreshInstall=Yeni yükleme
    -FreshInstallDesc=Eğer bu sizin ilk yüklemeniz ise bu biçimi kullanın. Eğer ilk değilse, bu biçim bir önceki eksik yüklemeyi onarır, ama eğer sürümünüzü yükseltmek istiyorsanız, "Yükseltme" biçimini seçin.
    +FreshInstallDesc=Use this mode if this is your first install. If not, this mode can repair a incomplete previous install. If you want to upgrade your version, choose "Upgrade" mode.
     Upgrade=Yükseltme
     UpgradeDesc=Eğer eski Dolibarr dosyalarını daha yeni bir sürümün dosyaları ile değiştirdiyseniz bu biçimi kullanın. Bu, veritabanını ve veriyi yükseltecektir.
     Start=Başlat
     InstallNotAllowed=Kuruluma <b>conf.php</b> izin vermiyor
     YouMustCreateWithPermission=%s Dosyasını oluşturmanız ve kurulum sırasında web sunucusunda yazma izinlerini ayarlamanız gerekir.
    -CorrectProblemAndReloadPage=Lütfen sorunu çözün ve sayfayı yeniden yüklemek için F5 tuşuna basın.
    +CorrectProblemAndReloadPage=Lütfen sorunu düzeltin ve sayfayı tekrar yüklemek için F5 tuşuna basın.
     AlreadyDone=Zaten taşındı
     DatabaseVersion=Veritabanı sürümü
     ServerVersion=Veritabanı sunucusu sürümü
     YouMustCreateItAndAllowServerToWrite=Bu dizini oluşturmanız ve web sunucusuna yazmak için vermeniz gerekir.
     DBSortingCollation=Karakter sıralama düzeni
    -YouAskDatabaseCreationSoDolibarrNeedToConnect=<b>%s</b> veritabanını oluşturmanız istenebilir, bunun için, Dolibarr <b>%s</b> sunucusuna <b>%s</b> süper kullanıcı izniyle bağlanmak ister.
    -YouAskLoginCreationSoDolibarrNeedToConnect=<b>%s</b> Veritabanı girişi oluşturmanız istenebilir, bunun için, Dolibarr <b>%s</b> sunucusuna <b>%s</b> süperkullanıcı izniyle bağlanmak ister.
    -BecauseConnectionFailedParametersMayBeWrong=Bağlantı yapılamazsa, sunucu ya da süper kullanıcı parametreleri yanlış olmalıdır.
    +YouAskDatabaseCreationSoDolibarrNeedToConnect=You selected create database <b>%s</b>, but for this, Dolibarr needs to connect to server <b>%s</b> with super user <b>%s</b> permissions.
    +YouAskLoginCreationSoDolibarrNeedToConnect=You selected create database user <b>%s</b>, but for this, Dolibarr needs to connect to server <b>%s</b> with super user <b>%s</b> permissions.
    +BecauseConnectionFailedParametersMayBeWrong=The database connection failed: the host or super user parameters must be wrong.
     OrphelinsPaymentsDetectedByMethod=%s yöntemi ile belirlenen sahipsiz ödemeler
     RemoveItManuallyAndPressF5ToContinue=El ile kaldırın ve devam etmek için F5 tuşuna basın.
     FieldRenamed=Alan yeniden adlandırıldı
    -IfLoginDoesNotExistsCheckCreateUser=Eğer kullanıcı adı henüz yoksa , "Kullanıcı oluştur" seçeneğini işaretlemelisiniz
    -ErrorConnection=Sunucu "<b>%s</b>" veritabanı adı "<b>%s</b>", kullanıcı adı "<b>%s</b>" ya da veritabanı parolası yanlış olabilir ya da PHP istemci sürümü veritabanı sürümüne göre çok eski olabilir.
    +IfLoginDoesNotExistsCheckCreateUser=Kullanıcı henüz mevcut değilse "Kullanıcı oluştur" seçeneğini kontrol etmelisiniz
    +ErrorConnection=Sunucu "<b>%s</b>", veritabanı adı "<b>%s</b>", kullanıcı adı "<b>%s</b>",  ya da veritabanı şifresi yanlış olabilir veya PHP istemci sürümü veritabanı sürümüne göre çok eski olabilir.
     InstallChoiceRecommanded=<b>%s</b> Geçerli sürümünüzden  <b>%s</b> sürümünü kurmak için önerilen seçim
     InstallChoiceSuggested=<b>Yükleyici tarafından önerilen seçimi kur</b>.
    -MigrateIsDoneStepByStep=Hedeflenen sürümde (%s) çeşitli sürüm boşlukları var, bu nedenle sihirbaz bunun tamamlanması için geri dönecektir.
    -CheckThatDatabasenameIsCorrect=Veritabanı adı "<b>%s</b>" nin doğruluğunu denetleyin.
    +MigrateIsDoneStepByStep=The targeted version (%s) has a gap of several versions. The install wizard will come back to suggest a further migration once this one is complete.
    +CheckThatDatabasenameIsCorrect=Check that the database name "<b>%s</b>" is correct.
     IfAlreadyExistsCheckOption=Eğer bu isim doğru ise ve veritabanı henüz mevcut değilse, "Veritabanı oluştur" seçeneğini işaretlemelisiniz.
     OpenBaseDir=PHP openbasedir parametresi
    -YouAskToCreateDatabaseSoRootRequired="Veritabanı oluştur" kutusunu işaretlediniz. Bunun için süperkullanıcı kullanıcı adı/parola girmeniz (formun altına) gerekir.
    -YouAskToCreateDatabaseUserSoRootRequired="Veritabanı sahibi oluştur" kutusunu işaretlediniz. Bunun için süperkullanıcı kullanıcı adı/parola girmeniz (formun altına) gerekir.
    -NextStepMightLastALongTime=Geçerli işlem birkaç dakika sürebilir. Lütfen devam etmeden önce sonraki ekranın tamamen görüntülenmesini bekleyin.
    +YouAskToCreateDatabaseSoRootRequired=You checked the box "Create database". For this, you need to provide the login/password of superuser (bottom of form).
    +YouAskToCreateDatabaseUserSoRootRequired=You checked the box "Create database owner". For this, you need to provide the login/password of superuser (bottom of form).
    +NextStepMightLastALongTime=The current step may take several minutes. Please wait until the next screen is shown completely before continuing.
     MigrationCustomerOrderShipping=Müşteri siparişleri kaydı için nakliye taşıma
     MigrationShippingDelivery=Nakliyenin saklanması bitti
     MigrationShippingDelivery2=Nakliye 2 nin saklanması bitti
     MigrationFinished=Taşıma bitti
    -LastStepDesc=<strong>Son adım</strong>: Burada yazılıma bağlanmayı düşündüğünüz kullanıcı adı ve parolayı tanımlayın. Herkesi yönetecek hesap olduğundan dolayı bu bilgileri kaybetmeyin.
    +LastStepDesc=<strong>Last step</strong>: Define here the login and password you wish to use to connect to Dolibarr. <b>Do not lose this as it is the master account to administer all other/additional user accounts.</b>
     ActivateModule=%s modülünü etkinleştir
     ShowEditTechnicalParameters=Gelişmiş parametreleri (uzman modu) göstermek/düzenlemek için burayı tıklayın
    -WarningUpgrade=Uyarı:\nİlkin bir veritabanı yedeklemesi yaptınız mı?\nBu şiddetle önerilir: örneğin, veritabanı sistemindeki bazı hatalar nedeniyle (örneğin mysql version 5.5.40/41/42/43), bu işlem sırasında bazı veri ve tablolar kaybolabilir, bu yüzden taşıma işlemi başlamadan önce veritabanının tam bir dökümünün olması önemle önerilir.\n\nTaşıma işlemini başlatmak için TAMAM'a tıklayın...
    -ErrorDatabaseVersionForbiddenForMigration=Veritabanınızın sürümü %s. Veritabanınızın yapısını değiştirirseniz veri kaybı yapacak bir kritik hata vardır, taşıma işlemi tarafından istenmesi gibi. Bu nedenle, veritabanınızı daha yüksek kararlı bir sürüme yükseltinceye kadar taşımaya izin verilmeyecektir (bilinen hatalar listesi sürümü: %s)
    -KeepDefaultValuesWamp=DoliWamp üzerinden Dolibarr kurulum sihirbazını kullanın, burada sunulan değerler hali hazırda optimize edilmiştir. Yalnızca ne yapacağınızı biliyorsanız bunları değiştirin.
    -KeepDefaultValuesDeb=Bir Linux paketi (Ubuntu, Debian, Fedora ...) üzerinden Dolibarr kurulum sihirbazını kullanın, burada sunulan değerler hali hazırda optimize edilmiştir. Yalnızca veritabanı sahibinin parolasının tamamlanması gerekir. Yalnızca ne yapacağınızı biliyorsanız parametreleri değiştirin.
    -KeepDefaultValuesMamp=DoliMamp üzerinden Dolibarr kurulum sihirbazını kullanın, burada sunulan değerler hali hazırda optimize edilmiştir. Yalnızca ne yapacağınızı biliyorsanız bunları değiştirin.
    -KeepDefaultValuesProxmox=Proxmox sanal aygıt  üzerinden Dolibarr kurulum sihirbazını kullanın, burada sunulan değerler hali hazırda optimize edilmiştir. Yalnızca ne yapacağınızı biliyorsanız bunları değiştirin.
    -UpgradeExternalModule=Harici modüllerin özel yükseltme işlemini çalıştırın
    +WarningUpgrade=Warning:\nDid you run a database backup first?\nThis is highly recommended. Loss of data (due to for example bugs in mysql version 5.5.40/41/42/43) may be possible during this process, so it is essential to take a complete dump of your database before starting any migration.\n\nClick OK to start migration process...
    +ErrorDatabaseVersionForbiddenForMigration=Your database version is %s. It has a critical bug, making data loss possible if you make structural changes in your database, such as is required by the migration process. For his reason, migration will not be allowed until you upgrade your database to a layer (patched) version (list of known buggy versions: %s)
    +KeepDefaultValuesWamp=You used the Dolibarr setup wizard from DoliWamp, so values proposed here are already optimized. Change them only if you know what you are doing.
    +KeepDefaultValuesDeb=You used the Dolibarr setup wizard from a Linux package (Ubuntu, Debian, Fedora...), so the values proposed here are already optimized. Only the password of the database owner to create must be entered. Change other parameters only if you know what you are doing.
    +KeepDefaultValuesMamp=You used the Dolibarr setup wizard from DoliMamp, so the values proposed here are already optimized. Change them only if you know what you are doing.
    +KeepDefaultValuesProxmox=You used the Dolibarr setup wizard from a Proxmox virtual appliance, so the values proposed here are already optimized. Change them only if you know what you are doing.
    +UpgradeExternalModule=Run dedicated upgrade process of external module
     SetAtLeastOneOptionAsUrlParameter=Set at least one option as a parameter in URL. For example:  '...repair.php?standard=confirmed'
     NothingToDelete=Nothing to clean/delete
     NothingToDo=Yapacak bir şey yok
    @@ -147,7 +148,7 @@ NothingToDo=Yapacak bir şey yok
     # upgrade
     MigrationFixData=Standart dışı veri onarımı
     MigrationOrder=Müşteri siparişleri için veri taşıma
    -MigrationSupplierOrder=Data migration for vendor's orders
    +MigrationSupplierOrder=Tedarikçi siparişleri için veri taşıma
     MigrationProposal=Teklifler için veri taşıma
     MigrationInvoice=Müşteri faturaları için veri taşıma
     MigrationContract=Sözleşmeler için veri taşıma
    @@ -163,9 +164,9 @@ MigrationContractsUpdate=Sözleşme verisi düzeltme
     MigrationContractsNumberToUpdate=Güncellenecek %s sözleşme(ler) var
     MigrationContractsLineCreation=Sözleşme ref %s için sözleşme satırı oluştur
     MigrationContractsNothingToUpdate=Daha fazla yapacak şey yok
    -MigrationContractsFieldDontExist=fk_facture Alanı artık yok. Hiçbir şey yapmaya gerek yok.
    +MigrationContractsFieldDontExist=Field fk_facture does not exist anymore. Nothing to do.
     MigrationContractsEmptyDatesUpdate=Boş sözleşme tarihi düzeltme
    -MigrationContractsEmptyDatesUpdateSuccess=Sözleşmedeki boş tarih başarıyla düzeltildi
    +MigrationContractsEmptyDatesUpdateSuccess=Contract empty date correction done successfully
     MigrationContractsEmptyDatesNothingToUpdate=Düzeltilecek boş sözleşme tarihi yok
     MigrationContractsEmptyCreationDatesNothingToUpdate=Düzeltilecek sözleşme oluşturma tarihi yok
     MigrationContractsInvalidDatesUpdate=Sözleşme düzeltmede hatalı değer
    @@ -187,24 +188,24 @@ MigrationDeliveryDetail=Teslimat güncelleme
     MigrationStockDetail=Ürünlerin stok değerini güncelle
     MigrationMenusDetail=Dinamik menüler tablolarını güncelle
     MigrationDeliveryAddress=Yüklemelerde teslimat adresini güncelle
    -MigrationProjectTaskActors=llx_projet_task_actors table için veri taşıma tablosu
    +MigrationProjectTaskActors=Data migration for table llx_projet_task_actors
     MigrationProjectUserResp=Veri taşıma alanı fk_user_resp of llx_projet to llx_element_contact
     MigrationProjectTaskTime=Saniyede olarak harcanan süreyi güncelle
     MigrationActioncommElement=Eylemlere ilişkin veri güncellemesi
     MigrationPaymentMode=Ödeme biçimi için veri taşıma
     MigrationCategorieAssociation=Kategorilerin taşınması
    -MigrationEvents=Atama tablosuna etkinlik sahibi eklemek için gerekli taşıma eylemleri
    -MigrationEventsContact=Migration of events to add event contact into assignement table
    +MigrationEvents=Migration of events to add event owner into assignment table
    +MigrationEventsContact=Migration of events to add event contact into assignment table
     MigrationRemiseEntity=value of llx_societe_remise varlık alanını güncelle
     MigrationRemiseExceptEntity=llx_societe_remise_except varlık alanını güncelle
     MigrationUserRightsEntity=Update entity field value of llx_user_rights
     MigrationUserGroupRightsEntity=Update entity field value of llx_usergroup_rights
     MigrationReloadModule=Modülü yeniden yükle %s
     MigrationResetBlockedLog=Reset module BlockedLog for v7 algorithm
    -ShowNotAvailableOptions=Kullanılamayacak seçenekler görüntülensin
    -HideNotAvailableOptions=Kullanılamayacak seçenekler gizlensin
    -ErrorFoundDuringMigration=Taşıma işlemi sırasında hata bildirildiğinden sonraki adıma geçilemeyecektir. Hataları gözardı etmek için, <a href="%s">buraya tıklayabilirsiniz</a>, ancak onarılana kadar uygulama ya da bazı özellikleri çalışmayabilecektir.
    -YouTryInstallDisabledByDirLock=The application try to sefl upgrade, but install/upgrade pages have been disabled for security reason (directory renamed with .lock suffix).<br>
    -YouTryInstallDisabledByFileLock=The application try to sefl upgrade, but install/upgrade pages pages have been disabled for security reason (by lock file <strong>install.lock</strong> into dolibarr documents directory).<br>
    +ShowNotAvailableOptions=Show unavailable options
    +HideNotAvailableOptions=Hide unavailable options
    +ErrorFoundDuringMigration=Error(s) were reported during the migration process so next step is not available. To ignore errors, you can <a href="%s">click here</a>, but the application or some features may not work correctly until the errors are resolved.
    +YouTryInstallDisabledByDirLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (directory renamed with .lock suffix).<br>
    +YouTryInstallDisabledByFileLock=The application tried to self-upgrade, but the install/upgrade pages have been disabled for security (by the existence of a lock file <strong>install.lock</strong> in the dolibarr documents directory).<br>
     ClickHereToGoToApp=Click here to go to your application
    -ClickOnLinkOrRemoveManualy=Click on following link and if you always reach this page, you must remove the file install.lock into documents directory manually
    +ClickOnLinkOrRemoveManualy=Click on the following link. If you always see this same page, you must remove/rename the file install.lock in the documents directory.
    diff --git a/htdocs/langs/tr_TR/interventions.lang b/htdocs/langs/tr_TR/interventions.lang
    index da07cd35987..954f469d849 100644
    --- a/htdocs/langs/tr_TR/interventions.lang
    +++ b/htdocs/langs/tr_TR/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Müdahaleler
     InterventionCard=Müdahale kartı
     NewIntervention=Yeni müdahale
     AddIntervention=Müdahale oluştur
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Müdahaleler listesi
     ActionsOnFicheInter=Müdahale eylemleri
     LastInterventions=Son %s müdahale
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Siparişlerden oluşturulan müdahaleler için hi
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Müdahale istatistikleri
    -NbOfinterventions=Müdahale kartları sayısı
    -NumberOfInterventionsByMonth=Aylık (doğrulama tarihi) müdahale kartları sayısı
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Müdahale kimliği
    diff --git a/htdocs/langs/tr_TR/main.lang b/htdocs/langs/tr_TR/main.lang
    index 73715b5e57c..08dce1c5b29 100644
    --- a/htdocs/langs/tr_TR/main.lang
    +++ b/htdocs/langs/tr_TR/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Posta gönderilemedi (gönderen)
     ErrorFileNotUploaded=Dosya gönderilemedi. Boyutun izin verilen ençok dosya boyutunu aşmadığını denetleyin, bu dizinde yeterli boş alan olmalı ve aynı isimde başka bir dosya olmamalı.
     ErrorInternalErrorDetected=Hata algılandı
     ErrorWrongHostParameter=Yanlış ana parametre
    -ErrorYourCountryIsNotDefined=Ülkeniz tanımlı değil. Giriş-Ayarlar-Düzenle ye git ve formu yeniden gönder.
    -ErrorRecordIsUsedByChild=Bu kayıt silinemedi. Bu kayıt en az bir alt kayıt tarafından kullanılmaktadır.
    +ErrorYourCountryIsNotDefined=Ülkeniz tanımlı değil. Giriş-Ayarlar-Düzenle kısmına git ve formu yeniden gönder.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Yanlış değer
     ErrorWrongValueForParameterX=Parametresi %s için yanlış değer
     ErrorNoRequestInError=Hatalı istek yok
    -ErrorServiceUnavailableTryLater=Hizmet şu an için kullanılamıyor. Daha sonra yeniden deneyin.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Benzersiz bir alanda yinelenen değer
    -ErrorSomeErrorWereFoundRollbackIsDone=Bazı hatalar bulundu. Değişikler geri alındı.
    -ErrorConfigParameterNotDefined=Parametre <b>%s</b> Dolibarr yapılandırma dosyasında <b>conf.php</b> tanımlı değil.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Dolibarr veritabanında kullanıcı <b>%s</b> bulunamadı.
     ErrorNoVATRateDefinedForSellerCountry=Hata, ülke '%s' için herhangi bir KDV oranı tanımlanmamış.
     ErrorNoSocialContributionForSellerCountry=Hata, '%s' ülkesi için sosyal/mali vergi tipi tanımlanmamış.
     ErrorFailedToSaveFile=Hata, dosya kaydedilemedi.
    -ErrorCannotAddThisParentWarehouse=Zaten şu anki deponun bir alt deposu olan bir üst depo eklemeye çalışıyorsunuz
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Sayfa başına maksimum kayıt sayısı
     NotAuthorized=Bunu yapmak için yetkiniz yok.
     SetDate=Ayar tarihi
     SelectDate=Bir tarih seç
    @@ -92,9 +92,9 @@ DolibarrInHttpAuthenticationSoPasswordUseless=Yapılandırma dosyası <b>conf.ph
     Administrator=Yönetici
     Undefined=Tanımlanmamış
     PasswordForgotten=Parola mı unutuldu?
    -NoAccount=No account?
    +NoAccount=Hesap yok mu?
     SeeAbove=Yukarı bak
    -HomeArea=Giriş alanı
    +HomeArea=Giriş
     LastConnexion=Son bağlantı
     PreviousConnexion=Önceki bağlantı
     PreviousValue=Önceki değer
    @@ -142,6 +142,7 @@ Closed=Kapalı
     Closed2=Kapalı
     NotClosed=Kapalı değil
     Enabled=Etkin
    +Enable=Etkin
     Deprecated=Kullanılmayan
     Disable=Engelle
     Disabled=Engelli
    @@ -153,7 +154,7 @@ Update=Güncelle
     Close=Kapat
     CloseBox=Kontrol panelinizden ekran etiketini kaldırın
     Confirm=Onayla
    -ConfirmSendCardByMail=Bu kartın içeriğini posta ile gerçekten <b>%s</b> adresine göndermek istiyor musunuz?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Sil
     Remove=Kaldır
     Resiliate=Sonlandır
    @@ -232,7 +233,7 @@ Limit=Sınır
     Limits=Sınırlar
     Logout=Çıkış
     NoLogoutProcessWithAuthMode=Kimlik denetimi modu <b>%s</b> için uygulanabilir bağlantı kesme özelliği yok
    -Connection=Kullanıcı adı
    +Connection=Oturum Aç
     Setup=Ayarlar
     Alert=Uyarı
     MenuWarnings=Uyarılar
    @@ -327,7 +328,7 @@ Copy=Kopyala
     Paste=Yapıştır
     Default=Varsayılan
     DefaultValue=Varsayılan değer
    -DefaultValues=Varsayılan değerler
    +DefaultValues=Default values/filters/sorting
     Price=Fiyat
     PriceCurrency=Fiyat (para birimi)
     UnitPrice=Birim fiyat
    @@ -347,7 +348,7 @@ AmountTTCShort=Tutar (KDV dahil)
     AmountHT=Tutar (KDV hariç)
     AmountTTC=Miktarı (KDV dahil)
     AmountVAT=KDV tutarı
    -MulticurrencyAlreadyPaid=Ödenmiş, orijinal para birimi
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Ödemeye devam edin, orijinal para birimi
     MulticurrencyPaymentAmount=Ödeme tutarı, orijinal para birimi
     MulticurrencyAmountHT=Tutar (vergisiz net), ilk para birimi
    @@ -416,7 +417,7 @@ Favorite=Sık kullanılan
     ShortInfo=Bilgi.
     Ref=Ref.
     ExternalRef=Ref. stajyer
    -RefSupplier=Ref. vendor
    +RefSupplier=Referans tedarikçi
     RefPayment=Ref. ödeme
     CommercialProposalsShort=Teklifler
     Comment=Açıklama
    @@ -428,8 +429,8 @@ ActionNotApplicable=Uygulanamaz
     ActionRunningNotStarted=Başlayacak
     ActionRunningShort=Devam etmekte
     ActionDoneShort=Bitti
    -ActionUncomplete=Tamamlanmamış
    -LatestLinkedEvents=Latest %s linked events
    +ActionUncomplete=Incomplete
    +LatestLinkedEvents=Bununla bağlantılı son %s etkinlik
     CompanyFoundation=Şirket/Kuruluş
     Accountant=Accountant
     ContactsForCompany=Bu üçüncü partinin kişileri
    @@ -453,8 +454,8 @@ Generate=Oluştur
     Duration=Süre
     TotalDuration=Toplam süre
     Summary=Özet
    -DolibarrStateBoard=Veritabanı istatistikleri
    -DolibarrWorkBoard=Açık ögeler gösterge tablosu
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=İşlenecek hiçbir açık öğe yok
     Available=Mevcut
     NotYetAvailable=Henüz mevcut değil
    @@ -506,7 +507,7 @@ None=Hiçbiri
     NoneF=Hiçbiri
     NoneOrSeveral=Yok veya Birkaç
     Late=Son
    -LateDesc=Bir kayıdın sizin ayarlarınıza dayanarak gecikmiş olduğu ya da olmadığını tanımlayabilmek için gerekli süre. Yöneticinizden Giriş - Ayarlar - Uyarılar menüsünden süreyi değiştirmesini isteyin.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Resim
     Photos=Resimler
    @@ -530,18 +531,6 @@ September=Eylül
     October=Ekim
     November=Kasım
     December=Aralık
    -JanuaryMin=Ara
    -FebruaryMin=Şub
    -MarchMin=Mar
    -AprilMin=Nis
    -MayMin=May
    -JuneMin=Haz
    -JulyMin=Tem
    -AugustMin=Ağu
    -SeptemberMin=Eyl
    -OctoberMin=Eki
    -NovemberMin=Kas
    -DecemberMin=Ara
     Month01=Ocak
     Month02=Şubat
     Month03=Mart
    @@ -622,9 +611,9 @@ BuildDoc=Doc oluştur
     Entity=Varlık
     Entities=Varlıklar
     CustomerPreview=Müşteri önizleme
    -SupplierPreview=Vendor preview
    +SupplierPreview=Tedarikçi önizlemesi
     ShowCustomerPreview=Müşteri önizlemeyi göster
    -ShowSupplierPreview=Show vendor preview
    +ShowSupplierPreview=Tedarikçi önizlemesini göster
     RefCustomer=Müşteri Ref.
     Currency=Para birimi
     InfoAdmin=Yöneticiler için bilgi
    @@ -646,6 +635,8 @@ SendMail=E-posta gönder
     EMail=E-posta
     NoEMail=E-posta yok
     Email=Eposta
    +AlreadyRead=Alreay read
    +NotRead=Okunmayan
     NoMobilePhone=Cep telefonu yok
     Owner=Sahibi
     FollowingConstantsWillBeSubstituted=Aşağıdaki değişmezler uygun değerlerin yerine konacaktır.
    @@ -677,7 +668,7 @@ NeverReceived=Hiç alınmadı
     Canceled=Vazgeçildi
     YouCanChangeValuesForThisListFromDictionarySetup=Bu listenin değerlerini Kurulum - Sözlükler menüsünden değiştirebilirsiniz
     YouCanChangeValuesForThisListFrom=Bu listenin değerlerini %s menüsünden değiştirebilirsiniz
    -YouCanSetDefaultValueInModuleSetup=Modül ayarlarında yeni bir kayıt oluştururken kullanılacak varsayılan değeri belirleybilirsiniz
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Renk
     Documents=Bağlı dosyalar
     Documents2=Belgeler
    @@ -703,7 +694,7 @@ DateOfSignature=İmza tarihi
     HidePassword=Komutu gizli parola ile göster
     UnHidePassword=Gerçek komutu açık parola ile göster
     Root=Kök
    -Informations=Bilgiler
    +Informations=Bilgi
     Page=Sayfa
     Notes=Notlar
     AddNewLine=Yeni satır ekle
    @@ -716,15 +707,15 @@ Merge=Birleştir
     DocumentModelStandardPDF=Standart PDF şablonu
     PrintContentArea=Yazdırılıcak Sayfanın ana içerik alanını göster
     MenuManager=Menu yöneticisi
    -WarningYouAreInMaintenanceMode=Uyarı, bakım modundasınız, şu anda uygulamayı kullanmak için yalnızca <b>%s</b> girişine izin veriliyor.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Sistem hatası
     CoreErrorMessage=Üzgünüz, bir hata oluştu. Günlükleri kontrol etmek için sistem yöneticinize başvurun veya daha fazla bilgi almak için $dolibarr_main_prod=1 devre dışı bırakın.
     CreditCard=Kredi kartı
     ValidatePayment=Ödeme doğrula
     CreditOrDebitCard=Kredi veya banka kartı
     FieldsWithAreMandatory=<b>%s</b> olan alanları zorunludur
    -FieldsWithIsForPublic=Üyelerin genel listelerinde <b>%s</b> olan alanlar gösterilir. Bunu istemiyorsanız, “genel” kutusundan işareti kaldırın.
    -AccordingToGeoIPDatabase=(GeoIP dönüşümüne göre)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Satır
     NotSupported=Desteklenmez
     RequiredField=Gerekli alan
    @@ -732,6 +723,8 @@ Result=Sonuç
     ToTest=Denem
     ValidateBefore=Bu özelliği kullanmadan önce kart doğrulanmalıdır
     Visibility=Görünürlük
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Özel
     Hidden=Gizli
     Resources=Kaynaklar
    @@ -750,6 +743,7 @@ LinkTo=Buna bağlantıla
     LinkToProposal=Teklife bağlantıla
     LinkToOrder=Siparişe bağlantıla
     LinkToInvoice=Faturaya bağlantıla
    +LinkToTemplateInvoice=Şablon faturasına bağlantı
     LinkToSupplierOrder=Tedarikçi siparişine bağlantıla
     LinkToSupplierProposal=Tedarikçi teklifine bağlantıla
     LinkToSupplierInvoice=Tedarikçi faturasına bağlantıla
    @@ -758,6 +752,7 @@ LinkToIntervention=Müdahaleye bağlantıla
     CreateDraft=Taslak oluştur
     SetToDraft=Taslağa geri dön
     ClickToEdit=Düzenlemek için tıklayın
    +ClickToRefresh=Click to refresh
     EditWithEditor=CKEditor ile düzenle
     EditWithTextEditor=Metin düzenleyicisiyle düzenle
     EditHTMLSource=HTML Kaynağını Düzenle
    @@ -772,7 +767,7 @@ ByDay=Güne göre
     BySalesRepresentative=Satış temsilcisine göre
     LinkedToSpecificUsers=Belirli bir kullanıcı kişisine bağlantılı
     NoResults=Sonuç yok
    -AdminTools=Yönetici araçları
    +AdminTools=Yönetici Araçları
     SystemTools=Sistem araçları
     ModulesSystemTools=Modül araçları
     Test=Deneme
    @@ -802,7 +797,7 @@ PrintFile=%s Dosyasını Yazdır
     ShowTransaction=Girişi banka hesabında göster
     ShowIntervention=Müdahale göster
     ShowContract=Sözleşmeye bakın
    -GoIntoSetupToChangeLogo=Logoyu değiştirmek için Giriş - Ayarlar - Firma menüsüne ya da gizlemek için Giriş - Ayarlar - Ekran menüsüne git.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Ret
     Denied=Reddedildi
     ListOf=%s listesi
    @@ -818,15 +813,15 @@ Sincerely=Saygılar
     DeleteLine=Satır sil
     ConfirmDeleteLine=Bu satırı silmek istediğinizden emin misiniz?
     NoPDFAvailableForDocGenAmongChecked=Kontrol edilen kayıtlar arasında doküman üretimi için PDF mevcut değildi
    -TooManyRecordForMassAction=Toplu eylem için çok fazla kayıt seçildi. Eylem %s kayıt listesi ile sınırlıdır.
    +TooManyRecordForMassAction=Toplu işlem için çok sayıda kayıt seçilmiş. Bu işlem %s kayıt ile sınırlıdır.
     NoRecordSelected=Seçilen kayıt yok
     MassFilesArea=Toplu işlemler tarafından yapılan dosyalar için alan
     ShowTempMassFilesArea=Toplu işlemler tarafından yapılan dosyalar alanını göster
     ConfirmMassDeletion=Toplu silme onayı
    -ConfirmMassDeletionQuestion=Seçilen %s kaydı silmek istediğinizden emin misiniz?
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=İlgili Nesneler
     ClassifyBilled=Faturalandı olarak sınıflandır
    -ClassifyUnbilled=Classify unbilled
    +ClassifyUnbilled=Faturalandırılmamış olarak sınıflandır
     Progress=İlerleme
     FrontOffice=Ön ofis
     BackOffice=Arka ofis
    @@ -841,9 +836,9 @@ Calendar=Takvim
     GroupBy=Gruplandır...
     ViewFlatList=Düz listeyi incele
     RemoveString='%s' dizisini kaldır
    -SomeTranslationAreUncomplete=Bazı diller kısmen tercüme edilmiş veya hatalar içeriyor olabilir. Eğer böyle bir durum tespit ederseniz <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> adresinden kayıt olarak dil dosyalarını düzeltebilirsiniz.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
    -DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
    +DirectDownloadInternalLink=Direkt indirme linki (giriş yapılmış olmalı ve izin gerekli)
     Download=İndir
     DownloadDocument=Belgeyi indir
     ActualizeCurrency=Para birimini güncelle
    @@ -861,16 +856,25 @@ HR=İK
     HRAndBank=İK ve Banka
     AutomaticallyCalculated=Otomatik olarak hesaplandı
     TitleSetToDraft=Taslağa geri dön
    -ConfirmSetToDraft=Taslak durumuna dönmek istediğinizden emin misiniz?
    +ConfirmSetToDraft=Taslak durumuna geri dönmek istediğinizden emin misiniz?
     ImportId=İçe aktarma ID'si
     Events=Etkinlikler
    -EMailTemplates=Eposta şablonları
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=E-posta şablonları
    +FileNotShared=File not shared to external public
     Project=Proje
     Projects=Projeler
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=Açık projeleri listele
    +NewLeadOrProject=New lead or project
     Rights=İzinler
     LineNb=Satır no.
     IncotermLabel=Uluslararası Ticaret Terimleri
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Pazartesi
     Tuesday=Salı
    @@ -907,7 +911,7 @@ Select2NotFound=Hiç sonuç bulunamadı
     Select2Enter=Gir
     Select2MoreCharacter=ya da daha fazla harf
     Select2MoreCharacters=ya da daha fazla harf
    -Select2MoreCharactersMore=<strong>Search syntax:</strong><br><kbd><strong> |</strong></kbd><kbd> OR</kbd> (a|b)<br><kbd><strong>*</strong></kbd><kbd> Any character</kbd> (a*b)<br><kbd><strong>^</strong></kbd><kbd> Start with</kbd> (^ab)<br><kbd><strong>$</strong></kbd><kbd> End with</kbd> (ab$)<br>
    +Select2MoreCharactersMore=<strong>Arama sözdizimi:</strong><br><kbd><strong> |</strong></kbd><kbd> VEYA</kbd> (a|b)<br><kbd><strong>*</strong></kbd><kbd>Herhangi bir karakter</kbd> (a*b)<br><kbd><strong>^</strong></kbd><kbd>İle başlayın (^ab)</kbd><br><kbd><strong>$</strong></kbd><kbd> İle biten</kbd> (ab$)<br>
     Select2LoadingMoreResults=Daha fazla sonuç yükleniyor...
     Select2SearchInProgress=Arama sürmekte...
     SearchIntoThirdparties=Üçüncü partiler
    @@ -918,16 +922,16 @@ SearchIntoProductsOrServices=Ürünler ya da hizmetler
     SearchIntoProjects=Projeler
     SearchIntoTasks=Görevler
     SearchIntoCustomerInvoices=Müşteri faturaları
    -SearchIntoSupplierInvoices=Vendor invoices
    +SearchIntoSupplierInvoices=Tedarikçi faturaları
     SearchIntoCustomerOrders=Müşteri siparişleri
    -SearchIntoSupplierOrders=Purchase orders
    +SearchIntoSupplierOrders=Satın alma siparişleri
     SearchIntoCustomerProposals=Müşteri teklifleri
    -SearchIntoSupplierProposals=Vendor proposals
    +SearchIntoSupplierProposals=Tedarikçi teklifleri
     SearchIntoInterventions=Müdahaleler
     SearchIntoContracts=Sözleşmeler
     SearchIntoCustomerShipments=Müşteri sevkiyatları
     SearchIntoExpenseReports=Gider raporları
    -SearchIntoLeaves=İzinler
    +SearchIntoLeaves=Leave
     CommentLink=Açıklamalar
     NbComments=Yorum sayısı
     CommentPage=Comments space
    @@ -935,7 +939,7 @@ CommentAdded=Yorum eklendi
     CommentDeleted=Yorum silindi
     Everybody=Herkes
     PayedBy=Ödeyen
    -PayedTo=Ödenen
    +PayedTo=Paid to
     Monthly=Aylık
     Quarterly=Üç aylık
     Annual=Yıllık
    @@ -944,7 +948,8 @@ Remote=Remote
     LocalAndRemote=Local and Remote
     KeyboardShortcut=Klavye kısayolu
     AssignedTo=Görevlendirilen
    -Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    -FileSharedViaALink=File shared via a link
    -
    +Deletedraft=Taslak sil
    +ConfirmMassDraftDeletion=Toplu taslak silme onayı
    +FileSharedViaALink=Dosya bir bağlantı üzerinden paylaşıldı
    +SelectAThirdPartyFirst=Önce bir üçüncü parti seçin...
    +YouAreCurrentlyInSandboxMode=Şu anda %s "sandbox" modundasınız
    diff --git a/htdocs/langs/tr_TR/orders.lang b/htdocs/langs/tr_TR/orders.lang
    index a81da61f28e..222d4128d62 100644
    --- a/htdocs/langs/tr_TR/orders.lang
    +++ b/htdocs/langs/tr_TR/orders.lang
    @@ -1,6 +1,6 @@
     # Dolibarr language file - Source file is en_US - orders
     OrdersArea=Müşteri siparişleri alanı
    -SuppliersOrdersArea=Purchase orders area
    +SuppliersOrdersArea=Satın alma siparişleri alanı
     OrderCard=Sipariş kartı
     OrderId=Sipariş Kimliği
     Order=Sipariş
    @@ -13,18 +13,18 @@ OrderToProcess=İşlenecek sipariş
     NewOrder=Yeni sipariş
     ToOrder=Sipariş yap
     MakeOrder=Sipariş yap
    -SupplierOrder=Purchase order
    -SuppliersOrders=Purchase orders
    -SuppliersOrdersRunning=Current purchase orders
    +SupplierOrder=Satın alma emri
    +SuppliersOrders=Satın alma siparişleri
    +SuppliersOrdersRunning=Mevcut satın alma siparişleri
     CustomerOrder=Müşteri siparişi
     CustomersOrders=Müşteri Siparişleri
     CustomersOrdersRunning=Geçerli müşteri siparişleri
    -CustomersOrdersAndOrdersLines=Müşteri siparişleri ve sipariş kalemleri
    +CustomersOrdersAndOrdersLines=Müşteri siparişleri ve sipariş detayları
     OrdersDeliveredToBill=Faturaya gönderilen müşteri siparişleri
     OrdersToBill=Teslim edilecek müşteri siparişleri
     OrdersInProcess=İşlemde olan müşteri siparişleri
     OrdersToProcess=İşlenecek müşteri siparişleri
    -SuppliersOrdersToProcess=Purchase orders to process
    +SuppliersOrdersToProcess=İşlenecek satın alma siparişleri
     StatusOrderCanceledShort=İptal edilmiş
     StatusOrderDraftShort=Taslak
     StatusOrderValidatedShort=Doğrulanmış
    @@ -75,20 +75,20 @@ ShowOrder=Siparişi göster
     OrdersOpened=İşlenecek siparişler
     NoDraftOrders=Taslak sipariş yok
     NoOrder=Sipariş yok
    -NoSupplierOrder=No purchase order
    +NoSupplierOrder=Satın alma siparişi yok
     LastOrders=Son %s müşteri siparişi
     LastCustomerOrders=Son %s müşteri siparişi
    -LastSupplierOrders=Latest %s purchase orders
    +LastSupplierOrders=En son %s satın alma siparişi
     LastModifiedOrders=Değiştirilen son %s sipariş
     AllOrders=Bütün siparişler
     NbOfOrders=Sipariş sayısı
     OrdersStatistics=Sipariş istatistikleri
    -OrdersStatisticsSuppliers=Purchase order statistics
    +OrdersStatisticsSuppliers=Satın alma siparişi istatistikleri
     NumberOfOrdersByMonth=Aylık sipariş sayısı
     AmountOfOrdersByMonthHT=Aylık sipariş tutarı (vergisiz net)
     ListOfOrders=Sipariş listesi
     CloseOrder=Siparişi kapat
    -ConfirmCloseOrder=Bu siparişi "teslim edildi" şeklinde ayarlamak istediğinizden emin misiniz? Bir sipariş teslim edildikten sonra "faturalandı" olarak ayarlanabilir.
    +ConfirmCloseOrder=Bu siparişi teslim edildi olarak ayarlamak istediğinizden emin misiniz? Bir sipariş teslim edildiğinde, faturalandırıldı olarak ayarlanabilir.
     ConfirmDeleteOrder=Bu siparişi silmek istediğinizden emin misiniz?
     ConfirmValidateOrder=Bu siparişi <b>%s</b> adı altında onaylamak istediğinizden emin misiniz?
     ConfirmUnvalidateOrder=<b>%s</b> siparişini taslak durumuna geri yüklemek istediğinizden emin misiniz?
    @@ -97,11 +97,11 @@ ConfirmMakeOrder=Are you sure you want to confirm you made this order on <b>%s</
     GenerateBill=Fatura oluştur
     ClassifyShipped=Teslim edildi sınıflandır
     DraftOrders=Taslak siparişler
    -DraftSuppliersOrders=Draft purchase orders
    +DraftSuppliersOrders=Taslak satın alma siparişleri
     OnProcessOrders=İşlemdeki siparişler
     RefOrder=Sipariş ref.
     RefCustomerOrder=Müşterinin sipariş ref.
    -RefOrderSupplier=Ref. order for vendor
    +RefOrderSupplier=Satıcı için referans siparişi
     RefOrderSupplierShort=Ref. order vendor
     SendOrderByMail=Siparişi postayla gönder
     ActionsOnOrder=Sipariş etkinlikleri
    @@ -116,7 +116,7 @@ DispatchSupplierOrder=%s tedarikçi siparişini al
     FirstApprovalAlreadyDone=İlk onay zaten yapılmış
     SecondApprovalAlreadyDone=İkinci onaylama zaten yapılmış
     SupplierOrderReceivedInDolibarr=Purchase Order %s received %s
    -SupplierOrderSubmitedInDolibarr=Purchase Order %s submited
    +SupplierOrderSubmitedInDolibarr=Purchase Order %s submitted
     SupplierOrderClassifiedBilled=Purchase Order %s set billed
     OtherOrders=Diğer siparişler
     ##### Types de contacts #####
    @@ -127,7 +127,7 @@ TypeContact_commande_external_SHIPPING=Müşteri nakliye yetkilisi
     TypeContact_commande_external_CUSTOMER=Müşteri sipariş izleme yetkilisi
     TypeContact_order_supplier_internal_SALESREPFOLL=Representative following-up purchase order
     TypeContact_order_supplier_internal_SHIPPING=Sevkiyat izleme temsilcisi
    -TypeContact_order_supplier_external_BILLING=Vendor invoice contact
    +TypeContact_order_supplier_external_BILLING=Tedarikçi faturası kişisi
     TypeContact_order_supplier_external_SHIPPING=Vendor shipping contact
     TypeContact_order_supplier_external_CUSTOMER=Vendor contact following-up order
     Error_COMMANDE_SUPPLIER_ADDON_NotDefined=COMMANDE_SUPPLIER_ADDON değişmezi tanımlanmamış
    @@ -141,6 +141,7 @@ OrderByWWW=Çevrimiçi
     OrderByPhone=Telefon
     # Documents models
     PDFEinsteinDescription=Bir tam sipariş modeli (logo. ..)
    +PDFEratostheneDescription=Bir tam sipariş modeli (logo. ..)
     PDFEdisonDescription=Basit bir sipariş modeli
     PDFProformaDescription=Eksiksiz bir proforma fatura (logo...)
     CreateInvoiceForThisCustomer=Sipariş Faturala
    diff --git a/htdocs/langs/tr_TR/other.lang b/htdocs/langs/tr_TR/other.lang
    index 23fc9f59bf6..9f1e632d0e4 100644
    --- a/htdocs/langs/tr_TR/other.lang
    +++ b/htdocs/langs/tr_TR/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Güvenlik kodu
     NumberingShort=N°
     Tools=Araçlar
     TMenuTools=Araçlar
    -ToolsDesc=Diğer menü girişlerine dahil olmayan çeşitli tüm araçlar burada toplanmıştır. <br><br>Tüm araçlara sol menüde ulaşılabilir.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Doğumgünü
     BirthdayDate=Doğumgünü tarihi
     DateToBirth=Doğum Tarihi
    @@ -23,7 +23,7 @@ MessageForm=Online ödeme formundaki mesaj
     MessageOK=Doğrulama sayfası mesajı
     MessageKO=İptal edilen ödeme sayfası mesajı
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Fatura tarihi yılı
     PreviousYearOfInvoice=Fatura tarihinden önceki yıl
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Fatura tarihinden sonraki yıl
     DateNextInvoiceBeforeGen=Bir sonraki faturanın tarihi (oluşturulmadan önce)
     DateNextInvoiceAfterGen=Bir sonraki faturanın tarihi (oluşturulduktan sonra)
     
    -Notify_FICHINTER_ADD_CONTACT=Müdahaleye kişi eklendi
    -Notify_FICHINTER_VALIDATE=Müdahale doğrulandı
    -Notify_FICHINTER_SENTBYMAIL=Müdahale posta ile gönderildi
     Notify_ORDER_VALIDATE=Müşteri siparişi onaylandı
     Notify_ORDER_SENTBYMAIL=Müşteri siparişi posta ile gönderildi
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Tedarikçi siparişi posta ile gönderildi
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Tedarikçi siparişi kaydedildi.
     Notify_ORDER_SUPPLIER_APPROVE=Tedarikçi siparişi onaylandı
     Notify_ORDER_SUPPLIER_REFUSE=Tedarikçi siparişi reddedildi
     Notify_PROPAL_VALIDATE=Müşteri teklifi onaylandı
    -Notify_PROPAL_CLOSE_SIGNED=Müşteri teklifi kapalı imzalı
    -Notify_PROPAL_CLOSE_REFUSED=Müşteri teklifi kapalı reddedildi
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Teklif posta ile gönderildi
     Notify_WITHDRAW_TRANSMIT=Havale çekme
     Notify_WITHDRAW_CREDIT=Kredi çekme
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Üçüncü parti oluşturuldu
     Notify_COMPANY_SENTBYMAIL=Eposta üçüncü parti kartından gönderildi
     Notify_BILL_VALIDATE=Müşteri faturası onaylandı
     Notify_BILL_UNVALIDATE=Müşteri faturasından doğrulama kaldırıldı
    -Notify_BILL_PAYED=Müşteri faturası ödendi
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Müşteri faturası iptal edildi
     Notify_BILL_SENTBYMAIL=Müşteri faturası postayla gönderildi
     Notify_BILL_SUPPLIER_VALIDATE=Tedarikçi faturası onaylandı
    -Notify_BILL_SUPPLIER_PAYED=Tedarikçi faturası ödendi
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Tedarikçi faturası posta ile gönderildi
     Notify_BILL_SUPPLIER_CANCELED=Tefarikçi faturası iptal edildi
     Notify_CONTRACT_VALIDATE=Sözleşme onaylandı
     Notify_FICHEINTER_VALIDATE=Müdahele onaylandı
    +Notify_FICHINTER_ADD_CONTACT=Müdahaleye kişi eklendi
    +Notify_FICHINTER_SENTBYMAIL=Müdahale posta ile gönderildi
     Notify_SHIPPING_VALIDATE=Sevkiyat onaylandı
     Notify_SHIPPING_SENTBYMAIL=Sevkiyat posta ile gönderildi
     Notify_MEMBER_VALIDATE=Üye onaylandı
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Proje oluşturma
     Notify_TASK_CREATE=Görev oluşturuldu
     Notify_TASK_MODIFY=Görev bilgileri değiştirildi
     Notify_TASK_DELETE=Görev silindi
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=%s modülü ayarlarına bak
     NbOfAttachedFiles=Eklenen dosya/belge sayısı
     TotalSizeOfAttachedFiles=Eklenen dosyaların/belgelerin toplam boyutu
     MaxSize=Ençok boyut
     AttachANewFile=Yeni bir dosya/belge ekle
     LinkedObject=Bağlantılı nesne
    -NbOfActiveNotifications=Bildirim sayısı (alıcı epostaları sayısı)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nBu, __EMAIL__ adresine gönderilen bir test mailidir.\nİki satır bir satırbaşı ile birbirinden ayrılır.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nBu bir <b>test</b> mailidir (test kelimesi kalın olmalıdır). <br> İki satır bir satırbaşı ile birbirinden ayrılır. <br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nBurada fiyat talebini bulacaksınız __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nBurada siparişi bulacaksınız __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nBurada siparişimizi bulacaksınız __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nBurada faturayı bulacaksınız __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nBurada sevkiyatı bulacaksınız __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nBurada müdahaleyi bulacaksınız __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Bu seçeneği kullanmak için PHP nizdeki GD kütüphanesini
     ProfIdShortDesc=<b>Uzman no %s</b> üçüncü parti ülkesine bağlı bir bilgidir.<br>Örneğin, <b>%s</b> ülkesi için kodu<b>%s</b>dir.
     DolibarrDemo=Dolibarr ERP/CRM demosu
     StatsByNumberOfUnits=Ürün/hizmet miktarının toplamı için istatistikler
    -StatsByNumberOfEntities=Yönlendiren varlıkların sayı istatistikleri (Fatura veya sipariş sayısı ...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Teklif sayısı
     NumberOfCustomerOrders=Müşteri siparişlerinin sayısı
     NumberOfCustomerInvoices=Müşteri faturalarının sayısı
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Müşteri faturalarındaki birim sayısı
     NumberOfUnitsSupplierProposals=Tedarikçi tekliflerinde yer alan birim sayısı
     NumberOfUnitsSupplierOrders=Tedarikçi siparişlerindeki birim sayısı
     NumberOfUnitsSupplierInvoices=Tedarikçi faturalarındaki birim sayısı
    -EMailTextInterventionAddedContact=Bir yeni müdahale olan %s size atandı
    +EMailTextInterventionAddedContact=Yeni bir müdahale %s size atandı.
     EMailTextInterventionValidated=Müdahele %s doğrulanmıştır.
     EMailTextInvoiceValidated=Fatura %s doğrulanmıştır.
    +EMailTextInvoicePayed=Fatura %s ödendi.
     EMailTextProposalValidated=Teklif % doğrulanmıştır.
     EMailTextProposalClosedSigned=Teklif %s kapalı imzalandı.
     EMailTextOrderValidated=Sipariş %s doğrulanmıştır.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=%s Siparişi %s tarafından onaylanmıştır.
     EMailTextOrderRefused=%s Teklifi reddedilmiştir.
     EMailTextOrderRefusedBy=%s Teklifi %tarafından reddedilmiştir.
     EMailTextExpeditionValidated=%s sevkiyatı onaylandı.
    +EMailTextExpenseReportValidated=Gider raporu %s doğrulandı.
    +EMailTextExpenseReportApproved=Gider raporu %s onaylandı.
    +EMailTextHolidayValidated=İzin talebi %s doğrulandı.
    +EMailTextHolidayApproved=İzin talebi %s onaylandı.
     ImportedWithSet=Ver setinin içeaktarımı
     DolibarrNotification=Otomatik bilgilendirme
     ResizeDesc=Yeni genişliği <b>VEYA</b> yeni yüksekliği gir. Yeniden boyutlandırma sırasında oran kotunacaktır...
    @@ -204,7 +212,7 @@ NewLength=Yeni genişlik
     NewHeight=Yeni yükseklik
     NewSizeAfterCropping=Kırpmadan sonraki yeni boyut
     DefineNewAreaToPick=Alınacak görüntü üzerinde yeni alan tanımla (görüntü üzerine sol klikle sonra karşı köşeye ulaşana kadar sürükle)
    -CurrentInformationOnImage=Bu araç bir görüntüyü yeniden boyutlandırmanızı veya kırpmanızı sağlar. Bu, düzenlenmiş güncel görüntünün bilgisidir
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Görüntü düzenleyici
     YouReceiveMailBecauseOfNotification=Bu mesajı aldınız çünkü epostanız %s e ait %s yazılımında belirli etkinlikler hakkında bilgilendirilecekler listesine eklenmiştir.
     YouReceiveMailBecauseOfNotification2=Bu etkinlik şudur:
    @@ -219,7 +227,7 @@ FileIsTooBig=Dosyalar çok büyük
     PleaseBePatient=Lütfen sabırlı olun...
     NewPassword=Yeni şifre
     ResetPassword=Şifreyi sıfırla
    -RequestToResetPasswordReceived=A request to change your password has been received.
    +RequestToResetPasswordReceived=Şifreni değiştirmek için bir talep alındı.
     NewKeyIs=Oturum açmak için yeni anahtarınız
     NewKeyWillBe=Yazılımda oturum açmak için yeni anahtarınız bu olacaktır
     ClickHereToGoTo=%s e gitmek için buraya tıkla
    @@ -234,7 +242,11 @@ PermissionsDelete=İzinler kaldırıldı
     YourPasswordMustHaveAtLeastXChars=Şifreniz en az <strong>%s</strong> karakter içermelidir
     YourPasswordHasBeenReset=Şifreniz başarılı bir şekilde sıfırlandı
     ApplicantIpAddress=Başvuru sahibinin IP adresi
    -SMSSentTo=SMS sent to %s
    +SMSSentTo=SMS şuna gönderildi: %s
    +MissingIds=Eksik ID'ler
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Dışaaktar alanı
    diff --git a/htdocs/langs/tr_TR/projects.lang b/htdocs/langs/tr_TR/projects.lang
    index 04ec0ebc21b..7391f601bb3 100644
    --- a/htdocs/langs/tr_TR/projects.lang
    +++ b/htdocs/langs/tr_TR/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Açık projeler
     OpenedTasks=Açık görevler
    -OpportunitiesStatusForOpenedProjects=Projelerin durumuna göre fırsat tutarı
    -OpportunitiesStatusForProjects=Projelerin durumuna göre fırsat tutarı
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Proje göster
     ShowTask=Görev göster
     SetProject=Proje ayarla
     NoProject=Tanımlı ya da sahip olunan hiçbir proje yok
    -NbOfProjects=Proje sayısı
    -NbOfTasks=Görev sayısı
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Harcanan süre
     TimeSpentByYou=Tarafınızdan harcanan süre
     TimeSpentByUser=Kullanıcı tarafından harcanan süre
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Tüketilen süre listesine git
     GoToListOfTasks=Görevler listesine git
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Proje ile ilgili tekliflerin listesi
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Proje ile ilgili sözleşmelerin listesi
    -ListShippingAssociatedProject=Projeyle ilişkili nakliyelerin listesi
    -ListFichinterAssociatedProject=Proje ile ilgili müdahalelerin listesi
    -ListExpenseReportsAssociatedProject=Bu proje ile ilişkili gider raporları listesi
    -ListDonationsAssociatedProject=Bu proje ile ilişkilendirilmiş bağış listesi
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Proje ile ilgili etkinliklerin listesi
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=Projelere harcanan sürelerin listesi
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Projedeki bugünkü etkinlik
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=%s görev oluşturuldu
     TaskModifiedInDolibarr=%s görev değiştirildi
     TaskDeletedInDolibarr=%s görev silindi
    -OpportunityStatus=Fırsat durumu
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Fırs. durumu
    -OpportunityProbability=Fırsat olabilirliği
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Fırs. olabil.
    -OpportunityAmount=Fırsat tutarı
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Fırs. tutarı
     OpportunityAmountAverageShort=Ortalama Fırsat tutarı
     OpportunityAmountWeigthedShort=Ağırlıklı Fırsat tutarı
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Katılımcı
     SelectElement=Öğe seç
     AddElement=Öğeye bağlan
     # Documents models
    -DocumentModelBeluga=Bağlantılı nesnelere gözatmak için proje şablonu
    -DocumentModelBaleine=Görevler proje raporu şablonu
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planlı işyükü
     PlannedWorkloadShort=İşyükü
     ProjectReferers=İlgili öğeler
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=İlgili olarak bu kullanıcı olan projeler
     TasksWithThisUserAsContact=Bu kullanıcıya atanmış görevler
     ResourceNotAssignedToProject=Projeye atanmamış
     ResourceNotAssignedToTheTask=Bu göreve atanmamış
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Görevi bana ata
    @@ -189,25 +192,26 @@ AssignTaskToUser=Görevi %s kullanıcısına ata
     SelectTaskToAssign=Atanacak görevi seçin...
     AssignTask=Ata
     ProjectOverview=Genel bakış
    -ManageTasks=Görev ve süre izlemek için projeleri kullan
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Adayları/fırsatları izlemek için projeleri kullan
    -ProjectNbProjectByMonth=Aylık oluşturulan proje sayısı
    -ProjectNbTaskByMonth=Aylık oluşturulan görevlerin sayısı
    -ProjectOppAmountOfProjectsByMonth=Aylık fırsat tutarı
    -ProjectWeightedOppAmountOfProjectsByMonth=Aylık fırsat ağırlıklı tutarı
    -ProjectOpenedProjectByOppStatus=Fırsat durumuna göre açık proje/aday
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Projeler/adaylar için istatistikler
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Atanan görevler. Bu göreve süre girmek mümkün olmalı.
     IdTaskTime=Görev zamanı kimliği
     YouCanCompleteRef=Eğer referansı bazı bilgilerle tamamlamak isterseniz (arama süzgeçleri olarak kullanmak üzere), ayırmak için bir - karakteri eklemeniz önerilir, böylece otomatik numaralandırma sonraki projeler için de çalışacaktır. Örneğin; %s-ABC. Etikete arama anahtarları da eklemeyi yeğleyebilirsiniz. Ama en iyisi özel bir alan olarak da adlandırılan tamamlayıcı özellikler eklemek olabilir.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Yalnızca fırsatlar
    -OpenedOpportunitiesShort=Açık fırsatlar
    -NotAnOpportunityShort=Bir fırsat değil
    -OpportunityTotalAmount=Fırsatlar toplam tutarı
    -OpportunityPonderatedAmount=Fırsatların ağırlık tutarı
    -OpportunityPonderatedAmountDesc=Olasılıkla ölçülen fırsat tutarı
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Araştırma
     OppStatusQUAL=Nitelendirme
     OppStatusPROPO=Teklif
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/tr_TR/sendings.lang b/htdocs/langs/tr_TR/sendings.lang
    index 321e4d61a7d..19adab408d7 100644
    --- a/htdocs/langs/tr_TR/sendings.lang
    +++ b/htdocs/langs/tr_TR/sendings.lang
    @@ -53,10 +53,10 @@ LinkToTrackYourPackage=Paketinizi izleyeceğiniz bağlantı
     ShipmentCreationIsDoneFromOrder=Şu an için, yeni bir sevkiyatın oluşturulması sipariş kartından yapılmıştır.
     ShipmentLine=Sevkiyat kalemi
     ProductQtyInCustomersOrdersRunning=Product quantity into open customer orders
    -ProductQtyInSuppliersOrdersRunning=Product quantity into open purchase orders
    +ProductQtyInSuppliersOrdersRunning=Açık satın alma siparişlerindeki ürün miktarı
     ProductQtyInShipmentAlreadySent=Product quantity from open customer order already sent
     ProductQtyInSuppliersShipmentAlreadyRecevied=Product quantity from open supplier order already received
    -NoProductToShipFoundIntoStock=Bu <b>%s</b> deposunda sevk edilecek hiç mal bulunamadı. Stoğu düzeltin ya da bir başka depo seçmek için geri gidin.
    +NoProductToShipFoundIntoStock=No product to ship found in warehouse <b>%s</b>. Correct stock or go back to choose another warehouse.
     WeightVolShort=Ağırlık/Hac.
     ValidateOrderFirstBeforeShipment=Sevkiyatları yapabilmek için önce siparişi doğrulamlısınız.
     
    diff --git a/htdocs/langs/tr_TR/supplier_proposal.lang b/htdocs/langs/tr_TR/supplier_proposal.lang
    index 4ea0b55d442..77f20d0e291 100644
    --- a/htdocs/langs/tr_TR/supplier_proposal.lang
    +++ b/htdocs/langs/tr_TR/supplier_proposal.lang
    @@ -1,22 +1,22 @@
     # Dolibarr language file - Source file is en_US - supplier_proposal
    -SupplierProposal=Vendor commercial proposals
    -supplier_proposalDESC=Manage price requests to vendors
    +SupplierProposal=Tedarikçi teklifleri
    +supplier_proposalDESC=Tedarikçilere yapılan fiyat isteklerini yönet
     SupplierProposalNew=Yeni fiyat isteği
     CommRequest=Fiyat isteği
     CommRequests=Fiyat istekleri
     SearchRequest=İstek ara
     DraftRequests=Taslak istekler
    -SupplierProposalsDraft=Draft vendor proposals
    +SupplierProposalsDraft=Taslak tedarikçi teklifleri
     LastModifiedRequests=Değiştirilen son %s fiyat isteği
     RequestsOpened=Fiyat isteği aç
    -SupplierProposalArea=Vendor proposals area
    -SupplierProposalShort=Vendor proposal
    -SupplierProposals=Vendor proposals
    -SupplierProposalsShort=Vendor proposals
    +SupplierProposalArea=Tedarikçi teklifleri alanı
    +SupplierProposalShort=Tedarikçi teklifi
    +SupplierProposals=Tedarikçi teklifleri
    +SupplierProposalsShort=Tedarikçi teklifleri
     NewAskPrice=Yeni fiyat isteği
     ShowSupplierProposal=Fiyat isteği göster
     AddSupplierProposal=Fiyat isteği oluştur
    -SupplierProposalRefFourn=Vendor ref
    +SupplierProposalRefFourn=Tedarikçi referans
     SupplierProposalDate=Teslim tarihi
     SupplierProposalRefFournNotice="Kabul edildi" olarak kapatmadan önce tedarikçi referansını tutmayı düşün.
     ConfirmValidateAsk=Bu fiyat talebini <b>%s</b> adı altında onaylamak istediğinizden emin misiniz?
    @@ -47,9 +47,9 @@ CommercialAsk=Fiyat isteği
     DefaultModelSupplierProposalCreate=Varsayılan model oluşturma
     DefaultModelSupplierProposalToBill=Bir fiyat isteğini kapatma sırasında (kabul edilmiş) varsayılan şablon
     DefaultModelSupplierProposalClosed=Bir fiyat isteğini kapatma sırasında (reddedilmiş) varsayılan şablon 
    -ListOfSupplierProposals=List of vendor proposal requests
    -ListSupplierProposalsAssociatedProject=List of vendor proposals associated with project
    -SupplierProposalsToClose=Vendor proposals to close
    -SupplierProposalsToProcess=Vendor proposals to process
    +ListOfSupplierProposals=Tedarikçi teklif isteklerinin listesi
    +ListSupplierProposalsAssociatedProject=Proje ile ilgili tedarikçi tekliflerinin listesi
    +SupplierProposalsToClose=Kapatılacak tedarikçi teklifleri
    +SupplierProposalsToProcess=İşlenecek tedarikçi teklifleri
     LastSupplierProposals=Son %s fiyat talepleri
     AllPriceRequests=Tüm istekler
    diff --git a/htdocs/langs/tr_TR/suppliers.lang b/htdocs/langs/tr_TR/suppliers.lang
    index 9ee2099f4b2..ae21bc1791c 100644
    --- a/htdocs/langs/tr_TR/suppliers.lang
    +++ b/htdocs/langs/tr_TR/suppliers.lang
    @@ -1,11 +1,11 @@
     # Dolibarr language file - Source file is en_US - suppliers
    -Suppliers=Vendors
    -SuppliersInvoice=Vendor invoice
    -ShowSupplierInvoice=Show Vendor Invoice
    -NewSupplier=New vendor
    +Suppliers=Tedarikçiler
    +SuppliersInvoice=Tedarikçi faturası
    +ShowSupplierInvoice=Tedarikçi Faturası Göster
    +NewSupplier=Yeni tedarikçi
     History=Geçmiş
    -ListOfSuppliers=List of vendors
    -ShowSupplier=Show vendor
    +ListOfSuppliers=Tedarikçi listesi
    +ShowSupplier=Tedarikçiyi göster
     OrderDate=Sipariş tarihi
     BuyingPriceMin=En iyi alış fiyatı
     BuyingPriceMinShort=En iyi alış fiyatı
    @@ -14,34 +14,34 @@ TotalSellingPriceMinShort=Yan ürün satış fiyatları toplamı
     SomeSubProductHaveNoPrices=Bazı altürünlerin fiyatı yok
     AddSupplierPrice=Alış fiyatı ekle
     ChangeSupplierPrice=Alış fiyatı değiştir
    -SupplierPrices=Vendor prices
    +SupplierPrices=Tedarikçi fiyatları
     ReferenceSupplierIsAlreadyAssociatedWithAProduct=Bu referanslı tedarikçi zaten bu referans ile ilişkili: %s
    -NoRecordedSuppliers=No vendor recorded
    -SupplierPayment=Vendor payment
    -SuppliersArea=Vendor area
    -RefSupplierShort=Ref. vendor
    +NoRecordedSuppliers=Hiçbir tedarikçi kaydı yok
    +SupplierPayment=Tedarikçi ödemesi
    +SuppliersArea=Tedarikçi alanı
    +RefSupplierShort=Referans tedarikçi
     Availability=Uygunluğu
    -ExportDataset_fournisseur_1=Vendor invoices list and invoice lines
    -ExportDataset_fournisseur_2=Vendor invoices and payments
    -ExportDataset_fournisseur_3=Purchase orders and order lines
    +ExportDataset_fournisseur_1=Tedarikçi faturaları ve fatura detayları
    +ExportDataset_fournisseur_2=Tedarikçi faturaları ve ödemeleri
    +ExportDataset_fournisseur_3=Satın alma siparişleri ve sipariş detayları
     ApproveThisOrder=Bu siparişi onayla
     ConfirmApproveThisOrder=Siparişi uygun bulmak istediğinizden emin misiniz <b>%s</b>?
     DenyingThisOrder=Bu siparişi reddet
     ConfirmDenyingThisOrder=Bu siparişi reddetmek istediğinizden emin misiniz <b>%s</b>?
     ConfirmCancelThisOrder=Bu siparişi iptal etmek istediğinizden emin misiniz <b>%s</b>?
     AddSupplierOrder=Create Purchase Order
    -AddSupplierInvoice=Create vendor invoice
    -ListOfSupplierProductForSupplier=List of products and prices for vendor <b>%s</b>
    -SentToSuppliers=Sent to vendors
    -ListOfSupplierOrders=List of purchase orders
    -MenuOrdersSupplierToBill=Purchase orders to invoice
    +AddSupplierInvoice=Tedarikçi faturası oluştur
    +ListOfSupplierProductForSupplier=<b>%s</b> tedarikçisi için ürün ve fiyat listesi
    +SentToSuppliers=Tedarikçilere gönderilen
    +ListOfSupplierOrders=Satın alma siparişlerinin listesi
    +MenuOrdersSupplierToBill=Faturalanacak satın alma siparişleri
     NbDaysToDelivery=Gün olarak teslim süresi
     DescNbDaysToDelivery=Bu siparişteki en büyük teslimat gecikmesi olan ürünler
    -SupplierReputation=Vendor reputation
    +SupplierReputation=Tedarikçi itibarı
     DoNotOrderThisProductToThisSupplier=Sipariş verme
     NotTheGoodQualitySupplier=Hatalı kalite
     ReputationForThisProduct=İtibar
     BuyerName=Alıcı adı
     AllProductServicePrices=Tüm ürün/hizmet fiyatları
     AllProductReferencesOfSupplier=Tüm tedarikçi ürün/hizmet referansları
    -BuyingPriceNumShort=Vendor prices
    +BuyingPriceNumShort=Tedarikçi fiyatları
    diff --git a/htdocs/langs/uk_UA/admin.lang b/htdocs/langs/uk_UA/admin.lang
    index 919f3160b0a..3bf3ffe3a0f 100644
    --- a/htdocs/langs/uk_UA/admin.lang
    +++ b/htdocs/langs/uk_UA/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Розробча
     VersionUnknown=Невизначена
     VersionRecommanded=Рекомендована
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Ваш сеанс
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Пропозиції
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Умови платежу
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Кредитове авізо
     CreditNotes=Кредитове авізо
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/uk_UA/companies.lang b/htdocs/langs/uk_UA/companies.lang
    index fc7592571e3..0c4e45e969c 100644
    --- a/htdocs/langs/uk_UA/companies.lang
    +++ b/htdocs/langs/uk_UA/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Company
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Пропозиції
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Чек
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Зачинено
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/uk_UA/errors.lang b/htdocs/langs/uk_UA/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/uk_UA/errors.lang
    +++ b/htdocs/langs/uk_UA/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/uk_UA/interventions.lang b/htdocs/langs/uk_UA/interventions.lang
    index 02430a826d3..53e3ed2f550 100644
    --- a/htdocs/langs/uk_UA/interventions.lang
    +++ b/htdocs/langs/uk_UA/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/uk_UA/main.lang b/htdocs/langs/uk_UA/main.lang
    index b927b6f9165..e602c612434 100644
    --- a/htdocs/langs/uk_UA/main.lang
    +++ b/htdocs/langs/uk_UA/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=Файл не завантажений. Переконайтеся, що розмір не перевищує максимально допустимий, що достатньо вільного місця на диску і що не існує вже файл з таким же ім'ям в цій директорії.
     ErrorInternalErrorDetected=Виявлено помилку
     ErrorWrongHostParameter=Неправильний параметр хосту
    -ErrorYourCountryIsNotDefined=Ваша країна не визначена. Перейти до Головна-Налаштування-Редагувати і знову відправте форму.\n
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Головна
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Зачинено
     Closed2=Зачинено
     NotClosed=Not closed
     Enabled=Дозволено
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Інший
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Інша інформація
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Кредитна картка
     ValidatePayment=Підтвердити платіж
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Тест
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Тест
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Календар
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Події
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Призначено
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/uk_UA/other.lang b/htdocs/langs/uk_UA/other.lang
    index 8ef8cc30090..e8cd9b78d2f 100644
    --- a/htdocs/langs/uk_UA/other.lang
    +++ b/htdocs/langs/uk_UA/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/uk_UA/projects.lang b/htdocs/langs/uk_UA/projects.lang
    index feeb06a5af4..8f48af60f74 100644
    --- a/htdocs/langs/uk_UA/projects.lang
    +++ b/htdocs/langs/uk_UA/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/uz_UZ/admin.lang b/htdocs/langs/uz_UZ/admin.lang
    index d7042e784dc..08508d4e6e8 100644
    --- a/htdocs/langs/uz_UZ/admin.lang
    +++ b/htdocs/langs/uz_UZ/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Development
     VersionUnknown=Unknown
     VersionRecommanded=Recommended
     FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Handler to save sessions
     SessionSavePath=Storage session localization
     PurgeSessions=Purge of sessions
     ConfirmPurgeSessions=Do you really want to purge all sessions? This will disconnect every user (except yourself).
    -NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow to list all running sessions.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Lock new connections
    -ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself. Only user <b>%s</b> will be able to connect after that.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Remove connection lock
     YourSession=Your session
    -Sessions=Users session
    +Sessions=Users sessions
     WebUserGroup=Web server user/group
    -NoSessionFound=Your PHP seems to not allow to list active sessions. Directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Database charset to store data
     DBSortingCharset=Database charset to sort data
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=External user
     InternalUsers=Internal users
     ExternalUsers=External users
     GUISetup=Display
    -SetupArea=Setup area
    +SetupArea=Setup
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Form to test file upload (according to setup)
     IfModuleEnabled=Note: yes is effective only if module <b>%s</b> is enabled
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Code can't contain value 0
     DisableJavascript=Disable JavaScript and Ajax functions (Recommended for blind person or text browsers)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr of characters to trigger search: %s
     NotAvailableWhenAjaxDisabled=Not available when Ajax disabled
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Preview not available
     ThemeCurrentlyActive=Theme currently active
     CurrentTimeZone=TimeZone PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Space
     Table=Table
     Fields=Fields
    @@ -111,14 +111,14 @@ NotConfigured=Module/Application not configured
     Active=Active
     SetupShort=Setup
     OtherOptions=Other options
    -OtherSetup=Other setup
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Decimal separator
     CurrentValueSeparatorThousand=Thousand separator
     Destination=Destination
     IdModule=Module ID
     IdPermissions=Permissions ID
     LanguageBrowserParameter=Parameter %s
    -LocalisationDolibarrParameters=Localisation parameters
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Client Time Zone (user)
     ClientHour=Client time (user)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Current session timeout
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=Widget
     Boxes=Widgets
     MaxNbOfLinesForBoxes=Max number of lines for widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Ignore errors of duplicate record (INSERT IGNORE)
     AutoDetectLang=Autodetect (browser language)
     FeatureDisabledInDemo=Feature disabled in demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the dustbin to disable it.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Only elements from <a href="%s">enabled modules</a> are shown.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=You can find more modules to download on external websites on the Internet...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Find external app/modules
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=New
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Reference websites to find more modules...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Link
     BoxesAvailable=Widgets available
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Do no store clear passwords in database but store only e
     MainDbPasswordFileConfEncrypted=Database password encrypted in conf.php (Activated recommended)
     InstrucToEncodePass=To have password encoded into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="...";</b><br>by<br><b>$dolibarr_main_db_pass="crypted:%s";</b>
     InstrucToClearPass=To have password decoded (clear) into the <b>conf.php</b> file, replace the line <br><b>$dolibarr_main_db_pass="crypted:...";</b><br>by<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Protection of a PDF document keeps it available to read and print with any PDF browser. However, editing and copying is not possible anymore. Note that using this feature makes building of a global merged PDFs not working.
     Feature=Feature
     DolibarrLicense=License
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Current menu handler
     MeasuringUnit=Measuring unit
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Notice period
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=Emails setup
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Send systematically a hidden carbon-copy of all sent emails to
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Method to use to send EMails
    -MAIN_MAIL_SMTPS_ID=SMTP ID if authentication required
    -MAIN_MAIL_SMTPS_PW=SMTP Password if authentication required
    -MAIN_MAIL_EMAIL_TLS= Use TLS (SSL) encrypt
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Disable all SMS sendings (for test purposes or demos)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Method to use to send SMS
    -MAIN_MAIL_SMS_FROM=Default sender phone number for Sms sending
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Feature not available on Unix like systems. Test your sendmail program locally.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Module setup
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Do not use in production
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Step %s
    -FindPackageFromWebSite=Find a package that provides feature you want (for example on official web site %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr current version
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Minimum length
     LanguageFilesCachedIntoShmopSharedMemory=Files .lang loaded in shared memory
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Examples with current running setup
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Input test form
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Skins directory
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Test message from __PHONEFROM__ to __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=You can set each global options related to the PDF generation
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Rules to forge address boxes
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Hide products description on generated PDF
     HideRefOnPDF=Hide products ref. on generated PDF
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Parameters to secure URLs
     SecurityTokenIsUnique=Use a unique securekey parameter for each URL
     EnterRefToBuildUrl=Enter reference for object %s
     GetSecuredUrl=Get calculated URL
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Old VAT rate
     NewVATRates=New VAT rate
     PriceBaseTypeToChange=Modify on prices with base reference value defined on
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Select list
     ExtrafieldSelectList = Select from table
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Password
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Checkboxes from table
     ExtrafieldLink=Link to an object
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Default link
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Warning, this value may be overwritten by user specific setup (each user can set his own clicktodial url)
     ExternalModule=External module - Installed into directory %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Erase all current barcode values
     ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
     AllBarcodeReset=All barcode values have been removed
    -NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled into barcode module setup.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Field
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Users & groups
    +Module0Name=Users & Groups
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Third parties
    +Module1Name=Third Parties
     Module1Desc=Companies and contact management (customers, prospects...)
     Module2Name=Commercial
     Module2Desc=Commercial management
     Module10Name=Accounting
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Proposals
     Module20Desc=Commercial proposal management
     Module22Name=Mass E-mailings
    @@ -511,13 +517,13 @@ Module52Desc=Stock management (products)
     Module53Name=Services
     Module53Desc=Service management
     Module54Name=Contracts/Subscriptions
    -Module54Desc=Management of contracts (services or reccuring subscriptions)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Barcodes
     Module55Desc=Barcode management
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Expense and trip notes
     Module75Desc=Expense and trip notes management
     Module80Name=Shipments
     Module80Desc=Shipments and delivery order management
    -Module85Name=Banks and cash
    +Module85Name=Banks and Cash
     Module85Desc=Management of bank or cash accounts
    -Module100Name=External site
    -Module100Desc=This module include an external web site or page into Dolibarr menus and view it into a Dolibarr frame
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=LDAP directory synchronisation
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke integration
     Module240Name=Data exports
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Data imports
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Members
     Module310Desc=Foundation members management
     Module320Name=RSS Feed
     Module320Desc=Add RSS feed inside Dolibarr screen pages
    -Module330Name=Bookmarks
    -Module330Desc=Bookmarks management
    -Module400Name=Projects/Opportunities/Leads
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Webcalendar
     Module410Desc=Webcalendar integration
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module510Desc=Record and track employee payments
     Module520Name=Loan
     Module520Desc=Management of loans
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Donations
     Module700Desc=Donation management
     Module770Name=Expense reports
    -Module770Desc=Management and claim expense reports (transportation, meal, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Mass mail document generation
     Module1780Name=Tags/Categories
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Dynamic Prices
     Module2200Desc=Enable the usage of math expressions for prices
     Module2300Name=Scheduled jobs
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Multi-company
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Leave Requests management
    -Module20000Desc=Declare and follow employees leaves requests
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lot or serial number, eat-by and sell-by date management on products
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Point of sales
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Point of sales
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Accounting (advanced)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Margins
     Module59000Desc=Module to manage margins
     Module60000Name=Commissions
     Module60000Desc=Module to manage commissions
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Resources
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Read customer invoices
    @@ -651,9 +661,9 @@ Permission32=Create/modify products
     Permission34=Delete products
     Permission36=See/manage hidden products
     Permission38=Export products
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Delete projects (shared project and projects i'm contact for)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Read interventions
     Permission62=Create/modify interventions
    @@ -686,7 +696,7 @@ Permission109=Delete sendings
     Permission111=Read financial accounts
     Permission112=Create/modify/delete and compare transactions
     Permission113=Setup financial accounts (create, manage categories)
    -Permission114=Reconciliate transactions
    +Permission114=Reconcile transactions
     Permission115=Export transactions and account statements
     Permission116=Transfers between accounts
     Permission117=Manage cheques dispatching
    @@ -694,15 +704,15 @@ Permission121=Read third parties linked to user
     Permission122=Create/modify third parties linked to user
     Permission125=Delete third parties linked to user
     Permission126=Export third parties
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Read providers
     Permission147=Read stats
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Read contracts/subscriptions
     Permission162=Create/modify contracts/subscriptions
     Permission163=Activate a service/subscription of a contract
    @@ -725,7 +735,7 @@ Permission187=Close supplier orders
     Permission188=Cancel supplier orders
     Permission192=Create lines
     Permission193=Cancel lines
    -Permission194=Read the bandwith lines
    +Permission194=Read the bandwidth lines
     Permission202=Create ADSL connections
     Permission203=Order connections orders
     Permission204=Order connections
    @@ -750,12 +760,12 @@ Permission244=See the contents of the hidden categories
     Permission251=Read other users and groups
     PermissionAdvanced251=Read other users
     Permission252=Read permissions of other users
    -Permission253=Create/modify other users, groups and permisssions
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Create/modify internal/external users and permissions
     Permission254=Create/modify external users only
     Permission255=Modify other users password
     Permission256=Delete or disable other users
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Read CA
     Permission272=Read invoices
     Permission273=Issue invoices
    @@ -765,7 +775,7 @@ Permission283=Delete contacts
     Permission286=Export contacts
     Permission291=Read tariffs
     Permission292=Set permissions on the tariffs
    -Permission293=Modify costumers tariffs
    +Permission293=Modify customers tariffs
     Permission300=Read bar codes
     Permission301=Create/modify bar codes
     Permission302=Delete bar codes
    @@ -787,11 +797,9 @@ Permission401=Read discounts
     Permission402=Create/modify discounts
     Permission403=Validate discounts
     Permission404=Delete discounts
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=Delete salaries
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Export salaries
     Permission520=Read Loans
     Permission522=Create/modify loans
    @@ -844,8 +852,8 @@ Permission1251=Run mass imports of external data into database (data load)
     Permission1321=Export customer invoices, attributes and payments
     Permission1322=Reopen a paid bill
     Permission1421=Export customer orders and attributes
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Delete leave requests
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Prospect potential level
     DictionaryCanton=State/Province
     DictionaryRegion=Regions
    @@ -894,7 +902,7 @@ DictionaryVAT=VAT Rates or Sales Tax Rates
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Payment terms
     DictionaryPaymentModes=Payment modes
    -DictionaryTypeContact=Contact/Address types
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Paper formats
    @@ -908,47 +916,47 @@ DictionarySource=Origin of proposals/orders
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Models for chart of accounts
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Emails templates
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Units
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Setup saved
     SetupNotSaved=Setup not saved
     BackToModuleList=Back to modules list
    -BackToDictionaryList=Back to dictionaries list
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=VAT Management
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Rate
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Reports on local taxes
     CalcLocaltax1=Sales - Purchases
     CalcLocaltax1Desc=Local Taxes reports are calculated with the difference between localtaxes sales and localtaxes purchases
    @@ -958,7 +966,8 @@ CalcLocaltax3=Sales
     CalcLocaltax3Desc=Local Taxes reports are the total of localtaxes sales
     LabelUsedByDefault=Label used by default if no translation can be found for code
     LabelOnDocuments=Label on documents
    -NbOfDays=Nb of days
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=At end of month
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Database user
     DatabasePassword=Database password
     Tables=Tables
     TableName=Table name
    -NbOfRecord=Nb of records
    +NbOfRecord=No. of records
     Host=Server
     DriverType=Driver type
     SummarySystem=System information summary
    @@ -996,7 +1005,7 @@ Skin=Skin theme
     DefaultSkin=Default skin theme
     MaxSizeList=Max length for list
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Message of the day
     MessageLogin=Login page message
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Permanent search form on left menu
     DefaultLanguage=Default language to use (language code)
     EnableMultilangInterface=Enable multilingual interface
     EnableShowLogo=Show logo on left menu
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Name
     CompanyAddress=Address
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Owner of bank account %s
     BankModuleNotActive=Bank accounts module not enabled
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Alerts
    -DelaysOfToleranceBeforeWarning=Tolerance delays before warning
    -DelaysOfToleranceDesc=This screen allows you to define the tolerated delays before an alert is reported on screen with picto %s for each late element.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay tolerance (in days) before alert on proposals to close
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay tolerance (in days) before alert on proposals not billed
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Tolerance delay (in days) before alert on services to activate
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Tolerance delay (in days) before alert on expired services
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Tolerance delay (in days) before alert on unpaid supplier invoices
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Tolerence delay (in days) before alert on unpaid client invoices
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Tolerance delay (in days) before alert on pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Tolerance delay (in days) before alert on delayed membership fee
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Tolerance delay (in days) before alert for cheques deposit to do
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Other menu entries manage optional parameters.
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Security audit events
     Audit=Audit
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=System information is miscellaneous technical information you get in read only mode and visible for administrators only.
     SystemAreaForAdminOnly=This area is available for administrator users only. None of the Dolibarr permissions can reduce this limit.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here
     AvailableModules=Available app/modules
     ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Available triggers
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Insert all reference data. You can add your values to the default
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Limits/Precision setup
    -LimitsDesc=You can define limits, precisions and optimisations used by Dolibarr here
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Max decimals for unit prices
     MAIN_MAX_DECIMALS_TOT=Max decimals for total prices
     MAIN_MAX_DECIMALS_SHOWN=Max decimals for prices shown on screen (Add <b>...</b> after this number if you want to see <b>...</b> when number is truncated when shown on screen)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Net unit price of a product
     TotalPriceAfterRounding=Total price (net/vat/incl tax) after rounding
     ParameterActiveForNextInputOnly=Parameter effective for next input only
     NoEventOrNoAuditSetup=No security event has been recorded yet. This can be normal if audit has not been enabled on "setup - security - audit" page.
    -NoEventFoundWithCriteria=No security event has been found for such search criterias.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=See your local sendmail setup
     BackupDesc=To make a complete backup of Dolibarr, you must:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Archived directory should be stored in a secure place.
     BackupDescY=The generated dump file should be stored in a secure place.
    -BackupPHPWarning=Backup can't be guaranted with this method. Prefer previous one
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=To restore a Dolibarr backup, you must:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL import
     ForcedToByAModule= This rule is forced to <b>%s</b> by an activated module
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=SSL functions not available in your PHP
     DownloadMoreSkins=More skins to download
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Show professionnal id with addresses on documents
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Disable meteo view
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Test login to API
    -ProxyDesc=Some features of Dolibarr need to have an Internet access to work. Define here parameters for this. If the Dolibarr server is behind a Proxy server, those parameters tells Dolibarr how to access Internet through it.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=External access
     MAIN_PROXY_USE=Use a proxy server (otherwise direct access to internet)
     MAIN_PROXY_HOST=Name/Address of proxy server
     MAIN_PROXY_PORT=Port of proxy server
     MAIN_PROXY_USER=Login to use the proxy server
     MAIN_PROXY_PASS=Password to use the proxy server
    -DefineHereComplementaryAttributes=Define here all attributes, not already available by default, and that you want to be supported for %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Complementary attributes
     ExtraFieldsLines=Complementary attributes (lines)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
     ExtraFieldsSupplierInvoicesLines=Complementary attributes (invoice lines)
     ExtraFieldsThirdParties=Complementary attributes (thirdparty)
    -ExtraFieldsContacts=Complementary attributes (contact/address)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Complementary attributes (member)
     ExtraFieldsMemberType=Complementary attributes (member type)
     ExtraFieldsCustomerInvoices=Complementary attributes (invoices)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Path to documents
     PathDirectory=Directory
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=You must at least enable 1 module
    -ClassNotFoundIntoPathWarning=Class %s not found into PHP path
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Condition is currently %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Search optimization
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=You are using the web browser %s. This browser is ok for security and performance.
    -BrowserIsKO=You are using the web browser %s. This browser is known to be a bad choice for security, performance and reliability. We recommand you to use Firefox, Chrome, Opera or Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Edition of field %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Get barcode
     ##### Module password generation
     PasswordGenerationStandard=Return a password generated according to internal Dolibarr algorithm: 8 characters containing shared numbers and characters in lowercase.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=EMail required to create a new user
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Companies module setup
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Documents templates
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark on draft document
     JSOnPaimentBill=Activate feature to autofill payment lines on payment form
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at following link: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=An export link to <b>%s</b> format is available at follow
     BillsSetup=Invoices module setup
     BillsNumberingModule=Invoices and credit notes numbering model
     BillsPDFModules=Invoice documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Credit note
     CreditNotes=Credit notes
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Manage a Login for each member
     AdherentMailRequired=EMail required to create a new member
     MemberSendInformationByMailByDefault=Checkbox to send mail confirmation to members (validation or new subscription) is on by default
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP Setup
     LDAPGlobalParameters=Global parameters
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Full name
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Example : cn
     LDAPFieldName=Name
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Performance setup/optimizing report
    -YouMayFindPerfAdviceHere=You will find on this page some checks or advices related to performance.
    -NotInstalled=Not installed, so your server is not slow down by this.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Products module setup
     ServiceSetup=Services module setup
     ProductServiceSetup=Products and Services modules setup
     NumberOfProductShowInSelect=Max number of products in combos select lists (0=no limit)
    -ViewProductDescInFormAbility=Visualization of product descriptions in the forms (otherwise as popup tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Default barcode type to use for products
     SetDefaultBarcodeTypeThirdParties=Default barcode type to use for third parties
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Sending module setup
     SendingsReceiptModel=Sending receipt model
     SendingsNumberingModules=Sendings numbering modules
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text on shipments
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Products deliveries receipt numbering module
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Advanced editor
     ActivateFCKeditor=Activate advanced editor for:
     FCKeditorForCompany=WYSIWIG creation/edition of elements description and note (except products/services)
     FCKeditorForProduct=WYSIWIG creation/edition of products/services description and note
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Tools->eMailing)
     FCKeditorForUserSignature=WYSIWIG creation/edition of user signature
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu deleted
     Menus=Menus
    @@ -1548,7 +1561,7 @@ DetailRight=Condition to display unauthorized grey menus
     DetailLangs=Lang file name for label code translation
     DetailUser=Intern / Extern / All
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Menu change
     DeleteMenu=Delete menu entry
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=VAT is due:<br>- on delivery for goods (we use invoice date
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=On delivery
     OnPayment=On payment
     OnInvoice=On invoice
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Purchase account. code
     AgendaSetup=Events and agenda module setup
     PasswordTogetVCalExport=Key to authorize export link
     PastDelayVCalExport=Do not export event older than
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Point of sales
     CashDeskSetup=Point of sales module setup
    -CashDeskThirdPartyForSell=Default generic third party to use for sells
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Default account to use to receive cash payments
     CashDeskBankAccountForCheque= Default account to use to receive payments by cheque
     CashDeskBankAccountForCB= Default account to use to receive payments by credit cards
    -CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale (if "no", stock decrease is done for each sell done from POS, whatever is option set into module Stock).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease
    -StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Stock decrease in POS is not compatible with lot management
    -CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required.
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Bookmark module setup
    -BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Maximum number of bookmarks to show in left menu
     ##### WebServices #####
     WebServicesSetup=Webservices module setup
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Multi-company module setup
     ##### Suppliers #####
     SuppliersSetup=Supplier module setup
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Supplier invoices numbering models
     IfSetToYesDontForgetPermission=If set to yes, don't forget to provide permissions to groups or users allowed for the second approval
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Project module setup
     ProjectsModelModule=Project reports document model
     TasksNumberingModules=Tasks numbering module
     TaskModelModule=Tasks reports document model
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=You may find options for E
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=List of fixed notifications
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Wizard to build database backup dump file
     SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Install of external module from applic
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Background color for even table lines
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/uz_UZ/companies.lang b/htdocs/langs/uz_UZ/companies.lang
    index b3e1e7b6c86..e5de5614886 100644
    --- a/htdocs/langs/uz_UZ/companies.lang
    +++ b/htdocs/langs/uz_UZ/companies.lang
    @@ -5,13 +5,13 @@ SelectThirdParty=Select a third party
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Delete a contact/address
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=New third party
    -MenuNewCustomer=New customer
    -MenuNewProspect=New prospect
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=New private individual
     NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
     CreateDolibarrThirdPartySupplier=Create a third party (vendor)
     CreateThirdPartyOnly=Create third party
     CreateThirdPartyAndContact=Create a third party + a child contact
    @@ -25,22 +25,22 @@ ThirdPartyContact=Third party contact/address
     Company=Company
     CompanyName=Company name
     AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNameShort=Alias Name
     Companies=Companies
    -CountryIsInEEC=Country is inside European Economic Community
    -ThirdPartyName=Third party name
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
     ThirdPartyEmail=Third party email
    -ThirdParty=Third party
    -ThirdParties=Third parties
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=Prospects
     ThirdPartyProspectsStats=Prospects
     ThirdPartyCustomers=Customers
     ThirdPartyCustomersStats=Customers
     ThirdPartyCustomersWithIdProf12=Customers with %s or %s
     ThirdPartySuppliers=Vendors
    -ThirdPartyType=Third party type
    +ThirdPartyType=Type of company
     Individual=Private individual
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Parent company
     Subsidiaries=Subsidiaries
     ReportByMonth=Report by month
    @@ -75,12 +75,12 @@ Zip=Zip Code
     Town=City
     Web=Web
     Poste= Position
    -DefaultLang=Language by default
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
     VATIsNotUsed=Sales tax is not used
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Proposals
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Syntax is valid
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=This customer has a default discount of <b>%s%%</b>
     CompanyHasNoRelativeDiscount=This customer has no relative discount by default
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=This customer still has credit notes for <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=None
    -Supplier=Supplier
    +Supplier=Vendor
     AddContact=Create contact
     AddContactAddress=Create contact/address
     EditContact=Edit contact
    @@ -303,22 +303,22 @@ AddThirdParty=Create third party
     DeleteACompany=Delete a company
     PersonalInformations=Personal data
     AccountancyCode=Accounting account
    -CustomerCode=Customer code
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Customer code, unique for all customers
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Required if third party is a customer or prospect
     RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Validity controled by module
    -ThisIsModuleRules=This is rules for this module
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=Prospect to contact
     CompanyDeleted=Company "%s" deleted from database.
     ListOfContacts=List of contacts/addresses
    -ListOfContactsAddresses=List of contacts/adresses
    -ListOfThirdParties=List of third parties
    -ShowCompany=Show third party
    +ListOfContactsAddresses=List of contacts/addresses
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Show contact
     ContactsAllShort=All (No filter)
     ContactType=Contact type
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=This contact is not a contact for any commercial proposa
     NoContactForAnyContract=This contact is not a contact for any contract
     NoContactForAnyInvoice=This contact is not a contact for any invoice
     NewContact=New contact
    -NewContactAddress=New contact/address
    +NewContactAddress=New Contact/Address
     MyContacts=My contacts
     Capital=Capital
     CapitalOf=Capital of %s
     EditCompany=Edit company
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Check
    -VATIntraCheckDesc=The link <b>%s</b> allows to ask the european VAT checker service. An external internet access from server is required for this service to work.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Nor prospect, nor customer
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Staff
     ProspectLevelShort=Potential
     ProspectLevel=Prospect potential
    @@ -387,12 +387,12 @@ ExportCardToFormat=Export card to format
     ContactNotLinkedToCompany=Contact not linked to any third party
     DolibarrLogin=Dolibarr login
     NoDolibarrAccess=No Dolibarr access
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Contacts and properties
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Price level
     DeliveryAddress=Delivery address
     AddAddress=Add address
    @@ -402,16 +402,16 @@ DeleteFile=Delete file
     ConfirmDeleteFile=Are you sure you want to delete this file?
     AllocateCommercial=Assigned to sales representative
     Organization=Organization
    -FiscalYearInformation=Information on the fiscal year
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Starting month of the fiscal year
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=List of prospects
    -ListCustomersShort=List of customers
    -ThirdPartiesArea=Third parties and contact area
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Total of unique third parties
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Open
     ActivityCeased=Closed
     ThirdPartyIsClosed=Third party is closed
    @@ -420,15 +420,15 @@ CurrentOutstandingBill=Current outstanding bill
     OutstandingBill=Max. for outstanding bill
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=The code is free. This code can be modified at any time.
     ManagingDirectors=Manager(s) name (CEO, director, president...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/uz_UZ/errors.lang b/htdocs/langs/uz_UZ/errors.lang
    index 0ca7488b8cb..3c806156c7c 100644
    --- a/htdocs/langs/uz_UZ/errors.lang
    +++ b/htdocs/langs/uz_UZ/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Value '%s' has wrong date format
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=Failed to write in directory %s
     ErrorFoundBadEmailInFile=Found incorrect email syntax for %s lines in file (example line %s with email=%s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Some required fields were not filled.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=Field <b>%s</b> must not contains special characters.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=No accountancy module activated
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP matching is not complete.
     ErrorLDAPMakeManualTest=A .ldif file has been generated in directory %s. Try to load it manually from command line to have more information on errors.
    -ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "statut not started" if field "done by" is also filled.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Ref used for creation already exists.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript must not be disabled to have this feature working. To enable/disable Javascript, go to menu Home->Setup->Display.
     ErrorPasswordsMustMatch=Both typed passwords must match each other
    -ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> en provide the error code <b>%s</b> in your message, or even better by adding a screen copy of this page.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Wrong value for field number <b>%s</b> (value '<b>%s</b>' does not match regex rule <b>%s</b>)
     ErrorFieldValueNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a value available into field <b>%s</b> of table <b>%s</b>)
     ErrorFieldRefNotIn=Wrong value for field number <b>%s</b> (value '<b>%s</b>' is not a <b>%s</b> existing ref)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=The antivirus program was not able to validate the
     ErrorSpecialCharNotAllowedForField=Special characters are not allowed for field "%s"
     ErrorNumRefModel=A reference exists into database (%s) and is not compatible with this numbering rule. Remove record or renamed reference to activate this module.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Error on mask
     ErrorBadMaskFailedToLocatePosOfSequence=Error, mask without sequence number
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Error, bad reset value
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Error. Select at least one entry.
    -ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transation that is conciliated
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s is assigned to another third
     ErrorFailedToSendPassword=Failed to send password
     ErrorFailedToLoadRSSFile=Fails to get RSS feed. Try to add constant MAIN_SIMPLEXMLLOAD_DEBUG if error messages does not provide enough information.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=User with login <b>%s</b> could not be found.
     ErrorLoginHasNoEmail=This user has no email address. Process aborted.
     ErrorBadValueForCode=Bad value for security code. Try again with new value...
     ErrorBothFieldCantBeNegative=Fields %s and %s can't be both negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=User account <b>%s</b> used to execute web server has no permission for that
     ErrorNoActivatedBarcode=No barcode type activated
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=A bookmark with this title or this target (URL) alr
     WarningPassIsEmpty=Warning, database password is empty. This is a security hole. You should add a password to your database and change your conf.php file to reflect this.
     WarningConfFileMustBeReadOnly=Warning, your config file (<b>htdocs/conf/conf.php</b>) can be overwritten by the web server. This is a serious security hole. Modify permissions on file to be in read only mode for operating system user used by Web server. If you use Windows and FAT format for your disk, you must know that this file system does not allow to add permissions on file, so can't be completely safe.
     WarningsOnXLines=Warnings on <b>%s</b> source record(s)
    -WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be choosed by default until you check your module setup.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other setup).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/uz_UZ/interventions.lang b/htdocs/langs/uz_UZ/interventions.lang
    index 4c93eff9d0d..a130367b14f 100644
    --- a/htdocs/langs/uz_UZ/interventions.lang
    +++ b/htdocs/langs/uz_UZ/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Interventions
     InterventionCard=Intervention card
     NewIntervention=New intervention
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=List of interventions
     ActionsOnFicheInter=Actions on intervention
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/uz_UZ/main.lang b/htdocs/langs/uz_UZ/main.lang
    index ed1777f9aec..07e65a92651 100644
    --- a/htdocs/langs/uz_UZ/main.lang
    +++ b/htdocs/langs/uz_UZ/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Failed to send mail (sender=%s, receiver=%s)
     ErrorFileNotUploaded=File was not uploaded. Check that size does not exceed maximum allowed, that free space is available on disk and that there is not already a file with same name in this directory.
     ErrorInternalErrorDetected=Error detected
     ErrorWrongHostParameter=Wrong host parameter
    -ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post again the form.
    -ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child records.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Wrong value
     ErrorWrongValueForParameterX=Wrong value for parameter %s
     ErrorNoRequestInError=No request in error
    -ErrorServiceUnavailableTryLater=Service not available for the moment. Try again later.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Duplicate value in a unique field
    -ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. We rollback changes.
    -ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined inside Dolibarr config file <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Failed to find user <b>%s</b> in Dolibarr database.
     ErrorNoVATRateDefinedForSellerCountry=Error, no vat rates defined for country '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Error, failed to save file.
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Set date
     SelectDate=Select a date
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=The file was successfully uploaded
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=A file is selected for attachment but was not yet uploaded. Click on "Attach file" for this.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Read help
     RecordSaved=Record saved
    @@ -94,7 +94,7 @@ Undefined=Undefined
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=See above
    -HomeArea=Home area
    +HomeArea=Home
     LastConnexion=Latest connection
     PreviousConnexion=Previous connection
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Closed
     Closed2=Closed
     NotClosed=Not closed
     Enabled=Enabled
    +Enable=Enable
     Deprecated=Deprecated
     Disable=Disable
     Disabled=Disabled
    @@ -153,7 +154,7 @@ Update=Update
     Close=Close
     CloseBox=Remove widget from your dashboard
     Confirm=Confirm
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Delete
     Remove=Remove
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Paste
     Default=Default
     DefaultValue=Default value
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Price
     PriceCurrency=Price (currency)
     UnitPrice=Unit price
    @@ -347,7 +348,7 @@ AmountTTCShort=Amount (inc. tax)
     AmountHT=Amount (net of tax)
     AmountTTC=Amount (inc. tax)
     AmountVAT=Amount tax
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Not applicable
     ActionRunningNotStarted=To start
     ActionRunningShort=In progress
     ActionDoneShort=Finished
    -ActionUncomplete=Uncomplete
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Generate
     Duration=Duration
     TotalDuration=Total duration
     Summary=Summary
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Available
     NotYetAvailable=Not yet available
    @@ -468,7 +469,7 @@ and=and
     or=or
     Other=Other
     Others=Others
    -OtherInformations=Other informations
    +OtherInformations=Other information
     Quantity=Quantity
     Qty=Qty
     ChangedBy=Changed by
    @@ -506,7 +507,7 @@ None=None
     NoneF=None
     NoneOrSeveral=None or several
     Late=Late
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Picture
     Photos=Pictures
    @@ -530,18 +531,6 @@ September=September
     October=October
     November=November
     December=December
    -JanuaryMin=Jan
    -FebruaryMin=Feb
    -MarchMin=Mar
    -AprilMin=Apr
    -MayMin=May
    -JuneMin=Jun
    -JulyMin=Jul
    -AugustMin=Aug
    -SeptemberMin=Sep
    -OctoberMin=Oct
    -NovemberMin=Nov
    -DecemberMin=Dec
     Month01=January
     Month02=February
     Month03=March
    @@ -646,6 +635,8 @@ SendMail=Send email
     EMail=E-mail
     NoEMail=No email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Owner
     FollowingConstantsWillBeSubstituted=The following constants will be replaced with the corresponding value.
    @@ -677,7 +668,7 @@ NeverReceived=Never received
     Canceled=Canceled
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Color
     Documents=Linked files
     Documents2=Documents
    @@ -703,7 +694,7 @@ DateOfSignature=Date of signature
     HidePassword=Show command with password hidden
     UnHidePassword=Show real command with clear password
     Root=Root
    -Informations=Informations
    +Informations=Information
     Page=Page
     Notes=Notes
     AddNewLine=Add new line
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Show page to print main content area
     MenuManager=Menu manager
    -WarningYouAreInMaintenanceMode=Warning, you are in a maintenance mode, so only login <b>%s</b> is allowed to use application at the moment.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=System error
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Credit card
     ValidatePayment=Validate payment
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Fields with <b>%s</b> are mandatory
    -FieldsWithIsForPublic=Fields with <b>%s</b> are shown on public list of members. If you don't want this, check off the "public" box.
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Line
     NotSupported=Not supported
     RequiredField=Required field
    @@ -732,6 +723,8 @@ Result=Result
     ToTest=Test
     ValidateBefore=Card must be validated before using this feature
     Visibility=Visibility
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Private
     Hidden=Hidden
     Resources=Resources
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Link to order
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Create draft
     SetToDraft=Back to draft
     ClickToEdit=Click to edit
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=By day
     BySalesRepresentative=By sales representative
     LinkedToSpecificUsers=Linked to a particular user contact
     NoResults=No results
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=System tools
     ModulesSystemTools=Modules tools
     Test=Test
     Element=Element
     NoPhotoYet=No pictures available yet
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Deductible
     from=from
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=Print File %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Show intervention
     ShowContract=Show contract
    -GoIntoSetupToChangeLogo=Go into Home - Setup - Company to change logo or go into Home - Setup - Display to hide.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Delete line
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Classify billed
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Calendar
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Events
    -EMailTemplates=Emails templates
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Project
     Projects=Projects
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Permissions
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Monday
     Tuesday=Tuesday
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Contracts
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Expense reports
    -SearchIntoLeaves=Leaves
    +SearchIntoLeaves=Leave
     CommentLink=Comments
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Everybody
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Assigned to
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/uz_UZ/other.lang b/htdocs/langs/uz_UZ/other.lang
    index 8ef8cc30090..e8cd9b78d2f 100644
    --- a/htdocs/langs/uz_UZ/other.lang
    +++ b/htdocs/langs/uz_UZ/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Security code
     NumberingShort=N°
     Tools=Tools
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Birthday
     BirthdayDate=Birthday date
     DateToBirth=Date of birth
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Intervention validated
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=Customer order validated
     Notify_ORDER_SENTBYMAIL=Customer order sent by mail
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Supplier order sent by mail
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Supplier order approved
     Notify_ORDER_SUPPLIER_REFUSE=Supplier order refused
     Notify_PROPAL_VALIDATE=Customer proposal validated
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Commercial proposal sent by mail
     Notify_WITHDRAW_TRANSMIT=Transmission withdrawal
     Notify_WITHDRAW_CREDIT=Credit withdrawal
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Third party created
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=Customer invoice validated
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=Customer invoice payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Customer invoice canceled
     Notify_BILL_SENTBYMAIL=Customer invoice sent by mail
     Notify_BILL_SUPPLIER_VALIDATE=Supplier invoice validated
    -Notify_BILL_SUPPLIER_PAYED=Supplier invoice payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Supplier invoice sent by mail
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=Contract validated
     Notify_FICHEINTER_VALIDATE=Intervention validated
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=Shipping validated
     Notify_SHIPPING_SENTBYMAIL=Shipping sent by mail
     Notify_MEMBER_VALIDATE=Member validated
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Number of attached files/documents
     TotalSizeOfAttachedFiles=Total size of attached files/documents
     MaxSize=Maximum size
     AttachANewFile=Attach a new file/document
     LinkedObject=Linked object
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Prof Id %s</b> is an information depending on third party country.<br>For example, for country <b>%s</b>, it's code <b>%s</b>.
     DolibarrDemo=Dolibarr ERP/CRM demo
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=The intervention %s has been validated.
     EMailTextInvoiceValidated=The invoice %s has been validated.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=The proposal %s has been validated.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=The order %s has been validated.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=The order %s has been approved by %s.
     EMailTextOrderRefused=The order %s has been refused.
     EMailTextOrderRefusedBy=The order %s has been refused by %s.
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Importation data set
     DolibarrNotification=Automatic notification
     ResizeDesc=Enter new width <b>OR</b> new height. Ratio will be kept during resizing...
    @@ -204,7 +212,7 @@ NewLength=New width
     NewHeight=New height
     NewSizeAfterCropping=New size after cropping
     DefineNewAreaToPick=Define new area on image to pick (left click on image then drag until you reach the opposite corner)
    -CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is informations on current edited image
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Image editor
     YouReceiveMailBecauseOfNotification=You receive this message because your email has been added to list of targets to be informed of particular events into %s software of %s.
     YouReceiveMailBecauseOfNotification2=This event is the following:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Exports area
    diff --git a/htdocs/langs/uz_UZ/projects.lang b/htdocs/langs/uz_UZ/projects.lang
    index e04f28689a1..aadd8b446df 100644
    --- a/htdocs/langs/uz_UZ/projects.lang
    +++ b/htdocs/langs/uz_UZ/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Show project
     ShowTask=Show task
     SetProject=Set project
     NoProject=No project defined or owned
    -NbOfProjects=Nb of projects
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Time spent
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=List of the commercial proposals associated with the project
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=List of contracts associated with the project
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=List of interventions associated with the project
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=List of events associated with the project
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Contributor
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Proposal
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/vi_VN/admin.lang b/htdocs/langs/vi_VN/admin.lang
    index c306183fa8f..a44a4a68f09 100644
    --- a/htdocs/langs/vi_VN/admin.lang
    +++ b/htdocs/langs/vi_VN/admin.lang
    @@ -10,9 +10,9 @@ VersionDevelopment=Phát triển
     VersionUnknown=Không rõ
     VersionRecommanded=Khuyên dùng
     FileCheck=Kiểm tra tính toàn vẹn của tập tin
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
     FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
     FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
     GlobalChecksum=Global checksum
     MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    @@ -30,14 +30,14 @@ SessionSaveHandler=Quản lý lưu phiên làm việc
     SessionSavePath=Lưu trữ phiên làm việc bản địa hóa
     PurgeSessions=Thanh lọc phiên làm việc
     ConfirmPurgeSessions=Bạn thật sự muốn làm sạch tất cả các phiên làm việc ? Điều này sẽ ngắt kết nối tất cả người dùng ( ngoại trừ bạn).
    -NoSessionListWithThisHandler=Phần quản lý lưu phiên làm việc được cấu hình trong PHP của bạn không cho phép để liệt kê tất cả các phiên đang chạy.
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=Khóa kết nối mới
    -ConfirmLockNewSessions=Bạn có chắc muốn hạn chế bất kỳ kết nối Dolibarr mới đến chính bạn. Chỉ người dùng <b>%s</b> sẽ có thể được kết nối sau đó.
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=Bỏ việc khóa kết nôi
     YourSession=Phiên làm việc của bạn
    -Sessions=Phiên làm việc của người dùng
    +Sessions=Users sessions
     WebUserGroup=Người dùng/nhóm trên máy chủ
    -NoSessionFound=PHP của bạn không cho phép liệt kê các phiên làm việc hiện có. Thư mục đã dùng để lưu các phiên làm việc (<b>%s</b>) có thể được bảo vệ (Thí dụ, tùy theo sự cho phép của hệ điệu hành hoặc mối liên hệ giữa open_basedir trong PHP).
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=Cơ sở dữ liệu bộ ký tự để lưu trữ dữ liệu
     DBSortingCharset=Cơ sở dữ liệu bộ ký tự để sắp xếp dữ liệu
     ClientCharset=Client charset
    @@ -50,7 +50,7 @@ ExternalUser=Người dùng bên ngoài
     InternalUsers=Người dùng bên trong
     ExternalUsers=Người dùng bên ngoài
     GUISetup=Hiển thị
    -SetupArea=Khu vực thiết lập
    +SetupArea=Thiết lập
     UploadNewTemplate=Upload new template(s)
     FormToTestFileUploadForm=Mẫu để thử nghiệm việc tải lên tập tin (dựa theo thiết lập)
     IfModuleEnabled=Ghi chú: Yes chỉ có tác dụng nếu module <b>%s</b> được mở
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=Mã lệnh không thể chứa giá trị 0
     DisableJavascript=Vô hiệu hóa chức năng JavaScript và Ajax (Đề xuất cho người mù hoặc văn bản trình duyệt)
     UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
     UseSearchToSelectContactTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant CONTACT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=Nbr của characters để kích hoạt tìm kiếm: %s
     NotAvailableWhenAjaxDisabled=Hiện không có sẵn khi Ajax bị vô hiệu
     AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    @@ -80,7 +80,7 @@ PreviewNotAvailable=Xem trước không sẵn có
     ThemeCurrentlyActive=Giao diện hiện đã kích hoạt
     CurrentTimeZone=Mã vùng thời gian PHP (server)
     MySQLTimeZone=TimeZone MySql (database)
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=Khoảng trống
     Table=Bảng
     Fields=Trường
    @@ -111,14 +111,14 @@ NotConfigured=Mô-đun/ Ứng dụng chưa được cấu hình
     Active=Kích hoạt
     SetupShort=Cài đặt
     OtherOptions=Tùy chọn khác
    -OtherSetup=Cài đặt khác
    +OtherSetup=Other Setup
     CurrentValueSeparatorDecimal=Phân cách thập phân
     CurrentValueSeparatorThousand=Phân cách phần ngàn
     Destination=Đích đến
     IdModule=ID module
     IdPermissions=ID phân quyền
     LanguageBrowserParameter=Thông số %s
    -LocalisationDolibarrParameters=Thông số địa phương hóa
    +LocalisationDolibarrParameters=Localization parameters
     ClientTZ=Time Zone khách hàng (người sử dụng)
     ClientHour=Thời gian khách hàng (người sử dụng)
     OSTZ=Server OS Time Zone
    @@ -126,8 +126,8 @@ PHPTZ=PHP server Time Zone
     DaylingSavingTime=Daylight saving time
     CurrentHour=PHP Time (server)
     CurrentSessionTimeOut=Thời hạn phiên làm việc hiện tại
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=widget
     Boxes=widgets
     MaxNbOfLinesForBoxes=Số đòng tối đa cho widgets
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=Bỏ qua các lỗi của bản ghi trùng lặp (INSERT
     AutoDetectLang=Tự động phát hiện (ngôn ngữ trình duyệt)
     FeatureDisabledInDemo=Tính năng đã vô hiệu hóa trong bản demo
     FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=Widgets là thành phần hiển thị 1 vài thông tin ở đó bạn có thể thêm 1 số trang cá nhân. Bạn có thể lựa chọn giữa hiển thị widget hoặc không bằng cách chọn trang đích và nhấp vào 'Kích hoạt', hoặc nhấp vào biểu tượng thùng rác để vô hiệu hóa nó.
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=Chỉ có các yếu tố từ <a href="%s">module kích hoạt</a> được hiển thị.
    -ModulesDesc=Dolibarr modules define which application/feature is enabled in software. Some application/modules require permissions you must grant to users, after activating it. Click on button on/off to enable a module/application.
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=Bạn có thể tìm thấy nhiều mô-đun để tải về ở các websites trên Internet ...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=Tìm ứng dụng bên ngoài/ mô-đun
     ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=Mới
     FreeModule=Free
     CompatibleUpTo=Compatible with version %s
    @@ -211,8 +211,8 @@ Nouveauté=Novelty
     AchatTelechargement=Buy / Download
     GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
     DoliStoreDesc=DoliStore, the official market place for Dolibarr ERP/CRM external modules
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    -WebSiteDesc=Tham khảo các website để tìm thêm nhiều mô-dun...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=Some solutions to develop your own module...
     URL=Liên kết
     BoxesAvailable=Widgets có sẵn
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=Không chứa mật khẩu đã xóa trong cơ sở dữ
     MainDbPasswordFileConfEncrypted=Cơ sở dữ liệu mật khẩu được mã hóa trong conf.php (Đã kích hoạt được Khuyến nghị)
     InstrucToEncodePass=Để có mật khẩu mã hóa vào tập tin <b>conf.php</b>, thay thế dòng <br><b>$dolibarr_main_db_pass="..."</b><br> thành<br><b>$dolibarr_main_db_pass="crypted:%s"</b>
     InstrucToClearPass=Để có mật khẩu được giải mã (trống) vào tập tin <b>conf.php</b>, thay thế dòng <br><b>$dolibarr_main_db_pass="crypted:..."</b><br> thành<br><b>$dolibarr_main_db_pass="%s"</b>
    -ProtectAndEncryptPdfFiles=Protection of generated pdf files (Activated NOT recommended, breaks mass pdf generation)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=Bảo vệ tài liệu PDF giữ cho nó sẵn sàng để đọc và in với bất kỳ trình duyệt PDF nào. Tuy nhiên, chỉnh sửa và sao chép là không thể nữa. Lưu ý rằng việc sử dụng tính năng này làm cho xây dựng một bộ PDF thống nhất không hoạt động.
     Feature=Đặc tính
     DolibarrLicense=Giấy phép
    @@ -246,8 +246,8 @@ ExternalResources=External resources
     SocialNetworks=Social Networks
     ForDocumentationSeeWiki=For user or developer documentation (Doc, FAQs...),<br>take a look at the Dolibarr Wiki:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=For any other questions/help, you can use the Dolibarr forum:<br><b><a href="%s" target="_blank">%s</a></b>
    -HelpCenterDesc1=This area can help you to get a Help support service on Dolibarr.
    -HelpCenterDesc2=Some part of this service are available in <b>english only</b>.
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=Điều khiển menu hiện tại
     MeasuringUnit=Đơn vị đo
     LeftMargin=Left margin
    @@ -262,31 +262,35 @@ NoticePeriod=Kỳ thông báo
     NewByMonth=New by month
     Emails=Emails
     EMailsSetup=cài đặt Emails
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=Emails sender profiles
    -MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix like systems)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    -MAIN_MAIL_AUTOCOPY_TO= Gửi một bản CC một cách tự động cho tất cả các email được gửi
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=Phương pháp sử dụng để gửi email
    -MAIN_MAIL_SMTPS_ID=SMTP ID nếu có yêu cầu xác thực
    -MAIN_MAIL_SMTPS_PW=Mật khẩu SMTP nếu có yêu cầu xác thực
    -MAIN_MAIL_EMAIL_TLS= Sử dụng TLS (SSL) mã hóa
    -MAIN_MAIL_EMAIL_STARTTLS= Use TLS (STARTTLS) encrypt
    -MAIN_DISABLE_ALL_SMS=Vô hiệu hoá tất cả sendings SMS (cho mục đích thử nghiệm hoặc trình diễn)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=Phương pháp sử dụng để gửi SMS
    -MAIN_MAIL_SMS_FROM=Số điện thoại mặc định cho việc gửi SMS gửi
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
     UserEmail=User email
     CompanyEmail=Company email
     FeatureNotAvailableOnLinux=Tính năng không có sẵn trên Unix như hệ thống. Kiểm tra chương trình sendmail bản địa của bạn.
    -SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=If translation for this language is not complete or you find errors, you can correct this by editing files into directory <b>langs/%s</b> and submit modified files on dolibarr.org/forum or for developers on github.com/Dolibarr/dolibarr.
     ModuleSetup=Cài đặt module
     ModulesSetup=Modules/Application setup
    @@ -309,15 +313,15 @@ DoNotUseInProduction=Không sử dụng trong sản xuất
     ThisIsProcessToFollow=This is steps to process:
     ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
     StepNb=Bước %s
    -FindPackageFromWebSite=Tìm một gói phần mềm cung cấp các tính năng mà bạn muốn (ví dụ như trên trang web chính thức %s).
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=Download package (for example from official web site %s).
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
     InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
     InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Phiên bản hiện tại Dolibarr
     CallUpdatePage=Go to the page that updates the database structure and data: %s.
     LastStableVersion=Latest stable version
    @@ -347,15 +351,15 @@ SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and t
     UseACacheDelay= Delay for caching export response in seconds (0 or empty for no cache)
     DisableLinkToHelpCenter=Hide link "<b>Need help or support</b>" on login page
     DisableLinkToHelp=Hide link to online help "<b>%s</b>"
    -AddCRIfTooLong=There is no automatic wrapping, so if line is out of page on documents because too long, you must add yourself carriage returns in the textarea.
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=Chiều dài tối thiểu
     LanguageFilesCachedIntoShmopSharedMemory=Tập tin .lang được nạp vào bộ nhớ chia sẻ
     LanguageFile=Language file
    -ExamplesWithCurrentSetup=Ví dụ với cài đặt đang chạy hiện tại
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=List of OpenDocument templates directories
     ListOfDirectoriesForModelGenODT=List of directories containing templates files with OpenDocument format.<br><br>Put here full path of directories.<br>Add a carriage return between eah directory.<br>To add a directory of the GED module, add here <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>.<br><br>Files in those directories must end with <b>.odt</b> or <b>.ods</b>.
    -NumberOfModelFilesFound=Number of ODT/ODS templates files found in those directories
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=Examples of syntax:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>To know how to create your odt document templates, before storing them in those directories, read wiki documentation:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=Key to use Web Services (parameter "dolibarrkey" in webs
     TestSubmitForm=Form kiểm tra đầu vào
     ThisForceAlsoTheme=Using this menu manager will also use its own theme whatever is user choice. Also this menu manager specialized for smartphones does not works on all smartphone. Use another menu manager if you experience problems on yours.
     ThemeDir=Thư mục giao diện
    -ConnectionTimeout=Connexion timeout
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=Response timeout
     SmsTestMessage=Tin nhắn kiểm tra từ __PHONEFROM__ để __PHONETO__
     ModuleMustBeEnabledFirst=Module <b>%s</b> must be enabled first if you need this feature.
     SecurityToken=Key to secure URLs
    -NoSmsEngine=No SMS sender manager available. SMS sender manager are not installed with default distribution (because they depends on an external supplier) but you can find some on %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF
    -PDFDesc=Bạn có thể thiết lập cho mỗi tùy chọn toàn cầu liên quan đến việc tạo PDF
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=Quy tắc bắt buộc hộp địa chỉ
     HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
     PDFRulesForSalesTax=Rules for Sales Tax / VAT
     PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=Ẩn mô tả sản phẩm vào PDF được tạo ra
     HideRefOnPDF=Ẩn các sản phẩm tham chiếu trên PDF được tạo ra
     HideDetailsOnPDF=Hide product lines details on generated PDF
    @@ -387,7 +391,7 @@ UrlGenerationParameters=Các thông số để bảo mật URL
     SecurityTokenIsUnique=Sử dụng một tham số securekey duy nhất cho mỗi URL
     EnterRefToBuildUrl=Nhập tham chiếu cho đối tượng %s
     GetSecuredUrl=Nhận URL được tính
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=Thuế suất VAT cũ
     NewVATRates=Thuế suất VAT mới
     PriceBaseTypeToChange=Sửa đổi về giá với giá trị tham chiếu cơ sở được xác định trên
    @@ -408,13 +412,13 @@ ExtrafieldSelect = Lựa chọn danh sách
     ExtrafieldSelectList = Chọn từ bảng
     ExtrafieldSeparator=Separator (not a field)
     ExtrafieldPassword=Mật khẩu
    -ExtrafieldRadio=Radio buttons (on choice only)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=Checkboxes
     ExtrafieldCheckBoxFromList=Hộp đánh dấu từ bảng
     ExtrafieldLink=Liên kết với một đối tượng
     ComputedFormula=Computed field
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=Liên kết mặc định
     SetAsDefault=Set as default
     ValueOverwrittenByUserSetup=Cảnh báo, giá trị này có thể được ghi đè bởi các thiết lập cụ thể người sử dụng (mỗi người dùng có thể thiết lập url clicktodial riêng của mình)
     ExternalModule=Module bên ngoài được cài đặt vào thư mục %s
    -BarcodeInitForThirdparties=Mass barcode init for thirdparties
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=Mass barcode init or reset for products or services
     CurrentlyNWithoutBarCode=Hiện tại, bạn có <strong>%s</strong> bản ghi <strong>%s</strong> %s không xác định được mã vạch
     InitEmptyBarCode=Init value for next %s empty records
     EraseAllCurrentBarCode=Xóa tất cả các giá trị hiện tại của mã vạch
     ConfirmEraseAllCurrentBarCode=Bạn có chắc muốn xóa tất cả các giá trị mã vạch hiện tại?
     AllBarcodeReset=Tất cả giá trị mã vạch đã được loại bỏ
    -NoBarcodeNumberingTemplateDefined=Không có mẫu mã vạch đánh số được kích hoạt trong cài đặt mô-đun mã vạch.
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=Enable file cache
     ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
     NoDetails=No more details in footer
     DisplayCompanyInfo=Display company address
     DisplayCompanyManagers=Display manager names
     DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=Return an empty accounting code.
     ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
     Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
     UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
     ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    +DependsOn=This module needs the module(s)
     RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=Dòng
     ProductDocumentTemplates=Document templates to generate product document
    @@ -476,16 +480,18 @@ SendEmailsReminders=Send agenda reminders by emails
     davDescription=Add a component to be a DAV server
     DAVSetup=Setup of module DAV
     DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
    -Module0Name=Người dùng & nhóm
    +Module0Name=Người dùng & Nhóm
     Module0Desc=Users / Employees and Groups management
    -Module1Name=Bên thứ ba
    +Module1Name=Third Parties
     Module1Desc=Quản lý liên lạc và công ty (khách hàng, khách hàng tiềm năng ...)
     Module2Name=Thương mại
     Module2Desc=Quản lý thương mại
     Module10Name=Kế toán
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=Đơn hàng đề xuất
     Module20Desc=Quản lý đơn hàng đề xuất
     Module22Name=Gửi Email hàng loạt
    @@ -511,13 +517,13 @@ Module52Desc=Quản lý tồn kho (sản phẩm)
     Module53Name=Dịch vụ
     Module53Desc=Quản lý dịch vụ
     Module54Name=Hợp đồng/Thuê bao
    -Module54Desc=Quản lý hợp đồng (dịch vụ hoặc thuê bao định kỳ)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=Mã vạch
     Module55Desc=Quản lý mã vạch
     Module56Name=Telephony
     Module56Desc=Telephony integration
     Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=ClickToDial
     Module58Desc=Integration of a ClickToDial system (Asterisk, ...)
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=Phiếu công tác phí
     Module75Desc=Quản lý phiếu công tác phí
     Module80Name=Vận chuyển
     Module80Desc=Quản lý phiếu xuất kho và phiếu giao hàng
    -Module85Name=Ngân hàng và tiền mặt
    +Module85Name=Banks and Cash
     Module85Desc=Quản lý tài khoản ngân hàng hoặc tiền mặt
    -Module100Name=Trang web bên ngoài
    -Module100Desc=Module này bao gồm một trang web bên ngoài hoặc trang trong menu Dolibarr và xem nó trong một khung Dolibarr
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=Mailman or SPIP interface for member module
     Module200Name=LDAP
    -Module200Desc=Đồng bộ hóa thư mục LDAP
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=Tích hợp PostNuke
     Module240Name=Xuất dữ liệu
    -Module240Desc=Tool to export Dolibarr data (with assistants)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=Nhập dữ liệu
    -Module250Desc=Tool to import data in Dolibarr  (with assistants)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=Thành viên
     Module310Desc=Quản lý thành viên của tổ chức
     Module320Name=RSS Feed
     Module320Desc=Thêm nguồn cấp dữ liệu RSS trong trang màn hình Dolibarr
    -Module330Name=Bookmarks
    -Module330Desc=Quản lý bookmark
    -Module400Name=Dự án/Cơ hội/Đầu mối
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
     Module410Name=Lịch trên web
     Module410Desc=Tích hợp lịch trên web
     Module500Name=Taxes and Special expenses
     Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
     Module510Name=Thanh toán của tiền lương nhân công
    -Module510Desc=Bản ghi và theo dõi thanh toán của tiền lương nhân công
    +Module510Desc=Record and track employee payments
     Module520Name=Cho vay
     Module520Desc=Quản lý cho vay
     Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=Tài trợ
     Module700Desc=Quản lý tài trợ
     Module770Name=Báo cáo chi tiêu
    -Module770Desc=Báo cáo quản lý và claim chi phí (di chuyển, ăn uống, ...)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=Vendor commercial proposal
     Module1120Desc=Request vendor commercial proposal and prices
     Module1200Name=Mantis
    @@ -576,13 +582,13 @@ Module1520Desc=Xuất chứng từ Mass mail
     Module1780Name=Gán thẻ/phân nhóm
     Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
     Module2000Name=WYSIWYG editor
    -Module2000Desc=Allow to edit some text area using an advanced editor (Based on CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=Giá linh hoạt
     Module2200Desc=Cho phép sử dụng các biểu thức toán học cho giá
     Module2300Name=Việc theo lịch trình
     Module2300Desc=Scheduled jobs management (alias cron or chrono table)
     Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
     Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
     Module2600Name=API/Web services (SOAP server)
    @@ -590,16 +596,16 @@ Module2600Desc=Enable the Dolibarr SOAP server providing API services
     Module2610Name=API/Web services (REST server)
     Module2610Desc=Enable the Dolibarr REST server providing API services
     Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Kích hoạt các dịch vụ web Dolibarr client (có thể được sử dụng để đẩy dữ liệu / yêu cầu đến các máy chủ bên ngoài. Đơn hàng Nhà cung cấp chỉ được hỗ trợ cho thời điểm này)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=Sử dụng dịch vụ trực tuyến Gravatar (www.gravatar.com) để hiển thị hình ảnh của người sử dụng / thành viên (được tìm thấy với các email của họ). Cần truy cập internet
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP Client
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind conversions capabilities
     Module3100Name=Skype
     Module3100Desc=Add a Skype button into users / third parties / contacts / members cards
     Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=HRM
     Module4000Desc=Human resources management (management of department, employee contracts and feelings)
     Module5000Name=Đa công ty
    @@ -609,27 +615,31 @@ Module6000Desc=Workflow management (automatic creation of object and/or automati
     Module10000Name=Websites
     Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
     Module20000Name=Quản lý phiếu nghỉ phép
    -Module20000Desc=Khai báo và theo dõi phiếu nghỉ phép của nhân viên
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=Products lots
     Module39000Desc=Lô hoặc số sê ri, quản lý ngày eat-by và sell-by trên sản phẩm
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=Điểm bán hàng
     Module50100Desc=Point of sales module (POS).
    +Module50150Name=Điểm bán hàng
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=Kế toán (nâng cao)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installe on server).
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=Poll, Survey or Vote
    -Module55000Desc=Module to make online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=Lợi nhuận
     Module59000Desc=Module quản lý lợi nhuận
     Module60000Name=Hoa hồng
     Module60000Desc=Module quản lý hoa hồng
    -Module62000Name=Incoterm
    -Module62000Desc=Add features to manage Incoterm
    +Module62000Name=Incoterms
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=Tài nguyên
     Module63000Desc=Manage resources (printers, cars, room, ...) you can then share into events
     Permission11=Xem hóa đơn khách hàng
    @@ -651,9 +661,9 @@ Permission32=Tạo/chỉnh sửa sản phẩm
     Permission34=Xóa sản phẩm
     Permission36=Xem/quản lý sản phẩm ẩn
     Permission38=Xuất dữ liệu sản phẩm
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=Xóa dự án (dự án chia sẻ và các dự án tôi liên lạc)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=Export projects
     Permission61=Xem intervention
     Permission62=Tạo/chỉnh sửa intervention
    @@ -686,7 +696,7 @@ Permission109=Xóa sendings
     Permission111=Xem tài khoản tài chính
     Permission112=Tạo/chỉnh sửa/xóa và so sánh giao dịch
     Permission113=Cài đặt tài khoản tài chính (tạo, quản lý phân nhóm)
    -Permission114=Reconciliate giao dịch
    +Permission114=Reconcile transactions
     Permission115=Xuất dữ liệu giao dịch và bảng kê tài khoản
     Permission116=Chuyển giữa các tài khoản
     Permission117=Quản lý việc gửi séc
    @@ -694,15 +704,15 @@ Permission121=Xem bên thứ ba liên quan đến người dùng
     Permission122=Tạo/chỉnh sửa bên thứ ba liên quan đến người dùng
     Permission125=Xóa bên thứ ba liên quan đến người dùng
     Permission126=Xuất dữ liệu bên thứ ba
    -Permission141=Read all projects and tasks (also private projects i am not contact for)
    -Permission142=Create/modify all projects and tasks (also private projects i am not contact for)
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=Delete all projects and tasks (also private projects i am not contact for)
     Permission146=Xem nhà cung cấp
     Permission147=Xem thống kê
     Permission151=Read direct debit payment orders
     Permission152=Create/modify a direct debit payment orders
     Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=Xem hợp đồng/thuê bao
     Permission162=Tạo/chỉnh sửa hợp đồng/thuê bao
     Permission163=Kích hoạt dịch vụ/thuê bao của hợp đồng
    @@ -725,7 +735,7 @@ Permission187=Đóng đơn hàng nhà cung cấp
     Permission188=Hủy bỏ đơn hàng nhà cung cấp
     Permission192=Tạo dòng chi tiết
     Permission193=Hủy bỏ dòng chi tiết
    -Permission194=Xem dòng băng thông
    +Permission194=Read the bandwidth lines
     Permission202=Tạo kết nối ADSL
     Permission203=Lệnh kết nối đơn hàng
     Permission204=Lệnh kết nối
    @@ -750,12 +760,12 @@ Permission244=Xem nội dung của phân nhóm ẩn
     Permission251=Xem người dùng và nhóm khác
     PermissionAdvanced251=Xem người dùng khác
     Permission252=Xem phân quyền của người dùng khác
    -Permission253=Tạo/chỉnh sửa người dùng khác, nhóm và phân quyền
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=Tạo/chỉnh sửa người sử dụng nội bộ / bên ngoài và phân quyền
     Permission254=Tạo/chỉnh sửa chỉ người dùng bên ngoài
     Permission255=Chỉnh sửa mật khẩu của người dùng khác
     Permission256=Xóa hoặc vô hiệu người dùng khác
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=Xem CA
     Permission272=Xem hóa đơn
     Permission273=Xuất hóa đơn
    @@ -765,7 +775,7 @@ Permission283=Xóa liên lạc
     Permission286=Xuất dữ liệu liên lạc
     Permission291=Xem thuế
     Permission292=Chỉnh phân quyền trên mức thuế
    -Permission293=Chính sửa mức thuế khách hàng
    +Permission293=Modify customers tariffs
     Permission300=Xem mã vạch
     Permission301=Tạo/chỉnh sửa mã vạch
     Permission302=Xóa mã vạch
    @@ -787,11 +797,9 @@ Permission401=Xem giảm giá
     Permission402=Tạo/chỉnh sửa giảm giá
     Permission403=Xác nhận giảm giá
     Permission404=Xóa giảm giá
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Tạo/ chỉnh sửa thanh toán của tiền lượng
    -Permission514=Xóa lương
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=Xuất dữ liệu lương
     Permission520=Xem cho vay
     Permission522=Tạo/Chỉnh sửa cho vay
    @@ -844,8 +852,8 @@ Permission1251=Chạy nhập dữ liệu khối cho dữ liệu bên ngoài vào
     Permission1321=Xuất dữ liệu Hóa đơn khách hàng, các thuộc tính và thanh toán
     Permission1322=Reopen a paid bill
     Permission1421=Xuất dữ liệu Đơn hàng và các thuộc tính
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=Xóa yêu cầu nghỉ phép
     Permission20004=Read all leave requests (even of user not subordinates)
     Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    @@ -880,8 +888,8 @@ Permission63001=Read resources
     Permission63002=Create/modify resources
     Permission63003=Delete resources
     Permission63004=Link resources to agenda events
    -DictionaryCompanyType=Types of thirdparties
    -DictionaryCompanyJuridicalType=Legal forms of thirdparties
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=Mức khách hàng tiềm năng
     DictionaryCanton=Bang/Tỉnh
     DictionaryRegion=Vùng
    @@ -894,7 +902,7 @@ DictionaryVAT=Tỉ suất VAT hoặc Tỉ xuất thuế bán hàng
     DictionaryRevenueStamp=Amount of tax stamps
     DictionaryPaymentConditions=Điều khoản thanh toán
     DictionaryPaymentModes=Phương thức thanh toán
    -DictionaryTypeContact=Loại Liên lạc/Địa chỉ
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=Type of website pages/containers
     DictionaryEcotaxe=Ecotax (WEEE)
     DictionaryPaperFormat=Định dạng giấy
    @@ -908,47 +916,47 @@ DictionarySource=Chứng từ gốc của đơn hàng đề xuất/đơn hàng
     DictionaryAccountancyCategory=Personalized groups for reports
     DictionaryAccountancysystem=Kiểu biểu đồ tài khoản
     DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=Mẫu email
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=Đơn vị
     DictionaryProspectStatus=Prospection status
    -DictionaryHolidayTypes=Types of leaves
    -DictionaryOpportunityStatus=Opportunity status for project/lead
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=Expense report - Transportation categories
     DictionaryExpenseTaxRange=Expense report - Range by transportation category
     SetupSaved=Cài đặt đã lưu
     SetupNotSaved=Setup not saved
     BackToModuleList=Trở lại danh sách module
    -BackToDictionaryList=Trở lại danh sách từ điển
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=Quản lý thuế VAT
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=By default the proposed VAT is 0 which can be used for cases like associations, individuals ou small companies.
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=Tỷ suất
     LocalTax1IsNotUsed=Do not use second tax
    -LocalTax1IsUsedDesc=Use a second type of tax (other than VAT)
    -LocalTax1IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=Second type of tax
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=Do not use third tax
    -LocalTax2IsUsedDesc=Use a third type of tax (other than VAT)
    -LocalTax2IsNotUsedDesc=Do not use other type of tax (other than VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=Third type of tax
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE Management
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= By default the proposed RE is 0. End of rule.
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF Management
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= By default the proposed IRPF is 0. End of rule.
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE Management
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=By default the proposed RE is 0. End of rule.
    +LocalTax1IsUsedExampleES=In Spain they are professionals subject to some specific sections of the Spanish IAE.
    +LocalTax1IsNotUsedExampleES=In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    +LocalTax2ManagementES=IRPF Management
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=By default the proposed IRPF is 0. End of rule.
    +LocalTax2IsUsedExampleES=In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=Báo cáo thuế địa phương
     CalcLocaltax1=Bán - Mua
     CalcLocaltax1Desc=Báo cáo Thuế địa phương được tính toán với sự khác biệt giữa localtaxes bán hàng và mua hàng localtaxes
    @@ -958,7 +966,8 @@ CalcLocaltax3=Bán
     CalcLocaltax3Desc=Báo cáo Thuế địa phương là tổng của localtaxes bán hàng
     LabelUsedByDefault=Nhãn được sử dụng bởi mặc định nếu không có bản dịch có thể được tìm thấy với code đó
     LabelOnDocuments=Nhãn trên các tài liệu
    -NbOfDays=Nb của ngày
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=Vào cuối tháng
     CurrentNext=Current/Next
     Offset=Offset
    @@ -984,7 +993,7 @@ DatabaseUser=Người dùng cơ sở dữ liệu
     DatabasePassword=Mật khẩu cơ sở dữ liệu
     Tables=Bảng
     TableName=Tên bảng
    -NbOfRecord=Nb của bản ghi
    +NbOfRecord=No. of records
     Host=Máy chủ
     DriverType=Driver type
     SummarySystem=Tóm tắt thông tin hệ thống
    @@ -996,7 +1005,7 @@ Skin=Chủ đề giao diện
     DefaultSkin=Chủ đề giao diện mặc định
     MaxSizeList=Chiều dài tối đa cho danh sách
     DefaultMaxSizeList=Default max length for lists
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=Tin trong ngày
     MessageLogin=Tin trang đăng nhập
     LoginPage=Login page
    @@ -1005,8 +1014,8 @@ PermanentLeftSearchForm=Forrm tìm kiếm cố định trên menu bên trái
     DefaultLanguage=Ngôn ngữ mặc định để sử dụng (mã ngôn ngữ)
     EnableMultilangInterface=Kích hoạt giao diện đa ngôn ngữ
     EnableShowLogo=Hiển thị logo trên menu bên trái
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=Company/Organization
    +CompanyIds=Company/Organization identities
     CompanyName=Tên
     CompanyAddress=Địa chỉ
     CompanyZip=Zip
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=Chủ sở hữu của tài khoản ngân hàng %s
     BankModuleNotActive=Module tài khoản ngân hàng chưa được mở
     ShowBugTrackLink=Show link "<strong>%s</strong>"
     Alerts=Cảnh báo
    -DelaysOfToleranceBeforeWarning=Khoảng trì hoãn trước cảnh báo
    -DelaysOfToleranceDesc=Màn hình này cho phép bạn xác định trì hoãn trước khi chấp nhận một cảnh báo được báo cáo trên màn hình với Picto %s cho mỗi phần tử cuối.
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Khoảng trì hoãn (theo ngày) trước khi cảnh báo về đơn hàng đề xuất để đóng
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=Khoảng trì hoãn (theo ngày) trước khi cảnh báo về đơn hàng đề xuất không ra hóa đơn
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Khoảng trì hoãn (theo ngày) trước khi cảnh báo về dịch vụ để kích hoạt
    -Delays_MAIN_DELAY_RUNNING_SERVICES=Khoảng trì hoãn (theo ngày) trước khi cảnh báo về dịch vụ hết hạn
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Khoảng trì hoãn (theo ngày) trước khi cảnh báo về hóa đơn chưa thanh toán nhà cung cấp
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Khoảng trì hoãn (theo ngày) trước khi cảnh báo về hóa đơn chưa thanh toán của khách hàng
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Khoảng trì hoãn (theo ngày) trước khi cảnh báo về pending bank reconciliation
    -Delays_MAIN_DELAY_MEMBERS=Khoảng trì hoãn (theo ngày) trước khi cảnh báo về lệ phí thành viên bị trì hoãn
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Khoảng trì hoãn (theo ngày) trước khi cảnh báo đối với séc ứng trước để làm
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=The setup area is for initial setup parameters before starting to use Dolibarr.
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=Thông số tùy chọn quản lý thông tin menu đầu vào khác
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=Sự kiện kiểm toán bảo mật
     Audit=Kiểm toán
     InfoDolibarr=About Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=You can enable here the logging for Dolibarr security events. Admin
     AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
     SystemInfoDesc=Hệ thống thông tin là thông tin kỹ thuật linh tinh bạn nhận được trong chế độ chỉ đọc và có thể nhìn thấy chỉ cho quản trị viên.
     SystemAreaForAdminOnly=Khu vực này hiện có sẵn cho những người dùng quản trị. Không ai trong số phân quyền Dolibarr có thể làm giảm giới hạn này.
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=File number
     DisplayDesc=Bạn có thể chọn từng thông số liên quan đến Dolibarr nhìn và cảm thấy ở đây
     AvailableModules=Available app/modules
     ToActivateModule=Để kích hoạt mô-đun, đi vào Cài đặt Khu vực (Nhà-> Cài đặt-> Modules).
     SessionTimeOut=Time out for session
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=Trigger có sẵn
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=Triggers in this file are disabled by the <b>-NORUN</b> suffix in their name.
     TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
     TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
    @@ -1079,7 +1088,7 @@ DictionaryDesc=Chèn vào tất cả giá trị tham khảo. Bạn có thể th
     ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
     MiscellaneousDesc=All other security related parameters are defined here.
     LimitsSetup=Cài đặt Giới hạn và độ chính xác
    -LimitsDesc=Bạn có thể xác định giới hạn, độ chính xác và tối ưu hoá được sử dụng bởi Dolibarr ở đây
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=Số thập phân tối đa cho đơn giá
     MAIN_MAX_DECIMALS_TOT=Số thập phân tối đa cho tổng giá
     MAIN_MAX_DECIMALS_SHOWN=Max số thập phân cho giá được hiển thị trên màn hình (Add <b>...</b> sau khi con số này nếu bạn muốn xem <b>...</b> khi số là cắt ngắn khi hiển thị trên màn hình)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=Đơn giá chưa thuế của một sản phẩm
     TotalPriceAfterRounding=Tổng giá (chưa thuế/VAT/bao gồm thuế) sau khi làm tròn
     ParameterActiveForNextInputOnly=Thông số hiệu quả cho chỉ đầu vào kế tiếp
     NoEventOrNoAuditSetup=Chưa có sự kiện bảo mật được ghi nhận. Đây có thể là bình thường nếu kiểm toán đã không được kích hoạt trên trang "Cài đặt - Bảo mật - kiểm toán".
    -NoEventFoundWithCriteria=Không có sự kiện bảo mật đã được tìm thấy cho các tiêu chí tìm kiếm như vậy.
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=Xem thiết lập sendmail địa phương của bạn
     BackupDesc=Để thực hiện một sao lưu đầy đủ của Dolibarr, bạn phải:
     BackupDesc2=Save content of documents directory (<b>%s</b>) that contains all uploaded and generated files (So it includes all dump files generated at step 1).
    -BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use following assistant.
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=Thư mục lưu trữ nên được lưu trữ ở một nơi an toàn.
     BackupDescY=Tạo ra các tập tin dump nên được lưu trữ ở một nơi an toàn.
    -BackupPHPWarning=Sao lưu không thể được guaranted với phương pháp này. Tham chiếu trước đó
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=Để khôi phục lại một bản sao lưu Dolibarr, bạn phải:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
     RestoreMySQL=MySQL nhập dữ liệu
     ForcedToByAModule= Quy luật này buộc <b>%s</b> bởi một mô-đun được kích hoạt
    @@ -1108,31 +1117,31 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=You must run this command from
     YourPHPDoesNotHaveSSLSupport=Chức năng SSL không có sẵn trong chương trình PHP
     DownloadMoreSkins=Nhiều giao diện để tải về
     SimpleNumRefModelDesc=Returns the reference number with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence without hole and with no reset
    -ShowProfIdInAddress=Hiển thị id professionnal với các địa chỉ trên các tài liệu
    -ShowVATIntaInAddress=Hide VAT Intra num with addresses on documents
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=Partial translation
    -MAIN_DISABLE_METEO=Vô hiệu phần xem thời tiết
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=Standard mode
     MeteoStdModEnabled=Standard mode enabled
     MeteoPercentageMod=Percentage mode
     MeteoPercentageModEnabled=Percentage mode enabled
     MeteoUseMod=Click to use %s
     TestLoginToAPI=Kiểm tra đăng nhập vào API
    -ProxyDesc=Một số tính năng của Dolibarr cần phải có một kết nối Internet để làm việc. Xác định các thông số ở đây cho việc này. Nếu máy chủ Dolibarr là phía sau một máy chủ proxy, các tham số cho Dolibarr làm thế nào để truy cập Internet thông qua nó.
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=Truy cập bên ngoài
     MAIN_PROXY_USE=Sử dụng một máy chủ proxy (truy cập nếu không trực tiếp đến internet)
     MAIN_PROXY_HOST=Tên / Địa chỉ của máy chủ proxy
     MAIN_PROXY_PORT=Cổng của máy chủ proxy
     MAIN_PROXY_USER=Đăng nhập để sử dụng máy chủ proxy
     MAIN_PROXY_PASS=Mật khẩu để sử dụng máy chủ proxy
    -DefineHereComplementaryAttributes=Xác định đây tất cả các thuộc tính, không phải đã có sẵn theo mặc định, và bạn muốn được hỗ trợ cho %s.
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=Thuộc tính bổ sung
     ExtraFieldsLines=Thuộc tính bổ sung (dòng)
     ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
     ExtraFieldsSupplierOrdersLines=Thuộc tính bổ sung (chi tiết đơn hàng)
     ExtraFieldsSupplierInvoicesLines=Thuộc tính bổ sung (chi tiết hóa đơn)
     ExtraFieldsThirdParties=Thuộc tính bổ sung (của bên thứ ba)
    -ExtraFieldsContacts=Thuộc tính bổ sung (liên lạc/địa chỉ)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=Thuộc tính bổ sung (thành viên)
     ExtraFieldsMemberType=Thuộc tính bổ sung (loại thành viên)
     ExtraFieldsCustomerInvoices=Thuộc tính bổ sung (hoá đơn)
    @@ -1146,43 +1155,44 @@ AlphaNumOnlyLowerCharsAndNoSpace=only alphanumericals and lower case characters
     SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
     PathToDocuments=Đường dẫn đến tài liệu
     PathDirectory=Thư mục
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=Setup of translation
     TranslationKeySearch=Search a translation key or string
     TranslationOverwriteKey=Overwrite a translation string
     TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
     TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=Translation string
     CurrentTranslationString=Current translation string
     WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
     NewTranslationStringToShow=New translation string to show
     OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=Bạn phải có ít nhất 1 mô-đun cho phép
    -ClassNotFoundIntoPathWarning=Lớp %s không tìm thấy con đường vào PHP
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=Yes in summer
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=Session storage encrypted by Suhosin
     ConditionIsCurrently=Điều kiện là hiện tại %s
    -YouUseBestDriver=You use driver %s that is best driver available currently.
    -YouDoNotUseBestDriver=You use drive %s but driver %s is recommended.
    -NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization.
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=Tối ưu hóa tìm kiếm
    -YouHaveXProductUseSearchOptim=You have %s product into database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 into Home-Setup-Other, you limit the search to the beginning of strings making possible for database to use index and you should get an immediate response.
    -BrowserIsOK=Bạn đang sử dụng trình duyệt web %s. Trình duyệt này là ok cho bảo mật và hiệu suất.
    -BrowserIsKO=Bạn đang sử dụng trình duyệt web %s. Trình duyệt này được biết đến là một lựa chọn tốt cho bảo mật, hiệu suất và độ tin cậy. Chúng tôi recommand bạn sử dụng Firefox, Chrome, Opera hay Safari.
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug is loaded.
     XCacheInstalled=XCache is loaded.
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=Biên soạn của trường %s
     FillThisOnlyIfRequired=Example: +2 (fill only if timezone offset problems are experienced)
     GetBarCode=Nhận mã vạch
     ##### Module password generation
     PasswordGenerationStandard=Quay trở lại một mật khẩu được tạo ra theo thuật toán Dolibarr nội bộ: 8 ký tự có chứa số chia sẻ và ký tự trong chữ thường.
    -PasswordGenerationNone=Do not suggest any generated password. Password must be typed in manually.
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=Return a password according to your personally defined configuration.
     SetupPerso=According to your configuration
     PasswordPatternDesc=Password pattern description
    @@ -1195,23 +1205,23 @@ UserMailRequired=Email được yêu cầu để tạo một người dùng mớ
     HRMSetup=HRM module setup
     ##### Company setup #####
     CompanySetup=Cài đặt module Công ty
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=EMails notifications feature allows you to silently send automatic mail, for some Dolibarr events. Targets of notifications can be defined:
     NotificationsDescUser=* per users, one user at time.
     NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
     NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=Tài liệu mẫu
    -DocumentModelOdt=Generate documents from OpenDocuments templates (.ODT or .ODS files for OpenOffice, KOffice, TextEdit,...)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=Watermark vào dự thảo văn bản
     JSOnPaimentBill=Kích hoạt tính năng tự động điền vào các dòng thanh toán trên form thanh toán
    -CompanyIdProfChecker=Rules on Professional Ids
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
     MustBeInvoiceMandatory=Mandatory to validate invoices?
     TechnicalServicesProvided=Technical services provided
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=Root URL of %s server : %s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=Một liên kết xuất dữ liệu sang định dạng <b>%s</b> có sẵn tại liên kết sau đây: %s
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=Một liên kết xuất dữ liệu sang định dạng
     BillsSetup=Cài đặt module hóa đơn
     BillsNumberingModule=Mô hình đánh số Hoá đơn và giấy báo có
     BillsPDFModules=Mô hình chứng từ hóa đơn
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=Payment documents models
     CreditNote=Lưu ý tín dụng
     CreditNotes=Giấy báo có
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= Quản lý một Đăng nhập cho mỗi thành viên
     AdherentMailRequired=Email được yêu cầu để tạo ra một thành viên mới
     MemberSendInformationByMailByDefault=Hộp kiểm để gửi thư xác nhận cho các thành viên (xác nhận hoặc đăng ký mới) là theo mặc định
     VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=Thiết lập LDAP
     LDAPGlobalParameters=Các thông số toàn cầu
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=Test member type synchronization
     LDAPTestSearch= Test a LDAP search
     LDAPSynchroOK=Synchronization test successful
     LDAPSynchroKO=Failed synchronization test
    -LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that connexion to server is correctly configured and allows LDAP udpates
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP connect to LDAP server successful (Server=%s, Port=%s)
     LDAPTCPConnectKO=TCP connect to LDAP server failed (Server=%s, Port=%s)
    -LDAPBindOK=Connect/Authentificate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    -LDAPBindKO=Connect/Authentificate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP server configured for version 3
     LDAPSetupForVersion2=LDAP server configured for version 2
     LDAPDolibarrMapping=Dolibarr Mapping
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=Login (samba, activedirectory)
     LDAPFieldLoginSambaExample=Example : samaccountname
     LDAPFieldFullname=Họ và tên
     LDAPFieldFullnameExample=Example : cn
    -LDAPFieldPasswordNotCrypted=Password not crypted
    -LDAPFieldPasswordCrypted=Password crypted
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=Example : userPassword
     LDAPFieldCommonNameExample=Ví dụ: cn
     LDAPFieldName=Tên
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP
     LDAPDescValues=Example values are designed for <b>OpenLDAP</b> with following loaded schemas: <b>core.schema, cosine.schema, inetorgperson.schema</b>). If you use thoose values and OpenLDAP, modify your LDAP config file <b>slapd.conf</b> to have all thoose schemas loaded.
     ForANonAnonymousAccess=For an authenticated access (for a write access for example)
     PerfDolibarr=Báo cáo cài đặt trình diễn/ tối ưu hóa
    -YouMayFindPerfAdviceHere=Bạn sẽ tìm thấy trên trang này một số kiểm tra và lời khuyên liên quan đến hiệu suất.
    -NotInstalled=Không cài đặt, vì vậy máy chủ của bạn không chậm vì điều này.
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=Applicative cache
     MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
     MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
     MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
     OPCodeCache=OPCode cache
    -NoOPCodeCacheFound=No OPCode cache found. May be you use another OPCode cache than XCache or eAccelerator (good), may be you don't have OPCode cache (very bad).
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP cache for static resources (css, img, javascript)
     FilesOfTypeCached=Files of type %s are cached by HTTP server
     FilesOfTypeNotCached=Files of type %s are not cached by HTTP server
     FilesOfTypeCompressed=Files of type %s are compressed by HTTP server
     FilesOfTypeNotCompressed=Files of type %s are not compressed by HTTP server
     CacheByServer=Cache by server
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=Cache by browser
     CompressionOfResources=Compression of HTTP responses
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=Such an automatic detection is not possible with current browsers
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=Default search filters
     DefaultSortOrder=Default sort orders
     DefaultFocus=Default focus fields
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=Cài đặt module sản phẩm
     ServiceSetup=Cài đặt module dịch vụ
     ProductServiceSetup=Cài đặt module Sản phẩm và Dịch vụ
     NumberOfProductShowInSelect=Số lượng tối đa của sản phẩm trong danh sách combo chọn (0 = không giới hạn)
    -ViewProductDescInFormAbility=Hình ảnh hóa của mô tả sản phẩm bằng trong các biểu mẫu (nếu không bật lên cửa sổ tooltip)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
     MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Hình ảnh hóa mô tả sản phẩm trên ngôn ngữ bên thứ ba
    -UseSearchToSelectProductTooltip=Also if you have a large number of product (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=Loại mã vạch mặc định để sử dụng cho các sản phẩm
     SetDefaultBarcodeTypeThirdParties=Loại mã vạch mặc định để sử dụng cho các bên thứ ba
     UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    @@ -1503,7 +1516,7 @@ SendingsSetup=Cài đặt module Gửi
     SendingsReceiptModel=Mô hình biên nhận Gửi
     SendingsNumberingModules=Module đánh số Gửi
     SendingsAbility=Support shipping sheets for customer deliveries
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=Free text trên phiếu vận chuyển
     ##### Deliveries #####
     DeliveryOrderNumberingModules=Module đánh số phiếu giao nhận sản phẩm
    @@ -1515,18 +1528,18 @@ AdvancedEditor=Trình soạn thảo nâng cao
     ActivateFCKeditor=Kích hoạt trình soạn thảo nâng cao cho:
     FCKeditorForCompany=WYSIWIG tạo / sửa của các yếu tố mô tả và ghi chú (trừ các sản phẩm / dịch vụ)
     FCKeditorForProduct=WYSIWIG tạo / sửa của sản phẩm / dịch vụ mô tả và ghi chú
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= WYSIWIG creation/edition for mass eMailings (Công cụ->eMailing)
     FCKeditorForUserSignature=WYSIWIG tạo / sửa chữ ký người sử dụng
     FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database doesn't look to be an OSCommerce database (Key %s not found in table %s).
    -OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successfull.
    -OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached.
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=Connection to server '%s' with user '%s' failed.
     ##### Stock #####
     StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=Nếu bạn sử dụng module điểm bán hàng(module POS được cung cấp mặc định hoặc mô-đun bên ngoài khác), thiết lập này có thể được bỏ qua bởi Module Điểm bán hàng. Hầu hết module điểm bán hàng được thiết kế để tạo lập tức một hóa đơn và giảm tồn kho theo mặc định bất cứ điều gì là tùy chọn ở đây. Vì vậy, nếu bạn cần hay không giảm tồn kho khi đăng ký bán từ điểm bán hàng của bạn, kiểm tra lại cài đặt module POS của bạn.
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=Menu bị xóa
     Menus=Menu
    @@ -1548,7 +1561,7 @@ DetailRight=Điều kiện để hiển thị menu không được phép màu x
     DetailLangs=Tên file lang cho việc dịch mã nhãn
     DetailUser=Trong/ Ngoài/ Tất cả
     Target=Target
    -DetailTarget=Target for links (_blank top open a new window)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=Level (-1:top menu, 0:header menu, >0 menu and sub menu)
     ModifMenu=Thay đổi menu
     DeleteMenu=Xóa menu vào
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=Thuế GTGT là do: <br> - Giao hàng đối với hàng h
     OptionVatDebitOptionDesc=VAT is due:<br>- on delivery for goods (we use invoice date)<br>- on invoice (debit) for services
     OptionPaymentForProductAndServices=Cash basis for products and services
     OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=Ngày giao hàng
     OnPayment=Ngày thanh toán
     OnInvoice=Trên hóa đơn
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=Mã kế toán mua hàng
     AgendaSetup=Cài đặt module sự kiện và chương trình nghị sự
     PasswordTogetVCalExport=Khóa được phép xuất liên kết
     PastDelayVCalExport=Không xuất dữ liệu sự kiện cũ hơn
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Thiết lập tự động loại sự kiện này vào khung bộ lọc tìm kiếm chương trình nghị sự
    -AGENDA_DEFAULT_FILTER_STATUS=Thiết lập tự động trạng thái này cho các sự kiện vào khung bộ lọc tìm kiếm chương trình nghị sự
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=Tab mà bạn muốn mở mặc định khi lựa chọn menu chương trình nghị sự
     AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
     AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
     ##### Clicktodial #####
     ClickToDialSetup=Click To Dial module setup
     ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=Use just a link "tel:" on phone numbers
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=Điểm bán hàng
     CashDeskSetup=Cài đặt module điểm bán hàng
    -CashDeskThirdPartyForSell=Bên thứ ba mặc định chung để sử dụng cho Bán
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=Tài khoản mặc định để sử dụng để nhận thanh toán bằng tiền mặt
     CashDeskBankAccountForCheque= Tài khoản mặc định để sử dụng để nhận thanh toán bằng séc
     CashDeskBankAccountForCB= Tài khoản mặc định để sử dụng để nhận thanh toán bằng thẻ tín dụng
    -CashDeskDoNotDecreaseStock=Vô hiệu giảm tồn kho khi bán được thực hiện từ Điểm bán hàng (nếu "không", giảm tồn kho được thực hiện đối với mỗi lần bán được thực hiện từ POS, bất cứ cái gì thiết lập tùy chọn trong module tồn kho).
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=Buộc và hạn chế kho hàng để sử dụng cho giảm tồn kho
    -StockDecreaseForPointOfSaleDisabled=Giảm tồn kho từ Điểm bán hàng đã bị vô hiệu
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=Giảm tồn kho trong POS thì không tương thích với quản lý lô hàng
    -CashDeskYouDidNotDisableStockDecease=Bạn không vô hiệu giảm tồn kho khi tạo một lần bán từ Điểm bán hàng. Vì vậy kho hàng thì được yêu cầu
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=Cài đặt module Bookmark
    -BookmarkDesc=Module này cho phép bạn quản lý bookmark. Bạn cũng có thể thêm các phím tắt cho bất kỳ trang Dolibarr hoặc các trang web externale trên menu bên trái của bạn.
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=Số lượng tối đa các bookmark để hiển thị trong menu bên trái
     ##### WebServices #####
     WebServicesSetup=Cài đặt module webservices
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
     MultiCompanySetup=Thiết lập mô-đun đa công ty
     ##### Suppliers #####
     SuppliersSetup=Thiết lập mô-đun nhà cung cấp
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
     SuppliersInvoiceNumberingModel=Mô hình đánh số hóa đơn nhà cung cấp
     IfSetToYesDontForgetPermission=Nếu chỉnh là có, đừng quên cung cấp phân quyền cho nhóm hoặc người dùng được phép cho duyệt lần hai.
    @@ -1654,7 +1667,7 @@ ProjectsSetup=Cài đặt module dự án
     ProjectsModelModule=Kiểu chứng từ báo cáo dự án
     TasksNumberingModules=Module đánh số tác vụ
     TaskModelModule=Kiểu chứng từ báo cáo tác vụ
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=Accounting periods
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=Bạn có thể thấy tù
     ListOfNotificationsPerUser=List of notifications per user*
     ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
     ListOfFixedNotifications=Danh sách thông báo cố định
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=Thủ thuật tạo file dump sao lưu dự phòng cơ sở dữ liệu
     SomethingMakeInstallFromWebNotPossible=Cài đặt module bên ngoài là không thể từ giao diện web với các lý do sau:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=Cài đặt các module bên ngoài t
     ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=Highlight table lines when mouse move passes over
     HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=Text color of Page title
     LinkColor=Color of links
     PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=Màu nền của hàng chẵn
     MinimumNoticePeriod=Minimum notice period (Your leave request must be done before this delay)
     NbAddedAutomatically=Number of days added to counters of users (automatically) each month
     EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=The RGB color is in HEX format, eg: FF0000
     PositionIntoComboList=Position of line into combo lists
     SellTaxRate=Sale tax rate
     RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
     UrlTrackingDesc=If the provider or transport service offer a page or web site to check status of your shipping, you can enter it here. You can use the key {TRACKID} into URL parameters so the system will replace it with value of tracking number user entered into shipment card.
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=This template record is dedicated to which element
     TypeOfTemplate=Type of template
    -TemplateIsVisibleByOwnerOnly=Template is visible by owner only
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=Visible everywhere
     VisibleNowhere=Visible nowhere
     FixTZ=TimeZone fix
    @@ -1747,10 +1761,10 @@ YouUseLastStableVersion=You use the latest stable version
     TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
     TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=Templates for product documents
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=See * note for list of possible substitution variables
     SeeChangeLog=See ChangeLog file (english only)
     AllPublishers=All publishers
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=Add other pages or services
     AddModels=Add document or numbering templates
     AddSubstitutions=Add keys substitutions
     DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=List of available APIs
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=Landing page
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
     ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=Left margin on PDF
     MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
     MAIN_PDF_MARGIN_TOP=Top margin on PDF
     MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=Several language variants found
     COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
     COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=Configuration du module Resource
     UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
     DisabledResourceLinkUser=Disable feature to link a resource to users
     DisabledResourceLinkContact=Disable feature to link a resource to contacts
     ConfirmUnactivation=Confirm module reset
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/vi_VN/companies.lang b/htdocs/langs/vi_VN/companies.lang
    index 7f5f7c14362..1d1dbde38e7 100644
    --- a/htdocs/langs/vi_VN/companies.lang
    +++ b/htdocs/langs/vi_VN/companies.lang
    @@ -5,16 +5,16 @@ SelectThirdParty=Chọn một bên thứ ba
     ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
     DeleteContact=Xóa một liên lạc/địa chỉ
     ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=Bên thứ ba mới
    -MenuNewCustomer=Khách hàng mới
    -MenuNewProspect=KH tiềm năng mới
    -MenuNewSupplier=New vendor
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=Cá nhân mới
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewCompany=Công ty mới (khách nàng tiềm năng, khách hàng, nhà cung cấp)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
    +CreateDolibarrThirdPartySupplier=Tạo bên thứ ba mới (nhà cung cấp)
     CreateThirdPartyOnly=Tạo bên thứ ba
    -CreateThirdPartyAndContact=Create a third party + a child contact
    +CreateThirdPartyAndContact=Tạo 1 bên thứ ba + 1 đầu mối cấp con
     ProspectionArea=Khu vực khảo sát
     IdThirdParty=ID bên thứ ba
     IdCompany=ID công ty
    @@ -24,27 +24,27 @@ ThirdPartyContacts=Liên lạc bên thứ ba
     ThirdPartyContact=Liên lạc/địa chỉ bên thứ ba
     Company=Công ty
     CompanyName=Tên công ty
    -AliasNames=Alias name (commercial, trademark, ...)
    -AliasNameShort=Alias name
    +AliasNames=Tên viết tắt (tài chính, thương hiệu)
    +AliasNameShort=Alias Name
     Companies=Các công ty
    -CountryIsInEEC=Quốc gia thuộc Cộng đồng Kinh tế châu Âu
    -ThirdPartyName=Tên của bên thứ ba
    -ThirdPartyEmail=Third party email
    -ThirdParty=Bên thứ ba
    -ThirdParties=Các bên thứ ba
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
    +ThirdPartyEmail=Email bên thứ ba
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=KH tiềm năng
     ThirdPartyProspectsStats=Các KH tiềm năng
     ThirdPartyCustomers=Các khách hàng
     ThirdPartyCustomersStats=Các khách hàng
     ThirdPartyCustomersWithIdProf12=Khách hàng  với %s hoặc %s
    -ThirdPartySuppliers=Vendors
    -ThirdPartyType=Loại bên thứ ba
    +ThirdPartySuppliers=Nhà cung cấp
    +ThirdPartyType=Type of company
     Individual=Cá nhân
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=Công ty mẹ
     Subsidiaries=Các chi nhánh
    -ReportByMonth=Report by month
    -ReportByCustomers=Report by customer
    +ReportByMonth=Báo cáo theo tháng
    +ReportByCustomers=Báo cáo theo khách hàng
     ReportByQuarter=Báo cáo theo tỷ lệ
     CivilityCode=Mã Civility
     RegisteredOffice=Trụ sở đăng ký
    @@ -52,12 +52,12 @@ Lastname=Họ
     Firstname=Tên
     PostOrFunction=Vị trí công việc
     UserTitle=Tiêu đề
    -NatureOfThirdParty=Nature of Third party
    +NatureOfThirdParty=Nature của Third party
     Address=Địa chỉ
     State=Bang/Tỉnh
    -StateShort=State
    +StateShort=Tỉnh/ thành
     Region=Vùng
    -Region-State=Region - State
    +Region-State=Vùng - Tỉnh/ thành
     Country=Quốc gia
     CountryCode=Mã quốc gia
     CountryId=ID quốc gia
    @@ -69,18 +69,18 @@ Chat=Chat
     PhonePro=Prof. phone
     PhonePerso=Pers. phone
     PhoneMobile=Mobile
    -No_Email=Refuse mass e-mailings
    +No_Email=Từ chối gửi email hàng loạt
     Fax=Fax
     Zip=Mã Zip
     Town=Thành phố
     Web=Web
     Poste= Chức vụ
    -DefaultLang=Ngôn ngữ mặc định
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    -VATIsNotUsed=Sales tax is not used
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
    +VATIsNotUsed=Thuế kinh doanh không được dùng
     CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
     PaymentBankAccount=Payment bank account
     OverAllProposals=Đơn hàng đề xuất
    @@ -258,7 +258,7 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    +VATIntra=Sales Tax/VAT ID
     VATIntraShort=Tax ID
     VATIntraSyntaxIsValid=Cú pháp hợp lệ
     VATReturn=VAT return
    @@ -274,8 +274,8 @@ CompanyHasRelativeDiscount=Khách hàng này có giảm giá mặc định là <
     CompanyHasNoRelativeDiscount=Khách hàng này không có mặc định giảm giá theo %
     HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
     HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=Khách hàng này vẫn có ghi nợ cho <b>%s</b> %s
     HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
     HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    @@ -287,7 +287,7 @@ CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
     SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
     SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
     DiscountNone=Không
    -Supplier=Nhà cung cấp
    +Supplier=Vendor
     AddContact=Tạo liên lạc
     AddContactAddress=Tạo liên lạc/địa chỉ
     EditContact=Sửa liên lạc
    @@ -303,22 +303,22 @@ AddThirdParty=Tạo bên thứ ba
     DeleteACompany=Xóa một công ty
     PersonalInformations=Dữ liệu cá nhân
     AccountancyCode=Tài khoản kế toán
    -CustomerCode=Mã khách hàng
    -SupplierCode=Vendor code
    -CustomerCodeShort=Mã khách hàng
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=Mã khách hàng, duy nhất cho tất cả khách hàng
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=Yêu cầu nếu bên thứ ba là một khách hàng hoặc KH tiềm năng
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=Xác nhận kiểm soát bởi mô-đun
    -ThisIsModuleRules=Đây là quy tắc cho các mô-đun này
    +RequiredIfSupplier=Buộc phải nhập nếu bên thứ ba là nhà cung cấp
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=KH tiềm năng để liên lạc
     CompanyDeleted=Công ty "%s" đã xóa khỏi cơ sở dữ liệu.
     ListOfContacts=Danh sách liên lạc/địa chỉ
     ListOfContactsAddresses=Danh sách liên lạc/địa chỉ
    -ListOfThirdParties=Danh sách các bên thứ ba
    -ShowCompany=Show third party
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=Hiện liên lạc
     ContactsAllShort=Tất cả (không lọc)
     ContactType=Loại liên lạc
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=Liên lạc này không phải cho bất kỳ đơn hàn
     NoContactForAnyContract=Liên lạc này không phải cho bất kỳ hợp đồng nào
     NoContactForAnyInvoice=Liên lạc này không phải cho bất kỳ hóa đơn nào
     NewContact=Liên lạc mới
    -NewContactAddress=Liên lạc/địa chỉ mới
    +NewContactAddress=New Contact/Address
     MyContacts=Liên lạc của tôi
     Capital=Vốn
     CapitalOf=Vốn của %s
     EditCompany=Chỉnh sửa công ty
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=Kiểm tra
    -VATIntraCheckDesc=Các liên kết <b>%s</b> cho phép yêu cầu các dịch vụ kiểm tra thuế VAT châu Âu. Một truy cập internet từ máy chủ bên ngoài là cần thiết cho dịch vụ này để làm việc.
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=Check Intracomunnautary VAT on European commision site
    -VATIntraManualCheck=You can also check manually from european web site <a href="%s" target="_blank">%s</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=Check not possible. Check service is not provided by the member state (%s).
    -NorProspectNorCustomer=Cũng không phải khách hàng tiềm năng, cũng không phải khách hàng
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=Nhân viên
     ProspectLevelShort=Tiềm năng
     ProspectLevel=KH tiềm năng
    @@ -387,12 +387,12 @@ ExportCardToFormat=Thẻ xuất để định dạng
     ContactNotLinkedToCompany=Liên lạc không liên quan đến bất kỳ bên thứ ba
     DolibarrLogin=Đăng nhập Dolibarr
     NoDolibarrAccess=Không truy cập Dolibarr
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=Liên lạc và các thuộc tính
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=Mức giá
     DeliveryAddress=Địa chỉ giao hàng
     AddAddress=Thêm địa chỉ
    @@ -402,33 +402,33 @@ DeleteFile=Xóa tập tin
     ConfirmDeleteFile=Bạn có chắc muốn xóa tập tin này?
     AllocateCommercial=Assigned to sales representative
     Organization=Tổ chức
    -FiscalYearInformation=Thông tin về năm tài chính
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=Tháng bắt đầu của năm tài chính
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=Danh sách KH tiềm năng
    -ListCustomersShort=Danh sách khách hàng
    -ThirdPartiesArea=Bên thứ ba và các khu vực liên lạc
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=Tổng của bên thứ ba duy nhất
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=Mở
     ActivityCeased=Đóng
    -ThirdPartyIsClosed=Third party is closed
    -ProductsIntoElements=List of products/services into %s
    +ThirdPartyIsClosed=Bên thứ ba bị đóng
    +ProductsIntoElements=Danh sách sản phẩm/ dịch vụ vào %s
     CurrentOutstandingBill=Công nợ hiện tại
     OutstandingBill=Công nợ tối đa
     OutstandingBillReached=Max. for outstanding bill reached
     OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=Mã này tự do. Mã này có thể được sửa đổi bất cứ lúc nào.
     ManagingDirectors=Tên quản lý (CEO, giám đốc, chủ tịch...)
     MergeOriginThirdparty=Duplicate third party (third party you want to delete)
     MergeThirdparties=Merge third parties
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
     ThirdpartiesMergeSuccess=Third parties have been merged
     SaleRepresentativeLogin=Login of sales representative
     SaleRepresentativeFirstname=First name of sales representative
     SaleRepresentativeLastname=Last name of sales representative
     ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/vi_VN/errors.lang b/htdocs/langs/vi_VN/errors.lang
    index 2a2fc25379a..fa1048fd020 100644
    --- a/htdocs/langs/vi_VN/errors.lang
    +++ b/htdocs/langs/vi_VN/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=Giá trị '% s' có định dạng sai ngày
     ErrorWrongDate=Ngày là không đúng!
     ErrorFailedToWriteInDir=Không thể viết trong thư mục% s
     ErrorFoundBadEmailInFile=Tìm thấy cú pháp email không chính xác cho% s dòng trong tập tin (ví dụ dòng% s với email =% s)
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=Một số trường yêu cầu không được lấp đầy.
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=Không thể tạo một thư mục. Kiểm tra xem người sử dụng máy chủ web có quyền ghi vào thư mục tài liệu Dolibarr. Nếu tham số <b>safe_mode</b> được kích hoạt trên PHP này, hãy kiểm tra các tập tin php Dolibarr sở hữu cho người sử dụng máy chủ web (hoặc một nhóm).
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Xin vui lòng điền giá trị so với danh sách l
     ErrorNoValueForCheckBoxType=Xin vui lòng điền giá trị so với danh sách hộp
     ErrorNoValueForRadioType=Xin vui lòng điền giá trị so với danh sách phát thanh
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=<b>Dòng% s</b> không được chứa các ký tự đặc biệt.
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=Không có mô-đun kế toán kích hoạt
     ErrorExportDuplicateProfil=Tên hồ sơ này đã tồn tại cho bộ xuất khẩu này.
     ErrorLDAPSetupNotComplete=Dolibarr-LDAP phù hợp là không đầy đủ.
     ErrorLDAPMakeManualTest=Một tập tin .ldif đã được tạo ra trong thư mục% s. Hãy thử để tải nó bằng tay từ dòng lệnh để có thêm thông tin về lỗi.
    -ErrorCantSaveADoneUserWithZeroPercentage=Không thể lưu một hành động với "statut không bắt đầu" nếu trường "được thực hiện bởi" cũng được làm đầy.
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=Tài liệu tham khảo dùng để tạo đã tồn tại.
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
     ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Không thể xóa kỷ lục. Nó đã được sử dụng hoặc đưa vào đối tượng khác.
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=Javascript không được vô hiệu hóa để làm việc có tính năng này. Để kích hoạt / vô hiệu hóa Javascript, bạn vào menu chủ-> Setup-> Display.
     ErrorPasswordsMustMatch=Cả hai mật khẩu gõ phải phù hợp với nhau
    -ErrorContactEMail=Một lỗi kỹ thuật xảy ra. Xin vui lòng liên hệ với quản trị viên để sau <b>email% s</b> en cung cấp các mã <b>lỗi% s</b> trong thông điệp của bạn, hoặc thậm chí tốt hơn bằng cách thêm một bản sao màn hình của trang này.
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=Giá trị sai số cho lĩnh <b>vực% s</b> (giá trị <b>'% s'</b> không phù hợp với quy tắc <b>regex% s)</b>
     ErrorFieldValueNotIn=Giá trị sai số cho lĩnh <b>vực% s</b> (giá trị <b>'% s'</b> không phải là một giá trị có sẵn vào lĩnh <b>vực% s</b> của <b>bảng% s)</b>
     ErrorFieldRefNotIn=Giá trị sai số cho lĩnh <b>vực% s</b> (giá trị <b>'% s'</b> không phải là ref <b>hiện% s)</b>
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=Các chương trình chống virus đã không th
     ErrorSpecialCharNotAllowedForField=Ký tự đặc biệt không được phép cho lĩnh vực "% s"
     ErrorNumRefModel=Một tham chiếu tồn tại vào cơ sở dữ liệu (% s) và không tương thích với quy tắc đánh số này. Di chuyển hồ sơ hoặc tài liệu tham khảo đổi tên để kích hoạt module này.
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=Lỗi trên mặt nạ
     ErrorBadMaskFailedToLocatePosOfSequence=Lỗi, mặt nạ mà không có số thứ tự
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=Lỗi, giá trị thiết lập lại xấu
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=Lỗi. Chọn ít nhất một mục.
    -ErrorDeleteNotPossibleLineIsConsolidated=Xóa không thể vì hồ sơ được liên kết với một ngân hàng transation được hoà giải
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=% S được gán cho một phần ba
     ErrorFailedToSendPassword=Không gửi mật khẩu
     ErrorFailedToLoadRSSFile=Không có nguồn cấp dữ liệu RSS. Cố gắng thêm MAIN_SIMPLEXMLLOAD_DEBUG liên tục nếu các thông báo lỗi không cung cấp đủ thông tin.
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=Người sử dụng có đăng <b>nhập% s</b> không
     ErrorLoginHasNoEmail=Thành viên này không có địa chỉ email. Quá trình hủy bỏ.
     ErrorBadValueForCode=Bad giá trị so với mã bảo vệ. Hãy thử lại với giá trị mới ...
     ErrorBothFieldCantBeNegative=Fields% s và% s không thể được cả hai tiêu cực
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=Tài khoản người <b>dùng% s</b> được sử dụng để thực hiện các máy chủ web không có sự cho phép cho điều đó
     ErrorNoActivatedBarcode=Không có loại mã vạch kích hoạt
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad định dạng!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Lỗi, có một số việc giao hàng có liên quan đến lô hàng này. Xóa từ chối.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Không thể xóa một khoản thanh toán được chia sẻ bởi ít nhất một hóa đơn với tình trạng payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=Dấu trang với danh hiệu này hay mục tiêu
     WarningPassIsEmpty=Cảnh báo, mật khẩu cơ sở dữ liệu rỗng. Đây là một lỗ hổng bảo mật. Bạn nên thêm một mật khẩu để cơ sở dữ liệu của bạn và thay đổi tập tin conf.php của bạn để phản ánh điều này.
     WarningConfFileMustBeReadOnly=Cảnh báo, tập tin cấu hình của bạn <b>(htdocs / conf / conf.php)</b> có thể được ghi đè bởi các máy chủ web. Đây là một lỗ hổng bảo mật nghiêm trọng. Sửa đổi quyền của tập tin được trong chế độ chỉ đọc cho người sử dụng hệ điều hành được sử dụng bởi máy chủ Web. Nếu bạn sử dụng Windows và định dạng FAT cho đĩa cứng của bạn, bạn phải biết rằng hệ thống tập tin này không cho phép để thêm quyền truy cập vào tập tin, vì vậy không thể hoàn toàn an toàn.
     WarningsOnXLines=Cảnh báo trên hồ sơ <b>nguồn% s</b> (s)
    -WarningNoDocumentModelActivated=Không có mô hình, để phát tài liệu, đã được kích hoạt. Một mô hình sẽ được chọn lựa theo mặc định cho đến khi bạn kiểm tra cài đặt module của bạn.
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Cảnh báo, một khi cài đặt xong, bạn phải vô hiệu hóa cài đặt / di chuyển các công cụ bằng cách thêm một <b>install.lock</b> tập tin vào thư <b>mục% s.</b> Thiếu tập tin này là một lỗ hổng bảo mật.
    -WarningUntilDirRemoved=Tất cả các cảnh báo bảo mật (có thể nhìn thấy bằng cách chỉ sử dụng admin) sẽ vẫn hoạt động miễn là dễ bị tổn thương có mặt (hoặc MAIN_REMOVE_INSTALL_WARNING liên tục được thêm vào trong Setup-> thiết lập khác).
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Cảnh báo, đóng cửa được thực hiện ngay cả khi số lượng khác nhau giữa các nguồn và đích yếu tố. Bật tính năng này một cách thận trọng.
     WarningUsingThisBoxSlowDown=Cảnh báo, sử dụng hộp này làm chậm nghiêm túc tất cả các trang hiển thị hộp.
     WarningClickToDialUserSetupNotComplete=Thiết lập các thông tin ClickToDial cho người dùng của bạn không hoàn thành (xem tab ClickToDial vào thẻ người dùng của bạn).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/vi_VN/interventions.lang b/htdocs/langs/vi_VN/interventions.lang
    index fc59f21f80e..a0134fb6939 100644
    --- a/htdocs/langs/vi_VN/interventions.lang
    +++ b/htdocs/langs/vi_VN/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=Các can thiệp
     InterventionCard=Thẻ can thiệp
     NewIntervention=Can thiệp mới
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=Danh sách can thiệp
     ActionsOnFicheInter=Hành động can thiệp vào
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/vi_VN/main.lang b/htdocs/langs/vi_VN/main.lang
    index 8fd88af55d9..1e7e0aad3c0 100644
    --- a/htdocs/langs/vi_VN/main.lang
    +++ b/htdocs/langs/vi_VN/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=Lỗi gửi mail (người gửi=%s, người nhận=%s)
     ErrorFileNotUploaded=Tập tin không được tải lên. Kiểm tra kích thước không vượt quá tối đa cho phép, không gian miễn phí có sẵn trên đĩa và không có một tập tin đã có cùng tên trong thư mục này.
     ErrorInternalErrorDetected=Lỗi được phát hiện
     ErrorWrongHostParameter=Tham số máy chủ sai
    -ErrorYourCountryIsNotDefined=Quốc gia của bạn không được xác định. Đi đến Trang chủ-Thiết lập-Chỉnh sửa và đăng lại mẫu.
    -ErrorRecordIsUsedByChild=Không thể xóa bản ghi này. Bản ghi này được sử dụng bởi ít nhất một bản ghi con.
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=Giá trị sai
     ErrorWrongValueForParameterX=Giá trị sai cho tham số %s
     ErrorNoRequestInError=Không yêu cầu do lỗi
    -ErrorServiceUnavailableTryLater=Dịch vụ không sẵn sàng cho thời điểm này. Hãy thử lại sau.
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
     ErrorDuplicateField=Trùng giá trị trong trường duy nhất
    -ErrorSomeErrorWereFoundRollbackIsDone=Một vài lỗi đã được tìm thấy. Chúng tôi đã thay đổi trở lại
    -ErrorConfigParameterNotDefined=Thông số <b>%s</b> không được định nghĩa bên trong tập tin cấu hình Dolibarr <b>conf.php</b>.
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
     ErrorCantLoadUserFromDolibarrDatabase=Không tìm thấy người dùng <b>%s</b> trong cơ sở dữ liệu Dolibarr.
     ErrorNoVATRateDefinedForSellerCountry=Lỗi, không xác định tỉ lệ VAT cho quốc gia '%s'.
     ErrorNoSocialContributionForSellerCountry=Error, no social/fiscal taxes type defined for country '%s'.
     ErrorFailedToSaveFile=Lỗi, lưu tập tin thất bại
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
     NotAuthorized=You are not authorized to do that.
     SetDate=Thiết lập ngày
     SelectDate=Chọn một ngày
    @@ -78,10 +78,10 @@ FileRenamed=The file was successfully renamed
     FileGenerated=The file was successfully generated
     FileSaved=The file was successfully saved
     FileUploaded=Các tập tin được tải lên thành công
    -FileTransferComplete=File(s) was uploaded successfully
    +FileTransferComplete=File(s) uploaded successfully
     FilesDeleted=File(s) successfully deleted
     FileWasNotUploaded=Một tập tin được chọn để đính kèm nhưng vẫn chưa được tải lên. Bấm vào nút "Đính kèm tập tin" cho việc này.
    -NbOfEntries=Nb of entries
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=Read online help (Internet access needed)
     GoToHelpPage=Đọc giúp đỡ
     RecordSaved=Bản ghi đã lưu
    @@ -94,7 +94,7 @@ Undefined=Không xác định
     PasswordForgotten=Password forgotten?
     NoAccount=No account?
     SeeAbove=Xem ở trên
    -HomeArea=Khu vực nhà
    +HomeArea=Nhà
     LastConnexion=Latest connection
     PreviousConnexion=Kết nối trước
     PreviousValue=Previous value
    @@ -142,6 +142,7 @@ Closed=Đã đóng
     Closed2=Đã đóng
     NotClosed=Not closed
     Enabled=Đã bật
    +Enable=Kích hoạt
     Deprecated=Đã bác bỏ
     Disable=Tắt
     Disabled=Đã tắt
    @@ -153,7 +154,7 @@ Update=Cập nhật
     Close=Đóng
     CloseBox=Remove widget from your dashboard
     Confirm=Xác nhận
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=Xóa
     Remove=Gỡ bỏ
     Resiliate=Terminate
    @@ -327,7 +328,7 @@ Copy=Copy
     Paste=Dán
     Default=Mặc định
     DefaultValue=Giá trị mặc định
    -DefaultValues=Default values
    +DefaultValues=Default values/filters/sorting
     Price=Giá
     PriceCurrency=Price (currency)
     UnitPrice=Đơn giá
    @@ -347,7 +348,7 @@ AmountTTCShort=Số tiền (gồm thuế)
     AmountHT=Số tiền (chưa thuế)
     AmountTTC=Số tiền (gồm thuế)
     AmountVAT=Số tiền thuế
    -MulticurrencyAlreadyPaid=Already payed, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
     MulticurrencyRemainderToPay=Remain to pay, original currency
     MulticurrencyPaymentAmount=Payment amount, original currency
     MulticurrencyAmountHT=Amount (net of tax), original currency
    @@ -428,7 +429,7 @@ ActionNotApplicable=Không áp dụng
     ActionRunningNotStarted=Để bắt đầu
     ActionRunningShort=In progress
     ActionDoneShort=Đã hoàn tất
    -ActionUncomplete=Không hoàn tất
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=Latest %s linked events
     CompanyFoundation=Company/Organization
     Accountant=Accountant
    @@ -453,8 +454,8 @@ Generate=Xuất ra
     Duration=Thời hạn
     TotalDuration=Tổng thời hạn
     Summary=Tóm tắt
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
     NoOpenedElementToProcess=No opened element to process
     Available=Sẵn có
     NotYetAvailable=Chưa có
    @@ -468,7 +469,7 @@ and=và
     or=hoặc
     Other=Khác
     Others=Khác
    -OtherInformations=Thông tin khác
    +OtherInformations=Other information
     Quantity=Số lượng
     Qty=Số lượng
     ChangedBy=Thay đổi bằng
    @@ -506,7 +507,7 @@ None=Không
     NoneF=Không
     NoneOrSeveral=None or several
     Late=Trễ
    -LateDesc=Delay to define if a record is late or not depends on your setup. Ask your admin to change delay from menu Home - Setup - Alerts.
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
     NoItemLate=No late item
     Photo=Hình ảnh
     Photos=Hình ảnh
    @@ -530,18 +531,6 @@ September=Tháng Chín
     October=Tháng Mười
     November=Tháng mười một
     December=Tháng Mười Hai
    -JanuaryMin=Tháng Một
    -FebruaryMin=Tháng Hai
    -MarchMin=Tháng Ba
    -AprilMin=Tháng Tư
    -MayMin=Tháng Năm
    -JuneMin=Tháng Sáu
    -JulyMin=Tháng Bảy
    -AugustMin=Tháng Tám
    -SeptemberMin=Tháng Chín
    -OctoberMin=Tháng Mười
    -NovemberMin=Tháng mười một
    -DecemberMin=Tháng Mười Hai
     Month01=Tháng Một
     Month02=Tháng Hai
     Month03=Tháng Ba
    @@ -646,6 +635,8 @@ SendMail=Gửi email
     EMail=E-mail
     NoEMail=Không có email
     Email=Email
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=No mobile phone
     Owner=Chủ sở hữu
     FollowingConstantsWillBeSubstituted=Các hằng số sau đây sẽ được thay thế bằng giá trị tương ứng.
    @@ -677,7 +668,7 @@ NeverReceived=Chưa từng nhận
     Canceled=Đã hủy
     YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
     YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=Màu
     Documents=Tập tin liên kết
     Documents2=Chứng từ
    @@ -716,15 +707,15 @@ Merge=Merge
     DocumentModelStandardPDF=Standard PDF template
     PrintContentArea=Hiển thị trang in khu vực nội dung chính
     MenuManager=Menu quản lý
    -WarningYouAreInMaintenanceMode=Cảnh báo, bạn đang trong chế độ bảo trì, vì vậy chỉ có đăng nhập <b>%s</b> là được phép sử dụng ứng dụng tại thời điểm này.
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=Lỗi hệ thống
     CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
     CreditCard=Thẻ tín dụng
     ValidatePayment=Xác nhận thanh toán
     CreditOrDebitCard=Credit or debit card
     FieldsWithAreMandatory=Các trường với <b>%s</b> là bắt buộc
    -FieldsWithIsForPublic=Các trường với <b>%s</b> được hiển thị trên danh sách công khai của các thành viên. Nếu bạn không muốn điều này, đánh dấu vào hộp "công khai".
    -AccordingToGeoIPDatabase=(according to GeoIP convertion)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=Dòng
     NotSupported=Không được hỗ trợ
     RequiredField=Dòng bắt buộc
    @@ -732,6 +723,8 @@ Result=Kết quả
     ToTest=Kiểm tra
     ValidateBefore=Thẻ phải được xác nhận trước khi sử dụng tính năng này
     Visibility=Hiển thị
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=Cá nhân
     Hidden=Đã ẩn
     Resources=Tài nguyên
    @@ -750,6 +743,7 @@ LinkTo=Link to
     LinkToProposal=Link to proposal
     LinkToOrder=Liên kết để đặt hàng
     LinkToInvoice=Link to invoice
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=Link to supplier order
     LinkToSupplierProposal=Link to supplier proposal
     LinkToSupplierInvoice=Link to supplier invoice
    @@ -758,6 +752,7 @@ LinkToIntervention=Link to intervention
     CreateDraft=Tạo dự thảo
     SetToDraft=Trở về dự thảo
     ClickToEdit=Nhấn vào để sửa
    +ClickToRefresh=Click to refresh
     EditWithEditor=Edit with CKEditor
     EditWithTextEditor=Edit with Text editor
     EditHTMLSource=Edit HTML Source
    @@ -772,14 +767,14 @@ ByDay=Theo ngày
     BySalesRepresentative=Theo Đại diện bán hàng
     LinkedToSpecificUsers=Đã liên kết với một số liên lạc người dùng cụ thể
     NoResults=Không có kết quả
    -AdminTools=Admin tools
    +AdminTools=Admin Tools
     SystemTools=Công cụ hệ thống
     ModulesSystemTools=Module công cụ
     Test=Kiểm tra
     Element=Yếu tố
     NoPhotoYet=Chưa có ảnh chưa
     Dashboard=Dashboard
    -MyDashboard=My dashboard
    +MyDashboard=My Dashboard
     Deductible=Giảm trừ doanh thu
     from=từ
     toward=hướng
    @@ -802,7 +797,7 @@ PrintFile=In tập tin %s
     ShowTransaction=Show entry on bank account
     ShowIntervention=Hiện can thiệp
     ShowContract=Hiện hợp đồng
    -GoIntoSetupToChangeLogo=Vào Nhà-Thiết lập-Công ty để đổi logo hoặc vào Nhà-Thiết lập-Hiển thị để ẩn.
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=Deny
     Denied=Denied
     ListOf=List of %s
    @@ -818,12 +813,12 @@ Sincerely=Sincerely
     DeleteLine=Xóa dòng
     ConfirmDeleteLine=Are you sure you want to delete this line?
     NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=No record selected
     MassFilesArea=Area for files built by mass actions
     ShowTempMassFilesArea=Show area of files built by mass actions
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=Related Objects
     ClassifyBilled=Xác định đã ra hóa đơn
     ClassifyUnbilled=Classify unbilled
    @@ -841,7 +836,7 @@ Calendar=Lịch
     GroupBy=Group by...
     ViewFlatList=View flat list
     RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=Direct download link (public/external)
     DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
     Download=Download
    @@ -861,16 +856,25 @@ HR=HR
     HRAndBank=HR and Bank
     AutomaticallyCalculated=Automatically calculated
     TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=Import id
     Events=Sự kiện
    -EMailTemplates=Mẫu email
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=Dự án
     Projects=Các dự án
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=Phân quyền
     LineNb=Line no.
     IncotermLabel=Incoterms
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=Thứ Hai
     Tuesday=Thứ Ba
    @@ -927,15 +931,15 @@ SearchIntoInterventions=Interventions
     SearchIntoContracts=Hợp đồng
     SearchIntoCustomerShipments=Customer shipments
     SearchIntoExpenseReports=Báo cáo chi tiêu
    -SearchIntoLeaves=Nghỉ phép
    +SearchIntoLeaves=Leave
     CommentLink=Chú thích
     NbComments=Number of comments
     CommentPage=Comments space
     CommentAdded=Comment added
     CommentDeleted=Comment deleted
     Everybody=Mọi người
    -PayedBy=Payed by
    -PayedTo=Payed to
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=Monthly
     Quarterly=Quarterly
     Annual=Annual
    @@ -945,6 +949,7 @@ LocalAndRemote=Local and Remote
     KeyboardShortcut=Keyboard shortcut
     AssignedTo=Giao cho
     Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=File shared via a link
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/vi_VN/other.lang b/htdocs/langs/vi_VN/other.lang
    index a6a8f19ccb2..fcbc3c0491c 100644
    --- a/htdocs/langs/vi_VN/other.lang
    +++ b/htdocs/langs/vi_VN/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=Mã bảo vệ
     NumberingShort=N°
     Tools=Công cụ
     TMenuTools=Công cụ
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=Sinh nhật
     BirthdayDate=Birthday date
     DateToBirth=Ngày tháng năm sinh
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=Message on validated payment return page
     MessageKO=Message on canceled payment return page
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=Can thiệp xác nhận
    -Notify_FICHINTER_SENTBYMAIL=Can thiệp gửi qua đường bưu điện
     Notify_ORDER_VALIDATE=Đơn đặt hàng được xác nhận
     Notify_ORDER_SENTBYMAIL=Đơn đặt hàng được gửi qua đường bưu điện
     Notify_ORDER_SUPPLIER_SENTBYMAIL=Để nhà cung cấp gửi qua đường bưu điện
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=Để nhà cung cấp đã được phê duyệt
     Notify_ORDER_SUPPLIER_REFUSE=Để nhà cung cấp từ chối
     Notify_PROPAL_VALIDATE=Đề nghị khách hàng xác nhận
    -Notify_PROPAL_CLOSE_SIGNED=Propal khách hàng đóng cửa ký
    -Notify_PROPAL_CLOSE_REFUSED=Propal khách hàng Mỹ đóng cửa từ chối
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=Đề nghị thương mại gửi qua đường bưu điện
     Notify_WITHDRAW_TRANSMIT=Rút truyền
     Notify_WITHDRAW_CREDIT=Rút tín dụng
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=Bên thứ ba tạo ra
     Notify_COMPANY_SENTBYMAIL=Mail được gửi từ thẻ của bên thứ ba
     Notify_BILL_VALIDATE=Hóa đơn khách hàng xác nhận
     Notify_BILL_UNVALIDATE=Hóa đơn của khách hàng unvalidated
    -Notify_BILL_PAYED=Hóa đơn của khách hàng payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=Hóa đơn của khách hàng bị hủy bỏ
     Notify_BILL_SENTBYMAIL=Hóa đơn của khách hàng gửi qua đường bưu điện
     Notify_BILL_SUPPLIER_VALIDATE=Nhà cung cấp hóa đơn xác nhận
    -Notify_BILL_SUPPLIER_PAYED=Nhà cung cấp hóa đơn payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=Nhà cung cấp hóa đơn gửi qua đường bưu điện
     Notify_BILL_SUPPLIER_CANCELED=Nhà cung cấp hóa đơn hủy bỏ
     Notify_CONTRACT_VALIDATE=Hợp đồng xác nhận
     Notify_FICHEINTER_VALIDATE=Can thiệp xác nhận
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Can thiệp gửi qua đường bưu điện
     Notify_SHIPPING_VALIDATE=Vận chuyển xác nhận
     Notify_SHIPPING_SENTBYMAIL=Vận Chuyển gửi qua đường bưu điện
     Notify_MEMBER_VALIDATE=Thành viên được xác nhận
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Dự án sáng tạo
     Notify_TASK_CREATE=Nhiệm vụ tạo
     Notify_TASK_MODIFY=Nhiệm vụ sửa đổi
     Notify_TASK_DELETE=Công tác xóa
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=Số đính kèm tập tin / tài liệu
     TotalSizeOfAttachedFiles=Tổng dung lượng của các file đính kèm / tài liệu
     MaxSize=Kích thước tối đa
     AttachANewFile=Đính kèm một tập tin mới / tài liệu
     LinkedObject=Đối tượng liên quan
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>Id Giáo sư% s</b> là một thông tin phụ thuộc vào quốc gia của bên thứ ba. <br> Ví dụ, đối với đất <b>nước% s,</b> đó là <b>mã% s.</b>
     DolibarrDemo=Giới thiệu Dolibarr ERP / CRM
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=Number of proposals
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=Number of units on supplier proposals
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=Sự can thiệp% s đã được xác nhận.
     EMailTextInvoiceValidated=Hóa đơn% s đã được xác nhận.
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=Đề nghị% s đã được xác nhận.
     EMailTextProposalClosedSigned=The proposal %s has been closed signed.
     EMailTextOrderValidated=Trình tự% s đã được xác nhận.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=Trình tự% s đã được phê duyệt bởi% s.
     EMailTextOrderRefused=Trình tự% s đã bị từ chối.
     EMailTextOrderRefusedBy=Trình tự% s đã bị từ chối bởi% s.
     EMailTextExpeditionValidated=Vận chuyển% s đã được xác nhận.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=Thiết lập dữ liệu nhập khẩu
     DolibarrNotification=Tự động thông báo
     ResizeDesc=Nhập chiều rộng mới <b>hoặc</b> tầm cao mới. Tỷ lệ sẽ được giữ trong thời gian thay đổi kích thước ...
    @@ -204,7 +212,7 @@ NewLength=Chiều rộng mới
     NewHeight=Tầm cao mới
     NewSizeAfterCropping=Kích thước mới sau khi cắt xén
     DefineNewAreaToPick=Xác định khu vực mới vào hình để chọn (nhấp chuột vào hình ảnh bên trái sau đó kéo cho đến khi bạn đạt đến góc đối diện)
    -CurrentInformationOnImage=Công cụ này được thiết kế để giúp bạn thay đổi kích thước hoặc cắt hình ảnh. Đây là thông tin về hình ảnh thay đổi nội dung hiện tại
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=Biên tập hình ảnh
     YouReceiveMailBecauseOfNotification=Bạn nhận được thông báo này vì email của bạn đã được thêm vào danh sách các mục tiêu được thông báo về sự kiện đặc biệt vào phần mềm% s% s.
     YouReceiveMailBecauseOfNotification2=Sự kiện này là như sau:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=Khu vực xuất khẩu
    diff --git a/htdocs/langs/vi_VN/projects.lang b/htdocs/langs/vi_VN/projects.lang
    index 4820ff1a573..41731c3ac2b 100644
    --- a/htdocs/langs/vi_VN/projects.lang
    +++ b/htdocs/langs/vi_VN/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=Are you sure you want to delete this project?
     ConfirmDeleteATask=Are you sure you want to delete this task?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=Hiển thị dự án
     ShowTask=Hiện tác vụ
     SetProject=Lập dự án
     NoProject=Không có dự án được xác định hoặc tự tạo
    -NbOfProjects=Nb của dự án
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=Thời gian đã qua
     TimeSpentByYou=Thời gian đã qua bởi bạn
     TimeSpentByUser=Thời gian đã qua bởi người dùng
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=Danh sách các đơn hàng đề xuất được gắn với dự án
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=Danh sách các hợp đồng được gắn với dự án
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=Danh sách các sự can thiệp được gắn với dự án
    -ListExpenseReportsAssociatedProject=Danh sách các báo cáo chi phí liên quan đến dự án
    -ListDonationsAssociatedProject=Danh sách hiến tặng liên quan đến dự án
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=Danh sách các hoạt động được gắn với dự án
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=Project %s modified
     TaskCreatedInDolibarr=Tác vụ %s được tạo
     TaskModifiedInDolibarr=Tác vụ %s đã chỉnh sửa
     TaskDeletedInDolibarr=Tác vụ %s đã xóa
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=Cộng sự
     SelectElement=Chọn yếu tố
     AddElement=Liên kết đến yếu tố
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Khối lượng công việc dự tính
     PlannedWorkloadShort=Khối lượng công việc
     ProjectReferers=Related items
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Giao việc cho tôi
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Phân công
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=Use projects to follow leads/opportinuties
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=Open project/lead by opportunity status
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=Statistics on projects/leads
     TasksStatistics=Statistics on project/lead tasks
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=Đơn hàng đề xuất
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/zh_CN/accountancy.lang b/htdocs/langs/zh_CN/accountancy.lang
    index 79eea3e0bff..56fccded57e 100644
    --- a/htdocs/langs/zh_CN/accountancy.lang
    +++ b/htdocs/langs/zh_CN/accountancy.lang
    @@ -1,7 +1,7 @@
     # Dolibarr language file - en_US - Accounting Expert
     Accounting=会计
    -ACCOUNTING_EXPORT_SEPARATORCSV=列分隔符的导出文件
    -ACCOUNTING_EXPORT_DATE=日期格式导出文件
    +ACCOUNTING_EXPORT_SEPARATORCSV=导出文件的列分隔符
    +ACCOUNTING_EXPORT_DATE=导出文件的日期格式
     ACCOUNTING_EXPORT_PIECE=导出件数
     ACCOUNTING_EXPORT_GLOBAL_ACCOUNT=导出全局账号
     ACCOUNTING_EXPORT_LABEL=导出标签
    @@ -9,248 +9,254 @@ ACCOUNTING_EXPORT_AMOUNT=导出数量
     ACCOUNTING_EXPORT_DEVISE=导出货币
     Selectformat=请选择文件格式
     ACCOUNTING_EXPORT_FORMAT=请选择文件格式
    -ACCOUNTING_EXPORT_ENDLINE=Select the carriage return type
    -ACCOUNTING_EXPORT_PREFIX_SPEC=文件唯一前缀
    -ThisService=This service
    -ThisProduct=This product
    -DefaultForService=Default for service
    -DefaultForProduct=Default for product
    -CantSuggest=Can't suggest
    -AccountancySetupDoneFromAccountancyMenu=Most setup of the accountancy is done from the menu %s
    -ConfigAccountingExpert=配置财务会计专家模块
    -Journalization=Journalization
    +ACCOUNTING_EXPORT_ENDLINE=选择运费类型
    +ACCOUNTING_EXPORT_PREFIX_SPEC=指定文件名前缀
    +ThisService=这项服务
    +ThisProduct=这个产品
    +DefaultForService=默认服务
    +DefaultForProduct=默认产品
    +CantSuggest=无法建议
    +AccountancySetupDoneFromAccountancyMenu=大多数会计设置都是从​​菜单%s完成的
    +ConfigAccountingExpert=会计专家模块的配置
    +Journalization=记帐
     Journaux=日记帐
    -JournalFinancial=财务日记帐
    -BackToChartofaccounts=返回科目表
    -Chartofaccounts=账户图表
    -CurrentDedicatedAccountingAccount=Current dedicated account
    -AssignDedicatedAccountingAccount=New account to assign
    -InvoiceLabel=Invoice label
    -OverviewOfAmountOfLinesNotBound=Overview of amount of lines not bound to an accounting account
    -OverviewOfAmountOfLinesBound=Overview of amount of lines already bound to an accounting account
    -OtherInfo=Other information
    -DeleteCptCategory=Remove accounting account from group
    -ConfirmDeleteCptCategory=Are you sure you want to remove this accounting account from the accounting account group ?
    -JournalizationInLedgerStatus=Status of journalization
    -AlreadyInGeneralLedger=Already journalized in ledgers
    -NotYetInGeneralLedger=Not yet journalized in ledgers
    -GroupIsEmptyCheckSetup=Group is empty, check setup of the personalized accounting group
    -DetailByAccount=Show detail by account
    -AccountWithNonZeroValues=Accounts with non zero values
    -ListOfAccounts=List of accounts
    +JournalFinancial=财务总监日记帐
    +BackToChartofaccounts=返回会计科目表
    +Chartofaccounts=会计科目表
    +CurrentDedicatedAccountingAccount=当前专用帐户
    +AssignDedicatedAccountingAccount=要分配的新帐户
    +InvoiceLabel=发票标签
    +OverviewOfAmountOfLinesNotBound=未绑定到会计科目的行数的概述
    +OverviewOfAmountOfLinesBound=已绑定到会计科目的行数的概述
    +OtherInfo=其他信息
    +DeleteCptCategory=从组中删除会计帐户
    +ConfirmDeleteCptCategory=您确定要从会计科目组中删除此会计科目吗?
    +JournalizationInLedgerStatus=记帐状态
    +AlreadyInGeneralLedger=已经在分类账中记录
    +NotYetInGeneralLedger=尚未在分类账中记录
    +GroupIsEmptyCheckSetup=组为空,检查个性化会计组的设置
    +DetailByAccount=按帐户显示详细信息
    +AccountWithNonZeroValues=具有非零值的帐户
    +ListOfAccounts=帐户清单
    +CountriesInEEC=欧共体国家
    +CountriesNotInEEC=非欧共体国家
    +CountriesInEECExceptMe=欧共体国家除了%s
    +CountriesExceptMe=除%s以外的所有国家/地区
     
    -MainAccountForCustomersNotDefined=Main accounting account for customers not defined in setup
    -MainAccountForSuppliersNotDefined=Main accounting account for vendors not defined in setup
    -MainAccountForUsersNotDefined=Main accounting account for users not defined in setup
    -MainAccountForVatPaymentNotDefined=Main accounting account for VAT payment not defined in setup
    +MainAccountForCustomersNotDefined=未在设置中定义的顾客的主要会计科目
    +MainAccountForSuppliersNotDefined=未在设置中定义的供应商的主要会计科目
    +MainAccountForUsersNotDefined=未在设置中定义的用户的主要会计科目
    +MainAccountForVatPaymentNotDefined=未在设置中定义的税款支付的主要会计科目
     
    -AccountancyArea=Accounting area
    -AccountancyAreaDescIntro=Usage of the accountancy module is done in several step:
    -AccountancyAreaDescActionOnce=The following actions are usually executed one time only, or once per year...
    -AccountancyAreaDescActionOnceBis=Next steps should be done to save you time in future by suggesting you the correct default accounting account when making the journalization (writing record in Journals and General ledger)
    -AccountancyAreaDescActionFreq=The following actions are usually executed every month, week or day for very large companies...
    +AccountancyArea=会计区
    +AccountancyAreaDescIntro=会计模块的使用分几步完成:
    +AccountancyAreaDescActionOnce=以下动作通常只执行一次,或每年执行一次......
    +AccountancyAreaDescActionOnceBis=下一步将在未来节省您将来的时间,在记帐时使用正确的默认会计科目(在日记帐和总帐中写入记录时)
    +AccountancyAreaDescActionFreq=对于非常大的公司,通常每月,每周或每天执行以下操作......
     
    -AccountancyAreaDescJournalSetup=STEP %s: Create or check content of your journal list from menu %s
    -AccountancyAreaDescChartModel=STEP %s: Create a model of chart of account from menu %s
    -AccountancyAreaDescChart=STEP %s: Create or check content of your chart of account from menu %s
    +AccountancyAreaDescJournalSetup=步骤%s:从菜单%s创建或检查日常报表的内容
    +AccountancyAreaDescChartModel=步骤%s:从菜单%s创建一个会计科目表模型
    +AccountancyAreaDescChart=步骤%s:从菜单%s创建或检查您的会计科目表内容
     
    -AccountancyAreaDescVat=STEP %s: Define accounting accounts for each VAT Rates. For this, use the menu entry %s.
    -AccountancyAreaDescDefault=STEP %s: Define default accounting accounts. For this, use the menu entry %s.
    -AccountancyAreaDescExpenseReport=STEP %s: Define default accounting accounts for each type of expense report. For this, use the menu entry %s.
    -AccountancyAreaDescSal=STEP %s: Define default accounting accounts for payment of salaries. For this, use the menu entry %s.
    -AccountancyAreaDescContrib=STEP %s: Define default accounting accounts for special expences (miscellaneous taxes). For this, use the menu entry %s.
    -AccountancyAreaDescDonation=STEP %s: Define default accounting accounts for donation. For this, use the menu entry %s.
    -AccountancyAreaDescMisc=STEP %s: Define mandatory default account and default accounting accounts for miscellaneous transactions. For this, use the menu entry %s.
    -AccountancyAreaDescLoan=STEP %s: Define default accounting accounts for loans. For this, use the menu entry %s.
    -AccountancyAreaDescBank=STEP %s: Define accounting accounts and journal code for each bank and financial accounts. For this, use the menu entry %s.
    -AccountancyAreaDescProd=STEP %s: Define accounting accounts on your products/services. For this, use the menu entry %s.
    +AccountancyAreaDescVat=步骤%s:为每个税率定义会计科目,使用菜单%s。
    +AccountancyAreaDescDefault=步骤%s:定义默认会计科目,使用菜单%s。
    +AccountancyAreaDescExpenseReport=步骤%s:为每种类型的费用报告定义默认会计科目,使用菜单%s。
    +AccountancyAreaDescSal=步骤%s:定义支付工资的默认会计科目,使用菜单%s。
    +AccountancyAreaDescContrib=STEP %s: Define default accounting accounts for special expenses (miscellaneous taxes). For this, use the menu entry %s.
    +AccountancyAreaDescDonation=步骤%s:定义捐赠的默认会计科目,使用菜单%s。
    +AccountancyAreaDescMisc=步骤%s:为杂项交易定义强制性默认帐户和默认会计科目,使用菜单%s。
    +AccountancyAreaDescLoan=步骤%s:定义贷款的默认会计科目,使用菜单%s。
    +AccountancyAreaDescBank=步骤%s:为每个银行和财务帐户定义会计科目和日常报表代码,使用菜单%s。
    +AccountancyAreaDescProd=步骤%s:在您的产品/服务上定义会计科目,使用菜单%s。
     
    -AccountancyAreaDescBind=STEP %s: Check the binding between existing %s lines and accounting account is done, so application will be able to journalize transactions in Ledger in one click. Complete missing bindings. For this, use the menu entry %s.
    -AccountancyAreaDescWriteRecords=STEP %s: Write transactions into the Ledger. For this, go into menu <strong>%s</strong>, and click into button <strong>%s</strong>.
    -AccountancyAreaDescAnalyze=STEP %s: Add or edit existing transactions and generate reports and exports.
    +AccountancyAreaDescBind=步骤%s:检查现有%s行与会计科目之间的绑定, 使程序通过单击完成对分类帐中的交易进行日志记录。完成缺失的绑定,使用菜单%s。
    +AccountancyAreaDescWriteRecords=步骤%s:将交易写入分类帐,进入菜单<strong> %s </strong>,然后点击按钮<strong> %s</strong>。
    +AccountancyAreaDescAnalyze=步骤%s:添加或编辑现有交易并生成报告和导出。
     
    -AccountancyAreaDescClosePeriod=STEP %s: Close period so we can't make modification in a future.
    +AccountancyAreaDescClosePeriod=STEP %s:关闭期间,以便禁止修改。
     
    -TheJournalCodeIsNotDefinedOnSomeBankAccount=A mandatory step in setup was not complete (accounting code journal not defined for all bank accounts)
    -Selectchartofaccounts=Select active chart of accounts
    -ChangeAndLoad=Change and load
    -Addanaccount=添加一个会计帐户
    -AccountAccounting=会计账户
    +TheJournalCodeIsNotDefinedOnSomeBankAccount=设置中的必要步骤未完成(未为所有银行帐户定义会计代码日记帐)
    +Selectchartofaccounts=选择活动的会计科目表
    +ChangeAndLoad=改变和加载
    +Addanaccount=添加一个会计科目
    +AccountAccounting=会计科目
     AccountAccountingShort=账户
    -SubledgerAccount=Subledger Account
    -ShowAccountingAccount=Show accounting account
    -ShowAccountingJournal=Show accounting journal
    -AccountAccountingSuggest=Accounting account suggested
    -MenuDefaultAccounts=Default accounts
    +SubledgerAccount=分类账账户
    +ShowAccountingAccount=显示会计科目
    +ShowAccountingJournal=显示会计日常报表
    +AccountAccountingSuggest=建议会计科目
    +MenuDefaultAccounts=默认帐户
     MenuBankAccounts=银行帐户
    -MenuVatAccounts=Vat accounts
    -MenuTaxAccounts=Tax accounts
    -MenuExpenseReportAccounts=Expense report accounts
    -MenuLoanAccounts=Loan accounts
    -MenuProductsAccounts=Product accounts
    -ProductsBinding=Products accounts
    -Ventilation=Binding to accounts
    -CustomersVentilation=Customer invoice binding
    -SuppliersVentilation=Vendor invoice binding
    -ExpenseReportsVentilation=Expense report binding
    -CreateMvts=Create new transaction
    -UpdateMvts=Modification of a transaction
    -ValidTransaction=Validate transaction
    -WriteBookKeeping=Journalize transactions in Ledger
    -Bookkeeping=Ledger
    +MenuVatAccounts=增值税账户
    +MenuTaxAccounts=税务帐户
    +MenuExpenseReportAccounts=费用报告帐户
    +MenuLoanAccounts=贷款账户
    +MenuProductsAccounts=产品帐户
    +ProductsBinding=产品帐户
    +Ventilation=绑定到帐户
    +CustomersVentilation=顾客发票绑定
    +SuppliersVentilation=供应商发票绑定
    +ExpenseReportsVentilation=费用报告绑定
    +CreateMvts=创建新交易
    +UpdateMvts=修改交易
    +ValidTransaction=验证交易
    +WriteBookKeeping=在帐目中记录交易
    +Bookkeeping=分类帐
     AccountBalance=账目平衡
    -ObjectsRef=Source object ref
    -CAHTF=税前供应商采购总计
    -TotalExpenseReport=Total expense report
    -InvoiceLines=Lines of invoices to bind
    -InvoiceLinesDone=Bound lines of invoices
    -ExpenseReportLines=Lines of expense reports to bind
    -ExpenseReportLinesDone=Bound lines of expense reports
    -IntoAccount=Bind line with the accounting account
    +ObjectsRef=源对象引用
    +CAHTF=税前采购供应商总计
    +TotalExpenseReport=总费用报告
    +InvoiceLines=要绑定的发票行
    +InvoiceLinesDone=已绑定的发票行
    +ExpenseReportLines=要绑定的费用行报告
    +ExpenseReportLinesDone=已绑定的费用报告行
    +IntoAccount=用会计科目绑定行
     
     
    -Ventilate=Bind
    -LineId=Id line
    -Processing=处理
    -EndProcessing=Process terminated.
    +Ventilate=绑定
    +LineId=Id行
    +Processing=处理中
    +EndProcessing=流程终止
     SelectedLines=选定的行
     Lineofinvoice=发票行
    -LineOfExpenseReport=Line of expense report
    -NoAccountSelected=No accounting account selected
    -VentilatedinAccount=Binded successfully to the accounting account
    -NotVentilatedinAccount=Not bound to the accounting account
    -XLineSuccessfullyBinded=%s products/services successfully bound to an accounting account
    -XLineFailedToBeBinded=%s products/services were not bound to any accounting account
    +LineOfExpenseReport=费用报告行
    +NoAccountSelected=未选定会计科目
    +VentilatedinAccount=已绑定到会计科目
    +NotVentilatedinAccount=未绑定到会计科目
    +XLineSuccessfullyBinded=%s产品/服务绑定到会计科目
    +XLineFailedToBeBinded=%s产品/服务未绑定到会计科目
     
    -ACCOUNTING_LIMIT_LIST_VENTILATION=Number of elements to bind shown by page (maximum recommended : 50)
    -ACCOUNTING_LIST_SORT_VENTILATION_TODO=Begin the sorting of the page "Binding to do" by the most recent elements
    -ACCOUNTING_LIST_SORT_VENTILATION_DONE=Begin the sorting of the page "Binding done" by the most recent elements
    +ACCOUNTING_LIMIT_LIST_VENTILATION=每页显示的要绑定的元素数量(建议最大值:50)
    +ACCOUNTING_LIST_SORT_VENTILATION_TODO=按“最近"对“即将绑定”页面进行排序
    +ACCOUNTING_LIST_SORT_VENTILATION_DONE=按"最近"对"绑定完成"页面进行排序
     
    -ACCOUNTING_LENGTH_DESCRIPTION=Truncate product & services description in listings after x chars (Best = 50)
    -ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=Truncate product & services account description form in listings after x chars (Best = 50)
    -ACCOUNTING_LENGTH_GACCOUNT=Length of the general accounting accounts (If you set value to 6 here, the account '706' will appear like '706000' on screen)
    -ACCOUNTING_LENGTH_AACCOUNT=Length of the third party accounting accounts (If you set value to 6 here, the account '401' will appear like '401000' on screen)
    -ACCOUNTING_MANAGE_ZERO=Allow to manage different number of zero at the end of an accounting account. Needed by some countries (like switzerland). If keep to off (default), you can set the 2 following parameters to ask application to add virtual zero.
    -BANK_DISABLE_DIRECT_INPUT=Disable direct recording of transaction in bank account
    -ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=Enable draft export on journal
    +ACCOUNTING_LENGTH_DESCRIPTION=在X字符后截断列表中的产品和服务描述(最佳X= 50)
    +ACCOUNTING_LENGTH_DESCRIPTION_ACCOUNT=在X字符后截断列表中的产品和服务帐户描述表单(最佳X= 50)
    +ACCOUNTING_LENGTH_GACCOUNT=一般会计科目的长度(如果您在此处将值设置为6,则帐户'706'将在屏幕上显示为'706000')
    +ACCOUNTING_LENGTH_AACCOUNT=第三方会计科目的长度(如果您在此处将值设置为6,则帐户'401'将在屏幕上显示为'401000')
    +ACCOUNTING_MANAGE_ZERO=允许在会计帐户结束时管理不同数量的零。一些国家(如瑞士)需要。如果保持关闭(默认),您可以设置以下2个参数以要求应用程序添加虚拟零。
    +BANK_DISABLE_DIRECT_INPUT=禁止在银行帐户中直接记录交易
    +ACCOUNTING_ENABLE_EXPORT_DRAFT_JOURNAL=在日记帐上启用草稿导出
     
    -ACCOUNTING_SELL_JOURNAL=卖杂志
    -ACCOUNTING_PURCHASE_JOURNAL=购买杂志
    -ACCOUNTING_MISCELLANEOUS_JOURNAL=其他杂志
    -ACCOUNTING_EXPENSEREPORT_JOURNAL=费用报表日记
    -ACCOUNTING_SOCIAL_JOURNAL=社交杂志
    -ACCOUNTING_HAS_NEW_JOURNAL=Has new Journal
    +ACCOUNTING_SELL_JOURNAL=销售日记帐
    +ACCOUNTING_PURCHASE_JOURNAL=采购日记帐
    +ACCOUNTING_MISCELLANEOUS_JOURNAL=杂项日记帐
    +ACCOUNTING_EXPENSEREPORT_JOURNAL=费用报表日记帐
    +ACCOUNTING_SOCIAL_JOURNAL=社会日记帐
    +ACCOUNTING_HAS_NEW_JOURNAL=有新的日常报表
     
    -ACCOUNTING_ACCOUNT_TRANSFER_CASH=Accounting account of transfer
    -ACCOUNTING_ACCOUNT_SUSPENSE=Accounting account of wait
    -DONATION_ACCOUNTINGACCOUNT=Accounting account to register donations
    +ACCOUNTING_ACCOUNT_TRANSFER_CASH=会计科目-转账
    +ACCOUNTING_ACCOUNT_SUSPENSE=会计科目-等待
    +DONATION_ACCOUNTINGACCOUNT=会计科目-登记捐款
     
    -ACCOUNTING_PRODUCT_BUY_ACCOUNT=Accounting account by default for bought products (used if not defined in the product sheet)
    -ACCOUNTING_PRODUCT_SOLD_ACCOUNT=Accounting account by default for the sold products (used if not defined in the product sheet)
    -ACCOUNTING_SERVICE_BUY_ACCOUNT=Accounting account by default for the bought services (used if not defined in the service sheet)
    -ACCOUNTING_SERVICE_SOLD_ACCOUNT=Accounting account by default for the sold services (used if not defined in the service sheet)
    +ACCOUNTING_PRODUCT_BUY_ACCOUNT=购买产品的默认会计科目(如果未在产品说明书中定义,则使用)
    +ACCOUNTING_PRODUCT_SOLD_ACCOUNT=销售产品的默认会计科目(如果未在产品说明书中定义,则使用)
    +ACCOUNTING_SERVICE_BUY_ACCOUNT=已购买服务的默认会计科目(如果未在服务单中定义,则使用)
    +ACCOUNTING_SERVICE_SOLD_ACCOUNT=默认情况下,已售出服务的会计科目(如果未在服务单中定义,则使用)
     
     Doctype=文件类型
     Docdate=日期
     Docref=参考
     LabelAccount=标签帐户
    -LabelOperation=Label operation
    +LabelOperation=标签操作
     Sens=SENS
    +LetteringCode=刻字代码
     Codejournal=日记帐
     NumPiece=件数
     TransactionNumShort=Num. transaction
    -AccountingCategory=Personalized groups
    -GroupByAccountAccounting=Group by accounting account
    -AccountingAccountGroupsDesc=You can define here some groups of accounting account. They will be used for personalized accounting reports.
    -ByAccounts=By accounts
    -ByPredefinedAccountGroups=By predefined groups
    -ByPersonalizedAccountGroups=By personalized groups
    +AccountingCategory=会计分类
    +GroupByAccountAccounting=按会计科目分组
    +AccountingAccountGroupsDesc=您可以在此处定义一些会计科目组。它们将用于会计分类报告。
    +ByAccounts=按帐户
    +ByPredefinedAccountGroups=按预定义的组
    +ByPersonalizedAccountGroups=通过个性化团体
     ByYear=在今年
     NotMatch=未设定
    -DeleteMvt=Delete Ledger lines
    +DeleteMvt=删除分类帐行
     DelYear=删除整年
    -DelJournal=删除整月
    -ConfirmDeleteMvt=This will delete all lines of the Ledger for year and/or from a specific journal. At least one criteria is required.
    -ConfirmDeleteMvtPartial=This will delete the transaction from the Ledger (all lines related to same transaction will be deleted)
    +DelJournal=日记帐删除
    +ConfirmDeleteMvt=这将删除年份和/或特定日常报表的所有账目行。至少需要一个标准。
    +ConfirmDeleteMvtPartial=这将从分类帐中删除该交易(将删除与同一交易相关的所有行)
     FinanceJournal=财务账
    -ExpenseReportsJournal=Expense reports journal
    +ExpenseReportsJournal=费用报告日常报表
     DescFinanceJournal=财务账包括全部银行账户付款类型
    -DescJournalOnlyBindedVisible=This is a view of record that are bound to an accounting account and can be recorded into the Ledger.
    -VATAccountNotDefined=Account for VAT not defined
    -ThirdpartyAccountNotDefined=Account for third party not defined
    -ProductAccountNotDefined=Account for product not defined
    -FeeAccountNotDefined=Account for fee not defined
    -BankAccountNotDefined=Account for bank not defined
    +DescJournalOnlyBindedVisible=这是记录的视图,它绑定到会计帐户并可以记录到分类帐中。
    +VATAccountNotDefined=未定义增值税的帐户
    +ThirdpartyAccountNotDefined=未定义的第三方帐户
    +ProductAccountNotDefined=未定义产品的帐户
    +FeeAccountNotDefined=未定义费用的帐户
    +BankAccountNotDefined=银行帐户未定义
     CustomerInvoicePayment=付款发票的客户
    -ThirdPartyAccount=Third party account
    -NewAccountingMvt=New transaction
    -NumMvts=Numero of transaction
    -ListeMvts=List of movements
    +ThirdPartyAccount=第三方帐户
    +NewAccountingMvt=新交易
    +NumMvts=Numero的交易
    +ListeMvts=运动清单
     ErrorDebitCredit=借记卡和信用卡在同一时间不能有一个值
    -AddCompteFromBK=Add accounting accounts to the group
    -ReportThirdParty=List third party account
    -DescThirdPartyReport=Consult here the list of the third party customers and vendors and their accounting accounts
    -ListAccounts=会计账目清单
    -UnknownAccountForThirdparty=Unknown third party account. We will use %s
    -UnknownAccountForThirdpartyBlocking=Unknown third party account. Blocking error
    -UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=Unknown third party account and waiting account not defined. Blocking error
    -PaymentsNotLinkedToProduct=Payment not linked to any product / service
    +AddCompteFromBK=将会计科目添加到组中
    +ReportThirdParty=列出第三方帐户
    +DescThirdPartyReport=请在此处查看第三方客户和供应商及其会计帐户的列表
    +ListAccounts=会计科目清单
    +UnknownAccountForThirdparty=未知的第三方帐户。我们将使用%s
    +UnknownAccountForThirdpartyBlocking=未知的第三方帐户。阻止错误
    +UnknownAccountForThirdpartyAndWaitingAccountNotDefinedBlocking=未定义未知的第三方帐户和等待帐户。阻止错误
    +PaymentsNotLinkedToProduct=付款未与任何产品/服务相关联
     
    -Pcgtype=Group of account
    -Pcgsubtype=Subgroup of account
    -PcgtypeDesc=Group and subgroup of account are used as predefined 'filter' and 'grouping' criterias for some accounting reports. For example, 'INCOME' or 'EXPENSE' are used as groups for accounting accounts of products to build the expense/income report.
    +Pcgtype=帐户组
    +Pcgsubtype=帐户子组
    +PcgtypeDesc=Group and subgroup of account are used as predefined 'filter' and 'grouping' criteria for some accounting reports. For example, 'INCOME' or 'EXPENSE' are used as groups for accounting accounts of products to build the expense/income report.
     
     TotalVente=Total turnover before tax
     TotalMarge=总销售利润率
     
    -DescVentilCustomer=Consult here the list of customer invoice lines bound (or not) to a product accounting account
    -DescVentilMore=In most cases, if you use predefined products or services and you set the account number on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button <strong>"%s"</strong>. If account was not set on product/service cards or if you still has some lines not bound to any account, you will have to make a manual binding from the menu "<strong>%s</strong>".
    -DescVentilDoneCustomer=Consult here the list of the lines of invoices customers and their product accounting account
    -DescVentilTodoCustomer=Bind invoice lines not already bound with a product accounting account
    -ChangeAccount=Change the product/service accounting account for selected lines with the following accounting account:
    +DescVentilCustomer=请在此处查看与产品会计科目绑定(或不绑定)的客户发票行列表
    +DescVentilMore=In most cases, if you use predefined products or services and you set the account number on the product/service card, the application will be able to make all the binding between your invoice lines and the accounting account of your chart of accounts, just in one click with the button <strong>"%s"</strong>. If account was not set on product/service cards or if you still have some lines not bound to an account, you will have to make a manual binding from the menu "<strong>%s</strong>".
    +DescVentilDoneCustomer=请在此查看发票客户及其产品会计科目的行列表
    +DescVentilTodoCustomer=绑定尚未与产品会计科目绑定的发票行
    +ChangeAccount=使用以下会计科目更改所选行的产品/服务会计科目:
     Vide=-
    -DescVentilSupplier=Consult here the list of vendor invoice lines bound or not yet bound to a product accounting account
    -DescVentilDoneSupplier=Consult here the list of the lines of invoices vendors and their accounting account
    -DescVentilTodoExpenseReport=Bind expense report lines not already bound with a fee accounting account
    -DescVentilExpenseReport=Consult here the list of expense report lines bound (or not) to a fee accounting account
    -DescVentilExpenseReportMore=If you setup accounting account on type of expense report lines, the application will be able to make all the binding between your expense report lines and the accounting account of your chart of accounts, just in one click with the button <strong>"%s"</strong>. If account was not set on fees dictionary or if you still has some lines not bound to any account, you will have to make a manual binding from the menu "<strong>%s</strong>".
    -DescVentilDoneExpenseReport=Consult here the list of the lines of expenses reports and their fees accounting account
    +DescVentilSupplier=请在此处查看已绑定或尚未绑定到产品会计科目的供应商发票行列表
    +DescVentilDoneSupplier=请在此查询发票供应商及其会计科目的行列表
    +DescVentilTodoExpenseReport=绑定费用报表行尚未绑定费用会计帐户
    +DescVentilExpenseReport=请在此处查看费用会计帐户绑定(或不绑定)的费用报表行列表
    +DescVentilExpenseReportMore=If you setup accounting account on type of expense report lines, the application will be able to make all the binding between your expense report lines and the accounting account of your chart of accounts, just in one click with the button <strong>"%s"</strong>. If account was not set on fees dictionary or if you still have some lines not bound to any account, you will have to make a manual binding from the menu "<strong>%s</strong>".
    +DescVentilDoneExpenseReport=请在此查询费用报表行及其费用会计帐户清单
     
    -ValidateHistory=Bind Automatically
    -AutomaticBindingDone=Automatic binding done
    +ValidateHistory=自动绑定
    +AutomaticBindingDone=自动绑定完成
     
    -ErrorAccountancyCodeIsAlreadyUse=错误,你不能删除这个会计帐户,因为它是用来
    -MvtNotCorrectlyBalanced=Movement not correctly balanced. Debit = %s | Credit = %s
    -FicheVentilation=Binding card
    -GeneralLedgerIsWritten=Transactions are written in the Ledger
    -GeneralLedgerSomeRecordWasNotRecorded=Some of the transactions could not be journalized. If there is no other error message, this is probably because they were already journalized.
    -NoNewRecordSaved=No more record to journalize
    -ListOfProductsWithoutAccountingAccount=List of products not bound to any accounting account
    -ChangeBinding=Change the binding
    -Accounted=Accounted in ledger
    -NotYetAccounted=Not yet accounted in ledger
    +ErrorAccountancyCodeIsAlreadyUse=错误,你不能删除这个会计科目,因为正被使用。
    +MvtNotCorrectlyBalanced=运动不正确平衡。借方= %s | Credit = %s
    +Balancing=平衡
    +FicheVentilation=绑定卡
    +GeneralLedgerIsWritten=交易是在Ledger中写的
    +GeneralLedgerSomeRecordWasNotRecorded=某些交易无法记录。如果没有其他错误消息,这可能是因为它们已经被记录。
    +NoNewRecordSaved=没有更多的记录记录
    +ListOfProductsWithoutAccountingAccount=未绑定到任何会计科目的产品列表
    +ChangeBinding=更改绑定
    +Accounted=占总账
    +NotYetAccounted=尚未计入分类帐
     
     ## Admin
     ApplyMassCategories=应用批量类别
    -AddAccountFromBookKeepingWithNoCategories=Available acccount not yet in a personalized group
    -CategoryDeleted=Category for the accounting account has been removed
    -AccountingJournals=Accounting journals
    -AccountingJournal=Accounting journal
    -NewAccountingJournal=New accounting journal
    -ShowAccoutingJournal=Show accounting journal
    +AddAccountFromBookKeepingWithNoCategories=Available account not yet in a personalized group
    +CategoryDeleted=会计科目的类别已被删除
    +AccountingJournals=会计日常报表
    +AccountingJournal=会计日常报表
    +NewAccountingJournal=新建会计日常报表
    +ShowAccoutingJournal=显示会计日常报表
     Nature=属性
    -AccountingJournalType1=Miscellaneous operations
    +AccountingJournalType1=杂项业务
     AccountingJournalType2=销售
     AccountingJournalType3=采购
     AccountingJournalType4=银行
    -AccountingJournalType5=Expenses report
    -AccountingJournalType8=Inventory
    -AccountingJournalType9=Has-new
    -ErrorAccountingJournalIsAlreadyUse=This journal is already use
    -AccountingAccountForSalesTaxAreDefinedInto=Note: Accounting account for Sales tax are defined into menu <b>%s</b> - <b>%s</b>
    +AccountingJournalType5=费用报告
    +AccountingJournalType8=库存
    +AccountingJournalType9=拥有全新
    +ErrorAccountingJournalIsAlreadyUse=该日常报表已经使用
    +AccountingAccountForSalesTaxAreDefinedInto=注意:销售税的会计科目已定义到菜单<b> %s </b>  -  <b> %s</b>
     
     ## Export
    -ExportDraftJournal=Export draft journal
    +ExportDraftJournal=导出日常报表草稿
     Modelcsv=导出型号
     Selectmodelcsv=请选择一个导出模板
     Modelcsv_normal=典型的导出
    @@ -261,25 +267,26 @@ Modelcsv_ciel=向 Sage Ciel Compta 或 Compta Evolution导出
     Modelcsv_quadratus=向 Quadratus QuadraCompta导出
     Modelcsv_ebp=向 EBP导出
     Modelcsv_cogilog=导出到 Cogilog
    -Modelcsv_agiris=Export towards Agiris
    -Modelcsv_configurable=Export Configurable
    -ChartofaccountsId=Chart of accounts Id
    +Modelcsv_agiris=向Agiris出口
    +Modelcsv_configurable=导出CSV可配置
    +Modelcsv_FEC=Export FEC (Art. L47 A) (Test)
    +ChartofaccountsId=会计科目表ID
     
     ## Tools - Init accounting account on product / service
     InitAccountancy=初始化会计
    -InitAccountancyDesc=This page can be used to initialize an accounting account on products and services that does not have accounting account defined for sales and purchases.
    -DefaultBindingDesc=This page can be used to set a default account to use to link transactions record about payment salaries, donation, taxes and vat when no specific accounting account were already set.
    +InitAccountancyDesc=此页面可用于初始化没有为销售和购买定义的会计科目的产品和服务的会计科目。
    +DefaultBindingDesc=此页面可用于设置默认帐户,用于在未设置特定会计帐户时链接有关付款工资,捐款,税金和增值税的交易记录。
     Options=选项
     OptionModeProductSell=销售模式
     OptionModeProductBuy=采购模式
    -OptionModeProductSellDesc=Show all products with accounting account for sales.
    -OptionModeProductBuyDesc=Show all products with accounting account for purchases.
    -CleanFixHistory=Remove accounting code from lines that not exists into charts of account
    -CleanHistory=Reset all bindings for selected year
    -PredefinedGroups=Predefined groups
    -WithoutValidAccount=Without valid dedicated account
    -WithValidAccount=With valid dedicated account
    -ValueNotIntoChartOfAccount=This value of accounting account does not exist into chart of account
    +OptionModeProductSellDesc=显示所有具有销售会计帐户的产品。
    +OptionModeProductBuyDesc=显示所有带有会计帐户的产品。
    +CleanFixHistory=将不存在于会计科目表中的行删除科目代码
    +CleanHistory=重置所选年份的所有绑定
    +PredefinedGroups=预定义的组
    +WithoutValidAccount=没有有效的专用帐户
    +WithValidAccount=有效的专用帐户
    +ValueNotIntoChartOfAccount=会计科目的这个值不存在于会计科目表中
     
     ## Dictionary
     Range=会计科目范围
    @@ -287,20 +294,20 @@ Calculated=计算
     Formula=公式
     
     ## Error
    -SomeMandatoryStepsOfSetupWereNotDone=Some mandatory steps of setup was not done, please complete them
    -ErrorNoAccountingCategoryForThisCountry=No accounting account group available for country %s (See Home - Setup - Dictionaries)
    -ErrorInvoiceContainsLinesNotYetBounded=You try to journalize some lines of the invoice <strong>%s</strong>, but some other lines are not yet bounded to accounting account. Journalization of all invoice lines for this invoice are refused.
    -ErrorInvoiceContainsLinesNotYetBoundedShort=Some lines on invoice are not bound to accounting account.
    +SomeMandatoryStepsOfSetupWereNotDone=一些强制性的安装步骤没有完成,请完成它们
    +ErrorNoAccountingCategoryForThisCountry=没有%s可用的的会计科目组(请参阅主页 - 设置 - 词典)
    +ErrorInvoiceContainsLinesNotYetBounded=您尝试记录发票的某些行<strong> %s </strong>,但其他一些行尚未绑定到会计帐户。此发票的所有发票行的日记帐均被拒绝。
    +ErrorInvoiceContainsLinesNotYetBoundedShort=发票上的某些行未绑定到会计帐户。
     ExportNotSupported=本页不支持设置导出格式
    -BookeppingLineAlreayExists=已存在的账簿明细行
    -NoJournalDefined=No journal defined
    -Binded=Lines bound
    -ToBind=Lines to bind
    -UseMenuToSetBindindManualy=Autodection not possible, use menu <a href="%s">%s</a> to make the binding manually
    +BookeppingLineAlreayExists=已经存在于簿记中的行
    +NoJournalDefined=没有定义日常报表
    +Binded=线条约束
    +ToBind=要绑定的行
    +UseMenuToSetBindindManualy=Lines not yet bound, use menu <a href="%s">%s</a> to make the binding manually
     
     ## Import
    -ImportAccountingEntries=Accounting entries
    +ImportAccountingEntries=会计分录
     
    -WarningReportNotReliable=Warning, this report is not based on the Ledger, so does not contains transaction modified manualy in the Ledger. If your journalization is up to date, the bookkeeping view is more accurate.
    -ExpenseReportJournal=Expense Report Journal
    -InventoryJournal=Inventory Journal
    +WarningReportNotReliable=Warning, this report is not based on the Ledger, so does not contains transaction modified manually in the Ledger. If your journalization is up to date, the bookkeeping view is more accurate.
    +ExpenseReportJournal=费用报告日常报表
    +InventoryJournal=库存日常报表
    diff --git a/htdocs/langs/zh_CN/admin.lang b/htdocs/langs/zh_CN/admin.lang
    index e7399c01294..1c38c33012c 100644
    --- a/htdocs/langs/zh_CN/admin.lang
    +++ b/htdocs/langs/zh_CN/admin.lang
    @@ -1,7 +1,7 @@
     # Dolibarr language file - Source file is en_US - admin
     Foundation=机构
     Version=版本
    -Publisher=Publisher
    +Publisher=出版者
     VersionProgram=程序版本
     VersionLastInstall=初始安装版本
     VersionLastUpgrade=最新版本升级
    @@ -9,70 +9,70 @@ VersionExperimental=试验
     VersionDevelopment=开发
     VersionUnknown=未知
     VersionRecommanded=推荐
    -FileCheck=Files integrity checker
    -FileCheckDesc=This tool allows you to check the integrity of files and setup of your application, comparing each files with the official ones. Value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker for example.
    -FileIntegrityIsStrictlyConformedWithReference=Files integrity is strictly conformed with the reference.
    -FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files were added.
    -FileIntegritySomeFilesWereRemovedOrModified=Files integrity check has failed. Some files were modified, removed or added.
    -GlobalChecksum=Global checksum
    -MakeIntegrityAnalysisFrom=Make integrity analysis of application files from
    -LocalSignature=Embedded local signature (less reliable)
    -RemoteSignature=Remote distant signature (more reliable)
    +FileCheck=文件完整性检查程序
    +FileCheckDesc=This tool allows you to check the integrity of files and the setup of your application, comparing each file with the official one. The value of some setup constants may also be checked. You can use this tool to detect if some files were modified by a hacker, for example.
    +FileIntegrityIsStrictlyConformedWithReference=文件完整性严格符合参考。
    +FileIntegrityIsOkButFilesWereAdded=Files integrity check has passed, however some new files have been added.
    +FileIntegritySomeFilesWereRemovedOrModified=文件完整性检查失败。某些文件已被修改,删除或添加。
    +GlobalChecksum=全局校验和
    +MakeIntegrityAnalysisFrom=对应用程序文件进行完整性分析
    +LocalSignature=嵌入式本地签名(不太可靠)
    +RemoteSignature=远程遥控签名(更可靠)
     FilesMissing=缺少文件
     FilesUpdated=已更新的文件
    -FilesModified=Modified Files
    -FilesAdded=Added Files
    -FileCheckDolibarr=Check integrity of application files
    -AvailableOnlyOnPackagedVersions=The local file for integrity checking is only available when application is installed from an official package
    -XmlNotFound=Xml Integrity File of application not found
    +FilesModified=已修改的文件
    +FilesAdded=增加的文件
    +FileCheckDolibarr=检查应用程序文件的完整性
    +AvailableOnlyOnPackagedVersions=完整性检查的本地文件仅在从官方软件包安装应用程序时可用
    +XmlNotFound=找不到程序的Xml完整性文件
     SessionId=会话 ID
     SessionSaveHandler=会话保存处理程序
     SessionSavePath=存储会话本地化
     PurgeSessions=清空会话
     ConfirmPurgeSessions=您真的要清除所有会话吗?它将断开每个用户(您自己除外)。
    -NoSessionListWithThisHandler=你 PHP 中设置的保存会话处理程序不允许列出运行中的会话。
    +NoSessionListWithThisHandler=您 PHP 中设置的保存会话处理程序不允许列出运行中的会话。
     LockNewSessions=锁定新连接
    -ConfirmLockNewSessions=你确定要限制 Dolibarr 的所有新连接?这样做将只有当前用户 <b>%s</b> 可以连接。
    +ConfirmLockNewSessions=你确定要限制 Dolibarr 的所有新连接,只允许您自己连入?此后将只有用户 <b>%s</b> 可以连入。
     UnlockNewSessions=取消连接锁定
     YourSession=你的会话
     Sessions=用户会话
     WebUserGroup=Web 服务器用户/组
     NoSessionFound=你的 PHP 设置似乎不允许列出运行中的会话。会话的存储目录 <b>%s</b>可能受到系统权限或PHP open_basedir 指令的保护。
     DBStoringCharset=数据库保存数据的字符编码
    -DBSortingCharset=数据库数据排序的字符编码
    -ClientCharset=Client charset
    -ClientSortingCharset=Client collation
    +DBSortingCharset=数据库排序数据的字符编码
    +ClientCharset=客户端的字符编码
    +ClientSortingCharset=客户核对
     WarningModuleNotActive=<b> %s </b>模块必须启用
    -WarningOnlyPermissionOfActivatedModules=仅与已启用模块相关的权限显示在此。您可以在 主页->设定->模块页面中启用其它模块。
    +WarningOnlyPermissionOfActivatedModules=仅与已启用模块相关的权限显示在此。您可以在 "主页"->"设置"->"模块"页面中启用其它模块。
     DolibarrSetup=Dolibarr安装或升级向导
     InternalUser=内部员工用户
     ExternalUser=外部用户
     InternalUsers=内部员工用户
     ExternalUsers=外部用户
     GUISetup=主题
    -SetupArea=设置区
    -UploadNewTemplate=Upload new template(s)
    +SetupArea=设置
    +UploadNewTemplate=上传新模板
     FormToTestFileUploadForm=文件上传功能测试
     IfModuleEnabled=注:“是”仅在模块 <b>%s</b> 启用时有效
     RemoveLock=如果存在文件 <b>%s</b> 则删除,以便可以使用升级工具。
     RestoreLock=恢复文件<b> %s </b>的只读权限,以禁止升级工具的使用。
     SecuritySetup=安全设置
    -SecurityFilesDesc=Define here options related to security about uploading files.
    +SecurityFilesDesc=在此定义与上载文件的安全性相关的选项。
     ErrorModuleRequirePHPVersion=错误,此模块要求 PHP 版本 %s 或更高
     ErrorModuleRequireDolibarrVersion=错误,此模块要求 Dolibarr 版本 %s 或更高
     ErrorDecimalLargerThanAreForbidden=错误,不支持超过 <b>%s</b> 的精度。
    -DictionarySetup=词典的设置
    +DictionarySetup=字典的设置
     Dictionary=字典库
    -ErrorReservedTypeSystemSystemAuto=类型值 'system' 与 'systemauto' 是系统保留值。不能以'user'为值添加您的记录
    +ErrorReservedTypeSystemSystemAuto=类型的值'system'和'systemauto'保留。您可以使用“user”作为值来添加自己的记录
     ErrorCodeCantContainZero=编码不能包含 0
     DisableJavascript=禁用JavaScript和Ajax功能(推荐 盲人或文本浏览器)
    -UseSearchToSelectCompanyTooltip=Also if you have a large number of third parties (> 100 000), you can increase speed by setting constant COMPANY_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    -UseSearchToSelectContactTooltip=同样地如果你有大批量的合伙人 (> 100 000), 你也可以通过设置常数 CONTACT_DONOTSEARCH_ANYWHERE 来提高速度到 1 在设置->其他菜单下设置。 搜索将被限制为字符串开始。
    -DelaiedFullListToSelectCompany=Wait you press a key before loading content of thirdparties combo list (This may increase performance if you have a large number of thirdparties, but it is less convenient)
    -DelaiedFullListToSelectContact=Wait you press a key before loading content of contact combo list (This may increase performance if you have a large number of contact, but it is less convenient)
    +UseSearchToSelectCompanyTooltip=此外,如果您有大量第三方(> 100 000),您可以通过在"设置"-> "其他"中将常量COMPANY_DONOTSEARCH_ANYWHERE设置为1来提高速度。然后搜索将限制为以字符串的开头。
    +UseSearchToSelectContactTooltip=此外,如果您有大量第三方(> 100 000),您可以通过在"设置"-> "其他"中将常量CONTACT_DONOTSEARCH_ANYWHERE设置为1来提高速度。然后搜索将限制为以字符串开头。
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=触发搜索的字符数量:%s
     NotAvailableWhenAjaxDisabled=Ajax 禁用时不可用
    -AllowToSelectProjectFromOtherCompany=On document of a third party, can choose a project linked to another third party
    +AllowToSelectProjectFromOtherCompany=在合作方的文档上,可以选择链接到另一个合作方的项目
     JavascriptDisabled=禁用 JavaScript
     UsePreviewTabs=使用预览标签
     ShowPreview=显示预览
    @@ -80,25 +80,25 @@ PreviewNotAvailable=无预览
     ThemeCurrentlyActive=当前使用的主题
     CurrentTimeZone=PHP 服务器的时区
     MySQLTimeZone=MySql 服务器的时区
    -TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submited string. The timezone has effect only when using UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=空间
     Table=表
     Fields=字段
     Index=索引
     Mask=格式掩码
    -NextValue=下一个编码
    -NextValueForInvoices=下一个发票编码
    -NextValueForCreditNotes=下一个票据编码
    -NextValueForDeposit=Next value (down payment)
    -NextValueForReplacements=下一值(替换)
    -MustBeLowerThanPHPLimit=注意:无论这个参数值是多少,您的 PHP 参数已经限制每个上传文件大小为<b>%s</b> %s,
    +NextValue=下一个值
    +NextValueForInvoices=下一个值(发票)
    +NextValueForCreditNotes=下一个值(贷方记录)
    +NextValueForDeposit=下一个值(首付)
    +NextValueForReplacements=下一个值(替换)
    +MustBeLowerThanPHPLimit=注:无论这个参数值是多少,您的 PHP 参数已经限制每个上传文件大小为<b>%s</b> %s,
     NoMaxSizeByPHPLimit=注:您的 PHP 配置参数中没有设置限制
    -MaxSizeForUploadedFiles=上传文件的最大大小 (0 表示禁止上传)
    +MaxSizeForUploadedFiles=上传文件的最大尺寸(0表示不允许上传)
     UseCaptchaCode=登陆页面启用图形验证码
     AntiVirusCommand= 防毒命令的完整路径
     AntiVirusCommandExample= ClamWin 示例:c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>ClamAv 实例:/usr/bin/clamscan
     AntiVirusParam= 更多命令行参数
    -AntiVirusParamExample= ClamWin 示例: --database
    +AntiVirusParamExample= ClamWin的示例: -  database =“C:\\ Program Files(x86)\\ ClamWin \\ lib”
     ComptaSetup=会计模块设置
     UserSetup=用户管理设置
     MultiCurrencySetup=多币种设置
    @@ -126,16 +126,16 @@ PHPTZ=PHP服务器时区
     DaylingSavingTime=夏令时间
     CurrentHour=PHP 服务器时间
     CurrentSessionTimeOut=当前会话超时
    -YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a file .htaccess with a line like this "SetEnv TZ Europe/Paris"
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=插件
     Boxes=插件
    -MaxNbOfLinesForBoxes=插件清单最大数值
    -AllWidgetsWereEnabled=All available widgets are enabled
    +MaxNbOfLinesForBoxes=插件显示行数
    +AllWidgetsWereEnabled=全部插件已启用
     PositionByDefault=默认顺序
     Position=位置
    -MenusDesc=菜单栏管理者设置两个菜单栏内容(包括横向和纵向)
    -MenusEditorDesc=The menu editor allows you to define custom menu entries. Use it carefully to avoid instability and permanently unreachable menu entries.<br>Some modules add menu entries (in menu <b>All</b> mostly). If you remove some of these entries by mistake, you can restore them disabling and reenabling the module.
    +MenusDesc=菜单管理器定义两菜单中的内容(横向和纵向菜单栏)。
    +MenusEditorDesc=菜单编辑器允许您定义个性化的菜单项。请谨慎使用,以免造成部分菜单项无法访问,影响 Dolibarr 的稳定性。<br>一些模块会添加菜单项(通常在 <b>所有(All)</b>菜单下)。如果您错误的移除了其中的一些菜单项,可以通过禁用/重新启用相应的模块来恢复。
     MenuForUsers=用户菜单
     LangFile=.lang 文件
     System=系统
    @@ -143,15 +143,15 @@ SystemInfo=系统信息
     SystemToolsArea=系统工具区
     SystemToolsAreaDesc=此区域提供管理员功能。请点选菜单来管理你想要的内容。
     Purge=清空
    -PurgeAreaDesc=该页面允许您删除所有由Dolibarr自动生成和储存的文件(临时文件和所有在<b>%s</b>目录里的文件)。不必要使用该功能。它是为那些把Dolibarr安装在第三方的服务器并且没有删除文件权限的使用者提供的一个应急操作。
    -PurgeDeleteLogFile=Delete log files, including <b>%s</b> defined for Syslog module (no risk of losing data)
    -PurgeDeleteTemporaryFiles=删除临时文件(无数据丢失风险)
    +PurgeAreaDesc=此页面允许您删除目录<b>%s</b>或临时文件夹中 Dolibarr 生成或存储的所有文件。通常无需使用此功能。它为Dolibarr托管在服务器上,但服务供应商未提供删除权限的用户而设。
    +PurgeDeleteLogFile=删除系统日志模块定义的日志文件<b>%s</b>(无数据丢失风险)
    +PurgeDeleteTemporaryFiles=删除所有临时文件(无数据丢失风险)
     PurgeDeleteTemporaryFilesShort=删除临时文件
     PurgeDeleteAllFilesInDocumentsDir=删除 <b>%s</b> 目录中的所有文件。临时文件、数据库备份转储文件、系统档案条目(第三方、账单)的附件及 电子文档管理 模块中上传的文件。
     PurgeRunNow=立即清空
     PurgeNothingToDelete=未删除目录或文件
     PurgeNDirectoriesDeleted=<b>%s</b> 个文件或目录删除。
    -PurgeNDirectoriesFailed=Failed to delete <b>%s</b> files or directories.
    +PurgeNDirectoriesFailed=删除 <b>%s</b>文件或目录失败
     PurgeAuditEvents=清空所有安全事件
     ConfirmPurgeAuditEvents=您确定要清除所有安全事件吗?所有安全日志将被删除,但不会删除其他数据。
     GenerateBackup=生成备份
    @@ -187,33 +187,33 @@ ExtendedInsert=扩展 INSERT
     NoLockBeforeInsert=INSERT 命令前后没有锁定命令
     DelayedInsert=延迟插入
     EncodeBinariesInHexa=二进制数据以十六进制编码
    -IgnoreDuplicateRecords=忽略错误的重复记录(插入忽略)
    +IgnoreDuplicateRecords=忽略重复记录错误(INSERT IGNORE)
     AutoDetectLang=自动检测(浏览器的语言)
     FeatureDisabledInDemo=功能在演示版中已禁用
    -FeatureAvailableOnlyOnStable=Feature only available on official stable versions
    -BoxesDesc=小组件展示一些可以添加到您个人页面的信息。您可以通过选择目标页面点击“激活”或关闭按钮来选择显示或关闭这些小组件。
    +FeatureAvailableOnlyOnStable=功能仅适用于官方稳定版本
    +BoxesDesc=资讯框是一些页面中显示信息的屏幕区域。你可以选择目标页面并点击“启用”或垃圾桶按钮来显示或禁用这些信息域。
     OnlyActiveElementsAreShown=仅显示 <a href="%s">已启用模块</a> 的元素。
    -ModulesDesc=Dolibarr 模块定义在软件中启用了哪些应用程序/功能。部分模块/应用在激活后必须授予用户使用权限。单击“状态”列中的开/关按钮来启用或禁用模块/功能。
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=你能在外部互联网查找到并下载更多的功能模块...
    -ModulesDeployDesc=If permissions on your file system allows it, you can use this tool to deploy an external module. The module wil then be visible on the tab <strong>%s</strong>.
    -ModulesMarketPlaces=更多应用/模块
    -ModulesDevelopYourModule=Develop your own app/modules
    -ModulesDevelopDesc=You can develop or find a partner to develop for you, your personalised module
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
    +ModulesMarketPlaces=更多模块...
    +ModulesDevelopYourModule=开发自己的模块
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=新建
    -FreeModule=Free
    -CompatibleUpTo=Compatible with version %s
    -NotCompatible=This module does not seem compatible with your Dolibarr %s (Min %s - Max %s).
    -CompatibleAfterUpdate=This module requires an update to your Dolibarr %s (Min %s - Max %s).
    -SeeInMarkerPlace=See in Market place
    -Updated=Updated
    -Nouveauté=Novelty
    -AchatTelechargement=Buy / Download
    -GoModuleSetupArea=To deploy/install a new module, go onto the Module setup area at <a href="%s">%s</a>.
    +FreeModule=空余
    +CompatibleUpTo=与版本%s兼容
    +NotCompatible=此模块似乎与您的Dolibarr %s(Min %s  -  Max %s)不兼容。
    +CompatibleAfterUpdate=此模块需要更新Dolibarr %s(Min %s  -  Max %s)。
    +SeeInMarkerPlace=在市场上看到
    +Updated=已更新
    +Nouveauté=新颖
    +AchatTelechargement=购买/下载
    +GoModuleSetupArea=要部署/安装新模块,请转到<a href="%s"> %s </a>上的模块设置区域。
     DoliStoreDesc=DoliStore,为 Dolibarr 的 ERP/CRM 的外部模块官方市场
    -DoliPartnersDesc=List of companies providing custom developed modules or features (Note: anyone experienced in PHP programming can provide custom development for an open source project)
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
     WebSiteDesc=参考网址查找更多模块...
    -DevelopYourModuleDesc=Some solutions to develop your own module...
    +DevelopYourModuleDesc=一些开发自己模块的解决方案......
     URL=链接
     BoxesAvailable=插件可用
     BoxesActivated=插件已启用
    @@ -221,78 +221,82 @@ ActivateOn=启用
     ActiveOn=启用
     SourceFile=来源文件
     AvailableOnlyIfJavascriptAndAjaxNotDisabled=仅当 JavaScript 启用时可用
    -Required=必须
    -UsedOnlyWithTypeOption=仅使用部分日程选项
    +Required=必要
    +UsedOnlyWithTypeOption=仅供某些议程选项使用
     Security=安全
     Passwords=密码
     DoNotStoreClearPassword=不在数据库中储存明文密码,只存储加密后的密码(建议启用)
     MainDbPasswordFileConfEncrypted=加密 conf.php 中的数据库密码(推荐启用)
    -InstrucToEncodePass=如果要在<b>conf.php</b>中使用明文密码,请将<br><b>$dolibarr_main_db_pass="...";</b><br>替换为br><b>$dolibarr_main_db_pass="crypted:%s";</b>
    -InstrucToClearPass=如果要在<b>conf.php</b>中使用明文密码,请将<br><b>$dolibarr_main_db_pass="crypted:...";</b><br>替换为<br><b>$dolibarr_main_db_pass="%s";</b>
    -ProtectAndEncryptPdfFiles=保护生成的PDF文件(不推荐,影响PDF的批量生成)
    +InstrucToEncodePass=要将 <b>conf.php</b> 文件中的密码加密,替换行 <br><b>$ dolibarr_main_db_pass="..."</b><br> 为 <br><b>$dolibarr_main_db_pass="crypted:%s"</b>
    +InstrucToClearPass=要在<b>conf.php</b>文件中使用将明文密码,替换行<br><b>$ dolibarr_main_db_pass="crypted:..."</b><br>为<br><b>$dolibarr_main_db_pass="%s"</b>
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=PDF保护允许在PDF浏览器中阅读和打印PDF,但无法编辑和复制内容。请注意,使用此功能将导致生成全局多页合并PDF的功能无效(例如未支付账单)。
    -Feature=功能特色
    +Feature=功能
     DolibarrLicense=授权
    -Developpers=开发商/贡献者
    +Developpers=开发者/贡献者
     OfficialWebSite=Dolibarr 国际官方网站
     OfficialWebSiteLocal=内部网站 (%s)
     OfficialWiki=Dolibarr Wiki 上的文档
     OfficialDemo=Dolibarr在线演示
    -OfficialMarketPlace=官方市场提供外部扩展模型/模块
    +OfficialMarketPlace=官方市场提供外部模块/扩展
     OfficialWebHostingService=引用网络托管服务(云主机)
     ReferencedPreferredPartners=首选合作伙伴
    -OtherResources=Other resources
    -ExternalResources=External resources
    -SocialNetworks=Social Networks
    +OtherResources=其他资源
    +ExternalResources=外部资源
    +SocialNetworks=社交网络
     ForDocumentationSeeWiki=用户或开发人员用文档(文档,常见问题…),<br>参见 Dolibarr 百科:<br><b><a href="%s" target="_blank">%s</a></b>
     ForAnswersSeeForum=您有任何其他问题/帮助,可以到 Dolibarr 论坛: <br> <b><a href="%s" target="_blank">%s</a></b>简体中文翻译可到Dolibarr爱好者交流Q群技术交流:206239089
    -HelpCenterDesc1=此处可以帮助你获得 Dolibarr 帮助支持服务。
    -HelpCenterDesc2=此服务的一些部分,<b>仅有英文</b> 可用。
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=此资源的一些部分,<b>仅有英文</b> 可用。
     CurrentMenuHandler=当前菜单处理程序
     MeasuringUnit=计量单位
    -LeftMargin=Left margin
    -TopMargin=Top margin
    -PaperSize=Paper type
    -Orientation=Orientation
    -SpaceX=Space X
    -SpaceY=Space Y
    -FontSize=Font size
    -Content=Content
    -NoticePeriod=通知期限
    -NewByMonth=New by month
    +LeftMargin=左页边距
    +TopMargin=顶页边距
    +PaperSize=纸张类型
    +Orientation=方向
    +SpaceX=空间X.
    +SpaceY=空间Y.
    +FontSize=字体大小
    +Content=内容
    +NoticePeriod=通知期
    +NewByMonth=按月新增
     Emails=电子邮件
     EMailsSetup=电子邮件设置
    -EMailsDesc=This page allows you to overwrite your PHP parameters for emails sending. In most cases on Unix/Linux OS, your PHP setup is correct and these parameters are useless.
    -EmailSenderProfiles=Emails sender profiles
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
    +EmailSenderProfiles=电子邮件发件人资料
     MAIN_MAIL_SMTP_PORT=SMTP/SMTPS 端口 ( php.ini 文件中的默认值:<b>%s</b>)
     MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS 主机 ( php.ini 文件中的默认值:<b>%s</b>)
     MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS 端口 ( Unix 类系统下未在 PHP 中定义)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS 主机 ( Unix 类系统下未在 PHP 中定义)
    -MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (By default in php.ini: <b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=Eemail used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
     MAIN_MAIL_AUTOCOPY_TO= BCC 所有发送邮件至
    -MAIN_DISABLE_ALL_MAILS=Disable all emails sendings (for test purposes or demos)
    -MAIN_MAIL_FORCE_SENDTO=Send all emails to (instead of real recipients, for test purposes)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employees users with email into allowed destinaries list
    -MAIN_MAIL_SENDMODE=电邮发送方法
    -MAIN_MAIL_SMTPS_ID=SMTP ID,如果要求验证
    -MAIN_MAIL_SMTPS_PW=SMTP 密码,如果要求验证
    -MAIN_MAIL_EMAIL_TLS= 使用 TLS(SSL)加密
    -MAIN_MAIL_EMAIL_STARTTLS= 使用 TLS(SSL)加密
    -MAIN_DISABLE_ALL_SMS=禁用所有短信发送(用于测试目的或演示)
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
    +MAIN_MAIL_FORCE_SENDTO=发送电子邮件至(替换真正的收件人,用于测试目的)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=短信发送方法
    -MAIN_MAIL_SMS_FROM=发送短信的默认发件人号码
    -MAIN_MAIL_DEFAULT_FROMTYPE=Sender email by default for manual sendings (User email or Company email)
    -UserEmail=User email
    -CompanyEmail=Company email
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=Default sender email for manual sending (User email or Company email)
    +UserEmail=用户邮箱
    +CompanyEmail=公司邮箱
     FeatureNotAvailableOnLinux=功能在 Unix 类系统下不可用。请在本地测试您的sendmail程序。
    -SubmitTranslation=如果您发现当前语言的翻译不完整或有误,您可以通过编辑 <b>langs/%s</b> 文件更正它,并将修改后的文件提交至  www.transifex.com/dolibarr-association/dolibarr/
    -SubmitTranslationENUS=如果您发现当前语言的翻译不完整或有误,您可以通过编辑 <b>langs/%s</b> 文件更正它,并将修改后的文件提交至 dolibarr.org/forum 或github开发者 github.com/Dolibarr/dolibarr.
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslationENUS=如果您发现当前语言的翻译不完整或有误,您可以通过编辑 <b>langs/%s</b> 文件更正它,并将修改后的文件提交至  www.transifex.com/dolibarr-association/dolibarr/(或者提交至QQ群:206239089)
     ModuleSetup=模块设置
    -ModulesSetup=Modules/Application setup
    +ModulesSetup=模块设置
     ModuleFamilyBase=系统
     ModuleFamilyCrm=客户关系管理(CRM)
    -ModuleFamilySrm=Vendor Relation Management (VRM)
    +ModuleFamilySrm=供应商关系管理(VRM)
     ModuleFamilyProducts=产品管理
     ModuleFamilyHr=人力资源管理 (HR)
     ModuleFamilyProjects=项目/协同工作
    @@ -301,63 +305,63 @@ ModuleFamilyTechnic=多模块工具
     ModuleFamilyExperimental=试验性模块
     ModuleFamilyFinancial=财务模块(会计/金库)
     ModuleFamilyECM=电子文档管理(ECM)
    -ModuleFamilyPortal=网页和其他正面应用程序
    +ModuleFamilyPortal=网页和其他前端应用
     ModuleFamilyInterface=系统外部扩展接口
     MenuHandlers=菜单处理程序
     MenuAdmin=菜单编辑器
     DoNotUseInProduction=请勿用于生产环境
     ThisIsProcessToFollow=步骤如下:
    -ThisIsAlternativeProcessToFollow=This is an alternative setup to process manually:
    +ThisIsAlternativeProcessToFollow=这是手动处理的替代设置:
     StepNb=第 %s 步
    -FindPackageFromWebSite=搜索你需要的功能(例如在官方 %s )。
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=下载安装包 (例如从官方网站上 %s)
    -UnpackPackageInDolibarrRoot=Unpack the packaged files into server directory dedicated to Dolibarr: <b>%s</b>
    -UnpackPackageInModulesRoot=To deploy/install an external module, unpack the packaged files into the server directory dedicated to modules: <b>%s</b>
    -SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going on the page to setup modules: <a href="%s">%s</a>.
    -NotExistsDirect=The alternative root directory is not defined to an existing directory.<br>
    -InfDirAlt=Since version 3, it is possible to define an alternative root directory. This allows you to store, into a dedicated directory, plug-ins and custom templates.<br>Just create a directory at the root of Dolibarr (eg: custom).<br>
    -InfDirExample=<br>Then declare it in the file <strong>conf.php</strong><br> $dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>If these lines are commented with "#", to enable them, just uncomment by removing the "#" character.
    -YouCanSubmitFile=For this step, you can submit the .zip file of module package here :
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
    +NotExistsDirect=未设置可选备用根目录。<br>
    +InfDirAlt=自 v3 版本开始,Dolibarr 可以定义备用根目录地址。这令您可以将插件和自定义模板保存至同一位置。<br>您只需在Dolibarr的根目录下创建一个目录(例如custom)。<br>
    +InfDirExample=<br>然后在文件<strong> conf.php</strong>中声明它。<br> $ dolibarr_main_url_root_alt ='/ custom'<br> $ dolibarr_main_document_root_alt ='/ path / of / dolibarr / htdocs / custom'<br>如果这些行用“#”注释,要启用它们,只需删除“#”字符即可取消注释。
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr 当前版本
    -CallUpdatePage=升级更新数据库和数据请到: %s.
    +CallUpdatePage=请到数据库的结构和数据更新页面:%s。
     LastStableVersion=最新稳定版
    -LastActivationDate=Latest activation date
    -LastActivationAuthor=Latest activation author
    -LastActivationIP=Latest activation IP
    +LastActivationDate=最新激活日期
    +LastActivationAuthor=最新激活作者
    +LastActivationIP=最新激活IP
     UpdateServerOffline=离线升级服务器
    -WithCounter=Manage a counter
    -GenericMaskCodes=You may enter any numbering mask. In this mask, the following tags could be used:<br><b>{000000}</b> corresponds to a number which will be incremented on each %s. Enter as many zeros as the desired length of the counter. The counter will be completed by zeros from the left in order to have as many zeros as the mask. <br><b>{000000+000}</b> same as previous but an offset corresponding to the number to the right of the + sign is applied starting on first %s. <br><b>{000000@x}</b> same as previous but the counter is reset to zero when month x is reached (x between 1 and 12, or 0 to use the early months of fiscal year defined in your configuration, or 99 to reset to zero every month). If this option is used and x is 2 or higher, then sequence {yy}{mm} or {yyyy}{mm} is also required. <br><b>{dd}</b> day (01 to 31).<br><b>{mm}</b> month (01 to 12).<br><b>{yy}</b>, <b>{yyyy}</b> or <b>{y}</b> year over 2, 4 or 1 numbers. <br>
    -GenericMaskCodes2=<b>{cccc}</b> the client code on n characters<br><b>{cccc000}</b> the client code on n characters is followed by a counter dedicated for customer. This counter dedicated to customer is reset at same time than global counter.<br><b>{tttt}</b> The code of third party type on n characters (see menu Home - Setup - Dictionary - Types of third parties). If you add this tag, the counter will be different for each type of third party.<br>
    +WithCounter=管理柜台
    +GenericMaskCodes=您可自由设置格式掩码。在 %s 格式掩码中, 有如下计数标记可用:<br><b>{000000}</b>表示按顺序递增的序号。序号位数与掩码中0的个数相同,不足自动补零,达最大值后自动归零。<br><b>{000000+000}</b> 同上但 %s 起始序号从 + 后的数值记起。<br><b>{000000@x}</b> 与第一种相同,但序号到X月时自动清零(x=1~12 、0=程序设置中的财年起始月、99=每月清零)。 如果使用此种掩码且 x >= 2 ,则必须同时使用日期掩码 {yy}{mm} 或 {yyyy}{mm}。<br><b>{dd}</b> 天 (01~31)。<br><b>{mm}</b> 月 (01~12)。<br><b>{yy}</b>,<b>{yyyy}</b> 或 <b>{y}</b> 代表 2位, 4位 或 1 位年。<br><br>
    +GenericMaskCodes2=<b>{cccc}</b> 客户代码<br><b>{cccc000}</b> 客户代码ccc后跟客户引用序号000。<br><b>{tttt}></b> 公司类型代码。(参见公司类型的下拉菜单项目列表)。<br>
     GenericMaskCodes3=其它非标记字符将维持不变。<br>不允许使用空格<br>
    -GenericMaskCodes4a=<u>Example on the 99th %s of the third party TheCompany, with date 2007-01-31:</u><br>
    -GenericMaskCodes4b=<u>例如合伙人创建于 2007-03-01:</u><br>
    +GenericMaskCodes4a=<u>例如: 2007-01-31 第三方“TheCompany”的第99笔 %s :</u> <br>
    +GenericMaskCodes4b=<u>例如合作方创建于 2007-03-01:</u><br>
     GenericMaskCodes4c=<u>例如: 于 2007-03-1 建立的产品资料:</u><br>
    -GenericMaskCodes5=<b>ABC{yy}{mm}-{000000}</b> will give <b>ABC0701-000099</b><br><b>{0000+100@1}-ZZZ/{dd}/XXX</b> will give <b>0199-ZZZ/31/XXX</b><br><b>IN{yy}{mm}-{0000}-{t}</b> will give <b>IN0701-0099-A</b> if the type of company is 'Responsable Inscripto' with code for type that is 'A_RI'
    +GenericMaskCodes5=格式掩码: <b>ABC{yy}{mm}-{000000}</b> 将生成编号 <b>ABC0701-000099</b><br> 格式掩码:<b>{0000+100}-ZZZ/{dd}/XXX</b> 将生成编号 <b>0199-ZZZ/31/XXX</b>
     GenericNumRefModelDesc=根据事先定义的格式掩码,返回一个可定制编号,详见说明。
     ServerAvailableOnIPOrPort=可用服务器地址: <b>%s:</b><b>%s</b>
     ServerNotAvailableOnIPOrPort=服务器地址: <b>%s:</b><b>%s</b> 不可用
     DoTestServerAvailability=测试服务器连通性
     DoTestSend=测试发送
     DoTestSendHTML=测试发送 HTML
    -ErrorCantUseRazIfNoYearInMask=Error, can't use option @ to reset counter each year if sequence {yy} or {yyyy} is not in mask.
    +ErrorCantUseRazIfNoYearInMask=错误,如果序列{yy}或{yyyy}不在掩码中,则不能使用选项@来重置计数器。
     ErrorCantUseRazInStartedYearIfNoYearMonthInMask=错误,格式掩码中标记 @ 必须与{yy}{mm}或{yyyy}{mm}同时使用。
     UMask=Unix/Linux/BSD 文件系统下新文件的 umask 参数。
     UMaskExplanation=定义服务器上 Dolibarr 创建文件的默认权限(例如上传的文件)。<br>它必须是八进制值(例如,0666就表示人人可读可写)。 <br>此参数对Windows服务器无效。
    -SeeWikiForAllTeam=Take a look at the wiki page for full list of all actors and their organization
    +SeeWikiForAllTeam=全部参与者及其机构的完整列表参见wiki页面
     UseACacheDelay= 缓存导出响应的延迟时间(0或留空表示禁用缓存)
     DisableLinkToHelpCenter=隐藏登陆页面中的“<b>需要帮助或支持</b>”链接
     DisableLinkToHelp=隐藏在线帮助链接 "<b>%s</b>"
    -AddCRIfTooLong=注意:没有自动换行功能,所以如果一行文字太长会超出纸张,请务必按下Enter键换行。
    -ConfirmPurge=Are you sure you want to execute this purge?<br>This will delete definitely all your data files with no way to restore them (ECM files, attached files...).
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=最小长度
     LanguageFilesCachedIntoShmopSharedMemory=文件 .lang 已加载到共享内存
    -LanguageFile=Language file
    -ExamplesWithCurrentSetup=当前运行设置的实例
    +LanguageFile=语言文件
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=开源办公软件文档模板目录列表
     ListOfDirectoriesForModelGenODT=包含开源办公软件的格式的文档的模板目录列表。<br><br>请在此填写完整的目录路径。<br>每填写一个目录路径结尾按回车换行。<br>添加一个 GED 模块目录, 如下 <b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>。<br><br>该目录中的文件格式必须是 <b>.odt</b> 格式或 <b>.ods</b>格式。
    -NumberOfModelFilesFound=这些目录中发现的 ODT/ODS 格式的模板文件数量
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=参考语法格式:<br>c:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
    -FollowingSubstitutionKeysCanBeUsed=<br>了解如何建立和保存ODT文件范本到指定目录,请阅读说明文档:
    +FollowingSubstitutionKeysCanBeUsed=<br>要知道如何建立您的ODT文件范本并储存在指定目录,请至wiki网站:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
     FirstnameNamePosition=姓 /名 位置顺序
     DescWeather=当事件逾期/延误达到以下数值范围时,主看板将显示如下图标:
    @@ -365,141 +369,143 @@ KeyForWebServicesAccess=使用 SOAP 服务的密钥 (webservices 中的"dolibarr
     TestSubmitForm=可在以下表单输入资料来测试
     ThisForceAlsoTheme=使用此菜单管理器将同时使用其主题,无论用户如何设置。同时此菜单管理器专为智能手机而设计但并不适用于所有手机。如果您的手机上使用有问题请选择其它主题。
     ThemeDir=主题目录
    -ConnectionTimeout=连接超时
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=响应超时
     SmsTestMessage=测试消息从 __PHONEFROM__ 至 __ PHONETO__
     ModuleMustBeEnabledFirst=必须先行激活启用 <b>%s</b> 模块如果你需要使用这个功能的话。
     SecurityToken=保护URL链接的密钥
    -NoSmsEngine=无短信发送管理程序可用。SMS发件人管理器没有安装默认分布 (因为他们依赖于一个外部供应商) 但你能在这儿找到一些 %s
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF格式
    -PDFDesc=你可以设置PDF生成有关的每个全局选项
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=PDF 中地址生成规则
    -HideAnyVATInformationOnPDF=Hide all information related to Sales tax / VAT on generated PDF
    -PDFRulesForSalesTax=Rules for Sales Tax / VAT
    -PDFLocaltax=Rules for %s
    -HideLocalTaxOnPDF=Hide %s rate into pdf column tax sale
    -HideDescOnPDF=生成 PDF 中隐藏产品描述信息
    -HideRefOnPDF=隐藏生成 PDF 中的产品编号
    -HideDetailsOnPDF=在生成的PDF文档中隐藏产品详情
    -PlaceCustomerAddressToIsoLocation=Use french standard position (La Poste) for customer address position
    +HideAnyVATInformationOnPDF=生成的PDF中隐藏税率的信息
    +PDFRulesForSalesTax=销售税/增值税规则
    +PDFLocaltax=%s的规则
    +HideLocalTaxOnPDF=将%s税率隐藏到pdf栏税收销售中
    +HideDescOnPDF=生成的PDF 中隐藏产品描述信息
    +HideRefOnPDF=生成的PDF 中的隐藏产品编号
    +HideDetailsOnPDF=生成的PDF中隐藏产品详情
    +PlaceCustomerAddressToIsoLocation=使用法国标准位置(La Poste)作为客户地址位置
     Library=资料库
     UrlGenerationParameters=URL地址的保护参数
     SecurityTokenIsUnique=为每个URL使用唯一的securekey参数值
     EnterRefToBuildUrl=输入对象 %s 的编号
     GetSecuredUrl=获取算得的URL地址
    -ButtonHideUnauthorized=Hide buttons to non admin users for unauthorized actions instead of showing greyed disabled buttons
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=以前的增值税率(VAT)
     NewVATRates=新建增值税率(VAT)
     PriceBaseTypeToChange=设置了基本参考价值的产品的价格
     MassConvert=执行批量转换
     String=字符串
    -TextLong=Long text 长文本型
    -HtmlText=Html text
    +TextLong=长文本
    +HtmlText=Html文字
     Int=整型
     Float=浮点型
     DateAndTime=日期与小时
     Unique=唯一
    -Boolean=Boolean (one checkbox)
    +Boolean=布尔值(复选框)
     ExtrafieldPhone = 电话
     ExtrafieldPrice = 价格
     ExtrafieldMail = 电子邮件
    -ExtrafieldUrl = Url
    +ExtrafieldUrl = 网址
     ExtrafieldSelect = 选择列表
     ExtrafieldSelectList = 从表格中选取
    -ExtrafieldSeparator=Separator (not a field)
    +ExtrafieldSeparator=分隔符(不是字段)
     ExtrafieldPassword=密码
    -ExtrafieldRadio=Radio buttons (on choice only)
    -ExtrafieldCheckBox=Checkboxes
    -ExtrafieldCheckBoxFromList=Checkboxes from table
    -ExtrafieldLink=连接到项目
    -ComputedFormula=Computed field
    -ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=Keep this field empty means value will be stored without encryption (field must be only hidden with star on screen).<br>Set here value 'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retreive original value)
    -ExtrafieldParamHelpselect=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>In order to have the list depending on another complementary attribute list :<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key <br><br>In order to have the list depending on another list :<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
    -ExtrafieldParamHelpcheckbox=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    -ExtrafieldParamHelpradio=List of values must be lines with format key,value (where key can't be '0')<br><br> for example : <br>1,value1<br>2,value2<br>3,value3<br>...
    -ExtrafieldParamHelpsellist=List of values comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>- idfilter is necessarly a primary int key<br>- filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntax  extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list:<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
    -ExtrafieldParamHelpchkbxlst=List of values comes from a table<br>Syntax : table_name:label_field:id_field::filter<br>Example : c_typent:libelle:id::filter<br><br>filter can be a simple test (eg active=1) to display only active value<br>You can also use $ID$ in filter witch is the current id of current object<br>To do a SELECT in filter use $SEL$<br>if you want to filter on extrafields use syntax  extra.fieldcode=... (where field code is the code of extrafield)<br><br>In order to have the list depending on another complementary attribute list :<br>c_typent:libelle:id:options_<i>parent_list_code</i>|parent_column:filter <br><br>In order to have the list depending on another list:<br>c_typent:libelle:id:<i>parent_list_code</i>|parent_column:filter
    -ExtrafieldParamHelplink=Parameters must be ObjectName:Classpath<br>Syntax : ObjectName:Classpath<br>Examples :<br>Societe:societe/class/societe.class.php<br>Contact:contact/class/contact.class.php
    +ExtrafieldRadio=Radio buttons (one choice only)
    +ExtrafieldCheckBox=复选框
    +ExtrafieldCheckBoxFromList=表格中的复选框
    +ExtrafieldLink=连接到对象
    +ComputedFormula=计算字段
    +ComputedFormulaDesc=您可以使用对象的其他属性或任何PHP编码在此输入公式以获得动态计算值。您可以使用任何PHP兼容的公式,包括“?”条件运算符,并跟随全局对象:<strong> $ db,$ conf,$ langs,$ mysoc,$ user,$ object</strong>。<br> <strong>警告</strong>:只有$object的某些属性可能是可用的。如果你需要一个未加载的属性,只需在第二个例子中自己将对象提取到公式中。<br>使用计算字段意味着你无法从界面输入任何值。此外,如果存在语法错误,则公式可能不返回任何内容。<br> <br>公式示例:<br> $ object-> id <10? round($ object-> id / 2,2):( $ object-> id + 2 * $ user-> id)*(int)substr($ mysoc-> zip,1,2)<br> <br>重新加载对象的示例<br>(($ reloadedobj = new Societe($ db))&&($ reloadedobj-> fetch($ obj-> id?$ obj-> id:($ obj-> rowid?$ obj-> rowid:$ object-> id))> 0))? $ reloadedobj-> array_options ['options_extrafieldkey'] * $ reloadedobj-> capital / 5:' -  1'<br> <br> 强制加载对象及其父对象的公式的其他示例:<br>($ reloadedobj = new Task($ db))&&($ reloadedobj-> fetch($ object-> id)> 0)&&($ secondloadedobj = new Project($ db))&&($ secondloadedobj-> fetch($ reloadedobj-> fk_project )> 0))? $ secondloadedobj-> ref:'未找到父项目'
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
    +ExtrafieldParamHelpselect=值列表必须是格式为键/值对的行(其中键不能为'0')<br> <br>\n例如: <br>  1,value1<br> 2,value2 <br> code3,value3 <br>... <br> <br>\n 为了使列表具有另一个补充属性列表: <br> 1,value1 | options_<i>parent_list_code </i>:parent_key <br> 2,value2 | options_<i>parent_list_code</i> :parent_key<br><br>\n为了使列表依赖于另一个列表:   <br> 1,value1 | <i> parent_list_code</i>:parent_key<br> 2,value2 | <i> parent_list_code </i>:parent_key
    +ExtrafieldParamHelpcheckbox=值列表必须是格式为键/值对(其中键不能为'0')<br> <br>例如: <br> 1,value1 <br> 2,value2 <br>3,value3<br> ...
    +ExtrafieldParamHelpradio=值列表必须是格式为键/值对(其中键不能为'0')<br> <br>  例如:<br> 1,value1 <br> 2,value2 <br> 3,value3<br> ...
    +ExtrafieldParamHelpsellist=参数列表来自一个表<br>语法 : table_name:label_field:id_field::filter<br>例如 : c_typent:libelle:id::filter<br><br>过滤器可以是一个简单的测试 (eg active=1) 只显示活动值<br>你也可以使用 $ID$ 在当前id过滤器当前对象<br>用 SELECT 过滤器 $SEL$<br>如果你想在 extrafields 过滤器使用语法  extra.fieldcode=... (哪里栏位代码 extrafield)<br><br>为了有列表取决于另一个 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
    +ExtrafieldParamHelpchkbxlst=参数列表来自一个表<br>语法 : table_name:label_field:id_field::filter<br>例如 : c_typent:libelle:id::filter<br><br>过滤器可以是一个简单的测试 (eg active=1) 只显示活动值<br>你也可以使用 $ID$ 在当前id过滤器当前对象<br>用 SELECT 过滤器 $SEL$<br>如果你想在 extrafields 过滤器使用语法  extra.fieldcode=... (哪里栏位代码 extrafield)<br><br>为了有列表取决于另一个 :<br>c_typent:libelle:id:parent_list_code|parent_column:filter
    +ExtrafieldParamHelplink=参数必须是ObjectName:Classpath <br>语法:ObjectName:Classpath <br>示例:<br> Societe:societe / class / societe.class.php <br>联系人:contact / class / contact.class.php
     LibraryToBuildPDF=已使用资料库以支持生成PDF文件
    -LocalTaxDesc=一些国家适用于每个发票行2或3的税。如果是这样的情况下,选择的类型的第二和第三税和其速率。可能的类型有: <br> 1:地方税适用的产品和服务,而增值税(localtax的计算量不含税) <br> 2:地方税适用的产品和服务,包括增值税(localtax的计算量+纳税主体) <br> 3:地方税适用的产品不含增值税(localtax的计算量不含税) <br> 4:地方税适用的产品包括增值税(localtax的计算量+主缸) <br> 5:地方税适用于服务,而增值税(localtax的计算量不含税) <br> 6:地方税适用于服务包括增值税(localtax的计算量+税)
    +LocalTaxDesc=在一些国家,每个账单行有 2 或 3 项税。(大陆不适用)如果是这样,请选择第二和第三项税的类型及税率。Possible type are:<br>1 : local tax apply on products and services without vat (vat is not applied on local tax)<br>2 : local tax apply on products and services before vat (vat is calculated on amount + localtax)<br>3 : local tax apply on products without vat (vat is not applied on local tax)<br>4 : local tax apply on products before vat (vat is calculated on amount + localtax)<br>5 : local tax apply on services without vat (vat is not applied on local tax)<br>6 : local tax apply on services before vat (vat is calculated on amount + localtax)
     SMS=短信
     LinkToTestClickToDial=输入一个电话号码来为用户显示网络电话网址测试功能 <strong>%s</strong>
     RefreshPhoneLink=刷新链接
    -LinkToTest=为用户生成的可访问链接 strong>%s</strong> (单击电话号码来测试)
    +LinkToTest=为用户生成的可访问链接<strong>%s</strong> (单击电话号码来测试)
     KeepEmptyToUseDefault=不填表示使用默认值
     DefaultLink=默认链接
     SetAsDefault=设为默认
     ValueOverwrittenByUserSetup=警告,此设置可能被用户设置所覆盖(用户可以设置各自的网络电话链接)
     ExternalModule=附加模块 - 安装于 %s 目录下
    -BarcodeInitForThirdparties=合伙人条码批量初始化
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=产品或服务条码批量初始化或重置
    -CurrentlyNWithoutBarCode=Currently, you have <strong>%s</strong> record on <strong>%s</strong> %s without barcode defined.
    -InitEmptyBarCode=Init value for next %s empty records
    +CurrentlyNWithoutBarCode=目前,您在<strong> %s </ strong> %s上没有定义条形码时有<strong> %s </ strong>记录。
    +InitEmptyBarCode=初始值为下一个%s空记录
     EraseAllCurrentBarCode=抹掉现存所有条码值
    -ConfirmEraseAllCurrentBarCode=Are you sure you want to erase all current barcode values?
    -AllBarcodeReset=所有现存条码值已经被抹掉
    -NoBarcodeNumberingTemplateDefined=条码编号模版在条形码模块中没有被启用。
    +ConfirmEraseAllCurrentBarCode=您确定要删除所有当前条形码值吗?
    +AllBarcodeReset=所有现存条码值已经被删除
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=启用文件缓存
    -ShowDetailsInPDFPageFoot=Add more details into footer of PDF files, like your company address, or manager names (to complete professional ids, company capital and VAT number).
    +ShowDetailsInPDFPageFoot=在PDF文件的页脚中添加更多详细信息,例如公司地址或经理姓名(以填写专业ID,公司资本和增值税号)。
     NoDetails=页脚无更多详情
     DisplayCompanyInfo=显示公司地址
    -DisplayCompanyManagers=显示管理员名称
    -DisplayCompanyInfoAndManagers=Display company address and manager names
    -EnableAndSetupModuleCron=If you want to have this recurring invoice beeing generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template with button *Create*. Note that even if you enabled automatic generation, you can still safely launch manual generation. Duplicates generation for same period are not possible.
    -ModuleCompanyCodeCustomerAquarium=%s followed by third party customer code for a customer accounting code
    -ModuleCompanyCodeSupplierAquarium=%s followed by third party supplier code for a supplier accounting code
    -ModuleCompanyCodePanicum=Return an empty accounting code.
    -ModuleCompanyCodeDigitaria=Accounting code depends on third party code. The code is composed of the character "C" in the first position followed by the first 5 characters of the third party code.
    -Use3StepsApproval=By default, Purchase Orders need to be created and approved by 2 different users (one step/user to create and one step/user to approve. Note that if user has both permission to create and approve, one step/user will be enough). You can ask with this option to introduce a third step/user approval, if amount is higher than a dedicated value (so 3 steps will be necessary: 1=validation, 2=first approval and 3=second approval if amount is enough).<br>Set this to empty if one approval (2 steps) is enough, set it to a very low value (0.1) if a second approval (3 steps) is always required.
    -UseDoubleApproval=Use a 3 steps approval when amount (without tax) is higher than...
    -WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) does not allow you to send an email from another server than their own server. Your current setup use the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not a server of them, so few of your sent Emails may not be accepted (be carefull also to your email provider sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your EMail provider to get SMTP credentials for your account).
    -WarningPHPMail2=If your email SMTP provider need to restrict email client to some IP addresses (very rare), this is the IP address of the mail user agent (MUA) for your ERP CRM application: <strong>%s</strong>.
    -ClickToShowDescription=Click to show description
    -DependsOn=This module need the module(s)
    -RequiredBy=This module is required by module(s)
    -TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. This need to have technical knowledges to read the content of the HTML page to get the key name of a field.
    -PageUrlForDefaultValues=You must enter here the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    -PageUrlForDefaultValuesCreate=<br>For form to create a new thirdparty, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>For page that list thirdparties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    -EnableDefaultValues=Enable usage of personalized default values
    -EnableOverwriteTranslation=Enable usage of overwrote translation
    -GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code, so to change this value, you must edit it fom Home-Setup-translation.
    -WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
    -Field=栏位
    -ProductDocumentTemplates=Document templates to generate product document
    -FreeLegalTextOnExpenseReports=Free legal text on expense reports
    -WatermarkOnDraftExpenseReports=Watermark on draft expense reports
    -AttachMainDocByDefault=Set this to 1 if you want to attach main document to email by default (if applicable)
    -FilesAttachedToEmail=Attach file
    -SendEmailsReminders=Send agenda reminders by emails
    -davDescription=Add a component to be a DAV server
    -DAVSetup=Setup of module DAV
    -DAV_ALLOW_PUBLIC_DIR=Enable the public directory (WebDav directory with no login required)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DisplayCompanyManagers=显示经理姓名
    +DisplayCompanyInfoAndManagers=显示公司地址和经理姓名
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
    +ModuleCompanyCodePanicum=返回一个空的科目代码
    +ModuleCompanyCodeDigitaria=科目代码取决于合作方的代码。代码以C开头,后跟合作方代码的 5 个字符
    +Use3StepsApproval=默认情况下,需要由2个不同的用户创建和批准采购订单(一步/用户创建和一步/用户批准。请注意,如果用户同时拥有创建和批准权限,则一步/用户就足够了) 。如果金额高于专用值,您可以要求使用此选项引入第三步/用户批准(因此需要3个步骤:1 =验证,2 =首次批准,3 =如果金额足够则为第二批准)。 <br>如果一个批准(2个步骤)足够,则将其设置为空,如果始终需要第二个批准(3个步骤),则将其设置为非常低的值(0.1)。
    +UseDoubleApproval=当金额(不含税)高于......时,使用3步批准
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
    +WarningPHPMail2=如果您的电子邮件SMTP提供商需要将电子邮件客户端限制为某些IP地址(非常罕见),则这是您的ERP CRM应用程序的邮件用户代理(MUA)的IP地址:<strong> %s</strong>。
    +ClickToShowDescription=单击以显示说明
    +DependsOn=This module needs the module(s)
    +RequiredBy=本模块被以下模块需要
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
    +PageUrlForDefaultValuesCreate=<br>对于表单来创建新的合作方,它是<strong> %s </strong>,<br>如果你想要以url参数为默认值,你可以使用<strong> %s </strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
    +EnableDefaultValues=启用个性化默认值的使用
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
    +WarningSettingSortOrder=警告,如果字段是未知字段,则在列表页面上设置默认排序顺序可能会导致技术错误。如果遇到此类错误,请返回此页面以删除默认排序顺序并恢复默认行为。
    +Field=字段
    +ProductDocumentTemplates=文档模板以生成产品文档
    +FreeLegalTextOnExpenseReports=费用报告中的免费法律文本
    +WatermarkOnDraftExpenseReports=草稿费用报告上的水印
    +AttachMainDocByDefault=如果要在默认情况下将主文档附加到电子邮件,请将此项设置为1(如果适用)
    +FilesAttachedToEmail=附加文件
    +SendEmailsReminders=通过电子邮件发送议程提醒
    +davDescription=添加组件作为DAV服务器
    +DAVSetup=模块DAV的设置
    +DAV_ALLOW_PUBLIC_DIR=启用公共目录(不需要登录的WebDav目录)
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=Enable the root directy of DMS/ECM module (login required)
    +DAV_ALLOW_ECM_DIRTooltip=The root directory where all files are manually uploaded when using the DMS/ECM module. Like for the feature from the web interface, you will need a valid login/password with granted permissions to access it.
     # Modules
     Module0Name=用户和组
    -Module0Desc=Users / Employees and Groups management
    -Module1Name=合伙人
    +Module0Desc=用户/员工和组管理
    +Module1Name=Third Parties
     Module1Desc=公司和联络人管理(客户、准客户潜在客户...等等)模块
     Module2Name=商业交易
     Module2Desc=交易管理
     Module10Name=会计
    -Module10Desc=Simple accounting reports (journals, turnover) based onto database content. Does not use any ledger table.
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=报价
     Module20Desc=报价管理模块
     Module22Name=邮件群发
     Module22Desc=电子邮件群发的管理
     Module23Name=能耗
     Module23Desc=能耗监测
    -Module25Name=客户订单
    -Module25Desc=客户订单管理模块
    +Module25Name=销售订单
    +Module25Desc=销售订单管理
     Module30Name=发票
     Module30Desc=客户发票和信用记录管理。供应商发票管理。
     Module40Name=供应商
    -Module40Desc=Suppliers and purchase management (purchase orders and billing)
    -Module42Name=Debug Logs
    -Module42Desc=Logging facilities (file, syslog, ...). Such logs are for technical/debug purposes.
    +Module40Desc=供应商和采购管理(采购订单和账单)
    +Module42Name=调试日志
    +Module42Desc=记录设施(文件,系统日志,......)。此类日志用于技术/调试目的。
     Module49Name=编辑器
     Module49Desc=编辑器管理
     Module50Name=产品
    @@ -511,13 +517,13 @@ Module52Desc=产品库存的管理
     Module53Name=服务
     Module53Desc=服务的管理
     Module54Name=联系人/订阅
    -Module54Desc=联系人管理(服务或常规订阅)模块
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=条码
     Module55Desc=条码管理
     Module56Name=电话
     Module56Desc=电话整合
    -Module57Name=Direct bank payment orders
    -Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for european countries.
    +Module57Name=长期订单
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=网络电话
     Module58Desc=网络电话系统集成(Asterisk ...)
     Module59Name=Bookmark4u
    @@ -528,108 +534,112 @@ Module75Name=差旅费用记录
     Module75Desc=费用和差旅记录的管理
     Module80Name=运输
     Module80Desc=运输和交货单快递单管理模块
    -Module85Name=银行和现金
    +Module85Name=Banks and Cash
     Module85Desc=银行或现金帐户管理
    -Module100Name=外部站点
    -Module100Desc=此模块添加外部网站链接或页面到 Dolibarr 的菜单或页面框架中
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman 及 SPIP
     Module105Desc=会员模块的 Mailman 或 SPIP 接口
     Module200Name=LDAP
    -Module200Desc=LDAP目录同步
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke 整合
     Module240Name=数据导出
    -Module240Desc=将数据从Dolibarr导出的工具(助手)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=数据导入
    -Module250Desc=将数据导入Dolibarr的工具(助手)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=会员
     Module310Desc=机构会员管理模块
     Module320Name=RSS 源
     Module320Desc=添加 RSS 源至 Dolibarr 主屏幕页面
    -Module330Name=书签
    -Module330Desc=书签管理
    -Module400Name=项目/机会/线索
    -Module400Desc=Management of projects, opportunities/leads and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    -Module410Name=Webcalendar
    -Module410Desc=Webcalendar 整合
    -Module500Name=Taxes and Special expenses
    -Module500Desc=Management of other expenses (sale taxes, social or fiscal taxes, dividends, ...)
    -Module510Name=Payment of employee wages
    -Module510Desc=Record and follow payment of your employee wages
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=Projects or Leads
    +Module400Desc=Management of projects, leads/opportunities and/or tasks. You can also assign any element (invoice, order, proposal, intervention, ...) to a project and get a transversal view from the project view.
    +Module410Name=日历
    +Module410Desc=日历整合
    +Module500Name=税、保险、红利、股息管理
    +Module500Desc=管理其他费用(销售税,社会税或财政税,股息......)
    +Module510Name=工资管理
    +Module510Desc=Record and track employee payments
     Module520Name=贷款
     Module520Desc=贷款管理模块
    -Module600Name=Notifications on business events
    -Module600Desc=Send EMail notifications (triggered by some business events) to users (setup defined on each user), to third-party contacts (setup defined on each third party) or to fixed emails
    -Module600Long=Note that this module is dedicated to send real time emails when a dedicated business event occurs. If you are looking for a feature to send reminders by email of your agenda events, go into setup of module Agenda.
    -Module610Name=Product Variants
    -Module610Desc=Allows creation of products variant based on attributes (color, size, ...)
    +Module600Name=商业活动通知
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
    +Module610Name=产品变体
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=捐赠
     Module700Desc=捐赠管理模块
     Module770Name=费用报表
    -Module770Desc=管理和索取费用报表 (交通费, 餐费,等等 ...)模块
    -Module1120Name=Vendor commercial proposal
    -Module1120Desc=Request vendor commercial proposal and prices
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
    +Module1120Name=供应商商业提案
    +Module1120Desc=请求供应商商业提案和价格
     Module1200Name=Mantis
     Module1200Desc=Mantis 整合
     Module1520Name=文档生成
     Module1520Desc=生成文档群发邮件
     Module1780Name=标签/分类
    -Module1780Desc=Create tags/category (products, customers, vendors, contacts or members)
    +Module1780Desc=创建标签/类别(产品,客户,供应商,联系人或成员)
     Module2000Name=所见即所得编辑器
    -Module2000Desc=允许以高级富文本的编辑方式来编辑文本内容(基于 CKEditor)
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=动态定价
     Module2200Desc=允许价格的数学表达式
     Module2300Name=计划任务
    -Module2300Desc=Scheduled jobs management (alias cron or chrono table)
    -Module2400Name=Events/Agenda
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2300Desc=预定的工作管理(别名cron或chrono表)
    +Module2400Name=事件/日程
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=DMS / ECM
    -Module2500Desc=Document Management System / Electronic Content Management. Automatic organization of your generated or stored documents. Share them when you need.
    +Module2500Desc=文件管理系统/电子内容管理。自动组织生成或存储的文档。在需要时分享。
     Module2600Name=API/Web 服务 (SOAP 服务器)
     Module2600Desc=允许 Dolibarr SOAP 服务器提供 API 服务
     Module2610Name=API/Web 服务 (REST 服务器)
     Module2610Desc=允许 Dolibarr REST 服务器提供 API 服务
    -Module2660Name=Call WebServices (SOAP client)
    -Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment)
    +Module2660Name=调用WebServices(SOAP客户端)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=使用在线 Gravatar 服务(www.gravatar.com),通过搜索电子邮件地址来显示用户/成员的头像。此功能需要连网。
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP 客户端
     Module2900Name=Maxmind网站的GeoIP全球IP地址数据库
     Module2900Desc=Maxmind的geoip数据库的转换能力
     Module3100Name=Skype
    -Module3100Desc=添加 Skype 聊天按钮到用户 / 合伙人 / 联系人 / 会员信息资料卡
    -Module3200Name=Unalterable Archives
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3100Desc=添加 Skype 聊天按钮到用户 / 合作方 / 联系人 / 会员信息资料卡
    +Module3200Name=不可改变的档案
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=人事管理
    -Module4000Desc=Human resources management (management of department, employee contracts and feelings)
    +Module4000Desc=人力资源管理(部门管理,员工合同和感受)
     Module5000Name=多公司
     Module5000Desc=允许你管理多个公司
     Module6000Name=工作流程
    -Module6000Desc=Workflow management (automatic creation of object and/or automatic status change)
    +Module6000Desc=工作流管理(自动创建对象和/或自动状态更改)
     Module10000Name=网站
    -Module10000Desc=Create public websites with a WYSIWG editor. Just setup your web server (Apache, Nginx, ...) to point to the dedicated Dolibarr directory to have it online on the Internet with your own domain name.
    +Module10000Desc=使用WYSIWG编辑器创建公共网站。只需将您的Web服务器(Apache,Nginx,...)设置为指向专用的Dolibarr目录,即可使用您自己的域名在Internet上联机。
     Module20000Name=请假申请管理
    -Module20000Desc=请假申请提交和跟进管理模块
    -Module39000Name=Products lots
    +Module20000Desc=Declare and track employees leave requests
    +Module39000Name=产品很多
     Module39000Desc=产品的批号或序列号,保质期和销售日期管理
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=钱箱
    -Module50000Desc=Module to offer an online payment page accepting payments with Credit/Debit card via PayBox. This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=POS
    -Module50100Desc= (POS)POS模块.
    +Module50100Desc=(POS)POS模块.
    +Module50150Name=POS
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=Module to offer an online payment page accepting payments using PayPal (credit card or PayPal credit). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=会计(高级)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=IPP打印
    -Module54000Desc=不打开文档而使用 Cups IPP 界面直接打印 (打印机必须在服务器可见,Cups 必须安装在服务器上)。
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=问卷, 调查或投票
    -Module55000Desc=该模块将生成在线的问卷, 调查或投票 (类似于 Doodle, Studs, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=利润空间
     Module59000Desc=利润空间管理模块
     Module60000Name=佣金
     Module60000Desc=佣金管理模块
    -Module62000Name=国际贸易术语
    -Module62000Desc=添加功能来管理国际贸易术语
    +Module62000Name=国际贸易术语解释通则
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=资源
     Module63000Desc=资源管理 (打印机, 车辆, 房间, ...)然后你可以分享到活动中
     Permission11=读取销售账单
    @@ -651,9 +661,9 @@ Permission32=创建/变更产品信息
     Permission34=删除产品信息
     Permission36=查看/管理隐藏产品
     Permission38=导出产品信息
    -Permission41=Read projects and tasks (shared project and projects i'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    -Permission42=Create/modify projects (shared project and projects i'm contact for). Can also create tasks and assign users to project and tasks
    -Permission44=删除项目(共享的项目和我参与的项目)
    +Permission41=Read projects and tasks (shared project and projects I'm contact for). Can also enter time consumed, for me or my hierarchy, on assigned tasks (Timesheet)
    +Permission42=Create/modify projects (shared project and projects I'm contact for). Can also create tasks and assign users to project and tasks
    +Permission44=Delete projects (shared project and projects I'm contact for)
     Permission45=导出项目
     Permission61=读取干预
     Permission62=创建/变更干预
    @@ -686,37 +696,37 @@ Permission109=删除发货单
     Permission111=读取财务帐目
     Permission112=创建/变更/删除和比较交易
     Permission113=设置财政账户 (创建和管理分类)
    -Permission114=调和交易
    +Permission114=Reconcile transactions
     Permission115=导出交易和帐户报表
     Permission116=账户间转账
     Permission117=支票调度管理
    -Permission121=读取合伙人信息关联用户
    -Permission122=创建/变更与用户相关联的合伙人信息
    -Permission125=删除与用户相关联的合伙人信息
    -Permission126=导出合伙人信息
    -Permission141=读取所有项目和任务 (包括我未参与的项目)
    -Permission142=创建/变更所有项目和项目 (包括我未参与的项目)
    +Permission121=读取合作方信息关联用户
    +Permission122=创建/变更与用户相关联的合作方信息
    +Permission125=删除与用户相关联的合作方信息
    +Permission126=导出合作方信息
    +Permission141=Read all projects and tasks (also private projects I am not a contact for)
    +Permission142=Create/modify all projects and tasks (also private projects I am not a contact for)
     Permission144=删除所有项目和项目 (包括我未参与的项目)
     Permission146=读取供应商
     Permission147=读取统计
    -Permission151=Read direct debit payment orders
    -Permission152=Create/modify a direct debit payment orders
    -Permission153=Send/Transmit direct debit payment orders
    -Permission154=Record Credits/Rejects of direct debit payment orders
    +Permission151=阅读长期订单
    +Permission152=创建/修改长期订单
    +Permission153=阅读长期订单收据
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=读取联系人/订阅
     Permission162=创建/变更联系人/订阅
     Permission163=启用联系人服务/订阅
     Permission164=禁用联系人服务/订阅
     Permission165=删除联系人/订阅
     Permission167=导出联系人
    -Permission171=Read trips and expenses (yours and your subordinates)
    +Permission171=读取行程及开支 (自己和其下属)
     Permission172=创建/变更行程及开支
     Permission173=删除行程及开支
     Permission174=读取所有行程和开支
    -Permission178=导出形成及开支
    +Permission178=导出行程及开支
     Permission180=读取供应商资料
     Permission181=读取采购订单
    -Permission182=创建/变更供应商订单
    +Permission182=创建/变更采购订单
     Permission183=确认可采购订单
     Permission184=批准采购订单
     Permission185=订购或取消采购订单
    @@ -725,7 +735,7 @@ Permission187=关闭采购订单
     Permission188=取消采购订单
     Permission192=添加线路
     Permission193=取消线路
    -Permission194=读取
    +Permission194=Read the bandwidth lines
     Permission202=创建 ADSL 连接
     Permission203=订立连接订单
     Permission204=订购连接
    @@ -733,7 +743,7 @@ Permission205=链接管理
     Permission206=读取链接
     Permission211=读取电话
     Permission212=订购线路
    -Permission213=启用明细
    +Permission213=激活线路
     Permission214=安装电话
     Permission215=安装商
     Permission221=读取邮件
    @@ -750,12 +760,12 @@ Permission244=查看隐藏类别的内容
     Permission251=读取其他用户和群组资料
     PermissionAdvanced251=读取其他用户
     Permission252=读取其他用户的使用权限
    -Permission253=创建/变更其他用户、群组资料及其权限
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=创建/变更内部/外部用户和权限
     Permission254=只能创建/变更外部用户资料
     Permission255=修改其他用户密码
     Permission256=删除或暂时关闭其他用户
    -Permission262=Extend access to all third parties (not only third parties that user is a sale representative).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc).<br>Not effective for projects (only rules on project permissions, visibility and assignement matters).
    +Permission262=Extend access to all third parties (not only third parties that user is a sale representative for).<br>Not effective for external users (always limited to themselves for proposals, orders, invoices, contracts, etc.).<br>Not effective for projects (only rules on project permissions, visibility and assignment matters).
     Permission271=读取 CA
     Permission272=读取发票
     Permission273=开具发票
    @@ -765,7 +775,7 @@ Permission283=删除联络人资料
     Permission286=导出联络人资料
     Permission291=读取关税
     Permission292=设置关税权限
    -Permission293=修改客户关税
    +Permission293=Modify customers tariffs
     Permission300=读取条码
     Permission301=创建/变更条码
     Permission302=删除条码
    @@ -787,11 +797,9 @@ Permission401=读取折扣
     Permission402=创建/变更折扣
     Permission403=确认折扣
     Permission404=删除折扣
    -Permission501=Read employee contracts/salaries
    -Permission502=Create/modify employee contracts/salaries
    -Permission511=Read payment of salaries
    -Permission512=Create/modify payment of salaries
    -Permission514=删除工资
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=导出工资
     Permission520=读取贷款
     Permission522=创建/变更贷款
    @@ -842,13 +850,13 @@ Permission1236=导出供应商发票、属性及其付款资料
     Permission1237=导出采购订单及其详情
     Permission1251=导入大量外部数据到数据库(载入资料)
     Permission1321=导出客户发票、属性及其付款资料
    -Permission1322=Reopen a paid bill
    +Permission1322=重新开立付费账单
     Permission1421=导出客户订单及属性资料
    -Permission20001=Read leave requests (your leaves and the one of your subordinates)
    -Permission20002=Create/modify your leave requests (yours leaves and the one of your subordinates)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=删除请假申请
    -Permission20004=Read all leave requests (even of user not subordinates)
    -Permission20005=Create/modify leave requests for everybody (even of user not subordinates)
    +Permission20004=阅读所有请假申请(即使是非下属用户)
    +Permission20005=为每个人创建/修改请假申请(即使是非下属用户)
     Permission20006=管理员请假申请 (setup and update balance)
     Permission23001=读取排定任务
     Permission23002=创建/更新排定任务
    @@ -879,9 +887,9 @@ Permission59003=读取每位用户利润
     Permission63001=读取资源
     Permission63002=创建/变更资源
     Permission63003=删除资源
    -Permission63004=Link resources to agenda events
    -DictionaryCompanyType=合伙人类型
    -DictionaryCompanyJuridicalType=合伙人法律条款
    +Permission63004=将资源链接到议程事件
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=准客户级别
     DictionaryCanton=州/省
     DictionaryRegion=地区
    @@ -891,64 +899,64 @@ DictionaryCivility=个人和专业技术职称
     DictionaryActions=活动议程类型
     DictionarySocialContributions=财政税和增值税类别
     DictionaryVAT=增值税率和消费税率
    -DictionaryRevenueStamp=Amount of tax stamps
    +DictionaryRevenueStamp=税票金额
     DictionaryPaymentConditions=付款条件
     DictionaryPaymentModes=付款方式
    -DictionaryTypeContact=联络人/地址类型
    -DictionaryTypeOfContainer=Type of website pages/containers
    +DictionaryTypeContact=Contact address types
    +DictionaryTypeOfContainer=网站页面/容器的类型
     DictionaryEcotaxe=Ecotax 指令
     DictionaryPaperFormat=纸张格式
    -DictionaryFormatCards=Cards formats
    -DictionaryFees=Expense report - Types of expense report lines
    +DictionaryFormatCards=卡片格式
    +DictionaryFees=费用报表 - 费用报表行的类型
     DictionarySendingMethods=运输方式
     DictionaryStaff=员工
     DictionaryAvailability=送货延迟
     DictionaryOrderMethods=订单类型
     DictionarySource=报价/订单来源方式
    -DictionaryAccountancyCategory=Personalized groups for reports
    -DictionaryAccountancysystem=账户图标模块
    -DictionaryAccountancyJournal=Accounting journals
    -DictionaryEMailTemplates=电子邮件模板
    +DictionaryAccountancyCategory=报告的个性化组
    +DictionaryAccountancysystem=会计科目表模型
    +DictionaryAccountancyJournal=会计日常报表
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=单位
     DictionaryProspectStatus=准客户状态
    -DictionaryHolidayTypes=请假类型
    -DictionaryOpportunityStatus=项目/线索的机会状态
    -DictionaryExpenseTaxCat=Expense report - Transportation categories
    -DictionaryExpenseTaxRange=Expense report - Range by transportation category
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
    +DictionaryExpenseTaxCat=费用报告 - 运输类别
    +DictionaryExpenseTaxRange=费用报告 - 按运输类别排列
     SetupSaved=设置已经成功保存
    -SetupNotSaved=Setup not saved
    +SetupNotSaved=安装程序未保存
     BackToModuleList=返回模块列表
    -BackToDictionaryList=回到字典库
    -TypeOfRevenueStamp=Type of tax stamp
    -VATManagement=增值税管理
    -VATIsUsedDesc=By default when creating prospects, invoices, orders etc the VAT rate follows the active standard rule:<br>If the seller is not subjected to VAT, then VAT defaults to 0. End of rule.<br>If the (selling country= buying country), then the VAT by default equals the VAT of the product in the selling country. End of rule. <br>If seller and buyer are both in the European Community and goods are transport products (car, ship, plane), the default VAT is 0 ( The VAT should be paid by the buyer to the customoffice of his country and not to the seller). End of rule.<br>If seller and buyer are both in the European Community and the buyer is not a company, then the VAT by defaults to the VAT of the product sold.  End of rule.<br>If seller and buyer are both in the European Community and the buyer is a company, then the VAT is 0 by default . End of rule.<br>In any othe case the proposed default is VAT=0. End of rule.
    -VATIsNotUsedDesc=默认情况下,建议的营业税为0,可用于像机构、个人或小型公司。
    -VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which VAT is declared.
    -VATIsNotUsedExampleFR=In France, it means associations that are non VAT declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (VAT in franchise) and paid a franchise VAT without any VAT declaration.  This choice will display the reference "Non applicable VAT - art-293B of CGI" on invoices.
    +BackToDictionaryList=Back to list of Dictionaries
    +TypeOfRevenueStamp=税票类型
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=税率
     LocalTax1IsNotUsed=不使用第二税率
    -LocalTax1IsUsedDesc=使用其它类型税率(非增值税)
    -LocalTax1IsNotUsedDesc=不使用其它类型税率(非增值税VAT)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=第二税率类型
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=不使用第三税率
    -LocalTax2IsUsedDesc=使用其它税率类型(非增值税VAT)
    -LocalTax2IsNotUsedDesc=不使用其它类型税率(非增值税VAT)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=第三税率类型
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE 管理(大陆不适用)
    -LocalTax1IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If te buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    -LocalTax1IsNotUsedDescES= 默认情况下,建议RE为0。规则结束。
    -LocalTax1IsUsedExampleES= In Spain they are professionals subject to some specific sections of the Spanish IAE.
    -LocalTax1IsNotUsedExampleES= In Spain they are professional and societies and subject to certain sections of the Spanish IAE.
    -LocalTax2ManagementES= IRPF 管理(大陆不适用)
    -LocalTax2IsUsedDescES= The RE rate by default when creating prospects, invoices, orders etc follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    -LocalTax2IsNotUsedDescES= 默认情况下,建议IRPF为0。规则结束。
    -LocalTax2IsUsedExampleES= In Spain, freelancers and independent professionals who provide services and companies who have chosen the tax system of modules.
    -LocalTax2IsNotUsedExampleES= In Spain they are bussines not subject to tax system of modules.
    +LocalTax1ManagementES=RE 管理(大陆不适用)
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=默认情况下,建议RE为0。规则结束。
    +LocalTax1IsUsedExampleES=在西班牙,他们是受西班牙IAE某些特定部分影响的专业人士。
    +LocalTax1IsNotUsedExampleES=在西班牙,他们是专业人士和社团,并受西班牙IAE的某些部分的约束。
    +LocalTax2ManagementES=IRPF 管理(大陆不适用)
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=默认情况下,建议IRPF为0。规则结束。
    +LocalTax2IsUsedExampleES=在西班牙,提供服务的自由职业者和独立专业人士以及选择模块税制的公司。
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=地税报表
     CalcLocaltax1=销售 - 采购
     CalcLocaltax1Desc=地税报表已经分别计算了在销售和采购时所产生的不同税。
    @@ -958,14 +966,15 @@ CalcLocaltax3=销售
     CalcLocaltax3Desc=地税报表是销售总计
     LabelUsedByDefault=如果代码没有翻译则默认使用以下标签
     LabelOnDocuments=文档中的标签
    -NbOfDays=天数
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=月末
    -CurrentNext=Current/Next
    +CurrentNext=当前/下一项
     Offset=偏移
    -AlwaysActive=此项必须始终保持启用状态
    +AlwaysActive=始终启用
     Upgrade=升级
     MenuUpgrade=升级/扩展
    -AddExtensionThemeModuleOrOther=Deploy/install external app/module
    +AddExtensionThemeModuleOrOther=部署/安装外部模块
     WebServer=网页服务器
     DocumentRootServer=网页服务器的根目录
     DataRootServer=数据文件的目录
    @@ -984,29 +993,29 @@ DatabaseUser=数据库用户
     DatabasePassword=数据库密码
     Tables=表
     TableName=表名称
    -NbOfRecord=记录数
    +NbOfRecord=No. of records
     Host=服务器
     DriverType=驱动类型
     SummarySystem=系统信息摘要
     SummaryConst=Dolibarr所有设置参数清单
    -MenuCompanySetup=Company/Organization
    +MenuCompanySetup=公司/组织
     DefaultMenuManager= 标准菜单管理
     DefaultMenuSmartphoneManager=智能手机菜单管理
     Skin=外观主题
     DefaultSkin=默认外观主题
     MaxSizeList=最大列表长度
     DefaultMaxSizeList=列表默认最大值
    -DefaultMaxSizeShortList=Default max length for short lists (ie in customer card)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=每日消息
     MessageLogin=登陆页面显示消息
    -LoginPage=Login page
    -BackgroundImageLogin=Background image
    +LoginPage=登录页面
    +BackgroundImageLogin=背景图
     PermanentLeftSearchForm=常驻左侧菜单搜寻框
     DefaultLanguage=默认语言(语言代码)
     EnableMultilangInterface=启用多语言界面
     EnableShowLogo=左侧菜单中显示LOGO公司标志
    -CompanyInfo=Company/organization information
    -CompanyIds=Company/organization identities
    +CompanyInfo=公司/组织
    +CompanyIds=Company/Organization identities
     CompanyName=名称
     CompanyAddress=地址
     CompanyZip=邮编
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=银行帐户 %s 的户主
     BankModuleNotActive=银行账户模块没有启用
     ShowBugTrackLink=显示链接 "<strong>%s</strong>"
     Alerts=警告
    -DelaysOfToleranceBeforeWarning=超时警告前延迟的阀值
    -DelaysOfToleranceDesc=这里您可以设置主看板区出现逾期提醒 (带有%s图标) 前的逾期时间。
    -Delays_MAIN_DELAY_ACTIONS_TODO=Delay tolerance (in days) before alert on planned events (agenda events) not completed yet
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay tolerance (in days) before alert on project not closed in time
    -Delays_MAIN_DELAY_TASKS_TODO=Delay tolerance (in days) before alert on planned tasks (project tasks) not completed yet
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on orders not processed yet
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=合同逾期未关闭最大逾期时间 (天)
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=报价单逾期收款最大逾期时间 (天)
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=服务逾期生效最大逾期时间 (天)
    -Delays_MAIN_DELAY_RUNNING_SERVICES=服务超期过期最大逾期时间 (天)
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=采购账单延误付款最大逾期时间 (天)
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=销售账单延误付款最大逾期时间 (天)
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=银行对账推迟最大逾期时间 (天)
    -Delays_MAIN_DELAY_MEMBERS=会员费用最大逾期时间 (天) 
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=支票兑现最大逾期时间 (天) 
    -Delays_MAIN_DELAY_EXPENSEREPORTS=Tolerance delay (in days) before alert for expense reports to approve
    -SetupDescription1=在开始使用Dolibarr之前请先进行初始化设置相关参数。
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=其他管理菜单可选参数。
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=安全稽核事件
     Audit=安全稽核
     InfoDolibarr=关于Dolibarr
    @@ -1056,136 +1065,137 @@ BrowserName=浏览器名称
     BrowserOS=浏览器操作系统
     ListOfSecurityEvents=安全事件清单
     SecurityEventsPurged=安全事件清除
    -LogEventDesc=这里您可以启用 Dolibarr 的安全事件日志记录。管理员可以通过<b>系统工具-稽核</b>查看其内容。警告,此功能会消耗大量的数据库空间。
    -AreaForAdminOnly=Setup parameters can be set by <b>administrator users</b> only.
    +LogEventDesc=这里您可以启用 Dolibarr 的安全事件日志记录。管理员可以通过<b>“系统工具”-“稽核”</b>查看其内容。警告,此功能会消耗大量的数据库空间。
    +AreaForAdminOnly=此功能仅供<b>管理员用户</b> 使用。
     SystemInfoDesc=系统信息指以只读方式显示的其它技术信息,只对系统管理员可见。
     SystemAreaForAdminOnly=此区仅供管理员用户使用。Dolibarr 中没有权限可越过此限制。
    -CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "%s" or "%s" button at bottom of page)
    -AccountantDesc=Edit on this page all known information about your accountant/bookkeeper
    -AccountantFileNumber=File number
    +CompanyFundationDesc=Edit the information of the company/entity. Click on "%s" or "%s" button at the bottom of the page.
    +AccountantDesc=Edit the details of your accountant/bookkeeper
    +AccountantFileNumber=文件编号
     DisplayDesc=这里可以选择 Dolibarr 外观效果相关的所有参数
    -AvailableModules=Available app/modules
    -ToActivateModule=要启用模块,请到“设定”区 (首页->设定->模块)。
    +AvailableModules=可用模块
    +ToActivateModule=要启用模块,请到“设定”区 (“首页”->“设定”->“模块”)。
     SessionTimeOut=会话超时
    -SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every <b>%s/%s</b> access, but only during access made by other sessions.<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default <strong>session.gc_maxlifetime</strong>, no matter what the value entered here.
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=可用的触发器
    -TriggersDesc=Triggers are files that will modify the behaviour of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=文件中的触发器代码可以通过文件名中的 <b>-NoRun</b> 前缀禁用。
     TriggerDisabledAsModuleDisabled=此文件中的触发器将在<b>%s</b>模块禁用时禁用。
     TriggerAlwaysActive=无论 Dolibarr 的各模块是否启用,此文件中的触发器一直处于启用状态。
     TriggerActiveAsModuleActive=此文件中的触发器将于 <b>%s</b> 模块启用后启用。
     GeneratedPasswordDesc=在此设定新密码的生成规则,如果您选择使用自动生成的密码。
     DictionaryDesc=输入全部参考数据.你能添加你的参数值为默认值。
    -ConstDesc=This page allows you to edit all other parameters not available in previous pages. These are mostly reserved parameters for developers or advanced troubleshooting. For a list of options <a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">check here</a>.
    +ConstDesc=此页面允许您编辑以前页面中不可用的所有其他参数。这些主要是供开发人员调试用的保留参数。有关选项列表,请<a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">点击此处</a>。
     MiscellaneousDesc=所有其他安全相关的参数定义在这里。
     LimitsSetup=范围及精确度
    -LimitsDesc=这里您可以设置 Dolibarr 的范围、精度和优化参数。
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=单价小数位
     MAIN_MAX_DECIMALS_TOT=总价小数位
     MAIN_MAX_DECIMALS_SHOWN=屏幕显示小数位(如果你希望系统内部数值显示时遇到小数位截断的情况下显示<b>...</b>,请在此数值后加上<b>...</b>)
    -MAIN_ROUNDING_RULE_TOT=Step of rounding range (for countries where rounding is done on something else than base 10. For example, put 0.05 if rounding is done by 0.05 steps)
    +MAIN_ROUNDING_RULE_TOT=舍入范围的步骤(对于在除了基数10之外的其他位置进行舍入的国家。例如,如果通过0.05步进行舍入,则放置0.05)
     UnitPriceOfProduct=税前单价
     TotalPriceAfterRounding=四舍五入后的总价 (税前价/增值税/税后价)
     ParameterActiveForNextInputOnly=参数仅在下次输入数值起生效。
     NoEventOrNoAuditSetup=尚无安全事件被记录。“设置 - 安全 - 稽核”页面的稽核功能未启用则属于正常现象。
    -NoEventFoundWithCriteria=未发现符合搜索条件的安全事件。
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=参见您的本机 sendmail 设置
     BackupDesc=为了生成一个完整的 Dolibarr 备份,你必须:
     BackupDesc2=保存文件目录<b>(%S)</b>的内容,包含所有上传和生成的文件(包括在步骤1中产生的所有转储文件)。
    -BackupDesc3=保存数据库 (<b>%s</b>) 至转储文件。对于此,你可能需要以下助手:
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=存档的文档目录应存储在一个安全的地方。
     BackupDescY=生成的转储文件应存放在安全的地方。
    -BackupPHPWarning=此方法不保证成功生成备份。建议使用前者
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=要还原Dolibarr备份,您必须:
    -RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directoy (<b>%s</b>).
    -RestoreDesc3=Restore the data, from a backup dump file, into the database of the new Dolibarr installation or into the database of this current installation (<b>%s</b>). Warning, once restore is finished, you must use a login/password, that existed when backup was made, to connect again. To restore a backup database into this current installation, you can follow this assistant.
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
    +RestoreDesc3=将数据从备份转储文件还原到新Dolibarr安装的数据库或当前安装的数据库(<b> %s </ b>)。警告,一旦恢复完成,您必须使用备份时存在的登录/密码再次连接。要将备份数据库还原到当前安装,您可以关注此助手。
     RestoreMySQL=MySQL 导入
     ForcedToByAModule= 此规则被一个启用中的模块强制应用于 <b>%s</b>
    -PreviousDumpFiles=Generated database backup files
    +PreviousDumpFiles=生成的数据库备份文件
     WeekStartOnDay=每周的第一天
     RunningUpdateProcessMayBeRequired=似乎需要运行升级程序(程序版本 %s 与数据库版本 %s 不符)
     YouMustRunCommandFromCommandLineAfterLoginToUser=您必须以 <b>%s</b> 用户在MySQL控制台登陆后通过命令行运行此命令否则您必须在命令行的末尾使用 -W 选项来提供 <b>%s</b> 的密码。
     YourPHPDoesNotHaveSSLSupport=SSL 在您的 PHP 中不可用
     DownloadMoreSkins=下载更多外观主题
     SimpleNumRefModelDesc=依照 %syymm-nnnn 的格式返回引用编号,其中yy是年、mm是月、nnnn 是自动填零补全的序号。
    -ShowProfIdInAddress=文件中显示专业编号及地址
    -ShowVATIntaInAddress=隐藏增值税代码
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=部分翻译
    -MAIN_DISABLE_METEO=禁用天气图标
    -MeteoStdMod=Standard mode
    -MeteoStdModEnabled=Standard mode enabled
    -MeteoPercentageMod=Percentage mode
    -MeteoPercentageModEnabled=Percentage mode enabled
    -MeteoUseMod=Click to use %s
    +MAIN_DISABLE_METEO=Disable meteorological view
    +MeteoStdMod=标准模式
    +MeteoStdModEnabled=标准模式已启用
    +MeteoPercentageMod=百分比模式
    +MeteoPercentageModEnabled=已启用百分比模式
    +MeteoUseMod=点击使用%s
     TestLoginToAPI=测试 API 登陆
    -ProxyDesc=Dolibarr 的一些功能需要互联网连接。请在此设置联网参数。如果 Dolibarr 服务器上网需要代理服务器,请设置下面的代理参数。
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=外部访问
     MAIN_PROXY_USE=使用代理服务器(否则直接访问互联网)
     MAIN_PROXY_HOST=代理服务器的名称/地址
     MAIN_PROXY_PORT=代理服务器的端口
     MAIN_PROXY_USER=登陆使用代理服务器
     MAIN_PROXY_PASS=使用代理服务器的密码
    -DefineHereComplementaryAttributes=此处定义所有默认安装中没有,但您又希望能在 %s 中使用的属性。
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=自定义属性
     ExtraFieldsLines=自定义属性 (行列)
    -ExtraFieldsLinesRec=Complementary attributes (templates invoices lines)
    -ExtraFieldsSupplierOrdersLines=Complementary attributes (order lines)
    +ExtraFieldsLinesRec=补充属性(模板发票行)
    +ExtraFieldsSupplierOrdersLines=补充属性(订单行)
     ExtraFieldsSupplierInvoicesLines=自定义属性(发票明细)
    -ExtraFieldsThirdParties=自定义属性 (合伙人)
    -ExtraFieldsContacts=自定义属性 (联系人/地址)
    +ExtraFieldsThirdParties=自定义属性 (合作方)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=自定义属性 (会员)
     ExtraFieldsMemberType=自定义属性 (会员类型)
     ExtraFieldsCustomerInvoices=自定义属性(发票)
    -ExtraFieldsCustomerInvoicesRec=Complementary attributes (templates invoices)
    +ExtraFieldsCustomerInvoicesRec=补充属性(模板发票)
     ExtraFieldsSupplierOrders=自定义属性 (订单)
     ExtraFieldsSupplierInvoices=自定义属性 (账单)
     ExtraFieldsProject=自定义属性 (项目)
     ExtraFieldsProjectTask=自定义属性 (任务)
     ExtraFieldHasWrongValue=属性 %s 有一个错误的值。
     AlphaNumOnlyLowerCharsAndNoSpace=仅限英文大小写字母不含空格
    -SendmailOptionNotComplete=Warning, on some Linux systems, to send email from your email, sendmail execution setup must contains option -ba (parameter mail.force_extra_parameters into your php.ini file). If some recipients never receive emails, try to edit this PHP parameter with mail.force_extra_parameters = -ba).
    +SendmailOptionNotComplete=警告,在某些Linux系统上,要从您的电子邮件发送电子邮件,sendmail执行设置必须包含选项-ba(参数mail.force_extra_parameters到您的php.ini文件中)。如果某些收件人从未收到电子邮件,请尝试使用mail.force_extra_parameters = -ba编辑此PHP参数。
     PathToDocuments=文件路径
     PathDirectory=目录
    -SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might be not correctly parsed by some receiving mail servers. Result is that some mails can't be read by people hosted by those bugged platforms. It's case for some Internet providers (Ex: Orange in France). This is not a problem into Dolibarr nor into PHP but onto receiving mail server. You can however add option MAIN_FIX_FOR_BUGGED_MTA to 1 into setup - other to modify Dolibarr to avoid this. However, you may experience problem with other servers that respect strictly the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" that has no disadvantages.
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=翻译设置
     TranslationKeySearch=搜索翻译键值或字符串
     TranslationOverwriteKey=覆盖翻译字符串
    -TranslationDesc=How to set displayed application language :<br>* Systemwide: menu <strong>Home - Setup - Display</strong><br>* Per user: Use the <strong>User display setup</strong> tab on user card (click on username at the top of the screen).
    -TranslationOverwriteDesc=You can also override strings filling the following table. Choose your language from "%s" dropdown, insert the translation key string into "%s" and your new translation into "%s"
    -TranslationOverwriteDesc2=You can use the other tab to help you know translation key to use
    +TranslationDesc=如何设置显示的应用程序语言:<br> *全系统:菜单<strong>“主页” - “设置” - “显示”</strong> <br> *每位用户:使用用户卡上的<strong>用户显示设置</strong>标签(点击屏幕顶部的用户名)。
    +TranslationOverwriteDesc=您还可以覆盖填充下表的字符串。从“%s”下拉列表中选择您的语言,将翻译键字符串插入“%s”并将新翻译成“%s”
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=翻译字符串
    -CurrentTranslationString=Current translation string
    -WarningAtLeastKeyOrTranslationRequired=A search criteria is required at least for key or translation string
    +CurrentTranslationString=当前翻译字符串
    +WarningAtLeastKeyOrTranslationRequired=至少对于密钥或翻译字符串,需要搜索条件
     NewTranslationStringToShow=显示新翻译字符串
    -OriginalValueWas=The original translation is overwritten. Original value was:<br><br>%s
    -TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exists in any language files
    -TotalNumberOfActivatedModules=Activated application/modules: <b>%s</b> / <b>%s</b>
    +OriginalValueWas=原始翻译被覆盖。原值是:<br> <br> %s
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
    +TotalNumberOfActivatedModules=启用的功能模块总共: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=您必须至少启用 1 个模块
    -ClassNotFoundIntoPathWarning=PHP 路径中未发现 类 %s
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=是(在夏天)
    -OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users) and only if permissions were granted:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=会话存储空间已用 Suhosin 加密
     ConditionIsCurrently=当前条件为 %s
    -YouUseBestDriver=你使用的驱动程序 %s 就是目前最佳驱动程式。
    -YouDoNotUseBestDriver=你用的驱动是 %s 但驱动 %s 才是最佳驱动.
    -NbOfProductIsLowerThanNoPb=你只有 %s  的产品/服务在数据库。这并不需要任何特别的优化。
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=搜索优化
    -YouHaveXProductUseSearchOptim=你有 %s 产品进入数据库。你应该加常数PRODUCT_DONOTSEARCH_ANYWHERE 1到 首页-设置-其他,你将限制数据库开始搜索范围索引的使用字符串,你应该得到即时响应。
    -BrowserIsOK=您正在使用 %s 浏览器。这个浏览器安全和性能都ok。
    -BrowserIsKO=您正在使用 %s 浏览器。这个浏览器的安全性,性能和可靠性都不错。我们推荐您使用火狐,Chrome,Opera和Safari。
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=XDebug 已经加载。
     XCacheInstalled=XCache已经加载。
    -AddRefInList=Display customer/supplier ref into list (select list or combobox) and most of hyperlink. Third parties will appears with name "CC12345 - SC45678 - The big company coorp", instead of "The big company coorp".
    -AskForPreferredShippingMethod=Ask for preferred Sending Method for Third Parties.
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=%s 字段的编辑
     FillThisOnlyIfRequired=例如:+2 (请只在时区错误问题出现时填写)
     GetBarCode=获取条码
     ##### Module password generation
     PasswordGenerationStandard=返回一个根据 Dolibarr 内部算法生成的密码:8个字符,包含小写数字和字母。
    -PasswordGenerationNone=不生成任何的密码。必须手动输入一个密码。
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=返回一个字符串用于设置你的个人密码。
    -SetupPerso=According to your configuration
    -PasswordPatternDesc=Password pattern description
    +SetupPerso=根据你的配置
    +PasswordPatternDesc=密码模式说明
     ##### Users setup #####
     RuleForGeneratedPasswords=生成推荐密码和验证密码的规则
     DisableForgetPasswordLinkOnLogonPage=禁用登陆页面的“找回密码”功能超链接
    @@ -1195,31 +1205,32 @@ UserMailRequired=新创建用户时需要输入电子邮箱地址
     HRMSetup=人力资源管理模块设置
     ##### Company setup #####
     CompanySetup=客户/供应商模块及其相关参数设置
    -CompanyCodeChecker=Module for third parties code generation and checking (customer or vendor)
    -AccountCodeManager=Module for accounting code generation (customer or vendor)
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=Email邮件提醒通知功能允许你给一些Dolibarr活动,自动发送提醒通知邮件。提醒通知的目标可定义:
    -NotificationsDescUser=* per users, one user at time.
    -NotificationsDescContact=* per third parties contacts (customers or vendors), one contact at time.
    -NotificationsDescGlobal=* or by setting global target emails in module setup page.
    -ModelModules=文件模板
    -DocumentModelOdt=生成开源办公软件专用格式的(如OpenOffice, KOffice, TextEdit,...等的.ODT格式,.ODS格式)的模板文档。
    +NotificationsDescUser=*每个用户,一个用户。
    +NotificationsDescContact=*每个第三方联系人(客户或供应商),一次联系。
    +NotificationsDescGlobal=*或在模块设置页面中设置全局目标电子邮件。
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=为草稿文档加水印
     JSOnPaimentBill=激活启用在线支付功能来自动填充付款的形式
    -CompanyIdProfChecker=专业ID号码规则
    -MustBeUnique=Must be unique?
    -MustBeMandatory=Mandatory to create third parties?
    -MustBeInvoiceMandatory=Mandatory to validate invoices?
    -TechnicalServicesProvided=Technical services provided
    +CompanyIdProfChecker=Rules for Professional IDs
    +MustBeUnique=必须是独特的吗?
    +MustBeMandatory=Mandatory to create third parties (if vat number or type of company defined) ?
    +MustBeInvoiceMandatory=是否必须验证发票?
    +TechnicalServicesProvided=提供技术服务
     #####DAV #####
    -WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access to.
    -WebDavServer=Root URL of %s server : %s
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
    +WebDavServer=%s服务器的根URL:%s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=<b>%s</b>格式的导出文件可以通过链接 %s 下载
     ##### Invoices #####
     BillsSetup=发票模块设置
     BillsNumberingModule=发票与信用记录编号模块
     BillsPDFModules=发票文档模板
    -PaymentsPDFModules=Payment documents models
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
    +PaymentsPDFModules=付款文件模型
     CreditNote=信用记录
     CreditNotes=信用记录
     ForceInvoiceDate=强制发票中的日期为确认日期
    @@ -1239,15 +1250,15 @@ FreeLegalTextOnProposal=报价单中的额外说明文本
     WatermarkOnDraftProposal=为商业计划书草案添加水印(无则留空)
     BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL=询问银行账户
     ##### SupplierProposal #####
    -SupplierProposalSetup=Price requests vendors module setup
    -SupplierProposalNumberingModules=Price requests vendors numbering models
    -SupplierProposalPDFModules=Price requests vendors documents models
    -FreeLegalTextOnSupplierProposal=Free text on price requests vendors
    -WatermarkOnDraftSupplierProposal=Watermark on draft price requests vendors (none if empty)
    +SupplierProposalSetup=价格请求供应商模块设置
    +SupplierProposalNumberingModules=价格要求供应商编号模型
    +SupplierProposalPDFModules=价格请求供应商文档模型
    +FreeLegalTextOnSupplierProposal=价格请求供应商的自由文本
    +WatermarkOnDraftSupplierProposal=草案价格上的水印要求供应商(如果是空的则没有)
     BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_PROPOSAL=询问目标询价申请的银行账号
    -WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=Ask for Warehouse Source for order
    +WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER=要求仓库来源订购
     ##### Suppliers Orders #####
    -BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=Ask for bank account destination of purchase order
    +BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER=询问采购订单的银行帐户目的地
     ##### Orders #####
     OrdersSetup=订单管理设置
     OrdersNumberingModules=订单编号模块
    @@ -1274,7 +1285,8 @@ MemberMainOptions=主要选项
     AdherentLoginRequired= 管理人员登陆
     AdherentMailRequired=创建新会员时要求填写电子邮箱地址
     MemberSendInformationByMailByDefault=设置向会员发送邮件确认(会员确认或添加订阅)复选框默认为启用
    -VisitorCanChooseItsPaymentMode=Visitor can choose among available payment modes
    +VisitorCanChooseItsPaymentMode=访客可以选择可用的付款方式
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP 设置
     LDAPGlobalParameters=全局参数
    @@ -1292,7 +1304,7 @@ LDAPSynchronizeUsers=LDAP 中用户的组织
     LDAPSynchronizeGroups=LDAP 中群组的组织
     LDAPSynchronizeContacts=LDAP 联系人的组织
     LDAPSynchronizeMembers=LDAP 中公司成员的组织
    -LDAPSynchronizeMembersTypes=Organization of foundation's members types in LDAP
    +LDAPSynchronizeMembersTypes=在LDAP中组织基金会的成员类型
     LDAPPrimaryServer=主服务器
     LDAPSecondaryServer=副服务器
     LDAPServerPort=服务器端口
    @@ -1302,7 +1314,7 @@ LDAPServerUseTLS=使用 TLS
     LDAPServerUseTLSExample=您的 LDAP 服务器使用 TLS
     LDAPServerDn=服务器的 DN
     LDAPAdminDn=管理员的 DN
    -LDAPAdminDnExample=Complete DN (ex: cn=admin,dc=example,dc=com or cn=Administrator,cn=Users,dc=example,dc=com for active directory)
    +LDAPAdminDnExample=完整DN(例如:cn = admin,dc = example,dc = com或cn = Administrator,cn = Users,dc = example,dc = com表示活动目录)
     LDAPPassword=管理员密码
     LDAPUserDn=用户的 DN
     LDAPUserDnExample=完整的 DN (例如:ou=users,dc=example,dc=com)
    @@ -1316,21 +1328,21 @@ LDAPDnContactActive=联系人的同步
     LDAPDnContactActiveExample=已激活/取消的同步
     LDAPDnMemberActive=会员同步
     LDAPDnMemberActiveExample=已激活/取消的同步
    -LDAPDnMemberTypeActive=Members types' synchronization
    +LDAPDnMemberTypeActive=成员类型的同步
     LDAPDnMemberTypeActiveExample=已激活/取消的同步
     LDAPContactDn=Dolibarr 联系人的 DN
     LDAPContactDnExample=完整的 DN (例如:ou=contacts,dc=example,dc=com)
     LDAPMemberDn=Dolibarr 会员DN
     LDAPMemberDnExample=完整的 DN (例如:ou=members,dc=example,dc=com)
    -LDAPMemberObjectClassList=objectClass 列表
    +LDAPMemberObjectClassList=对象类 列表
     LDAPMemberObjectClassListExample=定义记录属性的 (例如:AD 的 top,groupOfUniqueNames) 的objectClass列表
    -LDAPMemberTypeDn=Dolibarr members types DN
    -LDAPMemberTypepDnExample=Complete DN (ex: ou=memberstypes,dc=example,dc=com)
    -LDAPMemberTypeObjectClassList=objectClass 列表
    +LDAPMemberTypeDn=Dolibarr成员类型DN
    +LDAPMemberTypepDnExample=完整DN(例如:ou = memberstypes,dc = example,dc = com)
    +LDAPMemberTypeObjectClassList=对象类 列表
     LDAPMemberTypeObjectClassListExample=定义记录属性的 (例如:AD 的 top,groupOfUniqueNames) 的objectClass列表
    -LDAPUserObjectClassList=objectClass 列表
    +LDAPUserObjectClassList=对象类 列表
     LDAPUserObjectClassListExample=定义记录属性的 (例如:AD 的 top,groupOfUniqueNames) 的objectClass列表
    -LDAPGroupObjectClassList=objectClass 列表
    +LDAPGroupObjectClassList=对象类 列表
     LDAPGroupObjectClassListExample=定义记录属性的 (例如:AD 的 top,groupOfUniqueNames) 的objectClass列表
     LDAPContactObjectClassList=objectClass 列表
     LDAPContactObjectClassListExample=定义记录属性的 (例如:AD 的 top,groupOfUniqueNames) 的objectClass列表
    @@ -1339,15 +1351,15 @@ LDAPTestSynchroContact=测试联系人的同步
     LDAPTestSynchroUser=测试用户的同步
     LDAPTestSynchroGroup=测试组的同步
     LDAPTestSynchroMember=测试会员的同步
    -LDAPTestSynchroMemberType=Test member type synchronization
    +LDAPTestSynchroMemberType=测试成员类型同步
     LDAPTestSearch= 测试 LDAP 搜索
     LDAPSynchroOK=同步测试成功
     LDAPSynchroKO=同步测试失败
    -LDAPSynchroKOMayBePermissions=同步测试失败。请检查连接服务器已经正确设置并允许LDAP更新
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP 连接到 LDAP 服务器连接成功 (服务器=%s, 端口=%s)
     LDAPTCPConnectKO=TCP 连接到 LDAP 服务器连接失败 (服务器=%s, 端口=%s)
    -LDAPBindOK=连接/认证 LDAP 服务器成功(服务器=%s, 端口=%s, 账号=%s, 密码=%s)
    -LDAPBindKO=LDAP 服务器连接/认证 失败(服务器=%s,用户=%s,密码=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=LDAP服务器版本配置为 v3
     LDAPSetupForVersion2=LDAP服务器版本配置为 v2
     LDAPDolibarrMapping=Dolibarr 映射
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=登陆 (samba,activedirectory)
     LDAPFieldLoginSambaExample=例如: sam账号名
     LDAPFieldFullname=全名
     LDAPFieldFullnameExample=例如: 中国
    -LDAPFieldPasswordNotCrypted=明文密码
    -LDAPFieldPasswordCrypted=加密密码
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=例如:用户密码
     LDAPFieldCommonNameExample=例如: 中国
     LDAPFieldName=名称
    @@ -1405,47 +1417,48 @@ LDAPDescContact=此页面中可以定义 Dolibarr 联系人各项数据在 LDAP
     LDAPDescUsers=此页面中可以定义 Dolibarr 用户各项数据在 LDAP 树中的 LDAP 属性名称。
     LDAPDescGroups=此页面中可以定义 Dolibarr 中用户组各项数据在 LDAP 树中的 LDAP 属性名称。
     LDAPDescMembers=此页面中可以定义 Dolibarr 会员各项数据在 LDAP 树中的 LDAP 属性名称。
    -LDAPDescMembersTypes=This page allows you to define LDAP attributes name in LDAP tree for each data found on Dolibarr members types.
    +LDAPDescMembersTypes=此页面允许您在LDAP树中为Dolibarr成员类型上的每个数据定义LDAP属性名称。
     LDAPDescValues=例值以载入如下模式的 <b>OpenLDAP</b>为例:<b>core.schema, cosine.schema, inetorgperson.schema</b>)如果您使用OpenLDAP和这些例值,请修改您的 LDAP 配置文件<b>slapd.conf</b>来载入全部这些模式。
     ForANonAnonymousAccess=存取访问要求验证, (例如读写访问)
     PerfDolibarr=性能设置/优化报告
    -YouMayFindPerfAdviceHere=你会发现此页面上的一些性能相关的检查或建议。
    -NotInstalled=没有安装,所以你的服务器没有减慢。
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=应用型缓存
    -MemcachedNotAvailable=No applicative cache found. You can enhance performance by installing a cache server Memcached and a module able to use this cache server.<br>More information here <a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>.<br>Note that a lot of web hosting provider does not provide such cache server.
    -MemcachedModuleAvailableButNotSetup=Module memcached for applicative cache found but setup of module is not complete.
    -MemcachedAvailableAndSetup=Module memcached dedicated to use memcached server is enabled.
    +MemcachedNotAvailable=找不到应用缓存。您可以通过安装缓存服务器Memcached和能够使用此缓存服务器的模块来增强性能。<br>更多信息,请访问<a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN"> http: //wiki.dolibarr.org/index.php/Module_MemCached_EN </a>。请注意,很多网络托管服务提供商都没有提供此类缓存服务器。
    +MemcachedModuleAvailableButNotSetup=找到应用程序缓存的memcached模块,但模块设置不完整。
    +MemcachedAvailableAndSetup=启用专用于使用memcached服务器的模块memcached。
     OPCodeCache=操作码缓存
    -NoOPCodeCacheFound=操作码缓存。可能是你使用了XCache或eAccelerator的另一个操作码缓存比(好),可能是你没有操作码缓存(非常糟糕)。
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=HTTP缓存的静态资源(CSS,JavaScript,IMG)
     FilesOfTypeCached=HTTP服务器 %s 类型的文件缓存
     FilesOfTypeNotCached=HTTP服务器不缓存的文件类型%s
     FilesOfTypeCompressed=HTTP服务器 %s 类型的文件被压缩
     FilesOfTypeNotCompressed=HTTP服务器 %s 类型的文件不会被压缩
     CacheByServer=缓存服务器
    -CacheByServerDesc=For exemple using the Apache directive "ExpiresByType image/gif A2592000"
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=通过浏览器缓存
     CompressionOfResources=压缩的HTTP响应
    -CompressionOfResourcesDesc=For exemple using the Apache directive "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=这种自动检测在该浏览器中不适用
    -DefaultValuesDesc=You can define/force here the default value you want to get when your create a new record, and/or defaut filters or sort order when your list record.
    -DefaultCreateForm=Default values (on forms to create)
    -DefaultSearchFilters=Default search filters
    -DefaultSortOrder=Default sort orders
    -DefaultFocus=Default focus fields
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
    +DefaultSearchFilters=默认搜索过滤器
    +DefaultSortOrder=默认排序顺序
    +DefaultFocus=默认焦点字段
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=产品模块设置
     ServiceSetup=服务模块设置
     ProductServiceSetup=产品和服务模块的设置
     NumberOfProductShowInSelect=下拉列表中的产品最大笔数(0=无限制)
    -ViewProductDescInFormAbility=表单中是否可以直接显示产品描述资料(如果关闭则用弹出工具提示显示)
    -MergePropalProductCard=Activate in product/service Attached Files tab an option to merge product PDF document to proposal PDF azur if product/service is in the proposal
    -ViewProductDescInThirdpartyLanguageAbility=Visualization of products descriptions in the third party language
    -UseSearchToSelectProductTooltip=此外,如果你有大量的产品(> 10万),你可以通过设置 - >其他不变PRODUCT_DONOTSEARCH_ANYWHERE设置为1,提高速度。搜索将被限制在开始的字符串。
    -UseSearchToSelectProduct=Wait you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
    +ViewProductDescInFormAbility=Display product descriptions in forms (otherwise as popup tooltip)
    +MergePropalProductCard=在产品/服务附加文件选项卡中激活如果产品/服务在提案中,则将产品PDF文档合并到提案PDF azur的选项
    +ViewProductDescInThirdpartyLanguageAbility=Display products descriptions in the language of the third party
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=默认的条码类型
    -SetDefaultBarcodeTypeThirdParties=合伙人默认条码类型
    -UseUnits=Define a unit of measure for Quantity during order, proposal or invoice lines edition
    +SetDefaultBarcodeTypeThirdParties=合作方默认条码类型
    +UseUnits=在订单,建议或发票行版本中定义数量的度量单位
     ProductCodeChecker= (产品或服务)编号的生成与检查模块
     ProductOtherConf= 产品/服务 配置
     IsNotADir=这不是目录!
    @@ -1458,9 +1471,9 @@ SyslogFilename=文件名称和路径
     YouCanUseDOL_DATA_ROOT=您可以使用 DOL_DATA_ROOT/dolibarr.log 来表示“documents”目录下的日志文件。您可以设置不同的路径来保存此文件。
     ErrorUnknownSyslogConstant=常量 %s 不是已知的 Syslog 常数
     OnlyWindowsLOG_USER=Windows 仅支持 LOG_USER
    -CompressSyslogs=Compression and backup of debug log files (generated by module Log for debug)
    -SyslogFileNumberOfSaves=Log backups
    -ConfigureCleaningCronjobToSetFrequencyOfSaves=Configure cleaning scheduled job to set log backup frequency
    +CompressSyslogs=压缩和备份调试日志文件(由模块Log生成以进行调试)
    +SyslogFileNumberOfSaves=日志备份
    +ConfigureCleaningCronjobToSetFrequencyOfSaves=配置清理预定作业以设置日志备份频率
     ##### Donations #####
     DonationsSetup=捐赠模块设置
     DonationsReceiptModel=捐赠收据模板
    @@ -1479,11 +1492,11 @@ BarcodeDescC39=Code 39 条码
     BarcodeDescC128=Code 128 条码
     BarcodeDescDATAMATRIX=二维条形码类型
     BarcodeDescQRCODE=二维码类型
    -GenbarcodeLocation=Bar code generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".<br>For example: /usr/local/bin/genbarcode
    +GenbarcodeLocation=条形码生成命令行工具(内部引擎用于某些条形码类型)。必须与“genbarcode”兼容。<br>例如:/ usr / local / bin / genbarcode
     BarcodeInternalEngine=内部引擎
     BarCodeNumberManager=自动定义条形码管理器
     ##### Prelevements #####
    -WithdrawalsSetup=Setup of module Direct debit payment orders
    +WithdrawalsSetup=模块设置直接借记支付订单
     ##### ExternalRSS #####
     ExternalRSSSetup=外部 RSS 的导入设置
     NewRSS=新增 RSS 源
    @@ -1503,7 +1516,7 @@ SendingsSetup=运输模块设置
     SendingsReceiptModel=运输模板
     SendingsNumberingModules=运输编号模块
     SendingsAbility=支持为客户送货时采用发货单
    -NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that is received and signed by customer. So product deliveries receipts is a duplicated feature and is rarely activated.
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=运单中的额外说明文本
     ##### Deliveries #####
     DeliveryOrderNumberingModules=收货回执编号模块
    @@ -1515,23 +1528,23 @@ AdvancedEditor=高级编辑
     ActivateFCKeditor=为以下为功能启用高级编辑器功能:
     FCKeditorForCompany=描述及注解采用所见即所得的方式建立或编辑(不含产品及服务)
     FCKeditorForProduct=产品/服务的描述及注解采用所见即所得的方式建立或编辑
    -FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formating when building PDF files.</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= 以所见即所得方式创建/编辑群发邮件(工具->电邮寄送)
     FCKeditorForUserSignature=以所见即所得方式创建/编辑用户签名
    -FCKeditorForMail=WYSIWIG creation/edition for all mail (except Tools->eMailing)
    +FCKeditorForMail=所有邮件的WYSIWIG创建/版本(工具 - > eMailing除外)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=虽然数据库连上了,但是看起来这个不是电子商城的数据库(在 table %s 里没看到Key %s )。
    -OSCommerceTestOk=成功连接到服务器'%s'的数据库'%s'上,身份用户 '%s'。
    -OSCommerceTestKo1=服务器'%s'连接成功,但无法打开数据库'%s'。
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=以用户身份'%s'连接至服务器'%s' 失败。
     ##### Stock #####
    -StockSetup=Stock module setup
    -IfYouUsePointOfSaleCheckModule=如果你使用了POS模块,那么这个设置可能会被POS模块忽略。大多数POS模块都是设计来创建快速发票以及在销售后减掉该商品的库存,无论其他模块的设置如何。所以,如果你不希望在POS模块进行销售时减掉库存,那么请同样检查一下POS模块的设置。
    +StockSetup=库存模块设置
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=菜单(项)已删除
     Menus=菜单
     TreeMenuPersonalized=个性化选单
    -NotTopTreeMenuPersonalized=Personalized menus not linked to a top menu entry
    +NotTopTreeMenuPersonalized=个性化菜单未链接到顶部菜单条目
     NewMenu=新建菜单
     Menu=菜单的选择
     MenuHandler=菜单处理程序
    @@ -1548,22 +1561,22 @@ DetailRight=菜单显示为变灰禁用的条件
     DetailLangs=标签翻译使用的 .lang 文件名
     DetailUser=内部 / 外部 / 全部
     Target=目标
    -DetailTarget=目标链接 (_blank代码来打开新窗口)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=级 (-1:顶部菜单,0:头菜单,> 0菜单和子菜单)
     ModifMenu=菜单变化
     DeleteMenu=删除选单项
    -ConfirmDeleteMenu=Are you sure you want to delete menu entry <b>%s</b>?
    -FailedToInitializeMenu=Failed to initialize menu
    +ConfirmDeleteMenu=您确定要删除菜单项<b> %s</b>吗?
    +FailedToInitializeMenu=无法初始化菜单
     ##### Tax #####
     TaxSetup=财政税和增值税模块设置
     OptionVatMode=增值税到期
    -OptionVATDefault=Standard basis
    +OptionVATDefault=标准依据
     OptionVATDebitOption=权责发生制
     OptionVatDefaultDesc=增值税到期: <br> - 商品完成交货(按账单的时间)<br> - 服务付款
     OptionVatDebitOptionDesc=增值税到期: <br> - 交货/付款商品 (按账单的时间) <br> - 服务的付款明细(借记)发出
    -OptionPaymentForProductAndServices=Cash basis for products and services
    -OptionPaymentForProductAndServicesDesc=VAT is due:<br>- on payment for goods<br>- on payments for services
    -SummaryOfVatExigibilityUsedByDefault=Time of VAT exigibility by default according to chosen option:
    +OptionPaymentForProductAndServices=产品和服务的现金基础
    +OptionPaymentForProductAndServicesDesc=增值税到期:<br>  - 货物付款<br>  - 服务付款
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=交货时
     OnPayment=付款时
     OnInvoice=发出发票时
    @@ -1572,58 +1585,58 @@ SupposedToBeInvoiceDate=所用账单日期
     Buy=采购
     Sell=销售
     InvoiceDateUsed=所用账单日期
    -YourCompanyDoesNotUseVAT=Your company has been defined to not use VAT (Home - Setup - Company/Organization), so there is no VAT options to setup.
    -AccountancyCode=Accounting Code
    +YourCompanyDoesNotUseVAT=贵公司已被定义为不含增值税 (首页->设定->公司/机构),所以没有设置增值税的选项。
    +AccountancyCode=科目代码
     AccountancyCodeSell=销售账户代码
     AccountancyCodeBuy=采购账户代码
     ##### Agenda #####
     AgendaSetup=事件及行程模块设置
     PasswordTogetVCalExport=导出链接的授权密钥
     PastDelayVCalExport=不导出早于这个日期的时间
    -AGENDA_USE_EVENT_TYPE=Use events types (managed into menu Setup -> Dictionaries -> Type of agenda events)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=Set automatically this default value for type of event into event create form
    -AGENDA_DEFAULT_FILTER_TYPE=Set automatically this type of event into search filter of agenda view
    -AGENDA_DEFAULT_FILTER_STATUS=Set automatically this status for events into search filter of agenda view
    -AGENDA_DEFAULT_VIEW=Which tab do you want to open by default when selecting menu Agenda
    -AGENDA_REMINDER_EMAIL=Enable event reminder <b>by emails</b> (remind option/delay can be defined on each event). Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent at the correct frequency.
    -AGENDA_REMINDER_BROWSER=Enable event reminder <b>on users browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    -AGENDA_REMINDER_BROWSER_SOUND=Enable sound notification
    -AGENDA_SHOW_LINKED_OBJECT=Show linked object into agenda view
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
    +AGENDA_DEFAULT_VIEW=选择菜单议程时,您希望在默认情况下打开哪个选项卡
    +AGENDA_REMINDER_EMAIL=<b>通过电子邮件</b>启用事件提醒(可以在每个事件上定义提醒选项/延迟)。注意:必须启用模块<strong> %s </strong>并正确设置才能以正确的频率发送提醒。
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
    +AGENDA_REMINDER_BROWSER_SOUND=启用声音通知
    +AGENDA_SHOW_LINKED_OBJECT=将链接对象显示在议程视图中
     ##### Clicktodial #####
     ClickToDialSetup=点击拨号模块设置
    -ClickToDialUrlDesc=Url called when a click on phone picto is done.  In URL, you can use tags<br><b>__PHONETO__</b> that will be replaced with the phone number of person to call<br><b>__PHONEFROM__</b> that will be replaced with phone number of calling person (yours)<br><b>__LOGIN__</b> that will be replaced with clicktodial login (defined on user card)<br><b>__PASS__</b> that will be replaced with clicktodial password (defined on user card).
    -ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone to call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    -ClickToDialUseTelLink=在电话号码上链接 "tel:" 
    -ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on same computer than the browser, and called when you click on a link in your browser that start with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
    +ClickToDialUrlDesc=当点击手机图片完成时,网址会被呼叫。在网址中,您可以使用标记为<br> <b> __ PHONETO __ </b>,这些标记将替换为要拨打电话号码的人员的电话号码<br><b> __ PHONEFROM __ </b>将替换为通话电话号码person(你的)<br> <b> __ LOGIN __</b>将替换为clicktodial登录(在用户卡上定义)<br> <b> __ PASS __ </b>将替换为clicktodial密码(在用户上定义)卡)。
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
    +ClickToDialUseTelLink=在电话号码上链接 "tel:"
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=POS
     CashDeskSetup=POS 模块设置
    -CashDeskThirdPartyForSell=使用默认通用合伙人来销售
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=接收现金付款的默认帐户
     CashDeskBankAccountForCheque= 接收支票付款的默认帐户
     CashDeskBankAccountForCB= 接收信用卡支付的默认帐户
    -CashDeskDoNotDecreaseStock=禁用POS模块销售时的库存减少功能(如果选择”否“,则无论库存模块设置如何,每一笔经过POS模块的销售都会减掉该商品的库存)。
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=强制和限制仓库库存减少
    -StockDecreaseForPointOfSaleDisabled=POS模块库存减少功能被禁用
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=POS模块中的库存较少功能不适用于库的管理
    -CashDeskYouDidNotDisableStockDecease=你没有禁用POS模块的库存减少功能,所以必须有一个仓库可以使用。
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=书签模块设置
    -BookmarkDesc=此模块可以管理您的书签您也可以将Dolibarr的任意页面加入您的左侧菜单中。
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=左侧菜单中显示书签的最大数量
     ##### WebServices #####
     WebServicesSetup=SOAP Webservice 模块设置
     WebServicesDesc=启用此模块,Dolibarr成为Web服务器提供其他Web服务。
     WSDLCanBeDownloadedHere=提供服务的 WSDL描述文件可以从此处下载
    -EndPointIs=SOAP clients must send their requests to the Dolibarr endpoint available at URL
    +EndPointIs=SOAP客户端必须将其请求发送到URL上提供的Dolibarr端点
     ##### API ####
     ApiSetup=API模块设置
    -ApiDesc=By enabling this module, Dolibarr become a REST server to provide miscellaneous web services.
    -ApiProductionMode=Enable production mode (this will activate use of a cache for services management)
    -ApiExporerIs=You can explore and test the APIs at URL
    -OnlyActiveElementsAreExposed=Only elements from enabled modules are exposed
    +ApiDesc=通过启用此模块,Dolibarr成为REST服务器以提供各种Web服务。
    +ApiProductionMode=启用生产模式(这将激活使用缓存进行服务管理)
    +ApiExporerIs=您可以在URL上浏览和测试API
    +OnlyActiveElementsAreExposed=仅公开已启用模块中的元素
     ApiKey=API的Key
    -WarningAPIExplorerDisabled=The API explorer has been disabled. API explorer is not required to provide API services. It is a tool for developer to find/test REST APIs. If you need this tool, go into setup of module API REST to activate it.
    +WarningAPIExplorerDisabled=API资源管理器已被禁用。 API资源管理器不需要提供API服务。它是开发人员查找/测试REST API的工具。如果您需要此工具,请进入模块API REST的设置以激活它。
     ##### Bank #####
     BankSetupModule=银行模块设置
     FreeLegalTextOnChequeReceipts=支票回执中的额外说明文本
    @@ -1632,13 +1645,13 @@ BankOrderGlobal=一般
     BankOrderGlobalDesc=一般的显示顺序
     BankOrderES=西班牙语
     BankOrderESDesc=西班牙语显示顺序
    -ChequeReceiptsNumberingModule=Cheque Receipts Numbering module
    +ChequeReceiptsNumberingModule=检查收据编号模块
     ##### Multicompany #####
     MultiCompanySetup=多公司模块设置
     ##### Suppliers #####
     SuppliersSetup=供应商模块设置
    -SuppliersCommandModel=Complete template of prchase order (logo...)
    -SuppliersInvoiceModel=Complete template of vendor invoice (logo...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
    +SuppliersInvoiceModel=采购账单的完整模板(LOGO标识...)
     SuppliersInvoiceNumberingModel=采购账单编号模块
     IfSetToYesDontForgetPermission=如果选择"是",请不要忘记为用户和组设置二次审核的权限
     ##### GeoIPMaxmind #####
    @@ -1654,19 +1667,19 @@ ProjectsSetup=项目模块设置
     ProjectsModelModule=项目报告文档模板
     TasksNumberingModules=任务编号模块
     TaskModelModule=任务报告文档模板
    -UseSearchToSelectProject=Wait you press a key before loading content of project combo list (This may increase performance if you have a large number of project, but it is less convenient)
    +UseSearchToSelectProject=Wait until a key is pressed before loading content of Project combo list.<br>This may improve performance if you have a large number of projects, but it is less convenient.
     ##### ECM (GED) #####
     ##### Fiscal Year #####
    -AccountingPeriods=Accounting periods
    -AccountingPeriodCard=Accounting period
    -NewFiscalYear=New accounting period
    -OpenFiscalYear=Open accounting period
    -CloseFiscalYear=Close accounting period
    -DeleteFiscalYear=Delete accounting period
    -ConfirmDeleteFiscalYear=Are you sure to delete this accounting period?
    -ShowFiscalYear=Show accounting period
    +AccountingPeriods=会计期间
    +AccountingPeriodCard=会计期间
    +NewFiscalYear=新会计期间
    +OpenFiscalYear=开放会计期间
    +CloseFiscalYear=关闭会计期间
    +DeleteFiscalYear=删除会计期间
    +ConfirmDeleteFiscalYear=您确定要删除此会计期间吗?
    +ShowFiscalYear=显示会计期间
     AlwaysEditable=允许编辑
    -MAIN_APPLICATION_TITLE=Force visible name of application (warning: setting your own name here may break autofill login feature when using DoliDroid mobile application)
    +MAIN_APPLICATION_TITLE=强制显示应用程序的名称(警告:在此处设置您自己的名称可能会在使用DoliDroid移动应用程序时破坏自动填充登录功能)
     NbMajMin=最少的大写字符数
     NbNumMin=最少的数字数
     NbSpeMin=最少的特殊字符数
    @@ -1675,90 +1688,91 @@ NoAmbiCaracAutoGeneration=不使用模糊字符 (例如"1","l","i","|","0","O")
     SalariesSetup=薪酬模块设置
     SortOrder=排序顺序
     Format=格式
    -TypePaymentDesc=0:Customer payment type, 1:Vendor payment type, 2:Both customers and vendors payment type
    +TypePaymentDesc=0:客户支付类型,1:供应商支付类型,2:客户和供应商的付款方式
     IncludePath=包含路径 (定义变量 %s)
     ExpenseReportsSetup=费用报表模块设置
     TemplatePDFExpenseReports=用于生成费用报表文件的文件模板
    -ExpenseReportsIkSetup=Setup of module Expense Reports - Milles index
    -ExpenseReportsRulesSetup=Setup of module Expense Reports - Rules
    -ExpenseReportNumberingModules=Expense reports numbering module
    -NoModueToManageStockIncrease=No module able to manage automatic stock increase has been activated. Stock increase will be done on manual input only.
    +ExpenseReportsIkSetup=模块费用报告的设置 -  Milles索引
    +ExpenseReportsRulesSetup=模块费用报告的设置 - 规则
    +ExpenseReportNumberingModules=费用报告编号模块
    +NoModueToManageStockIncrease=没有能够管理自动库存增加的模块已被激活。库存增加仅在手动输入时完成。
     YouMayFindNotificationsFeaturesIntoModuleNotification=你需要在"Notification"通知模块中设置并启用EMail通知 功能才能使用它 。
    -ListOfNotificationsPerUser=List of notifications per user*
    -ListOfNotificationsPerUserOrContact=List of notifications per user* or per contact**
    +ListOfNotificationsPerUser=每个用户的通知列表*
    +ListOfNotificationsPerUserOrContact=每个用户*或每个联系人的通知列表**
     ListOfFixedNotifications=固定通知列表
    -GoOntoUserCardToAddMore=Go on the tab "Notifications" of a user to add or remove notifications for users
    -GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contacts/addresses
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=阈值
     BackupDumpWizard=数据库转储备份向导
    -SomethingMakeInstallFromWebNotPossible=Installation of external module is not possible from the web interface for the following reason:
    -SomethingMakeInstallFromWebNotPossible2=For this reason, process to upgrade described here is only manual steps a privileged user can do.
    -InstallModuleFromWebHasBeenDisabledByFile=Install of external module from application has been disabled by your administrator. You must ask him to remove the file <strong>%s</strong> to allow this feature.
    -ConfFileMustContainCustom=Installing or building an external module from application need to save the module files into directory <strong>%s</strong>. To have this directory processed by Dolibarr, you must setup your <strong>conf/conf.php</strong> to add the 2 directive lines:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
    +SomethingMakeInstallFromWebNotPossible=由于以下原因,无法从Web界面安装外部模块:
    +SomethingMakeInstallFromWebNotPossible2=因此,此处描述的升级过程只是特权用户可以执行的手动步骤。
    +InstallModuleFromWebHasBeenDisabledByFile=管理员已禁用从应用程序安装外部模块。您必须要求他删除文件<strong> %s </strong>以允许此功能。
    +ConfFileMustContainCustom=从应用程序安装或构建外部模块需要将模块文件保存到目录<strong> %s</strong>中。要让Dolibarr处理此目录,您必须设置<strong> conf / conf.php </strong>以添加2个指令行:<br> <strong> $ dolibarr_main_url_root_alt ='/ custom'; </strong> <br>的<strong> $ dolibarr_main_document_root_alt = '%s /自定义';</strong>
     HighlightLinesOnMouseHover=当鼠标经过表格明细时高亮显示
    -HighlightLinesColor=Highlight color of the line when the mouse passes over (keep empty for no highlight)
    -TextTitleColor=Text color of Page title
    +HighlightLinesColor=当鼠标经过时突出显示线条的颜色(保持为空而没有突出显示)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
    +TextTitleColor=页面标题的文字颜色
     LinkColor=颜色链接
    -PressF5AfterChangingThis=Press CTRL+F5 on keyboard or clear your browser cache after changing this value to have it effective
    -NotSupportedByAllThemes=Will works with core themes, may not be supported by external themes
    +PressF5AfterChangingThis=在键盘上按CTRL + F5或更改此值后清除浏览器缓存以使其生效
    +NotSupportedByAllThemes=将与核心主题一起使用,可能不受外部主题的支持
     BackgroundColor=背景颜色
     TopMenuBackgroundColor=顶部菜单背景颜色
     TopMenuDisableImages=隐藏顶部菜单图片
     LeftMenuBackgroundColor=左侧菜单背景颜色
     BackgroundTableTitleColor=清单表格表头背景颜色
    -BackgroundTableTitleTextColor=Text color for Table title line
    +BackgroundTableTitleTextColor=表标题行的文本颜色
     BackgroundTableLineOddColor=表格奇数背景颜色
     BackgroundTableLineEvenColor=表格偶数背景颜色
     MinimumNoticePeriod=最小通知间隔
    -NbAddedAutomatically=Number of days added to counters of users (automatically) each month
    -EnterAnyCode=This field contains a reference to identify line. Enter any value of your choice, but without special characters.
    -UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For exemple: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    -ColorFormat=The RGB color is in HEX format, eg: FF0000
    -PositionIntoComboList=Position of line into combo lists
    +NbAddedAutomatically=每月添加到用户计数器(自动)的天数
    +EnterAnyCode=该字段包含标识行的引用。输入您选择的任何值,但不包含特殊字符。
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
    +ColorFormat=RGB颜色采用HEX格式,例如:FF0000
    +PositionIntoComboList=行位置到组合列表中
     SellTaxRate=消费税率
    -RecuperableOnly=Yes for VAT "Not Perceived but Recoverable" dedicated for some state in France. Keep value to "No" in all other cases.
    +RecuperableOnly=适用于法国某些州的增值税“Not Perceived but Recoverable”是的。在所有其他情况下,将值保持为“否”。
     UrlTrackingDesc=如果运输公司提供页面来追踪运单状态,你可以将网页输入到这里。你可以在网址中使用 {TRACKID} 字段来替换实际运单号,以便在链接进入时直接进入到该运单的运输状态。
    -OpportunityPercent=When you create an opportunity, you will defined an estimated amount of project/lead. According to status of opportunity, this amount may be multiplicated by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    -TemplateForElement=This template record is dedicated to which element
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
    +TemplateForElement=此模板记录专用于哪个元素
     TypeOfTemplate=模板类型
    -TemplateIsVisibleByOwnerOnly=只有创建者对mubankejian
    -VisibleEverywhere=Visible everywhere
    -VisibleNowhere=Visible nowhere
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
    +VisibleEverywhere=四处可见
    +VisibleNowhere=无处可见
     FixTZ=时区修复
     FillFixTZOnlyIfRequired=例:+2 (只有问题发生时才填写)
     ExpectedChecksum=预计校验
     CurrentChecksum=当前校验
    -ForcedConstants=Required constant values
    +ForcedConstants=必需的常量值
     MailToSendProposal=客户报价
     MailToSendOrder=客户订单
     MailToSendInvoice=客户发票
     MailToSendShipment=运输
     MailToSendIntervention=干预
    -MailToSendSupplierRequestForQuotation=Quotation request
    -MailToSendSupplierOrder=Purchase orders
    -MailToSendSupplierInvoice=Vendor invoices
    +MailToSendSupplierRequestForQuotation=报价请求
    +MailToSendSupplierOrder=订单
    +MailToSendSupplierInvoice=供应商发票
     MailToSendContract=合同
    -MailToThirdparty=合伙人
    +MailToThirdparty=合作方
     MailToMember=会员
     MailToUser=用户
    -MailToProject=Projects page
    +MailToProject=项目页面
     ByDefaultInList=默认显示列表视图
    -YouUseLastStableVersion=You use the latest stable version
    -TitleExampleForMajorRelease=Example of message you can use to announce this major release (feel free to use it on your web sites)
    -TitleExampleForMaintenanceRelease=Example of message you can use to announce this maintenance release (feel free to use it on your web sites)
    -ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s is available. Version %s is a major release with a lot of new features for both users and developers. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features, nor data structure change is present into this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    -MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, you can enter here rule to have price for each level autocalculated according to price of first level, so you will have to enter only price for first level on each product. This page is here to save you time and can be usefull only if your prices for each leve are relative to first level. You can ignore this page in most cases.
    +YouUseLastStableVersion=您使用最新的稳定版本
    +TitleExampleForMajorRelease=您可以用来宣布此主要版本的消息示例(可以在您的网站上使用它)
    +TitleExampleForMaintenanceRelease=您可以用来宣布此维护版本的消息示例(可以在您的网站上使用它)
    +ExampleOfNewsMessageForMajorRelease=Dolibarr ERP&CRM %s可用。版本%s是一个主要版本,为用户和开发人员提供了许多新功能。您可以从https://www.dolibarr.org portal(子目录稳定版本)的下载区下载它。您可以阅读<a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a>以获取完整的更改列表。
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=产品文件模板
    -ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate automatically codes, you must first define a manager to auto define barcode number.
    -SeeSubstitutionVars=See * note for list of possible substitution variables
    -SeeChangeLog=See ChangeLog file (english only)
    -AllPublishers=All publishers
    -UnknownPublishers=Unknown publishers
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
    +SeeSubstitutionVars=有关可能的替换变量列表,请参阅* note
    +SeeChangeLog=请参阅ChangeLog文件(仅英文)
    +AllPublishers=所有出版商
    +UnknownPublishers=未知的发布商
     AddRemoveTabs=添加或删除标签
    -AddDataTables=Add object tables
    -AddDictionaries=Add dictionaries tables
    -AddData=Add objects or dictionaries data
    +AddDataTables=添加对象表
    +AddDictionaries=添加词典表
    +AddData=添加对象或词典数据
     AddBoxes=添加插件
     AddSheduledJobs=添加计划任务
     AddHooks=添加钩子
    @@ -1769,35 +1783,66 @@ AddExportProfiles=添加导出配置
     AddImportProfiles=添加导入配置
     AddOtherPagesOrServices=添加其他页面或服务
     AddModels=添加文档或数据模板
    -AddSubstitutions=Add keys substitutions
    -DetectionNotPossible=Detection not possible
    -UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved on database user table and must be provided on each API call)
    +AddSubstitutions=添加密钥替换
    +DetectionNotPossible=检测不可能
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=可用的API列表
    -activateModuleDependNotSatisfied=Module "%s" depends on module "%s" that is missing, so module "%1$s" may not work correclty. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    -CommandIsNotInsideAllowedCommands=The command you try to run is not inside list of allowed commands defined into parameter <strong>$dolibarr_main_restrict_os_commands</strong> into <strong>conf.php</strong> file.
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=加载页
    -SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", price will be also the same for all companies if products are shared between environments
    -ModuleEnabledAdminMustCheckRights=Module has been activated. Permissions for activated module(s) were given to admin users only. You may need to grant permissions to other users or groups manually if necessary.
    -UserHasNoPermissions=This user has no permission defined
    -TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "Nb of days")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "Offset" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month (N is stored into field "Nb of days")
    -BaseCurrency=Reference currency of the company (go into setup of company to change this)
    -WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016).
    -WarningNoteModulePOSForFrenchLaw=This module %s is compliant with french laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    -WarningInstallationMayBecomeNotCompliantWithLaw=You try to install the module %s that is an external module. Activating an external module means you trust the publisher of the module and you are sure that this module does not alterate negatively the behavior of your application and is compliant with laws of your country (%s). If the module bring a non legal feature, you become responsible for the use of a non legal software.
    -MAIN_PDF_MARGIN_LEFT=Left margin on PDF
    -MAIN_PDF_MARGIN_RIGHT=Right margin on PDF
    -MAIN_PDF_MARGIN_TOP=Top margin on PDF
    -MAIN_PDF_MARGIN_BOTTOM=Bottom margin on PDF
    -SetToYesIfGroupIsComputationOfOtherGroups=Set this to yes if this group is a computation of other groups
    -EnterCalculationRuleIfPreviousFieldIsYes=Enter calculcation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    -SeveralLangugeVariatFound=Several language variants found
    -COMPANY_AQUARIUM_REMOVE_SPECIAL=Remove special characters
    -COMPANY_AQUARIUM_CLEAN_REGEX=Regex filter to clean value (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR contact
    -GDPRContactDesc=If you store data about European companies/citizen, you can store here the contact who is responsible for the General Data Protection Regulation
    +SamePriceAlsoForSharedCompanies=If you use a multicompany module, with the choice "Single price", the price will also be the same for all companies if products are shared between environments
    +ModuleEnabledAdminMustCheckRights=模块已激活。已激活模块的权限仅授予管理员用户。如有必要,您可能需要手动向其他用户或组授予权限。
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
    +BaseCurrency=公司的参考货币(进入公司设置改变这个)
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
    +MAIN_PDF_MARGIN_LEFT=PDF的左边距
    +MAIN_PDF_MARGIN_RIGHT=PDF的右边距
    +MAIN_PDF_MARGIN_TOP=PDF的上边距
    +MAIN_PDF_MARGIN_BOTTOM=PDF的底部边距
    +NothingToSetup=There is no specific setup to do for this module.
    +SetToYesIfGroupIsComputationOfOtherGroups=如果此组是其他组的计算,则将此值设置为yes
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
    +SeveralLangugeVariatFound=找到了几种语言变体
    +COMPANY_AQUARIUM_REMOVE_SPECIAL=删除特殊字符
    +COMPANY_AQUARIUM_CLEAN_REGEX=正则表达式过滤器清理值(COMPANY_AQUARIUM_CLEAN_REGEX)
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=You can delete this file on server with Command Line:<br>%s
    +ChartLoaded=Chart of account loaded
    +SocialNetworkSetup=Setup of module Social Networks
    +EnableFeatureFor=Enable features for <strong>%s</strong>
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
    -ResourceSetup=Configuration du module Resource
    -UseSearchToSelectResource=Use a search form to choose a resource (rather than a drop-down list).
    -DisabledResourceLinkUser=Disable feature to link a resource to users
    -DisabledResourceLinkContact=Disable feature to link a resource to contacts
    -ConfirmUnactivation=Confirm module reset
    +ResourceSetup=配置模块资源
    +UseSearchToSelectResource=使用搜索表单选择资源(而不是下拉列表)。
    +DisabledResourceLinkUser=禁用将资源链接到用户的功能
    +DisabledResourceLinkContact=禁用将资源链接到联系人的功能
    +ConfirmUnactivation=确认模块重置
    +OnMobileOnly=On small screen (smartphone) only
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/zh_CN/companies.lang b/htdocs/langs/zh_CN/companies.lang
    index ffa926a2207..93a93863ce4 100644
    --- a/htdocs/langs/zh_CN/companies.lang
    +++ b/htdocs/langs/zh_CN/companies.lang
    @@ -1,20 +1,20 @@
     # Dolibarr language file - Source file is en_US - companies
     ErrorCompanyNameAlreadyExists=公司名称%s已经存在。请使用其它名称。
     ErrorSetACountryFirst=请先设置国家
    -SelectThirdParty=选择业务伙伴
    -ConfirmDeleteCompany=Are you sure you want to delete this company and all inherited information?
    +SelectThirdParty=选择合伙人
    +ConfirmDeleteCompany=你确定要删除本公司及所有关联信息?
     DeleteContact=删除联络人
    -ConfirmDeleteContact=Are you sure you want to delete this contact and all inherited information?
    -MenuNewThirdParty=新建合伙人
    -MenuNewCustomer=新建客户
    -MenuNewProspect=新建准客户
    -MenuNewSupplier=New vendor
    +ConfirmDeleteContact=你确定要删除这个联系人和所有关联信息?
    +MenuNewThirdParty=New Third Party
    +MenuNewCustomer=New Customer
    +MenuNewProspect=New Prospect
    +MenuNewSupplier=New Vendor
     MenuNewPrivateIndividual=新私营个体
    -NewCompany=New company (prospect, customer, vendor)
    -NewThirdParty=New third party (prospect, customer, vendor)
    -CreateDolibarrThirdPartySupplier=Create a third party (vendor)
    +NewCompany=新建公司 (准客户,客户,供应商)
    +NewThirdParty=New Third Party (prospect, customer, vendor)
    +CreateDolibarrThirdPartySupplier=创建合伙人(供应商)
     CreateThirdPartyOnly=创建合伙人
    -CreateThirdPartyAndContact=Create a third party + a child contact
    +CreateThirdPartyAndContact=创建合伙人+联系人
     ProspectionArea=准客户区
     IdThirdParty=合伙人ID号
     IdCompany=公司ID
    @@ -25,26 +25,26 @@ ThirdPartyContact=合伙人联络人/地址
     Company=公司
     CompanyName=公司名称
     AliasNames=别名(商号,商标,...)
    -AliasNameShort=别名
    +AliasNameShort=Alias Name
     Companies=公司
    -CountryIsInEEC=国家是欧洲共同体一员
    -ThirdPartyName=合伙人名称
    -ThirdPartyEmail=Third party email
    -ThirdParty=合伙人
    -ThirdParties=合伙人
    +CountryIsInEEC=Country is inside the European Economic Community
    +ThirdPartyName=Third Party Name
    +ThirdPartyEmail=合伙人电子邮件
    +ThirdParty=Third Party
    +ThirdParties=Third Parties
     ThirdPartyProspects=准客户
     ThirdPartyProspectsStats=准客户
     ThirdPartyCustomers=客户
     ThirdPartyCustomersStats=客户
     ThirdPartyCustomersWithIdProf12=与%s或%客户s
    -ThirdPartySuppliers=Vendors
    -ThirdPartyType=合伙人类型
    +ThirdPartySuppliers=供应商
    +ThirdPartyType=Type of company
     Individual=私营个体
    -ToCreateContactWithSameName=Will create automatically a contact/address with same information than third party under the third party. In most cases, even if your third party is a physical people, creating a third party alone is enough.
    +ToCreateContactWithSameName=Will create a Third Party and a linked Contact/Address with same information as the Third Party. In most cases, even if your Third Party is a physical person, creating a Third Party alone is enough.
     ParentCompany=母公司
     Subsidiaries=附属公司
    -ReportByMonth=Report by month
    -ReportByCustomers=Report by customer
    +ReportByMonth=按月报告
    +ReportByCustomers=顾客报告
     ReportByQuarter=按报表等级
     CivilityCode=文明守则
     RegisteredOffice=注册给办公室
    @@ -52,12 +52,12 @@ Lastname=姓氏
     Firstname=名字
     PostOrFunction=工作岗位
     UserTitle=称谓
    -NatureOfThirdParty=Nature of Third party
    +NatureOfThirdParty=合伙人的性质
     Address=地址
     State=州/省
     StateShort=国家
     Region=地区
    -Region-State=Region - State
    +Region-State=地区 - 州
     Country=国家
     CountryCode=国家代码
     CountryId=国家编号
    @@ -75,14 +75,14 @@ Zip=邮政编码
     Town=城市
     Web=网站
     Poste= 位置
    -DefaultLang=默认语言
    -VATIsUsed=Sales tax is used
    -VATIsUsedWhenSelling=This define if this third party includes a sale tax or not when it makes an invoice to its own customers
    -VATIsNotUsed=Sales tax is not used
    -CopyAddressFromSoc=Fill address with third party address
    -ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available refering objects
    -ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=Third party neither customer nor supplier, discounts are not available
    -PaymentBankAccount=Payment bank account
    +DefaultLang=Language default
    +VATIsUsed=Sales tax used
    +VATIsUsedWhenSelling=This defines if this third party includes a sale tax or not when it makes an invoice to its own customers
    +VATIsNotUsed=不含增值税
    +CopyAddressFromSoc=使用合伙人地址填写地址
    +ThirdpartyNotCustomerNotSupplierSoNoRef=Third party neither customer nor vendor, no available referring objects
    +ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=合伙人既不是顾客也不是供应商,折扣不可用
    +PaymentBankAccount=付款银行帐户
     OverAllProposals=报价
     OverAllOrders=订单
     OverAllInvoices=发票
    @@ -99,9 +99,9 @@ LocalTax2ES=IRPF
     TypeLocaltax1ES=RE 类型
     TypeLocaltax2ES=IRPF 类型
     WrongCustomerCode=客户代码无效
    -WrongSupplierCode=Vendor code invalid
    +WrongSupplierCode=供应商代码无效
     CustomerCodeModel=客户代码模板
    -SupplierCodeModel=Vendor code model
    +SupplierCodeModel=供应商代码模型
     Gencod=条码
     ##### Professional ID #####
     ProfId1Short=Prof. id 1
    @@ -258,36 +258,36 @@ ProfId1DZ=钢筋混凝土
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=Sales tax ID
    -VATIntraShort=Tax ID
    +VATIntra=Sales Tax/VAT ID
    +VATIntraShort=税号
     VATIntraSyntaxIsValid=语法是有效的
    -VATReturn=VAT return
    +VATReturn=增值税退税
     ProspectCustomer=准客户/客户
     Prospect=准客户
     CustomerCard=客户信息
     Customer=客户
     CustomerRelativeDiscount=相对客户折扣
    -SupplierRelativeDiscount=Relative vendor discount
    +SupplierRelativeDiscount=相对供应商折扣
     CustomerRelativeDiscountShort=相对折扣
     CustomerAbsoluteDiscountShort=绝对优惠
     CompanyHasRelativeDiscount=这个客户有一个<b>%s的%%</b>的折扣
     CompanyHasNoRelativeDiscount=此客户没有默认相对折扣
    -HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
    -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    +HasRelativeDiscountFromSupplier=您从该供应商处获得<b> %s%% </b>的默认折扣
    +HasNoRelativeDiscountFromSupplier=您没有此供应商的默认相对折扣
    +CompanyHasAbsoluteDiscount=This customer has discounts available (credits notes or down payments) for <b>%s</b> %s
    +CompanyHasDownPaymentOrCommercialDiscount=This customer has discounts available (commercial, down payments) for <b>%s</b> %s
     CompanyHasCreditNote=此客户仍然有信用票据<b>或s%%s</b>的前存款
    -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
    -HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    -HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for <b>%s</b> %s from this supplier
    -HasCreditNoteFromSupplier=You have credit notes for <b>%s</b> %s from this supplier
    +HasNoAbsoluteDiscountFromSupplier=您没有此供应商提供的折扣信用额度
    +HasAbsoluteDiscountFromSupplier=您可以从该供应商处获得<b> %s </b> %s的折扣(信用票据或预付款)
    +HasDownPaymentOrCommercialDiscountFromSupplier=您可以从该供应商处购买<b> %s </b> %s的折扣(商业,预付定金)
    +HasCreditNoteFromSupplier=您的<b> %s </b> %s从该供应商的贷方记录
     CompanyHasNoAbsoluteDiscount=此客户没有提供贴息贷款
    -CustomerAbsoluteDiscountAllUsers=Absolute customer discounts (granted by all users)
    -CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +CustomerAbsoluteDiscountAllUsers=绝对优惠(所有用户授予)
    +CustomerAbsoluteDiscountMy=绝对优惠(由自己授予)
    +SupplierAbsoluteDiscountAllUsers=绝对供应商折扣(由所有用户输入)
    +SupplierAbsoluteDiscountMy=绝对供应商折扣(由您自己输入)
     DiscountNone=无
    -Supplier=供应商
    +Supplier=Vendor
     AddContact=创建联系人
     AddContactAddress=创建联系人/地址
     EditContact=编辑联系人/地址
    @@ -295,30 +295,30 @@ EditContactAddress=编辑联系人/地址
     Contact=联系人
     ContactId=联系人id
     ContactsAddresses=联系方式/地址
    -FromContactName=Name:
    +FromContactName=名称:
     NoContactDefinedForThirdParty=此合伙人未确定联络人
     NoContactDefined=合伙人未设定联系人
     DefaultContact=默认接触
     AddThirdParty=创建合伙人
     DeleteACompany=删除公司
     PersonalInformations=个人资料
    -AccountancyCode=会计账户
    -CustomerCode=客户代码
    -SupplierCode=Vendor code
    -CustomerCodeShort=客户代码
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=客户代码,为所有客户提供唯一的客户代码值
    -SupplierCodeDesc=Vendor code, unique for all vendors
    +AccountancyCode=会计科目
    +CustomerCode=Customer Code
    +SupplierCode=Vendor Code
    +CustomerCodeShort=Customer Code
    +SupplierCodeShort=Vendor Code
    +CustomerCodeDesc=Customer Code, unique for all customers
    +SupplierCodeDesc=Vendor Code, unique for all vendors
     RequiredIfCustomer=要求合伙人为客户或是准客户
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=有效性控制模块
    -ThisIsModuleRules=这是本单元的规则
    +RequiredIfSupplier=如果合伙人是供应商,则必需
    +ValidityControledByModule=Validity controlled by module
    +ThisIsModuleRules=Rules for this module
     ProspectToContact=准客户到联系人
     CompanyDeleted=公司“%的”从数据库中删除。
     ListOfContacts=联系人列表
    -ListOfContactsAddresses=联系人/地址列表
    -ListOfThirdParties=合伙人列表
    -ShowCompany=Show third party
    +ListOfContactsAddresses=联系人列表
    +ListOfThirdParties=List of Third Parties
    +ShowCompany=Show Third Party
     ShowContact=显示联系人
     ContactsAllShort=全部 (不筛选)
     ContactType=联系人类型
    @@ -333,20 +333,20 @@ NoContactForAnyProposal=不是任何报价的联系人
     NoContactForAnyContract=不是任何合同的联系人
     NoContactForAnyInvoice=不是任何发票的联系人
     NewContact=新建联系人
    -NewContactAddress=新建联系人/地址
    +NewContactAddress=New Contact/Address
     MyContacts=我的联系人
     Capital=注册资金
     CapitalOf=注册资金 %s
     EditCompany=编辑公司
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    +ThisUserIsNot=This user is not a prospect, customer or vendor
     VATIntraCheck=支票
    -VATIntraCheckDesc=<b>%s的</b>允许该链接要求欧盟增值税检查服务。从服务器的外部网络连接需要这项服务工作。
    +VATIntraCheckDesc=The link <b>%s</b> uses the European VAT checker service (VIES). An external internet access from server is required for this service to work.
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=欧盟委员会现场检查Intracomunnautary增值税
    -VATIntraManualCheck=您也可以手动检查站点从欧洲网站<a href="%s" target="_blank">%s的</a>
    +VATIntraCheckableOnEUSite=Check intra-Community VAT on the European Commission website
    +VATIntraManualCheck=You can also check manually on the European Commission website <a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=检查不可能的。检查服务是没有提供的会员国(%s)中。
    -NorProspectNorCustomer=不是准客户,也不是客户
    -JuridicalStatus=法律条款
    +NorProspectNorCustomer=Not prospect, or customer
    +JuridicalStatus=Legal Entity Type
     Staff=员工人数
     ProspectLevelShort=潜力
     ProspectLevel=潜在的准客户
    @@ -387,48 +387,48 @@ ExportCardToFormat=导出名片格式
     ContactNotLinkedToCompany=联系人未链接到任何合伙人
     DolibarrLogin=登陆Dolibarr
     NoDolibarrAccess=没有Dolibarr访问
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=联系人和特征
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ExportDataset_company_2=Contacts and their properties
    +ImportDataset_company_1=Third Parties (companies/foundations/physical people) and their properties
    +ImportDataset_company_2=Contacts/Addresses and attributes
    +ImportDataset_company_3=Bank accounts of Third Parties
    +ImportDataset_company_4=Third Parties - sales representatives (assign sales representatives/users to companies)
     PriceLevel=价格级别
     DeliveryAddress=送货地址
     AddAddress=添加地址
    -SupplierCategory=Vendor category
    +SupplierCategory=供应商类别
     JuridicalStatus200=独立
     DeleteFile=删除文件
     ConfirmDeleteFile=你确定要删除这个文件?
     AllocateCommercial=分配给销售代表
     Organization=组织
    -FiscalYearInformation=会计年度信息
    +FiscalYearInformation=Fiscal Year
     FiscalMonthStart=会计年度初始月
    -YouMustAssignUserMailFirst=您必须为此账户添加电子邮箱,首先可为他添加电子邮件通知功能。
    +YouMustAssignUserMailFirst=You must create an email for this user prior to being able to add an email notification.
     YouMustCreateContactFirst=能够添加电子邮件通知, 首先你必须填写合伙人的有效Email地址
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=准客户列表
    -ListCustomersShort=客户列表
    -ThirdPartiesArea=合伙人信息区
    -LastModifiedThirdParties=最近变更的 %s 位合伙人
    -UniqueThirdParties=合伙人小计
    +ListSuppliersShort=List of Vendors
    +ListProspectsShort=List of Prospects
    +ListCustomersShort=List of Customers
    +ThirdPartiesArea=Third Parties/Contacts
    +LastModifiedThirdParties=Last %s modified Third Parties
    +UniqueThirdParties=Total of Third Parties
     InActivity=打开
     ActivityCeased=禁用
    -ThirdPartyIsClosed=Third party is closed
    +ThirdPartyIsClosed=合伙人已关闭
     ProductsIntoElements= %s 的中产品/服务列表
     CurrentOutstandingBill=当前优质账单
     OutstandingBill=优质账单最大值
     OutstandingBillReached=已达到最大优质账单值
    -OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +OrderMinAmount=订单的最低金额
    +MonkeyNumRefModelDesc=Return a number with the format %syymm-nnnn for the customer code and %syymm-nnnn for the vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
     LeopardNumRefModelDesc=客户/供应商代码是免费的。此代码可以随时修改。
     ManagingDirectors=公司高管(s)称呼 (CEO, 董事长, 总裁...)
    -MergeOriginThirdparty=重复第三方(第三方要删除)
    +MergeOriginThirdparty=重复合伙人(合伙人要删除)
     MergeThirdparties=合并合伙人
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    -ThirdpartiesMergeSuccess=Third parties have been merged
    +ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the third party will be deleted.
    +ThirdpartiesMergeSuccess=第三方已合并
     SaleRepresentativeLogin=销售代表登陆
    -SaleRepresentativeFirstname=First name of sales representative
    -SaleRepresentativeLastname=Last name of sales representative
    -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +SaleRepresentativeFirstname=销售代表的名字
    +SaleRepresentativeLastname=销售代表的姓氏
    +ErrorThirdpartiesMerge=删除第三方时出错。请检查日志。变更已被恢复。
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/zh_CN/errors.lang b/htdocs/langs/zh_CN/errors.lang
    index 80b8871fd69..fac2aa4abaa 100644
    --- a/htdocs/langs/zh_CN/errors.lang
    +++ b/htdocs/langs/zh_CN/errors.lang
    @@ -6,35 +6,35 @@ NoErrorCommitIsDone=没有错误,我们承诺
     ErrorButCommitIsDone=发现错误我们将进行验证
     ErrorBadEMail=电子邮件%s是错误的
     ErrorBadUrl=网址 %s 有误
    -ErrorBadValueForParamNotAString=Bad value for your parameter. It appends generally when translation is missing.
    +ErrorBadValueForParamNotAString=参数值不正确。它通常在缺少翻译时附加。
     ErrorLoginAlreadyExists=登陆%s已经存在。
     ErrorGroupAlreadyExists=组%s已经存在。
     ErrorRecordNotFound=记录没有找到。
     ErrorFailToCopyFile=无法复制文件<b>'%s'</b>成<b>'%s'。</b>
    -ErrorFailToCopyDir=Failed to copy directory '<b>%s</b>' into '<b>%s</b>'.
    +ErrorFailToCopyDir=无法将目录“<b> %s </b>”复制到“<b> %s </b>”中。
     ErrorFailToRenameFile=无法重新命名为<b>“%s'</b>文件<b>'%s'。</b>
     ErrorFailToDeleteFile=无法删除文件<b>'%s'</b>的。
     ErrorFailToCreateFile=无法创建文件<b>'%s'</b>的。
     ErrorFailToRenameDir=无法重命名目录<b>'%s'</b>到<b>%s'</b>的。
     ErrorFailToCreateDir=无法创建目录<b>'%s'</b>的。
     ErrorFailToDeleteDir=无法删除目录<b>'%s'</b>的。
    -ErrorFailToMakeReplacementInto=Failed to make replacement into file '<b>%s</b>'.
    -ErrorFailToGenerateFile=Failed to generate file '<b>%s</b>'.
    +ErrorFailToMakeReplacementInto=无法更换到文件'<b> %s </b>'。
    +ErrorFailToGenerateFile=无法生成文件'<b> %s </b>'。
     ErrorThisContactIsAlreadyDefinedAsThisType=这个联络已定义为这种类型的接触。
     ErrorCashAccountAcceptsOnlyCashMoney=这是一个银行帐户的现金帐户,所以只接受现金支付的类型。
     ErrorFromToAccountsMustDiffers=源和目标的银行帐户必须是不同的。
    -ErrorBadThirdPartyName=错误的合伙人名称
    +ErrorBadThirdPartyName=错误的合作方名称
     ErrorProdIdIsMandatory=%s 是强制性的
     ErrorBadCustomerCodeSyntax=错误的客户代码
    -ErrorBadBarCodeSyntax=Bad syntax for bar code. May be you set a bad barcode type or you defined a barcode mask for numbering that does not match value scanned.
    +ErrorBadBarCodeSyntax=条形码的语法错误。可能是您设置了错误的条形码类型,或者您为编号设置了条形码掩码,该条形码掩码与扫描的值不匹配。
     ErrorCustomerCodeRequired=客户代码需要
     ErrorBarCodeRequired=需要条形码
     ErrorCustomerCodeAlreadyUsed=客户代码已被使用
     ErrorBarCodeAlreadyUsed=条码已存在且已使用
     ErrorPrefixRequired=前缀要求
    -ErrorBadSupplierCodeSyntax=Bad syntax for vendor code
    -ErrorSupplierCodeRequired=Vendor code required
    -ErrorSupplierCodeAlreadyUsed=Vendor code already used
    +ErrorBadSupplierCodeSyntax=供应商代码的语法错误
    +ErrorSupplierCodeRequired=需要供应商代码
    +ErrorSupplierCodeAlreadyUsed=已使用供应商代码
     ErrorBadParameters=错误的参数
     ErrorBadValueForParameter=错误值 '%s' 参数 '%s'
     ErrorBadImageFormat=图片格式不支持(你的PHP不支持图片格式转换功能)
    @@ -42,9 +42,9 @@ ErrorBadDateFormat=值“%s”有错误的日期格式
     ErrorWrongDate=日期不正确!
     ErrorFailedToWriteInDir=无法写在目录%s
     ErrorFoundBadEmailInFile=找到%S的语法不正确的电子邮件文件中的行(例如行%的电子邮件s =%s)的
    -ErrorUserCannotBeDelete=用户不能删除。也许它已经关联到Dolibarr实体对象了。
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=一些必要的栏位都没有填补。
    -ErrorSubjectIsRequired=The email topic is required
    +ErrorSubjectIsRequired=电子邮件主题是必需的
     ErrorFailedToCreateDir=无法创建一个目录。检查Web服务器的用户有权限写入Dolibarr文件目录。如果参数<b>safe_mode设置</b>为启用这个PHP,检查Dolibarr php文件到Web服务器的用户拥有(或组)。
     ErrorNoMailDefinedForThisUser=没有邮件定义该用户
     ErrorFeatureNeedJavascript=此功能需要Javascript被激活才能工作。更改此设置 - 显示。
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=请填写选取列表值
     ErrorNoValueForCheckBoxType=请填写复选框列表值
     ErrorNoValueForRadioType=请填写电台列表的值
     ErrorBadFormatValueList=列表值不能有一个以上的逗号: <u>%s</u>, 但至少需要一个: key,value
    -ErrorFieldCanNotContainSpecialCharacters=栏位<b>%s</b>必须不包含特殊字符。
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=没有激活启用任何财务会计模块
     ErrorExportDuplicateProfil=导出设定配置名称已存在
     ErrorLDAPSetupNotComplete=Dolibarr - LDAP的匹配是不完整的。
     ErrorLDAPMakeManualTest=甲。LDIF文件已经生成在目录%s的尝试加载命令行手动有更多的错误信息。
    -ErrorCantSaveADoneUserWithZeroPercentage=无法储存与行动“规约未启动”如果领域“做的”,也是填补。
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=号的创作已经存在。
    -ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    -ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=不能删除记录。它已被使用或者包含在其他对象中。
    +ErrorPleaseTypeBankTransactionReportName=请输入必须报告条目的银行对账单名称(格式YYYYMM或YYYYMMDD)
    +ErrorRecordHasChildren=Failed to delete record since it has some child records.
    +ErrorRecordHasAtLeastOneChildOfType=对象至少有一个类型为%s的子项
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=不能禁用JavaScript必须有此功能的工作。要启用/禁用JavaScript,进入菜单首页->安装->“显示。
     ErrorPasswordsMustMatch=这两种类型的密码必须相互匹配
    -ErrorContactEMail=一个技术性错误发生。请联系管理员,以下连接提供错误代码<b>%s</b>在您的邮件,甚至更好,加入了这个页面的屏幕拷贝的电子邮件<b>%s。</b>
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=<b>s'</b>的领域的一些错误值<b>的%s(</b>价值<b>'%</b>不匹配正则表达式规则<b>%s)</b>
     ErrorFieldValueNotIn=栏位数字参数值错误 <b>%s</b> (值 '<b>%s</b>' 不允许填写在这个栏位 <b>%s</b> 表格 <b>%s</b>)
     ErrorFieldRefNotIn=栏位数字错误 <b>%s</b> (value '<b>%s</b>'不是一个<b>%s</b>现有编号)
    @@ -87,24 +88,25 @@ ErrorsOnXLines=<b>%</b>误差<b>的</b>源上线
     ErrorFileIsInfectedWithAVirus=防病毒程序无法验证文件(文件可能被病毒感染)
     ErrorSpecialCharNotAllowedForField=特殊字符不为外地允许“%s的”
     ErrorNumRefModel=存在一个引用(%s)和编号是不符合本规则兼容到数据库。记录中删除或重命名参考激活此模块。
    -ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorQtyTooLowForThisSupplier=此供应商的数量太低,或者此供应商未定义此产品的价格
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=模块设置看起来未完成设置。请到 主页->设置->模块菜单 完成模块的设置。
     ErrorBadMask=在面具的错误
     ErrorBadMaskFailedToLocatePosOfSequence=没有序列号错误,面具
     ErrorBadMaskBadRazMonth=错误,坏的复位值
    -ErrorMaxNumberReachForThisMask=Max number reach for this mask
    +ErrorMaxNumberReachForThisMask=此掩码的最大数量范围
     ErrorCounterMustHaveMoreThan3Digits=计数器必须有3个以上的数字
     ErrorSelectAtLeastOne=错误。请至少选取一个条目。
    -ErrorDeleteNotPossibleLineIsConsolidated=不能删除该记录已经关联到银行交易并已过账了
    -ErrorProdIdAlreadyExist=%s被分配到其他合伙人
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
    +ErrorProdIdAlreadyExist=%s被分配到其他合作方
     ErrorFailedToSendPassword=无法传送密码
     ErrorFailedToLoadRSSFile=未能得到RSS提要。尝试添加恒定MAIN_SIMPLEXMLLOAD_DEBUG,如果错误消息不提供足够的信息。
    -ErrorForbidden=Access denied.<br>You try to access to a page, area or feature of a disabled module or without being in an authenticated session or that is not allowed to your user.
    +ErrorForbidden=访问被拒绝。<br>您尝试访问已禁用模块的页面,区域或功能,或者不在经过身份验证的会话中或不允许您的用户访问。
     ErrorForbidden2=此登陆权限可在你的Dolibarr管理员菜单 %s->%s中定义。
     ErrorForbidden3=看来Dolibarr是不是通过身份验证的会话中使用。以在Dolibarr安装文件就会知道如何管理认证(htaccess的,mod_auth或其他...).
     ErrorNoImagickReadimage=功能imagick_readimage是没有发现在这个PHP。没有预览可用。管理员可以从菜单中禁用此设置 - 显示选项卡。
     ErrorRecordAlreadyExists=记录已存在
    -ErrorLabelAlreadyExists=This label already exists
    +ErrorLabelAlreadyExists=此标签已存在
     ErrorCantReadFile=无法读取档案'%s'
     ErrorCantReadDir=无法读取目录'%s'
     ErrorBadLoginPassword=帐号密码不正确
    @@ -115,30 +117,31 @@ ErrorLoginDoesNotExists=登陆账号 <b>%s</b> 有误——系统中没有这个
     ErrorLoginHasNoEmail=此账户未设定Email地址。无法使用该功能.
     ErrorBadValueForCode=代码有错误的值类型。再次尝试以新的价值...
     ErrorBothFieldCantBeNegative=栏位%s和%s不能都为负的
    -ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
    +ErrorQtyForCustomerInvoiceCantBeNegative=进入客户发票的数量不能为负数
     ErrorWebServerUserHasNotPermission=<b>%s</b>用来执行Web服务器用户帐户没有该权限
     ErrorNoActivatedBarcode=没有激活的条码类型
     ErrUnzipFails=%s 无法解压缩与解压缩
    -ErrNoZipEngine=No engine to zip/unzip %s file in this PHP
    +ErrNoZipEngine=没有引擎在这个PHP中压缩/解压缩%s文件
     ErrorFileMustBeADolibarrPackage=%s 文件必须是Dolibarr zip格式包
    -ErrorModuleFileRequired=You must select a Dolibarr module package file
    +ErrorModuleFileRequired=您必须选择Dolibarr模块包文件
     ErrorPhpCurlNotInstalled=PHP Curl没有安装,这需要与支付宝协调
     ErrorFailedToAddToMailmanList=Failed to add record %s to Mailman list %s or SPIP base
     ErrorFailedToRemoveToMailmanList=Failed to remove record %s to Mailman list %s or SPIP base
     ErrorNewValueCantMatchOldValue=新价值不能等于旧的价值
     ErrorFailedToValidatePasswordReset=重新初始化密码密码失败。重新初始化密码已经完成(该链接可以只用一次)。如果没有,请尝试重新启动初始化过程。
    -ErrorToConnectToMysqlCheckInstance=Connect to database fails. Check database server is running (for example, with mysql/mariadb, you can launch it from command line with 'sudo service mysql start').
    +ErrorToConnectToMysqlCheckInstance=连接数据库失败。检查数据库服务器是否正在运行(例如,使用mysql / mariadb,您可以使用'sudo service mysql start'从命令行启动它)。
     ErrorFailedToAddContact=无法添加联系人
    -ErrorDateMustBeBeforeToday=The date cannot be greater than today
    -ErrorPaymentModeDefinedToWithoutSetup=A payment mode was set to type %s but setup of module Invoice was not completed to define information to show for this payment mode.
    -ErrorPHPNeedModule=Error, your PHP must have module <b>%s</b> installed to use this feature.
    -ErrorOpenIDSetupNotComplete=You setup Dolibarr config file to allow OpenID authentication, but URL of OpenID service is not defined into constant %s
    -ErrorWarehouseMustDiffers=Source and target warehouses must differs
    +ErrorDateMustBeBeforeToday=日期不能超过今天
    +ErrorPaymentModeDefinedToWithoutSetup=付款模式设置为键入%s但未完成模块发票的设置以定义要为此付款模式显示的信息。
    +ErrorPHPNeedModule=错误,您的PHP必须安装模块<b> %s </b>才能使用此功能。
    +ErrorOpenIDSetupNotComplete=您设置Dolibarr配置文件以允许OpenID身份验证,但OpenID服务的URL未定义为常量%s
    +ErrorWarehouseMustDiffers=源仓库和目标仓库必须不同
     ErrorBadFormat=格式错误!
    -ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
    +ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=错误,此成员尚未链接到任何合作方。在创建订阅发票之前,将成员链接到现有合作方或创建新的合作方。
     ErrorThereIsSomeDeliveries=错误,此运输已被关联到某交货,即可能已经交货了不能反悔了。拒绝删除。
    -ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentReconciliated=无法删除已生成已对帐的银行条目的付款
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=无法分配到常数 '%s'
     ErrorPriceExpression2=不能重新定义内置函数 '%s'
     ErrorPriceExpression3=未定义的变量 '%s' 在函数的定义
    @@ -147,22 +150,22 @@ ErrorPriceExpression5=意外 '%s'
     ErrorPriceExpression6=错误的数量参数值 (%s given, %s expected)
     ErrorPriceExpression8=操作意外 '%s'
     ErrorPriceExpression9=发生意外错误
    -ErrorPriceExpression10=运算符 '%s' 缺少操作数
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=预料 '%s'
     ErrorPriceExpression14=除以零
     ErrorPriceExpression17=未定义的变量 '%s'
    -ErrorPriceExpression19=表达式未发现 
    +ErrorPriceExpression19=表达式未发现
     ErrorPriceExpression20=空白表达式
     ErrorPriceExpression21=空白结果 '%s'
     ErrorPriceExpression22=负结果 '%s'
    -ErrorPriceExpression23=Unknown or non set variable '%s' in %s
    -ErrorPriceExpression24=Variable '%s' exists but has no value
    +ErrorPriceExpression23=%s中的未知或未设置变量'%s'
    +ErrorPriceExpression24=变量'%s'存在但没有值
     ErrorPriceExpressionInternal=内部错误 '%s'
     ErrorPriceExpressionUnknown=未知错误 '%s'
    -ErrorSrcAndTargetWarehouseMustDiffers=Source and target warehouses must differs
    -ErrorTryToMakeMoveOnProductRequiringBatchData=Error, trying to make a stock movement without lot/serial information, on product '%s' requiring lot/serial information
    -ErrorCantSetReceptionToTotalDoneWithReceptionToApprove=All recorded receptions must first be verified (approved or denied) before being allowed to do this action
    -ErrorCantSetReceptionToTotalDoneWithReceptionDenied=All recorded receptions must first be verified (approved) before being allowed to do this action
    +ErrorSrcAndTargetWarehouseMustDiffers=源仓库和目标仓库必须不同
    +ErrorTryToMakeMoveOnProductRequiringBatchData=在产品'%s'上尝试在没有批次/序列信息的情况下进行库存移动时出错,需要批次/序列信息
    +ErrorCantSetReceptionToTotalDoneWithReceptionToApprove=在允许执行此操作之前,必须首先验证(批准或拒绝)所有录制的接收
    +ErrorCantSetReceptionToTotalDoneWithReceptionDenied=在允许执行此操作之前,必须首先验证(批准)所有录制的接收
     ErrorGlobalVariableUpdater0=HTTP 请求失败错误为 '%s'
     ErrorGlobalVariableUpdater1=无效 JSON 格式 '%s'
     ErrorGlobalVariableUpdater2=丢失参数 '%s'
    @@ -170,64 +173,65 @@ ErrorGlobalVariableUpdater3=请求数据在结果中没找到
     ErrorGlobalVariableUpdater4=SOAP 客户端失败错误为 '%s'
     ErrorGlobalVariableUpdater5=没有全局变量选择
     ErrorFieldMustBeANumeric=填写 <b>%s</b> 必须为数字值
    -ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    -ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
    -ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    -ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
    -ErrorFileMustHaveFormat=File must have format %s
    -ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    +ErrorMandatoryParametersNotProvided=未提供强制参数
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
    +ErrorFailedToLoadModuleDescriptorForXXX=无法加载%s的模块描述符类
    +ErrorBadDefinitionOfMenuArrayInModuleDescriptor=模块描述符中菜单数组的错误定义(关键字fk_menu的错误值)
    +ErrorSavingChanges=An error has occurred when saving the changes
    +ErrorWarehouseRequiredIntoShipmentLine=在运输线上需要仓库
    +ErrorFileMustHaveFormat=文件格式必须为%s
    +ErrorSupplierCountryIsNotDefined=未定义此供应商的国家/地区。先纠正这个问题。
     ErrorsThirdpartyMerge=两条记录合并失败。请求已取消。
    -ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order.
    -ErrorStockIsNotEnoughToAddProductOnInvoice=Stock is not enough for product %s to add it into a new invoice.
    -ErrorStockIsNotEnoughToAddProductOnShipment=Stock is not enough for product %s to add it into a new shipment.
    -ErrorStockIsNotEnoughToAddProductOnProposal=Stock is not enough for product %s to add it into a new proposal.
    -ErrorFailedToLoadLoginFileForMode=Failed to get the login key for mode '%s'.
    -ErrorModuleNotFound=File of module was not found.
    -ErrorFieldAccountNotDefinedForBankLine=Value for Accounting account not defined for source line id %s (%s)
    -ErrorFieldAccountNotDefinedForInvoiceLine=Value for Accounting account not defined for invoice id %s (%s)
    -ErrorFieldAccountNotDefinedForLine=Value for Accounting account not defined for the line (%s)
    -ErrorBankStatementNameMustFollowRegex=Error, bank statement name must follow the following syntax rule %s
    -ErrorPhpMailDelivery=Check that you don't use a too high number of recipients and that your email content is not similar to a Spam. Ask also your administrator to check firewall and server logs files for a more complete information.
    -ErrorUserNotAssignedToTask=User must be assigned to task to be able to enter time consumed.
    -ErrorTaskAlreadyAssigned=Task already assigned to user
    -ErrorModuleFileSeemsToHaveAWrongFormat=The module package seems to have a wrong format.
    -ErrorFilenameDosNotMatchDolibarrPackageRules=The name of the module package (<strong>%s</strong>) does not match expected name syntax: <strong>%s</strong>
    -ErrorDuplicateTrigger=Error, duplicate trigger name %s. Already loaded from %s.
    -ErrorNoWarehouseDefined=Error, no warehouses defined.
    -ErrorBadLinkSourceSetButBadValueForRef=The link you use is not valid. A 'source' for payment is defined, but value for 'ref' is not valid.
    -ErrorTooManyErrorsProcessStopped=Too many errors. Process was stopped.
    -ErrorMassValidationNotAllowedWhenStockIncreaseOnAction=Mass validation is not possible when option to increase/decrease stock is set on this action (you must validate one by one so you can define the warehouse to increase/decrease)
    -ErrorObjectMustHaveStatusDraftToBeValidated=Object %s must have status 'Draft' to be validated.
    -ErrorObjectMustHaveLinesToBeValidated=Object %s must have lines to be validated.
    -ErrorOnlyInvoiceValidatedCanBeSentInMassAction=Only validated invoices can be sent using the "Send by email" mass action.
    -ErrorChooseBetweenFreeEntryOrPredefinedProduct=You must choose if article is a predefined product or not
    -ErrorDiscountLargerThanRemainToPaySplitItBefore=The discount you try to apply is larger than remain to pay. Split the discount in 2 smaller discounts before.
    -ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was modified or file was removed recently.
    -ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
    -ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
    -ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorStockIsNotEnoughToAddProductOnOrder=产品%s的库存不足以将其添加到新订单中。
    +ErrorStockIsNotEnoughToAddProductOnInvoice=产品%s的库存不足以将其添加到新发票中。
    +ErrorStockIsNotEnoughToAddProductOnShipment=产品%s的库存不足以将其添加到新货件中。
    +ErrorStockIsNotEnoughToAddProductOnProposal=产品%s的库存不足以将其添加到新提案中。
    +ErrorFailedToLoadLoginFileForMode=无法获取模式'%s'的登录密钥。
    +ErrorModuleNotFound=找不到模块文件。
    +ErrorFieldAccountNotDefinedForBankLine=未为源行标识%s(%s)定义的会计科目值
    +ErrorFieldAccountNotDefinedForInvoiceLine=未为发票标识%s(%s)定义的会计科目值
    +ErrorFieldAccountNotDefinedForLine=未为该行定义的会计科目值(%s)
    +ErrorBankStatementNameMustFollowRegex=错误,银行对帐单名称必须遵循以下语法规则%s
    +ErrorPhpMailDelivery=检查您是否使用了过多的收件人,并且您的电子邮件内容与垃圾邮件不相似。还请管理员检查防火墙和服务器日志文件以获取更完整的信息。
    +ErrorUserNotAssignedToTask=必须为用户分配用户才能输入消耗的时间。
    +ErrorTaskAlreadyAssigned=任务已分配给用户
    +ErrorModuleFileSeemsToHaveAWrongFormat=模块包似乎格式错误。
    +ErrorFilenameDosNotMatchDolibarrPackageRules=模块包的名称(<strong> %s </strong>)与预期的名称语法不匹配:<strong> %s </strong>
    +ErrorDuplicateTrigger=错误,重复的触发器名称%s。已经从%s加载。
    +ErrorNoWarehouseDefined=错误,没有定义仓库。
    +ErrorBadLinkSourceSetButBadValueForRef=您使用的链接无效。定义了付款的“来源”,但“参考”的值无效。
    +ErrorTooManyErrorsProcessStopped=错误太多了。过程停止了。
    +ErrorMassValidationNotAllowedWhenStockIncreaseOnAction=在此操作上设置增加/减少库存的选项时,无法进行批量验证(您必须逐个验证,以便您可以定义仓库以增加/减少)
    +ErrorObjectMustHaveStatusDraftToBeValidated=对象%s必须为'草稿'状态。
    +ErrorObjectMustHaveLinesToBeValidated=对象%s必须有要验证的行。
    +ErrorOnlyInvoiceValidatedCanBeSentInMassAction=只有经过验证的发票才能使用“通过电子邮件发送”批量操作发送。
    +ErrorChooseBetweenFreeEntryOrPredefinedProduct=您必须选择文章是否为预定义产品
    +ErrorDiscountLargerThanRemainToPaySplitItBefore=您尝试申请的折扣大于剩余支付。之前将折扣分为2个较小的折扣。
    +ErrorFileNotFoundWithSharedLink=找不到档案。可能是修改了共享密钥或最近删除了文件。
    +ErrorProductBarCodeAlreadyExists=产品条形码%s已存在于其他产品参考中。
    +ErrorNoteAlsoThatSubProductCantBeFollowedByLot=还要注意,当至少一个子产品(或子产品的子产品)需要序列号/批号时,使用虚拟产品来自动增加/减少子产品是不可能的。
    +ErrorDescRequiredForFreeProductLines=对于包含免费产品的行,必须说明
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
    -WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    +WarningPasswordSetWithNoAccount=为此成员设置了密码。但是,未创建任何用户帐户。因此,此密码已存储,但无法用于登录Dolibarr。它可以由外部模块/接口使用,但如果您不需要为成员定义任何登录名或密码,则可以从成员模块设置中禁用“管理每个成员的登录名”选项。如果您需要管理登录但不需要任何密码,则可以将此字段保留为空以避免此警告。注意:如果成员链接到用户,则电子邮件也可用作登录。
     WarningMandatorySetupNotComplete=初始参数尚未设置
     WarningSafeModeOnCheckExecDir=警告,PHP的选项<b>safe_mode设置</b>为在此情况下命令必须在<b>safe_mode_exec_dir之</b>存储参数的PHP目录内宣布。
     WarningBookmarkAlreadyExists=本标题或此目标(网址)书签已存在。
     WarningPassIsEmpty=警告,数据库密码是空的。这是一个安全漏洞。您应该添加一个密码到您的数据库,并改变你的conf.php文件,以反映这一点。
     WarningConfFileMustBeReadOnly=警告:您的服务器配置文件 (<b>htdocs/conf/conf.php</b>——LiAnGjiA注:初始安装时需要允许Dolibarr读写权限安装完成后为了安全着想则需要取消写入权限害怕被公鸡啦) 有写入权限。这是个非常严重的漏洞。其允许服务器权限级别的文件读取与写入,有被恶意利用的风险。假如你是Windows的磁盘格式是FAT格式,你必须将该配置文件的权限修改为只读权限,并请继续加强其他服务器安全防护工作。
     WarningsOnXLines=<b>%S上</b>的源代码行警告
    -WarningNoDocumentModelActivated=没有模板,对文档生成,已被激活。一个模板是选用默认,直到您检查您的模块设置。
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=警告:一旦您安装完成Dolibarr则必须将install整个目录移走并在目录 <b>%s</b>下添加一个 <b>install.lock</b> 文件来防止他人的恶意重装。如若缺少此文件则将是个安全漏洞哦。
    -WarningUntilDirRemoved=全部的安全警告(仅管理员用户可见普通用户看不到的)只要该漏洞一直存在且你并未修复漏洞,那么安全警告将持续呈现给您。(或在设置->其他设置中将参数MAIN_REMOVE_INSTALL_WARNING添加进去)。
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=即使源和目标之间金额不同进行警告,禁用。启用此功能时要小心。
    -WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
    +WarningUsingThisBoxSlowDown=警告,使用此框会严重减慢显示该框的所有页面。
     WarningClickToDialUserSetupNotComplete=即将完工的网络电话资料信息设置 (详见用户资料信息页的网络电话).
    -WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=Feature disabled when display setup is optimized for blind person or text browsers.
    -WarningPaymentDateLowerThanInvoiceDate=Payment date (%s) is earlier than invoice date (%s) for invoice %s.
    -WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Please use more filters or set the constant %s to a higher limit.
    -WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
    -WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
    -WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    -WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    +WarningFeatureDisabledWithDisplayOptimizedForBlindNoJs=当为盲人或文本浏览器优化显示设置时,功能被禁用。
    +WarningPaymentDateLowerThanInvoiceDate=发票%s的付款日期(%s)早于发票日期(%s)。
    +WarningTooManyDataPleaseUseMoreFilters=数据太多(超过%s行)。请使用更多过滤器或将常数%s设置为更高的限制。
    +WarningSomeLinesWithNullHourlyRate=一些用户记录了一些时间,而他们的小时费率没有定义。使用的值为每小时0 %s,但这可能导致错误的估计时间。
    +WarningYourLoginWasModifiedPleaseLogin=您的登录已被修改。出于安全考虑,您必须在下一步操作之前使用新登录名登录。
    +WarningAnEntryAlreadyExistForTransKey=此语言的翻译密钥已存在条目
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
    +WarningDateOfLineMustBeInExpenseReportRange=警告,行日期不在费用报表范围内
    diff --git a/htdocs/langs/zh_CN/interventions.lang b/htdocs/langs/zh_CN/interventions.lang
    index a15d4a532c1..60a3f3c6707 100644
    --- a/htdocs/langs/zh_CN/interventions.lang
    +++ b/htdocs/langs/zh_CN/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=干预
     InterventionCard=干预卡
     NewIntervention=新的干预
     AddIntervention=创建干预
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=干预列表
     ActionsOnFicheInter=干预活动
     LastInterventions=最新 %s干预
    @@ -15,18 +16,18 @@ ValidateIntervention=验证干预
     ModifyIntervention=变更干预
     DeleteInterventionLine=删除干预行
     CloneIntervention=复制干预
    -ConfirmDeleteIntervention=Are you sure you want to delete this intervention?
    -ConfirmValidateIntervention=Are you sure you want to validate this intervention under name <b>%s</b>?
    -ConfirmModifyIntervention=Are you sure you want to modify this intervention?
    -ConfirmDeleteInterventionLine=Are you sure you want to delete this intervention line?
    -ConfirmCloneIntervention=Are you sure you want to clone this intervention?
    +ConfirmDeleteIntervention=您确定要删除此干预吗?
    +ConfirmValidateIntervention=您确定要在名称<b> %s </b>下批准此干预吗?
    +ConfirmModifyIntervention=您确定要修改此干预吗?
    +ConfirmDeleteInterventionLine=您确定要删除此干预线吗?
    +ConfirmCloneIntervention=您确定要克隆此干预吗?
     NameAndSignatureOfInternalContact=干预的签名和盖章::
     NameAndSignatureOfExternalContact=客户的签名和盖章::
     DocumentModelStandard=标准文档模板的干预
     InterventionCardsAndInterventionLines=干预和干预明细
     InterventionClassifyBilled=分类“帐单”
     InterventionClassifyUnBilled=归类 'Unbilled'
    -InterventionClassifyDone=Classify "Done"
    +InterventionClassifyDone=分类“完成”
     StatusInterInvoiced=帐单
     SendInterventionRef=提交的干预 %s
     SendInterventionByMail=通过邮件发送干预
    @@ -39,28 +40,28 @@ InterventionSentByEMail=干预 %s 通过电子邮件发送
     InterventionDeletedInDolibarr=干预 %s 已删除
     InterventionsArea=干预区
     DraftFichinter=干预草稿
    -LastModifiedInterventions= 最近变更的 %s 干预
    -FichinterToProcess=Interventions to process
    +LastModifiedInterventions=最近变更的 %s 干预
    +FichinterToProcess=要处理的干预措施
     ##### Types de contacts #####
     TypeContact_fichinter_external_CUSTOMER=随访客户联系
     # Modele numérotation
    -PrintProductsOnFichinter=Print also lines of type "product" (not only services) on intervention card
    +PrintProductsOnFichinter=在干预卡上也打印“产品”类型(不仅是服务)
     PrintProductsOnFichinterDetails=从订单生成干预
     UseServicesDurationOnFichinter=使用服务持续时间从订单生成干预
    -UseDurationOnFichinter=Hides the duration field for intervention records
    -UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
    +UseDurationOnFichinter=隐藏干预记录的持续时间字段
    +UseDateWithoutHourOnFichinter=隐藏干预记录的日期字段的小时和分钟
     InterventionStatistics=干预统计
    -NbOfinterventions=干预信息卡数量
    -NumberOfInterventionsByMonth=按月筛选干预信息卡数量(认证日期)
    -AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
    +AmountOfInteventionNotIncludedByDefault=默认情况下,干预金额不包括在利润中(在大多数情况下,时间表用于计算花费的时间)。将选项PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT添加到1到home-setup-other以包含它们。
     ##### Exports #####
    -InterId=Intervention id
    +InterId=干预身份
     InterRef=干预编号
    -InterDateCreation=Date creation intervention
    -InterDuration=Duration intervention
    -InterStatus=Status intervention
    -InterNote=Note intervention
    -InterLineId=Line id intervention
    -InterLineDate=Line date intervention
    -InterLineDuration=Line duration intervention
    -InterLineDesc=Line description intervention
    +InterDateCreation=日期创建干预
    +InterDuration=持续干预
    +InterStatus=现状干预
    +InterNote=注意干预
    +InterLineId=线路ID干预
    +InterLineDate=行日期干预
    +InterLineDuration=线路持续时间干预
    +InterLineDesc=线描述干预
    diff --git a/htdocs/langs/zh_CN/main.lang b/htdocs/langs/zh_CN/main.lang
    index 7d9a9c1c458..ba1e8061c04 100644
    --- a/htdocs/langs/zh_CN/main.lang
    +++ b/htdocs/langs/zh_CN/main.lang
    @@ -1,5 +1,5 @@
     # Dolibarr language file - Source file is en_US - main
    -DIRECTION=ltr
    +DIRECTION=升
     # Note for Chinese:
     # msungstdlight or cid0ct are for traditional Chinese (traditional does not render with Ubuntu pdf reader)
     # stsongstdlight or cid0cs are for simplified Chinese
    @@ -24,12 +24,12 @@ FormatDateHourSecShort=%Y/%m/%d %I:%M:%S %p
     FormatDateHourTextShort=%b %d, %Y, %I:%M %p
     FormatDateHourText=%B %d, %Y, %I:%M %p
     DatabaseConnection=数据库连接
    -NoTemplateDefined=No template available for this email type
    -AvailableVariables=Available substitution variables
    +NoTemplateDefined=此电子邮件类型没有可用的模板
    +AvailableVariables=可用的替代变量
     NoTranslation=没有翻译
     Translation=翻译
     NoRecordFound=空空如也——没有找到记录
    -NoRecordDeleted=No record deleted
    +NoRecordDeleted=未删除记录
     NotEnoughDataYet=数据不足
     NoError=没有错误
     Error=错误
    @@ -40,75 +40,75 @@ ErrorFileDoesNotExists=文件%s不存在
     ErrorFailedToOpenFile=无法打开文件%s
     ErrorCanNotCreateDir=无法创建目录 %s
     ErrorCanNotReadDir=无法读取目录 %s
    -ErrorConstantNotDefined=不是定义的参数%
    +ErrorConstantNotDefined=参数%s未定义
     ErrorUnknown=未知错误
     ErrorSQL=SQL错误
     ErrorLogoFileNotFound=徽标LOGO文件'%s'没有找到
    -ErrorGoToGlobalSetup=Go to 'Company/Organization' setup to fix this
    +ErrorGoToGlobalSetup=转到“公司/组织”设置以解决此问题
     ErrorGoToModuleSetup=前往模块设置来解决此
     ErrorFailedToSendMail=无法发送邮件(发件人=%s后,接收器=%s)的
     ErrorFileNotUploaded=文件没有上传。检查大小不超过允许的最大值,即在磁盘上的可用空间是可用和有没有这已经与in这个目录同名文件。
     ErrorInternalErrorDetected=检测到错误
     ErrorWrongHostParameter=错误的主机参数
    -ErrorYourCountryIsNotDefined=你的国家是没有定义。回到首页安装程序,编辑和后再次形成。
    -ErrorRecordIsUsedByChild=无法删除此记录。此记录至少使用子记录。
    +ErrorYourCountryIsNotDefined=Your country is not defined. Go to Home-Setup-Edit and post the form again.
    +ErrorRecordIsUsedByChild=Failed to delete this record. This record is used by at least one child record.
     ErrorWrongValue=错误的值
    -ErrorWrongValueForParameterX=错误的参数值之%
    -ErrorNoRequestInError=在错误的请求
    -ErrorServiceUnavailableTryLater=服务暂时无法使用。请稍后再试。
    -ErrorDuplicateField=在唯一的栏位中复制值
    -ErrorSomeErrorWereFoundRollbackIsDone=有些发现错误。我们回滚更改。
    -ErrorConfigParameterNotDefined=参数<b>%s</b>是没有定义的配置文件里面Dolibarr <b>conf.php。</b>
    -ErrorCantLoadUserFromDolibarrDatabase=在Dolibarr数据库<b>%s</b>无法找到用户账号。
    -ErrorNoVATRateDefinedForSellerCountry=错误,没有增值税税率确定为国家'%s'的。
    -ErrorNoSocialContributionForSellerCountry=错误, 这个国家未定义社会/财政税类型 '%s'.
    +ErrorWrongValueForParameterX=错误的参数值%s
    +ErrorNoRequestInError=无请求错误
    +ErrorServiceUnavailableTryLater=Service not available at the moment. Try again later.
    +ErrorDuplicateField=在唯一的栏位中使用了重复值
    +ErrorSomeErrorWereFoundRollbackIsDone=Some errors were found. Changes have been rolled back.
    +ErrorConfigParameterNotDefined=Parameter <b>%s</b> is not defined in Dolibarr config file <b>conf.php</b>.
    +ErrorCantLoadUserFromDolibarrDatabase=在数据库无法找到用户<b>%s</b>
    +ErrorNoVATRateDefinedForSellerCountry=错误,没有为国家'%s'设置增值税税率。
    +ErrorNoSocialContributionForSellerCountry=错误,没有为国家'%s'定义社会/财政税类型
     ErrorFailedToSaveFile=错误,无法保存文件。
    -ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of current one
    -MaxNbOfRecordPerPage=Max number of record per page
    -NotAuthorized=You are not authorized to do that.
    +ErrorCannotAddThisParentWarehouse=You are trying to add a parent warehouse which is already a child of a current one
    +MaxNbOfRecordPerPage=Max number of records per page
    +NotAuthorized=您无权执行此操作。
     SetDate=设置日期
     SelectDate=请选择日期
     SeeAlso=另请参阅 %s
     SeeHere=看这里
     ClickHere=点击这里
    -Here=Here
    +Here=这里
     Apply=申请
     BackgroundColorByDefault=默认的背景颜色
    -FileRenamed=The file was successfully renamed
    -FileGenerated=The file was successfully generated
    -FileSaved=The file was successfully saved
    +FileRenamed=该文件已成功重命名
    +FileGenerated=该文件已成功生成
    +FileSaved=该文件已成功保存
     FileUploaded=文件上传成功
    -FileTransferComplete=File(s) was uploaded successfully
    -FilesDeleted=File(s) successfully deleted
    -FileWasNotUploaded=一个文件被选中的附件,但还没有上传。点击“附加文件”为这一点。
    -NbOfEntries=铌条目
    +FileTransferComplete=File(s) uploaded successfully
    +FilesDeleted=文件已成功删除
    +FileWasNotUploaded=一个文件被选中的附件,但还没有上传。点击“附加文件”上传。
    +NbOfEntries=No. of entries
     GoToWikiHelpPage=阅读在线帮助文档 (需要访问外网)
     GoToHelpPage=阅读帮助
     RecordSaved=记录已保存
     RecordDeleted=记录已删除
     LevelOfFeature=权限级别
     NotDefined=未定义
    -DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr authentication mode is set to <b>%s</b> in configuration file <b>conf.php</b>.<br>This means that the password database is external to Dolibarr, so changing this field may have no effect.
    +DolibarrInHttpAuthenticationSoPasswordUseless=Dolibarr身份验证模式在配置文件<b> conf.php </ b>中设置为<b> %s </ b>。<br>这意味着密码数据库在Dolibarr外部,因此更改此字段可能无效。
     Administrator=管理员
     Undefined=未定义
     PasswordForgotten=忘记密码?
    -NoAccount=No account?
    +NoAccount=没有账号?
     SeeAbove=见上文
    -HomeArea=首页信息状态区
    +HomeArea=主页
     LastConnexion=最后上线时间
     PreviousConnexion=上次上线时间
     PreviousValue=上一个值
     ConnectedOnMultiCompany=对实体连接
     ConnectedSince=当前连接状态
     AuthenticationMode=认证模式
    -RequestedUrl=Requested URL
    +RequestedUrl=请求的URL
     DatabaseTypeManager=数据库类型管理员
     RequestLastAccessInError=最后数据库访问请求错误
     ReturnCodeLastAccessInError=返回最后数据库访问请求错误代码
     InformationLastAccessInError=最后数据库访问请求错误信息
     DolibarrHasDetectedError=Dolibarr检测到一个技术性错误
    -YouCanSetOptionDolibarrMainProdToZero=You can read log file or set option $dolibarr_main_prod to '0' in your config file to get more information.
    -InformationToHelpDiagnose=This information can be useful for diagnostic purposes (you can set option $dolibarr_main_prod to '1' to remove such notices)
    +YouCanSetOptionDolibarrMainProdToZero=您可以在配置文件中读取日志文件或将选项$ dolibarr_main_prod设置为“0”以获取更多信息。
    +InformationToHelpDiagnose=此信息可用于诊断目的(您可以将选项$ dolibarr_main_prod设置为'1'以删除此类通知)
     MoreInformation=更多信息
     TechnicalInformation=技术信息
     TechnicalID=技术ID
    @@ -123,7 +123,7 @@ yes=是
     Yes=是
     no=没有
     No=否
    -All=All
    +All=所有
     Home=主页
     Help=帮助
     OnlineHelp=在线帮助
    @@ -133,15 +133,16 @@ Always=总是
     Never=从来没有
     Under=下
     Period=期间
    -PeriodEndDate=结束日期的期限
    -SelectedPeriod=Selected period
    -PreviousPeriod=Previous period
    +PeriodEndDate=期限的结束日期
    +SelectedPeriod=选定期间
    +PreviousPeriod=上一期间
     Activate=激活
     Activated=启用
     Closed=关闭
     Closed2=关闭
    -NotClosed=Not closed
    +NotClosed=没有关闭
     Enabled=生效
    +Enable=生效
     Deprecated=已过时
     Disable=禁用
     Disabled=禁用
    @@ -153,30 +154,30 @@ Update=更新
     Close=关闭
     CloseBox=将插件从你的看板中移除
     Confirm=确认
    -ConfirmSendCardByMail=Do you really want to send content of this card by mail to <b>%s</b>?
    +ConfirmSendCardByMail=Do you really want to send the content of this card by mail to <b>%s</b>?
     Delete=删除
     Remove=移除
    -Resiliate=Terminate
    +Resiliate=终止
     Cancel=取消
     Modify=变更
     Edit=编辑
     Validate=验证
     ValidateAndApprove=验证和同意
    -ToValidate=为了验证
    -NotValidated=Not validated
    +ToValidate=验证
    +NotValidated=未经验证
     Save=保存
     SaveAs=另存为
     TestConnection=测试连接
     ToClone=复制
     ConfirmClone=选取你想要复制的数据:
    -NoCloneOptionsSpecified=没有数据复制界定。
    +NoCloneOptionsSpecified=未定义可复制数据
     Of=的
     Go=下一步
     Run=运行
     CopyOf=复制
     Show=显示
    -Hide=Hide
    -ShowCardHere=广告单
    +Hide=隐藏
    +ShowCardHere=显示卡片
     Search=搜索
     SearchOf=搜索
     Valid=有效
    @@ -185,10 +186,10 @@ Disapprove=不同意
     ReOpen=重新开放
     Upload=发送文件
     ToLink=链接
    -Select=请选取
    +Select=选取
     Choose=选择
     Resize=调整大小
    -ResizeOrCrop=Resize or Crop
    +ResizeOrCrop=调整大小或裁剪
     Recenter=Recenter
     Author=操作者
     User=用户
    @@ -198,15 +199,15 @@ Groups=群组
     NoUserGroupDefined=未定义用户群组
     Password=密码
     PasswordRetype=重新输入您的密码
    -NoteSomeFeaturesAreDisabled=注意了注意了在这个Demo演示中很多功能/模块都是禁用的。
    +NoteSomeFeaturesAreDisabled=注意:在这个示范中很多功能/模块都是禁用的。
     Name=名称
     Person=人
     Parameter=参数
     Parameters=参数
     Value=值
     PersonalValue=自定义
    -NewObject=New %s
    -NewValue=新的价值
    +NewObject=新%s
    +NewValue=新值
     CurrentValue=当前值
     Code=编码
     Type=类型
    @@ -220,9 +221,9 @@ Info=日志
     Family=家庭
     Description=描述
     Designation=描述
    -Model=Doc template
    -DefaultModel=Default doc template
    -Action=活动
    +Model=文档模板
    +DefaultModel=默认文档模板
    +Action=事件
     About=关于
     Number=数字
     NumberByMonth=按月份数
    @@ -231,15 +232,15 @@ Numero=数字
     Limit=限制
     Limits=范围
     Logout=注销
    -NoLogoutProcessWithAuthMode=No applicative disconnect feature with authentication mode <b>%s</b>
    +NoLogoutProcessWithAuthMode=没有具有身份验证模式的应用程序断开连接功能<b> %s </ b>
     Connection=登陆
     Setup=设置
     Alert=生日提醒
     MenuWarnings=警告
     Previous=以前
    -Next=未来
    -Cards=牌
    -Card=信息
    +Next=下一个
    +Cards=信息卡
    +Card=信息卡
     Now=现在
     HourStart=开始时间
     Date=日期
    @@ -258,7 +259,7 @@ DateClosing=截止日期
     DateDue=截止日期
     DateValue=确认日期
     DateValueShort=确认日期
    -DateOperation=发生日期
    +DateOperation=操作日期
     DateOperationShort=操作日期
     DateLimit=限定日期
     DateRequest=申请日期
    @@ -267,35 +268,35 @@ DateBuild=报告生成日期
     DatePayment=付款日期
     DateApprove=批准日期
     DateApprove2=批准日期(二次批准)
    -RegistrationDate=Registration date
    +RegistrationDate=注册日期
     UserCreation=创建用户
     UserModification=修改用户
    -UserValidation=Validation user
    +UserValidation=批准用户
     UserCreationShort=创建用户
     UserModificationShort=修改用户
    -UserValidationShort=Valid. user
    +UserValidationShort=批准用户
     DurationYear=年
     DurationMonth=月
     DurationWeek=周
     DurationDay=天
    -DurationYears=岁
    -DurationMonths=个月
    +DurationYears=年
    +DurationMonths=月
     DurationWeeks=周
     DurationDays=天
     Year=年
     Month=月
     Week=周
    -WeekShort=星期
    +WeekShort=周
     Day=天
    -Hour=小时
    -Minute=分钟
    -Second=第二
    -Years=岁
    -Months=个月
    +Hour=时
    +Minute=分
    +Second=秒
    +Years=年
    +Months=月
     Days=天
     days=天
     Hours=时间
    -Minutes=纪要
    +Minutes=分钟
     Seconds=秒
     Weeks=星期
     Today=今日
    @@ -303,20 +304,20 @@ Yesterday=昨天
     Tomorrow=明天
     Morning=早上
     Afternoon=中午
    -Quadri=Quadri
    +Quadri=四
     MonthOfDay=本月的一天
    -HourShort=Ĥ
    -MinuteShort=mn
    +HourShort=时
    +MinuteShort=分
     Rate=税率
    -CurrencyRate=Currency conversion rate
    +CurrencyRate=汇率
     UseLocalTax=含税
     Bytes=B
     KiloBytes=KB
     MegaBytes=MB
     GigaBytes=GB
    -TeraBytes=TB级
    -UserAuthor=User of creation
    -UserModif=User of last update
    +TeraBytes=TB
    +UserAuthor=创建的用户
    +UserModif=更新的用户
     b=b.
     Kb=Kb
     Mb=兆
    @@ -324,35 +325,35 @@ Gb=千兆
     Tb=Tb
     Cut=剪切
     Copy=复制
    -Paste=糊
    +Paste=粘贴
     Default=默认
     DefaultValue=默认值
    -DefaultValues=默认值
    +DefaultValues=Default values/filters/sorting
     Price=价格
    -PriceCurrency=Price (currency)
    +PriceCurrency=价格(货币)
     UnitPrice=单价
    -UnitPriceHT=单位价格(净值)
    -UnitPriceHTCurrency=Unit price (net) (currency)
    +UnitPriceHT=单价(净值)
    +UnitPriceHTCurrency=单价(净值)(货币)
     UnitPriceTTC=单价
    -PriceU=向上
    -PriceUHT=不含税价格
    -PriceUHTCurrency=U.P (货币)
    -PriceUTTC=U.P. (inc. tax)
    +PriceU=单价
    +PriceUHT=单价(不含税)
    +PriceUHTCurrency=单价(货币)
    +PriceUTTC=单价(含税)
     Amount=金额
     AmountInvoice=发票金额
    -AmountInvoiced=Amount invoiced
    +AmountInvoiced=发票金额
     AmountPayment=付款金额
     AmountHTShort=金额(净值)
     AmountTTCShort=金额(含税)
     AmountHT=金额(税后)
     AmountTTC=金额(含税)
     AmountVAT=增值税总金额
    -MulticurrencyAlreadyPaid=Already payed, original currency
    -MulticurrencyRemainderToPay=Remain to pay, original currency
    -MulticurrencyPaymentAmount=Payment amount, original currency
    -MulticurrencyAmountHT=Amount (net of tax), original currency
    -MulticurrencyAmountTTC=Amount (inc. of tax), original currency
    -MulticurrencyAmountVAT=Amount tax, original currency
    +MulticurrencyAlreadyPaid=Already paid, original currency
    +MulticurrencyRemainderToPay=保持支付,原始货币
    +MulticurrencyPaymentAmount=付款金额,原始货币
    +MulticurrencyAmountHT=金额(税后净额),原始货币
    +MulticurrencyAmountTTC=金额(包括税),原始货币
    +MulticurrencyAmountVAT=金额税,原始货币
     AmountLT1=税额2
     AmountLT2=税额3
     AmountLT1ES=RE 额
    @@ -360,7 +361,7 @@ AmountLT2ES=IRPF 额
     AmountTotal=总金额
     AmountAverage=平均金额
     PriceQtyMinHT=价格数量分钟。 (税后)
    -PriceQtyMinHTCurrency=Price quantity min. (net of tax) (currency)
    +PriceQtyMinHTCurrency=价格数量最小。 (扣除税款)(货币)
     Percentage=百分比
     Total=总计
     SubTotal=小计
    @@ -373,39 +374,39 @@ Totalforthispage=本页总计
     TotalTTC=共计(含税)
     TotalTTCToYourCredit=共计(含税)你的信用
     TotalVAT=增值税总金额
    -TotalVATIN=Total IGST
    +TotalVATIN=IGST总数
     TotalLT1=总税2
     TotalLT2=总税项3
     TotalLT1ES=共有再生能源
     TotalLT2ES=共有IRPF
    -TotalLT1IN=Total CGST
    -TotalLT2IN=Total SGST
    +TotalLT1IN=总CGST
    +TotalLT2IN=SGST总计
     HT=不含税
     TTC=含增值税
    -INCVATONLY=Inc. VAT
    -INCT=Inc. all taxes
    -VAT=增值税
    +INCVATONLY=含增值税
    +INCT=所有税收
    +VAT=销售税
     VATIN=IGST
     VATs=销售税
    -VATINs=IGST taxes
    -LT1=Sales tax 2
    -LT1Type=Sales tax 2 type
    -LT2=Sales tax 3
    -LT2Type=Sales tax 3 type
    -LT1ES=稀土
    +VATINs=IGST税
    +LT1=销售税2
    +LT1Type=销售税2种
    +LT2=销售税3
    +LT2Type=销售税3种类型
    +LT1ES=编号
     LT2ES=IRPF
     LT1IN=CGST
     LT2IN=SGST
     VATRate=增值税率
    -VATCode=Tax Rate code
    -VATNPR=Tax Rate NPR
    -DefaultTaxRate=Default tax rate
    +VATCode=税率代码
    +VATNPR=税率NPR
    +DefaultTaxRate=默认税率
     Average=平均
     Sum=总和
     Delta=增量
    -RemainToPay=Remain to pay
    -Module=Module/Application
    -Modules=Modules/Applications
    +RemainToPay=继续付钱
    +Module=模块/应用程序
    +Modules=模块/应用
     Option=选项
     List=列表
     FullList=全部列表
    @@ -416,7 +417,7 @@ Favorite=收藏夹
     ShortInfo=信息
     Ref=编号
     ExternalRef=外部编号
    -RefSupplier=Ref. vendor
    +RefSupplier=供应商编号
     RefPayment=付款编号
     CommercialProposalsShort=报价单
     Comment=说明
    @@ -426,56 +427,56 @@ ActionsToDoShort=未完成
     ActionsDoneShort=完成
     ActionNotApplicable=不适用
     ActionRunningNotStarted=等待
    -ActionRunningShort=In progress
    +ActionRunningShort=进行中
     ActionDoneShort=已完成
    -ActionUncomplete=未完成
    -LatestLinkedEvents=Latest %s linked events
    -CompanyFoundation=Company/Organization
    -Accountant=Accountant
    +ActionUncomplete=Incomplete
    +LatestLinkedEvents=最新的%s链接事件
    +CompanyFoundation=公司/组织
    +Accountant=会计
     ContactsForCompany=合伙人联系方式
     ContactsAddressesForCompany=这个合伙人联系人/地址
     AddressesForCompany=这个合伙人的地址
    -ActionsOnCompany=关于这个合伙人的动作
    -ActionsOnMember=此会员相关活动
    -ActionsOnProduct=Events about this product
    +ActionsOnCompany=有关此合伙人的事件
    +ActionsOnMember=有关此会员的事件
    +ActionsOnProduct=有关此产品的事件
     NActionsLate=逾期 %s
     ToDo=未完成
    -Completed=Completed
    -Running=In progress
    +Completed=已完成
    +Running=进行中
     RequestAlreadyDone=申请已记录
     Filter=筛选
    -FilterOnInto=Search criteria '<strong>%s</strong>' into fields %s
    +FilterOnInto=将条件“<strong> %s </strong>”搜索到字段%s
     RemoveFilter=清除筛选
     ChartGenerated=图表生成
    -ChartNotGenerated=图不会生成
    +ChartNotGenerated=图表不生成
     GeneratedOn=生成于%s
     Generate=生成
     Duration=为期
     TotalDuration=总时间
     Summary=摘要
    -DolibarrStateBoard=Database statistics
    -DolibarrWorkBoard=Open items dashboard
    -NoOpenedElementToProcess=No opened element to process
    +DolibarrStateBoard=Database Statistics
    +DolibarrWorkBoard=Pending Items
    +NoOpenedElementToProcess=没有要打开的元素
     Available=可用的
    -NotYetAvailable=尚未提供
    +NotYetAvailable=不可用的
     NotAvailable=不可用
     Categories=标签/分类
     Category=标签/分类
     By=由
    -From=From
    +From=从
     to=至
     and=和
     or=或
     Other=其他
     Others=其他
    -OtherInformations=其它信息
    +OtherInformations=Other information
     Quantity=数量
     Qty=数量
    -ChangedBy=改变
    -ApprovedBy=被批准
    -ApprovedBy2=被批准(二次核准)
    -Approved=批准
    -Refused=拒绝
    +ChangedBy=改变者:
    +ApprovedBy=批准者:
    +ApprovedBy2=批准(二次核准)者:
    +Approved=已获批准
    +Refused=已被拒绝
     ReCalculate=重新计算
     ResultKo=失败
     Reporting=报告
    @@ -483,19 +484,19 @@ Reportings=报告
     Draft=草稿
     Drafts=草稿
     StatusInterInvoiced=
    -Validated=验证
    +Validated=批准
     Opened=打开
     New=新建
     Discount=折扣
     Unknown=未知
     General=一般
    -Size=大小
    -OriginalSize=Original size
    +Size=尺寸
    +OriginalSize=原始尺寸
     Received=已收
     Paid=已支付
     Topic=主题
    -ByCompanies=由合伙人
    -ByUsers=By user
    +ByCompanies=按合伙人
    +ByUsers=按用户
     Links=链接
     Link=链接
     Rejects=拒绝
    @@ -504,20 +505,20 @@ NextStep=下一步
     Datas=数据
     None=无
     NoneF=无
    -NoneOrSeveral=None or several
    +NoneOrSeveral=没有或几个
     Late=逾期
    -LateDesc=延迟的定义假如一条记录逾期或者取决于你的配置设定。请向管理员询问并从首页菜单->设置->警告菜单下修改相应设置。
    -NoItemLate=No late item
    +LateDesc=The delay to define if a record is late or not depends on your setup. Ask your admin to change the delay from menu Home - Setup - Alerts.
    +NoItemLate=没有迟到的项目
     Photo=图片
     Photos=图片
     AddPhoto=添加图片
     DeletePicture=删除图片
     ConfirmDeletePicture=确认删除图片吗?
     Login=登陆
    -LoginEmail=Login (email)
    -LoginOrEmail=Login or Email
    +LoginEmail=登录(电子邮件)
    +LoginOrEmail=登录或电邮
     CurrentLogin=当前登陆
    -EnterLoginDetail=Enter login details
    +EnterLoginDetail=输入登录详情
     January=一月
     February=二月
     March=三月
    @@ -530,18 +531,6 @@ September=九月
     October=十月
     November=十一月
     December=十二月
    -JanuaryMin=1
    -FebruaryMin=2
    -MarchMin=3
    -AprilMin=4
    -MayMin=5
    -JuneMin=6
    -JulyMin=7
    -AugustMin=8
    -SeptemberMin=9
    -OctoberMin=10
    -NovemberMin=11
    -DecemberMin=12
     Month01=一月
     Month02=二月
     Month03=三月
    @@ -566,50 +555,50 @@ MonthShort09=9
     MonthShort10=10
     MonthShort11=11
     MonthShort12=12
    -MonthVeryShort01=J
    -MonthVeryShort02=F
    -MonthVeryShort03=M
    -MonthVeryShort04=A
    -MonthVeryShort05=M
    -MonthVeryShort06=J
    -MonthVeryShort07=J
    -MonthVeryShort08=A
    -MonthVeryShort09=S
    -MonthVeryShort10=O
    -MonthVeryShort11=N
    -MonthVeryShort12=D
    +MonthVeryShort01=1
    +MonthVeryShort02=2
    +MonthVeryShort03=3
    +MonthVeryShort04=4
    +MonthVeryShort05=5
    +MonthVeryShort06=6
    +MonthVeryShort07=7
    +MonthVeryShort08=8
    +MonthVeryShort09=9
    +MonthVeryShort10=10
    +MonthVeryShort11=11
    +MonthVeryShort12=12
     AttachedFiles=附件
    -JoinMainDoc=Join main document
    -DateFormatYYYYMM=为YYYY - MM
    -DateFormatYYYYMMDD=为YYYY - MM - dd的
    -DateFormatYYYYMMDDHHMM=为YYYY - MM - dd的小时:不锈钢
    +JoinMainDoc=加入主要文件
    +DateFormatYYYYMM=YYYY-MM
    +DateFormatYYYYMMDD=YYYY-MM-DD
    +DateFormatYYYYMMDDHHMM=YYYY-MM-DD HH:SS
     ReportName=报告名称
    -ReportPeriod=报告期内
    +ReportPeriod=报告期间
     ReportDescription=描述
     Report=报告
     Keyword=关键字
    -Origin=Origin
    -Legend=传说
    +Origin=原始
    +Legend=图例
     Fill=填
     Reset=复位
     File=文件
     Files=文件
     NotAllowed=不允许
     ReadPermissionNotAllowed=读取权限不允许
    -AmountInCurrency= %s 金额
    +AmountInCurrency= %s 货币的金额
     Example=举例
     Examples=范例
     NoExample=没有示例
     FindBug=报告错误
    -NbOfThirdParties=合伙人数量值
    -NbOfLines=线数
    -NbOfObjects=数对象
    -NbOfObjectReferers=关联料号
    +NbOfThirdParties=合伙人数量
    +NbOfLines=行数
    +NbOfObjects=对象数
    +NbOfObjectReferers=关联数量
     Referers=关联物料
     TotalQuantity=总数量
     DateFromTo=从%s到%s
    -DateFrom=第05期从%
    -DateUntil=直到%s的
    +DateFrom=从%s
    +DateUntil=直到%s
     Check=检查
     Uncheck=不检查
     Internal=内部
    @@ -619,119 +608,123 @@ Externals=外部
     Warning=警告
     Warnings=警告
     BuildDoc=生成Doc文件
    -Entity=实体
    +Entity=环境
     Entities=实体
    -CustomerPreview=客户预览
    -SupplierPreview=Vendor preview
    -ShowCustomerPreview=显示客户预览
    -ShowSupplierPreview=Show vendor preview
    -RefCustomer=客户编号
    +CustomerPreview=顾客预览
    +SupplierPreview=供应商预览
    +ShowCustomerPreview=显示顾客预览
    +ShowSupplierPreview=显示供应商预览
    +RefCustomer=顾客编号
     Currency=货币
    -InfoAdmin=信息管理员
    +InfoAdmin=管理员信息
     Undo=复原
     Redo=重做
     ExpandAll=全部展开
     UndoExpandAll=全部折叠
    -SeeAll=See all
    +SeeAll=查看全部
     Reason=原因
     FeatureNotYetSupported=功能尚不支持
     CloseWindow=关闭窗口
     Response=反应
     Priority=优先级
     SendByMail=通过电子邮件发送
    -MailSentBy=通过电子邮件发送
    +MailSentBy=电子邮件发送者:
     TextUsedInTheMessageBody=电子邮件正文
     SendAcknowledgementByMail=发送确认邮件
     SendMail=发送电子邮件
     EMail=E-mail
     NoEMail=没有电子邮件
     Email=电子邮件
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=没有手机号码
    -Owner=用户
    +Owner=拥有者
     FollowingConstantsWillBeSubstituted=以下常量将与相应的值代替。
     Refresh=刷新
     BackToList=返回列表
     GoBack=回去
    -CanBeModifiedIfOk=可以变更,如果有效
    -CanBeModifiedIfKo=可以进行变更,如果不有效
    -ValueIsValid=值是有效的
    -ValueIsNotValid=Value is not valid
    -RecordCreatedSuccessfully=Record created successfully
    +CanBeModifiedIfOk=经批准可修改
    +CanBeModifiedIfKo=不经批准也可修改
    +ValueIsValid=值有效
    +ValueIsNotValid=值无效
    +RecordCreatedSuccessfully=记录创建成功
     RecordModifiedSuccessfully=记录变更成功
    -RecordsModified=%s record modified
    -RecordsDeleted=%s record deleted
    +RecordsModified=%s记录已修改
    +RecordsDeleted=%s记录已删除
     AutomaticCode=自动代码
     FeatureDisabled=功能禁用
     MoveBox=拖动插件
     Offered=提供
     NotEnoughPermissions=您没有这个动作的权限
    -SessionName=会议名称
    +SessionName=会话名称
     Method=方法
     Receive=收到
    -CompleteOrNoMoreReceptionExpected=Complete or nothing more expected
    -ExpectedValue=Expected Value
    +CompleteOrNoMoreReceptionExpected=完成或没有更多的预期
    +ExpectedValue=期望值
     CurrentValue=当前值
     PartialWoman=局部的
     TotalWoman=总计
     NeverReceived=从未收到
    -Canceled=取消
    -YouCanChangeValuesForThisListFromDictionarySetup=You can change values for this list from menu Setup - Dictionaries
    -YouCanChangeValuesForThisListFrom=You can change values for this list from menu %s
    -YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record into module setup
    +Canceled=已取消
    +YouCanChangeValuesForThisListFromDictionarySetup=您可以从菜单Setup  -  Dictionaries更改此列表的值
    +YouCanChangeValuesForThisListFrom=您可以从菜单%s更改此列表的值
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=颜色
     Documents=链接的文件
     Documents2=文件
     UploadDisabled=上传禁用
     MenuAccountancy=会计
     MenuECM=文件
    -MenuAWStats=awstats的
    +MenuAWStats=AWStats
     MenuMembers=会员
     MenuAgendaGoogle=谷歌议程
     ThisLimitIsDefinedInSetup=来自Dolibarr本身的大小限制(菜单:home-setup-security)为:%s Kb,而PHP的限制为: %s Kb
     NoFileFound=这个目录没保存有文档
     CurrentUserLanguage=当前语言
     CurrentTheme=当前主题样式
    -CurrentMenuManager=当前后台管理菜单主题样式
    +CurrentMenuManager=当前菜单管理器
     Browser=浏览器
    -Layout=Layout
    -Screen=屏幕分辨率
    -DisabledModules=禁用模块
    +Layout=布局
    +Screen=屏幕
    +DisabledModules=已禁用模块
     For=为
    -ForCustomer=对于客户
    +ForCustomer=对于顾客
     Signature=签名
    -DateOfSignature=Date of signature
    +DateOfSignature=签字日期
     HidePassword=显示命令的隐藏密码
     UnHidePassword=真正拿出明确的密码命令
    -Root=Root
    +Root=根
     Informations=信息
     Page=页面
     Notes=备注
     AddNewLine=添加新行
     AddFile=添加文件
    -FreeZone=Not a predefined product/service
    -FreeLineOfType=Not a predefined entry of type
    +FreeZone=不是预定义的产品/服务
    +FreeLineOfType=不是预定义的类型条目
     CloneMainAttributes=复制项目含主属性
     PDFMerge=PDF合并
     Merge=合并
    -DocumentModelStandardPDF=Standard PDF template
    -PrintContentArea=打印中间大区域中显示的文字内容
    +DocumentModelStandardPDF=标准PDF模板
    +PrintContentArea=显示打印页面,用来打印主要内容区域
     MenuManager=菜单管理器
    -WarningYouAreInMaintenanceMode=警告,你是在维护模式,因此,目前只有登陆<b>%s</b>才被允许使用应用。
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=系统错误
    -CoreErrorMessage=Sorry, an error occurred. Contact your system administrator to check the logs or disable $dolibarr_main_prod=1 to get more information.
    +CoreErrorMessage=对不起,发生了错误。请与您的系统管理员联系以检查日志或禁用$ dolibarr_main_prod = 1以获取更多信息。
     CreditCard=信用卡
     ValidatePayment=确认付款
    -CreditOrDebitCard=Credit or debit card
    -FieldsWithAreMandatory=与<b>%或学科</b>是强制性
    -FieldsWithIsForPublic= 公开显示<b>%s</b> 域的成员列表。如果你不想要这个,检查“公共”框。
    -AccordingToGeoIPDatabase=(根据geoip的转换)
    -Line=线
    +CreditOrDebitCard=信用卡或借记卡
    +FieldsWithAreMandatory=字段<b>%s</b>是强制性的
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
    +Line=行
     NotSupported=不支持
     RequiredField=必填字段
     Result=结果
     ToTest=测试
     ValidateBefore=卡在使用之前必须经过验证此功能
     Visibility=性质
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=私人
     Hidden=隐蔽
     Resources=资源
    @@ -741,7 +734,7 @@ Before=前
     After=后
     IPAddress=IP地址
     Frequency=频率
    -IM=IM
    +IM=即时通讯
     NewAttribute=新建属性
     AttributeCode=属性代码
     URLPhoto=照片/徽标的URL
    @@ -750,6 +743,7 @@ LinkTo=链接到
     LinkToProposal=链接到报价
     LinkToOrder=链接到订单
     LinkToInvoice=链接到发票
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=链接到供应商订单
     LinkToSupplierProposal=链接到供应商报价
     LinkToSupplierInvoice=链接到供应商发票
    @@ -758,54 +752,55 @@ LinkToIntervention=链接到干预
     CreateDraft=创建草稿
     SetToDraft=返回草稿
     ClickToEdit=单击“编辑”
    -EditWithEditor=Edit with CKEditor
    -EditWithTextEditor=Edit with Text editor
    -EditHTMLSource=Edit HTML Source
    +ClickToRefresh=Click to refresh
    +EditWithEditor=使用CKEditor编辑
    +EditWithTextEditor=用文本编辑器编辑
    +EditHTMLSource=编辑HTML源
     ObjectDeleted=删除对象%s
     ByCountry=按国家
    -ByTown=由镇
    +ByTown=按城镇
     ByDate=按日期
     ByMonthYear=按月/年
    -ByYear=在今年
    -ByMonth=按月份
    -ByDay=白天
    +ByYear=按年
    +ByMonth=按月
    +ByDay=按天
     BySalesRepresentative=按销售代表
    -LinkedToSpecificUsers=链接到一个特定的用户
    +LinkedToSpecificUsers=链接到指定的用户联系人
     NoResults=没有结果
    -AdminTools=管理员工具
    +AdminTools=Admin Tools
     SystemTools=系统工具
     ModulesSystemTools=模块工具
     Test=测试
     Element=元素
     NoPhotoYet=还没有图片
     Dashboard=看板
    -MyDashboard=个人看板
    +MyDashboard=My Dashboard
     Deductible=可抵扣
     from=从
     toward=往
     Access=访问
    -SelectAction=Select action
    -SelectTargetUser=Select target user/employee
    +SelectAction=选择行动
    +SelectTargetUser=选择目标用户/员工
     HelpCopyToClipboard=按快捷键 Ctrl+C 复制
    -SaveUploadedFileWithMask=Save file on server with name "<strong>%s</strong>" (otherwise "%s")
    +SaveUploadedFileWithMask=将文件保存在服务器上,名称为“<strong> %s </strong>”(否则为“%s”)
     OriginFileName=原始文件名
     SetDemandReason=设置源
     SetBankAccount=定义银行账户
    -AccountCurrency=Account currency
    +AccountCurrency=账户币种
     ViewPrivateNote=查看备注
     XMoreLines=%s 明细(s) 隐藏
    -ShowMoreLines=Show more/less lines
    -PublicUrl=公网URL
    -AddBox=添加选项框
    -SelectElementAndClick=Select an element and click %s
    +ShowMoreLines=显示更多/更少的行
    +PublicUrl=公开网址
    +AddBox=添加信息框
    +SelectElementAndClick=选择一个元素,然后单击%s
     PrintFile=打印文件 %s
    -ShowTransaction=Show entry on bank account
    +ShowTransaction=在银行帐户条目
     ShowIntervention=显示干预
     ShowContract=查看合同
    -GoIntoSetupToChangeLogo=点击菜单 主页 -> 设置 -> 公司 来修改LOGO或 主页 -> 设置 -> 显示菜单隐藏它。
    +GoIntoSetupToChangeLogo=Go to Home - Setup - Company to change logo or go to Home - Setup - Display to hide.
     Deny=否认
     Denied=否认
    -ListOf=List of %s
    +ListOf=列表%s
     ListOfTemplates=模板列表
     Gender=性别
     Genderman=男人
    @@ -813,64 +808,73 @@ Genderwoman=女人
     ViewList=列表视图
     Mandatory=强制性
     Hello=你好
    -GoodBye=GoodBye
    +GoodBye=再见
     Sincerely=诚恳地
     DeleteLine=删除行
    -ConfirmDeleteLine=Are you sure you want to delete this line?
    -NoPDFAvailableForDocGenAmongChecked=No PDF were available for the document generation among checked record
    -TooManyRecordForMassAction=Too many record selected for mass action. The action is restricted to a list of %s record.
    -NoRecordSelected=No record selected
    +ConfirmDeleteLine=您确定要删除此行吗?
    +NoPDFAvailableForDocGenAmongChecked=在已检查记录中没有PDF可用于生成文档
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
    +NoRecordSelected=未选定记录
     MassFilesArea=批量动作生成文件区
     ShowTempMassFilesArea=显示批量动作生成文件区
    -ConfirmMassDeletion=Bulk delete confirmation
    -ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record ?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=关联项目
     ClassifyBilled=归为已付款
    -ClassifyUnbilled=Classify unbilled
    +ClassifyUnbilled=分类未开单
     Progress=进展
     FrontOffice=前台
     BackOffice=后台
     View=查看
     Export=导出
     Exports=导出
    -ExportFilteredList=Export filtered list
    -ExportList=Export list
    +ExportFilteredList=导出筛选列表
    +ExportList=导出清单
     ExportOptions=导出选项
     Miscellaneous=各项设定
     Calendar=日历
    -GroupBy=Group by...
    -ViewFlatList=View flat list
    -RemoveString=Remove string '%s'
    -SomeTranslationAreUncomplete=Some languages may be partially translated or may contains errors. If you detect some, you can fix language files registering to <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>.
    -DirectDownloadLink=Direct download link (public/external)
    -DirectDownloadInternalLink=Direct download link (need to be logged and need permissions)
    -Download=Download
    -DownloadDocument=Download document
    -ActualizeCurrency=Update currency rate
    +GroupBy=分组:
    +ViewFlatList=查看全部列表
    +RemoveString=删除字符串'%s'
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
    +DirectDownloadLink=直接下载链接(公共/外部)
    +DirectDownloadInternalLink=直接下载链接(需要登录且需要权限)
    +Download=下载
    +DownloadDocument=下载文件
    +ActualizeCurrency=更新货币汇率
     Fiscalyear=财务年度
    -ModuleBuilder=Module Builder
    -SetMultiCurrencyCode=Set currency
    -BulkActions=Bulk actions
    -ClickToShowHelp=Click to show tooltip help
    +ModuleBuilder=模块工厂
    +SetMultiCurrencyCode=设置货币
    +BulkActions=批量行动
    +ClickToShowHelp=单击以显示工具提示帮助
     WebSite=网站
    -WebSites=Web sites
    -WebSiteAccounts=Web site accounts
    +WebSites=网站
    +WebSiteAccounts=网站帐户
     ExpenseReport=费用报表
     ExpenseReports=费用报表
     HR=HR
    -HRAndBank=HR and Bank
    -AutomaticallyCalculated=Automatically calculated
    -TitleSetToDraft=Go back to draft
    -ConfirmSetToDraft=Are you sure you want to go back to Draft status ?
    -ImportId=Import id
    +HRAndBank=人力资源和银行
    +AutomaticallyCalculated=自动计算
    +TitleSetToDraft=回到草案
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
    +ImportId=导入ID
     Events=事件
    -EMailTemplates=电子邮件模板
    -FileNotShared=File not shared to exernal public
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=项目
     Projects=项目
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=权限
    -LineNb=Line no.
    +LineNb=行号
     IncotermLabel=国际贸易术语解释通则
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=星期一
     Tuesday=星期二
    @@ -879,13 +883,13 @@ Thursday=星期四
     Friday=星期五
     Saturday=星期六
     Sunday=星期日
    -MondayMin=莫
    -TuesdayMin=涂
    -WednesdayMin=我们
    -ThursdayMin=日
    -FridayMin=神父
    -SaturdayMin=萨
    -SundayMin=苏
    +MondayMin=一
    +TuesdayMin=二
    +WednesdayMin=三
    +ThursdayMin=四
    +FridayMin=五
    +SaturdayMin=六
    +SundayMin=日
     Day1=星期一
     Day2=星期二
     Day3=星期三
    @@ -893,21 +897,21 @@ Day4=星期四
     Day5=星期五
     Day6=星期六
     Day0=星期日
    -ShortMonday=M
    -ShortTuesday=Ŧ
    -ShortWednesday=W
    -ShortThursday=Ŧ
    -ShortFriday=F
    -ShortSaturday=S
    -ShortSunday=S
    -SelectMailModel=Select an email template
    -SetRef=设置编号
    -Select2ResultFoundUseArrows=Some results found. Use arrows to select.
    +ShortMonday=一
    +ShortTuesday=二
    +ShortWednesday=三
    +ShortThursday=四
    +ShortFriday=五
    +ShortSaturday=六
    +ShortSunday=日
    +SelectMailModel=选择电子邮件模板
    +SetRef=套编号
    +Select2ResultFoundUseArrows=发现结果。使用箭头选择。
     Select2NotFound=空空如也——没有结果
    -Select2Enter=请输入至少
    +Select2Enter=输入
     Select2MoreCharacter=个以上的字符
     Select2MoreCharacters=个以上的字符
    -Select2MoreCharactersMore=<strong>Search syntax:</strong><br><kbd><strong> |</strong></kbd><kbd> OR</kbd> (a|b)<br><kbd><strong>*</strong></kbd><kbd> Any character</kbd> (a*b)<br><kbd><strong>^</strong></kbd><kbd> Start with</kbd> (^ab)<br><kbd><strong>$</strong></kbd><kbd> End with</kbd> (ab$)<br>
    +Select2MoreCharactersMore=<strong>搜索语法:</strong> <br> <kbd> <strong> | </strong> </kbd> <kbd>或</kbd>(a|b)<br> <kbd> <strong> * </strong> </kbd> <kbd>任何字符</kbd>(a * b)<br> <kbd> <strong> ^ </strong> </kbd> <kbd>以(^ ab)开头</kbd> <br> <kbd> <strong> $ </strong> </kbd> 以<kbd>(ab $)结尾<br>
     Select2LoadingMoreResults=正在加载更多结果...
     Select2SearchInProgress=正在搜索...
     SearchIntoThirdparties=合伙人
    @@ -918,33 +922,34 @@ SearchIntoProductsOrServices=产品或服务
     SearchIntoProjects=项目
     SearchIntoTasks=任务
     SearchIntoCustomerInvoices=客户发票
    -SearchIntoSupplierInvoices=Vendor invoices
    +SearchIntoSupplierInvoices=供应商发票
     SearchIntoCustomerOrders=客户订单
    -SearchIntoSupplierOrders=Purchase orders
    +SearchIntoSupplierOrders=订单
     SearchIntoCustomerProposals=客户报价
    -SearchIntoSupplierProposals=Vendor proposals
    +SearchIntoSupplierProposals=供应商提案
     SearchIntoInterventions=干预
     SearchIntoContracts=合同
     SearchIntoCustomerShipments=客户运输
     SearchIntoExpenseReports=费用报表
    -SearchIntoLeaves=请假
    +SearchIntoLeaves=Leave
     CommentLink=说明
    -NbComments=Number of comments
    -CommentPage=Comments space
    -CommentAdded=Comment added
    -CommentDeleted=Comment deleted
    +NbComments=评论数量
    +CommentPage=评论空间
    +CommentAdded=评论补充
    +CommentDeleted=评论已删除
     Everybody=全体同仁
    -PayedBy=Payed by
    -PayedTo=Payed to
    -Monthly=Monthly
    -Quarterly=Quarterly
    -Annual=Annual
    -Local=Local
    -Remote=Remote
    -LocalAndRemote=Local and Remote
    -KeyboardShortcut=Keyboard shortcut
    +PayedBy=付款人
    +PayedTo=Paid to
    +Monthly=月度
    +Quarterly=季度
    +Annual=全年
    +Local=本地
    +Remote=远程
    +LocalAndRemote=本地和远程
    +KeyboardShortcut=快捷键
     AssignedTo=分配给
    -Deletedraft=Delete draft
    -ConfirmMassDraftDeletion=Draft Bulk delete confirmation
    -FileSharedViaALink=File shared via a link
    -
    +Deletedraft=删除草稿
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
    +FileSharedViaALink=文件通过链接共享
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/zh_CN/other.lang b/htdocs/langs/zh_CN/other.lang
    index a764575a79a..902a45c8510 100644
    --- a/htdocs/langs/zh_CN/other.lang
    +++ b/htdocs/langs/zh_CN/other.lang
    @@ -3,37 +3,34 @@ SecurityCode=验证码
     NumberingShort=N°
     Tools=工具
     TMenuTools=工具
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=生日
     BirthdayDate=生日
     DateToBirth=生日
     BirthdayAlertOn=生日提醒活跃
     BirthdayAlertOff=生日提醒无效
    -TransKey=Translation of the key TransKey
    -MonthOfInvoice=Month (number 1-12) of invoice date
    -TextMonthOfInvoice=Month (text) of invoice date
    -PreviousMonthOfInvoice=Previous month (number 1-12) of invoice date
    -TextPreviousMonthOfInvoice=Previous month (text) of invoice date
    -NextMonthOfInvoice=Following month (number 1-12) of invoice date
    -TextNextMonthOfInvoice=Following month (text) of invoice date
    -ZipFileGeneratedInto=Zip file generated into <b>%s</b>.
    -DocFileGeneratedInto=Doc file generated into <b>%s</b>.
    -JumpToLogin=Disconnected. Go to login page...
    -MessageForm=Message on online payment form
    +TransKey=关键TransKey的翻译
    +MonthOfInvoice=发票日期的月份(编号1-12)
    +TextMonthOfInvoice=发票日期的月份(文本)
    +PreviousMonthOfInvoice=发票日期的上个月(编号1-12)
    +TextPreviousMonthOfInvoice=发票日期的上个月(文本)
    +NextMonthOfInvoice=发票日期的下个月(编号1-12)
    +TextNextMonthOfInvoice=发票日期的月份(文本)
    +ZipFileGeneratedInto=Zip文件生成<b> %s </b>。
    +DocFileGeneratedInto=Doc文件生成<b> %s </b>。
    +JumpToLogin=断开。转到登录页面...
    +MessageForm=在线支付表格上的消息
     MessageOK=讯息验证支付返回页面
     MessageKO=取消支付返回页面的讯息
    -ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +ContentOfDirectoryIsNotEmpty=该目录的内容不为空。
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
    -YearOfInvoice=Year of invoice date
    -PreviousYearOfInvoice=Previous year of invoice date
    -NextYearOfInvoice=Following year of invoice date
    -DateNextInvoiceBeforeGen=Date of next invoice (before generation)
    -DateNextInvoiceAfterGen=Date of next invoice (after generation)
    +YearOfInvoice=发票日期年份
    +PreviousYearOfInvoice=上一年的发票日期
    +NextYearOfInvoice=发票日期后一年
    +DateNextInvoiceBeforeGen=下一张发票的日期(发电前)
    +DateNextInvoiceAfterGen=下一张发票的日期(发电后)
     
    -Notify_FICHINTER_ADD_CONTACT=添加联络人到干预
    -Notify_FICHINTER_VALIDATE=干预验证
    -Notify_FICHINTER_SENTBYMAIL=通过邮件发送的干预
     Notify_ORDER_VALIDATE=验证客户订单
     Notify_ORDER_SENTBYMAIL=通过邮件发送的客户订单
     Notify_ORDER_SUPPLIER_SENTBYMAIL=通过邮件发送的供应商的订单
    @@ -41,66 +38,72 @@ Notify_ORDER_SUPPLIER_VALIDATE=供应商订单记录
     Notify_ORDER_SUPPLIER_APPROVE=供应商为了批准
     Notify_ORDER_SUPPLIER_REFUSE=供应商订单被拒绝
     Notify_PROPAL_VALIDATE=验证客户的建议
    -Notify_PROPAL_CLOSE_SIGNED=客户允许关闭已签署
    -Notify_PROPAL_CLOSE_REFUSED=客户允许关闭已拒绝
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=通过邮件发送的商业报价
     Notify_WITHDRAW_TRANSMIT=传输撤军
     Notify_WITHDRAW_CREDIT=信贷撤离
     Notify_WITHDRAW_EMIT=执行撤离
    -Notify_COMPANY_CREATE=合伙人已创建
    -Notify_COMPANY_SENTBYMAIL=从合伙人信息卡发邮件
    +Notify_COMPANY_CREATE=合作方已创建
    +Notify_COMPANY_SENTBYMAIL=从合作方信息卡发邮件
     Notify_BILL_VALIDATE=客户发票已验证
     Notify_BILL_UNVALIDATE=未经验证客户发票
    -Notify_BILL_PAYED=客户发票已支付
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=客户发票已取消
     Notify_BILL_SENTBYMAIL=通过邮件发送的客户发票
     Notify_BILL_SUPPLIER_VALIDATE=供应商发票验证
    -Notify_BILL_SUPPLIER_PAYED=供应商发票已支付
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=通过邮件发送的供应商发票
     Notify_BILL_SUPPLIER_CANCELED=取消供应商发票
     Notify_CONTRACT_VALIDATE=合同验证
     Notify_FICHEINTER_VALIDATE=干预验证
    +Notify_FICHINTER_ADD_CONTACT=添加联络人到干预
    +Notify_FICHINTER_SENTBYMAIL=通过邮件发送的干预
     Notify_SHIPPING_VALIDATE=送货验证
     Notify_SHIPPING_SENTBYMAIL=通过电子邮件发送送货信息资料
     Notify_MEMBER_VALIDATE=会员验证
     Notify_MEMBER_MODIFY=会员变更
     Notify_MEMBER_SUBSCRIPTION=会员订阅
    -Notify_MEMBER_RESILIATE=Member terminated
    +Notify_MEMBER_RESILIATE=会员终止
     Notify_MEMBER_DELETE=会员删除
     Notify_PROJECT_CREATE=项目创建
     Notify_TASK_CREATE=创建任务
     Notify_TASK_MODIFY=任务变更
     Notify_TASK_DELETE=删除任务
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=参见模块设置 %s
     NbOfAttachedFiles=所附文件数/文件
     TotalSizeOfAttachedFiles=所附文件/文档的总大小
     MaxSize=最大尺寸
     AttachANewFile=添加一个新附件
     LinkedObject=链接对象
    -NbOfActiveNotifications=通知数量(收到邮件数量)
    -PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
    -PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    -DemoDesc=Dolibarr is a compact ERP/CRM supporting several business modules. A demo showcasing all modules makes no sense as this scenario never occurs (several hundred available). So, several demo profiles are available.
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
    +PredefinedMailTest=__(你好)__\n这是发送到__EMAIL__的测试邮件。\n这两条线由回车分隔。\n\n__USER_SIGNATURE__
    +PredefinedMailTestHtml=__(你好)__\n这是<b>测试</ b>邮件(单词test必须以粗体显示)。<br>这两行用回车符分隔。<br> <br> __USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentThirdparty=__(你好)__\n\n\n__(此致)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentUser=__(你好)__\n\n\n__(此致)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentLink=如果尚未完成,您可以点击下面的链接进行付款。\n\n%s\n\n
    +DemoDesc=Dolibarr是一个支持多个业务模块的紧凑型ERP / CRM。展示所有模块的演示没有任何意义,因为这种情况永远不会发生(几百个可用)。因此,有几个演示配置文件可用。
     ChooseYourDemoProfil=选择最适合您所需的演示配置文件…
    -ChooseYourDemoProfilMore=...or build your own profile<br>(manual module selection)
    +ChooseYourDemoProfilMore=...或建立自己的个人资料<br>(手动模块选择)
     DemoFundation=基础会员管理
     DemoFundation2=管理成员及银行账户的基础
    -DemoCompanyServiceOnly=Company or freelance selling service only
    +DemoCompanyServiceOnly=公司或自由销售服务
     DemoCompanyShopWithCashDesk=管理与现金办公桌店
    -DemoCompanyProductAndStocks=Company selling products with a shop
    -DemoCompanyAll=Company with multiple activities (all main modules)
    +DemoCompanyProductAndStocks=公司与一家商店销售产品
    +DemoCompanyAll=公司有多项活动(所有主要模块)
     CreatedBy=创建者 %s
     ModifiedBy=修改者 %s
     ValidatedBy=由%验证s
    @@ -165,31 +168,32 @@ SizeUnitinch=英寸
     SizeUnitfoot=脚
     SizeUnitpoint=点
     BugTracker=bug跟踪系统
    -SendNewPasswordDesc=This form allows you to request a new password. It will be sent to your email address.<br>Change will become effective once you click on the confirmation link in the email.<br>Check your inbox.
    +SendNewPasswordDesc=此表单允许您请求新密码。它将被发送到您的电子邮件地址。<br>一旦您点击电子邮件中的确认链接,更改将生效。<br>检查您的收件箱。
     BackToLoginPage=返回登陆界面
     AuthenticationDoesNotAllowSendNewPassword=认证模式为<b>%s。</b> <br>在这种模式下,Dolibarr不能知道,也不更改密码。 <br>联系您的系统管理员,如果您想更改您的密码。
     EnableGDLibraryDesc=这个选项安装或启用PHP的GD支持库。
    -ProfIdShortDesc=<b>Prof Id %s</b> 取决于合伙人的国别。 <br>例如,对于<b>%s</b>, 它的代码是<b>%s</b>.。
    +ProfIdShortDesc=<b>Prof Id %s</b> 取决于合作方的国别。 <br>例如,对于<b>%s</b>, 它的代码是<b>%s</b>.。
     DolibarrDemo=Dolibarr的ERP / CRM的演示
    -StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    -NumberOfProposals=Number of proposals
    -NumberOfCustomerOrders=Number of customer orders
    -NumberOfCustomerInvoices=Number of customer invoices
    -NumberOfSupplierProposals=Number of supplier proposals
    -NumberOfSupplierOrders=Number of supplier orders
    -NumberOfSupplierInvoices=Number of supplier invoices
    -NumberOfUnitsProposals=Number of units on proposals
    -NumberOfUnitsCustomerOrders=Number of units on customer orders
    -NumberOfUnitsCustomerInvoices=Number of units on customer invoices
    -NumberOfUnitsSupplierProposals=Number of units on supplier proposals
    -NumberOfUnitsSupplierOrders=Number of units on supplier orders
    -NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=你有一个新干预%s任务。
    +StatsByNumberOfUnits=产品/服务数量总和的统计
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
    +NumberOfProposals=提案数量
    +NumberOfCustomerOrders=客户订单数量
    +NumberOfCustomerInvoices=客户发票数量
    +NumberOfSupplierProposals=供应商提案数量
    +NumberOfSupplierOrders=供应商订单数量
    +NumberOfSupplierInvoices=供应商发票数量
    +NumberOfUnitsProposals=提案上的单位数量
    +NumberOfUnitsCustomerOrders=客户订单上的单位数量
    +NumberOfUnitsCustomerInvoices=客户发票上的单位数量
    +NumberOfUnitsSupplierProposals=供应商提案上的单位数量
    +NumberOfUnitsSupplierOrders=供应商订单上的单位数量
    +NumberOfUnitsSupplierInvoices=供应商发票上的单位数量
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=干预%s已被验证。
     EMailTextInvoiceValidated=发票%s已被确认。
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=这项建议%s已经验证。
    -EMailTextProposalClosedSigned=The proposal %s has been closed signed.
    +EMailTextProposalClosedSigned=提案%s已经签署。
     EMailTextOrderValidated=该命令%s已被验证。
     EMailTextOrderApproved=该命令%s已被批准。
     EMailTextOrderValidatedBy=这个订单 %s 由记录人员 %s 进行录入.
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=该命令 %s已被 %s的批准
     EMailTextOrderRefused=该命令%s已被拒绝。
     EMailTextOrderRefusedBy=该命令%s已经拒绝%s的
     EMailTextExpeditionValidated=该送货 %s 已验证。
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=输入数据集
     DolibarrNotification=自动通知
     ResizeDesc=输入新的高度新的宽度<b>或</b> 。比率将维持在调整大小...
    @@ -204,7 +212,7 @@ NewLength=新宽度
     NewHeight=新高度
     NewSizeAfterCropping=新的尺寸裁剪后
     DefineNewAreaToPick=定义图像的新领域挑选(图像左侧单击然后拖动,直到到达对面角落)
    -CurrentInformationOnImage=对当前图像信息
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=图像编辑器
     YouReceiveMailBecauseOfNotification=您收到此消息,因为您的电子邮件已被添加到列表的目标是特定的事件通知到%%的S软件第
     YouReceiveMailBecauseOfNotification2=此事件是:
    @@ -217,9 +225,9 @@ StartUpload=开始上传
     CancelUpload=取消上传
     FileIsTooBig=文件过大
     PleaseBePatient=请耐心等待...
    -NewPassword=New password
    -ResetPassword=Reset password
    -RequestToResetPasswordReceived=A request to change your password has been received.
    +NewPassword=新密码
    +ResetPassword=重设密码
    +RequestToResetPasswordReceived=已收到更改密码的请求。
     NewKeyIs=你的新登陆码如上
     NewKeyWillBe=你的新登陆码将会是
     ClickHereToGoTo=点击这里 %s
    @@ -228,19 +236,23 @@ ForgetIfNothing=如果不想改密码,直接忽略这个邮件,你的密码
     IfAmountHigherThan=如果数额高于 <strong>%s</strong>
     SourcesRepository=源库
     Chart=图表
    -PassEncoding=Password encoding
    -PermissionsAdd=Permissions added
    -PermissionsDelete=Permissions removed
    -YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</strong> chars
    -YourPasswordHasBeenReset=Your password has been reset successfully
    -ApplicantIpAddress=IP address of applicant
    -SMSSentTo=SMS sent to %s
    +PassEncoding=密码编码
    +PermissionsAdd=权限已添加
    +PermissionsDelete=权限已删除
    +YourPasswordMustHaveAtLeastXChars=您的密码必须至少包含<strong> %s </strong>字符
    +YourPasswordHasBeenReset=您的密码已成功重置
    +ApplicantIpAddress=申请人的IP地址
    +SMSSentTo=短信发送到%s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=导出区
     AvailableFormats=可用的格式
     LibraryUsed=使用的资料库
    -LibraryVersion=Library version
    +LibraryVersion=图书馆版
     ExportableDatas=导出的数据
     NoExportableData=没有导出的数据(导出加载的数据,或丢失的权限没有模块)
     ##### External sites #####
    @@ -249,4 +261,4 @@ WEBSITE_PAGEURL=页面URL地址
     WEBSITE_TITLE=标题
     WEBSITE_DESCRIPTION=描述
     WEBSITE_KEYWORDS=关键字
    -LinesToImport=Lines to import
    +LinesToImport=要导入的行
    diff --git a/htdocs/langs/zh_CN/products.lang b/htdocs/langs/zh_CN/products.lang
    index a29b4170ef1..2d9bf6054ab 100644
    --- a/htdocs/langs/zh_CN/products.lang
    +++ b/htdocs/langs/zh_CN/products.lang
    @@ -17,24 +17,24 @@ Reference=编号
     NewProduct=新建产品
     NewService=新建服务
     ProductVatMassChange=批量 VAT 变更
    -ProductVatMassChangeDesc=此页面可用来修改产品或服务的增值税(VAT)。警告,此操作将影响整个数据库。
    +ProductVatMassChangeDesc=This page can be used to modify a VAT rate defined on products or services from one value to another. Warning, this change is global/done on all database.
     MassBarcodeInit=批量条码初始化
    -MassBarcodeInitDesc=This page can be used to initialize a barcode on objects that does not have barcode defined. Check before that setup of module barcode is complete.
    -ProductAccountancyBuyCode=Accounting code (purchase)
    -ProductAccountancySellCode=Accounting code (sale)
    -ProductAccountancySellIntraCode=Accounting code (sale intra-community)
    -ProductAccountancySellExportCode=Accounting code (sale export)
    +MassBarcodeInitDesc=此页面可用于初始化未定义条形码的对象上的条形码。在模块条形码设置完成之前检查。
    +ProductAccountancyBuyCode=科目代码(采购)
    +ProductAccountancySellCode=科目代码(销售)
    +ProductAccountancySellIntraCode=Accounting code (sale intra-Community)
    +ProductAccountancySellExportCode=科目代码(销售导出)
     ProductOrService=产品或服务
     ProductsAndServices=产品和服务
     ProductsOrServices=产品或服务
    -ProductsPipeServices=Products | Services
    -ProductsOnSaleOnly=Products for sale only
    -ProductsOnPurchaseOnly=Products for purchase only
    -ProductsNotOnSell=Products not for sale and not for purchase
    -ProductsOnSellAndOnBuy=可销售的产品和可采购的产品
    -ServicesOnSaleOnly=Services for sale only
    -ServicesOnPurchaseOnly=Services for purchase only
    -ServicesNotOnSell=Services not for sale and not for purchase
    +ProductsPipeServices=产品|服务
    +ProductsOnSaleOnly=产品(仅出售)
    +ProductsOnPurchaseOnly=产品(仅购买)
    +ProductsNotOnSell=产品(不出售也不采购)
    +ProductsOnSellAndOnBuy=产品(可销售、可采购)
    +ServicesOnSaleOnly=服务(仅销售)
    +ServicesOnPurchaseOnly=服务(仅采购)
    +ServicesNotOnSell=服务(非出售也非采购)
     ServicesOnSellAndOnBuy=可销售的服务与可采购的服务
     LastModifiedProductsAndServices=最近变更的 %s 个产品/服务
     LastRecordedProducts=最近登记的 %s 产品
    @@ -64,19 +64,19 @@ AppliedPricesFrom=价格起始时间
     SellingPrice=售价
     SellingPriceHT=售价(税前)
     SellingPriceTTC=售价(税后)
    -CostPriceDescription=This price (net of tax) can be used to store the average amount this product cost to your company. It may be any price you calculate yourself, for example from the average buying price plus average production and distribution cost.
    -CostPriceUsage=This value could be used for margin calculation.
    +CostPriceDescription=此价格(税后净额)可用于存储此产品为贵公司带来的平均金额。它可能是您自己计算的任何价格,例如平均购买价格加上平均生产和分销成本。
    +CostPriceUsage=该值可用于保证金计算。
     SoldAmount=销售总额
     PurchasedAmount=采购总额
     NewPrice=新增价格
     MinPrice=最低销售价
    -EditSellingPriceLabel=Edit selling price label
    +EditSellingPriceLabel=编辑销售价格标签
     CantBeLessThanMinPrice=售价不能低于此产品的最低价格 (%s 税前)。此消息也可能在您输入折扣巨大时出现
     ContractStatusClosed=已禁用
     ErrorProductAlreadyExists=编号为 %s 的产品已存在。
     ErrorProductBadRefOrLabel=输入的编号或标签无效,请输入符合要求的编号或标签。
     ErrorProductClone=试图同时复制该产品或服务会有一个问题。
    -ErrorPriceCantBeLowerThanMinPrice=Error, price can't be lower than minimum price.
    +ErrorPriceCantBeLowerThanMinPrice=错误,价格不能低于最低价格。
     Suppliers=供应商
     SupplierRef=供应商产品编码
     ShowProduct=显示产品
    @@ -97,8 +97,8 @@ NoteNotVisibleOnBill=备注 (账单、报价...中不可见)
     ServiceLimitedDuration=如果产品是有限期的服务:
     MultiPricesAbility=每部分价格产品/服务(每位客户的一部分)
     MultiPricesNumPrices=价格个数
    -AssociatedProductsAbility=Activate the feature to manage virtual products
    -AssociatedProducts=虚拟产品
    +AssociatedProductsAbility=Activate virtual products (kits)
    +AssociatedProducts=Virtual products
     AssociatedProductsNumber=组成此虚拟产品的产品数量
     ParentProductsNumber=父级包装产品的数量
     ParentProducts=父产品
    @@ -108,7 +108,7 @@ KeywordFilter=关键词筛选
     CategoryFilter=分类筛选
     ProductToAddSearch=搜索要添加的产品
     NoMatchFound=未发现匹配项目
    -ListOfProductsServices=List of products/services
    +ListOfProductsServices=产品/服务清单
     ProductAssociationList=组成此虚拟产品/包装的产品/服务列表
     ProductParentList=由此产品组成的虚拟产品或服务
     ErrorAssociationIsFatherOfThis=所选产品中有当前产品的父级产品
    @@ -124,7 +124,7 @@ ConfirmDeleteProductLine=您确定要删除这行产品吗?
     ProductSpecial=Special
     QtyMin=起订量
     PriceQtyMin=最小数量价格 (w/o 折扣)
    -PriceQtyMinCurrency=Price for this min. qty (w/o discount) (currency)
    +PriceQtyMinCurrency=这分钟的价格。数量(没有折扣)(货币)
     VATRateForSupplierProduct=(产品/供应商)增值税税率
     DiscountQtyMin=默认数量折扣
     NoPriceDefinedForThisSupplier=此供应商/产品未设置价格/数量
    @@ -134,7 +134,7 @@ PredefinedServicesToSell=预定服务到销售
     PredefinedProductsAndServicesToSell=预定产品/服务到销售
     PredefinedProductsToPurchase=预定产品到采购
     PredefinedServicesToPurchase=预定服务到采购
    -PredefinedProductsAndServicesToPurchase=预定产品/服务到采购
    +PredefinedProductsAndServicesToPurchase=Predefined products/services to purchase
     NotPredefinedProducts=没有预定产品/服务
     GenerateThumb=生成 缩略图
     ServiceNb=服务 #%s
    @@ -144,11 +144,11 @@ ListServiceByPopularity=服务列表(按人气)
     Finished=成品
     RowMaterial=原料
     CloneProduct=复制产品或服务
    -ConfirmCloneProduct=Are you sure you want to clone product or service <b>%s</b>?
    -CloneContentProduct=复制产品/服务的所有主要信息
    -ClonePricesProduct=Clone prices
    +ConfirmCloneProduct=您确定要克隆产品或服务<b> %s </b>吗?
    +CloneContentProduct=Clone all main information of product/service
    +ClonePricesProduct=克隆价格
     CloneCompositionProduct=复制已打包包装的产品/服务
    -CloneCombinationsProduct=Clone product variants
    +CloneCombinationsProduct=复制产品变体
     ProductIsUsed=此产品已使用
     NewRefForClone=新产品/服务的编号
     SellingPrices=售价
    @@ -156,14 +156,14 @@ BuyingPrices=买价
     CustomerPrices=客户价格
     SuppliersPrices=供应商价格
     SuppliersPricesOfProductsOrServices=供应商价格(产品或服务)
    -CustomCode=Customs / Commodity / HS code
    +CustomCode=海关/商品/ HS编码
     CountryOrigin=产地国
     Nature=属性
     ShortLabel=标签别名
     Unit=单位
     p=u.
    -set=设置
    -se=设置
    +set=套
    +se=套
     second=秒
     s=s
     hour=小时
    @@ -181,39 +181,39 @@ m2=m²
     m3=m³
     liter=升
     l=L
    -unitP=Piece
    -unitSET=Set
    +unitP=片
    +unitSET=组
     unitS=第二
     unitH=小时
     unitD=天
    -unitKG=Kilogram
    -unitG=Gram
    -unitM=Meter
    -unitLM=Linear meter
    -unitM2=Square meter
    -unitM3=Cubic meter
    -unitL=Liter
    +unitKG=公斤
    +unitG=公克
    +unitM=仪表
    +unitLM=线性仪表
    +unitM2=平方米
    +unitM3=立方米
    +unitL=升
     ProductCodeModel=产品编号模板
     ServiceCodeModel=服务编号模板
     CurrentProductPrice=当前价格
     AlwaysUseNewPrice=始终使用产品/服务的当前价格
     AlwaysUseFixedPrice=使用固定价格
     PriceByQuantity=不同数量价格
    -DisablePriceByQty=Disable prices by quantity
    +DisablePriceByQty=按数量禁用价格
     PriceByQuantityRange=定量范围
     MultipriceRules=市场价格规则
    -UseMultipriceRules=Use price segment rules (defined into product module setup) to autocalculate prices of all other segment according to first segment
    +UseMultipriceRules=Use price segment rules (defined into product module setup) to auto calculate prices of all other segments according to first segment
     PercentVariationOver=%% 变化 %s
    -PercentDiscountOver=%% discount over %s
    -KeepEmptyForAutoCalculation=Keep empty to have this calculated automatically from weight or volume of products
    -VariantRefExample=Example: COL
    -VariantLabelExample=Example: Color
    +PercentDiscountOver=%%折扣超过%s
    +KeepEmptyForAutoCalculation=保持空白,以便根据产品的重量或体积自动计算
    +VariantRefExample=示例:COL
    +VariantLabelExample=示例:颜色
     ### composition fabrication
     Build=生产
    -ProductsMultiPrice=Products and prices for each price segment
    +ProductsMultiPrice=每个价格段的产品和价格
     ProductsOrServiceMultiPrice=客户价格(产品或服务,多价格)
     ProductSellByQuarterHT=产品税前季度营业额
    -ServiceSellByQuarterHT=Services turnover quarterly before tax
    +ServiceSellByQuarterHT=服务周转税前季度
     Quarter1=一季度
     Quarter2=二季度
     Quarter3=三季度
    @@ -221,30 +221,30 @@ Quarter4=四季度
     BarCodePrintsheet=条码打印
     PageToGenerateBarCodeSheets=有了这个工具,你就可以在标签纸上打印条码啦。首先选择标签纸的条码格式,输入条码参数值, 最后点击这个按钮 <b>%s</b>。
     NumberOfStickers=要打印的标签数量
    -PrintsheetForOneBarCode=Print several stickers for one barcode
    +PrintsheetForOneBarCode=为一个条形码打印几个贴纸
     BuildPageToPrint=生成打印页面
     FillBarCodeTypeAndValueManually=填入所要打印的条码类型和常规参数值
     FillBarCodeTypeAndValueFromProduct=将产品的条码值填入所要打印的条码类型和参数值
    -FillBarCodeTypeAndValueFromThirdParty=Fill barcode type and value from barcode of a third party.
    -DefinitionOfBarCodeForProductNotComplete=Definition of type or value of bar code not complete for product %s.
    -DefinitionOfBarCodeForThirdpartyNotComplete=Definition of type or value of bar code non complete for third party %s.
    +FillBarCodeTypeAndValueFromThirdParty=填写条形码类型和合作方条形码的值。
    +DefinitionOfBarCodeForProductNotComplete=产品%s的条形码类型或值的定义。
    +DefinitionOfBarCodeForThirdpartyNotComplete=合作方%s的条形码类型或值的定义。
     BarCodeDataForProduct=产品条码信息 %s :
    -BarCodeDataForThirdparty=Barcode information of third party %s :
    -ResetBarcodeForAllRecords=Define barcode value for all record (this will also reset barcode value already defined with new values)
    +BarCodeDataForThirdparty=合作方条码信息%s:
    +ResetBarcodeForAllRecords=为所有记录定义条形码值(这也将重置已使用新值定义的条形码值)
     PriceByCustomer=每位客户不同价格
     PriceCatalogue=每产品/服务单独销售价
    -PricingRule=销售价格规则
    +PricingRule=Rules for selling prices
     AddCustomerPrice=为客户添加价格
    -ForceUpdateChildPriceSoc=Set same price on customer subsidiaries
    -PriceByCustomerLog=Log of previous customer prices
    +ForceUpdateChildPriceSoc=在客户子公司设置相同的价格
    +PriceByCustomerLog=记录以前的客户价格
     MinimumPriceLimit=最低价格不允许低于 %s
     MinimumRecommendedPrice=推荐最低价格 : %s
     PriceExpressionEditor=价格表达式编辑器
     PriceExpressionSelected=选择价格表达式
     PriceExpressionEditorHelp1="price = 2 + 2" 或 "2 + 2" 价格设置. 使用 ; 单独的表达式
    -PriceExpressionEditorHelp2=You can access ExtraFields with variables like <b>#extrafield_myextrafieldkey#</b> and global variables with <b>#global_mycode#</b>
    -PriceExpressionEditorHelp3=In both product/service and supplier prices there are these variables available:<br><b>#tva_tx# #localtax1_tx# #localtax2_tx# #weight# #length# #surface# #price_min#</b>
    -PriceExpressionEditorHelp4=In product/service price only: <b>#supplier_min_price#</b><br>In supplier prices only: <b>#supplier_quantity# and #supplier_tva_tx#</b>
    +PriceExpressionEditorHelp2=您可以使用<b> #extrafield_myextrafieldkey#</b>等变量访问ExtraFields,使用<b> #global_mycode#</b>访问全局变量
    +PriceExpressionEditorHelp3=在产品/服务和供应商价格中都有以下变量:<br> <b>#tva_tx ## localtax1_tx ## localtax2_tx ## weight ## length ## surface##price_min#</b>
    +PriceExpressionEditorHelp4=仅限产品/服务价格:<b> #supplier_min_price#</b> <br>仅限供应商价格:<b>#supplier_quantity#和#supplier_tva_tx#</b>
     PriceExpressionEditorHelp5=全局变量值:
     PriceMode=价格模式
     PriceNumeric=数字
    @@ -252,85 +252,88 @@ DefaultPrice=默认价格
     ComposedProductIncDecStock=增加/减少父库存变化
     ComposedProduct=子产品
     MinSupplierPrice=最低购买价格
    -MinCustomerPrice=Minimum selling price
    +MinCustomerPrice=最低售价
     DynamicPriceConfiguration=动态价格配置
    -DynamicPriceDesc=On product card, with this module enabled, you should be able to set mathematic functions to calculate Customer or Supplier prices. Such function can use all mathematic operators, some constants and variables. You can set here the variables you want to be able to use and if the variable need an automatic update, the external URL to use to ask Dolibarr to update automaticaly the value.
    +DynamicPriceDesc=On product card, with this module enabled, you should be able to set mathematic functions to calculate Customer or Supplier prices. Such function can use all mathematic operators, some constants and variables. You can set here the variables you want to be able to use and if the variable need an automatic update, the external URL to use to ask Dolibarr to update the value automatically.
     AddVariable=添加变量
     AddUpdater=添加更新
     GlobalVariables=全局变量
     VariableToUpdate=变量到更新
     GlobalVariableUpdaters=全局变量更新
    -GlobalVariableUpdaterType0=JSON data
    -GlobalVariableUpdaterHelp0=Parses JSON data from specified URL, VALUE specifies the location of relevant value,
    -GlobalVariableUpdaterHelpFormat0=Format for request {"URL": "http://example.com/urlofjson", "VALUE": "array1,array2,targetvalue"}
    -GlobalVariableUpdaterType1=WebService data
    -GlobalVariableUpdaterHelp1=Parses WebService data from specified URL, NS specifies the namespace, VALUE specifies the location of relevant value, DATA should contain the data to send and METHOD is the calling WS method
    -GlobalVariableUpdaterHelpFormat1=Format for request is {"URL": "http://example.com/urlofws", "VALUE": "array,targetvalue", "NS": "http://example.com/urlofns", "METHOD": "myWSMethod", "DATA": {"your": "data", "to": "send"}}
    +GlobalVariableUpdaterType0=JSON数据
    +GlobalVariableUpdaterHelp0=从指定的URL解析JSON数据,VALUE指定相关值的位置,
    +GlobalVariableUpdaterHelpFormat0=请求格式{“URL”:“http://example.com/urlofjson”,“VALUE”:“array1,array2,targetvalue”}
    +GlobalVariableUpdaterType1=WebService数据
    +GlobalVariableUpdaterHelp1=从指定的URL解析WebService数据,NS指定命名空间,VALUE指定相关值的位置,DATA应包含要发送的数据,METHOD是调用WS方法
    +GlobalVariableUpdaterHelpFormat1=请求格式为{“URL”:“http://example.com/urlofws”,“VALUE”:“array,targetvalue”,“NS”:“http://example.com/urlofns”,“METHOD” :“myWSMethod”,“DATA”:{“your”:“data”,“to”:“send”}}
     UpdateInterval=升级更新间隔(分钟)
    -LastUpdated=Latest update
    +LastUpdated=最新更新
     CorrectlyUpdated=当前更新
     PropalMergePdfProductActualFile=文件添加到 PDF Azur are/is
     PropalMergePdfProductChooseFile=选择PDF文件
     IncludingProductWithTag=包括产品/服务标签
    -DefaultPriceRealPriceMayDependOnCustomer=Default price, real price may depend on customer
    -WarningSelectOneDocument=Please select at least one document
    +DefaultPriceRealPriceMayDependOnCustomer=默认价格,实际价格可能取决于客户
    +WarningSelectOneDocument=请至少选择一个文档
     DefaultUnitToShow=单位
     NbOfQtyInProposals=报价数
    -ClinkOnALinkOfColumn=Click on a link of column %s to get a detailed view...
    -ProductsOrServicesTranslations=Products or services translation
    +ClinkOnALinkOfColumn=单击%s列的链接以获取详细视图...
    +ProductsOrServicesTranslations=产品或服务翻译
     TranslatedLabel=翻译标签
     TranslatedDescription=翻译描述
     TranslatedNote=翻译备注
    -ProductWeight=Weight for 1 product
    -ProductVolume=产品 1 参数值
    +ProductWeight=1个产品的重量
    +ProductVolume=1个产品的体积
     WeightUnits=重量单位
     VolumeUnits=体积单位
     SizeUnits=大小单位
     DeleteProductBuyPrice=删除买价
     ConfirmDeleteProductBuyPrice=您确定想要删除买价吗?
    -SubProduct=Sub product
    -ProductSheet=Product sheet
    -ServiceSheet=Service sheet
    -PossibleValues=Possible values
    -GoOnMenuToCreateVairants=Go on menu %s - %s to prepare attribute variants (like colors, size, ...)
    -
    +SubProduct=子产品
    +ProductSheet=产品表
    +ServiceSheet=服务单
    +PossibleValues=可能的值
    +GoOnMenuToCreateVairants=继续菜单%s  -  %s准备属性变体(如颜色,大小......)
    +UseProductFournDesc=Use supplier descriptions of products in supplier documents
    +ProductSupplierDescription=Supplier description for the product
     #Attributes
    -VariantAttributes=Variant attributes
    -ProductAttributes=Variant attributes for products
    -ProductAttributeName=Variant attribute %s
    -ProductAttribute=Variant attribute
    -ProductAttributeDeleteDialog=Are you sure you want to delete this attribute? All values will be deleted
    -ProductAttributeValueDeleteDialog=Are you sure you want to delete the value "%s" with reference "%s" of this attribute?
    -ProductCombinationDeleteDialog=Are you sure want to delete the variant of the product "<strong>%s</strong>"?
    -ProductCombinationAlreadyUsed=There was an error while deleting the variant. Please check it is not being used in any object
    -ProductCombinations=Variants
    -PropagateVariant=Propagate variants
    -HideProductCombinations=Hide products variant in the products selector
    -ProductCombination=Variant
    -NewProductCombination=New variant
    -EditProductCombination=Editing variant
    -NewProductCombinations=New variants
    -EditProductCombinations=Editing variants
    -SelectCombination=Select combination
    -ProductCombinationGenerator=Variants generator
    -Features=Features
    -PriceImpact=Price impact
    -WeightImpact=Weight impact
    +VariantAttributes=变体属性
    +ProductAttributes=产品的变体属性
    +ProductAttributeName=变体属性%s
    +ProductAttribute=变体属性
    +ProductAttributeDeleteDialog=您确定要删除此属性吗?所有值都将被删除
    +ProductAttributeValueDeleteDialog=您确定要删除该属性的引用“%s”的值“%s”吗?
    +ProductCombinationDeleteDialog=您确定要删除产品“<strong> %s </strong>”的变体吗?
    +ProductCombinationAlreadyUsed=删除变体时出错。请检查它是否在任何物体中使用
    +ProductCombinations=变种
    +PropagateVariant=传播变种
    +HideProductCombinations=隐藏产品选择器中的产品变体
    +ProductCombination=变种
    +NewProductCombination=新变种
    +EditProductCombination=编辑变体
    +NewProductCombinations=新变种
    +EditProductCombinations=编辑变体
    +SelectCombination=选择组合
    +ProductCombinationGenerator=变种发电机
    +Features=特征
    +PriceImpact=价格影响
    +WeightImpact=重量影响
     NewProductAttribute=新建属性
    -NewProductAttributeValue=New attribute value
    -ErrorCreatingProductAttributeValue=There was an error while creating the attribute value. It could be because there is already an existing value with that reference
    -ProductCombinationGeneratorWarning=If you continue, before generating new variants, all previous ones will be DELETED. Already existing ones will be updated with the new values
    -TooMuchCombinationsWarning=Generating lots of variants may result in high CPU, memory usage and Dolibarr not able to create them. Enabling the option "%s" may help reduce memory usage.
    -DoNotRemovePreviousCombinations=Do not remove previous variants
    -UsePercentageVariations=Use percentage variations
    -PercentageVariation=Percentage variation
    -ErrorDeletingGeneratedProducts=There was an error while trying to delete existing product variants
    -NbOfDifferentValues=Nb of different values
    -NbProducts=Nb. of products
    -ParentProduct=Parent product
    -HideChildProducts=Hide variant products
    -ConfirmCloneProductCombinations=Would you like to copy all the product variants to the other parent product with the given reference?
    -CloneDestinationReference=Destination product reference
    -ErrorCopyProductCombinations=There was an error while copying the product variants
    -ErrorDestinationProductNotFound=Destination product not found
    -ErrorProductCombinationNotFound=Product variant not found
    +NewProductAttributeValue=新属性值
    +ErrorCreatingProductAttributeValue=创建属性值时出错。可能是因为该引用已存在现有值
    +ProductCombinationGeneratorWarning=如果继续,在生成新变体之前,所有先前的变体都将被删除。现有的将使用新值更新
    +TooMuchCombinationsWarning=生成大量变体可能会导致高CPU,内存使用率,Dolibarr无法创建它们。启用选项“%s”可能有助于减少内存使用量。
    +DoNotRemovePreviousCombinations=不要删除以前的变种
    +UsePercentageVariations=使用百分比变化
    +PercentageVariation=百分率变化
    +ErrorDeletingGeneratedProducts=尝试删除现有产品变体时出错
    +NbOfDifferentValues=No. of different values
    +NbProducts=No. of products
    +ParentProduct=父产品
    +HideChildProducts=隐藏变体产品
    +ShowChildProducts=Show variant products
    +NoEditVariants=Go to Parent product card and edit variants price impact in the variants tab
    +ConfirmCloneProductCombinations=您是否要将所有产品变体复制到具有给定参考的其他父产品?
    +CloneDestinationReference=目的地产品参考
    +ErrorCopyProductCombinations=复制产品变体时出错
    +ErrorDestinationProductNotFound=找不到目的地产品
    +ErrorProductCombinationNotFound=未找到产品变体
    diff --git a/htdocs/langs/zh_CN/projects.lang b/htdocs/langs/zh_CN/projects.lang
    index eec25ad997f..8b9db6c1f65 100644
    --- a/htdocs/langs/zh_CN/projects.lang
    +++ b/htdocs/langs/zh_CN/projects.lang
    @@ -7,40 +7,40 @@ ProjectsArea=项目区
     ProjectStatus=项目状态
     SharedProject=全体同仁
     PrivateProject=项目联系人
    -ProjectsImContactFor=Projects I'm explicitely a contact of
    -AllAllowedProjects=All project I can read (mine + public)
    +ProjectsImContactFor=项目我明确地是一个联系人
    +AllAllowedProjects=我能阅读的所有项目(我的+公共)
     AllProjects=所有项目
    -MyProjectsDesc=This view is limited to projects you are a contact for
    +MyProjectsDesc=此视图仅限于您作为联系人的项目
     ProjectsPublicDesc=这种观点提出了所有你被允许阅读的项目。
    -TasksOnProjectsPublicDesc=This view presents all tasks on projects you are allowed to read.
    +TasksOnProjectsPublicDesc=此视图显示允许您阅读的项目的所有任务。
     ProjectsPublicTaskDesc=这种观点提出的所有项目,您可阅读任务。
     ProjectsDesc=这种观点提出的所有项目(你的用户权限批准你认为一切)。
    -TasksOnProjectsDesc=This view presents all tasks on all projects (your user permissions grant you permission to view everything).
    -MyTasksDesc=This view is limited to projects or tasks you are a contact for
    -OnlyOpenedProject=Only open projects are visible (projects in draft or closed status are not visible).
    +TasksOnProjectsDesc=此视图显示所有项目的所有任务(您的用户权限授予您查看所有项目的权限)。
    +MyTasksDesc=此视图仅限于您作为联系人的项目或任务
    +OnlyOpenedProject=只能看到打开的项目(草稿或关闭状态的项目不可见)。
     ClosedProjectsAreHidden=已关闭的项目是不可见的。
     TasksPublicDesc=这种观点提出的所有项目,您可阅读任务。
     TasksDesc=这种观点提出的所有项目和任务(您的用户权限批准你认为一切)。
    -AllTaskVisibleButEditIfYouAreAssigned=All tasks for qualified projects are visible, but you can enter time only for task assigned to selected user. Assign task if you need to enter time on it.
    -OnlyYourTaskAreVisible=Only tasks assigned to you are visible. Assign task to yourself if it is not visible and you need to enter time on it.
    -ImportDatasetTasks=Tasks of projects
    -ProjectCategories=Project tags/categories
    +AllTaskVisibleButEditIfYouAreAssigned=合格项目的所有任务都是可见的,但您只能为分配给所选用户的任务输入时间。如果需要在其上输入时间,请分配任务。
    +OnlyYourTaskAreVisible=只有分配给您的任务才可见。如果任务不可见并且您需要在其上输入时间,则将任务分配给您自己。
    +ImportDatasetTasks=项目任务
    +ProjectCategories=项目标签/类别
     NewProject=新建项目
     AddProject=创建项目
     DeleteAProject=删除一个项目
     DeleteATask=删除任务
    -ConfirmDeleteAProject=Are you sure you want to delete this project?
    -ConfirmDeleteATask=Are you sure you want to delete this task?
    +ConfirmDeleteAProject=您确定要删除此项目吗?
    +ConfirmDeleteATask=您确定要删除此任务吗?
     OpenedProjects=打开项目
     OpenedTasks=打开任务
    -OpportunitiesStatusForOpenedProjects=按有效项目状态机会值
    -OpportunitiesStatusForProjects=按项目状态机会值
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=显示项目
     ShowTask=显示任务
     SetProject=设置项目
     NoProject=没有项目或拥有的定义
    -NbOfProjects=项目数量
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=花费的时间
     TimeSpentByYou=你花费的时间
     TimeSpentByUser=用户花费时间
    @@ -55,7 +55,7 @@ TasksOnOpenedProject=打开项目任务
     WorkloadNotDefined=工作量没有定义
     NewTimeSpent=所花费的时间
     MyTimeSpent=我的时间花
    -BillTime=Bill the time spent
    +BillTime=时间成本
     Tasks=任务
     Task=任务
     TaskDateStart=任务开始日期
    @@ -63,8 +63,8 @@ TaskDateEnd=任务结束日期
     TaskDescription=任务描述
     NewTask=新建任务
     AddTask=创建任务
    -AddTimeSpent=Create time spent
    -AddHereTimeSpentForDay=Add here time spent for this day/task
    +AddTimeSpent=创造时间成本
    +AddHereTimeSpentForDay=为天/任务添加时间成本
     Activity=活动
     Activities=任务/活动
     MyActivities=我的任务/活动
    @@ -75,82 +75,83 @@ ProgressDeclared=进度
     ProgressCalculated=计算进展
     Time=时间
     ListOfTasks=任务列表
    -GoToListOfTimeConsumed=Go to list of time consumed
    +GoToListOfTimeConsumed=转到消耗的时间列表
     GoToListOfTasks=任务列表
    -GoToGanttView=Go to Gantt view
    -GanttView=Gantt View
    -ListProposalsAssociatedProject=项目相关的商业报价列表
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=项目有关的合同列表
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=项目相关的干预措施列表
    -ListExpenseReportsAssociatedProject=项目相关费用报销列表
    -ListDonationsAssociatedProject=项目相关捐款列表
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=项目有关的行动列表
    +GoToGanttView=转到甘特视图
    +GanttView=甘特视图
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=项目相关任务时间列表
    -ListTaskTimeForTask=List of time consumed on task
    -ActivityOnProjectToday=Activity on project today
    -ActivityOnProjectYesterday=Activity on project yesterday
    +ListTaskTimeForTask=任务消耗的时间列表
    +ActivityOnProjectToday=今天的项目活动
    +ActivityOnProjectYesterday=昨天的项目活动
     ActivityOnProjectThisWeek=本周项目活动
     ActivityOnProjectThisMonth=本月项目活动
     ActivityOnProjectThisYear=今年项目活动
     ChildOfProjectTask=子项目/任务
    -ChildOfTask=Child of task
    -TaskHasChild=Task has child
    +ChildOfTask=子项目/任务
    +TaskHasChild=任务有子内容
     NotOwnerOfProject=不是所有者的私人项目
     AffectedTo=分配给
     CantRemoveProject=这个项目不能删除,因为它是由一些(其他对象引用的发票,订单或其他)。见参照资料标签。
     ValidateProject=验证谟
    -ConfirmValidateProject=Are you sure you want to validate this project?
    +ConfirmValidateProject=您确定要验证此项目吗?
     CloseAProject=关闭项目
    -ConfirmCloseAProject=Are you sure you want to close this project?
    -AlsoCloseAProject=Also close project (keep it open if you still need to follow production tasks on it)
    +ConfirmCloseAProject=您确定要关闭此项目吗?
    +AlsoCloseAProject=也关闭项目(如果你仍然需要关注生产任务,请保持打开状态)
     ReOpenAProject=打开的项目
    -ConfirmReOpenAProject=Are you sure you want to re-open this project?
    +ConfirmReOpenAProject=您确定要重新打开此项目吗?
     ProjectContact=项目联系人
    -TaskContact=Task contacts
    +TaskContact=任务联系人
     ActionsOnProject=项目活动
     YouAreNotContactOfProject=你是不是这个私人项目联系
    -UserIsNotContactOfProject=User is not a contact of this private project
    +UserIsNotContactOfProject=用户不是此私人项目的联系人
     DeleteATimeSpent=删除的时间
    -ConfirmDeleteATimeSpent=Are you sure you want to delete this time spent?
    +ConfirmDeleteATimeSpent=你确定要删除这段时间吗?
     DoNotShowMyTasksOnly=查看未分配给我的任务
     ShowMyTasksOnly=查看仅分配给我的任务
    -TaskRessourceLinks=Contacts task
    -ProjectsDedicatedToThisThirdParty=这个项目致力于合伙人
    +TaskRessourceLinks=联系人任务
    +ProjectsDedicatedToThisThirdParty=这个项目致力于合作方
     NoTasks=该项目没有任务
    -LinkedToAnotherCompany=链接到其他合伙人
    -TaskIsNotAssignedToUser=Task not assigned to user. Use button '<strong>%s</strong>' to assign task now.
    +LinkedToAnotherCompany=链接到其他合作方
    +TaskIsNotAssignedToUser=任务未分配给用户。使用按钮“<strong> %s </strong>”立即分配任务。
     ErrorTimeSpentIsEmpty=所花费的时间是空的
     ThisWillAlsoRemoveTasks=这一行动也将删除所有项目任务 (<b>%s</b> 任务的时刻) ,花全部的时间都投入。
    -IfNeedToUseOhterObjectKeepEmpty=如果某些对象(发票,订单,...),属于其他合伙人,必须与该项目以创建,保持这个空项目多的合伙人。
    +IfNeedToUseOhterObjectKeepEmpty=如果某些对象(发票,订单,...),属于其他合作方,必须与该项目以创建,保持这个空项目多的合作方。
     CloneProject=复制项目
     CloneTasks=复制任务
     CloneContacts=复制联系人
     CloneNotes=复制备注
     CloneProjectFiles=复制项目嵌入文件中
     CloneTaskFiles=复制任务(s) 嵌入到文件中 (假如任务(s) 已复制的话)
    -CloneMoveDate=Update project/tasks dates from now?
    -ConfirmCloneProject=Are you sure to clone this project?
    -ProjectReportDate=Change task dates according to new project start date
    +CloneMoveDate=从现在起更新项目/任务日期?
    +ConfirmCloneProject=你确定要克隆这个项目吗?
    +ProjectReportDate=根据新项目开始日期更改任务日期
     ErrorShiftTaskDate=根据新项目的开始日期,不可能的改变任务日期
     ProjectsAndTasksLines=项目和任务
     ProjectCreatedInDolibarr=项目 %s  创建
    -ProjectValidatedInDolibarr=Project %s validated
    -ProjectModifiedInDolibarr=Project %s modified
    +ProjectValidatedInDolibarr=项目%s已通过验证
    +ProjectModifiedInDolibarr=项目%s修改
     TaskCreatedInDolibarr=任务 %s 已创建
     TaskModifiedInDolibarr=任务 %s 已变更
     TaskDeletedInDolibarr=任务 %s 已删除
    -OpportunityStatus=机会状态
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=机会概率
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=机会数值
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=机会数值
     OpportunityAmountAverageShort=平均机会值
     OpportunityAmountWeigthedShort=加权机会值
    @@ -167,47 +168,50 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=捐助
     SelectElement=选择元素
     AddElement=链接到元素
     # Documents models
    -DocumentModelBeluga=项目模板链接到对象视图
    -DocumentModelBaleine=任务项目报告模板
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=计划的工作量
     PlannedWorkloadShort=工作量
     ProjectReferers=关联物料
     ProjectMustBeValidatedFirst=项目首先必须认证
    -FirstAddRessourceToAllocateTime=Assign a user resource to task to allocate time
    +FirstAddRessourceToAllocateTime=将用户资源分配给任务以分配时间
     InputPerDay=输入天数
     InputPerWeek=输入周数
    -InputDetail=Input detail
    -TimeAlreadyRecorded=This is time spent already recorded for this task/day and user %s
    +InputDetail=输入细节
    +TimeAlreadyRecorded=这是此任务/日和用户%s已记录的时间
     ProjectsWithThisUserAsContact=项目的用户作为联系人
     TasksWithThisUserAsContact=任务分配给这个用户
     ResourceNotAssignedToProject=未分配到项目
    -ResourceNotAssignedToTheTask=Not assigned to the task
    -TimeSpentBy=Time spent by
    -TasksAssignedTo=Tasks assigned to
    +ResourceNotAssignedToTheTask=未分配给任务
    +NoUserAssignedToTheProject=No users assigned to this project
    +TimeSpentBy=花费的时间
    +TasksAssignedTo=分配给的任务
     AssignTaskToMe=分配任务给自己
    -AssignTaskToUser=Assign task to %s
    -SelectTaskToAssign=Select task to assign...
    +AssignTaskToUser=将任务分配给%s
    +SelectTaskToAssign=选择要分配的任务...
     AssignTask=分配
     ProjectOverview=概览
    -ManageTasks=用项目跟进任务和工时
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=用项目跟进机会/线索
    -ProjectNbProjectByMonth=按月份筛选创建项目数
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=按月的机会加权数值
    -ProjectOpenedProjectByOppStatus=按机会状态打开项目/线索
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=统计项目/线索
    -TasksStatistics=Statistics on project/lead tasks
    -TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
    -IdTaskTime=Id task time
    -YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
    -OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=机会数值总计
    -OpportunityPonderatedAmount=机会加权数值
    -OpportunityPonderatedAmountDesc=机会加权数值机率
    +TasksStatistics=项目/主要任务的统计数据
    +TaskAssignedToEnterTime=任务已分配。应该可以输入此任务的时间。
    +IdTaskTime=Id任务时间
    +YouCanCompleteRef=如果你想用一些信息来完成参考(将它用作搜索过滤器),建议添加一个 - 字符来分隔它,这样自动编号仍然可以正常用于下一个项目。例如%s-ABC。您可能还希望将搜索键添加到标签中。但最佳做法可能是添加专用字段,也称为补充属性。
    +OpenedProjectsByThirdparties=由第三方开放项目
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=准客户
     OppStatusQUAL=授权
     OppStatusPROPO=报价
    @@ -216,15 +220,17 @@ OppStatusPENDING=待办
     OppStatusWON=赢得
     OppStatusLOST=失去
     Budget=预算
    -AllowToLinkFromOtherCompany=Allow to link project from other company<br><br><u>Supported values :</u><br>- Keep empty: Can link any project of the company (default)<br>- "all" : Can link any projects, even project of other companies<br>- A list of thirdparty id separated with commas : Can link all projects of these thirdparty defined (Example : 123,4795,53)<br>
    -LatestProjects=Latest %s projects
    -LatestModifiedProjects=Latest %s modified projects
    -OtherFilteredTasks=Other filtered tasks
    -NoAssignedTasks=No assigned tasks (assign project/tasks the current user from the top select box to enter time on it)
    +AllowToLinkFromOtherCompany=允许链接其他公司的项目<br> <br> <u>支持的值:</u><br>  - 保持空:可以链接公司的任何项目(默认)<br>  - “all”:可以链接任何项目,甚至其他公司的项目<br>  - 用逗号分隔的合作方ID列表:可以链接这些合作方定义的所有项目(例如:123,4795,53)<br>
    +LatestProjects=最新的%s项目
    +LatestModifiedProjects=最新的%s编辑过的项目
    +OtherFilteredTasks=其他过滤任务
    +NoAssignedTasks=没有分配任务(从顶部选择框分配当前用户的项目/任务以在其上输入时间)
     # Comments trans
    -AllowCommentOnTask=Allow user comments on tasks
    -AllowCommentOnProject=Allow user comments on projects
    -DontHavePermissionForCloseProject=You do not have permissions to close the project %s
    -DontHaveTheValidateStatus=The project %s must be open to be closed
    -RecordsClosed=%s project(s) closed
    -SendProjectRef=Information project %s
    +AllowCommentOnTask=允许用户对任务发表评论
    +AllowCommentOnProject=允许用户对项目发表评论
    +DontHavePermissionForCloseProject=您无权关闭项目%s
    +DontHaveTheValidateStatus=项目%s必须打开才能关闭
    +RecordsClosed=%s项目已结束
    +SendProjectRef=信息项目%s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/langs/zh_TW/admin.lang b/htdocs/langs/zh_TW/admin.lang
    index 81b5ae4ba7b..7ce8e26c0bc 100644
    --- a/htdocs/langs/zh_TW/admin.lang
    +++ b/htdocs/langs/zh_TW/admin.lang
    @@ -3,20 +3,20 @@ Foundation=基金會
     Version=版本
     Publisher=發佈者
     VersionProgram=版本計劃
    -VersionLastInstall=初始安裝版
    -VersionLastUpgrade=升級最新版本
    +VersionLastInstall=初始安裝版本
    +VersionLastUpgrade=最新版本升級
     VersionExperimental=實驗性
     VersionDevelopment=開發
     VersionUnknown=未知
     VersionRecommanded=推薦的
     FileCheck=檔案完整檢查器
    -FileCheckDesc=此工具可每一筆與官方檔案相互檢查檔案完整性及設定應用程式。也包含了一些設定值。你也可用此工具檢查檔案是否被駭客修改過。
    -FileIntegrityIsStrictlyConformedWithReference=檔案完整性符合參考值。
    -FileIntegrityIsOkButFilesWereAdded=檔案完整性已檢查過,但增加一些檔案。
    +FileCheckDesc=此工具允許您檢查檔案的完整性和應用程序的設置,將每個檔案與官方檔案進行比對。還有一些設置常量的值也會檢查。例如,您可以使用此工具來檢測某些檔案是否被黑客修改過。
    +FileIntegrityIsStrictlyConformedWithReference=檔案完整性嚴格符合參考。
    +FileIntegrityIsOkButFilesWereAdded=檔案完整性檢查已通過,但已添加一些新檔案。
     FileIntegritySomeFilesWereRemovedOrModified=檔案完整性檢查扶敗。有檔案被修改、移除或新增。
    -GlobalChecksum=Global checksum
    -MakeIntegrityAnalysisFrom=製作應用程式檔完整性分析來自
    -LocalSignature=嵌入本地簽名檔 (較不可靠)
    +GlobalChecksum=全域校驗
    +MakeIntegrityAnalysisFrom=製作應用程式檔案完整性分析來自
    +LocalSignature=嵌入式本地簽名(不太可靠)
     RemoteSignature=遠端簽名 (較可靠)
     FilesMissing=遺失檔案
     FilesUpdated=已上傳檔案
    @@ -24,20 +24,20 @@ FilesModified=已修改檔案
     FilesAdded=新增檔案
     FileCheckDolibarr=檢查應用程式檔案完整性
     AvailableOnlyOnPackagedVersions=當安裝來自官方的應用程式時本地檔案完整檢查才可用。
    -XmlNotFound=沒有應用程式 xml 的完整性檔
    +XmlNotFound=未找到應用程式 xml 的完整性檔案
     SessionId=連線階段ID
     SessionSaveHandler=儲存連線階段處理程序
     SessionSavePath=存儲連線階段位置
     PurgeSessions=清除的連線會議
     ConfirmPurgeSessions=您確定要清除所有的連線階段?這會導致離線(除您之外)。
    -NoSessionListWithThisHandler=在您的 PHP 中設定儲存連線階段處理程序中是不允許列出全部執行中的連線。
    +NoSessionListWithThisHandler=Save session handler configured in your PHP does not allow listing all running sessions.
     LockNewSessions=鎖定新的連線
    -ConfirmLockNewSessions=您確定要限制任何新 Dolibarr 連接到自己。之後只有用戶<b>%s</b>能夠連線。
    +ConfirmLockNewSessions=Are you sure you want to restrict any new Dolibarr connection to yourself? Only user <b>%s</b> will be able to connect after that.
     UnlockNewSessions=移除連線鎖定
     YourSession=您的連線階段
    -Sessions=用戶連線階段
    +Sessions=Users sessions
     WebUserGroup=網頁伺服器的用戶/組
    -NoSessionFound=您的 PHP 似乎不容許列出啟動的連線。用於保存連線<b>(%s)</b>資料夾的可能受到保護(例如,由作業系統的權限,或由 PHP 指令的 open_basedir)。
    +NoSessionFound=Your PHP seems to not allow listing of active sessions. The directory used to save sessions (<b>%s</b>) might be protected (For example, by OS permissions or by PHP directive open_basedir).
     DBStoringCharset=儲存資料的資料庫字集
     DBSortingCharset=資料排序以資料庫字集
     ClientCharset=客戶端字集
    @@ -50,7 +50,7 @@ ExternalUser=外部用戶
     InternalUsers=內部用戶們
     ExternalUsers=外部用戶們
     GUISetup=顯示設定
    -SetupArea=設定區
    +SetupArea=設定
     UploadNewTemplate=上傳新的範例
     FormToTestFileUploadForm=上傳測試檔案(根據設定)
     IfModuleEnabled=註:若模組<b>%s</b>是啓用時,「是的」有效。
    @@ -68,8 +68,8 @@ ErrorCodeCantContainZero=不含 0 值
     DisableJavascript=不啓動 JavaScript and Ajax 功能 (建議盲人或是文字型瀏覽器使用)
     UseSearchToSelectCompanyTooltip=另外您若有大量合作方 (> 100,000), 您可在 "設定 -> 其他" 設定常數 COMPANY_DONOTSEARCH_ANYWHERE 為 1 增加速度。蒐尋則只限在字串的開頭。
     UseSearchToSelectContactTooltip=另外您若有大量合作方 (> 100,000), 您可在 " 設定 -> 其他" 中設定常數 CONTACT_DONOTSEARCH_ANYWHERE 為 1 以增加速度。蒐尋則只限在字串的開頭。
    -DelaiedFullListToSelectCompany=等你在載入合作方組合明細表的內容之前按下一個鍵 (如果你有大量的合作方這可增加效能,不過會減少便利)
    -DelaiedFullListToSelectContact=等你在載入連絡人組合明細表的內容之前按下一個鍵 (如果你有大量的連絡人這可增加效能,不過會減少便利)
    +DelaiedFullListToSelectCompany=Wait until a key is pressed before loading content of Third Parties combo list.<br>This may increase performance if you have a large number of third parties, but it is less convenient.
    +DelaiedFullListToSelectContact=Wait until a key is pressed before loading content of Contact combo list.<br>This may increase performance if you have a large number of contacts, but it is less convenient)
     NumberOfKeyToSearch=需要 %s 個字元進行搜尋
     NotAvailableWhenAjaxDisabled=當 Ajax 不啓動時,此不可用。
     AllowToSelectProjectFromOtherCompany=在合作方的文件上,可選擇已結專案到另外合作方。
    @@ -80,7 +80,7 @@ PreviewNotAvailable=無法預覽
     ThemeCurrentlyActive=目前可用的主題
     CurrentTimeZone=PHP (服務器) 的時區
     MySQLTimeZone=MySql (資料庫) 的時區
    -TZHasNoEffect=資料庫伺服器內已儲存及返回值的日期,就像他保存為傳送的字串一樣。當使用 UNIX_TIMESTAMP 功能(此不是由 Dolibarr 使用,所以資料庫時區是無效的,就算是已輸入資料已變更也是)時,時區是有效的。
    +TZHasNoEffect=Dates are stored and returned by database server as if they were kept as submitted string. The timezone has effect only when using the UNIX_TIMESTAMP function (that should not be used by Dolibarr, so database TZ should have no effect, even if changed after data was entered).
     Space=空間
     Table=表格
     Fields=欄位
    @@ -94,7 +94,7 @@ NextValueForReplacements=下一個值(代替)
     MustBeLowerThanPHPLimit=註:你的 PHP 限制每個上傳檔案的大小為<b>%s%s</b>,因此不用此參數的值
     NoMaxSizeByPHPLimit=註:你的 PHP 偏好設定為無限制
     MaxSizeForUploadedFiles=上傳檔案最大值(0 為禁止上傳)
    -UseCaptchaCode=在登錄頁中的使用圖形碼 (CAPTCHA)
    +UseCaptchaCode=在登入頁中的使用圖形碼 (CAPTCHA)
     AntiVirusCommand= 防毒命令的完整路徑
     AntiVirusCommandExample= 例如 ClamWin 為 c:\\Progra~1\\ClamWin\\bin\\clamscan.exe<br>例如 ClamAv 為 /usr/bin/clamscan
     AntiVirusParam= 在命令列中更多的參數
    @@ -118,7 +118,7 @@ Destination=目地的
     IdModule=模組 ID
     IdPermissions=存取 ID
     LanguageBrowserParameter=%s的參數
    -LocalisationDolibarrParameters=本地化參數
    +LocalisationDolibarrParameters=本地參數
     ClientTZ=客戶時區(用戶)
     ClientHour=客戶時間(用戶)
     OSTZ=伺服器作業系統時區
    @@ -126,8 +126,8 @@ PHPTZ=PHP伺服器時區
     DaylingSavingTime=夏令時間
     CurrentHour=PHP (伺服器)時間
     CurrentSessionTimeOut=目前連線階段的時間已到
    -YouCanEditPHPTZ=設定不同 PHP 時區 (非必要), 您可試著在 .htacces 檔案中增一行字串如 "SetEnv TZ Europe/Paris" 。
    -HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but for the timezone of the server.
    +YouCanEditPHPTZ=To set a different PHP timezone (not required), you can try to add a .htaccess file with a line like this "SetEnv TZ Europe/Paris"
    +HoursOnThisPageAreOnServerTZ=Warning, in contrary of other screens, hours on this page are not in your local timezone, but of the timezone of the server.
     Box=小工具
     Boxes=各式小工具
     MaxNbOfLinesForBoxes=各式小工具最大行數
    @@ -191,15 +191,15 @@ IgnoreDuplicateRecords=忽略重覆資料的錯誤訊息 (INSERT IGNORE)
     AutoDetectLang=自動檢測(瀏覽器的語言)
     FeatureDisabledInDemo=在展示中禁用功能
     FeatureAvailableOnlyOnStable=在官方穩定版本中可用的功能
    -BoxesDesc=小工具是顯示您自行增加個人化的資料。您可選擇顯示小工具或由選定目標頁點選啟動或禁用。
    +BoxesDesc=Widgets are components showing some information that you can add to personalize some pages. You can choose between showing the widget or not by selecting target page and clicking 'Activate', or by clicking the trashcan to disable it.
     OnlyActiveElementsAreShown=僅從<a href="%s">啟用模組</a>後元件才會顯示。
    -ModulesDesc=Dolibarr 程式/功能的模組可在軟體內啟用。某些程式/模組您必須允許用戶權限,之後再啟動。點選按鈕 on/off 啟用模組/程式。
    +ModulesDesc=The modules/applications determine which features are available in the software. Some modules require permissions to be granted to users after activating the module. Click the on/off button to enable/disable a module/application.
     ModulesMarketPlaceDesc=您可在外部網頁中找到更多可下載的模組...
    -ModulesDeployDesc=若檔案系統的權限允許,則可以使用此工具來部署外部模組。 該模組將在選項卡上顯示<strong>%s</strong>。
    +ModulesDeployDesc=If permissions on your file system allow it, you can use this tool to deploy an external module. The module will then be visible on the tab <strong>%s</strong>.
     ModulesMarketPlaces=找外部 app / 模組
     ModulesDevelopYourModule=發展您自己的應用程式及模組
    -ModulesDevelopDesc=您可以發展或找到夥伴一起發展您的個人化模組
    -DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will make the seach on the external market place for you (may be slow, need an internet access)...
    +ModulesDevelopDesc=You may also develop your own module or find a partner to develop one for you.
    +DOLISTOREdescriptionLong=Instead of switching on <a href="https://www.dolistore.com">www.dolistore.com</a> web site to find an external module, you can use this embedded tool that will perform the search on the external market place for you (may be slow, need an internet access)...
     NewModule=新
     FreeModule=Free
     CompatibleUpTo=與版本%s相容
    @@ -211,8 +211,8 @@ Nouveauté=新奇
     AchatTelechargement=購買 / 下載
     GoModuleSetupArea=要部署/安裝新模組,請轉到模組設定區域<a href="%s">%s</a>。
     DoliStoreDesc=DoliStore 是 Dolibarr ERP / CRM 外部模組的官方市集
    -DoliPartnersDesc=各家公司提供客制發展模組功能的明細表(注意:任何有經驗的PHP程式編輯人員可提供客制化發展的開放原始碼專案)
    -WebSiteDesc=參考網頁找到更多模組...
    +DoliPartnersDesc=List of companies providing custom-developed modules or features.<br>Note: since Dolibarr is an open source application, <i>anyone</i> experienced in PHP programming may develop a module.
    +WebSiteDesc=External websites for more add-on (non-core) modules...
     DevelopYourModuleDesc=某些解決方式要您自行發展模組...
     URL=連線
     BoxesAvailable=可用小工具
    @@ -229,7 +229,7 @@ DoNotStoreClearPassword=在資料庫中不要存明碼,要存成加密(建議
     MainDbPasswordFileConfEncrypted=在 conf.php 中資料庫密碼加密(建議啟動)
     InstrucToEncodePass=為使已編碼好的密碼放到<b>conf.php</b>檔案中,應採用<br><b>$dolibarr_main_db_pass="crypted:%s";</b>此行代替<br><b>$dolibarr_main_db_pass="...";</b><br>
     InstrucToClearPass=為使密碼(明碼)放到 <b> conf.php </b> 檔案中,應採用<br><b>$dolibarr_main_db_pass="%s";</b>此行代替 <br><b> $dolibarr_main_db_pass="crypted:...";</b><br>
    -ProtectAndEncryptPdfFiles=產生 pdf 檔案的保護(不建議啟動,會中斷大量 pdf 的產生)
    +ProtectAndEncryptPdfFiles=Protection of generated PDF files NOT recommended (breaks mass PDF generation)
     ProtectAndEncryptPdfFilesDesc=保留可由 pdf 流灠器閱讀及列印的 pdf 文件保護。因此不能編輯及複製。注意使用此功能會使合併 pdf 無法使用。
     Feature=功能特色
     DolibarrLicense=授權
    @@ -246,8 +246,8 @@ ExternalResources=外部資源
     SocialNetworks=社會網路
     ForDocumentationSeeWiki=有關用戶或開發人員的文件(文件,常見問題...), <br>可在Dolibarr維基查閱: <br> <a href="%s" target="_blank"><b>%s的</b></a>
     ForAnswersSeeForum=有關任何其他問題/幫助,您可以使用Dolibarr論壇: <br> <a href="%s" target="_blank"><b>%s的</b></a>
    -HelpCenterDesc1=此區可以幫助你取得 Dolibarr 的幫忙支援服務。
    -HelpCenterDesc2=某些服務<b>僅可使用英文</b> 。
    +HelpCenterDesc1=Here are some resources for getting help and support with Dolibarr.
    +HelpCenterDesc2=Some of these resources are only available in <b>english</b>.
     CurrentMenuHandler=目前選單處理者
     MeasuringUnit=衡量單位
     LeftMargin=左邊邊界
    @@ -262,31 +262,35 @@ NoticePeriod=通知期
     NewByMonth=新的一個月
     Emails=各式電子郵件
     EMailsSetup=電子郵件設定
    -EMailsDesc=此頁允許您複寫您電子郵件傳送的 php 參數。在 Unix/Linux 系統中多數案例,您 php 設定正確及參數是無效的。
    +EMailsDesc=This page allows you to override your default PHP parameters for email sending. In most cases on Unix/Linux OS, the PHP setup is correct and these parameters are unnecessary.
     EmailSenderProfiles=電子郵件傳送者簡歷
    -MAIN_MAIL_SMTP_PORT=SMTP / SMTPS 連接埠 ( 在 php.ini 中預設值:<b>%s</b>)
    -MAIN_MAIL_SMTP_SERVER=SMTP / SMTPS 主機 ( 在 php.ini 中是預設的:<b>%s</b>)
    -MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP / SMTPS 連接埠 ( 在 Unix like 系統內,沒有定義在 PHP中)
    -MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP / SMTPS 主機 ( 在 Unix like 系統內,沒有定義在 PHP 中)
    -MAIN_MAIL_EMAIL_FROM=自動化電子郵件的寄件者(在 php.ini中預設值:<b>%s</b>)
    -MAIN_MAIL_ERRORS_TO=發生錯誤時退回的電子郵件(發送的電子郵件中的欄位“錯誤 - 收件人”)
    -MAIN_MAIL_AUTOCOPY_TO= 系統私下寄送所有發送的電子郵件副件給
    -MAIN_DISABLE_ALL_MAILS=禁用傳送所有電子郵件(適用於測試目的或是展示)
    +MAIN_MAIL_SMTP_PORT=SMTP/SMTPS Port (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_SERVER=SMTP/SMTPS Host (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_SMTP_PORT_NotAvailableOnLinuxLike=SMTP/SMTPS Port (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_SMTP_SERVER_NotAvailableOnLinuxLike=SMTP/SMTPS Host (Not defined into PHP on Unix-like systems)
    +MAIN_MAIL_EMAIL_FROM=Sender email for automatic emails (default value in php.ini: <b>%s</b>)
    +MAIN_MAIL_ERRORS_TO=Email used for error returns emails (fields 'Errors-To' in emails sent)
    +MAIN_MAIL_AUTOCOPY_TO= Copy (Bcc) all sent emails to
    +MAIN_DISABLE_ALL_MAILS=Disable all email sending (for test purposes or demos)
     MAIN_MAIL_FORCE_SENDTO=傳送全部電子郵件到(此為測試用,不是真正的收件人)
    -MAIN_MAIL_ENABLED_USER_DEST_SELECT=使用電子郵件將員工用戶增加到允許的目標清單表中
    -MAIN_MAIL_SENDMODE=傳送電子郵件方法
    -MAIN_MAIL_SMTPS_ID=SMTP 帳號(如果需要驗證)
    -MAIN_MAIL_SMTPS_PW=SMTP 密碼(如果需要驗證)
    -MAIN_MAIL_EMAIL_TLS= 使用 TLS (SSL) 的加密
    -MAIN_MAIL_EMAIL_STARTTLS= 使用 TLS (STARTTLS) 加密
    -MAIN_DISABLE_ALL_SMS=禁用傳送所有簡訊/SMS(適用於測試目的或展示)
    +MAIN_MAIL_ENABLED_USER_DEST_SELECT=Add employee users with email into allowed recipient list
    +MAIN_MAIL_SENDMODE=Email sending method
    +MAIN_MAIL_SMTPS_ID=SMTP ID (if sending server requires authentication)
    +MAIN_MAIL_SMTPS_PW=SMTP Password (if sending server requires authentication)
    +MAIN_MAIL_EMAIL_TLS=Use TLS (SSL) encryption
    +MAIN_MAIL_EMAIL_STARTTLS=Use TLS (STARTTLS) encryption
    +MAIN_MAIL_EMAIL_DKIM_ENABLED=Use DKIM to generate email signature
    +MAIN_MAIL_EMAIL_DKIM_DOMAIN=Email Domain for use with dkim
    +MAIN_MAIL_EMAIL_DKIM_SELECTOR=Name of dkim selector
    +MAIN_MAIL_EMAIL_DKIM_PRIVATE_KEY=Private key for dkim signing
    +MAIN_DISABLE_ALL_SMS=Disable all SMS sending (for test purposes or demos)
     MAIN_SMS_SENDMODE=使用傳送簡訊/SMS的方法
    -MAIN_MAIL_SMS_FROM=傳送簡訊/SMS的傳送者預設電話號碼
    -MAIN_MAIL_DEFAULT_FROMTYPE=人工傳送時預設的寄件者電子郵件(用戶電子郵件或公司電子郵件)
    +MAIN_MAIL_SMS_FROM=Default sender phone number for SMS sending
    +MAIN_MAIL_DEFAULT_FROMTYPE=非系統產生寄送時預設的寄件者(用戶電子郵件或公司電子郵件)
     UserEmail=用戶電子郵件
     CompanyEmail=公司電子郵件
     FeatureNotAvailableOnLinux=在Unix系列系統中不能使用功能。在本地測試您的寄送郵件程式。
    -SubmitTranslation=若未完整地翻譯您的語言或您找到錯誤,您可透過編輯檔案放到<b>langs/%s</b>的資料夾中修正他們,或是傳送您做的異動到 www.transifex.com/dolibarr-association/dolibarr/
    +SubmitTranslation=If translation for this language is not complete or you find errors, you can correct this by editing files in directory <b>langs/%s</b> and submit your change to www.transifex.com/dolibarr-association/dolibarr/
     SubmitTranslationENUS=若您的語言翻譯尚未完成,或是您到錯誤,您可以透過編輯在資料夾 <b>langs/%s</b>中的檔案修正它,並把修改後檔案傳送到 dolibarr.org/forum 或是給在  github.com/Dolibarr/dolibarr 開發者。
     ModuleSetup=模組設定
     ModulesSetup=模組/程式設定
    @@ -295,7 +299,7 @@ ModuleFamilyCrm=客戶關係管理(CRM)
     ModuleFamilySrm=供應商關係管理(VRM)
     ModuleFamilyProducts=產品管理 (PM)
     ModuleFamilyHr=人力資源管理 (HR)
    -ModuleFamilyProjects=專案 / 協同作業
    +ModuleFamilyProjects=各專案 / 協同作業
     ModuleFamilyOther=其他
     ModuleFamilyTechnic=多種模組工具
     ModuleFamilyExperimental=實驗性模組
    @@ -309,15 +313,15 @@ DoNotUseInProduction=請勿在實際工作環境使用
     ThisIsProcessToFollow=此處理步驟:
     ThisIsAlternativeProcessToFollow=代替的人工設定程序:
     StepNb=步驟 %s 
    -FindPackageFromWebSite=尋找您想要功能的套件(在官網 %s 上有範例)。
    +FindPackageFromWebSite=Find a package that provides features you want (for example on official web site %s).
     DownloadPackageFromWebSite=下載套件(在官網%s上有範例)。
    -UnpackPackageInDolibarrRoot=解壓縮的套件檔案到伺服器下的 dolibarr 資料夾:<b>%s</b>
    -UnpackPackageInModulesRoot=要部署/安裝外部模組,請將打包的檔案解壓縮到專用於模組的服務器資料夾中:<b>%s</b>
    -SetupIsReadyForUse=模組的發展已完成。您必須透過模組設定頁面啟用及在您的程式中設定模組:<a href="%s">%s</a>
    +UnpackPackageInDolibarrRoot=Unpack/unzip the packaged files into the server directory dedicated to Dolibarr: <b>%s</b>
    +UnpackPackageInModulesRoot=To deploy/install an external module, unpack/unzip the packaged files into the server directory dedicated to external modules:<br><b>%s</b>
    +SetupIsReadyForUse=Module deployment is finished. You must however enable and setup the module in your application by going to the page setup modules: <a href="%s">%s</a>.
     NotExistsDirect=替代根資料夾的資訊沒有定義到已存在的資料夾中。<br>
     InfDirAlt=從第3版起,可定義替代根資料夾。此允許您儲存到指定資料夾、插件及客製化範本。<br>只要在 dolibarr 的根資料夾內建立資料夾(例如: 客戶)。<br>
     InfDirExample=<br>在 <strong>conf.php</strong> 檔案宣告 <br>$dolibarr_main_url_root_alt='/custom'<br>$dolibarr_main_document_root_alt='/path/of/dolibarr/htdocs/custom'<br>若這幾行已用"#"方式註解了,啟用他,也就是移除 "#"。
    -YouCanSubmitFile=此步驟,您可傳送模組套件的 .zip 檔案到此:
    +YouCanSubmitFile=Alternatively, you may upload the module .zip file package:
     CurrentVersion=Dolibarr 目前版本
     CallUpdatePage=到此頁昇級資料庫架構及資料:%s。
     LastStableVersion=最新穩定版本
    @@ -345,17 +349,17 @@ UMask=在 Unix/Linux/BSD/Mac 的檔案系統中新檔案的 UMask 參數。
     UMaskExplanation=此參數允許您定義在伺服器上由 Dolibarr 建立的檔案的權限(例如在上載檔案時)。 <br>這是八進位(例如,0666 為全部人可讀寫)。<br>此參數無法在 Windows 伺服器上使用。
     SeeWikiForAllTeam=在 wiki 頁面中查看所有角色及其組織的完整清單明細
     UseACacheDelay= 以秒為單位的遞延匯出反應的時間(0或空格為沒有緩衝)
    -DisableLinkToHelpCenter=登錄頁面上隱藏連線“ <b>需要幫助或支援</b>"
    +DisableLinkToHelpCenter=登入頁面上隱藏連線“ <b>需要幫助或支援</b>"
     DisableLinkToHelp=隱藏連線到線上幫助 "<b>%s</b>"
    -AddCRIfTooLong=沒有自動換行功能,若一行太長,請自行按下 Enter 鍵換行。
    -ConfirmPurge=您確認要執行刪除嗎?<br>此會刪您所有資料,且無法還復(含 ECM 檔案及各式夾檔)。
    +AddCRIfTooLong=There is no automatic text wrapping, text that is too long will not display on documents. Please add carriage returns in the text area if needed.
    +ConfirmPurge=Are you sure you want to execute this purge?<br>This will permanently delete all your data files with no way to restore them (ECM files, attached files...).
     MinLength=最小長度
     LanguageFilesCachedIntoShmopSharedMemory=.lang 檔案載入分享記憶體中
     LanguageFile=語系檔
    -ExamplesWithCurrentSetup=現在執行範例設定
    +ExamplesWithCurrentSetup=Examples with current configuration
     ListOfDirectories=OpenDocument 範本資料夾下的清單明細
     ListOfDirectoriesForModelGenODT=包含 OpenDocument 格式範本的資料夾清單明細。<br><br>資料夾完整路徑放在這裡。<br>每一資料夾之間要用 enter 鍵。<br>為增加 GED 模組的資料夾,請放在<b>DOL_DATA_ROOT/ecm/yourdirectoryname</b>。<br><br>在這些資料夾的檔案結尾必須是 <b>.odt</b> 或 <b>.ods</b>。
    -NumberOfModelFilesFound=在這些資料夾中找到 ODT/ODS 範本檔數量
    +NumberOfModelFilesFound=Number of ODT/ODS template files found in these directories
     ExampleOfDirectoriesForModelGen=語法範例:<br> ç:\\mydir<br>/home/mydir<br>DOL_DATA_ROOT/ecm/ecmdir
     FollowingSubstitutionKeysCanBeUsed=<br>要知道如何建立您的ODT文件範本,並儲存在這些資料夾,請上 wiki 網站:
     FullListOnOnlineDocumentation=http://wiki.dolibarr.org/index.php/Create_an_ODT_document_template
    @@ -365,19 +369,19 @@ KeyForWebServicesAccess=輸入使用 Web 服務(在 WebServices 的參數是
     TestSubmitForm=輸入測試表單
     ThisForceAlsoTheme=無論用戶的選擇為何,使用此選單管理器也將使用其本身的主題。此選單管理器是專適用於智慧手機,但並不適用於全部的智慧手機。若您遇到問題,請使用另一個選單管理器。
     ThemeDir=skins資料夾
    -ConnectionTimeout=連線超時
    +ConnectionTimeout=Connection timeout
     ResponseTimeout=回應超時
     SmsTestMessage=測試訊息從 __PHONEFROM__ 到 __PHONETO__
     ModuleMustBeEnabledFirst=若您需要此功能,您首先要啟用模組<b>%s</b>。
     SecurityToken=安全的網址的值
    -NoSmsEngine=沒有簡訊/SMS傳送器可用。簡訊/SMS傳送器預設沒有安裝(因為需要外部供應商),但你可在 %s 找到。
    +NoSmsEngine=No SMS sender manager available. A SMS sender manager is not installed with the default distribution because they depend on an external supplier, but you can find some on %s
     PDF=PDF格式
    -PDFDesc=您可以設定每個全域選項關連到 PDF產生器
    +PDFDesc=You can set each global option related to the PDF generation
     PDFAddressForging=產生地址規則
     HideAnyVATInformationOnPDF=在產生的 PDF 中隱藏銷售稅 / 營業稅的全部資訊
     PDFRulesForSalesTax=銷售稅 / 營業稅的規則
     PDFLocaltax=%s的規則
    -HideLocalTaxOnPDF=將 %s 稅率隱藏到 pdf 列銷售稅中
    +HideLocalTaxOnPDF=Hide %s rate in pdf column tax sale
     HideDescOnPDF=在產生的 PDF 上隱藏產品描述
     HideRefOnPDF=在產生的 PDF 上隱藏產品參考號
     HideDetailsOnPDF=在產生的 PDF 上產品線詳細資訊
    @@ -387,7 +391,7 @@ UrlGenerationParameters=將網址安全化的參數
     SecurityTokenIsUnique=每個URL使用獨特的安全/securekey參數
     EnterRefToBuildUrl=輸入對象%s的參考值
     GetSecuredUrl=取得計算後網址
    -ButtonHideUnauthorized=當非管理權限的用戶在非授權行動時改成隱藏按鈕,而非灰色禁用鈕。
    +ButtonHideUnauthorized=Hide buttons for non-admin users for unauthorized actions instead of showing greyed disabled buttons
     OldVATRates=舊營業稅率
     NewVATRates=新營業稅率
     PriceBaseTypeToChange=根據已定義的基礎參考價參修改價格
    @@ -408,13 +412,13 @@ ExtrafieldSelect = 選擇清單明細
     ExtrafieldSelectList = 從表格選取
     ExtrafieldSeparator=分隔 (非欄位)
     ExtrafieldPassword=密碼
    -ExtrafieldRadio=雷達鈕 (限選擇性質)
    +ExtrafieldRadio=Radio buttons (one choice only)
     ExtrafieldCheckBox=勾選方框
     ExtrafieldCheckBoxFromList=從表格來的確認框
     ExtrafieldLink=連線到物件
     ComputedFormula=計算欄位
     ComputedFormulaDesc=You can enter here a formula using other properties of object or any PHP coding to get a dynamic computed value. You can use any PHP compatible formulas including the "?" condition operator, and following global object: <strong>$db, $conf, $langs, $mysoc, $user, $object</strong>.<br><strong>WARNING</strong>: Only some properties of $object may be available. If you need a properties not loaded, just fetch yourself the object into your formula like in the second example.<br>Using a computed field means you can't enter yourself any value from interface. Also, if there is a syntax error, the formula may return nothing.<br><br>Example of formula:<br>$object->id < 10 ? round($object->id / 2, 2) : ($object->id + 2 * $user->id) * (int) substr($mysoc->zip, 1, 2)<br><br>Example to reload object<br>(($reloadedobj = new Societe($db)) && ($reloadedobj->fetch($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? $reloadedobj->array_options['options_extrafieldkey'] * $reloadedobj->capital / 5 : '-1'<br><br>Other example of formula to force load of object and its parent object:<br>(($reloadedobj = new Task($db)) && ($reloadedobj->fetch($object->id) > 0) && ($secondloadedobj = new Project($db)) && ($secondloadedobj->fetch($reloadedobj->fk_project) > 0)) ? $secondloadedobj->ref : 'Parent project not found'
    -ExtrafieldParamHelpPassword=不要加密儲存,此欄位保持空白(在螢幕中欄位有星星的必須隱藏)。<br>此處值設定為'自動'則使用預設的加密規則儲存密碼到資料庫(沒有辦法讀取原始值)
    +ExtrafieldParamHelpPassword=Leaving this field blank means this value will be stored without encryption (field must be only hidden with star on screen).<br>Set  'auto' to use the default encryption rule to save password into database (then value read will be the hash only, no way to retrieve original value)
     ExtrafieldParamHelpselect=此行的清單明細值,其格式為關鍵字,值(關鍵字不為'0')<br><br>例如:<br>1,value1<br>2,value2<br>code3,value3<br>...<br><br>為使清單明細可依賴於其他補充屬性清單明細:<br>1,value1|options_<i>parent_list_code</i>:parent_key<br>2,value2|options_<i>parent_list_code</i>:parent_key<br><br>為使清單明細可依賴於另一清單明細:<br>1,value1|<i>parent_list_code</i>:parent_key<br>2,value2|<i>parent_list_code</i>:parent_key
     ExtrafieldParamHelpcheckbox=此行的清單明細值,其格式為關鍵字,值 (關鍵字不能為 '0')<br><br>例如:<br>1,value1<br>2,value2<br>3,value3<br>...
     ExtrafieldParamHelpradio=此行的清單明細值,其格式為關鍵字,值 (關鍵字不能為 '0')<br><br>例如:<br>1,value1<br>2,value2<br>3,value3<br>...
    @@ -432,39 +436,39 @@ DefaultLink=預設連線
     SetAsDefault=設定成預設值
     ValueOverwrittenByUserSetup=警告,用戶指定設定會覆蓋該值(每位用戶可設定自己的 URL )
     ExternalModule=外部模組 - 已安裝到資料夾 %s
    -BarcodeInitForThirdparties=合作方的大量條碼初始值
    +BarcodeInitForthird-parties=Mass barcode init for third-parties
     BarcodeInitForProductsOrServices=大量條碼初始值或是重新設產品或服務
     CurrentlyNWithoutBarCode=目前您在沒有條碼的<strong>%s</strong>%s中有<strong>%s</strong>的記錄。
     InitEmptyBarCode=下一筆%s記錄初始值
     EraseAllCurrentBarCode=刪除目前全部的條碼現有值
     ConfirmEraseAllCurrentBarCode=您確定您要刪除目前全部的條碼現有值?
     AllBarcodeReset=全部的條碼值已刪除
    -NoBarcodeNumberingTemplateDefined=沒有啟用條碼模組設定的編號條碼範本
    +NoBarcodeNumberingTemplateDefined=No numbering barcode template enabled in the barcode module setup.
     EnableFileCache=啟用檔案快取
     ShowDetailsInPDFPageFoot=增加更多詳細資料到 PDF 檔案的頁腳,像您公司地址,或是管理者名稱 (要完成專業證號、公司資本額及VAT字號)。
     NoDetails=頁腳沒有更多的詳細資料
     DisplayCompanyInfo=顯示公司地址
     DisplayCompanyManagers=顯示管理者名稱
     DisplayCompanyInfoAndManagers=顯示公司地址及管理者名稱
    -EnableAndSetupModuleCron=若您要自動地產生循環發票,模組"%s"必須啟用且正確設定。然而各式發票的產生必須從此範例的 "建立" 鈕以人工完成。注意即使你啟用自動產生,你仍可安全地以人工方式執行而產生。在相同時間內不能重覆產生發票。
    -ModuleCompanyCodeCustomerAquarium=%s後面是合作方客戶代碼,用於客戶會計代碼
    -ModuleCompanyCodeSupplierAquarium=%s後面是合作方供應商代碼,用於供應商會計代碼
    +EnableAndSetupModuleCron=If you want to have this recurring invoice generated automatically, module *%s* must be enabled and correctly setup. Otherwise, generation of invoices must be done manually from this template using the *Create* button. Note that even if you enabled automatic generation, you can still safely launch manual generation. Generation of duplicates for the same period is not possible.
    +ModuleCompanyCodeCustomerAquarium=%s followed by customer code for a customer accounting code
    +ModuleCompanyCodeSupplierAquarium=%s followed by supplier code for a supplier accounting code
     ModuleCompanyCodePanicum=回傳空白會計代碼。
     ModuleCompanyCodeDigitaria=會計代碼依著合作方代碼。代碼是由第一個字母 "C" 接下來是合作方代碼的前面5 個字母組成的。
     Use3StepsApproval=存預設情況下,採購訂單需要由 2 個不同的用戶建立和核准 (一個步驟/用戶建立,另一個步驟/用戶核准。請注意,若用戶同時具有建立和批准的權限,則一個步驟/用戶就足夠了) 。 若金額高於指定值時,您可以通過此選項進行要求以引入第三步/用戶核准 (因此需要3個步驟:1 =驗證,2 =首次批准,3 =若金額足夠,則為第二次批准) 。 <br>若一次核准 ( 2個步驟) 就足夠,則將不做任何設定,若總是需要第二次批准 (3個步驟),則將其設置為非常低的值 (0.1)。
     UseDoubleApproval=當金額(未稅)大於...時使用3步驟核准
    -WarningPHPMail=警告:通常設定寄出的電子郵件為您提供的電子郵件伺服器以代替預設值是比較好的。某些電子郵件提供者(像 Yahoo)不允許您傳送電子郵件從另一個伺服器到他們自己的伺服器。您正確的設定要使用應用軟體的伺服器傳送電子郵件而不是您的電子郵件提供者,所以某些收件者(與限制性DMARC協議兼容的一種)會詢問您的電子郵件提供者,若他們可接受您的電子郵件及某些電子郵件提供者(像 Yahoo)可能回應"no",因為伺服器不是他們的伺服器,所以少數您寄的電子郵件可能不被接受(也還要小心你的電子郵件提供者發送大小限制)。<br>若您的電子郵件提供者(像 Yahoo)有限制,您必須變更您電子郵件設定為選用其他方法 "SMTP 伺服器" 及輸入 SMTP 伺服器及由您電子郵件提供者提供的認證(詢問您的電子郵件提供者為您的電子郵件帳戶取得 SMTP 認證)。
    +WarningPHPMail=WARNING: It is often better to setup outgoing emails to use the email server of your provider instead of the default setup. Some email providers (like Yahoo) do not allow you to send an email from another server than their own server. Your current setup uses the server of the application to send email and not the server of your email provider, so some recipients (the one compatible with the restrictive DMARC protocol), will ask your email provider if they can accept your email and some email providers (like Yahoo) may respond "no" because the server is not their, so few of your sent Emails may not be accepted (be careful also of your email provider's sending quota).<br>If your Email provider (like Yahoo) has this restriction, you must change Email setup to choose the other method "SMTP server" and enter the SMTP server and credentials provided by your Email provider (ask your Email provider to get SMTP credentials for your account).
     WarningPHPMail2=若您的電子郵件 SMTP 供應商需要將電子郵件客戶端限制為某些 IP 地址(非常罕見),則您的ERP CRM 應用程序的 IP 地址:<strong>%s</strong>
    -ClickToShowDescription=點一下顯示描述
    -DependsOn=此模組需要其他各式模組
    +ClickToShowDescription=點選顯示描述
    +DependsOn=This module needs the module(s)
     RequiredBy=模組需要此模組
    -TheKeyIsTheNameOfHtmlField=HTML 欄位名稱。此需要一點知識去閱讀 HTML 頁面的內容以取得主要欄位的名稱。
    -PageUrlForDefaultValues=您必須在此輸入相對頁面的URL。 若您在URL中包含參數時,若所有參數都設為相同的值,則預設值將生效。 例如:
    +TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
    +PageUrlForDefaultValues=You must enter the relative url of the page. If you include parameters in URL, the default values will be effective if all parameters are set to same value. Examples:
     PageUrlForDefaultValuesCreate=<br>對表單來建立新的合作方,他是 <strong>%s</strong>,<br>若只要在 url 中有一些參數時才需要預設值,則可以使用 <strong>%s</strong>
    -PageUrlForDefaultValuesList=<br>此頁為合作方清單,是<strong>%s</strong>,<br>若只有當 url 有參數時才需要預設值,您可使用 <strong>%s</strong>
    +PageUrlForDefaultValuesList=<br>For page that list third-parties, it is <strong>%s</strong>,<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
     EnableDefaultValues=啟用個人使用的預設值
    -EnableOverwriteTranslation=啟用使用覆寫翻譯
    -GoIntoTranslationMenuToChangeThis=此程式碼值找到翻譯,因此要更改此值,您必須到 首頁 - 設定 - 翻譯 進行編輯。
    +EnableOverwriteTranslation=Enable usage of overwritten translation
    +GoIntoTranslationMenuToChangeThis=A translation has been found for the key with this code. To change this value, you must edit it from Home-Setup-translation.
     WarningSettingSortOrder=Warning, setting a default sort order may result in a technical error when going on the list page if field is an unknown field. If you experience such an error, come back to this page to remove the default sort order and restore default behavior.
     Field=欄位
     ProductDocumentTemplates=文件範例產生產品文件檔
    @@ -475,17 +479,19 @@ FilesAttachedToEmail=附加檔案
     SendEmailsReminders=用電子郵件傳送行程提醒
     davDescription=新增元件到 DAV 伺服器
     DAVSetup=DAV 模組設定
    -DAV_ALLOW_PUBLIC_DIR=啟用公開資料夾(不再登入 WebDav 資料夾)
    -DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access to (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_PUBLIC_DIR=啟用公開資料夾(不須登入使用的 WebDav 資料夾)
    +DAV_ALLOW_PUBLIC_DIRTooltip=The WebDav public directory is a WebDAV directory everybody can access  (in read and write mode), with no need to have/use an existing login/password account.
    +DAV_ALLOW_ECM_DIR=啟動 DMS/ECM 模組的根目錄(需要登入)
    +DAV_ALLOW_ECM_DIRTooltip=當使用 DMS/ECM 模組時,所有採用人工方式上傳的檔案根目錄/資料夾。像從網頁介面的某些功能需要您有效地登入/密碼以便有取存權限。
     # Modules
     Module0Name=用戶和群組
     Module0Desc=用戶/員工以及群組管理
    -Module1Name=合作方
    -Module1Desc=公司和聯絡人的管理(客戶、潛在客戶)
    +Module1Name=各式合作方
    +Module1Desc=公司和聯絡人的管理(客戶、潛在者)
     Module2Name=商業
     Module2Desc=商業管理
     Module10Name=會計
    -Module10Desc=基於資料庫內容的簡單會計報告(日記簿、營業額、周轉)。 不使用任何總帳表單。
    +Module10Desc=Simple accounting reports (journals, turnover) based on database content. Does not use any ledger table.
     Module20Name=提案/建議書
     Module20Desc=商業提案/建議書的管理
     Module22Name=大量發送的電子郵件
    @@ -511,13 +517,13 @@ Module52Desc=產品庫存的管理
     Module53Name=服務
     Module53Desc=服務的管理
     Module54Name=合約/訂閱
    -Module54Desc=合約管理 (服務或定期訂閱)
    +Module54Desc=Management of contracts (services or recurring subscriptions)
     Module55Name=條碼
     Module55Desc=條碼的管理
     Module56Name=電話
     Module56Desc=電話整合
     Module57Name=直接由銀行付款命令
    -Module57Desc=直接借方付款命令管理。包含適用歐洲國家 SEPA 檔案的產生。
    +Module57Desc=Management of Direct Debit payment orders. It includes generation of SEPA file for European countries.
     Module58Name=點選撥打
     Module58Desc=點選撥打系統(Asterisk, ...)的整合
     Module59Name=Bookmark4u
    @@ -528,45 +534,45 @@ Module75Name=費用和出差筆記
     Module75Desc=費用和旅遊音符的管理
     Module80Name=裝貨
     Module80Desc=裝貨和交貨單的管理
    -Module85Name=銀行及現金
    +Module85Name=Banks and Cash
     Module85Desc=銀行或現金帳戶管理
    -Module100Name=外部網站
    -Module100Desc=本模組將一個外部網站或網頁含到 Dolibarr 選單中,並使用 Dolibarr 框架內檢視。
    +Module100Name=External Site
    +Module100Desc=Add external website link into Dolibarr menus to view it in a Dolibarr frame
     Module105Name=Mailman and SPIP
     Module105Desc=會員模組用的 Mailman 或 SPIP 介面
     Module200Name=LDAP
    -Module200Desc=LDAP 資料夾的同步
    +Module200Desc=LDAP directory synchronization
     Module210Name=PostNuke
     Module210Desc=PostNuke 的整合
     Module240Name=匯出資料
    -Module240Desc=匯出 Dolibarr 資料的工具 (協助)
    +Module240Desc=Tool to export Dolibarr data (with assistance)
     Module250Name=資料匯入
    -Module250Desc=匯入 Dolibarr 資料的工具 (協助)
    +Module250Desc=Tool to import data into Dolibarr (with assistance)
     Module310Name=會員
     Module310Desc=基金會會員管理
     Module320Name=RSS 訂閱
     Module320Desc=在 Dolibarr 螢幕頁增加 RSS 訂閱
    -Module330Name=書籤
    -Module330Desc=書籤管理
    -Module400Name=專案/機會/潛在客戶
    -Module400Desc=各式專案、機會/潛在客戶及或任務的管理。您也可以分配任何元件(發票、訂單、提案/建議書、干預/介入...)到專案及從專案檢視中以橫向檢視。
    +Module330Name=Bookmarks and shortcuts
    +Module330Desc=Create shortcuts, always accessible, to the internal or external pages to which you frequently access
    +Module400Name=各專案或潛在
    +Module400Desc=各專案、潛在/機會及/或任務的管理。你也可指派任何元件(發票、訂單、報價單、干預...)到專案中及從專案中檢視中取得橫向檢視。
     Module410Name=Webcalendar
     Module410Desc=Webcalendar 整合
     Module500Name=稅賦及特定費用
     Module500Desc=其他費用管理(銷售稅、社會或年度稅、股利...)
     Module510Name=支付員工薪資
    -Module510Desc=記錄及接下來支付您員工薪資
    +Module510Desc=Record and track employee payments
     Module520Name=借款
     Module520Desc=借款的管理
     Module600Name=商業事件通知
    -Module600Desc=傳送電子郵件通知 ( 由某些商業事件引起 ) 給用戶 ( 在每位用戶中設定 )、給合作方通訊錄 ( 在每位合作方中設定 ) 或是給固定的電子郵件
    -Module600Long=請注意,此模組專用於在發生專用商務事件時發送即時的電子郵件。若您正在尋找通過您的行程事件的電子郵件傳送提醒的功能,請進入行程模組的設定。
    +Module600Desc=Send email notifications triggered by a business event, for users (setup defined on each user), third-party contacts (setup defined on each third party) or to defined emails
    +Module600Long=Note that this module sends emails in real-time when a specific business event occurs. If you are looking for a feature to send email reminders of agenda events, go into the setup of module Agenda.
     Module610Name=產品變種
    -Module610Desc=允許基於屬性(顏色、大小...)建立產品變種
    +Module610Desc=Creation of product variants (color, size etc.)
     Module700Name=捐贈
     Module700Desc=捐款的管理
     Module770Name=費用報表
    -Module770Desc=管理及認列費用報表(交通、餐飲...等)
    +Module770Desc=Manage and claim expense reports (transportation, meal, ...)
     Module1120Name=供應商商業提案/建議書
     Module1120Desc=回覆供應商商業提案/建議書及報價
     Module1200Name=Mantis 工作管理
    @@ -576,13 +582,13 @@ Module1520Desc=大量郵件文件的產生
     Module1780Name=標籤/分類
     Module1780Desc=建立標籤/類別(產品、客戶、供應商、通訊錄或會員)
     Module2000Name=所視即所得編輯器
    -Module2000Desc=允許使用進階的編輯器 ( CKEditor ) 編輯某些文字區
    +Module2000Desc=Allow text fields to be edited using CKEditor
     Module2200Name=浮動價格
     Module2200Desc=啟用價格的數學表達式
     Module2300Name=排程工作
     Module2300Desc=排程工作管理(連到 cron 或是 chrono table)
     Module2400Name=事件/行程
    -Module2400Desc=Follow done and upcoming events. Let application logs automatic events for tracking purposes or record manual events or rendez-vous. This is the main important module for a good Customer or Supplier Relationship Management.
    +Module2400Desc=Track events. Let Dolibarr log automatic events for tracking purposes or record manual events or meetings. This is the main module for good Customer or Supplier Relationship Management.
     Module2500Name=檔案管理系統(DMS) / 電子控制管理(ECM)
     Module2500Desc=文件管理系統 / 電子內容管理。您產生或是儲存的文件會自動整理組織。當您有需要就分享吧。
     Module2600Name=API/Web 服務 ( SOAP 伺服器 )
    @@ -590,46 +596,50 @@ Module2600Desc=啟用 Dolibarr SOAP 伺服器提供 API 服務
     Module2610Name=API/Web 服務( REST 伺服器)
     Module2610Desc=啟用 Dolibarr REST 伺服器提供 API 服務
     Module2660Name=呼叫網站服務 (SOAP 客戶端)
    -Module2660Desc=啟用 Dolibarr 網站服務客戶端(可以使用傳送資料及要求到外部伺服器。目前只支援供應商訂單)
    +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Only Supplier orders currently supported.)
     Module2700Name=Gravatar
    -Module2700Desc=使用線上的 Gravatar 服務 ( www.gravatar.com ),以顯示用戶/會員的照片 (使用本身的電子郵件尋找)。此需要連上網
    +Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Needs Internet access
     Module2800Desc=FTP 客戶端
     Module2900Name=GeoIPMaxmind
     Module2900Desc=GeoIP Maxmind 的轉換功能
     Module3100Name=Skype
     Module3100Desc=增加 Skype 鈕到用戶 / 合作方 / 通訊錄 / 會員資料卡中
     Module3200Name=不可改變的檔案
    -Module3200Desc=Activate log of some business events into an unalterable log. Events are archived in real-time. The log is a table of chained events that can be read only and exported. This module may be mandatory for some countries.
    +Module3200Desc=Enable an unalterable log of business events. Events are archived in real-time. The log is a read-only table of chained events that can be exported. This module may be mandatory for some countries.
     Module4000Name=人資
     Module4000Desc=人力資源管理(部門、員工合約及感受的管理)
     Module5000Name=多個公司
     Module5000Desc=允許您管理多個公司
     Module6000Name=工作流程
    -Module6000Desc=Workflow management (automatic creation of object and/or automatic status change)
    +Module6000Desc=工作流程管理(自動建立物件和/或自動更改狀況)
     Module10000Name=網站
     Module10000Desc=透過所見即所視的編輯器建立公開網站。只要設定您網站伺服器 (Apache, Nginx,...) 指向專用的 Dolibarr 資料夾,使其通過 internet 連線到您自己的網域即可。
     Module20000Name=離職申請管理
    -Module20000Desc=聲明並遵守員工離職申請
    +Module20000Desc=Declare and track employees leave requests
     Module39000Name=產品批次
     Module39000Desc=在產品中批次或序號、有效日及銷售日的管理
    +Module40000Name=Multicurrency
    +Module40000Desc=Use alternative currencies in prices and documents
     Module50000Name=PayBox
    -Module50000Desc=提供使用 PayBox 的借貸卡做為線上支付方式的模組。此可允許您客戶免付款或是用在特定Dolibarr元件 ( 發票、訂單 ... ) 上付款。
    +Module50000Desc=Offer customers a PayBox online payment page (credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50100Name=收銀機
     Module50100Desc=收銀機模組 ( POS )
    +Module50150Name=收銀機
    +Module50150Desc=Point of sales module (Touch screen POS).
     Module50200Name=Paypal
    -Module50200Desc=提供使用 PayPal ( 信用卡或是 PayPal 信用) 做為線上支付方式的模組。此可允許您客戶免付款或是在特定 Dolibarr 元件 ( 發票、訂單 ... ) 上付款。
    +Module50200Desc=Offer customers a PayPal online payment page (PayPal account or credit/debit cards). This can be used to allow your customers to make free payments or for a payment on a particular Dolibarr object (invoice, order, ...)
     Module50400Name=會計(進階)
    -Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software format.
    +Module50400Desc=Accounting management (double entries, support general and auxiliary ledgers). Export the ledger in several other accounting software formats.
     Module54000Name=PrintIPP
    -Module54000Desc=直接列印(不用打開文件)使用 Cups IPP 介面(印表機可在伺服器上看到,且 CUPS 必須已安裝在伺服器上)。
    +Module54000Desc=Direct print (without opening the documents) using Cups IPP interface (Printer must be visible from server, and CUPS must be installed on server).
     Module55000Name=問卷、調查或票選
    -Module55000Desc=製作問卷、調查或票選的模組(像 Doodle, Styds, Rdvz, ...)
    +Module55000Desc=Module to create online polls, surveys or votes (like Doodle, Studs, Rdvz, ...)
     Module59000Name=利潤
     Module59000Desc=模組管理利潤
     Module60000Name=委員會
     Module60000Desc=模組管理委員會
     Module62000Name=交易條件
    -Module62000Desc=新增功能管理交易條件
    +Module62000Desc=Add features to manage Incoterms
     Module63000Name=資源
     Module63000Desc=管理資源 (印表機、車子、會議室...) 您可在之後分享到事件中
     Permission11=讀取客戶發票
    @@ -651,10 +661,10 @@ Permission32=建立/修改產品資訊
     Permission34=刪除產品資訊
     Permission36=查看/管理隱藏的產品
     Permission38=匯出產品資訊
    -Permission41=讀取專案及任務(分享專案及有關我的專案聯絡人)。也可針對自己或是層級已分配的任務輸入處理時間(時間表)
    -Permission42=建立/修改專案(分享專案及有關我的專案聯絡人)。也可建立任務及分配用戶的專案及任務
    -Permission44=刪除專案(分享專案及有關我的專案聯絡人)
    -Permission45=匯出各式專案
    +Permission41=讀取各專案及各任務(已分享的專案及以我為連絡人的各專案)。也可在被指派的任務對自已或等級中輸入耗用的時間(時間表)
    +Permission42=建立/修改各專案(已分享或以我為連絡人的各專案)。也可以建立各任務及指派用戶到專案及各任務
    +Permission44=刪除各專案(已分享的各專案及以我當任連絡人的各專案)
    +Permission45=匯出各專案
     Permission61=讀取干預/介入
     Permission62=建立/修改干預/介入
     Permission64=刪除干預/介入
    @@ -686,7 +696,7 @@ Permission109=刪除出貨單
     Permission111=讀取財務會計項目
     Permission112=建立/修改/刪除及比較交易
     Permission113=設定財務會計項目(建立、管理分類)
    -Permission114=調整各式交易
    +Permission114=Reconcile transactions
     Permission115=匯出交易和會計描述
     Permission116=帳戶之間交易
     Permission117=管理支票調度
    @@ -694,15 +704,15 @@ Permission121=讀取已連線到用戶的合作方
     Permission122=建立/修改已連線到用戶的合作方
     Permission125=刪除已連線到用戶的合作方
     Permission126=匯出合作方資料
    -Permission141=讀取全部專案及任務(也含我無法聯絡的私人專案)
    -Permission142=建立/修改全部專案及任務(也含我無法聯絡的私人專案)
    -Permission144=刪除全部專案及任務(也含我無法聯絡的私人專案)
    +Permission141=讀取各專案(已分享的各專案及以我當任連絡人的各專案)
    +Permission142=建立/修改全部專案及任務(也包含我不是連絡人的私人專案)
    +Permission144=刪除全部專案及任務(也包含我不是連絡人的私人專案)
     Permission146=讀取提供者
     Permission147=讀取狀況
     Permission151=讀取直接貸方付款訂單
     Permission152=建立/修改直接貸方付款訂單
     Permission153=傳送/傳輸直接貸方付款訂單
    -Permission154=記錄直接貸方付款訂單的點數/拒絕
    +Permission154=Record Credits/Rejections of direct debit payment orders
     Permission161=讀取合約/訂閱
     Permission162=建立/修改合約/訂閱
     Permission163=啟動服務合約/合約的訂閱
    @@ -725,7 +735,7 @@ Permission187=結束供應商訂單情(結案)
     Permission188=取消供應商訂單
     Permission192=建立行
     Permission193=取消行
    -Permission194=讀取頻寬線路
    +Permission194=Read the bandwidth lines
     Permission202=建立ADSL連線
     Permission203=訂購連接訂單
     Permission204=訂購連接
    @@ -750,12 +760,12 @@ Permission244=查看隱藏分類的內容
     Permission251=讀取其他用戶和群組資訊
     PermissionAdvanced251=讀取其他用戶
     Permission252=讀取其他用戶的權限
    -Permission253=建立/修改其他用戶、群組及其權限
    +Permission253=Create/modify other users, groups and permissions
     PermissionAdvanced253=建立/修改內部/外部用戶和權限
     Permission254=只能建立/修改外部用戶資訊
     Permission255=修改其他用戶密碼
     Permission256=刪除或禁用其他用戶
    -Permission262=延伸存取到全部合作方 (不只是用戶是銷售代表的合作方) 。<br>對外部用戶無效 ( 限於自已的提案/建議書、訂單、發票、合約等)。<br>對專案無效 (只有專案權限、可見性和分配事宜的規則)。
    +Permission262=延伸存取全部合作方(不只是合作方的業務代表)。<br>對外部用戶無效(對提案建議書、訂單、發票、通訊錄等)。<br>對專案無效(在專案取存、顯示及指派事件的規則)
     Permission271=讀取 CA
     Permission272=讀取發票
     Permission273=發票問題
    @@ -765,7 +775,7 @@ Permission283=刪除聯絡人資訊
     Permission286=匯出聯絡人資訊
     Permission291=讀取關稅
     Permission292=設定關稅權限
    -Permission293=修改客戶的關稅
    +Permission293=Modify customers tariffs
     Permission300=讀取條碼
     Permission301=建立/修改條碼
     Permission302=刪除條碼
    @@ -787,11 +797,9 @@ Permission401=讀取折扣
     Permission402=建立/修改折扣
     Permission403=驗證折扣
     Permission404=刪除折扣
    -Permission501=讀取員工合約/薪資
    -Permission502=建立/修改員工合約/薪資
    -Permission511=讀取薪資的付款方式
    -Permission512=建立/修改支付的薪資
    -Permission514=刪除薪資
    +Permission511=Read payments of salaries
    +Permission512=Create/modify payments of salaries
    +Permission514=Delete payments of salaries
     Permission517=匯出薪資
     Permission520=讀取借款
     Permission522=建立/修改借款
    @@ -844,8 +852,8 @@ Permission1251=執行匯入大量外部資料到資料庫的功能 (載入資料
     Permission1321=匯出客戶發票、屬性及其付款資訊
     Permission1322=重啟已付帳單
     Permission1421=匯出客戶訂單及屬性資訊
    -Permission20001=讀取離職需求(您的離職及您的下屬)
    -Permission20002=建立/修改您離職需求(您的離職及您的下屬)
    +Permission20001=Read leave requests (your leave and that of your subordinates)
    +Permission20002=Create/modify your leave requests (your leave and that of your subordinates)
     Permission20003=刪除離職需求
     Permission20004=讀取全部離職需求 (甚至非您下屬的用戶)
     Permission20005=建立/修改全部人離職需求(甚至非您下屬的用戶)
    @@ -880,8 +888,8 @@ Permission63001=讀取資源
     Permission63002=建立/修改資源
     Permission63003=刪除資源
     Permission63004=連線資源到行程事件
    -DictionaryCompanyType=合作方類型
    -DictionaryCompanyJuridicalType=合作方的法律形式
    +DictionaryCompanyType=Types of third-parties
    +DictionaryCompanyJuridicalType=Legal forms of third-parties
     DictionaryProspectLevel=展望潛在水準
     DictionaryCanton=州/省
     DictionaryRegion=地區
    @@ -894,7 +902,7 @@ DictionaryVAT=營業稅率或銷售稅率
     DictionaryRevenueStamp=稅票金額
     DictionaryPaymentConditions=付款條件
     DictionaryPaymentModes=付款方式
    -DictionaryTypeContact=聯絡人/地址類型
    +DictionaryTypeContact=Contact address types
     DictionaryTypeOfContainer=網站頁面/容器的類型
     DictionaryEcotaxe=Ecotax(WEEE)
     DictionaryPaperFormat=文件格式
    @@ -908,47 +916,47 @@ DictionarySource=原始的提案/建議書/訂單
     DictionaryAccountancyCategory=報表的個人化群組
     DictionaryAccountancysystem=會計項目表的模組
     DictionaryAccountancyJournal=各式會計日記簿
    -DictionaryEMailTemplates=電子郵件的範本
    +DictionaryEMailTemplates=Email Templates
     DictionaryUnits=單位
     DictionaryProspectStatus=預測狀況
    -DictionaryHolidayTypes=離職類型
    -DictionaryOpportunityStatus=專案/潛在客戶的機會狀況
    +DictionaryHolidayTypes=Types of leave
    +DictionaryOpportunityStatus=Lead status for project/lead
     DictionaryExpenseTaxCat=費用報表 -  交通各式類別
     DictionaryExpenseTaxRange=費用報表 - 依交通類別劃分範圍
     SetupSaved=設定值已儲存
     SetupNotSaved=設定未儲存
     BackToModuleList=返回模組清單明細
    -BackToDictionaryList=回到各式分類明細表
    +BackToDictionaryList=Back to list of Dictionaries
     TypeOfRevenueStamp=稅票的類別
    -VATManagement=營業稅管理
    -VATIsUsedDesc=當建立潛在客戶、發票、訂單等營業稅稅率會以下列標準規則啟動:<br>若賣方不接受營業稅,則營業稅預設為 0 的規則。<br>若(買賣雙方國家)相同時,營業稅率會預設為賣方國家的產品營業稅。<br>若賣方與買方皆歐盟國家且貨物是運輸產品(車子、船舶、飛機),則預設營業稅為 0 ( 營業稅由買方支付給買方國家,非賣方 )。<br>若賣方與買方皆歐盟國家且買方非公司組織,則營業稅預設為銷售產品的營業稅。<br>若賣方與買方皆歐盟國家且買方是公司組織,則營業稅預設為 0。<br>其他例子則預設營業稅為 0。
    -VATIsNotUsedDesc=預設情況下建議的營業稅為 0,可用於像協會、個人或是小型公司。
    -VATIsUsedExampleFR=在法國,指的是有實際會計年度 (簡單真實或一般真實)的公司或組織。是營業稅適用的系統。
    -VATIsNotUsedExampleFR=在法國,指的是選擇微型企業會計年度(特許的營業稅)如非適用營業稅之協會或是公司、組織或是自由專門職業且支付不適用營業稅的特許營業稅。此選項會在發票顯示為"不適用營業稅 - art-293B of CGI"。
    +VATManagement=Sale Tax Management
    +VATIsUsedDesc=By default when creating prospects, invoices, orders etc. the Sale Tax rate follows the active standard rule:<br>If the seller is not subject to Sale tax, then Sale tax defaults to 0. End of rule.<br>If the (seller's country = buyer's country), then the Sale tax by default equals the Sale tax of the product in the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and goods are transport-related products (haulage, shipping, airline), the default Sale tax is 0. This rule is dependant on the seller's country - please consult with your accountant. The Sale tax should be paid by the buyer to their customs office in their country and not to the seller. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is not a company (with a registered intra-Community Sale tax number) then the Sale tax by defaults to the Sale tax of the seller's country. End of rule.<br>If the seller and buyer are both in the European Community and the buyer is a company (with a registered intra-Community Sale tax number), then the Sale tax is 0 by default. End of rule.<br>In any other case the proposed default is Sale tax=0. End of rule.
    +VATIsNotUsedDesc=By default the proposed Sale tax is 0 which can be used for cases like associations, individuals or small companies.
    +VATIsUsedExampleFR=In France, it means companies or organizations having a real fiscal system (Simplified real or normal real).  A system in which Sale tax is declared.
    +VATIsNotUsedExampleFR=In France, it means associations that are non Sale tax declared or companies, organizations or liberal professions that have chosen the micro enterprise fiscal system (Sale tax in franchise) and paid a franchise Sale tax without any Sale tax declaration.  This choice will display the reference "Non applicable Sale tax - art-293B of CGI" on invoices.
     ##### Local Taxes #####
     LTRate=稅率
     LocalTax1IsNotUsed=不使用第二種稅率
    -LocalTax1IsUsedDesc=使用第二稅率類型(除營業稅外)
    -LocalTax1IsNotUsedDesc=不使用其他稅率類型(除營業稅外)
    +LocalTax1IsUsedDesc=Use a second type of tax (other than first one)
    +LocalTax1IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax1Management=第二種稅率類型
     LocalTax1IsUsedExample=
     LocalTax1IsNotUsedExample=
     LocalTax2IsNotUsed=不使用第三種稅率
    -LocalTax2IsUsedDesc=使用第三種稅率類型(除營業稅外)
    -LocalTax2IsNotUsedDesc=不使用其他稅率類型(除營業稅外)
    +LocalTax2IsUsedDesc=Use a third type of tax (other than first one)
    +LocalTax2IsNotUsedDesc=Do not use other type of tax (other than first one)
     LocalTax2Management=第三種稅率類型
     LocalTax2IsUsedExample=
     LocalTax2IsNotUsedExample=
    -LocalTax1ManagementES= RE 管理
    -LocalTax1IsUsedDescES= 當在建立潛在客戶、發票、訂單等後續活動的標準規定,其預設 RE 率為: <br>如果買方沒有受RE,預設 RE = 0。<br>如果買方是接受 RE 則預設為 RE。 <br>
    -LocalTax1IsNotUsedDescES= 預設的 RE 建議值為0。
    -LocalTax1IsUsedExampleES= 在西班牙他們是受到西班牙 IAE 某些特別規範的專業人士。
    -LocalTax1IsNotUsedExampleES= 在西班牙他們是專業及社會人士且受到西班牙 IAE 某些特別的規範。
    -LocalTax2ManagementES= IRPF 管理
    -LocalTax2IsUsedDescES= 當在建立潛在客戶、發票、訂單等後續活動的標準規定,其預設 RE 率為: <br>如果賣方不接受 IRPF,則 IRPF 預設 = 0。 <br>如果賣方受 IRPF 規範,則 IRPF 為預設。 <br>
    -LocalTax2IsNotUsedDescES= 預設的 IRPF 建議值為0。
    -LocalTax2IsUsedExampleES= 在西班牙,自由職業者及提供服務的專業人士及選擇稅務系統模組的公司。
    -LocalTax2IsNotUsedExampleES= 在西班牙他們是生意不是稅務系統模組話題。
    +LocalTax1ManagementES=RE 管理
    +LocalTax1IsUsedDescES=The RE rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the buyer is not subjected to RE, RE by default=0. End of rule.<br>If the buyer is subjected to RE then the RE by default. End of rule.<br>
    +LocalTax1IsNotUsedDescES=預設的 RE 建議值為0。
    +LocalTax1IsUsedExampleES=在西班牙他們是受到西班牙 IAE 某些特別規範的專業人士。
    +LocalTax1IsNotUsedExampleES=在西班牙他們是專業及社會人士且受到西班牙 IAE 某些特別的規範。
    +LocalTax2ManagementES=IRPF 管理
    +LocalTax2IsUsedDescES=The IRPF rate by default when creating prospects, invoices, orders etc. follow the active standard rule:<br>If the seller is not subjected to IRPF, then IRPF by default=0. End of rule.<br>If the seller is subjected to IRPF then the IRPF by default. End of rule.<br>
    +LocalTax2IsNotUsedDescES=預設的 IRPF 建議值為0。
    +LocalTax2IsUsedExampleES=在西班牙,自由職業者及提供服務的專業人士及選擇稅務系統模組的公司。
    +LocalTax2IsNotUsedExampleES=In Spain they are businesses not subject to tax system of modules.
     CalcLocaltax=地方稅報表
     CalcLocaltax1=銷貨 - 採購
     CalcLocaltax1Desc=地方稅報表是由銷貨的地方稅與採購的地方稅之差異。
    @@ -958,7 +966,8 @@ CalcLocaltax3=可否銷售
     CalcLocaltax3Desc=地方稅報表是地方稅銷貨總數
     LabelUsedByDefault=若代號沒有找翻譯字句,則預設使用標籤
     LabelOnDocuments=文件上的標籤
    -NbOfDays=Nb 的天數
    +LabelOrTranslationKey=Label or translation key
    +NbOfDays=No. of days
     AtEndOfMonth=月底
     CurrentNext=現在/下一個
     Offset=抵銷
    @@ -984,7 +993,7 @@ DatabaseUser=資料庫用戶
     DatabasePassword=資料庫密碼
     Tables=表格
     TableName=表格名稱
    -NbOfRecord=Nb 的記錄
    +NbOfRecord=No. of records
     Host=服務器
     DriverType=驅動程式類型
     SummarySystem=系統資訊摘要
    @@ -996,16 +1005,16 @@ Skin=佈景主題
     DefaultSkin=預設佈景主題
     MaxSizeList=清單明細的最大長度
     DefaultMaxSizeList=預設清單明細的最大長度
    -DefaultMaxSizeShortList=縮短名單預設最大長度(即在客戶卡中)
    +DefaultMaxSizeShortList=Default max length for short lists (i.e. in customer card)
     MessageOfDay=一天的訊息
    -MessageLogin=登錄頁的訊息
    +MessageLogin=登入頁的訊息
     LoginPage=登入頁面
     BackgroundImageLogin=背景圖片
     PermanentLeftSearchForm=左側選單上的尋找表單
     DefaultLanguage=預設使用語言(語言代號)
     EnableMultilangInterface=啟用多語言界面
     EnableShowLogo=在左側選單顯示組織標誌
    -CompanyInfo=公司/組織資訊
    +CompanyInfo=公司/組織
     CompanyIds=公司/組織身分
     CompanyName=名稱
     CompanyAddress=地址
    @@ -1021,28 +1030,28 @@ OwnerOfBankAccount=銀行帳戶的擁有者%s
     BankModuleNotActive=銀行帳戶模組沒有啟用
     ShowBugTrackLink=顯示連線"<strong>%s</strong>"
     Alerts=警告
    -DelaysOfToleranceBeforeWarning=警告提醒
    -DelaysOfToleranceDesc=此螢幕允許您定義對每一元件用形狀%s的螢幕警告提醒。
    -Delays_MAIN_DELAY_ACTIONS_TODO=在已計劃的事件(行程事件)中尚未完成的警告提醒(以天計)
    -Delays_MAIN_DELAY_PROJECT_TO_CLOSE=沒有即時結束專案的警告提醒(以天計)
    -Delays_MAIN_DELAY_TASKS_TODO=計劃中任務(專案任務)尚未完成前的警告提醒(以天計)
    -Delays_MAIN_DELAY_ORDERS_TO_PROCESS=對訂單尚未完成程序的警告提醒(以天計)
    -Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay tolerance (in days) before alert on purchase orders not processed yet
    -Delays_MAIN_DELAY_PROPALS_TO_CLOSE=在結束提案/建議書前的警告提醒(以天計)
    -Delays_MAIN_DELAY_PROPALS_TO_BILL=提案/建議書沒有計費的警告提醒(以天計)
    -Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=對服務尚未啟動的警告提醒(以天計)
    -Delays_MAIN_DELAY_RUNNING_SERVICES=對過期服務的警告提醒(以天計)
    -Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=對尚未付款供應商發票的警告提醒(以天計)
    -Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=對尚未付款客戶發票的警告提醒(以天計)
    -Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=正在等待銀行對帳的警告提醒(以天計)
    -Delays_MAIN_DELAY_MEMBERS=對延遲會員費用的警告提醒(以天計)
    -Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=檢查存款的警告提醒(以天計)
    -Delays_MAIN_DELAY_EXPENSEREPORTS=費用報表核准前的警告提醒(以天計)
    -SetupDescription1=在使用 Dolibarr 前"設定區"是一開始要設定的參數。
    -SetupDescription2=The two mandatory setup steps are the following steps (the two first entries in the left setup menu):
    -SetupDescription3=Settings in menu <a href="%s">%s -> %s</a>. This step is required because it defines data used on Dolibarr screens to customize the default behavior of the software (for country-related features for example).
    -SetupDescription4=Settings in menu <a href="%s">%s -> %s</a>. This step is required because Dolibarr ERP/CRM is a collection of several modules/applications, all more or less independent. New features are added to menus for every module you activate.
    -SetupDescription5=其他選單項管理可選的參數。
    +DelaysOfToleranceBeforeWarning=Delays before displaying an alert warning
    +DelaysOfToleranceDesc=This screen allows you to define the delay before an alert is reported onscreen with a %s icon for each late element.
    +Delays_MAIN_DELAY_ACTIONS_TODO=Delay (in days) before alert on planned events (agenda events) not completed yet
    +Delays_MAIN_DELAY_PROJECT_TO_CLOSE=Delay (in days) before alert on project not closed in time
    +Delays_MAIN_DELAY_TASKS_TODO=Delay (in days) before alert on planned tasks (project tasks) not completed yet
    +Delays_MAIN_DELAY_ORDERS_TO_PROCESS=Delay (in days) before alert on orders not processed yet
    +Delays_MAIN_DELAY_SUPPLIER_ORDERS_TO_PROCESS=Delay (in days) before alert on purchase orders not processed yet
    +Delays_MAIN_DELAY_PROPALS_TO_CLOSE=Delay (in days) before alert on proposals to close
    +Delays_MAIN_DELAY_PROPALS_TO_BILL=Delay (in days) before alert on proposals not billed
    +Delays_MAIN_DELAY_NOT_ACTIVATED_SERVICES=Delay (in days) before alert on services to activate
    +Delays_MAIN_DELAY_RUNNING_SERVICES=Delay (in days) before alert on expired services
    +Delays_MAIN_DELAY_SUPPLIER_BILLS_TO_PAY=Delay (in days) before alert on unpaid supplier invoices
    +Delays_MAIN_DELAY_CUSTOMER_BILLS_UNPAYED=Delay (in days) before alert on unpaid client invoices
    +Delays_MAIN_DELAY_TRANSACTIONS_TO_CONCILIATE=Delay (in days) before alert on pending bank reconciliation
    +Delays_MAIN_DELAY_MEMBERS=Delay (in days) before alert on delayed membership fee
    +Delays_MAIN_DELAY_CHEQUES_TO_DEPOSIT=Delay (in days) before alert for cheque deposit to do
    +Delays_MAIN_DELAY_EXPENSEREPORTS=Delay (in days) before alert for expense reports to approve
    +SetupDescription1=Before starting to use Dolibarr some initial parameters must be defined and modules enabled/configured.
    +SetupDescription2=The mandatory setup steps are the 2 first steps in the Setup menu, namely :
    +SetupDescription3=<a href="%s">%s -> %s</a><br>Basic parameters used to customize the default behavior of Dolibarr (e.g for country-related features).
    +SetupDescription4=<a href="%s">%s -> %s</a><br>Dolibarr ERP/CRM is a collection of many modules/applications, all more or less independent. The modules relevant to your needs must be enabled and configured. New items/options are added to menus with the activation of a module.
    +SetupDescription5=Other Setup menu entries provides optional parameters.
     LogEvents=安全稽核事件
     Audit=稽核
     InfoDolibarr=關於 Dolibarr
    @@ -1060,16 +1069,16 @@ LogEventDesc=您可以啟用記錄 Dolibarr 安全事件日誌。管理員就可
     AreaForAdminOnly=設定參數僅由<b>管理員用戶</b>設定。
     SystemInfoDesc=僅供具有系統管理員以唯讀及可見模式取得系統資訊。
     SystemAreaForAdminOnly=此區僅供具有管理員權限用戶。Dolibarr 權限都不能減少此限制。
    -CompanyFundationDesc=在此頁面上編輯您需要管理的公司或基金會的所有已知資訊(點選頁面的”%s“或"%s"按鈕)
    -AccountantDesc=在此頁面上編輯有關於您的會計師/記帳士的資訊
    +CompanyFundationDesc=編輯公司/項目的資訊。點選在頁面下方的 "%s" 或 "%s" 按鈕。
    +AccountantDesc=Edit the details of your accountant/bookkeeper
     AccountantFileNumber=檔案數
     DisplayDesc=您可以選擇與 Dolibarr 的外觀及感受有關的每一項參數
     AvailableModules=可用的程式/模組
     ToActivateModule=為啟動模組則到設定區(首頁 -> 設定 -> 模組)。
     SessionTimeOut=連線階段超時
    -SessionExplanation=當此連線階段由內部PHP連線階段清除器清除時(沒有別的),此數字保證連線階段在遞延前不會到期。內部PHP連線階段清除器不會保證此遞延後的連線階段將會到期。當連線階段清除器在執行時,則此遞延之後將會到期,所以每個<b>%s/%s</b>存取,不只限制由其他階段存取的期間。<br>注意:有外部連線階段清除機器的某些伺服器( DEBIAN, UBUNTU 下的 CRON),不論參數值多少,當預設參數<strong>session.gc_maxlifetime</strong>定義後,連線階段會被破壞。
    +SessionExplanation=This number guarantees that the session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guarantee that the session will expire after this delay. It will expire, after this delay, and when the session cleaner is run, so every <b>%s/%s</b> access, but only during access made by other sessions (if value is 0, it means clearing of session is done only by an external process).<br>Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by an external setup, no matter what the value entered here is.
     TriggersAvailable=可用的觸發器
    -TriggersDesc=觸發器是可以修改Dolibarr工作流程行為的檔案,一旦複製到該資料夾<b>/htdocs/core/triggers</b>。他們實現了新的行動,啟動 Dolibarr 事件(新公司的建立,發票驗證...)。
    +TriggersDesc=Triggers are files that will modify the behavior of Dolibarr workflow once copied into the directory <b>htdocs/core/triggers</b>. They realize new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
     TriggerDisabledByName=在此檔案中觸發器是禁用的,其名稱尾碼<b>-NORUN</b>。
     TriggerDisabledAsModuleDisabled=當模組<b>%s</b>禁用時,此檔案中觸發器是禁用的。
     TriggerAlwaysActive=此檔案中觸發器是活躍的,無論啟動任何 Dolibarr 模組。
    @@ -1079,7 +1088,7 @@ DictionaryDesc=插入全部參考資料。您可加入您的預設值。
     ConstDesc=此頁允許您編輯所有不在前頁的參數。這些主要是為開發人員或進階故障排除預留參數。<a href="https://wiki.dolibarr.org/index.php/Setup_Other#List_of_known_hidden_options" title="External Site - opens in a new window" target="_blank">在此可檢查</a>選項清單明細。
     MiscellaneousDesc=所有其他與安全參數有關的在此定義。
     LimitsSetup=限制及精準度設定
    -LimitsDesc=在此 Dolibarr 使用您定義的限制、精準度及最佳化。
    +LimitsDesc=You can define limits, precisions and optimizations used by Dolibarr here
     MAIN_MAX_DECIMALS_UNIT=單價的小數點
     MAIN_MAX_DECIMALS_TOT=總價的小數點
     MAIN_MAX_DECIMALS_SHOWN=在螢幕上顯示價格的最大位數小數點 (新增<b>...</b>想看到新增的數字<b>...</b>當螢幕上顯示數字被截掉時)
    @@ -1088,16 +1097,16 @@ UnitPriceOfProduct=產品的淨單位價格
     TotalPriceAfterRounding=捨去後總價格(淨價/營業稅/含稅價)
     ParameterActiveForNextInputOnly=下一個輸入參數才能有效
     NoEventOrNoAuditSetup=尚未有被記錄的安全事件。若“設定 - 安全 - 稽核”頁面沒有啟用稽核,則為正常的。
    -NoEventFoundWithCriteria=沒有搜尋到此條件的安全事件。
    +NoEventFoundWithCriteria=No security event has been found for this search criteria.
     SeeLocalSendMailSetup=查看本地的 sendmail 的設定
     BackupDesc=為了完整的 Dolibarr 備份,您必須:
     BackupDesc2=儲存文件資料夾內容 (<b>%s</b>) 包含所有已上傳及產生的檔案 ( 所以此包含在步驟1中所有產生的轉存檔案 )
    -BackupDesc3=儲存您資料庫的內容(<b>%s</b>)到轉存檔案。為完成此您要使用接下來的助理。
    +BackupDesc3=Save content of your database (<b>%s</b>) into a dump file. For this, you can use the following assistant.
     BackupDescX=資料夾應該被存放於安全的地方。
     BackupDescY=產生的轉存檔案應存放於安全的地方。
    -BackupPHPWarning=此法不能保證可備份。使用上一個
    +BackupPHPWarning=Backup cannot be guaranteed with this method. Previous one recommended.
     RestoreDesc=還原 Dolibarr 備份檔,您必須:
    -RestoreDesc2=還原文件資料夾的檔案 (例如 ZIP 檔) 是將以樹狀目錄的方式解壓檔案到新安裝 Dolibarr 的文件資料夾內或是解到目前文件資料夾(<b>%s</b>)。
    +RestoreDesc2=Restore archive file (zip file for example) of documents directory to extract tree of files in documents directory of a new Dolibarr installation or into this current documents directory (<b>%s</b>).
     RestoreDesc3=從備份轉存檔案還原的資料匯入到新安裝的 Dolibarr 或是目前已安裝的程式 (<b>%s</b>)。警告,一旦還原完成,您必須使用回復的資料庫中的用戶及密碼重新連線。還原備份資料庫到目前已安裝的程式,你可以依照接以下的幫助處理。
     RestoreMySQL=匯入 MySQL
     ForcedToByAModule= 啟動的模組<b>%s</b>都強制適用此規則
    @@ -1108,81 +1117,82 @@ YouMustRunCommandFromCommandLineAfterLoginToUser=用戶<b>%s</b>在登入終端
     YourPHPDoesNotHaveSSLSupport=在您 PHP 中 SSL 的功能是不使用
     DownloadMoreSkins=更多佈景主題下載
     SimpleNumRefModelDesc=編號會依照 %syymm-nnnn 的參數規則產生編號。其中yy是年、mm是月、nnnn 是不間斷且不重設的序列數字。
    -ShowProfIdInAddress=顯示在文件中專業  ID
    -ShowVATIntaInAddress=隱藏在文件中營業稅內部編號
    +ShowProfIdInAddress=Show professional id with addresses on documents
    +ShowVATIntaInAddress=Hide intra-Community VAT number with addresses on documents
     TranslationUncomplete=部分翻譯
    -MAIN_DISABLE_METEO=禁用氣象檢視
    +MAIN_DISABLE_METEO=Disable meteorological view
     MeteoStdMod=標準模式
     MeteoStdModEnabled=標準模式啟用
     MeteoPercentageMod=百分比模式
     MeteoPercentageModEnabled=百分比模式啟用
     MeteoUseMod=點擊使用 %s
     TestLoginToAPI=測試登入到 API
    -ProxyDesc=Dolibarr 的某些功能需要連上網路工作。此定義為這類參數。,如果 Dolibarr 服務器是在隱藏在代理服務器後,則那些參數為通知 Dolibarr 要如何通過它來連上網路。
    +ProxyDesc=Some features of Dolibarr need to have internet access to work. Define here the parameters for this. If the Dolibarr server is behind a Proxy server, these parameters tell Dolibarr how to access the internet through it.
     ExternalAccess=外部存取
     MAIN_PROXY_USE=使用代理服務器(否則直接連上網路存取)
     MAIN_PROXY_HOST=代理服務器的名稱/位置
     MAIN_PROXY_PORT=代理服務器的連接埠
     MAIN_PROXY_USER=登入使用代理服務器
     MAIN_PROXY_PASS=使用代理服務器的密碼
    -DefineHereComplementaryAttributes=在此定義全部屬性,也包含了預設可用的屬性,以便讓 %s 模組可以支援顯示。
    +DefineHereComplementaryAttributes=Define any attributes not already available by default, that you want to be supported for %s here.
     ExtraFields=補充屬性
     ExtraFieldsLines=補充屬性(行)
     ExtraFieldsLinesRec=補充屬性 ( 範本發票行)
     ExtraFieldsSupplierOrdersLines=補充屬性(訂單行)
     ExtraFieldsSupplierInvoicesLines=補充屬性(發票行)
     ExtraFieldsThirdParties=補充屬性(合作方)
    -ExtraFieldsContacts=補充屬性(聯絡資訊/地址)
    +ExtraFieldsContacts=Complementary attributes (contact address)
     ExtraFieldsMember=補充屬性(會員)
     ExtraFieldsMemberType=補充屬性(會員類型)
     ExtraFieldsCustomerInvoices=補充屬性(發票)
     ExtraFieldsCustomerInvoicesRec=互補屬性(範本發票)
     ExtraFieldsSupplierOrders=補充屬性(訂單)
     ExtraFieldsSupplierInvoices=補充屬性(發票)
    -ExtraFieldsProject=補充屬性(專案)
    +ExtraFieldsProject=補充屬性(各專案)
     ExtraFieldsProjectTask=補充屬性(任務)
     ExtraFieldHasWrongValue=屬性 %s 有錯誤值。
     AlphaNumOnlyLowerCharsAndNoSpace=只限字母數字和小寫字元且沒有空格
     SendmailOptionNotComplete=警告,在某些Linux系統,從您的電子郵件發送電子郵件,必須包含 sendmail 的執行設置選項 -ba(在您的 php.ini 檔案設定參數 mail.force_extra_parameters )。如果收件人沒有收到電子郵件,嘗試編輯 mail.force_extra_parameters = -ba 這個PHP參數。
     PathToDocuments=文件路徑
     PathDirectory=資料夾
    -SendmailOptionMayHurtBuggedMTA=傳送郵件使用 "PHP mail direct" 的功能可能會由接收方郵件伺服器產生不正確的郵件訊息。結果是某些郵件無法讀取。這是因為某些網路供應商(例如在法國的 Orange)。這不是 Dolibarr 也不是 PHP 問題,而是接收郵件伺服器的問題。然而您可修改在「設定-其他」並增加一個選項 MAIN_FIX_FOR_BUGGED_MTA 為 1 以避免這個問題。然而您也可能有經歷過其他嚴格遵守 SMTP 標準的伺服器問題。因此其他解決方式 (建議) 是使用 "SMTP socket library" 會比較沒有風險。
    +SendmailOptionMayHurtBuggedMTA=Feature to send mails using method "PHP mail direct" will generate a mail message that might not be parsed correctly by some receiving mail servers. The result is that some mails can't be read by people hosted by those bugged platforms. This is the case for some Internet providers (Ex: Orange in France). This is not a problem with Dolibarr or PHP but with the receiving mail server. You can however add an option MAIN_FIX_FOR_BUGGED_MTA to 1 in Setup - Other to modify Dolibarr to avoid this. However, you may experience problems with other servers that strictly use the SMTP standard. The other solution (recommended) is to use the method "SMTP socket library" which has no disadvantages.
     TranslationSetup=翻譯設定
     TranslationKeySearch=尋找翻譯值或字串
     TranslationOverwriteKey=覆寫翻譯字串
     TranslationDesc=如何設定顯示應用程式語言: <br>* 系統上: 選單 <strong> 首頁 - 設定 - 顯示</strong><br> * 每個人: 在用戶卡 (點選螢幕最上方的用戶) 使用 <strong>用戶顯示設定</strong> 分頁。
     TranslationOverwriteDesc=您也可以用覆寫的方式填滿接下來的表格。選擇您的語言從 "%s" 下拉,插入翻譯字串到 "%s" 及您的新翻譯到 "%s"
    -TranslationOverwriteDesc2=您可使用其他分頁幫助您使用知道的翻譯值
    +TranslationOverwriteDesc2=You can use the other tab to help you know which translation key to use
     TranslationString=翻譯字串
     CurrentTranslationString=目前翻譯字串
     WarningAtLeastKeyOrTranslationRequired=搜索條件至少要有一個值或翻譯字串
     NewTranslationStringToShow=顯示新翻譯字串
     OriginalValueWas=已覆蓋原始翻譯。 原始值是:<br><br>%s
    -TransKeyWithoutOriginalValue=您強制不存在於任何語言檔案中新翻譯的翻譯值 '<strong>%s</strong>' 
    +TransKeyWithoutOriginalValue=You forced a new translation for the translation key '<strong>%s</strong>' that does not exist in any language files
     TotalNumberOfActivatedModules=已啟動程式/模組: <b>%s</b> / <b>%s</b>
     YouMustEnableOneModule=您至少要啟用 1 個模組
    -ClassNotFoundIntoPathWarning=在 PHP 路徑沒有找到 Class %s
    +ClassNotFoundIntoPathWarning=Class %s not found in PHP path
     YesInSummer=是的,在夏天
    -OnlyFollowingModulesAreOpenedToExternalUsers=注意,接下來的模組由外部用戶 ( 無論用戶的權限為何 ) 開啟且只有授權的情況下:
    +OnlyFollowingModulesAreOpenedToExternalUsers=Note, only the following modules are opened to external users (whatever the permissions of such users) and only if permissions are granted:
     SuhosinSessionEncrypt=以 Suhosin 加密方式儲存連線階段
     ConditionIsCurrently=目前情況 %s
    -YouUseBestDriver=目前您可用的驅動程式 %s。
    -YouDoNotUseBestDriver=您必須驅動%s,但建議用%s的驅動程式
    -NbOfProductIsLowerThanNoPb=您只能放%s產品/服務到資料庫中。不用任何的最佳化程序。
    +YouUseBestDriver=You use driver %s which is the best driver available currently.
    +YouDoNotUseBestDriver=You use driver %s but driver %s is recommended.
    +NbOfProductIsLowerThanNoPb=You have only %s products/services in the database. This does not require any particular optimization.
     SearchOptim=最佳化的蒐尋
    -YouHaveXProductUseSearchOptim=您放%s產品到資料庫中。您必須在「首頁-設定-其他」增加常數 PRODUCT_DONOTSEARCH_ANYWHERE 為 1 。您限制在資料庫中使用索引以便一輸入字串即蒐尋,以便您立即反應。
    -BrowserIsOK=您使用瀏覽器為%s。此瀏覽器在安全及效能上是沒問題的。
    -BrowserIsKO=您使用中的瀏覽器為%s。此瀏覽器在安全、效能及可靠上是不好的選。我們建議您使用 Firefox, Chrome, Opera 或 Safari。
    +YouHaveXProductUseSearchOptim=You have %s products in the database. You should add the constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Home-Setup-Other. Limit the search to the beginning of strings which makes it possible for the database to use indexes and you should get an immediate response.
    +BrowserIsOK=You are using the %s web browser. This browser is ok for security and performance.
    +BrowserIsKO=You are using the %s web browser. This browser is known to be a bad choice for security, performance and reliability. We recommend using Firefox, Chrome, Opera or Safari.
     XDebugInstalled=已載入 XDebug。
     XCacheInstalled=已載入 XCache。
    -AddRefInList=在清單明細(選擇清單明細或是混合框)中顯示客戶/供應商參考資訊及超連結。合作方將以"CC12345 - SC45678 - The big company coorp"代替"The big company coorp"的名稱顯現。
    -AskForPreferredShippingMethod=詢問合作方的預備傳送方法
    +AddRefInList=Display Customer/Supplier ref. info list (select list or combobox) and most of hyperlink.<br>Third Parties will appear with a name format of "CC12345 - SC45678 - The Big Company corp." instead of "The Big Company corp".
    +AddAdressInList=Display Customer/Supplier adress info list (select list or combobox)<br>Third Parties will appear with a name format of "The Big Company corp. - 21 jump street 123456 Big town - USA" instead of "The Big Company corp".
    +AskForPreferredShippingMethod=Ask for preferred shipping method for Third Parties.
     FieldEdition=欗位的編輯 %s
     FillThisOnlyIfRequired=例如: +2 (若遇到時區偏移問題時才填寫)
     GetBarCode=取得條碼
     ##### Module password generation
     PasswordGenerationStandard=回到由 Dolibarr 本身算法所產生的密碼:8個字元,包含小寫數字和字元。
    -PasswordGenerationNone=不建議產生任何密碼,必須由人工輸入。
    +PasswordGenerationNone=Do not suggest a generated password. Password must be typed in manually.
     PasswordGenerationPerso=根據您個人定義的偏號設定返回密碼。
     SetupPerso=根據你的偏好設定
     PasswordPatternDesc=密碼模式描述
    @@ -1195,23 +1205,23 @@ UserMailRequired=建立用戶時需要輸入電子郵件資訊
     HRMSetup=人資模組設定
     ##### Company setup #####
     CompanySetup=各式公司模組設定
    -CompanyCodeChecker=合作方代碼產生及檢查(客戶或供應商)模組
    -AccountCodeManager=會計代碼產生(客戶或供應商)模組
    +CompanyCodeChecker=Options for automatic generation of customer / vendor codes
    +AccountCodeManager=Options for automatic generation of customer / vendor accounting codes
     NotificationsDesc=電子郵件通知功能允許您在某些 Dolibarr 事件時自動傳送郵件。通知的標的如下:
     NotificationsDescUser=在時間內 * 每位用戶,一用戶。
     NotificationsDescContact=* 每位合作方通訊錄(客戶或供應商),一次一位連絡人。
     NotificationsDescGlobal=* 或在模組設定頁面中設定全域目標的電子郵件。
    -ModelModules=文件範本
    -DocumentModelOdt=從 OpenDocument 的範本產生文件(可由 OpenOffice, KOffice, TextEdit 開啟的 .ODT 或.ODS檔案)
    +ModelModules=Document Templates
    +DocumentModelOdt=Generate documents from OpenDocument templates (.ODT / .ODS files from LibreOffice, OpenOffice, KOffice, TextEdit,...)
     WatermarkOnDraft=在草稿文件上產生浮水印字串(如果以下文字框不是空字串)
     JSOnPaimentBill=啟動在付款表單中自動填入付款行的功能
    -CompanyIdProfChecker=專業術語欄位ID是否獨一無二
    +CompanyIdProfChecker=Rules for Professional IDs
     MustBeUnique=必須是唯一值?
    -MustBeMandatory=強制建立合作方?
    +MustBeMandatory=強制的建立合作方(若稅籍編號或公司已定義類別時)?
     MustBeInvoiceMandatory=強制驗證發票?
     TechnicalServicesProvided=提供的科技服務
     #####DAV #####
    -WebDAVSetupDesc=此是連線到 WebDAV 資料夾。此包含開放給任何知道 URL 用戶的”公開“檔案目錄(若資料夾允許公開)及需要已登入帳號/密碼的”不公開“資料夾的存取。
    +WebDAVSetupDesc=This is the links to access the WebDAV directory. It contains a "public" dir open to any user knowing the URL (if public directory access allowed) and a "private" directory that need an existing login account/password to access.
     WebDavServer=%s伺服器的根目錄 URL:%s
     ##### Webcal setup #####
     WebCalUrlForVCalExport=匯出連接到 <b>%s</b> 格式可在以下連結:%s的
    @@ -1219,6 +1229,7 @@ WebCalUrlForVCalExport=匯出連接到 <b>%s</b> 格式可在以下連結:%s
     BillsSetup=發票模組設定
     BillsNumberingModule=發票及貸方通知單編號模組
     BillsPDFModules=發票文件模組
    +BillsPDFModulesAccordindToInvoiceType=Invoice documents models according to invoice type
     PaymentsPDFModules=付款文件模式
     CreditNote=貸方通知單
     CreditNotes=貸方通知單
    @@ -1275,6 +1286,7 @@ AdherentLoginRequired= 管理每位會員登入
     AdherentMailRequired=建立一位新會員需要電子郵件
     MemberSendInformationByMailByDefault=預設傳送電子郵件以驗證成員(驗證或新訂閲)的確認鍵是開啟的
     VisitorCanChooseItsPaymentMode=訪客可選擇適合的付款模式
    +MEMBER_REMINDER_EMAIL=Enable automatic reminder <b>by emails</b> of expired subscriptions. Note: Module <strong>%s</strong> must be enabled and correctly setup to have reminder sent.
     ##### LDAP setup #####
     LDAPSetup=LDAP 設定
     LDAPGlobalParameters=全域參數
    @@ -1343,11 +1355,11 @@ LDAPTestSynchroMemberType=測試會員類型同步
     LDAPTestSearch= 測試 LDAP 蒐尋
     LDAPSynchroOK=同步測試成功
     LDAPSynchroKO=同步測試失敗
    -LDAPSynchroKOMayBePermissions=同步測試失敗。檢查連線到伺服器的設定是否正確,並允許 LDAP 的昇級
    +LDAPSynchroKOMayBePermissions=Failed synchronization test. Check that the connection to the server is correctly configured and allows LDAP updates
     LDAPTCPConnectOK=TCP 成功地連線到 LDAP 伺服器 ( 伺服器 = %s, 連接埠 = %s )
     LDAPTCPConnectKO=TCP 連線到 LDAP 伺服器失敗 (伺服器 = %s, 連接埠 = %s )
    -LDAPBindOK=成功地連線/驗證到 LDAP 伺服器 ( 伺服器=%s, 連線埠=%s, 管理者 =%s, 密碼=%s)
    -LDAPBindKO=連接/驗證到 LDAP 伺服器失敗 ( 伺服器=%s, 連接埠=%s, 管理者=%s, 密碼=%s)
    +LDAPBindOK=Connect/Authenticate to LDAP server successful (Server=%s, Port=%s, Admin=%s, Password=%s)
    +LDAPBindKO=Connect/Authenticate to LDAP server failed (Server=%s, Port=%s, Admin=%s, Password=%s)
     LDAPSetupForVersion3=第 3 版的 LDAP 伺服器設定
     LDAPSetupForVersion2=第 2 版的 LDAP 伺服器設定
     LDAPDolibarrMapping=Dolibarr 映射
    @@ -1360,8 +1372,8 @@ LDAPFieldLoginSamba=登入 (samba, activedirectory)
     LDAPFieldLoginSambaExample=例如:samaccountname
     LDAPFieldFullname=全名
     LDAPFieldFullnameExample=例如:CN
    -LDAPFieldPasswordNotCrypted=不加密的密碼
    -LDAPFieldPasswordCrypted=密碼加密的
    +LDAPFieldPasswordNotCrypted=Password not encrypted
    +LDAPFieldPasswordCrypted=Password encrypted
     LDAPFieldPasswordExample=例如:userPassword
     LDAPFieldCommonNameExample=例如:CN
     LDAPFieldName=名稱
    @@ -1386,7 +1398,7 @@ LDAPFieldTown=鄉鎮區
     LDAPFieldTownExample=例如:l
     LDAPFieldCountry=國家
     LDAPFieldDescription=描述
    -LDAPFieldDescriptionExample=例如:說明
    +LDAPFieldDescriptionExample=例如:描述
     LDAPFieldNotePublic=公開註解
     LDAPFieldNotePublicExample=例如:公開註解
     LDAPFieldGroupMembers= 群組會員
    @@ -1409,40 +1421,41 @@ LDAPDescMembersTypes=此頁面允許您在 LDAP樹狀圖中對在 Dolibarr 會
     LDAPDescValues=例如 <b>OpenLDAP</b> 的設計值是載入以下架構: <b>core.schema, cosine.schema, inetorgpersion.schema</b>)。若您使用這些值及 OpenLDAP, 修改您的 LDAP 設定檔 <b>slapd.conf</b> 這些 schemas 將全載入。
     ForANonAnonymousAccess=已驗證存取(例如在寫入的存取)
     PerfDolibarr=設定/最佳化效能報表
    -YouMayFindPerfAdviceHere=您可在此頁找到相關效能的檢查項或是建議。
    -NotInstalled=未安裝,所以您伺服器不會減少速度。
    +YouMayFindPerfAdviceHere=This page provides some checks or advice related to performance.
    +NotInstalled=Not installed, so your server is not slowed down by this.
     ApplicativeCache=應用程式的快取
     MemcachedNotAvailable=沒有找到應用程式快取。你可安裝快取伺服器 Memcached 及該伺服器啟動該模組以增加效能。<br>更多的資訊在<a href="http://wiki.dolibarr.org/index.php/Module_MemCached_EN">http://wiki.dolibarr.org/index.php/Module_MemCached_EN</a>。<br>注意多數的伺服器供應商不提供類似的快取伺服器。
     MemcachedModuleAvailableButNotSetup=找到可快取模組的應用程式快取,但模組設定沒有完成。
     MemcachedAvailableAndSetup=啟用由可快取模組決定使用 memcached 伺服器
     OPCodeCache=OPCode 快取
    -NoOPCodeCacheFound=沒找到 OPCode 快取。可能您使用另外的 Xcache 或 eAccelerator (好的選擇) 取代 OPCode 快取,也可能您沒有 OPCode 快取 (很糟的選擇)。
    +NoOPCodeCacheFound=No OPCode cache found. Maybe you are using an OPCode cache other than XCache or eAccelerator (good), or maybe you don't have OPCode cache (very bad).
     HTTPCacheStaticResources=統計資源 (css, img, javascipt) 的 HTTP 快取
     FilesOfTypeCached=HTTP 伺服器已快取%s類型的檔案
     FilesOfTypeNotCached=HTTP 伺服器沒有快取%s類型的檔案
     FilesOfTypeCompressed=HTTP 伺服器已壓縮%s類型的檔案
     FilesOfTypeNotCompressed=HTTP 伺服器沒有已壓縮%s類型的檔案
     CacheByServer=伺服器的快取
    -CacheByServerDesc=例如,使用Apache指令“ExpiresByType image / gif A2592000”
    +CacheByServerDesc=For example using the Apache directive "ExpiresByType image/gif A2592000"
     CacheByClient=瀏覽器的快取
     CompressionOfResources=HTTP 壓縮的反應
    -CompressionOfResourcesDesc=例如:使用 Apache 指令 "AddOutputFilterByType DEFLATE"
    +CompressionOfResourcesDesc=For example using the Apache directive "AddOutputFilterByType DEFLATE"
     TestNotPossibleWithCurrentBrowsers=如自動針測目前的瀏覽器是不可能的
    -DefaultValuesDesc=您可以在此定義/強制建立新記錄時的預設值,以及/或者在列表清單記錄時進行過濾或排序。
    -DefaultCreateForm=預設值(在表單上建立)
    +DefaultValuesDesc=Here you can define/force the default value you want to have when you create a new record, and/or default filters or sort order when your list records.
    +DefaultCreateForm=Default values (to create on forms)
     DefaultSearchFilters=預設尋找過濾器
     DefaultSortOrder=預設排序訂單
     DefaultFocus=預設焦點欄位
    +DefaultMandatory=Mandatory form fields
     ##### Products #####
     ProductSetup=產品模組設定
     ServiceSetup=服務模組設定
     ProductServiceSetup=產品和服務模組設定
     NumberOfProductShowInSelect=在混合選擇清單明細中,最大可供選擇的產品數量(0 =沒有限制)
    -ViewProductDescInFormAbility=在表單上顯示產品描述資訊 (否則則採用彈出式訊息框方式顯示)
    +ViewProductDescInFormAbility=在表格中顯示產品描述(不然就是以彈出方式工具提示)
     MergePropalProductCard=若產品/服務在提案/建議書內,啟動產品/服務中夾檔分頁有選項可將產品 PDF 文件整合成報價/建議書/提案的 azur 式的 PDF
    -ViewProductDescInThirdpartyLanguageAbility=在合作方語言中顯示產品描述資訊
    -UseSearchToSelectProductTooltip=另外您有大量產品編號(>100,000),您可在 " 設定 -> 其他 "中設定常數 PRODUCT_DONOTSEARCH_ANYWHERE 為 1 增加速度。蒐尋則只限在字串的開頭。
    -UseSearchToSelectProduct=請按任一鍵前載入產品混合清單明細的內容(若您有大量的產品時此會增加效率,但會減少方便性)
    +ViewProductDescInThirdpartyLanguageAbility=在合作方的語言中顯示產品描述
    +UseSearchToSelectProductTooltip=Also if you have a large number of products (> 100 000), you can increase speed by setting constant PRODUCT_DONOTSEARCH_ANYWHERE to 1 in Setup->Other. Search will then be limited to start of string.
    +UseSearchToSelectProduct=Wait until you press a key before loading content of product combo list (This may increase performance if you have a large number of products, but it is less convenient)
     SetDefaultBarcodeTypeProducts=產品的預設條碼類型
     SetDefaultBarcodeTypeThirdParties=給合作方使用的預設條碼類型
     UseUnits=定義在訂單、提案/建議書,或是發票版本的衡量單位
    @@ -1503,7 +1516,7 @@ SendingsSetup=出貨單模組設定
     SendingsReceiptModel=出貨單據模式
     SendingsNumberingModules=出貨單編號模組設定
     SendingsAbility=支援客戶的裝貨單
    -NoNeedForDeliveryReceipts=在多數案件中,裝貨單可當成送貨給客戶的送貨單(出貨的清單明細)及客戶收貨且簽收的簽收單。所以客戶送貨收據是有重覆功能且很少啟動的。
    +NoNeedForDeliveryReceipts=In most cases, shipping sheets are used both as sheets for customer deliveries (list of products to send) and sheets that are received and signed by customer. Hence the product deliveries receipt is a duplicated feature and is rarely activated.
     FreeLegalTextOnShippings=裝貨加註文字
     ##### Deliveries #####
     DeliveryOrderNumberingModules=產品交貨收據編號模組
    @@ -1515,18 +1528,18 @@ AdvancedEditor=進階編輯器
     ActivateFCKeditor=以下為進階的編輯器功能,請決定啟用或關閉:
     FCKeditorForCompany=描述及註解採用所見即所視的方式建立或編輯(不含產品及服務)
     FCKeditorForProduct=產品/服務的描述及註解採用所見即所視的方式建立或編輯
    -FCKeditorForProductDetails=針對所有項目(提案/建議書、訂單、發票等)的產品描述採用所見即所視的方式建立及編輯。<font class="warning">警告:當建立 PDF 檔案時會在特定字元或頁面格式時會產生問題,因此鄭重地不建議使用此選項。</font>
    +FCKeditorForProductDetails=WYSIWIG creation/edition of products details lines for all entities (proposals, orders, invoices, etc...). <font class="warning">Warning: Using this option for this case is seriously not recommended as it can create problems with special characters and page formatting when building PDF files.</font>
     FCKeditorForMailing= 以所見即所視的建立/編輯電子郵件 ( 工具 --> 電子郵件 )
     FCKeditorForUserSignature=以所見即所視的建立/編輯用戶簽名檔
     FCKeditorForMail=以所見即所視的建立/編輯全部電子郵件( 除工具 --> 電子郵件外)
     ##### OSCommerce 1 #####
    -OSCommerceErrorConnectOkButWrongDatabase=資料庫連接成功,但資料庫不是OSCommerce的資料庫(在%s表中的關鍵值不是%s)。
    -OSCommerceTestOk=成功地使用用戶'%s'連線到伺服器'%s'上的資料庫'%s'。
    -OSCommerceTestKo1=成功地連線到伺服器'%s',但是資料庫'%s'的無法連上。
    +OSCommerceErrorConnectOkButWrongDatabase=Connection succeeded but database does not appear to be an OSCommerce database (Key %s not found in table %s).
    +OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' successful.
    +OSCommerceTestKo1=Connection to server '%s' succeeded but database '%s' could not be reached.
     OSCommerceTestKo2=連接到服務器'%s的與用戶'%s'的失敗。
     ##### Stock #####
     StockSetup=庫存模組設定
    -IfYouUsePointOfSaleCheckModule=若使用收銀機模組(收銀機模組預設已提供,或是額外模組),此設定可能會被收銀機模組忽略。大多數收銀機模組是預設馬上開立發票及馬上減少庫存,因此不論此處選項設定為何。所以若當在收銀機操作時,您需要或是不要減少庫存,請檢查您收銀機模組的設定。
    +IfYouUsePointOfSaleCheckModule=If you use the Point of Sale module (POS) provided by default or an external module, this setup may be ignored by your POS module. Most POS modules are designed by default to create an invoice immediately and decrease stock irrespective of the options here. So if you need or not to have a stock decrease when registering a sale from your POS, check also your POS module setup.
     ##### Menu #####
     MenuDeleted=選單中刪除
     Menus=選單
    @@ -1548,7 +1561,7 @@ DetailRight=未經批准的條件,顯示灰色菜單
     DetailLangs=長檔案名稱的標籤代碼轉換
     DetailUser=實習生/外部/所有
     Target=目標
    -DetailTarget=目標的連結(_blank top 開一新視窗)
    +DetailTarget=Target for links (_blank top opens a new window)
     DetailLevel=層級(-1:頂部選單,0:頭選單,> 0 選單和子選單)
     ModifMenu=選單上的變化
     DeleteMenu=刪除選單項
    @@ -1563,7 +1576,7 @@ OptionVatDefaultDesc=營業稅的發生時間: <br> - 交貨商品時(本系
     OptionVatDebitOptionDesc=營業稅的發生時間: <br> - 交貨商品(本系統使用發票日期)<br> - 服務部分則為發票(貸方通知單)
     OptionPaymentForProductAndServices=產品及服務的現金基礎
     OptionPaymentForProductAndServicesDesc=營業稅是由於:<br>-支付商品<br>-支付服務費用
    -SummaryOfVatExigibilityUsedByDefault=根據所選的選項預設營業稅時間:
    +SummaryOfVatExigibilityUsedByDefault=Time of VAT eligibility by default according to chosen option:
     OnDelivery=關於交貨
     OnPayment=關於付款
     OnInvoice=關於發票
    @@ -1580,36 +1593,36 @@ AccountancyCodeBuy=採購會計代號
     AgendaSetup=事件及行程模組設定
     PasswordTogetVCalExport=授權匯出連線的值
     PastDelayVCalExport=不要匯出大於~的事件
    -AGENDA_USE_EVENT_TYPE=使用事件類型(管理可到選單設定-->各式分類-->行程事件類型)
    -AGENDA_USE_EVENT_TYPE_DEFAULT=事件類型設定為自動的預設值放到建立事件表單中
    -AGENDA_DEFAULT_FILTER_TYPE=設定自動帶入事件類型到事件檢視的尋找過濾器中
    -AGENDA_DEFAULT_FILTER_STATUS=設定自動帶入事件狀況到事件檢視的尋找過濾器中
    +AGENDA_USE_EVENT_TYPE=Use events types (managed in menu Setup -> Dictionaries -> Type of agenda events)
    +AGENDA_USE_EVENT_TYPE_DEFAULT=Automatically set this default value for type of event in event create form
    +AGENDA_DEFAULT_FILTER_TYPE=Automatically set this type of event in search filter of agenda view
    +AGENDA_DEFAULT_FILTER_STATUS=Automatically set this status for events in search filter of agenda view
     AGENDA_DEFAULT_VIEW=當選定選單行事功能時預設要打開的分頁
     AGENDA_REMINDER_EMAIL=啟用<b>透過電子郵件</b>傳送事件鬧鐘(提醒選項/延遲可以在每個事件上定義)。注意:模組<strong>%s</strong>必須啟用且正確設定鬧鐘才能正確的發送。
    -AGENDA_REMINDER_BROWSER=啟用<b>在用戶瀏覽器</b>顯示事件鬧鐘(若事件日期已到期,每位用戶可以拒絕來自瀏覽器確認的問題。)
    +AGENDA_REMINDER_BROWSER=Enable event reminder <b>on user's browser</b> (when event date is reached, each user is able to refuse this from the browser confirmation question)
     AGENDA_REMINDER_BROWSER_SOUND=啟用音效警告
     AGENDA_SHOW_LINKED_OBJECT=顯示已連接物件到行程的檢視中
     ##### Clicktodial #####
     ClickToDialSetup=點擊撥號模組設定
     ClickToDialUrlDesc=當點選電話圖示時則呼叫 URL。在 URL中,你可使用標籤<br><b>__PHONETO__</b>,他可取代個人的電話號碼以撥打<br><b>__PHONEFROM__</b>,他可以取代個人的電話號碼(您自己的)<br><b>__LOGIN__</b>,他可以取代點選撥打登錄(在用戶卡中定義)<br><b>__PASS__</b>,他可以取代點選撥打密碼(在用戶卡中定義)。
    -ClickToDialDesc=此模組可以直接點選電話號碼。點選圖示會呼叫您手機撥號。這可用於call center 也就是從 Dolibarr 撥號到 SIP 系統。
    +ClickToDialDesc=This module allows to make phone numbers clickable. A click on this icon will call make your phone call the phone number. This can be used to call a call center system from Dolibarr that can call the phone number on a SIP system for example.
     ClickToDialUseTelLink=在電話號碼中使用 "tel:" 連線
    -ClickToDialUseTelLinkDesc=若用戶有智慧型手機或是在同一台電腦上已裝上軟體介面時使用此方法,則當您在瀏覽器上點選時連線到 "tel:" 進行呼叫。若您需要完整服務的解決方案(不需要安裝軟體到本機中),您必須設定為 "否" 及填寫下一欄位。
    +ClickToDialUseTelLinkDesc=Use this method if your users have a softphone or a software interface installed on the same computer as the browser, and called when you click on a link in your browser that starts with "tel:". If you need a full server solution (no need of local software installation), you must set this to "No" and fill next field.
     ##### Point Of Sales (CashDesk) #####
     CashDesk=收銀機
     CashDeskSetup=收銀機模組設定
    -CashDeskThirdPartyForSell=在銷售時預設的合作方
    +CashDeskThirdPartyForSell=Default generic third party to use for sales
     CashDeskBankAccountForSell=預設收到合作方現金付款之帳戶
     CashDeskBankAccountForCheque= 預設收到合作方付款支票之帳戶
     CashDeskBankAccountForCB= 預設收到合作方信用卡支付之帳戶
    -CashDeskDoNotDecreaseStock=禁用當在收銀機銷售完成時滅少庫存(若為「否」,代表為不論庫存模組如何設定,當透過收銀機完成銷售後,立即減少庫存)。
    +CashDeskDoNotDecreaseStock=Disable stock decrease when a sale is done from Point of Sale (if "no", stock decrease is done for each sale done from POS, irrespective of the option set in module Stock).
     CashDeskIdWareHouse=庫存減少時強制並限制倉庫使用
    -StockDecreaseForPointOfSaleDisabled=禁用由收銀機減少庫存
    +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point of Sale disabled
     StockDecreaseForPointOfSaleDisabledbyBatch=在收銀機中庫存減少與批次管理不相容
    -CashDeskYouDidNotDisableStockDecease=您不能禁用透過收銀機銷售時減少庫存。因此必需有倉庫。
    +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sale from Point of Sale. Hence a warehouse is required.
     ##### Bookmark #####
     BookmarkSetup=書籤模組設定
    -BookmarkDesc=這個模組允許您管理書籤。您可在左側選單中以增加捷徑方式連線到 Dolibarr 任何頁面或外部網站。
    +BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or external web sites on your left menu.
     NbOfBoomarkToShow=在左側選單中顯示最大數量的書籤
     ##### WebServices #####
     WebServicesSetup=網站伺服器模組設定
    @@ -1637,7 +1650,7 @@ ChequeReceiptsNumberingModule=檢查收據編號模組
     MultiCompanySetup=多公司模組設定
     ##### Suppliers #####
     SuppliersSetup=供應商模組設定
    -SuppliersCommandModel=採購訂單的完整範本 (標誌...)
    +SuppliersCommandModel=Complete template of purchase order (logo...)
     SuppliersInvoiceModel=供應商發票的完整範本(logo. ...)
     SuppliersInvoiceNumberingModel=供應商發票編號模組
     IfSetToYesDontForgetPermission=若設定為「是的」,則別忘了提供群組或用戶允許第二次批准的權限
    @@ -1649,12 +1662,12 @@ YouCanDownloadFreeDatFileTo=你可以下載一個在%s Maxmind GeoIP 國家 檔
     YouCanDownloadAdvancedDatFileTo=您也可以在%s下載更<b>新的完整版本</b>的 Maxmind GeoIP 國家檔案
     TestGeoIPResult=IP - > 國家轉換的測試
     ##### Projects #####
    -ProjectsNumberingModules=專案編號模組
    +ProjectsNumberingModules=各專案編號模組
     ProjectsSetup=專案模組設定
     ProjectsModelModule=專案的報告文件模式
     TasksNumberingModules=任務編號模組
     TaskModelModule=任務報告文件模式
    -UseSearchToSelectProject=在載入專案組合列表的內容之前,等您按下任一個鍵 ( 若您有大量專案,這可能會提高效能,但它不太方便 )
    +UseSearchToSelectProject=等到按下某個鍵後再載入專案組合列表的內容。<br>如果你有很大量的專案時,此可改善效能,但不方便。
     ##### ECM (GED) #####
     ##### Fiscal Year #####
     AccountingPeriods=會計期間
    @@ -1687,8 +1700,8 @@ YouMayFindNotificationsFeaturesIntoModuleNotification=您可在啟用電子郵
     ListOfNotificationsPerUser=每位用戶* 的通知明細表
     ListOfNotificationsPerUserOrContact=每位用戶* 或每位連絡人** 的通知明細表
     ListOfFixedNotifications=固定通知的明細表
    -GoOntoUserCardToAddMore=到用戶的 "通知" 分頁增加或刪除用戶的通知
    -GoOntoContactCardToAddMore=移到合作方的「通知」分頁以便針對通訊錄/地址等增加或移除通知
    +GoOntoUserCardToAddMore=Go to the tab "Notifications" of a user to add or remove notifications for users
    +GoOntoContactCardToAddMore=Go on the tab "Notifications" of a third party to add or remove notifications for contact addresses
     Threshold=Threshold
     BackupDumpWizard=構建資料庫備份轉儲檔案的精靈
     SomethingMakeInstallFromWebNotPossible=由於以下原因,無法從 Web 界面安裝外部模組:
    @@ -1697,6 +1710,7 @@ InstallModuleFromWebHasBeenDisabledByFile=您的管理塤 已禁用從應用程
     ConfFileMustContainCustom=從應用程式安裝或綁定外部模組需要儲存模組檔案到資料夾<strong>%s</strong>。為由 Dolibarr 擁有此資料夾的處理權,您必須在<strong>conf/conf.php</strong>中新增兩行指令:<br><strong>$dolibarr_main_url_root_alt='/custom';</strong><br><strong>$dolibarr_main_document_root_alt='%s/custom';</strong>
     HighlightLinesOnMouseHover=滑鼠移過時會顯示表格線
     HighlightLinesColor=滑鼠移過時顯示線條的顏色(保持為空白不顯示)
    +HighlightLinesChecked=Highlight color of the line when it is checked (keep empty for no highlight)
     TextTitleColor=頁面標題的文字顏色
     LinkColor=連線的顏色
     PressF5AfterChangingThis=在鍵盤上按 CTRL+F5 或變更此值後清除您的瀏覽器的快取以使其生效
    @@ -1712,16 +1726,16 @@ BackgroundTableLineEvenColor=表單偶數行的背景顏色
     MinimumNoticePeriod=最短通知期限(您的請假必須在前完成)
     NbAddedAutomatically=每月(自動)新增到用戶計數器的天數
     EnterAnyCode=此欄包含定義的參考值。您輸入除特定字元外的任何值。
    -UnicodeCurrency=在括號之間輸入代表貨幣符號的字元數列表。例如: $,輸入 [36] - 巴西 R$ [82,36] - €,輸入 [8364]
    +UnicodeCurrency=Enter here between braces, list of byte number that represent the currency symbol. For example: for $, enter [36] - for brazil real R$ [82,36] - for €, enter [8364]
     ColorFormat=在 HEX 格式中 RGB 顏色,例如: FF0000
     PositionIntoComboList=行的位置放到組合清單中
     SellTaxRate=銷貨稅率
     RecuperableOnly=在法國某些州增值稅是 “Not Perceived but Recoverable”。 在其他情況下,則將該值保持為“否”。
     UrlTrackingDesc=若提供者或運輸服務提供頁面或網站以便確認您的運送,您可在此輸入。您可使用 {TRACKID}值放到 URL 參數中,因此系統將會用戶輸入的追踪碼取代此值放到裝貨單中。
    -OpportunityPercent=當您建立一個機會時,您也要評估專案/潛在的金額 。根據機會的狀況,此金額可能是估計全球金額乘上您的機會所產生的。該值是百分比表示(介於 0 ~ 100)
    +OpportunityPercent=When you create a lead, you will define an estimated amount of project/lead. According to status of lead, this amount may be multiplied by this rate to evaluate global amount all your opportunities may generate. Value is percent (between 0 and 100).
     TemplateForElement=這個範本記錄專用於哪個元件
     TypeOfTemplate=範本類型
    -TemplateIsVisibleByOwnerOnly=只有擁有者才可看到範本
    +TemplateIsVisibleByOwnerOnly=Template is visible to owner only
     VisibleEverywhere=到處可見
     VisibleNowhere=現在可看見
     FixTZ=修正時區
    @@ -1741,16 +1755,16 @@ MailToSendContract=Contracts
     MailToThirdparty=合作方
     MailToMember= 會員
     MailToUser=Users
    -MailToProject=專案頁面
    +MailToProject=各專案頁面
     ByDefaultInList=以預設方式顯示檢視明細表
     YouUseLastStableVersion=您可使用最新穩定版本
     TitleExampleForMajorRelease=您可用公佈的主要發行版本做為訊息的例子(隨時可在您網站上使用它)
     TitleExampleForMaintenanceRelease=您可用公佈的維護版本做為訊息的例子(隨時可在您網站上使用它)
     ExampleOfNewsMessageForMajorRelease=Dolibarr ERP & CRM %s 可以使用。%s 的版本對用戶及開發者是擁有許多新功能的主要發行。您可從 https://www.dolibarr.org portal 下載區 (是穩定版本的子資料夾) 下載。您可讀取 <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog"> ChangeLog </a> 有完整變動明細表。
    -ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s 可以使用。 %s 的版本是維護版本,所以僅修復程式臭蟲。我們建議使用舊版人們昇級到此。當任何維護發行時沒有新功能,也沒有資料結構變更到此版本。您可從 https://www.dolibarr.org portal 下載區 (是穩定版本的子資料夾) 下載。您可讀取 <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> 有完整變動明細表。
    -MultiPriceRuleDesc=當啟用 "每個產品/服務有數個價格" 時,您針對不同產品定義不同價格(每個價格水準)。為節省您的時間,您可輸入根據第一層的價格水準而自動計算的每一層價格水準,所以只要每個產品中輸入第一層的價格即可。此頁面適用於節省您的時間及每一層的價格是相對於第一層的價格。在多數情況您可忽略此頁面。
    +ExampleOfNewsMessageForMaintenanceRelease=Dolibarr ERP & CRM %s is available. Version %s is a maintenance version, so it contains only fixes of bugs. We recommend everybody using an older version to upgrade to this one. As any maintenance release, no new features or data structure change is present in this version. You can download it from the download area of https://www.dolibarr.org portal (subdirectory Stable versions). You can read <a href="https://github.com/Dolibarr/dolibarr/blob/develop/ChangeLog">ChangeLog</a> for complete list of changes.
    +MultiPriceRuleDesc=When option "Several level of prices per product/service" is on, you can define different prices (one per price level) for each product. To save you time, here you can enter a rule to have a price for each level autocalculated according to the price of first level, so you will have to only enter a price for the first level on each product. This page is here to save you time and can be useful only if your prices for each level are relative to first level. You can ignore this page in most cases.
     ModelModulesProduct=產品文件的範本
    -ToGenerateCodeDefineAutomaticRuleFirst=為能自動地產生代號,您必須先定義管理自動定義的條碼數字。
    +ToGenerateCodeDefineAutomaticRuleFirst=To be able to generate codes automatically, you must first define a manager to auto define barcode number.
     SeeSubstitutionVars=請參閱 * 註釋以取得可能的替代變數名單
     SeeChangeLog=查看變更日誌檔案(限英文版)
     AllPublishers=全部發佈者
    @@ -1771,33 +1785,64 @@ AddOtherPagesOrServices=增加其他頁面或服務
     AddModels=新增文件檔或編號的範例檔
     AddSubstitutions=新增替換值
     DetectionNotPossible=不可能檢測
    -UrlToGetKeyToUseAPIs=使用 API 取得 URL (一旦收到就會儲存在資料庫用戶表中,並且必須在每次 API 呼叫中提供)
    +UrlToGetKeyToUseAPIs=Url to get token to use API (once token has been received it is saved in database user table and must be provided on each API call)
     ListOfAvailableAPIs=可用 APIs 的明細表
    -activateModuleDependNotSatisfied=模組 "%s" 相依於模組 "%s" 已遺失,所以模組 "%1$s" 可能無法正確運作。如果你想避免任何安全意外,請安裝模組 "%2$s" 或是禁用模組 "%1$s"
    -CommandIsNotInsideAllowedCommands=您試著執行的命令不是內部可執行的已定義到參數的指令<strong>$dolibarr_main_restrict_os_commands</strong>到<strong>conf.php</strong>檔案。
    +activateModuleDependNotSatisfied=Module "%s" depends on module "%s", that is missing, so module "%1$s" may not work correctly. Please install module "%2$s" or disable module "%1$s" if you want to be safe from any surprise
    +CommandIsNotInsideAllowedCommands=The command you are trying to run is not in the list of allowed commands defined in parameter <strong>$dolibarr_main_restrict_os_commands</strong> in the <strong>conf.php</strong> file.
     LandingPage=登入頁面
    -SamePriceAlsoForSharedCompanies=當您使用多公司模組中選擇 “單一價格” 時,若產品為共享環境時,則所有公司的價格也將相同。
    +SamePriceAlsoForSharedCompanies=若你使用公司模組時選擇"單一價格"時,且共用產品時,所有公司的價格也都會一樣。
     ModuleEnabledAdminMustCheckRights=模組已被啟動。 已啟動模組的權限僅限管理員用戶。 若必要,您可能需要人工方式開授予權限給其他用戶或群組。
    -UserHasNoPermissions=此用戶沒有權限
    -TypeCdr=使用 "無" 若付款日期條件是發票日期加上增量天 (增量是 "幾天" )<br>使用 "月底",則在增量天後,日期必須是到月底 ( + 為可偏移的天數) <br>使用 "目前/下次" 則將付款條件日期定為當月的第一個 N 天 ( N 是指 "天數" )
    +UserHasNoPermissions=This user has no permissions defined
    +TypeCdr=Use "None" if the date of payment term is date of invoice plus a delta in days (delta is field "%s")<br>Use "At end of month", if, after delta, the date must be increased to reach the end of month (+ an optional "%s" in days)<br>Use "Current/Next" to have payment term date being the first Nth of the month after delta (delta is field "%s", N is stored into field "%s")
     BaseCurrency=參考的公司貨幣 (可到公司設定去變更)
    -WarningNoteModuleInvoiceForFrenchLaw=模組 %s 是符合法國法律(Loi Finance 2016)
    -WarningNoteModulePOSForFrenchLaw=該模組 %s 符合法國法律 (Loi Finance 2016),因為模組 Non Reversible Logs 會自動啟動。
    -WarningInstallationMayBecomeNotCompliantWithLaw=您試著安裝模組 %s 此模組來自外部。啟動外部模組代表您信任模組的發佈者及您確定此模組不會對您的應用程序的行為產生負面影響,並且符合您所在國家/地區的法律(%s)。若此模組帶來不合法功能,您要負起使用不合法軟體的責任。
    +WarningNoteModuleInvoiceForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016).
    +WarningNoteModulePOSForFrenchLaw=This module %s is compliant with French laws (Loi Finance 2016) because module Non Reversible Logs is automatically activated.
    +WarningInstallationMayBecomeNotCompliantWithLaw=You are trying to install module %s that is an external module. Activating an external module means you trust the publisher of that module and that you are sure that this module does not adversely impact the behavior of your application, and is compliant with laws of your country (%s). If the module introduces an illegal feature, you become responsible for the use of illegal software.
     MAIN_PDF_MARGIN_LEFT=在 PDF 的左邊邊界
     MAIN_PDF_MARGIN_RIGHT=在 PDF 的右邊邊界
     MAIN_PDF_MARGIN_TOP=在 PDF 的上面邊界
     MAIN_PDF_MARGIN_BOTTOM=在 PDF 下面邊界
    +NothingToSetup=There is no specific setup to do for this module.
     SetToYesIfGroupIsComputationOfOtherGroups=若該群組是其他群組的計算值,則將其設定為 yes
    -EnterCalculationRuleIfPreviousFieldIsYes=若先前欄位設為“是”,則輸入計算規則(例如 'CODEGRP1 + CODEGRP2')
    +EnterCalculationRuleIfPreviousFieldIsYes=Enter calculation rule if previous field was set to Yes (For example 'CODEGRP1+CODEGRP2')
     SeveralLangugeVariatFound=發現數個語言變數
     COMPANY_AQUARIUM_REMOVE_SPECIAL=刪除特殊字元
     COMPANY_AQUARIUM_CLEAN_REGEX=正則表達式過濾器來清理價值 (COMPANY_AQUARIUM_CLEAN_REGEX)
    -GDPRContact=GDPR 連絡人
    -GDPRContactDesc=若您儲存有關歐洲的公司或公民的資料時,您可以在這裡儲存負責“一般資料保護條例”的連絡人
    +GDPRContact=Data Protection Officer (DPO, Data Privacy or GDPR contact)
    +GDPRContactDesc=If you store data about European companies/citizen, you can store the contact who is responsible for the General Data Protection Regulation here
    +HelpOnTooltip=Help text to show on tooltip
    +HelpOnTooltipDesc=Put text or a translation key here for the text to show on a tooltip when this field appears in a form
    +YouCanDeleteFileOnServerWith=您可以用命令列的方式在伺服器上刪除此檔案:<br>%s
    +ChartLoaded=載入會計項目表
    +SocialNetworkSetup=設定社交網路模組
    +EnableFeatureFor=針對 <strong>%s</strong> 啓用功能
    +VATIsUsedIsOff=Note: The option to use sales Tax or VAT has been set to <strong>Off</strong> in the menu %s - %s, so Sale tax or Vat used will always be 0 for sales.
    +SwapSenderAndRecipientOnPDF=Swap sender and recipient address on PDF
    +FeatureSupportedOnTextFieldsOnly=Warning, feature supported on text fields only
    +EmailCollector=Email collector
    +EmailCollectorDescription=Add a scheduled job and a setup page to scan regularly email boxes (using IMAP protocol) and record emails received into your application, at the right place and/or create some record automatically (like leads).
    +NewEmailCollector=New Email Collector
    +EMailHost=Host of email IMAP server
    +MailboxSourceDirectory=Mailbox source directory
    +MailboxTargetDirectory=Mailbox target directory
    +EmailcollectorOperations=Operations to do by collector
    +CollectNow=Collect now
    +DateLastResult=Date last collect
    +LastResult=Last result
    +EmailCollectorConfirmCollectTitle=Email collect confirmation
    +EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
    +NoNewEmailToProcess=No new email (matching filters) to process
    +NothingProcessed=Nothing done
    +XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
    +RecordEvent=Record event
    +CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
    +CodeLastResult=Result code of last collect
    +NbOfEmailsInInbox=Number of email in source directory
     ##### Resource ####
     ResourceSetup=du 模組資源的偏好設定
     UseSearchToSelectResource=使用尋找表單選取資源 (下拉式清單)
     DisabledResourceLinkUser=禁用資源連線到用戶的功能
     DisabledResourceLinkContact=禁用資源連線到通訊錄的功能
     ConfirmUnactivation=確認模組重設
    +OnMobileOnly=只在小螢幕(智慧型手機)
    +DisableProspectCustomerType=Disable the "Prospect + Customer" third party type (so third party must be Prospect or Customer but can't be both)
    diff --git a/htdocs/langs/zh_TW/companies.lang b/htdocs/langs/zh_TW/companies.lang
    index 5fb63ab7c33..c355399f73a 100644
    --- a/htdocs/langs/zh_TW/companies.lang
    +++ b/htdocs/langs/zh_TW/companies.lang
    @@ -1,17 +1,17 @@
     # Dolibarr language file - Source file is en_US - companies
     ErrorCompanyNameAlreadyExists=公司名稱%s已經存在。選擇另外一個。
     ErrorSetACountryFirst=請先設定國家
    -SelectThirdParty=請選擇客戶/供應商
    -ConfirmDeleteCompany=您確定要刪除此公司和所有繼承的資訊嗎?
    -DeleteContact=刪除聯絡人
    +SelectThirdParty=請選擇合作方
    +ConfirmDeleteCompany=您確定要刪除此公司和所有關連的資訊嗎?
    +DeleteContact=刪除連絡人/地址
     ConfirmDeleteContact=您確定要刪除這個連絡人和所有關連資訊?
    -MenuNewThirdParty=新的合作方
    +MenuNewThirdParty=新合作方
     MenuNewCustomer=新客戶
    -MenuNewProspect=新潛力者
    +MenuNewProspect=新的潛在者
     MenuNewSupplier=新供應商
     MenuNewPrivateIndividual=新的私營個體
    -NewCompany=新公司(潪力者、客戶、供應商)
    -NewThirdParty=新合作方(潪力者、客戶、供應商)
    +NewCompany=新公司(潛在者、客戶、供應商)
    +NewThirdParty=新合作方(潛在者、客戶、供應商)
     CreateDolibarrThirdPartySupplier=建立合作方(供應商)
     CreateThirdPartyOnly=建立合作方
     CreateThirdPartyAndContact=建立合作方+其連絡人
    @@ -27,20 +27,20 @@ CompanyName=公司名稱
     AliasNames=別名(商業的,商標,...)
     AliasNameShort=別名
     Companies=公司
    -CountryIsInEEC=國家屬於歐盟經濟體內
    +CountryIsInEEC=在歐盟區的國家
     ThirdPartyName=合作方名稱
     ThirdPartyEmail=合作方電子郵件
     ThirdParty=合作方
     ThirdParties=各式合作方
    -ThirdPartyProspects=潛力者
    -ThirdPartyProspectsStats=潛力者
    +ThirdPartyProspects=潛在者
    +ThirdPartyProspectsStats=潛在者
     ThirdPartyCustomers=客戶
     ThirdPartyCustomersStats=客戶
     ThirdPartyCustomersWithIdProf12=%s或%s的客戶
     ThirdPartySuppliers=供應商
    -ThirdPartyType=合作方類別
    +ThirdPartyType=公司型態
     Individual=私營個體
    -ToCreateContactWithSameName=將自動建立與合作方下的合作方相同資訊的連絡人/地址。在大多數情況下,即使合作方就是等於實際連絡人,您只要建立合作方就足夠了。
    +ToCreateContactWithSameName=當在合作方時,用相同資訊建立合作方及連接到連絡人/地址。即使合作方是自類人,一般仍只要單獨建立合作方就夠了。
     ParentCompany=母公司
     Subsidiaries=附屬公司
     ReportByMonth=月報表
    @@ -75,12 +75,12 @@ Zip=郵遞區號
     Town=城市
     Web=網站
     Poste= 位置
    -DefaultLang=預設語系
    -VATIsUsed=使用中的銷售稅
    -VATIsUsedWhenSelling=這定義了當該合作方向其客戶開具發票時是否包含銷售稅
    +DefaultLang=預設語言
    +VATIsUsed=使用銷售稅
    +VATIsUsedWhenSelling=這定義了合作方在向其客戶開具發票時是否包含銷售稅
     VATIsNotUsed=不使用的銷售稅
     CopyAddressFromSoc=填上合作方的地址
    -ThirdpartyNotCustomerNotSupplierSoNoRef=合作方既不是客戶也不是供應商,沒有可用的引用物件
    +ThirdpartyNotCustomerNotSupplierSoNoRef=合作方不是客戶也不是供應商,不能參考到物件
     ThirdpartyIsNeitherCustomerNorClientSoCannotHaveDiscounts=合作方既不是客戶也不是供應商,折扣不適用
     PaymentBankAccount=付款銀行帳戶
     OverAllProposals=提案/建議書
    @@ -258,12 +258,12 @@ ProfId1DZ=RC
     ProfId2DZ=Art.
     ProfId3DZ=NIF
     ProfId4DZ=NIS
    -VATIntra=銷售稅 ID
    +VATIntra=銷售稅/增值稅編號
     VATIntraShort=稅務 ID
     VATIntraSyntaxIsValid=語法是有效的
     VATReturn=增值稅退稅
    -ProspectCustomer=潛力/客戶
    -Prospect=潛力
    +ProspectCustomer=潛在者/客戶
    +Prospect=潛在者
     CustomerCard=客戶卡
     Customer=客戶
     CustomerRelativeDiscount=相對客戶折扣
    @@ -272,90 +272,90 @@ CustomerRelativeDiscountShort=相對折扣
     CustomerAbsoluteDiscountShort=無條件折扣
     CompanyHasRelativeDiscount=此客戶有預設的<b>%s%%</b>的折扣
     CompanyHasNoRelativeDiscount=此客戶預設沒有相對的折扣
    -HasRelativeDiscountFromSupplier=You have a default discount of <b>%s%%</b> from this supplier
    -HasNoRelativeDiscountFromSupplier=You have no default relative discount from this supplier
    -CompanyHasAbsoluteDiscount=This customer has discount available (credits notes or down payments) for <b>%s</b> %s
    -CompanyHasDownPaymentOrCommercialDiscount=This customer has discount available (commercial, down payments) for <b>%s</b> %s
    -CompanyHasCreditNote=此客戶仍然有信用票據<b>%s或%s</b>的前存款
    -HasNoAbsoluteDiscountFromSupplier=You have no discount credit available from this supplier
    -HasAbsoluteDiscountFromSupplier=You have discounts available (credits notes or down payments) for <b>%s</b> %s from this supplier
    -HasDownPaymentOrCommercialDiscountFromSupplier=You have discounts available (commercial, down payments) for <b>%s</b> %s from this supplier
    -HasCreditNoteFromSupplier=You have credit notes for <b>%s</b> %s from this supplier
    -CompanyHasNoAbsoluteDiscount=此客戶沒有無條件折扣條件
    -CustomerAbsoluteDiscountAllUsers=Absolute customer discounts (granted by all users)
    -CustomerAbsoluteDiscountMy=Absolute customer discounts (granted by yourself)
    -SupplierAbsoluteDiscountAllUsers=Absolute vendor discounts (entered by all users)
    -SupplierAbsoluteDiscountMy=Absolute vendor discounts (entered by yourself)
    +HasRelativeDiscountFromSupplier=此供應商你有預設<b>%s%%</b>折扣
    +HasNoRelativeDiscountFromSupplier=此供應商你沒沒有預設相對折扣
    +CompanyHasAbsoluteDiscount=在<b>%s</b>%s此客戶有折扣(貸方通知單或預付款)
    +CompanyHasDownPaymentOrCommercialDiscount=在 <b>%s</b>%s 此客戶有折扣(貸方通知單或預付款)
    +CompanyHasCreditNote=在<b>%s</b>%s情況下,此客戶仍然有貸方通知單
    +HasNoAbsoluteDiscountFromSupplier=在此供應商下,您沒有可用的折扣
    +HasAbsoluteDiscountFromSupplier=在此供應商的<b>%s</b>%s的情況下,您有可用折扣(貸方通知單或預付訂金)
    +HasDownPaymentOrCommercialDiscountFromSupplier=在此供應商的<b>%s</b>%s您有可用折扣(商業,預付訂金)
    +HasCreditNoteFromSupplier=在此供應商的<b>%s</b>%s情況下您有貸方通知單
    +CompanyHasNoAbsoluteDiscount=此客戶沒有可用的折扣條件
    +CustomerAbsoluteDiscountAllUsers=完整的客戶折扣(由全體用戶授權)
    +CustomerAbsoluteDiscountMy=完整的客戶折扣(由您授權)
    +SupplierAbsoluteDiscountAllUsers=完整的供應商折扣(由全體用戶授權)
    +SupplierAbsoluteDiscountMy=完整的供應商折扣(由您授權)
     DiscountNone=無
     Supplier=供應商
     AddContact=建立聯絡人資訊
     AddContactAddress=建立聯絡資訊及地址
     EditContact=編輯聯絡人/地址
     EditContactAddress=編輯聯絡資訊及地址
    -Contact=聯絡人
    -ContactId=Contact id
    -ContactsAddresses=聯絡資訊/地址
    -FromContactName=Name:
    -NoContactDefinedForThirdParty=此客戶/供應商沒有定義聯絡人
    -NoContactDefined=此客戶(供應商)沒有定義聯絡人
    -DefaultContact=預設聯絡人
    -AddThirdParty=新增客戶/供應商
    +Contact=連絡人
    +ContactId=連絡人ID
    +ContactsAddresses=通訊錄/地址
    +FromContactName=名稱:
    +NoContactDefinedForThirdParty=此合作方沒有定義連絡人
    +NoContactDefined=此沒有定義連絡人
    +DefaultContact=預設連絡人/地址
    +AddThirdParty=建立合作方
     DeleteACompany=刪除公司
     PersonalInformations=個人資料
    -AccountancyCode=Accounting account
    -CustomerCode=客戶代碼
    -SupplierCode=Vendor code
    -CustomerCodeShort=Customer code
    -SupplierCodeShort=Vendor code
    -CustomerCodeDesc=客戶代碼(唯一碼,不同客戶有不同代碼)
    -SupplierCodeDesc=Vendor code, unique for all vendors
    -RequiredIfCustomer=必需填入(如果是客戶或潛在)
    -RequiredIfSupplier=Required if third party is a vendor
    -ValidityControledByModule=正確性是由此模組控制
    -ThisIsModuleRules=這是此模組的規則
    -ProspectToContact=展望接觸
    -CompanyDeleted=公司“%S”已從資料庫中刪除。
    -ListOfContacts=聯絡人名單
    -ListOfContactsAddresses=聯絡人及地址清單
    -ListOfThirdParties=客戶/供應商清單
    +AccountancyCode=會計項目
    +CustomerCode=客戶代號
    +SupplierCode=供應商代號
    +CustomerCodeShort=客戶代號
    +SupplierCodeShort=供應商代號
    +CustomerCodeDesc=全部客戶只能有一種客戶代號
    +SupplierCodeDesc=全部供應商只能一種供應商代號
    +RequiredIfCustomer=若合作方屬於客戶或潛在者,則必需填入
    +RequiredIfSupplier=若合作方是供應商,則必需填入
    +ValidityControledByModule=由模組控制驗證
    +ThisIsModuleRules=此模組的規則
    +ProspectToContact=連絡潛在者
    +CompanyDeleted=公司“%s”已從資料庫中刪除。
    +ListOfContacts=通訊錄/地址名單
    +ListOfContactsAddresses=通訊錄/地址名單
    +ListOfThirdParties=合作方明細表
     ShowCompany=顯示合作方
    -ShowContact=顯示聯絡
    +ShowContact=顯示連絡人
     ContactsAllShort=全部(不過濾)
    -ContactType=聯絡型式
    -ContactForOrders=訂單聯絡人
    -ContactForOrdersOrShipments=訂單或送貨聯絡人
    +ContactType=連絡人型式
    +ContactForOrders=訂單連絡人
    +ContactForOrdersOrShipments=訂單或送貨連絡人
     ContactForProposals=提案/建議書連絡人
    -ContactForContracts=合約聯絡人
    -ContactForInvoices=發票聯絡人
    -NoContactForAnyOrder=非訂單聯絡人
    -NoContactForAnyOrderOrShipments=非訂單或送貨聯絡人
    +ContactForContracts=合約連絡人
    +ContactForInvoices=發票連絡人
    +NoContactForAnyOrder=此連絡人非訂單連絡人
    +NoContactForAnyOrderOrShipments=此連絡人非訂單或送貨連絡人
     NoContactForAnyProposal=此連絡人不屬於任何商業提案/建議書連絡人
    -NoContactForAnyContract=非合同聯絡人
    -NoContactForAnyInvoice=非發票聯絡人
    -NewContact=新增聯絡人
    -NewContactAddress=新增聯絡人及地址
    -MyContacts=我的聯絡人
    +NoContactForAnyContract=此連絡人非合約連絡人
    +NoContactForAnyInvoice=此連絡人非發票連絡人
    +NewContact=新增連絡人
    +NewContactAddress=新連絡人/地址
    +MyContacts=我的通訊錄
     Capital=資本
    -CapitalOf=資本 %s
    -EditCompany=編輯公司
    -ThisUserIsNot=This user is not a prospect, customer nor vendor
    -VATIntraCheck=查詢
    -VATIntraCheckDesc=<b>%s</b>連結允許連上"歐盟營業稅檢查服務"網頁。連上此網頁需具有外部網際網路連線能力。
    +CapitalOf=%s的資本
    +EditCompany=編輯公司資料
    +ThisUserIsNot=此用戶非潛在者、客戶或是供應商
    +VATIntraCheck=確認
    +VATIntraCheckDesc=此連線<b>%s</b>使用歐洲加值稅檢查服務(European VAT checker service (VIES))。此服務需要從服務器連到外部網路才能運行。
     VATIntraCheckURL=http://ec.europa.eu/taxation_customs/vies/vieshome.do
    -VATIntraCheckableOnEUSite=在"歐盟營業稅檢查服務"網頁,查詢 Intracomunnautary 營業稅
    -VATIntraManualCheck=您也可以自行到"歐盟營業稅檢查服務"網頁 <a href="%s" target="_blank">%s</a> 手動檢查
    +VATIntraCheckableOnEUSite=檢查在歐盟區網站內的區內增值稅
    +VATIntraManualCheck=您也可在歐盟網站以人工方式確認<a href="%s" target="_blank">%s</a>
     ErrorVATCheckMS_UNAVAILABLE=檢查不可能的。檢查服務是沒有提供的會員國(%s)中。
    -NorProspectNorCustomer=供應商
    -JuridicalStatus=Legal form
    +NorProspectNorCustomer=非潛在者或客戶
    +JuridicalStatus=法人類型
     Staff=員工人數
     ProspectLevelShort=潛在等級
    -ProspectLevel=潛在等級
    +ProspectLevel=潛在者的可能性
     ContactPrivate=私人
     ContactPublic=公開
     ContactVisibility=隱私性
     ContactOthers=其他
     OthersNotLinkedToThirdParty=其他人,不與客戶/供應商做連接
    -ProspectStatus=潛在狀態
    +ProspectStatus=潛在者狀況
     PL_NONE=無
     PL_UNKNOWN=未知
     PL_LOW=低
    @@ -373,62 +373,62 @@ TE_PRIVATE=私營個體
     TE_OTHER=其他
     StatusProspect-1=無需聯絡
     StatusProspect0=從未聯絡過
    -StatusProspect1=To be contacted
    +StatusProspect1=待連絡
     StatusProspect2=聯絡中
     StatusProspect3=完成連絡
    -ChangeDoNotContact=禁止聯絡
    -ChangeNeverContacted=未曾接觸
    -ChangeToContact=Change status to 'To be contacted'
    -ChangeContactInProcess=聯絡中
    -ChangeContactDone=改變狀態為 " 完成連絡 "
    -ProspectsByStatus=潛在狀態
    +ChangeDoNotContact=改成“禁止連絡”
    +ChangeNeverContacted=改成"未曾連絡過“
    +ChangeToContact=改成”待連絡“
    +ChangeContactInProcess=改成”連絡中“
    +ChangeContactDone=改成 " 完成連絡 "
    +ProspectsByStatus=依狀況排序的潛在者
     NoParentCompany=無
     ExportCardToFormat=匯出格式
    -ContactNotLinkedToCompany=聯系不與任何第三方
    -DolibarrLogin=登錄系統時間
    +ContactNotLinkedToCompany=連絡人沒有連接到任何合作方
    +DolibarrLogin=Dolibarr 登入
     NoDolibarrAccess=沒有任何系統存取記錄
    -ExportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ExportDataset_company_2=聯系和屬性
    -ImportDataset_company_1=Third parties (Companies / foundations / physical people) and properties
    -ImportDataset_company_2=Contacts/Addresses (of third parties or not) and attributes
    -ImportDataset_company_3=Bank accounts of third parties
    -ImportDataset_company_4=Third parties/Sales representatives (Assign sales representatives users to companies)
    +ExportDataset_company_1=各式合作方(公司/基金會/自類人)及其屬性
    +ExportDataset_company_2=通訊錄及其性質
    +ImportDataset_company_1=各式合作方(公司/基金會/自類人)及其屬性
    +ImportDataset_company_2=通訊錄/地址及其屬性
    +ImportDataset_company_3=合作方的銀行帳戶
    +ImportDataset_company_4=各式合作方-業務代表(指派業務代表/用戶到公司)
     PriceLevel=價格水平
     DeliveryAddress=送貨地址
     AddAddress=添加地址
    -SupplierCategory=Vendor category
    -JuridicalStatus200=Independent
    +SupplierCategory=供應商類別
    +JuridicalStatus200=獨立
     DeleteFile=刪除文件
     ConfirmDeleteFile=你確定要刪除這個文件?
    -AllocateCommercial=Assigned to sales representative
    +AllocateCommercial=指定業務代表
     Organization=組織
    -FiscalYearInformation=信息財政年度
    -FiscalMonthStart=本財年開始一個月
    -YouMustAssignUserMailFirst=You must create email for this user first to be able to add emails notifications for him.
    -YouMustCreateContactFirst=To be able to add email notifications, you must first define contacts with valid emails for the third party
    -ListSuppliersShort=List of vendors
    -ListProspectsShort=潛在名單
    -ListCustomersShort=客戶名單
    -ThirdPartiesArea=客戶/供應商資料區
    -LastModifiedThirdParties=Latest %s modified third parties
    -UniqueThirdParties=客戶/供應商圖表種類數
    +FiscalYearInformation=會計年度
    +FiscalMonthStart=會計年度開始月份
    +YouMustAssignUserMailFirst=您必須先為此用戶建立電子郵件(email),然後才能新增電子郵件(email)通知。
    +YouMustCreateContactFirst=為了增加 email 通知,你必須先在合作方的通訊錄有合法 email
    +ListSuppliersShort=供應商明細表
    +ListProspectsShort=潛在者清單
    +ListCustomersShort=客戶明細表
    +ThirdPartiesArea=各式合作方/通訊錄
    +LastModifiedThirdParties=最新修改的合作方%s
    +UniqueThirdParties=合作方的總數
     InActivity=開放
     ActivityCeased=關閉
    -ThirdPartyIsClosed=Third party is closed
    -ProductsIntoElements=產品列表於 %s
    -CurrentOutstandingBill=目前未兌現票據
    -OutstandingBill=最高數量的未兌現票據
    -OutstandingBillReached=Max. for outstanding bill reached
    -OrderMinAmount=Minimum amount for order
    -MonkeyNumRefModelDesc=Return numero with format %syymm-nnnn for customer code and %syymm-nnnn for vendor code where yy is year, mm is month and nnnn is a sequence with no break and no return to 0.
    +ThirdPartyIsClosed=合作方已關閉
    +ProductsIntoElements=產品/服務列表於 %s
    +CurrentOutstandingBill=目前未付帳單
    +OutstandingBill=未付帳單的最大金額
    +OutstandingBillReached=已達最大金額的未付帳單
    +OrderMinAmount=最小訂購量
    +MonkeyNumRefModelDesc=客戶代號回復 %s yymm-nnnn ,且供應商代號為 %s yymm-nnnn 的數字格式,其中 yy 指的是年度,mm指的是月份,nnnn指的是不間斷或返回 0 的序號。
     LeopardNumRefModelDesc=客戶/供應商編號規則不受限制,此編碼可以隨時修改。(可開啟Elephant or Monkey模組來設定編碼規則)
     ManagingDirectors=主管(們)姓名 (執行長, 部門主管, 總裁...)
     MergeOriginThirdparty=重複的客戶/供應商 (你想刪除的客戶/供應商)
     MergeThirdparties=合併客戶/供應商
    -ConfirmMergeThirdparties=Are you sure you want to merge this third party into the current one? All linked objects (invoices, orders, ...) will be moved to current third party, then the thirdparty will be deleted.
    -ThirdpartiesMergeSuccess=Third parties have been merged
    -SaleRepresentativeLogin=Login of sales representative
    -SaleRepresentativeFirstname=First name of sales representative
    -SaleRepresentativeLastname=Last name of sales representative
    -ErrorThirdpartiesMerge=There was an error when deleting the third parties. Please check the log. Changes have been reverted.
    -NewCustomerSupplierCodeProposed=New customer or vendor code suggested on duplicate code
    +ConfirmMergeThirdparties=您確定要合併此合作方到目前的資料?所有已連結的物件( 發票、訂單...)將會移到目前的合作方,並刪除被合併的合作方。
    +ThirdpartiesMergeSuccess=合作方已合併
    +SaleRepresentativeLogin=業務代表的登入
    +SaleRepresentativeFirstname=業務代表的名字
    +SaleRepresentativeLastname=業務代表的姓氏
    +ErrorThirdpartiesMerge=刪除合作方時發生錯誤。請檢查日誌。原變更已被回復。
    +NewCustomerSupplierCodeProposed=Customer or vendor code already used, a new code is suggested
    diff --git a/htdocs/langs/zh_TW/errors.lang b/htdocs/langs/zh_TW/errors.lang
    index 0546500cf5b..e99a62a48d0 100644
    --- a/htdocs/langs/zh_TW/errors.lang
    +++ b/htdocs/langs/zh_TW/errors.lang
    @@ -42,7 +42,7 @@ ErrorBadDateFormat=值“%s”有錯誤的日期格式
     ErrorWrongDate=Date is not correct!
     ErrorFailedToWriteInDir=無法寫在目錄%s
     ErrorFoundBadEmailInFile=找到%S的語法不正確的電子郵件文件中的行(例如行%的電子郵件s =%s)的
    -ErrorUserCannotBeDelete=User cannot be deleted. May be it is associated to Dolibarr entities.
    +ErrorUserCannotBeDelete=User cannot be deleted. Maybe it is associated to Dolibarr entities.
     ErrorFieldsRequired=一些必要的欄位都沒有填補。
     ErrorSubjectIsRequired=The email topic is required
     ErrorFailedToCreateDir=無法創建一個目錄。檢查Web服務器的用戶有權限寫入Dolibarr文件目錄。如果參數<b>safe_mode設置</b>為啟用這個PHP,檢查Dolibarr php文件到Web服務器的用戶擁有(或組)。
    @@ -65,21 +65,22 @@ ErrorNoValueForSelectType=Please fill value for select list
     ErrorNoValueForCheckBoxType=Please fill value for checkbox list
     ErrorNoValueForRadioType=Please fill value for radio list
     ErrorBadFormatValueList=The list value cannot have more than one comma: <u>%s</u>, but need at least one: key,value
    -ErrorFieldCanNotContainSpecialCharacters=菲爾德<b>%s</b>必須不包含特殊字符。
    -ErrorFieldCanNotContainSpecialNorUpperCharacters=Field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldCanNotContainSpecialCharacters=The field <b>%s</b> must not contains special characters.
    +ErrorFieldCanNotContainSpecialNorUpperCharacters=The field <b>%s</b> must not contain special characters, nor upper case characters and cannot contain only numbers.
    +ErrorFieldMustHaveXChar=The field <b>%s</b> must have at least %s characters.
     ErrorNoAccountancyModuleLoaded=沒有一個會計模塊激活
     ErrorExportDuplicateProfil=This profile name already exists for this export set.
     ErrorLDAPSetupNotComplete=Dolibarr - LDAP的匹配是不完整的。
     ErrorLDAPMakeManualTest=甲。LDIF文件已經生成在目錄%s的嘗試加載命令行手動有更多的錯誤信息。
    -ErrorCantSaveADoneUserWithZeroPercentage=若欄位也填上 "由誰完成" 則不能將行動存成 "未開始的狀態"
    +ErrorCantSaveADoneUserWithZeroPercentage=Can't save an action with "status not started" if field "done by" is also filled.
     ErrorRefAlreadyExists=號的創作已經存在。
     ErrorPleaseTypeBankTransactionReportName=Please enter the bank statement name where the entry has to be reported (Format YYYYMM or YYYYMMDD)
    -ErrorRecordHasChildren=Failed to delete record since it has some childs.
    -ErrorRecordHasAtLeastOneChildOfType=Object has at least one child of type %s
    -ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into other object.
    +ErrorRecordHasChildren=刪除失敗是因有子項記錄。
    +ErrorRecordHasAtLeastOneChildOfType=物件至少有一子項類別%s
    +ErrorRecordIsUsedCantDelete=Can't delete record. It is already used or included into another object.
     ErrorModuleRequireJavascript=不能禁用JavaScript必須有此功能的工作。要啟用/禁用JavaScript,進入菜單首頁->安裝->“顯示。
     ErrorPasswordsMustMatch=這兩種類型的密碼必須相互匹配
    -ErrorContactEMail=一個技術性錯誤發生。請聯系管理員,以下連接提供錯誤代碼<b>%s</b>在您的郵件,甚至更好,加入了這個頁面的屏幕拷貝的電子郵件<b>%s。</b>
    +ErrorContactEMail=A technical error occured. Please, contact administrator to following email <b>%s</b> and provide the error code <b>%s</b> in your message, or add a screen copy of this page.
     ErrorWrongValueForField=<b>s'</b>的領域的一些錯誤值<b>的%s(</b>價值<b>'%</b>不匹配正則表達式規則<b>%s)</b>
     ErrorFieldValueNotIn=場數<b>%s</b>錯誤值(值<b>'%s'</b>是不是一個值到領域表<b>%s %s)</b>
     ErrorFieldRefNotIn=錯場數<b>%s</b>值(值<b>'%s'</b>是不是一個的<b>%s</b>現有文獻)
    @@ -88,6 +89,7 @@ ErrorFileIsInfectedWithAVirus=防病毒程序無法驗證文件(文件可能
     ErrorSpecialCharNotAllowedForField=特殊字符不為外地允許“%s的”
     ErrorNumRefModel=存在一個引用(%s)和編號是不符合本規則兼容到數據庫。記錄中刪除或重命名參考激活此模塊。
     ErrorQtyTooLowForThisSupplier=Quantity too low for this vendor or no price defined on this product for this supplier
    +ErrorOrdersNotCreatedQtyTooLow=Some orders haven't been created beacuse of too low quantity
     ErrorModuleSetupNotComplete=Setup of module looks to be uncomplete. Go on Home - Setup - Modules to complete.
     ErrorBadMask=錯誤的遮罩參數值
     ErrorBadMaskFailedToLocatePosOfSequence=沒有序列號錯誤,面具
    @@ -95,7 +97,7 @@ ErrorBadMaskBadRazMonth=錯誤,壞的復位值
     ErrorMaxNumberReachForThisMask=Max number reach for this mask
     ErrorCounterMustHaveMoreThan3Digits=Counter must have more than 3 digits
     ErrorSelectAtLeastOne=錯誤。選擇至少一個條目。
    -ErrorDeleteNotPossibleLineIsConsolidated=刪除沒有可能的,因為記錄是調解到的銀行transation,
    +ErrorDeleteNotPossibleLineIsConsolidated=Delete not possible because record is linked to a bank transaction that is conciliated
     ErrorProdIdAlreadyExist=%s被分配到另一個第三
     ErrorFailedToSendPassword=無法傳送密碼
     ErrorFailedToLoadRSSFile=未能得到RSS提要。嘗試添加恒定MAIN_SIMPLEXMLLOAD_DEBUG,如果錯誤消息不提供足夠的信息。
    @@ -115,6 +117,7 @@ ErrorLoginDoesNotExists=<b>如何正確</b>使用手機與登錄<b>%</b>找不
     ErrorLoginHasNoEmail=這位用戶沒有電子郵件地址。進程中止。
     ErrorBadValueForCode=代碼有錯誤的值類型。再次嘗試以新的價值...
     ErrorBothFieldCantBeNegative=領域的%s及%s可以不消極
    +ErrorFieldCantBeNegativeOnInvoice=Field <strong>%s</strong> can't be negative on such type of invoice. If you want to add a discount line, just create the discount first with link %s on screen and apply it to invoice. You can also ask your admin to set option FACTURE_ENABLE_NEGATIVE_LINES to 1 to restore old behaviour.
     ErrorQtyForCustomerInvoiceCantBeNegative=Quantity for line into customer invoices can't be negative
     ErrorWebServerUserHasNotPermission=<b>%s</b>用來執行Web服務器用戶帳戶沒有該權限
     ErrorNoActivatedBarcode=沒有激活的條碼類型
    @@ -138,7 +141,7 @@ ErrorBadFormat=Bad format!
     ErrorMemberNotLinkedToAThirpartyLinkOrCreateFirst=Error, this member is not yet linked to any third party. Link member to an existing third party or create a new third party before creating subscription with invoice.
     ErrorThereIsSomeDeliveries=Error, there is some deliveries linked to this shipment. Deletion refused.
     ErrorCantDeletePaymentReconciliated=Can't delete a payment that had generated a bank entry that was reconciled
    -ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Payed
    +ErrorCantDeletePaymentSharedWithPayedInvoice=Can't delete a payment shared by at least one invoice with status Paid
     ErrorPriceExpression1=Cannot assign to constant '%s'
     ErrorPriceExpression2=Cannot redefine built-in function '%s'
     ErrorPriceExpression3=Undefined variable '%s' in function definition
    @@ -147,7 +150,7 @@ ErrorPriceExpression5=Unexpected '%s'
     ErrorPriceExpression6=Wrong number of arguments (%s given, %s expected)
     ErrorPriceExpression8=Unexpected operator '%s'
     ErrorPriceExpression9=An unexpected error occured
    -ErrorPriceExpression10=Iperator '%s' lacks operand
    +ErrorPriceExpression10=Operator '%s' lacks operand
     ErrorPriceExpression11=Expecting '%s'
     ErrorPriceExpression14=Division by zero
     ErrorPriceExpression17=Undefined variable '%s'
    @@ -171,10 +174,10 @@ ErrorGlobalVariableUpdater4=SOAP client failed with error '%s'
     ErrorGlobalVariableUpdater5=No global variable selected
     ErrorFieldMustBeANumeric=Field <b>%s</b> must be a numeric value
     ErrorMandatoryParametersNotProvided=Mandatory parameter(s) not provided
    -ErrorOppStatusRequiredIfAmount=You set an estimated amount for this opportunity/lead. So you must also enter its status
    +ErrorOppStatusRequiredIfAmount=You set an estimated amount for this lead/lead. So you must also enter its status
     ErrorFailedToLoadModuleDescriptorForXXX=Failed to load module descriptor class for %s
     ErrorBadDefinitionOfMenuArrayInModuleDescriptor=Bad Definition Of Menu Array In Module Descriptor (bad value for key fk_menu)
    -ErrorSavingChanges=An error has ocurred when saving the changes
    +ErrorSavingChanges=An error has occurred when saving the changes
     ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
     ErrorFileMustHaveFormat=File must have format %s
     ErrorSupplierCountryIsNotDefined=Country for this vendor is not defined. Correct this first.
    @@ -208,6 +211,7 @@ ErrorFileNotFoundWithSharedLink=File was not found. May be the share key was mod
     ErrorProductBarCodeAlreadyExists=The product barcode %s already exists on another product reference.
     ErrorNoteAlsoThatSubProductCantBeFollowedByLot=Note also that using virtual product to have auto increase/decrease of subproducts is not possible when at least one subproduct (or subproduct of subproducts) needs a serial/lot number.
     ErrorDescRequiredForFreeProductLines=Description is mandatory for lines with free product
    +ErrorAPageWithThisNameOrAliasAlreadyExists=The page/container <strong>%s</strong> has the same name or alternative alias that the one your try to use
     
     # Warnings
     WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
    @@ -217,9 +221,9 @@ WarningBookmarkAlreadyExists=本標題或此目標(網址)書簽已存在。
     WarningPassIsEmpty=警告,數據庫密碼是空的。這是一個安全漏洞。您應該添加一個密碼到您的數據庫,並改變你的conf.php文件,以反映這一點。
     WarningConfFileMustBeReadOnly=警告,你的配置文件<b>(conf.php htdocs中/ conf /中</b> ),可覆蓋由Web服務器。這是一個嚴重的安全漏洞。在文件修改權限在閱讀作業系統由Web服務器使用的用戶只模式。如果您的磁盤使用Windows和FAT格式的,你要知道,這個文件系統不允許添加文件的權限,因此不能完全安全的。
     WarningsOnXLines=<b>%S上</b>的源代碼行警告
    -WarningNoDocumentModelActivated=沒有模型,對文檔生成,已被激活。一個模式是選用默認,直到您檢查您的模塊設置。
    +WarningNoDocumentModelActivated=No model, for document generation, has been activated. A model will be chosen by default until you check your module setup.
     WarningLockFileDoesNotExists=Warning, once setup is finished, you must disable install/migrate tools by adding a file <b>install.lock</b> into directory <b>%s</b>. Missing this file is a security hole.
    -WarningUntilDirRemoved=所有安全警告(可見由管理員用戶只)將保持活躍,只要是存在的脆弱性(或常數MAIN_REMOVE_INSTALL_WARNING是在安裝程序->其他設置添加)。
    +WarningUntilDirRemoved=All security warnings (visible by admin users only) will remain active as long as the vulnerability is present (or that constant MAIN_REMOVE_INSTALL_WARNING is added in Setup->Other Setup).
     WarningCloseAlways=Warning, closing is done even if amount differs between source and target elements. Enable this feature with caution.
     WarningUsingThisBoxSlowDown=Warning, using this box slow down seriously all pages showing the box.
     WarningClickToDialUserSetupNotComplete=Setup of ClickToDial information for your user are not complete (see tab ClickToDial onto your user card).
    @@ -229,5 +233,5 @@ WarningTooManyDataPleaseUseMoreFilters=Too many data (more than %s lines). Pleas
     WarningSomeLinesWithNullHourlyRate=Some times were recorded by some users while their hourly rate was not defined. A value of 0 %s per hour was used but this may result in wrong valuation of time spent.
     WarningYourLoginWasModifiedPleaseLogin=Your login was modified. For security purpose you will have to login with your new login before next action.
     WarningAnEntryAlreadyExistForTransKey=An entry already exists for the translation key for this language
    -WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the bulk actions on lists
    +WarningNumberOfRecipientIsRestrictedInMassAction=Warning, number of different recipient is limited to <b>%s</b> when using the mass actions on lists
     WarningDateOfLineMustBeInExpenseReportRange=Warning, the date of line is not in the range of the expense report
    diff --git a/htdocs/langs/zh_TW/interventions.lang b/htdocs/langs/zh_TW/interventions.lang
    index ae954f2257c..52ee414935b 100644
    --- a/htdocs/langs/zh_TW/interventions.lang
    +++ b/htdocs/langs/zh_TW/interventions.lang
    @@ -4,6 +4,7 @@ Interventions=干預
     InterventionCard=干預卡
     NewIntervention=新的幹預
     AddIntervention=Create intervention
    +ChangeIntoRepeatableIntervention=Change to repeatable intervention
     ListOfInterventions=名單幹預
     ActionsOnFicheInter=幹預的行動
     LastInterventions=Latest %s interventions
    @@ -50,8 +51,8 @@ UseServicesDurationOnFichinter=Use services duration for interventions generated
     UseDurationOnFichinter=Hides the duration field for intervention records
     UseDateWithoutHourOnFichinter=Hides hours and minutes off the date field for intervention records
     InterventionStatistics=Statistics of interventions
    -NbOfinterventions=Nb of intervention cards
    -NumberOfInterventionsByMonth=Nb of intervention cards by month (date of validation)
    +NbOfinterventions=No. of intervention cards
    +NumberOfInterventionsByMonth=No. of intervention cards by month (date of validation)
     AmountOfInteventionNotIncludedByDefault=Amount of intervention is not included by default into profit (in most cases, timesheets are used to count time spent). Add option PROJECT_INCLUDE_INTERVENTION_AMOUNT_IN_PROFIT to 1 into home-setup-other to include them.
     ##### Exports #####
     InterId=Intervention id
    diff --git a/htdocs/langs/zh_TW/main.lang b/htdocs/langs/zh_TW/main.lang
    index c04b7119083..b53d1c3b890 100644
    --- a/htdocs/langs/zh_TW/main.lang
    +++ b/htdocs/langs/zh_TW/main.lang
    @@ -50,21 +50,21 @@ ErrorFailedToSendMail=無法傳送郵件 (寄件人=%s、收件人=%s)
     ErrorFileNotUploaded=檔案沒有上傳。檢查檔案大小沒有超過可允許的最大值,即磁碟上的可用空間以及在此資料夾中有沒有相同檔案。
     ErrorInternalErrorDetected=錯誤檢測
     ErrorWrongHostParameter=錯誤的主機參數
    -ErrorYourCountryIsNotDefined=沒有定義您的國家。到首頁-設定-編輯和後再次填寫表單。
    -ErrorRecordIsUsedByChild=無法刪除此記錄。此記錄至少已使用到一個子記錄。
    +ErrorYourCountryIsNotDefined=你沒有定義國家。請到「首頁-設定-編輯」再填入表單中。
    +ErrorRecordIsUsedByChild=刪除此筆記錄失敗。此記錄至少有一筆子記錄。
     ErrorWrongValue=錯誤的值
     ErrorWrongValueForParameterX=參數%s的錯誤值
     ErrorNoRequestInError=在錯誤狀況下,沒有要求
    -ErrorServiceUnavailableTryLater=服務暫時無法使用。請稍後再試。
    +ErrorServiceUnavailableTryLater=現在沒有服務。請稍後再試一次。
     ErrorDuplicateField=在唯一的欄位有重覆的值
    -ErrorSomeErrorWereFoundRollbackIsDone=發現某些錯誤。我們會滾動式修改。
    -ErrorConfigParameterNotDefined=參數<b>%s</b>沒有定義在 Dolibarr 配置檔案 <b>conf.php</b>裡。
    +ErrorSomeErrorWereFoundRollbackIsDone=找到一些錯誤。變更已經回滾(Changes have been rolled back.)。
    +ErrorConfigParameterNotDefined=在 Dolibarr 設定檔案 <b> conf.php </b> 中參數 <b>%s</b> 未定義。
     ErrorCantLoadUserFromDolibarrDatabase=在 Dolibarr 資料庫中無法找到用戶<b>%s</b>。
     ErrorNoVATRateDefinedForSellerCountry=錯誤,沒有定義 '%s' 國家的營業稅率。
     ErrorNoSocialContributionForSellerCountry=錯誤,在 '%s' 國家中沒有定義社會/財務稅務類別。
     ErrorFailedToSaveFile=錯誤,無法儲存檔案。
    -ErrorCannotAddThisParentWarehouse=您正在試著新增目前已經是子倉庫的父倉庫
    -MaxNbOfRecordPerPage=每頁記錄的最大數
    +ErrorCannotAddThisParentWarehouse=你可試著增加目前有一個下游倉庫的上游倉庫
    +MaxNbOfRecordPerPage=每頁記錄最大數量
     NotAuthorized=您無權這樣做。
     SetDate=設定日期
     SelectDate=選擇日期
    @@ -78,10 +78,10 @@ FileRenamed=檔案已成功地變更名稱
     FileGenerated=檔案已成功地產生
     FileSaved=檔案已成功地儲存
     FileUploaded=檔案已成功地上傳
    -FileTransferComplete=檔案成功地已上傳
    +FileTransferComplete=(各)檔案已成功地上傳
     FilesDeleted=檔案已成功地刪除
     FileWasNotUploaded=夾檔所選定的檔案尚未上傳。點選 "附加檔案"。
    -NbOfEntries=條目的數量
    +NbOfEntries=項目數量
     GoToWikiHelpPage=讀取線上求助 (需要連上網路)
     GoToHelpPage=讀取求助
     RecordSaved=記錄保存
    @@ -94,7 +94,7 @@ Undefined=未定義
     PasswordForgotten=忘記密碼?
     NoAccount=沒有帳號?
     SeeAbove=見上文
    -HomeArea=首頁區
    +HomeArea=首頁
     LastConnexion=最新一次連線
     PreviousConnexion=上次連線時間
     PreviousValue=之前值
    @@ -142,6 +142,7 @@ Closed=結案
     Closed2=結案
     NotClosed=尚未結案
     Enabled=啟用
    +Enable=啓用
     Deprecated=放棄
     Disable=禁用
     Disabled=已禁用
    @@ -153,7 +154,7 @@ Update=更新
     Close=結案
     CloseBox=從儀表表中移除小工具
     Confirm=確認
    -ConfirmSendCardByMail=您真要透過電子郵件發送給 <b>%s</b> 此卡片的內容?
    +ConfirmSendCardByMail=你真的要郵寄此卡片的內容給 <b>%s</b>?
     Delete=刪除
     Remove=移除
     Resiliate=終止
    @@ -327,7 +328,7 @@ Copy=複製
     Paste=貼上
     Default=預設
     DefaultValue=預設值
    -DefaultValues=預設值
    +DefaultValues=預設值/過濾值/排序
     Price=價格
     PriceCurrency=價格(目前)
     UnitPrice=單位價格
    @@ -347,7 +348,7 @@ AmountTTCShort=金額(含稅)
     AmountHT=金額(稅後)
     AmountTTC=金額(含稅)
     AmountVAT=稅金
    -MulticurrencyAlreadyPaid=已支付, 原來幣別
    +MulticurrencyAlreadyPaid=已付款,原幣別
     MulticurrencyRemainderToPay=保持付款, 原來幣別
     MulticurrencyPaymentAmount=付款金額, 原來幣別
     MulticurrencyAmountHT=金額(稅後), 原來幣別
    @@ -428,7 +429,7 @@ ActionNotApplicable=不適用
     ActionRunningNotStarted=從頭開始
     ActionRunningShort=進行中
     ActionDoneShort=已完成
    -ActionUncomplete=尚未完成
    +ActionUncomplete=Incomplete
     LatestLinkedEvents=最新 %s 已連結的事件
     CompanyFoundation=公司/組織
     Accountant=會計人員
    @@ -454,7 +455,7 @@ Duration=為期
     TotalDuration=總時間
     Summary=摘要
     DolibarrStateBoard=資料庫統計
    -DolibarrWorkBoard=開放項目儀表板
    +DolibarrWorkBoard=待定貨物
     NoOpenedElementToProcess=沒有已開放元件要處理
     Available=可用的
     NotYetAvailable=尚不可用
    @@ -468,7 +469,7 @@ and=和
     or=或
     Other=其他
     Others=其他
    -OtherInformations=其他信息
    +OtherInformations=其他資訊
     Quantity=數量
     Qty=量
     ChangedBy=修改者
    @@ -506,7 +507,7 @@ None=無
     NoneF=無
     NoneOrSeveral=沒有或幾個
     Late=最新
    -LateDesc=延遲定義記錄是否延遲取決於您的設定。 詢問您的管理員如何從主頁的選單 - 設定 - 警告更改延遲。
    +LateDesc=記錄是否延遲取決於您的設定。 請您的管理員從選單「首頁 - 設置 - 警告」變更延遲。
     NoItemLate=No late item
     Photo=圖片
     Photos=圖片
    @@ -530,18 +531,6 @@ September=九月
     October=十月
     November=十一月
     December=十二月
    -JanuaryMin=一月
    -FebruaryMin=二月
    -MarchMin=三月
    -AprilMin=四月
    -MayMin=五月
    -JuneMin=六月
    -JulyMin=七月
    -AugustMin=八月
    -SeptemberMin=九月
    -OctoberMin=十月
    -NovemberMin=十一月
    -DecemberMin=十二月
     Month01=Jan
     Month02=Feb
     Month03=Mar
    @@ -646,6 +635,8 @@ SendMail=傳送電子郵件
     EMail=電子郵件
     NoEMail=沒有電子郵件
     Email=電子郵件
    +AlreadyRead=Alreay read
    +NotRead=Not read
     NoMobilePhone=沒有手機
     Owner=擁有者
     FollowingConstantsWillBeSubstituted=接下來常數將代替相對應的值。
    @@ -677,7 +668,7 @@ NeverReceived=從未收到
     Canceled=取消
     YouCanChangeValuesForThisListFromDictionarySetup=您可從選單「設定-各式分類」改變此明細表的值
     YouCanChangeValuesForThisListFrom=您可從選單 %s 修改此明細表的值
    -YouCanSetDefaultValueInModuleSetup=當建立一筆新記錄時您可以在設定模組中設定要使用的預設值
    +YouCanSetDefaultValueInModuleSetup=You can set the default value used when creating a new record in module setup
     Color=彩色
     Documents=附加檔案
     Documents2=文件
    @@ -703,7 +694,7 @@ DateOfSignature=簽名日期
     HidePassword=顯示命令時隱藏密碼
     UnHidePassword=顯示實際命令時顯示密碼
     Root=根目錄
    -Informations=資訊
    +Informations=Information
     Page=頁面
     Notes=備註
     AddNewLine=新增一行
    @@ -716,15 +707,15 @@ Merge=合併
     DocumentModelStandardPDF=標準 PDF 範本
     PrintContentArea=顯示頁面列印的主要內容區域
     MenuManager=選單管理器
    -WarningYouAreInMaintenanceMode=警告,您在維護模式,因此目前只能允許登入<b>%s</b>及使用應用程式。
    +WarningYouAreInMaintenanceMode=Warning, you are in maintenance mode, so only login <b>%s</b> is allowed to use the application at this time.
     CoreErrorTitle=系統錯誤
     CoreErrorMessage=很抱歉,產生錯誤。連絡您系統管理員以確認記錄檔或禁用 $dolibarr_main_prod=1 取得更多資訊。
     CreditCard=信用卡
     ValidatePayment=驗證付款
     CreditOrDebitCard=信用或金融卡
     FieldsWithAreMandatory=<b>%s</b>的欄位是強制性
    -FieldsWithIsForPublic=在公開會員明細表中 <b>%s</b> 的欄位是顯示。如果你不想要顯示,檢查“公共”盒並關閉。
    -AccordingToGeoIPDatabase=(根據 GeoIP 的轉換)
    +FieldsWithIsForPublic=Fields with <b>%s</b> are shown in public list of members. If you don't want this, uncheck the "public" box.
    +AccordingToGeoIPDatabase=(according to GeoIP conversion)
     Line=線
     NotSupported=不支持
     RequiredField=必填欄位
    @@ -732,6 +723,8 @@ Result=結果
     ToTest=測試
     ValidateBefore=卡片在使用之前必須經過驗證此功能
     Visibility=能見度
    +Totalizable=Totalizable
    +TotalizableDesc=This field is totalizable in list
     Private=私人
     Hidden=隱蔽
     Resources=資源
    @@ -750,6 +743,7 @@ LinkTo=連線到
     LinkToProposal=連線到報價單/提案/建議書
     LinkToOrder=連線到訂單
     LinkToInvoice=連線到發票
    +LinkToTemplateInvoice=Link to template invoice
     LinkToSupplierOrder=連線到供應商訂單
     LinkToSupplierProposal=連線到供應商報價/提案/建議書
     LinkToSupplierInvoice=連線到供應商發票
    @@ -758,6 +752,7 @@ LinkToIntervention=連線到干預
     CreateDraft=建立草稿
     SetToDraft=回到草稿
     ClickToEdit=點擊後“編輯”
    +ClickToRefresh=Click to refresh
     EditWithEditor=用 CKEditor 編輯
     EditWithTextEditor=用文字編輯器編輯
     EditHTMLSource=編輯 HTML 來源檔
    @@ -772,14 +767,14 @@ ByDay=依日期
     BySalesRepresentative=依業務代表
     LinkedToSpecificUsers=連線到特定用戶連絡人
     NoResults=無結果
    -AdminTools=管理者工具
    +AdminTools=Admin Tools
     SystemTools=系統工具
     ModulesSystemTools=模組工具
     Test=測試
     Element=元件
     NoPhotoYet=還沒有圖片
     Dashboard=儀表板
    -MyDashboard=我的儀表板
    +MyDashboard=My Dashboard
     Deductible=免賠額
     from=從
     toward=toward
    @@ -802,7 +797,7 @@ PrintFile=列印檔案 %s
     ShowTransaction=在銀行帳戶中顯示交易
     ShowIntervention=顯示干預
     ShowContract=顯示合約
    -GoIntoSetupToChangeLogo=移到首頁 - 設定 - 公司 以變更標誌或是移到 首頁 - 設定 - 顯示 中隱藏
    +GoIntoSetupToChangeLogo=回到「首頁-設定-公司」以變更 logo 或是到「首頁-設定-顯示」設定成隱藏
     Deny=拒絕
     Denied=拒絕
     ListOf=%s 的明細表
    @@ -818,12 +813,12 @@ Sincerely=敬祝商祺
     DeleteLine=刪除行
     ConfirmDeleteLine=您認定您要刪除此行嗎?
     NoPDFAvailableForDocGenAmongChecked=在確定記錄的中沒有可用的 PDF 可以產生文件
    -TooManyRecordForMassAction=大量行動選取了記錄。該操作僅限於 %s 記錄明細表。
    +TooManyRecordForMassAction=Too many records selected for mass action. The action is restricted to a list of %s records.
     NoRecordSelected=沒有記錄被選取
     MassFilesArea=透過大量操作構建的文件區域
     ShowTempMassFilesArea=顯示透過大量操作構建的文件區域
    -ConfirmMassDeletion=大量刪除確認
    -ConfirmMassDeletionQuestion=您確定您要刪除 %s 的記錄?
    +ConfirmMassDeletion=Mass delete confirmation
    +ConfirmMassDeletionQuestion=Are you sure you want to delete the %s selected record?
     RelatedObjects=相關物件
     ClassifyBilled=分類計費
     ClassifyUnbilled=分類未開單
    @@ -841,7 +836,7 @@ Calendar=日曆
     GroupBy=群組依...
     ViewFlatList=大圖示明細表
     RemoveString=移除字串‘%s’
    -SomeTranslationAreUncomplete=某些語言可能已翻譯部分或可能包含錯誤。若您發現了,可在 <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a>註冊並修改語言檔。
    +SomeTranslationAreUncomplete=Some of the languages offered may be only partially translated or may contain errors. Please help to correct your language by registering at <a href="https://transifex.com/projects/p/dolibarr/" target="_blank">https://transifex.com/projects/p/dolibarr/</a> to add your improvements.
     DirectDownloadLink=直接下載的連線(公開/外部)
     DirectDownloadInternalLink=直接下載的連線(需要登入及存取權限)
     Download=下載
    @@ -861,16 +856,25 @@ HR=人資
     HRAndBank=人資與銀行
     AutomaticallyCalculated=自動計算
     TitleSetToDraft=回到草稿
    -ConfirmSetToDraft=您確定您要回到草稿狀態?
    +ConfirmSetToDraft=Are you sure you want to go back to Draft status?
     ImportId=輸入ID
     Events=事件
    -EMailTemplates=Email 的範本
    -FileNotShared=檔案沒有分享到外部
    +EMailTemplates=Email templates
    +FileNotShared=File not shared to external public
     Project=專案
     Projects=各式專案
    +LeadOrProject=Lead | Project
    +LeadsOrProjects=Leads | Projects
    +Lead=Lead
    +Leads=Leads
    +ListOpenLeads=List open leads
    +ListOpenProjects=List open projects
    +NewLeadOrProject=New lead or project
     Rights=權限
     LineNb=行數號
     IncotermLabel=交易條件
    +TabLetteringCustomer=Customer lettering
    +TabLetteringSupplier=Supplier lettering
     # Week day
     Monday=星期一
     Tuesday=星期二
    @@ -927,15 +931,15 @@ SearchIntoInterventions=干預/介入
     SearchIntoContracts=合約
     SearchIntoCustomerShipments=客戶關係
     SearchIntoExpenseReports=費用報表
    -SearchIntoLeaves=休假
    +SearchIntoLeaves=Leave
     CommentLink=註解
     NbComments=註解數
     CommentPage=註解空間
     CommentAdded=註解已新增
     CommentDeleted=註解已刪除
     Everybody=每個人
    -PayedBy=由誰付款
    -PayedTo=付款給
    +PayedBy=Paid by
    +PayedTo=Paid to
     Monthly=每月
     Quarterly=每季
     Annual=每年
    @@ -945,6 +949,7 @@ LocalAndRemote=本地與遠端
     KeyboardShortcut=鍵盤快捷鍵
     AssignedTo=指定給
     Deletedraft=刪除草稿
    -ConfirmMassDraftDeletion=草稿大量刪除確認
    +ConfirmMassDraftDeletion=Draft mass delete confirmation
     FileSharedViaALink=透過連線分享檔案
    -
    +SelectAThirdPartyFirst=Select a third party first...
    +YouAreCurrentlyInSandboxMode=You are currently in the %s "sandbox" mode
    diff --git a/htdocs/langs/zh_TW/other.lang b/htdocs/langs/zh_TW/other.lang
    index 2a7b0282b2b..bc1dd0d4d47 100644
    --- a/htdocs/langs/zh_TW/other.lang
    +++ b/htdocs/langs/zh_TW/other.lang
    @@ -3,7 +3,7 @@ SecurityCode=安全代碼
     NumberingShort=N°
     Tools=工具
     TMenuTools=Tools
    -ToolsDesc=All miscellaneous tools not included in other menu entries are collected here.<br><br>All the tools can be reached in the left menu.
    +ToolsDesc=All tools not included in other menu entries are grouped here.<br>All the tools can be accessed via the left menu.
     Birthday=生日
     BirthdayDate=Birthday date
     DateToBirth=出生日期
    @@ -23,7 +23,7 @@ MessageForm=Message on online payment form
     MessageOK=訊息驗證支付返回頁面
     MessageKO=取消支付返回頁面的訊息
     ContentOfDirectoryIsNotEmpty=Content of this directory is not empty.
    -DeleteAlsoContentRecursively=Check to delete all content recursiveley
    +DeleteAlsoContentRecursively=Check to delete all content recursively
     
     YearOfInvoice=Year of invoice date
     PreviousYearOfInvoice=Previous year of invoice date
    @@ -31,9 +31,6 @@ NextYearOfInvoice=Following year of invoice date
     DateNextInvoiceBeforeGen=Date of next invoice (before generation)
     DateNextInvoiceAfterGen=Date of next invoice (after generation)
     
    -Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    -Notify_FICHINTER_VALIDATE=幹預驗證
    -Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_ORDER_VALIDATE=驗證客戶訂單
     Notify_ORDER_SENTBYMAIL=通過郵件發送的客戶訂單
     Notify_ORDER_SUPPLIER_SENTBYMAIL=通過郵件發送的供應商的訂單
    @@ -41,8 +38,8 @@ Notify_ORDER_SUPPLIER_VALIDATE=Supplier order recorded
     Notify_ORDER_SUPPLIER_APPROVE=供應商為了批準
     Notify_ORDER_SUPPLIER_REFUSE=供應商的訂單被拒絕
     Notify_PROPAL_VALIDATE=驗證客戶的客戶提案/建議書
    -Notify_PROPAL_CLOSE_SIGNED=Customer propal closed signed
    -Notify_PROPAL_CLOSE_REFUSED=Customer propal closed refused
    +Notify_PROPAL_CLOSE_SIGNED=Customer proposal closed signed
    +Notify_PROPAL_CLOSE_REFUSED=Customer proposal closed refused
     Notify_PROPAL_SENTBYMAIL=通過郵件發送的商業提案/建議書
     Notify_WITHDRAW_TRANSMIT=傳輸撤軍
     Notify_WITHDRAW_CREDIT=信貸撤離
    @@ -51,15 +48,17 @@ Notify_COMPANY_CREATE=第三方創建
     Notify_COMPANY_SENTBYMAIL=Mails sent from third party card
     Notify_BILL_VALIDATE=客戶發票驗證
     Notify_BILL_UNVALIDATE=Customer invoice unvalidated
    -Notify_BILL_PAYED=客戶發票payed
    +Notify_BILL_PAYED=Customer invoice paid
     Notify_BILL_CANCEL=客戶發票取消
     Notify_BILL_SENTBYMAIL=通過郵件發送的客戶發票
     Notify_BILL_SUPPLIER_VALIDATE=供應商發票驗證
    -Notify_BILL_SUPPLIER_PAYED=供應商發票payed
    +Notify_BILL_SUPPLIER_PAYED=Supplier invoice paid
     Notify_BILL_SUPPLIER_SENTBYMAIL=通過郵件發送的供應商發票
     Notify_BILL_SUPPLIER_CANCELED=Supplier invoice cancelled
     Notify_CONTRACT_VALIDATE=合同驗證
     Notify_FICHEINTER_VALIDATE=幹預驗證
    +Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
    +Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
     Notify_SHIPPING_VALIDATE=航運驗證
     Notify_SHIPPING_SENTBYMAIL=通過電子郵件發送的航運
     Notify_MEMBER_VALIDATE=會員驗證
    @@ -71,24 +70,28 @@ Notify_PROJECT_CREATE=Project creation
     Notify_TASK_CREATE=Task created
     Notify_TASK_MODIFY=Task modified
     Notify_TASK_DELETE=Task deleted
    +Notify_EXPENSE_REPORT_VALIDATE=Expense report validated (approval required)
    +Notify_EXPENSE_REPORT_APPROVE=Expense report approved
    +Notify_HOLIDAY_VALIDATE=Leave request validated (approval required)
    +Notify_HOLIDAY_APPROVE=Leave request approved
     SeeModuleSetup=See setup of module %s
     NbOfAttachedFiles=所附文件數/文件
     TotalSizeOfAttachedFiles=附件大小總計
     MaxSize=檔案最大
     AttachANewFile=附加一個新的檔案/文件
     LinkedObject=鏈接對象
    -NbOfActiveNotifications=Number of notifications (nb of recipient emails)
    +NbOfActiveNotifications=Number of notifications (no. of recipient emails)
     PredefinedMailTest=__(Hello)__\nThis is a test mail sent to __EMAIL__.\nThe two lines are separated by a carriage return.\n\n__USER_SIGNATURE__
     PredefinedMailTestHtml=__(Hello)__\nThis is a <b>test</b> mail (the word test must be in bold).<br>The two lines are separated by a carriage return.<br><br>__USER_SIGNATURE__
    -PredefinedMailContentSendInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to not be payed. So this is the invoice in attachment again, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendProposal=__(Hello)__\n\nYou will find here the commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nYou will find here the price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendOrder=__(Hello)__\n\nYou will find here the order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nYou will find here our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nYou will find here the invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendShipping=__(Hello)__\n\nYou will find here the shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    -PredefinedMailContentSendFichInter=__(Hello)__\n\nYou will find here the intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendInvoiceReminder=__(Hello)__\n\nWe would like to warn you that the invoice  __REF__ seems to have not been paid. The invoice is attached, as a reminder.\n\n__ONLINE_PAYMENT_TEXT_AND_URL__\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendProposal=__(Hello)__\n\nPlease find attached commercial proposal __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierProposal=__(Hello)__\n\nPlease find attached price request __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendOrder=__(Hello)__\n\nPlease find attached order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierOrder=__(Hello)__\n\nPlease find attached our order __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendSupplierInvoice=__(Hello)__\n\nPlease find attached invoice __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendShipping=__(Hello)__\n\nPlease find attached shipping __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
    +PredefinedMailContentSendFichInter=__(Hello)__\n\nPlease find attached intervention __REF__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentThirdparty=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentUser=__(Hello)__\n\n\n__(Sincerely)__\n\n__USER_SIGNATURE__
     PredefinedMailContentLink=You can click on the link below to make your payment if it is not already done.\n\n%s\n\n
    @@ -172,7 +175,7 @@ EnableGDLibraryDesc=Install or enable GD library on your PHP installation to use
     ProfIdShortDesc=<b>教授ID為%s</b>是一個國家的信息取決於第三方。 <br>例如,對於國家的<b>%s,</b>它的代碼<b>的%s。</b>
     DolibarrDemo=Dolibarr的ERP / CRM的演示
     StatsByNumberOfUnits=Statistics for sum of qty of products/services
    -StatsByNumberOfEntities=Statistics in number of referring entities (nb of invoice, or order...)
    +StatsByNumberOfEntities=Statistics in number of referring entities (no. of invoice, or order...)
     NumberOfProposals=提案/建議書的數量
     NumberOfCustomerOrders=Number of customer orders
     NumberOfCustomerInvoices=Number of customer invoices
    @@ -185,9 +188,10 @@ NumberOfUnitsCustomerInvoices=Number of units on customer invoices
     NumberOfUnitsSupplierProposals=供應商提案/建議書的單位數量
     NumberOfUnitsSupplierOrders=Number of units on supplier orders
     NumberOfUnitsSupplierInvoices=Number of units on supplier invoices
    -EMailTextInterventionAddedContact=A newintervention %s has been assigned to you.
    +EMailTextInterventionAddedContact=A new intervention %s has been assigned to you.
     EMailTextInterventionValidated=幹預%s已被驗證。
     EMailTextInvoiceValidated=發票%s已被確認。
    +EMailTextInvoicePayed=The invoice %s has been paid.
     EMailTextProposalValidated=此提案/建議書 %s 已經驗證。
     EMailTextProposalClosedSigned=此提案/建議書 %s 已結束簽約。
     EMailTextOrderValidated=該命令%s已被驗證。
    @@ -197,6 +201,10 @@ EMailTextOrderApprovedBy=該命令%s已被%s批準
     EMailTextOrderRefused=該命令%s已被拒絕。
     EMailTextOrderRefusedBy=該命令%s已經%s拒絕
     EMailTextExpeditionValidated=The shipping %s has been validated.
    +EMailTextExpenseReportValidated=The expense report %s has been validated.
    +EMailTextExpenseReportApproved=The expensereport %s has been approved.
    +EMailTextHolidayValidated=The leave request %s has been validated.
    +EMailTextHolidayApproved=The leave request %s has been approved.
     ImportedWithSet=輸入數據集
     DolibarrNotification=自動通知
     ResizeDesc=輸入新的高度新的寬度<b>或</b> 。比率將維持在調整大小...
    @@ -204,7 +212,7 @@ NewLength=新寬
     NewHeight=新高度
     NewSizeAfterCropping=新的尺寸裁剪後
     DefineNewAreaToPick=定義圖像的新領域挑選(圖像左側單擊然後拖動,直到到達對面角落)
    -CurrentInformationOnImage=對當前圖像信息
    +CurrentInformationOnImage=This tool was designed to help you to resize or crop an image. This is the information on the current edited image
     ImageEditor=圖像編輯器
     YouReceiveMailBecauseOfNotification=您收到此消息,因為您的電子郵件已被添加到列表的目標是特定的事件通知到%%s的軟件第
     YouReceiveMailBecauseOfNotification2=此事件是:
    @@ -235,6 +243,10 @@ YourPasswordMustHaveAtLeastXChars=Your password must have at least <strong>%s</s
     YourPasswordHasBeenReset=Your password has been reset successfully
     ApplicantIpAddress=IP address of applicant
     SMSSentTo=SMS sent to %s
    +MissingIds=Missing ids
    +ThirdPartyCreatedByEmailCollector=Third party created by email collector from email ID %s
    +ContactCreatedByEmailCollector=Contact/address created by email collector from email ID %s
    +ProjectCreatedByEmailCollector=Project created by email collector from email ID %s
     
     ##### Export #####
     ExportsArea=出口地區
    diff --git a/htdocs/langs/zh_TW/projects.lang b/htdocs/langs/zh_TW/projects.lang
    index ae068e55c55..f8704cea387 100644
    --- a/htdocs/langs/zh_TW/projects.lang
    +++ b/htdocs/langs/zh_TW/projects.lang
    @@ -33,14 +33,14 @@ ConfirmDeleteAProject=您確定要刪除此專案嗎?
     ConfirmDeleteATask=您確定要刪除此任務嗎?
     OpenedProjects=Open projects
     OpenedTasks=Open tasks
    -OpportunitiesStatusForOpenedProjects=Opportunities amount of open projects by status
    -OpportunitiesStatusForProjects=Opportunities amount of projects by status
    +OpportunitiesStatusForOpenedProjects=Leads amount of open projects by status
    +OpportunitiesStatusForProjects=Leads amount of projects by status
     ShowProject=顯示專案
     ShowTask=顯示任務
     SetProject=設定專案
     NoProject=有定義的專案或擁有者
    -NbOfProjects=專案號
    -NbOfTasks=Nb of tasks
    +NbOfProjects=No. of projects
    +NbOfTasks=No. of tasks
     TimeSpent=花費的時間
     TimeSpentByYou=Time spent by you
     TimeSpentByUser=Time spent by user
    @@ -79,19 +79,20 @@ GoToListOfTimeConsumed=Go to list of time consumed
     GoToListOfTasks=Go to list of tasks
     GoToGanttView=Go to Gantt view
     GanttView=Gantt View
    -ListProposalsAssociatedProject=指定給專案的商業提案/建議書清單
    -ListOrdersAssociatedProject=List of customer orders associated with the project
    -ListInvoicesAssociatedProject=List of customer invoices associated with the project
    -ListPredefinedInvoicesAssociatedProject=List of customer template invoices associated with project
    -ListSupplierOrdersAssociatedProject=List of supplier orders associated with the project
    -ListSupplierInvoicesAssociatedProject=List of supplier invoices associated with the project
    -ListContractAssociatedProject=名單與項目有關的合同
    -ListShippingAssociatedProject=List of shippings associated with the project
    -ListFichinterAssociatedProject=名單與項目相關的幹預措施
    -ListExpenseReportsAssociatedProject=List of expense reports associated with the project
    -ListDonationsAssociatedProject=List of donations associated with the project
    -ListVariousPaymentsAssociatedProject=List of miscellaneous payments associated with the project
    -ListActionsAssociatedProject=名單與項目有關的行動
    +ListProposalsAssociatedProject=List of the commercial proposals related to the project
    +ListOrdersAssociatedProject=List of customer orders related to the project
    +ListInvoicesAssociatedProject=List of customer invoices related to the project
    +ListPredefinedInvoicesAssociatedProject=List of customer template invoices related to the project
    +ListSupplierOrdersAssociatedProject=List of supplier orders related to the project
    +ListSupplierInvoicesAssociatedProject=List of supplier invoices related to the project
    +ListContractAssociatedProject=List of contracts related to the project
    +ListShippingAssociatedProject=List of shippings related to the project
    +ListFichinterAssociatedProject=List of interventions related to the project
    +ListExpenseReportsAssociatedProject=List of expense reports related to the project
    +ListDonationsAssociatedProject=List of donations related to the project
    +ListVariousPaymentsAssociatedProject=List of miscellaneous payments related to the project
    +ListSalariesAssociatedProject=List of payments of salaries related to the project
    +ListActionsAssociatedProject=List of events related to the project
     ListTaskTimeUserProject=List of time consumed on tasks of project
     ListTaskTimeForTask=List of time consumed on task
     ActivityOnProjectToday=Activity on project today
    @@ -99,9 +100,9 @@ ActivityOnProjectYesterday=Activity on project yesterday
     ActivityOnProjectThisWeek=對項目活動周
     ActivityOnProjectThisMonth=本月初對項目活動
     ActivityOnProjectThisYear=今年對項目活動
    -ChildOfProjectTask=兒童的項目/任務
    -ChildOfTask=Child of task
    -TaskHasChild=Task has child
    +ChildOfProjectTask=專案/任務的子項
    +ChildOfTask=任務的子項
    +TaskHasChild=任務有子項任務
     NotOwnerOfProject=不是所有者的私人項目
     AffectedTo=受影響
     CantRemoveProject=這個項目不能刪除,因為它是由一些(其他對象引用的發票,訂單或其他)。見參照資訊標簽。
    @@ -146,11 +147,11 @@ ProjectModifiedInDolibarr=專案 %s 已修改
     TaskCreatedInDolibarr=Task %s created
     TaskModifiedInDolibarr=Task %s modified
     TaskDeletedInDolibarr=Task %s deleted
    -OpportunityStatus=Opportunity status
    +OpportunityStatus=Lead status
     OpportunityStatusShort=Opp. status
    -OpportunityProbability=Opportunity probability
    +OpportunityProbability=Lead probability
     OpportunityProbabilityShort=Opp. probab.
    -OpportunityAmount=Opportunity amount
    +OpportunityAmount=Lead amount
     OpportunityAmountShort=Opp. amount
     OpportunityAmountAverageShort=Average Opp. amount
     OpportunityAmountWeigthedShort=Weighted Opp. amount
    @@ -167,8 +168,9 @@ TypeContact_project_task_external_TASKCONTRIBUTOR=投稿
     SelectElement=Select element
     AddElement=Link to element
     # Documents models
    -DocumentModelBeluga=Project template for linked objects overview
    -DocumentModelBaleine=Project report template for tasks
    +DocumentModelBeluga=Project document template for linked objects overview
    +DocumentModelBaleine=Project document template for tasks
    +DocumentModelTimeSpent=Project report template for time spent
     PlannedWorkload=Planned workload
     PlannedWorkloadShort=Workload
     ProjectReferers=相關項目
    @@ -182,6 +184,7 @@ ProjectsWithThisUserAsContact=Projects with this user as contact
     TasksWithThisUserAsContact=Tasks assigned to this user
     ResourceNotAssignedToProject=Not assigned to project
     ResourceNotAssignedToTheTask=Not assigned to the task
    +NoUserAssignedToTheProject=No users assigned to this project
     TimeSpentBy=Time spent by
     TasksAssignedTo=Tasks assigned to
     AssignTaskToMe=Assign task to me
    @@ -189,25 +192,26 @@ AssignTaskToUser=Assign task to %s
     SelectTaskToAssign=Select task to assign...
     AssignTask=Assign
     ProjectOverview=Overview
    -ManageTasks=Use projects to follow tasks and time
    +ManageTasks=Use projects to follow tasks and/or report time spent (timesheets)
     ManageOpportunitiesStatus=專案用於以下潛在/有機會的客戶
    -ProjectNbProjectByMonth=Nb of created projects by month
    -ProjectNbTaskByMonth=Nb of created tasks by month
    -ProjectOppAmountOfProjectsByMonth=Amount of opportunities by month
    -ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of opportunities by month
    -ProjectOpenedProjectByOppStatus=依機會狀況開啟專案/潛在客戶
    +ProjectNbProjectByMonth=No. of created projects by month
    +ProjectNbTaskByMonth=No. of created tasks by month
    +ProjectOppAmountOfProjectsByMonth=Amount of leads by month
    +ProjectWeightedOppAmountOfProjectsByMonth=Weighted amount of leads by month
    +ProjectOpenedProjectByOppStatus=Open project/lead by lead status
     ProjectsStatistics=專案/潛在客戶的統計
     TasksStatistics=專案/潛在客戶任務的統計
     TaskAssignedToEnterTime=Task assigned. Entering time on this task should be possible.
     IdTaskTime=Id task time
     YouCanCompleteRef=If you want to complete the ref with some information (to use it as search filters), it is recommanded to add a - character to separate it, so the automatic numbering will still work correctly for next projects. For example %s-ABC. You may also prefer to add search keys into label. But best practice may be to add a dedicated field, also called complementary attributes.
     OpenedProjectsByThirdparties=Open projects by third parties
    -OnlyOpportunitiesShort=Only opportunities
    -OpenedOpportunitiesShort=Open opportunities
    -NotAnOpportunityShort=Not an opportunity
    -OpportunityTotalAmount=Opportunities total amount
    -OpportunityPonderatedAmount=Opportunities weighted amount
    -OpportunityPonderatedAmountDesc=Opportunities amount weighted with probability
    +OnlyOpportunitiesShort=Only leads
    +OpenedOpportunitiesShort=Open leads
    +NotOpenedOpportunitiesShort=Not open leads
    +NotAnOpportunityShort=Not a lead
    +OpportunityTotalAmount=Total amount of leads
    +OpportunityPonderatedAmount=Weighted amount of leads
    +OpportunityPonderatedAmountDesc=Leads amount weighted with probability
     OppStatusPROSP=Prospection
     OppStatusQUAL=Qualification
     OppStatusPROPO=提案/建議書
    @@ -228,3 +232,5 @@ DontHavePermissionForCloseProject=You do not have permissions to close the proje
     DontHaveTheValidateStatus=The project %s must be open to be closed
     RecordsClosed=%s project(s) closed
     SendProjectRef=Information project %s
    +ModuleSalaryToDefineHourlyRateMustBeEnabled=Module 'Payment of employee wages' must be enabled to define employee hourly rate to have time spent valorized
    +NewTaskRefSuggested=Task ref already used, a new task ref is suggested
    diff --git a/htdocs/livraison/card.php b/htdocs/livraison/card.php
    index d6cefb24d83..260c333f362 100644
    --- a/htdocs/livraison/card.php
    +++ b/htdocs/livraison/card.php
    @@ -2,10 +2,10 @@
     /* Copyright (C) 2003-2005	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2010	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Simon TOSSER			<simon@kornog-computing.com>
    - * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2007		Franky Van Liedekerke	<franky.van.liedekerke@telenet.be>
      * Copyright (C) 2013       Florian Henry		  	<florian.henry@open-concept.pro>
    - * Copyright (C) 2015			  Claudio Aschieri		<c.aschieri@19.coop>
    + * Copyright (C) 2015	    Claudio Aschieri		<c.aschieri@19.coop>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -241,7 +241,6 @@ if ($action == 'update_extras_line')
     			$error++;
     		}
     	}
    -
     }
     
     
    @@ -292,6 +291,7 @@ elseif ($action == 'remove_file')
     }
     */
     
    +include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
     
     /*
      *	View
    @@ -356,7 +356,6 @@ else
     			{
     				$expedition_id = GETPOST("expid");
     				print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id.'&expid='.$expedition_id.'&backtopage='.urlencode($backtopage),$langs->trans("DeleteDeliveryReceipt"),$langs->trans("DeleteDeliveryReceiptConfirm",$object->ref),'confirm_delete','','',1);
    -
     			}
     
     			/*
    @@ -365,7 +364,6 @@ else
     			if ($action == 'valid')
     			{
     				print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans("ValidateDeliveryReceipt"),$langs->trans("ValidateDeliveryReceiptConfirm",$object->ref),'confirm_valid','','',1);
    -
     			}
     
     
    @@ -506,7 +504,7 @@ else
     				print '<form name="setdate_livraison" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'" method="post">';
     				print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     				print '<input type="hidden" name="action" value="setdate_livraison">';
    -				$form->select_date($object->date_delivery?$object->date_delivery:-1, 'liv_', 1, 1, '', "setdate_livraison", 1, 1);
    +				print $form->selectDate($object->date_delivery?$object->date_delivery:-1, 'liv_', 1, 1, '', "setdate_livraison", 1, 1);
     				print '<input type="submit" class="button" value="'.$langs->trans('Modify').'">';
     				print '</form>';
     			}
    @@ -586,7 +584,7 @@ else
     			print '</div>';
     
     			/*
    -			 * Lignes produits
    +			 * Products lines
     			 */
     
     			$num_prod = count($object->lines);
    @@ -604,11 +602,8 @@ else
     				print '<td align="center">'.$langs->trans("QtyReceived").'</td>';
     				print "</tr>\n";
     			}
    -			$var=true;
     			while ($i < $num_prod)
     			{
    -
    -
     				print '<tr class="oddeven">';
     				if ($object->lines[$i]->fk_product > 0)
     				{
    @@ -686,7 +681,7 @@ else
     						$line->array_options = array_merge($line->array_options, $srcLine->array_options);
     					}
     					print '<tr class="oddeven">';
    -					print $line->showOptionals($extrafieldsline, $mode, array('style'=>$bc[$var], 'colspan'=>$colspan),$i);
    +					print $line->showOptionals($extrafieldsline, $mode, array('style'=>'class="oddeven"', 'colspan'=>$colspan),$i);
     					print '</tr>';
     				}
     
    @@ -784,6 +779,6 @@ else
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/livraison/class/livraison.class.php b/htdocs/livraison/class/livraison.class.php
    index 46b3c113ff2..9968f4d3d38 100644
    --- a/htdocs/livraison/class/livraison.class.php
    +++ b/htdocs/livraison/class/livraison.class.php
    @@ -1,10 +1,10 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville  <rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2014 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2007 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
    - * Copyright (C) 2011-2012 Philippe Grand	     <philippe.grand@atoo-net.com>
    - * Copyright (C) 2013      Florian Henry		  	<florian.henry@open-concept.pro>
    + * Copyright (C) 2011-2018 Philippe Grand	     <philippe.grand@atoo-net.com>
    + * Copyright (C) 2013      Florian Henry	     <florian.henry@open-concept.pro>
      * Copyright (C) 2014-2015 Marcos García         <marcosgdf@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
     /**
      *  \file       htdocs/livraison/class/livraison.class.php
      *  \ingroup    delivery
    - *  \brief      Fichier de la classe de gestion des bons de livraison
    + *  \brief      Delivery Order Management Class File
      */
     
     require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
    @@ -39,19 +39,34 @@ if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande
      */
     class Livraison extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element="delivery";
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element="fk_livraison";
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element="livraison";
    +
    +	/**
    +	 * @var int    Name of subtable line
    +	 */
     	public $table_element_line="livraisondet";
     
    -	var $brouillon;
    -	var $socid;
    -	var $ref_customer;
    +	public $brouillon;
    +	public $socid;
    +	public $ref_customer;
     
    -	var $date_delivery;    // Date really received
    -	var $date_creation;
    -	var $date_valid;
    -	var $model_pdf;
    +	public $date_delivery;    // Date really received
    +	public $date_creation;
    +	public $date_valid;
    +	public $model_pdf;
     
     	/**
     	 * Constructor
    @@ -149,7 +164,7 @@ class Livraison extends CommonObject
     
     
     				/*
    -				 *  Insertion des produits dans la base
    +				 *  Inserting products into the database
     				 */
     				$num=count($this->lines);
     				for ($i = 0; $i < $num; $i++)
    @@ -212,6 +227,7 @@ class Livraison extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Create a line
     	 *
    @@ -223,6 +239,7 @@ class Livraison extends CommonObject
     	 */
     	function create_line($origin_id, $qty, $fk_product, $description)
     	{
    +        // phpcs:enable
     		$error = 0;
     		$idprod = $fk_product;
     		$j = 0;
    @@ -301,7 +318,7 @@ class Livraison extends CommonObject
     
     				if ($this->statut == 0) $this->brouillon = 1;
     
    -				// Retreive all extrafield
    +				// Retreive all extrafields
     				// fetch optionals attributes and labels
     				$this->fetch_optionals();
     
    @@ -352,7 +369,7 @@ class Livraison extends CommonObject
     		{
     			if (! empty($conf->global->LIVRAISON_ADDON_NUMBER))
     			{
    -				// Definition du nom de module de numerotation de commande
    +				// Setting the command numbering module name
     				$modName = $conf->global->LIVRAISON_ADDON_NUMBER;
     
     				if (is_readable(DOL_DOCUMENT_ROOT .'/core/modules/livraison/'.$modName.'.php'))
    @@ -361,7 +378,7 @@ class Livraison extends CommonObject
     
     					$now=dol_now();
     
    -					// Recuperation de la nouvelle reference
    +					// Retrieving the new reference
     					$objMod = new $modName($this->db);
     					$soc = new Societe($this->db);
     					$soc->fetch($this->socid);
    @@ -376,8 +393,7 @@ class Livraison extends CommonObject
     		            }
                 		$this->newref = $numref;
     
    -					// Tester si non deja au statut valide. Si oui, on arrete afin d'eviter
    -					// de decrementer 2 fois le stock.
    +					// Test if is not already in valid status. If so, we stop to avoid decrementing the stock twice.
     					$sql = "SELECT ref";
     					$sql.= " FROM ".MAIN_DB_PREFIX."livraison";
     					$sql.= " WHERE ref = '".$this->db->escape($numref)."'";
    @@ -483,15 +499,17 @@ class Livraison extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
    -	 * 	Cree le bon de livraison depuis une expedition existante
    +	 * 	Creating the delivery slip from an existing shipment
     	 *
    -	 *	@param	User	$user            Utilisateur qui cree
    -	 *	@param  int		$sending_id      Id de l'expedition qui sert de modele
    +	 *	@param	User	$user            User who creates
    +	 *	@param  int		$sending_id      Id of the expedition that serves as a model
     	 *	@return	integer
     	 */
     	function create_from_sending($user, $sending_id)
     	{
    +        // phpcs:enable
     		$expedition = new Expedition($this->db);
     		$result=$expedition->fetch($sending_id);
     
    @@ -528,6 +546,7 @@ class Livraison extends CommonObject
     		return $this->create($user);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Update a livraison line (only extrafields)
     	 *
    @@ -537,6 +556,7 @@ class Livraison extends CommonObject
     	 */
     	function update_line($id, $array_options=0)
     	{
    +        // phpcs:enable
     		global $conf;
     		$error = 0;
     
    @@ -725,6 +745,7 @@ class Livraison extends CommonObject
     		return $result;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Load lines
     	 *
    @@ -732,6 +753,7 @@ class Livraison extends CommonObject
     	 */
     	function fetch_lines()
     	{
    +        // phpcs:enable
     		$this->lines = array();
     
     		$sql = "SELECT ld.rowid, ld.fk_product, ld.description, ld.subprice, ld.total_ht, ld.qty as qty_shipped, ld.fk_origin_line, ";
    @@ -794,6 +816,7 @@ class Livraison extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Renvoi le libelle d'un statut donne
     	 *
    @@ -803,31 +826,32 @@ class Livraison extends CommonObject
     	 */
     	function LibStatut($statut,$mode)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode==0)
     		{
     			if ($statut==-1) return $langs->trans('StatusDeliveryCanceled');
    -			if ($statut==0)  return $langs->trans('StatusDeliveryDraft');
    -			if ($statut==1)  return $langs->trans('StatusDeliveryValidated');
    +			elseif ($statut==0)  return $langs->trans('StatusDeliveryDraft');
    +			elseif ($statut==1)  return $langs->trans('StatusDeliveryValidated');
     		}
    -		if ($mode==1)
    +		elseif ($mode==1)
     		{
     			if ($statut==-1) return $langs->trans($this->statuts[$statut]);
    -			if ($statut==0)  return $langs->trans($this->statuts[$statut]);
    -			if ($statut==1)  return $langs->trans($this->statuts[$statut]);
    +			elseif ($statut==0)  return $langs->trans($this->statuts[$statut]);
    +			elseif ($statut==1)  return $langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut==-1) return img_picto($langs->trans('StatusDeliveryCanceled'),'statut5').' '.$langs->trans('StatusDeliveryCanceled');
    -			if ($statut==0)  return img_picto($langs->trans('StatusDeliveryDraft'),'statut0').' '.$langs->trans('StatusDeliveryDraft');
    -			if ($statut==1)  return img_picto($langs->trans('StatusDeliveryValidated'),'statut4').' '.$langs->trans('StatusDeliveryValidated');
    +			elseif ($statut==0)  return img_picto($langs->trans('StatusDeliveryDraft'),'statut0').' '.$langs->trans('StatusDeliveryDraft');
    +			elseif ($statut==1)  return img_picto($langs->trans('StatusDeliveryValidated'),'statut4').' '.$langs->trans('StatusDeliveryValidated');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($statut==-1) return $langs->trans('StatusDeliveryCanceled').' '.img_picto($langs->trans('StatusDeliveryCanceled'),'statut5');
    -			if ($statut==0)  return $langs->trans('StatusDeliveryDraft').' '.img_picto($langs->trans('StatusDeliveryDraft'),'statut0');
    -			if ($statut==1)  return $langs->trans('StatusDeliveryValidated').' '.img_picto($langs->trans('StatusDeliveryValidated'),'statut4');
    +			elseif ($statut==0)  return $langs->trans('StatusDeliveryDraft').' '.img_picto($langs->trans('StatusDeliveryDraft'),'statut0');
    +			elseif ($statut==1)  return $langs->trans('StatusDeliveryValidated').' '.img_picto($langs->trans('StatusDeliveryValidated'),'statut4');
     		}
     	}
     
    @@ -965,6 +989,7 @@ class Livraison extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Set the planned delivery date
     	 *
    @@ -974,6 +999,7 @@ class Livraison extends CommonObject
     	 */
     	function set_date_livraison($user, $date_livraison)
     	{
    +        // phpcs:enable
     		if ($user->rights->expedition->creer)
     		{
     			$sql = "UPDATE ".MAIN_DB_PREFIX."livraison";
    @@ -1047,17 +1073,19 @@ class Livraison extends CommonObject
     
     		return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
     	}
    -
     }
     
     
     
     /**
    - *  Classe de gestion des lignes de bons de livraison
    + *  Management class of delivery note lines
      */
     class LivraisonLigne extends CommonObjectLine
     {
    -	var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	// From llx_expeditiondet
     	var $qty;
    @@ -1066,23 +1094,39 @@ class LivraisonLigne extends CommonObjectLine
     	var $price;
     	var $fk_product;
     	var $origin_id;
    -	var $label;       // Label produit
    -	var $description;  // Description produit
    +
    +    /**
    +     * @var string delivery note lines label
    +     */
    +    public $label;
    +
    +	/**
    +	 * @var string product description
    +	 */
    +	public $description;
    +
     	/**
     	 * @deprecated
     	 * @see product_ref
     	 */
    -	var $ref;
    +	public $ref;
     	/**
     	 * @deprecated
     	 * @see product_label;
     	 */
    -	var $libelle;
    +	public $libelle;
     
     	public $product_ref;
     	public $product_label;
     
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='livraisondet';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='livraisondet';
     
     	/**
    @@ -1094,5 +1138,4 @@ class LivraisonLigne extends CommonObjectLine
     	{
     		$this->db=$db;
     	}
    -
     }
    diff --git a/htdocs/loan/calcmens.php b/htdocs/loan/calcmens.php
    index fbe1cecab2d..df6db76e1f2 100644
    --- a/htdocs/loan/calcmens.php
    +++ b/htdocs/loan/calcmens.php
    @@ -50,7 +50,7 @@ $echance++;
     $capital=$cap_rest;
     while ($echance<=$nbterm) {
     
    -	$mens = round($object->calc_mens($capital,$rate,$nbterm-$echance+1),2,PHP_ROUND_HALF_UP);
    +	$mens = round($object->calcMonthlyPayments($capital, $rate, $nbterm-$echance+1), 2, PHP_ROUND_HALF_UP);
     
     	$int = ($capital*($rate/12));
     	$int = round($int,2,PHP_ROUND_HALF_UP);
    @@ -63,4 +63,3 @@ while ($echance<=$nbterm) {
     }
     
     echo json_encode($output);
    -
    diff --git a/htdocs/loan/card.php b/htdocs/loan/card.php
    index d7e81c9e2dd..242472aff0a 100644
    --- a/htdocs/loan/card.php
    +++ b/htdocs/loan/card.php
    @@ -238,7 +238,7 @@ if (empty($reshook))
     
     $form = new Form($db);
     $formproject = new FormProjets($db);
    -if (! empty($conf->accounting->enabled)) $formaccounting = New FormAccounting($db);
    +if (! empty($conf->accounting->enabled)) $formaccounting = new FormAccounting($db);
     
     $title = $langs->trans("Loan") . ' - ' . $langs->trans("Card");
     $help_url = 'EN:Module_Loan|FR:Module_Emprunt';
    @@ -264,7 +264,7 @@ if ($action == 'create')
     	print '<table class="border" width="100%">';
     
     	// Label
    -	print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("Label").'</td><td><input name="label" size="40" maxlength="255" value="'.dol_escape_htmltag(GETPOST('label')).'"></td></tr>';
    +	print '<tr><td class="fieldrequired titlefieldcreate">'.$langs->trans("Label").'</td><td><input name="label" class="minwidth300" maxlength="255" value="'.dol_escape_htmltag(GETPOST('label')).'" autofocus="autofocus"></td></tr>';
     
     	// Bank account
     	if (! empty($conf->banque->enabled))
    @@ -286,13 +286,13 @@ if ($action == 'create')
     	// Date Start
     	print "<tr>";
     	print '<td class="fieldrequired">'.$langs->trans("DateStart").'</td><td>';
    -	print $form->select_date($datestart?$datestart:-1,'start','','','','add',1,1,1);
    +	print $form->selectDate($datestart?$datestart:-1,'start','','','','add',1,1);
     	print '</td></tr>';
     
     	// Date End
     	print "<tr>";
     	print '<td class="fieldrequired">'.$langs->trans("DateEnd").'</td><td>';
    -	print $form->select_date($dateend?$dateend:-1,'end','','','','add',1,1,1);
    +	print $form->selectDate($dateend?$dateend:-1,'end','','','','add',1,1);
     	print '</td></tr>';
     
     	// Number of terms
    @@ -434,7 +434,7 @@ if ($id > 0)
     
     		// Loan card
     
    -		$linkback = '<a href="' . DOL_URL_ROOT . '/loan/index.php">' . $langs->trans("BackToList") . '</a>';
    +		$linkback = '<a href="' . DOL_URL_ROOT . '/loan/list.php">' . $langs->trans("BackToList") . '</a>';
     
     		$morehtmlref='<div class="refidno">';
     		// Ref loan
    @@ -501,7 +501,7 @@ if ($id > 0)
     		print "<td>";
     		if ($action == 'edit')
     		{
    -			print $form->select_date($object->datestart, 'start', 0, 0, 0, 'update', 1, 0, 1);
    +			print $form->selectDate($object->datestart, 'start', 0, 0, 0, 'update', 1, 0);
     		}
     		else
     		{
    @@ -514,7 +514,7 @@ if ($id > 0)
     		print "<td>";
     		if ($action == 'edit')
     		{
    -			print $form->select_date($object->dateend, 'end', 0, 0, 0, 'update', 1, 0, 1);
    +			print $form->selectDate($object->dateend, 'end', 0, 0, 0, 'update', 1, 0);
     		}
     		else
     		{
    @@ -805,6 +805,6 @@ if ($id > 0)
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/loan/class/loan.class.php b/htdocs/loan/class/loan.class.php
    index a4518960839..0e4542b1d20 100644
    --- a/htdocs/loan/class/loan.class.php
    +++ b/htdocs/loan/class/loan.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2014-2018  Alexandre Spangaro   <aspangaro@zendsi.com>
    - * Copyright (C) 2015       Frederic France      <frederic.france@free.fr>
    + * Copyright (C) 2015-2018  Frédéric France      <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,16 +29,33 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class Loan extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='loan';
    +
     	public $table='loan';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='loan';
     
     	public $picto = 'bill';
     
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
    +
     	public $datestart;
     	public $dateend;
    -	public $label;
    +
    +    /**
    +     * @var string Loan label
    +     */
    +    public $label;
    +
     	public $capital;
     	public $nbterm;
     	public $rate;
    @@ -49,9 +66,25 @@ class Loan extends CommonObject
     	public $date_creation;
     	public $date_modification;
     	public $date_validation;
    +
    +	/**
    +     * @var int Bank ID
    +     */
     	public $fk_bank;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_modif;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_project;
     
     
    @@ -63,7 +96,6 @@ class Loan extends CommonObject
     	function __construct($db)
     	{
     		$this->db = $db;
    -		return 1;
     	}
     
     	/**
    @@ -142,10 +174,10 @@ class Loan extends CommonObject
     		if (isset($this->account_capital)) $this->account_capital = trim($this->account_capital);
     		if (isset($this->account_insurance)) $this->account_insurance = trim($this->account_insurance);
     		if (isset($this->account_interest)) $this->account_interest = trim($this->account_interest);
    -		if (isset($this->fk_bank)) $this->fk_bank=trim($this->fk_bank);
    -		if (isset($this->fk_user_creat)) $this->fk_user_creat=trim($this->fk_user_creat);
    -		if (isset($this->fk_user_modif)) $this->fk_user_modif=trim($this->fk_user_modif);
    -		if (isset($this->fk_project)) $this->fk_project=trim($this->fk_project);
    +		if (isset($this->fk_bank)) $this->fk_bank = (int) $this->fk_bank;
    +		if (isset($this->fk_user_creat)) $this->fk_user_creat = (int) $this->fk_user_creat;
    +		if (isset($this->fk_user_modif)) $this->fk_user_modif = (int) $this->fk_user_modif;
    +		if (isset($this->fk_project)) $this->fk_project = (int) $this->fk_project;
     
     		// Check parameters
     		if (! $newcapital > 0 || empty($this->datestart) || empty($this->dateend))
    @@ -278,7 +310,6 @@ class Loan extends CommonObject
     			$this->db->rollback();
     			return -1;
     		}
    -
     	}
     
     
    @@ -326,6 +357,7 @@ class Loan extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Tag loan as payed completely
     	 *
    @@ -334,6 +366,7 @@ class Loan extends CommonObject
     	 */
     	function set_paid($user)
     	{
    +        // phpcs:enable
     		$sql = "UPDATE ".MAIN_DB_PREFIX."loan SET";
     		$sql.= " paid = 1";
     		$sql.= " WHERE rowid = ".$this->id;
    @@ -358,6 +391,7 @@ class Loan extends CommonObject
     		return $this->LibStatut($this->paid,$mode,$alreadypaid);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return label for given status
     	 *
    @@ -368,51 +402,47 @@ class Loan extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0,$alreadypaid=-1)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->loadLangs(array("customers","bills"));
     
    -		if ($mode == 0)
    +		if ($mode == 0 || $mode == 1)
     		{
     			if ($statut ==  0) return $langs->trans("Unpaid");
    -			if ($statut ==  1) return $langs->trans("Paid");
    +			elseif ($statut ==  1) return $langs->trans("Paid");
     		}
    -		if ($mode == 1)
    -		{
    -			if ($statut ==  0) return $langs->trans("Unpaid");
    -			if ($statut ==  1) return $langs->trans("Paid");
    -		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut ==  0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid");
    -			if ($statut ==  0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted");
    -			if ($statut ==  1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid");
    +			elseif ($statut ==  0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted");
    +			elseif ($statut ==  1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid");
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut ==  0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1');
    -			if ($statut ==  0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3');
    -			if ($statut ==  1) return img_picto($langs->trans("Paid"), 'statut6');
    +			elseif ($statut ==  0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3');
    +			elseif ($statut ==  1) return img_picto($langs->trans("Paid"), 'statut6');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut ==  0 && $alreadypaid <= 0) return img_picto($langs->trans("Unpaid"), 'statut1').' '.$langs->trans("Unpaid");
    -			if ($statut ==  0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted");
    -			if ($statut ==  1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid");
    +			elseif ($statut ==  0 && $alreadypaid > 0) return img_picto($langs->trans("BillStatusStarted"), 'statut3').' '.$langs->trans("BillStatusStarted");
    +			elseif ($statut ==  1) return img_picto($langs->trans("Paid"), 'statut6').' '.$langs->trans("Paid");
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut ==  0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1');
    -			if ($statut ==  0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3');
    -			if ($statut ==  1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6');
    +			elseif ($statut ==  0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3');
    +			elseif ($statut ==  1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($statut ==  0 && $alreadypaid <= 0) return $langs->trans("Unpaid").' '.img_picto($langs->trans("Unpaid"), 'statut1');
    -			if ($statut ==  0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3');
    -			if ($statut ==  1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6');
    +			elseif ($statut ==  0 && $alreadypaid > 0) return $langs->trans("BillStatusStarted").' '.img_picto($langs->trans("BillStatusStarted"), 'statut3');
    +			elseif ($statut ==  1) return $langs->trans("Paid").' '.img_picto($langs->trans("Paid"), 'statut6');
     		}
     
    -		return "Error, mode/status not found";
    +		else return "Error, mode/status not found";
     	}
     
     
    @@ -431,9 +461,9 @@ class Loan extends CommonObject
     
     		$tooltip = '<u>' . $langs->trans("ShowLoan") . '</u>';
     		if (! empty($this->ref))
    -			$tooltip .= '<br><b>' . $langs->trans('Ref') . ':</b> ' . $this->ref;
    +			$tooltip .= '<br><strong>' . $langs->trans('Ref') . ':</strong> ' . $this->ref;
     		if (! empty($this->label))
    -			$tooltip .= '<br><b>' . $langs->trans('Label') . ':</b> ' . $this->label;
    +			$tooltip .= '<br><strong>' . $langs->trans('Label') . ':</strong> ' . $this->label;
     
     		$linkstart = '<a href="'.DOL_URL_ROOT.'/loan/card.php?id='.$this->id.'" title="'.str_replace('\n', '', dol_escape_htmltag($tooltip, 1)).'" class="classfortooltip">';
     		$linkend = '</a>';
    @@ -445,7 +475,7 @@ class Loan extends CommonObject
     
     		return $result;
     	}
    -	
    +
     	/**
     	 *  Initialise an instance with random values.
     	 *  Used to build previews or test instances.
    @@ -456,9 +486,9 @@ class Loan extends CommonObject
     	function initAsSpecimen()
     	{
     	    global $user, $langs, $conf;
    -	    
    +
     	    $now=dol_now();
    -	    
    +
     	    // Initialise parameters
     	    $this->id = 0;
     	    $this->fk_bank = 1;
    diff --git a/htdocs/loan/class/loanschedule.class.php b/htdocs/loan/class/loanschedule.class.php
    index a430f79366e..7373bfb4ab1 100644
    --- a/htdocs/loan/class/loanschedule.class.php
    +++ b/htdocs/loan/class/loanschedule.class.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2017	Florian HENRY <florian.henry@atm-consulting.fr>
    +/* Copyright (C) 2017       Florian HENRY           <florian.henry@atm-consulting.fr>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -17,8 +18,8 @@
     
     /**
      *      \file       htdocs/loan/class/loanschedule.class.php
    - *		\ingroup    facture
    - *		\brief      File of class to manage schedule of loans
    + *      \ingroup    loan
    + *      \brief      File of class to manage schedule of loans
      */
     
     require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
    @@ -29,36 +30,76 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class LoanSchedule extends CommonObject
     {
    -	public $element='loan_schedule';			//!< Id that identify managed objects
    -	public $table_element='loan_schedule';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='loan_schedule';
     
    -	var $fk_loan;
    -	var $datec='';
    -	var $tms='';
    -	var $datep='';
    -    var $amounts=array();   // Array of amounts
    -    var $amount_capital;    // Total amount of payment
    -	var $amount_insurance;
    -	var $amount_interest;
    -	var $fk_typepayment;
    -	var $num_payment;
    -	var $fk_bank;
    -	var $fk_user_creat;
    -	var $fk_user_modif;
    -	var $lines=array();
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='loan_schedule';
    +
    +    /**
    +     * @var int Loan ID
    +     */
    +    public $fk_loan;
    +
    +    /**
    +     * @var string Create date
    +     */
    +    public $datec='';
    +	public $tms='';
    +
    +    /**
    +     * @var string Payment date
    +     */
    +    public $datep='';
    +
    +    public $amounts=array();   // Array of amounts
    +    public $amount_capital;    // Total amount of payment
    +	public $amount_insurance;
    +	public $amount_interest;
    +
    +    /**
    +     * @var int Payment Type ID
    +     */
    +    public $fk_typepayment;
    +
    +    /**
    +     * @var int Payment ID
    +     */
    +    public $num_payment;
    +
    +    /**
    +     * @var int Bank ID
    +     */
    +    public $fk_bank;
    +
    +    /**
    +     * @var int Bank ID
    +     */
    +    public $fk_user_creat;
    +
    +    /**
    +     * @var int User ID
    +     */
    +    public $fk_user_modif;
    +
    +	public $lines=array();
     
     	/**
     	 * @deprecated
     	 * @see amount, amounts
     	 */
    -	var $total;
    +	public $total;
     
     	/**
     	 *	Constructor
     	 *
     	 *  @param		DoliDB		$db      Database handler
     	 */
    -	function __construct($db)
    +	public function __construct($db)
     	{
     		$this->db = $db;
     	}
    @@ -70,7 +111,7 @@ class LoanSchedule extends CommonObject
     	 *  @param      User		$user   User making payment
     	 *  @return     int     			<0 if KO, id of payment if OK
     	 */
    -	function create($user)
    +	public function create($user)
     	{
     		global $conf, $langs;
     
    @@ -79,21 +120,21 @@ class LoanSchedule extends CommonObject
             $now=dol_now();
     
             // Validate parameters
    -		if (! $this->datepaid)
    +		if (! $this->datep)
     		{
     			$this->error='ErrorBadValueForParameter';
     			return -1;
     		}
     
     		// Clean parameters
    -		if (isset($this->fk_loan)) 			$this->fk_loan = trim($this->fk_loan);
    +		if (isset($this->fk_loan)) $this->fk_loan = (int) $this->fk_loan;
     		if (isset($this->amount_capital))	$this->amount_capital = trim($this->amount_capital?$this->amount_capital:0);
     		if (isset($this->amount_insurance))	$this->amount_insurance = trim($this->amount_insurance?$this->amount_insurance:0);
     		if (isset($this->amount_interest))	$this->amount_interest = trim($this->amount_interest?$this->amount_interest:0);
    -		if (isset($this->fk_typepayment))	$this->fk_typepayment = trim($this->fk_typepayment);
    -		if (isset($this->fk_bank))			$this->fk_bank = trim($this->fk_bank);
    -		if (isset($this->fk_user_creat))	$this->fk_user_creat = trim($this->fk_user_creat);
    -		if (isset($this->fk_user_modif))	$this->fk_user_modif = trim($this->fk_user_modif);
    +		if (isset($this->fk_typepayment)) $this->fk_typepayment = (int) $this->fk_typepayment;
    +		if (isset($this->fk_bank)) $this->fk_bank = (int) $this->fk_bank;
    +		if (isset($this->fk_user_creat)) $this->fk_user_creat = (int) $this->fk_user_creat;
    +		if (isset($this->fk_user_modif)) $this->fk_user_modif = (int) $this->fk_user_modif;
     
             $totalamount = $this->amount_capital + $this->amount_insurance + $this->amount_interest;
             $totalamount = price2num($totalamount);
    @@ -112,7 +153,7 @@ class LoanSchedule extends CommonObject
     			$sql = "INSERT INTO ".MAIN_DB_PREFIX.$this->table_element." (fk_loan, datec, datep, amount_capital, amount_insurance, amount_interest,";
     			$sql.= " fk_typepayment, fk_user_creat, fk_bank)";
     			$sql.= " VALUES (".$this->fk_loan.", '".$this->db->idate($now)."',";
    -			$sql.= " '".$this->db->idate($this->datepaid)."',";
    +			$sql.= " '".$this->db->idate($this->datep)."',";
     			$sql.= " ".$this->amount_capital.",";
     			$sql.= " ".$this->amount_insurance.",";
     			$sql.= " ".$this->amount_interest.",";
    @@ -131,7 +172,6 @@ class LoanSchedule extends CommonObject
                     $this->error=$this->db->lasterror();
     				$error++;
     			}
    -
     		}
     
     		if ($totalamount != 0 && ! $error)
    @@ -155,7 +195,7 @@ class LoanSchedule extends CommonObject
     	 *  @param	int		$id         Id object
     	 *  @return int         		<0 if KO, >0 if OK
     	 */
    -	function fetch($id)
    +	public function fetch($id)
     	{
     		global $langs;
     		$sql = "SELECT";
    @@ -183,37 +223,35 @@ class LoanSchedule extends CommonObject
     
     		dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
     		$resql=$this->db->query($sql);
    -		if ($resql)
    -	{
    -		if ($this->db->num_rows($resql))
    -		{
    -			$obj = $this->db->fetch_object($resql);
    +		if ($resql) {
    +            if ($this->db->num_rows($resql)) {
    +                $obj = $this->db->fetch_object($resql);
     
    -			$this->id = $obj->rowid;
    -			$this->ref = $obj->rowid;
    +                $this->id = $obj->rowid;
    +                $this->ref = $obj->rowid;
     
    -			$this->fk_loan = $obj->fk_loan;
    -			$this->datec = $this->db->jdate($obj->datec);
    -			$this->tms = $this->db->jdate($obj->tms);
    -			$this->datep = $this->db->jdate($obj->datep);
    -			$this->amount_capital = $obj->amount_capital;
    -			$this->amount_insurance = $obj->amount_insurance;
    -			$this->amount_interest = $obj->amount_interest;
    -			$this->fk_typepayment = $obj->fk_typepayment;
    -			$this->num_payment = $obj->num_payment;
    -			$this->note_private = $obj->note_private;
    -			$this->note_public = $obj->note_public;
    -			$this->fk_bank = $obj->fk_bank;
    -			$this->fk_user_creat = $obj->fk_user_creat;
    -			$this->fk_user_modif = $obj->fk_user_modif;
    +                $this->fk_loan = $obj->fk_loan;
    +                $this->datec = $this->db->jdate($obj->datec);
    +                $this->tms = $this->db->jdate($obj->tms);
    +                $this->datep = $this->db->jdate($obj->datep);
    +                $this->amount_capital = $obj->amount_capital;
    +                $this->amount_insurance = $obj->amount_insurance;
    +                $this->amount_interest = $obj->amount_interest;
    +                $this->fk_typepayment = $obj->fk_typepayment;
    +                $this->num_payment = $obj->num_payment;
    +                $this->note_private = $obj->note_private;
    +                $this->note_public = $obj->note_public;
    +                $this->fk_bank = $obj->fk_bank;
    +                $this->fk_user_creat = $obj->fk_user_creat;
    +                $this->fk_user_modif = $obj->fk_user_modif;
     
    -			$this->type_code = $obj->type_code;
    -			$this->type_libelle = $obj->type_libelle;
    +                $this->type_code = $obj->type_code;
    +                $this->type_libelle = $obj->type_libelle;
     
    -			$this->bank_account   = $obj->fk_account;
    -			$this->bank_line      = $obj->fk_bank;
    -		}
    -		$this->db->free($resql);
    +                $this->bank_account = $obj->fk_account;
    +                $this->bank_line = $obj->fk_bank;
    +            }
    +            $this->db->free($resql);
     
     			return 1;
     		}
    @@ -232,7 +270,7 @@ class LoanSchedule extends CommonObject
     	 *  @param  int		$notrigger	    0=launch triggers after, 1=disable triggers
     	 *  @return int         			<0 if KO, >0 if OK
     	 */
    -	function update($user=0, $notrigger=0)
    +	public function update($user=0, $notrigger=0)
     	{
     		global $conf, $langs;
     		$error=0;
    @@ -316,7 +354,7 @@ class LoanSchedule extends CommonObject
     	 *  @param  int		$notrigger		0=launch triggers after, 1=disable triggers
     	 *  @return int						<0 if KO, >0 if OK
     	 */
    -	function delete($user, $notrigger=0)
    +	public function delete($user, $notrigger=0)
     	{
     		global $conf, $langs;
     		$error=0;
    @@ -367,13 +405,20 @@ class LoanSchedule extends CommonObject
     		}
     	}
     
    -	function calc_mens($capital,$rate,$nbterm)
    +	/**
    +	 * Calculate Monthly Payments
    +	 *
    +	 * @param   double  $capital        Capital
    +	 * @param   double  $rate           rate
    +	 * @param   int     $nbterm         nb term
    +	 * @return  double                  mensuality
    +	 */
    +	public function calcMonthlyPayments($capital, $rate, $nbterm)
     	{
     		$result='';
     
    -		if (!empty($capital)&&!empty($rate)&&!empty($nbterm))
    -		{
    -			$result=($capital*($rate/12))/(1-pow((1+($rate/12)),($nbterm*-1)));
    +		if (!empty($capital) && !empty($rate) && !empty($nbterm)) {
    +			$result = ($capital*($rate/12))/(1-pow((1+($rate/12)),($nbterm*-1)));
     		}
     
     		return $result;
    @@ -386,7 +431,7 @@ class LoanSchedule extends CommonObject
     	 *  @param	int		$loanid     Id object
     	 *  @return int         		<0 if KO, >0 if OK
     	 */
    -	function fetchAll($loanid)
    +	public function fetchAll($loanid)
     	{
     		global $langs;
     
    @@ -416,7 +461,7 @@ class LoanSchedule extends CommonObject
     		{
     			while($obj = $this->db->fetch_object($resql))
     			{
    -				$line = New LoanSchedule($this->db);
    +				$line = new LoanSchedule($this->db);
     				$line->id = $obj->rowid;
     				$line->ref = $obj->rowid;
     
    @@ -448,11 +493,11 @@ class LoanSchedule extends CommonObject
     	}
     
     	/**
    -	 *  trans_paiment
    +	 *  transPayment
     	 *
     	 *  @return void
     	 */
    -	function trans_paiment()
    +	private function transPayment()
     	{
     		require_once DOL_DOCUMENT_ROOT.'/loan/class/loan.class.php';
     		require_once DOL_DOCUMENT_ROOT.'/core/lib/loan.lib.php';
    @@ -467,7 +512,7 @@ class LoanSchedule extends CommonObject
     
     		if($resql){
     			while($obj = $this->db->fetch_object($resql)){
    -				$lastrecorded = $this->lastpaiment($obj->rowid);
    +				$lastrecorded = $this->lastPayment($obj->rowid);
     				$toinsert = $this->paimenttorecord($obj->rowid, $lastrecorded);
     				if(count($toinsert)>0){
     					foreach ($toinsert as $echid){
    @@ -489,12 +534,12 @@ class LoanSchedule extends CommonObject
     
     
     	/**
    -	 *  trans_paiment
    +	 *  lastpayment
     	 *
     	 *  @param  int    $loanid     Loan id
     	 *  @return int                < 0 if KO, Date > 0 if OK
     	 */
    -	function lastpaiment($loanid)
    +	private function lastPayment($loanid)
     	{
     		$sql = "SELECT p.datep";
     		$sql.= " FROM ".MAIN_DB_PREFIX."payment_loan as p ";
    @@ -519,7 +564,7 @@ class LoanSchedule extends CommonObject
     	 *  @param  int        $datemax    Date max
     	 *  @return array                  Array of id
     	 */
    -	function paimenttorecord($loanid, $datemax)
    +	public function paimenttorecord($loanid, $datemax)
     	{
     		$sql = "SELECT p.rowid";
     		$sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as p ";
    @@ -534,10 +579,8 @@ class LoanSchedule extends CommonObject
     			{
     				$result[] = $obj->rowid;
     			}
    -
     		}
     
     		return $result;
     	}
     }
    -
    diff --git a/htdocs/loan/class/paymentloan.class.php b/htdocs/loan/class/paymentloan.class.php
    index 595aead109e..cb1ec021dda 100644
    --- a/htdocs/loan/class/paymentloan.class.php
    +++ b/htdocs/loan/class/paymentloan.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2014-2018  Alexandre Spangaro   <aspangaro@zendsi.com>
    - * Copyright (C) 2015       Frederic France      <frederic.france@free.fr>
    + * Copyright (C) 2015-2018  Frederic France      <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,35 +30,78 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class PaymentLoan extends CommonObject
     {
    -	public $element='payment_loan';			//!< Id that identify managed objects
    -	public $table_element='payment_loan';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='payment_loan';
     
    -	var $fk_loan;
    -	var $datec='';
    -	var $tms='';
    -	var $datep='';
    -	var $amounts=array();   // Array of amounts
    -	var $amount_capital;    // Total amount of payment
    -	var $amount_insurance;
    -	var $amount_interest;
    -	var $fk_typepayment;
    -	var $num_payment;
    -	var $fk_bank;
    -	var $fk_user_creat;
    -	var $fk_user_modif;
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='payment_loan';
    +
    +    /**
    +     * @var int Loan ID
    +     */
    +    public $fk_loan;
    +
    +    /**
    +     * @var string Create date
    +     */
    +    public $datec='';
    +
    +    public $tms='';
    +
    +    /**
    +     * @var string Payment date
    +     */
    +    public $datep='';
    +
    +    public $amounts=array();   // Array of amounts
    +
    +    public $amount_capital;    // Total amount of payment
    +
    +    public $amount_insurance;
    +
    +    public $amount_interest;
    +
    +    /**
    +     * @var int Payment type ID
    +     */
    +    public $fk_typepayment;
    +
    +    /**
    +     * @var int Payment ID
    +     */
    +    public $num_payment;
    +
    +    /**
    +     * @var int Bank ID
    +     */
    +    public $fk_bank;
    +
    +    /**
    +     * @var int User ID
    +     */
    +    public $fk_user_creat;
    +
    +    /**
    +     * @var int user ID
    +     */
    +    public $fk_user_modif;
     
     	/**
     	 * @deprecated
     	 * @see amount, amounts
     	 */
    -	var $total;
    +    public $total;
     
     	/**
     	 *	Constructor
     	 *
     	 *  @param		DoliDB		$db      Database handler
     	 */
    -	function __construct($db)
    +	public function __construct($db)
     	{
     		$this->db = $db;
     	}
    @@ -79,24 +122,24 @@ class PaymentLoan extends CommonObject
     		$now=dol_now();
     
     		// Validate parameters
    -		if (! $this->datepaid)
    +		if (! $this->datep)
     		{
     			$this->error='ErrorBadValueForParameter';
     			return -1;
     		}
     
     		// Clean parameters
    -		if (isset($this->fk_loan)) 			$this->fk_loan = trim($this->fk_loan);
    +		if (isset($this->fk_loan)) $this->fk_loan = (int) $this->fk_loan;
     		if (isset($this->amount_capital))	$this->amount_capital = price2num($this->amount_capital?$this->amount_capital:0);
    -		if (isset($this->amount_insurance))	$this->amount_insurance = price2num($this->amount_insurance?$this->amount_insurance:0);
    +		if (isset($this->amount_insurance)) $this->amount_insurance = price2num($this->amount_insurance?$this->amount_insurance:0);
     		if (isset($this->amount_interest))	$this->amount_interest = price2num($this->amount_interest?$this->amount_interest:0);
    -		if (isset($this->fk_typepayment))	$this->fk_typepayment = trim($this->fk_typepayment);
    -		if (isset($this->num_payment))		$this->num_payment = trim($this->num_payment);
    +		if (isset($this->fk_typepayment)) $this->fk_typepayment = (int) $this->fk_typepayment;
    +		if (isset($this->num_payment)) $this->num_payment = (int) $this->num_payment;
     		if (isset($this->note_private))     $this->note_private = trim($this->note_private);
     		if (isset($this->note_public))      $this->note_public = trim($this->note_public);
    -		if (isset($this->fk_bank))			$this->fk_bank = trim($this->fk_bank);
    -		if (isset($this->fk_user_creat))	$this->fk_user_creat = trim($this->fk_user_creat);
    -		if (isset($this->fk_user_modif))	$this->fk_user_modif = trim($this->fk_user_modif);
    +		if (isset($this->fk_bank)) $this->fk_bank = (int) $this->fk_bank;
    +		if (isset($this->fk_user_creat)) $this->fk_user_creat = (int) $this->fk_user_creat;
    +		if (isset($this->fk_user_modif)) $this->fk_user_modif = (int) $this->fk_user_modif;
     
     		$totalamount = $this->amount_capital + $this->amount_insurance + $this->amount_interest;
     		$totalamount = price2num($totalamount);
    @@ -112,7 +155,7 @@ class PaymentLoan extends CommonObject
     			$sql = "INSERT INTO ".MAIN_DB_PREFIX."payment_loan (fk_loan, datec, datep, amount_capital, amount_insurance, amount_interest,";
     			$sql.= " fk_typepayment, num_payment, note_private, note_public, fk_user_creat, fk_bank)";
     			$sql.= " VALUES (".$this->chid.", '".$this->db->idate($now)."',";
    -			$sql.= " '".$this->db->idate($this->datepaid)."',";
    +			$sql.= " '".$this->db->idate($this->datep)."',";
     			$sql.= " ".$this->amount_capital.",";
     			$sql.= " ".$this->amount_insurance.",";
     			$sql.= " ".$this->amount_interest.",";
    @@ -130,7 +173,6 @@ class PaymentLoan extends CommonObject
     				$this->error=$this->db->lasterror();
     				$error++;
     			}
    -
     		}
     
     		if ($totalamount != 0 && ! $error)
    @@ -209,8 +251,8 @@ class PaymentLoan extends CommonObject
     				$this->type_code = $obj->type_code;
     				$this->type_libelle = $obj->type_libelle;
     
    -				$this->bank_account   = $obj->fk_account;
    -				$this->bank_line      = $obj->fk_bank;
    +				$this->bank_account = $obj->fk_account;
    +				$this->bank_line = $obj->fk_bank;
     			}
     			$this->db->free($resql);
     
    @@ -237,20 +279,19 @@ class PaymentLoan extends CommonObject
     		$error=0;
     
     		// Clean parameters
    -		if (isset($this->fk_loan)) $this->fk_loan=trim($this->fk_loan);
    +		if (isset($this->fk_loan)) $this->fk_loan = (int) $this->fk_loan;
     		if (isset($this->amount_capital)) $this->amount_capital=trim($this->amount_capital);
     		if (isset($this->amount_insurance)) $this->amount_insurance=trim($this->amount_insurance);
     		if (isset($this->amount_interest)) $this->amount_interest=trim($this->amount_interest);
    -		if (isset($this->fk_typepayment)) $this->fk_typepayment=trim($this->fk_typepayment);
    -		if (isset($this->num_payment)) $this->num_payment=trim($this->num_payment);
    +		if (isset($this->fk_typepayment)) $this->fk_typepayment = (int) $this->fk_typepayment;
    +		if (isset($this->num_payment)) $this->num_payment = (int) $this->num_payment;
     		if (isset($this->note_private)) $this->note=trim($this->note_private);
     		if (isset($this->note_public)) $this->note=trim($this->note_public);
    -		if (isset($this->fk_bank)) $this->fk_bank=trim($this->fk_bank);
    -		if (isset($this->fk_user_creat)) $this->fk_user_creat=trim($this->fk_user_creat);
    -		if (isset($this->fk_user_modif)) $this->fk_user_modif=trim($this->fk_user_modif);
    +		if (isset($this->fk_bank)) $this->fk_bank = (int) $this->fk_bank;
    +		if (isset($this->fk_user_creat)) $this->fk_user_creat = (int) $this->fk_user_creat;
    +		if (isset($this->fk_user_modif)) $this->fk_user_modif = (int) $this->fk_user_modif;
     
     		// Check parameters
    -		// Put here code to add control on parameters values
     
     		// Update request
     		$sql = "UPDATE ".MAIN_DB_PREFIX."payment_loan SET";
    @@ -412,7 +453,7 @@ class PaymentLoan extends CommonObject
     
     			// Insert payment into llx_bank
     			$bank_line_id = $acc->addline(
    -				$this->datepaid,
    +				$this->datep,
     				$this->paymenttype,  // Payment mode id or code ("CHQ or VIR for example")
     				$label,
     				$total,
    @@ -472,6 +513,7 @@ class PaymentLoan extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update link between loan's payment and the line generate in llx_bank
     	 *
    @@ -480,6 +522,7 @@ class PaymentLoan extends CommonObject
     	 */
     	function update_fk_bank($id_bank)
     	{
    +        // phpcs:enable
     		$sql = "UPDATE ".MAIN_DB_PREFIX."payment_loan SET fk_bank = ".$id_bank." WHERE rowid = ".$this->id;
     
     		dol_syslog(get_class($this)."::update_fk_bank", LOG_DEBUG);
    diff --git a/htdocs/loan/createschedule.php b/htdocs/loan/createschedule.php
    index e895edeec62..7cfd54ab998 100644
    --- a/htdocs/loan/createschedule.php
    +++ b/htdocs/loan/createschedule.php
    @@ -51,7 +51,7 @@ if ($action == 'createecheancier') {
     		$echeance->fk_loan = $object->id;
     		$echeance->datec = dol_now();
     		$echeance->tms = dol_now();
    -		$echeance->datepaid = $date;
    +		$echeance->datep = $date;
     		$echeance->amount_capital = $mens-$int;
     		$echeance->amount_insurance = 0;
     		$echeance->amount_interest = $int;
    @@ -61,7 +61,7 @@ if ($action == 'createecheancier') {
     		$echeance->fk_user_modif = $user->id;
     		$result=$echeance->create($user);
     		if ($result<0) {
    -			setEventMessages(null, $echeance->errors,'errors');
    +			setEventMessages($echeance->error, $echeance->errors,'errors');
     		}
     		$i++;
     	}
    @@ -165,7 +165,7 @@ if ($object->nbterm > 0 && count($echeance->lines)==0)
     	$capital = $object->capital;
     	while($i <$object->nbterm+1)
     	{
    -		$mens = price2num($echeance->calc_mens($capital, $object->rate/100, $object->nbterm-$i+1), 'MT');
    +		$mens = price2num($echeance->calcMonthlyPayments($capital, $object->rate/100, $object->nbterm-$i+1), 'MT');
     		$int = ($capital*($object->rate/12))/100;
     		$int = price2num($int, 'MT');
     		$cap_rest = price2num($capital - ($mens-$int), 'MT');
    @@ -210,8 +210,6 @@ print '</br>';
     print '<div align="center"><input class="button" type="submit" value="'.$langs->trans("Save").'"></div>';
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    -
    -
    -
    diff --git a/htdocs/loan/document.php b/htdocs/loan/document.php
    index f9d17c563fa..553bbc258e8 100644
    --- a/htdocs/loan/document.php
    +++ b/htdocs/loan/document.php
    @@ -124,7 +124,7 @@ if ($object->id)
     	}
     	$morehtmlref.='</div>';
     
    -	$linkback = '<a href="' . DOL_URL_ROOT . '/loan/index.php">' . $langs->trans("BackToList") . '</a>';
    +	$linkback = '<a href="' . DOL_URL_ROOT . '/loan/list.php">' . $langs->trans("BackToList") . '</a>';
     
     	$object->totalpaid = $totalpaid;   // To give a chance to dol_banner_tab to use already paid amount to show correct status
     
    @@ -134,7 +134,7 @@ if ($object->id)
     	print '<div class="underbanner clearboth"></div>';
     
     
    -    // Construit liste des fichiers
    +    // Build file list
         $filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
         $totalsize=0;
         foreach($filearray as $key => $file)
    @@ -163,7 +163,6 @@ else
         print $langs->trans("ErrorUnknown");
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/loan/info.php b/htdocs/loan/info.php
    index d5b6e673f7c..cc923b17fea 100644
    --- a/htdocs/loan/info.php
    +++ b/htdocs/loan/info.php
    @@ -96,7 +96,7 @@ if (! empty($conf->projet->enabled)) {
     }
     $morehtmlref.='</div>';
     
    -$linkback = '<a href="' . DOL_URL_ROOT . '/loan/index.php">' . $langs->trans("BackToList") . '</a>';
    +$linkback = '<a href="' . DOL_URL_ROOT . '/loan/list.php">' . $langs->trans("BackToList") . '</a>';
     
     $object->totalpaid = $totalpaid;   // To give a chance to dol_banner_tab to use already paid amount to show correct status
     
    @@ -113,5 +113,6 @@ print '</td></tr></table>';
     
     print '</div>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/loan/index.php b/htdocs/loan/list.php
    similarity index 99%
    rename from htdocs/loan/index.php
    rename to htdocs/loan/list.php
    index a032139c8fa..780d28df081 100644
    --- a/htdocs/loan/index.php
    +++ b/htdocs/loan/list.php
    @@ -19,7 +19,7 @@
      */
     
     /**
    - *  \file       htdocs/loan/index.php
    + *  \file       htdocs/loan/list.php
      *  \ingroup    loan
      *  \brief      Page to list all loans
      */
    @@ -104,7 +104,6 @@ if ($resql)
     {
     	$num = $db->num_rows($resql);
     	$i = 0;
    -	$var=true;
     
     	$param='';
     	if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.urlencode($contextpage);
    @@ -167,7 +166,6 @@ if ($resql)
     		$loan_static->ref = $obj->rowid;
     		$loan_static->label = $obj->label;
     
    -		$var = !$var;
     		print '<tr class="oddeven">';
     
     		// Ref
    @@ -204,6 +202,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/loan/note.php b/htdocs/loan/note.php
    index f38ed50e431..e066ef07a8e 100644
    --- a/htdocs/loan/note.php
    +++ b/htdocs/loan/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2007  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2013       Florian Henry           <florian.henry@open-concept.pro>
      * Copyright (C) 2015       Frederic France         <frederic.france@free.fr>
      * Copyright (C) 2016-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    @@ -113,7 +113,7 @@ if ($id > 0)
     	}
     	$morehtmlref.='</div>';
     
    -	$linkback = '<a href="' . DOL_URL_ROOT . '/loan/index.php">' . $langs->trans("BackToList") . '</a>';
    +	$linkback = '<a href="' . DOL_URL_ROOT . '/loan/list.php">' . $langs->trans("BackToList") . '</a>';
     
     	$object->totalpaid = $totalpaid;   // To give a chance to dol_banner_tab to use already paid amount to show correct status
     
    @@ -129,6 +129,7 @@ if ($id > 0)
         dol_fiche_end();
     }
     
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/loan/payment/card.php b/htdocs/loan/payment/card.php
    index e19e33bc31e..77d47e66b40 100644
    --- a/htdocs/loan/payment/card.php
    +++ b/htdocs/loan/payment/card.php
    @@ -58,7 +58,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->loan->del
     	if ($result > 0)
     	{
     		$db->commit();
    -		header("Location: ".DOL_URL_ROOT."/loan/index.php");
    +		header("Location: ".DOL_URL_ROOT."/loan/list.php");
     		exit;
     	}
     	else
    @@ -292,8 +292,6 @@ if (empty($action) && ! empty($user->rights->loan->delete))
     
     print '</div>';
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/loan/payment/payment.php b/htdocs/loan/payment/payment.php
    index ee83bf17f00..08937c1f389 100644
    --- a/htdocs/loan/payment/payment.php
    +++ b/htdocs/loan/payment/payment.php
    @@ -1,6 +1,6 @@
     <?php
    -/* Copyright (C) 2014-2018  Alexandre Spangaro   <aspangaro@zendsi.com>
    - * Copyright (C) 2015       Frederic France      <frederic.france@free.fr>
    +/* Copyright (C) 2014-2018  Alexandre Spangaro      <aspangaro@zendsi.com>
    + * Copyright (C) 2015-2018  Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -93,12 +93,12 @@ if ($action == 'add_payment')
         		// Create a line of payments
         		$payment = new PaymentLoan($db);
         		$payment->chid				= $chid;
    -    		$payment->datepaid			= $datepaid;
    +    		$payment->datep = $datepaid;
                 $payment->label             = $loan->label;
     			$payment->amount_capital	= GETPOST('amount_capital');
     			$payment->amount_insurance	= GETPOST('amount_insurance');
     			$payment->amount_interest	= GETPOST('amount_interest');
    -			$payment->paymenttype		= GETPOST('paymenttype');
    +			$payment->paymenttype = GETPOST('paymenttype', 'int');
         		$payment->num_payment		= GETPOST('num_payment');
         		$payment->note_private      = GETPOST('note_private','none');
         		$payment->note_public       = GETPOST('note_public','none');
    @@ -200,7 +200,7 @@ if ($action == 'create')
     	print '<tr><td class="titlefield fieldrequired">'.$langs->trans("Date").'</td><td colspan="2">';
     	$datepaid = dol_mktime(12, 0, 0, GETPOST('remonth', 'int'), GETPOST('reday', 'int'), GETPOST('reyear', 'int'));
     	$datepayment = empty($conf->global->MAIN_AUTOFILL_DATE)?(empty($_POST["remonth"])?-1:$datepaye):0;
    -	$form->select_date($datepayment, '', '', '', '', "add_payment", 1, 1);
    +	print $form->selectDate($datepayment, '', '', '', '', "add_payment", 1, 1);
     	print "</td>";
     	print '</tr>';
     
    diff --git a/htdocs/mailmanspip/class/mailmanspip.class.php b/htdocs/mailmanspip/class/mailmanspip.class.php
    index f7ae2608da5..213febdc4b5 100644
    --- a/htdocs/mailmanspip/class/mailmanspip.class.php
    +++ b/htdocs/mailmanspip/class/mailmanspip.class.php
    @@ -1,11 +1,12 @@
     <?php
    -/* Copyright (C) 2002-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
    - * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
    - * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    - * Copyright (C) 2012      Marcos García        <marcosgdf@gmail.com>
    +/* Copyright (C) 2002-2003  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2002-2003  Jean-Louis Bergamo      <jlb@j1b.org>
    + * Copyright (C) 2004-2013  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2004       Sebastien Di Cintio     <sdicintio@ressource-toi.org>
    + * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
    + * Copyright (C) 2009       Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2012       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -38,13 +39,25 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
      */
     class MailmanSpip
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -    var $mladded_ok;
    -    var $mladded_ko;
    -    var $mlremoved_ok;
    -    var $mlremoved_ko;
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +    /**
    +     * @var string[]	Array of error strings
    +     */
    +    public $errors = array();
    +
    +    public $mladded_ok;
    +    public $mladded_ko;
    +    public $mlremoved_ok;
    +    public $mlremoved_ko;
     
     
         /**
    @@ -163,6 +176,7 @@ class MailmanSpip
             return $result;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Fonction qui donne les droits redacteurs dans spip
          *
    @@ -171,6 +185,7 @@ class MailmanSpip
          */
         function add_to_spip($object)
         {
    +        // phpcs:enable
             dol_syslog(get_class($this)."::add_to_spip");
     
             if ($this->isSpipEnabled())
    @@ -205,6 +220,7 @@ class MailmanSpip
             return 0;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Fonction qui enleve les droits redacteurs dans spip
          *
    @@ -213,6 +229,7 @@ class MailmanSpip
          */
         function del_to_spip($object)
         {
    +        // phpcs:enable
             dol_syslog(get_class($this)."::del_to_spip");
     
             if ($this->isSpipEnabled())
    @@ -244,6 +261,7 @@ class MailmanSpip
             return 0;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Fonction qui dit si cet utilisateur est un redacteur existant dans spip
          *
    @@ -252,6 +270,7 @@ class MailmanSpip
          */
         function is_in_spip($object)
         {
    +        // phpcs:enable
             if ($this->isSpipEnabled())
             {
                 if ($this->checkSpipConfig())
    @@ -294,6 +313,7 @@ class MailmanSpip
             return -1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Subscribe an email to all mailing-lists
          *
    @@ -303,6 +323,7 @@ class MailmanSpip
          */
         function add_to_mailman($object,$listes='')
         {
    +        // phpcs:enable
             global $conf,$langs,$user;
     
             dol_syslog(get_class($this)."::add_to_mailman");
    @@ -365,6 +386,7 @@ class MailmanSpip
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Unsubscribe an email from all mailing-lists
          *  Used when a user is resiliated
    @@ -375,6 +397,7 @@ class MailmanSpip
          */
         function del_to_mailman($object,$listes='')
         {
    +        // phpcs:enable
             global $conf,$langs,$user;
     
             dol_syslog(get_class($this)."::del_to_mailman");
    @@ -436,5 +459,4 @@ class MailmanSpip
     	        }
             }
         }
    -
     }
    diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php
    index 826f83356c4..06f67a9b79f 100644
    --- a/htdocs/main.inc.php
    +++ b/htdocs/main.inc.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2004       Sebastien Di Cintio     <sdicintio@ressource-toi.org>
      * Copyright (C) 2004       Benoit Mortier          <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2015  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2014  Philippe Grand          <philippe.grand@atoo-net.com>
      * Copyright (C) 2008       Matteli
      * Copyright (C) 2011-2016  Juanjo Menent           <jmenent@2byte.es>
    @@ -68,6 +68,22 @@ if (function_exists('get_magic_quotes_gpc'))	// magic_quotes_* deprecated in PHP
     	}
     }
     
    +// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +/**
    + * Security: SQL Injection and XSS Injection (scripts) protection (Filters on GET, POST, PHP_SELF).
    + *
    + * @param       string      $val        Value
    + * @param       string      $type       1=GET, 0=POST, 2=PHP_SELF, 3=GET without sql reserved keywords (the less tolerant test)
    + * @return      int                     >0 if there is an injection, 0 if none
    + * @deprecated                          use testSqlAndScriptInject
    + * @see testSqlAndScriptInject($val, $type)
    + */
    +function test_sql_and_script_inject($val, $type)
    +{
    +    // phpcs:enable
    +    return testSqlAndScriptInject($val, $type);
    +}
    +
     /**
      * Security: SQL Injection and XSS Injection (scripts) protection (Filters on GET, POST, PHP_SELF).
      *
    @@ -75,7 +91,7 @@ if (function_exists('get_magic_quotes_gpc'))	// magic_quotes_* deprecated in PHP
      * @param		string		$type		1=GET, 0=POST, 2=PHP_SELF, 3=GET without sql reserved keywords (the less tolerant test)
      * @return		int						>0 if there is an injection, 0 if none
      */
    -function test_sql_and_script_inject($val, $type)
    +function testSqlAndScriptInject($val, $type)
     {
     	$inj = 0;
     	// For SQL Injection (only GET are used to be included into bad escaped SQL requests)
    @@ -158,7 +174,7 @@ function analyseVarsForSqlAndScriptsInjection(&$var, $type)
     	}
     	else
     	{
    -		return (test_sql_and_script_inject($var, $type) <= 0);
    +		return (testSqlAndScriptInject($var, $type) <= 0);
     	}
     }
     
    @@ -256,8 +272,6 @@ if (isset($_SERVER["HTTP_USER_AGENT"]))
     	$conf->browser->os=$tmp['browseros'];
     	$conf->browser->version=$tmp['browserversion'];
     	$conf->browser->layout=$tmp['layout'];     // 'classic', 'phone', 'tablet'
    -	$conf->browser->phone=$tmp['phone'];	   // TODO deprecated, use ->layout
    -	$conf->browser->tablet=$tmp['tablet'];	   // TODO deprecated, use ->layout
     	//var_dump($conf->browser);
     
     	if ($conf->browser->layout == 'phone') $conf->dol_no_mouse_hover=1;
    @@ -486,17 +500,6 @@ if (! defined('NOLOGIN'))
     				$_SESSION["dol_loginmesg"]=$langs->trans("ErrorBadValueForCode");
     				$test=false;
     
    -				// TODO @deprecated Remove this. Hook must be used, not this trigger.
    -				$user->trigger_mesg='ErrorBadValueForCode - login='.GETPOST("username","alpha",2);
    -				// Call of triggers
    -				include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -				$interface=new Interfaces($db);
    -				$result=$interface->run_triggers('USER_LOGIN_FAILED',$user,$user,$langs,$conf);
    -				if ($result < 0) {
    -					$error++;
    -				}
    -				// End Call of triggers
    -
     				// Hooks on failed login
     				$action='';
     				$hookmanager->initHooks(array('login'));
    @@ -565,17 +568,6 @@ if (! defined('NOLOGIN'))
     				// We set a generic message if not defined inside function checkLoginPassEntity or subfunctions
     				if (empty($_SESSION["dol_loginmesg"])) $_SESSION["dol_loginmesg"]=$langs->trans("ErrorBadLoginPassword");
     
    -				// TODO @deprecated Remove this. Hook must be used, not this trigger.
    -				$user->trigger_mesg=$langs->trans("ErrorBadLoginPassword").' - login='.GETPOST("username","alpha",2);
    -				// Call of triggers
    -				include_once DOL_DOCUMENT_ROOT.'/core/class/interfaces.class.php';
    -				$interface=new Interfaces($db);
    -				$result=$interface->run_triggers('USER_LOGIN_FAILED',$user,$user,$langs,$conf,GETPOST("username","alpha",2));
    -				if ($result < 0) {
    -					$error++;
    -				}
    -				// End Call of triggers
    -
     				// Hooks on failed login
     				$action='';
     				$hookmanager->initHooks(array('login'));
    @@ -612,27 +604,12 @@ if (! defined('NOLOGIN'))
     				$langs->loadLangs(array('main', 'errors'));
     
     				$_SESSION["dol_loginmesg"]=$langs->trans("ErrorCantLoadUserFromDolibarrDatabase",$login);
    -
    -				// TODO @deprecated Remove this. Hook must be used, not this trigger.
    -				$user->trigger_mesg='ErrorCantLoadUserFromDolibarrDatabase - login='.$login;
     			}
     			if ($resultFetchUser < 0)
     			{
     				$_SESSION["dol_loginmesg"]=$user->error;
    -
    -				// TODO @deprecated Remove this. Hook must be used, not this trigger.
    -				$user->trigger_mesg=$user->error;
     			}
     
    -			// Call triggers
    -			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -			$interface=new Interfaces($db);
    -			$result=$interface->run_triggers('USER_LOGIN_FAILED',$user,$user,$langs,$conf);
    -			if ($result < 0) {
    -				$error++;
    -			}
    -			// End call triggers
    -
     			// Hooks on failed login
     			$action='';
     			$hookmanager->initHooks(array('login'));
    @@ -671,28 +648,12 @@ if (! defined('NOLOGIN'))
     				$langs->loadLangs(array('main', 'errors'));
     
     				$_SESSION["dol_loginmesg"]=$langs->trans("ErrorCantLoadUserFromDolibarrDatabase",$login);
    -
    -				// TODO @deprecated Remove this. Hook must be used, not this trigger.
    -				$user->trigger_mesg='ErrorCantLoadUserFromDolibarrDatabase - login='.$login;
     			}
     			if ($resultFetchUser < 0)
     			{
     				$_SESSION["dol_loginmesg"]=$user->error;
    -
    -				// TODO @deprecated Remove this. Hook must be used, not this trigger.
    -				$user->trigger_mesg=$user->error;
     			}
     
    -			// TODO @deprecated Remove this. Hook must be used, not this trigger.
    -			// Call triggers
    -			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -			$interface=new Interfaces($db);
    -			$result=$interface->run_triggers('USER_LOGIN_FAILED',$user,$user,$langs,$conf);
    -			if ($result < 0) {
    -				$error++;
    -			}
    -			// End call triggers
    -
     			// Hooks on failed login
     			$action='';
     			$hookmanager->initHooks(array('login'));
    @@ -780,17 +741,6 @@ if (! defined('NOLOGIN'))
     
     		$loginfo = 'TZ='.$_SESSION["dol_tz"].';TZString='.$_SESSION["dol_tz_string"].';Screen='.$_SESSION["dol_screenwidth"].'x'.$_SESSION["dol_screenheight"];
     
    -		// TODO @deprecated Remove this. Hook must be used, not this trigger.
    -		$user->trigger_mesg = $loginfo;
    -		// Call triggers
    -		include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -		$interface=new Interfaces($db);
    -		$result=$interface->run_triggers('USER_LOGIN',$user,$user,$langs,$conf);
    -		if ($result < 0) {
    -			$error++;
    -		}
    -		// End call triggers
    -
     		// Hooks on successfull login
     		$action='';
     		$hookmanager->initHooks(array('login'));
    @@ -802,7 +752,7 @@ if (! defined('NOLOGIN'))
     		{
     			$db->rollback();
     			session_destroy();
    -			dol_print_error($db,'Error in some hooks afterLogin (or old trigger USER_LOGIN)');
    +			dol_print_error($db,'Error in some hooks afterLogin');
     			exit;
     		}
     		else
    @@ -900,7 +850,6 @@ if (! empty($conf->dol_use_jmobile) && in_array($conf->theme,array('bureau2crea'
     	$conf->theme='eldy';
     	$conf->css  =  "/theme/".$conf->theme."/style.css.php";
     }
    -//var_dump($conf->browser->phone);
     
     if (! defined('NOREQUIRETRAN'))
     {
    @@ -988,7 +937,7 @@ else
     	define('ROWS_9',8);
     }
     
    -$heightforframes=48;
    +$heightforframes=50;
     
     // Init menu manager
     if (! defined('NOREQUIREMENU'))
    @@ -1170,12 +1119,15 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
     		$ext='layout='.$conf->browser->layout.'&version='.urlencode(DOL_VERSION);
     
     		print "<head>\n";
    +
     		if (GETPOST('dol_basehref','alpha')) print '<base href="'.dol_escape_htmltag(GETPOST('dol_basehref','alpha')).'">'."\n";
    +
     		// Displays meta
     		print '<meta charset="UTF-8">'."\n";
     		print '<meta name="robots" content="noindex'.($disablenofollow?'':',nofollow').'">'."\n";	// Do not index
     		print '<meta name="viewport" content="width=device-width, initial-scale=1.0">'."\n";		// Scale for mobile device
     		print '<meta name="author" content="Dolibarr Development Team">'."\n";
    +
     		// Favicon
     		$favicon=dol_buildpath('/theme/'.$conf->theme.'/img/favicon.ico',1);
     		if (! empty($conf->global->MAIN_FAVICON_URL)) $favicon=$conf->global->MAIN_FAVICON_URL;
    @@ -1184,6 +1136,9 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
     		//if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print '<link rel="copyright" title="GNU General Public License" href="http://www.gnu.org/copyleft/gpl.html#SEC1">'."\n";
     		//if (empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) print '<link rel="author" title="Dolibarr Development Team" href="https://www.dolibarr.org">'."\n";
     
    +		// Auto refresh page
    +		if (GETPOST('autorefresh','int') > 0) print '<meta http-equiv="refresh" content="'.GETPOST('autorefresh','int').'">';
    +
     		// Displays title
     		$appli=constant('DOL_APPLICATION_TITLE');
     		if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_APPLICATION_TITLE;
    @@ -1357,7 +1312,11 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
                 	$tmpplugin=empty($conf->global->MAIN_USE_JQUERY_MULTISELECT)?constant('REQUIRE_JQUERY_MULTISELECT'):$conf->global->MAIN_USE_JQUERY_MULTISELECT;
                 	print '<script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/'.$tmpplugin.'/dist/js/'.$tmpplugin.'.full.min.js'.($ext?'?'.$ext:'').'"></script>'."\n";	// We include full because we need the support of containerCssClass
                 }
    -        }
    +            if (! defined('DISABLE_MULTISELECT'))     // jQuery plugin "mutiselect" to select with checkboxes
    +            {
    +            	print '<script type="text/javascript" src="'.DOL_URL_ROOT.'/includes/jquery/plugins/multiselect/jquery.multi-select.js'.($ext?'?'.$ext:'').'"></script>'."\n";
    +            }
    +		}
     
             if (! $disablejs && ! empty($conf->use_javascript_ajax))
             {
    @@ -1423,7 +1382,6 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
                         }
                         else
                         {
    -                        if (! preg_match('/^\//',$jsfile)) $jsfile='/'.$jsfile;	// For backward compatibility
                             print '<script type="text/javascript" src="'.dol_buildpath($jsfile,1).'"></script>'."\n";
                         }
                     }
    @@ -1453,7 +1411,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs
      *  @param		string	$morequerystring	Query string to add to the link "print" to get same parameters (use only if autodetect fails)
      *  @param      string	$helppagename    	Name of wiki page for help ('' by default).
      * 				     		                Syntax is: For a wiki page: EN:EnglishPage|FR:FrenchPage|ES:SpanishPage
    - * 									                   For other external page: http://server/url
    + * 						                    For other external page: http://server/url
      *  @return		void
      */
     function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $helppagename='')
    @@ -1568,7 +1526,7 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a
     		}
     
     		// Link to print main content area
    -		if (empty($conf->global->MAIN_PRINT_DISABLELINK) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && empty($conf->browser->phone))
    +		if (empty($conf->global->MAIN_PRINT_DISABLELINK) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && $conf->browser->layout != 'phone')
     		{
     			$qs=dol_escape_htmltag($_SERVER["QUERY_STRING"]);
     
    @@ -1653,7 +1611,7 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a
      *  @param  array	$menu_array_before 	       	Table of menu entries to show before entries of menu handler. This param is deprectaed and must be provided to ''.
      *  @param  string	$helppagename    	       	Name of wiki page for help ('' by default).
      * 				     		                   	Syntax is: For a wiki page: EN:EnglishPage|FR:FrenchPage|ES:SpanishPage
    - * 									         		       For other external page: http://server/url
    + * 									         	For other external page: http://server/url
      *  @param  string	$notused             		Deprecated. Used in past to add content into left menu. Hooks can be used now.
      *  @param  array	$menu_array_after           Table of menu entries to show after entries of menu handler
      *  @param  int		$leftmenuwithoutmainarea    Must be set to 1. 0 by default for backward compatibility with old modules.
    @@ -1732,7 +1690,7 @@ function left_menu($menu_array_before, $helppagename='', $notused='', $menu_arra
     		// Define $bookmarks
     		if (! empty($conf->bookmark->enabled) && $user->rights->bookmark->lire)
     		{
    -			include_once (DOL_DOCUMENT_ROOT.'/bookmarks/bookmarks.lib.php');
    +			include_once DOL_DOCUMENT_ROOT.'/bookmarks/bookmarks.lib.php';
     			$langs->load("bookmarks");
     
     			$bookmarks=printBookmarksList($db, $langs);
    @@ -1793,9 +1751,8 @@ function left_menu($menu_array_before, $helppagename='', $notused='', $menu_arra
     			$bugbaseurl.= '?title=';
     			$bugbaseurl.= urlencode("Bug: ");
     			$bugbaseurl.= '&body=';
    -			// TODO use .github/ISSUE_TEMPLATE.md to generate?
    -			$bugbaseurl .= urlencode("# Bug\n");
    -			$bugbaseurl .= urlencode("\n");
    +			$bugbaseurl.= urlencode("# Bug\n");
    +			$bugbaseurl.= urlencode("\n");
     			$bugbaseurl.= urlencode("## Environment\n");
     			$bugbaseurl.= urlencode("- **Version**: " . DOL_VERSION . "\n");
     			$bugbaseurl.= urlencode("- **OS**: " . php_uname('s') . "\n");
    @@ -2071,4 +2028,3 @@ if (! function_exists("llxFooter"))
     		print "</html>\n";
     	}
     }
    -
    diff --git a/htdocs/margin/admin/margin.php b/htdocs/margin/admin/margin.php
    index d37dfe0c83b..b2c74506990 100644
    --- a/htdocs/margin/admin/margin.php
    +++ b/htdocs/margin/admin/margin.php
    @@ -26,13 +26,10 @@ include '../../main.inc.php';
     
     require_once DOL_DOCUMENT_ROOT.'/margin/lib/margins.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
    -require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php');
    -require_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
    +require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php";
     
    -$langs->load("admin");
    -$langs->load("bills");
    -$langs->load("margins");
    -$langs->load("stocks");
    +$langs->loadLangs(array("admin", "bills", "margins", "stocks"));
     
     if (! $user->admin) accessforbidden();
     
    @@ -129,11 +126,9 @@ print '<td colspan="2" align="center">'.$langs->trans("Value").'</td>'."\n";
     print '<td align="left">'.$langs->trans("Description").'</td>'."\n";
     print '</tr>';
     
    -$var=true;
     $form = new Form($db);
     
     // GLOBAL DISCOUNT MANAGEMENT
    -
     print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     print "<input type=\"hidden\" name=\"action\" value=\"typemarges\">";
    @@ -165,7 +160,6 @@ print '</tr>';
     print '</form>';
     
     // DISPLAY MARGIN RATES
    -
     print '<tr class="oddeven">';
     print '<td>'.$langs->trans("DisplayMarginRates").'</td>';
     print '<td colspan="2" align="center">';
    @@ -189,7 +183,6 @@ print '<td>'.$langs->trans('MarginRate').' = '.$langs->trans('Margin').' / '.$la
     print '</tr>';
     
     // DISPLAY MARK RATES
    -
     print '<tr class="oddeven">';
     print '<td>'.$langs->trans("DisplayMarkRates").'</td>';
     print '<td colspan="2" align="center">';
    @@ -259,7 +252,6 @@ print '</tr>';
     print '</form>';
     
     // INTERNAL CONTACT TYPE USED AS COMMERCIAL AGENT
    -
     print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     print "<input type=\"hidden\" name=\"action\" value=\"contact\">";
    @@ -283,5 +275,6 @@ dol_fiche_end();
     
     print '<br>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/margin/agentMargins.php b/htdocs/margin/agentMargins.php
    index 2e80fe5ced2..5c808051a06 100644
    --- a/htdocs/margin/agentMargins.php
    +++ b/htdocs/margin/agentMargins.php
    @@ -110,11 +110,11 @@ print '</td></tr>';
     // Start date
     print '<td>'.$langs->trans('DateStart').' ('.$langs->trans("DateValidation").')</td>';
     print '<td>';
    -$form->select_date($startdate,'startdate','','',1,"sel",1,1);
    +print $form->selectDate($startdate, 'startdate', '', '', 1, "sel", 1, 1);
     print '</td>';
     print '<td>'.$langs->trans('DateEnd').' ('.$langs->trans("DateValidation").')</td>';
     print '<td>';
    -$form->select_date($enddate,'enddate','','',1,"sel",1,1);
    +print $form->selectDate($enddate, 'enddate', '', '', 1, "sel", 1, 1);
     print '</td>';
     print '<td style="text-align: center;">';
     print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans('Refresh')).'" />';
    @@ -208,7 +208,6 @@ if ($result)
     
     	if ($num > 0)
     	{
    -		$var=true;
     
     		while ($i < $num /*&& $i < $conf->liste_limit*/)
     		{
    @@ -229,8 +228,6 @@ if ($result)
     				$markRate = ($pv != 0)?(100 * $marge / $pv):'' ;
     			}
     
    -
    -
     			print '<tr class="oddeven">';
     			if ($agentid > 0) {
     				$companystatic->id=$objp->socid;
    @@ -271,6 +268,6 @@ $(document).ready(function() {
     });
     </script>'."\n";
     
    +// End of page
     llxFooter();
     $db->close();
    -
    diff --git a/htdocs/margin/checkMargins.php b/htdocs/margin/checkMargins.php
    index 0612c143497..06527f42b91 100644
    --- a/htdocs/margin/checkMargins.php
    +++ b/htdocs/margin/checkMargins.php
    @@ -165,11 +165,11 @@ print '<table class="border" width="100%">';
     
     print '<tr><td class="titlefield">' . $langs->trans('DateStart') . ' (' . $langs->trans("DateValidation") . ')</td>';
     print '<td>';
    -$form->select_date($startdate, 'startdate', '', '', 1, "sel", 1, 1);
    +print $form->selectDate($startdate, 'startdate', '', '', 1, "sel", 1, 1);
     print '</td>';
     print '<td>' . $langs->trans('DateEnd') . ' (' . $langs->trans("DateValidation") . ')</td>';
     print '<td>';
    -$form->select_date($enddate, 'enddate', '', '', 1, "sel", 1, 1);
    +print $form->selectDate($enddate, 'enddate', '', '', 1, "sel", 1, 1);
     print '</td>';
     print '<td style="text-align: center;">';
     print '<input type="submit" class="button" value="' . dol_escape_htmltag($langs->trans('Refresh')) . '" name="button_search" />';
    @@ -321,5 +321,6 @@ print '</form>';
     
     $db->free($result);
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/margin/customerMargins.php b/htdocs/margin/customerMargins.php
    index 45b604d1919..675fe527a47 100644
    --- a/htdocs/margin/customerMargins.php
    +++ b/htdocs/margin/customerMargins.php
    @@ -159,11 +159,11 @@ print '</tr>';
     // Start date
     print '<td>'.$langs->trans('DateStart').' ('.$langs->trans("DateValidation").')</td>';
     print '<td>';
    -$form->select_date($startdate,'startdate','','',1,"sel",1,1);
    +print $form->selectDate($startdate, 'startdate', '', '', 1, "sel", 1, 1);
     print '</td>';
     print '<td>'.$langs->trans('DateEnd').' ('.$langs->trans("DateValidation").')</td>';
     print '<td>';
    -$form->select_date($enddate,'enddate','','',1,"sel",1,1);
    +print $form->selectDate($enddate, 'enddate', '', '', 1, "sel", 1, 1);
     print '</td>';
     print '<td style="text-align: center;">';
     print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans('Refresh')).'" />';
    @@ -383,5 +383,6 @@ $(document).ready(function() {
     </script>
     ';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/margin/productMargins.php b/htdocs/margin/productMargins.php
    index d827f5d985e..23c9de6c321 100644
    --- a/htdocs/margin/productMargins.php
    +++ b/htdocs/margin/productMargins.php
    @@ -117,7 +117,6 @@ else {
     	print '<td class="maxwidthonsmartphone" colspan="4">';
     	print $form->select_produits('','id','',20,0,1,2,'',1, array(), 0, 'All');
     	print '</td></tr>';
    -
     }
     
     // Categories
    @@ -134,11 +133,11 @@ print '</tr>';
     print '<tr>';
     print '<td class="titlefield">'.$langs->trans('DateStart').' ('.$langs->trans("DateValidation").')</td>';
     print '<td>';
    -$form->select_date($startdate,'startdate','','',1,"sel",1,1);
    +print $form->selectDate($startdate, 'startdate', '', '', 1, "sel", 1, 1);
     print '</td>';
     print '<td>'.$langs->trans('DateEnd').' ('.$langs->trans("DateValidation").')</td>';
     print '<td>';
    -$form->select_date($enddate,'enddate','','',1,"sel",1,1);
    +print $form->selectDate($enddate, 'enddate', '', '', 1, "sel", 1, 1);
     print '</td>';
     print '<td style="text-align: center;">';
     print '<input type="submit" class="button" value="'.dol_escape_htmltag($langs->trans('Refresh')).'" />';
    @@ -316,7 +315,6 @@ if ($result)
     			$cumul_achat += $objp->buying_price;
     			$cumul_vente += $objp->selling_price;
     		}
    -
     	}
     
     	// affichage totaux marges
    @@ -367,5 +365,6 @@ $(document).ready(function() {
     </script>
     ';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/margin/tabs/productMargins.php b/htdocs/margin/tabs/productMargins.php
    index e6c51e2217d..5659be448de 100644
    --- a/htdocs/margin/tabs/productMargins.php
    +++ b/htdocs/margin/tabs/productMargins.php
    @@ -26,10 +26,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     
    -$langs->load("companies");
    -$langs->load("bills");
    -$langs->load("products");
    -$langs->load("margins");
    +$langs->loadLangs(array("companies", "bills", "products", "margins"));
     
     $id = GETPOST('id', 'int');
     $ref = GETPOST('ref', 'alpha');
    @@ -273,5 +270,6 @@ print '
         </script>
     ';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/margin/tabs/thirdpartyMargins.php b/htdocs/margin/tabs/thirdpartyMargins.php
    index 2faaf737fd9..55362ac4218 100644
    --- a/htdocs/margin/tabs/thirdpartyMargins.php
    +++ b/htdocs/margin/tabs/thirdpartyMargins.php
    @@ -26,10 +26,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     
    -$langs->load("companies");
    -$langs->load("bills");
    -$langs->load("products");
    -$langs->load("margins");
    +$langs->loadLangs(array("companies", "bills", "products", "margins"));
     
     // Security check
     $socid = GETPOST('socid','int');
    @@ -287,5 +284,6 @@ print '
         </script>
     ';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/master.inc.php b/htdocs/master.inc.php
    index 52c4c9780c7..10ff15fbabf 100644
    --- a/htdocs/master.inc.php
    +++ b/htdocs/master.inc.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Sebastien Di Cintio		<sdicintio@ressource-toi.org>
      * Copyright (C) 2004		Benoit Mortier			<benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2005		Simon Tosser			<simon@kornog-computing.com>
      * Copyright (C) 2006		Andre Cianfarani		<andre.cianfarani@acdeveloppement.net>
      * Copyright (C) 2010		Juanjo Menent			<jmenent@2byte.es>
    @@ -80,7 +80,7 @@ if (! empty($dolibarr_main_document_root_alt))
     	{
     		if (preg_match('/^http(s)?:/',$value))
     		{
    -			// TODO: Make this a warning rather than an error since the correct value can be derived in most cases
    +			// Show error message
     			$correct_value = str_replace($dolibarr_main_url_root, '', $value);
     			print '<b>Error:</b><br>'."\n";
     			print 'Wrong <b>$dolibarr_main_url_root_alt</b> value in <b>conf.php</b> file.<br>'."\n";
    diff --git a/htdocs/modulebuilder/admin/setup.php b/htdocs/modulebuilder/admin/setup.php
    new file mode 100644
    index 00000000000..6ca9bfe2a1e
    --- /dev/null
    +++ b/htdocs/modulebuilder/admin/setup.php
    @@ -0,0 +1,165 @@
    +<?php
    +/* Copyright (C) 2018 Nicolas ZABOURI   <info@inovea-conseil.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *  \file       htdocs/modulebuilder/admin/setup.php
    + *  \ingroup    modulebuilder
    + *  \brief      Page setup for modulebuilder module
    + */
    +require '../../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
    +
    +global $conf,$langs,$user, $db;
    +$langs->loadLangs(array("admin", "other", "modulebuilder"));
    +
    +if (!$user->admin || empty($conf->modulebuilder->enabled))
    +    accessforbidden();
    +
    +$action = GETPOST('action', 'alpha');
    +$backtopage = GETPOST('backtopage', 'alpha');
    +
    +/*
    + * Actions
    + */
    +if($action=="update"){
    +   $res1=dolibarr_set_const($db, 'MODULEBUILDER_SPECIFIC_README', GETPOST('MODULEBUILDER_SPECIFIC_README'), 'chaine', 0, '', $conf->entity);
    +   if ($res1 < 0)
    +    {
    +        setEventMessages('ErrorFailedToSaveDate', null, 'errors');
    +        $db->rollback();
    +    }
    +    else
    +    {
    +        setEventMessages('RecordModifiedSuccessfully', null, 'mesgs');
    +        $db->commit();
    +    }
    +}
    +
    +if (preg_match('/set_(.*)/', $action, $reg)) {
    +    $code = $reg[1];
    +    $values = GETPOST($code);
    +    if (is_array($values))
    +        $values = implode(',', $values);
    +
    +    if (dolibarr_set_const($db, $code, $values, 'chaine', 0, '', $conf->entity) > 0) {
    +        header("Location: " . $_SERVER["PHP_SELF"]);
    +        exit;
    +    } else {
    +        dol_print_error($db);
    +    }
    +}
    +
    +if (preg_match('/del_(.*)/', $action, $reg)) {
    +    $code = $reg[1];
    +    if (dolibarr_del_const($db, $code, 0) > 0) {
    +        Header("Location: " . $_SERVER["PHP_SELF"]);
    +        exit;
    +    } else {
    +        dol_print_error($db);
    +    }
    +}
    +
    +
    +/*
    + * 	View
    + */
    +
    +$form = new Form($db);
    +
    +llxHeader('', $langs->trans("ModulebuilderSetup"));
    +
    +$linkback = '';
    +if (GETPOST('withtab', 'alpha')) {
    +    $linkback = '<a href="' . ($backtopage ? $backtopage : DOL_URL_ROOT . '/admin/modules.php') . '">' . $langs->trans("BackToModuleList") . '</a>';
    +}
    +
    +print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
    +print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +print '<input type="hidden" name="action" value="update">';
    +
    +print load_fiche_titre($langs->trans("ModuleSetup") . ' ' . $langs->trans('Modulebuilder'), $linkback);
    +
    +if (GETPOST('withtab', 'alpha')) {
    +    dol_fiche_head($head, 'modulebuilder', '', -1);
    +}
    +
    +print '<span class="opacitymedium">' . $langs->trans("ModuleBuilderDesc") . "</span><br>\n";
    +
    +print '<br>';
    +
    +print '<table class="noborder" width="100%">';
    +
    +print '<tr class="liste_titre">';
    +print '<td>' . $langs->trans("Key") . '</td>';
    +print '<td>' . $langs->trans("Value") . '</td>';
    +print "</tr>\n";
    +
    +
    +if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
    +{
    +	// What is use cas of this 2 options ?
    +
    +	print '<tr class="oddeven">';
    +	print '<td>' . $langs->trans("UseAboutPage") . '</td>';
    +	print '<td align="center">';
    +	if ($conf->use_javascript_ajax) {
    +	    print ajax_constantonoff('MODULEBUILDER_USE_ABOUT');
    +	} else {
    +	    if (empty($conf->global->MODULEBUILDER_USE_ABOUT)) {
    +	        print '<a href="' . $_SERVER['PHP_SELF'] . '?action=set_MODULEBUILDER_USE_ABOUT">' . img_picto($langs->trans("Disabled"), 'off') . '</a>';
    +	    } else {
    +	        print '<a href="' . $_SERVER['PHP_SELF'] . '?action=del_MODULEBUILDER_USE_ABOUT">' . img_picto($langs->trans("Enabled"), 'on') . '</a>';
    +	    }
    +	}
    +	print '</td></tr>';
    +
    +	print '<tr class="oddeven">';
    +	print '<td>' . $langs->trans("UseDocFolder") . '</td>';
    +	print '<td align="center">';
    +	if ($conf->use_javascript_ajax) {
    +	    print ajax_constantonoff('MODULEBUILDER_USE_DOCFOLDER');
    +	} else {
    +	    if (empty($conf->global->MODULEBUILDER_USE_DOCFOLDER)) {
    +	        print '<a href="' . $_SERVER['PHP_SELF'] . '?action=set_MODULEBUILDER_USE_DOCFOLDER">' . img_picto($langs->trans("Disabled"), 'off') . '</a>';
    +	    } else {
    +	        print '<a href="' . $_SERVER['PHP_SELF'] . '?action=del_MODULEBUILDER_USE_DOCFOLDER">' . img_picto($langs->trans("Enabled"), 'on') . '</a>';
    +	    }
    +	}
    +	print '</td></tr>';
    +}
    +
    +print '<tr class="oddeven">';
    +print '<td class="tdtop">' . $langs->trans("UseSpecificReadme") . '</td>';
    +print '<td>';
    +print '<textarea class="centpercent" rows="20" name="MODULEBUILDER_SPECIFIC_README">'.$conf->global->MODULEBUILDER_SPECIFIC_README.'</textarea>';
    +print '</td>';
    +print '</tr>';
    +print '</table>';
    +
    +print '<center><input type="submit" class="button" value="'.$langs->trans("Save").'" name="Button"></center>';
    +
    +if (GETPOST('withtab', 'alpha')) {
    +    dol_fiche_end();
    +}
    +
    +print '<br>';
    +
    +print '</form>';
    +
    +// End of page
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/modulebuilder/index.php b/htdocs/modulebuilder/index.php
    index f6646813843..24596255043 100644
    --- a/htdocs/modulebuilder/index.php
    +++ b/htdocs/modulebuilder/index.php
    @@ -35,7 +35,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/utils.class.php';
     
     // Load translation files required by the page
    -$langs->loadLangs(array("admin", "modulebuilder", "other", "cron"));
    +$langs->loadLangs(array("admin", "modulebuilder", "other", "cron", "errors"));
     
     $action=GETPOST('action','aZ09');
     $confirm=GETPOST('confirm','alpha');
    @@ -71,6 +71,11 @@ if (! empty($tmpdir[1]))
     	$dirread=$tmpdir[1];
     	$forceddirread=1;
     }
    +if (GETPOST('dirins','alpha'))
    +{
    +	$dirread = $dirins = GETPOST('dirins','alpha');
    +	$forceddirread=1;
    +}
     
     $FILEFLAG='modulebuilder.txt';
     
    @@ -121,6 +126,15 @@ if ($dirins && $action == 'initmodule' && $modulename)
     			}
     		}
     
    +		if (!empty($conf->global->MODULEBUILDER_USE_ABOUT))
    +		{
    +			dol_delete_file($destdir.'/admin/about.php');
    +		}
    +		if (!empty($conf->global->MODULEBUILDER_USE_DOCFOLDER))
    +		{
    +			dol_delete_dir($destdir.'/doc/');
    +		}
    +
     		// Delete some files related to object (because to previous dolCopyDir has copied everything)
     		dol_delete_file($destdir.'/myobject_card.php');
     		dol_delete_file($destdir.'/myobject_note.php');
    @@ -165,6 +179,12 @@ if ($dirins && $action == 'initmodule' && $modulename)
     				setEventMessages($langs->trans("ErrorFailToMakeReplacementInto", $phpfileval['fullname']), null, 'errors');
     			}
     		}
    +
    +		if (!empty($conf->global->MODULEBUILDER_SPECIFIC_README))
    +		{
    +			dol_delete_file($destdir.'/README.md');
    +			file_put_contents($destdir.'/README.md', $conf->global->MODULEBUILDER_SPECIFIC_README);
    +		}
     	}
     
     	if (! $error)
    @@ -896,17 +916,31 @@ $dirsincustom=dol_dir_list($dirread, 'directories');
     if (is_array($dirsincustom) && count($dirsincustom) > 0) {
     	foreach ($dirsincustom as $dircustomcursor) {
     		$fullname = $dircustomcursor['fullname'];
    -		if (dol_is_file($fullname . '/' . $FILEFLAG)) {
    +		if (dol_is_file($fullname . '/' . $FILEFLAG))
    +		{
     			// Get real name of module (MyModule instead of mymodule)
    -			$descriptorfiles = dol_dir_list($fullname . '/core/modules/', 'files', 0, 'mod.*\.class\.php$');
    +			$dirtoscanrel = basename($fullname).'/core/modules/';
    +
    +			$descriptorfiles = dol_dir_list(dirname($fullname).'/'.$dirtoscanrel, 'files', 0, 'mod.*\.class\.php$');
    +			if (empty($descriptorfiles))	// If descriptor not found into module dir, we look into main module dir.
    +			{
    +				$dirtoscanrel = 'core/modules/';
    +				$descriptorfiles = dol_dir_list($fullname.'/../'.$dirtoscanrel, 'files', 0, 'mod'.strtoupper(basename($fullname)).'\.class\.php$');
    +			}
     			$modulenamewithcase = '';
    +			$moduledescriptorrelpath = '';
    +			$moduledescriptorfullpath = '';
    +
     			foreach ($descriptorfiles as $descriptorcursor) {
     				$modulenamewithcase = preg_replace('/^mod/', '', $descriptorcursor['name']);
     				$modulenamewithcase = preg_replace('/\.class\.php$/', '', $modulenamewithcase);
    +				$moduledescriptorrelpath = $dirtoscanrel.$descriptorcursor['name'];
    +				$moduledescriptorfullpath = $descriptorcursor['fullname'];
    +				//var_dump($descriptorcursor);
     			}
     			if ($modulenamewithcase)
     			{
    -				$listofmodules[$dircustomcursor['name']] = $modulenamewithcase;
    +				$listofmodules[$dircustomcursor['name']] = array('modulenamewithcase'=>$modulenamewithcase, 'moduledescriptorrelpath'=> $moduledescriptorrelpath, 'moduledescriptorfullpath'=>$moduledescriptorfullpath);
     			}
     			//var_dump($listofmodules);
     		}
    @@ -914,7 +948,7 @@ if (is_array($dirsincustom) && count($dirsincustom) > 0) {
     }
     if ($forceddirread && empty($listofmodules))
     {
    -	$listofmodules[strtolower($module)] = $module;
    +	$listofmodules[strtolower($module)] = array('modulenamewithcase'=>$module, 'moduledescriptorrelpath'=> 'notyetimplemented', 'moduledescriptorfullpath'=> 'notyetimplemented');
     }
     
     // Show description of content
    @@ -968,7 +1002,8 @@ if (! empty($module) && $module != 'initmodule' && $module != 'deletemodule')
     	$modulelowercase=strtolower($module);
     
     	// Load module
    -	dol_include_once($modulelowercase.'/core/modules/mod'.$module.'.class.php');
    +	$fullpathdirtodescriptor = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
    +	dol_include_once($fullpathdirtodescriptor);
     	$class='mod'.$module;
     
     	if (class_exists($class))
    @@ -1002,11 +1037,11 @@ $head[$h][1] = $langs->trans("NewModule");
     $head[$h][2] = 'initmodule';
     $h++;
     
    -foreach($listofmodules as $tmpmodule => $tmpmodulewithcase)
    +foreach($listofmodules as $tmpmodule => $tmpmodulearray)
     {
    -	$head[$h][0] = $_SERVER["PHP_SELF"].'?module='.$tmpmodulewithcase.($forceddirread?'@'.$dirread:'');
    -	$head[$h][1] = $tmpmodulewithcase;
    -	$head[$h][2] = $tmpmodulewithcase;
    +	$head[$h][0] = $_SERVER["PHP_SELF"].'?module='.$tmpmodulearray['modulenamewithcase'].($forceddirread?'@'.$dirread:'');
    +	$head[$h][1] = $tmpmodulearray['modulenamewithcase'];
    +	$head[$h][2] = $tmpmodulearray['modulenamewithcase'];
     	$h++;
     }
     
    @@ -1139,13 +1174,20 @@ elseif (! empty($module))
     		$head2[$h][2] = 'buildpackage';
     		$h++;
     
    +		// Link to enable / disable
     		print $modulestatusinfo;
     		print ' '.$linktoenabledisable;
    -		print '<br><br>';
    +		print '<br>';
    +
    +		if (realpath($dirread.'/'.$modulelowercase) != $dirread.'/'.$modulelowercase)
    +		{
    +			print $langs->trans("RealPathOfModule").' : <strong>'.realpath($dirread.'/'.$modulelowercase).'</strong><br>';
    +		}
    +		print '<br>';
     
     		if ($tab == 'description')
     		{
    -			$pathtofile = $modulelowercase.'/core/modules/mod'.$module.'.class.php';
    +			$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
     			$pathtofilereadme = $modulelowercase.'/README.md';
     			$pathtochangelog = $modulelowercase.'/ChangeLog.md';
     
    @@ -1170,7 +1212,7 @@ elseif (! empty($module))
     				print '<br>';
     				print '<br>';
     
    -				print_fiche_titre($langs->trans("DescriptorFile"));
    +				print load_fiche_titre($langs->trans("DescriptorFile"));
     
     				if (! empty($moduleobj))
     				{
    @@ -1234,22 +1276,23 @@ elseif (! empty($module))
     					print '<br><br>';
     
     					// Readme file
    -					print_fiche_titre($langs->trans("ReadmeFile"));
    +					print load_fiche_titre($langs->trans("ReadmeFile"));
     
     					print '<div class="underbanner clearboth"></div>';
     					print '<div class="fichecenter">';
    -
    -					print $moduleobj->getDescLong();
    +					if (dol_is_file($dirread.'/'.$pathtofilereadme)) print $moduleobj->getDescLong();
    +					else print $langs->trans("ErrorFileNotFound", $pathtofilereadme);
     
     					print '<br><br>';
     
     					// ChangeLog
    -					print_fiche_titre($langs->trans("ChangeLog"));
    +					print load_fiche_titre($langs->trans("ChangeLog"));
     
     					print '<div class="underbanner clearboth"></div>';
     					print '<div class="fichecenter">';
     
    -					print $moduleobj->getChangeLog();
    +					if (dol_is_file($dirread.'/'.$pathtochangelog)) print $moduleobj->getChangeLog();
    +					else print $langs->trans("ErrorFileNotFound", $pathtochangelog);
     
     					print '</div>';
     				}
    @@ -1520,6 +1563,8 @@ elseif (! empty($module))
     				if ($action != 'editfile' || empty($file))
     				{
     					try {
    +						//$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
    +
     						$pathtoclass    = strtolower($module).'/class/'.strtolower($tabobj).'.class.php';
     						$pathtoapi      = strtolower($module).'/class/api_'.strtolower($module).'.class.php';
     						$pathtoagenda   = strtolower($module).'/'.strtolower($tabobj).'_agenda.php';
    @@ -1535,20 +1580,22 @@ elseif (! empty($module))
     						$pathtopicto    = strtolower($module).'/img/object_'.strtolower($tabobj).'.png';
     						$pathtoscript   = strtolower($module).'/scripts/'.strtolower($tabobj).'.php';
     
    -						$realpathtoclass    = dol_buildpath($pathtoclass, 0, 1);
    -						$realpathtoapi      = dol_buildpath($pathtoapi, 0, 1);
    -						$realpathtoagenda   = dol_buildpath($pathtoagenda, 0, 1);
    -						$realpathtocard     = dol_buildpath($pathtocard, 0, 1);
    -						$realpathtodocument = dol_buildpath($pathtodocument, 0, 1);
    -						$realpathtolist     = dol_buildpath($pathtolist, 0, 1);
    -						$realpathtonote     = dol_buildpath($pathtonote, 0, 1);
    -						$realpathtophpunit  = dol_buildpath($pathtophpunit, 0, 1);
    -						$realpathtosql      = dol_buildpath($pathtosql, 0, 1);
    -						$realpathtosqlextra = dol_buildpath($pathtosqlextra, 0, 1);
    -						$realpathtosqlkey   = dol_buildpath($pathtosqlkey, 0, 1);
    -						$realpathtolib      = dol_buildpath($pathtolib, 0, 1);
    -						$realpathtopicto    = dol_buildpath($pathtopicto, 0, 1);
    -						$realpathtoscript   = dol_buildpath($pathtoscript, 0, 1);
    +						//var_dump($pathtolib);
    +
    +						$realpathtoclass    = dol_buildpath($pathtoclass, 0, 2);
    +						$realpathtoapi      = dol_buildpath($pathtoapi, 0, 2);
    +						$realpathtoagenda   = dol_buildpath($pathtoagenda, 0, 2);
    +						$realpathtocard     = dol_buildpath($pathtocard, 0, 2);
    +						$realpathtodocument = dol_buildpath($pathtodocument, 0, 2);
    +						$realpathtolist     = dol_buildpath($pathtolist, 0, 2);
    +						$realpathtonote     = dol_buildpath($pathtonote, 0, 2);
    +						$realpathtophpunit  = dol_buildpath($pathtophpunit, 0, 2);
    +						$realpathtosql      = dol_buildpath($pathtosql, 0, 2);
    +						$realpathtosqlextra = dol_buildpath($pathtosqlextra, 0, 2);
    +						$realpathtosqlkey   = dol_buildpath($pathtosqlkey, 0, 2);
    +						$realpathtolib      = dol_buildpath($pathtolib, 0, 2);
    +						$realpathtopicto    = dol_buildpath($pathtopicto, 0, 2);
    +						$realpathtoscript   = dol_buildpath($pathtoscript, 0, 2);
     
     						print '<div class="fichehalfleft">';
     						print '<span class="fa fa-file-o"></span> '.$langs->trans("ClassFile").' : <strong>'.($realpathtoclass?'':'<strike>').$pathtoclass.($realpathtoclass?'':'</strike>').'</strong>';
    @@ -1629,7 +1676,7 @@ elseif (! empty($module))
     						}
     						else
     						{
    -							$result = @include_once($dirread.'/'.$pathtoclass);
    +							$result = @include_once $dirread.'/'.$pathtoclass;
     						}
     						if (class_exists($tabobj))
     						{
    @@ -1669,24 +1716,24 @@ elseif (! empty($module))
     							print '<div class="div-table-responsive">';
     							print '<table class="noborder">';
     							print '<tr class="liste_titre">';
    -							print '<td>'.$langs->trans("Property");
    -							print ' (<a href="https://wiki.dolibarr.org/index.php/Language_and_development_rules#Table_and_fields_structures" target="_blank">'.$langs->trans("Example").'</a>)';
    -							print '</td>';
    -							print '<td>';
    +							print '<th class="liste_titre">'.$langs->trans("Property");
    +							print ' (<a class="" href="https://wiki.dolibarr.org/index.php/Language_and_development_rules#Table_and_fields_structures" target="_blank">'.$langs->trans("SeeExamples").'</a>)';
    +							print '</th>';
    +							print '<th>';
     							print $form->textwithpicto($langs->trans("Label"), $langs->trans("YouCanUseTranslationKey"));
    -							print '</td>';
    -							print '<td>'.$langs->trans("Type").'</td>';
    -							print '<td>'.$form->textwithpicto($langs->trans("ArrayOfKeyValues"), $langs->trans("ArrayOfKeyValuesDesc")).'</td>';
    -							print '<td class="center">'.$form->textwithpicto($langs->trans("NotNull"), $langs->trans("NotNullDesc")).'</td>';
    -							print '<td class="center">'.$langs->trans("DefaultValue").'</td>';
    -							print '<td class="center">'.$langs->trans("DatabaseIndex").'</td>';
    -							print '<td class="right">'.$langs->trans("Position").'</td>';
    -							print '<td class="center">'.$form->textwithpicto($langs->trans("Enabled"), $langs->trans("EnabledDesc")).'</td>';
    -							print '<td class="center">'.$form->textwithpicto($langs->trans("Visible"), $langs->trans("VisibleDesc")).'</td>';
    -							print '<td class="center">'.$form->textwithpicto($langs->trans("IsAMeasure"), $langs->trans("IsAMeasureDesc")).'</td>';
    -							print '<td class="center">'.$form->textwithpicto($langs->trans("SearchAll"), $langs->trans("SearchAllDesc")).'</td>';
    -							print '<td>'.$langs->trans("Comment").'</td>';
    -							print '<td></td>';
    +							print '</th>';
    +							print '<th>'.$langs->trans("Type").'</td>';
    +							print '<th>'.$form->textwithpicto($langs->trans("ArrayOfKeyValues"), $langs->trans("ArrayOfKeyValuesDesc")).'</th>';
    +							print '<th class="center">'.$form->textwithpicto($langs->trans("NotNull"), $langs->trans("NotNullDesc")).'</th>';
    +							print '<th class="center">'.$langs->trans("DefaultValue").'</th>';
    +							print '<th class="center">'.$langs->trans("DatabaseIndex").'</th>';
    +							print '<th class="right">'.$langs->trans("Position").'</th>';
    +							print '<th class="center">'.$form->textwithpicto($langs->trans("Enabled"), $langs->trans("EnabledDesc")).'</th>';
    +							print '<th class="center">'.$form->textwithpicto($langs->trans("Visible"), $langs->trans("VisibleDesc")).'</th>';
    +							print '<th class="center">'.$form->textwithpicto($langs->trans("IsAMeasure"), $langs->trans("IsAMeasureDesc")).'</th>';
    +							print '<th class="center">'.$form->textwithpicto($langs->trans("SearchAll"), $langs->trans("SearchAllDesc")).'</th>';
    +							print '<th>'.$langs->trans("Comment").'</th>';
    +							print '<th></th>';
     							print '</tr>';
     
     							// We must use $reflectorpropdefault['fields'] to get list of fields because $tmpobjet->fields may have been
    @@ -1855,7 +1902,7 @@ elseif (! empty($module))
     
     		if ($tab == 'menus')
     		{
    -			$pathtofile = $modulelowercase.'/core/modules/mod'.$module.'.class.php';
    +			$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
     
     			//$menus = $moduleobj->;
     
    @@ -1980,7 +2027,7 @@ elseif (! empty($module))
     
     		if ($tab == 'permissions')
     		{
    -			$pathtofile = $modulelowercase.'/core/modules/mod'.$module.'.class.php';
    +			$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
     
     			//$perms = $moduleobj->;
     
    @@ -2110,7 +2157,7 @@ elseif (! empty($module))
     				print $langs->trans("HooksDefDesc").'<br>';
     				print '<br>';
     
    -				$pathtofile = $modulelowercase.'/core/modules/mod'.$module.'.class.php';
    +				$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
     				print '<span class="fa fa-file-o"></span> '.$langs->trans("DescriptorFile").' : <strong>'.$pathtofile.'</strong>';
     				print ' <a href="'.$_SERVER['PHP_SELF'].'?tab='.$tab.'&module='.$module.'&action=editfile&format=php&file='.urlencode($pathtofile).'">'.img_picto($langs->trans("Edit"), 'edit').'</a>';
     				print '<br>';
    @@ -2255,7 +2302,7 @@ elseif (! empty($module))
     
     		if ($tab == 'cron')
     		{
    -			$pathtofile = $modulelowercase.'/core/modules/mod'.$module.'.class.php';
    +			$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
     
     			$cronjobs = $moduleobj->cronjobs;
     
    @@ -2389,7 +2436,8 @@ elseif (! empty($module))
     			$FILENAMEZIP='';
     
     			// Load module
    -			dol_include_once($modulelowercase.'/core/modules/mod'.$module.'.class.php');
    +			$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
    +			dol_include_once($pathtofile);
     			$class='mod'.$module;
     
     			if (class_exists($class))
    @@ -2476,8 +2524,6 @@ elseif (! empty($module))
     
     dol_fiche_end(); // End modules
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/modulebuilder/template/admin/about.php b/htdocs/modulebuilder/template/admin/about.php
    index b72917daff0..e580c6c7457 100644
    --- a/htdocs/modulebuilder/template/admin/about.php
    +++ b/htdocs/modulebuilder/template/admin/about.php
    @@ -25,15 +25,15 @@
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
     // Libraries
    diff --git a/htdocs/modulebuilder/template/admin/setup.php b/htdocs/modulebuilder/template/admin/setup.php
    index fd2c509233b..6e0be4d0011 100644
    --- a/htdocs/modulebuilder/template/admin/setup.php
    +++ b/htdocs/modulebuilder/template/admin/setup.php
    @@ -25,15 +25,15 @@
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
     global $langs, $user;
    @@ -85,7 +85,7 @@ $head = mymoduleAdminPrepareHead();
     dol_fiche_head($head, 'settings', '', -1, "mymodule@mymodule");
     
     // Setup page goes here
    -echo $langs->trans("MyModuleSetupPage");
    +echo $langs->trans("MyModuleSetupPage").'<br><br>';
     
     
     if ($action == 'edit')
    @@ -99,13 +99,10 @@ if ($action == 'edit')
     
     	foreach($arrayofparameters as $key => $val)
     	{
    -		if (isset($val['enabled']) && empty($val['enabled'])) continue;
    -
     		print '<tr class="oddeven"><td>';
     		print $form->textwithpicto($langs->trans($key),$langs->trans($key.'Tooltip'));
     		print '</td><td><input name="'.$key.'"  class="flat '.(empty($val['css'])?'minwidth200':$val['css']).'" value="' . $conf->global->$key . '"></td></tr>';
     	}
    -
     	print '</table>';
     
     	print '<br><div class="center">';
    @@ -117,21 +114,28 @@ if ($action == 'edit')
     }
     else
     {
    -	print '<table class="noborder" width="100%">';
    -	print '<tr class="liste_titre"><td class="titlefield">'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
    -
    -	foreach($arrayofparameters as $key => $val)
    +	if (! empty($arrayofparameters))
     	{
    -		print '<tr class="oddeven"><td>';
    -		print $form->textwithpicto($langs->trans($key),$langs->trans($key.'Tooltip'));
    -		print '</td><td>' . $conf->global->$key . '</td></tr>';
    +		print '<table class="noborder" width="100%">';
    +		print '<tr class="liste_titre"><td class="titlefield">'.$langs->trans("Parameter").'</td><td>'.$langs->trans("Value").'</td></tr>';
    +
    +		foreach($arrayofparameters as $key => $val)
    +		{
    +			print '<tr class="oddeven"><td>';
    +			print $form->textwithpicto($langs->trans($key),$langs->trans($key.'Tooltip'));
    +			print '</td><td>' . $conf->global->$key . '</td></tr>';
    +		}
    +
    +		print '</table>';
    +
    +		print '<div class="tabsAction">';
    +		print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit">'.$langs->trans("Modify").'</a>';
    +		print '</div>';
    +	}
    +	else
    +	{
    +		print '<br>'.$langs->trans("NothingToSetup");
     	}
    -
    -	print '</table>';
    -
    -	print '<div class="tabsAction">';
    -	print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit">'.$langs->trans("Modify").'</a>';
    -	print '</div>';
     }
     
     
    @@ -140,3 +144,4 @@ dol_fiche_end();
     
     llxFooter();
     $db->close();
    +
    diff --git a/htdocs/modulebuilder/template/class/actions_mymodule.class.php b/htdocs/modulebuilder/template/class/actions_mymodule.class.php
    index 789e4e469f9..64076e07359 100644
    --- a/htdocs/modulebuilder/template/class/actions_mymodule.class.php
    +++ b/htdocs/modulebuilder/template/class/actions_mymodule.class.php
    @@ -32,10 +32,12 @@ class ActionsMyModule
          * @var DoliDB Database handler.
          */
         public $db;
    +
         /**
    -     * @var string Error
    +     * @var string Error code (or message)
          */
         public $error = '';
    +
         /**
          * @var array Errors
          */
    @@ -135,7 +137,6 @@ class ActionsMyModule
     	        foreach($parameters['toselect'] as $objectid)
     	        {
     	            // Do action on each object id
    -
     	        }
     	    }
     
    @@ -240,5 +241,4 @@ class ActionsMyModule
     	}
     
     	/* Add here any other hooked methods... */
    -
     }
    diff --git a/htdocs/modulebuilder/template/class/api_mymodule.class.php b/htdocs/modulebuilder/template/class/api_mymodule.class.php
    index 5b77c477429..ab559a26612 100644
    --- a/htdocs/modulebuilder/template/class/api_mymodule.class.php
    +++ b/htdocs/modulebuilder/template/class/api_mymodule.class.php
    @@ -41,7 +41,7 @@ class MyModuleApi extends DolibarrApi
          * @var array   $FIELDS     Mandatory fields, checked when create and update object
          */
         static $FIELDS = array(
    -        'name'
    +        'name',
         );
     
     
    @@ -109,7 +109,8 @@ class MyModuleApi extends DolibarrApi
          *
          * @url	GET /myobjects/
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -119,6 +120,7 @@ class MyModuleApi extends DolibarrApi
             $restictonsocid = 0;	// Set to 1 if there is a field socid in table of object
     
             // If the internal user must only see his customers, force searching by him
    +        $search_sale = 0;
             if ($restictonsocid && ! DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) $search_sale = DolibarrApiAccess::$user->id;
     
             $sql = "SELECT t.rowid";
    @@ -128,7 +130,7 @@ class MyModuleApi extends DolibarrApi
             if ($restictonsocid && (!DolibarrApiAccess::$user->rights->societe->client->voir && !$socid) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale
             $sql.= " WHERE 1 = 1";
     
    -		// Example of use $mode
    +        // Example of use $mode
             //if ($mode == 1) $sql.= " AND s.client IN (1, 3)";
             //if ($mode == 2) $sql.= " AND s.client IN (2, 3)";
     
    @@ -197,8 +199,8 @@ class MyModuleApi extends DolibarrApi
         function post($request_data = null)
         {
             if(! DolibarrApiAccess::$user->rights->myobject->create) {
    -			throw new RestException(401);
    -		}
    +            throw new RestException(401);
    +        }
             // Check mandatory fields
             $result = $this->_validate($request_data);
     
    @@ -223,8 +225,8 @@ class MyModuleApi extends DolibarrApi
         function put($id, $request_data = null)
         {
             if(! DolibarrApiAccess::$user->rights->myobject->create) {
    -			throw new RestException(401);
    -		}
    +            throw new RestException(401);
    +        }
     
             $result = $this->myobject->fetch($id);
             if( ! $result ) {
    @@ -263,9 +265,9 @@ class MyModuleApi extends DolibarrApi
                 throw new RestException(404, 'MyObject not found');
             }
     
    -		if( ! DolibarrApi::_checkAccessToResource('myobject',$this->myobject->id)) {
    -			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -		}
    +        if( ! DolibarrApi::_checkAccessToResource('myobject',$this->myobject->id)) {
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
     
     		if( !$this->myobject->delete(DolibarrApiAccess::$user, 0))
             {
    @@ -278,7 +280,6 @@ class MyModuleApi extends DolibarrApi
                     'message' => 'MyObject deleted'
                 )
             );
    -
         }
     
     
    diff --git a/htdocs/modulebuilder/template/class/myobject.class.php b/htdocs/modulebuilder/template/class/myobject.class.php
    index 12f31439985..6e3fc1bd63f 100644
    --- a/htdocs/modulebuilder/template/class/myobject.class.php
    +++ b/htdocs/modulebuilder/template/class/myobject.class.php
    @@ -36,18 +36,22 @@ class MyObject extends CommonObject
     	 * @var string ID to identify managed object
     	 */
     	public $element = 'myobject';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'mymodule_myobject';
    +
     	/**
     	 * @var int  Does myobject support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 */
     	public $ismultientitymanaged = 0;
    +
     	/**
     	 * @var int  Does myobject support extrafields ? 0=No, 1=Yes
     	 */
     	public $isextrafieldmanaged = 1;
    +
     	/**
     	 * @var string String with name of icon for myobject. Must be the part after the 'object_' into object_myobject.png
     	 */
    @@ -84,29 +88,59 @@ class MyObject extends CommonObject
     	    'label'         =>array('type'=>'varchar(255)', 'label'=>'Label',            'enabled'=>1, 'visible'=>1,  'position'=>30,  'searchall'=>1, 'css'=>'minwidth200', 'help'=>'Help text', 'showoncombobox'=>1),
     	    'amount'        =>array('type'=>'double(24,8)', 'label'=>'Amount',           'enabled'=>1, 'visible'=>1,  'default'=>'null', 'position'=>40,  'searchall'=>0, 'isameasure'=>1, 'help'=>'Help text'),
     		'fk_soc' 		=>array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'visible'=>1, 'enabled'=>1, 'position'=>50, 'notnull'=>-1, 'index'=>1, 'help'=>'LinkToThirparty'),
    -		'description'   =>array('type'=>'text',			'label'=>'Descrption',		 'enabled'=>1, 'visible'=>0,  'position'=>60),
    +		'description'   =>array('type'=>'text',			'label'=>'Description',		 'enabled'=>1, 'visible'=>0,  'position'=>60),
     		'note_public'   =>array('type'=>'html',			'label'=>'NotePublic',		 'enabled'=>1, 'visible'=>0,  'position'=>61),
     		'note_private'  =>array('type'=>'html',			'label'=>'NotePrivate',		 'enabled'=>1, 'visible'=>0,  'position'=>62),
     		'date_creation' =>array('type'=>'datetime',     'label'=>'DateCreation',     'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'position'=>500),
     	    'tms'           =>array('type'=>'timestamp',    'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'position'=>501),
    -		//'date_valid'    =>array('type'=>'datetime',     'label'=>'DateCreation',     'enabled'=>1, 'visible'=>-2, 'position'=>502),
    +		//'date_validation'    =>array('type'=>'datetime',     'label'=>'DateCreation',     'enabled'=>1, 'visible'=>-2, 'position'=>502),
     		'fk_user_creat' =>array('type'=>'integer',      'label'=>'UserAuthor',       'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'position'=>510, 'foreignkey'=>'llx_user.rowid'),
     		'fk_user_modif' =>array('type'=>'integer',      'label'=>'UserModif',        'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>511),
     		//'fk_user_valid' =>array('type'=>'integer',      'label'=>'UserValidation',        'enabled'=>1, 'visible'=>-1, 'position'=>512),
     		'import_key'    =>array('type'=>'varchar(14)',  'label'=>'ImportId',         'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0,  'position'=>1000),
    -	    'status'        =>array('type'=>'integer',      'label'=>'Status',           'enabled'=>1, 'visible'=>1,  'notnull'=>1, 'default'=>0, 'index'=>1,  'position'=>1000, 'arrayofkeyval'=>array(0=>'Draft', 1=>'Active', -1=>'Cancel')),
    +	    'status'        =>array('type'=>'integer',      'label'=>'Status',           'enabled'=>1, 'visible'=>1,  'notnull'=>1, 'default'=>0, 'index'=>1,  'position'=>1000, 'arrayofkeyval'=>array(0=>'Draft', 1=>'Active', -1=>'Canceled')),
     	);
     
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
    +
    +	/**
    +	 * @var string Ref
    +	 */
     	public $ref;
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
    -	public $label;
    +
    +	/**
    +     * @var string label
    +     */
    +    public $label;
    +
     	public $amount;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
    +
     	public $date_creation;
     	public $tms;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_modif;
    +
     	public $import_key;
     	// END MODULEBUILDER PROPERTIES
     
    @@ -118,18 +152,22 @@ class MyObject extends CommonObject
     	 * @var int    Name of subtable line
     	 */
     	//public $table_element_line = 'myobjectdet';
    +
     	/**
     	 * @var int    Field with ID of parent key if this field has a parent
     	 */
     	//public $fk_element = 'fk_myobject';
    +
     	/**
     	 * @var int    Name of subtable class that manage subtable lines
     	 */
     	//public $class_element_line = 'MyObjectline';
    +
     	/**
     	 * @var array  Array of child tables (child tables to delete before deleting a record)
     	 */
     	//protected $childtables=array('myobjectdet');
    +
     	/**
     	 * @var MyObjectLine[]     Array of subtable lines
     	 */
    @@ -144,7 +182,7 @@ class MyObject extends CommonObject
     	 */
     	public function __construct(DoliDB $db)
     	{
    -		global $conf, $user;
    +		global $conf, $langs, $user;
     
     		$this->db = $db;
     
    @@ -159,6 +197,18 @@ class MyObject extends CommonObject
     				unset($this->fields[$key]);
     			}
     		}
    +
    +		// Translate some data of arrayofkeyval
    +		foreach($this->fields as $key => $val)
    +		{
    +			if (is_array($this->fields['status']['arrayofkeyval']))
    +			{
    +				foreach($this->fields['status']['arrayofkeyval'] as $key2 => $val2)
    +				{
    +					$this->fields['status']['arrayofkeyval'][$key2]=$langs->trans($val2);
    +				}
    +			}
    +		}
     	}
     
     	/**
    @@ -182,7 +232,7 @@ class MyObject extends CommonObject
     	 */
     	public function createFromClone(User $user, $fromid)
     	{
    -		global $hookmanager, $langs;
    +		global $langs, $hookmanager, $extrafields;
     	    $error = 0;
     
     	    dol_syslog(__METHOD__, LOG_DEBUG);
    @@ -202,6 +252,20 @@ class MyObject extends CommonObject
     	    $object->ref = "copy_of_".$object->ref;
     	    $object->title = $langs->trans("CopyOf")." ".$object->title;
     	    // ...
    +	    // Clear extrafields that are unique
    +	    if (is_array($object->array_options) && count($object->array_options) > 0)
    +	    {
    +	    	$extrafields->fetch_name_optionals_label($this->element);
    +	    	foreach($object->array_options as $key => $option)
    +	    	{
    +	    		$shortkey = preg_replace('/options_/', '', $key);
    +	    		if (! empty($extrafields->attributes[$this->element]['unique'][$shortkey]))
    +	    		{
    +	    			//var_dump($key); var_dump($clonedObj->array_options[$key]); exit;
    +	    			unset($object->array_options[$key]);
    +	    		}
    +	    	}
    +	    }
     
     	    // Create clone
     		$object->context['createfromclone'] = 'createfromclone';
    @@ -293,7 +357,6 @@ class MyObject extends CommonObject
             if (! empty($conf->dol_no_mouse_hover)) $notooltip=1;   // Force disable tooltips
     
             $result = '';
    -        $companylink = '';
     
             $label = '<u>' . $langs->trans("MyObject") . '</u>';
             $label.= '<br>';
    @@ -339,7 +402,7 @@ class MyObject extends CommonObject
     		$result .= $linkend;
     		//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');
     
    -		global $action;
    +		global $action,$hookmanager;
     		$hookmanager->initHooks(array('myobjectdao'));
     		$parameters=array('id'=>$this->id, 'getnomurl'=>$result);
     		$reshook=$hookmanager->executeHooks('getNomUrl',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    @@ -355,11 +418,12 @@ class MyObject extends CommonObject
     	 *  @param  int		$mode          0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
     	 *  @return	string 			       Label of status
     	 */
    -	function getLibStatut($mode=0)
    +	public function getLibStatut($mode=0)
     	{
     		return $this->LibStatut($this->status, $mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
     	/**
     	 *  Return the status
     	 *
    @@ -367,8 +431,9 @@ class MyObject extends CommonObject
     	 *  @param  int		$mode          0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
     	 *  @return string 			       Label of status
     	 */
    -	function LibStatut($status, $mode=0)
    +	public function LibStatut($status, $mode=0)
     	{
    +		// phpcs:enable
     		if (empty($this->labelstatus))
     		{
     			global $langs;
    @@ -381,34 +446,34 @@ class MyObject extends CommonObject
     		{
     			return $this->labelstatus[$status];
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			return $this->labelstatus[$status];
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
    -			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4').' '.$this->labelstatus[$status];
    -			if ($status == 0) return img_picto($this->labelstatus[$status],'statut5').' '.$this->labelstatus[$status];
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
    -			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4');
    -			if ($status == 0) return img_picto($this->labelstatus[$status],'statut5');
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
    -			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4').' '.$this->labelstatus[$status];
    -			if ($status == 0) return img_picto($this->labelstatus[$status],'statut5').' '.$this->labelstatus[$status];
    +			if ($status == 1) return img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
    +			elseif ($status == 0) return img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle').' '.$this->labelstatus[$status];
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
    -			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4');
    -			if ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5');
    +			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
    -			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4');
    -			if ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5');
    +			if ($status == 1) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut4', '', false, 0, 0, '', 'valignmiddle');
    +			elseif ($status == 0) return $this->labelstatus[$status].' '.img_picto($this->labelstatus[$status],'statut5', '', false, 0, 0, '', 'valignmiddle');
     		}
     	}
     
    @@ -418,7 +483,7 @@ class MyObject extends CommonObject
     	 *	@param  int		$id       Id of order
     	 *	@return	void
     	 */
    -	function info($id)
    +	public function info($id)
     	{
     		$sql = 'SELECT rowid, date_creation as datec, tms as datem,';
     		$sql.= ' fk_user_creat, fk_user_modif';
    @@ -458,7 +523,6 @@ class MyObject extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -522,4 +586,4 @@ class MyObjectLine
     	// @var mixed Sample line property 2
     	public $prop2;
     }
    -*/
    \ No newline at end of file
    +*/
    diff --git a/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php b/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php
    index 85592006a14..edd2f627bb5 100644
    --- a/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php
    +++ b/htdocs/modulebuilder/template/core/boxes/mymodulewidget1.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2004-2017  Laurent Destailleur <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      * Copyright (C) ---Put here your own copyright and developer email---
      *
      * This program is free software: you can redistribute it and/or modify
    @@ -196,11 +197,12 @@ class mymodulewidget1 extends ModeleBoxes
     	/**
     	 * Method to show box. Called by Dolibarr eatch time it wants to display the box.
     	 *
    -	 * @param array $head Array with properties of box title
    -	 * @param array $contents Array with properties of box lines
    +	 * @param array $head       Array with properties of box title
    +	 * @param array $contents   Array with properties of box lines
    +     * @param int   $nooutput   No print, only return string
     	 * @return void
     	 */
    -	public function showBox($head = null, $contents = null)
    +	public function showBox($head = null, $contents = null, $nooutput = 0)
     	{
     		// You may make your own code here…
     		// … or use the parent's class function using the provided head and contents templates
    diff --git a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php
    index cd8612cb7d1..545e53d350a 100644
    --- a/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php
    +++ b/htdocs/modulebuilder/template/core/modules/mailings/mailinglist_mymodule_myobject.modules.php
    @@ -27,7 +27,11 @@ class mailing_mailinglist_mymodule_myobject extends MailingTargets
     	var $enabled=0;
     	var $require_module=array();
     	var $picto='mymodule@mymodule';
    -	var $db;
    +
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     
     	/**
    @@ -88,6 +92,7 @@ class mailing_mailinglist_mymodule_myobject extends MailingTargets
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  This is the main function that returns the array of emails
     	 *
    @@ -97,6 +102,7 @@ class mailing_mailinglist_mymodule_myobject extends MailingTargets
     	 */
     	function add_to_target($mailing_id,$filtersarray=array())
     	{
    +        // phpcs:enable
     		$target = array();
     		$cibles = array();
     		$j = 0;
    @@ -195,6 +201,4 @@ class mailing_mailinglist_mymodule_myobject extends MailingTargets
     		if ($a < 0) return -1;
     		return $a;
     	}
    -
     }
    -
    diff --git a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php
    index aac3f6b2c5f..8c4f933b31f 100644
    --- a/htdocs/modulebuilder/template/core/modules/modMyModule.class.php
    +++ b/htdocs/modulebuilder/template/core/modules/modMyModule.class.php
    @@ -1,5 +1,6 @@
     <?php
     /* Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2018	   Nicolas ZABOURI 	<info@inovea-conseil.com>
      * Copyright (C) ---Put here your own copyright and developer email---
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -27,15 +28,11 @@
     include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
     
     
    -// The class name should start with a lower case mod for Dolibarr to pick it up
    -// so we ignore the Squiz.Classes.ValidClassName.NotCamelCaps rule.
    -// @codingStandardsIgnoreStart
     /**
      *  Description and activation class for module MyModule
      */
     class modMyModule extends DolibarrModules
     {
    -	// @codingStandardsIgnoreEnd
     	/**
     	 * Constructor. Define names, constants, directories, boxes, permissions
     	 *
    @@ -58,21 +55,24 @@ class modMyModule extends DolibarrModules
     		$this->family = "other";
     		// Module position in the family on 2 digits ('01', '10', '20', ...)
     		$this->module_position = '90';
    -		// Gives the possibility to the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this)
    +		// Gives the possibility for the module, to provide his own family info and position of this family (Overwrite $this->family and $this->module_position. Avoid this)
     		//$this->familyinfo = array('myownfamily' => array('position' => '01', 'label' => $langs->trans("MyOwnFamily")));
     
    -		// Module label (no space allowed), used if translation string 'ModuleMyModuleName' not found (MyModue is name of module).
    +		// Module label (no space allowed), used if translation string 'ModuleMyModuleName' not found (MyModule is name of module).
     		$this->name = preg_replace('/^mod/i','',get_class($this));
    -		// Module description, used if translation string 'ModuleMyModuleDesc' not found (MyModue is name of module).
    +		// Module description, used if translation string 'ModuleMyModuleDesc' not found (MyModule is name of module).
     		$this->description = "MyModuleDescription";
     		// Used only if file README.md and README-LL.md not found.
    -		$this->descriptionlong = "MyModuleDescription (Long)";
    +		$this->descriptionlong = "MyModule description (Long)";
     
     		$this->editor_name = 'Editor name';
     		$this->editor_url = 'https://www.example.com';
     
     		// Possible values for version are: 'development', 'experimental', 'dolibarr', 'dolibarr_deprecated' or a version string like 'x.y.z'
     		$this->version = '1.0';
    +
    +        //Url to the file with your last numberversion of this module
    +        //$this->url_last_version = 'http://www.example.com/versionmodule.txt';
     		// Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
     		$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
     		// Name of image file used for this module.
    @@ -80,24 +80,21 @@ class modMyModule extends DolibarrModules
     		// If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module'
     		$this->picto='generic';
     
    -		// Defined all module parts (triggers, login, substitutions, menus, css, etc...)
    -		// for default path (eg: /mymodule/core/xxxxx) (0=disable, 1=enable)
    -		// for specific path of parts (eg: /mymodule/core/modules/barcode)
    -		// for specific css file (eg: /mymodule/css/mymodule.css.php)
    +		// Define some features supported by module (triggers, login, substitutions, menus, css, etc...)
     		$this->module_parts = array(
    -		                        	'triggers' => 1,                                 	// Set this to 1 if module has its own trigger directory (core/triggers)
    -									'login' => 0,                                    	// Set this to 1 if module has its own login method file (core/login)
    -									'substitutions' => 1,                            	// Set this to 1 if module has its own substitution function file (core/substitutions)
    -									'menus' => 0,                                    	// Set this to 1 if module has its own menus handler directory (core/menus)
    -									'theme' => 0,                                    	// Set this to 1 if module has its own theme directory (theme)
    -		                        	'tpl' => 0,                                      	// Set this to 1 if module overwrite template dir (core/tpl)
    -									'barcode' => 0,                                  	// Set this to 1 if module has its own barcode directory (core/modules/barcode)
    -									'models' => 0,                                   	// Set this to 1 if module has its own models directory (core/modules/xxx)
    -									'css' => array('/mymodule/css/mymodule.css.php'),	// Set this to relative path of css file if module has its own css file
    -	 								'js' => array('/mymodule/js/mymodule.js.php'),          // Set this to relative path of js file if module must load a js on all pages
    -									'hooks' => array('data'=>array('hookcontext1','hookcontext2'), 'entity'=>'0'), 	// Set here all hooks context managed by module. To find available hook context, make a "grep -r '>initHooks(' *" on source code. You can also set hook context 'all'
    -									'moduleforexternal' => 0							// Set this to 1 if feature of module are opened to external users
    -		                        );
    +		    'triggers' => 1,                                 	// Set this to 1 if module has its own trigger directory (core/triggers)
    +			'login' => 0,                                    	// Set this to 1 if module has its own login method file (core/login)
    +			'substitutions' => 1,                            	// Set this to 1 if module has its own substitution function file (core/substitutions)
    +			'menus' => 0,                                    	// Set this to 1 if module has its own menus handler directory (core/menus)
    +			'theme' => 0,                                    	// Set this to 1 if module has its own theme directory (theme)
    +		    'tpl' => 0,                                      	// Set this to 1 if module overwrite template dir (core/tpl)
    +			'barcode' => 0,                                  	// Set this to 1 if module has its own barcode directory (core/modules/barcode)
    +			'models' => 0,                                   	// Set this to 1 if module has its own models directory (core/modules/xxx)
    +			'css' => array('/mymodule/css/mymodule.css.php'),	// Set this to relative path of css file if module has its own css file
    +	 		'js' => array('/mymodule/js/mymodule.js.php'),          // Set this to relative path of js file if module must load a js on all pages
    +			'hooks' => array('data'=>array('hookcontext1','hookcontext2'), 'entity'=>'0'), 	// Set here all hooks context managed by module. To find available hook context, make a "grep -r '>initHooks(' *" on source code. You can also set hook context 'all'
    +			'moduleforexternal' => 0							// Set this to 1 if feature of module are opened to external users
    +		);
     
     		// Data directories to create when module is enabled.
     		// Example: this->dirs = array("/mymodule/temp","/mymodule/subdir");
    @@ -108,14 +105,14 @@ class modMyModule extends DolibarrModules
     
     		// Dependencies
     		$this->hidden = false;			// A condition to hide module
    -		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled
    -		$this->requiredby = array();	// List of module class names to disable if this one is disabled
    -		$this->conflictwith = array();	// List of module class names as string this module is in conflict with
    +		$this->depends = array();		// List of module class names as string that must be enabled if this module is enabled. Example: array('always1'=>'modModuleToEnable1','always2'=>'modModuleToEnable2', 'FR1'=>'modModuleToEnableFR'...)
    +		$this->requiredby = array();	// List of module class names as string to disable if this one is disabled. Example: array('modModuleToDisable1', ...)
    +		$this->conflictwith = array();	// List of module class names as string this module is in conflict with. Example: array('modModuleToDisable1', ...)
     		$this->langfiles = array("mymodule@mymodule");
    -		$this->phpmin = array(5,3);					// Minimum version of PHP required by module
    -		$this->need_dolibarr_version = array(4,0);	// Minimum version of Dolibarr required by module
    -		$this->warnings_activation = array();                     // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    -		$this->warnings_activation_ext = array();                 // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    +		//$this->phpmin = array(5,4);					// Minimum version of PHP required by module
    +		$this->need_dolibarr_version = array(4,0);		// Minimum version of Dolibarr required by module
    +		$this->warnings_activation = array();			// Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
    +		$this->warnings_activation_ext = array();		// Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
     		//$this->automatic_activation = array('FR'=>'MyModuleWasAutomaticallyActivatedBecauseOfYourCountryChoice');
     		//$this->always_enabled = true;								// If true, can't be disabled
     
    @@ -200,10 +197,10 @@ class modMyModule extends DolibarrModules
     		// Cronjobs (List of cron jobs entries to add when module is enabled)
     		// unit_frequency must be 60 for minute, 3600 for hour, 86400 for day, 604800 for week
     		$this->cronjobs = array(
    -			0=>array('label'=>'MyJob label', 'jobtype'=>'method', 'class'=>'/mymodule/class/myobject.class.php', 'objectname'=>'MyObject', 'method'=>'doScheduledJob', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>'$conf->mymodule->enabled')
    +			0=>array('label'=>'MyJob label', 'jobtype'=>'method', 'class'=>'/mymodule/class/myobject.class.php', 'objectname'=>'MyObject', 'method'=>'doScheduledJob', 'parameters'=>'', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>'$conf->mymodule->enabled', 'priority'=>50)
     		);
    -		// Example: $this->cronjobs=array(0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>'$conf->mymodule->enabled'),
    -		//                                1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>'$conf->mymodule->enabled')
    +		// Example: $this->cronjobs=array(0=>array('label'=>'My label', 'jobtype'=>'method', 'class'=>'/dir/class/file.class.php', 'objectname'=>'MyClass', 'method'=>'myMethod', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>2, 'unitfrequency'=>3600, 'status'=>0, 'test'=>'$conf->mymodule->enabled', 'priority'=>50),
    +		//                                1=>array('label'=>'My label', 'jobtype'=>'command', 'command'=>'', 'parameters'=>'param1, param2', 'comment'=>'Comment', 'frequency'=>1, 'unitfrequency'=>3600*24, 'status'=>0, 'test'=>'$conf->mymodule->enabled', 'priority'=>50)
     		// );
     
     
    @@ -346,5 +343,4 @@ class modMyModule extends DolibarrModules
     
     		return $this->_remove($sql, $options);
     	}
    -
     }
    diff --git a/htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php b/htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php
    index b325f2f7443..1935054893b 100644
    --- a/htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php
    +++ b/htdocs/modulebuilder/template/core/triggers/interface_99_modMyModule_MyModuleTriggers.class.php
    @@ -113,11 +113,6 @@ class InterfaceMyModuleTriggers extends DolibarrTriggers
     		    //case 'USER_SETINGROUP':
     		    //case 'USER_REMOVEFROMGROUP':
     
    -		    //case 'USER_LOGIN':
    -		    //case 'USER_LOGIN_FAILED':
    -		    //case 'USER_LOGOUT':
    -		    //case 'USER_UPDATE_SESSION':      // Warning: To increase performances, this action is triggered only if constant MAIN_ACTIVATE_UPDATESESSIONTRIGGER is set to 1.
    -
     		    // Actions
     		    //case 'ACTION_MODIFY':
     		    //case 'ACTION_CREATE':
    diff --git a/htdocs/modulebuilder/template/css/mymodule.css.php b/htdocs/modulebuilder/template/css/mymodule.css.php
    index 5787fa4f64c..486d860e7f5 100644
    --- a/htdocs/modulebuilder/template/css/mymodule.css.php
    +++ b/htdocs/modulebuilder/template/css/mymodule.css.php
    @@ -35,15 +35,15 @@ if (! defined('NOREQUIREAJAX'))   define('NOREQUIREAJAX','1');
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/../main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/../main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/../main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/../main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    diff --git a/htdocs/modulebuilder/template/doc/user/Makefile b/htdocs/modulebuilder/template/doc/user/Makefile
    deleted file mode 100644
    index 5c33e8bf0a3..00000000000
    --- a/htdocs/modulebuilder/template/doc/user/Makefile
    +++ /dev/null
    @@ -1,225 +0,0 @@
    -# Makefile for Sphinx documentation
    -#
    -
    -# You can set these variables from the command line.
    -SPHINXOPTS    =
    -SPHINXBUILD   = sphinx-build
    -PAPER         =
    -BUILDDIR      = build
    -
    -# Internal variables.
    -PAPEROPT_a4     = -D latex_paper_size=a4
    -PAPEROPT_letter = -D latex_paper_size=letter
    -ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
    -# the i18n builder cannot share the environment and doctrees with the others
    -I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
    -
    -.PHONY: help
    -help:
    -	@echo "Please use \`make <target>' where <target> is one of"
    -	@echo "  html       to make standalone HTML files"
    -	@echo "  dirhtml    to make HTML files named index.html in directories"
    -	@echo "  singlehtml to make a single large HTML file"
    -	@echo "  pickle     to make pickle files"
    -	@echo "  json       to make JSON files"
    -	@echo "  htmlhelp   to make HTML files and a HTML help project"
    -	@echo "  qthelp     to make HTML files and a qthelp project"
    -	@echo "  applehelp  to make an Apple Help Book"
    -	@echo "  devhelp    to make HTML files and a Devhelp project"
    -	@echo "  epub       to make an epub"
    -	@echo "  epub3      to make an epub3"
    -	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
    -	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
    -	@echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
    -	@echo "  text       to make text files"
    -	@echo "  man        to make manual pages"
    -	@echo "  texinfo    to make Texinfo files"
    -	@echo "  info       to make Texinfo files and run them through makeinfo"
    -	@echo "  gettext    to make PO message catalogs"
    -	@echo "  changes    to make an overview of all changed/added/deprecated items"
    -	@echo "  xml        to make Docutils-native XML files"
    -	@echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
    -	@echo "  linkcheck  to check all external links for integrity"
    -	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
    -	@echo "  coverage   to run coverage check of the documentation (if enabled)"
    -	@echo "  dummy      to check syntax errors of document sources"
    -
    -.PHONY: clean
    -clean:
    -	rm -rf $(BUILDDIR)/*
    -
    -.PHONY: html
    -html:
    -	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
    -	@echo
    -	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
    -
    -.PHONY: dirhtml
    -dirhtml:
    -	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
    -	@echo
    -	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
    -
    -.PHONY: singlehtml
    -singlehtml:
    -	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
    -	@echo
    -	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
    -
    -.PHONY: pickle
    -pickle:
    -	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
    -	@echo
    -	@echo "Build finished; now you can process the pickle files."
    -
    -.PHONY: json
    -json:
    -	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
    -	@echo
    -	@echo "Build finished; now you can process the JSON files."
    -
    -.PHONY: htmlhelp
    -htmlhelp:
    -	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
    -	@echo
    -	@echo "Build finished; now you can run HTML Help Workshop with the" \
    -	      ".hhp project file in $(BUILDDIR)/htmlhelp."
    -
    -.PHONY: qthelp
    -qthelp:
    -	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
    -	@echo
    -	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
    -	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
    -	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Mymodule.qhcp"
    -	@echo "To view the help file:"
    -	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Mymodule.qhc"
    -
    -.PHONY: applehelp
    -applehelp:
    -	$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
    -	@echo
    -	@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
    -	@echo "N.B. You won't be able to view it unless you put it in" \
    -	      "~/Library/Documentation/Help or install it in your application" \
    -	      "bundle."
    -
    -.PHONY: devhelp
    -devhelp:
    -	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
    -	@echo
    -	@echo "Build finished."
    -	@echo "To view the help file:"
    -	@echo "# mkdir -p $$HOME/.local/share/devhelp/Mymodule"
    -	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Mymodule"
    -	@echo "# devhelp"
    -
    -.PHONY: epub
    -epub:
    -	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
    -	@echo
    -	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
    -
    -.PHONY: epub3
    -epub3:
    -	$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
    -	@echo
    -	@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
    -
    -.PHONY: latex
    -latex:
    -	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
    -	@echo
    -	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
    -	@echo "Run \`make' in that directory to run these through (pdf)latex" \
    -	      "(use \`make latexpdf' here to do that automatically)."
    -
    -.PHONY: latexpdf
    -latexpdf:
    -	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
    -	@echo "Running LaTeX files through pdflatex..."
    -	$(MAKE) -C $(BUILDDIR)/latex all-pdf
    -	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
    -
    -.PHONY: latexpdfja
    -latexpdfja:
    -	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
    -	@echo "Running LaTeX files through platex and dvipdfmx..."
    -	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
    -	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
    -
    -.PHONY: text
    -text:
    -	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
    -	@echo
    -	@echo "Build finished. The text files are in $(BUILDDIR)/text."
    -
    -.PHONY: man
    -man:
    -	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
    -	@echo
    -	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
    -
    -.PHONY: texinfo
    -texinfo:
    -	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
    -	@echo
    -	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
    -	@echo "Run \`make' in that directory to run these through makeinfo" \
    -	      "(use \`make info' here to do that automatically)."
    -
    -.PHONY: info
    -info:
    -	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
    -	@echo "Running Texinfo files through makeinfo..."
    -	make -C $(BUILDDIR)/texinfo info
    -	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
    -
    -.PHONY: gettext
    -gettext:
    -	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
    -	@echo
    -	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
    -
    -.PHONY: changes
    -changes:
    -	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
    -	@echo
    -	@echo "The overview file is in $(BUILDDIR)/changes."
    -
    -.PHONY: linkcheck
    -linkcheck:
    -	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
    -	@echo
    -	@echo "Link check complete; look for any errors in the above output " \
    -	      "or in $(BUILDDIR)/linkcheck/output.txt."
    -
    -.PHONY: doctest
    -doctest:
    -	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
    -	@echo "Testing of doctests in the sources finished, look at the " \
    -	      "results in $(BUILDDIR)/doctest/output.txt."
    -
    -.PHONY: coverage
    -coverage:
    -	$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
    -	@echo "Testing of coverage in the sources finished, look at the " \
    -	      "results in $(BUILDDIR)/coverage/python.txt."
    -
    -.PHONY: xml
    -xml:
    -	$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
    -	@echo
    -	@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
    -
    -.PHONY: pseudoxml
    -pseudoxml:
    -	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
    -	@echo
    -	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
    -
    -.PHONY: dummy
    -dummy:
    -	$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
    -	@echo
    -	@echo "Build finished. Dummy builder generates no files."
    diff --git a/htdocs/modulebuilder/template/doc/user/make.bat b/htdocs/modulebuilder/template/doc/user/make.bat
    deleted file mode 100644
    index 35018adf3ba..00000000000
    --- a/htdocs/modulebuilder/template/doc/user/make.bat
    +++ /dev/null
    @@ -1,281 +0,0 @@
    -@ECHO OFF
    -
    -REM Command file for Sphinx documentation
    -
    -if "%SPHINXBUILD%" == "" (
    -	set SPHINXBUILD=sphinx-build
    -)
    -set BUILDDIR=build
    -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source
    -set I18NSPHINXOPTS=%SPHINXOPTS% source
    -if NOT "%PAPER%" == "" (
    -	set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
    -	set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
    -)
    -
    -if "%1" == "" goto help
    -
    -if "%1" == "help" (
    -	:help
    -	echo.Please use `make ^<target^>` where ^<target^> is one of
    -	echo.  html       to make standalone HTML files
    -	echo.  dirhtml    to make HTML files named index.html in directories
    -	echo.  singlehtml to make a single large HTML file
    -	echo.  pickle     to make pickle files
    -	echo.  json       to make JSON files
    -	echo.  htmlhelp   to make HTML files and a HTML help project
    -	echo.  qthelp     to make HTML files and a qthelp project
    -	echo.  devhelp    to make HTML files and a Devhelp project
    -	echo.  epub       to make an epub
    -	echo.  epub3      to make an epub3
    -	echo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter
    -	echo.  text       to make text files
    -	echo.  man        to make manual pages
    -	echo.  texinfo    to make Texinfo files
    -	echo.  gettext    to make PO message catalogs
    -	echo.  changes    to make an overview over all changed/added/deprecated items
    -	echo.  xml        to make Docutils-native XML files
    -	echo.  pseudoxml  to make pseudoxml-XML files for display purposes
    -	echo.  linkcheck  to check all external links for integrity
    -	echo.  doctest    to run all doctests embedded in the documentation if enabled
    -	echo.  coverage   to run coverage check of the documentation if enabled
    -	echo.  dummy      to check syntax errors of document sources
    -	goto end
    -)
    -
    -if "%1" == "clean" (
    -	for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
    -	del /q /s %BUILDDIR%\*
    -	goto end
    -)
    -
    -
    -REM Check if sphinx-build is available and fallback to Python version if any
    -%SPHINXBUILD% 1>NUL 2>NUL
    -if errorlevel 9009 goto sphinx_python
    -goto sphinx_ok
    -
    -:sphinx_python
    -
    -set SPHINXBUILD=python -m sphinx.__init__
    -%SPHINXBUILD% 2> nul
    -if errorlevel 9009 (
    -	echo.
    -	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
    -	echo.installed, then set the SPHINXBUILD environment variable to point
    -	echo.to the full path of the 'sphinx-build' executable. Alternatively you
    -	echo.may add the Sphinx directory to PATH.
    -	echo.
    -	echo.If you don't have Sphinx installed, grab it from
    -	echo.http://sphinx-doc.org/
    -	exit /b 1
    -)
    -
    -:sphinx_ok
    -
    -
    -if "%1" == "html" (
    -	%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The HTML pages are in %BUILDDIR%/html.
    -	goto end
    -)
    -
    -if "%1" == "dirhtml" (
    -	%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
    -	goto end
    -)
    -
    -if "%1" == "singlehtml" (
    -	%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
    -	goto end
    -)
    -
    -if "%1" == "pickle" (
    -	%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished; now you can process the pickle files.
    -	goto end
    -)
    -
    -if "%1" == "json" (
    -	%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished; now you can process the JSON files.
    -	goto end
    -)
    -
    -if "%1" == "htmlhelp" (
    -	%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished; now you can run HTML Help Workshop with the ^
    -.hhp project file in %BUILDDIR%/htmlhelp.
    -	goto end
    -)
    -
    -if "%1" == "qthelp" (
    -	%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished; now you can run "qcollectiongenerator" with the ^
    -.qhcp project file in %BUILDDIR%/qthelp, like this:
    -	echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Mymodule.qhcp
    -	echo.To view the help file:
    -	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Mymodule.ghc
    -	goto end
    -)
    -
    -if "%1" == "devhelp" (
    -	%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished.
    -	goto end
    -)
    -
    -if "%1" == "epub" (
    -	%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The epub file is in %BUILDDIR%/epub.
    -	goto end
    -)
    -
    -if "%1" == "epub3" (
    -	%SPHINXBUILD% -b epub3 %ALLSPHINXOPTS% %BUILDDIR%/epub3
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The epub3 file is in %BUILDDIR%/epub3.
    -	goto end
    -)
    -
    -if "%1" == "latex" (
    -	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
    -	goto end
    -)
    -
    -if "%1" == "latexpdf" (
    -	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
    -	cd %BUILDDIR%/latex
    -	make all-pdf
    -	cd %~dp0
    -	echo.
    -	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
    -	goto end
    -)
    -
    -if "%1" == "latexpdfja" (
    -	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
    -	cd %BUILDDIR%/latex
    -	make all-pdf-ja
    -	cd %~dp0
    -	echo.
    -	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
    -	goto end
    -)
    -
    -if "%1" == "text" (
    -	%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The text files are in %BUILDDIR%/text.
    -	goto end
    -)
    -
    -if "%1" == "man" (
    -	%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The manual pages are in %BUILDDIR%/man.
    -	goto end
    -)
    -
    -if "%1" == "texinfo" (
    -	%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
    -	goto end
    -)
    -
    -if "%1" == "gettext" (
    -	%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
    -	goto end
    -)
    -
    -if "%1" == "changes" (
    -	%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.The overview file is in %BUILDDIR%/changes.
    -	goto end
    -)
    -
    -if "%1" == "linkcheck" (
    -	%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Link check complete; look for any errors in the above output ^
    -or in %BUILDDIR%/linkcheck/output.txt.
    -	goto end
    -)
    -
    -if "%1" == "doctest" (
    -	%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Testing of doctests in the sources finished, look at the ^
    -results in %BUILDDIR%/doctest/output.txt.
    -	goto end
    -)
    -
    -if "%1" == "coverage" (
    -	%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Testing of coverage in the sources finished, look at the ^
    -results in %BUILDDIR%/coverage/python.txt.
    -	goto end
    -)
    -
    -if "%1" == "xml" (
    -	%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The XML files are in %BUILDDIR%/xml.
    -	goto end
    -)
    -
    -if "%1" == "pseudoxml" (
    -	%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
    -	goto end
    -)
    -
    -if "%1" == "dummy" (
    -	%SPHINXBUILD% -b dummy %ALLSPHINXOPTS% %BUILDDIR%/dummy
    -	if errorlevel 1 exit /b 1
    -	echo.
    -	echo.Build finished. Dummy builder generates no files.
    -	goto end
    -)
    -
    -:end
    diff --git a/htdocs/modulebuilder/template/doc/user/source/conf.py b/htdocs/modulebuilder/template/doc/user/source/conf.py
    deleted file mode 100644
    index 130bd5a12e5..00000000000
    --- a/htdocs/modulebuilder/template/doc/user/source/conf.py
    +++ /dev/null
    @@ -1,428 +0,0 @@
    -#!/usr/bin/env python3
    -# -*- coding: utf-8 -*-
    -#
    -# My Module documentation build configuration file, created by
    -# sphinx-quickstart on Mon Sep 26 17:54:17 2016.
    -#
    -# This file is execfile()d with the current directory set to its
    -# containing dir.
    -#
    -# Note that not all possible configuration values are present in this
    -# autogenerated file.
    -#
    -# All configuration values have a default; values that are commented out
    -# serve to show the default.
    -
    -# If extensions (or modules to document with autodoc) are in another directory,
    -# add these directories to sys.path here. If the directory is relative to the
    -# documentation root, use os.path.abspath to make it absolute, like shown here.
    -#
    -# import os
    -# import sys
    -# sys.path.insert(0, os.path.abspath('.'))
    -
    -# -- General configuration ------------------------------------------------
    -
    -# If your documentation needs a minimal Sphinx version, state it here.
    -#
    -# needs_sphinx = '1.0'
    -
    -# Add any Sphinx extension module names here, as strings. They can be
    -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
    -# ones.
    -extensions = [
    -    'sphinx.ext.todo',
    -    'sphinx.ext.imgmath',
    -    'sphinx.ext.githubpages',
    -]
    -
    -# Add any paths that contain templates here, relative to this directory.
    -templates_path = ['_templates']
    -
    -# The suffix(es) of source filenames.
    -# You can specify multiple suffix as a list of string:
    -#
    -# source_suffix = ['.rst', '.md']
    -source_suffix = '.rst'
    -
    -# The encoding of source files.
    -#
    -# source_encoding = 'utf-8-sig'
    -
    -# The master toctree document.
    -master_doc = 'index'
    -
    -# General information about the project.
    -project = 'My Module'
    -copyright = '2016, Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>'
    -author = 'Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>'
    -
    -# The version info for the project you're documenting, acts as replacement for
    -# |version| and |release|, also used in various other places throughout the
    -# built documents.
    -#
    -# The short X.Y version.
    -version = 'development'
    -# The full version, including alpha/beta/rc tags.
    -release = 'development'
    -
    -# The language for content autogenerated by Sphinx. Refer to documentation
    -# for a list of supported languages.
    -#
    -# This is also used if you do content translation via gettext catalogs.
    -# Usually you set "language" from the command line for these cases.
    -language = None
    -
    -# There are two options for replacing |today|: either, you set today to some
    -# non-false value, then it is used:
    -#
    -# today = ''
    -#
    -# Else, today_fmt is used as the format for a strftime call.
    -#
    -# today_fmt = '%B %d, %Y'
    -
    -# List of patterns, relative to source directory, that match files and
    -# directories to ignore when looking for source files.
    -# This patterns also effect to html_static_path and html_extra_path
    -exclude_patterns = []
    -
    -# The reST default role (used for this markup: `text`) to use for all
    -# documents.
    -#
    -# default_role = None
    -
    -# If true, '()' will be appended to :func: etc. cross-reference text.
    -#
    -# add_function_parentheses = True
    -
    -# If true, the current module name will be prepended to all description
    -# unit titles (such as .. function::).
    -#
    -# add_module_names = True
    -
    -# If true, sectionauthor and moduleauthor directives will be shown in the
    -# output. They are ignored by default.
    -#
    -# show_authors = False
    -
    -# The name of the Pygments (syntax highlighting) style to use.
    -pygments_style = 'sphinx'
    -
    -# A list of ignored prefixes for module index sorting.
    -# modindex_common_prefix = []
    -
    -# If true, keep warnings as "system message" paragraphs in the built documents.
    -# keep_warnings = False
    -
    -# If true, `todo` and `todoList` produce output, else they produce nothing.
    -todo_include_todos = True
    -
    -
    -# -- Options for HTML output ----------------------------------------------
    -
    -# The theme to use for HTML and HTML Help pages.  See the documentation for
    -# a list of builtin themes.
    -#
    -html_theme = 'alabaster'
    -
    -# Theme options are theme-specific and customize the look and feel of a theme
    -# further.  For a list of options available for each theme, see the
    -# documentation.
    -#
    -# html_theme_options = {}
    -
    -# Add any paths that contain custom themes here, relative to this directory.
    -# html_theme_path = []
    -
    -# The name for this set of Sphinx documents.
    -# "<project> v<release> documentation" by default.
    -#
    -# html_title = 'My Module vdevelopment'
    -
    -# A shorter title for the navigation bar.  Default is the same as html_title.
    -#
    -# html_short_title = None
    -
    -# The name of an image file (relative to this directory) to place at the top
    -# of the sidebar.
    -#
    -# html_logo = None
    -
    -# The name of an image file (relative to this directory) to use as a favicon of
    -# the docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
    -# pixels large.
    -#
    -# html_favicon = None
    -
    -# Add any paths that contain custom static files (such as style sheets) here,
    -# relative to this directory. They are copied after the builtin static files,
    -# so a file named "default.css" will overwrite the builtin "default.css".
    -html_static_path = ['_static']
    -
    -# Add any extra paths that contain custom files (such as robots.txt or
    -# .htaccess) here, relative to this directory. These files are copied
    -# directly to the root of the documentation.
    -#
    -# html_extra_path = []
    -
    -# If not None, a 'Last updated on:' timestamp is inserted at every page
    -# bottom, using the given strftime format.
    -# The empty string is equivalent to '%b %d, %Y'.
    -#
    -# html_last_updated_fmt = None
    -
    -# If true, SmartyPants will be used to convert quotes and dashes to
    -# typographically correct entities.
    -#
    -# html_use_smartypants = True
    -
    -# Custom sidebar templates, maps document names to template names.
    -#
    -# html_sidebars = {}
    -
    -# Additional templates that should be rendered to pages, maps page names to
    -# template names.
    -#
    -# html_additional_pages = {}
    -
    -# If false, no module index is generated.
    -#
    -# html_domain_indices = True
    -
    -# If false, no index is generated.
    -#
    -# html_use_index = True
    -
    -# If true, the index is split into individual pages for each letter.
    -#
    -# html_split_index = False
    -
    -# If true, links to the reST sources are added to the pages.
    -#
    -# html_show_sourcelink = True
    -
    -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
    -#
    -# html_show_sphinx = True
    -
    -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
    -#
    -# html_show_copyright = True
    -
    -# If true, an OpenSearch description file will be output, and all pages will
    -# contain a <link> tag referring to it.  The value of this option must be the
    -# base URL from which the finished HTML is served.
    -#
    -# html_use_opensearch = ''
    -
    -# This is the file name suffix for HTML files (e.g. ".xhtml").
    -# html_file_suffix = None
    -
    -# Language to be used for generating the HTML full-text search index.
    -# Sphinx supports the following languages:
    -#   'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
    -#   'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh'
    -#
    -# html_search_language = 'en'
    -
    -# A dictionary with options for the search language support, empty by default.
    -# 'ja' uses this config value.
    -# 'zh' user can custom change `jieba` dictionary path.
    -#
    -# html_search_options = {'type': 'default'}
    -
    -# The name of a javascript file (relative to the configuration directory) that
    -# implements a search results scorer. If empty, the default will be used.
    -#
    -# html_search_scorer = 'scorer.js'
    -
    -# Output file base name for HTML help builder.
    -htmlhelp_basename = 'Mymoduledoc'
    -
    -# -- Options for LaTeX output ---------------------------------------------
    -
    -latex_elements = {
    -     # The paper size ('letterpaper' or 'a4paper').
    -     #
    -     # 'papersize': 'letterpaper',
    -
    -     # The font size ('10pt', '11pt' or '12pt').
    -     #
    -     # 'pointsize': '10pt',
    -
    -     # Additional stuff for the LaTeX preamble.
    -     #
    -     # 'preamble': '',
    -
    -     # Latex figure (float) alignment
    -     #
    -     # 'figure_align': 'htbp',
    -}
    -
    -# Grouping the document tree into LaTeX files. List of tuples
    -# (source start file, target name, title,
    -#  author, documentclass [howto, manual, or own class]).
    -latex_documents = [
    -    (master_doc, 'Mymodule.tex', 'My Module Documentation',
    -     'Raphaël Doursenaud \\textless{}rdoursenaud@gpcsolutions.fr\\textgreater{}', 'manual'),
    -]
    -
    -# The name of an image file (relative to this directory) to place at the top of
    -# the title page.
    -#
    -# latex_logo = None
    -
    -# For "manual" documents, if this is true, then toplevel headings are parts,
    -# not chapters.
    -#
    -# latex_use_parts = False
    -
    -# If true, show page references after internal links.
    -#
    -# latex_show_pagerefs = False
    -
    -# If true, show URL addresses after external links.
    -#
    -# latex_show_urls = False
    -
    -# Documents to append as an appendix to all manuals.
    -#
    -# latex_appendices = []
    -
    -# It false, will not define \strong, \code, 	itleref, \crossref ... but only
    -# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
    -# packages.
    -#
    -# latex_keep_old_macro_names = True
    -
    -# If false, no module index is generated.
    -#
    -# latex_domain_indices = True
    -
    -
    -# -- Options for manual page output ---------------------------------------
    -
    -# One entry per manual page. List of tuples
    -# (source start file, name, description, authors, manual section).
    -man_pages = [
    -    (master_doc, 'mymodule', 'My Module Documentation',
    -     [author], 1)
    -]
    -
    -# If true, show URL addresses after external links.
    -#
    -# man_show_urls = False
    -
    -
    -# -- Options for Texinfo output -------------------------------------------
    -
    -# Grouping the document tree into Texinfo files. List of tuples
    -# (source start file, target name, title, author,
    -#  dir menu entry, description, category)
    -texinfo_documents = [
    -    (master_doc, 'Mymodule', 'My Module Documentation',
    -     author, 'Mymodule', 'One line description of project.',
    -     'Miscellaneous'),
    -]
    -
    -# Documents to append as an appendix to all manuals.
    -#
    -# texinfo_appendices = []
    -
    -# If false, no module index is generated.
    -#
    -# texinfo_domain_indices = True
    -
    -# How to display URL addresses: 'footnote', 'no', or 'inline'.
    -#
    -# texinfo_show_urls = 'footnote'
    -
    -# If true, do not generate a @detailmenu in the "Top" node's menu.
    -#
    -# texinfo_no_detailmenu = False
    -
    -
    -# -- Options for Epub output ----------------------------------------------
    -
    -# Bibliographic Dublin Core info.
    -epub_title = project
    -epub_author = author
    -epub_publisher = author
    -epub_copyright = copyright
    -
    -# The basename for the epub file. It defaults to the project name.
    -# epub_basename = project
    -
    -# The HTML theme for the epub output. Since the default themes are not
    -# optimized for small screen space, using the same theme for HTML and epub
    -# output is usually not wise. This defaults to 'epub', a theme designed to save
    -# visual space.
    -#
    -# epub_theme = 'epub'
    -
    -# The language of the text. It defaults to the language option
    -# or 'en' if the language is not set.
    -#
    -# epub_language = ''
    -
    -# The scheme of the identifier. Typical schemes are ISBN or URL.
    -# epub_scheme = ''
    -
    -# The unique identifier of the text. This can be a ISBN number
    -# or the project homepage.
    -#
    -# epub_identifier = ''
    -
    -# A unique identification for the text.
    -#
    -# epub_uid = ''
    -
    -# A tuple containing the cover image and cover page html template filenames.
    -#
    -# epub_cover = ()
    -
    -# A sequence of (type, uri, title) tuples for the guide element of content.opf.
    -#
    -# epub_guide = ()
    -
    -# HTML files that should be inserted before the pages created by sphinx.
    -# The format is a list of tuples containing the path and title.
    -#
    -# epub_pre_files = []
    -
    -# HTML files that should be inserted after the pages created by sphinx.
    -# The format is a list of tuples containing the path and title.
    -#
    -# epub_post_files = []
    -
    -# A list of files that should not be packed into the epub file.
    -epub_exclude_files = ['search.html']
    -
    -# The depth of the table of contents in toc.ncx.
    -#
    -# epub_tocdepth = 3
    -
    -# Allow duplicate toc entries.
    -#
    -# epub_tocdup = True
    -
    -# Choose between 'default' and 'includehidden'.
    -#
    -# epub_tocscope = 'default'
    -
    -# Fix unsupported image types using the Pillow.
    -#
    -# epub_fix_images = False
    -
    -# Scale large images.
    -#
    -# epub_max_image_width = 0
    -
    -# How to display URL addresses: 'footnote', 'no', or 'inline'.
    -#
    -# epub_show_urls = 'inline'
    -
    -# If false, no index is generated.
    -#
    -# epub_use_index = True
    diff --git a/htdocs/modulebuilder/template/doc/user/source/index.rst b/htdocs/modulebuilder/template/doc/user/source/index.rst
    deleted file mode 100644
    index 48f2a6e49d8..00000000000
    --- a/htdocs/modulebuilder/template/doc/user/source/index.rst
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -.. My Module documentation master file, created by
    -   sphinx-quickstart on Mon Sep 26 17:54:17 2016.
    -   You can adapt this file completely to your liking, but it should at least
    -   contain the root `toctree` directive.
    -
    -Welcome to My Module's documentation!
    -=====================================
    -
    -Contents:
    -
    -.. toctree::
    -   :maxdepth: 2
    -
    -
    -
    -Indices and tables
    -==================
    -
    -* :ref:`genindex`
    -* :ref:`modindex`
    -* :ref:`search`
    -
    diff --git a/htdocs/modulebuilder/template/js/mymodule.js.php b/htdocs/modulebuilder/template/js/mymodule.js.php
    index 07f44756615..6a3447625a5 100644
    --- a/htdocs/modulebuilder/template/js/mymodule.js.php
    +++ b/htdocs/modulebuilder/template/js/mymodule.js.php
    @@ -38,15 +38,15 @@ if (!defined('NOREQUIREAJAX'))  define('NOREQUIREAJAX','1');
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/../main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/../main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/../main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/../main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
     // Define js type
    diff --git a/htdocs/modulebuilder/template/mymoduleindex.php b/htdocs/modulebuilder/template/mymoduleindex.php
    index bf56d00ede0..61413f2393f 100644
    --- a/htdocs/modulebuilder/template/mymoduleindex.php
    +++ b/htdocs/modulebuilder/template/mymoduleindex.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -27,16 +27,16 @@
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../main.inc.php")) $res=@include("../main.inc.php");
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php";
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
    @@ -233,6 +233,6 @@ if (! empty($conf->mymodule->enabled) && $user->rights->mymodule->read)
     
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/modulebuilder/template/myobject_agenda.php b/htdocs/modulebuilder/template/myobject_agenda.php
    index 3322fb527d3..9c6c9265592 100644
    --- a/htdocs/modulebuilder/template/myobject_agenda.php
    +++ b/htdocs/modulebuilder/template/myobject_agenda.php
    @@ -25,16 +25,16 @@
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../main.inc.php")) $res=@include("../main.inc.php");
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php";
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
     require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
    @@ -256,7 +256,6 @@ if ($object->id > 0)
         }
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/modulebuilder/template/myobject_card.php b/htdocs/modulebuilder/template/myobject_card.php
    index 3d811d53381..f9b3db7a99e 100644
    --- a/htdocs/modulebuilder/template/myobject_card.php
    +++ b/htdocs/modulebuilder/template/myobject_card.php
    @@ -45,20 +45,20 @@
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../main.inc.php")) $res=@include("../main.inc.php");
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php";
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
    -include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php');
    -include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     dol_include_once('/mymodule/class/myobject.class.php');
     dol_include_once('/mymodule/lib/mymodule_myobject.lib.php');
     
    @@ -68,7 +68,7 @@ $langs->loadLangs(array("mymodule@mymodule","other"));
     // Get parameters
     $id			= GETPOST('id', 'int');
     $ref        = GETPOST('ref', 'alpha');
    -$action		= GETPOST('action', 'alpha');
    +$action		= GETPOST('action', 'aZ09');
     $confirm    = GETPOST('confirm', 'alpha');
     $cancel     = GETPOST('cancel', 'aZ09');
     $contextpage= GETPOST('contextpage','aZ')?GETPOST('contextpage','aZ'):'myobjectcard';   // To manage different context of search
    @@ -81,14 +81,14 @@ $diroutputmassaction=$conf->mymodule->dir_output . '/temp/massgeneration/'.$user
     $hookmanager->initHooks(array('myobjectcard','globalcard'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Initialize array of search criterias
     $search_all=trim(GETPOST("search_all",'alpha'));
     $search=array();
     foreach($object->fields as $key => $val)
     {
    -    if (GETPOST('search_'.$key,'alpha')) $search[$key]=GETPOST('search_'.$key,'alpha');
    +	if (GETPOST('search_'.$key,'alpha')) $search[$key]=GETPOST('search_'.$key,'alpha');
     }
     
     if (empty($action) && empty($id) && empty($ref)) $action='view';
    @@ -100,7 +100,7 @@ include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php';  // Must be inclu
     //if ($user->societe_id > 0) access_forbidden();
     //if ($user->societe_id > 0) $socid = $user->societe_id;
     //$isdraft = (($object->statut == MyObject::STATUS_DRAFT) ? 1 : 0);
    -//$result = restrictedArea($user, 'mymodule', $id, '', '', 'fk_soc', 'rowid', null, $isdraft);
    +//$result = restrictedArea($user, 'mymodule', $object->id, '', '', 'fk_soc', 'rowid', $isdraft);
     
     
     /*
    @@ -126,6 +126,9 @@ if (empty($reshook))
     	// Actions cancel, add, update, delete or clone
     	include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';
     
    +	// Actions when linking object each other
    +	include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';		// Must be include, not include_once
    +
     	// Actions when printing a doc from card
     	include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';
     
    @@ -271,12 +274,11 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     	    $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('XXX'), $text, 'confirm_xxx', $formquestion, 0, 1, 220);
     	}
     
    -	if (! $formconfirm) {
    -	    $parameters = array('lineid' => $lineid);
    -	    $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -	    if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -	    elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -	}
    +	// Call Hook formConfirm
    +	$parameters = array('lineid' => $lineid);
    +	$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +	if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +	elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     	// Print form confirm
     	print $formconfirm;
    @@ -317,9 +319,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     	        if (! empty($object->fk_project)) {
     	            $proj = new Project($db);
     	            $proj->fetch($object->fk_project);
    -	            $morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id=' . $object->fk_project . '" title="' . $langs->trans('ShowProject') . '">';
    -	            $morehtmlref.=$proj->ref;
    -	            $morehtmlref.='</a>';
    +	            $morehtmlref.=$proj->getNomUrl();
     	        } else {
     	            $morehtmlref.='';
     	        }
    @@ -347,7 +347,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     	print '</table>';
     	print '</div>';
     	print '</div>';
    -	print '</div>';
     
     	print '<div class="clearboth"></div><br>';
     
    @@ -411,7 +410,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     
     	// Select mail models is same action as presend
     	if (GETPOST('modelselected')) {
    -	    $action = 'presend';
    +		$action = 'presend';
     	}
     
     	if ($action != 'presend')
    @@ -464,7 +463,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     	 */
     }
     
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/modulebuilder/template/myobject_document.php b/htdocs/modulebuilder/template/myobject_document.php
    index dfdc16d69d9..4e2b19e3afc 100644
    --- a/htdocs/modulebuilder/template/myobject_document.php
    +++ b/htdocs/modulebuilder/template/myobject_document.php
    @@ -25,16 +25,16 @@
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../main.inc.php")) $res=@include("../main.inc.php");
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php";
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    @@ -113,7 +113,7 @@ if ($object->id)
     	dol_fiche_head($head, 'document', $langs->trans("MyObject"), -1, 'myobject@mymodule');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -161,6 +161,6 @@ else
     	accessforbidden('',0,0);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/modulebuilder/template/myobject_list.php b/htdocs/modulebuilder/template/myobject_list.php
    index 1d06e2eaac7..4150ca75ca7 100644
    --- a/htdocs/modulebuilder/template/myobject_list.php
    +++ b/htdocs/modulebuilder/template/myobject_list.php
    @@ -43,19 +43,19 @@
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../main.inc.php")) $res=@include("../main.inc.php");
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php";
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
    -require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php');
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     dol_include_once('/mymodule/class/myobject.class.php');
    @@ -93,8 +93,8 @@ $extrafields = new ExtraFields($db);
     $diroutputmassaction=$conf->mymodule->dir_output . '/temp/massgeneration/'.$user->id;
     $hookmanager->initHooks(array('myobjectlist'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
    -$extralabels = $extrafields->fetch_name_optionals_label('myobject');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$extralabels = $extrafields->fetch_name_optionals_label('myobject');	// Load $extrafields->attributes['myobject']
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Default sort order (if not yet defined by previous GETPOST)
     if (! $sortfield) $sortfield="t.".key($object->fields);   // Set here default search field. By default 1st field in definition.
    @@ -147,8 +147,6 @@ $arrayfields = dol_sort_array($arrayfields, 'position');
     
     /*
      * Actions
    - *
    - * Put here all code to do according to value of "$action" parameter
      */
     
     if (GETPOST('cancel','alpha')) { $action='list'; $massaction=''; }
    @@ -192,8 +190,6 @@ if (empty($reshook))
     
     /*
      * View
    - *
    - * Put here all code to render page
      */
     
     $form=new Form($db);
    @@ -292,7 +288,7 @@ if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) &&
     {
     	$obj = $db->fetch_object($resql);
     	$id = $obj->rowid;
    -	header("Location: ".DOL_URL_ROOT.'/mymodule/myobject_card.php?id='.$id);
    +	header("Location: ".dol_buildpath('/mymodule/myobject_card.php', 1).'?id='.$id);
     	exit;
     }
     
    @@ -336,7 +332,7 @@ $arrayofmassactions =  array(
     	//'builddoc'=>$langs->trans("PDFMerge"),
     );
     if ($user->rights->mymodule->delete) $arrayofmassactions['predelete']=$langs->trans("Delete");
    -if (in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array();
    +if (GETPOST('nomassaction','int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array();
     $massactionbutton=$form->selectMassAction('', $arrayofmassactions);
     
     print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
    @@ -352,7 +348,7 @@ print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
     $newcardbutton='';
     //if ($user->rights->mymodule->creer)
     //{
    -	$newcardbutton='<a class="butActionNew" href="card.php?action=create"><span class="valignmiddle">'.$langs->trans('New').'</span>';
    +	$newcardbutton='<a class="butActionNew" href="myobject_card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']).'"><span class="valignmiddle">'.$langs->trans('New').'</span>';
     	$newcardbutton.= '<span class="fa fa-plus-circle valignmiddle"></span>';
     	$newcardbutton.= '</a>';
     //}
    @@ -402,11 +398,11 @@ print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"")
     print '<tr class="liste_titre">';
     foreach($object->fields as $key => $val)
     {
    -	$align='';
    -	if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center';
    -	if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap';
    -	if ($key == 'status') $align.=($align?' ':'').'center';
    -	if (! empty($arrayfields['t.'.$key]['checked'])) print '<td class="liste_titre'.($align?' '.$align:'').'"><input type="text" class="flat maxwidth75" name="search_'.$key.'" value="'.dol_escape_htmltag($search[$key]).'"></td>';
    +	$cssforfield='';
    +	if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center';
    +	if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap';
    +	if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center';
    +	if (! empty($arrayfields['t.'.$key]['checked'])) print '<td class="liste_titre'.($cssforfield?' '.$cssforfield:'').'"><input type="text" class="flat maxwidth75" name="search_'.$key.'" value="'.dol_escape_htmltag($search[$key]).'"></td>';
     }
     // Extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
    @@ -428,11 +424,14 @@ print '</tr>'."\n";
     print '<tr class="liste_titre">';
     foreach($object->fields as $key => $val)
     {
    -	$align='';
    -	if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center';
    -	if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap';
    -	if ($key == 'status') $align.=($align?' ':'').'center';
    -	if (! empty($arrayfields['t.'.$key]['checked'])) print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($align?'class="'.$align.'"':''), $sortfield, $sortorder, $align.' ')."\n";
    +	$cssforfield='';
    +	if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center';
    +	if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap';
    +	if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center';
    +	if (! empty($arrayfields['t.'.$key]['checked']))
    +	{
    +		print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield?'class="'.$cssforfield.'"':''), $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n";
    +	}
     }
     // Extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
    @@ -475,14 +474,18 @@ while ($i < min($num, $limit))
     	print '<tr class="oddeven">';
     	foreach($object->fields as $key => $val)
     	{
    -		$align='';
    -		if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center';
    -		if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap';
    -		if ($key == 'status') $align.=($align?' ':'').'center';
    +		$cssforfield='';
    +		if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center';
    +		if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap';
    +		if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center';
     		if (! empty($arrayfields['t.'.$key]['checked']))
     		{
     			print '<td';
    -			if ($align) print ' class="'.$align.'"';
    +			if ($cssforfield || $val['css']) print ' class="';
    +			print $cssforfield;
    +			if ($cssforfield && $val['css']) print ' ';
    +			print $val['css'];
    +			if ($cssforfield || $val['css']) print '"';
     			print '>';
     			print $object->showOutputField($val, $key, $obj->$key, '');
     			print '</td>';
    @@ -563,7 +566,7 @@ if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nb
     	$hidegeneratedfilelistifempty=1;
     	if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0;
     
    -	require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
    +	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     	$formfile = new FormFile($db);
     
     	// Show list of available documents
    diff --git a/htdocs/modulebuilder/template/myobject_note.php b/htdocs/modulebuilder/template/myobject_note.php
    index 1a26d9abeb4..876c5e105a6 100644
    --- a/htdocs/modulebuilder/template/myobject_note.php
    +++ b/htdocs/modulebuilder/template/myobject_note.php
    @@ -25,16 +25,16 @@
     // Load Dolibarr environment
     $res=0;
     // Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    +if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php";
     // Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/main.inc.php";
    +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/main.inc.php";
     // Try main.inc.php using relative path
    -if (! $res && file_exists("../main.inc.php")) $res=@include("../main.inc.php");
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    +if (! $res && file_exists("../main.inc.php")) $res=@include "../main.inc.php";
    +if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
    +if (! $res && file_exists("../../../main.inc.php")) $res=@include "../../../main.inc.php";
     if (! $res) die("Include of main fails");
     
     dol_include_once('/mymodule/class/myobject.class.php');
    @@ -159,6 +159,6 @@ if ($id > 0 || ! empty($ref))
     	dol_fiche_end();
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/modulebuilder/template/scripts/myobject.php b/htdocs/modulebuilder/template/scripts/myobject.php
    index 0aad12e2e35..67bcdea1d74 100755
    --- a/htdocs/modulebuilder/template/scripts/myobject.php
    +++ b/htdocs/modulebuilder/template/scripts/myobject.php
    @@ -47,12 +47,12 @@ $res=0;
     // Try master.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
     $tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
     while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/master.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/master.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/master.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/master.inc.php");
    +if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/master.inc.php")) $res=@include substr($tmp, 0, ($i+1))."/master.inc.php";
    +if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/master.inc.php")) $res=@include dirname(substr($tmp, 0, ($i+1)))."/master.inc.php";
     // Try master.inc.php using relative path
    -if (! $res && file_exists("../master.inc.php")) $res=@include("../master.inc.php");
    -if (! $res && file_exists("../../master.inc.php")) $res=@include("../../master.inc.php");
    -if (! $res && file_exists("../../../master.inc.php")) $res=@include("../../../master.inc.php");
    +if (! $res && file_exists("../master.inc.php")) $res=@include "../master.inc.php";
    +if (! $res && file_exists("../../master.inc.php")) $res=@include "../../master.inc.php";
    +if (! $res && file_exists("../../../master.inc.php")) $res=@include "../../../master.inc.php";
     if (! $res) die("Include of master fails");
     // After this $db, $mysoc, $langs, $conf and $hookmanager are defined (Opened $db handler to database will be closed at end of file).
     // $user is created but empty.
    diff --git a/htdocs/modulebuilder/template/test/phpunit/MyModuleFunctionalTest.php b/htdocs/modulebuilder/template/test/phpunit/MyModuleFunctionalTest.php
    index a70cc9bee8d..8adf184e24f 100644
    --- a/htdocs/modulebuilder/template/test/phpunit/MyModuleFunctionalTest.php
    +++ b/htdocs/modulebuilder/template/test/phpunit/MyModuleFunctionalTest.php
    @@ -99,6 +99,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     
     	/**
     	 * Global test setup
    +     * @return void
     	 */
     	public static function setUpBeforeClass()
     	{
    @@ -106,6 +107,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     
     	/**
     	 * Unit test setup
    +     * @return void
     	 */
     	public function setUp()
     	{
    @@ -115,6 +117,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     
     	/**
     	 * Verify pre conditions
    +     * @return void
     	 */
     	protected function assertPreConditions()
     	{
    @@ -122,6 +125,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     
     	/**
     	 * Handle Dolibarr authentication
    +     * @return void
     	 */
     	private function authenticate()
     	{
    @@ -142,6 +146,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     
     	/**
     	 * Test enabling developer mode
    +     * @return bool
     	 */
     	public function testEnableDeveloperMode()
     	{
    @@ -161,6 +166,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     	 * Test enabling the module
     	 *
     	 * @depends testEnableDeveloperMode
    +     * @return bool
     	 */
     	public function testModuleEnabled()
     	{
    @@ -186,6 +192,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     	 * Test access to the configuration page
     	 *
     	 * @depends testModuleEnabled
    +     * @return bool
     	 */
     	public function testConfigurationPage()
     	{
    @@ -198,6 +205,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     	 * Test access to the about page
     	 *
     	 * @depends testConfigurationPage
    +     * @return bool
     	 */
     	public function testAboutPage()
     	{
    @@ -210,6 +218,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     	 * Test about page is rendering Markdown
     	 *
     	 * @depends testAboutPage
    +     * @return bool
     	 */
     	public function testAboutPageRendersMarkdownReadme()
     	{
    @@ -226,6 +235,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     	 * Test box is properly declared
     	 *
     	 * @depends testModuleEnabled
    +     * @return bool
     	 */
     	public function testBoxDeclared()
     	{
    @@ -238,6 +248,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     	 * Test trigger is properly enabled
     	 *
     	 * @depends testModuleEnabled
    +     * @return bool
     	 */
     	public function testTriggerDeclared()
     	{
    @@ -254,6 +265,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     	 * Test trigger is properly declared
     	 *
     	 * @depends testTriggerDeclared
    +     * @return bool
     	 */
     	public function testTriggerEnabled()
     	{
    @@ -268,6 +280,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     
     	/**
     	 * Verify post conditions
    +     * @return void
     	 */
     	protected function assertPostConditions()
     	{
    @@ -275,6 +288,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     
     	/**
     	 * Unit test teardown
    +     * @return void
     	 */
     	public function tearDown()
     	{
    @@ -282,6 +296,7 @@ class MyModuleFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
     
     	/**
     	 * Global test teardown
    +     * @return void
     	 */
     	public static function tearDownAfterClass()
     	{
    diff --git a/htdocs/modulebuilder/template/test/phpunit/MyObjectTest.php b/htdocs/modulebuilder/template/test/phpunit/MyObjectTest.php
    index f2ea5b9934b..b62e2231313 100644
    --- a/htdocs/modulebuilder/template/test/phpunit/MyObjectTest.php
    +++ b/htdocs/modulebuilder/template/test/phpunit/MyObjectTest.php
    @@ -32,6 +32,7 @@ class MyObjectTest extends \PHPUnit_Framework_TestCase
     {
     	/**
     	 * Global test setup
    +     * @return void
     	 */
     	public static function setUpBeforeClass()
     	{
    @@ -40,6 +41,7 @@ class MyObjectTest extends \PHPUnit_Framework_TestCase
     
     	/**
     	 * Unit test setup
    +     * @return void
     	 */
     	protected function setUp()
     	{
    @@ -48,6 +50,7 @@ class MyObjectTest extends \PHPUnit_Framework_TestCase
     
     	/**
     	 * Verify pre conditions
    +     * @return void
     	 */
     	protected function assertPreConditions()
     	{
    @@ -56,6 +59,7 @@ class MyObjectTest extends \PHPUnit_Framework_TestCase
     
     	/**
     	 * A sample test
    +     * @return bool
     	 */
     	public function testSomething()
     	{
    @@ -66,6 +70,7 @@ class MyObjectTest extends \PHPUnit_Framework_TestCase
     
     	/**
     	 * Verify post conditions
    +     * @return void
     	 */
     	protected function assertPostConditions()
     	{
    @@ -74,6 +79,7 @@ class MyObjectTest extends \PHPUnit_Framework_TestCase
     
     	/**
     	 * Unit test teardown
    +     * @return void
     	 */
     	protected function tearDown()
     	{
    @@ -82,6 +88,7 @@ class MyObjectTest extends \PHPUnit_Framework_TestCase
     
     	/**
     	 * Global test teardown
    +     * @return void
     	 */
     	public static function tearDownAfterClass()
     	{
    @@ -92,6 +99,7 @@ class MyObjectTest extends \PHPUnit_Framework_TestCase
     	 * Unsuccessful test
     	 *
     	 * @param  Exception $e    Exception
    +     * @return void
     	 * @throws Exception
     	 */
     	protected function onNotSuccessfulTest(Exception $e)
    diff --git a/htdocs/multicurrency/class/multicurrency.class.php b/htdocs/multicurrency/class/multicurrency.class.php
    index 2881e23a21b..549f0fd411a 100644
    --- a/htdocs/multicurrency/class/multicurrency.class.php
    +++ b/htdocs/multicurrency/class/multicurrency.class.php
    @@ -20,15 +20,14 @@
      */
     
     /**
    - * \file    dev/skeletons/skeleton_class.class.php
    - * \ingroup mymodule othermodule1 othermodule2
    - * \brief   This file is an example for a CRUD class file (Create/Read/Update/Delete)
    - *          Put some comments here
    + * \file    htdocs/multicurrency/class/multicurrency.class.php
    + * \ingroup multicurrency
    + * \brief   This file is a CRUD class file (Create/Read/Update/Delete) for multicurrency
      */
     
     // Put here all includes required by your class file
    -require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
    -require_once DOL_DOCUMENT_ROOT ."/core/class/commonobjectline.class.php";
    +require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
    +require_once DOL_DOCUMENT_ROOT .'/core/class/commonobjectline.class.php';
     
     /**
      * Class Currency
    @@ -42,10 +41,12 @@ class MultiCurrency extends CommonObject
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'multicurrency';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'multicurrency';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
    @@ -60,26 +61,32 @@ class MultiCurrency extends CommonObject
     	 * @var mixed Sample property 1
     	 */
     	public $id;
    +
     	/**
     	 * @var mixed Sample property 1
     	 */
     	public $code;
    +
     	/**
     	 * @var mixed Sample property 2
     	 */
     	public $name;
    +
     	/**
    -	 * @var mixed Sample property 2
    +	 * @var int Entity
     	 */
     	public $entity;
    +
     	/**
     	 * @var mixed Sample property 2
     	 */
     	public $date_create;
    +
     	/**
     	 * @var mixed Sample property 2
     	 */
     	public $fk_user;
    +
     	/**
     	 * @var mixed Sample property 2
     	 */
    @@ -93,7 +100,7 @@ class MultiCurrency extends CommonObject
     	public function __construct(DoliDB $db)
     	{
     		$this->db = &$db;
    -		
    +
     		return 1;
     	}
     
    @@ -108,21 +115,21 @@ class MultiCurrency extends CommonObject
     	public function create(User $user, $trigger = true)
     	{
     		global $conf,$langs;
    -		
    +
     		dol_syslog('Currency::create', LOG_DEBUG);
     
     		$error = 0;
    -		
    +
     		if (self::checkCodeAlreadyExists($this->code))
     		{
     			$error++;
     			$this->errors[] = $langs->trans('multicurrency_code_already_added');
     			return -1;
     		}
    -		
    +
     		if (empty($this->entity) || $this->entity <= 0) $this->entity = $conf->entity;
     		$now=date('Y-m-d H:i:s');
    -		
    +
     		// Insert request
     		$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '(';
     		$sql .= ' code,';
    @@ -152,7 +159,7 @@ class MultiCurrency extends CommonObject
     			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
     			$this->date_create = $now;
     			$this->fk_user = $user->id;
    -			
    +
     			if ($trigger) {
     				$result=$this->call_trigger('CURRENCY_CREATE', $user);
     				if ($result < 0) $error++;
    @@ -181,7 +188,7 @@ class MultiCurrency extends CommonObject
     	public function fetch($id, $code = null)
     	{
     		dol_syslog('Currency::fetch', LOG_DEBUG);
    -		
    +
     		global $conf;
     
     		$sql = 'SELECT';
    @@ -192,7 +199,7 @@ class MultiCurrency extends CommonObject
     
     		dol_syslog(__METHOD__,LOG_DEBUG);
     		$resql = $this->db->query($sql);
    -		
    +
     		if ($resql) {
     			$numrows = $this->db->num_rows($resql);
     			if ($numrows) {
    @@ -204,7 +211,7 @@ class MultiCurrency extends CommonObject
     				$this->entity = $obj->entity;
     				$this->date_create = $obj->date_create;
     				$this->fk_user = $obj->fk_user;
    -				
    +
     				$this->fetchAllCurrencyRate();
     				$this->getRate();
     			}
    @@ -234,7 +241,7 @@ class MultiCurrency extends CommonObject
     		$sql.= ' FROM ' . MAIN_DB_PREFIX . $this->table_element_line. ' as cr';
     		$sql.= ' WHERE cr.fk_multicurrency = '.$this->id;
     		$sql.= ' ORDER BY cr.date_sync DESC';
    -		
    +
     		$this->rates = array();
     
     		dol_syslog(__METHOD__,LOG_DEBUG);
    @@ -245,7 +252,7 @@ class MultiCurrency extends CommonObject
     			while ($obj = $this->db->fetch_object($resql)) {
     				$rate = new CurrencyRate($this->db);
     				$rate->fetch($obj->rowid);
    -				
    +
     				$this->rates[] = $rate;
     			}
     			$this->db->free($resql);
    @@ -272,19 +279,19 @@ class MultiCurrency extends CommonObject
     		$error = 0;
     
     		dol_syslog('Currency::update', LOG_DEBUG);
    -		
    +
     		// Clean parameters
     		$this->name = trim($this->name);
     		$this->code = trim($this->code);
    -		
    +
     		// Check parameters
     		if (empty($this->code)) {
     			$error++;
     			dol_syslog('Currency::update $this->code can not be empty', LOG_ERR);
    -			
    +
     			return -1;
     		}
    -		
    +
     		// Update request
     		$sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET';
     		$sql .= ' name=\''.$this->db->escape($this->name).'\'';
    @@ -328,7 +335,7 @@ class MultiCurrency extends CommonObject
     	public function delete($trigger = true)
     	{
     		global $user;
    -		
    +
     		dol_syslog('Currency::delete', LOG_DEBUG);
     
     		$error = 0;
    @@ -347,7 +354,7 @@ class MultiCurrency extends CommonObject
     				$this->errors[] = 'Error ' . $this->db->lasterror();
     				dol_syslog('Currency::delete  ' . join(',', $this->errors), LOG_ERR);
     			}
    -			
    +
     			$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element;
     			$sql .= ' WHERE rowid=' . $this->id;
     
    @@ -371,7 +378,7 @@ class MultiCurrency extends CommonObject
     			return 1;
     		}
     	}
    -	
    +
     	/**
     	 * Delete rates in database
     	 *
    @@ -386,137 +393,136 @@ class MultiCurrency extends CommonObject
     				return false;
     			}
     		}
    -		
    +
     		return true;
     	}
    -	
    +
     	/**
    -	 * Delete rate in database 
    -	 * 
    +	 * Delete rate in database
    +	 *
     	 * @param double	$rate	rate value
    -	 * 
    +	 *
     	 * @return int -1 if KO, 1 if OK
     	 */
    -	 public function addRate($rate)
    -	 {
    +	public function addRate($rate)
    +	{
     	 	$currencyRate = new CurrencyRate($this->db);
     		$currencyRate->rate = $rate;
    -		
    -		if ($currencyRate->create($this->id) > 0) 
    +
    +		if ($currencyRate->create($this->id) > 0)
     		{
     			$this->rate = $currencyRate;
     			return 1;
     		}
    -		else 
    +		else
     		{
     			$this->rate = null;
     			return -1;
     		}
     	 }
    -	 
    -	 /**
    -	  * Try get label of code in llx_currency then add rate
    -	  * 
    -	  * @param	string	$code	currency code
    -	  * @param	double	$rate	new rate
    -	  * 
    -	  * @return int -1 if KO, 1 if OK, 2 if label found and OK
    -	  */
    +
    +	/**
    +	 * Try get label of code in llx_currency then add rate.
    +	 *
    +	 * @param	string	$code	currency code
    +	 * @param	double	$rate	new rate
    +	 *
    +	 * @return int -1 if KO, 1 if OK, 2 if label found and OK
    +	 */
     	function addRateFromDolibarr($code, $rate)
     	{
     	 	global $db, $user;
    -		
    +
     		$currency = new MultiCurrency($db);
     		$currency->code = $code;
     		$currency->name = $code;
    -		
    +
     	 	$sql = 'SELECT label FROM '.MAIN_DB_PREFIX.'c_currencies WHERE code_iso = \''.$db->escape($code).'\'';
    -	 	
    +
     	 	dol_syslog(__METHOD__,LOG_DEBUG);
     		$resql = $db->query($sql);
     		if ($resql && ($line = $db->fetch_object($resql)))
     		{
     			$currency->name = $line->label;
     		}
    -		
    +
     		if ($currency->create($user) > 0)
     		{
     			$currency->addRate($rate);
    -			
    +
     			if (!empty($line)) return 2;
     			else return 1;
     		}
    -		
    -		return -1;	
    +
    +		return -1;
     	}
    -	 
    +
     	 /**
     	 * Add new entry into llx_multicurrency_rate to historise
    -	 * 
    +	 *
     	 * @param double	$rate	rate value
    -	  * 
    +	  *
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	 public function updateRate($rate)
    -	 {
    +	public function updateRate($rate)
    +	{
     	 	return $this->addRate($rate);
     	 }
    -	
    +
     	/**
    -	 * Fetch CurrencyRate object in $this->rate 
    -	 * 
    +	 * Fetch CurrencyRate object in $this->rate
    +	 *
     	 * @return int <0 if KO, 0 if not found, >0 if OK
     	 */
    -	 public function getRate()
    -	 {
    +	public function getRate()
    +	{
     	 	$sql = 'SELECT cr.rowid';
     		$sql.= ' FROM '.MAIN_DB_PREFIX.$this->table_element_line.' as cr';
     		$sql.= ' WHERE cr.fk_multicurrency = '.$this->id;
     		$sql.= ' AND cr.date_sync = (SELECT MAX(cr2.date_sync) FROM '.MAIN_DB_PREFIX.$this->table_element_line.' AS cr2 WHERE cr2.fk_multicurrency = '.$this->id.')';
    -		
    +
     		dol_syslog(__METHOD__,LOG_DEBUG);
     		$resql = $this->db->query($sql);
     		if ($resql && ($obj = $this->db->fetch_object($resql))) {
     			$this->rate = new CurrencyRate($this->db);
     			return $this->rate->fetch($obj->rowid);
     		}
    -		
     	 }
    -	 
    +
     	 /**
    -	 * Get id of currency from code 
    +	 * Get id of currency from code
     	 *
     	 * @param DoliDB	$db		object db
     	 * @param string	$code	code value search
    -	 * 
    +	 *
     	 * @return 0 if not found, >0 if OK
     	 */
    -	 public static function getIdFromCode(&$db, $code)
    -	 {
    +	public static function getIdFromCode(&$db, $code)
    +	{
     	 	global $conf;
    -		
    +
     	 	$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'multicurrency WHERE code = \''.$db->escape($code).'\' AND entity = '.$conf->entity;
    -	 	
    +
     	 	dol_syslog(__METHOD__,LOG_DEBUG);
     		$resql = $db->query($sql);
     		if ($resql && $obj = $db->fetch_object($resql)) return $obj->rowid;
     		else return 0;
     	 }
    -	 
    +
     	 /**
    -	 * Get id and rate of currency from code 
    -	 * 
    +	 * Get id and rate of currency from code
    +	 *
     	 * @param DoliDB	$db		object db
     	 * @param string	$code	code value search
     	 * @param date		$date_document	date from document (propal, order, invoice, ...)
    -	 * 
    +	 *
     	 * @return 	array	[0] => id currency
     	 *					[1] => rate
     	 */
    -	 public static function getIdAndTxFromCode(&$db, $code, $date_document='')
    -	 {
    +	public static function getIdAndTxFromCode(&$db, $code, $date_document='')
    +	{
     		global $conf;
    -		
    +
     	 	$sql1 = 'SELECT m.rowid, mc.rate FROM '.MAIN_DB_PREFIX.'multicurrency m';
     		$sql1.= ' LEFT JOIN '.MAIN_DB_PREFIX.'multicurrency_rate mc ON (m.rowid = mc.fk_multicurrency)';
     		$sql1.= ' WHERE m.code = \''.$db->escape($code).'\'';
    @@ -524,10 +530,10 @@ class MultiCurrency extends CommonObject
     		$sql2= '';
     		if (!empty($conf->global->MULTICURRENCY_USE_RATE_ON_DOCUMENT_DATE) && !empty($date_document)) $sql2.= ' AND DATE_FORMAT(mc.date_sync, "%Y-%m-%d") = "'.date('Y-m-d', $date_document).'"';
     		$sql3.= ' ORDER BY mc.date_sync DESC LIMIT 1';
    -		
    +
     		dol_syslog(__METHOD__,LOG_DEBUG);
     		$resql = $db->query($sql1.$sql2.$sql3);
    -		
    +
     		if ($resql && $obj = $db->fetch_object($resql)) return array($obj->rowid, $obj->rate);
     		else
     		{
    @@ -536,67 +542,67 @@ class MultiCurrency extends CommonObject
     				$resql = $db->query($sql1.$sql3);
     				if ($resql && $obj = $db->fetch_object($resql)) return array($obj->rowid, $obj->rate);
     			}
    -			
    +
     			return array(0, 1);
     		}
    -	 }  
    -	 
    +	 }
    +
     	 /**
     	  * Get the conversion of amount with invoice rate
    -	  * 
    +	  *
     	  * @param	int		$fk_facture		id of facture
     	  * @param	double	$amount			amount to convert
     	  * @param	string	$way			dolibarr mean the amount is in dolibarr currency
     	  * @param	string	$table			facture or facture_fourn
    -	  * 
     	  * @return	double					amount converted
     	  */
     	  public static function getAmountConversionFromInvoiceRate($fk_facture, $amount, $way='dolibarr', $table='facture')
     	  {
     		 global $db;
    -		 
    +
     		 $multicurrency_tx = self::getInvoiceRate($fk_facture, $table);
    -		 
    -		 if ($multicurrency_tx) 
    +
    +		 if ($multicurrency_tx)
     		 {
     		 	if ($way == 'dolibarr') return $amount * $multicurrency_tx;
     			else return $amount / $multicurrency_tx;
     		 }
     		 else return $amount;
     	  }
    -	  
    -	  /**
    -	   *  Get current invoite rate
    -	   * 
    -	   *  @param	int 	$fk_facture 	id of facture
    -	   *  @param 	string 	$table 			facture or facture_fourn
    -	   */
    -	   public static function getInvoiceRate($fk_facture, $table='facture')
    -	   {
    -		 global $db;
    -		 
    -		 $sql = 'SELECT multicurrency_tx FROM '.MAIN_DB_PREFIX.$table.' WHERE rowid = '.$fk_facture;
    -		 
    -		 dol_syslog(__METHOD__,LOG_DEBUG);
    -		 $resql = $db->query($sql);
    -		 if ($resql && ($line = $db->fetch_object($resql)))
    -		 {
    -		 	return $line->multicurrency_tx;
    -		 }
    -		 
    -		 return false;
    -	   }
    +
    +	/**
    +	 *  Get current invoite rate
    +	 *
    +	 *  @param	int 	$fk_facture 	id of facture
    +	 *  @param 	string 	$table 			facture or facture_fourn
    +     *  @return bool
    +	 */
    +	public static function getInvoiceRate($fk_facture, $table='facture')
    +	{
    +		global $db;
    +
    +		$sql = 'SELECT multicurrency_tx FROM '.MAIN_DB_PREFIX.$table.' WHERE rowid = '.$fk_facture;
    +
    +		dol_syslog(__METHOD__,LOG_DEBUG);
    +		$resql = $db->query($sql);
    +		if ($resql && ($line = $db->fetch_object($resql)))
    +		{
    +			return $line->multicurrency_tx;
    +		}
    +
    +		return false;
    +	}
     
     	/**
     	 * With free account we can't set source then recalcul all rates to force another source
    -	 * 
    -	 * @param	stdClass	$TRate	Object containing all currencies rates	
    +	 *
    +	 * @param   stdClass	$TRate	Object containing all currencies rates
     	 * @return	-1 if KO, 0 if nothing, 1 if OK
     	 */
    -	public static function  recalculRates(&$TRate)
    +	public static function recalculRates(&$TRate)
     	{
     		global $conf;
    -		
    +
     		if (!empty($conf->global->MULTICURRENCY_ALTERNATE_SOURCE))
     		{
     			$alternate_source = 'USD'.$conf->global->MULTICURRENCY_ALTERNATE_SOURCE;
    @@ -607,25 +613,26 @@ class MultiCurrency extends CommonObject
     				{
     					$rate *= $coef;
     				}
    -				
    +
     				return 1;
     			}
    -			
    +
     			return -1; // Alternate souce not found
     		}
    -		
    +
     		return 0; // Nothing to do
     	}
    -	
    +
     	/**
     	 *  Sync rates from api
    -	 * 
    +	 *
     	 *  @param 	array 	$response 	array of reponse from api to sync dolibarr rates
    +     * @return void
     	 */
     	public static function syncRates($response)
     	{
     		global $db,$conf;
    -		
    +
     		$ch = curl_init('http://apilayer.net/api/live?access_key='.$key.'');
                     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                     $response = curl_exec($ch);
    @@ -634,11 +641,11 @@ class MultiCurrency extends CommonObject
     
                     if ($response->success)
                     {
    -		
    +
     			$TRate = $response->quotes;
     			$timestamp = $response->timestamp;
     
    -			if (self::recalculRates($TRate) >= 0) 
    +			if (self::recalculRates($TRate) >= 0)
     			{
     				foreach ($TRate as $currency_code => $rate)
     				{
    @@ -648,11 +655,11 @@ class MultiCurrency extends CommonObject
     					{
     						$obj->updateRate($rate);
     					}
    -					else 
    +					else
     					{
     						self::addRateFromDolibarr($code, $rate);
     					}
    -				}	
    +				}
     			}
     		}
     		else
    @@ -660,21 +667,21 @@ class MultiCurrency extends CommonObject
     			setEventMessages($langs->trans('multicurrency_syncronize_error', $response->error->info), null, 'errors');
     		}
     	}
    -	
    +
     	/**
     	 * Check in database if the current code already exists
    -	 * 
    +	 *
     	 * @param	string	$code 	current code to search
     	 * @return	boolean         True if exists, false if not exists
     	 */
    -	 public static function checkCodeAlreadyExists($code)
    -	 {
    +	public static function checkCodeAlreadyExists($code)
    +	{
     	 	global $db;
    -		
    +
     	 	$currency = new MultiCurrency($db);
     		if ($currency->fetch('', $code) > 0) return true;
     		else return false;
    -	 }
    +	}
     }
     
     /**
    @@ -686,31 +693,37 @@ class CurrencyRate extends CommonObjectLine
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'multicurrency_rate';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'multicurrency_rate';
    +
     	/**
     	 * @var int ID
     	 */
     	public $id;
    +
     	/**
     	 * @var double Rate
     	 */
     	public $rate;
    +
     	/**
     	 * @var date Date synchronisation
     	 */
     	public $date_sync;
    +
     	/**
     	 * @var int Id of currency
     	 */
     	public $fk_multicurrency;
    +
     	/**
     	 * @var int Id of entity
     	 */
     	public $entity;
    -	
    +
     	/**
     	 * Constructor
     	 *
    @@ -719,10 +732,10 @@ class CurrencyRate extends CommonObjectLine
     	public function __construct(DoliDB $db)
     	{
     		$this->db = &$db;
    -		
    +
     		return 1;
     	}
    -	
    +
     	/**
     	 * Create object into database
     	 *
    @@ -734,14 +747,14 @@ class CurrencyRate extends CommonObjectLine
     	public function create($fk_multicurrency, $trigger = true)
     	{
     		global $conf, $user;
    -		
    +
     		dol_syslog('CurrencyRate::create', LOG_DEBUG);
     
     		$error = 0;
     		$this->rate = price2num($this->rate);
     		if (empty($this->entity) || $this->entity <= 0) $this->entity = $conf->entity;
     		$now=date('Y-m-d H:i:s');
    -		
    +
     		// Insert request
     		$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '(';
     		$sql .= ' rate,';
    @@ -769,7 +782,7 @@ class CurrencyRate extends CommonObjectLine
     			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
     			$this->fk_multicurrency = $fk_multicurrency;
     			$this->date_sync = $now;
    -			
    +
     			if ($trigger) {
     				$result=$this->call_trigger('CURRENCYRATE_CREATE', $user);
     				if ($result < 0) $error++;
    @@ -829,7 +842,7 @@ class CurrencyRate extends CommonObjectLine
     			return - 1;
     		}
     	}
    -	
    +
     	/**
     	 * Update object into database
     	 *
    @@ -840,13 +853,13 @@ class CurrencyRate extends CommonObjectLine
     	public function update($trigger = true)
     	{
     		global $user;
    -		
    +
     		$error = 0;
     
     		dol_syslog('CurrencyRate::update', LOG_DEBUG);
    -		
    +
     		$this->rate = price2num($this->rate);
    -		
    +
     		// Update request
     		$sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET';
     		$sql .= ' rate='.$this->rate;
    @@ -878,7 +891,7 @@ class CurrencyRate extends CommonObjectLine
     			return 1;
     		}
     	}
    -	
    +
     	/**
     	 * Delete object in database
     	 *
    @@ -889,7 +902,7 @@ class CurrencyRate extends CommonObjectLine
     	public function delete($trigger = true)
     	{
     		global $user;
    -		
    +
     		dol_syslog('CurrencyRate::delete', LOG_DEBUG);
     
     		$error = 0;
    @@ -925,5 +938,4 @@ class CurrencyRate extends CommonObjectLine
     			return 1;
     		}
     	}
    -	
     }
    diff --git a/htdocs/opensurvey/card.php b/htdocs/opensurvey/card.php
    index fda06d67012..2a2b3f85ae4 100644
    --- a/htdocs/opensurvey/card.php
    +++ b/htdocs/opensurvey/card.php
    @@ -1,6 +1,7 @@
     <?php
    -/* Copyright (C) 2013-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2014      Marcos García		<marcosgdf@gmail.com>
    +/* Copyright (C) 2013-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2014       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -22,12 +23,12 @@
      *	\brief      Page to edit survey
      */
     
    -require_once('../main.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/doleditor.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php");
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/doleditor.class.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php";
     
     
     // Security check
    @@ -306,7 +307,7 @@ print '</td></tr>';
     
     // Expire date
     print '<tr><td>'.$langs->trans('ExpireDate').'</td><td colspan="2">';
    -if ($action == 'edit') print $form->select_date($expiredate?$expiredate:$object->date_fin,'expire',0,0,0,'',1,0,1);
    +if ($action == 'edit') print $form->selectDate($expiredate?$expiredate:$object->date_fin, 'expire', 0, 0, 0, '', 1, 0);
     else
     {
         print dol_print_date($object->date_fin,'day');
    @@ -430,6 +431,6 @@ if ($object->allow_comments) {
     
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/opensurvey/class/opensurveysondage.class.php b/htdocs/opensurvey/class/opensurveysondage.class.php
    index a2b6096d77c..2e6789b3f89 100644
    --- a/htdocs/opensurvey/class/opensurveysondage.class.php
    +++ b/htdocs/opensurvey/class/opensurveysondage.class.php
    @@ -24,9 +24,9 @@
      */
     
     // Put here all includes required by your class file
    -require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
    -//require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
    -//require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
    +require_once DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php";
    +//require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
    +//require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
     
     
     /**
    @@ -34,8 +34,16 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
      */
     class Opensurveysondage extends CommonObject
     {
    -	public $element='opensurvey_sondage';			//!< Id that identify managed objects
    -	public $table_element='opensurvey_sondage';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='opensurvey_sondage';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='opensurvey_sondage';
    +
         public $picto = 'opensurvey';
     
     	public $id_sondage;
    @@ -44,6 +52,10 @@ class Opensurveysondage extends CommonObject
     	 * @see description
     	 */
     	public $commentaires;
    +
    +	/**
    +	 * @var string description
    +	 */
     	public $description;
     
     	public $mail_admin;
    @@ -99,7 +111,6 @@ class Opensurveysondage extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -459,6 +470,7 @@ class Opensurveysondage extends CommonObject
     		return $result;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return array of lines
     	 *
    @@ -466,6 +478,7 @@ class Opensurveysondage extends CommonObject
     	 */
     	function fetch_lines()
     	{
    +        // phpcs:enable
     		$ret=array();
     
     		$sql = "SELECT id_users, nom as name, reponses FROM ".MAIN_DB_PREFIX."opensurvey_user_studs";
    @@ -614,6 +627,7 @@ class Opensurveysondage extends CommonObject
     	    return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return label of status
     	 *
    @@ -623,6 +637,7 @@ class Opensurveysondage extends CommonObject
     	 */
     	function LibStatut($status,$mode)
     	{
    +        // phpcs:enable
     	    global $langs, $conf;
     
     	    //print 'x'.$status.'-'.$billed;
    @@ -663,5 +678,4 @@ class Opensurveysondage extends CommonObject
     	        if ($status==self::STATUS_CLOSED) return '<span class="hideonsmartphone">'.$langs->trans('Closed').' </span>'.img_picto($langs->trans('Closed'),'statut6');
     	    }
     	}
    -
     }
    diff --git a/htdocs/opensurvey/css/style.css b/htdocs/opensurvey/css/style.css
    index 7e359bd134e..ab17de0a0ac 100644
    --- a/htdocs/opensurvey/css/style.css
    +++ b/htdocs/opensurvey/css/style.css
    @@ -1,6 +1,6 @@
     /* Copyright (C) 2004-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2006		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2007-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
      *
    @@ -104,10 +104,10 @@ borghesi@unistra.fr
     Ce logiciel est régi par la licence CeCILL-B soumise au droit français et
     respectant les principes de diffusion des logiciels libres. Vous pouvez
     utiliser, modifier et/ou redistribuer ce programme sous les conditions
    -de la licence CeCILL-B telle que diffusée par le CEA, le CNRS et l'INRIA 
    +de la licence CeCILL-B telle que diffusée par le CEA, le CNRS et l'INRIA
     sur le site "http://www.cecill.info".
     
    -Le fait que vous puissiez accéder à cet en-tête signifie que vous avez 
    +Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
     pris connaissance de la licence CeCILL-B, et que vous en avez accepté les
     termes. Vous pouvez trouver une copie de la licence dans le fichier LICENCE.
     
    @@ -120,10 +120,10 @@ Creation : Feb 2008
     borghesi@unistra.fr
     
     This software is governed by the CeCILL-B license under French law and
    -abiding by the rules of distribution of free software. You can  use, 
    +abiding by the rules of distribution of free software. You can  use,
     modify and/ or redistribute the software under the terms of the CeCILL-B
     license as circulated by CEA, CNRS and INRIA at the following URL
    -"http://www.cecill.info". 
    +"http://www.cecill.info".
     
     The fact that you are presently reading this means that you have had
     knowledge of the CeCILL-B license and that you accept its terms. You can
    @@ -133,12 +133,12 @@ find a copy of this license in the file LICENSE.
     */
     
     /*
    -Le fichier style.css est le fichier de style de studs. Il se trouve à la racine 
    +Le fichier style.css est le fichier de style de studs. Il se trouve à la racine
     du répertoire studs. Il contient toutes les mises en forme des fichiers PHP
     de Studs.
     */
     /*bandeau de titre*/
    -div.bandeau{ 
    +div.bandeau{
     	line-height:35px;
     	text-align:center;
     	background-color: #0b419b;
    @@ -146,7 +146,7 @@ div.bandeau{
     	vertical-align:middle;
     	font-size:35px;
     	font-family:arial, sans-serif;
    -	padding:8px; 
    +	padding:8px;
     	height:35px;
     	position:static;
     	top:6px;
    @@ -154,30 +154,30 @@ div.bandeau{
     	right:6px;
     
     }
    -div.logo{ 
    +div.logo{
     	height:64px;
     	float:right;
     	top:8px;
     	right:8px;
     	margin-left: 0;
    -	margin-right:0; 
    +	margin-right:0;
     	margin-bottom:auto;
     }
     /*Sous bandeau avec bouton de navigation*/
    -div.bandeautitre{ 
    +div.bandeautitre{
     	height:17px;
     	font-size:14px;
     	font-weight:bold;
     	text-align:center;
     	vertical-align:middle;
     	font-family:arial, sans-serif;
    - 	padding:3px; 
    + 	padding:3px;
     	position:static;
     	top:57px;
     	left:6px;
     	right:6px;
    -} 
    -div.sousbandeau{ 
    +}
    +div.sousbandeau{
     	height:17px;
     	background-color: #DDDDDD;
     	font-size:11px;
    @@ -191,15 +191,15 @@ div.sousbandeau{
     	right:6px;
     }
     /*bandeau de pied*/
    -div.surbandeaupied{ 
    +div.surbandeaupied{
     	background-color: #0077DD;
     	position:absolute;
     	bottom:30px;
     	left:6px;
    -	right:6px; 
    +	right:6px;
     	height:6px;
     }
    -div.bandeaupied{ 
    +div.bandeaupied{
     	text-align:center;
     	background-color: #0b419b;
     	color:white;
    @@ -209,29 +209,29 @@ div.bandeaupied{
     	position:fixed;
     	bottom:6px;
     	left:6px;
    -	right:6px; 
    +	right:6px;
     	margin:2px;
     }
    -div.surbandeaupiedmobile{ 
    +div.surbandeaupiedmobile{
     	background-color: #0077DD;
    -	position:static; 
    +	position:static;
     	bottom:32px;
     	left:6px;
    -	right:6px; 
    +	right:6px;
     	height:6px;
     }
    -div.bandeaupiedmobile{ 
    +div.bandeaupiedmobile{
     	text-align:center;
     	background-color: #0b419b;
     	color:white;
     	font-size:11px;
     	font-family:arial, sans-serif;
    -	padding:6px; 
    -	position:static; 
    +	padding:6px;
    +	position:static;
     }
     /*les boutons se trouvant dans le sousbandeau*/
     div.sousbandeau a, div.sousbandeau span.sousbandeaulangue a {
    - 	background-color: #0b419b; 
    + 	background-color: #0b419b;
     	height:16px;
     	padding: 2px 6px 2px 6px;
     	vertical-align:middle;
    @@ -249,7 +249,7 @@ span.sousbandeaulangue {
     	float:right;
     }
     /*corps de la page index.php*/
    -div.corps{ 
    +div.corps{
     	font-size:12px;
     	font-family:arial, sans-serif;
     	position:static;
    @@ -257,10 +257,10 @@ div.corps{
     }
     div.corps  table{
     	font-family:arial, sans-serif;
    -	font-size:12px;	
    +	font-size:12px;
     	font-weight:bold;
     }
    -div.corpscentre{ 
    +div.corpscentre{
     	font-size:12px;
     	font-family:arial, sans-serif;
     	text-align:center;
    @@ -285,7 +285,7 @@ div.jourschoisis {
     div.bodydate {
     	padding:10px;
     	font-family:arial, sans-serif;
    -	font-size:12px;	
    +	font-size:12px;
     	text-align:center;
     	position:static;
     	top:330px;
    @@ -294,7 +294,7 @@ div.bodydate {
     }
     div.bodydate table{
     	font-family:arial, sans-serif;
    -	font-size:12px;	
    +	font-size:12px;
     	font-weight:bold;
     }
     /*cadre de commentaires*/
    @@ -302,7 +302,7 @@ div.presentationdate {
     	width:100%;
     	font-family:arial, sans-serif;
     	text-align:center;
    -	font-size:12px;	
    +	font-size:12px;
     	border-top:1px solid;
     	border-bottom:1px solid;
     	border-left: none;
    @@ -321,14 +321,14 @@ div.presentationdatefin {
         border: 1px solid;
         margin-top: 10px;
     	margin-left: 30%;
    -    margin-right: 30%; 
    +    margin-right: 30%;
     	position:static;
     }
     /*cadre principal de studs.php*/
     div.cadre {
    -	padding:10px; 
    +	padding:10px;
     	font-family:arial, sans-serif;
    -	font-size:12px;	
    +	font-size:12px;
     	position:static;
     	top:235px;
     	text-align:center;
    @@ -350,54 +350,54 @@ div.cadre td {
     }
     /*case de tableau OK dans affichage de sondage*/
     div.cadre td.ok {
    -	background-color: #66FF99; 
    -	font-size:12px;	
    +	background-color: #66FF99;
    +	font-size:12px;
     	text-align:center;
     }
     /*Case de tableau NON dans affichage de sondage*/
     div.cadre td.non {
    -	background-color: #FF7777; 
    +	background-color: #FF7777;
     	min-width: 60px;
     }
     /*Case de tableau VIDE dans affichage de sondage*/
     div.cadre td.vide {
    -	background-color: #DDDDDD; 
    +	background-color: #DDDDDD;
     	text-align:center;
     }
     /*Case de tableau contenant les noms dans affichage de sondage*/
     div.cadre td.nom {
    -	background-color: #DDDDDD; 
    -	font-size:12px;	 
    +	background-color: #DDDDDD;
    +	font-size:12px;
     	text-align:center;
     }
     div.cadre td.casevide {
    -	background-color: white; 
    +	background-color: white;
     	text-align:center;
     }
     /*les cases contenant les sommes de chaque colonne dans l'affichage de calendrier*/
     div.cadre td.somme {
     	font-weight:  bold;
    -	font-size:14px; 
    +	font-size:14px;
     }
     
     /*Case de tableau SUJET dans affichage de sondage*/
     div.cadre td.sujet, div.cadre td.jour, div.cadre td.heure {
     	border: 2px;
    -	background-color: #DDDDDD; 
    +	background-color: #DDDDDD;
     	font-size:14px;
     	padding:1px 5px;
     }
     
     div.cadre td.annee {
     	border: 2px;
    -	background-color: #969696; 
    +	background-color: #969696;
     	font-weight: bold;
     	font-size:14px;
     	padding:1px 5px;
     }
     div.cadre td.mois {
     	border: 2px;
    -	background-color: #C0C0C0; 
    +	background-color: #C0C0C0;
     	font-weight: bold;
     	font-size:14px;
     	padding:1px 5px;
    @@ -421,7 +421,7 @@ div.calendrier td.joursemaine {
     	font-family:arial, sans-serif;
     	font-size:14px;
     	border: 2px;
    -	background-color: white; 
    +	background-color: white;
     }
     div.calendrier td.jourwe {
     	width:65px;
    @@ -429,7 +429,7 @@ div.calendrier td.jourwe {
     	font-family:arial, sans-serif;
     	font-size:14px;
     	border: 2px;
    -	background-color: #C0C0C0; 
    +	background-color: #C0C0C0;
     }
     /*jour avant le premier jour du mois dans calendrier*/
     div.calendrier td.avant {
    @@ -438,21 +438,21 @@ div.calendrier td.avant {
     	border: 2px;
     	font-family:arial, sans-serif;
     	font-size:13px;
    -	background-color: #DDDDDD; 
    +	background-color: #DDDDDD;
     }
     /*jour libre dans calendrier*/
     div.calendrier td.libre {
     	width:65px;
     	text-align: center;
     	border: 2px;
    -	background-color: #66FF99; 
    +	background-color: #66FF99;
     }
     /*jour deja selectionné dans calendrier*/
     div.calendrier td.choisi {
     	width:65px;
     	text-align: center;
     	border: 2px;
    -	background-color: #0077DD; 
    +	background-color: #0077DD;
     }
     /* Le paragraphe de fin */
     p.affichageresultats{
    diff --git a/htdocs/opensurvey/exportcsv.php b/htdocs/opensurvey/exportcsv.php
    index 90fd56cd4d1..b36a5256059 100644
    --- a/htdocs/opensurvey/exportcsv.php
    +++ b/htdocs/opensurvey/exportcsv.php
    @@ -23,10 +23,10 @@
      */
     
     
    -require_once('../main.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php");
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php";
     
     $action=GETPOST('action','aZ09');
     $numsondage = '';
    diff --git a/htdocs/opensurvey/fonctions.php b/htdocs/opensurvey/fonctions.php
    index 84b33297fbb..3df5b37c88f 100644
    --- a/htdocs/opensurvey/fonctions.php
    +++ b/htdocs/opensurvey/fonctions.php
    @@ -29,7 +29,8 @@
      * @param Opensurveysondage $object Current viewing poll
      * @return array Tabs for the opensurvey section
      */
    -function opensurvey_prepare_head(Opensurveysondage $object) {
    +function opensurvey_prepare_head(Opensurveysondage $object)
    +{
     
     	global $langs, $conf;
     
    @@ -78,7 +79,7 @@ function llxHeaderSurvey($title, $head="", $disablejs=0, $disablehead=0, $arrayo
     	// Print logo
     	if ($mysoc->logo) {
     		if (file_exists($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small)) {
    -			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file=thumbs/'.urlencode($mysoc->logo_small);
    +			$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_small);
     		}
     	}
     
    diff --git a/htdocs/opensurvey/index.php b/htdocs/opensurvey/index.php
    index 663d4ad704a..4c60a807445 100644
    --- a/htdocs/opensurvey/index.php
    +++ b/htdocs/opensurvey/index.php
    @@ -21,9 +21,9 @@
      *	\brief      Home page of opensurvey area
      */
     
    -require_once('../main.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
     
     // Security check
     if (!$user->rights->opensurvey->read) accessforbidden();
    @@ -78,8 +78,6 @@ print '</table>';
     
     print '</div></div></div>';
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/opensurvey/list.php b/htdocs/opensurvey/list.php
    index 0471abcddb9..ecb26047e52 100644
    --- a/htdocs/opensurvey/list.php
    +++ b/htdocs/opensurvey/list.php
    @@ -22,10 +22,10 @@
      *	\brief      Page to list surveys
      */
     
    -require_once('../main.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php");
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php";
     
     // Security check
     if (!$user->rights->opensurvey->read) accessforbidden();
    @@ -296,6 +296,6 @@ print '</table>'."\n";
     print '</div>';
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php
    index cd6e6ed3225..f3fd135f16d 100644
    --- a/htdocs/opensurvey/results.php
    +++ b/htdocs/opensurvey/results.php
    @@ -1,6 +1,7 @@
     <?php
    -/* Copyright (C) 2013-2015 Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2014      Marcos García       <marcosgdf@gmail.com>
    +/* Copyright (C) 2013-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2014       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -22,12 +23,11 @@
      *	\brief      Page to preview votes of a survey
      */
     
    -$res=0;
    -require_once('../main.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php");
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php";
     
     
     // Security check
    @@ -459,7 +459,7 @@ print '</td></tr>';
     
     // Expire date
     print '<tr><td>'.$langs->trans('ExpireDate').'</td><td colspan="2">';
    -if ($action == 'edit') print $form->select_date($expiredate?$expiredate:$object->date_fin,'expire',0,0,0,'',1,0,1);
    +if ($action == 'edit') print $form->selectDate($expiredate?$expiredate:$object->date_fin, 'expire', 0, 0, 0, '', 1, 0);
     else print dol_print_date($object->date_fin,'day');
     print '</td></tr>';
     
    @@ -492,7 +492,6 @@ if ($action != 'edit')
     				});
     		    </script>';
     	print ' <a href="'.$url.'" target="_blank">'.$langs->trans("Link").'</a>';
    -
     }
     
     print '</td></tr>';
    diff --git a/htdocs/opensurvey/wizard/choix_autre.php b/htdocs/opensurvey/wizard/choix_autre.php
    index a415d6b4987..366842513c8 100644
    --- a/htdocs/opensurvey/wizard/choix_autre.php
    +++ b/htdocs/opensurvey/wizard/choix_autre.php
    @@ -22,10 +22,10 @@
      *	\brief      Page to create a new survey (choice selection)
      */
     
    -require_once('../../main.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php");
    +require '../../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php";
     
     // Security check
     if (!$user->rights->opensurvey->write) accessforbidden();
    @@ -161,6 +161,6 @@ print '<a name=bas></a>'."\n";
     print '<br><br><br>'."\n";
     print '</div>'."\n";
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/opensurvey/wizard/choix_date.php b/htdocs/opensurvey/wizard/choix_date.php
    index 7dd0168c77a..5aa478d9450 100644
    --- a/htdocs/opensurvey/wizard/choix_date.php
    +++ b/htdocs/opensurvey/wizard/choix_date.php
    @@ -22,10 +22,10 @@
      *	\brief      Page to create a new survey (date selection)
      */
     
    -require_once('../../main.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php");
    +require '../../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php";
     
     // Security check
     if (!$user->rights->opensurvey->write) accessforbidden();
    @@ -564,6 +564,6 @@ print '</form>'."\n";
     print '<br><br><br><br>'."\n";
     print '</div></div>'."\n";
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/opensurvey/wizard/create_survey.php b/htdocs/opensurvey/wizard/create_survey.php
    index 0dfc2505ce3..8664e616c55 100644
    --- a/htdocs/opensurvey/wizard/create_survey.php
    +++ b/htdocs/opensurvey/wizard/create_survey.php
    @@ -2,6 +2,7 @@
     /* Copyright (C) 2013-2014 Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2014      Marcos García       <marcosgdf@gmail.com>
      * Copyright (C) 2015-2016 Alexandre Spangaro  <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,11 +24,11 @@
      *	\brief      Page to create a new survey
      */
     
    -require_once('../../main.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/doleditor.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php");
    +require '../../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/doleditor.class.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php";
     
     // Security check
     if (!$user->rights->opensurvey->write) accessforbidden();
    @@ -156,7 +157,7 @@ print '</tr>'."\n";
     
     print '<tr><td class="fieldrequired">'.  $langs->trans("ExpireDate")  .'</td><td>';
     
    -print $form->select_date($champdatefin?$champdatefin:-1,'champdatefin','','','',"add",1,0,1);
    +print $form->selectDate($champdatefin?$champdatefin:-1, 'champdatefin', '', '', '', "add", 1, 0);
     
     print '</tr>'."\n";
     print '</table>'."\n";
    @@ -204,6 +205,6 @@ else
     print '<br><br><br>'."\n";
     print '</form>'."\n";
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/opensurvey/wizard/index.php b/htdocs/opensurvey/wizard/index.php
    index 4d03b7d2d8f..2e62a02fbae 100644
    --- a/htdocs/opensurvey/wizard/index.php
    +++ b/htdocs/opensurvey/wizard/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2013	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2014	Marcos García		<marcosgdf@gmail.com>
    - * Copyright (C) 2016	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2016	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -57,6 +57,6 @@ print '<div style="clear:both;"></div>';
     print '</div>';
     print '</div></form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/paybox/admin/paybox.php b/htdocs/paybox/admin/paybox.php
    index bee538bf9d5..11329042da4 100644
    --- a/htdocs/paybox/admin/paybox.php
    +++ b/htdocs/paybox/admin/paybox.php
    @@ -71,6 +71,9 @@ if ($action == 'setvalue' && $user->admin)
     	if (! $result > 0) $error++;
     	$result=dolibarr_set_const($db, "PAYMENT_SECURITY_TOKEN_UNIQUE",GETPOST('PAYMENT_SECURITY_TOKEN_UNIQUE','alpha'),'chaine',0,'',$conf->entity);
     	if (! $result > 0) $error++;
    +        $result=dolibarr_set_const($db, "PAYBOX_HMAC_KEY", dol_encode(GETPOST('PAYBOX_HMAC_KEY','alpha')),'chaine',0,'',$conf->entity);
    +	if (! $result > 0) $error++;
    +        
     
         if (! $error)
       	{
    @@ -145,6 +148,12 @@ print '<input size="32" type="text" name="PAYBOX_PBX_IDENTIFIANT" value="'.$conf
     print '<br>'.$langs->trans("Example").': 2 ('.$langs->trans("Test").')';
     print '</td></tr>';
     
    +print '<tr class="oddeven"><td>';
    +print '<span class="fieldrequired">'.$langs->trans("PAYBOX_HMAC_KEY").'</span></td><td>';
    +print '<input size="100" type="text" name="PAYBOX_HMAC_KEY" value="'.dol_decode($conf->global->PAYBOX_HMAC_KEY).'">';
    +print '<br>'.$langs->trans("Example").': 2 ('.$langs->trans("Test").')';
    +print '</td></tr>';
    +
     print '<tr class="liste_titre">';
     print '<td>'.$langs->trans("UsageParameter").'</td>';
     print '<td>'.$langs->trans("Value").'</td>';
    @@ -250,5 +259,6 @@ print '<br><br>';
     
     include DOL_DOCUMENT_ROOT.'/core/tpl/onlinepaymentlinks.tpl.php';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/paybox/lib/paybox.lib.php b/htdocs/paybox/lib/paybox.lib.php
    index a4106488f53..849d8a7129c 100644
    --- a/htdocs/paybox/lib/paybox.lib.php
    +++ b/htdocs/paybox/lib/paybox.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2007 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -92,16 +92,41 @@ function print_paybox_redirect($PRICE,$CURRENCY,$EMAIL,$urlok,$urlko,$TAG)
         $IBS_REFUSE=$urlko;
         $IBS_BKGD="#FFFFFF";
         $IBS_WAIT="2000";
    -	$IBS_LANG="GBR"; 	// By default GBR=english (FRA, GBR, ESP, ITA et DEU...)
    -	if (preg_match('/^FR/i',$langs->defaultlang)) $IBS_LANG="FRA";
    -	if (preg_match('/^ES/i',$langs->defaultlang)) $IBS_LANG="ESP";
    -	if (preg_match('/^IT/i',$langs->defaultlang)) $IBS_LANG="ITA";
    -	if (preg_match('/^DE/i',$langs->defaultlang)) $IBS_LANG="DEU";
    -	if (preg_match('/^NL/i',$langs->defaultlang)) $IBS_LANG="NLD";
    -	if (preg_match('/^SE/i',$langs->defaultlang)) $IBS_LANG="SWE";
    -	$IBS_OUTPUT='E';
    -	$PBX_SOURCE='HTML';
    -	$PBX_TYPEPAIEMENT='CARTE';
    +    $IBS_LANG="GBR"; 	// By default GBR=english (FRA, GBR, ESP, ITA et DEU...)
    +    if (preg_match('/^FR/i',$langs->defaultlang)) $IBS_LANG="FRA";
    +    if (preg_match('/^ES/i',$langs->defaultlang)) $IBS_LANG="ESP";
    +    if (preg_match('/^IT/i',$langs->defaultlang)) $IBS_LANG="ITA";
    +    if (preg_match('/^DE/i',$langs->defaultlang)) $IBS_LANG="DEU";
    +    if (preg_match('/^NL/i',$langs->defaultlang)) $IBS_LANG="NLD";
    +    if (preg_match('/^SE/i',$langs->defaultlang)) $IBS_LANG="SWE";
    +    $IBS_OUTPUT='E';
    +    $PBX_SOURCE='HTML';
    +    $PBX_TYPEPAIEMENT='CARTE';
    +    
    +    $msg = "PBX_IDENTIFIANT=".$PBX_IDENTIFIANT.
    +           "&PBX_MODE=".$IBS_MODE.
    +           "&PBX_SITE=".$IBS_SITE.
    +           "&PBX_RANG=".$IBS_RANG.
    +           "&PBX_TOTAL=".$IBS_TOTAL.
    +           "&PBX_DEVISE=".$IBS_DEVISE.
    +           "&PBX_CMD=".$IBS_CMD.
    +           "&PBX_PORTEUR=".$IBS_PORTEUR.
    +           "&PBX_RETOUR=".$IBS_RETOUR.
    +           "&PBX_EFFECTUE=".$IBS_EFFECTUE.
    +           "&PBX_ANNULE=".$IBS_ANNULE.
    +           "&PBX_REFUSE=".$IBS_REFUSE.
    +           "&PBX_TXT=".$IBS_TXT.
    +           "&PBX_BKGD=".$IBS_BKGD.
    +           "&PBX_WAIT=".$IBS_WAIT.
    +           "&PBX_LANGUE=".$IBS_LANG.
    +           "&PBX_OUTPUT=".$IBS_OUTPUT.
    +           "&PBX_SOURCE=".$PBX_SOURCE.
    +           "&PBX_TYPEPAIEMENT=".$PBX_TYPEPAIEMENT;
    +    
    +    $binKey = pack("H*", dol_decode($conf->global->PAYBOX_HMAC_KEY));
    +            
    +    $hmac = strtoupper(hash_hmac('sha512', $msg, $binKey));
    +           
     
         dol_syslog("Soumission Paybox", LOG_DEBUG);
         dol_syslog("IBS_MODE: $IBS_MODE", LOG_DEBUG);
    @@ -157,7 +182,7 @@ function print_paybox_redirect($PRICE,$CURRENCY,$EMAIL,$urlok,$urlko,$TAG)
         print '<input type="hidden" name="PBX_OUTPUT" value="'.$IBS_OUTPUT.'">'."\n";
         print '<input type="hidden" name="PBX_SOURCE" value="'.$PBX_SOURCE.'">'."\n";
         print '<input type="hidden" name="PBX_TYPEPAIEMENT" value="'.$PBX_TYPEPAIEMENT.'">'."\n";
    -
    +    print '<input type="hidden" name="PBX_HMAC" value="'.$hmac.'">'."\n";
         print '</form>'."\n";
     
     
    diff --git a/htdocs/paypal/admin/paypal.php b/htdocs/paypal/admin/paypal.php
    index f15667ced51..1669639c52e 100644
    --- a/htdocs/paypal/admin/paypal.php
    +++ b/htdocs/paypal/admin/paypal.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2013	Laurent Destailleur		<eldy@users.sourceforge.org>
    - * Copyright (C) 2011-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2011-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012  Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -326,5 +326,6 @@ $token='';
     
     include DOL_DOCUMENT_ROOT.'/core/tpl/onlinepaymentlinks.tpl.php';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/paypal/lib/paypal.lib.php b/htdocs/paypal/lib/paypal.lib.php
    index 4855799c508..37cc2fdbeba 100644
    --- a/htdocs/paypal/lib/paypal.lib.php
    +++ b/htdocs/paypal/lib/paypal.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2011-2012	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -287,7 +287,6 @@ function print_paypal_redirect($paymentAmount,$currencyCodeType,$paymentType,$re
     
             return $mesg;
         }
    -
     }
     
     /**
    @@ -401,7 +400,7 @@ function callSetExpressCheckout($paymentAmount, $currencyCodeType, $paymentType,
     	    $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT;		// This is to use external domain name found into config file
     	    //$urlwithroot=DOL_MAIN_URL_ROOT;					// This is to use same domain name than current
     
    -	    $urllogo=$urlwithroot."/viewimage.php?modulepart=mycompany&file=".$mysoc->logo;
    +	    $urllogo=$urlwithroot."/viewimage.php?modulepart=mycompany&file=".urlencode('logos/'.$mysoc->logo);
     	    $nvpstr = $nvpstr . "&LOGOIMG=" . urlencode($urllogo);
         }
         if (! empty($conf->global->PAYPAL_BRANDNAME))
    diff --git a/htdocs/paypal/lib/paypalfunctions.lib.php b/htdocs/paypal/lib/paypalfunctions.lib.php
    index 92b24ec60fb..00f67bfa1f0 100644
    --- a/htdocs/paypal/lib/paypalfunctions.lib.php
    +++ b/htdocs/paypal/lib/paypalfunctions.lib.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2010-2011 Laurent Destailleur  <eldy@users.sourceforge.org>
    - * Copyright (C) 2011      Regis Houssin  		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2011      Regis Houssin  		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/printing/admin/printing.php b/htdocs/printing/admin/printing.php
    index 96b9cad3849..c4b2bb12111 100644
    --- a/htdocs/printing/admin/printing.php
    +++ b/htdocs/printing/admin/printing.php
    @@ -109,12 +109,12 @@ if ($action == 'setvalue' && $user->admin)
     
     $form = new Form($db);
     
    -llxHeader('',$langs->trans("PrintingSetup"));
    +llxHeader('', $langs->trans("PrintingSetup"));
     
     $linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
     print load_fiche_titre($langs->trans("PrintingSetup"),$linkback,'title_setup');
     
    -$head=printingadmin_prepare_head($mode);
    +$head = printingAdminPrepareHead($mode);
     
     if ($mode == 'setup' && $user->admin)
     {
    @@ -127,7 +127,6 @@ if ($mode == 'setup' && $user->admin)
         print $langs->trans("PrintingDriverDesc".$driver)."<br><br>\n";
     
         print '<table class="noborder" width="100%">'."\n";
    -    $var=true;
         print '<tr class="liste_titre">';
         print '<th>'.$langs->trans("Parameters").'</th>';
         print '<th>'.$langs->trans("Value").'</th>';
    @@ -135,8 +134,7 @@ if ($mode == 'setup' && $user->admin)
         print "</tr>\n";
         $submit_enabled=0;
     
    -    if (! empty($driver))
    -    {
    +    if (! empty($driver)) {
             require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/'.$driver.'.modules.php';
             $classname = 'printing_'.$driver;
             $langs->load($driver);
    @@ -146,7 +144,6 @@ if ($mode == 'setup' && $user->admin)
             $submit_enabled=0;
             foreach ($printer->conf as $key)
             {
    -
                 switch ($key['type']) {
                     case "text":
                     case "password":
    @@ -248,7 +245,6 @@ if ($mode == 'config' && $user->admin)
     
         print '<table class="noborder" width="100%">'."\n";
     
    -    $var=true;
         print '<tr class="liste_titre">';
         print '<th>'.$langs->trans("Description").'</th>';
         print '<th class="center">'.$langs->trans("Active").'</th>';
    @@ -307,7 +303,7 @@ if ($mode == 'test' && $user->admin)
             $langs->load($driver);
             $printer = new $classname($db);
             //print '<pre>'.print_r($printer, true).'</pre>';
    -        if (count($printer->getlist_available_printers())) {
    +        if (count($printer->getlistAvailablePrinters())) {
                 if ($printer->listAvailablePrinters()==0) {
                     print $printer->resprint;
                 } else {
    @@ -317,7 +313,6 @@ if ($mode == 'test' && $user->admin)
             else {
                 print $langs->trans('PleaseConfigureDriverfromList');
             }
    -
         } else {
             print $langs->trans('PleaseSelectaDriverfromList');
         }
    @@ -333,7 +328,6 @@ if ($mode == 'userconf' && $user->admin)
         print $langs->trans('PrintUserConfDesc'.$driver)."<br><br>\n";
     
         print '<table class="noborder" width="100%">';
    -    $var=true;
         print '<tr class="liste_titre">';
         print '<th>'.$langs->trans("User").'</th>';
         print '<th>'.$langs->trans("PrintModule").'</th>';
    @@ -362,9 +356,8 @@ if ($mode == 'userconf' && $user->admin)
         print '</table>';
     
         dol_fiche_end();
    -
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/printing/index.php b/htdocs/printing/index.php
    index 384d0834cc0..a95e3517be6 100644
    --- a/htdocs/printing/index.php
    +++ b/htdocs/printing/index.php
    @@ -1,6 +1,6 @@
     <?php
    -/* Copyright (C) 2014-2015  Frederic France      <frederic.france@free.fr>
    - * Copyright (C) 2016       Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2014-2018  Frederic France         <frederic.france@netlogic.fr>
    + * Copyright (C) 2016       Laurent Destailleur     <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -40,34 +40,31 @@ $langs->load("printing");
      * View
      */
     
    -llxHeader("",$langs->trans("Printing"));
    +llxHeader("", $langs->trans("Printing"));
     
    -print_barre_liste($langs->trans("Printing"), 0, $_SERVER["PHP_SELF"], '', '', '', '<a class="button" href="'.$_SERVER["PHP_SELF"].'">'.$langs->trans("Refresh").'</a>', 0, 0, 'title_setup.png');
    +print_barre_liste($langs->trans("Printing"), 0, $_SERVER["PHP_SELF"], '', '', '', '<a class="button" href="' . $_SERVER["PHP_SELF"] . '">' . $langs->trans("Refresh") . '</a>', 0, 0, 'title_setup.png');
     
     print $langs->trans("DirectPrintingJobsDesc").'<br><br>';
     
     // List Jobs from printing modules
     $object = new PrintingDriver($db);
     $result = $object->listDrivers($db, 10);
    -foreach ($result as $driver) 
    -{
    +foreach ($result as $driver) {
         require_once DOL_DOCUMENT_ROOT.'/core/modules/printing/'.$driver.'.modules.php';
         $classname = 'printing_'.$driver;
         $langs->load($driver);
         $printer = new $classname($db);
    -    if ($conf->global->{$printer->active}) 
    -    {
    -        //$printer->list_jobs('commande');
    -        $result = $printer->list_jobs();
    +    if ($conf->global->{$printer->active}) {
    +        //$printer->listJobs('commande');
    +        $result = $printer->listJobs();
             print $printer->resprint;
    -        
    -        if ($result > 0) 
    -        {
    +
    +        if ($result > 0) {
                 setEventMessages($printer->error, $printer->errors, 'errors');
             }
         }
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/printing/lib/printing.lib.php b/htdocs/printing/lib/printing.lib.php
    index 697e986cd56..53257891e25 100644
    --- a/htdocs/printing/lib/printing.lib.php
    +++ b/htdocs/printing/lib/printing.lib.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2015       Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -26,10 +27,10 @@
     /**
      *  Define head array for tabs of printing tools setup pages
      *
    - *  @param	string	$mode		Mode
    - *  @return         			Array of head
    + *  @param  string  $mode       Mode
    + *  @return array               Array of head
      */
    -function printingadmin_prepare_head($mode)
    +function printingAdminPrepareHead($mode)
     {
         global $langs, $conf;
     
    @@ -41,28 +42,26 @@ function printingadmin_prepare_head($mode)
         $head[$h][2] = 'config';
         $h++;
     
    -    if ($mode == 'setup')
    -    {
    -	    $head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=setup&driver=".GETPOST('driver','alpha');
    -	    $head[$h][1] = $langs->trans("SetupDriver");
    -	    $head[$h][2] = 'setup';
    -	    $h++;
    +    if ($mode == 'setup') {
    +        $head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=setup&driver=".GETPOST('driver','alpha');
    +        $head[$h][1] = $langs->trans("SetupDriver");
    +        $head[$h][2] = 'setup';
    +        $h++;
         }
     
    -    if ($mode == 'test')
    -    {
    -	    $head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=test&driver=".GETPOST('driver','alpha');
    -	    $head[$h][1] = $langs->trans("TargetedPrinter");
    -	    $head[$h][2] = 'test';
    -	    $h++;
    +    if ($mode == 'test') {
    +        $head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=test&driver=".GETPOST('driver','alpha');
    +        $head[$h][1] = $langs->trans("TargetedPrinter");
    +        $head[$h][2] = 'test';
    +        $h++;
         }
     
    -		/** TODO This feature seem to be not ready yet.
    -	    $head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=userconf";
    -	    $head[$h][1] = $langs->trans("UserConf");
    -	    $head[$h][2] = 'userconf';
    -	    $h++;
    -	    */
    +    /** TODO This feature seem to be not ready yet.
    +    $head[$h][0] = DOL_URL_ROOT."/printing/admin/printing.php?mode=userconf";
    +    $head[$h][1] = $langs->trans("UserConf");
    +    $head[$h][2] = 'userconf';
    +    $h++;
    +    */
     
         //$object=new stdClass();
     
    @@ -76,4 +75,3 @@ function printingadmin_prepare_head($mode)
     
         return $head;
     }
    -
    diff --git a/htdocs/product/admin/dynamic_prices.php b/htdocs/product/admin/dynamic_prices.php
    index 348380e9b37..4f40c85e2a9 100644
    --- a/htdocs/product/admin/dynamic_prices.php
    +++ b/htdocs/product/admin/dynamic_prices.php
    @@ -357,5 +357,6 @@ if ($action == 'create_updater' || $action == 'edit_updater') {
         print '</form>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/admin/price_rules.php b/htdocs/product/admin/price_rules.php
    index 0049daeaa7d..730a8fd31f2 100644
    --- a/htdocs/product/admin/price_rules.php
    +++ b/htdocs/product/admin/price_rules.php
    @@ -14,7 +14,7 @@
      *
      * You should have received a copy of the GNU General Public License
      * along with this program. If not, see <http://www.gnu.org/licenses/>.
    - * 
    + *
      * Page to set how to autocalculate price for each level when option
      * PRODUCT_MULTIPRICE is on.
      */
    @@ -92,7 +92,6 @@ if ($_POST) {
     				setEventMessages($langs->trans('ErrorSavingChanges'), null, 'errors');
     			}
     		}
    -
     	}
     
     	setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
    @@ -145,7 +144,7 @@ for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++) {
     	$price_options[$i] = $langs->trans('SellingPrice').' '.$i;
     }
     
    -$genPriceOptions = function($level) use ($price_options) {
    +$genPriceOptions = function ($level) use ($price_options) {
     
     	$return = array();
     
    @@ -190,16 +189,16 @@ $genPriceOptions = function($level) use ($price_options) {
     		<?php endfor ?>
     	</table>
     
    -<?php 
    +<?php
     
     dol_fiche_end();
     
     print '<div style="text-align: center">
     		<input type="submit" value="'.$langs->trans('Save').'" class="button">
     	</div>';
    -	
    +
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php
    index bb214ffc06a..334640e87d3 100644
    --- a/htdocs/product/admin/product.php
    +++ b/htdocs/product/admin/product.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
      * Copyright (C) 2006-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2007      Auguria SARL         <info@auguria.org>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2012      Christophe Battarel  <christophe.battarel@altairis.fr>
      * Copyright (C) 2012      Cedric Salvador      <csalvador@gpcsolutions.fr>
    @@ -127,7 +127,6 @@ if ($action == 'other')
     				$res = dolibarr_set_const($db, $rule, 0, 'chaine', 0, '', $conf->entity);
     			}
     		}
    -
     	}
     
     	$value = GETPOST('PRODUIT_SOUSPRODUITS','alpha');
    @@ -144,6 +143,18 @@ if ($action == 'other')
     
     	$value = GETPOST('activate_usesearchtoselectproduct','alpha');
     	$res = dolibarr_set_const($db, "PRODUIT_USE_SEARCH_TO_SELECT", $value,'chaine',0,'',$conf->entity);
    +	
    +	$value = GETPOST('activate_useProdFournDesc', 'alpha');
    +	$res = dolibarr_set_const($db, "PRODUIT_FOURN_TEXTS", $value,'chaine',0,'',$conf->entity);
    +	if ($value) {
    +	    $sql_test = "SELECT count(desc_fourn) as cpt FROM ".MAIN_DB_PREFIX."product_fournisseur_price WHERE 1";
    +	    $resql = $db->query($sql_test);
    +	    if (!$resql && $db->lasterrno == 'DB_ERROR_NOSUCHFIELD') // if the field does not exist, we create it
    +	    {
    +	        $sql_new = "ALTER TABLE ".MAIN_DB_PREFIX."product_fournisseur_price ADD COLUMN desc_fourn text";
    +	        $resql_new = $db->query($sql_new);
    +	    }
    +	}
     }
     
     if ($action == 'specimen') // For products
    @@ -180,13 +191,13 @@ if ($action == 'specimen') // For products
     		}
     		else
     		{
    -			setEventMessage($obj->error,'errors');
    +			setEventMessages($obj->error, $obj->errors, 'errors');
     			dol_syslog($obj->error, LOG_ERR);
     		}
     	}
     	else
     	{
    -		setEventMessage($langs->trans("ErrorModuleNotFound"),'errors');
    +		setEventMessages($langs->trans("ErrorModuleNotFound"), null, 'errors');
     		dol_syslog($langs->trans("ErrorModuleNotFound"), LOG_ERR);
     	}
     }
    @@ -401,7 +412,6 @@ print "</tr>\n";
     
     clearstatcache();
     
    -$var=true;
     foreach ($dirmodels as $reldir)
     {
         foreach (array('','/doc') as $valdir)
    @@ -438,7 +448,6 @@ foreach ($dirmodels as $reldir)
     
     	                        if ($modulequalified)
     	                        {
    -	                            $var = !$var;
     	                            print '<tr class="oddeven"><td width="100">';
     	                            print (empty($module->name)?$name:$module->name);
     	                            print "</td><td>\n";
    @@ -524,12 +533,10 @@ print "<br>";
     print load_fiche_titre($langs->trans("ProductOtherConf"), '', '');
     
     
    -
     print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     print '<input type="hidden" name="action" value="other">';
     
    -$var=true;
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre">';
     print '<td>'.$langs->trans("Parameters").'</td>'."\n";
    @@ -545,6 +552,7 @@ $rowspan = 4;
     if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) $rowspan++;
     if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) $rowspan++;
     if (! empty($conf->global->MAIN_MULTILANGS)) $rowspan++;
    +if (! empty($conf->fournisseur->enabled)) $rowspan++;
     
     
     print '<tr class="oddeven">';
    @@ -569,7 +577,6 @@ print '</tr>';
     // multiprix nombre de prix a proposer
     if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES))
     {
    -
     	print '<tr class="oddeven">';
     	print '<td>'.$langs->trans("MultiPricesNumPrices").'</td>';
     	print '<td align="right"><input size="3" type="text" class="flat" name="value_PRODUIT_MULTIPRICES_LIMIT" value="'.$conf->global->PRODUIT_MULTIPRICES_LIMIT.'"></td>';
    @@ -611,7 +618,6 @@ print '</tr>';
     
     if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT))
     {
    -
     	print '<tr class="oddeven">';
     	print '<td>'.$langs->trans("NumberOfProductShowInSelect").'</td>';
     	print '<td align="right"><input size="3" type="text" class="flat" name="value_PRODUIT_LIMIT_SIZE" value="'.$conf->global->PRODUIT_LIMIT_SIZE.'"></td>';
    @@ -619,7 +625,6 @@ if (empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT))
     }
     
     // Visualiser description produit dans les formulaires activation/desactivation
    -
     print '<tr class="oddeven">';
     print '<td>'.$langs->trans("ViewProductDescInFormAbility").'</td>';
     print '<td width="60" align="right">';
    @@ -652,7 +657,6 @@ print '</tr>';
     // View product description in thirdparty language
     if (! empty($conf->global->MAIN_MULTILANGS))
     {
    -
     	print '<tr class="oddeven">';
     	print '<td>'.$langs->trans("ViewProductDescInThirdpartyLanguageAbility").'</td>';
     	print '<td width="60" align="right">';
    @@ -661,12 +665,20 @@ if (! empty($conf->global->MAIN_MULTILANGS))
     	print '</tr>';
     }
     
    +if (! empty($conf->fournisseur->enabled))
    +{
    +    print '<tr class="oddeven">';
    +    print '<td>'.$langs->trans("UseProductFournDesc").'</td>';
    +    print '<td width="60" align="right">';
    +    print $form->selectyesno("activate_useProdFournDesc", (! empty($conf->global->PRODUIT_FOURN_TEXTS)?$conf->global->PRODUIT_FOURN_TEXTS:0), 1);
    +    print '</td>';
    +    print '</tr>';
    +}
     
     if (! empty($conf->global->PRODUCT_CANVAS_ABILITY))
     {
     	// Add canvas feature
     	$dir = DOL_DOCUMENT_ROOT . "/product/canvas/";
    -	$var = false;
     
     	print '<tr class="liste_titre">';
     	print '<td>'.$langs->trans("ProductSpecial").'</td>'."\n";
    @@ -694,8 +706,7 @@ if (! empty($conf->global->PRODUCT_CANVAS_ABILITY))
     
         				if ($conf->$module->enabled)
         				{
    -
    -    					print "<tr ".$bc[$var]."><td>";
    +    					print '<tr class="oddeven"><td>';
     
         					print $object->description;
     
    @@ -732,7 +743,7 @@ print '</table>';
     
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
     
    diff --git a/htdocs/product/admin/product_extrafields.php b/htdocs/product/admin/product_extrafields.php
    index 849b346244d..23780df895e 100644
    --- a/htdocs/product/admin/product_extrafields.php
    +++ b/htdocs/product/admin/product_extrafields.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2012		Marcos García			<marcosgdf@gmail.com>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -94,7 +94,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -107,8 +107,8 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    -    print load_fiche_titre($langs->trans('NewAttribute'));
    +	print '<br><div id="newattrib"></div>';
    +	print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
     }
    @@ -126,6 +126,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/admin/product_lot_extrafields.php b/htdocs/product/admin/product_lot_extrafields.php
    index be3651344ff..911c96e1b88 100644
    --- a/htdocs/product/admin/product_lot_extrafields.php
    +++ b/htdocs/product/admin/product_lot_extrafields.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2012		Marcos García			<marcosgdf@gmail.com>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -84,7 +84,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -97,8 +97,8 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    -    print load_fiche_titre($langs->trans('NewAttribute'));
    +	print '<br><div id="newattrib"></div>';
    +	print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
     }
    @@ -116,6 +116,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/admin/product_tools.php b/htdocs/product/admin/product_tools.php
    index 291aba9bcf1..4ab8698f4cb 100644
    --- a/htdocs/product/admin/product_tools.php
    +++ b/htdocs/product/admin/product_tools.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2012	   Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2012	   Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2013-2015 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -267,7 +267,6 @@ if ($action == 'convert')
     		{
     			setEventMessages($langs->trans("Error"), null, 'errors');
     		}
    -
     	}
     }
     
    @@ -294,8 +293,6 @@ if (empty($mysoc->country_code))
     else
     {
     
    -	$var=true;
    -
     	print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
     	print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'" />';
     	print '<input type="hidden" name="action" value="convert" />';
    @@ -344,6 +341,6 @@ else
     	print '</form>';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/agenda.php b/htdocs/product/agenda.php
    index 9eee66664d9..64ff9c66119 100644
    --- a/htdocs/product/agenda.php
    +++ b/htdocs/product/agenda.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005      Brice Davoleau       <brice.davoleau@gmail.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2007      Patrick Raguin  		<patrick.raguin@gmail.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
    @@ -203,7 +203,6 @@ if ($id > 0 || $ref)
         }
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/ajax/products.php b/htdocs/product/ajax/products.php
    index cce0f4254a0..6a286d6e7d2 100644
    --- a/htdocs/product/ajax/products.php
    +++ b/htdocs/product/ajax/products.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
    - * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/product/canvas/product/actions_card_product.class.php b/htdocs/product/canvas/product/actions_card_product.class.php
    index 3c0fc4d2b2f..cf9fcff98c8 100644
    --- a/htdocs/product/canvas/product/actions_card_product.class.php
    +++ b/htdocs/product/canvas/product/actions_card_product.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2018 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -64,6 +64,7 @@ class ActionsCardProduct
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Assign custom values for canvas (for example into this->tpl to be used by templates)
     	 *
    @@ -74,6 +75,7 @@ class ActionsCardProduct
     	 */
     	function assign_values(&$action, $id=0, $ref='')
     	{
    +        // phpcs:enable
     		global $limit, $offset, $sortfield, $sortorder;
             global $conf, $langs, $user, $mysoc, $canvas;
     		global $form, $formproduct;
    @@ -123,20 +125,6 @@ class ActionsCardProduct
     			$this->tpl['tva_tx'] = $form->load_tva("tva_tx",-1,$mysoc,'');
     		}
     
    -		if ($action == 'create' || $action == 'edit')
    -		{
    -			// Status
    -			$statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSell"));
    -			$this->tpl['status'] = $form->selectarray('statut',$statutarray,$this->status);
    -
    -			//To Buy
    -			$statutarray=array('1' => $langs->trans("Yes"), '0' => $langs->trans("No"));
    -			$this->tpl['tobuy'] = $form->selectarray('tobuy',$statutarray,$this->status_buy);
    -
    -            $this->tpl['description'] = $this->description;
    -            $this->tpl['note'] = $this->note;
    -		}
    -
     		if ($action == 'view')
     		{
                 $head = product_prepare_head($this->object);
    @@ -180,10 +168,13 @@ class ActionsCardProduct
     		{
         		// Status
         		$statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSell"));
    -    		$this->tpl['status'] = $form->selectarray('statut',$statutarray,$_POST["statut"]);
    +    		$this->tpl['status'] = $form->selectarray('statut',$statutarray,$this->object->status);
     
         		$statutarray=array('1' => $langs->trans("ProductStatusOnBuy"), '0' => $langs->trans("ProductStatusNotOnBuy"));
    -    		$this->tpl['status_buy'] = $form->selectarray('statut_buy',$statutarray,$_POST["statut_buy"]);
    +    		$this->tpl['status_buy'] = $form->selectarray('statut_buy',$statutarray,$this->object->status_buy);
    +
    +    		$this->tpl['description'] = $this->description;
    +    		$this->tpl['note'] = $this->note;
     
     		    // Finished
     			$statutarray=array('1' => $langs->trans("Finished"), '0' => $langs->trans("RowMaterial"));
    @@ -208,10 +199,6 @@ class ActionsCardProduct
     
     		if ($action == 'view')
     		{
    -    		// Status
    -    		$this->tpl['status'] = $this->object->getLibStatut(2,0);
    -    		$this->tpl['status_buy'] = $this->object->getLibStatut(2,1);
    -
         		// Photo
     			$this->tpl['nblignes'] = 4;
     			if ($this->object->is_photo_available($conf->product->multidir_output[$this->object->entity]))
    @@ -253,7 +240,6 @@ class ActionsCardProduct
     		{
     	        $this->LoadListDatas($limit, $offset, $sortfield, $sortorder);
     		}
    -
     	}
     
     
    @@ -268,7 +254,7 @@ class ActionsCardProduct
     
     		$this->field_list = array();
     
    -		$sql = "SELECT rowid, name, alias, title, align, sort, search, enabled, rang";
    +		$sql = "SELECT rowid, name, alias, title, align, sort, search, visible, enabled, rang";
     		$sql.= " FROM ".MAIN_DB_PREFIX."c_field_list";
     		$sql.= " WHERE element = '".$this->db->escape($this->fieldListName)."'";
     		$sql.= " AND entity = ".$conf->entity;
    @@ -293,6 +279,7 @@ class ActionsCardProduct
     				$fieldlist["align"]		= $obj->align;
     				$fieldlist["sort"]		= $obj->sort;
     				$fieldlist["search"]	= $obj->search;
    +				$fieldlist["visible"]	= $obj->visible;
     				$fieldlist["enabled"]	= verifCond($obj->enabled);
     				$fieldlist["order"]		= $obj->rang;
     
    @@ -309,6 +296,7 @@ class ActionsCardProduct
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Fetch datas list and save into ->list_datas
     	 *
    @@ -320,6 +308,7 @@ class ActionsCardProduct
     	 */
     	function LoadListDatas($limit, $offset, $sortfield, $sortorder)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
             $this->getFieldList();
    @@ -445,6 +434,4 @@ class ActionsCardProduct
     			dol_print_error($this->db);
     		}
     	}
    -
     }
    -
    diff --git a/htdocs/product/canvas/product/tpl/card_create.tpl.php b/htdocs/product/canvas/product/tpl/card_create.tpl.php
    index bc4b5409688..ca668037e93 100644
    --- a/htdocs/product/canvas/product/tpl/card_create.tpl.php
    +++ b/htdocs/product/canvas/product/tpl/card_create.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2018 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,7 +30,10 @@ $statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSe
     
     <!-- BEGIN PHP TEMPLATE -->
     
    -<?php print load_fiche_titre($langs->trans("Product")); ?>
    +<?php
    +print load_fiche_titre($langs->trans("NewProduct"),'','title_products.png');
    +dol_fiche_head('');
    +?>
     
     <?php dol_htmloutput_errors((is_numeric($object->error)?'':$object->error),$object->errors); ?>
     
    @@ -65,7 +68,7 @@ $statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSe
     
     <tr>
     <td class="fieldrequired"><?php echo $langs->trans("Status").' ('.$langs->trans("Buy").')'; ?></td>
    -<td><?php echo $form->selectarray('statut_buy',$statutarray,$object->status_tobuy); ?></td>
    +<td><?php echo $form->selectarray('statut_buy',$statutarray,$object->status_buy); ?></td>
     </tr>
     
     <?php if (! empty($conf->stock->enabled)) { ?>
    diff --git a/htdocs/product/canvas/product/tpl/card_edit.tpl.php b/htdocs/product/canvas/product/tpl/card_edit.tpl.php
    index 6c13bddb6a1..36a4b7543c6 100644
    --- a/htdocs/product/canvas/product/tpl/card_edit.tpl.php
    +++ b/htdocs/product/canvas/product/tpl/card_edit.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2018 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,7 +31,9 @@ $statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSe
     <!-- BEGIN PHP TEMPLATE -->
     
     <?php
    -print load_fiche_titre($langs->trans("Product"));
    +$head=product_prepare_head($object);
    +$titre=$langs->trans("CardProduct".$object->type);
    +dol_fiche_head($head, 'card', $titre, 0, 'product');
     
     dol_htmloutput_errors($object->error,$object->errors);
     ?>
    @@ -65,7 +67,7 @@ dol_htmloutput_errors($object->error,$object->errors);
     
     <tr>
     <td class="fieldrequired"><?php echo $langs->trans("Status").' ('.$langs->trans("Buy").')'; ?></td>
    -<td><?php echo $form->selectarray('statut_buy',$statutarray,$object->status_tobuy); ?></td>
    +<td><?php echo $form->selectarray('statut_buy',$statutarray,$object->status_buy); ?></td>
     </tr>
     
     <?php if (! empty($conf->stock->enabled)) { ?>
    diff --git a/htdocs/product/canvas/product/tpl/card_view.tpl.php b/htdocs/product/canvas/product/tpl/card_view.tpl.php
    index 44b1f96203b..082a983305b 100644
    --- a/htdocs/product/canvas/product/tpl/card_view.tpl.php
    +++ b/htdocs/product/canvas/product/tpl/card_view.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2018 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,7 +27,20 @@ $object=$GLOBALS['object'];
     ?>
     
     <!-- BEGIN PHP TEMPLATE -->
    -<?php echo $langs->trans("Product"); ?>
    +<?php
    +$head=product_prepare_head($object);
    +$titre=$langs->trans("CardProduct".$object->type);
    +
    +dol_fiche_head($head, 'card', $titre, -1, 'product');
    +
    +$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php?restore_lastsearch_values=1&type='.$object->type.'">'.$langs->trans("BackToList").'</a>';
    +$object->next_prev_filter=" fk_product_type = ".$object->type;
    +
    +$shownav = 1;
    +if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
    +
    +dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
    +?>
     
     <?php dol_htmloutput_errors($object->error,$object->errors); ?>
     
    @@ -50,16 +63,6 @@ $object=$GLOBALS['object'];
     
     </tr>
     
    -<tr>
    -<td><?php echo $langs->trans("Status").' ('.$langs->trans("Sell").')'; ?></td>
    -<td><?php echo $object->status; ?></td>
    -</tr>
    -
    -<tr>
    -<td><?php echo $langs->trans("Status").' ('.$langs->trans("Buy").')'; ?></td>
    -<td><?php echo $object->status_buy; ?></td>
    -</tr>
    -
     <tr>
     <td class="tdtop"><?php echo $langs->trans("Description"); ?></td>
     <td colspan="2"><?php echo $object->description; ?></td>
    diff --git a/htdocs/product/canvas/product/tpl/list.tpl.php b/htdocs/product/canvas/product/tpl/list.tpl.php
    deleted file mode 100644
    index e5c315e8148..00000000000
    --- a/htdocs/product/canvas/product/tpl/list.tpl.php
    +++ /dev/null
    @@ -1,108 +0,0 @@
    -<?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    - *
    - * This program is free software; you can redistribute it and/or modify
    - * it under the terms of the GNU General Public License as published by
    - * the Free Software Foundation; either version 3 of the License, or
    - * (at your option) any later version.
    - *
    - * This program is distributed in the hope that it will be useful,
    - * but WITHOUT ANY WARRANTY; without even the implied warranty of
    - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    - * GNU General Public License for more details.
    - *
    - * You should have received a copy of the GNU General Public License
    - * along with this program. If not, see <http://www.gnu.org/licenses/>.
    - */
    -
    -// Protection to avoid direct call of template
    -if (empty($conf) || ! is_object($conf))
    -{
    -	print "Error, template page can't be called as URL";
    -	exit;
    -}
    -
    -?>
    -
    -<!-- BEGIN PHP TEMPLATE -->
    -
    -<table class="notopnoleftnoright allwidth" style="margin-bottom: 2px;">
    -<tr>
    -	<td class="nobordernopadding" width="40" align="left" valign="middle">
    -		<?php echo $title_picto; ?>
    -	</td>
    -	<td class="nobordernopadding" valign="middle">
    -    	<div class="titre"><?php echo $title_text; ?></div>
    -	</td>
    -</tr>
    -</table>
    -
    -<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" name="formulaire">
    -<input type="hidden" name="token" value="<?php echo $_SESSION['newtoken']; ?>">
    -<input type="hidden" name="action" value="list">
    -<input type="hidden" name="sortfield" value="<?php echo $sortfield; ?>">
    -<input type="hidden" name="sortorder" value="<?php echo $sortorder; ?>">
    -<input type="hidden" name="canvas" value="default">
    -<input type="hidden" name="type" value="0">
    -
    -<table class="liste allwidth">
    -
    -<!-- FIELDS TITLE -->
    -
    -<tr class="liste_titre">
    -	<?php
    - 	foreach($fieldlist as $field) {
    - 		if ($field['enabled']) {
    - 			if ($field['sort'])	{ ?>
    - 				<td class="liste_titre" align="<?php echo $field['align']; ?>"><?php echo $field['title']; ?>
    - 					<a href="<?php echo $_SERVER["PHP_SELF"];?>?sortfield=<?php echo $field['name']; ?>&amp;sortorder=asc&amp;begin=&amp;tosell=&amp;canvas=default&amp;fourn_id=&amp;snom=&amp;sref=">
    - 						<img src="<?php echo DOL_URL_ROOT; ?>/theme/<?php echo $conf->theme; ?>/img/1downarrow.png" border="0" alt="A-Z" title="A-Z">
    - 					</a>
    -  					<a href="<?php echo $_SERVER["PHP_SELF"];?>?sortfield=<?php echo $field['name']; ?>&amp;sortorder=desc&amp;begin=&amp;tosell=&amp;canvas=default&amp;fourn_id=&amp;snom=&amp;sref=">
    -  						<img src="<?php echo DOL_URL_ROOT; ?>/theme/<?php echo $conf->theme; ?>/img/1uparrow.png" border="0" alt="Z-A" title="Z-A">
    -  					</a>
    -  				</td>
    -  		<?php } else { ?>
    -  				<td class="liste_titre" align="<?php echo $field['align']; ?>"><?php echo $field['title']; ?></td>
    -	<?php } } } ?>
    -</tr>
    -
    - <!-- FIELDS SEARCH -->
    -
    -<tr class="liste_titre">
    -	<?php
    - 	$num = count($fieldlist);
    - 	foreach($fieldlist as $key => $searchfield)	{
    - 		if ($searchfield['enabled']) {
    - 			if ($searchfield['search'])	{ ?>
    -  				<td class="liste_titre" align="<?php echo $searchfield['align']; ?>"><input class="flat" type="text" name="s<?php echo $searchfield['alias']; ?>" value=""></td>
    -	<?php } else if ($key == $num) {
    -        print '<td class="liste_titre" align="right">';
    -        $searchpicto=$form->showFilterAndCheckAddButtons(0);
    -        print $searchpicto;
    -        print '</td>';
    -	} else { ?>
    -  			<td class="liste_titre">&nbsp;</td>
    - 	<?php } } } ?>
    -</tr>
    -
    -<!-- FIELDS DATA -->
    -
    -<?php
    -$var=true;
    -foreach($datas as $line) {
    -		?>
    -	<tr <?php echo $bc[$var]; ?>>
    -   		<?php
    -   		foreach($line as $key => $value) {
    -   			foreach($fieldlist as $field) {
    -   				if ($field['alias'] == $key) { ?>
    -   					<td align="<?php echo $field['align']; ?>"><?php echo $value; ?></td>
    -   		<?php } } } ?>
    -   	</tr>
    -<?php } ?>
    -
    -</table>
    -</form>
    -
    -<!-- END PHP TEMPLATE -->
    \ No newline at end of file
    diff --git a/htdocs/product/canvas/service/actions_card_service.class.php b/htdocs/product/canvas/service/actions_card_service.class.php
    index af227e54b0b..7ba746af06e 100644
    --- a/htdocs/product/canvas/service/actions_card_service.class.php
    +++ b/htdocs/product/canvas/service/actions_card_service.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2018 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -63,6 +63,7 @@ class ActionsCardService
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *    Assign custom values for canvas (for example into this->tpl to be used by templates)
     	 *
    @@ -73,6 +74,7 @@ class ActionsCardService
     	 */
     	function assign_values(&$action, $id=0, $ref='')
     	{
    +        // phpcs:enable
     		global $limit, $offset, $sortfield, $sortorder;
             global $conf, $langs, $user, $mysoc, $canvas;
     		global $form, $formproduct;
    @@ -122,20 +124,6 @@ class ActionsCardService
     			$this->tpl['tva_tx'] = $form->load_tva("tva_tx",-1,$mysoc,'');
     		}
     
    -		if ($action == 'create' || $action == 'edit')
    -		{
    -			// Status
    -			$statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSell"));
    -			$this->tpl['status'] = $form->selectarray('statut',$statutarray,$this->status);
    -
    -			//To Buy
    -			$statutarray=array('1' => $langs->trans("Yes"), '0' => $langs->trans("No"));
    -			$this->tpl['tobuy'] = $form->selectarray('tobuy',$statutarray,$this->status_buy);
    -
    -            $this->tpl['description'] = $this->description;
    -            $this->tpl['note'] = $this->note;
    -		}
    -
     		if ($action == 'view')
     		{
                 $head = product_prepare_head($this->object);
    @@ -182,10 +170,13 @@ class ActionsCardService
     		{
         		// Status
         		$statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSell"));
    -    		$this->tpl['status'] = $form->selectarray('statut',$statutarray,$_POST["statut"]);
    +    		$this->tpl['status'] = $form->selectarray('statut',$statutarray,$this->object->status);
     
         		$statutarray=array('1' => $langs->trans("ProductStatusOnBuy"), '0' => $langs->trans("ProductStatusNotOnBuy"));
    -    		$this->tpl['status_buy'] = $form->selectarray('statut_buy',$statutarray,$_POST["statut_buy"]);
    +    		$this->tpl['status_buy'] = $form->selectarray('statut_buy',$statutarray,$this->object->status_buy);
    +
    +    		$this->tpl['description'] = $this->description;
    +    		$this->tpl['note'] = $this->note;
     
     		    // Duration unit
     			// TODO creer fonction
    @@ -203,10 +194,6 @@ class ActionsCardService
     
     		if ($action == 'view')
     		{
    -    		// Status
    -    		$this->tpl['status'] = $this->object->getLibStatut(2,0);
    -    		$this->tpl['status_buy'] = $this->object->getLibStatut(2,1);
    -
     		    // Photo
     			$this->tpl['nblignes'] = 4;
     			if ($this->object->is_photo_available($conf->service->multidir_output[$this->object->entity]))
    @@ -232,7 +219,6 @@ class ActionsCardService
     		{
     	        $this->LoadListDatas($limit, $offset, $sortfield, $sortorder);
     		}
    -
     	}
     
     
    @@ -247,7 +233,7 @@ class ActionsCardService
     
             $this->field_list = array();
     
    -		$sql = "SELECT rowid, name, alias, title, align, sort, search, enabled, rang";
    +		$sql = "SELECT rowid, name, alias, title, align, sort, search, visible, enabled, rang";
     		$sql.= " FROM ".MAIN_DB_PREFIX."c_field_list";
     		$sql.= " WHERE element = '".$this->db->escape($this->fieldListName)."'";
     		$sql.= " AND entity = ".$conf->entity;
    @@ -272,6 +258,7 @@ class ActionsCardService
     				$fieldlist["align"]		= $obj->align;
     				$fieldlist["sort"]		= $obj->sort;
     				$fieldlist["search"]	= $obj->search;
    +				$fieldlist["visible"]	= $obj->visible;
     				$fieldlist["enabled"]	= verifCond($obj->enabled);
     				$fieldlist["order"]		= $obj->rang;
     
    @@ -287,6 +274,7 @@ class ActionsCardService
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Fetch datas list and save into ->list_datas
     	 *
    @@ -298,6 +286,7 @@ class ActionsCardService
     	 */
     	function LoadListDatas($limit, $offset, $sortfield, $sortorder)
     	{
    +        // phpcs:enable
     		global $conf;
     		global $search_categ,$sall,$sref,$search_barcode,$snom,$catid;
     
    @@ -377,6 +366,4 @@ class ActionsCardService
     			print $sql;
     		}
     	}
    -
     }
    -
    diff --git a/htdocs/product/canvas/service/tpl/card_create.tpl.php b/htdocs/product/canvas/service/tpl/card_create.tpl.php
    index b9dc10fd5dc..79f40d4f6e0 100644
    --- a/htdocs/product/canvas/service/tpl/card_create.tpl.php
    +++ b/htdocs/product/canvas/service/tpl/card_create.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2018 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,7 +30,10 @@ $statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSe
     
     <!-- BEGIN PHP TEMPLATE CREATE.TPL -->
     
    -<?php print load_fiche_titre($langs->trans("Service")); ?>
    +<?php
    +print load_fiche_titre($langs->trans("NewService"),'','title_products.png');
    +dol_fiche_head('');
    +?>
     
     <?php dol_htmloutput_errors($this->control->tpl['error'],$this->control->tpl['errors']); ?>
     
    @@ -62,7 +65,7 @@ $statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSe
     
     <tr>
     <td class="fieldrequired"><?php echo $langs->trans("Status").' ('.$langs->trans("Buy").')'; ?></td>
    -<td><?php echo $form->selectarray('statut_buy',$statutarray,$object->status_tobuy); ?></td>
    +<td><?php echo $form->selectarray('statut_buy',$statutarray,$object->status_buy); ?></td>
     </tr>
     
     <tr><td><?php echo $langs->trans("Duration"); ?></td>
    diff --git a/htdocs/product/canvas/service/tpl/card_edit.tpl.php b/htdocs/product/canvas/service/tpl/card_edit.tpl.php
    index 6fc3bf3273a..2c48be3e0ef 100644
    --- a/htdocs/product/canvas/service/tpl/card_edit.tpl.php
    +++ b/htdocs/product/canvas/service/tpl/card_edit.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2018 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,7 +31,9 @@ $statutarray=array('1' => $langs->trans("OnSell"), '0' => $langs->trans("NotOnSe
     <!-- BEGIN PHP TEMPLATE EDIT.TPL -->
     
     <?php
    -print load_fiche_titre($langs->trans("Service"));
    +$head=product_prepare_head($object);
    +$titre=$langs->trans("CardProduct".$object->type);
    +dol_fiche_head($head, 'card', $titre, 0, 'service');
     
     dol_htmloutput_errors($object->error,$object->errors);
     ?>
    @@ -62,7 +64,7 @@ dol_htmloutput_errors($object->error,$object->errors);
     
     <tr>
     <td class="fieldrequired"><?php echo $langs->trans("Status").' ('.$langs->trans("Buy").')'; ?></td>
    -<td><?php echo $form->selectarray('statut_buy',$statutarray,$object->status_tobuy); ?></td>
    +<td><?php echo $form->selectarray('statut_buy',$statutarray,$object->status_buy); ?></td>
     </tr>
     
     <tr><td><?php echo $langs->trans("Duration"); ?></td>
    diff --git a/htdocs/product/canvas/service/tpl/card_view.tpl.php b/htdocs/product/canvas/service/tpl/card_view.tpl.php
    index fc129132dee..02cefb38e7d 100644
    --- a/htdocs/product/canvas/service/tpl/card_view.tpl.php
    +++ b/htdocs/product/canvas/service/tpl/card_view.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2018 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,7 +27,20 @@ $object=$GLOBALS['object'];
     ?>
     
     <!-- BEGIN PHP TEMPLATE VIEW.TPL -->
    -<?php echo $langs->trans("Service"); ?>
    +<?php
    +$head=product_prepare_head($object);
    +$titre=$langs->trans("CardProduct".$object->type);
    +
    +dol_fiche_head($head, 'card', $titre, -1, 'service');
    +
    +$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php?restore_lastsearch_values=1&type='.$object->type.'">'.$langs->trans("BackToList").'</a>';
    +$object->next_prev_filter=" fk_product_type = ".$object->type;
    +
    +$shownav = 1;
    +if ($user->societe_id && ! in_array('product', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
    +
    +dol_banner_tab($object, 'ref', $linkback, $shownav, 'ref');
    +?>
     
     <?php dol_htmloutput_errors($object->error,$object->errors); ?>
     
    @@ -50,16 +63,6 @@ $object=$GLOBALS['object'];
     
     </tr>
     
    -<tr>
    -<td><?php echo $langs->trans("Status").' ('.$langs->trans("Sell").')'; ?></td>
    -<td><?php echo $object->status; ?></td>
    -</tr>
    -
    -<tr>
    -<td><?php echo $langs->trans("Status").' ('.$langs->trans("Buy").')'; ?></td>
    -<td><?php echo $object->status_buy; ?></td>
    -</tr>
    -
     <tr>
     <td class="tdtop"><?php echo $langs->trans("Description"); ?></td>
     <td colspan="2"><?php echo $object->description; ?></td>
    diff --git a/htdocs/product/canvas/service/tpl/list.tpl.php b/htdocs/product/canvas/service/tpl/list.tpl.php
    deleted file mode 100644
    index ef6d461fc5c..00000000000
    --- a/htdocs/product/canvas/service/tpl/list.tpl.php
    +++ /dev/null
    @@ -1,107 +0,0 @@
    -<?php
    -/* Copyright (C) 2010 Regis Houssin <regis.houssin@capnetworks.com>
    - *
    - * This program is free software; you can redistribute it and/or modify
    - * it under the terms of the GNU General Public License as published by
    - * the Free Software Foundation; either version 3 of the License, or
    - * (at your option) any later version.
    - *
    - * This program is distributed in the hope that it will be useful,
    - * but WITHOUT ANY WARRANTY; without even the implied warranty of
    - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    - * GNU General Public License for more details.
    - *
    - * You should have received a copy of the GNU General Public License
    - * along with this program. If not, see <http://www.gnu.org/licenses/>.
    - */
    -
    -// Protection to avoid direct call of template
    -if (empty($conf) || ! is_object($conf))
    -{
    -	print "Error, template page can't be called as URL";
    -	exit;
    -}
    -
    -?>
    -
    -<!-- BEGIN PHP TEMPLATE -->
    -
    -<table class="notopnoleftnoright allwidth" style="margin-bottom: 2px;">
    -<tr>
    -	<td class="nobordernopadding" width="40" align="left" valign="middle">
    -		<?php echo $title_picto; ?>
    -	</td>
    -	<td class="nobordernopadding" valign="middle">
    -    	<div class="titre"><?php echo $title_text; ?></div>
    -	</td>
    -</tr>
    -</table>
    -
    -<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" name="formulaire">
    -<input type="hidden" name="token" value="<?php echo $_SESSION['newtoken']; ?>">
    -<input type="hidden" name="action" value="list">
    -<input type="hidden" name="sortfield" value="<?php echo $sortfield; ?>">
    -<input type="hidden" name="sortorder" value="<?php echo $sortorder; ?>">
    -<input type="hidden" name="canvas" value="service">
    -<input type="hidden" name="type" value="1">
    -
    -<table class="liste allwidth">
    -
    -<!-- FIELDS TITLE -->
    -
    -<tr class="liste_titre">
    -	<?php
    - 	foreach($fieldlist as $field) {
    - 		if ($field['enabled']) {
    - 			if ($field['sort'])	{ ?>
    - 				<td class="liste_titre" align="<?php echo $field['align']; ?>"><?php echo $field['title']; ?>
    - 					<a href="<?php echo $_SERVER["PHP_SELF"];?>?sortfield=<?php echo $field['name']; ?>&amp;sortorder=asc&amp;begin=&amp;tosell=&amp;canvas=default&amp;fourn_id=&amp;snom=&amp;sref=">
    - 						<img src="<?php echo DOL_URL_ROOT; ?>/theme/<?php echo $conf->theme; ?>/img/1downarrow.png" border="0" alt="A-Z" title="A-Z">
    - 					</a>
    -  					<a href="<?php echo $_SERVER["PHP_SELF"];?>?sortfield=<?php echo $field['name']; ?>&amp;sortorder=desc&amp;begin=&amp;tosell=&amp;canvas=default&amp;fourn_id=&amp;snom=&amp;sref=">
    -  						<img src="<?php echo DOL_URL_ROOT; ?>/theme/<?php echo $conf->theme; ?>/img/1uparrow.png" border="0" alt="Z-A" title="Z-A">
    -  					</a>
    -  				</td>
    -  		<?php } else { ?>
    -  				<td class="liste_titre" align="<?php echo $field['align']; ?>"><?php echo $field['title']; ?></td>
    -	<?php } } } ?>
    -</tr>
    -
    - <!-- FIELDS SEARCH -->
    -
    -<tr class="liste_titre">
    -	<?php
    - 	$num = count($fieldlist);
    - 	foreach($fieldlist as $key => $searchfield)	{
    - 		if ($searchfield['enabled']) {
    - 			if ($searchfield['search'])	{ ?>
    -  				<td class="liste_titre" align="<?php echo $searchfield['align']; ?>"><input class="flat" type="text" name="s<?php echo $searchfield['alias']; ?>" value=""></td>
    -	<?php } else if ($key == $num) {
    -        print '<td class="liste_titre" align="right">';
    -        $searchpicto=$form->showFilterAndCheckAddButtons(0);
    -        print $searchpicto;
    -        print '</td>';
    - 			} else { ?>
    -  			<td class="liste_titre">&nbsp;</td>
    - 	<?php } } } ?>
    -</tr>
    -
    -<!-- FIELDS DATA -->
    -
    -<?php
    -foreach($datas as $line) {
    -		?>
    -	<tr class="oddeven">
    -   		<?php
    -   		foreach($line as $key => $value) {
    -   			foreach($fieldlist as $field) {
    -   				if ($field['alias'] == $key) { ?>
    -   					<td align="<?php echo $field['align']; ?>"><?php echo $value; ?></td>
    -   		<?php } } } ?>
    -   	</tr>
    -<?php } ?>
    -
    -</table>
    -</form>
    -
    -<!-- END PHP TEMPLATE -->
    \ No newline at end of file
    diff --git a/htdocs/product/card.php b/htdocs/product/card.php
    index 1fe43240305..f94c34d1804 100644
    --- a/htdocs/product/card.php
    +++ b/htdocs/product/card.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2007	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Eric Seigne				<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2015	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2006		Andre Cianfarani		<acianfa@free.fr>
      * Copyright (C) 2006		Auguria SARL			<info@auguria.org>
      * Copyright (C) 2010-2015	Juanjo Menent			<jmenent@2byte.es>
    @@ -112,7 +112,7 @@ if (! empty($canvas))
     // Security check
     $fieldvalue = (! empty($id) ? $id : (! empty($ref) ? $ref : ''));
     $fieldtype = (! empty($id) ? 'rowid' : 'ref');
    -$result=restrictedArea($user,'produit|service',$fieldvalue,'product&product','','',$fieldtype,$objcanvas);
    +$result=restrictedArea($user,'produit|service',$fieldvalue,'product&product','','',$fieldtype);
     
     // Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
     $hookmanager->initHooks(array('productcard','globalcard'));
    @@ -477,7 +477,6 @@ if (empty($reshook))
                         $action = 'edit';
                     }
                 }
    -
             }
         }
     
    @@ -689,7 +688,7 @@ if (empty($reshook))
                     if (($result = $propal->defineBuyPrice($pu_ht, GETPOST('remise_percent'), $object->id)) < 0)
                     {
                         dol_syslog($langs->trans('FailedToGetCostPrice'));
    -                    setEventMessage($langs->trans('FailedToGetCostPrice'), 'errors');
    +                    setEventMessages($langs->trans('FailedToGetCostPrice'), null, 'errors');
                     }
                     else
                     {
    @@ -732,7 +731,7 @@ if (empty($reshook))
                     if (($result = $commande->defineBuyPrice($pu_ht, GETPOST('remise_percent'), $object->id)) < 0)
                     {
                         dol_syslog($langs->trans('FailedToGetCostPrice'));
    -                    setEventMessage($langs->trans('FailedToGetCostPrice'), 'errors');
    +                    setEventMessages($langs->trans('FailedToGetCostPrice'), null, 'errors');
                     }
                     else
                     {
    @@ -775,7 +774,7 @@ if (empty($reshook))
                     if (($result = $facture->defineBuyPrice($pu_ht, GETPOST('remise_percent'), $object->id)) < 0)
                     {
                         dol_syslog($langs->trans('FailedToGetCostPrice'));
    -                    setEventMessage($langs->trans('FailedToGetCostPrice'), 'errors');
    +                    setEventMessages($langs->trans('FailedToGetCostPrice'), null, 'errors');
                     }
                     else
                     {
    @@ -977,7 +976,7 @@ else
     	        }
     	        require_once DOL_DOCUMENT_ROOT.'/core/class/html.formbarcode.class.php';
                 $formbarcode = new FormBarCode($db);
    -	        print $formbarcode->select_barcode_type($fk_barcode_type, 'fk_barcode_type', 1);
    +            print $formbarcode->selectBarcodeType($fk_barcode_type, 'fk_barcode_type', 1);
     	        print '</td><td>'.$langs->trans("BarcodeValue").'</td><td>';
     	        $tmpcode=isset($_POST['barcode'])?GETPOST('barcode'):$object->barcode;
     	        if (empty($tmpcode) && ! empty($modBarCodeProduct->code_auto)) $tmpcode=$modBarCodeProduct->getNextValue($object,$type);
    @@ -1067,11 +1066,14 @@ else
                     print $formproduct->select_measuring_units("surface_units","surface");
                     print '</td></tr>';
                 }
    -            // Volume
    -            print '<tr><td>'.$langs->trans("Volume").'</td><td colspan="3">';
    -            print '<input name="volume" size="4" value="'.GETPOST('volume').'">';
    -            print $formproduct->select_measuring_units("volume_units","volume");
    -            print '</td></tr>';
    +            if (empty($conf->global->PRODUCT_DISABLE_VOLUME))
    +            {
    +                // Volume
    +                print '<tr><td>'.$langs->trans("Volume").'</td><td colspan="3">';
    +                print '<input name="volume" size="4" value="'.GETPOST('volume').'">';
    +                print $formproduct->select_measuring_units("volume_units","volume");
    +                print '</td></tr>';
    +            }
             }
     
             // Units
    @@ -1340,7 +1342,7 @@ else
     		        }
     		        require_once DOL_DOCUMENT_ROOT.'/core/class/html.formbarcode.class.php';
     	            $formbarcode = new FormBarCode($db);
    -		        print $formbarcode->select_barcode_type($fk_barcode_type, 'fk_barcode_type', 1);
    +                print $formbarcode->selectBarcodeType($fk_barcode_type, 'fk_barcode_type', 1);
     		        print '</td><td>'.$langs->trans("BarcodeValue").'</td><td>';
     		        $tmpcode=isset($_POST['barcode'])?GETPOST('barcode'):$object->barcode;
     		        if (empty($tmpcode) && ! empty($modBarCodeProduct->code_auto)) $tmpcode=$modBarCodeProduct->getNextValue($object,$type);
    @@ -1636,7 +1638,7 @@ else
     				}
                     if ($action == 'editbarcodetype')
                     {
    -                    $formbarcode->form_barcode_type($_SERVER['PHP_SELF'].'?id='.$object->id,$object->barcode_type,'fk_barcode_type');
    +                    print $formbarcode->formBarcodeType($_SERVER['PHP_SELF'].'?id='.$object->id, $object->barcode_type, 'fk_barcode_type');
                     }
                     else
                     {
    @@ -1940,7 +1942,6 @@ else
     
                 dol_fiche_end();
             }
    -
         }
         else if ($action != 'create')
         {
    @@ -2199,6 +2200,6 @@ if ($action != 'create' && $action != 'edit' && $action != 'delete')
         print '</div></div></div>';
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/class/api_products.class.php b/htdocs/product/class/api_products.class.php
    index 8ba4eaaecc8..afacbb158b5 100644
    --- a/htdocs/product/class/api_products.class.php
    +++ b/htdocs/product/class/api_products.class.php
    @@ -46,44 +46,52 @@ class Products extends DolibarrApi
          */
         function __construct()
         {
    -		global $db, $conf;
    -		$this->db = $db;
    +        global $db, $conf;
    +        $this->db = $db;
             $this->product = new Product($this->db);
         }
     
         /**
    -     * Get properties of a product object
    +     * Get properties of a product object (from its ID, Ref, Ref_ext or Barcode)
          *
          * Return an array with product information.
          * TODO implement getting a product by ref or by $ref_ext
          *
    -     * @param 	int 	$id     			ID of product
    -     * @param	int		$includestockdata	Load also information about stock (slower)
    -     * @return 	array|mixed 				Data without useless information
    -	 *
    +     * @param  int    $id               ID of product
    +     * @param  string $ref              Ref of element
    +     * @param  string $ref_ext          Ref ext of element
    +     * @param  string $barcode          Barcode of element
    +     * @param  int    $includestockdata Load also information about stock (slower)
    +     * @return array|mixed                 Data without useless information
    +     *
          * @throws 401
          * @throws 403
          * @throws 404
          */
    -    function get($id, $includestockdata=0)
    +    function get($id, $ref='', $ref_ext='', $barcode='', $includestockdata=0)
         {
    -        if(! DolibarrApiAccess::$user->rights->produit->lire) {
    -			throw new RestException(403);
    -		}
    -
    -        $result = $this->product->fetch($id);
    -        if( ! $result ) {
    -            throw new RestException(404, 'Product not found');
    +        if (empty($id) && empty($ref) && empty($ref_ext) && empty($barcode)) {
    +            throw new RestException(400, 'bad value for parameter id, ref, ref_ext or barcode');
             }
     
    -		if( ! DolibarrApi::_checkAccessToResource('product',$this->product->id)) {
    -			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -		}
    +        $id = (empty($id)?0:$id);
    +        
    +        if(! DolibarrApiAccess::$user->rights->produit->lire) {
    +            throw new RestException(403);
    +        }
     
    -		if ($includestockdata)
    -		{
    -        	$this->product->load_stock();
    -		}
    +        $result = $this->product->fetch($id, $ref, $ref_ext, $barcode);
    +        if(! $result ) {
    +            throw new RestException(404, 'Product not found');
    +        }
    +        
    +        if(! DolibarrApi::_checkAccessToResource('product', $this->product->id)) {
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
    +
    +        if ($includestockdata) {
    +               $this->product->load_stock();
    +        }
     
             return $this->_cleanObjectDatas($this->product);
         }
    @@ -93,16 +101,17 @@ class Products extends DolibarrApi
          *
          * Get a list of products
          *
    -     * @param string	$sortfield	Sort field
    -     * @param string	$sortorder	Sort order
    -     * @param int		$limit		Limit for list
    -     * @param int		$page		Page number
    -     * @param int		$mode		Use this param to filter list (0 for all, 1 for only product, 2 for only service)
    -     * @param int		$category	Use this param to filter list by category
    -     * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.tobuy:=:0) and (t.tosell:=:1)"
    +     * @param  string $sortfield  Sort field
    +     * @param  string $sortorder  Sort order
    +     * @param  int    $limit      Limit for list
    +     * @param  int    $page       Page number
    +     * @param  int    $mode       Use this param to filter list (0 for all, 1 for only product, 2 for only service)
    +     * @param  int    $category   Use this param to filter list by category
    +     * @param  string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.tobuy:=:0) and (t.tosell:=:1)"
          * @return array                Array of product objects
          */
    -    function index($sortfield = "t.ref", $sortorder = 'ASC', $limit = 100, $page = 0, $mode=0, $category=0, $sqlfilters = '') {
    +    function index($sortfield = "t.ref", $sortorder = 'ASC', $limit = 100, $page = 0, $mode = 0, $category = 0, $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -111,36 +120,34 @@ class Products extends DolibarrApi
     
             $sql = "SELECT t.rowid, t.ref, t.ref_ext";
             $sql.= " FROM ".MAIN_DB_PREFIX."product as t";
    -        if ($category > 0)
    -        {
    +        if ($category > 0) {
                 $sql.= ", ".MAIN_DB_PREFIX."categorie_product as c";
             }
             $sql.= ' WHERE t.entity IN ('.getEntity('product').')';
             // Select products of given category
    -        if ($category > 0)
    -        {
    +        if ($category > 0) {
                 $sql.= " AND c.fk_categorie = ".$db->escape($category);
                 $sql.= " AND c.fk_product = t.rowid ";
             }
    -        // Show products
    -        if ($mode == 1) $sql.= " AND t.fk_product_type = 0";
    -        // Show services
    -        if ($mode == 2) $sql.= " AND t.fk_product_type = 1";
    +        if ($mode == 1) {
    +            // Show only products
    +            $sql.= " AND t.fk_product_type = 0";
    +        } elseif ($mode == 2) {
    +            // Show only services
    +            $sql.= " AND t.fk_product_type = 1";
    +        }
             // Add sql filters
    -        if ($sqlfilters)
    -        {
    -            if (! DolibarrApi::_checkFilters($sqlfilters))
    -            {
    +        if ($sqlfilters) {
    +            if (! DolibarrApi::_checkFilters($sqlfilters)) {
                     throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
                 }
    -	        $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
    +            $regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
                 $sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
             }
     
             $sql.= $db->order($sortfield, $sortorder);
    -        if ($limit)	{
    -            if ($page < 0)
    -            {
    +        if ($limit) {
    +            if ($page < 0) {
                     $page = 0;
                 }
                 $offset = $limit * $page;
    @@ -149,10 +156,10 @@ class Products extends DolibarrApi
             }
     
             $result = $db->query($sql);
    -        if ($result)
    -        {
    +        if ($result) {
                 $num = $db->num_rows($result);
                 $min = min($num, ($limit <= 0 ? $num : $limit));
    +            $i = 0;
                 while ($i < $min)
                 {
                     $obj = $db->fetch_object($result);
    @@ -166,7 +173,7 @@ class Products extends DolibarrApi
             else {
                 throw new RestException(503, 'Error when retrieve product list : '.$db->lasterror());
             }
    -        if( ! count($obj_ret)) {
    +        if(! count($obj_ret)) {
                 throw new RestException(404, 'No product found');
             }
             return $obj_ret;
    @@ -175,14 +182,14 @@ class Products extends DolibarrApi
         /**
          * Create product object
          *
    -     * @param   array   $request_data   Request data
    -     * @return  int     ID of product
    +     * @param  array $request_data Request data
    +     * @return int     ID of product
          */
         function post($request_data = null)
         {
             if(! DolibarrApiAccess::$user->rights->produit->creer) {
    -			throw new RestException(401);
    -		}
    +            throw new RestException(401);
    +        }
             // Check mandatory fields
             $result = $this->_validate($request_data);
     
    @@ -200,8 +207,8 @@ class Products extends DolibarrApi
          * Update product.
          * Price will be updated by this API only if option is set on "One price per product". See other APIs for other price modes.
          *
    -     * @param int   $id             Id of product to update
    -     * @param array $request_data   Datas
    +     * @param  int   $id           Id of product to update
    +     * @param  array $request_data Datas
          * @return int
          *
          * @throws RestException
    @@ -210,99 +217,102 @@ class Products extends DolibarrApi
          */
         function put($id, $request_data = null)
         {
    -    	global $conf;
    +        global $conf;
     
             if(! DolibarrApiAccess::$user->rights->produit->creer) {
    -			throw new RestException(401);
    -		}
    +            throw new RestException(401);
    +        }
     
             $result = $this->product->fetch($id);
    -        if( ! $result ) {
    +        if(! $result ) {
                 throw new RestException(404, 'Product not found');
             }
     
    -		if( ! DolibarrApi::_checkAccessToResource('product',$this->product->id)) {
    -			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -		}
    +        if(! DolibarrApi::_checkAccessToResource('product', $this->product->id)) {
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
     
    -		$oldproduct = dol_clone($this->product, 0);
    +        $oldproduct = dol_clone($this->product, 0);
     
             foreach($request_data as $field => $value) {
    -            if ($field == 'id') continue;
    +            if ($field == 'id') { continue;
    +            }
                 $this->product->$field = $value;
             }
     
             $result = $this->product->update($id, DolibarrApiAccess::$user, 1, 'update');
     
             // If price mode is 1 price per product
    -        if ($result > 0 && ! empty($conf->global->PRODUCT_PRICE_UNIQ))
    -        {
    -        	// We update price only if it was changed
    -        	$pricemodified = false;
    -        	if ($this->product->price_base_type != $oldproduct->price_base_type) $pricemodified = true;
    -        	else
    -        	{
    -        		if ($this->product->tva_tx != $oldproduct->tva_tx) $pricemodified = true;
    -        		if ($this->product->tva_npr != $oldproduct->tva_npr) $pricemodified = true;
    -        		if ($this->product->default_vat_code != $oldproduct->default_vat_code) $pricemodified = true;
    +        if ($result > 0 && ! empty($conf->global->PRODUCT_PRICE_UNIQ)) {
    +            // We update price only if it was changed
    +            $pricemodified = false;
    +            if ($this->product->price_base_type != $oldproduct->price_base_type) { $pricemodified = true;
    +            } else
    +            {
    +                if ($this->product->tva_tx != $oldproduct->tva_tx) { $pricemodified = true;
    +                }
    +                if ($this->product->tva_npr != $oldproduct->tva_npr) { $pricemodified = true;
    +                }
    +                if ($this->product->default_vat_code != $oldproduct->default_vat_code) { $pricemodified = true;
    +                }
     
    -        		if ($this->product->price_base_type == 'TTC')
    -	        	{
    -	        		if ($this->product->price_ttc != $oldproduct->price_ttc) $pricemodified = true;
    -	        		if ($this->product->price_min_ttc != $oldproduct->price_min_ttc) $pricemodified = true;
    -	        	}
    -	        	else
    -	        	{
    -	        		if ($this->product->price != $oldproduct->price) $pricemodified = true;
    -	        		if ($this->product->price_min != $oldproduct->price_min) $pricemodified = true;
    -		      	}
    -        	}
    +                if ($this->product->price_base_type == 'TTC') {
    +                    if ($this->product->price_ttc != $oldproduct->price_ttc) { $pricemodified = true;
    +                    }
    +                    if ($this->product->price_min_ttc != $oldproduct->price_min_ttc) { $pricemodified = true;
    +                    }
    +                }
    +                else
    +                {
    +                    if ($this->product->price != $oldproduct->price) { $pricemodified = true;
    +                    }
    +                    if ($this->product->price_min != $oldproduct->price_min) { $pricemodified = true;
    +                    }
    +                }
    +            }
     
    -        	if ($pricemodified)
    -        	{
    -        		$newvat = $this->product->tva_tx;
    -        		$newnpr = $this->product->tva_npr;
    -        		$newvatsrccode = $this->product->default_vat_code;
    +            if ($pricemodified) {
    +                $newvat = $this->product->tva_tx;
    +                $newnpr = $this->product->tva_npr;
    +                $newvatsrccode = $this->product->default_vat_code;
     
    -        		$newprice = $this->product->price;
    -        		$newpricemin = $this->product->price_min;
    -        		if ($this->product->price_base_type == 'TTC')
    -        		{
    -        			$newprice = $this->product->price_ttc;
    -        			$newpricemin = $this->product->price_min_ttc;
    -        		}
    +                $newprice = $this->product->price;
    +                $newpricemin = $this->product->price_min;
    +                if ($this->product->price_base_type == 'TTC') {
    +                    $newprice = $this->product->price_ttc;
    +                    $newpricemin = $this->product->price_min_ttc;
    +                }
     
    -        		$result = $this->product->updatePrice($newprice, $this->product->price_base_type, DolibarrApiAccess::$user, $newvat, $newpricemin, 0, $newnpr, 0, 0, array(), $newvatsrccode);
    -        	}
    +                $result = $this->product->updatePrice($newprice, $this->product->price_base_type, DolibarrApiAccess::$user, $newvat, $newpricemin, 0, $newnpr, 0, 0, array(), $newvatsrccode);
    +            }
             }
     
    -        if ($result <= 0)
    -        {
    -			throw new RestException(500, "Error updating product", array_merge(array($this->product->error), $this->product->errors));
    -		}
    +        if ($result <= 0) {
    +            throw new RestException(500, "Error updating product", array_merge(array($this->product->error), $this->product->errors));
    +        }
     
    -		return $this->get($id);
    +        return $this->get($id);
         }
     
         /**
          * Delete product
          *
    -     * @param   int     $id   Product ID
    -     * @return  array
    +     * @param  int $id Product ID
    +     * @return array
          */
         function delete($id)
         {
             if(! DolibarrApiAccess::$user->rights->produit->supprimer) {
    -			throw new RestException(401);
    -		}
    +            throw new RestException(401);
    +        }
             $result = $this->product->fetch($id);
    -        if( ! $result ) {
    +        if(! $result ) {
                 throw new RestException(404, 'Product not found');
             }
     
    -		if( ! DolibarrApi::_checkAccessToResource('product',$this->product->id)) {
    -			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    -		}
    +        if(! DolibarrApi::_checkAccessToResource('product', $this->product->id)) {
    +            throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +        }
     
             // The Product::delete() method uses the global variable $user.
             global $user;
    @@ -315,41 +325,41 @@ class Products extends DolibarrApi
         /**
          * Get categories for a product
          *
    -     * @param int		$id         ID of product
    -     * @param string	$sortfield	Sort field
    -     * @param string	$sortorder	Sort order
    -     * @param int		$limit		Limit for list
    -     * @param int		$page		Page number
    +     * @param int    $id        ID of product
    +     * @param string $sortfield Sort field
    +     * @param string $sortorder Sort order
    +     * @param int    $limit     Limit for list
    +     * @param int    $page      Page number
          *
          * @return mixed
          *
          * @url GET {id}/categories
          */
    -	function getCategories($id, $sortfield = "s.rowid", $sortorder = 'ASC', $limit = 0, $page = 0)
    -	{
    -		if (! DolibarrApiAccess::$user->rights->categorie->lire) {
    -			throw new RestException(401);
    -		}
    +    function getCategories($id, $sortfield = "s.rowid", $sortorder = 'ASC', $limit = 0, $page = 0)
    +    {
    +        if (! DolibarrApiAccess::$user->rights->categorie->lire) {
    +            throw new RestException(401);
    +        }
     
    -		$categories = new Categorie($this->db);
    +        $categories = new Categorie($this->db);
     
    -		$result = $categories->getListForItem($id, 'product', $sortfield, $sortorder, $limit, $page);
    +        $result = $categories->getListForItem($id, 'product', $sortfield, $sortorder, $limit, $page);
     
    -		if (empty($result)) {
    -			throw new RestException(404, 'No category found');
    -		}
    +        if (empty($result)) {
    +            throw new RestException(404, 'No category found');
    +        }
     
    -		if ($result < 0) {
    -			throw new RestException(503, 'Error when retrieve category list : '.array_merge(array($categories->error), $categories->errors));  
    -		}
    +        if ($result < 0) {
    +            throw new RestException(503, 'Error when retrieve category list : '.array_merge(array($categories->error), $categories->errors));
    +        }
     
    -		return $result;
    +        return $result;
         }
     
         /**
          * Get prices per segment for a product
          *
    -     * @param int		$id         ID of product
    +     * @param int $id ID of product
          *
          * @return mixed
          *
    @@ -357,41 +367,40 @@ class Products extends DolibarrApi
          */
         function getCustomerPricesPerSegment($id)
         {
    -    	global $conf;
    +        global $conf;
     
    -    	if (! DolibarrApiAccess::$user->rights->produit->lire) {
    -    		throw new RestException(401);
    -    	}
    +        if (! DolibarrApiAccess::$user->rights->produit->lire) {
    +            throw new RestException(401);
    +        }
     
    -    	if (empty($conf->global->PRODUIT_MULTIPRICES))
    -    	{
    -    		throw new RestException(400, 'API not available: this mode of pricing is not enabled by setup');
    -    	}
    +        if (empty($conf->global->PRODUIT_MULTIPRICES)) {
    +            throw new RestException(400, 'API not available: this mode of pricing is not enabled by setup');
    +        }
     
    -    	$result = $this->product->fetch($id);
    -    	if ( ! $result ) {
    -    		throw new RestException(404, 'Product not found');
    -    	}
    +        $result = $this->product->fetch($id);
    +        if (! $result ) {
    +            throw new RestException(404, 'Product not found');
    +        }
     
    -    	if ($result < 0) {
    -    		throw new RestException(503, 'Error when retrieve prices list : '.array_merge(array($this->product->error), $this->product->errors));
    -    	}
    +        if ($result < 0) {
    +            throw new RestException(503, 'Error when retrieve prices list : '.array_merge(array($this->product->error), $this->product->errors));
    +        }
     
    -    	return array(
    -    	'multiprices'=>$this->product->multiprices,
    -    	'multiprices_inc_tax'=>$this->product->multiprices_ttc,
    -    	'multiprices_min'=>$this->product->multiprices_min,
    -    	'multiprices_min_inc_tax'=>$this->product->multiprices_min_ttc,
    -    	'multiprices_vat'=>$this->product->multiprices_tva_tx,
    -    	'multiprices_base_type'=>$this->product->multiprices_base_type,
    -    	//'multiprices_default_vat_code'=>$this->product->multiprices_default_vat_code
    -    	);
    +        return array(
    +        'multiprices'=>$this->product->multiprices,
    +        'multiprices_inc_tax'=>$this->product->multiprices_ttc,
    +        'multiprices_min'=>$this->product->multiprices_min,
    +        'multiprices_min_inc_tax'=>$this->product->multiprices_min_ttc,
    +        'multiprices_vat'=>$this->product->multiprices_tva_tx,
    +        'multiprices_base_type'=>$this->product->multiprices_base_type,
    +        //'multiprices_default_vat_code'=>$this->product->multiprices_default_vat_code
    +        );
         }
     
         /**
          * Get prices per customer for a product
          *
    -     * @param int		$id         ID of product
    +     * @param int $id ID of product
          *
          * @return mixed
          *
    @@ -399,34 +408,33 @@ class Products extends DolibarrApi
          */
         function getCustomerPricesPerCustomer($id)
         {
    -    	global $conf;
    +        global $conf;
     
    -    	if (! DolibarrApiAccess::$user->rights->produit->lire) {
    -    		throw new RestException(401);
    -    	}
    +        if (! DolibarrApiAccess::$user->rights->produit->lire) {
    +            throw new RestException(401);
    +        }
     
    -    	if (empty($conf->global->PRODUIT_CUSTOMER_PRICES))
    -    	{
    -    		throw new RestException(400, 'API not available: this mode of pricing is not enabled by setup');
    -    	}
    +        if (empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
    +            throw new RestException(400, 'API not available: this mode of pricing is not enabled by setup');
    +        }
     
    -    	$result = $this->product->fetch($id);
    -    	if ( ! $result ) {
    -    		throw new RestException(404, 'Product not found');
    -    	}
    +        $result = $this->product->fetch($id);
    +        if (! $result ) {
    +            throw new RestException(404, 'Product not found');
    +        }
     
    -    	if ($result < 0) {
    -    		throw new RestException(503, 'Error when retrieve prices list : '.array_merge(array($this->product->error), $this->product->errors));
    -    	}
    +        if ($result < 0) {
    +            throw new RestException(503, 'Error when retrieve prices list : '.array_merge(array($this->product->error), $this->product->errors));
    +        }
     
    -    	throw new RestException(501, 'Feature not yet available');
    -    	//return $result;
    +        throw new RestException(501, 'Feature not yet available');
    +        //return $result;
         }
     
         /**
          * Get prices per quantity for a product
          *
    -     * @param int		$id         ID of product
    +     * @param int $id ID of product
          *
          * @return mixed
          *
    @@ -434,40 +442,40 @@ class Products extends DolibarrApi
          */
         function getCustomerPricesPerQuantity($id)
         {
    -    	global $conf;
    +        global $conf;
     
    -    	if (! DolibarrApiAccess::$user->rights->produit->lire) {
    -    		throw new RestException(401);
    -    	}
    +        if (! DolibarrApiAccess::$user->rights->produit->lire) {
    +            throw new RestException(401);
    +        }
     
    -    	if (empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY))
    -    	{
    -    		throw new RestException(400, 'API not available: this mode of pricing is not enabled by setup');
    -    	}
    +        if (empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY)) {
    +            throw new RestException(400, 'API not available: this mode of pricing is not enabled by setup');
    +        }
     
    -    	$result = $this->product->fetch($id);
    -    	if ( ! $result ) {
    -    		throw new RestException(404, 'Product not found');
    -    	}
    +        $result = $this->product->fetch($id);
    +        if (! $result ) {
    +            throw new RestException(404, 'Product not found');
    +        }
     
    -    	if ($result < 0) {
    -    		throw new RestException(503, 'Error when retrieve prices list : '.array_merge(array($this->product->error), $this->product->errors));
    -    	}
    +        if ($result < 0) {
    +            throw new RestException(503, 'Error when retrieve prices list : '.array_merge(array($this->product->error), $this->product->errors));
    +        }
     
    -    	return array(
    -    		'prices_by_qty'=>$this->product->prices_by_qty[0],				// 1 if price by quantity was activated for the product
    -    		'prices_by_qty_list'=>$this->product->prices_by_qty_list[0]
    -    	);
    +        return array(
    +        'prices_by_qty'=>$this->product->prices_by_qty[0],                // 1 if price by quantity was activated for the product
    +        'prices_by_qty_list'=>$this->product->prices_by_qty_list[0]
    +        );
         }
     
     
         /**
          * Clean sensible object datas
          *
    -     * @param   object  $object    Object to clean
    -     * @return    array    Array of cleaned object properties
    +     * @param  object $object Object to clean
    +     * @return array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    @@ -490,7 +498,7 @@ class Products extends DolibarrApi
         /**
          * Validate fields before create or update object
          *
    -     * @param array $data   Datas to validate
    +     * @param  array $data Datas to validate
          * @return array
          * @throws RestException
          */
    @@ -498,8 +506,9 @@ class Products extends DolibarrApi
         {
             $product = array();
             foreach (Products::$FIELDS as $field) {
    -            if (!isset($data[$field]))
    +            if (!isset($data[$field])) {
                     throw new RestException(400, "$field field missing");
    +            }
                 $product[$field] = $data[$field];
             }
             return $product;
    diff --git a/htdocs/product/class/html.formproduct.class.php b/htdocs/product/class/html.formproduct.class.php
    index 6ae31645a50..5356d212c38 100644
    --- a/htdocs/product/class/html.formproduct.class.php
    +++ b/htdocs/product/class/html.formproduct.class.php
    @@ -29,8 +29,15 @@ require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
      */
     class FormProduct
     {
    -	var $db;
    -	var $error;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     	// Cache arrays
     	var $cache_warehouses=array();
    @@ -45,8 +52,6 @@ class FormProduct
     	function __construct($db)
     	{
     		$this->db = $db;
    -
    -		return 1;
     	}
     
     
    @@ -160,6 +165,7 @@ class FormProduct
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
     	/**
     	 * Return full path to current warehouse in $tab (recursive function)
     	 *
    @@ -167,8 +173,9 @@ class FormProduct
     	 * @param	String	$final_label	full label with all parents, separated by ' >> ' (completed on each call)
     	 * @return	String					full label with all parents, separated by ' >> '
     	 */
    -	private function get_parent_path($tab, $final_label='') {
    -
    +    private function get_parent_path($tab, $final_label='')
    +    {
    +        //phpcs:enable
     		if(empty($final_label)) $final_label = $tab['label'];
     
     		if(empty($tab['parent_id'])) return $final_label;
    @@ -180,7 +187,6 @@ class FormProduct
     		}
     
     		return $final_label;
    -
     	}
     
     	/**
    @@ -274,6 +280,7 @@ class FormProduct
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Output a combo box with list of units
     	 *  pour l'instant on ne definit pas les unites dans la base
    @@ -286,9 +293,11 @@ class FormProduct
     	 */
     	function select_measuring_units($name='measuring_units', $measuring_style='', $default='0', $adddefault=0)
     	{
    +        //phpcs:enable
     		print $this->load_measuring_units($name, $measuring_style, $default, $adddefault);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return a combo box with list of units
     	 *  For the moment, units labels are defined in measuring_units_string
    @@ -301,6 +310,7 @@ class FormProduct
     	 */
     	function load_measuring_units($name='measuring_units', $measuring_style='', $default='0', $adddefault=0)
     	{
    +        //phpcs:enable
     		global $langs,$conf,$mysoc;
     		$langs->load("other");
     
    @@ -483,4 +493,4 @@ class FormProduct
     			}
     		}
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
    index c30376622a4..6d3a0724006 100644
    --- a/htdocs/product/class/product.class.php
    +++ b/htdocs/product/class/product.class.php
    @@ -1,10 +1,10 @@
     <?php
    -/* Copyright (C) 2001-2007	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    +/* Copyright (C) 2001-2007    Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2006		Andre Cianfarani		<acianfa@free.fr>
      * Copyright (C) 2007-2011	Jean Heimburger			<jean@tiaris.info>
    - * Copyright (C) 2010-2013	Juanjo Menent			<jmenent@2byte.es>
    + * Copyright (C) 2010-2018	Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2012       Cedric Salvador         <csalvador@gpcsolutions.fr>
      * Copyright (C) 2013-2014	Cedric GROSS			<c.gross@kreiz-it.fr>
      * Copyright (C) 2013-2016	Marcos García			<marcosgdf@gmail.com>
    @@ -30,9 +30,9 @@
      */
     
     /**
    - *	\file       htdocs/product/class/product.class.php
    - *	\ingroup    produit
    - *	\brief      File of class to manage predefined products or services
    + *    \file       htdocs/product/class/product.class.php
    + *    \ingroup    produit
    + *    \brief      File of class to manage predefined products or services
      */
     require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
     require_once DOL_DOCUMENT_ROOT.'/product/class/productbatch.class.php';
    @@ -43,594 +43,646 @@ require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
      */
     class Product extends CommonObject
     {
    -	public $element='product';
    -	public $table_element='product';
    -	public $fk_element='fk_product';
    -	protected $childtables=array('supplier_proposaldet', 'propaldet','commandedet','facturedet','contratdet','facture_fourn_det','commande_fournisseurdet');    // To test if we can delete object
    -	public $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +    /**
    +     * @var string ID to identify managed object
    +     */
    +    public $element='product';
     
    -	/**
    -	 * {@inheritdoc}
    -	 */
    -	protected $table_ref_field = 'ref';
    +    /**
    +     * @var string Name of table without prefix where object is stored
    +     */
    +    public $table_element='product';
     
    -	public $regeximgext='\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.xpm|\.xbm'; // See also into images.lib.php
    +    /**
    +     * @var int Field with ID of parent key if this field has a parent
    +     */
    +    public $fk_element='fk_product';
     
    -	/*
    -	 * @deprecated
    -	 * @see label
    -	 */
    -	public $libelle;
    -	/**
    -	 * Product label
    -	 * @var string
    -	 */
    -	public $label;
    +    protected $childtables=array('supplier_proposaldet', 'propaldet','commandedet','facturedet','contratdet','facture_fourn_det','commande_fournisseurdet');    // To test if we can delete object
     
    -	/**
    -     	* Product descripion
    -     	* @var string
    -     	*/
    -	public $description;
    +    /**
    +     * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +     *
    +     * @var int
    +     */
    +    public $ismultientitymanaged = 1;
     
    -	/**
    -	 * Check TYPE constants
    -	 * @var int
    -	 */
    -	public $type = self::TYPE_PRODUCT;
    +    /**
    +     * {@inheritdoc}
    +     */
    +    protected $table_ref_field = 'ref';
     
    -	/**
    -	 * Selling price
    -	 * @var float
    -	 */
    -	public $price;			// Price net
    +    public $regeximgext='\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.xpm|\.xbm'; // See also into images.lib.php
     
    -	/**
    -	 * Price with tax
    -	 * @var float
    -	 */
    -	public $price_ttc;
    +    /*
    +    * @deprecated
    +    * @see label
    +    */
    +    public $libelle;
    +    /**
    +     * Product label
    +     *
    +     * @var string
    +     */
    +    public $label;
     
    -	/**
    -	 * Minimum price net
    -	 * @var float
    -	 */
    -	public $price_min;
    +    /**
    +     * Product descripion
    +     *
    +     * @var string
    +     */
    +    public $description;
     
    -	/**
    -	 * Minimum price with tax
    -	 * @var float
    -	 */
    -	public $price_min_ttc;
    +    /**
    +     * Check TYPE constants
    +     *
    +     * @var int
    +     */
    +    public $type = self::TYPE_PRODUCT;
     
    -	/*
    -	 * Base price ('TTC' for price including tax or 'HT' for net price)
    -	 * @var float
    -	 */
    -	public $price_base_type;
    +    /**
    +     * Selling price
    +     *
    +     * @var float
    +     */
    +    public $price;            // Price net
     
    -	//! Arrays for multiprices
    -	public $multiprices=array();
    -	public $multiprices_ttc=array();
    -	public $multiprices_base_type=array();
    -	public $multiprices_min=array();
    -	public $multiprices_min_ttc=array();
    -	public $multiprices_tva_tx=array();
    -	public $multiprices_recuperableonly=array();
    +    /**
    +     * Price with tax
    +     *
    +     * @var float
    +     */
    +    public $price_ttc;
     
    -	//! Price by quantity arrays
    -	public $price_by_qty;
    -	public $prices_by_qty=array();
    -	public $prices_by_qty_id=array();
    -	public $prices_by_qty_list=array();
    +    /**
    +     * Minimum price net
    +     *
    +     * @var float
    +     */
    +    public $price_min;
     
    -	//! Default VAT code for product (link to code into llx_c_tva but without foreign keys)
    -	public $default_vat_code;
    +    /**
    +     * Minimum price with tax
    +     *
    +     * @var float
    +     */
    +    public $price_min_ttc;
     
    -	//! Default VAT rate of product
    -	public $tva_tx;
    +    /*
    +    * Base price ('TTC' for price including tax or 'HT' for net price)
    +    * @var float
    +    */
    +    public $price_base_type;
     
    -	//! French VAT NPR (0 or 1)
    +    //! Arrays for multiprices
    +    public $multiprices=array();
    +    public $multiprices_ttc=array();
    +    public $multiprices_base_type=array();
    +    public $multiprices_min=array();
    +    public $multiprices_min_ttc=array();
    +    public $multiprices_tva_tx=array();
    +    public $multiprices_recuperableonly=array();
    +
    +    //! Price by quantity arrays
    +    public $price_by_qty;
    +    public $prices_by_qty=array();
    +    public $prices_by_qty_id=array();
    +    public $prices_by_qty_list=array();
    +
    +    //! Default VAT code for product (link to code into llx_c_tva but without foreign keys)
    +    public $default_vat_code;
    +
    +    //! Default VAT rate of product
    +    public $tva_tx;
    +
    +    //! French VAT NPR (0 or 1)
         public $tva_npr=0;
     
    -	//! Other local taxes
    -	public $localtax1_tx;
    -	public $localtax2_tx;
    -	public $localtax1_type;
    -	public $localtax2_type;
    +    //! Other local taxes
    +    public $localtax1_tx;
    +    public $localtax2_tx;
    +    public $localtax1_type;
    +    public $localtax2_type;
     
    -	/**
    -	 * Stock real
    -	 * @var int
    -	 */
    -	public $stock_reel = 0;
    +    /**
    +     * Stock real
    +     *
    +     * @var int
    +     */
    +    public $stock_reel = 0;
     
    -	/**
    -	 * Stock virtual
    -	 * @var int
    -	 */
    -	public $stock_theorique;
    +    /**
    +     * Stock virtual
    +     *
    +     * @var int
    +     */
    +    public $stock_theorique;
     
    -	/**
    -	 * Cost price
    -	 * @var float
    -	 */
    -	public $cost_price;
    +    /**
    +     * Cost price
    +     *
    +     * @var float
    +     */
    +    public $cost_price;
     
    -	//! Average price value for product entry into stock (PMP)
    -	public $pmp;
    +    //! Average price value for product entry into stock (PMP)
    +    public $pmp;
     
    -	/**
    -	 * Stock alert
    -	 * @var int
    -	 */
    -	public $seuil_stock_alerte=0;
    +    /**
    +     * Stock alert
    +     *
    +     * @var int
    +     */
    +    public $seuil_stock_alerte=0;
     
    -	/**
    -	 * Ask for replenishment when $desiredstock < $stock_reel
    -	 */
    -	public $desiredstock=0;
    +    /**
    +     * Ask for replenishment when $desiredstock < $stock_reel
    +     */
    +    public $desiredstock=0;
     
    -	/*
    -	 * Service expiration
    -	 */
    -	public $duration_value;
    +    /*
    +    * Service expiration
    +    */
    +    public $duration_value;
     
    -	/**
    -	 * Exoiration unit
    -	 */
    -	public $duration_unit;
    +    /**
    +     * Exoiration unit
    +     */
    +    public $duration_unit;
     
    -	/**
    -	 * Status indicates whether the product is on sale '1' or not '0'
    -	 * @var int
    -	 */
    -	public $status=0;
    +    /**
    +     * Status indicates whether the product is on sale '1' or not '0'
    +     *
    +     * @var int
    +     */
    +    public $status=0;
     
    -	/**
    -	 * Status indicate whether the product is available for purchase '1' or not '0'
    -	 * @var int
    -	 */
    -	public $status_buy=0;
    +    /**
    +     * Status indicate whether the product is available for purchase '1' or not '0'
    +     *
    +     * @var int
    +     */
    +    public $status_buy=0;
     
    -	/**
    -	 * Status indicates whether the product is a finished product '1' or a raw material '0'
    -	 * @var int
    -	 */
    -	public $finished;
    +    /**
    +     * Status indicates whether the product is a finished product '1' or a raw material '0'
    +     *
    +     * @var int
    +     */
    +    public $finished;
     
    -	/**
    -	 * We must manage lot/batch number, sell-by date and so on : '1':yes '0':no
    -	 * @var int
    -	 */
    -	public $status_batch=0;
    +    /**
    +     * We must manage lot/batch number, sell-by date and so on : '1':yes '0':no
    +     *
    +     * @var int
    +     */
    +    public $status_batch=0;
     
    -	/**
    -	 * Customs code
    -	 * @var
    -	 */
    -	public $customcode;
    +    /**
    +     * Customs code
    +     *
    +     * @var
    +     */
    +    public $customcode;
     
    -	/**
    -	 * Product URL
    -	 * @var string
    -	 */
    -	public $url;
    +    /**
    +     * Product URL
    +     *
    +     * @var string
    +     */
    +    public $url;
     
    -	//! Unites de mesure
    -	public $weight;
    -	public $weight_units;
    -	public $length;
    -	public $length_units;
    -	public $surface;
    -	public $surface_units;
    -	public $volume;
    -	public $volume_units;
    +    //! Unites de mesure
    +    public $weight;
    +    public $weight_units;
    +    public $length;
    +    public $length_units;
    +    public $surface;
    +    public $surface_units;
    +    public $volume;
    +    public $volume_units;
     
    -	public $accountancy_code_sell;
    -	public $accountancy_code_sell_intra;
    -	public $accountancy_code_sell_export;
    -	public $accountancy_code_buy;
    +    public $accountancy_code_sell;
    +    public $accountancy_code_sell_intra;
    +    public $accountancy_code_sell_export;
    +    public $accountancy_code_buy;
     
    -	/**
    -	 * Main barcode
    -	 * barcode value
    -	 * @var
    -	 */
    -	public $barcode;
    +    /**
    +     * Main barcode
    +     * barcode value
    +     *
    +     * @var
    +     */
    +    public $barcode;
     
    -	/**
    -	 * Additional barcodes (Some products have different barcodes according to the country of origin of manufacture)
    -	 * @var array
    -	 */
    -	public $barcodes_extra=array();
    +    /**
    +     * Additional barcodes (Some products have different barcodes according to the country of origin of manufacture)
    +     *
    +     * @var array
    +     */
    +    public $barcodes_extra=array();
     
    -	public $stats_propale=array();
    -	public $stats_commande=array();
    -	public $stats_contrat=array();
    -	public $stats_facture=array();
    +    public $stats_propale=array();
    +    public $stats_commande=array();
    +    public $stats_contrat=array();
    +    public $stats_facture=array();
         public $stats_commande_fournisseur=array();
     
    -	public $multilangs=array();
    +    public $multilangs=array();
     
    -	//! Taille de l'image
    -	public $imgWidth;
    -	public $imgHeight;
    +    //! Taille de l'image
    +    public $imgWidth;
    +    public $imgHeight;
     
    -	public $date_creation;
    -	public $date_modification;
    +    public $date_creation;
    +    public $date_modification;
     
    -	//! Id du fournisseur
    -	public $product_fourn_id;
    +    //! Id du fournisseur
    +    public $product_fourn_id;
     
    -	//! Product ID already linked to a reference supplier
    -	public $product_id_already_linked;
    +    //! Product ID already linked to a reference supplier
    +    public $product_id_already_linked;
     
    -	public $nbphoto=0;
    +    public $nbphoto=0;
     
    -	//! Contains detail of stock of product into each warehouse
    -	public $stock_warehouse=array();
    +    //! Contains detail of stock of product into each warehouse
    +    public $stock_warehouse=array();
     
    -	public $oldcopy;
    +    public $oldcopy;
     
    +    /**
    +     * @var int ID
    +     */
         public $fk_price_expression;
     
         /* To store supplier price found */
    -	public $fourn_pu;
    -	public $fourn_price_base_type;
    -	public $fourn_socid;
    +    public $fourn_pu;
    +    public $fourn_price_base_type;
    +    public $fourn_socid;
     
    -	/**
    -	 * @deprecated
    -	 * @see ref_supplier
    -	 */
    -	public $ref_fourn;
    -	public $ref_supplier;
    +    /**
    +     * @deprecated
    +     * @see        $ref_supplier
    +     */
    +    public $ref_fourn;
    +    public $ref_supplier;
     
    -	/**
    -	 * Unit code ('km', 'm', 'l', 'p', ...)
    -	 * @var string
    -	 */
    -	public $fk_unit;
    +    /**
    +     * Unit code ('km', 'm', 'l', 'p', ...)
    +     *
    +     * @var string
    +     */
    +    public $fk_unit;
     
    -	/**
    -	 * Price is generated using multiprice rules
    -	 * @var int
    -	 */
    -	public $price_autogen = 0;
    +    /**
    +     * Price is generated using multiprice rules
    +     *
    +     * @var int
    +     */
    +    public $price_autogen = 0;
     
     
    -	/**
    -	 * Regular product
    -	 */
    -	const TYPE_PRODUCT = 0;
    -	/**
    -	 * Service
    -	 */
    -	const TYPE_SERVICE = 1;
    -	/**
    -	 * Advanced feature: assembly kit
    -	 */
    -	const TYPE_ASSEMBLYKIT = 2;
    -	/**
    -	 * Advanced feature: stock kit
    -	 */
    -	const TYPE_STOCKKIT = 3;
    +    public $fields = array(
    +    'rowid'         =>array('type'=>'integer',      'label'=>'TechnicalID',      'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'index'=>1, 'position'=>1, 'comment'=>'Id'),
    +    'ref'           =>array('type'=>'varchar(128)', 'label'=>'Ref',              'enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'),
    +    'entity'        =>array('type'=>'integer',      'label'=>'Entity',           'enabled'=>1, 'visible'=>0,  'default'=>1, 'notnull'=>1,  'index'=>1, 'position'=>20),
    +    'note_public'   =>array('type'=>'html',            'label'=>'NotePublic',         'enabled'=>1, 'visible'=>0,  'position'=>61),
    +    'note'          =>array('type'=>'html',            'label'=>'NotePrivate',         'enabled'=>1, 'visible'=>0,  'position'=>62),
    +    'datec'         =>array('type'=>'datetime',     'label'=>'DateCreation',     'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'position'=>500),
    +    'tms'           =>array('type'=>'timestamp',    'label'=>'DateModification', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'position'=>501),
    +    //'date_valid'    =>array('type'=>'datetime',     'label'=>'DateCreation',     'enabled'=>1, 'visible'=>-2, 'position'=>502),
    +    'fk_user_author'=>array('type'=>'integer',      'label'=>'UserAuthor',       'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'position'=>510, 'foreignkey'=>'llx_user.rowid'),
    +    'fk_user_modif' =>array('type'=>'integer',      'label'=>'UserModif',        'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'position'=>511),
    +    //'fk_user_valid' =>array('type'=>'integer',      'label'=>'UserValidation',        'enabled'=>1, 'visible'=>-1, 'position'=>512),
    +    'import_key'    =>array('type'=>'varchar(14)',  'label'=>'ImportId',         'enabled'=>1, 'visible'=>-2, 'notnull'=>-1, 'index'=>0,  'position'=>1000),
    +    //'tosell'       =>array('type'=>'integer',      'label'=>'Status',           'enabled'=>1, 'visible'=>1,  'notnull'=>1, 'default'=>0, 'index'=>1,  'position'=>1000, 'arrayofkeyval'=>array(0=>'Draft', 1=>'Active', -1=>'Cancel')),
    +    //'tobuy'        =>array('type'=>'integer',      'label'=>'Status',           'enabled'=>1, 'visible'=>1,  'notnull'=>1, 'default'=>0, 'index'=>1,  'position'=>1000, 'arrayofkeyval'=>array(0=>'Draft', 1=>'Active', -1=>'Cancel')),
    +    );
    +
    +    /**
    +     * Regular product
    +     */
    +    const TYPE_PRODUCT = 0;
    +    /**
    +     * Service
    +     */
    +    const TYPE_SERVICE = 1;
    +    /**
    +     * Advanced feature: assembly kit
    +     */
    +    const TYPE_ASSEMBLYKIT = 2;
    +    /**
    +     * Advanced feature: stock kit
    +     */
    +    const TYPE_STOCKKIT = 3;
     
     
    -	/**
    -	 *  Constructor
    -	 *
    -	 *  @param      DoliDB		$db      Database handler
    -	 */
    -	function __construct($db)
    -	{
    -		global $langs;
    +    /**
    +     *  Constructor
    +     *
    +     * @param DoliDB $db Database handler
    +     */
    +    function __construct($db)
    +    {
    +        $this->db = $db;
    +        $this->canvas = '';
    +    }
     
    -		$this->db = $db;
    -		$this->canvas = '';
    -	}
    +    /**
    +     *    Check that ref and label are ok
    +     *
    +     * @return int         >1 if OK, <=0 if KO
    +     */
    +    function check()
    +    {
    +        $this->ref = dol_sanitizeFileName(stripslashes($this->ref));
     
    -	/**
    -	 *    Check that ref and label are ok
    -	 *
    -	 *    @return     int         >1 if OK, <=0 if KO
    -	 */
    -	function check()
    -	{
    -		$this->ref = dol_sanitizeFileName(stripslashes($this->ref));
    +        $err = 0;
    +        if (dol_strlen(trim($this->ref)) == 0) {
    +            $err++;
    +        }
     
    -		$err = 0;
    -		if (dol_strlen(trim($this->ref)) == 0)
    -		$err++;
    +        if (dol_strlen(trim($this->label)) == 0) {
    +            $err++;
    +        }
     
    -		if (dol_strlen(trim($this->label)) == 0)
    -		$err++;
    -
    -		if ($err > 0)
    -		{
    -			return 0;
    -		}
    -		else
    -		{
    -			return 1;
    -		}
    -	}
    -
    -	/**
    -	 *	Insert product into database
    -	 *
    -	 *	@param	User	$user     		User making insert
    -	 *  @param	int		$notrigger		Disable triggers
    -	 *	@return int			     		Id of product/service if OK, < 0 if KO
    -	 */
    -	function create($user,$notrigger=0)
    -	{
    -		global $conf, $langs;
    -
    -        	$error=0;
    -
    -		// Clean parameters
    -		$this->ref = dol_string_nospecial(trim($this->ref));
    -		$this->label = trim($this->label);
    -		$this->price_ttc=price2num($this->price_ttc);
    -		$this->price=price2num($this->price);
    -		$this->price_min_ttc=price2num($this->price_min_ttc);
    -		$this->price_min=price2num($this->price_min);
    -		if (empty($this->tva_tx))    	$this->tva_tx = 0;
    -		if (empty($this->tva_npr))    	$this->tva_npr = 0;
    -		//Local taxes
    -		if (empty($this->localtax1_tx)) $this->localtax1_tx = 0;
    -		if (empty($this->localtax2_tx)) $this->localtax2_tx = 0;
    -		if (empty($this->localtax1_type)) $this->localtax1_type = '0';
    -		if (empty($this->localtax2_type)) $this->localtax2_type = '0';
    -
    -		if (empty($this->price))     	$this->price = 0;
    -		if (empty($this->price_min)) 	$this->price_min = 0;
    -
    -		// Price by quantity
    -		if (empty($this->price_by_qty)) 	$this->price_by_qty = 0;
    -
    -		if (empty($this->status))    	$this->status = 0;
    -		if (empty($this->status_buy))   $this->status_buy = 0;
    -
    -		$price_ht=0;
    -		$price_ttc=0;
    -		$price_min_ht=0;
    -		$price_min_ttc=0;
    -
    -		//
    -		if ($this->price_base_type == 'TTC' && $this->price_ttc > 0)
    -		{
    -			$price_ttc = price2num($this->price_ttc,'MU');
    -			$price_ht = price2num($this->price_ttc / (1 + ($this->tva_tx / 100)),'MU');
    -		}
    -
    -		//
    -		if ($this->price_base_type != 'TTC' && $this->price > 0)
    -		{
    -			$price_ht = price2num($this->price,'MU');
    -			$price_ttc = price2num($this->price * (1 + ($this->tva_tx / 100)),'MU');
    -		}
    -
    -		//
    -		if (($this->price_min_ttc > 0) && ($this->price_base_type == 'TTC'))
    -		{
    -			$price_min_ttc = price2num($this->price_min_ttc,'MU');
    -			$price_min_ht = price2num($this->price_min_ttc / (1 + ($this->tva_tx / 100)),'MU');
    -		}
    -
    -		//
    -		if (($this->price_min > 0) && ($this->price_base_type != 'TTC'))
    -		{
    -			$price_min_ht = price2num($this->price_min,'MU');
    -			$price_min_ttc = price2num($this->price_min * (1 + ($this->tva_tx / 100)),'MU');
    -		}
    -
    -		$this->accountancy_code_buy = trim($this->accountancy_code_buy);
    -		$this->accountancy_code_sell= trim($this->accountancy_code_sell);
    -		$this->accountancy_code_sell_intra= trim($this->accountancy_code_sell_intra);
    -		$this->accountancy_code_sell_export= trim($this->accountancy_code_sell_export);
    -
    -		// Barcode value
    -		$this->barcode=trim($this->barcode);
    -
    -		// Check parameters
    -		if (empty($this->label))
    -		{
    -			$this->error='ErrorMandatoryParametersNotProvided';
    -			return -1;
    -		}
    -
    -		if (empty($this->ref))
    -		{
    -			// Load object modCodeProduct
    -			$module=(! empty($conf->global->PRODUCT_CODEPRODUCT_ADDON)?$conf->global->PRODUCT_CODEPRODUCT_ADDON:'mod_codeproduct_leopard');
    -			if ($module != 'mod_codeproduct_leopard')	// Do not load module file for leopard
    -			{
    -				if (substr($module, 0, 16) == 'mod_codeproduct_' && substr($module, -3) == 'php')
    -				{
    -					$module = substr($module, 0, dol_strlen($module)-4);
    -				}
    -				dol_include_once('/core/modules/product/'.$module.'.php');
    -				$modCodeProduct = new $module;
    -				if (! empty($modCodeProduct->code_auto))
    -				{
    -					$this->ref = $modCodeProduct->getNextValue($this,$this->type);
    -				}
    -				unset($modCodeProduct);
    -			}
    -
    -			if (empty($this->ref))
    -			{
    -				$this->error='ProductModuleNotSetupForAutoRef';
    -				return -2;
    -			}
    -		}
    -
    -		dol_syslog(get_class($this)."::create ref=".$this->ref." price=".$this->price." price_ttc=".$this->price_ttc." tva_tx=".$this->tva_tx." price_base_type=".$this->price_base_type, LOG_DEBUG);
    -
    -		$now=dol_now();
    -
    -		$this->db->begin();
    -
    -		// For automatic creation during create action (not used by Dolibarr GUI, can be used by scripts)
    -		if ($this->barcode == -1) $this->barcode = $this->get_barcode($this,$this->barcode_type_code);
    -
    -		// Check more parameters
    -		// If error, this->errors[] is filled
    -		$result = $this->verify();
    -
    -		if ($result >= 0)
    -		{
    -			$sql = "SELECT count(*) as nb";
    -			$sql.= " FROM ".MAIN_DB_PREFIX."product";
    -			$sql.= " WHERE entity IN (".getEntity('product').")";
    -			$sql.= " AND ref = '" .$this->db->escape($this->ref)."'";
    -
    -			$result = $this->db->query($sql);
    -			if ($result)
    -			{
    -				$obj = $this->db->fetch_object($result);
    -				if ($obj->nb == 0)
    -				{
    -					// Produit non deja existant
    -					$sql = "INSERT INTO ".MAIN_DB_PREFIX."product (";
    -					$sql.= "datec";
    -					$sql.= ", entity";
    -					$sql.= ", ref";
    -					$sql.= ", ref_ext";
    -					$sql.= ", price_min";
    -					$sql.= ", price_min_ttc";
    -					$sql.= ", label";
    -					$sql.= ", fk_user_author";
    -					$sql.= ", fk_product_type";
    -					$sql.= ", price";
    -					$sql.= ", price_ttc";
    -					$sql.= ", price_base_type";
    -					$sql.= ", tobuy";
    -					$sql.= ", tosell";
    -					$sql.= ", accountancy_code_buy";
    -					$sql.= ", accountancy_code_sell";
    -					$sql.= ", accountancy_code_sell_intra";
    -					$sql.= ", accountancy_code_sell_export";
    -					$sql.= ", canvas";
    -					$sql.= ", finished";
    -					$sql.= ", tobatch";
    -					$sql.= ", fk_unit";
    -					$sql.= ") VALUES (";
    -					$sql.= "'".$this->db->idate($now)."'";
    -					$sql.= ", ".$conf->entity;
    -					$sql.= ", '".$this->db->escape($this->ref)."'";
    -					$sql.= ", ".(! empty($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null");
    -					$sql.= ", ".price2num($price_min_ht);
    -					$sql.= ", ".price2num($price_min_ttc);
    -					$sql.= ", ".(! empty($this->label)?"'".$this->db->escape($this->label)."'":"null");
    -					$sql.= ", ".$user->id;
    -					$sql.= ", ".$this->type;
    -					$sql.= ", ".price2num($price_ht);
    -					$sql.= ", ".price2num($price_ttc);
    -					$sql.= ", '".$this->db->escape($this->price_base_type)."'";
    -					$sql.= ", ".$this->status;
    -					$sql.= ", ".$this->status_buy;
    -					$sql.= ", '".$this->db->escape($this->accountancy_code_buy)."'";
    -					$sql.= ", '".$this->db->escape($this->accountancy_code_sell)."'";
    -					$sql.= ", '".$this->db->escape($this->accountancy_code_sell_intra)."'";
    -					$sql.= ", '".$this->db->escape($this->accountancy_code_sell_export)."'";
    -					$sql.= ", '".$this->db->escape($this->canvas)."'";
    -					$sql.= ", ".((! isset($this->finished) || $this->finished < 0 || $this->finished == '') ? 'null' : (int) $this->finished);
    -					$sql.= ", ".((empty($this->status_batch) || $this->status_batch < 0)? '0':$this->status_batch);
    -					$sql.= ", ".(!$this->fk_unit ? 'NULL' : $this->fk_unit);
    -					$sql.= ")";
    -
    -					dol_syslog(get_class($this)."::Create", LOG_DEBUG);
    -					$result = $this->db->query($sql);
    -					if ( $result )
    -					{
    -						$id = $this->db->last_insert_id(MAIN_DB_PREFIX."product");
    -
    -						if ($id > 0)
    -						{
    -							$this->id				= $id;
    -							$this->price			= $price_ht;
    -							$this->price_ttc		= $price_ttc;
    -							$this->price_min		= $price_min_ht;
    -							$this->price_min_ttc	= $price_min_ttc;
    -
    -							$result = $this->_log_price($user);
    -							if ($result > 0)
    -							{
    -								if ($this->update($id, $user, true, 'add') <= 0)
    -								{
    -									$error++;
    -								}
    -							}
    -							else
    -							{
    -								$error++;
    -								$this->error=$this->db->lasterror();
    -							}
    -						}
    -						else
    -						{
    -							$error++;
    -							$this->error='ErrorFailedToGetInsertedId';
    -						}
    -					}
    -					else
    -					{
    -						$error++;
    -						$this->error=$this->db->lasterror();
    -					}
    -				}
    -				else
    -				{
    -					// Product already exists with this ref
    -					$langs->load("products");
    -					$error++;
    -					$this->error = "ErrorProductAlreadyExists";
    -				}
    -			}
    -			else
    -			{
    -				$error++;
    -				$this->error=$this->db->lasterror();
    -			}
    -
    -			if (! $error && ! $notrigger)
    -			{
    -				// Call trigger
    -				$result=$this->call_trigger('PRODUCT_CREATE',$user);
    -				if ($result < 0) { $error++; }
    -				// End call triggers
    -			}
    -
    -			if (! $error)
    -			{
    -				$this->db->commit();
    -				return $this->id;
    -			}
    -			else
    -			{
    -				$this->db->rollback();
    -				return -$error;
    -			}
    +        if ($err > 0) {
    +            return 0;
             }
             else
    -       {
    -            $this->db->rollback();
    -            dol_syslog(get_class($this)."::Create fails verify ".join(',',$this->errors), LOG_WARNING);
    -            return -3;
    +        {
    +            return 1;
    +        }
    +    }
    +
    +    /**
    +     *    Insert product into database
    +     *
    +     * @param  User $user      User making insert
    +     * @param  int  $notrigger Disable triggers
    +     * @return int                         Id of product/service if OK, < 0 if KO
    +     */
    +    function create($user,$notrigger=0)
    +    {
    +        global $conf, $langs;
    +
    +            $error=0;
    +
    +        // Clean parameters
    +        $this->ref = dol_string_nospecial(trim($this->ref));
    +        $this->label = trim($this->label);
    +        $this->price_ttc=price2num($this->price_ttc);
    +        $this->price=price2num($this->price);
    +        $this->price_min_ttc=price2num($this->price_min_ttc);
    +        $this->price_min=price2num($this->price_min);
    +        if (empty($this->tva_tx)) {        $this->tva_tx = 0;
    +        }
    +        if (empty($this->tva_npr)) {        $this->tva_npr = 0;
    +        }
    +        //Local taxes
    +        if (empty($this->localtax1_tx)) { $this->localtax1_tx = 0;
    +        }
    +        if (empty($this->localtax2_tx)) { $this->localtax2_tx = 0;
    +        }
    +        if (empty($this->localtax1_type)) { $this->localtax1_type = '0';
    +        }
    +        if (empty($this->localtax2_type)) { $this->localtax2_type = '0';
             }
     
    -	}
    +        if (empty($this->price)) {         $this->price = 0;
    +        }
    +        if (empty($this->price_min)) {     $this->price_min = 0;
    +        }
    +
    +        // Price by quantity
    +        if (empty($this->price_by_qty)) {     $this->price_by_qty = 0;
    +        }
    +
    +        if (empty($this->status)) {        $this->status = 0;
    +        }
    +        if (empty($this->status_buy)) {   $this->status_buy = 0;
    +        }
    +
    +        $price_ht=0;
    +        $price_ttc=0;
    +        $price_min_ht=0;
    +        $price_min_ttc=0;
    +
    +        //
    +        if ($this->price_base_type == 'TTC' && $this->price_ttc > 0) {
    +            $price_ttc = price2num($this->price_ttc, 'MU');
    +            $price_ht = price2num($this->price_ttc / (1 + ($this->tva_tx / 100)), 'MU');
    +        }
    +
    +        //
    +        if ($this->price_base_type != 'TTC' && $this->price > 0) {
    +            $price_ht = price2num($this->price, 'MU');
    +            $price_ttc = price2num($this->price * (1 + ($this->tva_tx / 100)), 'MU');
    +        }
    +
    +        //
    +        if (($this->price_min_ttc > 0) && ($this->price_base_type == 'TTC')) {
    +            $price_min_ttc = price2num($this->price_min_ttc, 'MU');
    +            $price_min_ht = price2num($this->price_min_ttc / (1 + ($this->tva_tx / 100)), 'MU');
    +        }
    +
    +        //
    +        if (($this->price_min > 0) && ($this->price_base_type != 'TTC')) {
    +            $price_min_ht = price2num($this->price_min, 'MU');
    +            $price_min_ttc = price2num($this->price_min * (1 + ($this->tva_tx / 100)), 'MU');
    +        }
    +
    +        $this->accountancy_code_buy = trim($this->accountancy_code_buy);
    +        $this->accountancy_code_sell= trim($this->accountancy_code_sell);
    +        $this->accountancy_code_sell_intra= trim($this->accountancy_code_sell_intra);
    +        $this->accountancy_code_sell_export= trim($this->accountancy_code_sell_export);
    +
    +        // Barcode value
    +        $this->barcode=trim($this->barcode);
    +
    +        // Check parameters
    +        if (empty($this->label)) {
    +            $this->error='ErrorMandatoryParametersNotProvided';
    +            return -1;
    +        }
    +
    +        if (empty($this->ref)) {
    +            // Load object modCodeProduct
    +            $module=(! empty($conf->global->PRODUCT_CODEPRODUCT_ADDON)?$conf->global->PRODUCT_CODEPRODUCT_ADDON:'mod_codeproduct_leopard');
    +            if ($module != 'mod_codeproduct_leopard')    // Do not load module file for leopard
    +            {
    +                if (substr($module, 0, 16) == 'mod_codeproduct_' && substr($module, -3) == 'php') {
    +                    $module = substr($module, 0, dol_strlen($module)-4);
    +                }
    +                dol_include_once('/core/modules/product/'.$module.'.php');
    +                $modCodeProduct = new $module;
    +                if (! empty($modCodeProduct->code_auto)) {
    +                    $this->ref = $modCodeProduct->getNextValue($this, $this->type);
    +                }
    +                unset($modCodeProduct);
    +            }
    +
    +            if (empty($this->ref)) {
    +                $this->error='ProductModuleNotSetupForAutoRef';
    +                return -2;
    +            }
    +        }
    +
    +        dol_syslog(get_class($this)."::create ref=".$this->ref." price=".$this->price." price_ttc=".$this->price_ttc." tva_tx=".$this->tva_tx." price_base_type=".$this->price_base_type, LOG_DEBUG);
    +
    +        $now=dol_now();
    +
    +        $this->db->begin();
    +
    +        // For automatic creation during create action (not used by Dolibarr GUI, can be used by scripts)
    +        if ($this->barcode == -1) { $this->barcode = $this->get_barcode($this, $this->barcode_type_code);
    +        }
    +
    +        // Check more parameters
    +        // If error, this->errors[] is filled
    +        $result = $this->verify();
    +
    +        if ($result >= 0) {
    +            $sql = "SELECT count(*) as nb";
    +            $sql.= " FROM ".MAIN_DB_PREFIX."product";
    +            $sql.= " WHERE entity IN (".getEntity('product').")";
    +            $sql.= " AND ref = '" .$this->db->escape($this->ref)."'";
    +
    +            $result = $this->db->query($sql);
    +            if ($result) {
    +                $obj = $this->db->fetch_object($result);
    +                if ($obj->nb == 0) {
    +                    // Produit non deja existant
    +                    $sql = "INSERT INTO ".MAIN_DB_PREFIX."product (";
    +                    $sql.= "datec";
    +                    $sql.= ", entity";
    +                    $sql.= ", ref";
    +                    $sql.= ", ref_ext";
    +                    $sql.= ", price_min";
    +                    $sql.= ", price_min_ttc";
    +                    $sql.= ", label";
    +                    $sql.= ", fk_user_author";
    +                    $sql.= ", fk_product_type";
    +                    $sql.= ", price";
    +                    $sql.= ", price_ttc";
    +                    $sql.= ", price_base_type";
    +                    $sql.= ", tobuy";
    +                    $sql.= ", tosell";
    +                    $sql.= ", accountancy_code_buy";
    +                    $sql.= ", accountancy_code_sell";
    +                    $sql.= ", accountancy_code_sell_intra";
    +                    $sql.= ", accountancy_code_sell_export";
    +                    $sql.= ", canvas";
    +                    $sql.= ", finished";
    +                    $sql.= ", tobatch";
    +                    $sql.= ", fk_unit";
    +                    $sql.= ") VALUES (";
    +                    $sql.= "'".$this->db->idate($now)."'";
    +                    $sql.= ", ".$conf->entity;
    +                    $sql.= ", '".$this->db->escape($this->ref)."'";
    +                    $sql.= ", ".(! empty($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null");
    +                    $sql.= ", ".price2num($price_min_ht);
    +                    $sql.= ", ".price2num($price_min_ttc);
    +                    $sql.= ", ".(! empty($this->label)?"'".$this->db->escape($this->label)."'":"null");
    +                    $sql.= ", ".$user->id;
    +                    $sql.= ", ".$this->type;
    +                    $sql.= ", ".price2num($price_ht);
    +                    $sql.= ", ".price2num($price_ttc);
    +                    $sql.= ", '".$this->db->escape($this->price_base_type)."'";
    +                    $sql.= ", ".$this->status;
    +                    $sql.= ", ".$this->status_buy;
    +                    $sql.= ", '".$this->db->escape($this->accountancy_code_buy)."'";
    +                    $sql.= ", '".$this->db->escape($this->accountancy_code_sell)."'";
    +                    $sql.= ", '".$this->db->escape($this->accountancy_code_sell_intra)."'";
    +                    $sql.= ", '".$this->db->escape($this->accountancy_code_sell_export)."'";
    +                    $sql.= ", '".$this->db->escape($this->canvas)."'";
    +                    $sql.= ", ".((! isset($this->finished) || $this->finished < 0 || $this->finished == '') ? 'null' : (int) $this->finished);
    +                    $sql.= ", ".((empty($this->status_batch) || $this->status_batch < 0)? '0':$this->status_batch);
    +                    $sql.= ", ".(!$this->fk_unit ? 'NULL' : $this->fk_unit);
    +                    $sql.= ")";
    +
    +                    dol_syslog(get_class($this)."::Create", LOG_DEBUG);
    +                    $result = $this->db->query($sql);
    +                    if ($result ) {
    +                        $id = $this->db->last_insert_id(MAIN_DB_PREFIX."product");
    +
    +                        if ($id > 0) {
    +                            $this->id                = $id;
    +                            $this->price            = $price_ht;
    +                            $this->price_ttc        = $price_ttc;
    +                            $this->price_min        = $price_min_ht;
    +                            $this->price_min_ttc    = $price_min_ttc;
    +
    +                            $result = $this->_log_price($user);
    +                            if ($result > 0) {
    +                                if ($this->update($id, $user, true, 'add') <= 0) {
    +                                    $error++;
    +                                }
    +                            }
    +                            else
    +                            {
    +                                 $error++;
    +                                 $this->error=$this->db->lasterror();
    +                            }
    +                        }
    +                        else
    +                        {
    +                            $error++;
    +                            $this->error='ErrorFailedToGetInsertedId';
    +                        }
    +                    }
    +                    else
    +                    {
    +                        $error++;
    +                        $this->error=$this->db->lasterror();
    +                    }
    +                }
    +                else
    +                {
    +                    // Product already exists with this ref
    +                    $langs->load("products");
    +                    $error++;
    +                    $this->error = "ErrorProductAlreadyExists";
    +                }
    +            }
    +            else
    +            {
    +                $error++;
    +                $this->error=$this->db->lasterror();
    +            }
    +
    +            if (! $error && ! $notrigger) {
    +                // Call trigger
    +                $result=$this->call_trigger('PRODUCT_CREATE', $user);
    +                if ($result < 0) { $error++;
    +                }
    +                // End call triggers
    +            }
    +
    +            if (! $error) {
    +                $this->db->commit();
    +                return $this->id;
    +            }
    +            else
    +            {
    +                $this->db->rollback();
    +                return -$error;
    +            }
    +        }
    +        else
    +          {
    +            $this->db->rollback();
    +            dol_syslog(get_class($this)."::Create fails verify ".join(',', $this->errors), LOG_WARNING);
    +            return -3;
    +        }
    +    }
     
     
         /**
          *    Check properties of product are ok (like name, barcode, ...).
          *    All properties must be already loaded on object (this->barcode, this->barcode_type_code, ...).
          *
    -     *    @return     int		0 if OK, <0 if KO
    +     * @return int        0 if OK, <0 if KO
          */
         function verify()
         {
    @@ -639,57 +691,54 @@ class Product extends CommonObject
             $result = 0;
             $this->ref = trim($this->ref);
     
    -        if (! $this->ref)
    -        {
    +        if (! $this->ref) {
                 $this->errors[] = 'ErrorBadRef';
                 $result = -2;
             }
     
             $rescode = $this->check_barcode($this->barcode, $this->barcode_type_code);
    -        if ($rescode)
    -        {
    -        	if ($rescode == -1)
    -        	{
    -        		$this->errors[] = 'ErrorBadBarCodeSyntax';
    -        	}
    -        	elseif ($rescode == -2)
    -        	{
    -        		$this->errors[] = 'ErrorBarCodeRequired';
    -        	}
    -        	elseif ($rescode == -3)
    -        	{
    -        		// Note: Common usage is to have barcode unique. For variants, we should have a different barcode.
    -        		$this->errors[] = 'ErrorBarCodeAlreadyUsed';
    -        	}
    +        if ($rescode) {
    +            if ($rescode == -1) {
    +                $this->errors[] = 'ErrorBadBarCodeSyntax';
    +            }
    +            elseif ($rescode == -2) {
    +                $this->errors[] = 'ErrorBarCodeRequired';
    +            }
    +            elseif ($rescode == -3) {
    +                // Note: Common usage is to have barcode unique. For variants, we should have a different barcode.
    +                $this->errors[] = 'ErrorBarCodeAlreadyUsed';
    +            }
     
    -        	$result = -3;
    +            $result = -3;
             }
     
             return $result;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Check barcode
          *
    -     *	@param	string	$valuetotest	Value to test
    -     *  @param	string	$typefortest	Type of barcode (ISBN, EAN, ...)
    -     *  @return int						0 if OK
    -     * 									-1 ErrorBadBarCodeSyntax
    -     * 									-2 ErrorBarCodeRequired
    -     * 									-3 ErrorBarCodeAlreadyUsed
    +     * @param  string $valuetotest Value to test
    +     * @param  string $typefortest Type of barcode (ISBN, EAN, ...)
    +     * @return int                        0 if OK
    +     *                                     -1 ErrorBadBarCodeSyntax
    +     *                                     -2 ErrorBarCodeRequired
    +     *                                     -3 ErrorBarCodeAlreadyUsed
          */
         function check_barcode($valuetotest,$typefortest)
         {
    +        // phpcs:enable
             global $conf;
    -        if (! empty($conf->barcode->enabled) && ! empty($conf->global->BARCODE_PRODUCT_ADDON_NUM))
    -        {
    -        	$module=strtolower($conf->global->BARCODE_PRODUCT_ADDON_NUM);
    +        if (! empty($conf->barcode->enabled) && ! empty($conf->global->BARCODE_PRODUCT_ADDON_NUM)) {
    +            $module=strtolower($conf->global->BARCODE_PRODUCT_ADDON_NUM);
     
    -            $dirsociete=array_merge(array('/core/modules/barcode/'),$conf->modules_parts['barcode']);
    +            $dirsociete=array_merge(array('/core/modules/barcode/'), $conf->modules_parts['barcode']);
                 foreach ($dirsociete as $dirroot)
                 {
                     $res=dol_include_once($dirroot.$module.'.php');
    -                if ($res) break;
    +                if ($res) { break;
    +                }
                 }
     
                 $mod = new $module();
    @@ -699,95 +748,102 @@ class Product extends CommonObject
                 return $result;
             }
             else
    -		{
    +        {
                 return 0;
             }
         }
     
    -	/**
    -	 *	Update a record into database.
    -	 *  If batch flag is set to on, we create records into llx_product_batch
    -	 *
    -	 *	@param	int		$id         Id of product
    -	 *	@param  User	$user       Object user making update
    -	 *	@param	int		$notrigger	Disable triggers
    -	 *	@param	string	$action		Current action for hookmanager ('add' or 'update')
    -	 *	@return int         		1 if OK, -1 if ref already exists, -2 if other error
    -	 */
    -	function update($id, $user, $notrigger=false, $action='update')
    -	{
    -		global $langs, $conf, $hookmanager;
    +    /**
    +     *    Update a record into database.
    +     *  If batch flag is set to on, we create records into llx_product_batch
    +     *
    +     * @param  int    $id        Id of product
    +     * @param  User   $user      Object user making update
    +     * @param  int    $notrigger Disable triggers
    +     * @param  string $action    Current action for hookmanager ('add' or 'update')
    +     * @return int                 1 if OK, -1 if ref already exists, -2 if other error
    +     */
    +    function update($id, $user, $notrigger=false, $action='update')
    +    {
    +        global $langs, $conf, $hookmanager;
     
    -		$error=0;
    +        $error=0;
     
    -		// Check parameters
    -		if (! $this->label) $this->label = 'MISSING LABEL';
    +        // Check parameters
    +        if (! $this->label) { $this->label = 'MISSING LABEL';
    +        }
     
    -		// Clean parameters
    -		$this->ref = dol_string_nospecial(trim($this->ref));
    -		$this->label = trim($this->label);
    -		$this->description = trim($this->description);
    -		$this->note = (isset($this->note) ? trim($this->note) : null);
    -		$this->weight = price2num($this->weight);
    -		$this->weight_units = trim($this->weight_units);
    -		$this->length = price2num($this->length);
    -		$this->length_units = trim($this->length_units);
    -		$this->width = price2num($this->width);
    -		$this->width_units = trim($this->width_units);
    -		$this->height = price2num($this->height);
    -		$this->height_units = trim($this->height_units);
    -		// set unit not defined
    -		if ($this->length_units) $this->width_units = $this->length_units;    // Not used yet
    -		if ($this->length_units) $this->height_units = $this->length_units;    // Not used yet
    -		// Automated compute surface and volume if not filled
    -		if (empty($this->surface) && !empty($this->length) && !empty($this->width) && $this->length_units == $this->width_units)
    -		{
    -			$this->surface = $this->length * $this->width;
    -			$this->surface_units = measuring_units_squared($this->length_units);
    -		}
    -		if (empty($this->volume) && !empty($this->surface_units) && !empty($this->height) && $this->length_units == $this->height_units)
    -		{
    -			$this->volume =  $this->surface * $this->height;
    -			$this->volume_units = measuring_units_cubed($this->height_units);
    -		}
    +        // Clean parameters
    +        $this->ref = dol_string_nospecial(trim($this->ref));
    +        $this->label = trim($this->label);
    +        $this->description = trim($this->description);
    +        $this->note = (isset($this->note) ? trim($this->note) : null);
    +        $this->weight = price2num($this->weight);
    +        $this->weight_units = trim($this->weight_units);
    +        $this->length = price2num($this->length);
    +        $this->length_units = trim($this->length_units);
    +        $this->width = price2num($this->width);
    +        $this->width_units = trim($this->width_units);
    +        $this->height = price2num($this->height);
    +        $this->height_units = trim($this->height_units);
    +        // set unit not defined
    +        if ($this->length_units) { $this->width_units = $this->length_units;    // Not used yet
    +        }
    +        if ($this->length_units) { $this->height_units = $this->length_units;    // Not used yet
    +        }
    +        // Automated compute surface and volume if not filled
    +        if (empty($this->surface) && !empty($this->length) && !empty($this->width) && $this->length_units == $this->width_units) {
    +            $this->surface = $this->length * $this->width;
    +            $this->surface_units = measuring_units_squared($this->length_units);
    +        }
    +        if (empty($this->volume) && !empty($this->surface_units) && !empty($this->height) && $this->length_units == $this->height_units) {
    +            $this->volume =  $this->surface * $this->height;
    +            $this->volume_units = measuring_units_cubed($this->height_units);
    +        }
     
    -		$this->surface = price2num($this->surface);
    -		$this->surface_units = trim($this->surface_units);
    -		$this->volume = price2num($this->volume);
    -		$this->volume_units = trim($this->volume_units);
    -		if (empty($this->tva_tx))    			$this->tva_tx = 0;
    -		if (empty($this->tva_npr))    			$this->tva_npr = 0;
    -		if (empty($this->localtax1_tx))			$this->localtax1_tx = 0;
    -		if (empty($this->localtax2_tx))			$this->localtax2_tx = 0;
    -		if (empty($this->localtax1_type))		$this->localtax1_type = '0';
    -		if (empty($this->localtax2_type))		$this->localtax2_type = '0';
    -		if (empty($this->status))				$this->status = 0;
    -		if (empty($this->status_buy))			$this->status_buy = 0;
    +        $this->surface = price2num($this->surface);
    +        $this->surface_units = trim($this->surface_units);
    +        $this->volume = price2num($this->volume);
    +        $this->volume_units = trim($this->volume_units);
    +        if (empty($this->tva_tx)) {                $this->tva_tx = 0;
    +        }
    +        if (empty($this->tva_npr)) {                $this->tva_npr = 0;
    +        }
    +        if (empty($this->localtax1_tx)) {            $this->localtax1_tx = 0;
    +        }
    +        if (empty($this->localtax2_tx)) {            $this->localtax2_tx = 0;
    +        }
    +        if (empty($this->localtax1_type)) {        $this->localtax1_type = '0';
    +        }
    +        if (empty($this->localtax2_type)) {        $this->localtax2_type = '0';
    +        }
    +        if (empty($this->status)) {                $this->status = 0;
    +        }
    +        if (empty($this->status_buy)) {            $this->status_buy = 0;
    +        }
     
    -        if (empty($this->country_id))           $this->country_id = 0;
    +        if (empty($this->country_id)) {           $this->country_id = 0;
    +        }
     
             // Barcode value
             $this->barcode=trim($this->barcode);
     
    -		$this->accountancy_code_buy = trim($this->accountancy_code_buy);
    -		$this->accountancy_code_sell= trim($this->accountancy_code_sell);
    -		$this->accountancy_code_sell_intra= trim($this->accountancy_code_sell_intra);
    -		$this->accountancy_code_sell_export= trim($this->accountancy_code_sell_export);
    +        $this->accountancy_code_buy = trim($this->accountancy_code_buy);
    +        $this->accountancy_code_sell= trim($this->accountancy_code_sell);
    +        $this->accountancy_code_sell_intra= trim($this->accountancy_code_sell_intra);
    +        $this->accountancy_code_sell_export= trim($this->accountancy_code_sell_export);
     
     
             $this->db->begin();
     
             // Check name is required and codes are ok or unique.
             // If error, this->errors[] is filled
    -        if ($action != 'add')
    -        {
    -        	$result = $this->verify();	// We don't check when update called during a create because verify was already done
    +        if ($action != 'add') {
    +            $result = $this->verify();    // We don't check when update called during a create because verify was already done
             }
     
    -        if ($result >= 0)
    -        {
    -            if (empty($this->oldcopy))
    -            {
    +        if ($result >= 0) {
    +            if (empty($this->oldcopy)) {
                     $org=new self($this->db);
                     $org->fetch($this->id);
                     $this->oldcopy=$org;
    @@ -795,8 +851,7 @@ class Product extends CommonObject
     
                 // Test if batch management is activated on existing product
                 // If yes, we create missing entries into product_batch
    -            if ($this->hasbatch() && !$this->oldcopy->hasbatch())
    -            {
    +            if ($this->hasbatch() && !$this->oldcopy->hasbatch()) {
                     //$valueforundefinedlot = 'Undefined';  // In previous version, 39 and lower
                     $valueforundefinedlot = '000000';
     
    @@ -808,13 +863,11 @@ class Product extends CommonObject
                         $qty_batch = 0;
                         foreach ($ObjW->detail_batch as $detail)    // Each lines of detail in product_batch of the current $ObjW = product_stock
                         {
    -                        if ($detail->batch == $valueforundefinedlot || $detail->batch == 'Undefined')
    -                        {
    +                        if ($detail->batch == $valueforundefinedlot || $detail->batch == 'Undefined') {
                                 // We discard this line, we will create it later
                                 $sqlclean="DELETE FROM ".MAIN_DB_PREFIX."product_batch WHERE batch in('Undefined', '".$valueforundefinedlot."') AND fk_product_stock = ".$ObjW->id;
                                 $result = $this->db->query($sqlclean);
    -                            if (! $result)
    -                            {
    +                            if (! $result) {
                                     dol_print_error($this->db);
                                     exit;
                                 }
    @@ -825,15 +878,13 @@ class Product extends CommonObject
                         }
                         // Quantities in batch details are not same as stock quantity,
                         // so we add a default batch record to complete and get same qty in parent and child table
    -                    if ($ObjW->real <> $qty_batch)
    -                    {
    +                    if ($ObjW->real <> $qty_batch) {
                             $ObjBatch = new Productbatch($this->db);
                             $ObjBatch->batch = $valueforundefinedlot;
                             $ObjBatch->qty = ($ObjW->real - $qty_batch);
                             $ObjBatch->fk_product_stock = $ObjW->id;
     
    -                        if ($ObjBatch->create($user,1) < 0)
    -                        {
    +                        if ($ObjBatch->create($user, 1) < 0) {
                                 $error++;
                                 $this->errors=$ObjBatch->errors;
                             }
    @@ -841,702 +892,678 @@ class Product extends CommonObject
                     }
                 }
     
    -	        // For automatic creation
    -	        if ($this->barcode == -1) $this->barcode = $this->get_barcode($this,$this->barcode_type_code);
    +            // For automatic creation
    +            if ($this->barcode == -1) { $this->barcode = $this->get_barcode($this, $this->barcode_type_code);
    +            }
     
    -			$sql = "UPDATE ".MAIN_DB_PREFIX."product";
    -			$sql.= " SET label = '" . $this->db->escape($this->label) ."'";
    -			$sql.= ", ref = '" . $this->db->escape($this->ref) ."'";
    -			$sql.= ", ref_ext = ".(! empty($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null");
    -			$sql.= ", default_vat_code = ".($this->default_vat_code ? "'".$this->db->escape($this->default_vat_code)."'" : "null");
    -			$sql.= ", tva_tx = " . $this->tva_tx;
    -			$sql.= ", recuperableonly = " . $this->tva_npr;
    -			$sql.= ", localtax1_tx = " . $this->localtax1_tx;
    -			$sql.= ", localtax2_tx = " . $this->localtax2_tx;
    -			$sql.= ", localtax1_type = " . ($this->localtax1_type!=''?"'".$this->db->escape($this->localtax1_type)."'":"'0'");
    -			$sql.= ", localtax2_type = " . ($this->localtax2_type!=''?"'".$this->db->escape($this->localtax2_type)."'":"'0'");
    +            $sql = "UPDATE ".MAIN_DB_PREFIX."product";
    +            $sql.= " SET label = '" . $this->db->escape($this->label) ."'";
    +            $sql.= ", ref = '" . $this->db->escape($this->ref) ."'";
    +            $sql.= ", ref_ext = ".(! empty($this->ref_ext)?"'".$this->db->escape($this->ref_ext)."'":"null");
    +            $sql.= ", default_vat_code = ".($this->default_vat_code ? "'".$this->db->escape($this->default_vat_code)."'" : "null");
    +            $sql.= ", tva_tx = " . $this->tva_tx;
    +            $sql.= ", recuperableonly = " . $this->tva_npr;
    +            $sql.= ", localtax1_tx = " . $this->localtax1_tx;
    +            $sql.= ", localtax2_tx = " . $this->localtax2_tx;
    +            $sql.= ", localtax1_type = " . ($this->localtax1_type!=''?"'".$this->db->escape($this->localtax1_type)."'":"'0'");
    +            $sql.= ", localtax2_type = " . ($this->localtax2_type!=''?"'".$this->db->escape($this->localtax2_type)."'":"'0'");
     
    -			$sql.= ", barcode = ". (empty($this->barcode)?"null":"'".$this->db->escape($this->barcode)."'");
    -			$sql.= ", fk_barcode_type = ". (empty($this->barcode_type)?"null":$this->db->escape($this->barcode_type));
    +            $sql.= ", barcode = ". (empty($this->barcode)?"null":"'".$this->db->escape($this->barcode)."'");
    +            $sql.= ", fk_barcode_type = ". (empty($this->barcode_type)?"null":$this->db->escape($this->barcode_type));
     
    -			$sql.= ", tosell = " . $this->status;
    -			$sql.= ", tobuy = " . $this->status_buy;
    -			$sql.= ", tobatch = " . ((empty($this->status_batch) || $this->status_batch < 0) ? '0' : $this->status_batch);
    -			$sql.= ", finished = " . ((! isset($this->finished) || $this->finished < 0) ? "null" : (int) $this->finished);
    -			$sql.= ", weight = " . ($this->weight!='' ? "'".$this->db->escape($this->weight)."'" : 'null');
    -			$sql.= ", weight_units = " . ($this->weight_units!='' ? "'".$this->db->escape($this->weight_units)."'": 'null');
    -			$sql.= ", length = " . ($this->length!='' ? "'".$this->db->escape($this->length)."'" : 'null');
    -			$sql.= ", length_units = " . ($this->length_units!='' ? "'".$this->db->escape($this->length_units)."'" : 'null');
    -			$sql.= ", width= " . ($this->width!='' ? "'".$this->db->escape($this->width)."'" : 'null');
    -			$sql.= ", width_units = " . ($this->width_units!='' ? "'".$this->db->escape($this->width_units)."'" : 'null');
    -			$sql.= ", height = " . ($this->height!='' ? "'".$this->db->escape($this->height)."'" : 'null');
    -			$sql.= ", height_units = " . ($this->height_units!='' ? "'".$this->db->escape($this->height_units)."'" : 'null');
    -			$sql.= ", surface = " . ($this->surface!='' ? "'".$this->db->escape($this->surface)."'" : 'null');
    -			$sql.= ", surface_units = " . ($this->surface_units!='' ? "'".$this->db->escape($this->surface_units)."'" : 'null');
    -			$sql.= ", volume = " . ($this->volume!='' ? "'".$this->db->escape($this->volume)."'" : 'null');
    -			$sql.= ", volume_units = " . ($this->volume_units!='' ? "'".$this->db->escape($this->volume_units)."'" : 'null');
    -			$sql.= ", fk_default_warehouse = " . ($this->fk_default_warehouse > 0 ? $this->db->escape($this->fk_default_warehouse) : 'null');
    -			$sql.= ", seuil_stock_alerte = " . ((isset($this->seuil_stock_alerte) && $this->seuil_stock_alerte != '') ? "'".$this->db->escape($this->seuil_stock_alerte)."'" : "null");
    -			$sql.= ", description = '" . $this->db->escape($this->description) ."'";
    -			$sql.= ", url = " . ($this->url?"'".$this->db->escape($this->url)."'":'null');
    -			$sql.= ", customcode = '" .        $this->db->escape($this->customcode) ."'";
    -	        $sql.= ", fk_country = " . ($this->country_id > 0 ? $this->country_id : 'null');
    -	        $sql.= ", note = ".(isset($this->note) ? "'" .$this->db->escape($this->note)."'" : 'null');
    -			$sql.= ", duration = '" . $this->db->escape($this->duration_value . $this->duration_unit) ."'";
    -			$sql.= ", accountancy_code_buy = '" . $this->db->escape($this->accountancy_code_buy)."'";
    -			$sql.= ", accountancy_code_sell= '" . $this->db->escape($this->accountancy_code_sell)."'";
    -			$sql.= ", accountancy_code_sell_intra= '" . $this->db->escape($this->accountancy_code_sell_intra)."'";
    -			$sql.= ", accountancy_code_sell_export= '" . $this->db->escape($this->accountancy_code_sell_export)."'";
    -			$sql.= ", desiredstock = " . ((isset($this->desiredstock) && $this->desiredstock != '') ? $this->desiredstock : "null");
    -			$sql.= ", cost_price = " . ($this->cost_price != '' ? $this->db->escape($this->cost_price) : 'null');
    -	        $sql.= ", fk_unit= " . (!$this->fk_unit ? 'NULL' : $this->fk_unit);
    -	        $sql.= ", price_autogen = " . (!$this->price_autogen ? 0 : 1);
    -			$sql.= ", fk_price_expression = ".($this->fk_price_expression != 0 ? $this->fk_price_expression : 'NULL');
    -			$sql.= ", fk_user_modif = ".($user->id > 0 ? $user->id : 'NULL');
    -			// stock field is not here because it is a denormalized value from product_stock.
    -			$sql.= " WHERE rowid = " . $id;
    +            $sql.= ", tosell = " . $this->status;
    +            $sql.= ", tobuy = " . $this->status_buy;
    +            $sql.= ", tobatch = " . ((empty($this->status_batch) || $this->status_batch < 0) ? '0' : $this->status_batch);
    +            $sql.= ", finished = " . ((! isset($this->finished) || $this->finished < 0) ? "null" : (int) $this->finished);
    +            $sql.= ", weight = " . ($this->weight!='' ? "'".$this->db->escape($this->weight)."'" : 'null');
    +            $sql.= ", weight_units = " . ($this->weight_units!='' ? "'".$this->db->escape($this->weight_units)."'": 'null');
    +            $sql.= ", length = " . ($this->length!='' ? "'".$this->db->escape($this->length)."'" : 'null');
    +            $sql.= ", length_units = " . ($this->length_units!='' ? "'".$this->db->escape($this->length_units)."'" : 'null');
    +            $sql.= ", width= " . ($this->width!='' ? "'".$this->db->escape($this->width)."'" : 'null');
    +            $sql.= ", width_units = " . ($this->width_units!='' ? "'".$this->db->escape($this->width_units)."'" : 'null');
    +            $sql.= ", height = " . ($this->height!='' ? "'".$this->db->escape($this->height)."'" : 'null');
    +            $sql.= ", height_units = " . ($this->height_units!='' ? "'".$this->db->escape($this->height_units)."'" : 'null');
    +            $sql.= ", surface = " . ($this->surface!='' ? "'".$this->db->escape($this->surface)."'" : 'null');
    +            $sql.= ", surface_units = " . ($this->surface_units!='' ? "'".$this->db->escape($this->surface_units)."'" : 'null');
    +            $sql.= ", volume = " . ($this->volume!='' ? "'".$this->db->escape($this->volume)."'" : 'null');
    +            $sql.= ", volume_units = " . ($this->volume_units!='' ? "'".$this->db->escape($this->volume_units)."'" : 'null');
    +            $sql.= ", fk_default_warehouse = " . ($this->fk_default_warehouse > 0 ? $this->db->escape($this->fk_default_warehouse) : 'null');
    +            $sql.= ", seuil_stock_alerte = " . ((isset($this->seuil_stock_alerte) && $this->seuil_stock_alerte != '') ? "'".$this->db->escape($this->seuil_stock_alerte)."'" : "null");
    +            $sql.= ", description = '" . $this->db->escape($this->description) ."'";
    +            $sql.= ", url = " . ($this->url?"'".$this->db->escape($this->url)."'":'null');
    +            $sql.= ", customcode = '" .        $this->db->escape($this->customcode) ."'";
    +            $sql.= ", fk_country = " . ($this->country_id > 0 ? $this->country_id : 'null');
    +            $sql.= ", note = ".(isset($this->note) ? "'" .$this->db->escape($this->note)."'" : 'null');
    +            $sql.= ", duration = '" . $this->db->escape($this->duration_value . $this->duration_unit) ."'";
    +            $sql.= ", accountancy_code_buy = '" . $this->db->escape($this->accountancy_code_buy)."'";
    +            $sql.= ", accountancy_code_sell= '" . $this->db->escape($this->accountancy_code_sell)."'";
    +            $sql.= ", accountancy_code_sell_intra= '" . $this->db->escape($this->accountancy_code_sell_intra)."'";
    +            $sql.= ", accountancy_code_sell_export= '" . $this->db->escape($this->accountancy_code_sell_export)."'";
    +            $sql.= ", desiredstock = " . ((isset($this->desiredstock) && $this->desiredstock != '') ? $this->desiredstock : "null");
    +            $sql.= ", cost_price = " . ($this->cost_price != '' ? $this->db->escape($this->cost_price) : 'null');
    +            $sql.= ", fk_unit= " . (!$this->fk_unit ? 'NULL' : $this->fk_unit);
    +            $sql.= ", price_autogen = " . (!$this->price_autogen ? 0 : 1);
    +            $sql.= ", fk_price_expression = ".($this->fk_price_expression != 0 ? $this->fk_price_expression : 'NULL');
    +            $sql.= ", fk_user_modif = ".($user->id > 0 ? $user->id : 'NULL');
    +            // stock field is not here because it is a denormalized value from product_stock.
    +            $sql.= " WHERE rowid = " . $id;
     
    -			dol_syslog(get_class($this)."::update", LOG_DEBUG);
    +            dol_syslog(get_class($this)."::update", LOG_DEBUG);
     
    -			$resql=$this->db->query($sql);
    -			if ($resql)
    -			{
    -				$this->id = $id;
    +            $resql=$this->db->query($sql);
    +            if ($resql) {
    +                $this->id = $id;
     
    -				// Multilangs
    -				if (! empty($conf->global->MAIN_MULTILANGS))
    -				{
    -					if ( $this->setMultiLangs($user) < 0)
    -					{
    -						$this->error=$langs->trans("Error")." : ".$this->db->error()." - ".$sql;
    -						return -2;
    -					}
    -				}
    +                // Multilangs
    +                if (! empty($conf->global->MAIN_MULTILANGS)) {
    +                    if ($this->setMultiLangs($user) < 0) {
    +                           $this->error=$langs->trans("Error")." : ".$this->db->error()." - ".$sql;
    +                           return -2;
    +                    }
    +                }
     
    -				$action='update';
    +                $action='update';
     
    -				// Actions on extra fields
    -				if (! $error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))
    -				{
    -					$result=$this->insertExtraFields();
    -					if ($result < 0)
    -					{
    -						$error++;
    -					}
    -				}
    +                // Actions on extra fields
    +                if (! $error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) {
    +                    $result=$this->insertExtraFields();
    +                    if ($result < 0) {
    +                        $error++;
    +                    }
    +                }
     
    -				if (! $error && ! $notrigger)
    -				{
    -                    // Call trigger
    -                    $result=$this->call_trigger('PRODUCT_MODIFY',$user);
    -                    if ($result < 0) { $error++; }
    +                if (! $error && ! $notrigger) {
    +                                // Call trigger
    +                                $result=$this->call_trigger('PRODUCT_MODIFY', $user);
    +                    if ($result < 0) { $error++;
    +                    }
                         // End call triggers
    -				}
    +                }
     
    -				if (! $error && (is_object($this->oldcopy) && $this->oldcopy->ref !== $this->ref))
    -				{
    -					// We remove directory
    -					if ($conf->product->dir_output)
    -					{
    -						$olddir = $conf->product->dir_output . "/" . dol_sanitizeFileName($this->oldcopy->ref);
    -						$newdir = $conf->product->dir_output . "/" . dol_sanitizeFileName($this->ref);
    -						if (file_exists($olddir))
    -						{
    -							//include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
    -							//$res = dol_move($olddir, $newdir);
    -							// do not use dol_move with directory
    -							$res = @rename($olddir, $newdir);
    -							if (! $res)
    -							{
    -							    $langs->load("errors");
    -								$this->error=$langs->trans('ErrorFailToRenameDir',$olddir,$newdir);
    -								$error++;
    -							}
    -						}
    -					}
    -				}
    +                if (! $error && (is_object($this->oldcopy) && $this->oldcopy->ref !== $this->ref)) {
    +                    // We remove directory
    +                    if ($conf->product->dir_output) {
    +                        $olddir = $conf->product->dir_output . "/" . dol_sanitizeFileName($this->oldcopy->ref);
    +                        $newdir = $conf->product->dir_output . "/" . dol_sanitizeFileName($this->ref);
    +                        if (file_exists($olddir)) {
    +                                 //include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
    +                                 //$res = dol_move($olddir, $newdir);
    +                                 // do not use dol_move with directory
    +                                 $res = @rename($olddir, $newdir);
    +                            if (! $res) {
    +                                $langs->load("errors");
    +                                $this->error=$langs->trans('ErrorFailToRenameDir', $olddir, $newdir);
    +                                $error++;
    +                            }
    +                        }
    +                    }
    +                }
     
    -				if (! $error)
    -				{
    -					if ($conf->variants->enabled) {
    +                if (! $error) {
    +                    if ($conf->variants->enabled) {
     
    -						require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination.class.php';
    +                        include_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination.class.php';
     
    -						$comb = new ProductCombination($this->db);
    +                        $comb = new ProductCombination($this->db);
     
    -						foreach ($comb->fetchAllByFkProductParent($this->id) as $currcomb) {
    -							$currcomb->updateProperties($this);
    -						}
    -					}
    +                        foreach ($comb->fetchAllByFkProductParent($this->id) as $currcomb) {
    +                                 $currcomb->updateProperties($this);
    +                        }
    +                    }
     
    -					$this->db->commit();
    -					return 1;
    -				}
    -				else
    -				{
    -					$this->db->rollback();
    -					return -$error;
    -				}
    -			}
    -			else
    -			{
    -				if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
    -				{
    -					$langs->load("errors");
    -					if (empty($conf->barcode->enabled) || empty($this->barcode)) $this->error=$langs->trans("Error")." : ".$langs->trans("ErrorProductAlreadyExists",$this->ref);
    -					else $this->error=$langs->trans("Error")." : ".$langs->trans("ErrorProductBarCodeAlreadyExists",$this->barcode);
    -					$this->errors[]=$this->error;
    -					$this->db->rollback();
    -					return -1;
    -				}
    -				else
    -				{
    -					$this->error=$langs->trans("Error")." : ".$this->db->error()." - ".$sql;
    -					$this->errors[]=$this->error;
    -					$this->db->rollback();
    -					return -2;
    -				}
    -			}
    +                    $this->db->commit();
    +                    return 1;
    +                }
    +                else
    +                {
    +                    $this->db->rollback();
    +                    return -$error;
    +                }
    +            }
    +            else
    +            {
    +                if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') {
    +                    $langs->load("errors");
    +                    if (empty($conf->barcode->enabled) || empty($this->barcode)) { $this->error=$langs->trans("Error")." : ".$langs->trans("ErrorProductAlreadyExists", $this->ref);
    +                    } else { $this->error=$langs->trans("Error")." : ".$langs->trans("ErrorProductBarCodeAlreadyExists", $this->barcode);
    +                    }
    +                    $this->errors[]=$this->error;
    +                    $this->db->rollback();
    +                    return -1;
    +                }
    +                else
    +                {
    +                    $this->error=$langs->trans("Error")." : ".$this->db->error()." - ".$sql;
    +                    $this->errors[]=$this->error;
    +                    $this->db->rollback();
    +                    return -2;
    +                }
    +            }
             }
             else
    -       {
    +          {
                 $this->db->rollback();
    -            dol_syslog(get_class($this)."::Update fails verify ".join(',',$this->errors), LOG_WARNING);
    +            dol_syslog(get_class($this)."::Update fails verify ".join(',', $this->errors), LOG_WARNING);
                 return -3;
             }
    -	}
    +    }
     
    -	/**
    -	 *  Delete a product from database (if not used)
    -	 *
    -	 *	@param      User	$user       Product id (usage of this is deprecated, delete should be called without parameters on a fetched object)
    -	 *  @param      int     $notrigger  Do not execute trigger
    -	 * 	@return		int					< 0 if KO, 0 = Not possible, > 0 if OK
    -	 */
    -	function delete(User $user, $notrigger=0)
    -	{
    -		// Deprecation warning
    -		if ($id > 0) {
    -			dol_syslog(__METHOD__ . " with parameter is deprecated", LOG_WARNING);
    -		}
    +    /**
    +     *  Delete a product from database (if not used)
    +     *
    +     * @param  User $user      Product id (usage of this is deprecated, delete should be called without parameters on a fetched object)
    +     * @param  int  $notrigger Do not execute trigger
    +     * @return int                    < 0 if KO, 0 = Not possible, > 0 if OK
    +     */
    +    function delete(User $user, $notrigger=0)
    +    {
    +        // Deprecation warning
    +        if ($id > 0) {
    +            dol_syslog(__METHOD__ . " with parameter is deprecated", LOG_WARNING);
    +        }
     
    -		global $conf, $langs;
    -		require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
    +        global $conf, $langs;
    +        include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
     
    -		$error=0;
    +        $error=0;
     
    -		// Clean parameters
    -		if (empty($id)) $id=$this->id;
    -		else $this->fetch($id);
    +        // Clean parameters
    +        if (empty($id)) { $id=$this->id;
    +        } else { $this->fetch($id);
    +        }
     
    -		// Check parameters
    -		if (empty($id))
    -		{
    -			$this->error = "Object must be fetched before calling delete";
    -			return -1;
    -		}
    -		if (($this->type == Product::TYPE_PRODUCT && empty($user->rights->produit->supprimer)) || ($this->type == Product::TYPE_SERVICE && empty($user->rights->service->supprimer)))
    -		{
    -			$this->error = "ErrorForbidden";
    -			return 0;
    -		}
    +        // Check parameters
    +        if (empty($id)) {
    +            $this->error = "Object must be fetched before calling delete";
    +            return -1;
    +        }
    +        if (($this->type == Product::TYPE_PRODUCT && empty($user->rights->produit->supprimer)) || ($this->type == Product::TYPE_SERVICE && empty($user->rights->service->supprimer))) {
    +            $this->error = "ErrorForbidden";
    +            return 0;
    +        }
     
    -		$objectisused = $this->isObjectUsed($id);
    -		if (empty($objectisused))
    -		{
    -			$this->db->begin();
    +        $objectisused = $this->isObjectUsed($id);
    +        if (empty($objectisused)) {
    +            $this->db->begin();
     
    -			if (! $error && empty($notrigger))
    -			{
    +            if (! $error && empty($notrigger)) {
                     // Call trigger
    -                $result=$this->call_trigger('PRODUCT_DELETE',$user);
    -                if ($result < 0) { $error++; }
    +                $result=$this->call_trigger('PRODUCT_DELETE', $user);
    +                if ($result < 0) { $error++;
    +                }
                     // End call triggers
    -			}
    +            }
     
    -			// Delete from product_batch on product delete
    -			if (! $error)
    -			{
    -				$sql = "DELETE FROM ".MAIN_DB_PREFIX.'product_batch';
    -				$sql.= " WHERE fk_product_stock IN (";
    -				$sql.= "SELECT rowid FROM ".MAIN_DB_PREFIX.'product_stock';
    -				$sql.= " WHERE fk_product = ".$id.")";
    +            // Delete from product_batch on product delete
    +            if (! $error) {
    +                $sql = "DELETE FROM ".MAIN_DB_PREFIX.'product_batch';
    +                $sql.= " WHERE fk_product_stock IN (";
    +                $sql.= "SELECT rowid FROM ".MAIN_DB_PREFIX.'product_stock';
    +                $sql.= " WHERE fk_product = ".$id.")";
     
    -				$result = $this->db->query($sql);
    -				if (! $result)
    -				{
    -					$error++;
    -					$this->errors[] = $this->db->lasterror();
    -				}
    -			}
    +                $result = $this->db->query($sql);
    +                if (! $result) {
    +                    $error++;
    +                    $this->errors[] = $this->db->lasterror();
    +                }
    +            }
     
    -   			// Delete all child tables
    -			if (! $error)
    -			{
    -				$elements = array('product_fournisseur_price','product_price','product_lang','categorie_product','product_stock','product_customer_price','product_lot');  // product_batch is done before
    -    			foreach($elements as $table)
    -    			{
    -    				if (! $error)
    -    				{
    -    					$sql = "DELETE FROM ".MAIN_DB_PREFIX.$table;
    -    					$sql.= " WHERE fk_product = ".$id;
    -
    -    					$result = $this->db->query($sql);
    -    					if (! $result)
    -    					{
    -    						$error++;
    -    						$this->errors[] = $this->db->lasterror();
    -    					}
    -    				}
    -    			}
    -			}
    -
    -			if (!$error) {
    -
    -				require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination.class.php';
    -				require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination2ValuePair.class.php';
    -
    -				//If it is a parent product, then we remove the association with child products
    -				$prodcomb = new ProductCombination($this->db);
    -
    -				if ($prodcomb->deleteByFkProductParent($user, $id) < 0) {
    -					$error++;
    -					$this->errors[] = 'Error deleting combinations';
    -				}
    -
    -				//We also check if it is a child product
    -				if (!$error && ($prodcomb->fetchByFkProductChild($id) > 0) && ($prodcomb->delete($user) < 0)) {
    -					$error++;
    -					$this->errors[] = 'Error deleting child combination';
    -				}
    -			}
    -
    -			// Delete from product_association
    -			if (!$error){
    -				$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_association";
    -				$sql.= " WHERE fk_product_pere = ".$id." OR fk_product_fils = ".$id;
    -
    -				$result = $this->db->query($sql);
    -				if (! $result)
    -				{
    -					$error++;
    -					$this->errors[] = $this->db->lasterror();
    -				}
    -			}
    -
    -			// Delete product
    -			if (! $error)
    -			{
    -				$sqlz = "DELETE FROM ".MAIN_DB_PREFIX."product";
    -				$sqlz.= " WHERE rowid = ".$id;
    -
    -				$resultz = $this->db->query($sqlz);
    -				if ( ! $resultz )
    -				{
    -					$error++;
    -					$this->errors[] = $this->db->lasterror();
    -				}
    -			}
    -
    -			if (! $error)
    -			{
    -				// We remove directory
    -				$ref = dol_sanitizeFileName($this->ref);
    -				if ($conf->product->dir_output)
    -				{
    -					$dir = $conf->product->dir_output . "/" . $ref;
    -					if (file_exists($dir))
    -					{
    -						$res=@dol_delete_dir_recursive($dir);
    -						if (! $res)
    -						{
    -							$this->errors[] = 'ErrorFailToDeleteDir';
    -							$error++;
    -						}
    -					}
    -				}
    -			}
    -
    -			// Remove extrafields
    -			if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) // For avoid conflicts if trigger used
    -			{
    -				$result=$this->deleteExtraFields();
    -				if ($result < 0)
    -				{
    -					$error++;
    -					dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR);
    -				}
    -			}
    -
    -			if (! $error)
    -			{
    -				$this->db->commit();
    -				return 1;
    -			}
    -			else
    -			{
    -				foreach($this->errors as $errmsg)
    -				{
    -					dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
    -					$this->error.=($this->error?', '.$errmsg:$errmsg);
    -				}
    -				$this->db->rollback();
    -				return -$error;
    -			}
    -		}
    -		else
    -		{
    -			$this->error = "ErrorRecordIsUsedCantDelete";
    -			return 0;
    -		}
    -	}
    -
    -	/**
    -	 *	Update or add a translation for a product
    -	 *
    -	 *	@param     User	   $user                   Object user making update
    -	 *	@return	   int		<0 if KO, >0 if OK
    -	 */
    -	function setMultiLangs($user)
    -	{
    -		global $conf, $langs;
    -
    -		$langs_available = $langs->get_available_languages(DOL_DOCUMENT_ROOT, 0, 2);
    -		$current_lang = $langs->getDefaultLang();
    -
    -		foreach ($langs_available as $key => $value)
    -		{
    -			if ($key == $current_lang)
    -			{
    -				$sql = "SELECT rowid";
    -				$sql.= " FROM ".MAIN_DB_PREFIX."product_lang";
    -				$sql.= " WHERE fk_product=".$this->id;
    -				$sql.= " AND lang='".$key."'";
    -
    -				$result = $this->db->query($sql);
    -
    -				if ($this->db->num_rows($result)) // if there is already a description line for this language
    -				{
    -					$sql2 = "UPDATE ".MAIN_DB_PREFIX."product_lang";
    -					$sql2.= " SET ";
    -					$sql2.= " label='".$this->db->escape($this->label)."',";
    -					$sql2.= " description='".$this->db->escape($this->description)."'";
    -					if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) $sql2.= ", note='".$this->db->escape($this->other)."'";
    -					$sql2.= " WHERE fk_product=".$this->id." AND lang='".$this->db->escape($key)."'";
    -				}
    -				else
    -				{
    -					$sql2 = "INSERT INTO ".MAIN_DB_PREFIX."product_lang (fk_product, lang, label, description";
    -					if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) $sql2.=", note";
    -					$sql2.= ")";
    -					$sql2.= " VALUES(".$this->id.",'".$this->db->escape($key)."','". $this->db->escape($this->label)."',";
    -					$sql2.= " '".$this->db->escape($this->description)."'";
    -					if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) $sql2.= ", '".$this->db->escape($this->other)."'";
    -					$sql2.= ")";
    -				}
    -				dol_syslog(get_class($this).'::setMultiLangs key = current_lang = '.$key);
    -				if (! $this->db->query($sql2))
    -				{
    -					$this->error=$this->db->lasterror();
    -					return -1;
    -				}
    -			}
    -			else if (isset($this->multilangs[$key]))
    -			{
    -				$sql = "SELECT rowid";
    -				$sql.= " FROM ".MAIN_DB_PREFIX."product_lang";
    -				$sql.= " WHERE fk_product=".$this->id;
    -				$sql.= " AND lang='".$key."'";
    -
    -				$result = $this->db->query($sql);
    -
    -				if ($this->db->num_rows($result)) // if there is already a description line for this language
    -				{
    -					$sql2 = "UPDATE ".MAIN_DB_PREFIX."product_lang";
    -					$sql2.= " SET ";
    -					$sql2.= " label='".$this->db->escape($this->multilangs["$key"]["label"])."',";
    -					$sql2.= " description='".$this->db->escape($this->multilangs["$key"]["description"])."'";
    -					if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) $sql2.= ", note='".$this->db->escape($this->multilangs["$key"]["other"])."'";
    -					$sql2.= " WHERE fk_product=".$this->id." AND lang='".$this->db->escape($key)."'";
    -				}
    -				else
    -				{
    -					$sql2 = "INSERT INTO ".MAIN_DB_PREFIX."product_lang (fk_product, lang, label, description";
    -					if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) $sql2.=", note";
    -					$sql2.= ")";
    -					$sql2.= " VALUES(".$this->id.",'".$this->db->escape($key)."','". $this->db->escape($this->multilangs["$key"]["label"])."',";
    -					$sql2.= " '".$this->db->escape($this->multilangs["$key"]["description"])."'";
    -					if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) $sql2.= ", '".$this->db->escape($this->multilangs["$key"]["other"])."'";
    -					$sql2.= ")";
    -				}
    -
    -				// We do not save if main fields are empty
    -				if ($this->multilangs["$key"]["label"] || $this->multilangs["$key"]["description"])
    -				{
    -    				if (! $this->db->query($sql2))
    -    				{
    -    					$this->error=$this->db->lasterror();
    -    					return -1;
    -    				}
    -				}
    -			}
    -			else
    -			{
    -				// language is not current language and we didn't provide a multilang description for this language
    -			}
    -		}
    -
    -		// Call trigger
    -		$result = $this->call_trigger('PRODUCT_SET_MULTILANGS',$user);
    -		if ($result < 0) {
    -			$this->error = $this->db->lasterror();
    -			return -1;
    -		}
    -		// End call triggers
    -
    -		return 1;
    -	}
    -
    -	/**
    -	 *	Delete a language for this product
    -	 *
    -	 *  @param		string	$langtodelete		Language code to delete
    -	 *	@param		User	$user       Object user making delete
    -	 *
    -	 *	@return		int							<0 if KO, >0 if OK
    -	 */
    -	function delMultiLangs($langtodelete, $user)
    -	{
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_lang";
    -		$sql.= " WHERE fk_product=".$this->id." AND lang='".$this->db->escape($langtodelete)."'";
    -
    -		dol_syslog(get_class($this).'::delMultiLangs', LOG_DEBUG);
    -		$result = $this->db->query($sql);
    -		if ($result)
    -		{
    -			// Call trigger
    -			$result = $this->call_trigger('PRODUCT_DEL_MULTILANGS',$user);
    -			if ($result < 0) {
    -				$this->error = $this->db->lasterror();
    -				dol_syslog(get_class($this).'::delMultiLangs error='.$this->error, LOG_ERR);
    -				return -1;
    -			}
    -			// End call triggers
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->lasterror();
    -			dol_syslog(get_class($this).'::delMultiLangs error='.$this->error, LOG_ERR);
    -			return -1;
    -		}
    -	}
    -
    -	/*
    -	 * Sets an accountancy code for a product.
    -	 * Also calls PRODUCT_MODIFY trigger when modified
    -	 *
    -	 * @param string $type It can be 'buy', 'sell', 'sell_intra' or 'sell_export'
    -	 * @param string $value Accountancy code
    -	 * @return int <0 KO >0 OK
    -	 */
    -	public function setAccountancyCode($type, $value)
    -	{
    -		global $user, $langs, $conf;
    -
    -		$this->db->begin();
    -
    -		if ($type == 'buy') {
    -			$field = 'accountancy_code_buy';
    -		} elseif ($type == 'sell') {
    -			$field = 'accountancy_code_sell';
    -		} elseif ($type == 'sell_intra') {
    -			$field = 'accountancy_code_sell_intra';
    -		} elseif ($type == 'sell_export') {
    -			$field = 'accountancy_code_sell_export';
    -		} else {
    -			return -1;
    -		}
    -
    -		$sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET ";
    -		$sql.= "$field = '".$this->db->escape($value)."'";
    -		$sql.= " WHERE rowid = ".$this->id;
    -
    -		dol_syslog(get_class($this)."::".__FUNCTION__." sql=".$sql, LOG_DEBUG);
    -		$resql = $this->db->query($sql);
    -
    -		if ($resql)
    -		{
    -			// Call triggers
    -			include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -			$interface=new Interfaces($this->db);
    -			$result=$interface->run_triggers('PRODUCT_MODIFY',$this,$user,$langs,$conf);
    -			if ($result < 0)
    -			{
    -				$this->errors=$interface->errors;
    -				$this->db->rollback();
    -				return -1;
    -			}
    -			// End call triggers
    -
    -			$this->$field = $value;
    -
    -			$this->db->commit();
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->lasterror();
    -			$this->db->rollback();
    -			return -1;
    -		}
    -	}
    -
    -	/**
    -	 *	Load array this->multilangs
    -	 *
    -	 *	@return		int		<0 if KO, >0 if OK
    -	 */
    -	function getMultiLangs()
    -	{
    -		global $langs;
    -
    -		$current_lang = $langs->getDefaultLang();
    -
    -		$sql = "SELECT lang, label, description, note as other";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_lang";
    -		$sql.= " WHERE fk_product=".$this->id;
    -
    -		$result = $this->db->query($sql);
    -		if ($result)
    -		{
    -			while ($obj = $this->db->fetch_object($result))
    -			{
    -				//print 'lang='.$obj->lang.' current='.$current_lang.'<br>';
    -				if ($obj->lang == $current_lang)  // si on a les traduct. dans la langue courante on les charge en infos principales.
    -				{
    -					$this->label		= $obj->label;
    -					$this->description	= $obj->description;
    -					$this->other	    = $obj->other;
    -				}
    -				$this->multilangs["$obj->lang"]["label"]		= $obj->label;
    -				$this->multilangs["$obj->lang"]["description"]	= $obj->description;
    -				$this->multilangs["$obj->lang"]["other"]		= $obj->other;
    -			}
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error="Error: ".$this->db->lasterror()." - ".$sql;
    -			return -1;
    -		}
    -	}
    -
    -
    -
    -	/**
    -	 *  Insert a track that we changed a customer price
    -	 *
    -	 *	@param  	User	$user       User making change
    -	 *	@param		int		$level		price level to change
    -	 *	@return		int					<0 if KO, >0 if OK
    -	 */
    -	function _log_price($user,$level=0)
    -	{
    -		global $conf;
    -
    -		$now=dol_now();
    -
    -		// Clean parameters
    -		if (empty($this->price_by_qty)) $this->price_by_qty=0;
    -
    -		// Add new price
    -		$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_price(price_level,date_price, fk_product, fk_user_author, price, price_ttc, price_base_type,tosell, tva_tx, default_vat_code, recuperableonly,";
    -		$sql.= " localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, price_min,price_min_ttc,price_by_qty,entity,fk_price_expression) ";
    -		$sql.= " VALUES(".($level?$level:1).", '".$this->db->idate($now)."',".$this->id.",".$user->id.",".$this->price.",".$this->price_ttc.",'".$this->db->escape($this->price_base_type)."',".$this->status.",".$this->tva_tx.", ".($this->default_vat_code?("'".$this->db->escape($this->default_vat_code)."'"):"null").",".$this->tva_npr.",";
    -		$sql.= " ".$this->localtax1_tx.", ".$this->localtax2_tx.", '".$this->db->escape($this->localtax1_type)."', '".$this->db->escape($this->localtax2_type)."', ".$this->price_min.",".$this->price_min_ttc.",".$this->price_by_qty.",".$conf->entity.",".($this->fk_price_expression > 0?$this->fk_price_expression:'null');
    -		$sql.= ")";
    -
    -		dol_syslog(get_class($this)."::_log_price", LOG_DEBUG);
    -		$resql=$this->db->query($sql);
    -		if(! $resql)
    -		{
    -			$this->error=$this->db->lasterror();
    -			dol_print_error($this->db);
    -			return -1;
    -		}
    -		else
    -		{
    -			return 1;
    -		}
    -	}
    -
    -
    -	/**
    -	 *  Delete a price line
    -	 *
    -	 * 	@param		User	$user	Object user
    -	 * 	@param		int		$rowid	Line id to delete
    -	 * 	@return		int				<0 if KO, >0 if OK
    -	 */
    -	function log_price_delete($user, $rowid)
    -	{
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_price_by_qty";
    -		$sql.= " WHERE fk_product_price=".$rowid;
    -		$resql=$this->db->query($sql);
    -
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_price";
    -		$sql.= " WHERE rowid=".$rowid;
    -		$resql=$this->db->query($sql);
    -		if ($resql)
    -		{
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->lasterror();
    -			return -1;
    -		}
    -	}
    -
    -
    -	/**
    -	 *	Read price used by a provider.
    -	 *	We enter as input couple prodfournprice/qty or triplet qty/product_id/fourn_ref.
    -	 *  This also set some properties on product like ->buyprice, ->fourn_pu, ...
    -	 *
    -	 *  @param     	int		$prodfournprice     Id du tarif = rowid table product_fournisseur_price
    -	 *  @param     	double	$qty                Quantity asked or -1 to get first entry found
    -	 *	@param		int		$product_id			Filter on a particular product id
    -	 * 	@param		string	$fourn_ref			Filter on a supplier price ref. 'none' to exclude ref in search.
    -	 *  @param      int     $fk_soc             If of supplier
    -	 *  @return    	int 						<-1 if KO, -1 if qty not enough, 0 if OK but nothing found, id_product if OK and found. May also initialize some properties like (->ref_supplier, buyprice, fourn_pu, vatrate_supplier...)
    -	 */
    -	function get_buyprice($prodfournprice, $qty, $product_id=0, $fourn_ref='', $fk_soc=0)
    -	{
    -		global $conf;
    -		$result = 0;
    -
    -		// We do a first seach with a select by searching with couple prodfournprice and qty only (later we will search on triplet qty/product_id/fourn_ref)
    -		$sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity, pfp.remise_percent,";
    -		$sql.= " pfp.fk_product, pfp.ref_fourn, pfp.fk_soc, pfp.tva_tx, pfp.fk_supplier_price_expression";
    -		$sql.= " ,pfp.default_vat_code";
    -        $sql.= " ,pfp.multicurrency_price, pfp.multicurrency_unitprice, pfp.multicurrency_tx, pfp.fk_multicurrency, pfp.multicurrency_code";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
    -		$sql.= " WHERE pfp.rowid = ".$prodfournprice;
    -		if ($qty > 0) $sql.= " AND pfp.quantity <= ".$qty;
    -		$sql.= " ORDER BY pfp.quantity DESC";
    -
    -		dol_syslog(get_class($this)."::get_buyprice first search by prodfournprice/qty", LOG_DEBUG);
    -		$resql = $this->db->query($sql);
    -		if ($resql)
    -		{
    -			$obj = $this->db->fetch_object($resql);
    -			if ($obj && $obj->quantity > 0)		// If we found a supplier prices from the id of supplier price
    -			{
    -                if (!empty($conf->dynamicprices->enabled) && !empty($obj->fk_supplier_price_expression))
    +            // Delete all child tables
    +            if (! $error) {
    +                $elements = array('product_fournisseur_price','product_price','product_lang','categorie_product','product_stock','product_customer_price','product_lot');  // product_batch is done before
    +                foreach($elements as $table)
                     {
    -					require_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php';
    +                    if (! $error) {
    +                        $sql = "DELETE FROM ".MAIN_DB_PREFIX.$table;
    +                        $sql.= " WHERE fk_product = ".$id;
    +
    +                        $result = $this->db->query($sql);
    +                        if (! $result) {
    +                            $error++;
    +                            $this->errors[] = $this->db->lasterror();
    +                        }
    +                    }
    +                }
    +            }
    +
    +            if (!$error) {
    +
    +                include_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination.class.php';
    +                include_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination2ValuePair.class.php';
    +
    +                //If it is a parent product, then we remove the association with child products
    +                $prodcomb = new ProductCombination($this->db);
    +
    +                if ($prodcomb->deleteByFkProductParent($user, $id) < 0) {
    +                    $error++;
    +                    $this->errors[] = 'Error deleting combinations';
    +                }
    +
    +                //We also check if it is a child product
    +                if (!$error && ($prodcomb->fetchByFkProductChild($id) > 0) && ($prodcomb->delete($user) < 0)) {
    +                    $error++;
    +                    $this->errors[] = 'Error deleting child combination';
    +                }
    +            }
    +
    +            // Delete from product_association
    +            if (!$error) {
    +                $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_association";
    +                $sql.= " WHERE fk_product_pere = ".$id." OR fk_product_fils = ".$id;
    +
    +                $result = $this->db->query($sql);
    +                if (! $result) {
    +                    $error++;
    +                    $this->errors[] = $this->db->lasterror();
    +                }
    +            }
    +
    +            // Delete product
    +            if (! $error) {
    +                $sqlz = "DELETE FROM ".MAIN_DB_PREFIX."product";
    +                $sqlz.= " WHERE rowid = ".$id;
    +
    +                $resultz = $this->db->query($sqlz);
    +                if (! $resultz ) {
    +                    $error++;
    +                    $this->errors[] = $this->db->lasterror();
    +                }
    +            }
    +
    +            if (! $error) {
    +                // We remove directory
    +                $ref = dol_sanitizeFileName($this->ref);
    +                if ($conf->product->dir_output) {
    +                    $dir = $conf->product->dir_output . "/" . $ref;
    +                    if (file_exists($dir)) {
    +                        $res=@dol_delete_dir_recursive($dir);
    +                        if (! $res) {
    +                            $this->errors[] = 'ErrorFailToDeleteDir';
    +                            $error++;
    +                        }
    +                    }
    +                }
    +            }
    +
    +            // Remove extrafields
    +            if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) // For avoid conflicts if trigger used
    +            {
    +                $result=$this->deleteExtraFields();
    +                if ($result < 0) {
    +                    $error++;
    +                    dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR);
    +                }
    +            }
    +
    +            if (! $error) {
    +                $this->db->commit();
    +                return 1;
    +            }
    +            else
    +            {
    +                foreach($this->errors as $errmsg)
    +                {
    +                    dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
    +                    $this->error.=($this->error?', '.$errmsg:$errmsg);
    +                }
    +                $this->db->rollback();
    +                return -$error;
    +            }
    +        }
    +        else
    +        {
    +            $this->error = "ErrorRecordIsUsedCantDelete";
    +            return 0;
    +        }
    +    }
    +
    +    /**
    +     *    Update or add a translation for a product
    +     *
    +     * @param  User $user Object user making update
    +     * @return int        <0 if KO, >0 if OK
    +     */
    +    function setMultiLangs($user)
    +    {
    +        global $conf, $langs;
    +
    +        $langs_available = $langs->get_available_languages(DOL_DOCUMENT_ROOT, 0, 2);
    +        $current_lang = $langs->getDefaultLang();
    +
    +        foreach ($langs_available as $key => $value)
    +        {
    +            if ($key == $current_lang) {
    +                $sql = "SELECT rowid";
    +                $sql.= " FROM ".MAIN_DB_PREFIX."product_lang";
    +                $sql.= " WHERE fk_product=".$this->id;
    +                $sql.= " AND lang='".$key."'";
    +
    +                $result = $this->db->query($sql);
    +
    +                if ($this->db->num_rows($result)) // if there is already a description line for this language
    +                {
    +                    $sql2 = "UPDATE ".MAIN_DB_PREFIX."product_lang";
    +                    $sql2.= " SET ";
    +                    $sql2.= " label='".$this->db->escape($this->label)."',";
    +                    $sql2.= " description='".$this->db->escape($this->description)."'";
    +                    if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) { $sql2.= ", note='".$this->db->escape($this->other)."'";
    +                    }
    +                    $sql2.= " WHERE fk_product=".$this->id." AND lang='".$this->db->escape($key)."'";
    +                }
    +                else
    +                {
    +                    $sql2 = "INSERT INTO ".MAIN_DB_PREFIX."product_lang (fk_product, lang, label, description";
    +                    if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) { $sql2.=", note";
    +                    }
    +                    $sql2.= ")";
    +                    $sql2.= " VALUES(".$this->id.",'".$this->db->escape($key)."','". $this->db->escape($this->label)."',";
    +                    $sql2.= " '".$this->db->escape($this->description)."'";
    +                    if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) { $sql2.= ", '".$this->db->escape($this->other)."'";
    +                    }
    +                    $sql2.= ")";
    +                }
    +                dol_syslog(get_class($this).'::setMultiLangs key = current_lang = '.$key);
    +                if (! $this->db->query($sql2)) {
    +                    $this->error=$this->db->lasterror();
    +                    return -1;
    +                }
    +            }
    +            else if (isset($this->multilangs[$key])) {
    +                $sql = "SELECT rowid";
    +                $sql.= " FROM ".MAIN_DB_PREFIX."product_lang";
    +                $sql.= " WHERE fk_product=".$this->id;
    +                $sql.= " AND lang='".$key."'";
    +
    +                $result = $this->db->query($sql);
    +
    +                if ($this->db->num_rows($result)) // if there is already a description line for this language
    +                {
    +                    $sql2 = "UPDATE ".MAIN_DB_PREFIX."product_lang";
    +                    $sql2.= " SET ";
    +                    $sql2.= " label='".$this->db->escape($this->multilangs["$key"]["label"])."',";
    +                    $sql2.= " description='".$this->db->escape($this->multilangs["$key"]["description"])."'";
    +                    if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) { $sql2.= ", note='".$this->db->escape($this->multilangs["$key"]["other"])."'";
    +                    }
    +                    $sql2.= " WHERE fk_product=".$this->id." AND lang='".$this->db->escape($key)."'";
    +                }
    +                else
    +                {
    +                    $sql2 = "INSERT INTO ".MAIN_DB_PREFIX."product_lang (fk_product, lang, label, description";
    +                    if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) { $sql2.=", note";
    +                    }
    +                    $sql2.= ")";
    +                    $sql2.= " VALUES(".$this->id.",'".$this->db->escape($key)."','". $this->db->escape($this->multilangs["$key"]["label"])."',";
    +                    $sql2.= " '".$this->db->escape($this->multilangs["$key"]["description"])."'";
    +                    if (! empty($conf->global->PRODUCT_USE_OTHER_FIELD_IN_TRANSLATION)) { $sql2.= ", '".$this->db->escape($this->multilangs["$key"]["other"])."'";
    +                    }
    +                    $sql2.= ")";
    +                }
    +
    +                // We do not save if main fields are empty
    +                if ($this->multilangs["$key"]["label"] || $this->multilangs["$key"]["description"]) {
    +                    if (! $this->db->query($sql2)) {
    +                        $this->error=$this->db->lasterror();
    +                        return -1;
    +                    }
    +                }
    +            }
    +            else
    +            {
    +                // language is not current language and we didn't provide a multilang description for this language
    +            }
    +        }
    +
    +        // Call trigger
    +        $result = $this->call_trigger('PRODUCT_SET_MULTILANGS', $user);
    +        if ($result < 0) {
    +            $this->error = $this->db->lasterror();
    +            return -1;
    +        }
    +        // End call triggers
    +
    +        return 1;
    +    }
    +
    +    /**
    +     *    Delete a language for this product
    +     *
    +     * @param string $langtodelete Language code to delete
    +     * @param User   $user         Object user making delete
    +     *
    +     * @return int                            <0 if KO, >0 if OK
    +     */
    +    function delMultiLangs($langtodelete, $user)
    +    {
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_lang";
    +        $sql.= " WHERE fk_product=".$this->id." AND lang='".$this->db->escape($langtodelete)."'";
    +
    +        dol_syslog(get_class($this).'::delMultiLangs', LOG_DEBUG);
    +        $result = $this->db->query($sql);
    +        if ($result) {
    +            // Call trigger
    +            $result = $this->call_trigger('PRODUCT_DEL_MULTILANGS', $user);
    +            if ($result < 0) {
    +                $this->error = $this->db->lasterror();
    +                dol_syslog(get_class($this).'::delMultiLangs error='.$this->error, LOG_ERR);
    +                return -1;
    +            }
    +            // End call triggers
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->lasterror();
    +            dol_syslog(get_class($this).'::delMultiLangs error='.$this->error, LOG_ERR);
    +            return -1;
    +        }
    +    }
    +
    +    /*
    +    * Sets an accountancy code for a product.
    +    * Also calls PRODUCT_MODIFY trigger when modified
    +    *
    +    * @param string $type It can be 'buy', 'sell', 'sell_intra' or 'sell_export'
    +    * @param string $value Accountancy code
    +    * @return int <0 KO >0 OK
    +    */
    +    public function setAccountancyCode($type, $value)
    +    {
    +        global $user, $langs, $conf;
    +
    +        $this->db->begin();
    +
    +        if ($type == 'buy') {
    +            $field = 'accountancy_code_buy';
    +        } elseif ($type == 'sell') {
    +            $field = 'accountancy_code_sell';
    +        } elseif ($type == 'sell_intra') {
    +            $field = 'accountancy_code_sell_intra';
    +        } elseif ($type == 'sell_export') {
    +            $field = 'accountancy_code_sell_export';
    +        } else {
    +            return -1;
    +        }
    +
    +        $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET ";
    +        $sql.= "$field = '".$this->db->escape($value)."'";
    +        $sql.= " WHERE rowid = ".$this->id;
    +
    +        dol_syslog(get_class($this)."::".__FUNCTION__." sql=".$sql, LOG_DEBUG);
    +        $resql = $this->db->query($sql);
    +
    +        if ($resql) {
    +            // Call triggers
    +            include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    +            $interface=new Interfaces($this->db);
    +            $result=$interface->run_triggers('PRODUCT_MODIFY', $this, $user, $langs, $conf);
    +            if ($result < 0) {
    +                $this->errors=$interface->errors;
    +                $this->db->rollback();
    +                return -1;
    +            }
    +            // End call triggers
    +
    +            $this->$field = $value;
    +
    +            $this->db->commit();
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->lasterror();
    +            $this->db->rollback();
    +            return -1;
    +        }
    +    }
    +
    +    /**
    +     *    Load array this->multilangs
    +     *
    +     * @return int        <0 if KO, >0 if OK
    +     */
    +    function getMultiLangs()
    +    {
    +        global $langs;
    +
    +        $current_lang = $langs->getDefaultLang();
    +
    +        $sql = "SELECT lang, label, description, note as other";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_lang";
    +        $sql.= " WHERE fk_product=".$this->id;
    +
    +        $result = $this->db->query($sql);
    +        if ($result) {
    +            while ($obj = $this->db->fetch_object($result))
    +            {
    +                //print 'lang='.$obj->lang.' current='.$current_lang.'<br>';
    +                if ($obj->lang == $current_lang)  // si on a les traduct. dans la langue courante on les charge en infos principales.
    +                {
    +                    $this->label        = $obj->label;
    +                    $this->description    = $obj->description;
    +                    $this->other        = $obj->other;
    +                }
    +                $this->multilangs["$obj->lang"]["label"]        = $obj->label;
    +                $this->multilangs["$obj->lang"]["description"]    = $obj->description;
    +                $this->multilangs["$obj->lang"]["other"]        = $obj->other;
    +            }
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error="Error: ".$this->db->lasterror()." - ".$sql;
    +            return -1;
    +        }
    +    }
    +
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Insert a track that we changed a customer price
    +     *
    +     * @param  User $user  User making change
    +     * @param  int  $level price level to change
    +     * @return int                    <0 if KO, >0 if OK
    +     */
    +    function _log_price($user,$level=0)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $now=dol_now();
    +
    +        // Clean parameters
    +        if (empty($this->price_by_qty)) { $this->price_by_qty=0;
    +        }
    +
    +        // Add new price
    +        $sql = "INSERT INTO ".MAIN_DB_PREFIX."product_price(price_level,date_price, fk_product, fk_user_author, price, price_ttc, price_base_type,tosell, tva_tx, default_vat_code, recuperableonly,";
    +        $sql.= " localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, price_min,price_min_ttc,price_by_qty,entity,fk_price_expression) ";
    +        $sql.= " VALUES(".($level?$level:1).", '".$this->db->idate($now)."',".$this->id.",".$user->id.",".$this->price.",".$this->price_ttc.",'".$this->db->escape($this->price_base_type)."',".$this->status.",".$this->tva_tx.", ".($this->default_vat_code?("'".$this->db->escape($this->default_vat_code)."'"):"null").",".$this->tva_npr.",";
    +        $sql.= " ".$this->localtax1_tx.", ".$this->localtax2_tx.", '".$this->db->escape($this->localtax1_type)."', '".$this->db->escape($this->localtax2_type)."', ".$this->price_min.",".$this->price_min_ttc.",".$this->price_by_qty.",".$conf->entity.",".($this->fk_price_expression > 0?$this->fk_price_expression:'null');
    +        $sql.= ")";
    +
    +        dol_syslog(get_class($this)."::_log_price", LOG_DEBUG);
    +        $resql=$this->db->query($sql);
    +        if(! $resql) {
    +            $this->error=$this->db->lasterror();
    +            dol_print_error($this->db);
    +            return -1;
    +        }
    +        else
    +        {
    +            return 1;
    +        }
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Delete a price line
    +     *
    +     * @param  User $user  Object user
    +     * @param  int  $rowid Line id to delete
    +     * @return int                <0 if KO, >0 if OK
    +     */
    +    function log_price_delete($user, $rowid)
    +    {
    +        // phpcs:enable
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_price_by_qty";
    +        $sql.= " WHERE fk_product_price=".$rowid;
    +        $resql=$this->db->query($sql);
    +
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_price";
    +        $sql.= " WHERE rowid=".$rowid;
    +        $resql=$this->db->query($sql);
    +        if ($resql) {
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->lasterror();
    +            return -1;
    +        }
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *    Read price used by a provider.
    +     *    We enter as input couple prodfournprice/qty or triplet qty/product_id/fourn_ref.
    +     *  This also set some properties on product like ->buyprice, ->fourn_pu, ...
    +     *
    +     * @param  int    $prodfournprice Id du tarif = rowid table product_fournisseur_price
    +     * @param  double $qty            Quantity asked or -1 to get first entry found
    +     * @param  int    $product_id     Filter on a particular product id
    +     * @param  string $fourn_ref      Filter on a supplier price ref. 'none' to exclude ref in search.
    +     * @param  int    $fk_soc         If of supplier
    +     * @return int                         <-1 if KO, -1 if qty not enough, 0 if OK but nothing found, id_product if OK and found. May also initialize some properties like (->ref_supplier, buyprice, fourn_pu, vatrate_supplier...)
    +     */
    +    function get_buyprice($prodfournprice, $qty, $product_id=0, $fourn_ref='', $fk_soc=0)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        $result = 0;
    +
    +        // We do a first seach with a select by searching with couple prodfournprice and qty only (later we will search on triplet qty/product_id/fourn_ref)
    +        $sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity, pfp.remise_percent,";
    +        $sql.= " pfp.fk_product, pfp.ref_fourn, pfp.desc_fourn, pfp.fk_soc, pfp.tva_tx, pfp.fk_supplier_price_expression";
    +        $sql.= " ,pfp.default_vat_code";
    +        $sql.= " ,pfp.multicurrency_price, pfp.multicurrency_unitprice, pfp.multicurrency_tx, pfp.fk_multicurrency, pfp.multicurrency_code";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
    +        $sql.= " WHERE pfp.rowid = ".$prodfournprice;
    +        if ($qty > 0) { $sql.= " AND pfp.quantity <= ".$qty;
    +        }
    +        $sql.= " ORDER BY pfp.quantity DESC";
    +
    +        dol_syslog(get_class($this)."::get_buyprice first search by prodfournprice/qty", LOG_DEBUG);
    +        $resql = $this->db->query($sql);
    +        if ($resql) {
    +            $obj = $this->db->fetch_object($resql);
    +            if ($obj && $obj->quantity > 0)        // If we found a supplier prices from the id of supplier price
    +            {
    +                if (!empty($conf->dynamicprices->enabled) && !empty($obj->fk_supplier_price_expression)) {
    +                    include_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php';
                         $prod_supplier = new ProductFournisseur($this->db);
                         $prod_supplier->product_fourn_price_id = $obj->rowid;
                         $prod_supplier->id = $obj->fk_product;
    @@ -1546,2077 +1573,2221 @@ class Product extends CommonObject
                         $priceparser = new PriceParser($this->db);
                         $price_result = $priceparser->parseProductSupplier($prod_supplier);
                         if ($price_result >= 0) {
    -                    	$obj->price = $price_result;
    +                        $obj->price = $price_result;
                         }
                     }
                     $this->product_fourn_price_id = $obj->rowid;
    -				$this->buyprice = $obj->price;                      // deprecated
    -				$this->fourn_pu = $obj->price / $obj->quantity;     // Unit price of product of supplier
    -				$this->fourn_price_base_type = 'HT';                // Price base type
    -				$this->fourn_socid = $obj->fk_soc;                  // Company that offer this price
    -				$this->ref_fourn = $obj->ref_fourn;                 // deprecated
    -				$this->ref_supplier = $obj->ref_fourn;              // Ref supplier
    -				$this->remise_percent = $obj->remise_percent;       // remise percent if present and not typed
    -				$this->vatrate_supplier = $obj->tva_tx;             // Vat ref supplier
    -				$this->default_vat_code = $obj->default_vat_code;   // Vat code supplier
    +                $this->buyprice = $obj->price;                      // deprecated
    +                $this->fourn_pu = $obj->price / $obj->quantity;     // Unit price of product of supplier
    +                $this->fourn_price_base_type = 'HT';                // Price base type
    +                $this->fourn_socid = $obj->fk_soc;                  // Company that offer this price
    +                $this->ref_fourn = $obj->ref_fourn;                 // deprecated
    +                $this->ref_supplier = $obj->ref_fourn;              // Ref supplier
    +                $this->desc_supplier = $obj->desc_fourn;            // desc supplier
    +                $this->remise_percent = $obj->remise_percent;       // remise percent if present and not typed
    +                $this->vatrate_supplier = $obj->tva_tx;             // Vat ref supplier
    +                $this->default_vat_code = $obj->default_vat_code;   // Vat code supplier
                     $this->fourn_multicurrency_price       = $obj->multicurrency_price;
                     $this->fourn_multicurrency_unitprice   = $obj->multicurrency_unitprice;
                     $this->fourn_multicurrency_tx          = $obj->multicurrency_tx;
                     $this->fourn_multicurrency_id          = $obj->fk_multicurrency;
                     $this->fourn_multicurrency_code        = $obj->multicurrency_code;
    -				$result=$obj->fk_product;
    -				return $result;
    -			}
    -			else // If not found
    -			{
    -				// We do a second search by doing a select again but searching with less reliable criteria: couple qty/id product, and if set fourn_ref or fk_soc.
    -				$sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity, pfp.fk_soc,";
    -				$sql.= " pfp.fk_product, pfp.ref_fourn as ref_supplier, pfp.tva_tx, pfp.fk_supplier_price_expression";
    -				$sql.= " ,pfp.default_vat_code";
    +                $result=$obj->fk_product;
    +                return $result;
    +            }
    +            else // If not found
    +            {
    +                // We do a second search by doing a select again but searching with less reliable criteria: couple qty/id product, and if set fourn_ref or fk_soc.
    +                $sql = "SELECT pfp.rowid, pfp.price as price, pfp.quantity as quantity, pfp.fk_soc,";
    +                $sql.= " pfp.fk_product, pfp.ref_fourn as ref_supplier, pfp.desc_fourn as desc_supplier, pfp.tva_tx, pfp.fk_supplier_price_expression";
    +                $sql.= " ,pfp.default_vat_code";
                     $sql.= " ,pfp.multicurrency_price, pfp.multicurrency_unitprice, pfp.multicurrency_tx, pfp.fk_multicurrency, pfp.multicurrency_code";
    -				$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
    -				$sql.= " WHERE pfp.fk_product = ".$product_id;
    -				if ($fourn_ref != 'none') $sql.= " AND pfp.ref_fourn = '".$fourn_ref."'";
    -				if ($fk_soc > 0) $sql.= " AND pfp.fk_soc = ".$fk_soc;
    -				if ($qty > 0) $sql.= " AND pfp.quantity <= ".$qty;
    -				$sql.= " ORDER BY pfp.quantity DESC";
    -				$sql.= " LIMIT 1";
    +                $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
    +                $sql.= " WHERE pfp.fk_product = ".$product_id;
    +                if ($fourn_ref != 'none') { $sql.= " AND pfp.ref_fourn = '".$fourn_ref."'";
    +                }
    +                if ($fk_soc > 0) { $sql.= " AND pfp.fk_soc = ".$fk_soc;
    +                }
    +                if ($qty > 0) { $sql.= " AND pfp.quantity <= ".$qty;
    +                }
    +                $sql.= " ORDER BY pfp.quantity DESC";
    +                $sql.= " LIMIT 1";
     
    -				dol_syslog(get_class($this)."::get_buyprice second search from qty/ref/product_id", LOG_DEBUG);
    -				$resql = $this->db->query($sql);
    -				if ($resql)
    -				{
    -					$obj = $this->db->fetch_object($resql);
    -					if ($obj && $obj->quantity > 0)		// If found
    -					{
    -		                if (!empty($conf->dynamicprices->enabled) && !empty($obj->fk_supplier_price_expression))
    -		                {
    -							require_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php';
    -		                    $prod_supplier = new ProductFournisseur($this->db);
    -		                    $prod_supplier->product_fourn_price_id = $obj->rowid;
    -		                    $prod_supplier->id = $obj->fk_product;
    -		                    $prod_supplier->fourn_qty = $obj->quantity;
    -		                    $prod_supplier->fourn_tva_tx = $obj->tva_tx;
    -		                    $prod_supplier->fk_supplier_price_expression = $obj->fk_supplier_price_expression;
    -		                    $priceparser = new PriceParser($this->db);
    -		                    $price_result = $priceparser->parseProductSupplier($prod_supplier);
    -		                    if ($result >= 0) {
    -		                    	$obj->price = $price_result;
    -		                    }
    -		                }
    -		                $this->product_fourn_price_id = $obj->rowid;
    -						$this->buyprice = $obj->price;                      // deprecated
    -						$this->fourn_qty = $obj->quantity;					// min quantity for price for a virtual supplier
    -						$this->fourn_pu = $obj->price / $obj->quantity;     // Unit price of product for a virtual supplier
    -						$this->fourn_price_base_type = 'HT';                // Price base type for a virtual supplier
    -						$this->fourn_socid = $obj->fk_soc;                  // Company that offer this price
    -						$this->ref_fourn = $obj->ref_supplier;              // deprecated
    -						$this->ref_supplier = $obj->ref_supplier;           // Ref supplier
    -						$this->remise_percent = $obj->remise_percent;       // remise percent if present and not typed
    -						$this->vatrate_supplier = $obj->tva_tx;             // Vat ref supplier
    -						$this->default_vat_code = $obj->default_vat_code;   // Vat code supplier
    +                dol_syslog(get_class($this)."::get_buyprice second search from qty/ref/product_id", LOG_DEBUG);
    +                $resql = $this->db->query($sql);
    +                if ($resql) {
    +                    $obj = $this->db->fetch_object($resql);
    +                    if ($obj && $obj->quantity > 0)        // If found
    +                    {
    +                        if (!empty($conf->dynamicprices->enabled) && !empty($obj->fk_supplier_price_expression)) {
    +                            include_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php';
    +                            $prod_supplier = new ProductFournisseur($this->db);
    +                            $prod_supplier->product_fourn_price_id = $obj->rowid;
    +                            $prod_supplier->id = $obj->fk_product;
    +                            $prod_supplier->fourn_qty = $obj->quantity;
    +                            $prod_supplier->fourn_tva_tx = $obj->tva_tx;
    +                            $prod_supplier->fk_supplier_price_expression = $obj->fk_supplier_price_expression;
    +                            $priceparser = new PriceParser($this->db);
    +                            $price_result = $priceparser->parseProductSupplier($prod_supplier);
    +                            if ($result >= 0) {
    +                                $obj->price = $price_result;
    +                            }
    +                        }
    +                        $this->product_fourn_price_id = $obj->rowid;
    +                        $this->buyprice = $obj->price;                      // deprecated
    +                        $this->fourn_qty = $obj->quantity;                    // min quantity for price for a virtual supplier
    +                        $this->fourn_pu = $obj->price / $obj->quantity;     // Unit price of product for a virtual supplier
    +                        $this->fourn_price_base_type = 'HT';                // Price base type for a virtual supplier
    +                        $this->fourn_socid = $obj->fk_soc;                  // Company that offer this price
    +                        $this->ref_fourn = $obj->ref_supplier;              // deprecated
    +                        $this->ref_supplier = $obj->ref_supplier;           // Ref supplier
    +                        $this->desc_supplier = $obj->desc_supplier;         // desc supplier
    +                        $this->remise_percent = $obj->remise_percent;       // remise percent if present and not typed
    +                        $this->vatrate_supplier = $obj->tva_tx;             // Vat ref supplier
    +                        $this->default_vat_code = $obj->default_vat_code;   // Vat code supplier
                             $this->fourn_multicurrency_price       = $obj->multicurrency_price;
                             $this->fourn_multicurrency_unitprice   = $obj->multicurrency_unitprice;
                             $this->fourn_multicurrency_tx          = $obj->multicurrency_tx;
                             $this->fourn_multicurrency_id          = $obj->fk_multicurrency;
                             $this->fourn_multicurrency_code        = $obj->multicurrency_code;
    -						$result=$obj->fk_product;
    -						return $result;
    -					}
    -					else
    -					{
    -						return -1;	// Ce produit n'existe pas avec cet id tarif fournisseur ou existe mais qte insuffisante, ni pour le couple produit/ref fournisseur dans la quantité.
    -					}
    -				}
    -				else
    -				{
    -					$this->error=$this->db->lasterror();
    -					return -3;
    -				}
    -			}
    -		}
    -		else
    -		{
    -			$this->error=$this->db->lasterror();
    -			return -2;
    -		}
    -	}
    +                        $result=$obj->fk_product;
    +                        return $result;
    +                    }
    +                    else
    +                    {
    +                        return -1;    // Ce produit n'existe pas avec cet id tarif fournisseur ou existe mais qte insuffisante, ni pour le couple produit/ref fournisseur dans la quantité.
    +                    }
    +                }
    +                else
    +                {
    +                    $this->error=$this->db->lasterror();
    +                    return -3;
    +                }
    +            }
    +        }
    +        else
    +        {
    +            $this->error=$this->db->lasterror();
    +            return -2;
    +        }
    +    }
     
     
    -	/**
    -	 *	Modify customer price of a product/Service
    -	 *
    -	 *	@param  	double	$newprice		    New price
    -	 *	@param  	string	$newpricebase	    HT or TTC
    -	 *	@param  	User	$user        	    Object user that make change
    -	 *	@param  	double	$newvat			    New VAT Rate (For example 8.5. Should not be a string)
    -	 *  @param		double	$newminprice	    New price min
    -	 *  @param		int		$level			    0=standard, >0 = level if multilevel prices
    -	 *  @param     	int		$newnpr             0=Standard vat rate, 1=Special vat rate for French NPR VAT
    -	 *  @param     	int		$newpbq             1 if it has price by quantity
    -	 *  @param 		int 	$ignore_autogen     Used to avoid infinite loops
    -     *	@param      array	$localtaxes_array	Array with localtaxes info array('0'=>type1,'1'=>rate1,'2'=>type2,'3'=>rate2) (loaded by getLocalTaxesFromRate(vatrate, 0, ...) function).
    -     *  @param      string  $newdefaultvatcode  Default vat code
    -	 * 	@return		int						    <0 if KO, >0 if OK
    -	 */
    -	function updatePrice($newprice, $newpricebase, $user, $newvat='',$newminprice=0, $level=0, $newnpr=0, $newpbq=0, $ignore_autogen=0, $localtaxes_array=array(), $newdefaultvatcode='')
    -	{
    -		global $conf,$langs;
    +    /**
    +     *    Modify customer price of a product/Service
    +     *
    +     * @param  double $newprice          New price
    +     * @param  string $newpricebase      HT or TTC
    +     * @param  User   $user              Object user that make change
    +     * @param  double $newvat            New VAT Rate (For example 8.5. Should not be a string)
    +     * @param  double $newminprice       New price min
    +     * @param  int    $level             0=standard, >0 = level if multilevel prices
    +     * @param  int    $newnpr            0=Standard vat rate, 1=Special vat rate for French NPR VAT
    +     * @param  int    $newpbq            1 if it has price by quantity
    +     * @param  int    $ignore_autogen    Used to avoid infinite loops
    +     * @param  array  $localtaxes_array  Array with localtaxes info array('0'=>type1,'1'=>rate1,'2'=>type2,'3'=>rate2) (loaded by getLocalTaxesFromRate(vatrate, 0, ...) function).
    +     * @param  string $newdefaultvatcode Default vat code
    +     * @return int                            <0 if KO, >0 if OK
    +     */
    +    function updatePrice($newprice, $newpricebase, $user, $newvat='',$newminprice=0, $level=0, $newnpr=0, $newpbq=0, $ignore_autogen=0, $localtaxes_array=array(), $newdefaultvatcode='')
    +    {
    +        global $conf,$langs;
     
    -		$id=$this->id;
    +        $id=$this->id;
     
    -		dol_syslog(get_class($this)."::update_price id=".$id." newprice=".$newprice." newpricebase=".$newpricebase." newminprice=".$newminprice." level=".$level." npr=".$newnpr." newdefaultvatcode=".$newdefaultvatcode);
    +        dol_syslog(get_class($this)."::update_price id=".$id." newprice=".$newprice." newpricebase=".$newpricebase." newminprice=".$newminprice." level=".$level." npr=".$newnpr." newdefaultvatcode=".$newdefaultvatcode);
     
    -		// Clean parameters
    -		if (empty($this->tva_tx))  $this->tva_tx=0;
    -        if (empty($newnpr)) $newnpr=0;
    +        // Clean parameters
    +        if (empty($this->tva_tx)) {  $this->tva_tx=0;
    +        }
    +        if (empty($newnpr)) { $newnpr=0;
    +        }
     
    -		// Check parameters
    -		if ($newvat == '') $newvat=$this->tva_tx;
    +        // Check parameters
    +        if ($newvat == '') { $newvat=$this->tva_tx;
    +        }
     
    -		// If multiprices are enabled, then we check if the current product is subject to price autogeneration
    -		// Price will be modified ONLY when the first one is the one that is being modified
    -		if ((!empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) && !$ignore_autogen && $this->price_autogen && ($level == 1))
    -		{
    -			return $this->generateMultiprices($user, $newprice, $newpricebase, $newvat, $newnpr, $newpbq);
    -		}
    +        // If multiprices are enabled, then we check if the current product is subject to price autogeneration
    +        // Price will be modified ONLY when the first one is the one that is being modified
    +        if ((!empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) && !$ignore_autogen && $this->price_autogen && ($level == 1)) {
    +            return $this->generateMultiprices($user, $newprice, $newpricebase, $newvat, $newnpr, $newpbq);
    +        }
     
    -		if (! empty($newminprice) && ($newminprice > $newprice))
    -		{
    -			$this->error='ErrorPriceCantBeLowerThanMinPrice';
    -			return -1;
    -		}
    +        if (! empty($newminprice) && ($newminprice > $newprice)) {
    +            $this->error='ErrorPriceCantBeLowerThanMinPrice';
    +            return -1;
    +        }
     
    -		if ($newprice !== '' || $newprice === 0)
    -		{
    -			if ($newpricebase == 'TTC')
    -			{
    -				$price_ttc = price2num($newprice,'MU');
    -				$price = price2num($newprice) / (1 + ($newvat / 100));
    -				$price = price2num($price,'MU');
    +        if ($newprice !== '' || $newprice === 0) {
    +            if ($newpricebase == 'TTC') {
    +                $price_ttc = price2num($newprice, 'MU');
    +                $price = price2num($newprice) / (1 + ($newvat / 100));
    +                $price = price2num($price, 'MU');
     
    -				if ($newminprice != '' || $newminprice == 0)
    -				{
    -					$price_min_ttc = price2num($newminprice,'MU');
    -					$price_min = price2num($newminprice) / (1 + ($newvat / 100));
    -					$price_min = price2num($price_min,'MU');
    -				}
    -				else
    -				{
    -					$price_min=0;
    -					$price_min_ttc=0;
    -				}
    -			}
    -			else
    -			{
    -				$price = price2num($newprice,'MU');
    -				$price_ttc = ( $newnpr != 1 ) ? price2num($newprice) * (1 + ($newvat / 100)) : $price;
    -				$price_ttc = price2num($price_ttc,'MU');
    +                if ($newminprice != '' || $newminprice == 0) {
    +                    $price_min_ttc = price2num($newminprice, 'MU');
    +                    $price_min = price2num($newminprice) / (1 + ($newvat / 100));
    +                    $price_min = price2num($price_min, 'MU');
    +                }
    +                else
    +                {
    +                    $price_min=0;
    +                    $price_min_ttc=0;
    +                }
    +            }
    +            else
    +            {
    +                $price = price2num($newprice, 'MU');
    +                $price_ttc = ( $newnpr != 1 ) ? price2num($newprice) * (1 + ($newvat / 100)) : $price;
    +                $price_ttc = price2num($price_ttc, 'MU');
     
    -				if ( $newminprice !== '' || $newminprice === 0)
    -				{
    -					$price_min = price2num($newminprice,'MU');
    -					$price_min_ttc = price2num($newminprice) * (1 + ($newvat / 100));
    -					$price_min_ttc = price2num($price_min_ttc,'MU');
    -					//print 'X'.$newminprice.'-'.$price_min;
    -				}
    -				else
    -				{
    -					$price_min=0;
    -					$price_min_ttc=0;
    -				}
    -			}
    -			//print 'x'.$id.'-'.$newprice.'-'.$newpricebase.'-'.$price.'-'.$price_ttc.'-'.$price_min.'-'.$price_min_ttc;
    +                if ($newminprice !== '' || $newminprice === 0) {
    +                    $price_min = price2num($newminprice, 'MU');
    +                    $price_min_ttc = price2num($newminprice) * (1 + ($newvat / 100));
    +                    $price_min_ttc = price2num($price_min_ttc, 'MU');
    +                    //print 'X'.$newminprice.'-'.$price_min;
    +                }
    +                else
    +                {
    +                    $price_min=0;
    +                    $price_min_ttc=0;
    +                }
    +            }
    +            //print 'x'.$id.'-'.$newprice.'-'.$newpricebase.'-'.$price.'-'.$price_ttc.'-'.$price_min.'-'.$price_min_ttc;
     
    -			if (count($localtaxes_array) > 0)
    -			{
    -			    $localtaxtype1=$localtaxes_array['0'];
    -			    $localtax1=$localtaxes_array['1'];
    -			    $localtaxtype2=$localtaxes_array['2'];
    -			    $localtax2=$localtaxes_array['3'];
    -			}
    -			else     // old method. deprecated because ot can't retreive type
    -			{
    -	       		$localtaxtype1='0';
    -			    $localtax1=get_localtax($newvat,1);
    -	       		$localtaxtype2='0';
    -			    $localtax2=get_localtax($newvat,2);
    -			}
    -			if (empty($localtax1)) $localtax1=0;	// If = '' then = 0
    -			if (empty($localtax2)) $localtax2=0;	// If = '' then = 0
    +            if (count($localtaxes_array) > 0) {
    +                $localtaxtype1=$localtaxes_array['0'];
    +                $localtax1=$localtaxes_array['1'];
    +                $localtaxtype2=$localtaxes_array['2'];
    +                $localtax2=$localtaxes_array['3'];
    +            }
    +            else     // old method. deprecated because ot can't retreive type
    +            {
    +                $localtaxtype1='0';
    +                $localtax1=get_localtax($newvat, 1);
    +                $localtaxtype2='0';
    +                $localtax2=get_localtax($newvat, 2);
    +            }
    +            if (empty($localtax1)) { $localtax1=0;    // If = '' then = 0
    +            }
    +            if (empty($localtax2)) { $localtax2=0;    // If = '' then = 0
    +            }
     
    -			$this->db->begin();
    +            $this->db->begin();
     
    -			// Ne pas mettre de quote sur les numeriques decimaux.
    -			// Ceci provoque des stockages avec arrondis en base au lieu des valeurs exactes.
    -			$sql = "UPDATE ".MAIN_DB_PREFIX."product SET";
    -			$sql.= " price_base_type='".$newpricebase."',";
    -			$sql.= " price=".$price.",";
    -			$sql.= " price_ttc=".$price_ttc.",";
    -			$sql.= " price_min=".$price_min.",";
    -			$sql.= " price_min_ttc=".$price_min_ttc.",";
    -			$sql.= " localtax1_tx=".($localtax1>=0?$localtax1:'NULL').",";
    -			$sql.= " localtax2_tx=".($localtax2>=0?$localtax2:'NULL').",";
    -			$sql.= " localtax1_type=".($localtaxtype1!=''?"'".$localtaxtype1."'":"'0'").",";
    -			$sql.= " localtax2_type=".($localtaxtype2!=''?"'".$localtaxtype2."'":"'0'").",";
    +            // Ne pas mettre de quote sur les numeriques decimaux.
    +            // Ceci provoque des stockages avec arrondis en base au lieu des valeurs exactes.
    +            $sql = "UPDATE ".MAIN_DB_PREFIX."product SET";
    +            $sql.= " price_base_type='".$newpricebase."',";
    +            $sql.= " price=".$price.",";
    +            $sql.= " price_ttc=".$price_ttc.",";
    +            $sql.= " price_min=".$price_min.",";
    +            $sql.= " price_min_ttc=".$price_min_ttc.",";
    +            $sql.= " localtax1_tx=".($localtax1>=0?$localtax1:'NULL').",";
    +            $sql.= " localtax2_tx=".($localtax2>=0?$localtax2:'NULL').",";
    +            $sql.= " localtax1_type=".($localtaxtype1!=''?"'".$localtaxtype1."'":"'0'").",";
    +            $sql.= " localtax2_type=".($localtaxtype2!=''?"'".$localtaxtype2."'":"'0'").",";
                 $sql.= " default_vat_code=".($newdefaultvatcode?"'".$this->db->escape($newdefaultvatcode)."'":"null").",";
    -			$sql.= " tva_tx='".price2num($newvat)."',";
    +            $sql.= " tva_tx='".price2num($newvat)."',";
                 $sql.= " recuperableonly='".$newnpr."'";
    -			$sql.= " WHERE rowid = ".$id;
    +            $sql.= " WHERE rowid = ".$id;
     
    -			dol_syslog(get_class($this)."::update_price", LOG_DEBUG);
    -			$resql=$this->db->query($sql);
    -			if ($resql)
    -			{
    -				$this->multiprices[$level] = $price;
    -				$this->multiprices_ttc[$level] = $price_ttc;
    -				$this->multiprices_min[$level]= $price_min;
    -				$this->multiprices_min_ttc[$level]= $price_min_ttc;
    -				$this->multiprices_base_type[$level]= $newpricebase;
    -				$this->multiprices_default_vat_code[$level]= $newdefaultvatcode;
    -				$this->multiprices_tva_tx[$level]= $newvat;
    -				$this->multiprices_recuperableonly[$level]= $newnpr;
    +            dol_syslog(get_class($this)."::update_price", LOG_DEBUG);
    +            $resql=$this->db->query($sql);
    +            if ($resql) {
    +                $this->multiprices[$level] = $price;
    +                $this->multiprices_ttc[$level] = $price_ttc;
    +                $this->multiprices_min[$level]= $price_min;
    +                $this->multiprices_min_ttc[$level]= $price_min_ttc;
    +                $this->multiprices_base_type[$level]= $newpricebase;
    +                $this->multiprices_default_vat_code[$level]= $newdefaultvatcode;
    +                $this->multiprices_tva_tx[$level]= $newvat;
    +                $this->multiprices_recuperableonly[$level]= $newnpr;
     
    -				$this->price = $price;
    -				$this->price_ttc = $price_ttc;
    -				$this->price_min = $price_min;
    -				$this->price_min_ttc = $price_min_ttc;
    -				$this->price_base_type = $newpricebase;
    -				$this->default_vat_code = $newdefaultvatcode;
    -				$this->tva_tx = $newvat;
    -				$this->tva_npr = $newnpr;
    -				//Local taxes
    -				$this->localtax1_tx = $localtax1;
    -				$this->localtax2_tx = $localtax2;
    -				$this->localtax1_type = $localtaxtype1;
    -				$this->localtax2_type = $localtaxtype2;
    +                $this->price = $price;
    +                $this->price_ttc = $price_ttc;
    +                $this->price_min = $price_min;
    +                $this->price_min_ttc = $price_min_ttc;
    +                $this->price_base_type = $newpricebase;
    +                $this->default_vat_code = $newdefaultvatcode;
    +                $this->tva_tx = $newvat;
    +                $this->tva_npr = $newnpr;
    +                //Local taxes
    +                $this->localtax1_tx = $localtax1;
    +                $this->localtax2_tx = $localtax2;
    +                $this->localtax1_type = $localtaxtype1;
    +                $this->localtax2_type = $localtaxtype2;
     
    -				// Price by quantity
    -				$this->price_by_qty = $newpbq;
    +                // Price by quantity
    +                $this->price_by_qty = $newpbq;
     
    -				$this->_log_price($user,$level);	// Save price for level into table product_price
    +                $this->_log_price($user, $level);    // Save price for level into table product_price
     
    -				$this->level = $level;				// Store level of price edited for trigger
    +                $this->level = $level;                // Store level of price edited for trigger
     
                     // Call trigger
    -                $result=$this->call_trigger('PRODUCT_PRICE_MODIFY',$user);
    -                if ($result < 0)
    -                {
    -                	$this->db->rollback();
    -                	return -1;
    +                $result=$this->call_trigger('PRODUCT_PRICE_MODIFY', $user);
    +                if ($result < 0) {
    +                    $this->db->rollback();
    +                    return -1;
                     }
                     // End call triggers
     
                     $this->db->commit();
    -			}
    -			else
    -			{
    -				$this->db->rollback();
    -			    dol_print_error($this->db);
    -			}
    -		}
    +            }
    +            else
    +            {
    +                $this->db->rollback();
    +                dol_print_error($this->db);
    +            }
    +        }
     
    -		return 1;
    -	}
    +        return 1;
    +    }
     
         /**
          *  Sets the supplier price expression
          *
    -     *  @param  int     $expression_id	Expression
    -     *  @return int                 	<0 if KO, >0 if OK
    -	 * @deprecated Use Product::update instead
    +     * @param      int $expression_id Expression
    +     * @return     int                     <0 if KO, >0 if OK
    +     * @deprecated Use Product::update instead
          */
         function setPriceExpression($expression_id)
         {
    -		global $user;
    +        global $user;
     
    -		$this->fk_price_expression = $expression_id;
    +        $this->fk_price_expression = $expression_id;
     
    -		return $this->update($this->id, $user);
    +        return $this->update($this->id, $user);
         }
     
    -	/**
    -	 *  Load a product in memory from database
    -	 *
    -	 *  @param	int		$id      			Id of product/service to load
    -	 *  @param  string	$ref     			Ref of product/service to load
    -	 *  @param	string	$ref_ext			Ref ext of product/service to load
    -     *  @param	int		$ignore_expression  Ignores the math expression for calculating price and uses the db value instead
    -	 *  @return int     					<0 if KO, 0 if not found, >0 if OK
    -	 */
    -	function fetch($id='', $ref='', $ref_ext='', $ignore_expression=0)
    -	{
    -	    include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    +    /**
    +     *  Load a product in memory from database
    +     *
    +     * @param  int    $id                Id of product/service to load
    +     * @param  string $ref               Ref of product/service to load
    +     * @param  string $ref_ext           Ref ext of product/service to load
    +     * @param  string $barcode           Barcode of product/service to load
    +     * @param  int    $ignore_expression Ignores the math expression for calculating price and uses the db value instead
    +     * @return int                         <0 if KO, 0 if not found, >0 if OK
    +     */
    +    function fetch($id='', $ref='', $ref_ext='', $barcode='', $ignore_expression=0)
    +    {
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     
    -		global $langs, $conf;
    +        global $langs, $conf;
     
    -		dol_syslog(get_class($this)."::fetch id=".$id." ref=".$ref." ref_ext=".$ref_ext);
    +        dol_syslog(get_class($this)."::fetch id=".$id." ref=".$ref." ref_ext=".$ref_ext);
     
    -		// Check parameters
    -		if (! $id && ! $ref && ! $ref_ext)
    -		{
    -			$this->error='ErrorWrongParameters';
    -			dol_syslog(get_class($this)."::fetch ".$this->error);
    -			return -1;
    -		}
    +        // Check parameters
    +        if (! $id && ! $ref && ! $ref_ext && ! $barcode) {
    +            $this->error='ErrorWrongParameters';
    +            dol_syslog(get_class($this)."::fetch ".$this->error);
    +            return -1;
    +        }
     
    -		$sql = "SELECT rowid, ref, ref_ext, label, description, url, note as note_private, customcode, fk_country, price, price_ttc,";
    -		$sql.= " price_min, price_min_ttc, price_base_type, cost_price, default_vat_code, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, tosell,";
    -		$sql.= " tobuy, fk_product_type, duration, fk_default_warehouse, seuil_stock_alerte, canvas, weight, weight_units,";
    -		$sql.= " length, length_units, width, width_units, height, height_units,";
    -		$sql.= " surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,";
    -		$sql.= " accountancy_code_buy, accountancy_code_sell, accountancy_code_sell_intra, accountancy_code_sell_export, stock, pmp,";
    -		$sql.= " datec, tms, import_key, entity, desiredstock, tobatch, fk_unit,";
    -		$sql.= " fk_price_expression, price_autogen";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product";
    -		if ($id) $sql.= " WHERE rowid = ".$this->db->escape($id);
    -		else
    -		{
    -			$sql.= " WHERE entity IN (".getEntity($this->element).")";
    -			if ($ref) $sql.= " AND ref = '".$this->db->escape($ref)."'";
    -			else if ($ref_ext) $sql.= " AND ref_ext = '".$this->db->escape($ref_ext)."'";
    -		}
    +        $sql = "SELECT rowid, ref, ref_ext, label, description, url, note as note_private, customcode, fk_country, price, price_ttc,";
    +        $sql.= " price_min, price_min_ttc, price_base_type, cost_price, default_vat_code, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, localtax1_type, localtax2_type, tosell,";
    +        $sql.= " tobuy, fk_product_type, duration, fk_default_warehouse, seuil_stock_alerte, canvas, weight, weight_units,";
    +        $sql.= " length, length_units, width, width_units, height, height_units,";
    +        $sql.= " surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,";
    +        $sql.= " accountancy_code_buy, accountancy_code_sell, accountancy_code_sell_intra, accountancy_code_sell_export, stock, pmp,";
    +        $sql.= " datec, tms, import_key, entity, desiredstock, tobatch, fk_unit,";
    +        $sql.= " fk_price_expression, price_autogen";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product";
    +        if ($id) { $sql.= " WHERE rowid = ".$this->db->escape($id);
    +        } else
    +        {
    +            $sql.= " WHERE entity IN (".getEntity($this->element).")";
    +            if ($ref) { $sql.= " AND ref = '".$this->db->escape($ref)."'";
    +            } else if ($ref_ext) { $sql.= " AND ref_ext = '".$this->db->escape($ref_ext)."'";
    +            } else if ($barcode) { $sql.= " AND barcode = '".$this->db->escape($barcode)."'";
    +            }
    +        }
     
    -		$resql = $this->db->query($sql);
    -		if ( $resql )
    -		{
    -			if ($this->db->num_rows($resql) > 0)
    -			{
    -				$obj = $this->db->fetch_object($resql);
    +        $resql = $this->db->query($sql);
    +        if ($resql ) {
    +            if ($this->db->num_rows($resql) > 0) {
    +                $obj = $this->db->fetch_object($resql);
     
    -				$this->id							= $obj->rowid;
    -				$this->ref							= $obj->ref;
    -				$this->ref_ext						= $obj->ref_ext;
    -				$this->label						= $obj->label;
    -				$this->description					= $obj->description;
    -				$this->url							= $obj->url;
    -				$this->note_private					= $obj->note_private;
    -				$this->note							= $obj->note_private;  // deprecated
    +                $this->id                            = $obj->rowid;
    +                $this->ref                            = $obj->ref;
    +                $this->ref_ext                        = $obj->ref_ext;
    +                $this->label                        = $obj->label;
    +                $this->description                    = $obj->description;
    +                $this->url                            = $obj->url;
    +                $this->note_private                    = $obj->note_private;
    +                $this->note                            = $obj->note_private;  // deprecated
     
    -				$this->type							= $obj->fk_product_type;
    -				$this->status						= $obj->tosell;
    -				$this->status_buy					= $obj->tobuy;
    -				$this->status_batch					= $obj->tobatch;
    +                $this->type                            = $obj->fk_product_type;
    +                $this->status                        = $obj->tosell;
    +                $this->status_buy                    = $obj->tobuy;
    +                $this->status_batch                    = $obj->tobatch;
     
    -				$this->customcode					= $obj->customcode;
    -				$this->country_id					= $obj->fk_country;
    -				$this->country_code					= getCountry($this->country_id,2,$this->db);
    -				$this->price						= $obj->price;
    -				$this->price_ttc					= $obj->price_ttc;
    -				$this->price_min					= $obj->price_min;
    -				$this->price_min_ttc				= $obj->price_min_ttc;
    -				$this->price_base_type				= $obj->price_base_type;
    -				$this->cost_price					= $obj->cost_price;
    -				$this->default_vat_code				= $obj->default_vat_code;
    -				$this->tva_tx						= $obj->tva_tx;
    -				//! French VAT NPR
    -				$this->tva_npr						= $obj->tva_npr;
    -				$this->recuperableonly				= $obj->tva_npr;       // For backward compatibility
    -				//! Local taxes
    -				$this->localtax1_tx					= $obj->localtax1_tx;
    -				$this->localtax2_tx					= $obj->localtax2_tx;
    -				$this->localtax1_type				= $obj->localtax1_type;
    -				$this->localtax2_type				= $obj->localtax2_type;
    +                $this->customcode                    = $obj->customcode;
    +                $this->country_id                    = $obj->fk_country;
    +                $this->country_code                    = getCountry($this->country_id, 2, $this->db);
    +                $this->price                        = $obj->price;
    +                $this->price_ttc                    = $obj->price_ttc;
    +                $this->price_min                    = $obj->price_min;
    +                $this->price_min_ttc                = $obj->price_min_ttc;
    +                $this->price_base_type                = $obj->price_base_type;
    +                $this->cost_price                    = $obj->cost_price;
    +                $this->default_vat_code                = $obj->default_vat_code;
    +                $this->tva_tx                        = $obj->tva_tx;
    +                //! French VAT NPR
    +                $this->tva_npr                        = $obj->tva_npr;
    +                $this->recuperableonly                = $obj->tva_npr;       // For backward compatibility
    +                //! Local taxes
    +                $this->localtax1_tx                    = $obj->localtax1_tx;
    +                $this->localtax2_tx                    = $obj->localtax2_tx;
    +                $this->localtax1_type                = $obj->localtax1_type;
    +                $this->localtax2_type                = $obj->localtax2_type;
     
    -				$this->finished						= $obj->finished;
    -				$this->duration						= $obj->duration;
    -				$this->duration_value				= substr($obj->duration,0,dol_strlen($obj->duration)-1);
    -				$this->duration_unit				= substr($obj->duration,-1);
    -				$this->canvas						= $obj->canvas;
    -				$this->weight						= $obj->weight;
    -				$this->weight_units					= $obj->weight_units;
    -				$this->length						= $obj->length;
    -				$this->length_units					= $obj->length_units;
    -				$this->width						= $obj->width;
    -				$this->width_units					= $obj->width_units;
    -				$this->height						= $obj->height;
    -				$this->height_units					= $obj->height_units;
    +                $this->finished                        = $obj->finished;
    +                $this->duration                        = $obj->duration;
    +                $this->duration_value                = substr($obj->duration, 0, dol_strlen($obj->duration)-1);
    +                $this->duration_unit                = substr($obj->duration, -1);
    +                $this->canvas                        = $obj->canvas;
    +                $this->weight                        = $obj->weight;
    +                $this->weight_units                    = $obj->weight_units;
    +                $this->length                        = $obj->length;
    +                $this->length_units                    = $obj->length_units;
    +                $this->width                        = $obj->width;
    +                $this->width_units                    = $obj->width_units;
    +                $this->height                        = $obj->height;
    +                $this->height_units                    = $obj->height_units;
     
    -				$this->surface						= $obj->surface;
    -				$this->surface_units				= $obj->surface_units;
    -				$this->volume						= $obj->volume;
    -				$this->volume_units					= $obj->volume_units;
    -				$this->barcode						= $obj->barcode;
    -				$this->barcode_type					= $obj->fk_barcode_type;
    +                $this->surface                        = $obj->surface;
    +                $this->surface_units                = $obj->surface_units;
    +                $this->volume                        = $obj->volume;
    +                $this->volume_units                    = $obj->volume_units;
    +                $this->barcode                        = $obj->barcode;
    +                $this->barcode_type                    = $obj->fk_barcode_type;
     
    -				$this->accountancy_code_buy			= $obj->accountancy_code_buy;
    -				$this->accountancy_code_sell		= $obj->accountancy_code_sell;
    -				$this->accountancy_code_sell_intra	= $obj->accountancy_code_sell_intra;
    -				$this->accountancy_code_sell_export	= $obj->accountancy_code_sell_export;
    +                $this->accountancy_code_buy            = $obj->accountancy_code_buy;
    +                $this->accountancy_code_sell        = $obj->accountancy_code_sell;
    +                $this->accountancy_code_sell_intra    = $obj->accountancy_code_sell_intra;
    +                $this->accountancy_code_sell_export    = $obj->accountancy_code_sell_export;
     
    -				$this->fk_default_warehouse			= $obj->fk_default_warehouse;
    -				$this->seuil_stock_alerte			= $obj->seuil_stock_alerte;
    -				$this->desiredstock					= $obj->desiredstock;
    -				$this->stock_reel					= $obj->stock;
    -				$this->pmp							= $obj->pmp;
    +                $this->fk_default_warehouse            = $obj->fk_default_warehouse;
    +                $this->seuil_stock_alerte            = $obj->seuil_stock_alerte;
    +                $this->desiredstock                    = $obj->desiredstock;
    +                $this->stock_reel                    = $obj->stock;
    +                $this->pmp                            = $obj->pmp;
     
    -				$this->date_creation				= $obj->datec;
    -				$this->date_modification			= $obj->tms;
    -				$this->import_key					= $obj->import_key;
    -				$this->entity						= $obj->entity;
    +                $this->date_creation                = $obj->datec;
    +                $this->date_modification            = $obj->tms;
    +                $this->import_key                    = $obj->import_key;
    +                $this->entity                        = $obj->entity;
     
    -				$this->ref_ext						= $obj->ref_ext;
    -				$this->fk_price_expression			= $obj->fk_price_expression;
    -				$this->fk_unit						= $obj->fk_unit;
    -				$this->price_autogen				= $obj->price_autogen;
    +                $this->ref_ext                        = $obj->ref_ext;
    +                $this->fk_price_expression            = $obj->fk_price_expression;
    +                $this->fk_unit                        = $obj->fk_unit;
    +                $this->price_autogen                = $obj->price_autogen;
     
    -				$this->db->free($resql);
    +                $this->db->free($resql);
     
    -				// Retreive all extrafield
    -				// fetch optionals attributes and labels
    -				$this->fetch_optionals();
    +                // Retreive all extrafield
    +                // fetch optionals attributes and labels
    +                $this->fetch_optionals();
     
    -				// multilangs
    -				if (! empty($conf->global->MAIN_MULTILANGS)) $this->getMultiLangs();
    +                // multilangs
    +                if (! empty($conf->global->MAIN_MULTILANGS)) { $this->getMultiLangs();
    +                }
     
    -				// Load multiprices array
    -				if (! empty($conf->global->PRODUIT_MULTIPRICES))				// prices per segment
    -				{
    -					for ($i=1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++)
    -					{
    -						$sql = "SELECT price, price_ttc, price_min, price_min_ttc,";
    -						$sql.= " price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid, recuperableonly";
    -						$sql.= " FROM ".MAIN_DB_PREFIX."product_price";
    -						$sql.= " WHERE entity IN (".getEntity('productprice').")";
    -						$sql.= " AND price_level=".$i;
    -						$sql.= " AND fk_product = ".$this->id;
    -						$sql.= " ORDER BY date_price DESC, rowid DESC";
    -						$sql.= " LIMIT 1";
    -						$resql = $this->db->query($sql);
    -						if ($resql)
    -						{
    -							$result = $this->db->fetch_array($resql);
    -
    -							$this->multiprices[$i]=$result["price"];
    -							$this->multiprices_ttc[$i]=$result["price_ttc"];
    -							$this->multiprices_min[$i]=$result["price_min"];
    -							$this->multiprices_min_ttc[$i]=$result["price_min_ttc"];
    -							$this->multiprices_base_type[$i]=$result["price_base_type"];
    -							// Next two fields are used only if PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL is on
    -							$this->multiprices_tva_tx[$i]=$result["tva_tx"];     // TODO Add ' ('.$result['default_vat_code'].')'
    -							$this->multiprices_recuperableonly[$i]=$result["recuperableonly"];
    -
    -							// Price by quantity
    -							/*
    -							$this->prices_by_qty[$i]=$result["price_by_qty"];
    -							$this->prices_by_qty_id[$i]=$result["rowid"];
    -							// Récuperation de la liste des prix selon qty si flag positionné
    -							if ($this->prices_by_qty[$i] == 1)
    -							{
    -								$sql = "SELECT rowid, price, unitprice, quantity, remise_percent, remise, price_base_type";
    -								$sql.= " FROM ".MAIN_DB_PREFIX."product_price_by_qty";
    -								$sql.= " WHERE fk_product_price = ".$this->prices_by_qty_id[$i];
    -								$sql.= " ORDER BY quantity ASC";
    -								$resultat=array();
    -								$resql = $this->db->query($sql);
    -								if ($resql)
    -								{
    -									$ii=0;
    -									while ($result= $this->db->fetch_array($resql)) {
    -										$resultat[$ii]=array();
    -										$resultat[$ii]["rowid"]=$result["rowid"];
    -										$resultat[$ii]["price"]= $result["price"];
    -										$resultat[$ii]["unitprice"]= $result["unitprice"];
    -										$resultat[$ii]["quantity"]= $result["quantity"];
    -										$resultat[$ii]["remise_percent"]= $result["remise_percent"];
    -										$resultat[$ii]["remise"]= $result["remise"];					// deprecated
    -										$resultat[$ii]["price_base_type"]= $result["price_base_type"];
    -										$ii++;
    -									}
    -									$this->prices_by_qty_list[$i]=$resultat;
    -								}
    -								else
    -								{
    -									dol_print_error($this->db);
    -									return -1;
    -								}
    -							}*/
    -						}
    -						else
    -						{
    -							dol_print_error($this->db);
    -							return -1;
    -						}
    -					}
    -				}
    -				elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))			// prices per customers
    -				{
    -					// Nothing loaded by default. List may be very long.
    -				}
    -				else if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY))	// prices per quantity
    -				{
    -					$sql = "SELECT price, price_ttc, price_min, price_min_ttc,";
    -					$sql.= " price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid";
    -					$sql.= " FROM ".MAIN_DB_PREFIX."product_price";
    -					$sql.= " WHERE fk_product = ".$this->id;
    -					$sql.= " ORDER BY date_price DESC, rowid DESC";
    -					$sql.= " LIMIT 1";
    -					$resql = $this->db->query($sql);
    -					if ($resql)
    -					{
    -						$result = $this->db->fetch_array($resql);
    -
    -						// Price by quantity
    -						$this->prices_by_qty[0]=$result["price_by_qty"];
    -						$this->prices_by_qty_id[0]=$result["rowid"];
    -						// Récuperation de la liste des prix selon qty si flag positionné
    -						if ($this->prices_by_qty[0] == 1)
    -						{
    -							$sql = "SELECT rowid,price, unitprice, quantity, remise_percent, remise, remise, price_base_type";
    -							$sql.= " FROM ".MAIN_DB_PREFIX."product_price_by_qty";
    -							$sql.= " WHERE fk_product_price = ".$this->prices_by_qty_id[0];
    -							$sql.= " ORDER BY quantity ASC";
    -							$resultat=array();
    -							$resql = $this->db->query($sql);
    -							if ($resql)
    -							{
    -								$ii=0;
    -								while ($result= $this->db->fetch_array($resql)) {
    -									$resultat[$ii]=array();
    -									$resultat[$ii]["rowid"]=$result["rowid"];
    -									$resultat[$ii]["price"]= $result["price"];
    -									$resultat[$ii]["unitprice"]= $result["unitprice"];
    -									$resultat[$ii]["quantity"]= $result["quantity"];
    -									$resultat[$ii]["remise_percent"]= $result["remise_percent"];
    -									//$resultat[$ii]["remise"]= $result["remise"];					// deprecated
    -									$resultat[$ii]["price_base_type"]= $result["price_base_type"];
    -									$ii++;
    -								}
    -								$this->prices_by_qty_list[0]=$resultat;
    -							}
    -							else
    -							{
    -								dol_print_error($this->db);
    -								return -1;
    -							}
    -						}
    -					}
    -					else
    -					{
    -						dol_print_error($this->db);
    -						return -1;
    -					}
    -				}
    -				else if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES))	// prices per customer and quantity
    -				{
    -					for ($i=1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++)
    -					{
    -						$sql = "SELECT price, price_ttc, price_min, price_min_ttc,";
    -						$sql.= " price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid, recuperableonly";
    -						$sql.= " FROM ".MAIN_DB_PREFIX."product_price";
    -						$sql.= " WHERE entity IN (".getEntity('productprice').")";
    -						$sql.= " AND price_level=".$i;
    -						$sql.= " AND fk_product = ".$this->id;
    -						$sql.= " ORDER BY date_price DESC, rowid DESC";
    -						$sql.= " LIMIT 1";
    -						$resql = $this->db->query($sql);
    -						if ($resql)
    -						{
    -							$result = $this->db->fetch_array($resql);
    -
    -							$this->multiprices[$i]=$result["price"];
    -							$this->multiprices_ttc[$i]=$result["price_ttc"];
    -							$this->multiprices_min[$i]=$result["price_min"];
    -							$this->multiprices_min_ttc[$i]=$result["price_min_ttc"];
    -							$this->multiprices_base_type[$i]=$result["price_base_type"];
    -							// Next two fields are used only if PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL is on
    -							$this->multiprices_tva_tx[$i]=$result["tva_tx"];     // TODO Add ' ('.$result['default_vat_code'].')'
    -							$this->multiprices_recuperableonly[$i]=$result["recuperableonly"];
    -
    -							// Price by quantity
    -							$this->prices_by_qty[$i]=$result["price_by_qty"];
    -							$this->prices_by_qty_id[$i]=$result["rowid"];
    -							// Récuperation de la liste des prix selon qty si flag positionné
    -							if ($this->prices_by_qty[$i] == 1)
    -							{
    -								$sql = "SELECT rowid, price, unitprice, quantity, remise_percent, remise, price_base_type";
    -								$sql.= " FROM ".MAIN_DB_PREFIX."product_price_by_qty";
    -								$sql.= " WHERE fk_product_price = ".$this->prices_by_qty_id[$i];
    -								$sql.= " ORDER BY quantity ASC";
    -								$resultat=array();
    -								$resql = $this->db->query($sql);
    -								if ($resql)
    -								{
    -									$ii=0;
    -									while ($result= $this->db->fetch_array($resql)) {
    -										$resultat[$ii]=array();
    -										$resultat[$ii]["rowid"]=$result["rowid"];
    -										$resultat[$ii]["price"]= $result["price"];
    -										$resultat[$ii]["unitprice"]= $result["unitprice"];
    -										$resultat[$ii]["quantity"]= $result["quantity"];
    -										$resultat[$ii]["remise_percent"]= $result["remise_percent"];
    -										$resultat[$ii]["remise"]= $result["remise"];					// deprecated
    -										$resultat[$ii]["price_base_type"]= $result["price_base_type"];
    -										$ii++;
    -									}
    -									$this->prices_by_qty_list[$i]=$resultat;
    -								}
    -								else
    -								{
    -									dol_print_error($this->db);
    -									return -1;
    -								}
    -							}
    -						}
    -						else
    -						{
    -							dol_print_error($this->db);
    -							return -1;
    -						}
    -					}
    -				}
    -
    -                if (!empty($conf->dynamicprices->enabled) && !empty($this->fk_price_expression) && empty($ignore_expression))
    +                // Load multiprices array
    +                if (! empty($conf->global->PRODUIT_MULTIPRICES))                // prices per segment
                     {
    -					require_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php';
    -                	$priceparser = new PriceParser($this->db);
    -                    $price_result = $priceparser->parseProduct($this);
    -                    if ($price_result >= 0)
    +                    for ($i=1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++)
                         {
    -                        $this->price = $price_result;
    -                        // Calculate the VAT
    -						$this->price_ttc = price2num($this->price) * (1 + ($this->tva_tx / 100));
    -						$this->price_ttc = price2num($this->price_ttc,'MU');
    +                        $sql = "SELECT price, price_ttc, price_min, price_min_ttc,";
    +                        $sql.= " price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid, recuperableonly";
    +                        $sql.= " FROM ".MAIN_DB_PREFIX."product_price";
    +                        $sql.= " WHERE entity IN (".getEntity('productprice').")";
    +                        $sql.= " AND price_level=".$i;
    +                        $sql.= " AND fk_product = ".$this->id;
    +                        $sql.= " ORDER BY date_price DESC, rowid DESC";
    +                        $sql.= " LIMIT 1";
    +                        $resql = $this->db->query($sql);
    +                        if ($resql) {
    +                            $result = $this->db->fetch_array($resql);
    +
    +                            $this->multiprices[$i]=$result["price"];
    +                            $this->multiprices_ttc[$i]=$result["price_ttc"];
    +                            $this->multiprices_min[$i]=$result["price_min"];
    +                            $this->multiprices_min_ttc[$i]=$result["price_min_ttc"];
    +                            $this->multiprices_base_type[$i]=$result["price_base_type"];
    +                            // Next two fields are used only if PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL is on
    +                            $this->multiprices_tva_tx[$i]=$result["tva_tx"];     // TODO Add ' ('.$result['default_vat_code'].')'
    +                            $this->multiprices_recuperableonly[$i]=$result["recuperableonly"];
    +
    +                            // Price by quantity
    +                            /*
    +                            $this->prices_by_qty[$i]=$result["price_by_qty"];
    +                            $this->prices_by_qty_id[$i]=$result["rowid"];
    +                            // Récuperation de la liste des prix selon qty si flag positionné
    +                            if ($this->prices_by_qty[$i] == 1)
    +                            {
    +                            $sql = "SELECT rowid, price, unitprice, quantity, remise_percent, remise, price_base_type";
    +                            $sql.= " FROM ".MAIN_DB_PREFIX."product_price_by_qty";
    +                            $sql.= " WHERE fk_product_price = ".$this->prices_by_qty_id[$i];
    +                            $sql.= " ORDER BY quantity ASC";
    +                            $resultat=array();
    +                            $resql = $this->db->query($sql);
    +                            if ($resql)
    +                            {
    +                            $ii=0;
    +                            while ($result= $this->db->fetch_array($resql)) {
    +                            $resultat[$ii]=array();
    +                            $resultat[$ii]["rowid"]=$result["rowid"];
    +                            $resultat[$ii]["price"]= $result["price"];
    +                            $resultat[$ii]["unitprice"]= $result["unitprice"];
    +                            $resultat[$ii]["quantity"]= $result["quantity"];
    +                            $resultat[$ii]["remise_percent"]= $result["remise_percent"];
    +                            $resultat[$ii]["remise"]= $result["remise"];                    // deprecated
    +                            $resultat[$ii]["price_base_type"]= $result["price_base_type"];
    +                            $ii++;
    +                            }
    +                            $this->prices_by_qty_list[$i]=$resultat;
    +                            }
    +                            else
    +                            {
    +                            dol_print_error($this->db);
    +                            return -1;
    +                            }
    +                            }*/
    +                        }
    +                        else
    +                        {
    +                            dol_print_error($this->db);
    +                            return -1;
    +                        }
    +                    }
    +                }
    +                elseif (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))            // prices per customers
    +                {
    +                    // Nothing loaded by default. List may be very long.
    +                }
    +                else if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY))    // prices per quantity
    +                {
    +                    $sql = "SELECT price, price_ttc, price_min, price_min_ttc,";
    +                    $sql.= " price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid";
    +                    $sql.= " FROM ".MAIN_DB_PREFIX."product_price";
    +                    $sql.= " WHERE fk_product = ".$this->id;
    +                    $sql.= " ORDER BY date_price DESC, rowid DESC";
    +                    $sql.= " LIMIT 1";
    +                    $resql = $this->db->query($sql);
    +                    if ($resql) {
    +                        $result = $this->db->fetch_array($resql);
    +
    +                        // Price by quantity
    +                        $this->prices_by_qty[0]=$result["price_by_qty"];
    +                        $this->prices_by_qty_id[0]=$result["rowid"];
    +                        // Récuperation de la liste des prix selon qty si flag positionné
    +                        if ($this->prices_by_qty[0] == 1) {
    +                            $sql = "SELECT rowid,price, unitprice, quantity, remise_percent, remise, remise, price_base_type";
    +                            $sql.= " FROM ".MAIN_DB_PREFIX."product_price_by_qty";
    +                            $sql.= " WHERE fk_product_price = ".$this->prices_by_qty_id[0];
    +                            $sql.= " ORDER BY quantity ASC";
    +                            $resultat=array();
    +                            $resql = $this->db->query($sql);
    +                            if ($resql) {
    +                                      $ii=0;
    +                                while ($result= $this->db->fetch_array($resql)) {
    +                                    $resultat[$ii]=array();
    +                                    $resultat[$ii]["rowid"]=$result["rowid"];
    +                                    $resultat[$ii]["price"]= $result["price"];
    +                                    $resultat[$ii]["unitprice"]= $result["unitprice"];
    +                                    $resultat[$ii]["quantity"]= $result["quantity"];
    +                                    $resultat[$ii]["remise_percent"]= $result["remise_percent"];
    +                                    //$resultat[$ii]["remise"]= $result["remise"];                    // deprecated
    +                                    $resultat[$ii]["price_base_type"]= $result["price_base_type"];
    +                                    $ii++;
    +                                }
    +                                    $this->prices_by_qty_list[0]=$resultat;
    +                            }
    +                            else
    +                            {
    +                                    dol_print_error($this->db);
    +                                    return -1;
    +                            }
    +                        }
    +                    }
    +                    else
    +                    {
    +                        dol_print_error($this->db);
    +                        return -1;
    +                    }
    +                }
    +                else if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES))    // prices per customer and quantity
    +                {
    +                    for ($i=1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++)
    +                    {
    +                        $sql = "SELECT price, price_ttc, price_min, price_min_ttc,";
    +                        $sql.= " price_base_type, tva_tx, default_vat_code, tosell, price_by_qty, rowid, recuperableonly";
    +                        $sql.= " FROM ".MAIN_DB_PREFIX."product_price";
    +                        $sql.= " WHERE entity IN (".getEntity('productprice').")";
    +                        $sql.= " AND price_level=".$i;
    +                        $sql.= " AND fk_product = ".$this->id;
    +                        $sql.= " ORDER BY date_price DESC, rowid DESC";
    +                        $sql.= " LIMIT 1";
    +                        $resql = $this->db->query($sql);
    +                        if ($resql) {
    +                            $result = $this->db->fetch_array($resql);
    +
    +                            $this->multiprices[$i]=$result["price"];
    +                            $this->multiprices_ttc[$i]=$result["price_ttc"];
    +                            $this->multiprices_min[$i]=$result["price_min"];
    +                            $this->multiprices_min_ttc[$i]=$result["price_min_ttc"];
    +                            $this->multiprices_base_type[$i]=$result["price_base_type"];
    +                            // Next two fields are used only if PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL is on
    +                            $this->multiprices_tva_tx[$i]=$result["tva_tx"];     // TODO Add ' ('.$result['default_vat_code'].')'
    +                            $this->multiprices_recuperableonly[$i]=$result["recuperableonly"];
    +
    +                            // Price by quantity
    +                            $this->prices_by_qty[$i]=$result["price_by_qty"];
    +                            $this->prices_by_qty_id[$i]=$result["rowid"];
    +                            // Récuperation de la liste des prix selon qty si flag positionné
    +                            if ($this->prices_by_qty[$i] == 1) {
    +                                         $sql = "SELECT rowid, price, unitprice, quantity, remise_percent, remise, price_base_type";
    +                                         $sql.= " FROM ".MAIN_DB_PREFIX."product_price_by_qty";
    +                                         $sql.= " WHERE fk_product_price = ".$this->prices_by_qty_id[$i];
    +                                         $sql.= " ORDER BY quantity ASC";
    +                                         $resultat=array();
    +                                         $resql = $this->db->query($sql);
    +                                if ($resql) {
    +                                    $ii=0;
    +                                    while ($result= $this->db->fetch_array($resql)) {
    +                                                       $resultat[$ii]=array();
    +                                                       $resultat[$ii]["rowid"]=$result["rowid"];
    +                                                       $resultat[$ii]["price"]= $result["price"];
    +                                                       $resultat[$ii]["unitprice"]= $result["unitprice"];
    +                                                       $resultat[$ii]["quantity"]= $result["quantity"];
    +                                                       $resultat[$ii]["remise_percent"]= $result["remise_percent"];
    +                                                       $resultat[$ii]["remise"]= $result["remise"];                    // deprecated
    +                                                       $resultat[$ii]["price_base_type"]= $result["price_base_type"];
    +                                                       $ii++;
    +                                    }
    +                                    $this->prices_by_qty_list[$i]=$resultat;
    +                                }
    +                                else
    +                                         {
    +                                    dol_print_error($this->db);
    +                                    return -1;
    +                                }
    +                            }
    +                        }
    +                        else
    +                        {
    +                            dol_print_error($this->db);
    +                            return -1;
    +                        }
                         }
                     }
     
    -				// We should not load stock during the fetch. If someone need stock of product, he must call load_stock after fetching product.
    -				// Instead we just init the stock_warehouse array
    -				$this->stock_warehouse = array();
    -
    -				return 1;
    -			}
    -			else
    -			{
    -				return 0;
    -			}
    -		}
    -		else
    -		{
    -			dol_print_error($this->db);
    -			return -1;
    -		}
    -	}
    -
    -
    -	/**
    -	 *  Charge tableau des stats propale pour le produit/service
    -	 *
    -	 *  @param    int	$socid      Id societe
    -	 *  @return   array       		Tableau des stats
    -	 */
    -	function load_stats_propale($socid=0)
    -	{
    -		global $conf;
    -		global $user;
    -
    -		$sql = "SELECT COUNT(DISTINCT p.fk_soc) as nb_customers, COUNT(DISTINCT p.rowid) as nb,";
    -		$sql.= " COUNT(pd.rowid) as nb_rows, SUM(pd.qty) as qty";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."propaldet as pd";
    -		$sql.= ", ".MAIN_DB_PREFIX."propal as p";
    -		$sql.= ", ".MAIN_DB_PREFIX."societe as s";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE p.rowid = pd.fk_propal";
    -		$sql.= " AND p.fk_soc = s.rowid";
    -		$sql.= " AND p.entity IN (".getEntity('propal').")";
    -		$sql.= " AND pd.fk_product = ".$this->id;
    -		if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		//$sql.= " AND pr.fk_statut != 0";
    -		if ($socid > 0)	$sql.= " AND p.fk_soc = ".$socid;
    -
    -		$result = $this->db->query($sql);
    -		if ( $result )
    -		{
    -			$obj=$this->db->fetch_object($result);
    -			$this->stats_propale['customers']=$obj->nb_customers;
    -			$this->stats_propale['nb']=$obj->nb;
    -			$this->stats_propale['rows']=$obj->nb_rows;
    -			$this->stats_propale['qty']=$obj->qty?$obj->qty:0;
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error();
    -			return -1;
    -		}
    -	}
    -
    -
    -	/**
    -	 *  Charge tableau des stats propale pour le produit/service
    -	 *
    -	 *  @param    int	$socid      Id thirdparty
    -	 *  @return   array       		Tableau des stats
    -	 */
    -	function load_stats_proposal_supplier($socid=0)
    -	{
    -		global $conf;
    -		global $user;
    -
    -		$sql = "SELECT COUNT(DISTINCT p.fk_soc) as nb_suppliers, COUNT(DISTINCT p.rowid) as nb,";
    -		$sql.= " COUNT(pd.rowid) as nb_rows, SUM(pd.qty) as qty";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."supplier_proposaldet as pd";
    -		$sql.= ", ".MAIN_DB_PREFIX."supplier_proposal as p";
    -		$sql.= ", ".MAIN_DB_PREFIX."societe as s";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE p.rowid = pd.fk_supplier_proposal";
    -		$sql.= " AND p.fk_soc = s.rowid";
    -		$sql.= " AND p.entity IN (".getEntity('supplier_proposal').")";
    -		$sql.= " AND pd.fk_product = ".$this->id;
    -		if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		//$sql.= " AND pr.fk_statut != 0";
    -		if ($socid > 0)	$sql.= " AND p.fk_soc = ".$socid;
    -
    -		$result = $this->db->query($sql);
    -		if ( $result )
    -		{
    -			$obj=$this->db->fetch_object($result);
    -			$this->stats_proposal_supplier['suppliers']=$obj->nb_suppliers;
    -			$this->stats_proposal_supplier['nb']=$obj->nb;
    -			$this->stats_proposal_supplier['rows']=$obj->nb_rows;
    -			$this->stats_proposal_supplier['qty']=$obj->qty?$obj->qty:0;
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error();
    -			return -1;
    -		}
    -	}
    -
    -
    -	/**
    -	 *  Charge tableau des stats commande client pour le produit/service
    -	 *
    -	 *  @param    int    $socid           Id societe pour filtrer sur une societe
    -	 *  @param    string $filtrestatut    Id statut pour filtrer sur un statut
    -	 *  @param    int    $forVirtualStock Ignore rights filter for virtual stock calculation.
    -	 *  @return   array                  Array of stats (nb=nb of order, qty=qty ordered)
    -	 */
    -	function load_stats_commande($socid=0,$filtrestatut='', $forVirtualStock = 0)
    -	{
    -		global $conf,$user;
    -
    -		$sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_customers, COUNT(DISTINCT c.rowid) as nb,";
    -		$sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd";
    -		$sql.= ", ".MAIN_DB_PREFIX."commande as c";
    -		$sql.= ", ".MAIN_DB_PREFIX."societe as s";
    -		if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE c.rowid = cd.fk_commande";
    -		$sql.= " AND c.fk_soc = s.rowid";
    -		$sql.= " AND c.entity IN (".getEntity('commande').")";
    -		$sql.= " AND cd.fk_product = ".$this->id;
    -		if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0)	$sql.= " AND c.fk_soc = ".$socid;
    -		if ($filtrestatut <> '') $sql.= " AND c.fk_statut in (".$filtrestatut.")";
    -
    -		$result = $this->db->query($sql);
    -		if ( $result )
    -		{
    -			$obj=$this->db->fetch_object($result);
    -			$this->stats_commande['customers']=$obj->nb_customers;
    -			$this->stats_commande['nb']=$obj->nb;
    -			$this->stats_commande['rows']=$obj->nb_rows;
    -			$this->stats_commande['qty']=$obj->qty?$obj->qty:0;
    -
    -			// if it's a virtual product, maybe it is in order by extension
    -			if (! empty($conf->global->ORDER_ADD_ORDERS_WITH_PARENT_PROD_IF_INCDEC))
    -			{
    -				$TFather = $this->getFather();
    -				if (is_array($TFather) && !empty($TFather)) {
    -					foreach($TFather as &$fatherData) {
    -						$pFather = new Product($this->db);
    -						$pFather->id = $fatherData['id'];
    -						$qtyCoef = $fatherData['qty'];
    -
    -						if ($fatherData['incdec']) {
    -							$pFather->load_stats_commande($socid, $filtrestatut);
    -
    -							$this->stats_commande['customers']+=$pFather->stats_commande['customers'];
    -							$this->stats_commande['nb']+=$pFather->stats_commande['nb'];
    -							$this->stats_commande['rows']+=$pFather->stats_commande['rows'];
    -							$this->stats_commande['qty']+=$pFather->stats_commande['qty'] * $qtyCoef;
    -
    -						}
    -					}
    -				}
    -			}
    -
    -			// If stock decrease is on invoice validation, the theorical stock continue to
    -			// count the orders to ship in theorical stock when some are already removed b invoice validation.
    -			// If option DECREASE_ONLY_UNINVOICEDPRODUCTS is on, we make a compensation.
    -			if (! empty($conf->global->STOCK_CALCULATE_ON_BILL))
    -			{
    -				if (! empty($conf->global->DECREASE_ONLY_UNINVOICEDPRODUCTS))
    -				{
    -					$adeduire = 0;
    -					$sql = "SELECT sum(fd.qty) as count FROM ".MAIN_DB_PREFIX."facturedet fd ";
    -					$sql .= " JOIN ".MAIN_DB_PREFIX."facture f ON fd.fk_facture = f.rowid ";
    -					$sql .= " JOIN ".MAIN_DB_PREFIX."element_element el ON el.fk_target = f.rowid and el.targettype = 'facture' and sourcetype = 'commande'";
    -					$sql .= " JOIN ".MAIN_DB_PREFIX."commande c ON el.fk_source = c.rowid ";
    -					$sql .= " WHERE c.fk_statut IN (".$filtrestatut.") AND c.facture = 0 AND fd.fk_product = ".$this->id;
    -					dol_syslog(__METHOD__.":: sql $sql", LOG_NOTICE);
    -
    -					$resql = $this->db->query($sql);
    -					if ( $resql )
    -					{
    -						if ($this->db->num_rows($resql) > 0)
    -						{
    -							$obj = $this->db->fetch_object($resql);
    -							$adeduire += $obj->count;
    -						}
    -					}
    -
    -					$this->stats_commande['qty'] -= $adeduire;
    -				}
    -			}
    -
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error();
    -			return -1;
    -		}
    -	}
    -
    -	/**
    -	 *  Charge tableau des stats commande fournisseur pour le produit/service
    -	 *
    -	 *  @param    int      $socid           Id societe pour filtrer sur une societe
    -	 *  @param    string   $filtrestatut    Id des statuts pour filtrer sur des statuts
    -	 *  @param    int      $forVirtualStock Ignore rights filter for virtual stock calculation.
    -	 *  @return   array                     Tableau des stats
    -	 */
    -	function load_stats_commande_fournisseur($socid=0,$filtrestatut='', $forVirtualStock = 0)
    -	{
    -		global $conf,$user;
    -
    -		$sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_suppliers, COUNT(DISTINCT c.rowid) as nb,";
    -		$sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as cd";
    -		$sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as c";
    -		$sql.= ", ".MAIN_DB_PREFIX."societe as s";
    -		if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE c.rowid = cd.fk_commande";
    -		$sql.= " AND c.fk_soc = s.rowid";
    -		$sql.= " AND c.entity IN (".getEntity('supplier_order').")";
    -		$sql.= " AND cd.fk_product = ".$this->id;
    -		if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0) $sql.= " AND c.fk_soc = ".$socid;
    -		if ($filtrestatut != '') $sql.= " AND c.fk_statut in (".$filtrestatut.")"; // Peut valoir 0
    -
    -		$result = $this->db->query($sql);
    -		if ( $result )
    -		{
    -			$obj=$this->db->fetch_object($result);
    -			$this->stats_commande_fournisseur['suppliers']=$obj->nb_suppliers;
    -			$this->stats_commande_fournisseur['nb']=$obj->nb;
    -			$this->stats_commande_fournisseur['rows']=$obj->nb_rows;
    -			$this->stats_commande_fournisseur['qty']=$obj->qty?$obj->qty:0;
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error().' sql='.$sql;
    -			return -1;
    -		}
    -	}
    -
    -	/**
    -	 *  Charge tableau des stats expedition client pour le produit/service
    -	 *
    -	 *  @param    int    $socid           Id societe pour filtrer sur une societe
    -	 *  @param    string $filtrestatut    Id statut pour filtrer sur un statut
    -	 *  @param    int    $forVirtualStock Ignore rights filter for virtual stock calculation.
    -	 *  @return   array                   Tableau des stats
    -	 */
    -	function load_stats_sending($socid=0,$filtrestatut='', $forVirtualStock = 0)
    -	{
    -		global $conf,$user;
    -
    -		$sql = "SELECT COUNT(DISTINCT e.fk_soc) as nb_customers, COUNT(DISTINCT e.rowid) as nb,";
    -		$sql.= " COUNT(ed.rowid) as nb_rows, SUM(ed.qty) as qty";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."expeditiondet as ed";
    -		$sql.= ", ".MAIN_DB_PREFIX."commandedet as cd";
    -		$sql.= ", ".MAIN_DB_PREFIX."commande as c";
    -		$sql.= ", ".MAIN_DB_PREFIX."expedition as e";
    -		$sql.= ", ".MAIN_DB_PREFIX."societe as s";
    -		if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE e.rowid = ed.fk_expedition";
    -		$sql.= " AND c.rowid = cd.fk_commande";
    -		$sql.= " AND e.fk_soc = s.rowid";
    -		$sql.= " AND e.entity IN (".getEntity('expedition').")";
    -		$sql.= " AND ed.fk_origin_line = cd.rowid";
    -		$sql.= " AND cd.fk_product = ".$this->id;
    -		if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) $sql.= " AND e.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0)	$sql.= " AND e.fk_soc = ".$socid;
    -		if ($filtrestatut <> '') $sql.= " AND c.fk_statut in (".$filtrestatut.")";
    -
    -		$result = $this->db->query($sql);
    -		if ( $result )
    -		{
    -			$obj=$this->db->fetch_object($result);
    -			$this->stats_expedition['customers']=$obj->nb_customers;
    -			$this->stats_expedition['nb']=$obj->nb;
    -			$this->stats_expedition['rows']=$obj->nb_rows;
    -			$this->stats_expedition['qty']=$obj->qty?$obj->qty:0;
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error();
    -			return -1;
    -		}
    -	}
    -
    -	/**
    -	 *  Charge tableau des stats réception fournisseur pour le produit/service
    -	 *
    -	 *  @param    int    $socid           Id societe pour filtrer sur une societe
    -	 *  @param    string $filtrestatut    Id statut pour filtrer sur un statut
    -	 *  @param    int    $forVirtualStock Ignore rights filter for virtual stock calculation.
    -	 *  @return   array                   Tableau des stats
    -	 */
    -	function load_stats_reception($socid=0,$filtrestatut='', $forVirtualStock = 0)
    -	{
    -		global $conf,$user;
    -
    -		$sql = "SELECT COUNT(DISTINCT cf.fk_soc) as nb_customers, COUNT(DISTINCT cf.rowid) as nb,";
    -		$sql.= " COUNT(fd.rowid) as nb_rows, SUM(fd.qty) as qty";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as fd";
    -		$sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as cf";
    -		$sql.= ", ".MAIN_DB_PREFIX."societe as s";
    -		if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE cf.rowid = fd.fk_commande";
    -		$sql.= " AND cf.fk_soc = s.rowid";
    -		$sql.= " AND cf.entity IN (".getEntity('supplier_order').")";
    -		$sql.= " AND fd.fk_product = ".$this->id;
    -		if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) $sql.= " AND cf.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0)	$sql.= " AND cf.fk_soc = ".$socid;
    -		if ($filtrestatut <> '') $sql.= " AND cf.fk_statut in (".$filtrestatut.")";
    -
    -		$result = $this->db->query($sql);
    -		if ( $result )
    -		{
    -			$obj=$this->db->fetch_object($result);
    -			$this->stats_reception['suppliers']=$obj->nb_customers;
    -			$this->stats_reception['nb']=$obj->nb;
    -			$this->stats_reception['rows']=$obj->nb_rows;
    -			$this->stats_reception['qty']=$obj->qty?$obj->qty:0;
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error();
    -			return -1;
    -		}
    -	}
    -
    -	/**
    -	 *  Charge tableau des stats contrat pour le produit/service
    -	 *
    -	 *  @param    int	$socid      Id societe
    -	 *  @return   array       		Tableau des stats
    -	 */
    -	function load_stats_contrat($socid=0)
    -	{
    -		global $conf;
    -		global $user;
    -
    -		$sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_customers, COUNT(DISTINCT c.rowid) as nb,";
    -		$sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd";
    -		$sql.= ", ".MAIN_DB_PREFIX."contrat as c";
    -		$sql.= ", ".MAIN_DB_PREFIX."societe as s";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE c.rowid = cd.fk_contrat";
    -		$sql.= " AND c.fk_soc = s.rowid";
    -		$sql.= " AND c.entity IN (".getEntity('contract').")";
    -		$sql.= " AND cd.fk_product = ".$this->id;
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		//$sql.= " AND c.statut != 0";
    -		if ($socid > 0)	$sql.= " AND c.fk_soc = ".$socid;
    -
    -		$result = $this->db->query($sql);
    -		if ( $result )
    -		{
    -			$obj=$this->db->fetch_object($result);
    -			$this->stats_contrat['customers']=$obj->nb_customers;
    -			$this->stats_contrat['nb']=$obj->nb;
    -			$this->stats_contrat['rows']=$obj->nb_rows;
    -			$this->stats_contrat['qty']=$obj->qty?$obj->qty:0;
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error().' sql='.$sql;
    -			return -1;
    -		}
    -	}
    -
    -	/**
    -	 *  Charge tableau des stats facture pour le produit/service
    -	 *
    -	 *  @param    int		$socid      Id societe
    -	 *  @return   array       			Tableau des stats
    -	 */
    -	function load_stats_facture($socid=0)
    -	{
    -		global $conf;
    -		global $user;
    -
    -		$sql = "SELECT COUNT(DISTINCT f.fk_soc) as nb_customers, COUNT(DISTINCT f.rowid) as nb,";
    -		$sql.= " COUNT(fd.rowid) as nb_rows, SUM(fd.qty) as qty";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."facturedet as fd";
    -		$sql.= ", ".MAIN_DB_PREFIX."facture as f";
    -		$sql.= ", ".MAIN_DB_PREFIX."societe as s";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE f.rowid = fd.fk_facture";
    -		$sql.= " AND f.fk_soc = s.rowid";
    -		$sql.= " AND f.entity IN (".getEntity('facture').")";
    -		$sql.= " AND fd.fk_product = ".$this->id;
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		//$sql.= " AND f.fk_statut != 0";
    -		if ($socid > 0)	$sql .= " AND f.fk_soc = ".$socid;
    -
    -		$result = $this->db->query($sql);
    -		if ( $result )
    -		{
    -			$obj=$this->db->fetch_object($result);
    -			$this->stats_facture['customers']=$obj->nb_customers;
    -			$this->stats_facture['nb']=$obj->nb;
    -			$this->stats_facture['rows']=$obj->nb_rows;
    -			$this->stats_facture['qty']=$obj->qty?$obj->qty:0;
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error();
    -			return -1;
    -		}
    -	}
    -
    -	/**
    -	 *  Charge tableau des stats facture pour le produit/service
    -	 *
    -	 *  @param    int		$socid      Id societe
    -	 *  @return   array       			Tableau des stats
    -	 */
    -	function load_stats_facture_fournisseur($socid=0)
    -	{
    -		global $conf;
    -		global $user;
    -
    -		$sql = "SELECT COUNT(DISTINCT f.fk_soc) as nb_suppliers, COUNT(DISTINCT f.rowid) as nb,";
    -		$sql.= " COUNT(fd.rowid) as nb_rows, SUM(fd.qty) as qty";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn_det as fd";
    -		$sql.= ", ".MAIN_DB_PREFIX."facture_fourn as f";
    -		$sql.= ", ".MAIN_DB_PREFIX."societe as s";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE f.rowid = fd.fk_facture_fourn";
    -		$sql.= " AND f.fk_soc = s.rowid";
    -		$sql.= " AND f.entity IN (".getEntity('facture_fourn').")";
    -		$sql.= " AND fd.fk_product = ".$this->id;
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		//$sql.= " AND f.fk_statut != 0";
    -		if ($socid > 0)	$sql .= " AND f.fk_soc = ".$socid;
    -
    -		$result = $this->db->query($sql);
    -		if ( $result )
    -		{
    -			$obj=$this->db->fetch_object($result);
    -			$this->stats_facture_fournisseur['suppliers']=$obj->nb_suppliers;
    -			$this->stats_facture_fournisseur['nb']=$obj->nb;
    -			$this->stats_facture_fournisseur['rows']=$obj->nb_rows;
    -			$this->stats_facture_fournisseur['qty']=$obj->qty?$obj->qty:0;
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error();
    -			return -1;
    -		}
    -	}
    -
    -	/**
    -	 *  Return an array formated for showing graphs
    -	 *
    -	 *  @param		string	$sql        Request to execute
    -	 *  @param		string	$mode		'byunit'=number of unit, 'bynumber'=nb of entities
    -	 *  @param      int     $year       Year (0=current year)
    -	 *  @return   	array       		<0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    -	 */
    -	function _get_stats($sql, $mode, $year=0)
    -	{
    -		$resql = $this->db->query($sql);
    -		if ($resql)
    -		{
    -			$num = $this->db->num_rows($resql);
    -			$i = 0;
    -			while ($i < $num)
    -			{
    -				$arr = $this->db->fetch_array($resql);
    -				if ($mode == 'byunit')   $tab[$arr[1]] = $arr[0];	// 1st field
    -				if ($mode == 'bynumber') $tab[$arr[1]] = $arr[2];	// 3rd field
    -				$i++;
    -			}
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error().' sql='.$sql;
    -			return -1;
    -		}
    -
    -		if (empty($year))
    -		{
    -		    $year = strftime('%Y',time());
    -		    $month = strftime('%m',time());
    -		}
    -		else
    -		{
    -		    $month=12;    // We imagine we are at end of year, so we get last 12 month before, so all correct year.
    -		}
    -		$result = array();
    -
    -		for ($j = 0 ; $j < 12 ; $j++)
    -		{
    -			$idx=ucfirst(dol_trunc(dol_print_date(dol_mktime(12,0,0,$month,1,$year),"%b"),3,'right','UTF-8',1));
    -			$monthnum=sprintf("%02s",$month);
    -
    -			$result[$j] = array($idx,isset($tab[$year.$month])?$tab[$year.$month]:0);
    -			//            $result[$j] = array($monthnum,isset($tab[$year.$month])?$tab[$year.$month]:0);
    -
    -			$month = "0".($month - 1);
    -			if (dol_strlen($month) == 3)
    -			{
    -				$month = substr($month,1);
    -			}
    -			if ($month == 0)
    -			{
    -				$month = 12;
    -				$year = $year - 1;
    -			}
    -		}
    -
    -		return array_reverse($result);
    -	}
    -
    -
    -	/**
    -	 *  Return nb of units or customers invoices in which product is included
    -	 *
    -	 *  @param  	int		$socid                   Limit count on a particular third party id
    -	 *  @param		string	$mode		             'byunit'=number of unit, 'bynumber'=nb of entities
    -	 *  @param      int     $filteronproducttype     0=To filter on product only, 1=To filter on services only
    -	 *  @param      int     $year                    Year (0=last 12 month)
    -	 *  @param      string  $morefilter              More sql filters
    -	 * 	@return   	array       		             <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    -	 */
    -	function get_nb_vente($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    -	{
    -		global $conf;
    -		global $user;
    -
    -		$sql = "SELECT sum(d.qty), date_format(f.datef, '%Y%m')";
    -		if ($mode == 'bynumber') $sql.= ", count(DISTINCT f.rowid)";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."facturedet as d, ".MAIN_DB_PREFIX."facture as f, ".MAIN_DB_PREFIX."societe as s";
    -		if ($filteronproducttype >= 0) $sql.=", ".MAIN_DB_PREFIX."product as p";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE f.rowid = d.fk_facture";
    -		if ($this->id > 0) $sql.= " AND d.fk_product =".$this->id;
    -		else $sql.=" AND d.fk_product > 0";
    -		if ($filteronproducttype >= 0) $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype;
    -		$sql.= " AND f.fk_soc = s.rowid";
    -		$sql.= " AND f.entity IN (".getEntity('facture').")";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0)	$sql.= " AND f.fk_soc = $socid";
    -		$sql.=$morefilter;
    -		$sql.= " GROUP BY date_format(f.datef,'%Y%m')";
    -		$sql.= " ORDER BY date_format(f.datef,'%Y%m') DESC";
    -
    -		return $this->_get_stats($sql,$mode, $year);
    -	}
    -
    -
    -	/**
    -	 *  Return nb of units or supplier invoices in which product is included
    -	 *
    -	 *  @param  	int		$socid                   Limit count on a particular third party id
    -	 * 	@param		string	$mode		             'byunit'=number of unit, 'bynumber'=nb of entities
    -	 *  @param      int     $filteronproducttype     0=To filter on product only, 1=To filter on services only
    -	 *  @param      int     $year                    Year (0=last 12 month)
    -	 *  @param      string  $morefilter              More sql filters
    -	 * 	@return   	array       		             <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    -	 */
    -	function get_nb_achat($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    -	{
    -		global $conf;
    -		global $user;
    -
    -		$sql = "SELECT sum(d.qty), date_format(f.datef, '%Y%m')";
    -		if ($mode == 'bynumber') $sql.= ", count(DISTINCT f.rowid)";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn_det as d, ".MAIN_DB_PREFIX."facture_fourn as f, ".MAIN_DB_PREFIX."societe as s";
    -        if ($filteronproducttype >= 0) $sql.=", ".MAIN_DB_PREFIX."product as p";
    -        if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE f.rowid = d.fk_facture_fourn";
    -		if ($this->id > 0) $sql.= " AND d.fk_product =".$this->id;
    -		else $sql.=" AND d.fk_product > 0";
    -		if ($filteronproducttype >= 0) $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype;
    -		$sql.= " AND f.fk_soc = s.rowid";
    -		$sql.= " AND f.entity IN (".getEntity('facture_fourn').")";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0)	$sql.= " AND f.fk_soc = $socid";
    -		$sql.=$morefilter;
    -		$sql.= " GROUP BY date_format(f.datef,'%Y%m')";
    -		$sql.= " ORDER BY date_format(f.datef,'%Y%m') DESC";
    -
    -		return $this->_get_stats($sql,$mode, $year);
    -	}
    -
    -	/**
    -	 *  Return nb of units or proposals in which product is included
    -	 *
    -	 *  @param  	int		$socid                   Limit count on a particular third party id
    -	 * 	@param		string	$mode		             'byunit'=number of unit, 'bynumber'=nb of entities
    -	 *  @param      int     $filteronproducttype     0=To filter on product only, 1=To filter on services only
    -	 *  @param      int     $year                    Year (0=last 12 month)
    -	 *  @param      string  $morefilter              More sql filters
    -	 * 	@return   	array       		             <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    -	 */
    -	function get_nb_propal($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    -	{
    -		global $conf;
    -		global $user;
    -
    -		$sql = "SELECT sum(d.qty), date_format(p.datep, '%Y%m')";
    -		if ($mode == 'bynumber') $sql.= ", count(DISTINCT p.rowid)";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."propaldet as d, ".MAIN_DB_PREFIX."propal as p, ".MAIN_DB_PREFIX."societe as s";
    -        if ($filteronproducttype >= 0) $sql.=", ".MAIN_DB_PREFIX."product as prod";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE p.rowid = d.fk_propal";
    -		if ($this->id > 0) $sql.= " AND d.fk_product =".$this->id;
    -		else $sql.=" AND d.fk_product > 0";
    -		if ($filteronproducttype >= 0) $sql.= " AND prod.rowid = d.fk_product AND prod.fk_product_type =".$filteronproducttype;
    -		$sql.= " AND p.fk_soc = s.rowid";
    -		$sql.= " AND p.entity IN (".getEntity('propal').")";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0)	$sql.= " AND p.fk_soc = ".$socid;
    -		$sql.=$morefilter;
    -		$sql.= " GROUP BY date_format(p.datep,'%Y%m')";
    -		$sql.= " ORDER BY date_format(p.datep,'%Y%m') DESC";
    -
    -		return $this->_get_stats($sql,$mode, $year);
    -	}
    -
    -	/**
    -	 *  Return nb of units or proposals in which product is included
    -	 *
    -	 *  @param  	int		$socid                   Limit count on a particular third party id
    -	 * 	@param		string	$mode		             'byunit'=number of unit, 'bynumber'=nb of entities
    -	 *  @param      int     $filteronproducttype     0=To filter on product only, 1=To filter on services only
    -	 *  @param      int     $year                    Year (0=last 12 month)
    -	 *  @param      string  $morefilter              More sql filters
    -	 * 	@return   	array       		             <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    -	 */
    -	function get_nb_propalsupplier($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    -	{
    -		global $conf;
    -		global $user;
    -
    -		$sql = "SELECT sum(d.qty), date_format(p.date_valid, '%Y%m')";
    -		if ($mode == 'bynumber') $sql.= ", count(DISTINCT p.rowid)";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."supplier_proposaldet as d, ".MAIN_DB_PREFIX."supplier_proposal as p, ".MAIN_DB_PREFIX."societe as s";
    -        if ($filteronproducttype >= 0) $sql.=", ".MAIN_DB_PREFIX."product as prod";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE p.rowid = d.fk_supplier_proposal";
    -		if ($this->id > 0) $sql.= " AND d.fk_product =".$this->id;
    -		else $sql.=" AND d.fk_product > 0";
    -		if ($filteronproducttype >= 0) $sql.= " AND prod.rowid = d.fk_product AND prod.fk_product_type =".$filteronproducttype;
    -		$sql.= " AND p.fk_soc = s.rowid";
    -		$sql.= " AND p.entity IN (".getEntity('supplier_proposal').")";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0)	$sql.= " AND p.fk_soc = ".$socid;
    -		$sql.=$morefilter;
    -		$sql.= " GROUP BY date_format(p.date_valid,'%Y%m')";
    -		$sql.= " ORDER BY date_format(p.date_valid,'%Y%m') DESC";
    -
    -		return $this->_get_stats($sql,$mode, $year);
    -	}
    -
    -	/**
    -	 *  Return nb of units or orders in which product is included
    -	 *
    -	 *  @param  	int		$socid                   Limit count on a particular third party id
    -	 *  @param		string	$mode		             'byunit'=number of unit, 'bynumber'=nb of entities
    -	 *  @param      int     $filteronproducttype     0=To filter on product only, 1=To filter on services only
    -	 *  @param      int     $year                    Year (0=last 12 month)
    -	 *  @param      string  $morefilter              More sql filters
    -	 * 	@return   	array       		             <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    -	 */
    -	function get_nb_order($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    -	{
    -		global $conf, $user;
    -
    -		$sql = "SELECT sum(d.qty), date_format(c.date_commande, '%Y%m')";
    -		if ($mode == 'bynumber') $sql.= ", count(DISTINCT c.rowid)";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."commandedet as d, ".MAIN_DB_PREFIX."commande as c, ".MAIN_DB_PREFIX."societe as s";
    -        if ($filteronproducttype >= 0) $sql.=", ".MAIN_DB_PREFIX."product as p";
    -        if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE c.rowid = d.fk_commande";
    -		if ($this->id > 0) $sql.= " AND d.fk_product =".$this->id;
    -		else $sql.=" AND d.fk_product > 0";
    -		if ($filteronproducttype >= 0) $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype;
    -		$sql.= " AND c.fk_soc = s.rowid";
    -		$sql.= " AND c.entity IN (".getEntity('commande').")";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0)	$sql.= " AND c.fk_soc = ".$socid;
    -		$sql.=$morefilter;
    -		$sql.= " GROUP BY date_format(c.date_commande,'%Y%m')";
    -		$sql.= " ORDER BY date_format(c.date_commande,'%Y%m') DESC";
    -
    -		return $this->_get_stats($sql,$mode, $year);
    -	}
    -
    -	/**
    -	 *  Return nb of units or orders in which product is included
    -	 *
    -	 *  @param  	int		$socid                   Limit count on a particular third party id
    -	 *  @param		string	$mode		             'byunit'=number of unit, 'bynumber'=nb of entities
    -	 *  @param      int     $filteronproducttype     0=To filter on product only, 1=To filter on services only
    -	 *  @param      int     $year                    Year (0=last 12 month)
    -	 *  @param      string  $morefilter              More sql filters
    -	 * 	@return   	array       		             <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    -	 */
    -	function get_nb_ordersupplier($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    -	{
    -		global $conf, $user;
    -
    -		$sql = "SELECT sum(d.qty), date_format(c.date_commande, '%Y%m')";
    -		if ($mode == 'bynumber') $sql.= ", count(DISTINCT c.rowid)";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as d, ".MAIN_DB_PREFIX."commande_fournisseur as c, ".MAIN_DB_PREFIX."societe as s";
    -        if ($filteronproducttype >= 0) $sql.=", ".MAIN_DB_PREFIX."product as p";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    -		$sql.= " WHERE c.rowid = d.fk_commande";
    -		if ($this->id > 0) $sql.= " AND d.fk_product =".$this->id;
    -		else $sql.=" AND d.fk_product > 0";
    -		if ($filteronproducttype >= 0) $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype;
    -		$sql.= " AND c.fk_soc = s.rowid";
    -		$sql.= " AND c.entity IN (".getEntity('supplier_order').")";
    -		if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    -		if ($socid > 0)	$sql.= " AND c.fk_soc = ".$socid;
    -		$sql.=$morefilter;
    -		$sql.= " GROUP BY date_format(c.date_commande,'%Y%m')";
    -		$sql.= " ORDER BY date_format(c.date_commande,'%Y%m') DESC";
    -
    -		return $this->_get_stats($sql,$mode, $year);
    -	}
    -
    -	/**
    -	 *  Link a product/service to a parent product/service
    -	 *
    -	 *  @param      int	$id_pere    Id of parent product/service
    -	 *  @param      int	$id_fils    Id of child product/service
    -	 *  @param		int	$qty		Quantity
    -	 *  @param		int	$incdec		1=Increase/decrease stock of child when parent stock increase/decrease
    -	 *  @return     int        		< 0 if KO, > 0 if OK
    -	 */
    -	function add_sousproduit($id_pere, $id_fils, $qty, $incdec=1)
    -	{
    -		// Clean parameters
    -		if (! is_numeric($id_pere)) $id_pere=0;
    -		if (! is_numeric($id_fils)) $id_fils=0;
    -		if (! is_numeric($incdec)) $incdec=0;
    -
    -		$result=$this->del_sousproduit($id_pere, $id_fils);
    -		if ($result < 0) return $result;
    -
    -		// Check not already father of id_pere (to avoid father -> child -> father links)
    -		$sql = 'SELECT fk_product_pere from '.MAIN_DB_PREFIX.'product_association';
    -		$sql .= ' WHERE fk_product_pere  = '.$id_fils.' AND fk_product_fils = '.$id_pere;
    -		if (! $this->db->query($sql))
    -		{
    -			dol_print_error($this->db);
    -			return -1;
    -		}
    -		else
    -		{
    -			$result = $this->db->query($sql);
    -			if ($result)
    -			{
    -				$num = $this->db->num_rows($result);
    -				if($num > 0)
    -				{
    -					$this->error="isFatherOfThis";
    -					return -1;
    -				}
    -				else
    -				{
    -					$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'product_association(fk_product_pere,fk_product_fils,qty,incdec)';
    -					$sql .= ' VALUES ('.$id_pere.', '.$id_fils.', '.$qty.', '.$incdec.')';
    -					if (! $this->db->query($sql))
    -					{
    -						dol_print_error($this->db);
    -						return -1;
    -					}
    -					else
    -					{
    -						return 1;
    -					}
    -				}
    -			}
    -		}
    -	}
    -
    -	/**
    -	 *  Modify composed product
    -	 *
    -	 *  @param      int	$id_pere    Id of parent product/service
    -	 *  @param      int	$id_fils    Id of child product/service
    -	 *  @param		int	$qty		Quantity
    -	 *  @param		int	$incdec		1=Increase/decrease stock of child when parent stock increase/decrease
    -	 * 	@return     int        		< 0 if KO, > 0 if OK
    -	 */
    -	function update_sousproduit($id_pere, $id_fils, $qty, $incdec=1)
    -	{
    -		// Clean parameters
    -		if (! is_numeric($id_pere)) $id_pere=0;
    -		if (! is_numeric($id_fils)) $id_fils=0;
    -		if (! is_numeric($incdec)) $incdec=1;
    -		if (! is_numeric($qty)) $qty=1;
    -
    -		$sql = 'UPDATE '.MAIN_DB_PREFIX.'product_association SET ';
    -		$sql.= 'qty='.$qty;
    -		$sql.= ',incdec='.$incdec;
    -		$sql .= ' WHERE fk_product_pere='.$id_pere.' AND fk_product_fils='.$id_fils;
    -
    -		if (!$this->db->query($sql))
    -		{
    -			dol_print_error($this->db);
    -			return -1;
    -		}
    -		else
    -		{
    -			return 1;
    -		}
    -
    -	}
    -
    -	/**
    -	 *  Retire le lien entre un sousproduit et un produit/service
    -	 *
    -	 *  @param      int	$fk_parent		Id du produit auquel ne sera plus lie le produit lie
    -	 *  @param      int	$fk_child		Id du produit a ne plus lie
    -	 *  @return     int			    	< 0 if KO, > 0 if OK
    -	 */
    -	function del_sousproduit($fk_parent, $fk_child)
    -	{
    -		if (! is_numeric($fk_parent)) $fk_parent=0;
    -		if (! is_numeric($fk_child)) $fk_child=0;
    -
    -		$sql = "DELETE FROM ".MAIN_DB_PREFIX."product_association";
    -		$sql.= " WHERE fk_product_pere  = ".$fk_parent;
    -		$sql.= " AND fk_product_fils = ".$fk_child;
    -
    -		dol_syslog(get_class($this).'::del_sousproduit', LOG_DEBUG);
    -		if (! $this->db->query($sql))
    -		{
    -			dol_print_error($this->db);
    -			return -1;
    -		}
    -
    -		return 1;
    -	}
    -
    -	/**
    -	 *  Verifie si c'est un sous-produit
    -	 *
    -	 *  @param      int	$fk_parent		Id du produit auquel le produit est lie
    -	 *  @param      int	$fk_child		Id du produit lie
    -	 *  @return     int			    	< 0 si erreur, > 0 si ok
    -	 */
    -	function is_sousproduit($fk_parent, $fk_child)
    -	{
    -		$sql = "SELECT fk_product_pere, qty, incdec";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_association";
    -		$sql.= " WHERE fk_product_pere  = '".$fk_parent."'";
    -		$sql.= " AND fk_product_fils = '".$fk_child."'";
    -
    -		$result = $this->db->query($sql);
    -		if ($result)
    -		{
    -			$num = $this->db->num_rows($result);
    -
    -			if($num > 0)
    -			{
    -				$obj = $this->db->fetch_object($result);
    -				$this->is_sousproduit_qty = $obj->qty;
    -				$this->is_sousproduit_incdec = $obj->incdec;
    -
    -				return true;
    -			}
    -			else
    -			{
    -				return false;
    -			}
    -		}
    -		else
    -		{
    -			dol_print_error($this->db);
    -			return -1;
    -		}
    -	}
    -
    -
    -	/**
    -	 *  Add a supplier price for the product.
    -	 *  Note: Duplicate ref is accepted for different quantity only, or for different companies.
    -	 *
    -	 *  @param      User	$user       User that make link
    -	 *  @param      int		$id_fourn   Supplier id
    -	 *  @param      string	$ref_fourn  Supplier ref
    -	 *  @param		float	$quantity	Quantity minimum for price
    -	 *  @return     int         		< 0 if KO, 0 if link already exists for this product, > 0 if OK
    -	 */
    -	function add_fournisseur($user, $id_fourn, $ref_fourn, $quantity)
    -	{
    -		global $conf;
    -
    -		$now=dol_now();
    -
    -    	dol_syslog(get_class($this)."::add_fournisseur id_fourn = ".$id_fourn." ref_fourn=".$ref_fourn." quantity=".$quantity, LOG_DEBUG);
    -
    -		if ($ref_fourn)
    -		{
    -    		$sql = "SELECT rowid, fk_product";
    -    		$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
    -    		$sql.= " WHERE fk_soc = ".$id_fourn;
    -    		$sql.= " AND ref_fourn = '".$this->db->escape($ref_fourn)."'";
    -    		$sql.= " AND fk_product != ".$this->id;
    -    		$sql.= " AND entity IN (".getEntity('productsupplierprice').")";
    -
    -    		$resql=$this->db->query($sql);
    -    		if ($resql)
    -    		{
    -    			$obj = $this->db->fetch_object($resql);
    -                if ($obj)
    -                {
    -        			// If the supplier ref already exists but for another product (duplicate ref is accepted for different quantity only or different companies)
    -                    $this->product_id_already_linked = $obj->fk_product;
    -    				return -3;
    -    			}
    -                $this->db->free($resql);
    -    		}
    -		}
    -
    -		$sql = "SELECT rowid";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
    -		$sql.= " WHERE fk_soc = ".$id_fourn;
    -		if ($ref_fourn) $sql.= " AND ref_fourn = '".$this->db->escape($ref_fourn)."'";
    -		else $sql.= " AND (ref_fourn = '' OR ref_fourn IS NULL)";
    -		$sql.= " AND quantity = '".$quantity."'";
    -		$sql.= " AND fk_product = ".$this->id;
    -		$sql.= " AND entity IN (".getEntity('productsupplierprice').")";
    -
    -		$resql=$this->db->query($sql);
    -		if ($resql)
    -		{
    -    		$obj = $this->db->fetch_object($resql);
    -
    -		    // The reference supplier does not exist, we create it for this product.
    -			if (! $obj)
    -			{
    -				$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price(";
    -				$sql.= "datec";
    -				$sql.= ", entity";
    -				$sql.= ", fk_product";
    -				$sql.= ", fk_soc";
    -				$sql.= ", ref_fourn";
    -				$sql.= ", quantity";
    -				$sql.= ", fk_user";
    -				$sql.= ", tva_tx";
    -				$sql.= ") VALUES (";
    -				$sql.= "'".$this->db->idate($now)."'";
    -				$sql.= ", ".$conf->entity;
    -				$sql.= ", ".$this->id;
    -				$sql.= ", ".$id_fourn;
    -				$sql.= ", '".$this->db->escape($ref_fourn)."'";
    -				$sql.= ", ".$quantity;
    -				$sql.= ", ".$user->id;
    -				$sql.= ", 0";
    -				$sql.= ")";
    -
    -				if ($this->db->query($sql))
    -				{
    -					$this->product_fourn_price_id = $this->db->last_insert_id(MAIN_DB_PREFIX."product_fournisseur_price");
    -					return 1;
    -				}
    -				else
    -				{
    -					$this->error=$this->db->lasterror();
    -					return -1;
    -				}
    -			}
    -			// If the supplier price already exists for this product and quantity
    -			else
    -			{
    -				$this->product_fourn_price_id = $obj->rowid;
    -				return 0;
    -			}
    -		}
    -		else
    -		{
    -			$this->error=$this->db->lasterror();
    -			return -2;
    -		}
    -	}
    -
    -
    -	/**
    -	 *  Renvoie la liste des fournisseurs du produit/service
    -	 *
    -	 *  @return 	array		Tableau des id de fournisseur
    -	 */
    -	function list_suppliers()
    -	{
    -		global $conf;
    -
    -		$list = array();
    -
    -		$sql = "SELECT DISTINCT p.fk_soc";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as p";
    -		$sql.= " WHERE p.fk_product = ".$this->id;
    -		$sql.= " AND p.entity = ".$conf->entity;
    -
    -		$result = $this->db->query($sql);
    -		if ($result)
    -		{
    -			$num = $this->db->num_rows($result);
    -			$i=0;
    -			while ($i < $num)
    -			{
    -				$obj = $this->db->fetch_object($result);
    -				$list[$i] = $obj->fk_soc;
    -				$i++;
    -			}
    -		}
    -
    -		return $list;
    -	}
    -
    -	/**
    -	 *  Recopie les prix d'un produit/service sur un autre
    -	 *
    -	 *  @param	int		$fromId     Id product source
    -	 *  @param  int		$toId       Id product target
    -	 *  @return nt         			< 0 if KO, > 0 if OK
    -	 */
    -	function clone_price($fromId, $toId)
    -	{
    -		$this->db->begin();
    -
    -		// les prix
    -		$sql = "INSERT ".MAIN_DB_PREFIX."product_price (";
    -		$sql.= " fk_product, date_price, price, tva_tx, localtax1_tx, localtax2_tx, fk_user_author, tosell)";
    -		$sql.= " SELECT ".$toId . ", date_price, price, tva_tx, localtax1_tx, localtax2_tx, fk_user_author, tosell";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_price ";
    -		$sql.= " WHERE fk_product = ". $fromId;
    -
    -		dol_syslog(get_class($this).'::clone_price', LOG_DEBUG);
    -		if (! $this->db->query($sql))
    -		{
    -			$this->db->rollback();
    -			return -1;
    -		}
    -		$this->db->commit();
    -		return 1;
    -	}
    -
    -	/**
    -	 * Clone links between products
    -	 *
    -	 * @param  int		$fromId		Product id
    -	 * @param  int		$toId		Product id
    -	 * @return int                  <0 if KO, >0 if OK
    -	 */
    -	function clone_associations($fromId, $toId)
    -	{
    -		$this->db->begin();
    -
    -		$sql = 'INSERT INTO '.MAIN_DB_PREFIX.'product_association (fk_product_pere, fk_product_fils, qty)';
    -		$sql.= " SELECT ".$toId.", fk_product_fils, qty FROM ".MAIN_DB_PREFIX."product_association";
    -		$sql.= " WHERE fk_product_pere = ".$fromId;
    -
    -		dol_syslog(get_class($this).'::clone_association', LOG_DEBUG);
    -		if (! $this->db->query($sql))
    -		{
    -			$this->db->rollback();
    -			return -1;
    -		}
    -
    -		$this->db->commit();
    -		return 1;
    -	}
    -
    -	/**
    -	 *  Recopie les fournisseurs et prix fournisseurs d'un produit/service sur un autre
    -	 *
    -	 *  @param    int	$fromId      Id produit source
    -	 *  @param    int	$toId        Id produit cible
    -	 *  @return   int    		     < 0 si erreur, > 0 si ok
    -	 */
    -	function clone_fournisseurs($fromId, $toId)
    -	{
    -		$this->db->begin();
    -
    -		$now=dol_now();
    -
    -		// les fournisseurs
    -		/*$sql = "INSERT ".MAIN_DB_PREFIX."product_fournisseur ("
    -		. " datec, fk_product, fk_soc, ref_fourn, fk_user_author )"
    -		. " SELECT '".$this->db->idate($now)."', ".$toId.", fk_soc, ref_fourn, fk_user_author"
    -		. " FROM ".MAIN_DB_PREFIX."product_fournisseur"
    -		. " WHERE fk_product = ".$fromId;
    -
    -		if ( ! $this->db->query($sql ) )
    -		{
    -			$this->db->rollback();
    -			return -1;
    -		}*/
    -
    -		// les prix de fournisseurs.
    -		$sql = "INSERT ".MAIN_DB_PREFIX."product_fournisseur_price (";
    -		$sql.= " datec, fk_product, fk_soc, price, quantity, fk_user)";
    -		$sql.= " SELECT '".$this->db->idate($now)."', ".$toId. ", fk_soc, price, quantity, fk_user";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
    -		$sql.= " WHERE fk_product = ".$fromId;
    -
    -		dol_syslog(get_class($this).'::clone_fournisseurs', LOG_DEBUG);
    -		$resql=$this->db->query($sql);
    -		if (! $resql)
    -		{
    -			$this->db->rollback();
    -			return -1;
    -		}
    -		else
    -		{
    -		    $this->db->commit();
    -		    return 1;
    -		}
    -	}
    -
    -	/**
    -	 *  Fonction recursive uniquement utilisee par get_arbo_each_prod, recompose l'arborescence des sousproduits
    -	 * 	Define value of this->res
    -	 *
    -	 *	@param		array		$prod			Products array
    -	 *	@param		string		$compl_path		Directory path of parents to add before
    -	 *	@param		int			$multiply		Because each sublevel must be multiplicated by parent nb
    -	 *	@param		int			$level			Init level
    -	 *  @param		int			$id_parent		Id parent
    -	 *  @return 	void
    -	 */
    -	function fetch_prod_arbo($prod, $compl_path="", $multiply=1, $level=1, $id_parent=0)
    -	{
    -		global $conf,$langs;
    -
    -		$product = new Product($this->db);
    -		//var_dump($prod);
    -		foreach($prod as $id_product => $desc_pere)	// $id_product is 0 (first call starting with root top) or an id of a sub_product
    -		{
    -			if (is_array($desc_pere))	// If desc_pere is an array, this means it's a child
    -			{
    -				$id=(! empty($desc_pere[0]) ? $desc_pere[0] :'');
    -				$nb=(! empty($desc_pere[1]) ? $desc_pere[1] :'');
    -				$type=(! empty($desc_pere[2]) ? $desc_pere[2] :'');
    -				$label=(! empty($desc_pere[3]) ? $desc_pere[3] :'');
    -				$incdec=!empty($desc_pere[4]) ? $desc_pere[4] : 0;
    -
    -				if ($multiply < 1) $multiply=1;
    -
    -				//print "XXX We add id=".$id." - label=".$label." - nb=".$nb." - multiply=".$multiply." fullpath=".$compl_path.$label."\n";
    -				$this->fetch($id);		// Load product
    -				$this->load_stock('nobatch,novirtual');	// Load stock to get true this->stock_reel
    -				$this->res[]= array(
    -					'id'=>$id,					// Id product
    -					'id_parent'=>$id_parent,
    -					'ref'=>$this->ref,			// Ref product
    -					'nb'=>$nb,					// Nb of units that compose parent product
    -					'nb_total'=>$nb*$multiply,	// Nb of units for all nb of product
    -					'stock'=>$this->stock_reel,	// Stock
    -					'stock_alert'=>$this->seuil_stock_alerte,	// Stock alert
    -					'label'=>$label,
    -					'fullpath'=>$compl_path.$label,			// Label
    -					'type'=>$type,				// Nb of units that compose parent product
    -					'desiredstock'=>$this->desiredstock,
    -					'level'=>$level,
    -					'incdec'=>$incdec,
    -					'entity'=>$this->entity
    -				);
    -
    -				// Recursive call if there is childs to child
    -				if (is_array($desc_pere['childs']))
    -				{
    -					//print 'YYY We go down for '.$desc_pere[3]." -> \n";
    -					$this->fetch_prod_arbo($desc_pere['childs'], $compl_path.$desc_pere[3]." -> ", $desc_pere[1]*$multiply, $level+1, $id);
    -				}
    -			}
    -		}
    -	}
    -
    -	/**
    -	 *  Build the tree of subproducts into an array
    -	 *  this->sousprods is loaded by this->get_sousproduits_arbo()
    -	 *
    -	 *	@param		int		$multiply		Because each sublevel must be multiplicated by parent nb
    -	 *  @return 	array 					$this->res
    -	 */
    -	function get_arbo_each_prod($multiply=1)
    -	{
    -		$this->res = array();
    -		if (isset($this->sousprods) && is_array($this->sousprods))
    -		{
    -			foreach($this->sousprods as $prod_name => $desc_product)
    -			{
    -				if (is_array($desc_product)) $this->fetch_prod_arbo($desc_product,"",$multiply,1,$this->id);
    -			}
    -		}
    -		//var_dump($this->res);
    -		return $this->res;
    -	}
    -
    -	/**
    -	 *  Return all parent products for current product (first level only)
    -	 *
    -	 *  @return 	int			Nb of father + child
    -	 */
    -	function hasFatherOrChild()
    -	{
    -		$nb = 0;
    -
    -		$sql = "SELECT COUNT(pa.rowid) as nb";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_association as pa";
    -		$sql.= " WHERE pa.fk_product_fils = ".$this->id." OR pa.fk_product_pere = ".$this->id;
    -		$resql = $this->db->query($sql);
    -		if ($resql)
    -		{
    -			$obj = $this->db->fetch_object($resql);
    -			if ($obj) $nb = $obj->nb;
    -		}
    -		else
    -		{
    -			return -1;
    -		}
    -
    -		return $nb;
    -	}
    -
    -	/**
    -	 *  Return all parent products for current product (first level only)
    -	 *
    -	 *  @return 	array 		Array of product
    -	 */
    -	function getFather()
    -	{
    -		$sql = "SELECT p.rowid, p.label as label, p.ref as ref, pa.fk_product_pere as id, p.fk_product_type, pa.qty, pa.incdec, p.entity";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_association as pa,";
    -		$sql.= " ".MAIN_DB_PREFIX."product as p";
    -		$sql.= " WHERE p.rowid = pa.fk_product_pere";
    -		$sql.= " AND pa.fk_product_fils = ".$this->id;
    -
    -		$res = $this->db->query($sql);
    -		if ($res)
    -		{
    -			$prods = array ();
    -			while ($record = $this->db->fetch_array($res))
    -			{
    -				// $record['id'] = $record['rowid'] = id of father
    -				$prods[$record['id']]['id'] = $record['rowid'];
    -				$prods[$record['id']]['ref'] = $record['ref'];
    -				$prods[$record['id']]['label'] = $record['label'];
    -				$prods[$record['id']]['qty'] = $record['qty'];
    -				$prods[$record['id']]['incdec'] = $record['incdec'];
    -				$prods[$record['id']]['fk_product_type'] =  $record['fk_product_type'];
    -				$prods[$record['id']]['entity'] =  $record['entity'];
    -			}
    -			return $prods;
    -		}
    -		else
    -		{
    -			dol_print_error($this->db);
    -			return -1;
    -		}
    -	}
    -
    -
    -	/**
    -	 *  Return childs of product $id
    -	 *
    -	 * 	@param		int		$id					Id of product to search childs of
    -	 *  @param		int		$firstlevelonly		Return only direct child
    -	 *  @param		int		$level				Level of recursing call (start to 1)
    -	 *  @return     array       				Return array(prodid=>array(0=prodid, 1=>qty, 2=> ...)
    -	 */
    -	function getChildsArbo($id, $firstlevelonly=0, $level=1)
    -	{
    -		global $alreadyfound;
    -
    -		$sql = "SELECT p.rowid, p.label as label, pa.qty as qty, pa.fk_product_fils as id, p.fk_product_type, pa.incdec";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
    -		$sql.= ", ".MAIN_DB_PREFIX."product_association as pa";
    -		$sql.= " WHERE p.rowid = pa.fk_product_fils";
    -		$sql.= " AND pa.fk_product_pere = ".$id;
    -		$sql.= " AND pa.fk_product_fils != ".$id;	// This should not happens, it is to avoid infinite loop if it happens
    -
    -		dol_syslog(get_class($this).'::getChildsArbo id='.$id.' level='.$level, LOG_DEBUG);
    -
    -		if ($level == 1) $alreadyfound=array($id=>1);	// We init array of found object to start of tree, so if we found it later (should not happened), we stop immediatly
    -		// Protection against infinite loop
    -		if ($level > 30) return array();
    -
    -		$res  = $this->db->query($sql);
    -		if ($res)
    -		{
    -			$prods = array();
    -			while ($rec = $this->db->fetch_array($res))
    -			{
    -				if (! empty($alreadyfound[$rec['rowid']]))
    -				{
    -					dol_syslog(get_class($this).'::getChildsArbo the product id='.$rec['rowid'].' was already found at a higher level in tree. We discard to avoid infinite loop', LOG_WARNING);
    -					continue;
    -				}
    -				$alreadyfound[$rec['rowid']]=1;
    -				$prods[$rec['rowid']]= array(
    -					0=>$rec['rowid'],
    -					1=>$rec['qty'],
    -					2=>$rec['fk_product_type'],
    -					3=>$this->db->escape($rec['label']),
    -					4=>$rec['incdec']
    -				);
    -				//$prods[$this->db->escape($rec['label'])]= array(0=>$rec['id'],1=>$rec['qty'],2=>$rec['fk_product_type']);
    -				//$prods[$this->db->escape($rec['label'])]= array(0=>$rec['id'],1=>$rec['qty']);
    -				if (empty($firstlevelonly))
    -				{
    -					$listofchilds=$this->getChildsArbo($rec['rowid'], 0, $level + 1);
    -					foreach($listofchilds as $keyChild => $valueChild)
    -					{
    -						$prods[$rec['rowid']]['childs'][$keyChild] = $valueChild;
    -					}
    -				}
    -			}
    -
    -			return $prods;
    -		}
    -		else
    -		{
    -			dol_print_error($this->db);
    -			return -1;
    -		}
    -	}
    -
    -	/**
    -	 * 	Return tree of all subproducts for product. Tree contains id, name and quantity.
    -	 * 	Set this->sousprods
    -	 *
    -	 *  @return    	void
    -	 */
    -	function get_sousproduits_arbo()
    -	{
    -	    $parent=array();
    -
    -		foreach($this->getChildsArbo($this->id) as $keyChild => $valueChild)	// Warning. getChildsArbo can call getChildsArbo recursively. Starting point is $value[0]=id of product
    -		{
    -			$parent[$this->label][$keyChild] = $valueChild;
    -		}
    -		foreach($parent as $key => $value)		// key=label, value is array of childs
    -		{
    -			$this->sousprods[$key] = $value;
    -		}
    -	}
    -
    -	/**
    -	 *	Return clicable link of object (with eventually picto)
    -	 *
    -	 *	@param		int		$withpicto					Add picto into link
    -	 *	@param		string	$option						Where point the link ('stock', 'composition', 'category', 'supplier', '')
    -	 *	@param		int		$maxlength					Maxlength of ref
    -     *  @param      int     $save_lastsearch_value		-1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    -	 *	@return		string								String with URL
    -	 */
    -	function getNomUrl($withpicto=0, $option='', $maxlength=0, $save_lastsearch_value=-1)
    -	{
    -		global $conf, $langs, $hookmanager;
    -		include_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
    -
    -		$result='';
    -        $newref=$this->ref;
    -        if ($maxlength) $newref=dol_trunc($newref,$maxlength,'middle');
    -
    -        if ($this->type == Product::TYPE_PRODUCT) $label = '<u>' . $langs->trans("ShowProduct") . '</u>';
    -        if ($this->type == Product::TYPE_SERVICE) $label = '<u>' . $langs->trans("ShowService") . '</u>';
    -        if (! empty($this->ref))
    -            $label .= '<br><b>' . $langs->trans('ProductRef') . ':</b> ' . $this->ref;
    -        if (! empty($this->label))
    -            $label .= '<br><b>' . $langs->trans('ProductLabel') . ':</b> ' . $this->label;
    -
    -        if ($this->type == Product::TYPE_PRODUCT)
    -        {
    -            if ($this->weight)  $label.="<br><b>".$langs->trans("Weight").'</b>: '.$this->weight.' '.measuring_units_string($this->weight_units,"weight");
    -    		if ($this->length)  $label.="<br><b>".$langs->trans("Length").'</b>: '.$this->length.' '.measuring_units_string($this->length_units,'length');
    -    		if ($this->surface) $label.="<br><b>".$langs->trans("Surface").'</b>: '.$this->surface.' '.measuring_units_string($this->surface_units,'surface');
    -    		if ($this->volume)  $label.="<br><b>".$langs->trans("Volume").'</b>: '.$this->volume.' '.measuring_units_string($this->volume_units,'volume');
    -        }
    -
    -        if ($this->type == Product::TYPE_PRODUCT || ! empty($conf->global->STOCK_SUPPORTS_SERVICES))
    -        {
    -    		if (! empty($conf->productbatch->enabled))
    +                if (!empty($conf->dynamicprices->enabled) && !empty($this->fk_price_expression) && empty($ignore_expression)) {
    +                       include_once DOL_DOCUMENT_ROOT.'/product/dynamic_price/class/price_parser.class.php';
    +                    $priceparser = new PriceParser($this->db);
    +                       $price_result = $priceparser->parseProduct($this);
    +                    if ($price_result >= 0) {
    +                        $this->price = $price_result;
    +                        // Calculate the VAT
    +                        $this->price_ttc = price2num($this->price) * (1 + ($this->tva_tx / 100));
    +                        $this->price_ttc = price2num($this->price_ttc, 'MU');
    +                    }
    +                }
    +
    +                // We should not load stock during the fetch. If someone need stock of product, he must call load_stock after fetching product.
    +                // Instead we just init the stock_warehouse array
    +                $this->stock_warehouse = array();
    +
    +                return 1;
    +            }
    +            else
                 {
    -            	$langs->load("productbatch");
    -                $label.="<br><b>".$langs->trans("ManageLotSerial").'</b>: '.$this->getLibStatut(0,2);
    +                return 0;
                 }
             }
    -        if ($this->type == Product::TYPE_SERVICE)
    +        else
             {
    +            dol_print_error($this->db);
    +            return -1;
    +        }
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge tableau des stats propale pour le produit/service
    +     *
    +     * @param  int $socid Id societe
    +     * @return array               Tableau des stats
    +     */
    +    function load_stats_propale($socid=0)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        global $user;
    +
    +        $sql = "SELECT COUNT(DISTINCT p.fk_soc) as nb_customers, COUNT(DISTINCT p.rowid) as nb,";
    +        $sql.= " COUNT(pd.rowid) as nb_rows, SUM(pd.qty) as qty";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."propaldet as pd";
    +        $sql.= ", ".MAIN_DB_PREFIX."propal as p";
    +        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE p.rowid = pd.fk_propal";
    +        $sql.= " AND p.fk_soc = s.rowid";
    +        $sql.= " AND p.entity IN (".getEntity('propal').")";
    +        $sql.= " AND pd.fk_product = ".$this->id;
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql .= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        //$sql.= " AND pr.fk_statut != 0";
    +        if ($socid > 0) {    $sql.= " AND p.fk_soc = ".$socid;
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result ) {
    +            $obj=$this->db->fetch_object($result);
    +            $this->stats_propale['customers']=$obj->nb_customers;
    +            $this->stats_propale['nb']=$obj->nb;
    +            $this->stats_propale['rows']=$obj->nb_rows;
    +            $this->stats_propale['qty']=$obj->qty?$obj->qty:0;
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge tableau des stats propale pour le produit/service
    +     *
    +     * @param  int $socid Id thirdparty
    +     * @return array               Tableau des stats
    +     */
    +    function load_stats_proposal_supplier($socid=0)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        global $user;
    +
    +        $sql = "SELECT COUNT(DISTINCT p.fk_soc) as nb_suppliers, COUNT(DISTINCT p.rowid) as nb,";
    +        $sql.= " COUNT(pd.rowid) as nb_rows, SUM(pd.qty) as qty";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."supplier_proposaldet as pd";
    +        $sql.= ", ".MAIN_DB_PREFIX."supplier_proposal as p";
    +        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE p.rowid = pd.fk_supplier_proposal";
    +        $sql.= " AND p.fk_soc = s.rowid";
    +        $sql.= " AND p.entity IN (".getEntity('supplier_proposal').")";
    +        $sql.= " AND pd.fk_product = ".$this->id;
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql .= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        //$sql.= " AND pr.fk_statut != 0";
    +        if ($socid > 0) {    $sql.= " AND p.fk_soc = ".$socid;
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result ) {
    +            $obj=$this->db->fetch_object($result);
    +            $this->stats_proposal_supplier['suppliers']=$obj->nb_suppliers;
    +            $this->stats_proposal_supplier['nb']=$obj->nb;
    +            $this->stats_proposal_supplier['rows']=$obj->nb_rows;
    +            $this->stats_proposal_supplier['qty']=$obj->qty?$obj->qty:0;
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge tableau des stats commande client pour le produit/service
    +     *
    +     * @param  int    $socid           Id societe pour filtrer sur une societe
    +     * @param  string $filtrestatut    Id statut pour filtrer sur un statut
    +     * @param  int    $forVirtualStock Ignore rights filter for virtual stock calculation.
    +     * @return array                  Array of stats (nb=nb of order, qty=qty ordered)
    +     */
    +    function load_stats_commande($socid=0,$filtrestatut='', $forVirtualStock = 0)
    +    {
    +        // phpcs:enable
    +        global $conf,$user;
    +
    +        $sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_customers, COUNT(DISTINCT c.rowid) as nb,";
    +        $sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd";
    +        $sql.= ", ".MAIN_DB_PREFIX."commande as c";
    +        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) { $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE c.rowid = cd.fk_commande";
    +        $sql.= " AND c.fk_soc = s.rowid";
    +        $sql.= " AND c.entity IN (".getEntity('commande').")";
    +        $sql.= " AND cd.fk_product = ".$this->id;
    +        if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) { $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) {    $sql.= " AND c.fk_soc = ".$socid;
    +        }
    +        if ($filtrestatut <> '') { $sql.= " AND c.fk_statut in (".$filtrestatut.")";
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result ) {
    +            $obj=$this->db->fetch_object($result);
    +            $this->stats_commande['customers']=$obj->nb_customers;
    +            $this->stats_commande['nb']=$obj->nb;
    +            $this->stats_commande['rows']=$obj->nb_rows;
    +            $this->stats_commande['qty']=$obj->qty?$obj->qty:0;
    +
    +            // if it's a virtual product, maybe it is in order by extension
    +            if (! empty($conf->global->ORDER_ADD_ORDERS_WITH_PARENT_PROD_IF_INCDEC)) {
    +                $TFather = $this->getFather();
    +                if (is_array($TFather) && !empty($TFather)) {
    +                    foreach($TFather as &$fatherData) {
    +                        $pFather = new Product($this->db);
    +                        $pFather->id = $fatherData['id'];
    +                        $qtyCoef = $fatherData['qty'];
    +
    +                        if ($fatherData['incdec']) {
    +                            $pFather->load_stats_commande($socid, $filtrestatut);
    +
    +                            $this->stats_commande['customers']+=$pFather->stats_commande['customers'];
    +                            $this->stats_commande['nb']+=$pFather->stats_commande['nb'];
    +                            $this->stats_commande['rows']+=$pFather->stats_commande['rows'];
    +                            $this->stats_commande['qty']+=$pFather->stats_commande['qty'] * $qtyCoef;
    +                        }
    +                    }
    +                }
    +            }
    +
    +            // If stock decrease is on invoice validation, the theorical stock continue to
    +            // count the orders to ship in theorical stock when some are already removed b invoice validation.
    +            // If option DECREASE_ONLY_UNINVOICEDPRODUCTS is on, we make a compensation.
    +            if (! empty($conf->global->STOCK_CALCULATE_ON_BILL)) {
    +                if (! empty($conf->global->DECREASE_ONLY_UNINVOICEDPRODUCTS)) {
    +                    $adeduire = 0;
    +                    $sql = "SELECT sum(fd.qty) as count FROM ".MAIN_DB_PREFIX."facturedet fd ";
    +                    $sql .= " JOIN ".MAIN_DB_PREFIX."facture f ON fd.fk_facture = f.rowid ";
    +                    $sql .= " JOIN ".MAIN_DB_PREFIX."element_element el ON el.fk_target = f.rowid and el.targettype = 'facture' and sourcetype = 'commande'";
    +                    $sql .= " JOIN ".MAIN_DB_PREFIX."commande c ON el.fk_source = c.rowid ";
    +                    $sql .= " WHERE c.fk_statut IN (".$filtrestatut.") AND c.facture = 0 AND fd.fk_product = ".$this->id;
    +                    dol_syslog(__METHOD__.":: sql $sql", LOG_NOTICE);
    +
    +                    $resql = $this->db->query($sql);
    +                    if ($resql ) {
    +                        if ($this->db->num_rows($resql) > 0) {
    +                            $obj = $this->db->fetch_object($resql);
    +                            $adeduire += $obj->count;
    +                        }
    +                    }
    +
    +                    $this->stats_commande['qty'] -= $adeduire;
    +                }
    +            }
    +
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge tableau des stats commande fournisseur pour le produit/service
    +     *
    +     * @param  int    $socid           Id societe pour filtrer sur une societe
    +     * @param  string $filtrestatut    Id des statuts pour filtrer sur des statuts
    +     * @param  int    $forVirtualStock Ignore rights filter for virtual stock calculation.
    +     * @return array                     Tableau des stats
    +     */
    +    function load_stats_commande_fournisseur($socid=0,$filtrestatut='', $forVirtualStock = 0)
    +    {
    +        // phpcs:enable
    +        global $conf,$user;
    +
    +        $sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_suppliers, COUNT(DISTINCT c.rowid) as nb,";
    +        $sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as cd";
    +        $sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as c";
    +        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) { $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE c.rowid = cd.fk_commande";
    +        $sql.= " AND c.fk_soc = s.rowid";
    +        $sql.= " AND c.entity IN (".getEntity('supplier_order').")";
    +        $sql.= " AND cd.fk_product = ".$this->id;
    +        if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) { $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) { $sql.= " AND c.fk_soc = ".$socid;
    +        }
    +        if ($filtrestatut != '') { $sql.= " AND c.fk_statut in (".$filtrestatut.")"; // Peut valoir 0
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result ) {
    +            $obj=$this->db->fetch_object($result);
    +            $this->stats_commande_fournisseur['suppliers']=$obj->nb_suppliers;
    +            $this->stats_commande_fournisseur['nb']=$obj->nb;
    +            $this->stats_commande_fournisseur['rows']=$obj->nb_rows;
    +            $this->stats_commande_fournisseur['qty']=$obj->qty?$obj->qty:0;
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error().' sql='.$sql;
    +            return -1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge tableau des stats expedition client pour le produit/service
    +     *
    +     * @param  int    $socid           Id societe pour filtrer sur une societe
    +     * @param  string $filtrestatut    Id statut pour filtrer sur un statut
    +     * @param  int    $forVirtualStock Ignore rights filter for virtual stock calculation.
    +     * @return array                   Tableau des stats
    +     */
    +    function load_stats_sending($socid=0,$filtrestatut='', $forVirtualStock = 0)
    +    {
    +        // phpcs:enable
    +        global $conf,$user;
    +
    +        $sql = "SELECT COUNT(DISTINCT e.fk_soc) as nb_customers, COUNT(DISTINCT e.rowid) as nb,";
    +        $sql.= " COUNT(ed.rowid) as nb_rows, SUM(ed.qty) as qty";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."expeditiondet as ed";
    +        $sql.= ", ".MAIN_DB_PREFIX."commandedet as cd";
    +        $sql.= ", ".MAIN_DB_PREFIX."commande as c";
    +        $sql.= ", ".MAIN_DB_PREFIX."expedition as e";
    +        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) { $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE e.rowid = ed.fk_expedition";
    +        $sql.= " AND c.rowid = cd.fk_commande";
    +        $sql.= " AND e.fk_soc = s.rowid";
    +        $sql.= " AND e.entity IN (".getEntity('expedition').")";
    +        $sql.= " AND ed.fk_origin_line = cd.rowid";
    +        $sql.= " AND cd.fk_product = ".$this->id;
    +        if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) { $sql.= " AND e.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) {    $sql.= " AND e.fk_soc = ".$socid;
    +        }
    +        if ($filtrestatut <> '') { $sql.= " AND c.fk_statut in (".$filtrestatut.")";
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result ) {
    +            $obj=$this->db->fetch_object($result);
    +            $this->stats_expedition['customers']=$obj->nb_customers;
    +            $this->stats_expedition['nb']=$obj->nb;
    +            $this->stats_expedition['rows']=$obj->nb_rows;
    +            $this->stats_expedition['qty']=$obj->qty?$obj->qty:0;
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge tableau des stats réception fournisseur pour le produit/service
    +     *
    +     * @param  int    $socid           Id societe pour filtrer sur une societe
    +     * @param  string $filtrestatut    Id statut pour filtrer sur un statut
    +     * @param  int    $forVirtualStock Ignore rights filter for virtual stock calculation.
    +     * @return array                   Tableau des stats
    +     */
    +    function load_stats_reception($socid=0,$filtrestatut='', $forVirtualStock = 0)
    +    {
    +        // phpcs:enable
    +        global $conf,$user;
    +
    +        $sql = "SELECT COUNT(DISTINCT cf.fk_soc) as nb_customers, COUNT(DISTINCT cf.rowid) as nb,";
    +        $sql.= " COUNT(fd.rowid) as nb_rows, SUM(fd.qty) as qty";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur_dispatch as fd";
    +        $sql.= ", ".MAIN_DB_PREFIX."commande_fournisseur as cf";
    +        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) { $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE cf.rowid = fd.fk_commande";
    +        $sql.= " AND cf.fk_soc = s.rowid";
    +        $sql.= " AND cf.entity IN (".getEntity('supplier_order').")";
    +        $sql.= " AND fd.fk_product = ".$this->id;
    +        if (!$user->rights->societe->client->voir && !$socid && !$forVirtualStock) { $sql.= " AND cf.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) {    $sql.= " AND cf.fk_soc = ".$socid;
    +        }
    +        if ($filtrestatut <> '') { $sql.= " AND cf.fk_statut in (".$filtrestatut.")";
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result ) {
    +            $obj=$this->db->fetch_object($result);
    +            $this->stats_reception['suppliers']=$obj->nb_customers;
    +            $this->stats_reception['nb']=$obj->nb;
    +            $this->stats_reception['rows']=$obj->nb_rows;
    +            $this->stats_reception['qty']=$obj->qty?$obj->qty:0;
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge tableau des stats contrat pour le produit/service
    +     *
    +     * @param  int $socid Id societe
    +     * @return array               Tableau des stats
    +     */
    +    function load_stats_contrat($socid=0)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        global $user;
    +
    +        $sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_customers, COUNT(DISTINCT c.rowid) as nb,";
    +        $sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd";
    +        $sql.= ", ".MAIN_DB_PREFIX."contrat as c";
    +        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE c.rowid = cd.fk_contrat";
    +        $sql.= " AND c.fk_soc = s.rowid";
    +        $sql.= " AND c.entity IN (".getEntity('contract').")";
    +        $sql.= " AND cd.fk_product = ".$this->id;
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        //$sql.= " AND c.statut != 0";
    +        if ($socid > 0) {    $sql.= " AND c.fk_soc = ".$socid;
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result ) {
    +            $obj=$this->db->fetch_object($result);
    +            $this->stats_contrat['customers']=$obj->nb_customers;
    +            $this->stats_contrat['nb']=$obj->nb;
    +            $this->stats_contrat['rows']=$obj->nb_rows;
    +            $this->stats_contrat['qty']=$obj->qty?$obj->qty:0;
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error().' sql='.$sql;
    +            return -1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge tableau des stats facture pour le produit/service
    +     *
    +     * @param  int $socid Id societe
    +     * @return array                   Tableau des stats
    +     */
    +    function load_stats_facture($socid=0)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        global $user;
    +
    +        $sql = "SELECT COUNT(DISTINCT f.fk_soc) as nb_customers, COUNT(DISTINCT f.rowid) as nb,";
    +        $sql.= " COUNT(fd.rowid) as nb_rows, SUM(fd.qty) as qty";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."facturedet as fd";
    +        $sql.= ", ".MAIN_DB_PREFIX."facture as f";
    +        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE f.rowid = fd.fk_facture";
    +        $sql.= " AND f.fk_soc = s.rowid";
    +        $sql.= " AND f.entity IN (".getEntity('facture').")";
    +        $sql.= " AND fd.fk_product = ".$this->id;
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        //$sql.= " AND f.fk_statut != 0";
    +        if ($socid > 0) {    $sql .= " AND f.fk_soc = ".$socid;
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result ) {
    +            $obj=$this->db->fetch_object($result);
    +            $this->stats_facture['customers']=$obj->nb_customers;
    +            $this->stats_facture['nb']=$obj->nb;
    +            $this->stats_facture['rows']=$obj->nb_rows;
    +            $this->stats_facture['qty']=$obj->qty?$obj->qty:0;
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Charge tableau des stats facture pour le produit/service
    +     *
    +     * @param  int $socid Id societe
    +     * @return array                   Tableau des stats
    +     */
    +    function load_stats_facture_fournisseur($socid=0)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        global $user;
    +
    +        $sql = "SELECT COUNT(DISTINCT f.fk_soc) as nb_suppliers, COUNT(DISTINCT f.rowid) as nb,";
    +        $sql.= " COUNT(fd.rowid) as nb_rows, SUM(fd.qty) as qty";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn_det as fd";
    +        $sql.= ", ".MAIN_DB_PREFIX."facture_fourn as f";
    +        $sql.= ", ".MAIN_DB_PREFIX."societe as s";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE f.rowid = fd.fk_facture_fourn";
    +        $sql.= " AND f.fk_soc = s.rowid";
    +        $sql.= " AND f.entity IN (".getEntity('facture_fourn').")";
    +        $sql.= " AND fd.fk_product = ".$this->id;
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        //$sql.= " AND f.fk_statut != 0";
    +        if ($socid > 0) {    $sql .= " AND f.fk_soc = ".$socid;
    +        }
    +
    +        $result = $this->db->query($sql);
    +        if ($result ) {
    +            $obj=$this->db->fetch_object($result);
    +            $this->stats_facture_fournisseur['suppliers']=$obj->nb_suppliers;
    +            $this->stats_facture_fournisseur['nb']=$obj->nb;
    +            $this->stats_facture_fournisseur['rows']=$obj->nb_rows;
    +            $this->stats_facture_fournisseur['qty']=$obj->qty?$obj->qty:0;
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error();
    +            return -1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return an array formated for showing graphs
    +     *
    +     * @param  string $sql  Request to execute
    +     * @param  string $mode 'byunit'=number of unit, 'bynumber'=nb of entities
    +     * @param  int    $year Year (0=current year)
    +     * @return array               <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    +     */
    +    function _get_stats($sql, $mode, $year=0)
    +    {
    +        // phpcs:enable
    +        $resql = $this->db->query($sql);
    +        if ($resql) {
    +            $num = $this->db->num_rows($resql);
    +            $i = 0;
    +            while ($i < $num)
    +            {
    +                $arr = $this->db->fetch_array($resql);
    +                if ($mode == 'byunit') {   $tab[$arr[1]] = $arr[0];    // 1st field
    +                }
    +                if ($mode == 'bynumber') { $tab[$arr[1]] = $arr[2];    // 3rd field
    +                }
    +                $i++;
    +            }
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error().' sql='.$sql;
    +            return -1;
    +        }
    +
    +        if (empty($year)) {
    +            $year = strftime('%Y', time());
    +            $month = strftime('%m', time());
    +        }
    +        else
    +        {
    +            $month=12;    // We imagine we are at end of year, so we get last 12 month before, so all correct year.
    +        }
    +        $result = array();
    +
    +        for ($j = 0 ; $j < 12 ; $j++)
    +        {
    +            $idx=ucfirst(dol_trunc(dol_print_date(dol_mktime(12, 0, 0, $month, 1, $year), "%b"), 3, 'right', 'UTF-8', 1));
    +            $monthnum=sprintf("%02s", $month);
    +
    +            $result[$j] = array($idx,isset($tab[$year.$month])?$tab[$year.$month]:0);
    +            //            $result[$j] = array($monthnum,isset($tab[$year.$month])?$tab[$year.$month]:0);
    +
    +            $month = "0".($month - 1);
    +            if (dol_strlen($month) == 3) {
    +                $month = substr($month, 1);
    +            }
    +            if ($month == 0) {
    +                $month = 12;
    +                $year = $year - 1;
    +            }
    +        }
    +
    +        return array_reverse($result);
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return nb of units or customers invoices in which product is included
    +     *
    +     * @param  int    $socid               Limit count on a particular third party id
    +     * @param  string $mode                'byunit'=number of unit, 'bynumber'=nb of entities
    +     * @param  int    $filteronproducttype 0=To filter on product only, 1=To filter on services only
    +     * @param  int    $year                Year (0=last 12 month)
    +     * @param  string $morefilter          More sql filters
    +     * @return array                            <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    +     */
    +    function get_nb_vente($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        global $user;
    +
    +        $sql = "SELECT sum(d.qty), date_format(f.datef, '%Y%m')";
    +        if ($mode == 'bynumber') { $sql.= ", count(DISTINCT f.rowid)";
    +        }
    +        $sql.= " FROM ".MAIN_DB_PREFIX."facturedet as d, ".MAIN_DB_PREFIX."facture as f, ".MAIN_DB_PREFIX."societe as s";
    +        if ($filteronproducttype >= 0) { $sql.=", ".MAIN_DB_PREFIX."product as p";
    +        }
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE f.rowid = d.fk_facture";
    +        if ($this->id > 0) { $sql.= " AND d.fk_product =".$this->id;
    +        } else { $sql.=" AND d.fk_product > 0";
    +        }
    +        if ($filteronproducttype >= 0) { $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype;
    +        }
    +        $sql.= " AND f.fk_soc = s.rowid";
    +        $sql.= " AND f.entity IN (".getEntity('facture').")";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) {    $sql.= " AND f.fk_soc = $socid";
    +        }
    +        $sql.=$morefilter;
    +        $sql.= " GROUP BY date_format(f.datef,'%Y%m')";
    +        $sql.= " ORDER BY date_format(f.datef,'%Y%m') DESC";
    +
    +        return $this->_get_stats($sql, $mode, $year);
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return nb of units or supplier invoices in which product is included
    +     *
    +     * @param  int    $socid               Limit count on a particular third party id
    +     * @param  string $mode                'byunit'=number of unit, 'bynumber'=nb of entities
    +     * @param  int    $filteronproducttype 0=To filter on product only, 1=To filter on services only
    +     * @param  int    $year                Year (0=last 12 month)
    +     * @param  string $morefilter          More sql filters
    +     * @return array                            <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    +     */
    +    function get_nb_achat($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        global $user;
    +
    +        $sql = "SELECT sum(d.qty), date_format(f.datef, '%Y%m')";
    +        if ($mode == 'bynumber') { $sql.= ", count(DISTINCT f.rowid)";
    +        }
    +        $sql.= " FROM ".MAIN_DB_PREFIX."facture_fourn_det as d, ".MAIN_DB_PREFIX."facture_fourn as f, ".MAIN_DB_PREFIX."societe as s";
    +        if ($filteronproducttype >= 0) { $sql.=", ".MAIN_DB_PREFIX."product as p";
    +        }
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE f.rowid = d.fk_facture_fourn";
    +        if ($this->id > 0) { $sql.= " AND d.fk_product =".$this->id;
    +        } else { $sql.=" AND d.fk_product > 0";
    +        }
    +        if ($filteronproducttype >= 0) { $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype;
    +        }
    +        $sql.= " AND f.fk_soc = s.rowid";
    +        $sql.= " AND f.entity IN (".getEntity('facture_fourn').")";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND f.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) {    $sql.= " AND f.fk_soc = $socid";
    +        }
    +        $sql.=$morefilter;
    +        $sql.= " GROUP BY date_format(f.datef,'%Y%m')";
    +        $sql.= " ORDER BY date_format(f.datef,'%Y%m') DESC";
    +
    +        return $this->_get_stats($sql, $mode, $year);
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return nb of units or proposals in which product is included
    +     *
    +     * @param  int    $socid               Limit count on a particular third party id
    +     * @param  string $mode                'byunit'=number of unit, 'bynumber'=nb of entities
    +     * @param  int    $filteronproducttype 0=To filter on product only, 1=To filter on services only
    +     * @param  int    $year                Year (0=last 12 month)
    +     * @param  string $morefilter          More sql filters
    +     * @return array                            <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    +     */
    +    function get_nb_propal($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        global $user;
    +
    +        $sql = "SELECT sum(d.qty), date_format(p.datep, '%Y%m')";
    +        if ($mode == 'bynumber') { $sql.= ", count(DISTINCT p.rowid)";
    +        }
    +        $sql.= " FROM ".MAIN_DB_PREFIX."propaldet as d, ".MAIN_DB_PREFIX."propal as p, ".MAIN_DB_PREFIX."societe as s";
    +        if ($filteronproducttype >= 0) { $sql.=", ".MAIN_DB_PREFIX."product as prod";
    +        }
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE p.rowid = d.fk_propal";
    +        if ($this->id > 0) { $sql.= " AND d.fk_product =".$this->id;
    +        } else { $sql.=" AND d.fk_product > 0";
    +        }
    +        if ($filteronproducttype >= 0) { $sql.= " AND prod.rowid = d.fk_product AND prod.fk_product_type =".$filteronproducttype;
    +        }
    +        $sql.= " AND p.fk_soc = s.rowid";
    +        $sql.= " AND p.entity IN (".getEntity('propal').")";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) {    $sql.= " AND p.fk_soc = ".$socid;
    +        }
    +        $sql.=$morefilter;
    +        $sql.= " GROUP BY date_format(p.datep,'%Y%m')";
    +        $sql.= " ORDER BY date_format(p.datep,'%Y%m') DESC";
    +
    +        return $this->_get_stats($sql, $mode, $year);
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return nb of units or proposals in which product is included
    +     *
    +     * @param  int    $socid               Limit count on a particular third party id
    +     * @param  string $mode                'byunit'=number of unit, 'bynumber'=nb of entities
    +     * @param  int    $filteronproducttype 0=To filter on product only, 1=To filter on services only
    +     * @param  int    $year                Year (0=last 12 month)
    +     * @param  string $morefilter          More sql filters
    +     * @return array                            <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    +     */
    +    function get_nb_propalsupplier($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    +    {
    +        // phpcs:enable
    +        global $conf;
    +        global $user;
    +
    +        $sql = "SELECT sum(d.qty), date_format(p.date_valid, '%Y%m')";
    +        if ($mode == 'bynumber') { $sql.= ", count(DISTINCT p.rowid)";
    +        }
    +        $sql.= " FROM ".MAIN_DB_PREFIX."supplier_proposaldet as d, ".MAIN_DB_PREFIX."supplier_proposal as p, ".MAIN_DB_PREFIX."societe as s";
    +        if ($filteronproducttype >= 0) { $sql.=", ".MAIN_DB_PREFIX."product as prod";
    +        }
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE p.rowid = d.fk_supplier_proposal";
    +        if ($this->id > 0) { $sql.= " AND d.fk_product =".$this->id;
    +        } else { $sql.=" AND d.fk_product > 0";
    +        }
    +        if ($filteronproducttype >= 0) { $sql.= " AND prod.rowid = d.fk_product AND prod.fk_product_type =".$filteronproducttype;
    +        }
    +        $sql.= " AND p.fk_soc = s.rowid";
    +        $sql.= " AND p.entity IN (".getEntity('supplier_proposal').")";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND p.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) {    $sql.= " AND p.fk_soc = ".$socid;
    +        }
    +        $sql.=$morefilter;
    +        $sql.= " GROUP BY date_format(p.date_valid,'%Y%m')";
    +        $sql.= " ORDER BY date_format(p.date_valid,'%Y%m') DESC";
    +
    +        return $this->_get_stats($sql, $mode, $year);
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return nb of units or orders in which product is included
    +     *
    +     * @param  int    $socid               Limit count on a particular third party id
    +     * @param  string $mode                'byunit'=number of unit, 'bynumber'=nb of entities
    +     * @param  int    $filteronproducttype 0=To filter on product only, 1=To filter on services only
    +     * @param  int    $year                Year (0=last 12 month)
    +     * @param  string $morefilter          More sql filters
    +     * @return array                            <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    +     */
    +    function get_nb_order($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    +    {
    +        // phpcs:enable
    +        global $conf, $user;
    +
    +        $sql = "SELECT sum(d.qty), date_format(c.date_commande, '%Y%m')";
    +        if ($mode == 'bynumber') { $sql.= ", count(DISTINCT c.rowid)";
    +        }
    +        $sql.= " FROM ".MAIN_DB_PREFIX."commandedet as d, ".MAIN_DB_PREFIX."commande as c, ".MAIN_DB_PREFIX."societe as s";
    +        if ($filteronproducttype >= 0) { $sql.=", ".MAIN_DB_PREFIX."product as p";
    +        }
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE c.rowid = d.fk_commande";
    +        if ($this->id > 0) { $sql.= " AND d.fk_product =".$this->id;
    +        } else { $sql.=" AND d.fk_product > 0";
    +        }
    +        if ($filteronproducttype >= 0) { $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype;
    +        }
    +        $sql.= " AND c.fk_soc = s.rowid";
    +        $sql.= " AND c.entity IN (".getEntity('commande').")";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) {    $sql.= " AND c.fk_soc = ".$socid;
    +        }
    +        $sql.=$morefilter;
    +        $sql.= " GROUP BY date_format(c.date_commande,'%Y%m')";
    +        $sql.= " ORDER BY date_format(c.date_commande,'%Y%m') DESC";
    +
    +        return $this->_get_stats($sql, $mode, $year);
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return nb of units or orders in which product is included
    +     *
    +     * @param  int    $socid               Limit count on a particular third party id
    +     * @param  string $mode                'byunit'=number of unit, 'bynumber'=nb of entities
    +     * @param  int    $filteronproducttype 0=To filter on product only, 1=To filter on services only
    +     * @param  int    $year                Year (0=last 12 month)
    +     * @param  string $morefilter          More sql filters
    +     * @return array                            <0 if KO, result[month]=array(valuex,valuey) where month is 0 to 11
    +     */
    +    function get_nb_ordersupplier($socid, $mode, $filteronproducttype=-1, $year=0, $morefilter='')
    +    {
    +        // phpcs:enable
    +        global $conf, $user;
    +
    +        $sql = "SELECT sum(d.qty), date_format(c.date_commande, '%Y%m')";
    +        if ($mode == 'bynumber') { $sql.= ", count(DISTINCT c.rowid)";
    +        }
    +        $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as d, ".MAIN_DB_PREFIX."commande_fournisseur as c, ".MAIN_DB_PREFIX."societe as s";
    +        if ($filteronproducttype >= 0) { $sql.=", ".MAIN_DB_PREFIX."product as p";
    +        }
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +        }
    +        $sql.= " WHERE c.rowid = d.fk_commande";
    +        if ($this->id > 0) { $sql.= " AND d.fk_product =".$this->id;
    +        } else { $sql.=" AND d.fk_product > 0";
    +        }
    +        if ($filteronproducttype >= 0) { $sql.= " AND p.rowid = d.fk_product AND p.fk_product_type =".$filteronproducttype;
    +        }
    +        $sql.= " AND c.fk_soc = s.rowid";
    +        $sql.= " AND c.entity IN (".getEntity('supplier_order').")";
    +        if (!$user->rights->societe->client->voir && !$socid) { $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
    +        }
    +        if ($socid > 0) {    $sql.= " AND c.fk_soc = ".$socid;
    +        }
    +        $sql.=$morefilter;
    +        $sql.= " GROUP BY date_format(c.date_commande,'%Y%m')";
    +        $sql.= " ORDER BY date_format(c.date_commande,'%Y%m') DESC";
    +
    +        return $this->_get_stats($sql, $mode, $year);
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Link a product/service to a parent product/service
    +     *
    +     * @param  int $id_pere Id of parent product/service
    +     * @param  int $id_fils Id of child product/service
    +     * @param  int $qty     Quantity
    +     * @param  int $incdec  1=Increase/decrease stock of child when parent stock increase/decrease
    +     * @return int                < 0 if KO, > 0 if OK
    +     */
    +    function add_sousproduit($id_pere, $id_fils, $qty, $incdec=1)
    +    {
    +        // phpcs:enable
    +        // Clean parameters
    +        if (! is_numeric($id_pere)) { $id_pere=0;
    +        }
    +        if (! is_numeric($id_fils)) { $id_fils=0;
    +        }
    +        if (! is_numeric($incdec)) { $incdec=0;
    +        }
    +
    +        $result=$this->del_sousproduit($id_pere, $id_fils);
    +        if ($result < 0) { return $result;
    +        }
    +
    +        // Check not already father of id_pere (to avoid father -> child -> father links)
    +        $sql = 'SELECT fk_product_pere from '.MAIN_DB_PREFIX.'product_association';
    +        $sql .= ' WHERE fk_product_pere  = '.$id_fils.' AND fk_product_fils = '.$id_pere;
    +        if (! $this->db->query($sql)) {
    +            dol_print_error($this->db);
    +            return -1;
    +        }
    +        else
    +        {
    +            $result = $this->db->query($sql);
    +            if ($result) {
    +                $num = $this->db->num_rows($result);
    +                if($num > 0) {
    +                    $this->error="isFatherOfThis";
    +                    return -1;
    +                }
    +                else
    +                {
    +                    $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'product_association(fk_product_pere,fk_product_fils,qty,incdec)';
    +                    $sql .= ' VALUES ('.$id_pere.', '.$id_fils.', '.$qty.', '.$incdec.')';
    +                    if (! $this->db->query($sql)) {
    +                         dol_print_error($this->db);
    +                         return -1;
    +                    }
    +                    else
    +                    {
    +                         return 1;
    +                    }
    +                }
    +            }
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Modify composed product
    +     *
    +     * @param  int $id_pere Id of parent product/service
    +     * @param  int $id_fils Id of child product/service
    +     * @param  int $qty     Quantity
    +     * @param  int $incdec  1=Increase/decrease stock of child when parent stock increase/decrease
    +     * @return int                < 0 if KO, > 0 if OK
    +     */
    +    function update_sousproduit($id_pere, $id_fils, $qty, $incdec=1)
    +    {
    +        // phpcs:enable
    +        // Clean parameters
    +        if (! is_numeric($id_pere)) { $id_pere=0;
    +        }
    +        if (! is_numeric($id_fils)) { $id_fils=0;
    +        }
    +        if (! is_numeric($incdec)) { $incdec=1;
    +        }
    +        if (! is_numeric($qty)) { $qty=1;
    +        }
    +
    +        $sql = 'UPDATE '.MAIN_DB_PREFIX.'product_association SET ';
    +        $sql.= 'qty='.$qty;
    +        $sql.= ',incdec='.$incdec;
    +        $sql .= ' WHERE fk_product_pere='.$id_pere.' AND fk_product_fils='.$id_fils;
    +
    +        if (!$this->db->query($sql)) {
    +            dol_print_error($this->db);
    +            return -1;
    +        }
    +        else
    +        {
    +            return 1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Retire le lien entre un sousproduit et un produit/service
    +     *
    +     * @param  int $fk_parent Id du produit auquel ne sera plus lie le produit lie
    +     * @param  int $fk_child  Id du produit a ne plus lie
    +     * @return int                    < 0 if KO, > 0 if OK
    +     */
    +    function del_sousproduit($fk_parent, $fk_child)
    +    {
    +        // phpcs:enable
    +        if (! is_numeric($fk_parent)) { $fk_parent=0;
    +        }
    +        if (! is_numeric($fk_child)) { $fk_child=0;
    +        }
    +
    +        $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_association";
    +        $sql.= " WHERE fk_product_pere  = ".$fk_parent;
    +        $sql.= " AND fk_product_fils = ".$fk_child;
    +
    +        dol_syslog(get_class($this).'::del_sousproduit', LOG_DEBUG);
    +        if (! $this->db->query($sql)) {
    +            dol_print_error($this->db);
    +            return -1;
    +        }
    +
    +        return 1;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Verifie si c'est un sous-produit
    +     *
    +     * @param  int $fk_parent Id du produit auquel le produit est lie
    +     * @param  int $fk_child  Id du produit lie
    +     * @return int                    < 0 si erreur, > 0 si ok
    +     */
    +    function is_sousproduit($fk_parent, $fk_child)
    +    {
    +        // phpcs:enable
    +        $sql = "SELECT fk_product_pere, qty, incdec";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_association";
    +        $sql.= " WHERE fk_product_pere  = '".$fk_parent."'";
    +        $sql.= " AND fk_product_fils = '".$fk_child."'";
    +
    +        $result = $this->db->query($sql);
    +        if ($result) {
    +            $num = $this->db->num_rows($result);
    +
    +            if($num > 0) {
    +                $obj = $this->db->fetch_object($result);
    +                $this->is_sousproduit_qty = $obj->qty;
    +                $this->is_sousproduit_incdec = $obj->incdec;
    +
    +                return true;
    +            }
    +            else
    +            {
    +                return false;
    +            }
    +        }
    +        else
    +        {
    +            dol_print_error($this->db);
    +            return -1;
    +        }
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Add a supplier price for the product.
    +     *  Note: Duplicate ref is accepted for different quantity only, or for different companies.
    +     *
    +     * @param  User   $user      User that make link
    +     * @param  int    $id_fourn  Supplier id
    +     * @param  string $ref_fourn Supplier ref
    +     * @param  float  $quantity  Quantity minimum for price
    +     * @return int                 < 0 if KO, 0 if link already exists for this product, > 0 if OK
    +     */
    +    function add_fournisseur($user, $id_fourn, $ref_fourn, $quantity)
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $now=dol_now();
    +
    +        dol_syslog(get_class($this)."::add_fournisseur id_fourn = ".$id_fourn." ref_fourn=".$ref_fourn." quantity=".$quantity, LOG_DEBUG);
    +
    +        if ($ref_fourn) {
    +            $sql = "SELECT rowid, fk_product";
    +            $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
    +            $sql.= " WHERE fk_soc = ".$id_fourn;
    +            $sql.= " AND ref_fourn = '".$this->db->escape($ref_fourn)."'";
    +            $sql.= " AND fk_product != ".$this->id;
    +            $sql.= " AND entity IN (".getEntity('productsupplierprice').")";
    +
    +            $resql=$this->db->query($sql);
    +            if ($resql) {
    +                $obj = $this->db->fetch_object($resql);
    +                if ($obj) {
    +                    // If the supplier ref already exists but for another product (duplicate ref is accepted for different quantity only or different companies)
    +                    $this->product_id_already_linked = $obj->fk_product;
    +                    return -3;
    +                }
    +                $this->db->free($resql);
    +            }
    +        }
    +
    +        $sql = "SELECT rowid";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
    +        $sql.= " WHERE fk_soc = ".$id_fourn;
    +        if ($ref_fourn) { $sql.= " AND ref_fourn = '".$this->db->escape($ref_fourn)."'";
    +        } else { $sql.= " AND (ref_fourn = '' OR ref_fourn IS NULL)";
    +        }
    +        $sql.= " AND quantity = '".$quantity."'";
    +        $sql.= " AND fk_product = ".$this->id;
    +        $sql.= " AND entity IN (".getEntity('productsupplierprice').")";
    +
    +        $resql=$this->db->query($sql);
    +        if ($resql) {
    +            $obj = $this->db->fetch_object($resql);
    +
    +            // The reference supplier does not exist, we create it for this product.
    +            if (! $obj) {
    +                $sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price(";
    +                $sql.= "datec";
    +                $sql.= ", entity";
    +                $sql.= ", fk_product";
    +                $sql.= ", fk_soc";
    +                $sql.= ", ref_fourn";
    +                $sql.= ", quantity";
    +                $sql.= ", fk_user";
    +                $sql.= ", tva_tx";
    +                $sql.= ") VALUES (";
    +                $sql.= "'".$this->db->idate($now)."'";
    +                $sql.= ", ".$conf->entity;
    +                $sql.= ", ".$this->id;
    +                $sql.= ", ".$id_fourn;
    +                $sql.= ", '".$this->db->escape($ref_fourn)."'";
    +                $sql.= ", ".$quantity;
    +                $sql.= ", ".$user->id;
    +                $sql.= ", 0";
    +                $sql.= ")";
    +
    +                if ($this->db->query($sql)) {
    +                    $this->product_fourn_price_id = $this->db->last_insert_id(MAIN_DB_PREFIX."product_fournisseur_price");
    +                    return 1;
    +                }
    +                else
    +                {
    +                    $this->error=$this->db->lasterror();
    +                    return -1;
    +                }
    +            }
    +            // If the supplier price already exists for this product and quantity
    +            else
    +            {
    +                $this->product_fourn_price_id = $obj->rowid;
    +                return 0;
    +            }
    +        }
    +        else
    +        {
    +            $this->error=$this->db->lasterror();
    +            return -2;
    +        }
    +    }
    +
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Renvoie la liste des fournisseurs du produit/service
    +     *
    +     * @return array        Tableau des id de fournisseur
    +     */
    +    function list_suppliers()
    +    {
    +        // phpcs:enable
    +        global $conf;
    +
    +        $list = array();
    +
    +        $sql = "SELECT DISTINCT p.fk_soc";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as p";
    +        $sql.= " WHERE p.fk_product = ".$this->id;
    +        $sql.= " AND p.entity = ".$conf->entity;
    +
    +        $result = $this->db->query($sql);
    +        if ($result) {
    +            $num = $this->db->num_rows($result);
    +            $i=0;
    +            while ($i < $num)
    +            {
    +                $obj = $this->db->fetch_object($result);
    +                $list[$i] = $obj->fk_soc;
    +                $i++;
    +            }
    +        }
    +
    +        return $list;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Recopie les prix d'un produit/service sur un autre
    +     *
    +     * @param  int $fromId Id product source
    +     * @param  int $toId   Id product target
    +     * @return int                     < 0 if KO, > 0 if OK
    +     */
    +    function clone_price($fromId, $toId)
    +    {
    +        // phpcs:enable
    +        $this->db->begin();
    +
    +        // les prix
    +        $sql = "INSERT ".MAIN_DB_PREFIX."product_price (";
    +        $sql.= " fk_product, date_price, price, tva_tx, localtax1_tx, localtax2_tx, fk_user_author, tosell)";
    +        $sql.= " SELECT ".$toId . ", date_price, price, tva_tx, localtax1_tx, localtax2_tx, fk_user_author, tosell";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_price ";
    +        $sql.= " WHERE fk_product = ". $fromId;
    +
    +        dol_syslog(get_class($this).'::clone_price', LOG_DEBUG);
    +        if (! $this->db->query($sql)) {
    +            $this->db->rollback();
    +            return -1;
    +        }
    +        $this->db->commit();
    +        return 1;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     * Clone links between products
    +     *
    +     * @param  int $fromId Product id
    +     * @param  int $toId   Product id
    +     * @return int                  <0 if KO, >0 if OK
    +     */
    +    function clone_associations($fromId, $toId)
    +    {
    +        // phpcs:enable
    +        $this->db->begin();
    +
    +        $sql = 'INSERT INTO '.MAIN_DB_PREFIX.'product_association (fk_product_pere, fk_product_fils, qty)';
    +        $sql.= " SELECT ".$toId.", fk_product_fils, qty FROM ".MAIN_DB_PREFIX."product_association";
    +        $sql.= " WHERE fk_product_pere = ".$fromId;
    +
    +        dol_syslog(get_class($this).'::clone_association', LOG_DEBUG);
    +        if (! $this->db->query($sql)) {
    +            $this->db->rollback();
    +            return -1;
    +        }
    +
    +        $this->db->commit();
    +        return 1;
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Recopie les fournisseurs et prix fournisseurs d'un produit/service sur un autre
    +     *
    +     * @param  int $fromId Id produit source
    +     * @param  int $toId   Id produit cible
    +     * @return int                 < 0 si erreur, > 0 si ok
    +     */
    +    function clone_fournisseurs($fromId, $toId)
    +    {
    +        // phpcs:enable
    +        $this->db->begin();
    +
    +        $now=dol_now();
    +
    +        // les fournisseurs
    +        /*$sql = "INSERT ".MAIN_DB_PREFIX."product_fournisseur ("
    +        . " datec, fk_product, fk_soc, ref_fourn, fk_user_author )"
    +        . " SELECT '".$this->db->idate($now)."', ".$toId.", fk_soc, ref_fourn, fk_user_author"
    +        . " FROM ".MAIN_DB_PREFIX."product_fournisseur"
    +        . " WHERE fk_product = ".$fromId;
    +
    +        if ( ! $this->db->query($sql ) )
    +        {
    +        $this->db->rollback();
    +        return -1;
    +        }*/
    +
    +        // les prix de fournisseurs.
    +        $sql = "INSERT ".MAIN_DB_PREFIX."product_fournisseur_price (";
    +        $sql.= " datec, fk_product, fk_soc, price, quantity, fk_user)";
    +        $sql.= " SELECT '".$this->db->idate($now)."', ".$toId. ", fk_soc, price, quantity, fk_user";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price";
    +        $sql.= " WHERE fk_product = ".$fromId;
    +
    +        dol_syslog(get_class($this).'::clone_fournisseurs', LOG_DEBUG);
    +        $resql=$this->db->query($sql);
    +        if (! $resql) {
    +            $this->db->rollback();
    +            return -1;
    +        }
    +        else
    +        {
    +            $this->db->commit();
    +            return 1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Fonction recursive uniquement utilisee par get_arbo_each_prod, recompose l'arborescence des sousproduits
    +     *     Define value of this->res
    +     *
    +     * @param  array  $prod       Products array
    +     * @param  string $compl_path Directory path of parents to add before
    +     * @param  int    $multiply   Because each sublevel must be multiplicated by parent nb
    +     * @param  int    $level      Init level
    +     * @param  int    $id_parent  Id parent
    +     * @return void
    +     */
    +    function fetch_prod_arbo($prod, $compl_path="", $multiply=1, $level=1, $id_parent=0)
    +    {
    +        // phpcs:enable
    +        global $conf,$langs;
    +
    +        $product = new Product($this->db);
    +        //var_dump($prod);
    +        foreach($prod as $id_product => $desc_pere)    // $id_product is 0 (first call starting with root top) or an id of a sub_product
    +        {
    +            if (is_array($desc_pere))    // If desc_pere is an array, this means it's a child
    +            {
    +                $id=(! empty($desc_pere[0]) ? $desc_pere[0] :'');
    +                $nb=(! empty($desc_pere[1]) ? $desc_pere[1] :'');
    +                $type=(! empty($desc_pere[2]) ? $desc_pere[2] :'');
    +                $label=(! empty($desc_pere[3]) ? $desc_pere[3] :'');
    +                $incdec=!empty($desc_pere[4]) ? $desc_pere[4] : 0;
    +
    +                if ($multiply < 1) { $multiply=1;
    +                }
    +
    +                //print "XXX We add id=".$id." - label=".$label." - nb=".$nb." - multiply=".$multiply." fullpath=".$compl_path.$label."\n";
    +                $this->fetch($id);        // Load product
    +                $this->load_stock('nobatch,novirtual');    // Load stock to get true this->stock_reel
    +                $this->res[]= array(
    +                 'id'=>$id,                    // Id product
    +                 'id_parent'=>$id_parent,
    +                 'ref'=>$this->ref,            // Ref product
    +                 'nb'=>$nb,                    // Nb of units that compose parent product
    +                 'nb_total'=>$nb*$multiply,    // Nb of units for all nb of product
    +                 'stock'=>$this->stock_reel,    // Stock
    +                 'stock_alert'=>$this->seuil_stock_alerte,    // Stock alert
    +                 'label'=>$label,
    +                 'fullpath'=>$compl_path.$label,            // Label
    +                 'type'=>$type,                // Nb of units that compose parent product
    +                 'desiredstock'=>$this->desiredstock,
    +                 'level'=>$level,
    +                 'incdec'=>$incdec,
    +                 'entity'=>$this->entity
    +                );
    +
    +                // Recursive call if there is childs to child
    +                if (is_array($desc_pere['childs'])) {
    +                       //print 'YYY We go down for '.$desc_pere[3]." -> \n";
    +                       $this->fetch_prod_arbo($desc_pere['childs'], $compl_path.$desc_pere[3]." -> ", $desc_pere[1]*$multiply, $level+1, $id);
    +                }
    +            }
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Build the tree of subproducts into an array
    +     *  this->sousprods is loaded by this->get_sousproduits_arbo()
    +     *
    +     * @param  int $multiply Because each sublevel must be multiplicated by parent nb
    +     * @return array                     $this->res
    +     */
    +    function get_arbo_each_prod($multiply=1)
    +    {
    +        // phpcs:enable
    +        $this->res = array();
    +        if (isset($this->sousprods) && is_array($this->sousprods)) {
    +            foreach($this->sousprods as $prod_name => $desc_product)
    +            {
    +                if (is_array($desc_product)) { $this->fetch_prod_arbo($desc_product, "", $multiply, 1, $this->id);
    +                }
    +            }
    +        }
    +        //var_dump($this->res);
    +        return $this->res;
    +    }
    +
    +    /**
    +     *  Return all parent products for current product (first level only)
    +     *
    +     * @return int            Nb of father + child
    +     */
    +    public function hasFatherOrChild()
    +    {
    +        $nb = 0;
    +
    +        $sql = "SELECT COUNT(pa.rowid) as nb";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_association as pa";
    +        $sql.= " WHERE pa.fk_product_fils = ".$this->id." OR pa.fk_product_pere = ".$this->id;
    +        $resql = $this->db->query($sql);
    +        if ($resql) {
    +            $obj = $this->db->fetch_object($resql);
    +            if ($obj) { $nb = $obj->nb;
    +            }
    +        }
    +        else
    +        {
    +            return -1;
    +        }
    +
    +        return $nb;
    +    }
    +
    +    /**
    +     * Return if a product has variants or not
    +     *
    +     * @return int        Number of variants
    +     */
    +    public function hasVariants()
    +    {
    +        $nb = 0;
    +        $sql = "SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX."product_attribute_combination WHERE fk_product_parent = ".$this->id;
    +        $sql.= " AND entity IN (".getEntity('product').")";
    +
    +        $resql = $this->db->query($sql);
    +        if ($resql) {
    +            $obj = $this->db->fetch_object($resql);
    +            if ($obj) { $nb = $obj->nb;
    +            }
    +        }
    +
    +        return $nb;
    +    }
    +
    +
    +    /**
    +     * Return if loaded product is a variant
    +     *
    +     * @return int
    +     */
    +    public function isVariant()
    +    {
    +        global $conf;
    +        if (!empty($conf->variants->enabled)) {
    +            $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . "product_attribute_combination WHERE fk_product_child = " . $this->id . " AND entity IN (" . getEntity('product') . ")";
    +
    +            $query = $this->db->query($sql);
    +
    +            if ($query) {
    +                if (!$this->db->num_rows($query)) {
    +                    return false;
    +                }
    +                return true;
    +            } else {
    +                dol_print_error($this->db);
    +                return -1;
    +            }
    +        } else {
    +            return false;
    +        }
    +    }
    +
    +    /**
    +     *  Return all parent products for current product (first level only)
    +     *
    +     * @return array         Array of product
    +     */
    +    public function getFather()
    +    {
    +        $sql = "SELECT p.rowid, p.label as label, p.ref as ref, pa.fk_product_pere as id, p.fk_product_type, pa.qty, pa.incdec, p.entity";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_association as pa,";
    +        $sql.= " ".MAIN_DB_PREFIX."product as p";
    +        $sql.= " WHERE p.rowid = pa.fk_product_pere";
    +        $sql.= " AND pa.fk_product_fils = ".$this->id;
    +
    +        $res = $this->db->query($sql);
    +        if ($res) {
    +            $prods = array ();
    +            while ($record = $this->db->fetch_array($res))
    +            {
    +                // $record['id'] = $record['rowid'] = id of father
    +                $prods[$record['id']]['id'] = $record['rowid'];
    +                $prods[$record['id']]['ref'] = $record['ref'];
    +                $prods[$record['id']]['label'] = $record['label'];
    +                $prods[$record['id']]['qty'] = $record['qty'];
    +                $prods[$record['id']]['incdec'] = $record['incdec'];
    +                $prods[$record['id']]['fk_product_type'] =  $record['fk_product_type'];
    +                $prods[$record['id']]['entity'] =  $record['entity'];
    +            }
    +            return $prods;
    +        }
    +        else
    +        {
    +            dol_print_error($this->db);
    +            return -1;
    +        }
    +    }
    +
    +
    +    /**
    +     *  Return childs of product $id
    +     *
    +     * @param  int $id             Id of product to search childs of
    +     * @param  int $firstlevelonly Return only direct child
    +     * @param  int $level          Level of recursing call (start to 1)
    +     * @return array                       Return array(prodid=>array(0=prodid, 1=>qty, 2=> ...)
    +     */
    +    public function getChildsArbo($id, $firstlevelonly=0, $level=1)
    +    {
    +        global $alreadyfound;
    +
    +        $sql = "SELECT p.rowid, p.label as label, pa.qty as qty, pa.fk_product_fils as id, p.fk_product_type, pa.incdec";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product as p";
    +        $sql.= ", ".MAIN_DB_PREFIX."product_association as pa";
    +        $sql.= " WHERE p.rowid = pa.fk_product_fils";
    +        $sql.= " AND pa.fk_product_pere = ".$id;
    +        $sql.= " AND pa.fk_product_fils != ".$id;    // This should not happens, it is to avoid infinite loop if it happens
    +
    +        dol_syslog(get_class($this).'::getChildsArbo id='.$id.' level='.$level, LOG_DEBUG);
    +
    +        if ($level == 1) { $alreadyfound=array($id=>1);    // We init array of found object to start of tree, so if we found it later (should not happened), we stop immediatly
    +        }
    +        // Protection against infinite loop
    +        if ($level > 30) { return array();
    +        }
    +
    +        $res  = $this->db->query($sql);
    +        if ($res) {
    +            $prods = array();
    +            while ($rec = $this->db->fetch_array($res))
    +            {
    +                if (! empty($alreadyfound[$rec['rowid']])) {
    +                    dol_syslog(get_class($this).'::getChildsArbo the product id='.$rec['rowid'].' was already found at a higher level in tree. We discard to avoid infinite loop', LOG_WARNING);
    +                    continue;
    +                }
    +                $alreadyfound[$rec['rowid']]=1;
    +                $prods[$rec['rowid']]= array(
    +                 0=>$rec['rowid'],
    +                 1=>$rec['qty'],
    +                 2=>$rec['fk_product_type'],
    +                 3=>$this->db->escape($rec['label']),
    +                 4=>$rec['incdec']
    +                );
    +                //$prods[$this->db->escape($rec['label'])]= array(0=>$rec['id'],1=>$rec['qty'],2=>$rec['fk_product_type']);
    +                //$prods[$this->db->escape($rec['label'])]= array(0=>$rec['id'],1=>$rec['qty']);
    +                if (empty($firstlevelonly)) {
    +                       $listofchilds=$this->getChildsArbo($rec['rowid'], 0, $level + 1);
    +                    foreach($listofchilds as $keyChild => $valueChild)
    +                       {
    +                        $prods[$rec['rowid']]['childs'][$keyChild] = $valueChild;
    +                    }
    +                }
    +            }
    +
    +            return $prods;
    +        }
    +        else
    +        {
    +            dol_print_error($this->db);
    +            return -1;
    +        }
    +    }
    +
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *     Return tree of all subproducts for product. Tree contains id, name and quantity.
    +     *     Set this->sousprods
    +     *
    +     * @return void
    +     */
    +    function get_sousproduits_arbo()
    +    {
    +        // phpcs:enable
    +        $parent=array();
    +
    +        foreach($this->getChildsArbo($this->id) as $keyChild => $valueChild)    // Warning. getChildsArbo can call getChildsArbo recursively. Starting point is $value[0]=id of product
    +        {
    +            $parent[$this->label][$keyChild] = $valueChild;
    +        }
    +        foreach($parent as $key => $value)        // key=label, value is array of childs
    +        {
    +            $this->sousprods[$key] = $value;
    +        }
    +    }
    +
    +    /**
    +     *    Return clicable link of object (with eventually picto)
    +     *
    +     * @param  int    $withpicto             Add picto into link
    +     * @param  string $option                Where point the link ('stock', 'composition', 'category', 'supplier', '')
    +     * @param  int    $maxlength             Maxlength of ref
    +     * @param  int    $save_lastsearch_value -1=Auto, 0=No save of lastsearch_values when clicking, 1=Save lastsearch_values whenclicking
    +     * @return string                                String with URL
    +     */
    +    public function getNomUrl($withpicto=0, $option='', $maxlength=0, $save_lastsearch_value=-1)
    +    {
    +        global $conf, $langs, $hookmanager;
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/product.lib.php';
    +
    +        $result='';
    +        $newref=$this->ref;
    +        if ($maxlength) { $newref=dol_trunc($newref, $maxlength, 'middle');
    +        }
    +
    +        if ($this->type == Product::TYPE_PRODUCT) { $label = '<u>' . $langs->trans("ShowProduct") . '</u>';
    +        }
    +        if ($this->type == Product::TYPE_SERVICE) { $label = '<u>' . $langs->trans("ShowService") . '</u>';
    +        }
    +        if (! empty($this->ref)) {
    +            $label .= '<br><b>' . $langs->trans('ProductRef') . ':</b> ' . $this->ref;
    +        }
    +        if (! empty($this->label)) {
    +            $label .= '<br><b>' . $langs->trans('ProductLabel') . ':</b> ' . $this->label;
    +        }
    +
    +        if ($this->type == Product::TYPE_PRODUCT) {
    +            if ($this->weight) {  $label.="<br><b>".$langs->trans("Weight").'</b>: '.$this->weight.' '.measuring_units_string($this->weight_units, "weight");
    +            }
    +            if ($this->length) {  $label.="<br><b>".$langs->trans("Length").'</b>: '.$this->length.' '.measuring_units_string($this->length_units, 'length');
    +            }
    +            if ($this->surface) { $label.="<br><b>".$langs->trans("Surface").'</b>: '.$this->surface.' '.measuring_units_string($this->surface_units, 'surface');
    +            }
    +            if ($this->volume) {  $label.="<br><b>".$langs->trans("Volume").'</b>: '.$this->volume.' '.measuring_units_string($this->volume_units, 'volume');
    +            }
    +        }
    +
    +        if ($this->type == Product::TYPE_PRODUCT || ! empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
    +            if (! empty($conf->productbatch->enabled)) {
    +                   $langs->load("productbatch");
    +                $label.="<br><b>".$langs->trans("ManageLotSerial").'</b>: '.$this->getLibStatut(0, 2);
    +            }
    +        }
    +        //if ($this->type == Product::TYPE_SERVICE)
    +        //{
                 //
    +        //}
    +        if (! empty($conf->accounting->enabled) && $this->status) {
    +            include_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
    +            $label.= '<br><b>' . $langs->trans('ProductAccountancySellCode') . ':</b> '. length_accountg($this->accountancy_code_sell);
    +            $label.= '<br><b>' . $langs->trans('ProductAccountancySellIntraCode') . ':</b> '. length_accountg($this->accountancy_code_sell_export);
    +            $label.= '<br><b>' . $langs->trans('ProductAccountancySellExportCode') . ':</b> '. length_accountg($this->accountancy_code_sell_intra);
             }
    -        if (! empty($conf->accounting->enabled) && $this->status)
    -        {
    -        	include_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
    -        	$label.= '<br><b>' . $langs->trans('ProductAccountancySellCode') . ':</b> '. length_accountg($this->accountancy_code_sell);
    -        	$label.= '<br><b>' . $langs->trans('ProductAccountancySellIntraCode') . ':</b> '. length_accountg($this->accountancy_code_sell_export);
    -        	$label.= '<br><b>' . $langs->trans('ProductAccountancySellExportCode') . ':</b> '. length_accountg($this->accountancy_code_sell_intra);
    +        if (! empty($conf->accounting->enabled) && $this->status_buy) {
    +            include_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
    +            $label.= '<br><b>' . $langs->trans('ProductAccountancyBuyCode') . ':</b> '. length_accountg($this->accountancy_code_buy);
             }
    -        if (! empty($conf->accounting->enabled) && $this->status_buy)
    -        {
    -        	include_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
    -        	$label.= '<br><b>' . $langs->trans('ProductAccountancyBuyCode') . ':</b> '. length_accountg($this->accountancy_code_buy);
    -        }
    -        if (! empty($this->entity))
    -        {
    +        if (! empty($this->entity)) {
                 $tmpphoto = $this->show_photos('product', $conf->product->multidir_output[$this->entity], 1, 1, 0, 0, 0, 80);
    -            if ($this->nbphoto > 0) $label .= '<br>' . $tmpphoto;
    +            if ($this->nbphoto > 0) { $label .= '<br>' . $tmpphoto;
    +            }
             }
     
    -		$linkclose='';
    -		if (empty($notooltip))
    -		{
    -		    if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))
    -		    {
    -		        $label=$langs->trans("ShowOrder");
    -		        $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    -		    }
    +        $linkclose='';
    +        if (empty($notooltip)) {
    +            if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
    +                $label=$langs->trans("ShowOrder");
    +                $linkclose.=' alt="'.dol_escape_htmltag($label, 1).'"';
    +            }
     
    -		    $linkclose.= ' title="'.dol_escape_htmltag($label, 1, 1).'"';
    -		    $linkclose.= ' class="classfortooltip"';
    +            $linkclose.= ' title="'.dol_escape_htmltag($label, 1, 1).'"';
    +            $linkclose.= ' class="classfortooltip"';
     
    -		    /*
    -	        $hookmanager->initHooks(array('productdao'));
    -	        $parameters=array('id'=>$this->id);
    -	        $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    -	        if ($reshook > 0) $linkclose = $hookmanager->resPrint;
    -	        */
    -		}
    +            /*
    +            $hookmanager->initHooks(array('productdao'));
    +            $parameters=array('id'=>$this->id);
    +            $reshook=$hookmanager->executeHooks('getnomurltooltip',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    +            if ($reshook > 0) $linkclose = $hookmanager->resPrint;
    +            */
    +        }
     
             if ($option == 'supplier' || $option == 'category') {
                 $url = DOL_URL_ROOT.'/product/fournisseurs.php?id='.$this->id;
    @@ -3628,12 +3799,13 @@ class Product extends CommonObject
                 $url = DOL_URL_ROOT.'/product/card.php?id='.$this->id;
             }
     
    -        if ($option !== 'nolink')
    -        {
    -        	// Add param to save lastsearch_values or not
    -        	$add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    -        	if ($save_lastsearch_value == -1 && preg_match('/list\.php/',$_SERVER["PHP_SELF"])) $add_save_lastsearch_values=1;
    -        	if ($add_save_lastsearch_values) $url.='&save_lastsearch_values=1';
    +        if ($option !== 'nolink') {
    +            // Add param to save lastsearch_values or not
    +            $add_save_lastsearch_values=($save_lastsearch_value == 1 ? 1 : 0);
    +            if ($save_lastsearch_value == -1 && preg_match('/list\.php/', $_SERVER["PHP_SELF"])) { $add_save_lastsearch_values=1;
    +            }
    +            if ($add_save_lastsearch_values) { $url.='&save_lastsearch_values=1';
    +            }
             }
     
             $linkstart = '<a href="'.$url.'"';
    @@ -3641,384 +3813,384 @@ class Product extends CommonObject
             $linkend='</a>';
     
             $result.=$linkstart;
    -		if ($withpicto) {
    -			if ($this->type == Product::TYPE_PRODUCT) $result.=(img_object(($notooltip?'':$label), 'product', ($notooltip?'class="paddingright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1));
    -			if ($this->type == Product::TYPE_SERVICE) $result.=(img_object(($notooltip?'':$label), 'service',  ($notooltip?'class="paddinright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1));
    -		}
    -		$result.= $newref;
    -		$result.= $linkend;
    +        if ($withpicto) {
    +            if ($this->type == Product::TYPE_PRODUCT) { $result.=(img_object(($notooltip?'':$label), 'product', ($notooltip?'class="paddingright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1));
    +            }
    +            if ($this->type == Product::TYPE_SERVICE) { $result.=(img_object(($notooltip?'':$label), 'service', ($notooltip?'class="paddinright"':'class="paddingright classfortooltip"'), 0, 0, $notooltip?0:1));
    +            }
    +        }
    +        $result.= $newref;
    +        $result.= $linkend;
     
    -		global $action;
    -		$hookmanager->initHooks(array('productdao'));
    -		$parameters=array('id'=>$this->id, 'getnomurl'=>$result);
    -		$reshook=$hookmanager->executeHooks('getNomUrl',$parameters,$this,$action);    // Note that $action and $object may have been modified by some hooks
    -		if ($reshook > 0) $result = $hookmanager->resPrint;
    -		else $result .= $hookmanager->resPrint;
    +        global $action;
    +        $hookmanager->initHooks(array('productdao'));
    +        $parameters=array('id'=>$this->id, 'getnomurl'=>$result);
    +        $reshook=$hookmanager->executeHooks('getNomUrl', $parameters, $this, $action);    // Note that $action and $object may have been modified by some hooks
    +        if ($reshook > 0) { $result = $hookmanager->resPrint;
    +        } else { $result .= $hookmanager->resPrint;
    +        }
     
    -		return $result;
    -	}
    +        return $result;
    +    }
     
     
    -	/**
    -	 *  Create a document onto disk according to template module.
    -	 *
    -	 * 	@param	    string		$modele			Force model to use ('' to not force)
    -	 * 	@param		Translate	$outputlangs	Object langs to use for output
    -	 *  @param      int			$hidedetails    Hide details of lines
    -	 *  @param      int			$hidedesc       Hide description
    -	 *  @param      int			$hideref        Hide ref
    -	 * 	@return     int         				0 if KO, 1 if OK
    -	 */
    -	public function generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0)
    -	{
    -		global $conf,$user,$langs;
    +    /**
    +     *  Create a document onto disk according to template module.
    +     *
    +     * @param  string    $modele      Force model to use ('' to not force)
    +     * @param  Translate $outputlangs Object langs to use for output
    +     * @param  int       $hidedetails Hide details of lines
    +     * @param  int       $hidedesc    Hide description
    +     * @param  int       $hideref     Hide ref
    +     * @return int                         0 if KO, 1 if OK
    +     */
    +    public function generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0)
    +    {
    +        global $conf,$user,$langs;
     
    -		$langs->load("products");
    +        $langs->load("products");
     
    -		// Positionne le modele sur le nom du modele a utiliser
    -		if (! dol_strlen($modele))
    -		{
    -			if (! empty($conf->global->PRODUCT_ADDON_PDF))
    -			{
    -				$modele = $conf->global->PRODUCT_ADDON_PDF;
    -			}
    -			else
    -			{
    -				$modele = 'strato';
    -			}
    -		}
    +        // Positionne le modele sur le nom du modele a utiliser
    +        if (! dol_strlen($modele)) {
    +            if (! empty($conf->global->PRODUCT_ADDON_PDF)) {
    +                $modele = $conf->global->PRODUCT_ADDON_PDF;
    +            }
    +            else
    +            {
    +                $modele = 'strato';
    +            }
    +        }
     
    -		$modelpath = "core/modules/product/doc/";
    +        $modelpath = "core/modules/product/doc/";
     
    -		return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
    -	}
    +        return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
    +    }
     
    -	/**
    -	 *	Return label of status of object
    -	 *
    -	 *	@param      int	$mode       0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto
    -	 *	@param      int	$type       0=Sell, 1=Buy, 2=Batch Number management
    -	 *	@return     string      	Label of status
    -	 */
    -	function getLibStatut($mode=0, $type=0)
    -	{
    -		switch ($type)
    -		{
    -			case 0:
    -				return $this->LibStatut($this->status,$mode,$type);
    -			case 1:
    -				return $this->LibStatut($this->status_buy,$mode,$type);
    -			case 2:
    -				return $this->LibStatut($this->status_batch,$mode,$type);
    -			default:
    -				//Simulate previous behavior but should return an error string
    -				return $this->LibStatut($this->status_buy,$mode,$type);
    -		}
    -	}
    +    /**
    +     *    Return label of status of object
    +     *
    +     * @param  int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto
    +     * @param  int $type 0=Sell, 1=Buy, 2=Batch Number management
    +     * @return string          Label of status
    +     */
    +    public function getLibStatut($mode=0, $type=0)
    +    {
    +        switch ($type)
    +        {
    +        case 0:
    +            return $this->LibStatut($this->status, $mode, $type);
    +        case 1:
    +            return $this->LibStatut($this->status_buy, $mode, $type);
    +        case 2:
    +            return $this->LibStatut($this->status_batch, $mode, $type);
    +        default:
    +            //Simulate previous behavior but should return an error string
    +            return $this->LibStatut($this->status_buy, $mode, $type);
    +        }
    +    }
     
    -	/**
    -	 *	Return label of a given status
    -	 *
    -	 *	@param      int		$status     Statut
    -	 *	@param      int		$mode       0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto
    -	 *	@param      int		$type       0=Status "to sell", 1=Status "to buy", 2=Status "to Batch"
    -	 *	@return     string      		Label of status
    -	 */
    -	function LibStatut($status,$mode=0,$type=0)
    -	{
    -		global $conf, $langs;
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *    Return label of a given status
    +     *
    +     * @param  int $status Statut
    +     * @param  int $mode   0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto
    +     * @param  int $type   0=Status "to sell", 1=Status "to buy", 2=Status "to Batch"
    +     * @return string              Label of status
    +     */
    +    function LibStatut($status,$mode=0,$type=0)
    +    {
    +        // phpcs:enable
    +        global $conf, $langs;
     
    -		$langs->load('products');
    -		if (! empty($conf->productbatch->enabled)) $langs->load("productbatch");
    +        $langs->load('products');
    +        if (! empty($conf->productbatch->enabled)) { $langs->load("productbatch");
    +        }
     
    -		if ($type == 2)
    -		{
    -			switch ($mode)
    -			{
    -				case 0:
    -					return ($status == 0 ? $langs->trans('ProductStatusNotOnBatch') : $langs->trans('ProductStatusOnBatch'));
    -				case 1:
    -					return ($status == 0 ? $langs->trans('ProductStatusNotOnBatchShort') : $langs->trans('ProductStatusOnBatchShort'));
    -				case 2:
    -					return $this->LibStatut($status,3,2).' '.$this->LibStatut($status,1,2);
    -				case 3:
    -					if ($status == 0)
    -					{
    -						return img_picto($langs->trans('ProductStatusNotOnBatch'),'statut5');
    -					}
    -					return img_picto($langs->trans('ProductStatusOnBatch'),'statut4');
    -				case 4:
    -					return $this->LibStatut($status,3,2).' '.$this->LibStatut($status,0,2);
    -				case 5:
    -					return $this->LibStatut($status,1,2).' '.$this->LibStatut($status,3,2);
    -				default:
    -					return $langs->trans('Unknown');
    -			}
    -		}
    -		if ($mode == 0)
    -		{
    -			if ($status == 0) return ($type==0 ? $langs->trans('ProductStatusNotOnSellShort'):$langs->trans('ProductStatusNotOnBuyShort'));
    -			if ($status == 1) return ($type==0 ? $langs->trans('ProductStatusOnSellShort'):$langs->trans('ProductStatusOnBuyShort'));
    -		}
    -		if ($mode == 1)
    -		{
    -			if ($status == 0) return ($type==0 ? $langs->trans('ProductStatusNotOnSell'):$langs->trans('ProductStatusNotOnBuy'));
    -			if ($status == 1) return ($type==0 ? $langs->trans('ProductStatusOnSell'):$langs->trans('ProductStatusOnBuy'));
    -		}
    -		if ($mode == 2)
    -		{
    -			if ($status == 0) return img_picto($langs->trans('ProductStatusNotOnSell'),'statut5', 'class="pictostatus"').' '.($type==0 ? $langs->trans('ProductStatusNotOnSellShort'):$langs->trans('ProductStatusNotOnBuyShort'));
    -			if ($status == 1) return img_picto($langs->trans('ProductStatusOnSell'),'statut4', 'class="pictostatus"').' '.($type==0 ? $langs->trans('ProductStatusOnSellShort'):$langs->trans('ProductStatusOnBuyShort'));
    -		}
    -		if ($mode == 3)
    -		{
    -			if ($status == 0) return img_picto(($type==0 ? $langs->trans('ProductStatusNotOnSell') : $langs->trans('ProductStatusNotOnBuy')),'statut5', 'class="pictostatus"');
    -			if ($status == 1) return img_picto(($type==0 ? $langs->trans('ProductStatusOnSell') : $langs->trans('ProductStatusOnBuy')),'statut4', 'class="pictostatus"');
    -		}
    -		if ($mode == 4)
    -		{
    -			if ($status == 0) return img_picto($langs->trans('ProductStatusNotOnSell'),'statut5', 'class="pictostatus"').' '.($type==0 ? $langs->trans('ProductStatusNotOnSell'):$langs->trans('ProductStatusNotOnBuy'));
    -			if ($status == 1) return img_picto($langs->trans('ProductStatusOnSell'),'statut4', 'class="pictostatus"').' '.($type==0 ? $langs->trans('ProductStatusOnSell'):$langs->trans('ProductStatusOnBuy'));
    -		}
    -		if ($mode == 5)
    -		{
    -			if ($status == 0) return ($type==0 ? $langs->trans('ProductStatusNotOnSellShort'):$langs->trans('ProductStatusNotOnBuyShort')).' '.img_picto(($type==0 ? $langs->trans('ProductStatusNotOnSell'):$langs->trans('ProductStatusNotOnBuy')), 'statut5', 'class="pictostatus"');
    -			if ($status == 1) return ($type==0 ? $langs->trans('ProductStatusOnSellShort'):$langs->trans('ProductStatusOnBuyShort')).' '.img_picto(($type==0 ? $langs->trans('ProductStatusOnSell'):$langs->trans('ProductStatusOnBuy')),'statut4', 'class="pictostatus"');
    -		}
    -		if ($mode == 6)
    -		{
    -			if ($status == 0) return ($type==0 ? $langs->trans('ProductStatusNotOnSellShort'):$langs->trans('ProductStatusNotOnBuyShort')).' '.img_picto(($type==0 ? $langs->trans('ProductStatusNotOnSell'):$langs->trans('ProductStatusNotOnBuy')), 'statut5', 'class="pictostatus"');
    -			if ($status == 1) return ($type==0 ? $langs->trans('ProductStatusOnSellShort'):$langs->trans('ProductStatusOnBuyShort')).' '.img_picto(($type==0 ? $langs->trans('ProductStatusOnSell'):$langs->trans('ProductStatusOnBuy')),'statut4', 'class="pictostatus"');
    -		}
    -		return $langs->trans('Unknown');
    -	}
    +        if ($type == 2) {
    +            switch ($mode)
    +            {
    +            case 0:
    +                return ($status == 0 ? $langs->trans('ProductStatusNotOnBatch') : $langs->trans('ProductStatusOnBatch'));
    +            case 1:
    +                return ($status == 0 ? $langs->trans('ProductStatusNotOnBatchShort') : $langs->trans('ProductStatusOnBatchShort'));
    +            case 2:
    +                return $this->LibStatut($status, 3, 2).' '.$this->LibStatut($status, 1, 2);
    +            case 3:
    +                if ($status == 0) {
    +                    return img_picto($langs->trans('ProductStatusNotOnBatch'), 'statut5');
    +                }
    +                return img_picto($langs->trans('ProductStatusOnBatch'), 'statut4');
    +            case 4:
    +                return $this->LibStatut($status, 3, 2).' '.$this->LibStatut($status, 0, 2);
    +            case 5:
    +                return $this->LibStatut($status, 1, 2).' '.$this->LibStatut($status, 3, 2);
    +            default:
    +                return $langs->trans('Unknown');
    +            }
    +        }
    +        if ($mode == 0) {
    +            if ($status == 0) { return ($type==0 ? $langs->trans('ProductStatusNotOnSellShort'):$langs->trans('ProductStatusNotOnBuyShort'));
    +            } elseif ($status == 1) { return ($type==0 ? $langs->trans('ProductStatusOnSellShort'):$langs->trans('ProductStatusOnBuyShort'));
    +            }
    +        }
    +        elseif ($mode == 1) {
    +            if ($status == 0) { return ($type==0 ? $langs->trans('ProductStatusNotOnSell'):$langs->trans('ProductStatusNotOnBuy'));
    +            } elseif ($status == 1) { return ($type==0 ? $langs->trans('ProductStatusOnSell'):$langs->trans('ProductStatusOnBuy'));
    +            }
    +        }
    +        elseif ($mode == 2) {
    +            if ($status == 0) { return img_picto($langs->trans('ProductStatusNotOnSell'), 'statut5', 'class="pictostatus"').' '.($type==0 ? $langs->trans('ProductStatusNotOnSellShort'):$langs->trans('ProductStatusNotOnBuyShort'));
    +            } elseif ($status == 1) { return img_picto($langs->trans('ProductStatusOnSell'), 'statut4', 'class="pictostatus"').' '.($type==0 ? $langs->trans('ProductStatusOnSellShort'):$langs->trans('ProductStatusOnBuyShort'));
    +            }
    +        }
    +        elseif ($mode == 3) {
    +            if ($status == 0) { return img_picto(($type==0 ? $langs->trans('ProductStatusNotOnSell') : $langs->trans('ProductStatusNotOnBuy')), 'statut5', 'class="pictostatus"');
    +            } elseif ($status == 1) { return img_picto(($type==0 ? $langs->trans('ProductStatusOnSell') : $langs->trans('ProductStatusOnBuy')), 'statut4', 'class="pictostatus"');
    +            }
    +        }
    +        elseif ($mode == 4) {
    +            if ($status == 0) { return img_picto($langs->trans('ProductStatusNotOnSell'), 'statut5', 'class="pictostatus"').' '.($type==0 ? $langs->trans('ProductStatusNotOnSell'):$langs->trans('ProductStatusNotOnBuy'));
    +            } elseif ($status == 1) { return img_picto($langs->trans('ProductStatusOnSell'), 'statut4', 'class="pictostatus"').' '.($type==0 ? $langs->trans('ProductStatusOnSell'):$langs->trans('ProductStatusOnBuy'));
    +            }
    +        }
    +        elseif ($mode == 5) {
    +            if ($status == 0) { return ($type==0 ? $langs->trans('ProductStatusNotOnSellShort'):$langs->trans('ProductStatusNotOnBuyShort')).' '.img_picto(($type==0 ? $langs->trans('ProductStatusNotOnSell'):$langs->trans('ProductStatusNotOnBuy')), 'statut5', 'class="pictostatus"');
    +            } elseif ($status == 1) { return ($type==0 ? $langs->trans('ProductStatusOnSellShort'):$langs->trans('ProductStatusOnBuyShort')).' '.img_picto(($type==0 ? $langs->trans('ProductStatusOnSell'):$langs->trans('ProductStatusOnBuy')), 'statut4', 'class="pictostatus"');
    +            }
    +        }
    +        elseif ($mode == 6) {
    +            if ($status == 0) { return ($type==0 ? $langs->trans('ProductStatusNotOnSellShort'):$langs->trans('ProductStatusNotOnBuyShort')).' '.img_picto(($type==0 ? $langs->trans('ProductStatusNotOnSell'):$langs->trans('ProductStatusNotOnBuy')), 'statut5', 'class="pictostatus"');
    +            } elseif ($status == 1) { return ($type==0 ? $langs->trans('ProductStatusOnSellShort'):$langs->trans('ProductStatusOnBuyShort')).' '.img_picto(($type==0 ? $langs->trans('ProductStatusOnSell'):$langs->trans('ProductStatusOnBuy')), 'statut4', 'class="pictostatus"');
    +            }
    +        }
    +        return $langs->trans('Unknown');
    +    }
     
     
    -	/**
    -	 *  Retourne le libelle du finished du produit
    -	 *
    -	 *  @return     string		Libelle
    -	 */
    -	function getLibFinished()
    -	{
    -		global $langs;
    -		$langs->load('products');
    +    /**
    +     *  Retourne le libelle du finished du produit
    +     *
    +     * @return string        Libelle
    +     */
    +    function getLibFinished()
    +    {
    +        global $langs;
    +        $langs->load('products');
     
    -		if ($this->finished == '0') return $langs->trans("RowMaterial");
    -		if ($this->finished == '1') return $langs->trans("Finished");
    -		return '';
    -	}
    +        if ($this->finished == '0') { return $langs->trans("RowMaterial");
    +        }
    +        if ($this->finished == '1') { return $langs->trans("Finished");
    +        }
    +        return '';
    +    }
     
     
    -	/**
    -	 *  Adjust stock in a warehouse for product
    -	 *
    -	 *  @param  	User	$user           user asking change
    -	 *  @param  	int		$id_entrepot    id of warehouse
    -	 *  @param  	double	$nbpiece        nb of units
    -	 *  @param  	int		$movement       0 = add, 1 = remove
    -	 * 	@param		string	$label			Label of stock movement
    -	 * 	@param		double	$price			Unit price HT of product, used to calculate average weighted price (PMP in french). If 0, average weighted price is not changed.
    -	 *  @param		string	$inventorycode	Inventory code
    -	 *  @param  	string	$origin_element Origin element type
    -	 *  @param  	int		$origin_id      Origin id of element
    -	 * 	@return     int     				<0 if KO, >0 if OK
    -	 */
    -	function correct_stock($user, $id_entrepot, $nbpiece, $movement, $label='', $price=0, $inventorycode='', $origin_element='', $origin_id=null)
    -	{
    -		if ($id_entrepot)
    -		{
    -			$this->db->begin();
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Adjust stock in a warehouse for product
    +     *
    +     * @param  User   $user           user asking change
    +     * @param  int    $id_entrepot    id of warehouse
    +     * @param  double $nbpiece        nb of units
    +     * @param  int    $movement       0 = add, 1 = remove
    +     * @param  string $label          Label of stock movement
    +     * @param  double $price          Unit price HT of product, used to calculate average weighted price (PMP in french). If 0, average weighted price is not changed.
    +     * @param  string $inventorycode  Inventory code
    +     * @param  string $origin_element Origin element type
    +     * @param  int    $origin_id      Origin id of element
    +     * @return int                     <0 if KO, >0 if OK
    +     */
    +    function correct_stock($user, $id_entrepot, $nbpiece, $movement, $label='', $price=0, $inventorycode='', $origin_element='', $origin_id=null)
    +    {
    +        // phpcs:enable
    +        if ($id_entrepot) {
    +            $this->db->begin();
     
    -			require_once DOL_DOCUMENT_ROOT .'/product/stock/class/mouvementstock.class.php';
    +            include_once DOL_DOCUMENT_ROOT .'/product/stock/class/mouvementstock.class.php';
     
    -			$op[0] = "+".trim($nbpiece);
    -			$op[1] = "-".trim($nbpiece);
    +            $op[0] = "+".trim($nbpiece);
    +            $op[1] = "-".trim($nbpiece);
     
    -			$movementstock=new MouvementStock($this->db);
    -			$movementstock->setOrigin($origin_element, $origin_id);
    -			$result=$movementstock->_create($user,$this->id,$id_entrepot,$op[$movement],$movement,$price,$label,$inventorycode);
    +            $movementstock=new MouvementStock($this->db);
    +            $movementstock->setOrigin($origin_element, $origin_id);
    +            $result=$movementstock->_create($user, $this->id, $id_entrepot, $op[$movement], $movement, $price, $label, $inventorycode);
     
    -			if ($result >= 0)
    -			{
    -				$this->db->commit();
    -				return 1;
    -			}
    -			else
    -			{
    -			    $this->error=$movementstock->error;
    -			    $this->errors=$movementstock->errors;
    +            if ($result >= 0) {
    +                $this->db->commit();
    +                return 1;
    +            }
    +            else
    +            {
    +                $this->error=$movementstock->error;
    +                $this->errors=$movementstock->errors;
     
    -				$this->db->rollback();
    -				return -1;
    -			}
    -		}
    -	}
    +                $this->db->rollback();
    +                return -1;
    +            }
    +        }
    +    }
     
    -	/**
    -	 *  Adjust stock in a warehouse for product with batch number
    -	 *
    -	 *  @param  	User	$user           user asking change
    -	 *  @param  	int		$id_entrepot    id of warehouse
    -	 *  @param  	double	$nbpiece        nb of units
    -	 *  @param  	int		$movement       0 = add, 1 = remove
    -	 * 	@param		string	$label			Label of stock movement
    -	 * 	@param		double	$price			Price to use for stock eval
    -	 * 	@param		date	$dlc			eat-by date
    -	 * 	@param		date	$dluo			sell-by date
    -	 * 	@param		string	$lot			Lot number
    -	 *  @param		string	$inventorycode	Inventory code
    -	 *  @param  	string	$origin_element Origin element type
    -	 *  @param  	int		$origin_id      Origin id of element
    -	 * 	@return     int     				<0 if KO, >0 if OK
    -	 */
    -	function correct_stock_batch($user, $id_entrepot, $nbpiece, $movement, $label='', $price=0, $dlc='', $dluo='',$lot='', $inventorycode='', $origin_element='', $origin_id=null)
    -	{
    -		if ($id_entrepot)
    -		{
    -			$this->db->begin();
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Adjust stock in a warehouse for product with batch number
    +     *
    +     * @param  User   $user           user asking change
    +     * @param  int    $id_entrepot    id of warehouse
    +     * @param  double $nbpiece        nb of units
    +     * @param  int    $movement       0 = add, 1 = remove
    +     * @param  string $label          Label of stock movement
    +     * @param  double $price          Price to use for stock eval
    +     * @param  date   $dlc            eat-by date
    +     * @param  date   $dluo           sell-by date
    +     * @param  string $lot            Lot number
    +     * @param  string $inventorycode  Inventory code
    +     * @param  string $origin_element Origin element type
    +     * @param  int    $origin_id      Origin id of element
    +     * @return int                     <0 if KO, >0 if OK
    +     */
    +    function correct_stock_batch($user, $id_entrepot, $nbpiece, $movement, $label='', $price=0, $dlc='', $dluo='',$lot='', $inventorycode='', $origin_element='', $origin_id=null)
    +    {
    +        // phpcs:enable
    +        if ($id_entrepot) {
    +            $this->db->begin();
     
    -			require_once DOL_DOCUMENT_ROOT .'/product/stock/class/mouvementstock.class.php';
    +            include_once DOL_DOCUMENT_ROOT .'/product/stock/class/mouvementstock.class.php';
     
    -			$op[0] = "+".trim($nbpiece);
    -			$op[1] = "-".trim($nbpiece);
    +            $op[0] = "+".trim($nbpiece);
    +            $op[1] = "-".trim($nbpiece);
     
    -			$movementstock=new MouvementStock($this->db);
    -			$movementstock->setOrigin($origin_element, $origin_id);
    -			$result=$movementstock->_create($user,$this->id,$id_entrepot,$op[$movement],$movement,$price,$label,$inventorycode,'',$dlc,$dluo,$lot);
    +            $movementstock=new MouvementStock($this->db);
    +            $movementstock->setOrigin($origin_element, $origin_id);
    +            $result=$movementstock->_create($user, $this->id, $id_entrepot, $op[$movement], $movement, $price, $label, $inventorycode, '', $dlc, $dluo, $lot);
     
    -			if ($result >= 0)
    -			{
    -				$this->db->commit();
    -				return 1;
    -			}
    -			else
    -			{
    -			    $this->error=$movementstock->error;
    -			    $this->errors=$movementstock->errors;
    +            if ($result >= 0) {
    +                $this->db->commit();
    +                return 1;
    +            }
    +            else
    +            {
    +                $this->error=$movementstock->error;
    +                $this->errors=$movementstock->errors;
     
    -				$this->db->rollback();
    -				return -1;
    -			}
    -		}
    -	}
    +                $this->db->rollback();
    +                return -1;
    +            }
    +        }
    +    }
     
    -	/**
    -	 *    Load information about stock of a product into ->stock_reel, ->stock_warehouse[] (including stock_warehouse[idwarehouse]->detail_batch for batch products)
    -	 *    This function need a lot of load. If you use it on list, use a cache to execute it once for each product id.
    -	 *    If ENTREPOT_EXTRA_STATUS set, filtering on warehouse status possible.
    -	 *
    -	 *    @param      string   $option 		'' = Load all stock info, also from closed and internal warehouses,
    -	 *										'nobatch' = Do not load batch information,
    -	 *										'novirtual' = Do not load virtual stock,
    -	 *										'warehouseopen' = Load stock from open warehouses only,
    -	 *										'warehouseclosed' = Load stock from closed warehouses only,
    -	 *										'warehouseinternal' = Load stock from warehouses for internal correction/transfer only
    -	 *    @return     int                   < 0 if KO, > 0 if OK
    -	 *    @see		  load_virtual_stock, getBatchInfo
    -	 */
    -	function load_stock($option='')
    -	{
    -		global $conf;
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *    Load information about stock of a product into ->stock_reel, ->stock_warehouse[] (including stock_warehouse[idwarehouse]->detail_batch for batch products)
    +     *    This function need a lot of load. If you use it on list, use a cache to execute it once for each product id.
    +     *    If ENTREPOT_EXTRA_STATUS set, filtering on warehouse status possible.
    +     *
    +     * @param  string $option '' = Load all stock info, also from closed and internal warehouses,
    +     * @return int                   < 0 if KO, > 0 if OK
    +     * @see    load_virtual_stock(), loadBatchInfo()
    +     */
    +    function load_stock($option='')
    +    {
    +        // phpcs:enable
    +        global $conf;
     
    -		$this->stock_reel = 0;
    -		$this->stock_warehouse = array();
    -		$this->stock_theorique = 0;
    +        $this->stock_reel = 0;
    +        $this->stock_warehouse = array();
    +        $this->stock_theorique = 0;
     
    -		$warehouseStatus = array();
    +        $warehouseStatus = array();
     
    -		if (preg_match('/warehouseclosed/', $option))
    -		{
    -			$warehouseStatus[] = Entrepot::STATUS_CLOSED;
    -		}
    -		if (preg_match('/warehouseopen/', $option))
    -		{
    -			$warehouseStatus[] = Entrepot::STATUS_OPEN_ALL;
    -		}
    -		if (preg_match('/warehouseinternal/', $option))
    -		{
    -			$warehouseStatus[] = Entrepot::STATUS_OPEN_INTERNAL;
    -		}
    +        if (preg_match('/warehouseclosed/', $option)) {
    +            $warehouseStatus[] = Entrepot::STATUS_CLOSED;
    +        }
    +        if (preg_match('/warehouseopen/', $option)) {
    +            $warehouseStatus[] = Entrepot::STATUS_OPEN_ALL;
    +        }
    +        if (preg_match('/warehouseinternal/', $option)) {
    +            $warehouseStatus[] = Entrepot::STATUS_OPEN_INTERNAL;
    +        }
     
    -		$sql = "SELECT ps.rowid, ps.reel, ps.fk_entrepot";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product_stock as ps";
    -		$sql.= ", ".MAIN_DB_PREFIX."entrepot as w";
    -		$sql.= " WHERE w.entity IN (".getEntity('stock').")";
    -		$sql.= " AND w.rowid = ps.fk_entrepot";
    -		$sql.= " AND ps.fk_product = ".$this->id;
    -		if ($conf->global->ENTREPOT_EXTRA_STATUS && count($warehouseStatus)) $sql.= " AND w.statut IN (".$this->db->escape(implode(',',$warehouseStatus)).")";
    +        $sql = "SELECT ps.rowid, ps.reel, ps.fk_entrepot";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product_stock as ps";
    +        $sql.= ", ".MAIN_DB_PREFIX."entrepot as w";
    +        $sql.= " WHERE w.entity IN (".getEntity('stock').")";
    +        $sql.= " AND w.rowid = ps.fk_entrepot";
    +        $sql.= " AND ps.fk_product = ".$this->id;
    +        if ($conf->global->ENTREPOT_EXTRA_STATUS && count($warehouseStatus)) { $sql.= " AND w.statut IN (".$this->db->escape(implode(',', $warehouseStatus)).")";
    +        }
     
    -		dol_syslog(get_class($this)."::load_stock", LOG_DEBUG);
    -		$result = $this->db->query($sql);
    -		if ($result)
    -		{
    -			$num = $this->db->num_rows($result);
    -			$i=0;
    -			if ($num > 0)
    -			{
    -				while ($i < $num)
    -				{
    -					$row = $this->db->fetch_object($result);
    -					$this->stock_warehouse[$row->fk_entrepot] = new stdClass();
    -					$this->stock_warehouse[$row->fk_entrepot]->real = $row->reel;
    -					$this->stock_warehouse[$row->fk_entrepot]->id = $row->rowid;
    -					if ((! preg_match('/nobatch/', $option)) && $this->hasbatch()) $this->stock_warehouse[$row->fk_entrepot]->detail_batch=Productbatch::findAll($this->db, $row->rowid, 1, $this->id);
    -					$this->stock_reel+=$row->reel;
    -					$i++;
    -				}
    -			}
    -			$this->db->free($result);
    +        dol_syslog(get_class($this)."::load_stock", LOG_DEBUG);
    +        $result = $this->db->query($sql);
    +        if ($result) {
    +            $num = $this->db->num_rows($result);
    +            $i=0;
    +            if ($num > 0) {
    +                while ($i < $num)
    +                {
    +                    $row = $this->db->fetch_object($result);
    +                    $this->stock_warehouse[$row->fk_entrepot] = new stdClass();
    +                    $this->stock_warehouse[$row->fk_entrepot]->real = $row->reel;
    +                    $this->stock_warehouse[$row->fk_entrepot]->id = $row->rowid;
    +                    if ((! preg_match('/nobatch/', $option)) && $this->hasbatch()) { $this->stock_warehouse[$row->fk_entrepot]->detail_batch=Productbatch::findAll($this->db, $row->rowid, 1, $this->id);
    +                    }
    +                    $this->stock_reel+=$row->reel;
    +                    $i++;
    +                }
    +            }
    +            $this->db->free($result);
     
    -			if (! preg_match('/novirtual/', $option))
    -			{
    -			    $this->load_virtual_stock();		// This also load stats_commande_fournisseur, ...
    -			}
    +            if (! preg_match('/novirtual/', $option)) {
    +                $this->load_virtual_stock();        // This also load stats_commande_fournisseur, ...
    +            }
     
    -			return 1;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->lasterror();
    -			return -1;
    -		}
    -	}
    +            return 1;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->lasterror();
    +            return -1;
    +        }
    +    }
     
    -	/**
    -	 *    Load value ->stock_theorique of a product. Property this->id must be defined.
    -	 *    This function need a lot of load. If you use it on list, use a cache to execute it one for each product id.
    -	 *
    -	 *    @return   int             < 0 if KO, > 0 if OK
    -	 *    @see		load_stock, getBatchInfo
    -	 */
    +	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *    Load value ->stock_theorique of a product. Property this->id must be defined.
    +     *    This function need a lot of load. If you use it on list, use a cache to execute it one for each product id.
    +     *
    +     * @return int             < 0 if KO, > 0 if OK
    +     * @see    load_stock(), loadBatchInfo()
    +     */
         function load_virtual_stock()
         {
    -        global $conf;
    +     // phpcs:enable
    +        global $conf, $hookmanager, $action;
     
             $stock_commande_client=0;
             $stock_commande_fournisseur=0;
             $stock_sending_client=0;
             $stock_reception_fournisseur=0;
     
    -        if (! empty($conf->commande->enabled))
    -        {
    -            $result=$this->load_stats_commande(0,'1,2', 1);
    -            if ($result < 0) dol_print_error($this->db,$this->error);
    +        if (! empty($conf->commande->enabled)) {
    +            $result=$this->load_stats_commande(0, '1,2', 1);
    +            if ($result < 0) { dol_print_error($this->db, $this->error);
    +            }
                 $stock_commande_client=$this->stats_commande['qty'];
             }
    -        if (! empty($conf->expedition->enabled))
    -        {
    -            $result=$this->load_stats_sending(0,'1,2', 1);
    -            if ($result < 0) dol_print_error($this->db,$this->error);
    +        if (! empty($conf->expedition->enabled)) {
    +            $result=$this->load_stats_sending(0, '1,2', 1);
    +            if ($result < 0) { dol_print_error($this->db, $this->error);
    +            }
                 $stock_sending_client=$this->stats_expedition['qty'];
             }
    -        if (! empty($conf->fournisseur->enabled))
    -        {
    -            $result=$this->load_stats_commande_fournisseur(0,'1,2,3,4', 1);
    -            if ($result < 0) dol_print_error($this->db,$this->error);
    +        if (! empty($conf->fournisseur->enabled)) {
    +            $result=$this->load_stats_commande_fournisseur(0, '1,2,3,4', 1);
    +            if ($result < 0) { dol_print_error($this->db, $this->error);
    +            }
                 $stock_commande_fournisseur=$this->stats_commande_fournisseur['qty'];
     
    -            $result=$this->load_stats_reception(0,'4', 1);
    -            if ($result < 0) dol_print_error($this->db,$this->error);
    +            $result=$this->load_stats_reception(0, '4', 1);
    +            if ($result < 0) { dol_print_error($this->db, $this->error);
    +            }
                 $stock_reception_fournisseur=$this->stats_reception['qty'];
             }
     
    @@ -4042,314 +4214,337 @@ class Product extends CommonObject
             if (! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL)) {
                 $this->stock_theorique+=$stock_commande_fournisseur-$stock_reception_fournisseur;
             }
    +
    +        if (! is_object($hookmanager)) {
    +            include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
    +            $hookmanager=new HookManager($this->db);
    +        }
    +        $hookmanager->initHooks(array('productdao'));
    +        $parameters=array('id'=>$this->id);
    +        // Note that $action and $object may have been modified by some hooks
    +        $reshook=$hookmanager->executeHooks('loadvirtualstock', $parameters, $this, $action);
    +        if ($reshook > 0) { $this->stock_theorique = $hookmanager->resArray['stock_theorique'];
    +        }
    +
    +        return 1;
         }
     
     
    -	/**
    -	 *  Load existing information about a serial
    -	 *
    -	 *	@param		string		$batch		Lot/serial number
    -	 *  @return     array					Array with record into product_batch
    -	 *  @see		load_stock, load_virtual_stock
    -	 */
    +    /**
    +     *  Load existing information about a serial
    +     *
    +     * @param  string $batch Lot/serial number
    +     * @return array                    Array with record into product_batch
    +     * @see    load_stock(), load_virtual_stock()
    +     */
         function loadBatchInfo($batch)
         {
    -    	$result=array();
    +        $result=array();
     
    -    	$sql = "SELECT pb.batch, pb.eatby, pb.sellby, SUM(pb.qty) FROM ".MAIN_DB_PREFIX."product_batch as pb, ".MAIN_DB_PREFIX."product_stock as ps";
    -    	$sql.= " WHERE pb.fk_product_stock = ps.rowid AND ps.fk_product = ".$this->id." AND pb.batch = '".$this->db->escape($batch)."'";
    -    	$sql.= " GROUP BY pb.batch, pb.eatby, pb.sellby";
    -    	dol_syslog(get_class($this)."::loadBatchInfo load first entry found for lot/serial = ".$batch, LOG_DEBUG);
    -    	$resql = $this->db->query($sql);
    -    	if ($resql)
    -    	{
    -    		$num = $this->db->num_rows($resql);
    -    		$i=0;
    -    		while ($i < $num)
    -    		{
    -    			$obj = $this->db->fetch_object($resql);
    -				$result[]=array('batch'=>$batch, 'eatby'=>$this->db->jdate($obj->eatby), 'sellby'=>$this->db->jdate($obj->sellby), 'qty'=>$obj->qty);
    -				$i++;
    -    		}
    -    		return $result;
    -    	}
    -    	else
    -    	{
    -    		dol_print_error($this->db);
    -    		$this->db->rollback();
    -    		return array();
    -    	}
    +        $sql = "SELECT pb.batch, pb.eatby, pb.sellby, SUM(pb.qty) FROM ".MAIN_DB_PREFIX."product_batch as pb, ".MAIN_DB_PREFIX."product_stock as ps";
    +        $sql.= " WHERE pb.fk_product_stock = ps.rowid AND ps.fk_product = ".$this->id." AND pb.batch = '".$this->db->escape($batch)."'";
    +        $sql.= " GROUP BY pb.batch, pb.eatby, pb.sellby";
    +        dol_syslog(get_class($this)."::loadBatchInfo load first entry found for lot/serial = ".$batch, LOG_DEBUG);
    +        $resql = $this->db->query($sql);
    +        if ($resql) {
    +            $num = $this->db->num_rows($resql);
    +            $i=0;
    +            while ($i < $num)
    +            {
    +                $obj = $this->db->fetch_object($resql);
    +                $result[]=array('batch'=>$batch, 'eatby'=>$this->db->jdate($obj->eatby), 'sellby'=>$this->db->jdate($obj->sellby), 'qty'=>$obj->qty);
    +                $i++;
    +            }
    +            return $result;
    +        }
    +        else
    +        {
    +            dol_print_error($this->db);
    +            $this->db->rollback();
    +            return array();
    +        }
         }
     
     
    -	/**
    -	 *  Move an uploaded file described into $file array into target directory $sdir.
    -	 *
    -	 *  @param  string	$sdir       Target directory
    -	 *  @param  string	$file       Array of file info of file to upload: array('name'=>..., 'tmp_name'=>...)
    -	 *  @return	int					<0 if KO, >0 if OK
    -	 */
    -	function add_photo($sdir, $file)
    -	{
    -		global $conf;
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Move an uploaded file described into $file array into target directory $sdir.
    +     *
    +     * @param  string $sdir Target directory
    +     * @param  string $file Array of file info of file to upload: array('name'=>..., 'tmp_name'=>...)
    +     * @return int                    <0 if KO, >0 if OK
    +     */
    +    function add_photo($sdir, $file)
    +    {
    +        // phpcs:enable
    +        global $conf;
     
    -		require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
    -		$result = 0;
    +        $result = 0;
     
    -		$dir = $sdir;
    -		if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) $dir .= '/'. get_exdir($this->id,2,0,0,$this,'product') . $this->id ."/photos";
    -		else $dir .= '/'.get_exdir(0,0,0,0,$this,'product').dol_sanitizeFileName($this->ref);
    +        $dir = $sdir;
    +        if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { $dir .= '/'. get_exdir($this->id, 2, 0, 0, $this, 'product') . $this->id ."/photos";
    +        } else { $dir .= '/'.get_exdir(0, 0, 0, 0, $this, 'product').dol_sanitizeFileName($this->ref);
    +        }
     
    -		dol_mkdir($dir);
    +        dol_mkdir($dir);
     
    -		$dir_osencoded=$dir;
    +        $dir_osencoded=$dir;
     
    -		if (is_dir($dir_osencoded))
    -		{
    -			$originImage = $dir . '/' . $file['name'];
    +        if (is_dir($dir_osencoded)) {
    +            $originImage = $dir . '/' . $file['name'];
     
    -			// Cree fichier en taille origine
    -			$result=dol_move_uploaded_file($file['tmp_name'], $originImage, 1);
    +            // Cree fichier en taille origine
    +            $result=dol_move_uploaded_file($file['tmp_name'], $originImage, 1);
     
    -			if (file_exists(dol_osencode($originImage)))
    -			{
    -				// Create thumbs
    -				$this->addThumbs($originImage);
    -			}
    -		}
    +            if (file_exists(dol_osencode($originImage))) {
    +                // Create thumbs
    +                $this->addThumbs($originImage);
    +            }
    +        }
     
    -		if (is_numeric($result) && $result > 0) return 1;
    -		else return -1;
    -	}
    +        if (is_numeric($result) && $result > 0) { return 1;
    +        } else { return -1;
    +        }
    +    }
     
    -	/**
    -	 *  Return if at least one photo is available
    -	 *
    -	 *  @param      string		$sdir       Directory to scan
    -	 *  @return     boolean     			True if at least one photo is available, False if not
    -	 */
    -	function is_photo_available($sdir)
    -	{
    -	    include_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php';
    -	    include_once DOL_DOCUMENT_ROOT .'/core/lib/images.lib.php';
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Return if at least one photo is available
    +     *
    +     * @param  string $sdir Directory to scan
    +     * @return boolean                 True if at least one photo is available, False if not
    +     */
    +    function is_photo_available($sdir)
    +    {
    +        // phpcs:enable
    +        include_once DOL_DOCUMENT_ROOT .'/core/lib/files.lib.php';
    +        include_once DOL_DOCUMENT_ROOT .'/core/lib/images.lib.php';
     
    -		global $conf;
    +        global $conf;
     
    -		$dir = $sdir;
    -		if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) $dir .= '/'. get_exdir($this->id,2,0,0,$this,'product') . $this->id ."/photos/";
    -		else $dir .= '/'.get_exdir(0,0,0,0,$this,'product').dol_sanitizeFileName($this->ref).'/';
    +        $dir = $sdir;
    +        if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { $dir .= '/'. get_exdir($this->id, 2, 0, 0, $this, 'product') . $this->id ."/photos/";
    +        } else { $dir .= '/'.get_exdir(0, 0, 0, 0, $this, 'product').dol_sanitizeFileName($this->ref).'/';
    +        }
     
    -		$nbphoto=0;
    +        $nbphoto=0;
     
    -		$dir_osencoded=dol_osencode($dir);
    -		if (file_exists($dir_osencoded))
    -		{
    -			$handle=opendir($dir_osencoded);
    -			if (is_resource($handle))
    -			{
    -			    while (($file = readdir($handle)) !== false)
    -    			{
    -    				if (! utf8_check($file)) $file=utf8_encode($file);	// To be sure data is stored in UTF8 in memory
    -    				if (dol_is_file($dir.$file) && image_format_supported($file) > 0) return true;
    -    			}
    -			}
    -		}
    -		return false;
    -	}
    +        $dir_osencoded=dol_osencode($dir);
    +        if (file_exists($dir_osencoded)) {
    +            $handle=opendir($dir_osencoded);
    +            if (is_resource($handle)) {
    +                while (($file = readdir($handle)) !== false)
    +                {
    +                    if (! utf8_check($file)) { $file=utf8_encode($file);    // To be sure data is stored in UTF8 in memory
    +                    }
    +                    if (dol_is_file($dir.$file) && image_format_supported($file) > 0) { return true;
    +                    }
    +                }
    +            }
    +        }
    +        return false;
    +    }
     
     
    -	/**
    -	 *  Retourne tableau de toutes les photos du produit
    -	 *
    -	 *  @param      string		$dir        Repertoire a scanner
    -	 *  @param      int			$nbmax      Nombre maximum de photos (0=pas de max)
    -	 *  @return     array       			Tableau de photos
    -	 */
    -	function liste_photos($dir,$nbmax=0)
    -	{
    -	    include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    -	    include_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Retourne tableau de toutes les photos du produit
    +     *
    +     * @param  string $dir   Repertoire a scanner
    +     * @param  int    $nbmax Nombre maximum de photos (0=pas de max)
    +     * @return array                   Tableau de photos
    +     */
    +    function liste_photos($dir,$nbmax=0)
    +    {
    +        // phpcs:enable
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
     
    -		$nbphoto=0;
    -		$tabobj=array();
    +        $nbphoto=0;
    +        $tabobj=array();
     
    -		$dir_osencoded=dol_osencode($dir);
    -		$handle=@opendir($dir_osencoded);
    -		if (is_resource($handle))
    -		{
    -			while (($file = readdir($handle)) !== false)
    -			{
    -				if (! utf8_check($file)) $file=utf8_encode($file);	// readdir returns ISO
    -				if (dol_is_file($dir.$file) && image_format_supported($file) >= 0)
    -				{
    -					$nbphoto++;
    +        $dir_osencoded=dol_osencode($dir);
    +        $handle=@opendir($dir_osencoded);
    +        if (is_resource($handle)) {
    +            while (($file = readdir($handle)) !== false)
    +            {
    +                if (! utf8_check($file)) { $file=utf8_encode($file);    // readdir returns ISO
    +                }
    +                if (dol_is_file($dir.$file) && image_format_supported($file) >= 0) {
    +                    $nbphoto++;
     
    -					// On determine nom du fichier vignette
    -					$photo=$file;
    -					$photo_vignette='';
    -					if (preg_match('/('.$this->regeximgext.')$/i', $photo, $regs))
    -					{
    -						$photo_vignette=preg_replace('/'.$regs[0].'/i', '', $photo).'_small'.$regs[0];
    -					}
    +                    // On determine nom du fichier vignette
    +                    $photo=$file;
    +                    $photo_vignette='';
    +                    if (preg_match('/('.$this->regeximgext.')$/i', $photo, $regs)) {
    +                        $photo_vignette=preg_replace('/'.$regs[0].'/i', '', $photo).'_small'.$regs[0];
    +                    }
     
    -					$dirthumb = $dir.'thumbs/';
    +                    $dirthumb = $dir.'thumbs/';
     
    -					// Objet
    -					$obj=array();
    -					$obj['photo']=$photo;
    -					if ($photo_vignette && dol_is_file($dirthumb.$photo_vignette)) $obj['photo_vignette']='thumbs/' . $photo_vignette;
    -					else $obj['photo_vignette']="";
    +                    // Objet
    +                    $obj=array();
    +                    $obj['photo']=$photo;
    +                    if ($photo_vignette && dol_is_file($dirthumb.$photo_vignette)) { $obj['photo_vignette']='thumbs/' . $photo_vignette;
    +                    } else { $obj['photo_vignette']="";
    +                    }
     
    -					$tabobj[$nbphoto-1]=$obj;
    +                    $tabobj[$nbphoto-1]=$obj;
     
    -					// On continue ou on arrete de boucler ?
    -					if ($nbmax && $nbphoto >= $nbmax) break;
    -				}
    -			}
    +                    // On continue ou on arrete de boucler ?
    +                    if ($nbmax && $nbphoto >= $nbmax) { break;
    +                    }
    +                }
    +            }
     
    -			closedir($handle);
    -		}
    +            closedir($handle);
    +        }
     
    -		return $tabobj;
    -	}
    +        return $tabobj;
    +    }
     
    -	/**
    -	 *  Efface la photo du produit et sa vignette
    -	 *
    -	 *  @param  string		$file        Chemin de l'image
    -	 *  @return	void
    -	 */
    -	function delete_photo($file)
    -	{
    -	    require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    -	    require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Efface la photo du produit et sa vignette
    +     *
    +     * @param  string $file Chemin de l'image
    +     * @return void
    +     */
    +    function delete_photo($file)
    +    {
    +        // phpcs:enable
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    +        include_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
     
             $dir = dirname($file).'/'; // Chemin du dossier contenant l'image d'origine
    -		$dirthumb = $dir.'/thumbs/'; // Chemin du dossier contenant la vignette
    -		$filename = preg_replace('/'.preg_quote($dir,'/').'/i','',$file); // Nom du fichier
    +        $dirthumb = $dir.'/thumbs/'; // Chemin du dossier contenant la vignette
    +        $filename = preg_replace('/'.preg_quote($dir, '/').'/i', '', $file); // Nom du fichier
     
    -		// On efface l'image d'origine
    -		dol_delete_file($file, 0, 0, 0, $this); // For triggers
    +        // On efface l'image d'origine
    +        dol_delete_file($file, 0, 0, 0, $this); // For triggers
     
    -		// Si elle existe, on efface la vignette
    -		if (preg_match('/('.$this->regeximgext.')$/i',$filename,$regs))
    -		{
    -			$photo_vignette=preg_replace('/'.$regs[0].'/i','',$filename).'_small'.$regs[0];
    -			if (file_exists(dol_osencode($dirthumb.$photo_vignette)))
    -			{
    -				dol_delete_file($dirthumb.$photo_vignette);
    -			}
    +        // Si elle existe, on efface la vignette
    +        if (preg_match('/('.$this->regeximgext.')$/i', $filename, $regs)) {
    +            $photo_vignette=preg_replace('/'.$regs[0].'/i', '', $filename).'_small'.$regs[0];
    +            if (file_exists(dol_osencode($dirthumb.$photo_vignette))) {
    +                dol_delete_file($dirthumb.$photo_vignette);
    +            }
     
    -			$photo_vignette=preg_replace('/'.$regs[0].'/i','',$filename).'_mini'.$regs[0];
    -			if (file_exists(dol_osencode($dirthumb.$photo_vignette)))
    -			{
    -				dol_delete_file($dirthumb.$photo_vignette);
    -			}
    -		}
    -	}
    +            $photo_vignette=preg_replace('/'.$regs[0].'/i', '', $filename).'_mini'.$regs[0];
    +            if (file_exists(dol_osencode($dirthumb.$photo_vignette))) {
    +                dol_delete_file($dirthumb.$photo_vignette);
    +            }
    +        }
    +    }
     
    -	/**
    -	 *  Load size of image file
    -	 *
    -	 *  @param  string	$file        Path to file
    -	 *  @return	void
    -	 */
    -	function get_image_size($file)
    -	{
    -		$file_osencoded=dol_osencode($file);
    -		$infoImg = getimagesize($file_osencoded); // Get information on image
    -		$this->imgWidth = $infoImg[0]; // Largeur de l'image
    -		$this->imgHeight = $infoImg[1]; // Hauteur de l'image
    -	}
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Load size of image file
    +     *
    +     * @param  string $file Path to file
    +     * @return void
    +     */
    +    function get_image_size($file)
    +    {
    +        // phpcs:enable
    +        $file_osencoded=dol_osencode($file);
    +        $infoImg = getimagesize($file_osencoded); // Get information on image
    +        $this->imgWidth = $infoImg[0]; // Largeur de l'image
    +        $this->imgHeight = $infoImg[1]; // Hauteur de l'image
    +    }
     
    -	/**
    -	 *  Load indicators this->nb for the dashboard
    -	 *
    -	 *  @return    int                 <0 if KO, >0 if OK
    -	 */
    -	function load_state_board()
    -	{
    -		global $conf, $user, $hookmanager;
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
    +     *  Load indicators this->nb for the dashboard
    +     *
    +     * @return int                 <0 if KO, >0 if OK
    +     */
    +    function load_state_board()
    +    {
    +        // phpcs:enable
    +        global $conf, $user, $hookmanager;
     
    -		$this->nb=array();
    +        $this->nb=array();
     
    -		$sql = "SELECT count(p.rowid) as nb, fk_product_type";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
    -		$sql.= ' WHERE p.entity IN ('.getEntity($this->element, 1).')';
    -		// Add where from hooks
    -		if (is_object($hookmanager))
    -		{
    -		    $parameters=array();
    -		    $reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters);    // Note that $action and $object may have been modified by hook
    -		    $sql.=$hookmanager->resPrint;
    -		}
    +        $sql = "SELECT count(p.rowid) as nb, fk_product_type";
    +        $sql.= " FROM ".MAIN_DB_PREFIX."product as p";
    +        $sql.= ' WHERE p.entity IN ('.getEntity($this->element, 1).')';
    +        // Add where from hooks
    +        if (is_object($hookmanager)) {
    +            $parameters=array();
    +            $reshook=$hookmanager->executeHooks('printFieldListWhere', $parameters);    // Note that $action and $object may have been modified by hook
    +            $sql.=$hookmanager->resPrint;
    +        }
             $sql.= ' GROUP BY fk_product_type';
     
    -		$resql=$this->db->query($sql);
    -		if ($resql)
    -		{
    -			while ($obj=$this->db->fetch_object($resql))
    -			{
    -				if ($obj->fk_product_type == 1) $this->nb["services"]=$obj->nb;
    -				else $this->nb["products"]=$obj->nb;
    -			}
    +        $resql=$this->db->query($sql);
    +        if ($resql) {
    +            while ($obj=$this->db->fetch_object($resql))
    +            {
    +                if ($obj->fk_product_type == 1) { $this->nb["services"]=$obj->nb;
    +                } else { $this->nb["products"]=$obj->nb;
    +                }
    +            }
                 $this->db->free($resql);
    -			return 1;
    -		}
    -		else
    -		{
    -			dol_print_error($this->db);
    -			$this->error=$this->db->error();
    -			return -1;
    -		}
    -	}
    +            return 1;
    +        }
    +        else
    +        {
    +            dol_print_error($this->db);
    +            $this->error=$this->db->error();
    +            return -1;
    +        }
    +    }
     
         /**
          * Return if object is a product
          *
    -     * @return  boolean     True if it's a product
    +     * @return boolean     True if it's a product
          */
    -	function isProduct()
    -	{
    -		return ($this->type == Product::TYPE_PRODUCT ? true : false);
    -	}
    +    function isProduct()
    +    {
    +        return ($this->type == Product::TYPE_PRODUCT ? true : false);
    +    }
     
         /**
          * Return if object is a product
          *
    -     * @return  boolean     True if it's a service
    +     * @return boolean     True if it's a service
          */
    -	function isService()
    -	{
    -		return ($this->type == Product::TYPE_SERVICE ? true : false);
    -	}
    +    function isService()
    +    {
    +        return ($this->type == Product::TYPE_SERVICE ? true : false);
    +    }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Get a barcode from the module to generate barcode values.
          *  Return value is stored into this->barcode
          *
    -     *	@param	Product		$object		Object product or service
    -     *	@param	string		$type		Barcode type (ean, isbn, ...)
    -     *  @return void
    +     * @param  Product $object Object product or service
    +     * @param  string  $type   Barcode type (ean, isbn, ...)
    +     * @return void
          */
         function get_barcode($object,$type='')
         {
    +        // phpcs:enable
             global $conf;
     
             $result='';
    -        if (! empty($conf->global->BARCODE_PRODUCT_ADDON_NUM))
    -        {
    -            $dirsociete=array_merge(array('/core/modules/barcode/'),$conf->modules_parts['barcode']);
    +        if (! empty($conf->global->BARCODE_PRODUCT_ADDON_NUM)) {
    +            $dirsociete=array_merge(array('/core/modules/barcode/'), $conf->modules_parts['barcode']);
                 foreach ($dirsociete as $dirroot)
                 {
                     $res=dol_include_once($dirroot.$conf->global->BARCODE_PRODUCT_ADDON_NUM.'.php');
    -                if ($res) break;
    +                if ($res) { break;
    +                }
                 }
                 $var = $conf->global->BARCODE_PRODUCT_ADDON_NUM;
                 $mod = new $var;
     
    -            $result=$mod->getNextValue($object,$type);
    +            $result=$mod->getNextValue($object, $type);
     
                 dol_syslog(get_class($this)."::get_barcode barcode=".$result." module=".$var);
             }
    @@ -4359,9 +4554,9 @@ class Product extends CommonObject
         /**
          *  Initialise an instance with random values.
          *  Used to build previews or test instances.
    -     *	id must be 0 if object instance is a specimen.
    +     *    id must be 0 if object instance is a specimen.
          *
    -     *  @return	void
    +     * @return void
          */
         function initAsSpecimen()
         {
    @@ -4374,12 +4569,12 @@ class Product extends CommonObject
             $this->id=0;
             $this->ref = 'PRODUCT_SPEC';
             $this->label = 'PRODUCT SPECIMEN';
    -        $this->description = 'This is description of this product specimen that was created the '.dol_print_date($now,'dayhourlog').'.';
    +        $this->description = 'This is description of this product specimen that was created the '.dol_print_date($now, 'dayhourlog').'.';
             $this->specimen=1;
             $this->country_id=1;
             $this->tosell=1;
             $this->tobuy=1;
    -		$this->tobatch=0;
    +        $this->tobatch=0;
             $this->note='This is a comment (private)';
             $this->date_creation = $now;
             $this->date_modification = $now;
    @@ -4399,240 +4594,240 @@ class Product extends CommonObject
             $this->volume = 300;
             $this->volume_unit = 0;
     
    -        $this->barcode=-1;	// Create barcode automatically
    +        $this->barcode=-1;    // Create barcode automatically
         }
     
    -	/**
    -	 *	Returns the text label from units dictionary
    -	 *
    -	 * 	@param	string $type Label type (long or short)
    -	 *	@return	string|int <0 if ko, label if ok
    -	 */
    -	function getLabelOfUnit($type='long')
    -	{
    -		global $langs;
    +    /**
    +     *    Returns the text label from units dictionary
    +     *
    +     * @param  string $type Label type (long or short)
    +     * @return string|int <0 if ko, label if ok
    +     */
    +    function getLabelOfUnit($type='long')
    +    {
    +        global $langs;
     
    -		if (!$this->fk_unit) {
    -			return '';
    -		}
    +        if (!$this->fk_unit) {
    +            return '';
    +        }
     
    -		$langs->load('products');
    +        $langs->load('products');
     
    -		$label_type = 'label';
    +        $label_type = 'label';
     
    -		if ($type == 'short')
    -		{
    -			$label_type = 'short_label';
    -		}
    +        if ($type == 'short') {
    +            $label_type = 'short_label';
    +        }
     
    -		$sql = 'select '.$label_type.' from '.MAIN_DB_PREFIX.'c_units where rowid='.$this->fk_unit;
    -		$resql = $this->db->query($sql);
    -		if($resql && $this->db->num_rows($resql) > 0)
    -		{
    -			$res = $this->db->fetch_array($resql);
    -			$label = $res[$label_type];
    -			$this->db->free($resql);
    -			return $label;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->error().' sql='.$sql;
    -			dol_syslog(get_class($this)."::getLabelOfUnit Error ".$this->error, LOG_ERR);
    -			return -1;
    -		}
    -	}
    +        $sql = 'select '.$label_type.' from '.MAIN_DB_PREFIX.'c_units where rowid='.$this->fk_unit;
    +        $resql = $this->db->query($sql);
    +        if($resql && $this->db->num_rows($resql) > 0) {
    +            $res = $this->db->fetch_array($resql);
    +            $label = $res[$label_type];
    +            $this->db->free($resql);
    +            return $label;
    +        }
    +        else
    +        {
    +            $this->error=$this->db->error().' sql='.$sql;
    +            dol_syslog(get_class($this)."::getLabelOfUnit Error ".$this->error, LOG_ERR);
    +            return -1;
    +        }
    +    }
     
         /**
          * Return if object has a sell-by date or eat-by date
          *
    -     * @return  boolean     True if it's has
    +     * @return boolean     True if it's has
          */
    -	function hasbatch()
    -	{
    -		return ($this->status_batch == 1 ? true : false);
    -	}
    +    function hasbatch()
    +    {
    +        return ($this->status_batch == 1 ? true : false);
    +    }
     
     
    -	/**
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +    /**
          * Return minimum product recommended price
          *
    -	 * @return	int			Minimum recommanded price that is higher price among all suppliers * PRODUCT_MINIMUM_RECOMMENDED_PRICE
    +     * @return int            Minimum recommanded price that is higher price among all suppliers * PRODUCT_MINIMUM_RECOMMENDED_PRICE
          */
    -	function min_recommended_price()
    -	{
    -		global $conf;
    +    function min_recommended_price()
    +    {
    +        // phpcs:enable
    +        global $conf;
     
    -		$maxpricesupplier=0;
    +        $maxpricesupplier=0;
     
    -		if (! empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE))
    -		{
    -			require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
    -			$product_fourn = new ProductFournisseur($this->db);
    -			$product_fourn_list = $product_fourn->list_product_fournisseur_price($this->id, '', '');
    +        if (! empty($conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE)) {
    +            include_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
    +            $product_fourn = new ProductFournisseur($this->db);
    +            $product_fourn_list = $product_fourn->list_product_fournisseur_price($this->id, '', '');
     
    -			if (is_array($product_fourn_list) && count($product_fourn_list)>0)
    -			{
    -				foreach($product_fourn_list as $productfourn)
    -				{
    -					if ($productfourn->fourn_unitprice > $maxpricesupplier)
    -					{
    -						$maxpricesupplier = $productfourn->fourn_unitprice;
    -					}
    -				}
    +            if (is_array($product_fourn_list) && count($product_fourn_list)>0) {
    +                foreach($product_fourn_list as $productfourn)
    +                {
    +                    if ($productfourn->fourn_unitprice > $maxpricesupplier) {
    +                        $maxpricesupplier = $productfourn->fourn_unitprice;
    +                    }
    +                }
     
    -				$maxpricesupplier *= $conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE;
    -			}
    -		}
    +                $maxpricesupplier *= $conf->global->PRODUCT_MINIMUM_RECOMMENDED_PRICE;
    +            }
    +        }
     
    -		return $maxpricesupplier;
    -	}
    +        return $maxpricesupplier;
    +    }
     
     
    -	/**
    -	 * Sets object to supplied categories.
    -	 *
    -	 * Deletes object from existing categories not supplied.
    -	 * Adds it to non existing supplied categories.
    -	 * Existing categories are left untouch.
    -	 *
    -	 * @param int[]|int $categories Category or categories IDs
    -	 */
    -	public function setCategories($categories) {
    -		// Handle single category
    -		if (! is_array($categories)) {
    -			$categories = array($categories);
    -		}
    +    /**
    +     * Sets object to supplied categories.
    +     *
    +     * Deletes object from existing categories not supplied.
    +     * Adds it to non existing supplied categories.
    +     * Existing categories are left untouch.
    +     *
    +     * @param  int[]|int $categories Category or categories IDs
    +     * @return void
    +     */
    +    public function setCategories($categories)
    +    {
    +        // Handle single category
    +        if (! is_array($categories)) {
    +            $categories = array($categories);
    +        }
     
    -		// Get current categories
    -		require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
    -		$c = new Categorie($this->db);
    -		$existing = $c->containing($this->id, Categorie::TYPE_PRODUCT, 'id');
    +        // Get current categories
    +        include_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
    +        $c = new Categorie($this->db);
    +        $existing = $c->containing($this->id, Categorie::TYPE_PRODUCT, 'id');
     
    -		// Diff
    -		if (is_array($existing)) {
    -			$to_del = array_diff($existing, $categories);
    -			$to_add = array_diff($categories, $existing);
    -		} else {
    -			$to_del = array(); // Nothing to delete
    -			$to_add = $categories;
    -		}
    +        // Diff
    +        if (is_array($existing)) {
    +            $to_del = array_diff($existing, $categories);
    +            $to_add = array_diff($categories, $existing);
    +        } else {
    +            $to_del = array(); // Nothing to delete
    +            $to_add = $categories;
    +        }
     
    -		// Process
    -		foreach($to_del as $del) {
    -			if ($c->fetch($del) > 0) {
    -				$c->del_type($this, 'product');
    -			}
    -		}
    -		foreach ($to_add as $add) {
    -			if ($c->fetch($add) > 0) {
    -				$c->add_type($this, 'product');
    -			}
    -		}
    +        // Process
    +        foreach($to_del as $del) {
    +            if ($c->fetch($del) > 0) {
    +                $c->del_type($this, 'product');
    +            }
    +        }
    +        foreach ($to_add as $add) {
    +            if ($c->fetch($add) > 0) {
    +                $c->add_type($this, 'product');
    +            }
    +        }
     
    -		return;
    -	}
    +        return;
    +    }
     
    -	/**
    -	 * Function used to replace a thirdparty id with another one.
    -	 *
    -	 * @param DoliDB 	$db 			Database handler
    -	 * @param int 		$origin_id 		Old thirdparty id
    -	 * @param int 		$dest_id 		New thirdparty id
    -	 * @return bool
    -	 */
    -	public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
    -	{
    -		$tables = array(
    -			'product_customer_price',
    -			'product_customer_price_log'
    -		);
    +    /**
    +     * Function used to replace a thirdparty id with another one.
    +     *
    +     * @param  DoliDB $db        Database handler
    +     * @param  int    $origin_id Old thirdparty id
    +     * @param  int    $dest_id   New thirdparty id
    +     * @return bool
    +     */
    +    public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
    +    {
    +        $tables = array(
    +        'product_customer_price',
    +        'product_customer_price_log'
    +        );
     
    -		return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
    -	}
    +        return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
    +    }
     
    -	/**
    -	 * Generates prices for a product based on product multiprice generation rules
    -	 *
    -	 * @param User $user User that updates the prices
    -	 * @param float $baseprice Base price
    -	 * @param string $price_type Base price type
    -	 * @param float $price_vat VAT % tax
    -	 * @param int $npr NPR
    -	 * @param string $psq ¿?
    -	 * @return int -1 KO, 1 OK
    -	 */
    -	public function generateMultiprices(User $user, $baseprice, $price_type, $price_vat, $npr, $psq)
    -	{
    -		global $conf, $db;
    +    /**
    +     * Generates prices for a product based on product multiprice generation rules
    +     *
    +     * @param  User   $user       User that updates the prices
    +     * @param  float  $baseprice  Base price
    +     * @param  string $price_type Base price type
    +     * @param  float  $price_vat  VAT % tax
    +     * @param  int    $npr        NPR
    +     * @param  string $psq        ¿?
    +     * @return int -1 KO, 1 OK
    +     */
    +    public function generateMultiprices(User $user, $baseprice, $price_type, $price_vat, $npr, $psq)
    +    {
    +        global $conf, $db;
     
    -		$sql = "SELECT rowid, level, fk_level, var_percent, var_min_percent FROM ".MAIN_DB_PREFIX."product_pricerules";
    -		$query = $db->query($sql);
    +        $sql = "SELECT rowid, level, fk_level, var_percent, var_min_percent FROM ".MAIN_DB_PREFIX."product_pricerules";
    +        $query = $db->query($sql);
     
    -		$rules = array();
    +        $rules = array();
     
    -		while ($result = $db->fetch_object($query)) {
    -			$rules[$result->level] = $result;
    -		}
    +        while ($result = $db->fetch_object($query)) {
    +            $rules[$result->level] = $result;
    +        }
     
    -		//Because prices can be based on other level's prices, we temporarily store them
    -		$prices = array(
    -			1 => $baseprice
    -		);
    +        //Because prices can be based on other level's prices, we temporarily store them
    +        $prices = array(
    +        1 => $baseprice
    +        );
     
    -		for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++) {
    +        for ($i = 1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++) {
     
    -			$price = $baseprice;
    -			$price_min = $baseprice;
    +            $price = $baseprice;
    +            $price_min = $baseprice;
     
    -			//We have to make sure it does exist and it is > 0
    -			//First price level only allows changing min_price
    -			if ($i > 1 && isset($rules[$i]->var_percent) && $rules[$i]->var_percent) {
    -				$price = $prices[$rules[$i]->fk_level] * (1 + ($rules[$i]->var_percent/100));
    -			}
    +            //We have to make sure it does exist and it is > 0
    +            //First price level only allows changing min_price
    +            if ($i > 1 && isset($rules[$i]->var_percent) && $rules[$i]->var_percent) {
    +                $price = $prices[$rules[$i]->fk_level] * (1 + ($rules[$i]->var_percent/100));
    +            }
     
    -			$prices[$i] = $price;
    +            $prices[$i] = $price;
     
    -			//We have to make sure it does exist and it is > 0
    -			if (isset($rules[$i]->var_min_percent) && $rules[$i]->var_min_percent) {
    -				$price_min = $price * (1 - ($rules[$i]->var_min_percent/100));
    -			}
    +            //We have to make sure it does exist and it is > 0
    +            if (isset($rules[$i]->var_min_percent) && $rules[$i]->var_min_percent) {
    +                $price_min = $price * (1 - ($rules[$i]->var_min_percent/100));
    +            }
     
    -			//Little check to make sure the price is modified before triggering generation
    -			$check_amount = (($price == $this->multiprices[$i]) && ($price_min == $this->multiprices_min[$i]));
    -			$check_type = ($baseprice == $this->multiprices_base_type[$i]);
    +            //Little check to make sure the price is modified before triggering generation
    +            $check_amount = (($price == $this->multiprices[$i]) && ($price_min == $this->multiprices_min[$i]));
    +            $check_type = ($baseprice == $this->multiprices_base_type[$i]);
     
    -			if ($check_amount && $check_type) {
    -				continue;
    -			}
    +            if ($check_amount && $check_type) {
    +                continue;
    +            }
     
    -			if ($this->updatePrice($price, $price_type, $user, $price_vat, $price_min, $i, $npr, $psq, true) < 0) {
    -				return -1;
    -			}
    -		}
    +            if ($this->updatePrice($price, $price_type, $user, $price_vat, $price_min, $i, $npr, $psq, true) < 0) {
    +                return -1;
    +            }
    +        }
     
    -		return 1;
    -	}
    +        return 1;
    +    }
     
    -	/**
    -	 * Returns the rights used for this class
    -	 * @return stdClass
    -	 */
    -	public function getRights()
    -	{
    -		global $user;
    +    /**
    +     * Returns the rights used for this class
    +     *
    +     * @return stdClass
    +     */
    +    public function getRights()
    +    {
    +        global $user;
     
    -		if ($this->isProduct()) {
    -			return $user->rights->produit;
    -		} else {
    -			return $user->rights->service;
    -		}
    -	}
    +        if ($this->isProduct()) {
    +            return $user->rights->produit;
    +        } else {
    +            return $user->rights->service;
    +        }
    +    }
     
         /**
          *  Load information for tab info
          *
    -     *  @param  int		$id     Id of thirdparty to load
    -     *  @return	void
    +     * @param  int $id Id of thirdparty to load
    +     * @return void
          */
         function info($id)
         {
    @@ -4642,10 +4837,8 @@ class Product extends CommonObject
             $sql.= " WHERE p.rowid = ".$id;
     
             $result=$this->db->query($sql);
    -        if ($result)
    -        {
    -            if ($this->db->num_rows($result))
    -            {
    +        if ($result) {
    +            if ($this->db->num_rows($result)) {
                     $obj = $this->db->fetch_object($result);
     
                     $this->id = $obj->rowid;
    @@ -4662,18 +4855,16 @@ class Product extends CommonObject
                         $this->user_modification = $muser;
                     }
     
    -                $this->ref			     = $obj->ref;
    +                $this->ref                 = $obj->ref;
                     $this->date_creation     = $this->db->jdate($obj->date_creation);
                     $this->date_modification = $this->db->jdate($obj->date_modification);
                 }
     
                 $this->db->free($result);
    -
             }
             else
    -		{
    +        {
                 dol_print_error($this->db);
             }
         }
    -
     }
    diff --git a/htdocs/product/class/productbatch.class.php b/htdocs/product/class/productbatch.class.php
    index 48afbcc9dbb..eb4fc32baed 100644
    --- a/htdocs/product/class/productbatch.class.php
    +++ b/htdocs/product/class/productbatch.class.php
    @@ -22,7 +22,7 @@
      *  \brief      Manage record and specific data for batch number management
      */
     
    -require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
    +require_once DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php";
     
     
     /**
    @@ -30,16 +30,24 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
      */
     class Productbatch extends CommonObject
     {
    -	var $element='productbatch';			//!< Id that identify managed objects
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='productbatch';
    +
     	private static $_table_element='product_batch';		//!< Name of table without prefix where object is stored
     
    -	var $tms='';
    -	var $fk_product_stock;
    -	var $sellby='';
    -	var $eatby='';
    -	var $batch='';
    -	var $qty;
    +	public $tms='';
    +	public $fk_product_stock;
    +	public $sellby='';
    +	public $eatby='';
    +	public $batch='';
    +	public $qty;
     	public $warehouseid;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_product;
     
     
    @@ -52,7 +60,6 @@ class Productbatch extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -69,7 +76,7 @@ class Productbatch extends CommonObject
     		$error=0;
     
     		// Clean parameters
    -		$this->clean_param();
    +		$this->cleanParam();
     
     		// Check parameters
     		// Put here code to add control on parameters values
    @@ -200,7 +207,7 @@ class Productbatch extends CommonObject
     		$error=0;
     
     		// Clean parameters
    -		$this->clean_param();
    +		$this->cleanParam();
     
     		// TODO Check qty is ok for stock move. Negative may not be allowed.
     		if ($this->qty < 0)
    @@ -391,16 +398,14 @@ class Productbatch extends CommonObject
     		$this->eatby='';
     		$this->batch='';
     		$this->import_key='';
    -
    -
     	}
     
     	/**
     	 *  Clean fields (triming)
     	 *
    -	 *	@return	void
    +	 *  @return	void
     	 */
    -	private function clean_param()
    +	private function cleanParam()
     	{
     		if (isset($this->fk_product_stock)) $this->fk_product_stock=(int) trim($this->fk_product_stock);
     		if (isset($this->batch)) $this->batch=trim($this->batch);
    @@ -539,5 +544,4 @@ class Productbatch extends CommonObject
                 return -1;
             }
         }
    -
     }
    diff --git a/htdocs/product/class/productcustomerprice.class.php b/htdocs/product/class/productcustomerprice.class.php
    index fdff7b1fe6d..3079fef5412 100644
    --- a/htdocs/product/class/productcustomerprice.class.php
    +++ b/htdocs/product/class/productcustomerprice.class.php
    @@ -28,36 +28,62 @@ require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
      */
     class Productcustomerprice extends CommonObject
     {
    -	var $element = 'product_customer_price'; // !< Id that identify managed objects
    -	var $table_element = 'product_customer_price'; // !< Name of table without prefix where object is stored
    -	var $entity;
    -	var $datec = '';
    -	var $tms = '';
    -	var $fk_product;
    -	var $fk_soc;
    -	var $price;
    -	var $price_ttc;
    -	var $price_min;
    -	var $price_min_ttc;
    -	var $price_base_type;
    -	var $tva_tx;
    -	var $recuperableonly;
    -	var $localtax1_type;
    -	var $localtax1_tx;
    -	var $localtax2_type;
    -	var $localtax2_tx;
    -	var $fk_user;
    -	var $lines = array ();
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element = 'product_customer_price';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element = 'product_customer_price';
    +
    +	/**
    +	 * @var int Entity
    +	 */
    +	public $entity;
    +
    +	public $datec = '';
    +	public $tms = '';
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_product;
    +
    +	/**
    +	 * @var int Thirdparty ID
    +	 */
    +  public $fk_soc;
    +
    +	public $price;
    +	public $price_ttc;
    +	public $price_min;
    +	public $price_min_ttc;
    +	public $price_base_type;
    +	public $tva_tx;
    +	public $recuperableonly;
    +	public $localtax1_type;
    +	public $localtax1_tx;
    +	public $localtax2_type;
    +	public $localtax2_tx;
    +
    +	/**
    +	 * @var int User ID
    +	 */
    +	public $fk_user;
    +
    +	public $lines = array ();
    +
     
     	/**
     	 * Constructor
     	 *
     	 * @param DoliDb $db handler
     	 */
    -	function __construct($db) {
    -
    +    function __construct($db)
    +    {
     		$this->db = $db;
    -		return 1;
     	}
     
     	/**
    @@ -68,7 +94,8 @@ class Productcustomerprice extends CommonObject
     	 * @param int $forceupdateaffiliate update price on each soc child
     	 * @return int <0 if KO, Id of created object if OK
     	 */
    -	function create($user, $notrigger = 0, $forceupdateaffiliate = 0) {
    +    function create($user, $notrigger = 0, $forceupdateaffiliate = 0)
    +    {
     
     		global $conf, $langs;
     		$error = 0;
    @@ -294,6 +321,7 @@ class Productcustomerprice extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Load all customer prices in memory from database
     	 *
    @@ -306,6 +334,7 @@ class Productcustomerprice extends CommonObject
     	 */
     	function fetch_all($sortorder = '', $sortfield = '', $limit = 0, $offset = 0, $filter = array())
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ( empty($sortfield)) $sortfield = "t.rowid";
    @@ -342,7 +371,7 @@ class Productcustomerprice extends CommonObject
     		$sql .= " AND prod.rowid=t.fk_product ";
     		$sql .= " AND prod.entity IN (" . getEntity('product') . ")";
     		$sql .= " AND t.entity IN (" . getEntity('productprice') . ")";
    -		
    +
     		// Manage filter
     		if (count($filter) > 0) {
     			foreach ( $filter as $key => $value ) {
    @@ -407,6 +436,7 @@ class Productcustomerprice extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Load all objects in memory from database
     	 *
    @@ -419,6 +449,7 @@ class Productcustomerprice extends CommonObject
     	 */
     	function fetch_all_log($sortorder, $sortfield, $limit, $offset, $filter = array())
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if (! empty($sortfield)) $sortfield = "t.rowid";
    @@ -522,7 +553,8 @@ class Productcustomerprice extends CommonObject
     	 * @param int $forceupdateaffiliate update price on each soc child
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	function update($user = 0, $notrigger = 0, $forceupdateaffiliate = 0) {
    +    function update($user = 0, $notrigger = 0, $forceupdateaffiliate = 0)
    +    {
     
     		global $conf, $langs;
     		$error = 0;
    @@ -719,7 +751,8 @@ class Productcustomerprice extends CommonObject
     	 * @param int $forceupdateaffiliate update price on each soc child
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	function setPriceOnAffiliateThirdparty($user, $forceupdateaffiliate) {
    +    function setPriceOnAffiliateThirdparty($user, $forceupdateaffiliate)
    +    {
     
     		$error = 0;
     
    @@ -811,7 +844,8 @@ class Productcustomerprice extends CommonObject
     	 * @param int $notrigger triggers after, 1=disable triggers
     	 * @return int <0 if KO, >0 if OK
     	 */
    -	function delete($user, $notrigger = 0) {
    +    function delete($user, $notrigger = 0)
    +    {
     
     		global $conf, $langs;
     		$error = 0;
    @@ -864,7 +898,8 @@ class Productcustomerprice extends CommonObject
     	 * @param int $fromid of object to clone
     	 * @return int id of clone
     	 */
    -	function createFromClone($fromid) {
    +    function createFromClone($fromid)
    +    {
     
     		global $user, $langs;
     
    @@ -914,7 +949,8 @@ class Productcustomerprice extends CommonObject
     	 *
     	 * @return void
     	 */
    -	function initAsSpecimen() {
    +    function initAsSpecimen()
    +    {
     
     		$this->id = 0;
     
    @@ -943,24 +979,46 @@ class Productcustomerprice extends CommonObject
      */
     class PriceByCustomerLine
     {
    -	var $id;
    -	var $entity;
    -	var $datec = '';
    -	var $tms = '';
    -	var $fk_product;
    -	var $fk_soc;
    -	var $price;
    -	var $price_ttc;
    -	var $price_min;
    -	var $price_min_ttc;
    -	var $price_base_type;
    -	var $default_vat_code;
    -	var $tva_tx;
    -	var $recuperableonly;
    -	var $localtax1_tx;
    -	var $localtax2_tx;
    -	var $fk_user;
    -	var $import_key;
    -	var $socname;
    -	var $prodref;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	/**
    +	 * @var int Entity
    +	 */
    +	public $entity;
    +
    +	public $datec = '';
    +	public $tms = '';
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_product;
    +
    +	/**
    +	 * @var int Thirdparty ID
    +	 */
    +    public $fk_soc;
    +
    +	public $price;
    +	public $price_ttc;
    +	public $price_min;
    +	public $price_min_ttc;
    +	public $price_base_type;
    +	public $default_vat_code;
    +	public $tva_tx;
    +	public $recuperableonly;
    +	public $localtax1_tx;
    +	public $localtax2_tx;
    +
    +	/**
    +	 * @var int User ID
    +	 */
    +	public $fk_user;
    +
    +	public $import_key;
    +	public $socname;
    +	public $prodref;
     }
    diff --git a/htdocs/product/class/propalmergepdfproduct.class.php b/htdocs/product/class/propalmergepdfproduct.class.php
    index 87fdd132878..b5d2d639ae4 100644
    --- a/htdocs/product/class/propalmergepdfproduct.class.php
    +++ b/htdocs/product/class/propalmergepdfproduct.class.php
    @@ -22,7 +22,7 @@
      *  \brief      This file is an CRUD class file (Create/Read/Update/Delete)
      */
     
    -require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
    +require_once DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php";
     
     
     
    @@ -31,8 +31,15 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php");
      */
     class Propalmergepdfproduct extends CommonObject
     {
    -	var $element='propal_merge_pdf_product';			//!< Id that identify managed objects
    -	var $table_element='propal_merge_pdf_product';		//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='propal_merge_pdf_product';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='propal_merge_pdf_product';
     
     	var $fk_product;
     	var $file_name;
    @@ -55,7 +62,6 @@ class Propalmergepdfproduct extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -201,8 +207,6 @@ class Propalmergepdfproduct extends CommonObject
     				$this->datec = $this->db->jdate($obj->datec);
     				$this->tms = $this->db->jdate($obj->tms);
     				$this->import_key = $obj->import_key;
    -
    -
                 }
                 $this->db->free($resql);
     
    @@ -216,6 +220,7 @@ class Propalmergepdfproduct extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Load object in memory from the database
          *
    @@ -225,6 +230,7 @@ class Propalmergepdfproduct extends CommonObject
          */
         function fetch_by_product($product_id, $lang='')
         {
    +        // phpcs:enable
         	global $langs,$conf;
     
         	$sql = "SELECT";
    @@ -275,11 +281,7 @@ class Propalmergepdfproduct extends CommonObject
     	    			}else {
     	    				$this->lines[$obj->file_name]=$line;
     	    			}
    -
    -
         			}
    -
    -
         		}
         		$this->db->free($resql);
     
    @@ -313,9 +315,6 @@ class Propalmergepdfproduct extends CommonObject
     		if (isset($this->fk_user_mod)) $this->fk_user_mod=trim($this->fk_user_mod);
     		if (isset($this->lang)) $this->lang=trim($this->lang);
     
    -
    -
    -
     		// Check parameters
     		// Put here code to add a control on parameters values
     
    @@ -431,6 +430,7 @@ class Propalmergepdfproduct extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Delete object in database
     	 *
    @@ -442,6 +442,7 @@ class Propalmergepdfproduct extends CommonObject
     	 */
     	function delete_by_product($user, $product_id, $lang_id='',  $notrigger=0)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     		$error=0;
     
    @@ -495,6 +496,7 @@ class Propalmergepdfproduct extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Delete object in database
     	 *
    @@ -503,6 +505,7 @@ class Propalmergepdfproduct extends CommonObject
     	 */
     	function delete_by_file($user)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     		$error=0;
     
    @@ -625,10 +628,7 @@ class Propalmergepdfproduct extends CommonObject
     		$this->datec='';
     		$this->tms='';
     		$this->import_key='';
    -
    -
     	}
    -
     }
     
     /**
    @@ -636,18 +636,38 @@ class Propalmergepdfproduct extends CommonObject
      */
     class PropalmergepdfproductLine
     {
    -	var $id;
    +	/**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    -	var $fk_product;
    -	var $file_name;
    -	var $lang;
    -	var $fk_user_author;
    -	var $fk_user_mod;
    -	var $datec='';
    -	var $tms='';
    -	var $import_key;
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_product;
     
    -	function __construct() {
    -		return 1;
    -	}
    +	public $file_name;
    +	public $lang;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_author;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_mod;
    +
    +	public $datec='';
    +	public $tms='';
    +	public $import_key;
    +
    +    /**
    +     *  Constructor
    +     */
    +    function __construct()
    +    {
    +        return 1;
    +    }
     }
    diff --git a/htdocs/product/composition/card.php b/htdocs/product/composition/card.php
    index a1cd63eea12..521b9dfeca7 100644
    --- a/htdocs/product/composition/card.php
    +++ b/htdocs/product/composition/card.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2007  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2005       Eric Seigne             <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2018  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2018  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2006       Andre Cianfarani        <acianfa@free.fr>
      * Copyright (C) 2011-2014  Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    @@ -407,7 +407,6 @@ if ($id > 0 || ! empty($ref))
     						{
     							print '<td align="center"><input type="text" value="'.$nb_of_subproduct.'" name="TProduct['.$productstatic->id.'][qty]" size="4" /></td>';
     							print '<td align="center"><input type="checkbox" name="TProduct['.$productstatic->id.'][incdec]" value="1" '.($value['incdec']==1?'checked':''  ).' /></td>';
    -
     						}
     						else{
     							print '<td>'.$nb_of_subproduct.'</td>';
    @@ -551,7 +550,6 @@ if ($id > 0 || ! empty($ref))
     			{
     				$num = $db->num_rows($resql);
     				$i=0;
    -				$var=true;
     
     				if($num == 0) print '<tr><td colspan="4">'.$langs->trans("NoMatchFound").'</td></tr>';
     
    @@ -635,7 +633,6 @@ if ($id > 0 || ! empty($ref))
     					}
     					$i++;
     				}
    -
     			}
     			else
     			{
    @@ -655,11 +652,9 @@ if ($id > 0 || ! empty($ref))
     
     			print '</form>';
     		}
    -
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/document.php b/htdocs/product/document.php
    index 34337218a62..1e426e512cb 100644
    --- a/htdocs/product/document.php
    +++ b/htdocs/product/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2013      Florian Henry          <florian.henry@open-concept.pro>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -113,7 +113,6 @@ if (empty($reshook))
     
     	// Action submit/delete file/link
     	include_once DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php';
    -
     }
     
     if ($action=='filemerge')
    @@ -197,7 +196,7 @@ if ($object->id)
         print $hookmanager->resPrint;
     	if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     
     	if (! empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO))    // For backward compatiblity, we scan also old dirs
    @@ -288,11 +287,11 @@ if ($object->id)
     
         			print  '<tr class="liste_titre"><td>';
     
    -    			$delauft_lang = empty($lang_id) ? $langs->getDefaultLang() : $lang_id;
    +    			$default_lang = empty($lang_id) ? $langs->getDefaultLang() : $lang_id;
     
         			$langs_available = $langs->get_available_languages(DOL_DOCUMENT_ROOT, 12);
     
    -			    print Form::selectarray('lang_id', $langs_available, $delauft_lang, 0, 0, 0, '', 0, 0, 0, 'ASC');
    +			    print Form::selectarray('lang_id', $langs_available, $default_lang, 0, 0, 0, '', 0, 0, 0, 'ASC');
     
         			if ($conf->global->MAIN_MULTILANGS) {
         				print  '<input type="submit" class="button" name="refresh" value="' . $langs->trans('Refresh') . '">';
    @@ -301,25 +300,18 @@ if ($object->id)
         			print  '</td></tr>';
         		}
     
    -    		$style = 'impair';
         		foreach ($filearray as $filetoadd)
         		{
         			if ($ext = pathinfo($filetoadd['name'], PATHINFO_EXTENSION) == 'pdf')
         			{
    -    				if ($style == 'pair') {
    -    					$style = 'impair';
    -    				} else {
    -    					$style = 'pair';
    -    				}
    -
         				$checked = '';
         				$filename = $filetoadd['name'];
     
         				if ($conf->global->MAIN_MULTILANGS)
         				{
    -    					if (array_key_exists($filetoadd['name'] . '_' . $delauft_lang, $filetomerge->lines))
    +    					if (array_key_exists($filetoadd['name'] . '_' . $default_lang, $filetomerge->lines))
         					{
    -    						$filename = $filetoadd['name'] . ' - ' . $langs->trans('Language_' . $delauft_lang);
    +    						$filename = $filetoadd['name'] . ' - ' . $langs->trans('Language_' . $default_lang);
         						$checked = ' checked ';
         					}
         				}
    @@ -331,7 +323,7 @@ if ($object->id)
         					}
         				}
     
    -    				print  '<tr class="' . $style . '"><td>';
    +    				print  '<tr class="oddeven"><td>';
         				print  '<input type="checkbox" ' . $checked . ' name="filetoadd[]" id="filetoadd" value="' . $filetoadd['name'] . '">' . $filename . '</input>';
         				print  '</td></tr>';
         			}
    @@ -352,6 +344,6 @@ else
     	print $langs->trans("ErrorUnknown");
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/dynamic_price/class/price_expression.class.php b/htdocs/product/dynamic_price/class/price_expression.class.php
    index 5ce3068c144..6b73b413522 100644
    --- a/htdocs/product/dynamic_price/class/price_expression.class.php
    +++ b/htdocs/product/dynamic_price/class/price_expression.class.php
    @@ -29,12 +29,32 @@
      */
     class PriceExpression
     {
    -	var $db;							//!< To store db handler
    -	var $error;							//!< To return error code (or message)
    -	var $errors=array();				//!< To return several error codes (or messages)
    -    var $id;
    -    var $title;
    -	var $expression;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +    public $title;
    +    public $expression;
    +
    +    /**
    +     * @var string Name of table without prefix where object is stored
    +     */
         public $table_element = "c_price_expression";
     
         /**
    @@ -45,7 +65,6 @@ class PriceExpression
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -127,7 +146,7 @@ class PriceExpression
                 $this->error='ErrorWrongParameters';
                 return -1;
             }
    -        
    +
             $sql = "SELECT title, expression";
             $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
             $sql.= " WHERE rowid = ".$id;
    @@ -156,6 +175,7 @@ class PriceExpression
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    List all price expressions
          *
    @@ -163,6 +183,7 @@ class PriceExpression
          */
         function list_price_expression()
         {
    +        // phpcs:enable
             $sql = "SELECT rowid, title, expression";
             $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
             $sql.= " ORDER BY title";
    @@ -193,6 +214,7 @@ class PriceExpression
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Returns any existing rowid with specified title
          *
    @@ -201,6 +223,7 @@ class PriceExpression
          */
         function find_title($title)
         {
    +        // phpcs:enable
             $sql = "SELECT rowid";
             $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element;
             $sql.= " WHERE title = '".$this->db->escape($title)."'";
    @@ -299,7 +322,7 @@ class PriceExpression
     		$error=0;
     
     		$rowid = $this->id;
    -		
    +
     		$this->db->begin();
     
     		if (! $error)
    diff --git a/htdocs/product/dynamic_price/class/price_global_variable.class.php b/htdocs/product/dynamic_price/class/price_global_variable.class.php
    index 97a3ee1f4e6..4cd900979ab 100644
    --- a/htdocs/product/dynamic_price/class/price_global_variable.class.php
    +++ b/htdocs/product/dynamic_price/class/price_global_variable.class.php
    @@ -29,14 +29,39 @@
      */
     class PriceGlobalVariable
     {
    -    var $db;							//!< To store db handler
    -    var $error;							//!< To return error code (or message)
    -    var $errors=array();				//!< To return several error codes (or messages)
    -    var $id;
    -    var $code;
    -    var $description;
    -    var $value;
    -    public $table_element = "c_price_global_variable";
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +    /**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +    public $code;
    +
    +    /**
    +	 * @var string description
    +	 */
    +	public $description;
    +
    +    public $value;
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element = "c_price_global_variable";
     
         /**
          *  Constructor
    @@ -46,7 +71,6 @@ class PriceGlobalVariable
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    diff --git a/htdocs/product/dynamic_price/class/price_global_variable_updater.class.php b/htdocs/product/dynamic_price/class/price_global_variable_updater.class.php
    index f4595062098..c4dda3481bb 100644
    --- a/htdocs/product/dynamic_price/class/price_global_variable_updater.class.php
    +++ b/htdocs/product/dynamic_price/class/price_global_variable_updater.class.php
    @@ -29,30 +29,60 @@
      */
     class PriceGlobalVariableUpdater
     {
    -    var $db;							//!< To store db handler
    -    var $error;							//!< To return error code (or message)
    -    var $errors=array();				//!< To return several error codes (or messages)
    -    var $types=array(0, 1);				//!< Updater types
    -    var $update_min = 5;				//!< Minimal update rate
    -    var $id;
    -    var $type;
    -    var $description;
    -    var $parameters;
    -    var $fk_variable;
    -    var $update_interval;				//!< Interval in mins
    -    var $next_update;					//!< Next update timestamp
    -    var $last_status;
    -    public $table_element = "c_price_global_variable_updater";
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +    /**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
    +    public $types=array(0, 1);				//!< Updater types
    +    public $update_min = 5;				//!< Minimal update rate
    +
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +    public $type;
    +
    +    /**
    +	 * @var string description
    +	 */
    +	public $description;
    +
    +    public $parameters;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_variable;
    +
    +    public $update_interval;				//!< Interval in mins
    +    public $next_update;					//!< Next update timestamp
    +    public $last_status;
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element = "c_price_global_variable_updater";
     
         /**
          *  Constructor
          *
    -     *  @param	DoliDb		$db      Database handler
    +     *  @param  DoliDb      $db      Database handler
          */
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
     
    @@ -530,6 +560,7 @@ class PriceGlobalVariableUpdater
             return 1;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Update next_update into database
          *
    @@ -540,6 +571,7 @@ class PriceGlobalVariableUpdater
          */
         function update_next_update($next_update, $user=0, $notrigger=0)
         {
    +        // phpcs:enable
             $error=0;
     
             $this->next_update = $next_update;
    @@ -574,6 +606,7 @@ class PriceGlobalVariableUpdater
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Update last_status into database
          *
    @@ -584,6 +617,7 @@ class PriceGlobalVariableUpdater
          */
         function update_status($last_status, $user=0, $notrigger=0)
         {
    +        // phpcs:enable
             $error=0;
     
             $this->last_status = $last_status;
    diff --git a/htdocs/product/dynamic_price/class/price_parser.class.php b/htdocs/product/dynamic_price/class/price_parser.class.php
    index 867a30faaeb..3249671d173 100644
    --- a/htdocs/product/dynamic_price/class/price_parser.class.php
    +++ b/htdocs/product/dynamic_price/class/price_parser.class.php
    @@ -335,4 +335,4 @@ class PriceParser
     		));
     		return $this->parseExpression($product, $expression, $extra_values);
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/product/dynamic_price/editor.php b/htdocs/product/dynamic_price/editor.php
    index 9187775f8e9..baa738c20c5 100644
    --- a/htdocs/product/dynamic_price/editor.php
    +++ b/htdocs/product/dynamic_price/editor.php
    @@ -244,5 +244,6 @@ print '<script type="text/javascript">
     	}
     </script>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php
    index 0d4563c10c1..08459729e87 100644
    --- a/htdocs/product/fournisseurs.php
    +++ b/htdocs/product/fournisseurs.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2013 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2012 Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2012      Christophe Battarel  <christophe.battarel@altairis.fr>
      * Copyright (C) 2014      Ion Agorria          <ion@agorria.com>
    @@ -156,6 +156,7 @@ if (empty($reshook))
     		$price_expression = GETPOST('eid', 'int') ? GETPOST('eid', 'int') : ''; // Discard expression if not in expression mode
     		$delivery_time_days = GETPOST('delivery_time_days', 'int') ? GETPOST('delivery_time_days', 'int') : '';
     		$supplier_reputation = GETPOST('supplier_reputation');
    +		$supplier_description = GETPOST('supplier_description', 'alpha');
     
     		if ($tva_tx == '')
     		{
    @@ -256,9 +257,9 @@ if (empty($reshook))
                     	$multicurrency_price = price2num(GETPOST("multicurrency_price",'alpha'));
                     	$multicurrency_code = GETPOST("multicurrency_code",'alpha');
     
    -                    $ret = $object->update_buyprice($quantity, $newprice, $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, 0, $npr, $delivery_time_days, $supplier_reputation, array(), '', $multicurrency_price, $_POST["multicurrency_price_base_type"], $multicurrency_tx, $multicurrency_code);
    +                    $ret = $object->update_buyprice($quantity, $newprice, $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, 0, $npr, $delivery_time_days, $supplier_reputation, array(), '', $multicurrency_price, $_POST["multicurrency_price_base_type"], $multicurrency_tx, $multicurrency_code, $supplier_description);
                     } else {
    -                    $ret = $object->update_buyprice($quantity, $newprice, $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, 0, $npr, $delivery_time_days, $supplier_reputation);
    +                    $ret = $object->update_buyprice($quantity, $newprice, $user, $_POST["price_base_type"], $supplier, $_POST["oselDispo"], $ref_fourn, $tva_tx, $_POST["charges"], $remise_percent, 0, $npr, $delivery_time_days, $supplier_reputation, array(), '', 0, 'HT', 1, '', $supplier_description);
                     }
     				if ($ret < 0)
     				{
    @@ -678,6 +679,23 @@ SCRIPT;
     					}
     				}
     
    +				// Product description of the supplier
    +				if (! empty($conf->global->PRODUIT_FOURN_TEXTS))
    +				{
    +				    //WYSIWYG Editor
    +				    require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
    +
    +    				print '<tr>';
    +    				print '<td>'.$langs->trans('ProductSupplierDescription').'</td>';
    +    				print '<td>';
    +
    +    				$doleditor = new DolEditor('supplier_description', $object->desc_supplier, '', 160, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_PRODUCTDESC, ROWS_4, '90%');
    +    				$doleditor->Create();
    +
    +    				print '</td>';
    +    				print '</tr>';
    +				}
    +
     				if (is_object($hookmanager))
     				{
     					$parameters=array('id_fourn'=>$id_fourn,'prod_id'=>$object->id);
    @@ -733,16 +751,17 @@ SCRIPT;
     				$num = count($product_fourn_list);
     				if (($num + ($offset * $limit)) < $nbtotalofrecords) $num++;
     
    -			    print_barre_liste($langs->trans('SupplierPrices'), $page, $_SERVEUR ['PHP_SELF'], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_accountancy.png', 0, '', '', $limit, 1);
    +				print_barre_liste($langs->trans('SupplierPrices'), $page, $_SERVEUR ['PHP_SELF'], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_accountancy.png', 0, '', '', $limit, 1);
     
     				// Suppliers list title
    -			    print '<div class="div-table-responsive">';
    -			    print '<table class="noborder" width="100%">';
    +				print '<div class="div-table-responsive">';
    +				print '<table class="noborder" width="100%">';
     				if ($object->isProduct()) $nblignefour=4;
     				else $nblignefour=4;
     
     				$param="&id=".$object->id;
     				print '<tr class="liste_titre">';
    +				print_liste_field_titre("AppliedPricesFrom",$_SERVER["PHP_SELF"],"pfp.datec","",$param,"",$sortfield,$sortorder);
     				print_liste_field_titre("Suppliers",$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder);
     				print_liste_field_titre("SupplierRef",$_SERVER["PHP_SELF"],"","",$param,"",$sortfield,$sortorder);
     				if (!empty($conf->global->FOURN_PRODUCT_AVAILABILITY)) print_liste_field_titre("Availability",$_SERVER["PHP_SELF"],"pfp.fk_availability","",$param,"",$sortfield,$sortorder);
    @@ -765,18 +784,18 @@ SCRIPT;
     
     				if (is_array($product_fourn_list))
     				{
    -					$var=true;
     
     					foreach($product_fourn_list as $productfourn)
     					{
    -
    -
     						print '<tr class="oddeven">';
     
    +						// Date from
    +						print '<td>'.dol_print_date($productfourn->date_creation, 'dayhour').'</td>';
    +
     						// Supplier
     						print '<td>'.$productfourn->getSocNomUrl(1,'supplier').'</td>';
     
    -						// Supplier
    +						// Supplier ref
     						print '<td align="left">'.$productfourn->fourn_ref.'</td>';
     
     						// Availability
    @@ -880,7 +899,6 @@ else
     	print $langs->trans("ErrorUnknown");
     }
     
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/index.php b/htdocs/product/index.php
    index 9f11813fdee..8fb1fe7dd12 100644
    --- a/htdocs/product/index.php
    +++ b/htdocs/product/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2014  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2014-2016  Charlie BENKE           <charlie@patas-monkey.com>
      * Copyright (C) 2015       Jean-François Ferry     <jfefe@aternatik.fr>
      *
    @@ -152,7 +152,6 @@ if (! empty($conf->product->enabled))
     	$statProducts.= '<tr class="oddeven">';
     	$statProducts.= '<td><a href="list.php?type=0&amp;tosell=1&amp;tobuy=1">'.$langs->trans("ProductsOnSellAndOnBuy").'</a></td><td align="right">'.round($prodser[0][3]).'</td>';
     	$statProducts.= "</tr>";
    -
     }
     if (! empty($conf->service->enabled))
     {
    @@ -168,7 +167,6 @@ if (! empty($conf->service->enabled))
     	$statServices.= '<tr class="oddeven">';
     	$statServices.= '<td><a href="list.php?type=1&amp;tosell=1&amp;tobuy=1">'.$langs->trans("ServicesOnSellAndOnBuy").'</a></td><td align="right">'.round($prodser[1][3]).'</td>';
     	$statServices.= "</tr>";
    -
     }
     $total=0;
     if ($type == '0')
    @@ -397,8 +395,8 @@ if (! empty($conf->global->MAIN_SHOW_PRODUCT_ACTIVITY_TRIM))
     
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
     
     
    @@ -457,8 +455,6 @@ function activitytrim($product_type)
     		}
     		$i = 0;
     
    -		$var=true;
    -
     		while ($i < $num)
     		{
     			$objp = $db->fetch_object($result);
    @@ -466,7 +462,6 @@ function activitytrim($product_type)
     			{
     				if ($trim1+$trim2+$trim3+$trim4 > 0)
     				{
    -
     					print '<tr class="oddeven"><td align=left>'.$tmpyear.'</td>';
     					print '<td align=right>'.price($trim1).'</td>';
     					print '<td align=right>'.price($trim2).'</td>';
    @@ -500,7 +495,6 @@ function activitytrim($product_type)
     		}
     		if ($trim1+$trim2+$trim3+$trim4 > 0)
     		{
    -
     			print '<tr class="oddeven"><td align=left>'.$tmpyear.'</td>';
     			print '<td align=right>'.price($trim1).'</td>';
     			print '<td align=right>'.price($trim2).'</td>';
    diff --git a/htdocs/product/inventory/ajax/ajax.inventory.php b/htdocs/product/inventory/ajax/ajax.inventory.php
    index 4884d7ab065..56459ab7be9 100644
    --- a/htdocs/product/inventory/ajax/ajax.inventory.php
    +++ b/htdocs/product/inventory/ajax/ajax.inventory.php
    @@ -1,51 +1,50 @@
     <?php
     
    -    require '../../../main.inc.php';
    -    require_once DOL_DOCUMENT_ROOT.'/product/inventory/class/inventory.class.php';
    -  
    -    $get = GETPOST('get');
    -    $put = GETPOST('put');
    -    
    +require '../../../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/product/inventory/class/inventory.class.php';
    +
    +$get = GETPOST('get');
    +$put = GETPOST('put');
    +
         switch ($put)
         {
             case 'qty':
             	if (empty($user->rights->stock->creer)) { echo -1; exit; }
    -            
    +
                 $fk_det_inventory = GETPOST('fk_det_inventory');
    -            
    +
                 $det = new Inventorydet($db);
                 if( $det->fetch( $fk_det_inventory))
                 {
                     $det->qty_view+=GETPOST('qty');
                     $res = $det->update($user);
    -                
    +
                     echo $det->qty_view;
                 }
                 else
                 {
                     echo -2;
    -            }            
    -           
    +            }
    +
                 break;
    -			
    +
             case 'pmp':
             	if (empty($user->rights->stock->creer) || empty($user->rights->stock->changePMP)) { echo -1; exit; }
    -            
    +
                 $fk_det_inventory = GETPOST('fk_det_inventory');
    -            
    +
                 $det = new Inventorydet($db);
                 if( $det->fetch( $fk_det_inventory))
                 {
                     $det->new_pmp=price2num(GETPOST('pmp'));
                     $det->update($user);
    -                
    +
                     echo $det->new_pmp;
                 }
                 else
                 {
                     echo -2;
    -            }            
    -            
    +            }
    +
                 break;
         }
    - 
    diff --git a/htdocs/product/inventory/card.php b/htdocs/product/inventory/card.php
    index 80b17a5e31d..24848ad26c5 100644
    --- a/htdocs/product/inventory/card.php
    +++ b/htdocs/product/inventory/card.php
    @@ -53,7 +53,7 @@ $diroutputmassaction=$conf->stock->dir_output . '/temp/massgeneration/'.$user->i
     $hookmanager->initHooks(array('inventorycard'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('inventory');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost('inventory','','search_');
     
     // Initialize array of search criterias
     $search_all=trim(GETPOST("search_all",'alpha'));
    @@ -224,12 +224,11 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     	    $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteInventory'), $langs->trans('ConfirmDeleteOrder'), 'confirm_delete', '', 0, 1);
     	}
     
    -	if (! $formconfirm) {
    -	    $parameters = array('lineid' => $lineid);
    -	    $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -	    if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -	    elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -	}
    +	// Call Hook formConfirm
    +	$parameters = array('lineid' => $lineid);
    +	$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +	if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +	elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     	// Print form confirm
     	print $formconfirm;
    @@ -409,7 +408,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     	*/
     }
     
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/inventory/class/inventory.class.php b/htdocs/product/inventory/class/inventory.class.php
    index dc4f600b529..1bc98d32d93 100644
    --- a/htdocs/product/inventory/class/inventory.class.php
    +++ b/htdocs/product/inventory/class/inventory.class.php
    @@ -38,6 +38,7 @@ class Inventory extends CommonObject
     	 * @var string ID to identify managed object
     	 */
     	public $element = 'inventory';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
    @@ -47,6 +48,7 @@ class Inventory extends CommonObject
     	 * @var array  Does inventory support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 */
     	public $ismultientitymanaged = 1;
    +
     	/**
     	 * @var string String with name of icon for inventory
     	 */
    @@ -76,7 +78,7 @@ class Inventory extends CommonObject
     	 */
     	public $fields=array(
     		'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'visible'=>-1, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>'Id',),
    -		'ref'        => array('type'=>'varchar(64)', 'label'=>'Ref', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>'Reference of object', 'css'=>'maxwidth200'),
    +		'ref' => array('type'=>'varchar(64)', 'label'=>'Ref', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>'Reference of object', 'css'=>'maxwidth200'),
     		'entity'         => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>20, 'notnull'=>1, 'index'=>1,),
     		'title'          => array('type'=>'varchar(255)', 'label'=>'Label', 'visible'=>1, 'enabled'=>1, 'position'=>25, 'css'=>'minwidth300'),
     		'fk_warehouse'   => array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php', 'label'=>'Warehouse', 'visible'=>1, 'enabled'=>1, 'position'=>30, 'index'=>1, 'help'=>'LinkToThirparty'),
    @@ -97,19 +99,53 @@ class Inventory extends CommonObject
     		'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'default'=>0, 'arrayofkeyval'=>array(0=>'Todo', 1=>'Done', -1=>'Cancel')),
     	);
     
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
    +
    +	/**
    +	 * @var string Ref
    +	 */
     	public $ref;
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_warehouse;
    +
     	public $date_inventory;
     	public $title;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
    +
     	public $date_creation;
     	public $date_validation;
     	public $tms;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_modif;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_valid;
    +
     	public $import_key;
     	// END MODULEBUILDER PROPERTIES
     
    @@ -121,18 +157,22 @@ class Inventory extends CommonObject
     	 * @var int    Name of subtable line
     	 */
     	//public $table_element_line = 'inventorydet';
    +
     	/**
     	 * @var int    Field with ID of parent key if this field has a parent
     	 */
     	//public $fk_element = 'fk_inventory';
    +
     	/**
     	 * @var int    Name of subtable class that manage subtable lines
     	 */
     	//public $class_element_line = 'Inventoryline';
    +
     	/**
     	 * @var array  Array of child tables (child tables to delete before deleting a record)
     	 */
     	//protected $childtables=array('inventorydet');
    +
     	/**
     	 * @var InventoryLine[]     Array of subtable lines
     	 */
    @@ -333,6 +373,7 @@ class Inventory extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return the status
     	 *
    @@ -342,50 +383,51 @@ class Inventory extends CommonObject
     	 */
     	static function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
     			$prefix='';
     			if ($status == 0) return $langs->trans('Draft');
    -			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == -1) return $langs->trans('Canceled');
    +			elseif ($status == 1) return $langs->trans('Enabled');
    +			elseif ($status == -1) return $langs->trans('Canceled');
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($status == 0) return $langs->trans('Draft');
    -			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == -1) return $langs->trans('Canceled');
    +			elseif ($status == 1) return $langs->trans('Enabled');
    +			elseif ($status == -1) return $langs->trans('Canceled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 0) return img_picto($langs->trans('Draft'),'statut0').' '.$langs->trans('Draft');
    -			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == -1) return img_picto($langs->trans('Canceled'),'statut6').' '.$langs->trans('Canceled');
    +			elseif ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    +			elseif ($status == -1) return img_picto($langs->trans('Canceled'),'statut6').' '.$langs->trans('Canceled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 0) return img_picto($langs->trans('Draft'),'statut0');
    -			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == -1) return img_picto($langs->trans('Canceled'),'statut6');
    +			elseif ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
    +			elseif ($status == -1) return img_picto($langs->trans('Canceled'),'statut6');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 0) return img_picto($langs->trans('Draft'),'statut0').' '.$langs->trans('Draft');
    -			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == -1) return img_picto($langs->trans('Canceled'),'statut6').' '.$langs->trans('Canceled');
    +			elseif ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    +			elseif ($status == -1) return img_picto($langs->trans('Canceled'),'statut6').' '.$langs->trans('Canceled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 0) return $langs->trans('Draft').' '.img_picto($langs->trans('Draft'),'statut0');
    -			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == -1) return $langs->trans('Canceled').' '.img_picto($langs->trans('Canceled'),'statut6');
    +			elseif ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    +			elseif ($status == -1) return $langs->trans('Canceled').' '.img_picto($langs->trans('Canceled'),'statut6');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($status == 0) return $langs->trans('Draft').' '.img_picto($langs->trans('Draft'),'statut0');
    -			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == -1) return $langs->trans('Canceled').' '.img_picto($langs->trans('Canceled'),'statut6');
    +			elseif ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    +			elseif ($status == -1) return $langs->trans('Canceled').' '.img_picto($langs->trans('Canceled'),'statut6');
     		}
     	}
     
    @@ -435,7 +477,6 @@ class Inventory extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -453,7 +494,6 @@ class Inventory extends CommonObject
     	{
     		$this->initAsSpecimenCommon();
     	}
    -
     }
     
     /**
    @@ -465,10 +505,12 @@ class InventoryObjectLine
     	 * @var int ID
     	 */
     	public $id;
    +
     	/**
     	 * @var mixed Sample line property 1
     	 */
     	public $prop1;
    +
     	/**
     	 * @var mixed Sample line property 2
     	 */
    diff --git a/htdocs/product/inventory/lib/inventory.lib.php b/htdocs/product/inventory/lib/inventory.lib.php
    index aa8c9c9677d..d6230e4f3e7 100644
    --- a/htdocs/product/inventory/lib/inventory.lib.php
    +++ b/htdocs/product/inventory/lib/inventory.lib.php
    @@ -25,7 +25,7 @@
     /**
      *  Define head array for tabs of inventory tools setup pages
      *
    - *  @return			Array of head
    + *  @return array Array of head
      */
     function inventoryAdminPrepareHead()
     {
    @@ -40,7 +40,7 @@ function inventoryAdminPrepareHead()
         $head[$h][1] = $langs->trans("Parameters");
         $head[$h][2] = 'settings';
         $h++;
    -    
    +
     
         // Show more tabs from modules
         // Entries must be declared in modules descriptor with line
    @@ -55,10 +55,19 @@ function inventoryAdminPrepareHead()
         return $head;
     }
     
    +/**
    + *  Define head array for tabs of inventory tools setup pages
    + *
    + *  @param  Inventory   $inventory      Object inventory
    + *  @param  string      $title          parameter
    + *  @param  string      $get            parameter
    + *
    + *  @return array                       Array of head
    + */
     function inventoryPrepareHead(&$inventory, $title='Inventory', $get='')
     {
     	global $langs;
    -	
    +
     	return array(
     		array(dol_buildpath('/product/inventory/card.php?id='.$inventory->id.$get, 1), $langs->trans($title),'inventory')
     	);
    @@ -66,26 +75,33 @@ function inventoryPrepareHead(&$inventory, $title='Inventory', $get='')
     
     
     
    +/**
    + *  Define head array for tabs of inventory tools setup pages
    + *
    + *  @param   Inventory  $inventory      Object inventory
    + *
    + *  @return string                      html of products
    + */
     function inventorySelectProducts(&$inventory)
     {
     	global $conf,$db,$langs;
    -	
    +
     	$except_product_id = array();
    -	
    +
     	foreach ($inventory->Inventorydet as $Inventorydet)
     	{
     		$except_product_id[] = $Inventorydet->fk_product;
     	}
    -	
    +
     	ob_start();
     	$form = new Form($db);
     	$form->select_produits(-1, 'fk_product');
    -	
    +
     	$TChildWarehouses = array($inventory->fk_warehouse);
     	$e = new Entrepot($db);
     	$e->fetch($inventory->fk_warehouse);
     	if(method_exists($e, 'get_children_warehouses')) $e->get_children_warehouses($e->id, $TChildWarehouses);
    -	
    +
     	$Tab = array();
     	$sql = 'SELECT rowid, label
     			FROM '.MAIN_DB_PREFIX.'entrepot WHERE rowid IN('.implode(', ', $TChildWarehouses).')';
    @@ -96,9 +112,8 @@ function inventorySelectProducts(&$inventory)
     	}
     	print '&nbsp;&nbsp;&nbsp;';
     	print $langs->trans('Warehouse').' : '.$form::selectarray('fk_warehouse', $Tab);
    -	
    +
     	$select_html = ob_get_clean();
    -	
    +
     	return $select_html;
     }
    -
    diff --git a/htdocs/product/inventory/list.php b/htdocs/product/inventory/list.php
    index 74422cc2601..95bb82aea50 100644
    --- a/htdocs/product/inventory/list.php
    +++ b/htdocs/product/inventory/list.php
    @@ -59,7 +59,7 @@ $diroutputmassaction=$conf->inventory->dir_output . '/temp/massgeneration/'.$use
     $hookmanager->initHooks(array('inventorylist'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('inventory');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Default sort order (if not yet defined by previous GETPOST)
     if (! $sortfield) $sortfield="t.".key($object->fields);   // Set here default search field. By default 1st field in definition.
    @@ -525,7 +525,7 @@ if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nb
     	$hidegeneratedfilelistifempty=1;
     	if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0;
     
    -	require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
    +	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     	$formfile = new FormFile($db);
     
     	// Show list of available documents
    diff --git a/htdocs/product/inventory/tpl/inventory.tpl.php b/htdocs/product/inventory/tpl/inventory.tpl.php
    index 1946e63918d..30dc02a17d6 100644
    --- a/htdocs/product/inventory/tpl/inventory.tpl.php
    +++ b/htdocs/product/inventory/tpl/inventory.tpl.php
    @@ -165,7 +165,6 @@ if (empty($conf) || ! is_object($conf))
     				<?php } ?>
     			</tr>
     			<?php $i++;
    -
             }
     
     		_footerList($view,$total_pmp,$total_pmp_actual,$total_pa,$total_pa_actual, $total_current_pa,$total_current_pa_actual);
    diff --git a/htdocs/product/list.php b/htdocs/product/list.php
    index 7c7619fe0d5..03d69a7a243 100644
    --- a/htdocs/product/list.php
    +++ b/htdocs/product/list.php
    @@ -1,9 +1,9 @@
     <?php
     /* Copyright (C) 2001-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2012-2016  Marcos García           <marcosgdf@gmail.com>
    - * Copyright (C) 2013-2016	Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2013-2018	Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2013-2015  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2013       Jean Heimburger         <jean@tiaris.info>
      * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
    @@ -53,7 +53,7 @@ $sall=trim((GETPOST('search_all', 'alphanohtml')!='')?GETPOST('search_all', 'alp
     $search_ref=GETPOST("search_ref");
     $search_barcode=GETPOST("search_barcode");
     $search_label=GETPOST("search_label");
    -$search_type = GETPOST("search_type",'int');
    +$search_type = GETPOST("search_type", 'int');
     $search_sale = GETPOST("search_sale");
     $search_categ = GETPOST("search_categ",'int');
     $search_tosell = GETPOST("search_tosell", 'int');
    @@ -66,11 +66,11 @@ $search_accountancy_code_buy = GETPOST("search_accountancy_code_buy",'alpha');
     $optioncss = GETPOST('optioncss','alpha');
     $type=GETPOST("type","int");
     
    -//Show/hide child products. Hidden by default
    -if (!$_POST) {
    -	$search_hidechildproducts = 'on';
    +//Show/hide child products
    +if (!empty($conf->variants->enabled) && ! empty($conf->global->PRODUIT_ATTRIBUTES_HIDECHILD)) {
    +	$show_childproducts = GETPOST('search_show_childproducts');
     } else {
    -	$search_hidechildproducts = GETPOST('search_hidechildproducts');
    +	$show_childproducts = '';
     }
     
     $diroutputmassaction=$conf->product->dir_output . '/temp/massgeneration/'.$user->id;
    @@ -99,7 +99,7 @@ $form=new Form($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('product');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     if (empty($action)) $action='list';
     
    @@ -219,6 +219,8 @@ if (empty($reshook))
     		$search_tobuy="";
     		$search_tobatch='';
     		//$search_type='';						// There is 2 types of list: a list of product and a list of services. No list with both. So when we clear search criteria, we must keep the filter on type.
    +
    +		$show_childproducts = '';
     		$search_accountancy_code_sell='';
     		$search_accountancy_code_buy='';
     		$search_array_options=array();
    @@ -265,7 +267,7 @@ $sql.= ' p.fk_product_type, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte,
     $sql.= ' p.tobatch, p.accountancy_code_sell, p.accountancy_code_sell_intra, p.accountancy_code_sell_export, p.accountancy_code_buy,';
     $sql.= ' p.datec as date_creation, p.tms as date_update, p.pmp,';
     $sql.= ' MIN(pfp.unitprice) as minsellprice';
    -if (!empty($conf->variants->enabled) && $search_hidechildproducts && ($search_type === 0)) {
    +if (!empty($conf->variants->enabled) && (!empty($conf->global->PRODUIT_ATTRIBUTES_HIDECHILD) && ! $show_childproducts )) {
     	$sql .= ', pac.rowid prod_comb_id';
     }
     // Add fields from extrafields
    @@ -282,10 +284,12 @@ if (! empty($search_categ) || ! empty($catid)) $sql.= ' LEFT JOIN '.MAIN_DB_PREF
     $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_fournisseur_price as pfp ON p.rowid = pfp.fk_product";
     // multilang
     if (! empty($conf->global->MAIN_MULTILANGS)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_lang as pl ON pl.fk_product = p.rowid AND pl.lang = '".$langs->getDefaultLang() ."'";
    -if (!empty($conf->variants->enabled) && $search_hidechildproducts && ($search_type === 0)) {
    +
    +if (!empty($conf->variants->enabled) && (!empty($conf->global->PRODUIT_ATTRIBUTES_HIDECHILD) && ! $show_childproducts )) {
     	$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."product_attribute_combination pac ON pac.fk_product_child = p.rowid";
     }
     
    +
     $sql.= ' WHERE p.entity IN ('.getEntity('product').')';
     if ($sall) $sql .= natural_search(array_keys($fieldstosearchall), $sall);
     // if the type is not 1, we show all products (type = 0,2,3)
    @@ -294,6 +298,11 @@ if (dol_strlen($search_type) && $search_type != '-1')
     	if ($search_type == 1) $sql.= " AND p.fk_product_type = 1";
     	else $sql.= " AND p.fk_product_type <> 1";
     }
    +
    +if (!empty($conf->variants->enabled) && (!empty($conf->global->PRODUIT_ATTRIBUTES_HIDECHILD) && ! $show_childproducts )) {
    +	$sql .= " AND pac.rowid IS NULL";
    +}
    +
     if ($search_ref)     $sql .= natural_search('p.ref', $search_ref);
     if ($search_label)   $sql .= natural_search('p.label', $search_label);
     if ($search_barcode) $sql .= natural_search('p.barcode', $search_barcode);
    @@ -308,7 +317,7 @@ if ($fourn_id > 0)  $sql.= " AND pfp.fk_soc = ".$fourn_id;
     if ($search_tobatch != '' && $search_tobatch >= 0)   $sql.= " AND p.tobatch = ".$db->escape($search_tobatch);
     if ($search_accountancy_code_sell) $sql.= natural_search('p.accountancy_code_sell', $search_accountancy_code_sell);
     if ($search_accountancy_code_buy)  $sql.= natural_search('p.accountancy_code_buy', $search_accountancy_code_buy);
    -if (!empty($conf->variants->enabled) && $search_hidechildproducts && ($search_type === 0)) $sql .= " AND pac.rowid IS NULL";
    +
     // Add where from extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
     // Add where from hooks
    @@ -318,7 +327,10 @@ $sql.=$hookmanager->resPrint;
     $sql.= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type,";
     $sql.= " p.fk_product_type, p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock,";
     $sql.= ' p.datec, p.tms, p.entity, p.tobatch, p.accountancy_code_sell, p.accountancy_code_sell_intra, p.accountancy_code_sell_export, p.accountancy_code_buy, p.pmp';
    -if (!empty($conf->variants->enabled) && $search_hidechildproducts && ($search_type === 0)) $sql .= ', pac.rowid';
    +
    +if (!empty($conf->variants->enabled) && (!empty($conf->global->PRODUIT_ATTRIBUTES_HIDECHILD) && ! $show_childproducts )) {
    +	$sql .= ', pac.rowid';
    +}
     // Add fields from extrafields
     if (! empty($extrafields->attributes[$object->table_element]['label'])) {
     	foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key : '');
    @@ -392,6 +404,7 @@ if ($resql)
     	if ($search_tobuy != '') $param.="&search_tobuy=".urlencode($search_tobuy);
     	if ($fourn_id > 0) $param.=($fourn_id?"&fourn_id=".$fourn_id:"");
     	if ($seach_categ) $param.=($search_categ?"&search_categ=".urlencode($search_categ):"");
    +	if ($show_childproducts) $param.=($show_childproducts?"&search_show_childproducts=".urlencode($show_childproducts):"");
     	if ($type != '') $param.='&type='.urlencode($type);
     	if ($search_type != '') $param.='&search_type='.urlencode($search_type);
     	if ($optioncss != '') $param.='&optioncss='.urlencode($optioncss);
    @@ -450,530 +463,521 @@ if ($resql)
     		print "</div><br>";
     	}
     
    -	if (! empty($canvas) && file_exists(DOL_DOCUMENT_ROOT.'/product/canvas/'.$canvas.'/actions_card_'.$canvas.'.class.php'))
    +	if ($sall)
     	{
    -		$fieldlist = $object->field_list;
    -		$datas = $object->list_datas;
    -		$picto='title.png';
    -		$title_picto = img_picto('',$picto);
    -		$title_text = $title;
    -
    -		// Default templates directory
    -		$template_dir = DOL_DOCUMENT_ROOT . '/product/canvas/'.$canvas.'/tpl/';
    -		// Check if a custom template is present
    -		if (file_exists(DOL_DOCUMENT_ROOT . '/theme/'.$conf->theme.'/tpl/product/'.$canvas.'/list.tpl.php'))
    -		{
    -			$template_dir = DOL_DOCUMENT_ROOT . '/theme/'.$conf->theme.'/tpl/product/'.$canvas.'/';
    -		}
    -
    -		include $template_dir.'list.tpl.php';	// Include native PHP templates
    +		foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
    +		print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall).'</div>';
     	}
    -	else
    +
    +	// Filter on categories
    +	$moreforfilter='';
    +	if (! empty($conf->categorie->enabled))
     	{
    -		if ($sall)
    +		$moreforfilter.='<div class="divsearchfield">';
    +		$moreforfilter.=$langs->trans('Categories'). ': ';
    +		$moreforfilter.=$htmlother->select_categories(Categorie::TYPE_PRODUCT,$search_categ,'search_categ',1);
    +		$moreforfilter.='</div>';
    +	}
    +
    +	//Show/hide child products. Hidden by default
    +	if (!empty($conf->variants->enabled) && !empty($conf->global->PRODUIT_ATTRIBUTES_HIDECHILD )) {
    +		$moreforfilter.='<div class="divsearchfield">';
    +		$moreforfilter.= '<input type="checkbox" id="search_show_childproducts" name="search_show_childproducts"'.($show_childproducts ? 'checked="checked"':'').'>';
    +		$moreforfilter.= ' <label for="search_show_childproducts">'.$langs->trans('ShowChildProducts').'</label>';
    +		$moreforfilter.='</div>';
    +	}
    +
    +	$parameters=array();
    +	$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters);    // Note that $action and $object may have been modified by hook
    +	if (empty($reshook)) $moreforfilter.=$hookmanager->resPrint;
    +	else $moreforfilter=$hookmanager->resPrint;
    +
    +	if ($moreforfilter)
    +	{
    +		print '<div class="liste_titre liste_titre_bydiv centpercent">';
    +		print $moreforfilter;
    +		print '</div>';
    +	}
    +
    +	$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
    +	$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
    +	if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1);
    +
    +	print '<div class="div-table-responsive">';
    +	print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
    +
    +	// Lines with input filters
    +	print '<tr class="liste_titre_filter">';
    +	if (! empty($arrayfields['p.ref']['checked']))
    +	{
    +		print '<td class="liste_titre" align="left">';
    +		print '<input class="flat" type="text" name="search_ref" size="8" value="'.dol_escape_htmltag($search_ref).'">';
    +		print '</td>';
    +	}
    +	if (! empty($arrayfields['pfp.ref_fourn']['checked']))
    +	{
    +		print '<td class="liste_titre" align="left">';
    +		print '<input class="flat" type="text" name="search_ref_supplier" size="8" value="'.dol_escape_htmltag($search_ref_supplier).'">';
    +		print '</td>';
    +	}
    +	if (! empty($arrayfields['p.label']['checked']))
    +	{
    +		print '<td class="liste_titre" align="left">';
    +		print '<input class="flat" type="text" name="search_label" size="12" value="'.dol_escape_htmltag($search_label).'">';
    +		print '</td>';
    +	}
    +	// Type
    +	if (! empty($arrayfields['p.fk_product_type']['checked']))
    +	{
    +		print '<td class="liste_titre" align="left">';
    +		$array=array('-1'=>'&nbsp;', '0'=>$langs->trans('Product'), '1'=>$langs->trans('Service'));
    +		print $form->selectarray('search_type', $array, $search_type);
    +		print '</td>';
    +	}
    +	// Barcode
    +	if (! empty($arrayfields['p.barcode']['checked']))
    +	{
    +		print '<td class="liste_titre">';
    +		print '<input class="flat" type="text" name="search_barcode" size="6" value="'.dol_escape_htmltag($search_barcode).'">';
    +		print '</td>';
    +	}
    +	// Duration
    +	if (! empty($arrayfields['p.duration']['checked']))
    +	{
    +		print '<td class="liste_titre">';
    +		print '&nbsp;';
    +		print '</td>';
    +	}
    +	// Sell price
    +	if (! empty($arrayfields['p.sellprice']['checked']))
    +	{
    +		print '<td class="liste_titre" align="right">';
    +		print '</td>';
    +	}
    +	// Minimum buying Price
    +	if (! empty($arrayfields['p.minbuyprice']['checked']))
    +	{
    +		print '<td class="liste_titre">';
    +		print '&nbsp;';
    +		print '</td>';
    +	}
    +	// Number buying Price
    +	if (! empty($arrayfields['p.numbuyprice']['checked']))
    +	{
    +		print '<td class="liste_titre">';
    +		print '&nbsp;';
    +		print '</td>';
    +	}
    +	// WAP
    +	if (! empty($arrayfields['p.pmp']['checked']))
    +	{
    +		print '<td class="liste_titre">';
    +		print '&nbsp;';
    +		print '</td>';
    +	}
    +	// Limit for alert
    +	if (! empty($arrayfields['p.seuil_stock_alerte']['checked']))
    +	{
    +		print '<td class="liste_titre">';
    +		print '&nbsp;';
    +		print '</td>';
    +	}
    +	// Desired stock
    +	if (! empty($arrayfields['p.desiredstock']['checked']))
    +	{
    +		print '<td class="liste_titre">';
    +		print '&nbsp;';
    +		print '</td>';
    +	}
    +	// Stock
    +	if (! empty($arrayfields['p.stock']['checked'])) print '<td class="liste_titre">&nbsp;</td>';
    +	// Stock
    +	if (! empty($arrayfields['stock_virtual']['checked'])) print '<td class="liste_titre">&nbsp;</td>';
    +	// To batch
    +	if (! empty($arrayfields['p.tobatch']['checked'])) print '<td class="liste_titre center">'.$form->selectyesno($search_tobatch, '', '', '', 1).'</td>';
    +	// Accountancy code sell
    +	if (! empty($arrayfields['p.accountancy_code_sell']['checked'])) print '<td class="liste_titre"><input class="flat" type="text" name="search_accountancy_code_sell" size="6" value="'.dol_escape_htmltag($search_accountancy_code_sell).'"></td>';
    +	// Accountancy code sell
    +	if (! empty($arrayfields['p.accountancy_code_buy']['checked'])) print '<td class="liste_titre"><input class="flat" type="text" name="search_accountancy_code_buy" size="6" value="'.dol_escape_htmltag($search_accountancy_code_buy).'"></td>';
    +	// Extra fields
    +	include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
    +	// Fields from hook
    +	$parameters=array('arrayfields'=>$arrayfields);
    +	$reshook=$hookmanager->executeHooks('printFieldListOption',$parameters);    // Note that $action and $object may have been modified by hook
    +	print $hookmanager->resPrint;
    +	// Date creation
    +	if (! empty($arrayfields['p.datec']['checked']))
    +	{
    +		print '<td class="liste_titre">';
    +		print '</td>';
    +	}
    +	// Date modification
    +	if (! empty($arrayfields['p.tms']['checked']))
    +	{
    +		print '<td class="liste_titre">';
    +		print '</td>';
    +	}
    +	if (! empty($arrayfields['p.tosell']['checked']))
    +	{
    +		print '<td class="liste_titre" align="right">';
    +		print $form->selectarray('search_tosell', array('0'=>$langs->trans('ProductStatusNotOnSellShort'),'1'=>$langs->trans('ProductStatusOnSellShort')),$search_tosell,1);
    +		print '</td >';
    +	}
    +	if (! empty($arrayfields['p.tobuy']['checked']))
    +	{
    +		print '<td class="liste_titre" align="right">';
    +		print $form->selectarray('search_tobuy', array('0'=>$langs->trans('ProductStatusNotOnBuyShort'),'1'=>$langs->trans('ProductStatusOnBuyShort')),$search_tobuy,1);
    +		print '</td>';
    +	}
    +	print '<td class="liste_titre" align="middle">';
    +	$searchpicto=$form->showFilterButtons();
    +	print $searchpicto;
    +	print '</td>';
    +
    +	print '</tr>';
    +
    +	print '<tr class="liste_titre">';
    +	if (! empty($arrayfields['p.ref']['checked']))  print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER["PHP_SELF"],"p.ref","",$param,"",$sortfield,$sortorder);
    +	if (! empty($arrayfields['pfp.ref_fourn']['checked']))  print_liste_field_titre($arrayfields['pfp.ref_fourn']['label'], $_SERVER["PHP_SELF"],"pfp.ref_fourn","",$param,"",$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.label']['checked']))  print_liste_field_titre($arrayfields['p.label']['label'], $_SERVER["PHP_SELF"],"p.label","",$param,"",$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.fk_product_type']['checked']))  print_liste_field_titre($arrayfields['p.fk_product_type']['label'], $_SERVER["PHP_SELF"],"p.fk_product_type","",$param,"",$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.barcode']['checked']))  print_liste_field_titre($arrayfields['p.barcode']['label'], $_SERVER["PHP_SELF"],"p.barcode","",$param,"",$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.duration']['checked']))  print_liste_field_titre($arrayfields['p.duration']['label'], $_SERVER["PHP_SELF"],"p.duration","",$param,'align="center"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.sellprice']['checked']))  print_liste_field_titre($arrayfields['p.sellprice']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.minbuyprice']['checked']))  print_liste_field_titre($arrayfields['p.minbuyprice']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.numbuyprice']['checked']))  print_liste_field_titre($arrayfields['p.numbuyprice']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.pmp']['checked']))  print_liste_field_titre($arrayfields['p.pmp']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.seuil_stock_alerte']['checked']))  print_liste_field_titre($arrayfields['p.seuil_stock_alerte']['label'], $_SERVER["PHP_SELF"],"p.seuil_stock_alerte","",$param,'align="right"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.desiredstock']['checked']))  print_liste_field_titre($arrayfields['p.desiredstock']['label'], $_SERVER["PHP_SELF"],"p.desiredstock","",$param,'align="right"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.stock']['checked']))  print_liste_field_titre($arrayfields['p.stock']['label'], $_SERVER["PHP_SELF"],"p.stock","",$param,'align="right"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['stock_virtual']['checked']))  print_liste_field_titre($arrayfields['stock_virtual']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.tobatch']['checked']))  print_liste_field_titre($arrayfields['p.tobatch']['label'], $_SERVER["PHP_SELF"],"p.tobatch","",$param,'align="center"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.accountancy_code_sell']['checked']))  print_liste_field_titre($arrayfields['p.accountancy_code_sell']['label'], $_SERVER["PHP_SELF"],"p.accountancy_code_sell","",$param,'',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.accountancy_code_buy']['checked']))  print_liste_field_titre($arrayfields['p.accountancy_code_buy']['label'], $_SERVER["PHP_SELF"],"p.accountancy_code_buy","",$param,'',$sortfield,$sortorder);
    +	// Extra fields
    +	include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
    +	// Hook fields
    +	$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder);
    +	$reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters);    // Note that $action and $object may have been modified by hook
    +	print $hookmanager->resPrint;
    +	if (! empty($arrayfields['p.datec']['checked']))  print_liste_field_titre($arrayfields['p.datec']['label'],$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.tms']['checked']))    print_liste_field_titre($arrayfields['p.tms']['label'],$_SERVER["PHP_SELF"],"p.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.tosell']['checked'])) print_liste_field_titre($arrayfields['p.tosell']['label'],$_SERVER["PHP_SELF"],"p.tosell","",$param,'align="right"',$sortfield,$sortorder);
    +	if (! empty($arrayfields['p.tobuy']['checked']))  print_liste_field_titre($arrayfields['p.tobuy']['label'],$_SERVER["PHP_SELF"],"p.tobuy","",$param,'align="right"',$sortfield,$sortorder);
    +	print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="center"',$sortfield,$sortorder,'maxwidthsearch ');
    +	print "</tr>\n";
    +
    +
    +	$product_static=new Product($db);
    +	$product_fourn =new ProductFournisseur($db);
    +
    +	$i = 0;
    +	$totalarray=array();
    +	while ($i < min($num,$limit))
    +	{
    +		$obj = $db->fetch_object($resql);
    +
    +		// Multilangs
    +		if (! empty($conf->global->MAIN_MULTILANGS)) // si l'option est active
     		{
    -			foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
    -			print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall).'</div>';
    +			$sql = "SELECT label";
    +			$sql.= " FROM ".MAIN_DB_PREFIX."product_lang";
    +			$sql.= " WHERE fk_product=".$obj->rowid;
    +			$sql.= " AND lang='". $db->escape($langs->getDefaultLang()) ."'";
    +			$sql.= " LIMIT 1";
    +
    +			$result = $db->query($sql);
    +			if ($result)
    +			{
    +				$objtp = $db->fetch_object($result);
    +				if (! empty($objtp->label)) $obj->label = $objtp->label;
    +			}
     		}
     
    -		// Filter on categories
    -		$moreforfilter='';
    -		if (! empty($conf->categorie->enabled))
    +		$product_static->id = $obj->rowid;
    +		$product_static->ref = $obj->ref;
    +		$product_static->ref_fourn = $obj->ref_supplier;
    +		$product_static->label = $obj->label;
    +		$product_static->type = $obj->fk_product_type;
    +		$product_static->status_buy = $obj->tobuy;
    +		$product_static->status     = $obj->tosell;
    +		$product_static->status_batch = $obj->tobatch;
    +		$product_static->entity = $obj->entity;
    +		$product_static->pmp = $obj->pmp;
    +		$product_static->accountancy_code_sell = $obj->accountancy_code_sell;
    +		$product_static->accountancy_code_sell_export = $obj->accountancy_code_sell_export;
    +		$product_static->accountancy_code_sell_intra = $obj->accountancy_code_sell_intra;
    +		$product_static->accountancy_code_buy = $obj->accountancy_code_buy;
    +
    +		if ((! empty($conf->stock->enabled) && $user->rights->stock->lire && $search_type != 1) || ! empty($conf->global->STOCK_DISABLE_OPTIM_LOAD))	// To optimize call of load_stock
     		{
    -			$moreforfilter.='<div class="divsearchfield">';
    -			$moreforfilter.=$langs->trans('Categories'). ': ';
    -			$moreforfilter.=$htmlother->select_categories(Categorie::TYPE_PRODUCT,$search_categ,'search_categ',1);
    -			$moreforfilter.='</div>';
    +			if ($obj->fk_product_type != 1 || ! empty($conf->global->STOCK_SUPPORTS_SERVICES))    // Not a service
    +			{
    +				$product_static->load_stock('nobatch');             // Load stock_reel + stock_warehouse. This also call load_virtual_stock()
    +			}
     		}
     
    -		//Show/hide child products. Hidden by default
    -		if (!empty($conf->variants->enabled) && $search_type === 0) {
    -			$moreforfilter.='<div class="divsearchfield">';
    -			$moreforfilter.= '<input type="checkbox" id="search_hidechildproducts" name="search_hidechildproducts" value="on"'.($search_hidechildproducts ? 'checked="checked"' : '').'>';
    -			$moreforfilter.= ' <label for="search_hidechildproducts">'.$langs->trans('HideChildProducts').'</label>';
    -			$moreforfilter.='</div>';
    -		}
     
    -		$parameters=array();
    -		$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters);    // Note that $action and $object may have been modified by hook
    -		if (empty($reshook)) $moreforfilter.=$hookmanager->resPrint;
    -		else $moreforfilter=$hookmanager->resPrint;
    +		print '<tr class="oddeven">';
     
    -		if ($moreforfilter)
    -		{
    -			print '<div class="liste_titre liste_titre_bydiv centpercent">';
    -			print $moreforfilter;
    -			print '</div>';
    -		}
    -
    -		$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
    -		$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
    -		if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1);
    -
    -		print '<div class="div-table-responsive">';
    -		print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
    -
    -		// Lines with input filters
    -		print '<tr class="liste_titre_filter">';
    +		// Ref
     		if (! empty($arrayfields['p.ref']['checked']))
     		{
    -			print '<td class="liste_titre" align="left">';
    -			print '<input class="flat" type="text" name="search_ref" size="8" value="'.dol_escape_htmltag($search_ref).'">';
    -			print '</td>';
    +			print '<td class="tdoverflowmax200">';
    +			print $product_static->getNomUrl(1);
    +			print "</td>\n";
    +			if (! $i) $totalarray['nbfield']++;
     		}
    +		// Ref supplier
     		if (! empty($arrayfields['pfp.ref_fourn']['checked']))
     		{
    -			print '<td class="liste_titre" align="left">';
    -			print '<input class="flat" type="text" name="search_ref_supplier" size="8" value="'.dol_escape_htmltag($search_ref_supplier).'">';
    -			print '</td>';
    +			print '<td class="tdoverflowmax200">';
    +			print $product_static->getNomUrl(1);
    +			print "</td>\n";
    +			if (! $i) $totalarray['nbfield']++;
     		}
    +		// Label
     		if (! empty($arrayfields['p.label']['checked']))
     		{
    -			print '<td class="liste_titre" align="left">';
    -			print '<input class="flat" type="text" name="search_label" size="12" value="'.dol_escape_htmltag($search_label).'">';
    -			print '</td>';
    +			print '<td class="tdoverflowmax200">'.dol_trunc($obj->label,40).'</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
    +
     		// Type
     		if (! empty($arrayfields['p.fk_product_type']['checked']))
     		{
    -			print '<td class="liste_titre" align="left">';
    -			$array=array('-1'=>'&nbsp;', '0'=>$langs->trans('Product'), '1'=>$langs->trans('Service'));
    -			print $form->selectarray('search_type', $array, $search_type);
    -			print '</td>';
    +			print '<td>'.$obj->fk_product_type.'</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
    +
     		// Barcode
     		if (! empty($arrayfields['p.barcode']['checked']))
     		{
    -			print '<td class="liste_titre">';
    -			print '<input class="flat" type="text" name="search_barcode" size="6" value="'.dol_escape_htmltag($search_barcode).'">';
    -			print '</td>';
    +			print '<td>'.$obj->barcode.'</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
    +
     		// Duration
     		if (! empty($arrayfields['p.duration']['checked']))
     		{
    -			print '<td class="liste_titre">';
    -			print '&nbsp;';
    +			print '<td align="center">';
    +
    +			if (preg_match('/([^a-z]+)[a-z]$/i',$obj->duration))
    +			{
    +				$duration_value	= substr($obj->duration,0,dol_strlen($obj->duration)-1);
    +				$duration_unit	= substr($obj->duration,-1);
    +
    +				if ((float) $duration_value > 1)
    +				{
    +				    $dur=array("i"=>$langs->trans("Minutes"),"h"=>$langs->trans("Hours"),"d"=>$langs->trans("Days"),"w"=>$langs->trans("Weeks"),"m"=>$langs->trans("Months"),"y"=>$langs->trans("Years"));
    +				}
    +				else if ((float) $duration_value > 0)
    +				{
    +				    $dur=array("i"=>$langs->trans("Minute"),"h"=>$langs->trans("Hour"),"d"=>$langs->trans("Day"),"w"=>$langs->trans("Week"),"m"=>$langs->trans("Month"),"y"=>$langs->trans("Year"));
    +				}
    +				print $duration_value;
    +				print (! empty($duration_unit) && isset($dur[$duration_unit]) ? ' '.$langs->trans($dur[$duration_unit]) : '');
    +			}
    +			else
    +			{
    +				print $obj->duration;
    +			}
     			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
    +
     		// Sell price
     		if (! empty($arrayfields['p.sellprice']['checked']))
     		{
    -			print '<td class="liste_titre" align="right">';
    +			print '<td class="right nowraponall">';
    +			if ($obj->tosell)
    +			{
    +				if ($obj->price_base_type == 'TTC') print price($obj->price_ttc).' '.$langs->trans("TTC");
    +				else print price($obj->price).' '.$langs->trans("HT");
    +			}
     			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
    -		// Minimum buying Price
    +
    +		// Better buy price
     		if (! empty($arrayfields['p.minbuyprice']['checked']))
     		{
    -			print '<td class="liste_titre">';
    -			print '&nbsp;';
    +			print  '<td class="right nowraponall">';
    +			if ($obj->tobuy && $obj->minsellprice != '')
    +			{
    +				//print price($obj->minsellprice).' '.$langs->trans("HT");
    +				if ($product_fourn->find_min_price_product_fournisseur($obj->rowid) > 0)
    +				{
    +					if ($product_fourn->product_fourn_price_id > 0)
    +					{
    +						if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire)
    +						{
    +							$htmltext=$product_fourn->display_price_product_fournisseur(1, 1, 0, 1);
    +							print $form->textwithpicto(price($product_fourn->fourn_unitprice * (1 - $product_fourn->fourn_remise_percent/100) - $product_fourn->fourn_remise).' '.$langs->trans("HT"),$htmltext);
    +						}
    +						else print price($product_fourn->fourn_unitprice).' '.$langs->trans("HT");
    +					}
    +				}
    +			}
     			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
    -		// Number buying Price
    +
    +		// Number of buy prices
     		if (! empty($arrayfields['p.numbuyprice']['checked']))
     		{
    -			print '<td class="liste_titre">';
    -			print '&nbsp;';
    +			print  '<td align="right">';
    +			if ($obj->tobuy)
    +			{
    +				if (count($productFournList = $product_fourn->list_product_fournisseur_price($obj->rowid)) > 0)
    +				{
    +					$htmltext=$product_fourn->display_price_product_fournisseur(1, 1, 0, 1, $productFournList);
    +					print $form->textwithpicto(count($productFournList),$htmltext);
    +				}
    +			}
     			print '</td>';
     		}
    +
     		// WAP
     		if (! empty($arrayfields['p.pmp']['checked']))
     		{
    -			print '<td class="liste_titre">';
    -			print '&nbsp;';
    +			print '<td class="nowrap" align="right">';
    +			print price($product_static->pmp, 1, $langs);
     			print '</td>';
     		}
    -		// Limit for alert
    +
    +		// Limit alert
     		if (! empty($arrayfields['p.seuil_stock_alerte']['checked']))
     		{
    -			print '<td class="liste_titre">';
    -			print '&nbsp;';
    +			print '<td align="right">';
    +			if ($obj->fk_product_type != 1)
    +			{
    +				print $obj->seuil_stock_alerte;
    +			}
     			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
     		// Desired stock
     		if (! empty($arrayfields['p.desiredstock']['checked']))
     		{
    -			print '<td class="liste_titre">';
    -			print '&nbsp;';
    +			print '<td align="right">';
    +			if ($obj->fk_product_type != 1)
    +			{
    +				print $obj->desiredstock;
    +			}
     			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
    +		}
    +		// Stock real
    +		if (! empty($arrayfields['p.stock']['checked']))
    +		{
    +			print '<td align="right">';
    +			if ($obj->fk_product_type != 1)
    +			{
    +				if ($obj->seuil_stock_alerte != '' && $product_static->stock_reel < (float) $obj->seuil_stock_alerte) print img_warning($langs->trans("StockLowerThanLimit", $obj->seuil_stock_alerte)).' ';
    +				print $product_static->stock_reel;
    +			}
    +			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
    +		}
    +		// Stock virtual
    +		if (! empty($arrayfields['stock_virtual']['checked']))
    +		{
    +			print '<td align="right">';
    +			if ($obj->fk_product_type != 1)
    +			{
    +				if ($obj->seuil_stock_alerte != '' && $product_static->stock_theorique < (float) $obj->seuil_stock_alerte) print img_warning($langs->trans("StockLowerThanLimit", $obj->seuil_stock_alerte)).' ';
    +				print $product_static->stock_theorique;
    +			}
    +			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
    +		}
    +		// Lot/Serial
    +		if (! empty($arrayfields['p.tobatch']['checked']))
    +		{
    +			print '<td align="center">';
    +			print yn($obj->tobatch);
    +			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
    -		// Stock
    -		if (! empty($arrayfields['p.stock']['checked'])) print '<td class="liste_titre">&nbsp;</td>';
    -		// Stock
    -		if (! empty($arrayfields['stock_virtual']['checked'])) print '<td class="liste_titre">&nbsp;</td>';
    -		// To batch
    -		if (! empty($arrayfields['p.tobatch']['checked'])) print '<td class="liste_titre center">'.$form->selectyesno($search_tobatch, '', '', '', 1).'</td>';
     		// Accountancy code sell
    -		if (! empty($arrayfields['p.accountancy_code_sell']['checked'])) print '<td class="liste_titre"><input class="flat" type="text" name="search_accountancy_code_sell" size="6" value="'.dol_escape_htmltag($search_accountancy_code_sell).'"></td>';
    +		if (! empty($arrayfields['p.accountancy_code_sell']['checked']))
    +		{
    +			print '<td>'.$obj->accountancy_code_sell.'</td>';
    +			if (! $i) $totalarray['nbfield']++;
    +		}
     		// Accountancy code sell
    -		if (! empty($arrayfields['p.accountancy_code_buy']['checked'])) print '<td class="liste_titre"><input class="flat" type="text" name="search_accountancy_code_buy" size="6" value="'.dol_escape_htmltag($search_accountancy_code_buy).'"></td>';
    +		if (! empty($arrayfields['p.accountancy_code_buy']['checked']))
    +		{
    +			print '<td>'.$obj->accountancy_code_buy.'</td>';
    +			if (! $i) $totalarray['nbfield']++;
    +		}
     		// Extra fields
    -		include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
    +		include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
     		// Fields from hook
    -		$parameters=array('arrayfields'=>$arrayfields);
    -		$reshook=$hookmanager->executeHooks('printFieldListOption',$parameters);    // Note that $action and $object may have been modified by hook
    +		$parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj);
    +		$reshook=$hookmanager->executeHooks('printFieldListValue',$parameters);    // Note that $action and $object may have been modified by hook
     		print $hookmanager->resPrint;
     		// Date creation
     		if (! empty($arrayfields['p.datec']['checked']))
     		{
    -			print '<td class="liste_titre">';
    +			print '<td align="center">';
    +			print dol_print_date($obj->date_creation, 'dayhour', 'tzuser');
     			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
     		// Date modification
     		if (! empty($arrayfields['p.tms']['checked']))
     		{
    -			print '<td class="liste_titre">';
    +			print '<td align="center">';
    +			print dol_print_date($obj->date_update, 'dayhour', 'tzuser');
     			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
     		}
    +
    +		// Status (to sell)
     		if (! empty($arrayfields['p.tosell']['checked']))
     		{
    -			print '<td class="liste_titre" align="right">';
    -			print $form->selectarray('search_tosell', array('0'=>$langs->trans('ProductStatusNotOnSellShort'),'1'=>$langs->trans('ProductStatusOnSellShort')),$search_tosell,1);
    -			print '</td >';
    -		}
    -		if (! empty($arrayfields['p.tobuy']['checked']))
    -		{
    -			print '<td class="liste_titre" align="right">';
    -			print $form->selectarray('search_tobuy', array('0'=>$langs->trans('ProductStatusNotOnBuyShort'),'1'=>$langs->trans('ProductStatusOnBuyShort')),$search_tobuy,1);
    -			print '</td>';
    -		}
    -		print '<td class="liste_titre" align="middle">';
    -		$searchpicto=$form->showFilterButtons();
    -		print $searchpicto;
    -		print '</td>';
    -
    -		print '</tr>';
    -
    -		print '<tr class="liste_titre">';
    -		if (! empty($arrayfields['p.ref']['checked']))  print_liste_field_titre($arrayfields['p.ref']['label'], $_SERVER["PHP_SELF"],"p.ref","",$param,"",$sortfield,$sortorder);
    -		if (! empty($arrayfields['pfp.ref_fourn']['checked']))  print_liste_field_titre($arrayfields['pfp.ref_fourn']['label'], $_SERVER["PHP_SELF"],"pfp.ref_fourn","",$param,"",$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.label']['checked']))  print_liste_field_titre($arrayfields['p.label']['label'], $_SERVER["PHP_SELF"],"p.label","",$param,"",$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.fk_product_type']['checked']))  print_liste_field_titre($arrayfields['p.fk_product_type']['label'], $_SERVER["PHP_SELF"],"p.fk_product_type","",$param,"",$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.barcode']['checked']))  print_liste_field_titre($arrayfields['p.barcode']['label'], $_SERVER["PHP_SELF"],"p.barcode","",$param,"",$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.duration']['checked']))  print_liste_field_titre($arrayfields['p.duration']['label'], $_SERVER["PHP_SELF"],"p.duration","",$param,'align="center"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.sellprice']['checked']))  print_liste_field_titre($arrayfields['p.sellprice']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.minbuyprice']['checked']))  print_liste_field_titre($arrayfields['p.minbuyprice']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.numbuyprice']['checked']))  print_liste_field_titre($arrayfields['p.numbuyprice']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.pmp']['checked']))  print_liste_field_titre($arrayfields['p.pmp']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.seuil_stock_alerte']['checked']))  print_liste_field_titre($arrayfields['p.seuil_stock_alerte']['label'], $_SERVER["PHP_SELF"],"p.seuil_stock_alerte","",$param,'align="right"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.desiredstock']['checked']))  print_liste_field_titre($arrayfields['p.desiredstock']['label'], $_SERVER["PHP_SELF"],"p.desiredstock","",$param,'align="right"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.stock']['checked']))  print_liste_field_titre($arrayfields['p.stock']['label'], $_SERVER["PHP_SELF"],"p.stock","",$param,'align="right"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['stock_virtual']['checked']))  print_liste_field_titre($arrayfields['stock_virtual']['label'], $_SERVER["PHP_SELF"],"","",$param,'align="right"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.tobatch']['checked']))  print_liste_field_titre($arrayfields['p.tobatch']['label'], $_SERVER["PHP_SELF"],"p.tobatch","",$param,'align="center"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.accountancy_code_sell']['checked']))  print_liste_field_titre($arrayfields['p.accountancy_code_sell']['label'], $_SERVER["PHP_SELF"],"p.accountancy_code_sell","",$param,'',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.accountancy_code_buy']['checked']))  print_liste_field_titre($arrayfields['p.accountancy_code_buy']['label'], $_SERVER["PHP_SELF"],"p.accountancy_code_buy","",$param,'',$sortfield,$sortorder);
    -		// Extra fields
    -		include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
    -		// Hook fields
    -		$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder);
    -		$reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters);    // Note that $action and $object may have been modified by hook
    -		print $hookmanager->resPrint;
    -		if (! empty($arrayfields['p.datec']['checked']))  print_liste_field_titre($arrayfields['p.datec']['label'],$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.tms']['checked']))    print_liste_field_titre($arrayfields['p.tms']['label'],$_SERVER["PHP_SELF"],"p.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.tosell']['checked'])) print_liste_field_titre($arrayfields['p.tosell']['label'],$_SERVER["PHP_SELF"],"p.tosell","",$param,'align="right"',$sortfield,$sortorder);
    -		if (! empty($arrayfields['p.tobuy']['checked']))  print_liste_field_titre($arrayfields['p.tobuy']['label'],$_SERVER["PHP_SELF"],"p.tobuy","",$param,'align="right"',$sortfield,$sortorder);
    -		print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="center"',$sortfield,$sortorder,'maxwidthsearch ');
    -		print "</tr>\n";
    -
    -
    -		$product_static=new Product($db);
    -		$product_fourn =new ProductFournisseur($db);
    -
    -		$i = 0;
    -		$totalarray=array();
    -		while ($i < min($num,$limit))
    -		{
    -			$obj = $db->fetch_object($resql);
    -
    -			// Multilangs
    -			if (! empty($conf->global->MAIN_MULTILANGS)) // si l'option est active
    -			{
    -				$sql = "SELECT label";
    -				$sql.= " FROM ".MAIN_DB_PREFIX."product_lang";
    -				$sql.= " WHERE fk_product=".$obj->rowid;
    -				$sql.= " AND lang='". $db->escape($langs->getDefaultLang()) ."'";
    -				$sql.= " LIMIT 1";
    -
    -				$result = $db->query($sql);
    -				if ($result)
    -				{
    -					$objtp = $db->fetch_object($result);
    -					if (! empty($objtp->label)) $obj->label = $objtp->label;
    -				}
    -			}
    -
    -			$product_static->id = $obj->rowid;
    -			$product_static->ref = $obj->ref;
    -			$product_static->ref_fourn = $obj->ref_supplier;
    -			$product_static->label = $obj->label;
    -			$product_static->type = $obj->fk_product_type;
    -			$product_static->status_buy = $obj->tobuy;
    -			$product_static->status     = $obj->tosell;
    -			$product_static->status_batch = $obj->tobatch;
    -			$product_static->entity = $obj->entity;
    -			$product_static->pmp = $obj->pmp;
    -			$product_static->accountancy_code_sell = $obj->accountancy_code_sell;
    -			$product_static->accountancy_code_sell_export = $obj->accountancy_code_sell_export;
    -			$product_static->accountancy_code_sell_intra = $obj->accountancy_code_sell_intra;
    -			$product_static->accountancy_code_buy = $obj->accountancy_code_buy;
    -
    -			if ((! empty($conf->stock->enabled) && $user->rights->stock->lire && $search_type != 1) || ! empty($conf->global->STOCK_DISABLE_OPTIM_LOAD))	// To optimize call of load_stock
    -			{
    -				if ($obj->fk_product_type != 1 || ! empty($conf->global->STOCK_SUPPORTS_SERVICES))    // Not a service
    -				{
    -					$product_static->load_stock('nobatch');             // Load stock_reel + stock_warehouse. This also call load_virtual_stock()
    -				}
    -			}
    -
    -
    -			print '<tr class="oddeven">';
    -
    -			// Ref
    -			if (! empty($arrayfields['p.ref']['checked']))
    -			{
    -				print '<td class="tdoverflowmax200">';
    -				print $product_static->getNomUrl(1);
    -				print "</td>\n";
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Ref supplier
    -			if (! empty($arrayfields['pfp.ref_fourn']['checked']))
    -			{
    -				print '<td class="tdoverflowmax200">';
    -				print $product_static->getNomUrl(1);
    -				print "</td>\n";
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Label
    -			if (! empty($arrayfields['p.label']['checked']))
    -			{
    -				print '<td class="tdoverflowmax200">'.dol_trunc($obj->label,40).'</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -
    -			// Type
    -			if (! empty($arrayfields['p.fk_product_type']['checked']))
    -			{
    -				print '<td>'.$obj->fk_product_type.'</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -
    -			// Barcode
    -			if (! empty($arrayfields['p.barcode']['checked']))
    -			{
    -				print '<td>'.$obj->barcode.'</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -
    -			// Duration
    -			if (! empty($arrayfields['p.duration']['checked']))
    -			{
    -				print '<td align="center">';
    -				if (preg_match('/([^a-z]+)[a-z]/i',$obj->duration))
    -				{
    -					if (preg_match('/([^a-z]+)y/i',$obj->duration,$regs)) print $regs[1].' '.$langs->trans("DurationYear");
    -					elseif (preg_match('/([^a-z]+)m/i',$obj->duration,$regs)) print $regs[1].' '.$langs->trans("DurationMonth");
    -					elseif (preg_match('/([^a-z]+)w/i',$obj->duration,$regs)) print $regs[1].' '.$langs->trans("DurationWeek");
    -					elseif (preg_match('/([^a-z]+)d/i',$obj->duration,$regs)) print $regs[1].' '.$langs->trans("DurationDay");
    -					//elseif (preg_match('/([^a-z]+)h/i',$obj->duration,$regs)) print $regs[1].' '.$langs->trans("DurationHour");
    -					else print $obj->duration;
    -				}
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -
    -			// Sell price
    -			if (! empty($arrayfields['p.sellprice']['checked']))
    -			{
    -				print '<td align="right">';
    -				if ($obj->tosell)
    -				{
    -					if ($obj->price_base_type == 'TTC') print price($obj->price_ttc).' '.$langs->trans("TTC");
    -					else print price($obj->price).' '.$langs->trans("HT");
    -				}
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -
    -			// Better buy price
    -			if (! empty($arrayfields['p.minbuyprice']['checked']))
    -			{
    -				print  '<td align="right">';
    -				if ($obj->tobuy && $obj->minsellprice != '')
    -				{
    -					//print price($obj->minsellprice).' '.$langs->trans("HT");
    -					if ($product_fourn->find_min_price_product_fournisseur($obj->rowid) > 0)
    -					{
    -						if ($product_fourn->product_fourn_price_id > 0)
    -						{
    -							if (! empty($conf->fournisseur->enabled) && $user->rights->fournisseur->lire)
    -							{
    -								$htmltext=$product_fourn->display_price_product_fournisseur(1, 1, 0, 1);
    -								print $form->textwithpicto(price($product_fourn->fourn_unitprice * (1 - $product_fourn->fourn_remise_percent/100) - $product_fourn->fourn_remise).' '.$langs->trans("HT"),$htmltext);
    -							}
    -							else print price($product_fourn->fourn_unitprice).' '.$langs->trans("HT");
    -						}
    -					}
    -				}
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -
    -			// Number of buy prices
    -			if (! empty($arrayfields['p.numbuyprice']['checked']))
    -			{
    -				print  '<td align="right">';
    -				if ($obj->tobuy)
    -				{
    -					if (count($productFournList = $product_fourn->list_product_fournisseur_price($obj->rowid)) > 0)
    -					{
    -						$htmltext=$product_fourn->display_price_product_fournisseur(1, 1, 0, 1, $productFournList);
    -						print $form->textwithpicto(count($productFournList),$htmltext);
    -					}
    -				}
    -				print '</td>';
    -			}
    -
    -			// WAP
    -			if (! empty($arrayfields['p.pmp']['checked']))
    -			{
    -				print '<td class="nowrap" align="right">';
    -				print price($product_static->pmp, 1, $langs);
    -				print '</td>';
    -			}
    -
    -			// Limit alert
    -			if (! empty($arrayfields['p.seuil_stock_alerte']['checked']))
    -			{
    -				print '<td align="right">';
    -				if ($obj->fk_product_type != 1)
    -				{
    -					print $obj->seuil_stock_alerte;
    -				}
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Desired stock
    -			if (! empty($arrayfields['p.desiredstock']['checked']))
    -			{
    -				print '<td align="right">';
    -				if ($obj->fk_product_type != 1)
    -				{
    -					print $obj->desiredstock;
    -				}
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Stock real
    -			if (! empty($arrayfields['p.stock']['checked']))
    -			{
    -				print '<td align="right" class="nowraponall">';
    -				if ($obj->fk_product_type != 1)
    -				{
    -					if ($obj->seuil_stock_alerte != '' && $product_static->stock_reel < (float) $obj->seuil_stock_alerte) print img_warning($langs->trans("StockLowerThanLimit", $obj->seuil_stock_alerte)).' ';
    -					print $product_static->stock_reel;
    -				}
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Stock virtual
    -			if (! empty($arrayfields['stock_virtual']['checked']))
    -			{
    -				print '<td align="right" class="nowraponall">';
    -				if ($obj->fk_product_type != 1)
    -				{
    -					if ($obj->seuil_stock_alerte != '' && $product_static->stock_theorique < (float) $obj->seuil_stock_alerte) print img_warning($langs->trans("StockLowerThanLimit", $obj->seuil_stock_alerte)).' ';
    -					print $product_static->stock_theorique;
    -				}
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Lot/Serial
    -			if (! empty($arrayfields['p.tobatch']['checked']))
    -			{
    -				print '<td align="center">';
    -				print yn($obj->tobatch);
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Accountancy code sell
    -			if (! empty($arrayfields['p.accountancy_code_sell']['checked']))
    -			{
    -				print '<td>'.$obj->accountancy_code_sell.'</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Accountancy code sell
    -			if (! empty($arrayfields['p.accountancy_code_buy']['checked']))
    -			{
    -				print '<td>'.$obj->accountancy_code_buy.'</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Extra fields
    -			include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
    -			// Fields from hook
    -			$parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj);
    -			$reshook=$hookmanager->executeHooks('printFieldListValue',$parameters);    // Note that $action and $object may have been modified by hook
    -			print $hookmanager->resPrint;
    -			// Date creation
    -			if (! empty($arrayfields['p.datec']['checked']))
    -			{
    -				print '<td align="center">';
    -				print dol_print_date($obj->date_creation, 'dayhour', 'tzuser');
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Date modification
    -			if (! empty($arrayfields['p.tms']['checked']))
    -			{
    -				print '<td align="center">';
    -				print dol_print_date($obj->date_update, 'dayhour', 'tzuser');
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -
    -			// Status (to sell)
    -			if (! empty($arrayfields['p.tosell']['checked']))
    -			{
    -				print '<td align="right" nowrap="nowrap">';
    -				if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) {
    -					print ajax_object_onoff($product_static, 'status', 'tosell', 'ProductStatusOnSell', 'ProductStatusNotOnSell');
    -				} else {
    -					print $product_static->LibStatut($obj->tosell,5,0);
    -				}
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Status (to buy)
    -			if (! empty($arrayfields['p.tobuy']['checked']))
    -			{
    -				print '<td align="right" nowrap="nowrap">';
    -				if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) {
    -					print ajax_object_onoff($product_static, 'status_buy', 'tobuy', 'ProductStatusOnBuy', 'ProductStatusNotOnBuy');
    -				} else {
    -					print $product_static->LibStatut($obj->tobuy,5,1);
    -				}
    -				print '</td>';
    -				if (! $i) $totalarray['nbfield']++;
    -			}
    -			// Action
    -			print '<td class="nowrap" align="center">';
    -			if ($massactionbutton || $massaction)   // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
    -			{
    -				$selected=0;
    -				if (in_array($obj->rowid, $arrayofselected)) $selected=1;
    -				print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected?' checked="checked"':'').'>';
    +			print '<td align="right" nowrap="nowrap">';
    +			if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) {
    +				print ajax_object_onoff($product_static, 'status', 'tosell', 'ProductStatusOnSell', 'ProductStatusNotOnSell');
    +			} else {
    +				print $product_static->LibStatut($obj->tosell,5,0);
     			}
     			print '</td>';
     			if (! $i) $totalarray['nbfield']++;
    -
    -			print "</tr>\n";
    -			$i++;
     		}
    +		// Status (to buy)
    +		if (! empty($arrayfields['p.tobuy']['checked']))
    +		{
    +			print '<td align="right" nowrap="nowrap">';
    +			if (! empty($conf->use_javascript_ajax) && $user->rights->produit->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) {
    +				print ajax_object_onoff($product_static, 'status_buy', 'tobuy', 'ProductStatusOnBuy', 'ProductStatusNotOnBuy');
    +			} else {
    +				print $product_static->LibStatut($obj->tobuy,5,1);
    +			}
    +			print '</td>';
    +			if (! $i) $totalarray['nbfield']++;
    +		}
    +		// Action
    +		print '<td class="nowrap" align="center">';
    +		if ($massactionbutton || $massaction)   // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
    +		{
    +			$selected=0;
    +			if (in_array($obj->rowid, $arrayofselected)) $selected=1;
    +			print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected?' checked="checked"':'').'>';
    +		}
    +		print '</td>';
    +		if (! $i) $totalarray['nbfield']++;
     
    -		$db->free($resql);
    -
    -		print "</table>";
    -		print "</div>";
    +		print "</tr>\n";
    +		$i++;
     	}
    +
    +	$db->free($resql);
    +
    +	print "</table>";
    +	print "</div>";
     	print '</form>';
     }
     else
    @@ -981,6 +985,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/note.php b/htdocs/product/note.php
    index c0e9d77ea83..e77360b46be 100644
    --- a/htdocs/product/note.php
    +++ b/htdocs/product/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2013      Florian Henry	  	<florian.henry@open-concept.pro>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    @@ -115,6 +115,7 @@ if ($id > 0 || ! empty($ref))
         dol_fiche_end();
     }
     
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/product/popuprop.php b/htdocs/product/popuprop.php
    index d6aa23fe2c0..687054d1cde 100644
    --- a/htdocs/product/popuprop.php
    +++ b/htdocs/product/popuprop.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2005 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014      Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2015       Jean-François Ferry	<jfefe@aternatik.fr>
      *
    @@ -207,6 +207,6 @@ print "</table>";
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/price.php b/htdocs/product/price.php
    index 70e09114669..06f49757d5a 100644
    --- a/htdocs/product/price.php
    +++ b/htdocs/product/price.php
    @@ -2,11 +2,11 @@
     /* Copyright (C) 2001-2007	Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Eric Seigne				<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2006		Andre Cianfarani			<acianfa@free.fr>
      * Copyright (C) 2014		Florian Henry			<florian.henry@open-concept.pro>
    - * Copyright (C) 2014-2016	Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2014-2015 	Philippe Grand 		    <philippe.grand@atoo-net.com>
    + * Copyright (C) 2014-2018	Juanjo Menent			<jmenent@2byte.es>
    + * Copyright (C) 2014-2018 	Philippe Grand 		    <philippe.grand@atoo-net.com>
      * Copyright (C) 2014		Ion agorria				<ion@agorria.com>
      * Copyright (C) 2015		Alexandre Spangaro		<aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2015		Marcos García			<marcosgdf@gmail.com>
    @@ -46,7 +46,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
     }
     
     // Load translation files required by the page
    -$langs->loadLangs(array('products', 'bills', 'companies'));
    +$langs->loadLangs(array('products', 'bills', 'companies', 'other'));
     
     $mesg=''; $error=0; $errors=array();
     
    @@ -465,7 +465,7 @@ if (empty($reshook))
     
     			$result = $db->query($sql);
     		} else {
    -			setEventMessage('delete_price_by_qty Missing Ids','errors');
    +			setEventMessages(('delete_price_by_qty'.$langs->transnoentities(MissingIds)), null,'errors');
     		}
     	}
     
    @@ -478,7 +478,7 @@ if (empty($reshook))
     
     		$result = $db->query($sql);
     		} else {
    -			setEventMessage('delete_all_price_by_qty Missing Ids','errors');
    +			setEventMessages(('delete_price_by_qty'.$langs->transnoentities(MissingIds)), null,'errors');
     		}
     	}
     
    @@ -785,7 +785,6 @@ if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUI
             	else print vatrate($object->tva_tx . ($object->tva_npr ? '*' : ''), true);*/
             	print '</td></tr>';
     		}
    -
     	}
     	else
     	{
    @@ -1109,30 +1108,33 @@ if (! $action || $action == 'delete' || $action == 'showlog_customer_price' || $
     {
     	print "\n" . '<div class="tabsAction">' . "\n";
     
    -	if (empty($conf->global->PRODUIT_MULTIPRICES) && empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES))
    -	{
    -    	if ($user->rights->produit->creer || $user->rights->service->creer) {
    -    		print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_price&amp;id=' . $object->id . '">' . $langs->trans("UpdateDefaultPrice") . '</a></div>';
    -    	}
    -	}
    +    if ($object->isVariant()) {
    +		if ($user->rights->produit->creer || $user->rights->service->creer) {
    +			print '<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans("NoEditVariants")).'">'.$langs->trans("UpdateDefaultPrice").'</a></div>';
    +		}
    +	} else {
    +		if (empty($conf->global->PRODUIT_MULTIPRICES) && empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) {
    +			if ($user->rights->produit->creer || $user->rights->service->creer) {
    +				print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_price&amp;id=' . $object->id . '">' . $langs->trans("UpdateDefaultPrice") . '</a></div>';
    +			}
    +		}
     
    -	if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
    -	{
    -	    if ($user->rights->produit->creer || $user->rights->service->creer) {
    -	 		print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?action=add_customer_price&amp;id=' . $object->id . '">' . $langs->trans("AddCustomerPrice") . '</a></div>';
    -	  	}
    -	}
    +		if (!empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
    +			if ($user->rights->produit->creer || $user->rights->service->creer) {
    +				print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?action=add_customer_price&amp;id=' . $object->id . '">' . $langs->trans("AddCustomerPrice") . '</a></div>';
    +			}
    +		}
     
    -	if (! empty($conf->global->PRODUIT_MULTIPRICES) || ! empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES))
    -	{
    -	    if ($user->rights->produit->creer || $user->rights->service->creer) {
    -    		print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_vat&amp;id=' . $object->id . '">' . $langs->trans("UpdateVAT") . '</a></div>';
    -    	}
    +		if (!empty($conf->global->PRODUIT_MULTIPRICES) || !empty($conf->global->PRODUIT_CUSTOMER_PRICES_BY_QTY_MULTIPRICES)) {
    +			if ($user->rights->produit->creer || $user->rights->service->creer) {
    +				print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_vat&amp;id=' . $object->id . '">' . $langs->trans("UpdateVAT") . '</a></div>';
    +			}
     
    -	    if ($user->rights->produit->creer || $user->rights->service->creer) {
    -    		print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_price&amp;id=' . $object->id . '">' . $langs->trans("UpdateLevelPrices") . '</a></div>';
    -    	}
    -	}
    +			if ($user->rights->produit->creer || $user->rights->service->creer) {
    +				print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?action=edit_price&amp;id=' . $object->id . '">' . $langs->trans("UpdateLevelPrices") . '</a></div>';
    +			}
    +		}
    +    }
     
     	print "\n</div>\n";
     }
    @@ -1407,7 +1409,6 @@ if ($action == 'edit_price' && $object->getRights()->creer)
     		print '&nbsp;&nbsp;&nbsp;';
     		print '<input type="submit" class="button" name="cancel" value="' . $langs->trans("Cancel") . '"></div>';
     		print '</form>';
    -
     	}
     }
     
    @@ -2193,6 +2194,6 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES))
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/reassort.php b/htdocs/product/reassort.php
    index 9ee9ab0aead..71482d6c86a 100644
    --- a/htdocs/product/reassort.php
    +++ b/htdocs/product/reassort.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2018  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2018  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
    @@ -317,7 +317,6 @@ if ($resql)
     	        foreach($warehouses_list as &$wh) {
     	            print_liste_field_titre($wh['label'], '', '','','','align="right"');
     	        }
    -
     	    }
     	}
     	if ($virtualdiffersfromphysical) print_liste_field_titre("VirtualStock",$_SERVER["PHP_SELF"], "",$param,"",'align="right"',$sortfield,$sortorder);
    @@ -381,7 +380,7 @@ if ($resql)
     			print $product->stock_theorique;
     			print '</td>';
     		}
    -		print '<td align="right"><a href="'.DOL_URL_ROOT.'/product/stock/mouvement.php?idproduct='.$product->id.'">'.$langs->trans("Movements").'</a></td>';
    +		print '<td align="right"><a href="'.DOL_URL_ROOT.'/product/stock/movement_list.php?idproduct='.$product->id.'">'.$langs->trans("Movements").'</a></td>';
     		print '<td align="right" class="nowrap">'.$product->LibStatut($objp->statut,5,0).'</td>';
             print '<td align="right" class="nowrap">'.$product->LibStatut($objp->tobuy,5,1).'</td>';
     		print '<td></td>';
    @@ -395,13 +394,12 @@ if ($resql)
     	print '</form>';
     
     	$db->free($resql);
    -
     }
     else
     {
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/reassortlot.php b/htdocs/product/reassortlot.php
    index 3a58924108d..2f1827d2647 100644
    --- a/htdocs/product/reassortlot.php
    +++ b/htdocs/product/reassortlot.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2018  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2018  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2016       Ferran Marcet			<fmarcet@2byte.es>
    @@ -408,7 +408,7 @@ if ($resql)
             //if ($objp->seuil_stock_alerte && ($objp->stock_physique < $objp->seuil_stock_alerte)) print img_warning($langs->trans("StockTooLow")).' ';
     		print $objp->stock_physique;
     		print '</td>';
    -		print '<td align="right"><a href="'.DOL_URL_ROOT.'/product/stock/mouvement.php?idproduct='.$product_static->id.'&search_warehouse='.$objp->fk_entrepot.'&search_batch='.($objp->batch != 'Undefined' ? $objp->batch : 'Undefined').'">'.$langs->trans("Movements").'</a></td>';
    +		print '<td align="right"><a href="'.DOL_URL_ROOT.'/product/stock/movement_list.php?idproduct='.$product_static->id.'&search_warehouse='.$objp->fk_entrepot.'&search_batch='.($objp->batch != 'Undefined' ? $objp->batch : 'Undefined').'">'.$langs->trans("Movements").'</a></td>';
     		print '<td align="right" class="nowrap">'.$product_static->LibStatut($objp->statut,5,0).'</td>';
             print '<td align="right" class="nowrap">'.$product_static->LibStatut($objp->tobuy,5,1).'</td>';
             print '<td></td>';
    @@ -421,13 +421,12 @@ if ($resql)
     	print '</form>';
     
     	$db->free($resql);
    -
     }
     else
     {
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stats/card.php b/htdocs/product/stats/card.php
    index dd12d9d7bf2..40848e6bb81 100644
    --- a/htdocs/product/stats/card.php
    +++ b/htdocs/product/stats/card.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2007	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (c) 2004-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2005		Eric Seigne				<eric.seigne@ryxeo.com>
      * Copyright (C) 2013		Juanjo Menent			<jmenent@2byte.es>
      *
    @@ -433,6 +433,6 @@ if (! $id)
         dol_fiche_end();
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/stats/commande.php b/htdocs/product/stats/commande.php
    index 77941d940df..083dcd6ea52 100644
    --- a/htdocs/product/stats/commande.php
    +++ b/htdocs/product/stats/commande.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014	   Florian Henry		<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -257,5 +257,6 @@ if ($id > 0 || ! empty($ref))
     	dol_print_error();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stats/commande_fournisseur.php b/htdocs/product/stats/commande_fournisseur.php
    index da5c8f24911..21bb3f6fd9a 100644
    --- a/htdocs/product/stats/commande_fournisseur.php
    +++ b/htdocs/product/stats/commande_fournisseur.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014	   Florian Henry		<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -265,5 +265,6 @@ if ($id > 0 || ! empty($ref)) {
     	dol_print_error();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stats/contrat.php b/htdocs/product/stats/contrat.php
    index c01cbd40530..86e8e0ed616 100644
    --- a/htdocs/product/stats/contrat.php
    +++ b/htdocs/product/stats/contrat.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -236,6 +236,6 @@ else
     	dol_print_error();
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stats/facture.php b/htdocs/product/stats/facture.php
    index d0c75ac90b4..cd2dc221bb9 100644
    --- a/htdocs/product/stats/facture.php
    +++ b/htdocs/product/stats/facture.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014	   Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2014	   Florian Henry		<florian.henry@open-concept.pro>
      *
    @@ -278,5 +278,6 @@ if ($id > 0 || ! empty($ref))
     	dol_print_error();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stats/facture_fournisseur.php b/htdocs/product/stats/facture_fournisseur.php
    index 6bd722220ba..95bea4650c4 100644
    --- a/htdocs/product/stats/facture_fournisseur.php
    +++ b/htdocs/product/stats/facture_fournisseur.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013	   Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2014	   Florian Henry		<florian.henry@open-concept.pro>
      *
    @@ -263,5 +263,6 @@ if ($id > 0 || ! empty($ref))
     	dol_print_error();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stats/propal.php b/htdocs/product/stats/propal.php
    index 80256037dfe..1c2d0f56e3c 100644
    --- a/htdocs/product/stats/propal.php
    +++ b/htdocs/product/stats/propal.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014	   Florian Henry		<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -261,5 +261,6 @@ if ($id > 0 || ! empty($ref))
     	dol_print_error();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stats/supplier_proposal.php b/htdocs/product/stats/supplier_proposal.php
    index cac015171cf..55cafd034cf 100644
    --- a/htdocs/product/stats/supplier_proposal.php
    +++ b/htdocs/product/stats/supplier_proposal.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014	   Florian Henry		<florian.henry@open-concept.pro>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -260,5 +260,6 @@ if ($id > 0 || ! empty($ref))
     	dol_print_error();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php
    index 41e70a6fbf9..6977ac28acf 100644
    --- a/htdocs/product/stock/card.php
    +++ b/htdocs/product/stock/card.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2006	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Simon Tosser			<simon@kornog-computing.com>
    - * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2016	    Francis Appels       	<francis.appels@yahoo.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -298,12 +298,11 @@ else
     				$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id,$langs->trans("DeleteAWarehouse"),$langs->trans("ConfirmDeleteWarehouse",$object->libelle),"confirm_delete",'',0,2);
     			}
     
    -			if (! $formconfirm) {
    -			    $parameters = array();
    -			    $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -			    if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -			    elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -			}
    +			// Call Hook formConfirm
    +			$parameters = array();
    +			$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +			if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +			elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     			// Print form confirm
     			print $formconfirm;
    @@ -333,7 +332,6 @@ else
     				print '<tr><td>'.$langs->trans("ParentWarehouse").'</td><td>';
     				print $e->getNomUrl(3);
     				print '</td></tr>';
    -
     			}
     
     			// Description
    @@ -385,7 +383,7 @@ else
     			if ($lastmovementdate)
     			{
     			    print dol_print_date($lastmovementdate,'dayhour').' ';
    -			    print '(<a href="'.DOL_URL_ROOT.'/product/stock/mouvement.php?id='.$object->id.'">'.$langs->trans("FullList").'</a>)';
    +			    print '(<a href="'.DOL_URL_ROOT.'/product/stock/movement_list.php?id='.$object->id.'">'.$langs->trans("FullList").'</a>)';
     			}
     			else
     			{
    @@ -568,7 +566,6 @@ else
                     print '<td class="liste_total">&nbsp;</td>';
     				print '<td class="liste_total">&nbsp;</td>';
     				print '</tr>';
    -
     			}
     			else
     			{
    @@ -659,7 +656,6 @@ else
     			print '</div>';
     
     			print '</form>';
    -
     		}
     	}
     }
    @@ -707,7 +703,6 @@ if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
     	}
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/stock/class/api_stockmovements.class.php b/htdocs/product/stock/class/api_stockmovements.class.php
    index 16d21c02eb3..2dc45a262ab 100644
    --- a/htdocs/product/stock/class/api_stockmovements.class.php
    +++ b/htdocs/product/stock/class/api_stockmovements.class.php
    @@ -93,7 +93,8 @@ class StockMovements extends DolibarrApi
          *
     	 * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -153,15 +154,15 @@ class StockMovements extends DolibarrApi
     		return $obj_ret;
         }
     
    -/*
    -    * @param   int     $product_id         Id product id {@min 1}
    -    * @param   int     $warehouse_id       Id warehouse {@min 1}
    -    * @param   float   $qty                Qty to add (Use negative value for a stock decrease) {@min 0} {@message qty must be higher than 0}
    -    * @param   string  $lot                Lot
    -    * @param   string  $movementcode       Movement code {@example INV123}
    -    * @param   string  $movementlabel      Movement label {@example Inventory number 123}
    -    * @param   string  $price              To update AWP (Average Weighted Price) when you make a stock increase (qty must be higher then 0).
    -    */
    +    /*
    +     * @param   int     $product_id         Id product id {@min 1}
    +     * @param   int     $warehouse_id       Id warehouse {@min 1}
    +     * @param   float   $qty                Qty to add (Use negative value for a stock decrease) {@min 0} {@message qty must be higher than 0}
    +     * @param   string  $lot                Lot
    +     * @param   string  $movementcode       Movement code {@example INV123}
    +     * @param   string  $movementlabel      Movement label {@example Inventory number 123}
    +     * @param   string  $price              To update AWP (Average Weighted Price) when you make a stock increase (qty must be higher then 0).
    +     */
     
     
         /**
    @@ -279,7 +280,8 @@ class StockMovements extends DolibarrApi
          * @param   MouvementStock  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    diff --git a/htdocs/product/stock/class/api_warehouses.class.php b/htdocs/product/stock/class/api_warehouses.class.php
    index 10b76d22a25..91ee105acb7 100644
    --- a/htdocs/product/stock/class/api_warehouses.class.php
    +++ b/htdocs/product/stock/class/api_warehouses.class.php
    @@ -92,7 +92,8 @@ class Warehouses extends DolibarrApi
          *
     	 * @throws RestException
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -248,7 +249,8 @@ class Warehouses extends DolibarrApi
          * @param   Entrepot  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php
    index 039918ea66c..9bc0fd8477f 100644
    --- a/htdocs/product/stock/class/entrepot.class.php
    +++ b/htdocs/product/stock/class/entrepot.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2008 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2008 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011	   Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2016	   Francis Appels       <francis.appels@yahoo.com>
      *
    @@ -33,8 +33,16 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class Entrepot extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='stock';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='entrepot';
    +
     	public $picto='stock';
     
     	/**
    @@ -52,18 +60,32 @@ class Entrepot extends CommonObject
     	 */
     	const STATUS_OPEN_INTERNAL = 2;
     
    -	var $libelle;
    -	var $description;
    -	var $statut;
    -	var $lieu;
    -	var $address;
    +	public $libelle;
    +
    +	/**
    +	 * @var string description
    +	 */
    +	public $description;
    +
    +	public $statut;
    +	public $lieu;
    +
    +	/**
    +	 * @var string Address
    +	 */
    +	public $address;
    +
     	//! Code Postal
    -	var $zip;
    -	var $town;
    -	var $fk_parent;
    +	public $zip;
    +	public $town;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_parent;
     
     	// List of short language codes for status
    -	var $statuts = array();
    +	public $statuts = array();
     
     	/**
     	 *  Constructor
    @@ -85,7 +107,6 @@ class Entrepot extends CommonObject
     		{
     			$this->statuts[self::STATUS_OPEN_ALL] = 'Opened';
     		}
    -
     	}
     
     	/**
    @@ -159,7 +180,6 @@ class Entrepot extends CommonObject
     			$this->db->rollback();
     			return -1;
     		}
    -
     	}
     
     	/**
    @@ -293,7 +313,6 @@ class Entrepot extends CommonObject
     			$this->error=$this->db->lasterror();
     			return -1;
     		}
    -
     	}
     
     
    @@ -397,11 +416,9 @@ class Entrepot extends CommonObject
     
     				$this->date_creation     = $this->db->jdate($obj->datec);
     				$this->date_modification = $this->db->jdate($obj->datem);
    -
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -410,6 +427,7 @@ class Entrepot extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of all warehouses
     	 *
    @@ -418,6 +436,7 @@ class Entrepot extends CommonObject
     	 */
     	function list_array($status=1)
     	{
    +        // phpcs:enable
     		$liste = array();
     
     		$sql = "SELECT rowid, ref as label";
    @@ -441,6 +460,7 @@ class Entrepot extends CommonObject
     		return $liste;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return number of unique different product into a warehouse
     	 *
    @@ -448,6 +468,7 @@ class Entrepot extends CommonObject
     	 */
     	function nb_different_products()
     	{
    +        // phpcs:enable
     		$ret=array();
     
     		$sql = "SELECT count(distinct p.rowid) as nb";
    @@ -473,6 +494,7 @@ class Entrepot extends CommonObject
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return stock and value of warehosue
     	 *
    @@ -480,6 +502,7 @@ class Entrepot extends CommonObject
     	 */
     	function nb_products()
     	{
    +        // phpcs:enable
     		$ret=array();
     
     		$sql = "SELECT sum(ps.reel) as nb, sum(ps.reel * p.pmp) as value";
    @@ -517,6 +540,7 @@ class Entrepot extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return label of a given status
     	 *
    @@ -526,6 +550,7 @@ class Entrepot extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$langs->load('stocks');
    @@ -643,6 +668,7 @@ class Entrepot extends CommonObject
             $this->country_code='FR';
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return full path to current warehouse
     	 *
    @@ -650,6 +676,7 @@ class Entrepot extends CommonObject
     	 */
     	function get_full_arbo()
     	{
    +        // phpcs:enable
             global $user,$langs,$conf;
     
             $TArbo = array(empty($this->label)?$this->libelle:$this->label);
    @@ -683,14 +710,17 @@ class Entrepot extends CommonObject
             return implode(' >> ', array_reverse($TArbo));
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return array of children warehouses ids from $id warehouse (recursive function)
     	 *
     	 * @param	int		$id					id parent warehouse
    -	 * @param	array()	$TChildWarehouses	array which will contain all children (param by reference)
    -	 * @return	array()	$TChildWarehouses	array which will contain all children
    +	 * @param	array	$TChildWarehouses	array which will contain all children (param by reference)
    +	 * @return	array	$TChildWarehouses	array which will contain all children
     	 */
    -	function get_children_warehouses($id, &$TChildWarehouses) {
    +    function get_children_warehouses($id, &$TChildWarehouses)
    +    {
    +        // phpcs:enable
     
     		$sql = 'SELECT rowid
     				FROM '.MAIN_DB_PREFIX.'entrepot
    @@ -705,9 +735,8 @@ class Entrepot extends CommonObject
     		}
     
     		return $TChildWarehouses;
    -
     	}
    -	
    +
     	/**
     	 *	Create object on disk
     	 *
    @@ -739,5 +768,4 @@ class Entrepot extends CommonObject
     
     		return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref);
     	}
    -
     }
    diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php
    index 825034b87cb..7991477e146 100644
    --- a/htdocs/product/stock/class/mouvementstock.class.php
    +++ b/htdocs/product/stock/class/mouvementstock.class.php
    @@ -34,6 +34,7 @@ class MouvementStock extends CommonObject
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'stockmouvement';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
    @@ -43,14 +44,34 @@ class MouvementStock extends CommonObject
     	public $product_id;
     	public $warehouse_id;
     	public $qty;
    +
    +	/**
    +	 * @var int Type of movement
    +	 * 0=input (stock increase by a stock transfer), 1=output (stock decrease after by a stock transfer),
    +	 * 2=output (stock decrease), 3=input (stock increase)
    +	 * Note that qty should be > 0 with 0 or 3, < 0 with 1 or 2.
    +	 */
     	public $type;
     
     	public $tms = '';
     	public $datem = '';
     	public $price;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_author;
    -	public $label;
    +
    +	/**
    +     * @var string stock movements label
    +     */
    +    public $label;
    +
    +    /**
    +     * @var int ID
    +     */
     	public $fk_origin;
    +
     	public $origintype;
     	public $inventorycode;
     	public $batch;
    @@ -448,7 +469,6 @@ class MouvementStock extends CommonObject
     				{
     					$fk_product_stock = $this->db->last_insert_id(MAIN_DB_PREFIX."product_stock");
     				}
    -
     			}
     
     			// Update detail stock for batch product
    @@ -777,8 +797,8 @@ class MouvementStock extends CommonObject
     	 * Create or update batch record (update table llx_product_batch). No check is done here, done by parent.
     	 *
     	 * @param	array|int	$dluo	      Could be either
    -	 *                                     - int if row id of product_batch table
    -	 *                                     - or complete array('fk_product_stock'=>, 'batchnumber'=>)
    +	 *                                    - int if row id of product_batch table
    +	 *                                    - or complete array('fk_product_stock'=>, 'batchnumber'=>)
     	 * @param	int			$qty	      Quantity of product with batch number. May be a negative amount.
     	 * @return 	int   				      <0 if KO, else return productbatch id
     	 */
    @@ -857,6 +877,7 @@ class MouvementStock extends CommonObject
     		return $result;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return Url link of origin object
     	 *
    @@ -866,6 +887,7 @@ class MouvementStock extends CommonObject
     	 */
     	function get_origin($fk_origin, $origintype)
     	{
    +        // phpcs:enable
     	    $origin='';
     
     		switch ($origintype) {
    @@ -985,7 +1007,7 @@ class MouvementStock extends CommonObject
     		$label.= '<br><b>' . $langs->trans('Qty') . ':</b> ' .$this->qty;
     		$label.= '</div>';
     
    -		$link = '<a href="'.DOL_URL_ROOT.'/product/stock/mouvement.php?id='.$this->warehouse_id.'&msid='.$this->id.'"';
    +		$link = '<a href="'.DOL_URL_ROOT.'/product/stock/movement_list.php?id='.$this->warehouse_id.'&msid='.$this->id.'"';
     		$link.= ($notooltip?'':' title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip'.($morecss?' '.$morecss:'').'"');
     		$link.= '>';
     		$linkend='</a>';
    @@ -1010,6 +1032,7 @@ class MouvementStock extends CommonObject
     		return $this->LibStatut($mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un status donne
     	 *
    @@ -1018,29 +1041,26 @@ class MouvementStock extends CommonObject
     	 */
     	function LibStatut($mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
    -		if ($mode == 0)
    +		if ($mode == 0 || $mode == 1)
     		{
     			return $langs->trans('StatusNotApplicable');
     		}
    -		if ($mode == 1)
    -		{
    -			return $langs->trans('StatusNotApplicable');
    -		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			return img_picto($langs->trans('StatusNotApplicable'),'statut9').' '.$langs->trans('StatusNotApplicable');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			return img_picto($langs->trans('StatusNotApplicable'),'statut9');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			return img_picto($langs->trans('StatusNotApplicable'),'statut9').' '.$langs->trans('StatusNotApplicable');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			return $langs->trans('StatusNotApplicable').' '.img_picto($langs->trans('StatusNotApplicable'),'statut9');
     		}
    @@ -1059,7 +1079,7 @@ class MouvementStock extends CommonObject
     	public function generateDocument($modele, $outputlangs='',$hidedetails=0,$hidedesc=0,$hideref=0)
     	{
     		global $conf,$user,$langs;
    -	
    +
     		$langs->load("stocks");
     
     		if (! dol_strlen($modele)) {
    diff --git a/htdocs/product/stock/class/productlot.class.php b/htdocs/product/stock/class/productlot.class.php
    index 2ac89def512..d61630eb88e 100644
    --- a/htdocs/product/stock/class/productlot.class.php
    +++ b/htdocs/product/stock/class/productlot.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2014       Juanjo Menent       <jmenent@2byte.es>
      * Copyright (C) 2015       Florian Henry       <florian.henry@open-concept.pro>
      * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) ---Put here your own copyright and developer email---
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -39,6 +39,7 @@ class Productlot extends CommonObject
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'productlot';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
    @@ -46,6 +47,10 @@ class Productlot extends CommonObject
     
     	public $picto='barcode';
     
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
         public $ismultientitymanaged = 1;
     
     	/**
    @@ -54,21 +59,32 @@ class Productlot extends CommonObject
     	public $lines = array();
     
     	/**
    +	 * @var int Entity
     	 */
    -
     	public $entity;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_product;
    +
     	public $batch;
     	public $eatby = '';
     	public $sellby = '';
     	public $datec = '';
     	public $tms = '';
    -	public $fk_user_creat;
    -	public $fk_user_modif;
    -	public $import_key;
     
     	/**
    -	 */
    +     * @var int ID
    +     */
    +	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_modif;
    +
    +	public $import_key;
     
     
     	/**
    @@ -99,19 +115,19 @@ class Productlot extends CommonObject
     		// Clean parameters
     
     		if (isset($this->entity)) {
    -			 $this->entity = trim($this->entity);
    +			 $this->entity = (int) $this->entity;
     		}
     		if (isset($this->fk_product)) {
    -			 $this->fk_product = trim($this->fk_product);
    +			 $this->fk_product = (int) $this->fk_product;
     		}
     		if (isset($this->batch)) {
     			 $this->batch = trim($this->batch);
     		}
     		if (isset($this->fk_user_creat)) {
    -			 $this->fk_user_creat = trim($this->fk_user_creat);
    +			 $this->fk_user_creat = (int) $this->fk_user_creat;
     		}
     		if (isset($this->fk_user_modif)) {
    -			 $this->fk_user_modif = trim($this->fk_user_modif);
    +			 $this->fk_user_modif = (int) $this->fk_user_modif;
     		}
     		if (isset($this->import_key)) {
     			 $this->import_key = trim($this->import_key);
    @@ -280,19 +296,19 @@ class Productlot extends CommonObject
     		// Clean parameters
     
     		if (isset($this->entity)) {
    -			 $this->entity = trim($this->entity);
    +			 $this->entity = (int) $this->entity;
     		}
     		if (isset($this->fk_product)) {
    -			 $this->fk_product = trim($this->fk_product);
    +			 $this->fk_product = (int) $this->fk_product;
     		}
     		if (isset($this->batch)) {
     			 $this->batch = trim($this->batch);
     		}
     		if (isset($this->fk_user_creat)) {
    -			 $this->fk_user_creat = trim($this->fk_user_creat);
    +			 $this->fk_user_creat = (int) $this->fk_user_creat;
     		}
     		if (isset($this->fk_user_modif)) {
    -			 $this->fk_user_modif = trim($this->fk_user_modif);
    +			 $this->fk_user_modif = (int) $this->fk_user_modif;
     		}
     		if (isset($this->import_key)) {
     			 $this->import_key = trim($this->import_key);
    @@ -342,9 +358,6 @@ class Productlot extends CommonObject
     		}
     
     		if (!$error && !$notrigger) {
    -			// Uncomment this and change MYOBJECT to your own tag if you
    -			// want this action calls a trigger.
    -
     			// Call triggers
     			$result=$this->call_trigger('PRODUCTLOT_MODIFY',$user);
     			if ($result < 0) { $error++; }
    @@ -379,8 +392,8 @@ class Productlot extends CommonObject
     
     		$this->db->begin();
     
    -		if (!$error) {
    -			if (!$notrigger) {
    +		//if (!$error) {
    +			//if (!$notrigger) {
     				// Uncomment this and change MYOBJECT to your own tag if you
     				// want this action calls a trigger.
     
    @@ -388,8 +401,8 @@ class Productlot extends CommonObject
     				//$result=$this->call_trigger('MYOBJECT_DELETE',$user);
     				//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
     				//// End call triggers
    -			}
    -		}
    +			//}
    +		//}
     
     		if (!$error) {
     			$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element;
    @@ -474,6 +487,7 @@ class Productlot extends CommonObject
     	    return $this->LibStatut(0,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return label of a given status
     	 *
    @@ -483,6 +497,7 @@ class Productlot extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     	    global $langs;
     
     	    //$langs->load('stocks');
    @@ -569,17 +584,15 @@ class Productlot extends CommonObject
     	{
     		$this->id = 0;
     
    -		$this->entity = '';
    -		$this->fk_product = '';
    +		$this->entity = null;
    +		$this->fk_product = null;
     		$this->batch = '';
     		$this->eatby = '';
     		$this->sellby = '';
     		$this->datec = '';
     		$this->tms = '';
    -		$this->fk_user_creat = '';
    -		$this->fk_user_modif = '';
    +		$this->fk_user_creat = null;
    +		$this->fk_user_modif = null;
     		$this->import_key = '';
     	}
    -
     }
    -
    diff --git a/htdocs/product/stock/class/productstockentrepot.class.php b/htdocs/product/stock/class/productstockentrepot.class.php
    index cbca4e5854d..aaae328de48 100644
    --- a/htdocs/product/stock/class/productstockentrepot.class.php
    +++ b/htdocs/product/stock/class/productstockentrepot.class.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2014-2016  Juanjo Menent       <jmenent@2byte.es>
      * Copyright (C) 2015       Florian Henry       <florian.henry@open-concept.pro>
      * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) ---Put here your own copyright and developer email---
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,24 +44,28 @@ class ProductStockEntrepot extends CommonObject
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'ProductStockEntrepot';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'product_warehouse_properties';
     
    -	/**
    -	 */
    -
     	public $tms = '';
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_product;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_entrepot;
    +
     	public $seuil_stock_alerte;
     	public $desiredstock;
     	public $import_key;
     
    -	/**
    -	 */
    -
     
     	/**
     	 * Constructor
    @@ -89,8 +93,8 @@ class ProductStockEntrepot extends CommonObject
     
     		// Clean parameters
     
    -		if (isset($this->fk_product)) $this->fk_product = trim($this->fk_product);
    -		if (isset($this->fk_entrepot)) $this->fk_entrepot = trim($this->fk_entrepot);
    +		if (isset($this->fk_product)) $this->fk_product = (int) $this->fk_product;
    +		if (isset($this->fk_entrepot)) $this->fk_entrepot = (int) $this->fk_entrepot;
     		if (isset($this->seuil_stock_alerte)) $this->seuil_stock_alerte = trim($this->seuil_stock_alerte);
     		if (isset($this->desiredstock)) $this->desiredstock = trim($this->desiredstock);
     		if (isset($this->import_key)) $this->import_key = trim($this->import_key);
    @@ -131,7 +135,7 @@ class ProductStockEntrepot extends CommonObject
     		if (!$error) {
     			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
     
    -			if (!$notrigger) {
    +			//if (!$notrigger) {
     				// Uncomment this and change MYOBJECT to your own tag if you
     				// want this action to call a trigger.
     
    @@ -139,7 +143,7 @@ class ProductStockEntrepot extends CommonObject
     				//$result=$this->call_trigger('MYOBJECT_CREATE',$user);
     				//if ($result < 0) $error++;
     				//// End call triggers
    -			}
    +			//}
     		}
     
     		// Commit or rollback
    @@ -198,8 +202,6 @@ class ProductStockEntrepot extends CommonObject
     				$this->seuil_stock_alerte = $obj->seuil_stock_alerte;
     				$this->desiredstock = $obj->desiredstock;
     				$this->import_key = $obj->import_key;
    -
    -
     			}
     
     			// Retreive all extrafield
    @@ -313,8 +315,8 @@ class ProductStockEntrepot extends CommonObject
     
     		// Clean parameters
     
    -		if (isset($this->fk_product)) $this->fk_product = trim($this->fk_product);
    -		if (isset($this->fk_entrepot)) $this->fk_entrepot = trim($this->fk_entrepot);
    +		if (isset($this->fk_product)) $this->fk_product = (int) $this->fk_product;
    +		if (isset($this->fk_entrepot)) $this->fk_entrepot = (int) $this->fk_entrepot;
     		if (isset($this->seuil_stock_alerte)) $this->seuil_stock_alerte = trim($this->seuil_stock_alerte);
     		if (isset($this->desiredstock)) $this->desiredstock = trim($this->desiredstock);
     		if (isset($this->import_key)) $this->import_key = trim($this->import_key);
    @@ -345,7 +347,7 @@ class ProductStockEntrepot extends CommonObject
     			dol_syslog(__METHOD__ . ' ' . implode(',', $this->errors), LOG_ERR);
     		}
     
    -		if (!$error && !$notrigger) {
    +		//if (!$error && !$notrigger) {
     			// Uncomment this and change MYOBJECT to your own tag if you
     			// want this action calls a trigger.
     
    @@ -353,7 +355,7 @@ class ProductStockEntrepot extends CommonObject
     			//$result=$this->call_trigger('MYOBJECT_MODIFY',$user);
     			//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
     			//// End call triggers
    -		}
    +		//}
     
     		// Commit or rollback
     		if ($error) {
    @@ -383,8 +385,7 @@ class ProductStockEntrepot extends CommonObject
     
     		$this->db->begin();
     
    -		if (!$error) {
    -			if (!$notrigger) {
    +		//if (!$error && !$notrigger) {
     				// Uncomment this and change MYOBJECT to your own tag if you
     				// want this action calls a trigger.
     
    @@ -392,8 +393,7 @@ class ProductStockEntrepot extends CommonObject
     				//$result=$this->call_trigger('MYOBJECT_DELETE',$user);
     				//if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail}
     				//// End call triggers
    -			}
    -		}
    +		//}
     
     		if (!$error) {
     			$sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element;
    @@ -516,6 +516,7 @@ class ProductStockEntrepot extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un status donne
     	 *
    @@ -525,38 +526,38 @@ class ProductStockEntrepot extends CommonObject
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
    -			$prefix='';
     			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    +			elseif ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    +			elseif ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
     		}
     	}
     
    @@ -572,13 +573,10 @@ class ProductStockEntrepot extends CommonObject
     		$this->id = 0;
     
     		$this->tms = '';
    -		$this->fk_product = '';
    -		$this->fk_entrepot = '';
    +		$this->fk_product = null;
    +		$this->fk_entrepot = null;
     		$this->seuil_stock_alerte = '';
     		$this->desiredstock = '';
     		$this->import_key = '';
    -
    -
     	}
    -
     }
    diff --git a/htdocs/product/stock/fiche-valo.php b/htdocs/product/stock/fiche-valo.php
    index 400c6183ca4..d815e56a00b 100644
    --- a/htdocs/product/stock/fiche-valo.php
    +++ b/htdocs/product/stock/fiche-valo.php
    @@ -140,5 +140,6 @@ if ($_GET["id"])
     	print "</div>";
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stock/index.php b/htdocs/product/stock/index.php
    index fd2c1d48168..61990fa1cfb 100644
    --- a/htdocs/product/stock/index.php
    +++ b/htdocs/product/stock/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -97,7 +97,6 @@ if ($result)
                 $i++;
             }
             $db->free($result);
    -
         }
         print "</table>";
     }
    @@ -143,7 +142,7 @@ if ($resql)
     		print '<th>'.$langs->trans("EatByDate").'</th>';
     	}
     	print '<th>'.$langs->trans("Warehouse").'</th>';
    -	print '<th align="right"><a class="notasortlink" href="'.DOL_URL_ROOT.'/product/stock/mouvement.php">'.$langs->trans("FullList").'</a></th>';
    +	print '<th align="right"><a class="notasortlink" href="'.DOL_URL_ROOT.'/product/stock/movement_list.php">'.$langs->trans("FullList").'</a></th>';
     	print "</tr>\n";
     
     	$i=0;
    @@ -185,6 +184,6 @@ if ($resql)
     //print '</td></tr></table>';
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/stock/info.php b/htdocs/product/stock/info.php
    index 4653a56495d..065dd448a8d 100644
    --- a/htdocs/product/stock/info.php
    +++ b/htdocs/product/stock/info.php
    @@ -73,6 +73,6 @@ dol_print_object_info($object);
     
     print '</div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/stock/list.php b/htdocs/product/stock/list.php
    index aba8655fae1..5682b6855d3 100644
    --- a/htdocs/product/stock/list.php
    +++ b/htdocs/product/stock/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2004	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2015       Juanjo Menent           <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -271,7 +271,6 @@ else
       dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/stock/massstockmove.php b/htdocs/product/stock/massstockmove.php
    index eae89aca648..66ed28b8ec8 100644
    --- a/htdocs/product/stock/massstockmove.php
    +++ b/htdocs/product/stock/massstockmove.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2013-2018 Laurent Destaileur	<ely@users.sourceforge.net>
    - * Copyright (C) 2014	   Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2014	   Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software: you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -161,7 +161,7 @@ if ($action == 'createmovements')
     	if (! GETPOST("label"))
     	{
     		$error++;
    -		setEventMessages($langs->trans("ErrorFieldRequired"),$langs->transnoentitiesnoconv("LabelMovement"), null, 'errors');
    +		setEventMessages($langs->trans("ErrorFieldRequired"),$langs->transnoentitiesnoconv("MovementLabel"), null, 'errors');
     	}
     
     	$db->begin();
    @@ -334,8 +334,6 @@ $buttonrecordnoent=$langs->transnoentitiesnoconv("RecordMovement");
     print '<span class="opacitymedium">'.$langs->trans("SelectProductInAndOutWareHouse",$titletoaddnoent,$buttonrecordnoent).'</span><br>';
     print '<br>'."\n";
     
    -$var=true;
    -
     // Form to add a line
     print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST" name="formulaire">';
     print '<input type="hidden" name="token" value="' .$_SESSION['newtoken'] . '">';
    @@ -402,8 +400,6 @@ print '</tr>';
     
     foreach($listofdata as $key => $val)
     {
    -
    -
     	$productstatic->fetch($val['id_product']);
     	$warehousestatics->fetch($val['id_sw']);
     	$warehousestatict->fetch($val['id_tw']);
    @@ -455,7 +451,7 @@ print '<table class="noborder" width="100%">';
     	print '</td>';
     	print '</tr>';
     	print '<tr>';
    -	print '<td>'.$langs->trans("LabelMovement").'</td>';
    +	print '<td>'.$langs->trans("MovementLabel").'</td>';
     	print '<td>';
     	print '<input type="text" name="label" class="quatrevingtpercent" value="'.dol_escape_htmltag($labelmovement).'">';
     	print '</td>';
    @@ -466,7 +462,6 @@ print '<div class="center"><input class="button" type="submit" name="valid" valu
     
     print '</form>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/stock/mouvement.php b/htdocs/product/stock/movement_list.php
    similarity index 95%
    rename from htdocs/product/stock/mouvement.php
    rename to htdocs/product/stock/movement_list.php
    index 410396a152b..bd5ac4a4345 100644
    --- a/htdocs/product/stock/mouvement.php
    +++ b/htdocs/product/stock/movement_list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2006	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2014	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2015		Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2018		Ferran Marcet			<fmarcet@2byte.es>
      *
    @@ -20,7 +20,7 @@
      */
     
     /**
    - *	\file       htdocs/product/stock/mouvement.php
    + *	\file       htdocs/product/stock/movement_list.php
      *	\ingroup    stock
      *	\brief      Page to list stock movements
      */
    @@ -43,7 +43,7 @@ if (! empty($conf->projet->enabled))
     }
     
     // Load translation files required by the page
    -$langs->loadLangs(array('products', 'stocks'));
    +$langs->loadLangs(array('products', 'stocks', 'orders'));
     if (! empty($conf->productbatch->enabled)) $langs->load("productbatch");
     
     // Security check
    @@ -90,7 +90,7 @@ $formfile = new FormFile($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('movement');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     $arrayfields=array(
         'm.rowid'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
    @@ -103,8 +103,8 @@ $arrayfields=array(
         'e.ref'=>array('label'=>$langs->trans("Warehouse"), 'checked'=>1, 'enabled'=>(! $id > 0)),	// If we are on specific warehouse, we hide it
         'm.fk_user_author'=>array('label'=>$langs->trans("Author"), 'checked'=>0),
         'm.inventorycode'=>array('label'=>$langs->trans("InventoryCodeShort"), 'checked'=>1),
    -    'm.label'=>array('label'=>$langs->trans("LabelMovement"), 'checked'=>1),
    -    'm.type_mouvement'=>array('label'=>$langs->trans("Type Mouvement"), 'checked'=>1),
    +    'm.label'=>array('label'=>$langs->trans("MovementLabel"), 'checked'=>1),
    +    'm.type_mouvement'=>array('label'=>$langs->trans("TypeMovement"), 'checked'=>1),
         'origin'=>array('label'=>$langs->trans("Origin"), 'checked'=>1),
     	'm.value'=>array('label'=>$langs->trans("Qty"), 'checked'=>1),
     	'm.price'=>array('label'=>$langs->trans("UnitPurchaseValue"), 'checked'=>0),
    @@ -385,7 +385,7 @@ if ($action == "transfert_stock" && ! $cancel)
                     }
                     else
                     {
    -                    header("Location: mouvement.php?id=".$object->id);
    +                    header("Location: movement_list.php?id=".$object->id);
                         exit;
                     }
                 }
    @@ -478,11 +478,11 @@ if (! empty($search_movement))      $sql.= natural_search('m.label', $search_mov
     if (! empty($search_inventorycode)) $sql.= natural_search('m.inventorycode', $search_inventorycode);
     if (! empty($search_product_ref))   $sql.= natural_search('p.ref', $search_product_ref);
     if (! empty($search_product))       $sql.= natural_search('p.label', $search_product);
    -if ($search_warehouse > 0)          $sql.= " AND e.rowid = '".$db->escape($search_warehouse)."'";
    +if ($search_warehouse != '' && $search_warehouse != '-1')          $sql.= natural_search('e.rowid', $search_warehouse, 2);
     if (! empty($search_user))          $sql.= natural_search('u.login', $search_user);
     if (! empty($search_batch))         $sql.= natural_search('m.batch', $search_batch);
     if ($search_qty != '')				$sql.= natural_search('m.value', $search_qty, 1);
    -if ($search_type_mouvement)	$sql.= " AND m.type_mouvement = '".$db->escape($search_type_mouvement)."'";
    +if ($search_type_mouvement != '' && $search_type_mouvement != '-1')	$sql.= natural_search('m.type_mouvement', $search_type_mouvement, 2);
     // Add where from extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
     // Add where from hooks
    @@ -579,8 +579,10 @@ if ($resql)
     
             print '<table class="border" width="100%">';
     
    +        print '<tr>';
    +
             // Description
    -        print '<tr><td class="titlefield tdtop">'.$langs->trans("Description").'</td><td>'.dol_htmlentitiesbr($object->description).'</td></tr>';
    +        print '<td class="titlefield tdtop">'.$langs->trans("Description").'</td><td>'.dol_htmlentitiesbr($object->description).'</td></tr>';
     
             $calcproductsunique=$object->nb_different_products();
             $calcproducts=$object->nb_products();
    @@ -841,13 +843,14 @@ if ($resql)
     	    // Type of movement
     	    print '<td class="liste_titre" align="center">';
     	    //print '<input class="flat" type="text" size="3" name="search_type_mouvement" value="'.dol_escape_htmltag($search_type_mouvement).'">';
    -		print '<select name="search_type_mouvement">';
    +		print '<select id="search_type_mouvement" name="search_type_mouvement" class="maxwidth150">';
     		print '<option value="" '.(($search_type_mouvement=="")?'selected="selected"':'').'></option>';
    -		print '<option value="0" '.(($search_type_mouvement=="0")?'selected="selected"':'').'>0</option>';
    -		print '<option value="1" '.(($search_type_mouvement=="1")?'selected="selected"':'').'>1</option>';
    -		print '<option value="2" '.(($search_type_mouvement=="2")?'selected="selected"':'').'>2</option>';
    -		print '<option value="3" '.(($search_type_mouvement=="3")?'selected="selected"':'').'>3</option>';
    +		print '<option value="0" '.(($search_type_mouvement=="0")?'selected="selected"':'').'>'.$langs->trans('StockIncreaseAfterCorrectTransfer').'</option>';
    +		print '<option value="1" '.(($search_type_mouvement=="1")?'selected="selected"':'').'>'.$langs->trans('StockDecreaseAfterCorrectTransfer').'</option>';
    +		print '<option value="2" '.(($search_type_mouvement=="2")?'selected="selected"':'').'>'.$langs->trans('StockDecrease').'</option>';
    +		print '<option value="3" '.(($search_type_mouvement=="3")?'selected="selected"':'').'>'.$langs->trans('StockIncrease').'</option>';
     		print '</select>';
    +		print ajax_combobox('search_type_mouvement');
     		// TODO: add new function $formentrepot->selectTypeOfMovement(...) like
     		// print $formproduct->selectWarehouses($search_warehouse, 'search_warehouse', 'warehouseopen,warehouseinternal', 1, 0, 0, '', 0, 0, null, 'maxwidth200');
     	    print '</td>';
    @@ -966,7 +969,7 @@ if ($resql)
     			$origin = '';
     		}
     
    -        print "<tr>";
    +        print '<tr class="oddeven">';
             // Id movement
             if (! empty($arrayfields['m.rowid']['checked']))
             {
    @@ -980,7 +983,7 @@ if ($resql)
             if (! empty($arrayfields['p.ref']['checked']))
             {
     	        // Product ref
    -	        print '<td>';
    +	        print '<td class="nowraponall">';
     	        print $productstatic->getNomUrl(1,'stock',16);
     	        print "</td>\n";
             }
    @@ -997,7 +1000,7 @@ if ($resql)
             }
             if (! empty($arrayfields['m.batch']['checked']))
             {
    -	    	print '<td align="center">';
    +	    	print '<td class="center nowraponall">';
     	    	if ($productlot->id > 0) print $productlot->getNomUrl(1);
     	    	else print $productlot->batch;		// the id may not be defined if movement was entered when lot was not saved or if lot was removed after movement.
     	    	print '</td>';
    @@ -1027,7 +1030,15 @@ if ($resql)
             if (! empty($arrayfields['m.inventorycode']['checked']))
             {
     	        // Inventory code
    -	        print '<td>'.$objp->inventorycode.'</td>';
    +	        print '<td>'.'<a href="'
    +								.DOL_URL_ROOT.'/product/stock/movement_list.php'
    +								.'?id='.$objp->entrepot_id
    +								.'&amp;search_inventorycode='.$objp->inventorycode
    +							    .'&amp;search_type_mouvement='.$objp->type_mouvement
    +						.'">'
    +							.$objp->inventorycode
    +						.'</a>'
    +					.'</td>';
             }
             if (! empty($arrayfields['m.label']['checked']))
             {
    @@ -1042,7 +1053,7 @@ if ($resql)
             if (! empty($arrayfields['origin']['checked']))
             {
             	// Origin of movement
    -        	print '<td>'.$origin.'</td>';
    +        	print '<td class="nowraponall">'.$origin.'</td>';
             }
             if (! empty($arrayfields['m.value']['checked']))
             {
    @@ -1165,7 +1176,6 @@ if ($action != 'create' && $action != 'edit' && $action != 'delete' && $id>0)
     }
     */
     
    +// End of page
     llxFooter();
    -
     $db->close();
    -
    diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php
    index 7c18dc11281..7f3f3d99ebf 100644
    --- a/htdocs/product/stock/product.php
    +++ b/htdocs/product/stock/product.php
    @@ -1,13 +1,14 @@
     <?php
    -/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    +/* Copyright (C) 2001-2007  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
      * Copyright (C) 2005      Simon TOSSER         <simon@kornog-computing.com>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador      <csalvador.gpcsolutions.fr>
    - * Copyright (C) 2013-2015 Juanjo Menent	    <jmenent@2byte.es>
    + * Copyright (C) 2013-2018 Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2014-2015 Cédric Gross         <c.gross@kreiz-it.fr>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,6 +45,13 @@ if (! empty($conf->projet->enabled))
     	require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     }
     
    +if (! empty($conf->variants->enabled)) {
    +	require_once DOL_DOCUMENT_ROOT . '/variants/class/ProductAttribute.class.php';
    +	require_once DOL_DOCUMENT_ROOT . '/variants/class/ProductAttributeValue.class.php';
    +	require_once DOL_DOCUMENT_ROOT . '/variants/class/ProductCombination.class.php';
    +	require_once DOL_DOCUMENT_ROOT . '/variants/class/ProductCombination2ValuePair.class.php';
    +}
    +
     // Load translation files required by the page
     $langs->loadlangs(array('products', 'orders', 'bills', 'stocks', 'sendings'));
     if (! empty($conf->productbatch->enabled)) $langs->load("productbatch");
    @@ -80,10 +88,9 @@ $extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
     if ($id > 0 || ! empty($ref))
     {
         $result = $object->fetch($id, $ref);
    -
     }
     
    -if(empty($id) && !empty($object->id)) $id = $object->id; 
    +if(empty($id) && !empty($object->id)) $id = $object->id;
     
     $modulepart='product';
     
    @@ -135,8 +142,7 @@ if ($action == 'addlimitstockwarehouse' && !empty($user->rights->produit->creer)
     			// Update
     			$pse->seuil_stock_alerte = $seuil_stock_alerte;
     			$pse->desiredstock  	 = $desiredstock;
    -			if($pse->update($user) > 0) setEventMessage($langs->trans('ProductStockWarehouseUpdated'));
    -
    +			if($pse->update($user) > 0) setEventMessages($langs->trans('ProductStockWarehouseUpdated'), null, 'mesgs');
     		} else {
     
     			// Create
    @@ -144,15 +150,12 @@ if ($action == 'addlimitstockwarehouse' && !empty($user->rights->produit->creer)
     			$pse->fk_product  	 	 = $id;
     			$pse->seuil_stock_alerte = GETPOST('seuil_stock_alerte');
     			$pse->desiredstock  	 = GETPOST('desiredstock');
    -			if($pse->create($user) > 0) setEventMessage($langs->trans('ProductStockWarehouseCreated'));
    -
    +			if($pse->create($user) > 0) setEventMessages($langs->trans('ProductStockWarehouseCreated'), null, 'mesgs');
     		}
    -
     	}
     
     	header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
     	exit;
    -
     }
     
     if($action == 'delete_productstockwarehouse' && !empty($user->rights->produit->creer))
    @@ -160,10 +163,9 @@ if($action == 'delete_productstockwarehouse' && !empty($user->rights->produit->c
     
     	$pse = new ProductStockEntrepot($db);
     	$pse->fetch(GETPOST('fk_productstockwarehouse'));
    -	if($pse->delete($user) > 0) setEventMessage($langs->trans('ProductStockWarehouseDeleted'));
    +	if($pse->delete($user) > 0) setEventMessages($langs->trans('ProductStockWarehouseDeleted'), null, 'mesgs');
     
     	$action = '';
    -
     }
     
     // Set stock limit
    @@ -176,7 +178,7 @@ if ($action == 'setseuil_stock_alerte' && !empty($user->rights->produit->creer))
         if ($result < 0)
         	setEventMessages($object->error, $object->errors, 'errors');
         //else
    -    //	setEventMessage($lans->trans("SavedRecordSuccessfully"));
    +    //	setEventMessages($lans->trans("SavedRecordSuccessfully"), null, 'mesgs');
         $action='';
     }
     
    @@ -517,6 +519,8 @@ if ($id > 0 || $ref)
     	$object = new Product($db);
     	$result = $object->fetch($id,$ref);
     
    +	$variants = $object->hasVariants();
    +
     	$object->load_stock();
     
     	$title = $langs->trans('ProductServiceCard');
    @@ -557,174 +561,161 @@ if ($id > 0 || $ref)
             print '<div class="underbanner clearboth"></div>';
             print '<table class="border tableforfield" width="100%">';
     
    -		if ($conf->productbatch->enabled)
    -		{
    -			print '<tr><td class="titlefield">'.$langs->trans("ManageLotSerial").'</td><td>';
    -			print $object->getLibStatut(0,2);
    -			print '</td></tr>';
    -		}
    +		if (! $variants) {
     
    -		// PMP
    -		print '<tr><td class="titlefield">'.$langs->trans("AverageUnitPricePMP").'</td>';
    -		print '<td>';
    -		if ($object->pmp > 0) print price($object->pmp).' '.$langs->trans("HT");
    -		print '</td>';
    -		print '</tr>';
    +			if ($conf->productbatch->enabled) {
    +				print '<tr><td class="titlefield">' . $langs->trans("ManageLotSerial") . '</td><td>';
    +				print $object->getLibStatut(0, 2);
    +				print '</td></tr>';
    +			}
     
    -		// Minimum Price
    -		print '<tr><td>'.$langs->trans("BuyingPriceMin").'</td>';
    -		print '<td>';
    -		$product_fourn = new ProductFournisseur($db);
    -		if ($product_fourn->find_min_price_product_fournisseur($object->id) > 0)
    -		{
    -			if ($product_fourn->product_fourn_price_id > 0) print $product_fourn->display_price_product_fournisseur();
    -			else print $langs->trans("NotDefined");
    -		}
    -		print '</td></tr>';
    +			// PMP
    +			print '<tr><td class="titlefield">' . $langs->trans("AverageUnitPricePMP") . '</td>';
    +			print '<td>';
    +			if ($object->pmp > 0) print price($object->pmp) . ' ' . $langs->trans("HT");
    +			print '</td>';
    +			print '</tr>';
     
    -		if (empty($conf->global->PRODUIT_MULTIPRICES))
    -		{
    -			// Price
    -			print '<tr><td>' . $langs->trans("SellingPrice") . '</td><td>';
    -			if ($object->price_base_type == 'TTC') {
    -				print price($object->price_ttc) . ' ' . $langs->trans($object->price_base_type);
    -			} else {
    -				print price($object->price) . ' ' . $langs->trans($object->price_base_type);
    +			// Minimum Price
    +			print '<tr><td>' . $langs->trans("BuyingPriceMin") . '</td>';
    +			print '<td>';
    +			$product_fourn = new ProductFournisseur($db);
    +			if ($product_fourn->find_min_price_product_fournisseur($object->id) > 0) {
    +				if ($product_fourn->product_fourn_price_id > 0) print $product_fourn->display_price_product_fournisseur();
    +				else print $langs->trans("NotDefined");
     			}
     			print '</td></tr>';
     
    -			// Price minimum
    -			print '<tr><td>' . $langs->trans("MinPrice") . '</td><td>';
    -			if ($object->price_base_type == 'TTC') {
    -				print price($object->price_min_ttc) . ' ' . $langs->trans($object->price_base_type);
    +			if (empty($conf->global->PRODUIT_MULTIPRICES)) {
    +				// Price
    +				print '<tr><td>' . $langs->trans("SellingPrice") . '</td><td>';
    +				if ($object->price_base_type == 'TTC') {
    +					print price($object->price_ttc) . ' ' . $langs->trans($object->price_base_type);
    +				} else {
    +					print price($object->price) . ' ' . $langs->trans($object->price_base_type);
    +				}
    +				print '</td></tr>';
    +
    +				// Price minimum
    +				print '<tr><td>' . $langs->trans("MinPrice") . '</td><td>';
    +				if ($object->price_base_type == 'TTC') {
    +					print price($object->price_min_ttc) . ' ' . $langs->trans($object->price_base_type);
    +				} else {
    +					print price($object->price_min) . ' ' . $langs->trans($object->price_base_type);
    +				}
    +				print '</td></tr>';
     			} else {
    -				print price($object->price_min) . ' ' . $langs->trans($object->price_base_type);
    +				// Price
    +				print '<tr><td>' . $langs->trans("SellingPrice") . '</td><td>';
    +				print $langs->trans("Variable");
    +				print '</td></tr>';
    +
    +				// Price minimum
    +				print '<tr><td>' . $langs->trans("MinPrice") . '</td><td>';
    +				print $langs->trans("Variable");
    +				print '</td></tr>';
     			}
    -			print '</td></tr>';
    -		}
    -		else
    -		{
    -			// Price
    -			print '<tr><td>' . $langs->trans("SellingPrice") . '</td><td>';
    -			print $langs->trans("Variable");
    +
    +			// Stock alert threshold
    +			print '<tr><td>' . $form->editfieldkey($form->textwithpicto($langs->trans("StockLimit"), $langs->trans("StockLimitDesc"), 1), 'seuil_stock_alerte', $object->seuil_stock_alerte, $object, $user->rights->produit->creer) . '</td><td>';
    +			print $form->editfieldval("StockLimit", 'seuil_stock_alerte', $object->seuil_stock_alerte, $object, $user->rights->produit->creer, 'string');
     			print '</td></tr>';
     
    -			// Price minimum
    -			print '<tr><td>' . $langs->trans("MinPrice") . '</td><td>';
    -			print $langs->trans("Variable");
    +			// Hook formObject
    +			$parameters = array();
    +			$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action);    // Note that $action and $object may have been modified by hook
    +			print $hookmanager->resPrint;
    +
    +			// Desired stock
    +			print '<tr><td>' . $form->editfieldkey($form->textwithpicto($langs->trans("DesiredStock"), $langs->trans("DesiredStockDesc"), 1), 'desiredstock', $object->desiredstock, $object, $user->rights->produit->creer);
    +			print '</td><td>';
    +			print $form->editfieldval("DesiredStock", 'desiredstock', $object->desiredstock, $object, $user->rights->produit->creer, 'string');
     			print '</td></tr>';
    +
    +			// Real stock
    +			$text_stock_options = $langs->trans("RealStockDesc") . '<br>';
    +			$text_stock_options .= $langs->trans("RealStockWillAutomaticallyWhen") . '<br>';
    +			$text_stock_options .= (!empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT) || !empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE) ? $langs->trans("DeStockOnShipment") . '<br>' : '');
    +			$text_stock_options .= (!empty($conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER) ? $langs->trans("DeStockOnValidateOrder") . '<br>' : '');
    +			$text_stock_options .= (!empty($conf->global->STOCK_CALCULATE_ON_BILL) ? $langs->trans("DeStockOnBill") . '<br>' : '');
    +			$text_stock_options .= (!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) ? $langs->trans("ReStockOnBill") . '<br>' : '');
    +			$text_stock_options .= (!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER) ? $langs->trans("ReStockOnValidateOrder") . '<br>' : '');
    +			$text_stock_options .= (!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER) ? $langs->trans("ReStockOnDispatchOrder") . '<br>' : '');
    +			print '<tr><td>';
    +			print $form->textwithpicto($langs->trans("PhysicalStock"), $text_stock_options, 1);
    +			print '</td>';
    +			print '<td>' . price2num($object->stock_reel, 'MS');
    +			if ($object->seuil_stock_alerte != '' && ($object->stock_reel < $object->seuil_stock_alerte)) print ' ' . img_warning($langs->trans("StockLowerThanLimit", $object->seuil_stock_alerte));
    +			print '</td>';
    +			print '</tr>';
    +
    +			$stocktheo = price2num($object->stock_theorique, 'MS');
    +
    +			$found = 0;
    +			$helpondiff = '<strong>' . $langs->trans("StockDiffPhysicTeoric") . ':</strong><br>';
    +			// Number of customer orders running
    +			if (!empty($conf->commande->enabled)) {
    +				if ($found) $helpondiff .= '<br>'; else $found = 1;
    +				$helpondiff .= $langs->trans("ProductQtyInCustomersOrdersRunning") . ': ' . $object->stats_commande['qty'];
    +				$result = $object->load_stats_commande(0, '0', 1);
    +				if ($result < 0) dol_print_error($db, $object->error);
    +				$helpondiff .= ' (' . $langs->trans("ProductQtyInDraft") . ': ' . $object->stats_commande['qty'] . ')';
    +			}
    +
    +			// Number of product from customer order already sent (partial shipping)
    +			if (!empty($conf->expedition->enabled)) {
    +				if ($found) $helpondiff .= '<br>'; else $found = 1;
    +				$result = $object->load_stats_sending(0, '2', 1);
    +				$helpondiff .= $langs->trans("ProductQtyInShipmentAlreadySent") . ': ' . $object->stats_expedition['qty'];
    +			}
    +
    +			// Number of supplier order running
    +			if (!empty($conf->fournisseur->enabled)) {
    +				if ($found) $helpondiff .= '<br>'; else $found = 1;
    +				$result = $object->load_stats_commande_fournisseur(0, '3,4', 1);
    +				$helpondiff .= $langs->trans("ProductQtyInSuppliersOrdersRunning") . ': ' . $object->stats_commande_fournisseur['qty'];
    +				$result = $object->load_stats_commande_fournisseur(0, '0,1,2', 1);
    +				if ($result < 0) dol_print_error($db, $object->error);
    +				$helpondiff .= ' (' . $langs->trans("ProductQtyInDraftOrWaitingApproved") . ': ' . $object->stats_commande_fournisseur['qty'] . ')';
    +			}
    +
    +			// Number of product from supplier order already received (partial receipt)
    +			if (!empty($conf->fournisseur->enabled)) {
    +				if ($found) $helpondiff .= '<br>'; else $found = 1;
    +				$helpondiff .= $langs->trans("ProductQtyInSuppliersShipmentAlreadyRecevied") . ': ' . $object->stats_reception['qty'];
    +			}
    +
    +			// Calculating a theorical value
    +			print '<tr><td>';
    +			print $form->textwithpicto($langs->trans("VirtualStock"), $langs->trans("VirtualStockDesc"));
    +			print '</td>';
    +			print "<td>";
    +			//print (empty($stocktheo)?0:$stocktheo);
    +			print $form->textwithpicto((empty($stocktheo) ? 0 : $stocktheo), $helpondiff);
    +			if ($object->seuil_stock_alerte != '' && ($object->stock_theorique < $object->seuil_stock_alerte)) print ' ' . img_warning($langs->trans("StockLowerThanLimit", $object->seuil_stock_alerte));
    +			print '</td>';
    +			print '</tr>';
    +
    +			// Last movement
    +			$sql = "SELECT max(m.datem) as datem";
    +			$sql .= " FROM " . MAIN_DB_PREFIX . "stock_mouvement as m";
    +			$sql .= " WHERE m.fk_product = '" . $object->id . "'";
    +			$resqlbis = $db->query($sql);
    +			if ($resqlbis) {
    +				$obj = $db->fetch_object($resqlbis);
    +				$lastmovementdate = $db->jdate($obj->datem);
    +			} else {
    +				dol_print_error($db);
    +			}
    +			print '<tr><td class="tdtop">' . $langs->trans("LastMovement") . '</td><td>';
    +			if ($lastmovementdate) {
    +				print dol_print_date($lastmovementdate, 'dayhour') . ' ';
    +				print '(<a href="' . DOL_URL_ROOT . '/product/stock/movement_list.php?idproduct=' . $object->id . '">' . $langs->trans("FullList") . '</a>)';
    +			} else {
    +				print '<a href="' . DOL_URL_ROOT . '/product/stock/movement_list.php?idproduct=' . $object->id . '">' . $langs->trans("None") . '</a>';
    +			}
    +			print "</td></tr>";
     		}
    -
    -        // Stock alert threshold
    -        print '<tr><td>'.$form->editfieldkey($form->textwithpicto($langs->trans("StockLimit"), $langs->trans("StockLimitDesc"), 1),'seuil_stock_alerte',$object->seuil_stock_alerte,$object,$user->rights->produit->creer).'</td><td>';
    -        print $form->editfieldval("StockLimit",'seuil_stock_alerte',$object->seuil_stock_alerte,$object,$user->rights->produit->creer,'string');
    -        print '</td></tr>';
    -
    -		// Hook formObject
    -		$parameters=array();
    -		$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action);    // Note that $action and $object may have been modified by hook
    -		print $hookmanager->resPrint;
    -
    -        // Desired stock
    -        print '<tr><td>'.$form->editfieldkey($form->textwithpicto($langs->trans("DesiredStock"), $langs->trans("DesiredStockDesc"), 1),'desiredstock',$object->desiredstock,$object,$user->rights->produit->creer);
    -        print '</td><td>';
    -        print $form->editfieldval("DesiredStock",'desiredstock',$object->desiredstock,$object,$user->rights->produit->creer,'string');
    -        print '</td></tr>';
    -
    -        // Real stock
    -        $text_stock_options = $langs->trans("RealStockDesc").'<br>';
    -        $text_stock_options.= $langs->trans("RealStockWillAutomaticallyWhen").'<br>';
    -        $text_stock_options.= (! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT) || ! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT_CLOSE)?$langs->trans("DeStockOnShipment").'<br>':'');
    -        $text_stock_options.= (! empty($conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER)?$langs->trans("DeStockOnValidateOrder").'<br>':'');
    -        $text_stock_options.= (! empty($conf->global->STOCK_CALCULATE_ON_BILL)?$langs->trans("DeStockOnBill").'<br>':'');
    -        $text_stock_options.= (! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL)?$langs->trans("ReStockOnBill").'<br>':'');
    -        $text_stock_options.= (! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER)?$langs->trans("ReStockOnValidateOrder").'<br>':'');
    -        $text_stock_options.= (! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)?$langs->trans("ReStockOnDispatchOrder").'<br>':'');
    -        print '<tr><td>';
    -        print $form->textwithpicto($langs->trans("PhysicalStock"), $text_stock_options, 1);
    -        print '</td>';
    -		print '<td>'.price2num($object->stock_reel, 'MS');
    -		if ($object->seuil_stock_alerte != '' && ($object->stock_reel < $object->seuil_stock_alerte)) print ' '.img_warning($langs->trans("StockLowerThanLimit", $object->seuil_stock_alerte));
    -		print '</td>';
    -		print '</tr>';
    -
    -		$stocktheo = price2num($object->stock_theorique, 'MS');
    -
    -		$found=0;
    -		$helpondiff='<strong>'.$langs->trans("StockDiffPhysicTeoric").':</strong><br>';
    -		// Number of customer orders running
    -		if (! empty($conf->commande->enabled))
    -		{
    -		    if ($found) $helpondiff.='<br>'; else $found=1;
    -		    $helpondiff.=$langs->trans("ProductQtyInCustomersOrdersRunning").': '.$object->stats_commande['qty'];
    -		    $result=$object->load_stats_commande(0,'0', 1);
    -		    if ($result < 0) dol_print_error($db,$object->error);
    -		    $helpondiff.=' ('.$langs->trans("ProductQtyInDraft").': '.$object->stats_commande['qty'].')';
    -		}
    -
    -		// Number of product from customer order already sent (partial shipping)
    -		if (! empty($conf->expedition->enabled))
    -		{
    -		    if ($found) $helpondiff.='<br>'; else $found=1;
    -		    $result=$object->load_stats_sending(0,'2', 1);
    -		    $helpondiff.=$langs->trans("ProductQtyInShipmentAlreadySent").': '.$object->stats_expedition['qty'];
    -		}
    -
    -		// Number of supplier order running
    -		if (! empty($conf->fournisseur->enabled))
    -		{
    -		    if ($found) $helpondiff.='<br>'; else $found=1;
    -		    $result=$object->load_stats_commande_fournisseur(0,'3,4', 1);
    -		    $helpondiff.=$langs->trans("ProductQtyInSuppliersOrdersRunning").': '.$object->stats_commande_fournisseur['qty'];
    -		    $result=$object->load_stats_commande_fournisseur(0,'0,1,2', 1);
    -		    if ($result < 0) dol_print_error($db,$object->error);
    -		    $helpondiff.=' ('.$langs->trans("ProductQtyInDraftOrWaitingApproved").': '.$object->stats_commande_fournisseur['qty'].')';
    -		}
    -
    -		// Number of product from supplier order already received (partial receipt)
    -		if (! empty($conf->fournisseur->enabled))
    -		{
    -		    if ($found) $helpondiff.='<br>'; else $found=1;
    -		    $helpondiff.=$langs->trans("ProductQtyInSuppliersShipmentAlreadyRecevied").': '.$object->stats_reception['qty'];
    -		}
    -
    -        // Calculating a theorical value
    -        print '<tr><td>';
    -        print $form->textwithpicto($langs->trans("VirtualStock"), $langs->trans("VirtualStockDesc"));
    -        print '</td>';
    -        print "<td>";
    -        //print (empty($stocktheo)?0:$stocktheo);
    -        print $form->textwithpicto((empty($stocktheo)?0:$stocktheo), $helpondiff);
    -        if ($object->seuil_stock_alerte != '' && ($object->stock_theorique < $object->seuil_stock_alerte)) print ' '.img_warning($langs->trans("StockLowerThanLimit", $object->seuil_stock_alerte));
    -        print '</td>';
    -        print '</tr>';
    -
    -		// Last movement
    -		$sql = "SELECT max(m.datem) as datem";
    -		$sql.= " FROM ".MAIN_DB_PREFIX."stock_mouvement as m";
    -		$sql.= " WHERE m.fk_product = '".$object->id."'";
    -		$resqlbis = $db->query($sql);
    -		if ($resqlbis)
    -		{
    -			$obj = $db->fetch_object($resqlbis);
    -			$lastmovementdate=$db->jdate($obj->datem);
    -		}
    -		else
    -		{
    -			dol_print_error($db);
    -		}
    -		print '<tr><td class="tdtop">'.$langs->trans("LastMovement").'</td><td>';
    -		if ($lastmovementdate)
    -		{
    -		    print dol_print_date($lastmovementdate,'dayhour').' ';
    -		    print '(<a href="'.DOL_URL_ROOT.'/product/stock/mouvement.php?idproduct='.$object->id.'">'.$langs->trans("FullList").'</a>)';
    -		}
    -		else
    -		{
    -		     print '<a href="'.DOL_URL_ROOT.'/product/stock/mouvement.php?idproduct='.$object->id.'">'.$langs->trans("None").'</a>';
    -		}
    -		print "</td></tr>";
    -
     		print "</table>";
     
             print '</div>';
    @@ -769,231 +760,325 @@ if (empty($reshook))
     	{
     	    print "<div class=\"tabsAction\">\n";
     
    -	    if ($user->rights->stock->mouvement->creer)
    -	    {
    -	        print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=correction">'.$langs->trans("CorrectStock").'</a>';
    -	    }
    -
    -	    //if (($user->rights->stock->mouvement->creer) && ! $object->hasbatch())
    -	    if ($user->rights->stock->mouvement->creer)
    +		if ($user->rights->stock->mouvement->creer)
     		{
    -			print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=transfert">'.$langs->trans("TransferStock").'</a>';
    +			if (! $variants) {
    +				print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=correction">' . $langs->trans("CorrectStock") . '</a>';
    +			}
    +			else
    +			{
    +				print '<a class="butActionRefused" href="#" title="'.$langs->trans("ActionAvailableOnVariantProductOnly").'">' . $langs->trans("CorrectStock") . '</a>';
    +			}
    +		}
    +		else
    +		{
    +			print '<a class="butActionRefused" href="#" title="'.$langs->trans("NotEnoughPermissions").'">' . $langs->trans("CorrectStock") . '</a>';
    +		}
    +
    +		//if (($user->rights->stock->mouvement->creer) && ! $object->hasbatch())
    +		if ($user->rights->stock->mouvement->creer)
    +		{
    +			if (! $variants) {
    +				print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;action=transfert">' . $langs->trans("TransferStock") . '</a>';
    +			}
    +			else
    +			{
    +				print '<a class="butActionRefused" href="#" title="'.$langs->trans("ActionAvailableOnVariantProductOnly").'">' . $langs->trans("TransferStock") . '</a>';
    +			}
    +		}
    +		else
    +		{
    +			print '<a class="butActionRefused" href="#" title="'.$langs->trans("NotEnoughPermissions").'">' . $langs->trans("CorrectStock") . '</a>';
     		}
     
     		print '</div>';
     	}
    -
     }
     
     
    -/*
    - * Stock detail (by warehouse). May go down into batch details.
    - */
    +if (! $variants) {
    +	/*
    +	 * Stock detail (by warehouse). May go down into batch details.
    +	 */
     
    -print '<div class="div-table-responsive">';
    -print '<table class="noborder" width="100%">';
    -print '<tr class="liste_titre">';
    -print '<td colspan="4">'.$langs->trans("Warehouse").'</td>';
    -print '<td align="right">'.$langs->trans("NumberOfUnit").'</td>';
    -print '<td align="right">'.$langs->trans("AverageUnitPricePMPShort").'</td>';
    -print '<td align="right">'.$langs->trans("EstimatedStockValueShort").'</td>';
    -print '<td align="right">'.$langs->trans("SellPriceMin").'</td>';
    -print '<td align="right">'.$langs->trans("EstimatedStockValueSellShort").'</td>';
    -print '</tr>';
    -if ((! empty($conf->productbatch->enabled)) && $object->hasbatch())
    -{
    -	print '<tr class="liste_titre"><td width="10%"></td>';
    -	print '<td align="right" width="10%">'.$langs->trans("batch_number").'</td>';
    -	print '<td align="center" width="10%">'.$langs->trans("EatByDate").'</td>';
    -	print '<td align="center" width="10%">'.$langs->trans("SellByDate").'</td>';
    -	print '<td></td>';
    -	print '<td></td>';
    -	print '<td></td>';
    -	print '<td></td>';
    -	print '<td></td>';
    -	print '</tr>';
    -}
    -
    -$sql = "SELECT e.rowid, e.ref as label, e.lieu, ps.reel, ps.rowid as product_stock_id, p.pmp";
    -$sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e,";
    -$sql.= " ".MAIN_DB_PREFIX."product_stock as ps";
    -$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON p.rowid = ps.fk_product";
    -$sql.= " WHERE ps.reel != 0";
    -$sql.= " AND ps.fk_entrepot = e.rowid";
    -$sql.= " AND e.entity IN (".getEntity('stock').")";
    -$sql.= " AND ps.fk_product = ".$object->id;
    -$sql.= " ORDER BY e.ref";
    -
    -$entrepotstatic=new Entrepot($db);
    -$product_lot_static=new Productlot($db);
    -
    -$total=0;
    -$totalvalue=$totalvaluesell=0;
    -
    -$resql=$db->query($sql);
    -if ($resql)
    -{
    -	$num = $db->num_rows($resql);
    -	$total=$totalwithpmp;
    -	$i=0; $var=false;
    -	while ($i < $num)
    -	{
    -		$obj = $db->fetch_object($resql);
    -		$entrepotstatic->id=$obj->rowid;
    -		$entrepotstatic->libelle=$obj->label;
    -		$entrepotstatic->lieu=$obj->lieu;
    -		$stock_real = price2num($obj->reel, 'MS');
    -		print '<tr class="oddeven">';
    -		print '<td colspan="4">'.$entrepotstatic->getNomUrl(1).'</td>';
    -		print '<td align="right">'.$stock_real.($stock_real < 0 ?' '.img_warning():'').'</td>';
    -		// PMP
    -		print '<td align="right">'.(price2num($object->pmp)?price2num($object->pmp,'MU'):'').'</td>';
    -		// Value purchase
    -		print '<td align="right">'.(price2num($object->pmp)?price(price2num($object->pmp*$obj->reel,'MT')):'').'</td>';
    -        // Sell price
    -		print '<td align="right">';
    -        if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($object->price,'MU'),1);
    -        else print $langs->trans("Variable");
    -        print '</td>';
    -        // Value sell
    -        print '<td align="right">';
    -        if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($object->price*$obj->reel,'MT'),1).'</td>';
    -        else print $langs->trans("Variable");
    -		print '</tr>'; ;
    -		$total += $obj->reel;
    -		if (price2num($object->pmp)) $totalwithpmp += $obj->reel;
    -		$totalvalue = $totalvalue + ($object->pmp*$obj->reel);
    -        $totalvaluesell = $totalvaluesell + ($object->price*$obj->reel);
    -		// Batch Detail
    -		if ((! empty($conf->productbatch->enabled)) && $object->hasbatch())
    -		{
    -			$details=Productbatch::findAll($db, $obj->product_stock_id, 0, $object->id);
    -			if ($details<0) dol_print_error($db);
    -			foreach ($details as $pdluo)
    -			{
    -				$product_lot_static->id = $pdluo->lotid;
    -				$product_lot_static->batch = $pdluo->batch;
    -				$product_lot_static->eatby = $pdluo->eatby;
    -				$product_lot_static->sellby = $pdluo->sellby;
    -
    -			    if ($action == 'editline' && GETPOST('lineid','int') == $pdluo->id)
    -			    { //Current line edit
    -			        print "\n".'<tr>';
    -			        print '<td colspan="9">';
    -			        print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
    -			        print '<input type="hidden" name="pdluoid" value="'.$pdluo->id.'"><input type="hidden" name="action" value="updateline"><input type="hidden" name="id" value="'.$id.'"><table class="noborder" width="100%"><tr><td width="10%"></td>';
    -			        print '<td align="right" width="10%"><input type="text" name="batch_number" value="'.$pdluo->batch.'"></td>';
    -			        print '<td align="center" width="10%">';
    -			        $form->select_date($pdluo->eatby,'eatby','','',1,'',1,0,1);
    -			        print '</td>';
    -			        print '<td align="center" width="10%">';
    -			        $form->select_date($pdluo->sellby,'sellby','','',1,'',1,0,1);
    -			        print '</td>';
    -			        print '<td align="right" width="10%">'.$pdluo->qty.($pdluo->qty<0?' '.img_warning():'').'</td>';
    -			        print '<td colspan="4"><input type="submit" class="button" id="savelinebutton" name="save" value="'.$langs->trans("Save").'">';
    -		            print '<input type="submit" class="button" id="cancellinebutton" name="Cancel" value="'.$langs->trans("Cancel").'"></td></tr>';
    -			        print '</table>';
    -			        print '</form>';
    -			        print '</td></tr>';
    -			    }
    -			    else
    -				{
    -                    print "\n".'<tr><td align="right">';
    -                    print img_picto($langs->trans("Tranfer"),'uparrow','class="hideonsmartphone"').' ';
    -					print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;id_entrepot='.$entrepotstatic->id.'&amp;action=transfert&amp;pdluoid='.$pdluo->id.'">'.$langs->trans("TransferStock").'</a>';
    -					// Disabled, because edition of stock content must use the "Correct stock menu".
    -					// Do not use this, or data will be wrong (bad tracking of movement label, inventory code, ...
    -                    //print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$id.'&amp;action=editline&amp;lineid='.$pdluo->id.'#'.$pdluo->id.'">';
    -                    //print img_edit().'</a></td>';
    -                    print '<td align="right">';
    -                    print $product_lot_static->getNomUrl(1);
    -                    print '</td>';
    -                    print '<td align="center">'. dol_print_date($pdluo->eatby,'day') .'</td>';
    -                    print '<td align="center">'. dol_print_date($pdluo->sellby,'day') .'</td>';
    -                    print '<td align="right">'.$pdluo->qty.($pdluo->qty<0?' '.img_warning():'').'</td>';
    -                    print '<td colspan="4"></td></tr>';
    -			    }
    -			}
    -		}
    -		$i++;
    -
    -	}
    -}
    -else dol_print_error($db);
    -
    -print '<tr class="liste_total"><td align="right" class="liste_total" colspan="4">'.$langs->trans("Total").':</td>';
    -print '<td class="liste_total" align="right">'.price2num($total, 'MS').'</td>';
    -print '<td class="liste_total" align="right">';
    -print ($totalwithpmp?price(price2num($totalvalue/$totalwithpmp,'MU')):'&nbsp;');	// This value may have rounding errors
    -print '</td>';
    -// Value purchase
    -print '<td class="liste_total" align="right">';
    -print $totalvalue?price(price2num($totalvalue,'MT'),1):'&nbsp;';
    -print '</td>';
    -print '<td class="liste_total" align="right">';
    -if (empty($conf->global->PRODUIT_MULTIPRICES)) print ($total?price($totalvaluesell/$total,1):'&nbsp;');
    -else print $langs->trans("Variable");
    -print '</td>';
    -// Value to sell
    -print '<td class="liste_total" align="right">';
    -if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($totalvaluesell,'MT'),1);
    -else print $langs->trans("Variable");
    -print '</td>';
    -print "</tr>";
    -print "</table>";
    -print '</div>';
    -
    -if (!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE))
    -{
    -	print '<br><br>';
    -	print_titre($langs->trans('AddNewProductStockWarehouse'));
    -
    -	if (!empty($user->rights->produit->creer)){
    -		print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
    -		print '<input type="hidden" name="action" value="addlimitstockwarehouse">';
    -		print '<input type="hidden" name="id" value="'.$id.'">';
    -	}
    +	print '<div class="div-table-responsive">';
     	print '<table class="noborder" width="100%">';
    -	if (!empty($user->rights->produit->creer)){
    -		print '<tr class="liste_titre"><td width="40%">'.$formproduct->selectWarehouses('', 'fk_entrepot').'</td>';
    -		print '<td align="right"><input name="seuil_stock_alerte" type="text" placeholder="'.$langs->trans("StockLimit").'" /></td>';
    -		print '<td align="right"><input name="desiredstock" type="text" placeholder="'.$langs->trans("DesiredStock").'" /></td>';
    -		print '<td align="right"><input type="submit" value="'.$langs->trans('Save').'" class="button" /></td>';
    -		print '</tr>';
    -	}else{
    -		print '<tr class="liste_titre"><td width="40%">'.$langs->trans("Warehouse").'</td>';
    -		print '<td align="right">'.$langs->trans("StockLimit").'</td>';
    -		print '<td align="right">'.$langs->trans("DesiredStock").'</td>';
    +	print '<tr class="liste_titre">';
    +	print '<td colspan="4">' . $langs->trans("Warehouse") . '</td>';
    +	print '<td align="right">' . $langs->trans("NumberOfUnit") . '</td>';
    +	print '<td align="right">' . $langs->trans("AverageUnitPricePMPShort") . '</td>';
    +	print '<td align="right">' . $langs->trans("EstimatedStockValueShort") . '</td>';
    +	print '<td align="right">' . $langs->trans("SellPriceMin") . '</td>';
    +	print '<td align="right">' . $langs->trans("EstimatedStockValueSellShort") . '</td>';
    +	print '</tr>';
    +	if ((!empty($conf->productbatch->enabled)) && $object->hasbatch()) {
    +		print '<tr class="liste_titre"><td width="10%"></td>';
    +		print '<td align="right" width="10%">' . $langs->trans("batch_number") . '</td>';
    +		print '<td align="center" width="10%">' . $langs->trans("EatByDate") . '</td>';
    +		print '<td align="center" width="10%">' . $langs->trans("SellByDate") . '</td>';
    +		print '<td></td>';
    +		print '<td></td>';
    +		print '<td></td>';
    +		print '<td></td>';
    +		print '<td></td>';
     		print '</tr>';
     	}
     
    -	$pse = new ProductStockEntrepot($db);
    -	$lines = $pse->fetchAll($id);
    +	$sql = "SELECT e.rowid, e.ref as label, e.lieu, ps.reel, ps.rowid as product_stock_id, p.pmp";
    +	$sql .= " FROM " . MAIN_DB_PREFIX . "entrepot as e,";
    +	$sql .= " " . MAIN_DB_PREFIX . "product_stock as ps";
    +	$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "product as p ON p.rowid = ps.fk_product";
    +	$sql .= " WHERE ps.reel != 0";
    +	$sql .= " AND ps.fk_entrepot = e.rowid";
    +	$sql .= " AND e.entity IN (" . getEntity('stock') . ")";
    +	$sql .= " AND ps.fk_product = " . $object->id;
    +	$sql .= " ORDER BY e.ref";
     
    -	if (!empty($lines))
    -	{
    -		$var=false;
    -		foreach($lines as $line)
    -		{
    -			$ent = new Entrepot($db);
    -			$ent->fetch($line['fk_entrepot']);
    -			print '<tr class="oddeven"><td width="40%">'.$ent->getNomUrl(3).'</td>';
    -			print '<td align="right">'.$line['seuil_stock_alerte'].'</td>';
    -			print '<td align="right">'.$line['desiredstock'].'</td>';
    -			if (!empty($user->rights->produit->creer)){
    -			    print '<td align="right"><a href="?id='.$id.'&fk_productstockwarehouse='.$line['id'].'&action=delete_productstockwarehouse">'.img_delete().'</a></td>';
    +	$entrepotstatic = new Entrepot($db);
    +	$product_lot_static = new Productlot($db);
    +
    +	$total = 0;
    +	$totalvalue = $totalvaluesell = 0;
    +
    +	$resql = $db->query($sql);
    +	if ($resql) {
    +		$num = $db->num_rows($resql);
    +		$total = $totalwithpmp;
    +		$i = 0;
    +		$var = false;
    +		while ($i < $num) {
    +			$obj = $db->fetch_object($resql);
    +			$entrepotstatic->id = $obj->rowid;
    +			$entrepotstatic->libelle = $obj->label;
    +			$entrepotstatic->lieu = $obj->lieu;
    +			$stock_real = price2num($obj->reel, 'MS');
    +			print '<tr class="oddeven">';
    +			print '<td colspan="4">' . $entrepotstatic->getNomUrl(1) . '</td>';
    +			print '<td align="right">' . $stock_real . ($stock_real < 0 ? ' ' . img_warning() : '') . '</td>';
    +			// PMP
    +			print '<td align="right">' . (price2num($object->pmp) ? price2num($object->pmp, 'MU') : '') . '</td>';
    +			// Value purchase
    +			print '<td align="right">' . (price2num($object->pmp) ? price(price2num($object->pmp * $obj->reel, 'MT')) : '') . '</td>';
    +			// Sell price
    +			print '<td align="right">';
    +			if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($object->price, 'MU'), 1);
    +			else print $langs->trans("Variable");
    +			print '</td>';
    +			// Value sell
    +			print '<td align="right">';
    +			if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($object->price * $obj->reel, 'MT'), 1) . '</td>';
    +			else print $langs->trans("Variable");
    +			print '</tr>';;
    +			$total += $obj->reel;
    +			if (price2num($object->pmp)) $totalwithpmp += $obj->reel;
    +			$totalvalue = $totalvalue + ($object->pmp * $obj->reel);
    +			$totalvaluesell = $totalvaluesell + ($object->price * $obj->reel);
    +			// Batch Detail
    +			if ((!empty($conf->productbatch->enabled)) && $object->hasbatch()) {
    +				$details = Productbatch::findAll($db, $obj->product_stock_id, 0, $object->id);
    +				if ($details < 0) dol_print_error($db);
    +				foreach ($details as $pdluo) {
    +					$product_lot_static->id = $pdluo->lotid;
    +					$product_lot_static->batch = $pdluo->batch;
    +					$product_lot_static->eatby = $pdluo->eatby;
    +					$product_lot_static->sellby = $pdluo->sellby;
    +
    +					if ($action == 'editline' && GETPOST('lineid', 'int') == $pdluo->id) { //Current line edit
    +						print "\n" . '<tr>';
    +						print '<td colspan="9">';
    +						print '<form action="' . $_SERVER["PHP_SELF"] . '" method="POST">';
    +						print '<input type="hidden" name="pdluoid" value="' . $pdluo->id . '"><input type="hidden" name="action" value="updateline"><input type="hidden" name="id" value="' . $id . '"><table class="noborder" width="100%"><tr><td width="10%"></td>';
    +						print '<td align="right" width="10%"><input type="text" name="batch_number" value="' . $pdluo->batch . '"></td>';
    +						print '<td align="center" width="10%">';
    +						print $form->selectDate($pdluo->eatby, 'eatby', '', '', 1, '', 1, 0);
    +						print '</td>';
    +						print '<td align="center" width="10%">';
    +						print $form->selectDate($pdluo->sellby, 'sellby', '', '', 1, '', 1, 0);
    +						print '</td>';
    +						print '<td align="right" width="10%">' . $pdluo->qty . ($pdluo->qty < 0 ? ' ' . img_warning() : '') . '</td>';
    +						print '<td colspan="4"><input type="submit" class="button" id="savelinebutton" name="save" value="' . $langs->trans("Save") . '">';
    +						print '<input type="submit" class="button" id="cancellinebutton" name="Cancel" value="' . $langs->trans("Cancel") . '"></td></tr>';
    +						print '</table>';
    +						print '</form>';
    +						print '</td></tr>';
    +					} else {
    +						print "\n" . '<tr><td align="right">';
    +						print img_picto($langs->trans("Tranfer"), 'uparrow', 'class="hideonsmartphone"') . ' ';
    +						print '<a href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&amp;id_entrepot=' . $entrepotstatic->id . '&amp;action=transfert&amp;pdluoid=' . $pdluo->id . '">' . $langs->trans("TransferStock") . '</a>';
    +						// Disabled, because edition of stock content must use the "Correct stock menu".
    +						// Do not use this, or data will be wrong (bad tracking of movement label, inventory code, ...
    +						//print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$id.'&amp;action=editline&amp;lineid='.$pdluo->id.'#'.$pdluo->id.'">';
    +						//print img_edit().'</a></td>';
    +						print '<td align="right">';
    +						print $product_lot_static->getNomUrl(1);
    +						print '</td>';
    +						print '<td align="center">' . dol_print_date($pdluo->eatby, 'day') . '</td>';
    +						print '<td align="center">' . dol_print_date($pdluo->sellby, 'day') . '</td>';
    +						print '<td align="right">' . $pdluo->qty . ($pdluo->qty < 0 ? ' ' . img_warning() : '') . '</td>';
    +						print '<td colspan="4"></td></tr>';
    +					}
    +				}
     			}
    +			$i++;
    +		}
    +	} else dol_print_error($db);
    +
    +	print '<tr class="liste_total"><td align="right" class="liste_total" colspan="4">' . $langs->trans("Total") . ':</td>';
    +	print '<td class="liste_total" align="right">' . price2num($total, 'MS') . '</td>';
    +	print '<td class="liste_total" align="right">';
    +	print ($totalwithpmp ? price(price2num($totalvalue / $totalwithpmp, 'MU')) : '&nbsp;');    // This value may have rounding errors
    +	print '</td>';
    +// Value purchase
    +	print '<td class="liste_total" align="right">';
    +	print $totalvalue ? price(price2num($totalvalue, 'MT'), 1) : '&nbsp;';
    +	print '</td>';
    +	print '<td class="liste_total" align="right">';
    +	if (empty($conf->global->PRODUIT_MULTIPRICES)) print ($total ? price($totalvaluesell / $total, 1) : '&nbsp;');
    +	else print $langs->trans("Variable");
    +	print '</td>';
    +// Value to sell
    +	print '<td class="liste_total" align="right">';
    +	if (empty($conf->global->PRODUIT_MULTIPRICES)) print price(price2num($totalvaluesell, 'MT'), 1);
    +	else print $langs->trans("Variable");
    +	print '</td>';
    +	print "</tr>";
    +	print "</table>";
    +	print '</div>';
    +
    +	if (!empty($conf->global->STOCK_ALLOW_ADD_LIMIT_STOCK_BY_WAREHOUSE)) {
    +		print '<br><br>';
    +		print_titre($langs->trans('AddNewProductStockWarehouse'));
    +
    +		if (!empty($user->rights->produit->creer)) {
    +			print '<form action="' . $_SERVER["PHP_SELF"] . '" method="POST">';
    +			print '<input type="hidden" name="action" value="addlimitstockwarehouse">';
    +			print '<input type="hidden" name="id" value="' . $id . '">';
    +		}
    +		print '<table class="noborder" width="100%">';
    +		if (!empty($user->rights->produit->creer)) {
    +			print '<tr class="liste_titre"><td width="40%">' . $formproduct->selectWarehouses('', 'fk_entrepot') . '</td>';
    +			print '<td align="right"><input name="seuil_stock_alerte" type="text" placeholder="' . $langs->trans("StockLimit") . '" /></td>';
    +			print '<td align="right"><input name="desiredstock" type="text" placeholder="' . $langs->trans("DesiredStock") . '" /></td>';
    +			print '<td align="right"><input type="submit" value="' . $langs->trans('Save') . '" class="button" /></td>';
    +			print '</tr>';
    +		} else {
    +			print '<tr class="liste_titre"><td width="40%">' . $langs->trans("Warehouse") . '</td>';
    +			print '<td align="right">' . $langs->trans("StockLimit") . '</td>';
    +			print '<td align="right">' . $langs->trans("DesiredStock") . '</td>';
     			print '</tr>';
     		}
    -	}
     
    -	print "</table>";
    +		$pse = new ProductStockEntrepot($db);
    +		$lines = $pse->fetchAll($id);
     
    -	if (!empty($user->rights->produit->creer)){ 
    -	    print '</form>'; 
    +		if (!empty($lines)) {
    +			$var = false;
    +			foreach ($lines as $line) {
    +				$ent = new Entrepot($db);
    +				$ent->fetch($line['fk_entrepot']);
    +				print '<tr class="oddeven"><td width="40%">' . $ent->getNomUrl(3) . '</td>';
    +				print '<td align="right">' . $line['seuil_stock_alerte'] . '</td>';
    +				print '<td align="right">' . $line['desiredstock'] . '</td>';
    +				if (!empty($user->rights->produit->creer)) {
    +					print '<td align="right"><a href="?id=' . $id . '&fk_productstockwarehouse=' . $line['id'] . '&action=delete_productstockwarehouse">' . img_delete() . '</a></td>';
    +				}
    +				print '</tr>';
    +			}
    +		}
    +
    +		print "</table>";
    +
    +		if (!empty($user->rights->produit->creer)) {
    +			print '</form>';
    +		}
     	}
    +} else {
    +	// List of variants
    +
    +	$prodstatic = new Product($db);
    +	$prodcomb = new ProductCombination($db);
    +	$comb2val = new ProductCombination2ValuePair($db);
    +	$productCombinations = $prodcomb->fetchAllByFkProductParent($object->id);
    +
    +	print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    +	print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +	print '<input type="hidden" name="action" value="massaction">';
    +	print '<input type="hidden" name="id" value="'.$id.'">';
    +	print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
    +
    +	// load variants
    +	$title = $langs->trans("ProductCombinations");
    +
    +	print_barre_liste($title, 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0);
    +
    +	print '<div class="div-table-responsive">';
    +	?>
    +	<table class="liste">
    +		<tr class="liste_titre">
    +			<td class="liste_titre"><?php echo $langs->trans('Product') ?></td>
    +			<td class="liste_titre"><?php echo $langs->trans('Combination') ?></td>
    +			<td class="liste_titre center"><?php echo $langs->trans('OnSell') ?></td>
    +			<td class="liste_titre center"><?php echo $langs->trans('OnBuy') ?></td>
    +			<td class="liste_titre right"><?php echo $langs->trans('Stock') ?></td>
    +			<td class="liste_titre"></td>
    +		</tr>
    +		<?php
    +
    +		if (count($productCombinations))
    +		{
    +			$stock_total= 0;
    +			foreach ($productCombinations as $currcomb)
    +			{
    +				$prodstatic->fetch($currcomb->fk_product_child);
    +				$prodstatic->load_stock();
    +				$stock_total+=$prodstatic->stock_reel;
    +				?>
    +				<tr class="oddeven">
    +					<td><?php echo $prodstatic->getNomUrl(1) ?></td>
    +					<td>
    +						<?php
    +
    +						$productCombination2ValuePairs = $comb2val->fetchByFkCombination($currcomb->id);
    +						$iMax = count($productCombination2ValuePairs);
    +
    +						for ($i = 0; $i < $iMax; $i++) {
    +							echo dol_htmlentities($productCombination2ValuePairs[$i]);
    +
    +							if ($i !== ($iMax - 1)) {
    +								echo ', ';
    +							}
    +						} ?>
    +					</td>
    +					<td style="text-align: center;"><?php echo $prodstatic->getLibStatut(2, 0) ?></td>
    +					<td style="text-align: center;"><?php echo $prodstatic->getLibStatut(2, 1) ?></td>
    +					<td class="right"><?php echo $prodstatic->stock_reel ?></td>
    +					<td class="right">
    +						<a class="paddingleft paddingright" href="<?php echo dol_buildpath('/product/stock/product.php?id='.$currcomb->fk_product_child, 2) ?>"><?php echo img_edit() ?></a>
    +					</td>
    +					<?php
    +					?>
    +				</tr>
    +				<?php
    +			}
    +
    +			print '<tr class="liste_total">';
    +			print '<td colspan="4" align="left">'.$langs->trans("Total").'</td>';
    +			print '<td align="right">'.$stock_total.'</td>';
    +			print '</tr>';
    +		}
    +		else
    +		{
    +			print '<tr><td colspan="8"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
    +		}
    +		?>
    +	</table>
    +
    +	<?php
    +	print '</div>';
    +
    +	print '</form>';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/stock/productlot_card.php b/htdocs/product/stock/productlot_card.php
    index 7c2f4f148ad..dff2aa8e0e0 100644
    --- a/htdocs/product/stock/productlot_card.php
    +++ b/htdocs/product/stock/productlot_card.php
    @@ -1,7 +1,6 @@
     <?php
    -/* Copyright (C) 2007-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2007-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2018      All-3kcis       		 <contact@all-3kcis.fr>
    - * Copyright (C) ---Put here your own copyright and developer email---
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -256,7 +255,6 @@ if (empty($reshook))
         $upload_dir = $conf->productbatch->multidir_output[$conf->entity];
         $permissioncreate = $usercancreate;
         include DOL_DOCUMENT_ROOT.'/core/actions_builddoc.inc.php';
    -
     }
     
     
    @@ -318,7 +316,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     	}
     
     
    -	$linkback = '<a href="' . DOL_URL_ROOT . '/product/stock/productlot_list.php' . '">' . $langs->trans("BackToList") . '</a>';
    +	$linkback = '<a href="' . DOL_URL_ROOT . '/product/stock/productlot_list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>';
     
         $shownav = 1;
         if ($user->societe_id && ! in_array('batch', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
    @@ -388,7 +386,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     
     	print '<a href="'.DOL_URL_ROOT.'/product/reassortlot.php?sref='.urlencode($producttmp->ref).'&search_batch='.urlencode($object->batch).'">'.$langs->trans("ShowCurrentStockOfLot").'</a><br>';
     	print '<br>';
    -	print '<a href="'.DOL_URL_ROOT.'/product/stock/mouvement.php?search_product_ref='.urlencode($producttmp->ref).'&search_batch='.urlencode($object->batch).'">'.$langs->trans("ShowLogOfMovementIfLot").'</a><br>';
    +	print '<a href="'.DOL_URL_ROOT.'/product/stock/movement_list.php?search_product_ref='.urlencode($producttmp->ref).'&search_batch='.urlencode($object->batch).'">'.$langs->trans("ShowLogOfMovementIfLot").'</a><br>';
     
     	print '<br>';
     }
    @@ -414,10 +412,8 @@ if (empty($action))
         $somethingshown=$formfile->numoffiles;
     
         print '</div>';
    -
     }
     
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stock/productlot_document.php b/htdocs/product/stock/productlot_document.php
    index f79a0d74d98..c5c1e7c37f0 100644
    --- a/htdocs/product/stock/productlot_document.php
    +++ b/htdocs/product/stock/productlot_document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2013      Florian Henry          <florian.henry@open-concept.pro>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -95,7 +95,6 @@ if (empty($reshook))
     
     	// Action submit/delete file/link
     	include_once DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php';
    -
     }
     
     $permtoedit = $user->rights->produit->creer;
    @@ -122,7 +121,7 @@ if ($object->id)
         print $hookmanager->resPrint;
     	if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     
     	$totalsize=0;
    @@ -132,7 +131,7 @@ if ($object->id)
     	}
     
     
    -    $linkback = '<a href="' . DOL_URL_ROOT . '/product/stock/productlot_list.php' . '">' . $langs->trans("BackToList") . '</a>';
    +    $linkback = '<a href="' . DOL_URL_ROOT . '/product/stock/productlot_list.php?restore_lastsearch_values=1">' . $langs->trans("BackToList") . '</a>';
     
         $shownav = 1;
         if ($user->societe_id && ! in_array('batch', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
    @@ -156,8 +155,6 @@ if ($object->id)
         $permission = ( $user->rights->produit->creer );
         $param = '&id=' . $object->id;
         include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
    -
     }
     else
     {
    diff --git a/htdocs/product/stock/productlot_list.php b/htdocs/product/stock/productlot_list.php
    index 479c5a0c15c..6de8be264a9 100644
    --- a/htdocs/product/stock/productlot_list.php
    +++ b/htdocs/product/stock/productlot_list.php
    @@ -79,7 +79,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('product_lot');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -398,14 +398,12 @@ if ($resql)
     	$productlot = new Productlot($db);
     
     	$i=0;
    -	$var=true;
     	$totalarray=array();
     	while ($i < min($num, $limit))
     	{
     		$obj = $db->fetch_object($resql);
     		if ($obj)
     		{
    -			$var = !$var;
     
     			$productlot->id = $obj->rowid;
     			$productlot->batch = $obj->batch;
    @@ -556,7 +554,6 @@ else
     	dol_print_error($db);
     }
     
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php
    index 3bc2bcdd85c..5ffd668680f 100644
    --- a/htdocs/product/stock/replenish.php
    +++ b/htdocs/product/stock/replenish.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2013		Cédric Salvador		<csalvador@gpcsolutions.fr>
    - * Copyright (C) 2013-2016	Laurent Destaileur	<ely@users.sourceforge.net>
    - * Copyright (C) 2014		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2013-2018	Laurent Destaileur	<ely@users.sourceforge.net>
    + * Copyright (C) 2014		Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2016		Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2016		ATM Consulting		<support@atm-consulting.fr>
      *
    @@ -42,6 +42,9 @@ if ($user->societe_id) {
     }
     $result=restrictedArea($user,'produit|service');
     
    +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
    +$hookmanager->initHooks(array('stockreplenishlist'));
    +
     //checks if a product has been ordered
     
     $action = GETPOST('action','alpha');
    @@ -86,6 +89,9 @@ if (! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT)
     $usevirtualstock=0;
     if ($mode == 'virtual') $usevirtualstock=1;
     
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
    +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
     
     /*
      * Actions
    @@ -675,6 +681,11 @@ while ($i < ($limit ? min($num, $limit) : $num))
     	}
     	$i++;
     }
    +
    +$parameters=array('sql'=>$sql);
    +$reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters);    // Note that $action and $object may have been modified by hook
    +print $hookmanager->resPrint;
    +
     print '</table>';
     print '</div>';
     
    diff --git a/htdocs/product/stock/replenishorders.php b/htdocs/product/stock/replenishorders.php
    index 942ca82bc04..a028ab13031 100644
    --- a/htdocs/product/stock/replenishorders.php
    +++ b/htdocs/product/stock/replenishorders.php
    @@ -1,7 +1,8 @@
     <?php
     /*
    - * Copyright (C) 2013	Cédric Salvador	<csalvador@gpcsolutions.fr>
    - * Copyright (C) 2014	Regis Houssin	<regis.houssin@capnetworks.com>
    + * Copyright (C) 2013       Cédric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2014       Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software: you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -195,76 +196,76 @@ if ($resql)
              '<input type="text" class="flat" name="search_ttc" value="' . dol_escape_htmltag($sttc) . '">'.
              '</td>'.
              '<td class="liste_titre">'.
    -         $form->select_date($search_date, 'search_date', 0, 0, 1, '', 1, 0, 1, 0, '').
    +         $form->selectDate($search_date, 'search_date', 0, 0, 1, '', 1, 0, 0, '').
              '</td>'.
              '<td class="liste_titre" align="right">';
    -         $searchpicto=$form->showFilterAndCheckAddButtons(0);
    -         print $searchpicto;
    -         '</td>'.
    -         '</tr>';
    +    $searchpicto = $form->showFilterAndCheckAddButtons(0);
    +    print $searchpicto;
    +    print '</td>';
    +    print '</tr>';
     
    -         print '<tr class="liste_titre">';
    -         print_liste_field_titre(
    -             'Ref',
    -             $_SERVER['PHP_SELF'],
    -             'cf.ref',
    -             '',
    -             $param,
    -             '',
    -             $sortfield,
    -             $sortorder
    -             );
    -         print_liste_field_titre(
    -             'Company',
    -             $_SERVER['PHP_SELF'],
    -             's.nom',
    -             '',
    -             $param,
    -             '',
    -             $sortfield,
    -             $sortorder
    -             );
    -         print_liste_field_titre(
    -             'Author',
    -             $_SERVER['PHP_SELF'],
    -             'u.login',
    -             '',
    -             '',
    -             '',
    -             $sortfield,
    -             $sortorder
    -             );
    -         print_liste_field_titre(
    -             'AmountTTC',
    -             $_SERVER['PHP_SELF'],
    -             'cf.total_ttc',
    -             '',
    -             $param,
    -             '',
    -             $sortfield,
    -             $sortorder
    -             );
    -         print_liste_field_titre(
    -             'OrderCreation',
    -             $_SERVER['PHP_SELF'],
    -             'cf.date_creation',
    -             '',
    -             $param,
    -             '',
    -             $sortfield,
    -             $sortorder
    -             );
    -         print_liste_field_titre(
    -             'Status',
    -             $_SERVER['PHP_SELF'],
    -             'cf.fk_statut',
    -             '',
    -             $param,
    -             'align="right"',
    -             $sortfield,
    -             $sortorder
    -             );
    -         print '</tr>';
    +    print '<tr class="liste_titre">';
    +    print_liste_field_titre(
    +        'Ref',
    +        $_SERVER['PHP_SELF'],
    +        'cf.ref',
    +        '',
    +        $param,
    +        '',
    +        $sortfield,
    +        $sortorder
    +    );
    +    print_liste_field_titre(
    +        'Company',
    +        $_SERVER['PHP_SELF'],
    +        's.nom',
    +        '',
    +        $param,
    +        '',
    +        $sortfield,
    +        $sortorder
    +    );
    +    print_liste_field_titre(
    +        'Author',
    +        $_SERVER['PHP_SELF'],
    +        'u.login',
    +        '',
    +        '',
    +        '',
    +        $sortfield,
    +        $sortorder
    +    );
    +    print_liste_field_titre(
    +        'AmountTTC',
    +        $_SERVER['PHP_SELF'],
    +        'cf.total_ttc',
    +        '',
    +        $param,
    +        '',
    +        $sortfield,
    +        $sortorder
    +    );
    +    print_liste_field_titre(
    +        'OrderCreation',
    +        $_SERVER['PHP_SELF'],
    +        'cf.date_creation',
    +        '',
    +        $param,
    +        '',
    +        $sortfield,
    +        $sortorder
    +    );
    +    print_liste_field_titre(
    +        'Status',
    +        $_SERVER['PHP_SELF'],
    +        'cf.fk_statut',
    +        '',
    +        $param,
    +        'align="right"',
    +        $sortfield,
    +        $sortorder
    +    );
    +    print '</tr>';
     
         $userstatic = new User($db);
     
    @@ -324,8 +325,8 @@ if ($resql)
             }
             $i++;
         }
    -    print '</table>'.
    -         '</form>';
    +    print '</table>';
    +    print '</form>';
     
         $db->free($resql);
     
    @@ -336,6 +337,6 @@ else
     	dol_print_error($db);
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/stock/tpl/stockcorrection.tpl.php b/htdocs/product/stock/tpl/stockcorrection.tpl.php
    index 3d2e1c99e9b..ce947c2003b 100644
    --- a/htdocs/product/stock/tpl/stockcorrection.tpl.php
    +++ b/htdocs/product/stock/tpl/stockcorrection.tpl.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2010-2017 Laurent Destailleur <eldy@users.sourceforge.net>
    +/* Copyright (C) 2010-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -19,8 +20,7 @@
      */
     
     // Protection to avoid direct call of template
    -if (empty($conf) || ! is_object($conf))
    -{
    +if (empty($conf) || ! is_object($conf)) {
     	print "Error, template page can't be called as URL";
     	exit;
     }
    @@ -119,11 +119,11 @@ if (empty($conf) || ! is_object($conf))
     			print '<tr>';
     			print '<td>'.$langs->trans("EatByDate").'</td><td>';
     			$eatbyselected=dol_mktime(0, 0, 0, GETPOST('eatbymonth'), GETPOST('eatbyday'), GETPOST('eatbyyear'));
    -			$form->select_date($eatbyselected,'eatby','','',1,"");
    +			print $form->selectDate($eatbyselected,'eatby','','',1,"");
     			print '</td>';
     			print '<td>'.$langs->trans("SellByDate").'</td><td>';
     			$sellbyselected=dol_mktime(0, 0, 0, GETPOST('sellbymonth'), GETPOST('sellbyday'), GETPOST('sellbyyear'));
    -			$form->select_date($sellbyselected,'sellby','','',1,"");
    +			print $form->selectDate($sellbyselected,'sellby','','',1,"");
     			print '</td>';
     			print '</tr>';
     		}
    diff --git a/htdocs/product/stock/tpl/stocktransfer.tpl.php b/htdocs/product/stock/tpl/stocktransfer.tpl.php
    index 136f0f0702a..370010b07eb 100644
    --- a/htdocs/product/stock/tpl/stocktransfer.tpl.php
    +++ b/htdocs/product/stock/tpl/stocktransfer.tpl.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2010-2017 Laurent Destailleur <eldy@users.sourceforge.net>
    +/* Copyright (C) 2010-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -114,10 +115,10 @@ if (empty($conf) || ! is_object($conf))
     
     			print '<tr>';
     			print '<td>'.$langs->trans("EatByDate").'</td><td>';
    -			print $form->select_date(($d_eatby?$d_eatby:$pdluo->eatby),'eatby','','',1,"", 1, 0, 1, ($pdluoid > 0 ? 1 : 0));		// If form was opened for a specific pdluoid, field is disabled
    +			print $form->selectDate(($d_eatby?$d_eatby:$pdluo->eatby),'eatby','','',1,"", 1, 0, ($pdluoid > 0 ? 1 : 0));		// If form was opened for a specific pdluoid, field is disabled
     			print '</td>';
     			print '<td>'.$langs->trans("SellByDate").'</td><td>';
    -			print $form->select_date(($d_sellby?$d_sellby:$pdluo->sellby),'sellby','','',1,"", 1, 0, 1, ($pdluoid > 0 ? 1 : 0));		// If form was opened for a specific pdluoid, field is disabled
    +			print $form->selectDate(($d_sellby?$d_sellby:$pdluo->sellby),'sellby','','',1,"", 1, 0, ($pdluoid > 0 ? 1 : 0));		// If form was opened for a specific pdluoid, field is disabled
     			print '</td>';
     			print '</tr>';
     		}
    diff --git a/htdocs/product/stock/valo.php b/htdocs/product/stock/valo.php
    index be8ee2d500e..45f96510e38 100644
    --- a/htdocs/product/stock/valo.php
    +++ b/htdocs/product/stock/valo.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -128,7 +128,6 @@ if ($result)
             print '<td align="right">'.price(price2num($totalsell,'MT'),1,$langs,0,0,-1,$conf->currency).'</td>';
             print '<td align="right">&nbsp;</td>';
             print "</tr>\n";
    -
         }
     
         $db->free($result);
    @@ -150,14 +149,12 @@ if ($result)
             $url=DOL_URL_ROOT.'/viewimage.php?modulepart=graph_stock&amp;file='.$file;
             print '<br><img src="'.$url.'">';
         }
    -
     }
     else
     {
         dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/product/traduction.php b/htdocs/product/traduction.php
    index c96e1c0f025..855675be956 100644
    --- a/htdocs/product/traduction.php
    +++ b/htdocs/product/traduction.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2005-2018 Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005-2018 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2010-2012 Destailleur Laurent <eldy@users.sourceforge.net>
      * Copyright (C) 2014 	   Henry Florian <florian.henry@open-concept.pro>
    @@ -276,7 +276,6 @@ if ($action == 'edit')
     	print '</div>';
     
     	print '</form>';
    -
     }
     else if ($action != 'add')
     {
    @@ -354,5 +353,6 @@ if ($action == 'add' && ($user->rights->produit->creer || $user->rights->service
     	print '<br>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/activity/index.php b/htdocs/projet/activity/index.php
    index 92719093650..f5897650740 100644
    --- a/htdocs/projet/activity/index.php
    +++ b/htdocs/projet/activity/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2006-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010      Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,7 +23,7 @@
      *	\brief      Page activite perso du module projet
      */
     
    -require ("../../main.inc.php");
    +require "../../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -325,7 +325,6 @@ if (! empty($conf->global->PROJECT_TASK_TIME_MONTH))
         		print '</td>';
         		print '<td align="right">'.convertSecondToTime($row->nb, 'allhourmin').'</td>';
         		print "</tr>\n";
    -
         	}
         	$db->free($resql);
         }
    @@ -376,7 +375,6 @@ if (! empty($conf->global->PROJECT_TASK_TIME_YEAR))
     			print '</td>';
     			print '<td align="right">'.convertSecondToTime($row->nb, 'allhourmin').'</td>';
     			print "</tr>\n";
    -
     		}
     		$db->free($resql);
     	}
    @@ -570,13 +568,11 @@ if (empty($conf->global->PROJECT_HIDE_TASKS) && ! empty($conf->global->PROJECT_S
     	{
     		dol_print_error($db);
     	}
    -
     }
     
     
     print '</div></div></div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/activity/perday.php b/htdocs/projet/activity/perday.php
    index 26b7179b74c..e291bf84f67 100644
    --- a/htdocs/projet/activity/perday.php
    +++ b/htdocs/projet/activity/perday.php
    @@ -1,8 +1,9 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010      François Legastelois <flegastelois@teclib.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,7 +25,7 @@
      *	\brief      List activities of tasks (per day entry)
      */
     
    -require ("../../main.inc.php");
    +require "../../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -369,7 +370,7 @@ $nav.=dol_print_date(dol_mktime(0,0,0,$month,$day,$year),"%A").' ';
     $nav.=" <span id=\"month_name\">".dol_print_date(dol_mktime(0,0,0,$month,$day,$year),"day")." </span>\n";
     $nav.='<a class="inline-block valignmiddle" href="?year='.$next_year."&amp;month=".$next_month."&amp;day=".$next_day.$param.'">'.img_next($langs->trans("Next"))."</a>\n";
     $nav.=" &nbsp; (<a href=\"?year=".$nowyear."&amp;month=".$nowmonth."&amp;day=".$nowday.$param."\">".$langs->trans("Today")."</a>)";
    -$nav.='<br>'.$form->select_date(-1,'',0,0,2,"addtime",1,0,1).' ';
    +$nav.='<br>'.$form->selectDate(-1, '', 0, 0, 2, "addtime", 1, 0).' ';
     $nav.=' <input type="submit" name="submitdateselect" class="button valignmiddle" value="'.$langs->trans("Refresh").'">';
     
     $picto='calendarweek';
    @@ -713,6 +714,6 @@ if ($conf->use_javascript_ajax)
     	print '</script>';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/activity/perweek.php b/htdocs/projet/activity/perweek.php
    index bf6a95c9e0e..cbf72d05788 100644
    --- a/htdocs/projet/activity/perweek.php
    +++ b/htdocs/projet/activity/perweek.php
    @@ -1,8 +1,9 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010      François Legastelois <flegastelois@teclib.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,7 +25,7 @@
      *	\brief      List activities of tasks (per week entry)
      */
     
    -require ("../../main.inc.php");
    +require "../../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -372,7 +373,7 @@ $nav ='<a class="inline-block valignmiddle" href="?year='.$prev_year."&month=".$
     $nav.=" <span id=\"month_name\">".dol_print_date(dol_mktime(0,0,0,$first_month,$first_day,$first_year),"%Y").", ".$langs->trans("WeekShort")." ".$week." </span>\n";
     $nav.='<a class="inline-block valignmiddle" href="?year='.$next_year."&month=".$next_month."&day=".$next_day.$param.'">'.img_next($langs->trans("Next"))."</a>\n";
     $nav.=" &nbsp; (<a href=\"?year=".$nowyear."&month=".$nowmonth."&day=".$nowday.$param."\">".$langs->trans("Today")."</a>)";
    -$nav.='<br>'.$form->select_date(-1,'',0,0,2,"addtime",1,0,1).' ';
    +$nav.='<br>'.$form->selectDate(-1, '', 0, 0, 2, "addtime", 1, 0).' ';
     $nav.=' <input type="submit" name="submitdateselect" class="button" value="'.$langs->trans("Refresh").'">';
     
     $picto='calendarweek';
    @@ -751,7 +752,6 @@ if ($conf->use_javascript_ajax)
     	print '</script>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/admin/project.php b/htdocs/projet/admin/project.php
    index 80a13582d4d..71755fbdca3 100644
    --- a/htdocs/projet/admin/project.php
    +++ b/htdocs/projet/admin/project.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2014	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2014	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2016	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2011-2015	Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2011-2018	Philippe Grand		<philippe.grand@atoo-net.com>
    @@ -910,5 +910,6 @@ print '</table>';
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/admin/project_extrafields.php b/htdocs/projet/admin/project_extrafields.php
    index d247408079c..00a0853ce19 100644
    --- a/htdocs/projet/admin/project_extrafields.php
    +++ b/htdocs/projet/admin/project_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2015		Juanjo Menent			<jmenent@2byte.es>
      *
    @@ -30,8 +30,7 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     
    -$langs->load("project");
    -$langs->load("admin");
    +$langs->loadLangs(array("project", "admin"));
     
     $extrafields = new ExtraFields($db);
     $form = new Form($db);
    @@ -113,6 +112,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/admin/project_task_extrafields.php b/htdocs/projet/admin/project_task_extrafields.php
    index 32e4af98f89..3a5b3c5749f 100644
    --- a/htdocs/projet/admin/project_task_extrafields.php
    +++ b/htdocs/projet/admin/project_task_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2015		Juanjo Menent			<jmenent@2byte.es>
      *
    @@ -112,6 +112,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/ajax/projects.php b/htdocs/projet/ajax/projects.php
    index f2417df5353..46699ba01dd 100644
    --- a/htdocs/projet/ajax/projects.php
    +++ b/htdocs/projet/ajax/projects.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
    - * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2014-2015 Marcos García       <marcosgdf@gmail.com>
      *
    diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php
    index b92df257dd7..8bf377a9844 100644
    --- a/htdocs/projet/card.php
    +++ b/htdocs/projet/card.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -333,7 +333,6 @@ if (empty($reshook))
     			if (GETPOST('socid','int') > 0) $object->fetch_thirdparty(GETPOST('socid','int'));
     			else unset($object->thirdparty);
     		}
    -
     	}
     
     	// Build doc
    @@ -472,6 +471,17 @@ $help_url="EN:Module_Projects|FR:Module_Projets|ES:M&oacute;dulo_Proyectos";
     
     llxHeader("",$title,$help_url);
     
    +$titleboth=$langs->trans("LeadsOrProjects");
    +$titlenew = $langs->trans("NewLeadOrProject");	// Leads and opportunities by default
    +if ($conf->global->PROJECT_USE_OPPORTUNITIES == 0)
    +{
    +	$titleboth=$langs->trans("Projects");
    +	$titlenew = $langs->trans("NewProject");
    +}
    +if ($conf->global->PROJECT_USE_OPPORTUNITIES == 2) {	// 2 = leads only
    +	$titleboth=$langs->trans("Leads");
    +	$titlenew = $langs->trans("NewLead");
    +}
     
     if ($action == 'create' && $user->rights->projet->creer)
     {
    @@ -482,7 +492,7 @@ if ($action == 'create' && $user->rights->projet->creer)
     	$thirdparty=new Societe($db);
     	if ($socid > 0) $thirdparty->fetch($socid);
     
    -	print load_fiche_titre($langs->trans("NewProject"), '', 'title_project');
    +	print load_fiche_titre($titlenew, '', 'title_project');
     
     	print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
     	print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    @@ -569,12 +579,12 @@ if ($action == 'create' && $user->rights->projet->creer)
     
     	// Date start
     	print '<tr><td>'.$langs->trans("DateStart").'</td><td>';
    -	print $form->select_date(($date_start?$date_start:''),'projectstart',0,0,0,'',1,0,1);
    +	print $form->selectDate(($date_start?$date_start:''), 'projectstart', 0, 0, 0, '', 1, 0);
     	print '</td></tr>';
     
     	// Date end
     	print '<tr><td>'.$langs->trans("DateEnd").'</td><td>';
    -	print $form->select_date(($date_end?$date_end:-1),'projectend',0,0,0,'',1,0,1);
    +	print $form->selectDate(($date_end?$date_end:-1), 'projectend', 0, 0, 0, '', 1, 0);
     	print '</td></tr>';
     
     	if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES))
    @@ -822,7 +832,7 @@ elseif ($object->id > 0)
     
     		// Date start
     		print '<tr><td>'.$langs->trans("DateStart").'</td><td>';
    -		print $form->select_date($object->date_start?$object->date_start:-1,'projectstart',0,0,0,'',1,0,1);
    +		print $form->selectDate($object->date_start?$object->date_start:-1, 'projectstart', 0, 0, 0, '', 1, 0);
     		print ' &nbsp; &nbsp; <input type="checkbox" class="valignmiddle" name="reportdate" value="yes" ';
     		if ($comefromclone){print ' checked ';}
     		print '/> '. $langs->trans("ProjectReportDate");
    @@ -830,7 +840,7 @@ elseif ($object->id > 0)
     
     		// Date end
     		print '<tr><td>'.$langs->trans("DateEnd").'</td><td>';
    -		print $form->select_date($object->date_end?$object->date_end:-1,'projectend',0,0,0,'',1,0,1);
    +		print $form->selectDate($object->date_end?$object->date_end:-1, 'projectend', 0, 0, 0, '', 1, 0);
     		print '</td></tr>';
     
     		// Budget
    @@ -1289,6 +1299,6 @@ else
     	print $langs->trans("RecordNotFound");
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/class/api_projects.class.php b/htdocs/projet/class/api_projects.class.php
    index ab157bf237c..a1f2ce6d26c 100644
    --- a/htdocs/projet/class/api_projects.class.php
    +++ b/htdocs/projet/class/api_projects.class.php
    @@ -98,7 +98,8 @@ class Projects extends DolibarrApi
          * @param string           $sqlfilters          Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')"
          * @return  array                               Array of project objects
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -214,7 +215,8 @@ class Projects extends DolibarrApi
          *
          * @url	GET {id}/tasks
          */
    -    function getLines($id, $includetimespent=0) {
    +    function getLines($id, $includetimespent=0)
    +    {
           if(! DolibarrApiAccess::$user->rights->projet->lire) {
     		  	throw new RestException(401);
     		  }
    @@ -256,7 +258,8 @@ class Projects extends DolibarrApi
          *
          * @return int
          */
    -    function getRoles($id, $userid=0) {
    +    function getRoles($id, $userid=0)
    +    {
             global $db;
     
             if(! DolibarrApiAccess::$user->rights->projet->lire) {
    @@ -300,7 +303,8 @@ class Projects extends DolibarrApi
          * @return int
          */
         /*
    -    function postLine($id, $request_data = null) {
    +    function postLine($id, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->projet->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -362,7 +366,8 @@ class Projects extends DolibarrApi
          * @return object
          */
         /*
    -    function putLine($id, $lineid, $request_data = null) {
    +    function putLine($id, $lineid, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->projet->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -418,7 +423,8 @@ class Projects extends DolibarrApi
          *
          * @return int
          */
    -    function put($id, $request_data = null) {
    +    function put($id, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->projet->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -477,7 +483,6 @@ class Projects extends DolibarrApi
                     'message' => 'Project deleted'
                 )
             );
    -
         }
     
         /**
    @@ -535,7 +540,8 @@ class Projects extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    @@ -592,7 +598,6 @@ class Projects extends DolibarrApi
                 if (!isset($data[$field]))
                     throw new RestException(400, "$field field missing");
                 $object[$field] = $data[$field];
    -
             }
             return $object;
         }
    diff --git a/htdocs/projet/class/api_tasks.class.php b/htdocs/projet/class/api_tasks.class.php
    index 3125546c10a..050e7313e95 100644
    --- a/htdocs/projet/class/api_tasks.class.php
    +++ b/htdocs/projet/class/api_tasks.class.php
    @@ -106,7 +106,8 @@ class Tasks extends DolibarrApi
          * @param string           $sqlfilters          Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')"
          * @return  array                               Array of project objects
          */
    -    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    +    {
             global $db, $conf;
     
             $obj_ret = array();
    @@ -221,7 +222,8 @@ class Tasks extends DolibarrApi
          * @url	GET {id}/tasks
          */
         /*
    -    function getLines($id, $includetimespent=0) {
    +    function getLines($id, $includetimespent=0)
    +    {
           if(! DolibarrApiAccess::$user->rights->projet->lire) {
     		  	throw new RestException(401);
     		  }
    @@ -263,7 +265,8 @@ class Tasks extends DolibarrApi
          *
          * @return int
          */
    -    function getRoles($id, $userid=0) {
    +    function getRoles($id, $userid=0)
    +    {
             global $db;
     
             if(! DolibarrApiAccess::$user->rights->projet->lire) {
    @@ -305,7 +308,8 @@ class Tasks extends DolibarrApi
          * @return int
          */
         /*
    -    function postLine($id, $request_data = null) {
    +    function postLine($id, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->projet->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -367,7 +371,8 @@ class Tasks extends DolibarrApi
          * @return object
          */
         /*
    -    function putLine($id, $lineid, $request_data = null) {
    +    function putLine($id, $lineid, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->projet->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -422,7 +427,8 @@ class Tasks extends DolibarrApi
          *
          * @return int
          */
    -    function put($id, $request_data = null) {
    +    function put($id, $request_data = null)
    +    {
           if(! DolibarrApiAccess::$user->rights->projet->creer) {
     		  	throw new RestException(401);
     		  }
    @@ -481,7 +487,6 @@ class Tasks extends DolibarrApi
                     'message' => 'Task deleted'
                 )
             );
    -
         }
     
     
    @@ -550,7 +555,8 @@ class Tasks extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
             $object = parent::_cleanObjectDatas($object);
     
    @@ -604,7 +610,6 @@ class Tasks extends DolibarrApi
                 if (!isset($data[$field]))
                     throw new RestException(400, "$field field missing");
                 $object[$field] = $data[$field];
    -
             }
             return $object;
         }
    diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php
    index a704c7d641e..6cb54cfb572 100644
    --- a/htdocs/projet/class/project.class.php
    +++ b/htdocs/projet/class/project.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013	   Florian Henry        <florian.henry@open-concept.pro>
      * Copyright (C) 2014-2017 Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2017      Ferran Marcet        <fmarcet@2byte.es>
    @@ -33,11 +33,32 @@ require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php';
     class Project extends CommonObject
     {
     
    -    public $element = 'project';    //!< Id that identify managed objects
    -    public $table_element = 'projet';  //!< Name of table without prefix where object is stored
    -    public $table_element_line = 'projet_task';
    -    public $fk_element = 'fk_projet';
    -    public $ismultientitymanaged = 1;  // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element = 'project';
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element = 'projet';
    +
    +    /**
    +	 * @var int    Name of subtable line
    +	 */
    +	public $table_element_line = 'projet_task';
    +
    +    /**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
    +	public $fk_element = 'fk_projet';
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +    public $ismultientitymanaged = 1;
    +
         public $picto = 'projectpub';
     
         /**
    @@ -45,38 +66,43 @@ class Project extends CommonObject
          */
         protected $table_ref_field = 'ref';
     
    -    var $description;
    +    /**
    +	 * @var string description
    +	 */
    +	public $description;
    +
     	/**
     	 * @var string
     	 * @deprecated
     	 * @see title
     	 */
     	public $titre;
    -    var $title;
    -    var $date_start;
    -    var $date_end;
    -    var $date_close;
     
    -    var $socid;             // To store id of thirdparty
    -    var $thirdparty_name;   // To store name of thirdparty (defined only in some cases)
    +    public $title;
    +    public $date_start;
    +    public $date_end;
    +    public $date_close;
     
    -    var $user_author_id;    //!< Id of project creator. Not defined if shared project.
    -	var $user_close_id;
    -    var $public;      //!< Tell if this is a public or private project
    -    var $budget_amount;
    -    var $bill_time;			// Is the time spent on project must be invoiced or not
    +    public $socid;             // To store id of thirdparty
    +    public $thirdparty_name;   // To store name of thirdparty (defined only in some cases)
     
    -    var $statuts_short;
    -    var $statuts_long;
    +    public $user_author_id;    //!< Id of project creator. Not defined if shared project.
    +	public $user_close_id;
    +    public $public;      //!< Tell if this is a public or private project
    +    public $budget_amount;
    +    public $bill_time;			// Is the time spent on project must be invoiced or not
     
    -    var $statut;			// 0=draft, 1=opened, 2=closed
    -    var $opp_status;		// opportunity status, into table llx_c_lead_status
    -	var $opp_percent;		// opportunity probability
    +    public $statuts_short;
    +    public $statuts_long;
     
    -    var $oldcopy;
    +    public $statut;			// 0=draft, 1=opened, 2=closed
    +    public $opp_status;		// opportunity status, into table llx_c_lead_status
    +	public $opp_percent;		// opportunity probability
     
    -    var $weekWorkLoad;			// Used to store workload details of a projet
    -    var $weekWorkLoadPerTask;	// Used to store workload details of tasks of a projet
    +    public $oldcopy;
    +
    +    public $weekWorkLoad;			// Used to store workload details of a projet
    +    public $weekWorkLoadPerTask;	// Used to store workload details of tasks of a projet
     
     	/**
     	 * @var int Creation date
    @@ -84,16 +110,19 @@ class Project extends CommonObject
     	 * @see date_c
     	 */
     	public $datec;
    +
     	/**
     	 * @var int Creation date
     	 */
     	public $date_c;
    +
     	/**
     	 * @var int Modification date
     	 * @deprecated
     	 * @see date_m
     	 */
     	public $datem;
    +
     	/**
     	 * @var int Modification date
     	 */
    @@ -108,10 +137,12 @@ class Project extends CommonObject
     	 * Draft status
     	 */
     	const STATUS_DRAFT = 0;
    +
     	/**
     	 * Open/Validated status
     	 */
     	const STATUS_VALIDATED = 1;
    +
     	/**
     	 * Closed status
     	 */
    @@ -148,6 +179,10 @@ class Project extends CommonObject
     
             $now=dol_now();
     
    +        // Clean parameters
    +        $this->note_private = dol_substr($this->note_private, 0, 65535);
    +        $this->note_public = dol_substr($this->note_public, 0, 65535);
    +
             // Check parameters
             if (!trim($this->ref))
             {
    @@ -162,6 +197,7 @@ class Project extends CommonObject
                 return -1;
             }
     
    +        // Create project
             $this->db->begin();
     
             $sql = "INSERT INTO " . MAIN_DB_PREFIX . "projet (";
    @@ -180,6 +216,8 @@ class Project extends CommonObject
             $sql.= ", opp_amount";
             $sql.= ", budget_amount";
             $sql.= ", bill_time";
    +        $sql.= ", note_private";
    +        $sql.= ", note_public";
             $sql.= ", entity";
             $sql.= ") VALUES (";
             $sql.= "'" . $this->db->escape($this->ref) . "'";
    @@ -197,6 +235,8 @@ class Project extends CommonObject
             $sql.= ", " . (strcmp($this->opp_amount,'') ? price2num($this->opp_amount) : 'null');
             $sql.= ", " . (strcmp($this->budget_amount,'') ? price2num($this->budget_amount) : 'null');
             $sql.= ", " . ($this->bill_time ? 1 : 0);
    +        $sql.= ", ".($this->note_private ? "'".$this->db->escape($this->note_private)."'" : 'null');
    +        $sql.= ", ".($this->note_public ? "'".$this->db->escape($this->note_public)."'" : 'null');
             $sql.= ", ".$conf->entity;
             $sql.= ")";
     
    @@ -468,6 +508,7 @@ class Project extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Return list of projects
          *
    @@ -476,6 +517,7 @@ class Project extends CommonObject
          */
         function liste_array($socid='')
         {
    +        // phpcs:enable
             global $conf;
     
             $projects = array();
    @@ -509,6 +551,7 @@ class Project extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Return list of elements for type, linked to a project
          *
    @@ -517,10 +560,12 @@ class Project extends CommonObject
          * 	@param		string		$datefieldname	name of date field for filter
          *  @param		int			$dates			Start date
          *  @param		int			$datee			End date
    +	 *	@param		string		$projectkey		Equivalent key  to fk_projet for actual type
          * 	@return		mixed						Array list of object ids linked to project, < 0 or string if error
          */
    -    function get_element_list($type, $tablename, $datefieldname='', $dates='', $datee='')
    +    function get_element_list($type, $tablename, $datefieldname='', $dates='', $datee='', $projectkey='fk_projet')
         {
    +        // phpcs:enable
             $elements = array();
     
             if ($this->id <= 0) return $elements;
    @@ -529,11 +574,11 @@ class Project extends CommonObject
     
     		if ($type == 'agenda')
             {
    -        	$sql = "SELECT id as rowid FROM " . MAIN_DB_PREFIX . "actioncomm WHERE fk_project IN (". $ids .")";
    +        	$sql = "SELECT id as rowid FROM " . MAIN_DB_PREFIX . "actioncomm WHERE fk_project IN (". $ids .") AND entity IN (".getEntity('agenda').")";
             }
             elseif ($type == 'expensereport')
     		{
    -            $sql = "SELECT ed.rowid FROM " . MAIN_DB_PREFIX . "expensereport as e, " . MAIN_DB_PREFIX . "expensereport_det as ed WHERE e.rowid = ed.fk_expensereport AND ed.fk_projet IN (". $ids .")";
    +            $sql = "SELECT ed.rowid FROM " . MAIN_DB_PREFIX . "expensereport as e, " . MAIN_DB_PREFIX . "expensereport_det as ed WHERE e.rowid = ed.fk_expensereport AND e.entity IN (".getEntity('expensereport').") AND ed.fk_projet IN (". $ids .")";
     		}
             elseif ($type == 'project_task')
     		{
    @@ -545,11 +590,11 @@ class Project extends CommonObject
     		}
     		elseif ($type == 'stock_mouvement')
     		{
    -			$sql = 'SELECT ms.rowid, ms.fk_user_author as fk_user FROM ' . MAIN_DB_PREFIX . "stock_mouvement as ms WHERE ms.origintype = 'project' AND ms.fk_origin  IN (". $ids .") AND ms.type_mouvement = 1";
    +			$sql = 'SELECT ms.rowid, ms.fk_user_author as fk_user FROM ' . MAIN_DB_PREFIX . "stock_mouvement as ms, " . MAIN_DB_PREFIX . "entrepot as e WHERE e.rowid = ms.fk_entrepot AND e.entity IN (".getEntity('stock').") AND ms.origintype = 'project' AND ms.fk_origin IN (". $ids .") AND ms.type_mouvement = 1";
     		}
             else
     		{
    -            $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . $tablename." WHERE fk_projet IN (". $ids .")";
    +            $sql = "SELECT rowid FROM " . MAIN_DB_PREFIX . $tablename." WHERE ".$projectkey." IN (". $ids .") AND entity IN (".getEntity($type).")";
     		}
     
     		if ($dates > 0)
    @@ -626,9 +671,10 @@ class Project extends CommonObject
     
             // Set fk_projet into elements to null
             $listoftables=array(
    -        		'facture'=>'fk_projet','propal'=>'fk_projet','commande'=>'fk_projet',
    -                'facture_fourn'=>'fk_projet','commande_fournisseur'=>'fk_projet','supplier_proposal'=>'fk_projet',
    -        		'expensereport_det'=>'fk_projet','contrat'=>'fk_projet','fichinter'=>'fk_projet','don'=>'fk_projet'
    +        		'propal'=>'fk_projet', 'commande'=>'fk_projet', 'facture'=>'fk_projet',
    +        		'supplier_proposal'=>'fk_projet', 'commande_fournisseur'=>'fk_projet', 'facture_fourn'=>'fk_projet',
    +        		'expensereport_det'=>'fk_projet', 'contrat'=>'fk_projet', 'fichinter'=>'fk_projet', 'don'=>'fk_projet',
    +        		'actioncomm'=>'fk_project'
             		);
             foreach($listoftables as $key => $value)
             {
    @@ -723,10 +769,10 @@ class Project extends CommonObject
                 return -1;
             }
         }
    -    
    +
         /**
          * 		Delete tasks with no children first, then task with children recursively
    -     *  
    +     *
          *  	@param     	User		$user		User
          *		@return		int				<0 if KO, 1 if OK
          */
    @@ -754,7 +800,7 @@ class Project extends CommonObject
             {
                 if (count($this->lines)) $this->deleteTasks($this->lines);
             }
    -        
    +
             return 1;
         }
     
    @@ -896,6 +942,7 @@ class Project extends CommonObject
             return $this->LibStatut($this->statut, $mode);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Renvoi status label for a status
          *
    @@ -905,6 +952,7 @@ class Project extends CommonObject
          */
         function LibStatut($statut, $mode=0)
         {
    +        // phpcs:enable
             global $langs;
     
             if ($mode == 0)
    @@ -1462,7 +1510,6 @@ class Project extends CommonObject
     							$tab_conv_child_parent[$tasktoclone->id] =  $new_task_id;
     						}
     				    }
    -
     			    }
     
     			    //Parse all clone node to be sure to update new parent
    @@ -1568,15 +1615,17 @@ class Project extends CommonObject
     	}
     
     
    -	 /**
    -	  *    Associate element to a project
    -	  *
    -	  *    @param	string	$tableName			Table of the element to update
    -	  *    @param	int		$elementSelectId	Key-rowid of the line of the element to update
    -	  *    @return	int							1 if OK or < 0 if KO
    -	  */
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
    +	/**
    +	 *    Associate element to a project
    +	 *
    +	 *    @param	string	$tableName			Table of the element to update
    +	 *    @param	int		$elementSelectId	Key-rowid of the line of the element to update
    +	 *    @return	int							1 if OK or < 0 if KO
    +     */
     	function update_element($tableName, $elementSelectId)
     	{
    +        // phpcs:enable
     		$sql="UPDATE ".MAIN_DB_PREFIX.$tableName;
     
     		if ($tableName == "actioncomm")
    @@ -1598,9 +1647,9 @@ class Project extends CommonObject
     		}else {
     			return 1;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Associate element to a project
     	 *
    @@ -1610,6 +1659,7 @@ class Project extends CommonObject
     	 */
     	function remove_element($tableName, $elementSelectId)
     	{
    +        // phpcs:enable
     		$sql="UPDATE ".MAIN_DB_PREFIX.$tableName;
     
     		if ($TableName=="actioncomm")
    @@ -1631,7 +1681,6 @@ class Project extends CommonObject
     		}else {
     			return 1;
     		}
    -
     	}
     
     	/**
    @@ -1732,6 +1781,7 @@ class Project extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Load indicators for dashboard (this->nbtodo and this->nbtodolate)
          *
    @@ -1740,6 +1790,7 @@ class Project extends CommonObject
          */
         function load_board($user)
         {
    +        // phpcs:enable
             global $conf, $langs;
     
             // For external user, no check is done on company because readability is managed by public status of project and assignement.
    @@ -1816,6 +1867,7 @@ class Project extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Charge indicateurs this->nb pour le tableau de bord
     	 *
    @@ -1823,6 +1875,7 @@ class Project extends CommonObject
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     	    global $user;
     
     	    $this->nb=array();
    @@ -1914,7 +1967,6 @@ class Project extends CommonObject
     	        }
     
     	        $this->db->free($result);
    -
     	    }
     	    else
     	    {
    @@ -1930,6 +1982,7 @@ class Project extends CommonObject
     	 * Existing categories are left untouch.
     	 *
     	 * @param int[]|int $categories Category or categories IDs
    +     * @return void
     	 */
     	public function setCategories($categories)
     	{
    @@ -1996,6 +2049,4 @@ class Project extends CommonObject
     
     	    $this->lines = $taskstatic->getTasksArray(0, $user, $this->id, 0, 0);
     	}
    -
     }
    -
    diff --git a/htdocs/projet/class/projectstats.class.php b/htdocs/projet/class/projectstats.class.php
    index 22793fd844e..ae30ac43dae 100644
    --- a/htdocs/projet/class/projectstats.class.php
    +++ b/htdocs/projet/class/projectstats.class.php
    @@ -29,7 +29,12 @@ class ProjectStats extends Stats
     	public $socid;
     	public $year;
     
    -	function __construct($db)
    +    /**
    +     * Constructor
    +     *
    +     * @param   DoliDB $db     Database handler
    +     */
    +    function __construct($db)
     	{
     		global $conf, $user;
     
    @@ -172,7 +177,7 @@ class ProjectStats extends Stats
     		if (! empty($this->status))
     			$sqlwhere[] = " t.fk_opp_status IN (" . $this->status . ")";
     
    -		if (! $user->rights->projet->all->lire) $sqlwhere[] = " AND p.rowid IN (".$projectsListId.")";     // public and assigned to, or restricted to company for external users
    +		if (! $user->rights->projet->all->lire) $sqlwhere[] = " t.rowid IN (".$projectsListId.")";     // public and assigned to, or restricted to company for external users
     
     		if (count($sqlwhere) > 0) {
     			$sqlwhere_str = ' WHERE ' . implode(' AND ', $sqlwhere);
    @@ -493,7 +498,6 @@ class ProjectStats extends Stats
     			} else {
     				$res[$key]=array($total_row[0],0);
     			}
    -
     		}
     		// var_dump($res);print '<br>';
     		return $res;
    diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php
    index a0477461b4e..50c7f0d007f 100644
    --- a/htdocs/projet/class/task.class.php
    +++ b/htdocs/projet/class/task.class.php
    @@ -1,7 +1,8 @@
     <?php
     /* Copyright (C) 2008-2014	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2014       Marcos García       <marcosgdf@gmail.com>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,46 +32,84 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
      */
     class Task extends CommonObject
     {
    -	public $element='project_task';		//!< Id that identify managed objects
    -	public $table_element='projet_task';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='project_task';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='projet_task';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element='fk_task';
    +
     	public $picto = 'task';
     	protected $childtables=array('projet_task_time');    // To test if we can delete object
     
    -	var $fk_task_parent;
    -	var $label;
    -	var $description;
    -	var $duration_effective;		// total of time spent on this task
    -	var $planned_workload;
    -	var $date_c;
    -	var $date_start;
    -	var $date_end;
    -	var $progress;
    -	var $fk_statut;
    -	var $priority;
    -	var $fk_user_creat;
    -	var $fk_user_valid;
    -	var $rang;
    +	/**
    +     * @var int ID parent task
    +     */
    +    public $fk_task_parent;
     
    -	var $timespent_min_date;
    -	var $timespent_max_date;
    -	var $timespent_total_duration;
    -	var $timespent_total_amount;
    -	var $timespent_nblinesnull;
    -	var $timespent_nblines;
    +    /**
    +     * @var string Label of task
    +     */
    +    public $label;
    +
    +	/**
    +	 * @var string description
    +	 */
    +	public $description;
    +
    +	public $duration_effective;		// total of time spent on this task
    +	public $planned_workload;
    +	public $date_c;
    +	public $date_start;
    +	public $date_end;
    +	public $progress;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_statut;
    +
    +	public $priority;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_user_valid;
    +
    +	public $rang;
    +
    +	public $timespent_min_date;
    +	public $timespent_max_date;
    +	public $timespent_total_duration;
    +	public $timespent_total_amount;
    +	public $timespent_nblinesnull;
    +	public $timespent_nblines;
     	// For detail of lines of timespent record, there is the property ->lines in common
     
     	// Var used to call method addTimeSpent(). Bad practice.
    -	var $timespent_id;
    -	var $timespent_duration;
    -	var $timespent_old_duration;
    -	var $timespent_date;
    -	var $timespent_datehour;		// More accurate start date (same than timespent_date but includes hours, minutes and seconds)
    -	var $timespent_withhour;		// 1 = we entered also start hours for timesheet line
    -	var $timespent_fk_user;
    -	var $timespent_note;
    +	public $timespent_id;
    +	public $timespent_duration;
    +	public $timespent_old_duration;
    +	public $timespent_date;
    +	public $timespent_datehour;		// More accurate start date (same than timespent_date but includes hours, minutes and seconds)
    +	public $timespent_withhour;		// 1 = we entered also start hours for timesheet line
    +	public $timespent_fk_user;
    +	public $timespent_note;
     
    -	var $comments = array();
    +	public $comments = array();
     
     	public $oldcopy;
     
    @@ -302,7 +341,7 @@ class Task extends CommonObject
     		// Clean parameters
     		if (isset($this->fk_project)) $this->fk_project=trim($this->fk_project);
     		if (isset($this->ref)) $this->ref=trim($this->ref);
    -		if (isset($this->fk_task_parent)) $this->fk_task_parent=trim($this->fk_task_parent);
    +		if (isset($this->fk_task_parent)) $this->fk_task_parent = (int) $this->fk_task_parent;
     		if (isset($this->label)) $this->label=trim($this->label);
     		if (isset($this->description)) $this->description=trim($this->description);
     		if (isset($this->duration_effective)) $this->duration_effective=trim($this->duration_effective);
    @@ -667,12 +706,12 @@ class Task extends CommonObject
     
     		$this->fk_projet='';
     		$this->ref='TK01';
    -		$this->fk_task_parent='';
    +		$this->fk_task_parent=null;
     		$this->label='Specimen task TK01';
     		$this->duration_effective='';
    -		$this->fk_user_creat='';
    +		$this->fk_user_creat=null;
     		$this->progress='25';
    -		$this->fk_statut='';
    +		$this->fk_statut=null;
     		$this->note='This is a specimen task not';
     	}
     
    @@ -1529,7 +1568,6 @@ class Task extends CommonObject
     			{
     				$clone_task->date_end			= $now + $clone_task->date_end - $orign_project_dt_start;
     			}
    -
     		}
     
     		if (!$clone_prog)
    @@ -1698,6 +1736,7 @@ class Task extends CommonObject
     		return $this->LibStatut($this->fk_statut, $mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Return status label for an object
     	 *
    @@ -1707,6 +1746,7 @@ class Task extends CommonObject
     	 */
     	function LibStatut($statut, $mode=0)
     	{
    +        // phpcs:enable
     		// list of Statut of the task
     		$this->statuts[0]='Draft';
     		$this->statuts[1]='ToDo';
    @@ -1725,59 +1765,59 @@ class Task extends CommonObject
     		{
     			return $langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			return $langs->trans($this->statuts_short[$statut]);
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts_short[$statut]);
    -			if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut1').' '.$langs->trans($this->statuts_short[$statut]);
    -			if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut3').' '.$langs->trans($this->statuts_short[$statut]);
    -			if ($statut==3) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]);
    -			if ($statut==4) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]);
    -			if ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]),'statut5').' '.$langs->trans($this->statuts_short[$statut]);
    +			elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut1').' '.$langs->trans($this->statuts_short[$statut]);
    +			elseif ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut3').' '.$langs->trans($this->statuts_short[$statut]);
    +			elseif ($statut==3) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]);
    +			elseif ($statut==4) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts_short[$statut]);
    +			elseif ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]),'statut5').' '.$langs->trans($this->statuts_short[$statut]);
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0');
    -			if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut1');
    -			if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut3');
    -			if ($statut==3) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    -			if ($statut==4) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    -			if ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]),'statut5');
    +			elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut1');
    +			elseif ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut3');
    +			elseif ($statut==3) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    +			elseif ($statut==4) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    +			elseif ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut==0) return img_picto($langs->trans($this->statuts_short[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==3) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==4) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
    -			if ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==1) return img_picto($langs->trans($this->statuts_short[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==2) return img_picto($langs->trans($this->statuts_short[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==3) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==4) return img_picto($langs->trans($this->statuts_short[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
    +			elseif ($statut==5) return img_picto($langs->trans($this->statuts_short[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]);
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			/*if ($statut==0) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut0');
    -			if ($statut==1) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut1');
    -			if ($statut==2) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut3');
    -			if ($statut==3) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    -			if ($statut==4) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    -			if ($statut==5) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut5');
    +			elseif ($statut==1) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut1');
    +			elseif ($statut==2) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut3');
    +			elseif ($statut==3) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    +			elseif ($statut==4) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    +			elseif ($statut==5) return $langs->trans($this->statuts_short[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut5');
     			*/
    -			//return $this->progress.' %';
    +			//else return $this->progress.' %';
     			return '&nbsp;';
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			/*if ($statut==0) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut0');
    -			if ($statut==1) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut1');
    -			if ($statut==2) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut3');
    -			if ($statut==3) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    -			if ($statut==4) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    -			if ($statut==5) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut5');
    +			elseif ($statut==1) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut1');
    +			elseif ($statut==2) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut3');
    +			elseif ($statut==3) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    +			elseif ($statut==4) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut6');
    +			elseif ($statut==5) return $langs->trans($this->statuts[$statut]).' '.img_picto($langs->trans($this->statuts_short[$statut]),'statut5');
     			*/
    -			//return $this->progress.' %';
    +			//else return $this->progress.' %';
     			return '&nbsp;';
     		}
     	}
    @@ -1815,6 +1855,7 @@ class Task extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Load indicators for dashboard (this->nbtodo and this->nbtodolate)
     	 *
    @@ -1823,6 +1864,7 @@ class Task extends CommonObject
     	 */
     	function load_board($user)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		// For external user, no check is done on company because readability is managed by public status of project and assignement.
    @@ -1888,6 +1930,7 @@ class Task extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Charge indicateurs this->nb de tableau de bord
     	 *
    @@ -1895,6 +1938,7 @@ class Task extends CommonObject
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $user;
     
     		$mine=0; $socid=$user->societe_id;
    @@ -1955,4 +1999,4 @@ class Task extends CommonObject
     
     		return ($datetouse > 0 && ($datetouse < ($now - $conf->projet->task->warning_delay)));
     	}
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/projet/class/taskstats.class.php b/htdocs/projet/class/taskstats.class.php
    index 20a3a67d1d3..4164c1427b6 100644
    --- a/htdocs/projet/class/taskstats.class.php
    +++ b/htdocs/projet/class/taskstats.class.php
    @@ -29,10 +29,13 @@ class TaskStats extends Stats
     	public $socid;
     	public $year;
     
    +    /**
    +     * Constructor of the class
    +     *
    +     * @param   DoliDb  $db     Database handler
    +     */
     	function __construct($db)
     	{
    -		global $conf, $user;
    -
     		$this->db = $db;
     
     		require_once 'task.class.php';
    diff --git a/htdocs/projet/comment.php b/htdocs/projet/comment.php
    index 3dfd0bb3ca4..4d13161042d 100644
    --- a/htdocs/projet/comment.php
    +++ b/htdocs/projet/comment.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -184,6 +184,6 @@ print '<br>';
     // Include comment tpl view
     include DOL_DOCUMENT_ROOT . '/core/tpl/bloc_comment.tpl.php';
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/contact.php b/htdocs/projet/contact.php
    index 2f4ee0fba06..cd2e722ecd3 100644
    --- a/htdocs/projet/contact.php
    +++ b/htdocs/projet/contact.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010      Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010      Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2012-2015 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -240,6 +240,14 @@ if ($id > 0 || ! empty($ref))
         print nl2br($object->description);
         print '</td></tr>';
     
    +    // Bill time
    +    if (! empty($conf->global->PROJECT_BILL_TIME_SPENT))
    +    {
    +    	print '<tr><td>'.$langs->trans("BillTime").'</td><td>';
    +    	print yn($object->bill_time);
    +    	print '</td></tr>';
    +    }
    +
         // Categories
         if ($conf->categorie->enabled) {
             print '<tr><td valign="middle">'.$langs->trans("Categories").'</td><td>';
    @@ -268,6 +276,6 @@ if ($id > 0 || ! empty($ref))
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php
    index 9ac1b74f604..47188547d8d 100644
    --- a/htdocs/projet/document.php
    +++ b/htdocs/projet/document.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2013 Cédric Salvador      <csalvador@gpcsolutions.fr>
      *
    @@ -152,13 +152,12 @@ if ($object->id > 0)
     	$permission = ($userWrite > 0);
     	$permtoedit = ($userWrite > 0);
     	include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
     }
     else
     {
     	dol_print_error('','NoRecordFound');
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php
    index 3f611e5525e..5494c893b2a 100644
    --- a/htdocs/projet/element.php
    +++ b/htdocs/projet/element.php
    @@ -1,9 +1,9 @@
     <?php
     /* Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012-2016 Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2015-2017 Alexandre Spangaro	<aspangaro@zendsi.com>
    + * Copyright (C) 2015-2018 Alexandre Spangaro   <aspangaro@zendsi.com>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2016      Josep Lluís Amador   <joseplluis@lliuretic.cat>
      *
    @@ -43,7 +43,7 @@ if (! empty($conf->fournisseur->enabled))	require_once DOL_DOCUMENT_ROOT.'/fourn
     if (! empty($conf->fournisseur->enabled))	require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
     if (! empty($conf->contrat->enabled))		require_once DOL_DOCUMENT_ROOT.'/contrat/class/contrat.class.php';
     if (! empty($conf->ficheinter->enabled))	require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
    -if (! empty($conf->expedition->enabled))    require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php';
    +if (! empty($conf->expedition->enabled))	require_once DOL_DOCUMENT_ROOT.'/expedition/class/expedition.class.php';
     if (! empty($conf->deplacement->enabled))	require_once DOL_DOCUMENT_ROOT.'/compta/deplacement/class/deplacement.class.php';
     if (! empty($conf->expensereport->enabled))	require_once DOL_DOCUMENT_ROOT.'/expensereport/class/expensereport.class.php';
     if (! empty($conf->agenda->enabled))		require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
    @@ -52,17 +52,19 @@ if (! empty($conf->loan->enabled))			require_once DOL_DOCUMENT_ROOT.'/loan/class
     if (! empty($conf->stock->enabled))			require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php';
     if (! empty($conf->tax->enabled))			require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php';
     if (! empty($conf->banque->enabled))		require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php';
    +if (! empty($conf->salaries->enabled))		require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array('projects', 'companies', 'suppliers', 'compta'));
    -if (! empty($conf->facture->enabled))  	    $langs->load("bills");
    -if (! empty($conf->commande->enabled)) 	    $langs->load("orders");
    -if (! empty($conf->propal->enabled))   	    $langs->load("propal");
    +if (! empty($conf->facture->enabled))		$langs->load("bills");
    +if (! empty($conf->commande->enabled))		$langs->load("orders");
    +if (! empty($conf->propal->enabled))		$langs->load("propal");
     if (! empty($conf->ficheinter->enabled))	$langs->load("interventions");
     if (! empty($conf->deplacement->enabled))	$langs->load("trips");
     if (! empty($conf->expensereport->enabled)) $langs->load("trips");
     if (! empty($conf->don->enabled))			$langs->load("donations");
     if (! empty($conf->loan->enabled))			$langs->load("loan");
    +if (! empty($conf->salaries->enabled))		$langs->load("salaries");
     
     $id=GETPOST('id','int');
     $ref=GETPOST('ref','alpha');
    @@ -215,6 +217,14 @@ print '<td class="titlefield tdtop">'.$langs->trans("Description").'</td><td>';
     print nl2br($object->description);
     print '</td></tr>';
     
    +// Bill time
    +if (! empty($conf->global->PROJECT_BILL_TIME_SPENT))
    +{
    +	print '<tr><td>'.$langs->trans("BillTime").'</td><td>';
    +	print yn($object->bill_time);
    +	print '</td></tr>';
    +}
    +
     // Categories
     if($conf->categorie->enabled) {
         print '<tr><td valign="middle">'.$langs->trans("Categories").'</td><td>';
    @@ -439,6 +449,19 @@ $listofreferent=array(
     	'datefieldname'=>'datem',
     	'disableamount'=>0,
     	'test'=>($conf->stock->enabled && $user->rights->stock->mouvement->lire && ! empty($conf->global->STOCK_MOVEMENT_INTO_PROJECT_OVERVIEW))),
    +'salaries'=>array(
    +	'name'=>"Salaries",
    +	'title'=>"ListSalariesAssociatedProject",
    +	'class'=>'PaymentSalary',
    +	'table'=>'payment_salary',
    +	'datefieldname'=>'datev',
    +	'margin'=>'minus',
    +	'disableamount'=>0,
    +	'urlnew'=>DOL_URL_ROOT.'/compta/salaries/card.php?action=create&projectid='.$id,
    +	'lang'=>'salaries',
    +	'buttonnew'=>'AddSalaryPayment',
    +	'testnew'=>$user->rights->salaries->write,
    +	'test'=>$conf->salaries->enabled && $user->rights->salaries->read),
     'variouspayment'=>array(
     	'name'=>"VariousPayments",
     	'title'=>"ListVariousPaymentsAssociatedProject",
    @@ -474,7 +497,6 @@ $resHook = $hookmanager->executeHooks('completeListOfReferent', $parameters, $ob
     if(!empty($hookmanager->resArray)) {
     
     	$listofreferent = array_merge($listofreferent, $hookmanager->resArray);
    -
     }
     
     if ($action=="addelement")
    @@ -514,10 +536,10 @@ if (! $showdatefilter)
     	print '<input type="hidden" name="action" value="view">';
     	print '<table class="center"><tr>';
     	print '<td>'.$langs->trans("From").' ';
    -	print $form->select_date($dates,'dates',0,0,1,'',1,0,1);
    +	print $form->selectDate($dates, 'dates', 0, 0, 1, '', 1, 0);
     	print '</td>';
     	print '<td>'.$langs->trans("to").' ';
    -	print $form->select_date($datee,'datee',0,0,1,'',1,0,1);
    +	print $form->selectDate($datee, 'datee', 0, 0, 1, '', 1, 0);
     	print '</td>';
     	print '<td>';
     	print '<input type="submit" name="refresh" value="'.$langs->trans("Refresh").'" class="button">';
    @@ -533,11 +555,8 @@ if (! $showdatefilter)
     
     // Show balance for whole project
     
    -$langs->load("suppliers");
    -$langs->load("bills");
    -$langs->load("orders");
    -$langs->load("proposals");
    -$langs->load("margins");
    +$langs->loadLangs(array("suppliers", "bills", "orders", "proposals", "margins"));
    +
     if (!empty($conf->stock->enabled)) $langs->load('stocks');
     
     print load_fiche_titre($langs->trans("Profit"), '', 'title_accountancy');
    @@ -559,11 +578,12 @@ foreach ($listofreferent as $key => $value)
     	$datefieldname=$value['datefieldname'];
     	$qualified=$value['test'];
     	$margin = $value['margin'];
    +	$project_field = $value['project_field'];
     	if ($qualified && isset($margin))		// If this element must be included into profit calculation ($margin is 'minus' or 'plus')
     	{
     		$element = new $classname($db);
     
    -		$elementarray = $object->get_element_list($key, $tablename, $datefieldname, $dates, $datee);
    +		$elementarray = $object->get_element_list($key, $tablename, $datefieldname, $dates, $datee, !empty($project_field)?$project_field:'fk_projet');
     
     		if (count($elementarray)>0 && is_array($elementarray))
     		{
    @@ -674,8 +694,8 @@ foreach ($listofreferent as $key => $value)
     // and the final balance
     print '<tr class="liste_total">';
     print '<td align="right" colspan=2 >'.$langs->trans("Profit").'</td>';
    -print '<td align="right" >'.price($balance_ht).'</td>';
    -print '<td align="right" >'.price($balance_ttc).'</td>';
    +print '<td align="right" >'.price(price2num($balance_ht, 'MT')).'</td>';
    +print '<td align="right" >'.price(price2num($balance_ttc, 'MT')).'</td>';
     print '</tr>';
     
     print "</table>";
    @@ -698,10 +718,11 @@ foreach ($listofreferent as $key => $value)
     	$urlnew=$value['urlnew'];
     	$buttonnew=$value['buttonnew'];
         $testnew=$value['testnew'];
    +	$project_field=$value['project_field'];
    +
     	$exclude_select_element = array('payment_various');
     	if (!empty($value['exclude_select_element'])) $exclude_select_element[] = $value['exclude_select_element'];
     
    -
     	if ($qualified)
     	{
     		// If we want the project task array to have details of users
    @@ -723,7 +744,7 @@ foreach ($listofreferent as $key => $value)
     
            	if (empty($conf->global->PROJECT_LINK_ON_OVERWIEW_DISABLED) && $idtofilterthirdparty && !in_array($tablename,$exclude_select_element))
            	{
    -			$selectList=$formproject->select_element($tablename, $idtofilterthirdparty, 'minwidth300');
    +			$selectList=$formproject->select_element($tablename, $idtofilterthirdparty, 'minwidth300',-2,!empty($project_field)?$project_field:'fk_projet');
     			if (! $selectList || ($selectList<0))
     			{
     				setEventMessages($formproject->error,$formproject->errors,'errors');
    @@ -774,7 +795,7 @@ foreach ($listofreferent as $key => $value)
     		print '<td>';
     		if (in_array($tablename, array('projet_task')) && $key == 'project_task') print '';		// if $key == 'project_task', we don't want details per user
     		elseif (in_array($tablename, array('payment_various'))) print '';						// if $key == 'payment_various', we don't have any thirdparty
    -		elseif (in_array($tablename, array('expensereport_det','don','projet_task','stock_mouvement'))) print $langs->trans("User");
    +		elseif (in_array($tablename, array('expensereport_det','don','projet_task','stock_mouvement','payment_salary'))) print $langs->trans("User");
     		else print $langs->trans("ThirdParty");
     		print '</td>';
     		// Amount HT
    @@ -791,7 +812,7 @@ foreach ($listofreferent as $key => $value)
     		else print '<td align="right" width="200">'.$langs->trans("Status").'</td>';
     		print '</tr>';
     
    -		$elementarray = $object->get_element_list($key, $tablename, $datefieldname, $dates, $datee);
    +		$elementarray = $object->get_element_list($key, $tablename, $datefieldname, $dates, $datee,!empty($project_field)?$project_field:'fk_projet');
     		if (is_array($elementarray) && count($elementarray)>0)
     		{
     			$total_ht = 0;
    @@ -859,7 +880,9 @@ foreach ($listofreferent as $key => $value)
     				{
     					if (empty($conf->global->PROJECT_DISABLE_UNLINK_FROM_OVERVIEW) || $user->admin)		// PROJECT_DISABLE_UNLINK_FROM_OVERVIEW is empty by defaut, so this test true
     					{
    -						print '<a href="' . $_SERVER["PHP_SELF"] . '?id=' . $projectid . '&action=unlink&tablename=' . $tablename . '&elementselect=' . $element->id . '">' . img_picto($langs->trans('Unlink'), 'editdelete') . '</a>';
    +						print '<a href="' . $_SERVER["PHP_SELF"] . '?id=' . $projectid . '&action=unlink&tablename=' . $tablename . '&elementselect=' . $element->id . '" class="reposition">';
    +						print img_picto($langs->trans('Unlink'), 'unlink');
    +						print '</a>';
     					}
     				}
     				print "</td>\n";
    @@ -872,7 +895,7 @@ foreach ($listofreferent as $key => $value)
     				}
     				else
     				{
    -				    // Show ref with link
    +					// Show ref with link
     					if ($element instanceof Task)
     					{
     						print $element->getNomUrl(1,'withproject','time');
    @@ -882,16 +905,16 @@ foreach ($listofreferent as $key => $value)
     
     					$element_doc = $element->element;
     					$filename=dol_sanitizeFileName($element->ref);
    -					$filedir=$conf->{$element_doc}->dir_output . '/' . dol_sanitizeFileName($element->ref);
    +					$filedir=$conf->{$element_doc}->multidir_output[$element->entity] . '/' . dol_sanitizeFileName($element->ref);
     
     					if ($element_doc === 'order_supplier') {
     						$element_doc='commande_fournisseur';
    -						$filedir = $conf->fournisseur->commande->dir_output.'/'.dol_sanitizeFileName($element->ref);
    +						$filedir = $conf->fournisseur->commande->multidir_output[$element->entity].'/'.dol_sanitizeFileName($element->ref);
     					}
     					else if ($element_doc === 'invoice_supplier') {
     						$element_doc='facture_fournisseur';
     						$filename = get_exdir($element->id,2,0,0,$element,'product').dol_sanitizeFileName($element->ref);
    -						$filedir = $conf->fournisseur->facture->dir_output.'/'.get_exdir($element->id,2,0,0,$element,'invoice_supplier').dol_sanitizeFileName($element->ref);
    +						$filedir = $conf->fournisseur->facture->multidir_output[$element->entity].'/'.get_exdir($element->id,2,0,0,$element,'invoice_supplier').dol_sanitizeFileName($element->ref);
     					}
     
     					print '<div class="inline-block valignmiddle">'.$formfile->getDocumentsLink($element_doc, $filename, $filedir).'</div>';
    @@ -907,6 +930,7 @@ foreach ($listofreferent as $key => $value)
     				$date=''; $total_time_by_line = null;
     				if ($tablename == 'expensereport_det') $date = $element->date;      // No draft status on lines
     				elseif ($tablename == 'stock_mouvement') $date = $element->datem;
    +				elseif ($tablename == 'payment_salary') $date = $element->datev;
     				elseif ($tablename == 'payment_various') $date = $element->datev;
     				elseif ($tablename == 'chargesociales') $date = $element->date_ech;
     				elseif (! empty($element->status) || ! empty($element->statut) || ! empty($element->fk_status))
    @@ -952,6 +976,12 @@ foreach ($listofreferent as $key => $value)
                     	$tmpuser->fetch($expensereport->fk_user_author);
                     	print $tmpuser->getNomUrl(1,'',48);
                     }
    +				else if ($tablename == 'payment_salary')
    +				{
    +					$tmpuser=new User($db);
    +					$tmpuser->fetch($element->fk_user);
    +					print $tmpuser->getNomUrl(1,'',48);
    +				}
     				else if ($tablename == 'don' || $tablename == 'stock_mouvement')
                     {
                     	if ($element->fk_user_author > 0)
    @@ -973,7 +1003,7 @@ foreach ($listofreferent as $key => $value)
     				{
     				    $total_ht_by_line=null;
     				    $othermessage='';
    -					if ($tablename == 'don' || $tablename == 'chargesociales' || $tablename == 'payment_various') $total_ht_by_line=$element->amount;
    +					if ($tablename == 'don' || $tablename == 'chargesociales' || $tablename == 'payment_various' || $tablename == 'payment_salary') $total_ht_by_line=$element->amount;
     					else if($tablename == 'fichinter') $total_ht_by_line=$element->getAmount();
     					elseif ($tablename == 'stock_mouvement') $total_ht_by_line=$element->price*abs($element->qty);
     					elseif (in_array($tablename, array('projet_task')))
    @@ -1014,7 +1044,7 @@ foreach ($listofreferent as $key => $value)
     				if (empty($value['disableamount']))
     				{
     				    $total_ttc_by_line=null;
    -					if ($tablename == 'don' || $tablename == 'chargesociales' || $tablename == 'payment_various') $total_ttc_by_line=$element->amount;
    +					if ($tablename == 'don' || $tablename == 'chargesociales' || $tablename == 'payment_various' || $tablename == 'payment_salary') $total_ttc_by_line=$element->amount;
     					else if($tablename == 'fichinter') $total_ttc_by_line=$element->getAmount();
     					elseif ($tablename == 'stock_mouvement') $total_ttc_by_line=$element->price*abs($element->qty);
     					elseif ($tablename == 'projet_task')
    @@ -1163,10 +1193,8 @@ if ($conf->use_javascript_ajax)
     	print $comboenhancement;
     }
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
     
     
    diff --git a/htdocs/projet/ganttchart.inc.php b/htdocs/projet/ganttchart.inc.php
    index bc85e5bae78..dc76e098b59 100644
    --- a/htdocs/projet/ganttchart.inc.php
    +++ b/htdocs/projet/ganttchart.inc.php
    @@ -271,8 +271,6 @@ function constructGanttLine($tarr, $task, $task_dependencies, $level=0, $project
     
         $s.= "g.AddTaskItem(new JSGantt.TaskItem('".$taskid."', '".dol_escape_js(trim($name))."', '".$start_date."', '".$end_date."', '".$css."', '".$link."', ".$task['task_milestone'].", '".dol_escape_js($resources)."', ".($percent >= 0 ? $percent : 0).", ".$line_is_auto_group.", '".$parent."', 1, '".$dependency."', '".(empty($task["task_is_group"]) ? (($percent >= 0 && $percent != '') ? $percent.'%' : '') : '')."', '".dol_escape_js($note)."', g));";
         echo $s;
    -
    -
     }
     
     /**
    diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php
    index e49eaa2700d..723b96c6b44 100644
    --- a/htdocs/projet/ganttview.php
    +++ b/htdocs/projet/ganttview.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,7 +23,7 @@
      *	\brief      Gantt diagramm of a project
      */
     
    -require ("../main.inc.php");
    +require "../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -365,7 +365,6 @@ else
     	print '<div class="opacitymedium">'.$langs->trans("NoTasks").'</div>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php
    index 906cb3783f1..e613c5642ad 100644
    --- a/htdocs/projet/index.php
    +++ b/htdocs/projet/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -318,7 +318,6 @@ if (! empty($conf->global->PROJECT_SHOW_PROJECT_LIST_ON_PROJECT_AREA))
     
     print '</div></div></div>';
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/info.php b/htdocs/projet/info.php
    index 4c30fd6c451..1f9b35b8420 100644
    --- a/htdocs/projet/info.php
    +++ b/htdocs/projet/info.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -192,6 +192,6 @@ if (!empty($object->id))
         show_actions_done($conf,$langs,$db,$object,null,0,$actioncode, '', $filters, $sortfield, $sortorder);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php
    index 37caf6f4e69..6f3ca7215a7 100644
    --- a/htdocs/projet/list.php
    +++ b/htdocs/projet/list.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Bariley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
      * Copyright (C) 2015 	   Claudio Aschieri     <c.aschieri@19.coop>
      * Copyright (C) 2018 	   Ferran Marcet	    <fmarcet@2byte.es>
    @@ -105,7 +105,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('projet');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -352,6 +352,7 @@ if ($search_opp_status)
     	if (is_numeric($search_opp_status) && $search_opp_status > 0) $sql .= " AND p.fk_opp_status = ".$db->escape($search_opp_status);
     	if ($search_opp_status == 'all') $sql .= " AND p.fk_opp_status IS NOT NULL";
     	if ($search_opp_status == 'openedopp') $sql .= " AND p.fk_opp_status IS NOT NULL AND p.fk_opp_status NOT IN (SELECT rowid FROM ".MAIN_DB_PREFIX."c_lead_status WHERE code IN ('WON','LOST'))";
    +	if ($search_opp_status == 'notopenedopp') $sql .= " AND (p.fk_opp_status IS NULL OR p.fk_opp_status IN (SELECT rowid FROM ".MAIN_DB_PREFIX."c_lead_status WHERE code IN ('WON')))";
     	if ($search_opp_status == 'none') $sql .= " AND p.fk_opp_status IS NULL";
     }
     if ($search_public!='') $sql .= " AND p.public = ".$db->escape($search_public);
    @@ -424,7 +425,7 @@ if ($search_ref != '') 			$param.='&search_ref='.$search_ref;
     if ($search_label != '') 		$param.='&search_label='.$search_label;
     if ($search_societe != '') 		$param.='&search_societe='.$search_societe;
     if ($search_status >= 0) 		$param.='&search_status='.$search_status;
    -if ((is_numeric($search_opp_status) && $search_opp_status >= 0) || in_array($search_opp_status, array('all','openedopp','none'))) 	    $param.='&search_opp_status='.urlencode($search_opp_status);
    +if ((is_numeric($search_opp_status) && $search_opp_status >= 0) || in_array($search_opp_status, array('all','openedopp','notopenedopp','none'))) 	    $param.='&search_opp_status='.urlencode($search_opp_status);
     if ($search_opp_percent != '') 	$param.='&search_opp_percent='.urlencode($search_opp_percent);
     if ($search_public != '') 		$param.='&search_public='.$search_public;
     if ($search_project_user != '')   $param.='&search_project_user='.$search_project_user;
    @@ -538,18 +539,21 @@ print '<div class="div-table-responsive">';
     print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
     
     print '<tr class="liste_titre_filter">';
    +// Project ref
     if (! empty($arrayfields['p.ref']['checked']))
     {
     	print '<td class="liste_titre">';
     	print '<input type="text" class="flat" name="search_ref" value="'.dol_escape_htmltag($search_ref).'" size="6">';
     	print '</td>';
     }
    +// Project label
     if (! empty($arrayfields['p.title']['checked']))
     {
     	print '<td class="liste_titre">';
     	print '<input type="text" class="flat" name="search_label" size="8" value="'.dol_escape_htmltag($search_label).'">';
     	print '</td>';
     }
    +// Third party
     if (! empty($arrayfields['s.nom']['checked']))
     {
     	print '<td class="liste_titre">';
    @@ -592,6 +596,7 @@ if (! empty($arrayfields['p.public']['checked']))
     	print $form->selectarray('search_public',$array,$search_public);
     	print '</td>';
     }
    +// Opp status
     if (! empty($arrayfields['p.fk_opp_status']['checked']))
     {
     	print '<td class="liste_titre nowrap center">';
    @@ -883,7 +888,6 @@ while ($i < min($num,$limit))
     		if (! $i) $totalarray['nbfield']++;
     
     		print "</tr>\n";
    -
     	}
     
     	$i++;
    @@ -919,7 +923,6 @@ print "</table>\n";
     print '</div>';
     print "</form>\n";
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/note.php b/htdocs/projet/note.php
    index 7a7db5141f4..adbd98c37c8 100644
    --- a/htdocs/projet/note.php
    +++ b/htdocs/projet/note.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010 Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -119,6 +119,6 @@ if ($id > 0 || ! empty($ref))
     	dol_fiche_end();
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/stats/index.php b/htdocs/projet/stats/index.php
    index 38e9bc327bc..831917a76f6 100644
    --- a/htdocs/projet/stats/index.php
    +++ b/htdocs/projet/stats/index.php
    @@ -302,6 +302,7 @@ print '</table>';
     print '</form>';
     print '<br><br>';
     
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -348,6 +349,7 @@ foreach ($data_all_year as $val)
     }
     
     print '</table>';
    +print '</div>';
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
     
    @@ -373,6 +375,6 @@ print $stringtoshow;
     print '</div></div></div>';
     print '<div style="clear:both"></div>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php
    index 09e067a57fe..2f06f698b14 100644
    --- a/htdocs/projet/tasks.php
    +++ b/htdocs/projet/tasks.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,7 +23,7 @@
      *	\brief      List all tasks of a project
      */
     
    -require ("../main.inc.php");
    +require "../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -91,13 +91,14 @@ $planned_workload=$planned_workloadhour*3600+$planned_workloadmin*60;
     $userAccess=0;
     
     
    -$parameters=array('id'=>$id);
    -$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
    -if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
     /*
      * Actions
      */
     
    +$parameters=array('id'=>$id);
    +$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
    +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +
     // Purge search criteria
     if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers
     {
    @@ -245,7 +246,18 @@ if ($action == 'createtask' && $user->rights->projet->creer)
     			}
     			else
     			{
    -			    setEventMessages($task->error,$task->errors,'errors');
    +				if ($db->lasterrno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
    +				{
    +					$langs->load("projects");
    +					setEventMessages($langs->trans('NewTaskRefSuggested'),'', 'warnings');
    +					$duplicate_code_error = true;
    +				}
    +				else
    +				{
    +					setEventMessages($task->error,$task->errors,'errors');
    +				}
    +				$action = 'create';
    +				$error++;
     			}
     		}
     
    @@ -404,6 +416,14 @@ if ($id > 0 || ! empty($ref))
         print nl2br($object->description);
         print '</td></tr>';
     
    +    // Bill time
    +    if (! empty($conf->global->PROJECT_BILL_TIME_SPENT))
    +    {
    +    	print '<tr><td>'.$langs->trans("BillTime").'</td><td>';
    +    	print yn($object->bill_time);
    +    	print '</td></tr>';
    +    }
    +
         // Categories
         if($conf->categorie->enabled) {
             print '<tr><td valign="middle">'.$langs->trans("Categories").'</td><td>';
    @@ -453,7 +473,14 @@ if ($action == 'create' && $user->rights->projet->creer && (empty($object->third
     
     	// Ref
     	print '<tr><td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans("Ref").'</span></td><td>';
    -	print ($_POST["ref"]?$_POST["ref"]:$defaultref);
    +	if (empty($duplicate_code_error))
    +	{
    +		print (GETPOSTISSET("ref")?GETPOST("ref",'alpha'):$defaultref);
    +	}
    +	else
    +	{
    +		print $defaultref;
    +	}
     	print '<input type="hidden" name="taskref" value="'.($_POST["ref"]?$_POST["ref"]:$defaultref).'">';
     	print '</td></tr>';
     
    @@ -480,12 +507,12 @@ if ($action == 'create' && $user->rights->projet->creer && (empty($object->third
     
     	// Date start
     	print '<tr><td>'.$langs->trans("DateStart").'</td><td>';
    -	print $form->select_date(($date_start?$date_start:''),'dateo',1,1,0,'',1,1,1);
    +	print $form->selectDate(($date_start?$date_start:''), 'dateo', 1, 1, 0, '', 1, 1);
     	print '</td></tr>';
     
     	// Date end
     	print '<tr><td>'.$langs->trans("DateEnd").'</td><td>';
    -	print $form->select_date(($date_end?$date_end:-1),'datee',-1,1,0,'',1,1,1);
    +	print $form->selectDate(($date_end?$date_end:-1),'datee', -1, 1, 0, '', 1, 1);
     	print '</td></tr>';
     
     	// Planned workload
    @@ -525,7 +552,6 @@ if ($action == 'create' && $user->rights->projet->creer && (empty($object->third
     	print '</div>';
     
     	print '</form>';
    -
     }
     else if ($id > 0 || ! empty($ref))
     {
    @@ -726,6 +752,6 @@ else if ($id > 0 || ! empty($ref))
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/tasks/comment.php b/htdocs/projet/tasks/comment.php
    index cb4888f6335..9bdb1c2cec0 100644
    --- a/htdocs/projet/tasks/comment.php
    +++ b/htdocs/projet/tasks/comment.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,7 +23,7 @@
      *	\brief      Page of a project task
      */
     
    -require ("../../main.inc.php");
    +require "../../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -275,10 +275,9 @@ if ($id > 0 || ! empty($ref))
     
     		// Include comment tpl view
     		include DOL_DOCUMENT_ROOT . '/core/tpl/bloc_comment.tpl.php';
    -
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php
    index 21cd32f4514..82c722f2485 100644
    --- a/htdocs/projet/tasks/contact.php
    +++ b/htdocs/projet/tasks/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,7 +23,7 @@
      *	\brief      Actors of a task
      */
     
    -require ("../../main.inc.php");
    +require "../../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
    @@ -354,8 +354,6 @@ if ($id > 0 || ! empty($ref))
     			print '<td colspan="3">&nbsp;</td>';
     			print "</tr>\n";
     
    -			$var = false;
    -
     			print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="POST">';
     			print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     			print '<input type="hidden" name="action" value="addcontact">';
    @@ -438,7 +436,6 @@ if ($id > 0 || ! empty($ref))
     		print "</tr>\n";
     
     		$companystatic = new Societe($db);
    -		$var = true;
     
     		foreach(array('internal','external') as $source)
     		{
    @@ -448,9 +445,7 @@ if ($id > 0 || ! empty($ref))
     			$i = 0;
     			while ($i < $num)
     			{
    -				$var = !$var;
    -
    -				print '<tr '.$bc[$var].' valign="top">';
    +				print '<tr class="oddeven" valign="top">';
     
     				// Source
     				print '<td align="left">';
    @@ -523,7 +518,6 @@ if ($id > 0 || ! empty($ref))
     			}
     		}
     		print "</table>";
    -
     	}
     	else
     	{
    @@ -538,7 +532,6 @@ if (is_object($hookmanager))
     	$reshook=$hookmanager->executeHooks('formContactTpl',$parameters,$object,$action);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/tasks/document.php b/htdocs/projet/tasks/document.php
    index d1e11a196d2..b8ff9a175ab 100644
    --- a/htdocs/projet/tasks/document.php
    +++ b/htdocs/projet/tasks/document.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2012      Florian Henry        <florian.henry@open-concept.pro>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
    @@ -294,7 +294,6 @@ else
     	exit;
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php
    index 14703f6d3eb..93ff5fab7a8 100644
    --- a/htdocs/projet/tasks/list.php
    +++ b/htdocs/projet/tasks/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2006-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2010 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2010 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2018	   Ferran Marcet        <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -24,7 +24,7 @@
      *	\brief      List all task of a project
      */
     
    -require ("../../main.inc.php");
    +require "../../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -79,7 +79,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('projet_task');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Security check
     $socid=0;
    @@ -841,5 +841,6 @@ print '</div>';
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/tasks/note.php b/htdocs/projet/tasks/note.php
    index 568114ca3b4..b19d3ed5b0a 100644
    --- a/htdocs/projet/tasks/note.php
    +++ b/htdocs/projet/tasks/note.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -21,7 +21,7 @@
      *	\brief      Page to show information on a task
      */
     
    -require ("../../main.inc.php");
    +require "../../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -249,6 +249,6 @@ if ($object->id > 0)
     	dol_fiche_end();
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/tasks/stats/index.php b/htdocs/projet/tasks/stats/index.php
    index fa9ebcf3b52..020a7969a64 100644
    --- a/htdocs/projet/tasks/stats/index.php
    +++ b/htdocs/projet/tasks/stats/index.php
    @@ -167,6 +167,8 @@ print '</table>';
     print '</form>';
     print '<br><br>';
     
    +
    +print '<div class="div-table-responsive-no-min">';
     print '<table class="noborder" width="100%">';
     print '<tr class="liste_titre" height="24">';
     print '<td align="center">'.$langs->trans("Year").'</td>';
    @@ -195,6 +197,7 @@ foreach ($data_all_year as $val)
     }
     
     print '</table>';
    +print '</div>';
     
     print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
     
    @@ -212,6 +215,6 @@ print $stringtoshow;
     print '</div></div></div>';
     print '<div style="clear:both"></div>';
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php
    index 706d0f640de..73ce4a562e4 100644
    --- a/htdocs/projet/tasks/task.php
    +++ b/htdocs/projet/tasks/task.php
    @@ -1,7 +1,8 @@
     <?php
     /* Copyright (C) 2005		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@inodbox.com>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,7 +24,7 @@
      *	\brief      Page of a project task
      */
     
    -require ("../../main.inc.php");
    +require "../../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
    @@ -390,12 +391,12 @@ if ($id > 0 || ! empty($ref))
     
     			// Date start
     			print '<tr><td>'.$langs->trans("DateStart").'</td><td>';
    -			print $form->select_date($object->date_start,'dateo',1,1,0,'',1,0,1);
    +			print $form->selectDate($object->date_start, 'dateo', 1, 1, 0, '', 1, 0);
     			print '</td></tr>';
     
     			// Date end
     			print '<tr><td>'.$langs->trans("DateEnd").'</td><td>';
    -			print $form->select_date($object->date_end?$object->date_end:-1,'datee',1,1,0,'',1,0,1);
    +			print $form->selectDate($object->date_end?$object->date_end:-1, 'datee', 1, 1, 0, '', 1, 0);
     			print '</td></tr>';
     
     			// Planned workload
    @@ -628,6 +629,6 @@ if ($id > 0 || ! empty($ref))
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php
    index ca53c373184..4ac6f8a4621 100644
    --- a/htdocs/projet/tasks/time.php
    +++ b/htdocs/projet/tasks/time.php
    @@ -1,9 +1,10 @@
     <?php
     /* Copyright (C) 2005		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2018	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2018		Ferran Marcet			<fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -160,7 +161,7 @@ if ($action == 'addtimespent' && $user->rights->projet->lire)
     			$object->timespent_note = $_POST["timespent_note"];
     			if (GETPOST('progress', 'int') > 0) $object->progress = GETPOST('progress', 'int');		// If progress is -1 (not defined), we do not change value
     			$object->timespent_duration = $_POST["timespent_durationhour"]*60*60;	// We store duration in seconds
    -			$object->timespent_duration+= $_POST["timespent_durationmin"]*60;		// We store duration in seconds
    +			$object->timespent_duration+= ($_POST["timespent_durationmin"]?$_POST["timespent_durationmin"]:0)*60;   // We store duration in seconds
     	        if (GETPOST("timehour") != '' && GETPOST("timehour") >= 0)	// If hour was entered
     	        {
     				$object->timespent_date = dol_mktime(GETPOST("timehour"),GETPOST("timemin"),0,GETPOST("timemonth"),GETPOST("timeday"),GETPOST("timeyear"));
    @@ -398,8 +399,16 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0)
                 print nl2br($projectstatic->description);
                 print '</td></tr>';
     
    +            // Bill time
    +            if (! empty($conf->global->PROJECT_BILL_TIME_SPENT))
    +            {
    +	            print '<tr><td>'.$langs->trans("BillTime").'</td><td>';
    +	            print yn($projectstatic->bill_time);
    +	            print '</td></tr>';
    +            }
    +
                 // Categories
    -            if($conf->categorie->enabled) {
    +            if ($conf->categorie->enabled) {
                     print '<tr><td valign="middle">'.$langs->trans("Categories").'</td><td>';
                     print $form->showCategories($projectstatic->id,'project',1);
                     print "</td></tr>";
    @@ -580,7 +589,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0)
     			print '<td class="maxwidthonsmartphone">';
     			//$newdate=dol_mktime(12,0,0,$_POST["timemonth"],$_POST["timeday"],$_POST["timeyear"]);
     			$newdate='';
    -			print $form->select_date($newdate, 'time', ($conf->browser->layout == 'phone'?2:1), 1, 2, "timespent_date", 1, 0, 1);
    +			print $form->selectDate($newdate, 'time', ($conf->browser->layout == 'phone'?2:1), 1, 2, "timespent_date", 1, 0);
     			print '</td>';
     
     			// Contributor
    @@ -759,7 +768,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0)
     			print '<td class="maxwidthonsmartphone">';
     			//$newdate=dol_mktime(12,0,0,$_POST["timemonth"],$_POST["timeday"],$_POST["timeyear"]);
     			$newdate='';
    -			print $form->select_date($newdate, 'time', ($conf->browser->layout == 'phone'?2:1), 1, 2, "timespent_date", 1, 0, 1);
    +			print $form->selectDate($newdate, 'time', ($conf->browser->layout == 'phone'?2:1), 1, 2, "timespent_date", 1, 0);
     			print '</td>';
     
     			// Task
    @@ -965,9 +974,9 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0)
         			{
         				if (empty($task_time->task_date_withhour))
         				{
    -    					print $form->select_date(($date2?$date2:$date1),'timeline',3,3,2,"timespent_date",1,0,1);
    +    					print $form->selectDate(($date2?$date2:$date1), 'timeline', 3, 3, 2, "timespent_date", 1, 0);
         				}
    -    				else print $form->select_date(($date2?$date2:$date1),'timeline',1,1,2,"timespent_date",1,0,1);
    +    				else print $form->selectDate(($date2?$date2:$date1), 'timeline', 1, 1, 2, "timespent_date", 1, 0);
         			}
         			else
         			{
    @@ -1089,7 +1098,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0)
                 	if (isset($task_time->total_ht)) print price($valuebilled, 1, $langs, 1, -1, -1, $conf->currency);
                 	print '</td>';
                 	if (! $i) $totalarray['nbfield']++;
    -            	if (! $i) $totalarray['totalvaluefield']=$totalarray['nbfield'];
    +            	if (! $i) $totalarray['totalvaluebilledfield']=$totalarray['nbfield'];
                 	$totalarray['totalvaluebilled'] += $valuebilled;
                 }
     
    @@ -1151,6 +1160,7 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0)
     		        }
     		        elseif ($totalarray['totaldurationfield'] == $i) print '<td align="right">'.convertSecondToTime($totalarray['totalduration'],'allhourmin').'</td>';
     		        elseif ($totalarray['totalvaluefield'] == $i) print '<td align="right">'.price($totalarray['totalvalue']).'</td>';
    +		        elseif ($totalarray['totalvaluebilledfield'] == $i) print '<td align="right">'.price($totalarray['totalvaluebilled']).'</td>';
     		        else print '<td></td>';
     		    }
     		    print '</tr>';
    @@ -1164,6 +1174,6 @@ if (($id > 0 || ! empty($ref)) || $projectidforalltimes > 0)
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/public/agenda/agendaexport.php b/htdocs/public/agenda/agendaexport.php
    index 72f1a6b9242..6e08f06d630 100644
    --- a/htdocs/public/agenda/agendaexport.php
    +++ b/htdocs/public/agenda/agendaexport.php
    @@ -42,13 +42,19 @@ if (! defined('NOCSRFCHECK'))    define("NOCSRFCHECK",1);	// We accept to go on
      *
      * @return	void
      */
    -function llxHeaderVierge() { print '<html><title>Export agenda cal</title><body>'; }
    +function llxHeaderVierge()
    +{
    +    print '<html><title>Export agenda cal</title><body>';
    +}
     /**
      * Footer function
      *
      * @return	void
      */
    -function llxFooterVierge() { print '</body></html>'; }
    +function llxFooterVierge()
    +{
    +    print '</body></html>';
    +}
     
     require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php';
    diff --git a/htdocs/public/cron/cron_run_jobs.php b/htdocs/public/cron/cron_run_jobs.php
    index 4edcbbf14ee..57cde107f24 100644
    --- a/htdocs/public/cron/cron_run_jobs.php
    +++ b/htdocs/public/cron/cron_run_jobs.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2012		Nicolas Villa aka Boyquotes http://informetic.fr
      * Copyright (C) 2013		Florian Henry		<forian.henry@open-cocnept.pro>
      * Copyright (C) 2013-2015	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2017		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2017		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -36,11 +36,7 @@ if (is_numeric($entity)) define("DOLENTITY", $entity);
     
     // librarie core
     // Dolibarr environment
    -$res = @include("../../main.inc.php"); // From htdocs directory
    -if (! $res) {
    -	$res = @include("../../../main.inc.php"); // From "custom" directory
    -}
    -if (! $res) die("Include of master.inc.php fails");
    +require '../../main.inc.php';
     
     // librarie jobs
     dol_include_once("/cron/class/cronjob.class.php");
    @@ -48,12 +44,7 @@ dol_include_once("/cron/class/cronjob.class.php");
     global $langs, $conf;
     
     // Language Management
    -$langs->load("admin");
    -$langs->load("cron");
    -
    -
    -
    -
    +$langs->loadLangs(array("admin", "cron"));
     
     /*
      * View
    @@ -178,7 +169,6 @@ if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0))
     				dol_syslog("cron_run_jobs.php::reprogram_jobs Error".$cronjob->error, LOG_ERR);
     				exit;
     			}
    -
     		}
     	}
     	echo "Result: ".($nbofjobs)." jobs - ".($nbofjobslaunchedok+$nbofjobslaunchedko)." launched = ".$nbofjobslaunchedok." OK + ".$nbofjobslaunchedko." KO";
    diff --git a/htdocs/public/demo/demo.css b/htdocs/public/demo/demo.css
    index c4624f2d943..d137b7be456 100644
    --- a/htdocs/public/demo/demo.css
    +++ b/htdocs/public/demo/demo.css
    @@ -16,19 +16,19 @@ a:hover {
     	border: 1px solid #bbb;
     	border-radius: 8px;
     	-moz-border-radius: 8px;
    -	box-shadow: 2px 2px 8px #BBB; 
    +	box-shadow: 2px 2px 8px #BBB;
     }
     .CTable {
     	padding: 6px;
     	font-weight: normal;
     	color: #444444 !important;
    -	
    +
     	margin: 8px 0px 8px 2px;
    -	
    +
     	/*border: 1px solid #bbb;
     	border-radius: 8px;
     	-moz-border-radius: 8px;*/
    -	
    +
     	background: -webkit-linear-gradient(bottom, rgb(255,255,255) 85%, rgb(255,255,255) 100%);
     }
     .csscolumns {
    @@ -129,4 +129,4 @@ img.demothumb {
             margin-left: 0px;
             margin-right: 0px;
         }
    -}
    \ No newline at end of file
    +}
    diff --git a/htdocs/public/demo/index.php b/htdocs/public/demo/index.php
    index 61919c54b1a..0409e849df0 100644
    --- a/htdocs/public/demo/index.php
    +++ b/htdocs/public/demo/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2006-2013  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2010       Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010       Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -30,9 +30,7 @@ define("NOCSRFCHECK",1);	// We accept to go on this page from external web site.
     require '../../main.inc.php';
     require_once '../../core/lib/functions2.lib.php';
     
    -$langs->load("main");
    -$langs->load("install");
    -$langs->load("other");
    +$langs->loadLangs(array("main", "install", "other"));
     
     $conf->dol_hide_topmenu=GETPOST('dol_hide_topmenu','int');
     $conf->dol_hide_leftmenu=GETPOST('dol_hide_leftmenu','int');
    diff --git a/htdocs/public/donations/donateurs_code.php b/htdocs/public/donations/donateurs_code.php
    index 3d8057cbe85..86db4b089aa 100644
    --- a/htdocs/public/donations/donateurs_code.php
    +++ b/htdocs/public/donations/donateurs_code.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    +/* Copyright (C) 2002       Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,19 +31,25 @@ define("NOCSRFCHECK",1);	// We accept to go on this page from external web site.
      *
      * @return	void
      */
    -function llxHeaderVierge() { print '<html><title>Export agenda cal</title><body>'; }
    +function llxHeaderVierge()
    +{
    +    print '<html><title>Export agenda cal</title><body>';
    +}
     /**
      * Header function
      *
      * @return	void
      */
    -function llxFooterVierge() { print '</body></html>'; }
    +function llxFooterVierge()
    +{
    +    print '</body></html>';
    +}
     
     require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT .'/don/class/don.class.php';
     
     // Security check
    -if (empty($conf->don->enabled)) accessforbidden('',0,0,1);
    +if (empty($conf->don->enabled)) accessforbidden('', 0, 0, 1);
     
     
     $langs->load("donations");
    @@ -65,13 +72,13 @@ if ($resql)
     	if ($num)
     	{
     
    -		print "<TABLE border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">";
    +		print "<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">";
     
    -		print '<TR>';
    +		print '<tr>';
     		print "<td>".$langs->trans("Name")." / ".$langs->trans("Company")."</td>";
     		print "<td>Date</td>";
    -		print "<td align=\"right\">".$langs->trans("Amount")."</TD>";
    -		print "</TR>\n";
    +		print "<td align=\"right\">".$langs->trans("Amount")."</td>";
    +		print "</tr>\n";
     
     		while ($i < $num)
     		{
    @@ -92,7 +99,6 @@ if ($resql)
     			$i++;
     		}
     		print "</table>";
    -
     	}
     	else
     	{
    diff --git a/htdocs/public/emailing/mailing-read.php b/htdocs/public/emailing/mailing-read.php
    index 4aa388ecf24..0b79f656450 100644
    --- a/htdocs/public/emailing/mailing-read.php
    +++ b/htdocs/public/emailing/mailing-read.php
    @@ -36,13 +36,17 @@ if (! defined('NOREQUIREMENU'))  define('NOREQUIREMENU','1');	// If there is no
      *
      * @return	void
      */
    -function llxHeader() { }
    +function llxHeader()
    +{
    +}
     /**
      * Footer empty
      *
      * @return	void
      */
    -function llxFooter() { }
    +function llxFooter()
    +{
    +}
     
     
     require '../../main.inc.php';
    @@ -82,7 +86,6 @@ if (! empty($tag))
     	dol_syslog("public/emailing/mailing-read.php : Mail read contact : ".$sql, LOG_DEBUG);
     
     	$resql=$db->query($sql);
    -
     }
     
     $db->close();
    diff --git a/htdocs/public/emailing/mailing-unsubscribe.php b/htdocs/public/emailing/mailing-unsubscribe.php
    index 61e8ccdb0d6..c27cb024aab 100644
    --- a/htdocs/public/emailing/mailing-unsubscribe.php
    +++ b/htdocs/public/emailing/mailing-unsubscribe.php
    @@ -35,13 +35,17 @@ if (! defined('NOREQUIREMENU'))  define('NOREQUIREMENU','1');	// If there is no
      *
      * @return	void
      */
    -function llxHeader() { }
    +function llxHeader()
    +{
    +}
     /**
      * Footer empty
      *
      * @return	void
      */
    -function llxFooter() { }
    +function llxFooter()
    +{
    +}
     
     
     require '../../main.inc.php';
    @@ -49,8 +53,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     
     global $user, $conf, $langs;
     
    -$langs->load("main");
    -$langs->load("mails");
    +$langs->loadLangs(array("main", "mails"));
     
     $tag=GETPOST('tag');
     $unsuscrib=GETPOST('unsuscrib');
    diff --git a/htdocs/public/members/new.php b/htdocs/public/members/new.php
    index 144ab64328f..78b3ceb75db 100644
    --- a/htdocs/public/members/new.php
    +++ b/htdocs/public/members/new.php
    @@ -2,8 +2,9 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2001-2002	Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2006-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		J. Fernando Lagrange    <fernando@demo-tic.org>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -99,11 +100,11 @@ function llxHeaderVierge($title, $head="", $disablejs=0, $disablehead=0, $arrayo
     
         if (! empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small))
         {
    -        $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('thumbs/'.$mysoc->logo_small);
    +        $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_small);
         }
         elseif (! empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$mysoc->logo))
         {
    -        $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode($mysoc->logo);
    +        $urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/'.$mysoc->logo);
             $width=128;
         }
         elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo.png'))
    @@ -276,8 +277,9 @@ if ($action == 'add')
                 	// Set output language
                 	$outputlangs = new Translate('', $conf);
                 	$outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
    +            	// Load traductions files requiredby by page
                 	$outputlangs->loadLangs(array("main", "members"));
    -            	// Get email content fro mtemplae
    +            	// Get email content from template
                 	$arraydefaultmessage=null;
                 	$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_AUTOREGISTER;
     
    @@ -548,7 +550,7 @@ if (empty($conf->global->MEMBER_NEWFORM_FORCETYPE))
         $isempty=1;
         if (count($listoftype)==1) { $defaulttype=$tmp[0]; $isempty=0; }
         print '<tr><td class="titlefield">'.$langs->trans("Type").' <FONT COLOR="red">*</FONT></td><td>';
    -    print $form->selectarray("type",  $adht->liste_array(), GETPOST('type')?GETPOST('type'):$defaulttype, $isempty);
    +    print $form->selectarray("type", $adht->liste_array(), GETPOST('type')?GETPOST('type'):$defaulttype, $isempty);
         print '</td></tr>'."\n";
     }
     else
    @@ -563,7 +565,7 @@ $morphys["mor"] = $langs->trans("Moral");
     if (empty($conf->global->MEMBER_NEWFORM_FORCEMORPHY))
     {
         print '<tr class="morphy"><td class="titlefield">'.$langs->trans('Nature').' <FONT COLOR="red">*</FONT></td><td>'."\n";
    -    print $form->selectarray("morphy",  $morphys, GETPOST('morphy'), 1);
    +    print $form->selectarray("morphy", $morphys, GETPOST('morphy'), 1);
         print '</td></tr>'."\n";
     }
     else
    @@ -626,7 +628,7 @@ if (empty($conf->global->ADHERENT_LOGIN_NOT_REQUIRED))
     }
     // Birthday
     print '<tr id="trbirth" class="trbirth"><td>'.$langs->trans("DateToBirth").'</td><td>';
    -print $form->select_date($birthday,'birth',0,0,1,"newmember",1,0,1);
    +print $form->selectDate($birthday, 'birth', 0, 0, 1, "newmember", 1, 0);
     print '</td></tr>'."\n";
     // Photo
     print '<tr><td>'.$langs->trans("URLPhoto").'</td><td><input type="text" name="photo" class="minwidth150" value="'.dol_escape_htmltag(GETPOST('photo')).'"></td></tr>'."\n";
    diff --git a/htdocs/public/members/public_card.php b/htdocs/public/members/public_card.php
    index 5dee0eb49a3..c7a9fa45b3a 100644
    --- a/htdocs/public/members/public_card.php
    +++ b/htdocs/public/members/public_card.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2002-2003	Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2007-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -43,10 +43,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     if (empty($conf->adherent->enabled)) accessforbidden('',0,0,1);
     
     
    -$langs->load("main");
    -$langs->load("members");
    -$langs->load("companies");
    -$langs->load("other");
    +$langs->loadLangs(array("main", "members", "companies", "other"));
     
     $id=GETPOST('id','int');
     $object = new Adherent($db);
    @@ -116,7 +113,6 @@ if ($id > 0)
     
     		print '</table>';
     	}
    -
     }
     
     
    diff --git a/htdocs/public/members/public_list.php b/htdocs/public/members/public_list.php
    index 1f9a4406028..6481851900a 100644
    --- a/htdocs/public/members/public_list.php
    +++ b/htdocs/public/members/public_list.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2002-2003	Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2009	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -40,10 +40,7 @@ require '../../main.inc.php';
     if (empty($conf->adherent->enabled)) accessforbidden('',0,0,1);
     
     
    -$langs->load("main");
    -$langs->load("members");
    -$langs->load("companies");
    -$langs->load("other");
    +$langs->loadLangs(array("main", "members", "companies", "other"));
     
     
     /**
    diff --git a/htdocs/public/notice.php b/htdocs/public/notice.php
    index 623baa2020a..3b25349324c 100644
    --- a/htdocs/public/notice.php
    +++ b/htdocs/public/notice.php
    @@ -19,13 +19,13 @@
      *	\file       htdocs/public/notice.php
      *	\brief      Dolibarr page to show a notice.
      *              Default notice is a message to say network connection is off.
    - *              You can also call this page with URL: 
    + *              You can also call this page with URL:
      *                /public/notice.php?lang=xx_XX&transkey=translation_key  (key must be inside file main.lang, error.lang or other.lang)
      *                /public/notice.php?transphrase=url_encoded_sentence_to_show
      */
     
     define('NOCSRFCHECK',1);
    -define('NOLOGIN',1);		
    +define('NOLOGIN',1);
     
     require '../main.inc.php';
     
    @@ -43,8 +43,8 @@ else
     {
         $langs->load("error");
         $langs->load("other");
    -    
    -    if (GETPOST('transphrase')) print GETPOST('transphrase'); 
    +
    +    if (GETPOST('transphrase')) print GETPOST('transphrase');
         if (GETPOST('transkey')) print $langs->trans(GETPOST('transkey'));
     }
     
    diff --git a/htdocs/public/onlinesign/index.html b/htdocs/public/onlinesign/index.html
    new file mode 100644
    index 00000000000..8b137891791
    --- /dev/null
    +++ b/htdocs/public/onlinesign/index.html
    @@ -0,0 +1 @@
    +
    diff --git a/htdocs/public/onlinesign/newonlinesign.php b/htdocs/public/onlinesign/newonlinesign.php
    index 6c9b4b154bf..b580a508ed0 100644
    --- a/htdocs/public/onlinesign/newonlinesign.php
    +++ b/htdocs/public/onlinesign/newonlinesign.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,13 +44,7 @@ require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
     // Security check
     // No check on module enabled. Done later according to $validpaymentmethod
     
    -$langs->load("main");
    -$langs->load("other");
    -$langs->load("dict");
    -$langs->load("bills");
    -$langs->load("companies");
    -$langs->load("errors");
    -$langs->load("paybox");     // File with generic data
    +$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "errors", "paybox"));
     
     $action=GETPOST('action','alpha');
     
    @@ -126,7 +120,6 @@ $creditor = $mysoc->name;
     if ($action == 'dosign')
     {
         // TODO
    -
     }
     
     
    @@ -147,6 +140,7 @@ if (! empty($source) && in_array($ref, array('member_ref', 'contractline_ref', '
     {
         $langs->load("errors");
         dol_print_error_email('BADREFINONLINESIGNFORM', $langs->trans("ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
    +    // End of page
         llxFooter();
         $db->close();
         exit;
    @@ -179,11 +173,11 @@ else if (! empty($conf->global->ONLINE_SIGN_LOGO)) $logosmall=$conf->global->ONL
     $urllogo='';
     if (! empty($logosmall) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$logosmall))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('thumbs/'.$logosmall);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;entity='.$conf->entity.'&amp;file='.urlencode('logos/thumbs/'.$logosmall);
     }
     elseif (! empty($logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$logo))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode($logo);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;entity='.$conf->entity.'&amp;file='.urlencode('logos/'.$logo);
     	$width=96;
     }
     // Output html code for logo
    @@ -261,8 +255,6 @@ if ($source == 'proposal')
     	print '<input type="hidden" name="source" value="'.GETPOST("source",'alpha').'">';
     	print '<input type="hidden" name="ref" value="'.$proposal->ref.'">';
     	print '</td></tr>'."\n";
    -
    -
     }
     
     
    diff --git a/htdocs/public/opensurvey/studs.php b/htdocs/public/opensurvey/studs.php
    index 32cb5f2e1ba..a9bd8a0fb70 100644
    --- a/htdocs/public/opensurvey/studs.php
    +++ b/htdocs/public/opensurvey/studs.php
    @@ -24,11 +24,11 @@
     
     define("NOLOGIN",1);		// This means this output page does not require to be logged.
     define("NOCSRFCHECK",1);	// We accept to go on this page from external web site.
    -require_once('../../main.inc.php');
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php");
    +require '../../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php";
    +require_once DOL_DOCUMENT_ROOT."/opensurvey/fonctions.php";
     
     
     // Init vars
    diff --git a/htdocs/public/paybox/newpayment.php b/htdocs/public/paybox/newpayment.php
    index 3dc990c30f4..7693660b4ee 100644
    --- a/htdocs/public/paybox/newpayment.php
    +++ b/htdocs/public/paybox/newpayment.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2006-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2009      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2009      Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/public/paybox/paymentko.php b/htdocs/public/paybox/paymentko.php
    index feb4070c16b..ef642a5b80b 100644
    --- a/htdocs/public/paybox/paymentko.php
    +++ b/htdocs/public/paybox/paymentko.php
    @@ -39,15 +39,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
     // Security check
     if (empty($conf->paybox->enabled)) accessforbidden('',0,0,1);
     
    -$langs->load("main");
    -$langs->load("other");
    -$langs->load("dict");
    -$langs->load("bills");
    -$langs->load("companies");
    -$langs->load("paybox");
    -$langs->load("paypal");
    -$langs->load("stripe");
    -
    +$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "paybox", "paypal", "stripe"));
     
     $object = new stdClass();   // For triggers
     
    diff --git a/htdocs/public/paybox/paymentok.php b/htdocs/public/paybox/paymentok.php
    index 9e711ade51b..41eef8784bc 100644
    --- a/htdocs/public/paybox/paymentok.php
    +++ b/htdocs/public/paybox/paymentok.php
    @@ -39,14 +39,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
     // Security check
     if (empty($conf->paybox->enabled)) accessforbidden('',0,0,1);
     
    -$langs->load("main");
    -$langs->load("other");
    -$langs->load("dict");
    -$langs->load("bills");
    -$langs->load("companies");
    -$langs->load("paybox");
    -$langs->load("paypal");
    -$langs->load("stripe");
    +$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "paybox", "paypal", "stripe"));
     
     /*$source=GETPOST('source');
     $ref=GETPOST('ref');
    diff --git a/htdocs/public/payment/newpayment.php b/htdocs/public/payment/newpayment.php
    index 3afd590da53..836540e6a58 100644
    --- a/htdocs/public/payment/newpayment.php
    +++ b/htdocs/public/payment/newpayment.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -415,10 +415,10 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled))
       	$vatnumber = GETPOST('vatnumber','alpha');
     	$savesource=GETPOSTISSET('savesource')?GETPOST('savesource', 'int'):1;
     
    -	dol_syslog("stripeToken = ".$stripeToken, LOG_DEBUG, 0, '_stripe');
    -	dol_syslog("email = ".$email, LOG_DEBUG, 0, '_stripe');
    -	dol_syslog("thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0, '_stripe');
    -	dol_syslog("vatnumber = ".$vatnumber, LOG_DEBUG, 0, '_stripe');
    +	dol_syslog("POST stripeToken = ".$stripeToken, LOG_DEBUG, 0, '_stripe');
    +	dol_syslog("POST email = ".$email, LOG_DEBUG, 0, '_stripe');
    +	dol_syslog("POST thirdparty_id = ".$thirdparty_id, LOG_DEBUG, 0, '_stripe');
    +	dol_syslog("POST vatnumber = ".$vatnumber, LOG_DEBUG, 0, '_stripe');
     
     	$error = 0;
     
    @@ -443,7 +443,6 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled))
     				$service = 'StripeLive';
     				$servicestatus = 1;
     			}
    -			$stripeacc = null;	// No Oauth/connect use for public pages
     
     			$thirdparty = new Societe($db);
     			$thirdparty->fetch($thirdparty_id);
    @@ -451,6 +450,7 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled))
     			// Create Stripe customer
     			include_once DOL_DOCUMENT_ROOT.'/stripe/class/stripe.class.php';
     			$stripe = new Stripe($db);
    +            $stripeacc = $stripe->getStripeAccount($service);
     			$customer = $stripe->customerStripe($thirdparty, $stripeacc, $servicestatus, 1);
     
     			// Create Stripe card from Token
    @@ -478,12 +478,12 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled))
     					'amount'   => price2num($amountstripe, 'MU'),
     					'currency' => $currency,
     					'capture'  => true,							// Charge immediatly
    -					'description' => 'Stripe payment: '.$FULLTAG,
    +					'description' => 'Stripe payment: '.$FULLTAG.' ref='.$ref,
     					'metadata' => $metadata,
     					'customer' => $customer->id,
     					'source' => $card,
     					'statement_descriptor' => dol_trunc(dol_trunc(dol_string_unaccent($mysoc->name), 6, 'right', 'UTF-8', 1).' '.$FULLTAG, 22, 'right', 'UTF-8', 1)     // 22 chars that appears on bank receipt
    -				));
    +				),array("idempotency_key" => "$ref", "stripe_account" => "$stripeacc"));
     				// Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...)
     				if (empty($charge))
     				{
    @@ -496,19 +496,29 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled))
     		}
     		else
     		{
    +			$vatcleaned = $vatnumber ? $vatnumber : null;
    +
    +			$taxinfo = array('type'=>'vat');
    +			if ($vatcleaned)
    +			{
    +				$taxinfo["tax_id"] = $vatcleaned;
    +			}
    +			// We force data to "null" if not defined as expected by Stripe
    +			if (empty($vatcleaned)) $taxinfo=null;
    +
     			dol_syslog("Create anonymous customer card profile", LOG_DEBUG, 0, '_stripe');
     			$customer = \Stripe\Customer::create(array(
     				'email' => $email,
     				'description' => ($email?'Anonymous customer for '.$email:'Anonymous customer'),
     				'metadata' => $metadata,
    -				'business_vat_id' => ($vatnumber?$vatnumber:null),
    +				'tax_info' => $taxinfo,
     				'source'  => $stripeToken           // source can be a token OR array('object'=>'card', 'exp_month'=>xx, 'exp_year'=>xxxx, 'number'=>xxxxxxx, 'cvc'=>xxx, 'name'=>'Cardholder's full name', zip ?)
     			));
     			// Return $customer = array('id'=>'cus_XXXX', ...)
     
    -        if (! empty($FULLTAG))       $metadata["FULLTAG"] = $FULLTAG;
    -        if (! empty($dol_id))        $metadata["dol_id"] = $dol_id;
    -        if (! empty($dol_type))      $metadata["dol_type"] = $dol_type;
    +			if (! empty($FULLTAG))       $metadata["FULLTAG"] = $FULLTAG;
    +			if (! empty($dol_id))        $metadata["dol_id"] = $dol_id;
    +			if (! empty($dol_type))      $metadata["dol_type"] = $dol_type;
     
     			// The customer was just created with a source, so we can make a charge
     			// with no card defined, the source just used for customer creation will be used.
    @@ -518,10 +528,10 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled))
     				'amount'   => price2num($amountstripe, 'MU'),
     				'currency' => $currency,
     				'capture'  => true,							// Charge immediatly
    -				'description' => 'Stripe payment: '.$FULLTAG,
    +				'description' => 'Stripe payment: '.$FULLTAG.' ref='.$ref,
     				'metadata' => $metadata,
     				'statement_descriptor' => dol_trunc(dol_trunc(dol_string_unaccent($mysoc->name), 6, 'right', 'UTF-8', 1).' '.$FULLTAG, 22, 'right', 'UTF-8', 1)     // 22 chars that appears on bank receipt
    -			));
    +			),array("idempotency_key" => "$ref", "stripe_account" => "$stripeacc"));
     			// Return $charge = array('id'=>'ch_XXXX', 'status'=>'succeeded|pending|failed', 'failure_code'=>, 'failure_message'=>...)
     			if (empty($charge))
     			{
    @@ -610,7 +620,6 @@ if ($action == 'charge' && ! empty($conf->stripe->enabled))
     		header("Location: ".$urlok);
     		exit;
     	}
    -
     }
     
     
    @@ -631,8 +640,9 @@ if ($source && in_array($ref, array('member_ref', 'contractline_ref', 'invoice_r
     {
     	$langs->load("errors");
     	dol_print_error_email('BADREFINPAYMENTFORM', $langs->trans("ErrorBadLinkSourceSetButBadValueForRef", $source, $ref));
    -	llxFooter();
    -	$db->close();
    +	// End of page
    +    llxFooter();
    +    $db->close();;
     	exit;
     }
     
    @@ -694,12 +704,12 @@ else if (! empty($conf->global->ONLINE_PAYMENT_LOGO)) $logosmall=$conf->global->
     $urllogo='';
     if (! empty($logosmall) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$logosmall))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('thumbs/'.$logosmall);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;entity='.$conf->entity.'&amp;file='.urlencode('logos/thumbs/'.$logosmall);
     	$width=150;
     }
     elseif (! empty($logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$logo))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode($logo);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;entity='.$conf->entity.'&amp;file='.urlencode('logos/'.$logo);
     	$width=150;
     }
     // Output html code for logo
    @@ -813,7 +823,7 @@ if ($source == 'order')
     		$amount=price2num($amount);
     	}
     
    -	$fulltag='ORD='.$order->ref.'.CUS='.$order->thirdparty->id;
    +	$fulltag='ORD='.$order->id.'.CUS='.$order->thirdparty->id;
     	//$fulltag.='.NAM='.strtr($order->thirdparty->name,"-"," ");
     	if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
     	$fulltag=dol_string_unaccent($fulltag);
    @@ -933,7 +943,7 @@ if ($source == 'invoice')
     		$amount=price2num($amount);
     	}
     
    -	$fulltag='INV='.$invoice->ref.'.CUS='.$invoice->thirdparty->id;
    +	$fulltag='INV='.$invoice->id.'.CUS='.$invoice->thirdparty->id;
     	//$fulltag.='.NAM='.strtr($invoice->thirdparty->name,"-"," ");
     	if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
     	$fulltag=dol_string_unaccent($fulltag);
    @@ -1115,7 +1125,7 @@ if ($source == 'contractline')
     		$amount=price2num($amount);
     	}
     
    -	$fulltag='COL='.$contractline->ref.'.CON='.$contract->ref.'.CUS='.$contract->thirdparty->id.'.DAT='.dol_print_date(dol_now(),'%Y%m%d%H%M');
    +	$fulltag='COL='.$contractline->id.'.CON='.$contract->id.'.CUS='.$contract->thirdparty->id.'.DAT='.dol_print_date(dol_now(),'%Y%m%d%H%M');
     	//$fulltag.='.NAM='.strtr($contract->thirdparty->name,"-"," ");
     	if (! empty($TAG)) { $tag=$TAG; $fulltag.='.TAG='.$TAG; }
     	$fulltag=dol_string_unaccent($fulltag);
    diff --git a/htdocs/public/payment/paymentko.php b/htdocs/public/payment/paymentko.php
    index bdc301a0dce..cd220a5764f 100644
    --- a/htdocs/public/payment/paymentko.php
    +++ b/htdocs/public/payment/paymentko.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,14 +44,7 @@ if (! empty($conf->paypal->enabled))
     	require_once DOL_DOCUMENT_ROOT.'/paypal/lib/paypalfunctions.lib.php';
     }
     
    -$langs->load("main");
    -$langs->load("other");
    -$langs->load("dict");
    -$langs->load("bills");
    -$langs->load("companies");
    -$langs->load("paybox");
    -$langs->load("paypal");
    -$langs->load("stripe");
    +$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "paybox", "paypal", "stripe"));
     
     if (! empty($conf->paypal->enabled))
     {
    @@ -219,12 +212,12 @@ else if (! empty($conf->global->ONLINE_PAYMENT_LOGO)) $logosmall=$conf->global->
     $urllogo='';
     if (! empty($logosmall) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$logosmall))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('thumbs/'.$logosmall);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$logosmall);
     	$width=150;
     }
     elseif (! empty($logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$logo))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode($logo);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/'.$logo);
     	$width=150;
     }
     // Output html code for logo
    diff --git a/htdocs/public/payment/paymentok.php b/htdocs/public/payment/paymentok.php
    index 7f4e6e67a2c..3ad71487dfc 100644
    --- a/htdocs/public/payment/paymentok.php
    +++ b/htdocs/public/payment/paymentok.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -157,12 +157,12 @@ else if (! empty($conf->global->ONLINE_PAYMENT_LOGO)) $logosmall=$conf->global->
     $urllogo='';
     if (! empty($logosmall) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$logosmall))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('thumbs/'.$logosmall);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$logosmall);
     	$width=150;
     }
     elseif (! empty($logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$logo))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode($logo);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?modulepart=mycompany&amp;file='.urlencode('logos/'.$logo);
     	$width=150;
     }
     // Output html code for logo
    @@ -313,7 +313,7 @@ if ($ispaymentok)
     		$adht = new AdherentType($db);
     		$object = new Adherent($db);
     
    -		$result1 = $object->fetch(0, $tmptag['MEM']);
    +		$result1 = $object->fetch($tmptag['MEM']);
     		$result2 = $adht->fetch($object->typeid);
     
     		if ($result1 > 0 && $result2 > 0)
    @@ -516,8 +516,9 @@ if ($ispaymentok)
     						// Set output language
     						$outputlangs = new Translate('', $conf);
     						$outputlangs->setDefaultLang(empty($object->thirdparty->default_lang) ? $mysoc->default_lang : $object->thirdparty->default_lang);
    +						// Load traductions files requiredby by page
     						$outputlangs->loadLangs(array("main", "members"));
    -						// Get email content from templae
    +						// Get email content from template
     						$arraydefaultmessage=null;
     						$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_SUBSCRIPTION;
     
    @@ -587,7 +588,7 @@ if ($ispaymentok)
     		// Record payment
     		include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     		$invoice = new Facture($db);
    -		$result = $invoice->fetch(0, $tmptag['INV']);
    +		$result = $invoice->fetch($tmptag['INV']);
     		if ($result)
     		{
     			$FinalPaymentAmt    = $_SESSION["FinalPaymentAmt"];
    @@ -628,7 +629,9 @@ if ($ispaymentok)
     				}
     				$paiement->paiementid   = $paymentTypeId;
     				$paiement->num_paiement = '';
    -				$paiement->note_public  = 'Online payment '.dol_print_date($now, 'standard').' using '.$paymentmethod.' from '.$ipaddress.' - Transaction ID = '.$TRANSACTIONID;
    +				$paiement->note_public  = 'Online payment '.dol_print_date($now, 'standard').' from '.$ipaddress;
    +				$paiement->ext_payment_id = $TRANSACTIONID;
    +				$paiement->ext_payment_site = $service;
     
     				if (! $error)
     				{
    @@ -650,8 +653,8 @@ if ($ispaymentok)
     				{
     					$bankaccountid = 0;
     					if ($paymentmethod == 'paybox') $bankaccountid = $conf->global->PAYBOX_BANK_ACCOUNT_FOR_PAYMENTS;
    -					if ($paymentmethod == 'paypal') $bankaccountid = $conf->global->PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS;
    -					if ($paymentmethod == 'stripe') $bankaccountid = $conf->global->STRIPE_BANK_ACCOUNT_FOR_PAYMENTS;
    +					elseif ($paymentmethod == 'paypal') $bankaccountid = $conf->global->PAYPAL_BANK_ACCOUNT_FOR_PAYMENTS;
    +					elseif ($paymentmethod == 'stripe') $bankaccountid = $conf->global->STRIPE_BANK_ACCOUNT_FOR_PAYMENTS;
     
     					if ($bankaccountid > 0)
     					{
    @@ -666,7 +669,7 @@ if ($ispaymentok)
     						}
     						else
     						{
    -							$postactionmessages[] = 'Bank entry of payment created';
    +							$postactionmessages[] = 'Bank transaction of payment created';
     							$ispostactionok=1;
     						}
     					}
    @@ -775,9 +778,9 @@ if ($ispaymentok)
     		}
     		elseif (in_array('INV', array_keys($tmptag)))
     		{
    -			$url=$urlwithroot."/compta/facture/card.php?ref=".$tmptag['INV'];
    +			$url=$urlwithroot."/compta/facture/card.php?id=".$tmptag['INV'];
     			$content.='<strong>'.$companylangs->trans("Payment")."</strong><br><br>\n";
    -			$content.=$companylangs->trans("Invoice").': <strong>'.$tmptag['INV']."</strong><br>\n";
    +			$content.=$companylangs->trans("InvoiceId").': <strong>'.$tmptag['INV']."</strong><br>\n";
     			//$content.=$companylangs->trans("ThirdPartyId").': '.$tmptag['CUS']."<br>\n";
     			$content.=$companylangs->trans("Link").': <a href="'.$url.'">'.$url.'</a>'."<br>\n";
     		}
    @@ -870,8 +873,8 @@ else
         if (! empty($conf->global->PAYMENTONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYMENTONLINE_SENDEMAIL;
         // TODO Remove local option to keep only the generic one ?
         if ($paymentmethod == 'paypal' && ! empty($conf->global->PAYPAL_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYPAL_PAYONLINE_SENDEMAIL;
    -    if ($paymentmethod == 'paybox' && ! empty($conf->global->PAYBOX_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYBOX_PAYONLINE_SENDEMAIL;
    -    if ($paymentmethod == 'stripe' && ! empty($conf->global->STRIPE_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->STRIPE_PAYONLINE_SENDEMAIL;
    +    elseif ($paymentmethod == 'paybox' && ! empty($conf->global->PAYBOX_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->PAYBOX_PAYONLINE_SENDEMAIL;
    +    elseif ($paymentmethod == 'stripe' && ! empty($conf->global->STRIPE_PAYONLINE_SENDEMAIL)) $sendemail=$conf->global->STRIPE_PAYONLINE_SENDEMAIL;
     
         // Send an email
         if ($sendemail)
    diff --git a/htdocs/public/paypal/newpayment.php b/htdocs/public/paypal/newpayment.php
    index 1a3ee3964ff..1ec8f058408 100644
    --- a/htdocs/public/paypal/newpayment.php
    +++ b/htdocs/public/paypal/newpayment.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2009-2012	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/public/paypal/paymentko.php b/htdocs/public/paypal/paymentko.php
    index 3e555379849..16f360dd0d9 100644
    --- a/htdocs/public/paypal/paymentko.php
    +++ b/htdocs/public/paypal/paymentko.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -43,14 +43,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
     // Security check
     if (empty($conf->paypal->enabled)) accessforbidden('',0,0,1);
     
    -$langs->load("main");
    -$langs->load("other");
    -$langs->load("dict");
    -$langs->load("bills");
    -$langs->load("companies");
    -$langs->load("paybox");
    -$langs->load("paypal");
    -$langs->load("stripe");
    +$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "paybox", "paypal", "stripe"));
     
     $PAYPALTOKEN=GETPOST('TOKEN');
     if (empty($PAYPALTOKEN)) $PAYPALTOKEN=GETPOST('token');
    diff --git a/htdocs/public/paypal/paymentok.php b/htdocs/public/paypal/paymentok.php
    index 72a43dcbc7b..da815b061a7 100644
    --- a/htdocs/public/paypal/paymentok.php
    +++ b/htdocs/public/paypal/paymentok.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/public/stripe/ipn.php b/htdocs/public/stripe/ipn.php
    index ac366da9210..23c073e5c0c 100644
    --- a/htdocs/public/stripe/ipn.php
    +++ b/htdocs/public/stripe/ipn.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2018 	Thibault FOUCART        <support@ptibogxiv.net>
    +/* Copyright (C) 2018       Thibault FOUCART        <support@ptibogxiv.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -21,11 +22,7 @@ define("NOCSRFCHECK",1);	// We accept to go on this page from external web site.
     $entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
     if (is_numeric($entity)) define("DOLENTITY", $entity);
     
    -$res=0;
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");		// to work if your module directory is into a subdir of root htdocs directory
    -if (! $res) die("Include of main fails");
    -
    -if (empty($conf->stripe->enabled)) accessforbidden('',0,0,1);
    +require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
     require_once DOL_DOCUMENT_ROOT.'/includes/stripe/init.php';
    @@ -36,20 +33,24 @@ require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
     require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
    +require_once DOL_DOCUMENT_ROOT .'/core/class/CMailFile.class.php';
    +
    +if (empty($conf->stripe->enabled)) accessforbidden('',0,0,1);
     
     // You can find your endpoint's secret in your webhook settings
    -if (isset($_GET['connect'])){
    +if (isset($_GET['connect']))
    +{
     	if (isset($_GET['test']))
     	{
     		$endpoint_secret =  $conf->global->STRIPE_TEST_WEBHOOK_CONNECT_KEY;
     		$service = 'StripeTest';
    -    $servicestatus = 0;
    +		$servicestatus = 0;
     	}
     	else
     	{
     		$endpoint_secret =  $conf->global->STRIPE_LIVE_WEBHOOK_CONNECT_KEY;
     		$service = 'StripeLive';
    -    $servicestatus = 1;    
    +    $servicestatus = 1;
     	}
     }
     else {
    @@ -57,13 +58,13 @@ else {
     	{
     		$endpoint_secret =  $conf->global->STRIPE_TEST_WEBHOOK_KEY;
     		$service = 'StripeTest';
    -    $servicestatus = 0;
    +		$servicestatus = 0;
     	}
     	else
     	{
     		$endpoint_secret =  $conf->global->STRIPE_LIVE_WEBHOOK_KEY;
     		$service = 'StripeLive';
    -    $servicestatus = 1;
    +		$servicestatus = 1;
     	}
     }
     
    @@ -89,9 +90,12 @@ catch(\UnexpectedValueException $e) {
     // Do something with $event
     
     http_response_code(200); // PHP 5.4 or greater
    +
     $langs->load("main");
    +
    +// TODO Do we really need a user in setup just to have an name to fill an email topic when it is a technical system notification email
     $user = new User($db);
    -$user->fetch(5);
    +$user->fetch($conf->global->STRIPE_USER_ACCOUNT_FOR_ACTIONS);
     $user->getrights();
     
     if (! empty($conf->multicompany->enabled) && ! empty($conf->stripeconnect->enabled) && is_object($mc)) {
    @@ -116,7 +120,7 @@ if (! empty($conf->multicompany->enabled) && ! empty($conf->stripeconnect->enabl
     		$key=1;
     	}
     	$ret=$mc->switchEntity($key);
    -	if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    +	if (! $res && file_exists("../../main.inc.php")) $res=@include "../../main.inc.php";
     	if (! $res) die("Include of main fails");
     }
     
    @@ -125,16 +129,41 @@ $stripe=new Stripe($db);
     if ($event->type == 'payout.created') {
     	$error=0;
     
    -	$result=dolibarr_set_const($db, $servicestatus."_NEXTPAYOUT", date('Y-m-d H:i:s',$event->data->object->arrival_date), 'chaine', 0, '', $conf->entity);
    +	$result=dolibarr_set_const($db, $service."_NEXTPAYOUT", date('Y-m-d H:i:s',$event->data->object->arrival_date), 'chaine', 0, '', $conf->entity);
     
     	if ($result > 0)
     	{
    -		// TODO Use CMail and translation
    -		$body = "Un virement de ".price2num($event->data->object->amount/100)." ".$event->data->object->currency." est attendu sur votre compte le ".date('d-m-Y H:i:s',$event->data->object->arrival_date);
    -		$subject = '[NOTIFICATION] Virement programmée';
    -		$headers = 'From: "'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'" <'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'>'; // TODO  convert in dolibarr standard
    -		mail(''.$conf->global->MAIN_INFO_SOCIETE_MAIL.'', $subject, $body, $headers);
    -		return 1;
    +        $subject = '[NOTIFICATION] Stripe payout scheduled';
    +        if (!empty($user->email)) {
    +            $sendto = dolGetFirstLastname($user->firstname, $user->lastname) . " <".$user->email.">";
    +        } else {
    +            $sendto = $conf->global->MAIN_INFO_SOCIETE_MAIL.'" <'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'>';
    +        }
    +        $replyto = $sendto;
    +        $sendtocc = '';
    +        if (!empty($conf->global->ONLINE_PAYMENT_SENDEMAIL)) {
    +            $sendtocc = $conf->global->ONLINE_PAYMENT_SENDEMAIL.'" <'.$conf->global->ONLINE_PAYMENT_SENDEMAIL.'>';
    +        }
    +
    +        $message = "A bank transfer of ".price2num($event->data->object->amount/100)." ".$event->data->object->currency." should arrive in your account the ".dol_print_date($event->data->object->arrival_date, 'dayhour');
    +
    +        $mailfile = new CMailFile(
    +            $subject,
    +            $sendto,
    +            $replyto,
    +            $message,
    +            array(),
    +            array(),
    +            array(),
    +            $sendtocc,
    +            '',
    +            0,
    +            -1
    +        );
    +
    +        $ret = $mailfile->sendfile();
    +
    +        return 1;
     	}
     	else
     	{
    @@ -145,7 +174,7 @@ if ($event->type == 'payout.created') {
     elseif ($event->type == 'payout.paid') {
     	global $conf;
     	$error=0;
    -	$result=dolibarr_set_const($db, $servicestatus."_NEXTPAYOUT",null,'chaine',0,'',$conf->entity);
    +	$result=dolibarr_set_const($db, $service."_NEXTPAYOUT",null,'chaine',0,'',$conf->entity);
     	if ($result)
     	{
     		$langs->load("errors");
    @@ -162,14 +191,8 @@ elseif ($event->type == 'payout.paid') {
     		$accountto=new Account($db);
     		$accountto->fetch($conf->global->STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS);
     
    -		if ($accountto->currency_code != $accountfrom->currency_code) {
    -			$error++;
    -			setEventMessages($langs->trans("ErrorTransferBetweenDifferentCurrencyNotPossible"), null, 'errors');
    -		}
    -
    -		if ($accountto->id != $accountfrom->id)
    +		if (($accountto->id != $accountfrom->id) && empty($error))
     		{
    -
     			$bank_line_id_from=0;
     			$bank_line_id_to=0;
     			$result=0;
    @@ -180,8 +203,7 @@ elseif ($event->type == 'payout.paid') {
     
     			if (! $error) $bank_line_id_from = $accountfrom->addline($dateo, $typefrom, $label, -1*price2num($amount), '', '', $user);
     			if (! ($bank_line_id_from > 0)) $error++;
    -			if ((! $error) && ($accountto->currency_code == $accountfrom->currency_code)) $bank_line_id_to = $accountto->addline($dateo, $typeto, $label, price2num($amount), '', '', $user);
    -			if ((! $error) && ($accountto->currency_code != $accountfrom->currency_code)) $bank_line_id_to = $accountto->addline($dateo, $typeto, $label, price2num($amount_to), '', '', $user);
    +			if (! $error) $bank_line_id_to = $accountto->addline($dateo, $typeto, $label, price2num($amount), '', '', $user);
     			if (! ($bank_line_id_to > 0)) $error++;
     
     			if (! $error) $result=$accountfrom->add_url_line($bank_line_id_from, $bank_line_id_to, DOL_URL_ROOT.'/compta/bank/ligne.php?rowid=', '(banktransfert)', 'banktransfert');
    @@ -190,11 +212,35 @@ elseif ($event->type == 'payout.paid') {
     			if (! ($result > 0)) $error++;
     		}
     
    -		// TODO Use CMail and translation
    -		$body = "Un virement de ".price2num($event->data->object->amount/100)." ".$event->data->object->currency." a ete effectue sur votre compte le ".date('d-m-Y H:i:s',$event->data->object->arrival_date);
    -		$subject = '[NOTIFICATION] Virement effectué';
    -		$headers = 'From: "'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'" <'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'>';
    -		mail(''.$conf->global->MAIN_INFO_SOCIETE_MAIL.'', $subject, $body, $headers);
    +		$subject = '[NOTIFICATION] Stripe payout done';
    +		if (!empty($user->email)) {
    +			$sendto = dolGetFirstLastname($user->firstname, $user->lastname) . " <".$user->email.">";
    +		} else {
    +			$sendto = $conf->global->MAIN_INFO_SOCIETE_MAIL.'" <'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'>';
    +		}
    +		$replyto = $sendto;
    +		$sendtocc = '';
    +		if (!empty($conf->global->ONLINE_PAYMENT_SENDEMAIL)) {
    +			$sendtocc = $conf->global->ONLINE_PAYMENT_SENDEMAIL.'" <'.$conf->global->ONLINE_PAYMENT_SENDEMAIL.'>';
    +		}
    +
    +		$message = "A bank transfer of ".price2num($event->data->object->amount/100)." ".$event->data->object->currency." has been done to your account the ".dol_print_date($event->data->object->arrival_date, 'dayhour');
    +
    +		$mailfile = new CMailFile(
    +			$subject,
    +			$sendto,
    +			$replyto,
    +			$message,
    +			array(),
    +			array(),
    +			array(),
    +			$sendtocc,
    +			'',
    +			0,
    +			-1
    +			);
    +
    +		$ret = $mailfile->sendfile();
     
     		return 1;
     	}
    @@ -207,61 +253,55 @@ elseif ($event->type == 'payout.paid') {
     elseif ($event->type == 'charge.succeeded') {
     
     	//TODO: create fees
    -
     }
     elseif ($event->type == 'customer.source.created') {
     
     	//TODO: save customer's source
    -
     }
     elseif ($event->type == 'customer.source.updated') {
     
     	//TODO: update customer's source
    -
     }
     elseif ($event->type == 'customer.source.delete') {
     
     	//TODO: delete customer's source
    -
     }
     elseif ($event->type == 'charge.failed') {
     
     	$subject = 'Your payment has been received: '.$event->data->object->id.'';
     	$headers = 'From: "'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'" <'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'>';
    -	//mail('ptibogxiv@msn.com', $subject, 'test', $headers);
    -
     }
     elseif (($event->type == 'source.chargeable') && ($event->data->object->type == 'three_d_secure') && ($event->data->object->three_d_secure->authenticated==true)) {
     
    -  $fulltag=$event->data->object->metadata->FULLTAG;
    +    $fulltag=$event->data->object->metadata->FULLTAG;
     	// Save into $tmptag all metadata
     	$tmptag=dolExplodeIntoArray($fulltag,'.','=');
    -  
    -  if (! empty($tmptag['ORD'])){
    -  $order=new Commande($db);
    -	$order->fetch('',$tmptag['ORD']);
    -  $origin='order';
    -  $item=$order->id;
    -  } elseif (! empty($tmptag['INV'])) {
    -  $invoice = new Facture($db);
    -	$invoice->fetch('',$tmptag['INV']);
    -  $origin='invoice';
    -  $item=$invoice->id;
    -  }
     
    -  $stripe=new Stripe($db); 
    -  $stripeacc = $stripe->getStripeAccount($service);								// Stripe OAuth connect account of dolibarr user (no network access here)
    -  $stripecu = $stripe->getStripeCustomerAccount($tmptag['CUS'], $servicestatus);		// Get thirdparty cu_...
    +    if (! empty($tmptag['ORD'])) {
    +        $order=new Commande($db);
    +	    $order->fetch('',$tmptag['ORD']);
    +        $origin='order';
    +        $item=$order->id;
    +    } elseif (! empty($tmptag['INV'])) {
    +        $invoice = new Facture($db);
    +	    $invoice->fetch('',$tmptag['INV']);
    +        $origin='invoice';
    +        $item=$invoice->id;
    +    }
    +
    +    $stripe=new Stripe($db);
    +    $stripeacc = $stripe->getStripeAccount($service);								// Stripe OAuth connect account of dolibarr user (no network access here)
    +    $stripecu = $stripe->getStripeCustomerAccount($tmptag['CUS'], $servicestatus);		// Get thirdparty cu_...
     	$charge=$stripe->createPaymentStripe($event->data->object->amount/100,$event->data->object->currency,$origin,$item,$event->data->object->id,$stripecu,$stripeacc,$servicestatus);
    -  
    -	if (isset($charge->id) && $charge->statut=='error'){
    +
    +	if (isset($charge->id) && $charge->statut=='error') {
     		$msg=$charge->message;
     		$code=$charge->code;
     		$error++;
    -	}              
    +	}
     	elseif (isset($charge->id) && $charge->statut=='success' && (! empty($tmptag['ORD']))) {
    -    //$order=new Commande($db);
    -	  //$order->fetch('',$tmptag['ORD']);
    +        //$order=new Commande($db);
    +	    //$order->fetch('',$tmptag['ORD']);
     		$invoice = new Facture($db);
     		$idinv=$invoice->createFromOrder($order,$user);
     
    @@ -277,17 +317,17 @@ elseif (($event->type == 'source.chargeable') && ($event->data->object->type ==
     				$ifverif=$invoice->socid;
     				$currency=$invoice->multicurrency_code;
     				$total=price2num($invoice->total_ttc - $paiement - $creditnotes - $deposits,'MT');
    -			}else{
    +			} else {
     				$msg=$invoice->error;
     				$error++;
     			}
    -		}else{
    +		} else {
     			$msg=$invoice->error;
     			$error++;
     		}
     	}
     
    -	if (!$error){
    +	if (!$error) {
     		$datepaye = dol_now();
     		$paymentType ="CB";
     		$amounts=array();
    @@ -303,10 +343,10 @@ elseif (($event->type == 'source.chargeable') && ($event->data->object->type ==
     		$paiement->note         = '';
     	}
     
    -	if (! $error){
    +	if (! $error) {
     		$paiement_id=$paiement->create($user, 0);
     
    -		if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE) && count($invoice->lines)){
    +		if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE) && count($invoice->lines)) {
     			$outputlangs = $langs;
     			$newlang = '';
     			if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','aZ09')) $newlang = GETPOST('lang_id','aZ09');
    @@ -320,17 +360,17 @@ elseif (($event->type == 'source.chargeable') && ($event->data->object->type ==
     
     			$invoice->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
     		}
    -		if ($paiement_id < 0){
    +		if ($paiement_id < 0) {
     			$msg=$paiement->errors;
     			$error++;
    -		}else{
    +		} else {
     			if ($event->data->object->metadata->source=='order') {
     				$order->classifyBilled($user);
     			}
     		}
     	}
     
    -	if (! $error){
    +	if (! $error) {
     		$label='(CustomerInvoicePayment)';
     		if (GETPOST('type') == 2) $label='(CustomerInvoicePaymentBack)';
     		$paiement->addPaymentToBank($user,'payment',$label,$conf->global->STRIPE_BANK_ACCOUNT_FOR_PAYMENTS,'','');
    @@ -345,7 +385,6 @@ elseif (($event->type == 'source.chargeable') && ($event->data->object->type ==
     	$body = "";
     	$subject = 'Facture '.$invoice->ref;
     	$headers = 'From: "'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'" <'.$conf->global->MAIN_INFO_SOCIETE_MAIL.'>';
    -	//mail('ptibogxiv@msn.com', $subject, $body, $headers); TODO  convert in dolibarr standard
     }
     elseif ($event->type == 'customer.deleted') {
     	$db->begin();
    diff --git a/htdocs/public/stripe/newpayment.php b/htdocs/public/stripe/newpayment.php
    index fcc7acd29ad..cb22aa72cd4 100644
    --- a/htdocs/public/stripe/newpayment.php
    +++ b/htdocs/public/stripe/newpayment.php
    @@ -36,7 +36,6 @@ $entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['ent
     if (is_numeric($entity)) define("DOLENTITY", $entity);
     
     require '../../main.inc.php';
    -
     require_once DOL_DOCUMENT_ROOT.'/stripe/config.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
    diff --git a/htdocs/public/stripe/paymentko.php b/htdocs/public/stripe/paymentko.php
    index ff1abfae9e4..be285cfc628 100644
    --- a/htdocs/public/stripe/paymentko.php
    +++ b/htdocs/public/stripe/paymentko.php
    @@ -36,14 +36,7 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
     
    -$langs->load("main");
    -$langs->load("other");
    -$langs->load("dict");
    -$langs->load("bills");
    -$langs->load("companies");
    -$langs->load("paybox");
    -$langs->load("paypal");
    -$langs->load("stripe");
    +$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "paybox", "paypal", "stripe"));
     
     $FULLTAG=GETPOST('FULLTAG');
     if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
    diff --git a/htdocs/public/stripe/paymentok.php b/htdocs/public/stripe/paymentok.php
    index 52b3dac8a7f..4bce7dd62ce 100644
    --- a/htdocs/public/stripe/paymentok.php
    +++ b/htdocs/public/stripe/paymentok.php
    @@ -36,13 +36,7 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
     
    -$langs->load("main");
    -$langs->load("other");
    -$langs->load("dict");
    -$langs->load("bills");
    -$langs->load("companies");
    -$langs->load("paybox");
    -$langs->load("paypal");
    +$langs->loadLangs(array("main", "other", "dict", "bills", "companies", "paybox", "paypal"));
     
     $FULLTAG=GETPOST('FULLTAG');
     if (empty($FULLTAG)) $FULLTAG=GETPOST('fulltag');
    diff --git a/htdocs/public/test/index.html b/htdocs/public/test/index.html
    new file mode 100644
    index 00000000000..8b137891791
    --- /dev/null
    +++ b/htdocs/public/test/index.html
    @@ -0,0 +1 @@
    +
    diff --git a/htdocs/public/test/test_arrays.php b/htdocs/public/test/test_arrays.php
    index 02f5786632c..e3a5f33cbeb 100644
    --- a/htdocs/public/test/test_arrays.php
    +++ b/htdocs/public/test/test_arrays.php
    @@ -174,9 +174,9 @@ if ($showbirthday)  $nav.='<input type="hidden" name="showbirthday" value="1">';
     if ($pid)    $nav.='<input type="hidden" name="projectid" value="'.$pid.'">';
     if ($type)   $nav.='<input type="hidden" name="type" value="'.$type.'">';
     if ($usergroup) $nav.='<input type="hidden" name="usergroup" value="'.$usergroup.'">';
    -$nav.=$form->select_date($dateselect, 'dateselect', 0, 0, 1, '', 1, 0, 1);
    -$nav.=' <input type="submit" name="submitdateselect" class="button" value="'.$langs->trans("Refresh").'">';
    -$nav.='</form>';
    +$nav.= $form->selectDate($dateselect, 'dateselect', 0, 0, 1, '', 1, 0);
    +$nav.= ' <input type="submit" name="submitdateselect" class="button" value="'.$langs->trans("Refresh").'">';
    +$nav.= '</form>';
     
     $limit=10;
     print_barre_liste('Title of my list', 12, $_SERVER["PHP_SELF"], '', '', '', 'Text in middle', 20, 500, '', 0, $nav, '', $limit);
    diff --git a/htdocs/public/test/test_forms.php b/htdocs/public/test/test_forms.php
    index 0250bb2c39f..343acab9a4a 100644
    --- a/htdocs/public/test/test_forms.php
    +++ b/htdocs/public/test/test_forms.php
    @@ -27,29 +27,29 @@ This page is a sample of page using Dolibarr HTML widget methods. It is designed
     <?php
     $form=new Form($db);
     
    -// Test1: form->select_date using tzuser date
    +// Test1: form->selectDate using tzuser date
     print "Test 1a: We must have here current date and hour for user (must match hour on browser). Note: Check your are logged so user TZ and DST are known.";
     $offsettz=(empty($_SESSION['dol_tz'])?0:$_SESSION['dol_tz'])*60*60;
     $offsetdst=(empty($_SESSION['dol_dst'])?0:$_SESSION['dol_dst'])*60*60;
     print " (dol_tz=".$offsettz." dol_dst=".$dol_dst.")<br>\n";
    -$form->select_date(dol_now(), 'test1a', 1, 1, 0);
    +print $form->selectDate(dol_now(), 'test1a', 1, 1, 0);
     
     print '<br><br>'."\n";
     
     print "Test 1b: We must have here current date with hours to 00:00.<br>";
    -$form->select_date('', 'test1b', 1, 1, 0);
    +print $form->selectDate('', 'test1b', 1, 1, 0);
     
     print '<br><br>'."\n";
     
    -// Test2: form->select_date using tzuser date
    +// Test2: form->selectDate using tzuser date
     print "Test 2: We must have here 1970-01-01 00:00:00 selected (fields can be empty)<br>\n";
    -$form->select_date(dol_get_first_day(1970,1,false), 'test2', 1, 1, 1);
    +print $form->selectDate(dol_get_first_day(1970,1,false), 'test2', 1, 1, 1);
     
     print '<br><br>'."\n";
     
    -// Test3: form->select_date for 1970-01-01 00:00:00
    +// Test3: form->selectDate for 1970-01-01 00:00:00
     print "Test 3: We must have here 1970-01-01 00:00:00 selected (fields are mandatory)<br>\n";
    -$form->select_date(dol_get_first_day(1970,1,false), 'test3', 1, 1, 0);
    +print $form->selectDate(dol_get_first_day(1970,1,false), 'test3', 1, 1, 0);
     
     print '<br><br>'."\n";
     
    @@ -94,6 +94,6 @@ $array=array(1=>'Value 1',2=>'Value 2',3=>'Value 3');
     $arrayselected=array(1,3);
     print $form->multiselectarray('testmulti', $array, $arrayselected, '', 0, '', 0, 250);
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/public/ticket/create_ticket.php b/htdocs/public/ticket/create_ticket.php
    index 066471fddff..d451d96d011 100644
    --- a/htdocs/public/ticket/create_ticket.php
    +++ b/htdocs/public/ticket/create_ticket.php
    @@ -177,7 +177,7 @@ if ($action == 'create_ticket' && GETPOST('add_ticket')) {
             	$action = "infos_success";
             } else {
     	    	$object->db->rollback();
    -	    	setEventMessage($object->errors, 'errors');
    +	    	setEventMessages($object->error, $object->errors, 'errors');
     	    	$action = 'create_ticket';
     	    }
     
    @@ -226,8 +226,8 @@ if ($action == 'create_ticket' && GETPOST('add_ticket')) {
                     }
                     include_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php';
                     $mailfile = new CMailFile($subject, $sendto, $from, $message, $filepath, $mimetype, $filename, $sendtocc, '', $deliveryreceipt, -1);
    -                if ($mailfile->error) {
    -                    setEventMessage($mailfile->error, 'errors');
    +                if ($mailfile->error || $mailfile->errors) {
    +                    setEventMessages($mailfile->error, $mailfile->errors, 'errors');
                     } else {
                         $result = $mailfile->sendfile();
                     }
    @@ -287,9 +287,9 @@ if ($action == 'create_ticket' && GETPOST('add_ticket')) {
     	                }
     	                include_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php';
     	                $mailfile = new CMailFile($subject, $sendto, $from, $message_admin, $filepath, $mimetype, $filename, $sendtocc, '', $deliveryreceipt, -1);
    -	                if ($mailfile->error) {
    -	                    setEventMessage($mailfile->error, 'errors');
    -	                } else {
    +	                if ($mailfile->error || $mailfile->errors) {
    +                        setEventMessages($mailfile->error, $mailfile->errors, 'errors');
    +                    } else {
     	                    $result = $mailfile->sendfile();
     	                }
     	                if (!empty($conf->global->TICKET_DISABLE_MAIL_AUTOCOPY_TO)) {
    @@ -308,10 +308,10 @@ if ($action == 'create_ticket' && GETPOST('add_ticket')) {
                 	$formmail->remove_attached_files($i);
                 }
     
    -            setEventMessage($langs->trans('YourTicketSuccessfullySaved'));
    +            setEventMessages($langs->trans('YourTicketSuccessfullySaved'), null, 'mesgs');
             }
         } else {
    -        setEventMessage($object->errors, 'errors');
    +        setEventMessages($object->error, $object->errors, 'errors');
         }
     }
     
    diff --git a/htdocs/public/ticket/img/index.html b/htdocs/public/ticket/img/index.html
    new file mode 100644
    index 00000000000..8b137891791
    --- /dev/null
    +++ b/htdocs/public/ticket/img/index.html
    @@ -0,0 +1 @@
    +
    diff --git a/htdocs/public/ticket/index.php b/htdocs/public/ticket/index.php
    index bb0499f43e6..52b3b843fa1 100644
    --- a/htdocs/public/ticket/index.php
    +++ b/htdocs/public/ticket/index.php
    @@ -25,11 +25,18 @@ if (!defined('NOCSRFCHECK'))   define('NOCSRFCHECK', '1');
     if (!defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1');
     if (!defined("NOLOGIN"))       define("NOLOGIN", '1');				// If this page is public (can be called outside logged session)
     
    +// For MultiCompany module.
    +// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
    +// TODO This should be useless. Because entity must be retreive from object ref and not from url.
    +$entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
    +if (is_numeric($entity)) define("DOLENTITY", $entity);
    +
     require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/ticket/class/actions_ticket.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formticket.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ticket.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/security.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/payments.lib.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array('companies', 'other', 'ticket', 'errors'));
    @@ -64,5 +71,8 @@ if (!$conf->global->TICKET_ENABLE_PUBLIC_INTERFACE) {
     }
     
     // End of page
    -llxFooter();
    +htmlPrintOnlinePaymentFooter($mysoc,$langs,1,$suffix,$object);
    +
    +llxFooter('', 'public');
    +
     $db->close();
    diff --git a/htdocs/public/ticket/list.php b/htdocs/public/ticket/list.php
    index d8290849f55..f11583ac64d 100644
    --- a/htdocs/public/ticket/list.php
    +++ b/htdocs/public/ticket/list.php
    @@ -44,7 +44,7 @@ $langs->loadLangs(array("companies","other","ticket"));
     
     // Get parameters
     $track_id = GETPOST('track_id', 'alpha');
    -$action = GETPOST('action', 'alpha', 3);
    +$action = GETPOST('action', 'aZ09');
     $email = GETPOST('email', 'alpha');
     
     if (GETPOST('btn_view_ticket_list')) {
    @@ -121,8 +121,8 @@ if ($action == "view_ticketlist") {
             }
         }
     
    -    if ($error) {
    -        setEventMessage($object->errors, 'errors');
    +    if ($error || $errors) {
    +        setEventMessages($object->error, $object->errors, 'errors');
             $action = '';
         }
     }
    @@ -182,7 +182,7 @@ if ($action == "view_ticketlist")
             // fetch optionals attributes and labels
             $extrafields = new ExtraFields($db);
             $extralabels = $extrafields->fetch_name_optionals_label('ticket');
    -        $search_array_options = $extrafields->getOptionalsFromPost($extralabels, '', 'search_');
    +        $search_array_options = $extrafields->getOptionalsFromPost('ticket', '', 'search_');
     
             $filter = array();
             $param = '';
    diff --git a/htdocs/public/ticket/view.php b/htdocs/public/ticket/view.php
    index 5383133c42e..af4585622dd 100644
    --- a/htdocs/public/ticket/view.php
    +++ b/htdocs/public/ticket/view.php
    @@ -1,5 +1,6 @@
     <?php
    -/*  Copyright (C) - 2013-2016    Jean-François FERRY    <hello@librethic.io>
    +/* Copyright (C) 2013-2016  Jean-François FERRY     <hello@librethic.io>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,7 +45,7 @@ $langs->loadLangs(array("companies","other","ticket"));
     
     // Get parameters
     $track_id = GETPOST('track_id', 'alpha');
    -$action = GETPOST('action', 'alpha', 3);
    +$action = GETPOST('action', 'aZ09');
     $email = GETPOST('email', 'alpha');
     
     if (GETPOST('btn_view_ticket')) {
    @@ -112,8 +113,8 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" |
             }
         }
     
    -    if ($error) {
    -        setEventMessage($object->errors, 'errors');
    +    if ($error || $errors) {
    +        setEventMessages($object->error, $object->errors, 'errors');
             $action = '';
         }
     }
    @@ -145,10 +146,7 @@ if ($action == "view_ticket" || $action == "add_message" || $action == "close" |
         if ($display_ticket) {
             // Confirmation close
             if ($action == 'close') {
    -            $ret = $form->form_confirm($_SERVER["PHP_SELF"] . "?track_id=" . $track_id, $langs->trans("CloseATicket"), $langs->trans("ConfirmCloseAticket"), "confirm_public_close", '', '', 1);
    -            if ($ret == 'html') {
    -                print '<br>';
    -            }
    +            print $form->form_confirm($_SERVER["PHP_SELF"] . "?track_id=" . $track_id, $langs->trans("CloseATicket"), $langs->trans("ConfirmCloseAticket"), "confirm_public_close", '', '', 1);
             }
     
             print '<div id="form_view_ticket">';
    diff --git a/htdocs/public/website/index.php b/htdocs/public/website/index.php
    index b61c02e9d63..19abc48094b 100644
    --- a/htdocs/public/website/index.php
    +++ b/htdocs/public/website/index.php
    @@ -18,8 +18,7 @@
     /**
      *     	\file       htdocs/public/website/index.php
      *		\ingroup    website
    - *		\brief      Page to output pages
    - *		\author	    Laurent Destailleur
    + *		\brief      Wrapper to output pages when website is powered by Dolibarr instead of a native web server
      */
     
     if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL',1); // Disables token renewal
    @@ -34,13 +33,17 @@ if (! defined('NOREQUIREAJAX'))  define('NOREQUIREAJAX','1');
      *
      * @return	void
      */
    -function llxHeader() { }
    +function llxHeader()
    +{
    +}
     /**
      * Footer empty
      *
      * @return	void
      */
    -function llxFooter() { }
    +function llxFooter()
    +{
    +}
     
     require '../../master.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    @@ -55,87 +58,91 @@ $accessallowed = 1;
     $type='';
     
     
    -/*
    - * View
    - */
    +if (empty($pageid))
    +{
    +	require_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
    +	require_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
    +
    +	$object=new Website($db);
    +	$object->fetch(0, $websitekey);
    +
    +	if (empty($object->id))
    +	{
    +		if (empty($pageid))
    +		{
    +			// Return header 404
    +			header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
    +
    +			include DOL_DOCUMENT_ROOT.'/public/error-404.php';
    +			exit;
    +		}
    +	}
    +
    +	$objectpage=new WebsitePage($db);
    +
    +	if ($pageref)
    +	{
    +		$result=$objectpage->fetch(0, $object->id, $pageref);
    +		if ($result > 0)
    +		{
    +			$pageid = $objectpage->id;
    +		}
    +		elseif($result == 0)
    +		{
    +			// Page not found from ref=pageurl, we try using alternative alias
    +			$result=$objectpage->fetch(0, $object->id, null, $pageref);
    +			if ($result > 0)
    +			{
    +				$pageid = $objectpage->id;
    +			}
    +		}
    +	}
    +	else
    +	{
    +		if ($object->fk_default_home > 0)
    +		{
    +			$result=$objectpage->fetch($object->fk_default_home);
    +			if ($result > 0)
    +			{
    +				$pageid = $objectpage->id;
    +			}
    +		}
    +
    +		if (empty($pageid))
    +		{
    +			$array=$objectpage->fetchAll($object->id);
    +			if (is_array($array) && count($array) > 0)
    +			{
    +				$firstrep=reset($array);
    +				$pageid=$firstrep->id;
    +			}
    +		}
    +	}
    +}
    +if (empty($pageid))
    +{
    +	// Return header 404
    +	header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
    +
    +	$langs->load("website");
    +
    +	if (! GETPOSTISSET('pageref')) print $langs->trans("PreviewOfSiteNotYetAvailable", $websitekey);
    +
    +	include DOL_DOCUMENT_ROOT.'/public/error-404.php';
    +	exit;
    +}
     
     $appli=constant('DOL_APPLICATION_TITLE');
     if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_APPLICATION_TITLE;
     
    +
    +
    +/*
    + * View
    + */
    +
     //print 'Directory with '.$appli.' websites.<br>';
     
    -if (empty($pageid))
    -{
    -    require_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
    -    require_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
    -
    -    $object=new Website($db);
    -    $object->fetch(0, $websitekey);
    -
    -	if (empty($object->id))
    -    {
    -        if (empty($pageid))
    -        {
    -            // Return header 404
    -            header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
    -
    -            include DOL_DOCUMENT_ROOT.'/public/error-404.php';
    -            exit;
    -        }
    -    }
    -
    -    $objectpage=new WebsitePage($db);
    -
    -    if ($pageref)
    -    {
    -    	$result=$objectpage->fetch(0, $object->id, $pageref);
    -    	if ($result > 0)
    -	    {
    -	        $pageid = $objectpage->id;
    -	    }
    -	    elseif($result == 0)
    -	    {
    -	    	// Page not found from ref=pageurl, we try using alternative alias
    -	    	$result=$objectpage->fetch(0, $object->id, null, $pageref);
    -	    	if ($result > 0)
    -	    	{
    -	    		$pageid = $objectpage->id;
    -	    	}
    -	    }
    -    }
    -    else
    -    {
    -	    if ($object->fk_default_home > 0)
    -	    {
    -	        $result=$objectpage->fetch($object->fk_default_home);
    -	        if ($result > 0)
    -	        {
    -	            $pageid = $objectpage->id;
    -	        }
    -	    }
    -
    -	    if (empty($pageid))
    -	    {
    -	        $array=$objectpage->fetchAll($object->id);
    -	        if (is_array($array) && count($array) > 0)
    -	        {
    -	            $firstrep=reset($array);
    -	            $pageid=$firstrep->id;
    -	        }
    -	    }
    -    }
    -}
    -if (empty($pageid))
    -{
    -    // Return header 404
    -    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
    -
    -    $langs->load("website");
    -    print $langs->trans("PreviewOfSiteNotYetAvailable");
    -
    -    include DOL_DOCUMENT_ROOT.'/public/error-404.php';
    -    exit;
    -}
     
     // Security: Delete string ../ into $original_file
     global $dolibarr_main_data_root;
    @@ -203,4 +210,3 @@ print '<!-- Page content '.$original_file.' rendered with DOLIBARR SERVER : Html
     include_once $original_file_osencoded;		// Note: The pageXXX.tpl.php showed here contains a formatage with dolWebsiteOutput() at end of page.
     
     if (is_object($db)) $db->close();
    -
    diff --git a/htdocs/public/website/styles.css.php b/htdocs/public/website/styles.css.php
    index 36e93d00faf..3e2462d889c 100644
    --- a/htdocs/public/website/styles.css.php
    +++ b/htdocs/public/website/styles.css.php
    @@ -33,13 +33,17 @@ if (! defined('NOREQUIREAJAX'))  define('NOREQUIREAJAX','1');
      *
      * @return	void
      */
    -function llxHeader() { }
    +function llxHeader()
    +{
    +}
     /**
      * Footer empty
      *
      * @return	void
      */
    -function llxFooter() { }
    +function llxFooter()
    +{
    +}
     
     require '../../master.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
    @@ -81,7 +85,7 @@ if (empty($pageid))
         $objectpage=new WebsitePage($db);
         $array=$objectpage->fetchAll($object->id);
     
    -    if (count($array) > 0)
    +    if (is_array($array) && count($array) > 0)
         {
             $firstrep=reset($array);
             $pageid=$firstrep->id;
    @@ -145,4 +149,3 @@ require_once $original_file_osencoded;
     
     
     if (is_object($db)) $db->close();
    -
    diff --git a/htdocs/resource/agenda.php b/htdocs/resource/agenda.php
    new file mode 100644
    index 00000000000..f4980e698da
    --- /dev/null
    +++ b/htdocs/resource/agenda.php
    @@ -0,0 +1,175 @@
    +<?php
    +/* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    + * Copyright (C) 2005      Brice Davoleau       <brice.davoleau@gmail.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
    + * Copyright (C) 2006-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2007      Patrick Raguin  		<patrick.raguin@gmail.com>
    + * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
    + * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    + * Copyright (C) 2018      Florain Henry        <florian.henry@open-concept.pro
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *  \file       htdocs/resource/agenda.php
    + *  \ingroup    resource
    + *  \brief      Page of resource events
    + */
    +
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/resource.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/resource/class/dolresource.class.php';
    +
    +// Load translation files required by the page
    +$langs->load("companies");
    +
    +if (GETPOST('actioncode','array'))
    +{
    +    $actioncode=GETPOST('actioncode','array',3);
    +    if (! count($actioncode)) $actioncode='0';
    +}
    +else
    +{
    +    $actioncode=GETPOST("actioncode","alpha",3)?GETPOST("actioncode","alpha",3):(GETPOST("actioncode")=='0'?'0':(empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT)?'':$conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT));
    +}
    +$search_agenda_label=GETPOST('search_agenda_label');
    +
    +// Security check
    +$id = GETPOST('id','int');
    +$ref = GETPOST('ref', 'alpha');
    +if ($user->societe_id) $id=$user->societe_id;
    +// Protection if external user
    +if ($user->socid > 0)
    +{
    +	accessforbidden();
    +}
    +
    +if( ! $user->rights->resource->read)
    +{
    +	accessforbidden();
    +}
    +
    +$limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
    +$sortfield = GETPOST("sortfield",'alpha');
    +$sortorder = GETPOST("sortorder",'alpha');
    +$page = GETPOST("page",'int');
    +if (empty($page) || $page == -1) { $page = 0; }     // If $page is not defined, or '' or -1
    +$offset = $limit * $page;
    +$pageprev = $page - 1;
    +$pagenext = $page + 1;
    +if (! $sortfield) $sortfield='a.datep,a.id';
    +if (! $sortorder) $sortorder='DESC,DESC';
    +
    +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
    +$hookmanager->initHooks(array('agendaresource'));
    +
    +
    +/*
    + *	Actions
    + */
    +
    +$parameters=array('id'=>$id);
    +$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
    +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +
    +if (empty($reshook))
    +{
    +    // Cancel
    +    if (GETPOST('cancel','alpha') && ! empty($backtopage))
    +    {
    +        header("Location: ".$backtopage);
    +        exit;
    +    }
    +
    +    // Purge search criteria
    +    if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers
    +    {
    +        $actioncode='';
    +        $search_agenda_label='';
    +    }
    +}
    +
    +
    +
    +/*
    + *	View
    + */
    +
    +$contactstatic = new Contact($db);
    +
    +$form = new Form($db);
    +
    +if ($id > 0 || $ref)
    +{
    +	require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    +	require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
    +
    +	$langs->load("companies");
    +	$picto = 'resource';
    +
    +	$object = new Dolresource($db);
    +	$result = $object->fetch($id);
    +
    +	$title=$langs->trans("Agenda");
    +	if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/productnameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->ref." - ".$title;
    +	llxHeader('',$title);
    +
    +	if (! empty($conf->notification->enabled)) $langs->load("mails");
    +	$type = $langs->trans('ResourceSingular');
    +
    +	$head = resource_prepare_head($object);
    +
    +	$titre=$langs->trans("ResourceSingular");
    +	dol_fiche_head($head, 'agenda', $titre, -1, $picto);
    +
    +    $linkback = '<a href="'.DOL_URL_ROOT.'/resource/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
    +
    +    $shownav = 1;
    +    if ($user->societe_id && ! in_array('resource', explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL))) $shownav=0;
    +
    +    dol_banner_tab($object, 'id', $linkback, $shownav, 'id');
    +
    +    print '<div class="fichecenter">';
    +
    +    print '<div class="underbanner clearboth"></div>';
    +
    +	print '</div>';
    +
    +	dol_fiche_end();
    +
    +    if (! empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read) ))
    +    {
    +    	print '<br>';
    +
    +        $param='&id='.$id;
    +        if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
    +        if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
    +
    +		print_barre_liste($langs->trans("ActionsOnResource"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlcenter, '', 0, 1, 1);
    +
    +        // List of all actions
    +		$filters=array();
    +        $filters['search_agenda_label']=$search_agenda_label;
    +
    +        // TODO Replace this with same code than into list.php
    +        show_actions_done($conf,$langs,$db,$object,null,0,$actioncode, '', $filters, $sortfield, $sortorder);
    +    }
    +}
    +
    +// End of page
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/resource/card.php b/htdocs/resource/card.php
    index 832f70f4ea1..8fd7f5bcd13 100644
    --- a/htdocs/resource/card.php
    +++ b/htdocs/resource/card.php
    @@ -22,12 +22,7 @@
      */
     
     
    -// Change this following line to use the correct relative path (../, ../../, etc)
    -$res=0;
    -$res=@include("../main.inc.php");				// For root directory
    -if (! $res) $res=@include("../../main.inc.php");	// For "custom" directory
    -if (! $res) die("Include of main fails");
    -
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     require_once DOL_DOCUMENT_ROOT.'/resource/class/dolresource.class.php';
     require_once DOL_DOCUMENT_ROOT.'/resource/class/html.formresource.class.php';
    @@ -176,7 +171,6 @@ if (empty($reshook))
     					setEventMessages($object->error, $object->errors, 'errors');
     					$error++;
     				}
    -
     			}
     			else
     			{
    @@ -256,7 +250,7 @@ if ($action == 'create' || $object->fetch($id) > 0)
     
     		// Ref
     		print '<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans("ResourceFormLabel_ref").'</td>';
    -		print '<td><input class="minwidth200" name="ref" value="'.($ref ? $ref : $object->ref).'"></td></tr>';
    +		print '<td><input class="minwidth200" name="ref" value="'.($ref ? $ref : $object->ref).'" autofocus="autofocus"></td></tr>';
     
     		// Type
     		print '<tr><td>'.$langs->trans("ResourceType").'</td>';
    @@ -406,8 +400,6 @@ else {
     	dol_print_error();
     }
     
    -
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/resource/class/dolresource.class.php b/htdocs/resource/class/dolresource.class.php
    index 7c3999db7c9..ad3355e3972 100644
    --- a/htdocs/resource/class/dolresource.class.php
    +++ b/htdocs/resource/class/dolresource.class.php
    @@ -19,19 +19,26 @@
      *  \file      	resource/class/resource.class.php
      *  \ingroup    resource
      *  \brief      Class file for resource object
    -
      */
     
     require_once DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php";
     require_once DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php";
     
     /**
    - *	DAO Resource object
    + *  DAO Resource object
      */
     class Dolresource extends CommonObject
     {
    -	public $element='dolresource';			//!< Id that identify managed objects
    -	public $table_element='resource';	//!< Name of table without prefix where object is stored
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='dolresource';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='resource';
    +
         public $picto = 'resource';
     
     	public $resource_id;
    @@ -40,7 +47,12 @@ class Dolresource extends CommonObject
     	public $element_type;
     	public $busy;
     	public $mandatory;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_create;
    +
     	public $type_label;
     	public $tms='';
     
    @@ -54,20 +66,19 @@ class Dolresource extends CommonObject
         function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
         /**
          *  Create object into database
          *
    -     *  @param	User	$user        User that creates
    +     *  @param	User    $user        User that creates
          *  @param  int		$notrigger   0=launch triggers after, 1=disable triggers
          *  @return int      		   	 <0 if KO, Id of created object if OK
          */
         function create($user, $notrigger=0)
         {
    -    	global $conf, $langs, $hookmanager;
    -    	$error=0;
    +        global $conf, $langs, $hookmanager;
    +        $error=0;
     
         	// Clean parameters
     
    @@ -326,6 +337,7 @@ class Dolresource extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Load object in memory from database
          *
    @@ -334,6 +346,7 @@ class Dolresource extends CommonObject
          */
         function fetch_element_resource($id)
         {
    +        // phpcs:enable
         	global $langs;
         	$sql = "SELECT";
         	$sql.= " t.rowid,";
    @@ -371,7 +384,6 @@ class Dolresource extends CommonObject
     				if($obj->element_id && $obj->element_type) {
     					$this->objelement = fetchObjectByElement($obj->element_id,$obj->element_type);
     				}
    -
         		}
         		$this->db->free($resql);
     
    @@ -470,6 +482,7 @@ class Dolresource extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Load resource objects into $this->lines
          *
    @@ -482,6 +495,7 @@ class Dolresource extends CommonObject
          */
         function fetch_all($sortorder, $sortfield, $limit, $offset, $filter='')
         {
    +        // phpcs:enable
         	global $conf;
         	$sql="SELECT ";
         	$sql.= " t.rowid,";
    @@ -491,7 +505,7 @@ class Dolresource extends CommonObject
         	$sql.= " t.fk_code_type_resource,";
         	$sql.= " t.tms,";
     
    -    	require_once(DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php');
    +    	require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
         	$extrafields=new ExtraFields($this->db);
         	$extralabels=$extrafields->fetch_name_optionals_label($this->table_element,true);
         	if (is_array($extralabels) && count($extralabels)>0) {
    @@ -563,9 +577,9 @@ class Dolresource extends CommonObject
         		$this->error = $this->db->lasterror();
         		return -1;
         	}
    -
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
          /**
          *	Load all objects into $this->lines
          *
    @@ -578,6 +592,7 @@ class Dolresource extends CommonObject
          */
         function fetch_all_resources($sortorder, $sortfield, $limit, $offset, $filter='')
         {
    +        // phpcs:enable
        		global $conf;
        		$sql="SELECT ";
        		$sql.= " t.rowid,";
    @@ -630,7 +645,6 @@ class Dolresource extends CommonObject
     					if($obj->element_id && $obj->element_type)
     						$line->objelement = fetchObjectByElement($obj->element_id,$obj->element_type);
             			$this->lines[] = $line;
    -
        				}
        				$this->db->free($resql);
        			}
    @@ -641,9 +655,9 @@ class Dolresource extends CommonObject
        			$this->error = $this->db->lasterror();
        			return -1;
        		}
    -
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Load all objects into $this->lines
          *
    @@ -656,6 +670,7 @@ class Dolresource extends CommonObject
          */
         function fetch_all_used($sortorder, $sortfield, $limit, $offset=1, $filter='')
         {
    +        // phpcs:enable
         	global $conf;
     
         	if ( ! $sortorder) $sortorder="ASC";
    @@ -719,9 +734,9 @@ class Dolresource extends CommonObject
         		$this->error = $this->db->lasterror();
         		return -1;
         	}
    -
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * Fetch all resources available, declared by modules
          * Load available resource in array $this->available_resources
    @@ -730,7 +745,9 @@ class Dolresource extends CommonObject
          * @deprecated, remplaced by hook getElementResources
          * @see getElementResources()
          */
    -    function fetch_all_available() {
    +    function fetch_all_available()
    +    {
    +        // phpcs:enable
         	global $conf;
     
         	if (! empty($conf->modules_parts['resources']))
    @@ -742,6 +759,7 @@ class Dolresource extends CommonObject
         	return 0;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Update element resource into database
          *
    @@ -751,6 +769,7 @@ class Dolresource extends CommonObject
          */
         function update_element_resource($user=null, $notrigger=0)
         {
    +        // phpcs:enable
         	global $conf, $langs;
     		$error=0;
     
    @@ -866,10 +885,10 @@ class Dolresource extends CommonObject
                 $i++;
             }
             return $i;
    -
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *      Load in cache resource type code (setup in dictionary)
          *
    @@ -877,6 +896,7 @@ class Dolresource extends CommonObject
          */
         function load_cache_code_type_resource()
         {
    +        // phpcs:enable
         	global $langs;
     
         	if (count($this->cache_code_type_resource)) return 0;    // Cache deja charge
    @@ -956,6 +976,7 @@ class Dolresource extends CommonObject
             return $this->LibStatut($this->status,$mode);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Return the status
          *
    @@ -965,6 +986,7 @@ class Dolresource extends CommonObject
          */
         static function LibStatut($status,$mode=0)
         {
    +        // phpcs:enable
             global $langs;
     
             return '';
    diff --git a/htdocs/resource/class/html.formresource.class.php b/htdocs/resource/class/html.formresource.class.php
    index 19bed957f74..c118643aa7d 100644
    --- a/htdocs/resource/class/html.formresource.class.php
    +++ b/htdocs/resource/class/html.formresource.class.php
    @@ -21,8 +21,8 @@
      *       \ingroup    core
      *       \brief      Class file to manage forms into resource module
      */
    -require_once(DOL_DOCUMENT_ROOT ."/core/class/html.form.class.php");
    -require_once(DOL_DOCUMENT_ROOT ."/resource/class/dolresource.class.php");
    +require_once DOL_DOCUMENT_ROOT ."/core/class/html.form.class.php";
    +require_once DOL_DOCUMENT_ROOT ."/resource/class/dolresource.class.php";
     
     
     /**
    @@ -33,12 +33,19 @@ require_once(DOL_DOCUMENT_ROOT ."/resource/class/dolresource.class.php");
      */
     class FormResource
     {
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -    var $substit=array();
    -    var $param=array();
    +    public $substit=array();
     
    -    var $error;
    +    public $param=array();
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
     
     	/**
    @@ -49,11 +56,10 @@ class FormResource
         function __construct($db)
         {
             $this->db = $db;
    -
    -        return 1;
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Output html form to select a resource
          *
    @@ -71,6 +77,7 @@ class FormResource
          */
         function select_resource_list($selected='',$htmlname='fk_resource',$filter='',$showempty=0, $showtype=0, $forcecombo=0, $event=array(), $filterkey='', $outputmode=0, $limit=20)
         {
    +        // phpcs:enable
         	global $conf,$user,$langs;
     
         	$out='';
    @@ -148,20 +155,22 @@ class FormResource
         	return $out;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     *      Return html list of tickets type
    +     *  Return html list of tickets type
          *
    -     *      @param	string	$selected       Id du type pre-selectionne
    -     *      @param  string	$htmlname       Nom de la zone select
    -     *      @param  string	$filtertype     To filter on field type in llx_c_ticket_type (array('code'=>xx,'label'=>zz))
    -     *      @param  int		$format         0=id+libelle, 1=code+code, 2=code+libelle, 3=id+code
    -     *      @param  int		$empty			1=peut etre vide, 0 sinon
    -     * 		@param	int		$noadmininfo	0=Add admin info, 1=Disable admin info
    -     *      @param  int		$maxlength      Max length of label
    -     * 		@return	void
    +     *  @param	string	$selected       Id du type pre-selectionne
    +     *  @param  string	$htmlname       Nom de la zone select
    +     *  @param  string	$filtertype     To filter on field type in llx_c_ticket_type (array('code'=>xx,'label'=>zz))
    +     *  @param  int		$format         0=id+libelle, 1=code+code, 2=code+libelle, 3=id+code
    +     *  @param  int		$empty			1=peut etre vide, 0 sinon
    +     *  @param	int		$noadmininfo	0=Add admin info, 1=Disable admin info
    +     *  @param  int		$maxlength      Max length of label
    +     * 	@return	void
          */
         function select_types_resource($selected='',$htmlname='type_resource',$filtertype='',$format=0, $empty=0, $noadmininfo=0,$maxlength=0)
         {
    +        // phpcs:enable
         	global $langs,$user;
     
         	$resourcestat = new Dolresource($this->db);
    @@ -202,8 +211,4 @@ class FormResource
         	print '</select>';
         	if ($user->admin && ! $noadmininfo) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
         }
    -
    -
    -
     }
    -
    diff --git a/htdocs/resource/contact.php b/htdocs/resource/contact.php
    index 981a07d7e73..e4f588b7f0d 100644
    --- a/htdocs/resource/contact.php
    +++ b/htdocs/resource/contact.php
    @@ -1,8 +1,8 @@
     <?php
    -/* Copyright (C) 2005-2012  Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005-2012  Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007-2009  Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2012       Juanjo Menent        <jmenent@2byte.es>
    - * Copyright (C) 2016		    Gilles Poirier		   <glgpoirier@gmail.com>
    + * Copyright (C) 2016		Gilles Poirier		 <glgpoirier@gmail.com>
     
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -47,7 +47,7 @@ $result = $object->fetch($id,$ref);
     
     
     /*
    - * Ajout d'un nouveau contact
    + * Add a new contact
      */
     
     if ($action == 'addcontact' && $user->rights->resource->write)
    @@ -72,17 +72,17 @@ if ($action == 'addcontact' && $user->rights->resource->write)
     			$mesg = $object->error;
     		}
     
    -		setEventMessage($mesg, 'errors');
    +		setEventMessages($mesg, null, 'errors');
     	}
     }
     
    -// bascule du statut d'un contact
    +// Toggle the status of a contact
     else if ($action == 'swapstatut' && $user->rights->resource->write)
     {
         $result=$object->swapContactStatus(GETPOST('ligne','int'));
     }
     
    -// Efface un contact
    +// Erase a contact
     else if ($action == 'deletecontact' && $user->rights->resource->write)
     {
     	$result = $object->delete_contact(GETPOST('lineid','int'));
    @@ -162,6 +162,6 @@ if ($id > 0 || ! empty($ref))
     	include DOL_DOCUMENT_ROOT.'/core/tpl/contacts.tpl.php';
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/resource/document.php b/htdocs/resource/document.php
    index edaf52baba3..1d2c3efd9e7 100644
    --- a/htdocs/resource/document.php
    +++ b/htdocs/resource/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Simon TOSSER          <simon@kornog-computing.com>
      * Copyright (C) 2011-2012 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
    @@ -91,7 +91,7 @@ if ($object->id)
     	dol_fiche_head($head, 'documents',  $langs->trans("ResourceSingular"), -1, 'resource');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -135,14 +135,12 @@ if ($object->id)
         $permission = $user->rights->resource->write;
     
         include_once DOL_DOCUMENT_ROOT . '/core/tpl/document_actions_post_headers.tpl.php';
    -
     }
     else
     {
     	print $langs->trans("ErrorUnknown");
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/resource/element_resource.php b/htdocs/resource/element_resource.php
    index b9ff15f1461..44a993929a7 100644
    --- a/htdocs/resource/element_resource.php
    +++ b/htdocs/resource/element_resource.php
    @@ -23,11 +23,7 @@
      */
     
     
    -$res=0;
    -$res=@include("../main.inc.php");                               // For root directory
    -if (! $res) $res=@include("../../main.inc.php");        // For "custom" directory
    -if (! $res) die("Include of main fails");
    -
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/resource/class/dolresource.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/fichinter/class/fichinter.class.php';
    @@ -466,7 +462,6 @@ else
     				if(file_exists(dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_view.tpl.php')))
     				{
     					$res=@include dol_buildpath($path.'/core/tpl/resource_'.$element_prop['element'].'_view.tpl.php');
    -
     				}
     				else
     				{
    @@ -477,6 +472,6 @@ else
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/resource/list.php b/htdocs/resource/list.php
    index 85be267613d..55dddcc0a48 100644
    --- a/htdocs/resource/list.php
    +++ b/htdocs/resource/list.php
    @@ -50,7 +50,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     $search_ref=GETPOST("search_ref");
     $search_type=GETPOST("search_type");
     
    @@ -289,5 +289,6 @@ else
     print '</table>';
     print "</form>\n";
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/resource/note.php b/htdocs/resource/note.php
    index 9116cdd0387..79ba2b159a8 100644
    --- a/htdocs/resource/note.php
    +++ b/htdocs/resource/note.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2005-2012	Regis Houssin	  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2005-2012	Regis Houssin	  <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012	Juanjo Menent	  <jmenent@2byte.es>
      * Copyright (C) 2016       Laurent Destailleur <aldy@users.sourceforge.net>
      * Copyright (C) 2013       Florian Henry   <florian.henry@open-concept.pro>
    @@ -100,5 +100,6 @@ if ($id > 0 || ! empty($ref))
     	dol_fiche_end();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/societe/admin/contact_extrafields.php b/htdocs/societe/admin/contact_extrafields.php
    index 4facdd11ea1..2cd65982c8e 100644
    --- a/htdocs/societe/admin/contact_extrafields.php
    +++ b/htdocs/societe/admin/contact_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,8 +28,7 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     
    -$langs->load("companies");
    -$langs->load("admin");
    +$langs->loadLangs(array("companies", "admin"));
     
     $extrafields = new ExtraFields($db);
     $form = new Form($db);
    @@ -81,7 +80,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -94,8 +93,8 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    -    print load_fiche_titre($langs->trans('NewAttribute'));
    +	print '<br><div id="newattrib"></div>';
    +	print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
     }
    @@ -113,6 +112,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/admin/societe.php b/htdocs/societe/admin/societe.php
    index ecbefe2cb1d..dac7f9ea126 100644
    --- a/htdocs/societe/admin/societe.php
    +++ b/htdocs/societe/admin/societe.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
      * Copyright (C) 2005-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012 Juanjo Menent        <jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -29,8 +29,7 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     
    -$langs->load("admin");
    -$langs->load('other');
    +$langs->loadLangs(array("admin", "other"));
     
     $action=GETPOST('action','alpha');
     $value=GETPOST('value','alpha');
    @@ -182,6 +181,21 @@ if ($action=="setaddrefinlist") {
     	}
     }
     
    +//Activate Set adress in list
    +if ($action=="setaddadressinlist") {
    +	$val = GETPOST('value','int');
    +	$res = dolibarr_set_const($db, "COMPANY_SHOW_ADDRESS_SELECTLIST", $val,'yesno',0,'',$conf->entity);
    +	if (! $res > 0) $error++;
    +	if (! $error)
    +	{
    +		setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
    +	}
    +	else
    +	{
    +		setEventMessages($langs->trans("Error"), null, 'errors');
    +	}
    +}
    +
     //Activate Ask For Preferred Shipping Method
     if ($action=="setaskforshippingmet") {
     	$setaskforshippingmet = GETPOST('value','int');
    @@ -197,6 +211,21 @@ if ($action=="setaskforshippingmet") {
     	}
     }
     
    +//Activate "Disable prospect/customer type"
    +if ($action=="setdisableprospectcustomer") {
    +    $setdisableprospectcustomer = GETPOST('value','int');
    +    $res = dolibarr_set_const($db, "SOCIETE_DISABLE_PROSPECTSCUSTOMERS", $setdisableprospectcustomer,'yesno',0,'',$conf->entity);
    +    if (! $res > 0) $error++;
    +    if (! $error)
    +    {
    +        setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
    +    }
    +    else
    +    {
    +        setEventMessages($langs->trans("Error"), null, 'errors');
    +    }
    +}
    +
     //Activate ProfId unique
     if ($action == 'setprofid')
     {
    @@ -759,7 +788,6 @@ if (!empty($conf->global->SOCIETE_ADD_REF_IN_LIST))
     {
     	print '<a href="'.$_SERVER['PHP_SELF'].'?action=setaddrefinlist&value=0">';
     	print img_picto($langs->trans("Activated"),'switch_on');
    -
     }
     else
     {
    @@ -769,6 +797,23 @@ else
     print '</a></td>';
     print '</tr>';
     
    +print '<tr class="oddeven">';
    +print '<td width="80%">'.$langs->trans("AddAdressInList").'</td>';
    +print '<td>&nbsp</td>';
    +print '<td align="center">';
    +if (!empty($conf->global->COMPANY_SHOW_ADDRESS_SELECTLIST))
    +{
    +	print '<a href="'.$_SERVER['PHP_SELF'].'?action=setaddadressinlist&value=0">';
    +	print img_picto($langs->trans("Activated"),'switch_on');
    +}
    +else
    +{
    +	print '<a href="'.$_SERVER['PHP_SELF'].'?action=setaddadressinlist&value=1">';
    +	print img_picto($langs->trans("Disabled"),'switch_off');
    +}
    +print '</a></td>';
    +print '</tr>';
    +
     
     
     print '<tr class="oddeven">';
    @@ -779,7 +824,6 @@ if (!empty($conf->global->SOCIETE_ASK_FOR_SHIPPING_METHOD))
     {
     	print '<a href="'.$_SERVER['PHP_SELF'].'?action=setaskforshippingmet&value=0">';
     	print img_picto($langs->trans("Activated"),'switch_on');
    -
     }
     else
     {
    @@ -789,6 +833,24 @@ else
     print '</a></td>';
     print '</tr>';
     
    +// Disable Prospect/Customer thirdparty type
    +print '<tr class="oddeven">';
    +print '<td width="80%">'.$langs->trans("DisableProspectCustomerType").'</td>';
    +print '<td>&nbsp</td>';
    +print '<td align="center">';
    +if (!empty($conf->global->SOCIETE_DISABLE_PROSPECTSCUSTOMERS))
    +{
    +    print '<a href="'.$_SERVER['PHP_SELF'].'?action=setdisableprospectcustomer&value=0">';
    +    print img_picto($langs->trans("Activated"),'switch_on');
    +}
    +else
    +{
    +    print '<a href="'.$_SERVER['PHP_SELF'].'?action=setdisableprospectcustomer&value=1">';
    +    print img_picto($langs->trans("Disabled"),'switch_off');
    +}
    +print '</a></td>';
    +print '</tr>';
    +
     /*print '<tr class="oddeven">';
     print '<td width="80%">'.$langs->trans("OnSearchAndListGoOnCustomerOrSupplierCard").'</td>';
     print '<td>&nbsp</td>';
    @@ -835,7 +897,6 @@ print '</form>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/admin/societe_extrafields.php b/htdocs/societe/admin/societe_extrafields.php
    index 06dc57677f5..1ae10d10703 100644
    --- a/htdocs/societe/admin/societe_extrafields.php
    +++ b/htdocs/societe/admin/societe_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -28,9 +28,7 @@ require '../../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     
    -$langs->load("companies");
    -$langs->load("admin");
    -$langs->load("members");
    +$langs->loadLangs(array("companies", "admin", "members"));
     
     $extrafields = new ExtraFields($db);
     $form = new Form($db);
    @@ -82,7 +80,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -95,7 +93,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    +    print '<br><div id="newattrib"></div>';
         print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -108,12 +106,12 @@ if ($action == 'create')
     /* ************************************************************************** */
     if ($action == 'edit' && ! empty($attrname))
     {
    -    print "<br>";
    +    print '<br><div id="editattrib"></div>';
         print load_fiche_titre($langs->trans("FieldEdition", $attrname));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/agenda.php b/htdocs/societe/agenda.php
    index ebd35a6575c..d682ad43d4d 100644
    --- a/htdocs/societe/agenda.php
    +++ b/htdocs/societe/agenda.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005      Brice Davoleau       <brice.davoleau@gmail.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2007      Patrick Raguin  		<patrick.raguin@gmail.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
    @@ -190,7 +190,6 @@ if ($socid > 0)
         }
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/ajax/company.php b/htdocs/societe/ajax/company.php
    index d62c8a445d6..2cfdce9c01c 100644
    --- a/htdocs/societe/ajax/company.php
    +++ b/htdocs/societe/ajax/company.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/societe/ajaxcompanies.php b/htdocs/societe/ajaxcompanies.php
    index 9d38a97a0a0..15ef4dd19e7 100644
    --- a/htdocs/societe/ajaxcompanies.php
    +++ b/htdocs/societe/ajaxcompanies.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2007-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2010      Cyrille de Lambert   <info@auguria.net>
      *
    diff --git a/htdocs/societe/ajaxcountries.php b/htdocs/societe/ajaxcountries.php
    index b9d1bf5fc8c..f67d01facce 100644
    --- a/htdocs/societe/ajaxcountries.php
    +++ b/htdocs/societe/ajaxcountries.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006      Andre Cianfarani     <acianfa@free.fr>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/societe/canvas/actions_card_common.class.php b/htdocs/societe/canvas/actions_card_common.class.php
    index 37082f4140b..ffcd7c7a00f 100644
    --- a/htdocs/societe/canvas/actions_card_common.class.php
    +++ b/htdocs/societe/canvas/actions_card_common.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -27,7 +27,11 @@
      */
     abstract class ActionsCardCommon
     {
    -    var $db;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
         var $dirmodule;
         var $targetmodule;
         var $canvas;
    @@ -37,10 +41,17 @@ abstract class ActionsCardCommon
     	var $tpl = array();
     	//! Object container
     	var $object;
    -	//! Error string
    -	var $error;
    -	//! Error array
    -	var $errors=array();
    +
    +	/**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
    +
    +
    +	/**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
     
     
     	/**
    @@ -59,6 +70,7 @@ abstract class ActionsCardCommon
         	$this->object = $object;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Assign custom values for canvas (for example into this->tpl to be used by templates)
     	 *
    @@ -69,6 +81,7 @@ abstract class ActionsCardCommon
          */
         function assign_values(&$action, $id=0, $ref='')
         {
    +        // phpcs:enable
             global $conf, $langs, $user, $mysoc, $canvas;
             global $form, $formadmin, $formcompany;
     
    @@ -245,7 +258,6 @@ abstract class ActionsCardCommon
                         $this->tpl['localtax'].= '</td><tr>';
                     }
                 }
    -
             }
             else
             {
    @@ -358,6 +370,7 @@ abstract class ActionsCardCommon
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
         /**
          *  Assign POST values into object
          *
    @@ -366,6 +379,7 @@ abstract class ActionsCardCommon
          */
         private function assign_post($action)
         {
    +        // phpcs:enable
             global $langs, $mysoc;
     
             $this->object->id					=	$_POST["socid"];
    @@ -380,7 +394,7 @@ abstract class ActionsCardCommon
             $this->object->town					=	$_POST["town"];
             $this->object->country_id			=	$_POST["country_id"]?$_POST["country_id"]:$mysoc->country_id;
             $this->object->state_id		        =	$_POST["state_id"];
    -        $this->object->phone					=	$_POST["tel"];
    +        $this->object->phone				=	$_POST["tel"];
             $this->object->fax					=	$_POST["fax"];
             $this->object->email				=	$_POST["email"];
             $this->object->url					=	$_POST["url"];
    @@ -411,5 +425,4 @@ abstract class ActionsCardCommon
                 $this->object->country_label=	$tmparray['label'];
             }
         }
    -
     }
    diff --git a/htdocs/societe/canvas/company/actions_card_company.class.php b/htdocs/societe/canvas/company/actions_card_company.class.php
    index 419a5ecb73e..c8b1a296e24 100644
    --- a/htdocs/societe/canvas/company/actions_card_company.class.php
    +++ b/htdocs/societe/canvas/company/actions_card_company.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011	Regis Houssin        <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011	Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2011		Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -67,6 +67,7 @@ class ActionsCardCompany extends ActionsCardCommon
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Assign custom values for canvas (for example into this->tpl to be used by templates)
     	 *
    @@ -77,6 +78,7 @@ class ActionsCardCompany extends ActionsCardCommon
     	 */
     	function assign_values(&$action, $id=0, $ref='')
     	{
    +        // phpcs:enable
     		global $conf, $langs, $user, $mysoc;
     		global $form, $formadmin, $formcompany;
     
    @@ -179,7 +181,6 @@ class ActionsCardCompany extends ActionsCardCommon
     				{
     					$this->tpl['tva_intra'] = $s;
     				}
    -
     			}
     			else
     			{
    @@ -218,6 +219,4 @@ class ActionsCardCompany extends ActionsCardCommon
     	{
     		return restrictedArea($user,$features,$objectid,$dbtablename,$feature2,$dbt_keyfield,$dbt_select);
     	}
    -
     }
    -
    diff --git a/htdocs/societe/canvas/company/tpl/card_create.tpl.php b/htdocs/societe/canvas/company/tpl/card_create.tpl.php
    index 795acefb43c..5007fe32af4 100644
    --- a/htdocs/societe/canvas/company/tpl/card_create.tpl.php
    +++ b/htdocs/societe/canvas/company/tpl/card_create.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010      Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010      Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2012 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php
    index 6edf5a16b2e..f06b6aa5446 100644
    --- a/htdocs/societe/canvas/company/tpl/card_edit.tpl.php
    +++ b/htdocs/societe/canvas/company/tpl/card_edit.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010      Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010      Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2012 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/societe/canvas/company/tpl/card_view.tpl.php b/htdocs/societe/canvas/company/tpl/card_view.tpl.php
    index 24ddfbaaaac..26cf6bb6787 100644
    --- a/htdocs/societe/canvas/company/tpl/card_view.tpl.php
    +++ b/htdocs/societe/canvas/company/tpl/card_view.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/societe/canvas/individual/actions_card_individual.class.php b/htdocs/societe/canvas/individual/actions_card_individual.class.php
    index 78064004e37..6107d8ac8b1 100644
    --- a/htdocs/societe/canvas/individual/actions_card_individual.class.php
    +++ b/htdocs/societe/canvas/individual/actions_card_individual.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011 Regis Houssin  <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011 Regis Houssin  <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -84,6 +84,7 @@ class ActionsCardIndividual extends ActionsCardCommon
     		return $return;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Assign custom values for canvas (for example into this->tpl to be used by templates)
     	 *
    @@ -94,6 +95,7 @@ class ActionsCardIndividual extends ActionsCardCommon
     	 */
     	function assign_values(&$action, $id=0, $ref='')
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     		global $form, $formcompany;
     
    @@ -134,6 +136,4 @@ class ActionsCardIndividual extends ActionsCardCommon
     	{
     		return restrictedArea($user,$features,$objectid,$dbtablename,$feature2,$dbt_keyfield,$dbt_select);
     	}
    -
     }
    -
    diff --git a/htdocs/societe/canvas/individual/tpl/card_create.tpl.php b/htdocs/societe/canvas/individual/tpl/card_create.tpl.php
    index 121422c520f..b1d02006f16 100644
    --- a/htdocs/societe/canvas/individual/tpl/card_create.tpl.php
    +++ b/htdocs/societe/canvas/individual/tpl/card_create.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011 Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011 Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2012 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php
    index 11d6a0430ca..7319b394d56 100644
    --- a/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php
    +++ b/htdocs/societe/canvas/individual/tpl/card_edit.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010      Regis Houssin       <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010      Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2010-2012 Laurent Destailleur <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/societe/canvas/individual/tpl/card_view.tpl.php b/htdocs/societe/canvas/individual/tpl/card_view.tpl.php
    index fd9b3487f50..18023d93978 100644
    --- a/htdocs/societe/canvas/individual/tpl/card_view.tpl.php
    +++ b/htdocs/societe/canvas/individual/tpl/card_view.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011 Regis Houssin <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php
    index d90c8f2a1f0..80427437488 100644
    --- a/htdocs/societe/card.php
    +++ b/htdocs/societe/card.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2003       Brian Fraval            <brian@fraval.org>
      * Copyright (C) 2004-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2005       Eric Seigne             <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2017  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2008       Patrick Raguin          <patrick.raguin@auguria.net>
      * Copyright (C) 2010-2016  Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2011-2013  Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    @@ -145,7 +145,7 @@ if (empty($reshook))
     				$object->client = $object->client | $soc_origin->client;
     				$object->fournisseur = $object->fournisseur | $soc_origin->fournisseur;
     				$listofproperties=array(
    -					'address', 'zip', 'town', 'state_id', 'country_id', 'phone', 'phone_pro', 'fax', 'email', 'skype', 'url', 'barcode',
    +					'address', 'zip', 'town', 'state_id', 'country_id', 'phone', 'phone_pro', 'fax', 'email', 'skype', 'twitter', 'facebook', 'url', 'barcode',
     					'idprof1', 'idprof2', 'idprof3', 'idprof4', 'idprof5', 'idprof6',
     					'tva_intra', 'effectif_id', 'forme_juridique', 'remise_percent', 'remise_supplier_percent', 'mode_reglement_supplier_id', 'cond_reglement_supplier_id', 'name_bis',
     					'stcomm_id', 'outstanding_limit', 'price_level', 'parent', 'default_lang', 'ref', 'ref_ext', 'import_key', 'fk_incoterms', 'fk_multicurrency',
    @@ -304,13 +304,13 @@ if (empty($reshook))
         if (GETPOST('getcustomercode'))
         {
             // We defined value code_client
    -        $_POST["code_client"]="Acompleter";
    +        $_POST["customer_code"]="Acompleter";
         }
     
         if (GETPOST('getsuppliercode'))
         {
             // We defined value code_fournisseur
    -        $_POST["code_fournisseur"]="Acompleter";
    +        $_POST["supplier_code"]="Acompleter";
         }
     
         if($action=='set_localtax1')
    @@ -371,7 +371,6 @@ if (empty($reshook))
             {
                 setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Supplier")), null, 'errors');
                 $error++;
    -
             }
     
             if (! $error)
    @@ -405,6 +404,8 @@ if (empty($reshook))
     	        $object->country_id				= GETPOST('country_id', 'int');
     	        $object->state_id				= GETPOST('state_id', 'int');
     	        $object->skype					= GETPOST('skype', 'alpha');
    +	        $object->twitter				= GETPOST('twitter', 'alpha');
    +	        $object->facebook				= GETPOST('facebook', 'alpha');
     	        $object->phone					= GETPOST('phone', 'alpha');
     	        $object->fax					= GETPOST('fax','alpha');
     	        $object->email					= trim(GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL));
    @@ -416,8 +417,8 @@ if (empty($reshook))
     	        $object->idprof5				= trim(GETPOST('idprof5', 'alpha'));
     	        $object->idprof6				= trim(GETPOST('idprof6', 'alpha'));
     	        $object->prefix_comm			= GETPOST('prefix_comm', 'alpha');
    -	        $object->code_client			= GETPOST('code_client', 'alpha');
    -	        $object->code_fournisseur		= GETPOST('code_fournisseur', 'alpha');
    +	        $object->code_client			= GETPOSTISSET('customer_code')?GETPOST('customer_code', 'alpha'):GETPOST('code_client', 'alpha');
    +	        $object->code_fournisseur		= GETPOSTISSET('supplier_code')?GETPOST('supplier_code', 'alpha'):GETPOST('code_fournisseur', 'alpha');
     	        $object->capital				= GETPOST('capital', 'alpha');
     	        $object->barcode				= GETPOST('barcode', 'alpha');
     
    @@ -946,19 +947,21 @@ else
             $object->client				= GETPOST('client')?GETPOST('client'):$object->client;
     
             if(empty($duplicate_code_error)) {
    -	        $object->code_client		= GETPOST('code_client', 'alpha');
    +	        $object->code_client		= GETPOST('customer_code', 'alpha');
     	        $object->fournisseur		= GETPOST('fournisseur')?GETPOST('fournisseur'):$object->fournisseur;
             }
     		else {
     			setEventMessages($langs->trans('NewCustomerSupplierCodeProposed'),'', 'warnings');
     		}
     
    -        $object->code_fournisseur	= GETPOST('code_fournisseur', 'alpha');
    +        $object->code_fournisseur	= GETPOST('supplier_code', 'alpha');
             $object->address			= GETPOST('address', 'alpha');
             $object->zip				= GETPOST('zipcode', 'alpha');
             $object->town				= GETPOST('town', 'alpha');
             $object->state_id			= GETPOST('state_id', 'int');
             $object->skype				= GETPOST('skype', 'alpha');
    +        $object->twitter			= GETPOST('twitter', 'alpha');
    +        $object->facebook			= GETPOST('facebook', 'alpha');
             $object->phone				= GETPOST('phone', 'alpha');
             $object->fax				= GETPOST('fax', 'alpha');
             $object->email				= GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL);
    @@ -1059,6 +1062,39 @@ else
                             	$("#TypeName").html(document.formsoc.LastName.value);
                             	document.formsoc.private.value=1;
                             });
    +
    +						init_customer_categ();
    +			  			$("#customerprospect").change(function() {
    +								init_customer_categ();
    +						});
    +						function init_customer_categ() {
    +								console.log("is customer or prospect = "+jQuery("#customerprospect").val());
    +								if (jQuery("#customerprospect").val() == 0 && (jQuery("#fournisseur").val() == 0 || '.(empty($conf->global->THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER)?'1':'0').'))
    +								{
    +									jQuery(".visibleifcustomer").hide();
    +								}
    +								else
    +								{
    +									jQuery(".visibleifcustomer").show();
    +								}
    +						}
    +
    +						init_supplier_categ();
    +			       		$("#fournisseur").change(function() {
    +							init_supplier_categ();
    +						});
    +						function init_supplier_categ() {
    +								console.log("is supplier = "+jQuery("#fournisseur").val());
    +								if (jQuery("#fournisseur").val() == 0)
    +								{
    +									jQuery(".visibleifsupplier").hide();
    +								}
    +								else
    +								{
    +									jQuery(".visibleifsupplier").show();
    +								}
    +						}
    +
                             $("#selectcountry_id").change(function() {
                             	document.formsoc.action.value="create";
                             	document.formsoc.submit();
    @@ -1154,7 +1190,7 @@ else
             print '<table class="nobordernopadding"><tr><td>';
     		$tmpcode=$object->code_client;
             if (empty($tmpcode) && ! empty($modCodeClient->code_auto)) $tmpcode=$modCodeClient->getNextValue($object,0);
    -        print '<input type="text" name="code_client" id="customer_code" class="maxwidthonsmartphone" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
    +        print '<input type="text" name="customer_code" id="customer_code" class="maxwidthonsmartphone" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
             print '</td><td>';
             $s=$modCodeClient->getToolTip($langs,$object,0);
             print $form->textwithpicto('',$s,1);
    @@ -1182,7 +1218,7 @@ else
     	            print '<table class="nobordernopadding"><tr><td>';
     	            $tmpcode=$object->code_fournisseur;
     	            if (empty($tmpcode) && ! empty($modCodeFournisseur->code_auto)) $tmpcode=$modCodeFournisseur->getNextValue($object,1);
    -	            print '<input type="text" name="code_fournisseur" id="supplier_code" class="maxwidthonsmartphone" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
    +	            print '<input type="text" name="supplier_code" id="supplier_code" class="maxwidthonsmartphone" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
     	            print '</td><td>';
     	            $s=$modCodeFournisseur->getToolTip($langs,$object,1);
     	            print $form->textwithpicto('',$s,1);
    @@ -1240,17 +1276,32 @@ else
                 print '</td></tr>';
             }
     
    -        // Email web
    +        // Email / Web
             print '<tr><td>'.fieldLabel('EMail','email',$conf->global->SOCIETE_EMAIL_MANDATORY).'</td>';
     	    print '<td colspan="3"><input type="text" name="email" id="email" value="'.$object->email.'"></td></tr>';
             print '<tr><td>'.fieldLabel('Web','url').'</td>';
     	    print '<td colspan="3"><input type="text" name="url" id="url" value="'.$object->url.'"></td></tr>';
     
    -        // Skype
    -        if (! empty($conf->skype->enabled))
    +        if (! empty($conf->socialnetworks->enabled))
             {
    -            print '<tr><td>'.fieldLabel('Skype','skype').'</td>';
    -	        print '<td colspan="3"><input type="text" name="skype" id="skype" value="'.$object->skype.'"></td></tr>';
    +        	// Skype
    +        	if (! empty($conf->global->SOCIALNETWORKS_SKYPE))
    +        	{
    +        		print '<tr><td>'.fieldLabel('Skype','skype').'</td>';
    +        		print '<td colspan="3"><input type="text" name="skype" class="minwidth100" maxlength="80" id="skype" value="'.dol_escape_htmltag(GETPOSTISSET("skype")?GETPOST("skype",'alpha'):$object->skype).'"></td></tr>';
    +        	}
    +        	// Twitter
    +        	if (! empty($conf->global->SOCIALNETWORKS_TWITTER))
    +        	{
    +        		print '<tr><td>'.fieldLabel('Twitter','twitter').'</td>';
    +        		print '<td colspan="3"><input type="text" name="twitter" class="minwidth100" maxlength="80" id="twitter" value="'.dol_escape_htmltag(GETPOSTISSET("twitter")?GETPOST("twitter",'alpha'):$object->twitter).'"></td></tr>';
    +        	}
    +        	// Facebook
    +        	if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK))
    +        	{
    +	        	print '<tr><td>'.fieldLabel('Facebook','facebook').'</td>';
    +	        	print '<td colspan="3"><input type="text" name="facebook" class="minwidth100" maxlength="80" id="facebook" value="'.dol_escape_htmltag(GETPOSTISSET("facebook")?GETPOST("facebook",'alpha'):$object->facebook).'"></td></tr>';
    +        	}
             }
     
             // Phone / Fax
    @@ -1325,7 +1376,6 @@ else
                 print '</td><td>'.$langs->transcountry("LocalTax2IsUsed",$mysoc->country_code).'</td><td>';
                 print $form->selectyesno('localtax2assuj_value',(isset($conf->global->THIRDPARTY_DEFAULT_USELOCALTAX2)?$conf->global->THIRDPARTY_DEFAULT_USELOCALTAX2:0),1);
                 print '</td></tr>';
    -
             }
             elseif($mysoc->localtax1_assuj=="1")
             {
    @@ -1377,11 +1427,12 @@ else
                 print '</tr>';
             }
     
    -		// Assign a Name
    +		// Assign a sale representative
     		print '<tr>';
     		print '<td>'.fieldLabel('AllocateCommercial','commercial_id').'</td>';
     		print '<td colspan="3" class="maxwidthonsmartphone">';
     		$userlist = $form->select_dolusers('', '', 0, null, 0, '', '', 0, 0, 0, '', 0, '', '', 0, 1);
    +		// Note: If user has no right to "see all thirdparties", we for selection of sale representative to him, so after creation he can see the record.
     		print $form->multiselectarray('commercial', $userlist, (count(GETPOST('commercial', 'array')) > 0?GETPOST('commercial', 'array'):(empty($user->rights->societe->client->voir)?array($user->id):array())), null, null, null, null, "90%");
     		print '</td></tr>';
     
    @@ -1401,22 +1452,20 @@ else
     			$langs->load('categories');
     
     			// Customer
    -			if ($object->prospect || $object->client || (! $object->fournisseur && ! empty($conf->global->THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER))) {
    -				print '<tr><td class="toptd">' . fieldLabel('CustomersCategoriesShort', 'custcats') . '</td><td colspan="3">';
    -				$cate_arbo = $form->select_all_categories(Categorie::TYPE_CUSTOMER, null, 'parent', null, null, 1);
    -				print $form->multiselectarray('custcats', $cate_arbo, GETPOST('custcats', 'array'), null, null, null,
    -					null, "90%");
    -				print "</td></tr>";
    -			}
    +			//if ($object->prospect || $object->client || (! $object->fournisseur && ! empty($conf->global->THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER))) {
    +			print '<tr class="visibleifcustomer"><td class="toptd">' . fieldLabel('CustomersCategoriesShort', 'custcats') . '</td><td colspan="3">';
    +			$cate_arbo = $form->select_all_categories(Categorie::TYPE_CUSTOMER, null, 'parent', null, null, 1);
    +			print $form->multiselectarray('custcats', $cate_arbo, GETPOST('custcats', 'array'), null, null, null, null, "90%");
    +			print "</td></tr>";
    +			//}
     
     			// Supplier
    -			if ($object->fournisseur) {
    -				print '<tr><td class="toptd">' . fieldLabel('SuppliersCategoriesShort', 'suppcats') . '</td><td colspan="3">';
    -				$cate_arbo = $form->select_all_categories(Categorie::TYPE_SUPPLIER, null, 'parent', null, null, 1);
    -				print $form->multiselectarray('suppcats', $cate_arbo, GETPOST('suppcats', 'array'), null, null, null,
    -					null, "90%");
    -				print "</td></tr>";
    -			}
    +			//if ($object->fournisseur) {
    +			print '<tr class="visibleifsupplier"><td class="toptd">' . fieldLabel('SuppliersCategoriesShort', 'suppcats') . '</td><td colspan="3">';
    +			$cate_arbo = $form->select_all_categories(Categorie::TYPE_SUPPLIER, null, 'parent', null, null, 1);
    +			print $form->multiselectarray('suppcats', $cate_arbo, GETPOST('suppcats', 'array'), null, null, null, null, "90%");
    +			print "</td></tr>";
    +			//}
     		}
     
     		// Multicurrency
    @@ -1468,11 +1517,6 @@ else
         }
         elseif ($action == 'edit')
         {
    -        /*
    -         * Edition
    -         */
    -
    -
             //print load_fiche_titre($langs->trans("EditCompany"));
     
             if ($socid)
    @@ -1526,15 +1570,17 @@ else
                     $object->name					= GETPOST('name', 'alpha');
                     $object->prefix_comm			= GETPOST('prefix_comm', 'alpha');
                     $object->client					= GETPOST('client', 'int');
    -                $object->code_client			= GETPOST('code_client', 'alpha');
    +                $object->code_client			= GETPOST('customer_code', 'alpha');
                     $object->fournisseur			= GETPOST('fournisseur', 'int');
    -                $object->code_fournisseur		= GETPOST('code_fournisseur', 'alpha');
    +                $object->code_fournisseur		= GETPOST('supplier_code', 'alpha');
                     $object->address				= GETPOST('address', 'alpha');
                     $object->zip					= GETPOST('zipcode', 'alpha');
                     $object->town					= GETPOST('town', 'alpha');
                     $object->country_id				= GETPOST('country_id')?GETPOST('country_id', 'int'):$mysoc->country_id;
                     $object->state_id				= GETPOST('state_id', 'int');
                     $object->skype					= GETPOST('skype', 'alpha');
    +                $object->twitter				= GETPOST('twitter', 'alpha');
    +                $object->facebook				= GETPOST('facebook', 'alpha');
                     $object->phone					= GETPOST('phone', 'alpha');
                     $object->fax					= GETPOST('fax', 'alpha');
                     $object->email					= GETPOST('email', 'custom', 0, FILTER_SANITIZE_EMAIL);
    @@ -1590,8 +1636,10 @@ else
                 	$sub2=0;
                 }else{$sub2=1;}
     
    -            print "\n".'<script type="text/javascript">';
    -            print '$(document).ready(function () {
    +            if ($conf->use_javascript_ajax)
    +            {
    +            	print "\n".'<script type="text/javascript">';
    +            	print '$(document).ready(function () {
         			var val='.$sub.';
         			var val2='.$sub2.';
         			if("#localtax1assuj_value".value==undefined){
    @@ -1625,19 +1673,44 @@ else
         				}
         			});
     
    -               });';
    -            print '</script>'."\n";
    +				init_customer_categ();
    +	  			$("#customerprospect").change(function() {
    +					init_customer_categ();
    +				});
    +       			function init_customer_categ() {
    +					console.log("is customer or prospect = "+jQuery("#customerprospect").val());
    +					if (jQuery("#customerprospect").val() == 0 && (jQuery("#fournisseur").val() == 0 || '.(empty($conf->global->THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER)?'1':'0').'))
    +					{
    +						jQuery(".visibleifcustomer").hide();
    +					}
    +					else
    +					{
    +						jQuery(".visibleifcustomer").show();
    +					}
    +				}
     
    +				init_supplier_categ();
    +	  			$("#fournisseur").change(function() {
    +					init_supplier_categ();
    +				});
    +       			function init_supplier_categ() {
    +					console.log("is supplier = "+jQuery("#fournisseur").val());
    +					if (jQuery("#fournisseur").val() == 0)
    +					{
    +						jQuery(".visibleifsupplier").hide();
    +					}
    +					else
    +					{
    +						jQuery(".visibleifsupplier").show();
    +					}
    +				};
     
    -            if ($conf->use_javascript_ajax)
    -            {
    -                print "\n".'<script type="text/javascript" language="javascript">';
    -                print '$(document).ready(function () {
    -                			$("#selectcountry_id").change(function() {
    -                				document.formsoc.action.value="edit";
    -                				document.formsoc.submit();
    -                			});
    -                       })';
    +       			$("#selectcountry_id").change(function() {
    +       				document.formsoc.action.value="edit";
    +      				document.formsoc.submit();
    +        			});
    +
    +                })';
                     print '</script>'."\n";
                 }
     
    @@ -1703,16 +1776,16 @@ else
                     $tmpcode=$object->code_client;
                     if (empty($tmpcode) && ! empty($object->oldcopy->code_client)) $tmpcode=$object->oldcopy->code_client; // When there is an error to update a thirdparty, the number for supplier and customer code is kept to old value.
                     if (empty($tmpcode) && ! empty($modCodeClient->code_auto)) $tmpcode=$modCodeClient->getNextValue($object,0);
    -                print '<input type="text" name="code_client" id="customer_code" size="16" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
    +                print '<input type="text" name="customer_code" id="customer_code" size="16" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
                 }
                 else if ($object->codeclient_modifiable())
                 {
    -            	print '<input type="text" name="code_client" id="customer_code" size="16" value="'.dol_escape_htmltag($object->code_client).'" maxlength="15">';
    +            	print '<input type="text" name="customer_code" id="customer_code" size="16" value="'.dol_escape_htmltag($object->code_client).'" maxlength="15">';
                 }
                 else
                 {
                     print $object->code_client;
    -                print '<input type="hidden" name="code_client" value="'.dol_escape_htmltag($object->code_client).'">';
    +                print '<input type="hidden" name="customer_code" value="'.dol_escape_htmltag($object->code_client).'">';
                 }
                 print '</td><td>';
                 $s=$modCodeClient->getToolTip($langs,$object,0);
    @@ -1743,16 +1816,16 @@ else
     	                    $tmpcode=$object->code_fournisseur;
     	                    if (empty($tmpcode) && ! empty($object->oldcopy->code_fournisseur)) $tmpcode=$object->oldcopy->code_fournisseur; // When there is an error to update a thirdparty, the number for supplier and customer code is kept to old value.
     	                    if (empty($tmpcode) && ! empty($modCodeFournisseur->code_auto)) $tmpcode=$modCodeFournisseur->getNextValue($object,1);
    -	                    print '<input type="text" name="code_fournisseur" id="supplier_code" size="16" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
    +	                    print '<input type="text" name="supplier_code" id="supplier_code" size="16" value="'.dol_escape_htmltag($tmpcode).'" maxlength="15">';
     	                }
     	                else if ($object->codefournisseur_modifiable())
     	                {
    -	                    print '<input type="text" name="code_fournisseur" id="supplier_code" size="16" value="'.$object->code_fournisseur.'" maxlength="15">';
    +	                    print '<input type="text" name="supplier_code" id="supplier_code" size="16" value="'.$object->code_fournisseur.'" maxlength="15">';
     	                }
     	                else
     	              {
     	                    print $object->code_fournisseur;
    -	                    print '<input type="hidden" name="code_fournisseur" value="'.$object->code_fournisseur.'">';
    +	                    print '<input type="hidden" name="supplier_code" value="'.$object->code_fournisseur.'">';
     	                }
     	                print '</td><td>';
     	                $s=$modCodeFournisseur->getToolTip($langs,$object,1);
    @@ -1816,12 +1889,27 @@ else
                 print '<tr><td>'.fieldLabel('Web','url').'</td>';
     	        print '<td colspan="3"><input type="text" name="url" id="url" size="32" value="'.$object->url.'"></td></tr>';
     
    -            // Skype
    -            if (! empty($conf->skype->enabled))
    -            {
    -                print '<tr><td>'.fieldLabel('Skype','skype').'</td>';
    -	            print '<td colspan="3"><input type="text" name="skype" id="skype" size="32" value="'.$object->skype.'"></td></tr>';
    -            }
    +	        if (! empty($conf->socialnetworks->enabled))
    +	        {
    +	        	// Skype
    +	        	if (! empty($conf->global->SOCIALNETWORKS_SKYPE))
    +	        	{
    +	        		print '<tr><td>'.fieldLabel('Skype','skype').'</td>';
    +	        		print '<td colspan="3"><input type="text" name="skype" id="skype" value="'.$object->skype.'"></td></tr>';
    +	        	}
    +	        	// Twitter
    +	        	if (! empty($conf->global->SOCIALNETWORKS_TWITTER))
    +	        	{
    +	        		print '<tr><td>'.fieldLabel('Twitter','twitter').'</td>';
    +	        		print '<td colspan="3"><input type="text" name="twitter" id="twitter" value="'.$object->twitter.'"></td></tr>';
    +	        	}
    +	        	// Facebook
    +	        	if (! empty($conf->global->SOCIALNETWORKS_FACEBOOK))
    +	        	{
    +	        		print '<tr><td>'.fieldLabel('Facebook','facebook').'</td>';
    +	        		print '<td colspan="3"><input type="text" name="facebook" id="facebook" value="'.$object->facebook.'"></td></tr>';
    +	        	}
    +	        }
     
                 // Phone / Fax
                 print '<tr><td>'.fieldLabel('Phone','phone').'</td>';
    @@ -1883,7 +1971,6 @@ else
                         print '</span>';
                     }
                     print '</td></tr>';
    -
                 }
                 elseif($mysoc->localtax1_assuj=="1" && $mysoc->localtax2_assuj!="1")
                 {
    @@ -1896,7 +1983,6 @@ else
                         print '</span>';
                     }
                     print '</td></tr>';
    -
                 }
                 elseif($mysoc->localtax2_assuj=="1" && $mysoc->localtax1_assuj!="1")
                 {
    @@ -1985,34 +2071,30 @@ else
     			if (! empty($conf->categorie->enabled)  && ! empty($user->rights->categorie->lire))
     			{
     				// Customer
    -				if ($object->prospect || $object->client || (! $object->fournisseur && ! empty($conf->global->THIRDPARTY_CAN_HAVE_CATEGORY_EVEN_IF_NOT_CUSTOMER_PROSPECT_SUPPLIER))) {
    -					print '<tr><td>' . fieldLabel('CustomersCategoriesShort', 'custcats') . '</td>';
    -					print '<td colspan="3">';
    -					$cate_arbo = $form->select_all_categories(Categorie::TYPE_CUSTOMER, null, null, null, null, 1);
    -					$c = new Categorie($db);
    -					$cats = $c->containing($object->id, Categorie::TYPE_CUSTOMER);
    -					$arrayselected=array();
    -					foreach ($cats as $cat) {
    -						$arrayselected[] = $cat->id;
    -					}
    -					print $form->multiselectarray('custcats', $cate_arbo, $arrayselected, '', 0, '', 0, '90%');
    -					print "</td></tr>";
    +				print '<tr class="visibleifcustomer"><td>' . fieldLabel('CustomersCategoriesShort', 'custcats') . '</td>';
    +				print '<td colspan="3">';
    +				$cate_arbo = $form->select_all_categories(Categorie::TYPE_CUSTOMER, null, null, null, null, 1);
    +				$c = new Categorie($db);
    +				$cats = $c->containing($object->id, Categorie::TYPE_CUSTOMER);
    +				$arrayselected=array();
    +				foreach ($cats as $cat) {
    +					$arrayselected[] = $cat->id;
     				}
    +				print $form->multiselectarray('custcats', $cate_arbo, $arrayselected, '', 0, '', 0, '90%');
    +				print "</td></tr>";
     
     				// Supplier
    -				if ($object->fournisseur) {
    -					print '<tr><td>' . fieldLabel('SuppliersCategoriesShort', 'suppcats') . '</td>';
    -					print '<td colspan="3">';
    -					$cate_arbo = $form->select_all_categories(Categorie::TYPE_SUPPLIER, null, null, null, null, 1);
    -					$c = new Categorie($db);
    -					$cats = $c->containing($object->id, Categorie::TYPE_SUPPLIER);
    -					$arrayselected=array();
    -					foreach ($cats as $cat) {
    -						$arrayselected[] = $cat->id;
    -					}
    -					print $form->multiselectarray('suppcats', $cate_arbo, $arrayselected, '', 0, '', 0, '90%');
    -					print "</td></tr>";
    +				print '<tr class="visibleifsupplier"><td>' . fieldLabel('SuppliersCategoriesShort', 'suppcats') . '</td>';
    +				print '<td colspan="3">';
    +				$cate_arbo = $form->select_all_categories(Categorie::TYPE_SUPPLIER, null, null, null, null, 1);
    +				$c = new Categorie($db);
    +				$cats = $c->containing($object->id, Categorie::TYPE_SUPPLIER);
    +				$arrayselected=array();
    +				foreach ($cats as $cat) {
    +					$arrayselected[] = $cat->id;
     				}
    +				print $form->multiselectarray('suppcats', $cate_arbo, $arrayselected, '', 0, '', 0, '90%');
    +				print "</td></tr>";
     			}
     
     			// Multicurrency
    @@ -2294,7 +2376,6 @@ else
     			            print '<td>'.$object->localtax1_value.'</td>';
     			        }
     			        print '</tr></form>';
    -
     			    }
     			}
     			elseif($mysoc->localtax2_assuj=="1" && $mysoc->localtax1_assuj!="1")
    @@ -2317,12 +2398,11 @@ else
     			            print '<td>'.$object->localtax2_value.'</td>';
     			        }
     			        print '</tr></form>';
    -
     			    }
     			}
             }
     
    -        // VAT Code
    +        // Sale tax code (VAT code)
             print '<tr>';
     		print '<td class="nowrap">'.$langs->trans('VATIntra').'</td><td>';
             if ($object->tva_intra)
    @@ -2331,7 +2411,7 @@ else
                 $s.=$object->tva_intra;
                 $s.='<input type="hidden" id="tva_intra" name="tva_intra" maxlength="20" value="'.$object->tva_intra.'">';
     
    -            if (empty($conf->global->MAIN_DISABLEVATCHECK))
    +            if (empty($conf->global->MAIN_DISABLEVATCHECK) && isInEEC($object))
                 {
                     $s.=' &nbsp; ';
     
    @@ -2643,11 +2723,9 @@ else
     		$trackid = 'thi'.$object->id;
     
     		include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
    -
         }
     }
     
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/societe/checkvat/checkVatPopup.php b/htdocs/societe/checkvat/checkVatPopup.php
    index f1e56d4a359..1222689358f 100644
    --- a/htdocs/societe/checkvat/checkVatPopup.php
    +++ b/htdocs/societe/checkvat/checkVatPopup.php
    @@ -21,7 +21,7 @@
      *		\brief      Popup screen to validate VAT
      */
     
    -require ("../../main.inc.php");
    +require "../../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once NUSOAP_PATH.'/nusoap.php';
     
    @@ -174,6 +174,6 @@ if ($messagetoshow)
     	print nl2br($messagetoshow);
     }
     
    -
    +// End of page
     llxFooter();
    -$db->close();
    +$db->close();;
    diff --git a/htdocs/societe/class/address.class.php b/htdocs/societe/class/address.class.php
    index 43e46008910..b381e7cf8a2 100644
    --- a/htdocs/societe/class/address.class.php
    +++ b/htdocs/societe/class/address.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2011 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -33,12 +33,26 @@ class Address
     {
     	protected $db;
     
    +	/**
    +	 * @var int ID
    +	 */
     	public $id;
    +
     	public $type;
    -	public $label;
    +
    +	/**
    +     * @var string Address label
    +     */
    +    public $label;
    +
     	public $socid;
     	public $name;
    +
    +	/**
    +	 * @var string Address
    +	 */
     	public $address;
    +
     	public $zip;
     	public $town;
     	public $country_id;
    @@ -124,7 +138,6 @@ class Address
     				$this->db->rollback();
     				return -2;
     			}
    -
     		}
     		else
     		{
    @@ -228,9 +241,9 @@ class Address
     				return $result;
     			}
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Charge depuis la base toutes les adresses d'une societe
     	 *
    @@ -240,6 +253,7 @@ class Address
     	 */
     	function fetch_lines($socid, $user=null)
     	{
    +        // phpcs:enable
     		global $langs, $conf;
     
     		$sql = 'SELECT rowid, nom as name, client, fournisseur';
    @@ -324,6 +338,7 @@ class Address
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Charge depuis la base l'objet adresse
     	 *
    @@ -333,6 +348,7 @@ class Address
     	 */
     	function fetch_address($id, $user=null)
     	{
    +        // phpcs:enable
     		global $langs;
     		global $conf;
     
    @@ -479,14 +495,12 @@ class Address
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
     			dol_print_error($this->db);
     		}
     	}
    -
     }
     
     
    @@ -496,12 +510,27 @@ class Address
     class AddressLine
     {
     	protected $db;
    +
    +	/**
    +	 * @var int ID
    +	 */
     	public $id;
    +
     	public $date_creation;
     	public $date_modification;
    -	public $label;
    +
    +	/**
    +     * @var string stock movements label
    +     */
    +    public $label;
    +
     	public $name;
    +
    +	/**
    +	 * @var string Address
    +	 */
     	public $address;
    +
     	public $zip;
     	public $town;
     	public $country_id;
    diff --git a/htdocs/societe/class/api_contacts.class.php b/htdocs/societe/class/api_contacts.class.php
    index b99257da275..9e9a6a58a80 100644
    --- a/htdocs/societe/class/api_contacts.class.php
    +++ b/htdocs/societe/class/api_contacts.class.php
    @@ -34,7 +34,7 @@ class Contacts extends DolibarrApi
     	 * @var array   $FIELDS     Mandatory fields, checked when create and update object
     	 */
     	static $FIELDS = array(
    -		'lastname'
    +		'lastname',
     	);
     
     	/**
    @@ -101,8 +101,9 @@ class Contacts extends DolibarrApi
     	 * @return array                        Array of contact objects
          *
     	 * @throws RestException
    -	 */
    -	function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') {
    +     */
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '')
    +    {
     		global $db, $conf;
     
     		$obj_ret = array();
    @@ -195,7 +196,8 @@ class Contacts extends DolibarrApi
     	 * @param   array   $request_data   Request datas
     	 * @return  int     ID of contact
     	 */
    -	function post($request_data = null) {
    +    function post($request_data = null)
    +    {
     		if (!DolibarrApiAccess::$user->rights->societe->contact->creer)
     		{
     			throw new RestException(401, 'No permission to create/update contacts');
    @@ -220,7 +222,8 @@ class Contacts extends DolibarrApi
     	 * @param array $request_data   Datas
     	 * @return int
     	 */
    -	function put($id, $request_data = null) {
    +    function put($id, $request_data = null)
    +    {
     		if (!DolibarrApiAccess::$user->rights->societe->contact->creer)
     		{
     			throw new RestException(401, 'No permission to create/update contacts');
    @@ -255,7 +258,8 @@ class Contacts extends DolibarrApi
     	 * @param   int     $id Contact ID
     	 * @return  integer
     	 */
    -	function delete($id) {
    +    function delete($id)
    +    {
     		if (!DolibarrApiAccess::$user->rights->societe->contact->supprimer)
     		{
     			throw new RestException(401, 'No permission to delete contacts');
    @@ -283,7 +287,8 @@ class Contacts extends DolibarrApi
     	 *
     	 * @url	POST {id}/createUser
     	 */
    -	function createUser($id, $request_data = null) {
    +    function createUser($id, $request_data = null)
    +    {
     	    //if (!DolibarrApiAccess::$user->rights->user->user->creer) {
     	    //throw new RestException(401);
     	    //}
    @@ -365,7 +370,8 @@ class Contacts extends DolibarrApi
          * @param   object  $object    Object to clean
          * @return    array    Array of cleaned object properties
          */
    -    function _cleanObjectDatas($object) {
    +    function _cleanObjectDatas($object)
    +    {
     
         	$object = parent::_cleanObjectDatas($object);
     
    @@ -389,7 +395,8 @@ class Contacts extends DolibarrApi
     	 * @return  array
     	 * @throws RestException
     	 */
    -	function _validate($data) {
    +    function _validate($data)
    +    {
     		$contact = array();
     		foreach (Contacts::$FIELDS as $field)
     		{
    diff --git a/htdocs/societe/class/api_thirdparties.class.php b/htdocs/societe/class/api_thirdparties.class.php
    index 2b355b56eb7..42d1d616852 100644
    --- a/htdocs/societe/class/api_thirdparties.class.php
    +++ b/htdocs/societe/class/api_thirdparties.class.php
    @@ -1,5 +1,6 @@
     <?php
     /* Copyright (C) 2015   Jean-François Ferry     <jfefe@aternatik.fr>
    + * Copyright (C) 2018   Pierre Chéné            <pierre.chene44@gmail.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -32,7 +33,7 @@ class Thirdparties extends DolibarrApi
     	 * @var array   $FIELDS     Mandatory fields, checked when create and update object
     	 */
     	static $FIELDS = array(
    -	'name'
    +		'name'
     	);
     
     	/**
    @@ -49,7 +50,9 @@ class Thirdparties extends DolibarrApi
     		$this->db = $db;
     
     		require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
    +		require_once DOL_DOCUMENT_ROOT.'/societe/class/societeaccount.class.php';
     		require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
    +		require_once DOL_DOCUMENT_ROOT.'/societe/class/companybankaccount.class.php';
     
     		$this->company = new Societe($this->db);
     
    @@ -114,7 +117,8 @@ class Thirdparties extends DolibarrApi
     	 * @param   string  $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.nom:like:'TheCompany%') and (t.date_creation:<:'20160101')"
     	 * @return  array               Array of thirdparty objects
     	 */
    -	function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $mode=0, $sqlfilters = '') {
    +	function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $mode=0, $sqlfilters = '')
    +    {
     		global $db, $conf;
     
     		$obj_ret = array();
    @@ -129,7 +133,6 @@ class Thirdparties extends DolibarrApi
     		$sql = "SELECT t.rowid";
     		if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) $sql .= ", sc.fk_soc, sc.fk_user"; // We need these fields in order to filter by sale (including the case where the user can only see his prospects)
     		$sql.= " FROM ".MAIN_DB_PREFIX."societe as t";
    -		$sql.= " LEFT JOIN ".MAIN_DB_PREFIX . "societe_extrafields as te ON te.fk_object = t.rowid";
     
     		if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; // We need this table joined to the select in order to filter by sale
     		$sql.= ", ".MAIN_DB_PREFIX."c_stcomm as st";
    @@ -214,7 +217,7 @@ class Thirdparties extends DolibarrApi
     		if ($this->company->create(DolibarrApiAccess::$user) < 0)
     			throw new RestException(500, 'Error creating thirdparty', array_merge(array($this->company->error), $this->company->errors));
     
    -			return $this->company->id;
    +		return $this->company->id;
     	}
     
     	/**
    @@ -247,7 +250,7 @@ class Thirdparties extends DolibarrApi
     		if($this->company->update($id, DolibarrApiAccess::$user,1,'','','update'))
     			return $this->get($id);
     
    -			return false;
    +		return false;
     	}
     
     	/**
    @@ -313,12 +316,12 @@ class Thirdparties extends DolibarrApi
     		$object->client = $object->client | $soc_origin->client;
     		$object->fournisseur = $object->fournisseur | $soc_origin->fournisseur;
     		$listofproperties=array(
    -		'address', 'zip', 'town', 'state_id', 'country_id', 'phone', 'phone_pro', 'fax', 'email', 'skype', 'url', 'barcode',
    -		'idprof1', 'idprof2', 'idprof3', 'idprof4', 'idprof5', 'idprof6',
    -		'tva_intra', 'effectif_id', 'forme_juridique', 'remise_percent', 'remise_supplier_percent', 'mode_reglement_supplier_id', 'cond_reglement_supplier_id', 'name_bis',
    -		'stcomm_id', 'outstanding_limit', 'price_level', 'parent', 'default_lang', 'ref', 'ref_ext', 'import_key', 'fk_incoterms', 'fk_multicurrency',
    -		'code_client', 'code_fournisseur', 'code_compta', 'code_compta_fournisseur',
    -		'model_pdf', 'fk_projet'
    +			'address', 'zip', 'town', 'state_id', 'country_id', 'phone', 'phone_pro', 'fax', 'email', 'skype', 'url', 'barcode',
    +			'idprof1', 'idprof2', 'idprof3', 'idprof4', 'idprof5', 'idprof6',
    +			'tva_intra', 'effectif_id', 'forme_juridique', 'remise_percent', 'remise_supplier_percent', 'mode_reglement_supplier_id', 'cond_reglement_supplier_id', 'name_bis',
    +			'stcomm_id', 'outstanding_limit', 'price_level', 'parent', 'default_lang', 'ref', 'ref_ext', 'import_key', 'fk_incoterms', 'fk_multicurrency',
    +			'code_client', 'code_fournisseur', 'code_compta', 'code_compta_fournisseur',
    +			'model_pdf', 'fk_projet'
     		);
     		foreach ($listofproperties as $property)
     		{
    @@ -327,7 +330,7 @@ class Thirdparties extends DolibarrApi
     
     		// Concat some data
     		$listofproperties=array(
    -		'note_public', 'note_private'
    +			'note_public', 'note_private'
     		);
     		foreach ($listofproperties as $property)
     		{
    @@ -373,27 +376,27 @@ class Thirdparties extends DolibarrApi
     		if (! $error)
     		{
     			$objects = array(
    -			'Adherent' => '/adherents/class/adherent.class.php',
    -			'Societe' => '/societe/class/societe.class.php',
    -			'Categorie' => '/categories/class/categorie.class.php',
    -			'ActionComm' => '/comm/action/class/actioncomm.class.php',
    -			'Propal' => '/comm/propal/class/propal.class.php',
    -			'Commande' => '/commande/class/commande.class.php',
    -			'Facture' => '/compta/facture/class/facture.class.php',
    -			'FactureRec' => '/compta/facture/class/facture-rec.class.php',
    -			'LignePrelevement' => '/compta/prelevement/class/ligneprelevement.class.php',
    -			'Contact' => '/contact/class/contact.class.php',
    -			'Contrat' => '/contrat/class/contrat.class.php',
    -			'Expedition' => '/expedition/class/expedition.class.php',
    -			'Fichinter' => '/fichinter/class/fichinter.class.php',
    -			'CommandeFournisseur' => '/fourn/class/fournisseur.commande.class.php',
    -			'FactureFournisseur' => '/fourn/class/fournisseur.facture.class.php',
    -			'SupplierProposal' => '/supplier_proposal/class/supplier_proposal.class.php',
    -			'ProductFournisseur' => '/fourn/class/fournisseur.product.class.php',
    -			'Livraison' => '/livraison/class/livraison.class.php',
    -			'Product' => '/product/class/product.class.php',
    -			'Project' => '/projet/class/project.class.php',
    -			'User' => '/user/class/user.class.php',
    +				'Adherent' => '/adherents/class/adherent.class.php',
    +				'Societe' => '/societe/class/societe.class.php',
    +				'Categorie' => '/categories/class/categorie.class.php',
    +				'ActionComm' => '/comm/action/class/actioncomm.class.php',
    +				'Propal' => '/comm/propal/class/propal.class.php',
    +				'Commande' => '/commande/class/commande.class.php',
    +				'Facture' => '/compta/facture/class/facture.class.php',
    +				'FactureRec' => '/compta/facture/class/facture-rec.class.php',
    +				'LignePrelevement' => '/compta/prelevement/class/ligneprelevement.class.php',
    +				'Contact' => '/contact/class/contact.class.php',
    +				'Contrat' => '/contrat/class/contrat.class.php',
    +				'Expedition' => '/expedition/class/expedition.class.php',
    +				'Fichinter' => '/fichinter/class/fichinter.class.php',
    +				'CommandeFournisseur' => '/fourn/class/fournisseur.commande.class.php',
    +				'FactureFournisseur' => '/fourn/class/fournisseur.facture.class.php',
    +				'SupplierProposal' => '/supplier_proposal/class/supplier_proposal.class.php',
    +				'ProductFournisseur' => '/fourn/class/fournisseur.product.class.php',
    +				'Livraison' => '/livraison/class/livraison.class.php',
    +				'Product' => '/product/class/product.class.php',
    +				'Project' => '/projet/class/project.class.php',
    +				'User' => '/user/class/user.class.php',
     			);
     
     			//First, all core objects must update their tables
    @@ -413,8 +416,8 @@ class Thirdparties extends DolibarrApi
     		if (!$errors)
     		{
     			$reshook = $hookmanager->executeHooks('replaceThirdparty', array(
    -			'soc_origin' => $soc_origin->id,
    -			'soc_dest' => $object->id
    +				'soc_origin' => $soc_origin->id,
    +				'soc_dest' => $object->id
     			), $soc_dest, $action);
     
     			if ($reshook < 0)
    @@ -852,8 +855,6 @@ class Thirdparties extends DolibarrApi
     		return $result;
     	}
     
    -
    -
     	/**
     	 * Get fixed amount discount of a thirdparty (all sources: deposit, credit note, commercial offers...)
     	 *
    @@ -929,8 +930,8 @@ class Thirdparties extends DolibarrApi
     	 * @throws 404
     	 * @throws 405
     	 */
    -	function getInvoicesQualifiedForReplacement($id) {
    -
    +	function getInvoicesQualifiedForReplacement($id)
    +    {
     		if(! DolibarrApiAccess::$user->rights->facture->lire) {
     			throw new RestException(401);
     		}
    @@ -971,8 +972,8 @@ class Thirdparties extends DolibarrApi
     	 * @throws 404
     	 * @throws 405
     	 */
    -	function getInvoicesQualifiedForCreditNote($id) {
    -
    +	function getInvoicesQualifiedForCreditNote($id)
    +    {
     		if(! DolibarrApiAccess::$user->rights->facture->lire) {
     			throw new RestException(401);
     		}
    @@ -998,6 +999,632 @@ class Thirdparties extends DolibarrApi
     		return $result;
     	}
     
    +	/**
    +	 * Get CompanyBankAccount objects for thirdparty
    +	 *
    +	 * @param int $id ID of thirdparty
    +	 *
    +	 * @return array
    +	 *
    +	 * @url GET {id}/bankaccounts
    +	 */
    +	function getCompanyBankAccount($id)
    +    {
    +		global $db, $conf;
    +
    +		if(! DolibarrApiAccess::$user->rights->facture->lire) {
    +			throw new RestException(401);
    +		}
    +		if(empty($id)) {
    +			throw new RestException(400, 'Thirdparty ID is mandatory');
    +		}
    +
    +		if( ! DolibarrApi::_checkAccessToResource('societe',$id)) {
    +			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +		}
    +
    +		/**
    +		 * We select all the records that match the socid
    +		 */
    +
    +		$sql = "SELECT rowid, fk_soc, bank, number, code_banque, code_guichet, cle_rib, bic, iban_prefix as iban, domiciliation, proprio,";
    +		$sql.= " owner_address, default_rib, label, datec, tms as datem, rum, frstrecur";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."societe_rib";
    +		if ($id) $sql.= " WHERE fk_soc  = ".$id." ";
    +
    +
    +		$result = $db->query($sql);
    +
    +		if($result->num_rows == 0 ){
    +			throw new RestException(404, 'Account not found');
    +		}
    +
    +		$i=0;
    +
    +		$accounts =[];
    +
    +		if ($result)
    +		{
    +			$num = $db->num_rows($result);
    +			while ($i < $num)
    +			{
    +				$obj = $db->fetch_object($result);
    +				$account = new CompanyBankAccount($db);
    +				if($account->fetch($obj->rowid)) {
    +					$accounts[] = $account;
    +				}
    +				$i++;
    +			}
    +		}
    +		else{
    +			throw new RestException(404, 'Account not found');
    +		}
    +
    +
    +		$fields = ['socid', 'default_rib', 'frstrecur', '1000110000001', 'datec', 'datem', 'label', 'bank', 'bic', 'iban', 'id', 'rum'];
    +
    +		$returnAccounts = [];
    +
    +		foreach($accounts as $account){
    +			$object= [];
    +			foreach($account as $key => $value)
    +				if(in_array($key, $fields)){
    +					$object[$key] = $value;
    +				}
    +			$returnAccounts[] = $object;
    +		}
    +
    +		return $returnAccounts;
    +	}
    +
    +	/**
    +	 * Create CompanyBankAccount object for thirdparty
    +	 * @param int  $id ID of thirdparty
    +	 * @param array $request_data Request data
    +	 *
    +	 * @return object  ID of thirdparty
    +	 *
    +	 * @url POST {id}/bankaccounts
    +	 */
    +	function createCompanyBankAccount($id, $request_data = null)
    +	{
    +		if(! DolibarrApiAccess::$user->rights->societe->creer) {
    +			throw new RestException(401);
    +		}
    +
    +		$account = new CompanyBankAccount($this->db);
    +
    +		$account->socid = $id;
    +
    +		foreach($request_data as $field => $value) {
    +			$account->$field = $value;
    +		}
    +
    +		if ($account->create(DolibarrApiAccess::$user) < 0)
    +			throw new RestException(500, 'Error creating Company Bank account');
    +
    +
    +		if ($account->update(DolibarrApiAccess::$user) < 0)
    +			throw new RestException(500, 'Error updating values');
    +
    +		return $account;
    +	}
    +
    +	/**
    +	 * Update CompanyBankAccount object for thirdparty
    +	 *
    +	 * @param int $id ID of thirdparty
    +	 * @param int  $bankaccount_id ID of CompanyBankAccount
    +	 * @param array $request_data Request data
    +	 *
    +	 * @return object  ID of thirdparty
    +	 *
    +	 * @url PUT {id}/bankaccounts/{bankaccount_id}
    +	 */
    +	function updateCompanyBankAccount($id, $bankaccount_id, $request_data = null)
    +	{
    +		if(! DolibarrApiAccess::$user->rights->societe->creer) {
    +			throw new RestException(401);
    +		}
    +
    +		$account = new CompanyBankAccount($this->db);
    +
    +		$account->fetch($bankaccount_id, $id, -1, '');
    +
    +		if($account->socid != $id){
    +			throw new RestException(401);
    +		}
    +
    +
    +		foreach($request_data as $field => $value) {
    +			$account->$field = $value;
    +		}
    +
    +		if ($account->update(DolibarrApiAccess::$user) < 0)
    +			throw new RestException(500, 'Error updating values');
    +
    +		return $account;
    +	}
    +
    +	/**
    +	 * Delete a bank account attached to a thirdparty
    +	 *
    +	 * @param int $id ID of thirdparty
    +	 * @param int $bankaccount_id ID of CompanyBankAccount
    +	 *
    +	 * @return int -1 if error 1 if correct deletion
    +	 *
    +	 * @url DELETE {id}/bankaccounts/{bankaccount_id}
    +	 */
    +	function deleteCompanyBankAccount($id, $bankaccount_id)
    +    {
    +		if(! DolibarrApiAccess::$user->rights->societe->creer) {
    +			throw new RestException(401);
    +		}
    +
    +		$account = new CompanyBankAccount($this->db);
    +
    +		$account->fetch($bankaccount_id);
    +
    +		if(!$account->socid == $id)
    +			throw new RestException(401);
    +
    +		return $account->delete(DolibarrApiAccess::$user);
    +	}
    +
    +	/**
    +	 * Generate a Document from a bank account record (like SEPA mandate)
    +	 *
    +	 * @param int 		$id 			Thirdparty id
    +	 * @param int 		$companybankid 	Companybank id
    +	 * @param string 	$model 			Model of document to generate
    +	 * @return void
    +	 *
    +	 * @url GET {id}/generateBankAccountDocument/{companybankid}/{model}
    +	 */
    +	public function generateBankAccountDocument($id, $companybankid = null, $model = 'sepamandate')
    +	{
    +		global $conf;
    +
    +		$this->langs->loadLangs(array("main","dict","commercial","products","companies","banks","bills","withdrawals"));
    +
    +		$this->company->fetch($id);
    +
    +		$action = 'builddoc';
    +		if(! DolibarrApiAccess::$user->rights->societe->creer)
    +			throw new RestException(401);
    +
    +		$this->company->setDocModel(DolibarrApiAccess::$user, $model);
    +
    +		$this->company->fk_bank = $this->company->fk_account;
    +
    +		$outputlangs = $this->langs;
    +		$newlang='';
    +
    +		if ($this->conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id','aZ09')) $newlang=GETPOST('lang_id','aZ09');
    +		if ($this->conf->global->MAIN_MULTILANGS && empty($newlang) && isset($this->company->thirdparty->default_lang)) $newlang=$this->company->thirdparty->default_lang;  // for proposal, order, invoice, ...
    +		if ($this->conf->global->MAIN_MULTILANGS && empty($newlang) && isset($this->company->default_lang)) $newlang=$this->company->default_lang;                  // for thirdparty
    +		if (! empty($newlang)) {
    +			$outputlangs = new Translate("",$conf);
    +			$outputlangs->setDefaultLang($newlang);
    +		}
    +
    +		// To be sure vars is defined
    +		$hidedetails = $hidedesc = $hideref = 0;
    +		$moreparams=null;
    +		if (empty($hidedetails)) $hidedetails=0;
    +		if (empty($hidedesc)) $hidedesc=0;
    +		if (empty($hideref)) $hideref=0;
    +		if (empty($moreparams)) $moreparams=null;
    +
    +
    +		$sql = "SELECT rowid";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."societe_rib";
    +		if ($id) $sql.= " WHERE fk_soc  = ".$id." ";
    +		if ($companybankid) $sql.= " AND id = ".$companybankid."";
    +
    +		$i=0;
    +		$accounts=array();
    +
    +		$result = $this->db->query($sql);
    +		if ($result)
    +		{
    +			if ($result->num_rows == 0) {
    +				throw new RestException(404, 'Bank account not found');
    +			}
    +
    +			$num = $this->db->num_rows($result);
    +			while ($i < $num)
    +			{
    +				$obj = $this->db->fetch_object($result);
    +
    +				$account = new CompanyBankAccount($this->db);
    +				if ($account->fetch($obj->rowid)) {
    +					$accounts[] = $account;
    +				}
    +				$i++;
    +			}
    +		}
    +		else
    +		{
    +			throw new RestException(404, 'Bank account not found');
    +		}
    +
    +		$moreparams = array(
    +			'use_companybankid'=>$accounts[0]->id,
    +			'force_dir_output'=>$this->conf->societe->multidir_output[$this->company->entity].'/'.dol_sanitizeFileName($this->company->id)
    +		);
    +
    +		$result = 0;
    +
    +		$result = $this->company->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
    +
    +		if ($result > 0)
    +		{
    +			return array("success" => $result);
    +		}
    +		else
    +		{
    +			throw new RestException(500);
    +		}
    +    }
    +
    +  /**
    +	 * Get a specific gateway attached to a thirdparty (by specifying the site key)
    +	 *
    +	 * @param int $id ID of thirdparty
    +	 * @param string $site Site key
    +	 *
    +	 * @return SocieteAccount[]
    +	 * @throws 401 Unauthorized: User does not have permission to read thirdparties
    +	 * @throws 404 Not Found: Specified thirdparty ID does not belongs to an existing thirdparty
    +	 *
    +	 * @url GET {id}/gateways/
    +	 */
    +	function getSocieteAccounts($id, $site=null)
    +    {
    +		global $db, $conf;
    +
    +		if(!DolibarrApiAccess::$user->rights->societe->lire) {
    +			throw new RestException(401);
    +		}
    +
    +		if(!DolibarrApi::_checkAccessToResource('societe',$id)) {
    +			throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
    +		}
    +
    +		/**
    +		 * We select all the records that match the socid
    +		 */
    +		$sql = "SELECT rowid, fk_soc, key_account, site, date_creation, tms FROM ".MAIN_DB_PREFIX."societe_account";
    +		$sql.= " WHERE fk_soc = $id";
    +		if($site) $sql .= " AND site ='$site'";
    +
    +		$result = $db->query($sql);
    +
    +		if($result->num_rows == 0){
    +			throw new RestException(404, 'This thirdparty does not have any gateway attached or does not exist.');
    +		}
    +
    +		$i=0;
    +
    +		$accounts =[];
    +
    +		$num = $db->num_rows($result);
    +		while ($i < $num)
    +		{
    +			$obj = $db->fetch_object($result);
    +			$account = new SocieteAccount($db);
    +
    +			if($account->fetch($obj->rowid)) {
    +				$accounts[] = $account;
    +			}
    +			$i++;
    +		}
    +
    +		$fields = ['id', 'fk_soc', 'key_account', 'site', 'date_creation', 'tms'];
    +
    +		$returnAccounts = [];
    +
    +		foreach($accounts as $account){
    +			$object= [];
    +			foreach($account as $key => $value)
    +				if(in_array($key, $fields)){
    +					$object[$key] = $value;
    +				}
    +			$returnAccounts[] = $object;
    +		}
    +
    +		return $returnAccounts;
    +	}
    +
    +	/**
    +	 * Create and attach a new gateway to an existing thirdparty
    +	 *
    +	 * Possible fields for request_data (request body) are specified in <code>llx_societe_account</code> table.<br>
    +	 * See <a href="https://wiki.dolibarr.org/index.php/Table_llx_societe_account">Table llx_societe_account</a> wiki page for more information<br><br>
    +	 * <u>Example body payload :</u> <pre>{"key_account": "cus_DAVkLSs1LYyYI", "site": "stripe"}</pre>
    +	 *
    +	 * @param int $id ID of thirdparty
    +	 * @param array $request_data Request data
    +	 *
    +	 * @return SocieteAccount
    +	 * @throws 401 Unauthorized: User does not have permission to read thirdparties
    +	 * @throws 409 Conflict: A SocieteAccount entity (gateway) already exists for this company and site.
    +	 * @throws 422 Unprocessable Entity: You must pass the site attribute in your request data !
    +	 * @throws 500 Internal Server Error: Error creating SocieteAccount account
    +	 * @status 201
    +	 *
    +	 * @url POST {id}/gateways
    +	 */
    +	function createSocieteAccount($id, $request_data = null)
    +	{
    +		global $db;
    +
    +		if(! DolibarrApiAccess::$user->rights->societe->creer) {
    +			throw new RestException(401);
    +		}
    +
    +		if(!isset($request_data['site'])) {
    +			throw new RestException(422, 'Unprocessable Entity: You must pass the site attribute in your request data !');
    +		}
    +
    +		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc  = ".$id." AND site = '". $request_data['site']."' ";
    +		$result = $db->query($sql);
    +
    +		if($result->num_rows == 0 ){
    +			$account = new SocieteAccount($this->db);
    +			if(!isset($request_data['login'])) {
    +				$account->login = "";
    +			}
    +			$account->fk_soc = $id;
    +
    +			foreach($request_data as $field => $value) {
    +				$account->$field = $value;
    +			}
    +
    +			if ($account->create(DolibarrApiAccess::$user) < 0)
    +				throw new RestException(500, 'Error creating SocieteAccount entity. Ensure that the ID of thirdparty provided does exist!');
    +
    +			$this->_cleanObjectDatas($account);
    +
    +			return $account;
    +		} else {
    +			throw new RestException(409, 'A SocieteAccount entity already exists for this company and site.');
    +		}
    +	}
    +
    +	/**
    +	 * Create and attach a new (or replace an existing) specific site gateway to a thirdparty
    +	 *
    +	 * You <strong>MUST</strong> pass all values to keep (otherwise, they will be deleted) !<br>
    +	 * If you just need to update specific fields prefer <code>PATCH /thirdparties/{id}/gateways/{site}</code> endpoint.<br><br>
    +	 * When a <strong>SocieteAccount</strong> entity does not exist for the <code>id</code> and <code>site</code>
    +	 * supplied, a new one will be created. In that case <code>fk_soc</code> and <code>site</code> members form
    +	 * request body payload will be ignored and <code>id</code> and <code>site</code> query strings parameters
    +	 * will be used instead.
    +	 *
    +	 * @param int $id ID of thirdparty
    +	 * @param string $site Site key
    +	 * @param array $request_data Request data
    +	 *
    +	 * @return SocieteAccount
    +	 * @throws 401 Unauthorized: User does not have permission to read thirdparties
    +	 * @throws 422 Unprocessable Entity: You must pass the site attribute in your request data !
    +	 * @throws 500 Internal Server Error: Error updating SocieteAccount entity
    +	 *
    +	 * @throws RestException
    +	 * @url PUT {id}/gateways/{site}
    +	 */
    +	function putSocieteAccount($id, $site, $request_data = null)
    +	{
    +		global $db;
    +
    +		if(! DolibarrApiAccess::$user->rights->societe->creer) {
    +			throw new RestException(401);
    +		}
    +
    +		$sql = "SELECT rowid, fk_user_creat, date_creation FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc = $id AND site = '$site' ";
    +		$result = $db->query($sql);
    +
    +		// We do not found an existing SocieteAccount entity for this fk_soc and site ; we then create a new one.
    +		if($result->num_rows == 0 ){
    +			if(!isset($request_data['key_account'])) {
    +				throw new RestException(422, 'Unprocessable Entity: You must pass the key_account attribute in your request data !');
    +			}
    +			$account = new SocieteAccount($this->db);
    +			if(!isset($request_data['login'])) {
    +				$account->login = "";
    +			}
    +
    +			foreach($request_data as $field => $value) {
    +				$account->$field = $value;
    +			}
    +
    +			$account->fk_soc = $id;
    +			$account->site = $site;
    +
    +			if ($account->create(DolibarrApiAccess::$user) < 0)
    +				throw new RestException(500, 'Error creating SocieteAccount entity.');
    +		// We found an existing SocieteAccount entity, we are replacing it
    +		} else {
    +
    +			if(isset($request_data['site']) && $request_data['site'] !== $site) {
    +				$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc  = ".$id." AND site = '". $request_data['site']."' ";
    +				$result = $db->query($sql);
    +
    +				if($result->num_rows !== 0)
    +					throw new RestException(409, "You are trying to update this thirdparty SocieteAccount (gateway record) from $site to ".$request_data['site'] . " but another SocieteAccount entity already exists with this site key.");
    +			}
    +
    +			$obj = $db->fetch_object($result);
    +
    +			$account = new SocieteAccount($this->db);
    +			$account->id = $obj->rowid;
    +			$account->fk_soc = $id;
    +			$account->site = $site;
    +			if(!isset($request_data['login'])) {
    +				$account->login = "";
    +			}
    +			$account->fk_user_creat = $obj->fk_user_creat;
    +			$account->date_creation = $obj->date_creation;
    +
    +			foreach($request_data as $field => $value) {
    +				$account->$field = $value;
    +			}
    +
    +			if ($account->update(DolibarrApiAccess::$user) < 0)
    +				throw new RestException(500, 'Error updating SocieteAccount entity.');
    +		}
    +
    +		$this->_cleanObjectDatas($account);
    +
    +		return $account;
    +	}
    +
    +	/**
    +	 * Update specified values of a specific site gateway attached to a thirdparty
    +	 *
    +	 * @param int $id Id of thirdparty
    +	 * @param string  $site Site key
    +	 * @param array $request_data Request data
    +	 *
    +	 * @return SocieteAccount
    +	 * @throws 401 Unauthorized: User does not have permission to read thirdparties
    +	 * @throws 404 Not Found: Specified thirdparty ID does not belongs to an existing thirdparty
    +	 * @throws 409 Conflict: Another SocieteAccount entity already exists for this thirdparty with this site key.
    +	 * @throws 500 Internal Server Error: Error updating SocieteAccount entity
    +	 *
    +	 * @url PATCH {id}/gateways/{site}
    +	 */
    +	function patchSocieteAccount($id, $site, $request_data = null)
    +	{
    +		global $db;
    +
    +		if(! DolibarrApiAccess::$user->rights->societe->creer) {
    +			throw new RestException(401);
    +		}
    +
    +		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc  = $id AND site = '$site' ";
    +		$result = $db->query($sql);
    +
    +		if($result->num_rows == 0 ){
    +			throw new RestException(404, "This thirdparty does not have $site gateway attached or does not exist.");
    +		} else {
    +
    +			// If the user tries to edit the site member, we check first if
    +			if(isset($request_data['site']) && $request_data['site'] !== $site) {
    +				$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc  = ".$id." AND site = '". $request_data['site']."' ";
    +				$result = $db->query($sql);
    +
    +				if($result->num_rows !== 0)
    +					throw new RestException(409, "You are trying to update this thirdparty SocieteAccount (gateway record) site member from $site to ".$request_data['site'] . " but another SocieteAccount entity already exists for this thirdparty with this site key.");
    +			}
    +
    +			$obj = $db->fetch_object($result);
    +			$account = new SocieteAccount($this->db);
    +			$account->fetch($obj->rowid);
    +
    +			foreach($request_data as $field => $value) {
    +				$account->$field = $value;
    +			}
    +
    +			if ($account->update(DolibarrApiAccess::$user) < 0)
    +				throw new RestException(500, 'Error updating SocieteAccount account');
    +
    +			$this->_cleanObjectDatas($account);
    +
    +			return $account;
    +		}
    +	}
    +
    +	/**
    +	 * Delete a specific site gateway attached to a thirdparty (by gateway id)
    +	 *
    +	 * @param int $id ID of thirdparty
    +	 * @param int $site Site key
    +	 *
    +	 * @return void
    +	 * @throws 401 Unauthorized: User does not have permission to delete thirdparties gateways
    +	 * @throws 404 Not Found: Specified thirdparty ID does not belongs to an existing thirdparty
    +	 * @throws 500 Internal Server Error: Error deleting SocieteAccount entity
    +	 *
    +	 * @url DELETE {id}/gateways/{site}
    +	 */
    +	function deleteSocieteAccount($id, $site)
    +    {
    +		global /** @var Database $db */
    +		$db;
    +
    +		if(! DolibarrApiAccess::$user->rights->societe->creer) {
    +			throw new RestException(401);
    +		}
    +
    +		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc  = $id AND site = '$site' ";
    +		$result = $db->query($sql);
    +
    +		if($result->num_rows == 0 ){
    +			throw new RestException(404);
    +		} else {
    +			$obj = $db->fetch_object($result);
    +			$account = new SocieteAccount($this->db);
    +			$account->fetch($obj->rowid);
    +
    +			if($account->delete(DolibarrApiAccess::$user) < 0) {
    +				throw new RestException(500, "Error while deleting $site gateway attached to this third party");
    +			}
    +		}
    +	}
    +
    +	/**
    +	 * Delete all gateways attached to a thirdparty
    +	 *
    +	 * @param int $id ID of thirdparty
    +	 *
    +	 * @return void
    +	 * @throws 401 Unauthorized: User does not have permission to delete thirdparties gateways
    +	 * @throws 404 Not Found: Specified thirdparty ID does not belongs to an existing thirdparty
    +	 * @throws 500 Internal Server Error: Error deleting SocieteAccount entity
    +	 *
    +	 * @url DELETE {id}/gateways
    +	 */
    +	function deleteSocieteAccounts($id)
    +    {
    +		global /** @var Database $db */
    +		$db;
    +
    +		if(! DolibarrApiAccess::$user->rights->societe->creer) {
    +			throw new RestException(401);
    +		}
    +
    +		/**
    +		 * We select all the records that match the socid
    +		 */
    +
    +		$sql = "SELECT rowid, fk_soc, key_account, site, date_creation, tms";
    +		$sql.= " FROM ".MAIN_DB_PREFIX."societe_account WHERE fk_soc  = $id ";
    +
    +		$result = $db->query($sql);
    +
    +		if($result->num_rows == 0 ){
    +			throw new RestException(404, 'This third party does not have any gateway attached or does not exist.');
    +		} else {
    +			$i=0;
    +
    +			$num = $db->num_rows($result);
    +			while ($i < $num)
    +			{
    +				$obj = $db->fetch_object($result);
    +				$account = new SocieteAccount($db);
    +				$account->fetch($obj->rowid);
    +
    +				if($account->delete(DolibarrApiAccess::$user) < 0) {
    +					throw new RestException(500, 'Error while deleting gateways attached to this third party');
    +				}
    +				$i++;
    +			}
    +		}
    +	}
     
     	/**
     	 * Clean sensible object datas
    @@ -1005,8 +1632,8 @@ class Thirdparties extends DolibarrApi
     	 * @param   object  $object    Object to clean
     	 * @return    array    Array of cleaned object properties
     	 */
    -	function _cleanObjectDatas($object) {
    -
    +	function _cleanObjectDatas($object)
    +    {
     		$object = parent::_cleanObjectDatas($object);
     
     		unset($object->nom);	// ->name already defined and nom deprecated
    @@ -1037,7 +1664,7 @@ class Thirdparties extends DolibarrApi
     		foreach (Thirdparties::$FIELDS as $field) {
     			if (!isset($data[$field]))
     				throw new RestException(400, "$field field missing");
    -				$thirdparty[$field] = $data[$field];
    +			$thirdparty[$field] = $data[$field];
     		}
     		return $thirdparty;
     	}
    diff --git a/htdocs/societe/class/client.class.php b/htdocs/societe/class/client.class.php
    index 59eea72c2c7..39a90c43eb9 100644
    --- a/htdocs/societe/class/client.class.php
    +++ b/htdocs/societe/class/client.class.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -47,6 +47,7 @@ class Client extends Societe
             $this->fournisseur = 0;
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *  Load indicators into this->nb for board
          *
    @@ -54,6 +55,7 @@ class Client extends Societe
          */
         function load_state_board()
         {
    +        // phpcs:enable
             global $user;
     
             $this->nb=array("customers" => 0,"prospects" => 0);
    @@ -88,7 +90,6 @@ class Client extends Societe
                 $this->error=$this->db->lasterror();
                 return -1;
             }
    -
         }
     
     	/**
    @@ -114,5 +115,4 @@ class Client extends Societe
     		}
     		return 1;
         }
    -
     }
    diff --git a/htdocs/societe/class/companybankaccount.class.php b/htdocs/societe/class/companybankaccount.class.php
    index 187f7c5ec65..2891724ac7e 100644
    --- a/htdocs/societe/class/companybankaccount.class.php
    +++ b/htdocs/societe/class/companybankaccount.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2010-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013   	Peter Fontaine          <contact@peterfontaine.fr>
      * Copyright (C) 2016       Marcos García           <marcosgdf@gmail.com>
      *
    @@ -184,7 +184,6 @@ class CompanyBankAccount extends Account
     		{
     			return 1;
     		}
    -
     		}
     		else
     		{
    @@ -197,10 +196,12 @@ class CompanyBankAccount extends Account
     	 * 	Load record from database
     	 *
     	 *	@param	int		$id			Id of record
    -	 * 	@param	int		$socid		Id of company. If this is filled, function will return the first default RIB of company
    +	 * 	@param	int		$socid		Id of company. If this is filled, function will return the first entry found (matching $default and $type)
    +	 *  @param	int		$default	If id of company filled, we say if we want first record among all (-1), default record (1) or non default record (0)
    +	 *  @param	int		$type		If id of company filled, we say if we want record of this type only
     	 * 	@return	int					<0 if KO, >0 if OK
     	 */
    -	function fetch($id, $socid=0)
    +	function fetch($id, $socid=0, $default=1, $type='ban')
     	{
     		if (empty($id) && empty($socid)) return -1;
     
    @@ -208,7 +209,12 @@ class CompanyBankAccount extends Account
     		$sql.= " owner_address, default_rib, label, datec, tms as datem, rum, frstrecur";
     		$sql.= " FROM ".MAIN_DB_PREFIX."societe_rib";
     		if ($id)    $sql.= " WHERE rowid = ".$id;
    -		if ($socid) $sql.= " WHERE fk_soc  = ".$socid." AND default_rib = 1 AND type ='ban'";
    +		if ($socid)
    +		{
    +			$sql.= " WHERE fk_soc  = ".$socid;
    +			if ($default > -1) $sql.=" AND default_rib = ".$this->db->escape($default);
    +			if ($type) $sql.= " AND type ='".$this->db->escape($type)."'";
    +		}
     
     		$resql = $this->db->query($sql);
     		if ($resql)
    @@ -408,6 +414,5 @@ class CompanyBankAccount extends Account
     
     		$this->socid = 0;
     	}
    -
     }
     
    diff --git a/htdocs/societe/class/companypaymentmode.class.php b/htdocs/societe/class/companypaymentmode.class.php
    index 4403d5b8fde..73242c9aa32 100644
    --- a/htdocs/societe/class/companypaymentmode.class.php
    +++ b/htdocs/societe/class/companypaymentmode.class.php
    @@ -18,7 +18,7 @@
     
     /**
      * \file        class/companypaymentmode.class.php
    - * \ingroup     monmodule
    + * \ingroup     company
      * \brief       This file is a CRUD class file for CompanyPaymentMode (Create/Read/Update/Delete)
      */
     
    @@ -36,18 +36,22 @@ class CompanyPaymentMode extends CommonObject
     	 * @var string ID to identify managed object
     	 */
     	public $element = 'companypaymentmode';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'societe_rib';
    +
     	/**
     	 * @var int  Does companypaymentmode support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 */
     	public $ismultientitymanaged = 2;
    +
     	/**
     	 * @var int  Does companypaymentmode support extrafields ? 0=No, 1=Yes
     	 */
     	public $isextrafieldmanaged = 0;
    +
     	/**
     	 * @var string String with name of icon for companypaymentmode. Must be the part after the 'object_' into object_companypaymentmode.png
     	 */
    @@ -114,9 +118,22 @@ class CompanyPaymentMode extends CommonObject
     		'import_key' =>array('type'=>'varchar(14)', 'label'=>'Import key', 'enabled'=>1, 'visible'=>-2, 'position'=>105),
     	//'aaa' =>array('type'=>'date', 'label'=>'Ending date', 'enabled'=>0, 'visible'=>-2, 'position'=>185),
     	);
    +
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
    -	public $fk_soc;
    -	public $label;
    +
    +	/**
    +	 * @var int Thirdparty ID
    +	 */
    +    public $fk_soc;
    +
    +	/**
    +     * @var string company payment mode label
    +     */
    +    public $label;
    +
     	public $bank;
     	public $code_banque;
     	public $code_guichet;
    @@ -144,7 +161,12 @@ class CompanyPaymentMode extends CommonObject
     	public $preapproval_key;
     	public $total_amount_of_all_payments;
     	public $stripe_card_ref;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
    +
     	public $starting_date;
     	public $ending_date;
     	public $datec;
    @@ -448,6 +470,7 @@ class CompanyPaymentMode extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return the status
     	 *
    @@ -457,40 +480,35 @@ class CompanyPaymentMode extends CommonObject
     	 */
     	static function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
    -		if ($mode == 0)
    -		{
    -			$prefix='';
    -			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    -		}
    -		if ($mode == 1)
    +		if ($mode == 0 || $mode == 1)
     		{
     			if ($status == 1) return $langs->trans('Enabled');
     			if ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    @@ -543,7 +561,6 @@ class CompanyPaymentMode extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -561,5 +578,4 @@ class CompanyPaymentMode extends CommonObject
     	{
     		$this->initAsSpecimenCommon();
     	}
    -
     }
    diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php
    index 53768881b8b..2411623e4aa 100644
    --- a/htdocs/societe/class/societe.class.php
    +++ b/htdocs/societe/class/societe.class.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2004       Eric Seigne             <eric.seigne@ryxeo.com>
      * Copyright (C) 2003       Brian Fraval            <brian@fraval.org>
      * Copyright (C) 2006       Andre Cianfarani        <acianfa@free.fr>
    - * Copyright (C) 2005-2017  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2008       Patrick Raguin          <patrick.raguin@auguria.net>
      * Copyright (C) 2010-2014  Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2013       Florian Henry           <florian.henry@open-concept.pro>
    @@ -13,6 +13,7 @@
      * Copyright (C) 2014-2015  Marcos García           <marcosgdf@gmail.com>
      * Copyright (C) 2015       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2017       Rui Strecht			    <rui.strecht@aliartalentos.com>
    + * Copyright (C) 2018	    Philippe Grand	        <philippe.grand@atoo-net.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -41,9 +42,21 @@ require_once DOL_DOCUMENT_ROOT.'/multicurrency/class/multicurrency.class.php';
      */
     class Societe extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='societe';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element = 'societe';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element='fk_soc';
    +
     	public $fieldsforcombobox='nom,name_alias';
     	protected $childtables=array("supplier_proposal"=>'SupplierProposal',"propal"=>'Proposal',"commande"=>'Order',"facture"=>'Invoice',"facture_rec"=>'RecurringInvoiceTemplate',"contrat"=>'Contract',"fichinter"=>'Fichinter',"facture_fourn"=>'SupplierInvoice',"commande_fournisseur"=>'SupplierOrder',"projet"=>'Project',"expedition"=>'Shipment',"prelevement_lignes"=>'DirectDebitRecord');    // To test if we can delete object
     	protected $childtablesoncascade=array("societe_prices", "societe_log", "societe_address", "product_fournisseur_price", "product_customer_price_log", "product_customer_price", "socpeople", "adherent", "societe_rib", "societe_remise", "societe_remise_except", "societe_commerciaux", "categorie", "notify", "notify_def", "actioncomm");
    @@ -54,6 +67,7 @@ class Societe extends CommonObject
     	 * @var int
     	 */
     	public $ismultientitymanaged = 1;
    +
     	/**
     	 * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
     	 * @var integer
    @@ -67,9 +81,9 @@ class Societe extends CommonObject
     	 */
     	public $fields=array(
     		'rowid'         =>array('type'=>'integer',      'label'=>'TechnicalID',      'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'index'=>1, 'position'=>1, 'comment'=>'Id'),
    -		'nom'           =>array('type'=>'varchar(128)', 'label'=>'Name',            'enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'),
    -		'name_alias'    =>array('type'=>'varchar(128)', 'label'=>'Name',            'enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'),
    -		'entity'        =>array('type'=>'integer',      'label'=>'Entity',           'enabled'=>1, 'visible'=>0,  'default'=>1, 'notnull'=>1,  'index'=>1, 'position'=>20),
    +		'nom'           =>array('type'=>'varchar(128)', 'label'=>'Name',             'enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'),
    +		'name_alias'    =>array('type'=>'varchar(128)', 'label'=>'Name',             'enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'),
    +		'entity'        =>array('type'=>'integer',      'label'=>'Entity',           'enabled'=>1, 'visible'=>0,  'default'=>1,  'notnull'=>1,  'index'=>1, 'position'=>20),
     		'note_public'   =>array('type'=>'text',			'label'=>'NotePublic',		 'enabled'=>1, 'visible'=>0,  'position'=>60),
     		'note_private'  =>array('type'=>'text',			'label'=>'NotePrivate',		 'enabled'=>1, 'visible'=>0,  'position'=>61),
     		'date_creation' =>array('type'=>'datetime',     'label'=>'DateCreation',     'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'position'=>500),
    @@ -82,6 +96,9 @@ class Societe extends CommonObject
     	);
     
     
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
     
     	/**
    @@ -92,6 +109,11 @@ class Societe extends CommonObject
     	 */
     	public $nom;
     
    +	/**
    +	 * @var string name
    +	 */
    +	public $name;
    +
     	/**
     	 * Alias names (commercial, trademark or alias names)
     	 * @var string
    @@ -99,7 +121,12 @@ class Societe extends CommonObject
     	public $name_alias;
     
     	public $particulier;
    +
    +	/**
    +	 * @var string Address
    +	 */
     	public $address;
    +
     	public $zip;
     	public $town;
     
    @@ -166,6 +193,16 @@ class Societe extends CommonObject
     	 * @var string
     	 */
     	public $skype;
    +	/**
    +	 * Twitter username
    +	 * @var string
    +	 */
    +	public $twitter;
    +	/**
    +	 * Facebook username
    +	 * @var string
    +	 */
    +	public $facebook;
     	/**
     	 * Webpage
     	 * @var string
    @@ -245,7 +282,12 @@ class Societe extends CommonObject
     	public $remise_supplier_percent;
     	public $mode_reglement_supplier_id;
     	public $cond_reglement_supplier_id;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_prospectlevel;
    +
     	public $name_bis;
     
     	//Log data
    @@ -308,6 +350,12 @@ class Societe extends CommonObject
     	 */
     	public $code_compta;
     
    +    /**
    +     * Accounting code for client
    +     * @var string
    +     */
    +    public $code_compta_client;
    +
     	/**
     	 * Accounting code for suppliers
     	 * @var string
    @@ -366,7 +414,11 @@ class Societe extends CommonObject
     	 */
     	public $default_lang;
     
    +	/**
    +	 * @var string Ref
    +	 */
     	public $ref;
    +
     	public $ref_int;
     	/**
     	 * External user reference.
    @@ -403,12 +455,20 @@ class Societe extends CommonObject
     	public $array_options;
     
     	// Incoterms
    +	/**
    +     * @var int ID
    +     */
     	public $fk_incoterms;
    +
     	public $location_incoterms;
     	public $libelle_incoterms;  //Used into tooltip
     
     	// Multicurrency
    +	/**
    +     * @var int ID
    +     */
     	public $fk_multicurrency;
    +
     	public $multicurrency_code;
     
     
    @@ -510,7 +570,7 @@ class Societe extends CommonObject
     					$this->add_commercial($user, $this->commercial_id);
     				}
     				// si un commercial cree un client il lui est affecte automatiquement
    -				else if (empty($user->rights->societe->client->voir))
    +				elseif (empty($user->rights->societe->client->voir))
     				{
     					$this->add_commercial($user, $user->id);
     				}
    @@ -552,7 +612,6 @@ class Societe extends CommonObject
     				$this->db->rollback();
     				return $result;
     			}
    -
     		}
     		else
     		{
    @@ -563,6 +622,7 @@ class Societe extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Create a contact/address from thirdparty
     	 *
    @@ -571,6 +631,7 @@ class Societe extends CommonObject
     	 */
     	function create_individual(User $user)
     	{
    +        // phpcs:enable
     		require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     		$contact=new Contact($this->db);
     
    @@ -631,15 +692,15 @@ class Societe extends CommonObject
     				{
     					$this->errors[] = 'ErrorBadCustomerCodeSyntax';
     				}
    -				if ($rescode == -2)
    +				elseif ($rescode == -2)
     				{
     					$this->errors[] = 'ErrorCustomerCodeRequired';
     				}
    -				if ($rescode == -3)
    +				elseif ($rescode == -3)
     				{
     					$this->errors[] = 'ErrorCustomerCodeAlreadyUsed';
     				}
    -				if ($rescode == -4)
    +				elseif ($rescode == -4)
     				{
     					$this->errors[] = 'ErrorPrefixRequired';
     				}
    @@ -656,15 +717,15 @@ class Societe extends CommonObject
     				{
     					$this->errors[] = 'ErrorBadSupplierCodeSyntax';
     				}
    -				if ($rescode == -2)
    +				elseif ($rescode == -2)
     				{
     					$this->errors[] = 'ErrorSupplierCodeRequired';
     				}
    -				if ($rescode == -3)
    +				elseif ($rescode == -3)
     				{
     					$this->errors[] = 'ErrorSupplierCodeAlreadyUsed';
     				}
    -				if ($rescode == -5)
    +				elseif ($rescode == -5)
     				{
     					$this->errors[] = 'ErrorprefixRequired';
     				}
    @@ -785,6 +846,8 @@ class Societe extends CommonObject
     		$this->fax			= preg_replace("/\./","",$this->fax);
     		$this->email		= trim($this->email);
     		$this->skype		= trim($this->skype);
    +		$this->twitter		= trim($this->twitter);
    +		$this->facebook		= trim($this->facebook);
     		$this->url			= $this->url?clean_url($this->url,0):'';
     		$this->note_private = trim($this->note_private);
     		$this->note_public  = trim($this->note_public);
    @@ -926,6 +989,8 @@ class Societe extends CommonObject
     			$sql .= ",fax = ".(! empty($this->fax)?"'".$this->db->escape($this->fax)."'":"null");
     			$sql .= ",email = ".(! empty($this->email)?"'".$this->db->escape($this->email)."'":"null");
     			$sql .= ",skype = ".(! empty($this->skype)?"'".$this->db->escape($this->skype)."'":"null");
    +			$sql .= ",twitter = ".(! empty($this->twitter)?"'".$this->db->escape($this->twitter)."'":"null");
    +			$sql .= ",facebook = ".(! empty($this->facebook)?"'".$this->db->escape($this->facebook)."'":"null");
     			$sql .= ",url = ".(! empty($this->url)?"'".$this->db->escape($this->url)."'":"null");
     
     			$sql .= ",parent = " . ($this->parent > 0 ? $this->parent : "null");
    @@ -954,7 +1019,6 @@ class Societe extends CommonObject
     					$sql .=",localtax1_value =".$this->localtax1_value;
     				}
     				else $sql .=",localtax1_value =0.000";
    -
     			}
     			else $sql .=",localtax1_value =0.000";
     
    @@ -965,7 +1029,6 @@ class Societe extends CommonObject
     					$sql .=",localtax2_value =".$this->localtax2_value;
     				}
     				else $sql .=",localtax2_value =0.000";
    -
     			}
     			else $sql .=",localtax2_value =0.000";
     
    @@ -1024,10 +1087,26 @@ class Societe extends CommonObject
     			$resql=$this->db->query($sql);
     			if ($resql)
     			{
    -				unset($this->country_code);		// We clean this because it may have been changed after an update of country_id
    -				unset($this->country);
    -				unset($this->state_code);
    -				unset($this->state);
    +				if (is_object($this->oldcopy))	// If we have information on old values
    +				{
    +					if ($this->oldcopy->country_id != $this->country_id)
    +					{
    +						unset($this->country_code);
    +						unset($this->country);
    +					}
    +					if ($this->oldcopy->state_id != $this->state_id)
    +					{
    +						unset($this->state_code);
    +						unset($this->state);
    +					}
    +				}
    +				else
    +				{
    +					unset($this->country_code);	// We clean this, in the doubt, because it may have been changed after an update of country_id
    +					unset($this->country);
    +					unset($this->state_code);
    +					unset($this->state);
    +				}
     
     				$nbrowsaffected = $this->db->affected_rows($resql);
     
    @@ -1051,6 +1130,8 @@ class Societe extends CommonObject
     							$lmember->address=$this->address;
     							$lmember->email=$this->email;
     							$lmember->skype=$this->skype;
    +							$lmember->twitter=$this->twitter;
    +							$lmember->facebook=$this->facebook;
     							$lmember->phone=$this->phone;
     
     							$result=$lmember->update($user,0,1,1,1);	// Use nosync to 1 to avoid cyclic updates
    @@ -1061,7 +1142,7 @@ class Societe extends CommonObject
     								$error++;
     							}
     						}
    -						else if ($result < 0)
    +						elseif ($result < 0)
     						{
     							$this->error=$lmember->error;
     							$error++;
    @@ -1154,7 +1235,7 @@ class Societe extends CommonObject
     		$sql .= ', s.status';
     		$sql .= ', s.price_level';
     		$sql .= ', s.tms as date_modification, s.fk_user_creat, s.fk_user_modif';
    -		$sql .= ', s.phone, s.fax, s.email, s.skype, s.url, s.zip, s.town, s.note_private, s.note_public, s.model_pdf, s.client, s.fournisseur';
    +		$sql .= ', s.phone, s.fax, s.email, s.skype, s.twitter, s.facebook, s.url, s.zip, s.town, s.note_private, s.note_public, s.model_pdf, s.client, s.fournisseur';
     		$sql .= ', s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4, s.idprof5, s.idprof6';
     		$sql .= ', s.capital, s.tva_intra';
     		$sql .= ', s.fk_typent as typent_id';
    @@ -1247,6 +1328,8 @@ class Societe extends CommonObject
     
     				$this->email = $obj->email;
     				$this->skype = $obj->skype;
    +				$this->twitter = $obj->twitter;
    +				$this->facebook = $obj->facebook;
     				$this->url = $obj->url;
     				$this->phone = $obj->phone;
     				$this->fax = $obj->fax;
    @@ -1358,114 +1441,6 @@ class Societe extends CommonObject
     		return $result;
     	}
     
    -	/**
    -	 * 	Search and fetch thirparties by name
    -	 *
    -	 * 	@param		string		$name		Name
    -	 * 	@param		int			$type		Type of thirdparties (0=any, 1=customer, 2=prospect, 3=supplier)
    -	 * 	@param		array		$filters	Array of couple field name/value to filter the companies with the same name
    -	 * 	@param		boolean		$exact		Exact string search (true/false)
    -	 * 	@param		boolean		$case		Case sensitive (true/false)
    -	 * 	@param		boolean		$similar	Add test if string inside name into database, or name into database inside string. Do not use this: Not compatible with other database.
    -	 * 	@param		string		$clause		Clause for filters
    -	 * 	@return		array|int				<0 if KO, array of thirdparties object if OK
    -	 */
    -	function searchByName($name, $type='0', $filters = array(), $exact = false, $case = false, $similar = false, $clause = 'AND')
    -	{
    -		$thirdparties = array();
    -
    -		dol_syslog("searchByName name=".$name." type=".$type." exact=".$exact);
    -
    -		// Check parameter
    -		if (empty($name))
    -		{
    -			$this->errors[]='ErrorBadValueForParameter';
    -			return -1;
    -		}
    -
    -		// Generation requete recherche
    -		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe";
    -		$sql.= " WHERE entity IN (".getEntity('societe').")";
    -		if (! empty($type))
    -		{
    -			if ($type == 1 || $type == 2)
    -				$sql.= " AND client = ".$type;
    -			elseif ($type == 3)
    -				$sql.= " AND fournisseur = 1";
    -		}
    -		if (! empty($name))
    -		{
    -			if (! $exact)
    -			{
    -				if (preg_match('/^([\*])?[^*]+([\*])?$/', $name, $regs) && count($regs) > 1)
    -				{
    -					$name = str_replace('*', '%', $name);
    -				}
    -				else
    -				{
    -					$name = '%'.$name.'%';
    -				}
    -			}
    -			$sql.= " AND ";
    -			if (is_array($filters) && ! empty($filters))
    -				$sql.= "(";
    -			if ($similar)
    -			{
    -				// For test similitude (string inside name into database, or name into database inside string)
    -				// Do not use this. Not compatible with other database.
    -				$sql.= "(LOCATE('".$this->db->escape($name)."', nom) > 0 OR LOCATE(nom, '".$this->db->escape($name)."') > 0)";
    -			}
    -			else
    -			{
    -				if (! $case)
    -					$sql.= "nom LIKE '".$this->db->escape($name)."'";
    -				else
    -					$sql.= "nom LIKE BINARY '".$this->db->escape($name)."'";
    -			}
    -		}
    -		if (is_array($filters) && ! empty($filters))
    -		{
    -			foreach($filters as $field => $value)
    -			{
    -				if (! $exact)
    -				{
    -					if (preg_match('/^([\*])?[^*]+([\*])?$/', $value, $regs) && count($regs) > 1)
    -					{
    -						$value = str_replace('*', '%', $value);
    -					}
    -					else
    -					{
    -						$value = '%'.$value.'%';
    -					}
    -				}
    -				if (! $case)
    -					$sql.= " ".$clause." ".$field." LIKE '".$this->db->escape($value)."'";
    -				else
    -					$sql.= " ".$clause." ".$field." LIKE BINARY '".$this->db->escape($value)."'";
    -			}
    -			if (! empty($name))
    -				$sql.= ")";
    -		}
    -
    -		$res  = $this->db->query($sql);
    -		if ($res)
    -		{
    -			while ($rec = $this->db->fetch_array($res))
    -			{
    -				$soc = new Societe($this->db);
    -				$soc->fetch($rec['rowid']);
    -				$thirdparties[] = $soc;
    -			}
    -
    -			return $thirdparties;
    -		}
    -		else
    -		{
    -			$this->error=$this->db->lasterror();
    -			return -1;
    -		}
    -	}
    -
     	/**
     	 *    Delete a third party from database and all its dependencies (contacts, rib...)
     	 *
    @@ -1605,6 +1580,7 @@ class Societe extends CommonObject
     		return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Define third party as a customer
     	 *
    @@ -1612,6 +1588,7 @@ class Societe extends CommonObject
     	 */
     	function set_as_client()
     	{
    +        // phpcs:enable
     		if ($this->id)
     		{
     			$newclient=1;
    @@ -1631,6 +1608,7 @@ class Societe extends CommonObject
     		return 0;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Definit la societe comme un client
     	 *
    @@ -1641,6 +1619,7 @@ class Societe extends CommonObject
     	 */
     	function set_remise_client($remise, $note, User $user)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		// Nettoyage parametres
    @@ -1692,6 +1671,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Definit la societe comme un client
     	 *
    @@ -1702,6 +1682,7 @@ class Societe extends CommonObject
     	 */
     	function set_remise_supplier($remise, $note, User $user)
     	{
    +        // phpcs:enable
     		global $conf, $langs;
     
     		// Nettoyage parametres
    @@ -1753,6 +1734,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    	Add a discount for third party
     	 *
    @@ -1765,6 +1747,7 @@ class Societe extends CommonObject
     	 */
     	function set_remise_except($remise, User $user, $desc, $tva_tx=0, $discount_type=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		// Clean parameters
    @@ -1900,6 +1883,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Set the price level
     	 *
    @@ -1909,6 +1893,7 @@ class Societe extends CommonObject
     	 */
     	function set_price_level($price_level, User $user)
     	{
    +        // phpcs:enable
     		if ($this->id)
     		{
     			$now=dol_now();
    @@ -1937,6 +1922,7 @@ class Societe extends CommonObject
     		return -1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Add link to sales representative
     	 *
    @@ -1946,6 +1932,10 @@ class Societe extends CommonObject
     	 */
     	function add_commercial(User $user, $commid)
     	{
    +        // phpcs:enable
    +		$error=0;
    +
    +
     		if ($this->id > 0 && $commid > 0)
     		{
     			$sql = "DELETE FROM  ".MAIN_DB_PREFIX."societe_commerciaux";
    @@ -1961,9 +1951,16 @@ class Societe extends CommonObject
     			{
     				dol_syslog(get_class($this)."::add_commercial Erreur");
     			}
    +			else {
    +				$this->context=array('commercial_modified'=>$commid);
    +
    +				$result=$this->call_trigger('COMPANY_LINK_SALE_REPRESENTATIVE',$user);
    +                if ($result < 0) $error++;
    +			}
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Add link to sales representative
     	 *
    @@ -1973,6 +1970,13 @@ class Societe extends CommonObject
     	 */
     	function del_commercial(User $user, $commid)
     	{
    +        // phpcs:enable
    +		$error=0;
    +		$this->context=array('commercial_modified'=>$commid);
    +
    +		$result=$this->call_trigger('COMPANY_UNLINK_SALE_REPRESENTATIVE',$user);
    +        if ($result < 0) $error++;
    +
     		if ($this->id > 0 && $commid > 0)
     		{
     			$sql  = "DELETE FROM  ".MAIN_DB_PREFIX."societe_commerciaux ";
    @@ -2061,37 +2065,37 @@ class Societe extends CommonObject
     		   $label.= '<u>' . $langs->trans("ShowCustomer") . '</u>';
     		   $linkstart = '<a href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$this->id;
     		}
    -		else if ($option == 'prospect' && empty($conf->global->SOCIETE_DISABLE_PROSPECTS))
    +		elseif ($option == 'prospect' && empty($conf->global->SOCIETE_DISABLE_PROSPECTS))
     		{
     			$label.= '<u>' . $langs->trans("ShowProspect") . '</u>';
     			$linkstart = '<a href="'.DOL_URL_ROOT.'/comm/card.php?socid='.$this->id;
     		}
    -		else if ($option == 'supplier')
    +		elseif ($option == 'supplier')
     		{
     			$label.= '<u>' . $langs->trans("ShowSupplier") . '</u>';
     			$linkstart = '<a href="'.DOL_URL_ROOT.'/fourn/card.php?socid='.$this->id;
     		}
    -		else if ($option == 'agenda')
    +		elseif ($option == 'agenda')
     		{
     			$label.= '<u>' . $langs->trans("ShowAgenda") . '</u>';
     			$linkstart = '<a href="'.DOL_URL_ROOT.'/societe/agenda.php?socid='.$this->id;
     		}
    -		else if ($option == 'project')
    +		elseif ($option == 'project')
     		{
     			$label.= '<u>' . $langs->trans("ShowProject") . '</u>';
     			$linkstart = '<a href="'.DOL_URL_ROOT.'/societe/project.php?socid='.$this->id;
     		}
    -		else if ($option == 'margin')
    +		elseif ($option == 'margin')
     		{
     			$label.= '<u>' . $langs->trans("ShowMargin") . '</u>';
     			$linkstart = '<a href="'.DOL_URL_ROOT.'/margin/tabs/thirdpartyMargins.php?socid='.$this->id.'&type=1';
     		}
    -		else if ($option == 'contact')
    +		elseif ($option == 'contact')
     		{
     			$label.= '<u>' . $langs->trans("ShowContacts") . '</u>';
     			$linkstart = '<a href="'.DOL_URL_ROOT.'/societe/contact.php?socid='.$this->id;
     		}
    -		else if ($option == 'ban')
    +		elseif ($option == 'ban')
     		{
     			$label.= '<u>' . $langs->trans("ShowBan") . '</u>';
     			$linkstart = '<a href="'.DOL_URL_ROOT.'/societe/paymentmodes.php?socid='.$this->id;
    @@ -2112,13 +2116,22 @@ class Societe extends CommonObject
     		}
     		if (! empty($this->country_code))
     			$label.= '<br><b>' . $langs->trans('Country') . ':</b> '. $this->country_code;
    -		if (! empty($this->tva_intra))
    +		if (! empty($this->tva_intra) || (! empty($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP) && strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'vatnumber') !== false))
     			$label.= '<br><b>' . $langs->trans('VATIntra') . ':</b> '. $this->tva_intra;
    -		if (! empty($this->code_client) && $this->client)
    +		if (! empty($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP))
    +		{
    +			if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid1') !== false) $label.= '<br><b>' . $langs->trans('ProfId1'.$this->country_code) . ':</b> '. $this->idprof1;
    +			if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid2') !== false) $label.= '<br><b>' . $langs->trans('ProfId2'.$this->country_code) . ':</b> '. $this->idprof2;
    +			if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid3') !== false) $label.= '<br><b>' . $langs->trans('ProfId3'.$this->country_code) . ':</b> '. $this->idprof3;
    +			if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid4') !== false) $label.= '<br><b>' . $langs->trans('ProfId4'.$this->country_code) . ':</b> '. $this->idprof4;
    +			if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid5') !== false) $label.= '<br><b>' . $langs->trans('ProfId5'.$this->country_code) . ':</b> '. $this->idprof5;
    +			if (strpos($conf->global->SOCIETE_SHOW_FIELD_IN_TOOLTIP, 'profid6') !== false) $label.= '<br><b>' . $langs->trans('ProfId6'.$this->country_code) . ':</b> '. $this->idprof6;
    +		}
    +		if (! empty($this->code_client) && ($this->client == 1 || $this->client == 3))
     			$label.= '<br><b>' . $langs->trans('CustomerCode') . ':</b> '. $this->code_client;
     		if (! empty($this->code_fournisseur) && $this->fournisseur)
     			$label.= '<br><b>' . $langs->trans('SupplierCode') . ':</b> '. $this->code_fournisseur;
    -		if (! empty($conf->accounting->enabled) && $this->client)
    +		if (! empty($conf->accounting->enabled) && ($this->client == 1 || $this->client == 3))
     			$label.= '<br><b>' . $langs->trans('CustomerAccountancyCode') . ':</b> '. ($this->code_compta ? $this->code_compta : $this->code_compta_client);
     		if (! empty($conf->accounting->enabled) && $this->fournisseur)
     			$label.= '<br><b>' . $langs->trans('SupplierAccountancyCode') . ':</b> '. $this->code_compta_fournisseur;
    @@ -2187,6 +2200,7 @@ class Societe extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -2196,46 +2210,48 @@ class Societe extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load('companies');
     
     		if ($mode == 0)
     		{
     			if ($statut==0) return $langs->trans("ActivityCeased");
    -			if ($statut==1) return $langs->trans("InActivity");
    +			elseif ($statut==1) return $langs->trans("InActivity");
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($statut==0) return $langs->trans("ActivityCeased");
    -			if ($statut==1) return $langs->trans("InActivity");
    +			elseif ($statut==1) return $langs->trans("InActivity");
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut==0) return img_picto($langs->trans("ActivityCeased"),'statut5', 'class="pictostatus"').' '.$langs->trans("ActivityCeased");
    -			if ($statut==1) return img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"').' '.$langs->trans("InActivity");
    +			elseif ($statut==1) return img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"').' '.$langs->trans("InActivity");
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut==0) return img_picto($langs->trans("ActivityCeased"),'statut5', 'class="pictostatus"');
    -			if ($statut==1) return img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"');
    +			elseif ($statut==1) return img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut==0) return img_picto($langs->trans("ActivityCeased"),'statut5', 'class="pictostatus"').' '.$langs->trans("ActivityCeased");
    -			if ($statut==1) return img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"').' '.$langs->trans("InActivity");
    +			elseif ($statut==1) return img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"').' '.$langs->trans("InActivity");
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut==0) return '<span class="hideonsmartphone">'.$langs->trans("ActivityCeased").'</span> '.img_picto($langs->trans("ActivityCeased"),'statut5', 'class="pictostatus"');
    -			if ($statut==1) return '<span class="hideonsmartphone">'.$langs->trans("InActivity").'</span> '.img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"');
    +			elseif ($statut==1) return '<span class="hideonsmartphone">'.$langs->trans("InActivity").'</span> '.img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($statut==0) return '<span class="hideonsmartphone">'.$langs->trans("ActivityCeased").'</span> '.img_picto($langs->trans("ActivityCeased"),'statut5', 'class="pictostatus"');
    -			if ($statut==1) return '<span class="hideonsmartphone">'.$langs->trans("InActivity").'</span> '.img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"');
    +			elseif ($statut==1) return '<span class="hideonsmartphone">'.$langs->trans("InActivity").'</span> '.img_picto($langs->trans("InActivity"),'statut4', 'class="pictostatus"');
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return list of contacts emails existing for third party
     	 *
    @@ -2244,6 +2260,7 @@ class Societe extends CommonObject
     	 */
     	function thirdparty_and_contact_email_array($addthirdparty=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$contact_emails = $this->contact_property_array('email',1);
    @@ -2256,6 +2273,7 @@ class Societe extends CommonObject
     		return $contact_emails;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Return list of contacts mobile phone existing for third party
     	 *
    @@ -2263,6 +2281,7 @@ class Societe extends CommonObject
     	 */
     	function thirdparty_and_contact_phone_array()
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$contact_phone = $this->contact_property_array('mobile');
    @@ -2276,6 +2295,7 @@ class Societe extends CommonObject
     		return $contact_phone;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return list of contacts emails or mobile existing for third party
     	 *
    @@ -2285,6 +2305,7 @@ class Societe extends CommonObject
     	 */
     	function contact_property_array($mode='email', $hidedisabled=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$contact_property = array();
    @@ -2344,6 +2365,7 @@ class Societe extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Renvoie la liste des contacts de cette societe
     	 *
    @@ -2351,6 +2373,7 @@ class Societe extends CommonObject
     	 */
     	function contact_array()
     	{
    +        // phpcs:enable
     		$contacts = array();
     
     		$sql = "SELECT rowid, lastname, firstname FROM ".MAIN_DB_PREFIX."socpeople WHERE fk_soc = ".$this->id;
    @@ -2376,6 +2399,7 @@ class Societe extends CommonObject
     		return $contacts;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Renvoie la liste des contacts de cette societe
     	 *
    @@ -2383,6 +2407,7 @@ class Societe extends CommonObject
     	 */
     	function contact_array_objects()
     	{
    +        // phpcs:enable
     		require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php';
     		$contacts = array();
     
    @@ -2411,6 +2436,7 @@ class Societe extends CommonObject
     		return $contacts;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return property of contact from its id
     	 *
    @@ -2420,6 +2446,7 @@ class Societe extends CommonObject
     	 */
     	function contact_get_property($rowid,$mode)
     	{
    +        // phpcs:enable
     		$contact_property='';
     
     		if (empty($rowid)) return '';
    @@ -2446,10 +2473,10 @@ class Societe extends CommonObject
     		{
     			dol_print_error($this->db);
     		}
    -
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return bank number property of thirdparty (label or rum)
     	 *
    @@ -2458,6 +2485,7 @@ class Societe extends CommonObject
     	 */
     	function display_rib($mode='label')
     	{
    +        // phpcs:enable
     		require_once DOL_DOCUMENT_ROOT . '/societe/class/companybankaccount.class.php';
     
     		$bac = new CompanyBankAccount($this->db);
    @@ -2486,6 +2514,7 @@ class Societe extends CommonObject
     		return 'BadParameterToFunctionDisplayRib';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return Array of RIB
     	 *
    @@ -2493,6 +2522,7 @@ class Societe extends CommonObject
     	 */
     	function get_all_rib()
     	{
    +        // phpcs:enable
     		require_once DOL_DOCUMENT_ROOT . '/societe/class/companybankaccount.class.php';
     		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."societe_rib WHERE type='ban' AND fk_soc = ".$this->id;
     		$result = $this->db->query($sql);
    @@ -2514,6 +2544,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Attribut un code client a partir du module de controle des codes.
     	 *  Return value is stored into this->code_client
    @@ -2524,6 +2555,7 @@ class Societe extends CommonObject
     	 */
     	function get_codeclient($objsoc=0,$type=0)
     	{
    +        // phpcs:enable
     		global $conf;
     		if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
     		{
    @@ -2544,6 +2576,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Attribut un code fournisseur a partir du module de controle des codes.
     	 *  Return value is stored into this->code_fournisseur
    @@ -2554,6 +2587,7 @@ class Societe extends CommonObject
     	 */
     	function get_codefournisseur($objsoc=0,$type=1)
     	{
    +        // phpcs:enable
     		global $conf;
     		if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
     		{
    @@ -2573,6 +2607,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Verifie si un code client est modifiable en fonction des parametres
     	 *    du module de controle des codes.
    @@ -2581,6 +2616,7 @@ class Societe extends CommonObject
     	 */
     	function codeclient_modifiable()
     	{
    +        // phpcs:enable
     		global $conf;
     		if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
     		{
    @@ -2608,6 +2644,7 @@ class Societe extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Verifie si un code fournisseur est modifiable dans configuration du module de controle des codes
     	 *
    @@ -2615,6 +2652,7 @@ class Societe extends CommonObject
     	 */
     	function codefournisseur_modifiable()
     	{
    +        // phpcs:enable
     		global $conf;
     		if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
     		{
    @@ -2642,6 +2680,7 @@ class Societe extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Check customer code
     	 *
    @@ -2653,6 +2692,7 @@ class Societe extends CommonObject
     	 */
     	function check_codeclient()
     	{
    +        // phpcs:enable
     		global $conf;
     		if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
     		{
    @@ -2677,6 +2717,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Check supplier code
     	 *
    @@ -2688,6 +2729,7 @@ class Societe extends CommonObject
     	 */
     	function check_codefournisseur()
     	{
    +        // phpcs:enable
     		global $conf;
     		if (! empty($conf->global->SOCIETE_CODECLIENT_ADDON))
     		{
    @@ -2712,6 +2754,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    	Renvoie un code compta, suivant le module de code compta.
     	 *      Peut etre identique a celui saisit ou genere automatiquement.
    @@ -2722,6 +2765,7 @@ class Societe extends CommonObject
     	 */
     	function get_codecompta($type)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		if (! empty($conf->global->SOCIETE_CODECOMPTA_ADDON))
    @@ -2762,6 +2806,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Define parent commany of current company
     	 *
    @@ -2770,6 +2815,7 @@ class Societe extends CommonObject
     	 */
     	function set_parent($id)
     	{
    +        // phpcs:enable
     		if ($this->id)
     		{
     			$sql = "UPDATE ".MAIN_DB_PREFIX."societe";
    @@ -2790,6 +2836,7 @@ class Societe extends CommonObject
     		else return -1;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Returns if a profid sould be verified
     	 *
    @@ -2798,6 +2845,7 @@ class Societe extends CommonObject
     	 */
     	function id_prof_verifiable($idprof)
     	{
    +        // phpcs:enable
     		global $conf;
     
     	 	switch($idprof)
    @@ -2827,6 +2875,7 @@ class Societe extends CommonObject
     		return $ret;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Verify if a profid exists into database for others thirds
     	 *
    @@ -2837,6 +2886,7 @@ class Societe extends CommonObject
     	 */
     	function id_prof_exists($idprof, $value, $socid=0)
     	{
    +        // phpcs:enable
     		$field = $idprof;
     
     	 	switch($idprof)	// For backward compatibility
    @@ -2885,6 +2935,7 @@ class Societe extends CommonObject
     		else return false;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Verifie la validite d'un identifiant professionnel en fonction du pays de la societe (siren, siret, ...)
     	 *
    @@ -2895,6 +2946,7 @@ class Societe extends CommonObject
     	 */
     	function id_prof_check($idprof,$soc)
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$ok=1;
    @@ -3034,6 +3086,7 @@ class Societe extends CommonObject
     		return $ok;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Return an url to check online a professional id or empty string
     	 *
    @@ -3044,6 +3097,7 @@ class Societe extends CommonObject
     	 */
     	function id_prof_url($idprof,$thirdparty)
     	{
    +        // phpcs:enable
     		global $conf,$langs,$hookmanager;
     
     		$url='';
    @@ -3086,6 +3140,7 @@ class Societe extends CommonObject
     		return '';
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *   Indique si la societe a des projets
     	 *
    @@ -3093,6 +3148,7 @@ class Societe extends CommonObject
     	 */
     	function has_projects()
     	{
    +        // phpcs:enable
     		$sql = 'SELECT COUNT(*) as numproj FROM '.MAIN_DB_PREFIX.'projet WHERE fk_soc = ' . $this->id;
     		$resql = $this->db->query($sql);
     		if ($resql)
    @@ -3150,7 +3206,6 @@ class Societe extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -3191,6 +3246,7 @@ class Societe extends CommonObject
     		return isInEEC($this);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Charge la liste des categories fournisseurs
     	 *
    @@ -3198,6 +3254,7 @@ class Societe extends CommonObject
     	 */
     	function LoadSupplierCateg()
     	{
    +        // phpcs:enable
     		$this->SupplierCategories = array();
     		$sql = "SELECT rowid, label";
     		$sql.= " FROM ".MAIN_DB_PREFIX."categorie";
    @@ -3218,6 +3275,7 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Insert link supplier - category
     	 *
    @@ -3226,6 +3284,7 @@ class Societe extends CommonObject
     	 */
     	function AddFournisseurInCategory($categorie_id)
     	{
    +        // phpcs:enable
     		if ($categorie_id > 0 && $this->id > 0)
     		{
     			$sql = "INSERT INTO ".MAIN_DB_PREFIX."categorie_fournisseur (fk_categorie, fk_soc) ";
    @@ -3241,6 +3300,7 @@ class Societe extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Create a third party into database from a member object
     	 *
    @@ -3251,6 +3311,7 @@ class Societe extends CommonObject
     	 */
     	function create_from_member(Adherent $member, $socname='', $socalias='')
     	{
    +        // phpcs:enable
     		global $user,$langs;
     
     		dol_syslog(get_class($this)."::create_from_member", LOG_DEBUG);
    @@ -3272,6 +3333,8 @@ class Societe extends CommonObject
     		$this->phone=$member->phone;       // Prof phone
     		$this->email=$member->email;
     		$this->skype=$member->skype;
    +		$this->twitter=$member->twitter;
    +		$this->facebook=$member->facebook;
     
     		$this->client = 1;				// A member is a customer by default
     		$this->code_client = -1;
    @@ -3328,6 +3391,7 @@ class Societe extends CommonObject
     		$this->town=empty($conf->global->MAIN_INFO_SOCIETE_TOWN)?'':$conf->global->MAIN_INFO_SOCIETE_TOWN;
     		$this->state_id=empty($conf->global->MAIN_INFO_SOCIETE_STATE)?'':$conf->global->MAIN_INFO_SOCIETE_STATE;
     		$this->region_code=empty($conf->global->MAIN_INFO_SOCIETE_REGION)?'':$conf->global->MAIN_INFO_SOCIETE_REGION;
    +		$this->object=empty($conf->global->MAIN_INFO_SOCIETE_OBJECT)?'':$conf->global->MAIN_INFO_SOCIETE_OBJECT;
     
     		$this->note_private=empty($conf->global->MAIN_INFO_SOCIETE_NOTE)?'':$conf->global->MAIN_INFO_SOCIETE_NOTE;
     
    @@ -3411,6 +3475,8 @@ class Societe extends CommonObject
     		$this->country_code='FR';
     		$this->email='specimen@specimen.com';
     		$this->skype='tom.hanson';
    +		$this->twitter='tomhanson';
    +		$this->facebook='tomhanson';
     		$this->url='http://www.specimen.com';
     
     		$this->phone='0909090901';
    @@ -3517,6 +3583,7 @@ class Societe extends CommonObject
     		return $this->LibProspLevel($this->fk_prospectlevel);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return label of prospect level
     	 *
    @@ -3525,6 +3592,7 @@ class Societe extends CommonObject
     	 */
     	function LibProspLevel($fk_prospectlevel)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		$lib=$langs->trans("ProspectLevel".$fk_prospectlevel);
    @@ -3537,6 +3605,7 @@ class Societe extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Set prospect level
     	 *
    @@ -3546,6 +3615,7 @@ class Societe extends CommonObject
     	 */
     	function set_prospect_level(User $user)
     	{
    +        // phpcs:enable
     		return $this->update($this->id, $user);
     	}
     
    @@ -3561,6 +3631,7 @@ class Societe extends CommonObject
     		return $this->LibProspCommStatut($this->stcomm_id, $mode, $label);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return label of a given status
     	 *
    @@ -3571,6 +3642,7 @@ class Societe extends CommonObject
     	 */
     	function LibProspCommStatut($statut, $mode=0, $label='')
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load('customers');
     
    @@ -3614,6 +3686,7 @@ class Societe extends CommonObject
     		return "Error, mode/status not found";
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Set outstanding value
     	 *
    @@ -3623,6 +3696,7 @@ class Societe extends CommonObject
     	 */
     	function set_OutstandingBill(User $user)
     	{
    +        // phpcs:enable
     		return $this->update($this->id, $user);
     	}
     
    @@ -3779,14 +3853,17 @@ class Societe extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return amount of bill not paid
     	 *
     	 *  @return		int				Amount in debt for thirdparty
     	 *  @deprecated
    +	 *  @see getOutstandingBills()
     	 */
     	function get_OutstandingBill()
     	{
    +        // phpcs:enable
     		/* Accurate value of remain to pay is to sum remaintopay for each invoice
     	     $paiement = $invoice->getSommePaiement();
     	     $creditnotes=$invoice->getSumCreditNotesUsed();
    @@ -3832,6 +3909,7 @@ class Societe extends CommonObject
     		return $this->LibCustProspStatut($this->client);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -3840,6 +3918,7 @@ class Societe extends CommonObject
     	 */
     	function LibCustProspStatut($statut)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load('companies');
     
    @@ -3847,7 +3926,6 @@ class Societe extends CommonObject
     		if ($statut==1) return $langs->trans("Customer");
     		if ($statut==2) return $langs->trans("Prospect");
     		if ($statut==3) return $langs->trans("ProspectCustomer");
    -
     	}
     
     
    diff --git a/htdocs/societe/class/societeaccount.class.php b/htdocs/societe/class/societeaccount.class.php
    index 7340a319534..78f934ecf2f 100644
    --- a/htdocs/societe/class/societeaccount.class.php
    +++ b/htdocs/societe/class/societeaccount.class.php
    @@ -39,14 +39,17 @@ class SocieteAccount extends CommonObject
     	 * @var string ID to identify managed object
     	 */
     	public $element = 'societeaccount';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'societe_account';
    +
     	/**
     	 * @var array  Does societeaccount support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 */
     	public $ismultientitymanaged = 0;
    +
     	/**
     	 * @var string String with name of icon for societeaccount. Must be the part after the 'object_' into object_myobject.png
     	 */
    @@ -84,7 +87,7 @@ class SocieteAccount extends CommonObject
     		'pass_temp'    => array('type'=>'varchar(128)', 'label'=>'Temp', 'visible'=>0, 'enabled'=>0, 'position'=>32, 'notnull'=>-1,),
     		'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php', 'label'=>'ThirdParty', 'visible'=>1, 'enabled'=>1, 'position'=>40, 'notnull'=>-1, 'index'=>1),
     		'site' => array('type'=>'varchar(128)', 'label'=>'Site', 'visible'=>-1, 'enabled'=>1, 'position'=>41),
    -		'fk_website' => array('type'=>'integer:Website:website/class/website.class.php', 'label'=>'WebSite', 'visible'=>1, 'enabled'=>1, 'position'=>42, 'notnull'=>1, 'index'=>1),
    +		'fk_website' => array('type'=>'integer:Website:website/class/website.class.php', 'label'=>'WebSite', 'visible'=>1, 'enabled'=>1, 'position'=>42, 'notnull'=>-1, 'index'=>1),
     		'date_last_login' => array('type'=>'datetime', 'label'=>'LastConnexion', 'visible'=>2, 'enabled'=>1, 'position'=>50, 'notnull'=>0,),
     		'date_previous_login' => array('type'=>'datetime', 'label'=>'PreviousConnexion', 'visible'=>2, 'enabled'=>1, 'position'=>51, 'notnull'=>0,),
     		//'note_public' => array('type'=>'text', 'label'=>'NotePublic', 'visible'=>-1, 'enabled'=>1, 'position'=>45, 'notnull'=>-1,),
    @@ -96,23 +99,52 @@ class SocieteAccount extends CommonObject
     		'import_key' => array('type'=>'varchar(14)', 'label'=>'ImportId', 'visible'=>-2, 'enabled'=>1, 'position'=>1000, 'notnull'=>-1, 'index'=>1,),
     		'status' => array('type'=>'integer', 'label'=>'Status', 'visible'=>1, 'enabled'=>1, 'position'=>1000, 'notnull'=>1, 'index'=>1, 'default'=>1, 'arrayofkeyval'=>array('1'=>'Active','0'=>'Disabled')),
     	);
    +
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
    +
     	public $key_account;
    +	public $login;
     	public $pass_encoding;
     	public $pass_crypted;
     	public $pass_temp;
    -	public $fk_soc;
    +
    +	/**
    +	 * @var int Thirdparty ID
    +	 */
    +    public $fk_soc;
    +
     	public $site;
     	public $date_last_login;
     	public $date_previous_login;
     	public $note_private;
     	public $date_creation;
     	public $tms;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_creat;
    +
    +	/**
    +     * @var int ID
    +     */
     	public $fk_user_modif;
    +
     	public $import_key;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
    +
     	// END MODULEBUILDER PROPERTIES
     
     
    @@ -256,8 +288,6 @@ class SocieteAccount extends CommonObject
     	 */
     	public function getCustomerAccount($id, $site, $status=0)
     	{
    -		global $conf;
    -
     		$sql = "SELECT sa.key_account as key_account, sa.entity";
     		$sql.= " FROM " . MAIN_DB_PREFIX . "societe_account as sa";
     		$sql.= " WHERE sa.fk_soc = " . $id;
    @@ -266,7 +296,7 @@ class SocieteAccount extends CommonObject
     		$sql.= " AND key_account IS NOT NULL AND key_account <> ''";
     		//$sql.= " ORDER BY sa.key_account DESC";
     
    -		dol_syslog(get_class($this) . "::getCustomerAccount Try to find the system customer id of thirdparty id=".$id." (exemple: cus_.... for stripe)", LOG_DEBUG);
    +		dol_syslog(get_class($this) . "::getCustomerAccount Try to find the first system customer id for ".$site." of thirdparty id=".$id." (exemple: cus_.... for stripe)", LOG_DEBUG);
     		$result = $this->db->query($sql);
     		if ($result) {
     			if ($this->db->num_rows($result)) {
    @@ -391,6 +421,7 @@ class SocieteAccount extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return the status
     	 *
    @@ -400,43 +431,44 @@ class SocieteAccount extends CommonObject
     	 */
     	static function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
     		{
     			$prefix='';
     			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    +			elseif ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    +			elseif ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
    -			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
    +			elseif ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 6)
    +		elseif ($mode == 6)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
    -			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    +			elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
     		}
     	}
     
    @@ -486,7 +518,6 @@ class SocieteAccount extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    diff --git a/htdocs/societe/consumption.php b/htdocs/societe/consumption.php
    index 4138bf0891c..3a3fb8507c9 100644
    --- a/htdocs/societe/consumption.php
    +++ b/htdocs/societe/consumption.php
    @@ -25,7 +25,7 @@
      *	\brief      Add a tab on thirpdarty view to list all products/services bought or sells by thirdparty
      */
     
    -require("../main.inc.php");
    +require "../main.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
    @@ -554,7 +554,6 @@ if ($sql_select)
     				{
     					print (! empty($objp->description) && $objp->description!=$objp->product_label)?'<br>'.dol_htmlentitiesbr($objp->description):'';
     				}
    -
     			} else {
     
     				if (! empty($objp->label) || ! empty($objp->description))
    @@ -653,6 +652,6 @@ else {
     
     print "</form>";
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/contact.php b/htdocs/societe/contact.php
    index 37fb07eb652..4077a0b1815 100644
    --- a/htdocs/societe/contact.php
    +++ b/htdocs/societe/contact.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2003       Brian Fraval            <brian@fraval.org>
      * Copyright (C) 2004-2015  Laurent Destailleur     <eldy@users.sourceforge.net>
      * Copyright (C) 2005       Eric Seigne             <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2008       Patrick Raguin          <patrick.raguin@auguria.net>
      * Copyright (C) 2010-2016  Juanjo Menent           <jmenent@2byte.es>
      * Copyright (C) 2011-2013  Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    @@ -171,8 +171,6 @@ if ($action != 'presend')
     	}
     }
     
    -
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/societe/document.php b/htdocs/societe/document.php
    index e393fa64a2c..04e5b78682e 100644
    --- a/htdocs/societe/document.php
    +++ b/htdocs/societe/document.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    @@ -32,9 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     
    -$langs->load("companies");
    -$langs->load('other');
    -
    +$langs->loadLangs(array("companies", "other"));
     
     $action=GETPOST('action','aZ09');
     $confirm=GETPOST('confirm');
    @@ -105,7 +103,7 @@ if ($object->id)
     	dol_fiche_head($head, 'document', $langs->trans("ThirdParty"), -1, 'company');
     
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -169,6 +167,6 @@ else
     	accessforbidden('',0,0);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/societe/index.php b/htdocs/societe/index.php
    index b15042dd017..6c429e35a22 100644
    --- a/htdocs/societe/index.php
    +++ b/htdocs/societe/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2014      Charles-Fr Benke	    <charles.fr@benke.fr>
      * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>
      * Copyright (C) 2016      Ferran Marcet        <fmarcet@2byte.es>
    @@ -366,6 +366,6 @@ else
     //print '</td></tr></table>';
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php
    index 8ea73b73884..7ddc4ac575e 100644
    --- a/htdocs/societe/list.php
    +++ b/htdocs/societe/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
      * Copyright (C) 2012       Marcos García           <marcosgdf@gmail.com>
      * Copyright (C) 2013-2015  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
      * Copyright (C) 2015       Florian Henry           <florian.henry@open-concept.pro>
    @@ -84,10 +84,10 @@ $search_categ_cus=trim(GETPOST("search_categ_cus",'int'));
     $search_categ_sup=trim(GETPOST("search_categ_sup",'int'));
     $search_country=GETPOST("search_country",'intcomma');
     $search_type_thirdparty=GETPOST("search_type_thirdparty",'int');
    +$search_staff=GETPOST("search_staff",'int');
     $search_status=GETPOST("search_status",'int');
     $search_type=GETPOST('search_type','alpha');
    -$search_level_from = GETPOST("search_level_from","alpha");
    -$search_level_to   = GETPOST("search_level_to","alpha");
    +$search_level      = GETPOST("search_level", "array");
     $search_stcomm=GETPOST('search_stcomm','int');
     $search_import_key  = GETPOST("search_import_key","alpha");
     $search_btn=GETPOST('button_search','alpha');
    @@ -121,7 +121,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('societe');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // List of fields to search into when doing a "search in all"
     $fieldstosearchall = array(
    @@ -184,6 +184,7 @@ $arrayfields=array(
     	's.phone'=>array('label'=>"Phone", 'checked'=>1),
     	's.fax'=>array('label'=>"Fax", 'checked'=>0),
     	'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers),
    +	'staff.code'=>array('label'=>"Staff", 'checked'=>0),
     	's.siren'=>array('label'=>"ProfId1Short", 'checked'=>$checkedprofid1),
     	's.siret'=>array('label'=>"ProfId2Short", 'checked'=>$checkedprofid2),
     	's.ape'=>array('label'=>"ProfId3Short", 'checked'=>$checkedprofid3),
    @@ -258,10 +259,10 @@ if (empty($reshook))
     		$search_vat='';
     		$search_type='';
     		$search_type_thirdparty='';
    +		$search_staff='';
     		$search_status=-1;
     		$search_stcomm='';
    -	 	$search_level_from='';
    -	 	$search_level_to='';
    +	 	$search_level='';
     	 	$search_import_key='';
     	 	$toselect='';
     		$search_array_options=array();
    @@ -318,80 +319,22 @@ if ($type == 'c' && (empty($search_type) || ($search_type == '1,3'))) $title=$la
     if ($type == 'p' && (empty($search_type) || ($search_type == '2,3'))) $title=$langs->trans("ListOfProspects");
     if ($type == 'f' && (empty($search_type) || ($search_type == '4'))) $title=$langs->trans("ListOfSuppliers");
     
    -// If both parameters are set, search for everything BETWEEN them
    -if ($search_level_from != '' && $search_level_to != '')
    -{
    -	// Ensure that these parameters are numbers
    -	$search_level_from = (int) $search_level_from;
    -	$search_level_to = (int) $search_level_to;
    -
    -	// If from is greater than to, reverse orders
    -	if ($search_level_from > $search_level_to)
    -	{
    -		$tmp = $search_level_to;
    -		$search_level_to = $search_level_from;
    -		$search_level_from = $tmp;
    -	}
    -
    -	// Generate the SQL request
    -	$sortwhere = '(sortorder BETWEEN '.$search_level_from.' AND '.$search_level_to.') AS is_in_range';
    -}
    -// If only "from" parameter is set, search for everything GREATER THAN it
    -else if ($search_level_from != '')
    -{
    -	// Ensure that this parameter is a number
    -	$search_level_from = (int) $search_level_from;
    -
    -	// Generate the SQL request
    -	$sortwhere = '(sortorder >= '.$search_level_from.') AS is_in_range';
    -}
    -// If only "to" parameter is set, search for everything LOWER THAN it
    -else if ($search_level_to != '')
    -{
    -	// Ensure that this parameter is a number
    -	$search_level_to = (int) $search_level_to;
    -
    -	// Generate the SQL request
    -	$sortwhere = '(sortorder <= '.$search_level_to.') AS is_in_range';
    -}
    -// If no parameters are set, dont search for anything
    -else
    -{
    -	$sortwhere = '0 as is_in_range';
    -}
    -
     // Select every potentiels, and note each potentiels which fit in search parameters
    -dol_syslog('societe/list.php',LOG_DEBUG);
    -$sql = "SELECT code, label, sortorder, ".$sortwhere;
    +$tab_level = array();
    +$sql = "SELECT code, label, sortorder";
     $sql.= " FROM ".MAIN_DB_PREFIX."c_prospectlevel";
     $sql.= " WHERE active > 0";
     $sql.= " ORDER BY sortorder";
    -
     $resql = $db->query($sql);
     if ($resql)
     {
    -	$tab_level = array();
    -	$search_levels = array();
    -
     	while ($obj = $db->fetch_object($resql))
     	{
     		// Compute level text
     		$level=$langs->trans($obj->code);
     		if ($level == $obj->code) $level=$langs->trans($obj->label);
    -
    -		// Put it in the array sorted by sortorder
    -		$tab_level[$obj->sortorder] = $level;
    -
    -		// If this potentiel fit in parameters, add its code to the $search_levels array
    -		if ($obj->is_in_range == 1)
    -		{
    -			$search_levels[] = '"'.preg_replace('[^A-Za-z0-9_-]', '', $obj->code).'"';
    -		}
    +		$tab_level[$obj->code] = $level;
     	}
    -
    -	// Implode the $search_levels array so that it can be use in a "IN (...)" where clause.
    -	// If no paramters was set, $search_levels will be empty
    -	$search_levels = implode(',', $search_levels);
     }
     else dol_print_error($db);
     
    @@ -401,6 +344,7 @@ $sql.= " s.email, s.phone, s.fax, s.url, s.siren as idprof1, s.siret as idprof2,
     $sql.= " s.tms as date_update, s.datec as date_creation,";
     $sql.= " s.code_compta,s.code_compta_fournisseur,";
     $sql.= " typent.code as typent_code,";
    +$sql.= " staff.code as staff_code,";
     $sql.= " country.code as country_code,";
     $sql.= " state.code_departement as state_code, state.nom as state_name,";
     $sql.= " region.code_region as region_code, region.nom as region_name";
    @@ -419,6 +363,7 @@ $sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
     if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_extrafields as ef on (s.rowid = ef.fk_object)";
     $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)";
     $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)";
    +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_effectif as staff on (staff.id = s.fk_effectif)";
     $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)";
     $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_regions as region on (region.	code_region = state.fk_region)";
     // We'll need this table joined to the select in order to filter by categ
    @@ -452,8 +397,8 @@ if ($search_account_supplier_code) $sql.= natural_search("s.code_compta_fourniss
     if ($search_town)          $sql.= natural_search("s.town",$search_town);
     if (strlen($search_zip))   $sql.= natural_search("s.zip",$search_zip);
     if ($search_state)         $sql.= natural_search("state.nom",$search_state);
    -if ($search_region)         $sql.= natural_search("region.nom",$search_region);
    -if ($search_country)       $sql .= " AND s.fk_pays IN (".$search_country.')';
    +if ($search_region)        $sql.= natural_search("region.nom",$search_region);
    +if ($search_country && $search_country != '-1')       $sql .= " AND s.fk_pays IN (".$db->escape($search_country).')';
     if ($search_email)         $sql.= natural_search("s.email",$search_email);
     if (strlen($search_phone)) $sql.= natural_search("s.phone", $search_phone);
     if (strlen($search_fax)) $sql.= natural_search("s.phone", $search_fax);
    @@ -469,11 +414,12 @@ if (strlen($search_vat))     $sql.= natural_search("s.tva_intra",$search_vat);
     if ($search_type > 0 && in_array($search_type,array('1,3','2,3'))) $sql .= " AND s.client IN (".$db->escape($search_type).")";
     if ($search_type > 0 && in_array($search_type,array('4')))         $sql .= " AND s.fournisseur = 1";
     if ($search_type == '0') $sql .= " AND s.client = 0 AND s.fournisseur = 0";
    -if ($search_status!='' && $search_status >= 0) $sql .= " AND s.status = ".$db->escape($search_status);
    +if ($search_status!='' && $search_status >= 0) $sql .= natural_search("s.status", $search_status, 2);
     if (!empty($conf->barcode->enabled) && $search_barcode) $sql.= natural_search("s.barcode", $search_barcode);
    -if ($search_type_thirdparty) $sql .= " AND s.fk_typent IN (".$search_type_thirdparty.')';
    -if ($search_levels)  $sql .= " AND s.fk_prospectlevel IN (".$search_levels.')';
    -if ($search_stcomm != '' && $search_stcomm != -2) $sql.= natural_search("s.fk_stcomm",$search_stcomm,2);
    +if ($search_type_thirdparty && $search_type_thirdparty != '-1') $sql.= natural_search("s.fk_typent", $search_type_thirdparty, 2);
    +if (! empty($search_staff) && $search_staff != '-1')            $sql.= natural_search("s.fk_effectif", $search_staff, 2);
    +if ($search_level)  $sql .= natural_search("s.fk_prospectlevel", join(',', $search_level), 3);
    +if ($search_stcomm != '' && $search_stcomm != -2) $sql.= natural_search("s.fk_stcomm", $search_stcomm, 2);
     if ($search_import_key)    $sql.= natural_search("s.import_key",$search_import_key);
     // Add where from extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
    @@ -566,13 +512,12 @@ if ($search_idprof6 != '') $param.= '&search_idprof6='.urlencode($search_idprof6
     if ($search_vat != '')     $param.= '&search_vat='.urlencode($search_vat);
     if ($search_type_thirdparty != '')    $param.='&search_type_thirdparty='.urlencode($search_type_thirdparty);
     if ($search_type != '')    $param.='&search_type='.urlencode($search_type);
    -if ($optioncss != '')      $param.='&optioncss='.urlencode($optioncss);
    +if (is_array($search_level) && count($search_level)) foreach($search_level as $slevel) $param.='&search_level[]='.urlencode($slevel);
     if ($search_status != '')  $param.='&search_status='.urlencode($search_status);
     if ($search_stcomm != '')  $param.='&search_stcomm='.urlencode($search_stcomm);
    -if ($search_level_from != '') $param.='&search_level_from='.urlencode($search_level_from);
    -if ($search_level_to != '')   $param.='&search_level_to='.urlencode($search_level_to);
     if ($search_import_key != '') $param.='&search_import_key='.urlencode($search_import_key);
     if ($type != '') $param.='&type='.urlencode($type);
    +if ($optioncss != '')      $param.='&optioncss='.urlencode($optioncss);
     // Add $param from extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
     
    @@ -589,7 +534,7 @@ $arrayofmassactions =  array(
     );
     //if($user->rights->societe->creer) $arrayofmassactions['createbills']=$langs->trans("CreateInvoiceForThisCustomer");
     if ($user->rights->societe->supprimer) $arrayofmassactions['predelete']=$langs->trans("Delete");
    -if (in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array();
    +if (GETPOST('nomassaction','int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array();
     $massactionbutton=$form->selectMassAction('', $arrayofmassactions);
     
     $newcardbutton='';
    @@ -611,7 +556,7 @@ if ($user->rights->societe->creer)
     	$newcardbutton.= '</a>';
     }
     
    -print '<form method="post" action="'.$_SERVER["PHP_SELF"].'" name="formfilter" autocomplete="off">';
    +print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'" name="formfilter" autocomplete="off">';
     if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
     print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
     print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
    @@ -796,6 +741,13 @@ if (! empty($arrayfields['typent.code']['checked']))
     	print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 0, 0, 0, '', 0, 0, 0, (empty($conf->global->SOCIETE_SORT_ON_TYPEENT)?'ASC':$conf->global->SOCIETE_SORT_ON_TYPEENT));
     	print '</td>';
     }
    +// Staff
    +if (! empty($arrayfields['staff.code']['checked']))
    +{
    +	print '<td class="liste_titre maxwidthonsmartphone" align="center">';
    +	print $form->selectarray("search_staff", $formcompany->effectif_array(0), $search_staff, 0, 0, 0, '', 0, 0, 0, $sort, 'maxwidth100');
    +	print '</td>';
    +}
     if (! empty($arrayfields['s.email']['checked']))
     {
     	// Email
    @@ -888,37 +840,16 @@ if (! empty($arrayfields['customerorsupplier']['checked']))
     	print '<option value="0"'.($search_type=='0'?' selected':'').'>'.$langs->trans('Others').'</option>';
     	print '</select></td>';
     }
    +// Prospect level
     if (! empty($arrayfields['s.fk_prospectlevel']['checked']))
     {
    -	// Prospect level
      	print '<td class="liste_titre" align="center">';
    - 	$options_from = '<option value="">&nbsp;</option>';	 	// Generate in $options_from the list of each option sorted
    - 	foreach ($tab_level as $tab_level_sortorder => $tab_level_label)
    - 	{
    - 		$options_from .= '<option value="'.$tab_level_sortorder.'"'.($search_level_from == $tab_level_sortorder ? ' selected':'').'>';
    - 		$options_from .= $langs->trans($tab_level_label);
    - 		$options_from .= '</option>';
    - 	}
    - 	array_reverse($tab_level, true);	// Reverse the list
    - 	$options_to = '<option value="">&nbsp;</option>';		// Generate in $options_to the list of each option sorted in the reversed order
    - 	foreach ($tab_level as $tab_level_sortorder => $tab_level_label)
    - 	{
    - 		$options_to .= '<option value="'.$tab_level_sortorder.'"'.($search_level_to == $tab_level_sortorder ? ' selected':'').'>';
    - 		$options_to .= $langs->trans($tab_level_label);
    - 		$options_to .= '</option>';
    - 	}
    -
    -	// Print these two select
    - 	print $langs->trans("From").' <select class="flat" name="search_level_from">'.$options_from.'</select>';
    - 	print ' ';
    - 	print $langs->trans("to").' <select class="flat" name="search_level_to">'.$options_to.'</select>';
    -
    + 	print $form->multiselectarray('search_level', $tab_level, $search_level, 0, 0, 'width75', 0, 0, '', '', '', 2);
     	print '</td>';
     }
    -
    +// Prospect status
     if (! empty($arrayfields['s.fk_stcomm']['checked']))
     {
    -	// Prospect status
     	print '<td class="liste_titre maxwidthonsmartphone" align="center">';
     	$arraystcomm=array();
     	foreach($prospectstatic->cacheprospectstatus as $key => $val)
    @@ -950,7 +881,7 @@ if (! empty($arrayfields['s.tms']['checked']))
     // Status
     if (! empty($arrayfields['s.status']['checked']))
     {
    -	print '<td class="liste_titre maxwidthonsmartphone center">';
    +	print '<td class="liste_titre center minwidth75imp">';
     	print $form->selectarray('search_status', array('0'=>$langs->trans('ActivityCeased'),'1'=>$langs->trans('InActivity')), $search_status, 1);
     	print '</td>';
     }
    @@ -983,6 +914,7 @@ if (! empty($arrayfields['state.nom']['checked']))        print_liste_field_titr
     if (! empty($arrayfields['region.nom']['checked']))       print_liste_field_titre($arrayfields['region.nom']['label'],$_SERVER["PHP_SELF"],"region.nom","",$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['country.code_iso']['checked'])) print_liste_field_titre($arrayfields['country.code_iso']['label'],$_SERVER["PHP_SELF"],"country.code_iso","",$param,'align="center"',$sortfield,$sortorder);
     if (! empty($arrayfields['typent.code']['checked']))      print_liste_field_titre($arrayfields['typent.code']['label'],$_SERVER["PHP_SELF"],"typent.code","",$param,'align="center"',$sortfield,$sortorder);
    +if (! empty($arrayfields['staff.code']['checked']))       print_liste_field_titre($arrayfields['staff.code']['label'],$_SERVER["PHP_SELF"],"staff.code","",$param,'align="center"',$sortfield,$sortorder);
     if (! empty($arrayfields['s.email']['checked']))          print_liste_field_titre($arrayfields['s.email']['label'],$_SERVER["PHP_SELF"],"s.email","",$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['s.phone']['checked']))          print_liste_field_titre($arrayfields['s.phone']['label'],$_SERVER["PHP_SELF"],"s.phone","",$param,'',$sortfield,$sortorder);
     if (! empty($arrayfields['s.fax']['checked'])) print_liste_field_titre($arrayfields['s.fax']['label'],$_SERVER["PHP_SELF"],"s.fax","",$param,'',$sortfield,$sortorder);
    @@ -1068,13 +1000,13 @@ while ($i < min($num, $limit))
     	// Customer code
     	if (! empty($arrayfields['s.code_client']['checked']))
     	{
    -		print '<td>'.$obj->code_client.'</td>';
    +		print '<td class="nowraponall">'.$obj->code_client.'</td>';
     		if (! $i) $totalarray['nbfield']++;
     	}
     	// Supplier code
     	if (! empty($arrayfields['s.code_fournisseur']['checked']))
     	{
    -		print '<td>'.$obj->code_fournisseur.'</td>';
    +		print '<td class="nowraponall">'.$obj->code_fournisseur.'</td>';
     		if (! $i) $totalarray['nbfield']++;
     	}
     	// Account customer code
    @@ -1131,6 +1063,15 @@ while ($i < min($num, $limit))
     		print '</td>';
     		if (! $i) $totalarray['nbfield']++;
     	}
    +	// Staff
    +	if (! empty($arrayfields['staff.code']['checked']))
    +	{
    +		print '<td align="center">';
    +		if (! is_array($staffArray) || count($staffArray)==0) $staffArray = $formcompany->effectif_array(1);
    +		print $staffArray[$obj->staff_code];
    +		print '</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
     	if (! empty($arrayfields['s.email']['checked']))
     	{
     		print "<td>".$obj->email."</td>\n";
    @@ -1302,5 +1243,6 @@ print "</div>";
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/societe/note.php b/htdocs/societe/note.php
    index e31a07e8e65..9f1adb16fc7 100644
    --- a/htdocs/societe/note.php
    +++ b/htdocs/societe/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2013      Florian Henry	  	<florian.henry@open-concept.pro>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    @@ -129,6 +129,7 @@ else
     	print $langs->trans("ErrorRecordNotFound");
     }
     
    +// End of page
     llxFooter();
     $db->close();
     
    diff --git a/htdocs/societe/notify/card.php b/htdocs/societe/notify/card.php
    index cd8212ae327..b5de5c77456 100644
    --- a/htdocs/societe/notify/card.php
    +++ b/htdocs/societe/notify/card.php
    @@ -30,10 +30,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/triggers/interface_50_modNotification_Notification.class.php';
     
    -$langs->load("companies");
    -$langs->load("mails");
    -$langs->load("admin");
    -$langs->load("other");
    +$langs->loadLangs(array("companies", "mails", "admin", "other"));
     
     $socid = GETPOST("socid",'int');
     $action = GETPOST('action','aZ09');
    @@ -532,7 +529,6 @@ if ($result > 0)
     }
     else dol_print_error('','RecordNotFound');
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/notify/index.php b/htdocs/societe/notify/index.php
    index 3326e431178..129131ff5c6 100644
    --- a/htdocs/societe/notify/index.php
    +++ b/htdocs/societe/notify/index.php
    @@ -23,8 +23,7 @@
      */
     
     require '../../main.inc.php';
    -$langs->load("companies");
    -$langs->load("banks");
    +$langs->loadLangs(array("companies", "banks"));
     
     // S�curit� acc�s client
     if ($user->societe_id > 0)
    @@ -105,6 +104,6 @@ else
     	dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/societe/paymentmodes.php b/htdocs/societe/paymentmodes.php
    index aabc9ae7bed..0853b7ee571 100644
    --- a/htdocs/societe/paymentmodes.php
    +++ b/htdocs/societe/paymentmodes.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Jean-Louis Bergamo   <jlb@j1b.org>
      * Copyright (C) 2004-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Peter Fontaine       <contact@peterfontaine.fr>
      * Copyright (C) 2015-2016 Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2017      Ferran Marcet        <fmarcet@2byte.es>
    @@ -557,7 +557,7 @@ if (empty($reshook))
     			$sql.= " SET key_account = '".$db->escape(GETPOST('key_account', 'alpha'))."'";
     			$sql.= " WHERE site = 'stripe' AND fk_soc = ".$object->id." AND status = ".$servicestatus." AND entity = ".$conf->entity;	// Keep = here for entity. Only 1 record must be modified !
                     }
    -     
    +
     			$resql = $db->query($sql);
     			$num = $db->num_rows($resql);
     			if (empty($num) && !empty($newcu))
    @@ -764,10 +764,11 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
     		print $form->editfieldval("StripeCustomerId", 'key_account', $stripecu, $object, $permissiontowrite, 'string', '', null, null, '', 2, '', 'socid');
     		if ($stripecu && $action != 'editkey_account')
     		{
    -			$url='https://dashboard.stripe.com/test/customers/'.$stripecu;
    +			if (! empty($conf->stripe->enabled) && !empty($stripeacc)) $connect=$stripeacc.'/';
    +			$url='https://dashboard.stripe.com/'.$connect.'test/customers/'.$stripecu;
     			if ($servicestatus)
     			{
    -				$url='https://dashboard.stripe.com/customers/'.$stripecu;
    +				$url='https://dashboard.stripe.com/'.$connect.'customers/'.$stripecu;
     			}
     			print ' <a href="'.$url.'" target="_stripe">'.img_picto($langs->trans('ShowInStripe'), 'object_globe').'</a>';
     		}
    @@ -830,7 +831,9 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
     		print '<td></td>';
     		print '<td align="center">'.$langs->trans('Default').'</td>';
     		print '<td>'.$langs->trans('Note').'</td>';
    -		print "<td></td></tr>\n";
    +		print '<td>'.$langs->trans('DateModification').'</td>';
    +		print "<td></td>";
    +		print "</tr>\n";
     
     		$nbremote = 0;
     		$nblocal = 0;
    @@ -911,6 +914,9 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
     							if (empty($companypaymentmodetemp->stripe_card_ref)) print $langs->trans("Local");
     							else print $langs->trans("LocalAndRemote");
     							print '</td>';
    +							print '<td>';
    +							print dol_print_date($companypaymentmodetemp->tms, 'dayhour');
    +							print '</td>';
     							print '<td align="right" class="nowraponall">';
     							if ($user->rights->societe->creer)
     							{
    @@ -953,9 +959,17 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
     					print '<td>';
     					print '</td>';
     				}
    +				// Src ID
     				print '<td>';
    -				print $src->id;
    +				if (!empty($stripeacc)) $connect=$stripeacc.'/';
    +				$url='https://dashboard.stripe.com/'.$connect.'test/sources/'.$src->id;
    +				if ($servicestatus)
    +				{
    +					$url='https://dashboard.stripe.com/'.$connect.'sources/'.$src->id;
    +				}
    +				print $src->id." <a href='".$url."' target='_stripe'>".img_picto($langs->trans('ShowInStripe'), 'object_globe')."</a>";
     				print '</td>';
    +				// Img of credit card
     				print '<td>';
     				if ($src->object=='card')
     				{
    @@ -969,8 +983,8 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
     				{
     					print '<span class="fa fa-university fa-2x fa-fw"></span>';
     				}
    -
    -				print'</td><td valign="middle">';
    +				print'</td>';
    +				print '<td valign="middle">';
     				if ($src->object=='card')
     				{
     					print '....'.$src->last4.' - '.$src->exp_month.'/'.$src->exp_year.'';
    @@ -1022,6 +1036,11 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
     				print '</td>';
     				print '<td>';
     				print $langs->trans("Remote");
    +				//if ($src->cvc_check == 'fail') print ' - CVC check fail';
    +				print '</td>';
    +				print '<td>';
    +				//var_dump($src);
    +				print '';
     				print '</td>';
     				print '<td align="right" class="nowraponall">';
     				if ($user->rights->societe->creer)
    @@ -1188,7 +1207,7 @@ if ($socid && $action != 'edit' && $action != 'create' && $action != 'editcard'
     					$formadmin=new FormAdmin($db);
     					$defaultlang=$codelang?$codelang:$langs->getDefaultLang();
     					$morecss='maxwidth150';
    -					if (! empty($conf->browser->phone)) $morecss='maxwidth100';
    +					if ($conf->browser->layout == 'phone') $morecss='maxwidth100';
     					$out.= $formadmin->select_language($defaultlang, 'lang_idrib'.$rib->id, 0, 0, 0, 0, 0, $morecss);
     				}
     				// Button
    @@ -1614,7 +1633,6 @@ if ($socid && ($action == 'create' || $action == 'createcard') && $user->rights-
     	print '</form>';
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/price.php b/htdocs/societe/price.php
    index e35cf186ae3..92bad9ecf61 100644
    --- a/htdocs/societe/price.php
    +++ b/htdocs/societe/price.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2007	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005		Eric Seigne				<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2013	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2006		Andre Cianfarani		<acianfa@free.fr>
      * Copyright (C) 2015       Marcos García           <marcosgdf@gmail.com>
      *
    @@ -38,9 +38,7 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
     	$prodcustprice = new Productcustomerprice($db);
     }
     
    -$langs->load("products");
    -$langs->load("companies");
    -$langs->load("bills");
    +$langs->loadLangs(array("products", "companies", "bills"));
     
     $action = GETPOST('action', 'alpha');
     $search_prod = GETPOST('search_prod','alpha');
    @@ -611,10 +609,9 @@ if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES)) {
             print "</table>";
     
             print "</form>";
    -
     	}
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/project.php b/htdocs/societe/project.php
    index 08e2f593acb..97e6817f5d5 100644
    --- a/htdocs/societe/project.php
    +++ b/htdocs/societe/project.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005      Brice Davoleau       <brice.davoleau@gmail.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2007      Patrick Raguin  		<patrick.raguin@gmail.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
    @@ -31,8 +31,7 @@ require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
     require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
     
    -$langs->load("companies");
    -$langs->load("projects");
    +$langs->loadLangs(array("companies", "projects"));
     
     // Security check
     $socid = GETPOST('socid','int');
    @@ -147,7 +146,6 @@ if ($socid)
     	$result=show_projects($conf, $langs, $db, $object, $_SERVER["PHP_SELF"].'?socid='.$object->id, 1, $addbutton);
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/societe/societecontact.php b/htdocs/societe/societecontact.php
    index dfe78041f8a..630b8fa4723 100644
    --- a/htdocs/societe/societecontact.php
    +++ b/htdocs/societe/societecontact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005     	Patrick Rouillon    <patrick@rouillon.net>
      * Copyright (C) 2005-2011	Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin       <regis.houssin@inodbox.com>
      * Copyright (C) 2011-2015	Philippe Grand      <philippe.grand@atoo-net.com>
      * Copyright (C) 2014		Charles-Fr Benke	<charles.fr@benke.fr>
      * Copyright (C) 2015       Marcos García       <marcosgdf@gmail.com>
    @@ -32,8 +32,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
     
    -$langs->load("orders");
    -$langs->load("companies");
    +$langs->loadLangs(array("orders", "companies"));
     
     $id=GETPOST('id','int')?GETPOST('id','int'):GETPOST('socid','int');
     $ref=GETPOST('ref','alpha');
    @@ -343,5 +342,6 @@ if ($id > 0 || ! empty($ref))
     	}
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/societe/website.php b/htdocs/societe/website.php
    index 3563283ba05..032ece6f4c4 100644
    --- a/htdocs/societe/website.php
    +++ b/htdocs/societe/website.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2001-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005      Brice Davoleau       <brice.davoleau@gmail.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2006-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2007      Patrick Raguin  		<patrick.raguin@gmail.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
    @@ -63,7 +63,7 @@ $diroutputmassaction=$conf->website->dir_output . '/temp/massgeneration/'.$user-
     $hookmanager->initHooks(array('websitethirdpartylist'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('thirdpartyaccount');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost('thirdpartyaccount','','search_');
     
     unset($objectwebsiteaccount->fields['fk_soc']);		// Remove this field, we are already on the thirdparty
     
    @@ -535,7 +535,7 @@ if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nb
     	$hidegeneratedfilelistifempty=1;
     	if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0;
     
    -	require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
    +	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     	$formfile = new FormFile($db);
     
     	// Show list of available documents
    @@ -549,8 +549,6 @@ if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nb
     	print $formfile->showdocuments('massfilesarea_mymodule','',$filedir,$urlsource,0,$delallowed,'',1,1,0,48,1,$param,$title,'','','',null,$hidegeneratedfilelistifempty);
     }
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/stripe/admin/stripe.php b/htdocs/stripe/admin/stripe.php
    index bd95baecd08..6a4dd8713f7 100644
    --- a/htdocs/stripe/admin/stripe.php
    +++ b/htdocs/stripe/admin/stripe.php
    @@ -3,6 +3,7 @@
      * Copyright (C) 2017		Olivier Geffroy			<jeff@jeffinfo.com>
      * Copyright (C) 2017		Saasprov				<saasprov@gmail.com>
      * Copyright (C) 2018		ptibogxiv				<support@ptibogxiv.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -70,10 +71,14 @@ if ($action == 'setvalue' && $user->admin)
     	$result = dolibarr_set_const($db, "STRIPE_BANK_ACCOUNT_FOR_PAYMENTS", GETPOST('STRIPE_BANK_ACCOUNT_FOR_PAYMENTS', 'int'), 'chaine', 0, '', $conf->entity);
     	if (! $result > 0)
     		$error ++;
    -	$result = dolibarr_set_const($db, "STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS", GETPOST('STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS', 'int'), 'chaine', 0, '', $conf->entity);
    +    $result = dolibarr_set_const($db, "STRIPE_USER_ACCOUNT_FOR_ACTIONS", GETPOST('STRIPE_USER_ACCOUNT_FOR_ACTIONS', 'int'), 'chaine', 0, '', $conf->entity);
    +    if (! $result > 0) {
    +        $error ++;
    +    }
    +    $result = dolibarr_set_const($db, "STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS", GETPOST('STRIPE_BANK_ACCOUNT_FOR_BANKTRANSFERS', 'int'), 'chaine', 0, '', $conf->entity);
     	if (! $result > 0)
     		$error ++;
    -  $result = dolibarr_set_const($db, "STRIPE_MINIMAL_3DSECURE", GETPOST('STRIPE_MINIMAL_3DSECURE', 'int'), 'chaine', 0, '', $conf->entity);
    +    $result = dolibarr_set_const($db, "STRIPE_MINIMAL_3DSECURE", GETPOST('STRIPE_MINIMAL_3DSECURE', 'int'), 'chaine', 0, '', $conf->entity);
     	if (! $result > 0)
     		$error ++;
     	$result = dolibarr_set_const($db, "ONLINE_PAYMENT_CSS_URL", GETPOST('ONLINE_PAYMENT_CSS_URL', 'alpha'), 'chaine', 0, '', $conf->entity);
    @@ -116,10 +121,8 @@ if ($action == 'setvalue' && $user->admin)
     if ($action=="setlive")
     {
     	$liveenable = GETPOST('value','int');
    -	$res = dolibarr_set_const($db, "STRIPE_LIVE", $liveenable,'yesno',0,'',$conf->entity);
    -	if (! $res > 0) $error++;
    -	if (! $error)
    -	{
    +	$res = dolibarr_set_const($db, "STRIPE_LIVE", $liveenable, 'yesno', 0, '', $conf->entity);
    +	if ($res > 0) {
     		setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
     	}
     	else
    @@ -251,6 +254,11 @@ print '<input size="64" type="text" name="ONLINE_PAYMENT_CREDITOR" value="'.$con
     print ' &nbsp; '.$langs->trans("Example").': '.$mysoc->name;
     print '</td></tr>';
     
    +print '<tr class="oddeven"><td>';
    +print $langs->trans("StripeUserAccountForActions").'</td><td>';
    +print $form->select_dolusers($conf->global->STRIPE_USER_ACCOUNT_FOR_ACTIONS, 'STRIPE_USER_ACCOUNT_FOR_ACTIONS', 0);
    +print '</td></tr>';
    +
     print '<tr class="oddeven"><td>';
     print $langs->trans("BankAccount").'</td><td>';
     print $form->select_comptes($conf->global->STRIPE_BANK_ACCOUNT_FOR_PAYMENTS, 'STRIPE_BANK_ACCOUNT_FOR_PAYMENTS', 0, '', 1);
    @@ -354,7 +362,6 @@ if (! empty($conf->use_javascript_ajax))
     	print '</script>';
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    -
    diff --git a/htdocs/stripe/charge.php b/htdocs/stripe/charge.php
    index 1464c9c2e6b..73c1f7b86c8 100644
    --- a/htdocs/stripe/charge.php
    +++ b/htdocs/stripe/charge.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2018 	PtibogXIV        <support@ptibogxiv.net>
    +/* Copyright (C) 2018 	Thibault FOUCART        <support@ptibogxiv.net>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -62,14 +62,16 @@ llxHeader('', $langs->trans("StripeChargeList"));
     if (! empty($conf->stripe->enabled) && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox','alpha')))
     {
     	$service = 'StripeTest';
    +	$servicestatus = '0';
     	dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning');
     }
     else
     {
     	$service = 'StripeLive';
    +	$servicestatus = '1';
     }
     
    -$stripeaccount = $stripe->getStripeAccount($service);
    +$stripeacc = $stripe->getStripeAccount($service);
     /*if (empty($stripeaccount))
     {
     	print $langs->trans('ErrorStripeAccountNotDefined');
    @@ -77,24 +79,24 @@ $stripeaccount = $stripe->getStripeAccount($service);
     
     if (!$rowid)
     {
    -	print '<FORM method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    -    if ($optioncss != '') print '<INPUT type="hidden" name="optioncss" value="'.$optioncss.'">';
    -    print '<INPUT type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    -	print '<INPUT type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
    -    print '<INPUT type="hidden" name="action" value="list">';
    -    print '<INPUT type="hidden" name="sortfield" value="'.$sortfield.'">';
    -    print '<INPUT type="hidden" name="sortorder" value="'.$sortorder.'">';
    -    print '<INPUT type="hidden" name="page" value="'.$page.'">';
    +	print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    +    if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
    +    print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +	print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
    +    print '<input type="hidden" name="action" value="list">';
    +    print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
    +    print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
    +    print '<input type="hidden" name="page" value="'.$page.'">';
     
         $title=$langs->trans("StripeChargeList");
    -    $title.=($stripeaccount?' (Stripe connection with Stripe OAuth Connect account '.$stripeaccount.')':' (Stripe connection with keys from Stripe module setup)');
    +    $title.=($stripeacc?' (Stripe connection with Stripe OAuth Connect account '.$stripeacc.')':' (Stripe connection with keys from Stripe module setup)');
     
     	print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,'',$num, $totalnboflines, 'title_accountancy.png', 0, '', '', $limit);
     
    -    print '<DIV class="div-table-responsive">';
    -    print '<TABLE class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
    +    print '<div class="div-table-responsive">';
    +    print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
     
    -    print '<TR class="liste_titre">';
    +    print '<tr class="liste_titre">';
         print_liste_field_titre("Ref",$_SERVER["PHP_SELF"],"","","","",$sortfield,$sortorder);
         print_liste_field_titre("StripeCustomerId",$_SERVER["PHP_SELF"],"","","","",$sortfield,$sortorder);
         print_liste_field_titre("Customer",$_SERVER["PHP_SELF"],"","","","",$sortfield,$sortorder);
    @@ -103,13 +105,13 @@ if (!$rowid)
         print_liste_field_titre("Type",$_SERVER["PHP_SELF"],"","","",'align="left"',$sortfield,$sortorder);
         print_liste_field_titre("Paid",$_SERVER["PHP_SELF"],"","","",'align="right"',$sortfield,$sortorder);
         print_liste_field_titre("Status",$_SERVER["PHP_SELF"],"","","",'align="right"');
    -    print "</TR>\n";
    +    print "</tr>\n";
     
    -	print "</TR>\n";
    +	print "</tr>\n";
     
    -	if ($stripeaccount)
    +	if ($stripeacc)
     	{
    -		$list=\Stripe\Charge::all(array("limit" => $limit), array("stripe_account" => $stripeaccount));
    +		$list=\Stripe\Charge::all(array("limit" => $limit), array("stripe_account" => $stripeacc));
     	}
     	else
     	{
    @@ -125,15 +127,19 @@ if (!$rowid)
     		// Save into $tmparray all metadata
     		$tmparray = dolExplodeIntoArray($FULLTAG,'.','=');
     		// Load origin object according to metadata
    -		if (! empty($tmparray['CUS']))
    +		if (! empty($tmparray['CUS']) && $tmparray['CUS'] > 0)
     		{
     			$societestatic->fetch($tmparray['CUS']);
     		}
    +		elseif (! empty($charge->metadata->dol_thirdparty_id) && $charge->metadata->dol_thirdparty_id > 0)
    +		{
    +			$societestatic->fetch($charge->metadata->dol_thirdparty_id);
    +		}
     		else
     		{
     			$societestatic->id = 0;
     		}
    -		if (! empty($tmparray['MEM']))
    +		if (! empty($tmparray['MEM']) && $tmparray['MEM'] > 0)
     		{
     			$memberstatic->fetch($tmparray['MEM']);
     		}
    @@ -142,39 +148,60 @@ if (!$rowid)
     			$memberstatic->id = 0;
     		}
     
    -	    print '<TR class="oddeven">';
    -	    // Ref
    -		print "<TD><A href='".DOL_URL_ROOT."/stripe/charge.php?rowid=".$charge->id."'>".$charge->id."</A></TD>\n";
    +		print '<tr class="oddeven">';
    +    
    +    if (!empty($stripeacc)) $connect=$stripeacc.'/';
    +    
    +		// Ref
    +		$url='https://dashboard.stripe.com/'.$connect.'test/payments/'.$charge->id;
    +			if ($servicestatus)
    +			{
    +				$url='https://dashboard.stripe.com/'.$connect.'payments/'.$charge->id;
    +			}
    +		print "<td><a href='".$url."' target='_stripe'>".img_picto($langs->trans('ShowInStripe'), 'object_globe')." ".$charge->id."</a></td>\n";
     		// Stripe customer
    -		print "<TD>".$charge->customer."</TD>\n";
    +		print "<td>";
    +
    +    if (! empty($conf->stripe->enabled) && !empty($stripeacc)) $connect=$stripeacc.'/';
    +		$url='https://dashboard.stripe.com/'.$connect.'test/customers/'.$charge->customer;
    +		if ($servicestatus)
    +		{
    +    $url='https://dashboard.stripe.com/'.$connect.'customers/'.$charge->customer;
    +		}
    +		print '<a href="'.$url.'" target="_stripe">'.img_picto($langs->trans('ShowInStripe'), 'object_globe').' '.$charge->customer.'</a>';
    +  
    +    print "</td>\n";
     		// Link
    -		print "<TD>";
    +		print "<td>";
     		if ($societestatic->id > 0)
     		{
     			print $societestatic->getNomUrl(1);
     		}
    -		if ($memberstatic->id > 0)
    +		elseif ($memberstatic->id > 0)
     		{
     			print $memberstatic->getNomUrl(1);
     		}
    -		print "</TD>\n";
    +		print "</td>\n";
     		// Origine
    -		print "<TD>";
    -		print $FULLTAG;
    -		if ($charge->metadata->source=="order"){
    +		print "<td>";
    +		if ($charge->metadata->dol_type=="order"){
     			$object = new Commande($db);
    -			$object->fetch($charge->metadata->idsource);
    -			print "<A href='".DOL_URL_ROOT."/commande/card.php?id=".$charge->metadata->idsource."'>".img_picto('', 'object_order')." ".$object->ref."</A>";
    -		} elseif ($charge->metadata->source=="invoice"){
    +			$object->fetch($charge->metadata->dol_id);
    +      if ($object->id > 0) {
    +			print "<a href='".DOL_URL_ROOT."/commande/card.php?id=".$object->id."'>".img_picto('', 'object_order')." ".$object->ref."</a>";
    +      } else print $FULLTAG;
    +		} elseif ($charge->metadata->dol_type=="invoice"){
     			$object = new Facture($db);
    -			$object->fetch($charge->metadata->idsource);
    -		    print "<A href='".DOL_URL_ROOT."/compta/facture/card.php?facid=".$charge->metadata->idsource."'>".img_picto('', 'object_invoice')." ".$object->ref."</A>";
    -		}
    -	    print "</TD>\n";
    +			$object->fetch($charge->metadata->dol_id);
    +      if ($object->id > 0) {
    +		  print "<a href='".DOL_URL_ROOT."/compta/facture/card.php?facid=".$charge->metadata->dol_id."'>".img_picto('', 'object_invoice')." ".$object->ref."</a>";
    +      } else print $FULLTAG;
    +		} else print $FULLTAG;
    +	    print "</td>\n";
     		// Date payment
    -	    print '<TD align="center">'.dol_print_date($charge->created,'%d/%m/%Y %H:%M')."</TD>\n";
    +	    print '<td align="center">'.dol_print_date($charge->created,'%d/%m/%Y %H:%M')."</td>\n";
     	    // Type
    -	    print '<TD>';
    +	    print '<td>';
     		if ($charge->source->object=='card')
     		{
     		    print $langs->trans("card");
    @@ -184,28 +211,30 @@ if (!$rowid)
     		} elseif ($charge->source->type=='three_d_secure'){
     		    print $langs->trans("card3DS");
     		}
    -	    print '</TD>';
    +	    print '</td>';
     	    // Amount
    -	    print "<TD align=\"right\">".price(($charge->amount-$charge->amount_refunded)/100)."</TD>";
    +	    print "<td align=\"right\">".price(($charge->amount-$charge->amount_refunded)/100, 0, '', 1, - 1, - 1, strtoupper($charge->currency))."</td>";
     	    // Status
    -	    print '<TD align="right">';
    +	    print '<td align="right">';
     	    if ($charge->refunded=='1'){
    -	    	print $langs->trans("refunded");
    +	    	print img_picto($langs->trans("refunded"),'statut6');
     	    } elseif ($charge->paid=='1'){
    -	    	print $langs->trans("".$charge->status."");
    +
    +        print img_picto($langs->trans("".$charge->status.""),'statut4');
     	    } else {
     	    	$label="Message: ".$charge->failure_message."<br>";
     	    	$label.="Réseau: ".$charge->outcome->network_status."<br>";
     	    	$label.="Statut: ".$langs->trans("".$charge->outcome->seller_message."");
    -	    	print $form->textwithpicto($langs->trans("".$charge->status.""),$label,1);
    +	    	print $form->textwithpicto(img_picto($langs->trans("".$charge->status.""),'statut8'),$label,1);
     	    }
    -	    print "</TD>\n";
    +	    print "</td>\n";
     
    -	    print "</TR>\n";
    +	    print "</tr>\n";
     	}
     } else {
     
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/stripe/class/actions_stripe.class.php b/htdocs/stripe/class/actions_stripe.class.php
    index 0451c1d4782..3ecb02a6300 100644
    --- a/htdocs/stripe/class/actions_stripe.class.php
    +++ b/htdocs/stripe/class/actions_stripe.class.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2009-2016 Regis Houssin  <regis@dolibarr.fr>
    +/* Copyright (C) 2009-2016 Regis Houssin  <regis.houssin@inodbox.com>
      * Copyright (C) 2011      Herve Prot     <herve.prot@symeos.com>
      * Copyright (C) 2014      Philippe Grand <philippe.grand@atoo-net.com>
      *
    @@ -36,8 +36,10 @@ $langs->load("stripe@stripe");
      */
     class ActionsStripeconnect
     {
    -	/** @var DoliDB */
    -	var $db;
    +	/**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
     	private $config=array();
     
    @@ -63,6 +65,7 @@ class ActionsStripeconnect
     	 * @param	array	$parameters		Parameters
     	 * @param	Object	$object			Object
     	 * @param	string	$action			Action
    +     * @return bool
     	 */
     	function formObjectOptions($parameters, &$object, &$action)
     	{
    @@ -106,7 +109,6 @@ class ActionsStripeconnect
     				$this->resprints.= $langs->trans("NoStripe");
     			}
     			$this->resprints.= '</td></tr>';
    -
     		}
     		elseif (is_object($object) && $object->element == 'member'){
     			$this->resprints.= '<tr><td>';
    @@ -233,5 +235,4 @@ class ActionsStripeconnect
     		}
     		return 0;
     	}
    -
     }
    diff --git a/htdocs/stripe/class/index.html b/htdocs/stripe/class/index.html
    new file mode 100644
    index 00000000000..8b137891791
    --- /dev/null
    +++ b/htdocs/stripe/class/index.html
    @@ -0,0 +1 @@
    +
    diff --git a/htdocs/stripe/class/stripe.class.php b/htdocs/stripe/class/stripe.class.php
    index b8472d0b821..d8e7168e5c0 100644
    --- a/htdocs/stripe/class/stripe.class.php
    +++ b/htdocs/stripe/class/stripe.class.php
    @@ -28,15 +28,39 @@ require_once DOL_DOCUMENT_ROOT.'/stripe/config.php';						// This set stripe glo
      */
     class Stripe extends CommonObject
     {
    +	/**
    +	 * @var int ID
    +	 */
     	public $rowid;
    -	public $fk_soc;
    +
    +	/**
    +	 * @var int Thirdparty ID
    +	 */
    +    public $fk_soc;
    +
    +    /**
    +     * @var int ID
    +     */
     	public $fk_key;
    +
    +	/**
    +	 * @var int ID
    +	 */
     	public $id;
    +
     	public $mode;
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
    +
     	public $statut;
    +
     	public $type;
    +
     	public $code;
    +
     	public $message;
     
     	/**
    @@ -47,7 +71,6 @@ class Stripe extends CommonObject
     	public function __construct($db)
     	{
     		$this->db = $db;
    -
     	}
     
     
    @@ -99,8 +122,6 @@ class Stripe extends CommonObject
     	 */
     	public function getStripeCustomerAccount($id, $status=0)
     	{
    -		global $conf;
    -
     		include_once DOL_DOCUMENT_ROOT.'/societe/class/societeaccount.class.php';
     		$societeaccount = new SocieteAccount($this->db);
     		return $societeaccount->getCustomerAccount($id, 'stripe', $status);		// Get thirdparty cus_...
    @@ -166,11 +187,22 @@ class Stripe extends CommonObject
     			{
     				$dataforcustomer = array(
     					"email" => $object->email,
    -					"business_vat_id" => $object->tva_intra,
     					"description" => $object->name,
     					"metadata" => array('dol_id'=>$object->id, 'dol_version'=>DOL_VERSION, 'dol_entity'=>$conf->entity, 'ipaddress'=>(empty($_SERVER['REMOTE_ADDR'])?'':$_SERVER['REMOTE_ADDR']))
     				);
     
    +				$vatcleaned = $object->tva_intra ? $object->tva_intra : null;
    +
    +				$taxinfo = array('type'=>'vat');
    +				if ($vatcleaned)
    +				{
    +					$taxinfo["tax_id"] = $vatcleaned;
    +				}
    +				// We force data to "null" if not defined as expected by Stripe
    +				if (empty($vatcleaned)) $taxinfo=null;
    +
    +				$dataforcustomer["tax_info"] = $taxinfo;
    +
     				//$a = \Stripe\Stripe::getApiKey();
     				//var_dump($a);var_dump($key);exit;
     				try {
    @@ -252,7 +284,6 @@ class Stripe extends CommonObject
     						$this->error = $e->getMessage();
     						dol_syslog($this->error, LOG_WARNING);
     					}
    -
     				}
     				elseif ($createifnotlinkedtostripe)
     				{
    @@ -315,18 +346,19 @@ class Stripe extends CommonObject
     	/**
     	 * Create charge with public/payment/newpayment.php, stripe/card.php, cronjobs or REST API
     	 *
    -	 * @param int 		$amount									Amount to pay
    -	 * @param string 	$currency								EUR, GPB...
    -	 * @param string 	$origin									Object type to pay (order, invoice, contract...)
    -	 * @param int 		$item									Object id to pay
    -	 * @param string 	$source									src_xxxxx or card_xxxxx
    -	 * @param string 	$customer								Stripe customer ref 'cus_xxxxxxxxxxxxx' via customerStripe()
    -	 * @param string 	$account								Stripe account ref 'acc_xxxxxxxxxxxxx' via  getStripeAccount()
    +	 * @param	int 	$amount									Amount to pay
    +	 * @param	string 	$currency								EUR, GPB...
    +	 * @param	string 	$origin									Object type to pay (order, invoice, contract...)
    +	 * @param	int 	$item									Object id to pay
    +	 * @param	string 	$source									src_xxxxx or card_xxxxx
    +	 * @param	string 	$customer								Stripe customer ref 'cus_xxxxxxxxxxxxx' via customerStripe()
    +	 * @param	string 	$account								Stripe account ref 'acc_xxxxxxxxxxxxx' via  getStripeAccount()
     	 * @param	int		$status									Status (0=test, 1=live)
     	 * @param	int		$usethirdpartyemailforreceiptemail		Use thirdparty email as receipt email
    +	 * @param	boolean	$capture								Set capture flag to true (take payment) or false (wait)
     	 * @return Stripe
     	 */
    -	public function createPaymentStripe($amount, $currency, $origin, $item, $source, $customer, $account, $status=0, $usethirdpartyemailforreceiptemail=0)
    +	public function createPaymentStripe($amount, $currency, $origin, $item, $source, $customer, $account, $status=0, $usethirdpartyemailforreceiptemail=0, $capture=true)
     	{
     		global $conf;
     
    @@ -367,18 +399,19 @@ class Stripe extends CommonObject
     			$order = new Commande($this->db);
     			$order->fetch($item);
     			$ref = $order->ref;
    -			$description = "ORD=" . $ref . ".CUS=" . $societe->id;
    +			$description = "ORD=" . $ref . ".CUS=" . $societe->id.".PM=stripe";
     		} elseif ($origin == invoice) {
     			$invoice = new Facture($this->db);
     			$invoice->fetch($item);
     			$ref = $invoice->ref;
    -			$description = "INV=" . $ref . ".CUS=" . $societe->id;
    +			$description = "INV=" . $ref . ".CUS=" . $societe->id.".PM=stripe";
     		}
     
     		$metadata = array(
     			"dol_id" => "" . $item . "",
     			"dol_type" => "" . $origin . "",
     			"dol_thirdparty_id" => "" . $societe->id . "",
    +			'dol_thirdparty_name' => $societe->name,
     			'dol_version'=>DOL_VERSION,
     			'dol_entity'=>$conf->entity,
     			'ipaddress'=>(empty($_SERVER['REMOTE_ADDR'])?'':$_SERVER['REMOTE_ADDR'])
    @@ -396,7 +429,9 @@ class Stripe extends CommonObject
     					$charge = \Stripe\Charge::create(array(
     						"amount" => "$stripeamount",
     						"currency" => "$currency",
    -						// "statement_descriptor" => " ",
    +						"statement_descriptor" => dol_trunc(dol_trunc(dol_string_unaccent($mysoc->name), 8, 'right', 'UTF-8', 1).' '.$description, 22, 'right', 'UTF-8', 1),     // 22 chars that appears on bank receipt
    +						"description" => "Stripe payment: ".$description,
    +						"capture"  => $capture,
     						"metadata" => $metadata,
     						"source" => "$source"
     					));
    @@ -404,8 +439,9 @@ class Stripe extends CommonObject
     					$paymentarray = array(
     						"amount" => "$stripeamount",
     						"currency" => "$currency",
    -						// "statement_descriptor" => " ",
    -						"description" => "$description",
    +						"statement_descriptor" => dol_trunc(dol_trunc(dol_string_unaccent($mysoc->name), 8, 'right', 'UTF-8', 1).' '.$description, 22, 'right', 'UTF-8', 1),     // 22 chars that appears on bank receipt
    +						"description" => "Stripe payment: ".$description,
    +						"capture"  => $capture,
     						"metadata" => $metadata,
     						"source" => "$source",
     						"customer" => "$customer"
    @@ -425,19 +461,26 @@ class Stripe extends CommonObject
     					$fee = round($conf->global->STRIPE_APPLICATION_FEE_MINIMAL * 100);
     				}
     
    -				$charge = \Stripe\Charge::create(array(
    -					"amount" => "$stripeamount",
    -					"currency" => "$currency",
    -					// "statement_descriptor" => " ",
    -					"description" => "$description",
    -					"metadata" => $metadata,
    -					"source" => "$source",
    -					"customer" => "$customer",
    -					"application_fee" => "$fee"
    -					), array(
    -					"idempotency_key" => "$ref",
    -					"stripe_account" => "$account"
    -				));
    +        		$paymentarray = array(
    +						"amount" => "$stripeamount",
    +						"currency" => "$currency",
    +						"statement_descriptor" => dol_trunc(dol_trunc(dol_string_unaccent($mysoc->name), 8, 'right', 'UTF-8', 1).' '.$description, 22, 'right', 'UTF-8', 1),     // 22 chars that appears on bank receipt
    +						"description" => "Stripe payment: ".$description,
    +						"capture"  => $capture,
    +						"metadata" => $metadata,
    +						"source" => "$source",
    +						"customer" => "$customer"
    +					);
    +					if ($conf->entity!=$conf->global->STRIPECONNECT_PRINCIPAL && $fee>0)
    +					{
    +						$paymentarray["application_fee"] = $fee;
    +					}
    +					if ($societe->email && $usethirdpartyemailforreceiptemail)
    +					{
    +						$paymentarray["receipt_email"] = $societe->email;
    +					}
    +
    +					$charge = \Stripe\Charge::create($paymentarray, array("idempotency_key" => "$ref","stripe_account" => "$account"));
     			}
     			if (isset($charge->id)) {}
     
    @@ -501,5 +544,4 @@ class Stripe extends CommonObject
     		}
     		return $return;
     	}
    -
     }
    diff --git a/htdocs/stripe/config.php b/htdocs/stripe/config.php
    index 7aa22678d7a..cea97efe0a3 100644
    --- a/htdocs/stripe/config.php
    +++ b/htdocs/stripe/config.php
    @@ -55,4 +55,4 @@ else
     
     \Stripe\Stripe::setApiKey($stripearrayofkeys['secret_key']);
     \Stripe\Stripe::setAppInfo("Dolibarr Stripe", DOL_VERSION, "https://www.dolibarr.org"); // add dolibarr version
    -\Stripe\Stripe::setApiVersion("2018-07-27"); // force version API
    +\Stripe\Stripe::setApiVersion("2018-11-08"); // force version API
    diff --git a/htdocs/stripe/payment.php b/htdocs/stripe/payment.php
    index 1113d1428f5..7a06da294ab 100644
    --- a/htdocs/stripe/payment.php
    +++ b/htdocs/stripe/payment.php
    @@ -1,13 +1,15 @@
     <?php
    -/* Copyright (C) 2001-2006 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2016 Laurent Destailleur   <eldy@users.sourceforge.net>
    - * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    - * Copyright (C) 2007      Franky Van Liedekerke <franky.van.liedekerke@telenet.be>
    - * Copyright (C) 2012      Cédric Salvador       <csalvador@gpcsolutions.fr>
    - * Copyright (C) 2014      Raphaël Doursenaud    <rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) 2014      Teddy Andreotti       <125155@supinfo.com>
    - * Copyright (C) 2015      Juanjo Menent		 <jmenent@2byte.es>
    +/* Copyright (C) 2001-2006  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2007       Franky Van Liedekerke   <franky.van.liedekerke@telenet.be>
    + * Copyright (C) 2012       Cédric Salvador         <csalvador@gpcsolutions.fr>
    + * Copyright (C) 2014       Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2014       Teddy Andreotti         <125155@supinfo.com>
    + * Copyright (C) 2015       Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2018       Thibault FOUCART         <support@ptibogxiv.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -30,8 +32,7 @@
      */
     
     // Load Dolibarr environment
    -$res=@include("../main.inc.php");                                // For root directory
    -if (! $res) $res=@include("../../main.inc.php");
    +require '../main.inc.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
     require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    @@ -47,9 +48,9 @@ $confirm	= GETPOST('confirm');
     
     $facid		= GETPOST('facid','int');
     $socname	= GETPOST('socname');
    -$source	= GETPOST('source_id');
    +$source = GETPOST('source_id');
     $accountid	= GETPOST('accountid');
    -$paymentnum	= GETPOST('num_paiement');
    +$paymentnum = GETPOST('num_paiement');
     
     $sortfield	= GETPOST('sortfield','alpha');
     $sortorder	= GETPOST('sortorder','alpha');
    @@ -62,21 +63,6 @@ $addwarning=0;
     $multicurrency_amounts=array();
     $multicurrency_amountsresttopay=array();
     
    -if (! empty($conf->stripe->enabled))
    -{
    -	$service = 'StripeTest';
    -	$servicestatus = 0;
    -	if (! empty($conf->global->STRIPE_LIVE) && ! GETPOST('forcesandbox','alpha'))
    -	{
    -		$service = 'StripeLive';
    -		$servicestatus = 0;
    -	}
    -
    -	$stripe = new Stripe($db);
    -	$stripeacc = $stripe->getStripeAccount($service);								// Stripe OAuth connect account of dolibarr user (no network access here)
    -	$stripecu = $stripe->getStripeCustomerAccount($object->id, $servicestatus);		// Get thirdparty cu_...
    -}
    -
     // Security check
     $socid=0;
     if ($user->societe_id > 0)
    @@ -92,6 +78,20 @@ if ($facid > 0)
     	$ret=$object->fetch($facid);
     }
     
    +if (! empty($conf->stripe->enabled))
    +{
    +	$service = 'StripeTest';
    +	$servicestatus = 0;
    +	if (! empty($conf->global->STRIPE_LIVE) && ! GETPOST('forcesandbox','alpha'))
    +	{
    +		$service = 'StripeLive';
    +		$servicestatus = 0;
    +	}
    +
    +	$stripe=new Stripe($db);
    +	$stripeacc = $stripe->getStripeAccount($service);								// Stripe OAuth connect account of dolibarr user (no network access here)
    +}
    +
     // Initialize technical object to manage hooks of paiements. Note that conf->hooks_modules contains array array
     $hookmanager->initHooks(array('paiementcard','globalcard'));
     
    @@ -218,15 +218,12 @@ if (empty($reshook))
     	/*
     	 * Action add_paiement
     	 */
    -	if ($action == 'add_paiement')
    -	{
    -	    if ($error)
    -	    {
    -      $action = 'create';
    -      if (!$source)
    -	    {
    -			setEventMessages($langs->transnoentities('NoSource'), null, 'errors');
    -	    }
    +	if ($action == 'add_paiement') {
    +	    if ($error) {
    +            $action = 'create';
    +            if (!$source) {
    +			    setEventMessages($langs->transnoentities('NoSource'), null, 'errors');
    +	        }
     	        $error++;
     	    }
     	    // Le reste propre a cette action s'affiche en bas de page.
    @@ -301,7 +298,7 @@ if (empty($reshook))
     		}
     		elseif (preg_match('/src_/i',$source))
     		{
    -	
    +
     		        $customer2 = $customerstripe=$stripe->customerStripe($facture->thirdparty, $stripeacc, $servicestatus);
     			$src = $customer2->sources->retrieve("$source");
     			if ($src->type=='card')
    @@ -310,11 +307,15 @@ if (empty($reshook))
     			}
     		}
     
    +
    +
     		$societe = new Societe($db);
     		$societe->fetch($facture->socid);
     		dol_syslog("Create charge", LOG_DEBUG, 0, '_stripe');
     
    -		$charge=$stripe->CreatePaymentStripe($stripeamount,"EUR","invoice",$facid,$source,$customer->id,$stripe->getStripeAccount($conf->entity));
    +		$stripecu = $stripe->getStripeCustomerAccount($societe->id, $servicestatus);		// Get thirdparty cu_...
    +
    +		$charge=$stripe->createPaymentStripe($stripeamount,$facture->multicurrency_code,"invoice",$facid,$source,$stripecu,$stripeacc,$servicestatus);
     
     		if (!$error)
     		{
    @@ -326,6 +327,8 @@ if (empty($reshook))
     			$paiement->paiementid   = dol_getIdFromCode($db,$paiementcode,'c_paiement');
     			$paiement->num_paiement = $charge->message;
     			$paiement->note         = GETPOST('comment');
    +			$paiement->ext_payment_id = $charge->id;
    +			$paiement->ext_payment_site = $service;
     		}
     
     		if (! $error)
    @@ -352,7 +355,6 @@ if (empty($reshook))
     
     				$facture->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
     			}
    -
     		}
     
     		if (! $error)
    @@ -392,7 +394,7 @@ if (empty($reshook))
     		}
     		else
     		{
    -			$loc = DOL_URL_ROOT.'/stripeconnect/payment.php?facid='.$facid.'&action=create&error='.$e->getMessage();
    +			$loc = DOL_URL_ROOT.'/stripe/payment.php?facid='.$facid.'&action=create&error='.$charge->message;
     			$db->rollback();
     
     			header('Location: '.$loc);
    @@ -406,16 +408,14 @@ if (empty($reshook))
      * View
      */
     
    -$form=new Form($db);
    +$form = new Form($db);
     
     llxHeader();
     
    -if (! empty($conf->global->STRIPE_LIVE) && ! GETPOST('forcesandbox','alpha'))
    -{
    +if (! empty($conf->global->STRIPE_LIVE) && ! GETPOST('forcesandbox','alpha')) {
     	$service = 'StripeLive';
     	$servicestatus = 0;
    -}
    -else {
    +} else {
     	dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode','Stripe'),'','warning');
     }
     
    @@ -568,7 +568,7 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
     			print '<tr><td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans('Invoice').'</span></td><td>'.$facture->getNomUrl(4)."</td></tr>\n";
     		}*/
     
    -		// Third party
    +        // Third party
             print '<tr><td class="titlefieldcreate"><span class="fieldrequired">'.$langs->trans('Company').'</span></td><td>'.$facture->thirdparty->getNomUrl(4)."</td></tr>\n";
     
             // Bank account
    @@ -583,22 +583,22 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
             }
     
             // Cheque number
    -//        print '<tr><td>'.$langs->trans('Numero');
    -//        print ' <em>('.$langs->trans("ChequeOrTransferNumber").')</em>';
    -//        print '</td>';
    -//        print '<td><input name="num_paiement" type="text" value="'.$paymentnum.'"></td></tr>';
    +        //print '<tr><td>'.$langs->trans('Numero');
    +        //print ' <em>('.$langs->trans("ChequeOrTransferNumber").')</em>';
    +        //print '</td>';
    +        //print '<td><input name="num_paiement" type="text" value="'.$paymentnum.'"></td></tr>';
     
             // Check transmitter
    -//        print '<tr><td class="'.(GETPOST('paiementcode')=='CHQ'?'fieldrequired ':'').'fieldrequireddyn">'.$langs->trans('CheckTransmitter');
    -//        print ' <em>('.$langs->trans("ChequeMaker").')</em>';
    -//        print '</td>';
    -//        print '<td><input id="fieldchqemetteur" name="chqemetteur" size="30" type="text" value="'.GETPOST('chqemetteur').'"></td></tr>';
    +        //print '<tr><td class="'.(GETPOST('paiementcode')=='CHQ'?'fieldrequired ':'').'fieldrequireddyn">'.$langs->trans('CheckTransmitter');
    +        //print ' <em>('.$langs->trans("ChequeMaker").')</em>';
    +        //print '</td>';
    +        //print '<td><input id="fieldchqemetteur" name="chqemetteur" size="30" type="text" value="'.GETPOST('chqemetteur').'"></td></tr>';
     
             // Bank name
    -//        print '<tr><td>'.$langs->trans('Bank');
    -//        print ' <em>('.$langs->trans("ChequeBank").')</em>';
    -//        print '</td>';
    -//        print '<td><input name="chqbank" size="30" type="text" value="'.GETPOST('chqbank').'"></td></tr>';
    +        //print '<tr><td>'.$langs->trans('Bank');
    +        //print ' <em>('.$langs->trans("ChequeBank").')</em>';
    +        //print '</td>';
    +        //print '<td><input name="chqbank" size="30" type="text" value="'.GETPOST('chqbank').'"></td></tr>';
     
     		// Comments
     		print '<tr><td>'.$langs->trans('Comments').'</td>';
    @@ -607,157 +607,155 @@ if ($action == 'create' || $action == 'confirm_paiement' || $action == 'add_paie
     
             print '</table>';
     
    -		dol_fiche_end();
    +        dol_fiche_end();
     
     
    -		$customerstripe=$stripe->customerStripe($facture->thirdparty, $stripeacc, $servicestatus);
    +        $customerstripe=$stripe->customerStripe($facture->thirdparty, $stripeacc, $servicestatus);
     
    -		 print '<br>';
    -		    print_barre_liste($langs->trans('StripeSourceList').' '.$typeElementString.' '.$button, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,'',$num, '', '');
    +        print '<br>';
    +        print_barre_liste($langs->trans('StripeSourceList').' '.$typeElementString.' '.$button, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,'',$num, '', '');
     
    -		    print '<table class="liste" width="100%">'."\n";
    -		    // Titles with sort buttons
    -		    print '<tr class="liste_titre">';
    -		    print '<td align="left"></td>';
    -		    print '<td align="left">'.$langs->trans('Type').'</td>';
    -		    print '<td align="left">'.$langs->trans('Informations').'</td>';
    -		    print '<td align="left"></td>';
    -		    print "<td></td></tr>\n";
    -		    foreach ($customerstripe->sources->data as $src) {
    -		print '<tr>';
    +        print '<table class="liste" width="100%">'."\n";
    +        // Titles with sort buttons
    +        print '<tr class="liste_titre">';
    +        print '<td align="left"></td>';
    +        print '<td align="left">'.$langs->trans('Type').'</td>';
    +        print '<td align="left">'.$langs->trans('Informations').'</td>';
    +        print '<td align="left"></td>';
    +        print "<td></td></tr>\n";
    +        foreach ($customerstripe->sources->data as $src) {
    +            print '<tr>';
     
                 print '<td align="center" width="20" ';
    -if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) { print'class="opacitymedium"';}
    -print'><input type="radio" id="source_id" class="flat" name="source_id"  value="'.$src->id.'"';
    -if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) {
    +            if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) {
    +                print'class="opacitymedium"';
    +            }
    +            print '><input type="radio" id="source_id" class="flat" name="source_id"  value="'.$src->id.'"';
    +            if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) {
                     print ' disabled';
                 } elseif (($customerstripe->default_source==$src->id && $action != 'add_paiement') or ($source==$src->id && $action == 'add_paiement')) {
                     print ' checked';
                 }
                 print '></td>';
     
    -print '<td ';
    -if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) { print'class="opacitymedium"';}
    +            print '<td ';
    +            if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) {
    +                print'class="opacitymedium"';
    +            }
     
    -print' >';
    -if ($src->object=='card'){
    -if ($src->brand == 'Visa') {$brand='cc-visa';}
    -elseif ($src->brand == 'MasterCard') {$brand='cc-mastercard';}
    -elseif ($src->brand == 'American Express') {$brand='cc-amex';}
    -elseif ($src->brand == 'Discover') {$brand='cc-discover';}
    -elseif ($src->brand == 'JCB') {$brand='cc-jcb';}
    -elseif ($src->brand == 'Diners Club') {$brand='cc-diners-club';}
    -else {$brand='credit-card-alt';}
    -print '<span class="fa fa-'.$brand.' fa-3x fa-fw"></span>';
    -}
    -elseif ($src->object=='source' && $src->type=='card'){
    -if ($src->card->brand == 'Visa') {$brand='cc-visa';}
    -elseif ($src->card->brand == 'MasterCard') {$brand='cc-mastercard';}
    -elseif ($src->card->brand == 'American Express') {$brand='cc-amex';}
    -elseif ($src->card->brand == 'Discover') {$brand='cc-discover';}
    -elseif ($src->card->brand == 'JCB') {$brand='cc-jcb';}
    -elseif ($src->card->brand == 'Diners Club') {$brand='cc-diners-club';}
    -else {$brand='credit-card-alt';}
    -
    -print '<span class="fa fa-'.$brand.' fa-3x fa-fw"></span>';
    -}
    -elseif ($src->object=='source' && $src->type=='sepa_debit'){
    -print '<span class="fa fa-university fa-3x fa-fw"></span>';
    -}
    -print '</td>';
    -print '<td ';
    -if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) { print'class="opacitymedium"';}
    -print' >';
    -if ($src->object=='card'){
    -print '**** '.$src->last4.'<br>Exp. '.$src->exp_month.'/'.$src->exp_year.'';
    -print '</td><td>';
    - if ($src->country)
    -	{
    -		$img=picto_from_langcode($src->country);
    -		print $img?$img.' ':'';
    -		print getCountry($src->country,1);
    -	}
    -	else print img_warning().' <font class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("CompanyCountry")).'</font>';
    -}
    -elseif ($src->object=='source' && $src->type=='card'){
    -					print $src->owner->name.'<br>**** '.$src->card->last4.' - '.$src->card->exp_month.'/'.$src->card->exp_year.'';
    -print '</td><td>';
    - if ($src->card->country)
    -	{
    -		$img=picto_from_langcode($src->card->country);
    -		print $img?$img.' ':'';
    -		print getCountry($src->card->country,1);
    -	}
    -	else print img_warning().' <font class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("CompanyCountry")).'</font>';
    -}
    -elseif ($src->object=='source' && $src->type=='sepa_debit'){
    -print 'info sepa';
    -print '</td><td>';
    - if ($src->sepa_debit->country)
    -	{
    -		$img=picto_from_langcode($src->sepa_debit->country);
    -		print $img?$img.' ':'';
    -		print getCountry($src->sepa_debit->country,1);
    -	}
    -	else print img_warning().' <font class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("CompanyCountry")).'</font>';
    -}
    -print '</td>';
    +            print' >';
    +            if ($src->object=='card') {
    +                print img_credit_card($src->brand);
    +            } elseif ($src->object=='source' && $src->type=='card') {
    +                print img_credit_card($src->card->brand);
    +            } elseif ($src->object=='source' && $src->type=='sepa_debit') {
    +                print '<span class="fa fa-university fa-2x fa-fw"></span>';
    +            }
    +            print '</td>';
    +            print '<td ';
    +            if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) {
    +                print'class="opacitymedium"';
    +            }
    +            print' >';
    +            if ($src->object=='card') {
    +                print '....'.$src->last4.' - '.$src->exp_month.'/'.$src->exp_year.'';
    +                print '</td><td>';
    +                if ($src->country) {
    +                    $img = picto_from_langcode($src->country);
    +                    print $img?$img.' ':'';
    +                    print getCountry($src->country,1);
    +                } else {
    +                    print img_warning().' <font class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("CompanyCountry")).'</font>';
    +                }
    +            } elseif ($src->object=='source' && $src->type=='card') {
    +                print $src->owner->name.'<br>....'.$src->card->last4.' - '.$src->card->exp_month.'/'.$src->card->exp_year.'';
    +                print '</td><td>';
    +                if ($src->card->country) {
    +                    $img = picto_from_langcode($src->card->country);
    +                    print $img?$img.' ':'';
    +                    print getCountry($src->card->country,1);
    +                } else {
    +                    print img_warning().' <font class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("CompanyCountry")).'</font>';
    +                }
    +            } elseif ($src->object=='source' && $src->type=='sepa_debit') {
    +                print 'info sepa';
    +                print '</td><td>';
    +                if ($src->sepa_debit->country) {
    +                    $img = picto_from_langcode($src->sepa_debit->country);
    +                    print $img?$img.' ':'';
    +                    print getCountry($src->sepa_debit->country,1);
    +                } else {
    +                    print img_warning().' <font class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("CompanyCountry")).'</font>';
    +                }
    +            }
    +            print '</td>';
                 // Default
                 print '<td align="center" width="50" ';
    -if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) { print'class="opacitymedium"';}
    -print'>';
    +            if (($action == 'add_paiement' && $src->id!=$source) or ($src->object=='source' && $src->card->three_d_secure=='required')) {
    +                print'class="opacitymedium"';
    +            }
    +            print'>';
                 if (($customerstripe->default_source==$src->id)) {
                     print "<SPAN class=' fa fa-star  fa-2x'></SPAN>";
                 }
                 print '</td>';
    -print '</tr>';
    -}
    -// TODO more dolibarize with new stripe function and stripeconnect
    -//if ($stripe->getStripeCustomerAccount($facture->socid)) {
    -//$account=\Stripe\Account::retrieve("".$stripe->getStripeCustomerAccount($facture->socid)."");
    -//}
    +            print '</tr>';
    +        }
    +        // TODO more dolibarize with new stripe function and stripeconnect
    +        //if ($stripe->getStripeCustomerAccount($facture->socid)) {
    +        //    $account=\Stripe\Account::retrieve("".$stripe->getStripeCustomerAccount($facture->socid)."");
    +        //}
     
    -	if (($account->type=='custom' or $account->type=='express') && $entity==1) {
    -	print '<tr class="oddeven">';
    +        if (($account->type=='custom' or $account->type=='express') && $entity==1) {
    +            print '<tr class="oddeven">';
     
    -	            print '<td align="center" width="20" ';
    -	if ($action == 'add_paiement' && $stripe->getStripeCustomerAccount($facture->socid)!=$source) { print'class="opacitymedium"';}
    -	print'><input type="radio" id="source_id" class="flat" name="source_id"  value="'.$conf->global->STRIPE_EXTERNAL_ACCOUNT.'"';
    -	            if ((empty($input) && $action != 'add_paiement') or ($source==$conf->global->STRIPE_EXTERNAL_ACCOUNT && $action == 'add_paiement')) {
    -	                print ' checked';
    -	            } elseif ($action == 'add_paiement' && $conf->global->STRIPE_EXTERNAL_ACCOUNT!=$source) {
    -	                print ' disabled';
    -	            }
    -	            print '></td><td ';
    -	if ($action == 'add_paiement' && $stripe->getStripeCustomerAccount($facture->socid)!=$source) { print'class="opacitymedium"';}
    -	            print '><span class="fa fa-cc-stripe fa-3x fa-fw"></span></td>';
    +            print '<td align="center" width="20" ';
    +            if ($action == 'add_paiement' && $stripe->getStripeCustomerAccount($facture->socid)!=$source) {
    +                print'class="opacitymedium"';
    +            }
    +            print'><input type="radio" id="source_id" class="flat" name="source_id"  value="'.$conf->global->STRIPE_EXTERNAL_ACCOUNT.'"';
    +            if ((empty($input) && $action != 'add_paiement') or ($source==$conf->global->STRIPE_EXTERNAL_ACCOUNT && $action == 'add_paiement')) {
    +                print ' checked';
    +            } elseif ($action == 'add_paiement' && $conf->global->STRIPE_EXTERNAL_ACCOUNT!=$source) {
    +                print ' disabled';
    +            }
    +            print '></td><td ';
    +            if ($action == 'add_paiement' && $stripe->getStripeCustomerAccount($facture->socid)!=$source) {
    +                print'class="opacitymedium"';
    +            }
    +            print '><span class="fa fa-cc-stripe fa-3x fa-fw"></span></td>';
     
    -	print '<td ';
    -	if ($action == 'add_paiement' && $stripe->getStripeCustomerAccount($facture->socid)!=$source) { print'class="opacitymedium"';}
    -	print'>'.$langs->trans('sold');
    -	print'</td><td ';
    -	if ($action == 'add_paiement' && $src->id!=$source) { print'class="opacitymedium"';}
    -	print'>';
    +            print '<td ';
    +            if ($action == 'add_paiement' && $stripe->getStripeCustomerAccount($facture->socid)!=$source) {
    +                print'class="opacitymedium"';
    +            }
    +            print'>'.$langs->trans('sold');
    +            print'</td><td ';
    +            if ($action == 'add_paiement' && $src->id!=$source) {
    +                print'class="opacitymedium"';
    +            }
    +            print'>';
     
    -	print '</td>';
    -	            // Default
    -	            print '<td align="center" width="50" ';
    -	if ($action == 'add_paiement' && $src->id!=$source) { print'class="opacitymedium"';}
    -	print'>';
    -	//            if (($customer->default_source!=$src->id)) {
    -	//                print img_picto($langs->trans("Disabled"),'off');
    -	//            } else {
    -	//                print img_picto($langs->trans("Default"),'on');
    -	//            }
    -	            print '</td>';
    -	print '</tr>';
    -	}
    -	if (empty($input)&&!$stripe->getStripeCustomerAccount($facture->socid))
    -	{
    -	print '<tr><td class="opacitymedium" colspan="5">'.$langs->trans("None").'</td></tr>';
    -	}
    +            print '</td>';
    +            // Default
    +            print '<td align="center" width="50" ';
    +            if ($action == 'add_paiement' && $src->id!=$source) {
    +                print'class="opacitymedium"';
    +            }
    +            print'>';
    +            //if (($customer->default_source!=$src->id)) {
    +            //    print img_picto($langs->trans("Disabled"),'off');
    +            //} else {
    +            //    print img_picto($langs->trans("Default"),'on');
    +            //}
    +            print '</td>';
    +            print '</tr>';
    +        }
    +        if (empty($input)&&!$stripe->getStripeCustomerAccount($facture->socid)) {
    +            print '<tr><td class="opacitymedium" colspan="5">'.$langs->trans("None").'</td></tr>';
    +        }
     
    -	print "</table>";
    +        print "</table>";
     
     
             /*
    @@ -768,14 +766,14 @@ print '</tr>';
             $sql.= ' f.datef as df, f.fk_soc as socid';
             $sql.= ' FROM '.MAIN_DB_PREFIX.'facture as f';
     
    -		if(!empty($conf->global->FACTURE_PAYMENTS_ON_DIFFERENT_THIRDPARTIES_BILLS)) {
    +		if (!empty($conf->global->FACTURE_PAYMENTS_ON_DIFFERENT_THIRDPARTIES_BILLS)) {
     			$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'societe as s ON (f.fk_soc = s.rowid)';
     		}
     
     		$sql.= ' WHERE f.entity = '.$conf->entity;
             $sql.= ' AND (f.fk_soc = '.$facture->socid;
     
    -		if(!empty($conf->global->FACTURE_PAYMENTS_ON_DIFFERENT_THIRDPARTIES_BILLS) && !empty($facture->thirdparty->parent)) {
    +		if (!empty($conf->global->FACTURE_PAYMENTS_ON_DIFFERENT_THIRDPARTIES_BILLS) && !empty($facture->thirdparty->parent)) {
     			$sql.= ' OR f.fk_soc IN (SELECT rowid FROM '.MAIN_DB_PREFIX.'societe WHERE parent = '.$facture->thirdparty->parent.')';
     		}
     
    @@ -814,20 +812,24 @@ print '</tr>';
                     $i = 0;
                     //print '<tr><td colspan="3">';
                     print '<br>';
    -                 print_barre_liste($langs->trans('StripeInvoiceList').' '.$typeElementString.' '.$button, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,'',$num, '', '');
    +                print_barre_liste($langs->trans('StripeInvoiceList').' '.$typeElementString.' '.$button, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder,'',$num, '', '');
                     print '<table class="noborder" width="100%">';
                     print '<tr class="liste_titre">';
                     print '<td>'.$arraytitle.'</td>';
                     print '<td align="center">'.$langs->trans('Date').'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td>'.$langs->trans('Currency').'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$langs->trans('MulticurrencyAmountTTC').'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$multicurrencyalreadypayedlabel.'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$multicurrencyremaindertopay.'</td>';
    +                if (!empty($conf->multicurrency->enabled)) {
    +                    print '<td>'.$langs->trans('Currency').'</td>';
    +                    print '<td align="right">'.$langs->trans('MulticurrencyAmountTTC').'</td>';
    +                    print '<td align="right">'.$multicurrencyalreadypayedlabel.'</td>';
    +                    print '<td align="right">'.$multicurrencyremaindertopay.'</td>';
    +                }
                     print '<td align="right">'.$langs->trans('AmountTTC').'</td>';
                     print '<td align="right">'.$alreadypayedlabel.'</td>';
                     print '<td align="right">'.$remaindertopay.'</td>';
                     print '<td align="right">'.$langs->trans('PaymentAmount').'</td>';
    -                if (!empty($conf->multicurrency->enabled)) print '<td align="right">'.$langs->trans('MulticurrencyPaymentAmount').'</td>';
    +                if (!empty($conf->multicurrency->enabled)) {
    +                    print '<td align="right">'.$langs->trans('MulticurrencyPaymentAmount').'</td>';
    +                }
                     print '<td align="right">&nbsp;</td>';
                     print "</tr>\n";
     
    @@ -986,17 +988,21 @@ print '</tr>';
                         // Print total
                         print '<tr class="liste_total">';
                         print '<td colspan="2" align="left">'.$langs->trans('TotalTTC').'</td>';
    -					if (!empty($conf->multicurrency->enabled)) print '<td></td>';
    -					if (!empty($conf->multicurrency->enabled)) print '<td></td>';
    -					if (!empty($conf->multicurrency->enabled)) print '<td></td>';
    +					if (!empty($conf->multicurrency->enabled)) {
    +                        print '<td></td>';
    +					    print '<td></td>';
    +					    print '<td></td>';
    +                    }
     					print '<td align="right"><b>'.price($sign * $total_ttc).'</b></td>';
                         print '<td align="right"><b>'.price($sign * $totalrecu);
                         if ($totalrecucreditnote) print '+'.price($totalrecucreditnote);
                         if ($totalrecudeposits) print '+'.price($totalrecudeposits);
                         print '</b></td>';
    -                   print '<td align="right"><b>'.price($sign * price2num($total_ttc - $totalrecu - $totalrecucreditnote - $totalrecudeposits,'MT')).'</b></td>';
    +                    print '<td align="right"><b>'.price($sign * price2num($total_ttc - $totalrecu - $totalrecucreditnote - $totalrecudeposits,'MT')).'</b></td>';
                         print '<td align="right" id="result" style="font-weight: bold;"></td>';
    -					if (!empty($conf->multicurrency->enabled)) {print '<td align="right" id="multicurrency_result" style="font-weight: bold;"></td>';}
    +					if (!empty($conf->multicurrency->enabled)) {
    +                        print '<td align="right" id="multicurrency_result" style="font-weight: bold;"></td>';
    +                    }
                         print "</tr>\n";
                     }
                     print "</table>";
    @@ -1035,10 +1041,11 @@ print '</tr>';
                 $preselectedchoice=$addwarning?'no':'yes';
     
                 print '<br>';
    -            if (!empty($totalpayment)) $text=$langs->trans('ConfirmCustomerPayment',$totalpayment,$langs->trans("Currency".$conf->currency));
    -			if (!empty($multicurrency_totalpayment))
    -			{
    -				$text.='<br>'.$langs->trans('ConfirmCustomerPayment',$multicurrency_totalpayment,$langs->trans("paymentInInvoiceCurrency"));
    +            if (!empty($totalpayment)) {
    +                $text = $langs->trans('ConfirmCustomerPayment', $totalpayment, $langs->trans("Currency".$conf->currency));
    +            }
    +			if (!empty($multicurrency_totalpayment)) {
    +				$text.='<br>'.$langs->trans('ConfirmCustomerPayment', $multicurrency_totalpayment, $langs->trans("paymentInInvoiceCurrency"));
     			}
                 if (GETPOST('closepaidinvoices'))
                 {
    @@ -1114,6 +1121,6 @@ if (! GETPOST('action'))
         }
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/stripe/transaction.php b/htdocs/stripe/transaction.php
    index 1cdabffdac4..f95bde08369 100644
    --- a/htdocs/stripe/transaction.php
    +++ b/htdocs/stripe/transaction.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2018 	PtibogXIV        <support@ptibogxiv.net>
    +/* Copyright (C) 2018       Thibault FOUCART        <support@ptibogxiv.net>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -62,14 +63,16 @@ llxHeader('', $langs->trans("StripeTransactionList"));
     if (! empty($conf->stripe->enabled) && (empty($conf->global->STRIPE_LIVE) || GETPOST('forcesandbox','alpha')))
     {
     	$service = 'StripeTest';
    +	$servicestatus = '0';
     	dol_htmloutput_mesg($langs->trans('YouAreCurrentlyInSandboxMode', 'Stripe'), '', 'warning');
     }
     else
     {
     	$service = 'StripeLive';
    +	$servicestatus = '1';
     }
     
    -$stripeaccount = $stripe->getStripeAccount($service);
    +$stripeacc = $stripe->getStripeAccount($service);
     /*if (empty($stripeaccount))
     {
     	print $langs->trans('ErrorStripeAccountNotDefined');
    @@ -77,55 +80,55 @@ $stripeaccount = $stripe->getStripeAccount($service);
     
     if (! $rowid) {
     
    -	print '<FORM method="POST" action="' . $_SERVER["PHP_SELF"] . '">';
    +	print '<form method="POST" action="' . $_SERVER["PHP_SELF"] . '">';
     	if ($optioncss != '')
    -		print '<INPUT type="hidden" name="optioncss" value="' . $optioncss . '">';
    -	print '<INPUT type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
    -	print '<INPUT type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
    -	print '<INPUT type="hidden" name="action" value="list">';
    -	print '<INPUT type="hidden" name="sortfield" value="' . $sortfield . '">';
    -	print '<INPUT type="hidden" name="sortorder" value="' . $sortorder . '">';
    -	print '<INPUT type="hidden" name="page" value="' . $page . '">';
    +		print '<input type="hidden" name="optioncss" value="' . $optioncss . '">';
    +	print '<input type="hidden" name="token" value="' . $_SESSION['newtoken'] . '">';
    +	print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
    +	print '<input type="hidden" name="action" value="list">';
    +	print '<input type="hidden" name="sortfield" value="' . $sortfield . '">';
    +	print '<input type="hidden" name="sortorder" value="' . $sortorder . '">';
    +	print '<input type="hidden" name="page" value="' . $page . '">';
     
     	$title=$langs->trans("StripeTransactionList");
    -	$title.=($stripeaccount?' (Stripe connection with Stripe OAuth Connect account '.$stripeaccount.')':' (Stripe connection with keys from Stripe module setup)');
    +	$title.=($stripeaccount?' (Stripe connection with Stripe OAuth Connect account '.$stripeacc.')':' (Stripe connection with keys from Stripe module setup)');
     
     	print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $totalnboflines, 'title_accountancy.png', 0, '', '', $limit);
     
    -	print '<DIV class="div-table-responsive">';
    -	print '<TABLE class="tagtable liste' . ($moreforfilter ? " listwithfilterbefore" : "") . '">' . "\n";
    +	print '<div class="div-table-responsive">';
    +	print '<table class="tagtable liste' . ($moreforfilter ? " listwithfilterbefore" : "") . '">' . "\n";
     
    -	print '<TR class="liste_titre">';
    +	print '<tr class="liste_titre">';
     	print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "", "", "", "", $sortfield, $sortorder);
     	//print_liste_field_titre("StripeCustomerId",$_SERVER["PHP_SELF"],"","","","",$sortfield,$sortorder);
     	//print_liste_field_titre("CustomerId", $_SERVER["PHP_SELF"], "", "", "", "", $sortfield, $sortorder);
    -	print_liste_field_titre("Origin", $_SERVER["PHP_SELF"], "", "", "", "", $sortfield, $sortorder);
    +	//print_liste_field_titre("Origin", $_SERVER["PHP_SELF"], "", "", "", "", $sortfield, $sortorder);
     	print_liste_field_titre("DatePayment", $_SERVER["PHP_SELF"], "", "", "", 'align="center"', $sortfield, $sortorder);
     	print_liste_field_titre("Type", $_SERVER["PHP_SELF"], "", "", "", 'align="left"', $sortfield, $sortorder);
     	print_liste_field_titre("Paid", $_SERVER["PHP_SELF"], "", "", "", 'align="right"', $sortfield, $sortorder);
     	print_liste_field_titre("Fee", $_SERVER["PHP_SELF"], "", "", "", 'align="right"', $sortfield, $sortorder);
     	print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "", "", "", 'align="right"');
    -	print "</TR>\n";
    +	print "</tr>\n";
     
    -	print "</TR>\n";
    +	print "</tr>\n";
     
    -	if ($stripeaccount)
    +	if ($stripeacc)
     	{
    -		$txn = \Stripe\BalanceTransaction::all(array("limit" => $limit), array("stripe_account" => $stripeaccount));
    +		$txn = \Stripe\BalanceTransaction::all(array("limit" => $limit), array("stripe_account" => $stripeacc));
     	}
     	else
     	{
     		$txn = \Stripe\BalanceTransaction::all(array("limit" => $limit));
     	}
     
    -	foreach ($txn->data as $txn) 
    +	foreach ($txn->data as $txn)
     	{
     		//$charge = $txn;
     		//var_dump($txn);
    -		
    +
     		// The metadata FULLTAG is defined by the online payment page
     		/*$FULLTAG=$charge->metadata->FULLTAG;
    -		
    +
     		// Save into $tmparray all metadata
     		$tmparray = dolExplodeIntoArray($FULLTAG,'.','=');
     		// Load origin object according to metadata
    @@ -145,7 +148,7 @@ if (! $rowid) {
     		{
     			$memberstatic->id = 0;
     		}*/
    -		
    +
     		$societestatic->fetch($charge->metadata->idcustomer);
     		$societestatic->id = $charge->metadata->idcustomer;
     		$societestatic->lastname = $obj->lastname;
    @@ -155,14 +158,34 @@ if (! $rowid) {
     		$societestatic->email = $obj->email;
     		$societestatic->societe_id = $obj->fk_soc;
     
    -		print '<TR class="oddeven">';
    -		
    +		print '<tr class="oddeven">';
    +
     		// Ref
    -		print "<TD><A href='" . DOL_URL_ROOT . "/stripe/transaction.php?rowid=" . $txn->source . "'>" . $txn->source . "</A></TD>\n";
    +        if (!empty($stripeacc)) $connect=$stripeacc.'/';
    +    
    +		// Ref
    +        if (preg_match('/po_/i', $txn->source)){
    +            $origin="payouts";
    +        } elseif (preg_match('/fee_/i', $txn->source)) {
    +            $origin="connect/application_fees";
    +        } else {
    +            $origin="payments";
    +        }
    +
    +		$url='https://dashboard.stripe.com/'.$connect.'test/'.$origin.'/'.$txn->source;
    +		if ($servicestatus) {
    +			$url='https://dashboard.stripe.com/'.$connect.$origin.'/'.$txn->source;
    +		}
    +        if ($txn->type == 'stripe_fee' || $txn->type == 'reserve_transaction') {
    +            print "<td>".$txn->type."</td>";
    +        } else {
    +            print "<td><a href='".$url."' target='_stripe'>".img_picto($langs->trans('ShowInStripe'), 'object_globe')." " . $txn->source . "</a></td>\n";
    +        }
    +
     		// Stripe customer
    -		//print "<TD>".$charge->customer."</TD>\n";
    +		//print "<td>".$charge->customer."</td>\n";
     		// Link
    -		/*print "<TD>";
    +		/*print "<td>";
     		if ($societestatic->id > 0)
     		{
     			print $societestatic->getNomUrl(1);
    @@ -171,42 +194,42 @@ if (! $rowid) {
     		{
     			print $memberstatic->getNomUrl(1);
     		}
    -		print "</TD>\n";*/
    +		print "</td>\n";*/
     		// Origine
    -		print "<TD>";
    -		print $FULLTAG;
    -		if ($charge->metadata->source=="order"){
    -			$object = new Commande($db);
    -			$object->fetch($charge->metadata->idsource);
    -			print "<A href='".DOL_URL_ROOT."/commande/card.php?id=".$charge->metadata->idsource."'>".img_picto('', 'object_order')." ".$object->ref."</A>";
    -		} elseif ($charge->metadata->source=="invoice"){
    -			$object = new Facture($db);
    -			$object->fetch($charge->metadata->idsource);
    -			print "<A href='".DOL_URL_ROOT."/compta/facture/card.php?facid=".$charge->metadata->idsource."'>".img_picto('', 'object_invoice')." ".$object->ref."</A>";
    -		}
    -		print "</TD>\n";
    +		//print "<td>";
    +		////if ($charge->metadata->dol_type=="order"){
    +		//	$object = new Commande($db);
    +		//	$object->fetch($charge->metadata->dol_id);
    +		//	print "<a href='".DOL_URL_ROOT."/commande/card.php?id=".$charge->metadata->dol_id."'>".img_picto('', 'object_order')." ".$object->ref."</a>";
    +		//} elseif ($charge->metadata->dol_type=="invoice"){
    +		//	$object = new Facture($db);
    +		//	$object->fetch($charge->metadata->dol_id);
    +		//	print "<a href='".DOL_URL_ROOT."/compta/facture/card.php?facid=".$charge->metadata->dol_id."'>".img_picto('', 'object_invoice')." ".$object->ref."</a>";
    +		//}
    +		//print "</td>\n";
     		// Date payment
    -		print '<TD align="center">' . dol_print_date($txn->created, '%d/%m/%Y %H:%M') . "</TD>\n";
    +		print '<td align="center">' . dol_print_date($txn->created, '%d/%m/%Y %H:%M') . "</td>\n";
     		// Type
    -		print '<TD>' . $txn->type . '</TD>';
    +		print '<td>' . $txn->type . '</td>';
     		// Amount
    -		print "<TD align=\"right\">" . price(($txn->amount) / 100) . "</TD>";
    -		print "<TD align=\"right\">" . price(($txn->fee) / 100) . "</TD>";
    +		print "<td align=\"right\">" . price(($txn->amount) / 100, 0, '', 1, - 1, - 1, strtoupper($txn->currency)) . "</td>";
    +		print "<td align=\"right\">" . price(($txn->fee) / 100, 0, '', 1, - 1, - 1, strtoupper($txn->currency)) . "</td>";
     		// Status
    -		print "<TD align='right'>";
    -if ($txn->status=='available')
    - {print img_picto($langs->trans("".$txn->status.""),'statut4');} 
    -elseif ($txn->status=='pending')
    - {print img_picto($langs->trans("".$txn->status.""),'statut7');}
    -elseif ($txn->status=='failed')
    - {print img_picto($langs->trans("".$txn->status.""),'statut8');}        
    -		print '</TD>';
    -		print "</TR>\n";
    +		print "<td align='right'>";
    +		if ($txn->status=='available')
    + 		{print img_picto($langs->trans("".$txn->status.""),'statut4');}
    +		elseif ($txn->status=='pending')
    +		{print img_picto($langs->trans("".$txn->status.""),'statut7');}
    +		elseif ($txn->status=='failed')
    +		{print img_picto($langs->trans("".$txn->status.""),'statut8');}
    +		print '</td>';
    +		print "</tr>\n";
     	}
    -	print "</TABLE>";
    -	print '</DIV>';
    -	print '</FORM>';
    -} else {}
    +	print "</table>";
    +	print '</div>';
    +	print '</form>';
    +}
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php b/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php
    index 545d953e753..d5d208b945e 100644
    --- a/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php
    +++ b/htdocs/supplier_proposal/admin/supplier_proposal_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2011	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -143,6 +143,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php b/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php
    index 1acf85b45a3..531151740b6 100644
    --- a/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php
    +++ b/htdocs/supplier_proposal/admin/supplier_proposaldet_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Florian Henry			<florian.henry@open-concept.pro>
      * Copyright (C) 2013		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2013		Florian Henry			<florian.henry@open-concept.pro>
    @@ -113,7 +113,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
         print '<div class="tabsAction">';
    -    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +    print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
         print "</div>";
     }
     
    @@ -126,8 +126,8 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -    print "<br>";
    -    print load_fiche_titre($langs->trans('NewAttribute'));
    +	print '<br><div id="newattrib"></div>';
    +	print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
     }
    @@ -145,6 +145,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/supplier_proposal/card.php b/htdocs/supplier_proposal/card.php
    index d133e1fe4f7..99e99517f75 100644
    --- a/htdocs/supplier_proposal/card.php
    +++ b/htdocs/supplier_proposal/card.php
    @@ -1,15 +1,16 @@
     <?php
    -/* Copyright (C) 2001-2007 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
    - * Copyright (C) 2004-2017 Laurent Destailleur   <eldy@users.sourceforge.net>
    - * Copyright (C) 2004      Eric Seigne           <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    - * Copyright (C) 2006      Andre Cianfarani      <acianfa@free.fr>
    - * Copyright (C) 2010-2014 Juanjo Menent         <jmenent@2byte.es>
    - * Copyright (C) 2010-2011 Philippe Grand        <philippe.grand@atoo-net.com>
    - * Copyright (C) 2012-2013 Christophe Battarel   <christophe.battarel@altairis.fr>
    - * Copyright (C) 2013-2014 Florian Henry		 <florian.henry@open-concept.pro>
    - * Copyright (C) 2014	   Ferran Marcet		 <fmarcet@2byte.es>
    +/* Copyright (C) 2001-2007  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2017  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2004       Eric Seigne             <eric.seigne@ryxeo.com>
    + * Copyright (C) 2005       Marc Barilley / Ocebo   <marc@ocebo.com>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2006       Andre Cianfarani        <acianfa@free.fr>
    + * Copyright (C) 2010-2014  Juanjo Menent           <jmenent@2byte.es>
    + * Copyright (C) 2010-2011  Philippe Grand          <philippe.grand@atoo-net.com>
    + * Copyright (C) 2012-2013  Christophe Battarel     <christophe.battarel@altairis.fr>
    + * Copyright (C) 2013-2014  Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2014       Ferran Marcet           <fmarcet@2byte.es>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -624,7 +625,11 @@ if (empty($reshook))
     				{
     					$label = $productsupplier->label;
     
    -					$desc = $productsupplier->description;
    +					// if we use supplier description of the products
    +					if(!empty($productsupplier->desc_supplier) && !empty($conf->global->PRODUIT_FOURN_TEXTS)) {
    +					    $desc = $productsupplier->desc_supplier;
    +					} else $desc = $productsupplier->description;
    +
     					if (trim($product_desc) != trim($desc)) $desc = dol_concatdesc($desc, $product_desc);
     
     					$pu_ht = $productsupplier->fourn_pu;
    @@ -788,7 +793,7 @@ if (empty($reshook))
     	}
     
     	// Mise a jour d'une ligne dans la demande de prix
    -	else if ($action == 'updateligne' && $user->rights->supplier_proposal->creer && GETPOST('save') == $langs->trans("Save")) {
    +	else if ($action == 'updateline' && $user->rights->supplier_proposal->creer && GETPOST('save') == $langs->trans("Save")) {
     
     		// Define info_bits
     		$info_bits = 0;
    @@ -914,7 +919,7 @@ if (empty($reshook))
     		}
     	}
     
    -	else if ($action == 'updateligne' && $user->rights->supplier_proposal->creer && GETPOST('cancel','alpha') == $langs->trans('Cancel')) {
    +	else if ($action == 'updateline' && $user->rights->supplier_proposal->creer && GETPOST('cancel','alpha') == $langs->trans('Cancel')) {
     		header('Location: ' . $_SERVER['PHP_SELF'] . '?id=' . $object->id); // Pour reaffichage de la fiche en cours d'edition
     		exit();
     	}
    @@ -1129,9 +1134,9 @@ if ($action == 'create')
     		$syear = date("Y", $tmpdte);
     		$smonth = date("m", $tmpdte);
     		$sday = date("d", $tmpdte);
    -		$form->select_date($syear."-".$smonth."-".$sday, 'liv_', '', '', '', "addask");
    +		print $form->selectDate($syear."-".$smonth."-".$sday, 'liv_', '', '', '', "addask");
     	} else {
    -		$form->select_date($datedelivery ? $datedelivery : -1, 'liv_', '', '', '', "addask", 1, 1);
    +		print $form->selectDate($datedelivery ? $datedelivery : -1, 'liv_', '', '', '', "addask", 1, 1);
     	}
     	print '</td></tr>';
     
    @@ -1298,7 +1303,6 @@ if ($action == 'create')
     
     		print '</table>';
     	}
    -
     } else {
     	/*
     	 * Show object in view mode
    @@ -1368,12 +1372,11 @@ if ($action == 'create')
     			$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('ValidateAsk'), $text, 'confirm_validate', '', 0, 1);
     	}
     
    -	if (! $formconfirm) {
    -		$parameters = array('lineid' => $lineid);
    -		$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -		if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -		elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -	}
    +	// Call Hook formConfirm
    +	$parameters = array('lineid' => $lineid);
    +	$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +	if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +	elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     	// Print form confirm
     	print $formconfirm;
    @@ -1488,7 +1491,7 @@ if ($action == 'create')
     		print '<form name="editdate_livraison" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '" method="post">';
     		print '<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">';
     		print '<input type="hidden" name="action" value="setdate_livraison">';
    -		$form->select_date($object->date_livraison, 'liv_', '', '', '', "editdate_livraison");
    +		print $form->selectDate($object->date_livraison, 'liv_', '', '', '', "editdate_livraison");
     		print '<input type="submit" class="button" value="' . $langs->trans('Modify') . '">';
     		print '</form>';
     	} else {
    @@ -1687,7 +1690,7 @@ if ($action == 'create')
     
     	print '	<form name="addproduct" id="addproduct" action="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . (($action != 'editline') ? '#add' : '#line_' . GETPOST('lineid')) . '" method="POST">
     	<input type="hidden" name="token" value="' . $_SESSION ['newtoken'] . '">
    -	<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateligne') . '">
    +	<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline') . '">
     	<input type="hidden" name="mode" value="">
     	<input type="hidden" name="id" value="' . $object->id . '">
     	';
    diff --git a/htdocs/supplier_proposal/class/api_supplier_proposals.class.php b/htdocs/supplier_proposal/class/api_supplier_proposals.class.php
    index 306c7e3e177..fd490902049 100644
    --- a/htdocs/supplier_proposal/class/api_supplier_proposals.class.php
    +++ b/htdocs/supplier_proposal/class/api_supplier_proposals.class.php
    @@ -94,7 +94,8 @@ class Supplierproposals extends DolibarrApi
     	 * @param string    $sqlfilters         Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.datec:<:'20160101')"
     	 * @return  array                       Array of order objects
     	 */
    -	function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $thirdparty_ids = '', $sqlfilters = '')
    +    {
     		global $db, $conf;
     
     		$obj_ret = array();
    @@ -184,30 +185,30 @@ class Supplierproposals extends DolibarrApi
     			if (!isset($data[$field]))
     				throw new RestException(400, "$field field missing");
     			$propal[$field] = $data[$field];
    -
     		}
     		return $propal;
     	}
     
     
    -	/**
    -	 * Clean sensible object datas
    -	 *
    -	 * @param   object  $object    Object to clean
    -	 * @return    array    Array of cleaned object properties
    -	 */
    -	function _cleanObjectDatas($object) {
    +    /**
    +     * Clean sensible object datas
    +     *
    +     * @param   object  $object    Object to clean
    +     * @return    array    Array of cleaned object properties
    +     */
    +    function _cleanObjectDatas($object)
    +    {
     
    -		$object = parent::_cleanObjectDatas($object);
    +        $object = parent::_cleanObjectDatas($object);
     
    -		unset($object->name);
    -		unset($object->lastname);
    -		unset($object->firstname);
    -		unset($object->civility_id);
    -		unset($object->address);
    -		unset($object->datec);
    -		unset($object->datev);
    +        unset($object->name);
    +        unset($object->lastname);
    +        unset($object->firstname);
    +        unset($object->civility_id);
    +        unset($object->address);
    +        unset($object->datec);
    +        unset($object->datev);
     
    -		return $object;
    -	}
    +        return $object;
    +    }
     }
    diff --git a/htdocs/supplier_proposal/class/supplier_proposal.class.php b/htdocs/supplier_proposal/class/supplier_proposal.class.php
    index c3b6e4b3338..82b8b09220d 100644
    --- a/htdocs/supplier_proposal/class/supplier_proposal.class.php
    +++ b/htdocs/supplier_proposal/class/supplier_proposal.class.php
    @@ -3,11 +3,11 @@
      * Copyright (C) 2004      Eric Seigne				<eric.seigne@ryxeo.com>
      * Copyright (C) 2004-2011 Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley			<marc@ocebo.com>
    - * Copyright (C) 2005-2013 Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani			<acianfa@free.fr>
      * Copyright (C) 2008      Raphael Bertrand			<raphael.bertrand@resultic.fr>
      * Copyright (C) 2010-2015 Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2010-2011 Philippe Grand			<philippe.grand@atoo-net.com>
    + * Copyright (C) 2010-2018 Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2012-2014 Christophe Battarel  	<christophe.battarel@altairis.fr>
      * Copyright (C) 2013      Florian Henry		  	<florian.henry@open-concept.pro>
      * Copyright (C) 2014      Marcos García            <marcosgdf@gmail.com>
    @@ -45,16 +45,34 @@ require_once DOL_DOCUMENT_ROOT .'/multicurrency/class/multicurrency.class.php';
      */
     class SupplierProposal extends CommonObject
     {
    -    public $element='supplier_proposal';
    -    public $table_element='supplier_proposal';
    -    public $table_element_line='supplier_proposaldet';
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='supplier_proposal';
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='supplier_proposal';
    +
    +    /**
    +	 * @var int    Name of subtable line
    +	 */
    +	public $table_element_line='supplier_proposaldet';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
         public $fk_element='fk_supplier_proposal';
    +
         public $picto='propal';
    +
         /**
          * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
          * @var int
          */
         public $ismultientitymanaged = 1;
    +
         /**
          * 0=Default, 1=View may be restricted to sales representative only if no permission to see all or to company of external user if external user
          * @var integer
    @@ -66,24 +84,25 @@ class SupplierProposal extends CommonObject
          */
         protected $table_ref_field = 'ref';
     
    -    var $socid;		// Id client
    +    public $socid;		// Id client
     
     	/**
     	 * @deprecated
     	 * @see user_author_id
     	 */
    -    var $author;
    -    var $ref_fourn;					//Reference saisie lors de l'ajout d'une ligne à la demande
    -    var $ref_supplier;				//Reference saisie lors de l'ajout d'une ligne à la demande
    -    var $statut;					// 0 (draft), 1 (validated), 2 (signed), 3 (not signed), 4 (processed/billed)
    -    var $date;						// Date of proposal
    -    var $date_livraison;
    +    public $author;
    +
    +    public $ref_fourn;					//Reference saisie lors de l'ajout d'une ligne à la demande
    +    public $ref_supplier;				//Reference saisie lors de l'ajout d'une ligne à la demande
    +    public $statut;					// 0 (draft), 1 (validated), 2 (signed), 3 (not signed), 4 (processed/billed)
    +    public $date;						// Date of proposal
    +    public $date_livraison;
     
     	/**
     	 * @deprecated
     	 * @see date_creation
     	 */
    -	var $datec;
    +	public $datec;
     
     	/**
     	 * Creation date
    @@ -95,7 +114,7 @@ class SupplierProposal extends CommonObject
     	 * @deprecated
     	 * @see date_validation
     	 */
    -	var $datev;
    +	public $datev;
     
     	/**
     	 * Validation date
    @@ -104,70 +123,80 @@ class SupplierProposal extends CommonObject
     	public $date_validation;
     
     
    -    var $user_author_id;
    -    var $user_valid_id;
    -    var $user_close_id;
    +    public $user_author_id;
    +    public $user_valid_id;
    +    public $user_close_id;
     
     	/**
     	 * @deprecated
     	 * @see price_ht
     	 */
    -    var $price;
    +    public $price;
    +
     	/**
     	 * @deprecated
     	 * @see total_tva
     	 */
    -    var $tva;
    +    public $tva;
    +
     	/**
     	 * @deprecated
     	 * @see total_ttc
     	 */
    -    var $total;
    +    public $total;
     
    -    var $cond_reglement_code;
    -    var $mode_reglement_code;
    -    var $remise = 0;
    -    var $remise_percent = 0;
    -    var $remise_absolue = 0;
    +    public $cond_reglement_code;
    +    public $mode_reglement_code;
    +    public $remise = 0;
    +    public $remise_percent = 0;
    +    public $remise_absolue = 0;
     
    -    var $products=array();
    -    var $extraparams=array();
    +    public $products=array();
    +    public $extraparams=array();
     
    -    var $lines = array();
    -    var $line;
    +    public $lines = array();
    +    public $line;
     
    -    var $labelstatut=array();
    -    var $labelstatut_short=array();
    +    public $labelstatut=array();
    +    public $labelstatut_short=array();
     
    -    var $nbtodo;
    -    var $nbtodolate;
    +    public $nbtodo;
    +    public $nbtodolate;
     
    -    var $specimen;
    +    public $specimen;
     
     	// Multicurrency
    -	var $fk_multicurrency;
    -	var $multicurrency_code;
    -	var $multicurrency_tx;
    -	var $multicurrency_total_ht;
    -	var $multicurrency_total_tva;
    -	var $multicurrency_total_ttc;
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_multicurrency;
    +
    +	public $multicurrency_code;
    +	public $multicurrency_tx;
    +	public $multicurrency_total_ht;
    +	public $multicurrency_total_tva;
    +	public $multicurrency_total_ttc;
     
     	/**
     	 * Draft status
     	 */
     	const STATUS_DRAFT = 0;
    +
     	/**
     	 * Validated status
     	 */
     	const STATUS_VALIDATED = 1;
    +
     	/**
     	 * Signed quote
     	 */
     	const STATUS_SIGNED = 2;
    +
     	/**
     	 * Not signed quote, canceled
     	 */
     	const STATUS_NOTSIGNED = 3;
    +
     	/**
     	 * Billed or closed/processed quote
     	 */
    @@ -195,9 +224,10 @@ class SupplierProposal extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * 	Add line into array products
    -     *	$this->client doit etre charge
    +     *  $this->client doit etre charge
          *
          * 	@param  int		$idproduct       	Product Id to add
          * 	@param  int		$qty             	Quantity
    @@ -209,6 +239,7 @@ class SupplierProposal extends CommonObject
          */
         function add_product($idproduct, $qty, $remise_percent=0)
         {
    +        // phpcs:enable
             global $conf, $mysoc;
     
             if (! $qty) $qty = 1;
    @@ -250,6 +281,7 @@ class SupplierProposal extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Adding line of fixed discount in the proposal in DB
          *
    @@ -258,6 +290,7 @@ class SupplierProposal extends CommonObject
          */
         function insert_discount($idremise)
         {
    +        // phpcs:enable
             global $langs;
     
             include_once DOL_DOCUMENT_ROOT.'/core/lib/price.lib.php';
    @@ -1064,6 +1097,7 @@ class SupplierProposal extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Insert into DB a supplier_proposal object completely defined by its data members (ex, results from copy).
          *
    @@ -1073,6 +1107,7 @@ class SupplierProposal extends CommonObject
          */
         function create_from($user)
         {
    +        // phpcs:enable
             $this->products=$this->lines;
     
             return $this->create($user);
    @@ -1493,6 +1528,7 @@ class SupplierProposal extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Set delivery date
          *
    @@ -1502,6 +1538,7 @@ class SupplierProposal extends CommonObject
          */
         function set_date_livraison($user, $date_livraison)
         {
    +        // phpcs:enable
             if (! empty($user->rights->supplier_proposal->creer))
             {
                 $sql = "UPDATE ".MAIN_DB_PREFIX."supplier_proposal ";
    @@ -1522,6 +1559,7 @@ class SupplierProposal extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Set an overall discount on the proposal
          *
    @@ -1531,6 +1569,7 @@ class SupplierProposal extends CommonObject
          */
         function set_remise_percent($user, $remise)
         {
    +        // phpcs:enable
             $remise=trim($remise)?trim($remise):0;
     
             if (! empty($user->rights->supplier_proposal->creer))
    @@ -1555,6 +1594,7 @@ class SupplierProposal extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Set an absolute overall discount on the proposal
          *
    @@ -1564,6 +1604,7 @@ class SupplierProposal extends CommonObject
          */
         function set_remise_absolue($user, $remise)
         {
    +        // phpcs:enable
             $remise=trim($remise)?trim($remise):0;
     
             if (! empty($user->rights->supplier_proposal->creer))
    @@ -1689,7 +1730,6 @@ class SupplierProposal extends CommonObject
                     {
                         $result = $this->updateOrCreatePriceFournisseur($user);
                     }
    -
                 }
                 if ($statut == 4)
                 {
    @@ -1775,7 +1815,8 @@ class SupplierProposal extends CommonObject
     	 *	@param      User	$user					Object user
          *	@return     int         					<0 if KO, >0 if OK
          */
    -     function updatePriceFournisseur($idProductFournPrice, $product, $user) {
    +    function updatePriceFournisseur($idProductFournPrice, $product, $user)
    +    {
     		$price=price2num($product->subprice*$product->qty,'MU');
     		$unitPrice = price2num($product->subprice,'MU');
     
    @@ -1787,7 +1828,7 @@ class SupplierProposal extends CommonObject
                 $this->db->rollback();
                 return -1;
     		}
    -	 }
    +	}
     
     	 /**
          *	Create ProductFournisseur
    @@ -1796,7 +1837,8 @@ class SupplierProposal extends CommonObject
     	 *	@param      User		$user		Object user
          *	@return     int         			<0 if KO, >0 if OK
          */
    -	 function createPriceFournisseur($product, $user) {
    +    function createPriceFournisseur($product, $user)
    +    {
     	 	$price=price2num($product->subprice*$product->qty,'MU');
     	    $qty=price2num($product->qty);
     		$unitPrice = price2num($product->subprice,'MU');
    @@ -1823,16 +1865,18 @@ class SupplierProposal extends CommonObject
                 $this->db->rollback();
                 return -1;
     		}
    -	 }
    +	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     *	Set draft status
    +     *  Set draft status
          *
          *	@param		User	$user		Object user that modify
          *	@return		int					<0 if KO, >0 if OK
          */
         function set_draft($user)
         {
    +        // phpcs:enable
             global $conf,$langs;
     
             $sql = "UPDATE ".MAIN_DB_PREFIX."supplier_proposal SET fk_statut = 0";
    @@ -1851,6 +1895,7 @@ class SupplierProposal extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Return list of askprice (eventually filtered on user) into an array
          *
    @@ -1866,6 +1911,7 @@ class SupplierProposal extends CommonObject
          */
         function liste_array($shortlist=0, $draft=0, $notcurrentuser=0, $socid=0, $limit=0, $offset=0, $sortfield='p.datec', $sortorder='DESC')
         {
    +        // phpcs:enable
             global $conf,$user;
     
             $ga = array();
    @@ -2091,11 +2137,8 @@ class SupplierProposal extends CommonObject
                         $cluser->fetch($obj->fk_user_cloture);
                         $this->user_cloture     = $cluser;
                     }
    -
    -
                 }
                 $this->db->free($result);
    -
             }
             else
             {
    @@ -2115,15 +2158,17 @@ class SupplierProposal extends CommonObject
             return $this->LibStatut($this->statut,$mode);
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
    -     *    	Return label of a status (draft, validated, ...)
    +     *  Return label of a status (draft, validated, ...)
          *
    -     *    	@param      int			$statut		id statut
    -     *    	@param      int			$mode      	0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto
    -     *    	@return     string		Label
    +     *  @param      int			$statut		id statut
    +     *  @param      int			$mode      	0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto
    +     *  @return     string      Label
          */
     	function LibStatut($statut,$mode=1)
         {
    +        // phpcs:enable
         	// Init/load array of translation of status
         	if (empty($this->labelstatut) || empty($this->labelstatut_short))
         	{
    @@ -2143,30 +2188,32 @@ class SupplierProposal extends CommonObject
     
         	$statuttrans='';
     		if ($statut==0) $statuttrans='statut0';
    -		if ($statut==1) $statuttrans='statut1';
    -		if ($statut==2) $statuttrans='statut3';
    -		if ($statut==3) $statuttrans='statut5';
    -		if ($statut==4) $statuttrans='statut6';
    +		elseif ($statut==1) $statuttrans='statut1';
    +		elseif ($statut==2) $statuttrans='statut3';
    +		elseif ($statut==3) $statuttrans='statut5';
    +		elseif ($statut==4) $statuttrans='statut6';
     
     		if ($mode == 0)	return $this->labelstatut[$statut];
    -		if ($mode == 1)	return $this->labelstatut_short[$statut];
    -		if ($mode == 2)	return img_picto($this->labelstatut[$statut], $statuttrans).' '.$this->labelstatut_short[$statut];
    -		if ($mode == 3)	return img_picto($this->labelstatut[$statut], $statuttrans);
    -		if ($mode == 4)	return img_picto($this->labelstatut[$statut],$statuttrans).' '.$this->labelstatut[$statut];
    -		if ($mode == 5)	return '<span class="hideonsmartphone">'.$this->labelstatut_short[$statut].' </span>'.img_picto($this->labelstatut[$statut],$statuttrans);
    -		if ($mode == 6)	return '<span class="hideonsmartphone">'.$this->labelstatut[$statut].' </span>'.img_picto($this->labelstatut[$statut],$statuttrans);
    +		elseif ($mode == 1)	return $this->labelstatut_short[$statut];
    +		elseif ($mode == 2)	return img_picto($this->labelstatut[$statut], $statuttrans).' '.$this->labelstatut_short[$statut];
    +		elseif ($mode == 3)	return img_picto($this->labelstatut[$statut], $statuttrans);
    +		elseif ($mode == 4)	return img_picto($this->labelstatut[$statut],$statuttrans).' '.$this->labelstatut[$statut];
    +		elseif ($mode == 5)	return '<span class="hideonsmartphone">'.$this->labelstatut_short[$statut].' </span>'.img_picto($this->labelstatut[$statut],$statuttrans);
    +		elseif ($mode == 6)	return '<span class="hideonsmartphone">'.$this->labelstatut[$statut].' </span>'.img_picto($this->labelstatut[$statut],$statuttrans);
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *      Load indicators for dashboard (this->nbtodo and this->nbtodolate)
          *
          *      @param          User	$user   Object user
          *      @param          int		$mode   "opened" for askprice to close, "signed" for proposal to invoice
    -     *      @return         int     		<0 if KO, >0 if OK
    +     *      @return         int             <0 if KO, >0 if OK
          */
         function load_board($user,$mode)
         {
    +        // phpcs:enable
             global $conf, $user, $langs;
     
             $now=dol_now();
    @@ -2318,6 +2365,7 @@ class SupplierProposal extends CommonObject
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *      Charge indicateurs this->nb de tableau de bord
          *
    @@ -2325,6 +2373,7 @@ class SupplierProposal extends CommonObject
          */
         function load_state_board()
         {
    +        // phpcs:enable
             global $conf, $user;
     
             $this->nb=array();
    @@ -2625,7 +2674,6 @@ class SupplierProposal extends CommonObject
     
     	    return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
     	}
    -
     }
     
     
    @@ -2634,26 +2682,58 @@ class SupplierProposal extends CommonObject
      */
     class SupplierProposalLine extends CommonObjectLine
     {
    -    var $db;
    -    var $error;
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
     
    -    public $element='supplier_proposaldet';
    -    public $table_element='supplier_proposaldet';
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error='';
     
    -    var $oldline;
    +    /**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='supplier_proposaldet';
    +
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='supplier_proposaldet';
    +
    +    public $oldline;
     
         // From llx_supplier_proposaldet
    -    var $rowid; // deprecated
    -    var $id;
    -    var $fk_supplier_proposal;
    -    var $fk_parent_line;
    -    var $desc;          	// Description ligne
    -    var $fk_product;		// Id produit predefini
    +    public $rowid; // deprecated
    +
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
    +
    +	/**
    +     * @var int ID
    +     */
    +    public $fk_supplier_proposal;
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_parent_line;
    +
    +    public $desc;          	// Description ligne
    +
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_product;		// Id produit predefini
    +
     	/**
     	 * @deprecated
     	 * @see product_type
     	 */
    -	var $fk_product_type;
    +	public $fk_product_type;
     	/**
     	 * Product type
     	 * @var int
    @@ -2661,89 +2741,106 @@ class SupplierProposalLine extends CommonObjectLine
     	 */
         public $product_type = Product::TYPE_PRODUCT;
     
    -    var $qty;
    -    var $tva_tx;
    -    var $subprice;
    -    var $remise_percent;
    -    var $fk_remise_except;
    +    public $qty;
    +    public $tva_tx;
    +    public $subprice;
    +    public $remise_percent;
     
    -    var $rang = 0;
    +    /**
    +     * @var int ID
    +     */
    +    public $fk_remise_except;
     
    -	var $fk_fournprice;
    -	var $pa_ht;
    -	var $marge_tx;
    -	var $marque_tx;
    +    public $rang = 0;
     
    -    var $special_code;	// Tag for special lines (exlusive tags)
    +    /**
    +     * @var int ID
    +     */
    +	public $fk_fournprice;
    +
    +	public $pa_ht;
    +	public $marge_tx;
    +	public $marque_tx;
    +
    +    public $special_code;	// Tag for special lines (exlusive tags)
         // 1: frais de port
         // 2: ecotaxe
         // 3: option line (when qty = 0)
     
    -    var $info_bits = 0;	// Liste d'options cumulables:
    +    public $info_bits = 0;	// Liste d'options cumulables:
         // Bit 0: 	0 si TVA normal - 1 si TVA NPR
         // Bit 1:	0 ligne normale - 1 si ligne de remise fixe
     
    -    var $total_ht;			// Total HT  de la ligne toute quantite et incluant la remise ligne
    -    var $total_tva;			// Total TVA  de la ligne toute quantite et incluant la remise ligne
    -    var $total_ttc;			// Total TTC de la ligne toute quantite et incluant la remise ligne
    +    public $total_ht;			// Total HT  de la ligne toute quantite et incluant la remise ligne
    +    public $total_tva;			// Total TVA  de la ligne toute quantite et incluant la remise ligne
    +    public $total_ttc;			// Total TTC de la ligne toute quantite et incluant la remise ligne
     
     	/**
     	 * @deprecated
     	 * @see remise_percent, fk_remise_except
     	 */
    -    var $remise;
    +    public $remise;
    +
     	/**
     	 * @deprecated
     	 * @see subprice
     	 */
    -    var $price;
    +    public $price;
     
         // From llx_product
     	/**
     	 * @deprecated
     	 * @see product_ref
     	 */
    -	var $ref;
    +	public $ref;
    +
     	/**
     	 * Product reference
     	 * @var string
     	 */
     	public $product_ref;
    +
     	/**
     	 * @deprecated
     	 * @see product_label
     	 */
    -	var $libelle;
    +	public $libelle;
    +
     	/**
     	 *  Product label
     	 * @var string
     	 */
     	public $product_label;
    +
     	/**
     	 * Product description
     	 * @var string
     	 */
     	public $product_desc;
     
    -    var $localtax1_tx;		// Local tax 1
    -    var $localtax2_tx;		// Local tax 2
    -    var $localtax1_type;	// Local tax 1 type
    -	var $localtax2_type;	// Local tax 2 type
    -    var $total_localtax1;  	// Line total local tax 1
    -    var $total_localtax2;	// Line total local tax 2
    +    public $localtax1_tx;		// Local tax 1
    +    public $localtax2_tx;		// Local tax 2
    +    public $localtax1_type;	// Local tax 1 type
    +	public $localtax2_type;	// Local tax 2 type
    +    public $total_localtax1;  	// Line total local tax 1
    +    public $total_localtax2;	// Line total local tax 2
     
    -    var $skip_update_total; // Skip update price total for special lines
    +    public $skip_update_total; // Skip update price total for special lines
     
    -    var $ref_fourn;
    -    var $ref_supplier;
    +    public $ref_fourn;
    +    public $ref_supplier;
     
     	// Multicurrency
    -	var $fk_multicurrency;
    -	var $multicurrency_code;
    -	var $multicurrency_subprice;
    -	var $multicurrency_total_ht;
    -	var $multicurrency_total_tva;
    -	var $multicurrency_total_ttc;
    +	/**
    +     * @var int ID
    +     */
    +	public $fk_multicurrency;
    +
    +	public $multicurrency_code;
    +	public $multicurrency_subprice;
    +	public $multicurrency_total_ht;
    +	public $multicurrency_total_tva;
    +	public $multicurrency_total_ttc;
     
         /**
          * 	Class line Contructor
    @@ -3146,6 +3243,7 @@ class SupplierProposalLine extends CommonObjectLine
             }
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *	Update DB line fields total_xxx
          *	Used by migration
    @@ -3154,6 +3252,7 @@ class SupplierProposalLine extends CommonObjectLine
          */
         function update_total()
         {
    +        // phpcs:enable
             $this->db->begin();
     
             // Mise a jour ligne en base
    @@ -3178,6 +3277,4 @@ class SupplierProposalLine extends CommonObjectLine
                 return -2;
             }
         }
    -
     }
    -
    diff --git a/htdocs/supplier_proposal/contact.php b/htdocs/supplier_proposal/contact.php
    index fdf51406e8e..7e862e7682d 100644
    --- a/htdocs/supplier_proposal/contact.php
    +++ b/htdocs/supplier_proposal/contact.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005      Patrick Rouillon     <patrick@rouillon.net>
      * Copyright (C) 2005-2018 Destailleur Laurent  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -193,7 +193,6 @@ if ($id > 0 || ! empty($ref))
     
     		// Contacts lines
     		include DOL_DOCUMENT_ROOT.'/core/tpl/contacts.tpl.php';
    -
     	}
     	else
     	{
    @@ -202,6 +201,6 @@ if ($id > 0 || ! empty($ref))
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/supplier_proposal/document.php b/htdocs/supplier_proposal/document.php
    index 12de448829e..63d1f96893a 100644
    --- a/htdocs/supplier_proposal/document.php
    +++ b/htdocs/supplier_proposal/document.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2009 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Cédric Salvador       <csalvador@gpcsolutions.fr>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -87,7 +87,7 @@ if ($object->id > 0)
     	$head = supplier_proposal_prepare_head($object);
     	dol_fiche_head($head, 'document', $langs->trans('CommRequest'), -1, 'supplier_proposal');
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -170,5 +170,6 @@ else
     	print $langs->trans("ErrorUnknown");
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/supplier_proposal/index.php b/htdocs/supplier_proposal/index.php
    index 0e1b51480c1..2eb2fb05032 100644
    --- a/htdocs/supplier_proposal/index.php
    +++ b/htdocs/supplier_proposal/index.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -375,6 +375,6 @@ if (! empty($conf->supplier_proposal->enabled) && $user->rights->supplier_propos
     
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/supplier_proposal/info.php b/htdocs/supplier_proposal/info.php
    index 3f83b4dca88..43e6a70f3c3 100644
    --- a/htdocs/supplier_proposal/info.php
    +++ b/htdocs/supplier_proposal/info.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2006	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -123,5 +123,6 @@ print '</div>';
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/supplier_proposal/list.php b/htdocs/supplier_proposal/list.php
    index 2fcb296b433..642d4610a10 100644
    --- a/htdocs/supplier_proposal/list.php
    +++ b/htdocs/supplier_proposal/list.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2004-2017 Laurent Destailleur   <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne           <eric.seigne@ryxeo.com>
      * Copyright (C) 2005      Marc Barilley / Ocebo <marc@ocebo.com>
    - * Copyright (C) 2005-2013 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2013 Regis Houssin         <regis.houssin@inodbox.com>
      * Copyright (C) 2006      Andre Cianfarani      <acianfa@free.fr>
      * Copyright (C) 2010-2011 Juanjo Menent         <jmenent@2byte.es>
      * Copyright (C) 2010-2011 Philippe Grand        <philippe.grand@atoo-net.com>
    @@ -117,7 +117,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('supplier_proposal');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     
     // List of fields to search into when doing a "search in all"
    diff --git a/htdocs/supplier_proposal/note.php b/htdocs/supplier_proposal/note.php
    index ba54859a207..e57c5260013 100644
    --- a/htdocs/supplier_proposal/note.php
    +++ b/htdocs/supplier_proposal/note.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Florian Henry		  	<florian.henry@open-concept.pro>
      * Copyright (C) 2017      Ferran Marcet       	 <fmarcet@2byte.es>
      *
    @@ -143,6 +143,6 @@ if ($id > 0 || ! empty($ref))
     	}
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/supplier_proposal/tpl/linkedobjectblock.tpl.php b/htdocs/supplier_proposal/tpl/linkedobjectblock.tpl.php
    index ca604e61fcc..33ab23bd962 100644
    --- a/htdocs/supplier_proposal/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/supplier_proposal/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2011  Regis Houssin <regis.houssin@capnetworks.com>
    +/* Copyright (C) 2010-2011  Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2013       Juanjo Menent <jmenent@2byte.es>
      * Copyright (C) 2014       Marcos García <marcosgdf@gmail.com>
      *
    @@ -36,12 +36,11 @@ $langs = $GLOBALS['langs'];
     $linkedObjectBlock = $GLOBALS['linkedObjectBlock'];
     
     $total=0; $ilink=0;
    -$var=true;
     foreach($linkedObjectBlock as $key => $objectlink)
     {
         $ilink++;
     
    -    $trclass=($var?'pair':'impair');
    +    $trclass='oddeven';
         if ($ilink == count($linkedObjectBlock) && empty($noMoreLinkedObjectBlockAfter) && count($linkedObjectBlock) <= 1) $trclass.=' liste_sub_total';
     ?>
         <tr class="<?php echo $trclass; ?>">
    diff --git a/htdocs/support/default.css b/htdocs/support/default.css
    index 17204387eb4..6737a6ede00 100644
    --- a/htdocs/support/default.css
    +++ b/htdocs/support/default.css
    @@ -1,4 +1,4 @@
    -/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> 
    +/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2009 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -147,7 +147,7 @@ padding: 4px 4px 4px 4px;
     
     tr.title
     {
    -background: #DDDFDD;	
    +background: #DDDFDD;
     }
     
     table { font-size: 12px; }
    diff --git a/htdocs/support/index.php b/htdocs/support/index.php
    index ab5d62df39e..9b7142acd2f 100644
    --- a/htdocs/support/index.php
    +++ b/htdocs/support/index.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2008-2015	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Juanjo Menent		<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -34,9 +34,7 @@ if ($pos == '/') $pos = '';     // si $pos vaut /, on le met a ''
     if (! defined('DOL_URL_ROOT'))
     	define('DOL_URL_ROOT', $pos);	// URL racine relative
     
    -$langs->load("other");
    -$langs->load("help");
    -
    +$langs->loadLangs(array("other", $langs->load("help")));
     
     /*
      * View
    diff --git a/htdocs/support/online.php b/htdocs/support/online.php
    deleted file mode 100644
    index 0f2dca142fc..00000000000
    --- a/htdocs/support/online.php
    +++ /dev/null
    @@ -1,165 +0,0 @@
    -<?php
    -/* Copyright (C) 2008-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    - *
    - * This program is free software; you can redistribute it and/or modify
    - * it under the terms of the GNU General Public License as published by
    - * the Free Software Foundation; either version 3 of the License, or
    - * (at your option) any later version.
    - *
    - * This program is distributed in the hope that it will be useful,
    - * but WITHOUT ANY WARRANTY; without even the implied warranty of
    - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    - * GNU General Public License for more details.
    - *
    - * You should have received a copy of the GNU General Public License
    - * along with this program. If not, see <http://www.gnu.org/licenses/>.
    - */
    -
    -/**
    - *       \file      htdocs/support/online.php
    - *       \ingroup   install
    - *       \brief     Provide an Online Help support
    - */
    -
    -error_reporting(0);
    -
    -include_once 'inc.php';
    -$uri=preg_replace('/^http(s?):\/\//i','',$dolibarr_main_url_root);
    -$pos = strstr($uri, '/');      // $pos contient alors url sans nom domaine
    -if ($pos == '/') $pos = '';     // si $pos vaut /, on le met a ''
    -define('DOL_URL_ROOT', $pos);	// URL racine relative
    -
    -
    -$langs->load("other");
    -$langs->load("help");
    -
    -
    -/*
    - * View
    - */
    -
    -pHeader($langs->trans("DolibarrHelpCenter"),$_SERVER["PHP_SELF"]);
    -
    -$urlsparkengels='http://www.spark-angels.com';
    -$titlesparkangels='Spark-Angels';
    -
    -//print '<br>';
    -
    -print $langs->trans("ToGetHelpGoOnSparkAngels1",$titlesparkangels).'<br>';
    -
    -print '<br><br>';
    -
    -
    -// List of predefined coaches
    -// We list here the 4 most active coaches on Dolibarr projects (according to number of commits
    -// found in page http://www.nltechno.com/stats/dolibarr/cvschangelogbuilder_dolibarr.html
    -$limit=4;
    -$arrayofwidgets=array(
    -// Widget for Laurent Destailleur
    -array('name'=>'Laurent Destailleur',	// id user 4702
    -		'sort'=>1,
    -		'logo'=>'logoUrl='.urlencode('http://www.nltechno.com/images/logo_nltechno_long.jpg'), // Put your own logo
    -		'id'=>'4256,4255',	// Put of list of sparkangels widget id (for each language)
    -		'lang'=>'fr,en'),	// Put list of language code of widgets (always english at end)
    -// Widget for Auguria
    -array('name'=>'Auguria',
    -		'sort'=>2,
    -		//'logo'=>'logoUrl='.urlencode('http://www.cap-networks.com/images/logo_small.jpg'),
    -		'id'=>'7196',
    -		'lang'=>'fr'),
    -//Widget for Open-Concept
    -array('name'=>'Open-Concept.pro',
    -		'sort'=>2,
    -		'logo'=>'logoUrl='.urlencode('http://www.open-concept.pro/CMS/images/Logo/logosimplecomplet.png'),
    -		'id'=>'9340',
    -		'lang'=>'fr')
    -);
    -$arrayofwidgets=dol_sort_array($arrayofwidgets,'sort','asc',0,0);
    -
    -$found=0;
    -print '* '.$langs->trans("LinkToGoldMember",$langs->defaultlang).'<br><br>';
    -print '<table summary="listofgoldcoaches"><tr>';
    -foreach ($arrayofwidgets as $arraywidget)	// Loop on each user
    -{
    -	if ($found >= $limit) break;
    -	$listofwidgets=explode(',',$arraywidget['id']);
    -	$listoflangs=explode(',',$arraywidget['lang']);
    -	$pos=0;
    -	foreach($listoflangs as $langcode)		// Loop on each lang of user
    -	{
    -		$pos++;
    -		if (preg_match('/'.$langcode.'/i',$langs->defaultlang) || $langcode == 'en')	// If lang qualified
    -		{
    -			print '<td align="center">';
    -			print $arraywidget['name'].'<br>';
    -			print $langs->trans("PossibleLanguages").': ';
    -			// All languages of user are shown
    -			foreach ($listoflangs as $langcode2)
    -			{
    -				if (empty($widgetid)) $widgetid=$listoflangs[$pos-1];
    -				if (! preg_match('/'.$langcode.'/i',$langs->defaultlang) && $langcode2 != 'en') continue;	// Show only english
    -				print $langcode2.' ';
    -			}
    -			print '<br>';
    -
    -			// Only first language found is used for widget
    -			$widgetid=$listofwidgets[$pos-1];
    -
    -			// Widget V3
    -			print '<iframe src="http://www.spark-angels.com/static/widget/template-pro3/widgetpro3-iframe.html?widgetId='.$widgetid.'&lgCode='.$langcode.'&'.(isset($arraywidget['logo'])?$arraywidget['logo']:'').'" width="172" height="123" frameborder="0" scrolling="no" marginheight="0" > </iframe>';
    -
    -			print '</td>';
    -			$found++;
    -			break;
    -		}
    -	}
    -}
    -if (! $found) print '<td>'.$langs->trans("SorryNoHelpForYourLanguage").'</td>';
    -print '</tr></table>';
    -
    -print '<br><br>';
    -
    -// List of coaches
    -$sparkangellangcode=substr($langs->defaultlang,0,2);
    -if (! in_array($sparkangellangcode,array('fr','en','sp'))) $sparkangellangcode='en';
    -print '<table class="noborder" summary="ListOfSupport"><tr valign="middle"><td>';
    -print '* '.$langs->trans("ToGetHelpGoOnSparkAngels3",$urlsparkengels);
    -print '<div id="sparkom_bsaHelpersSearch">'."\n";
    -print '<form target="_blank" id="frJSkw" action="http://www.spark-angels.com/rss/action/resultsearch.html" name="fResult" method="get">'."\n";
    -print '   <input type="hidden" value="" title="Rechercher" maxlength="1024" name="kws" id="kws"/> <!-- mots clés pour la recherche dont la ou les compétences matchent avec ces mots -->'."\n";
    -print '   <input id="dhids" name="dhids" type="hidden" value=""><!-- identifiant SHSAPI communiqué par SparkAngels. -->'."\n";
    -print '   <input id="lgSearch" name="lgS" type="hidden" value=""><!-- code langue, les accompagnateurs proposés suite à cette recherche prétendent pouvoir fournir de l assistance dans au moins cette langue-->'."\n";
    -print '   <input id="myLv" name="myLv" type="hidden" value=""><!-- niveau de l internaute dans le domaine de sa recherche.-->'."\n";
    -print '   <input id="catSrv" name="catSrv" type="hidden" value=""><!-- type de catégorie de service demandée.-->'."\n";
    -print '   <input type="submit" value="'.$langs->trans("Search").'" onclick="getSAParams();">'."\n";
    -print '<script type="text/javascript">'."\n";
    -print '<!--'."\n";
    -print '   function getSAParams(){'."\n";
    -print '       document.getElementById(\'dhids\').value= "4702";'."\n";
    -print '       document.getElementById(\'kws\').value= "dolibarr";'."\n";
    -print '       document.getElementById(\'lgSearch\').value= "'.$sparkangellangcode.'";'."\n";
    -print '       document.getElementById(\'myLv\').value= "0";'."\n";
    -print '       document.getElementById(\'catSrv\').value= "1";'."\n";
    -print '   }'."\n";
    -print '-->'."\n";
    -print '</script>'."\n";
    -print '</form>'."\n";
    -print '</div>'."\n";
    -
    -print '</td><td>';
    -//print '<a href="'.$urlsparkengels.'" target="_blank">';
    -//print '<img border="0" src="sparkangels.png" alt="SparkAngels web site" title="SparkAngels web site">';
    -//print $titlesparkangels;
    -//print '</a>';
    -print '</td></tr></table>';
    -//print $langs->trans("ToGetHelpGoOnSparkAngels2",$titlesparkangels).'<br>';
    -
    -
    -// Otherwise, go back to help center home
    -print '<br><br>';
    -print '* '.$langs->trans("BackToHelpCenter",'index.php');
    -print '<br><br>';
    -
    -
    -
    -pFooter();
    diff --git a/htdocs/takepos/ChangeLog.md b/htdocs/takepos/ChangeLog.md
    new file mode 100644
    index 00000000000..7b623eaa252
    --- /dev/null
    +++ b/htdocs/takepos/ChangeLog.md
    @@ -0,0 +1,5 @@
    +# CHANGELOG TAKEPOS FOR <a href="https://www.dolibarr.org">DOLIBARR ERP CRM</a>
    +
    +## 1.0
    +Initial version
    +
    diff --git a/htdocs/takepos/README.md b/htdocs/takepos/README.md
    new file mode 100644
    index 00000000000..bdbe6bbd2e8
    --- /dev/null
    +++ b/htdocs/takepos/README.md
    @@ -0,0 +1,9 @@
    +# TAKEPOS
    +
    +## Features
    +Add a Touch Screen POS (Point Of Sale) to your ERP.
    +
    +<!--
    +![Screenshot takepos](img/screenshot_takepos.png?raw=true "TakePos"){imgmd}
    +-->
    +
    diff --git a/htdocs/takepos/admin/about.php b/htdocs/takepos/admin/about.php
    new file mode 100644
    index 00000000000..27b5e51b03b
    --- /dev/null
    +++ b/htdocs/takepos/admin/about.php
    @@ -0,0 +1,75 @@
    +<?php
    +/* Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2018 SuperAdmin
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    takepos/admin/about.php
    + * \ingroup takepos
    + * \brief   About page of module TakePos.
    + */
    +
    +require '../../main.inc.php';	// Load $user and permissions
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +require_once '../lib/takepos.lib.php';
    +
    +// Translations
    +$langs->loadLangs(array("errors","admin","cashdesk"));
    +
    +// Access control
    +if (! $user->admin) {
    +	accessforbidden();
    +}
    +
    +// Parameters
    +$action = GETPOST('action', 'alpha');
    +$backtopage = GETPOST('backtopage', 'alpha');
    +
    +
    +/*
    + * Actions
    + */
    +
    +// None
    +
    +
    +/*
    + * View
    + */
    +
    +$form = new Form($db);
    +
    +$page_name = "TakePosAbout";
    +llxHeader('', $langs->trans($page_name));
    +
    +// Subheader
    +$linkback = '<a href="'.($backtopage?$backtopage:DOL_URL_ROOT.'/admin/modules.php').'">'.$langs->trans("BackToModuleList").'</a>';
    +
    +print load_fiche_titre($langs->trans($page_name), $linkback, 'object_takepos@takepos');
    +
    +// Configuration header
    +$head = takeposAdminPrepareHead();
    +dol_fiche_head($head, 'about', '', 0, 'takepos@takepos');
    +
    +dol_include_once('/takepos/core/modules/modTakePos.class.php');
    +$tmpmodule = new modTakePos($db);
    +print $tmpmodule->getDescLong();
    +
    +// Page end
    +dol_fiche_end();
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/takepos/admin/orderprinters.php b/htdocs/takepos/admin/orderprinters.php
    new file mode 100644
    index 00000000000..a37a1d71c61
    --- /dev/null
    +++ b/htdocs/takepos/admin/orderprinters.php
    @@ -0,0 +1,199 @@
    +<?php
    +/* Copyright (C) 2005       Matthieu Valleton   <mv@seeschloss.org>
    + * Copyright (C) 2005       Eric Seigne         <eric.seigne@ryxeo.com>
    + * Copyright (C) 2006-2016  Laurent Destailleur <eldy@users.sourceforge.net>
    + * Copyright (C) 2007       Patrick Raguin      <patrick.raguin@gmail.com>
    + * Copyright (C) 2005-2012  Regis Houssin       <regis.houssin@inodbox.com>
    + * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *      \file       htdocs/takepos/admin/orderprinters.php
    + *      \ingroup    takepos
    + *      \brief      Home page of category area
    + */
    +
    +require '../../main.inc.php';	// Load $user and permissions
    +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/treeview.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
    +
    +$langs->loadLangs(array("main"), "categories", "takepos", "printing");
    +
    +if (! $user->rights->categorie->lire) accessforbidden();
    +
    +$id=GETPOST('id','int');
    +$type=(GETPOST('type','aZ09') ? GETPOST('type','aZ09') : Categorie::TYPE_PRODUCT);
    +$catname=GETPOST('catname','alpha');
    +$action=GETPOST('action','alpha');
    +$printer1=GETPOST('printer1','alpha');
    +$printer2=GETPOST('printer2','alpha');
    +
    +if (is_numeric($type)) $type=Categorie::$MAP_ID_TO_CODE[$type];	// For backward compatibility
    +
    +/*
    + * Actions
    + */
    +print $action;
    +if ($action=="SavePrinter1"){
    +	$printedcategories=";";
    +	if (is_array($printer1)) foreach ($printer1 as $cat){
    +		$printedcategories=$printedcategories.$cat.";";
    +	}
    +	dolibarr_set_const($db,"TAKEPOS_PRINTED_CATEGORIES_1", $printedcategories,'chaine',0,'',$conf->entity);
    +}
    +
    +if ($action=="SavePrinter2"){
    +	$printedcategories=";";
    +	if (is_array($printer2)) foreach ($printer2 as $cat){
    +		$printedcategories=$printedcategories.$cat.";";
    +	}
    +	dolibarr_set_const($db,"TAKEPOS_PRINTED_CATEGORIES_2", $printedcategories,'chaine',0,'',$conf->entity);
    +}
    +
    +
    +/*
    + * View
    + */
    +
    +$categstatic = new Categorie($db);
    +$form = new Form($db);
    +
    +if ($type == Categorie::TYPE_PRODUCT)       { $title=$langs->trans("ProductsCategoriesArea");  $typetext='product'; }
    +elseif ($type == Categorie::TYPE_SUPPLIER)  { $title=$langs->trans("SuppliersCategoriesArea"); $typetext='supplier'; }
    +elseif ($type == Categorie::TYPE_CUSTOMER)  { $title=$langs->trans("CustomersCategoriesArea"); $typetext='customer'; }
    +elseif ($type == Categorie::TYPE_MEMBER)    { $title=$langs->trans("MembersCategoriesArea");   $typetext='member'; }
    +elseif ($type == Categorie::TYPE_CONTACT)   { $title=$langs->trans("ContactsCategoriesArea");  $typetext='contact'; }
    +elseif ($type == Categorie::TYPE_ACCOUNT)   { $title=$langs->trans("AccountsCategoriesArea");  $typetext='bank_account'; }
    +elseif ($type == Categorie::TYPE_PROJECT)   { $title=$langs->trans("ProjectsCategoriesArea");  $typetext='project'; }
    +elseif ($type == Categorie::TYPE_USER)      { $title=$langs->trans("UsersCategoriesArea");     $typetext='user'; }
    +else                                        { $title=$langs->trans("CategoriesArea");          $typetext='unknown'; }
    +
    +$arrayofjs=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.js', '/includes/jquery/plugins/jquerytreeview/lib/jquery.cookie.js');
    +$arrayofcss=array('/includes/jquery/plugins/jquerytreeview/jquery.treeview.css');
    +
    +llxHeader('',$title,'','',0,0,$arrayofjs,$arrayofcss);
    +
    +
    +print load_fiche_titre($langs->trans("OrderPrinters"));
    +
    +//print '<table border="0" width="100%" class="notopnoleftnoright">';
    +//print '<tr><td valign="top" width="30%" class="notopnoleft">';
    +print '<div class="fichecenter"><div class="fichethirdleft">';
    +
    +
    +//print '</td><td valign="top" width="70%">';
    +print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
    +
    +
    +//print '</td></tr></table>';
    +print '</div></div></div>';
    +
    +print '<div class="fichecenter"><br>';
    +
    +
    +// Charge tableau des categories
    +$cate_arbo = $categstatic->get_full_arbo($typetext);
    +
    +// Define fulltree array
    +$fulltree=$cate_arbo;
    +
    +// Define data (format for treeview)
    +$data=array();
    +$data[] = array('rowid'=>0,'fk_menu'=>-1,'title'=>"racine",'mainmenu'=>'','leftmenu'=>'','fk_mainmenu'=>'','fk_leftmenu'=>'');
    +foreach($fulltree as $key => $val)
    +{
    +	$categstatic->id=$val['id'];
    +	$categstatic->ref=$val['label'];
    +	$categstatic->color=$val['color'];
    +	$categstatic->type=$type;
    +	$li=$categstatic->getNomUrl(1,'',60);
    +	$desc=dol_htmlcleanlastbr($val['description']);
    +
    +	$data[] = array(
    +	'rowid'=>$val['rowid'],
    +	'fk_menu'=>$val['fk_menu'],
    +	'fk_menu'=>$val['fk_parent'],
    +	'label'=>$val['label']
    +	);
    +}
    +
    +//Printer1
    +print '<table class="liste nohover" width="100%">';
    +print '<tr class="liste_titre"><td>'.$langs->trans("Printer").' 1</td><td></td><td align="right">';
    +print '</td></tr>';
    +$nbofentries=(count($data) - 1);
    +print '<form action="orderprinters.php">';
    +if ($nbofentries > 0)
    +{
    +	print '<tr class="pair"><td colspan="3">';
    +	print '<input type="hidden" name="action" value="SavePrinter1">';
    +	foreach ($data as $row) {
    +		if (strpos($conf->global->TAKEPOS_PRINTED_CATEGORIES_1, ';'.$row["rowid"].';') !== false) $checked='checked'; else $checked='';
    +		if ($row["fk_menu"]==0) print '<input type="checkbox" name="printer1[]" value="'.$row["rowid"].'" '.$checked.'>'.$row["label"].'<br>';
    +	}
    +	print '</td></tr>';
    +}
    +else
    +{
    +	print '<tr class="pair">';
    +	print '<td colspan="3"><table class="nobordernopadding"><tr class="nobordernopadding"><td>'.img_picto_common('','treemenu/branchbottom.gif').'</td>';
    +	print '<td valign="middle">';
    +	print $langs->trans("NoCategoryYet");
    +	print '</td>';
    +	print '<td>&nbsp;</td>';
    +	print '</table></td>';
    +	print '</tr>';
    +}
    +print "</table>";
    +print '<input type="submit" value="'.$langs->trans("Save").'"></form><br><br>';
    +
    +//Printer2
    +print '<table class="liste nohover" width="100%">';
    +print '<tr class="liste_titre"><td>'.$langs->trans("Printer").' 2</td><td></td><td align="right">';
    +print '</td></tr>';
    +$nbofentries=(count($data) - 1);
    +print '<form action="orderprinters.php">';
    +if ($nbofentries > 0)
    +{
    +	print '<tr class="pair"><td colspan="3">';
    +	print '<input type="hidden" name="action" value="SavePrinter2">';
    +	foreach ($data as $row) {
    +		if (strpos($conf->global->TAKEPOS_PRINTED_CATEGORIES_2, ';'.$row["rowid"].';') !== false) $checked='checked'; else $checked='';
    +		if ($row["fk_menu"]==0) print '<input type="checkbox" name="printer2[]" value="'.$row["rowid"].'" '.$checked.'>'.$row["label"].'<br>';
    +	}
    +	print '</td></tr>';
    +}
    +else
    +{
    +	print '<tr class="pair">';
    +	print '<td colspan="3"><table class="nobordernopadding"><tr class="nobordernopadding"><td>'.img_picto_common('','treemenu/branchbottom.gif').'</td>';
    +	print '<td valign="middle">';
    +	print $langs->trans("NoCategoryYet");
    +	print '</td>';
    +	print '<td>&nbsp;</td>';
    +	print '</table></td>';
    +	print '</tr>';
    +}
    +print "</table>";
    +print '<input type="submit" value="'.$langs->trans("Save").'"></form>';
    +
    +print '</div>';
    +
    +llxFooter();
    +
    +$db->close();
    diff --git a/htdocs/takepos/admin/setup.php b/htdocs/takepos/admin/setup.php
    new file mode 100644
    index 00000000000..453ecf64609
    --- /dev/null
    +++ b/htdocs/takepos/admin/setup.php
    @@ -0,0 +1,252 @@
    +<?php
    +/* Copyright (C) 2008-2011 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2011-2017 Juanjo Menent		<jmenent@2byte.es>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *	\file       htdocs/takepos/admin/setup.php
    + *	\ingroup    takepos
    + *	\brief      Setup page for TakePos module
    + */
    +
    +require '../../main.inc.php';	// Load $user and permissions
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
    +
    +// If socid provided by ajax company selector
    +if (! empty($_REQUEST['CASHDESK_ID_THIRDPARTY_id']))
    +{
    +	$_GET['CASHDESK_ID_THIRDPARTY'] = GETPOST('CASHDESK_ID_THIRDPARTY_id','alpha');
    +	$_POST['CASHDESK_ID_THIRDPARTY'] = GETPOST('CASHDESK_ID_THIRDPARTY_id','alpha');
    +	$_REQUEST['CASHDESK_ID_THIRDPARTY'] = GETPOST('CASHDESK_ID_THIRDPARTY_id','alpha');
    +}
    +
    +// Security check
    +if (!$user->admin) accessforbidden();
    +
    +$langs->loadLangs(array("admin", "cashdesk"));
    +
    +/*
    + * Actions
    + */
    +if (GETPOST('action','alpha') == 'set')
    +{
    +	$db->begin();
    +
    +	if (GETPOST('socid','int') < 0) $_POST["socid"]='';
    +
    +	$res = dolibarr_set_const($db,"CASHDESK_ID_THIRDPARTY",(GETPOST('socid','int') > 0 ? GETPOST('socid','int') : ''),'chaine',0,'',$conf->entity);
    +	$res = dolibarr_set_const($db,"CASHDESK_ID_BANKACCOUNT_CASH",(GETPOST('CASHDESK_ID_BANKACCOUNT_CASH','alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CASH','alpha') : ''),'chaine',0,'',$conf->entity);
    +	$res = dolibarr_set_const($db,"CASHDESK_ID_BANKACCOUNT_CHEQUE",(GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE','alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE','alpha') : ''),'chaine',0,'',$conf->entity);
    +	$res = dolibarr_set_const($db,"CASHDESK_ID_BANKACCOUNT_CB",(GETPOST('CASHDESK_ID_BANKACCOUNT_CB','alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CB','alpha') : ''),'chaine',0,'',$conf->entity);
    +	$res = dolibarr_set_const($db,"CASHDESK_ID_WAREHOUSE",(GETPOST('CASHDESK_ID_WAREHOUSE','alpha') > 0 ? GETPOST('CASHDESK_ID_WAREHOUSE','alpha') : ''),'chaine',0,'',$conf->entity);
    +	$res = dolibarr_set_const($db,"CASHDESK_NO_DECREASE_STOCK",GETPOST('CASHDESK_NO_DECREASE_STOCK','alpha'),'chaine',0,'',$conf->entity);
    +	$res = dolibarr_set_const($db,"CASHDESK_SERVICES", GETPOST('CASHDESK_SERVICES','alpha'),'chaine',0,'',$conf->entity);
    +	$res = dolibarr_set_const($db,"TAKEBOX", GETPOST('TAKEBOX','alpha'),'chaine',0,'',$conf->entity);
    +	$res = dolibarr_set_const($db,"TAKEPOS_BAR_RESTAURANT", GETPOST('TAKEPOS_BAR_RESTAURANT','alpha'),'chaine',0,'',$conf->entity);
    +    $res = dolibarr_set_const($db,"TAKEPOS_PRINT_SERVER", GETPOST('TAKEPOS_PRINT_SERVER','alpha'),'chaine',0,'',$conf->entity);
    +	$res = dolibarr_set_const($db,"TAKEPOS_ORDER_PRINTERS", GETPOST('TAKEPOS_ORDER_PRINTERS','alpha'),'chaine',0,'',$conf->entity);
    +
    +	dol_syslog("admin/cashdesk: level ".GETPOST('level','alpha'));
    +
    +	if (! $res > 0) $error++;
    +
    + 	if (! $error)
    +    {
    +        $db->commit();
    +	    setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
    +    }
    +    else
    +    {
    +        $db->rollback();
    +	    setEventMessages($langs->trans("Error"), null, 'errors');
    +    }
    +}
    +
    +/*
    + * View
    + */
    +
    +$form=new Form($db);
    +$formproduct=new FormProduct($db);
    +
    +llxHeader('',$langs->trans("CashDeskSetup"));
    +
    +$linkback='<a href="'.DOL_URL_ROOT.'/admin/modules.php">'.$langs->trans("BackToModuleList").'</a>';
    +print load_fiche_titre($langs->trans("CashDeskSetup"),$linkback,'title_setup');
    +print '<br>';
    +
    +
    +// Mode
    +print '<form action="'.$_SERVER["PHP_SELF"].'" method="post">';
    +print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +print '<input type="hidden" name="action" value="set">';
    +
    +print '<table class="noborder" width="100%">';
    +print '<tr class="liste_titre">';
    +print '<td>'.$langs->trans("Parameters").'</td><td>'.$langs->trans("Value").'</td>';
    +print "</tr>\n";
    +
    +print '<tr class="oddeven"><td width=\"50%\">'.$langs->trans("CashDeskThirdPartyForSell").'</td>';
    +print '<td colspan="2">';
    +print $form->select_company($conf->global->CASHDESK_ID_THIRDPARTY,'socid','s.client in (1,3) AND s.status = 1',1,0,1,array(),0);
    +print '</td></tr>';
    +if (! empty($conf->banque->enabled))
    +{
    +
    +	print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForSell").'</td>';
    +	print '<td colspan="2">';
    +	$form->select_comptes($conf->global->CASHDESK_ID_BANKACCOUNT_CASH,'CASHDESK_ID_BANKACCOUNT_CASH',0,"courant=2",1);
    +	print '</td></tr>';
    +
    +
    +	print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForCheque").'</td>';
    +	print '<td colspan="2">';
    +	$form->select_comptes($conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE,'CASHDESK_ID_BANKACCOUNT_CHEQUE',0,"courant=1",1);
    +	print '</td></tr>';
    +
    +
    +	print '<tr class="oddeven"><td>'.$langs->trans("CashDeskBankAccountForCB").'</td>';
    +	print '<td colspan="2">';
    +	$form->select_comptes($conf->global->CASHDESK_ID_BANKACCOUNT_CB,'CASHDESK_ID_BANKACCOUNT_CB',0,"courant=1",1);
    +	print '</td></tr>';
    +}
    +
    +if (! empty($conf->stock->enabled))
    +{
    +
    +	print '<tr class="oddeven"><td>'.$langs->trans("CashDeskDoNotDecreaseStock").'</td>';	// Force warehouse (this is not a default value)
    +	print '<td colspan="2">';
    +	if (empty($conf->productbatch->enabled)) {
    +	   print $form->selectyesno('CASHDESK_NO_DECREASE_STOCK',$conf->global->CASHDESK_NO_DECREASE_STOCK,1);
    +	}
    +	else
    +	{
    +	    if (!$conf->global->CASHDESK_NO_DECREASE_STOCK) {
    +	       $res = dolibarr_set_const($db,"CASHDESK_NO_DECREASE_STOCK",1,'chaine',0,'',$conf->entity);
    +	    }
    +	    print $langs->trans('StockDecreaseForPointOfSaleDisabledbyBatch');
    +	}
    +	print '</td></tr>';
    +
    +	$disabled=$conf->global->CASHDESK_NO_DECREASE_STOCK;
    +
    +
    +	print '<tr class="oddeven"><td>'.$langs->trans("CashDeskIdWareHouse").'</td>';	// Force warehouse (this is not a default value)
    +	print '<td colspan="2">';
    +	if (! $disabled)
    +	{
    +		print $formproduct->selectWarehouses($conf->global->CASHDESK_ID_WAREHOUSE,'CASHDESK_ID_WAREHOUSE','',1,$disabled);
    +		print ' <a href="'.DOL_URL_ROOT.'/product/stock/card.php?action=create&backtopage='.urlencode($_SERVER["PHP_SELF"]).'">('.$langs->trans("Create").')</a>';
    +	}
    +	else
    +	{
    +		print $langs->trans("StockDecreaseForPointOfSaleDisabled");
    +	}
    +	print '</td></tr>';
    +}
    +
    +if (! empty($conf->service->enabled))
    +{
    +    print '<tr class="oddeven"><td>';
    +    print $langs->trans("CashdeskShowServices");
    +    print '<td colspan="2">';
    +    print $form->selectyesno("CASHDESK_SERVICES",$conf->global->CASHDESK_SERVICES,1);
    +    print "</td></tr>\n";
    +}
    +
    +// Use Takepos printing
    +print '<tr class="oddeven"><td>';
    +print $langs->trans("DolibarrReceiptPrinter").' TakeBOX (<a href="http://en.takepos.com/takebox">'.$langs->trans("TakeboxNecesary").'</a>)';
    +print '<td colspan="2">';
    +print $form->selectyesno("TAKEBOX",$conf->global->TAKEBOX,1);
    +print "</td></tr>\n";
    +
    +if ($conf->global->TAKEBOX){
    +    print '<tr class="oddeven value"><td>';
    +    print $langs->trans("IPAddress").' (<a href="http://en.takepos.com/takebox">'.$langs->trans("TakeboxNecesary").'</a>)';
    +    print '<td colspan="2">';
    +    print '<input type="text" size="20" id="TAKEPOS_PRINT_SERVER" name="TAKEPOS_PRINT_SERVER" value="'.$conf->global->TAKEPOS_PRINT_SERVER.'">';
    +    print '</td></tr>';
    +}
    +
    +// Bar Restaurant mode
    +print '<tr class="oddeven"><td>';
    +print 'Bar Restaurant';
    +print '<td colspan="2">';
    +print $form->selectyesno("TAKEPOS_BAR_RESTAURANT",$conf->global->TAKEPOS_BAR_RESTAURANT,1);
    +print "</td></tr>\n";
    +
    +if ($conf->global->TAKEPOS_BAR_RESTAURANT and $conf->global->TAKEBOX){
    +    print '<tr class="oddeven value"><td>';
    +    print $langs->trans("OrderPrinters").' (<a href="orderprinters.php?leftmenu=setup">'.$langs->trans("Setup").'</a>)';
    +    print '<td colspan="2">';
    +    print $form->selectyesno("TAKEPOS_ORDER_PRINTERS",$conf->global->TAKEPOS_ORDER_PRINTERS,1);
    +    print '</td></tr>';
    +}
    +
    +print '</table>';
    +print '<br>';
    +
    +print '<div class="center"><input type="submit" class="button" value="'.$langs->trans("Save").'"></div>';
    +
    +print "</form>\n";
    +
    +
    +
    +// Marketplace
    +print "<br><table summary=\"list_of_modules\" class=\"noborder\" width=\"100%\">\n";
    +print "<tr class=\"liste_titre\">\n";
    +print '<td colspan="2">TakePOS Marketplace</td>';
    +print '<td>'.$langs->trans("URL").'</td>';
    +print '</tr>';
    +
    +print "<tr class=\"oddeven\">\n";
    +$url='https://www.dolistore.com/en/modules/980-TakePOS-7-mobile.html';
    +print '<td align="left"><a href="'.$url.'" target="_blank" rel="external"><img border="0" class="imgautosize imgmaxwidth180" src="../img/marketplace/takeposmobile.jpg"></a></td>';
    +print '<td>TakePOS for mobile devices</td>';
    +print '<td><a href="'.$url.'" target="_blank" rel="external">'.$url.'</a></td>';
    +print '</tr>';
    +
    +print "<tr class=\"oddeven\">\n";
    +$url='https://www.dolistore.com/en/modules/949-Cash-Control-7.html';
    +print '<td align="left"><a href="'.$url.'" target="_blank" rel="external"><img border="0" class="imgautosize imgmaxwidth180" src="../img/marketplace/cashcontrol.jpg"></a></td>';
    +print '<td>TakePOS CashControl</td>';
    +print '<td><a href="'.$url.'" target="_blank" rel="external">'.$url.'</a></td>';
    +print '</tr>';
    +
    +print "</table>\n";
    +print '<br>';
    +
    +// Support
    +print "<br><table summary=\"list_of_modules\" class=\"noborder\" width=\"100%\">\n";
    +print "<tr class=\"liste_titre\">\n";
    +print '<td colspan="2">TakePOS Support</td>';
    +print '<td>'.$langs->trans("URL").'</td>';
    +print '</tr>';
    +
    +print "<tr class=\"oddeven\">\n";
    +$url='http://www.takepos.com';
    +print '<td align="left"><a href="'.$url.'" target="_blank" rel="external"><img border="0" class="imgautosize imgmaxwidth180" src="../img/takepos.png"></a></td>';
    +print '<td>TakePOS original developers</td>';
    +print '<td><a href="'.$url.'" target="_blank" rel="external">'.$url.'</a></td>';
    +print '</tr>';
    +
    +print "</table>\n";
    +print '<br>';
    +
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/takepos/ajax.php b/htdocs/takepos/ajax.php
    new file mode 100644
    index 00000000000..33d1503891e
    --- /dev/null
    +++ b/htdocs/takepos/ajax.php
    @@ -0,0 +1,62 @@
    +<?php
    +/* Copyright (C) 2001-2004	Andreu Bisquerra	<jove@bisquerra.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *	\file       htdocs/takepos/ajax.php
    + *	\brief      Ajax search component for TakePos. It search products of a category.
    + */
    +
    +//if (! defined('NOREQUIREUSER'))	define('NOREQUIREUSER','1');	// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIREDB'))		define('NOREQUIREDB','1');		// Not disabled cause need to load personalized language
    +if (! defined('NOREQUIRESOC'))		define('NOREQUIRESOC','1');
    +//if (! defined('NOREQUIRETRAN'))		define('NOREQUIRETRAN','1');
    +if (! defined('NOCSRFCHECK'))		define('NOCSRFCHECK','1');
    +if (! defined('NOTOKENRENEWAL'))	define('NOTOKENRENEWAL','1');
    +if (! defined('NOREQUIREMENU'))		define('NOREQUIREMENU','1');
    +if (! defined('NOREQUIREHTML'))		define('NOREQUIREHTML','1');
    +if (! defined('NOREQUIREAJAX'))		define('NOREQUIREAJAX','1');
    +
    +require '../main.inc.php';	// Load $user and permissions
    +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
    +
    +$category = GETPOST('category','alpha');
    +$action = GETPOST('action','alpha');
    +$term = GETPOST('term','alpha');
    +
    +
    +/*
    + * View
    + */
    +
    +if ($action=="getProducts"){
    +	$object = new Categorie($db);
    +	$result=$object->fetch($category);
    +	$prods = $object->getObjectsInCateg("product");
    +	echo json_encode($prods);
    +}
    +
    +if ($action=="search"){
    +	$sql = 'SELECT * FROM '.MAIN_DB_PREFIX.'product';
    +	$sql.= ' WHERE entity IN ('.getEntity('product').')';
    +	$sql .= natural_search(array('label','barcode'), $term);
    +	$resql = $db->query($sql);
    +	$rows = array();
    +	while($row = $db->fetch_array ($resql)){
    +		$rows[] = $row;
    +	}
    +	echo json_encode($rows);
    +}
    \ No newline at end of file
    diff --git a/htdocs/takepos/class/actions_takepos.class.php b/htdocs/takepos/class/actions_takepos.class.php
    new file mode 100644
    index 00000000000..2ed4a27525b
    --- /dev/null
    +++ b/htdocs/takepos/class/actions_takepos.class.php
    @@ -0,0 +1,219 @@
    +<?php
    +/* Copyright (C) 2018 SuperAdmin
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    takepos/class/actions_takepos.class.php
    + * \ingroup takepos
    + * \brief   Hooks of takepos module
    + */
    +
    +/**
    + * Class ActionsTakePos
    + */
    +class ActionsTakePos
    +{
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +    /**
    +     * @var string Error
    +     */
    +    public $error = '';
    +    /**
    +     * @var array Errors
    +     */
    +    public $errors = array();
    +
    +
    +	/**
    +	 * @var array Hook results. Propagated to $hookmanager->resArray for later reuse
    +	 */
    +	public $results = array();
    +
    +	/**
    +	 * @var string String displayed by executeHook() immediately after return
    +	 */
    +	public $resprints;
    +
    +
    +	/**
    +	 * Constructor
    +	 *
    +	 *  @param		DoliDB		$db      Database handler
    +	 */
    +	public function __construct($db)
    +	{
    +	    $this->db = $db;
    +	}
    +
    +	/**
    +	 * Overloading the doActions function : replacing the parent's function with the one below
    +	 *
    +	 * @param   array()         $parameters     Hook metadatas (context, etc...)
    +	 * @param   CommonObject    $object         The object to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
    +	 * @param   string          $action         Current action (if set). Generally create or edit or null
    +	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook
    +	 * @return  int                             < 0 on error, 0 on success, 1 to replace standard code
    +	 */
    +	public function doActions($parameters, &$object, &$action, $hookmanager)
    +	{
    +		global $conf, $user, $langs;
    +
    +		$error = 0; // Error counter
    +
    +        /* print_r($parameters); print_r($object); echo "action: " . $action; */
    +	    if (in_array($parameters['currentcontext'], array('somecontext1','somecontext2')))	    // do something only for the context 'somecontext1' or 'somecontext2'
    +	    {
    +			// Do what you want here...
    +			// You can for example call global vars like $fieldstosearchall to overwrite them, or update database depending on $action and $_POST values.
    +		}
    +
    +		if (! $error) {
    +			$this->results = array('myreturn' => 999);
    +			$this->resprints = 'A text to show';
    +			return 0;                                    // or return 1 to replace standard code
    +		} else {
    +			$this->errors[] = 'Error message';
    +			return -1;
    +		}
    +	}
    +
    +
    +	/**
    +	 * Overloading the doActions function : replacing the parent's function with the one below
    +	 *
    +	 * @param   array()         $parameters     Hook metadatas (context, etc...)
    +	 * @param   CommonObject    $object         The object to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
    +	 * @param   string          $action         Current action (if set). Generally create or edit or null
    +	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook
    +	 * @return  int                             < 0 on error, 0 on success, 1 to replace standard code
    +	 */
    +	public function addMoreActionsButtons($parameters, &$object, &$action, $hookmanager)
    +	{
    +	    global $conf, $user, $langs;
    +
    +	    $error = 0; // Error counter
    +
    +        /* print_r($parameters); print_r($object); echo "action: " . $action; */
    +	    if (in_array($parameters['currentcontext'], array('invoicecard')))		// do something only for the context 'somecontext1' or 'somecontext2'
    +	    {
    +
    +			$receipt_url=DOL_URL_ROOT."/takepos/receipt.php";
    +	        print '<div class="inline-block divButAction"><a target="_blank" class="butAction" href="' . $receipt_url . '?facid=' . $object->id.'">' . $langs->trans('Ticket') .'</a></div>';
    +	    }
    +
    +	    if (! $error) {
    +	        $this->results = array('myreturn' => 999);
    +	        $this->resprints = 'A text to show';
    +	        return 0;                                    // or return 1 to replace standard code
    +	    } else {
    +	        $this->errors[] = 'Error message';
    +	        return -1;
    +	    }
    +	}
    +
    +
    +	/**
    +	 * Overloading the addMoreMassActions function : replacing the parent's function with the one below
    +	 *
    +	 * @param   array()         $parameters     Hook metadatas (context, etc...)
    +	 * @param   CommonObject    $object         The object to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
    +	 * @param   string          $action         Current action (if set). Generally create or edit or null
    +	 * @param   HookManager     $hookmanager    Hook manager propagated to allow calling another hook
    +	 * @return  int                             < 0 on error, 0 on success, 1 to replace standard code
    +	 */
    +	public function addMoreMassActions($parameters, &$object, &$action, $hookmanager)
    +	{
    +	    global $conf, $user, $langs;
    +
    +	    $error = 0; // Error counter
    +
    +        /* print_r($parameters); print_r($object); echo "action: " . $action; */
    +	    if (in_array($parameters['currentcontext'], array('somecontext1','somecontext2')))		// do something only for the context 'somecontext1' or 'somecontext2'
    +	    {
    +	        $this->resprints = '<option value="0"'.($disabled?' disabled="disabled"':'').'>'.$langs->trans("TakePosMassAction").'</option>';
    +	    }
    +
    +	    if (! $error) {
    +	        return 0;                                    // or return 1 to replace standard code
    +	    } else {
    +	        $this->errors[] = 'Error message';
    +	        return -1;
    +	    }
    +	}
    +
    +
    +
    +	/**
    +	 * Execute action
    +	 *
    +	 * @param	array	$parameters		Array of parameters
    +	 * @param   Object	$object		   	Object output on PDF
    +	 * @param   string	$action     	'add', 'update', 'view'
    +	 * @return  int 		        	<0 if KO,
    +	 *                          		=0 if OK but we want to process standard actions too,
    +	 *  	                            >0 if OK and we want to replace standard actions.
    +	 */
    +	function beforePDFCreation($parameters, &$object, &$action)
    +	{
    +		global $langs,$conf;
    +		global $hookmanager;
    +
    +		$outputlangs=$langs;
    +
    +		$ret=0; $deltemp=array();
    +		dol_syslog(get_class($this).'::executeHooks action='.$action);
    +
    +		/* print_r($parameters); print_r($object); echo "action: " . $action; */
    +		if (in_array($parameters['currentcontext'], array('somecontext1','somecontext2')))		// do something only for the context 'somecontext1' or 'somecontext2'
    +		{
    +
    +		}
    +
    +		return $ret;
    +	}
    +
    +	/**
    +	 * Execute action
    +	 *
    +	 * @param	array	$parameters		Array of parameters
    +	 * @param   Object	$pdfhandler   	PDF builder handler
    +	 * @param   string	$action     	'add', 'update', 'view'
    +	 * @return  int 		        	<0 if KO,
    +	 *                          		=0 if OK but we want to process standard actions too,
    +	 *  	                            >0 if OK and we want to replace standard actions.
    +	 */
    +	function afterPDFCreation($parameters, &$pdfhandler, &$action)
    +	{
    +		global $langs,$conf;
    +		global $hookmanager;
    +
    +		$outputlangs=$langs;
    +
    +		$ret=0; $deltemp=array();
    +		dol_syslog(get_class($this).'::executeHooks action='.$action);
    +
    +		/* print_r($parameters); print_r($object); echo "action: " . $action; */
    +		if (in_array($parameters['currentcontext'], array('somecontext1','somecontext2')))		// do something only for the context 'somecontext1' or 'somecontext2'
    +		{
    +
    +		}
    +
    +		return $ret;
    +	}
    +}
    diff --git a/htdocs/takepos/css/colorbox.css b/htdocs/takepos/css/colorbox.css
    new file mode 100644
    index 00000000000..e51a84c8282
    --- /dev/null
    +++ b/htdocs/takepos/css/colorbox.css
    @@ -0,0 +1,58 @@
    +/*
    +    Colorbox Core Style:
    +    The following CSS is consistent between example themes and should not be altered.
    +*/
    +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden; -webkit-transform: translate3d(0,0,0);}
    +#cboxWrapper {max-width:none;}
    +#cboxOverlay{position:fixed; width:100%; height:100%;}
    +#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
    +#cboxContent{position:relative;}
    +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
    +#cboxTitle{margin:0;}
    +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
    +#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
    +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
    +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
    +#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
    +
    +/*
    +    User Style:
    +    Change the following styles to modify the appearance of Colorbox.  They are
    +    ordered & tabbed in a way that represents the nesting of the generated HTML.
    +*/
    +#cboxOverlay{background:#000; opacity: 0.9; filter: alpha(opacity = 90);}
    +#colorbox{outline:0;}
    +#cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) no-repeat 0 0;}
    +#cboxTopCenter{height:14px; background:url(images/border.png) repeat-x top left;}
    +#cboxTopRight{width:14px; height:14px; background:url(images/controls.png) no-repeat -36px 0;}
    +#cboxBottomLeft{width:14px; height:43px; background:url(images/controls.png) no-repeat 0 -32px;}
    +#cboxBottomCenter{height:43px; background:url(images/border.png) repeat-x bottom left;}
    +#cboxBottomRight{width:14px; height:43px; background:url(images/controls.png) no-repeat -36px -32px;}
    +#cboxMiddleLeft{width:14px; background:url(images/controls.png) repeat-y -175px 0;}
    +#cboxMiddleRight{width:14px; background:url(images/controls.png) repeat-y -211px 0;}
    +#cboxContent{background:#fff; overflow:visible;}
    +.cboxIframe{background:#fff;}
    +#cboxError{padding:50px; border:1px solid #ccc;}
    +#cboxLoadedContent{margin-bottom:5px;}
    +#cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
    +#cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
    +#cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;}
    +#cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;}
    +
    +/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
    +#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible;  position:absolute; bottom:-29px; background:url(images/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
    +
    +/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
    +#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
    +
    +#cboxPrevious{left:0px; background-position: -51px -25px;}
    +#cboxPrevious:hover{background-position:-51px 0px;}
    +#cboxNext{left:27px; background-position:-75px -25px;}
    +#cboxNext:hover{background-position:-75px 0px;}
    +#cboxClose{right:0; background-position:-100px -25px;}
    +#cboxClose:hover{background-position:-100px 0px;}
    +
    +.cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; right:27px;}
    +.cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;}
    +.cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;}
    +.cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;}
    diff --git a/htdocs/takepos/css/images/border.png b/htdocs/takepos/css/images/border.png
    new file mode 100644
    index 00000000000..c1cd1a2a451
    Binary files /dev/null and b/htdocs/takepos/css/images/border.png differ
    diff --git a/htdocs/takepos/css/images/controls.png b/htdocs/takepos/css/images/controls.png
    new file mode 100644
    index 00000000000..259130cd537
    Binary files /dev/null and b/htdocs/takepos/css/images/controls.png differ
    diff --git a/htdocs/takepos/css/images/loading.gif b/htdocs/takepos/css/images/loading.gif
    new file mode 100644
    index 00000000000..dba33c8167b
    Binary files /dev/null and b/htdocs/takepos/css/images/loading.gif differ
    diff --git a/htdocs/takepos/css/images/loading_background.png b/htdocs/takepos/css/images/loading_background.png
    new file mode 100644
    index 00000000000..23a336b3989
    Binary files /dev/null and b/htdocs/takepos/css/images/loading_background.png differ
    diff --git a/htdocs/takepos/css/pos.css b/htdocs/takepos/css/pos.css
    new file mode 100644
    index 00000000000..8a2122de9f3
    --- /dev/null
    +++ b/htdocs/takepos/css/pos.css
    @@ -0,0 +1,114 @@
    +html,body {
    +    padding:0;
    +    margin:0;
    +    height:100%;
    +}
    +
    +body {
    +    width:100%;
    +}
    +
    +.row {
    +    width:100%;
    +    height:50%;
    +}
    +
    +.row div {
    +    width:33%;
    +    height:100%;
    +    float:left;
    +}
    +
    +button.calcbutton {
    +	display: inline-block;
    +	position: relative;
    +	padding: 0;
    +	line-height: normal;
    +	cursor: pointer;
    +	vertical-align: middle;
    +	text-align: center;
    +	font-size:180%;
    +	overflow: visible; /* removes extra width in IE */
    +	width:24%;
    +	height:24%;
    +}
    +
    +button.calcbutton2 {
    +	display: inline-block;
    +	position: relative;
    +	padding: 0;
    +	line-height: normal;
    +	cursor: pointer;
    +	vertical-align: middle;
    +	text-align: center;
    +	font-size:120%;
    +	overflow: visible; /* removes extra width in IE */
    +	width:24%;
    +	height:24%;
    +}
    +
    +button.actionbutton {
    +	display: inline-block;
    +	position: relative;
    +	padding: 0;
    +	line-height: normal;
    +	cursor: pointer;
    +	vertical-align: middle;
    +	text-align: center;
    +	font-size:100%;
    +	overflow: visible; /* removes extra width in IE */
    +	width:32%;
    +	height:32%;
    +}
    +
    +div.wrapper{
    +	float:left; /* important */
    +	position:relative; /* important(so we can absolutely position the description div */
    +	width:21.5%;
    +	height:23%;
    +	margin:1%;
    +	border: 0.1em solid;
    +	box-shadow: 3px 3px 2px #888;
    +	text-align: center;
    +}
    +
    +div.wrapper2{
    +	float:left; /* important */
    +	position:relative; /* important(so we can absolutely position the description div */
    +	width:10.2%;
    +	height:23%;
    +	margin-top:0.5%;
    +	margin-bottom:0.5%;
    +	margin-left:0.5%;
    +	margin-right:0.5%;
    +	border: 0.1em solid;
    +	box-shadow: 3px 3px 2px #888;
    +	text-align: center;
    +}
    +
    +div.description{
    +	position:absolute; /* absolute position (so we can position it where we want)*/
    +	bottom:0px; /* position will be on bottom */
    +	left:0px;
    +	width:100%;
    +	/* styling bellow */
    +	background-color:black;
    +	font-family: 'tahoma';
    +	font-size:100%;
    +	color:white;
    +	opacity:0.8; /* transparency */
    +	filter:alpha(opacity=80); /* IE transparency */
    +	text-align:center;
    +}
    +
    +@media only screen and (max-aspect-ratio: 6/4) {
    +	div.description{
    +	min-height:20%;
    +	}
    +}
    +
    +p.description_content{
    +	padding:10px;
    +	margin:0px;
    +	
    +}
    diff --git a/htdocs/takepos/customers.php b/htdocs/takepos/customers.php
    new file mode 100644
    index 00000000000..5a67998f180
    --- /dev/null
    +++ b/htdocs/takepos/customers.php
    @@ -0,0 +1,1271 @@
    +<?php
    +/* Copyright (C) 2001-2004  Rodolphe Quiedeville    <rodolphe@quiedeville.org>
    + * Copyright (C) 2004-2016  Laurent Destailleur     <eldy@users.sourceforge.net>
    + * Copyright (C) 2005-2012  Regis Houssin           <regis.houssin@inodbox.com>
    + * Copyright (C) 2012       Marcos García           <marcosgdf@gmail.com>
    + * Copyright (C) 2013-2015  Raphaël Doursenaud      <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2015       Florian Henry           <florian.henry@open-concept.pro>
    + * Copyright (C) 2016       Josep Lluis Amador      <joseplluis@lliuretic.cat>
    + * Copyright (C) 2016       Ferran Marcet      		<fmarcet@2byte.es>
    + * Copyright (C) 2017       Rui Strecht      		<rui.strecht@aliartalentos.com>
    + * Copyright (C) 2017       Juanjo Menent      		<jmenent@2byte.es>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + *	\file       htdocs/takepos/customers.php
    + *	\ingroup    societe
    + *	\brief      Page to show list of third parties. TODO Merge with societe/list.php
    + */
    +
    +require '../main.inc.php';	// Load $user and permissions
    +include_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/societe/class/client.class.php';
    +
    +$langs->loadLangs(array("companies", "commercial", "customers", "suppliers", "bills", "compta", "categories", "cashdesk"));
    +
    +$action=GETPOST('action','alpha');
    +$massaction=GETPOST('massaction','alpha');
    +$show_files=GETPOST('show_files','int');
    +$confirm=GETPOST('confirm','alpha');
    +$toselect = GETPOST('toselect', 'array');
    +$idcustomer = GETPOST('idcustomer','int');
    +$place = GETPOST('place','int');
    +
    +$_GET['optioncss'] = 'print';
    +
    +
    +/*
    + * Actions
    + */
    +
    +if ($action=="change") {
    +    $sql="UPDATE ".MAIN_DB_PREFIX."facture set fk_soc=".$idcustomer." where facnumber='(PROV-POS-".$place.")'";
    +    $resql = $db->query($sql);
    +    ?>
    +    <script>
    +    parent.$("#poslines").load("invoice.php?place="+<?php print $place;?>, function() {
    +        parent.$("#poslines").scrollTop(parent.$("#poslines")[0].scrollHeight);
    +        parent.$.colorbox.close();
    +    });
    +    </script>
    +    <?php
    +    exit;
    +}
    +
    +// Security check
    +$socid = GETPOST('socid','int');
    +if ($user->societe_id) $socid=$user->societe_id;
    +$result = restrictedArea($user,'societe',$socid,'');
    +
    +$search_all=trim(GETPOST('search_all', 'alphanohtml')?GETPOST('search_all', 'alphanohtml'):GETPOST('sall', 'alphanohtml'));
    +$search_cti=preg_replace('/^0+/', '', preg_replace('/[^0-9]/', '', GETPOST('search_cti', 'alphanohtml')));	// Phone number without any special chars
    +
    +$search_id=trim(GETPOST("search_id","int"));
    +$search_nom=trim(GETPOST("search_nom"));
    +$search_alias=trim(GETPOST("search_alias"));
    +$search_nom_only=trim(GETPOST("search_nom_only"));
    +$search_barcode=trim(GETPOST("search_barcode"));
    +$search_customer_code=trim(GETPOST('search_customer_code'));
    +$search_supplier_code=trim(GETPOST('search_supplier_code'));
    +$search_account_customer_code=trim(GETPOST('search_account_customer_code'));
    +$search_account_supplier_code=trim(GETPOST('search_account_supplier_code'));
    +$search_town=trim(GETPOST("search_town"));
    +$search_zip=trim(GETPOST("search_zip"));
    +$search_state=trim(GETPOST("search_state"));
    +$search_region=trim(GETPOST("search_region"));
    +$search_email=trim(GETPOST('search_email'));
    +$search_phone=trim(GETPOST('search_phone'));
    +$search_url=trim(GETPOST('search_url'));
    +$search_idprof1=trim(GETPOST('search_idprof1'));
    +$search_idprof2=trim(GETPOST('search_idprof2'));
    +$search_idprof3=trim(GETPOST('search_idprof3'));
    +$search_idprof4=trim(GETPOST('search_idprof4'));
    +$search_idprof5=trim(GETPOST('search_idprof5'));
    +$search_idprof6=trim(GETPOST('search_idprof6'));
    +$search_vat=trim(GETPOST('search_vat'));
    +$search_sale=trim(GETPOST("search_sale",'int'));
    +$search_categ_cus=trim(GETPOST("search_categ_cus",'int'));
    +$search_categ_sup=trim(GETPOST("search_categ_sup",'int'));
    +$search_country=GETPOST("search_country",'intcomma');
    +$search_type_thirdparty=GETPOST("search_type_thirdparty",'int');
    +$search_status=GETPOST("search_status",'int');
    +$search_type=GETPOST('search_type','alpha');
    +$search_level_from = GETPOST("search_level_from","alpha");
    +$search_level_to   = GETPOST("search_level_to","alpha");
    +$search_stcomm=GETPOST('search_stcomm','int');
    +$search_import_key  = GETPOST("search_import_key","alpha");
    +
    +$type=GETPOST('type');
    +$optioncss=GETPOST('optioncss','alpha');
    +$mode=GETPOST("mode");
    +
    +$diroutputmassaction=$conf->societe->dir_output . '/temp/massgeneration/'.$user->id;
    +
    +$limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
    +$sortfield=GETPOST("sortfield",'alpha');
    +$sortorder=GETPOST("sortorder",'alpha');
    +$page=GETPOST("page",'int');
    +if (! $sortorder) $sortorder="ASC";
    +if (! $sortfield) $sortfield="s.nom";
    +if (empty($page) || $page == -1) { $page = 0; }
    +$offset = $limit * $page;
    +$pageprev = $page - 1;
    +$pagenext = $page + 1;
    +
    +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
    +$contextpage='thirdpartylist';
    +/*if ($search_type == '1,3') { $contextpage='customerlist'; $type='c'; }
    +if ($search_type == '2,3') { $contextpage='prospectlist'; $type='p'; }
    +if ($search_type == '4') { $contextpage='supplierlist'; $type='f'; }
    +*/
    +if ($type == 'c') { $contextpage='customerlist'; if ($search_type=='') $search_type='1,3'; }
    +if ($type == 'p') { $contextpage='prospectlist'; if ($search_type=='') $search_type='2,3'; }
    +if ($type == 'f') { $contextpage='supplierlist'; if ($search_type=='') $search_type='4'; }
    +
    +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
    +$hookmanager->initHooks(array($contextpage));
    +$extrafields = new ExtraFields($db);
    +
    +// fetch optionals attributes and labels
    +$extralabels = $extrafields->fetch_name_optionals_label('societe');
    +$search_array_options=$extrafields->getOptionalsFromPost('societe','','search_');
    +
    +// List of fields to search into when doing a "search in all"
    +$fieldstosearchall = array(
    +	's.nom'=>"ThirdPartyName",
    +	's.name_alias'=>"AliasNameShort",
    +	's.code_client'=>"CustomerCode",
    +	's.code_fournisseur'=>"SupplierCode",
    +	's.code_compta'=>"CustomerAccountancyCodeShort",
    +	's.code_compta_fournisseur'=>"SupplierAccountancyCodeShort",
    +	's.email'=>"EMail",
    +	's.url'=>"URL",
    +	's.tva_intra'=>"VATIntra",
    +	's.siren'=>"ProfId1",
    +	's.siret'=>"ProfId2",
    +	's.ape'=>"ProfId3",
    +);
    +if (($tmp = $langs->transnoentities("ProfId4".$mysoc->country_code)) && $tmp != "ProfId4".$mysoc->country_code && $tmp != '-') $fieldstosearchall['s.idprof4']='ProfId4';
    +if (($tmp = $langs->transnoentities("ProfId5".$mysoc->country_code)) && $tmp != "ProfId5".$mysoc->country_code && $tmp != '-') $fieldstosearchall['s.idprof5']='ProfId5';
    +if (($tmp = $langs->transnoentities("ProfId6".$mysoc->country_code)) && $tmp != "ProfId6".$mysoc->country_code && $tmp != '-') $fieldstosearchall['s.idprof6']='ProfId6';
    +if (!empty($conf->barcode->enabled)) $fieldstosearchall['s.barcode']='Gencod';
    +
    +// Define list of fields to show into list
    +$checkedcustomercode=(in_array($contextpage, array('thirdpartylist', 'customerlist', 'prospectlist')) ? 1 : 0);
    +$checkedsuppliercode=(in_array($contextpage, array('supplierlist')) ? 1 : 0);
    +$checkedcustomeraccountcode=(in_array($contextpage, array('customerlist')) ? 1 : 0);
    +$checkedsupplieraccountcode=(in_array($contextpage, array('supplierlist')) ? 1 : 0);
    +$checkedtypetiers=1;
    +$checkedprofid1=0;
    +$checkedprofid2=0;
    +$checkedprofid3=0;
    +$checkedprofid4=0;
    +$checkedprofid5=0;
    +$checkedprofid6=0;
    +//$checkedprofid4=((($tmp = $langs->transnoentities("ProfId4".$mysoc->country_code)) && $tmp != "ProfId4".$mysoc->country_code && $tmp != '-') ? 1 : 0);
    +//$checkedprofid5=((($tmp = $langs->transnoentities("ProfId5".$mysoc->country_code)) && $tmp != "ProfId5".$mysoc->country_code && $tmp != '-') ? 1 : 0);
    +//$checkedprofid6=((($tmp = $langs->transnoentities("ProfId6".$mysoc->country_code)) && $tmp != "ProfId6".$mysoc->country_code && $tmp != '-') ? 1 : 0);
    +$checkprospectlevel=(in_array($contextpage, array('prospectlist')) ? 1 : 0);
    +$checkstcomm=(in_array($contextpage, array('prospectlist')) ? 1 : 0);
    +$arrayfields=array(
    +	's.rowid'=>array('label'=>"TechnicalID", 'checked'=>($conf->global->MAIN_SHOW_TECHNICAL_ID?1:0), 'enabled'=>($conf->global->MAIN_SHOW_TECHNICAL_ID?1:0)),
    +	's.nom'=>array('label'=>"ThirdPartyName", 'checked'=>1),
    +	's.name_alias'=>array('label'=>"AliasNameShort", 'checked'=>1),
    +	's.barcode'=>array('label'=>"Gencod", 'checked'=>1, 'enabled'=>(! empty($conf->barcode->enabled))),
    +	's.code_client'=>array('label'=>"CustomerCodeShort", 'checked'=>$checkedcustomercode),
    +	's.code_fournisseur'=>array('label'=>"SupplierCodeShort", 'checked'=>$checkedsuppliercode, 'enabled'=>(! empty($conf->fournisseur->enabled))),
    +	's.code_compta'=>array('label'=>"CustomerAccountancyCodeShort", 'checked'=>$checkedcustomeraccountcode),
    +	's.code_compta_fournisseur'=>array('label'=>"SupplierAccountancyCodeShort", 'checked'=>$checkedsupplieraccountcode, 'enabled'=>(! empty($conf->fournisseur->enabled))),
    +	's.town'=>array('label'=>"Town", 'checked'=>1),
    +	's.zip'=>array('label'=>"Zip", 'checked'=>1),
    +	'state.nom'=>array('label'=>"State", 'checked'=>0),
    +	'region.nom'=>array('label'=>"Region", 'checked'=>0),
    +	'country.code_iso'=>array('label'=>"Country", 'checked'=>0),
    +	's.email'=>array('label'=>"Email", 'checked'=>0),
    +	's.url'=>array('label'=>"Url", 'checked'=>0),
    +	's.phone'=>array('label'=>"Phone", 'checked'=>1),
    +	'typent.code'=>array('label'=>"ThirdPartyType", 'checked'=>$checkedtypetiers),
    +	's.siren'=>array('label'=>"ProfId1Short", 'checked'=>$checkedprofid1),
    +	's.siret'=>array('label'=>"ProfId2Short", 'checked'=>$checkedprofid2),
    +	's.ape'=>array('label'=>"ProfId3Short", 'checked'=>$checkedprofid3),
    +	's.idprof4'=>array('label'=>"ProfId4Short", 'checked'=>$checkedprofid4),
    +	's.idprof5'=>array('label'=>"ProfId5Short", 'checked'=>$checkedprofid5),
    +	's.idprof6'=>array('label'=>"ProfId6Short", 'checked'=>$checkedprofid6),
    +	's.tva_intra'=>array('label'=>"VATIntra", 'checked'=>0),
    +	'customerorsupplier'=>array('label'=>'Nature', 'checked'=>1),
    +	's.fk_prospectlevel'=>array('label'=>"ProspectLevelShort", 'checked'=>$checkprospectlevel),
    +	's.fk_stcomm'=>array('label'=>"StatusProsp", 'checked'=>$checkstcomm),
    +	's.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500),
    +	's.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500),
    +	's.status'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000),
    +	's.import_key'=>array('label'=>"ImportId", 'checked'=>0, 'position'=>1100),
    +);
    +// Extra fields
    +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
    +{
    +   foreach($extrafields->attribute_label as $key => $val)
    +   {
    +		if (! empty($extrafields->attribute_list[$key])) $arrayfields["ef.".$key]=array('label'=>$extrafields->attribute_label[$key], 'checked'=>(($extrafields->attribute_list[$key]<0)?0:1), 'position'=>$extrafields->attribute_pos[$key], 'enabled'=>(abs($extrafields->attribute_list[$key])!=3 && $extrafields->attribute_perms[$key]));
    +   }
    +}
    +
    +$object = new Societe($db);
    +
    +
    +/*
    + * Actions
    + */
    +
    +if (GETPOST('cancel','alpha')) { $action='list'; $massaction=''; }
    +if (! GETPOST('confirmmassaction','alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; }
    +
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('doActions',$parameters, $object, $action);    // Note that $action and $object may have been modified by some hooks
    +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
    +
    +if (empty($reshook))
    +{
    +	// Selection of new fields
    +	include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
    +
    +	// Did we click on purge search criteria ?
    +	if (GETPOST('button_removefilter_x','alpha') || GETPOST('button_removefilter.x','alpha') || GETPOST('button_removefilter','alpha')) // All tests are required to be compatible with all browsers
    +	{
    +		$search_id='';
    +		$search_nom='';
    +		$search_alias='';
    +		$search_categ_cus=0;
    +		$search_categ_sup=0;
    +		$search_sale='';
    +		$search_barcode="";
    +		$search_customer_code='';
    +		$search_supplier_code='';
    +		$search_account_customer_code='';
    +		$search_account_supplier_code='';
    +		$search_town="";
    +		$search_zip="";
    +		$search_state="";
    +		$search_country='';
    +		$search_email='';
    +		$search_phone='';
    +		$search_url='';
    +		$search_idprof1='';
    +		$search_idprof2='';
    +		$search_idprof3='';
    +		$search_idprof4='';
    +		$search_idprof5='';
    +		$search_idprof6='';
    +		$search_vat='';
    +		$search_type='';
    +		$search_type_thirdparty='';
    +		$search_status=-1;
    +		$search_stcomm='';
    +	 	$search_level_from='';
    +	 	$search_level_to='';
    +	 	$search_import_key='';
    +	 	$toselect='';
    +		$search_array_options=array();
    +	}
    +
    +	// Mass actions
    +	$objectclass='Societe';
    +	$objectlabel='ThirdParty';
    +	$permtoread = $user->rights->societe->lire;
    +	$permtodelete = $user->rights->societe->supprimer;
    +	$uploaddir = $conf->societe->dir_output;
    +	include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
    +
    +	if ($action == 'setstcomm')
    +	{
    +		$object = new Client($db);
    +		$result=$object->fetch(GETPOST('stcommsocid'));
    +		$object->stcomm_id=dol_getIdFromCode($db, GETPOST('stcomm','alpha'), 'c_stcomm');
    +		$result=$object->update($object->id, $user);
    +		if ($result < 0) setEventMessages($object->error,$object->errors,'errors');
    +
    +		$action='';
    +	}
    +}
    +
    +if ($search_status=='') $search_status=1; // always display active thirdparty first
    +
    +
    +
    +/*
    + * View
    + */
    +
    +/*
    + REM: Rules on permissions to see thirdparties
    + Internal or External user + No permission to see customers => See nothing
    + Internal user socid=0 + Permission to see ALL customers    => See all thirdparties
    + Internal user socid=0 + No permission to see ALL customers => See only thirdparties linked to user that are sale representative
    + External user socid=x + Permission to see ALL customers    => Can see only himself
    + External user socid=x + No permission to see ALL customers => Can see only himself
    + */
    +
    +$form=new Form($db);
    +$formother=new FormOther($db);
    +$companystatic=new Societe($db);
    +$formcompany=new FormCompany($db);
    +$prospectstatic=new Client($db);
    +$prospectstatic->client=2;
    +$prospectstatic->loadCacheOfProspStatus();
    +
    +
    +$title=$langs->trans("ListOfThirdParties");
    +if ($type == 'c' && (empty($search_type) || ($search_type == '1,3'))) $title=$langs->trans("ListOfCustomers");
    +if ($type == 'p' && (empty($search_type) || ($search_type == '2,3'))) $title=$langs->trans("ListOfProspects");
    +if ($type == 'f' && (empty($search_type) || ($search_type == '4'))) $title=$langs->trans("ListOfSuppliers");
    +
    +// If both parameters are set, search for everything BETWEEN them
    +if ($search_level_from != '' && $search_level_to != '')
    +{
    +	// Ensure that these parameters are numbers
    +	$search_level_from = (int) $search_level_from;
    +	$search_level_to = (int) $search_level_to;
    +
    +	// If from is greater than to, reverse orders
    +	if ($search_level_from > $search_level_to)
    +	{
    +		$tmp = $search_level_to;
    +		$search_level_to = $search_level_from;
    +		$search_level_from = $tmp;
    +	}
    +
    +	// Generate the SQL request
    +	$sortwhere = '(sortorder BETWEEN '.$search_level_from.' AND '.$search_level_to.') AS is_in_range';
    +}
    +// If only "from" parameter is set, search for everything GREATER THAN it
    +else if ($search_level_from != '')
    +{
    +	// Ensure that this parameter is a number
    +	$search_level_from = (int) $search_level_from;
    +
    +	// Generate the SQL request
    +	$sortwhere = '(sortorder >= '.$search_level_from.') AS is_in_range';
    +}
    +// If only "to" parameter is set, search for everything LOWER THAN it
    +else if ($search_level_to != '')
    +{
    +	// Ensure that this parameter is a number
    +	$search_level_to = (int) $search_level_to;
    +
    +	// Generate the SQL request
    +	$sortwhere = '(sortorder <= '.$search_level_to.') AS is_in_range';
    +}
    +// If no parameters are set, dont search for anything
    +else
    +{
    +	$sortwhere = '0 as is_in_range';
    +}
    +
    +// Select every potentiels, and note each potentiels which fit in search parameters
    +dol_syslog('societe/list.php',LOG_DEBUG);
    +$sql = "SELECT code, label, sortorder, ".$sortwhere;
    +$sql.= " FROM ".MAIN_DB_PREFIX."c_prospectlevel";
    +$sql.= " WHERE active > 0";
    +$sql.= " ORDER BY sortorder";
    +
    +$resql = $db->query($sql);
    +if ($resql)
    +{
    +	$tab_level = array();
    +	$search_levels = array();
    +
    +	while ($obj = $db->fetch_object($resql))
    +	{
    +		// Compute level text
    +		$level=$langs->trans($obj->code);
    +		if ($level == $obj->code) $level=$langs->trans($obj->label);
    +
    +		// Put it in the array sorted by sortorder
    +		$tab_level[$obj->sortorder] = $level;
    +
    +		// If this potentiel fit in parameters, add its code to the $search_levels array
    +		if ($obj->is_in_range == 1)
    +		{
    +			$search_levels[] = '"'.preg_replace('[^A-Za-z0-9_-]', '', $obj->code).'"';
    +		}
    +	}
    +
    +	// Implode the $search_levels array so that it can be use in a "IN (...)" where clause.
    +	// If no paramters was set, $search_levels will be empty
    +	$search_levels = implode(',', $search_levels);
    +}
    +else dol_print_error($db);
    +
    +$sql = "SELECT s.rowid, s.nom as name, s.name_alias, s.barcode, s.town, s.zip, s.datec, s.code_client, s.code_fournisseur, s.logo,";
    +$sql.= " st.libelle as stcomm, s.fk_stcomm as stcomm_id, s.fk_prospectlevel, s.prefix_comm, s.client, s.fournisseur, s.canvas, s.status as status,";
    +$sql.= " s.email, s.phone, s.url, s.siren as idprof1, s.siret as idprof2, s.ape as idprof3, s.idprof4 as idprof4, s.idprof5 as idprof5, s.idprof6 as idprof6, s.tva_intra, s.fk_pays,";
    +$sql.= " s.tms as date_update, s.datec as date_creation,";
    +$sql.= " s.code_compta,s.code_compta_fournisseur,";
    +$sql.= " typent.code as typent_code,";
    +$sql.= " state.code_departement as state_code, state.nom as state_name,";
    +$sql.= " region.code_region as region_code, region.nom as region_name";
    +// We'll need these fields in order to filter by sale (including the case where the user can only see his prospects)
    +if ($search_sale) $sql .= ", sc.fk_soc, sc.fk_user";
    +// We'll need these fields in order to filter by categ
    +if ($search_categ_cus) $sql .= ", cc.fk_categorie, cc.fk_soc";
    +if ($search_categ_sup) $sql .= ", cs.fk_categorie, cs.fk_soc";
    +// Add fields from extrafields
    +foreach ($extrafields->attribute_label as $key => $val) $sql.=($extrafields->attribute_type[$key] != 'separate' ? ",ef.".$key.' as options_'.$key : '');
    +// Add fields from hooks
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('printFieldListSelect',$parameters);    // Note that $action and $object may have been modified by hook
    +$sql.=$hookmanager->resPrint;
    +$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
    +if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe_extrafields as ef on (s.rowid = ef.fk_object)";
    +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_country as country on (country.rowid = s.fk_pays)";
    +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_typent as typent on (typent.id = s.fk_typent)";
    +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_departements as state on (state.rowid = s.fk_departement)";
    +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_regions as region on (region.	code_region = state.fk_region)";
    +// We'll need this table joined to the select in order to filter by categ
    +if (! empty($search_categ_cus)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_societe as cc ON s.rowid = cc.fk_soc"; // We'll need this table joined to the select in order to filter by categ
    +if (! empty($search_categ_sup)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_fournisseur as cs ON s.rowid = cs.fk_soc"; // We'll need this table joined to the select in order to filter by categ
    +$sql.= " ,".MAIN_DB_PREFIX."c_stcomm as st";
    +// We'll need this table joined to the select in order to filter by sale
    +if ($search_sale || (!$user->rights->societe->client->voir && !$socid)) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
    +$sql.= " WHERE s.fk_stcomm = st.id";
    +$sql.= " AND s.entity IN (".getEntity('societe').")";
    +if (! $user->rights->societe->client->voir && ! $socid)	$sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
    +if ($socid)                $sql.= " AND s.rowid = ".$socid;
    +if ($search_sale)          $sql.= " AND s.rowid = sc.fk_soc";        // Join for the needed table to filter by sale
    +if (! $user->rights->fournisseur->lire) $sql.=" AND (s.fournisseur <> 1 OR s.client <> 0)";    // client=0, fournisseur=0 must be visible
    +if ($search_sale)          $sql.= " AND sc.fk_user = ".$db->escape($search_sale);
    +if ($search_categ_cus > 0) $sql.= " AND cc.fk_categorie = ".$db->escape($search_categ_cus);
    +if ($search_categ_sup > 0) $sql.= " AND cs.fk_categorie = ".$db->escape($search_categ_sup);
    +if ($search_categ_cus == -2)   $sql.= " AND cc.fk_categorie IS NULL";
    +if ($search_categ_sup == -2)   $sql.= " AND cs.fk_categorie IS NULL";
    +
    +if ($search_all)           $sql.= natural_search(array_keys($fieldstosearchall), $search_all);
    +if (strlen($search_cti))   $sql.= natural_search('s.phone', $search_cti);
    +
    +if ($search_id > 0)        $sql.= natural_search("s.rowid",$search_id,1);
    +if ($search_nom)           $sql.= natural_search("s.nom",$search_nom);
    +if ($search_alias)         $sql.= natural_search("s.name_alias",$search_alias);
    +if ($search_nom_only)      $sql.= natural_search("s.nom",$search_nom_only);
    +if ($search_customer_code) $sql.= natural_search("s.code_client",$search_customer_code);
    +if ($search_supplier_code) $sql.= natural_search("s.code_fournisseur",$search_supplier_code);
    +if ($search_account_customer_code) $sql.= natural_search("s.code_compta",$search_account_customer_code);
    +if ($search_account_supplier_code) $sql.= natural_search("s.code_compta_fournisseur",$search_account_supplier_code);
    +if ($search_town)          $sql.= natural_search("s.town",$search_town);
    +if (strlen($search_zip))   $sql.= natural_search("s.zip",$search_zip);
    +if ($search_state)         $sql.= natural_search("state.nom",$search_state);
    +if ($search_region)         $sql.= natural_search("region.nom",$search_region);
    +if ($search_country)       $sql .= " AND s.fk_pays IN (".$search_country.')';
    +if ($search_email)         $sql.= natural_search("s.email",$search_email);
    +if (strlen($search_phone)) $sql.= natural_search("s.phone", $search_phone);
    +if ($search_url)           $sql.= natural_search("s.url",$search_url);
    +if (strlen($search_idprof1)) $sql.= natural_search("s.siren",$search_idprof1);
    +if (strlen($search_idprof2)) $sql.= natural_search("s.siret",$search_idprof2);
    +if (strlen($search_idprof3)) $sql.= natural_search("s.ape",$search_idprof3);
    +if (strlen($search_idprof4)) $sql.= natural_search("s.idprof4",$search_idprof4);
    +if (strlen($search_idprof5)) $sql.= natural_search("s.idprof5",$search_idprof5);
    +if (strlen($search_idprof6)) $sql.= natural_search("s.idprof6",$search_idprof6);
    +if (strlen($search_vat))     $sql.= natural_search("s.tva_intra",$search_vat);
    +// Filter on type of thirdparty
    +if ($search_type > 0 && in_array($search_type,array('1,3','2,3'))) $sql .= " AND s.client IN (".$db->escape($search_type).")";
    +if ($search_type > 0 && in_array($search_type,array('4')))         $sql .= " AND s.fournisseur = 1";
    +if ($search_type == '0') $sql .= " AND s.client = 0 AND s.fournisseur = 0";
    +if ($search_status!='' && $search_status >= 0) $sql .= " AND s.status = ".$db->escape($search_status);
    +if (!empty($conf->barcode->enabled) && $search_barcode) $sql.= natural_search("s.barcode", $search_barcode);
    +if ($search_type_thirdparty) $sql .= " AND s.fk_typent IN (".$search_type_thirdparty.')';
    +if ($search_levels)  $sql .= " AND s.fk_prospectlevel IN (".$search_levels.')';
    +if ($search_stcomm != '' && $search_stcomm != -2) $sql.= natural_search("s.fk_stcomm",$search_stcomm,2);
    +if ($search_import_key)    $sql.= natural_search("s.import_key",$search_import_key);
    +// Add where from extra fields
    +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
    +
    +// Add where from hooks
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters);    // Note that $action and $object may have been modified by hook
    +$sql.=$hookmanager->resPrint;
    +
    +$sql.= $db->order($sortfield,$sortorder);
    +
    +// Count total nb of records
    +$nbtotalofrecords = '';
    +if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
    +{
    +	$result = $db->query($sql);
    +	$nbtotalofrecords = $db->num_rows($result);
    +}
    +
    +$sql.= $db->plimit($limit+1, $offset);
    +
    +$resql = $db->query($sql);
    +if (! $resql)
    +{
    +	dol_print_error($db);
    +	exit;
    +}
    +
    +$num = $db->num_rows($resql);
    +
    +$arrayofselected=is_array($toselect)?$toselect:array();
    +
    +if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && ($search_all != '' || $search_cti != '') && $action != 'list')
    +{
    +	$obj = $db->fetch_object($resql);
    +	$id = $obj->rowid;
    +	header("Location: ".DOL_URL_ROOT.'/societe/card.php?socid='.$id);
    +	exit;
    +}
    +
    +$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas';
    +llxHeader('',$langs->trans("ThirdParty"),$help_url);
    +
    +$param='';
    +if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
    +if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
    +if ($search_all != '')     $param = "&sall=".urlencode($search_all);
    +if ($sall != '')           $param .= "&sall=".urlencode($sall);
    +if ($search_categ_cus > 0) $param.='&search_categ_cus='.urlencode($search_categ_cus);
    +if ($search_categ_sup > 0) $param.='&search_categ_sup='.urlencode($search_categ_sup);
    +if ($search_sale > 0)	   $param.='&search_sale='.urlencode($search_sale);
    +if ($search_id > 0)        $param.= "&search_id=".urlencode($search_id);
    +if ($search_nom != '')     $param.= "&search_nom=".urlencode($search_nom);
    +if ($search_alias != '')   $param.= "&search_alias=".urlencode($search_alias);
    +if ($search_town != '')    $param.= "&search_town=".urlencode($search_town);
    +if ($search_zip != '')     $param.= "&search_zip=".urlencode($search_zip);
    +if ($search_phone != '')   $param.= "&search_phone=".urlencode($search_phone);
    +if ($search_email != '')   $param.= "&search_email=".urlencode($search_email);
    +if ($search_url != '')     $param.= "&search_url=".urlencode($search_url);
    +if ($search_state != '')   $param.= "&search_state=".urlencode($search_state);
    +if ($search_country != '') $param.= "&search_country=".urlencode($search_country);
    +if ($search_customer_code != '') $param.= "&search_customer_code=".urlencode($search_customer_code);
    +if ($search_supplier_code != '') $param.= "&search_supplier_code=".urlencode($search_supplier_code);
    +if ($search_account_customer_code != '') $param.= "&search_account_customer_code=".urlencode($search_account_customer_code);
    +if ($search_account_supplier_code != '') $param.= "&search_account_supplier_code=".urlencode($search_account_supplier_code);
    +if ($search_barcode != '') $param.= "&search_barcode=".urlencode($search_barcode);
    +if ($search_idprof1 != '') $param.= '&search_idprof1='.urlencode($search_idprof1);
    +if ($search_idprof2 != '') $param.= '&search_idprof2='.urlencode($search_idprof2);
    +if ($search_idprof3 != '') $param.= '&search_idprof3='.urlencode($search_idprof3);
    +if ($search_idprof4 != '') $param.= '&search_idprof4='.urlencode($search_idprof4);
    +if ($search_idprof5 != '') $param.= '&search_idprof5='.urlencode($search_idprof5);
    +if ($search_idprof6 != '') $param.= '&search_idprof6='.urlencode($search_idprof6);
    +if ($search_vat != '')     $param.= '&search_vat='.urlencode($search_vat);
    +if ($search_type_thirdparty != '')    $param.='&search_type_thirdparty='.urlencode($search_type_thirdparty);
    +if ($search_type != '')    $param.='&search_type='.urlencode($search_type);
    +if ($optioncss != '')      $param.='&optioncss='.urlencode($optioncss);
    +if ($search_status != '')  $param.='&search_status='.urlencode($search_status);
    +if ($search_stcomm != '')  $param.='&search_stcomm='.urlencode($search_stcomm);
    +if ($search_level_from != '') $param.='&search_level_from='.urlencode($search_level_from);
    +if ($search_level_to != '')   $param.='&search_level_to='.urlencode($search_level_to);
    +if ($search_import_key != '') $param.='&search_import_key='.urlencode($search_import_key);
    +if ($type != '') $param.='&type='.urlencode($type);
    +// Add $param from extra fields
    +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
    +
    +// Show delete result message
    +if (GETPOST('delsoc'))
    +{
    +	setEventMessages($langs->trans("CompanyDeleted",GETPOST('delsoc')), null, 'mesgs');
    +}
    +
    +// List of mass actions available
    +$arrayofmassactions =  array(
    +	'presend'=>$langs->trans("SendByMail"),
    +//    'builddoc'=>$langs->trans("PDFMerge"),
    +);
    +//if($user->rights->societe->creer) $arrayofmassactions['createbills']=$langs->trans("CreateInvoiceForThisCustomer");
    +if ($user->rights->societe->supprimer) $arrayofmassactions['predelete']=$langs->trans("Delete");
    +if (GETPOST('nomassaction','int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array();
    +$massactionbutton=$form->selectMassAction('', $arrayofmassactions);
    +
    +print '<form method="post" action="'.$_SERVER["PHP_SELF"].'" name="formfilter">';
    +if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
    +print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    +print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
    +print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
    +print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
    +print '<input type="hidden" name="page" value="'.$page.'">';
    +
    +print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_companies', 0, '', '', $limit);
    +
    +$langs->load("other");
    +$textprofid=array();
    +foreach(array(1,2,3,4,5,6) as $key)
    +{
    +	$label=$langs->transnoentities("ProfId".$key.$mysoc->country_code);
    +	$textprofid[$key]='';
    +	if ($label != "ProfId".$key.$mysoc->country_code)
    +	{	// Get only text between ()
    +		if (preg_match('/\((.*)\)/i',$label,$reg)) $label=$reg[1];
    +		$textprofid[$key]=$langs->trans("ProfIdShortDesc",$key,$mysoc->country_code,$label);
    +	}
    +}
    +
    +$topicmail="Information";
    +$modelmail="thirdparty";
    +$objecttmp=new Societe($db);
    +$trackid='thi'.$object->id;
    +include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
    +
    +if ($search_all)
    +{
    +	foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
    +	print $langs->trans("FilterOnInto", $search_all) . join(', ',$fieldstosearchall);
    +}
    +
    +// Filter on categories
    +$moreforfilter='';
    +if (empty($type) || $type == 'c' || $type == 'p')
    +{
    +	if (! empty($conf->categorie->enabled))
    +	{
    +		require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
    +		$moreforfilter.='<div class="divsearchfield">';
    +	 	$moreforfilter.=$langs->trans('CustomersProspectsCategoriesShort').': ';
    +		$moreforfilter.=$formother->select_categories('customer', $search_categ_cus, 'search_categ_cus', 1, $langs->trans('CustomersProspectsCategoriesShort'));
    +	 	$moreforfilter.='</div>';
    +	}
    +}
    +if (empty($type) || $type == 'f')
    +{
    +	if (! empty($conf->categorie->enabled))
    +	{
    +		require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
    +		$moreforfilter.='<div class="divsearchfield">';
    +		$moreforfilter.=$langs->trans('SuppliersCategoriesShort').': ';
    +		$moreforfilter.=$formother->select_categories('supplier',$search_categ_sup,'search_categ_sup',1);
    +		$moreforfilter.='</div>';
    +	}
    +}
    +
    +// If the user can view prospects other than his'
    +if ($user->rights->societe->client->voir || $socid)
    +{
    + 	$moreforfilter.='<div class="divsearchfield">';
    + 	$moreforfilter.=$langs->trans('SalesRepresentatives'). ': ';
    +	$moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user, 0, 1, 'maxwidth300');
    +	$moreforfilter.='</div>';
    +}
    +if ($moreforfilter)
    +{
    +	print '<div class="liste_titre liste_titre_bydiv centpercent">';
    +	print $moreforfilter;
    +	$parameters=array('type'=>$type);
    +	$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters);    // Note that $action and $object may have been modified by hook
    +	print $hookmanager->resPrint;
    +	print '</div>';
    +}
    +
    +$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
    +$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
    +if ($massactionbutton) $selectedfields.=$form->showCheckAddButtons('checkforselect', 1);
    +
    +if (empty($arrayfields['customerorsupplier']['checked'])) print '<input type="hidden" name="type" value="'.$type.'">';
    +
    +print '<div class="div-table-responsive">';
    +print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
    +
    +// Fields title search
    +print '<tr class="liste_titre_filter">';
    +if (! empty($arrayfields['s.rowid']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" type="text" name="search_id" size="1" value="'.dol_escape_htmltag($search_id).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.nom']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	if (! empty($search_nom_only) && empty($search_nom)) $search_nom=$search_nom_only;
    +	print '<input class="flat searchstring" type="text" name="search_nom" size="8" value="'.dol_escape_htmltag($search_nom).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.name_alias']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" type="text" name="search_alias" size="8" value="'.dol_escape_htmltag($search_alias).'">';
    +	print '</td>';
    +}
    +// Barcode
    +if (! empty($arrayfields['s.barcode']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" type="text" name="search_barcode" size="6" value="'.dol_escape_htmltag($search_barcode).'">';
    +	print '</td>';
    +}
    +// Customer code
    +if (! empty($arrayfields['s.code_client']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="8" type="text" name="search_customer_code" value="'.dol_escape_htmltag($search_customer_code).'">';
    +	print '</td>';
    +}
    +// Supplier code
    +if (! empty($arrayfields['s.code_fournisseur']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="8" type="text" name="search_supplier_code" value="'.dol_escape_htmltag($search_supplier_code).'">';
    +	print '</td>';
    +}
    +// Account Customer code
    +if (! empty($arrayfields['s.code_compta']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="8" type="text" name="search_account_customer_code" value="'.dol_escape_htmltag($search_account_customer_code).'">';
    +	print '</td>';
    +}
    +// Account Supplier code
    +if (! empty($arrayfields['s.code_compta_fournisseur']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat" size="8" type="text" name="search_account_supplier_code" value="'.dol_escape_htmltag($search_account_supplier_code).'">';
    +	print '</td>';
    +}
    +// Town
    +if (! empty($arrayfields['s.town']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="6" type="text" name="search_town" value="'.dol_escape_htmltag($search_town).'">';
    +	print '</td>';
    +}
    +// Zip
    +if (! empty($arrayfields['s.zip']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_zip" value="'.dol_escape_htmltag($search_zip).'">';
    +	print '</td>';
    +}
    +// State
    +if (! empty($arrayfields['state.nom']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_state" value="'.dol_escape_htmltag($search_state).'">';
    +	print '</td>';
    +}
    +// Region
    +if (! empty($arrayfields['region.nom']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_region" value="'.dol_escape_htmltag($search_region).'">';
    +	print '</td>';
    +}
    +// Country
    +if (! empty($arrayfields['country.code_iso']['checked']))
    +{
    +	print '<td class="liste_titre" align="center">';
    +	print $form->select_country($search_country,'search_country','',0,'maxwidth100');
    +	print '</td>';
    +}
    +// Company type
    +if (! empty($arrayfields['typent.code']['checked']))
    +{
    +	print '<td class="liste_titre maxwidthonsmartphone" align="center">';
    +	print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 0, 0, 0, '', 0, 0, 0, (empty($conf->global->SOCIETE_SORT_ON_TYPEENT)?'ASC':$conf->global->SOCIETE_SORT_ON_TYPEENT));
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.email']['checked']))
    +{
    +	// Email
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchemail" size="4" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.phone']['checked']))
    +{
    +	// Phone
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_phone" value="'.dol_escape_htmltag($search_phone).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.url']['checked']))
    +{
    +	// Url
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_url" value="'.dol_escape_htmltag($search_url).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.siren']['checked']))
    +{
    +	// IdProf1
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_idprof1" value="'.dol_escape_htmltag($search_idprof1).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.siret']['checked']))
    +{
    +	// IdProf2
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_idprof2" value="'.dol_escape_htmltag($search_idprof2).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.ape']['checked']))
    +{
    +	// IdProf3
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_idprof3" value="'.dol_escape_htmltag($search_idprof3).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.idprof4']['checked']))
    +{
    +	// IdProf4
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_idprof4" value="'.dol_escape_htmltag($search_idprof4).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.idprof5']['checked']))
    +{
    +	// IdProf5
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_idprof5" value="'.dol_escape_htmltag($search_idprof5).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.idprof6']['checked']))
    +{
    +	// IdProf6
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_idprof6" value="'.dol_escape_htmltag($search_idprof6).'">';
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.tva_intra']['checked']))
    +{
    +	// Vat number
    +	print '<td class="liste_titre">';
    +	print '<input class="flat searchstring" size="4" type="text" name="search_vat" value="'.dol_escape_htmltag($search_vat).'">';
    +	print '</td>';
    +}
    +
    +// Type (customer/prospect/supplier)
    +if (! empty($arrayfields['customerorsupplier']['checked']))
    +{
    +	print '<td class="liste_titre maxwidthonsmartphone" align="middle">';
    +	if ($type != '') print '<input type="hidden" name="type" value="'.$type.'">';
    +	print '<select class="flat" name="search_type">';
    +	print '<option value="-1"'.($search_type==''?' selected':'').'>&nbsp;</option>';
    +	if (empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) print '<option value="1,3"'.($search_type=='1,3'?' selected':'').'>'.$langs->trans('Customer').'</option>';
    +	if (empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) print '<option value="2,3"'.($search_type=='2,3'?' selected':'').'>'.$langs->trans('Prospect').'</option>';
    +	//if (empty($conf->global->SOCIETE_DISABLE_PROSPECTS)) print '<option value="3"'.($search_type=='3'?' selected':'').'>'.$langs->trans('ProspectCustomer').'</option>';
    +	print '<option value="4"'.($search_type=='4'?' selected':'').'>'.$langs->trans('Supplier').'</option>';
    +	print '<option value="0"'.($search_type=='0'?' selected':'').'>'.$langs->trans('Others').'</option>';
    +	print '</select></td>';
    +}
    +if (! empty($arrayfields['s.fk_prospectlevel']['checked']))
    +{
    +	// Prospect level
    + 	print '<td class="liste_titre" align="center">';
    + 	$options_from = '<option value="">&nbsp;</option>';	 	// Generate in $options_from the list of each option sorted
    + 	foreach ($tab_level as $tab_level_sortorder => $tab_level_label)
    + 	{
    + 		$options_from .= '<option value="'.$tab_level_sortorder.'"'.($search_level_from == $tab_level_sortorder ? ' selected':'').'>';
    + 		$options_from .= $langs->trans($tab_level_label);
    + 		$options_from .= '</option>';
    + 	}
    + 	array_reverse($tab_level, true);	// Reverse the list
    + 	$options_to = '<option value="">&nbsp;</option>';		// Generate in $options_to the list of each option sorted in the reversed order
    + 	foreach ($tab_level as $tab_level_sortorder => $tab_level_label)
    + 	{
    + 		$options_to .= '<option value="'.$tab_level_sortorder.'"'.($search_level_to == $tab_level_sortorder ? ' selected':'').'>';
    + 		$options_to .= $langs->trans($tab_level_label);
    + 		$options_to .= '</option>';
    + 	}
    +
    +	// Print these two select
    + 	print $langs->trans("From").' <select class="flat" name="search_level_from">'.$options_from.'</select>';
    + 	print ' ';
    + 	print $langs->trans("to").' <select class="flat" name="search_level_to">'.$options_to.'</select>';
    +
    +	print '</td>';
    +}
    +
    +if (! empty($arrayfields['s.fk_stcomm']['checked']))
    +{
    +	// Prospect status
    +	print '<td class="liste_titre maxwidthonsmartphone" align="center">';
    +	$arraystcomm=array();
    +	foreach($prospectstatic->cacheprospectstatus as $key => $val)
    +	{
    +		$arraystcomm[$val['id']]=($langs->trans("StatusProspect".$val['id']) != "StatusProspect".$val['id'] ? $langs->trans("StatusProspect".$val['id']) : $val['label']);
    +	}
    +	print $form->selectarray('search_stcomm', $arraystcomm, $search_stcomm, -2);
    +	print '</td>';
    +}
    +// Extra fields
    +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
    +
    +// Fields from hook
    +$parameters=array('arrayfields'=>$arrayfields);
    +$reshook=$hookmanager->executeHooks('printFieldListOption',$parameters);    // Note that $action and $object may have been modified by hook
    +print $hookmanager->resPrint;
    +// Date creation
    +if (! empty($arrayfields['s.datec']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '</td>';
    +}
    +// Date modification
    +if (! empty($arrayfields['s.tms']['checked']))
    +{
    +	print '<td class="liste_titre">';
    +	print '</td>';
    +}
    +// Status
    +if (! empty($arrayfields['s.status']['checked']))
    +{
    +	print '<td class="liste_titre maxwidthonsmartphone center">';
    +	print $form->selectarray('search_status', array('0'=>$langs->trans('ActivityCeased'),'1'=>$langs->trans('InActivity')), $search_status, 1);
    +	print '</td>';
    +}
    +if (! empty($arrayfields['s.import_key']['checked']))
    +{
    +	print '<td class="liste_titre center">';
    +	print '<input class="flat searchstring" type="text" name="search_import_key" size="3" value="'.dol_escape_htmltag($search_import_key).'">';
    +	print '</td>';
    +}
    +// Action column
    +print '<td class="liste_titre" align="right">';
    +$searchpicto=$form->showFilterButtons();
    +print $searchpicto;
    +print '</td>';
    +
    +print "</tr>\n";
    +
    +print '<tr class="liste_titre">';
    +if (! empty($arrayfields['s.rowid']['checked']))                   print_liste_field_titre($arrayfields['s.rowid']['label'], $_SERVER["PHP_SELF"],"s.rowid","",$param,"",$sortfield,$sortorder);
    +if (! empty($arrayfields['s.nom']['checked']))                     print_liste_field_titre($arrayfields['s.nom']['label'], $_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder);
    +if (! empty($arrayfields['s.name_alias']['checked']))              print_liste_field_titre($arrayfields['s.name_alias']['label'], $_SERVER["PHP_SELF"],"s.name_alias","",$param,"",$sortfield,$sortorder);
    +if (! empty($arrayfields['s.barcode']['checked']))                 print_liste_field_titre($arrayfields['s.barcode']['label'], $_SERVER["PHP_SELF"], "s.barcode",$param,'','',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.code_client']['checked']))             print_liste_field_titre($arrayfields['s.code_client']['label'],$_SERVER["PHP_SELF"],"s.code_client","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.code_fournisseur']['checked']))        print_liste_field_titre($arrayfields['s.code_fournisseur']['label'],$_SERVER["PHP_SELF"],"s.code_fournisseur","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.code_compta']['checked']))             print_liste_field_titre($arrayfields['s.code_compta']['label'],$_SERVER["PHP_SELF"],"s.code_compta","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.code_compta_fournisseur']['checked'])) print_liste_field_titre($arrayfields['s.code_compta_fournisseur']['label'],$_SERVER["PHP_SELF"],"s.code_compta_fournisseur","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.town']['checked']))           print_liste_field_titre($arrayfields['s.town']['label'],$_SERVER["PHP_SELF"],"s.town","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.zip']['checked']))            print_liste_field_titre($arrayfields['s.zip']['label'],$_SERVER["PHP_SELF"],"s.zip","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['state.nom']['checked']))        print_liste_field_titre($arrayfields['state.nom']['label'],$_SERVER["PHP_SELF"],"state.nom","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['region.nom']['checked']))       print_liste_field_titre($arrayfields['region.nom']['label'],$_SERVER["PHP_SELF"],"region.nom","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['country.code_iso']['checked'])) print_liste_field_titre($arrayfields['country.code_iso']['label'],$_SERVER["PHP_SELF"],"country.code_iso","",$param,'align="center"',$sortfield,$sortorder);
    +if (! empty($arrayfields['typent.code']['checked']))      print_liste_field_titre($arrayfields['typent.code']['label'],$_SERVER["PHP_SELF"],"typent.code","",$param,'align="center"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.email']['checked']))          print_liste_field_titre($arrayfields['s.email']['label'],$_SERVER["PHP_SELF"],"s.email","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.phone']['checked']))          print_liste_field_titre($arrayfields['s.phone']['label'],$_SERVER["PHP_SELF"],"s.phone","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.url']['checked']))            print_liste_field_titre($arrayfields['s.url']['label'],$_SERVER["PHP_SELF"],"s.url","",$param,'',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.siren']['checked']))          print_liste_field_titre($form->textwithpicto($langs->trans("ProfId1Short"),$textprofid[1],1,0),$_SERVER["PHP_SELF"],"s.siren","",$param,'class="nowrap"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.siret']['checked']))          print_liste_field_titre($form->textwithpicto($langs->trans("ProfId2Short"),$textprofid[2],1,0),$_SERVER["PHP_SELF"],"s.siret","",$param,'class="nowrap"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.ape']['checked']))            print_liste_field_titre($form->textwithpicto($langs->trans("ProfId3Short"),$textprofid[3],1,0),$_SERVER["PHP_SELF"],"s.ape","",$param,'class="nowrap"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.idprof4']['checked']))        print_liste_field_titre($form->textwithpicto($langs->trans("ProfId4Short"),$textprofid[4],1,0),$_SERVER["PHP_SELF"],"s.idprof4","",$param,'class="nowrap"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.idprof5']['checked']))        print_liste_field_titre($form->textwithpicto($langs->trans("ProfId5Short"),$textprofid[4],1,0),$_SERVER["PHP_SELF"],"s.idprof5","",$param,'class="nowrap"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.idprof6']['checked']))        print_liste_field_titre($form->textwithpicto($langs->trans("ProfId6Short"),$textprofid[4],1,0),$_SERVER["PHP_SELF"],"s.idprof6","",$param,'class="nowrap"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.tva_intra']['checked']))      print_liste_field_titre($arrayfields['s.tva_intra']['label'],$_SERVER["PHP_SELF"],"s.tva_intra","",$param,'class="nowrap"',$sortfield,$sortorder);
    +if (! empty($arrayfields['customerorsupplier']['checked']))        print_liste_field_titre('');   // type of customer
    +if (! empty($arrayfields['s.fk_prospectlevel']['checked']))        print_liste_field_titre($arrayfields['s.fk_prospectlevel']['label'],$_SERVER["PHP_SELF"],"s.fk_prospectlevel","",$param,'align="center"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.fk_stcomm']['checked']))               print_liste_field_titre($arrayfields['s.fk_stcomm']['label'],$_SERVER["PHP_SELF"],"s.fk_stcomm","",$param,'align="center"',$sortfield,$sortorder);
    +// Extra fields
    +include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
    +// Hook fields
    +$parameters=array('arrayfields'=>$arrayfields,'param'=>$param,'sortfield'=>$sortfield,'sortorder'=>$sortorder);
    +$reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters);    // Note that $action and $object may have been modified by hook
    +print $hookmanager->resPrint;
    +if (! empty($arrayfields['s.datec']['checked']))      print_liste_field_titre($arrayfields['s.datec']['label'],$_SERVER["PHP_SELF"],"s.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.tms']['checked']))        print_liste_field_titre($arrayfields['s.tms']['label'],$_SERVER["PHP_SELF"],"s.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.status']['checked']))     print_liste_field_titre($arrayfields['s.status']['label'],$_SERVER["PHP_SELF"],"s.status","",$param,'align="center"',$sortfield,$sortorder);
    +if (! empty($arrayfields['s.import_key']['checked'])) print_liste_field_titre($arrayfields['s.import_key']['label'],$_SERVER["PHP_SELF"],"s.import_key","",$param,'align="center"',$sortfield,$sortorder);
    +print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="center"',$sortfield,$sortorder,'maxwidthsearch ');
    +print "</tr>\n";
    +
    +
    +$i = 0;
    +$totalarray=array();
    +while ($i < min($num, $limit))
    +{
    +	$obj = $db->fetch_object($resql);
    +
    +	$companystatic->id=$obj->rowid;
    +	$companystatic->name=$obj->name;
    +	$companystatic->name_alias=$obj->name_alias;
    +	$companystatic->logo=$obj->logo;
    +	$companystatic->canvas=$obj->canvas;
    +	$companystatic->client=$obj->client;
    +	$companystatic->status=$obj->status;
    +	$companystatic->email=$obj->email;
    +	$companystatic->fournisseur=$obj->fournisseur;
    +	$companystatic->code_client=$obj->code_client;
    +	$companystatic->code_fournisseur=$obj->code_fournisseur;
    +
    +	$companystatic->code_compta_client=$obj->code_compta;
    +	$companystatic->code_compta_fournisseur=$obj->code_compta_fournisseur;
    +
    +   	$companystatic->fk_prospectlevel=$obj->fk_prospectlevel;
    +
    +	print '<tr class="oddeven" onclick="location.href=\'customers.php?action=change&idcustomer='.$obj->rowid.'&place='.$place.'\'">';
    +	if (! empty($arrayfields['s.rowid']['checked']))
    +	{
    +		print '<td class="tdoverflowmax50">';
    +		print $obj->rowid;
    +		print "</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.nom']['checked']))
    +	{
    +		$savalias = $obj->name_alias;
    +		if (! empty($arrayfields['s.name_alias']['checked'])) $companystatic->name_alias='';
    +		print '<td class="tdoverflowmax200">';
    +		print $obj->name;
    +		print "</td>\n";
    +        if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.name_alias']['checked']))
    +	{
    +		print '<td class="tdoverflowmax200">';
    +		print $companystatic->name_alias;
    +		print "</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Barcode
    +	if (! empty($arrayfields['s.barcode']['checked']))
    +	{
    +		print '<td>'.$obj->barcode.'</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Customer code
    +	if (! empty($arrayfields['s.code_client']['checked']))
    +	{
    +		print '<td>'.$obj->code_client.'</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Supplier code
    +	if (! empty($arrayfields['s.code_fournisseur']['checked']))
    +	{
    +		print '<td>'.$obj->code_fournisseur.'</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Account customer code
    +	if (! empty($arrayfields['s.code_compta']['checked']))
    +	{
    +		print '<td>'.$obj->code_compta.'</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Account supplier code
    +	if (! empty($arrayfields['s.code_compta_fournisseur']['checked']))
    +	{
    +		print '<td>'.$obj->code_compta_fournisseur.'</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Town
    +	if (! empty($arrayfields['s.town']['checked']))
    +	{
    +		print "<td>".$obj->town."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Zip
    +	if (! empty($arrayfields['s.zip']['checked']))
    +	{
    +		print "<td>".$obj->zip."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// State
    +	if (! empty($arrayfields['state.nom']['checked']))
    +	{
    +		print "<td>".$obj->state_name."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Region
    +	if (! empty($arrayfields['region.nom']['checked']))
    +	{
    +		print "<td>".$obj->region_name."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Country
    +	if (! empty($arrayfields['country.code_iso']['checked']))
    +	{
    +		print '<td align="center">';
    +		$tmparray=getCountry($obj->fk_pays,'all');
    +		print $tmparray['label'];
    +		print '</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Type ent
    +	if (! empty($arrayfields['typent.code']['checked']))
    +	{
    +		print '<td align="center">';
    +		if (! is_array($typenArray) || count($typenArray)==0) $typenArray = $formcompany->typent_array(1);
    +		print $typenArray[$obj->typent_code];
    +		print '</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.email']['checked']))
    +	{
    +		print "<td>".$obj->email."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.phone']['checked']))
    +	{
    +		print "<td>".$obj->phone."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.url']['checked']))
    +	{
    +		print "<td>".$obj->url."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.siren']['checked']))
    +	{
    +		print "<td>".$obj->idprof1."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.siret']['checked']))
    +	{
    +		print "<td>".$obj->idprof2."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.ape']['checked']))
    +	{
    +		print "<td>".$obj->idprof3."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.idprof4']['checked']))
    +	{
    +		print "<td>".$obj->idprof4."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.idprof5']['checked']))
    +	{
    +		print "<td>".$obj->idprof5."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.idprof6']['checked']))
    +	{
    +		print "<td>".$obj->idprof6."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.tva_intra']['checked']))
    +	{
    +		print "<td>".$obj->tva_intra."</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Type
    +	if (! empty($arrayfields['customerorsupplier']['checked']))
    +	{
    +		print '<td align="center">';
    +		$s='';
    +		if (($obj->client==1 || $obj->client==3) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS))
    +		{
    +	  		$companystatic->name=$langs->trans("Customer");
    +	  		$companystatic->name_alias='';
    +			$s.=$companystatic->getNomUrl(0,'customer',0,1);
    +		}
    +		if (($obj->client==2 || $obj->client==3) && empty($conf->global->SOCIETE_DISABLE_PROSPECTS))
    +		{
    +			if ($s) $s.=" / ";
    +			$companystatic->name=$langs->trans("Prospect");
    +	  		$companystatic->name_alias='';
    +			$s.=$companystatic->getNomUrl(0,'prospect',0,1);
    +		}
    +		if (! empty($conf->fournisseur->enabled) && $obj->fournisseur)
    +		{
    +			if ($s) $s.=" / ";
    +			$companystatic->name=$langs->trans("Supplier");
    +	  		$companystatic->name_alias='';
    +			$s.=$companystatic->getNomUrl(0,'supplier',0,1);
    +		}
    +		print $s;
    +		print '</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +
    +	if (! empty($arrayfields['s.fk_prospectlevel']['checked']))
    +	{
    +		// Prospect level
    +		print '<td align="center">';
    +		print $companystatic->getLibProspLevel();
    +		print "</td>";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +
    +	if (! empty($arrayfields['s.fk_stcomm']['checked']))
    +	{
    +		// Prospect status
    +		print '<td align="center" class="nowrap"><div class="nowrap">';
    +		print '<div class="inline-block">'.$companystatic->LibProspCommStatut($obj->stcomm_id,2,$prospectstatic->cacheprospectstatus[$obj->stcomm_id]['label']);
    +		print '</div> - <div class="inline-block">';
    +		foreach($prospectstatic->cacheprospectstatus as $key => $val)
    +		{
    +			$titlealt='default';
    +			if (! empty($val['code']) && ! in_array($val['code'], array('ST_NO', 'ST_NEVER', 'ST_TODO', 'ST_PEND', 'ST_DONE'))) $titlealt=$val['label'];
    +			if ($obj->stcomm_id != $val['id']) print '<a class="pictosubstatus" href="'.$_SERVER["PHP_SELF"].'?stcommsocid='.$obj->rowid.'&stcomm='.$val['code'].'&action=setstcomm'.$param.($page?'&page='.urlencode($page):'').'">'.img_action($titlealt,$val['code']).'</a>';
    +		}
    +		print '</div></div></td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Extra fields
    +	include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
    +	// Fields from hook
    +	$parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj);
    +	$reshook=$hookmanager->executeHooks('printFieldListValue',$parameters);    // Note that $action and $object may have been modified by hook
    +	print $hookmanager->resPrint;
    +	// Date creation
    +	if (! empty($arrayfields['s.datec']['checked']))
    +	{
    +		print '<td align="center" class="nowrap">';
    +		print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser');
    +		print '</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Date modification
    +	if (! empty($arrayfields['s.tms']['checked']))
    +	{
    +		print '<td align="center" class="nowrap">';
    +		print dol_print_date($db->jdate($obj->date_update), 'dayhour', 'tzuser');
    +		print '</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	// Status
    +	if (! empty($arrayfields['s.status']['checked']))
    +	{
    +		print '<td align="center" class="nowrap">'.$companystatic->getLibStatut(3).'</td>';
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +	if (! empty($arrayfields['s.import_key']['checked']))
    +	{
    +		print '<td class="tdoverflowmax100">';
    +		print $obj->import_key;
    +		print "</td>\n";
    +		if (! $i) $totalarray['nbfield']++;
    +	}
    +
    +	// Action column
    +	print '<td class="nowrap" align="center">';
    +	if ($massactionbutton || $massaction)   // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
    +	{
    +		$selected=0;
    +		if (in_array($obj->rowid, $arrayofselected)) $selected=1;
    +		print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected?' checked="checked"':'').'>';
    +	}
    +	print '</td>';
    +	if (! $i) $totalarray['nbfield']++;
    +
    +	print '</tr>'."\n";
    +	$i++;
    +}
    +
    +$db->free($resql);
    +
    +$parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql);
    +$reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters);    // Note that $action and $object may have been modified by hook
    +print $hookmanager->resPrint;
    +
    +print "</table>";
    +print "</div>";
    +
    +print '</form>';
    +
    +llxFooter();
    +$db->close();
    diff --git a/htdocs/takepos/dev/img/README.md b/htdocs/takepos/dev/img/README.md
    new file mode 100644
    index 00000000000..5cd4c76d010
    --- /dev/null
    +++ b/htdocs/takepos/dev/img/README.md
    @@ -0,0 +1,53 @@
    +Source images
    +=============
    +
    +Used to generate icons and publication assets.
    +
    +Icons
    +-----
    +
    +### Dolibarr
    +
    +These resides in the [/img](../../img) directory.
    +
    +#### Small
    +
    +Required.
    +Name must begin by ```object_```.
    +
    +- Sample:  ![object_takepos.png](../../img/object_takepos.png) [object_takepos.png](../../img/object_takepos.png)
    +- Size: 14×14 pixels
    +- Type: PNG
    +
    +#### Large
    +
    +Optional.
    +
    +- Sample: ![takepos.png](../../img/takepos.png) [takepos.png](../../img/takepos.png)
    +- Size: 32×32 pixels
    +- Type: PNG
    +
    +### Dolistore
    +
    +Designed to fit a 512×512 icon + publisher branding.
    +
    +- Size: 704×704
    +- Type: PNG
    +
    +Export to 512×512
    +
    +### Transifex
    +
    +- Size: 96×96
    +- Type: PNG
    +
    +### Others
    +
    +To be on the safe side, you may also want to generate all popular sizes:
    +- 16×16
    +- 32×32
    +- 48×48
    +- 64×64
    +- 128×128
    +- 256×256
    +- 512×512
    diff --git a/htdocs/takepos/dev/img/gfdl-129x44.png b/htdocs/takepos/dev/img/gfdl-129x44.png
    new file mode 100644
    index 00000000000..f2bacfd179a
    Binary files /dev/null and b/htdocs/takepos/dev/img/gfdl-129x44.png differ
    diff --git a/htdocs/takepos/dev/img/gfdl-66x23.png b/htdocs/takepos/dev/img/gfdl-66x23.png
    new file mode 100644
    index 00000000000..b43479bf3c8
    Binary files /dev/null and b/htdocs/takepos/dev/img/gfdl-66x23.png differ
    diff --git a/htdocs/takepos/dev/img/gfdl-logo.svg b/htdocs/takepos/dev/img/gfdl-logo.svg
    new file mode 100644
    index 00000000000..a0daca0ead8
    --- /dev/null
    +++ b/htdocs/takepos/dev/img/gfdl-logo.svg
    @@ -0,0 +1,110 @@
    +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    +<!-- Created with Inkscape (http://www.inkscape.org/) -->
    +
    +<svg
    +   xmlns:dc="http://purl.org/dc/elements/1.1/"
    +   xmlns:cc="http://creativecommons.org/ns#"
    +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    +   xmlns:svg="http://www.w3.org/2000/svg"
    +   xmlns="http://www.w3.org/2000/svg"
    +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    +   width="110.72372"
    +   height="37.900333"
    +   id="svg3330"
    +   version="1.1"
    +   inkscape:version="0.48.0 r9654"
    +   sodipodi:docname="New document 4">
    +  <defs
    +     id="defs3332" />
    +  <sodipodi:namedview
    +     id="base"
    +     pagecolor="#ffffff"
    +     bordercolor="#666666"
    +     borderopacity="1.0"
    +     inkscape:pageopacity="0.0"
    +     inkscape:pageshadow="2"
    +     inkscape:zoom="3.959798"
    +     inkscape:cx="51.755214"
    +     inkscape:cy="19.316583"
    +     inkscape:document-units="px"
    +     inkscape:current-layer="layer1"
    +     showgrid="false"
    +     fit-margin-top="0"
    +     fit-margin-left="0"
    +     fit-margin-right="0"
    +     fit-margin-bottom="0"
    +     inkscape:window-width="1680"
    +     inkscape:window-height="950"
    +     inkscape:window-x="0"
    +     inkscape:window-y="27"
    +     inkscape:window-maximized="1" />
    +  <metadata
    +     id="metadata3335">
    +    <rdf:RDF>
    +      <cc:Work
    +         rdf:about="">
    +        <dc:format>image/svg+xml</dc:format>
    +        <dc:type
    +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
    +        <dc:title></dc:title>
    +      </cc:Work>
    +    </rdf:RDF>
    +  </metadata>
    +  <g
    +     inkscape:label="Layer 1"
    +     inkscape:groupmode="layer"
    +     id="layer1"
    +     transform="translate(-319.64995,-513.41138)">
    +    <g
    +       id="g5424"
    +       transform="matrix(1.1204236,0,0,1.1204236,378.23897,-788.71491)">
    +      <path
    +         sodipodi:nodetypes="cccccc"
    +         inkscape:connector-curvature="0"
    +         id="rect6744"
    +         d="m -51.39745,1163.0948 85,0 0,29.5252 -85,0 2,-14.7626 z"
    +         style="fill:#f5efbc;fill-opacity:1;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0" />
    +      <text
    +         transform="scale(0.90245956,1.1080829)"
    +         sodipodi:linespacing="125%"
    +         id="text6752-6"
    +         y="1071.2108"
    +         x="-15.68348"
    +         style="font-size:24.31293869px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Ubuntu;-inkscape-font-specification:Ubuntu Bold"
    +         xml:space="preserve"><tspan
    +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:URW Palladio L;-inkscape-font-specification:URW Palladio L Bold"
    +           y="1071.2108"
    +           x="-15.68348"
    +           id="tspan6754-4"
    +           sodipodi:role="line">GFDL</tspan></text>
    +      <path
    +         inkscape:connector-curvature="0"
    +         id="path7064-6"
    +         d="m 19.61576,1166.8577 0,24 0.1875,0 c -0.12127,0.1989 -0.1875,0.4164 -0.1875,0.625 0,2.002 5.8203,3.625 13,3.625 7.1797,0 13,-1.623 13,-3.625 0,-0.2086 -0.0662,-0.4261 -0.1875,-0.625 l 0.1875,0 0,-24 -26,0 z"
    +         style="color:#000000;fill:#f5efbc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
    +      <path
    +         transform="translate(-321.63424,901.70446)"
    +         d="m 367.25,264.98718 c 0,2.00203 -5.8203,3.625 -13,3.625 -7.1797,0 -13,-1.62297 -13,-3.625 0,-2.00203 5.8203,-3.625 13,-3.625 7.1797,0 13,1.62297 13,3.625 z"
    +         sodipodi:ry="3.625"
    +         sodipodi:rx="13"
    +         sodipodi:cy="264.98718"
    +         sodipodi:cx="354.25"
    +         id="path7064"
    +         style="color:#000000;fill:#f5efbc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
    +         sodipodi:type="arc" />
    +      <path
    +         sodipodi:nodetypes="cccccc"
    +         inkscape:connector-curvature="0"
    +         id="path7104"
    +         d="m 45.06778,1167.3815 c -2.44864,5.5993 -9.9067,7.192 -21.52831,5.7955 l 5.7779,9.7599 -6.02275,7.2171 c 7.75095,3.1192 17.18643,1.5723 22.07112,-0.1842 z"
    +         style="fill:#2e439b;fill-opacity:1;stroke:#000000;stroke-width:1.39999986;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
    +      <path
    +         sodipodi:nodetypes="ccscc"
    +         inkscape:connector-curvature="0"
    +         id="path7106"
    +         d="m 34.45935,1165.7653 c -3.4695,-0.1017 -8.01646,0.018 -10.47747,0.7778 1.2102,0.9782 6.11198,1.5627 9.94714,1.2348 3.20297,-0.2738 6.08198,-0.1311 7.93857,-1.1503 -0.70667,-1.1077 -3.93837,-3.3774 -7.91865,-3.2613"
    +         style="fill:none;stroke:#000000;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
    +    </g>
    +  </g>
    +</svg>
    diff --git a/htdocs/takepos/dev/img/gpl-v3-logo.svg b/htdocs/takepos/dev/img/gpl-v3-logo.svg
    new file mode 100644
    index 00000000000..6754c994bda
    --- /dev/null
    +++ b/htdocs/takepos/dev/img/gpl-v3-logo.svg
    @@ -0,0 +1,389 @@
    +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    +<!-- Created with Inkscape (http://www.inkscape.org/) -->
    +<svg
    +   xmlns:dc="http://purl.org/dc/elements/1.1/"
    +   xmlns:cc="http://creativecommons.org/ns#"
    +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    +   xmlns:svg="http://www.w3.org/2000/svg"
    +   xmlns="http://www.w3.org/2000/svg"
    +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    +   width="744.09448819"
    +   height="1052.3622047"
    +   id="svg1341"
    +   sodipodi:version="0.32"
    +   inkscape:version="0.46"
    +   sodipodi:docbase="/home/johns/graphics/logos/gplv3"
    +   sodipodi:docname="gpl-v3-logo (copy).svg"
    +   inkscape:output_extension="org.inkscape.output.svg.inkscape">
    +  <defs
    +     id="defs1343">
    +    <inkscape:perspective
    +       sodipodi:type="inkscape:persp3d"
    +       inkscape:vp_x="0 : 526.18109 : 1"
    +       inkscape:vp_y="0 : 1000 : 0"
    +       inkscape:vp_z="744.09448 : 526.18109 : 1"
    +       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
    +       id="perspective79" />
    +  </defs>
    +  <sodipodi:namedview
    +     id="base"
    +     pagecolor="#ffffff"
    +     bordercolor="#666666"
    +     borderopacity="1.0"
    +     inkscape:pageopacity="0.0"
    +     inkscape:pageshadow="2"
    +     inkscape:zoom="0.56729519"
    +     inkscape:cx="372.04724"
    +     inkscape:cy="526.18109"
    +     inkscape:document-units="px"
    +     inkscape:current-layer="layer1"
    +     inkscape:window-width="1439"
    +     inkscape:window-height="825"
    +     inkscape:window-x="1"
    +     inkscape:window-y="49"
    +     showgrid="false" />
    +  <metadata
    +     id="metadata1346">
    +    <rdf:RDF>
    +      <cc:Work
    +         rdf:about="">
    +        <dc:format>image/svg+xml</dc:format>
    +        <dc:type
    +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
    +      </cc:Work>
    +    </rdf:RDF>
    +  </metadata>
    +  <g
    +     inkscape:label="Layer 1"
    +     inkscape:groupmode="layer"
    +     id="layer1">
    +    <g
    +       id="g3413"
    +       transform="translate(1.7627461,148.07106)">
    +      <g
    +         id="g68"
    +         style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,352.86817,563.90874)">
    +        <path
    +           style="fill:#000000;fill-opacity:0.94117647"
    +           id="path70"
    +           d="M 3.86,0 C 3.86,0 3.85,0 3.85,0 C 2.91,0 2.08,0.31 1.3,0.94 C 0.72,1.4 0.32,2.02 0,2.71 C 0,2.71 0.04,2.71 0.04,2.71 C 0.36,2.02 0.76,1.4 1.33,0.94 C 2.11,0.31 2.94,0.01 3.86,0 z" />
    +      </g>
    +      <path
    +         style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         d="M 92.93948,358.4642 C 92.9395,358.46419 33.62975,617.23158 33.62975,617.23158 C 33.6468,617.23158 33.64894,617.23158 33.68304,617.23158 C 33.68304,617.23158 308.06385,617.23158 308.06385,617.23158 C 308.06386,617.23158 450.76958,617.23158 450.76958,617.23158 C 433.76851,615.74805 420.34631,609.77976 412.34882,598.90046 C 410.86529,596.88827 409.63964,594.72053 408.56535,592.45258 C 407.88328,590.78148 407.24167,589.09543 406.59368,587.39021 C 404.88844,581.9676 404.20851,575.9503 404.51544,569.53867 C 405.36806,551.66793 413.75349,530.41065 428.28198,508.15069 C 443.71423,484.49413 466.08035,459.6998 493.77314,436.69125 C 499.98013,431.53806 506.39817,426.44926 513.11675,421.50411 C 521.42116,415.39432 529.78956,409.7675 538.1622,404.50518 C 569.00965,385.08441 599.78037,371.49508 627.04687,364.59234 C 600.9911,373.09287 571.71882,387.52374 542.79826,407.1696 C 541.7581,407.87215 540.73068,408.59175 539.70754,409.30112 C 523.66141,420.41917 509.1244,432.22698 496.43756,444.15158 C 455.61453,482.53615 434.0371,522.31042 443.84212,545.61227 C 444.54128,547.21517 445.37468,548.74562 446.34667,550.19506 C 456.88492,565.69553 483.00254,568.37485 516.10089,560.05337 C 518.35178,559.49062 520.60267,558.85333 522.92177,558.18829 C 533.49415,555.13592 544.71877,551.01356 556.28017,545.93201 C 559.05966,544.70424 561.86904,543.44238 564.6997,542.09525 C 564.98958,541.95884 565.26243,541.82242 565.55231,541.66895 C 602.04404,523.53733 630.08856,502.67437 636.15915,490.13928 C 637.48923,487.41266 637.80895,485.08798 636.90518,483.26511 C 632.57394,474.48323 602.26573,480.41611 565.55231,496.32071 C 562.60228,497.59961 559.61814,498.91563 556.5999,500.31732 C 559.05542,498.03746 561.61113,495.74904 564.2201,493.49643 C 568.38085,489.91205 572.68866,486.40698 577.2757,482.94539 C 584.4547,477.50912 591.71255,472.59468 598.85743,468.23785 C 632.31386,442.99718 649.22753,419.12063 645.69773,410.26032 C 645.03268,408.59089 643.61736,407.44243 641.43467,406.74329 C 634.46029,404.52482 621.73084,407.17258 606.26448,413.51089 C 593.50944,418.74253 578.85944,426.50169 564.00696,436.15837 C 564.00696,436.15837 561.98201,437.49057 561.98201,437.49057 C 561.98203,437.49057 561.60899,437.70371 561.60899,437.70371 C 561.60901,437.70373 554.46838,442.44636 554.46838,442.44636 C 554.46836,442.44635 558.57157,434.93273 558.57157,434.93273 C 564.65922,423.78909 574.57507,412.16206 586.92087,401.36119 C 595.9756,393.4643 606.3199,386.02357 617.455,379.51303 C 621.66691,377.0473 625.8724,374.75717 630.08429,372.69215 C 634.39851,370.58449 638.71484,368.7113 642.92675,367.0436 C 655.16357,362.20425 666.84456,359.26379 677.03117,358.4642 C 676.1035,358.46419 648.41543,358.4642 648.41543,358.4642 C 648.41544,358.46419 551.96384,358.4642 551.96384,358.4642 C 551.96385,358.46419 126.67089,358.4642 126.67089,358.4642 C 126.67089,358.46419 92.93948,358.4642 92.93948,358.4642 z M 398.92019,358.83722 C 397.2491,384.34222 402.19422,421.69937 413.41458,463.17546 C 415.40967,470.55567 417.5817,478.06631 419.96902,485.66308 C 421.45258,490.35412 422.98301,494.97189 424.5518,499.518 C 423.631,500.87196 422.70376,502.21737 421.8341,503.5679 C 407.83425,525.02298 399.6513,545.29894 397.58799,562.93093 C 391.67085,543.11625 387.21598,521.41263 384.69225,498.39895 C 383.97606,491.80485 383.41546,485.28453 383.04031,478.8422 C 380.27784,432.04581 386.3868,389.625 398.92019,358.83722 z M 119.53029,392.03576 C 119.84963,392.02822 120.16443,392.03576 120.48947,392.03576 C 120.48947,392.03574 183.52938,392.03576 183.52938,392.03576 C 188.91789,392.03574 193.08502,393.04567 196.0521,395.07318 C 199.00212,397.11264 200.10841,399.75061 199.40925,402.95983 C 199.40927,402.95985 191.89562,436.90439 191.89562,436.90439 C 191.89562,436.90442 169.67446,436.90439 169.67446,436.90439 C 169.67448,436.90442 176.97494,403.86573 176.97494,403.86573 C 176.97492,403.86573 121.34209,403.86573 121.34209,403.86573 C 121.34207,403.86573 101.25244,494.66878 101.25244,494.66878 C 101.25246,494.66878 94.00525,527.54759 94.00525,527.54759 C 94.00525,527.54762 149.58482,527.54759 149.58482,527.54759 C 149.58482,527.54762 149.63811,527.33443 149.63811,527.33443 C 149.63811,527.33445 160.77533,477.03039 160.77533,477.03039 C 160.77533,477.03037 134.66413,477.03039 134.66413,477.03039 C 134.66413,477.03037 137.16867,465.68001 137.16867,465.68001 C 137.16866,465.67999 185.50105,465.68001 185.50105,465.68001 C 185.50105,465.67999 171.64612,528.45349 171.64612,528.45349 C 171.45855,529.34701 171.1303,530.15657 170.68693,530.95802 C 169.54444,533.03839 167.55146,534.82036 164.77195,536.28685 C 160.91817,538.31608 156.30552,539.32427 150.91702,539.32427 C 150.91702,539.32429 87.9304,539.32427 87.9304,539.32427 C 82.54188,539.32429 78.37476,538.31606 75.40768,536.28685 C 72.45767,534.25765 71.33433,531.66612 72.05053,528.45349 C 72.05054,528.45347 99.81366,402.95983 99.81366,402.95983 C 100.52984,399.75062 102.76371,397.11262 106.63455,395.07318 C 106.77097,394.99987 106.92444,394.98323 107.06085,394.91332 C 110.59387,393.14362 114.74022,392.14889 119.53029,392.03576 z M 218.32657,392.03576 C 218.32655,392.03574 297.67265,392.03576 297.67265,392.03576 C 302.99296,392.03574 307.175,393.04567 310.14208,395.07318 C 313.12625,397.11264 314.26874,399.75061 313.55253,402.95983 C 313.55255,402.95985 298.73842,469.88978 298.73842,469.88978 C 298.0393,473.07852 295.75215,475.68028 291.86425,477.72314 C 287.97635,479.7728 283.39995,480.81385 278.06261,480.81385 C 278.06259,480.81385 220.40481,480.81385 220.40481,480.81385 C 220.40481,480.81385 209.26758,531.0646 209.26758,531.0646 C 209.26758,531.06462 207.45578,539.32427 207.45578,539.32427 C 207.45579,539.32429 185.7142,539.32427 185.7142,539.32427 C 185.7142,539.32429 187.36613,531.86393 187.36613,531.86393 C 187.36613,531.86395 218.32657,392.03576 218.32657,392.03576 z M 327.94034,392.03576 C 327.94033,392.03574 349.68192,392.03576 349.68192,392.03576 C 349.68194,392.03574 325.06278,503.24817 325.06278,503.24817 C 325.0628,503.24819 319.68068,527.54759 319.68068,527.54759 C 319.68068,527.54762 371.68994,527.54759 371.68994,527.54759 C 372.23562,531.53613 372.87293,535.45341 373.55502,539.32427 C 373.555,539.32429 295.32797,539.32427 295.32797,539.32427 C 295.32799,539.32429 301.5094,511.40126 301.5094,511.40126 C 301.50942,511.40126 327.94034,392.03576 327.94034,392.03576 z M 237.45702,403.86573 C 237.45704,403.86573 223.01592,468.98387 223.01592,468.98387 C 223.01592,468.98385 277.21,468.98387 277.21,468.98387 C 277.20999,468.98385 291.5978,403.86573 291.5978,403.86573 C 291.59782,403.86573 237.45702,403.86573 237.45702,403.86573 z M 191.89562,549.5556 C 192.10829,549.54845 192.32086,549.5556 192.53509,549.5556 C 195.05882,549.55562 197.26281,549.99896 199.03624,550.83451 C 200.92904,551.72122 202.28256,553.03851 203.03286,554.77784 C 203.76611,556.46603 203.95794,558.38225 203.56573,560.47968 C 203.56573,560.47969 203.40588,561.27901 203.40588,561.27901 C 203.40589,561.27898 197.17116,561.27901 197.17116,561.27901 C 197.17114,561.27898 197.22445,560.53296 197.22445,560.53296 C 197.38563,559.06753 197.20396,557.91517 196.63827,557.12253 C 196.56455,557.02312 196.45774,556.8919 196.37183,556.8028 C 196.23115,556.65917 196.01985,556.495 195.83896,556.37649 C 194.96658,555.82699 193.60193,555.52387 191.84234,555.52387 C 189.50619,555.52389 187.76047,555.93099 186.56682,556.74951 C 185.40726,557.55097 184.67402,558.44621 184.43529,559.52049 C 184.19654,560.61183 184.58875,561.18521 184.8616,561.49215 C 184.8701,561.50064 184.90453,561.53592 184.91487,561.54544 C 185.26039,561.83989 186.46023,562.5302 190.1904,563.41052 C 193.56672,564.22903 195.80272,564.96441 197.06458,565.59534 C 198.97445,566.5673 200.30877,567.82704 201.00792,569.3788 C 201.70703,570.91352 201.86052,572.71037 201.43422,574.65433 C 201.00792,576.54712 200.04233,578.29285 198.60994,579.92987 C 197.19462,581.56687 195.39347,582.86284 193.22783,583.7666 C 191.07923,584.65332 188.72179,585.15209 186.30037,585.15209 C 183.23097,585.15208 180.76694,584.68742 178.84003,583.7666 C 176.82786,582.81169 175.37629,581.3047 174.52369,579.34369 C 173.70518,577.43383 173.53039,575.26607 173.9908,572.89583 C 173.9908,572.8958 174.15067,572.14978 174.15067,572.14978 C 174.15067,572.14978 180.27881,572.14978 180.27881,572.14978 C 180.27881,572.14978 180.22552,572.89583 180.22552,572.89583 C 180.07204,574.31115 180.22339,575.45365 180.59854,576.30626 C 180.95663,577.12479 181.63873,577.80259 182.73006,578.33122 C 183.8896,578.89392 185.33904,579.18382 186.99311,579.18382 C 188.47666,579.18381 189.83232,578.93443 191.04302,578.49109 C 192.23667,578.06479 193.1852,577.50205 193.86729,576.78586 C 194.53231,576.06964 194.9224,575.31298 195.09292,574.49446 C 195.26344,573.76122 195.22294,573.14096 194.93305,572.62938 C 194.60906,572.08374 193.96747,571.59985 192.9614,571.1906 C 192.9614,571.19059 187.73914,569.64524 187.73914,569.64524 C 184.82322,568.91201 182.86009,568.21286 181.71759,567.51372 C 180.16582,566.59291 179.04678,565.41203 178.467,563.9967 C 177.88723,562.59839 177.82542,561.04879 178.20057,559.36062 C 178.59277,557.55309 179.46456,555.83295 180.81168,554.29825 C 182.17588,552.74648 183.9365,551.5294 186.03393,550.72794 C 187.88836,550.03254 189.83989,549.62473 191.89562,549.5556 z M 247.84822,549.66218 C 248.18547,549.63591 248.50258,549.66218 248.86069,549.66218 C 248.8607,549.66218 252.69744,550.08848 252.69744,550.08848 C 252.69743,550.08848 253.97635,550.19506 253.97635,550.19506 C 253.97637,550.19507 252.11127,554.9377 252.11127,554.9377 C 252.11126,554.93772 251.73825,555.68374 251.73825,555.68374 C 251.73825,555.68372 248.80741,555.4173 248.80741,555.4173 C 247.942,555.4173 247.30628,555.55082 246.88903,555.8436 C 246.86132,555.86453 246.80803,555.9278 246.78245,555.95018 C 246.72655,555.99922 246.63254,556.08476 246.5693,556.16334 C 246.31271,556.49985 246.00018,557.1012 245.76998,558.18829 C 245.76996,558.18829 245.65914,558.64869 245.55683,559.0409 C 246.90396,559.04091 250.1396,559.0409 250.1396,559.0409 C 250.1396,559.04091 248.96727,564.31642 248.96727,564.31642 C 248.96727,564.31641 245.61651,564.31642 244.49107,564.31642 C 244.15001,565.85111 239.96157,584.61922 239.96157,584.61922 C 239.96155,584.6192 233.78014,584.61922 233.78014,584.61922 C 233.78012,584.6192 237.79807,566.58437 238.30964,564.31642 C 237.26943,564.31641 234.73933,564.31642 234.73933,564.31642 C 234.73933,564.31641 235.91167,559.0409 235.91167,559.0409 C 235.91168,559.04091 238.45671,559.0409 239.42868,559.0409 C 239.5992,558.30766 239.85498,557.38896 239.85498,557.38896 C 240.23014,555.68374 240.62233,554.45811 241.13389,553.6055 C 241.83306,552.42891 242.81995,551.44413 244.06476,550.72794 C 245.09003,550.13219 246.38674,549.776 247.84822,549.66218 z M 262.60904,549.92862 C 262.60902,549.92861 260.99334,557.19926 260.58409,559.0409 C 261.77773,559.04091 264.5807,559.0409 264.5807,559.0409 C 264.5807,559.04091 263.40837,564.31642 263.40837,564.31642 C 263.40835,564.31641 260.46898,564.31642 259.41175,564.31642 C 259.08774,565.78289 256.53419,577.15888 256.53419,577.15888 C 256.53421,577.15886 256.32103,578.52519 256.32103,578.91739 C 256.32131,578.93044 256.31997,578.96107 256.32103,578.97067 C 256.32187,578.9747 256.31983,579.02064 256.32103,579.02396 C 256.32267,579.02665 256.37218,579.02182 256.37431,579.02396 C 256.37431,579.02394 257.01378,579.07725 257.01378,579.07725 C 257.01378,579.07725 259.94463,578.8641 259.94463,578.8641 C 259.94463,578.8641 259.6249,583.60674 259.6249,583.60674 C 259.62492,583.60674 259.6782,584.45935 259.6782,584.45935 C 259.67818,584.45933 255.46842,584.93895 255.46842,584.93895 C 253.79732,584.93893 252.57167,584.66612 251.68496,584.08635 C 250.74711,583.47243 250.20142,582.65821 249.97974,581.63509 C 249.94563,581.4475 249.87316,581.17467 249.87316,580.78248 C 249.87316,580.01512 250.01811,578.71703 250.51262,576.46614 C 250.51264,576.46616 252.75285,566.4309 253.23032,564.31642 C 252.42889,564.31641 250.29947,564.31642 250.29947,564.31642 C 250.29949,564.31641 251.4718,559.0409 251.4718,559.0409 C 251.47178,559.04091 253.55004,559.0409 254.40266,559.0409 C 254.67547,557.81315 255.62828,553.6055 255.62828,553.6055 C 255.62828,553.60552 260.58409,550.99438 260.58409,550.99438 C 260.58408,550.9944 262.60904,549.92862 262.60904,549.92862 z M 66.24211,550.14177 C 66.24213,550.14177 90.22179,550.14177 90.22179,550.14177 C 90.22179,550.14177 88.88959,556.11005 88.88959,556.11005 C 88.88959,556.11007 72.89248,556.11005 71.35778,556.11005 C 71.08496,557.32078 69.99147,562.22327 69.59927,563.9967 C 71.81607,563.9967 84.7864,563.9967 84.7864,563.9967 C 84.7864,563.9967 83.45419,569.96496 83.45419,569.96496 C 83.45418,569.96496 69.80177,569.96496 68.26706,569.96496 C 67.94307,571.44851 65.01648,584.61922 65.01648,584.61922 C 65.0165,584.6192 58.56862,584.61922 58.56862,584.61922 C 58.56863,584.6192 66.24211,550.14177 66.24211,550.14177 z M 98.37487,558.56131 C 98.61554,558.53175 98.87845,558.56131 99.12091,558.56131 C 100.65561,558.56131 102.07308,559.02811 103.43726,560.00008 C 103.43726,560.0001 104.28986,560.58625 104.28986,560.58625 C 104.28986,560.58625 100.986,566.02165 100.986,566.02165 C 100.986,566.02163 100.08011,565.38219 100.08011,565.38219 C 99.41507,564.9559 98.69888,564.74273 97.94858,564.74273 C 97.30059,564.74275 96.69737,564.97293 96.08349,565.38219 C 95.43552,565.80849 94.89409,566.37334 94.48485,567.1407 C 93.76865,568.45374 93.24429,569.92447 92.8862,571.51033 C 92.8862,571.51034 90.00864,584.61922 90.00864,584.61922 C 90.00864,584.6192 83.82721,584.61922 83.82721,584.61922 C 83.82721,584.6192 89.52905,559.0409 89.52905,559.0409 C 89.52907,559.04091 95.28417,559.0409 95.28417,559.0409 C 95.28417,559.04091 95.08593,559.81678 95.01772,560.10666 C 95.29056,559.90205 95.57831,559.62067 95.81705,559.4672 C 96.64302,558.9743 97.51542,558.66685 98.37487,558.56131 z M 116.70601,558.56131 C 117.0782,558.53316 117.4446,558.56131 117.82507,558.56131 C 121.30373,558.56131 123.93615,559.78053 125.65842,562.1849 C 126.7327,563.73664 127.31037,565.65502 127.31037,567.94002 C 127.31037,569.20187 127.15476,570.55967 126.83078,572.04321 C 126.83078,572.04321 126.35117,573.9083 126.35117,573.9083 C 126.35117,573.90828 110.71856,573.9083 108.97923,573.9083 C 108.94512,574.26638 108.92594,574.65007 108.92594,574.97406 C 108.92594,576.30415 109.19877,577.35071 109.77855,578.11807 C 110.05405,578.4932 110.37345,578.83106 110.73774,579.07725 C 111.42452,579.52514 112.31108,579.77 113.34886,579.77 C 114.61074,579.76998 115.71911,579.42255 116.7593,578.75752 C 117.74835,578.12659 118.69474,577.11838 119.53029,575.7201 C 119.53029,575.72007 126.13802,575.7201 126.13802,575.7201 C 126.13802,575.72007 125.55186,576.99901 125.55186,576.99901 C 124.28999,579.55686 122.52935,581.55195 120.32961,582.96729 C 118.12988,584.38262 115.5017,585.15209 112.60282,585.15209 C 108.83428,585.15208 106.02919,583.93287 104.28986,581.52851 C 102.5676,579.17528 102.19671,575.92258 103.11753,571.83005 C 104.03836,567.66932 105.87573,564.34414 108.55292,562.02503 C 110.9525,559.94441 113.67537,558.79035 116.70601,558.56131 z M 144.46916,558.56131 C 144.84134,558.53316 145.20773,558.56131 145.5882,558.56131 C 149.06687,558.56131 151.6993,559.78053 153.42157,562.1849 C 154.49586,563.73664 155.0735,565.65502 155.0735,567.94002 C 155.0735,569.18482 154.9179,570.52343 154.5939,571.98992 C 154.5939,571.98994 154.11432,573.9083 154.11432,573.9083 C 154.11432,573.90828 138.48169,573.9083 136.74237,573.9083 C 136.7253,574.147 136.70613,574.36232 136.68908,574.60105 C 136.67629,574.69057 136.69468,574.82646 136.68908,574.92077 C 136.68858,574.93615 136.68908,574.95914 136.68908,574.97406 C 136.68908,575.22986 136.72532,575.48136 136.74237,575.7201 C 136.8276,576.69206 137.08129,577.50419 137.54169,578.11807 C 137.62936,578.23743 137.71177,578.38477 137.80813,578.49109 C 138.58914,579.32663 139.69453,579.77 141.112,579.77 C 142.37388,579.76998 143.49931,579.42255 144.52245,578.75752 C 145.51149,578.12659 146.45787,577.11838 147.29343,575.7201 C 147.29343,575.72007 153.95445,575.7201 153.95445,575.7201 C 153.95444,575.72007 153.31499,576.99901 153.31499,576.99901 C 152.05313,579.55686 150.29249,581.55195 148.09275,582.96729 C 145.89301,584.38262 143.26484,585.15209 140.36597,585.15209 C 136.59744,585.15208 133.79234,583.93287 132.05301,581.52851 C 130.92756,579.99379 130.40107,578.0392 130.40107,575.7201 C 130.40107,575.36198 130.42025,574.97619 130.45436,574.60105 C 130.52259,573.71434 130.65899,572.81909 130.88067,571.83005 C 131.80151,567.68637 133.58558,564.34414 136.26277,562.02503 C 138.66234,559.94441 141.43852,558.79035 144.46916,558.56131 z M 220.08507,558.56131 C 220.46591,558.53202 220.81619,558.56131 221.20412,558.56131 C 224.75099,558.56131 227.47722,559.76135 229.25064,562.13161 C 231.00704,564.50184 231.43333,567.69915 230.52955,571.72347 C 229.83042,574.8611 228.82008,577.39547 227.43885,579.23712 C 226.05759,581.07877 224.29697,582.58361 222.21659,583.60674 C 220.15331,584.62988 217.96846,585.15209 215.76873,585.15209 C 212.15366,585.15208 209.46154,583.91581 207.72221,581.52851 C 206.59675,580.01087 206.01699,578.05625 206.01699,575.7201 C 206.01701,574.45823 206.15555,573.1175 206.49659,571.61691 C 207.51974,567.0469 209.60861,563.56613 212.67802,561.33229 C 214.93103,559.70595 217.41916,558.76623 220.08507,558.56131 z M 313.7124,558.56131 C 314.162,558.53356 314.57833,558.56131 315.0446,558.56131 C 317.19319,558.56131 318.88135,558.77871 320.16027,559.30733 C 321.52445,559.85302 322.49216,560.62462 323.03783,561.54544 C 323.56647,562.41507 323.83716,563.483 323.83716,564.79601 C 323.83717,564.79603 323.19768,568.68605 323.19768,568.68605 C 323.19771,568.68605 322.02536,573.96159 322.02536,573.96159 C 321.01925,578.46335 320.7976,580.15154 320.74643,580.78248 C 320.69528,581.6351 320.77414,582.46638 321.01288,583.23373 C 321.0129,583.23371 321.43918,584.61922 321.43918,584.61922 C 321.4392,584.6192 315.15118,584.61922 315.15118,584.61922 C 315.15116,584.6192 314.88473,583.81989 314.88473,583.81989 C 314.78242,583.44477 314.81226,582.96729 314.77816,582.54098 C 313.58451,583.27423 312.38872,583.92434 311.31443,584.29949 C 309.72859,584.84518 308.08304,585.15209 306.41192,585.15209 C 303.51306,585.15208 301.3666,584.39755 300.07062,582.91399 C 299.0816,581.82266 298.63185,580.48832 298.63185,578.97067 C 298.63183,578.3909 298.70858,577.7898 298.84499,577.15888 C 299.13487,575.86291 299.66137,574.66285 300.49693,573.58856 C 301.31544,572.5313 302.28316,571.66167 303.37449,571.03074 C 304.43175,570.39982 305.61047,569.95219 306.83823,569.64524 C 306.83821,569.64524 310.62169,569.00578 310.62169,569.00578 C 313.53763,568.66472 315.7139,568.24057 317.28271,567.78016 C 317.31683,567.60964 317.38928,567.40714 317.38928,567.40714 C 317.63654,566.30996 317.6056,565.48526 317.33599,565.06246 C 317.31615,565.03519 317.25181,564.97932 317.22942,564.95588 C 317.17186,564.89453 317.08339,564.79809 317.01626,564.74273 C 316.37491,564.2352 315.2812,563.9967 313.81898,563.9967 C 312.16491,563.9967 310.94142,564.26741 310.0888,564.79601 C 309.25325,565.32464 308.47949,566.29235 307.79741,567.67357 C 307.7974,567.67356 301.34954,567.67357 301.34954,567.67357 C 301.34956,567.67356 301.93571,566.39466 301.93571,566.39466 C 302.70304,564.62121 303.61749,563.15048 304.75999,562.02503 C 305.90249,560.89956 307.44571,560.02779 309.23619,559.41392 C 310.60835,558.96095 312.10669,558.66038 313.7124,558.56131 z M 340.72951,558.56131 C 340.96997,558.53175 341.23307,558.56131 341.47554,558.56131 C 343.02727,558.56131 344.48099,559.02811 345.84517,560.00008 C 345.84519,560.0001 346.64449,560.58625 346.64449,560.58625 C 346.6445,560.58625 343.34063,566.02165 343.34063,566.02165 C 343.34064,566.02163 342.43473,565.38219 342.43473,565.38219 C 341.7697,564.9559 341.08972,564.74273 340.35649,564.74273 C 339.70848,564.74275 339.06905,564.97293 338.4381,565.38219 C 337.79013,565.80849 337.31906,566.37334 336.89276,567.1407 C 336.1936,568.45374 335.6522,569.92447 335.29411,571.51033 C 335.29409,571.51034 332.36326,584.61922 332.36326,584.61922 C 332.36328,584.6192 326.18184,584.61922 326.18184,584.61922 C 326.18184,584.6192 331.88366,559.0409 331.88366,559.0409 C 331.88365,559.04091 337.63878,559.0409 337.63878,559.0409 C 337.63878,559.04091 337.49384,559.81678 337.42564,560.10666 C 337.69846,559.90205 337.96917,559.62067 338.22496,559.4672 C 339.03759,558.9743 339.87067,558.66685 340.72951,558.56131 z M 359.00734,558.56131 C 359.37919,558.53316 359.74593,558.56131 360.1264,558.56131 C 363.60506,558.56131 366.25453,559.78053 367.95977,562.1849 C 369.05112,563.73664 369.6117,565.65502 369.6117,567.94002 C 369.61168,569.20187 369.4028,570.55967 369.07881,572.04321 C 369.07881,572.04321 368.65251,573.9083 368.65251,573.9083 C 368.6525,573.90828 353.00283,573.9083 351.28057,573.9083 C 351.24646,574.26638 351.17398,574.65007 351.17398,574.97406 C 351.17398,576.30415 351.46387,577.35071 352.0266,578.11807 C 352.11426,578.23743 352.2496,578.38477 352.34632,578.49109 C 352.40234,578.55076 352.50044,578.64882 352.55948,578.70423 C 353.32183,579.39725 354.35929,579.77 355.65018,579.77 C 356.91207,579.76998 358.02045,579.42255 359.06063,578.75752 C 360.04968,578.12659 360.97902,577.11838 361.83162,575.7201 C 361.8316,575.72007 368.49264,575.7201 368.49264,575.7201 C 368.49264,575.72007 367.85318,576.99901 367.85318,576.99901 C 366.59131,579.55686 364.81363,581.55195 362.63094,582.96729 C 360.41417,584.38262 357.82009,585.15209 354.90415,585.15209 C 351.13564,585.15208 348.38381,583.93287 346.64449,581.52851 C 344.92219,579.17528 344.51509,575.92258 345.41886,571.83005 C 346.33967,567.66932 348.12377,564.34414 350.80097,562.02503 C 353.21572,559.94441 355.97949,558.79035 359.00734,558.56131 z M 265.69974,559.0409 C 265.69976,559.04091 272.04105,559.0409 272.04105,559.0409 C 272.04107,559.04091 272.82331,574.21951 272.84036,574.44117 C 273.09614,573.89761 273.2946,573.4403 273.31997,573.37542 C 273.31998,573.37543 280.30071,559.0409 280.30071,559.0409 C 280.30073,559.04091 286.10912,559.0409 286.10912,559.0409 C 286.10911,559.04091 286.642,574.03618 286.642,574.12144 C 286.81255,573.81453 294.58194,559.0409 294.58194,559.0409 C 294.58192,559.04091 300.86995,559.0409 300.86995,559.0409 C 300.86994,559.04091 287.01502,584.61922 287.01502,584.61922 C 287.01504,584.6192 281.31319,584.61922 281.31319,584.61922 C 281.31319,584.6192 280.76113,570.74938 280.72702,569.96496 C 278.37379,574.79076 273.58639,584.61922 273.58639,584.61922 C 273.58639,584.6192 267.72471,584.61922 267.72471,584.61922 C 267.72471,584.6192 265.69974,559.0409 265.69974,559.0409 z M 116.81259,563.89012 C 115.34366,563.95214 114.00964,564.48161 112.7627,565.48876 C 111.77368,566.27317 111.10649,567.3496 110.57787,568.52619 C 110.57787,568.52621 121.07564,568.52619 121.07564,568.52619 C 121.09271,568.33863 121.12893,568.11055 121.12893,567.94002 C 121.12891,566.96807 120.95627,566.21349 120.64934,565.70192 C 119.89906,564.47415 118.78639,563.89012 117.13232,563.89012 C 117.03322,563.89012 116.91052,563.886 116.81259,563.89012 z M 144.57572,563.89012 C 143.1068,563.95214 141.77277,564.48161 140.52582,565.48876 C 139.53678,566.27317 138.88669,567.3496 138.34102,568.52619 C 138.34102,568.52621 148.83878,568.52619 148.83878,568.52619 C 148.85582,568.33863 148.89207,568.11055 148.89207,567.94002 C 148.89206,566.96807 148.73647,566.21349 148.41247,565.70192 C 148.26353,565.45253 148.06204,565.20453 147.87959,565.00918 C 147.1676,564.27346 146.18769,563.89012 144.89546,563.89012 C 144.79635,563.89012 144.67366,563.886 144.57572,563.89012 z M 359.32708,563.89012 C 357.81652,563.93665 356.40583,564.44806 355.11731,565.48876 C 354.14533,566.27317 353.47816,567.3496 352.93249,568.52619 C 352.93251,568.52621 363.37698,568.52619 363.37698,568.52619 C 363.39401,568.33863 363.43027,568.11055 363.43027,567.94002 C 363.43026,566.96807 363.27467,566.21349 362.95067,565.70192 C 362.21743,564.4912 361.08771,563.90718 359.43365,563.89012 C 359.38463,563.89065 359.37581,563.88862 359.32708,563.89012 z M 219.71206,563.9967 C 218.30243,564.16409 216.9917,564.80721 215.76873,565.91507 C 214.30225,567.24516 213.23861,569.33404 212.62474,572.0965 C 212.36895,573.25605 212.25171,574.24721 212.25171,575.13392 C 212.25173,576.34462 212.48404,577.29529 212.94446,578.01148 C 213.06703,578.19532 213.22962,578.38959 213.37077,578.54437 C 214.12881,579.34925 215.18736,579.77 216.51477,579.77 C 218.23703,579.76998 219.75469,579.12841 221.20412,577.79833 C 222.67064,576.45119 223.71719,574.34099 224.34812,571.51033 C 224.92792,568.91838 224.8469,566.98297 224.0284,565.75521 C 223.244,564.56155 222.09724,563.9967 220.51139,563.9967 C 220.24228,563.9967 219.97309,563.96569 219.71206,563.9967 z M 316.00379,573.32213 C 314.55438,573.71431 312.93012,574.04471 310.78155,574.33461 C 309.17866,574.57335 308.03614,574.82485 307.3711,575.08064 C 306.79134,575.31936 306.32452,575.64975 305.93232,576.09312 C 305.55716,576.51939 305.30566,576.96704 305.1863,577.47861 C 305.15221,577.68325 305.133,577.89425 305.133,578.06478 C 305.133,578.07862 305.13269,578.10436 305.133,578.11807 C 305.13479,578.15865 305.12855,578.23877 305.133,578.27792 C 305.14368,578.35529 305.16517,578.47232 305.1863,578.54437 C 305.19392,578.5681 305.23081,578.62776 305.23957,578.65094 C 305.25823,578.69678 305.26972,578.76705 305.29286,578.81081 C 305.31713,578.85407 305.37076,578.9293 305.39944,578.97067 C 305.44408,579.03204 305.50494,579.12627 305.55931,579.18382 C 305.98562,579.66128 306.83609,579.87657 308.06385,579.87657 C 309.411,579.87658 310.70695,579.62079 311.9006,579.02396 C 313.07722,578.44419 314.02573,577.57878 314.72487,576.5727 C 315.23646,575.8565 315.6457,574.7545 316.00379,573.32213 z"
    +         id="path74" />
    +      <g
    +         id="g80"
    +         style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,359.45027,563.90874)">
    +        <path
    +           style="fill:#000000;fill-opacity:0.94117647"
    +           id="path82"
    +           d="M 0.03,0 C 0.02,0 0.01,0 0,0 C 0.97,0.01 1.61,0.34 2.04,1.05 C 2.23,1.35 2.33,1.8 2.33,2.37 C 2.33,2.47 2.31,2.6 2.3,2.71 C 2.3,2.71 2.34,2.71 2.34,2.71 C 2.34,2.6 2.36,2.47 2.36,2.37 C 2.36,1.8 2.27,1.35 2.08,1.05 C 1.65,0.33 1,0 0.03,0 z" />
    +      </g>
    +      <g
    +         style="fill:#000000;fill-opacity:0.94117647"
    +         id="g4966"
    +         transform="matrix(1.705222,0,0,1.705222,-200.90733,-129.69426)">
    +        <g
    +           transform="translate(125.1273,453.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g84">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 0,36 C 0,36 7.46,36 7.46,36 C 7.46,36 10.81,22 10.81,22 C 10.81,22 22.93,22 22.93,22 C 22.93,22 24.49,16 24.49,16 C 24.49,16 12.32,16 12.32,16 C 12.32,16 14.34,7 14.34,7 C 14.34,7 27.29,7 27.29,7 C 27.29,7 28.85,0 28.85,0 C 28.85,0 8.4,0 8.4,0 C 8.4,0 0,36 0,36 z"
    +             id="path86" />
    +        </g>
    +        <g
    +           transform="translate(151.0773,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g88">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 7.51,26 C 7.51,26 9.75,16.6 9.75,16.6 C 10.93,11.51 13.42,7 18.13,7 C 18.55,7 18.96,7.21 19.27,7.26 C 19.27,7.26 21.09,0.05 21.09,0.05 C 20.67,0.05 20.21,0 19.69,0 C 16.22,0 13.31,2.44 11.37,5.94 C 11.37,5.94 11.17,5.94 11.17,5.94 C 11.46,4.23 11.71,2.61 11.9,1 C 11.9,1 5.47,1 5.47,1 C 5.1,3.08 4.53,7.15 3.66,10.82 C 3.66,10.82 0,26 0,26 C 0,26 7.51,26 7.51,26 z"
    +             id="path90" />
    +        </g>
    +        <g
    +           transform="translate(171.7073,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g92">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 20.06,19.25 C 17.99,20.26 15.63,20 12.88,20 C 10.71,20 9.03,19.62 8.11,18.88 C 7.63,18.07 7.43,16.81 7.47,16 C 17.6,16.27 23.99,13.93 24.31,7.53 C 24.55,2.7 21.02,0 15.89,0 C 6.73,0 0.73,8.08 0.34,15.86 C 0,22.65 3.52,26 10.78,26 C 13.57,26 17.27,25.68 20.3,24.77 C 20.3,24.77 20.06,19.25 20.06,19.25 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.47,10 C 9.1,7.91 11.22,6 14.69,6 C 16.4,6 17.38,6.65 17.32,7.53 z"
    +             id="path94" />
    +        </g>
    +        <g
    +           transform="translate(198.2273,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g96">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 20.05,19.25 C 17.98,20.26 15.62,20 12.88,20 C 10.7,20 9.03,19.62 8.11,18.88 C 7.63,18.07 7.42,16.81 7.46,16 C 17.6,16.27 23.98,13.93 24.31,7.53 C 24.55,2.7 21.02,0 15.89,0 C 6.72,0 0.72,8.08 0.33,15.86 C 0,22.65 3.52,26 10.77,26 C 13.57,26 17.27,25.68 20.3,24.77 C 20.3,24.77 20.05,19.25 20.05,19.25 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.46,10 C 9.1,7.91 11.21,6 14.68,6 C 16.39,6 17.38,6.65 17.32,7.53 z"
    +             id="path98" />
    +        </g>
    +        <g
    +           transform="translate(234.1373,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g100">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 22.74,26 C 22.8,22.83 23.56,17.85 24.35,14.58 C 24.35,14.58 27.56,1 27.56,1 C 25.52,0.31 22.34,0 19.28,0 C 6.86,0 0.7,9.2 0.27,17.82 C 0,23.23 2.93,26 7.49,26 C 10.44,26 13.77,24.57 16.36,20.27 C 16.36,20.27 16.47,20.27 16.47,20.27 C 16.27,22.34 16.03,24.35 15.9,26 C 15.9,26 22.74,26 22.74,26 z M 17.61,11.72 C 16.15,18.08 13.17,20 10.95,20 C 8.88,20 7.98,18.53 8.1,16.39 C 8.34,11.56 12.16,6 16.98,6 C 17.76,6 18.37,5.86 18.94,5.72 C 18.94,5.72 17.61,11.72 17.61,11.72 z"
    +             id="path102" />
    +        </g>
    +        <g
    +           transform="translate(261.7673,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g104">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 0,24.82 C 1.44,25.94 4.46,25.95 7.61,26 C 14.34,26.05 19.42,23.11 19.72,17.71 C 19.89,14.11 17.1,11.98 14.37,10.55 C 12.4,9.6 11.41,8.69 11.46,7.63 C 11.53,6.2 12.87,6 14.84,6 C 17.06,6 18.84,6.27 19.86,6.47 C 19.86,6.47 21.88,1.05 21.88,1.05 C 20.73,0.36 18.43,0 15.48,0 C 8.95,0 4.17,3.45 3.9,8.69 C 3.74,11.93 6.07,14.11 8.89,15.59 C 11.17,16.76 11.95,17.66 11.89,18.93 C 11.82,20.21 10.68,20 8.61,20 C 6.18,20 3.49,19.68 2.07,19.46 C 2.07,19.46 0,24.82 0,24.82 z"
    +             id="path106" />
    +        </g>
    +        <g
    +           transform="translate(294.2173,452.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g108">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 7.45,37 C 7.45,37 13.5,12 13.5,12 C 13.5,12 6.09,12 6.09,12 C 6.09,12 0,37 0,37 C 0,37 7.45,37 7.45,37 z M 10.92,9 C 13.46,9 15.72,6.9 15.86,3.3 C 15.98,0.86 14.4,0 12.07,0 C 9.64,0 7.42,1.58 7.29,3.94 C 7.17,6.32 8.75,9 10.92,9 z"
    +             id="path110" />
    +        </g>
    +        <g
    +           transform="translate(308.5073,464.0834)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g112">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 7.46,25.31 C 7.46,25.31 10.1,14.05 10.1,14.05 C 11.47,8.32 14.42,6.31 16.85,6.31 C 18.77,6.31 19.33,7.13 19.24,8.32 C 19.19,9.28 19.04,10.29 18.84,11.19 C 18.84,11.19 15.48,25.31 15.48,25.31 C 15.48,25.31 22.94,25.31 22.94,25.31 C 22.94,25.31 26.48,10.5 26.48,10.5 C 26.75,9.22 27.05,7.31 27.11,6.15 C 27.33,1.64 25.08,0 20.94,0 C 17.62,0 14.39,1.54 11.84,4.88 C 11.84,4.88 11.74,4.88 11.74,4.88 C 11.74,4.88 12.42,0.31 12.42,0.31 C 12.42,0.31 5.84,0.31 5.84,0.31 C 5.41,2.45 4.86,5.04 4.08,8.06 C 4.08,8.06 0,25.31 0,25.31 C 0,25.31 7.46,25.31 7.46,25.31 z"
    +             id="path114" />
    +        </g>
    +        <g
    +           transform="translate(348.0673,453.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g116">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 0,36 C 0,36 7.46,36 7.46,36 C 7.46,36 10.82,22 10.82,22 C 10.82,22 22.93,22 22.93,22 C 22.93,22 24.49,16 24.49,16 C 24.49,16 12.32,16 12.32,16 C 12.32,16 14.34,7 14.34,7 C 14.34,7 27.29,7 27.29,7 C 27.29,7 28.85,0 28.85,0 C 28.85,0 8.4,0 8.4,0 C 8.4,0 0,36 0,36 z"
    +             id="path118" />
    +        </g>
    +        <g
    +           transform="translate(374.0173,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g120">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 7.51,26 C 7.51,26 9.75,16.6 9.75,16.6 C 10.93,11.51 13.42,7 18.13,7 C 18.55,7 18.96,7.21 19.27,7.26 C 19.27,7.26 21.09,0.05 21.09,0.05 C 20.67,0.05 20.21,0 19.69,0 C 16.22,0 13.31,2.44 11.37,5.94 C 11.37,5.94 11.17,5.94 11.17,5.94 C 11.46,4.23 11.71,2.61 11.9,1 C 11.9,1 5.47,1 5.47,1 C 5.11,3.08 4.53,7.15 3.66,10.82 C 3.66,10.82 0,26 0,26 C 0,26 7.51,26 7.51,26 z"
    +             id="path122" />
    +        </g>
    +        <g
    +           transform="translate(394.6473,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g124">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 20.06,19.25 C 17.99,20.26 15.63,20 12.88,20 C 10.71,20 9.03,19.62 8.11,18.88 C 7.63,18.07 7.43,16.81 7.47,16 C 17.6,16.27 23.99,13.93 24.31,7.53 C 24.55,2.7 21.02,0 15.89,0 C 6.73,0 0.73,8.08 0.34,15.86 C 0,22.65 3.53,26 10.78,26 C 13.57,26 17.28,25.68 20.3,24.77 C 20.3,24.77 20.06,19.25 20.06,19.25 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.47,10 C 9.1,7.91 11.22,6 14.69,6 C 16.4,6 17.38,6.65 17.32,7.53 z"
    +             id="path126" />
    +        </g>
    +        <g
    +           transform="translate(421.1673,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g128">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 20.05,19.25 C 17.98,20.26 15.62,20 12.88,20 C 10.7,20 9.03,19.62 8.11,18.88 C 7.63,18.07 7.42,16.81 7.46,16 C 17.6,16.27 23.98,13.93 24.31,7.53 C 24.55,2.7 21.02,0 15.89,0 C 6.72,0 0.72,8.08 0.33,15.86 C 0,22.65 3.52,26 10.77,26 C 13.57,26 17.27,25.68 20.3,24.77 C 20.3,24.77 20.05,19.25 20.05,19.25 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.46,10 C 9.1,7.91 11.21,6 14.68,6 C 16.39,6 17.38,6.65 17.32,7.53 z"
    +             id="path130" />
    +        </g>
    +        <g
    +           transform="translate(447.5473,452.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g132">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 23.31,0 C 23.31,0 20.5,11.36 20.5,11.36 C 19.48,10.94 18.15,11 17.11,11 C 7.53,11 0.75,19.2 0.3,28.08 C 0,34.34 3.34,37 7.64,37 C 10.65,37 13.82,35.67 16.22,32.23 C 16.22,32.23 16.32,32.23 16.32,32.23 C 16.32,32.23 15.75,37 15.75,37 C 15.75,37 22.53,37 22.53,37 C 22.84,34 23.49,30.43 24.22,27.17 C 24.22,27.17 30.71,0 30.71,0 C 30.71,0 23.31,0 23.31,0 z M 17.47,24.42 C 16.3,29.35 13.54,31 11.36,31 C 9.19,31 7.98,29.49 8.13,26.8 C 8.38,21.82 11.8,17 16.25,17 C 17.5,17 18.57,17.19 19.16,17.47 C 19.16,17.47 17.47,24.42 17.47,24.42 z"
    +             id="path134" />
    +        </g>
    +        <g
    +           transform="translate(477.2573,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g136">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 10.61,26 C 19.31,26 26.02,19.41 26.49,10.44 C 26.78,4.5 23.08,0 16.25,0 C 7.23,0 0.76,7.3 0.31,16.12 C 0,22.54 4.14,26 10.61,26 z M 11.78,20 C 9.24,20 7.84,18.38 7.99,15.96 C 8.19,11.93 10.68,6 14.97,6 C 17.93,6 18.84,8.27 18.72,10.5 C 18.5,14.9 15.82,20 11.78,20 z"
    +             id="path138" />
    +        </g>
    +        <g
    +           transform="translate(505.8173,463.3934)"
    +           style="fill:#000000;fill-opacity:0.94117647;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +           id="g140">
    +          <path
    +             style="fill:#000000;fill-opacity:0.94117647"
    +             d="M 7.2,26 C 7.2,26 9.9,14.58 9.9,14.58 C 11.03,9.49 13.85,6 16.38,6 C 18.2,6 18.7,7.33 18.61,9.07 C 18.56,9.97 18.36,10.98 18.15,11.98 C 18.15,11.98 14.81,26 14.81,26 C 14.81,26 22.01,26 22.01,26 C 22.01,26 24.71,14.53 24.71,14.53 C 25.95,9.28 28.61,6 31.09,6 C 32.8,6 33.51,7.22 33.43,8.96 C 33.38,9.97 33.17,11.08 32.91,12.09 C 32.91,12.09 29.67,26 29.67,26 C 29.67,26 36.92,26 36.92,26 C 36.92,26 40.41,11.19 40.41,11.19 C 40.68,9.86 40.99,7.79 41.04,6.73 C 41.26,2.33 39.11,0 35.23,0 C 31.91,0 28.68,1.5 26.23,4.66 C 26.14,2.38 24.51,0 20.47,0 C 17.2,0 14.08,1.48 11.58,4.83 C 11.58,4.83 11.48,4.83 11.48,4.83 C 11.48,4.83 12.15,1 12.15,1 C 12.15,1 5.73,1 5.73,1 C 5.31,3.14 4.8,5.73 4.02,8.75 C 4.02,8.75 0,26 0,26 C 0,26 7.2,26 7.2,26 z"
    +             id="path142" />
    +        </g>
    +      </g>
    +      <path
    +         style="fill:none;fill-opacity:0.94117647;fill-rule:evenodd;stroke:#000000;stroke-width:8.52610779;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
    +         id="path2592"
    +         d="M 402.97747,590.4172 C 403.66968,592.19682 404.36192,593.97353 405.08297,595.7113 C 406.19343,598.07207 407.47693,600.3319 409.02001,602.44175 C 417.35558,613.77261 431.31547,619.9767 449.03932,621.52122 C 449.03932,621.52122 468.10438,621.52122 468.10438,621.52122 C 474.13249,621.05108 480.44905,620.17426 486.99636,618.89363 C 498.28829,616.68573 510.25803,613.29383 522.68924,608.76119 C 532.10639,605.32744 541.78314,601.26495 551.60409,596.54341 C 572.99097,586.29126 595.0845,573.06832 616.75984,557.11106 C 623.89841,551.86024 630.74856,546.47243 637.32471,540.99376 C 643.35284,535.978 649.13581,530.88434 654.65917,525.73449 C 670.07562,510.8776 681.71367,495.78852 688.30424,482.53959 C 695.16876,468.74269 696.53885,456.94601 690.91452,449.51466 C 687.46779,444.9532 681.69925,442.50877 674.27224,441.93336 C 707.72977,416.82865 727.22752,386.37503 720.2332,367.17442 C 718.01224,361.04678 713.12339,356.47522 706.11462,353.94714 C 702.99965,352.82662 699.49519,352.11708 695.67352,351.79404 C 695.67352,351.79404 685.37669,351.79404 685.37669,351.79404 C 670.99861,352.83092 650.09005,357.97936 632.35179,366.67256"
    +         sodipodi:nodetypes="cccccssccccscccsccc" />
    +    </g>
    +    <g
    +       id="g2486"
    +       transform="translate(-10.576504,12.339255)">
    +      <path
    +         d="M 373.55234,223.69791 C 373.55234,223.69791 373.53528,223.69791 373.53528,223.69791 C 371.93238,223.69791 370.51704,224.22653 369.18697,225.30082 C 368.19794,226.08522 367.51585,227.14246 366.97018,228.31906 C 366.97018,228.31906 367.03839,228.31906 367.03839,228.31906 C 367.58406,227.14246 368.26615,226.08522 369.23813,225.30082 C 370.5682,224.22653 371.98353,223.71496 373.55234,223.69791 z"
    +         id="path2577"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter" />
    +      <path
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         d="M 107.04146,18.25331 C 107.04148,18.25331 47.731726,277.02073 47.731726,277.02073 C 47.748776,277.02073 47.750916,277.02073 47.785016,277.02073 C 47.785016,277.02073 322.16583,277.02073 322.16583,277.02073 C 322.16584,277.02073 464.87156,277.02073 464.87156,277.02073 C 447.87049,275.5372 434.44829,269.56891 426.4508,258.68961 C 424.96727,256.67742 423.74162,254.50968 422.66733,252.24173 C 421.98526,250.57063 421.34365,248.88458 420.69566,247.17936 C 418.99042,241.75675 418.31049,235.73945 418.61742,229.32782 C 419.47004,211.45708 427.85547,190.1998 442.38396,167.93984 C 457.81621,144.28328 480.18233,119.48895 507.87512,96.4804 C 514.08211,91.32721 520.50015,86.23841 527.21873,81.29326 C 535.52314,75.18347 543.89154,69.55665 552.26418,64.29433 C 583.11163,44.87356 613.88235,31.28421 641.14885,24.38151 C 615.09308,32.88202 585.8208,47.31289 556.90024,66.95875 C 555.86008,67.6613 554.83266,68.3809 553.80952,69.09027 C 537.76339,80.20832 523.22638,92.01613 510.53954,103.94073 C 469.71651,142.3253 448.13908,182.09957 457.9441,205.40142 C 458.64326,207.00432 459.47666,208.53477 460.44865,209.98421 C 470.9869,225.48468 497.10452,228.164 530.20287,219.84252 C 532.45376,219.27977 534.70465,218.64248 537.02375,217.97744 C 547.59613,214.92507 558.82075,210.80271 570.38215,205.72116 C 573.16164,204.49339 575.97102,203.23153 578.80168,201.8844 C 579.09156,201.74799 579.36441,201.61157 579.65429,201.4581 C 616.14602,183.32648 644.19054,162.46352 650.26113,149.92843 C 651.59121,147.20181 651.91093,144.87713 651.00716,143.05426 C 646.67592,134.27238 616.36771,140.20526 579.65429,156.10986 C 576.70426,157.38876 573.72012,158.70478 570.70188,160.10647 C 573.1574,157.82661 575.71311,155.53819 578.32208,153.28558 C 582.48283,149.7012 586.79064,146.19613 591.37768,142.73454 C 598.55668,137.29827 605.81453,132.38383 612.95941,128.027 C 646.41584,102.78633 663.32951,78.90978 659.79971,70.04947 C 659.13466,68.38004 657.71934,67.23158 655.53665,66.53244 C 648.56227,64.31397 635.83282,66.96173 620.36646,73.30004 C 607.61142,78.53168 592.96142,86.29084 578.10894,95.94752 C 578.10894,95.94752 576.08399,97.27972 576.08399,97.27972 C 576.08401,97.27972 575.71097,97.49286 575.71097,97.49286 C 575.71099,97.49288 568.57036,102.23551 568.57036,102.23551 C 568.57034,102.2355 572.67355,94.72188 572.67355,94.72188 C 578.7612,83.57824 588.67705,71.95121 601.02285,61.15034 C 610.07758,53.25345 620.42188,45.81272 631.55698,39.30218 C 635.76889,36.83645 639.97438,34.54632 644.18627,32.4813 C 648.50049,30.37361 652.81682,28.50041 657.02873,26.83271 C 669.26555,21.99341 680.94654,19.05291 691.13315,18.25331 C 690.20548,18.25331 662.51741,18.25331 662.51741,18.25331 C 662.51742,18.25331 566.06582,18.25331 566.06582,18.25331 C 566.06583,18.25331 140.77287,18.25331 140.77287,18.25331 C 140.77287,18.25331 107.04146,18.25331 107.04146,18.25331 z M 413.02217,18.62641 C 411.35108,44.13137 416.2962,81.48852 427.51656,122.96461 C 429.51165,130.34482 431.68368,137.85546 434.071,145.45223 C 435.55456,150.14327 437.08499,154.76104 438.65378,159.30715 C 437.73298,160.66111 436.80574,162.00652 435.93608,163.35705 C 421.93623,184.81213 413.75328,205.08809 411.68997,222.72008 C 405.77283,202.9054 401.31796,181.20178 398.79423,158.1881 C 398.07804,151.594 397.51744,145.07368 397.14229,138.63135 C 394.37982,91.83496 400.48878,49.41415 413.02217,18.62641 z M 133.63227,51.82491 C 133.95161,51.81737 134.26641,51.82491 134.59145,51.82491 C 134.59145,51.82489 197.63136,51.82491 197.63136,51.82491 C 203.01987,51.82489 207.187,52.83482 210.15408,54.86233 C 213.1041,56.90179 214.21039,59.53976 213.51123,62.74898 C 213.51125,62.749 205.9976,96.69354 205.9976,96.69354 C 205.9976,96.69357 183.77644,96.69354 183.77644,96.69354 C 183.77646,96.69357 191.07692,63.65488 191.07692,63.65488 C 191.0769,63.65488 135.44407,63.65488 135.44407,63.65488 C 135.44405,63.65488 115.35442,154.45793 115.35442,154.45793 C 115.35444,154.45793 108.10723,187.33674 108.10723,187.33674 C 108.10723,187.33677 163.6868,187.33674 163.6868,187.33674 C 163.6868,187.33677 163.74009,187.12358 163.74009,187.12358 C 163.74009,187.1236 174.87731,136.81954 174.87731,136.81954 C 174.87731,136.81952 148.76611,136.81954 148.76611,136.81954 C 148.76611,136.81952 151.27065,125.46916 151.27065,125.46916 C 151.27064,125.46914 199.60303,125.46916 199.60303,125.46916 C 199.60303,125.46914 185.7481,188.24264 185.7481,188.24264 C 185.56053,189.13616 185.23228,189.94572 184.78891,190.74717 C 183.64642,192.82754 181.65344,194.60951 178.87393,196.076 C 175.02015,198.10523 170.4075,199.11342 165.019,199.11342 C 165.019,199.11344 102.03238,199.11342 102.03238,199.11342 C 96.643856,199.11344 92.476736,198.10521 89.509656,196.076 C 86.559646,194.0468 85.436306,191.45527 86.152506,188.24264 C 86.152516,188.24262 113.91564,62.74898 113.91564,62.74898 C 114.63182,59.53977 116.86569,56.90177 120.73653,54.86233 C 120.87295,54.78902 121.02642,54.77238 121.16283,54.70247 C 124.69585,52.93277 128.8422,51.93804 133.63227,51.82491 z M 232.42855,51.82491 C 232.42853,51.82489 311.77463,51.82491 311.77463,51.82491 C 317.09494,51.82489 321.27698,52.83482 324.24406,54.86233 C 327.22823,56.90179 328.37072,59.53976 327.65451,62.74898 C 327.65453,62.749 312.8404,129.67893 312.8404,129.67893 C 312.14128,132.86767 309.85413,135.46943 305.96623,137.51229 C 302.07833,139.56195 297.50193,140.603 292.16459,140.603 C 292.16457,140.603 234.50679,140.603 234.50679,140.603 C 234.50679,140.603 223.36956,190.85375 223.36956,190.85375 C 223.36956,190.85377 221.55776,199.11342 221.55776,199.11342 C 221.55777,199.11344 199.81618,199.11342 199.81618,199.11342 C 199.81618,199.11344 201.46811,191.65308 201.46811,191.65308 C 201.46811,191.6531 232.42855,51.82491 232.42855,51.82491 z M 342.04232,51.82491 C 342.04231,51.82489 363.7839,51.82491 363.7839,51.82491 C 363.78392,51.82489 339.16476,163.03732 339.16476,163.03732 C 339.16478,163.03734 333.78266,187.33674 333.78266,187.33674 C 333.78266,187.33677 385.79192,187.33674 385.79192,187.33674 C 386.3376,191.32528 386.97491,195.24256 387.657,199.11342 C 387.65698,199.11344 309.42995,199.11342 309.42995,199.11342 C 309.42997,199.11344 315.61138,171.19041 315.61138,171.19041 C 315.6114,171.19041 342.04232,51.82491 342.04232,51.82491 z M 251.559,63.65488 C 251.55902,63.65488 237.1179,128.77302 237.1179,128.77302 C 237.1179,128.773 291.31198,128.77302 291.31198,128.77302 C 291.31197,128.773 305.69978,63.65488 305.69978,63.65488 C 305.6998,63.65488 251.559,63.65488 251.559,63.65488 z M 205.9976,209.34475 C 206.21027,209.3376 206.42284,209.34475 206.63707,209.34475 C 209.1608,209.34477 211.36479,209.78811 213.13822,210.62366 C 215.03102,211.51037 216.38454,212.82766 217.13484,214.56699 C 217.86809,216.25518 218.05992,218.1714 217.66771,220.26883 C 217.66771,220.26884 217.50786,221.06816 217.50786,221.06816 C 217.50787,221.06813 211.27314,221.06816 211.27314,221.06816 C 211.27312,221.06813 211.32643,220.32211 211.32643,220.32211 C 211.48761,218.85668 211.30594,217.70432 210.74025,216.91168 C 210.66653,216.81227 210.55972,216.68105 210.47381,216.59195 C 210.33313,216.44832 210.12183,216.28415 209.94094,216.16564 C 209.06856,215.61614 207.70391,215.31302 205.94432,215.31302 C 203.60817,215.31304 201.86245,215.72014 200.6688,216.53866 C 199.50924,217.34012 198.776,218.23536 198.53727,219.30964 C 198.29852,220.40098 198.69073,220.97436 198.96358,221.2813 C 198.97208,221.28979 199.00651,221.32507 199.01685,221.33459 C 199.36237,221.62904 200.56221,222.31935 204.29238,223.19967 C 207.6687,224.01818 209.9047,224.75356 211.16656,225.38449 C 213.07643,226.35645 214.41075,227.61619 215.1099,229.16795 C 215.80901,230.70267 215.9625,232.49952 215.5362,234.44348 C 215.1099,236.33627 214.14431,238.082 212.71192,239.71902 C 211.2966,241.35602 209.49545,242.65199 207.32981,243.55575 C 205.18121,244.44247 202.82377,244.94124 200.40235,244.94124 C 197.33295,244.94123 194.86892,244.47657 192.94201,243.55575 C 190.92984,242.60084 189.47827,241.09385 188.62567,239.13284 C 187.80716,237.22298 187.63237,235.05522 188.09278,232.68498 C 188.09278,232.68495 188.25265,231.93893 188.25265,231.93893 C 188.25265,231.93893 194.38079,231.93893 194.38079,231.93893 C 194.38079,231.93893 194.3275,232.68498 194.3275,232.68498 C 194.17402,234.1003 194.32537,235.2428 194.70052,236.09541 C 195.05861,236.91394 195.74071,237.59174 196.83204,238.12037 C 197.99158,238.68307 199.44102,238.97297 201.09509,238.97297 C 202.57864,238.97296 203.9343,238.72358 205.145,238.28024 C 206.33865,237.85394 207.28718,237.2912 207.96927,236.57501 C 208.63429,235.85879 209.02438,235.10213 209.1949,234.28361 C 209.36542,233.55037 209.32492,232.93011 209.03503,232.41853 C 208.71104,231.87289 208.06945,231.389 207.06338,230.97975 C 207.06338,230.97974 201.84112,229.43439 201.84112,229.43439 C 198.9252,228.70116 196.96207,228.00201 195.81957,227.30287 C 194.2678,226.38206 193.14876,225.20118 192.56898,223.78585 C 191.98921,222.38754 191.9274,220.83794 192.30255,219.14977 C 192.69475,217.34224 193.56654,215.6221 194.91366,214.0874 C 196.27786,212.53563 198.03848,211.31855 200.13591,210.51709 C 201.99034,209.82169 203.94187,209.41388 205.9976,209.34475 z M 261.9502,209.45133 C 262.28745,209.42506 262.60456,209.45133 262.96267,209.45133 C 262.96268,209.45133 266.79942,209.87763 266.79942,209.87763 C 266.79941,209.87763 268.07833,209.98421 268.07833,209.98421 C 268.07835,209.98422 266.21325,214.72685 266.21325,214.72685 C 266.21324,214.72687 265.84023,215.47289 265.84023,215.47289 C 265.84023,215.47287 262.90939,215.20645 262.90939,215.20645 C 262.04398,215.20645 261.40826,215.33997 260.99101,215.63275 C 260.9633,215.65368 260.91001,215.71695 260.88443,215.73933 C 260.82853,215.78837 260.73452,215.87391 260.67128,215.95249 C 260.41469,216.289 260.10216,216.89035 259.87196,217.97744 C 259.87194,217.97744 259.76112,218.43784 259.65881,218.83005 C 261.00594,218.83006 264.24158,218.83005 264.24158,218.83005 C 264.24158,218.83006 263.06925,224.10557 263.06925,224.10557 C 263.06925,224.10556 259.71849,224.10557 258.59305,224.10557 C 258.25199,225.64026 254.06355,244.40837 254.06355,244.40837 C 254.06353,244.40835 247.88212,244.40837 247.88212,244.40837 C 247.8821,244.40835 251.90005,226.37352 252.41162,224.10557 C 251.37141,224.10556 248.84131,224.10557 248.84131,224.10557 C 248.84131,224.10556 250.01365,218.83005 250.01365,218.83005 C 250.01366,218.83006 252.55869,218.83005 253.53066,218.83005 C 253.70118,218.09681 253.95696,217.17811 253.95696,217.17811 C 254.33212,215.47289 254.72431,214.24726 255.23587,213.39465 C 255.93504,212.21806 256.92193,211.23328 258.16674,210.51709 C 259.19201,209.92134 260.48872,209.56515 261.9502,209.45133 z M 276.71102,209.71777 C 276.711,209.71776 275.09532,216.98841 274.68607,218.83005 C 275.87971,218.83006 278.68268,218.83005 278.68268,218.83005 C 278.68268,218.83006 277.51035,224.10557 277.51035,224.10557 C 277.51033,224.10556 274.57096,224.10557 273.51373,224.10557 C 273.18972,225.57204 270.63617,236.94803 270.63617,236.94803 C 270.63619,236.94801 270.42301,238.31434 270.42301,238.70654 C 270.42329,238.71959 270.42195,238.75022 270.42301,238.75982 C 270.42385,238.76385 270.42181,238.80979 270.42301,238.81311 C 270.42465,238.8158 270.47416,238.81097 270.47629,238.81311 C 270.47629,238.81309 271.11576,238.8664 271.11576,238.8664 C 271.11576,238.8664 274.04661,238.65325 274.04661,238.65325 C 274.04661,238.65325 273.72688,243.39589 273.72688,243.39589 C 273.7269,243.39589 273.78018,244.2485 273.78018,244.2485 C 273.78016,244.24848 269.5704,244.7281 269.5704,244.7281 C 267.8993,244.72808 266.67365,244.45527 265.78694,243.8755 C 264.84909,243.26158 264.3034,242.44736 264.08172,241.42424 C 264.04761,241.23665 263.97514,240.96382 263.97514,240.57163 C 263.97514,239.80427 264.12009,238.50618 264.6146,236.25529 C 264.61462,236.25531 266.85483,226.22005 267.3323,224.10557 C 266.53087,224.10556 264.40145,224.10557 264.40145,224.10557 C 264.40147,224.10556 265.57378,218.83005 265.57378,218.83005 C 265.57376,218.83006 267.65202,218.83005 268.50464,218.83005 C 268.77745,217.6023 269.73026,213.39465 269.73026,213.39465 C 269.73026,213.39467 274.68607,210.78353 274.68607,210.78353 C 274.68606,210.78355 276.71102,209.71777 276.71102,209.71777 z M 80.344086,209.93092 C 80.344106,209.93092 104.32377,209.93092 104.32377,209.93092 C 104.32377,209.93092 102.99157,215.8992 102.99157,215.8992 C 102.99157,215.89922 86.994456,215.8992 85.459756,215.8992 C 85.186936,217.10993 84.093446,222.01242 83.701246,223.78585 C 85.918046,223.78585 98.888376,223.78585 98.888376,223.78585 C 98.888376,223.78585 97.556166,229.75411 97.556166,229.75411 C 97.556156,229.75411 83.903746,229.75411 82.369036,229.75411 C 82.045046,231.23766 79.118456,244.40837 79.118456,244.40837 C 79.118476,244.40835 72.670596,244.40837 72.670596,244.40837 C 72.670606,244.40835 80.344086,209.93092 80.344086,209.93092 z M 112.47685,218.35046 C 112.71752,218.3209 112.98043,218.35046 113.22289,218.35046 C 114.75759,218.35046 116.17506,218.81726 117.53924,219.78923 C 117.53924,219.78925 118.39184,220.3754 118.39184,220.3754 C 118.39184,220.3754 115.08798,225.8108 115.08798,225.8108 C 115.08798,225.81078 114.18209,225.17134 114.18209,225.17134 C 113.51705,224.74505 112.80086,224.53188 112.05056,224.53188 C 111.40257,224.5319 110.79935,224.76208 110.18547,225.17134 C 109.5375,225.59764 108.99607,226.16249 108.58683,226.92985 C 107.87063,228.24289 107.34627,229.71362 106.98818,231.29948 C 106.98818,231.29949 104.11062,244.40837 104.11062,244.40837 C 104.11062,244.40835 97.929186,244.40837 97.929186,244.40837 C 97.929186,244.40835 103.63103,218.83005 103.63103,218.83005 C 103.63105,218.83006 109.38615,218.83005 109.38615,218.83005 C 109.38615,218.83006 109.18791,219.60593 109.1197,219.89581 C 109.39254,219.6912 109.68029,219.40982 109.91903,219.25635 C 110.745,218.76345 111.6174,218.456 112.47685,218.35046 z M 130.80799,218.35046 C 131.18018,218.32231 131.54658,218.35046 131.92705,218.35046 C 135.40571,218.35046 138.03813,219.56968 139.7604,221.97405 C 140.83468,223.52579 141.41235,225.44417 141.41235,227.72917 C 141.41235,228.99102 141.25674,230.34882 140.93276,231.83236 C 140.93276,231.83236 140.45315,233.69745 140.45315,233.69745 C 140.45315,233.69743 124.82054,233.69745 123.08121,233.69745 C 123.0471,234.05553 123.02792,234.43922 123.02792,234.76321 C 123.02792,236.0933 123.30075,237.13986 123.88053,237.90722 C 124.15603,238.28235 124.47543,238.62021 124.83972,238.8664 C 125.5265,239.31429 126.41306,239.55915 127.45084,239.55915 C 128.71272,239.55913 129.82109,239.2117 130.86128,238.54667 C 131.85033,237.91574 132.79672,236.90753 133.63227,235.50925 C 133.63227,235.50922 140.24,235.50925 140.24,235.50925 C 140.24,235.50922 139.65384,236.78816 139.65384,236.78816 C 138.39197,239.34601 136.63133,241.3411 134.43159,242.75644 C 132.23186,244.17177 129.60368,244.94124 126.7048,244.94124 C 122.93626,244.94123 120.13117,243.72202 118.39184,241.31766 C 116.66958,238.96443 116.29869,235.71173 117.21951,231.6192 C 118.14034,227.45847 119.97771,224.13329 122.6549,221.81418 C 125.05448,219.73356 127.77735,218.5795 130.80799,218.35046 z M 158.57114,218.35046 C 158.94332,218.32231 159.30971,218.35046 159.69018,218.35046 C 163.16885,218.35046 165.80128,219.56968 167.52355,221.97405 C 168.59784,223.52579 169.17548,225.44417 169.17548,227.72917 C 169.17548,228.97397 169.01988,230.31258 168.69588,231.77907 C 168.69588,231.77909 168.2163,233.69745 168.2163,233.69745 C 168.2163,233.69743 152.58367,233.69745 150.84435,233.69745 C 150.82728,233.93615 150.80811,234.15147 150.79106,234.3902 C 150.77827,234.47972 150.79666,234.61561 150.79106,234.70992 C 150.79056,234.7253 150.79106,234.74829 150.79106,234.76321 C 150.79106,235.01901 150.8273,235.27051 150.84435,235.50925 C 150.92958,236.48121 151.18327,237.29334 151.64367,237.90722 C 151.73134,238.02658 151.81375,238.17392 151.91011,238.28024 C 152.69112,239.11578 153.79651,239.55915 155.21398,239.55915 C 156.47586,239.55913 157.60129,239.2117 158.62443,238.54667 C 159.61347,237.91574 160.55985,236.90753 161.39541,235.50925 C 161.39541,235.50922 168.05643,235.50925 168.05643,235.50925 C 168.05642,235.50922 167.41697,236.78816 167.41697,236.78816 C 166.15511,239.34601 164.39447,241.3411 162.19473,242.75644 C 159.99499,244.17177 157.36682,244.94124 154.46795,244.94124 C 150.69942,244.94123 147.89432,243.72202 146.15499,241.31766 C 145.02954,239.78294 144.50305,237.82835 144.50305,235.50925 C 144.50305,235.15113 144.52223,234.76534 144.55634,234.3902 C 144.62457,233.50349 144.76097,232.60824 144.98265,231.6192 C 145.90349,227.47552 147.68756,224.13329 150.36475,221.81418 C 152.76432,219.73356 155.5405,218.5795 158.57114,218.35046 z M 234.18705,218.35046 C 234.56789,218.32117 234.91817,218.35046 235.3061,218.35046 C 238.85297,218.35046 241.5792,219.5505 243.35262,221.92076 C 245.10902,224.29099 245.53531,227.4883 244.63153,231.51262 C 243.9324,234.65025 242.92206,237.18462 241.54083,239.02627 C 240.15957,240.86792 238.39895,242.37276 236.31857,243.39589 C 234.25529,244.41903 232.07044,244.94124 229.87071,244.94124 C 226.25564,244.94123 223.56352,243.70496 221.82419,241.31766 C 220.69873,239.80002 220.11897,237.8454 220.11897,235.50925 C 220.11899,234.24738 220.25753,232.90665 220.59857,231.40606 C 221.62172,226.83605 223.71059,223.35528 226.78,221.12144 C 229.03301,219.4951 231.52114,218.55538 234.18705,218.35046 z M 327.81438,218.35046 C 328.26398,218.32271 328.68031,218.35046 329.14658,218.35046 C 331.29517,218.35046 332.98333,218.56786 334.26225,219.09648 C 335.62643,219.64217 336.59414,220.41377 337.13981,221.33459 C 337.66845,222.20422 337.93914,223.27215 337.93914,224.58516 C 337.93915,224.58518 337.29966,228.4752 337.29966,228.4752 C 337.29969,228.4752 336.12734,233.75074 336.12734,233.75074 C 335.12123,238.2525 334.89958,239.94069 334.84841,240.57163 C 334.79726,241.42425 334.87612,242.25553 335.11486,243.02288 C 335.11488,243.02286 335.54116,244.40837 335.54116,244.40837 C 335.54118,244.40835 329.25316,244.40837 329.25316,244.40837 C 329.25314,244.40835 328.98671,243.60904 328.98671,243.60904 C 328.8844,243.23392 328.91424,242.75644 328.88014,242.33013 C 327.68649,243.06338 326.4907,243.71349 325.41641,244.08864 C 323.83057,244.63433 322.18502,244.94124 320.5139,244.94124 C 317.61504,244.94123 315.46858,244.1867 314.1726,242.70314 C 313.18358,241.61181 312.73383,240.27747 312.73383,238.75982 C 312.73381,238.18005 312.81056,237.57895 312.94697,236.94803 C 313.23685,235.65206 313.76335,234.452 314.59891,233.37771 C 315.41742,232.32045 316.38514,231.45082 317.47647,230.81989 C 318.53373,230.18897 319.71245,229.74134 320.94021,229.43439 C 320.94019,229.43439 324.72367,228.79493 324.72367,228.79493 C 327.63961,228.45387 329.81588,228.02972 331.38469,227.56931 C 331.41881,227.39879 331.49126,227.19629 331.49126,227.19629 C 331.73852,226.09911 331.70758,225.27441 331.43797,224.85161 C 331.41813,224.82434 331.35379,224.76847 331.3314,224.74503 C 331.27384,224.68368 331.18537,224.58724 331.11824,224.53188 C 330.47689,224.02435 329.38318,223.78585 327.92096,223.78585 C 326.26689,223.78585 325.0434,224.05656 324.19078,224.58516 C 323.35523,225.11379 322.58147,226.0815 321.89939,227.46272 C 321.89938,227.46271 315.45152,227.46272 315.45152,227.46272 C 315.45154,227.46271 316.03769,226.18381 316.03769,226.18381 C 316.80502,224.41036 317.71947,222.93963 318.86197,221.81418 C 320.00447,220.68871 321.54769,219.81694 323.33817,219.20307 C 324.71033,218.7501 326.20867,218.44953 327.81438,218.35046 z M 354.83149,218.35046 C 355.07195,218.3209 355.33505,218.35046 355.57752,218.35046 C 357.12925,218.35046 358.58297,218.81726 359.94715,219.78923 C 359.94717,219.78925 360.74647,220.3754 360.74647,220.3754 C 360.74648,220.3754 357.44261,225.8108 357.44261,225.8108 C 357.44262,225.81078 356.53671,225.17134 356.53671,225.17134 C 355.87168,224.74505 355.1917,224.53188 354.45847,224.53188 C 353.81046,224.5319 353.17103,224.76208 352.54008,225.17134 C 351.89211,225.59764 351.42104,226.16249 350.99474,226.92985 C 350.29558,228.24289 349.75418,229.71362 349.39609,231.29948 C 349.39607,231.29949 346.46524,244.40837 346.46524,244.40837 C 346.46526,244.40835 340.28382,244.40837 340.28382,244.40837 C 340.28382,244.40835 345.98564,218.83005 345.98564,218.83005 C 345.98563,218.83006 351.74076,218.83005 351.74076,218.83005 C 351.74076,218.83006 351.59582,219.60593 351.52762,219.89581 C 351.80044,219.6912 352.07115,219.40982 352.32694,219.25635 C 353.13957,218.76345 353.97265,218.456 354.83149,218.35046 z M 373.10932,218.35046 C 373.48117,218.32231 373.84791,218.35046 374.22838,218.35046 C 377.70704,218.35046 380.35651,219.56968 382.06175,221.97405 C 383.1531,223.52579 383.71368,225.44417 383.71368,227.72917 C 383.71366,228.99102 383.50478,230.34882 383.18079,231.83236 C 383.18079,231.83236 382.75449,233.69745 382.75449,233.69745 C 382.75448,233.69743 367.10481,233.69745 365.38255,233.69745 C 365.34844,234.05553 365.27596,234.43922 365.27596,234.76321 C 365.27596,236.0933 365.56585,237.13986 366.12858,237.90722 C 366.21624,238.02658 366.35158,238.17392 366.4483,238.28024 C 366.50432,238.33991 366.60242,238.43797 366.66146,238.49338 C 367.42381,239.1864 368.46127,239.55915 369.75216,239.55915 C 371.01405,239.55913 372.12243,239.2117 373.16261,238.54667 C 374.15166,237.91574 375.081,236.90753 375.9336,235.50925 C 375.93358,235.50922 382.59462,235.50925 382.59462,235.50925 C 382.59462,235.50922 381.95516,236.78816 381.95516,236.78816 C 380.69329,239.34601 378.91561,241.3411 376.73292,242.75644 C 374.51615,244.17177 371.92207,244.94124 369.00613,244.94124 C 365.23762,244.94123 362.48579,243.72202 360.74647,241.31766 C 359.02417,238.96443 358.61707,235.71173 359.52084,231.6192 C 360.44165,227.45847 362.22575,224.13329 364.90295,221.81418 C 367.3177,219.73356 370.08147,218.5795 373.10932,218.35046 z M 279.80172,218.83005 C 279.80174,218.83006 286.14303,218.83005 286.14303,218.83005 C 286.14305,218.83006 286.92529,234.00866 286.94234,234.23032 C 287.19812,233.68676 287.39658,233.22945 287.42195,233.16457 C 287.42196,233.16458 294.40269,218.83005 294.40269,218.83005 C 294.40271,218.83006 300.2111,218.83005 300.2111,218.83005 C 300.21109,218.83006 300.74398,233.82533 300.74398,233.91059 C 300.91453,233.60368 308.68392,218.83005 308.68392,218.83005 C 308.6839,218.83006 314.97193,218.83005 314.97193,218.83005 C 314.97192,218.83006 301.117,244.40837 301.117,244.40837 C 301.11702,244.40835 295.41517,244.40837 295.41517,244.40837 C 295.41517,244.40835 294.86311,230.53853 294.829,229.75411 C 292.47577,234.57991 287.68837,244.40837 287.68837,244.40837 C 287.68837,244.40835 281.82669,244.40837 281.82669,244.40837 C 281.82669,244.40835 279.80172,218.83005 279.80172,218.83005 z M 130.91457,223.67927 C 129.44564,223.74129 128.11162,224.27076 126.86468,225.27791 C 125.87566,226.06232 125.20847,227.13875 124.67985,228.31534 C 124.67985,228.31536 135.17762,228.31534 135.17762,228.31534 C 135.19469,228.12778 135.23091,227.8997 135.23091,227.72917 C 135.23089,226.75722 135.05825,226.00264 134.75132,225.49107 C 134.00104,224.2633 132.88837,223.67927 131.2343,223.67927 C 131.1352,223.67927 131.0125,223.67515 130.91457,223.67927 z M 158.6777,223.67927 C 157.20878,223.74129 155.87475,224.27076 154.6278,225.27791 C 153.63876,226.06232 152.98867,227.13875 152.443,228.31534 C 152.443,228.31536 162.94076,228.31534 162.94076,228.31534 C 162.9578,228.12778 162.99405,227.8997 162.99405,227.72917 C 162.99404,226.75722 162.83845,226.00264 162.51445,225.49107 C 162.36551,225.24168 162.16402,224.99368 161.98157,224.79833 C 161.26958,224.06261 160.28967,223.67927 158.99744,223.67927 C 158.89833,223.67927 158.77564,223.67515 158.6777,223.67927 z M 373.42906,223.67927 C 371.9185,223.7258 370.50781,224.23721 369.21929,225.27791 C 368.24731,226.06232 367.58014,227.13875 367.03447,228.31534 C 367.03449,228.31536 377.47896,228.31534 377.47896,228.31534 C 377.49599,228.12778 377.53225,227.8997 377.53225,227.72917 C 377.53224,226.75722 377.37665,226.00264 377.05265,225.49107 C 376.31941,224.28035 375.18969,223.69633 373.53563,223.67927 C 373.48661,223.6798 373.47779,223.67777 373.42906,223.67927 z M 233.81404,223.78585 C 232.40441,223.95324 231.09368,224.59636 229.87071,225.70422 C 228.40423,227.03431 227.34059,229.12319 226.72672,231.88565 C 226.47093,233.0452 226.35369,234.03636 226.35369,234.92307 C 226.35371,236.13377 226.58602,237.08444 227.04644,237.80063 C 227.16901,237.98447 227.3316,238.17874 227.47275,238.33352 C 228.23079,239.1384 229.28934,239.55915 230.61675,239.55915 C 232.33901,239.55913 233.85667,238.91756 235.3061,237.58748 C 236.77262,236.24034 237.81917,234.13014 238.4501,231.29948 C 239.0299,228.70753 238.94888,226.77212 238.13038,225.54436 C 237.34598,224.3507 236.19922,223.78585 234.61337,223.78585 C 234.34426,223.78585 234.07507,223.75484 233.81404,223.78585 z M 330.10577,233.11128 C 328.65636,233.50346 327.0321,233.83386 324.88353,234.12376 C 323.28064,234.3625 322.13812,234.614 321.47308,234.86979 C 320.89332,235.10851 320.4265,235.4389 320.0343,235.88227 C 319.65914,236.30854 319.40764,236.75619 319.28828,237.26776 C 319.25419,237.4724 319.23498,237.6834 319.23498,237.85393 C 319.23498,237.86777 319.23467,237.89351 319.23498,237.90722 C 319.23677,237.9478 319.23053,238.02792 319.23498,238.06707 C 319.24566,238.14444 319.26715,238.26147 319.28828,238.33352 C 319.2959,238.35725 319.33279,238.41691 319.34155,238.44009 C 319.36021,238.48593 319.3717,238.5562 319.39484,238.59996 C 319.41911,238.64322 319.47274,238.71845 319.50142,238.75982 C 319.54606,238.82119 319.60692,238.91542 319.66129,238.97297 C 320.0876,239.45043 320.93807,239.66572 322.16583,239.66572 C 323.51298,239.66573 324.80893,239.40994 326.00258,238.81311 C 327.1792,238.23334 328.12771,237.36793 328.82685,236.36185 C 329.33844,235.64565 329.74768,234.54365 330.10577,233.11128 z"
    +         id="path2579" />
    +      <path
    +         d="M 373.60344,223.69791 C 373.58638,223.69791 373.56933,223.69791 373.55228,223.69791 C 375.20635,223.71496 376.29769,224.27769 377.03093,225.48839 C 377.35493,225.99996 377.52545,226.76731 377.52545,227.73929 C 377.52545,227.90981 377.49134,228.13149 377.47429,228.31906 C 377.47429,228.31906 377.5425,228.31906 377.5425,228.31906 C 377.5425,228.13149 377.5766,227.90981 377.5766,227.73929 C 377.5766,226.76731 377.42313,225.99996 377.09914,225.48839 C 376.3659,224.26063 375.2575,223.69791 373.60344,223.69791 z"
    +         id="path2583"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter" />
    +      <g
    +         id="g2587"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,26.564476,303.23111)">
    +        <path
    +           id="path2589"
    +           d="M 0,36 C 0,36 7.46,36 7.46,36 C 7.46,36 10.81,22 10.81,22 C 10.81,22 22.93,22 22.93,22 C 22.93,22 24.49,16 24.49,16 C 24.49,16 12.32,16 12.32,16 C 12.32,16 14.34,7 14.34,7 C 14.34,7 27.29,7 27.29,7 C 27.29,7 28.85,0 28.85,0 C 28.85,0 8.4,0 8.4,0 C 8.4,0 0,36 0,36 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2591"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,70.814976,320.28331)">
    +        <path
    +           id="path2593"
    +           d="M 7.51,26 C 7.51,26 9.75,16.6 9.75,16.6 C 10.93,11.51 13.42,7 18.13,7 C 18.55,7 18.96,7.21 19.27,7.26 C 19.27,7.26 21.09,0.05 21.09,0.05 C 20.67,0.05 20.21,0 19.69,0 C 16.22,0 13.31,2.44 11.37,5.94 C 11.37,5.94 11.17,5.94 11.17,5.94 C 11.46,4.23 11.71,2.61 11.9,1 C 11.9,1 5.47,1 5.47,1 C 5.1,3.08 4.53,7.15 3.66,10.82 C 3.66,10.82 0,26 0,26 C 0,26 7.51,26 7.51,26 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2595"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,105.99378,320.28331)">
    +        <path
    +           id="path2597"
    +           d="M 20.06,19.25 C 17.99,20.26 15.63,20 12.88,20 C 10.71,20 9.03,19.62 8.11,18.88 C 7.63,18.07 7.43,16.81 7.47,16 C 17.6,16.27 23.99,13.93 24.31,7.53 C 24.55,2.7 21.02,0 15.89,0 C 6.73,0 0.73,8.08 0.34,15.86 C 0,22.65 3.52,26 10.78,26 C 13.57,26 17.27,25.68 20.3,24.77 C 20.3,24.77 20.06,19.25 20.06,19.25 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.47,10 C 9.1,7.91 11.22,6 14.69,6 C 16.4,6 17.38,6.65 17.32,7.53 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2599"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,151.21628,320.28331)">
    +        <path
    +           id="path2601"
    +           d="M 20.05,19.25 C 17.98,20.26 15.62,20 12.88,20 C 10.7,20 9.03,19.62 8.11,18.88 C 7.63,18.07 7.42,16.81 7.46,16 C 17.6,16.27 23.98,13.93 24.31,7.53 C 24.55,2.7 21.02,0 15.89,0 C 6.72,0 0.72,8.08 0.33,15.86 C 0,22.65 3.52,26 10.77,26 C 13.57,26 17.27,25.68 20.3,24.77 C 20.3,24.77 20.05,19.25 20.05,19.25 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.46,10 C 9.1,7.91 11.21,6 14.68,6 C 16.39,6 17.38,6.65 17.32,7.53 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2603"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,212.45078,320.28331)">
    +        <path
    +           id="path2605"
    +           d="M 22.74,26 C 22.8,22.83 23.56,17.85 24.35,14.58 C 24.35,14.58 27.56,1 27.56,1 C 25.52,0.31 22.34,0 19.28,0 C 6.86,0 0.7,9.2 0.27,17.82 C 0,23.23 2.93,26 7.49,26 C 10.44,26 13.77,24.57 16.36,20.27 C 16.36,20.27 16.47,20.27 16.47,20.27 C 16.27,22.34 16.03,24.35 15.9,26 C 15.9,26 22.74,26 22.74,26 z M 17.61,11.72 C 16.15,18.08 13.17,20 10.95,20 C 8.88,20 7.98,18.53 8.1,16.39 C 8.34,11.56 12.16,6 16.98,6 C 17.76,6 18.37,5.86 18.94,5.72 C 18.94,5.72 17.61,11.72 17.61,11.72 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2607"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,259.56608,320.28331)">
    +        <path
    +           id="path2609"
    +           d="M 0,24.82 C 1.44,25.94 4.46,25.95 7.61,26 C 14.34,26.05 19.42,23.11 19.72,17.71 C 19.89,14.11 17.1,11.98 14.37,10.55 C 12.4,9.6 11.41,8.69 11.46,7.63 C 11.53,6.2 12.87,6 14.84,6 C 17.06,6 18.84,6.27 19.86,6.47 C 19.86,6.47 21.88,1.05 21.88,1.05 C 20.73,0.36 18.43,0 15.48,0 C 8.95,0 4.17,3.45 3.9,8.69 C 3.74,11.93 6.07,14.11 8.89,15.59 C 11.17,16.76 11.95,17.66 11.89,18.93 C 11.82,20.21 10.68,20 8.61,20 C 6.18,20 3.49,19.68 2.07,19.46 C 2.07,19.46 0,24.82 0,24.82 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2611"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,314.90048,301.52591)">
    +        <path
    +           id="path2613"
    +           d="M 7.45,37 C 7.45,37 13.5,12 13.5,12 C 13.5,12 6.09,12 6.09,12 C 6.09,12 0,37 0,37 C 0,37 7.45,37 7.45,37 z M 10.92,9 C 13.46,9 15.72,6.9 15.86,3.3 C 15.98,0.86 14.4,0 12.07,0 C 9.64,0 7.42,1.58 7.29,3.94 C 7.17,6.32 8.75,9 10.92,9 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2615"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,339.26808,321.45991)">
    +        <path
    +           id="path2617"
    +           d="M 7.46,25.31 C 7.46,25.31 10.1,14.05 10.1,14.05 C 11.47,8.32 14.42,6.31 16.85,6.31 C 18.77,6.31 19.33,7.13 19.24,8.32 C 19.19,9.28 19.04,10.29 18.84,11.19 C 18.84,11.19 15.48,25.31 15.48,25.31 C 15.48,25.31 22.94,25.31 22.94,25.31 C 22.94,25.31 26.48,10.5 26.48,10.5 C 26.75,9.22 27.05,7.31 27.11,6.15 C 27.33,1.64 25.08,0 20.94,0 C 17.62,0 14.39,1.54 11.84,4.88 C 11.84,4.88 11.74,4.88 11.74,4.88 C 11.74,4.88 12.42,0.31 12.42,0.31 C 12.42,0.31 5.84,0.31 5.84,0.31 C 5.41,2.45 4.86,5.04 4.08,8.06 C 4.08,8.06 0,25.31 0,25.31 C 0,25.31 7.46,25.31 7.46,25.31 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2619"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,406.72668,303.23111)">
    +        <path
    +           id="path2621"
    +           d="M 0,36 C 0,36 7.46,36 7.46,36 C 7.46,36 10.82,22 10.82,22 C 10.82,22 22.93,22 22.93,22 C 22.93,22 24.49,16 24.49,16 C 24.49,16 12.32,16 12.32,16 C 12.32,16 14.34,7 14.34,7 C 14.34,7 27.29,7 27.29,7 C 27.29,7 28.85,0 28.85,0 C 28.85,0 8.4,0 8.4,0 C 8.4,0 0,36 0,36 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2623"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,450.97718,320.28331)">
    +        <path
    +           id="path2625"
    +           d="M 7.51,26 C 7.51,26 9.75,16.6 9.75,16.6 C 10.93,11.51 13.42,7 18.13,7 C 18.55,7 18.96,7.21 19.27,7.26 C 19.27,7.26 21.09,0.05 21.09,0.05 C 20.67,0.05 20.21,0 19.69,0 C 16.22,0 13.31,2.44 11.37,5.94 C 11.37,5.94 11.17,5.94 11.17,5.94 C 11.46,4.23 11.71,2.61 11.9,1 C 11.9,1 5.47,1 5.47,1 C 5.11,3.08 4.53,7.15 3.66,10.82 C 3.66,10.82 0,26 0,26 C 0,26 7.51,26 7.51,26 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2627"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,486.15598,320.28331)">
    +        <path
    +           id="path2629"
    +           d="M 20.06,19.25 C 17.99,20.26 15.63,20 12.88,20 C 10.71,20 9.03,19.62 8.11,18.88 C 7.63,18.07 7.43,16.81 7.47,16 C 17.6,16.27 23.99,13.93 24.31,7.53 C 24.55,2.7 21.02,0 15.89,0 C 6.73,0 0.73,8.08 0.34,15.86 C 0,22.65 3.53,26 10.78,26 C 13.57,26 17.28,25.68 20.3,24.77 C 20.3,24.77 20.06,19.25 20.06,19.25 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.47,10 C 9.1,7.91 11.22,6 14.69,6 C 16.4,6 17.38,6.65 17.32,7.53 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2631"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,531.37838,320.28331)">
    +        <path
    +           id="path2633"
    +           d="M 20.05,19.25 C 17.98,20.26 15.62,20 12.88,20 C 10.7,20 9.03,19.62 8.11,18.88 C 7.63,18.07 7.42,16.81 7.46,16 C 17.6,16.27 23.98,13.93 24.31,7.53 C 24.55,2.7 21.02,0 15.89,0 C 6.72,0 0.72,8.08 0.33,15.86 C 0,22.65 3.52,26 10.77,26 C 13.57,26 17.27,25.68 20.3,24.77 C 20.3,24.77 20.05,19.25 20.05,19.25 z M 17.32,7.53 C 17.2,9.91 14.26,10.05 8.46,10 C 9.1,7.91 11.21,6 14.68,6 C 16.39,6 17.38,6.65 17.32,7.53 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2635"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,576.36218,301.52591)">
    +        <path
    +           id="path2637"
    +           d="M 23.31,0 C 23.31,0 20.5,11.36 20.5,11.36 C 19.48,10.94 18.15,11 17.11,11 C 7.53,11 0.75,19.2 0.3,28.08 C 0,34.34 3.34,37 7.64,37 C 10.65,37 13.82,35.67 16.22,32.23 C 16.22,32.23 16.32,32.23 16.32,32.23 C 16.32,32.23 15.75,37 15.75,37 C 15.75,37 22.53,37 22.53,37 C 22.84,34 23.49,30.43 24.22,27.17 C 24.22,27.17 30.71,0 30.71,0 C 30.71,0 23.31,0 23.31,0 z M 17.47,24.42 C 16.3,29.35 13.54,31 11.36,31 C 9.19,31 7.98,29.49 8.13,26.8 C 8.38,21.82 11.8,17 16.25,17 C 17.5,17 18.57,17.19 19.16,17.47 C 19.16,17.47 17.47,24.42 17.47,24.42 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2639"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,627.02428,320.28331)">
    +        <path
    +           id="path2641"
    +           d="M 10.61,26 C 19.31,26 26.02,19.41 26.49,10.44 C 26.78,4.5 23.08,0 16.25,0 C 7.23,0 0.76,7.3 0.31,16.12 C 0,22.54 4.14,26 10.61,26 z M 11.78,20 C 9.24,20 7.84,18.38 7.99,15.96 C 8.19,11.93 10.68,6 14.97,6 C 17.93,6 18.84,8.27 18.72,10.5 C 18.5,14.9 15.82,20 11.78,20 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <g
    +         id="g2643"
    +         style="fill:#bd0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1pt;stroke-linecap:butt;stroke-linejoin:miter"
    +         transform="matrix(1.705222,0,0,1.705222,675.72548,320.28331)">
    +        <path
    +           id="path2645"
    +           d="M 7.2,26 C 7.2,26 9.9,14.58 9.9,14.58 C 11.03,9.49 13.85,6 16.38,6 C 18.2,6 18.7,7.33 18.61,9.07 C 18.56,9.97 18.36,10.98 18.15,11.98 C 18.15,11.98 14.81,26 14.81,26 C 14.81,26 22.01,26 22.01,26 C 22.01,26 24.71,14.53 24.71,14.53 C 25.95,9.28 28.61,6 31.09,6 C 32.8,6 33.51,7.22 33.43,8.96 C 33.38,9.97 33.17,11.08 32.91,12.09 C 32.91,12.09 29.67,26 29.67,26 C 29.67,26 36.92,26 36.92,26 C 36.92,26 40.41,11.19 40.41,11.19 C 40.68,9.86 40.99,7.79 41.04,6.73 C 41.26,2.33 39.11,0 35.23,0 C 31.91,0 28.68,1.5 26.23,4.66 C 26.14,2.38 24.51,0 20.47,0 C 17.2,0 14.08,1.48 11.58,4.83 C 11.58,4.83 11.48,4.83 11.48,4.83 C 11.48,4.83 12.15,1 12.15,1 C 12.15,1 5.73,1 5.73,1 C 5.31,3.14 4.8,5.73 4.02,8.75 C 4.02,8.75 0,26 0,26 C 0,26 7.2,26 7.2,26 z"
    +           style="fill:#bd0000;fill-opacity:1" />
    +      </g>
    +      <path
    +         style="fill:#bd0000;fill-opacity:0;fill-rule:evenodd;stroke:#bd0000;stroke-width:8.52610779;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
    +         id="path2647"
    +         d="M 417.07944,250.20635 C 417.77165,251.98597 418.46389,253.76268 419.18494,255.50045 C 420.2954,257.86122 421.5789,260.12105 423.12198,262.2309 C 431.45755,273.56176 445.41744,279.76585 463.14129,281.31037 C 463.14129,281.31037 482.20635,281.31037 482.20635,281.31037 C 488.23446,280.84023 494.55102,279.96341 501.09833,278.68278 C 512.39026,276.47488 524.36,273.08298 536.79121,268.55034 C 546.20836,265.11659 555.88511,261.0541 565.70606,256.33256 C 587.09294,246.08041 609.18647,232.85747 630.86181,216.90021 C 638.00038,211.64939 644.85053,206.26158 651.42668,200.78291 C 657.45481,195.76715 663.23778,190.67349 668.76114,185.52364 C 684.17759,170.66675 695.81564,155.57767 702.40621,142.32874 C 709.27073,128.53184 710.64082,116.73516 705.01649,109.30381 C 701.56976,104.74235 695.80122,102.29792 688.37421,101.72251 C 721.83174,76.6178 741.32949,46.16418 734.33517,26.96361 C 732.11421,20.83591 727.22536,16.26441 720.21659,13.73631 C 717.10162,12.61581 713.59716,11.90621 709.77549,11.58321 C 709.77549,11.58321 699.47866,11.58321 699.47866,11.58321 C 685.10058,12.62011 664.19202,17.76851 646.45376,26.46171"
    +         sodipodi:nodetypes="cccccssccccscccsccc" />
    +    </g>
    +  </g>
    +</svg>
    diff --git a/htdocs/takepos/dev/img/gplv3-127x51.png b/htdocs/takepos/dev/img/gplv3-127x51.png
    new file mode 100644
    index 00000000000..3e9136e6266
    Binary files /dev/null and b/htdocs/takepos/dev/img/gplv3-127x51.png differ
    diff --git a/htdocs/takepos/dev/img/gplv3-88x31.png b/htdocs/takepos/dev/img/gplv3-88x31.png
    new file mode 100644
    index 00000000000..ba78d4c4941
    Binary files /dev/null and b/htdocs/takepos/dev/img/gplv3-88x31.png differ
    diff --git a/htdocs/takepos/dev/img/takepos.svg b/htdocs/takepos/dev/img/takepos.svg
    new file mode 100644
    index 00000000000..f51ead1a94e
    --- /dev/null
    +++ b/htdocs/takepos/dev/img/takepos.svg
    @@ -0,0 +1,70 @@
    +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    +<!-- Created with Inkscape (http://www.inkscape.org/) -->
    +
    +<svg
    +   xmlns:dc="http://purl.org/dc/elements/1.1/"
    +   xmlns:cc="http://creativecommons.org/ns#"
    +   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    +   xmlns:svg="http://www.w3.org/2000/svg"
    +   xmlns="http://www.w3.org/2000/svg"
    +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
    +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    +   width="14"
    +   height="14"
    +   id="svg2"
    +   version="1.1"
    +   inkscape:version="0.48.3.1 r9886"
    +   sodipodi:docname="object_mymodule.svg"
    +   inkscape:export-filename="/home/raph/Travail/src/zenfusion-modules/img/object_mymodule.png"
    +   inkscape:export-xdpi="90"
    +   inkscape:export-ydpi="90">
    +  <defs
    +     id="defs4" />
    +  <sodipodi:namedview
    +     id="base"
    +     pagecolor="#ffffff"
    +     bordercolor="#666666"
    +     borderopacity="1.0"
    +     inkscape:pageopacity="0.0"
    +     inkscape:pageshadow="2"
    +     inkscape:zoom="3.959798"
    +     inkscape:cx="24.310822"
    +     inkscape:cy="18.155032"
    +     inkscape:document-units="px"
    +     inkscape:current-layer="layer1"
    +     showgrid="false"
    +     inkscape:window-width="1920"
    +     inkscape:window-height="1021"
    +     inkscape:window-x="1080"
    +     inkscape:window-y="867"
    +     inkscape:window-maximized="1" />
    +  <metadata
    +     id="metadata7">
    +    <rdf:RDF>
    +      <cc:Work
    +         rdf:about="">
    +        <dc:format>image/svg+xml</dc:format>
    +        <dc:type
    +           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
    +        <dc:title></dc:title>
    +      </cc:Work>
    +    </rdf:RDF>
    +  </metadata>
    +  <g
    +     inkscape:label="Calque 1"
    +     inkscape:groupmode="layer"
    +     id="layer1"
    +     transform="translate(0,-1038.3622)">
    +    <text
    +       xml:space="preserve"
    +       style="font-size:12.99629784px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Serif;-inkscape-font-specification:DejaVu Serif"
    +       x="0.35272363"
    +       y="1050.0994"
    +       id="text2985"
    +       sodipodi:linespacing="125%"><tspan
    +         sodipodi:role="line"
    +         id="tspan2987"
    +         x="0.35272363"
    +         y="1050.0994">M</tspan></text>
    +  </g>
    +</svg>
    diff --git a/htdocs/takepos/floors.php b/htdocs/takepos/floors.php
    new file mode 100644
    index 00000000000..8dd6f729950
    --- /dev/null
    +++ b/htdocs/takepos/floors.php
    @@ -0,0 +1,176 @@
    +<?php
    +/* Copyright (C) 2018	Andreu Bisquerra	<jove@bisquerra.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +//if (! defined('NOREQUIREUSER'))	define('NOREQUIREUSER','1');	// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIREDB'))		define('NOREQUIREDB','1');		// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIRESOC'))		define('NOREQUIRESOC','1');
    +//if (! defined('NOREQUIRETRAN'))		define('NOREQUIRETRAN','1');
    +if (! defined('NOCSRFCHECK'))		define('NOCSRFCHECK','1');
    +if (! defined('NOTOKENRENEWAL'))	define('NOTOKENRENEWAL','1');
    +if (! defined('NOREQUIREMENU'))		define('NOREQUIREMENU','1');
    +if (! defined('NOREQUIREHTML'))		define('NOREQUIREHTML','1');
    +if (! defined('NOREQUIREAJAX'))		define('NOREQUIREAJAX','1');
    +
    +$_GET['theme']="md"; // Force theme. MD theme provides better look and feel to TakePOS
    +
    +require '../main.inc.php';	// Load $user and permissions
    +
    +$floor=GETPOST('floor','alpha');
    +if ($floor=="") $floor=1;
    +$id = GETPOST('id','int');
    +$action = GETPOST('action','alpha');
    +$left = GETPOST('left','alpha');
    +$top = GETPOST('top','alpha');
    +$place = GETPOST('place','int');
    +$newname = GETPOST('newname');
    +$mode = GETPOST('mode','alpha');
    +
    +if ($action=="getTables"){
    +    $sql="SELECT * from ".MAIN_DB_PREFIX."takepos_floor_tables where floor=".$floor;
    +    $resql = $db->query($sql);
    +    $rows = array();
    +    while($row = $db->fetch_array ($resql)){
    +        $rows[] = $row;
    +    }
    +    echo json_encode($rows);
    +    exit;
    +}
    +
    +if ($action=="update")
    +{
    +    if ($left>95) $left=95;
    +    if ($top>95) $top=95;
    +    if ($left>3 or $top>4) $db->query("update ".MAIN_DB_PREFIX."takepos_floor_tables set leftpos=$left, toppos=$top where label='$place'");
    +    else $db->query("delete from ".MAIN_DB_PREFIX."takepos_floor_tables where label='$place'");
    +}
    +
    +if ($action=="updatename")
    +{
    +	$newname = preg_replace("/[^a-zA-Z0-9\s]/", "", $newname); // Only English chars
    +	if (strlen($newname) > 3) $newname = substr($newname, 0, 3); // Only 3 chars
    +    $db->query("update ".MAIN_DB_PREFIX."takepos_floor_tables set label='$newname' where label='$place'");
    +}
    +
    +if ($action=="add")
    +{
    +    $asdf=$db->query("insert into ".MAIN_DB_PREFIX."takepos_floor_tables values ('', '', '', '45', '45', $floor)");
    +	$db->query("update ".MAIN_DB_PREFIX."takepos_floor_tables set label=rowid where label=''"); // No empty table names
    +}
    +
    +// Title
    +$title='TakePOS - Dolibarr '.DOL_VERSION;
    +if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $title='TakePOS - '.$conf->global->MAIN_APPLICATION_TITLE;
    +top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
    +?>
    +<link rel="stylesheet" href="css/pos.css?a=xxx">
    +<style type="text/css">
    +div.tablediv{
    +background-image:url(img/table.gif);
    +-moz-background-size:100% 100%;
    +-webkit-background-size:100% 100%;
    +background-size:100% 100%;
    +height:10%;
    +width:10%;
    +text-align: center;
    +font-size:300%;
    +color:white;
    +}
    +html, body
    +{
    +height: 100%;
    +}
    +</style>
    +
    +<script>
    +var DragDrop='<?php echo $langs->trans("DragDrop"); ?>';
    +
    +function updateplace(idplace, left, top) {
    +	$.ajax({
    +		type: "POST",
    +		url: "floors.php",
    +		data: { action: "update", left: left, top: top, place: idplace }
    +		}).done(function( msg ) {
    +		window.location.href='floors.php?mode=edit&floor=<?php echo $floor;?>';
    +	});
    +}
    +
    +function updatename(before) {
    +	var after=$("#"+before).text();
    +	$.ajax({
    +		type: "POST",
    +		url: "floors.php",
    +		data: { action: "updatename", place: before, newname: after }
    +		}).done(function( msg ) {
    +		window.location.href='floors.php?mode=edit&floor=<?php echo $floor;?>';
    +		});
    +	}
    +
    +function LoadPlace(place){
    +	parent.location.href='takepos.php?place='+place;
    +}
    +
    +
    +$( document ).ready(function() {
    +	$.getJSON('./floors.php?action=getTables&floor=<?php echo $floor; ?>', function(data) {
    +        $.each(data, function(key, val) {
    +			<?php if ($mode=="edit"){?>
    +			$('body').append('<div class="tablediv" contenteditable onblur="updatename('+val.label+');" style="position: absolute; left: '+val.leftpos+'%; top: '+val.toppos+'%;" id="'+val.label+'">'+val.label+'</div>');
    +			$( "#"+val.label ).draggable(
    +				{
    +					start: function() {
    +					$("#add").html("<?php echo $langs->trans("Delete"); ?>");
    +                    },
    +					stop: function() {
    +					var left=$(this).offset().left*100/$(window).width();
    +					var top=$(this).offset().top*100/$(window).height();
    +					updateplace($(this).attr('id'), left, top);
    +					}
    +				}
    +			);
    +			//simultaneous draggable and contenteditable
    +			$('#'+val.label).draggable().bind('click', function(){
    +				$(this).focus();
    +			})
    +			<?php }
    +			else {?>
    +			$('body').append('<div class="tablediv" onclick="LoadPlace('+val.label+');" style="position: absolute; left: '+val.leftpos+'%; top: '+val.toppos+'%;" id="'+val.label+'">'+val.label+'</div>');
    +			<?php } ?>
    +		});
    +	});
    +});
    +
    +</script>
    +</head>
    +<body style="overflow: hidden">
    +<?php if ($user->admin){?>
    +<div style="position: absolute; left: 0.1%; top: 0.8%; width:8%; height:11%;">
    +<?php if ($mode=="edit"){?>
    +<a id="add" onclick="window.location.href='floors.php?mode=edit&action=add&floor=<?php echo $floor;?>';"><?php echo $langs->trans("AddTable"); ?></a>
    +<?php } else { ?>
    +<a onclick="window.location.href='floors.php?mode=edit&floor=<?php echo $floor;?>';"><?php echo $langs->trans("Edit"); ?></a>
    +<?php } ?>
    +</div>
    +<?php }
    +?>
    +
    +<div style="position: absolute; left: 25%; bottom: 8%; width:50%; height:3%;">
    +    <center>
    +    <h1><img src="./img/arrow-prev.png" width="5%" onclick="location.href='floors.php?floor=<?php if ($floor>1) { $floor--; echo $floor; $floor++;} else echo "1"; ?>';"><?php echo $langs->trans("Floor")." ".$floor; ?><img src="./img/arrow-next.png" width="5%" onclick="location.href='floors.php?floor=<?php $floor++; echo $floor; ?>';"></h1>
    +    </center>
    +</div>
    +</body>
    +</html>
    \ No newline at end of file
    diff --git a/htdocs/takepos/freezone.php b/htdocs/takepos/freezone.php
    new file mode 100644
    index 00000000000..702c59541a3
    --- /dev/null
    +++ b/htdocs/takepos/freezone.php
    @@ -0,0 +1,59 @@
    +<?php
    +/* Copyright (C) 2018	Andreu Bisquerra	<jove@bisquerra.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +//if (! defined('NOREQUIREUSER'))	define('NOREQUIREUSER','1');	// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIREDB'))		define('NOREQUIREDB','1');		// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIRESOC'))		define('NOREQUIRESOC','1');
    +//if (! defined('NOREQUIRETRAN'))		define('NOREQUIRETRAN','1');
    +if (! defined('NOCSRFCHECK'))		define('NOCSRFCHECK','1');
    +if (! defined('NOTOKENRENEWAL'))	define('NOTOKENRENEWAL','1');
    +if (! defined('NOREQUIREMENU'))		define('NOREQUIREMENU','1');
    +if (! defined('NOREQUIREHTML'))		define('NOREQUIREHTML','1');
    +if (! defined('NOREQUIREAJAX'))		define('NOREQUIREAJAX','1');
    +
    +require '../main.inc.php';	// Load $user and permissions
    +
    +$langs->loadLangs(array("bills", "cashdesk"));
    +
    +$place = GETPOST('place','int');
    +
    +
    +/*
    + * View
    + */
    +
    +top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
    +
    +?>
    +<script>
    +function Save(){
    +	$.get( "invoice.php", { action: "freezone", place: "<?php echo $place;?>", desc:$('#desc').val(), number:$('#price').val()} );
    +	parent.$.colorbox.close();
    +}
    +</script>
    +</head>
    +<body>
    +<br>
    +<center>
    +<input type="text" id="desc" name="desc" style="width:40%;font-size: 200%;" placeholder="<?php echo $langs->trans('Description');?>">
    +<input type="text" id="price" name="price" style="width:15%;font-size: 200%;" placeholder="<?php echo $langs->trans('Price');?>">
    +<input type="hidden" name="place" value="<?php echo $place;?>">
    +<input type="button" style="width:15%;font-size: 200%;" value="OK" onclick="Save();">
    +</center>
    +
    +</body>
    +</html>
    \ No newline at end of file
    diff --git a/htdocs/takepos/genimg/add.jpg b/htdocs/takepos/genimg/add.jpg
    new file mode 100644
    index 00000000000..976fd10697d
    Binary files /dev/null and b/htdocs/takepos/genimg/add.jpg differ
    diff --git a/htdocs/takepos/genimg/empty.jpg b/htdocs/takepos/genimg/empty.jpg
    new file mode 100644
    index 00000000000..8883f7c9957
    Binary files /dev/null and b/htdocs/takepos/genimg/empty.jpg differ
    diff --git a/htdocs/takepos/genimg/index.php b/htdocs/takepos/genimg/index.php
    new file mode 100644
    index 00000000000..ff1b368b743
    --- /dev/null
    +++ b/htdocs/takepos/genimg/index.php
    @@ -0,0 +1,143 @@
    +<?php
    +/* Copyright (C) 2018	Andreu Bisquerra	<jove@bisquerra.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +//if (! defined('NOREQUIREUSER'))	define('NOREQUIREUSER','1');	// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIREDB'))		define('NOREQUIREDB','1');		// Not disabled cause need to load personalized language
    +if (! defined('NOREQUIRESOC'))		define('NOREQUIRESOC','1');
    +//if (! defined('NOREQUIRETRAN'))		define('NOREQUIRETRAN','1');
    +if (! defined('NOCSRFCHECK'))		define('NOCSRFCHECK','1');
    +if (! defined('NOTOKENRENEWAL'))	define('NOTOKENRENEWAL','1');
    +if (! defined('NOREQUIREMENU'))		define('NOREQUIREMENU','1');
    +if (! defined('NOREQUIREHTML'))		define('NOREQUIREHTML','1');
    +if (! defined('NOREQUIREAJAX'))		define('NOREQUIREAJAX','1');
    +
    +require '../../main.inc.php';	// Load $user and permissions
    +
    +$id= GETPOST('id');
    +$w= GETPOST('w');
    +$h= GETPOST('h');
    +$query= GETPOST('query');
    +
    +
    +
    +/*
    + * View
    + */
    +
    +header('Content-Type: image/jpeg');
    +header('Cache-Control: max-age=604800, public, must-revalidate');
    +header('Pragma: cache');
    +
    +if ($query=="cat")
    +{
    +	require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
    +	require_once DOL_DOCUMENT_ROOT.'/core/lib/categories.lib.php';
    +
    +	$object = new Categorie($db);
    +	$result = $object->fetch($id);
    +	$upload_dir = $conf->categorie->multidir_output[$object->entity];
    +	$pdir = get_exdir($object->id,2,0,0,$object,'category') . $object->id ."/photos/";
    +	$dir = $upload_dir.'/'.$pdir;
    +	foreach ($object->liste_photos($dir) as $key => $obj)
    +	{
    +		$filename=$obj['photo'];
    +	}
    +
    +	// The file
    +	$filename = $dir.$filename;
    +	if (!file_exists($filename)) $filename="empty.jpg";
    +
    +	// Dimensions
    +	list($width, $height) = getimagesize($filename);
    +	$new_width = $w;
    +	$new_height = $h;
    +
    +	// Resample
    +	$image_p = imagecreatetruecolor($new_width, $new_height);
    +	$image = imagecreatefromjpeg($filename);
    +	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    +
    +	// Add icon
    +	$icon = imagecreatefromjpeg('add.jpg');
    +	list($width, $height) = getimagesize('add.jpg');
    +	$new_width = $w*0.3;
    +	$new_height = $h*0.3;
    +	$icon_p = imagecreatetruecolor($new_width, $new_height);
    +	imagecopyresampled($icon_p, $icon, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    +	imagecopymerge($image_p, $icon_p,  0, 0, 0, 0, $new_width, $new_height, 100);
    +
    +	// Output
    +	imagejpeg($image_p, null, 100);
    +}
    +else if ($query=="pro")
    +{
    +	require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
    +
    +	$objProd = new Product($db);
    +	$objProd->fetch($id);
    +
    +	$dir .= get_exdir(0,0,0,0,$objProd,'product').$objProd->ref.'/';
    +	$pdir .= get_exdir(0,0,0,0,$objProd,'product').$objProd->ref.'/';
    +
    +	foreach ($objProd->liste_photos($dir) as $key => $obj)
    +	{
    +		$filename=$obj['photo'];
    +	}
    +	$filename = $dir.$filename;
    +
    +	if (!file_exists($filename)){
    +		$dir = $conf->product->multidir_output[$objProd->entity].'/'.$pdir;
    +		foreach ($objProd->liste_photos($dir) as $key => $obj)
    +		{
    +		$filename=$obj['photo'];
    +		}
    +		$filename = $dir.$filename;
    +	}
    +
    +	if (!file_exists($filename)) $filename="empty.jpg";
    +
    +	// Dimensions
    +	list($width, $height) = getimagesize($filename);
    +	$new_width = $w;
    +	$new_height = $h;
    +
    +	// Resample
    +	$image_p = imagecreatetruecolor($new_width, $new_height);
    +	$image = imagecreatefromjpeg($filename);
    +	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    +
    +	// Output
    +	imagejpeg($image_p, null, 100);
    +}
    +else
    +{
    +	// The file
    +	$filename = $query.".jpg";
    +
    +	// Dimensions
    +	list($width, $height) = getimagesize($filename);
    +	$new_width = $w;
    +	$new_height = $h;
    +
    +	// Resample
    +	$image_p = imagecreatetruecolor($new_width, $new_height);
    +	$image = imagecreatefromjpeg($filename);
    +	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    +
    +	// Output
    +	imagejpeg($image_p, null, 100);
    +}
    diff --git a/htdocs/takepos/img/arrow-next-top.png b/htdocs/takepos/img/arrow-next-top.png
    new file mode 100644
    index 00000000000..70f720cab10
    Binary files /dev/null and b/htdocs/takepos/img/arrow-next-top.png differ
    diff --git a/htdocs/takepos/img/arrow-next.png b/htdocs/takepos/img/arrow-next.png
    new file mode 100644
    index 00000000000..1056f024390
    Binary files /dev/null and b/htdocs/takepos/img/arrow-next.png differ
    diff --git a/htdocs/takepos/img/arrow-prev-top.png b/htdocs/takepos/img/arrow-prev-top.png
    new file mode 100644
    index 00000000000..23567d35890
    Binary files /dev/null and b/htdocs/takepos/img/arrow-prev-top.png differ
    diff --git a/htdocs/takepos/img/arrow-prev.png b/htdocs/takepos/img/arrow-prev.png
    new file mode 100644
    index 00000000000..b7311f26f54
    Binary files /dev/null and b/htdocs/takepos/img/arrow-prev.png differ
    diff --git a/htdocs/takepos/img/gfdl.png b/htdocs/takepos/img/gfdl.png
    new file mode 100644
    index 00000000000..f2bacfd179a
    Binary files /dev/null and b/htdocs/takepos/img/gfdl.png differ
    diff --git a/htdocs/takepos/img/gplv3.png b/htdocs/takepos/img/gplv3.png
    new file mode 100644
    index 00000000000..ba78d4c4941
    Binary files /dev/null and b/htdocs/takepos/img/gplv3.png differ
    diff --git a/htdocs/takepos/img/marketplace/cashcontrol.jpg b/htdocs/takepos/img/marketplace/cashcontrol.jpg
    new file mode 100644
    index 00000000000..66240218dff
    Binary files /dev/null and b/htdocs/takepos/img/marketplace/cashcontrol.jpg differ
    diff --git a/htdocs/takepos/img/marketplace/takeposmobile.jpg b/htdocs/takepos/img/marketplace/takeposmobile.jpg
    new file mode 100644
    index 00000000000..918f7c49d5e
    Binary files /dev/null and b/htdocs/takepos/img/marketplace/takeposmobile.jpg differ
    diff --git a/htdocs/takepos/img/object_takepos.png b/htdocs/takepos/img/object_takepos.png
    new file mode 100644
    index 00000000000..5a307bfc62f
    Binary files /dev/null and b/htdocs/takepos/img/object_takepos.png differ
    diff --git a/htdocs/takepos/img/table.gif b/htdocs/takepos/img/table.gif
    new file mode 100644
    index 00000000000..54f7a209d89
    Binary files /dev/null and b/htdocs/takepos/img/table.gif differ
    diff --git a/htdocs/takepos/img/takepos.png b/htdocs/takepos/img/takepos.png
    new file mode 100644
    index 00000000000..be9d3dcfc3f
    Binary files /dev/null and b/htdocs/takepos/img/takepos.png differ
    diff --git a/htdocs/takepos/invoice.php b/htdocs/takepos/invoice.php
    new file mode 100644
    index 00000000000..c71f7f861a3
    --- /dev/null
    +++ b/htdocs/takepos/invoice.php
    @@ -0,0 +1,290 @@
    +<?php
    +/* Copyright (C) 2018	Andreu Bisquerra	<jove@bisquerra.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +//if (! defined('NOREQUIREUSER'))	define('NOREQUIREUSER','1');	// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIREDB'))		define('NOREQUIREDB','1');		// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIRESOC'))		define('NOREQUIRESOC','1');
    +//if (! defined('NOREQUIRETRAN'))		define('NOREQUIRETRAN','1');
    +if (! defined('NOCSRFCHECK'))		define('NOCSRFCHECK','1');
    +if (! defined('NOTOKENRENEWAL'))	define('NOTOKENRENEWAL','1');
    +if (! defined('NOREQUIREMENU'))		define('NOREQUIREMENU','1');
    +if (! defined('NOREQUIREHTML'))		define('NOREQUIREHTML','1');
    +if (! defined('NOREQUIREAJAX'))		define('NOREQUIREAJAX','1');
    +
    +require '../main.inc.php';	// Load $user and permissions
    +require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
    +
    +$langs->loadLangs(array("bills", "cashdesk"));
    +
    +$id = GETPOST('id','int');
    +$action = GETPOST('action','alpha');
    +$idproduct = GETPOST('idproduct','int');
    +$place = GETPOST('place','int');
    +$number = GETPOST('number');
    +$idline = GETPOST('idline');
    +$desc = GETPOST('desc','alpha');
    +$pay = GETPOST('pay');
    +
    +$sql="SELECT rowid FROM ".MAIN_DB_PREFIX."facture where facnumber='(PROV-POS-".$place.")'";
    +$resql = $db->query($sql);
    +$row = $db->fetch_array ($resql);
    +$placeid=$row[0];
    +if (! $placeid) $placeid=0; // not necesary
    +else{
    +	$invoice = new Facture($db);
    +	$invoice->fetch($placeid);
    +}
    +
    +/*
    + * Actions
    + */
    +
    +if ($action == 'valid' && $user->rights->facture->creer){
    +	if ($pay=="cash") $bankaccount=$conf->global->CASHDESK_ID_BANKACCOUNT_CASH;
    +	else if ($pay=="card") $bankaccount=$conf->global->CASHDESK_ID_BANKACCOUNT_CB;
    +	$now=dol_now();
    +	$invoice = new Facture($db);
    +	$invoice->fetch($placeid);
    +	if (! empty($conf->stock->enabled) and $conf->global->CASHDESK_NO_DECREASE_STOCK!="1") $invoice->validate($user, '', $conf->global->CASHDESK_ID_WAREHOUSE);
    +	else $invoice->validate($user);
    +	// Add the payment
    +	$payment=new Paiement($db);
    +	$payment->datepaye=$now;
    +	$payment->bank_account=$bankaccount;
    +	$payment->amounts[$invoice->id]=$invoice->total_ttc;
    +	if ($pay=="cash") $payment->paiementid=4;
    +	else if ($pay=="card") $payment->paiementid=6;
    +	$payment->num_paiement=$invoice->facnumber;
    +	$payment->create($user);
    +	$payment->addPaymentToBank($user, 'payment', '(CustomerInvoicePayment)', $bankaccount, '', '');
    +	$invoice->set_paid($user);
    +}
    +
    +if (($action=="addline" || $action=="freezone") and $placeid==0)
    +{
    +	// $place is id of POS, $placeid is id of invoice
    +	if ($placeid==0) {
    +		$invoice = new Facture($db);
    +		$invoice->socid=$conf->global->CASHDESK_ID_THIRDPARTY;
    +		$invoice->date=dol_now();
    +		$invoice->ref="(PROV-POS)";
    +		$invoice->module_source = 'takepos';
    +		$invoice->pos_source = (string) (empty($place)?'0':$place);
    +
    +		$placeid=$invoice->create($user);
    +		$sql="UPDATE ".MAIN_DB_PREFIX."facture set facnumber='(PROV-POS-".$place.")' where rowid=".$placeid;
    +		$db->query($sql);
    +	}
    +}
    +
    +if ($action=="addline"){
    +	$prod = new Product($db);
    +	$prod->fetch($idproduct);
    +	$invoice->addline($prod->description, $prod->price, 1, $prod->tva_tx, $prod->localtax1_tx, $prod->localtax2_tx, $idproduct, $prod->remise_percent, '', 0, 0, 0, '', $prod->price_base_type, $prod->price_ttc, $prod->type, - 1, 0, '', 0, 0, null, 0, '', 0, 100, '', null, 0);
    +	$invoice->fetch($placeid);
    +}
    +
    +if ($action=="freezone"){
    +	$invoice->addline($desc, $number, 1, $conf->global->MAIN_VAT_DEFAULT_IF_AUTODETECT_FAILS, 0, 0, 0, 0, '', 0, 0, 0, '', 'TTC', $number, 0, - 1, 0, '', 0, 0, null, 0, '', 0, 100, '', null, 0);
    +	$invoice->fetch($placeid);
    +}
    +
    +if ($action=="deleteline"){
    +    if ($idline>0 and $placeid>0){ //If exist invoice and line, to avoid errors if deleted from other device or no line selected
    +        $invoice->deleteline($idline);
    +        $invoice->fetch($placeid);
    +    }
    +    else if ($placeid>0){ //If exist invoice, but no line selected, proced to delete last line
    +        $sql="SELECT rowid FROM ".MAIN_DB_PREFIX."facturedet where fk_facture='$placeid' order by rowid DESC";
    +        $resql = $db->query($sql);
    +        $row = $db->fetch_array ($resql);
    +        $deletelineid=$row[0];
    +        $invoice->deleteline($deletelineid);
    +        $invoice->fetch($placeid);
    +    }
    +}
    +
    +if ($action=="updateqty"){
    +    foreach ($invoice->lines as $line){
    +        if ($line->id==$idline) $result = $invoice->updateline($line->id, $line->desc, $line->subprice, $number, $line->remise_percent,
    +			$line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type,
    +			$line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent,
    +			$line->fk_unit);
    +    }
    +	$invoice->fetch($placeid);
    +}
    +
    +if ($action=="updateprice"){
    +    foreach ($invoice->lines as $line){
    +        if ($line->id==$idline) $result = $invoice->updateline($line->id, $line->desc, $number, $line->qty, $line->remise_percent,
    +			$line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type,
    +			$line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent,
    +			$line->fk_unit);
    +    }
    +	$invoice->fetch($placeid);
    +}
    +
    +if ($action=="updatereduction"){
    +    foreach ($invoice->lines as $line){
    +        if ($line->id==$idline) $result = $invoice->updateline($line->id, $line->desc, $line->subprice, $line->qty, $number,
    +			$line->date_start, $line->date_end, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, 'HT', $line->info_bits, $line->product_type,
    +			$line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->situation_percent,
    +			$line->fk_unit);
    +    }
    +	$invoice->fetch($placeid);
    +}
    +
    +if ($action=="order"){
    +	require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
    +	$headerorder='<html><br><b>'.$langs->trans('Place').' '.$place.'<br><table width="65%"><thead><tr><th align="left">'.$langs->trans("Label").'</th><th align="right">'.$langs->trans("Qty").'</th></tr></thead><tbody>';
    +	$footerorder='</tbody></table>'.dol_print_date(dol_now(), 'dayhour').'<br></html>';
    +	$order_receipt_printer1="";
    +	$order_receipt_printer2="";
    +	$catsprinter1 = explode(';',$conf->global->TAKEPOS_PRINTED_CATEGORIES_1);
    +	$catsprinter2 = explode(';',$conf->global->TAKEPOS_PRINTED_CATEGORIES_2);
    +	foreach ($invoice->lines as $line){
    +		if ($line->special_code=="3") continue;
    +		$c = new Categorie($db);
    +		$existing = $c->containing($line->fk_product, Categorie::TYPE_PRODUCT, 'id');
    +		$result = array_intersect($catsprinter1, $existing);
    +		$count=count($result);
    +		if ($count>0){
    +			$sql="UPDATE ".MAIN_DB_PREFIX."facturedet set special_code='3' where rowid=$line->rowid";
    +			$db->query($sql);
    +			$order_receipt_printer1.='<tr>'.$line->product_label.'<td align="right">'.$line->qty.'</td></tr>';
    +		}
    +    }
    +	foreach ($invoice->lines as $line){
    +		if ($line->special_code=="3") continue;
    +		$c = new Categorie($db);
    +		$existing = $c->containing($line->fk_product, Categorie::TYPE_PRODUCT, 'id');
    +		$result = array_intersect($catsprinter2, $existing);
    +		$count=count($result);
    +		if ($count>0){
    +			$sql="UPDATE ".MAIN_DB_PREFIX."facturedet set special_code='3' where rowid=$line->rowid";
    +			$db->query($sql);
    +			$order_receipt_printer2.='<tr>'.$line->product_label.'<td align="right">'.$line->qty.'</td></tr>';
    +		}
    +    }
    +	$invoice->fetch($placeid);
    +}
    +
    +?>
    +<style>
    +.selected {
    +	color: red;
    +}
    +.order {
    +	color: limegreen;
    +}
    +</style>
    +<script language="javascript">
    +var selectedline=0;
    +var selectedtext="";
    +$(document).ready(function(){
    +    $('table tbody tr').click(function(){
    +		$('table tbody tr').removeClass("selected");
    +        $(this).addClass("selected");
    +		if (selectedline==this.id) return; // If is already selected
    +        else selectedline=this.id;
    +        selectedtext=$('#'+selectedline).find("td:first").html();
    +    });
    +<?php if ($action=="order" and $order_receipt_printer1!=""){
    +	?>
    +	$.ajax({
    +		type: "POST",
    +		url: 'http://<?php print $conf->global->TAKEPOS_PRINT_SERVER;?>:8111/print',
    +		data: '<?php print $headerorder.$order_receipt_printer1.$footerorder; ?>'
    +	});
    +<?php
    +}
    +if ($action=="order" and $order_receipt_printer2!=""){
    +	?>
    +	$.ajax({
    +		type: "POST",
    +		url: 'http://<?php print $conf->global->TAKEPOS_PRINT_SERVER;?>:8111/print2',
    +		data: '<?php print $headerorder.$order_receipt_printer2.$footerorder; ?>'
    +	});
    +<?php
    +}
    +if ($action=="search"){
    +	?>
    +	$('#search').focus();
    +	<?php
    +}
    +?>
    +});
    +
    +function Print(id){
    +	$.colorbox({href:"receipt.php?facid="+id, width:"40%", height:"90%", transition:"none", iframe:"true", title:"<?php echo $langs->trans("PrintTicket");?>"});
    +}
    +
    +function TakeposPrinting(id){
    +	var receipt;
    +	$.get("receipt.php?facid="+id, function(data, status){
    +        receipt=data.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '');;
    +		$.ajax({
    +			type: "POST",
    +			url: 'http://<?php print $conf->global->TAKEPOS_PRINT_SERVER;?>:8111/print',
    +			data: receipt
    +		});
    +    });
    +}
    +</script>
    +<?php
    +print '<div class="div-table-responsive-no-min">';
    +print '<table id="tablelines" class="noborder noshadow" width="100%">';
    +print '<tr class="liste_titre nodrag nodrop">';
    +print '<td class="linecoldescription">'.$langs->trans('Description').'</td>';
    +print '<td class="linecolqty" align="right">'.$langs->trans('Qty').'</td>';
    +print '<td class="linecolht" align="right">'.$langs->trans('TotalHTShort').'</td>';
    +print "</tr>\n";
    +if ($placeid>0) foreach ($invoice->lines as $line)
    +{
    +	print '<tr class="drag drop oddeven';
    +	if ($line->special_code=="3") print ' order';
    +	print '" id="'.$line->rowid.'">';
    +	print '<td>'.$line->product_label.$line->desc.'</td>';
    +	print '<td align="right">'.$line->qty.'</td>';
    +	print '<td align="right">'.price($line->total_ttc).'</td>';
    +	print '</tr>';
    +}
    +print '</table>';
    +print '<p style="font-size:120%;" align="right"><b>'.$langs->trans('TotalTTC');
    +if($conf->global->TAKEPOS_BAR_RESTAURANT) print " ".$langs->trans('Place')." ".$place;
    +print ': '.price($invoice->total_ttc, 1, '', 1, - 1, - 1, $conf->currency).'&nbsp;</b></p>';
    +
    +//if ($invoice->socid != $conf->global->CASHDESK_ID_THIRDPARTY){
    +    $soc = new Societe($db);
    +    if ($invoice->socid > 0) $soc->fetch($invoice->socid);
    +    else $soc->fetch($conf->global->CASHDESK_ID_THIRDPARTY);
    +    print '<p style="font-size:120%;" align="right">';
    +    print $langs->trans("Customer").': '.$soc->name;
    +    print '</p>';
    +//}
    +if ($action=="valid"){
    +	print '<p style="font-size:120%;" align="center"><b>'.$invoice->facnumber." ".$langs->trans('BillShortStatusValidated').'</b></p>';
    +	if ($conf->global->TAKEBOX) print '<center><button type="button" onclick="TakeposPrinting('.$placeid.');">'.$langs->trans('PrintTicket').'</button><center>';
    +	else print '<center><button type="button" onclick="Print('.$placeid.');">'.$langs->trans('PrintTicket').'</button><center>';
    +}
    +if ($action=="search"){
    +	print '<center>
    +	<input type="text" id="search" name="search" onkeyup="Search2();" name="search" style="width:80%;font-size: 150%;" placeholder='.$langs->trans('Search').'
    +	</center>';
    +}
    +print '</div>';
    diff --git a/htdocs/takepos/js/jquery.colorbox-min.js b/htdocs/takepos/js/jquery.colorbox-min.js
    new file mode 100644
    index 00000000000..b5109a262ef
    --- /dev/null
    +++ b/htdocs/takepos/js/jquery.colorbox-min.js
    @@ -0,0 +1,6 @@
    +/*!
    +	Colorbox 1.6.4
    +	license: MIT
    +	http://www.jacklmoore.com/colorbox
    +*/
    +(function(t,e,i){function n(i,n,o){var r=e.createElement(i);return n&&(r.id=Z+n),o&&(r.style.cssText=o),t(r)}function o(){return i.innerHeight?i.innerHeight:t(i).height()}function r(e,i){i!==Object(i)&&(i={}),this.cache={},this.el=e,this.value=function(e){var n;return void 0===this.cache[e]&&(n=t(this.el).attr("data-cbox-"+e),void 0!==n?this.cache[e]=n:void 0!==i[e]?this.cache[e]=i[e]:void 0!==X[e]&&(this.cache[e]=X[e])),this.cache[e]},this.get=function(e){var i=this.value(e);return t.isFunction(i)?i.call(this.el,this):i}}function h(t){var e=W.length,i=(A+t)%e;return 0>i?e+i:i}function a(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():o())/100:1)*parseInt(t,10))}function s(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function l(t,e){return t.get("retinaUrl")&&i.devicePixelRatio>1?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function d(t){"contains"in x[0]&&!x[0].contains(t.target)&&t.target!==v[0]&&(t.stopPropagation(),x.focus())}function c(t){c.str!==t&&(x.add(v).removeClass(c.str).addClass(t),c.str=t)}function g(e){A=0,e&&e!==!1&&"nofollow"!==e?(W=t("."+te).filter(function(){var i=t.data(this,Y),n=new r(this,i);return n.get("rel")===e}),A=W.index(_.el),-1===A&&(W=W.add(_.el),A=W.length-1)):W=t(_.el)}function u(i){t(e).trigger(i),ae.triggerHandler(i)}function f(i){var o;if(!G){if(o=t(i).data(Y),_=new r(i,o),g(_.get("rel")),!U){U=$=!0,c(_.get("className")),x.css({visibility:"hidden",display:"block",opacity:""}),I=n(se,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),b.css({width:"",height:""}).append(I),j=T.height()+k.height()+b.outerHeight(!0)-b.height(),D=C.width()+H.width()+b.outerWidth(!0)-b.width(),N=I.outerHeight(!0),z=I.outerWidth(!0);var h=a(_.get("initialWidth"),"x"),s=a(_.get("initialHeight"),"y"),l=_.get("maxWidth"),f=_.get("maxHeight");_.w=Math.max((l!==!1?Math.min(h,a(l,"x")):h)-z-D,0),_.h=Math.max((f!==!1?Math.min(s,a(f,"y")):s)-N-j,0),I.css({width:"",height:_.h}),J.position(),u(ee),_.get("onOpen"),O.add(F).hide(),x.focus(),_.get("trapFocus")&&e.addEventListener&&(e.addEventListener("focus",d,!0),ae.one(re,function(){e.removeEventListener("focus",d,!0)})),_.get("returnFocus")&&ae.one(re,function(){t(_.el).focus()})}var p=parseFloat(_.get("opacity"));v.css({opacity:p===p?p:"",cursor:_.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),_.get("closeButton")?B.html(_.get("close")).appendTo(b):B.appendTo("<div/>"),w()}}function p(){x||(V=!1,E=t(i),x=n(se).attr({id:Y,"class":t.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),v=n(se,"Overlay").hide(),L=t([n(se,"LoadingOverlay")[0],n(se,"LoadingGraphic")[0]]),y=n(se,"Wrapper"),b=n(se,"Content").append(F=n(se,"Title"),R=n(se,"Current"),P=t('<button type="button"/>').attr({id:Z+"Previous"}),K=t('<button type="button"/>').attr({id:Z+"Next"}),S=t('<button type="button"/>').attr({id:Z+"Slideshow"}),L),B=t('<button type="button"/>').attr({id:Z+"Close"}),y.append(n(se).append(n(se,"TopLeft"),T=n(se,"TopCenter"),n(se,"TopRight")),n(se,!1,"clear:left").append(C=n(se,"MiddleLeft"),b,H=n(se,"MiddleRight")),n(se,!1,"clear:left").append(n(se,"BottomLeft"),k=n(se,"BottomCenter"),n(se,"BottomRight"))).find("div div").css({"float":"left"}),M=n(se,!1,"position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;"),O=K.add(P).add(R).add(S)),e.body&&!x.parent().length&&t(e.body).append(v,x.append(y,M))}function m(){function i(t){t.which>1||t.shiftKey||t.altKey||t.metaKey||t.ctrlKey||(t.preventDefault(),f(this))}return x?(V||(V=!0,K.click(function(){J.next()}),P.click(function(){J.prev()}),B.click(function(){J.close()}),v.click(function(){_.get("overlayClose")&&J.close()}),t(e).bind("keydown."+Z,function(t){var e=t.keyCode;U&&_.get("escKey")&&27===e&&(t.preventDefault(),J.close()),U&&_.get("arrowKey")&&W[1]&&!t.altKey&&(37===e?(t.preventDefault(),P.click()):39===e&&(t.preventDefault(),K.click()))}),t.isFunction(t.fn.on)?t(e).on("click."+Z,"."+te,i):t("."+te).live("click."+Z,i)),!0):!1}function w(){var e,o,r,h=J.prep,d=++le;if($=!0,q=!1,u(he),u(ie),_.get("onLoad"),_.h=_.get("height")?a(_.get("height"),"y")-N-j:_.get("innerHeight")&&a(_.get("innerHeight"),"y"),_.w=_.get("width")?a(_.get("width"),"x")-z-D:_.get("innerWidth")&&a(_.get("innerWidth"),"x"),_.mw=_.w,_.mh=_.h,_.get("maxWidth")&&(_.mw=a(_.get("maxWidth"),"x")-z-D,_.mw=_.w&&_.w<_.mw?_.w:_.mw),_.get("maxHeight")&&(_.mh=a(_.get("maxHeight"),"y")-N-j,_.mh=_.h&&_.h<_.mh?_.h:_.mh),e=_.get("href"),Q=setTimeout(function(){L.show()},100),_.get("inline")){var c=t(e).eq(0);r=t("<div>").hide().insertBefore(c),ae.one(he,function(){r.replaceWith(c)}),h(c)}else _.get("iframe")?h(" "):_.get("html")?h(_.get("html")):s(_,e)?(e=l(_,e),q=_.get("createImg"),t(q).addClass(Z+"Photo").bind("error."+Z,function(){h(n(se,"Error").html(_.get("imgError")))}).one("load",function(){d===le&&setTimeout(function(){var e;_.get("retinaImage")&&i.devicePixelRatio>1&&(q.height=q.height/i.devicePixelRatio,q.width=q.width/i.devicePixelRatio),_.get("scalePhotos")&&(o=function(){q.height-=q.height*e,q.width-=q.width*e},_.mw&&q.width>_.mw&&(e=(q.width-_.mw)/q.width,o()),_.mh&&q.height>_.mh&&(e=(q.height-_.mh)/q.height,o())),_.h&&(q.style.marginTop=Math.max(_.mh-q.height,0)/2+"px"),W[1]&&(_.get("loop")||W[A+1])&&(q.style.cursor="pointer",t(q).bind("click."+Z,function(){J.next()})),q.style.width=q.width+"px",q.style.height=q.height+"px",h(q)},1)}),q.src=e):e&&M.load(e,_.get("data"),function(e,i){d===le&&h("error"===i?n(se,"Error").html(_.get("xhrError")):t(this).contents())})}var v,x,y,b,T,C,H,k,W,E,I,M,L,F,R,S,K,P,B,O,_,j,D,N,z,A,q,U,$,G,Q,J,V,X={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,rel:function(){return this.rel},href:function(){return t(this).attr("href")},title:function(){return this.title},createImg:function(){var e=new Image,i=t(this).data("cbox-img-attrs");return"object"==typeof i&&t.each(i,function(t,i){e[t]=i}),e},createIframe:function(){var i=e.createElement("iframe"),n=t(this).data("cbox-iframe-attrs");return"object"==typeof n&&t.each(n,function(t,e){i[t]=e}),"frameBorder"in i&&(i.frameBorder=0),"allowTransparency"in i&&(i.allowTransparency="true"),i.name=(new Date).getTime(),i.allowFullscreen=!0,i}},Y="colorbox",Z="cbox",te=Z+"Element",ee=Z+"_open",ie=Z+"_load",ne=Z+"_complete",oe=Z+"_cleanup",re=Z+"_closed",he=Z+"_purge",ae=t("<a/>"),se="div",le=0,de={},ce=function(){function t(){clearTimeout(h)}function e(){(_.get("loop")||W[A+1])&&(t(),h=setTimeout(J.next,_.get("slideshowSpeed")))}function i(){S.html(_.get("slideshowStop")).unbind(s).one(s,n),ae.bind(ne,e).bind(ie,t),x.removeClass(a+"off").addClass(a+"on")}function n(){t(),ae.unbind(ne,e).unbind(ie,t),S.html(_.get("slideshowStart")).unbind(s).one(s,function(){J.next(),i()}),x.removeClass(a+"on").addClass(a+"off")}function o(){r=!1,S.hide(),t(),ae.unbind(ne,e).unbind(ie,t),x.removeClass(a+"off "+a+"on")}var r,h,a=Z+"Slideshow_",s="click."+Z;return function(){r?_.get("slideshow")||(ae.unbind(oe,o),o()):_.get("slideshow")&&W[1]&&(r=!0,ae.one(oe,o),_.get("slideshowAuto")?i():n(),S.show())}}();t[Y]||(t(p),J=t.fn[Y]=t[Y]=function(e,i){var n,o=this;return e=e||{},t.isFunction(o)&&(o=t("<a/>"),e.open=!0),o[0]?(p(),m()&&(i&&(e.onComplete=i),o.each(function(){var i=t.data(this,Y)||{};t.data(this,Y,t.extend(i,e))}).addClass(te),n=new r(o[0],e),n.get("open")&&f(o[0])),o):o},J.position=function(e,i){function n(){T[0].style.width=k[0].style.width=b[0].style.width=parseInt(x[0].style.width,10)-D+"px",b[0].style.height=C[0].style.height=H[0].style.height=parseInt(x[0].style.height,10)-j+"px"}var r,h,s,l=0,d=0,c=x.offset();if(E.unbind("resize."+Z),x.css({top:-9e4,left:-9e4}),h=E.scrollTop(),s=E.scrollLeft(),_.get("fixed")?(c.top-=h,c.left-=s,x.css({position:"fixed"})):(l=h,d=s,x.css({position:"absolute"})),d+=_.get("right")!==!1?Math.max(E.width()-_.w-z-D-a(_.get("right"),"x"),0):_.get("left")!==!1?a(_.get("left"),"x"):Math.round(Math.max(E.width()-_.w-z-D,0)/2),l+=_.get("bottom")!==!1?Math.max(o()-_.h-N-j-a(_.get("bottom"),"y"),0):_.get("top")!==!1?a(_.get("top"),"y"):Math.round(Math.max(o()-_.h-N-j,0)/2),x.css({top:c.top,left:c.left,visibility:"visible"}),y[0].style.width=y[0].style.height="9999px",r={width:_.w+z+D,height:_.h+N+j,top:l,left:d},e){var g=0;t.each(r,function(t){return r[t]!==de[t]?(g=e,void 0):void 0}),e=g}de=r,e||x.css(r),x.dequeue().animate(r,{duration:e||0,complete:function(){n(),$=!1,y[0].style.width=_.w+z+D+"px",y[0].style.height=_.h+N+j+"px",_.get("reposition")&&setTimeout(function(){E.bind("resize."+Z,J.position)},1),t.isFunction(i)&&i()},step:n})},J.resize=function(t){var e;U&&(t=t||{},t.width&&(_.w=a(t.width,"x")-z-D),t.innerWidth&&(_.w=a(t.innerWidth,"x")),I.css({width:_.w}),t.height&&(_.h=a(t.height,"y")-N-j),t.innerHeight&&(_.h=a(t.innerHeight,"y")),t.innerHeight||t.height||(e=I.scrollTop(),I.css({height:"auto"}),_.h=I.height()),I.css({height:_.h}),e&&I.scrollTop(e),J.position("none"===_.get("transition")?0:_.get("speed")))},J.prep=function(i){function o(){return _.w=_.w||I.width(),_.w=_.mw&&_.mw<_.w?_.mw:_.w,_.w}function a(){return _.h=_.h||I.height(),_.h=_.mh&&_.mh<_.h?_.mh:_.h,_.h}if(U){var d,g="none"===_.get("transition")?0:_.get("speed");I.remove(),I=n(se,"LoadedContent").append(i),I.hide().appendTo(M.show()).css({width:o(),overflow:_.get("scrolling")?"auto":"hidden"}).css({height:a()}).prependTo(b),M.hide(),t(q).css({"float":"none"}),c(_.get("className")),d=function(){function i(){t.support.opacity===!1&&x[0].style.removeAttribute("filter")}var n,o,a=W.length;U&&(o=function(){clearTimeout(Q),L.hide(),u(ne),_.get("onComplete")},F.html(_.get("title")).show(),I.show(),a>1?("string"==typeof _.get("current")&&R.html(_.get("current").replace("{current}",A+1).replace("{total}",a)).show(),K[_.get("loop")||a-1>A?"show":"hide"]().html(_.get("next")),P[_.get("loop")||A?"show":"hide"]().html(_.get("previous")),ce(),_.get("preloading")&&t.each([h(-1),h(1)],function(){var i,n=W[this],o=new r(n,t.data(n,Y)),h=o.get("href");h&&s(o,h)&&(h=l(o,h),i=e.createElement("img"),i.src=h)})):O.hide(),_.get("iframe")?(n=_.get("createIframe"),_.get("scrolling")||(n.scrolling="no"),t(n).attr({src:_.get("href"),"class":Z+"Iframe"}).one("load",o).appendTo(I),ae.one(he,function(){n.src="//about:blank"}),_.get("fastIframe")&&t(n).trigger("load")):o(),"fade"===_.get("transition")?x.fadeTo(g,1,i):i())},"fade"===_.get("transition")?x.fadeTo(g,0,function(){J.position(0,d)}):J.position(g,d)}},J.next=function(){!$&&W[1]&&(_.get("loop")||W[A+1])&&(A=h(1),f(W[A]))},J.prev=function(){!$&&W[1]&&(_.get("loop")||A)&&(A=h(-1),f(W[A]))},J.close=function(){U&&!G&&(G=!0,U=!1,u(oe),_.get("onCleanup"),E.unbind("."+Z),v.fadeTo(_.get("fadeOut")||0,0),x.stop().fadeTo(_.get("fadeOut")||0,0,function(){x.hide(),v.hide(),u(he),I.remove(),setTimeout(function(){G=!1,u(re),_.get("onClosed")},1)}))},J.remove=function(){x&&(x.stop(),t[Y].close(),x.stop(!1,!0).remove(),v.remove(),G=!1,x=null,t("."+te).removeData(Y).removeClass(te),t(e).unbind("click."+Z).unbind("keydown."+Z))},J.element=function(){return t(_.el)},J.settings=X)})(jQuery,document,window);
    \ No newline at end of file
    diff --git a/htdocs/takepos/js/takepos.js b/htdocs/takepos/js/takepos.js
    new file mode 100644
    index 00000000000..062a3bb4e4a
    --- /dev/null
    +++ b/htdocs/takepos/js/takepos.js
    @@ -0,0 +1,15 @@
    +/* Copyright (C) 2018	Charles-FR BENKE		<jove@bisquerra.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    diff --git a/htdocs/takepos/lib/takepos.lib.php b/htdocs/takepos/lib/takepos.lib.php
    new file mode 100644
    index 00000000000..691f118d2cb
    --- /dev/null
    +++ b/htdocs/takepos/lib/takepos.lib.php
    @@ -0,0 +1,58 @@
    +<?php
    +/* Copyright (C) 2018 SuperAdmin
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    takepos/lib/takepos.lib.php
    + * \ingroup takepos
    + * \brief   Library files with common functions for TakePos
    + */
    +
    +/**
    + * Prepare admin pages header
    + *
    + * @return array
    + */
    +function takeposAdminPrepareHead()
    +{
    +	global $langs, $conf;
    +
    +	$langs->load("cashdesk");
    +
    +	$h = 0;
    +	$head = array();
    +
    +	$head[$h][0] = dol_buildpath("/takepos/admin/setup.php", 1);
    +	$head[$h][1] = $langs->trans("Settings");
    +	$head[$h][2] = 'settings';
    +	$h++;
    +	$head[$h][0] = dol_buildpath("/takepos/admin/about.php", 1);
    +	$head[$h][1] = $langs->trans("About");
    +	$head[$h][2] = 'about';
    +	$h++;
    +
    +	// Show more tabs from modules
    +	// Entries must be declared in modules descriptor with line
    +	//$this->tabs = array(
    +	//	'entity:+tabname:Title:@takepos:/takepos/mypage.php?id=__ID__'
    +	//); // to add new tab
    +	//$this->tabs = array(
    +	//	'entity:-tabname:Title:@takepos:/takepos/mypage.php?id=__ID__'
    +	//); // to remove a tab
    +	complete_head_from_modules($conf, $langs, $object, $head, $h, 'takepos');
    +
    +	return $head;
    +}
    diff --git a/htdocs/takepos/modulebuilder.txt b/htdocs/takepos/modulebuilder.txt
    new file mode 100644
    index 00000000000..24ea0d6eac5
    --- /dev/null
    +++ b/htdocs/takepos/modulebuilder.txt
    @@ -0,0 +1,3 @@
    +# DO NOT DELETE THIS FILE MANUALLY
    +# File to flag module built using official module template.
    +# When this file is present into a module directory, you can edit it with the module builder tool. Use ModuleBuilder if you want to delete module. 
    \ No newline at end of file
    diff --git a/htdocs/takepos/pay.php b/htdocs/takepos/pay.php
    new file mode 100644
    index 00000000000..898b9069ba0
    --- /dev/null
    +++ b/htdocs/takepos/pay.php
    @@ -0,0 +1,120 @@
    +<?php
    +/* Copyright (C) 2018	Andreu Bisquerra	<jove@bisquerra.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +//if (! defined('NOREQUIREUSER'))	define('NOREQUIREUSER','1');	// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIREDB'))		define('NOREQUIREDB','1');		// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIRESOC'))		define('NOREQUIRESOC','1');
    +//if (! defined('NOREQUIRETRAN'))		define('NOREQUIRETRAN','1');
    +if (! defined('NOCSRFCHECK'))		define('NOCSRFCHECK','1');
    +if (! defined('NOTOKENRENEWAL'))	define('NOTOKENRENEWAL','1');
    +if (! defined('NOREQUIREMENU'))		define('NOREQUIREMENU','1');
    +if (! defined('NOREQUIREHTML'))		define('NOREQUIREHTML','1');
    +if (! defined('NOREQUIREAJAX'))		define('NOREQUIREAJAX','1');
    +
    +$_GET['theme']="md"; // Force theme. MD theme provides better look and feel to TakePOS
    +
    +require '../main.inc.php';	// Load $user and permissions
    +require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
    +
    +$place = GETPOST('place','int');
    +
    +
    +/*
    + * View
    + */
    +
    +$sql="SELECT rowid FROM ".MAIN_DB_PREFIX."facture where facnumber='(PROV-POS-".$place.")'";
    +$resql = $db->query($sql);
    +$row = $db->fetch_array ($resql);
    +$placeid=$row[0];
    +if (! $placeid) $placeid=0; // Invoice not exist
    +else{
    +	$invoice = new Facture($db);
    +	$invoice->fetch($placeid);
    +}
    +
    +top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
    +
    +$langs->loadLangs(array("main", "bills", "cashdesk"));
    +?>
    +<link rel="stylesheet" href="css/pos.css">
    +	<script>
    +	var received=0;
    +	function addreceived(price)
    +	{
    +	received+=parseFloat(price);
    +	$('#change1').html(received.toFixed(2));
    +	if (received><?php echo $invoice->total_ttc;?>)
    +		{
    +		var change=parseFloat(received-<?php echo $invoice->total_ttc;?>);
    +		$('#change2').html(change.toFixed(2));
    +		}
    +	}
    +
    +	function reset()
    +	{
    +		received=0;
    +		addreceived(0);
    +		$('#change2').html(received.toFixed(2));
    +	}
    +
    +	function Validate(payment){
    +        parent.$("#poslines").load("invoice.php?place=<?php echo $place;?>&action=valid&pay="+payment, function() {
    +            parent.$("#poslines").scrollTop(parent.$("#poslines")[0].scrollHeight);
    +            parent.$.colorbox.close();
    +        });
    +
    +	}
    +</script>
    +</head>
    +<body>
    +
    +<div style="position:absolute; top:2%; left:5%; height:36%; width:91%;">
    +<center>
    +<div style="width:40%; background-color:#222222; border-radius:8px; margin-bottom: 4px;">
    +<center><span style='font-family: digital; font-size: 280%;'><font color="white"><?php echo $langs->trans('TotalTTC');?>: </font><font color="red"><span id="totaldisplay"><?php echo price($invoice->total_ttc, 1, '', 1, - 1, - 1, $conf->currency) ?></span></span></center>
    +</div>
    +<div style="width:40%; background-color:#333333; border-radius:8px; margin-bottom: 4px;">
    +<center><span style='font-family: digital; font-size: 250%;'><font color="white"><?php echo $langs->trans("AlreadyPaid"); ?>: </font><font color="red"><span id="change1"><?php echo price(0) ?></span></center>
    +</div>
    +<div style="width:40%; background-color:#333333; border-radius:8px; margin-bottom: 4px;">
    +<center><span style='font-family: digital; font-size: 250%;'><font color="white"><?php echo $langs->trans("Change"); ?>: </font><font color="red"><span id="change2"><?php echo price(0) ?></span></span></center>
    +</div>
    +</center>
    +</div>
    +
    +<div style="position:absolute; top:40%; left:5%; height:55%; width:91%;">
    +<button type="button" class="calcbutton" onclick="addreceived(10);">10</button>
    +<button type="button" class="calcbutton" onclick="addreceived(20);">20</button>
    +<button type="button" class="calcbutton" onclick="addreceived(50);">50</button>
    +<button type="button" <?php if ($placeid==0) echo "disabled";?> class="calcbutton2" onclick="Validate('cash');"><?php echo $langs->trans("Cash"); ?></button>
    +<button type="button" class="calcbutton" onclick="addreceived(1);">1</button>
    +<button type="button" class="calcbutton" onclick="addreceived(2);">2</button>
    +<button type="button" class="calcbutton" onclick="addreceived(5);">5</button>
    +<button type="button" <?php if ($placeid==0) echo "disabled";?> class="calcbutton2" onclick="Validate('card');"><?php echo $langs->trans("PaymentTypeCB"); ?></button>
    +<button type="button" class="calcbutton" onclick="addreceived(0.10);">0.10</button>
    +<button type="button" class="calcbutton" onclick="addreceived(0.20);">0.20</button>
    +<button type="button" class="calcbutton" onclick="addreceived(0.50);">0.50</button>
    +<button type="button" class="calcbutton2" onclick="parent.$.colorbox.close();"><span id="printtext"><?php echo $langs->trans("GoBack"); ?></span></button>
    +<button type="button" class="calcbutton" onclick="addreceived(0.01);">0.01</button>
    +<button type="button" class="calcbutton" onclick="addreceived(0.02);">0.02</button>
    +<button type="button" class="calcbutton" onclick="addreceived(0.05);">0.05</button>
    +<button type="button" class="calcbutton2" onclick="reset();"><span style='font-size: 150%;'>C</span></button>
    +</div>
    +
    +</body>
    +</html>
    \ No newline at end of file
    diff --git a/htdocs/takepos/receipt.php b/htdocs/takepos/receipt.php
    new file mode 100644
    index 00000000000..d5c4ceba0a1
    --- /dev/null
    +++ b/htdocs/takepos/receipt.php
    @@ -0,0 +1,106 @@
    +<?php
    +/* Copyright (C) 2007-2008 Jeremie Ollivier    <jeremie.o@laposte.net>
    + * Copyright (C) 2011      Laurent Destailleur <eldy@users.sourceforge.net>
    + * Copyright (C) 2012      Marcos García       <marcosgdf@gmail.com>
    + * Copyright (C) 2018      Andreu Bisquerra    <jove@bisquerra.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +require '../main.inc.php';	// Load $user and permissions
    +include_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
    +
    +$langs->loadLangs(array("main", "cashdesk"));
    +
    +/*
    + * View
    + */
    +
    +top_httphead('text/html');
    +
    +$facid=GETPOST('facid','int');
    +$place=GETPOST('place','int');
    +if ($place>0){
    +    $sql="SELECT rowid FROM ".MAIN_DB_PREFIX."facture where facnumber='(PROV-POS-".$place.")'";
    +    $resql = $db->query($sql);
    +    $row = $db->fetch_array ($resql);
    +    $facid=$row[0];
    +}
    +$object=new Facture($db);
    +$object->fetch($facid);
    +
    +// IMPORTANT: This file is sended to 'Takepos Printing' application. Keep basic file. No external files as css, js... If you need images use absolut path.
    +?>
    +<html>
    +<body>
    +<center>
    +<font size="4">
    +<?php echo $mysoc->name; ?>
    +</font>
    +</center>
    +<br>
    +<p align="left">
    +<?php print dol_nl2br(dol_format_address($mysoc)); ?>
    +</p>
    +<p align="right">
    +<?php
    +print $langs->trans('Date')." ".dol_print_date($object->date, 'day').'<br>';
    +if ($mysoc->country_code == 'ES') print "Factura simplificada ";
    +print $object->ref;
    +?>
    +</p>
    +<br>
    +
    +<table width="100%">
    +    <thead>
    +	<tr>
    +        <th align="center"><?php print $langs->trans("Label"); ?></th>
    +        <th align="right"><?php print $langs->trans("Qty"); ?></th>
    +        <th align="right"><?php print $langs->trans("TotalTTC"); ?></th>
    +	</tr>
    +    </thead>
    +    <tbody>
    +    <?php
    +    foreach ($object->lines as $line)
    +    {
    +    ?>
    +    <tr>
    +        <td><?php echo $line->product_label;?></td>
    +        <td align="right"><?php echo $line->qty;?></td>
    +        <td align="right"><?php echo price($line->total_ttc);?></td>
    +    </tr>
    +    <?php
    +    }
    +    ?>
    +    </tbody>
    +</table>
    +<br>
    +<table align="right">
    +<tr>
    +    <th align="right"><?php echo $langs->trans("TotalHT");?></th>
    +    <td align="right"><?php echo price($object->total_ht, 1, '', 1, - 1, - 1, $conf->currency)."\n";?></td>
    +</tr>
    +<tr>
    +    <th align="right"><?php echo $langs->trans("TotalVAT").'</th><td align="right">'.price($object->total_tva, 1, '', 1, - 1, - 1, $conf->currency)."\n";?></td>
    +</tr>
    +<tr>
    +    <th align="right"><?php echo ''.$langs->trans("TotalTTC").'</th><td align="right">'.price($object->total_ttc, 1, '', 1, - 1, - 1, $conf->currency)."\n";?></td>
    +</tr>
    +</table>
    +
    +<script type="text/javascript">
    +    window.print();
    +</script>
    +</body>
    +</html>
    diff --git a/htdocs/takepos/takepos.php b/htdocs/takepos/takepos.php
    new file mode 100644
    index 00000000000..8dec143bffe
    --- /dev/null
    +++ b/htdocs/takepos/takepos.php
    @@ -0,0 +1,403 @@
    +<?php
    +/* Copyright (C) 2018	Andreu Bisquerra	<jove@bisquerra.com>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +//if (! defined('NOREQUIREUSER'))	define('NOREQUIREUSER','1');	// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIREDB'))		define('NOREQUIREDB','1');		// Not disabled cause need to load personalized language
    +//if (! defined('NOREQUIRESOC'))		define('NOREQUIRESOC','1');
    +//if (! defined('NOREQUIRETRAN'))		define('NOREQUIRETRAN','1');
    +if (! defined('NOCSRFCHECK'))		define('NOCSRFCHECK','1');
    +if (! defined('NOTOKENRENEWAL'))	define('NOTOKENRENEWAL','1');
    +if (! defined('NOREQUIREMENU'))		define('NOREQUIREMENU','1');
    +if (! defined('NOREQUIREHTML'))		define('NOREQUIREHTML','1');
    +if (! defined('NOREQUIREAJAX'))		define('NOREQUIREAJAX','1');
    +
    +$_GET['theme']="md"; // Force theme. MD theme provides better look and feel to TakePOS
    +
    +require '../main.inc.php';	// Load $user and permissions
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
    +require_once DOL_DOCUMENT_ROOT . '/compta/facture/class/facture.class.php';
    +
    +$place = GETPOST('place','int');
    +if ($place=="") $place="0";
    +$action = GETPOST('action','alpha');
    +
    +$langs->loadLangs(array("bills","orders","commercial","cashdesk"));
    +
    +
    +/*
    + * View
    + */
    +
    +// Title
    +$title='TakePOS - Dolibarr '.DOL_VERSION;
    +if (! empty($conf->global->MAIN_APPLICATION_TITLE)) $title='TakePOS - '.$conf->global->MAIN_APPLICATION_TITLE;
    +top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
    +
    +?>
    +<link rel="stylesheet" href="css/pos.css?a=xxx">
    +<script type="text/javascript" src="js/takepos.js" ></script>
    +<link rel="stylesheet" href="css/colorbox.css" type="text/css" media="screen" />
    +<script type="text/javascript" src="js/jquery.colorbox-min.js"></script>
    +<script language="javascript">
    +<?php
    +$categorie = new Categorie($db);
    +$categories = $categorie->get_full_arbo('product');
    +?>
    +var categories = JSON.parse( '<?php echo json_encode($categories);?>' );
    +var currentcat;
    +var pageproducts=0;
    +var pagecategories=0;
    +var place="<?php echo $place;?>";
    +var editaction="qty";
    +var editnumber="";
    +function PrintCategories(first){
    +	for (i = 0; i < 14; i++) {
    +		if (typeof (categories[parseInt(i)+parseInt(first)]) == "undefined") break;
    +		$("#catdesc"+i).text(categories[parseInt(i)+parseInt(first)]['label']);
    +        $("#catimg"+i).attr("src","genimg/?query=cat&w=55&h=50&id="+categories[parseInt(i)+parseInt(first)]['rowid']);
    +        $("#catdiv"+i).data("rowid",categories[parseInt(i)+parseInt(first)]['rowid']);
    +	}
    +}
    +
    +function MoreCategories(moreorless){
    +	if (moreorless=="more"){
    +		$('#catimg15').animate({opacity: '0.5'}, 100);
    +		$('#catimg15').animate({opacity: '1'}, 100);
    +		pagecategories=pagecategories+1;
    +	}
    +	if (moreorless=="less"){
    +		$('#catimg14').animate({opacity: '0.5'}, 100);
    +		$('#catimg14').animate({opacity: '1'}, 100);
    +		if (pagecategories==0) return; //Return if no less pages
    +		pagecategories=pagecategories-1;
    +	}
    +	if (typeof (categories[14*pagecategories] && moreorless=="more") == "undefined"){ // Return if no more pages
    +		pagecategories=pagecategories-1;
    +		return;
    +	}
    +	for (i = 0; i < 14; i++) {
    +		if (typeof (categories[i+(14*pagecategories)]) == "undefined"){
    +				$("#catdesc"+i).text("");
    +				$("#catimg"+i).attr("src","");
    +				continue;
    +			}
    +		$("#catdesc"+i).text(categories[i+(14*pagecategories)]['label']);
    +        $("#catimg"+i).attr("src","genimg/?query=cat&w=55&h=50&id="+categories[i+(14*pagecategories)]['rowid']);
    +        $("#catdiv"+i).data("rowid",categories[i+(14*pagecategories)]['rowid']);
    +	}
    +}
    +
    +function LoadProducts(position){
    +    $('#catimg'+position).animate({opacity: '0.5'}, 100);
    +	$('#catimg'+position).animate({opacity: '1'}, 100);
    +	currentcat=$('#catdiv'+position).data('rowid');
    +    if (currentcat=="") return;
    +	pageproducts=0;
    +	$.getJSON('./ajax.php?action=getProducts&category='+currentcat, function(data) {
    +		for (i = 0; i < 30; i++) {
    +			if (typeof (data[i]) == "undefined"){
    +				$("#prodesc"+i).text("");
    +				$("#proimg"+i).attr("src","");
    +                $("#prodiv"+i).data("rowid","");
    +				continue;
    +			}
    +			$("#prodesc"+i).text(data[parseInt(i)]['label']);
    +			$("#proimg"+i).attr("src","genimg/?query=pro&w=55&h=50&id="+data[i]['id']);
    +			$("#prodiv"+i).data("rowid",data[i]['id']);
    +		}
    +	});
    +}
    +
    +function MoreProducts(moreorless){
    +	if (moreorless=="more"){
    +		$('#proimg31').animate({opacity: '0.5'}, 100);
    +		$('#proimg31').animate({opacity: '1'}, 100);
    +		pageproducts=pageproducts+1;
    +	}
    +	if (moreorless=="less"){
    +		$('#proimg30').animate({opacity: '0.5'}, 100);
    +		$('#proimg30').animate({opacity: '1'}, 100);
    +		if (pageproducts==0) return; //Return if no less pages
    +		pageproducts=pageproducts-1;
    +	}
    +	$.getJSON('./ajax.php?action=getProducts&category='+currentcat, function(data) {
    +		if (typeof (data[(30*pageproducts)]) == "undefined" && moreorless=="more"){ // Return if no more pages
    +			pageproducts=pageproducts-1;
    +			return;
    +		}
    +		for (i = 0; i < 30; i++) {
    +			if (typeof (data[i+(30*pageproducts)]) == "undefined"){
    +				$("#prodesc"+i).text("");
    +				$("#proimg"+i).attr("src","");
    +                $("#prodiv"+i).data("rowid","");
    +				continue;
    +			}
    +			$("#prodesc"+i).text(data[parseInt(i+(30*pageproducts))]['label']);
    +			$("#proimg"+i).attr("src","genimg/?query=pro&w=55&h=50&id="+data[i+(30*pageproducts)]['id']);
    +			$("#prodiv"+i).data("rowid",data[i+(30*pageproducts)]['id']);
    +		}
    +	});
    +}
    +
    +function ClickProduct(position){
    +    $('#proimg'+position).animate({opacity: '0.5'}, 100);
    +	$('#proimg'+position).animate({opacity: '1'}, 100);
    +	idproduct=$('#prodiv'+position).data('rowid');
    +    if (idproduct=="") return;
    +	$("#poslines").load("invoice.php?action=addline&place="+place+"&idproduct="+idproduct, function() {
    +		$('#poslines').scrollTop($('#poslines')[0].scrollHeight);
    +	});
    +
    +}
    +
    +function deleteline(){
    +	$("#poslines").load("invoice.php?action=deleteline&place="+place+"&idline="+selectedline, function() {
    +		$('#poslines').scrollTop($('#poslines')[0].scrollHeight);
    +	});
    +}
    +
    +function Customer(){
    +	$.colorbox({href:"customers.php?nomassaction=1&place="+place, width:"90%", height:"80%", transition:"none", iframe:"true", title:"<?php echo $langs->trans("Customer");?>"});
    +}
    +
    +function CloseBill(){
    +	$.colorbox({href:"pay.php?place="+place, width:"80%", height:"90%", transition:"none", iframe:"true", title:"<?php echo $langs->trans("CloseBill");?>"});
    +}
    +
    +function Floors(){
    +	$.colorbox({href:"floors.php?place="+place, width:"90%", height:"90%", transition:"none", iframe:"true", title:"<?php echo $langs->trans("Floors");?>"});
    +}
    +
    +function FreeZone(){
    +	$.colorbox({href:"freezone.php?place="+place, onClosed: function () { Refresh(); },width:"80%", height:"30%", transition:"none", iframe:"true", title:"<?php echo $langs->trans("FreeZone");?>"});
    +}
    +
    +function Refresh(){
    +	$("#poslines").load("invoice.php?place="+place, function() {
    +		$('#poslines').scrollTop($('#poslines')[0].scrollHeight);
    +	});
    +}
    +
    +function Search(){
    +	$("#poslines").load("invoice.php?action=search&place="+place, function() {
    +		$('#poslines').scrollTop($('#poslines')[0].scrollHeight);
    +	});
    +}
    +
    +function Search2(){
    +	pageproducts=0;
    +	$.getJSON('./ajax.php?action=search&term='+$('#search').val(), function(data) {
    +		for (i = 0; i < 30; i++) {
    +			if (typeof (data[i]) == "undefined"){
    +				$("#prodesc"+i).text("");
    +				$("#proimg"+i).attr("src","");
    +                $("#prodiv"+i).data("rowid","");
    +				continue;
    +			}
    +			$("#prodesc"+i).text(data[parseInt(i)]['label']);
    +			$("#proimg"+i).attr("src","genimg/?query=pro&w=55&h=50&id="+data[i]['rowid']);
    +			$("#prodiv"+i).data("rowid",data[i]['rowid']);
    +		}
    +	});
    +}
    +
    +function Edit(number){
    +    var text=selectedtext+"<br> ";
    +    if (number=='c'){
    +        editnumber="";
    +        Refresh();
    +        return;
    +    }
    +    else if (number=='qty'){
    +        if (editaction=='qty' && editnumber!=""){
    +            $("#poslines").load("invoice.php?action=updateqty&place="+place+"&idline="+selectedline+"&number="+editnumber, function() {
    +                editnumber="";
    +                $('#poslines').scrollTop($('#poslines')[0].scrollHeight);
    +                $("#qty").html("<?php echo $langs->trans("Qty"); ?>");
    +            });
    +            return;
    +        }
    +        else {
    +            editaction="qty";
    +        }
    +    }
    +    else if (number=='p'){
    +        if (editaction=='p' && editnumber!=""){
    +            $("#poslines").load("invoice.php?action=updateprice&place="+place+"&idline="+selectedline+"&number="+editnumber, function() {
    +                editnumber="";
    +                $('#poslines').scrollTop($('#poslines')[0].scrollHeight);
    +                $("#price").html("<?php echo $langs->trans("Price"); ?>");
    +            });
    +            return;
    +        }
    +        else {
    +            editaction="p";
    +        }
    +    }
    +    else if (number=='r'){
    +        if (editaction=='r' && editnumber!=""){
    +            $("#poslines").load("invoice.php?action=updatereduction&place="+place+"&idline="+selectedline+"&number="+editnumber, function() {
    +                editnumber="";
    +                $('#poslines').scrollTop($('#poslines')[0].scrollHeight);
    +                $("#reduction").html("<?php echo $langs->trans("ReductionShort"); ?>");
    +            });
    +            return;
    +        }
    +        else {
    +            editaction="r";
    +        }
    +    }
    +    else {
    +        editnumber=editnumber+number;
    +    }
    +    if (editaction=='qty'){
    +        text=text+"<?php echo $langs->trans("Modify")." -> ".$langs->trans("Qty").": "; ?>";
    +        $("#qty").html("OK");
    +        $("#price").html("<?php echo $langs->trans("Price"); ?>");
    +        $("#reduction").html("<?php echo $langs->trans("ReductionShort"); ?>");
    +    }
    +    if (editaction=='p'){
    +        text=text+"<?php echo $langs->trans("Modify")." -> ".$langs->trans("Price").": "; ?>";
    +        $("#qty").html("<?php echo $langs->trans("Qty"); ?>");
    +        $("#price").html("OK");
    +        $("#reduction").html("<?php echo $langs->trans("ReductionShort"); ?>");
    +    }
    +    if (editaction=='r'){
    +        text=text+"<?php echo $langs->trans("Modify")." -> ".$langs->trans("ReductionShort").": "; ?>";
    +        $("#qty").html("<?php echo $langs->trans("Qty"); ?>");
    +        $("#price").html("<?php echo $langs->trans("Price"); ?>");
    +        $("#reduction").html("OK");
    +    }
    +    $('#'+selectedline).find("td:first").html(text+editnumber);
    +}
    +
    +function TakeposPrintingOrder(){
    +	$("#poslines").load("invoice.php?action=order&place="+place, function() {
    +		$('#poslines').scrollTop($('#poslines')[0].scrollHeight);
    +	});
    +}
    +
    +$( document ).ready(function() {
    +    PrintCategories(0);
    +	LoadProducts(0);
    +	Refresh();
    +});
    +</script>
    +
    +<body style="overflow: hidden; background-color:#E8E8E8;">
    +
    +<div id="poslines" style="position:absolute; top:2%; left:0.5%; height:36%; width:31%; overflow: auto;">
    +</div>
    +
    +<div style="position:absolute; top:1%; left:32.5%; height:37%; width:32.5%;">
    +    <button type="button" class="calcbutton" onclick="Edit(7);">7</button>
    +    <button type="button" class="calcbutton" onclick="Edit(8);">8</button>
    +    <button type="button" class="calcbutton" onclick="Edit(9);">9</button>
    +    <button type="button" id="qty" class="calcbutton2" onclick="Edit('qty');"><?php echo $langs->trans("Qty"); ?></button>
    +    <button type="button" class="calcbutton" onclick="Edit(4);">4</button>
    +    <button type="button" class="calcbutton" onclick="Edit(5);">5</button>
    +    <button type="button" class="calcbutton" onclick="Edit(6);">6</button>
    +    <button type="button" id="price" class="calcbutton2" onclick="Edit('p');"><?php echo $langs->trans("Price"); ?></button>
    +    <button type="button" class="calcbutton" onclick="Edit(1);">1</button>
    +    <button type="button" class="calcbutton" onclick="Edit(2);">2</button>
    +    <button type="button" class="calcbutton" onclick="Edit(3);">3</button>
    +    <button type="button" id="reduction" class="calcbutton2" onclick="Edit('r');"><?php echo $langs->trans("ReductionShort"); ?></button>
    +    <button type="button" class="calcbutton" onclick="Edit(0);">0</button>
    +    <button type="button" class="calcbutton" onclick="Edit('.');">.</button>
    +    <button type="button" class="calcbutton" onclick="Edit('c');">C</button>
    +    <button type="button" class="calcbutton2" id="delete" style="color: red;" onclick="deleteline();"><b>X</b></button>
    +</div>
    +
    +<?php
    +// User menu and external TakePOS modules
    +$menus = array();
    +$r=0;
    +$menus[$r++]=array('title'=>$langs->trans("SearchProduct"),
    +					'action'=>'Search();');
    +$menus[$r++]=array('title'=>$langs->trans("FreeZone"),
    +                   'action'=>'FreeZone();');
    +$menus[$r++]=array('title'=>$langs->trans("Customer"),
    +					'action'=>'Customer();');
    +$menus[$r++]=array('title'=>$langs->trans("BackOffice"),
    +                   'action'=>'window.open(\''.DOL_URL_ROOT.'\', \'backoffice\');');
    +$menus[$r++]=array('title'=>$langs->trans("ValidateBill"),
    +					'action'=>'CloseBill();');
    +$menus[$r++]=array('title'=>$langs->trans("Logout"),
    +                   'action'=>'window.location.href=\''.DOL_URL_ROOT.'/user/logout.php\';');
    +if($conf->global->TAKEPOS_BAR_RESTAURANT){
    +	$menus[$r++]=array('title'=>$langs->trans("Floors"),
    +					'action'=>'Floors();');
    +	if ($conf->global->TAKEPOS_ORDER_PRINTERS){
    +		$menus[$r++]=array('title'=>$langs->trans("Order"),
    +						'action'=>'TakeposPrintingOrder();');
    +	}
    +}
    +?>
    +<div style="position:absolute; top:1%; left:65.5%; height:37%; width:32.5%;">
    +<?php
    +foreach($menus as $menu) {
    +    echo '<button type="button" class="actionbutton" onclick="'.$menu['action'].'">'.$menu['title'].'</button>';
    +}
    +?>
    +</div>
    +
    +<div style="position:absolute; top:39%; left:0.3%; height:59%; width:32%;">
    +	<?php
    +	$count=0;
    +	while ($count<16)
    +	{
    +	?>
    +	<div class='wrapper' <?php if ($count==14) echo 'onclick="MoreCategories(\'less\');"'; else if ($count==15) echo 'onclick="MoreCategories(\'more\');"'; else echo 'onclick="LoadProducts('.$count.');"';?> id='catdiv<?php echo $count;?>'>
    +		<img class='imgwrapper' <?php if ($count==14) echo 'src="img/arrow-prev-top.png"'; if ($count==15) echo 'src="img/arrow-next-top.png"';?> width="98%" id='catimg<?php echo $count;?>'/>
    +		<div class='description'>
    +			<div class='description_content' id='catdesc<?php echo $count;?>'></div>
    +		</div>
    +	</div>
    +	<?php
    +    $count++;
    +	}
    +	?>
    +</div>
    +
    +<div style="position:absolute; top:39%; left:32%; height:58%; width:72%;">
    +<?php
    +$count=0;
    +while ($count<32)
    +	{
    +	?>
    +	<div class='wrapper2' id='prodiv<?php echo $count;?>' <?php if ($count==30) {?> onclick="MoreProducts('less');" <?php } if ($count==31) {?> onclick="MoreProducts('more');" <?php } else echo 'onclick="ClickProduct('.$count.');"';?>>
    +		<img class='imgwrapper' <?php if ($count==30) echo 'src="img/arrow-prev-top.png"'; if ($count==31) echo 'src="img/arrow-next-top.png"';?> width="95%" id='proimg<?php echo $count;?>'/>
    +		<div class='description'>
    +			<div class='description_content' id='prodesc<?php echo $count;?>'></div>
    +		</div>
    +	</div>
    +	<?php
    +	$count++;
    +	}
    +?>
    +</div>
    +
    +</body>
    +<?php
    +
    +llxFooter();
    +
    +$db->close();
    +
    +
    +
    diff --git a/htdocs/theme/common/octicons/build/data.json b/htdocs/theme/common/octicons/build/data.json
    index 41fa0740b8a..c70ceda6631 100644
    --- a/htdocs/theme/common/octicons/build/data.json
    +++ b/htdocs/theme/common/octicons/build/data.json
    @@ -1 +1 @@
    -{"alert":{"name":"alert","figma":{"id":"0:5","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["warning","triangle","exclamation","point"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z\"/>"},"arrow-down":{"name":"arrow-down","figma":{"id":"0:8","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 7V3H3v4H0l5 6 5-6H7z\"/>"},"arrow-left":{"name":"arrow-left","figma":{"id":"0:10","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 3L0 8l6 5v-3h4V6H6V3z\"/>"},"arrow-right":{"name":"arrow-right","figma":{"id":"0:12","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 8L4 3v3H0v4h4v3l6-5z\"/>"},"arrow-up":{"name":"arrow-up","figma":{"id":"0:14","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5 3L0 9h3v4h4V9h3L5 3z\"/>"},"arrow-small-down":{"name":"arrow-small-down","figma":{"id":"0:16","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction","little","tiny"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 7V5H2v2H0l3 4 3-4H4z\"/>"},"arrow-small-left":{"name":"arrow-small-left","figma":{"id":"0:18","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction","little","tiny"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 7V5L0 8l4 3V9h2V7H4z\"/>"},"arrow-small-right":{"name":"arrow-small-right","figma":{"id":"0:20","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction","little","tiny"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 8L2 5v2H0v2h2v2l4-3z\"/>"},"arrow-small-up":{"name":"arrow-small-up","figma":{"id":"0:22","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction","little","tiny"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 5L0 9h2v2h2V9h2L3 5z\"/>"},"beaker":{"name":"beaker","figma":{"id":"0:26","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["experiment","labs","experimental","feature","test","science","education","study","development","testing"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14.84 14.59L11.46 7V3h1V2h-9v1h1v4l-3.37 7.59A1 1 0 0 0 2 16h11.94c.72 0 1.2-.75.91-1.41h-.01zM4.21 10l1.25-3V3h5v4l1.25 3h-7.5zm4.25-2h1v1h-1V8zm-1-1h-1V6h1v1zm0-3h1v1h-1V4zm0-3h-1V0h1v1z\"/>"},"bell":{"name":"bell","figma":{"id":"0:34","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["notification"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 12v1H0v-1l.73-.58c.77-.77.81-2.55 1.19-4.42C2.69 3.23 6 2 6 2c0-.55.45-1 1-1s1 .45 1 1c0 0 3.39 1.23 4.16 5 .38 1.88.42 3.66 1.19 4.42l.66.58H14zm-7 4c1.11 0 2-.89 2-2H5c0 1.11.89 2 2 2z\"/>"},"bold":{"name":"bold","figma":{"id":"0:38","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["markdown","bold","text"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M1 2h3.83c2.48 0 4.3.75 4.3 2.95 0 1.14-.63 2.23-1.67 2.61v.06c1.33.3 2.3 1.23 2.3 2.86 0 2.39-1.97 3.52-4.61 3.52H1V2zm3.66 4.95c1.67 0 2.38-.66 2.38-1.69 0-1.17-.78-1.61-2.34-1.61H3.13v3.3h1.53zm.27 5.39c1.77 0 2.75-.64 2.75-1.98 0-1.27-.95-1.81-2.75-1.81h-1.8v3.8h1.8v-.01z\"/>"},"book":{"name":"book","figma":{"id":"0:43","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","wiki","readme"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z\"/>"},"bookmark":{"name":"bookmark","figma":{"id":"0:54","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["tab","star"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 0H1C.27 0 0 .27 0 1v15l5-3.09L10 16V1c0-.73-.27-1-1-1zm-.78 4.25L6.36 5.61l.72 2.16c.06.22-.02.28-.2.17L5 6.6 3.12 7.94c-.19.11-.25.05-.2-.17l.72-2.16-1.86-1.36c-.17-.16-.14-.23.09-.23l2.3-.03.7-2.16h.25l.7 2.16 2.3.03c.23 0 .27.08.09.23h.01z\"/>"},"briefcase":{"name":"briefcase","figma":{"id":"0:58","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["suitcase","business"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 4V3c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v1H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1H9zM6 3h2v1H6V3zm7 6H8v1H6V9H1V5h1v3h10V5h1v4z\"/>"},"broadcast":{"name":"broadcast","figma":{"id":"0:63","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["rss","radio","signal"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 9H8c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1H6c-.55 0-1 .45-1 1v2h1v3c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-3h1v-2c0-.55-.45-1-1-1zM7 7h1v1H7V7zm2 4H8v4H7v-4H6v-1h3v1zm2.09-3.5c0-1.98-1.61-3.59-3.59-3.59A3.593 3.593 0 0 0 4 8.31v1.98c-.61-.77-1-1.73-1-2.8 0-2.48 2.02-4.5 4.5-4.5S12 5.01 12 7.49c0 1.06-.39 2.03-1 2.8V8.31c.06-.27.09-.53.09-.81zm3.91 0c0 2.88-1.63 5.38-4 6.63v-1.05a6.553 6.553 0 0 0 3.09-5.58A6.59 6.59 0 0 0 7.5.91 6.59 6.59 0 0 0 .91 7.5c0 2.36 1.23 4.42 3.09 5.58v1.05A7.497 7.497 0 0 1 7.5 0C11.64 0 15 3.36 15 7.5z\"/>"},"browser":{"name":"browser","figma":{"id":"0:70","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["window","web"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5 3h1v1H5V3zM3 3h1v1H3V3zM1 3h1v1H1V3zm12 10H1V5h12v8zm0-9H7V3h6v1zm1-1c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V3z\"/>"},"bug":{"name":"bug","figma":{"id":"0:78","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["insect","issue"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.17 10h3V9h-3V8l3.17-1.03-.34-.94-2.83.97V6c0-.55-.45-1-1-1V4c0-.48-.36-.88-.83-.97L10.37 2h1.8V1h-2.2l-2 2h-.59L5.37 1h-2.2v1h1.8L6 3.03c-.47.09-.83.48-.83.97v1c-.55 0-1 .45-1 1v1l-2.83-.97-.34.94L4.17 8v1h-3v1h3v1L1 12.03l.34.94L4.17 12v1c0 .55.45 1 1 1h1l1-1V6h1v7l1 1h1c.55 0 1-.45 1-1v-1l2.83.97.34-.94L11.17 11v-1zm-2-5h-3V4h3v1z\"/>"},"calendar":{"name":"calendar","figma":{"id":"0:82","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["time","day","month","year","date","appointment"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 2h-1v1.5c0 .28-.22.5-.5.5h-2c-.28 0-.5-.22-.5-.5V2H6v1.5c0 .28-.22.5-.5.5h-2c-.28 0-.5-.22-.5-.5V2H2c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 12H2V5h11v9zM5 3H4V1h1v2zm6 0h-1V1h1v2zM6 7H5V6h1v1zm2 0H7V6h1v1zm2 0H9V6h1v1zm2 0h-1V6h1v1zM4 9H3V8h1v1zm2 0H5V8h1v1zm2 0H7V8h1v1zm2 0H9V8h1v1zm2 0h-1V8h1v1zm-8 2H3v-1h1v1zm2 0H5v-1h1v1zm2 0H7v-1h1v1zm2 0H9v-1h1v1zm2 0h-1v-1h1v1zm-8 2H3v-1h1v1zm2 0H5v-1h1v1zm2 0H7v-1h1v1zm2 0H9v-1h1v1z\"/>"},"check":{"name":"check","figma":{"id":"0:104","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["mark","yes","confirm","accept","ok","success"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 5.5l-8 8-4-4L1.5 8 4 10.5 10.5 4 12 5.5z\"/>"},"checklist":{"name":"checklist","figma":{"id":"0:108","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["todo","tasks"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 8.5l-6 6-3-3L8.5 10l1.5 1.5L14.5 7 16 8.5zM5.7 12.2l.8.8H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h7c.55 0 1 .45 1 1v6.5l-.8-.8c-.39-.39-1.03-.39-1.42 0L5.7 10.8a.996.996 0 0 0 0 1.41v-.01zM4 4h5V3H4v1zm0 2h5V5H4v1zm0 2h3V7H4v1zM3 9H2v1h1V9zm0-2H2v1h1V7zm0-2H2v1h1V5zm0-2H2v1h1V3z\"/>"},"chevron-down":{"name":"chevron-down","figma":{"id":"0:117","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["triangle","arrow"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5 11.5l-5-5L1.5 5 5 8.75 8.5 5 10 6.5l-5 5z\"/>"},"chevron-left":{"name":"chevron-left","figma":{"id":"0:119","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["triangle","arrow"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 3l1.5 1.5L3.75 8l3.75 3.5L6 13 1 8l5-5z\"/>"},"chevron-right":{"name":"chevron-right","figma":{"id":"0:121","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["triangle","arrow"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.5 8l-5 5L1 11.5 4.75 8 1 4.5 2.5 3l5 5z\"/>"},"chevron-up":{"name":"chevron-up","figma":{"id":"0:123","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["triangle","arrow"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 10l-1.5 1.5L5 7.75 1.5 11.5 0 10l5-5 5 5z\"/>"},"circle-slash":{"name":"circle-slash","figma":{"id":"0:127","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["no","deny","fail","failure","error","bad"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm0 1.3c1.3 0 2.5.44 3.47 1.17l-8 8A5.755 5.755 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zm0 11.41c-1.3 0-2.5-.44-3.47-1.17l8-8c.73.97 1.17 2.17 1.17 3.47 0 3.14-2.56 5.7-5.7 5.7z\"/>"},"circuit-board":{"name":"circuit-board","figma":{"id":"0:132","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["developer","hardware","electricity"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 5c0-.55.45-1 1-1s1 .45 1 1-.45 1-1 1-1-.45-1-1zm8 0c0-.55-.45-1-1-1s-1 .45-1 1 .45 1 1 1 1-.45 1-1zm0 6c0-.55-.45-1-1-1s-1 .45-1 1 .45 1 1 1 1-.45 1-1zm2-10H5v2.17c.36.19.64.47.83.83h2.34c.42-.78 1.33-1.28 2.34-1.05.75.19 1.36.8 1.53 1.55.31 1.38-.72 2.59-2.05 2.59-.8 0-1.48-.44-1.83-1.09H5.83c-.42.8-1.33 1.28-2.34 1.03-.73-.17-1.34-.78-1.52-1.52C1.72 4.49 2.2 3.59 3 3.17V1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1l5-5h2.17c.42-.78 1.33-1.28 2.34-1.05.75.19 1.36.8 1.53 1.55.31 1.38-.72 2.59-2.05 2.59-.8 0-1.48-.44-1.83-1.09H6.99L4 15h9c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1z\"/>"},"clippy":{"name":"clippy","figma":{"id":"0:138","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["copy","paste","save","capture","clipboard"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"/>"},"clock":{"name":"clock","figma":{"id":"0:147","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["time","hour","minute","second","watch"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 8h3v2H7c-.55 0-1-.45-1-1V4h2v4zM7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7z\"/>"},"cloud-download":{"name":"cloud-download","figma":{"id":"0:152","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["save","install","get"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 12h2l-3 3-3-3h2V7h2v5zm3-8c0-.44-.91-3-4.5-3C5.08 1 3 2.92 3 5 1.02 5 0 6.52 0 8c0 1.53 1 3 3 3h3V9.7H3C1.38 9.7 1.3 8.28 1.3 8c0-.17.05-1.7 1.7-1.7h1.3V5c0-1.39 1.56-2.7 3.2-2.7 2.55 0 3.13 1.55 3.2 1.8v1.2H12c.81 0 2.7.22 2.7 2.2 0 2.09-2.25 2.2-2.7 2.2h-2V11h2c2.08 0 4-1.16 4-3.5C16 5.06 14.08 4 12 4z\"/>"},"cloud-upload":{"name":"cloud-upload","figma":{"id":"0:156","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["put","export"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 9H5l3-3 3 3H9v5H7V9zm5-4c0-.44-.91-3-4.5-3C5.08 2 3 3.92 3 6 1.02 6 0 7.52 0 9c0 1.53 1 3 3 3h3v-1.3H3c-1.62 0-1.7-1.42-1.7-1.7 0-.17.05-1.7 1.7-1.7h1.3V6c0-1.39 1.56-2.7 3.2-2.7 2.55 0 3.13 1.55 3.2 1.8v1.2H12c.81 0 2.7.22 2.7 2.2 0 2.09-2.25 2.2-2.7 2.2h-2V12h2c2.08 0 4-1.16 4-3.5C16 6.06 14.08 5 12 5z\"/>"},"code":{"name":"code","figma":{"id":"0:160","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["brackets"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z\"/>"},"comment-discussion":{"name":"comment-discussion","figma":{"id":"0:164","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["converse","talk"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15 1H6c-.55 0-1 .45-1 1v2H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h1v3l3-3h4c.55 0 1-.45 1-1V9h1l3 3V9h1c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM9 11H4.5L3 12.5V11H1V5h4v3c0 .55.45 1 1 1h3v2zm6-3h-2v1.5L11.5 8H6V2h9v6z\"/>"},"comment":{"name":"comment","figma":{"id":"0:169","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["speak","bubble"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 1H2c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h2v3.5L7.5 11H14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 9H7l-2 2v-2H2V2h12v8z\"/>"},"credit-card":{"name":"credit-card","figma":{"id":"0:173","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["money","billing","payments","transactions"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 9H2V8h10v1zm4-6v9c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h14c.55 0 1 .45 1 1zm-1 3H1v6h14V6zm0-3H1v1h14V3zm-9 7H2v1h4v-1z\"/>"},"dash":{"name":"dash","figma":{"id":"0:178","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["hyphen","range"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 7v2h8V7H0z\"/>"},"dashboard":{"name":"dashboard","figma":{"id":"0:182","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["speed","dial"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 5H8V4h1v1zm4 3h-1v1h1V8zM6 5H5v1h1V5zM5 8H4v1h1V8zm11-5.5l-.5-.5L9 7c-.06-.02-1 0-1 0-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-.92l6-5.58zm-1.59 4.09c.19.61.3 1.25.3 1.91 0 3.42-2.78 6.2-6.2 6.2-3.42 0-6.21-2.78-6.21-6.2 0-3.42 2.78-6.2 6.2-6.2 1.2 0 2.31.34 3.27.94l.94-.94A7.459 7.459 0 0 0 8.51 1C4.36 1 1 4.36 1 8.5 1 12.64 4.36 16 8.5 16c4.14 0 7.5-3.36 7.5-7.5 0-1.03-.2-2.02-.59-2.91l-1 1z\"/>"},"database":{"name":"database","figma":{"id":"0:190","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["disks","data"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 15c-3.31 0-6-.9-6-2v-2c0-.17.09-.34.21-.5.67.86 3 1.5 5.79 1.5s5.12-.64 5.79-1.5c.13.16.21.33.21.5v2c0 1.1-2.69 2-6 2zm0-4c-3.31 0-6-.9-6-2V7c0-.11.04-.21.09-.31.03-.06.07-.13.12-.19C.88 7.36 3.21 8 6 8s5.12-.64 5.79-1.5c.05.06.09.13.12.19.05.1.09.21.09.31v2c0 1.1-2.69 2-6 2zm0-4c-3.31 0-6-.9-6-2V4 3c0-1.1 2.69-2 6-2s6 .9 6 2v2c0 1.1-2.69 2-6 2zm0-5c-2.21 0-4 .45-4 1s1.79 1 4 1 4-.45 4-1-1.79-1-4-1z\"/>"},"desktop-download":{"name":"desktop-download","figma":{"id":"0:196","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["clone","download"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 6h3V0h2v6h3l-4 4-4-4zm11-4h-4v1h4v8H1V3h4V2H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5.34c-.25.61-.86 1.39-2.34 2h8c-1.48-.61-2.09-1.39-2.34-2H15c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z\"/>"},"device-camera-video":{"name":"device-camera-video","figma":{"id":"0:198","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["watch","view","media","stream"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.2 2.091L10 5.721v-2.72c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-2.72l5.2 3.63c.33.23.8 0 .8-.41v-10c0-.41-.47-.64-.8-.41z\"/>"},"device-camera":{"name":"device-camera","figma":{"id":"0:202","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["photo","picture","image","snapshot"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15 3H7c0-.55-.45-1-1-1H2c-.55 0-1 .45-1 1-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM6 5H2V4h4v1zm4.5 7C8.56 12 7 10.44 7 8.5S8.56 5 10.5 5 14 6.56 14 8.5 12.44 12 10.5 12zM13 8.5c0 1.38-1.13 2.5-2.5 2.5S8 9.87 8 8.5 9.13 6 10.5 6 13 7.13 13 8.5z\"/>"},"device-desktop":{"name":"device-desktop","figma":{"id":"0:208","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["computer","monitor"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15 2H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5.34c-.25.61-.86 1.39-2.34 2h8c-1.48-.61-2.09-1.39-2.34-2H15c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 9H1V3h14v8z\"/>"},"device-mobile":{"name":"device-mobile","figma":{"id":"0:212","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["phone","iphone","cellphone"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM5 15.3c-.72 0-1.3-.58-1.3-1.3 0-.72.58-1.3 1.3-1.3.72 0 1.3.58 1.3 1.3 0 .72-.58 1.3-1.3 1.3zM9 12H1V2h8v10z\"/>"},"diff-added":{"name":"diff-added","figma":{"id":"0:217","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["new","addition","plus"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z\"/>"},"diff-ignored":{"name":"diff-ignored","figma":{"id":"0:222","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["slash"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 13H1V2h12v12zm-8.5-2H3v-1.5L9.5 4H11v1.5L4.5 12z\"/>"},"diff-modified":{"name":"diff-modified","figma":{"id":"0:227","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["dot","changed","updated"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z\"/>"},"diff-removed":{"name":"diff-removed","figma":{"id":"0:232","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["deleted","subtracted","dash"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 13H1V2h12v12zm-2-5H3V7h8v2z\"/>"},"diff-renamed":{"name":"diff-renamed","figma":{"id":"0:237","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["moved","arrow"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 9H3V7h3V4l5 4-5 4V9zm8-7v12c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h12c.55 0 1 .45 1 1zm-1 0H1v12h12V2z\"/>"},"diff":{"name":"diff","figma":{"id":"0:242","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["difference","changes","compare"],"width":13,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 7h2v1H6v2H5V8H3V7h2V5h1v2zm-3 6h5v-1H3v1zM7.5 2L11 5.5V15c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h6.5zM10 6L7 3H1v12h9V6zM8.5 0H3v1h5l4 4v8h1V4.5L8.5 0z\"/>"},"ellipsis":{"name":"ellipsis","figma":{"id":"0:249","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["dot","read","more","hidden","expand"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 5H1c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zM4 9H2V7h2v2zm3 0H5V7h2v2zm3 0H8V7h2v2z\"/>"},"eye":{"name":"eye","figma":{"id":"0:255","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["look","watch","see"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z\"/>"},"file-binary":{"name":"file-binary","figma":{"id":"0:260","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["image","video","word","powerpoint","excel"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 12h1v1H2v-1h1v-2H2V9h2v3zm8-7.5V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h7.5L12 4.5zM11 5L8 2H1v12h10V5zM8 4H6v1h1v2H6v1h3V7H8V4zM2 4h3v4H2V4zm1 3h1V5H3v2zm3 2h3v4H6V9zm1 3h1v-2H7v2z\"/>"},"file-code":{"name":"file-code","figma":{"id":"0:270","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["text","javascript","html","css","php","ruby","coffeescript","sass","scss"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.5 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V4.5L8.5 1zM11 14H1V2h7l3 3v9zM5 6.98L3.5 8.5 5 10l-.5 1L2 8.5 4.5 6l.5.98zM7.5 6L10 8.5 7.5 11l-.5-.98L8.5 8.5 7 7l.5-1z\"/>"},"file-directory":{"name":"file-directory","figma":{"id":"0:276","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["folder"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 4H7V3c0-.66-.31-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zM6 4H1V3h5v1z\"/>"},"file-media":{"name":"file-media","figma":{"id":"0:280","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["image","video","audio"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 5h2v2H6V5zm6-.5V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h7.5L12 4.5zM11 5L8 2H1v11l3-5 2 4 2-2 3 3V5z\"/>"},"file-pdf":{"name":"file-pdf","figma":{"id":"0:285","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["adobe"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.5 1H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V4.5L8.5 1zM1 2h4a.68.68 0 0 0-.31.2 1.08 1.08 0 0 0-.23.47 4.22 4.22 0 0 0-.09 1.47c.06.609.173 1.211.34 1.8A21.78 21.78 0 0 1 3.6 8.6c-.5 1-.8 1.66-.91 1.84a7.161 7.161 0 0 0-.69.3 4.19 4.19 0 0 0-1 .64V2zm4.42 4.8a5.65 5.65 0 0 0 1.17 2.09c.275.237.595.417.94.53-.64.09-1.23.2-1.81.33a12.22 12.22 0 0 0-1.81.59c-.587.243.22-.44.61-1.25.365-.74.67-1.51.91-2.3l-.01.01zM11 14H1.5a.743.743 0 0 1-.17 0 2.12 2.12 0 0 0 .73-.44 10.14 10.14 0 0 0 1.78-2.38c.31-.13.58-.23.81-.31l.42-.14c.45-.13.94-.23 1.44-.33s1-.16 1.48-.2c.447.216.912.394 1.39.53.403.11.814.188 1.23.23h.38V14H11zm0-4.86a3.74 3.74 0 0 0-.64-.28 4.22 4.22 0 0 0-.75-.11c-.411.003-.822.03-1.23.08a3 3 0 0 1-1-.64 6.07 6.07 0 0 1-1.29-2.33c.111-.662.178-1.33.2-2 .02-.25.02-.5 0-.75a1.05 1.05 0 0 0-.2-.88.82.82 0 0 0-.61-.23H8l3 3v4.14z\"/>"},"file-submodule":{"name":"file-submodule","figma":{"id":"0:292","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["folder"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 7H4v7h9c.55 0 1-.45 1-1V8h-4V7zM9 9H5V8h4v1zm4-5H7V3c0-.66-.31-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h2V7c0-.55.45-1 1-1h6c.55 0 1 .45 1 1h3V5c0-.55-.45-1-1-1zM6 4H1V3h5v1z\"/>"},"file-symlink-directory":{"name":"file-symlink-directory","figma":{"id":"0:298","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["folder","subfolder","link","alias"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 4H7V3c0-.66-.31-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zM1 3h5v1H1V3zm6 9v-2c-.98-.02-1.84.22-2.55.7-.71.48-1.19 1.25-1.45 2.3.02-1.64.39-2.88 1.13-3.73C4.86 8.43 5.82 8 7.01 8V6l4 3-4 3H7z\"/>"},"file-symlink-file":{"name":"file-symlink-file","figma":{"id":"0:303","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["link","alias"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.5 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V4.5L8.5 1zM11 14H1V2h7l3 3v9zM6 4.5l4 3-4 3v-2c-.98-.02-1.84.22-2.55.7-.71.48-1.19 1.25-1.45 2.3.02-1.64.39-2.88 1.13-3.73.73-.84 1.69-1.27 2.88-1.27v-2H6z\"/>"},"file":{"name":"file","figma":{"id":"0:308","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["file","text","words"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 5H2V4h4v1zM2 8h7V7H2v1zm0 2h7V9H2v1zm0 2h7v-1H2v1zm10-7.5V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h7.5L12 4.5zM11 5L8 2H1v12h10V5z\"/>"},"file-zip":{"name":"file-zip","figma":{"id":"0:316","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["compress","archive"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.5 1H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 0 0 3 11v1h4v-1a2 2 0 0 0-2-2V8H4v1.28zM6 10v1H4v-1h2z\"/>"},"flame":{"name":"flame","figma":{"id":"0:325","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["fire","hot","burn","trending"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5.05.01c.81 2.17.41 3.38-.52 4.31C3.55 5.37 1.98 6.15.9 7.68c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.01 8.68 2.15 5.05.02L5.03 0l.02.01z\"/>"},"fold":{"name":"fold","figma":{"id":"0:329","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["unfold","hide","collapse"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 9l3 3H8v3H6v-3H4l3-3zm3-6H8V0H6v3H4l3 3 3-3zm4 2c0-.55-.45-1-1-1h-2.5l-1 1h3l-2 2h-7l-2-2h3l-1-1H1c-.55 0-1 .45-1 1l2.5 2.5L0 10c0 .55.45 1 1 1h2.5l1-1h-3l2-2h7l2 2h-3l1 1H13c.55 0 1-.45 1-1l-2.5-2.5L14 5z\"/>"},"gear":{"name":"gear","figma":{"id":"0:334","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["settings"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 8.76v-1.6l-1.94-.64-.45-1.09.88-1.84-1.13-1.13-1.81.91-1.09-.45L7.77 1h-1.6l-.63 1.94-1.11.45-1.84-.88-1.13 1.13.91 1.81-.45 1.09L0 7.22v1.59l1.94.64.45 1.09-.88 1.84 1.13 1.13 1.81-.91 1.09.45.69 1.92h1.59l.63-1.94 1.11-.45 1.84.88 1.13-1.13-.92-1.81.47-1.09L14 8.74v.02zm-7 2.23c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z\"/>"},"gift":{"name":"gift","figma":{"id":"0:338","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["package","present","skill","craft","freebie"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13.02 4h-1.38c.19-.33.33-.67.36-.91.06-.67-.11-1.22-.52-1.61-.36-.38-.81-.48-1.36-.48h-.11c-.53.02-1.11.25-1.53.58-.42.33-.73.72-.97 1.2-.23-.48-.55-.88-.97-1.2-.42-.32-1-.58-1.53-.58h-.03c-.56 0-1.06.09-1.44.48-.41.39-.58.94-.52 1.61.03.23.17.58.36.91H2c-.55 0-1 .45-1 1v3h1v5c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8h1V5c0-.55-.45-1-1-1h.02zm-4.78-.88c.17-.36.42-.67.75-.92.3-.23.72-.39 1.05-.41h.09c.45 0 .66.11.8.25s.33.39.3.95c-.05.19-.25.61-.5 1h-2.9l.41-.88v.01zM4.11 2.04c.13-.13.31-.25.91-.25.31 0 .72.17 1.03.41.33.25.58.55.75.92l.42.88h-2.9c-.25-.39-.45-.81-.5-1-.03-.56.16-.81.3-.95l-.01-.01zm2.91 10.95h-4V8h4v5-.01zm0-6h-5V5h5v2-.01zm5 6h-4V8h4v5-.01zm1-6h-5V5h5v2-.01z\"/>"},"gist-secret":{"name":"gist-secret","figma":{"id":"0:347","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["gist","secret","private"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.782 10.5l1 3.5h-4l1-3.5-.75-1.5h3.5l-.75 1.5zm2-4.5h-6l-2 1h10l-2-1zm-1-4l-2 1-2-1-1 3h6l-1-3zm4.03 7.75L9.782 9l1 2-2 3h3.22c.45 0 .86-.31.97-.75l.56-2.28c.14-.53-.19-1.08-.72-1.22zM3.782 9l-3.03.75c-.53.14-.86.69-.72 1.22l.56 2.28c.11.44.52.75.97.75h3.22l-2-3 1-2z\"/>"},"gist":{"name":"gist","figma":{"id":"0:354","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["gist","github"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.5 5L10 7.5 7.5 10l-.75-.75L8.5 7.5 6.75 5.75 7.5 5zm-3 0L2 7.5 4.5 10l.75-.75L3.5 7.5l1.75-1.75L4.5 5zM0 13V2c0-.55.45-1 1-1h10c.55 0 1 .45 1 1v11c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1zm1 0h10V2H1v11z\"/>"},"git-branch":{"name":"git-branch","figma":{"id":"0:360","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["fork","branch","git","duplicate"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 5c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v.3c-.02.52-.23.98-.63 1.38-.4.4-.86.61-1.38.63-.83.02-1.48.16-2 .45V4.72a1.993 1.993 0 0 0-1-3.72C.88 1 0 1.89 0 3a2 2 0 0 0 1 1.72v6.56c-.59.35-1 .99-1 1.72 0 1.11.89 2 2 2 1.11 0 2-.89 2-2 0-.53-.2-1-.53-1.36.09-.06.48-.41.59-.47.25-.11.56-.17.94-.17 1.05-.05 1.95-.45 2.75-1.25S8.95 7.77 9 6.73h-.02C9.59 6.37 10 5.73 10 5zM2 1.8c.66 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2C1.35 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2zm0 12.41c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm6-8c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"git-commit":{"name":"git-commit","figma":{"id":"0:366","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["save"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z\"/>"},"git-compare":{"name":"git-compare","figma":{"id":"0:370","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["difference","changes"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5 12H4c-.27-.02-.48-.11-.69-.31-.21-.2-.3-.42-.31-.69V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V11c.03.78.34 1.47.94 2.06.6.59 1.28.91 2.06.94h1v2l3-3-3-3v2zM2 1.8c.66 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2C1.35 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2zm11 9.48V5c-.03-.78-.34-1.47-.94-2.06-.6-.59-1.28-.91-2.06-.94H9V0L6 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 12 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"git-merge":{"name":"git-merge","figma":{"id":"0:376","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["join"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 7.01c-.73 0-1.38.41-1.73 1.02v-.02C7.22 7.99 6 7.65 5.14 6.99c-.75-.58-1.5-1.61-1.89-2.44A1.993 1.993 0 0 0 2 1C.89 1 0 1.9 0 3.01a2 2 0 0 0 1 1.72v6.56c-.59.35-1 .99-1 1.72 0 1.11.89 2 2 2a1.993 1.993 0 0 0 1-3.72V7.68c.67.7 1.44 1.27 2.3 1.69.86.42 2.03.63 2.97.64v-.02c.36.61 1 1.02 1.73 1.02 1.11 0 2-.89 2-2 0-1.11-.89-2-2-2zm-6.8 6c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.21c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm8 6c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"git-pull-request":{"name":"git-pull-request","figma":{"id":"0:382","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["review"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"globe":{"name":"globe","figma":{"id":"0:389","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["world","earth","planet"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 1C3.14 1 0 4.14 0 8s3.14 7 7 7c.48 0 .94-.05 1.38-.14-.17-.08-.2-.73-.02-1.09.19-.41.81-1.45.2-1.8-.61-.35-.44-.5-.81-.91-.37-.41-.22-.47-.25-.58-.08-.34.36-.89.39-.94.02-.06.02-.27 0-.33 0-.08-.27-.22-.34-.23-.06 0-.11.11-.2.13-.09.02-.5-.25-.59-.33-.09-.08-.14-.23-.27-.34-.13-.13-.14-.03-.33-.11s-.8-.31-1.28-.48c-.48-.19-.52-.47-.52-.66-.02-.2-.3-.47-.42-.67-.14-.2-.16-.47-.2-.41-.04.06.25.78.2.81-.05.02-.16-.2-.3-.38-.14-.19.14-.09-.3-.95s.14-1.3.17-1.75c.03-.45.38.17.19-.13-.19-.3 0-.89-.14-1.11-.13-.22-.88.25-.88.25.02-.22.69-.58 1.16-.92.47-.34.78-.06 1.16.05.39.13.41.09.28-.05-.13-.13.06-.17.36-.13.28.05.38.41.83.36.47-.03.05.09.11.22s-.06.11-.38.3c-.3.2.02.22.55.61s.38-.25.31-.55c-.07-.3.39-.06.39-.06.33.22.27.02.5.08.23.06.91.64.91.64-.83.44-.31.48-.17.59.14.11-.28.3-.28.3-.17-.17-.19.02-.3.08-.11.06-.02.22-.02.22-.56.09-.44.69-.42.83 0 .14-.38.36-.47.58-.09.2.25.64.06.66-.19.03-.34-.66-1.31-.41-.3.08-.94.41-.59 1.08.36.69.92-.19 1.11-.09.19.1-.06.53-.02.55.04.02.53.02.56.61.03.59.77.53.92.55.17 0 .7-.44.77-.45.06-.03.38-.28 1.03.09.66.36.98.31 1.2.47.22.16.08.47.28.58.2.11 1.06-.03 1.28.31.22.34-.88 2.09-1.22 2.28-.34.19-.48.64-.84.92s-.81.64-1.27.91c-.41.23-.47.66-.66.8 3.14-.7 5.48-3.5 5.48-6.84 0-3.86-3.14-7-7-7L7 1zm1.64 6.56c-.09.03-.28.22-.78-.08-.48-.3-.81-.23-.86-.28 0 0-.05-.11.17-.14.44-.05.98.41 1.11.41.13 0 .19-.13.41-.05.22.08.05.13-.05.14zM6.34 1.7c-.05-.03.03-.08.09-.14.03-.03.02-.11.05-.14.11-.11.61-.25.52.03-.11.27-.58.3-.66.25zm1.23.89c-.19-.02-.58-.05-.52-.14.3-.28-.09-.38-.34-.38-.25-.02-.34-.16-.22-.19.12-.03.61.02.7.08.08.06.52.25.55.38.02.13 0 .25-.17.25zm1.47-.05c-.14.09-.83-.41-.95-.52-.56-.48-.89-.31-1-.41-.11-.1-.08-.19.11-.34.19-.15.69.06 1 .09.3.03.66.27.66.55.02.25.33.5.19.63h-.01z\"/>"},"graph":{"name":"graph","figma":{"id":"0:396","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["trend","stats","statistics"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z\"/>"},"heart":{"name":"heart","figma":{"id":"0:400","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["love","beat"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.2 3c-.52-.63-1.25-.95-2.2-1-.97 0-1.69.42-2.2 1-.51.58-.78.92-.8 1-.02-.08-.28-.42-.8-1-.52-.58-1.17-1-2.2-1-.95.05-1.69.38-2.2 1-.52.61-.78 1.28-.8 2 0 .52.09 1.52.67 2.67C1.25 8.82 3.01 10.61 6 13c2.98-2.39 4.77-4.17 5.34-5.33C11.91 6.51 12 5.5 12 5c-.02-.72-.28-1.39-.8-2.02V3z\"/>"},"history":{"name":"history","figma":{"id":"0:404","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["time","past","revert","back"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 13H6V6h5v2H8v5zM7 1C4.81 1 2.87 2.02 1.59 3.59L0 2v4h4L2.5 4.5C3.55 3.17 5.17 2.3 7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-.34.03-.67.09-1H.08C.03 7.33 0 7.66 0 8c0 3.86 3.14 7 7 7s7-3.14 7-7-3.14-7-7-7z\"/>"},"home":{"name":"home","figma":{"id":"0:408","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["welcome","index","house","building"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 9l-3-3V2h-2v2L8 1 0 9h2l1 5c0 .55.45 1 1 1h8c.55 0 1-.45 1-1l1-5h2zm-4 5H9v-4H7v4H4L2.81 7.69 8 2.5l5.19 5.19L12 14z\"/>"},"horizontal-rule":{"name":"horizontal-rule","figma":{"id":"0:412","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["hr"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M1 7h2v2h1V3H3v3H1V3H0v6h1V7zm9 2V7H9v2h1zm0-3V4H9v2h1zM7 6V4h2V3H6v6h1V7h2V6H7zm-7 7h10v-2H0v2z\"/>"},"hubot":{"name":"hubot","figma":{"id":"0:419","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["robot","bot"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 6c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1H3zm8 1.75L9.75 9h-1.5L7 7.75 5.75 9h-1.5L3 7.75V7h.75L5 8.25 6.25 7h1.5L9 8.25 10.25 7H11v.75zM5 11h4v1H5v-1zm2-9C3.14 2 0 4.91 0 8.5V13c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V8.5C14 4.91 10.86 2 7 2zm6 11H1V8.5c0-3.09 2.64-5.59 6-5.59s6 2.5 6 5.59V13z\"/>"},"inbox":{"name":"inbox","figma":{"id":"0:426","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["mail","todo","new","messages"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 9l-1.13-7.14c-.08-.48-.5-.86-1-.86H2.13c-.5 0-.92.38-1 .86L0 9v5c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V9zm-3.28.55l-.44.89c-.17.34-.52.56-.91.56H4.61c-.38 0-.72-.22-.89-.55l-.44-.91c-.17-.33-.52-.55-.89-.55H1l1-7h10l1 7h-1.38c-.39 0-.73.22-.91.55l.01.01z\"/>"},"info":{"name":"info","figma":{"id":"0:430","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["help"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6.3 5.71a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 8.01c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V8v.01zM7 2.32C3.86 2.32 1.3 4.86 1.3 8c0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 1c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z\"/>"},"issue-closed":{"name":"issue-closed","figma":{"id":"0:436","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["done","complete"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 10h2v2H7v-2zm2-6H7v5h2V4zm1.5 1.5l-1 1L12 9l4-4.5-1-1L12 7l-1.5-1.5zM8 13.7A5.71 5.71 0 0 1 2.3 8c0-3.14 2.56-5.7 5.7-5.7 1.83 0 3.45.88 4.5 2.2l.92-.92A6.947 6.947 0 0 0 8 1C4.14 1 1 4.14 1 8s3.14 7 7 7 7-3.14 7-7l-1.52 1.52c-.66 2.41-2.86 4.19-5.48 4.19v-.01z\"/>"},"issue-opened":{"name":"issue-opened","figma":{"id":"0:442","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["new"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"/>"},"issue-reopened":{"name":"issue-reopened","figma":{"id":"0:448","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["regression"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 9H6V4h2v5zm-2 3h2v-2H6v2zm6.33-2H10l1.5 1.5c-1.05 1.33-2.67 2.2-4.5 2.2A5.71 5.71 0 0 1 1.3 8c0-.34.03-.67.09-1H.08C.03 7.33 0 7.66 0 8c0 3.86 3.14 7 7 7 2.19 0 4.13-1.02 5.41-2.59L14 14v-4h-1.67zM1.67 6H4L2.5 4.5C3.55 3.17 5.17 2.3 7 2.3c3.14 0 5.7 2.56 5.7 5.7 0 .34-.03.67-.09 1h1.31c.05-.33.08-.66.08-1 0-3.86-3.14-7-7-7-2.19 0-4.13 1.02-5.41 2.59L0 2v4h1.67z\"/>"},"italic":{"name":"italic","figma":{"id":"0:454","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["font","italic","style"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2.81 5h1.98L3 14H1l1.81-9zm.36-2.7c0-.7.58-1.3 1.33-1.3.56 0 1.13.38 1.13 1.03 0 .75-.59 1.3-1.33 1.3-.58 0-1.13-.38-1.13-1.03z\"/>"},"jersey":{"name":"jersey","figma":{"id":"0:458","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["team","game","basketball"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4.5 6l-.5.5v5l.5.5h2l.5-.5v-5L6.5 6h-2zM6 11H5V7h1v4zm6.27-7.25C12.05 2.37 11.96 1.12 12 0H9.02c0 .27-.13.48-.39.69-.25.2-.63.3-1.13.3-.5 0-.88-.09-1.13-.3-.23-.2-.36-.42-.36-.69H3c.05 1.13-.03 2.38-.25 3.75C2.55 5.13 1.95 5.88 1 6v9c.02.27.11.48.31.69.2.21.42.3.69.31h11c.27-.02.48-.11.69-.31.21-.2.3-.42.31-.69V6c-.95-.13-1.53-.88-1.75-2.25h.02zM13 15H2V7c.89-.5 1.48-1.25 1.72-2.25S4.03 2.5 4 1h1c-.02.78.16 1.47.52 2.06.36.58 1.02.89 2 .94.98-.02 1.64-.33 2-.94.36-.59.5-1.28.48-2.06h1c.02 1.42.13 2.55.33 3.38.2.81.69 2 1.67 2.63v8V15zM8.5 6l-.5.5v5l.5.5h2l.5-.5v-5l-.5-.5h-2zm1.5 5H9V7h1v4z\"/>"},"keyboard":{"name":"keyboard","figma":{"id":"0:466","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["type","keys","write","shortcuts"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 5H9V4h1v1zM3 6H2v1h1V6zm5-2H7v1h1V4zM4 4H2v1h2V4zm8 7h2v-1h-2v1zM8 7h1V6H8v1zm-4 3H2v1h2v-1zm8-6h-1v1h1V4zm2 0h-1v1h1V4zm-2 5h2V6h-2v3zm4-6v9c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h14c.55 0 1 .45 1 1zm-1 0H1v9h14V3zM6 7h1V6H6v1zm0-3H5v1h1V4zM4 7h1V6H4v1zm1 4h6v-1H5v1zm5-4h1V6h-1v1zM3 8H2v1h1V8zm5 0v1h1V8H8zM6 8v1h1V8H6zM5 8H4v1h1V8zm5 1h1V8h-1v1z\"/>"},"law":{"name":"law","figma":{"id":"0:490","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["legal","bill"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 4c-.83 0-1.5-.67-1.5-1.5S6.17 1 7 1s1.5.67 1.5 1.5S7.83 4 7 4zm7 6c0 1.11-.89 2-2 2h-1c-1.11 0-2-.89-2-2l2-4h-1c-.55 0-1-.45-1-1H8v8c.42 0 1 .45 1 1h1c.42 0 1 .45 1 1H3c0-.55.58-1 1-1h1c0-.55.58-1 1-1h.03L6 5H5c0 .55-.45 1-1 1H3l2 4c0 1.11-.89 2-2 2H2c-1.11 0-2-.89-2-2l2-4H1V5h3c0-.55.45-1 1-1h4c.55 0 1 .45 1 1h3v1h-1l2 4zM2.5 7L1 10h3L2.5 7zM13 10l-1.5-3-1.5 3h3z\"/>"},"link":{"name":"link","figma":{"id":"0:496","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["connect","hyperlink"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"/>"},"list-ordered":{"name":"list-ordered","figma":{"id":"0:500","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["numbers","tasks","todo","items"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12.01 13c0 .59 0 1-.59 1H4.6c-.59 0-.59-.41-.59-1 0-.59 0-1 .59-1h6.81c.59 0 .59.41.59 1h.01zM4.6 4h6.81C12 4 12 3.59 12 3c0-.59 0-1-.59-1H4.6c-.59 0-.59.41-.59 1 0 .59 0 1 .59 1zm6.81 3H4.6c-.59 0-.59.41-.59 1 0 .59 0 1 .59 1h6.81C12 9 12 8.59 12 8c0-.59 0-1-.59-1zm-9.4-6h-.72c-.3.19-.58.25-1.03.34V2h.75v2.14H.17V5h2.84v-.86h-1V1zm.25 8.13c-.17 0-.45.03-.66.06.53-.56 1.14-1.25 1.14-1.89C2.72 6.52 2.18 6 1.38 6c-.59 0-.97.2-1.38.64l.58.58c.19-.19.38-.38.64-.38.28 0 .48.16.48.52 0 .53-.77 1.2-1.7 2.06V10h3l-.09-.88h-.66l.01.01zm-.08 3.78v-.03c.44-.19.64-.47.64-.86 0-.7-.56-1.11-1.44-1.11-.48 0-.89.19-1.28.52l.55.64c.25-.2.44-.31.69-.31.27 0 .42.13.42.36 0 .27-.2.44-.86.44v.75c.83 0 .98.17.98.47 0 .25-.23.38-.58.38-.28 0-.56-.14-.81-.38l-.48.66c.3.36.77.56 1.41.56.83 0 1.53-.41 1.53-1.16 0-.5-.31-.81-.77-.94v.01z\"/>"},"list-unordered":{"name":"list-unordered","figma":{"id":"0:508","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["bullet","point","tasks","todo","items"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2 13c0 .59 0 1-.59 1H.59C0 14 0 13.59 0 13c0-.59 0-1 .59-1h.81c.59 0 .59.41.59 1H2zm2.59-9h6.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1H4.59C4 2 4 2.41 4 3c0 .59 0 1 .59 1zM1.41 7H.59C0 7 0 7.41 0 8c0 .59 0 1 .59 1h.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1h.01zm0-5H.59C0 2 0 2.41 0 3c0 .59 0 1 .59 1h.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1h.01zm10 5H4.59C4 7 4 7.41 4 8c0 .59 0 1 .59 1h6.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1h.01zm0 5H4.59C4 12 4 12.41 4 13c0 .59 0 1 .59 1h6.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1h.01z\"/>"},"location":{"name":"location","figma":{"id":"0:516","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["here","marker"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 0C2.69 0 0 2.5 0 5.5 0 10.02 6 16 6 16s6-5.98 6-10.5C12 2.5 9.31 0 6 0zm0 14.55C4.14 12.52 1 8.44 1 5.5 1 3.02 3.25 1 6 1c1.34 0 2.61.48 3.56 1.36.92.86 1.44 1.97 1.44 3.14 0 2.94-3.14 7.02-5 9.05zM8 5.5c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z\"/>"},"lock":{"name":"lock","figma":{"id":"0:521","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["secure","safe","protected"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 13H3v-1h1v1zm8-6v7c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7c0-.55.45-1 1-1h1V4c0-2.2 1.8-4 4-4s4 1.8 4 4v2h1c.55 0 1 .45 1 1zM3.8 6h4.41V4c0-1.22-.98-2.2-2.2-2.2-1.22 0-2.2.98-2.2 2.2v2H3.8zM11 7H2v7h9V7zM4 8H3v1h1V8zm0 2H3v1h1v-1z\"/>"},"logo-gist":{"name":"logo-gist","figma":{"id":"0:529","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["brand","github","logo"],"width":25,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4.7 8.73h2.45v4.02c-.55.27-1.64.34-2.53.34-2.56 0-3.47-2.2-3.47-5.05 0-2.85.91-5.06 3.48-5.06 1.28 0 2.06.23 3.28.73V2.66C7.27 2.33 6.25 2 4.63 2 1.13 2 0 4.69 0 8.03c0 3.34 1.11 6.03 4.63 6.03 1.64 0 2.81-.27 3.59-.64V7.73H4.7v1zm6.39 3.72V6.06h-1.05v6.28c0 1.25.58 1.72 1.72 1.72v-.89c-.48 0-.67-.16-.67-.7v-.02zm.25-8.72c0-.44-.33-.78-.78-.78s-.77.34-.77.78.33.78.77.78.78-.34.78-.78zm4.34 5.69c-1.5-.13-1.78-.48-1.78-1.17 0-.77.33-1.34 1.88-1.34 1.05 0 1.66.16 2.27.36v-.94c-.69-.3-1.52-.39-2.25-.39-2.2 0-2.92 1.2-2.92 2.31 0 1.08.47 1.88 2.73 2.08 1.55.13 1.77.63 1.77 1.34 0 .73-.44 1.42-2.06 1.42-1.11 0-1.86-.19-2.33-.36v.94c.5.2 1.58.39 2.33.39 2.38 0 3.14-1.2 3.14-2.41 0-1.28-.53-2.03-2.75-2.23h-.03zm8.58-2.47v-.86h-2.42v-2.5l-1.08.31v2.11l-1.56.44v.48h1.56v5c0 1.53 1.19 2.13 2.5 2.13.19 0 .52-.02.69-.05v-.89c-.19.03-.41.03-.61.03-.97 0-1.5-.39-1.5-1.34V6.94h2.42v.02-.01z\"/>"},"logo-github":{"name":"logo-github","figma":{"id":"0:536","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["brand","github","logo"],"width":45,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M18.53 12.03h-.02c.009 0 .015.01.024.011h.006l-.01-.01zm.004.011c-.093.001-.327.05-.574.05-.78 0-1.05-.36-1.05-.83V8.13h1.59c.09 0 .16-.08.16-.19v-1.7c0-.09-.08-.17-.16-.17h-1.59V3.96c0-.08-.05-.13-.14-.13h-2.16c-.09 0-.14.05-.14.13v2.17s-1.09.27-1.16.28c-.08.02-.13.09-.13.17v1.36c0 .11.08.19.17.19h1.11v3.28c0 2.44 1.7 2.69 2.86 2.69.53 0 1.17-.17 1.27-.22.06-.02.09-.09.09-.16v-1.5a.177.177 0 0 0-.146-.18zm23.696-2.2c0-1.81-.73-2.05-1.5-1.97-.6.04-1.08.34-1.08.34v3.52s.49.34 1.22.36c1.03.03 1.36-.34 1.36-2.25zm2.43-.16c0 3.43-1.11 4.41-3.05 4.41-1.64 0-2.52-.83-2.52-.83s-.04.46-.09.52c-.03.06-.08.08-.14.08h-1.48c-.1 0-.19-.08-.19-.17l.02-11.11c0-.09.08-.17.17-.17h2.13c.09 0 .17.08.17.17v3.77s.82-.53 2.02-.53l-.01-.02c1.2 0 2.97.45 2.97 3.88zm-8.72-3.61H33.84c-.11 0-.17.08-.17.19v5.44s-.55.39-1.3.39-.97-.34-.97-1.09V6.25c0-.09-.08-.17-.17-.17h-2.14c-.09 0-.17.08-.17.17v5.11c0 2.2 1.23 2.75 2.92 2.75 1.39 0 2.52-.77 2.52-.77s.05.39.08.45c.02.05.09.09.16.09h1.34c.11 0 .17-.08.17-.17l.02-7.47c0-.09-.08-.17-.19-.17zm-23.7-.01h-2.13c-.09 0-.17.09-.17.2v7.34c0 .2.13.27.3.27h1.92c.2 0 .25-.09.25-.27V6.23c0-.09-.08-.17-.17-.17zm-1.05-3.38c-.77 0-1.38.61-1.38 1.38 0 .77.61 1.38 1.38 1.38.75 0 1.36-.61 1.36-1.38 0-.77-.61-1.38-1.36-1.38zm16.49-.25h-2.11c-.09 0-.17.08-.17.17v4.09h-3.31V2.6c0-.09-.08-.17-.17-.17h-2.13c-.09 0-.17.08-.17.17v11.11c0 .09.09.17.17.17h2.13c.09 0 .17-.08.17-.17V8.96h3.31l-.02 4.75c0 .09.08.17.17.17h2.13c.09 0 .17-.08.17-.17V2.6c0-.09-.08-.17-.17-.17zM8.81 7.35v5.74c0 .04-.01.11-.06.13 0 0-1.25.89-3.31.89-2.49 0-5.44-.78-5.44-5.92S2.58 1.99 5.1 2c2.18 0 3.06.49 3.2.58.04.05.06.09.06.14L7.94 4.5c0 .09-.09.2-.2.17-.36-.11-.9-.33-2.17-.33-1.47 0-3.05.42-3.05 3.73s1.5 3.7 2.58 3.7c.92 0 1.25-.11 1.25-.11v-2.3H4.88c-.11 0-.19-.08-.19-.17V7.35c0-.09.08-.17.19-.17h3.74c.11 0 .19.08.19.17z\"/>"},"mail-read":{"name":"mail-read","figma":{"id":"0:547","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["email","open"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 5H4V4h2v1zm3 1H4v1h5V6zm5-.48V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V5.52c0-.33.16-.63.42-.81L2 3.58V3c0-.55.45-1 1-1h1.2L7 0l2.8 2H11c.55 0 1 .45 1 1v.58l1.58 1.13c.27.19.42.48.42.81zM3 7.5L7 10l4-2.5V3H3v4.5zm-2 6l4.5-3-4.5-3v6zm11 .5l-5-3-5 3h10zm1-6.5l-4.5 3 4.5 3v-6z\"/>"},"reply":{"name":"reply","figma":{"id":"0:554","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["reply all","back"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6.5 3.5c3.92.44 8 3.125 8 10-2.312-5.062-4.75-6-8-6V11L1 5.5 6.5 0v3.5z\"/>"},"mail":{"name":"mail","figma":{"id":"0:558","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["email","unread"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 4v8c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1zm13 0L7 9 1 4h12zM1 5.5l4 3-4 3v-6zM2 12l3.5-3L7 10.5 8.5 9l3.5 3H2zm11-.5l-4-3 4-3v6z\"/>"},"mark-github":{"name":"mark-github","figma":{"id":"0:563","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["octocat","brand","github","logo"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z\"/>"},"markdown":{"name":"markdown","figma":{"id":"0:567","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["markup","style"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z\"/>"},"megaphone":{"name":"megaphone","figma":{"id":"0:572","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["bullhorn","loud","shout","broadcast"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 1c-.17 0-.36.05-.52.14C8.04 2.02 4.5 4.58 3 5c-1.38 0-3 .67-3 2.5S1.63 10 3 10c.3.08.64.23 1 .41V15h2v-3.45c1.34.86 2.69 1.83 3.48 2.31.16.09.34.14.52.14.52 0 1-.42 1-1V2c0-.58-.48-1-1-1zm0 12c-.38-.23-.89-.58-1.5-1-.16-.11-.33-.22-.5-.34V3.31c.16-.11.31-.2.47-.31.61-.41 1.16-.77 1.53-1v11zm2-6h4v1h-4V7zm0 2l4 2v1l-4-2V9zm4-6v1l-4 2V5l4-2z\"/>"},"mention":{"name":"mention","figma":{"id":"0:579","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["at","ping"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6.58 15c1.25 0 2.52-.31 3.56-.94l-.42-.94c-.84.52-1.89.83-3.03.83-3.23 0-5.64-2.08-5.64-5.72 0-4.37 3.23-7.18 6.58-7.18 3.45 0 5.22 2.19 5.22 5.2 0 2.39-1.34 3.86-2.5 3.86-1.05 0-1.36-.73-1.05-2.19l.73-3.75H8.98l-.11.72c-.41-.63-.94-.83-1.56-.83-2.19 0-3.66 2.39-3.66 4.38 0 1.67.94 2.61 2.3 2.61.84 0 1.67-.53 2.3-1.25.11.94.94 1.45 1.98 1.45 1.67 0 3.77-1.67 3.77-5C14 2.61 11.59 0 7.83 0 3.66 0 0 3.33 0 8.33 0 12.71 2.92 15 6.58 15zm-.31-5c-.73 0-1.36-.52-1.36-1.67 0-1.45.94-3.22 2.41-3.22.52 0 .84.2 1.25.83l-.52 3.02c-.63.73-1.25 1.05-1.78 1.05V10z\"/>"},"milestone":{"name":"milestone","figma":{"id":"0:583","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["marker"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 2H6V0h2v2zm4 5H2c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h10l2 2-2 2zM8 4H6v2h2V4zM6 16h2V8H6v8z\"/>"},"mirror":{"name":"mirror","figma":{"id":"0:589","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["reflect"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.5 4.7L8.5 0l-7 4.7c-.3.19-.5.45-.5.8V16l7.5-4 7.5 4V5.5c0-.34-.2-.61-.5-.8zm-.5 9.8l-6-3.25V10H8v1.25L2 14.5v-9l6-4V6h1V1.5l6 4v9zM6 7h5V5l3 3-3 3V9H6v2L3 8l3-3v2z\"/>"},"mortar-board":{"name":"mortar-board","figma":{"id":"0:594","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["education","learn","teach"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.808 9.405l-3.83-1.19c-4-8 0 1.5 0 2.5s1.8 1.5 4 1.5 4-.5 4-1.5v-2.5l-3.83 1.19a.73.73 0 0 1-.36 0h.02zm.28-6.39a.34.34 0 0 0-.2 0l-7.64 2.38a.35.35 0 0 0 0 .67l1.73.55v1.77c-.3.17-.5.5-.5.86 0 .19.05.36.14.5-.08.14-.14.31-.14.5v2.58c0 .55 2 .55 2 0v-2.58c0-.19-.05-.36-.14-.5.08-.14.14-.31.14-.5 0-.38-.2-.69-.5-.86v-1.45l4.89 1.53c.06.02.14.02.2 0l7.64-2.38a.35.35 0 0 0 0-.67l-7.63-2.39.01-.01zm-.09 3.2c-.55 0-1-.22-1-.5s.45-.5 1-.5 1 .22 1 .5-.45.5-1 .5z\"/>"},"mute":{"name":"mute","figma":{"id":"0:599","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["quiet","sound","audio","turn","off"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 2.75v10.38c0 .67-.81 1-1.28.53L3 9.94H1c-.55 0-1-.45-1-1v-2c0-.55.45-1 1-1h2l3.72-3.72C7.19 1.75 8 2.08 8 2.75zm7.53 3.22l-1.06-1.06-1.97 1.97-1.97-1.97-1.06 1.06 1.97 1.97-1.97 1.97 1.06 1.06L12.5 9l1.97 1.97 1.06-1.06-1.97-1.97 1.97-1.97z\"/>"},"no-newline":{"name":"no-newline","figma":{"id":"0:603","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["return"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 5v3c0 .55-.45 1-1 1h-3v2L9 8l3-3v2h2V5h2zM8 8c0 2.2-1.8 4-4 4s-4-1.8-4-4 1.8-4 4-4 4 1.8 4 4zM1.5 9.66L5.66 5.5C5.18 5.19 4.61 5 4 5 2.34 5 1 6.34 1 8c0 .61.19 1.17.5 1.66zM7 8c0-.61-.19-1.17-.5-1.66L2.34 10.5c.48.31 1.05.5 1.66.5 1.66 0 3-1.34 3-3z\"/>"},"octoface":{"name":"octoface","figma":{"id":"0:609","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["octocat","brand"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14.7 5.34c.13-.32.55-1.59-.13-3.31 0 0-1.05-.33-3.44 1.3-1-.28-2.07-.32-3.13-.32s-2.13.04-3.13.32c-2.39-1.64-3.44-1.3-3.44-1.3-.68 1.72-.26 2.99-.13 3.31C.49 6.21 0 7.33 0 8.69 0 13.84 3.33 15 7.98 15S16 13.84 16 8.69c0-1.36-.49-2.48-1.3-3.35zM8 14.02c-3.3 0-5.98-.15-5.98-3.35 0-.76.38-1.48 1.02-2.07 1.07-.98 2.9-.46 4.96-.46 2.07 0 3.88-.52 4.96.46.65.59 1.02 1.3 1.02 2.07 0 3.19-2.68 3.35-5.98 3.35zM5.49 9.01c-.66 0-1.2.8-1.2 1.78s.54 1.79 1.2 1.79c.66 0 1.2-.8 1.2-1.79s-.54-1.78-1.2-1.78zm5.02 0c-.66 0-1.2.79-1.2 1.78s.54 1.79 1.2 1.79c.66 0 1.2-.8 1.2-1.79s-.53-1.78-1.2-1.78z\"/>"},"organization":{"name":"organization","figma":{"id":"0:613","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["people","group","team"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 12.999c0 .439-.45 1-1 1H7.995c-.539 0-.994-.447-.995-.999H1c-.54 0-1-.561-1-1 0-2.634 3-4 3-4s.229-.409 0-1c-.841-.621-1.058-.59-1-3 .058-2.419 1.367-3 2.5-3s2.442.58 2.5 3c.058 2.41-.159 2.379-1 3-.229.59 0 1 0 1s1.549.711 2.42 2.088A6.78 6.78 0 0 1 10 8.999s.229-.409 0-1c-.841-.62-1.058-.59-1-3 .058-2.419 1.367-3 2.5-3s2.437.581 2.495 3c.059 2.41-.158 2.38-1 3-.229.59 0 1 0 1s3.005 1.366 3.005 4z\"/>"},"package":{"name":"package","figma":{"id":"0:617","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["box","ship"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M1 4.732v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97v-7.47c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 0 0-.5 0l-6.5 1.74c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59v-6.77l6 1.61v6.75zm-6-9.36l2.5-.67 6.5 1.73-2.5.67L2 4.463zm13 7.77l-6 1.59v-6.75l2-.55v2.44l2-.53v-2.44l2-.53v6.77zm-2-7.24l-6.5-1.73 2-.53 6.5 1.73-2 .53z\"/>"},"paintcan":{"name":"paintcan","figma":{"id":"0:624","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["style","theme","art","color"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 0C2.69 0 0 2.69 0 6v1c0 .55.45 1 1 1v5c0 1.1 2.24 2 5 2s5-.9 5-2V8c.55 0 1-.45 1-1V6c0-3.31-2.69-6-6-6zm3 10v.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5V10c0-.28-.22-.5-.5-.5s-.5.22-.5.5v2.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5v-2c0-.28-.22-.5-.5-.5s-.5.22-.5.5v.5c0 .55-.45 1-1 1s-1-.45-1-1v-1c-.55 0-1-.45-1-1V7.2c.91.49 2.36.8 4 .8 1.64 0 3.09-.31 4-.8V9c0 .55-.45 1-1 1zM6 7c-1.68 0-3.12-.41-3.71-1C2.88 5.41 4.32 5 6 5c1.68 0 3.12.41 3.71 1-.59.59-2.03 1-3.71 1zm0-3c-2.76 0-5 .89-5 2 0-2.76 2.24-5 5-5s5 2.24 5 5c0-1.1-2.24-2-5-2z\"/>"},"pencil":{"name":"pencil","figma":{"id":"0:630","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["edit","change","update","write"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 11.592v3h3l8-8-3-3-8 8zm3 2H1v-2h1v1h1v1zm10.3-9.3l-1.3 1.3-3-3 1.3-1.3a.996.996 0 0 1 1.41 0l1.59 1.59c.39.39.39 1.02 0 1.41z\"/>"},"person":{"name":"person","figma":{"id":"0:633","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["people","man","woman","human"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 14.002a.998.998 0 0 1-.998.998H1.001A1 1 0 0 1 0 13.999V13c0-2.633 4-4 4-4s.229-.409 0-1c-.841-.62-.944-1.59-1-4 .173-2.413 1.867-3 3-3s2.827.586 3 3c-.056 2.41-.159 3.38-1 4-.229.59 0 1 0 1s4 1.367 4 4v1.002z\"/>"},"pin":{"name":"pin","figma":{"id":"0:635","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["save","star","bookmark"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 1.494v.8l.5 1-4.5 3H2.2c-.44 0-.67.53-.34.86L5 10.294l-4 5 5-4 3.14 3.14a.5.5 0 0 0 .86-.34v-3.8l3-4.5 1 .5h.8c.44 0 .67-.53.34-.86l-4.28-4.28a.5.5 0 0 0-.86.34z\"/>"},"plug":{"name":"plug","figma":{"id":"0:637","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["hook","webhook"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 6V5h-4V3H8v1H6c-1.03 0-1.77.81-2 2L3 7c-1.66 0-3 1.34-3 3v2h1v-2c0-1.11.89-2 2-2l1 1c.25 1.16.98 2 2 2h2v1h2v-2h4V9h-4V6h4z\"/>"},"plus":{"name":"plus","figma":{"id":"0:639","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["add","new","more"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 9H7v5H5V9H0V7h5V2h2v5h5v2z\"/>"},"primitive-dot":{"name":"primitive-dot","figma":{"id":"0:641","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["circle"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 8c0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4-4-1.8-4-4z\"/>"},"primitive-square":{"name":"primitive-square","figma":{"id":"0:643","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["box"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 12H0V4h8v8z\"/>"},"pulse":{"name":"pulse","figma":{"id":"0:645","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["graph","trend","line","activity"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.5 8.4L8.8 5.8 6.6 8.9 5.5 2 2.38 8.4H0v2h3.6l.9-1.8.9 5.4L9 8.9l1.6 1.5H14v-2h-2.5z\"/>"},"question":{"name":"question","figma":{"id":"0:649","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["help","explain"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 10h2v2H6v-2zm4-3.5C10 8.64 8 9 8 9H6c0-.55.45-1 1-1h.5c.28 0 .5-.22.5-.5v-1c0-.28-.22-.5-.5-.5h-1c-.28 0-.5.22-.5.5V7H4c0-1.5 1.5-3 3-3s3 1 3 2.5zM7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7z\"/>"},"quote":{"name":"quote","figma":{"id":"0:655","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["quotation"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6.16 3.84C3.73 5.4 2.55 7.01 2.55 9.7c.16-.05.3-.05.44-.05 1.27 0 2.5.86 2.5 2.41 0 1.61-1.03 2.61-2.5 2.61-1.9 0-2.99-1.52-2.99-4.25C0 6.62 1.75 3.89 5.02 2l1.14 1.84zm7 0C10.73 5.4 9.55 7.01 9.55 9.7c.16-.05.3-.05.44-.05 1.27 0 2.5.86 2.5 2.41 0 1.61-1.03 2.61-2.5 2.61-1.89 0-2.98-1.52-2.98-4.25 0-3.8 1.75-6.53 5.02-8.42l1.14 1.84h-.01z\"/>"},"radio-tower":{"name":"radio-tower","figma":{"id":"0:659","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["broadcast"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4.78 5.78c.25-.25.25-.67 0-.92-.32-.33-.48-.76-.48-1.19 0-.43.16-.86.48-1.19.25-.26.25-.67 0-.92a.613.613 0 0 0-.45-.19c-.16 0-.33.06-.45.19-.57.58-.85 1.35-.85 2.11 0 .76.29 1.53.85 2.11.25.25.66.25.9 0zM2.32.19a.651.651 0 0 0-.92 0C.47 1.15 0 2.41 0 3.66c0 1.26.47 2.52 1.4 3.48.25.26.66.26.91 0s.25-.68 0-.94c-.68-.7-1.02-1.62-1.02-2.54 0-.92.34-1.84 1.02-2.54a.66.66 0 0 0 .01-.93zm5.69 5.1a1.62 1.62 0 1 0-1.62-1.62c-.01.89.72 1.62 1.62 1.62zM14.58.2a.628.628 0 0 0-.91 0c-.25.26-.25.68 0 .94.68.7 1.02 1.62 1.02 2.54 0 .92-.34 1.83-1.02 2.54-.25.26-.25.68 0 .94a.651.651 0 0 0 .92 0c.93-.96 1.4-2.22 1.4-3.48A5.048 5.048 0 0 0 14.58.2zM8.01 6.59c-.41 0-.83-.1-1.2-.3l-3.15 8.37h1.49l.86-1h4l.84 1h1.49L9.2 6.29c-.38.2-.78.3-1.19.3zM8 7.07l1.01 3.6h-2L8 7.07zm-1.99 5.59l1-1h2l1 1h-4zm5.19-11.1c-.25.25-.25.67 0 .92.32.33.48.76.48 1.19 0 .43-.16.86-.48 1.19-.25.26-.25.67 0 .92a.63.63 0 0 0 .9 0c.57-.58.85-1.35.85-2.11 0-.76-.28-1.53-.85-2.11a.634.634 0 0 0-.9 0z\"/>"},"repo-clone":{"name":"repo-clone","figma":{"id":"0:669","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","repository"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15 0H9v7c0 .55.45 1 1 1h1v1h1V8h3c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 7h-1V6h1v1zm4 0h-3V6h3v1zm0-2h-4V1h4v4zM4 5H3V4h1v1zm0-2H3V2h1v1zM2 1h6V0H1C.45 0 0 .45 0 1v12c0 .55.45 1 1 1h2v2l1.5-1.5L6 16v-2h5c.55 0 1-.45 1-1v-3H2V1zm9 10v2H6v-1H3v1H1v-2h10zM3 8h1v1H3V8zm1-1H3V6h1v1z\"/>"},"repo-force-push":{"name":"repo-force-push","figma":{"id":"0:681","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","put"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 9H8v7H6V9H4l2.25-3H4l3-4 3 4H7.75L10 9zm1-9H1C.45 0 0 .45 0 1v12c0 .55.45 1 1 1h4v-1H1v-2h4v-1H2V1h9v9H9v1h2v2H9v1h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"/>"},"repo-forked":{"name":"repo-forked","figma":{"id":"0:685","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","copy"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"repo-pull":{"name":"repo-pull","figma":{"id":"0:691","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","get"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 8V6H7V4h6V2l3 3-3 3zM4 2H3v1h1V2zm7 5h1v6c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1v2h-1V1H2v9h9V7zm0 4H1v2h2v-1h3v1h5v-2zM4 6H3v1h1V6zm0-2H3v1h1V4zM3 9h1V8H3v1z\"/>"},"repo-push":{"name":"repo-push","figma":{"id":"0:700","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","repository","put"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 3H3V2h1v1zM3 5h1V4H3v1zm4 0L4 9h2v7h2V9h2L7 5zm4-5H1C.45 0 0 .45 0 1v12c0 .55.45 1 1 1h4v-1H1v-2h4v-1H2V1h9.02L11 10H9v1h2v2H9v1h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"/>"},"repo":{"name":"repo","figma":{"id":"0:706","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","repository"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z\"/>"},"rocket":{"name":"rocket","figma":{"id":"0:715","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["staff","stafftools","blast","off","space","launch","ship"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12.17 3.83c-.27-.27-.47-.55-.63-.88-.16-.31-.27-.66-.34-1.02-.58.33-1.16.7-1.73 1.13-.58.44-1.14.94-1.69 1.48-.7.7-1.33 1.81-1.78 2.45H3L0 10h3l2-2c-.34.77-1.02 2.98-1 3l1 1c.02.02 2.23-.64 3-1l-2 2v3l3-3v-3c.64-.45 1.75-1.09 2.45-1.78.55-.55 1.05-1.13 1.47-1.7.44-.58.81-1.16 1.14-1.72-.36-.08-.7-.19-1.03-.34a3.39 3.39 0 0 1-.86-.63zM16 0s-.09.38-.3 1.06c-.2.7-.55 1.58-1.06 2.66-.7-.08-1.27-.33-1.66-.72-.39-.39-.63-.94-.7-1.64C13.36.84 14.23.48 14.92.28 15.62.08 16 0 16 0z\"/>"},"rss":{"name":"rss","figma":{"id":"0:719","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["broadcast","feed","atom"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2 13H0v-2c1.11 0 2 .89 2 2zM0 3v1a9 9 0 0 1 9 9h1C10 7.48 5.52 3 0 3zm0 4v1c2.75 0 5 2.25 5 5h1c0-3.31-2.69-6-6-6z\"/>"},"ruby":{"name":"ruby","figma":{"id":"0:724","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["code","language"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 6l-5 5V4h3l2 2zm3 0l-8 8-8-8 4-4h8l4 4zm-8 6.5L14.5 6l-3-3h-7l-3 3L8 12.5z\"/>"},"search":{"name":"search","figma":{"id":"0:729","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["magnifying","glass"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.7 13.3l-3.81-3.83A5.93 5.93 0 0 0 13 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 0 0 0-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z\"/>"},"server":{"name":"server","figma":{"id":"0:733","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["computers","racks","ops"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 6H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zM2 9H1V7h1v2zm2 0H3V7h1v2zm2 0H5V7h1v2zm2 0H7V7h1v2zm3-8H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM2 4H1V2h1v2zm2 0H3V2h1v2zm2 0H5V2h1v2zm2 0H7V2h1v2zm3-1h-1V2h1v1zm0 8H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm-9 3H1v-2h1v2zm2 0H3v-2h1v2zm2 0H5v-2h1v2zm2 0H7v-2h1v2z\"/>"},"settings":{"name":"settings","figma":{"id":"0:751","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["sliders","filters","controls","levels"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 7H3V2h1v5zm-1 7h1v-3H3v3zm5 0h1V8H8v6zm5 0h1v-2h-1v2zm1-12h-1v6h1V2zM9 2H8v2h1V2zM5 8H2c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm5-3H7c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm5 4h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1z\"/>"},"shield":{"name":"shield","figma":{"id":"0:762","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["protect","shield","lock"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 0L0 2v6.02C0 12.69 5.31 16 7 16c1.69 0 7-3.31 7-7.98V2L7 0zM5 11l1.14-2.8a.568.568 0 0 0-.25-.59C5.33 7.25 5 6.66 5 6c0-1.09.89-2 1.98-2C8.06 4 9 4.91 9 6c0 .66-.33 1.25-.89 1.61-.19.13-.3.36-.25.59L9 11H5z\"/>"},"sign-in":{"name":"sign-in","figma":{"id":"0:764","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["door","arrow","direction","enter","log in"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 6.75V12h4V8h1v4c0 .55-.45 1-1 1H7v3l-5.45-2.72c-.33-.17-.55-.52-.55-.91V1c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v3h-1V1H3l4 2v2.25L10 3v2h4v2h-4v2L7 6.75z\"/>"},"sign-out":{"name":"sign-out","figma":{"id":"0:768","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["door","arrow","direction","leave","log out"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 9V7H8V5h4V3l4 3-4 3zm-2 3H6V3L2 1h8v3h1V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v11.38c0 .39.22.73.55.91L6 16.01V13h4c.55 0 1-.45 1-1V8h-1v4z\"/>"},"smiley":{"name":"smiley","figma":{"id":"0:772","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["emoji","smile","mood","emotion"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm4.81 12.81a6.72 6.72 0 0 1-2.17 1.45c-.83.36-1.72.53-2.64.53-.92 0-1.81-.17-2.64-.53-.81-.34-1.55-.83-2.17-1.45a6.773 6.773 0 0 1-1.45-2.17A6.59 6.59 0 0 1 1.21 8c0-.92.17-1.81.53-2.64.34-.81.83-1.55 1.45-2.17.62-.62 1.36-1.11 2.17-1.45A6.59 6.59 0 0 1 8 1.21c.92 0 1.81.17 2.64.53.81.34 1.55.83 2.17 1.45.62.62 1.11 1.36 1.45 2.17.36.83.53 1.72.53 2.64 0 .92-.17 1.81-.53 2.64-.34.81-.83 1.55-1.45 2.17zM4 6.8v-.59c0-.66.53-1.19 1.2-1.19h.59c.66 0 1.19.53 1.19 1.19v.59c0 .67-.53 1.2-1.19 1.2H5.2C4.53 8 4 7.47 4 6.8zm5 0v-.59c0-.66.53-1.19 1.2-1.19h.59c.66 0 1.19.53 1.19 1.19v.59c0 .67-.53 1.2-1.19 1.2h-.59C9.53 8 9 7.47 9 6.8zm4 3.2c-.72 1.88-2.91 3-5 3s-4.28-1.13-5-3c-.14-.39.23-1 .66-1h8.59c.41 0 .89.61.75 1z\"/>"},"squirrel":{"name":"squirrel","figma":{"id":"0:779","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["ship","shipit","launch"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.75 1c-2.21 0-4 1.31-4 2.92 0 1.94.5 3.03 0 6.08 0-4.5-2.77-6.34-4-6.34.05-.5-.48-.66-.48-.66s-.22.11-.3.34c-.27-.31-.56-.27-.56-.27l-.13.58S.45 4.29.43 6.87c.2.33 1.53.6 2.47.43.89.05.67.79.47.99C2.53 9.13 1.75 8 .75 8s-1 1 0 1 1 1 3 1c-3.09 1.2 0 4 0 4h-1c-1 0-1 1-1 1h6c3 0 5-1 5-3.47 0-.85-.43-1.79-1-2.53-1.11-1.46.23-2.68 1-2 .77.68 3 1 3-2 0-2.21-1.79-4-4-4zm-9.5 5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5.22.5.5-.22.5-.5.5z\"/>"},"star":{"name":"star","figma":{"id":"0:781","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["save","remember","like"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z\"/>"},"stop":{"name":"stop","figma":{"id":"0:785","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["block","spam","report"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 1H4L0 5v6l4 4h6l4-4V5l-4-4zm3 9.5L9.5 14h-5L1 10.5v-5L4.5 2h5L13 5.5v5zM6 4h2v5H6V4zm0 6h2v2H6v-2z\"/>"},"sync":{"name":"sync","figma":{"id":"0:791","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["cycle","refresh","loop"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10.236 7.4a4.15 4.15 0 0 1-1.2 3.6 4.346 4.346 0 0 1-5.41.54l1.17-1.14-4.3-.6.6 4.2 1.31-1.26c2.36 1.74 5.7 1.57 7.84-.54a5.876 5.876 0 0 0 1.74-4.46l-1.75-.34zM2.956 5a4.346 4.346 0 0 1 5.41-.54L7.196 5.6l4.3.6-.6-4.2-1.31 1.26c-2.36-1.74-5.7-1.57-7.85.54-1.24 1.23-1.8 2.85-1.73 4.46l1.75.35A4.17 4.17 0 0 1 2.956 5z\"/>"},"tag":{"name":"tag","figma":{"id":"0:795","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["release"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 0 0 0-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z\"/>"},"tasklist":{"name":"tasklist","figma":{"id":"0:800","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["todo"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.41 9H7.59C7 9 7 8.59 7 8c0-.59 0-1 .59-1h7.81c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM9.59 4C9 4 9 3.59 9 3c0-.59 0-1 .59-1h5.81c.59 0 .59.41.59 1 0 .59 0 1-.59 1H9.59zM0 3.91l1.41-1.3L3 4.2 7.09 0 8.5 1.41 3 6.91l-3-3zM7.59 12h7.81c.59 0 .59.41.59 1 0 .59 0 1-.59 1H7.59C7 14 7 13.59 7 13c0-.59 0-1 .59-1z\"/>"},"telescope":{"name":"telescope","figma":{"id":"0:806","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["science","space","look","view","explore"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.59 9l3 6h-1l-2-4v5h-1v-6l-2 5h-1l2-5 2-1zm-1-9h-1v1h1V0zm-2 3h-1v1h1V3zm-3-2h-1v1h1V1zM.22 9a.52.52 0 0 0-.16.67l.55.92c.13.23.41.31.64.2l1.39-.66-1.16-2-1.27.86.01.01zm7.89-5.39l-5.8 3.95L3.54 9.7l6.33-3.03L8.1 3.61h.01zm4.22 1.28l-1.47-2.52a.51.51 0 0 0-.72-.17l-1.2.83 1.84 3.2 1.33-.64c.27-.13.36-.44.22-.7z\"/>"},"terminal":{"name":"terminal","figma":{"id":"0:815","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["code","ops","shell"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 10h4v1H7v-1zm-3 1l3-3-3-3-.75.75L5.5 8l-2.25 2.25L4 11zm10-8v10c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h12c.55 0 1 .45 1 1zm-1 0H1v10h12V3z\"/>"},"text-size":{"name":"text-size","figma":{"id":"0:821","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["font","size","text"],"width":18,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13.62 9.08L12.1 3.66h-.06l-1.5 5.42h3.08zM5.7 10.13S4.68 6.52 4.53 6.02h-.08l-1.13 4.11H5.7zM17.31 14h-2.25l-.95-3.25h-4.07L9.09 14H6.84l-.69-2.33H2.87L2.17 14H0l3.3-9.59h2.5l2.17 6.34L10.86 2h2.52l3.94 12h-.01z\"/>"},"three-bars":{"name":"three-bars","figma":{"id":"0:826","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["hamburger","menu","dropdown"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0 4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59 11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1 .59-1z\"/>"},"thumbsdown":{"name":"thumbsdown","figma":{"id":"0:831","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["thumb","thumbsdown","rejected","dislike"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.98 7.83l-.97-5.95C14.84.5 13.13 0 12 0H5.69c-.2 0-.38.05-.53.14L3.72 1H2C.94 1 0 1.94 0 3v4c0 1.06.94 2.02 2 2h2c.91 0 1.39.45 2.39 1.55.91 1 .88 1.8.63 3.27-.08.5.06 1 .42 1.42.39.47.98.77 1.56.77 1.83 0 3-3.72 3-5.02l-.02-.98h2.04c1.16 0 1.95-.8 1.98-1.97 0-.06.02-.13-.02-.2v-.01zm-1.97 1.19h-1.99c-.7 0-1.03.28-1.03.97l.03 1.03c0 1.27-1.17 4-2 4-.5 0-1.08-.5-1-1 .25-1.58.34-2.78-.89-4.14C6.11 8.75 5.36 8 4 8V2l1.67-1H12c.73 0 1.95.31 2 1l.02.02 1 6c-.03.64-.38 1-1 1h-.01z\"/>"},"thumbsup":{"name":"thumbsup","figma":{"id":"0:835","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["thumb","thumbsup","prop","ship","like"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 14c-.05.69-1.27 1-2 1H5.67L4 14V8c1.36 0 2.11-.75 3.13-1.88 1.23-1.36 1.14-2.56.88-4.13-.08-.5.5-1 1-1 .83 0 2 2.73 2 4l-.02 1.03c0 .69.33.97 1.02.97h2c.63 0 .98.36 1 1l-1 6L14 14zm0-8h-2.02l.02-.98C12 3.72 10.83 0 9 0c-.58 0-1.17.3-1.56.77-.36.41-.5.91-.42 1.41.25 1.48.28 2.28-.63 3.28-1 1.09-1.48 1.55-2.39 1.55H2C.94 7 0 7.94 0 9v4c0 1.06.94 2 2 2h1.72l1.44.86c.16.09.33.14.52.14h6.33c1.13 0 2.84-.5 3-1.88l.98-5.95c.02-.08.02-.14.02-.2-.03-1.17-.84-1.97-2-1.97H14z\"/>"},"tools":{"name":"tools","figma":{"id":"0:839","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["screwdriver","wrench","settings"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4.48 7.27c.26.26 1.28 1.33 1.28 1.33l.56-.58-.88-.91 1.69-1.8s-.76-.74-.43-.45c.32-1.19.03-2.51-.87-3.44C4.93.5 3.66.2 2.52.51l1.93 2-.51 1.96-1.89.52-1.93-2C-.19 4.17.1 5.48 1 6.4c.94.98 2.29 1.26 3.48.87zm6.44 1.94l-2.33 2.3 3.84 3.98c.31.33.73.49 1.14.49.41 0 .82-.16 1.14-.49.63-.65.63-1.7 0-2.35l-3.79-3.93zM16 2.53L13.55 0 6.33 7.46l.88.91-4.31 4.46-.99.53-1.39 2.27.35.37 2.2-1.44.51-1.02L7.9 9.08l.88.91L16 2.53z\"/>"},"trashcan":{"name":"trashcan","figma":{"id":"0:844","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["garbage","rubbish","recycle","delete"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z\"/>"},"triangle-down":{"name":"triangle-down","figma":{"id":"0:847","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["arrow","point","direction"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 5l6 6 6-6H0z\"/>"},"triangle-left":{"name":"triangle-left","figma":{"id":"0:849","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["arrow","point","direction"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 2L0 8l6 6V2z\"/>"},"triangle-right":{"name":"triangle-right","figma":{"id":"0:851","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["arrow","point","direction"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 14l6-6-6-6v12z\"/>"},"triangle-up":{"name":"triangle-up","figma":{"id":"0:853","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["arrow","point","direction"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 11L6 5l-6 6h12z\"/>"},"unfold":{"name":"unfold","figma":{"id":"0:857","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["expand","open","reveal"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.5 7.5L14 10c0 .55-.45 1-1 1H9v-1h3.5l-2-2h-7l-2 2H5v1H1c-.55 0-1-.45-1-1l2.5-2.5L0 5c0-.55.45-1 1-1h4v1H1.5l2 2h7l2-2H9V4h4c.55 0 1 .45 1 1l-2.5 2.5zM6 6h2V3h2L7 0 4 3h2v3zm2 3H6v3H4l3 3 3-3H8V9z\"/>"},"unmute":{"name":"unmute","figma":{"id":"0:862","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["loud","volume","audio","sound","play"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 7.96c0 1.09-.45 2.09-1.17 2.83l-.67-.67c.55-.56.89-1.31.89-2.16 0-.85-.34-1.61-.89-2.16l.67-.67A3.99 3.99 0 0 1 12 7.96zM7.72 2.22L4 5.94H2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2l3.72 3.72c.47.47 1.28.14 1.28-.53V2.75c0-.67-.81-1-1.28-.53zm5.94.08l-.67.67a6.996 6.996 0 0 1 2.06 4.98c0 1.94-.78 3.7-2.06 4.98l.67.67A7.973 7.973 0 0 0 16 7.94c0-2.22-.89-4.22-2.34-5.66v.02zm-1.41 1.41l-.69.67a5.05 5.05 0 0 1 1.48 3.58c0 1.39-.56 2.66-1.48 3.56l.69.67A5.97 5.97 0 0 0 14 7.96c0-1.65-.67-3.16-1.75-4.25z\"/>"},"project":{"name":"project","figma":{"id":"0:868","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["board","kanban","columns","scrum"],"width":15,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z\"/>"},"kebab-horizontal":{"name":"kebab-horizontal","figma":{"id":"0:875","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["kebab","dot","menu","more"],"width":13,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm5 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zM13 7.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z\"/>"},"kebab-vertical":{"name":"kebab-vertical","figma":{"id":"0:880","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["kebab","dot","menu","more"],"width":3,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 2.5a1.5 1.5 0 1 0 3 0 1.5 1.5 0 0 0-3 0zm0 5a1.5 1.5 0 1 0 3 0 1.5 1.5 0 0 0-3 0zM1.5 14a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z\"/>"},"report":{"name":"report","figma":{"id":"0:885","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["report","abuse","flag"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H7l-4 4v-4H1a1 1 0 0 1-1-1V2zm1 0h14v9H6.5L4 13.5V11H1V2zm6 6h2v2H7V8zm0-5h2v4H7V3z\"/>"},"note":{"name":"note","figma":{"id":"0:891","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["card","paper","ticket"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 10h4V9H3v1zm0-2h6V7H3v1zm0-2h8V5H3v1zm10 6H1V3h12v9zM1 2c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1H1z\"/>"},"screen-full":{"name":"screen-full","figma":{"id":"0:898","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["fullscreen","expand"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 10h1v3c0 .547-.453 1-1 1h-3v-1h3v-3zM1 10H0v3c0 .547.453 1 1 1h3v-1H1v-3zm0-7h3V2H1c-.547 0-1 .453-1 1v3h1V3zm1 1h10v8H2V4zm2 6h6V6H4v4zm6-8v1h3v3h1V3c0-.547-.453-1-1-1h-3z\"/>"},"screen-normal":{"name":"screen-normal","figma":{"id":"0:906","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["fullscreen","expand","exit"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2 4H0V3h2V1h1v2c0 .547-.453 1-1 1zm0 8H0v1h2v2h1v-2c0-.547-.453-1-1-1zm9-2c0 .547-.453 1-1 1H4c-.547 0-1-.453-1-1V6c0-.547.453-1 1-1h6c.547 0 1 .453 1 1v4zM9 7H5v2h4V7zm2 6v2h1v-2h2v-1h-2c-.547 0-1 .453-1 1zm1-10V1h-1v2c0 .547.453 1 1 1h2V3h-2z\"/>"},"unverified":{"name":"unverified","figma":{"id":"0:914","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["insecure","untrusted","signed"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.68 7.07L14.6 5.73c-.17-.22-.28-.48-.31-.77l-.19-1.7a1.51 1.51 0 0 0-1.33-1.33l-1.7-.19c-.3-.03-.56-.16-.78-.33L8.95.33c-.55-.44-1.33-.44-1.88 0L5.73 1.41c-.22.17-.48.28-.77.31l-1.7.19c-.7.08-1.25.63-1.33 1.33l-.19 1.7c-.03.3-.16.56-.33.78L.33 7.06c-.44.55-.44 1.33 0 1.88l1.08 1.34c.17.22.28.48.31.77l.19 1.7c.08.7.63 1.25 1.33 1.33l1.7.19c.3.03.56.16.78.33l1.34 1.08c.55.44 1.33.44 1.88 0l1.34-1.08c.22-.17.48-.28.77-.31l1.7-.19c.7-.08 1.25-.63 1.33-1.33l.19-1.7c.03-.3.16-.56.33-.78l1.08-1.34c.44-.55.44-1.33 0-1.88zm-6.67 4.44c0 .28-.22.5-.5.5h-1c-.27 0-.5-.22-.5-.5v-1c0-.28.23-.5.5-.5h1c.28 0 .5.22.5.5v1zm1.56-4.89c-.06.17-.17.33-.3.47-.13.16-.14.19-.33.38-.16.17-.31.3-.52.45-.11.09-.2.19-.28.27-.08.08-.14.17-.19.27-.05.1-.08.19-.11.3-.03.11-.03.13-.03.25H7.14c0-.22 0-.31.03-.48.03-.19.08-.36.14-.52.06-.14.14-.28.25-.42.11-.13.23-.25.41-.38.27-.19.36-.3.48-.52.12-.22.2-.38.2-.59 0-.27-.06-.45-.2-.58-.13-.13-.31-.19-.58-.19-.09 0-.19.02-.3.05-.11.03-.17.09-.25.16-.08.07-.14.11-.2.2a.41.41 0 0 0-.09.28h-2c0-.38.13-.56.27-.83.16-.27.36-.5.61-.67.25-.17.55-.3.88-.38.33-.08.7-.13 1.09-.13.44 0 .83.05 1.17.13.34.09.63.22.88.39.23.17.41.38.55.63.13.25.19.55.19.88 0 .22 0 .42-.08.59l-.02-.01z\"/>"},"verified":{"name":"verified","figma":{"id":"0:919","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["trusted","secure","trustworthy","signed"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.68 7.07L14.6 5.73c-.17-.22-.28-.48-.31-.77l-.19-1.7a1.51 1.51 0 0 0-1.33-1.33l-1.7-.19c-.3-.03-.56-.16-.78-.33L8.95.33c-.55-.44-1.33-.44-1.88 0L5.73 1.41c-.22.17-.48.28-.77.31l-1.7.19c-.7.08-1.25.63-1.33 1.33l-.19 1.7c-.03.3-.16.56-.33.78L.33 7.06c-.44.55-.44 1.33 0 1.88l1.08 1.34c.17.22.28.48.31.77l.19 1.7c.08.7.63 1.25 1.33 1.33l1.7.19c.3.03.56.16.78.33l1.34 1.08c.55.44 1.33.44 1.88 0l1.34-1.08c.22-.17.48-.28.77-.31l1.7-.19c.7-.08 1.25-.63 1.33-1.33l.19-1.7c.03-.3.16-.56.33-.78l1.08-1.34c.44-.55.44-1.33 0-1.88zm-9.17 4.94l-3.5-3.5 1.5-1.5 2 2 5-5 1.5 1.55-6.5 6.45z\"/>"},"versions":{"name":"versions","figma":{"id":"0:923","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["history","commits"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 3H7c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-1 8H8V5h4v6zM4 4h1v1H4v6h1v1H4c-.55 0-1-.45-1-1V5c0-.55.45-1 1-1zM1 5h1v1H1v4h1v1H1c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1z\"/>"},"watch":{"name":"watch","figma":{"id":"0:929","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["wait","hourglass","time","date"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 8h2v1H5V5h1v3zm6 0c0 2.22-1.2 4.16-3 5.19V15c0 .55-.45 1-1 1H4c-.55 0-1-.45-1-1v-1.81C1.2 12.16 0 10.22 0 8s1.2-4.16 3-5.19V1c0-.55.45-1 1-1h4c.55 0 1 .45 1 1v1.81c1.8 1.03 3 2.97 3 5.19zm-1 0c0-2.77-2.23-5-5-5S1 5.23 1 8s2.23 5 5 5 5-2.23 5-5z\"/>"},"x":{"name":"x","figma":{"id":"0:932","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["remove","close","delete"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z\"/>"},"zap":{"name":"zap","figma":{"id":"0:934","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["electricity","lightning","props","like","star","save"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 7H6l3-7-9 9h4l-3 7 9-9z\"/>"},"key":{"name":"key","figma":{"id":"0:938","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["key","lock","secure","safe"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12.83 2.17C12.08 1.42 11.14 1.03 10 1c-1.13.03-2.08.42-2.83 1.17S6.04 3.86 6.01 5c0 .3.03.59.09.89L0 12v1l1 1h2l1-1v-1h1v-1h1v-1h2l1.09-1.11c.3.08.59.11.91.11 1.14-.03 2.08-.42 2.83-1.17S13.97 6.14 14 5c-.03-1.14-.42-2.08-1.17-2.83zM11 5.38c-.77 0-1.38-.61-1.38-1.38 0-.77.61-1.38 1.38-1.38.77 0 1.38.61 1.38 1.38 0 .77-.61 1.38-1.38 1.38z\"/>"},"grabber":{"name":"grabber","figma":{"id":"0:942","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["mover","drap","drop","sort"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 4v1H0V4h8zM0 8h8V7H0v1zm0 3h8v-1H0v1z\"/>"},"plus-small":{"name":"plus-small","figma":{"id":"0:947","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["add","new","more","small"],"width":7,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 4H3v3H0v1h3v3h1V8h3V7H4V4z\"/>"},"light-bulb":{"name":"light-bulb","figma":{"id":"0:951","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["idea"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z\"/>"},"link-external":{"name":"link-external","figma":{"id":"0:956","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["out","see","more","go","to"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 10h1v3c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h3v1H1v10h10v-3zM6 2l2.25 2.25L5 7.5 6.5 9l3.25-3.25L12 8V2H6z\"/>"}}
    \ No newline at end of file
    +{"alert":{"name":"alert","figma":{"id":"0:5","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["warning","triangle","exclamation","point"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z\"/>"},"arrow-down":{"name":"arrow-down","figma":{"id":"0:8","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 7V3H3v4H0l5 6 5-6H7z\"/>"},"arrow-left":{"name":"arrow-left","figma":{"id":"0:10","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 3L0 8l6 5v-3h4V6H6V3z\"/>"},"arrow-right":{"name":"arrow-right","figma":{"id":"0:12","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 8L4 3v3H0v4h4v3l6-5z\"/>"},"arrow-up":{"name":"arrow-up","figma":{"id":"0:14","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5 3L0 9h3v4h4V9h3L5 3z\"/>"},"arrow-both":{"name":"arrow-both","figma":{"id":"7345:13","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction","left","right"],"width":20,"height":16,"path":"<path d=\"M0 8l6-5v3h8V3l6 5-6 5v-3H6v3L0 8z\"/>"},"arrow-small-down":{"name":"arrow-small-down","figma":{"id":"0:16","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction","little","tiny"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 7V5H2v2H0l3 4 3-4H4z\"/>"},"arrow-small-left":{"name":"arrow-small-left","figma":{"id":"0:18","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction","little","tiny"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 7V5L0 8l4 3V9h2V7H4z\"/>"},"arrow-small-right":{"name":"arrow-small-right","figma":{"id":"0:20","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction","little","tiny"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 8L2 5v2H0v2h2v2l4-3z\"/>"},"arrow-small-up":{"name":"arrow-small-up","figma":{"id":"0:22","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["point","direction","little","tiny"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 5L0 9h2v2h2V9h2L3 5z\"/>"},"beaker":{"name":"beaker","figma":{"id":"0:26","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["experiment","labs","experimental","feature","test","science","education","study","development","testing"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14.38 14.59L11 7V3h1V2H3v1h1v4L.63 14.59A1 1 0 0 0 1.54 16h11.94c.72 0 1.2-.75.91-1.41h-.01zM3.75 10L5 7V3h5v4l1.25 3h-7.5zM8 8h1v1H8V8zM7 7H6V6h1v1zm0-3h1v1H7V4zm0-3H6V0h1v1z\"/>"},"bell":{"name":"bell","figma":{"id":"0:34","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["notification"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13.99 11.991v1H0v-1l.73-.58c.769-.769.809-2.547 1.189-4.416.77-3.767 4.077-4.996 4.077-4.996 0-.55.45-1 .999-1 .55 0 1 .45 1 1 0 0 3.387 1.229 4.156 4.996.38 1.879.42 3.657 1.19 4.417l.659.58h-.01zM6.995 15.99c1.11 0 1.999-.89 1.999-1.999H4.996c0 1.11.89 1.999 1.999 1.999z\"/>"},"bold":{"name":"bold","figma":{"id":"0:38","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["markdown","bold","text"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M1 2h3.83c2.48 0 4.3.75 4.3 2.95 0 1.14-.63 2.23-1.67 2.61v.06c1.33.3 2.3 1.23 2.3 2.86 0 2.39-1.97 3.52-4.61 3.52H1V2zm3.66 4.95c1.67 0 2.38-.66 2.38-1.69 0-1.17-.78-1.61-2.34-1.61H3.13v3.3h1.53zm.27 5.39c1.77 0 2.75-.64 2.75-1.98 0-1.27-.95-1.81-2.75-1.81h-1.8v3.8h1.8v-.01z\"/>"},"book":{"name":"book","figma":{"id":"0:43","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","wiki","readme"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 5h4v1H3V5zm0 3h4V7H3v1zm0 2h4V9H3v1zm11-5h-4v1h4V5zm0 2h-4v1h4V7zm0 2h-4v1h4V9zm2-6v9c0 .55-.45 1-1 1H9.5l-1 1-1-1H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h5.5l1 1 1-1H15c.55 0 1 .45 1 1zm-8 .5L7.5 3H2v9h6V3.5zm7-.5H9.5l-.5.5V12h6V3z\"/>"},"bookmark":{"name":"bookmark","figma":{"id":"0:54","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["tab","star"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 0H1C.27 0 0 .27 0 1v15l5-3.09L10 16V1c0-.73-.27-1-1-1zm-.78 4.25L6.36 5.61l.72 2.16c.06.22-.02.28-.2.17L5 6.6 3.12 7.94c-.19.11-.25.05-.2-.17l.72-2.16-1.86-1.36c-.17-.16-.14-.23.09-.23l2.3-.03.7-2.16h.25l.7 2.16 2.3.03c.23 0 .27.08.09.23h.01z\"/>"},"briefcase":{"name":"briefcase","figma":{"id":"0:58","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["suitcase","business"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 4V3c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v1H1c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1H9zM6 3h2v1H6V3zm7 6H8v1H6V9H1V5h1v3h10V5h1v4z\"/>"},"broadcast":{"name":"broadcast","figma":{"id":"0:63","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["rss","radio","signal"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 9H8c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1H7c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1H6c-.55 0-1 .45-1 1v2h1v3c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-3h1v-2c0-.55-.45-1-1-1zM7 7h1v1H7V7zm2 4H8v4H7v-4H6v-1h3v1zm2.09-3.5c0-1.98-1.61-3.59-3.59-3.59A3.593 3.593 0 0 0 4 8.31v1.98c-.61-.77-1-1.73-1-2.8 0-2.48 2.02-4.5 4.5-4.5S12 5.01 12 7.49c0 1.06-.39 2.03-1 2.8V8.31c.06-.27.09-.53.09-.81zm3.91 0c0 2.88-1.63 5.38-4 6.63v-1.05a6.553 6.553 0 0 0 3.09-5.58A6.59 6.59 0 0 0 7.5.91 6.59 6.59 0 0 0 .91 7.5c0 2.36 1.23 4.42 3.09 5.58v1.05A7.497 7.497 0 0 1 7.5 0C11.64 0 15 3.36 15 7.5z\"/>"},"browser":{"name":"browser","figma":{"id":"0:70","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["window","web"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5 3h1v1H5V3zM3 3h1v1H3V3zM1 3h1v1H1V3zm12 10H1V5h12v8zm0-9H7V3h6v1zm1-1c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V3z\"/>"},"bug":{"name":"bug","figma":{"id":"0:78","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["insect","issue"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 10h3V9h-3V8l3.17-1.03-.34-.94L11 7V6c0-.55-.45-1-1-1V4c0-.48-.36-.88-.83-.97L10.2 2H12V1H9.8l-2 2h-.59L5.2 1H3v1h1.8l1.03 1.03C5.36 3.12 5 3.51 5 4v1c-.55 0-1 .45-1 1v1l-2.83-.97-.34.94L4 8v1H1v1h3v1L.83 12.03l.34.94L4 12v1c0 .55.45 1 1 1h1l1-1V6h1v7l1 1h1c.55 0 1-.45 1-1v-1l2.83.97.34-.94L11 11v-1zM9 5H6V4h3v1z\"/>"},"calendar":{"name":"calendar","figma":{"id":"0:82","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["time","day","month","year","date","appointment"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 2h-1v1.5c0 .28-.22.5-.5.5h-2c-.28 0-.5-.22-.5-.5V2H6v1.5c0 .28-.22.5-.5.5h-2c-.28 0-.5-.22-.5-.5V2H2c-.55 0-1 .45-1 1v11c0 .55.45 1 1 1h11c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 12H2V5h11v9zM5 3H4V1h1v2zm6 0h-1V1h1v2zM6 7H5V6h1v1zm2 0H7V6h1v1zm2 0H9V6h1v1zm2 0h-1V6h1v1zM4 9H3V8h1v1zm2 0H5V8h1v1zm2 0H7V8h1v1zm2 0H9V8h1v1zm2 0h-1V8h1v1zm-8 2H3v-1h1v1zm2 0H5v-1h1v1zm2 0H7v-1h1v1zm2 0H9v-1h1v1zm2 0h-1v-1h1v1zm-8 2H3v-1h1v1zm2 0H5v-1h1v1zm2 0H7v-1h1v1zm2 0H9v-1h1v1z\"/>"},"check":{"name":"check","figma":{"id":"0:104","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["mark","yes","confirm","accept","ok","success"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z\"/>"},"checklist":{"name":"checklist","figma":{"id":"0:108","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["todo","tasks"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 8.5l-6 6-3-3L8.5 10l1.5 1.5L14.5 7 16 8.5zM5.7 12.2l.8.8H2c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h7c.55 0 1 .45 1 1v6.5l-.8-.8c-.39-.39-1.03-.39-1.42 0L5.7 10.8a.996.996 0 0 0 0 1.41v-.01zM4 4h5V3H4v1zm0 2h5V5H4v1zm0 2h3V7H4v1zM3 9H2v1h1V9zm0-2H2v1h1V7zm0-2H2v1h1V5zm0-2H2v1h1V3z\"/>"},"chevron-down":{"name":"chevron-down","figma":{"id":"0:117","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["triangle","arrow"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5 11L0 6l1.5-1.5L5 8.25 8.5 4.5 10 6l-5 5z\"/>"},"chevron-left":{"name":"chevron-left","figma":{"id":"0:119","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["triangle","arrow"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5.5 3L7 4.5 3.25 8 7 11.5 5.5 13l-5-5 5-5z\"/>"},"chevron-right":{"name":"chevron-right","figma":{"id":"0:121","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["triangle","arrow"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.5 8l-5 5L1 11.5 4.75 8 1 4.5 2.5 3l5 5z\"/>"},"chevron-up":{"name":"chevron-up","figma":{"id":"0:123","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["triangle","arrow"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 10l-1.5 1.5L5 7.75 1.5 11.5 0 10l5-5 5 5z\"/>"},"circle-slash":{"name":"circle-slash","figma":{"id":"0:127","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["no","deny","fail","failure","error","bad"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm0 1.3c1.3 0 2.5.44 3.47 1.17l-8 8A5.755 5.755 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zm0 11.41c-1.3 0-2.5-.44-3.47-1.17l8-8c.73.97 1.17 2.17 1.17 3.47 0 3.14-2.56 5.7-5.7 5.7z\"/>"},"circuit-board":{"name":"circuit-board","figma":{"id":"0:132","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["developer","hardware","electricity"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 5c0-.55.45-1 1-1s1 .45 1 1-.45 1-1 1-1-.45-1-1zm8 0c0-.55-.45-1-1-1s-1 .45-1 1 .45 1 1 1 1-.45 1-1zm0 6c0-.55-.45-1-1-1s-1 .45-1 1 .45 1 1 1 1-.45 1-1zm2-10H5v2.17c.36.19.64.47.83.83h2.34c.42-.78 1.33-1.28 2.34-1.05.75.19 1.36.8 1.53 1.55.31 1.38-.72 2.59-2.05 2.59-.8 0-1.48-.44-1.83-1.09H5.83c-.42.8-1.33 1.28-2.34 1.03-.73-.17-1.34-.78-1.52-1.52C1.72 4.49 2.2 3.59 3 3.17V1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1l5-5h2.17c.42-.78 1.33-1.28 2.34-1.05.75.19 1.36.8 1.53 1.55.31 1.38-.72 2.59-2.05 2.59-.8 0-1.48-.44-1.83-1.09H6.99L4 15h9c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1z\"/>"},"clippy":{"name":"clippy","figma":{"id":"0:138","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["copy","paste","save","capture","clipboard"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"/>"},"clock":{"name":"clock","figma":{"id":"0:147","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["time","hour","minute","second","watch"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 8h3v2H7c-.55 0-1-.45-1-1V4h2v4zM7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7z\"/>"},"cloud-download":{"name":"cloud-download","figma":{"id":"0:152","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["save","install","get"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 12h2l-3 3-3-3h2V7h2v5zm3-8c0-.44-.91-3-4.5-3C5.08 1 3 2.92 3 5 1.02 5 0 6.52 0 8c0 1.53 1 3 3 3h3V9.7H3C1.38 9.7 1.3 8.28 1.3 8c0-.17.05-1.7 1.7-1.7h1.3V5c0-1.39 1.56-2.7 3.2-2.7 2.55 0 3.13 1.55 3.2 1.8v1.2H12c.81 0 2.7.22 2.7 2.2 0 2.09-2.25 2.2-2.7 2.2h-2V11h2c2.08 0 4-1.16 4-3.5C16 5.06 14.08 4 12 4z\"/>"},"cloud-upload":{"name":"cloud-upload","figma":{"id":"0:156","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["put","export"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 9H5l3-3 3 3H9v5H7V9zm5-4c0-.44-.91-3-4.5-3C5.08 2 3 3.92 3 6 1.02 6 0 7.52 0 9c0 1.53 1 3 3 3h3v-1.3H3c-1.62 0-1.7-1.42-1.7-1.7 0-.17.05-1.7 1.7-1.7h1.3V6c0-1.39 1.56-2.7 3.2-2.7 2.55 0 3.13 1.55 3.2 1.8v1.2H12c.81 0 2.7.22 2.7 2.2 0 2.09-2.25 2.2-2.7 2.2h-2V12h2c2.08 0 4-1.16 4-3.5C16 6.06 14.08 5 12 5z\"/>"},"code":{"name":"code","figma":{"id":"0:160","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["brackets"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z\"/>"},"comment-discussion":{"name":"comment-discussion","figma":{"id":"0:164","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["converse","talk"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15 1H6c-.55 0-1 .45-1 1v2H1c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h1v3l3-3h4c.55 0 1-.45 1-1V9h1l3 3V9h1c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM9 11H4.5L3 12.5V11H1V5h4v3c0 .55.45 1 1 1h3v2zm6-3h-2v1.5L11.5 8H6V2h9v6z\"/>"},"comment":{"name":"comment","figma":{"id":"0:169","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["speak","bubble"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 1H2c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h2v3.5L7.5 11H14c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 9H7l-2 2v-2H2V2h12v8z\"/>"},"credit-card":{"name":"credit-card","figma":{"id":"0:173","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["money","billing","payments","transactions"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 9H2V8h10v1zm4-6v9c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h14c.55 0 1 .45 1 1zm-1 3H1v6h14V6zm0-3H1v1h14V3zm-9 7H2v1h4v-1z\"/>"},"dash":{"name":"dash","figma":{"id":"0:178","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["hyphen","range"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 7v2h8V7H0z\"/>"},"dashboard":{"name":"dashboard","figma":{"id":"0:182","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["speed","dial"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 5H8V4h1v1zm4 3h-1v1h1V8zM6 5H5v1h1V5zM5 8H4v1h1V8zm11-5.5l-.5-.5L9 7c-.06-.02-1 0-1 0-.55 0-1 .45-1 1v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-.92l6-5.58zm-1.59 4.09c.19.61.3 1.25.3 1.91 0 3.42-2.78 6.2-6.2 6.2-3.42 0-6.21-2.78-6.21-6.2 0-3.42 2.78-6.2 6.2-6.2 1.2 0 2.31.34 3.27.94l.94-.94A7.459 7.459 0 0 0 8.51 1C4.36 1 1 4.36 1 8.5 1 12.64 4.36 16 8.5 16c4.14 0 7.5-3.36 7.5-7.5 0-1.03-.2-2.02-.59-2.91l-1 1z\"/>"},"database":{"name":"database","figma":{"id":"0:190","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["disks","data"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 15c-3.31 0-6-.9-6-2v-2c0-.17.09-.34.21-.5.67.86 3 1.5 5.79 1.5s5.12-.64 5.79-1.5c.13.16.21.33.21.5v2c0 1.1-2.69 2-6 2zm0-4c-3.31 0-6-.9-6-2V7c0-.11.04-.21.09-.31.03-.06.07-.13.12-.19C.88 7.36 3.21 8 6 8s5.12-.64 5.79-1.5c.05.06.09.13.12.19.05.1.09.21.09.31v2c0 1.1-2.69 2-6 2zm0-4c-3.31 0-6-.9-6-2V3c0-1.1 2.69-2 6-2s6 .9 6 2v2c0 1.1-2.69 2-6 2zm0-5c-2.21 0-4 .45-4 1s1.79 1 4 1 4-.45 4-1-1.79-1-4-1z\"/>"},"desktop-download":{"name":"desktop-download","figma":{"id":"0:196","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["clone","download"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 6h3V0h2v6h3l-4 4-4-4zm11-4h-4v1h4v8H1V3h4V2H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5.34c-.25.61-.86 1.39-2.34 2h8c-1.48-.61-2.09-1.39-2.34-2H15c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1z\"/>"},"device-camera-video":{"name":"device-camera-video","figma":{"id":"0:198","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["watch","view","media","stream"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.2 2.09L10 5.72V3c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V9.28l5.2 3.63c.33.23.8 0 .8-.41v-10c0-.41-.47-.64-.8-.41z\"/>"},"device-camera":{"name":"device-camera","figma":{"id":"0:202","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["photo","picture","image","snapshot"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15 3H7c0-.55-.45-1-1-1H2c-.55 0-1 .45-1 1-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h14c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM6 5H2V4h4v1zm4.5 7C8.56 12 7 10.44 7 8.5S8.56 5 10.5 5 14 6.56 14 8.5 12.44 12 10.5 12zM13 8.5c0 1.38-1.13 2.5-2.5 2.5S8 9.87 8 8.5 9.13 6 10.5 6 13 7.13 13 8.5z\"/>"},"device-desktop":{"name":"device-desktop","figma":{"id":"0:208","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["computer","monitor"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15 2H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5.34c-.25.61-.86 1.39-2.34 2h8c-1.48-.61-2.09-1.39-2.34-2H15c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm0 9H1V3h14v8z\"/>"},"device-mobile":{"name":"device-mobile","figma":{"id":"0:212","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["phone","iphone","cellphone"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 0H1C.45 0 0 .45 0 1v14c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zM5 15.3c-.72 0-1.3-.58-1.3-1.3 0-.72.58-1.3 1.3-1.3.72 0 1.3.58 1.3 1.3 0 .72-.58 1.3-1.3 1.3zM9 12H1V2h8v10z\"/>"},"diff-added":{"name":"diff-added","figma":{"id":"0:217","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["new","addition","plus"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 13H1V2h12v12zM6 9H3V7h3V4h2v3h3v2H8v3H6V9z\"/>"},"diff-ignored":{"name":"diff-ignored","figma":{"id":"0:222","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["slash"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 13H1V2h12v12zm-8.5-2H3v-1.5L9.5 4H11v1.5L4.5 12z\"/>"},"diff-modified":{"name":"diff-modified","figma":{"id":"0:227","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["dot","changed","updated"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 13H1V2h12v12zM4 8c0-1.66 1.34-3 3-3s3 1.34 3 3-1.34 3-3 3-3-1.34-3-3z\"/>"},"diff-removed":{"name":"diff-removed","figma":{"id":"0:232","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["deleted","subtracted","dash"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zm0 13H1V2h12v12zm-2-5H3V7h8v2z\"/>"},"diff-renamed":{"name":"diff-renamed","figma":{"id":"0:237","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["moved","arrow"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 9H3V7h3V4l5 4-5 4V9zm8-7v12c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h12c.55 0 1 .45 1 1zm-1 0H1v12h12V2z\"/>"},"diff":{"name":"diff","figma":{"id":"0:242","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["difference","changes","compare"],"width":13,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 7h2v1H6v2H5V8H3V7h2V5h1v2zm-3 6h5v-1H3v1zM7.5 2L11 5.5V15c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h6.5zM10 6L7 3H1v12h9V6zM8.5 0H3v1h5l4 4v8h1V4.5L8.5 0z\"/>"},"ellipsis":{"name":"ellipsis","figma":{"id":"0:249","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["dot","read","more","hidden","expand"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 5H1c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zM4 9H2V7h2v2zm3 0H5V7h2v2zm3 0H8V7h2v2z\"/>"},"eye":{"name":"eye","figma":{"id":"0:255","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["look","watch","see"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z\"/>"},"file-binary":{"name":"file-binary","figma":{"id":"0:260","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["image","video","word","powerpoint","excel"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 12h1v1H2v-1h1v-2H2V9h2v3zm8-7.5V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h7.5L12 4.5zM11 5L8 2H1v12h10V5zM8 4H6v1h1v2H6v1h3V7H8V4zM2 4h3v4H2V4zm1 3h1V5H3v2zm3 2h3v4H6V9zm1 3h1v-2H7v2z\"/>"},"file-code":{"name":"file-code","figma":{"id":"0:270","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["text","javascript","html","css","php","ruby","coffeescript","sass","scss"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.5 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V4.5L8.5 1zM11 14H1V2h7l3 3v9zM5 6.98L3.5 8.5 5 10l-.5 1L2 8.5 4.5 6l.5.98zM7.5 6L10 8.5 7.5 11l-.5-.98L8.5 8.5 7 7l.5-1z\"/>"},"file-directory":{"name":"file-directory","figma":{"id":"0:276","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["folder"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 4H7V3c0-.66-.31-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zM6 4H1V3h5v1z\"/>"},"file-media":{"name":"file-media","figma":{"id":"0:280","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["image","video","audio"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 5h2v2H6V5zm6-.5V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h7.5L12 4.5zM11 5L8 2H1v11l3-5 2 4 2-2 3 3V5z\"/>"},"file-pdf":{"name":"file-pdf","figma":{"id":"0:285","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["adobe"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.5 1H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V4.5L8.5 1zM1 2h4a.68.68 0 0 0-.31.2 1.08 1.08 0 0 0-.23.47 4.22 4.22 0 0 0-.09 1.47c.06.609.173 1.211.34 1.8A21.78 21.78 0 0 1 3.6 8.6c-.5 1-.8 1.66-.91 1.84a7.156 7.156 0 0 0-.69.3c-.362.165-.699.38-1 .64V2zm4.42 4.8a5.65 5.65 0 0 0 1.17 2.09c.275.237.595.417.94.53-.64.09-1.23.2-1.81.33-.618.15-1.223.347-1.81.59s.22-.44.61-1.25c.365-.74.67-1.51.91-2.3l-.01.01zM11 14H1.5a.743.743 0 0 1-.17 0 2.12 2.12 0 0 0 .73-.44 10.14 10.14 0 0 0 1.78-2.38c.31-.13.58-.23.81-.31l.42-.14c.45-.13.94-.23 1.44-.33s1-.16 1.48-.2c.447.216.912.394 1.39.53.403.11.814.188 1.23.23h.38V14H11zm0-4.86a3.743 3.743 0 0 0-.64-.28 4.221 4.221 0 0 0-.75-.11c-.411.003-.822.03-1.23.08a3 3 0 0 1-1-.64 6.07 6.07 0 0 1-1.29-2.33c.111-.661.178-1.33.2-2 .02-.25.02-.5 0-.75a1.05 1.05 0 0 0-.2-.88.82.82 0 0 0-.61-.23H8l3 3v4.14z\"/>"},"file-submodule":{"name":"file-submodule","figma":{"id":"0:292","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["folder"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 7H4v7h9c.55 0 1-.45 1-1V8h-4V7zM9 9H5V8h4v1zm4-5H7V3c0-.66-.31-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h2V7c0-.55.45-1 1-1h6c.55 0 1 .45 1 1h3V5c0-.55-.45-1-1-1zM6 4H1V3h5v1z\"/>"},"file-symlink-directory":{"name":"file-symlink-directory","figma":{"id":"0:298","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["folder","subfolder","link","alias"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 4H7V3c0-.66-.31-1-1-1H1c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zM1 3h5v1H1V3zm6 9v-2c-.98-.02-1.84.22-2.55.7-.71.48-1.19 1.25-1.45 2.3.02-1.64.39-2.88 1.13-3.73C4.86 8.43 5.82 8 7.01 8V6l4 3-4 3H7z\"/>"},"file-symlink-file":{"name":"file-symlink-file","figma":{"id":"0:303","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["link","alias"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.5 1H1c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V4.5L8.5 1zM11 14H1V2h7l3 3v9zM6 4.5l4 3-4 3v-2c-.98-.02-1.84.22-2.55.7-.71.48-1.19 1.25-1.45 2.3.02-1.64.39-2.88 1.13-3.73.73-.84 1.69-1.27 2.88-1.27v-2H6z\"/>"},"file":{"name":"file","figma":{"id":"0:308","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["file","text","words"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 5H2V4h4v1zM2 8h7V7H2v1zm0 2h7V9H2v1zm0 2h7v-1H2v1zm10-7.5V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h7.5L12 4.5zM11 5L8 2H1v12h10V5z\"/>"},"file-zip":{"name":"file-zip","figma":{"id":"0:316","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["compress","archive"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8.5 1H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V4.5L8.5 1zM11 14H1V2h3v1h1V2h3l3 3v9zM5 4V3h1v1H5zM4 4h1v1H4V4zm1 2V5h1v1H5zM4 6h1v1H4V6zm1 2V7h1v1H5zM4 9.28A2 2 0 0 0 3 11v1h4v-1a2 2 0 0 0-2-2V8H4v1.28zM6 10v1H4v-1h2z\"/>"},"flame":{"name":"flame","figma":{"id":"0:325","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["fire","hot","burn","trending"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z\"/>"},"fold":{"name":"fold","figma":{"id":"0:329","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["unfold","hide","collapse"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 9l3 3H8v3H6v-3H4l3-3zm3-6H8V0H6v3H4l3 3 3-3zm4 2c0-.55-.45-1-1-1h-2.5l-1 1h3l-2 2h-7l-2-2h3l-1-1H1c-.55 0-1 .45-1 1l2.5 2.5L0 10c0 .55.45 1 1 1h2.5l1-1h-3l2-2h7l2 2h-3l1 1H13c.55 0 1-.45 1-1l-2.5-2.5L14 5z\"/>"},"gear":{"name":"gear","figma":{"id":"0:334","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["settings"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 8.77v-1.6l-1.94-.64-.45-1.09.88-1.84-1.13-1.13-1.81.91-1.09-.45-.69-1.92h-1.6l-.63 1.94-1.11.45-1.84-.88-1.13 1.13.91 1.81-.45 1.09L0 7.23v1.59l1.94.64.45 1.09-.88 1.84 1.13 1.13 1.81-.91 1.09.45.69 1.92h1.59l.63-1.94 1.11-.45 1.84.88 1.13-1.13-.92-1.81.47-1.09L14 8.75v.02zM7 11c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z\"/>"},"gift":{"name":"gift","figma":{"id":"0:338","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["package","present","skill","craft","freebie"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 4h-1.38c.19-.33.33-.67.36-.91.06-.67-.11-1.22-.52-1.61C11.1 1.1 10.65 1 10.1 1h-.11c-.53.02-1.11.25-1.53.58-.42.33-.73.72-.97 1.2-.23-.48-.55-.88-.97-1.2-.42-.32-1-.58-1.53-.58h-.03c-.56 0-1.06.09-1.44.48-.41.39-.58.94-.52 1.61.03.23.17.58.36.91H1.98c-.55 0-1 .45-1 1v3h1v5c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8h1V5c0-.55-.45-1-1-1H13zm-4.78-.88c.17-.36.42-.67.75-.92.3-.23.72-.39 1.05-.41h.09c.45 0 .66.11.8.25s.33.39.3.95c-.05.19-.25.61-.5 1h-2.9l.41-.88v.01zM4.09 2.04c.13-.13.31-.25.91-.25.31 0 .72.17 1.03.41.33.25.58.55.75.92L7.2 4H4.3c-.25-.39-.45-.81-.5-1-.03-.56.16-.81.3-.95l-.01-.01zM7 12.99H3V8h4v5-.01zm0-6H2V5h5v2-.01zm5 6H8V8h4v5-.01zm1-6H8V5h5v2-.01z\"/>"},"gist-secret":{"name":"gist-secret","figma":{"id":"0:347","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["gist","secret","private"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 10.5L9 14H5l1-3.5L5.25 9h3.5L8 10.5zM10 6H4L2 7h10l-2-1zM9 2L7 3 5 2 4 5h6L9 2zm4.03 7.75L10 9l1 2-2 3h3.22c.45 0 .86-.31.97-.75l.56-2.28c.14-.53-.19-1.08-.72-1.22zM4 9l-3.03.75c-.53.14-.86.69-.72 1.22l.56 2.28c.11.44.52.75.97.75H5l-2-3 1-2z\"/>"},"gist":{"name":"gist","figma":{"id":"0:354","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["gist","github"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.5 5L10 7.5 7.5 10l-.75-.75L8.5 7.5 6.75 5.75 7.5 5zm-3 0L2 7.5 4.5 10l.75-.75L3.5 7.5l1.75-1.75L4.5 5zM0 13V2c0-.55.45-1 1-1h10c.55 0 1 .45 1 1v11c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1zm1 0h10V2H1v11z\"/>"},"git-branch":{"name":"git-branch","figma":{"id":"0:360","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["fork","branch","git","duplicate"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 5c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v.3c-.02.52-.23.98-.63 1.38-.4.4-.86.61-1.38.63-.83.02-1.48.16-2 .45V4.72a1.993 1.993 0 0 0-1-3.72C.88 1 0 1.89 0 3a2 2 0 0 0 1 1.72v6.56c-.59.35-1 .99-1 1.72 0 1.11.89 2 2 2 1.11 0 2-.89 2-2 0-.53-.2-1-.53-1.36.09-.06.48-.41.59-.47.25-.11.56-.17.94-.17 1.05-.05 1.95-.45 2.75-1.25S8.95 7.77 9 6.73h-.02C9.59 6.37 10 5.73 10 5zM2 1.8c.66 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2C1.35 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2zm0 12.41c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm6-8c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"git-commit":{"name":"git-commit","figma":{"id":"0:366","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["save"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10.86 7c-.45-1.72-2-3-3.86-3-1.86 0-3.41 1.28-3.86 3H0v2h3.14c.45 1.72 2 3 3.86 3 1.86 0 3.41-1.28 3.86-3H14V7h-3.14zM7 10.2c-1.22 0-2.2-.98-2.2-2.2 0-1.22.98-2.2 2.2-2.2 1.22 0 2.2.98 2.2 2.2 0 1.22-.98 2.2-2.2 2.2z\"/>"},"git-compare":{"name":"git-compare","figma":{"id":"0:370","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["difference","changes"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M5 12H4c-.27-.02-.48-.11-.69-.31-.21-.2-.3-.42-.31-.69V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V11c.03.78.34 1.47.94 2.06.6.59 1.28.91 2.06.94h1v2l3-3-3-3v2zM2 1.8c.66 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2C1.35 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2zm11 9.48V5c-.03-.78-.34-1.47-.94-2.06-.6-.59-1.28-.91-2.06-.94H9V0L6 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 12 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"git-merge":{"name":"git-merge","figma":{"id":"0:376","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["join"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 7c-.73 0-1.38.41-1.73 1.02V8C7.22 7.98 6 7.64 5.14 6.98c-.75-.58-1.5-1.61-1.89-2.44A1.993 1.993 0 0 0 2 .99C.89.99 0 1.89 0 3a2 2 0 0 0 1 1.72v6.56c-.59.35-1 .99-1 1.72 0 1.11.89 2 2 2a1.993 1.993 0 0 0 1-3.72V7.67c.67.7 1.44 1.27 2.3 1.69.86.42 2.03.63 2.97.64v-.02c.36.61 1 1.02 1.73 1.02 1.11 0 2-.89 2-2 0-1.11-.89-2-2-2zm-6.8 6c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm8 6c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"git-pull-request":{"name":"git-pull-request","figma":{"id":"0:382","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["review"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"globe":{"name":"globe","figma":{"id":"0:389","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["world","earth","planet"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 1C3.14 1 0 4.14 0 8s3.14 7 7 7c.48 0 .94-.05 1.38-.14-.17-.08-.2-.73-.02-1.09.19-.41.81-1.45.2-1.8-.61-.35-.44-.5-.81-.91-.37-.41-.22-.47-.25-.58-.08-.34.36-.89.39-.94.02-.06.02-.27 0-.33 0-.08-.27-.22-.34-.23-.06 0-.11.11-.2.13-.09.02-.5-.25-.59-.33-.09-.08-.14-.23-.27-.34-.13-.13-.14-.03-.33-.11s-.8-.31-1.28-.48c-.48-.19-.52-.47-.52-.66-.02-.2-.3-.47-.42-.67-.14-.2-.16-.47-.2-.41-.04.06.25.78.2.81-.05.02-.16-.2-.3-.38-.14-.19.14-.09-.3-.95s.14-1.3.17-1.75c.03-.45.38.17.19-.13-.19-.3 0-.89-.14-1.11-.13-.22-.88.25-.88.25.02-.22.69-.58 1.16-.92.47-.34.78-.06 1.16.05.39.13.41.09.28-.05-.13-.13.06-.17.36-.13.28.05.38.41.83.36.47-.03.05.09.11.22s-.06.11-.38.3c-.3.2.02.22.55.61s.38-.25.31-.55c-.07-.3.39-.06.39-.06.33.22.27.02.5.08.23.06.91.64.91.64-.83.44-.31.48-.17.59.14.11-.28.3-.28.3-.17-.17-.19.02-.3.08-.11.06-.02.22-.02.22-.56.09-.44.69-.42.83 0 .14-.38.36-.47.58-.09.2.25.64.06.66-.19.03-.34-.66-1.31-.41-.3.08-.94.41-.59 1.08.36.69.92-.19 1.11-.09.19.1-.06.53-.02.55.04.02.53.02.56.61.03.59.77.53.92.55.17 0 .7-.44.77-.45.06-.03.38-.28 1.03.09.66.36.98.31 1.2.47.22.16.08.47.28.58.2.11 1.06-.03 1.28.31.22.34-.88 2.09-1.22 2.28-.34.19-.48.64-.84.92s-.81.64-1.27.91c-.41.23-.47.66-.66.8 3.14-.7 5.48-3.5 5.48-6.84 0-3.86-3.14-7-7-7L7 1zm1.64 6.56c-.09.03-.28.22-.78-.08-.48-.3-.81-.23-.86-.28 0 0-.05-.11.17-.14.44-.05.98.41 1.11.41.13 0 .19-.13.41-.05.22.08.05.13-.05.14zM6.34 1.7c-.05-.03.03-.08.09-.14.03-.03.02-.11.05-.14.11-.11.61-.25.52.03-.11.27-.58.3-.66.25zm1.23.89c-.19-.02-.58-.05-.52-.14.3-.28-.09-.38-.34-.38-.25-.02-.34-.16-.22-.19.12-.03.61.02.7.08.08.06.52.25.55.38.02.13 0 .25-.17.25zm1.47-.05c-.14.09-.83-.41-.95-.52-.56-.48-.89-.31-1-.41-.11-.1-.08-.19.11-.34.19-.15.69.06 1 .09.3.03.66.27.66.55.02.25.33.5.19.63h-.01z\"/>"},"graph":{"name":"graph","figma":{"id":"0:396","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["trend","stats","statistics"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z\"/>"},"heart":{"name":"heart","figma":{"id":"0:400","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["love","beat"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M9 2c-.97 0-1.69.42-2.2 1-.51.58-.78.92-.8 1-.02-.08-.28-.42-.8-1-.52-.58-1.17-1-2.2-1-1.632.086-2.954 1.333-3 3 0 .52.09 1.52.67 2.67C1.25 8.82 3.01 10.61 6 13c2.98-2.39 4.77-4.17 5.34-5.33C11.91 6.51 12 5.5 12 5c-.047-1.69-1.342-2.913-3-3z\"/>"},"history":{"name":"history","figma":{"id":"0:404","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["time","past","revert","back"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 13H6V6h5v2H8v5zM7 1C4.81 1 2.87 2.02 1.59 3.59L0 2v4h4L2.5 4.5C3.55 3.17 5.17 2.3 7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-.34.03-.67.09-1H.08C.03 7.33 0 7.66 0 8c0 3.86 3.14 7 7 7s7-3.14 7-7-3.14-7-7-7z\"/>"},"home":{"name":"home","figma":{"id":"0:408","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["welcome","index","house","building"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 9l-3-3V2h-2v2L8 1 0 9h2l1 5c0 .55.45 1 1 1h8c.55 0 1-.45 1-1l1-5h2zm-4 5H9v-4H7v4H4L2.81 7.69 8 2.5l5.19 5.19L12 14z\"/>"},"horizontal-rule":{"name":"horizontal-rule","figma":{"id":"0:412","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["hr"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M1 7h2v2h1V3H3v3H1V3H0v6h1V7zm9 2V7H9v2h1zm0-3V4H9v2h1zM7 6V4h2V3H6v6h1V7h2V6H7zm-7 7h10v-2H0v2z\"/>"},"hubot":{"name":"hubot","figma":{"id":"0:419","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["robot","bot"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 6c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1H3zm8 1.75L9.75 9h-1.5L7 7.75 5.75 9h-1.5L3 7.75V7h.75L5 8.25 6.25 7h1.5L9 8.25 10.25 7H11v.75zM5 11h4v1H5v-1zm2-9C3.14 2 0 4.91 0 8.5V13c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V8.5C14 4.91 10.86 2 7 2zm6 11H1V8.5c0-3.09 2.64-5.59 6-5.59s6 2.5 6 5.59V13z\"/>"},"inbox":{"name":"inbox","figma":{"id":"0:426","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["mail","todo","new","messages"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 9l-1.13-7.14c-.08-.48-.5-.86-1-.86H2.13c-.5 0-.92.38-1 .86L0 9v5c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V9zm-3.28.55l-.44.89c-.17.34-.52.56-.91.56H4.61c-.38 0-.72-.22-.89-.55l-.44-.91c-.17-.33-.52-.55-.89-.55H1l1-7h10l1 7h-1.38c-.39 0-.73.22-.91.55l.01.01z\"/>"},"info":{"name":"info","figma":{"id":"0:430","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["help"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z\"/>"},"issue-closed":{"name":"issue-closed","figma":{"id":"0:436","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["done","complete"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 10h2v2H7v-2zm2-6H7v5h2V4zm1.5 1.5l-1 1L12 9l4-4.5-1-1L12 7l-1.5-1.5zM8 13.7A5.71 5.71 0 0 1 2.3 8c0-3.14 2.56-5.7 5.7-5.7 1.83 0 3.45.88 4.5 2.2l.92-.92A6.947 6.947 0 0 0 8 1C4.14 1 1 4.14 1 8s3.14 7 7 7 7-3.14 7-7l-1.52 1.52c-.66 2.41-2.86 4.19-5.48 4.19v-.01z\"/>"},"issue-opened":{"name":"issue-opened","figma":{"id":"0:442","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["new"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z\"/>"},"issue-reopened":{"name":"issue-reopened","figma":{"id":"0:448","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["regression"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 9H6V4h2v5zm-2 3h2v-2H6v2zm6.33-2H10l1.5 1.5c-1.05 1.33-2.67 2.2-4.5 2.2A5.71 5.71 0 0 1 1.3 8c0-.34.03-.67.09-1H.08C.03 7.33 0 7.66 0 8c0 3.86 3.14 7 7 7 2.19 0 4.13-1.02 5.41-2.59L14 14v-4h-1.67zM1.67 6H4L2.5 4.5C3.55 3.17 5.17 2.3 7 2.3c3.14 0 5.7 2.56 5.7 5.7 0 .34-.03.67-.09 1h1.31c.05-.33.08-.66.08-1 0-3.86-3.14-7-7-7-2.19 0-4.13 1.02-5.41 2.59L0 2v4h1.67z\"/>"},"italic":{"name":"italic","figma":{"id":"0:454","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["font","italic","style"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2.81 5h1.98L3 14H1l1.81-9zm.36-2.7c0-.7.58-1.3 1.33-1.3.56 0 1.13.38 1.13 1.03 0 .75-.59 1.3-1.33 1.3-.58 0-1.13-.38-1.13-1.03z\"/>"},"jersey":{"name":"jersey","figma":{"id":"0:458","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["team","game","basketball"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4.5 6l-.5.5v5l.5.5h2l.5-.5v-5L6.5 6h-2zM6 11H5V7h1v4zm6.27-7.25C12.05 2.37 11.96 1.12 12 0H9.02c0 .27-.13.48-.39.69-.25.2-.63.3-1.13.3-.5 0-.88-.09-1.13-.3-.23-.2-.36-.42-.36-.69H3c.05 1.13-.03 2.38-.25 3.75C2.55 5.13 1.95 5.88 1 6v9c.02.27.11.48.31.69.2.21.42.3.69.31h11c.27-.02.48-.11.69-.31.21-.2.3-.42.31-.69V6c-.95-.13-1.53-.88-1.75-2.25h.02zM13 15H2V7c.89-.5 1.48-1.25 1.72-2.25S4.03 2.5 4 1h1c-.02.78.16 1.47.52 2.06.36.58 1.02.89 2 .94.98-.02 1.64-.33 2-.94.36-.59.5-1.28.48-2.06h1c.02 1.42.13 2.55.33 3.38.2.81.69 2 1.67 2.63v8V15zM8.5 6l-.5.5v5l.5.5h2l.5-.5v-5l-.5-.5h-2zm1.5 5H9V7h1v4z\"/>"},"keyboard":{"name":"keyboard","figma":{"id":"0:466","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["type","keys","write","shortcuts"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 5H9V4h1v1zM3 6H2v1h1V6zm5-2H7v1h1V4zM4 4H2v1h2V4zm8 7h2v-1h-2v1zM8 7h1V6H8v1zm-4 3H2v1h2v-1zm8-6h-1v1h1V4zm2 0h-1v1h1V4zm-2 5h2V6h-2v3zm4-6v9c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h14c.55 0 1 .45 1 1zm-1 0H1v9h14V3zM6 7h1V6H6v1zm0-3H5v1h1V4zM4 7h1V6H4v1zm1 4h6v-1H5v1zm5-4h1V6h-1v1zM3 8H2v1h1V8zm5 0v1h1V8H8zM6 8v1h1V8H6zM5 8H4v1h1V8zm5 1h1V8h-1v1z\"/>"},"law":{"name":"law","figma":{"id":"0:490","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["legal","bill"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 4c-.83 0-1.5-.67-1.5-1.5S6.17 1 7 1s1.5.67 1.5 1.5S7.83 4 7 4zm7 6c0 1.11-.89 2-2 2h-1c-1.11 0-2-.89-2-2l2-4h-1c-.55 0-1-.45-1-1H8v8c.42 0 1 .45 1 1h1c.42 0 1 .45 1 1H3c0-.55.58-1 1-1h1c0-.55.58-1 1-1h.03L6 5H5c0 .55-.45 1-1 1H3l2 4c0 1.11-.89 2-2 2H2c-1.11 0-2-.89-2-2l2-4H1V5h3c0-.55.45-1 1-1h4c.55 0 1 .45 1 1h3v1h-1l2 4zM2.5 7L1 10h3L2.5 7zM13 10l-1.5-3-1.5 3h3z\"/>"},"link":{"name":"link","figma":{"id":"0:496","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["connect","hyperlink"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"/>"},"list-ordered":{"name":"list-ordered","figma":{"id":"0:500","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["numbers","tasks","todo","items"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 12.99c0 .589 0 .998-.59.998H4.597c-.59 0-.59-.41-.59-.999 0-.59 0-.999.59-.999H11.4c.59 0 .59.41.59 1H12zM4.596 3.996H11.4c.59 0 .59-.41.59-1 0-.589 0-.999-.59-.999H4.596c-.59 0-.59.41-.59 1 0 .589 0 .999.59.999zM11.4 6.994H4.596c-.59 0-.59.41-.59 1 0 .589 0 .999.59.999H11.4c.59 0 .59-.41.59-1 0-.59 0-.999-.59-.999zM2.008 1h-.72C.99 1.19.71 1.25.26 1.34V2h.75v2.138H.17v.859h2.837v-.86h-.999V1zm.25 8.123c-.17 0-.45.03-.66.06.53-.56 1.14-1.249 1.14-1.888-.02-.78-.56-1.299-1.36-1.299-.589 0-.968.2-1.378.64l.58.579c.19-.19.38-.38.639-.38.28 0 .48.16.48.52 0 .53-.77 1.199-1.699 2.058v.58h2.998l-.09-.88h-.66l.01.01zm-.08 3.777v-.03c.44-.19.64-.47.64-.859 0-.7-.56-1.11-1.44-1.11-.479 0-.888.19-1.278.52l.55.64c.25-.2.44-.31.689-.31.27 0 .42.13.42.36 0 .27-.2.44-.86.44v.749c.83 0 .98.17.98.47 0 .25-.23.38-.58.38-.28 0-.56-.14-.81-.38l-.479.659c.3.36.77.56 1.409.56.83 0 1.529-.41 1.529-1.16 0-.5-.31-.809-.77-.939v.01z\"/>"},"list-unordered":{"name":"list-unordered","figma":{"id":"0:508","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["bullet","point","tasks","todo","items"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2 13c0 .59 0 1-.59 1H.59C0 14 0 13.59 0 13c0-.59 0-1 .59-1h.81c.59 0 .59.41.59 1H2zm2.59-9h6.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1H4.59C4 2 4 2.41 4 3c0 .59 0 1 .59 1zM1.41 7H.59C0 7 0 7.41 0 8c0 .59 0 1 .59 1h.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1h.01zm0-5H.59C0 2 0 2.41 0 3c0 .59 0 1 .59 1h.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1h.01zm10 5H4.59C4 7 4 7.41 4 8c0 .59 0 1 .59 1h6.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1h.01zm0 5H4.59C4 12 4 12.41 4 13c0 .59 0 1 .59 1h6.81c.59 0 .59-.41.59-1 0-.59 0-1-.59-1h.01z\"/>"},"location":{"name":"location","figma":{"id":"0:516","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["here","marker"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 0C2.69 0 0 2.5 0 5.5 0 10.02 6 16 6 16s6-5.98 6-10.5C12 2.5 9.31 0 6 0zm0 14.55C4.14 12.52 1 8.44 1 5.5 1 3.02 3.25 1 6 1c1.34 0 2.61.48 3.56 1.36.92.86 1.44 1.97 1.44 3.14 0 2.94-3.14 7.02-5 9.05zM8 5.5c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z\"/>"},"lock":{"name":"lock","figma":{"id":"0:521","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["secure","safe","protected"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 13H3v-1h1v1zm8-6v7c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V7c0-.55.45-1 1-1h1V4c0-2.2 1.8-4 4-4s4 1.8 4 4v2h1c.55 0 1 .45 1 1zM3.8 6h4.41V4c0-1.22-.98-2.2-2.2-2.2-1.22 0-2.2.98-2.2 2.2v2H3.8zM11 7H2v7h9V7zM4 8H3v1h1V8zm0 2H3v1h1v-1z\"/>"},"logo-gist":{"name":"logo-gist","figma":{"id":"0:529","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["brand","github","logo"],"width":25,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4.7 8.73h2.45v4.02c-.55.27-1.64.34-2.53.34-2.56 0-3.47-2.2-3.47-5.05 0-2.85.91-5.06 3.48-5.06 1.28 0 2.06.23 3.28.73V2.66C7.27 2.33 6.25 2 4.63 2 1.13 2 0 4.69 0 8.03c0 3.34 1.11 6.03 4.63 6.03 1.64 0 2.81-.27 3.59-.64V7.73H4.7v1zm6.39 3.72V6.06h-1.05v6.28c0 1.25.58 1.72 1.72 1.72v-.89c-.48 0-.67-.16-.67-.7v-.02zm.25-8.72c0-.44-.33-.78-.78-.78s-.77.34-.77.78.33.78.77.78.78-.34.78-.78zm4.34 5.69c-1.5-.13-1.78-.48-1.78-1.17 0-.77.33-1.34 1.88-1.34 1.05 0 1.66.16 2.27.36v-.94c-.69-.3-1.52-.39-2.25-.39-2.2 0-2.92 1.2-2.92 2.31 0 1.08.47 1.88 2.73 2.08 1.55.13 1.77.63 1.77 1.34 0 .73-.44 1.42-2.06 1.42-1.11 0-1.86-.19-2.33-.36v.94c.5.2 1.58.39 2.33.39 2.38 0 3.14-1.2 3.14-2.41 0-1.28-.53-2.03-2.75-2.23h-.03zm8.58-2.47v-.86h-2.42v-2.5l-1.08.31v2.11l-1.56.44v.48h1.56v5c0 1.53 1.19 2.13 2.5 2.13.19 0 .52-.02.69-.05v-.89c-.19.03-.41.03-.61.03-.97 0-1.5-.39-1.5-1.34V6.94h2.42v.02-.01z\"/>"},"logo-github":{"name":"logo-github","figma":{"id":"0:536","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["brand","github","logo"],"width":45,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M18.53 12.03h-.02c.009 0 .015.01.024.011h.006l-.01-.01zm.004.011c-.093.001-.327.05-.574.05-.78 0-1.05-.36-1.05-.83V8.13h1.59c.09 0 .16-.08.16-.19v-1.7c0-.09-.08-.17-.16-.17h-1.59V3.96c0-.08-.05-.13-.14-.13h-2.16c-.09 0-.14.05-.14.13v2.17s-1.09.27-1.16.28c-.08.02-.13.09-.13.17v1.36c0 .11.08.19.17.19h1.11v3.28c0 2.44 1.7 2.69 2.86 2.69.53 0 1.17-.17 1.27-.22.06-.02.09-.09.09-.16v-1.5a.177.177 0 0 0-.146-.18zm23.696-2.2c0-1.81-.73-2.05-1.5-1.97-.6.04-1.08.34-1.08.34v3.52s.49.34 1.22.36c1.03.03 1.36-.34 1.36-2.25zm2.43-.16c0 3.43-1.11 4.41-3.05 4.41-1.64 0-2.52-.83-2.52-.83s-.04.46-.09.52c-.03.06-.08.08-.14.08h-1.48c-.1 0-.19-.08-.19-.17l.02-11.11c0-.09.08-.17.17-.17h2.13c.09 0 .17.08.17.17v3.77s.82-.53 2.02-.53l-.01-.02c1.2 0 2.97.45 2.97 3.88zm-8.72-3.61h-2.1c-.11 0-.17.08-.17.19v5.44s-.55.39-1.3.39-.97-.34-.97-1.09V6.25c0-.09-.08-.17-.17-.17h-2.14c-.09 0-.17.08-.17.17v5.11c0 2.2 1.23 2.75 2.92 2.75 1.39 0 2.52-.77 2.52-.77s.05.39.08.45c.02.05.09.09.16.09h1.34c.11 0 .17-.08.17-.17l.02-7.47c0-.09-.08-.17-.19-.17zm-23.7-.01h-2.13c-.09 0-.17.09-.17.2v7.34c0 .2.13.27.3.27h1.92c.2 0 .25-.09.25-.27V6.23c0-.09-.08-.17-.17-.17zm-1.05-3.38c-.77 0-1.38.61-1.38 1.38 0 .77.61 1.38 1.38 1.38.75 0 1.36-.61 1.36-1.38 0-.77-.61-1.38-1.36-1.38zm16.49-.25h-2.11c-.09 0-.17.08-.17.17v4.09h-3.31V2.6c0-.09-.08-.17-.17-.17h-2.13c-.09 0-.17.08-.17.17v11.11c0 .09.09.17.17.17h2.13c.09 0 .17-.08.17-.17V8.96h3.31l-.02 4.75c0 .09.08.17.17.17h2.13c.09 0 .17-.08.17-.17V2.6c0-.09-.08-.17-.17-.17zM8.81 7.35v5.74c0 .04-.01.11-.06.13 0 0-1.25.89-3.31.89-2.49 0-5.44-.78-5.44-5.92S2.58 1.99 5.1 2c2.18 0 3.06.49 3.2.58.04.05.06.09.06.14L7.94 4.5c0 .09-.09.2-.2.17-.36-.11-.9-.33-2.17-.33-1.47 0-3.05.42-3.05 3.73s1.5 3.7 2.58 3.7c.92 0 1.25-.11 1.25-.11v-2.3H4.88c-.11 0-.19-.08-.19-.17V7.35c0-.09.08-.17.19-.17h3.74c.11 0 .19.08.19.17z\"/>"},"mail-read":{"name":"mail-read","figma":{"id":"0:547","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["email","open"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 5H4V4h2v1zm3 1H4v1h5V6zm5-.48V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V5.52c0-.33.16-.63.42-.81L2 3.58V3c0-.55.45-1 1-1h1.2L7 0l2.8 2H11c.55 0 1 .45 1 1v.58l1.58 1.13c.27.19.42.48.42.81zM3 7.5L7 10l4-2.5V3H3v4.5zm-2 6l4.5-3-4.5-3v6zm11 .5l-5-3-5 3h10zm1-6.5l-4.5 3 4.5 3v-6z\"/>"},"reply":{"name":"reply","figma":{"id":"0:554","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["reply all","back"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 3.5c3.92.44 8 3.125 8 10-2.312-5.062-4.75-6-8-6V11L.5 5.5 6 0v3.5z\"/>"},"mail":{"name":"mail","figma":{"id":"0:558","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["email","unread"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 4v8c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1zm13 0L7 9 1 4h12zM1 5.5l4 3-4 3v-6zM2 12l3.5-3L7 10.5 8.5 9l3.5 3H2zm11-.5l-4-3 4-3v6z\"/>"},"mark-github":{"name":"mark-github","figma":{"id":"0:563","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["octocat","brand","github","logo"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z\"/>"},"markdown":{"name":"markdown","figma":{"id":"0:567","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["markup","style"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14.85 3H1.15C.52 3 0 3.52 0 4.15v7.69C0 12.48.52 13 1.15 13h13.69c.64 0 1.15-.52 1.15-1.15v-7.7C16 3.52 15.48 3 14.85 3zM9 11H7V8L5.5 9.92 4 8v3H2V5h2l1.5 2L7 5h2v6zm2.99.5L9.5 8H11V5h2v3h1.5l-2.51 3.5z\"/>"},"megaphone":{"name":"megaphone","figma":{"id":"0:572","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["bullhorn","loud","shout","broadcast"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 1c-.17 0-.36.05-.52.14C8.04 2.02 4.5 4.58 3 5c-1.38 0-3 .67-3 2.5S1.63 10 3 10c.3.08.64.23 1 .41V15h2v-3.45c1.34.86 2.69 1.83 3.48 2.31.16.09.34.14.52.14.52 0 1-.42 1-1V2c0-.58-.48-1-1-1zm0 12c-.38-.23-.89-.58-1.5-1-.16-.11-.33-.22-.5-.34V3.31c.16-.11.31-.2.47-.31.61-.41 1.16-.77 1.53-1v11zm2-6h4v1h-4V7zm0 2l4 2v1l-4-2V9zm4-6v1l-4 2V5l4-2z\"/>"},"mention":{"name":"mention","figma":{"id":"0:579","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["at","ping"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6.58 15c1.25 0 2.52-.31 3.56-.94l-.42-.94c-.84.52-1.89.83-3.03.83-3.23 0-5.64-2.08-5.64-5.72 0-4.37 3.23-7.18 6.58-7.18 3.45 0 5.22 2.19 5.22 5.2 0 2.39-1.34 3.86-2.5 3.86-1.05 0-1.36-.73-1.05-2.19l.73-3.75H8.98l-.11.72c-.41-.63-.94-.83-1.56-.83-2.19 0-3.66 2.39-3.66 4.38 0 1.67.94 2.61 2.3 2.61.84 0 1.67-.53 2.3-1.25.11.94.94 1.45 1.98 1.45 1.67 0 3.77-1.67 3.77-5C14 2.61 11.59 0 7.83 0 3.66 0 0 3.33 0 8.33 0 12.71 2.92 15 6.58 15zm-.31-5c-.73 0-1.36-.52-1.36-1.67 0-1.45.94-3.22 2.41-3.22.52 0 .84.2 1.25.83l-.52 3.02c-.63.73-1.25 1.05-1.78 1.05V10z\"/>"},"milestone":{"name":"milestone","figma":{"id":"0:583","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["marker"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 2H6V0h2v2zm4 5H2c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h10l2 2-2 2zM8 4H6v2h2V4zM6 16h2V8H6v8z\"/>"},"mirror":{"name":"mirror","figma":{"id":"0:589","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["reflect"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.5 4.7L8.5 0l-7 4.7c-.3.19-.5.45-.5.8V16l7.5-4 7.5 4V5.5c0-.34-.2-.61-.5-.8zm-.5 9.8l-6-3.25V10H8v1.25L2 14.5v-9l6-4V6h1V1.5l6 4v9zM6 7h5V5l3 3-3 3V9H6v2L3 8l3-3v2z\"/>"},"mortar-board":{"name":"mortar-board","figma":{"id":"0:594","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["education","learn","teach"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.83 9.19L4 8c-4-8 0 1.5 0 2.5S5.8 12 8 12s4-.5 4-1.5V8L8.17 9.19a.73.73 0 0 1-.36 0h.02zm.28-6.39a.34.34 0 0 0-.2 0L.27 5.18a.35.35 0 0 0 0 .67L2 6.4v1.77c-.3.17-.5.5-.5.86 0 .19.05.36.14.5-.08.14-.14.31-.14.5v2.58c0 .55 2 .55 2 0v-2.58c0-.19-.05-.36-.14-.5.08-.14.14-.31.14-.5 0-.38-.2-.69-.5-.86V6.72l4.89 1.53c.06.02.14.02.2 0l7.64-2.38a.35.35 0 0 0 0-.67L8.1 2.81l.01-.01zM8.02 6c-.55 0-1-.22-1-.5s.45-.5 1-.5 1 .22 1 .5-.45.5-1 .5z\"/>"},"mute":{"name":"mute","figma":{"id":"0:599","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["quiet","sound","audio","turn","off"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 2.81v10.38c0 .67-.81 1-1.28.53L3 10H1c-.55 0-1-.45-1-1V7c0-.55.45-1 1-1h2l3.72-3.72C7.19 1.81 8 2.14 8 2.81zm7.53 3.22l-1.06-1.06-1.97 1.97-1.97-1.97-1.06 1.06L11.44 8 9.47 9.97l1.06 1.06 1.97-1.97 1.97 1.97 1.06-1.06L13.56 8l1.97-1.97z\"/>"},"no-newline":{"name":"no-newline","figma":{"id":"0:603","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["return"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 5v3c0 .55-.45 1-1 1h-3v2L9 8l3-3v2h2V5h2zM8 8c0 2.2-1.8 4-4 4s-4-1.8-4-4 1.8-4 4-4 4 1.8 4 4zM1.5 9.66L5.66 5.5C5.18 5.19 4.61 5 4 5 2.34 5 1 6.34 1 8c0 .61.19 1.17.5 1.66zM7 8c0-.61-.19-1.17-.5-1.66L2.34 10.5c.48.31 1.05.5 1.66.5 1.66 0 3-1.34 3-3z\"/>"},"octoface":{"name":"octoface","figma":{"id":"0:609","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["octocat","brand"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14.7 5.34c.13-.32.55-1.59-.13-3.31 0 0-1.05-.33-3.44 1.3-1-.28-2.07-.32-3.13-.32s-2.13.04-3.13.32c-2.39-1.64-3.44-1.3-3.44-1.3-.68 1.72-.26 2.99-.13 3.31C.49 6.21 0 7.33 0 8.69 0 13.84 3.33 15 7.98 15S16 13.84 16 8.69c0-1.36-.49-2.48-1.3-3.35zM8 14.02c-3.3 0-5.98-.15-5.98-3.35 0-.76.38-1.48 1.02-2.07 1.07-.98 2.9-.46 4.96-.46 2.07 0 3.88-.52 4.96.46.65.59 1.02 1.3 1.02 2.07 0 3.19-2.68 3.35-5.98 3.35zM5.49 9.01c-.66 0-1.2.8-1.2 1.78s.54 1.79 1.2 1.79c.66 0 1.2-.8 1.2-1.79s-.54-1.78-1.2-1.78zm5.02 0c-.66 0-1.2.79-1.2 1.78s.54 1.79 1.2 1.79c.66 0 1.2-.8 1.2-1.79s-.53-1.78-1.2-1.78z\"/>"},"organization":{"name":"organization","figma":{"id":"0:613","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["people","group","team"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M16 12.999c0 .439-.45 1-1 1H7.995c-.539 0-.994-.447-.995-.999H1c-.54 0-1-.561-1-1 0-2.634 3-4 3-4s.229-.409 0-1c-.841-.621-1.058-.59-1-3 .058-2.419 1.367-3 2.5-3s2.442.58 2.5 3c.058 2.41-.159 2.379-1 3-.229.59 0 1 0 1s1.549.711 2.42 2.088C9.196 9.369 10 8.999 10 8.999s.229-.409 0-1c-.841-.62-1.058-.59-1-3 .058-2.419 1.367-3 2.5-3s2.437.581 2.495 3c.059 2.41-.158 2.38-1 3-.229.59 0 1 0 1s3.005 1.366 3.005 4z\"/>"},"package":{"name":"package","figma":{"id":"0:617","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["box","ship"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 0 0-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z\"/>"},"paintcan":{"name":"paintcan","figma":{"id":"0:624","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["style","theme","art","color"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 0C2.69 0 0 2.69 0 6v1c0 .55.45 1 1 1v5c0 1.1 2.24 2 5 2s5-.9 5-2V8c.55 0 1-.45 1-1V6c0-3.31-2.69-6-6-6zm3 10v.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5V10c0-.28-.22-.5-.5-.5s-.5.22-.5.5v2.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5v-2c0-.28-.22-.5-.5-.5s-.5.22-.5.5v.5c0 .55-.45 1-1 1s-1-.45-1-1v-1c-.55 0-1-.45-1-1V7.2c.91.49 2.36.8 4 .8 1.64 0 3.09-.31 4-.8V9c0 .55-.45 1-1 1zM6 7c-1.68 0-3.12-.41-3.71-1C2.88 5.41 4.32 5 6 5c1.68 0 3.12.41 3.71 1-.59.59-2.03 1-3.71 1zm0-3c-2.76 0-5 .89-5 2 0-2.76 2.24-5 5-5s5 2.24 5 5c0-1.1-2.24-2-5-2z\"/>"},"pencil":{"name":"pencil","figma":{"id":"0:630","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["edit","change","update","write"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 12v3h3l8-8-3-3-8 8zm3 2H1v-2h1v1h1v1zm10.3-9.3L12 6 9 3l1.3-1.3a.996.996 0 0 1 1.41 0l1.59 1.59c.39.39.39 1.02 0 1.41z\"/>"},"person":{"name":"person","figma":{"id":"0:633","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["people","man","woman","human"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 14.002a.998.998 0 0 1-.998.998H1.001A1 1 0 0 1 0 13.999V13c0-2.633 4-4 4-4s.229-.409 0-1c-.841-.62-.944-1.59-1-4 .173-2.413 1.867-3 3-3s2.827.586 3 3c-.056 2.41-.159 3.38-1 4-.229.59 0 1 0 1s4 1.367 4 4v1.002z\"/>"},"pin":{"name":"pin","figma":{"id":"0:635","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["save","star","bookmark"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 1.2V2l.5 1L6 6H2.2c-.44 0-.67.53-.34.86L5 10l-4 5 5-4 3.14 3.14a.5.5 0 0 0 .86-.34V10l3-4.5 1 .5h.8c.44 0 .67-.53.34-.86L10.86.86a.5.5 0 0 0-.86.34z\"/>"},"plug":{"name":"plug","figma":{"id":"0:637","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["hook","webhook"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 6V5h-4V3H8v1H6c-1.03 0-1.77.81-2 2L3 7c-1.66 0-3 1.34-3 3v2h1v-2c0-1.11.89-2 2-2l1 1c.25 1.16.98 2 2 2h2v1h2v-2h4V9h-4V6h4z\"/>"},"plus":{"name":"plus","figma":{"id":"0:639","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["add","new","more"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 9H7v5H5V9H0V7h5V2h2v5h5v2z\"/>"},"primitive-dot":{"name":"primitive-dot","figma":{"id":"0:641","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["circle"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 8c0-2.2 1.8-4 4-4s4 1.8 4 4-1.8 4-4 4-4-1.8-4-4z\"/>"},"primitive-square":{"name":"primitive-square","figma":{"id":"0:643","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["box"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 12H0V4h8v8z\"/>"},"pulse":{"name":"pulse","figma":{"id":"0:645","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["graph","trend","line","activity"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.5 8L8.8 5.4 6.6 8.5 5.5 1.6 2.38 8H0v2h3.6l.9-1.8.9 5.4L9 8.5l1.6 1.5H14V8h-2.5z\"/>"},"question":{"name":"question","figma":{"id":"0:649","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["help","explain"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 10h2v2H6v-2zm4-3.5C10 8.64 8 9 8 9H6c0-.55.45-1 1-1h.5c.28 0 .5-.22.5-.5v-1c0-.28-.22-.5-.5-.5h-1c-.28 0-.5.22-.5.5V7H4c0-1.5 1.5-3 3-3s3 1 3 2.5zM7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7z\"/>"},"quote":{"name":"quote","figma":{"id":"0:655","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["quotation"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6.16 3.5C3.73 5.06 2.55 6.67 2.55 9.36c.16-.05.3-.05.44-.05 1.27 0 2.5.86 2.5 2.41 0 1.61-1.03 2.61-2.5 2.61-1.9 0-2.99-1.52-2.99-4.25 0-3.8 1.75-6.53 5.02-8.42L6.16 3.5zm7 0c-2.43 1.56-3.61 3.17-3.61 5.86.16-.05.3-.05.44-.05 1.27 0 2.5.86 2.5 2.41 0 1.61-1.03 2.61-2.5 2.61-1.89 0-2.98-1.52-2.98-4.25 0-3.8 1.75-6.53 5.02-8.42l1.14 1.84h-.01z\"/>"},"radio-tower":{"name":"radio-tower","figma":{"id":"0:659","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["broadcast"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4.79 6.11c.25-.25.25-.67 0-.92-.32-.33-.48-.76-.48-1.19 0-.43.16-.86.48-1.19.25-.26.25-.67 0-.92a.613.613 0 0 0-.45-.19c-.16 0-.33.06-.45.19-.57.58-.85 1.35-.85 2.11 0 .76.29 1.53.85 2.11.25.25.66.25.9 0zM2.33.52a.651.651 0 0 0-.92 0C.48 1.48.01 2.74.01 3.99c0 1.26.47 2.52 1.4 3.48.25.26.66.26.91 0s.25-.68 0-.94c-.68-.7-1.02-1.62-1.02-2.54 0-.92.34-1.84 1.02-2.54a.66.66 0 0 0 .01-.93zm5.69 5.1A1.62 1.62 0 1 0 6.4 4c-.01.89.72 1.62 1.62 1.62zM14.59.53a.628.628 0 0 0-.91 0c-.25.26-.25.68 0 .94.68.7 1.02 1.62 1.02 2.54 0 .92-.34 1.83-1.02 2.54-.25.26-.25.68 0 .94a.651.651 0 0 0 .92 0c.93-.96 1.4-2.22 1.4-3.48A5.048 5.048 0 0 0 14.59.53zM8.02 6.92c-.41 0-.83-.1-1.2-.3l-3.15 8.37h1.49l.86-1h4l.84 1h1.49L9.21 6.62c-.38.2-.78.3-1.19.3zm-.01.48L9.02 11h-2l.99-3.6zm-1.99 5.59l1-1h2l1 1h-4zm5.19-11.1c-.25.25-.25.67 0 .92.32.33.48.76.48 1.19 0 .43-.16.86-.48 1.19-.25.26-.25.67 0 .92a.63.63 0 0 0 .9 0c.57-.58.85-1.35.85-2.11 0-.76-.28-1.53-.85-2.11a.634.634 0 0 0-.9 0z\"/>"},"repo-clone":{"name":"repo-clone","figma":{"id":"0:669","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","repository"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15 0H9v7c0 .55.45 1 1 1h1v1h1V8h3c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1zm-4 7h-1V6h1v1zm4 0h-3V6h3v1zm0-2h-4V1h4v4zM4 5H3V4h1v1zm0-2H3V2h1v1zM2 1h6V0H1C.45 0 0 .45 0 1v12c0 .55.45 1 1 1h2v2l1.5-1.5L6 16v-2h5c.55 0 1-.45 1-1v-3H2V1zm9 10v2H6v-1H3v1H1v-2h10zM3 8h1v1H3V8zm1-1H3V6h1v1z\"/>"},"repo-force-push":{"name":"repo-force-push","figma":{"id":"0:681","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","put"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 9H8v7H6V9H4l2.25-3H4l3-4 3 4H7.75L10 9zm1-9H1C.45 0 0 .45 0 1v12c0 .55.45 1 1 1h4v-1H1v-2h4v-1H2V1h9v9H9v1h2v2H9v1h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"/>"},"repo-forked":{"name":"repo-forked","figma":{"id":"0:685","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","copy"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z\"/>"},"repo-pull":{"name":"repo-pull","figma":{"id":"0:691","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","get"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 8V6H7V4h6V2l3 3-3 3zM4 2H3v1h1V2zm7 5h1v6c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1v2h-1V1H2v9h9V7zm0 4H1v2h2v-1h3v1h5v-2zM4 6H3v1h1V6zm0-2H3v1h1V4zM3 9h1V8H3v1z\"/>"},"repo-push":{"name":"repo-push","figma":{"id":"0:700","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","repository","put"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 3H3V2h1v1zM3 5h1V4H3v1zm4 0L4 9h2v7h2V9h2L7 5zm4-5H1C.45 0 0 .45 0 1v12c0 .55.45 1 1 1h4v-1H1v-2h4v-1H2V1h9.02L11 10H9v1h2v2H9v1h2c.55 0 1-.45 1-1V1c0-.55-.45-1-1-1z\"/>"},"repo":{"name":"repo","figma":{"id":"0:706","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["book","journal","repository"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z\"/>"},"rocket":{"name":"rocket","figma":{"id":"0:715","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["staff","stafftools","blast","off","space","launch","ship"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12.17 3.83c-.27-.27-.47-.55-.63-.88-.16-.31-.27-.66-.34-1.02-.58.33-1.16.7-1.73 1.13-.58.44-1.14.94-1.69 1.48-.7.7-1.33 1.81-1.78 2.45H3L0 10h3l2-2c-.34.77-1.02 2.98-1 3l1 1c.02.02 2.23-.64 3-1l-2 2v3l3-3v-3c.64-.45 1.75-1.09 2.45-1.78.55-.55 1.05-1.13 1.47-1.7.44-.58.81-1.16 1.14-1.72-.36-.08-.7-.19-1.03-.34a3.39 3.39 0 0 1-.86-.63zM16 0s-.09.38-.3 1.06c-.2.7-.55 1.58-1.06 2.66-.7-.08-1.27-.33-1.66-.72-.39-.39-.63-.94-.7-1.64C13.36.84 14.23.48 14.92.28 15.62.08 16 0 16 0z\"/>"},"rss":{"name":"rss","figma":{"id":"0:719","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["broadcast","feed","atom"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2 13H0v-2c1.11 0 2 .89 2 2zM0 3v1a9 9 0 0 1 9 9h1C10 7.48 5.52 3 0 3zm0 4v1c2.75 0 5 2.25 5 5h1c0-3.31-2.69-6-6-6z\"/>"},"ruby":{"name":"ruby","figma":{"id":"0:724","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["code","language"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 6l-5 5V4h3l2 2zm3 0l-8 8-8-8 4-4h8l4 4zm-8 6.5L14.5 6l-3-3h-7l-3 3L8 12.5z\"/>"},"search":{"name":"search","figma":{"id":"0:729","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["magnifying","glass"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.7 13.3l-3.81-3.83A5.93 5.93 0 0 0 13 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 0 0 0-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z\"/>"},"server":{"name":"server","figma":{"id":"0:733","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["computers","racks","ops"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 6H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V7c0-.55-.45-1-1-1zM2 9H1V7h1v2zm2 0H3V7h1v2zm2 0H5V7h1v2zm2 0H7V7h1v2zm3-8H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V2c0-.55-.45-1-1-1zM2 4H1V2h1v2zm2 0H3V2h1v2zm2 0H5V2h1v2zm2 0H7V2h1v2zm3-1h-1V2h1v1zm0 8H1c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h10c.55 0 1-.45 1-1v-2c0-.55-.45-1-1-1zm-9 3H1v-2h1v2zm2 0H3v-2h1v2zm2 0H5v-2h1v2zm2 0H7v-2h1v2z\"/>"},"settings":{"name":"settings","figma":{"id":"0:751","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["sliders","filters","controls","levels"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 7H3V2h1v5zm-1 7h1v-3H3v3zm5 0h1V8H8v6zm5 0h1v-2h-1v2zm1-12h-1v6h1V2zM9 2H8v2h1V2zM5 8H2c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm5-3H7c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1zm5 4h-3c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1z\"/>"},"shield":{"name":"shield","figma":{"id":"0:762","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["protect","shield","lock"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 0L0 2v6.02C0 12.69 5.31 16 7 16c1.69 0 7-3.31 7-7.98V2L7 0zM5 11l1.14-2.8a.568.568 0 0 0-.25-.59C5.33 7.25 5 6.66 5 6c0-1.09.89-2 1.98-2C8.06 4 9 4.91 9 6c0 .66-.33 1.25-.89 1.61-.19.13-.3.36-.25.59L9 11H5z\"/>"},"sign-in":{"name":"sign-in","figma":{"id":"0:764","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["door","arrow","direction","enter","log in"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 6.75V12h4V8h1v4c0 .55-.45 1-1 1H7v3l-5.45-2.72c-.33-.17-.55-.52-.55-.91V1c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v3h-1V1H3l4 2v2.25L10 3v2h4v2h-4v2L7 6.75z\"/>"},"sign-out":{"name":"sign-out","figma":{"id":"0:768","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["door","arrow","direction","leave","log out"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.992 8.994V6.996H7.995v-2h3.997V2.999l3.998 2.998-3.998 2.998zm-1.998 2.998H5.996V2.998L2 1h7.995v2.998h1V1c0-.55-.45-.999-1-.999H.999A1.001 1.001 0 0 0 0 1v11.372c0 .39.22.73.55.91L5.996 16v-3.008h3.998c.55 0 1-.45 1-1V7.995h-1v3.997z\"/>"},"smiley":{"name":"smiley","figma":{"id":"0:772","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["emoji","smile","mood","emotion"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm4.81 12.81a6.72 6.72 0 0 1-2.17 1.45c-.83.36-1.72.53-2.64.53-.92 0-1.81-.17-2.64-.53-.81-.34-1.55-.83-2.17-1.45a6.773 6.773 0 0 1-1.45-2.17A6.59 6.59 0 0 1 1.21 8c0-.92.17-1.81.53-2.64.34-.81.83-1.55 1.45-2.17.62-.62 1.36-1.11 2.17-1.45A6.59 6.59 0 0 1 8 1.21c.92 0 1.81.17 2.64.53.81.34 1.55.83 2.17 1.45.62.62 1.11 1.36 1.45 2.17.36.83.53 1.72.53 2.64 0 .92-.17 1.81-.53 2.64-.34.81-.83 1.55-1.45 2.17zM4 6.8v-.59c0-.66.53-1.19 1.2-1.19h.59c.66 0 1.19.53 1.19 1.19v.59c0 .67-.53 1.2-1.19 1.2H5.2C4.53 8 4 7.47 4 6.8zm5 0v-.59c0-.66.53-1.19 1.2-1.19h.59c.66 0 1.19.53 1.19 1.19v.59c0 .67-.53 1.2-1.19 1.2h-.59C9.53 8 9 7.47 9 6.8zm4 3.2c-.72 1.88-2.91 3-5 3s-4.28-1.13-5-3c-.14-.39.23-1 .66-1h8.59c.41 0 .89.61.75 1z\"/>"},"squirrel":{"name":"squirrel","figma":{"id":"0:779","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["ship","shipit","launch"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 1C9.79 1 8 2.31 8 3.92c0 1.94.5 3.03 0 6.08 0-4.5-2.77-6.34-4-6.34.05-.5-.48-.66-.48-.66s-.22.11-.3.34c-.27-.31-.56-.27-.56-.27l-.13.58S.7 4.29.68 6.87c.2.33 1.53.6 2.47.43.89.05.67.79.47.99C2.78 9.13 2 8 1 8S0 9 1 9s1 1 3 1c-3.09 1.2 0 4 0 4H3c-1 0-1 1-1 1h6c3 0 5-1 5-3.47 0-.85-.43-1.79-1-2.53-1.11-1.46.23-2.68 1-2 .77.68 3 1 3-2 0-2.21-1.79-4-4-4zM2.5 6c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5.22.5.5-.22.5-.5.5z\"/>"},"star":{"name":"star","figma":{"id":"0:781","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["save","remember","like"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z\"/>"},"stop":{"name":"stop","figma":{"id":"0:785","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["block","spam","report"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 1H4L0 5v6l4 4h6l4-4V5l-4-4zm3 9.5L9.5 14h-5L1 10.5v-5L4.5 2h5L13 5.5v5zM6 4h2v5H6V4zm0 6h2v2H6v-2z\"/>"},"sync":{"name":"sync","figma":{"id":"0:791","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["cycle","refresh","loop"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10.24 7.4a4.15 4.15 0 0 1-1.2 3.6 4.346 4.346 0 0 1-5.41.54L4.8 10.4.5 9.8l.6 4.2 1.31-1.26c2.36 1.74 5.7 1.57 7.84-.54a5.876 5.876 0 0 0 1.74-4.46l-1.75-.34zM2.96 5a4.346 4.346 0 0 1 5.41-.54L7.2 5.6l4.3.6-.6-4.2-1.31 1.26c-2.36-1.74-5.7-1.57-7.85.54C.5 5.03-.06 6.65.01 8.26l1.75.35A4.17 4.17 0 0 1 2.96 5z\"/>"},"tag":{"name":"tag","figma":{"id":"0:795","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["release"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.685 1.72a2.49 2.49 0 0 0-1.76-.726H3.48A2.5 2.5 0 0 0 .994 3.48v2.456c0 .656.269 1.292.726 1.76l6.024 6.024a.99.99 0 0 0 1.402 0l4.563-4.563a.99.99 0 0 0 0-1.402L7.685 1.72zM2.366 7.048a1.54 1.54 0 0 1-.467-1.123V3.48c0-.874.716-1.58 1.58-1.58h2.456c.418 0 .825.159 1.123.467l6.104 6.094-4.702 4.702-6.094-6.114zm.626-4.066h1.989v1.989H2.982V2.982h.01z\"/>"},"tasklist":{"name":"tasklist","figma":{"id":"0:800","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["todo"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.41 9H7.59C7 9 7 8.59 7 8c0-.59 0-1 .59-1h7.81c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM9.59 4C9 4 9 3.59 9 3c0-.59 0-1 .59-1h5.81c.59 0 .59.41.59 1 0 .59 0 1-.59 1H9.59zM0 3.91l1.41-1.3L3 4.2 7.09 0 8.5 1.41 3 6.91l-3-3zM7.59 12h7.81c.59 0 .59.41.59 1 0 .59 0 1-.59 1H7.59C7 14 7 13.59 7 13c0-.59 0-1 .59-1z\"/>"},"telescope":{"name":"telescope","figma":{"id":"0:806","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["science","space","look","view","explore"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 9l3 6h-1l-2-4v5H7v-6l-2 5H4l2-5 2-1zM7 0H6v1h1V0zM5 3H4v1h1V3zM2 1H1v1h1V1zM.63 9a.52.52 0 0 0-.16.67l.55.92c.13.23.41.31.64.2l1.39-.66-1.16-2-1.27.86.01.01zm7.89-5.39l-5.8 3.95L3.95 9.7l6.33-3.03-1.77-3.06h.01zm4.22 1.28l-1.47-2.52a.51.51 0 0 0-.72-.17l-1.2.83 1.84 3.2 1.33-.64c.27-.13.36-.44.22-.7z\"/>"},"terminal":{"name":"terminal","figma":{"id":"0:815","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["code","ops","shell"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7 10h4v1H7v-1zm-3 1l3-3-3-3-.75.75L5.5 8l-2.25 2.25L4 11zm10-8v10c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h12c.55 0 1 .45 1 1zm-1 0H1v10h12V3z\"/>"},"text-size":{"name":"text-size","figma":{"id":"0:821","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["font","size","text"],"width":18,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13.62 9.08L12.1 3.66h-.06l-1.5 5.42h3.08zM5.7 10.13S4.68 6.52 4.53 6.02h-.08l-1.13 4.11H5.7zM17.31 14h-2.25l-.95-3.25h-4.07L9.09 14H6.84l-.69-2.33H2.87L2.17 14H0l3.3-9.59h2.5l2.17 6.34L10.86 2h2.52l3.94 12h-.01z\"/>"},"three-bars":{"name":"three-bars","figma":{"id":"0:826","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["hamburger","menu","dropdown"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0 4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59 11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1 .59-1z\"/>"},"thumbsdown":{"name":"thumbsdown","figma":{"id":"0:831","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["thumb","thumbsdown","rejected","dislike"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.97 7.825L15 1.88C14.83.499 13.123 0 11.993 0H5.686c-.2 0-.38.05-.53.14L3.719 1h-1.72C.94 1 0 1.938 0 2.997v3.998c0 1.059.94 2.018 1.999 1.998h1.998c.91 0 1.39.45 2.389 1.55.91.999.88 1.798.63 3.267-.08.5.06 1 .42 1.42.39.47.979.769 1.558.769 1.83 0 2.998-3.718 2.998-5.017l-.02-.98h2.04c1.159 0 1.948-.799 1.978-1.968 0-.06.02-.13-.02-.2v-.01zm-1.969 1.19h-1.989c-.7 0-1.029.28-1.029.969l.03 1.03c0 1.268-1.17 3.997-1.999 3.997-.5 0-1.079-.5-.999-1 .25-1.579.34-2.778-.89-4.137-1.019-1.13-1.768-1.879-3.127-1.879V1.999l1.668-1h6.326c.73 0 1.95.31 2 1l.02.02.999 5.996c-.03.64-.38 1-1 1h-.01z\"/>"},"thumbsup":{"name":"thumbsup","figma":{"id":"0:835","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["thumb","thumbsup","prop","ship","like"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13.991 13.991c-.05.69-1.269 1-1.998 1H5.665l-1.669-1V7.995c1.36 0 2.11-.75 3.129-1.879 1.229-1.359 1.139-2.558.879-4.127-.08-.5.5-1 1-1 .829 0 1.998 2.729 1.998 3.998l-.02 1.03c0 .689.33.969 1.02.969H14c.63 0 .98.36 1 .999l-1 5.996-.01.01zm0-7.995h-2.018l.02-.98C11.992 3.719 10.822 0 8.993 0c-.58 0-1.169.3-1.559.77-.36.41-.5.909-.42 1.409.25 1.479.28 2.278-.629 3.278-1 1.089-1.48 1.549-2.389 1.549H2c-1.061-.01-2 .929-2 1.988v3.998c0 1.06.94 1.999 1.999 1.999h1.719l1.439.86c.16.089.33.139.52.139h6.325c1.13 0 2.839-.5 2.999-1.879l.979-5.946c.02-.08.02-.14.02-.2-.03-1.17-.84-1.969-1.999-1.969h-.01z\"/>"},"tools":{"name":"tools","figma":{"id":"0:839","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["screwdriver","wrench","settings"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4.48 7.27c.26.26 1.28 1.33 1.28 1.33l.56-.58-.88-.91 1.69-1.8s-.76-.74-.43-.45c.32-1.19.03-2.51-.87-3.44C4.93.5 3.66.2 2.52.51l1.93 2-.51 1.96-1.89.52-1.93-2C-.19 4.17.1 5.48 1 6.4c.94.98 2.29 1.26 3.48.87zm6.44 1.94l-2.33 2.3 3.84 3.98c.31.33.73.49 1.14.49.41 0 .82-.16 1.14-.49.63-.65.63-1.7 0-2.35l-3.79-3.93zM16 2.53L13.55 0 6.33 7.46l.88.91-4.31 4.46-.99.53-1.39 2.27.35.37 2.2-1.44.51-1.02L7.9 9.08l.88.91L16 2.53z\"/>"},"trashcan":{"name":"trashcan","figma":{"id":"0:844","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["garbage","rubbish","recycle","delete"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z\"/>"},"triangle-down":{"name":"triangle-down","figma":{"id":"0:847","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["arrow","point","direction"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 5l6 6 6-6H0z\"/>"},"triangle-left":{"name":"triangle-left","figma":{"id":"0:849","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["arrow","point","direction"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 2L0 8l6 6V2z\"/>"},"triangle-right":{"name":"triangle-right","figma":{"id":"0:851","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["arrow","point","direction"],"width":6,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 14l6-6-6-6v12z\"/>"},"triangle-up":{"name":"triangle-up","figma":{"id":"0:853","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["arrow","point","direction"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 11L6 5l-6 6h12z\"/>"},"unfold":{"name":"unfold","figma":{"id":"0:857","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["expand","open","reveal"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11.5 7.5L14 10c0 .55-.45 1-1 1H9v-1h3.5l-2-2h-7l-2 2H5v1H1c-.55 0-1-.45-1-1l2.5-2.5L0 5c0-.55.45-1 1-1h4v1H1.5l2 2h7l2-2H9V4h4c.55 0 1 .45 1 1l-2.5 2.5zM6 6h2V3h2L7 0 4 3h2v3zm2 3H6v3H4l3 3 3-3H8V9z\"/>"},"unmute":{"name":"unmute","figma":{"id":"0:862","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["loud","volume","audio","sound","play"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12 8.02c0 1.09-.45 2.09-1.17 2.83l-.67-.67c.55-.56.89-1.31.89-2.16 0-.85-.34-1.61-.89-2.16l.67-.67A3.99 3.99 0 0 1 12 8.02zM7.72 2.28L4 6H2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2l3.72 3.72c.47.47 1.28.14 1.28-.53V2.81c0-.67-.81-1-1.28-.53zm5.94.08l-.67.67a6.996 6.996 0 0 1 2.06 4.98c0 1.94-.78 3.7-2.06 4.98l.67.67A7.973 7.973 0 0 0 16 8c0-2.22-.89-4.22-2.34-5.66v.02zm-1.41 1.41l-.69.67a5.05 5.05 0 0 1 1.48 3.58c0 1.39-.56 2.66-1.48 3.56l.69.67A5.971 5.971 0 0 0 14 8.02c0-1.65-.67-3.16-1.75-4.25z\"/>"},"project":{"name":"project","figma":{"id":"0:868","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["board","kanban","columns","scrum"],"width":15,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z\"/>"},"kebab-horizontal":{"name":"kebab-horizontal","figma":{"id":"0:875","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["kebab","dot","menu","more"],"width":13,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm5 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zM13 7.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z\"/>"},"kebab-vertical":{"name":"kebab-vertical","figma":{"id":"0:880","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["kebab","dot","menu","more"],"width":3,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 2.5a1.5 1.5 0 1 0 3 0 1.5 1.5 0 0 0-3 0zm0 5a1.5 1.5 0 1 0 3 0 1.5 1.5 0 0 0-3 0zM1.5 14a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z\"/>"},"report":{"name":"report","figma":{"id":"0:885","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["report","abuse","flag"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1H7l-4 4v-4H1a1 1 0 0 1-1-1V2zm1 0h14v9H6.5L4 13.5V11H1V2zm6 6h2v2H7V8zm0-5h2v4H7V3z\"/>"},"note":{"name":"note","figma":{"id":"0:891","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["card","paper","ticket"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M3 10h4V9H3v1zm0-2h6V7H3v1zm0-2h8V5H3v1zm10 6H1V3h12v9zM1 2c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1H1z\"/>"},"screen-full":{"name":"screen-full","figma":{"id":"0:898","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["fullscreen","expand"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 10h1v3c0 .547-.453 1-1 1h-3v-1h3v-3zM1 10H0v3c0 .547.453 1 1 1h3v-1H1v-3zm0-7h3V2H1c-.547 0-1 .453-1 1v3h1V3zm1 1h10v8H2V4zm2 6h6V6H4v4zm6-8v1h3v3h1V3c0-.547-.453-1-1-1h-3z\"/>"},"screen-normal":{"name":"screen-normal","figma":{"id":"0:906","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["fullscreen","expand","exit"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M2 4H0V3h2V1h1v2c0 .547-.453 1-1 1zm0 8H0v1h2v2h1v-2c0-.547-.453-1-1-1zm9-2c0 .547-.453 1-1 1H4c-.547 0-1-.453-1-1V6c0-.547.453-1 1-1h6c.547 0 1 .453 1 1v4zM9 7H5v2h4V7zm2 6v2h1v-2h2v-1h-2c-.547 0-1 .453-1 1zm1-10V1h-1v2c0 .547.453 1 1 1h2V3h-2z\"/>"},"unverified":{"name":"unverified","figma":{"id":"0:914","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["insecure","untrusted","signed"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.67 7.066l-1.08-1.34a1.5 1.5 0 0 1-.309-.77l-.19-1.698a1.51 1.51 0 0 0-1.329-1.33l-1.699-.19c-.3-.03-.56-.159-.78-.329L8.945.33a1.504 1.504 0 0 0-1.878 0l-1.34 1.08a1.5 1.5 0 0 1-.77.31l-1.698.19c-.7.08-1.25.63-1.33 1.329l-.19 1.699c-.03.3-.159.56-.329.78L.33 7.055a1.504 1.504 0 0 0 0 1.878l1.08 1.34c.17.22.28.48.31.77l.19 1.698c.08.7.63 1.25 1.329 1.33l1.699.19c.3.03.56.159.78.329l1.339 1.08c.55.439 1.329.439 1.878 0l1.34-1.08c.22-.17.48-.28.77-.31l1.698-.19c.7-.08 1.25-.63 1.33-1.329l.19-1.699c.03-.3.159-.56.329-.78l1.08-1.339a1.504 1.504 0 0 0 0-1.878zm-6.666 4.437c0 .28-.22.5-.5.5h-.999c-.27 0-.5-.22-.5-.5v-1c0-.28.23-.5.5-.5h1c.28 0 .5.22.5.5v1zm1.56-4.887c-.06.17-.17.33-.3.47-.13.16-.14.19-.33.38-.16.17-.31.3-.52.449-.11.09-.2.19-.28.27-.08.08-.14.17-.19.27-.05.1-.08.19-.11.3-.03.11-.03.13-.03.25H7.136c0-.22 0-.31.03-.48.03-.19.08-.36.14-.52.06-.14.14-.28.25-.42.11-.13.23-.25.409-.38.27-.19.36-.3.48-.52.12-.219.2-.379.2-.589 0-.27-.06-.45-.2-.58-.13-.13-.31-.19-.58-.19-.09 0-.19.02-.3.05-.11.03-.17.09-.25.16-.08.07-.14.11-.2.2a.41.41 0 0 0-.09.28H5.028c0-.38.13-.56.27-.83.16-.27.36-.499.61-.669.25-.17.549-.3.879-.38.33-.08.7-.13 1.09-.13.439 0 .829.05 1.168.13.34.09.63.22.88.39.23.17.41.38.55.63.13.25.19.55.19.88 0 .22 0 .419-.08.589l-.02-.01z\"/>"},"verified":{"name":"verified","figma":{"id":"0:919","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["trusted","secure","trustworthy","signed"],"width":16,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M15.67 7.066l-1.08-1.34a1.5 1.5 0 0 1-.309-.77l-.19-1.698a1.51 1.51 0 0 0-1.329-1.33l-1.699-.19c-.3-.03-.56-.159-.78-.329L8.945.33a1.504 1.504 0 0 0-1.878 0l-1.34 1.08a1.5 1.5 0 0 1-.77.31l-1.698.19c-.7.08-1.25.63-1.33 1.329l-.19 1.699c-.03.3-.159.56-.329.78L.33 7.055a1.504 1.504 0 0 0 0 1.878l1.08 1.34c.17.22.28.48.31.77l.19 1.698c.08.7.63 1.25 1.329 1.33l1.699.19c.3.03.56.159.78.329l1.339 1.08c.55.439 1.329.439 1.878 0l1.34-1.08c.22-.17.48-.28.77-.31l1.698-.19c.7-.08 1.25-.63 1.33-1.329l.19-1.699c.03-.3.159-.56.329-.78l1.08-1.339a1.504 1.504 0 0 0 0-1.878zm-9.164 4.936L3.008 8.505l1.5-1.5 1.998 2 4.997-4.998 1.499 1.55-6.496 6.445z\"/>"},"versions":{"name":"versions","figma":{"id":"0:923","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["history","commits"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 3H7c-.55 0-1 .45-1 1v8c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zm-1 8H8V5h4v6zM4 4h1v1H4v6h1v1H4c-.55 0-1-.45-1-1V5c0-.55.45-1 1-1zM1 5h1v1H1v4h1v1H1c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1z\"/>"},"watch":{"name":"watch","figma":{"id":"0:929","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["wait","hourglass","time","date"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6 8h2v1H5V5h1v3zm6 0c0 2.22-1.2 4.16-3 5.19V15c0 .55-.45 1-1 1H4c-.55 0-1-.45-1-1v-1.81C1.2 12.16 0 10.22 0 8s1.2-4.16 3-5.19V1c0-.55.45-1 1-1h4c.55 0 1 .45 1 1v1.81c1.8 1.03 3 2.97 3 5.19zm-1 0c0-2.77-2.23-5-5-5S1 5.23 1 8s2.23 5 5 5 5-2.23 5-5z\"/>"},"x":{"name":"x","figma":{"id":"0:932","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["remove","close","delete"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z\"/>"},"zap":{"name":"zap","figma":{"id":"0:934","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["electricity","lightning","props","like","star","save"],"width":10,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M10 7H6l3-7-9 9h4l-3 7 9-9z\"/>"},"key":{"name":"key","figma":{"id":"0:938","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["key","lock","secure","safe"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M12.83 2.17C12.08 1.42 11.14 1.03 10 1c-1.13.03-2.08.42-2.83 1.17S6.04 3.86 6.01 5c0 .3.03.59.09.89L0 12v1l1 1h2l1-1v-1h1v-1h1v-1h2l1.09-1.11c.3.08.59.11.91.11 1.14-.03 2.08-.42 2.83-1.17S13.97 6.14 14 5c-.03-1.14-.42-2.08-1.17-2.83zM11 5.38c-.77 0-1.38-.61-1.38-1.38 0-.77.61-1.38 1.38-1.38.77 0 1.38.61 1.38 1.38 0 .77-.61 1.38-1.38 1.38z\"/>"},"grabber":{"name":"grabber","figma":{"id":"0:942","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["mover","drap","drop","sort"],"width":8,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M8 4v1H0V4h8zM0 8h8V7H0v1zm0 3h8v-1H0v1z\"/>"},"plus-small":{"name":"plus-small","figma":{"id":"0:947","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["add","new","more","small"],"width":7,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M4 4H3v3H0v1h3v3h1V8h3V7H4V4z\"/>"},"light-bulb":{"name":"light-bulb","figma":{"id":"0:951","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["idea"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z\"/>"},"link-external":{"name":"link-external","figma":{"id":"0:956","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["out","see","more","go","to"],"width":12,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M11 10h1v3c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h3v1H1v10h10v-3zM6 2l2.25 2.25L5 7.5 6.5 9l3.25-3.25L12 8V2H6z\"/>"},"archive":{"name":"archive","figma":{"id":"2228:2","file":"FP7lqd1V00LUaT5zvdklkkZr"},"keywords":["box","catalog"],"width":14,"height":16,"path":"<path fill-rule=\"evenodd\" d=\"M13 2H1v2h12V2zM0 4a1 1 0 0 0 1 1v9a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V5a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1v2zm2 1h10v9H2V5zm2 3h6V7H4v1z\"/>"}}
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/archive.svg b/htdocs/theme/common/octicons/build/svg/archive.svg
    new file mode 100644
    index 00000000000..d1eaa21f97b
    --- /dev/null
    +++ b/htdocs/theme/common/octicons/build/svg/archive.svg
    @@ -0,0 +1 @@
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M13 2H1v2h12V2zM0 4a1 1 0 0 0 1 1v9a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V5a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H1a1 1 0 0 0-1 1v2zm2 1h10v9H2V5zm2 3h6V7H4v1z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/arrow-both.svg b/htdocs/theme/common/octicons/build/svg/arrow-both.svg
    new file mode 100644
    index 00000000000..4167746d84b
    --- /dev/null
    +++ b/htdocs/theme/common/octicons/build/svg/arrow-both.svg
    @@ -0,0 +1 @@
    +<svg xmlns="http://www.w3.org/2000/svg" width="20" height="16" viewBox="0 0 20 16"><path d="M0 8l6-5v3h8V3l6 5-6 5v-3H6v3L0 8z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/beaker.svg b/htdocs/theme/common/octicons/build/svg/beaker.svg
    index 19377609a5d..0997bb0931c 100644
    --- a/htdocs/theme/common/octicons/build/svg/beaker.svg
    +++ b/htdocs/theme/common/octicons/build/svg/beaker.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M14.84 14.59L11.46 7V3h1V2h-9v1h1v4l-3.37 7.59A1 1 0 0 0 2 16h11.94c.72 0 1.2-.75.91-1.41h-.01zM4.21 10l1.25-3V3h5v4l1.25 3h-7.5zm4.25-2h1v1h-1V8zm-1-1h-1V6h1v1zm0-3h1v1h-1V4zm0-3h-1V0h1v1z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M14.38 14.59L11 7V3h1V2H3v1h1v4L.63 14.59A1 1 0 0 0 1.54 16h11.94c.72 0 1.2-.75.91-1.41h-.01zM3.75 10L5 7V3h5v4l1.25 3h-7.5zM8 8h1v1H8V8zM7 7H6V6h1v1zm0-3h1v1H7V4zm0-3H6V0h1v1z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/bell.svg b/htdocs/theme/common/octicons/build/svg/bell.svg
    index d076a0c2129..171f84f1e0f 100644
    --- a/htdocs/theme/common/octicons/build/svg/bell.svg
    +++ b/htdocs/theme/common/octicons/build/svg/bell.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M14 12v1H0v-1l.73-.58c.77-.77.81-2.55 1.19-4.42C2.69 3.23 6 2 6 2c0-.55.45-1 1-1s1 .45 1 1c0 0 3.39 1.23 4.16 5 .38 1.88.42 3.66 1.19 4.42l.66.58H14zm-7 4c1.11 0 2-.89 2-2H5c0 1.11.89 2 2 2z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M13.99 11.991v1H0v-1l.73-.58c.769-.769.809-2.547 1.189-4.416.77-3.767 4.077-4.996 4.077-4.996 0-.55.45-1 .999-1 .55 0 1 .45 1 1 0 0 3.387 1.229 4.156 4.996.38 1.879.42 3.657 1.19 4.417l.659.58h-.01zM6.995 15.99c1.11 0 1.999-.89 1.999-1.999H4.996c0 1.11.89 1.999 1.999 1.999z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/bug.svg b/htdocs/theme/common/octicons/build/svg/bug.svg
    index bd533f829e7..75188298bdc 100644
    --- a/htdocs/theme/common/octicons/build/svg/bug.svg
    +++ b/htdocs/theme/common/octicons/build/svg/bug.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M11.17 10h3V9h-3V8l3.17-1.03-.34-.94-2.83.97V6c0-.55-.45-1-1-1V4c0-.48-.36-.88-.83-.97L10.37 2h1.8V1h-2.2l-2 2h-.59L5.37 1h-2.2v1h1.8L6 3.03c-.47.09-.83.48-.83.97v1c-.55 0-1 .45-1 1v1l-2.83-.97-.34.94L4.17 8v1h-3v1h3v1L1 12.03l.34.94L4.17 12v1c0 .55.45 1 1 1h1l1-1V6h1v7l1 1h1c.55 0 1-.45 1-1v-1l2.83.97.34-.94L11.17 11v-1zm-2-5h-3V4h3v1z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M11 10h3V9h-3V8l3.17-1.03-.34-.94L11 7V6c0-.55-.45-1-1-1V4c0-.48-.36-.88-.83-.97L10.2 2H12V1H9.8l-2 2h-.59L5.2 1H3v1h1.8l1.03 1.03C5.36 3.12 5 3.51 5 4v1c-.55 0-1 .45-1 1v1l-2.83-.97-.34.94L4 8v1H1v1h3v1L.83 12.03l.34.94L4 12v1c0 .55.45 1 1 1h1l1-1V6h1v7l1 1h1c.55 0 1-.45 1-1v-1l2.83.97.34-.94L11 11v-1zM9 5H6V4h3v1z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/check.svg b/htdocs/theme/common/octicons/build/svg/check.svg
    index 2d59600912e..2df5deeef92 100644
    --- a/htdocs/theme/common/octicons/build/svg/check.svg
    +++ b/htdocs/theme/common/octicons/build/svg/check.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 5.5l-8 8-4-4L1.5 8 4 10.5 10.5 4 12 5.5z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5L12 5z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/chevron-down.svg b/htdocs/theme/common/octicons/build/svg/chevron-down.svg
    index 3a4e0aad5c6..32eab7b007f 100644
    --- a/htdocs/theme/common/octicons/build/svg/chevron-down.svg
    +++ b/htdocs/theme/common/octicons/build/svg/chevron-down.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="10" height="16" viewBox="0 0 10 16"><path fill-rule="evenodd" d="M5 11.5l-5-5L1.5 5 5 8.75 8.5 5 10 6.5l-5 5z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="16" viewBox="0 0 10 16"><path fill-rule="evenodd" d="M5 11L0 6l1.5-1.5L5 8.25 8.5 4.5 10 6l-5 5z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/chevron-left.svg b/htdocs/theme/common/octicons/build/svg/chevron-left.svg
    index 2de62df36b3..680c9a0740c 100644
    --- a/htdocs/theme/common/octicons/build/svg/chevron-left.svg
    +++ b/htdocs/theme/common/octicons/build/svg/chevron-left.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="8" height="16" viewBox="0 0 8 16"><path fill-rule="evenodd" d="M6 3l1.5 1.5L3.75 8l3.75 3.5L6 13 1 8l5-5z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="8" height="16" viewBox="0 0 8 16"><path fill-rule="evenodd" d="M5.5 3L7 4.5 3.25 8 7 11.5 5.5 13l-5-5 5-5z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/database.svg b/htdocs/theme/common/octicons/build/svg/database.svg
    index 08b036d9aee..e686d98e4c7 100644
    --- a/htdocs/theme/common/octicons/build/svg/database.svg
    +++ b/htdocs/theme/common/octicons/build/svg/database.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6 15c-3.31 0-6-.9-6-2v-2c0-.17.09-.34.21-.5.67.86 3 1.5 5.79 1.5s5.12-.64 5.79-1.5c.13.16.21.33.21.5v2c0 1.1-2.69 2-6 2zm0-4c-3.31 0-6-.9-6-2V7c0-.11.04-.21.09-.31.03-.06.07-.13.12-.19C.88 7.36 3.21 8 6 8s5.12-.64 5.79-1.5c.05.06.09.13.12.19.05.1.09.21.09.31v2c0 1.1-2.69 2-6 2zm0-4c-3.31 0-6-.9-6-2V4 3c0-1.1 2.69-2 6-2s6 .9 6 2v2c0 1.1-2.69 2-6 2zm0-5c-2.21 0-4 .45-4 1s1.79 1 4 1 4-.45 4-1-1.79-1-4-1z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6 15c-3.31 0-6-.9-6-2v-2c0-.17.09-.34.21-.5.67.86 3 1.5 5.79 1.5s5.12-.64 5.79-1.5c.13.16.21.33.21.5v2c0 1.1-2.69 2-6 2zm0-4c-3.31 0-6-.9-6-2V7c0-.11.04-.21.09-.31.03-.06.07-.13.12-.19C.88 7.36 3.21 8 6 8s5.12-.64 5.79-1.5c.05.06.09.13.12.19.05.1.09.21.09.31v2c0 1.1-2.69 2-6 2zm0-4c-3.31 0-6-.9-6-2V3c0-1.1 2.69-2 6-2s6 .9 6 2v2c0 1.1-2.69 2-6 2zm0-5c-2.21 0-4 .45-4 1s1.79 1 4 1 4-.45 4-1-1.79-1-4-1z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/device-camera-video.svg b/htdocs/theme/common/octicons/build/svg/device-camera-video.svg
    index 8f989c86e9c..dc0e55e6f0b 100644
    --- a/htdocs/theme/common/octicons/build/svg/device-camera-video.svg
    +++ b/htdocs/theme/common/octicons/build/svg/device-camera-video.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15.2 2.091L10 5.721v-2.72c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-2.72l5.2 3.63c.33.23.8 0 .8-.41v-10c0-.41-.47-.64-.8-.41z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15.2 2.09L10 5.72V3c0-.55-.45-1-1-1H1c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h8c.55 0 1-.45 1-1V9.28l5.2 3.63c.33.23.8 0 .8-.41v-10c0-.41-.47-.64-.8-.41z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/file-pdf.svg b/htdocs/theme/common/octicons/build/svg/file-pdf.svg
    index 1b1703e19fd..6d04a046024 100644
    --- a/htdocs/theme/common/octicons/build/svg/file-pdf.svg
    +++ b/htdocs/theme/common/octicons/build/svg/file-pdf.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V4.5L8.5 1zM1 2h4a.68.68 0 0 0-.31.2 1.08 1.08 0 0 0-.23.47 4.22 4.22 0 0 0-.09 1.47c.06.609.173 1.211.34 1.8A21.78 21.78 0 0 1 3.6 8.6c-.5 1-.8 1.66-.91 1.84a7.161 7.161 0 0 0-.69.3 4.19 4.19 0 0 0-1 .64V2zm4.42 4.8a5.65 5.65 0 0 0 1.17 2.09c.275.237.595.417.94.53-.64.09-1.23.2-1.81.33a12.22 12.22 0 0 0-1.81.59c-.587.243.22-.44.61-1.25.365-.74.67-1.51.91-2.3l-.01.01zM11 14H1.5a.743.743 0 0 1-.17 0 2.12 2.12 0 0 0 .73-.44 10.14 10.14 0 0 0 1.78-2.38c.31-.13.58-.23.81-.31l.42-.14c.45-.13.94-.23 1.44-.33s1-.16 1.48-.2c.447.216.912.394 1.39.53.403.11.814.188 1.23.23h.38V14H11zm0-4.86a3.74 3.74 0 0 0-.64-.28 4.22 4.22 0 0 0-.75-.11c-.411.003-.822.03-1.23.08a3 3 0 0 1-1-.64 6.07 6.07 0 0 1-1.29-2.33c.111-.662.178-1.33.2-2 .02-.25.02-.5 0-.75a1.05 1.05 0 0 0-.2-.88.82.82 0 0 0-.61-.23H8l3 3v4.14z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M8.5 1H1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V4.5L8.5 1zM1 2h4a.68.68 0 0 0-.31.2 1.08 1.08 0 0 0-.23.47 4.22 4.22 0 0 0-.09 1.47c.06.609.173 1.211.34 1.8A21.78 21.78 0 0 1 3.6 8.6c-.5 1-.8 1.66-.91 1.84a7.156 7.156 0 0 0-.69.3c-.362.165-.699.38-1 .64V2zm4.42 4.8a5.65 5.65 0 0 0 1.17 2.09c.275.237.595.417.94.53-.64.09-1.23.2-1.81.33-.618.15-1.223.347-1.81.59s.22-.44.61-1.25c.365-.74.67-1.51.91-2.3l-.01.01zM11 14H1.5a.743.743 0 0 1-.17 0 2.12 2.12 0 0 0 .73-.44 10.14 10.14 0 0 0 1.78-2.38c.31-.13.58-.23.81-.31l.42-.14c.45-.13.94-.23 1.44-.33s1-.16 1.48-.2c.447.216.912.394 1.39.53.403.11.814.188 1.23.23h.38V14H11zm0-4.86a3.743 3.743 0 0 0-.64-.28 4.221 4.221 0 0 0-.75-.11c-.411.003-.822.03-1.23.08a3 3 0 0 1-1-.64 6.07 6.07 0 0 1-1.29-2.33c.111-.661.178-1.33.2-2 .02-.25.02-.5 0-.75a1.05 1.05 0 0 0-.2-.88.82.82 0 0 0-.61-.23H8l3 3v4.14z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/flame.svg b/htdocs/theme/common/octicons/build/svg/flame.svg
    index 49507a1073a..1fcb94b429a 100644
    --- a/htdocs/theme/common/octicons/build/svg/flame.svg
    +++ b/htdocs/theme/common/octicons/build/svg/flame.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.01c.81 2.17.41 3.38-.52 4.31C3.55 5.37 1.98 6.15.9 7.68c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.01 8.68 2.15 5.05.02L5.03 0l.02.01z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/gear.svg b/htdocs/theme/common/octicons/build/svg/gear.svg
    index aded0c46675..bf82007a485 100644
    --- a/htdocs/theme/common/octicons/build/svg/gear.svg
    +++ b/htdocs/theme/common/octicons/build/svg/gear.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M14 8.76v-1.6l-1.94-.64-.45-1.09.88-1.84-1.13-1.13-1.81.91-1.09-.45L7.77 1h-1.6l-.63 1.94-1.11.45-1.84-.88-1.13 1.13.91 1.81-.45 1.09L0 7.22v1.59l1.94.64.45 1.09-.88 1.84 1.13 1.13 1.81-.91 1.09.45.69 1.92h1.59l.63-1.94 1.11-.45 1.84.88 1.13-1.13-.92-1.81.47-1.09L14 8.74v.02zm-7 2.23c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M14 8.77v-1.6l-1.94-.64-.45-1.09.88-1.84-1.13-1.13-1.81.91-1.09-.45-.69-1.92h-1.6l-.63 1.94-1.11.45-1.84-.88-1.13 1.13.91 1.81-.45 1.09L0 7.23v1.59l1.94.64.45 1.09-.88 1.84 1.13 1.13 1.81-.91 1.09.45.69 1.92h1.59l.63-1.94 1.11-.45 1.84.88 1.13-1.13-.92-1.81.47-1.09L14 8.75v.02zM7 11c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/gift.svg b/htdocs/theme/common/octicons/build/svg/gift.svg
    index 761be5473ca..4539ce60945 100644
    --- a/htdocs/theme/common/octicons/build/svg/gift.svg
    +++ b/htdocs/theme/common/octicons/build/svg/gift.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M13.02 4h-1.38c.19-.33.33-.67.36-.91.06-.67-.11-1.22-.52-1.61-.36-.38-.81-.48-1.36-.48h-.11c-.53.02-1.11.25-1.53.58-.42.33-.73.72-.97 1.2-.23-.48-.55-.88-.97-1.2-.42-.32-1-.58-1.53-.58h-.03c-.56 0-1.06.09-1.44.48-.41.39-.58.94-.52 1.61.03.23.17.58.36.91H2c-.55 0-1 .45-1 1v3h1v5c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8h1V5c0-.55-.45-1-1-1h.02zm-4.78-.88c.17-.36.42-.67.75-.92.3-.23.72-.39 1.05-.41h.09c.45 0 .66.11.8.25s.33.39.3.95c-.05.19-.25.61-.5 1h-2.9l.41-.88v.01zM4.11 2.04c.13-.13.31-.25.91-.25.31 0 .72.17 1.03.41.33.25.58.55.75.92l.42.88h-2.9c-.25-.39-.45-.81-.5-1-.03-.56.16-.81.3-.95l-.01-.01zm2.91 10.95h-4V8h4v5-.01zm0-6h-5V5h5v2-.01zm5 6h-4V8h4v5-.01zm1-6h-5V5h5v2-.01z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M13 4h-1.38c.19-.33.33-.67.36-.91.06-.67-.11-1.22-.52-1.61C11.1 1.1 10.65 1 10.1 1h-.11c-.53.02-1.11.25-1.53.58-.42.33-.73.72-.97 1.2-.23-.48-.55-.88-.97-1.2-.42-.32-1-.58-1.53-.58h-.03c-.56 0-1.06.09-1.44.48-.41.39-.58.94-.52 1.61.03.23.17.58.36.91H1.98c-.55 0-1 .45-1 1v3h1v5c0 .55.45 1 1 1h9c.55 0 1-.45 1-1V8h1V5c0-.55-.45-1-1-1H13zm-4.78-.88c.17-.36.42-.67.75-.92.3-.23.72-.39 1.05-.41h.09c.45 0 .66.11.8.25s.33.39.3.95c-.05.19-.25.61-.5 1h-2.9l.41-.88v.01zM4.09 2.04c.13-.13.31-.25.91-.25.31 0 .72.17 1.03.41.33.25.58.55.75.92L7.2 4H4.3c-.25-.39-.45-.81-.5-1-.03-.56.16-.81.3-.95l-.01-.01zM7 12.99H3V8h4v5-.01zm0-6H2V5h5v2-.01zm5 6H8V8h4v5-.01zm1-6H8V5h5v2-.01z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/gist-secret.svg b/htdocs/theme/common/octicons/build/svg/gist-secret.svg
    index a6459e19bf2..6495281267c 100644
    --- a/htdocs/theme/common/octicons/build/svg/gist-secret.svg
    +++ b/htdocs/theme/common/octicons/build/svg/gist-secret.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7.782 10.5l1 3.5h-4l1-3.5-.75-1.5h3.5l-.75 1.5zm2-4.5h-6l-2 1h10l-2-1zm-1-4l-2 1-2-1-1 3h6l-1-3zm4.03 7.75L9.782 9l1 2-2 3h3.22c.45 0 .86-.31.97-.75l.56-2.28c.14-.53-.19-1.08-.72-1.22zM3.782 9l-3.03.75c-.53.14-.86.69-.72 1.22l.56 2.28c.11.44.52.75.97.75h3.22l-2-3 1-2z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M8 10.5L9 14H5l1-3.5L5.25 9h3.5L8 10.5zM10 6H4L2 7h10l-2-1zM9 2L7 3 5 2 4 5h6L9 2zm4.03 7.75L10 9l1 2-2 3h3.22c.45 0 .86-.31.97-.75l.56-2.28c.14-.53-.19-1.08-.72-1.22zM4 9l-3.03.75c-.53.14-.86.69-.72 1.22l.56 2.28c.11.44.52.75.97.75H5l-2-3 1-2z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/git-merge.svg b/htdocs/theme/common/octicons/build/svg/git-merge.svg
    index fedb516064a..63c43f76936 100644
    --- a/htdocs/theme/common/octicons/build/svg/git-merge.svg
    +++ b/htdocs/theme/common/octicons/build/svg/git-merge.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M10 7.01c-.73 0-1.38.41-1.73 1.02v-.02C7.22 7.99 6 7.65 5.14 6.99c-.75-.58-1.5-1.61-1.89-2.44A1.993 1.993 0 0 0 2 1C.89 1 0 1.9 0 3.01a2 2 0 0 0 1 1.72v6.56c-.59.35-1 .99-1 1.72 0 1.11.89 2 2 2a1.993 1.993 0 0 0 1-3.72V7.68c.67.7 1.44 1.27 2.3 1.69.86.42 2.03.63 2.97.64v-.02c.36.61 1 1.02 1.73 1.02 1.11 0 2-.89 2-2 0-1.11-.89-2-2-2zm-6.8 6c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.21c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm8 6c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M10 7c-.73 0-1.38.41-1.73 1.02V8C7.22 7.98 6 7.64 5.14 6.98c-.75-.58-1.5-1.61-1.89-2.44A1.993 1.993 0 0 0 2 .99C.89.99 0 1.89 0 3a2 2 0 0 0 1 1.72v6.56c-.59.35-1 .99-1 1.72 0 1.11.89 2 2 2a1.993 1.993 0 0 0 1-3.72V7.67c.67.7 1.44 1.27 2.3 1.69.86.42 2.03.63 2.97.64v-.02c.36.61 1 1.02 1.73 1.02 1.11 0 2-.89 2-2 0-1.11-.89-2-2-2zm-6.8 6c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm8 6c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/heart.svg b/htdocs/theme/common/octicons/build/svg/heart.svg
    index 8b81f8845fe..e9407b514c7 100644
    --- a/htdocs/theme/common/octicons/build/svg/heart.svg
    +++ b/htdocs/theme/common/octicons/build/svg/heart.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M11.2 3c-.52-.63-1.25-.95-2.2-1-.97 0-1.69.42-2.2 1-.51.58-.78.92-.8 1-.02-.08-.28-.42-.8-1-.52-.58-1.17-1-2.2-1-.95.05-1.69.38-2.2 1-.52.61-.78 1.28-.8 2 0 .52.09 1.52.67 2.67C1.25 8.82 3.01 10.61 6 13c2.98-2.39 4.77-4.17 5.34-5.33C11.91 6.51 12 5.5 12 5c-.02-.72-.28-1.39-.8-2.02V3z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M9 2c-.97 0-1.69.42-2.2 1-.51.58-.78.92-.8 1-.02-.08-.28-.42-.8-1-.52-.58-1.17-1-2.2-1-1.632.086-2.954 1.333-3 3 0 .52.09 1.52.67 2.67C1.25 8.82 3.01 10.61 6 13c2.98-2.39 4.77-4.17 5.34-5.33C11.91 6.51 12 5.5 12 5c-.047-1.69-1.342-2.913-3-3z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/info.svg b/htdocs/theme/common/octicons/build/svg/info.svg
    index 745ef337a3d..26db463ff03 100644
    --- a/htdocs/theme/common/octicons/build/svg/info.svg
    +++ b/htdocs/theme/common/octicons/build/svg/info.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.71a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 8.01c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V8v.01zM7 2.32C3.86 2.32 1.3 4.86 1.3 8c0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 1c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/list-ordered.svg b/htdocs/theme/common/octicons/build/svg/list-ordered.svg
    index 64126c3b8ef..2450532b491 100644
    --- a/htdocs/theme/common/octicons/build/svg/list-ordered.svg
    +++ b/htdocs/theme/common/octicons/build/svg/list-ordered.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12.01 13c0 .59 0 1-.59 1H4.6c-.59 0-.59-.41-.59-1 0-.59 0-1 .59-1h6.81c.59 0 .59.41.59 1h.01zM4.6 4h6.81C12 4 12 3.59 12 3c0-.59 0-1-.59-1H4.6c-.59 0-.59.41-.59 1 0 .59 0 1 .59 1zm6.81 3H4.6c-.59 0-.59.41-.59 1 0 .59 0 1 .59 1h6.81C12 9 12 8.59 12 8c0-.59 0-1-.59-1zm-9.4-6h-.72c-.3.19-.58.25-1.03.34V2h.75v2.14H.17V5h2.84v-.86h-1V1zm.25 8.13c-.17 0-.45.03-.66.06.53-.56 1.14-1.25 1.14-1.89C2.72 6.52 2.18 6 1.38 6c-.59 0-.97.2-1.38.64l.58.58c.19-.19.38-.38.64-.38.28 0 .48.16.48.52 0 .53-.77 1.2-1.7 2.06V10h3l-.09-.88h-.66l.01.01zm-.08 3.78v-.03c.44-.19.64-.47.64-.86 0-.7-.56-1.11-1.44-1.11-.48 0-.89.19-1.28.52l.55.64c.25-.2.44-.31.69-.31.27 0 .42.13.42.36 0 .27-.2.44-.86.44v.75c.83 0 .98.17.98.47 0 .25-.23.38-.58.38-.28 0-.56-.14-.81-.38l-.48.66c.3.36.77.56 1.41.56.83 0 1.53-.41 1.53-1.16 0-.5-.31-.81-.77-.94v.01z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M12 12.99c0 .589 0 .998-.59.998H4.597c-.59 0-.59-.41-.59-.999 0-.59 0-.999.59-.999H11.4c.59 0 .59.41.59 1H12zM4.596 3.996H11.4c.59 0 .59-.41.59-1 0-.589 0-.999-.59-.999H4.596c-.59 0-.59.41-.59 1 0 .589 0 .999.59.999zM11.4 6.994H4.596c-.59 0-.59.41-.59 1 0 .589 0 .999.59.999H11.4c.59 0 .59-.41.59-1 0-.59 0-.999-.59-.999zM2.008 1h-.72C.99 1.19.71 1.25.26 1.34V2h.75v2.138H.17v.859h2.837v-.86h-.999V1zm.25 8.123c-.17 0-.45.03-.66.06.53-.56 1.14-1.249 1.14-1.888-.02-.78-.56-1.299-1.36-1.299-.589 0-.968.2-1.378.64l.58.579c.19-.19.38-.38.639-.38.28 0 .48.16.48.52 0 .53-.77 1.199-1.699 2.058v.58h2.998l-.09-.88h-.66l.01.01zm-.08 3.777v-.03c.44-.19.64-.47.64-.859 0-.7-.56-1.11-1.44-1.11-.479 0-.888.19-1.278.52l.55.64c.25-.2.44-.31.689-.31.27 0 .42.13.42.36 0 .27-.2.44-.86.44v.749c.83 0 .98.17.98.47 0 .25-.23.38-.58.38-.28 0-.56-.14-.81-.38l-.479.659c.3.36.77.56 1.409.56.83 0 1.529-.41 1.529-1.16 0-.5-.31-.809-.77-.939v.01z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/logo-github.svg b/htdocs/theme/common/octicons/build/svg/logo-github.svg
    index 253c13ecbaa..0da3476f6e3 100644
    --- a/htdocs/theme/common/octicons/build/svg/logo-github.svg
    +++ b/htdocs/theme/common/octicons/build/svg/logo-github.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="45" height="16" viewBox="0 0 45 16"><path fill-rule="evenodd" d="M18.53 12.03h-.02c.009 0 .015.01.024.011h.006l-.01-.01zm.004.011c-.093.001-.327.05-.574.05-.78 0-1.05-.36-1.05-.83V8.13h1.59c.09 0 .16-.08.16-.19v-1.7c0-.09-.08-.17-.16-.17h-1.59V3.96c0-.08-.05-.13-.14-.13h-2.16c-.09 0-.14.05-.14.13v2.17s-1.09.27-1.16.28c-.08.02-.13.09-.13.17v1.36c0 .11.08.19.17.19h1.11v3.28c0 2.44 1.7 2.69 2.86 2.69.53 0 1.17-.17 1.27-.22.06-.02.09-.09.09-.16v-1.5a.177.177 0 0 0-.146-.18zm23.696-2.2c0-1.81-.73-2.05-1.5-1.97-.6.04-1.08.34-1.08.34v3.52s.49.34 1.22.36c1.03.03 1.36-.34 1.36-2.25zm2.43-.16c0 3.43-1.11 4.41-3.05 4.41-1.64 0-2.52-.83-2.52-.83s-.04.46-.09.52c-.03.06-.08.08-.14.08h-1.48c-.1 0-.19-.08-.19-.17l.02-11.11c0-.09.08-.17.17-.17h2.13c.09 0 .17.08.17.17v3.77s.82-.53 2.02-.53l-.01-.02c1.2 0 2.97.45 2.97 3.88zm-8.72-3.61H33.84c-.11 0-.17.08-.17.19v5.44s-.55.39-1.3.39-.97-.34-.97-1.09V6.25c0-.09-.08-.17-.17-.17h-2.14c-.09 0-.17.08-.17.17v5.11c0 2.2 1.23 2.75 2.92 2.75 1.39 0 2.52-.77 2.52-.77s.05.39.08.45c.02.05.09.09.16.09h1.34c.11 0 .17-.08.17-.17l.02-7.47c0-.09-.08-.17-.19-.17zm-23.7-.01h-2.13c-.09 0-.17.09-.17.2v7.34c0 .2.13.27.3.27h1.92c.2 0 .25-.09.25-.27V6.23c0-.09-.08-.17-.17-.17zm-1.05-3.38c-.77 0-1.38.61-1.38 1.38 0 .77.61 1.38 1.38 1.38.75 0 1.36-.61 1.36-1.38 0-.77-.61-1.38-1.36-1.38zm16.49-.25h-2.11c-.09 0-.17.08-.17.17v4.09h-3.31V2.6c0-.09-.08-.17-.17-.17h-2.13c-.09 0-.17.08-.17.17v11.11c0 .09.09.17.17.17h2.13c.09 0 .17-.08.17-.17V8.96h3.31l-.02 4.75c0 .09.08.17.17.17h2.13c.09 0 .17-.08.17-.17V2.6c0-.09-.08-.17-.17-.17zM8.81 7.35v5.74c0 .04-.01.11-.06.13 0 0-1.25.89-3.31.89-2.49 0-5.44-.78-5.44-5.92S2.58 1.99 5.1 2c2.18 0 3.06.49 3.2.58.04.05.06.09.06.14L7.94 4.5c0 .09-.09.2-.2.17-.36-.11-.9-.33-2.17-.33-1.47 0-3.05.42-3.05 3.73s1.5 3.7 2.58 3.7c.92 0 1.25-.11 1.25-.11v-2.3H4.88c-.11 0-.19-.08-.19-.17V7.35c0-.09.08-.17.19-.17h3.74c.11 0 .19.08.19.17z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="45" height="16" viewBox="0 0 45 16"><path fill-rule="evenodd" d="M18.53 12.03h-.02c.009 0 .015.01.024.011h.006l-.01-.01zm.004.011c-.093.001-.327.05-.574.05-.78 0-1.05-.36-1.05-.83V8.13h1.59c.09 0 .16-.08.16-.19v-1.7c0-.09-.08-.17-.16-.17h-1.59V3.96c0-.08-.05-.13-.14-.13h-2.16c-.09 0-.14.05-.14.13v2.17s-1.09.27-1.16.28c-.08.02-.13.09-.13.17v1.36c0 .11.08.19.17.19h1.11v3.28c0 2.44 1.7 2.69 2.86 2.69.53 0 1.17-.17 1.27-.22.06-.02.09-.09.09-.16v-1.5a.177.177 0 0 0-.146-.18zm23.696-2.2c0-1.81-.73-2.05-1.5-1.97-.6.04-1.08.34-1.08.34v3.52s.49.34 1.22.36c1.03.03 1.36-.34 1.36-2.25zm2.43-.16c0 3.43-1.11 4.41-3.05 4.41-1.64 0-2.52-.83-2.52-.83s-.04.46-.09.52c-.03.06-.08.08-.14.08h-1.48c-.1 0-.19-.08-.19-.17l.02-11.11c0-.09.08-.17.17-.17h2.13c.09 0 .17.08.17.17v3.77s.82-.53 2.02-.53l-.01-.02c1.2 0 2.97.45 2.97 3.88zm-8.72-3.61h-2.1c-.11 0-.17.08-.17.19v5.44s-.55.39-1.3.39-.97-.34-.97-1.09V6.25c0-.09-.08-.17-.17-.17h-2.14c-.09 0-.17.08-.17.17v5.11c0 2.2 1.23 2.75 2.92 2.75 1.39 0 2.52-.77 2.52-.77s.05.39.08.45c.02.05.09.09.16.09h1.34c.11 0 .17-.08.17-.17l.02-7.47c0-.09-.08-.17-.19-.17zm-23.7-.01h-2.13c-.09 0-.17.09-.17.2v7.34c0 .2.13.27.3.27h1.92c.2 0 .25-.09.25-.27V6.23c0-.09-.08-.17-.17-.17zm-1.05-3.38c-.77 0-1.38.61-1.38 1.38 0 .77.61 1.38 1.38 1.38.75 0 1.36-.61 1.36-1.38 0-.77-.61-1.38-1.36-1.38zm16.49-.25h-2.11c-.09 0-.17.08-.17.17v4.09h-3.31V2.6c0-.09-.08-.17-.17-.17h-2.13c-.09 0-.17.08-.17.17v11.11c0 .09.09.17.17.17h2.13c.09 0 .17-.08.17-.17V8.96h3.31l-.02 4.75c0 .09.08.17.17.17h2.13c.09 0 .17-.08.17-.17V2.6c0-.09-.08-.17-.17-.17zM8.81 7.35v5.74c0 .04-.01.11-.06.13 0 0-1.25.89-3.31.89-2.49 0-5.44-.78-5.44-5.92S2.58 1.99 5.1 2c2.18 0 3.06.49 3.2.58.04.05.06.09.06.14L7.94 4.5c0 .09-.09.2-.2.17-.36-.11-.9-.33-2.17-.33-1.47 0-3.05.42-3.05 3.73s1.5 3.7 2.58 3.7c.92 0 1.25-.11 1.25-.11v-2.3H4.88c-.11 0-.19-.08-.19-.17V7.35c0-.09.08-.17.19-.17h3.74c.11 0 .19.08.19.17z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/mortar-board.svg b/htdocs/theme/common/octicons/build/svg/mortar-board.svg
    index 302415b1736..869f9ae8e7c 100644
    --- a/htdocs/theme/common/octicons/build/svg/mortar-board.svg
    +++ b/htdocs/theme/common/octicons/build/svg/mortar-board.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M7.808 9.405l-3.83-1.19c-4-8 0 1.5 0 2.5s1.8 1.5 4 1.5 4-.5 4-1.5v-2.5l-3.83 1.19a.73.73 0 0 1-.36 0h.02zm.28-6.39a.34.34 0 0 0-.2 0l-7.64 2.38a.35.35 0 0 0 0 .67l1.73.55v1.77c-.3.17-.5.5-.5.86 0 .19.05.36.14.5-.08.14-.14.31-.14.5v2.58c0 .55 2 .55 2 0v-2.58c0-.19-.05-.36-.14-.5.08-.14.14-.31.14-.5 0-.38-.2-.69-.5-.86v-1.45l4.89 1.53c.06.02.14.02.2 0l7.64-2.38a.35.35 0 0 0 0-.67l-7.63-2.39.01-.01zm-.09 3.2c-.55 0-1-.22-1-.5s.45-.5 1-.5 1 .22 1 .5-.45.5-1 .5z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M7.83 9.19L4 8c-4-8 0 1.5 0 2.5S5.8 12 8 12s4-.5 4-1.5V8L8.17 9.19a.73.73 0 0 1-.36 0h.02zm.28-6.39a.34.34 0 0 0-.2 0L.27 5.18a.35.35 0 0 0 0 .67L2 6.4v1.77c-.3.17-.5.5-.5.86 0 .19.05.36.14.5-.08.14-.14.31-.14.5v2.58c0 .55 2 .55 2 0v-2.58c0-.19-.05-.36-.14-.5.08-.14.14-.31.14-.5 0-.38-.2-.69-.5-.86V6.72l4.89 1.53c.06.02.14.02.2 0l7.64-2.38a.35.35 0 0 0 0-.67L8.1 2.81l.01-.01zM8.02 6c-.55 0-1-.22-1-.5s.45-.5 1-.5 1 .22 1 .5-.45.5-1 .5z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/mute.svg b/htdocs/theme/common/octicons/build/svg/mute.svg
    index 4d894a1cadd..e448808fbe5 100644
    --- a/htdocs/theme/common/octicons/build/svg/mute.svg
    +++ b/htdocs/theme/common/octicons/build/svg/mute.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 2.75v10.38c0 .67-.81 1-1.28.53L3 9.94H1c-.55 0-1-.45-1-1v-2c0-.55.45-1 1-1h2l3.72-3.72C7.19 1.75 8 2.08 8 2.75zm7.53 3.22l-1.06-1.06-1.97 1.97-1.97-1.97-1.06 1.06 1.97 1.97-1.97 1.97 1.06 1.06L12.5 9l1.97 1.97 1.06-1.06-1.97-1.97 1.97-1.97z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 2.81v10.38c0 .67-.81 1-1.28.53L3 10H1c-.55 0-1-.45-1-1V7c0-.55.45-1 1-1h2l3.72-3.72C7.19 1.81 8 2.14 8 2.81zm7.53 3.22l-1.06-1.06-1.97 1.97-1.97-1.97-1.06 1.06L11.44 8 9.47 9.97l1.06 1.06 1.97-1.97 1.97 1.97 1.06-1.06L13.56 8l1.97-1.97z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/organization.svg b/htdocs/theme/common/octicons/build/svg/organization.svg
    index af333e418dd..6bf4ae94b40 100644
    --- a/htdocs/theme/common/octicons/build/svg/organization.svg
    +++ b/htdocs/theme/common/octicons/build/svg/organization.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M16 12.999c0 .439-.45 1-1 1H7.995c-.539 0-.994-.447-.995-.999H1c-.54 0-1-.561-1-1 0-2.634 3-4 3-4s.229-.409 0-1c-.841-.621-1.058-.59-1-3 .058-2.419 1.367-3 2.5-3s2.442.58 2.5 3c.058 2.41-.159 2.379-1 3-.229.59 0 1 0 1s1.549.711 2.42 2.088A6.78 6.78 0 0 1 10 8.999s.229-.409 0-1c-.841-.62-1.058-.59-1-3 .058-2.419 1.367-3 2.5-3s2.437.581 2.495 3c.059 2.41-.158 2.38-1 3-.229.59 0 1 0 1s3.005 1.366 3.005 4z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M16 12.999c0 .439-.45 1-1 1H7.995c-.539 0-.994-.447-.995-.999H1c-.54 0-1-.561-1-1 0-2.634 3-4 3-4s.229-.409 0-1c-.841-.621-1.058-.59-1-3 .058-2.419 1.367-3 2.5-3s2.442.58 2.5 3c.058 2.41-.159 2.379-1 3-.229.59 0 1 0 1s1.549.711 2.42 2.088C9.196 9.369 10 8.999 10 8.999s.229-.409 0-1c-.841-.62-1.058-.59-1-3 .058-2.419 1.367-3 2.5-3s2.437.581 2.495 3c.059 2.41-.158 2.38-1 3-.229.59 0 1 0 1s3.005 1.366 3.005 4z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/package.svg b/htdocs/theme/common/octicons/build/svg/package.svg
    index 720e30026a5..2db03518db2 100644
    --- a/htdocs/theme/common/octicons/build/svg/package.svg
    +++ b/htdocs/theme/common/octicons/build/svg/package.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1 4.732v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97v-7.47c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 0 0-.5 0l-6.5 1.74c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59v-6.77l6 1.61v6.75zm-6-9.36l2.5-.67 6.5 1.73-2.5.67L2 4.463zm13 7.77l-6 1.59v-6.75l2-.55v2.44l2-.53v-2.44l2-.53v6.77zm-2-7.24l-6.5-1.73 2-.53 6.5 1.73-2 .53z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1 4.27v7.47c0 .45.3.84.75.97l6.5 1.73c.16.05.34.05.5 0l6.5-1.73c.45-.13.75-.52.75-.97V4.27c0-.45-.3-.84-.75-.97l-6.5-1.74a1.4 1.4 0 0 0-.5 0L1.75 3.3c-.45.13-.75.52-.75.97zm7 9.09l-6-1.59V5l6 1.61v6.75zM2 4l2.5-.67L11 5.06l-2.5.67L2 4zm13 7.77l-6 1.59V6.61l2-.55V8.5l2-.53V5.53L15 5v6.77zm-2-7.24L6.5 2.8l2-.53L15 4l-2 .53z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/pencil.svg b/htdocs/theme/common/octicons/build/svg/pencil.svg
    index 41c6e7ec6f8..8702f4dcecd 100644
    --- a/htdocs/theme/common/octicons/build/svg/pencil.svg
    +++ b/htdocs/theme/common/octicons/build/svg/pencil.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M0 11.592v3h3l8-8-3-3-8 8zm3 2H1v-2h1v1h1v1zm10.3-9.3l-1.3 1.3-3-3 1.3-1.3a.996.996 0 0 1 1.41 0l1.59 1.59c.39.39.39 1.02 0 1.41z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M0 12v3h3l8-8-3-3-8 8zm3 2H1v-2h1v1h1v1zm10.3-9.3L12 6 9 3l1.3-1.3a.996.996 0 0 1 1.41 0l1.59 1.59c.39.39.39 1.02 0 1.41z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/pin.svg b/htdocs/theme/common/octicons/build/svg/pin.svg
    index 861ae05afdc..95405c537c0 100644
    --- a/htdocs/theme/common/octicons/build/svg/pin.svg
    +++ b/htdocs/theme/common/octicons/build/svg/pin.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M10 1.494v.8l.5 1-4.5 3H2.2c-.44 0-.67.53-.34.86L5 10.294l-4 5 5-4 3.14 3.14a.5.5 0 0 0 .86-.34v-3.8l3-4.5 1 .5h.8c.44 0 .67-.53.34-.86l-4.28-4.28a.5.5 0 0 0-.86.34z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M10 1.2V2l.5 1L6 6H2.2c-.44 0-.67.53-.34.86L5 10l-4 5 5-4 3.14 3.14a.5.5 0 0 0 .86-.34V10l3-4.5 1 .5h.8c.44 0 .67-.53.34-.86L10.86.86a.5.5 0 0 0-.86.34z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/pulse.svg b/htdocs/theme/common/octicons/build/svg/pulse.svg
    index d87d04ea419..4ec57bacaae 100644
    --- a/htdocs/theme/common/octicons/build/svg/pulse.svg
    +++ b/htdocs/theme/common/octicons/build/svg/pulse.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M11.5 8.4L8.8 5.8 6.6 8.9 5.5 2 2.38 8.4H0v2h3.6l.9-1.8.9 5.4L9 8.9l1.6 1.5H14v-2h-2.5z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M11.5 8L8.8 5.4 6.6 8.5 5.5 1.6 2.38 8H0v2h3.6l.9-1.8.9 5.4L9 8.5l1.6 1.5H14V8h-2.5z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/quote.svg b/htdocs/theme/common/octicons/build/svg/quote.svg
    index 7b5f4a7f191..da5c2b22cef 100644
    --- a/htdocs/theme/common/octicons/build/svg/quote.svg
    +++ b/htdocs/theme/common/octicons/build/svg/quote.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.16 3.84C3.73 5.4 2.55 7.01 2.55 9.7c.16-.05.3-.05.44-.05 1.27 0 2.5.86 2.5 2.41 0 1.61-1.03 2.61-2.5 2.61-1.9 0-2.99-1.52-2.99-4.25C0 6.62 1.75 3.89 5.02 2l1.14 1.84zm7 0C10.73 5.4 9.55 7.01 9.55 9.7c.16-.05.3-.05.44-.05 1.27 0 2.5.86 2.5 2.41 0 1.61-1.03 2.61-2.5 2.61-1.89 0-2.98-1.52-2.98-4.25 0-3.8 1.75-6.53 5.02-8.42l1.14 1.84h-.01z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.16 3.5C3.73 5.06 2.55 6.67 2.55 9.36c.16-.05.3-.05.44-.05 1.27 0 2.5.86 2.5 2.41 0 1.61-1.03 2.61-2.5 2.61-1.9 0-2.99-1.52-2.99-4.25 0-3.8 1.75-6.53 5.02-8.42L6.16 3.5zm7 0c-2.43 1.56-3.61 3.17-3.61 5.86.16-.05.3-.05.44-.05 1.27 0 2.5.86 2.5 2.41 0 1.61-1.03 2.61-2.5 2.61-1.89 0-2.98-1.52-2.98-4.25 0-3.8 1.75-6.53 5.02-8.42l1.14 1.84h-.01z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/radio-tower.svg b/htdocs/theme/common/octicons/build/svg/radio-tower.svg
    index a438661ce55..f89a7052a7a 100644
    --- a/htdocs/theme/common/octicons/build/svg/radio-tower.svg
    +++ b/htdocs/theme/common/octicons/build/svg/radio-tower.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4.78 5.78c.25-.25.25-.67 0-.92-.32-.33-.48-.76-.48-1.19 0-.43.16-.86.48-1.19.25-.26.25-.67 0-.92a.613.613 0 0 0-.45-.19c-.16 0-.33.06-.45.19-.57.58-.85 1.35-.85 2.11 0 .76.29 1.53.85 2.11.25.25.66.25.9 0zM2.32.19a.651.651 0 0 0-.92 0C.47 1.15 0 2.41 0 3.66c0 1.26.47 2.52 1.4 3.48.25.26.66.26.91 0s.25-.68 0-.94c-.68-.7-1.02-1.62-1.02-2.54 0-.92.34-1.84 1.02-2.54a.66.66 0 0 0 .01-.93zm5.69 5.1a1.62 1.62 0 1 0-1.62-1.62c-.01.89.72 1.62 1.62 1.62zM14.58.2a.628.628 0 0 0-.91 0c-.25.26-.25.68 0 .94.68.7 1.02 1.62 1.02 2.54 0 .92-.34 1.83-1.02 2.54-.25.26-.25.68 0 .94a.651.651 0 0 0 .92 0c.93-.96 1.4-2.22 1.4-3.48A5.048 5.048 0 0 0 14.58.2zM8.01 6.59c-.41 0-.83-.1-1.2-.3l-3.15 8.37h1.49l.86-1h4l.84 1h1.49L9.2 6.29c-.38.2-.78.3-1.19.3zM8 7.07l1.01 3.6h-2L8 7.07zm-1.99 5.59l1-1h2l1 1h-4zm5.19-11.1c-.25.25-.25.67 0 .92.32.33.48.76.48 1.19 0 .43-.16.86-.48 1.19-.25.26-.25.67 0 .92a.63.63 0 0 0 .9 0c.57-.58.85-1.35.85-2.11 0-.76-.28-1.53-.85-2.11a.634.634 0 0 0-.9 0z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M4.79 6.11c.25-.25.25-.67 0-.92-.32-.33-.48-.76-.48-1.19 0-.43.16-.86.48-1.19.25-.26.25-.67 0-.92a.613.613 0 0 0-.45-.19c-.16 0-.33.06-.45.19-.57.58-.85 1.35-.85 2.11 0 .76.29 1.53.85 2.11.25.25.66.25.9 0zM2.33.52a.651.651 0 0 0-.92 0C.48 1.48.01 2.74.01 3.99c0 1.26.47 2.52 1.4 3.48.25.26.66.26.91 0s.25-.68 0-.94c-.68-.7-1.02-1.62-1.02-2.54 0-.92.34-1.84 1.02-2.54a.66.66 0 0 0 .01-.93zm5.69 5.1A1.62 1.62 0 1 0 6.4 4c-.01.89.72 1.62 1.62 1.62zM14.59.53a.628.628 0 0 0-.91 0c-.25.26-.25.68 0 .94.68.7 1.02 1.62 1.02 2.54 0 .92-.34 1.83-1.02 2.54-.25.26-.25.68 0 .94a.651.651 0 0 0 .92 0c.93-.96 1.4-2.22 1.4-3.48A5.048 5.048 0 0 0 14.59.53zM8.02 6.92c-.41 0-.83-.1-1.2-.3l-3.15 8.37h1.49l.86-1h4l.84 1h1.49L9.21 6.62c-.38.2-.78.3-1.19.3zm-.01.48L9.02 11h-2l.99-3.6zm-1.99 5.59l1-1h2l1 1h-4zm5.19-11.1c-.25.25-.25.67 0 .92.32.33.48.76.48 1.19 0 .43-.16.86-.48 1.19-.25.26-.25.67 0 .92a.63.63 0 0 0 .9 0c.57-.58.85-1.35.85-2.11 0-.76-.28-1.53-.85-2.11a.634.634 0 0 0-.9 0z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/reply.svg b/htdocs/theme/common/octicons/build/svg/reply.svg
    index 5f89aad3010..12717db93da 100644
    --- a/htdocs/theme/common/octicons/build/svg/reply.svg
    +++ b/htdocs/theme/common/octicons/build/svg/reply.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.5 3.5c3.92.44 8 3.125 8 10-2.312-5.062-4.75-6-8-6V11L1 5.5 6.5 0v3.5z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6 3.5c3.92.44 8 3.125 8 10-2.312-5.062-4.75-6-8-6V11L.5 5.5 6 0v3.5z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/sign-out.svg b/htdocs/theme/common/octicons/build/svg/sign-out.svg
    index e0893cbce43..ccfc4959ae3 100644
    --- a/htdocs/theme/common/octicons/build/svg/sign-out.svg
    +++ b/htdocs/theme/common/octicons/build/svg/sign-out.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M12 9V7H8V5h4V3l4 3-4 3zm-2 3H6V3L2 1h8v3h1V1c0-.55-.45-1-1-1H1C.45 0 0 .45 0 1v11.38c0 .39.22.73.55.91L6 16.01V13h4c.55 0 1-.45 1-1V8h-1v4z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M11.992 8.994V6.996H7.995v-2h3.997V2.999l3.998 2.998-3.998 2.998zm-1.998 2.998H5.996V2.998L2 1h7.995v2.998h1V1c0-.55-.45-.999-1-.999H.999A1.001 1.001 0 0 0 0 1v11.372c0 .39.22.73.55.91L5.996 16v-3.008h3.998c.55 0 1-.45 1-1V7.995h-1v3.997z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/squirrel.svg b/htdocs/theme/common/octicons/build/svg/squirrel.svg
    index 7c974be5979..3e5b51beea4 100644
    --- a/htdocs/theme/common/octicons/build/svg/squirrel.svg
    +++ b/htdocs/theme/common/octicons/build/svg/squirrel.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M11.75 1c-2.21 0-4 1.31-4 2.92 0 1.94.5 3.03 0 6.08 0-4.5-2.77-6.34-4-6.34.05-.5-.48-.66-.48-.66s-.22.11-.3.34c-.27-.31-.56-.27-.56-.27l-.13.58S.45 4.29.43 6.87c.2.33 1.53.6 2.47.43.89.05.67.79.47.99C2.53 9.13 1.75 8 .75 8s-1 1 0 1 1 1 3 1c-3.09 1.2 0 4 0 4h-1c-1 0-1 1-1 1h6c3 0 5-1 5-3.47 0-.85-.43-1.79-1-2.53-1.11-1.46.23-2.68 1-2 .77.68 3 1 3-2 0-2.21-1.79-4-4-4zm-9.5 5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5.22.5.5-.22.5-.5.5z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M12 1C9.79 1 8 2.31 8 3.92c0 1.94.5 3.03 0 6.08 0-4.5-2.77-6.34-4-6.34.05-.5-.48-.66-.48-.66s-.22.11-.3.34c-.27-.31-.56-.27-.56-.27l-.13.58S.7 4.29.68 6.87c.2.33 1.53.6 2.47.43.89.05.67.79.47.99C2.78 9.13 2 8 1 8S0 9 1 9s1 1 3 1c-3.09 1.2 0 4 0 4H3c-1 0-1 1-1 1h6c3 0 5-1 5-3.47 0-.85-.43-1.79-1-2.53-1.11-1.46.23-2.68 1-2 .77.68 3 1 3-2 0-2.21-1.79-4-4-4zM2.5 6c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5.22.5.5-.22.5-.5.5z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/sync.svg b/htdocs/theme/common/octicons/build/svg/sync.svg
    index 61bef53cbd0..692349a1f93 100644
    --- a/htdocs/theme/common/octicons/build/svg/sync.svg
    +++ b/htdocs/theme/common/octicons/build/svg/sync.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M10.236 7.4a4.15 4.15 0 0 1-1.2 3.6 4.346 4.346 0 0 1-5.41.54l1.17-1.14-4.3-.6.6 4.2 1.31-1.26c2.36 1.74 5.7 1.57 7.84-.54a5.876 5.876 0 0 0 1.74-4.46l-1.75-.34zM2.956 5a4.346 4.346 0 0 1 5.41-.54L7.196 5.6l4.3.6-.6-4.2-1.31 1.26c-2.36-1.74-5.7-1.57-7.85.54-1.24 1.23-1.8 2.85-1.73 4.46l1.75.35A4.17 4.17 0 0 1 2.956 5z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M10.24 7.4a4.15 4.15 0 0 1-1.2 3.6 4.346 4.346 0 0 1-5.41.54L4.8 10.4.5 9.8l.6 4.2 1.31-1.26c2.36 1.74 5.7 1.57 7.84-.54a5.876 5.876 0 0 0 1.74-4.46l-1.75-.34zM2.96 5a4.346 4.346 0 0 1 5.41-.54L7.2 5.6l4.3.6-.6-4.2-1.31 1.26c-2.36-1.74-5.7-1.57-7.85.54C.5 5.03-.06 6.65.01 8.26l1.75.35A4.17 4.17 0 0 1 2.96 5z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/tag.svg b/htdocs/theme/common/octicons/build/svg/tag.svg
    index 6c8a9c43c1e..aee833d91b9 100644
    --- a/htdocs/theme/common/octicons/build/svg/tag.svg
    +++ b/htdocs/theme/common/octicons/build/svg/tag.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7.73 1.73C7.26 1.26 6.62 1 5.96 1H3.5C2.13 1 1 2.13 1 3.5v2.47c0 .66.27 1.3.73 1.77l6.06 6.06c.39.39 1.02.39 1.41 0l4.59-4.59a.996.996 0 0 0 0-1.41L7.73 1.73zM2.38 7.09c-.31-.3-.47-.7-.47-1.13V3.5c0-.88.72-1.59 1.59-1.59h2.47c.42 0 .83.16 1.13.47l6.14 6.13-4.73 4.73-6.13-6.15zM3.01 3h2v2H3V3h.01z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7.685 1.72a2.49 2.49 0 0 0-1.76-.726H3.48A2.5 2.5 0 0 0 .994 3.48v2.456c0 .656.269 1.292.726 1.76l6.024 6.024a.99.99 0 0 0 1.402 0l4.563-4.563a.99.99 0 0 0 0-1.402L7.685 1.72zM2.366 7.048a1.54 1.54 0 0 1-.467-1.123V3.48c0-.874.716-1.58 1.58-1.58h2.456c.418 0 .825.159 1.123.467l6.104 6.094-4.702 4.702-6.094-6.114zm.626-4.066h1.989v1.989H2.982V2.982h.01z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/telescope.svg b/htdocs/theme/common/octicons/build/svg/telescope.svg
    index ce4bfaaa184..95047dc191d 100644
    --- a/htdocs/theme/common/octicons/build/svg/telescope.svg
    +++ b/htdocs/theme/common/octicons/build/svg/telescope.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7.59 9l3 6h-1l-2-4v5h-1v-6l-2 5h-1l2-5 2-1zm-1-9h-1v1h1V0zm-2 3h-1v1h1V3zm-3-2h-1v1h1V1zM.22 9a.52.52 0 0 0-.16.67l.55.92c.13.23.41.31.64.2l1.39-.66-1.16-2-1.27.86.01.01zm7.89-5.39l-5.8 3.95L3.54 9.7l6.33-3.03L8.1 3.61h.01zm4.22 1.28l-1.47-2.52a.51.51 0 0 0-.72-.17l-1.2.83 1.84 3.2 1.33-.64c.27-.13.36-.44.22-.7z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="evenodd" d="M8 9l3 6h-1l-2-4v5H7v-6l-2 5H4l2-5 2-1zM7 0H6v1h1V0zM5 3H4v1h1V3zM2 1H1v1h1V1zM.63 9a.52.52 0 0 0-.16.67l.55.92c.13.23.41.31.64.2l1.39-.66-1.16-2-1.27.86.01.01zm7.89-5.39l-5.8 3.95L3.95 9.7l6.33-3.03-1.77-3.06h.01zm4.22 1.28l-1.47-2.52a.51.51 0 0 0-.72-.17l-1.2.83 1.84 3.2 1.33-.64c.27-.13.36-.44.22-.7z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/thumbsdown.svg b/htdocs/theme/common/octicons/build/svg/thumbsdown.svg
    index ac4c7c6996b..aa319a29879 100644
    --- a/htdocs/theme/common/octicons/build/svg/thumbsdown.svg
    +++ b/htdocs/theme/common/octicons/build/svg/thumbsdown.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15.98 7.83l-.97-5.95C14.84.5 13.13 0 12 0H5.69c-.2 0-.38.05-.53.14L3.72 1H2C.94 1 0 1.94 0 3v4c0 1.06.94 2.02 2 2h2c.91 0 1.39.45 2.39 1.55.91 1 .88 1.8.63 3.27-.08.5.06 1 .42 1.42.39.47.98.77 1.56.77 1.83 0 3-3.72 3-5.02l-.02-.98h2.04c1.16 0 1.95-.8 1.98-1.97 0-.06.02-.13-.02-.2v-.01zm-1.97 1.19h-1.99c-.7 0-1.03.28-1.03.97l.03 1.03c0 1.27-1.17 4-2 4-.5 0-1.08-.5-1-1 .25-1.58.34-2.78-.89-4.14C6.11 8.75 5.36 8 4 8V2l1.67-1H12c.73 0 1.95.31 2 1l.02.02 1 6c-.03.64-.38 1-1 1h-.01z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15.97 7.825L15 1.88C14.83.499 13.123 0 11.993 0H5.686c-.2 0-.38.05-.53.14L3.719 1h-1.72C.94 1 0 1.938 0 2.997v3.998c0 1.059.94 2.018 1.999 1.998h1.998c.91 0 1.39.45 2.389 1.55.91.999.88 1.798.63 3.267-.08.5.06 1 .42 1.42.39.47.979.769 1.558.769 1.83 0 2.998-3.718 2.998-5.017l-.02-.98h2.04c1.159 0 1.948-.799 1.978-1.968 0-.06.02-.13-.02-.2v-.01zm-1.969 1.19h-1.989c-.7 0-1.029.28-1.029.969l.03 1.03c0 1.268-1.17 3.997-1.999 3.997-.5 0-1.079-.5-.999-1 .25-1.579.34-2.778-.89-4.137-1.019-1.13-1.768-1.879-3.127-1.879V1.999l1.668-1h6.326c.73 0 1.95.31 2 1l.02.02.999 5.996c-.03.64-.38 1-1 1h-.01z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/thumbsup.svg b/htdocs/theme/common/octicons/build/svg/thumbsup.svg
    index e77f1e30e57..5b197266c1a 100644
    --- a/htdocs/theme/common/octicons/build/svg/thumbsup.svg
    +++ b/htdocs/theme/common/octicons/build/svg/thumbsup.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M14 14c-.05.69-1.27 1-2 1H5.67L4 14V8c1.36 0 2.11-.75 3.13-1.88 1.23-1.36 1.14-2.56.88-4.13-.08-.5.5-1 1-1 .83 0 2 2.73 2 4l-.02 1.03c0 .69.33.97 1.02.97h2c.63 0 .98.36 1 1l-1 6L14 14zm0-8h-2.02l.02-.98C12 3.72 10.83 0 9 0c-.58 0-1.17.3-1.56.77-.36.41-.5.91-.42 1.41.25 1.48.28 2.28-.63 3.28-1 1.09-1.48 1.55-2.39 1.55H2C.94 7 0 7.94 0 9v4c0 1.06.94 2 2 2h1.72l1.44.86c.16.09.33.14.52.14h6.33c1.13 0 2.84-.5 3-1.88l.98-5.95c.02-.08.02-.14.02-.2-.03-1.17-.84-1.97-2-1.97H14z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M13.991 13.991c-.05.69-1.269 1-1.998 1H5.665l-1.669-1V7.995c1.36 0 2.11-.75 3.129-1.879 1.229-1.359 1.139-2.558.879-4.127-.08-.5.5-1 1-1 .829 0 1.998 2.729 1.998 3.998l-.02 1.03c0 .689.33.969 1.02.969H14c.63 0 .98.36 1 .999l-1 5.996-.01.01zm0-7.995h-2.018l.02-.98C11.992 3.719 10.822 0 8.993 0c-.58 0-1.169.3-1.559.77-.36.41-.5.909-.42 1.409.25 1.479.28 2.278-.629 3.278-1 1.089-1.48 1.549-2.389 1.549H2c-1.061-.01-2 .929-2 1.988v3.998c0 1.06.94 1.999 1.999 1.999h1.719l1.439.86c.16.089.33.139.52.139h6.325c1.13 0 2.839-.5 2.999-1.879l.979-5.946c.02-.08.02-.14.02-.2-.03-1.17-.84-1.969-1.999-1.969h-.01z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/unmute.svg b/htdocs/theme/common/octicons/build/svg/unmute.svg
    index 531aafc8b46..19b375fb08c 100644
    --- a/htdocs/theme/common/octicons/build/svg/unmute.svg
    +++ b/htdocs/theme/common/octicons/build/svg/unmute.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M12 7.96c0 1.09-.45 2.09-1.17 2.83l-.67-.67c.55-.56.89-1.31.89-2.16 0-.85-.34-1.61-.89-2.16l.67-.67A3.99 3.99 0 0 1 12 7.96zM7.72 2.22L4 5.94H2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2l3.72 3.72c.47.47 1.28.14 1.28-.53V2.75c0-.67-.81-1-1.28-.53zm5.94.08l-.67.67a6.996 6.996 0 0 1 2.06 4.98c0 1.94-.78 3.7-2.06 4.98l.67.67A7.973 7.973 0 0 0 16 7.94c0-2.22-.89-4.22-2.34-5.66v.02zm-1.41 1.41l-.69.67a5.05 5.05 0 0 1 1.48 3.58c0 1.39-.56 2.66-1.48 3.56l.69.67A5.97 5.97 0 0 0 14 7.96c0-1.65-.67-3.16-1.75-4.25z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M12 8.02c0 1.09-.45 2.09-1.17 2.83l-.67-.67c.55-.56.89-1.31.89-2.16 0-.85-.34-1.61-.89-2.16l.67-.67A3.99 3.99 0 0 1 12 8.02zM7.72 2.28L4 6H2c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h2l3.72 3.72c.47.47 1.28.14 1.28-.53V2.81c0-.67-.81-1-1.28-.53zm5.94.08l-.67.67a6.996 6.996 0 0 1 2.06 4.98c0 1.94-.78 3.7-2.06 4.98l.67.67A7.973 7.973 0 0 0 16 8c0-2.22-.89-4.22-2.34-5.66v.02zm-1.41 1.41l-.69.67a5.05 5.05 0 0 1 1.48 3.58c0 1.39-.56 2.66-1.48 3.56l.69.67A5.971 5.971 0 0 0 14 8.02c0-1.65-.67-3.16-1.75-4.25z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/unverified.svg b/htdocs/theme/common/octicons/build/svg/unverified.svg
    index becff6dfc8f..cf04ce3f81e 100644
    --- a/htdocs/theme/common/octicons/build/svg/unverified.svg
    +++ b/htdocs/theme/common/octicons/build/svg/unverified.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15.68 7.07L14.6 5.73c-.17-.22-.28-.48-.31-.77l-.19-1.7a1.51 1.51 0 0 0-1.33-1.33l-1.7-.19c-.3-.03-.56-.16-.78-.33L8.95.33c-.55-.44-1.33-.44-1.88 0L5.73 1.41c-.22.17-.48.28-.77.31l-1.7.19c-.7.08-1.25.63-1.33 1.33l-.19 1.7c-.03.3-.16.56-.33.78L.33 7.06c-.44.55-.44 1.33 0 1.88l1.08 1.34c.17.22.28.48.31.77l.19 1.7c.08.7.63 1.25 1.33 1.33l1.7.19c.3.03.56.16.78.33l1.34 1.08c.55.44 1.33.44 1.88 0l1.34-1.08c.22-.17.48-.28.77-.31l1.7-.19c.7-.08 1.25-.63 1.33-1.33l.19-1.7c.03-.3.16-.56.33-.78l1.08-1.34c.44-.55.44-1.33 0-1.88zm-6.67 4.44c0 .28-.22.5-.5.5h-1c-.27 0-.5-.22-.5-.5v-1c0-.28.23-.5.5-.5h1c.28 0 .5.22.5.5v1zm1.56-4.89c-.06.17-.17.33-.3.47-.13.16-.14.19-.33.38-.16.17-.31.3-.52.45-.11.09-.2.19-.28.27-.08.08-.14.17-.19.27-.05.1-.08.19-.11.3-.03.11-.03.13-.03.25H7.14c0-.22 0-.31.03-.48.03-.19.08-.36.14-.52.06-.14.14-.28.25-.42.11-.13.23-.25.41-.38.27-.19.36-.3.48-.52.12-.22.2-.38.2-.59 0-.27-.06-.45-.2-.58-.13-.13-.31-.19-.58-.19-.09 0-.19.02-.3.05-.11.03-.17.09-.25.16-.08.07-.14.11-.2.2a.41.41 0 0 0-.09.28h-2c0-.38.13-.56.27-.83.16-.27.36-.5.61-.67.25-.17.55-.3.88-.38.33-.08.7-.13 1.09-.13.44 0 .83.05 1.17.13.34.09.63.22.88.39.23.17.41.38.55.63.13.25.19.55.19.88 0 .22 0 .42-.08.59l-.02-.01z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15.67 7.066l-1.08-1.34a1.5 1.5 0 0 1-.309-.77l-.19-1.698a1.51 1.51 0 0 0-1.329-1.33l-1.699-.19c-.3-.03-.56-.159-.78-.329L8.945.33a1.504 1.504 0 0 0-1.878 0l-1.34 1.08a1.5 1.5 0 0 1-.77.31l-1.698.19c-.7.08-1.25.63-1.33 1.329l-.19 1.699c-.03.3-.159.56-.329.78L.33 7.055a1.504 1.504 0 0 0 0 1.878l1.08 1.34c.17.22.28.48.31.77l.19 1.698c.08.7.63 1.25 1.329 1.33l1.699.19c.3.03.56.159.78.329l1.339 1.08c.55.439 1.329.439 1.878 0l1.34-1.08c.22-.17.48-.28.77-.31l1.698-.19c.7-.08 1.25-.63 1.33-1.329l.19-1.699c.03-.3.159-.56.329-.78l1.08-1.339a1.504 1.504 0 0 0 0-1.878zm-6.666 4.437c0 .28-.22.5-.5.5h-.999c-.27 0-.5-.22-.5-.5v-1c0-.28.23-.5.5-.5h1c.28 0 .5.22.5.5v1zm1.56-4.887c-.06.17-.17.33-.3.47-.13.16-.14.19-.33.38-.16.17-.31.3-.52.449-.11.09-.2.19-.28.27-.08.08-.14.17-.19.27-.05.1-.08.19-.11.3-.03.11-.03.13-.03.25H7.136c0-.22 0-.31.03-.48.03-.19.08-.36.14-.52.06-.14.14-.28.25-.42.11-.13.23-.25.409-.38.27-.19.36-.3.48-.52.12-.219.2-.379.2-.589 0-.27-.06-.45-.2-.58-.13-.13-.31-.19-.58-.19-.09 0-.19.02-.3.05-.11.03-.17.09-.25.16-.08.07-.14.11-.2.2a.41.41 0 0 0-.09.28H5.028c0-.38.13-.56.27-.83.16-.27.36-.499.61-.669.25-.17.549-.3.879-.38.33-.08.7-.13 1.09-.13.439 0 .829.05 1.168.13.34.09.63.22.88.39.23.17.41.38.55.63.13.25.19.55.19.88 0 .22 0 .419-.08.589l-.02-.01z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/verified.svg b/htdocs/theme/common/octicons/build/svg/verified.svg
    index 8420d2ac554..e1c6c71f72b 100644
    --- a/htdocs/theme/common/octicons/build/svg/verified.svg
    +++ b/htdocs/theme/common/octicons/build/svg/verified.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15.68 7.07L14.6 5.73c-.17-.22-.28-.48-.31-.77l-.19-1.7a1.51 1.51 0 0 0-1.33-1.33l-1.7-.19c-.3-.03-.56-.16-.78-.33L8.95.33c-.55-.44-1.33-.44-1.88 0L5.73 1.41c-.22.17-.48.28-.77.31l-1.7.19c-.7.08-1.25.63-1.33 1.33l-.19 1.7c-.03.3-.16.56-.33.78L.33 7.06c-.44.55-.44 1.33 0 1.88l1.08 1.34c.17.22.28.48.31.77l.19 1.7c.08.7.63 1.25 1.33 1.33l1.7.19c.3.03.56.16.78.33l1.34 1.08c.55.44 1.33.44 1.88 0l1.34-1.08c.22-.17.48-.28.77-.31l1.7-.19c.7-.08 1.25-.63 1.33-1.33l.19-1.7c.03-.3.16-.56.33-.78l1.08-1.34c.44-.55.44-1.33 0-1.88zm-9.17 4.94l-3.5-3.5 1.5-1.5 2 2 5-5 1.5 1.55-6.5 6.45z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M15.67 7.066l-1.08-1.34a1.5 1.5 0 0 1-.309-.77l-.19-1.698a1.51 1.51 0 0 0-1.329-1.33l-1.699-.19c-.3-.03-.56-.159-.78-.329L8.945.33a1.504 1.504 0 0 0-1.878 0l-1.34 1.08a1.5 1.5 0 0 1-.77.31l-1.698.19c-.7.08-1.25.63-1.33 1.329l-.19 1.699c-.03.3-.159.56-.329.78L.33 7.055a1.504 1.504 0 0 0 0 1.878l1.08 1.34c.17.22.28.48.31.77l.19 1.698c.08.7.63 1.25 1.329 1.33l1.699.19c.3.03.56.159.78.329l1.339 1.08c.55.439 1.329.439 1.878 0l1.34-1.08c.22-.17.48-.28.77-.31l1.698-.19c.7-.08 1.25-.63 1.33-1.329l.19-1.699c.03-.3.159-.56.329-.78l1.08-1.339a1.504 1.504 0 0 0 0-1.878zm-9.164 4.936L3.008 8.505l1.5-1.5 1.998 2 4.997-4.998 1.499 1.55-6.496 6.445z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/build/svg/x.svg b/htdocs/theme/common/octicons/build/svg/x.svg
    index 3725777be40..e3773142bb9 100644
    --- a/htdocs/theme/common/octicons/build/svg/x.svg
    +++ b/htdocs/theme/common/octicons/build/svg/x.svg
    @@ -1 +1 @@
    -<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z"/></svg>
    \ No newline at end of file
    +<svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z"/></svg>
    \ No newline at end of file
    diff --git a/htdocs/theme/common/octicons/package.json b/htdocs/theme/common/octicons/package.json
    index 77188450670..4d8ea495b08 100644
    --- a/htdocs/theme/common/octicons/package.json
    +++ b/htdocs/theme/common/octicons/package.json
    @@ -1,6 +1,6 @@
     {
    -  "version": "7.2.0",
       "name": "octicons",
    +  "version": "8.1.0",
       "description": "A scalable set of icons handcrafted with <3 by GitHub.",
       "homepage": "https://octicons.github.com",
       "author": "GitHub Inc.",
    diff --git a/htdocs/theme/eldy/ckeditor/config.js b/htdocs/theme/eldy/ckeditor/config.js
    index bc560d38f8f..50ff0cc6eed 100644
    --- a/htdocs/theme/eldy/ckeditor/config.js
    +++ b/htdocs/theme/eldy/ckeditor/config.js
    @@ -18,7 +18,7 @@ CKEDITOR.editorConfig = function( config )
     	//config.extraPlugins = 'docprops,scayt,showprotected';
     	config.removeDialogTabs = 'flash:advanced';	// config.removeDialogTabs = 'flash:advanced;image:Link';
     	config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // Prevent PHP Code to be formatted
    -	//config.menu_groups = 'clipboard,table,anchor,link,image';	// for context menu 'clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea' 
    +	//config.menu_groups = 'clipboard,table,anchor,link,image';	// for context menu 'clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea'
     	//config.language = 'de';
     	//config.defaultLanguage = 'en';
     	//config.contentsLanguage = 'fr';
    @@ -29,7 +29,7 @@ CKEDITOR.editorConfig = function( config )
     	//config.autoParagraph = false;
     	//config.removeFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd';		// See also rules on this.dataProcessor.writer.setRules
     	//config.forcePasteAsPlainText = true;
    -	
    +
     	config.toolbar_Full =
     	[
     	    ['Templates','NewPage'],
    @@ -51,7 +51,7 @@ CKEDITOR.editorConfig = function( config )
     	];
     
     	// Used for mailing fields
    -	config.toolbar_dolibarr_mailings = 
    +	config.toolbar_dolibarr_mailings =
     	[
     	 	['Maximize','Preview'],
     	 	['SpellChecker', 'Scayt'],
    @@ -64,7 +64,7 @@ CKEDITOR.editorConfig = function( config )
     	 	['Link','Unlink','Anchor','Image','Table','HorizontalRule','SpecialChar'],
     	 	['Source']
     	 ];
    -	
    +
     	// Used for notes fields
     	config.toolbar_dolibarr_notes =
     	[
    @@ -78,7 +78,7 @@ CKEDITOR.editorConfig = function( config )
     	    ['Link','Unlink','Image','Table','HorizontalRule','SpecialChar'],
     	 	['Source']
     	];
    -	
    +
     	// Used for details lines
     	config.toolbar_dolibarr_details =
     	[
    @@ -91,12 +91,12 @@ CKEDITOR.editorConfig = function( config )
     	    ['Link','Unlink','SpecialChar'],
     	 	['Source']
     	];
    -	
    +
     	// Used for mailing fields
     	config.toolbar_dolibarr_readonly =
     	[
     	 	['Maximize'],
     	 	['Find'],
     	 	['Source']
    -	];	
    +	];
     };
    diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php
    index e2b87857c95..487d4125284 100644
    --- a/htdocs/theme/eldy/style.css.php
    +++ b/htdocs/theme/eldy/style.css.php
    @@ -1,9 +1,10 @@
     <?php
     /* Copyright (C) 2004-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2006		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2007-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
    + * Copyright (C) 2018       Ferran Marcet           <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -53,7 +54,7 @@ $colortexttitlenotab='100,60,20';
     $colortexttitle='0,0,0';
     $colortext='0,0,0';
     $colortextlink='0,0,100';
    -$fontsize='0.85em';
    +$fontsize='0.86em';
     $fontsizesmaller='0.75em';
     
     if (defined('THEME_ONLY_CONSTANT')) return;
    @@ -107,6 +108,7 @@ if (! isset($conf->global->THEME_ELDY_TOPMENU_BACK1)) $conf->global->THEME_ELDY_
     if (! isset($conf->global->THEME_ELDY_VERMENU_BACK1)) $conf->global->THEME_ELDY_VERMENU_BACK1=$colorbackvmenu1;
     if (! isset($conf->global->THEME_ELDY_BACKTITLE1)) $conf->global->THEME_ELDY_BACKTITLE1=$colorbacktitle1;
     if (! isset($conf->global->THEME_ELDY_USE_HOVER)) $conf->global->THEME_ELDY_USE_HOVER=$colorbacklinepairhover;
    +if (! isset($conf->global->THEME_ELDY_USE_CHECKED)) $conf->global->THEME_ELDY_USE_CHECKED=$colorbacklinepairchecked;
     if (! isset($conf->global->THEME_ELDY_LINEBREAK)) $conf->global->THEME_ELDY_LINEBREAK=$colorbacklinebreak;
     if (! isset($conf->global->THEME_ELDY_TEXTTITLENOTAB)) $conf->global->THEME_ELDY_TEXTTITLENOTAB=$colortexttitlenotab;
     if (! isset($conf->global->THEME_ELDY_TEXTLINK)) $conf->global->THEME_ELDY_TEXTLINK=$colortextlink;
    @@ -143,9 +145,11 @@ $fontsizesmaller     =empty($user->conf->THEME_ELDY_ENABLE_PERSONALIZED)?(empty(
     
     // Hover color
     $colorbacklinepairhover=((! isset($conf->global->THEME_ELDY_USE_HOVER) || (string) $conf->global->THEME_ELDY_USE_HOVER === '0')?'':($conf->global->THEME_ELDY_USE_HOVER === '1'?'edf4fb':$conf->global->THEME_ELDY_USE_HOVER));
    +$colorbacklinepairchecked=((! isset($conf->global->THEME_ELDY_USE_CHECKED) || (string) $conf->global->THEME_ELDY_USE_CHECKED === '0')?'':($conf->global->THEME_ELDY_USE_CHECKED === '1'?'edf4fb':$conf->global->THEME_ELDY_USE_CHECKED));
     if (! empty($user->conf->THEME_ELDY_ENABLE_PERSONALIZED))
     {
     	$colorbacklinepairhover=((! isset($user->conf->THEME_ELDY_USE_HOVER) || $user->conf->THEME_ELDY_USE_HOVER === '0')?'':($user->conf->THEME_ELDY_USE_HOVER === '1'?'edf4fb':$user->conf->THEME_ELDY_USE_HOVER));
    +	$colorbacklinepairchecked=((! isset($user->conf->THEME_ELDY_USE_CHECKED) || $user->conf->THEME_ELDY_USE_CHECKED === '0')?'':($user->conf->THEME_ELDY_USE_CHECKED === '1'?'edf4fb':$user->conf->THEME_ELDY_USE_CHECKED));
     }
     
     //$colortopbordertitle1=$colorbackhmenu1;
    @@ -177,7 +181,7 @@ $colorbacktabcard1=join(',',colorStringToArray($colorbacktabcard1));    // Norma
     $tmppart=explode(',',$colorbacktabcard1);
     $tmpval=(! empty($tmppart[0]) ? $tmppart[0] : 0)+(! empty($tmppart[1]) ? $tmppart[1] : 0)+(! empty($tmppart[2]) ? $tmppart[2] : 0);
     if ($tmpval <= 460) { $colortextbacktab='FFFFFF'; }
    -else { $colortextbacktab='111111'; }
    +else { $colortextbacktab='000000'; }
     
     
     // Format color value to match expected format (may be 'FFFFFF' or '255,255,255')
    @@ -191,6 +195,7 @@ $colorbacklineimpair2=join(',',colorStringToArray($colorbacklineimpair2));
     $colorbacklinepair1=join(',',colorStringToArray($colorbacklinepair1));
     $colorbacklinepair2=join(',',colorStringToArray($colorbacklinepair2));
     if ($colorbacklinepairhover != '') $colorbacklinepairhover=join(',',colorStringToArray($colorbacklinepairhover));
    +if ($colorbacklinepairchecked != '') $colorbacklinepairchecked=join(',',colorStringToArray($colorbacklinepairchecked));
     $colorbackbody=join(',',colorStringToArray($colorbackbody));
     $colortexttitlenotab=join(',',colorStringToArray($colortexttitlenotab));
     $colortexttitle=join(',',colorStringToArray($colortexttitle));
    @@ -218,6 +223,7 @@ print 'colorbacklineimpair2='.$colorbacklineimpair2."\n";
     print 'colorbacklinepair1='.$colorbacklinepair1."\n";
     print 'colorbacklinepair2='.$colorbacklinepair2."\n";
     print 'colorbacklinepairhover='.$colorbacklinepairhover."\n";
    +print 'colorbacklinepairchecked='.$colorbacklinepairchecked."\n";
     print '$colortexttitlenotab='.$colortexttitlenotab."\n";
     print '$colortexttitle='.$colortexttitle."\n";
     print '$colortext='.$colortext."\n";
    @@ -258,7 +264,7 @@ body {
         <?php print 'direction: '.$langs->trans("DIRECTION").";\n"; ?>
     }
     
    -.thumbstat, a.tab { font-weight: bold !important; }
    +.thumbstat { font-weight: bold !important; }
     th a { font-weight: <?php echo ($useboldtitle?'bold':'normal'); ?> !important; }
     a.tab { font-weight: bold !important; }
     
    @@ -325,7 +331,7 @@ input, select {
     }
     
     /* Focus definitions must be after standard definition */
    -textarea:focus, button:focus {
    +textarea:focus {
         /* v6 box-shadow: 0 0 4px #8091BF; */
     	border: 1px solid #aaa !important;
     }
    @@ -491,6 +497,7 @@ input#onlinepaymenturl, input#directdownloadlink {
     }
     
     hr { border: 0; border-top: 1px solid #ccc; }
    +.tabBar hr { margin-top: 20px; margin-bottom: 17px; }
     
     .button, .buttonDelete, input[name="sbmtConnexion"] {
     	margin-bottom: 0;
    @@ -546,7 +553,7 @@ form {
         margin:0px;
     }
     form#addproduct {
    -    padding-top: 6px;
    +    padding-top: 10px;
     }
     div.float
     {
    @@ -689,6 +696,9 @@ textarea.centpercent {
     	height: 28px;
     	vertical-align: middle;
     }
    +.divsocialnetwork:not(:first-child) {
    +    padding-left: 20px;
    +}
     div.divsearchfield {
     	float: <?php print $left; ?>;
     	margin-<?php print $right; ?>: 12px;
    @@ -748,6 +758,9 @@ select.flat.selectlimit {
     .marginleftonly {
     	margin-left: 10px !important;
     }
    +.marginleftonlyshort {
    +	margin-left: 4px !important;
    +}
     .nomarginleft {
     	margin-left: 0px !important;
     }
    @@ -1061,6 +1074,9 @@ select.selectarrowonleft option {
         	/* border-bottom: 1px solid #BBB; */
         	/* max-width: inherit; why this ? */
          }
    +     input[type=text], input[type=password] {
    +		max-width: 180px;
    +	}
     
         .hideonsmartphone { display: none; }
         .hideonsmartphoneimp { display: none !important; }
    @@ -1160,8 +1176,8 @@ td.showDragHandle {
     	table-layout: fixed;
     }
     #id-right, #id-left {
    -	padding-top: 16px;
    -	padding-bottom: 16px;
    +	padding-top: 20px;
    +	padding-bottom: 20px;
     
     	display: table-cell;			/* DOL_XXX Empeche fonctionnement correct du scroll horizontal sur tableau, avec datatable ou CSS */
     	float: none;
    @@ -1266,8 +1282,8 @@ div.fiche {
     
     
     div.fiche {
    -	margin-<?php print $left; ?>: <?php print (GETPOST('optioncss','aZ09') == 'print'?6:(empty($conf->dol_optimize_smallscreen)?'25':'6')); ?>px;
    -	margin-<?php print $right; ?>: <?php print (GETPOST('optioncss','aZ09') == 'print'?6:(empty($conf->dol_optimize_smallscreen)?'24':'6')); ?>px;
    +	margin-<?php print $left; ?>: <?php print (GETPOST('optioncss','aZ09') == 'print'?6:(empty($conf->dol_optimize_smallscreen)?'30':'6')); ?>px;
    +	margin-<?php print $right; ?>: <?php print (GETPOST('optioncss','aZ09') == 'print'?6:(empty($conf->dol_optimize_smallscreen)?'29':'6')); ?>px;
     	<?php if (! empty($dol_hide_leftmenu)) print 'margin-bottom: 12px;'."\n"; ?>
     	<?php if (! empty($dol_hide_leftmenu)) print 'margin-top: 12px;'."\n"; ?>
     }
    @@ -1665,6 +1681,9 @@ div.mainmenu.menu {
     #mainmenutd_menu a.tmenuimage {
         display: unset;
     }
    +a.tmenuimage {
    +    display: block;
    +}
     
     /* Do not load menu img for other if hidden to save bandwidth */
     
    @@ -1695,6 +1714,10 @@ div.mainmenu.cashdesk {
     	background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/pointofsale_over.png',1) ?>);
     }
     
    +div.mainmenu.takepos {
    +	background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/pointofsale_over.png',1) ?>);
    +}
    +
     div.mainmenu.companies {
     	background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/company_over.png',1) ?>);
     }
    @@ -1764,7 +1787,7 @@ $mainmenuusedarray=array_unique(explode(',',$mainmenuused));
     
     $generic=1;
     // Put here list of menu entries when the div.mainmenu.menuentry was previously defined
    -$divalreadydefined=array('home','companies','products','commercial','externalsite','accountancy','project','tools','members','agenda','ftp','holiday','hrm','bookmark','cashdesk','ecm','geoipmaxmind','gravatar','clicktodial','paypal','stripe','webservices','website');
    +$divalreadydefined=array('home','companies','products','commercial','externalsite','accountancy','project','tools','members','agenda','ftp','holiday','hrm','bookmark','cashdesk','takepos','ecm','geoipmaxmind','gravatar','clicktodial','paypal','stripe','webservices','website');
     // Put here list of menu entries we are sure we don't want
     $divnotrequired=array('multicurrency','salaries','ticket','margin','opensurvey','paybox','expensereport','incoterm','prelevement','propal','workflow','notification','supplier_proposal','cron','product','productbatch','expedition');
     foreach($mainmenuusedarray as $val)
    @@ -1825,6 +1848,7 @@ foreach($mainmenuusedarray as $val)
         position: absolute;
         height: 100%;
         width: 100%;
    +    font-size: 1em;
     }
     .login_center {
     	display: table-cell;
    @@ -1836,13 +1860,14 @@ foreach($mainmenuusedarray as $val)
     }
     form#login {
     	padding-bottom: 30px;
    -	font-size: 13px;
    +	font-size: 14px;
     	vertical-align: middle;
     }
     .login_table_title {
     	max-width: 530px;
    -	color: #aaa !important;
    +	color: #eee !important;
     	padding-bottom: 20px;
    +	text-shadow: 1px 1px #444;
     }
     .login_table label {
     	text-shadow: 1px 1px 1px #FFF;
    @@ -1877,12 +1902,30 @@ if (! empty($conf->global->MAIN_LOGIN_BACKGROUND)) {
     	padding: 5px;
     	margin-left: 5px;
     	margin-top: 5px;
    +	margin-bottom: 5px;
     }
     .login_table input#username:focus, .login_table input#password:focus, .login_table input#securitycode:focus {
     	outline: none !important;
    -	/* box-shadow: none;
    -	-webkit-box-shadow: 0 0 0 50px #FFF inset;
    -	box-shadow: 0 0 0 50px #FFF inset;*/
    +}
    +.login_table .trinputlogin {
    +	font-size: 1.2em;
    +	margin: 8px;
    +}
    +.login_table .tdinputlogin {
    +    background-color: transparent;
    +    /* border: 2px solid #ccc; */
    +    min-width: 220px;
    +    border-radius: 2px;
    +}
    +.login_table .tdinputlogin .fa {
    +	padding-left: 10px;
    +	width: 14px;
    +}
    +.login_table .tdinputlogin input#username, .login_table .tdinputlogin input#password {
    +	font-size: 1em;
    +}
    +.login_table .tdinputlogin input#securitycode {
    +	font-size: 1em;
     }
     .login_main_message {
     	text-align: center;
    @@ -2303,6 +2346,7 @@ div.tabBar table.tableforservicepart2:last-child {
     }
     .tableforservicepart1 .tdhrthin {
     	height: unset;
    +    padding-top: 0 !important;
     }
     
     div.popuptabset {
    @@ -2317,7 +2361,7 @@ div.popuptab {
     	padding-right: 5px;
     }
     div.tabsAction {
    -    margin: 20px 0em 20px 0em;
    +    margin: 20px 0em 30px 0em;
         padding: 0em 0em;
         text-align: right;
     }
    @@ -2344,7 +2388,7 @@ a.tabunactive {
     }
     a.tab:link, a.tab:visited, a.tab:hover, a.tab#active {
     	font-family: <?php print $fontlist ?>;
    -	padding: 12px 9px 13px;
    +	padding: 12px 14px 13px;
         margin: 0em 0.2em;
         text-decoration: none;
         white-space: nowrap;
    @@ -2458,21 +2502,24 @@ span.butAction, span.butActionDelete {
         cursor: pointer;
         /*color: #fff !important;
         background: rgb(<?php echo $colorbackhmenu1 ?>);
    -    border: 1px solid rgb(<?php echo $colorbackhmenu1 ?>);*/
    +    border: 1px solid rgb(<?php echo $colorbackhmenu1 ?>);
         border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
    -
         border-top-right-radius: 0 !important;
         border-bottom-right-radius: 0 !important;
         border-top-left-radius: 0 !important;
    -    border-bottom-left-radius: 0 !important;
    +    border-bottom-left-radius: 0 !important;*/
     }
     a.butActionNew>span.fa-plus-circle, a.butActionNew>span.fa-plus-circle:hover { padding-left: 6px; font-size: 1.5em; border: none; box-shadow: none; webkit-box-shadow: none; }
     a.butActionNewRefused>span.fa-plus-circle, a.butActionNewRefused>span.fa-plus-circle:hover { padding-left: 6px; font-size: 1.5em; border: none; box-shadow: none; webkit-box-shadow: none; }
     
    -.butAction:hover, .butActionNew:hover   {
    +.butAction:hover   {
       -webkit-box-shadow: 0px 0px 6px 1px rgba(50, 50, 50, 0.4), 0px 0px 0px rgba(60,60,60,0.1);
       box-shadow: 0px 0px 6px 1px rgba(50, 50, 50, 0.4), 0px 0px 0px rgba(60,60,60,0.1);
     }
    +.butActionNew:hover   {
    +  text-decoration: underline;
    +  box-shadow: unset !important;
    +}
     
     .butActionDelete, .butActionDelete:link, .butActionDelete:visited, .butActionDelete:hover, .butActionDelete:active, .buttonDelete {
         background: rgb(239, 232, 230);
    @@ -2693,7 +2740,9 @@ table.paddingtopbottomonly tr td {
     	background: rgb(<?php echo $colorbacktitle1; ?>) !important;
     }
     tr.liste_titre_filter td.liste_titre {
    -/*    border-bottom: 1px solid #ddd; */
    +	/* border-bottom: 1px solid #ddd; */
    +	padding-top: 1px;
    +	padding-bottom: 0px;
     }
     .liste_titre_create td, .liste_titre_create th, .liste_titre_create .tagtd
     {
    @@ -2929,9 +2978,20 @@ div.pagination li.paginationafterarrows {
     	background: rgb(<?php echo $colorbacklinepairhover; ?>) !important;		/* Must be background to be stronger than background of odd or even */
     <?php } ?>
     }
    +<?php if ($colorbacklinepairchecked) { ?>
    +.highlight {
    +	background: rgb(<?php echo $colorbacklinepairchecked; ?>) !important; /* Must be background to be stronger than background of odd or even */
    +}
    +<?php } ?>
    +
     .nohover:hover {
     	background: unset;
     }
    +.nohoverborder:hover {
    +	border: unset;
    +	box-shadow: unset;
    +	-webkit-box-shadow: unset;
    +}
     .oddeven, .evenodd, .impair, .nohover .impair:hover, tr.impair td.nohover
     {
     	font-family: <?php print $fontlist ?>;
    @@ -3201,8 +3261,9 @@ ul.noborder li:nth-child(even):not(.liste_titre) {
         margin-bottom: 5px;
         text-align: center;
     
    -    background: #f8f8f8;
    +    background: #fcfcfc;
         border: 1px solid #eee;
    +    /* border-left: 6px solid #ddd; */
         box-shadow: 1px 1px 8px #ddd;
         border-radius: 0px;
     }
    @@ -3214,7 +3275,7 @@ ul.noborder li:nth-child(even):not(.liste_titre) {
     .boxstats130 {
         width: 158px;
         height: 48px;
    -    padding: 3px
    +    padding: 3px;
     }
     .boxstats {
         padding: 3px;
    @@ -3250,9 +3311,12 @@ ul.noborder li:nth-child(even):not(.liste_titre) {
         }
     	.thumbstat {
     		flex: 1 1 110px;
    +		margin-bottom: 8px;
     	}
     	.thumbstat150 {
     		flex: 1 1 110px;
    +		margin-bottom: 8px;
    +		width: 160px;
     	}
         .dashboardlineindicator {
             float: left;
    @@ -3446,7 +3510,7 @@ div.warning {
         background: #fcf8e3;
     }
     div.warning a, div.info a, div.error a {
    -	color: rgb(<?php echo $colortext; ?>);
    +	color: rgb(<?php echo $colortextlink; ?>);
     }
     
     /* Error message */
    @@ -3507,7 +3571,7 @@ div.boximport {
     .widthpictotitle { width: 40px; text-align: <?php echo $left; ?>; }
     
     .dolgraphtitle { margin-top: 6px; margin-bottom: 4px; }
    -.dolgraphtitlecssboxes { margin: 0px; }
    +.dolgraphtitlecssboxes { /* margin: 0px; */ }
     .legendColorBox, .legendLabel { border: none !important; }
     div.dolgraph div.legend, div.dolgraph div.legend div { background-color: rgba(255,255,255,0) !important; }
     div.dolgraph div.legend table tbody tr { height: auto; }
    @@ -3868,6 +3932,13 @@ span.websitebuttonsitepreviewdisabled img, a.websitebuttonsitepreviewdisabled im
         float: right;
         padding-top: 8px;
     }
    +.websiteselectionsection {
    +	border-left: 1px solid #bbb;
    +	border-right: 1px solid #bbb;
    +	margin-left: 0px;
    +	padding-left: 8px;
    +	margin-right: 5px;
    +}
     
     
     /* ============================================================================== */
    @@ -4373,7 +4444,7 @@ td.gminorheading {
     .ecmfiletree {
     	width: 99%;
     	height: 99%;
    -	background: #FFF;
    +	/* background: #FFF; */
     	padding-left: 2px;
     	font-weight: normal;
     }
    @@ -4870,7 +4941,81 @@ span.noborderoncategories {
     
     
     /* ============================================================================== */
    -/*  Multiselect with checkbox                                                     */
    +/*  External lib multiselect with checkbox                                        */
    +/* ============================================================================== */
    +
    +.multi-select-container {
    +  display: inline-block;
    +  position: relative;
    +}
    +
    +.multi-select-menu {
    +  position: absolute;
    +  left: 0;
    +  top: 0.8em;
    +  float: left;
    +  min-width: 100%;
    +  background: #fff;
    +  margin: 1em 0;
    +  padding: 0.4em 0;
    +  border: 1px solid #aaa;
    +  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
    +  display: none;
    +}
    +
    +.multi-select-menu input {
    +  margin-right: 0.3em;
    +  vertical-align: 0.1em;
    +}
    +
    +.multi-select-button {
    +  display: inline-block;
    +  max-width: 20em;
    +  white-space: nowrap;
    +  overflow: hidden;
    +  text-overflow: ellipsis;
    +  vertical-align: middle;
    +  background-color: #fff;
    +  cursor: default;
    +
    +  border: none;
    +  border-bottom: solid 1px rgba(0,0,0,.2);
    +  padding: 5px;
    +  padding-left: 2px;
    +  height: 17px;
    +}
    +.multi-select-button:focus {
    +  outline: none;
    +  border-bottom: 1px solid #666;
    +}
    +
    +.multi-select-button:after {
    +  content: "";
    +  display: inline-block;
    +  width: 0;
    +  height: 0;
    +  border-style: solid;
    +  border-width: 0.5em 0.23em 0em 0.23em;
    +  border-color: #444 transparent transparent transparent;
    +  margin-left: 0.4em;
    +}
    +
    +.multi-select-container--open .multi-select-menu { display: block; }
    +
    +.multi-select-container--open .multi-select-button:after {
    +  border-width: 0 0.4em 0.4em 0.4em;
    +  border-color: transparent transparent #999 transparent;
    +}
    +
    +.multi-select-menuitem {
    +    clear: both;
    +    float: left;
    +    padding-left: 5px
    +}
    +
    +
    +/* ============================================================================== */
    +/*  Native multiselect with checkbox                                              */
     /* ============================================================================== */
     
     ul.ulselectedfields {
    @@ -4910,10 +5055,10 @@ dl.dropdown {
     }
     .dropdown dd ul {
         background-color: #FFF;
    -    border: 1px solid #888;
    +    box-shadow: 1px 1px 10px #aaa;
         display:none;
         <?php echo $right; ?>:0px;						/* pop is align on right */
    -    padding: 2px 15px 2px 5px;
    +    padding: 0 0 0 0;
         position:absolute;
         top:2px;
         list-style:none;
    @@ -4923,10 +5068,13 @@ dl.dropdown {
     .dropdown dd ul li {
     	white-space: nowrap;
     	font-weight: normal;
    -	padding: 2px;
    +	padding: 7px 8px 7px 8px;
     	/* color: rgb(<?php print $colortext; ?>); */
     	color: #000;
     }
    +.dropdown dd ul li:hover {
    +	background: #eee;
    +}
     .dropdown dd ul li input[type="checkbox"] {
         margin-<?php echo $right; ?>: 3px;
     }
    @@ -4938,7 +5086,7 @@ dl.dropdown {
     	color: #888;
     }
     .dropdown dd ul li a:hover {
    -    background-color:#fff;
    +    background-color:#eee;
     }
     
     
    diff --git a/htdocs/theme/md/ckeditor/config.js b/htdocs/theme/md/ckeditor/config.js
    index bc560d38f8f..50ff0cc6eed 100644
    --- a/htdocs/theme/md/ckeditor/config.js
    +++ b/htdocs/theme/md/ckeditor/config.js
    @@ -18,7 +18,7 @@ CKEDITOR.editorConfig = function( config )
     	//config.extraPlugins = 'docprops,scayt,showprotected';
     	config.removeDialogTabs = 'flash:advanced';	// config.removeDialogTabs = 'flash:advanced;image:Link';
     	config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // Prevent PHP Code to be formatted
    -	//config.menu_groups = 'clipboard,table,anchor,link,image';	// for context menu 'clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea' 
    +	//config.menu_groups = 'clipboard,table,anchor,link,image';	// for context menu 'clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea'
     	//config.language = 'de';
     	//config.defaultLanguage = 'en';
     	//config.contentsLanguage = 'fr';
    @@ -29,7 +29,7 @@ CKEDITOR.editorConfig = function( config )
     	//config.autoParagraph = false;
     	//config.removeFormatTags = 'b,big,code,del,dfn,em,font,i,ins,kbd';		// See also rules on this.dataProcessor.writer.setRules
     	//config.forcePasteAsPlainText = true;
    -	
    +
     	config.toolbar_Full =
     	[
     	    ['Templates','NewPage'],
    @@ -51,7 +51,7 @@ CKEDITOR.editorConfig = function( config )
     	];
     
     	// Used for mailing fields
    -	config.toolbar_dolibarr_mailings = 
    +	config.toolbar_dolibarr_mailings =
     	[
     	 	['Maximize','Preview'],
     	 	['SpellChecker', 'Scayt'],
    @@ -64,7 +64,7 @@ CKEDITOR.editorConfig = function( config )
     	 	['Link','Unlink','Anchor','Image','Table','HorizontalRule','SpecialChar'],
     	 	['Source']
     	 ];
    -	
    +
     	// Used for notes fields
     	config.toolbar_dolibarr_notes =
     	[
    @@ -78,7 +78,7 @@ CKEDITOR.editorConfig = function( config )
     	    ['Link','Unlink','Image','Table','HorizontalRule','SpecialChar'],
     	 	['Source']
     	];
    -	
    +
     	// Used for details lines
     	config.toolbar_dolibarr_details =
     	[
    @@ -91,12 +91,12 @@ CKEDITOR.editorConfig = function( config )
     	    ['Link','Unlink','SpecialChar'],
     	 	['Source']
     	];
    -	
    +
     	// Used for mailing fields
     	config.toolbar_dolibarr_readonly =
     	[
     	 	['Maximize'],
     	 	['Find'],
     	 	['Source']
    -	];	
    +	];
     };
    diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php
    index 87b41358fa5..72edb17b719 100644
    --- a/htdocs/theme/md/style.css.php
    +++ b/htdocs/theme/md/style.css.php
    @@ -1,10 +1,11 @@
     <?php
     /* Copyright (C) 2004-2017	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2006		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (C) 2007-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2007-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Philippe Grand			<philippe.grand@atoo-net.com>
      * Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
      * Copyright (C) 2015		Alexandre Spangaro      <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2018       Ferran Marcet           <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -54,7 +55,7 @@ $colortexttitlenotab='90,90,90';
     $colortexttitle='20,20,20';
     $colortext='0,0,0';
     $colortextlink='0,0,120';
    -$fontsize='13';
    +$fontsize='14';
     $fontsizesmaller='11';
     
     if (defined('THEME_ONLY_CONSTANT')) return;
    @@ -99,7 +100,7 @@ $dol_no_mouse_hover=$conf->dol_no_mouse_hover;
     //$user->conf->THEME_ELDY_ENABLE_PERSONALIZED=0;
     //var_dump($user->conf->THEME_ELDY_RGB);
     
    -$useboldtitle=(isset($conf->global->THEME_ELDY_USEBOLDTITLE)?$conf->global->THEME_ELDY_USEBOLDTITLE:1);
    +$useboldtitle=(isset($conf->global->THEME_ELDY_USEBOLDTITLE)?$conf->global->THEME_ELDY_USEBOLDTITLE:0);
     $borderwidth=2;
     
     // Case of option always editable
    @@ -108,6 +109,7 @@ if (! isset($conf->global->THEME_ELDY_TOPMENU_BACK1)) $conf->global->THEME_ELDY_
     if (! isset($conf->global->THEME_ELDY_VERMENU_BACK1)) $conf->global->THEME_ELDY_VERMENU_BACK1=$colorbackvmenu1;
     if (! isset($conf->global->THEME_ELDY_BACKTITLE1)) $conf->global->THEME_ELDY_BACKTITLE1=$colorbacktitle1;
     if (! isset($conf->global->THEME_ELDY_USE_HOVER)) $conf->global->THEME_ELDY_USE_HOVER==$colorbacklinepairhover;
    +if (! isset($conf->global->THEME_ELDY_USE_CHECKED)) $conf->global->THEME_ELDY_USE_CHECKED=$colorbacklinepairchecked;
     if (! isset($conf->global->THEME_ELDY_LINEBREAK)) $conf->global->THEME_ELDY_LINEBREAK=$colorbacklinebreak;
     if (! isset($conf->global->THEME_ELDY_TEXTTITLENOTAB)) $conf->global->THEME_ELDY_TEXTTITLENOTAB=$colortexttitlenotab;
     if (! isset($conf->global->THEME_ELDY_TEXTLINK)) $conf->global->THEME_ELDY_TEXTLINK=$colortextlink;
    @@ -119,7 +121,7 @@ if (empty($conf->global->THEME_ELDY_ENABLE_PERSONALIZED))
         $conf->global->THEME_ELDY_BACKTABCARD1='255,255,255';     // card
         $conf->global->THEME_ELDY_BACKTABACTIVE='234,234,234';
         $conf->global->THEME_ELDY_TEXT='0,0,0';
    -    $conf->global->THEME_ELDY_FONT_SIZE1='13';
    +    $conf->global->THEME_ELDY_FONT_SIZE1='14';
         $conf->global->THEME_ELDY_FONT_SIZE2='11';
     }
     
    @@ -145,9 +147,11 @@ $fontsizesmaller     =empty($user->conf->THEME_ELDY_ENABLE_PERSONALIZED)?(empty(
     
     // Hover color
     $colorbacklinepairhover=((! isset($conf->global->THEME_ELDY_USE_HOVER) || (string) $conf->global->THEME_ELDY_USE_HOVER === '0')?'':($conf->global->THEME_ELDY_USE_HOVER === '1'?'edf4fb':$conf->global->THEME_ELDY_USE_HOVER));
    +$colorbacklinepairchecked=((! isset($conf->global->THEME_ELDY_USE_CHECKED) || (string) $conf->global->THEME_ELDY_USE_CHECKED === '0')?'':($conf->global->THEME_ELDY_USE_CHECKED === '1'?'edf4fb':$conf->global->THEME_ELDY_USE_CHECKED));
     if (! empty($user->conf->THEME_ELDY_ENABLE_PERSONALIZED))
     {
         $colorbacklinepairhover=((! isset($user->conf->THEME_ELDY_USE_HOVER) || $user->conf->THEME_ELDY_USE_HOVER === '0')?'':($user->conf->THEME_ELDY_USE_HOVER === '1'?'edf4fb':$user->conf->THEME_ELDY_USE_HOVER));
    +    $colorbacklinepairchecked=((! isset($user->conf->THEME_ELDY_USE_CHECKED) || $user->conf->THEME_ELDY_USE_CHECKED === '0')?'':($user->conf->THEME_ELDY_USE_CHECKED === '1'?'edf4fb':$user->conf->THEME_ELDY_USE_CHECKED));
     }
     
     if (empty($colortopbordertitle1)) $colortopbordertitle1=$colorbackhmenu1;
    @@ -193,6 +197,7 @@ $colorbacklineimpair2=join(',',colorStringToArray($colorbacklineimpair2));
     $colorbacklinepair1=join(',',colorStringToArray($colorbacklinepair1));
     $colorbacklinepair2=join(',',colorStringToArray($colorbacklinepair2));
     if ($colorbacklinepairhover != '') $colorbacklinepairhover=join(',',colorStringToArray($colorbacklinepairhover));
    +if ($colorbacklinepairchecked != '') $colorbacklinepairchecked=join(',',colorStringToArray($colorbacklinepairchecked));
     $colorbackbody=join(',',colorStringToArray($colorbackbody));
     $colortexttitlenotab=join(',',colorStringToArray($colortexttitlenotab));
     $colortexttitle=join(',',colorStringToArray($colortexttitle));
    @@ -211,6 +216,7 @@ print 'colorbacklineimpair2='.$colorbacklineimpair2."\n";
     print 'colorbacklinepair1='.$colorbacklinepair1."\n";
     print 'colorbacklinepair2='.$colorbacklinepair2."\n";
     print 'colorbacklinepairhover='.$colorbacklinepairhover."\n";
    +print 'colorbacklinepairchecked='.$colorbacklinepairchecked."\n";
     print '$colortexttitlenotab='.$colortexttitlenotab."\n";
     print '$colortexttitle='.$colortexttitle."\n";
     print '$colortext='.$colortext."\n";
    @@ -251,7 +257,8 @@ body {
         <?php print 'direction: '.$langs->trans("DIRECTION").";\n"; ?>
     }
     
    -th a, .thumbstat, a.tab { font-weight: bold !important; }
    +.thumbstat { font-weight: bold !important; }
    +th a { font-weight: <?php echo ($useboldtitle?'bold':'normal'); ?> !important; }
     a.tab { font-weight: bold !important; }
     
     a:link, a:visited, a:hover, a:active { font-family: <?php print $fontlist ?>; font-weight: normal; color: rgb(<?php print $colortextlink; ?>); text-decoration: none;  }
    @@ -682,6 +689,9 @@ textarea.centpercent {
     	height: 28px;
     	vertical-align: middle;
     }
    +.divsocialnetwork:not(:first-child) {
    +    padding-left: 20px;
    +}
     div.divsearchfield {
     	float: <?php print $left; ?>;
     	margin-<?php print $right; ?>: 12px;
    @@ -735,6 +745,9 @@ select.flat.selectlimit {
     .marginleftonly {
     	margin-left: 10px !important;
     }
    +.marginleftonlyshort {
    +	margin-left: 4px !important;
    +}
     .nomarginleft {
     	margin-left: 0px !important;
     }
    @@ -1192,6 +1205,13 @@ td.showDragHandle {
     .side-nav-vert {
     	margin-left: 228px;
     }
    +<?php if (empty($conf->global->THEME_DISABLE_STICKY_TOPMENU)) {  ?>
    +.side-nav-vert {
    +	position: sticky;
    +	top: 0px;
    +	z-index: 210;
    +}
    +<?php } ?>
     
     /* For smartphone (testmenuhider is on) */
     <?php if (in_array($conf->browser->layout, array('phone','tablet')) && ((GETPOST('testmenuhider') || ! empty($conf->global->MAIN_TESTMENUHIDER)) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER))) { ?>
    @@ -1223,6 +1243,11 @@ div.backgroundsemitransparent {
     	padding-left: 10px;
     	padding-right: 10px;
     }
    +
    +
    +
    +/* Login */
    +
     div.login_block {
     	/* position: initial !important;*/
     	display: none;
    @@ -1237,6 +1262,10 @@ div.login_block {
     	color: #333 !important;
     	font-weight: normal !important;
     }
    +
    +
    +
    +
     #id-right {
     	padding-left: 0 ! important;
     }
    @@ -1687,6 +1716,10 @@ div.mainmenu.cashdesk {
     	background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/pointofsale.png',1) ?>);
     }
     
    +div.mainmenu.takepos {
    +	background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/pointofsale.png',1) ?>);
    +}
    +
     div.mainmenu.companies {
     	background-image: url(<?php echo dol_buildpath($path.'/theme/'.$theme.'/img/menus/company.png',1) ?>);
     }
    @@ -1760,7 +1793,7 @@ $mainmenuusedarray=array_unique(explode(',',$mainmenuused));
     
     $generic=1;
     // Put here list of menu entries when the div.mainmenu.menuentry was previously defined
    -$divalreadydefined=array('home','companies','products','commercial','externalsite','accountancy','project','tools','members','agenda','ftp','holiday','hrm','bookmark','cashdesk','ecm','geoipmaxmind','gravatar','clicktodial','paypal','stripe','webservices','website');
    +$divalreadydefined=array('home','companies','products','commercial','externalsite','accountancy','project','tools','members','agenda','ftp','holiday','hrm','bookmark','cashdesk','takepos','ecm','geoipmaxmind','gravatar','clicktodial','paypal','stripe','webservices','website');
     // Put here list of menu entries we are sure we don't want
     $divnotrequired=array('multicurrency','salaries','ticket','margin','opensurvey','paybox','expensereport','incoterm','prelevement','propal','workflow','notification','supplier_proposal','cron','product','productbatch','expedition');
     foreach($mainmenuusedarray as $val)
    @@ -1809,7 +1842,9 @@ foreach($mainmenuusedarray as $val)
         	display: none;
         <?php } ?>
     }
    -
    +a.tmenuimage {
    +    display: block;
    +}
     
     
     /* Login */
    @@ -1832,7 +1867,7 @@ foreach($mainmenuusedarray as $val)
     }
     form#login {
     	padding-bottom: 30px;
    -	font-size: 13px;
    +	font-size: 14px;
     	vertical-align: middle;
     }
     .login_table_title {
    @@ -1864,17 +1899,29 @@ form#login {
     }
     .login_table input#username, .login_table input#password, .login_table input#securitycode{
     	border: none;
    -	border-bottom: solid 1px rgba(180,180,180,.4);
    +	/* border-bottom: solid 1px rgba(180,180,180,.4); */
     	padding: 5px;
     	margin-left: 18px;
     	margin-top: 5px;
    +	margin-bottom: 5px;
     }
     .login_table input#username:focus, .login_table input#password:focus, .login_table input#securitycode:focus {
     	outline: none !important;
    -	/* box-shadow: none;
    -	-webkit-box-shadow: 0 0 0 50px #FFF inset;
    -	box-shadow: 0 0 0 50px #FFF inset;*/
     }
    +.login_table .trinputlogin {
    +	margin: 8px;
    +}
    +.login_table .tdinputlogin {
    +    background-color: #fff;
    +    border: 2px solid #ccc;
    +    min-width: 220px;
    +    border-radius: 2px;
    +}
    +.login_table .tdinputlogin .fa {
    +	padding-left: 10px;
    +	width: 14px;
    +}
    +
     .login_main_message {
     	text-align: center;
     	max-width: 570px;
    @@ -2300,7 +2347,7 @@ a.tabTitle {
     
     a.tab:link, a.tab:visited, a.tab:hover, a.tab#active {
     	font-family: <?php print $fontlist ?>;
    -	padding: 12px 9px 12px;
    +	padding: 12px 13px 12px;
         margin: 0em 0.2em;
         text-decoration: none;
         white-space: nowrap;
    @@ -2662,6 +2709,8 @@ table.paddingtopbottomonly tr td {
     }
     tr.liste_titre_filter td.liste_titre {
         border-bottom: 1px solid #FDFFFF;
    +	padding-top: 4px;
    +	padding-bottom: 3px;
     }
     .liste_titre_create td, .liste_titre_create th, .liste_titre_create .tagtd
     {
    @@ -2693,7 +2742,7 @@ table.liste td, table.noborder td, div.noborder form div {
     	padding: 8px 6px 8px 6px;			/* t r b l */
     }
     div.liste_titre_bydiv .divsearchfield {
    -	padding: 2px 1px 2px 0px;			/* t r b l */
    +	padding: 2px 1px 2px 6px;			/* t r b l */
     }
     
     table.nobordernopadding {
    @@ -2892,6 +2941,12 @@ ul.noborder li:nth-child(odd):not(.liste_titre) {
     
     
     /* Set the color for hover lines */
    +
    +.nohoverborder:hover {
    +	border: unset;
    +	box-shadow: unset;
    +	-webkit-box-shadow: unset;
    +}
     .oddeven:hover, .evenodd:hover, .impair:hover, .pair:hover
     {
     <?php if ($colorbacklinepairhover) { ?>
    @@ -2899,6 +2954,12 @@ ul.noborder li:nth-child(odd):not(.liste_titre) {
     <?php } ?>
     }
     
    +<?php if ($colorbacklinepairchecked) { ?>
    +.highlight {
    +	background: rgb(<?php echo $colorbacklinepairchecked; ?>) !important; /* Must be background to be stronger than background of odd or even */
    +}
    +<?php } ?>
    +
     .oddeven, .evenodd, .impair, .nohover .impair:hover, tr.impair td.nohover
     {
     	font-family: <?php print $fontlist ?>;
    @@ -3188,7 +3249,7 @@ div .tdtop {
     		margin: 3px;
     	    border: 1px solid #ddd;
         	box-shadow: none;
    -    	background: #ddd;
    +    	background: #eee;
         }
     	.thumbstat {
     		flex: 1 1 110px;
    @@ -3362,7 +3423,7 @@ div.warning {
         background: #fcf8e3;
     }
     div.warning a, div.info a, div.error a {
    -	color: rgb(<?php echo $colortext; ?>);
    +	color: rgb(<?php echo $colortextlink; ?>);
     }
     
     /* Error message */
    @@ -3425,7 +3486,7 @@ div.boximport {
     .widthpictotitle { width: 40px; text-align: <?php echo $left; ?>; }
     
     .dolgraphtitle { margin-top: 6px; margin-bottom: 4px; }
    -.dolgraphtitlecssboxes { margin: 0px; }
    +.dolgraphtitlecssboxes { /* margin: 0px; */ }
     .legendColorBox, .legendLabel { border: none !important; }
     div.dolgraph div.legend, div.dolgraph div.legend div { background-color: rgba(255,255,255,0) !important; }
     div.dolgraph div.legend table tbody tr { height: auto; }
    @@ -4737,7 +4798,81 @@ span.noborderoncategories {
     
     
     /* ============================================================================== */
    -/*  Multiselect with checkbox                                                     */
    +/*  External lib multiselect with checkbox                                        */
    +/* ============================================================================== */
    +
    +.multi-select-container {
    +  display: inline-block;
    +  position: relative;
    +}
    +
    +.multi-select-menu {
    +  position: absolute;
    +  left: 0;
    +  top: 0.8em;
    +  float: left;
    +  min-width: 100%;
    +  background: #fff;
    +  margin: 1em 0;
    +  padding: 0.4em 0;
    +  border: 1px solid #aaa;
    +  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
    +  display: none;
    +}
    +
    +.multi-select-menu input {
    +  margin-right: 0.3em;
    +  vertical-align: 0.1em;
    +}
    +
    +.multi-select-button {
    +  display: inline-block;
    +  max-width: 20em;
    +  white-space: nowrap;
    +  overflow: hidden;
    +  text-overflow: ellipsis;
    +  vertical-align: middle;
    +  background-color: #fff;
    +  cursor: default;
    +
    +  border: none;
    +  border-bottom: solid 1px rgba(0,0,0,.2);
    +  padding: 5px;
    +  padding-left: 2px;
    +  height: 17px;
    +}
    +.multi-select-button:focus {
    +  outline: none;
    +  border-bottom: 1px solid #666;
    +}
    +
    +.multi-select-button:after {
    +  content: "";
    +  display: inline-block;
    +  width: 0;
    +  height: 0;
    +  border-style: solid;
    +  border-width: 0.5em 0.23em 0em 0.23em;
    +  border-color: #444 transparent transparent transparent;
    +  margin-left: 0.4em;
    +}
    +
    +.multi-select-container--open .multi-select-menu { display: block; }
    +
    +.multi-select-container--open .multi-select-button:after {
    +  border-width: 0 0.4em 0.4em 0.4em;
    +  border-color: transparent transparent #999 transparent;
    +}
    +
    +.multi-select-menuitem {
    +    clear: both;
    +    float: left;
    +    padding-left: 5px
    +}
    +
    +
    +/* ============================================================================== */
    +/*  Native multiselect with checkbox                                              */
     /* ============================================================================== */
     
     ul.ulselectedfields {
    @@ -4748,7 +4883,7 @@ dl.dropdown {
         padding:0px;
     	margin-left: 2px;
         margin-right: 2px;
    -    vertical-align: text-bottom;
    +    vertical-align: middle;
         display: inline-block;
     }
     .dropdown dd, .dropdown dt {
    @@ -4777,10 +4912,10 @@ dl.dropdown {
     }
     .dropdown dd ul {
         background-color: #FFF;
    -    border: 1px solid #888;
    +    box-shadow: 1px 1px 10px #aaa;
         display:none;
         right:0px;						/* pop is align on right */
    -    padding: 2px 15px 2px 5px;
    +    padding: 0 0 0 0;
         position:absolute;
         top:2px;
         list-style:none;
    @@ -4790,9 +4925,12 @@ dl.dropdown {
     .dropdown dd ul li {
     	white-space: nowrap;
     	font-weight: normal;
    -	padding: 2px;
    +	padding: 7px 8px 7px 8px;
     	color: #000;
     }
    +.dropdown dd ul li:hover {
    +	background: #eee;
    +}
     .dropdown dd ul li input[type="checkbox"] {
         margin-right: 3px;
     }
    @@ -4804,7 +4942,7 @@ dl.dropdown {
     	color: #888;
     }
     .dropdown dd ul li a:hover {
    -    background-color:#fff;
    +    background-color: #eee;
     }
     
     
    diff --git a/htdocs/ticket/card.php b/htdocs/ticket/card.php
    index b736b49646f..ab16161e844 100644
    --- a/htdocs/ticket/card.php
    +++ b/htdocs/ticket/card.php
    @@ -49,32 +49,49 @@ $id        = GETPOST('id', 'int');
     $track_id  = GETPOST('track_id', 'alpha', 3);
     $ref       = GETPOST('ref', 'alpha');
     $projectid = GETPOST('projectid', 'int');
    -$action    = GETPOST('action', 'alpha', 3);
    +$action    = GETPOST('action', 'aZ09');
     
     // Initialize technical object to manage hooks of ticket. Note that conf->hooks_modules contains array array
     $hookmanager->initHooks(array('ticketcard','globalcard'));
     
     $object = new Ticket($db);
    -
     $extrafields = new ExtraFields($db);
    +// Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label($object->table_element);
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
    -if (!$action) {
    -    $action = 'view';
    +// Initialize array of search criterias
    +$search_all=trim(GETPOST("search_all",'alpha'));
    +$search=array();
    +foreach($object->fields as $key => $val)
    +{
    +	if (GETPOST('search_'.$key,'alpha')) $search[$key]=GETPOST('search_'.$key,'alpha');
     }
    +
    +if (empty($action) && empty($id) && empty($ref)) $action='view';
    +
     //Select mail models is same action as add_message
     if (GETPOST('modelselected','alpha')) {
         $action = 'add_message';
     }
     
    +// Load object
    +//include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php';  // Must be include, not include_once  // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals
    +if ($id || $track_id || $ref) {
    +	$res = $object->fetch($id, $ref, $track_id);
    +	if ($res >= 0)
    +	{
    +		$id = $object->id;
    +		$track_id = $object->track_id;
    +	}
    +}
    +
     // Store current page url
     $url_page_current = DOL_URL_ROOT.'/ticket/card.php';
     
    -if ($id || $track_id || $ref) {
    -	$res = $object->fetch($id, $ref, $track_id);
    -}
    -
    -// Security check
    +// Security check - Protection if external user
    +//if ($user->societe_id > 0) access_forbidden();
    +//if ($user->societe_id > 0) $socid = $user->societe_id;
     $result = restrictedArea($user, 'ticket', $object->id);
     
     $triggermodname = 'TICKETSUP_MODIFY';
    @@ -89,7 +106,9 @@ $now = dol_now();
      * Actions
      */
     
    -// TODO Replace actions with common includes actions_addupdatedelete.inc.php
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
    +if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
     
     if ($cancel)
     {
    @@ -98,7 +117,7 @@ if ($cancel)
     		header("Location: ".$backtopage);
     		exit;
     	}
    -	$action='';
    +	$action='view';
     }
     
     // Do action
    @@ -157,26 +176,25 @@ include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';        // Must be inc
     $userstat = new User($db);
     $form = new Form($db);
     $formticket = new FormTicket($db);
    +if (! empty($conf->projet->enabled)) $formproject = new FormProjets($db);
     
    -if (! empty($conf->projet->enabled)) {
    -	$formproject = new FormProjets($db);
    -}
    +$help_url = 'FR:DocumentationModuleTicket';
    +$page_title = $actionobject->getTitle($action);
     
    -if ($action == 'view' || $action == 'add_message' || $action == 'close' || $action == 'delete' || $action == 'editcustomer' || $action == 'progression' || $action == 'reopen'
    +llxHeader('', $page_title, $help_url);
    +
    +
    +if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'dellink' || $action == 'add_message' || $action == 'close' || $action == 'delete' || $action == 'editcustomer' || $action == 'progression' || $action == 'reopen'
     	|| $action == 'editsubject' || $action == 'edit_extras' || $action == 'update_extras' || $action == 'edit_extrafields' || $action == 'set_extrafields' || $action == 'classify' || $action == 'sel_contract' || $action == 'edit_message_init' || $action == 'set_status' || $action == 'dellink')
     {
     
    -    if ($res > 0) {
    +    if ($res > 0)
    +    {
             // or for unauthorized internals users
             if (!$user->societe_id && ($conf->global->TICKET_LIMIT_VIEW_ASSIGNED_ONLY && $object->fk_user_assign != $user->id) && !$user->rights->ticket->manage) {
                 accessforbidden('', 0);
             }
     
    -        $help_url = 'FR:DocumentationModuleTicket';
    -        $page_title = $actionobject->getTitle($action);
    -
    -        llxHeader('', $page_title, $help_url);
    -
             // Confirmation close
             if ($action == 'close') {
                 print $form->formconfirm($url_page_current . "?track_id=" . $object->track_id, $langs->trans("CloseATicket"), $langs->trans("ConfirmCloseAticket"), "confirm_close", '', '', 1);
    @@ -287,7 +305,7 @@ if ($action == 'view' || $action == 'add_message' || $action == 'close' || $acti
             $morehtmlref.= $object->subject;
             // Author
             if ($object->fk_user_create > 0) {
    -        	$morehtmlref .= '<br>' . $langs->trans("CreatedBy") . '  ';
    +        	$morehtmlref .= '<br>' . $langs->trans("CreatedBy") . ' : ';
     
                 $langs->load("users");
                 $fuser = new User($db);
    @@ -295,10 +313,24 @@ if ($action == 'view' || $action == 'add_message' || $action == 'close' || $acti
                 $morehtmlref .= $fuser->getNomUrl(0);
             }
             if (!empty($object->origin_email)) {
    -        	$morehtmlref .= '<br>' . $langs->trans("CreatedBy") . ' ';
    +        	$morehtmlref .= '<br>' . $langs->trans("CreatedBy") . ' : ';
             	$morehtmlref .= $object->origin_email . ' <small>(' . $langs->trans("TicketEmailOriginIssuer") . ')</small>';
             }
     
    +        // Thirdparty
    +        if (! empty($conf->societe->enabled))
    +        {
    +	        $morehtmlref.='<br>'.$langs->trans('ThirdParty') . ' ';
    +	        if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) {
    +	        	$morehtmlref.='<a href="' . $url_page_current . '?action=editcustomer&amp;track_id=' . $object->track_id . '">' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . '</a> : ';
    +	        }
    +	        if ($action == 'editcustomer') {
    +	        	$morehtmlref.=$form->form_thirdparty($url_page_current . '?track_id=' . $object->track_id, $object->socid, 'editcustomer', '', 1, 0, 0, array(), 1);
    +	        } else {
    +	        	$morehtmlref.=$form->form_thirdparty($url_page_current . '?track_id=' . $object->track_id, $object->socid, 'none', '', 1, 0, 0, array(), 1);
    +	        }
    +        }
    +
             // Project
             if (! empty($conf->projet->enabled))
             {
    @@ -323,9 +355,7 @@ if ($action == 'view' || $action == 'add_message' || $action == 'close' || $acti
             		if (! empty($object->fk_project)) {
             			$proj = new Project($db);
             			$proj->fetch($object->fk_project);
    -        			$morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id=' . $object->fk_project . '" title="' . $langs->trans('ShowProject') . '">';
    -        			$morehtmlref.=$proj->ref;
    -        			$morehtmlref.='</a>';
    +        			$morehtmlref.=$proj->getNomUrl(1);
             		} else {
             			$morehtmlref.='';
             		}
    @@ -385,24 +415,6 @@ if ($action == 'view' || $action == 'add_message' || $action == 'close' || $acti
             }
             print '</td></tr>';
     
    -        // Thirdparty
    -        print '<tr><td>';
    -        print '<table class="nobordernopadding" width="100%"><tr><td>';
    -        print $langs->trans('ThirdParty');
    -        print '</td>';
    -        if ($action != 'editcustomer' && $object->fk_statut < 8 && !$user->societe_id && $user->rights->ticket->write) {
    -            print '<td align="right"><a href="' . $url_page_current . '?action=editcustomer&amp;track_id=' . $object->track_id . '">' . img_edit($langs->transnoentitiesnoconv('Edit'), 1) . '</a></td>';
    -        }
    -        print '</tr></table>';
    -        print '</td><td colspan="3">';
    -
    -        if ($action == 'editcustomer') {
    -            $form->form_thirdparty($url_page_current . '?track_id=' . $object->track_id, $object->fk_soc, 'editcustomer', ($object->fk_soc ? 's.rowid <> ' . $object->fk_soc : ''), 1);
    -        } else {
    -            $form->form_thirdparty($url_page_current . '?track_id=' . $object->track_id, $object->fk_soc, 'none', 's.rowid <> ' . $object->fk_soc, 1);
    -        }
    -        print '</td></tr>';
    -
             // User assigned
             print '<tr><td>' . $langs->trans("AssignedTo") . '</td><td>';
             if ($object->fk_user_assign > 0) {
    @@ -692,151 +704,146 @@ if ($action == 'view' || $action == 'add_message' || $action == 'close' || $acti
     			print '</div>';
             }
     
    -        // Contract
    -        if ($action == 'sel_contract') {
    -            if (!empty($conf->contrat->enabled)) {
    -                $langs->load('contrats');
    -                print load_fiche_titre($langs->trans('LinkToAContract'), '', 'title_commercial.png');
    -
    -                $form_contract = new FormContract($db);
    -                $form_contract->formSelectContract(
    -                    $url_page_current.'?track_id='.$object->track_id,
    -                    $object->fk_soc,
    -                    GETPOST('contractid'),
    -                    'contractid'
    -                );
    -            }
    -        }
    -
             print '</div></div></div>';
             print '<div style="clear:both"></div>';
     
    -        print dol_fiche_end();
    +		dol_fiche_end();
     
     
    -        /* ActionBar */
    -        print '<div class="tabsAction">';
    +		// Buttons for actions
    +		if ($action != 'presend' && $action != 'editline') {
    +			print '<div class="tabsAction">'."\n";
    +			$parameters=array();
    +			$reshook=$hookmanager->executeHooks('addMoreActionsButtons',$parameters,$object,$action);    // Note that $action and $object may have been modified by hook
    +			if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
     
    -        // Show link to add a message (if read and not closed)
    -        if ($object->fk_statut < 8 && $action != "add_message") {
    -            print '<div class="inline-block divButAction"><a class="butAction" href="card.php?track_id=' . $object->track_id . '&action=add_message">' . $langs->trans('TicketAddMessage') . '</a></div>';
    -        }
    +			if (empty($reshook))
    +			{
    +				// Show link to add a message (if read and not closed)
    +		        if ($object->fk_statut < 8 && $action != "add_message") {
    +		            print '<div class="inline-block divButAction"><a class="butAction" href="card.php?track_id=' . $object->track_id . '&action=add_message">' . $langs->trans('TicketAddMessage') . '</a></div>';
    +		        }
     
    -        // Link to create an intervention
    -        // socid is needed otherwise fichinter ask it and forgot origin after form submit :\
    -        if (!$object->fk_soc && $user->rights->ficheinter->creer) {
    -            print '<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="' . $langs->trans('UnableToCreateInterIfNoSocid') . '">' . $langs->trans('TicketAddIntervention') . '</a></div>';
    -        }
    -        if ($object->fk_soc > 0 && $object->fk_statut < 8 && $user->rights->ficheinter->creer) {
    -            print '<div class="inline-block divButAction"><a class="butAction" href="' . dol_buildpath('/fichinter/card.php', 1) . '?action=create&socid=' . $object->fk_soc . '&origin=ticket_ticket&originid=' . $object->id . '">' . $langs->trans('TicketAddIntervention') . '</a></div>';
    -        }
    +		        // Link to create an intervention
    +		        // socid is needed otherwise fichinter ask it and forgot origin after form submit :\
    +		        if (!$object->fk_soc && $user->rights->ficheinter->creer) {
    +		            print '<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="' . $langs->trans('UnableToCreateInterIfNoSocid') . '">' . $langs->trans('TicketAddIntervention') . '</a></div>';
    +		        }
    +		        if ($object->fk_soc > 0 && $object->fk_statut < 8 && $user->rights->ficheinter->creer) {
    +		            print '<div class="inline-block divButAction"><a class="butAction" href="' . dol_buildpath('/fichinter/card.php', 1) . '?action=create&socid=' . $object->fk_soc . '&origin=ticket_ticket&originid=' . $object->id . '">' . $langs->trans('TicketAddIntervention') . '</a></div>';
    +		        }
     
    -        //    Button to link to a contract
    -        if ($user->rights->ticket->write && $object->fk_statut < 5 && $user->rights->contrat->creer) {
    -            print '<div class="inline-block divButAction"><a class="butAction" href="card.php?track_id=' . $object->track_id . '&action=sel_contract">' . $langs->trans('LinkToAContract') . '</a></div>';
    -        }
    +		        // Close ticket if statut is read
    +		        if ($object->fk_statut > 0 && $object->fk_statut < 8 && $user->rights->ticket->write) {
    +		            print '<div class="inline-block divButAction"><a class="butAction" href="card.php?track_id=' . $object->track_id . '&action=close">' . $langs->trans('CloseTicket') . '</a></div>';
    +		        }
     
    -        // Close ticket if statut is read
    -        if ($object->fk_statut > 0 && $object->fk_statut < 8 && $user->rights->ticket->write) {
    -            print '<div class="inline-block divButAction"><a class="butAction" href="card.php?track_id=' . $object->track_id . '&action=close">' . $langs->trans('CloseTicket') . '</a></div>';
    -        }
    +		        // Re-open ticket
    +		        if (!$user->socid && $object->fk_statut == 8 && !$user->societe_id) {
    +		            print '<div class="inline-block divButAction"><a class="butAction" href="card.php?track_id=' . $object->track_id . '&action=reopen">' . $langs->trans('ReOpen') . '</a></div>';
    +		        }
     
    -        // Re-open ticket
    -        if (!$user->socid && $object->fk_statut == 8 && !$user->societe_id) {
    -            print '<div class="inline-block divButAction"><a class="butAction" href="card.php?track_id=' . $object->track_id . '&action=reopen">' . $langs->trans('ReOpen') . '</a></div>';
    -        }
    -
    -        // Delete ticket
    -        if ($user->rights->ticket->delete && !$user->societe_id) {
    -            print '<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?track_id=' . $object->track_id . '&action=delete">' . $langs->trans('Delete') . '</a></div>';
    -        }
    -        print '</div>';
    -
    -        if ($action == 'view' || $action == 'edit_message_init') {
    -            print '<div class="fichecenter"><div class="">';
    -
    -            //print '<div style="float: left; width:49%; margin-right: 1%;">';
    -            // Message list
    -            print load_fiche_titre($langs->trans('TicketMessagesList'), '', 'messages@ticket');
    -            $show_private_message = ($user->societe_id ? 0 : 1);
    -            $actionobject->viewTicketTimelineMessages($show_private_message, true, $object);
    -
    -            print '</div><!-- fichehalfleft --> ';
    -            print '</div><!-- fichecenter -->';
    -            print '<br style="clear: both">';
    -        } elseif ($action == 'add_message') {
    -            $action='new_message';
    -            $modelmail='ticket_send';
    -
    -            print '<div>';
    -            print load_fiche_titre($langs->trans('TicketAddMessage'), '', 'messages@ticket');
    -
    -            // Define output language
    -            $outputlangs = $langs;
    -            $newlang = '';
    -            if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) {
    -                $newlang = $_REQUEST['lang_id'];
    -            }
    -            if ($conf->global->MAIN_MULTILANGS && empty($newlang)) {
    -                $newlang = $object->default_lang;
    -            }
    -
    -            $formticket = new FormTicket($db);
    -
    -            $formticket->action = $action;
    -            $formticket->track_id = $object->track_id;
    -            $formticket->id = $object->id;
    -
    -            $formticket->withfile = 2;
    -            $formticket->param = array('fk_user_create' => $user->id);
    -            $formticket->param['langsmodels']=(empty($newlang)?$langs->defaultlang:$newlang);
    -
    -            // Tableau des parametres complementaires du post
    -            $formticket->param['models']=$modelmail;
    -            $formticket->param['models_id']=GETPOST('modelmailselected', 'int');
    -            //$formticket->param['socid']=$object->fk_soc;
    -            $formticket->param['returnurl']=$_SERVER["PHP_SELF"].'?track_id='.$object->track_id;
    +		        // Delete ticket
    +		        if ($user->rights->ticket->delete && !$user->societe_id) {
    +		            print '<div class="inline-block divButAction"><a class="butActionDelete" href="card.php?track_id=' . $object->track_id . '&action=delete">' . $langs->trans('Delete') . '</a></div>';
    +		        }
    +			}
    +	        print '</div>'."\n";
    +		}
     
     
    -            $formticket->withsubstit = 1;
    +		// Select mail models is same action as presend
    +		if (GETPOST('modelselected')) {
    +			$action = 'presend';
    +		}
     
    -            if ($object->fk_soc > 0) {
    -                $object->fetch_thirdparty();
    -                $formticket->substit['__THIRDPARTY_NAME__'] = $object->thirdparty->name;
    -            }
    -            $formticket->substit['__SIGNATURE__'] = $user->signature;
    -            $formticket->substit['__TICKETSUP_TRACKID__'] = $object->track_id;
    -            $formticket->substit['__TICKETSUP_REF__'] = $object->ref;
    -            $formticket->substit['__TICKETSUP_SUBJECT__'] = $object->subject;
    -            $formticket->substit['__TICKETSUP_TYPE__'] = $object->type_code;
    -            $formticket->substit['__TICKETSUP_CATEGORY__'] = $object->category_code;
    -            $formticket->substit['__TICKETSUP_SEVERITY__'] = $object->severity_code;
    -            $formticket->substit['__TICKETSUP_MESSAGE__'] = $object->message;
    -            $formticket->substit['__TICKETSUP_PROGRESSION__'] = $object->progress;
    -            if ($object->fk_user_assign > 0) {
    -                $userstat->fetch($object->fk_user_assign);
    -                $formticket->substit['__TICKETSUP_USER_ASSIGN__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname);
    -            }
    +		if (empty($action) || $action == 'view' || $action == 'addlink' || $action == 'dellink' || $action == 'edit_message_init')
    +		{
    +			print '<div class="fichecenter"><div class="fichehalfleft">';
    +			print '<a name="builddoc"></a>'; // ancre
     
    -            if ($object->fk_user_create > 0) {
    -                $userstat->fetch($object->fk_user_create);
    -                $formticket->substit['__TICKETSUP_USER_CREATE__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname);
    -            }
    +			// Show links to link elements
    +			$linktoelem = $form->showLinkToObjectBlock($object, null, array('ticket'));
    +			$somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
    +
    +			print '</div><div class="fichehalfright"><div class="ficheaddleft">';
    +
    +			// Message list
    +			print load_fiche_titre($langs->trans('TicketMessagesList'), '', 'messages@ticket');
    +			$show_private_message = ($user->societe_id ? 0 : 1);
    +			$actionobject->viewTicketTimelineMessages($show_private_message, true, $object);
    +
    +			print '</div></div>';
    +			print '</div><!-- fichecenter -->';
    +			print '<br style="clear: both">';
    +		}
    +		elseif ($action == 'add_message')
    +		{
    +			$action='new_message';
    +			$modelmail='ticket_send';
    +
    +			print '<div>';
    +			print load_fiche_titre($langs->trans('TicketAddMessage'), '', 'messages@ticket');
    +
    +			// Define output language
    +			$outputlangs = $langs;
    +			$newlang = '';
    +			if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) {
    +				$newlang = $_REQUEST['lang_id'];
    +			}
    +			if ($conf->global->MAIN_MULTILANGS && empty($newlang)) {
    +				$newlang = $object->default_lang;
    +			}
    +
    +			$formticket = new FormTicket($db);
    +
    +			$formticket->action = $action;
    +			$formticket->track_id = $object->track_id;
    +			$formticket->id = $object->id;
    +
    +			$formticket->withfile = 2;
    +			$formticket->param = array('fk_user_create' => $user->id);
    +			$formticket->param['langsmodels']=(empty($newlang)?$langs->defaultlang:$newlang);
    +
    +			// Tableau des parametres complementaires du post
    +			$formticket->param['models']=$modelmail;
    +			$formticket->param['models_id']=GETPOST('modelmailselected', 'int');
    +			//$formticket->param['socid']=$object->fk_soc;
    +			$formticket->param['returnurl']=$_SERVER["PHP_SELF"].'?track_id='.$object->track_id;
     
     
    -            $formticket->showMessageForm('100%');
    -            print '</div>';
    -        }
    -    }
    -} // End action view
    +			$formticket->withsubstit = 1;
     
    -/***************************************************
    - * LINKED OBJECT BLOCK
    - *
    - * Put here code to view linked object
    - ****************************************************/
    -$somethingshown = $form->showLinkedObjectBlock($object);
    +			if ($object->fk_soc > 0) {
    +				$object->fetch_thirdparty();
    +				$formticket->substit['__THIRDPARTY_NAME__'] = $object->thirdparty->name;
    +			}
    +			$formticket->substit['__SIGNATURE__'] = $user->signature;
    +			$formticket->substit['__TICKETSUP_TRACKID__'] = $object->track_id;
    +			$formticket->substit['__TICKETSUP_REF__'] = $object->ref;
    +			$formticket->substit['__TICKETSUP_SUBJECT__'] = $object->subject;
    +			$formticket->substit['__TICKETSUP_TYPE__'] = $object->type_code;
    +			$formticket->substit['__TICKETSUP_CATEGORY__'] = $object->category_code;
    +			$formticket->substit['__TICKETSUP_SEVERITY__'] = $object->severity_code;
    +			$formticket->substit['__TICKETSUP_MESSAGE__'] = $object->message;
    +			$formticket->substit['__TICKETSUP_PROGRESSION__'] = $object->progress;
    +			if ($object->fk_user_assign > 0) {
    +				$userstat->fetch($object->fk_user_assign);
    +				$formticket->substit['__TICKETSUP_USER_ASSIGN__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname);
    +			}
    +
    +			if ($object->fk_user_create > 0) {
    +				$userstat->fetch($object->fk_user_create);
    +				$formticket->substit['__TICKETSUP_USER_CREATE__'] = dolGetFirstLastname($userstat->firstname, $userstat->lastname);
    +			}
    +
    +
    +			$formticket->showMessageForm('100%');
    +			print '</div>';
    +	    }
    +	}
    +}
     
     // End of page
    -llxFooter('');
    +llxFooter();
     $db->close();
    diff --git a/htdocs/ticket/class/actions_ticket.class.php b/htdocs/ticket/class/actions_ticket.class.php
    index 6dc946ebad3..8f3c6985ac3 100644
    --- a/htdocs/ticket/class/actions_ticket.class.php
    +++ b/htdocs/ticket/class/actions_ticket.class.php
    @@ -35,22 +35,49 @@ require_once DOL_DOCUMENT_ROOT . '/fichinter/class/fichinter.class.php';
      */
     class ActionsTicket
     {
    +    /**
    +     * @var DoliDB Database handler.
    +     */
         public $db;
    +
         public $dao;
     
         public $mesg;
    -    public $error;
    -    public $errors = array();
    +
    +    /**
    +	 * @var string Error code (or message)
    +	 */
    +	public $error;
    +
    +    /**
    +	 * @var string[] Error codes (or messages)
    +	 */
    +	public $errors = array();
    +
         //! Numero de l'erreur
         public $errno = 0;
     
         public $template_dir;
         public $template;
     
    +    /**
    +     * @var string ticket action label
    +     */
         public $label;
    -    public $description;
     
    +    /**
    +	 * @var string description
    +	 */
    +	public $description;
    +
    +	/**
    +     * @var int ID
    +     */
         public $fk_statut;
    +
    +    /**
    +	 * @var int Thirdparty ID
    +	 */
         public $fk_soc;
     
         /**
    @@ -231,7 +258,7 @@ class ActionsTicket
                             // Extrafields
                             $extrafields = new ExtraFields($this->db);
                             $extralabels = $extrafields->fetch_name_optionals_label($fichinter->table_element);
    -                        $array_options = $extrafields->getOptionalsFromPost($extralabels);
    +                        $array_options = $extrafields->getOptionalsFromPost($fichinter->table_element);
                             $fichinter->array_options = $array_options;
     
                             $id = $fichinter->create($user);
    @@ -579,6 +606,7 @@ class ActionsTicket
          *
          * @param User $user        User for action
          * @param string $action    Action string
    +     * @return int
          */
         private function newMessage($user, &$action)
         {
    @@ -792,12 +820,14 @@ class ActionsTicket
          *
          * @param User $user        User for action
          * @param string $action    Action string
    +     * @return void
          */
         private function newMessagePublic($user, &$action)
         {
     
             global $mysoc, $conf, $langs;
     
    +        $object = new Ticket($this->db);
             $error = 0;
             $ret = $object->fetch('', '', GETPOST('track_id','alpha'));
             $object->socid = $object->fk_soc;
    @@ -815,11 +845,11 @@ class ActionsTicket
             }
     
             if (!$error) {
    -            $object->message = GETPOST("message");
    +            $object->message = (string) GETPOST("message");
                 $id = $object->createTicketMessage($user);
                 if ($id <= 0) {
                     $error++;
    -                $this->errors = $object->error;
    +                $this->error = $object->error;
                     $this->errors = $object->errors;
                     $action = 'add_message';
                 }
    @@ -949,7 +979,7 @@ class ActionsTicket
          * Print statut
          *
          * @param		int		$mode		Display mode
    -     * @return 		void
    +     * @return 		string				Label of status
          */
         public function getLibStatut($mode = 0)
         {
    @@ -962,6 +992,7 @@ class ActionsTicket
          * Get ticket info
          *
          * @param  int $id    Object id
    +     * @return void
          */
         public function getInfo($id)
         {
    @@ -975,7 +1006,8 @@ class ActionsTicket
         /**
          * Get action title
          *
    -     * @param string $action    Type of action
    +     * @param string 	$action    	Type of action
    +     * @return string			Title of action
          */
         public function getTitle($action = '')
         {
    @@ -998,10 +1030,11 @@ class ActionsTicket
          * View html list of logs
          *
          * @param boolean $show_user Show user who make action
    +     * @return void
          */
         public function viewTicketLogs($show_user = true)
         {
    -        global $conf, $langs, $bc;
    +        global $conf, $langs;
     
             // Load logs in cache
             $ret = $this->dao->loadCacheLogsTicket();
    @@ -1021,11 +1054,8 @@ class ActionsTicket
                     print '</th>';
                 }
     
    -            $var = true;
    -
                 foreach ($this->dao->cache_logs_ticket as $id => $arraylogs) {
    -                $var = !$var;
    -                print "<tr " . $bc[$var] . ">";
    +                print '<tr class="oddeven">';
                     print '<td><strong>';
                     print dol_print_date($arraylogs['datec'], 'dayhour');
                     print '</strong></td>';
    @@ -1042,7 +1072,7 @@ class ActionsTicket
                         print '</td>';
                     }
                     print '</tr>';
    -                print "<tr " . $bc[$var] . ">";
    +                print '<tr class="oddeven">';
                     print '<td colspan="2">';
                     print dol_nl2br($arraylogs['message']);
     
    @@ -1061,10 +1091,11 @@ class ActionsTicket
          *
          * @param 	boolean 	$show_user 	Show user who make action
          * @param	Ticket	$object		Object
    +     * @return void
          */
         public function viewTimelineTicketLogs($show_user = true, $object = true)
         {
    -    	global $conf, $langs, $bc;
    +    	global $conf, $langs;
     
         	// Load logs in cache
         	$ret = $object->loadCacheLogsTicket();
    @@ -1168,19 +1199,19 @@ class ActionsTicket
          *
          * @param boolean $show_private Show private messages
          * @param boolean $show_user    Show user who make action
    +     * @return void
          */
         public function viewTicketMessages($show_private, $show_user = true)
         {
    -        global $conf, $langs, $user, $bc;
    -		global $object;
    +        global $conf, $langs, $user;
     
             // Load logs in cache
    -        $ret = $object->loadCacheMsgsTicket();
    +        $ret = $this->dao->loadCacheMsgsTicket();
             $action = GETPOST('action');
     
             $this->viewTicketOriginalMessage($user, $action);
     
    -        if (is_array($object->cache_msgs_ticket) && count($object->cache_msgs_ticket) > 0) {
    +        if (is_array($this->dao->cache_msgs_ticket) && count($this->dao->cache_msgs_ticket) > 0) {
                 print_titre($langs->trans('TicketMailExchanges'));
     
                 print '<table class="border" style="width:100%;">';
    @@ -1197,13 +1228,12 @@ class ActionsTicket
                     print '</td>';
                 }
     
    -            foreach ($object->cache_msgs_ticket as $id => $arraymsgs) {
    +            foreach ($this->dao->cache_msgs_ticket as $id => $arraymsgs) {
                     if (!$arraymsgs['private']
                         || ($arraymsgs['private'] == "1" && $show_private)
                     ) {
                         //print '<tr>';
    -                    $var = !$var;
    -                    print "<tr " . $bc[$var] . ">";
    +                    print '<tr class="oddeven">';
                         print '<td><strong>';
                         print dol_print_date($arraymsgs['datec'], 'dayhour');
                         print '<strong></td>';
    @@ -1221,7 +1251,7 @@ class ActionsTicket
                             print '</td>';
                         }
                         print '</td>';
    -                    print "<tr " . $bc[$var] . ">";
    +                    print '<tr class="oddeven">';
                         print '<td colspan="2">';
                         print $arraymsgs['message'];
                         print '</td>';
    @@ -1241,10 +1271,11 @@ class ActionsTicket
          * @param 	boolean 	$show_private Show private messages
          * @param 	boolean 	$show_user    Show user who make action
          * @param	Ticket	$object		 Object ticket
    +     * @return void
          */
         public function viewTicketTimelineMessages($show_private, $show_user, Ticket $object)
         {
    -    	global $conf, $langs, $user, $bc;
    +    	global $conf, $langs, $user;
     
         	// Load logs in cache
         	$ret = $object->loadCacheMsgsTicket();
    @@ -1292,6 +1323,7 @@ class ActionsTicket
         	}
         }
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          * load_previous_next_ref
          *
    @@ -1301,6 +1333,7 @@ class ActionsTicket
          */
         function load_previous_next_ref($filter, $fieldid)
         {
    +        // phpcs:enable
             $this->getInstanceDao();
             return $object->load_previous_next_ref($filter, $fieldid);
         }
    @@ -1312,6 +1345,7 @@ class ActionsTicket
          * @param string $message          Email message
          * @param int    $send_internal_cc Receive a copy on internal email ($conf->global->TICKET_NOTIFICATION_EMAIL_FROM)
          * @param array  $array_receiver   Array of receiver. exemple array('name' => 'John Doe', 'email' => 'john@doe.com', etc...)
    +     * @return void
          */
         public function sendTicketMessageByEmail($subject, $message, $send_internal_cc = 0, $array_receiver = array())
         {
    diff --git a/htdocs/ticket/class/api_tickets.class.php b/htdocs/ticket/class/api_tickets.class.php
    index c75ab7e2450..110c27a5cce 100644
    --- a/htdocs/ticket/class/api_tickets.class.php
    +++ b/htdocs/ticket/class/api_tickets.class.php
    @@ -473,190 +473,6 @@ class Tickets extends DolibarrApi
             );
         }
     
    -
    -    /**
    -     * Get the list of tickets categories.
    -     *
    -     * @param string    $sortfield  Sort field
    -     * @param string    $sortorder  Sort order
    -     * @param int       $limit      Number of items per page
    -     * @param int       $page       Page number (starting from zero)
    -     * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)"
    -     * @return List of events types
    -     *
    -     * @url     GET setup/dictionary/categories
    -     *
    -     * @throws RestException
    -     */
    -    function getTicketsCategories($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    -    {
    -    	$list = array();
    -
    -    	$sql = "SELECT rowid, code, pos,  label, use_default, description";
    -    	$sql.= " FROM ".MAIN_DB_PREFIX."c_ticket_category as t";
    -    	$sql.= " WHERE t.active = 1";
    -    	// Add sql filters
    -    	if ($sqlfilters)
    -    	{
    -    		if (! DolibarrApi::_checkFilters($sqlfilters))
    -    		{
    -    			throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
    -    		}
    -    		$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
    -    		$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
    -    	}
    -
    -
    -    	$sql.= $this->db->order($sortfield, $sortorder);
    -
    -    	if ($limit) {
    -    		if ($page < 0) {
    -    			$page = 0;
    -    		}
    -    		$offset = $limit * $page;
    -
    -    		$sql .= $this->db->plimit($limit, $offset);
    -    	}
    -
    -    	$result = $this->db->query($sql);
    -
    -    	if ($result) {
    -    		$num = $this->db->num_rows($result);
    -    		$min = min($num, ($limit <= 0 ? $num : $limit));
    -    		for ($i = 0; $i < $min; $i++) {
    -    			$list[] = $this->db->fetch_object($result);
    -    		}
    -    	} else {
    -    		throw new RestException(503, 'Error when retrieving list of ticket categories : '.$this->db->lasterror());
    -    	}
    -
    -    	return $list;
    -    }
    -
    -    /**
    -     * Get the list of tickets severity.
    -     *
    -     * @param string    $sortfield  Sort field
    -     * @param string    $sortorder  Sort order
    -     * @param int       $limit      Number of items per page
    -     * @param int       $page       Page number (starting from zero)
    -     * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)"
    -     * @return List of events types
    -     *
    -     * @url     GET setup/dictionary/severities
    -     *
    -     * @throws RestException
    -     */
    -    function getTicketsSeverities($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    -    {
    -    	$list = array();
    -
    -    	$sql = "SELECT rowid, code, pos,  label, use_default, color, description";
    -    	$sql.= " FROM ".MAIN_DB_PREFIX."c_ticket_severity as t";
    -    	$sql.= " WHERE t.active = 1";
    -    	// Add sql filters
    -    	if ($sqlfilters)
    -    	{
    -    		if (! DolibarrApi::_checkFilters($sqlfilters))
    -    		{
    -    			throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
    -    		}
    -    		$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
    -    		$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
    -    	}
    -
    -
    -    	$sql.= $this->db->order($sortfield, $sortorder);
    -
    -    	if ($limit) {
    -    		if ($page < 0) {
    -    			$page = 0;
    -    		}
    -    		$offset = $limit * $page;
    -
    -    		$sql .= $this->db->plimit($limit, $offset);
    -    	}
    -
    -    	$result = $this->db->query($sql);
    -
    -    	if ($result) {
    -    		$num = $this->db->num_rows($result);
    -    		$min = min($num, ($limit <= 0 ? $num : $limit));
    -    		for ($i = 0; $i < $min; $i++) {
    -    			$list[] = $this->db->fetch_object($result);
    -    		}
    -    	} else {
    -    		throw new RestException(503, 'Error when retrieving list of ticket severities : '.$this->db->lasterror());
    -    	}
    -
    -    	return $list;
    -    }
    -
    -    /**
    -     * Get the list of tickets types.
    -     *
    -     * @param string    $sortfield  Sort field
    -     * @param string    $sortorder  Sort order
    -     * @param int       $limit      Number of items per page
    -     * @param int       $page       Page number (starting from zero)
    -     * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.code:like:'A%') and (t.active:>=:0)"
    -     * @return List of events types
    -     *
    -     * @url     GET setup/dictionary/types
    -     *
    -     * @throws RestException
    -     */
    -    function getTicketsTypes($sortfield = "code", $sortorder = 'ASC', $limit = 100, $page = 0, $sqlfilters = '')
    -    {
    -    	$list = array();
    -
    -    	$sql = "SELECT rowid, code, pos,  label, use_default, description";
    -    	$sql.= " FROM ".MAIN_DB_PREFIX."c_ticket_type as t";
    -    	$sql.= " WHERE t.active = 1";
    -    	if ($type) $sql.=" AND t.type LIKE '%" . $this->db->escape($type) . "%'";
    -    	if ($module)    $sql.=" AND t.module LIKE '%" . $this->db->escape($module) . "%'";
    -    	// Add sql filters
    -    	if ($sqlfilters)
    -    	{
    -    		if (! DolibarrApi::_checkFilters($sqlfilters))
    -    		{
    -    			throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
    -    		}
    -    		$regexstring='\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
    -    		$sql.=" AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
    -    	}
    -
    -
    -    	$sql.= $this->db->order($sortfield, $sortorder);
    -
    -    	if ($limit) {
    -    		if ($page < 0) {
    -    			$page = 0;
    -    		}
    -    		$offset = $limit * $page;
    -
    -    		$sql .= $this->db->plimit($limit, $offset);
    -    	}
    -
    -    	$result = $this->db->query($sql);
    -
    -    	if ($result) {
    -    		$num = $this->db->num_rows($result);
    -    		$min = min($num, ($limit <= 0 ? $num : $limit));
    -    		for ($i = 0; $i < $min; $i++) {
    -    			$list[] = $this->db->fetch_object($result);
    -    		}
    -    	} else {
    -    		throw new RestException(503, 'Error when retrieving list of ticket types : '.$this->db->lasterror());
    -    	}
    -
    -    	return $list;
    -    }
    -
    -
    -
    -
    -
         /**
          * Validate fields before create or update object
          *
    diff --git a/htdocs/ticket/class/ticket.class.php b/htdocs/ticket/class/ticket.class.php
    index 76c9eb8856e..2ac28f6b81b 100644
    --- a/htdocs/ticket/class/ticket.class.php
    +++ b/htdocs/ticket/class/ticket.class.php
    @@ -25,8 +25,8 @@
     // Put here all includes required by your class file
     require_once DOL_DOCUMENT_ROOT . "/core/class/commonobject.class.php";
     require_once DOL_DOCUMENT_ROOT . '/fichinter/class/fichinter.class.php';
    -//require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
    -//require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
    +//require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
    +//require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
     
     
     /**
    @@ -38,22 +38,27 @@ class Ticket extends CommonObject
          * @var string ID to identify managed object
          */
         public $element = 'ticket';
    +
         /**
          * @var string Name of table without prefix where object is stored
          */
         public $table_element = 'ticket';
    +
         /**
          * @var string Name of field for link to tickets
          */
         public $fk_element='fk_ticket';
    +
         /**
          * @var int  Does ticketcore support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
          */
         public $ismultientitymanaged = 1;
    +
         /**
          * @var int  Does ticketcore support extrafields ? 0=No, 1=Yes
          */
         public $isextrafieldmanaged = 1;
    +
         /**
          * @var string String with name of icon for ticketcore. Must be the part after the 'object_' into object_ticketcore.png
          */
    @@ -175,9 +180,9 @@ class Ticket extends CommonObject
         public $fields=array(
             'rowid' => array('type'=>'integer', 'label'=>'TechnicalID', 'position'=>1, 'visible'=>-2, 'enabled'=>1, 'position'=>1, 'notnull'=>1, 'index'=>1, 'comment'=>"Id"),
         	'entity' => array('type'=>'integer', 'label'=>'Entity', 'visible'=>0, 'enabled'=>1, 'position'=>5, 'notnull'=>1, 'index'=>1),
    -    	'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'css'=>'aaa'),
    +    	'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'visible'=>1, 'enabled'=>1, 'position'=>10, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object", 'css'=>''),
     	    'track_id' => array('type'=>'varchar(255)', 'label'=>'TrackID', 'visible'=>0, 'enabled'=>1, 'position'=>11, 'notnull'=>-1, 'searchall'=>1, 'help'=>"Help text"),
    -	    'fk_user_create' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Author', 'visible'=>1, 'enabled'=>1, 'position'=>15, 'notnull'=>1),
    +	    'fk_user_create' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Author', 'visible'=>1, 'enabled'=>1, 'position'=>15, 'notnull'=>1, 'css'=>'nowraponall'),
         	'origin_email' => array('type'=>'mail', 'label'=>'OriginEmail', 'visible'=>1, 'enabled'=>1, 'position'=>16, 'notnull'=>1, 'index'=>1, 'searchall'=>1, 'comment'=>"Reference of object"),
         	'subject' => array('type'=>'varchar(255)', 'label'=>'Subject', 'visible'=>1, 'enabled'=>1, 'position'=>18, 'notnull'=>-1, 'searchall'=>1, 'help'=>""),
         	'type_code' => array('type'=>'varchar(32)', 'label'=>'Type', 'visible'=>1, 'enabled'=>1, 'position'=>20, 'notnull'=>-1, 'searchall'=>1, 'help'=>"", 'css'=>'maxwidth100'),
    @@ -211,8 +216,6 @@ class Ticket extends CommonObject
         const STATUS_CANCELED = 9;
     
     
    -
    -
         /**
          *  Constructor
          *
    @@ -555,7 +558,7 @@ class Ticket extends CommonObject
          * @param  int    $offset    Offset for query
          * @param  int    $arch      archive or not (not used)
          * @param  array  $filter    Filter for query
    -     *            output
    +     *                           output
          * @return int <0 if KO, >0 if OK
          */
         public function fetchAll($user, $sortorder = 'ASC', $sortfield = 't.datec', $limit = '', $offset = 0, $arch = '', $filter = '')
    @@ -1020,7 +1023,12 @@ class Ticket extends CommonObject
             $this->tms = '';
         }
     
    -
    +    /**
    +     * print selected status
    +     *
    +     * @param string    $selected   selected status
    +     * @return void
    +     */
         public function printSelectStatus($selected = "")
         {
             print Form::selectarray('search_fk_statut', $this->statuts_short, $selected, $show_empty = 1, $key_in_label = 0, $value_as_key = 0, $option = '', $translate = 1, $maxlen = 0, $disabled = 0, $sort = '', $morecss = '');
    @@ -1159,6 +1167,7 @@ class Ticket extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
          *    Return status label of object
          *
    @@ -1168,143 +1177,144 @@ class Ticket extends CommonObject
          */
         function LibStatut($statut, $mode = 0)
         {
    +        // phpcs:enable
             global $langs;
     
             if ($mode == 0) {
                 return $langs->trans($this->statuts[$statut]);
             }
    -        if ($mode == 1) {
    +        elseif ($mode == 1) {
                 return $langs->trans($this->statuts_short[$statut]);
             }
    -        if ($mode == 2) {
    +        elseif ($mode == 2) {
                 if ($statut == 0) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 1) {
    +            elseif ($statut == 1) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut1.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 3) {
    +            elseif ($statut == 3) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut3.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 4) {
    +            elseif ($statut == 4) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 5) {
    +            elseif ($statut == 5) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut5.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 6) {
    +            elseif ($statut == 6) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 8) {
    +            elseif ($statut == 8) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut8.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 9) {
    +            elseif ($statut == 9) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut9.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
             }
    -        if ($mode == 3) {
    +        elseif ($mode == 3) {
                 if ($statut == 0) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0.png@ticket');
                 }
     
    -            if ($statut == 1) {
    +            elseif ($statut == 1) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut1.png@ticket');
                 }
     
    -            if ($statut == 3) {
    +            elseif ($statut == 3) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut3.png@ticket');
                 }
     
    -            if ($statut == 4) {
    +            elseif ($statut == 4) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4.png@ticket');
                 }
     
    -            if ($statut == 5) {
    +            elseif ($statut == 5) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut5.png@ticket');
                 }
     
    -            if ($statut == 6) {
    +            elseif ($statut == 6) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6.png@ticket');
                 }
     
    -            if ($statut == 8) {
    +            elseif ($statut == 8) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut8.png@ticket');
                 }
     
    -            if ($statut == 9) {
    +            elseif ($statut == 9) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut9.png@ticket');
                 }
             }
    -        if ($mode == 4) {
    +        elseif ($mode == 4) {
                 if ($statut == 0) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut0.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 1) {
    +            elseif ($statut == 1) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut1.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 3) {
    +            elseif ($statut == 3) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut3.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 4) {
    +            elseif ($statut == 4) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut4.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 5) {
    +            elseif ($statut == 5) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut5.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 6) {
    +            elseif ($statut == 6) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut6.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 8) {
    +            elseif ($statut == 8) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut8.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
     
    -            if ($statut == 9) {
    +            elseif ($statut == 9) {
                     return img_picto($langs->trans($this->statuts_short[$statut]), 'statut9.png@ticket') . ' ' . $langs->trans($this->statuts_short[$statut]);
                 }
             }
    -        if ($mode == 5) {
    +        elseif ($mode == 5) {
                 if ($statut == 0) {
                     return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut0.png@ticket');
                 }
     
    -            if ($statut == 1) {
    +            elseif ($statut == 1) {
                     return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut1.png@ticket');
                 }
     
    -            if ($statut == 3) {
    +            elseif ($statut == 3) {
                     return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut3.png@ticket');
                 }
     
    -            if ($statut == 4) {
    +            elseif ($statut == 4) {
                     return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut4.png@ticket');
                 }
     
    -            if ($statut == 5) {
    +            elseif ($statut == 5) {
                     return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut5.png@ticket');
                 }
     
    -            if ($statut == 6) {
    +            elseif ($statut == 6) {
                     return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut6.png@ticket');
                 }
     
    -            if ($statut == 8) {
    +            elseif ($statut == 8) {
                     return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut8.png@ticket');
                 }
     
    -            if ($statut == 9) {
    +            elseif ($statut == 9) {
                     return $langs->trans($this->statuts_short[$statut]) . ' ' . img_picto($langs->trans($this->statuts_short[$statut]), 'statut9.png@ticket');
                 }
             }
    @@ -1478,8 +1488,6 @@ class Ticket extends CommonObject
     			dol_syslog(get_class($this) . "::assignUser " . $this->error, LOG_ERR);
     			return - 1;
     		}
    -
    -		return 0;
     	}
     
         /**
    @@ -1614,8 +1622,8 @@ class Ticket extends CommonObject
                     }
                     include_once DOL_DOCUMENT_ROOT . '/core/class/CMailFile.class.php';
                     $mailfile = new CMailFile($subject, $info_sendto['email'], $from, $message, $filepath, $mimetype, $filename, $sendtocc, '', $deliveryreceipt, 0);
    -                if ($mailfile->error) {
    -                    setEventMessage($mailfile->error, 'errors');
    +                if ($mailfile->error || $mailfile->errors) {
    +                    setEventMessages($mailfile->error, $mailfile->errors, 'errors');
                     } else {
                         $result = $mailfile->sendfile();
                         if ($result > 0) {
    @@ -1627,7 +1635,7 @@ class Ticket extends CommonObject
                     }
                 }
     
    -            setEventMessage($langs->trans('TicketNotificationNumberEmailSent', $nb_sent));
    +            setEventMessages($langs->trans('TicketNotificationNumberEmailSent', $nb_sent), null, 'mesgs');
             }
     
             return $nb_sent;
    @@ -2436,6 +2444,7 @@ class Ticket extends CommonObject
         }
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
         /**
     	 *  Return if at least one photo is available
     	 *
    @@ -2444,6 +2453,7 @@ class Ticket extends CommonObject
     	 */
         function is_photo_available($sdir)
         {
    +        // phpcs:enable
             include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php';
     
             global $conf;
    @@ -2468,7 +2478,6 @@ class Ticket extends CommonObject
             }
             return false;
         }
    -
     }
     
     
    @@ -2477,7 +2486,10 @@ class Ticket extends CommonObject
      */
     class TicketsLine
     {
    -    public $id;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
     
         /**
          * @var string  $ref    Ticket reference
    @@ -2490,8 +2502,8 @@ class TicketsLine
         public $track_id;
     
         /**
    -	 * Thirdparty ID
    -	*/
    +	 * @var int Thirdparty ID
    +	 */
         public $fk_soc;
     
         /**
    @@ -2588,5 +2600,4 @@ class TicketsLine
      	 * Close ticket date
     	 */
         public $date_close = '';
    -
     }
    diff --git a/htdocs/ticket/class/ticketlogs.class.php b/htdocs/ticket/class/ticketlogs.class.php
    index ffa6a193415..66cecd6eb5e 100644
    --- a/htdocs/ticket/class/ticketlogs.class.php
    +++ b/htdocs/ticket/class/ticketlogs.class.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) - 2013-2016    Jean-François FERRY    <hello@librethic.io>
    +/* Copyright (C) 2013-2016  Jean-François FERRY     <hello@librethic.io>
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -23,8 +24,8 @@
     
     // Put here all includes required by your class file
     require_once DOL_DOCUMENT_ROOT . "/core/class/commonobject.class.php";
    -//require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
    -//require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
    +//require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
    +//require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
     
     
     /**
    @@ -32,16 +33,46 @@ require_once DOL_DOCUMENT_ROOT . "/core/class/commonobject.class.php";
      */
     class Ticketlogs// extends CommonObject
     {
    -    public $db; //!< To store db handler
    -    public $error; //!< To return error code (or message)
    -    public $errors = array(); //!< To return several error codes (or messages)
    -    public $element = 'ticketlogs'; //!< Id that identify managed objects
    +    /**
    +     * @var DoliDB Database handler.
    +     */
    +    public $db;
    +
    +    /**
    +     * @var string Error code (or message)
    +     */
    +    public $error;
    +
    +    /**
    +     * @var string[] Error codes (or messages)
    +     */
    +    public $errors = array();
    +
    +    /**
    +     * @var string ID to identify managed object
    +     */
    +    public $element = 'ticketlogs';
    +
    +    /**
    +     * @var string Name of table without prefix where object is stored
    +     */
         public $table_element = 'ticketlogs'; //!< Name of table without prefix where object is stored
     
    -    public $id;
    +    /**
    +	 * @var int ID
    +	 */
    +	public $id;
     
    +	/**
    +     * @var string trackid
    +     */
         public $fk_track_id;
    +
    +    /**
    +     * @var int user create ID
    +     */
         public $fk_user_create;
    +
         public $datec = '';
         public $message;
     
    @@ -53,7 +84,6 @@ class Ticketlogs// extends CommonObject
         public function __construct($db)
         {
             $this->db = $db;
    -        return 1;
         }
     
         /**
    @@ -75,7 +105,7 @@ class Ticketlogs// extends CommonObject
             }
     
             if (isset($this->fk_user_create)) {
    -            $this->fk_user_create = trim($this->fk_user_create);
    +            $this->fk_user_create = (int) $this->fk_user_create;
             }
     
             if (isset($this->message)) {
    @@ -114,7 +144,7 @@ class Ticketlogs// extends CommonObject
             if (!$error) {
                 $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "ticket_logs");
     
    -            if (!$notrigger) {
    +            //if (!$notrigger) {
                     // Uncomment this and change MYOBJECT to your own tag if you
                     // want this action calls a trigger.
     
    @@ -124,7 +154,7 @@ class Ticketlogs// extends CommonObject
                     //$result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf);
                     //if ($result < 0) { $error++; $this->errors=$interface->errors; }
                     //// End call triggers
    -            }
    +            //}
             }
     
             // Commit or rollback
    @@ -203,7 +233,7 @@ class Ticketlogs// extends CommonObject
             }
     
             if (isset($this->fk_user_create)) {
    -            $this->fk_user_create = trim($this->fk_user_create);
    +            $this->fk_user_create = (int) $this->fk_user_create;
             }
     
             if (isset($this->message)) {
    @@ -232,8 +262,8 @@ class Ticketlogs// extends CommonObject
                 $this->errors[] = "Error " . $this->db->lasterror();
             }
     
    -        if (!$error) {
    -            if (!$notrigger) {
    +        //if (!$error) {
    +            //if (!$notrigger) {
                     // Uncomment this and change MYOBJECT to your own tag if you
                     // want this action calls a trigger.
     
    @@ -243,8 +273,8 @@ class Ticketlogs// extends CommonObject
                     //$result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf);
                     //if ($result < 0) { $error++; $this->errors=$interface->errors; }
                     //// End call triggers
    -            }
    -        }
    +            //}
    +        //}
     
             // Commit or rollback
             if ($error) {
    @@ -274,8 +304,8 @@ class Ticketlogs// extends CommonObject
     
             $this->db->begin();
     
    -        if (!$error) {
    -            if (!$notrigger) {
    +        //if (!$error) {
    +            //if (!$notrigger) {
                     // Uncomment this and change MYOBJECT to your own tag if you
                     // want this action calls a trigger.
     
    @@ -285,8 +315,8 @@ class Ticketlogs// extends CommonObject
                     //$result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf);
                     //if ($result < 0) { $error++; $this->errors=$interface->errors; }
                     //// End call triggers
    -            }
    -        }
    +            //}
    +        //}
     
             if (!$error) {
                 $sql = "DELETE FROM " . MAIN_DB_PREFIX . "ticket_logs";
    @@ -322,10 +352,12 @@ class Ticketlogs// extends CommonObject
          */
         public function initAsSpecimen()
         {
    +	global $user;
    +	    
             $this->id = 0;
     
             $this->fk_track_id = '';
    -        $this->fk_user_create = '';
    +        $this->fk_user_create = $user->id;
             $this->datec = '';
             $this->message = '';
         }
    diff --git a/htdocs/ticket/class/ticketstats.class.php b/htdocs/ticket/class/ticketstats.class.php
    index 6b65f25016a..28a49a3bd8f 100644
    --- a/htdocs/ticket/class/ticketstats.class.php
    +++ b/htdocs/ticket/class/ticketstats.class.php
    @@ -29,7 +29,10 @@ require_once 'ticket.class.php';
      */
     class TicketStats extends Stats
     {
    -    public $table_element;
    +    /**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element;
     
         public $socid;
         public $userid;
    diff --git a/htdocs/ticket/contact.php b/htdocs/ticket/contact.php
    index 22199bed745..e836db4e1be 100644
    --- a/htdocs/ticket/contact.php
    +++ b/htdocs/ticket/contact.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2011-2016 Jean-François Ferry    <hello@librethic.io>
    - * Copyright (C) 2011      Regis Houssin        <regis@dolibarr.fr>
    + * Copyright (C) 2011      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2016      Christophe Battarel <christophe@altairis.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/ticket/document.php b/htdocs/ticket/document.php
    index e31cd98912d..69b06e431bc 100644
    --- a/htdocs/ticket/document.php
    +++ b/htdocs/ticket/document.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2007      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2010      Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012      Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012      Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010           Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2013-2016      Jean-François Ferry  <hello@librethic.io>
      *
    @@ -138,7 +138,7 @@ if ($object->id)
     
         dol_fiche_end();
     
    -    // Construit liste des fichiers
    +    // Build file list
         $filearray = dol_dir_list($upload_dir, "files", 0, '', '\.meta$', $sortfield, (strtolower($sortorder) == 'desc' ? SORT_DESC : SORT_ASC), 1);
         $totalsize = 0;
         foreach ($filearray as $key => $file) {
    @@ -158,5 +158,6 @@ else
         accessforbidden('', 0, 0);
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/ticket/history.php b/htdocs/ticket/history.php
    index c840f3aa1a8..7efe7562a03 100644
    --- a/htdocs/ticket/history.php
    +++ b/htdocs/ticket/history.php
    @@ -40,7 +40,7 @@ $langs->loadLangs(array('companies', 'other', 'ticket'));
     $id = GETPOST('id', 'int');
     $track_id = GETPOST('track_id', 'alpha', 3);
     $ref = GETPOST('ref', 'alpha');
    -$action = GETPOST('action', 'alpha', 3);
    +$action = GETPOST('action', 'aZ09');
     
     // Security check
     if (!$user->rights->ticket->read) {
    diff --git a/htdocs/ticket/index.php b/htdocs/ticket/index.php
    index 1f01e335a7c..086ea63bc0e 100644
    --- a/htdocs/ticket/index.php
    +++ b/htdocs/ticket/index.php
    @@ -35,7 +35,7 @@ $HEIGHT = DolGraph::getDefaultGraphSizeForStats('height');
     $id = GETPOST('id', 'int');
     $msg_id = GETPOST('msg_id', 'int');
     
    -$action = GETPOST('action', 'alpha', 3);
    +$action = GETPOST('action', 'aZ09');
     
     if ($user->societe_id) {
         $socid = $user->societe_id;
    diff --git a/htdocs/ticket/list.php b/htdocs/ticket/list.php
    index 76edc111b14..c48b86ed8f9 100644
    --- a/htdocs/ticket/list.php
    +++ b/htdocs/ticket/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2013-2018	Jean-François FERRY	<hello@librethic.io>
      * Copyright (C) 2016		Christophe Battarel	<christophe@altairis.fr>
    - * Copyright (C) 2018		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2018		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -38,7 +38,7 @@ $langs->loadLangs(array("ticket","companies","other","projects"));
     
     
     // Get parameters
    -$action     = GETPOST('action','alpha')?GETPOST('action','alpha'):'view';				// The action 'add', 'create', 'edit', 'update', 'view', ...
    +$action     = GETPOST('action','aZ09')?GETPOST('action','aZ09'):'view';				// The action 'add', 'create', 'edit', 'update', 'view', ...
     $massaction = GETPOST('massaction','alpha');											// The bulk action (combo box choice into lists)
     $show_files = GETPOST('show_files','int');												// Show files area generated by bulk actions ?
     $confirm    = GETPOST('confirm','alpha');												// Result of a confirmation
    @@ -62,7 +62,7 @@ $limit = GETPOST('limit','int')?GETPOST('limit','int'):$conf->liste_limit;
     $sortfield = GETPOST('sortfield','alpha');
     $sortorder = GETPOST('sortorder','alpha');
     $page = GETPOST('page','int');
    -if (empty($page) || $page == -1) { $page = 0; }     // If $page is not defined, or '' or -1
    +if (empty($page) || $page == -1 || GETPOST('button_search','alpha') || GETPOST('button_removefilter','alpha') || (empty($toselect) && $massaction === '0')) { $page = 0; }     // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action
     $offset = $limit * $page;
     $pageprev = $page - 1;
     $pagenext = $page + 1;
    @@ -74,10 +74,9 @@ $diroutputmassaction=$conf->ticket->dir_output . '/temp/massgeneration/'.$user->
     if ($socid > 0)       $hookmanager->initHooks(array('thirdpartyticket'));
     elseif ($project > 0) $hookmanager->initHooks(array('projectticket'));
     else $hookmanager->initHooks(array('ticketlist'));
    -
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('ticket');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Default sort order (if not yet defined by previous GETPOST)
     if (! $sortfield) $sortfield="t.".key($object->fields);   // Set here default search field. By default 1st field in definition.
    @@ -186,7 +185,7 @@ $user_assign = new User($db);
     $user_create = new User($db);
     $socstatic = new Societe($db);
     
    -$help_url = 'FR:DocumentationModuleTicket';
    +$help_url = '';
     $title = $langs->trans('TicketList');
     
     llxHeader('', $title, $help_url);
    @@ -409,7 +408,6 @@ if ($projectid > 0) {
             dol_fiche_end();
     
             $object = $savobject;
    -
         } else {
             print "ErrorRecordNotFound";
         }
    @@ -436,7 +434,7 @@ $arrayofmassactions =  array(
     	//'builddoc'=>$langs->trans("PDFMerge"),
     );
     if ($user->rights->ticket->delete) $arrayofmassactions['predelete']=$langs->trans("Delete");
    -if (in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array();
    +if (GETPOST('nomassaction','int') || in_array($massaction, array('presend','predelete'))) $arrayofmassactions=array();
     $massactionbutton=$form->selectMassAction('', $arrayofmassactions);
     
     print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
    @@ -519,30 +517,30 @@ print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"")
     print '<tr class="liste_titre">';
     foreach($object->fields as $key => $val)
     {
    -	$align='';
    -	if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center';
    -	if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap';
    -	if ($key == 'status') $align.=($align?' ':'').'center';
    +	$cssforfield='';
    +	if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center';
    +	if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap';
    +	if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center';
     	if (! empty($arrayfields['t.'.$key]['checked'])) {
     		if ($key == 'type_code') {
    -			print '<td class="liste_titre'.($align?' '.$align:'').'">';
    +			print '<td class="liste_titre'.($cssforfield?' '.$cssforfield:'').'">';
     			$formTicket->selectTypesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 0, 1, 1, 0, ($val['css']?$val['css']:'maxwidth200'));
     			print '</td>';
     		} elseif ($key == 'category_code') {
    -			print '<td class="liste_titre'.($align?' '.$align:'').'">';
    +			print '<td class="liste_titre'.($cssforfield?' '.$cssforfield:'').'">';
     			$formTicket->selectCategoriesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 0, 1, 1, 0, ($val['css']?$val['css']:'maxwidth200'));
     			print '</td>';
     		} elseif ($key == 'severity_code') {
    -			print '<td class="liste_titre'.($align?' '.$align:'').'">';
    +			print '<td class="liste_titre'.($cssforfield?' '.$cssforfield:'').'">';
     			$formTicket->selectSeveritiesTickets(dol_escape_htmltag($search[$key]), 'search_'.$key.'', '', 0, 1, 1, 0, ($val['css']?$val['css']:'maxwidth200'));
     			print '</td>';
     		} elseif ($key == 'fk_statut') {
    -			print '<td class="liste_titre'.($align?' '.$align:'').'">';
    +			print '<td class="liste_titre'.($cssforfield?' '.$cssforfield:'').'">';
     			$object->printSelectStatus(dol_escape_htmltag($search[$key]));
     			print '</td>';
     		}
     		else {
    -			print '<td class="liste_titre'.($align?' '.$align:'').'"><input type="text" class="flat maxwidth75" name="search_'.$key.'" value="'.dol_escape_htmltag($search[$key]).'"></td>';
    +			print '<td class="liste_titre'.($cssforfield?' '.$cssforfield:'').'"><input type="text" class="flat maxwidth75" name="search_'.$key.'" value="'.dol_escape_htmltag($search[$key]).'"></td>';
     		}
     	}
     }
    @@ -566,11 +564,14 @@ print '</tr>'."\n";
     print '<tr class="liste_titre">';
     foreach($object->fields as $key => $val)
     {
    -	$align='';
    -	if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center';
    -	if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap';
    -	if ($key == 'status') $align.=($align?' ':'').'center';
    -	if (! empty($arrayfields['t.'.$key]['checked'])) print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($align?'class="'.$align.'"':''), $sortfield, $sortorder, $align.' ')."\n";
    +	$cssforfield='';
    +	if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center';
    +	if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap';
    +	if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center';
    +	if (! empty($arrayfields['t.'.$key]['checked']))
    +	{
    +		print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield?'class="'.$cssforfield.'"':''), $sortfield, $sortorder, ($cssforfield?$cssforfield.' ':''))."\n";
    +	}
     }
     // Extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
    @@ -613,14 +614,18 @@ while ($i < min($num, $limit))
     	print '<tr class="oddeven">';
     	foreach($object->fields as $key => $val)
     	{
    -		$align='';
    -		if (in_array($val['type'], array('date','datetime','timestamp'))) $align.=($align?' ':'').'center';
    -		if (in_array($val['type'], array('timestamp'))) $align.=($align?' ':'').'nowrap';
    -		if ($key == 'status') $align.=($align?' ':'').'center';
    +		$cssforfield='';
    +		if (in_array($val['type'], array('date','datetime','timestamp'))) $cssforfield.=($cssforfield?' ':'').'center';
    +		if (in_array($val['type'], array('timestamp'))) $cssforfield.=($cssforfield?' ':'').'nowrap';
    +		if ($key == 'status') $cssforfield.=($cssforfield?' ':'').'center';
     		if (! empty($arrayfields['t.'.$key]['checked']))
     		{
     			print '<td';
    -			if ($align) print ' class="'.$align.'"';
    +			if ($cssforfield || $val['css']) print ' class="';
    +			print $cssforfield;
    +			if ($cssforfield && $val['css']) print ' ';
    +			print $val['css'];
    +			if ($cssforfield || $val['css']) print '"';
     			print '>';
     			print $object->showOutputField($val, $key, $obj->$key, '');
     			print '</td>';
    @@ -701,7 +706,7 @@ if (in_array('builddoc',$arrayofmassactions) && ($nbtotalofrecords === '' || $nb
     	$hidegeneratedfilelistifempty=1;
     	if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) $hidegeneratedfilelistifempty=0;
     
    -	require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
    +	require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
     	$formfile = new FormFile($db);
     
     	// Show list of available documents
    diff --git a/htdocs/ticket/new.php b/htdocs/ticket/new.php
    index 8f33d87c804..267e3e63847 100644
    --- a/htdocs/ticket/new.php
    +++ b/htdocs/ticket/new.php
    @@ -37,7 +37,7 @@ $contactid = GETPOST('contactid', 'int');
     $msg_id = GETPOST('msg_id', 'int');
     $notifyTiers = GETPOST("notify_tiers_at_create", 'alpha');
     
    -$action = GETPOST('action', 'alpha', 3);
    +$action = GETPOST('action', 'aZ09');
     
     // Protection if external user
     if (!$user->rights->ticket->read || !$user->rights->ticket->write) {
    diff --git a/htdocs/ticket/tpl/linkedobjectblock.tpl.php b/htdocs/ticket/tpl/linkedobjectblock.tpl.php
    index dd9f340429e..07ee09cea05 100644
    --- a/htdocs/ticket/tpl/linkedobjectblock.tpl.php
    +++ b/htdocs/ticket/tpl/linkedobjectblock.tpl.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2010-2012 Regis Houssin <regis@dolibarr.fr>
    +/* Copyright (C) 2010-2012 Regis Houssin <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Jean-François FERRY <hello@librethic.io>
      *
      * This program is free software; you can redistribute it and/or modify
    diff --git a/htdocs/user/admin/group_extrafields.php b/htdocs/user/admin/group_extrafields.php
    index 0dd5cf9ce7e..27fbc7c152c 100644
    --- a/htdocs/user/admin/group_extrafields.php
    +++ b/htdocs/user/admin/group_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2014	   Alexis Algoud		<alexis@atm-consulting.fr>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -82,7 +82,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
     	print '<div class="tabsAction">';
    -	print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +	print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
     	print "</div>";
     }
     
    @@ -95,7 +95,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -	print "<br>";
    +	print '<br><div id="newattrib"></div>';
     	print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -114,6 +114,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/user/admin/user_extrafields.php b/htdocs/user/admin/user_extrafields.php
    index bf704af2003..eaf118d361a 100644
    --- a/htdocs/user/admin/user_extrafields.php
    +++ b/htdocs/user/admin/user_extrafields.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2001-2002	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2003		Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -81,7 +81,7 @@ dol_fiche_end();
     if ($action != 'create' && $action != 'edit')
     {
     	print '<div class="tabsAction">';
    -	print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create\">".$langs->trans("NewAttribute")."</a>";
    +	print "<a class=\"butAction\" href=\"".$_SERVER["PHP_SELF"]."?action=create#newattrib\">".$langs->trans("NewAttribute")."</a>";
     	print "</div>";
     }
     
    @@ -94,7 +94,7 @@ if ($action != 'create' && $action != 'edit')
     
     if ($action == 'create')
     {
    -	print "<br>";
    +	print '<br><div id="newattrib"></div>';
     	print load_fiche_titre($langs->trans('NewAttribute'));
     
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_add.tpl.php';
    @@ -113,6 +113,6 @@ if ($action == 'edit' && ! empty($attrname))
         require DOL_DOCUMENT_ROOT.'/core/tpl/admin_extrafields_edit.tpl.php';
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/user/agenda_extsites.php b/htdocs/user/agenda_extsites.php
    index 2d94711aae8..2eb2ede000b 100644
    --- a/htdocs/user/agenda_extsites.php
    +++ b/htdocs/user/agenda_extsites.php
    @@ -162,12 +162,17 @@ if ($user->rights->user->user->lire || $user->admin) {
     
     dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin);
     
    -print $langs->trans("AgendaExtSitesDesc")."<br>\n";
    +
    +print '<div class="underbanner clearboth"></div>';
    +
    +print '<br>';
    +print '<span class="opacitymedium">'.$langs->trans("AgendaExtSitesDesc")."</span><br>\n";
     print "<br>\n";
     
     $selectedvalue=$conf->global->AGENDA_DISABLE_EXT;
     if ($selectedvalue==1) $selectedvalue=0; else $selectedvalue=1;
     
    +
     print '<div class="div-table-responsive">';
     print "<table class=\"noborder\" width=\"100%\">";
     
    @@ -210,15 +215,15 @@ while ($i <= $MAXAGENDA)
     print '</table>';
     print '</div>';
     
    -dol_fiche_end();
     
     print '<div class="center">';
     print "<input type=\"submit\" id=\"save\" name=\"save\" class=\"button hideifnotset\" value=\"".$langs->trans("Save")."\">";
     print "</div>";
     
    +dol_fiche_end();
    +
     print "</form>\n";
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/user/bank.php b/htdocs/user/bank.php
    index 2f9fb787c72..c76cab34f3b 100644
    --- a/htdocs/user/bank.php
    +++ b/htdocs/user/bank.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Jean-Louis Bergamo   <jlb@j1b.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2009 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013      Peter Fontaine       <contact@peterfontaine.fr>
      * Copyright (C) 2015-2016 Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2015	   Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
    @@ -311,7 +311,7 @@ if ($action != 'edit' && $action != 'create')		// If not bank account yet, $acco
     	        print '<table class="noborder" width="100%">';
     
                 print '<tr class="liste_titre">';
    -   			print '<td colspan="4"><table width="100%" class="nobordernopadding"><tr><td>'.$langs->trans("LastSalaries",($num<=$MAXLIST?"":$MAXLIST)).'</td><td align="right"><a class="notasortlink" href="'.DOL_URL_ROOT.'/compta/salaries/index.php?search_user='.$object->login.'">'.$langs->trans("AllSalaries").' <span class="badge">'.$num.'</span></a></td>';
    +   			print '<td colspan="4"><table width="100%" class="nobordernopadding"><tr><td>'.$langs->trans("LastSalaries",($num<=$MAXLIST?"":$MAXLIST)).'</td><td align="right"><a class="notasortlink" href="'.DOL_URL_ROOT.'/compta/salaries/list.php?search_user='.$object->login.'">'.$langs->trans("AllSalaries").' <span class="badge">'.$num.'</span></a></td>';
        			print '</tr></table></td>';
        			print '</tr>';
     
    @@ -558,6 +558,6 @@ if ($id && $action == 'edit' && $user->rights->user->user->creer) print '</form>
     
     if ($id && $action == 'create' && $user->rights->user->user->creer) print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/user/card.php b/htdocs/user/card.php
    index a7282783166..fed2cc5de64 100644
    --- a/htdocs/user/card.php
    +++ b/htdocs/user/card.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2018 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2018 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Lionel Cousteix      <etm_ltd@tiscali.co.uk>
      * Copyright (C) 2011      Herve Prot           <herve.prot@symeos.com>
      * Copyright (C) 2012      Juanjo Menent        <jmenent@2byte.es>
    @@ -11,8 +11,10 @@
      * Copyright (C) 2013-2016 Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2015-2017 Jean-François Ferry  <jfefe@aternatik.fr>
      * Copyright (C) 2015      Ari Elbaz (elarifr)  <github@accedinfo.com>
    - * Copyright (C) 2015      Charlie Benke        <charlie@patas-monkey.com>
    + * Copyright (C) 2015-2018 Charlene Benke       <charlie@patas-monkey.com>
      * Copyright (C) 2016      Raphaël Doursenaud   <rdoursenaud@gpcsolutions.fr>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
    + * Copyright (C) 2018      David Beniamine      <David.Beniamine@Tetras-Libre.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -191,7 +193,7 @@ if (empty($reshook)) {
     			$birth = dol_mktime(0, 0, 0, GETPOST('birthmonth'), GETPOST('birthday'), GETPOST('birthyear'));
     			$object->birth = $birth;
     			$object->admin = GETPOST("admin", 'alpha');
    -			$object->address = GETPOST('address', 'alpha');
    +			$object->address = GETPOST('address', 'alphanohtml');
     			$object->zip = GETPOST('zipcode', 'alpha');
     			$object->town = GETPOST('town', 'alpha');
     			$object->country_id = GETPOST('country_id', 'int');
    @@ -200,6 +202,8 @@ if (empty($reshook)) {
     			$object->office_fax = GETPOST("office_fax", 'alpha');
     			$object->user_mobile = GETPOST("user_mobile");
     			$object->skype = GETPOST("skype", 'alpha');
    +			$object->twitter = GETPOST("twitter", 'alpha');
    +			$object->facebook = GETPOST("facebook", 'alpha');
     			$object->email = preg_replace('/\s+/', '', GETPOST("email", 'alpha'));
     			$object->job = GETPOST("job", 'alpha');
     			$object->signature = GETPOST("signature");
    @@ -219,6 +223,9 @@ if (empty($reshook)) {
     			$dateemployment = dol_mktime(0, 0, 0, GETPOST('dateemploymentmonth'), GETPOST('dateemploymentday'), GETPOST('dateemploymentyear'));
     			$object->dateemployment = $dateemployment;
     
    +			$dateemploymentend = dol_mktime(0, 0, 0, GETPOST('dateemploymentendmonth'), GETPOST('dateemploymentendday'), GETPOST('dateemploymentendyear'));
    +			$object->dateemploymentend = $dateemploymentend;
    +
     			// Fill array 'array_options' with data from add form
     			$ret = $extrafields->setOptionalsFromPost($extralabels, $object);
     			if ($ret < 0) {
    @@ -335,7 +342,7 @@ if (empty($reshook)) {
     				$object->pass = GETPOST("password",'none');
     				$object->api_key = (GETPOST("api_key", 'alpha')) ? GETPOST("api_key", 'alpha') : $object->api_key;
     				if (! empty($user->admin)) $object->admin = GETPOST("admin"); 	// admin flag can only be set/unset by an admin user. A test is also done later when forging sql request
    -				$object->address = GETPOST('address', 'alpha');
    +				$object->address = GETPOST('address', 'alphanohtml');
     				$object->zip = GETPOST('zipcode', 'alpha');
     				$object->town = GETPOST('town', 'alpha');
     				$object->country_id = GETPOST('country_id', 'int');
    @@ -344,6 +351,8 @@ if (empty($reshook)) {
     				$object->office_fax = GETPOST("office_fax", 'alpha');
     				$object->user_mobile = GETPOST("user_mobile");
     				$object->skype = GETPOST("skype", 'alpha');
    +				$object->twitter = GETPOST("twitter", 'alpha');
    +				$object->facebook = GETPOST("facebook", 'alpha');
     				$object->email = preg_replace('/\s+/', '', GETPOST("email", 'alpha'));
     				$object->job = GETPOST("job", 'alpha');
     				$object->signature = GETPOST("signature",'none');
    @@ -361,6 +370,8 @@ if (empty($reshook)) {
     				$object->color = GETPOST("color",'alpha') != '' ? GETPOST("color",'alpha') : '';
     				$dateemployment = dol_mktime(0, 0, 0, GETPOST('dateemploymentmonth','int'), GETPOST('dateemploymentday','int'), GETPOST('dateemploymentyear','int'));
     				$object->dateemployment = $dateemployment;
    +				$dateemploymentend = dol_mktime(0, 0, 0, GETPOST('dateemploymentendmonth','int'), GETPOST('dateemploymentendday','int'), GETPOST('dateemploymentendyear','int'));
    +				$object->dateemploymentend = $dateemploymentend;
     
     				if (! empty($conf->multicompany->enabled))
     				{
    @@ -582,6 +593,8 @@ if (empty($reshook)) {
     					$ldap_fax = $attribute[$conf->global->LDAP_FIELD_FAX];
     					$ldap_mobile = $attribute[$conf->global->LDAP_FIELD_MOBILE];
     					$ldap_skype = $attribute[$conf->global->LDAP_FIELD_SKYPE];
    +					$ldap_twitter = $attribute[$conf->global->LDAP_FIELD_TWITTER];
    +					$ldap_facebook = $attribute[$conf->global->LDAP_FIELD_FACEBOOK];
     					$ldap_mail = $attribute[$conf->global->LDAP_FIELD_MAIL];
     					$ldap_sid = $attribute[$conf->global->LDAP_FIELD_SID];
     				}
    @@ -684,7 +697,6 @@ if ($action == 'create' || $action == 'adduserldap')
     					}
     					$liste[$key] = $label;
     				}
    -
     			}
     			else
     			{
    @@ -994,7 +1006,7 @@ if ($action == 'create' || $action == 'adduserldap')
     	print '</td></tr>';
     
     	// Skype
    -	if (! empty($conf->skype->enabled))
    +	if (! empty($conf->socialnetworks->enabled))
     	{
     		print '<tr><td>'.$langs->trans("Skype").'</td>';
     		print '<td>';
    @@ -1005,7 +1017,41 @@ if ($action == 'create' || $action == 'adduserldap')
     		}
     		else
     		{
    -			print '<input class="maxwidth200" type="text" name="skype" value="'.GETPOST('skype').'">';
    +			print '<input class="maxwidth200" type="text" name="skype" value="'.GETPOST('skype','alpha').'">';
    +		}
    +		print '</td></tr>';
    +	}
    +
    +	// Twitter
    +	if (! empty($conf->socialnetworks->enabled))
    +	{
    +		print '<tr><td>'.$langs->trans("Twitter").'</td>';
    +		print '<td>';
    +		if (! empty($ldap_twitter))
    +		{
    +			print '<input type="hidden" name="twitter" value="'.$ldap_twitter.'">';
    +			print $ldap_twitter;
    +		}
    +		else
    +		{
    +			print '<input class="maxwidth200" type="text" name="twitter" value="'.GETPOST('twitter','alpha').'">';
    +		}
    +		print '</td></tr>';
    +	}
    +
    +	// Facebook
    +	if (! empty($conf->socialnetworks->enabled))
    +	{
    +		print '<tr><td>'.$langs->trans("Facebook").'</td>';
    +		print '<td>';
    +		if (! empty($ldap_facebook))
    +		{
    +			print '<input type="hidden" name="facebook" value="'.$ldap_facebook.'">';
    +			print $ldap_facebook;
    +		}
    +		else
    +		{
    +			print '<input class="maxwidth200" type="text" name="facebook" value="'.GETPOST('facebook','alpha').'">';
     		}
     		print '</td></tr>';
     	}
    @@ -1153,14 +1199,21 @@ if ($action == 'create' || $action == 'adduserldap')
     	// Date employment
     	print '<tr><td>'.$langs->trans("DateEmployment").'</td>';
     	print '<td>';
    -	echo $form->select_date(GETPOST('dateemployment'),'dateemployment',0,0,1,'form'.'dateemployment',1,0,1);
    +	print $form->selectDate(GETPOST('dateemployment'), 'dateemployment', 0, 0, 1, 'formdateemployment', 1, 0);
    +	print '</td>';
    +	print "</tr>\n";
    +
    +	// Date employment END
    +	print '<tr><td>'.$langs->trans("DateEmploymentEnd").'</td>';
    +	print '<td>';
    +	print $form->selectDate(GETPOST('dateemploymentend'), 'dateemploymentend', 0, 0, 1, 'formdateemploymentend', 1, 0);
     	print '</td>';
     	print "</tr>\n";
     
     	// Date birth
     	print '<tr><td>'.$langs->trans("DateToBirth").'</td>';
     	print '<td>';
    -	echo $form->select_date(GETPOST('birth'),'birth',0,0,1,'createuser',1,0,1);
    +	print $form->selectDate(GETPOST('birth'), 'birth', 0, 0, 1, 'createuser', 1, 0);
     	print '</td>';
     	print "</tr>\n";
     
    @@ -1191,8 +1244,11 @@ else
     		$res=$object->fetch_optionals();
     
     		// Check if user has rights
    -		$object->getrights();
    -		if (empty($object->nb_rights) && $object->statut != 0) setEventMessages($langs->trans('UserHasNoPermissions'), null, 'warnings');
    +		if (empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE))
    +		{
    +			$object->getrights();
    +			if (empty($object->nb_rights) && $object->statut != 0) setEventMessages($langs->trans('UserHasNoPermissions'), null, 'warnings');
    +		}
     
     		// Connexion ldap
     		// pour recuperer passDoNotExpire et userChangePassNextLogon
    @@ -1327,7 +1383,7 @@ else
     			// Password
     			print '<tr><td>'.$langs->trans("Password").'</td>';
     
    -			print '<td>';
    +			print '<td class="wordbreak">';
     			$valuetoshow='';
     			if (preg_match('/ldap/',$dolibarr_main_authentication))
     			{
    @@ -1503,6 +1559,13 @@ else
     			print '</td>';
     			print "</tr>\n";
     
    +			// Date employment
    +			print '<tr><td>'.$langs->trans("DateEmploymentEnd").'</td>';
    +			print '<td>';
    +			print dol_print_date($object->dateemploymentend);
    +			print '</td>';
    +			print "</tr>\n";
    +
     			// Date of birth
     			print '<tr><td>'.$langs->trans("DateToBirth").'</td>';
     			print '<td>';
    @@ -2075,7 +2138,16 @@ else
     		   	// Employee
     		   	print '<tr>';
     		   	print '<td>'.fieldLabel('Employee','employee',0).'</td><td>';
    -		   	print $form->selectyesno("employee",$object->employee,1);
    +			if ($caneditfield)
    +			{
    +		   		print $form->selectyesno("employee",$object->employee,1);
    +			}else{
    +				if ($object->employee){
    +					print $langs->trans("Yes");
    +				}else{
    +					print $langs->trans("No");
    +				}
    +			}
     		   	print '</td></tr>';
     
     		   	// Hierarchy
    @@ -2172,7 +2244,7 @@ else
     			print '</td></tr>';
     
     			// Skype
    -			if (! empty($conf->skype->enabled))
    +			if (! empty($conf->socialnetworks->enabled))
     			{
     				print '<tr><td>'.$langs->trans("Skype").'</td>';
     				print '<td>';
    @@ -2188,6 +2260,40 @@ else
     				print '</td></tr>';
     			}
     
    +			// Twitter
    +			if (! empty($conf->socialnetworks->enabled))
    +			{
    +				print '<tr><td>'.$langs->trans("Twitter").'</td>';
    +				print '<td>';
    +				if ($caneditfield  && empty($object->ldap_sid))
    +				{
    +					print '<input size="40" type="text" name="twitter" class="flat" value="'.$object->twitter.'">';
    +				}
    +				else
    +				{
    +					print '<input type="hidden" name="twitter" value="'.$object->twitter.'">';
    +					print $object->twitter;
    +				}
    +				print '</td></tr>';
    +			}
    +
    +			// Skype
    +			if (! empty($conf->socialnetworks->enabled))
    +			{
    +				print '<tr><td>'.$langs->trans("Facebook").'</td>';
    +				print '<td>';
    +				if ($caneditfield  && empty($object->ldap_sid))
    +				{
    +					print '<input size="40" type="text" name="facebook" class="flat" value="'.$object->facebook.'">';
    +				}
    +				else
    +				{
    +					print '<input type="hidden" name="facebook" value="'.$object->facebook.'">';
    +					print $object->facebook;
    +				}
    +				print '</td></tr>';
    +			}
    +
     			// EMail
     			print "<tr>".'<td'.(! empty($conf->global->USER_MAIL_REQUIRED)?' class="fieldrequired"':'').'>'.$langs->trans("EMail").'</td>';
     			print '<td>';
    @@ -2245,7 +2351,12 @@ else
     			{
     				print '<tr><td>'.$langs->trans("ColorUser").'</td>';
     				print '<td>';
    -				print $formother->selectColor(GETPOST('color')?GETPOST('color'):$object->color, 'color', null, 1, '', 'hideifnotset');
    +				if ($caneditfield)
    +				{
    +					print $formother->selectColor(GETPOST('color')?GETPOST('color'):$object->color, 'color', null, 1, '', 'hideifnotset');
    +				}else{
    +					print $formother->showColor($object->color, '');
    +				}
     				print '</td></tr>';
     			}
     
    @@ -2268,7 +2379,12 @@ else
     				foreach ($cats as $cat) {
     					$arrayselected[] = $cat->id;
     				}
    -				print $form->multiselectarray( 'usercats', $cate_arbo, $arrayselected, '', 0, '', 0, '90%' );
    +				if ($caneditfield)
    +				{
    +					print $form->multiselectarray( 'usercats', $cate_arbo, $arrayselected, '', 0, '', 0, '90%' );
    +				}else{
    +					print $form->showCategories( $object->id, 'user', 1 );
    +				}
     				print "</td></tr>";
     			}
     
    @@ -2351,7 +2467,12 @@ else
     			print $hookmanager->resPrint;
     			if (empty($reshook))
     			{
    -				print $object->showOptionals($extrafields,'edit');
    +				if ($caneditfield)
    +				{
    +					print $object->showOptionals($extrafields,'edit');
    +				}else{
    +					print $object->showOptionals($extrafields,'view');
    +				}
     			}
     
     			// Signature
    @@ -2400,7 +2521,11 @@ else
     				print $form->textwithpicto($text, $langs->trans("THMDescription"), 1, 'help', 'classthm');
     				print '</td>';
     				print '<td>';
    -				print '<input size="8" type="text" name="thm" value="'.price2num(GETPOST('thm')?GETPOST('thm'):$object->thm).'">';
    +				if($caneditfield){
    +					print '<input size="8" type="text" name="thm" value="'.price2num(GETPOST('thm')?GETPOST('thm'):$object->thm).'">';
    +				}else{
    +					print ($object->thm!=''?price($object->thm,'',$langs,1,-1,-1,$conf->currency):'');
    +				}
     				print '</td>';
     				print "</tr>\n";
     
    @@ -2410,7 +2535,12 @@ else
     				print $form->textwithpicto($text, $langs->trans("TJMDescription"), 1, 'help', 'classthm');
     				print '</td>';
     				print '<td>';
    -				print '<input size="8" type="text" name="tjm" value="'.price2num(GETPOST('tjm')?GETPOST('tjm'):$object->tjm).'">';
    +				if($caneditfield)
    +				{
    +					print '<input size="8" type="text" name="tjm" value="'.price2num(GETPOST('tjm')?GETPOST('tjm'):$object->tjm).'">';
    +				}else{
    +					print ($object->tjm!=''?price($object->tjm,'',$langs,1,-1,-1,$conf->currency):'');
    +				}
     				print '</td>';
     				print "</tr>\n";
     
    @@ -2425,21 +2555,49 @@ else
     			// Weeklyhours
     			print '<tr><td>'.$langs->trans("WeeklyHours").'</td>';
     			print '<td>';
    -			print '<input size="8" type="text" name="weeklyhours" value="'.price2num(GETPOST('weeklyhours')?GETPOST('weeklyhours'):$object->weeklyhours).'">';
    +			if($caneditfield)
    +			{
    +				print '<input size="8" type="text" name="weeklyhours" value="'.price2num(GETPOST('weeklyhours')?GETPOST('weeklyhours'):$object->weeklyhours).'">';
    +			}else{
    +				print price2num($object->weeklyhours);
    +			}
     			print '</td>';
     			print "</tr>\n";
     
     			// Date employment
     			print '<tr><td>'.$langs->trans("DateEmployment").'</td>';
     			print '<td>';
    -			echo $form->select_date(GETPOST('dateemployment')?GETPOST('dateemployment'):$object->dateemployment,'dateemployment',0,0,1,'form'.'dateemployment',1,0,1);
    +			if($caneditfield)
    +			{
    +				print $form->selectDate(GETPOST('dateemployment')?GETPOST('dateemployment'):$object->dateemployment, 'dateemployment', 0, 0, 1, 'formdateemployment', 1, 0);
    +			}else{
    +				print dol_print_date($object->dateemployment, 'day');
    +			}
     			print '</td>';
     			print "</tr>\n";
     
    +			// Date employmentEnd
    +			print '<tr><td>'.$langs->trans("DateEmploymentEnd").'</td>';
    +			print '<td>';
    +			if($caneditfield)
    +			{
    +				print $form->selectDate(GETPOST('dateemploymentend')?GETPOST('dateemploymentend'):$object->dateemploymentend, 'dateemploymentend', 0, 0, 1, 'formdateemploymentend', 1, 0);
    +			}else{
    +				print dol_print_date($object->dateemploymentend, 'day');
    +			}
    +			print '</td>';
    +			print "</tr>\n";
    +
    +
     			// Date birth
     			print '<tr><td>'.$langs->trans("DateToBirth").'</td>';
     			print '<td>';
    -			echo $form->select_date(GETPOST('birth')?GETPOST('birth'):$object->birth,'birth',0,0,1,'updateuser',1,0,1);
    +			if($caneditfield)
    +			{
    +				echo $form->selectDate(GETPOST('birth')?GETPOST('birth'):$object->birth, 'birth', 0, 0, 1, 'updateuser', 1, 0);
    +			}else{
    +				print dol_print_date($object->birth, 'day');
    +			}
     			print '</td>';
     			print "</tr>\n";
     
    @@ -2488,7 +2646,6 @@ else
     
     		if (! empty($conf->ldap->enabled) && ! empty($object->ldap_sid)) $ldap->close();
     	}
    -
     }
     
     if (! empty($conf->api->enabled) && ! empty($conf->use_javascript_ajax))
    @@ -2508,5 +2665,6 @@ if (! empty($conf->api->enabled) && ! empty($conf->use_javascript_ajax))
     	print '</script>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/class/api_users.class.php b/htdocs/user/class/api_users.class.php
    index dd4e60e4617..74e30ad3e88 100644
    --- a/htdocs/user/class/api_users.class.php
    +++ b/htdocs/user/class/api_users.class.php
    @@ -32,7 +32,7 @@ class Users extends DolibarrApi
     	 * @var array   $FIELDS     Mandatory fields, checked when create and update object
     	 */
     	static $FIELDS = array(
    -		'login'
    +		'login',
     	);
     
     	/**
    @@ -43,7 +43,8 @@ class Users extends DolibarrApi
     	/**
     	 * Constructor
     	 */
    -	function __construct() {
    +    function __construct()
    +    {
     		global $db, $conf;
     		$this->db = $db;
     		$this->useraccount = new User($this->db);
    @@ -63,7 +64,8 @@ class Users extends DolibarrApi
          * @param string    $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:'SO-%') and (t.date_creation:<:'20160101')"
     	 * @return  array               Array of User objects
     	 */
    -	function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $user_ids = 0, $sqlfilters = '') {
    +    function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $user_ids = 0, $sqlfilters = '')
    +    {
     	    global $db, $conf;
     
     	    $obj_ret = array();
    @@ -136,7 +138,8 @@ class Users extends DolibarrApi
     	 *
     	 * @throws 	RestException
     	 */
    -	function get($id) {
    +    function get($id)
    +    {
     		//if (!DolibarrApiAccess::$user->rights->user->user->lire) {
     			//throw new RestException(401);
     		//}
    @@ -162,7 +165,8 @@ class Users extends DolibarrApi
     	 * @param array $request_data New user data
     	 * @return int
     	 */
    -	function post($request_data = null) {
    +    function post($request_data = null)
    +    {
     	    // check user authorization
     	    //if(! DolibarrApiAccess::$user->rights->user->creer) {
     	    //   throw new RestException(401, "User creation not allowed");
    @@ -194,7 +198,8 @@ class Users extends DolibarrApi
     	 * @param array $request_data   Datas
     	 * @return int
     	 */
    -	function put($id, $request_data = null) {
    +    function put($id, $request_data = null)
    +    {
     		//if (!DolibarrApiAccess::$user->rights->user->user->creer) {
     			//throw new RestException(401);
     		//}
    @@ -231,38 +236,49 @@ class Users extends DolibarrApi
     	 *
     	 * @param   int     $id        User ID
     	 * @param   int     $group     Group ID
    +	 * @param   int     $entity    Entity ID (valid only for superadmin in multicompany transverse mode)
     	 * @return  int                1 if success
          *
     	 * @url	GET {id}/setGroup/{group}
     	 */
    -	function setGroup($id, $group) {
    +    function setGroup($id, $group, $entity = 1)
    +    {
     
     		global $conf;
     
     		//if (!DolibarrApiAccess::$user->rights->user->user->supprimer) {
     			//throw new RestException(401);
     		//}
    -        $result = $this->useraccount->fetch($id);
    -        if (!$result)
    -        {
    -          throw new RestException(404, 'User not found');
    -        }
    +		$result = $this->useraccount->fetch($id);
    +		if (!$result)
    +		{
    +			throw new RestException(404, 'User not found');
    +		}
     
    -        if (!DolibarrApi::_checkAccessToResource('user', $this->useraccount->id, 'user'))
    -        {
    -          throw new RestException(401, 'Access not allowed for login ' . DolibarrApiAccess::$user->login);
    -        }
    +		if (!DolibarrApi::_checkAccessToResource('user', $this->useraccount->id, 'user'))
    +		{
    +			throw new RestException(401, 'Access not allowed for login ' . DolibarrApiAccess::$user->login);
    +		}
     
    -        // When using API, action is done on entity of logged user because a user of entity X with permission to create user should not be able to
    -        // hack the security by giving himself permissions on another entity.
    -        $result = $this->useraccount->SetInGroup($group, DolibarrApiAccess::$user->entity > 0 ? DolibarrApiAccess::$user->entity : $conf->entity);
    -        if (! ($result > 0))
    -        {
    -            throw new RestException(500, $this->useraccount->error);
    -        }
    +		if (! empty($conf->multicompany->enabled) && ! empty($conf->global->MULTICOMPANY_TRANSVERSE_MODE) && ! empty(DolibarrApiAccess::$user->admin) && empty(DolibarrApiAccess::$user->entity))
    +		{
    +			$entity = (! empty($entity) ? $entity : $conf->entity);
    +		}
    +		else
    +		{
    +			// When using API, action is done on entity of logged user because a user of entity X with permission to create user should not be able to
    +			// hack the security by giving himself permissions on another entity.
    +			$entity = (DolibarrApiAccess::$user->entity > 0 ? DolibarrApiAccess::$user->entity : $conf->entity);
    +		}
     
    -        return 1;
    -    }
    +		$result = $this->useraccount->SetInGroup($group, $entity);
    +		if (! ($result > 0))
    +		{
    +			throw new RestException(500, $this->useraccount->error);
    +		}
    +
    +		return 1;
    +	}
     
     	/**
     	 * Delete account
    @@ -270,7 +286,8 @@ class Users extends DolibarrApi
     	 * @param   int     $id Account ID
     	 * @return  array
     	 */
    -	function delete($id) {
    +    function delete($id)
    +    {
     		//if (!DolibarrApiAccess::$user->rights->user->user->supprimer) {
     			//throw new RestException(401);
     		//}
    @@ -353,7 +370,8 @@ class Users extends DolibarrApi
     	 * @return  array
     	 * @throws RestException
     	 */
    -	function _validate($data) {
    +    function _validate($data)
    +    {
     		$account = array();
     		foreach (Users::$FIELDS as $field)
     		{
    diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php
    index 161cea20e77..23f8b09169d 100644
    --- a/htdocs/user/class/user.class.php
    +++ b/htdocs/user/class/user.class.php
    @@ -4,13 +4,14 @@
      * Copyright (c) 2004-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Sebastien Di Cintio  <sdicintio@ressource-toi.org>
      * Copyright (C) 2004      Benoit Mortier       <benoit.mortier@opensides.be>
    - * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2005      Lionel Cousteix      <etm_ltd@tiscali.co.uk>
      * Copyright (C) 2011      Herve Prot           <herve.prot@symeos.com>
    - * Copyright (C) 2013-2014 Philippe Grand       <philippe.grand@atoo-net.com>
    + * Copyright (C) 2013-2018 Philippe Grand       <philippe.grand@atoo-net.com>
      * Copyright (C) 2013-2015 Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
    - * Copyright (C) 2018      Nicolas ZABOURI	<info@inovea-conseil.com>
    + * Copyright (C) 2018      charlene Benke       <charlie@patas-monkey.com>
    + * Copyright (C) 2018      Nicolas ZABOURI      <info@inovea-conseil.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -39,10 +40,26 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
      */
     class User extends CommonObject
     {
    +	/**
    +	 * @var string ID to identify managed object
    +	 */
     	public $element='user';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
     	public $table_element='user';
    +
    +	/**
    +	 * @var int Field with ID of parent key if this field has a parent
    +	 */
     	public $fk_element='fk_user';
    -	public $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
     
     	public $id=0;
     	public $statut;
    @@ -52,10 +69,19 @@ class User extends CommonObject
     	public $gender;
     	public $birth;
     	public $email;
    +
     	public $skype;
    -	public $job;
    +	public $twitter;
    +	public $facebook;
    +
    +	public $job;			// job position
     	public $signature;
    +
    +	/**
    +	 * @var string Address
    +	 */
     	public $address;
    +
     	public $zip;
     	public $town;
     	public $state_id;		// The state/department
    @@ -67,6 +93,10 @@ class User extends CommonObject
     	public $admin;
     	public $login;
     	public $api_key;
    +
    +	/**
    +	 * @var int Entity
    +	 */
     	public $entity;
     
     	//! Clear password in memory
    @@ -93,7 +123,14 @@ class User extends CommonObject
     	public $socid;
     	public $contactid;
     
    +	/**
    +     * @var int ID
    +     */
     	public $fk_member;
    +
    +	/**
    +	 * @var int User ID
    +	 */
     	public $fk_user;
     
     	public $clicktodial_url;
    @@ -132,18 +169,19 @@ class User extends CommonObject
     	public $color;						// Define background color for user in agenda
     
     	public $dateemployment;			// Define date of employment by company
    +	public $dateemploymentend;		// Define date of employment end by company
     
     	public $default_c_exp_tax_cat;
     	public $default_range;
     
    -	public $fields=array(
    -        	'rowid'=>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'index'=>1, 'position'=>1, 'comment'=>'Id'),
    -        	'lastname'=>array('type'=>'varchar(50)', 'label'=>'Name', 'enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>20, 'searchall'=>1, 'comment'=>'Reference of object'),
    -        	'firstname'=>array('type'=>'varchar(50)', 'label'=>'Name','enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'),
    -    	);
    +	public $fields = array(
    +        'rowid'=>array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>1, 'visible'=>-2, 'notnull'=>1,  'index'=>1, 'position'=>1, 'comment'=>'Id'),
    +        'lastname'=>array('type'=>'varchar(50)', 'label'=>'Name', 'enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>20, 'searchall'=>1, 'comment'=>'Reference of object'),
    +        'firstname'=>array('type'=>'varchar(50)', 'label'=>'Name','enabled'=>1, 'visible'=>1,  'notnull'=>1,  'showoncombobox'=>1, 'index'=>1, 'position'=>10, 'searchall'=>1, 'comment'=>'Reference of object'),
    +    );
     
     	/**
    -	 *    Constructor de la classe
    +	 *    Constructor of the class
     	 *
     	 *    @param   DoliDb  $db     Database handler
     	 */
    @@ -189,7 +227,8 @@ class User extends CommonObject
     		$login=trim($login);
     
     		// Get user
    -		$sql = "SELECT u.rowid, u.lastname, u.firstname, u.employee, u.gender, u.birth, u.email, u.job, u.skype, u.signature, u.office_phone, u.office_fax, u.user_mobile,";
    +		$sql = "SELECT u.rowid, u.lastname, u.firstname, u.employee, u.gender, u.birth, u.email, u.job, u.skype, u.twitter, u.facebook,";
    +		$sql.= " u.signature, u.office_phone, u.office_fax, u.user_mobile,";
     		$sql.= " u.address, u.zip, u.town, u.fk_state as state_id, u.fk_country as country_id,";
     		$sql.= " u.admin, u.login, u.note,";
     		$sql.= " u.pass, u.pass_crypted, u.pass_temp, u.api_key,";
    @@ -208,7 +247,7 @@ class User extends CommonObject
     		$sql.= " u.salaryextra,";
     		$sql.= " u.weeklyhours,";
     		$sql.= " u.color,";
    -		$sql.= " u.dateemployment,";
    +		$sql.= " u.dateemployment, u.dateemploymentend,";
     		$sql.= " u.ref_int, u.ref_ext,";
     		$sql.= " u.default_range, u.default_c_exp_tax_cat,";			// Expense report default mode
     		$sql.= " c.code as country_code, c.label as country,";
    @@ -294,6 +333,8 @@ class User extends CommonObject
     				$this->user_mobile  = $obj->user_mobile;
     				$this->email		= $obj->email;
     				$this->skype		= $obj->skype;
    +				$this->twitter		= $obj->twitter;
    +				$this->facebook		= $obj->facebook;
     				$this->job			= $obj->job;
     				$this->signature	= $obj->signature;
     				$this->admin		= $obj->admin;
    @@ -311,6 +352,7 @@ class User extends CommonObject
     				$this->weeklyhours	= $obj->weeklyhours;
     				$this->color		= $obj->color;
     				$this->dateemployment	= $this->db->jdate($obj->dateemployment);
    +				$this->dateemploymentend = $this->db->jdate($obj->dateemploymentend);
     
     				$this->datec				= $this->db->jdate($obj->datec);
     				$this->datem				= $this->db->jdate($obj->datem);
    @@ -431,7 +473,7 @@ class User extends CommonObject
     	/**
     	 *  Add a right to the user
     	 *
    -	 * 	@param	int		$rid			id of permission to add
    +	 * 	@param	int		$rid			Id of permission to add or 0 to add several permissions
     	 *  @param  string	$allmodule		Add all permissions of module $allmodule
     	 *  @param  string	$allperms		Add all permissions of module $allmodule, subperms $allperms only
     	 *  @param	int		$entity			Entity to use
    @@ -484,8 +526,15 @@ class User extends CommonObject
     			// Where pour la liste des droits a ajouter
     			if (! empty($allmodule))
     			{
    -				$whereforadd="module='".$this->db->escape($allmodule)."'";
    -				if (! empty($allperms)) $whereforadd.=" AND perms='".$this->db->escape($allperms)."'";
    +				if ($allmodule == 'allmodules')
    +				{
    +					$whereforadd='allmodules';
    +				}
    +				else
    +				{
    +					$whereforadd="module='".$this->db->escape($allmodule)."'";
    +					if (! empty($allperms))  $whereforadd.=" AND perms='".$this->db->escape($allperms)."'";
    +				}
     			}
     		}
     
    @@ -495,8 +544,10 @@ class User extends CommonObject
     			//print "$module-$perms-$subperms";
     			$sql = "SELECT id";
     			$sql.= " FROM ".MAIN_DB_PREFIX."rights_def";
    -			$sql.= " WHERE ".$whereforadd;
    -			$sql.= " AND entity = ".$entity;
    +			$sql.= " WHERE entity = ".$entity;
    +			if (! empty($whereforadd) && $whereforadd != 'allmodules') {
    +				$sql.= " AND ".$whereforadd;
    +			}
     
     			$result=$this->db->query($sql);
     			if ($result)
    @@ -542,7 +593,6 @@ class User extends CommonObject
     			$this->db->commit();
     			return 1;
     		}
    -
     	}
     
     
    @@ -597,8 +647,18 @@ class User extends CommonObject
     		else {
     			// On a demande suppression d'un droit sur la base d'un nom de module ou perms
     			// Where pour la liste des droits a supprimer
    -			if (! empty($allmodule)) $wherefordel="module='".$this->db->escape($allmodule)."'";
    -			if (! empty($allperms))  $wherefordel=" AND perms='".$this->db->escape($allperms)."'";
    +			if (! empty($allmodule))
    +			{
    +				if ($allmodule == 'allmodules')
    +				{
    +					$wherefordel='allmodules';
    +				}
    +				else
    +				{
    +					$wherefordel="module='".$this->db->escape($allmodule)."'";
    +					if (! empty($allperms))  $whereforadd.=" AND perms='".$this->db->escape($allperms)."'";
    +				}
    +			}
     		}
     
     		// Suppression des droits selon critere defini dans wherefordel
    @@ -607,8 +667,10 @@ class User extends CommonObject
     			//print "$module-$perms-$subperms";
     			$sql = "SELECT id";
     			$sql.= " FROM ".MAIN_DB_PREFIX."rights_def";
    -			$sql.= " WHERE $wherefordel";
    -			$sql.= " AND entity = ".$entity;
    +			$sql.= " WHERE entity = ".$entity;
    +			if (! empty($wherefordel) && $wherefordel != 'allmodules') {
    +				$sql.= " AND ".$wherefordel;
    +			}
     
     			$result=$this->db->query($sql);
     			if ($result)
    @@ -654,7 +716,6 @@ class User extends CommonObject
     			$this->db->commit();
     			return 1;
     		}
    -
     	}
     
     
    @@ -676,30 +737,34 @@ class User extends CommonObject
     	/**
     	 *	Load permissions granted to user into object user
     	 *
    -	 *	@param  string	$moduletag    Limit permission for a particular module ('' by default means load all permissions)
    +	 *	@param  string	$moduletag		Limit permission for a particular module ('' by default means load all permissions)
    +	 *  @param	int		$forcereload	Force reload of permissions even if they were already loaded (ignore cache)
     	 *	@return	void
     	 *  @see	clearrights, delrights, addrights
     	 */
    -	function getrights($moduletag='')
    +	function getrights($moduletag='', $forcereload=0)
     	{
     		global $conf;
     
    -		if ($moduletag && isset($this->_tab_loaded[$moduletag]) && $this->_tab_loaded[$moduletag])
    +		if (empty($forcereload))
     		{
    -			// Le fichier de ce module est deja charge
    -			return;
    -		}
    +			if ($moduletag && isset($this->_tab_loaded[$moduletag]) && $this->_tab_loaded[$moduletag])
    +			{
    +				// Rights for this module are already loaded, so we leave
    +				return;
    +			}
     
    -		if ($this->all_permissions_are_loaded)
    -		{
    -			// Si les permissions ont deja ete charge pour ce user, on quitte
    -			return;
    +			if ($this->all_permissions_are_loaded)
    +			{
    +				// We already loaded all rights for this user, so we leave
    +				return;
    +			}
     		}
     
     		// Recuperation des droits utilisateurs + recuperation des droits groupes
     
     		// D'abord les droits utilisateurs
    -		$sql = "SELECT r.module, r.perms, r.subperms";
    +		$sql = "SELECT DISTINCT r.module, r.perms, r.subperms";
     		$sql.= " FROM ".MAIN_DB_PREFIX."user_rights as ur";
     		$sql.= ", ".MAIN_DB_PREFIX."rights_def as r";
     		$sql.= " WHERE r.id = ur.fk_id";
    @@ -753,7 +818,7 @@ class User extends CommonObject
     		}
     
     		// Maintenant les droits groupes
    -		$sql = "SELECT r.module, r.perms, r.subperms";
    +		$sql = "SELECT DISTINCT r.module, r.perms, r.subperms";
     		$sql.= " FROM ".MAIN_DB_PREFIX."usergroup_rights as gr,";
     		$sql.= " ".MAIN_DB_PREFIX."usergroup_user as gu,";
     		$sql.= " ".MAIN_DB_PREFIX."rights_def as r";
    @@ -805,7 +870,6 @@ class User extends CommonObject
     						// if we have already define a subperm like this $this->rights->$module->level1->level2 with llx_user_rights, we don't want override level1 because the level2 can be not define on user group
     						if (!is_object($this->rights->$module->$perms)) $this->rights->$module->$perms = 1;
     					}
    -
     				}
     				$i++;
     			}
    @@ -882,6 +946,7 @@ class User extends CommonObject
     	 * Existing categories are left untouch.
     	 *
     	 * @param int[]|int $categories Category or categories IDs
    +     * @return void
     	 */
     	public function setCategories($categories)
     	{
    @@ -1141,6 +1206,7 @@ class User extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Create a user from a contact object. User will be internal but if contact is linked to a third party, user will be external
     	 *
    @@ -1151,6 +1217,7 @@ class User extends CommonObject
     	 */
     	function create_from_contact($contact,$login='',$password='')
     	{
    +        // phpcs:enable
     		global $conf,$user,$langs;
     
     		$error=0;
    @@ -1162,6 +1229,8 @@ class User extends CommonObject
     		$this->gender		= $contact->gender;
     		$this->email		= $contact->email;
     		$this->skype 		= $contact->skype;
    +		$this->twitter 		= $contact->twitter;
    +		$this->facebook		= $contact->facebook;
     		$this->office_phone	= $contact->phone_pro;
     		$this->office_fax	= $contact->fax;
     		$this->user_mobile	= $contact->phone_mobile;
    @@ -1216,9 +1285,9 @@ class User extends CommonObject
     			$this->db->rollback();
     			return $result;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Create a user into database from a member object
     	 *
    @@ -1228,6 +1297,7 @@ class User extends CommonObject
     	 */
     	function create_from_member($member,$login='')
     	{
    +        // phpcs:enable
     		global $conf,$user,$langs;
     
     		// Positionne parametres
    @@ -1292,6 +1362,7 @@ class User extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Assign rights by default
     	 *
    @@ -1299,6 +1370,7 @@ class User extends CommonObject
     	 */
     	function set_default_rights()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$sql = "SELECT id FROM ".MAIN_DB_PREFIX."rights_def";
    @@ -1372,7 +1444,11 @@ class User extends CommonObject
     		$this->office_fax   = trim($this->office_fax);
     		$this->user_mobile  = trim($this->user_mobile);
     		$this->email        = trim($this->email);
    +
     		$this->skype        = trim($this->skype);
    +		$this->twitter      = trim($this->twitter);
    +		$this->facebook     = trim($this->facebook);
    +
     		$this->job    		= trim($this->job);
     		$this->signature    = trim($this->signature);
     		$this->note         = trim($this->note);
    @@ -1384,6 +1460,7 @@ class User extends CommonObject
     		$this->accountancy_code = trim($this->accountancy_code);
     		$this->color 		= empty($this->color)?'':$this->color;
     		$this->dateemployment 	= empty($this->dateemployment)?'':$this->dateemployment;
    +		$this->dateemploymentend = empty($this->dateemploymentend)?'':$this->dateemploymentend;
     
     		// Check parameters
     		if (! empty($conf->global->USER_MAIL_REQUIRED) && ! isValidEMail($this->email))
    @@ -1421,11 +1498,14 @@ class User extends CommonObject
     		$sql.= ", user_mobile = '".$this->db->escape($this->user_mobile)."'";
     		$sql.= ", email = '".$this->db->escape($this->email)."'";
     		$sql.= ", skype = '".$this->db->escape($this->skype)."'";
    +		$sql.= ", twitter = '".$this->db->escape($this->twitter)."'";
    +		$sql.= ", facebook = '".$this->db->escape($this->facebook)."'";
     		$sql.= ", job = '".$this->db->escape($this->job)."'";
     		$sql.= ", signature = '".$this->db->escape($this->signature)."'";
     		$sql.= ", accountancy_code = '".$this->db->escape($this->accountancy_code)."'";
     		$sql.= ", color = '".$this->db->escape($this->color)."'";
     		$sql.= ", dateemployment=".(strval($this->dateemployment)!='' ? "'".$this->db->idate($this->dateemployment)."'" : 'null');
    +		$sql.= ", dateemploymentend=".(strval($this->dateemploymentend)!='' ? "'".$this->db->idate($this->dateemploymentend)."'" : 'null');
     		$sql.= ", note = '".$this->db->escape($this->note)."'";
     		$sql.= ", photo = ".($this->photo?"'".$this->db->escape($this->photo)."'":"null");
     		$sql.= ", openid = ".($this->openid?"'".$this->db->escape($this->openid)."'":"null");
    @@ -1502,9 +1582,13 @@ class User extends CommonObject
     						$adh->zip=$this->zip;
     						$adh->state_id=$this->state_id;
     						$adh->country_id=$this->country_id;
    -						
    +
     						$adh->email=$this->email;
    +
     						$adh->skype=$this->skype;
    +						$adh->twitter=$this->twitter;
    +						$adh->facebook=$this->facebook;
    +
     						$adh->phone=$this->office_phone;
     						$adh->phone_mobile=$this->user_mobile;
     
    @@ -1552,7 +1636,11 @@ class User extends CommonObject
     						//$tmpobj->societe=(empty($tmpobj->societe) && $this->societe_id ? $this->societe_id : $tmpobj->societe);
     
     						$tmpobj->email=$this->email;
    +
     						$tmpobj->skype=$this->skype;
    +						$tmpobj->twitter=$this->twitter;
    +						$tmpobj->facebook=$this->facebook;
    +
     						$tmpobj->phone_pro=$this->office_phone;
     						$tmpobj->phone_mobile=$this->user_mobile;
     						$tmpobj->fax=$this->office_fax;
    @@ -1622,9 +1710,9 @@ class User extends CommonObject
     			$this->db->rollback();
     			return -2;
     		}
    -
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    Mise a jour en base de la date de derniere connexion d'un utilisateur
     	 *	  Fonction appelee lors d'une nouvelle connexion
    @@ -1633,6 +1721,7 @@ class User extends CommonObject
     	 */
     	function update_last_login_date()
     	{
    +        // phpcs:enable
     		$now=dol_now();
     
     		$sql = "UPDATE ".MAIN_DB_PREFIX."user SET";
    @@ -1790,6 +1879,7 @@ class User extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Send new password by email
     	 *
    @@ -1800,7 +1890,8 @@ class User extends CommonObject
     	 */
     	function send_password($user, $password='', $changelater=0)
     	{
    -		global $conf,$langs;
    +        // phpcs:enable
    +		global $conf, $langs;
     		global $dolibarr_main_url_root;
     
     		require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
    @@ -1821,10 +1912,8 @@ class User extends CommonObject
     			$outputlangs=$langs;
     		}
     
    -		$outputlangs->load("main");
    -		$outputlangs->load("errors");
    -		$outputlangs->load("users");
    -		$outputlangs->load("other");
    +		// Load translation files required by the page
    +		$outputlangs->loadLangs(array("main", "errors", "users", "other"));
     
     		$appli=constant('DOL_APPLICATION_TITLE');
     		if (!empty($conf->global->MAIN_APPLICATION_TITLE)) $appli=$conf->global->MAIN_APPLICATION_TITLE;
    @@ -1904,6 +1993,7 @@ class User extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *    	Read clicktodial information for user
     	 *
    @@ -1911,6 +2001,7 @@ class User extends CommonObject
     	 */
     	function fetch_clicktodial()
     	{
    +        // phpcs:enable
     		$sql = "SELECT url, login, pass, poste ";
     		$sql.= " FROM ".MAIN_DB_PREFIX."user_clicktodial as u";
     		$sql.= " WHERE u.fk_user = ".$this->id;
    @@ -1940,6 +2031,7 @@ class User extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update clicktodial info
     	 *
    @@ -1947,6 +2039,7 @@ class User extends CommonObject
     	 */
     	function update_clicktodial()
     	{
    +        // phpcs:enable
     		$this->db->begin();
     
     		$sql = "DELETE FROM ".MAIN_DB_PREFIX."user_clicktodial";
    @@ -1979,6 +2072,7 @@ class User extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Add user into a group
     	 *
    @@ -1989,6 +2083,7 @@ class User extends CommonObject
     	 */
     	function SetInGroup($group, $entity, $notrigger=0)
     	{
    +        // phpcs:enable
     		global $conf, $langs, $user;
     
     		$error=0;
    @@ -2039,6 +2134,7 @@ class User extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Remove a user from a group
     	 *
    @@ -2049,6 +2145,7 @@ class User extends CommonObject
     	 */
     	function RemoveFromGroup($group, $entity, $notrigger=0)
     	{
    +        // phpcs:enable
     		global $conf,$langs,$user;
     
     		$error=0;
    @@ -2108,9 +2205,7 @@ class User extends CommonObject
     	 */
     	function getPhotoUrl($width, $height, $cssclass='', $imagesize='')
     	{
    -		$result='';
    -
    -		$result.='<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$this->id.'">';
    +		$result ='<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$this->id.'">';
     		$result.=Form::showphoto('userphoto', $this, $width, $height, 0, $cssclass, $imagesize);
     		$result.='</a>';
     
    @@ -2134,10 +2229,12 @@ class User extends CommonObject
     	 */
     	function getNomUrl($withpictoimg=0, $option='', $infologin=0, $notooltip=0, $maxlen=24, $hidethirdpartylogo=0, $mode='',$morecss='', $save_lastsearch_value=-1)
     	{
    -		global $langs, $conf, $db, $hookmanager;
    +		global $langs, $conf, $db, $hookmanager, $user;
     		global $dolibarr_main_authentication, $dolibarr_main_demo;
     		global $menumanager;
     
    +        if(!$user->rights->user->user->lire && $user->id !=$this->id) $option='nolink';
    +
     		if (! empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER) && $withpictoimg) $withpictoimg=0;
     
     		$result=''; $label='';
    @@ -2186,7 +2283,7 @@ class User extends CommonObject
     			$label.= '<br><b>'.$langs->trans("Browser").':</b> '.$conf->browser->name.($conf->browser->version?' '.$conf->browser->version:'').' ('.$_SERVER['HTTP_USER_AGENT'].')';
     			$label.= '<br><b>'.$langs->trans("Layout").':</b> '.$conf->browser->layout;
     			$label.= '<br><b>'.$langs->trans("Screen").':</b> '.$_SESSION['dol_screenwidth'].' x '.$_SESSION['dol_screenheight'];
    -			if (! empty($conf->browser->phone)) $label.= '<br><b>'.$langs->trans("Phone").':</b> '.$conf->browser->phone;
    +			if ($conf->browser->layout == 'phone') $label.= '<br><b>'.$langs->trans("Phone").':</b> '.$langs->trans("Yes");;
     			if (! empty($_SESSION["disablemodules"])) $label.= '<br><b>'.$langs->trans("DisabledModules").':</b> <br>'.join(', ',explode(',',$_SESSION["disablemodules"]));
     		}
     		if ($infologin < 0) $label='';
    @@ -2269,19 +2366,28 @@ class User extends CommonObject
     	 */
     	function getLoginUrl($withpicto=0,$option='')
     	{
    -		global $langs;
    +		global $langs, $user;
     
     		$result='';
     
     		$linkstart = '<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$this->id.'">';
     		$linkend='</a>';
     
    +                //Check user's rights to see an other user
    +                if((!$user->rights->user->user->lire && $this->id !=$user->id)) $option='nolink';
    +
     		if ($option == 'xxx')
     		{
     			$linkstart = '<a href="'.DOL_URL_ROOT.'/user/card.php?id='.$this->id.'">';
     			$linkend='</a>';
     		}
     
    +        if ($option == 'nolink')
    +		{
    +			$linkstart = '';
    +			$linkend='';
    +		}
    +
     		$result.=$linkstart;
     		if ($withpicto) $result.=img_object($langs->trans("ShowUser"), 'user', 'class="paddingright"');
     		$result.=$this->login;
    @@ -2300,6 +2406,7 @@ class User extends CommonObject
     		return $this->LibStatut($this->statut,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -2309,43 +2416,44 @@ class User extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     		$langs->load('users');
     
     		if ($mode == 0)
     		{
    -			$prefix='';
     			if ($statut == 1) return $langs->trans('Enabled');
    -			if ($statut == 0) return $langs->trans('Disabled');
    +			elseif ($statut == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($statut == 1) return $langs->trans('Enabled');
    -			if ($statut == 0) return $langs->trans('Disabled');
    +			elseif ($statut == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($statut == 1) return img_picto($langs->trans('Enabled'),'statut4','class="pictostatus"').' '.$langs->trans('Enabled');
    -			if ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"').' '.$langs->trans('Disabled');
    +			elseif ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($statut == 1) return img_picto($langs->trans('Enabled'),'statut4','class="pictostatus"');
    -			if ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"');
    +			elseif ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($statut == 1) return img_picto($langs->trans('Enabled'),'statut4','class="pictostatus"').' '.$langs->trans('Enabled');
    -			if ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"').' '.$langs->trans('Disabled');
    +			elseif ($statut == 0) return img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($statut == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4','class="pictostatus"');
    -			if ($statut == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"');
    +			elseif ($statut == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5','class="pictostatus"');
     		}
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Retourne chaine DN complete dans l'annuaire LDAP pour l'objet
     	 *
    @@ -2357,14 +2465,16 @@ class User extends CommonObject
     	 */
     	function _load_ldap_dn($info,$mode=0)
     	{
    +        // phpcs:enable
     		global $conf;
     		$dn='';
     		if ($mode==0) $dn=$conf->global->LDAP_KEY_USERS."=".$info[$conf->global->LDAP_KEY_USERS].",".$conf->global->LDAP_USER_DN;
    -		if ($mode==1) $dn=$conf->global->LDAP_USER_DN;
    -		if ($mode==2) $dn=$conf->global->LDAP_KEY_USERS."=".$info[$conf->global->LDAP_KEY_USERS];
    +		elseif ($mode==1) $dn=$conf->global->LDAP_USER_DN;
    +		elseif ($mode==2) $dn=$conf->global->LDAP_KEY_USERS."=".$info[$conf->global->LDAP_KEY_USERS];
     		return $dn;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Initialize the info array (array of LDAP values) that will be used to call LDAP functions
     	 *
    @@ -2372,6 +2482,7 @@ class User extends CommonObject
     	 */
     	function _load_ldap_info()
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$info=array();
    @@ -2388,13 +2499,15 @@ class User extends CommonObject
     			'LDAP_FIELD_NAME'		=> 'lastname',
     			'LDAP_FIELD_FIRSTNAME'	=> 'firstname',
     			'LDAP_FIELD_LOGIN'		=> 'login',
    -			'LDAP_FIELD_LOGIN_SAMBA'	=> 'login',
    +			'LDAP_FIELD_LOGIN_SAMBA'=> 'login',
     			'LDAP_FIELD_PHONE'		=> 'office_phone',
     			'LDAP_FIELD_MOBILE'		=> 'user_mobile',
    -			'LDAP_FIELD_FAX'			=> 'office_fax',
    +			'LDAP_FIELD_FAX'		=> 'office_fax',
     			'LDAP_FIELD_MAIL'		=> 'email',
    -			'LDAP_FIELD_SID'			=> 'ldap_sid',
    -			'LDAP_FIELD_SKYPE'		=> 'skype'
    +			'LDAP_FIELD_SID'		=> 'ldap_sid',
    +			'LDAP_FIELD_SKYPE'		=> 'skype',
    +			'LDAP_FIELD_TWITTER'	=> 'twitter',
    +			'LDAP_FIELD_FACEBOOK'	=> 'facebook'
     		);
     
     		// Champs
    @@ -2433,7 +2546,7 @@ class User extends CommonObject
     			if (! empty($conf->global->LDAP_FIELD_PASSWORD_CRYPTED))		$info[$conf->global->LDAP_FIELD_PASSWORD_CRYPTED] = dol_hash($this->pass, 4); // Create OpenLDAP MD5 password (TODO add type of encryption)
     		}
     		// Set LDAP password if possible
    -		else if ($conf->global->LDAP_SERVER_PROTOCOLVERSION !== '3') // If ldap key is modified and LDAPv3 we use ldap_rename function for avoid lose encrypt password
    +		elseif ($conf->global->LDAP_SERVER_PROTOCOLVERSION !== '3') // If ldap key is modified and LDAPv3 we use ldap_rename function for avoid lose encrypt password
     		{
     			if (! empty($conf->global->DATABASE_PWD_ENCRYPTED))
     			{
    @@ -2446,7 +2559,7 @@ class User extends CommonObject
     				}
     			}
     			// Use $this->pass_indatabase value if exists
    -			else if (! empty($this->pass_indatabase))
    +			elseif (! empty($this->pass_indatabase))
     			{
     				if (! empty($conf->global->LDAP_FIELD_PASSWORD))				$info[$conf->global->LDAP_FIELD_PASSWORD] = $this->pass_indatabase;	// $this->pass_indatabase = mot de passe non crypte
     				if (! empty($conf->global->LDAP_FIELD_PASSWORD_CRYPTED))		$info[$conf->global->LDAP_FIELD_PASSWORD_CRYPTED] = dol_hash($this->pass_indatabase, 4); // md5 for OpenLdap TODO add type of encryption
    @@ -2505,7 +2618,9 @@ class User extends CommonObject
     		$this->gender='man';
     		$this->note='This is a note';
     		$this->email='email@specimen.com';
    -		$this->skype='tom.hanson';
    +		$this->skype='skypepseudo';
    +		$this->twitter='twitterpseudo';
    +		$this->facebook='facebookpseudo';
     		$this->office_phone='0999999999';
     		$this->office_fax='0999999998';
     		$this->user_mobile='0999999997';
    @@ -2555,7 +2670,6 @@ class User extends CommonObject
     			}
     
     			$this->db->free($result);
    -
     		}
     		else
     		{
    @@ -2634,6 +2748,7 @@ class User extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Update user using data from the LDAP
     	 *
    @@ -2643,6 +2758,7 @@ class User extends CommonObject
     	 */
     	function update_ldap2dolibarr(&$ldapuser)
     	{
    +        // phpcs:enable
     		// TODO: Voir pourquoi le update met à jour avec toutes les valeurs vide (global $user écrase ?)
     		global $user, $conf;
     
    @@ -2657,6 +2773,8 @@ class User extends CommonObject
     		$this->office_fax=$ldapuser->{$conf->global->LDAP_FIELD_FAX};
     		$this->email=$ldapuser->{$conf->global->LDAP_FIELD_MAIL};
     		$this->skype=$ldapuser->{$conf->global->LDAP_FIELD_SKYPE};
    +		$this->twitter=$ldapuser->{$conf->global->LDAP_FIELD_TWITTER};
    +		$this->facebook=$ldapuser->{$conf->global->LDAP_FIELD_FACEBOOK};
     		$this->ldap_sid=$ldapuser->{$conf->global->LDAP_FIELD_SID};
     
     		$this->job=$ldapuser->{$conf->global->LDAP_FIELD_TITLE};
    @@ -2670,6 +2788,7 @@ class User extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * Return and array with all instanciated first level children users of current user
     	 *
    @@ -2678,6 +2797,7 @@ class User extends CommonObject
     	 */
     	function get_children()
     	{
    +        // phpcs:enable
     		$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."user";
     		$sql.= " WHERE fk_user = ".$this->id;
     
    @@ -2707,7 +2827,7 @@ class User extends CommonObject
     	 *
     	 *	@return		int		<0 if KO, >0 if OK
     	 */
    -	private function load_parentof()
    +	private function loadParentOf()
     	{
     		global $conf;
     
    @@ -2719,7 +2839,7 @@ class User extends CommonObject
     		$sql.= " WHERE fk_user <> 0";
     		$sql.= " AND entity IN (".getEntity('user').")";
     
    -		dol_syslog(get_class($this)."::load_parentof", LOG_DEBUG);
    +		dol_syslog(get_class($this)."::loadParentOf", LOG_DEBUG);
     		$resql = $this->db->query($sql);
     		if ($resql)
     		{
    @@ -2736,6 +2856,7 @@ class User extends CommonObject
     		}
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 * 	Reconstruit l'arborescence hierarchique des users sous la forme d'un tableau
     	 *	Set and return this->users that is an array sorted according to tree with arrays of:
    @@ -2751,6 +2872,7 @@ class User extends CommonObject
     	 */
     	function get_full_tree($deleteafterid=0, $filter='')
     	{
    +        // phpcs:enable
     		global $conf, $user;
     		global $hookmanager;
     
    @@ -2760,7 +2882,7 @@ class User extends CommonObject
     		$this->users = array();
     
     		// Init this->parentof that is array(id_son=>id_parent, ...)
    -		$this->load_parentof();
    +		$this->loadParentOf();
     
     		// Init $this->users array
     		$sql = "SELECT DISTINCT u.rowid, u.firstname, u.lastname, u.fk_user, u.fk_soc, u.login, u.email, u.gender, u.admin, u.statut, u.photo, u.entity";	// Distinct reduce pb with old tables with duplicates
    @@ -2879,6 +3001,7 @@ class User extends CommonObject
     		return $childids;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	For user id_user and its childs available in this->users, define property fullpath and fullname.
     	 *  Function called by get_full_tree().
    @@ -2889,6 +3012,7 @@ class User extends CommonObject
     	 */
     	function build_path_from_id_user($id_user,$protection=0)
     	{
    +        // phpcs:enable
     		dol_syslog(get_class($this)."::build_path_from_id_user id_user=".$id_user." protection=".$protection, LOG_DEBUG);
     
     		if (! empty($this->users[$id_user]['fullpath']))
    @@ -2934,13 +3058,14 @@ class User extends CommonObject
     	public static function replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
     	{
     		$tables = array(
    -			'user'
    +			'user',
     		);
     
     		return CommonObject::commonReplaceThirdparty($db, $origin_id, $dest_id, $tables);
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *      Charge indicateurs this->nb pour le tableau de bord
     	 *
    @@ -2948,6 +3073,7 @@ class User extends CommonObject
     	 */
     	function load_state_board()
     	{
    +        // phpcs:enable
     		global $conf;
     
     		$this->nb=array();
    @@ -2989,7 +3115,7 @@ class User extends CommonObject
     	 */
     	public function generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
     	{
    -		global $conf,$user,$langs;
    +		global $conf, $user, $langs;
     
     		$langs->load("user");
     
    @@ -3011,6 +3137,7 @@ class User extends CommonObject
     		return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Return property of user from its id
     	 *
    @@ -3020,6 +3147,7 @@ class User extends CommonObject
     	 */
     	function user_get_property($rowid,$mode)
     	{
    +        // phpcs:enable
     		$user_property='';
     
     		if (empty($rowid)) return '';
    @@ -3108,8 +3236,5 @@ class User extends CommonObject
     			$this->errors[] = $this->db->lasterror();
     			return -1;
     		}
    -
     	}
    -
     }
    -
    diff --git a/htdocs/user/class/userbankaccount.class.php b/htdocs/user/class/userbankaccount.class.php
    index 77385f84179..7870fe9c35e 100644
    --- a/htdocs/user/class/userbankaccount.class.php
    +++ b/htdocs/user/class/userbankaccount.class.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2010-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2013   	Peter Fontaine          <contact@peterfontaine.fr>
      * Copyright (C) 2015	    Alexandre Spangaro	    <aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2016       Marcos García           <marcosgdf@gmail.com>
    @@ -206,4 +206,3 @@ class UserBankAccount extends Account
     		return $rib;
     	}
     }
    -
    diff --git a/htdocs/user/class/usergroup.class.php b/htdocs/user/class/usergroup.class.php
    index 2400c855a6d..cfc6d13427c 100644
    --- a/htdocs/user/class/usergroup.class.php
    +++ b/htdocs/user/class/usergroup.class.php
    @@ -1,11 +1,11 @@
     <?php
    -/* Copyright (c) 2005		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
    - * Copyright (c) 2005-2018	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (c) 2005-2018	Regis Houssin		<regis.houssin@capnetworks.com>
    - * Copyright (C) 2012		Florian Henry		<florian.henry@open-concept.pro>
    - * Copyright (C) 2014		Juanjo Menent		<jmenent@2byte.es>
    - * Copyright (C) 2014		Alexis Algoud		<alexis@atm-consulting.fr>
    - * Copyright (C) 2018           Nicolas ZABOURI		<info@inovea-conseil.com>
    +/* Copyright (c) 2005		Rodolphe Quiedeville <rodolphe@quiedeville.org>
    + * Copyright (c) 2005-2018	Laurent Destailleur	 <eldy@users.sourceforge.net>
    + * Copyright (c) 2005-2018	Regis Houssin		 <regis.houssin@inodbox.com>
    + * Copyright (C) 2012		Florian Henry		 <florian.henry@open-concept.pro>
    + * Copyright (C) 2014		Juanjo Menent		 <jmenent@2byte.es>
    + * Copyright (C) 2014		Alexis Algoud		 <alexis@atm-consulting.fr>
    + * Copyright (C) 2018       Nicolas ZABOURI		 <info@inovea-conseil.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -27,7 +27,7 @@
      */
     
     require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
    -if (! empty($conf->ldap->enabled)) require_once (DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    +if (! empty($conf->ldap->enabled)) require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
     
     
     /**
    @@ -35,23 +35,49 @@ if (! empty($conf->ldap->enabled)) require_once (DOL_DOCUMENT_ROOT."/core/class/
      */
     class UserGroup extends CommonObject
     {
    -	public $element='usergroup';
    -	public $table_element='usergroup';
    -	public $ismultientitymanaged = 1;	// 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    -    public $picto='group';
    -	public $entity;		// Entity of group
    -
    -
    -	public $name;			// Name of group
     	/**
    +	 * @var string ID to identify managed object
    +	 */
    +	public $element='usergroup';
    +
    +	/**
    +	 * @var string Name of table without prefix where object is stored
    +	 */
    +	public $table_element='usergroup';
    +
    +	/**
    +	 * 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
    +	 * @var int
    +	 */
    +	public $ismultientitymanaged = 1;
    +
    +    public $picto='group';
    +
    +	/**
    +	 * @var int Entity of group
    +	 */
    +	public $entity;
    +
    +	/**
    +	 * @var string
     	 * @deprecated
     	 * @see name
     	 */
    -	public $nom;			// Name of group
    +	public $nom;
    +
    +	/**
    +	 * @var string name
    +	 */
    +	public $name;			// Name of group
    +
     	public $globalgroup;	// Global group
    +
     	public $datec;			// Creation date of group
    +
     	public $datem;			// Modification date of group
    +
     	public $note;			// Description
    +
     	public $members=array();	// Array of users
     
     	public $nb_rights;					// Number of rights granted to the user
    @@ -308,8 +334,18 @@ class UserGroup extends CommonObject
     		}
     		else {
     			// Where pour la liste des droits a ajouter
    -			if (! empty($allmodule)) $whereforadd="module='".$this->db->escape($allmodule)."'";
    -			if (! empty($allperms))  $whereforadd=" AND perms='".$this->db->escape($allperms)."'";
    +			if (! empty($allmodule))
    +			{
    +				if ($allmodule == 'allmodules')
    +				{
    +					$whereforadd='allmodules';
    +				}
    +				else
    +				{
    +					$whereforadd="module='".$this->db->escape($allmodule)."'";
    +					if (! empty($allperms))  $whereforadd.=" AND perms='".$this->db->escape($allperms)."'";
    +				}
    +			}
     		}
     
     		// Ajout des droits de la liste whereforadd
    @@ -318,8 +354,10 @@ class UserGroup extends CommonObject
     			//print "$module-$perms-$subperms";
     			$sql = "SELECT id";
     			$sql.= " FROM ".MAIN_DB_PREFIX."rights_def";
    -			$sql.= " WHERE $whereforadd";
    -			$sql.= " AND entity = ".$entity;
    +			$sql.= " WHERE entity = ".$entity;
    +			if (! empty($whereforadd) && $whereforadd != 'allmodules') {
    +				$sql.= " AND ".$whereforadd;
    +			}
     
     			$result=$this->db->query($sql);
     			if ($result)
    @@ -365,7 +403,6 @@ class UserGroup extends CommonObject
     			$this->db->commit();
     			return 1;
     		}
    -
     	}
     
     
    @@ -422,8 +459,18 @@ class UserGroup extends CommonObject
     		}
     		else {
     			// Where pour la liste des droits a supprimer
    -			if (! empty($allmodule)) $wherefordel="module='".$this->db->escape($allmodule)."'";
    -			if (! empty($allperms))  $wherefordel=" AND perms='".$this->db->escape($allperms)."'";
    +			if (! empty($allmodule))
    +			{
    +				if ($allmodule == 'allmodules')
    +				{
    +					$wherefordel='allmodules';
    +				}
    +				else
    +				{
    +					$wherefordel="module='".$this->db->escape($allmodule)."'";
    +					if (! empty($allperms))  $whereforadd.=" AND perms='".$this->db->escape($allperms)."'";
    +				}
    +			}
     		}
     
     		// Suppression des droits de la liste wherefordel
    @@ -432,8 +479,10 @@ class UserGroup extends CommonObject
     			//print "$module-$perms-$subperms";
     			$sql = "SELECT id";
     			$sql.= " FROM ".MAIN_DB_PREFIX."rights_def";
    -			$sql.= " WHERE $wherefordel";
    -			$sql.= " AND entity = ".$entity;
    +			$sql.= " WHERE entity = ".$entity;
    +			if (! empty($wherefordel) && $wherefordel != 'allmodules') {
    +				$sql.= " AND ".$wherefordel;
    +			}
     
     			$result=$this->db->query($sql);
     			if ($result)
    @@ -479,7 +528,6 @@ class UserGroup extends CommonObject
     			$this->db->commit();
     			return 1;
     		}
    -
     	}
     
     
    @@ -773,6 +821,7 @@ class UserGroup extends CommonObject
     	    return $this->LibStatut(0,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un statut donne
     	 *
    @@ -782,6 +831,7 @@ class UserGroup extends CommonObject
     	 */
     	function LibStatut($statut,$mode=0)
     	{
    +        // phpcs:enable
     	    global $langs;
     	    $langs->load('users');
     	    return '';
    @@ -864,6 +914,7 @@ class UserGroup extends CommonObject
     		return $result;
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Retourne chaine DN complete dans l'annuaire LDAP pour l'objet
     	 *
    @@ -875,6 +926,7 @@ class UserGroup extends CommonObject
     	 */
     	function _load_ldap_dn($info,$mode=0)
     	{
    +        // phpcs:enable
     		global $conf;
     		$dn='';
     		if ($mode==0) $dn=$conf->global->LDAP_KEY_GROUPS."=".$info[$conf->global->LDAP_KEY_GROUPS].",".$conf->global->LDAP_GROUP_DN;
    @@ -884,6 +936,7 @@ class UserGroup extends CommonObject
     	}
     
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *	Initialize the info array (array of LDAP values) that will be used to call LDAP functions
     	 *
    @@ -891,6 +944,7 @@ class UserGroup extends CommonObject
     	 */
     	function _load_ldap_info()
     	{
    +        // phpcs:enable
     		global $conf,$langs;
     
     		$info=array();
    @@ -953,7 +1007,7 @@ class UserGroup extends CommonObject
     	 *  @param      int			$hidedetails    Hide details of lines
     	 *  @param      int			$hidedesc       Hide description
     	 *  @param      int			$hideref        Hide ref
    -         *  @param   null|array  $moreparams     Array to provide more information
    +     *  @param      null|array  $moreparams     Array to provide more information
     	 * 	@return     int         				0 if KO, 1 if OK
     	 */
     	public function generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
    @@ -980,4 +1034,3 @@ class UserGroup extends CommonObject
     		return $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
     	}
     }
    -
    diff --git a/htdocs/user/clicktodial.php b/htdocs/user/clicktodial.php
    index a6c43e2dc62..a6618f3a7c0 100644
    --- a/htdocs/user/clicktodial.php
    +++ b/htdocs/user/clicktodial.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -213,10 +213,8 @@ if ($id > 0)
         }
     
         print "</div>\n";
    -
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/user/document.php b/htdocs/user/document.php
    index 2c41c1bf922..6f7e27b13dd 100644
    --- a/htdocs/user/document.php
    +++ b/htdocs/user/document.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2007 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2010      Juanjo Menent        <jmenent@2byte.es>
      * Copyright (C) 2013      Cédric Salvador      <csalvador@gpcsolutions.fr>
      *
    @@ -141,7 +141,7 @@ if ($object->id)
         print '<div class="fichecenter">';
         print '<div class="underbanner clearboth"></div>';
     
    -	// Construit liste des fichiers
    +	// Build file list
     	$filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview.*\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1);
     	$totalsize=0;
     	foreach($filearray as $key => $file)
    @@ -178,6 +178,6 @@ else
     	accessforbidden('',0,0);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/group/card.php b/htdocs/user/group/card.php
    index 47a5a5df9eb..f4b484a72e0 100644
    --- a/htdocs/user/group/card.php
    +++ b/htdocs/user/group/card.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2005		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2015	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Herve Prot			<herve.prot@symeos.com>
      * Copyright (C) 2012		Florian Henry		<florian.henry@open-concept.pro>
      *
    @@ -586,5 +586,6 @@ else
         }
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/group/index.html b/htdocs/user/group/index.html
    new file mode 100644
    index 00000000000..8b137891791
    --- /dev/null
    +++ b/htdocs/user/group/index.html
    @@ -0,0 +1 @@
    +
    diff --git a/htdocs/user/group/ldap.php b/htdocs/user/group/ldap.php
    index bb9d05d59f1..0103f63884a 100644
    --- a/htdocs/user/group/ldap.php
    +++ b/htdocs/user/group/ldap.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2017 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -212,5 +212,6 @@ else
     
     print '</table>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/group/list.php b/htdocs/user/group/list.php
    index 946ba132af8..b9de423f19f 100644
    --- a/htdocs/user/group/list.php
    +++ b/htdocs/user/group/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2003	Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2004-2018	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2018	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2018	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2011		Herve Prot			<herve.prot@symeos.com>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -227,6 +227,6 @@ else
         dol_print_error($db);
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/group/perms.php b/htdocs/user/group/perms.php
    index c1f8d1fe5b0..6b1b011b85c 100644
    --- a/htdocs/user/group/perms.php
    +++ b/htdocs/user/group/perms.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2002-2003 Jean-Louis Bergamo   <jlb@j1b.org>
      * Copyright (C) 2004-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2004      Eric Seigne          <eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -231,7 +231,14 @@ if ($object->id > 0)
         print '<table width="100%" class="noborder">';
         print '<tr class="liste_titre">';
         print '<td>'.$langs->trans("Module").'</td>';
    -    if ($caneditperms) print '<td width="24">&nbsp</td>';
    +    if ($caneditperms)
    +    {
    +    	print '<td align="center" class="nowrap">';
    +    	print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("All")).'" alt="'.dol_escape_htmltag($langs->trans("All")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=addrights&amp;entity='.$entity.'&amp;module=allmodules">'.$langs->trans("All")."</a>";
    +    	print '/';
    +    	print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("None")).'" alt="'.dol_escape_htmltag($langs->trans("None")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delrights&amp;entity='.$entity.'&amp;module=allmodules">'.$langs->trans("None")."</a>";
    +    	print '</td>';
    +    }
         print '<td align="center" width="24">&nbsp;</td>';
         print '<td>'.$langs->trans("Permissions").'</td>';
         print '</tr>';
    @@ -342,5 +349,6 @@ if ($object->id > 0)
         dol_fiche_end();
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/hierarchy.php b/htdocs/user/hierarchy.php
    index 9b2bd34b156..7882bfb24e2 100644
    --- a/htdocs/user/hierarchy.php
    +++ b/htdocs/user/hierarchy.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2005      Eric Seigne          <eric.seigne@ryxeo.com>
      * Copyright (C) 2006-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
      * Copyright (C) 2007      Patrick Raguin       <patrick.raguin@gmail.com>
    - * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -206,6 +206,6 @@ jQuery(document).ready(function() {
     </script>';
     */
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/user/home.php b/htdocs/user/home.php
    index 250bbf62b91..da31b6027ed 100644
    --- a/htdocs/user/home.php
    +++ b/htdocs/user/home.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2005-2018	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2018	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2018	Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -286,6 +286,6 @@ if ($canreadperms)
     //print '</td></tr></table>';
     print '</div></div></div>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/user/index.html b/htdocs/user/index.html
    new file mode 100644
    index 00000000000..8b137891791
    --- /dev/null
    +++ b/htdocs/user/index.html
    @@ -0,0 +1 @@
    +
    diff --git a/htdocs/user/info.php b/htdocs/user/info.php
    index 3cecf94543b..5e1bfaddc4c 100644
    --- a/htdocs/user/info.php
    +++ b/htdocs/user/info.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2004-2007 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -93,6 +93,6 @@ print '</div>';
     
     dol_fiche_end();
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/ldap.php b/htdocs/user/ldap.php
    index 6b8d0b2502e..45b575b9843 100644
    --- a/htdocs/user/ldap.php
    +++ b/htdocs/user/ldap.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2012 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2006-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2006-2017 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -218,5 +218,6 @@ else
     
     print '</table>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/list.php b/htdocs/user/list.php
    index c4664b07fb7..d69dfce5f83 100644
    --- a/htdocs/user/list.php
    +++ b/htdocs/user/list.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2015      Alexandre Spangaro   <aspangaro.dolibarr@gmail.com>
      * Copyright (C) 2016      Marcos García        <marcosgdf@gmail.com>
      *
    @@ -26,6 +26,9 @@
      */
     
     require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php';
    +if (! empty($conf->categorie->enabled))
    +	require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
     
     if (! $user->rights->user->user->lire && ! $user->admin)
     	accessforbidden();
    @@ -65,7 +68,7 @@ $extrafields = new ExtraFields($db);
     
     // fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('user');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     $userstatic=new User($db);
     $companystatic = new Societe($db);
    @@ -123,6 +126,8 @@ $search_thirdparty=GETPOST('search_thirdparty','alpha');
     $search_supervisor=GETPOST('search_supervisor','intcomma');
     $search_previousconn=GETPOST('search_previousconn','alpha');
     $optioncss = GETPOST('optioncss','alpha');
    +$search_categ = GETPOST("search_categ",'int');
    +$catid = GETPOST('catid','int');
     
     // Default search
     if ($search_statut == '') $search_statut='1';
    @@ -165,6 +170,7 @@ if (empty($reshook))
     		$search_date_creation="";
     		$search_date_update="";
     		$search_array_options=array();
    +        $search_categ=0;
     	}
     }
     
    @@ -173,6 +179,8 @@ if (empty($reshook))
      * View
      */
     
    +$htmlother=new FormOther($db);
    +
     $user2=new User($db);
     
     $buttonviewhierarchy='<form action="'.DOL_URL_ROOT.'/user/hierarchy.php'.(($search_statut != '' && $search_statut >= 0) ? '?search_statut='.$search_statut : '').'" method="POST"><input type="submit" class="button" style="width:120px" name="viewcal" value="'.dol_escape_htmltag($langs->trans("HierarchicView")).'"></form>';
    @@ -193,6 +201,7 @@ $sql.= " FROM ".MAIN_DB_PREFIX."user as u";
     if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label)) $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user_extrafields as ef on (u.rowid = ef.fk_object)";
     $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."societe as s ON u.fk_soc = s.rowid";
     $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u2 ON u.fk_user = u2.rowid";
    +if (! empty($search_categ) || ! empty($catid)) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX."categorie_user as cu ON u.rowid = cu.fk_user"; // We'll need this table joined to the select in order to filter by categ
     // Add fields from hooks
     $parameters=array();
     $reshook=$hookmanager->executeHooks('printUserListWhere',$parameters);    // Note that $action and $object may have been modified by hook
    @@ -216,6 +225,10 @@ if ($search_accountancy_code != '')  $sql.= natural_search("u.accountancy_code",
     if ($search_email != '')             $sql.= natural_search("u.email", $search_email);
     if ($search_statut != '' && $search_statut >= 0) $sql.= " AND u.statut IN (".$db->escape($search_statut).")";
     if ($sall)                           $sql.= natural_search(array_keys($fieldstosearchall), $sall);
    +if ($catid > 0)     $sql.= " AND cu.fk_categorie = ".$catid;
    +if ($catid == -2)   $sql.= " AND cu.fk_categorie IS NULL";
    +if ($search_categ > 0)   $sql.= " AND cu.fk_categorie = ".$db->escape($search_categ);
    +if ($search_categ == -2) $sql.= " AND cu.fk_categorie IS NULL";
     // Add where from extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
     // Add where from hooks
    @@ -268,6 +281,7 @@ if ($search_supervisor > 0) $param.="&search_supervisor=".$search_supervisor;
     if ($search_statut != '') $param.="&search_statut=".$search_statut;
     if ($optioncss != '') $param.='&optioncss='.$optioncss;
     if ($mode != '')      $param.='&mode='.$mode;
    +if ($search_categ > 0) $param.="&search_categ=".urlencode($search_categ);
     // Add $param from extra fields
     include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
     
    @@ -296,6 +310,15 @@ $morehtmlright = '<a class="nohover" href="'.DOL_URL_ROOT.'/user/hierarchy.php'.
     
     print_barre_liste($text, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'title_generic', 0, $morehtmlright.' '.$newcardbutton, '', $limit);
     
    +if (! empty($catid))
    +{
    +    print "<div id='ways'>";
    +    $c = new Categorie($db);
    +    $ways = $c->print_all_ways(' &gt; ','user/list.php');
    +    print " &gt; ".$ways[0]."<br>\n";
    +    print "</div><br>";
    +}
    +
     if ($sall)
     {
     	foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
    @@ -304,7 +327,29 @@ if ($sall)
     
     $moreforfilter='';
     
    +// Filter on categories
    +if (! empty($conf->categorie->enabled))
    +{
    +    $moreforfilter.='<div class="divsearchfield">';
    +    $moreforfilter.=$langs->trans('Categories'). ': ';
    +    $moreforfilter.=$htmlother->select_categories(Categorie::TYPE_USER,$search_categ,'search_categ',1);
    +    $moreforfilter.='</div>';
    +}
    +
    +$parameters=array();
    +$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters);    // Note that $action and $object may have been modified by hook
    +if (empty($reshook)) $moreforfilter.=$hookmanager->resPrint;
    +else $moreforfilter=$hookmanager->resPrint;
    +
    +if ($moreforfilter)
    +{
    +    print '<div class="liste_titre liste_titre_bydiv centpercent">';
    +    print $moreforfilter;
    +    print '</div>';
    +}
    +
     $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
    +
     $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
     
     
    @@ -629,5 +674,6 @@ print "</form>\n";
     
     $db->free($result);
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/logout.php b/htdocs/user/logout.php
    index ceeaf35fddf..3f53a4c67dd 100644
    --- a/htdocs/user/logout.php
    +++ b/htdocs/user/logout.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004      Rodolphe Quiedeville  <rodolphe@quiedeville.org>
      * Copyright (C) 2003      Xavier Dutoit         <doli@sydesy.com>
      * Copyright (C) 2004-2009 Laurent Destailleur   <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2012 Regis Houssin         <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -42,10 +42,11 @@ if (!empty($_SESSION["dol_authmode"]) && ($_SESSION["dol_authmode"] == 'forceuse
     global $conf, $langs, $user;
     
     // Appel des triggers
    -include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    -$interface=new Interfaces($db);
    -$result=$interface->run_triggers('USER_LOGOUT',$user,$user,$langs,$conf);
    -if ($result < 0) { $error++; }
    +// TODO @deprecated Remove this. Hook must be used, not this trigger.
    +//include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php';
    +//$interface=new Interfaces($db);
    +//$result=$interface->run_triggers('USER_LOGOUT',$user,$user,$langs,$conf);
    +//if ($result < 0) { $error++; }
     // Fin appel triggers
     
     // Hooks on logout
    @@ -70,13 +71,20 @@ if (GETPOST('dol_no_mouse_hover'))       $url.=(preg_match('/\?/',$url)?'&':'?')
     if (GETPOST('dol_use_jmobile'))          $url.=(preg_match('/\?/',$url)?'&':'?').'dol_use_jmobile=1';
     
     // Destroy session
    -$prefix=dol_getprefix('');
    +/*$prefix=dol_getprefix('');
     $sessionname='DOLSESSID_'.$prefix;
     $sessiontimeout='DOLSESSTIMEOUT_'.$prefix;
     if (! empty($_COOKIE[$sessiontimeout])) ini_set('session.gc_maxlifetime',$_COOKIE[$sessiontimeout]);
     session_name($sessionname);
     session_destroy();
     dol_syslog("End of session ".$sessionname);
    +*/
    +dol_syslog("End of session ".session_id());
    +if (session_status() === PHP_SESSION_ACTIVE)
    +{
    +	session_destroy();
    +}
    +
     
     // Not sure this is required
     unset($_SESSION['dol_login']);
    diff --git a/htdocs/user/note.php b/htdocs/user/note.php
    index 87a6785615e..c4f657a29bc 100644
    --- a/htdocs/user/note.php
    +++ b/htdocs/user/note.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2015 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -158,6 +158,6 @@ if ($id)
     	print "</form>\n";
     }
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/user/notify/card.php b/htdocs/user/notify/card.php
    index 9403694faa9..f4e06075e79 100644
    --- a/htdocs/user/notify/card.php
    +++ b/htdocs/user/notify/card.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2003      Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2004-2014 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2014 Juanjo Menent	<jmenent@2byte.es>
    + * Copyright (C) 2010-2014 Juanjo Menent	    <jmenent@2byte.es>
      * Copyright (C) 2015      Marcos García        <marcosgdf@gmail.com>
      * Copyright (C) 2016      Abbes Bahfir         <contact@dolibarrpar.com>
      *
    @@ -67,7 +67,7 @@ if ($action == 'add')
     
         if ($actionid <= 0)
         {
    -	    setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Action")), 'errors');
    +	    setEventMessages($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Action")), null, 'errors');
             $error++;
         }
     
    @@ -188,7 +188,7 @@ if ($result > 0)
     
     
         // Add notification form
    -    print_fiche_titre($langs->trans("AddNewNotification"),'','');
    +    print load_fiche_titre($langs->trans("AddNewNotification"),'','');
     
         print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$id.'" method="post">';
         print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
    @@ -276,7 +276,7 @@ if ($result > 0)
         }
     
         // List of active notifications
    -    print_fiche_titre($langs->trans("ListOfActiveNotifications").' ('.$num.')','','');
    +    print load_fiche_titre($langs->trans("ListOfActiveNotifications").' ('.$num.')','','');
     
         // Line with titles
         print '<table width="100%" class="noborder">';
    @@ -507,7 +507,6 @@ if ($result > 0)
     }
     else dol_print_error('','RecordNotFound');
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/user/notify/index.html b/htdocs/user/notify/index.html
    new file mode 100644
    index 00000000000..8b137891791
    --- /dev/null
    +++ b/htdocs/user/notify/index.html
    @@ -0,0 +1 @@
    +
    diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php
    index 60f1e23334f..0c43a12361d 100644
    --- a/htdocs/user/param_ihm.php
    +++ b/htdocs/user/param_ihm.php
    @@ -1,7 +1,8 @@
     <?php
     /* Copyright (C) 2005-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2010-2015 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2010-2015 Regis Houssin        <regis.houssin@inodbox.com>
      * Copyright (C) 2013	   Florian Henry        <florian.henry@open-concept.pro.com>
    + * Copyright (C) 2018      Ferran Marcet        <fmarcet@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -109,6 +110,12 @@ if (empty($reshook)) {
     				$tabparam["MAIN_SIZE_LISTE_LIMIT"] = '';
     			}
     
    +			if (GETPOST("check_AGENDA_DEFAULT_VIEW") == "on") {
    +				$tabparam["AGENDA_DEFAULT_VIEW"] = $_POST["AGENDA_DEFAULT_VIEW"];
    +			} else {
    +				$tabparam["AGENDA_DEFAULT_VIEW"] = '';
    +			}
    +
     			if (GETPOST("check_MAIN_THEME") == "on") {
     				$tabparam["MAIN_THEME"] = $_POST["main_theme"];
     			} else {
    @@ -137,6 +144,12 @@ if (empty($reshook)) {
     				$tabparam["THEME_ELDY_USE_HOVER"] = 0;
     			}
     
    +			if (GETPOST('check_THEME_ELDY_USE_CHECKED') == 'on') {
    +				$tabparam["THEME_ELDY_USE_CHECKED"] = 1;
    +			} else {
    +				$tabparam["THEME_ELDY_USE_CHECKED"] = 0;
    +			}
    +
     			$result = dol_set_user_param($db, $conf, $object, $tabparam);
     
     			header('Location: ' . $_SERVER["PHP_SELF"] . '?id=' . $id);
    @@ -216,6 +229,9 @@ if ($action == 'edit')
                     if (jQuery("#check_SIZE_LISTE_LIMIT").prop("checked")) { jQuery("#main_size_liste_limit").removeAttr(\'disabled\'); }
             		else { jQuery("#main_size_liste_limit").attr(\'disabled\',\'disabled\'); }
     
    +                if (jQuery("#check_AGENDA_DEFAULT_VIEW").prop("checked")) { jQuery("#AGENDA_DEFAULT_VIEW").removeAttr(\'disabled\'); }
    +        		else { jQuery("#AGENDA_DEFAULT_VIEW").attr(\'disabled\',\'disabled\'); }
    +
                     if (jQuery("#check_MAIN_THEME").prop("checked")) { jQuery(".themethumbs").removeAttr(\'disabled\'); }
             		else { jQuery(".themethumbs").attr(\'disabled\',\'disabled\'); }
     
    @@ -224,8 +240,9 @@ if ($action == 'edit')
                 }
             	init_myfunc();
             	jQuery("#check_MAIN_LANDING_PAGE").click(function() { init_myfunc(); });
    -            jQuery("#check_SIZE_LISTE_LIMIT").click(function() { init_myfunc(); });
                 jQuery("#check_MAIN_LANG_DEFAULT").click(function() { init_myfunc(); });
    +            jQuery("#check_SIZE_LISTE_LIMIT").click(function() { init_myfunc(); });
    +            jQuery("#check_AGENDA_DEFAULT_VIEW").click(function() { init_myfunc(); });
                 jQuery("#check_MAIN_THEME").click(function() { init_myfunc(); });
                 jQuery("#check_THEME_ELDY_TOPMENU_BACK1").click(function() { init_myfunc(); });
                 jQuery("#check_THEME_ELDY_BACKTITLE1").click(function() { init_myfunc(); });
    @@ -244,7 +261,7 @@ if ($action == 'edit')
         print '<td>';
         print (empty($conf->global->MAIN_LANDING_PAGE)?'':$conf->global->MAIN_LANDING_PAGE);
         print '</td>';
    -    print '<td align="left" class="nowrap" width="20%"><input '.$bc[$var].' name="check_MAIN_LANDING_PAGE" id="check_MAIN_LANDING_PAGE" type="checkbox" '.(! empty($object->conf->MAIN_LANDING_PAGE)?" checked":"");
    +    print '<td class="nowrap" width="20%"><input class="oddeven" name="check_MAIN_LANDING_PAGE" id="check_MAIN_LANDING_PAGE" type="checkbox" '.(! empty($object->conf->MAIN_LANDING_PAGE)?" checked":"");
         print empty($dolibarr_main_demo)?'':' disabled="disabled"';	// Disabled for demo
         print '> '.$langs->trans("UsePersonalValue").'</td>';
         print '<td>';
    @@ -252,28 +269,40 @@ if ($action == 'edit')
         //print info_admin($langs->trans("WarningYouMayLooseAccess"), 0, 0, 0);
         print '</td></tr>';
     
    -    // Langue par defaut
    +    // Language by default
         print '<tr class="oddeven"><td>'.$langs->trans("Language").'</td>';
         print '<td>';
         $s=picto_from_langcode($conf->global->MAIN_LANG_DEFAULT);
         print $s?$s.' ':'';
         print ($conf->global->MAIN_LANG_DEFAULT=='auto'?$langs->trans("AutoDetectLang"):$langs->trans("Language_".$conf->global->MAIN_LANG_DEFAULT));
         print '</td>';
    -    print '<td align="left" class="nowrap" width="20%"><input '.$bc[$var].' name="check_MAIN_LANG_DEFAULT" id="check_MAIN_LANG_DEFAULT" type="checkbox" '.(! empty($object->conf->MAIN_LANG_DEFAULT)?" checked":"");
    +    print '<td class="nowrap" width="20%"><input class="oddeven" name="check_MAIN_LANG_DEFAULT" id="check_MAIN_LANG_DEFAULT" type="checkbox" '.(! empty($object->conf->MAIN_LANG_DEFAULT)?" checked":"");
         print empty($dolibarr_main_demo)?'':' disabled="disabled"';	// Disabled for demo
         print '> '.$langs->trans("UsePersonalValue").'</td>';
         print '<td>';
         print $formadmin->select_language((! empty($object->conf->MAIN_LANG_DEFAULT)?$object->conf->MAIN_LANG_DEFAULT:''),'main_lang_default',1,null,0,0,(! empty($dolibarr_main_demo)));
         print '</td></tr>';
     
    -    // Taille max des listes
    +    // Max size of lists
         print '<tr class="oddeven"><td>'.$langs->trans("MaxSizeList").'</td>';
         print '<td>'.$conf->global->MAIN_SIZE_LISTE_LIMIT.'</td>';
    -    print '<td align="left" class="nowrap" width="20%"><input '.$bc[$var].' name="check_SIZE_LISTE_LIMIT" id="check_SIZE_LISTE_LIMIT" type="checkbox" '.(! empty($object->conf->MAIN_SIZE_LISTE_LIMIT)?" checked":"");
    +    print '<td class="nowrap" width="20%"><input class="oddeven" name="check_SIZE_LISTE_LIMIT" id="check_SIZE_LISTE_LIMIT" type="checkbox" '.(! empty($object->conf->MAIN_SIZE_LISTE_LIMIT)?" checked":"");
         print empty($dolibarr_main_demo)?'':' disabled="disabled"';	// Disabled for demo
         print '> '.$langs->trans("UsePersonalValue").'</td>';
         print '<td><input class="flat" name="main_size_liste_limit" id="main_size_liste_limit" size="4" value="' . (! empty($object->conf->MAIN_SIZE_LISTE_LIMIT)?$object->conf->MAIN_SIZE_LISTE_LIMIT:'') . '"></td></tr>';
     
    +    // AGENDA_DEFAULT_VIEW
    +    print '<tr class="oddeven">'."\n";
    +    print '<td>'.$langs->trans("AGENDA_DEFAULT_VIEW").'</td>'."\n";
    +    print '<td align="center">&nbsp;</td>'."\n";
    +    print '<td class="nowrap" width="20%"><input class="oddeven" name="check_AGENDA_DEFAULT_VIEW" id="check_AGENDA_DEFAULT_VIEW" type="checkbox" '.(! empty($object->conf->AGENDA_DEFAULT_VIEW)?" checked":"");
    +    print empty($dolibarr_main_demo)?'':' disabled="disabled"';	// Disabled for demo
    +    print '> '.$langs->trans("UsePersonalValue").'</td>';
    +    print '<td>'."\n";
    +    $tmplist=array(''=>'&nbsp;', 'show_list'=>$langs->trans("ViewList"), 'show_month'=>$langs->trans("ViewCal"), 'show_week'=>$langs->trans("ViewWeek"), 'show_day'=>$langs->trans("ViewDay"), 'show_peruser'=>$langs->trans("ViewPerUser"));
    +    print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, $object->conf->AGENDA_DEFAULT_VIEW, 0, 0, 0, '');
    +    print '</td></tr>'."\n";
    +
         print '</table><br>';
     
         // Theme
    @@ -287,7 +316,6 @@ if ($action == 'edit')
         print '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
         print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';
         print '</div>';
    -
     }
     else
     {
    @@ -301,12 +329,11 @@ else
         print '<tr class="liste_titre"><td width="25%">'.$langs->trans("Parameter").'</td><td width="25%">'.$langs->trans("DefaultValue").'</td><td>&nbsp;</td><td>'.$langs->trans("PersonalValue").'</td></tr>';
     
         // Landing page
    -
         print '<tr class="oddeven"><td>'.$langs->trans("LandingPage").'</td>';
         print '<td>';
         print (empty($conf->global->MAIN_LANDING_PAGE)?'':$conf->global->MAIN_LANDING_PAGE);
         print '</td>';
    -    print '<td align="left" class="nowrap"><input '.$bc[$var].' name="check_MAIN_LANDING_PAGE" disabled id="check_MAIN_LANDING_PAGE" type="checkbox" '.(! empty($object->conf->MAIN_LANDING_PAGE)?" checked":"");
    +    print '<td class="nowrap"><input class="oddeven" name="check_MAIN_LANDING_PAGE" disabled id="check_MAIN_LANDING_PAGE" type="checkbox" '.(! empty($object->conf->MAIN_LANDING_PAGE)?" checked":"");
         print empty($dolibarr_main_demo)?'':' disabled="disabled"';	// Disabled for demo
         print '> '.$langs->trans("UsePersonalValue").'</td>';
         print '<td>';
    @@ -319,26 +346,35 @@ else
         print '</td></tr>';
     
         // Language
    -
         print '<tr class="oddeven"><td>'.$langs->trans("Language").'</td>';
         print '<td>';
         $s=picto_from_langcode($conf->global->MAIN_LANG_DEFAULT);
         print ($s?$s.' ':'');
         print (isset($conf->global->MAIN_LANG_DEFAULT) && $conf->global->MAIN_LANG_DEFAULT=='auto'?$langs->trans("AutoDetectLang"):$langs->trans("Language_".$conf->global->MAIN_LANG_DEFAULT));
         print '</td>';
    -    print '<td align="left" class="nowrap"><input '.$bc[$var].' type="checkbox" disabled '.(! empty($object->conf->MAIN_LANG_DEFAULT)?" checked":"").'> '.$langs->trans("UsePersonalValue").'</td>';
    +    print '<td class="nowrap"><input class="oddeven" type="checkbox" disabled '.(! empty($object->conf->MAIN_LANG_DEFAULT)?" checked":"").'> '.$langs->trans("UsePersonalValue").'</td>';
         print '<td>';
         $s=(isset($object->conf->MAIN_LANG_DEFAULT) ? picto_from_langcode($object->conf->MAIN_LANG_DEFAULT) : '');
         print ($s?$s.' ':'');
         print (isset($object->conf->MAIN_LANG_DEFAULT) && $object->conf->MAIN_LANG_DEFAULT=='auto'?$langs->trans("AutoDetectLang"):(! empty($object->conf->MAIN_LANG_DEFAULT)?$langs->trans("Language_".$object->conf->MAIN_LANG_DEFAULT):''));
         print '</td></tr>';
     
    -
    +	// Max size for lists
         print '<tr class="oddeven"><td>'.$langs->trans("MaxSizeList").'</td>';
         print '<td>'.(! empty($conf->global->MAIN_SIZE_LISTE_LIMIT)?$conf->global->MAIN_SIZE_LISTE_LIMIT:'&nbsp;').'</td>';
    -    print '<td align="left" class="nowrap" width="20%"><input '.$bc[$var].' type="checkbox" disabled '.(! empty($object->conf->MAIN_SIZE_LISTE_LIMIT)?" checked":"").'> '.$langs->trans("UsePersonalValue").'</td>';
    +    print '<td class="nowrap" width="20%"><input class="oddeven" type="checkbox" disabled '.(! empty($object->conf->MAIN_SIZE_LISTE_LIMIT)?" checked":"").'> '.$langs->trans("UsePersonalValue").'</td>';
         print '<td>' . (! empty($object->conf->MAIN_SIZE_LISTE_LIMIT)?$object->conf->MAIN_SIZE_LISTE_LIMIT:'&nbsp;') . '</td></tr>';
     
    +    // AGENDA_DEFAULT_VIEW
    +    print '<tr class="oddeven">'."\n";
    +    print '<td>'.$langs->trans("AGENDA_DEFAULT_VIEW").'</td>'."\n";
    +    print '<td align="center">&nbsp;</td>'."\n";
    +    print '<td class="nowrap" width="20%"><input class="oddeven" type="checkbox" disabled '.(! empty($object->conf->AGENDA_DEFAULT_VIEW)?" checked":"").'> '.$langs->trans("UsePersonalValue").'</td>';
    +    print '<td>'."\n";
    +    $tmplist=array(''=>'&nbsp;', 'show_list'=>$langs->trans("ViewList"), 'show_month'=>$langs->trans("ViewCal"), 'show_week'=>$langs->trans("ViewWeek"), 'show_day'=>$langs->trans("ViewDay"), 'show_peruser'=>$langs->trans("ViewPerUser"));
    +    if (! empty($object->conf->AGENDA_DEFAULT_VIEW)) print $form->selectarray('AGENDA_DEFAULT_VIEW', $tmplist, $object->conf->AGENDA_DEFAULT_VIEW, 0, 0, 0, '', 0, 0, 1);
    +    print '</td></tr>'."\n";
    +
         print '</table><br>';
     
     
    @@ -366,7 +402,6 @@ else
         }
     
         print '</div>';
    -
     }
     
     if ($action == 'edit')
    @@ -374,5 +409,6 @@ if ($action == 'edit')
         print '</form>';
     }
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/user/passwordforgotten.php b/htdocs/user/passwordforgotten.php
    index cf13529d23a..519a0ef0a98 100644
    --- a/htdocs/user/passwordforgotten.php
    +++ b/htdocs/user/passwordforgotten.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2007-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2008-2012	Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2008-2012	Regis Houssin		<regis.houssin@inodbox.com>
      * Copyright (C) 2008-2011	Juanjo Menent		<jmenent@2byte.es>
      * Copyright (C) 2014       Teddy Andreotti    	<125155@supinfo.com>
      *
    @@ -177,11 +177,11 @@ $rowspan=2;
     $urllogo=DOL_URL_ROOT.'/theme/login_logo.png';
     if (! empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('thumbs/'.$mysoc->logo_small);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_small);
     }
     elseif (! empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.'/logos/'.$mysoc->logo))
     {
    -	$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode($mysoc->logo);
    +	$urllogo=DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/'.$mysoc->logo);
     	$width=128;
     }
     elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/'.$conf->theme.'/img/dolibarr_logo.png'))
    diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php
    index 574aa44f89d..17666183319 100644
    --- a/htdocs/user/perms.php
    +++ b/htdocs/user/perms.php
    @@ -3,7 +3,7 @@
      * Copyright (C) 2002-2003	Jean-Louis Bergamo		<jlb@j1b.org>
      * Copyright (C) 2004-2015	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2004		Eric Seigne				<eric.seigne@ryxeo.com>
    - * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2017	Regis Houssin			<regis.houssin@inodbox.com>
      * Copyright (C) 2012		Juanjo Menent			<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
    @@ -245,7 +245,7 @@ if ($user->rights->user->user->lire || $user->admin) {
     dol_banner_tab($object,'id',$linkback,$user->rights->user->user->lire || $user->admin);
     
     
    -//print '<div class="underbanner clearboth"></div>';
    +print '<div class="underbanner clearboth"></div>';
     
     if ($user->admin) print info_admin($langs->trans("WarningOnlyPermissionOfActivatedModules"));
     // Show warning about external users
    @@ -257,11 +257,22 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
     
     
     print "\n";
    +print '<div class="div-table-responsive">';
     print '<table width="100%" class="noborder">';
     print '<tr class="liste_titre">';
     print '<td>'.$langs->trans("Module").'</td>';
    -if ($caneditperms) print '<td>&nbsp</td>';
    -print '<td align="center" width="24">&nbsp;</td>';
    +if (($caneditperms && empty($objMod->rights_admin_allowed)) || empty($object->admin))
    +{
    +	if ($caneditperms)
    +	{
    +		print '<td align="center" class="nowrap">';
    +		print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("All")).'" alt="'.dol_escape_htmltag($langs->trans("All")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=addrights&amp;entity='.$entity.'&amp;module=allmodules">'.$langs->trans("All")."</a>";
    +		print '/';
    +		print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("None")).'" alt="'.dol_escape_htmltag($langs->trans("None")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delrights&amp;entity='.$entity.'&amp;module=allmodules">'.$langs->trans("None")."</a>";
    +		print '</td>';
    +	}
    +	print '<td align="center" width="24">&nbsp;</td>';
    +}
     print '<td>'.$langs->trans("Permissions").'</td>';
     print '</tr>'."\n";
     
    @@ -302,21 +313,31 @@ if ($result)
         		print '<tr class="oddeven trforbreak">';
         		print '<td class="maxwidthonsmartphone tdoverflowonsmartphone">'.img_object('',$picto,'class="pictoobjectwidth"').' '.$objMod->getName();
         		print '<a name="'.$objMod->getName().'"></a></td>';
    -    		print '<td align="center" class="nowrap">';
    -    		if ($caneditperms && empty($objMod->rights_admin_allowed) || empty($object->admin))
    +    		if (($caneditperms && empty($objMod->rights_admin_allowed)) || empty($object->admin))
         		{
    -    			print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("All")).'" alt="'.dol_escape_htmltag($langs->trans("All")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=addrights&amp;entity='.$entity.'&amp;module='.$obj->module.'">'.$langs->trans("All")."</a>";
    -    			print '/';
    -    			print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("None")).'" alt="'.dol_escape_htmltag($langs->trans("None")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delrights&amp;entity='.$entity.'&amp;module='.$obj->module.'">'.$langs->trans("None")."</a>";
    +    			if ($caneditperms)
    +    			{
    +    				print '<td align="center" class="nowrap">';
    +    				print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("All")).'" alt="'.dol_escape_htmltag($langs->trans("All")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=addrights&amp;entity='.$entity.'&amp;module='.$obj->module.'">'.$langs->trans("All")."</a>";
    +    				print '/';
    +    				print '<a class="reposition" title="'.dol_escape_htmltag($langs->trans("None")).'" alt="'.dol_escape_htmltag($langs->trans("None")).'" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delrights&amp;entity='.$entity.'&amp;module='.$obj->module.'">'.$langs->trans("None")."</a>";
    +    				print '</td>';
    +    			}
    +    		}
    +    		else
    +    		{
    +    			if ($caneditperms)
    +    			{
    +    				print '<td></td>';
    +    			}
         		}
    -    		print '</td>';
         		print '<td colspan="2">&nbsp;</td>';
         		print '</tr>'."\n";
             }
     
     		print '<tr class="oddeven">';
     
    -		// Picto and label of permission
    +		// Picto and label of module
     		print '<td class="maxwidthonsmartphone tdoverflowonsmartphone">'.img_object('',$picto,'class="pictoobjectwidth"').' '.$objMod->getName().'</td>';
     
             // Permission and tick
    @@ -375,6 +396,7 @@ if ($result)
             	print '<td>&nbsp</td>';
             }
     
    +        // Label
     		$permlabel=($conf->global->MAIN_USE_ADVANCED_PERMS && ($langs->trans("PermissionAdvanced".$obj->id)!=("PermissionAdvanced".$obj->id))?$langs->trans("PermissionAdvanced".$obj->id):(($langs->trans("Permission".$obj->id)!=("Permission".$obj->id))?$langs->trans("Permission".$obj->id):$langs->trans($obj->libelle)));
     		print '<td class="maxwidthonsmartphone">'.$permlabel.'</td>';
     
    @@ -385,6 +407,7 @@ if ($result)
     }
     else dol_print_error($db);
     print '</table>';
    +print '</div>';
     
     $parameters=array();
     $reshook=$hookmanager->executeHooks('insertExtraFooter',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
    @@ -393,6 +416,6 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
     
     dol_fiche_end();
     
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/variants/admin/admin.php b/htdocs/variants/admin/admin.php
    index dc039bf6d5f..43700b281c7 100644
    --- a/htdocs/variants/admin/admin.php
    +++ b/htdocs/variants/admin/admin.php
    @@ -1,6 +1,6 @@
     <?php
    -
    -/* Copyright (C) 2016	Marcos García	<marcosgdf@gmail.com>
    +/* Copyright (C) 2016   Marcos García   <marcosgdf@gmail.com>
    + * Copyright (C) 2018   Frédéric France <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -31,17 +31,16 @@ if ($_POST) {
     	$value = GETPOST('PRODUIT_ATTRIBUTES_HIDECHILD');
     
     	if (dolibarr_set_const($db, 'PRODUIT_ATTRIBUTES_HIDECHILD', $value, 'chaine', 0, '', $conf->entity)) {
    -		setEventMessage($langs->trans('RecordSaved'));
    +		setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     	} else {
    -		setEventMessage($langs->trans('CoreErrorMessage'), 'errors');
    +		setEventMessages($langs->trans('CoreErrorMessage'), null, 'errors');
     	}
     
            if (dolibarr_set_const($db, 'PRODUIT_ATTRIBUTES_SEPARATOR', GETPOST('PRODUIT_ATTRIBUTES_SEPARATOR'), 'chaine', 0, '', $conf->entity)) {
    -               setEventMessage($langs->trans('RecordSaved'));
    +               setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
            } else {
    -               setEventMessage($langs->trans('CoreErrorMessage'), 'errors');
    +               setEventMessages($langs->trans('CoreErrorMessage'), null, 'errors');
            }
    -
     }
     
     $title = $langs->trans('ModuleSetup').' '.$langs->trans('ProductAttributes');
    @@ -62,16 +61,15 @@ print '<tr class="oddeven"><td>'.$langs->trans('HideProductCombinations').'</td>
     print $form->selectyesno("PRODUIT_ATTRIBUTES_HIDECHILD",$conf->global->PRODUIT_ATTRIBUTES_HIDECHILD,1).'</td></tr>';
     print '<tr class="oddeven"><td>'.$langs->trans('CombinationsSeparator').'</td>';
     if(isset($conf->global->PRODUIT_ATTRIBUTES_SEPARATOR)) {
    -       $separator = $conf->global->PRODUIT_ATTRIBUTES_SEPARATOR;
    +    $separator = $conf->global->PRODUIT_ATTRIBUTES_SEPARATOR;
     } else {
    -       $separator = "_";
    +    $separator = "_";
     }
     print '<td align="right"><input size="3" type="text" class="flat" name="PRODUIT_ATTRIBUTES_SEPARATOR" value="'.$separator.'"></td></tr>';
     print '</table>';
     print '<br><div style="text-align: center"><input type="submit" value="'.$langs->trans('Save').'" class="button"></div>';
     print '</form>';
     
    +// End of page
     llxFooter();
    -
     $db->close();
    -
    diff --git a/htdocs/variants/card.php b/htdocs/variants/card.php
    index 547a82d0f63..1f04e5edb87 100644
    --- a/htdocs/variants/card.php
    +++ b/htdocs/variants/card.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2016	Marcos García	<marcosgdf@gmail.com>
    +/* Copyright (C) 2016   Marcos García   <marcosgdf@gmail.com>
    + * Copyright (C) 2018   Frédéric France <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -50,9 +51,9 @@ if ($_POST) {
     		$object->label = $label;
     
     		if ($object->update($user) < 1) {
    -			setEventMessage($langs->trans('CoreErrorMessage'), 'errors');
    +			setEventMessages($langs->trans('CoreErrorMessage'), $object->errors, 'errors');
     		} else {
    -			setEventMessage($langs->trans('RecordSaved'));
    +			setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     			header('Location: '.dol_buildpath('/variants/card.php?id='.$id, 2));
     			exit();
     		}
    @@ -77,9 +78,9 @@ if ($_POST) {
     			if (! $error)
     			{
     				if ($objectval->update($user) > 0) {
    -					setEventMessage($langs->trans('RecordSaved'));
    +					setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     				} else {
    -					setEventMessage($langs->trans('CoreErrorMessage'), 'errors');
    +					setEventMessage($langs->trans('CoreErrorMessage'), $objectval->errors, 'errors');
     				}
     			}
     		}
    @@ -87,7 +88,6 @@ if ($_POST) {
     		header('Location: '.dol_buildpath('/variants/card.php?id='.$object->id, 2));
     		exit();
     	}
    -
     }
     
     if ($confirm == 'yes') {
    @@ -99,11 +99,11 @@ if ($confirm == 'yes') {
     
     		if ($res < 1 || ($object->delete() < 1)) {
     			$db->rollback();
    -			setEventMessage($langs->trans('CoreErrorMessage'), 'errors');
    +			setEventMessages($langs->trans('CoreErrorMessage'), $object->errors, 'errors');
     			header('Location: '.dol_buildpath('/variants/card.php?id='.$object->id, 2));
     		} else {
     			$db->commit();
    -			setEventMessage($langs->trans('RecordSaved'));
    +			setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     			header('Location: '.dol_buildpath('/variants/list.php', 2));
     		}
     		exit();
    @@ -113,9 +113,9 @@ if ($confirm == 'yes') {
     		if ($objectval->fetch($valueid) > 0) {
     
     			if ($objectval->delete() < 1) {
    -				setEventMessage($langs->trans('CoreErrorMessage'), 'errors');
    +				setEventMessages($langs->trans('CoreErrorMessage'), $objectval->errors, 'errors');
     			} else {
    -				setEventMessage($langs->trans('RecordSaved'));
    +				setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     			}
     
     			header('Location: '.dol_buildpath('/variants/card.php?id='.$object->id, 2));
    @@ -132,11 +132,10 @@ if ($confirm == 'yes') {
     $langs->load('products');
     
     $title = $langs->trans('ProductAttributeName', dol_htmlentities($object->label));
    -$var = false;
     
     llxHeader('', $title);
     
    -//print_fiche_titre($title);
    +//print load_fiche_titre($title);
     
     $h=0;
     $head[$h][0] = DOL_URL_ROOT.'/variants/card.php?id='.$object->id;
    @@ -242,7 +241,7 @@ if ($action == 'edit') { ?>
     
     	<?php
     
    -	print_fiche_titre($langs->trans("PossibleValues"));
    +	print load_fiche_titre($langs->trans("PossibleValues"));
     
     	if ($action == 'edit_value') {
     		print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
    @@ -299,5 +298,6 @@ if ($action == 'edit') { ?>
     	<?php
     }
     
    +// End of page
     llxFooter();
    -$db->close();
    +$db->close();;
    diff --git a/htdocs/variants/class/ProductAttribute.class.php b/htdocs/variants/class/ProductAttribute.class.php
    index 0fa25cdba6e..bdaaff20988 100644
    --- a/htdocs/variants/class/ProductAttribute.class.php
    +++ b/htdocs/variants/class/ProductAttribute.class.php
    @@ -53,6 +53,11 @@ class ProductAttribute
     	 */
     	public $rang;
     
    +    /**
    +     * Constructor
    +     *
    +     * @param   DoliDB $db     Database handler
    +     */
     	public function __construct(DoliDB $db)
     	{
     		global $conf;
    diff --git a/htdocs/variants/class/ProductAttributeValue.class.php b/htdocs/variants/class/ProductAttributeValue.class.php
    index 9b455851507..2988fd9715e 100644
    --- a/htdocs/variants/class/ProductAttributeValue.class.php
    +++ b/htdocs/variants/class/ProductAttributeValue.class.php
    @@ -52,8 +52,13 @@ class ProductAttributeValue
     	 */
     	public $value;
     
    -	public function __construct(DoliDB $db)
    -	{
    +    /**
    +     * Constructor
    +     *
    +     * @param   DoliDB $db     Database handler
    +     */
    +    public function __construct(DoliDB $db)
    +    {
     		global $conf;
     
     		$this->db = $db;
    diff --git a/htdocs/variants/class/ProductCombination.class.php b/htdocs/variants/class/ProductCombination.class.php
    index 92bba2f70f8..ef9ec4997f3 100644
    --- a/htdocs/variants/class/ProductCombination.class.php
    +++ b/htdocs/variants/class/ProductCombination.class.php
    @@ -1,6 +1,7 @@
     <?php
     
     /* Copyright (C) 2016	Marcos García	<marcosgdf@gmail.com>
    + * Copyright (C) 2018	Juanjo Menent	<jmenent@2byte.es>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -70,7 +71,12 @@ class ProductCombination
     	 */
     	public $entity;
     
    -	public function __construct(DoliDB $db)
    +    /**
    +     * Constructor
    +     *
    +     * @param   DoliDB $db     Database handler
    +     */
    +    public function __construct(DoliDB $db)
     	{
     		global $conf;
     
    @@ -324,6 +330,8 @@ class ProductCombination
     		$child->price_autogen = $parent->price_autogen;
     		$child->weight = $parent->weight + $this->variation_weight;
     		$child->weight_units = $parent->weight_units;
    +		$varlabel = $this->getCombinationLabel($this->fk_product_child);
    +		$child->label = $parent->label.$varlabel;
     
     		if ($child->update($child->id, $user) > 0) {
     
    @@ -332,14 +340,33 @@ class ProductCombination
     
     			// MultiPrix
     			if (! empty($conf->global->PRODUIT_MULTIPRICES)) {
    -				$new_type = $parent->multiprices_base_type[1];
    -				$new_min_price = $parent->multiprices_min[1];
    -				$new_psq = $parent->multiprices_recuperableonly[1];
    +				for ($i=1; $i <= $conf->global->PRODUIT_MULTIPRICES_LIMIT; $i++)
    +				{
    +					if ($parent->multiprices[$i] != '') {
    +						$new_type = $parent->multiprices_base_type[$i];
    +						$new_min_price = $parent->multiprices_min[$i];
    +						if ($parent->prices_by_qty_list[$i]) {
    +							$new_psq = 1;
    +						} else {
    +							$new_psq = 0;
    +						}
     
    -				if ($new_type == 'TTC') {
    -					$new_price = $parent->multiprices_ttc[1];
    -				} else {
    -					$new_price = $parent->multiprices[1];
    +						if ($new_type == 'TTC') {
    +							$new_price = $parent->multiprices_ttc[$i];
    +						} else {
    +							$new_price = $parent->multiprices[$i];
    +						}
    +
    +						if ($this->variation_price_percentage) {
    +							if ($new_price != 0) {
    +								$new_price *= 1 + ($this->variation_price / 100);
    +							}
    +						} else {
    +							$new_price += $this->variation_price;
    +						}
    +
    +						$child->updatePrice($new_price, $new_type, $user, $new_vat, $new_min_price, $i, $new_npr, $new_psq);
    +					}
     				}
     			} else {
     				$new_type = $parent->price_base_type;
    @@ -351,15 +378,17 @@ class ProductCombination
     				} else {
     					$new_price = $parent->price;
     				}
    -			}
     
    -			if ($this->variation_price_percentage) {
    -				$new_price *= 1 + ($this->variation_price/100);
    -			} else {
    -				$new_price += $this->variation_price;
    -			}
    +				if ($this->variation_price_percentage) {
    +					if ($new_price != 0) {
    +						$new_price *= 1 + ($this->variation_price / 100);
    +					}
    +				} else {
    +					$new_price += $this->variation_price;
    +				}
     
    -			$child->updatePrice($new_price, $new_type, $user, $new_vat, $new_min_price, 1, $new_npr, $new_psq);
    +				$child->updatePrice($new_price, $new_type, $user, $new_vat, $new_min_price, 1, $new_npr, $new_psq);
    +			}
     
     			$this->db->commit();
     
    @@ -629,7 +658,7 @@ WHERE c.fk_product_parent = ".(int) $productid." AND p.tosell = 1";
     		}
     
     		$db->commit();
    -		return 1;
    +		return $newproduct->id;
     	}
     
     	/**
    @@ -676,4 +705,38 @@ WHERE c.fk_product_parent = ".(int) $productid." AND p.tosell = 1";
     
     		return 1;
     	}
    +
    +	/**
    +	 * Return label for combinations
    +	 * @param 	int 	$prod_child		id of child
    +	 * @return 	string					combination label
    +	 */
    +	public function getCombinationLabel($prod_child)
    +	{
    +		$label = '';
    +		$sql = 'SELECT pav.value AS label';
    +		$sql.= ' FROM '.MAIN_DB_PREFIX.'product_attribute_combination pac';
    +		$sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'product_attribute_combination2val pac2v ON pac2v.fk_prod_combination=pac.rowid';
    +		$sql.= ' INNER JOIN '.MAIN_DB_PREFIX.'product_attribute_value pav ON pav.rowid=pac2v.fk_prod_attr_val';
    +		$sql.= ' WHERE pac.fk_product_child='.$prod_child;
    +
    +		$resql = $this->db->query($sql);
    +		if ($resql) {
    +			$num = $this->db->num_rows($resql);
    +
    +			$i = 0;
    +
    +			while ($i < $num)
    +			{
    +				$obj = $this->db->fetch_object($resql);
    +
    +				if ($obj->label)
    +				{
    +					$label.=' '.$obj->label;
    +				}
    +				$i++;
    +			}
    +		}
    +		return $label;
    +	}
     }
    diff --git a/htdocs/variants/class/ProductCombination2ValuePair.class.php b/htdocs/variants/class/ProductCombination2ValuePair.class.php
    index 874cedb101a..7332670f684 100644
    --- a/htdocs/variants/class/ProductCombination2ValuePair.class.php
    +++ b/htdocs/variants/class/ProductCombination2ValuePair.class.php
    @@ -52,10 +52,15 @@ class ProductCombination2ValuePair
     	 */
     	public $fk_prod_attr_val;
     
    -	public function __construct(DoliDB $db)
    -	{
    -		$this->db = $db;
    -	}
    +    /**
    +     * Constructor
    +     *
    +     * @param   DoliDB $db     Database handler
    +     */
    +    public function __construct(DoliDB $db)
    +    {
    +        $this->db = $db;
    +    }
     
     	/**
     	 * Translates this class to a human-readable string
    diff --git a/htdocs/variants/combinations.php b/htdocs/variants/combinations.php
    index dbc413542c4..79076e8ac50 100644
    --- a/htdocs/variants/combinations.php
    +++ b/htdocs/variants/combinations.php
    @@ -1,6 +1,7 @@
     <?php
    -/* Copyright (C) 2016	Marcos García	      <marcosgdf@gmail.com>
    - * Copyright (C) 2017	Laurent Destailleur   <eldy@users.sourceforge.net>
    +/* Copyright (C) 2016   Marcos García       <marcosgdf@gmail.com>
    + * Copyright (C) 2017   Laurent Destailleur <eldy@users.sourceforge.net>
    + * Copyright (C) 2018   Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,10 +25,8 @@ require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductAttributeValue.class.php'
     require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination.class.php';
     require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination2ValuePair.class.php';
     
    -$langs->load("products");
    -$langs->load("other");
    +$langs->loadLangs(array("products", "other"));
     
    -$var = false;
     $id = GETPOST('id', 'int');
     $valueid = GETPOST('valueid', 'int');
     $ref = GETPOST('ref');
    @@ -104,7 +103,7 @@ if ($_POST) {
             $features = $_SESSION['addvariant_'.$object->id];
     
     		if (!$features) {
    -			setEventMessage($langs->trans('ErrorFieldsRequired'), 'errors');
    +			setEventMessages($langs->trans('ErrorFieldsRequired'), null, 'errors');
     		}
     		else
     		{
    @@ -147,7 +146,7 @@ if ($_POST) {
     				$result = $prodcomb->createProductCombination($object, $sanit_features, array(), $price_impact_percent, $price_impact, $weight_impact);
     				if ($result > 0)
     				{
    -					setEventMessage($langs->trans('RecordSaved'));
    +					setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     					unset($_SESSION['addvariant_'.$object->id]);
     
     					$db->commit();
    @@ -211,12 +210,10 @@ if ($_POST) {
     			} else {
     				setEventMessages($langs->trans('CoreErrorMessage'), null, 'errors');
     			}
    -
     		} else {
     			$db->commit();
    -			setEventMessage($langs->trans('RecordSaved'));
    +			setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     		}
    -
     	}
     	elseif ($valueid > 0) {
     
    @@ -230,7 +227,7 @@ if ($_POST) {
     		$prodcomb->variation_weight = $weight_impact;
     
     		if ($prodcomb->update($user) > 0) {
    -			setEventMessage($langs->trans('RecordSaved'));
    +			setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     			header('Location: '.dol_buildpath('/variants/combinations.php?id='.$id, 2));
     			exit();
     		} else {
    @@ -250,13 +247,13 @@ if ($action === 'confirm_deletecombination') {
     
     		if ($prodcomb->delete($user) > 0 && $prodstatic->fetch($prodcomb->fk_product_child) > 0 && $prodstatic->delete($user) > 0) {
     			$db->commit();
    -			setEventMessage($langs->trans('RecordSaved'));
    +			setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     			header('Location: '.dol_buildpath('/variants/combinations.php?id='.$object->id, 2));
     			exit();
     		}
     
     		$db->rollback();
    -		setEventMessage($langs->trans('ProductCombinationAlreadyUsed'), 'errors');
    +		setEventMessages($langs->trans('ProductCombinationAlreadyUsed'), null, 'errors');
     		$action = '';
     	}
     } elseif ($action === 'edit') {
    @@ -284,14 +281,12 @@ if ($action === 'confirm_deletecombination') {
     				header('Location: '.dol_buildpath('/variants/combinations.php?id='.$prodstatic->id, 2));
     				exit();
     			} else {
    -				setEventMessage($langs->trans('ErrorCopyProductCombinations'), 'errors');
    +				setEventMessages($langs->trans('ErrorCopyProductCombinations'), null, 'errors');
     			}
     		}
    -
     	} else {
    -		setEventMessage($langs->trans('ErrorDestinationProductNotFound'), 'errors');
    +		setEventMessages($langs->trans('ErrorDestinationProductNotFound'), null, 'errors');
     	}
    -
     }
     
     
    @@ -319,6 +314,66 @@ if (! empty($id) || ! empty($ref))
     
         dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', '', '', '', 0, '', '', 1);
     
    +	print '<div class="fichecenter">';
    +
    +	print '<div class="underbanner clearboth"></div>';
    +	print '<table class="border tableforfield" width="100%">';
    +
    +    // TVA
    +    print '<tr><td class="titlefield">' . $langs->trans("DefaultTaxRate") . '</td><td>';
    +
    +    $positiverates='';
    +    if (price2num($object->tva_tx))       $positiverates.=($positiverates?'/':'').price2num($object->tva_tx);
    +    if (price2num($object->localtax1_type)) $positiverates.=($positiverates?'/':'').price2num($object->localtax1_tx);
    +    if (price2num($object->localtax2_type)) $positiverates.=($positiverates?'/':'').price2num($object->localtax2_tx);
    +    if (empty($positiverates)) $positiverates='0';
    +    echo vatrate($positiverates.($object->default_vat_code?' ('.$object->default_vat_code.')':''), '%', $object->tva_npr);
    +    /*
    +    if ($object->default_vat_code)
    +    {
    +        print vatrate($object->tva_tx, true) . ' ('.$object->default_vat_code.')';
    +    }
    +    else print vatrate($object->tva_tx, true, $object->tva_npr, true);*/
    +    print '</td></tr>';
    +
    +    // Price
    +    print '<tr><td>' . $langs->trans("SellingPrice") . '</td><td>';
    +    if ($object->price_base_type == 'TTC') {
    +        print price($object->price_ttc) . ' ' . $langs->trans($object->price_base_type);
    +    } else {
    +        print price($object->price) . ' ' . $langs->trans($object->price_base_type);
    +    }
    +    print '</td></tr>';
    +
    +    // Price minimum
    +    print '<tr><td>' . $langs->trans("MinPrice") . '</td><td>';
    +    if ($object->price_base_type == 'TTC') {
    +        print price($object->price_min_ttc) . ' ' . $langs->trans($object->price_base_type);
    +    } else {
    +        print price($object->price_min) . ' ' . $langs->trans($object->price_base_type);
    +    }
    +    print '</td></tr>';
    +
    +	// Weight
    +	print '<tr><td>'.$langs->trans("Weight").'</td><td>';
    +	if ($object->weight != '')
    +	{
    +		print $object->weight." ".measuring_units_string($object->weight_units,"weight");
    +	}
    +	else
    +	{
    +		print '&nbsp;';
    +	}
    +	print "</td></tr>\n";
    +
    +
    +
    +
    +	print "</table>\n";
    +
    +	print '</div>';
    +	print '<div style="clear:both"></div>';
    +
     	dol_fiche_end();
     
     
    @@ -327,7 +382,7 @@ if (! empty($id) || ! empty($ref))
     
     		if ($action == 'add') {
     			$title = $langs->trans('NewProductCombination');
    -			print dol_fiche_head();
    +			//print dol_fiche_head();
     			$features = $_SESSION['addvariant_'.$object->id];
     			//First, sanitize
     			print '<div id="parttoaddvariant">';
    @@ -348,7 +403,8 @@ if (! empty($id) || ! empty($ref))
     				}
     			}
     			print '</div>';
    -			print dol_fiche_end();
    +			print '<br><br>';
    +			//print dol_fiche_end();
     		} else {
     			$title = $langs->trans('EditProductCombination');
     		}
    @@ -449,7 +505,7 @@ if (! empty($id) || ! empty($ref))
                     if($valueid > 0) {
                         print '<input type="hidden" name="valueid" value="' . $valueid .'">'."\n";
                     }
    -                    
    +
     		print dol_fiche_head();
     
     		?>
    @@ -634,12 +690,14 @@ if (! empty($id) || ! empty($ref))
     		print '<div class="tabsAction">';
     
     		print '	<div class="inline-block divButAction">';
    -		if ($productCombinations) {
    -		    print '<a href="combinations.php?id='.$object->id.'&action=copy" class="butAction">'.$langs->trans('PropagateVariant').'</a>';
    -		}
     
     		print '<a href="combinations.php?id='.$object->id.'&action=add" class="butAction">'.$langs->trans('NewProductCombination').'</a>'; // NewVariant
     
    +		if ($productCombinations)
    +		{
    +			print '<a href="combinations.php?id='.$object->id.'&action=copy" class="butAction">'.$langs->trans('PropagateVariant').'</a>';
    +		}
    +
     		// Too much bugged page.
     		/*
     		print '<a href="generator.php?id='.$object->id.'" class="butAction">'.$langs->trans('ProductCombinationGenerator').'</a>';
    @@ -773,7 +831,6 @@ if (! empty($id) || ! empty($ref))
     	// not found
     }
     
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/variants/create.php b/htdocs/variants/create.php
    index f1a34a835b6..4f2d53bb75f 100644
    --- a/htdocs/variants/create.php
    +++ b/htdocs/variants/create.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2016	Marcos García	<marcosgdf@gmail.com>
    +/* Copyright (C) 2016   Marcos García   <marcosgdf@gmail.com>
    + * Copyright (C) 2018   Frédéric France <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -29,7 +30,7 @@ $backtopage = GETPOST('backtopage', 'alpha');
     
     if ($_POST) {
     	if (empty($ref) || empty($label)) {
    -		setEventMessage($langs->trans('ErrorFieldsRequired'), 'errors');
    +		setEventMessages($langs->trans('ErrorFieldsRequired'), null, 'errors');
     	} else {
     
     		$prodattr = new ProductAttribute($db);
    @@ -38,7 +39,7 @@ if ($_POST) {
     
     		$resid = $prodattr->create($user);
     		if ($resid > 0) {
    -			setEventMessage($langs->trans('RecordSaved'));
    +			setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     			if ($backtopage)
     			{
     				header('Location: '.$backtopage);
    @@ -49,7 +50,7 @@ if ($_POST) {
     			}
     			exit;
     		} else {
    -			setEventMessage($langs->trans('ErrorRecordAlreadyExists'), 'errors');
    +			setEventMessages($langs->trans('ErrorRecordAlreadyExists'), $prodattr->errors, 'errors');
     		}
     	}
     }
    @@ -65,7 +66,7 @@ $title = $langs->trans('NewProductAttribute');
     
     llxHeader('', $title);
     
    -print_fiche_titre($title);
    +print load_fiche_titre($title);
     
     dol_fiche_head();
     
    @@ -97,5 +98,6 @@ print '<div class="center"><input type="submit" class="button" value="'.$langs->
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/variants/create_val.php b/htdocs/variants/create_val.php
    index b290182a042..86372df9f59 100644
    --- a/htdocs/variants/create_val.php
    +++ b/htdocs/variants/create_val.php
    @@ -1,5 +1,6 @@
     <?php
     /* Copyright (C) 2016	Marcos García	<marcosgdf@gmail.com>
    + * Copyright (C) 2018   Frédéric France <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -58,7 +59,7 @@ if ($cancel)
     if ($action == 'add')
     {
     	if (empty($ref) || empty($value)) {
    -		setEventMessage($langs->trans('ErrorFieldsRequired'), 'errors');
    +		setEventMessages($langs->trans('ErrorFieldsRequired'), null, 'errors');
     	} else {
     
     		$objectval->fk_product_attribute = $object->id;
    @@ -66,11 +67,11 @@ if ($action == 'add')
     		$objectval->value = $value;
     
     		if ($objectval->create($user) > 0) {
    -			setEventMessage($langs->trans('RecordSaved'));
    +			setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     			header('Location: '.DOL_URL_ROOT.'/variants/card.php?id='.$object->id);
     			exit();
     		} else {
    -			setEventMessage($langs->trans('ErrorCreatingProductAttributeValue'), 'errors');
    +			setEventMessages($langs->trans('ErrorCreatingProductAttributeValue'), $objectval->errors, 'errors');
     		}
     	}
     }
    @@ -117,7 +118,7 @@ print '<input type="hidden" name="action" value="add">';
     print '<input type="hidden" name="id" value="'.$object->id.'">';
     print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
     
    -print_fiche_titre($langs->trans('NewProductAttributeValue'));
    +print load_fiche_titre($langs->trans('NewProductAttributeValue'));
     
     dol_fiche_head();
     
    @@ -144,5 +145,6 @@ print '</div>';
     
     print '</form>';
     
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/variants/generator.php b/htdocs/variants/generator.php
    index 4daa2d8f45a..420c90147ea 100644
    --- a/htdocs/variants/generator.php
    +++ b/htdocs/variants/generator.php
    @@ -1,6 +1,6 @@
     <?php
    -
    -/* Copyright (C) 2016	Marcos García	<marcosgdf@gmail.com>
    +/* Copyright (C) 2016   Marcos García   <marcosgdf@gmail.com>
    + * Copyright (C) 2018   Frédéric France <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,8 +24,7 @@ require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductAttributeValue.class.php'
     require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination.class.php';
     require_once DOL_DOCUMENT_ROOT.'/variants/class/ProductCombination2ValuePair.class.php';
     
    -$langs->load("products");
    -$langs->load('other');
    +$langs->loadLangs(array("products", "other"));
     
     $id = GETPOST('id', 'int');
     $ref = GETPOST('ref');
    @@ -103,7 +102,7 @@ if ($_POST) {
     
     			$res = 1;
     
    -			foreach (cartesianArray($adapted_values) as $currcomb) 
    +			foreach (cartesianArray($adapted_values) as $currcomb)
     			{
     				$res = $combination->createProductCombination($product, $currcomb, $sanitized_values, $price_var_percent);
     				if ($res < 0) {
    @@ -115,18 +114,17 @@ if ($_POST) {
     
     			if ($res > 0) {
     				$db->commit();
    -				setEventMessage($langs->trans('RecordSaved'));
    +				setEventMessages($langs->trans('RecordSaved'), null, 'mesgs');
     				header('Location: '.dol_buildpath('/variants/combinations.php?id='.$id, 2));
     				exit;
     			}
     		} else {
    -			setEventMessage($langs->trans('ErrorDeletingGeneratedProducts'), 'errors');
    +			setEventMessages($langs->trans('ErrorDeletingGeneratedProducts'), null, 'errors');
     		}
     
     		$db->rollback();
    -
     	} else {
    -		setEventMessage($langs->trans('ErrorFieldsRequired'), 'errors');
    +		setEventMessages($langs->trans('ErrorFieldsRequired'), null, 'errors');
     	}
     }
     
    @@ -146,21 +144,21 @@ if (! empty($id) || ! empty($ref)) {
     	{
     		$showbarcode=empty($conf->barcode->enabled)?0:1;
     		if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) $showbarcode=0;
    -		 
    +
     		$head=product_prepare_head($object);
     		$titre=$langs->trans("CardProduct".$object->type);
     		$picto=($object->type== Product::TYPE_SERVICE?'service':'product');
     		dol_fiche_head($head, 'combinations', $titre, 0, $picto);
    -		 
    +
     		$linkback = '<a href="'.DOL_URL_ROOT.'/product/list.php?type='.$object->type.'">'.$langs->trans("BackToList").'</a>';
     		$object->next_prev_filter=" fk_product_type = ".$object->type;
    -		 
    +
     		dol_banner_tab($object, 'ref', $linkback, ($user->societe_id?0:1), 'ref', '', '', '', 0, '', '', 1);
    -		
    +
     		dol_fiche_end();
     	}
     
    -	print_fiche_titre($langs->trans('ProductCombinationGenerator'));
    +	print load_fiche_titre($langs->trans('ProductCombinationGenerator'));
     
     	$dictionary_attr = array();
     
    @@ -374,5 +372,8 @@ if (! empty($id) || ! empty($ref)) {
     
     	<?php
     
    -	llxFooter();
    -}
    \ No newline at end of file
    +  // End of page
    +  llxFooter();
    +}
    +
    +$db->close();
    diff --git a/htdocs/variants/list.php b/htdocs/variants/list.php
    index af859175946..de6ac5c8959 100644
    --- a/htdocs/variants/list.php
    +++ b/htdocs/variants/list.php
    @@ -50,7 +50,6 @@ if ($action == 'up') {
     
     $langs->load('products');
     
    -$var = false;
     $title = $langs->trans($langs->trans('ProductAttributes'));
     
     $variants = $object->fetchAll();
    @@ -122,7 +121,7 @@ $forcereloadpage=empty($conf->global->MAIN_FORCE_RELOAD_PAGE)?0:1;
     			<th class="liste_titre" colspan="2"></th>
     		</tr>
     		<?php foreach ($variants as $key => $attribute): ?>
    -		<tr id="row-<?php echo $attribute->id ?>" <?php echo $bcdd[$var] ?>>
    +		<tr id="row-<?php echo $attribute->id ?>" class="drag drop oddeven">
     			<td><a href="card.php?id=<?php echo $attribute->id ?>"><?php echo dol_htmlentities($attribute->ref) ?></a></td>
     			<td><a href="card.php?id=<?php echo $attribute->id ?>"><?php echo dol_htmlentities($attribute->label) ?></a></td>
     			<td align="right"><?php echo $attribute->countChildValues() ?></td>
    @@ -131,7 +130,7 @@ $forcereloadpage=empty($conf->global->MAIN_FORCE_RELOAD_PAGE)?0:1;
     				<a href="card.php?id=<?php echo $attribute->id ?>&action=edit"><?php echo img_edit() ?></a>
     				<a href="card.php?id=<?php echo $attribute->id ?>&action=delete"><?php echo img_delete() ?></a>
     			</td>
    -			<td align="center" class="linecolmove tdlineupdown">
    +			<td class="center linecolmove tdlineupdown">
     				<?php if ($key > 0): ?>
     				<a class="lineupdown"
     				   href="<?php echo $_SERVER['PHP_SELF'] ?>?action=up&amp;rowid=<?php echo $attribute->id ?>"><?php echo img_up('default', 0, 'imgupforline'); ?></a>
    @@ -143,7 +142,6 @@ $forcereloadpage=empty($conf->global->MAIN_FORCE_RELOAD_PAGE)?0:1;
     			</td>
     		</tr>
     		<?php
    -			$var = !$var;
     			endforeach
     		?>
     
    @@ -151,4 +149,6 @@ $forcereloadpage=empty($conf->global->MAIN_FORCE_RELOAD_PAGE)?0:1;
     
     <?php
     
    -llxFooter();
    \ No newline at end of file
    +// End of page
    +llxFooter();
    +$db->close();
    \ No newline at end of file
    diff --git a/htdocs/viewimage.php b/htdocs/viewimage.php
    index ae2a538ca04..200230e5ca7 100644
    --- a/htdocs/viewimage.php
    +++ b/htdocs/viewimage.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
      * Copyright (C) 2005-2016 Laurent Destailleur  <eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2016 Regis Houssin        <regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2016 Regis Houssin        <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -37,7 +37,8 @@ if (! defined('NOREQUIREHTML'))		define('NOREQUIREHTML','1');
     if (! defined('NOREQUIREAJAX'))		define('NOREQUIREAJAX','1');
     
     // Some value of modulepart can be used to get resources that are public so no login are required.
    -if ((isset($_GET["modulepart"]) && ($_GET["modulepart"] == 'mycompany' || $_GET["modulepart"] == 'companylogo')))
    +// Note that only directory logo is free to access without login.
    +if (isset($_GET["modulepart"]) && $_GET["modulepart"] == 'mycompany' && preg_match('/^\/?logos\//', $_GET['file']))
     {
     	if (! defined("NOLOGIN"))		define("NOLOGIN",1);
     	if (! defined("NOCSRFCHECK"))	define("NOCSRFCHECK",1);	// We accept to go on this page from external web site.
    @@ -56,28 +57,32 @@ if ((isset($_GET["modulepart"]) && $_GET["modulepart"] == 'medias'))
     	if (! defined("NOLOGIN"))		define("NOLOGIN",1);
     	if (! defined("NOCSRFCHECK"))	define("NOCSRFCHECK",1);	// We accept to go on this page from external web site.
     	if (! defined("NOIPCHECK"))		define("NOIPCHECK",1);		// Do not check IP defined into conf $dolibarr_main_restrict_ip
    -	// For multicompany
    -	$entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
    -	if (is_numeric($entity)) define("DOLENTITY", $entity);
     }
     
    +// For multicompany
    +$entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
    +if (is_numeric($entity)) define("DOLENTITY", $entity);
    +
     /**
      * Header empty
      *
      * @return	void
      */
    -function llxHeader() { }
    +function llxHeader()
    +{
    +}
     /**
      * Footer empty
      *
      * @return	void
      */
    -function llxFooter() { }
    +function llxFooter()
    +{
    +}
     
     require 'main.inc.php';	// Load $user and permissions
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     
    -
     $action=GETPOST('action','alpha');
     $original_file=GETPOST('file','alpha');		// Do not use urldecode here ($_GET are already decoded by PHP).
     $hashp=GETPOST('hashp','aZ09');
    @@ -91,6 +96,7 @@ if (empty($original_file) && empty($hashp) && $modulepart != 'barcode') accessfo
     if ($modulepart == 'fckeditor') $modulepart='medias';   // For backward compatibility
     
     
    +
     /*
      * Actions
      */
    diff --git a/htdocs/webservices/admin/index.php b/htdocs/webservices/admin/index.php
    index e0e549cf2a7..3cd9aacdac8 100644
    --- a/htdocs/webservices/admin/index.php
    +++ b/htdocs/webservices/admin/index.php
    @@ -2,7 +2,7 @@
     /* Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2010	Laurent Destailleur		<eldy@users.sourceforge.org>
      * Copyright (C) 2011		Juanjo Menent			<jmenent@2byte.es>
    - * Copyright (C) 2012		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -156,6 +156,6 @@ if (! empty($conf->use_javascript_ajax))
     	print '</script>';
     }
     
    -
    +// End of page
     llxFooter();
     $db->close();
    diff --git a/htdocs/webservices/index.php b/htdocs/webservices/index.php
    index adbdb7a25f7..e0a1ba998c8 100644
    --- a/htdocs/webservices/index.php
    +++ b/htdocs/webservices/index.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2006-2011	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2011		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2011		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/htdocs/webservices/server_actioncomm.php b/htdocs/webservices/server_actioncomm.php
    index a00e014d88a..a9edcb0557a 100644
    --- a/htdocs/webservices/server_actioncomm.php
    +++ b/htdocs/webservices/server_actioncomm.php
    @@ -25,12 +25,12 @@
     
     if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
     
    -require_once("../master.inc.php");
    -require_once(NUSOAP_PATH.'/nusoap.php');		// Include SOAP
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/ws.lib.php");
    +require "../master.inc.php";
    +require_once NUSOAP_PATH.'/nusoap.php';		// Include SOAP
    +require_once DOL_DOCUMENT_ROOT."/core/lib/ws.lib.php";
     
    -require_once(DOL_DOCUMENT_ROOT."/comm/action/class/actioncomm.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/comm/action/class/cactioncomm.class.php");
    +require_once DOL_DOCUMENT_ROOT."/comm/action/class/actioncomm.class.php";
    +require_once DOL_DOCUMENT_ROOT."/comm/action/class/cactioncomm.class.php";
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     
     
    @@ -378,7 +378,6 @@ function getListActionCommType($authentication)
     				 $objectresp = array(
     			    	'result'=>array('result_code'=>'OK', 'result_label'=>''),
     			        'actioncommtypes'=>$resultarray);
    -
     			}
     			else
     			{
    diff --git a/htdocs/webservices/server_category.php b/htdocs/webservices/server_category.php
    index 9ef07dda952..a941c2aceff 100644
    --- a/htdocs/webservices/server_category.php
    +++ b/htdocs/webservices/server_category.php
    @@ -23,10 +23,10 @@
     
     if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
     
    -require_once("../master.inc.php");
    -require_once(NUSOAP_PATH.'/nusoap.php');		// Include SOAP
    +require "../master.inc.php";
    +require_once NUSOAP_PATH.'/nusoap.php';		// Include SOAP
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
    -require_once(DOL_DOCUMENT_ROOT."/categories/class/categorie.class.php");
    +require_once DOL_DOCUMENT_ROOT."/categories/class/categorie.class.php";
     
     
     dol_syslog("Call Dolibarr webservices interfaces");
    @@ -92,7 +92,7 @@ $server->wsdl->addComplexType(
     /*
      * Les catégories filles, sous tableau dez la catégorie
      */
    - $server->wsdl->addComplexType(
    +$server->wsdl->addComplexType(
         'FillesArray',
         'complexType',
         'array',
    @@ -108,38 +108,38 @@ $server->wsdl->addComplexType(
      /*
       * Image of product
      */
    - $server->wsdl->addComplexType(
    - 		'PhotosArray',
    - 		'complexType',
    - 		'array',
    - 		'sequence',
    - 		'',
    - 		array(
    - 				'image' => array(
    - 						'name' => 'image',
    - 						'type' => 'tns:image',
    - 						'minOccurs' => '0',
    - 						'maxOccurs' => 'unbounded'
    - 				)
    - 		)
    - );
    +$server->wsdl->addComplexType(
    +		'PhotosArray',
    +		'complexType',
    +		'array',
    +		'sequence',
    +		'',
    +		array(
    +				'image' => array(
    +						'name' => 'image',
    +						'type' => 'tns:image',
    +						'minOccurs' => '0',
    +						'maxOccurs' => 'unbounded'
    +				)
    +		)
    +);
     
      /*
       * An image
      */
    - $server->wsdl->addComplexType(
    - 		'image',
    - 		'complexType',
    - 		'struct',
    - 		'all',
    - 		'',
    - 		array(
    - 				'photo' => array('name'=>'photo','type'=>'xsd:string'),
    - 				'photo_vignette' => array('name'=>'photo_vignette','type'=>'xsd:string'),
    - 				'imgWidth' => array('name'=>'imgWidth','type'=>'xsd:string'),
    - 				'imgHeight' => array('name'=>'imgHeight','type'=>'xsd:string')
    - 		)
    - );
    +$server->wsdl->addComplexType(
    +		'image',
    +		'complexType',
    +		'struct',
    +		'all',
    +		'',
    +		array(
    +				'photo' => array('name'=>'photo','type'=>'xsd:string'),
    +				'photo_vignette' => array('name'=>'photo_vignette','type'=>'xsd:string'),
    +				'imgWidth' => array('name'=>'imgWidth','type'=>'xsd:string'),
    +				'imgHeight' => array('name'=>'imgHeight','type'=>'xsd:string')
    +		)
    +);
     
     /*
      * Retour
    @@ -250,9 +250,7 @@ function getCategory($authentication,$id)
     								'dir' => $pdir,
     								'photos' => $fille->liste_photos($dir,$nbmax=10)
     							);
    -
     						}
    -
     					}
     
     			    // Create
    diff --git a/htdocs/webservices/server_contact.php b/htdocs/webservices/server_contact.php
    index 6791864ba8b..9ffde3cdf80 100644
    --- a/htdocs/webservices/server_contact.php
    +++ b/htdocs/webservices/server_contact.php
    @@ -23,11 +23,11 @@
     
     if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
     
    -require_once("../master.inc.php");
    -require_once(NUSOAP_PATH.'/nusoap.php');		// Include SOAP
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/ws.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php");
    -require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
    +require "../master.inc.php";
    +require_once NUSOAP_PATH.'/nusoap.php';		// Include SOAP
    +require_once DOL_DOCUMENT_ROOT."/core/lib/ws.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/contact/class/contact.class.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/extrafields.class.php";
     
     
     dol_syslog("Call Contact webservices interfaces");
    diff --git a/htdocs/webservices/server_invoice.php b/htdocs/webservices/server_invoice.php
    index c93605ab2ea..03931701659 100644
    --- a/htdocs/webservices/server_invoice.php
    +++ b/htdocs/webservices/server_invoice.php
    @@ -23,7 +23,7 @@
     
     if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
     
    -require_once '../master.inc.php';
    +require '../master.inc.php';
     require_once NUSOAP_PATH.'/nusoap.php';		// Include SOAP
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
    @@ -635,7 +635,6 @@ function createInvoice($authentication,$invoice)
                 $errorlabel=$new_invoice->error;
                 dol_syslog("Function: createInvoice error while creating".$errorlabel);
             }
    -
         }
     
         if ($error)
    @@ -707,7 +706,6 @@ function createInvoiceFromOrder($authentication,$id_order='', $ref_order='', $re
     						$error++;
     						dol_syslog("Webservice server_invoice:: invoice creation from order failed", LOG_ERR);
     					}
    -
     				}
     			}
     			else
    diff --git a/htdocs/webservices/server_order.php b/htdocs/webservices/server_order.php
    index eb42dd74ce4..c74b5660873 100644
    --- a/htdocs/webservices/server_order.php
    +++ b/htdocs/webservices/server_order.php
    @@ -1,7 +1,7 @@
     <?php
     /* Copyright (C) 2006-2016	Laurent Destailleur	<eldy@users.sourceforge.net>
      * Copyright (C) 2012		JF FERRY			<jfefe@aternatik.fr>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
     *
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
    @@ -22,14 +22,13 @@
      *       \brief      File that is entry point to call Dolibarr WebServices
      */
     
    -if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
    +if (! defined("NOCSRFCHECK")) define("NOCSRFCHECK",'1');
     
    -require_once '../master.inc.php';
    +require '../master.inc.php';
     require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
    -
    -require_once(DOL_DOCUMENT_ROOT."/commande/class/commande.class.php");
    +require_once DOL_DOCUMENT_ROOT."/commande/class/commande.class.php";
     
     
     dol_syslog("Call Dolibarr webservices interfaces");
    @@ -660,7 +659,7 @@ function createOrder($authentication,$order)
     {
     	global $db,$conf,$langs;
     
    -	require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
    +	include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
     	$now=dol_now();
     
    @@ -750,7 +749,6 @@ function createOrder($authentication,$order)
     		{
     			dol_syslog("Webservice server_order:: order creation failed", LOG_ERR);
     			$error++;
    -
     		}
     
     		if ($order['status'] == 1)   // We want order to have status validated
    @@ -778,7 +776,6 @@ function createOrder($authentication,$order)
     			$errorcode='KO';
     			$errorlabel=$newobject->error;
     		}
    -
     	}
     
     	if ($error)
    @@ -832,7 +829,6 @@ function validOrder($authentication,$id='',$id_warehouse=0)
     					// Define output language
     					$outputlangs = $langs;
     					$order->generateDocument($order->modelpdf, $outputlangs);
    -
     				}
     				else
     				{
    @@ -849,7 +845,6 @@ function validOrder($authentication,$id='',$id_warehouse=0)
     				$errorcode='KO';
     				$errorlabel=$newobject->error;
     			}
    -
     		}
     		else
     		{
    @@ -858,7 +853,6 @@ function validOrder($authentication,$id='',$id_warehouse=0)
     			$errorcode='KO';
     			$errorlabel=$newobject->error;
     		}
    -
     	}
     
     	if ($error)
    @@ -927,7 +921,6 @@ function updateOrder($authentication,$order)
     						// Define output language
     						$outputlangs = $langs;
     						$object->generateDocument($order->modelpdf, $outputlangs);
    -
     					}
     				}
     				if ($order['status'] == 0)  $result=$object->set_reopen($fuser);
    diff --git a/htdocs/webservices/server_other.php b/htdocs/webservices/server_other.php
    index 8ac519ae87e..895e5d55af4 100644
    --- a/htdocs/webservices/server_other.php
    +++ b/htdocs/webservices/server_other.php
    @@ -22,7 +22,7 @@
     
     if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
     
    -require_once '../master.inc.php';
    +require '../master.inc.php';
     require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
    diff --git a/htdocs/webservices/server_payment.php b/htdocs/webservices/server_payment.php
    index d6cd261a686..9356b6a558a 100644
    --- a/htdocs/webservices/server_payment.php
    +++ b/htdocs/webservices/server_payment.php
    @@ -27,7 +27,7 @@
     // This is to make Dolibarr working with Plesk
     set_include_path($_SERVER['DOCUMENT_ROOT'].'/htdocs');
     
    -require_once '../master.inc.php';
    +require '../master.inc.php';
     require_once NUSOAP_PATH.'/nusoap.php';                // Include SOAP
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
    diff --git a/htdocs/webservices/server_productorservice.php b/htdocs/webservices/server_productorservice.php
    index 6094d2e0798..1e301350063 100644
    --- a/htdocs/webservices/server_productorservice.php
    +++ b/htdocs/webservices/server_productorservice.php
    @@ -25,14 +25,14 @@
     
     if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
     
    -require_once '../master.inc.php';
    +require '../master.inc.php';
     require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
     
     require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
    -require_once(DOL_DOCUMENT_ROOT."/categories/class/categorie.class.php");
    +require_once DOL_DOCUMENT_ROOT."/categories/class/categorie.class.php";
     require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
     
     
    @@ -570,7 +570,7 @@ function createProductOrService($authentication,$product)
             	// Update stock if stock count is provided and differs from database after creation or update
     			if (isset($product['stock_real']) && $product['stock_real'] != '' && ! empty($conf->global->stock->enabled))
     			{
    -				require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
    +				include_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
     
     				$savstockreal=$newobject->stock_reel;
     				$newobject->load_stock('novirtual,nobatch');		// This overwrite ->stock_reel, surely 0 because we have just created product
    @@ -617,7 +617,6 @@ function createProductOrService($authentication,$product)
                 $errorcode='KO';
                 $errorlabel=$newobject->error;
             }
    -
         }
     
         if ($error)
    @@ -739,7 +738,7 @@ function updateProductOrService($authentication,$product)
             	// Update stock if stock count is provided and differs from database after creation or update
     			if (isset($product['stock_real']) && $product['stock_real'] != '' && ! empty($conf->global->stock->enabled))
     			{
    -				require_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
    +				include_once DOL_DOCUMENT_ROOT.'/product/stock/class/entrepot.class.php';
     
     				$savstockreal=$newobject->stock_reel;
     				$newobject->load_stock('novirtual,nobatch');		// This overwrite ->stock_reel
    @@ -806,7 +805,6 @@ function updateProductOrService($authentication,$product)
                 $errorcode='KO';
                 $errorlabel=$newobject->error;
             }
    -
         }
     
         if ($error)
    @@ -1105,7 +1103,6 @@ function getProductsForCategory($authentication,$id,$lang='')
     
     							$iProduct++;
     						}
    -
     					}
     
     					// Retour
    @@ -1113,14 +1110,12 @@ function getProductsForCategory($authentication,$id,$lang='')
     					'result'=>array('result_code'=>'OK', 'result_label'=>''),
     					'products'=> $products
     					);
    -
     				}
     				else
     				{
     					$errorcode='NORECORDS_FOR_ASSOCIATION'; $errorlabel='No products associated'.$sql;
     					$objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel));
     					dol_syslog("getProductsForCategory:: ".$c->error, LOG_DEBUG);
    -
     				}
     			}
     			else
    diff --git a/htdocs/webservices/server_project.php b/htdocs/webservices/server_project.php
    index bc26de37601..822081011aa 100644
    --- a/htdocs/webservices/server_project.php
    +++ b/htdocs/webservices/server_project.php
    @@ -23,7 +23,7 @@
     
     if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
     
    -require_once '../master.inc.php';
    +require '../master.inc.php';
     require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
    diff --git a/htdocs/webservices/server_supplier_invoice.php b/htdocs/webservices/server_supplier_invoice.php
    index fcfd73270aa..50e5498dbe1 100644
    --- a/htdocs/webservices/server_supplier_invoice.php
    +++ b/htdocs/webservices/server_supplier_invoice.php
    @@ -22,11 +22,10 @@
     
     if (! defined("NOCSRFCHECK"))    define("NOCSRFCHECK",'1');
     
    -require_once '../master.inc.php';
    +require '../master.inc.php';
     require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
    -
     require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
     
     
    diff --git a/htdocs/webservices/server_thirdparty.php b/htdocs/webservices/server_thirdparty.php
    index c2236368d18..7f0b590ee9a 100644
    --- a/htdocs/webservices/server_thirdparty.php
    +++ b/htdocs/webservices/server_thirdparty.php
    @@ -816,7 +816,6 @@ function deleteThirdParty($authentication,$id='',$ref='',$ref_ext='')
     			{
     				$error++;
     				$errorcode='NOT_FOUND'; $errorlabel='Object not found for id='.$id.' nor ref='.$ref.' nor ref_ext='.$ref_ext;
    -
     			}
     		}
     		else
    diff --git a/htdocs/webservices/server_user.php b/htdocs/webservices/server_user.php
    index 60bf95bd20c..81702c55456 100644
    --- a/htdocs/webservices/server_user.php
    +++ b/htdocs/webservices/server_user.php
    @@ -681,7 +681,8 @@ function createUserFromThirdparty($authentication,$thirdpartywithuser)
      * @param	array		$shortuser			Array of login/password info
      * @return	mixed
      */
    -function setUserPassword($authentication,$shortuser) {
    +function setUserPassword($authentication,$shortuser)
    +{
     
     	global $db,$conf,$langs;
     
    @@ -732,7 +733,6 @@ function setUserPassword($authentication,$shortuser) {
     				$error++;
     				$errorcode='NOT_FOUND'; $errorlabel='User not found';
     			}
    -
     		}
     		else
     		{
    diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php
    index c3d18b889e7..3f51f669829 100644
    --- a/htdocs/website/class/website.class.php
    +++ b/htdocs/website/class/website.class.php
    @@ -1,9 +1,9 @@
     <?php
    -/* Copyright (C) 2007-2012  Laurent Destailleur <eldy@users.sourceforge.net>
    +/* Copyright (C) 2007-2018  Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2014       Juanjo Menent       <jmenent@2byte.es>
      * Copyright (C) 2015       Florian Henry       <florian.henry@open-concept.pro>
      * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) ---Put here your own copyright and developer email---
    + * Copyright (C) 2018       Frédéric France         <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -39,47 +39,57 @@ class Website extends CommonObject
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'website';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'website';
    +
     	/**
     	 * @var array  Does website support multicompany module ? 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
     	 */
     	public $ismultientitymanaged = 1;
    +
     	/**
     	 * @var string String with name of icon for website. Must be the part after the 'object_' into object_myobject.png
     	 */
     	public $picto = 'globe';
     
     	/**
    -	 * @var int
    +	 * @var int Entity
     	 */
     	public $entity;
    +
     	/**
    -	 * @var string
    +	 * @var string Ref
     	 */
     	public $ref;
    +
     	/**
    -	 * @var string
    +	 * @var string description
     	 */
     	public $description;
    +
     	/**
    -	 * @var int
    +	 * @var int Status
     	 */
     	public $status;
    +
     	/**
     	 * @var mixed
     	 */
     	public $date_creation;
    +
     	/**
     	 * @var mixed
     	 */
     	public $tms = '';
    +
     	/**
     	 * @var integer
     	 */
     	public $fk_default_home;
    +
     	/**
     	 * @var string
     	 */
    @@ -127,11 +137,17 @@ class Website extends CommonObject
     		if (isset($this->status)) {
     			 $this->status = trim($this->status);
     		}
    -		if (empty($this->date_creation)) $this->date_creation = $now;
    -		if (empty($this->date_modification)) $this->date_modification = $now;
    +		if (empty($this->date_creation)) {
    +            $this->date_creation = $now;
    +        }
    +		if (empty($this->date_modification)) {
    +            $this->date_modification = $now;
    +        }
     
     		// Check parameters
    -		if (empty($this->entity)) { $this->entity = $conf->entity; }
    +		if (empty($this->entity)) {
    +            $this->entity = $conf->entity;
    +        }
     
     		// Insert request
     		$sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '(';
    @@ -141,17 +157,17 @@ class Website extends CommonObject
     		$sql.= 'status,';
     		$sql.= 'fk_default_home,';
     		$sql.= 'virtualhost,';
    -		$sql.= 'fk_user_create,';
    +		$sql.= 'fk_user_creat,';
     		$sql.= 'date_creation,';
     		$sql.= 'tms';
     		$sql .= ') VALUES (';
     		$sql .= ' '.((empty($this->entity) && $this->entity != '0')?'NULL':$this->entity).',';
     		$sql .= ' '.(! isset($this->ref)?'NULL':"'".$this->db->escape($this->ref)."'").',';
     		$sql .= ' '.(! isset($this->description)?'NULL':"'".$this->db->escape($this->description)."'").',';
    -		$sql .= ' '.(! isset($this->status)?'NULL':$this->status).',';
    +		$sql .= ' '.(! isset($this->status)?'1':$this->status).',';
     		$sql .= ' '.(! isset($this->fk_default_home)?'NULL':$this->fk_default_home).',';
     		$sql .= ' '.(! isset($this->virtualhost)?'NULL':"'".$this->db->escape($this->virtualhost)."'").",";
    -		$sql .= ' '.(! isset($this->fk_user_create)?$user->id:$this->fk_user_create).',';
    +		$sql .= ' '.(! isset($this->fk_user_creat)?$user->id:$this->fk_user_creat).',';
     		$sql .= ' '.(! isset($this->date_creation) || dol_strlen($this->date_creation)==0?'NULL':"'".$this->db->idate($this->date_creation)."'").",";
     		$sql .= ' '.(! isset($this->date_modification) || dol_strlen($this->date_modification)==0?'NULL':"'".$this->db->idate($this->date_creation)."'");
     		$sql .= ')';
    @@ -168,16 +184,16 @@ class Website extends CommonObject
     		if (!$error) {
     			$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
     
    -			if (!$notrigger) {
    -				// Uncomment this and change MYOBJECT to your own tag if you
    -				// want this action to call a trigger.
    +            // Uncomment this and change MYOBJECT to your own tag if you
    +            // want this action to call a trigger.
    +            // if (!$notrigger) {
     
    -				//// Call triggers
    -				//$result=$this->call_trigger('MYOBJECT_CREATE',$user);
    -				//if ($result < 0) $error++;
    -				//// End call triggers
    -			}
    -		}
    +            //     // Call triggers
    +            //     $result = $this->call_trigger('MYOBJECT_CREATE',$user);
    +            //     if ($result < 0) $error++;
    +            //     // End call triggers
    +            // }
    +        }
     
     		// Commit or rollback
     		if ($error) {
    @@ -210,7 +226,7 @@ class Website extends CommonObject
     		$sql .= " t.status,";
     		$sql .= " t.fk_default_home,";
     		$sql .= " t.virtualhost,";
    -		$sql .= " t.fk_user_create,";
    +		$sql .= " t.fk_user_creat,";
     		$sql .= " t.fk_user_modif,";
     		$sql .= " t.date_creation,";
     		$sql .= " t.tms as date_modification";
    @@ -236,7 +252,7 @@ class Website extends CommonObject
     				$this->status = $obj->status;
     				$this->fk_default_home = $obj->fk_default_home;
     				$this->virtualhost = $obj->virtualhost;
    -				$this->fk_user_create = $obj->fk_user_create;
    +				$this->fk_user_creat = $obj->fk_user_creat;
     				$this->fk_user_modif = $obj->fk_user_modif;
     				$this->date_creation = $this->db->jdate($obj->date_creation);
     				$this->date_modification = $this->db->jdate($obj->date_modification);
    @@ -300,7 +316,7 @@ class Website extends CommonObject
     		$sql .= " t.status,";
     		$sql .= " t.fk_default_home,";
     		$sql .= " t.virtualhost,";
    -		$sql .= " t.fk_user_create,";
    +		$sql .= " t.fk_user_creat,";
     		$sql .= " t.fk_user_modif,";
     		$sql .= " t.date_creation,";
     		$sql .= " t.tms as date_modification";
    @@ -340,7 +356,7 @@ class Website extends CommonObject
     				$line->status = $obj->status;
     				$line->fk_default_home = $obj->fk_default_home;
     				$line->virtualhost = $obj->virtualhost;
    -				$this->fk_user_create = $obj->fk_user_create;
    +				$this->fk_user_creat = $obj->fk_user_creat;
     				$this->fk_user_modif = $obj->fk_user_modif;
     				$line->date_creation = $this->db->jdate($obj->date_creation);
     				$line->date_modification = $this->db->jdate($obj->date_modification);
    @@ -474,6 +490,14 @@ class Website extends CommonObject
     			}
     		}
     
    +		if (! $error && ! empty($this->ref))
    +		{
    +			global $dolibarr_main_data_root;
    +			$pathofwebsite=$dolibarr_main_data_root.'/website/'.$this->ref;
    +
    +			dol_delete_dir_recursive($pathofwebsite);
    +		}
    +
     		// Commit or rollback
     		if ($error) {
     			$this->db->rollback();
    @@ -493,9 +517,10 @@ class Website extends CommonObject
     	 * @param	User	$user		User making the clone
     	 * @param 	int 	$fromid 	Id of object to clone
     	 * @param	string	$newref		New ref
    +	 * @param	string	$newlang	New language
     	 * @return 	mixed 				New object created, <0 if KO
     	 */
    -	public function createFromClone($user, $fromid, $newref)
    +	public function createFromClone($user, $fromid, $newref, $newlang='')
     	{
             global $hookmanager, $langs;
     		global $dolibarr_main_data_root;
    @@ -572,7 +597,7 @@ class Website extends CommonObject
     				dol_delete_file($filetplold);
     
     				// Create new file
    -				$objectpagenew = $objectpageold->createFromClone($user, $pageid, $objectpageold->pageurl, '', 0, $object->id);
    +				$objectpagenew = $objectpageold->createFromClone($user, $pageid, $objectpageold->pageurl, '', 0, $object->id, 1);
     				//print $pageid.' = '.$objectpageold->pageurl.' -> '.$objectpagenew->id.' = '.$objectpagenew->pageurl.'<br>';
     				if (is_object($objectpagenew) && $objectpagenew->pageurl)
     				{
    @@ -613,10 +638,11 @@ class Website extends CommonObject
     		    if (! $error)
     		    {
     		    	$filetpl=$pathofwebsitenew.'/page'.$newidforhome.'.tpl.php';
    +		    	$filewrapper=$pathofwebsitenew.'/wrapper.php';
     
     		    	// Generate the index.php page to be the home page
     		    	//-------------------------------------------------
    -		    	$result = dolSaveIndexPage($pathofwebsitenew, $fileindex, $filetpl);
    +		    	$result = dolSaveIndexPage($pathofwebsitenew, $fileindex, $filetpl, $filewrapper);
     		    }
     		}
     
    @@ -684,6 +710,7 @@ class Website extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un status donne
     	 *
    @@ -693,35 +720,30 @@ class Website extends CommonObject
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
    -		if ($mode == 0)
    -		{
    -			$prefix='';
    -			if ($status == 1) return $langs->trans('Enabled');
    -			if ($status == 0) return $langs->trans('Disabled');
    -		}
    -		if ($mode == 1)
    +		if ($mode == 0 || $mode == 1)
     		{
     			if ($status == 1) return $langs->trans('Enabled');
     			if ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    @@ -747,12 +769,10 @@ class Website extends CommonObject
     		$this->status = '';
     		$this->fk_default_home = null;
     		$this->virtualhost = 'http://myvirtualhost';
    -		$this->fk_user_create = $user->id;
    +		$this->fk_user_creat = $user->id;
     		$this->fk_user_modif = $user->id;
     		$this->date_creation = dol_now();
     		$this->tms = dol_now();
    -
    -
     	}
     
     
    @@ -763,7 +783,7 @@ class Website extends CommonObject
     	 */
     	function exportWebSite()
     	{
    -		global $conf;
    +		global $conf, $mysoc;
     
     		$website = $this;
     
    @@ -781,25 +801,33 @@ class Website extends CommonObject
     			return '';
     		}
     
    -		$srcdir = $conf->website->dir_output.'/'.$website->ref;
    -		$destdir = $conf->website->dir_temp.'/'.$website->ref.'/containers';
    +		$destdir = $conf->website->dir_temp.'/'.$website->ref;
    +
    +		dol_syslog("Clear temp dir ".$destdir);
    +		$count=0; $countreallydeleted=0;
    +		$counttodelete = dol_delete_dir_recursive($destdir, $count, 1, 0, $countreallydeleted);
    +		if ($counttodelete != $countreallydeleted)
    +		{
    +			setEventMessages("Failed to clean temp directory ".$destdir, null, 'errors');
    +			return '';
    +		}
     
     		$arrayreplacement=array();
     
    -		dol_syslog("Clear temp dir ".$destdir);
    -		dol_delete_dir($destdir, 1);
    +		$srcdir = $conf->website->dir_output.'/'.$website->ref;
    +		$destdir = $conf->website->dir_temp.'/'.$website->ref.'/containers';
     
     		dol_syslog("Copy content from ".$srcdir." into ".$destdir);
     		dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement);
     
     		$srcdir = DOL_DATA_ROOT.'/medias/image/'.$website->ref;
    -		$destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/image/'.$website->ref;
    +		$destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/image/websitekey';
     
     		dol_syslog("Copy content from ".$srcdir." into ".$destdir);
     		dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement);
     
     		$srcdir = DOL_DATA_ROOT.'/medias/js/'.$website->ref;
    -		$destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/js/'.$website->ref;
    +		$destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/js/websitekey';
     
     		dol_syslog("Copy content from ".$srcdir." into ".$destdir);
     		dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement);
    @@ -844,25 +872,65 @@ class Website extends CommonObject
     		}
     		foreach($listofpages as $pageid => $objectpageold)
     		{
    -			$line = 'INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, title, description, keyword, status, date_creation, tms, lang, import_key, grabbed_from, content)';
    +			$allaliases = $objectpageold->pageurl;
    +			$allaliases.= ($objectpageold->aliasalt ? ','.$objectpageold->aliasalt : '');
    +
    +			$line = '-- Page ID '.$objectpageold->id.' -> '.$objectpageold->newid.'__+MAX_llx_website_page__ - Aliases '.$allaliases.' --;';	// newid start at 1, 2...
    +			$line.= "\n";
    +			fputs($fp, $line);
    +
    +			// Warning: We must keep llx_ here. It is a generic SQL.
    +			$line = 'INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, aliasalt, title, description, keywords, status, date_creation, tms, lang, import_key, grabbed_from, type_container, htmlheader, content)';
     			$line.= " VALUES(";
    -			$line.= $objectpageold->newid."+__MAXROWID__, ";
    -			$line.= ($objectpageold->newfk_page ? $this->db->escape($objectpageold->newfk_page)."+__MAXROWID__" : "null").", ";
    +			$line.= $objectpageold->newid."__+MAX_llx_website_page__, ";
    +			$line.= ($objectpageold->newfk_page ? $this->db->escape($objectpageold->newfk_page)."__+MAX_llx_website_page__" : "null").", ";
     			$line.= "__WEBSITE_ID__, ";
     			$line.= "'".$this->db->escape($objectpageold->pageurl)."', ";
    +			$line.= "'".$this->db->escape($objectpageold->aliasalt)."', ";
     			$line.= "'".$this->db->escape($objectpageold->title)."', ";
     			$line.= "'".$this->db->escape($objectpageold->description)."', ";
    -			$line.= "'".$this->db->escape($objectpageold->keyword)."', ";
    +			$line.= "'".$this->db->escape($objectpageold->keywords)."', ";
     			$line.= "'".$this->db->escape($objectpageold->status)."', ";
     			$line.= "'".$this->db->idate($objectpageold->date_creation)."', ";
     			$line.= "'".$this->db->idate($objectpageold->date_modification)."', ";
     			$line.= "'".$this->db->escape($objectpageold->lang)."', ";
     			$line.= ($objectpageold->import_key ? "'".$this->db->escape($objectpageold->import_key)."'" : "null").", ";
     			$line.= "'".$this->db->escape($objectpageold->grabbed_from)."', ";
    -			$line.= "'".$this->db->escape($objectpageold->content)."'";
    +			$line.= "'".$this->db->escape($objectpageold->type_container)."', ";
    +
    +			$stringtoexport = $objectpageold->htmlheader;
    +			$stringtoexport = str_replace(array("\r\n","\r","\n"), "__N__", $stringtoexport);
    +			$stringtoexport = str_replace('file=image/'.$website->ref.'/', "file=image/__WEBSITE_KEY__/", $stringtoexport);
    +			$stringtoexport = str_replace('file=js/'.$website->ref.'/', "file=js/__WEBSITE_KEY__/", $stringtoexport);
    +			$stringtoexport = str_replace('medias/image/'.$website->ref.'/', "medias/image/__WEBSITE_KEY__/", $stringtoexport);
    +			$stringtoexport = str_replace('medias/js/'.$website->ref.'/', "medias/js/__WEBSITE_KEY__/", $stringtoexport);
    +			$stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo_small, "file=logos%2Fthumbs%2F__LOGO_SMALL_KEY__", $stringtoexport);
    +			$stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo_mini, "file=logos%2Fthumbs%2F__LOGO_MINI_KEY__", $stringtoexport);
    +			$stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo, "file=logos%2Fthumbs%2F__LOGO_KEY__", $stringtoexport);
    +			$line.= "'".$this->db->escape(str_replace(array("\r\n","\r","\n"), "__N__", $stringtoexport))."', ";	// Replace \r \n to have record on 1 line
    +
    +			$stringtoexport = $objectpageold->content;
    +			$stringtoexport = str_replace(array("\r\n","\r","\n"), "__N__", $stringtoexport);
    +			$stringtoexport = str_replace('file=image/'.$website->ref.'/', "file=image/__WEBSITE_KEY__/", $stringtoexport);
    +			$stringtoexport = str_replace('file=js/'.$website->ref.'/', "file=js/__WEBSITE_KEY__/", $stringtoexport);
    +			$stringtoexport = str_replace('medias/image/'.$website->ref.'/', "medias/image/__WEBSITE_KEY__/", $stringtoexport);
    +			$stringtoexport = str_replace('medias/js/'.$website->ref.'/', "medias/js/__WEBSITE_KEY__/", $stringtoexport);
    +			$stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo_small, "file=logos%2Fthumbs%2F__LOGO_SMALL_KEY__", $stringtoexport);
    +			$stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo_mini, "file=logos%2Fthumbs%2F__LOGO_MINI_KEY__", $stringtoexport);
    +			$stringtoexport = str_replace('file=logos%2Fthumbs%2F'.$mysoc->logo, "file=logos%2Fthumbs%2F__LOGO_KEY__", $stringtoexport);
    +			$line.= "'".$this->db->escape($stringtoexport)."'";		// Replace \r \n to have record on 1 line
     			$line.= ");";
     			$line.= "\n";
     			fputs($fp, $line);
    +
    +			// Add line to update home page id during import
    +			//var_dump($this->fk_default_home.' - '.$objectpageold->id.' - '.$objectpageold->newid);exit;
    +			if ($this->fk_default_home > 0 && ($objectpageold->id == $this->fk_default_home) && ($objectpageold->newid > 0))	// This is the record with home page
    +			{
    +				$line = "UPDATE llx_website SET fk_default_home = ".($objectpageold->newid > 0 ? $this->db->escape($objectpageold->newid)."__+MAX_llx_website_page__" : "null")." WHERE rowid = __WEBSITE_ID__;";
    +				$line.= "\n";
    +				fputs($fp, $line);
    +			}
     		}
     
     		fclose($fp);
    @@ -870,7 +938,7 @@ class Website extends CommonObject
     			@chmod($filesql, octdec($conf->global->MAIN_UMASK));
     
     		// Build zip file
    -		$filedir  = $conf->website->dir_temp.'/'.$website->ref;
    +		$filedir  = $conf->website->dir_temp.'/'.$website->ref.'/.';
     		$fileglob = $conf->website->dir_temp.'/'.$website->ref.'/website_'.$website->ref.'-*.zip';
     		$filename = $conf->website->dir_temp.'/'.$website->ref.'/website_'.$website->ref.'-'.dol_print_date(dol_now(),'dayhourlog').'.zip';
     
    @@ -889,11 +957,19 @@ class Website extends CommonObject
     	 */
     	function importWebSite($pathtofile)
     	{
    -		global $conf;
    +		global $conf, $mysoc;
     
    -		$result = 0;
    +		$error = 0;
     
    -		$object = new Website($this->db);
    +		$object = $this;
    +		if (empty($object->ref))
    +		{
    +			$this->error = 'Function importWebSite called on object not loaded (object->ref is empty)';
    +			return -1;
    +		}
    +
    +		dol_delete_dir_recursive(dirname($pathtofile).'/'.$object->ref);
    +		dol_mkdir(dirname($pathtofile).'/'.$object->ref);
     
     		$filename = basename($pathtofile);
     		if (! preg_match('/^website_(.*)-(.*)$/', $filename, $reg))
    @@ -902,14 +978,229 @@ class Website extends CommonObject
     			return -1;
     		}
     
    -		$websitecode = $reg[1];
    -
    -		$sql = "INSERT INTO ".MAIN_DB_PREFIX."website(ref, entity, description, status) values('".$websitecode."', ".$conf->entity.", 'Portal to sell your SaaS. Do not remove this entry.', 1)";
    -		$resql = $this->db->query($sql);
    +		$result = dol_uncompress($pathtofile, $conf->website->dir_temp.'/'.$object->ref);
    +		if (! empty($result['error']))
    +		{
    +			$this->errors[]='Failed to unzip file '.$pathtofile.'.';
    +			return -1;
    +		}
     
     
    -		return $result;
    +		dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/containers', $conf->website->dir_output.'/'.$object->ref, 0, 1);	// Overwrite if exists
    +
    +		// Now generate the master.inc.php page
    +		$filemaster=$conf->website->dir_output.'/'.$object->ref.'/master.inc.php';
    +		$result = dolSaveMasterFile($filemaster);
    +		if (! $result)
    +		{
    +			$this->errors[]='Failed to write file '.$filemaster;
    +			$error++;
    +		}
    +
    +		dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/medias/image/websitekey', $conf->website->dir_output.'/'.$object->ref.'/medias/image/'.$object->ref, 0, 1);	// Medias can be shared, do not overwrite if exists
    +		dolCopyDir($conf->website->dir_temp.'/'.$object->ref.'/medias/js/websitekey',    $conf->website->dir_output.'/'.$object->ref.'/medias/js/'.$object->ref, 0, 1);	    // Medias can be shared, do not overwrite if exists
    +
    +		$sqlfile = $conf->website->dir_temp.'/'.$object->ref.'/website_pages.sql';
    +
    +		$arrayreplacement = array();
    +		$arrayreplacement['__WEBSITE_ID__'] = $object->id;
    +		$arrayreplacement['__WEBSITE_KEY__'] = $object->ref;
    +		$arrayreplacement['__N__'] = $this->db->escape("\n");			// Restore \n
    +		$arrayreplacement['__LOGO_SMALL_KEY__'] = $this->db->escape($mysoc->logo_small);
    +		$arrayreplacement['__LOGO_MINI_KEY__'] = $this->db->escape($mysoc->logo_mini);
    +		$arrayreplacement['__LOGO_KEY__'] = $this->db->escape($mysoc->logo);
    +		$result = dolReplaceInFile($sqlfile, $arrayreplacement);
    +
    +		$this->db->begin();
    +
    +		// Search the $maxrowid because we need it later
    +		$sqlgetrowid='SELECT MAX(rowid) as max from '.MAIN_DB_PREFIX.'website_page';
    +		$resql=$this->db->query($sqlgetrowid);
    +		if ($resql)
    +		{
    +			$obj=$this->db->fetch_object($resql);
    +			$maxrowid=$obj->max;
    +		}
    +
    +		// Load sql record
    +		$runsql = run_sql($sqlfile, 1, '', 0, '', 'none', 0, 1);	// The maxrowid of table is searched into this function two
    +		if ($runsql <= 0)
    +		{
    +			$this->errors[]='Failed to load sql file '.$sqlfile;
    +			$error++;
    +		}
    +
    +		$objectpagestatic = new WebsitePage($this->db);
    +
    +		// Make replacement of IDs
    +		$fp = fopen($sqlfile,"r");
    +		if ($fp)
    +		{
    +			while (! feof($fp))
    +			{
    +				// Warning fgets with second parameter that is null or 0 hang.
    +				$buf = fgets($fp, 65000);
    +				if (preg_match('/^-- Page ID (\d+)\s[^\s]+\s(\d+).*Aliases\s(.*)\s--;/i', $buf, $reg))
    +				{
    +					$oldid = $reg[1];
    +					$newid = ($reg[2] + $maxrowid);
    +					$aliasesarray = explode(',', $reg[3]);
    +
    +					$objectpagestatic->fetch($newid);
    +
    +					dol_syslog("Found ID ".$oldid." to replace with ID ".$newid." and shortcut aliases to create: ".$reg[3]);
    +
    +					dol_move($conf->website->dir_output.'/'.$object->ref.'/page'.$oldid.'.tpl.php', $conf->website->dir_output.'/'.$object->ref.'/page'.$newid.'.tpl.php', 0, 1, 0, 0);
    +
    +					// The move is not enough, so we regenerate page
    +					$filetpl=$conf->website->dir_output.'/'.$object->ref.'/page'.$newid.'.tpl.php';
    +					dolSavePageContent($filetpl, $object, $objectpagestatic);
    +
    +					// Regenerate alternative aliases pages
    +					foreach($aliasesarray as $aliasshortcuttocreate)
    +					{
    +						$filealias=$conf->website->dir_output.'/'.$object->ref.'/'.$aliasshortcuttocreate.'.php';
    +						dolSavePageAlias($filealias, $object, $objectpagestatic);
    +					}
    +				}
    +			}
    +		}
    +
    +		if ($error)
    +		{
    +			$this->db->rollback();
    +			return -1;
    +		}
    +		else
    +		{
    +			$this->db->commit();
    +			return $object->id;
    +		}
     	}
     
    -}
    +	/**
    +	 * Component to select language inside a container (Full CSS Only)
    +	 *
    +	 * @param	array|string	$languagecodes			'auto' to show all languages available for page, or language codes array like array('en_US','fr_FR','de_DE','es_ES')
    +	 * @param	Translate		$weblangs				Language Object
    +	 * @param	string			$morecss				More CSS class on component
    +	 * @param	string			$htmlname				Suffix for HTML name
    +	 * @return 	string									HTML select component
    +	 */
    +	public function componentSelectLang($languagecodes, $weblangs, $morecss='', $htmlname='')
    +	{
    +		global $websitepagefile, $website;
     
    +		if (! is_object($weblangs)) return 'ERROR componentSelectLang called with parameter $weblangs not defined';
    +
    +		// Load tmppage if we have $websitepagefile defined
    +		$tmppage=new WebsitePage($this->db);
    +
    +		$pageid = 0;
    +		if (! empty($websitepagefile))
    +		{
    +			$pageid = str_replace(array('.tpl.php', 'page'), array('', ''), basename($websitepagefile));
    +			if ($pageid > 0)
    +			{
    +				$tmppage->fetch($pageid);
    +			}
    +		}
    +
    +		// Fill with existing translation, nothing if none
    +		if (! is_array($languagecodes) && $pageid > 0)
    +		{
    +			$languagecodes = array();
    +
    +			$sql ="SELECT wp.rowid, wp.lang, wp.pageurl, wp.fk_page";
    +			$sql.=" FROM ".MAIN_DB_PREFIX."website_page as wp";
    +			$sql.=" WHERE wp.fk_website = ".$website->id;
    +			$sql.=" AND (wp.fk_page = ".$pageid." OR wp.rowid  = ".$pageid;
    +			if ($tmppage->fk_page > 0) $sql.=" OR wp.fk_page = ".$tmppage->fk_page." OR wp.rowid = ".$tmppage->fk_page;
    +			$sql.=")";
    +
    +			$resql = $this->db->query($sql);
    +			if ($resql)
    +			{
    +				while ($obj = $this->db->fetch_object($resql))
    +				{
    +					$newlang = $obj->lang;
    +					if ($obj->rowid == $pageid) $newlang = $obj->lang;
    +					if (! in_array($newlang, $languagecodes)) $languagecodes[]=$newlang;
    +				}
    +			}
    +		}
    +		// Now $languagecodes is always an array
    +
    +		$languagecodeselected= $weblangs->defaultlang;	// Because we must init with a value, but real value is the lang of main parent container
    +		if (! empty($websitepagefile))
    +		{
    +			$pageid = str_replace(array('.tpl.php', 'page'), array('', ''), basename($websitepagefile));
    +			if ($pageid > 0)
    +			{
    +
    +				$languagecodeselected=$tmppage->lang;
    +				if (! in_array($tmppage->lang, $languagecodes)) $languagecodes[]=$tmppage->lang;	// We add language code of page into combo list
    +			}
    +		}
    +
    +		$weblangs->load('languages');
    +		//var_dump($weblangs->defaultlang);
    +
    +		$url = $_SERVER["REQUEST_URI"];
    +		$url = preg_replace('/(\?|&)l=([a-zA-Z_]*)/', '', $url);	// We remove param l from url
    +		//$url = preg_replace('/(\?|&)lang=([a-zA-Z_]*)/', '', $url);	// We remove param lang from url
    +		$url.= (preg_match('/\?/', $url) ? '&' : '?').'l=';
    +
    +		$HEIGHTOPTION=40;
    +		$MAXHEIGHT = 4 * $HEIGHTOPTION;
    +		$nboflanguage = count($languagecodes);
    +
    +		$out ='<!-- componentSelectLang'.$htmlname.' -->'."\n";
    +
    +		$out.= '<style>';
    +		$out.= '.componentSelectLang'.$htmlname.':hover { height: '.min($MAXHEIGHT, ($HEIGHTOPTION * $nboflanguage)).'px; overflow-x: hidden; overflow-y: '.((($HEIGHTOPTION * $nboflanguage) > $MAXHEIGHT) ? ' scroll' : 'hidden').'; }'."\n";
    +		$out.= '.componentSelectLang'.$htmlname.' li { line-height: '.$HEIGHTOPTION.'px; }'."\n";
    +		$out.= '.componentSelectLang'.$htmlname.' {
    +			display: inline-block;
    +			padding: 0;
    +			height: '.$HEIGHTOPTION.'px;
    +			overflow: hidden;
    +			transition: all .3s ease;
    +			margin: 0 50px 0 0;
    +			vertical-align: top;
    +		}
    +		.componentSelectLang'.$htmlname.':hover, .componentSelectLang'.$htmlname.':hover a { background-color: #fff; color: #000 !important; }
    +		ul.componentSelectLang'.$htmlname.' { width: 150px; }
    +		ul.componentSelectLang'.$htmlname.':hover .fa { visibility: hidden; }
    +		.componentSelectLang'.$htmlname.' a { text-decoration: none; width: 100%; }
    +		.componentSelectLang'.$htmlname.' li { display: block; padding: 0px 20px; }
    +		.componentSelectLang'.$htmlname.' li:hover { background-color: #EEE; }
    +		';
    +		$out.= '</style>';
    +		$out.= '<ul class="componentSelectLang'.$htmlname.($morecss?' '.$morecss:'').'">';
    +		if ($languagecodeselected)
    +		{
    +			$shortcode = strtolower(substr($languagecodeselected, -2));
    +			$label = $weblangs->trans("Language_".$languagecodeselected);
    +			if ($shortcode == 'us') $label = preg_replace('/\s*\(.*\)/', '', $label);
    +			$out.= '<a href="'.$url.$languagecodeselected.'"><li><img height="12px" src="medias/image/common/flags/'.$shortcode.'.png" style="margin-right: 5px;"/>'.$label;
    +			$out.= '<span class="fa fa-caret-down" style="padding-left: 5px;" />';
    +			$out.= '</li></a>';
    +		}
    +		$i=0;
    +		foreach($languagecodes as $languagecode)
    +		{
    +			if ($languagecode == $languagecodeselected) continue;	// Already output
    +			$shortcode = strtolower(substr($languagecode, -2));
    +			$label = $weblangs->trans("Language_".$languagecode);
    +			if ($shortcode == 'us') $label = preg_replace('/\s*\(.*\)/', '', $label);
    +			$out.= '<a href="'.$url.$languagecode.'"><li><img height="12px" src="medias/image/common/flags/'.$shortcode.'.png" style="margin-right: 5px;"/>'.$label;
    +			if (empty($i) && empty($languagecodeselected)) $out.= '<span class="fa fa-caret-down" style="padding-left: 5px;" />';
    +			$out.= '</li></a>';
    +			$i++;
    +		}
    +		$out.= '</ul>';
    +
    +		return $out;
    +	}
    +}
    diff --git a/htdocs/website/class/websitepage.class.php b/htdocs/website/class/websitepage.class.php
    index c0b6aaa7ab9..6f8713b5adc 100644
    --- a/htdocs/website/class/websitepage.class.php
    +++ b/htdocs/website/class/websitepage.class.php
    @@ -1,9 +1,8 @@
     <?php
    -/* Copyright (C) 2007-2012  Laurent Destailleur <eldy@users.sourceforge.net>
    +/* Copyright (C) 2007-2018  Laurent Destailleur <eldy@users.sourceforge.net>
      * Copyright (C) 2014       Juanjo Menent       <jmenent@2byte.es>
      * Copyright (C) 2015       Florian Henry       <florian.henry@open-concept.pro>
      * Copyright (C) 2015       Raphaël Doursenaud  <rdoursenaud@gpcsolutions.fr>
    - * Copyright (C) ---Put here your own copyright and developer email---
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -39,29 +38,42 @@ class WebsitePage extends CommonObject
     	 * @var string Id to identify managed objects
     	 */
     	public $element = 'websitepage';
    +
     	/**
     	 * @var string Name of table without prefix where object is stored
     	 */
     	public $table_element = 'website_page';
    +
     	/**
     	 * @var string String with name of icon for websitepage. Must be the part after the 'object_' into object_myobject.png
     	 */
     	public $picto = 'label';
     
     	/**
    -	 */
    -
    +     * @var int ID
    +     */
     	public $fk_website;
    +
     	public $pageurl;
     	public $aliasalt;
     	public $type_container;
     	public $title;
    +
    +	/**
    +	 * @var string description
    +	 */
     	public $description;
    +
     	public $keywords;
     	public $htmlheader;
     	public $content;
     	public $grabbed_from;
    +
    +	/**
    +	 * @var int Status
    +	 */
     	public $status;
    +
     	public $date_creation;
     	public $date_modification;
     
    @@ -88,8 +100,8 @@ class WebsitePage extends CommonObject
     	    'date_creation'  =>array('type'=>'datetime',     'label'=>'DateCreation',     'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>500),
     		'tms'            =>array('type'=>'timestamp',    'label'=>'DateModification', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>501),
     		//'date_valid'    =>array('type'=>'datetime',     'label'=>'DateValidation',     'enabled'=>1, 'visible'=>-1, 'position'=>502),
    -		//'fk_user_creat' =>array('type'=>'integer',      'label'=>'UserAuthor',       'enabled'=>1, 'visible'=>-1, 'notnull'=>true, 'position'=>510),
    -		//'fk_user_modif' =>array('type'=>'integer',      'label'=>'UserModif',        'enabled'=>1, 'visible'=>-1, 'position'=>511),
    +		'fk_user_creat'  =>array('type'=>'integer',      'label'=>'UserAuthor',       'enabled'=>1, 'visible'=>-1, 'notnull'=>true, 'position'=>510),
    +		'fk_user_modif'  =>array('type'=>'integer',      'label'=>'UserModif',        'enabled'=>1, 'visible'=>-1, 'position'=>511),
     		//'fk_user_valid' =>array('type'=>'integer',      'label'=>'UserValidation',        'enabled'=>1, 'visible'=>-1, 'position'=>512),
     		'import_key'     =>array('type'=>'varchar(14)',  'label'=>'ImportId',         'enabled'=>1, 'visible'=>-1,  'index'=>1,  'position'=>1000, 'notnull'=>-1),
     	);
    @@ -125,7 +137,9 @@ class WebsitePage extends CommonObject
     	/**
     	 * Load object in memory from the database
     	 *
    -	 * @param int		$id         	Id object. If this is 0, the value into $page will be used. If not found of $page not defined, the default page of website_id will be used or the first page found if not set.
    +	 * @param int		$id				Id object.
    +	 * 									- If this is 0, the value into $page will be used. If not found or $page not defined, the default page of website_id will be used or the first page found if not set.
    +	 * 									- If value is < 0, we must exclude this ID.
     	 * @param string	$website_id 	Web site id (page name must also be filled if this parameter is used)
     	 * @param string	$page       	Page name (website id must also be filled if this parameter is used)
     	 * @param string	$aliasalt		Alternative alias to search page (slow)
    @@ -152,7 +166,9 @@ class WebsitePage extends CommonObject
     		$sql .= " t.status,";
     		$sql .= " t.grabbed_from,";
     		$sql .= " t.date_creation,";
    -		$sql .= " t.tms as date_modification";
    +		$sql .= " t.tms as date_modification,";
    +		$sql .= " t.fk_user_creat,";
    +		$sql .= " t.fk_user_modif";
     		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t';
     		//$sql .= ' WHERE entity IN ('.getEntity('website').')';       // entity is on website level
     		$sql .= ' WHERE 1 = 1';
    @@ -162,6 +178,7 @@ class WebsitePage extends CommonObject
     		}
     		else
     		{
    +			if ($id < 0) $sql .= ' AND t.rowid <> ' . abs($id);
     			if (null !== $website_id) {
     			    $sql .= " AND t.fk_website = '" . $this->db->escape($website_id) . "'";
     			    if ($page)		$sql .= " AND t.pageurl = '" . $this->db->escape($page) . "'";
    @@ -180,8 +197,11 @@ class WebsitePage extends CommonObject
     
     				$this->fk_website = $obj->fk_website;
     				$this->type_container = $obj->type_container;
    +
     				$this->pageurl = $obj->pageurl;
    +				$this->ref = $obj->pageurl;
     				$this->aliasalt = preg_replace('/,+$/', '', preg_replace('/^,+/', '', $obj->aliasalt));
    +
     				$this->title = $obj->title;
     				$this->description = $obj->description;
     				$this->keywords = $obj->keywords;
    @@ -193,6 +213,8 @@ class WebsitePage extends CommonObject
     				$this->grabbed_from = $obj->grabbed_from;
     				$this->date_creation = $this->db->jdate($obj->date_creation);
     				$this->date_modification = $this->db->jdate($obj->date_modification);
    +				$this->fk_user_creat = $obj->fk_user_creat;
    +				$this->fk_user_modif = $obj->fk_user_modif;
     			}
     			$this->db->free($resql);
     
    @@ -243,7 +265,9 @@ class WebsitePage extends CommonObject
     		$sql .= " t.status,";
     		$sql .= " t.grabbed_from,";
     		$sql .= " t.date_creation,";
    -		$sql .= " t.tms as date_modification";
    +		$sql .= " t.tms as date_modification,";
    +		$sql .= " t.fk_user_creat,";
    +		$sql .= " t.fk_user_modif";
     		$sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element. ' as t';
     		$sql .= ' WHERE t.fk_website = '.$websiteid;
     		// Manage filter
    @@ -258,11 +282,11 @@ class WebsitePage extends CommonObject
     			}
     		}
     		if (count($sqlwhere) > 0) {
    -			$sql .= ' AND ' . implode(' '.$filtermode.' ', $sqlwhere);
    +			$sql .= ' AND (' . implode(' '.$filtermode.' ', $sqlwhere).')';
     		}
     
     		if (!empty($sortfield)) {
    -			$sql .= $this->db->order($sortfield,$sortorder);
    +			$sql .= $this->db->order($sortfield, $sortorder);
     		}
     		if (!empty($limit)) {
                 $sql .=  ' ' . $this->db->plimit($limit, $offset);
    @@ -292,6 +316,8 @@ class WebsitePage extends CommonObject
     				$record->grabbed_from = $obj->grabbed_from;
     				$record->date_creation = $this->db->jdate($obj->date_creation);
     				$record->date_modification = $this->db->jdate($obj->date_modification);
    +				$record->fk_user_creat = $obj->fk_user_creat;
    +				$record->fk_user_modif = $obj->fk_user_modif;
     				//var_dump($record->id);
     				$records[$record->id] = $record;
     			}
    @@ -362,10 +388,11 @@ class WebsitePage extends CommonObject
     	 * @param	string	$newref				New ref/alias of page
     	 * @param	string	$newlang			New language
     	 * @param	int		$istranslation		1=New page is a translation of the cloned page.
    -	 * @param	int		$newwebsite			0=Same web site, 1=New web site
    +	 * @param	int		$newwebsite			0=Same web site, >0=Id of new website
    +	 * @param	int		$keeptitleunchanged	1=Keep title unchanged
     	 * @return 	mixed 						New object created, <0 if KO
     	 */
    -	public function createFromClone(User $user, $fromid, $newref, $newlang='', $istranslation=0, $newwebsite=0)
    +	public function createFromClone(User $user, $fromid, $newref, $newlang='', $istranslation=0, $newwebsite=0, $keeptitleunchanged=0)
     	{
     		global $hookmanager, $langs;
     		$error = 0;
    @@ -385,7 +412,8 @@ class WebsitePage extends CommonObject
     		$object->ref = $newref;
     		$object->pageurl = $newref;
     		$object->aliasalt = '';
    -		$object->title = $langs->trans("CopyOf").' '.$object->title;
    +		$object->fk_user_creat = $user->id;
    +		$object->title = ($keeptitleunchanged ? '' : $langs->trans("CopyOf").' ').$object->title;
     		if (! empty($newlang)) $object->lang=$newlang;
     		if ($istranslation) $object->fk_page = $fromid;
     		else $object->fk_page = 0;
    @@ -464,6 +492,7 @@ class WebsitePage extends CommonObject
     		return $this->LibStatut($this->status,$mode);
     	}
     
    +    // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
     	/**
     	 *  Renvoi le libelle d'un status donne
     	 *
    @@ -473,6 +502,7 @@ class WebsitePage extends CommonObject
     	 */
     	function LibStatut($status,$mode=0)
     	{
    +        // phpcs:enable
     		global $langs;
     
     		if ($mode == 0)
    @@ -481,27 +511,27 @@ class WebsitePage extends CommonObject
     			if ($status == 1) return $langs->trans('Enabled');
     			if ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 1)
    +		elseif ($mode == 1)
     		{
     			if ($status == 1) return $langs->trans('Enabled');
     			if ($status == 0) return $langs->trans('Disabled');
     		}
    -		if ($mode == 2)
    +		elseif ($mode == 2)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 3)
    +		elseif ($mode == 3)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5');
     		}
    -		if ($mode == 4)
    +		elseif ($mode == 4)
     		{
     			if ($status == 1) return img_picto($langs->trans('Enabled'),'statut4').' '.$langs->trans('Enabled');
     			if ($status == 0) return img_picto($langs->trans('Disabled'),'statut5').' '.$langs->trans('Disabled');
     		}
    -		if ($mode == 5)
    +		elseif ($mode == 5)
     		{
     			if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'),'statut4');
     			if ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'),'statut5');
    @@ -517,6 +547,8 @@ class WebsitePage extends CommonObject
     	 */
     	public function initAsSpecimen()
     	{
    +		global $user;
    +
     		$this->id = 0;
     
     		$now=dol_now();
    @@ -534,6 +566,6 @@ class WebsitePage extends CommonObject
     		$this->grabbed_from = '';
     		$this->date_creation = $now - (24 * 30 * 3600);
     		$this->date_modification = $now - (24 * 7 * 3600);
    +		$this->fk_user_creat = $user->id;
     	}
    -
     }
    diff --git a/htdocs/website/index.php b/htdocs/website/index.php
    index e1460f497f1..d64849ddc9b 100644
    --- a/htdocs/website/index.php
    +++ b/htdocs/website/index.php
    @@ -1,5 +1,5 @@
     <?php
    -/* Copyright (C) 2016-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2016-2018 Laurent Destailleur  <eldy@users.sourceforge.net>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -37,7 +37,7 @@ require_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
     
     $langs->loadLangs(array("admin","other","website"));
     
    -if (! $user->admin) accessforbidden();
    +if (! $user->rights->website->read) accessforbidden();
     
     if (! ((GETPOST('testmenuhider','int') || ! empty($conf->global->MAIN_TESTMENUHIDER)) && empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)))
     {
    @@ -45,7 +45,7 @@ if (! ((GETPOST('testmenuhider','int') || ! empty($conf->global->MAIN_TESTMENUHI
     }
     
     $error=0;
    -$website=GETPOST('website', 'alpha');
    +$websitekey=GETPOST('website', 'alpha');
     $page=GETPOST('page', 'alpha');
     $pageid=GETPOST('pageid', 'int');
     $pageref=GETPOST('pageref', 'aZ09');
    @@ -58,6 +58,7 @@ $type_container=GETPOST('WEBSITE_TYPE_CONTAINER', 'alpha');
     $section_dir = GETPOST('section_dir', 'alpha');
     $file_manager = GETPOST('file_manager', 'alpha');
     
    +if (GETPOST('deletesite','alpha')) { $action='deletesite'; }
     if (GETPOST('delete','alpha')) { $action='delete'; }
     if (GETPOST('preview','alpha')) $action='preview';
     if (GETPOST('createsite','alpha')) { $action='createsite'; }
    @@ -68,6 +69,8 @@ if (GETPOST('setashome','alpha')) { $action='setashome'; }
     if (GETPOST('editmeta','alpha')) { $action='editmeta'; }
     if (GETPOST('editsource','alpha')) { $action='editsource'; }
     if (GETPOST('editcontent','alpha')) { $action='editcontent'; }
    +if (GETPOST('exportsite','alpha')) { $action='exportsite'; }
    +if (GETPOST('importsite','alpha')) { $action='importsite'; }
     if (GETPOST('createfromclone','alpha')) { $action='createfromclone'; }
     if (GETPOST('createpagefromclone','alpha')) { $action='createpagefromclone'; }
     if (empty($action) && $file_manager) $action='file_manager';
    @@ -89,46 +92,82 @@ if (empty($action)) $action='preview';
     $object=new Website($db);
     $objectpage=new WebsitePage($db);
     
    -$object->fetchAll();    // Init $object->records
    +$object->fetchAll();    // Init $object->records with list of websites
     
     // If website not defined, we take first found
    -if (empty($website))
    +if (empty($websitekey))
     {
     	foreach($object->records as $key => $valwebsite)
     	{
    -		$website=$valwebsite->ref;
    +		$websitekey=$valwebsite->ref;
     		break;
     	}
     }
    -if ($website)
    +if ($websitekey)
     {
    -	$res = $object->fetch(0, $website);
    +	$res = $object->fetch(0, $websitekey);
     }
    +$website = $object;
     
    +// Check pageid received as aprameter
     if ($pageid < 0) $pageid = 0;
     if (($pageid > 0 || $pageref) && $action != 'addcontainer')
     {
     	$res = $objectpage->fetch($pageid, ($object->id > 0 ? $object->id : null), $pageref);
    -	//var_dump($res);exit;
    -	//if ($res == 0)		// Page ref not found, we check in alias
    -	//{
    -	//	$res = $objectpage->fetch($pageid, ($object->id > 0 ? $object->id : null), $pageref);
    -	//}
     
     	// Check if pageid is inside the new website, if not we reset param pageid
    -	if ($object->id > 0 && ($objectpage->fk_website != $object->id))
    +	if ($res >= 0 && $object->id > 0)
     	{
    -		$res = $objectpage->fetch(0, $object->id, '');;
    -		if ($res == 0)	// Page was not found, we reset it
    +		if ($objectpage->fk_website != $object->id)	// We have a bad page that does not belong to web site
     		{
    -			$objectpage=new WebsitePage($db);
    +			if ($object->fk_default_home > 0)
    +			{
    +				$res = $objectpage->fetch($object->fk_default_home, $object->id, '');	// We search first page of web site
    +				if ($res > 0) $pageid = $object->fk_default_home;
    +			}
    +			else
    +			{
    +				$res = $objectpage->fetch(0, $object->id, '');	// We search first page of web site
    +				if ($res == 0)	// Page was not found, we reset it
    +				{
    +					$objectpage=new WebsitePage($db);
    +				}
    +				else			// We found a page, we set pageid to it.
    +				{
    +					$pageid = $objectpage->id;
    +				}
    +			}
    +		}
    +		else	// We have a valid page. We force pageid for the case we got the page with a fetch on ref.
    +		{
    +			$pageid = $objectpage->id;
     		}
     	}
    -	$pageid = $objectpage->id;
     }
     
    +// Define pageid if pageid and pageref not received as parameter or was wrong
    +if (empty($pageid) && empty($pageref) && $object->id > 0 && $action != 'createcontainer')
    +{
    +	$pageid = $object->fk_default_home;
    +	if (empty($pageid))
    +	{
    +		$array=$objectpage->fetchAll($object->id, 'ASC,ASC', 'type_container,pageurl');
    +		if (! is_array($array) && $array < 0) dol_print_error('', $objectpage->error, $objectpage->errors);
    +		$atleastonepage=(is_array($array) && count($array) > 0);
    +
    +		$firstpageid=0;$homepageid=0;
    +		foreach($array as $key => $valpage)
    +		{
    +			if (empty($firstpageid)) $firstpageid=$valpage->id;
    +			if ($object->fk_default_home && $key == $object->fk_default_home) $homepageid=$valpage->id;
    +		}
    +		$pageid=($homepageid?$homepageid:$firstpageid);   // We choose home page and if not defined yet, we take first page
    +	}
    +}
    +
    +
     global $dolibarr_main_data_root;
    -$pathofwebsite=$dolibarr_main_data_root.'/website/'.$website;
    +$pathofwebsite=$dolibarr_main_data_root.'/website/'.$websitekey;
     $filehtmlheader=$pathofwebsite.'/htmlheader.html';
     $filecss=$pathofwebsite.'/styles.css.php';
     $filejs=$pathofwebsite.'/javascript.js.php';
    @@ -136,6 +175,7 @@ $filerobot=$pathofwebsite.'/robots.txt';
     $filehtaccess=$pathofwebsite.'/.htaccess';
     $filetpl=$pathofwebsite.'/page'.$pageid.'.tpl.php';
     $fileindex=$pathofwebsite.'/index.php';
    +$filewrapper=$pathofwebsite.'/wrapper.php';
     
     // Define $urlwithroot
     $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root));
    @@ -167,11 +207,39 @@ $htmlheadercontentdefault.='-->'."\n";
      * Actions
      */
     
    -$backtopage=$_SERVER["PHP_SELF"].'?file_manager=1&website='.$website.'&pageid='.$pageid;	// used after a confirm_deletefile into actions_linkedfiles.inc.php
    +$backtopage=$_SERVER["PHP_SELF"].'?file_manager=1&website='.$websitekey.'&pageid='.$pageid.(GETPOST('section_dir','alpha')?'&section_dir='.urlencode(GETPOST('section_dir','alpha')):'');	// used after a confirm_deletefile into actions_linkedfiles.inc.php
     include DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php';
     
     if ($action == 'renamefile') $action='file_manager';		// After actions_linkedfiles, if action were renamefile, we set it to 'file_manager'
     
    +if ($action == 'seteditinline')
    +{
    +	dolibarr_set_const($db, 'WEBSITE_EDITINLINE', 1);
    +	setEventMessages($langs->trans("FeatureNotYetAvailable"), null, 'warnings');
    +	dolibarr_set_const($db, 'WEBSITE_SUBCONTAINERSINLINE', 0);	// Force disable of show included containers
    +	header("Location: ".$_SERVER["PHP_SELF"].'?website='.GETPOST('website','alphanohtml').'&pageid='.GETPOST('pageid','int'));
    +	exit;
    +}
    +if ($action == 'unseteditinline')
    +{
    +	dolibarr_del_const($db, 'WEBSITE_EDITINLINE');
    +	header("Location: ".$_SERVER["PHP_SELF"].'?website='.GETPOST('website','alphanohtml').'&pageid='.GETPOST('pageid','int'));
    +	exit;
    +}
    +if ($action == 'setshowsubcontainers')
    +{
    +	dolibarr_set_const($db, 'WEBSITE_SUBCONTAINERSINLINE', 1);
    +	dolibarr_set_const($db, 'WEBSITE_EDITINLINE', 0);	// Force disable of edit inline
    +	header("Location: ".$_SERVER["PHP_SELF"].'?website='.GETPOST('website','alphanohtml').'&pageid='.GETPOST('pageid','int'));
    +	exit;
    +}
    +if ($action == 'unsetshowsubcontainers')
    +{
    +	dolibarr_del_const($db, 'WEBSITE_SUBCONTAINERSINLINE');
    +	header("Location: ".$_SERVER["PHP_SELF"].'?website='.GETPOST('website','alphanohtml').'&pageid='.GETPOST('pageid','int'));
    +	exit;
    +}
    +
     // Add directory
     /*
     if ($action == 'adddir' && $permtouploadfile)
    @@ -197,12 +265,12 @@ if ($action == 'adddir' && $permtouploadfile)
     */
     
     
    -if (GETPOST('refreshsite'))		// If we change the site, we reset the pageid and cancel addsite action.
    +if (GETPOST('refreshsite','alpha'))		// If we change the site, we reset the pageid and cancel addsite action.
     {
     	$pageid=0;
     	if ($action == 'addsite') $action = 'preview';
     }
    -if (GETPOST('refreshpage') && ! in_array($action, array('updatecss'))) $action='preview';
    +if (GETPOST('refreshpage','alpha') && ! in_array($action, array('updatecss'))) $action='preview';
     
     
     // Add site
    @@ -213,6 +281,7 @@ if ($action == 'addsite')
     	if (! $error && ! GETPOST('WEBSITE_REF','alpha'))
     	{
     		$error++;
    +		$langs->load("errors");
     		setEventMessages($langs->transnoentities("ErrorFieldRequired", $langs->transnoentities("Ref")), null, 'errors');
     	}
     	if (! $error && ! preg_match('/^[a-z0-9_\-\.]+$/i', GETPOST('WEBSITE_REF','alpha')))
    @@ -327,7 +396,7 @@ if ($action == 'addcontainer')
     				// Remove comments
     				$tmp['content'] = removeHtmlComment($tmp['content']);
     
    -				preg_match('/<head>(.*)<\/head>/is', $tmp['content'], $reg);
    +				preg_match('/<head>(.*)<\/head>/ims', $tmp['content'], $reg);
     				$head = $reg[1];
     
     				$objectpage->type_container = 'page';
    @@ -390,6 +459,7 @@ if ($action == 'addcontainer')
     				//$objectpage->htmlheader = preg_replace('/<meta name="msvalidate.01[^>]*>\n*/ims', '', $objectpage->htmlheader);
     				$objectpage->htmlheader = preg_replace('/<title>[^<]*<\/title>\n*/ims', '', $objectpage->htmlheader);
     				$objectpage->htmlheader = preg_replace('/<link[^>]*rel="shortcut[^>]*>\n/ims', '', $objectpage->htmlheader);
    +				$objectpage->htmlheader = preg_replace('/<link[^>]*rel="canonical[^>]*>\n/ims', '', $objectpage->htmlheader);
     
     				// Now loop to fetch JS
     				$tmp = $objectpage->htmlheader;
    @@ -623,13 +693,13 @@ if ($action == 'addcontainer')
     			if ($result)
     			{
     				setEventMessages($langs->trans("Saved"), null, 'mesgs');
    -				//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid);
    +				//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
     				//exit;
     			}
     			else
     			{
     				setEventMessages('Failed to write file '.$filetpl, null, 'errors');
    -				//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid);
    +				//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
     				//exit;
     			}
     		}
    @@ -697,6 +767,41 @@ if ($action == 'addcontainer')
     	}
     }
     
    +// Delete site
    +if ($action == 'deletesite')
    +{
    +	$error = 0;
    +
    +	$db->begin();
    +
    +	$res = $object->fetch(0, $websitekey);
    +	$website = $object;
    +
    +	if ($res > 0)
    +	{
    +		$res = $object->delete($user);
    +		if ($res <= 0)
    +		{
    +			$error++;
    +			setEventMessages($object->error, $object->errors, 'errors');
    +		}
    +	}
    +
    +	if (! $error)
    +	{
    +		$db->commit();
    +		setEventMessages($langs->trans("SiteDeleted", $object->ref, $websitekey), null, 'mesgs');
    +
    +		header("Location: ".$_SERVER["PHP_SELF"]);
    +		exit;
    +	}
    +	else
    +	{
    +		$db->rollback();
    +		dol_print_error($db);
    +	}
    +}
    +
     // Delete page
     if ($action == 'delete')
     {
    @@ -704,7 +809,8 @@ if ($action == 'delete')
     
     	$db->begin();
     
    -	$res = $object->fetch(0, $website);
    +	$res = $object->fetch(0, $websitekey);
    +	$website = $object;
     
     	$res = $objectpage->fetch($pageid, $object->fk_website);
     
    @@ -721,9 +827,9 @@ if ($action == 'delete')
     	if (! $error)
     	{
     		$db->commit();
    -		setEventMessages($langs->trans("PageDeleted", $objectpage->pageurl, $website), null, 'mesgs');
    +		setEventMessages($langs->trans("PageDeleted", $objectpage->pageurl, $websitekey), null, 'mesgs');
     
    -		header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website);
    +		header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey);
     		exit;
     	}
     	else
    @@ -742,7 +848,8 @@ if ($action == 'updatecss')
     	}
     	else
     	{
    -		$res = $object->fetch(0, $website);
    +		$res = $object->fetch(0, $websitekey);
    +		$website = $object;
     
     		// Html header file
     		$htmlheadercontent ='';
    @@ -750,7 +857,7 @@ if ($action == 'updatecss')
     		/* We disable php code since htmlheader is never executed as an include but only read by fgets_content.
     	    $htmlheadercontent.= "<?php // BEGIN PHP\n";
     	    $htmlheadercontent.= '$websitekey=basename(dirname(__FILE__));'."\n";
    -	    $htmlheadercontent.= "if (! defined('USEDOLIBARRSERVER')) { require_once './master.inc.php'; } // Not already loaded"."\n";
    +	    $htmlheadercontent.= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Not already loaded"."\n";
     	    $htmlheadercontent.= "require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';\n";
     	    $htmlheadercontent.= "require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';\n";
     	    $htmlheadercontent.= "ob_start();\n";
    @@ -773,7 +880,7 @@ if ($action == 'updatecss')
     
     		$csscontent.= "<?php // BEGIN PHP\n";
     		$csscontent.= '$websitekey=basename(dirname(__FILE__));'."\n";
    -		$csscontent.= "if (! defined('USEDOLIBARRSERVER')) { require_once dirname(__FILE__).'/master.inc.php'; } // Not already loaded"."\n";	// For the css, we need to set path of master using the dirname of css file.
    +		$csscontent.= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once dirname(__FILE__).'/master.inc.php'; } // Not already loaded"."\n";	// For the css, we need to set path of master using the dirname of css file.
     		$csscontent.= "require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';\n";
     		$csscontent.= "require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';\n";
     		$csscontent.= "ob_start();\n";
    @@ -805,7 +912,7 @@ if ($action == 'updatecss')
     
     		$jscontent.= "<?php // BEGIN PHP\n";
     		$jscontent.= '$websitekey=basename(dirname(__FILE__));'."\n";
    -		$jscontent.= "if (! defined('USEDOLIBARRSERVER')) { require_once dirname(__FILE__).'/master.inc.php'; } // Not already loaded"."\n";	// For the css, we need to set path of master using the dirname of css file.
    +		$jscontent.= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once dirname(__FILE__).'/master.inc.php'; } // Not already loaded"."\n";	// For the css, we need to set path of master using the dirname of css file.
     		$jscontent.= "require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';\n";
     		$jscontent.= "require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';\n";
     		$jscontent.= "ob_start();\n";
    @@ -837,7 +944,7 @@ if ($action == 'updatecss')
     
     		/*$robotcontent.= "<?php // BEGIN PHP\n";
     	    $robotcontent.= '$websitekey=basename(dirname(__FILE__));'."\n";
    -	    $robotcontent.= "if (! defined('USEDOLIBARRSERVER')) { require_once './master.inc.php'; } // Not already loaded"."\n";
    +	    $robotcontent.= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Not already loaded"."\n";
     	    $robotcontent.= "require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';\n";
     	    $robotcontent.= "require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';\n";
     	    $robotcontent.= "ob_start();\n";
    @@ -869,7 +976,7 @@ if ($action == 'updatecss')
     
     		/*$robotcontent.= "<?php // BEGIN PHP\n";
         	 $robotcontent.= '$websitekey=basename(dirname(__FILE__));'."\n";
    -    	 $robotcontent.= "if (! defined('USEDOLIBARRSERVER')) { require_once './master.inc.php'; } // Not already loaded"."\n";
    +    	 $robotcontent.= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Not already loaded"."\n";
         	 $robotcontent.= "require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';\n";
         	 $robotcontent.= "require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';\n";
         	 $robotcontent.= "ob_start();\n";
    @@ -909,7 +1016,8 @@ if ($action == 'updatecss')
     if ($action == 'setashome')
     {
     	$db->begin();
    -	$object->fetch(0, $website);
    +	$object->fetch(0, $websitekey);
    +	$website = $object;
     
     	$object->fk_default_home = $pageid;
     	$res = $object->update($user);
    @@ -925,7 +1033,7 @@ if ($action == 'setashome')
     
     		// Generate the index.php page to be the home page
     		//-------------------------------------------------
    -		$result = dolSaveIndexPage($pathofwebsite, $fileindex, $filetpl);
    +		$result = dolSaveIndexPage($pathofwebsite, $fileindex, $filetpl, $filewrapper);
     
     		if ($result) setEventMessages($langs->trans("Saved"), null, 'mesgs');
     		else setEventMessages('Failed to write file '.$fileindex, null, 'errors');
    @@ -943,7 +1051,8 @@ if ($action == 'updatemeta')
     {
     	$db->begin();
     
    -	$object->fetch(0, $website);
    +	$result = $object->fetch(0, $websitekey);
    +	$website = $object;
     
     	$objectpage->fk_website = $object->id;
     
    @@ -956,13 +1065,59 @@ if ($action == 'updatemeta')
     		$action='editmeta';
     	}
     
    -	$res = $objectpage->fetch($pageid, $object->fk_website);
    +	$res = $objectpage->fetch($pageid, $object->id);
     	if ($res <= 0)
     	{
     		$error++;
     		setEventMessages('Page not found '.$objectpage->error, $objectpage->errors, 'errors');
     	}
     
    +	// Check alias not exists
    +	if (! $error && GETPOST('WEBSITE_PAGENAME', 'alpha'))
    +	{
    +		$websitepagetemp=new WebsitePage($db);
    +		$result = $websitepagetemp->fetch(-1 * $objectpage->id, $object->id, GETPOST('WEBSITE_PAGENAME', 'alpha'));
    +		if ($result < 0)
    +		{
    +			$error++;
    +			$langs->load("errors");
    +			setEventMessages($websitepagetemp->error, $websitepagetemp->errors, 'errors');
    +			$action = 'editmeta';
    +		}
    +		if ($result > 0)
    +		{
    +			$error++;
    +			$langs->load("errors");
    +			setEventMessages($langs->trans("ErrorAPageWithThisNameOrAliasAlreadyExists", $websitepagetemp->pageurl), null, 'errors');
    +			$action = 'editmeta';
    +		}
    +	}
    +	if (! $error && GETPOST('WEBSITE_ALIASALT', 'alpha'))
    +	{
    +		$arrayofaliastotest=explode(',', GETPOST('WEBSITE_ALIASALT', 'alpha'));
    +		$websitepagetemp=new WebsitePage($db);
    +		foreach($arrayofaliastotest as $aliastotest)
    +		{
    +			$result = $websitepagetemp->fetch(-1 * $objectpage->id, $object->id, $aliastotest);
    +			if ($result < 0)
    +			{
    +				$error++;
    +				$langs->load("errors");
    +				setEventMessages($websitepagetemp->error, $websitepagetemp->errors, 'errors');
    +				$action = 'editmeta';
    +				break;
    +			}
    +			if ($result > 0)
    +			{
    +				$error++;
    +				$langs->load("errors");
    +				setEventMessages($langs->trans("ErrorAPageWithThisNameOrAliasAlreadyExists", $websitepagetemp->pageurl), null, 'errors');
    +				$action = 'editmeta';
    +				break;
    +			}
    +		}
    +	}
    +
     	if (! $error)
     	{
     		$objectpage->old_object = clone $objectpage;
    @@ -977,10 +1132,23 @@ if ($action == 'updatemeta')
     		$objectpage->htmlheader = trim(GETPOST('htmlheader', 'none'));
     
     		$res = $objectpage->update($user);
    -		if (! $res > 0)
    +		if (! ($res > 0))
     		{
    -			$error++;
    -			setEventMessages($objectpage->error, $objectpage->errors, 'errors');
    +			$langs->load("errors");
    +			if ($db->lasterrno == 'DB_ERROR_RECORD_ALREADY_EXISTS')
    +			{
    +				$error++;
    +				$langs->load("errors");
    +				setEventMessages($langs->trans("ErrorAPageWithThisNameOrAliasAlreadyExists"), null, 'errors');
    +				$action = 'editmeta';
    +			}
    +			else
    +			{
    +				$error++;
    +				$langs->load("errors");
    +				setEventMessages($objectpage->error, $objectpage->errors, 'errors');
    +				$action = 'editmeta';
    +			}
     		}
     	}
     
    @@ -1003,19 +1171,7 @@ if ($action == 'updatemeta')
     
     
     		// Now generate the master.inc.php page
    -		dol_syslog("We regenerate the master file (because we update meta)");
    -		dol_delete_file($filemaster);
    -
    -		$mastercontent = '<?php'."\n";
    -		$mastercontent.= '// File generated to link to the master file - DO NOT MODIFY - It is just an include'."\n";
    -		$mastercontent.= "if (! defined('USEDOLIBARRSERVER')) require_once '".DOL_DOCUMENT_ROOT."/master.inc.php';\n";
    -		//$mastercontent.= "include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';"."\n";
    -		//$mastercontent.= '$website = new WebSite($db)'."\n";
    -		$mastercontent.= '?>'."\n";
    -		$result = file_put_contents($filemaster, $mastercontent);
    -		if (! empty($conf->global->MAIN_UMASK))
    -			@chmod($filemaster, octdec($conf->global->MAIN_UMASK));
    -
    +		$result = dolSaveMasterFile($filemaster);
     		if (! $result) setEventMessages('Failed to write file '.$filemaster, null, 'errors');
     
     		// Now delete the alias.php page
    @@ -1061,13 +1217,13 @@ if ($action == 'updatemeta')
     		if ($result)
     		{
     			setEventMessages($langs->trans("Saved"), null, 'mesgs');
    -			//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid);
    +			//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
     			//exit;
     		}
     		else
     		{
     			setEventMessages('Failed to write file '.$filetpl, null, 'errors');
    -			//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid);
    +			//header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
        			//exit;
     		}
     
    @@ -1079,10 +1235,13 @@ if ($action == 'updatemeta')
     if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'confirm_createfromclone' || $action == 'confirm_createpagefromclone')
     	|| ($action == 'preview' && (GETPOST('refreshsite') || GETPOST('refreshpage') || GETPOST('preview'))))
     {
    -	$object->fetch(0, $website);
    +	$object->fetch(0, $websitekey);
    +	$website = $object;
     
     	if ($action == 'confirm_createfromclone')
     	{
    +		$db->begin();
    +
     		$objectnew = new Website($db);
     		$result = $objectnew->createFromClone($user, GETPOST('id','int'), GETPOST('siteref','aZ09'), (GETPOST('newlang','aZ09')?GETPOST('newlang','aZ09'):''));
     		if ($result < 0)
    @@ -1090,12 +1249,17 @@ if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'conf
     			$error++;
     			setEventMessages($objectnew->error, $objectnew->errors, 'errors');
     			$action='preview';
    +
    +			$db->rollback();
     		}
     		else
     		{
     			$object = $objectnew;
     			$id = $object->id;
     			$pageid = $object->fk_default_home;
    +			$websitekey = GETPOST('siteref','aZ09');
    +
    +			$db->commit();
     		}
     	}
     
    @@ -1114,17 +1278,51 @@ if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'conf
     
     		if (! $error)
     		{
    +			$db->begin();
    +
    +			$newwebsiteid = GETPOST('newwebsite','int');
    +			$pathofwebsitenew = $pathofwebsite;
    +
    +			$tmpwebsite=new Website($db);
    +			if ($newwebsiteid > 0 && $newwebsiteid != $object->id)
    +			{
    +				$tmpwebsite->fetch($newwebsiteid);
    +				$pathofwebsitenew = $dolibarr_main_data_root.'/website/'.$tmpwebsite->ref;
    +			}
    +			else
    +			{
    +				$tmpwebsite = $object;
    +			}
    +
     			$objectpage = new WebsitePage($db);
    -			$result = $objectpage->createFromClone($user, $pageid, GETPOST('pageurl','aZ09'), (GETPOST('newlang','aZ09')?GETPOST('newlang','aZ09'):''), $istranslation, GETPOST('newwebsite','int'));
    -			if ($result < 0)
    +			$resultpage = $objectpage->createFromClone($user, $pageid, GETPOST('pageurl','aZ09'), (GETPOST('newlang','aZ09')?GETPOST('newlang','aZ09'):''), $istranslation, $newwebsiteid);
    +			if ($resultpage < 0)
     			{
     				$error++;
     				setEventMessages($objectpage->error, $objectpage->errors, 'errors');
     				$action='createpagefromclone';
    +
    +				$db->rollback();
     			}
     			else
     			{
    -				// TODO Switch on the new page ?
    +				$fileindex=$pathofwebsitenew.'/index.php';
    +				$filetpl=$pathofwebsitenew.'/page'.$resultpage->id.'.tpl.php';
    +				$filewrapper=$pathofwebsitenew.'/wrapper.php';
    +
    +				//var_dump($pathofwebsitenew);
    +				//var_dump($filetpl);
    +				//exit;
    +
    +				dolSavePageContent($filetpl, $tmpwebsite, $resultpage);
    +
    +				// Switch on the new page if web site of new page/container is same
    +				if (empty($newwebsiteid) || $newwebsiteid == $object->id)
    +				{
    +					$pageid = $resultpage->id;
    +				}
    +
    +				$db->commit();
     			}
     		}
     	}
    @@ -1178,7 +1376,7 @@ if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'conf
     			$objectpage->content = GETPOST('PAGE_CONTENT','none');
     
     			// Clean data. We remove all the head section.
    -			$objectpage->content = preg_replace('/<head>.*<\/head>/s', '', $objectpage->content);
    +			$objectpage->content = preg_replace('/<head>.*<\/head>/ims', '', $objectpage->content);
     			/* $objectpage->content = preg_replace('/<base\s+href=[\'"][^\'"]+[\'"]\s/?>/s', '', $objectpage->content); */
     
     
    @@ -1201,16 +1399,7 @@ if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'conf
     
     
     				// Now generate the master.inc.php page
    -				dol_syslog("We regenerate the master file");
    -				dol_delete_file($filemaster);
    -
    -				$mastercontent = '<?php'."\n";
    -				$mastercontent.= '// File generated to link to the master file'."\n";
    -				$mastercontent.= "if (! defined('USEDOLIBARRSERVER')) require_once '".DOL_DOCUMENT_ROOT."/master.inc.php';\n";
    -				$mastercontent.= '?>'."\n";
    -				$result = file_put_contents($filemaster, $mastercontent);
    -				if (! empty($conf->global->MAIN_UMASK))
    -					@chmod($filemaster, octdec($conf->global->MAIN_UMASK));
    +				$result = dolSaveMasterFile($filemaster);
     
     				if (! $result) setEventMessages('Failed to write file '.$filemaster, null, 'errors');
     
    @@ -1231,13 +1420,13 @@ if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'conf
     				if ($result)
     				{
     					setEventMessages($langs->trans("Saved"), null, 'mesgs');
    -					header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid);
    +					header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
     	   				exit;
     				}
     				else
     				{
     					setEventMessages('Failed to write file '.$filetpl, null, 'errors');
    -					header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid);
    +					header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
     	   				exit;
     				}
     			}
    @@ -1248,18 +1437,22 @@ if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'conf
     		}
     		else
     		{
    -			header("Location: ".$_SERVER["PHP_SELF"].'?website='.$website.'&pageid='.$pageid);
    +			header("Location: ".$_SERVER["PHP_SELF"].'?website='.$websitekey.'&pageid='.$pageid);
     			exit;
     		}
     	}
     	else
     	{
    -		if (! $error) setEventMessages($langs->trans("NoPageYet"), null, 'warnings');
    +		if (! $error)
    +		{
    +			setEventMessages($langs->trans("NoPageYet"), null, 'warnings');
    +			setEventMessages($langs->trans("YouCanCreatePageOrImportTemplate"), null, 'warnings');
    +		}
     	}
     }
     
     // Export site
    -if (GETPOST('exportsite','alpha'))
    +if ($action == 'exportsite')
     {
     	$fileofzip = $object->exportWebSite();
     
    @@ -1276,6 +1469,84 @@ if (GETPOST('exportsite','alpha'))
     	}
     }
     
    +// Import site
    +if ($action == 'importsiteconfirm')
    +{
    +	if (empty($_FILES))
    +	{
    +		setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("File")), null, 'errors');
    +		$action = 'importsite';
    +	}
    +	else
    +	{
    +		if (! empty($_FILES))
    +		{
    +			// Check symlink to medias and restore it if ko
    +			$pathtomedias=DOL_DATA_ROOT.'/medias';
    +			$pathtomediasinwebsite=$pathofwebsite.'/medias';
    +			if (! is_link(dol_osencode($pathtomediasinwebsite)))
    +			{
    +				dol_syslog("Create symlink for ".$pathtomedias." into name ".$pathtomediasinwebsite);
    +				dol_mkdir(dirname($pathtomediasinwebsite));     // To be sure dir for website exists
    +				$result = symlink($pathtomedias, $pathtomediasinwebsite);
    +				if (! $result)
    +				{
    +					setEventMessages($langs->trans("ErrorFieldToCreateSymLinkToMedias", $pathtomediasinwebsite, $pathtomedias), null, 'errors');
    +					$action = 'importsite';
    +				}
    +			}
    +
    +			if (is_array($_FILES['userfile']['tmp_name'])) $userfiles=$_FILES['userfile']['tmp_name'];
    +			else $userfiles=array($_FILES['userfile']['tmp_name']);
    +
    +			foreach($userfiles as $key => $userfile)
    +			{
    +				if (empty($_FILES['userfile']['tmp_name'][$key]))
    +				{
    +					$error++;
    +					if ($_FILES['userfile']['error'][$key] == 1 || $_FILES['userfile']['error'][$key] == 2){
    +						setEventMessages($langs->trans('ErrorFileSizeTooLarge'), null, 'errors');
    +						$action = 'importsite';
    +					}
    +					else {
    +						setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("File")), null, 'errors');
    +						$action = 'importsite';
    +					}
    +				}
    +			}
    +
    +			if (! $error)
    +			{
    +				$upload_dir = $conf->website->dir_temp;
    +				$result = dol_add_file_process($upload_dir, 1, -1, 'userfile', '');
    +
    +				// Get name of file (take last one if several name provided)
    +				$fileofzip = $upload_dir.'/unknown';
    +				foreach($_FILES as $key => $ifile)
    +				{
    +					foreach($ifile['name'] as $key2 => $ifile2)
    +					{
    +						$fileofzip = $upload_dir . '/' .$ifile2;
    +					}
    +				}
    +
    +				$result = $object->importWebSite($fileofzip);
    +				if ($result < 0)
    +				{
    +					setEventMessages($object->error, $object->errors, 'errors');
    +					$action = 'importsite';
    +				}
    +				else
    +				{
    +					header("Location: ".$_SERVER["PHP_SELF"].'?website='.$object->ref);
    +					exit();
    +				}
    +			}
    +		}
    +	}
    +}
    +
    +
     
     
     /*
    @@ -1350,6 +1621,10 @@ if ($action == 'edit')
     {
     	print '<input type="hidden" name="action" value="update">';
     }
    +if ($action == 'importsite')
    +{
    +	print '<input type="hidden" name="action" value="importsiteconfirm">';
    +}
     if ($action == 'file_manager')
     {
     	print '<input type="hidden" name="action" value="file_manager">';
    @@ -1367,7 +1642,7 @@ if (! GETPOST('hide_websitemenu'))
     //var_dump($objectpage);exit;
     print '<div class="centpercent websitebar">';
     
    -if (count($object->records) > 0)
    +if (count($object->records) > 0)	// There is at least one web site
     {
     	// ***** Part for web sites
     
    @@ -1388,10 +1663,10 @@ if (count($object->records) > 0)
     	$i=0;
     	foreach($object->records as $key => $valwebsite)
     	{
    -		if (empty($website)) $website=$valwebsite->ref;
    +		if (empty($websitekey)) $websitekey=$valwebsite->ref;
     
     		$out.='<option value="'.$valwebsite->ref.'"';
    -		if ($website == $valwebsite->ref) $out.=' selected';		// To preselect a value
    +		if ($websitekey == $valwebsite->ref) $out.=' selected';		// To preselect a value
     		$out.='>';
     		$out.=$valwebsite->ref;
     		$out.='</option>';
    @@ -1401,17 +1676,22 @@ if (count($object->records) > 0)
     	$out.=ajax_combobox('website');
     	print $out;
     	//print '<input type="submit" class="button" name="refreshsite" value="'.$langs->trans("Load").'">';
    -	print '<input type="image" class="valignbottom" src="'.img_picto('', 'refresh', '', 0, 1).'" name="refreshpage" value="'.$langs->trans("Load").'">';
    +	print '<input type="image" class="valignmiddle" src="'.img_picto('', 'refresh', '', 0, 1).'" name="refreshpage" value="'.$langs->trans("Load").'">';
     
     
    -	if ($website)
    +	if ($websitekey)
     	{
     		$virtualurl='';
    -		$dataroot=DOL_DATA_ROOT.'/website/'.$website;
    +		$dataroot=DOL_DATA_ROOT.'/website/'.$websitekey;
     		if (! empty($object->virtualhost)) $virtualurl=$object->virtualhost;
     	}
     
    -	if ($website && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone'))
    +
    +	$array=$objectpage->fetchAll($object->id, 'ASC,ASC', 'type_container,pageurl');
    +	if (! is_array($array) && $array < 0) dol_print_error('', $objectpage->error, $objectpage->errors);
    +	$atleastonepage=(is_array($array) && count($array) > 0);
    +
    +	if ($websitekey && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone'))
     	{
     		$disabled='';
     		if (empty($user->rights->website->write)) $disabled=' disabled="disabled"';
    @@ -1422,6 +1702,16 @@ if (count($object->records) > 0)
     		//print '<input type="submit" class="button"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("EditMenu")).'" name="editmenu">';
     		print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("CloneSite")).'" name="createfromclone">';
     		print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("ExportSite")).'" name="exportsite">';
    +		if (! $atleastonepage)
    +		{
    +			print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("ImportSite")).'" name="importsite">';
    +		}
    +		else
    +		{
    +			print '<input type="submit" class="button nobordertransp" disabled="disabled" value="'.dol_escape_htmltag($langs->trans("ImportSite")).'" name="importsite">';
    +		}
    +
    +		print '<input type="submit" class="buttonDelete" name="deletesite" value="'.$langs->trans("Delete").'"'.($atleastonepage?' disabled="disabled"':'').'>';
     
     		print ' &nbsp; ';
     
    @@ -1430,7 +1720,7 @@ if (count($object->records) > 0)
     		print '<script language="javascript">
     			jQuery(document).ready(function () {
                		jQuery(".button_file_manager").click(function () {
    -					var $dialog = $(\'<div></div>\').html(\'<iframe style="border: 0px;" src="'.DOL_URL_ROOT.'/website/index.php?hide_websitemenu=1&dol_hide_topmenu=1&dol_hide_leftmenu=1&file_manager=1&website='.$website.'&pageid='.$pageid.'" width="100%" height="100%"></iframe>\')
    +					var $dialog = $(\'<div></div>\').html(\'<iframe style="border: 0px;" src="'.DOL_URL_ROOT.'/website/index.php?hide_websitemenu=1&dol_hide_topmenu=1&dol_hide_leftmenu=1&file_manager=1&website='.$websitekey.'&pageid='.$pageid.'" width="100%" height="100%"></iframe>\')
     					.dialog({
     						autoOpen: false,
     						modal: true,
    @@ -1447,31 +1737,33 @@ if (count($object->records) > 0)
     
     	print '</div>';
     
    -	// Button for website
    +
    +	// Toolbar for websites
    +
     	print '<div class="websitetools">';
     
     	if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone')
     	{
     		$urlext=$virtualurl;
    -		$urlint=$urlwithroot.'/public/website/index.php?website='.$website;
    +		$urlint=$urlwithroot.'/public/website/index.php?website='.$websitekey;
     
     		$htmltext = $langs->trans("PreviewSiteServedByDolibarr", $langs->transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $urlint, $dataroot);
     		$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("ReadPerm"), DOL_DOCUMENT_ROOT);
    -		$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT);
    -		print '<a class="websitebuttonsitepreview" id="previewsite" href="'.$urlwithroot.'/public/website/index.php?website='.$website.'" target="tab'.$website.'" alt="'.dol_escape_htmltag($htmltext).'">';
    +		$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT.'/website<br>'.DOL_DATA_ROOT.'/medias');
    +		print '<a class="websitebuttonsitepreview" id="previewsite" href="'.$urlwithroot.'/public/website/index.php?website='.$websitekey.'" target="tab'.$websitekey.'" alt="'.dol_escape_htmltag($htmltext).'">';
     		print $form->textwithpicto('', $htmltext, 1, 'preview');
     		print '</a>';
     
     		print '<div class="websiteinputurl" id="websiteinputurl">';
     		print '<input type="text" id="previewsiteurl" class="minwidth200imp" name="previewsite" placeholder="'.$langs->trans("http://myvirtualhost").'" value="'.$virtualurl.'">';
    -		//print '<input type="submit" class="button" name="previewwebsite" target="tab'.$website.'" value="'.$langs->trans("ViewSiteInNewTab").'">';
    +		//print '<input type="submit" class="button" name="previewwebsite" target="tab'.$websitekey.'" value="'.$langs->trans("ViewSiteInNewTab").'">';
     		$htmltext =$langs->trans("SetHereVirtualHost", $dataroot);
     		$htmltext.='<br>';
    +		$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("ReadPerm"), DOL_DOCUMENT_ROOT);
    +		$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT.'/website<br>'.DOL_DATA_ROOT.'/medias');
    +		$htmltext.='<br>';
     		$htmltext.='<br>';
     		$htmltext.=$langs->trans("YouCanAlsoTestWithPHPS", $dataroot);
    -		$htmltext.='<br>';
    -		$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("ReadPerm"), DOL_DOCUMENT_ROOT);
    -		$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT);
     		print $form->textwithpicto('', $htmltext, 1, 'help', '', 0, 2, 'helpvirtualhost');
     		print '</div>';
     
    @@ -1481,7 +1773,7 @@ if (count($object->records) > 0)
     			$htmltext.='<br>';
     			$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("ReadPerm"), DOL_DOCUMENT_ROOT);
     			$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT);
    -			print '<span class="websitebuttonsitepreview websitebuttonsitepreviewdisabled cursornotallowed" id="previewsiteextdisabled" href="" target="tab'.$website.'ext" alt="'.dol_escape_htmltag($langs->trans("PreviewSiteServedByWebServer", $langs->transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $dataroot, $urlext)).'">';
    +			print '<span class="websitebuttonsitepreview websitebuttonsitepreviewdisabled cursornotallowed" id="previewsiteextdisabled" href="" target="tab'.$websitekey.'ext" alt="'.dol_escape_htmltag($langs->trans("PreviewSiteServedByWebServer", $langs->transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $dataroot, $urlext)).'">';
     			print $form->textwithpicto('', $htmltext, 1, 'preview_ext');
     			print '</span>';
     		}
    @@ -1490,8 +1782,8 @@ if (count($object->records) > 0)
     			$htmltext = $langs->trans("PreviewSiteServedByWebServer", $langs->transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $dataroot, $urlext?$urlext:'<span class="error">'.$langs->trans("VirtualHostUrlNotDefined").'</span>');
     			$htmltext.='<br>';
     			$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("ReadPerm"), DOL_DOCUMENT_ROOT);
    -			$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT);
    -			print '<a class="websitebuttonsitepreview'.($urlext?'':' websitebuttonsitepreviewdisabled cursornotallowed').'" id="previewsiteext" href="'.$urlext.'" target="tab'.$website.'ext" alt="'.dol_escape_htmltag($langs->trans("PreviewSiteServedByWebServer", $langs->transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $dataroot, $urlext)).'">';
    +			$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT.'/website<br>'.DOL_DATA_ROOT.'/medias');
    +			print '<a class="websitebuttonsitepreview'.($urlext?'':' websitebuttonsitepreviewdisabled cursornotallowed').'" id="previewsiteext" href="'.$urlext.'" target="tab'.$websitekey.'ext" alt="'.dol_escape_htmltag($langs->trans("PreviewSiteServedByWebServer", $langs->transnoentitiesnoconv("Site"), $langs->transnoentitiesnoconv("Site"), $dataroot, $urlext)).'">';
     			print $form->textwithpicto('', $htmltext, 1, 'preview_ext');
     			print '</a>';
     		}
    @@ -1507,16 +1799,12 @@ if (count($object->records) > 0)
     	print '</div>';
     
     
    -	// ***** Part for pages
    +	// Toolbar for pages
     
    -	if ($website && ! in_array($action, array('editcss','editmenu')))
    +	if ($websitekey && ! in_array($action, array('editcss','editmenu','importsite')))
     	{
     		print '</div>';	// Close current websitebar to open a new one
     
    -		$array=$objectpage->fetchAll($object->id, 'ASC,ASC', 'type_container,pageurl');
    -		if (! is_array($array) && $array < 0) dol_print_error('', $objectpage->error, $objectpage->errors);
    -		$atleastonepage=(is_array($array) && count($array) > 0);
    -
     		print '<div class="centpercent websitebar"'.($style?' style="'.$style.'"':'').'">';
     
     		print '<div class="websiteselection hideonsmartphoneimp minwidth100 tdoverflowmax100">';
    @@ -1551,7 +1839,7 @@ if (count($object->records) > 0)
     					$out.='<option value="'.$key.'"';
     					if ($pageid > 0 && $pageid == $key) $out.=' selected';		// To preselect a value
     					$out.='>';
    -					$out.='['.$valpage->type_container.' '.$valpage->id.'] ';
    +					$out.='['.$valpage->type_container.' '.sprintf("%03d", $valpage->id).'] ';
     					$out.=$valpage->pageurl.' - '.$valpage->title;
     					if ($object->fk_default_home && $key == $object->fk_default_home) $out.=' ('.$langs->trans("HomePage").')';
     					$out.='</option>';
    @@ -1568,7 +1856,7 @@ if (count($object->records) > 0)
     		}
     
     		//print '<input type="submit" class="button" name="refreshpage" value="'.$langs->trans("Load").'"'.($atleastonepage?'':' disabled="disabled"').'>';
    -		print '<input type="image" class="valignbottom" src="'.img_picto('', 'refresh', '', 0, 1).'" name="refreshpage" value="'.$langs->trans("Load").'"'.($atleastonepage?'':' disabled="disabled"').'>';
    +		print '<input type="image" class="valignmiddle" src="'.img_picto('', 'refresh', '', 0, 1).'" name="refreshpage" value="'.$langs->trans("Load").'"'.($atleastonepage?'':' disabled="disabled"').'>';
     
     
     		// Print nav arrows
    @@ -1600,10 +1888,10 @@ if (count($object->records) > 0)
     			else dol_print_error($db);
     		}
     
    -		if ($pagepreviousid) print '<a href="'.$_SERVER['PHP_SELF'].'?website='.urlencode($object->ref).'&pageid='.$pagepreviousid.'&action='.$action.'">'.img_previous($langs->trans("PreviousContainer")).'</a>';
    -		else print '<span class="opacitymedium">'.img_previous($langs->trans("PreviousContainer")).'</span>';
    -		if ($pagenextid) print '<a href="'.$_SERVER['PHP_SELF'].'?website='.urlencode($object->ref).'&pageid='.$pagenextid.'&action='.$action.'">'.img_next($langs->trans("NextContainer")).'</a>';
    -		else print '<span class="opacitymedium">'.img_next($langs->trans("NextContainer")).'</span>';
    +		if ($pagepreviousid) print '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?website='.urlencode($object->ref).'&pageid='.$pagepreviousid.'&action='.$action.'">'.img_previous($langs->trans("PreviousContainer")).'</a>';
    +		else print '<span class="valignmiddle opacitymedium">'.img_previous($langs->trans("PreviousContainer")).'</span>';
    +		if ($pagenextid) print '<a class="valignmiddle" href="'.$_SERVER['PHP_SELF'].'?website='.urlencode($object->ref).'&pageid='.$pagenextid.'&action='.$action.'">'.img_next($langs->trans("NextContainer")).'</a>';
    +		else print '<span class="valignmiddle opacitymedium">'.img_next($langs->trans("NextContainer")).'</span>';
     
     		$websitepage = new WebSitePage($db);
     		if ($pageid > 0 && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone'))
    @@ -1636,11 +1924,13 @@ if (count($object->records) > 0)
     				// Confirmation to clone
     				if ($action == 'createpagefromclone') {
     					// Create an array for form
    +					$preselectedlanguage = GETPOST('newlang', 'az09') ? GETPOST('newlang', 'az09') : ($objectpage->lang ? $objectpage->lang : $langs->defaultlang);
     					$formquestion = array(
    -						array('type' => 'text', 'name' => 'pageurl', 'label'=> $langs->trans("WEBSITE_PAGENAME")  ,'value'=> 'copy_of_'.$objectpage->pageurl),
    -						array('type' => 'checkbox', 'name' => 'is_a_translation', 'label' => $langs->trans("PageIsANewTranslation"), 'value' => 0),
    -						array('type' => 'other','name' => 'newlang','label' => $langs->trans("Language"), 'value' => $formadmin->select_language(GETPOST('newlang', 'az09')?GETPOST('newlang', 'az09'):$langs->defaultlang, 'newlang', 0, null, 1, 0, 0, 'minwidth200')),
    -						array('type' => 'other','name' => 'newwebsite','label' => $langs->trans("WebSite"), 'value' => $formwebsite->selectWebsite($object->id, 'newwebsite', 0)),
    +						array('type' => 'hidden', 'name' => 'sourcepageurl', 'value'=> $objectpage->pageurl),
    +						array('type' => 'checkbox', 'tdclass'=>'maxwidth200', 'name' => 'is_a_translation', 'label' => $langs->trans("PageIsANewTranslation"), 'value' => 0),
    +						array('type' => 'other','name' => 'newlang', 'label' => $langs->trans("Language"), 'value' => $formadmin->select_language($preselectedlanguage, 'newlang', 0, null, 1, 0, 0, 'minwidth200', 0, 1)),
    +						array('type' => 'other','name' => 'newwebsite', 'label' => $langs->trans("WebSite"), 'value' => $formwebsite->selectWebsite($object->id, 'newwebsite', 0)),
    +						array('type' => 'text', 'tdclass'=>'maxwidth200 fieldrequired', 'name' => 'pageurl', 'label'=> $langs->trans("WEBSITE_PAGENAME"), 'value'=> 'copy_of_'.$objectpage->pageurl),
     					);
     
     				   	$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?website='.$object->ref.'&pageid=' . $pageid, $langs->trans('ClonePage'), '', 'confirm_createpagefromclone', $formquestion, 0, 1, 300, 550);
    @@ -1651,16 +1941,51 @@ if (count($object->records) > 0)
     				print ' &nbsp; ';
     
     				print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("EditPageMeta")).'" name="editmeta">';
    +
    +				print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("EditHTMLSource")).'" name="editsource">';
    +
    +				print '<!-- button EditInLine and ShowSubcontainers -->'."\n";
    +				print '<div class="websiteselectionsection inline-block">';
    +				print '<div class="inline-block">';
    +				print $langs->trans("EditInLine");
     				if ($websitepage->grabbed_from)
     				{
    -					print '<input type="submit" class="button nobordertransp" disabled="disabled" title="'.dol_escape_htmltag($langs->trans("OnlyEditionOfSourceForGrabbedContent")).'" value="'.dol_escape_htmltag($langs->trans("EditWithEditor")).'" name="editcontent">';
    +					//print '<input type="submit" class="button nobordertransp" disabled="disabled" title="'.dol_escape_htmltag($langs->trans("OnlyEditionOfSourceForGrabbedContent")).'" value="'.dol_escape_htmltag($langs->trans("EditWithEditor")).'" name="editcontent">';
    +					print '<a class="button nobordertransp opacitymedium nohoverborder"'.$disabled.' href="#" disabled="disabled" title="'.dol_escape_htmltag($langs->trans("OnlyEditionOfSourceForGrabbedContent")).'">'.img_picto($langs->trans("OnlyEditionOfSourceForGrabbedContent"),'switch_off','',false,0,0,'','nomarginleft').'</a>';
     				}
     				else
     				{
    -					print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("EditWithEditor")).'" name="editcontent">';
    +					//print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("EditWithEditor")).'" name="editcontent">';
    +					if (empty($conf->global->WEBSITE_EDITINLINE))
    +					{
    +						print '<a class="button nobordertransp nohoverborder"'.$disabled.' href="'.$_SERVER["PHP_SELF"].'?website='.$object->ref.'&pageid='.$websitepage->id.'&action=seteditinline">'.img_picto($langs->trans("EditInLineOff"),'switch_off','',false,0,0,'','nomarginleft').'</a>';
    +					}
    +					else
    +					{
    +						print '<a class="button nobordertransp nohoverborder"'.$disabled.' href="'.$_SERVER["PHP_SELF"].'?website='.$object->ref.'&pageid='.$websitepage->id.'&action=unseteditinline">'.img_picto($langs->trans("EditInLineOn"),'switch_on','',false,0,0,'','nomarginleft').'</a>';
    +					}
     				}
    +				print '</div>';
    +				print '<div class="inline-block">';
    +				print $langs->trans("ShowSubcontainers");
    +				/*if ($websitepage->grabbed_from)
    +				{
    +					print '<a class="button nobordertransp opacitymedium nohoverborder"'.$disabled.' href="#" disabled="disabled" title="'.dol_escape_htmltag($langs->trans("OnlyEditionOfSourceForGrabbedContent")).'">'.img_picto($langs->trans("OnlyEditionOfSourceForGrabbedContent"),'switch_off','',false,0,0,'','nomarginleft').'</a>';
    +				}
    +				else
    +				{*/
    +					if (empty($conf->global->WEBSITE_SUBCONTAINERSINLINE))
    +					{
    +						print '<a class="button nobordertransp nohoverborder"'.$disabled.' href="'.$_SERVER["PHP_SELF"].'?website='.$object->ref.'&pageid='.$websitepage->id.'&action=setshowsubcontainers">'.img_picto($langs->trans("ShowSubContainersOff"),'switch_off','',false,0,0,'','nomarginleft').'</a>';
    +					}
    +					else
    +					{
    +						print '<a class="button nobordertransp nohoverborder"'.$disabled.' href="'.$_SERVER["PHP_SELF"].'?website='.$object->ref.'&pageid='.$websitepage->id.'&action=unsetshowsubcontainers">'.img_picto($langs->trans("ShowSubContainersOn"),'switch_on','',false,0,0,'','nomarginleft').'</a>';
    +					}
    +				/*}*/
    +				print '</div>';
    +				print '</div>';
     
    -				print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("EditHTMLSource")).'" name="editsource">';
     				if ($object->fk_default_home > 0 && $pageid == $object->fk_default_home) print '<input type="submit" class="button nobordertransp" disabled="disabled" value="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'" name="setashome">';
     				else print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("SetAsHomePage")).'" name="setashome">';
     				print '<input type="submit" class="button nobordertransp"'.$disabled.' value="'.dol_escape_htmltag($langs->trans("ClonePage")).'" name="createpagefromclone">';
    @@ -1674,14 +1999,14 @@ if (count($object->records) > 0)
     
     		if ($pageid > 0 && ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone'))
     		{
    -			$realpage=$urlwithroot.'/public/website/index.php?website='.$website.'&pageref='.$websitepage->pageurl;
    +			$realpage=$urlwithroot.'/public/website/index.php?website='.$websitekey.'&pageref='.$websitepage->pageurl;
     			$pagealias = $websitepage->pageurl;
     
     			$htmltext = $langs->trans("PreviewSiteServedByDolibarr", $langs->transnoentitiesnoconv("Page"), $langs->transnoentitiesnoconv("Page"), $realpage, $dataroot);
     			$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("ReadPerm"), DOL_DOCUMENT_ROOT);
    -			$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT);
    +			$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT.'/website<br>'.DOL_DATA_ROOT.'/medias');
     
    -			print '<a class="websitebuttonsitepreview" id="previewpage" href="'.$realpage.'&nocache='.dol_now().'" class="button" target="tab'.$website.'" alt="'.dol_escape_htmltag($htmltext).'">';
    +			print '<a class="websitebuttonsitepreview" id="previewpage" href="'.$realpage.'&nocache='.dol_now().'" class="button" target="tab'.$websitekey.'" alt="'.dol_escape_htmltag($htmltext).'">';
     			print $form->textwithpicto('', $htmltext, 1, 'preview');
     			print '</a>';       // View page in new Tab
     
    @@ -1692,14 +2017,14 @@ if (count($object->records) > 0)
     			print '</div>';
     
     			$urlext=$virtualurl.'/'.$pagealias.'.php';
    -			$urlint=$urlwithroot.'/public/website/index.php?website='.$website;
    +			$urlint=$urlwithroot.'/public/website/index.php?website='.$websitekey;
     
     			$htmltext = $langs->trans("PreviewSiteServedByWebServer", $langs->transnoentitiesnoconv("Page"), $langs->transnoentitiesnoconv("Page"), $dataroot, $virtualurl?$urlext:'<span class="error">'.$langs->trans("VirtualHostUrlNotDefined").'</span>');
     
    -			print '<a class="websitebuttonsitepreview'.($virtualurl?'':' websitebuttonsitepreviewdisabled cursornotallowed').'" id="previewpageext" href="'.$urlext.'" target="tab'.$website.'ext" alt="'.dol_escape_htmltag($htmltext).'">';
    +			print '<a class="websitebuttonsitepreview'.($virtualurl?'':' websitebuttonsitepreviewdisabled cursornotallowed').'" id="previewpageext" href="'.$urlext.'" target="tab'.$websitekey.'ext" alt="'.dol_escape_htmltag($htmltext).'">';
     			print $form->textwithpicto('', $htmltext, 1, 'preview_ext');
     			print '</a>';
    -			//print '<input type="submit" class="button" name="previewpage" target="tab'.$website.'"value="'.$langs->trans("ViewPageInNewTab").'">';
    +			//print '<input type="submit" class="button" name="previewpage" target="tab'.$websitekey.'"value="'.$langs->trans("ViewPageInNewTab").'">';
     
     			// TODO Add js to save alias like we save virtual host name and use dynamic virtual host for url of id=previewpageext
     		}
    @@ -1890,7 +2215,7 @@ if ($action == 'editcss')
     	print '<tr><td class="titlefieldcreate">';
     	print $langs->trans('WebSite');
     	print '</td><td>';
    -	print $website;
    +	print $websitekey;
     	print '</td></tr>';
     
     	// CSS file
    @@ -1971,7 +2296,7 @@ if ($action == 'createsite')
     
         dol_fiche_head($head, 'card', $langs->trans("AddSite"), -1, 'globe');
         */
    -	if ($action == 'createcontainer') print_fiche_titre($langs->trans("AddSite"));
    +	if ($action == 'createcontainer') print load_fiche_titre($langs->trans("AddSite"));
     
     	print '<!-- Add site -->'."\n";
     	//print '<div class="fichecenter">';
    @@ -1997,7 +2322,7 @@ if ($action == 'createsite')
     	$htmltext = $langs->trans("SetHereVirtualHost", DOL_DATA_ROOT.'/website/<i>websiteref</i>');
     	$htmltext.='<br>';
     	$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("ReadPerm"), DOL_DOCUMENT_ROOT);
    -	$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT);
    +	$htmltext.='<br>'.$langs->trans("CheckVirtualHostPerms", $langs->transnoentitiesnoconv("WritePerm"), DOL_DATA_ROOT.'/website<br>'.DOL_DATA_ROOT.'/medias');
     
     	print $form->textwithpicto($langs->trans('Virtualhost'), $htmltext, 1, 'help', '', 0, 2, 'tooltipvirtual');
     	print '</td><td>';
    @@ -2027,6 +2352,27 @@ if ($action == 'createsite')
     	print '<br>';
     }
     
    +if ($action == 'importsite')
    +{
    +	print '<div class="fiche">';
    +
    +	print '<br>';
    +
    +	print load_fiche_titre($langs->trans("ImportSite"));
    +
    +	dol_fiche_head(array(), '0', '', -1);
    +
    +	print $langs->trans("ZipOfWebsitePackageToImport").'<br><br>';
    +
    +	print '<input class="flat minwidth400" type="file" name="userfile[]" accept=".zip">';
    +	print '<input type="submit" class="button" name="buttonsubmitimportfile" value="'.dol_escape_htmltag($langs->trans("Upload")).'">';
    +
    +	dol_fiche_end();
    +
    +	print '</div>';
    +
    +	print '<br>';
    +}
     
     if ($action == 'editmeta' || $action == 'createcontainer')
     {
    @@ -2044,7 +2390,7 @@ if ($action == 'editmeta' || $action == 'createcontainer')
     
         dol_fiche_head($head, 'card', $langs->trans("AddPage"), -1, 'globe');
         */
    -	if ($action == 'createcontainer') print_fiche_titre($langs->trans("AddPage"));
    +	if ($action == 'createcontainer') print load_fiche_titre($langs->trans("AddPage"));
     
     	print '<!-- Edit or create page/container -->'."\n";
     	//print '<div class="fichecenter">';
    @@ -2058,6 +2404,7 @@ if ($action == 'editmeta' || $action == 'createcontainer')
     		print '<tr><td class="titlefield">';
     		print $langs->trans("URL");
     		print '</td><td>';
    +		print info_admin($langs->trans("OnlyEditionOfSourceForGrabbedContentFuture"), 0, 0, 'warning');
     		print '<input class="flat minwidth300" type="text" name="externalurl" value="'.dol_escape_htmltag(GETPOST('externalurl','alpha')).'" placeholder="https://externalsite/pagetofetch"> ';
     		print '<input class="flat paddingtop" type="checkbox" name="grabimages" value="1" checked="checked"> '.$langs->trans("GrabImagesInto");
     		print ' ';
    @@ -2066,7 +2413,6 @@ if ($action == 'editmeta' || $action == 'createcontainer')
     		print $form->selectarray('grabimagesinto', $arraygrabimagesinto, GETPOSTISSET('grabimagesinto')?GETPOST('grabimagesinto'):'root');
     		print '<br>';
     		print '<input class="button" style="margin-top: 5px" type="submit" name="fetchexternalurl" value="'.dol_escape_htmltag($langs->trans("FetchAndCreate")).'">';
    -		print '<br>'.info_admin($langs->trans("OnlyEditionOfSourceForGrabbedContentFuture"), 0, 0, '1');
     		print '</td></tr>';
     		print '</table>';
     
    @@ -2086,9 +2432,9 @@ if ($action == 'editmeta' || $action == 'createcontainer')
     		print '</td></tr>';
     
     		print '<tr><td class="titlefield">';
    -		print $langs->trans('WEBSITE_PAGEURL');
    +		print $langs->trans('InternalURLOfPage');
     		print '</td><td>';
    -		print '/public/website/index.php?website='.urlencode($website).'&pageid='.urlencode($pageid);
    +		print '/public/website/index.php?website='.urlencode($websitekey).'&pageid='.urlencode($pageid);
     		print '</td></tr>';
     
     		/*
    @@ -2107,10 +2453,15 @@ if ($action == 'editmeta' || $action == 'createcontainer')
     		$pagekeywords=$objectpage->keywords;
     		$pagelang=$objectpage->lang;
     		$pagehtmlheader=$objectpage->htmlheader;
    +		$pagedatecreation=$objectpage->date_creation;
    +		$pagedatemodification=$objectpage->date_modification;
    +		$pageauthorid=$objectpage->fk_user_create;
     	}
     	else
     	{
     		$type_container = 'page';
    +		$pagedatecreation=dol_now();
    +		$pageauthorid=$user->id;
     	}
     	if (GETPOST('WEBSITE_TITLE','alpha'))       $pagetitle=GETPOST('WEBSITE_TITLE','alpha');
     	if (GETPOST('WEBSITE_PAGENAME','alpha'))    $pageurl=GETPOST('WEBSITE_PAGENAME','alpha');
    @@ -2134,6 +2485,7 @@ if ($action == 'editmeta' || $action == 'createcontainer')
     	print '<input type="text" class="flat minwidth300" name="WEBSITE_PAGENAME" id="WEBSITE_PAGENAME" value="'.dol_escape_htmltag($pageurl).'">';
     	print '</td></tr>';
     
    +	// Type of container
     	print '<tr><td class="titlefield fieldrequired">';
     	print $langs->trans('WEBSITE_TYPE_CONTAINER');
     	print '</td><td>';
    @@ -2167,6 +2519,53 @@ if ($action == 'editmeta' || $action == 'createcontainer')
     	print $formadmin->select_language($pagelang?$pagelang:$langs->defaultlang, 'WEBSITE_LANG', 0, null, '1');
     	print '</td></tr>';
     
    +	if ($action != 'createcontainer')
    +	{
    +		// Translation of
    +		if ($objectpage->fk_page > 0)
    +		{
    +			print '<tr><td>';
    +			print $langs->trans('ThisPageIsTranslationOf');
    +			print '</td><td>';
    +			$sourcepage=new WebsitePage($db);
    +			$result = $sourcepage->fetch($objectpage->fk_page);
    +			if ($result == 0)	// not found, we can reset value
    +			{
    +
    +			}
    +			elseif ($result > 0)
    +			{
    +				print $sourcepage->getNomUrl(1);
    +			}
    +			print '</td></tr>';
    +		}
    +
    +		// Has translation pages
    +		$sql='SELECT rowid, lang from '.MAIN_DB_PREFIX.'website_page where fk_page = '.$objectpage->id;
    +		$resql = $db->query($sql);
    +		if ($resql)
    +		{
    +			$num_rows = $db->num_rows($resql);
    +			if ($num_rows > 0)
    +			{
    +				print '<tr><td>';
    +				print $langs->trans('ThisPageHasTranslationPages');
    +				print '</td><td>';
    +				$i=0;
    +				while ($obj = $db->fetch_object($resql))
    +				{
    +					$tmppage=new WebsitePage($db);
    +					$tmppage->fetch($obj->rowid);
    +					if ($i > 0) print ' - ';
    +					print $tmppage->getNomUrl(1).' ('.$tmppage->lang.')';
    +					$i++;
    +				}
    +				print '</td></tr>';
    +			}
    +		}
    +		else dol_print_error($db);
    +	}
    +
     	print '<tr><td class="titlefieldcreate">';
     	$htmlhelp=$langs->trans("WEBSITE_ALIASALTDesc");
     	print $form->textwithpicto($langs->trans('WEBSITE_ALIASALT'), $htmlhelp, 1, 'help', '', 0, 2, 'htmlheadertooltip');
    @@ -2174,13 +2573,37 @@ if ($action == 'editmeta' || $action == 'createcontainer')
     	print '<input type="text" class="flat minwidth300" name="WEBSITE_ALIASALT" value="'.dol_escape_htmltag($pagealiasalt).'">';
     	print '</td></tr>';
     
    +	$fuser=new User($db);
    +	$fuser->fetch($pageauthorid);
    +
    +	print '<tr><td>';
    +	print $langs->trans('Author');
    +	print '</td><td>';
    +	if ($pageauthorid > 0) print $fuser->getNomUrl(1);
    +	print '</td></tr>';
    +
    +	print '<tr><td>';
    +	print $langs->trans('DateCreation');
    +	print '</td><td>';
    +	print dol_print_date($pagedatecreation, 'dayhour');
    +	print '</td></tr>';
    +
    +	if ($action != 'createcontainer')
    +	{
    +		print '<tr><td>';
    +		print $langs->trans('DateModification');
    +		print '</td><td>';
    +		print dol_print_date($pagedatemodification, 'dayhour');
    +		print '</td></tr>';
    +	}
    +
     	print '<tr><td class="tdhtmlheader tdtop">';
     	$htmlhelp=$langs->trans("EditTheWebSiteForACommonHeader").'<br><br>';
     	$htmlhelp=$langs->trans("Example").' :<br>';
     	$htmlhelp.=dol_htmlentitiesbr($htmlheadercontentdefault);
     	print $form->textwithpicto($langs->trans('HtmlHeaderPage'), $htmlhelp, 1, 'help', '', 0, 2, 'htmlheadertooltip');
     	print '</td><td>';
    -	$doleditor=new DolEditor('htmlheader', $pagehtmlheader, '', '180', 'ace', 'In', true, false, 'ace', 0, '100%', '');
    +	$doleditor=new DolEditor('htmlheader', $pagehtmlheader, '', '120', 'ace', 'In', true, false, 'ace', ROWS_3, '100%', '');
     	print $doleditor->Create(1, '', true, 'HTML Header', 'html');
     	print '</td></tr>';
     
    @@ -2235,7 +2658,6 @@ if ($action == 'editfile' || $action == 'file_manager')
     	include DOL_DOCUMENT_ROOT.'/core/tpl/filemanager.tpl.php';
     
     	print '</div>';
    -
     }
     
     if ($action == 'editmenu')
    @@ -2246,31 +2668,34 @@ if ($action == 'editmenu')
     
     if ($action == 'editsource')
     {
    -	/*
    -	 * Editing with source editor
    -	 */
    +	// Editing with source editor
     
     	$contentforedit = '';
    -	/*$contentforedit.='<style scoped>'."\n";        // "scoped" means "apply to parent element only". Not yet supported by browsers
    -	 $contentforedit.=$csscontent;
    -	 $contentforedit.='</style>'."\n";*/
    +	//$contentforedit.='<style scoped>'."\n";        // "scoped" means "apply to parent element only". Not yet supported by browsers
    +	//$contentforedit.=$csscontent;
    +	//$contentforedit.='</style>'."\n";
     	$contentforedit .= $objectpage->content;
    -
    +	//var_dump($_SESSION["dol_screenheight"]);
    +	$maxheightwin=480;
    +	if (isset($_SESSION["dol_screenheight"]))
    +	{
    +		if ($_SESSION["dol_screenheight"] > 680) $maxheightwin = $_SESSION["dol_screenheight"]-400;
    +		if ($_SESSION["dol_screenheight"] > 800) $maxheightwin = $_SESSION["dol_screenheight"]-490;
    +	}
    +	//var_dump($_SESSION["dol_screenheight"]);
     	require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
    -	$doleditor=new DolEditor('PAGE_CONTENT',$contentforedit,'',500,'Full','',true,true,'ace',ROWS_5,'90%');
    +	$doleditor=new DolEditor('PAGE_CONTENT',$contentforedit,'',$maxheightwin,'Full','',true,true,'ace',ROWS_5,'40%');
     	$doleditor->Create(0, '', false, 'HTML Source', 'php');
     }
     
    -if ($action == 'editcontent')
    +/*if ($action == 'editcontent')
     {
    -	/*
    -     * Editing with default ckeditor
    -     */
    +	// Editing with default ckeditor
     
     	$contentforedit = '';
    -	/*$contentforedit.='<style scoped>'."\n";        // "scoped" means "apply to parent element only". Not yet supported by browsers
    -    $contentforedit.=$csscontent;
    -    $contentforedit.='</style>'."\n";*/
    +	//$contentforedit.='<style scoped>'."\n";        // "scoped" means "apply to parent element only". Not yet supported by browsers
    +    //$contentforedit.=$csscontent;
    +    //$contentforedit.='</style>'."\n";
     	$contentforedit .= $objectpage->content;
     
     	$contentforedit = preg_replace('/(<img.*src=")(?!http)/', '\1'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file=', $contentforedit, -1, $nbrep);
    @@ -2278,40 +2703,50 @@ if ($action == 'editcontent')
     	require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
     	$doleditor=new DolEditor('PAGE_CONTENT',$contentforedit,'',500,'Full','',true,true,true,ROWS_5,'90%');
     	$doleditor->Create(0, '', false);
    -}
    +}*/
     
     print "</div>\n</form>\n";
     
     
    -
     if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpagefromclone')
     {
     	if ($pageid > 0)
     	{
    +		// $filejs
    +		// $filecss
    +		// $filephp
    +
     		// Ouput page under the Dolibarr top menu
     		$objectpage->fetch($pageid);
    -		$csscontent = @file_get_contents($filecss);
     		$jscontent = @file_get_contents($filejs);
     
    -		$out = '<!-- Page content '.$filetpl.' : Div with (CSS Of website from file + Style/htmlheader of page from database + Page content from database) -->'."\n";
    +		$out = '<!-- Page content '.$filetpl.' : Div with (CSS Of website from file + Style/htmlheader of page from database + Page content from database or by include if WEBSITE_SUBCONTAINERSINLINE is on) -->'."\n";
     
     		// Include a html so we can benefit of the header of page.
     		// Note: We can't use iframe as it can be used to include another external html file
     		// Note: We can't use frame as it is deprecated.
    +		/*if ($includepageintoaframeoradiv == 'iframe')
    +		{
    +			$out .= "<iframe><body></html>";
    +		}*/
     		$out.="\n<html><head>\n";
     		$out.=dolWebsiteReplacementOfLinks($object, $objectpage->htmlheader, 1);
     		$out.="</head>\n";
     		$out.="\n<body>";
     
    -		$out.='<div id="websitecontentundertopmenu" class="websitecontentundertopmenu">'."\n";
     
    -		// Note: <div> or <section> with contenteditable="true" inside this can be edited with inline ckeditor
    +		$out.='<div id="websitecontentundertopmenu" class="websitecontentundertopmenu boostrap-iso">'."\n";
     
     		// REPLACEMENT OF LINKS When page called by website editor
     
     		$out.='<style scoped>'."\n";        // "scoped" means "apply to parent element only". No more supported by browsers, snif !
     		$tmpout='';
     		$tmpout.= '/* Include website CSS file */'."\n";
    +		//$csscontent = @file_get_contents($filecss);
    +		ob_start();
    +		include $filecss;
    +		$csscontent = ob_get_contents();
    +		ob_end_clean();
     		$tmpout.= dolWebsiteReplacementOfLinks($object, $csscontent, 1);
     		$tmpout.= '/* Include style from the HTML header of page */'."\n";
     		// Clean the html header of page to get only <style> content
    @@ -2329,12 +2764,38 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa
     		$out.=$tmpout;
     		$out.='</style>'."\n";
     
    +		// Note: <div> or <section> with contenteditable="true" inside this can be edited with inline ckeditor
    +
     		// Do not enable the contenteditable when page was grabbed, ckeditor is removing span and adding borders,
     		// so editable will be available only from container created from scratch
     		//$out.='<div id="bodywebsite" class="bodywebsite"'.($objectpage->grabbed_from ? ' contenteditable="true"' : '').'>'."\n";
    -		$out.='<div id="bodywebsite" class="bodywebsite">'."\n";
    +		$out.='<div id="divbodywebsite" class="bodywebsite">'."\n";
     
    -		$out.=dolWebsiteReplacementOfLinks($object, $objectpage->content)."\n";
    +		$newcontent = $objectpage->content;
    +
    +		// If mode WEBSITE_SUBCONTAINERSINLINE is on
    +		if (! empty($conf->global->WEBSITE_SUBCONTAINERSINLINE))
    +		{
    +			define('USEDOLIBARREDITOR', 1);
    +			//var_dump($filetpl);
    +			$filephp = $filetpl;
    +			ob_start();
    +			include $filephp;
    +			$newcontent = ob_get_contents();
    +			ob_end_clean();
    +		}
    +
    +		// Change the contenteditable to "true" or "false" when mode Edit Inline is on or off
    +		if (empty($conf->global->WEBSITE_EDITINLINE))
    +		{
    +			$newcontent = preg_replace('/(div|section)(\s[^\>]*)contenteditable="true"/', '\1\2', $newcontent);
    +		}
    +		else
    +		{
    +			// TODO Add the contenteditable="true" when mode Edit Inline is on
    +		}
    +
    +		$out.=dolWebsiteReplacementOfLinks($object, $newcontent)."\n";
     
     		$out.='</div>';
     
    @@ -2348,9 +2809,6 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa
     
     		$out.= "\n".'<!-- End page content '.$filetpl.' -->'."\n\n";
     
    -		// For jqueryscoped (does not work as expected)
    -		//$out.="<script>$.scoped();</script>";
    -
     		print $out;
     
     		/*file_put_contents($filetpl, $out);
    @@ -2371,18 +2829,16 @@ if ($action == 'preview' || $action == 'createfromclone' || $action == 'createpa
             //include_once $original_file_osencoded;
             */
     
    -		/*print '<iframe class="websiteiframenoborder centpercent" src="'.DOL_URL_ROOT.'/public/website/index.php?website='.$website.'&pageid='.$pageid.'"/>';
    +		/*print '<iframe class="websiteiframenoborder centpercent" src="'.DOL_URL_ROOT.'/public/website/index.php?website='.$websitekey.'&pageid='.$pageid.'"/>';
             print '</iframe>';*/
     	}
     	else
     	{
    -		print '<br><br><div class="center">'.$langs->trans("PreviewOfSiteNotYetAvailable", $website).'</center><br><br><br>';
    +		print '<br><br><div class="center">'.$langs->trans("PreviewOfSiteNotYetAvailable", $object->ref).'</center><br><br><br>';
     		print '<div class="center"><div class="logo_setup"></div></div>';
     	}
     }
     
    -
    -
    +// End of page
     llxFooter();
    -
     $db->close();
    diff --git a/htdocs/website/websiteaccount_card.php b/htdocs/website/websiteaccount_card.php
    index 9a1ad910672..24f87678505 100644
    --- a/htdocs/website/websiteaccount_card.php
    +++ b/htdocs/website/websiteaccount_card.php
    @@ -22,24 +22,11 @@
      */
     
     // Load Dolibarr environment
    -$res=0;
    -// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined)
    -if (! $res && ! empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) $res=@include($_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php");
    -// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
    -$tmp=empty($_SERVER['SCRIPT_FILENAME'])?'':$_SERVER['SCRIPT_FILENAME'];$tmp2=realpath(__FILE__); $i=strlen($tmp)-1; $j=strlen($tmp2)-1;
    -while($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i]==$tmp2[$j]) { $i--; $j--; }
    -if (! $res && $i > 0 && file_exists(substr($tmp, 0, ($i+1))."/main.inc.php")) $res=@include(substr($tmp, 0, ($i+1))."/main.inc.php");
    -if (! $res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php")) $res=@include(dirname(substr($tmp, 0, ($i+1)))."/main.inc.php");
    -// Try main.inc.php using relative path
    -if (! $res && file_exists("../main.inc.php")) $res=@include("../main.inc.php");
    -if (! $res && file_exists("../../main.inc.php")) $res=@include("../../main.inc.php");
    -if (! $res && file_exists("../../../main.inc.php")) $res=@include("../../../main.inc.php");
    -if (! $res) die("Include of main fails");
    -
    -include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php');
    -include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php');
    -include_once(DOL_DOCUMENT_ROOT.'/societe/class/societeaccount.class.php');
    -include_once(DOL_DOCUMENT_ROOT.'/website/lib/websiteaccount.lib.php');
    +require '../main.inc.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/societe/class/societeaccount.class.php';
    +require_once DOL_DOCUMENT_ROOT.'/website/lib/websiteaccount.lib.php';
     
     // Load translation files required by the page
     $langs->loadLangs(array("website","other"));
    @@ -59,7 +46,7 @@ $diroutputmassaction=$conf->website->dir_output . '/temp/massgeneration/'.$user-
     $hookmanager->initHooks(array('websiteaccountcard'));     // Note that conf->hooks_modules contains array
     // Fetch optionals attributes and labels
     $extralabels = $extrafields->fetch_name_optionals_label('societeaccount');
    -$search_array_options=$extrafields->getOptionalsFromPost($extralabels,'','search_');
    +$search_array_options=$extrafields->getOptionalsFromPost($object->table_element,'','search_');
     
     // Initialize array of search criterias
     $search_all=trim(GETPOST("search_all",'alpha'));
    @@ -220,12 +207,11 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     	    $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"] . '?id=' . $object->id, $langs->trans('DeleteWebsiteAccount'), $langs->trans('ConfirmDeleteWebsiteAccount'), 'confirm_delete', '', 0, 1);
     	}
     
    -	if (! $formconfirm) {
    -	    $parameters = array('lineid' => $lineid);
    -	    $reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    -	    if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    -	    elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
    -	}
    +	// Call Hook formConfirm
    +	$parameters = array('lineid' => $lineid);
    +	$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
    +	if (empty($reshook)) $formconfirm.=$hookmanager->resPrint;
    +	elseif ($reshook > 0) $formconfirm=$hookmanager->resPrint;
     
     	// Print form confirm
     	print $formconfirm;
    @@ -395,7 +381,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
     	include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';
     }
     
    -
     // End of page
     llxFooter();
     $db->close();
    diff --git a/scripts/accountancy/export-thirdpartyaccount.php b/scripts/accountancy/export-thirdpartyaccount.php
    index 2d557768d7d..ad5d6b72650 100755
    --- a/scripts/accountancy/export-thirdpartyaccount.php
    +++ b/scripts/accountancy/export-thirdpartyaccount.php
    @@ -1,8 +1,9 @@
     #!/usr/bin/env php
     <?php
    -/* Copyright (C) 2013-2014 Olivier Geffroy		<jeff@jeffinfo.com>
    - * Copyright (C) 2013-2014 Alexandre Spangaro	<aspangaro.dolibarr@gmail.com>
    - * Copyright (C) 2014	   Florian Henry		<florian.henry@open-concept.pro>
    +/* Copyright (C) 2013-2014  Olivier Geffroy     <jeff@jeffinfo.com>
    + * Copyright (C) 2013-2014  Alexandre Spangaro  <aspangaro.dolibarr@gmail.com>
    + * Copyright (C) 2014       Florian Henry       <florian.henry@open-concept.pro>
    + * Copyright (C) 2018       Frédéric France     <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -24,14 +25,11 @@
      * \brief		Page to detect empty accounting account
      */
     
    -require_once($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
     
    -$langs->load("companies");
    -$langs->load("compta");
    -$langs->load("main");
    -$langs->load("accountancy");
    +$langs->loadLangs(array("companies", "compta", "main", "accountancy"));
     
     // Security check
     if (!$user->admin)
    @@ -102,7 +100,7 @@ $periodlink = '';
     $exportlink = '';
     
     $nom = $langs->trans("ReportThirdParty");
    -$period = $form->select_date($date_start, 'date_start', 0, 0, 0, '', 1, 0, 1) . ' - ' . $form->select_date($date_end, 'date_end', 0, 0, 0, '', 1, 0, 1);
    +$period = $form->selectDate($date_start, 'date_start', 0, 0, 0, '', 1, 0) . ' - ' . $form->selectDate($date_end, 'date_end', 0, 0, 0, '', 1, 0);
     $description = $langs->trans("DescThirdPartyReport");
     $builddate=dol_now();
     
    diff --git a/scripts/bank/export-bank-receipts.php b/scripts/bank/export-bank-receipts.php
    index 398ec1d7a19..84af2e27f9f 100755
    --- a/scripts/bank/export-bank-receipts.php
    +++ b/scripts/bank/export-bank-receipts.php
    @@ -33,7 +33,7 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     	exit(-1);
     }
     
    -require_once($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
    @@ -108,13 +108,9 @@ if (! empty($newlangid))
     		$outputlangs->setDefaultLang($newlangid);
     	}
     }
    -$outputlangs->load("main");
    -$outputlangs->load("bills");
    -$outputlangs->load("companies");
    -$outputlangs->load("banks");
    -$outputlangs->load("members");
    -$outputlangs->load("compta");
     
    +// Load translation files required by the page
    +$outputlangs->loadLangs(array("main", "companies", "bills", "banks", "members", "compta"));
     
     $acct=new Account($db);
     $result=$acct->fetch('',$bankref);
    diff --git a/scripts/company/export-contacts-xls-example.php b/scripts/company/export-contacts-xls-example.php
    index 5fd7806a26c..c4887cb5ee1 100755
    --- a/scripts/company/export-contacts-xls-example.php
    +++ b/scripts/company/export-contacts-xls-example.php
    @@ -41,13 +41,13 @@ if (! isset($argv[1]) || ! $argv[1]) {
     $now=$argv[1];
     
     
    -require_once($path."../../htdocs/master.inc.php");
    -//require_once(PHP_WRITEEXCEL_PATH."/class.writeexcel_workbook.inc.php");
    -//require_once(PHP_WRITEEXCEL_PATH."/class.writeexcel_worksheet.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
    +//require_once PHP_WRITEEXCEL_PATH."/class.writeexcel_workbook.inc.php";
    +//require_once PHP_WRITEEXCEL_PATH."/class.writeexcel_worksheet.inc.php";
     
    -require_once(PHPEXCEL_PATH."/PHPExcel.php");
    -//require_once(PHPEXCEL_PATH."/PHPExcel/Writer/Excel2007.php");
    -require_once(PHPEXCEL_PATH."/PHPExcel/Writer/Excel5.php");
    +require_once PHPEXCEL_PATH."/PHPExcel.php";
    +//require_once PHPEXCEL_PATH."/PHPExcel/Writer/Excel2007.php";
    +require_once PHPEXCEL_PATH."/PHPExcel/Writer/Excel5.php";
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/scripts/company/sync_contacts_dolibarr2ldap.php b/scripts/company/sync_contacts_dolibarr2ldap.php
    index 900cdbc35ed..32260291aa7 100755
    --- a/scripts/company/sync_contacts_dolibarr2ldap.php
    +++ b/scripts/company/sync_contacts_dolibarr2ldap.php
    @@ -35,10 +35,10 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     }
     
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/contact/class/contact.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/user/class/user.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/contact/class/contact.class.php";
    +require_once DOL_DOCUMENT_ROOT."/user/class/user.class.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/scripts/contracts/email_expire_services_to_customers.php b/scripts/contracts/email_expire_services_to_customers.php
    index 0f5c91817db..43a0b2524e6 100755
    --- a/scripts/contracts/email_expire_services_to_customers.php
    +++ b/scripts/contracts/email_expire_services_to_customers.php
    @@ -50,12 +50,10 @@ $mode=$argv[1];
     $targettype=$argv[2];
     
     
    -require($path."../../htdocs/master.inc.php");
    -require_once (DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php");
    -
    -$langs->load('main');
    -$langs->load('contracts');
    +require $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php";
     
    +$langs->loadLangs(array('main', 'contracts'));
     
     // Global variables
     $version=DOL_VERSION;
    @@ -154,10 +152,9 @@ if ($resql)
                 // Define line content
                 $outputlangs=new Translate('',$conf);
                 $outputlangs->setDefaultLang(empty($obj->default_lang)?$langs->defaultlang:$obj->default_lang);	// By default language of customer
    -            $outputlangs->load("bills");
    -            $outputlangs->load("main");
    -            $outputlangs->load("contracts");
    -    		$outputlangs->load("products");
    +
    +            // Load translation files required by the page
    +            $outputlangs->loadLangs(array("main", "contracts", "bills", "products"));
     
                 if (dol_strlen($newemail))
                 {
    diff --git a/scripts/contracts/email_expire_services_to_representatives.php b/scripts/contracts/email_expire_services_to_representatives.php
    index ad7ccebcba7..a23652a779f 100755
    --- a/scripts/contracts/email_expire_services_to_representatives.php
    +++ b/scripts/contracts/email_expire_services_to_representatives.php
    @@ -48,12 +48,10 @@ if (! isset($argv[1]) || ! $argv[1] || ! in_array($argv[1],array('test','confirm
     $mode=$argv[1];
     
     
    -require($path."../../htdocs/master.inc.php");
    -require_once (DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php");
    -
    -$langs->load('main');
    -$langs->load('contracts');
    +require $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php";
     
    +$langs->loadLangs(array('main', 'contracts'));
     
     // Global variables
     $version=DOL_VERSION;
    @@ -127,10 +125,9 @@ if ($resql)
                 // Define line content
                 $outputlangs=new Translate('',$conf);
                 $outputlangs->setDefaultLang(empty($obj->lang)?$langs->defaultlang:$obj->lang);	// By default language of sale representative
    -            $outputlangs->load("bills");
    -            $outputlangs->load("main");
    -    		$outputlangs->load("contracts");
    -            $outputlangs->load("products");
    +
    +            // Load translation files required by the page
    +            $outputlangs->loadLangs(array("main", "contracts", "bills", "products"));
     
                 if (dol_strlen($obj->email))
                 {
    diff --git a/scripts/cron/cron_run_jobs.php b/scripts/cron/cron_run_jobs.php
    index 4e3cefce5af..861e0e3b2dd 100755
    --- a/scripts/cron/cron_run_jobs.php
    +++ b/scripts/cron/cron_run_jobs.php
    @@ -41,9 +41,9 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     	exit(-1);
     }
     
    -require_once ($path."../../htdocs/master.inc.php");
    -require_once (DOL_DOCUMENT_ROOT."/cron/class/cronjob.class.php");
    -require_once (DOL_DOCUMENT_ROOT.'/user/class/user.class.php');
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/cron/class/cronjob.class.php";
    +require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
     
     // Check parameters
     if (! isset($argv[1]) || ! $argv[1]) {
    @@ -194,7 +194,7 @@ if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0))
     			$result=$cronjob->fetch($line->id);
     			if ($result < 0)
     			{
    -				echo "Error cronjob->fetch: ".$cronjob->error."\n";
    +				echo "Error cronjobid: ".$line->id." cronjob->fetch: ".$cronjob->error."\n";
     				echo "Failed to fetch job ".$line->id."\n";
     				dol_syslog("cron_run_jobs.php::fetch Error ".$cronjob->error, LOG_ERR);
     				exit(-1);
    @@ -203,7 +203,7 @@ if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0))
     			$result=$cronjob->run_jobs($userlogin);
     			if ($result < 0)
     			{
    -				echo "Error cronjob->run_job: ".$cronjob->error."\n";
    +				echo "Error cronjobid: ".$line->id." cronjob->run_job: ".$cronjob->error."\n";
     				echo "At least one job failed. Go on menu Home-Setup-Admin tools to see result for each job.\n";
     				echo "You can also enable module Log if not yet enabled, run again and take a look into dolibarr.log file\n";
     				dol_syslog("cron_run_jobs.php::run_jobs Error ".$cronjob->error, LOG_ERR);
    @@ -218,12 +218,11 @@ if (is_array($qualifiedjobs) && (count($qualifiedjobs)>0))
     			$result=$cronjob->reprogram_jobs($userlogin, $now);
     			if ($result<0)
     			{
    -				echo "Error cronjob->reprogram_job: ".$cronjob->error."\n";
    +				echo "Error cronjobid: ".$line->id." cronjob->reprogram_job: ".$cronjob->error."\n";
     				echo "Enable module Log if not yet enabled, run again and take a look into dolibarr.log file\n";
     				dol_syslog("cron_run_jobs.php::reprogram_jobs Error ".$cronjob->error, LOG_ERR);
     				exit(-1);
     			}
    -
     		}
     		else
     		{
    @@ -245,6 +244,13 @@ exit(0);
     
     
     
    +/**
    + * script cron usage
    + *
    + * @param string $path          path
    + * @param string $script_file   filename
    + * @return void
    + */
     function usage($path,$script_file)
     {
     	global $conf;
    @@ -258,4 +264,3 @@ function usage($path,$script_file)
     	print "For example, to run pending tasks every 5mn, you can add this line:\n";
     	print "*/5 * * * * ".$path.$script_file." securitykey userlogin > ".DOL_DATA_ROOT."/".$script_file.".log\n";
     }
    -
    diff --git a/scripts/emailings/mailing-send.php b/scripts/emailings/mailing-send.php
    index ef9a35fc1ed..52f54a4c7b8 100755
    --- a/scripts/emailings/mailing-send.php
    +++ b/scripts/emailings/mailing-send.php
    @@ -3,7 +3,7 @@
     /*
      * Copyright (C) 2004		Rodolphe Quiedeville	<rodolphe@quiedeville.org>
      * Copyright (C) 2005-2013	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2005-2016	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2005-2016	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -44,9 +44,9 @@ $id=$argv[1];
     if (isset($argv[2]) || !empty($argv[2])) $login = $argv[2];
     else $login = '';
     
    -require_once ($path."../../htdocs/master.inc.php");
    -require_once (DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php");
    -require_once (DOL_DOCUMENT_ROOT."/comm/mailing/class/mailing.class.php");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php";
    +require_once DOL_DOCUMENT_ROOT."/comm/mailing/class/mailing.class.php";
     
     
     // Global variables
    @@ -64,7 +64,6 @@ print "***** ".$script_file." (".$version.") pid=".dol_getmypid()." *****\n";
     
     if ($conf->global->MAILING_LIMIT_SENDBYCLI == '-1')
     {
    -
     }
     
     $user = new User($db);
    @@ -329,7 +328,6 @@ if ($resql)
     								if (!empty($conf->global->MAILING_DELAY)) {
     									sleep($conf->global->MAILING_DELAY);
     								}
    -
     							}
     						}
     						else
    diff --git a/scripts/invoices/email_unpaid_invoices_to_customers.php b/scripts/invoices/email_unpaid_invoices_to_customers.php
    index 02e9db2e0ce..5d49beca851 100755
    --- a/scripts/invoices/email_unpaid_invoices_to_customers.php
    +++ b/scripts/invoices/email_unpaid_invoices_to_customers.php
    @@ -50,8 +50,8 @@ $mode=$argv[1];
     $targettype=$argv[2];
     
     
    -require($path."../../htdocs/master.inc.php");
    -require_once (DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php");
    +require $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php";
     
     $langs->load('main');
     
    @@ -151,8 +151,9 @@ if ($resql)
                 // Define line content
                 $outputlangs=new Translate('',$conf);
                 $outputlangs->setDefaultLang(empty($obj->default_lang)?$langs->defaultlang:$obj->default_lang);	// By default language of customer
    -            $outputlangs->load("bills");
    -            $outputlangs->load("main");
    +
    +            // Load translation files required by the page
    +            $outputlangs->loadLangs(array("main", "bills"));
     
                 if (dol_strlen($newemail))
                 {
    diff --git a/scripts/invoices/email_unpaid_invoices_to_representatives.php b/scripts/invoices/email_unpaid_invoices_to_representatives.php
    index e134d693d74..54be6f8f40c 100755
    --- a/scripts/invoices/email_unpaid_invoices_to_representatives.php
    +++ b/scripts/invoices/email_unpaid_invoices_to_representatives.php
    @@ -48,8 +48,8 @@ if (! isset($argv[1]) || ! $argv[1] || ! in_array($argv[1],array('test','confirm
     $mode=$argv[1];
     
     
    -require($path."../../htdocs/master.inc.php");
    -require_once (DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php");
    +require $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php";
     
     $langs->load('main');
     
    @@ -131,8 +131,9 @@ if ($resql)
                 // Define line content
                 $outputlangs=new Translate('',$conf);
                 $outputlangs->setDefaultLang(empty($obj->lang)?$langs->defaultlang:$obj->lang);	// By default language of sale representative
    -            $outputlangs->load("bills");
    -            $outputlangs->load("main");
    +
    +            // Load translation files required by the page
    +            $outputlangs->loadLangs(array("main", "bills"));
     
                 if (dol_strlen($obj->email))
                 {
    diff --git a/scripts/invoices/rebuild_merge_pdf.php b/scripts/invoices/rebuild_merge_pdf.php
    index 30782d3b913..2c71d9cf750 100755
    --- a/scripts/invoices/rebuild_merge_pdf.php
    +++ b/scripts/invoices/rebuild_merge_pdf.php
    @@ -34,12 +34,12 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     }
     
     // Include Dolibarr environment
    -require_once($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     // After this $db is an opened handler to database. We close it at end of file.
    -require_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/modules/facture/modules_facture.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php");
    -require_once(DOL_DOCUMENT_ROOT.'/core/lib/invoice2.lib.php');
    +require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php";
    +require_once DOL_DOCUMENT_ROOT."/core/modules/facture/modules_facture.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
    +require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice2.lib.php';
     
     
     // Load main language strings
    diff --git a/scripts/members/sync_members_dolibarr2ldap.php b/scripts/members/sync_members_dolibarr2ldap.php
    index a0c393d01c2..e3ca5f38e0a 100755
    --- a/scripts/members/sync_members_dolibarr2ldap.php
    +++ b/scripts/members/sync_members_dolibarr2ldap.php
    @@ -34,9 +34,9 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     	exit(-1);
     }
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
    +require_once DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php";
     
     $langs->load("main");
     
    diff --git a/scripts/members/sync_members_ldap2dolibarr.php b/scripts/members/sync_members_ldap2dolibarr.php
    index e7adb80e733..d7d4fbdeaaf 100755
    --- a/scripts/members/sync_members_ldap2dolibarr.php
    +++ b/scripts/members/sync_members_ldap2dolibarr.php
    @@ -34,15 +34,13 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     	exit(-1);
     }
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/adherents/class/subscription.class.php");
    -
    -$langs->load("main");
    -$langs->load("errors");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
    +require_once DOL_DOCUMENT_ROOT."/adherents/class/adherent.class.php";
    +require_once DOL_DOCUMENT_ROOT."/adherents/class/subscription.class.php";
     
    +$langs->loadLangs(array("main", "errors"));
     
     // Global variables
     $version=DOL_VERSION;
    @@ -301,7 +299,6 @@ if ($result >= 0)
     				//print "yy".dol_print_date($datelast)."\n";
     				$crowid=$member->subscription($datelast, $pricelast, 0);
     			}
    -
     		}
     
     		if (! $error || $forcecommit)
    diff --git a/scripts/members/sync_members_types_dolibarr2ldap.php b/scripts/members/sync_members_types_dolibarr2ldap.php
    index 939a98c8728..dc1570c847f 100755
    --- a/scripts/members/sync_members_types_dolibarr2ldap.php
    +++ b/scripts/members/sync_members_types_dolibarr2ldap.php
    @@ -3,7 +3,7 @@
     /**
      * Copyright (C) 2005	Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2006	Laurent Destailleur		<eldy@users.sourceforge.net>
    - * Copyright (C) 2017	Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2017	Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -41,9 +41,9 @@ if (! isset($argv[1]) || ! $argv[1]) {
     }
     $now=$argv[1];
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent_type.class.php");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
    +require_once DOL_DOCUMENT_ROOT."/adherents/class/adherent_type.class.php";
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/scripts/members/sync_members_types_ldap2dolibarr.php b/scripts/members/sync_members_types_ldap2dolibarr.php
    index 55d5606cd30..cb85e38bd89 100755
    --- a/scripts/members/sync_members_types_ldap2dolibarr.php
    +++ b/scripts/members/sync_members_types_ldap2dolibarr.php
    @@ -4,7 +4,7 @@
      * Copyright (C) 2005		Rodolphe Quiedeville		<rodolphe@quiedeville.org>
      * Copyright (C) 2006-2012	Laurent Destailleur		<eldy@users.sourceforge.net>
      * Copyright (C) 2013		Maxime Kohlhaas			<maxime@atm-consulting.fr>
    - * Copyright (C) 2017		Regis Houssin			<regis.houssin@capnetworks.com>
    + * Copyright (C) 2017		Regis Houssin			<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -36,14 +36,12 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     	exit(-1);
     }
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/adherents/class/adherent_type.class.php");
    -
    -$langs->load("main");
    -$langs->load("errors");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
    +require_once DOL_DOCUMENT_ROOT."/adherents/class/adherent_type.class.php";
     
    +$langs->loadLangs(array("main", "errors"));
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/scripts/modulebuilder/builddoc.php b/scripts/modulebuilder/builddoc.php
    index f2c0eef421f..c0b44a0bed8 100755
    --- a/scripts/modulebuilder/builddoc.php
    +++ b/scripts/modulebuilder/builddoc.php
    @@ -45,7 +45,7 @@ if (! isset($argv[1]) || ! $argv[1]) {
     }
     $modulename=$argv[1];
     
    -require_once ($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
    diff --git a/scripts/modulebuilder/initmodule.php b/scripts/modulebuilder/initmodule.php
    index 6c9801878d3..bee931dc8fa 100755
    --- a/scripts/modulebuilder/initmodule.php
    +++ b/scripts/modulebuilder/initmodule.php
    @@ -41,7 +41,7 @@ if (! isset($argv[1]) || ! $argv[1]) {
     }
     $modulename=$argv[1];
     
    -require_once ($path."../../htdocs/master.inc.php");
    +require_once $path."../../htdocs/master.inc.php";
     require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
     require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
    diff --git a/scripts/product/migrate_picture_path.php b/scripts/product/migrate_picture_path.php
    index d72c60f05e5..eee15cdb7fa 100755
    --- a/scripts/product/migrate_picture_path.php
    +++ b/scripts/product/migrate_picture_path.php
    @@ -37,9 +37,9 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     define('EVEN_IF_ONLY_LOGIN_ALLOWED',1);		// Set this define to 0 if you want to lock your script when dolibarr setup is "locked to admin user only".
     
     // Include and load Dolibarr environment variables
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
     // After this $db, $mysoc, $langs, $conf and $hookmanager are defined (Opened $db handler to database will be closed at end of file).
     // $user is created but empty.
     
    @@ -140,7 +140,6 @@ function migrate_product_photospath($product)
         				{
         					dol_move($origin.'/'.$file, $destin.'/'.$file);
         				}
    -
         			}
         		}
             }
    diff --git a/scripts/product/regenerate_thumbs.php b/scripts/product/regenerate_thumbs.php
    index bc3e1f53a6b..a4d114746c2 100755
    --- a/scripts/product/regenerate_thumbs.php
    +++ b/scripts/product/regenerate_thumbs.php
    @@ -37,10 +37,10 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     define('EVEN_IF_ONLY_LOGIN_ALLOWED',1);		// Set this define to 0 if you want to lock your script when dolibarr setup is "locked to admin user only".
     
     // Include and load Dolibarr environment variables
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/images.lib.php");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/images.lib.php";
     // After this $db, $mysoc, $langs, $conf and $hookmanager are defined (Opened $db handler to database will be closed at end of file).
     // $user is created but empty.
     
    diff --git a/scripts/user/sync_groups_dolibarr2ldap.php b/scripts/user/sync_groups_dolibarr2ldap.php
    index e661a85beb5..ba304305696 100755
    --- a/scripts/user/sync_groups_dolibarr2ldap.php
    +++ b/scripts/user/sync_groups_dolibarr2ldap.php
    @@ -40,9 +40,9 @@ if (! isset($argv[1]) || ! $argv[1]) {
     }
     $now=$argv[1];
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
    +require_once DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php";
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/scripts/user/sync_groups_ldap2dolibarr.php b/scripts/user/sync_groups_ldap2dolibarr.php
    index cb745d9aff3..4063d2f9321 100755
    --- a/scripts/user/sync_groups_ldap2dolibarr.php
    +++ b/scripts/user/sync_groups_ldap2dolibarr.php
    @@ -35,15 +35,13 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     	exit(-1);
     }
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/user/class/user.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php");
    -
    -$langs->load("main");
    -$langs->load("errors");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
    +require_once DOL_DOCUMENT_ROOT."/user/class/user.class.php";
    +require_once DOL_DOCUMENT_ROOT."/user/class/usergroup.class.php";
     
    +$langs->loadLangs(array("main", "errors"));
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/scripts/user/sync_users_dolibarr2ldap.php b/scripts/user/sync_users_dolibarr2ldap.php
    index dd5e3d18de4..fa97c871a50 100755
    --- a/scripts/user/sync_users_dolibarr2ldap.php
    +++ b/scripts/user/sync_users_dolibarr2ldap.php
    @@ -40,9 +40,9 @@ if (! isset($argv[1]) || ! $argv[1]) {
     }
     $now=$argv[1];
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/user/class/user.class.php");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
    +require_once DOL_DOCUMENT_ROOT."/user/class/user.class.php";
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/scripts/user/sync_users_ldap2dolibarr.php b/scripts/user/sync_users_ldap2dolibarr.php
    index 9a04f81c557..320a1f495ad 100755
    --- a/scripts/user/sync_users_ldap2dolibarr.php
    +++ b/scripts/user/sync_users_ldap2dolibarr.php
    @@ -34,14 +34,12 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     	exit(-1);
     }
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php");
    -require_once(DOL_DOCUMENT_ROOT."/core/class/ldap.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/user/class/user.class.php");
    -
    -$langs->load("main");
    -$langs->load("errors");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/core/lib/date.lib.php";
    +require_once DOL_DOCUMENT_ROOT."/core/class/ldap.class.php";
    +require_once DOL_DOCUMENT_ROOT."/user/class/user.class.php";
     
    +$langs->loadLangs(array("main", "errors"));
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/scripts/withdrawals/build_withdrawal_file.php b/scripts/withdrawals/build_withdrawal_file.php
    index d381c32676a..2f7ad26a1fe 100755
    --- a/scripts/withdrawals/build_withdrawal_file.php
    +++ b/scripts/withdrawals/build_withdrawal_file.php
    @@ -34,11 +34,11 @@ if (substr($sapi_type, 0, 3) == 'cgi') {
     	exit(-1);
     }
     
    -require_once($path."../../htdocs/master.inc.php");
    -require_once(DOL_DOCUMENT_ROOT."/compta/prelevement/class/bonprelevement.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php");
    -require_once(DOL_DOCUMENT_ROOT."/compta/paiement/class/paiement.class.php");
    +require_once $path."../../htdocs/master.inc.php";
    +require_once DOL_DOCUMENT_ROOT."/compta/prelevement/class/bonprelevement.class.php";
    +require_once DOL_DOCUMENT_ROOT."/compta/facture/class/facture.class.php";
    +require_once DOL_DOCUMENT_ROOT."/societe/class/societe.class.php";
    +require_once DOL_DOCUMENT_ROOT."/compta/paiement/class/paiement.class.php";
     
     // Global variables
     $version=DOL_VERSION;
    diff --git a/test/phpunit/AccountingAccountTest.php b/test/phpunit/AccountingAccountTest.php
    index 46117b4ff38..8f6014cb43d 100644
    --- a/test/phpunit/AccountingAccountTest.php
    +++ b/test/phpunit/AccountingAccountTest.php
    @@ -223,5 +223,4 @@ class AccountingAccountTest extends PHPUnit_Framework_TestCase
             $this->assertLessThan($result, 0);
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/ActionCommTest.php b/test/phpunit/ActionCommTest.php
    index 7b5a9b23b2d..80bb9687529 100644
    --- a/test/phpunit/ActionCommTest.php
    +++ b/test/phpunit/ActionCommTest.php
    @@ -244,5 +244,4 @@ class ActionCommTest extends PHPUnit_Framework_TestCase
             $this->assertLessThan($result, 0);
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/AdminLibTest.php b/test/phpunit/AdminLibTest.php
    index cc83eefe84e..75139ba8aea 100644
    --- a/test/phpunit/AdminLibTest.php
    +++ b/test/phpunit/AdminLibTest.php
    @@ -166,5 +166,4 @@ class AdminLibTest extends PHPUnit_Framework_TestCase
     		$moduledescriptor->init();
     		$conf->setValues($db);
         }
    -
     }
    diff --git a/test/phpunit/AllTests.php b/test/phpunit/AllTests.php
    index 206d180f700..ee7ec9375d6 100644
    --- a/test/phpunit/AllTests.php
    +++ b/test/phpunit/AllTests.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2010-2012  Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2011-2012  Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2011-2012  Regis Houssin       <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -252,4 +252,3 @@ class AllTests
             return $suite;
         }
     }
    -
    diff --git a/test/phpunit/BankAccountTest.php b/test/phpunit/BankAccountTest.php
    index f6c135158d5..f8917a335ca 100644
    --- a/test/phpunit/BankAccountTest.php
    +++ b/test/phpunit/BankAccountTest.php
    @@ -222,5 +222,4 @@ class BankAccountTest extends PHPUnit_Framework_TestCase
             $this->assertLessThan($result, 0);
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/BonPrelevementTest.php b/test/phpunit/BonPrelevementTest.php
    index de0c3be3416..8c6ffbb585d 100644
    --- a/test/phpunit/BonPrelevementTest.php
    +++ b/test/phpunit/BonPrelevementTest.php
    @@ -76,14 +76,24 @@ class BonPrelevementTest extends PHPUnit_Framework_TestCase
     		print "\n";
     	}
     
    -	// Static methods
    -  	public static function setUpBeforeClass()
    +    /**
    +     * setUpBeforeClass
    +     *
    +     * @return	void
    +     */
    +    public static function setUpBeforeClass()
         {
         	global $conf,$user,$langs,$db;
     		$db->begin();	// This is to have all actions inside a transaction even if test launched without suite.
     
         	print __METHOD__."\n";
         }
    +
    +    /**
    +     * tearDownAfterClass
    +     *
    +     * @return	void
    +     */
         public static function tearDownAfterClass()
         {
         	global $conf,$user,$langs,$db;
    @@ -180,5 +190,4 @@ class BonPrelevementTest extends PHPUnit_Framework_TestCase
         	return $result;
         }
     */
    -
     }
    diff --git a/test/phpunit/BuildDocTest.php b/test/phpunit/BuildDocTest.php
    index cc2ac2339dc..985250aa705 100644
    --- a/test/phpunit/BuildDocTest.php
    +++ b/test/phpunit/BuildDocTest.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2010-2012  Laurent Destailleur <eldy@users.sourceforge.net>
    - * Copyright (C) 2012       Regis Houssin       <regis.houssin@capnetworks.com>
    + * Copyright (C) 2012       Regis Houssin       <regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/test/phpunit/CMailFileTest.php b/test/phpunit/CMailFileTest.php
    index a1c3aff5641..2c511246c48 100755
    --- a/test/phpunit/CMailFileTest.php
    +++ b/test/phpunit/CMailFileTest.php
    @@ -179,23 +179,22 @@ class CMailFileTest extends PHPUnit_Framework_TestCase
             $result=$localobject->getValidAddress($src,3,1);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result,'"=?UTF-8?B?Sm9obiBEb2U=?=" <john@doe.com>');
    -        
    +
             $src='John Doe <john@doe.com>';
             $result=$localobject->getValidAddress($src,4);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result,'John Doe');
    -        
    +
             $src='John Doe <john@doe.com>, John Doe2 <john@doe3.com>, John Doe3 <john@doe2.com>';
             $result=$localobject->getValidAddress($src,4);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result,'John Doe,John Doe2,John Doe3');
    -        
    +
             $src='John Doe <john@doe.com>, John Doe2 <john@doe3.com>, John Doe3 <john@doe2.com>';
             $result=$localobject->getValidAddress($src,4,0,2);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result,'John Doe,John Doe2...');
    -        
    +
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/CategorieTest.php b/test/phpunit/CategorieTest.php
    index 394267d40e1..19440df33db 100644
    --- a/test/phpunit/CategorieTest.php
    +++ b/test/phpunit/CategorieTest.php
    @@ -337,5 +337,4 @@ class CategorieTest extends PHPUnit_Framework_TestCase
             $this->assertTrue(is_array($retarray));
             return $retarray;
         }
    -
     }
    diff --git a/test/phpunit/ChargeSocialesTest.php b/test/phpunit/ChargeSocialesTest.php
    index 8f06564eb1c..cd01fb906e0 100644
    --- a/test/phpunit/ChargeSocialesTest.php
    +++ b/test/phpunit/ChargeSocialesTest.php
    @@ -241,5 +241,4 @@ class ChargeSocialesTest extends PHPUnit_Framework_TestCase
         	$this->assertLessThan($result, 0);
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/CodingSqlTest.php b/test/phpunit/CodingSqlTest.php
    index ee6ad6c674e..349e19a1072 100644
    --- a/test/phpunit/CodingSqlTest.php
    +++ b/test/phpunit/CodingSqlTest.php
    @@ -185,19 +185,16 @@ class CodingSqlTest extends PHPUnit_Framework_TestCase
                     if ($dir == DOL_DOCUMENT_ROOT.'/install/mysql/migration')
                     {
                         // Test for migration files only
    -
                     }
                     elseif ($dir == DOL_DOCUMENT_ROOT.'/install/mysql/data')
                     {
                         // Test for data files only
    -
                     }
                     else
                     {
                         if (preg_match('/\.key\.sql$/',$file))
                         {
                             // Test for key files only
    -
                         }
                         else
                         {
    @@ -249,5 +246,4 @@ class CodingSqlTest extends PHPUnit_Framework_TestCase
     
             return;
         }
    -
     }
    diff --git a/test/phpunit/CommandeFournisseurTest.php b/test/phpunit/CommandeFournisseurTest.php
    index 4fe70eedaee..6a3f7a8696c 100644
    --- a/test/phpunit/CommandeFournisseurTest.php
    +++ b/test/phpunit/CommandeFournisseurTest.php
    @@ -385,5 +385,4 @@ class CommandeFournisseurTest extends PHPUnit_Framework_TestCase
             $this->assertLessThan($result, 0);
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/CommandeTest.php b/test/phpunit/CommandeTest.php
    index 17263e260b7..85e2b972cb5 100644
    --- a/test/phpunit/CommandeTest.php
    +++ b/test/phpunit/CommandeTest.php
    @@ -294,5 +294,4 @@ class CommandeTest extends PHPUnit_Framework_TestCase
             $this->assertLessThan($result, 0);
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/CommonInvoiceTest.php b/test/phpunit/CommonInvoiceTest.php
    new file mode 100644
    index 00000000000..4fab182ad69
    --- /dev/null
    +++ b/test/phpunit/CommonInvoiceTest.php
    @@ -0,0 +1,147 @@
    +<?php
    +/* Copyright (C) 2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    + *
    + * This program is free software; you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation; either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    + * or see http://www.gnu.org/
    + */
    +
    +/**
    + *      \file       test/phpunit/CommonObjectTest.php
    + *      \ingroup    test
    + *      \brief      PHPUnit test
    + *      \remarks    To run this script as CLI:  phpunit filename.php
    + */
    +
    +global $conf,$user,$langs,$db;
    +//define('TEST_DB_FORCE_TYPE','mysql');	// This is to force using mysql driver
    +//require_once 'PHPUnit/Autoload.php';
    +require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
    +require_once dirname(__FILE__).'/../../htdocs/compta/facture/class/facture.class.php';
    +
    +if (empty($user->id)) {
    +    print "Load permissions for admin user nb 1\n";
    +    $user->fetch(1);
    +    $user->getrights();
    +}
    +$conf->global->MAIN_DISABLE_ALL_MAILS=1;
    +
    +
    +/**
    + * Class for PHPUnit tests
    + *
    + * @backupGlobals disabled
    + * @backupStaticAttributes enabled
    + * @remarks	backupGlobals must be disabled to have db,conf,user and lang not erased.
    + */
    +class CommonInvoiceTest extends PHPUnit\Framework\TestCase
    +{
    +    protected $savconf;
    +    protected $savuser;
    +    protected $savlangs;
    +    protected $savdb;
    +
    +    /**
    +     * Constructor
    +     * We save global variables into local variables
    +     *
    +     * @return CommonObjectTest
    +     */
    +    function __construct()
    +    {
    +    	parent::__construct();
    +
    +    	//$this->sharedFixture
    +        global $conf,$user,$langs,$db;
    +        $this->savconf=$conf;
    +        $this->savuser=$user;
    +        $this->savlangs=$langs;
    +        $this->savdb=$db;
    +
    +        print __METHOD__." db->type=".$db->type." user->id=".$user->id;
    +        //print " - db ".$db->db;
    +        print "\n";
    +    }
    +
    +    // Static methods
    +    public static function setUpBeforeClass()
    +    {
    +        global $conf,$user,$langs,$db;
    +        $db->begin(); // This is to have all actions inside a transaction even if test launched without suite.
    +
    +        print __METHOD__."\n";
    +    }
    +
    +    // tear down after class
    +    public static function tearDownAfterClass()
    +    {
    +        global $conf,$user,$langs,$db;
    +        $db->rollback();
    +
    +        print __METHOD__."\n";
    +    }
    +
    +    /**
    +     * Init phpunit tests
    +     *
    +     * @return  void
    +     */
    +    protected function setUp()
    +    {
    +        global $conf,$user,$langs,$db;
    +        $conf=$this->savconf;
    +        $user=$this->savuser;
    +        $langs=$this->savlangs;
    +        $db=$this->savdb;
    +
    +        print __METHOD__."\n";
    +    }
    +    /**
    +     * End phpunit tests
    +     *
    +     * @return  void
    +    */
    +    protected function tearDown()
    +    {
    +        print __METHOD__."\n";
    +    }
    +
    +
    +    /**
    +     *  testFetchUser
    +     *
    +     *  @return void
    +     */
    +    public function testCalculateDateLimReglement()
    +    {
    +        global $conf,$user,$langs,$db;
    +        $conf=$this->savconf;
    +        $user=$this->savuser;
    +        $langs=$this->savlangs;
    +        $db=$this->savdb;
    +
    +        $localobject=new Facture($this->savdb);
    +        $localobject->fetch(1);
    +        $localobject->date = dol_mktime(12, 0, 0, 1, 1, 2010);
    +
    +        $result = 0;
    +
    +        // TODO Insert payment terms
    +
    +
    +        //$result=$localobject->calculate_date_lim_reglement(1);
    +        //print __METHOD__." result=".$result."\n";
    +        $this->assertEquals($result, 0);
    +        return $result;
    +    }
    +}
    diff --git a/test/phpunit/CompanyBankAccountTest.php b/test/phpunit/CompanyBankAccountTest.php
    index 5c72dca72a0..c50935c8aac 100644
    --- a/test/phpunit/CompanyBankAccountTest.php
    +++ b/test/phpunit/CompanyBankAccountTest.php
    @@ -235,5 +235,4 @@ class CompanyBankAccountTest extends PHPUnit_Framework_TestCase
             $this->assertLessThan($result, 0);
             return $localobject->id;
         }
    -
     }
    diff --git a/test/phpunit/ContratTest.php b/test/phpunit/ContratTest.php
    index 7e7dfb64922..74b30e10268 100644
    --- a/test/phpunit/ContratTest.php
    +++ b/test/phpunit/ContratTest.php
    @@ -220,5 +220,4 @@ class ContratTest extends PHPUnit_Framework_TestCase
         	$this->assertLessThan($result, 0);
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/CoreTest.php b/test/phpunit/CoreTest.php
    index 76ea43f9528..63601cb33d3 100644
    --- a/test/phpunit/CoreTest.php
    +++ b/test/phpunit/CoreTest.php
    @@ -252,6 +252,7 @@ class CoreTest extends PHPUnit_Framework_TestCase
     
             // This is code copied from main.inc.php !!!!!!!!!!!!!!!
     
    +        // phpcs:disable PEAR.NamingConventions.ValidFunctionName.NotCamelCaps
             /**
              * Security: SQL Injection and XSS Injection (scripts) protection (Filters on GET, POST, PHP_SELF).
              *
    @@ -259,20 +260,21 @@ class CoreTest extends PHPUnit_Framework_TestCase
              * @param       string $type    1=GET, 0=POST, 2=PHP_SELF
              * @return      int             >0 if there is an injection
              */
    -        function test_sql_and_script_inject($val, $type)
    +        function testSqlAndScriptInject($val, $type)
             {
    +            // phpcs:enable
     		    $inj = 0;
     		    // For SQL Injection (only GET and POST are used to be included into bad escaped SQL requests)
     		    if ($type != 2)
     		    {
    -		        $inj += preg_match('/delete\s+from/i',	 $val);
    -		        $inj += preg_match('/create\s+table/i',	 $val);
    -		        $inj += preg_match('/update.+set.+=/i',  $val);
    -		        $inj += preg_match('/insert\s+into/i', 	 $val);
    -		        $inj += preg_match('/select.+from/i', 	 $val);
    -		        $inj += preg_match('/union.+select/i', 	 $val);
    -		        $inj += preg_match('/into\s+(outfile|dumpfile)/i',  $val);
    -		        $inj += preg_match('/(\.\.%2f)+/i',		 $val);
    +		        $inj += preg_match('/delete\s+from/i', $val);
    +		        $inj += preg_match('/create\s+table/i', $val);
    +		        $inj += preg_match('/update.+set.+=/i', $val);
    +		        $inj += preg_match('/insert\s+into/i', $val);
    +		        $inj += preg_match('/select.+from/i', $val);
    +		        $inj += preg_match('/union.+select/i', $val);
    +		        $inj += preg_match('/into\s+(outfile|dumpfile)/i', $val);
    +		        $inj += preg_match('/(\.\.%2f)+/i', $val);
     		    }
     		    // For XSS Injection done by adding javascript with script
     		    // This is all cases a browser consider text is javascript:
    @@ -308,55 +310,55 @@ class CoreTest extends PHPUnit_Framework_TestCase
             $expectedresult=0;
     
             $_SERVER["PHP_SELF"]='/DIR WITH SPACE/htdocs/admin/index.php?mainmenu=home&leftmenu=setup&username=weservices';
    -        $result=test_sql_and_script_inject($_SERVER["PHP_SELF"], 2);
    -        $this->assertEquals($expectedresult, $result, 'Error on test_sql_and_script_inject 1a');
    +        $result=testSqlAndScriptInject($_SERVER["PHP_SELF"], 2);
    +        $this->assertEquals($expectedresult, $result, 'Error on testSqlAndScriptInject 1a');
     
             // Should detect XSS
             $expectedresult=1;
     
             $_SERVER["PHP_SELF"]='/DIR WITH SPACE/htdocs/admin/index.php?mainmenu=home&leftmenu=setup&username=weservices;badaction';
    -        $result=test_sql_and_script_inject($_SERVER["PHP_SELF"], 2);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject 1b');
    +        $result=testSqlAndScriptInject($_SERVER["PHP_SELF"], 2);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject 1b');
     
             $test="<img src='1.jpg' onerror =javascript:alert('XSS')>";
    -        $result=test_sql_and_script_inject($test, 0);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject aaa');
    +        $result=testSqlAndScriptInject($test, 0);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject aaa');
     
             $test="<img src='1.jpg' onerror =javascript:alert('XSS')>";
    -        $result=test_sql_and_script_inject($test, 2);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject aaa2');
    +        $result=testSqlAndScriptInject($test, 2);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject aaa2');
     
             $test='<IMG SRC=# onmouseover="alert(1)">';
    -        $result=test_sql_and_script_inject($test, 0);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject aaa3');
    +        $result=testSqlAndScriptInject($test, 0);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject aaa3');
             $test='<IMG SRC onmouseover="alert(1)">';
    -        $result=test_sql_and_script_inject($test, 0);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject aaa4');
    +        $result=testSqlAndScriptInject($test, 0);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject aaa4');
             $test='<IMG onmouseover="alert(1)">';
    -        $result=test_sql_and_script_inject($test, 0);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject aaa5');
    +        $result=testSqlAndScriptInject($test, 0);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject aaa5');
             $test='<IMG SRC=/ onerror="alert(1)">';
    -        $result=test_sql_and_script_inject($test, 0);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject aaa6');
    +        $result=testSqlAndScriptInject($test, 0);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject aaa6');
     		$test='<IMG SRC=" &#14;  javascript:alert(1);">';
    -		$result=test_sql_and_script_inject($test, 0);
    -		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject aaa7');
    +		$result=testSqlAndScriptInject($test, 0);
    +		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject aaa7');
     
     		$test='<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>';
    -		$result=test_sql_and_script_inject($test, 0);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject bbb');
    +		$result=testSqlAndScriptInject($test, 0);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject bbb');
     
             $test='<SCRIPT SRC=http://xss.rocks/xss.js></SCRIPT>';
    -        $result=test_sql_and_script_inject($test, 0);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject ccc');
    +        $result=testSqlAndScriptInject($test, 0);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject ccc');
     
             $test='<IMG SRC="javascript:alert(\'XSS\');">';
    -        $result=test_sql_and_script_inject($test, 1);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject ddd');
    +        $result=testSqlAndScriptInject($test, 1);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject ddd');
     
             $test='<IMG """><SCRIPT>alert("XSS")</SCRIPT>">';
    -        $result=test_sql_and_script_inject($test, 0);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject eee');
    +        $result=testSqlAndScriptInject($test, 0);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject eee');
     
             $test='<!-- Google analytics -->
     			<script>
    @@ -369,30 +371,30 @@ class CoreTest extends PHPUnit_Framework_TestCase
     			  ga(\'send\', \'pageview\');
     
     			</script>';
    -        $result=test_sql_and_script_inject($test, 0);
    -        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject eee');
    +        $result=testSqlAndScriptInject($test, 0);
    +        $this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject eee');
     
             $test="<IMG SRC=\"jav\tascript:alert('XSS');\">";		// Is locked by some brwoser like chrome because the default directive no-referrer-when-downgrade is sent when requesting the SRC and then refused because of browser protection on img src load without referrer.
     		$test="<IMG SRC=\"jav&#x0D;ascript:alert('XSS');\">";	// Same
     
     		$test='<SCRIPT/XSS SRC="http://xss.rocks/xss.js"></SCRIPT>';
    -		$result=test_sql_and_script_inject($test, 0);
    -		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject fff1');
    +		$result=testSqlAndScriptInject($test, 0);
    +		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject fff1');
     		$test='<SCRIPT/SRC="http://xss.rocks/xss.js"></SCRIPT>';
    -		$result=test_sql_and_script_inject($test, 0);
    -		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject fff2');
    +		$result=testSqlAndScriptInject($test, 0);
    +		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject fff2');
     
     		// This case seems to be filtered by browsers now.
     		$test='<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert(1)>';
    -		//$result=test_sql_and_script_inject($test, 0);
    -		//$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject ggg');
    +		//$result=testSqlAndScriptInject($test, 0);
    +		//$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject ggg');
     
     		$test='<iframe src=http://xss.rocks/scriptlet.html <';
    -		$result=test_sql_and_script_inject($test, 0);
    -		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject hhh');
    +		$result=testSqlAndScriptInject($test, 0);
    +		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject hhh');
     
     		$test='Set.constructor`alert\x281\x29```';
    -		$result=test_sql_and_script_inject($test, 0);
    -		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on test_sql_and_script_inject iii');
    +		$result=testSqlAndScriptInject($test, 0);
    +		$this->assertGreaterThanOrEqual($expectedresult, $result, 'Error on testSqlAndScriptInject iii');
         }
     }
    diff --git a/test/phpunit/DateLibTest.php b/test/phpunit/DateLibTest.php
    index e0cd1fab31b..d7f2ad18877 100644
    --- a/test/phpunit/DateLibTest.php
    +++ b/test/phpunit/DateLibTest.php
    @@ -464,5 +464,4 @@ class DateLibTest extends PHPUnit_Framework_TestCase
        		$prev = dol_get_first_day_week($day, $month, $year);
     		$this->assertEquals(1, (int) $prev['first_day']);		// sunday for month 2, year 2015 is the 1st
         }
    -
     }
    diff --git a/test/phpunit/DateLibTzFranceTest.php b/test/phpunit/DateLibTzFranceTest.php
    index b41688c153f..b47cdfbfe7b 100644
    --- a/test/phpunit/DateLibTzFranceTest.php
    +++ b/test/phpunit/DateLibTzFranceTest.php
    @@ -201,5 +201,4 @@ class DateLibTzFranceTest extends PHPUnit_Framework_TestCase
     
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/EntrepotTest.php b/test/phpunit/EntrepotTest.php
    index a1fca65fac7..a5ee6139a48 100644
    --- a/test/phpunit/EntrepotTest.php
    +++ b/test/phpunit/EntrepotTest.php
    @@ -257,7 +257,6 @@ class EntrepotTest extends PHPUnit_Framework_TestCase
     
             $localobject=new Entrepot($db);
     
    -
             return;
         }
     }
    diff --git a/test/phpunit/ExpenseReportTest.php b/test/phpunit/ExpenseReportTest.php
    index 9426b2807a9..ed6ddf97fc7 100644
    --- a/test/phpunit/ExpenseReportTest.php
    +++ b/test/phpunit/ExpenseReportTest.php
    @@ -314,5 +314,4 @@ class ExpenseReportTest extends PHPUnit_Framework_TestCase
             $this->assertLessThan($result, 0);
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/ExportTest.php b/test/phpunit/ExportTest.php
    index d9de0a89eef..cf8be11ab17 100644
    --- a/test/phpunit/ExportTest.php
    +++ b/test/phpunit/ExportTest.php
    @@ -130,31 +130,31 @@ class ExportTest extends PHPUnit_Framework_TestCase
         public function testExportOther()
         {
             global $conf,$user,$langs,$db;
    -    
    +
             $model='csv';
    -    
    +
             // Creation of class to export using model ExportXXX
             $dir = DOL_DOCUMENT_ROOT . "/core/modules/export/";
             $file = "export_".$model.".modules.php";
             $classname = "Export".$model;
             require_once $dir.$file;
             $objmodel = new $classname($this->db);
    -    
    +
             // First test without option USE_STRICT_CSV_RULES
             unset($conf->global->USE_STRICT_CSV_RULES);
    -        
    +
             $valtotest='A simple string';
             print __METHOD__." valtotest=".$valtotest."\n";
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result, 'A simple string');
    -        
    +
             $valtotest='A string with , and ; inside';
             print __METHOD__." valtotest=".$valtotest."\n";
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result, '"A string with , and ; inside"');
    -        
    +
             $valtotest='A string with " inside';
             print __METHOD__." valtotest=".$valtotest."\n";
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
    @@ -166,48 +166,47 @@ class ExportTest extends PHPUnit_Framework_TestCase
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result, '"A string with "" inside and \n carriage returns"');
    -        
    +
             $valtotest='A string with <a href="aaa"><strong>html<br>content</strong></a> inside<br>'."\n";
             print __METHOD__." valtotest=".$valtotest."\n";
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result, '"A string with <a href=""aaa""><strong>html<br>content</strong></a> inside"');
    -        
    +
             // Same tests with strict mode
             $conf->global->USE_STRICT_CSV_RULES=1;
    -        
    +
             $valtotest='A simple string';
             print __METHOD__." valtotest=".$valtotest."\n";
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result, 'A simple string');
    -        
    +
             $valtotest='A string with , and ; inside';
             print __METHOD__." valtotest=".$valtotest."\n";
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result, '"A string with , and ; inside"');
    -        
    +
             $valtotest='A string with " inside';
             print __METHOD__." valtotest=".$valtotest."\n";
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result, '"A string with "" inside"');
    -        
    +
             $valtotest='A string with " inside and '."\r\n".' carriage returns';
             print __METHOD__." valtotest=".$valtotest."\n";
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result, "\"A string with \"\" inside and \r\n carriage returns\"");
    -        
    +
             $valtotest='A string with <a href="aaa"><strong>html<br>content</strong></a> inside<br>'."\n";
             print __METHOD__." valtotest=".$valtotest."\n";
             $result = $objmodel->csvClean($valtotest, $langs->charset_output);
             print __METHOD__." result=".$result."\n";
             $this->assertEquals($result, '"A string with <a href=""aaa""><strong>html<br>content</strong></a> inside"');
    -        
         }
    -    
    +
         /**
          * Test export function for a personalized dataset
          *
    @@ -355,5 +354,4 @@ class ExportTest extends PHPUnit_Framework_TestCase
     
             return true;
         }
    -    
     }
    diff --git a/test/phpunit/FactureFournisseurTest.php b/test/phpunit/FactureFournisseurTest.php
    index cda7f9d73f2..63c28945e65 100644
    --- a/test/phpunit/FactureFournisseurTest.php
    +++ b/test/phpunit/FactureFournisseurTest.php
    @@ -268,5 +268,4 @@ class FactureFournisseurTest extends PHPUnit_Framework_TestCase
         	$this->assertLessThan($result, 0);
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/FactureTest.php b/test/phpunit/FactureTest.php
    index d04844783c5..a1dd46de978 100644
    --- a/test/phpunit/FactureTest.php
    +++ b/test/phpunit/FactureTest.php
    @@ -1,5 +1,6 @@
     <?php
    -/* Copyright (C) 2010 Laurent Destailleur  <eldy@users.sourceforge.net>
    +/* Copyright (C) 2010 Laurent Destailleur   <eldy@users.sourceforge.net>
    + * Copyright (C) 2018 Frédéric France       <frederic.france@netlogic.fr>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -228,7 +229,7 @@ class FactureTest extends PHPUnit_Framework_TestCase
     			$newlocalobject,
     			true,
     			array(
    -				'newref','oldref','id','lines','client','thirdparty','brouillon','user_author','date_creation','date_validation','datem',
    +				'newref','oldref','id','lines','client','thirdparty','brouillon','user_author','date_creation','date_validation','datem','date_modification',
     				'ref','statut','paye','specimen','facnumber','actiontypecode','actionmsg2','actionmsg','mode_reglement','cond_reglement',
     				'cond_reglement_doc','situation_cycle_ref','situation_counter','situation_final','multicurrency_total_ht','multicurrency_total_tva',
     				'multicurrency_total_ttc','fk_multicurrency','multicurrency_code','multicurrency_tx'
    diff --git a/test/phpunit/FactureTestRounding.php b/test/phpunit/FactureTestRounding.php
    index 4ed76d900bf..dbaf598e1a0 100644
    --- a/test/phpunit/FactureTestRounding.php
    +++ b/test/phpunit/FactureTestRounding.php
    @@ -335,5 +335,4 @@ class FactureTestRounding extends PHPUnit_Framework_TestCase
         	$this->assertEquals(20.03, $localobject3->total_tva);
         	$this->assertEquals(115.43, $localobject3->total_ttc);
         }
    -
     }
    diff --git a/test/phpunit/FichinterTest.php b/test/phpunit/FichinterTest.php
    index 4d6e1224498..5c966f4d4ec 100644
    --- a/test/phpunit/FichinterTest.php
    +++ b/test/phpunit/FichinterTest.php
    @@ -244,5 +244,4 @@ class FichinterTest extends PHPUnit_Framework_TestCase
         	$this->assertLessThan($result, 0);
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/FilesLibTest.php b/test/phpunit/FilesLibTest.php
    index 4363623adb0..c1a2a21b270 100644
    --- a/test/phpunit/FilesLibTest.php
    +++ b/test/phpunit/FilesLibTest.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2010-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -504,5 +504,4 @@ class FilesLibTest extends PHPUnit_Framework_TestCase
             $user->rights->facture->lire = $savpermlire;
             $user->rights->facture->creer = $savpermcreer;
         }
    -
     }
    diff --git a/test/phpunit/FormAdminTest.php b/test/phpunit/FormAdminTest.php
    index 876e733b56d..10998f7776f 100644
    --- a/test/phpunit/FormAdminTest.php
    +++ b/test/phpunit/FormAdminTest.php
    @@ -138,5 +138,4 @@ class FormAdminTest extends PHPUnit_Framework_TestCase
         	print __METHOD__." result=".$result."\n";
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/Functions2LibTest.php b/test/phpunit/Functions2LibTest.php
    index 87b2eaefe58..a11c50b7198 100644
    --- a/test/phpunit/Functions2LibTest.php
    +++ b/test/phpunit/Functions2LibTest.php
    @@ -140,7 +140,6 @@ class Functions2LibTest extends PHPUnit_Framework_TestCase
          */
         public function testIsValidMailDomain()
         {
    -
         }
     
         /**
    @@ -243,10 +242,9 @@ class Functions2LibTest extends PHPUnit_Framework_TestCase
             print __METHOD__." for ".$ip." result=".$result."\n";
         	$this->assertEquals(2,$result,$ip);
     
    -    	$ip='192.168.0.0';
    -    	$result=is_ip($ip);
    +        $ip='192.168.0.0';
    +        $result=is_ip($ip);
             print __METHOD__." for ".$ip." result=".$result."\n";
    -    	$this->assertEquals(2,$result,$ip);
    -
    +        $this->assertEquals(2,$result,$ip);
         }
     }
    diff --git a/test/phpunit/FunctionsLibTest.php b/test/phpunit/FunctionsLibTest.php
    index 4f7af8b1a1d..daaa0dda2f5 100644
    --- a/test/phpunit/FunctionsLibTest.php
    +++ b/test/phpunit/FunctionsLibTest.php
    @@ -112,7 +112,8 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
     
             print __METHOD__."\n";
         }
    -	/**
    +
    +    /**
     	 * End phpunit tests
     	 *
     	 * @return	void
    @@ -123,6 +124,30 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
         }
     
     
    +    /**
    +     * testIsValidMXRecord
    +     *
    +     * @return void
    +     */
    +    public function testIsValidMXRecord()
    +    {
    +    	// Nb of line is same than entry text
    +
    +    	$input="yahoo.com";
    +    	$result=isValidMXRecord($input);
    +    	print __METHOD__." result=".$result."\n";
    +    	$this->assertEquals(1, $result);
    +
    +    	$input="yhaoo.com";
    +    	$result=isValidMXRecord($input);
    +    	print __METHOD__." result=".$result."\n";
    +    	$this->assertEquals(0, $result);
    +
    +    	$input="dolibarr.fr";
    +    	$result=isValidMXRecord($input);
    +    	print __METHOD__." result=".$result."\n";
    +    	$this->assertEquals(0, $result);
    +    }
     
         /**
          * testDolGetFirstLineOfText
    @@ -367,7 +392,6 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
             $input='This is a text with html comments <!-- comment -->';	// we suppose this is not enough to be html content
             $after=dol_textishtml($input);
             $this->assertFalse($after);
    -
         }
     
     
    @@ -814,7 +838,6 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
             $object->country_code='CA';
             $phone=dol_print_phone('1234567890', $object->country_code, 0, 0, 0, ' ');
             $this->assertEquals('<span style="margin-right: 10px;">(123) 456-7890</span>', $phone, 'Phone for CA 1');
    -
         }
     
     
    @@ -985,7 +1008,6 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
             // Test RULE 5 (FR-US)
             $vat=get_default_tva($companyfr,$companyus,0);
             $this->assertEquals(0,$vat,'RULE 5 ECOMMERCE_200238EC');
    -
         }
     
         /**
    @@ -1095,7 +1117,8 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
     	 *
     	 * @return void
     	 */
    -	public function testDolNl2Br() {
    +    public function testDolNl2Br()
    +    {
     
     		//String to encode
     		$string = "a\na";
    @@ -1186,5 +1209,4 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
     
     		return true;
     	}
    -
     }
    diff --git a/test/phpunit/GetUrlLibTest.php b/test/phpunit/GetUrlLibTest.php
    index 2a6d218dc93..c99f71a972f 100644
    --- a/test/phpunit/GetUrlLibTest.php
    +++ b/test/phpunit/GetUrlLibTest.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2010-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    diff --git a/test/phpunit/HolidayTest.php b/test/phpunit/HolidayTest.php
    index 625e4cf16a3..37684e731d5 100644
    --- a/test/phpunit/HolidayTest.php
    +++ b/test/phpunit/HolidayTest.php
    @@ -351,5 +351,4 @@ class HolidayTest extends PHPUnit_Framework_TestCase
         	$result=$localobjectc->verifDateHolidayCP($user->id, $date_debut, $date_fin, 2);	// start afternoon and end morning
         	$this->assertTrue($result, 'result should be true, there is no overlapping');
         }
    -
     }
    diff --git a/test/phpunit/ImagesLibTest.php b/test/phpunit/ImagesLibTest.php
    index cc4e6bd7462..1083eacf270 100644
    --- a/test/phpunit/ImagesLibTest.php
    +++ b/test/phpunit/ImagesLibTest.php
    @@ -1,6 +1,6 @@
     <?php
     /* Copyright (C) 2010-2012	Laurent Destailleur	<eldy@users.sourceforge.net>
    - * Copyright (C) 2012		Regis Houssin		<regis.houssin@capnetworks.com>
    + * Copyright (C) 2012		Regis Houssin		<regis.houssin@inodbox.com>
      *
      * This program is free software; you can redistribute it and/or modify
      * it under the terms of the GNU General Public License as published by
    @@ -145,5 +145,4 @@ class ImagesLibTest extends PHPUnit_Framework_TestCase
     
     		return 1;
         }
    -
     }
    diff --git a/test/phpunit/ImportTest.php b/test/phpunit/ImportTest.php
    index 0e80b6384e8..52be24049bc 100644
    --- a/test/phpunit/ImportTest.php
    +++ b/test/phpunit/ImportTest.php
    @@ -136,5 +136,4 @@ class ImportTest extends PHPUnit_Framework_TestCase
     
     		return true;
         }
    -
     }
    diff --git a/test/phpunit/LoanTest.php b/test/phpunit/LoanTest.php
    index 8341f788ede..d54c810049d 100644
    --- a/test/phpunit/LoanTest.php
    +++ b/test/phpunit/LoanTest.php
    @@ -214,5 +214,4 @@ class LoanTest extends PHPUnit_Framework_TestCase
         	$this->assertLessThan($result, 0);
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/MarginsLibTest.php b/test/phpunit/MarginsLibTest.php
    index 21c07f7c04a..5966cb65a74 100644
    --- a/test/phpunit/MarginsLibTest.php
    +++ b/test/phpunit/MarginsLibTest.php
    @@ -149,5 +149,4 @@ class MarginsLibTest extends PHPUnit_Framework_TestCase
     
     		return 0;
         }
    -
     }
    diff --git a/test/phpunit/ModulesTest.php b/test/phpunit/ModulesTest.php
    index f034fd7a8b9..006b6dd2740 100755
    --- a/test/phpunit/ModulesTest.php
    +++ b/test/phpunit/ModulesTest.php
    @@ -138,7 +138,7 @@ class ModulesTest extends PHPUnit_Framework_TestCase
     		'Salaries','Service','Skype','Societe','Stock','Stripe','SupplierProposal','Syslog','Tax','Ticket','User','Variants','WebServices','WebServicesClient','Website','Workflow');
     		foreach($modulelist as $modlabel)
     		{
    -    		require_once(DOL_DOCUMENT_ROOT.'/core/modules/mod'.$modlabel.'.class.php');
    +    		require_once DOL_DOCUMENT_ROOT.'/core/modules/mod'.$modlabel.'.class.php';
                 $class='mod'.$modlabel;
         		$mod=new $class($db);
                 $result=$mod->remove();
    @@ -154,5 +154,4 @@ class ModulesTest extends PHPUnit_Framework_TestCase
     
             return 0;
         }
    -
     }
    diff --git a/test/phpunit/MouvementStockTest.php b/test/phpunit/MouvementStockTest.php
    index 2779b3011d6..cc50460e15f 100644
    --- a/test/phpunit/MouvementStockTest.php
    +++ b/test/phpunit/MouvementStockTest.php
    @@ -252,5 +252,4 @@ class MouvementStockTest extends PHPUnit_Framework_TestCase
     
         	return $localobject;
         }
    -
     }
    diff --git a/test/phpunit/NumberingModulesTest.php b/test/phpunit/NumberingModulesTest.php
    index 62ff9f8c342..0d229de8aa0 100644
    --- a/test/phpunit/NumberingModulesTest.php
    +++ b/test/phpunit/NumberingModulesTest.php
    @@ -575,5 +575,4 @@ class NumberingModulesTest extends PHPUnit_Framework_TestCase
     
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/PaypalTest.php b/test/phpunit/PaypalTest.php
    index 59c28be2177..ef6f069e6bf 100644
    --- a/test/phpunit/PaypalTest.php
    +++ b/test/phpunit/PaypalTest.php
    @@ -145,5 +145,4 @@ class PaypalTest extends PHPUnit_Framework_TestCase
     
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/PricesTest.php b/test/phpunit/PricesTest.php
    index f7c7fa00354..1c7b05d462b 100755
    --- a/test/phpunit/PricesTest.php
    +++ b/test/phpunit/PricesTest.php
    @@ -353,5 +353,4 @@ class PricesTest extends PHPUnit_Framework_TestCase
             //$this->assertEquals(0.25,$newlocalobject->total_tva);
             //$this->assertEquals(2.73,$newlocalobject->total_ttc);
         }
    -
     }
    diff --git a/test/phpunit/ProjectTest.php b/test/phpunit/ProjectTest.php
    index ea7cf01c328..2779902cabd 100644
    --- a/test/phpunit/ProjectTest.php
    +++ b/test/phpunit/ProjectTest.php
    @@ -239,5 +239,4 @@ class ProjectTest extends PHPUnit_Framework_TestCase
         	$this->assertLessThan($result, 0);
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/PropalTest.php b/test/phpunit/PropalTest.php
    index 1ee429509a3..81842063271 100644
    --- a/test/phpunit/PropalTest.php
    +++ b/test/phpunit/PropalTest.php
    @@ -293,5 +293,4 @@ class PropalTest extends PHPUnit_Framework_TestCase
         	$this->assertLessThan($result, 0);
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/RestAPIDocumentTest.php b/test/phpunit/RestAPIDocumentTest.php
    index 74225bea2d3..e9606b001b9 100644
    --- a/test/phpunit/RestAPIDocumentTest.php
    +++ b/test/phpunit/RestAPIDocumentTest.php
    @@ -96,6 +96,7 @@ class RestAPIDocumentTest extends PHPUnit_Framework_TestCase
     
         /**
          * Init phpunit tests.
    +     * @return void
          */
         protected function setUp()
         {
    @@ -127,6 +128,7 @@ class RestAPIDocumentTest extends PHPUnit_Framework_TestCase
     
         /**
          * End phpunit tests.
    +     * @return void
          */
         protected function tearDown()
         {
    diff --git a/test/phpunit/RestAPIUserTest.php b/test/phpunit/RestAPIUserTest.php
    index 4d461ce235d..7b2d345a41a 100644
    --- a/test/phpunit/RestAPIUserTest.php
    +++ b/test/phpunit/RestAPIUserTest.php
    @@ -175,7 +175,13 @@ class RestAPIUserTest extends PHPUnit_Framework_TestCase
           $this->assertEquals(1, $object['statut']);
         }
     
    -    public function testRestCreateUser() {
    +    /**
    +     * testRestCreateUser
    +     *
    +     * @return void
    +     */
    +    public function testRestCreateUser()
    +    {
     
           // attemp to create without mandatory fields :
           $url = $this->api_url.'/users?api_key='.$this->api_key;
    @@ -225,5 +231,4 @@ class RestAPIUserTest extends PHPUnit_Framework_TestCase
           $this->assertNotNull($object, "Parsing of json result must no be null");
           $this->assertEquals(500, $object['error']['code'], $object['error']['code'].' '.$object['error']['message']);
         }
    -
    -}
    \ No newline at end of file
    +}
    diff --git a/test/phpunit/SecurityTest.php b/test/phpunit/SecurityTest.php
    index 6e614032a73..21e25473b8f 100644
    --- a/test/phpunit/SecurityTest.php
    +++ b/test/phpunit/SecurityTest.php
    @@ -296,5 +296,4 @@ class SecurityTest extends PHPUnit_Framework_TestCase
     		$result=restrictedArea($user,'societe');
     		$this->assertEquals(1,$result);
         }
    -
     }
    diff --git a/test/phpunit/SocieteTest.php b/test/phpunit/SocieteTest.php
    index af924d233a9..3e9ee3c2002 100755
    --- a/test/phpunit/SocieteTest.php
    +++ b/test/phpunit/SocieteTest.php
    @@ -457,5 +457,4 @@ class SocieteTest extends PHPUnit_Framework_TestCase
     
             return $localobjectadd->id;
         }
    -
     }
    diff --git a/test/phpunit/SupplierProposalTest.php b/test/phpunit/SupplierProposalTest.php
    index 2428bd6d441..3648e0e61da 100644
    --- a/test/phpunit/SupplierProposalTest.php
    +++ b/test/phpunit/SupplierProposalTest.php
    @@ -31,7 +31,7 @@ require_once dirname(__FILE__).'/../../htdocs/supplier_proposal/class/supplier_p
     
     if (empty($user->id))
     {
    -	print "Load permissions for admin user nb 1\n";
    +	print "Load permissions for user nb 1 (that should be admin)\n";
     	$user->fetch(1);
     
     	//$user->addrights(0, 'supplier_proposal');
    @@ -112,7 +112,12 @@ class SupplierProposalTest extends PHPUnit_Framework_TestCase
     
     		print __METHOD__."\n";
     		//print $db->getVersion()."\n";
    +
    +		// Set permission not set by default sql sample
    +		$user->addrights(0, 'supplier_proposal');
    +		$user->getrights('supplier_proposal', 1);
         }
    +
     	/**
     	 * End phpunit tests
     	 *
    @@ -212,7 +217,7 @@ class SupplierProposalTest extends PHPUnit_Framework_TestCase
     		$langs=$this->savlangs;
     		$db=$this->savdb;
     
    -    	$result=$localobject->valid($user);
    +		$result=$localobject->valid($user);
     
         	print __METHOD__." id=".$localobject->id." result=".$result."\n";
         	$this->assertLessThan($result, 0);
    @@ -273,5 +278,4 @@ class SupplierProposalTest extends PHPUnit_Framework_TestCase
         	$this->assertLessThan($result, 0);
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/UserGroupTest.php b/test/phpunit/UserGroupTest.php
    index b1e9b3bb43f..a74e9d81726 100644
    --- a/test/phpunit/UserGroupTest.php
    +++ b/test/phpunit/UserGroupTest.php
    @@ -285,5 +285,4 @@ class UserGroupTest extends PHPUnit_Framework_TestCase
             $this->assertLessThan($result, 0);
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/UtilsTest.php b/test/phpunit/UtilsTest.php
    index e9c3ede729b..f2f44daa31d 100644
    --- a/test/phpunit/UtilsTest.php
    +++ b/test/phpunit/UtilsTest.php
    @@ -148,7 +148,4 @@ class UtilsTest extends PHPUnit_Framework_TestCase
             print __METHOD__." result=".$result."\n";
             return $result;
         }
    -
    -
    -
     }
    diff --git a/test/phpunit/WebservicesInvoicesTest.php b/test/phpunit/WebservicesInvoicesTest.php
    index adc202abd74..92a336c846e 100644
    --- a/test/phpunit/WebservicesInvoicesTest.php
    +++ b/test/phpunit/WebservicesInvoicesTest.php
    @@ -28,7 +28,7 @@ global $conf,$user,$langs,$db;
     //require_once 'PHPUnit/Autoload.php';
     require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
     require_once dirname(__FILE__).'/../../htdocs/core/lib/date.lib.php';
    -require_once(NUSOAP_PATH.'/nusoap.php');        // Include SOAP
    +require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     
     
     if (empty($user->id))
    @@ -93,6 +93,11 @@ class WebservicesInvoicesTest extends PHPUnit_Framework_TestCase
     		print "\n";
     	}
     
    +    /**
    +     * setUpBeforeClass
    +     *
    +     * @return void
    +     */
         public static function setUpBeforeClass()
         {
             global $conf,$user,$langs,$db;
    @@ -133,6 +138,11 @@ class WebservicesInvoicesTest extends PHPUnit_Framework_TestCase
             print __METHOD__."\n";
         }
     
    +    /**
    +     * tearDownAfterClass
    +     *
    +     * @return void
    +     */
         public static function tearDownAfterClass()
         {
         	global $conf,$user,$langs,$db;
    @@ -420,5 +430,4 @@ class WebservicesInvoicesTest extends PHPUnit_Framework_TestCase
     
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/WebservicesOrdersTest.php b/test/phpunit/WebservicesOrdersTest.php
    index bdd4b138803..a155e5de973 100644
    --- a/test/phpunit/WebservicesOrdersTest.php
    +++ b/test/phpunit/WebservicesOrdersTest.php
    @@ -28,7 +28,7 @@ global $conf,$user,$langs,$db;
     //require_once 'PHPUnit/Autoload.php';
     require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
     require_once dirname(__FILE__).'/../../htdocs/core/lib/date.lib.php';
    -require_once(NUSOAP_PATH.'/nusoap.php');        // Include SOAP
    +require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     
     
     if (empty($user->id)) {
    @@ -180,5 +180,4 @@ class WebservicesOrdersTest extends PHPUnit_Framework_TestCase
     
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/WebservicesOtherTest.php b/test/phpunit/WebservicesOtherTest.php
    index 2feecf7df0e..16b1cd7d531 100644
    --- a/test/phpunit/WebservicesOtherTest.php
    +++ b/test/phpunit/WebservicesOtherTest.php
    @@ -28,7 +28,7 @@ global $conf,$user,$langs,$db;
     //require_once 'PHPUnit/Autoload.php';
     require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
     require_once dirname(__FILE__).'/../../htdocs/core/lib/date.lib.php';
    -require_once(NUSOAP_PATH.'/nusoap.php');        // Include SOAP
    +require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     
     
     if (empty($user->id)) {
    @@ -209,5 +209,4 @@ class WebservicesOtherTest extends PHPUnit_Framework_TestCase
     
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/WebservicesProductsTest.php b/test/phpunit/WebservicesProductsTest.php
    index 0127414627c..60c90ea30d4 100644
    --- a/test/phpunit/WebservicesProductsTest.php
    +++ b/test/phpunit/WebservicesProductsTest.php
    @@ -30,7 +30,7 @@ global $conf,$user,$langs,$db;
     //require_once 'PHPUnit/Autoload.php';
     require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
     require_once dirname(__FILE__).'/../../htdocs/core/lib/date.lib.php';
    -require_once(NUSOAP_PATH.'/nusoap.php');        // Include SOAP
    +require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     
     
     if (empty($user->id)) {
    @@ -324,5 +324,4 @@ class WebservicesProductsTest extends PHPUnit_Framework_TestCase
     
             return 0;
         }
    -
     }
    diff --git a/test/phpunit/WebservicesThirdpartyTest.php b/test/phpunit/WebservicesThirdpartyTest.php
    index 1cf7cc4e8d6..51be1a5dbf6 100644
    --- a/test/phpunit/WebservicesThirdpartyTest.php
    +++ b/test/phpunit/WebservicesThirdpartyTest.php
    @@ -28,7 +28,7 @@ global $conf,$user,$langs,$db;
     //require_once 'PHPUnit/Autoload.php';
     require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
     require_once dirname(__FILE__).'/../../htdocs/core/lib/date.lib.php';
    -require_once(NUSOAP_PATH.'/nusoap.php');        // Include SOAP
    +require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     
     
     if (empty($user->id)) {
    @@ -400,5 +400,4 @@ class WebservicesThirdpartyTest extends PHPUnit_Framework_TestCase
     
         	return $result;
         }
    -
     }
    diff --git a/test/phpunit/WebservicesUserTest.php b/test/phpunit/WebservicesUserTest.php
    index cdd65b7bc7b..3c97ee719a9 100644
    --- a/test/phpunit/WebservicesUserTest.php
    +++ b/test/phpunit/WebservicesUserTest.php
    @@ -28,7 +28,7 @@ global $conf,$user,$langs,$db;
     //require_once 'PHPUnit/Autoload.php';
     require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
     require_once dirname(__FILE__).'/../../htdocs/core/lib/date.lib.php';
    -require_once(NUSOAP_PATH.'/nusoap.php');        // Include SOAP
    +require_once NUSOAP_PATH.'/nusoap.php';        // Include SOAP
     
     
     if (empty($user->id)) {
    @@ -208,5 +208,4 @@ class WebservicesUserTest extends PHPUnit_Framework_TestCase
     
             return $result;
         }
    -
     }
    diff --git a/test/phpunit/XCalLibTest.php b/test/phpunit/XCalLibTest.php
    index 932f68aa18d..165b8d247b2 100644
    --- a/test/phpunit/XCalLibTest.php
    +++ b/test/phpunit/XCalLibTest.php
    @@ -139,5 +139,4 @@ class XCalLibTest extends PHPUnit_Framework_TestCase
             print __METHOD__." result=".$resultback."\n";
             $this->assertEquals($stringtoencode,$resultback);
         }
    -
     }
    diff --git a/test/phpunit/functional/InstallTest.php b/test/phpunit/functional/InstallTest.php
    index 534d1d602c0..f444d08eec0 100644
    --- a/test/phpunit/functional/InstallTest.php
    +++ b/test/phpunit/functional/InstallTest.php
    @@ -42,6 +42,11 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		)
     	);
     
    +    /**
    +     * setUpBeforeClass
    +     *
    +     * @return	void
    +     */
     	public static function setUpBeforeClass()
     	{
     		// Make sure we backup and remove the configuration file to force new install.
    @@ -54,12 +59,22 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		self::shareSession(true);
     	}
     
    +    /**
    +     * dropTestDatabase
    +     *
    +     * @return	void
    +     */
     	protected static function dropTestDatabase()
     	{
     		$mysqli = new mysqli(self::$db_host, self::$db_admin_user, self::$db_admin_pass);
     		$mysqli->query("DROP DATABASE " . self::$db_name);
     	}
     
    +    /**
    +     * tearDownAfterClass
    +     *
    +     * @return	void
    +     */
     	public static function tearDownAfterClass()
     	{
     		// Remove the generated configuration and restore the backed up file.
    @@ -70,6 +85,11 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		self::dropTestDatabase();
     	}
     
    +    /**
    +     * setUp
    +     *
    +     * @return  void
    +     */
     	public function setUp()
     	{
     		// Populating the database can take quite long.
    @@ -77,17 +97,32 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		$this->setBrowserUrl(self::$url);
     	}
     
    +    /**
    +     * testInstallRedirect
    +     *
    +     * @return  void
    +     */
     	public function testInstallRedirect()
     	{
     		$this->url('/');
     		$this->assertContains('/install/index.php', $this->url());
     	}
     
    +    /**
    +     * testInstallPageTitle
    +     *
    +     * @return  void
    +     */
     	public function testInstallPageTitle()
     	{
     		$this->assertContains('Dolibarr', $this->title());
     	}
     
    +    /**
    +     * testInstallProcess
    +     *
    +     * @return  void
    +     */
     	public function testInstallProcess()
     	{
     		// FIXME: the button itself should have an ID
    @@ -95,6 +130,11 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		$this->assertContains('/install/check.php', $this->url());
     	}
     
    +    /**
    +     * testCheckPage
    +     *
    +     * @return  void
    +     */
     	public function testCheckPage()
     	{
     		$unavailable_choices = $this->byId('navail_choices');
    @@ -109,6 +149,11 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		$this->assertContains('/install/fileconf.php', $this->url());
     	}
     
    +    /**
    +     * testForm
    +     *
    +     * @return  void
    +     */
     	public function testForm()
     	{
     		$this->assertFalse($this->byClassName('hideroot')->displayed());
    @@ -153,12 +198,22 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		$this->byId('db_pass_root')->value('');
     	}
     
    +    /**
    +     * testFormSubmit
    +     *
    +     * @return  void
    +     */
     	public function testFormSubmit()
     	{
     		$this->byName('forminstall')->submit();
     		$this->assertContains('/install/step1.php', $this->url());
     	}
     
    +    /**
    +     * testStep1
    +     *
    +     * @return  void
    +     */
     	public function testStep1()
     	{
     		$this->assertFalse($this->byId('pleasewait')->displayed());
    @@ -170,6 +225,11 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		$this->assertContains('/install/step2.php', $this->url());
     	}
     
    +    /**
    +     * testStep2
    +     *
    +     * @return  void
    +     */
     	public function testStep2()
     	{
     		$this->byName('forminstall')->submit();
    @@ -178,6 +238,11 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     
     	// There is no step 3
     
    +    /**
    +     * testStep4
    +     *
    +     * @return  void
    +     */
     	public function testStep4()
     	{
     		// FIXME: should have an ID
    @@ -191,6 +256,11 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		$this->assertContains('/install/step5.php', $this->url());
     	}
     
    +    /**
    +     * testStep5
    +     *
    +     * @return  void
    +     */
     	public function testStep5()
     	{
     		// FIXME: this button should have an ID
    @@ -198,6 +268,11 @@ class InstallTest extends PHPUnit_Extensions_Selenium2TestCase
     		$this->assertContains('/admin/index.php', $this->url());
     	}
     
    +    /**
    +     * testFirstLogin
    +     *
    +     * @return  void
    +     */
     	public function testFirstLogin()
     	{
     		$this->assertEquals('login', $this->byTag('form')->attribute('id'));
    diff --git a/test/phpunit/functional/TakePosFunctionalTest.php b/test/phpunit/functional/TakePosFunctionalTest.php
    new file mode 100644
    index 00000000000..b01d86eda10
    --- /dev/null
    +++ b/test/phpunit/functional/TakePosFunctionalTest.php
    @@ -0,0 +1,317 @@
    +<?php
    +/* Copyright (C) 2007-2017 Laurent Destailleur  <eldy@users.sourceforge.net>
    + * Copyright (C) 2018 SuperAdmin
    + *
    + * This program is free software: you can redistribute it and/or modify
    + * it under the terms of the GNU General Public License as published by
    + * the Free Software Foundation, either version 3 of the License, or
    + * (at your option) any later version.
    + *
    + * This program is distributed in the hope that it will be useful,
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    + * GNU General Public License for more details.
    + *
    + * You should have received a copy of the GNU General Public License
    + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    + */
    +
    +/**
    + * \file    test/functional/TakePosFunctionalTest.php
    + * \ingroup takepos
    + * \brief   Example Selenium test.
    + */
    +
    +namespace test\functional;
    +
    +use PHPUnit_Extensions_Selenium2TestCase_WebDriverException;
    +
    +/**
    + * Class TakePosFunctionalTest
    + *
    + * Requires chromedriver for Google Chrome
    + * Requires geckodriver for Mozilla Firefox
    + *
    + * @fixme Firefox (Geckodriver/Marionette) support
    + * @todo Opera linux support
    + * @todo Windows support (IE, Google Chrome, Mozilla Firefox, Safari)
    + * @todo OSX support (Safari, Google Chrome, Mozilla Firefox)
    + *
    + * @package Testtakepos
    + */
    +class TakePosFunctionalTest extends \PHPUnit_Extensions_Selenium2TestCase
    +{
    +	// TODO: move to a global configuration file?
    +	/** @var string Base URL of the webserver under test */
    +	protected static $base_url = 'http://dev.zenfusion.fr';
    +	/**
    +	 * @var string Dolibarr admin username
    +	 * @see authenticate
    +	 */
    +	protected static $dol_admin_user = 'admin';
    +	/**
    +	 * @var string Dolibarr admin password
    +	 * @see authenticate
    +	 */
    +	protected static $dol_admin_pass = 'admin';
    +	/** @var int Dolibarr module ID */
    +	private static $module_id = 500000; // TODO: autodetect?
    +
    +	/** @var array Browsers to test with */
    +	public static $browsers = array(
    +		array(
    +			'browser' => 'Google Chrome on Linux',
    +			'browserName' => 'chrome',
    +			'sessionStrategy' => 'shared',
    +			'desiredCapabilities' => array()
    +		),
    +		// Geckodriver does not keep the session at the moment?!
    +		// XPath selectors also don't seem to work
    +//        array(
    +//            'browser' => 'Mozilla Firefox on Linux',
    +//            'browserName' => 'firefox',
    +//            'sessionStrategy' => 'shared',
    +//            'desiredCapabilities' => array(
    +//                'marionette' => true
    +//            )
    +//        )
    +	);
    +
    +	/**
    +	 * Helper function to select links by href
    +	 *
    +	 * @param  string  $value      Href
    +	 * @return mixed               Helper string
    +	 */
    +	protected function byHref($value)
    +	{
    +		$anchor = null;
    +		$anchors = $this->elements($this->using('tag name')->value('a'));
    +		foreach ($anchors as $anchor) {
    +			if (strstr($anchor->attribute('href'), $value)) {
    +				break;
    +			}
    +		}
    +		return $anchor;
    +	}
    +
    +	/**
    +	 * Global test setup
    +	 *
    +	 * @return	void
    +	 */
    +	public static function setUpBeforeClass()
    +	{
    +	}
    +
    +	/**
    +	 * Unit test setup
    +	 *
    +	 * @return	void
    +	 */
    +	public function setUp()
    +	{
    +		$this->setSeleniumServerRequestsTimeout(3600);
    +		$this->setBrowserUrl(self::$base_url);
    +	}
    +
    +	/**
    +	 * Verify pre conditions
    +	 *
    +	 * @return	void
    +	 */
    +	protected function assertPreConditions()
    +	{
    +	}
    +
    +	/**
    +	 * Handle Dolibarr authentication
    +	 *
    +	 * @return	void
    +	 */
    +	private function authenticate()
    +	{
    +		try {
    +			if ($this->byId('login')) {
    +				$login = $this->byId('username');
    +				$login->clear();
    +				$login->value('admin');
    +				$password = $this->byId('password');
    +				$password->clear();
    +				$password->value('admin');
    +				$this->byId('login')->submit();
    +			}
    +		} catch (PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {
    +			// Login does not exist. Assume we are already authenticated
    +		}
    +	}
    +
    +	/**
    +	 * Test enabling developer mode
    +	 *
    +	 * @return	void
    +	 */
    +	public function testEnableDeveloperMode()
    +	{
    +		$this->url('/admin/const.php');
    +		$this->authenticate();
    +		$main_features_level_path='//input[@value="MAIN_FEATURES_LEVEL"]/following::input[@type="text"]';
    +		$main_features_level = $this->byXPath($main_features_level_path);
    +		$main_features_level->clear();
    +		$main_features_level->value('2');
    +		$this->byName('update')->click();
    +		// Page reloaded, we need a new XPath
    +		$main_features_level = $this->byXPath($main_features_level_path);
    +		$this->assertEquals('2', $main_features_level->value(), "MAIN_FEATURES_LEVEL value is 2");
    +	}
    +
    +	/**
    +	 * Test enabling the module
    +	 *
    +	 * @return	void
    +	 *
    +	 * @depends testEnableDeveloperMode
    +	 */
    +	public function testModuleEnabled()
    +	{
    +		$this->url('/admin/modules.php');
    +		$this->authenticate();
    +		$module_status_image_path='//a[contains(@href, "' . self::$module_id . '")]/img';
    +		$module_status_image = $this->byXPath($module_status_image_path);
    +		if (strstr($module_status_image->attribute('src'), 'switch_off.png')) {
    +			// Enable the module
    +			$this->byHref('modTakePos')->click();
    +		} else {
    +			// Disable the module
    +			$this->byHref('modTakePos')->click();
    +			// Reenable the module
    +			$this->byHref('modTakePos')->click();
    +		}
    +		// Page reloaded, we need a new Xpath
    +		$module_status_image = $this->byXPath($module_status_image_path);
    +		$this->assertContains('switch_on.png', $module_status_image->attribute('src'), "Module enabled");
    +	}
    +
    +	/**
    +	 * Test access to the configuration page
    +	 *
    +	 * @return	void
    +	 *
    +	 * @depends testModuleEnabled
    +	 */
    +	public function testConfigurationPage()
    +	{
    +		$this->url('/custom/takepos/admin/setup.php');
    +		$this->authenticate();
    +		$this->assertContains('takepos/admin/setup.php', $this->url(), 'Configuration page');
    +	}
    +
    +	/**
    +	 * Test access to the about page
    +	 *
    +	 * @return	void
    +	 *
    +	 * @depends testConfigurationPage
    +	 */
    +	public function testAboutPage()
    +	{
    +		$this->url('/custom/takepos/admin/about.php');
    +		$this->authenticate();
    +		$this->assertContains('takepos/admin/about.php', $this->url(), 'About page');
    +	}
    +
    +	/**
    +	 * Test about page is rendering Markdown
    +	 *
    +	 * @return	void
    +	 *
    +	 * @depends testAboutPage
    +	 */
    +	public function testAboutPageRendersMarkdownReadme()
    +	{
    +		$this->url('/custom/takepos/admin/about.php');
    +		$this->authenticate();
    +		$this->assertEquals(
    +			'Dolibarr Module Template (aka My Module)',
    +			$this->byTag('h1')->text(),
    +			"Readme title"
    +		);
    +	}
    +
    +	/**
    +	 * Test box is properly declared
    +	 *
    +	 * @return	void
    +	 *
    +	 * @depends testModuleEnabled
    +	 */
    +	public function testBoxDeclared()
    +	{
    +		$this->url('/admin/boxes.php');
    +		$this->authenticate();
    +		$this->assertContains('takeposwidget1', $this->source(), "Box enabled");
    +	}
    +
    +	/**
    +	 * Test trigger is properly enabled
    +	 *
    +	 * @return	void
    +	 *
    +	 * @depends testModuleEnabled
    +	 */
    +	public function testTriggerDeclared()
    +	{
    +		$this->url('/admin/triggers.php');
    +		$this->authenticate();
    +		$this->assertContains(
    +			'interface_99_modTakePos_TakePosTriggers.class.php',
    +			$this->byTag('body')->text(),
    +			"Trigger declared"
    +		);
    +	}
    +
    +	/**
    +	 * Test trigger is properly declared
    +	 *
    +	 * @return	void
    +	 *
    +	 * @depends testTriggerDeclared
    +	 */
    +	public function testTriggerEnabled()
    +	{
    +		$this->url('/admin/triggers.php');
    +		$this->authenticate();
    +		$this->assertContains(
    +			'tick.png',
    +			$this->byXPath('//td[text()="interface_99_modTakePos_MyTrigger.class.php"]/following::img')->attribute('src'),
    +			"Trigger enabled"
    +		);
    +	}
    +
    +	/**
    +	 * Verify post conditions
    +	 *
    +	 * @return	void
    +	 */
    +	protected function assertPostConditions()
    +	{
    +	}
    +
    +	/**
    +	 * Unit test teardown
    +	 *
    +	 * @return	void
    +	 */
    +	public function tearDown()
    +	{
    +	}
    +
    +	/**
    +	 * Global test teardown
    +	 *
    +	 * @return	void
    +	 */
    +	public static function tearDownAfterClass()
    +	{
    +	}
    +}